PMMEXEC CSY/ M O N I T O R C15 P€1_%NAM MMEXEC_'DECK-ID C15 MSOS 4.1_-SUMMARY-079_^1*_$EXECUTIVE FOR MASS MEMORY RESIDENT I/O DRIVERS_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIF._^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1****************************************************_^1*_]_^1*_*THIS ROUTINE IS THE CORE RESIDENT INTERFACE_^1*_€€*FOR ALL I/O DRIVERS WHICH RESIDENT ON_^1*_*MASS MEMORY._^1*_]_^1*_*THIS PROGRAM MANAGES 1 OR 2 INTERNAL BUFFERS._^1*_*THE I/O DRIVERS ARE READ INTO THE BUFFER AREA_^1*_*WHEN THEY HAVE I/O TO PERFORM, OR QUEUES THE_^1*_*DRIVER INTERNALLY WHEN NO BUFFER IS AVAILABLE._^1*_]_^1*_*THE ROUTINE MAY BE ENTERED AT ANY PRIORITY LEVEL._^1*_*THE LEVEL IS ALWAYS CORRECTED, IF REQUIRED,_^1*_*TO€€ THE OPERATING LEVEL OF THE PROGRAM._^1****************************************************_^1_%SPC 2_^1*_]_^1*_$LOCORE EQUS_^1*_]_^1_%SPC 1_^1_%EQU LPMSK(3)_^1_%EQU ONEBIT($23)_^1_%EQU AFNR($B5)_^1_%EQU ADISP($EA)_^1_%EQU PRILVL($EF)_^1_%EQU AMONI($F4)_^1_%SPC 1_^1_%SPC 2_^1*_]_^1*_$ENTRY POINTS_^1*_]_^1_%ENT MASDRV,MASEXT,MASCON,MASERR_^1_%ENT MAS300_^1_%ENT RELBYQ_^€€1_%SPC 2_^1*_]_^1*_$EXTERNALS_^1*_]_^1_%EXT ALTDEV,LOG1A_^1_%EXT LOG_^1_%EXT BUFF,BUFFE_"BUFFERS FOR DRIVERS_^1_%SPC 2_^1*_]_^1*_$PHYSICAL DEVICE TABLE EQUS_^1*_]_^1_%EQU ELU(5)_^1_%EQU EWES(7)_^1_%EQU ESTAT1(9)_^1_%EQU MASLGN(13)_^1_%EQU MASSEC(14)_^1_%SPC 2_^1*_]_^1*_$INTERNAL EQUS_^1*_]_^1_%EQU ERCODE(29)_^1_%EQU OPLVL(8)_^1_%EQU MSKBNM(LPMSK)_^1_%EJT_]_^1MASDRV ST€€Q- I_,INITIATOR FOR MM DRIVERS_^1_%RTJ* LEVLIT_'SET LEVEL FOR OPERATION_^1_%JMP* SAMLV1_'SAME LEVEL_^1_%RTJ- ($F4)_(MONI CALL_^1_%ADC $52F0+OPLVL_!SCHEDULE AT PROPER LEVEL_^1_%ADC SAMLV1_^1_%JMP- ($EA)_(CALL DISPATCHER_^1SAMLV1 STQ- I_,PDT TO I_^1_%RTJ* FINDIT_'FIND IF IN CORE ALREADY_^1_%SQP 1_^1_%JMP* NOTIN_^1_%LDA BFSTAT,Q_$STATUS OF DRIVER, Q = INDEX OF BUFFER 0-1_^1_%SAM €€EXIT_)IT IS COMING, NOT THERE YET, EXIT_^1_%SAN GOTOIT_'IN CORE AND ACTIVE. GO TO IT_^1CHECK1 RTJ CHECKL_'CHECK LENGTH_^1IN_#RAO BFSTAT,Q_$IN CORE Q = BUFFER INDEX_^1GOTOIT LDA- I_^1_%STA BUFPDT,Q_$UPDATE RECORD OF LAST PDT USED_^1_%LDA- (I)_^1_%IIN 0_^1_%STA* DRVLVL_^1_%RTJ- (AMONI)_%SCHEDULE STARTER AT DRIVER LEVEL_^1DRVLVL NUM $520A_(SCHEDULE REQUEST, Q = BUFFER INDEX_^1_€€%ADC STRTUP_^1EXIT_!JMP- (ADISP)_%EXIT_^1NOTIN LDQ NXTBUF_'INITIALIZE INDEX_^1_%STQ* BUFNUM_^1_%LDA* BFSTAT,Q_$GET BUFFER STATUS_^1_%SAZ GOT1_)INACTIVE, CAN USE_^1_%RTJ* SWITCH_'SWITCH_^1_%LDA* BFSTAT,Q_$BUFFER STATUS_^1_%SAZ GOT1_)THIS ONE OPEN_^1_%JMP QUEIT_^1GOT1_!RTJ CHECKL_'CHECK LENGTH_^1_%ENA -1_^1_%STA* BFSTAT,Q_$SET COMING_^1_%LDA- I_^1_%STA* BUFPDT,Q_$SAVE PDT ADD€€RESS_^1_%LDA- MASSEC,I_^1_%STA* OCUPNT,Q_$SAVE MASS MEMORY ADDRESS OCCUPANT_^1_%LDA- MASLGN,I_$LENGTH_^1_%STA* TEMP_)TEMP, NO WORDS_^1_%STQ- I_,INDEX TO I_^1_%MUI* SIGN,I_'*_!0 OR -1_^1_%ADD* BUFADR,I_$TO GET START OF DRIVER_^1_%STA* BUFSTR,I_^1_%LDQ* INCRMT,I_$DETERMINE WHICH FREAD CALL_^1_%STA* STAR1,Q_%STARTING ADDRESS_^1_%LDA =N0_^1TEMP_!EQU TEMP(*-1)_^1_%STA* N1,Q_)STORE N€€O WORDS_^1_%LDA* OCUPNT,I_$MM ADDRESS_^1_%STA* MM1,Q_^1_%JMP* READ1,Q_^1READ1 RTJ- (AMONI)_^1_%ADC $48F0+OPLVL_!FREAD_^1_%ADC R0CMP_(CCOMPLETION_^1_%NUM 0_,THREAD_^1_%NUM $8C2_)LIB. UNIT IN LOCORE_^1N1_#NUM 0_,NO WORDS_^1STAR1 NUM 0_,STARTING ADDRESS_^1_%NUM 0_,MSB_^1MM1_"NUM 0_,LSB_^1_%JMP* SWICUM_^1READ2 RTJ- (AMONI)_^1_%ADC $48F0+OPLVL_!FREAD_^1_%ADC R1CMP_(COMPLETI€€ON_^1_%NUM 0_,THREAD_^1_%NUM $8C2_)LIB. UNIT_^1N2_#NUM 0_,NO WORDS_^1STAR2 NUM 0_,STARTING ADDRESS_^1_%NUM 0_,MSB_^1MM2_"NUM 0_,LSB_^1SWICUM LDQ- I_,RESTORE BUFFER INDEX_^1_%RTJ* SWITCH_^1_%STQ* NXTBUF_'PROBABLE NEXT BUFFER TO USE_^1_%JMP- (ADISP)_%EXIT_^1_%SPC 3_^1*_]_^1*_*SWITCH BUFFER SUBROUTINE_^1*_*INDEX IN Q_^1*_*INDEX IN Q_^1*_*ACCOUT FOR SINGEL OR DOUBLE BUFFER_^1SW€€ITCH NUM 0_,ENTRY_^1_%INQ 1_,BUMP 1_^1_%TRQ A_^1_%AND- MSKBNM_'MASK FOR MAX 0,1_^1_%TRA Q_,DUPLICATE_^1_%STA* BUFNUM_'UPDATE CURRENT_^1_%JMP* (SWITCH)_$RETURN_^1_%SPC 2_^1*_]_^1_%NUM 0_,NO WORDS_^1_%NUM 0_,STARTING ADDRESS_^1*_*AND WHICH END_^1_%NUM 0_,LSB_^1FINDIT NUM 0_,ENTRY_^1_%IIN 0_,INHIBIT, USED BY MASCON, MAY NOT BE OPLVL_^1_%ENQ 0_^1LOOP1 LDA* OCUPNT,Q_$GET OCC€€UPANTS MASSEC_^1_%EOR- MASSEC,I_$DIFFERENCE WITH CURRENT DRIVER_^1_%SAN NOTHIS_'NO MATCH_^1EXTFND STQ* BUFNUM_^1_%EIN 0_^1_%JMP* (FINDIT)_$RETURN CALLER_^1NOTHIS RTJ* SWITCH_^1_%SAZ ALLCHK_'ALL HAVE BEEN CHECK_^1_%JMP* LOOP1_(ONE MORE_^1ALLCHK ENQ -0_+NO FIND IN BUFFERS, NOT IN CORE_^1_%JMP* EXTFND_^1*_]_^1*_*CORRECT PRIORITY LEVEL IF NECESSARY_^1*_]_^1_%SPC 1_^1LEVLIT NUM 0_€€,ENTRY_^1_%IIN 0_^1_%LDQ- I_,PDT ADDRESS_^1_%LDA- PRILVL_'CURRENT SYSTEM LEVEL_^1_%INA -OPLVL_^1_%SAZ LEVLRT_'SAME PRIORITY_^1_%RAO* LEVLIT_'NOT SAME, GO TO SCHED CALL_^1LEVLRT EIN 0_^1_%JMP* (LEVLIT)_$RETURN_^1_%SPC 2_^1R0CMP ENA 0_,COMPLETION FOR 0_^1_%JMP* R1CMP+1_^1R1CMP ENA 1_,COMPLETION FOR 1_^1_%SQM BADXFR_'Q MINUS FOR I/O ERROR_^1_%TRA Q_,NO ERROR_^1_%LDA* BUFP€€DT,Q_^1_%STA- I_,RESTORE PDT ADDRESS_^1_%RAO* BFSTAT,Q_$IN AN INACTIVE STATE_^1_%JMP IN_^1BADXFR TRA Q_,FAILED TRANSFER_^1_%LDA* BUFPDT,Q_^1_%STA- I_,RESTORE PDT ADDRESS_^1_%ENA 0_^1_%STA* OCUPNT,Q_$MAKE UNOCCUPIED_^1_%STA* BFSTAT,Q_^1_%RTJ- (AFNR)_'FIND NEXT REQUEST, SET UP PDT_^1_%NOP 0_^1_%LDA- ESTAT1,I_^1_%EOR- ONEBIT+15_#SET ERROR BIT_^1_%STA- ESTAT1,I_^1_%LDQ- ELU,I_(LOGI€€CAL UNIT_^1_%QLS 6_^1_%ENA ERCODE_'ERROR CODE_^1_%AAQ Q_,TOTAL CODE IN Q FOR ALTDEV_^1_%RTJ+ LOG_*GO LOG ERROR_^1_%RTJ- (AMONI)_%SCHEDULE_^1_%ADC $52F0+OPLVL_!AT CURRENT LEVEL_^1_%ADC ALTDEV_'ALTERNATE DEVICE HANDLER_^1_%SPC 1_^1*_]_^1*_$CONTINUE AS IF EXIT FROM DRIVER_^1*_$FIND ANY WAITING DRIVERS_^1*_]_^1_%JMP* MASEXT_^1_%SPC 2_^1*_]_^1*_$WORKING AREA_^1*_]_^1_%SPC 1_^1BF€€STAT NUM 0_,BUFFER STATUS- 0 = INACTIVE_^1_%NUM 0_;1 = COMING OR ACTIVE_^1_%SPC 1_^1BUFPDT ADC 0,0_*PDT FOR RESPECTIVE BUFFER_^1_%SPC 1_^1OCUPNT BZS OCUPNT(2)_#MM ADDRESS OF DRIVER IN BUFFER_^1_%SPC 1_^1BUFNUM NUM 0_,BUFFER BEING PROCESSED, 0-1_^1_%SPC 1_^1SIGN_!NUM 0,-1_)* LENGTH + BUFADR = START OF DRIVER_^1_%SPC 1_^1BUFADR ADC BUFF_)BUFFER ADDRESSES,_^1_%ADC BUFFE_€€(SEE -SIGN-_^1_%SPC 1_^1NXTQUE NUM 0_,NEXT QUE SLOT_^1NXTXCT NUM 0_,NEXT TO EXECUTE_^1_%SPC 1_^1NXTBUF NUM 0_,NEXT BUFFER TO USE, 0-1_^1_%SPC 1_^1INCRMT ADC 0,READ2-READ1 INCREMENT TO PROPER READ CALL_^1_%SPC 1_^1BUFSTR ADC BUFF,*-*_$START OF DRIVER_^1_%SPC 1_^1QUE_"BZS QUE(8)_'PDT ADDRESSES OF WAITING DRIVERS_^1_%SPC 1_^1QUEMM BZS QUEMM(8)_$MM ADDRESS OF PDT IN QUE_€€^1*_]_^1_%SPC 1_^1*_]_^1*_$RELEASE BUFFER OF PDT IN --Q--, USED BY ADEV_^1*_]_^1RELBYQ STQ- I_,SAVE Q FOR RELEASE_^1_%SPC 1_^1*_$DRIVERS EXIT HERE WHEN THEY HAVE SERVICED_^1*_$ALL REQUESTS ON ALL LOGICAL UNITS THEY CONTROL_^1*_]_^1*_$I -- CONTAINS PDT ADDRESS_^1*_]_^1MASEXT RTJ* LEVLIT_'CORRECT PRIORITY LEVEL_^1_%EQU MAS300(MASEXT)_^1_%JMP* SAMLV2_'SAME LEVEL_^1_%RTJ- ($F4)_(MON€€I CALL_^1_%ADC $52F0+OPLVL_!SCHEDULE AT PROPER LEVEL_^1_%ADC SAMLV2_^1_%JMP- ($EA)_(CALL DISPATCHER_^1SAMLV2 STQ- I_,PDT TO I_^1_%RTJ* FINDIT_'FIND BUFFER CONTAINING DRIVER_^1_%SQP OKIN_^1_%LDA- I_^1_%STA* NOFIND_'SAVE PDT FOR DEBUG_^1_%JMP- (ADISP)_^1NOFIND ADC *-*_*LAST PDT OF DRIVER RELEASING WHEN NOT IN_^1OKIN_!LDA* BFSTAT,Q_^1_%STQ* NXTBUF_^1_%INA -1_+DECREMENT REQUEST_^1€€_%STA* BFSTAT,Q_^1_%SAZ ALDONE_'NO NEW WAITING_^1_%JMP GOTOIT_^1ALDONE STQ* TEMP1_(SAVE INDEX -TEMP-_^1_%LDQ* BUFPDT,Q_$GET PDT_^1_%LDA* NUSED_(TOTAL WORDS NOW IN USE_^1_%SUB- MASLGN,Q_$MINUS LENGTH THIS DRIVER_^1_%STA* NUSED_(NEW TOTAL_^1_%LDQ+ LOG1A_(GET NO. LOGICAL UNITS_^1ALOGIA EQU ALOG1A(*-1)_!ADDRESS OF LOGIA_^1LOOP2 STQ TEMP_^1_%LDQ* (ALOG1A),Q_"GET PDT ADDRESS_^1_%LDA€€- MASSEC,Q_$GET SECTOR_^1_%EOR- MASSEC,I_$DIFFERENCE OF ONE EXITING_^1_%EOR- MASLGN,Q_$CHECK LENGTHS SAME TOO_^1_%EOR- MASLGN,I_^1_%SAZ 1_,THIS DEVICE MATCHES MINE_^1_%JMP* NOSAME_'THIS IS NOT SAME DRIVER_^1_%IIN 0_^1_%LDA- ELU,Q_(GET ASSIGNED LU_^1_%SAZ NOASGN_'NOT ASSIGNED_^1_%EIN 0_^1_%LDQ =N0_^1TEMP1 EQU TEMP1(*-1)_"TEMP STORAGE FOR SLOT INDEX_^1_%JMP CHECK1_'ASSIGNED G€€O REINITIATE_^1NOASGN EQU NOASGN(*)_^1_%LDA =XMASDRV_$SAME RESET ADDRESS_^1_%STA- 1,Q_*--- INITIATOR_^1_%LDA =XMASCON_^1_%STA- 2,Q_*--- CONTINUATOR_^1_%LDA =XMASERR_^1_%STA- 3,Q_*--- DIAGNOSTIC TIME OUT_^1_%EIN 0_^1NOSAME LDQ TEMP_^1_%INQ -1_+DECREMENT COUNTER_^1_%SQZ DONRES_'ALL SEARCHED_^1_%JMP* LOOP2_(MORE TO SEARCH_^1DONRES LDQ* NXTXCT_'INDEX OF NEXT TO EXECUTE_^1_%LDA*€€ QUE,Q_^1_%SAN ONEWAT_^1_%LDQ* BUFNUM_^1_%RTJ SWITCH_^1_%STQ* NXTBUF_^1_%JMP- (ADISP)_%NONE QUED, EXIT_^1ONEWAT STA- I_^1_%ENA 0_^1_%STA* QUE,Q_(CLEAR QUEUE SLOT_^1_%RTJ* BUMPQ_^1_%STA* NXTXCT_'UPDATE_^1_%LDQ* BUFNUM_'GET BUFFER NUMBER_^1_%JMP GOT1_^1_%SPC 3_^1*_]_^1*_$QUE IT ROUTINE_^1*_]_^1_%SPC 1_^1QUEIT LDQ* NXTXCT_'GET INITIAL INDEX_^1LOOP3 LDA* QUE,Q_^1_%SAN OCCPID_^€€1_%LDA- I_,UNOCCUPIED QUE SLOT, AND NO PREVIOUS ENTRY_^1_%STA* QUE,Q_(PUT THIS ONE IN IT_^1_%LDA- MASSEC,I_$SAVE MASS MEMORY ADDRESS_^1_%STA* QUEMM,Q_^1_%RTJ* BUMPQ_^1_%STQ* NXTQUE_^1_%JMP- (ADISP)_%EXIT_^1OCCPID LDA* QUEMM,Q_^1_%EOR- MASSEC,I_$DIFFERENCE OF MM ADDRESSES_^1_%SAN BMPQUE_'NOT SAME, BUT_^1_%JMP- (ADISP)_%THIS DRIVER ALREADY QUED, EXIT_^1BMPQUE RTJ* BUMPQ_^1_%EOR* NXT€€XCT_'TEST ALL SLOTS CHECKED_^1_%SAZ NOQUE_(ALL CHECKED_^1_%JMP* LOOP3_^1*_]_^1*_$SHOULD WAIT IN SCHEDULE STACK_^1*_]_^1_%SPC 1_^1NOQUE LDQ- I_,PASS PDT ADDRESS_^1DOWNLK RTJ- (AMONI)_^1_%NUM $5202_(SCHEDULE LEVEL 2 WAIT_^1_%ADC SCRCHQ_^1_%JMP- (ADISP)_^1_%SPC 2_^1SCRCHQ STQ- I_,LEVEL 2 WAITING FOR QUE SLOT_^1_%LDQ* NXTQUE_^1_%LDA* QUE,Q_^1_%LDQ- I_,RESTORE PDT_^1_%SAZ BACKUP_€€'OPEN BACK_^1_%JMP* DOWNLK_'RESCHEDULE_^1BACKUP JMP MASDRV_'QUEUE OPEN, GO QUE THIS DRIVER_^1_%STQ- I_,PDT TO I_^1_%JMP* QUEIT_(GO QUE IT_^1*_]_^1*_$START UP DRIVER_^1*_$Q = PDT ADDR._^1*_$A = ADDRESS OF DRIVER_^1*_]_^1STRTUP IIN 0_^1_%LDA BUFSTR,Q_$GET STARTING ADDRESS_^1_%STA* GOADR_^1_%LDQ BUFPDT,Q_$GET PDT_^1_%EIN 0_^1_%JMP+ 0_^1GOADR EQU GOADR(*-1)_^1BUMPQ NUM 0_^1_%T€€RQ A_^1_%INA 1_,BUMP INDEX_^1_%AND- LPMSK+2_^1_%TRA Q_^1_%JMP* (BUMPQ)_^1_%SPC 3_^1*_]_^1*_$ROUTINE TO CHECK LENGTH OF ALL DRIVERS_^1*_*USING BUFF_^1*_]_^1_%SPC 1_^1CHECKL NUM 0_,SUBROUTINE ENTRY_^1_%LDA BUFADR+1_$END ADDRESS_^1_%SUB BUFADR_'= TOTAL AVAIL_^1_%SUB* NUSED_(MINUS NO USED = REMAIN AVAILABLE_^1_%SUB- MASLGN,I_^1_%SAP GOTNUF_'HAVE ROOM THIS DRIVER_^1_%JMP* QUEIT€€_(WON'T FIT NOW, QUE IT_^1GOTNUF LDA* NUSED_^1_%ADD- MASLGN,I_^1_%STA* NUSED_(NUMBER OF WORDS NOW IN USE_^1_%JMP* (CHECKL)_$RETURN_^1NUSED NUM 0_,NUMBER OF WORDS IN USE_^1_%SPC 3_^1*_]_^1*_$THIS ROUTINE RESPONDS TO INTERRUPTS_^1*_$FOR DRIVERS WHICH ARE NOT CURRENTLY IN CORE_^1*_]_^1*_$THIS MUST BE CONSIDERED A GHOST INTERRUPT SITUATION_^1*_]_^1*_$OR THE INTERRUPT RESPONSE IS USI€€NG A PDT_^1*_$ADDRESS OTHER THAN THE ACTIVE ONE_^1_%SPC 1_^1MASCON IIN 0_,IIN FOR FINDIT_^1_%STQ- I_,PDT TO I_^1_%STQ* LASTPT_'DIAG SAVE_^1_%RTJ FINDIT_'DETERMINE IF DRIVER IN CORE_^1_%IIN 0_,IIN AGAIN, FINDIT DOES EIN_^1_%SQP OKIN1_(IN, BUT PDT MUST BE OTHER THAN INT RESPONSE_^1_%SPC 1_^1*_$NOT IN CORE_^1_%SPC 1_^1NOTINC EQU NOTINC(*)_^1_%EIN 0_^1_%LDQ- EWES,Q_'EQUIP_^1_%€€LDA- $1D_^1_%LAQ Q_-MASK CONVERTER $F100_^1_%ADQ- $2E_*ADD $800_^1_%INP 1_,NMA AND TERMINATE IF BUFFERED_^1_%NOP 0_^1_%LDQ- EWES,I_'GET EQUIP CODE_^1_%ENA 2_^1_%OUT 0_,ACK INT_^1_%RAO* INTCNT_'BUMP COUNT_^1_%JMP- (ADISP)_^1_%SPC 2_^1OKIN1 LDA BFSTAT,Q_^1_%SAN 1_,IS ACTIVE_^1_%JMP* NOTINC_'A GHOST TREAT AS NOT IN CORE_^1_%LDQ BUFPDT,Q_$USE PDT ADDRESS LAST USED_^1_%LDA- 2,€€Q_*GET CONTINUATOR_^1_%STA* ADDCON_^1_%LDQ- I_,RESTORE PDT_^1_%EIN 0_^1_%JMP+ 0_,JMP TO CURRENTLY DEFINED CONTINUATOR_^1ADDCON EQU ADDCON(*-1)_^1INTCNT NUM 0_,COUNTER OF GI_^1LASTPT NUM 0_,LAST PDT ADDRESS OF GI_^1_%SPC 3_^1*_]_^1*_$THIS ROUTINE RESPONDS TO A DIAGNOSTIC TIMEOUT_^1*_$OF A DRIVER WHICH IS NOT RESIDENT IN THE BUFFER_^1*_]_^1_%SPC_]_^1MASERR STQ* LASTER_^1_%LDQ- E€ΐLU,Q_^1_%QLS 6_,ERROR CODE OF 0_^1_%RAO* ERRCNT_^1_%RTJ+ LOG_*GO LOG ERROR_^1_%JMP+ ALTDEV_^1LASTER NUM 0_,PDT ADDRESS OF LAST TIMEOUT_^1ERRCNT NUM 0_,COUNT OF TIMEOUT ERRORS_^1_%END_]_^__ΐPDMP42X CSY/ H02 P€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, RELAT€€IVE ADDRESS,_^1*_;AND SIXTEEN WORDS PRINTED PER LINE_^1*_84. LINES WHOSE SIXTEEN WORDS ARE SAME AS_^1*_;LAST PRINTED WORD ARE IGNORED BY_^1*_;PRINTING A ROW OF ASTERISKS_^1*_85. PRINTS 60 LINES PER PAGE,HANGS WHEN DONE_^1*_]_^1_%ENT COUTV4_^1COUTV4 NOP 0_^1_%STA STRADR_'SAVE CURRENT,STARTING AND ENDING ADDRESSES_^1_%STA CURADR_^1_%STQ ENDADR_^1_%RTJ STATUS_'WAIT UNTIL STATUS €€OK_^1*_]_^1NXTPAG ENA $40_*TOP OF FORM_^1_%RTJ OUTPUT_^1_%ENA_!-60_^1_%STA LINCTR_^1_%ENA 0_^1_%STA HEXCTR_^1_%ENQ -1_^1_(LDA =N$4142_^1_%RTJ* RPTOUT_'OUTPUT AB_^1_%ENQ -1_^1_%LDA =N$534C_^1_%RTJ* RPTOUT_'OUTPUT SL_^1_%ENQ -1_^1_%LDA* TWOSPC_^1_%RTJ* RPTOUT_'OUTPUT TWO SPACES_^1_%ENQ -1_^1_%LDA =N$2052_^1_%RTJ* RPTOUT_'OUTPUT R_^1_%ENQ -1_^1_%LDA =N$454C_^1_%RTJ* RPTO€€UT_'OUTPUT EL_^1_%ENQ -4_^1*_]_^1HEDFLD LDA* TWOSPC_'NEXT HEADING FIELD_^1_%RTJ* RPTOUT_'OUTPUT CORRECT NUMBER OF SPACES_^1_%ENA $F_+NEXT HEADING WORD_^1_%AND* CURADR_^1_%ADD* HEXCTR_'GET ABSOLUTE HEXADECIMAL DIGIT_^1_%ALS 4_^1_%EOR* HEXCTR_'GET RELATIVE HEXADECIMAL DIGIT_^1_%ALS 8_^1_%RTJ* OUT2CH_'OUTPUT ABSOLUTE AND RELATIVE HEX DIGIT HEADING_^1_%RAO* HEXCTR_^1_%LDA* HEXCTR_^€€1_%INA -$10_)INCREMENT HEX COLUMN COUNTER, IS IT $10_^1_%SAP HEDDON_*YES, ENTIRE HEADING HAS BEEN OUTPUT_^1_%ENQ -2_.NO, OUTPUT NEXT HEADING FIELD_^1_%JMP* HEDFLD_^1HEDDON RTJ* PRTSPC_'PRINT HEADING FIELD AND SPACE TO NEXT LINE_^1_%JMP* NXTLIN_'OUTPUT THIS LINE_^1_%EJT_]_^1CHKLIN ENA 0_,CHECK LINE IF ALL WORDS SAME AS LAST WORD_^1_%STA* HEXCTR_'SET HEX COLUMN COUNTER_^1*_]_^1CH€€KFLD 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 ENA 1_^1_%RTJ* OUTPUT_^1_%ENQ -57_^1_%STQ* IGNFLG_'SET IGNORE FLAG_^1_%LDA* TWOASK_^1_%RTJ* RPTOUT_'OUTPUT A ROW OF ASTERISKS_^1_%RAO* LINCTR_*INCREMENT LINE COUNTER_^1_%JMP* PRTLIN_'PRINT ROW OF AS€€TERISKS_^1*_]_^1NXTCHK JMP* CHKFLD_^1*_]_^1NXTLIN ENA 1_^1_%RTJ* OUTPUT_^1_%LDA* CURADR_^1_%RTJ* OUTFLD_'OUTPUT CURRENT ABSOLUTE ADDRESS_^1_%LDA* CURADR_^1_%SUB* STRADR_^1_%RTJ* OUTFLD_'OUTPUT CURRENT RELATIVE ADDRESS_^1_%ENQ -2_^1_%LDA* TWOSPC_^1_%RTJ* RPTOUT_'OUTPUT A SPACER FIELD_^1_%ENA 0_^1_%STA* HEXCTR_'SET HEX COLUMN COUNTER_^1_%STA* IGNFLG_'RESET IGNORE FLAG_^1*_]_^1NXTF€€LD 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 ALS 8_^1_%RTJ* OUTPUT_^1_%LDA* WRDSAV_^1_%RTJ* OUTPUT_^1_%LDA* WRDSAV_^1_%RAO* RPTCTR_^1_%LDQ* RPTCTR_'INCREMENT REPEAT COUNTER, IS IT ZERO_€€^1_%SQP RPTEXT_*YES, ALL DONE, EXIT_^1_%JMP* RPTAGN_*NO, REPEAT AGAIN_^1RPTEXT JMP* (RPTOUT)_^1_%SPC 2_^1PRTSPC 000 000_*PRINT LINE AND SPACE TO THE NEXT LINE_^1_%ENA $20_*PRINT_^1_%RTJ* OUTFCT_^1_%JMP* (PRTSPC)_^1_%SPC 2_^1TWOSPC NUM $2020_(TWO SPACES_^1ENDADR NUM $8000_(ENDING ADDRESS + 1_^1STRADR NUM 0_,STARTING ADDRESS_^1CURADR NUM 0_,CURRENT ADDRESS_^1HEXCTR NUM 0_,H€€EX 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_^1TWOASK NUM $2A2A_(TWO ASTERISKS_^1WESSTA NUM $0201_(HARDWARE ADDRESS (STATUS)_"(EQ 4)_^1FFFE_!NUM $FFFE_^1_%SPC 2_^1OUTFLD 000 000_*OUTPUT NEXT FIELD_^1_%STA* LSTWRD_*SAVE LAST WORD OUTPUT_^1_%€€RTJ* OUT2CH_'OUTPUT FIRST TWO CHARACTERS_^1_%LDA* LSTWRD_^1_%ALS 8_^1_%RTJ* OUT2CH_'OUTPUT LAST TWO CHARACTERS_^1_%LDA* TWOSPC_^1_%ENQ -1_^1_%RTJ* RPTOUT_^1_%JMP* (OUTFLD)_^1_%SPC 2_^1OUT2CH 000 000_*OUTPUT TWO HEX CHARACTERS_^1_%ENQ 0_/CHARACTERS IN BITS 8-15 OF A_^1_%LLS 4_^1_%ALS 4_,PUT FIRST CHARACTER IN Q AND SECOND ONE IN A_^1_%AND =N$F_^1*_]_^1_%INQ -$A_^1_%SQP 1_,€€CONVERT FIRST CHARACTER TO ASCII_^1_%INQ +$3A-$41_^1_%INQ $41_^1*_]_^1_%INA -$A_^1_%SAP 1_,CONVERT SECOND CHARACTER TO ASCII_^1_%INA +$3A-$41_^1_%INA $41_^1*_]_^1_%QLS 8_,COMBINE BOTH ASCII CHARACTERS IN A_^1_%EAQ A_^1_%ENQ -1_^1_%RTJ* RPTOUT_^1_%JMP* (OUT2CH)_^1_%EJT_]_^1OUTPUT 000 000_*OUTPUT TWO ASCII CHARACTERS_^1_%LDQ* WESSTA_'CHARACTERS IN 'A'_^1_%INQ -1_^1_%OUT -€€1_+OUTPUT_^1_%RTJ* STATUS_^1_%JMP* (OUTPUT)_$CHECK STATUS AND EXIT_^1_%SPC 2_^1OUTFCT 000 000_*OUTPUT LINE PRINTER FUNCTION_^1_%LDQ* WESSTA_'FUNCTION IN 'A'_^1_%OUT -1_+OUTPUT FUNCTION_^1_%RTJ* STATUS_^1_%JMP* (OUTFCT)_$CHECK STATUS AOK AND EXIT_^1_%SPC 2_^1STATUS 000 000_*ASCERTAIN LINE PRINTER STATUS AOK_^1_%LDQ* WESSTA_^1INPSTA INP -1_+INPUT STATUS_^1_%AND =N$000B_^1_%INA€| -9_^1_%SAZ STAAOK_'IS STATUS AOK_^1_%JMP* INPSTA_*NO, REREAD STATUS_^1STAAOK JMP* (STATUS)_(YES, EXIT_^1_%END COUTV4_^__|PDMP421 CSY/ H03 P€1_%NAM DMP421_'DECK-ID H03 MSOS 4.1_-SUMMARY-079_^1*_$CORE DUMP ROUTINE FOR 1740/501 AND 1742-1 PRINTERS_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 FIE€€LD_^1_%RTJ* RPTOUT_'OUTPUT CORRECT NUMBER OF SPACES_^1_%ENA $F_+NEXT HEADING WORD_^1_%AND* CURADR_^1_%ADD* HEXCTR_'GET ABSOLUTE HEXADECIMAL DIGIT_^1_%ALS 4_^1_%EOR* HEXCTR_'GET RELATIVE HEXADECIMAL DIGIT_^1_%ALS 8_^1_%RTJ* OUT2CH_'OUTPUT ABSOLUTE AND RELATIVE HEX DIGIT HEADING_^1_%RAO* HEXCTR_^1_%LDA* HEXCTR_^1_%INA -$10_)INCREMENT HEX COLUMN COUNTER, IS IT $10_^1_%SAP HEDDON_€€*YES, ENTIRE HEADING HAS BEEN OUTPUT_^1_%ENQ -2_.NO, OUTPUT NEXT HEADING FIELD_^1_%JMP* HEDFLD_^1HEDDON RTJ* PRTSPC_'PRINT HEADING FIELD AND SPACE TO NEXT LINE_^1_%JMP* NXTLIN_'OUTPUT THIS LINE_^1_%EJT_]_^1CHKLIN ENA 0_,CHECK LINE IF ALL WORDS SAME AS LAST WORD_^1_%STA* HEXCTR_'SET HEX COLUMN COUNTER_^1*_]_^1CHKFLD LDQ* CURADR_^1_%ADQ* HEXCTR_^1_%LDA* (ZERO),Q_^1_%EOR* LSTWRD_'IS€€ NEXT WORD EQUAL TO LAST WORD OUTPUT_^1_%SAZ 1_^1_%JMP* NXTLIN_^1*_]_^1_%LDA* CURADR_'CHECK FOR END ADDRESS_^1_%ADD* HEXCTR_^1_%EOR* ENDADR_^1_%SAN_!1_^1_%JMP* NXTLIN_^1_%RAO* HEXCTR_*YES, INCREMENT HEX COLUMN COUNTER_^1_%LDA* HEXCTR_^1_%INA -$10_)IS HED COLUMN COUNTER $10_^1_%SAP 1_^1_%JMP* NXTCHK_^1*_]_^1_%LDA* CURADR_^1_%ADD* HEXCTR_^1_%STA* CURADR_^1_%LDA* IGNFLG_*YES, IS I€€GNORE 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 SPA€€CES)_^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 LIN€€E 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 FIELD_^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 COLU€€MN 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 BITS 8-15 OF A_^1_%LLS 4_^1_%ALS 4_,PUT FIRST CHARACTER IN Q AND SECOND ONE IN A_^1_%AND =N$F_^1*_]_^1_%INQ -$A_^1_%SQP 1_,CONVERT FIRST CHARACTER TO ASCII_^1_%INQ +$3A-$41_^1_%INQ $41_^1*_]_^1_%INA -$A_^1_%SAP 1_,CONVERT SECOND CHARACTER TO ASCII_^1_%INA +$3A-$41_^1_%INA $41_^1*_]_^1_%QLS 8_,COMBINE BOTH ASCII CHARACTERS IN A_^1_%EAQ A_^1_%RTJ* O€€UTPUT_'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_%JM€€P* (OUTPUT)_$CHECK STATUS 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_€h'IS STATUS AOK_^1_%JMP* INPSTA_*NO, REREAD STATUS_^1STAAOK JMP* (STATUS)_(YES, EXIT_^1_%END COUTV4_^__hPSNAPOL CSY/ H01 P€1_%NAM SNAPOL_'DECK-ID H01 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1************************************************************************_^1*_,O N - L I N E_!S N A P_!D U M P_!R O U T I N E_^1_%SPC 2_^1**********************€€**************************************************_^1_%SPC 4_^1************************************************************************_^1*_*THIS ROUTINE IS AN OPTIONAL DEBUGGING ROUTINE WHICH_^1*_*MAY BE DELETED FROM MSOS IF IT IS NOT TO BE USED._^1_%SPC 1_^1*_*THE ROUTINE MUST BE CORE RESIDENT AND MAY RESIDE_^1*_*IN PART0 OR PART1_^1*_*UNPROTECTED PROGRAM COMMUNICA€€TION IS PROVIDED BY AN_^1*_*ENTRY IN THE TABLE OF PRESETS IN THE LOCORE MODULE_^1*_*OF THE FORM SHOWN BELOW-_^1_%SPC 1_^1*_$ALF 3,SNAPOL_^1*_$ADC SNAPOL_^1*_$EXT SNAPOL_^1_%SPC 1_^1*_8CALLING SEQUENCE-_^1*_-DECLARE_"SNAPOL AS AN EXTERNAL_^1*_,RETURN JUMP TO SNAPOL_^1************************************************************************_^1_%SPC 4_^1**********************€€**************************************************_^1*_*P R O G R A M F U N C T I O N_^1_%SPC 1_^1*_*UP TO_!5 PROGRAM REGISTER DUMPS WILL BE STACKED_^1*_*AND DUMPED IN THE FOLLOWING FORMAT-_^1*_*P=HHHH Q=HHHH A=HHHH M=HHHH I=HHHH_^1*_-._%._%._%._%._^1*_-._%._%._%._%._^1*_-._%._%._%._%._^1*_*P=HHHH Q=HHHH A=HHHH M=HHHH I=HHHH_^1_%SPC 1_^1*_*OUTPUT IS TO THE STANDARD L€€IST DEVICE FIRST IN FIRST OUT_^1************************************************************************_^1_%EJT_]_^1*_*P R O G R A M C O N S T A N T S , E T C ._^1_%SPC 2_^1*_*CONSTANT_,USE_^1*_*-----------_(--------------------_^1*_*PUT_*BASE ADDRESS FOR CURRENT DUMP TO BE STORED_^1*_*TAKE_)BASE ADDRESS FOR CURRENT DUMP TO BE OUTPUT_^1*_*FIRST_(START OF STACKING BUFFER_^1*_*ENT€€RYS_'NUMBER OF DUMPS CURRENTLY STACKED_^1*_*LAST_)END OF STACKING BUFFER_^1************************************************************************_^1_%SPC 2_^1_%ENT SNAPOL_^1_%SPC 1_^1_%EQU FULL(5)_!**** NUMBER OF DUMPS STACKED AT ONE TIME-MAXIMUM_^1*_4**** EXCESS IGNORED_^1_%EQU ZERO($22)_^1_%EJT_]_^1*_*D I A G R A M_"C O N S T A N T S ,_!B U F F E R S_^1_%SPC 2_^1*_8STACK€€ING BUFFER FOR DUMPS_^1*_7****************************_^1*_*FIRST ===== * 5-WORDS PER ENTRY_!(P) * ===== T A K E =_^1*_7*_4(Q) * OLDEST STORED_^1*_7*_"F U L L_)(A) * DUMP ENTRY YET TO_^1*_7*_"E N T R Y_'(M) * BE PRINTED_^1*_7*_4(I) *_^1*_7*--------------------------*_^1*_7*_"F U L L_.*_^1*_7*_"E N T R Y_,*_^1*_7*_9*_^1*_7*_9*_^1*_7*--------------------------*_^1*_>._#._"._€€^1*_>._#._"._^1*_7*--------------------------*_^1*_*LAST ====== *_9* ===== P U T =NEXT_^1*_7*_"E M P T Y_,* EMPTY DUMP SLOT_^1*_7*_"E N T R Y_,* TO STORE IN_^1*_7*_9*_^1*_7*_9*_^1*_7****************************_^1_%EJT_]_^1************************************************************************_^1*_*ENTER HERE_^1*******************************************************************€€*****_^1_%SPC 6_^1*_/**** DECIDE IF ROOM TO STACK ****_^1_%SPC 2_^1SNAPOL NUM 0_,ENTRY POINT-UNPROT VIA TABLE OF PRESETS_^1_%IIN 0_,STOP INTERRUPTS_^1_%STA* TEMP_)SAVE A_^1_%LDA* ENTRYS_^1_%SUB* SIZE_)SIZE = FULL_!DOES NO. OF ENTRIES = FULL_^1_%SAN STACK-*-1_#IS STACKING BUFFER FULL_^1_%LDA* TEMP_)YES, IGNORE CALL AND RETURN_^1_%EIN 0_,TURN ON INTERRUPTS BEFORE RETURNING€€_^1_%JMP* (SNAPOL)_^1_%EJT_]_^1************************************************************************_^1*_*STACKING ROUTINE -ADD A 5 WORD ENTRY AT PUT TO THE STACK_^1************************************************************************_^1_%SPC 2_^1STACK LDA* SNAPOL_^1_%STA* (PUT)_(SAVE P = RETURN_^1_%TRQ A_,SAVE Q IN A_^1_%LDQ* PUT_^1_%STA- 1,Q_*SAVE Q_^1_%LDA* TEMP_^1€€_%STA- 2,Q_*SAVE A_^1_%TRM A_^1_%STA- 3,Q_^1_%LDA- I_^1_%STA- 4,Q_^1_%TRQ A_,CHECK TO SEE IF WE MUST RESET POINTER_^1_%SUB_!=XLAST_%AROUND TO FRONT OF BUFFER_^1_%SAZ RESET-*-1_^1_%TRQ A_-NO, MOVE DOWN TO NEXT_^1_%INA 5_-SLOT FOR NEXT DUMP_^1_%STA* PUT_^1_%JMP* ADDENT_^1RESET_"LDA_!=XSTART_^1_%STA* PUT_^1ADDENT RAO* ENTRYS_(ADDED A DUMP ENTRY -RECORD THIS,_^1_%LDA* WRITBZ_(CH€€ECK TO SEE IF WRITER IS ACTIVE_^1_%SAZ SCHWRT-*-1_^1OUT_"LDA- 2,Q_+YES, WRITER RUNNING, EXIT_^1_%LDQ- 1,Q_+RESTORE REGISTERS_^1_%EIN 0_,TURN ON INTERRUPTS_^1_%JMP* (SNAPOL)_$RETURN TO CALLING PROGRAM_^1SCHWRT RAO* WRITBZ_'SET WRITER BUSY_^1_%STQ* QSAVER_'KEEP Q INTACT THRU SCHEDULER CALL_^1_%EIN_]_^1_%RTJ- ($F4)_^1_%NUM $520D_(SCHEDULE UP TO WRITE AT P.L.=13_^1_%ADC WRITER_^1€€_%IIN_]_^1_%SQP ACCEP-*-1_#SKIP IF WRITER WAS SCHEDULED_^1_%ENA 0_,NO, SCHED REJECTED, CLR WRITBZ SWITCH_^1_%STA* WRITBZ_^1ACCEP LDQ*_!QSAVER_$SET UP RETURN_^1_%LDA- (ZERO),Q_^1_%STA* SNAPOL_^1_%JMP* OUT_^1_%EJT_]_^1HEXASC NUM 0_,CONVERT TO ASCII_^1_%STA* WRD_*SAVE WORD TO CONVERT_^1_%ENQ 3_^1RPT_"AND- $6_+CONVERT LOWER 4 BITS TO ASCII_^1_%INA -$A_^1_%SAM LT10_)CHARACTER OR€€ NUMBER_^1_%INA $7_^1LT10_!INA $3A_*IS A NUMBER_^1_%STA* W4,Q_)STORE CONVERTED WORD_^1_%SQZ DONE_^1_%INQ -1_^1_%LDA* WRD_^1_%ARS 4_^1_%STA* WRD_^1_%JMP* RPT_^1DONE_!ALS 8_^1_%ADD* W3_^1_%LDQ* W2_^1_%QLS 8_^1_%ADQ* W1_^1_%JMP* (HEXASC)_^1W4_#NUM 0_,STORAGE FOR X000_^1W3_#NUM 0_,STORAGE FOR 0X00_^1W2_#NUM 0_,STORAGE FOR 00X0_^1W1_#NUM 0_,STORAGE FOR 000X_^1_%EJT_]_^1*****€€*******************************************************************_^1TEMP_!NUM 0_,TEMPORARY STORAGE LOCATION_^1_%BSS WRD_^1_%BSS START(FULL*5-5),LAST(5)_'******DUMP STACKING BUFFER_^1ENTRYS NUM 0_,TOTAL NUMBER OF ENTRIES CURRENTLY STACKED_^1*_8BUT NOT DUMPED TO LIST - YET._^1PUT_"ADC START_^1TAKE_!ADC START_^1SIZE_!ADC FULL_^1*_8WRITBZ.. WRITER BUSY SWITCH =1 BUSY, 0= NOT_^€€1WRITBZ NUM 0_^1QSAVER NUM 0_^1BUFST NUM $2020_^1DPBUFF ALF 5,P= PPPP_"OUTPUT PRINT BUFFER_^1_%ALF 5,Q= QQQQ_^1_%ALF 5,A= AAAA_^1_%ALF 5,M= MMMM_^1_%ALF 5,I= IIII_^1************************************************************************_^1_%EJT_]_^1************************************************************************_^1*_*W R I T E R_!R O U T I N E_^1*************€€***********************************************************_^1*_*THIS ROUTINE OUTPUTS TO THE STD. LIST THE STACKED DUMPS_^1*_*INITIAL ENTRY WHEN WRITER IS INACTIVE IS BY A SCHEDULER_^1*_*REQUEST OF ADDRESS -WRITER- AT PRIORITY 13._^1************************************************************************_^1*_*NOTE.. WRITER RUNS AT PRIORITY 13 WITH EXIT DURING I/O_^1*_0WAIT TIME._^€€1************************************************************************_^1_%SPC 2_^1*_*THIS ROUTINE CALLS A HEX TO ASCII CONVERSION ROUTINE,_^1*_*STORES THE CONVERTED NUMBER IN THE OUTPUT BUFFER AND_^1*_*INITATES A WRITE. EXIT IS THEN TAKEN. UPON I/O COMPLETE_^1*_*SEE IF MORE_!ENTRIES ARE LEFT TO PRINT._^1_%SPC 2_^1WRITER ENQ 0_^1_%ENA 2_^1_%STA- $FF_^1WRTPIK LDA* (TAK€€E),Q_^1_%STQ* AUXSTO_'SAVE Q WHILE WE CONVERT_^1_%RTJ* HEXASC_'CONVERT HEX NUMBER IN A, 4 CHARACTERS_^1_%STA* DPBUFF,I_$RETURNED UPPER TWO IN A , OTHERS IN Q_^1_%RAO- $FF_^1_%STQ* DPBUFF,I_^1_%LDA* AUXSTO_^1_%INA 1_^1_%TRA Q_^1_%INA -5_^1_%SAZ THRU-*-1_$LAST REGISTER IN PRINT BUFFER, YES GO TO THRU_^1_%LDA- $FF_*CYCLE THRU STORING OF ALL REGISTERS STACKED,_^1_%INA 4_,P,Q€€,A,M,I_^1_%STA- $FF_^1_%JMP* WRTPIK_^1AUXSTO NUM 0_^1THRU_!RTJ- ($F4)_(DUMP REGISTERS TO STD. LIST._^1_%NUM $4CDD_(STACK AT 13, COMP AT 13_!FWRITE_^1_%ADC COMP_)COMPLETION ADDRESS_^1_%NUM 0_,THREAD_^1_%NUM $18FB_(TO STD LIST_^1_%NUM 26_+SIZE OF BUFFER OUTPUT_^1_%ADC BUFST_(START OF MSG._^1_%JMP- ($EA)_(EXIT UNTIL I/O COMP THEN AT COMP_^1COMP_!IIN 0_,STOP INTERRUPTS_^1_%LDQ*€€ TAKE_^1_%TRQ A_^1_%SUB =XLAST_'CHECK TO SEE IF WE NEED TO WRAP-AROUND TO_^1_%SAZ TOPSET-*-1_"TOP OF BUFFER_^1_%TRQ A_^1_%INA 5_^1_%JMP* AHEAD_^1TOPSET LDA_!=XSTART_^1AHEAD STA* TAKE_^1_%LDQ* ENTRYS_'PRINTED AN ENTRY AND REDUCED THOSE STACKED BY_^1_%INQ -1_+ONE ...SO MARK_^1_%STQ* ENTRYS_^1_%SUB* PUT_*HAVE WE OUTPUT ALL THAT ARE STACKED_^1_%SAZ EQUAL-*-1_^1_%EIN 0_,NO, T€ΒURN ON INTERRUPTS AND OUTPUT MORE_^1_%JMP* WRITER_^1EQUAL STA* WRITBZ_'SET WRITER NOT BUSY_^1_%EIN 0_,TURN ON INTERRUPTS_^1_%JMP- ($EA)_(EXIT, ALL DUMPS STACKED HAVE BEEN PRINTED_^1_%END_]_^__ΒPBDK85X CSY/ H05 P€1_%NAM BDK85X_'DECK-ID H05 MSOS 4.1_-SUMMARY-079_^1*_$SYSCOP BOOTSTRAP FOR 1738/853/854 AND 1733-1/853/854 DISK_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$BOOTSTRAP ENTRY POINTS_^1_%ENT COBOP_^1_%SPC 2_^1*_$BOOTSTRAP EXTERNALS_^1_%EXT COBOPS_'STA€€RTING SECTOR FOR IMAGE(IN SYSDAT)_^1_%EXT MSIZV4_'LENGTH OF SYSTEM (*S DECLARATION)_^1_%SPC 2_^1*_$BOOTSTRAP EQUIVALENCES_^1_%EQU EDISK(3)_$DISK EQUIPMENT NUMBER_^1_%EQU BIAS(4)_%AUTOLOAD AREA BIAS_^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* AR€€EG_)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_%INA BIAS_)SYSTEM SECT 1=PHYSICAL €€SECT 1+BIAS_^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_%OU€€T 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 COMPAR€€E FLAG_^1_%SAZ STATS3_^1_%SAM STATS4_^1_%LDA* LFFFF+1_%GO TO DO COMPARE_^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_]_^__%SAZ STATS3_^1_%SAMPB1751 CSY/ H08 P€1_%NAM B1751_(DECK-ID H08 MSOS 4.1_-SUMMARY-079_^1*_$SYSCOP BOOTSTRAP FOR 1751 DRUM_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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_%SP€€C 2_^1*_$BOOTSTRAP EQUIVALENCES_^1_%EQU EDRUM(2)_$DRUM EQUIPMENT NUMBER_^1_%EQU BIAS(4)_%AUTOLOAD AREA BIAS_^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 REG€€S_^1_%LDA* START_(START ADDRESS_^1_%INA BIAS_)SYSTEM SECT 1=PHYSICAL SECT 1+BIAS_^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/ H07 P€1_%NAM B1752_(DECK-ID H07 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM CHECKOUT BOOTSTRAP PROGRAM FOR 1752 DRUM_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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_%EQU BIAS(4)_%AUTOLOAD AREA BIAS_^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_%INA BI€€AS_)SYSTEM SECT 1=PHYSICAL SECT 1+BIAS_^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 INTERRUPTS_^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 ED€–RUM*$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/ H06 P€1_%NAM B17391_'DECK-ID H06 MSOS 4.1_-SUMMARY-079_^1*_$SYSCOP BOOTSTRAP FOR 1739-1 CARTRIDGE DISK_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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_%EQ€€U EDISK(3)_$DISK EQUIPMENT NUMBER_^1_%EQU BIAS(4)_%AUTOLOAD AREA BIAS_^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*_$FUNCTIONS._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 AFTE€€R 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_%INA BIAS_)SYSTEM SECT 1=PHYSICAL SECT 1+BIAS_^1*_]_^1_%CLR Q_,COMPLETE FILE ADDRESS_^1_%DVI =N11773_%DETERMINE W€€HICH 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 FOR 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 SUBROUTINE ENTRY TO BE SAME AS IT WAS_^1_%STA* ST€€ATUS_'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 ERROR_^1_%AND* M006B_(SAVE READY,BUSY,ON CYLINDE€€R,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 DONE SUCCESSFULLY_^1_%JMP* LOOP_^1RTN_"JMP* (S€&TATUS)_$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_]_^__&PB17332 CSY/ H04 P€1_%NAM B17332_'DECK-ID H04 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM CHECKOUT BOOTSTRAP FOR 1733-2/856 DISK_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT, CONTROL DATA CORPORATION 1973_^1_%SPC 3_^1_%ENT COBOP_^1_%EXT COBOPS_'STARTING SECTOR_^1_%EXT MSIZV4_'LENGTH OF IMAGE (*S ) DECLARATION)_^1_%SPC 2€€_^1_%EQU AUTLOD(4)_#BIAS OVER AUTOLOAD AREA_^1D18562 EQU D18562(11773) SECTOR 0, DISK 1, 856-2_^1D18564 EQU D18564(23663) SECTOR 0, DISK 1, 856-4_^1_%SPC 5_^1COBOP IIN 0_^1_%JMP* OVER_^1AREG_!NUM 0_^1QREG_!NUM 0_^1START ADC COBOPS_'STARTING SYSTEM_^1LENGTH ADC MSIZV4_'LENGTH OF IMAGE_^1CDEQ_!ADC 3_,EQUIPMENT NUMBER_^1OVER_!STA* AREG_)SAVEA_^1_%STQ* QREG_)SAVE Q_^1_%LDA*€€ CDEQ_^1_%ALS 7_^1_%STA* DISK39_^1_%LDA =N$100_^1_%ENQ 1_^1_%RTJ* OUTPUT_'CONNECT TO UNIT 0_^1_%RTJ* STATUS_^1_%LLS 19_+TYPE BIT TO Q15_^1_%LDA =XD18562_$SECTOR 0, DISK 1, 856-2_^1_%SQM TYPSET_'SKIP IF 856-2_^1_%LDA =XD18564_$SECTOR 0, DISK 1, 856-4_^1TYPSET STA* SECSIZ+1_^1_%LDA* START_^1_%INA AUTLOD_'BIAS TO GET PHYSICAL SECTOR_^1_%CLR Q_^1SECSIZ DVI =N0_*TWO WORDS_^1_%€€ALS 5_^1_%STA* TEMP_)BIT5 0/1 FOR DISK_^1_%TRQ A_^1_%CLR Q_^1_%DVI =N29_^1_%QLS 10_+SECTORS TO Q 14-10_^1_%LLS 6_,SECTOR + TRACK TO A_^1_%ADD* TEMP_)ADD IN DISK BIT_^1_%STA* TEMP_^1_%CLR M_,FIRST TIME THROUGH THIS CODE_^1SEC_"LDA* TEMP_^1_%ENQ 2_,LOAD ADDRESS_^1_%RTJ* OUTPUT_^1_%RTJ* STATUS_^1_%LDA* LENGTH_^1_%ENQ 0_,BUFFER LENGTH_^1_%RTJ* OUTPUT_^1_%TRM Q_^1_%SQZ 1_,SKI€€P OF FIRST TIME_^1_%ENQ 2_,COMPARE_^1_%INQ 3_,WRITE_^1_%ENA 0_,STARTING ADDED TO A_^1_%RTJ* OUTPUT_^1_%RTJ* STATUS_^1_%TRM Q_^1_%SQN END_^1_%SET M_^1_%JMP* SEC_*GO DO THE COMPARE_^1END_"CLR Q_^1_%JMP* SOF_^1_%SPC 5_^1OUTPUT NUM 0_^1_%ADQ- 0_,TWO WORDS_^1DISK39 NUM 0_^1_%OUT OREJ-*_^1_%JMP* (OUTPUT)_^1_%SPC 5_^1STATUS NUM 0_^1_%LDQ* DISK39_^1_%INQ 1_^1INP_"INP OREJ-*€F_^1_%STA* SAVE_^1_%ALS 10_^1_%SAP NOALRM_'SKIP IF NO ALARM_^1_%JMP* OREJ_^1NOALRM ALS 2_^1_%SAM ONCYL_(SKIP IF ON CYLINDER_^1_%JMP* INP_^1ONCYL ALS 2_^1_%SAM BUSY_)SKIP IF BUSY_^1_%JMP* (STATUS)_^1BUSY_!JMP* INP_^1SAVE_!NUM 0_^1_%SPC 5_^1OREJ_!SET Q_^1SOF_"SLS 0_^1_%JMP* SOF_^1_%SPC 5_^1TEMP_!NUM 0_^1_%END_]_^__FPPARAME CSY/ A09 P€1_%NAM PARAME_'DECK-ID A09 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PARAMETER CONVERSION ROUTINES_^1_%ENT_!PARAME_^1_%EQU_!PARAME(*)_^1 SPC 1_]_^1 SPC 1_]_^1_%ENT LUABS,SABS,NABS,CABS_^1_%EQU PC(1),PS(5)_^1_%EQU PLU(3)_^€€1_%EQU LPMSK($2),NZERO($12),ZERO($22)_^1_%EQU ONEBIT($23)_^1_%EQU PN(4)_^1_%EQU ASYSDR($EB)_^1*_]_^1*_]_^1*_*ALL ROUTINES ARE ENTERED WITH_^1*_*PARAMETER LIST LOCATION IN Q._^1*_]_^1*_*ALL ROUTINES EXIT WITH THE TRANSLATED_^1*_*PARAMETER IN Q._^1*_*IN ADDITION, SABS EXITS WITH THE LOCATION_^1*_*OF S IN THE A REGISTER._^1*_]_^1*_>***********_^1*_]_^1*_*LOGICAL UNIT TO ABSOLUTE_^€€1*_]_^1LUABS NUM 0_^1_%IIN 0_^1_%STQ* TLUABS_*PARAMETER LOC TO TEMP_^1_%LDA- PLU,Q_^1_%AND- LPMSK+12_^1_%ENQ 0_^1_%LLS 6_/A PARAMETER TO Q_^1_%ARS 6_:LU IN A9-0_^1_%JMP* LUTV,Q_^1LUTV_!JMP* A0_^1_%JMP* LUA1_^1_%JMP* LUA2_^1LUA1_!LDQ* TLUABS_5FIX_^1*_*BIT 15 OF A SET, ALWAYS DO 16 BIT ADDRESSING_$***MSOS4.0_^1LU2_"AAQ A_^1_%JMP* LU1A_I*4.0/77*1887_^1*_]_^1*_$PARAMETER A=2, PI€€CK UP CONTENTS OF LOC A9-0_^1*_]_^1LUA2_!AND- $C_+MASK OFF ALL EXCEPT $3FF_'*4.0/77*1887_^1LU1A_!TRA Q_L*4.0/77*1887_^1_%LDA- (ZERO),Q_^1A0_#TRA Q_/A=0, A9-0 IS ACTUAL UNIT_^1_%SQP LU3-*-1_^1_%ADQ- LPMSK+15_^1LU3_"EIN 0_^1_%JMP* (LUABS)_^1TLUABS 0_"0_^1*_]_^1*_]_^1***_(STARTING ADDRESS TO ABSOLUTE_^1**_]_^1SABS_!0_"0_^1_%IIN 0_^1_%STQ* SL_^1_%LDA- (ZERO),Q_$CHECK D BIT_8***MSO€€S4.0_^1_%AND- ONEBIT+14_H***MSOS4.0_^1_%SAZ S01_*SKIP IF NO D BIT_3***MSOS4.0_^1_%TRQ A_,S IS ABSOLUTE_6***MSOS4.0_^1_%INA 5_P***MSOS4.0_^1_%STA SL_+SL=ADDRESS OF S PARAM_.***MSOS4.0_^1_%LDQ* (SL)_)Q=S PARAM_:***MSOS4.0_^1_%JMP* S7_O***MSOS4.0_^1S01_"LDA- (ZERO),Q_$CHECK X PARAMETER_2***MSOS4.0_^1_%AND- ONEBIT+8_3IF X=1,_^1_%SAZ S1-*-1_^1_%TRQ A_:THEN L=P_^1S1_#STA* L_:OTHERW€€ISE L=0_^1_%SAP S2-*-1_515 BIT_^1_%EOR- ONEBIT+15_2ARITHMETIC_^1S2_#LDQ- PS,Q_,GET STARTING ADDRESS_^1_%SQP S3-*-1_*IF S15 = 1_^1_%AAQ A_/THEN (A)=L+(P+5)_^1_%JMP* S4_^1S3_#LDA* SL_+OTHERWISE S15=0, (A)=P+5_^1_%INA 5_^1S4_#AND- LPMSK+15_^1_%STA* SL_.THE REST INVOLVES_^1_%LDA* (SL)_,15 BIT ARITHMETIC_^1_%SAM S5-*-1_^1_%ADD- ONEBIT+15_^1S5_#LDQ* L_^1_%SQP S6-*-1_^1_%ADQ- LPMSK+€€15_^1S6_#AAQ Q_^1_%SQP S7-*-1_^1_%ADQ- LPMSK+15_^1S7_#LDA* SL_^1*_8EXIT - A = ADDR OF S PARAMETER_^1*_?Q=S PARAMETER_^1_%EIN 0_^1_%JMP* (SABS)_^1L_$0_"0_^1*_]_^1*_]_^1**_)NUMBER OF WORDS TO ABSOLUTE_^1**_]_^1NABS_!0_"0_^1_%IIN 0_^1_%STQ* TNABS_+SAVE PARAMETER LIST LOC_^1_%LDA- (ZERO),Q_$CHECK D BIT_8***MSOS4.0_^1_%AND- ONEBIT+14_H***MSOS4.0_^1_%SAZ N1_+SKIP IF NO D BIT_3***MSO€€S4.0_^1_%LDQ- PN,Q_)Q=N PARAMETER_6***MSOS4.0_^1_%JMP* N2_O***MSOS4.0_^1N1_#LDA- (ZERO),Q_$GET FIRST WORD_5***MSOS4.0_^1_%LDQ- PN,Q_7GET PARMETER N_^1_%SQP NOWXT-*-1_2+N=NO. OF WDS_^1_%AND- ONEBIT+8_3CHECK FOR X SET_^1_%SAZ NOW1-*-1_3ZERO=IN. ABS._^1_%LDA* TNABS_^1_%SAP NOW1-*-1_315 BIT_^1_%EOR- NZERO+15_3ARITHMETIC_^1NOW1_!AAQ Q_^1_%SQP 1_P**MSOS 4.0_^1_%ADQ- LPMSK+15_I**MSOS€€ 4.0_^1_%LDQ- (ZERO),Q_3GET IT_^1NOWXT SQP N2-*-1_^1_%ADQ- LPMSK+15_^1N2_#EIN 0_^1_%JMP* (NABS)_'EXIT - Q= N PARAMETER_^1*_]_^1***_]_^1**_)COMPLETION ADDRESS TO ABSOLUTE_^1**_]_^1CABS_!0_"0_^1_%IIN 0_^1_%STQ* TCABS_6SAVE PARAM LOC_^1_%LDA- (ZERO),Q_$CHECK D BIT_8***MSOS4.0_^1_%AND- ONEBIT+14_H***MSOS4.0_^1_%SAZ C01_N***MSOS4.0_^1_%LDQ- PC,Q_)Q=C PARAMETER_6***MSOS4.0_^1_%JMP* €€C2_O***MSOS4.0_^1C01_"LDA- PC,Q_)GET C PARAMETER_4***MSOS4.0_^1_%SAM CA1-*-1_4-C=SYS DIR REF_^1_%LDA- (ZERO),Q_3GET FIRST WORD_^1_%AND- ONEBIT+8_3CHECK X_^1_%LDQ- PC,Q_7GET C_^1_%SAZ CAXT-*-1_3EXIT_^1_%LDA* TCABS_6GET ADDRESS_^1_%SAM C1-*-1_^1_%ADD- ONEBIT+15_215 BIT ARITH._^1C1_#AAQ Q_^1_%JMP* CAXT_^1CA1_"ADD- ASYSDR_5SYS DIR INDEX_^1_%TRA Q_^1CAXT_!SQP C2-*-1_^1_%ADQ- LPMSK€Š+15_^1C2_#EIN 0_^1_%JMP* (CABS)_5BACK TO SENDER_^1*_8Q= COMPLETION ADDRESS_^1_%EQU TCABS(TLUABS),TNABS(TLUABS),SL(TLUABS)_^1_%END_]_^__ŠPT16 CSY/ A08 P€1_%NAM T16_*DECK-ID A08 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT T16_^1_%EXT ASC_^1*_$THIS ROUTINE HANDLES INDIRECT REQUESTS FOR PART 1_^1*_$REQUESTS. IT IS ENTERED WITH THE FOLLOWING PARAMETERS_^1*_$A=_!PARAMETER LIST_€€^1*_]_^1*_$I=_!VOLITALE STORAGE_^1*_]_^1_%SPC 5_^1_%EQU VR(3),VPTR(5),VID(8)_^1_%EQU VTDS(6)_^1_%EQU PL1(1)_^1_%SPC 5_^1T16_"TRA Q_,SAVE PARAMETER LIST ADDRESS IN Q_^1_%LDA- VID,I_(CHECK IF THIS IS THE FIRST INDIRECT REQUEST_^1_%SAM T16A-*-1_$SKIP IF SECOND INDIRECT REQUEST_^1_%RAO- VR,I_)FIRST INDIRECT REQUEST_^1_%RAO- VR,I_)UPDATE RETURN ADDRESS BY 2_^1_%SET A_^1_%STA- VI€βD,I_(SET WORD 8 OF VOLITALE TO INDICATE IND. REQ._^1T16A_!LDA- VTDS,I_*GET PARAMETER LIST ADDRESS FOR THE IND REQ_^1_%STA- VPTR,I_'SAVE IN WORD 5 OF VOLITILE_^1_%JMP ASC_*GO PROCESS NEW REQUEST - GO BACK TO MONI_^1_%END_]_^__βPDTIMER CSY/ A23 P€1_%NAM DTIMER_'DECK-ID A23 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$E006 DIAGNOSTIC TIMER_^1_%ENT_!DTMER_^1_%EQU_!DTMER(*)_^1 SPC 1_]_^1 SPC 1_]_^1*_$THIS CORE RESIDENT PROGRAM IS OPERATED PERIODICALLY_^1*_$VIA A TIMER REQU€€EST. IT IS USED TO DETECT I/O HANGUP_^1*_$ONLY THE DEVICES LISTED IN TABLE DGNTAB ARE SUPERVISED._^1 SPC 1_]_^1*_$IT CAN BE OPERATED IN MULTIPLES OF 1/10 SECS_^1 SPC 2_]_^1_%ENT DTIMER_^1_%SPC 1_^1_%EXT DGNTAB_'TABLE OF P.D.T. ADRS_^1_%EXT TMRLVL_'TIMER LEVEL DEFINED IN SYSDAT_%**MSOS 4.0_^1_%EQU EDCLK(4)_$DIAGNOSTIC CLOCK LOCATION_^1_%EQU EDPGM(3)_$DIAGNOSTIC ERROR ENTRY_€€^1_%EQU DELAY(10)_#DELAY TIME IN 1/10 SECS_^1_%EQU TIMRC(8)_$TIMER REQUEST CODE_^1_%EQU DBIT($4000)_F***MSOS4.0_^1_%EQU AMONI($F4),ADISP($EA)_^1_%EQU ZERO(2)_^1 SPC 2_]_^1DTIMER ENA 0_,SET J=1ST LG1A ENTRY_^1_%STA* J_^1A2_#LDQ* J_^1_%LDQ DGNTAB,Q_$GET ADR OF P.D.T._^1_%SQP A7-*-1_'IS THIS END OF TABLE_^1_%JMP* A3_+YES_"EXIT_^1A7_#LDA- EDCLK,Q_^1_%SAP A5-*-1_^1_%JMP* A1_+G€€O TO A1._^1A5_#INA -1_+DECREMENT DCLK(J) BY 1._^1_%STA- EDCLK,Q_^1_%SAM A6-*-1_'IF DCLK(J) IS NEGATIVE,_^1_%JMP* A1_^1A6_#LDA- (ZERO),Q_$SCHEDULE DIAGNOSTIC_^1_%STA* SCHED1_'ERROR ENTRY_^1_%LDA- EDPGM,Q_^1_%STA* SCHED2_^1_%RTJ- (AMONI)_%CALL SCHEDULER_^1SCHED1 NUM 0_,REQUEST CODE,LEVEL_^1SCHED2 NUM 0_,LOCATION IN DRIVER_^1*_8INSERT ANY OTHER PROGRAM_^1*_8ACTION IN HERE_^1A1_#RA€€O* J_,INCREMENT J BY 1._^1_%JMP* A2_^1J_$NUM 0_^1*_8TIMER DELAY_^1A3_#LDA* RQCOD_(SET DIAGNOSTIC TIMER LEVEL_)**MSOS 4.0_^1_%AND- $16_*$FFF0 MASK_9**MSOS 4.0_^1_%ADD* DTLVL_L**MSOS 4.0_^1_%STA* RQCOD_L**MSOS 4.0_^1*_]_^1_%RTJ- (AMONI)_J**MSOS 4.0_^1RQCOD ADC TIMRC*$200+$10+DBIT_>**MSOS 4.0_^1_%ADC DTIMER_K***MSOS4.0_^1_%ADC DELAY_^1_%JMP- (ADISP)_%CALL DISPATCHER_^1DTLVL ADC €" TMRLVL_^1 SPC 2_]_^1_%END_]_^__"PTMINT CSY/ A22 P€1_%NAM TMINT_(DECK-ID A22 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$MONITOR TIMER REQUEST PROCESSOR_^1_%ENT_!TMINT_^1_%EQU_!TMINT(*)_^1_%SPC 3_^1_%ENT TIMEUP_'ENTRY FOLLOWING TIMER INT. ACK._"**MSOS 4.1*_^1_%ENT T8_+TIMER R€€EQUEST PROCESSOR_^1_%ENT T15_*PART 1 TIMER REQUEST_.**MSOS 4.0_^1_%EXT SCHERR_'SCHEDULER ERROR EXIT._^1_%EXT NSCHED_'NO. OF SCHEDULE CALLS DURING A TIMER INTERRUPT_^1_%EXT TIMEC_(NO. OF TIMER INTERRUPTS * 1/10 - 1_^1_%EXT ERRCNT_^1_%SPC 1_^1_%EQU CLOCK($E8)_^1_%EQU PC(1),PT(2),PTIME(3)_^1_%EQU RCSCHD(9)_'REQUEST CODE FOR SCHEDULER_^1_%EQU VR(3),VPTR(5),VTPE(6),VTMP(7)_^1_€€%EQU ADISP($EA),ONEBIT($23),LPMSK($2)_^1_%EQU AMONI($F4)_^1_%EQU TOMPT($B4)_"TOP OF EMPTY STACK_^1_%EQU ZERO($22),ACABS($BE),AREQXT($B9)_^1_%EQU T8SIZE(3)_#LENGTH OF TIMER REQUEST_^1_%EQU P1TIME(15)_^1_%EQU T15(*)_^1*_]_^1*_]_^1*_]_^1T8_#TRA Q_,TIMER REQUEST PROCESSOR_^1_%LDA- 8,I_*SKIP IF INDIRECT REQUEST_+***MSOS4.0_^1_%SAM TR1X_M***MSOS4.0_^1_%ENA T8SIZE_'LENGTH OF CAL€€LING SEQUENCE._^1_%ADD- VR,I_^1_%STA- VR,I_^1TR1X_!LDA- (ZERO),Q_$CHECK FOR PART 1 TIMER REQUEST_$***MSOS4.0_^1_%ARS 9_P***MSOS4.0_^1_%AND- LPMSK+5_J***MSOS4.0_^1_%INA -P1TIME_J***MSOS4.0_^1_%SAN TR1C_)SKIP IF NOT PART 1 TIMER REQ_'**MSOS 4.0_^1_%LDA- PC,Q_M***MSOS4.0_^1_%EOR- ONEBIT+15_#SET BIT 15 OF COMPLETION IF RC=21_!***MSOS4.0_^1_%TRA Q_,SYSTEM DIRECTORY PART 1_,* *MSOS4.€€0_^1_%JMP* TR1A+1_K**MSOS 4.0_^1*_$RC=8 GO TO PARAME AND ABSOLUTIZE_^1TR1C_!LDA- (ZERO),Q_$CHECK FOR PART 0 DIRECTORY CALL_#**MSOS 4.0_^1_%AND- ONEBIT+14_#D BIT SET, NOT PART 0_.**MSOS 4.0_^1_%SAN NOTDIR_K**MSOS 4.0_^1_%LDA- PC,Q_M**MSOS 4.0_^1_%SAP NOTDIR_'BIT 15 SET = DIRECTORY CALL_(**MSOS 4.0_^1_%TRA Q_,DON'T ABSOLUTIZE DIRECTORY CALL_#**MSOS 4.0_^1_%JMP* TR1A+1_J**MSOS 4.€€0_^1NOTDIR LDA- PC,Q_)ABSOLUTIZE CONPLETION ADDRESS_%**MSOS 4.0_^1TR1A_!RTJ- (ACABS)_%ABSOLUTIZE COMPLETION ADDRESS._^1_%STQ- VTMP,I_^1_%LDQ- VPTR,I_^1_%LDA- (ZERO),Q_^1_%AND =N$400F_%SAVE PL AND D BIT_2***MSOS4.0_^1_%ADD =XRCSCHD*$200_^1_%IIN 0_^1_%LDQ- TOMPT_^1_%INQ 0_^1_%SQN TR1B-*-1_$THREAD IS EMPTY, GO TO_^1_%RAO+ ERRCNT_^1_%JMP+ SCHERR_'SCHEDULER ERROR_^1TR1B_!STA- (ZERO€€),Q_^1_%LDA- PT,Q_)REMOVE SLOT FROM EMPTY LIST_^1_%STA- TOMPT_^1_%STQ- VTPE,I_'SAVE ADDRESS OF EMPTY SLOT_^1_%LDA- VTMP,I_^1_%STA- PC,Q_^1_%LDQ- VPTR,I_^1_%LDA- (ZERO),Q_^1_%ARS 4_^1_%AND- LPMSK+2_$USE ONLY LOWER 2 BITS_^1_%TRA Q_^1_%STQ- VTMP,I_^1_%LDA* THREAD,Q_$THREAD TO THREAD(D)_^1_%LDQ- VTPE,I_^1_%STA- PT,Q_^1_%TRQ A_^1_%LDQ- VTMP,I_^1_%STA* THREAD,Q_^1_%LDQ- VPTR,I_'GET U€€SERS TIME_^1_%LDA- 2,Q_*FROM USERS CALLING SEQUENCE_^1_%LDQ- VTPE,I_^1_%STA- PTIME,Q_%PUT TIME INTO SLOT._^1_%LDQ- VPTR,I_^1_%LDA- (ZERO),Q_#PICK UP USERS ORIGINAL 'U' FIELD_^1_%AND =N$C0_^1_%SAZ CLRB15-*-1_!SKIP IF NO ERROR_^1_%LDA- (I)_^1_%AND- LPMSK+15_^1_%EOR- ONEBIT+15_"SET USERS 'Q' BIT 15_^1_%JMP* SAVIT_^1CLRB15 LDA- (I)_^1_%AND- LPMSK+15_#CLEAR USERS 'Q' BIT 15_^1SAVIT S€€TA- (I)_^1_%JMP- (AREQXT)_$EXIT_^1_%EJT_]_^1TIMEUP RAO- CLOCK_(INCREMENT CORE CLOCK_-**MSOS 4.1**_^1_%LDA NSCHED_^1_%STA* NUMSCH_'SET NUMBER OF SCHEDULER CALLS ALLOWED/PERIOD_^1_%ENQ 0_^1*_]_^1NXTTIM STQ* TIMIDX_'CHECK NEXT TIME COUNTER_^1_%LDA* TIMCTR,Q_^1_%SAM EXIT-*-1_$ALL DONE, EXIT_^1_%SAZ RESET-*-1_#TIME COUNTER COUNTED DOWN, RESET_^1_%INA -1_^1_%STA* TIMCTR,Q_$DECREMENT€€ TIME COUNTER AND EXIT_^1EXIT_!JMP- (ADISP)_^1_%SPC 2_^1RESET LDA* RSTCTR,Q_$RESET TIME COUNTER AND CHECK ITS THREAD_^1_%STA* TIMCTR,Q_^1_%ADQ =XTHREAD-2_^1*_]_^1CHKTHR STQ- I_,CHECK THREAD FOR TIME DELAY REQUESTS_^1LOOP_!LDQ- PT,I_^1_%INQ 0_^1_%SQN TDREQ-*-1_#TIME DELAY REQUEST ENCOUNTERED_^1_%LDQ* TIMIDX_^1_%INQ 1_,END OF THREAD, CHECK NEXT TIME COUNTER_^1_%JMP* NXTTIM_^1_%€€SPC 2_^1TDREQ LDA- PTIME,Q_%TIME DELAY REQUEST_^1_%SAZ CHKSCH-*-1_$TIME DELAY HAS EXPIRED_^1_%INA -1_^1_%STA- PTIME,Q_%DECREMENT TIME DELAY REQUEST AND_^1_%JMP* CHKTHR_)CONTINUE TO CHECK THE THREAD._^1*_]_^1CHKSCH LDA* NUMSCH_'HAS NO. SCHEDULER CALLS BEEN EXCEEDED_^1_%SAN SCHEDU-*-1_$FOR THIS PERIOD._^1LOP1_!LDA* TIMIDX_'YES, CHECK IF ON COUNTS THREAD_^1_%SAN PUTCNT-*-1_^1_%J€€MP* CHKTHR_'YES, CONTINUE TO CHECK THE THREAD_^1*_]_^1PUTCNT LDA- PT,Q_)NO, PUT THE REQUEST ON THE COUNTS THREAD SO_^1_%STA- PT,I_)REQUEST WULL BE SCHEDULED AS SOON AS POSSIBLE._^1_%LDA* THREAD_^1_%STA- PT,Q_^1_%STQ* THREAD_'COUNTINUE TO CHECK THE THREAD_^1_%JMP* LOOP_^1*_]_^1SCHEDU LDA- PC,Q_^1_%STA* CALL+1_^1_%LDA- (ZERO),Q_$MOVE CALL FROM TIMER THREAD_^1_%STA* CALL_^1_%LLS 16_+€€PUT Q IN A TO SAVE THROUGH MONITOR_^1_%LDQ- CLOCK_(PASS THE CORE CLOCK IN Q_^1_%RTJ- (AMONI)_^1CALL_!ADC 0,0_*SCHEDULE THE REQUESTED COMPLETION ADDRESS_^1_%LLS 16_+RESTORE POINTER TO LIST_^1_%SAP GOGO_^1_%JMP* LOP1_)BACK TO RETHREADING SECTION IF REJECT_^1GOGO_!LDA* NUMSCH_'DECREMENT NUMSCH_^1_%INA -1_^1_%STA* NUMSCH_)TIMER DELAY HAS EXPIRED._^1_%LDA- PT,Q_^1_%STA- PT,I_^1*_]_^€€1_%IIN 0_^1_%LDA- TOMPT_(RETURN SLOT TO EMPTY THREAD_^1_%STA- PT,Q_^1_%STQ- TOMPT_^1*_]_^1_%EIN 0_^1_%JMP* LOOP_)CONTINUE TO CHECK THE THREAD_^1_%SPC 2_^1TIMIDX NUM 0_,TIME COUNTER INDEX_^1NUMSCH NUM 0_,NO SCHEDUER CALLS PER TIME PERIOD_^1_%SPC 2_^1*_*TIMER UNITS MAY BE 0 = COUNTS_^1*_:OR 1 = 0.1 SECONDS_^1*_:OR 2 = SECONDS_^1*_:OR 3 = MINUTUES_^1*_]_^1RSTCTR ADC 1-1_*NUMBER€€ OF INTERRUPTS PER COUNT_^1_%ADC TIMEC_(NUMBER OF COUNTS PER .1 SECOND_^1_%ADC 10-1_)NUMBER OF .1 SECONDS PER SECOND_^1_%ADC 60-1_)NUMBER OF SECONDS PER MINUTE_^1*_]_^1TIMCTR ADC 0_,TIME COUNTER FOR COUNTS_^1_%ADC 0_,TIME COUNTER FOR .1 SECONDS_^1_%ADC 0_,TIME COUNTER FOR SECONDS_^1_%ADC 0_,TIME COUNTER FOR MINUTES_^1_%NUM -0_+END OF TIME COUNTER TABLE_^1*_]_^1THREAD NUM -€ž0_+THREAD FOR COUNT DELAYS_^1_%NUM -0_+THREAD FOR .1 SECONDS DELAYS_^1_%NUM -0_+THREAD FOR SECOND DELAYS_^1_%NUM -0_+THREAD FOR MINUTE DELAYS_^1_%END_]_^__žPMINT CSY/ A25 P€1_%NAM MINT_)DECK-ID A25 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$MANUAL INTERRUPTS PROCESSOR_^1_%ENT_!MINT_^1_%EQU_!MINT(*)_^1 SPC 1_]_^1 SPC 1_]_^1* THIS IS THE MANUAL INTERRUPT ROUTINE_^1* NO ATTEMPT IS MADE TO INTERRUPT€€ REQUESTS IN PROGRESS_^1_%SPC_!1_^1_%ENT_!MI_^1_%ENT_!MIB_^1_%ENT MIBX_^1_%ENT_!RELFLE_^1_%ENT MIINP_L**MSOS 4.0_^1_%SPC_!1_^1_%EXT_!JOBIND_^1_%EXT_!FILE1_^1_%EXT_!SWTCH_^1_%EXT_!JOBENT_^1_%EXT_!JBCNCL_^1_%EXT_!MIPRO_^1_%EXT LVLSTR,SWAPON,LEND_^1_%EXT RESTOR_^1_%EXT JPCHGE_^1_%EXT LOADIN_(LOADER IN CORE FLAG_0*444****_^1_%SPC_!1_^1_%EQU_!DISP($EA)_^1_%EQU L(36)_(BUFFER LENGT€€H_6**MSOS 4.0_^1_%EQU RP(1)_^1_%EQU HICORE($F6)_^1_%SPC_!2_^1MI_#LDA* MIB_^1_%ADD* MIBX_)BOTH LOCK OUT FLAGS MUST BE ZERO_^1_%SAZ MIGO_^1_%JMP- ($EA)_(NOT ZERO - JUST GO AWAY_^1MIGO_!RAO* MIB_^1_%RTJ- ($F4)_^1_%NUM $5203_^1_%ADC MI1A_)DOWN TO LEBAL 3_^1_%JMP- (DISP)_^1MI1A_!RTJ- ($F4)_(OUTPUT MI_^1_%NUM $4CE3_^1_%ADC_!$0,$0,$18FC,$2,MIOUT_^1_%ENA -0_^1_%ENQ L-1_N**MSOS 4.0_€€^1MI1_"STA MIINP,Q_J**MSOS 4.0_^1_%INQ_!-1_^1_%SQM_!MI2-*-1_^1_%JMP* MI1_^1_%SPC_!1_^1MI2_"RTJ- ($F4)_$INPUT STATEMENT_^1_%NUM $48E3,0_^1THR_"ADC $0,$18FD,L+1,MIINP_?**MSOS 4.0_^1_%LDA* THR_^1_%SAZ_!1_^1_%JMP* *-2_^1_%LDA* THR+1_$IF INPUT IN ERROR_^1_%SAP_!1_+REPEAT MI TYPE OUT._^1_%JMP* MI16_*GO TO EXIT ROUTINE_1*444****_^1_%LDA MIINP_(CHECK IF *_^1_%ARS_!8_^1_%INA_!-$2A_€€^1_%SAZ_!MI3-*-1_^1_%JMP* MI10_^1_%SPC 2_^1Z_$NUM_!$5AFF_^1STH_"ADC_!SWTCH_^1_%SPC 2_^1MI3_"LDA* (JOBI)_'CHECK IF JOB PROCESSOR_^1_%SAZ_!1_*IN CORE._^1_%JMP* MI5_^1_%LDA* (STH)_$CHECK JP LOCK-OUT SWITCH IF_^1_%SAZ_!NLO-*-1_#LIBEDIT OR RECOVERY PROGRAM_^1_%LDA* MIINP_%IN OPERATION._^1_%LDQ* MIINP+1_"CHECK IF *Z_^1_%LLS_!8_^1_%SUB* Z_^1_%SAZ_!NLA-*-1_^1_%JMP* MI6_*CK FOR *, €€*R, *K_^1NLA_"STA LOADIN_(CLEAR LOADER IN CORE FLAG_**444*****_^1_%ENA 1_Q*444****_^1_%STA* (STH)_%FLAG POSITIVE._^1_%JMP* MI16_%CLEAR MIB AND GO TO DISP._^1NLO_"EQU NLO(*)_^1_%LDA* MIINP_L**MSOS 4.0_^1_%SUB =A*R_M**MSOS 4.0_^1_%SAN 2_P**MSOS 4.0_^1_%LDQ* MIP_*LET AN *R THRU_5**MSOS 4.0_^1_%JMP* MI9B_)FOR FOREGROUND UNITS_/**MSOS 4.0_^1_%ENQ -3_O**MSOS 4.0_^1MORE_!LDA* MIIN€€P+3,Q_H**MSOS 4.0_^1_%SUB* BATCH+3,Q_H**MSOS 4.0_^1_%SAN ERR_N**MSOS 4.0_^1_%INQ 1_P**MSOS 4.0_^1_%SQZ JOBSTR_K**MSOS 4.0_^1_%JMP* MORE_M**MSOS 4.0_^1ERR_"JMP* MI12_M**MSOS 4.0_^1JOBSTR LDQ- $E9_N**MSOS 4.0_^1_%LDA- 10,Q_)TEST FOR AND SKIP IF UNPROT_(**MSOS 4.0_^1_%SAZ JOBA_+CORE IN PART 0_3**MSOS 4.0_^1*_8IF UNPROTECTED IS IN PART 1,_'**MSOS 4.0_^1*_:WE MUST MAKE SPACE_/**MSOS€€ 4.0_^1_%RTJ- ($F4)_(REQ FOR PARTITION 16_/**MSOS 4.0_^1_%ADC $6200_+BEFORE CALLING IN_/**MSOS 4.0_^1_%ADC SJOB_-JOB PROCESSOR_2**MSOS 4.0_^1_%NUM 0,0_N**MSOS 4.0_^1_%NUM 10_O**MSOS 4.0_^1_%NUM 16_O**MSOS 4.0_^1_%JMP- (DISP)_K**MSOS 4.0_^1JOBA_!LDA- 11,Q_)IF NO SWAPPING DO NOT_.**MSOS 4.0_^1_%SAN SJOB_,RELEASE PART 0_2**MSOS 4.0_^1_%RTJ- ($F4)_(RELEASE PART 0_^1_%NUM $1800_^€€1RELSWP ADC 0_^1_%SPC 2_^1*_*THE JOB PROCESSOR IS NOW SCHEDULED BUT_^1*_*CANNOT RUN UNTIL THE SWAPPED AREA IS_^1*_*AVAILABLE AND THE LEVEL 2 LOOP IN THE_^1*_*SPACE DRIVER IS TURNED OFF._^1_%SPC 2_^1SJOB_!LDQ* MIP_N**MSOS 4.0_^1_%RTJ- ($F4)_$SCHDLE JOB PROCESSOR._^1_%NUM $2400_(PART 1 DIRECTORY SCHEDULE_^1_%ADC JOBENT_K**MSOS 4.0_^1_%JMP- (DISP)_^1_%SPC_!1_^1MIB_"NUM 0_P**MS€€OS 4.0_^1MIBX_!NUM 0_P**MSOS 4.0_^1JOBI_!ADC JOBIND_K**MSOS 4.0_^1MI5_"LDA* MIINP_(CHECK IF *Z_8**MSOS 4.0_^1_%LDQ* MIINP+1_^1_%LLS_!8_^1_%SUB* Z_^1_%SAN MI5A_^1_%RTJ- ($F4)_$SCHDLE JOB CANCEL_^1_%NUM $5202_(AT LEVEL TWO_7**MSOS 4.0_^1_%ADC_!JBCNCL_^1_%JMP* MI16_+RESET MIB_^1MI5A_!LDA* MIINP_L**MSOS 4.0_^1_%EOR =A*K_)CHECK FOR *K STATEMENT_^1_%SAZ MI5B_M**MSOS 4.0_^1_%INA€€ -8_+*C_A**MSOS 4.0_^1_%SAN MI6_N**MSOS 4.0_^1MI5B_!LDQ* MIP_N**MSOS 4.0_^1_%RAO* MIBX_M**MSOS 4.0_^1_%RTJ- ($F4)_^1_%NUM $2403_^1_%ADC JPCHGE_^1_%JMP* MI16_M**MSOS 4.0_^1MI6_"LDA* MIINP_(PICK-UP FIRST BUFFER ENTRY_^1_%EOR =X$2AFF_%CK FOR * CR_^1_%SAN MI9_^1_%JMP* MI16_)* CR - JUST CONTINUE_^1MI9_"LDQ* MIP_*Q POINTS TO INPUT BUFFER_^1_%LDA* MIINP_^1_%EOR =A*R_)CHECK TO RESTO€€RE A DEVICE_^1_%SAZ MI9B_)YES - SCHEDULE RESTOR_^1_%JMP* MI12_)NO - J05 ERROR_^1MI9B_!RAO* MIBX_)SET LOCK OUT FLAG_^1_%RTJ- ($F4)_^1_%NUM $2403_^1_%ADC RESTOR_^1_%JMP* MI16_)EXIT_^1MIP_"ADC MIINP_L**MSOS 4.0_^1_%SPC_!1_^1MI10_!LDA* AMIPRO_$PROCESSOR OTHER THAN J.P._^1_%ADD- $32_*8000_?**MSOS 4.0_^1_%INA 0_^1_%SAZ_!MI12-*-1_#SKIP IF NOT PRESENT_^1_%LDQ* MIP_^1_%RAO* MIBX_)SET €€MIBX FLAG - RECOVER, MIPRO_^1_%RTJ- ($F4)_$SCHDLE PROCESSOR_^1_%NUM $2443_L**MSOS 4.0_^1AMIPRO ADC MIPRO_(SYSTEM DIRECTORY ENTRY_-**MSOS 4.0_^1_%JMP* MI16_^1_%SPC_!1_^1MI12_!RTJ- ($F4)_$NO PROCESSOR_^1_%NUM $4C00_(ERROR - JP05_7**MSOS 4.0_^1_%ADC_!$0,$0,$18FC,$2_^1_%ADC_!MI14_^1MI16_!ENA_!0_^1_%STA* MIB_'SET MI NOT BUSY_^1_%JMP- (DISP)_^1_%SPC_!1_^1BATCH ALF 3,*BATCH_I**MS€€OS 4.0_^1MIINP BZS MIINP(L+1)_G**MSOS 4.0_^1F1_#ADC_!FILE1_^1MI14_!ALF 2,JP05_K**MSOS 4.0_^1MIOUT ALF_!1,MI_^1_%NUM_!$0DFF_^1ALVLST ADC LVLSTR_'ADR OF START OF RP=0 ALLOCATABLE_^1_%ADC LEND_)ADR OF END OF ALLOCATABLE AREA_^1_%ADC SWAPON_(ADR OF UNPROTECTED INDICATOR_^1LVLSTV ADC 0_^1_%EJT_]_^1*_*THIS ROUTINE IS ENTERED WHEN THE JOB PROCESSOR_^1*_*IS SIGNED OFF OR CANCELLED.€€_^1*_*THE JOB AREA IS MADE AVAILABLE TO THE_^1*_*PROTECTED PROGRAMS. THIS IS DONE BY_^1*_*FORCING A CORE-SWAP WHICH WILL NOT BE_^1*_*TERMINATED UNTIL THE JOB PROCESSOR IS_^1*_*REQUESTED AGAIN_^1*_*CORE SWAP IS NOT FORCED IN PART 0 IF_-**MSOS 4.0_^1*_*NOSWAP FLAG IS SET_?**MSOS 4.0_^1_%SPC_!2_^1RELFLE NOP_!0_)RELEASE ALL FILES ROUTINE_^1_%RAO* MIB_*SET MIB - LOCK OUT FOR MANUAL INT€€ERRUPT_^1_%EIN 0_^1_%ENQ_!3_^1RELFL0 LDA* (F1),Q_#RELEASE LAST FILE FIRST_^1_%SAZ_!RELFL1-*-1_!IF ZERO, SKIP RELEASE_^1_%STA* RELFL_^1_%RTJ- ($F4)_$RELEASE FILE_^1_%NUM_!$1800_^1RELFL NUM_!$0000_^1_%ENA_!0_^1_%STA* (F1),Q_#ZERO FILE LOCATION_^1RELFL1 INQ_!-1_^1_%SQM_!RELFL2-*-1_^1_%JMP* RELFL0_^1RELFL2 ENA_!0_)ZERO JP IN-CORE SWITCH._^1_%STA (JOBI)_^1_%LDQ- $E9_N**MSOS 4.0_€€^1_%LDA- 10,Q_M**MSOS 4.0_^1_%SAZ 1_,SKIP IF UNPROT CORE IN PRT 0_'**MSOS 4.0_^1_%JMP* RELPRT_K**MSOS 4.0_^1_%LDA- 11,Q_)DO NOT FORCE SWAP_2**MSOS 4.0_^1_%SAZ 1_.IF NOSWAP FLAG_3**MSOS 4.0_^1_%JMP* MI16_4SET_5**MSOS 4.0_^1_%SPC 2_^1*_8FORCE A CORE SWAP_^1_%SPC 2_^1_%ENQ RP_+SET REQUEST PRIORITY_^1_%LDA* (ALVLST),Q_"SAVE START OF ALLOCATABLE FOR THIS RP_^1_%STA* LVLSTV_^1_%LDA-€€ HICORE_^1_%INA -5_^1_%STA* (ALVLST),Q_^1_%RTJ- ($F4)_(SPACE REQUEST_^1_%ADC RP*16+$5403_G61*1285_^1_%ADC SWAPPD,0,0,0 LENGTH 0_^1_%JMP- (DISP)_^1_%SPC 2_^1SWAPPD LDA* LVLSTV_'SWAP COMPLETED_^1_%STQ RELSWP_'SAVE ADR FOR RELEASE_/**MSOS 4.0_^1_%ENQ RP_^1_%STA* (ALVLST),Q_"RESTORE LVLSTR + RP_^1_%JMP* MI16_)RELEASE MIB AND EXIT_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1RELPRT LDA- $F7€€_^1_%INA 1_P**MSOS 4.0_^1_%STA* RELUP_L**MSOS 4.0_^1_%STA* RELUPA_K**MSOS 4.0_^1_%RTJ- ($F4)_L**MSOS 4.0_^1_%ADC $5800_(PARTITION CORE RELEASE_^1RELUP NUM 0_,OF BACKGROUND_6**MSOS 4.0_^1_%RTJ- ($F4)_L**MSOS 4.0_^1_%ADC $62F3_(REQ OF PART 16 AT CP^2_-**MSOS 4.0_^1_%ADC RELA_+WILL CAUSE PROTECT BITS_***MSOS 4.0_^1_%NUM 0,0_,TO BE SET, THEN PARTITION_(**MSOS 4.0_^1_%NUM 10_-16€Ϊ IS RELEASED FOR_/**MSOS 4.0_^1_%NUM 16_.SYSTEM USE_6**MSOS 4.0_^1_%JMP- ($EA)_L**MSOS 4.0_^1RELA_!RTJ- ($F4)_L**MSOS 4.0_^1_%ADC $5800_L**MSOS 4.0_^1RELUPA ADC 0_P**MSOS 4.0_^1_%JMP* MI16_M**MSOS 4.0_^1_%END_]_^__ΪPMAKQ CSY/ A20 P€1_%NAM MAKQ_)DECK-ID A20 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$MAKE ERROR CODE_^1_%ENT_!MAKQ_^1_%EQU_!MAKQ(*)_^1 SPC 1_]_^1 SPC 1_]_^1_(ENT_%MAKEQ_^1_(EQU_%RETURN(15)_^1_(EQU_%LASTP1(11)_^1_(EQU_%CORE(10)_^1_(EQU_%ZERO($€€22)_^1_(EQU_%BIT14($31)_^1_(EQU_%ERRTAB(8)_^1_(EQU_%STATUS(12)_^1_(EQU_%X1FFF($F)_^1_(EQU_%SWITCH(9)_^1MAKEQ NOP_!0_^1_%IIN 0_^1_%LDA* MAKEQ_^1_%EIN 0_^1_%STA- RETURN,I_^1_(ENQ_%0_^1_(LDA-_$LASTP1,I_,S_^1_(SUB-_$CORE,I_^1_(SAZ_%NSHORT-*-1_^1_(LDA-_$SWITCH,I_,SWITCH SET_^1_(ALS_%13_2FOR LOWER_^1_(SAP_%1_^1_(RAO-_$CORE,I_.YES,INC ADDRES_^1_(ALS_%2_^1_(SAM_%NSHORT-*-1_^1_(LDA-_$LAS€€TP1,I_,SHORT TRANSFER_^1_(SUB-_$CORE,I_^1_(SAZ_%NSHORT-*-1_^1_(LDQ-_$LASTP1,I_+YES,SET NEXT_^1_(INQ_%-1_2AVAIL.LOC INTO_^1_(LDA-_$CORE,I_.END OF BUFFER_^1_(STA-_$(ZERO),Q_^1_%STA- LASTP1,I_^1_(LDQ-_$BIT14_^1NSHORT_!LDA-_$ERRTAB,I_^1_(AND-_$BIT14_^1_(SAZ_%NOERR-*-1_^1_(ALS_%1_^1_(EAQ_%Q_^1_(ENA_%1_^1_(AND-_$STATUS,I_^1_(ALS_%13_^1_(EAQ_%Q_^1NOERR_"LDA-_$X1FFF_^1_(AND-_$SWITCH,I_^1_(€LEAQ_%A_^1_(STA-_$SWITCH,I_^1_(LDQ-_$RETURN,I_^1_(JMP-_$(ZERO),Q_^1_(END_^__LPRW CSY/ A06 P€1_%NAM RW_+DECK-ID A06 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_*READ WRITE REQUEST PROCESSOR_^1_%ENT_!RW_^1_%EQU_!RW(*)_^1 SPC 1_]_^1 SPC 1_]_^1_%ENT T0,T1,T2,T4,T6_^1_%ENT SAVLU,CKTHRD,RPMASK_^1_%EXT LOG2,LOG1,LOG1A_^1_€€%EXT ALTSUB_'SUB. TO SET Q=ALT. IF LU IN Q IS DOWN_^1_%EXT CONVER_^1_%EQU H0100($2B)_^1_%EQU VR(3),VPL(4),VPTR(5)_^1_%EQU VTPE(6),VTMP(7)_^1_%EQU VID(8)_K**MSOS 4.0_^1_%EQU LIBLU($C2)_^1_%EQU ALUABS($BC),AREQXT($B9)_^1_%EQU PT(2),PS(5)_^1_%EQU AMONI($F4)_^1_%EQU ELU(5),EREQST(8)_^1_%EQU NZERO($12)_^1_%EQU ZERO($22)_^1_%EQU LPMSK(2),ONEBIT($23)_^1_%EQU MMCODE(2)_#M.M.€€ CLASS CODE_^1*_*ON ENTRY A, Q, AND I CONTAIN THE FOLLOWING_^1*_*A,_"PARAMETER LIST LOCATION_^1*_*Q,_"PARAMETER GIVING_^1*_0ADDRESS OF PROCESSOR_^1*_*I,_"ADDRESS OF VOLATILE_^1*_]_^1T1_#TRA Q_$PARAMETER LIST TO Q_^1_%LDA- 8,I_N**MSOS 4.0_^1_%SAM R1-*-1_'SKIP IF INDIRECT REQUEST_+**MSOS 4.0_^1*_**MSOS 4.0_^1_%AND- LPMSK+15_$NEGATIVE_;**MSOS 4.0_^1_%EOR- ONEBIT+15_#ON RETURN_:**MSOS 4.0_^1_%STA- (I)_*TO USER_<**MSOS 4.0_^1_%JMP- (AREQXT)_I**MSOS 4.0_^1************************************************************************_^1*_8ADDRESS COMPATE ROUTINE_^1*_]_^1*_*A.GT.Q_'DIFFERENCE RETURNED IN A_^1*_*A.EQ.Q_'A EQUAL 0_^1*_*A.LT.Q_'A SE€€T TO FFFF_^1*_]_^1COMPV4 NOP 0_^1_%IIN 0_^1_%SAM AUPPER_'A IN UPPER BANK_^1_%SQP BTHSAM_'BOTH IN LOWER BANK_^1_%JMP* QBIGR_(A IN LOWER Q IN UPPER_^1AUPPER SQM BTHSAM_'BOTH IN UPPER BANK_^1_%TCQ Q_,A IN UPPER Q IN LOWER_^1_%AAQ A_,GET DIFFERENCE IN A_^1_%JMP* ABIGR_^1BTHSAM TCQ Q_^1_%AAQ A_,SUBTRACT Q FROM A_^1_%SAP ABIGR_^1QBIGR SET A_,Q IS BIGGER_^1ABIGR EIN 0_^1_%€fJMP* (COMPV4)_^1************************************************************************_^1_%END_]_^__fPOFVOL CSY/ A14 P€1_%NAM OFVOL_(DECK-ID A14 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$VOLATILE STORAGE OVERFLOW_^1_%ENT_!OFVOL_^1_%EQU_!OFVOL(*)_^1 SPC 1_]_^1 SPC 1_]_^1*_#THIS PROGRAM IS ENTERRED WHEN VOLATILE STORAGE_^1*_#IS OVER SUBSCRIBED.€Ό_^1_%SPC 2_^1_%ENT OVFVOL_^1_%SPC 2_^1OVFVOL CLR M_^1_%LDQ =N$91_^1_%LDA- $2B_^1_%OUT -1_^1_%LDQ =N$90_^1_%ENA $4F_^1_%OUT -1_^1_%ENA $56_^1_%OUT -1_^1_%NUM $18FF_^1_%END_]_^__ΌPALVOL CSY/ A13 P€1_%NAM ALVOL_(DECK-ID A13 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$VOLATILE STORAGE ALLOCATION AND RETURN_^1_%ENT_!ALVOL_^1_%EQU_!ALVOL(*)_^1 SPC 1_]_^1 SPC 1_]_^1_%ENT VOLA,VOLR_^1_%EXT VOLEND_I**MSOS 4.1**_^1_%EXT OVFV€€OL_^1_%EQU VOLATL($F0),ZERO($22)_^1*_]_^1*_1VOLATILE STORAGE ALLOCATION_^1*_]_^1VOLA_!000 0_^1_%STQ- (VOLATL)_(SAVE Q IN VOLATILE 0_^1_%LDQ =XVOLEND_^1_%TCQ Q_^1_%ADQ- VOLATL_^1_%ADQ* (VOLA)_^1_%SQM VOLA1-*-1_(TEST FOR OVERFLOW_^1_%JMP+ OVFVOL_^1VOLA1 LDQ- VOLATL_^1_%STA- VA,Q_,SAVE A IN (VA)_^1_%LDA- I_^1_%STA- VI,Q_,SAVE I IN (VI)_^1_%STQ- I_/ADDRESS OF VOL. IN I_^1*_]_^1*_+€€UPDATE ENTRY POINT TO VOLATILE STORAGE_^1*_]_^1_%ADQ* (VOLA)_^1_%STQ- VOLATL_*SET ENTRY POINT TO START_^1*_;OF NEXT VOL BLOCK_^1_%RAO* VOLA_^1_%LDQ- (I)_*RESTORE A,Q CONTENTS_^1_%LDA- 1,I_^1_%JMP* (VOLA)_^1*_]_^1VOLR_!000 0_0RETURN VOLATILE_^1_%LDQ- I_/LOC. OF VOL. RETURNED IN I_^1_%LDA- VI,Q_^1_%STA- I_:RESTORE I_^1_%LDA- VA,Q_7RESTORE A_^1_%STQ- VOLATL_*RESTORE POINTER TO VOL._^1€Φ_%LDQ- (ZERO),Q_3RESTORE Q_^1_%JMP* (VOLR)_^1*_]_^1*_1VOLATILE STORAGE ASSIGNMENT._^1*_-ADDRESS OF VOLATILE ASSUMED IN I._^1*_]_^1_%EQU VA(1)_+USERS A SAVED AT VA_^1_%EQU VI(2)_+USERS I SAVED AT VI_^1_%END_]_^__ΦPALCORE CSY/ A15 P€1_%NAM ALCORE_'DECK-ID A15 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$CORE ALLOCATOR_^1_%ENT_!ALCORE_^1_%EQU_"ALCORE(*)_^1 SPC 1_]_^1 SPC 1_]_^1_%ENT REQALC,RTNCOR_^1_%EXT LVLSTR,LEND,CALTHD_^1_%EQU LPMSK($2),ZERO($22)_^1M€€INSIZ EQU MINSIZ(2)_^1MAXNO EQU MAXNO(LPMSK+15)_^1*_]_^1*_]_^1*_*THIS MODULE FINDS AN AVAILABLE AREA IN_^1*_+THE SPACE ALLOCATED TO IT AND ASSIGNS_^1*_+PART OF IT PER A SPACE REQUEST._^1*_]_^1*_*THE CORE ALLOCATOR IS ENTERRED FROM THE_^1*_+CORE ALLOCATOR DRIVER AND FROM THE_^1*_+RELEASE REQUEST PROCESSOR._^1*_]_^1*_*ON ENTRY TO ALLOCATE CORE, A AND Q MUST_^1*_+BE AS FOLLOWS._^1*_€€]_^1*_-A= REQUESTED LENGTH._^1*_-Q=PRIORITY LEVEL OF THE REQUEST._^1*_]_^1*_*AN ENTRY TO RETURN CORE PREVIOUSLY_^1*_+ALLOCATED MUST HAVE THE ORIGIN OF THE_^1*_+BLOCK BEING RETURNED IN Q._^1*_]_^1*_*ENTRIES TO OBTAIN SPACE ARE MADE_^1*_+THROUGH REQALC._^1*_*ENTRIES TO RETURN CORE ARE MADE_^1*_+THROUGH RTNCOR._^1*_]_^1*_*IF AN ALLOCATION CAN NEVER BE MADE, THEN_^1*_+A RETURN TO CALLE€€R IS MADE WITH Q=0_^1*_*IF NO SPACE IS AVAILABLE NOW, THEN A_^1*_+RETURN TO CALLER IS MADE WITH Q=-1_^1*_*IF THE ALLOCATION IS SUCCESSFUL, THEN_^1*_+A RETURN TO CALLER IS MADE WITH THE_^1*_+ORIGIN OF THE AREA IN Q._^1*_]_^1*_]_^1REQALC 000 0_^1_%STQ* REQLVL_)REQUEST LEVEL_^1_%INA MINSIZ_^1_%STA* REQLTH_)LENGTH=(A)+MINSIZ_^1_%LDA+ LVLSTR,Q_^1_%STA* LSTR_,LEVEL START_^1_%ADD* REQL€€TH_*IF LSTR+REQLTH .GE. LEND_^1_%SUB+ LEND_^1_%INA -2_^1_%SAM CA2_*IF LSTR + REQLTH .GT. LEND_^1_%ENQ 0_/ERROR CODE, Q=0_^1_%JMP* (REQALC)_^1*_]_^1*_*LOOK THROUGH THE AVAILABLE AREA FOR THE_^1*_+SMALLEST USEABLE PIECE._^1*_]_^1CA2_"LDA- MAXNO_62**15-1_^1_%STA* MINPCE_^1_%LDQ =XCALTHD_^1RCORE1 STQ* LTHD_^1*_]_^1*_1IF THREAD = FFFF, GO TO CEOT_^1*_]_^1_%LDQ- 1,Q_^1_%INQ 0_^1_%SQ€€N 1_^1_%JMP* CEOT_^1_%STQ- I_^1_%LDA- (I)_-IF PIECE TOO SMALL_^1_%SUB* REQLTH_^1_%SAP 1_^1_%JMP* CNXT_,GO GET NEXT PIECE_^1_%TRQ A_^1*_;IF THE START OF THE_^1_%SUB* LSTR_,PIECE ABOVE LEVEL START_^1_%SAM 1_/GO CHECK SIZE_^1_%JMP* CSIZCK_^1*_;OTHERWISE, PIECE STARS_^1*_;BELOW START FOR THIS_^1*_;LEVEL._^1*_]_^1*_;IF START OF PIECE, S1,_^1*_;PLUS ITS LENGTH IS_^1*_;.GE. THE REQUE€€ST LEVEL_^1*_;PLUS LENGTH, GO CHECK SIZ_^1_%ADD- (I)_^1_%SUB* REQLTH_^1_%SAP 1_^1_%JMP* CNXT_,CANT USE PIECE_^1CSIZCK LDA- (I)_-IF THIS PIECE LARGER THAN_^1_%SUB* MINPCE_*LAST PIECE, CHECK NEXT_^1_%SAM 1_^1_%JMP* CNXT_^1_%LDA- (I)_^1_%STA* MINPCE_*SAVE LNGTH AND LOC._^1_%LDA* LTHD_^1_%STA* LMINTD_*THREAD LOC. FOR SMALLEST_^1CNXT_!LDQ- I_/GET THE NEXT PIECE_^1_%JMP* RCORE1_*REPEA€€T SEARCH OF THREAD._^1LSTR_!NUM_]_^1REQLTH NUM 0_^1REQLVL NUM_]_^1MINPCE NUM 0_^1LMINTD NUM 0_^1LTHD_!NUM 0_^1*_]_^1CEOT_!LDA- MAXNO_+END OF THREAD._^1_%SUB* MINPCE_*IF NO PIECE FOUND, THEN_^1_%SAZ 1_^1_%SAP CA4P1-*-1_^1_%ENQ -1_.ERROR CODE RETURNED IN Q_^1_%JMP* (REQALC)_^1*_]_^1*_EA PIECE WAS FOUND_^1*_]_^1CA4P1 LDQ* LMINTD_^1_%LDA- 1,Q_^1_%STQ* S1_.S1 POINTS TO S2_^1_%STA* €€S2_.START OF SEGMENTS=S1=S2_^1_%LDA* (S2)_,CHOSEN PIECE LENGTH = CN_^1_%STA* CN_^1_%LDQ* S2_.S2 POINTS TO S3_^1_%LDA- 1,Q_^1_%STA* S3_^1*_]_^1_%LDA* LSTR_,IF NO LOWER PIECE_^1_%SUB* S2_^1_%SAZ ACA5-*-1_^1_%SAM ACA5-*-1_^1*_;A LOWER PIECE EXISTS._^1_%INA -MINSIZ-1_(IF LOWER PIECE LESS THAN_^1_%SAP 1_/MINIMUM SIZE PLUS 1_^1ACA5_!JMP* CA5_^1_%INA MINSIZ+1_^1_%STA* LS1PRIME_^1_%LDQ€€* S2_.S1,I=S2_^1_%STQ* S1_^1_%STQ- I_^1_%LDQ* LSTR_^1_%STQ* S2_^1_%LDA- 1,I_-POINTER TO S3_^1_%STA- 1,Q_-PUT INTO S2_^1_%STQ- 1,I_-POINTER TO S2 PUT IN S1_^1_%LDA* (S1)_,LTH S2=LS1PRIME-ORIG LTH_^1_%SUB* LS1PRIME_^1_%STA* (S2)_^1_%LDA* LS1PRIME_^1_%STA* (S1)_^1*_;THREAD NOW IS ...S1,S2,S3_^1*_*IF THERE IS NO UPPER PIECE, THEN GO TO CA6_^1*_]_^1CA5_"LDA* (S2)_^1_%SUB* REQLTH_^1_%SAN€€ 1_^1_%JMP* CA6_7GO TO CA6_^1_%INA -MINSIZ-1_(IF UPPER PIECE SMALLER_^1_%SAP 1_/THAN MIN SIZE, GO TO CA6_^1_%JMP* CA6_^1_%INA MINSIZ+1_^1_%STA* LS3PRIME_(LEFTOVER CALLED S3PRIME_^1_%LDQ* S2_^1_%STQ- I_/I POINTS TO S2_^1_%LDA* REQLTH_^1_%STA* (S2)_^1_%ADQ* REQLTH_^1_%LDA* LS3PRIME_(LENTH S3PRIME TO S3PRIME_^1_%STA- (ZERO),Q_^1_%LDA- 1,I_-POINTER TO NEW S3 INTO S2_^1_%STA- 1,Q_-PT€€R TO OLD S3 TO S3PRIME_^1_%STQ- 1,I_^1_%STQ* S3_.S3PRIME IS NEW S3_^1*_]_^1*_*REMOVE SEGMENT S2 FROM THREAD S1, S2, S3._^1*_]_^1CA6_"LDQ* S1_.THREAD S1 TO S3_^1_%LDA* S3_^1*_]_^1_%STA- 1,Q_^1_%LDQ* S2_.RETURN TO CALLER WITH_^1_%TRQ A_/Q=FIRST USABLE ADDRESS_^1_%INA MINSIZ_^1*_]_^1*_$STORE LOCATION OF AREA BEFORE THE AREA_^1*_]_^1_%STA- 1,Q_^1_%TRA Q_^1_%JMP* (REQALC)_^1*_]_^1*_*€€DATA STORAGE_^1*_]_^1S1_#NUM_]_^1_%BSS LS1PRIME(1)_^1S2_#NUM_]_^1_%BSS LS3PRIME(1)_^1S3_#NUM_]_^1CN_#NUM 0_/LENGTH OF CORE ALLOCATOR REQUEST_^1*_]_^1*_]_^1*_*CORE ALLOCATOR - RETURN CORE LOGIC_^1RTNCOR 0_"0_^1_%STQ* RS2_-RETURNED PIECE CALLED RS2_^1_%LDQ =XCALTHD_^1RCA1_!STQ* RTHD_,REFERENCE TO NEXT ENTRY_^1_%LDA- 1,Q_-ADDRESS OF ENTRY_^1_%NOP 0_^1_%INA 0_^1_%SAN 1_^1_%JMP* €€RCEOT1_5END OF THREAD_^1_%STA- I_^1_%SUB* RS2_-IF ENTRY ABOVE RS2,_^1*_FGO TO RCEOT1_^1_%SAP RCEOT1-*-1_^1_%LDQ- I_/GET NEXT PIECE_^1_%JMP* RCA1_^1RCEOT1 STQ- I_/REF TO ENTRY WHERE NEW_^1*_;PIECE WILL BE PUT IN I_^1_%LDA- 1,I_*CHECK IF RETURNED PIECE ALREADY_$46*750_^1_%EAQ Q_+RELEASED_=46*750_^1_%SQN RCA_*SKIP IF NOT_946*750_^1_%JMP* RCAD_N46*750_^1RCA_"LDQ* RS2_*THREAD NEW PIE€€CE_446*750_^1_%LDA- 1,I_-THREAD NEW PIECE IN_^1_%STA- 1,Q_-LOC. OF NEXT PIECE INTO_^1*_FNEW PIECE._^1_%STQ- 1,I_-LOC. OF NEW PIECE_^1*_;INTO REFERENCE_^1*_]_^1*_;IF LOWER PIECE TOUCHES_^1*_;NEW PIECE_^1_%LDA- I_^1_%ADD- (I)_^1_%SUB* RS2_^1_%SAN RCAC-*-1_^1_%LDA* (RS2)_+COMBINE PIECES_^1_%ADD- (I)_^1_%STA- (I)_^1_%LDA- 1,Q_-REF TO NEXT PIECE GOES TO_^1_%STA- 1,I_-COMBINED PIECE FRO€\NT._^1_%LDA- I_/CALL NEW PIECE RS2_^1_%STA* RS2_^1RCAC_!LDQ* RS2_-IF RS2 TOUCHES NEXT PIECE_^1_%TRQ A_^1_%ADD* (RS2)_^1_%SUB- 1,Q_^1_%SAN RCAD-*-1_^1*_]_^1_%LDA- 1,Q_-COMBINE PIECES_^1_%STA- I_^1_%LDA- (I)_^1_%ADD* (RS2)_^1_%STA* (RS2)_^1_%LDA- 1,I_^1_%STA- 1,Q_^1RCAD_!JMP* (RTNCOR)_^1RTHD_!NUM 0_/REFERENCE TO THREAD_^1RS2_"NUM_]_^1_%END_]_^__\PPRTCDR CSY/ A17 P€1_%NAM PRTCDR_'DECK-ID A17 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT PRTCDR,K65T12,PTNREL,K65COR_^1_%ENT SPCEV4,RDPTV4,OUTPV4_=**MSOS 4.0_^1_%EXT SWAPON,LOG1A,SPASW_?**MSOS 4.0_^1_%EXT UNPIO,SWAPAR,LOOP_@**MSOS 4.0_^1_%€€EXT STLPV4_K**MSOS 4.0_^1_%EXT STPRV4_^1_%EXT PARTBL,BUSY,LSTLOC,DIP,RPMASK_^1_%EXT SCHERR_^1_%SPC 1_^1* * * * * * * * * * * * * * * * * * * * * * * * * * *_^1*_R*_^1*_$PARTITIONED CORE ALLOCATOR_2*_^1*_$THIS MODULE IS ENTERED WHENEVER A PARTITION *_^1*_$HAS BEEN RELEASED OR WHEN A PARTITION_'*_^1*_$REQUEST IS MADE AND THE PARTITION HAS_'*_^1*_$ALREADY BEEN SCANNED._7*_^1*_R*€€_^1* * * * * * * * * * * * * * * * * * * * * * * * * * *_^1_%SPC 1_^1_%EQU ONEBIT($23)_^1_%EQU ADISP($EA),ZERO($22),LPMASK(2)_^1_%EQU THRDS(17)_H**MSOS 4.0_^1_%EQU USE(34)_J**MSOS 4.0_^1_%EQU TIME(4),UNPPRT(16)_?**MSOS 4.0_^1_%EQU THD(2),LNTH(4)_^1_%SPC 3_^1PRTCDR RTJ STPRV4_^1_%RTJ* SCAN_M**MSOS 4.0_^1_%JMP- (ADISP)_)NO REQUESTS TO SCHEDULE_^1*_]_^1*_$IF A REQUEST IS FOUN€€D WHICH CAN BE FILLED_^1*_$RETURN IS HERE WITH THE POINTER TO IT IN Q --_^1*_$I CONTAINS BASE TO PARTN. CORE TABLES_^1*_]_^1_%LDA- (ZERO),Q_^1_%AND- LPMASK+14_^1_%ARS 9_/CORE REQUEST_^1_%SAN PTCOR_+YES_^1_%STQ* DIRCAL_*NO, DIRECTORY REQUEST_^1_%LDQ- PC,Q_^1_%RTJ- ($F4)_+SCHEDULE READ FROM MASS STORAGE_^1_%NUM $6000_+INDIRECT_^1DIRCAL NUM 0_^1_%SAZ FINE_^1PTCOR LDA- PC,Q_^1_%S€€AN PTCOR1_*THERE IS A COMP. ADDRESS_^1_%STA- THD,Q_+NO COMP ADDR--CLEAR THREAD_^1FINE_!LDA DIP_-DONE WITH SCAN OF THREADS_^1_%SAM 1_^1_%JMP* PRTCDR_*NO_^1_%JMP- (ADISP)_)YES_^1PTCOR1 LDA- (ZERO),I_(PARTITIONED CORE REQUEST_^1_%STA- PQ,Q_,PASS ADDRESS OF CORE ALLOCATED_^1PACOMP LDA- (ZERO),Q_^1_%AND- LPMASK+15_'CREATE A SECONDARY_^1_%EOR- ONEBIT+15_'SCHEDULE REQUEST OF_^1_%STA- (€€ZERO),Q_(COMPLETION ROUTINE_^1_%STQ* COMPAD_^1_%LDQ- PQ,Q_^1_%RTJ- ($F4)_+INDIRECT ON PARTN. CORE REQ._^1_%NUM $6000_^1COMPAD NUM 0_/STUFF USERS COMP. ADDR._^1_%JMP* FINE_,GO TO CHECK IF SCAN IN PROGRESS_^1_%SPC 5_^1SCAN_!NOP 0_/NON-REENTRANT_^1_%LDQ* TOPBSY_*PICK UP SCAN INDEX_^1_%INQ 0_/IF NONZERO,SCAN OF THREAD_^1_%SQN INPROG_*IN PROGRESS_^1SCN0_!STQ+ DIP_^1SCN1_!LDQ+ =XPA€€RTBL_(NEW START,PUT TABLES BASE IN I_^1_%STQ- I_^1_%LDQ* (AV4A+1)_^1_%JMP* PROG1_^1INPROG LDA* SAVI_^1_%STA- I_/POSITIVE BUSY WORD REMAINING_^1PROG1 LRS 1_/IS NEXT PARTITION AVAILABLE_^1_%SAP AVAIL_+YES_^1_%RAO- I_/NO, BUMP PRTHDS POINTER_^1_%RAO* (SCN0+1)_^1_%SQM 1_/IF TOP BIT NOT SET_^1_%ADQ- ONEBIT+15_'SET IT_^1_%INQ 0_/ANY MORE PARTNS. AVAIL._^1_%SQN CONT1_O76*1849_^1_%JM€€P* EXIT_)NO_D76*1849_^1CONT1 JMP* PROG1_(YES, CHECK NEXT ONE_376*1849_^1AVAIL STQ* TOPBSY_*PARTITION AVAILABLE_^1_%IIN 0_P**MSOS 4.0_^1_%LDQ- THRDS,I_)PICK UP TOP OF THREAD_^1_%INQ 0_^1_%SQZ 1_P**MSOS 4.0_^1_%JMP* AV1_*SOMETHING ON THREAD_0**MSOS 4.0_^1_%EIN_]_^1_%RAO- I_/EMPTY THREAD, CONTINUE_^1_%RAO* (SCN0+1)_^1_%LDA* (SCN0+1)_$PICKUP DRIVER IN PROGRESS COUNTER_$76*1849_^1_€€%INA -17_*HAVE ALL PARTITIONS BEEN CHECKED_%76*1849_^1_%SAM CONTU_(NO_D76*1849_^1_%JMP* EXITA_(YES_C76*1849_^1CONTU LDQ* TOPBSY_N76*1849_^1_%JMP* PROG1_+SEARCH_^1EXIT_!STQ* TOPBSY_*CLEAR TOP OF BUSY WORD_^1_%SET Q_^1_%STQ* (SCN0+1)_^1_%ENQ 10_O**MSOS 4.0_^1_%LDQ- ($E9),Q_%CHECK FOR UNPROTECTED_.**MSOS 4.0_^1_%SQN 1_2PARTITION_4**MSOS 4.0_^1_%JMP* EXITA_(NO UNPROTECTED_!PARTIT€€ION,EXIT_#**MSOS 4.0_^1_%LDA* SCN1+1_^1_%INA UNPPRT_^1_%STA- I_^1_%IIN 0_P**MSOS 4.0_^1_%LDQ- THRDS,I_%CHECK IF ANY REQUESTS ON_+**MSOS 4.0_^1_%INQ 0_.THREAD FOR UNPROTECTED PARTITION_^1_%SQZ EXITA_(SKIP IF NO REQUESTS_0**MSOS 4.0_^1_%JMP CKSWAP_K**MSOS 4.0_^1EXITA EIN 0_P**MSOS 4.0_^1_%JMP* (SCAN)_*RETURN_^1AV1_"LDA- THD,Q_+MOVE NEXT REQ. TO TOP_^1_%STA- THRDS,I_)OF THREAD_€€^1_%EIN_]_^1_%STQ* PTR_-STORE REQUEST POINTER_^1_%LDA- (ZERO),I_^1_%ADD- LNTH,Q_*CALCULATE LAST LOC. OF REQ._^1_%INA -1_^1_%SOV 0_^1_%STA* SAVI_,SAVE LAST LOC OF REQ._^1_%RTJ* (COMPRE+1)_#DOES REQUESTED PTN END BEYOND_$**MSOS 4.0_^1_%ADC LSTLOC_'LAST LOCATION OF PTND. CORE_^1_%INA 0_^1_%SAZ 1_,NO_^1_%JMP* REQERR_'YES--ERROR_^1_%ENQ 1_^1AV3_"LDA- (ZERO),B_$IS THIS PTN. BEYOND €€END OF_^1COMPRE RTJ+ COMPAR_K**MSOS 4.0_^1_%ADC SAVI_^1_%INA 0_^1_%SAN AV4_*YES--ALLOCATE PARTITIONS_^1_%INQ 1_^1_%JMP* AV3_*NO--CHECK NEXT ONE_^1_%BZS TOPBSY,SAVI,PTR_^1AV4_"TRQ A_^1_%INA -1_^1_%ADD+ =X$F40_*NO. OF PARTNS IN Q_^1_%STA* SHIF1_^1_%LDA* TOPBSY_*UPDATE AND SAVE SCAN INDEX_^1SHIF1 ARS 0_^1_%STA* TOPBSY_^1_%TRQ A_^1_%ADD* (SCN0+1)_(UPDATE DRIVER IN PROG. IND._€€^1_%STA* (SCN0+1)_^1_%LDQ- LPMASK,Q_(SET 1 BIT/PARTN._^1_%LDA- I_^1_%SUB* SCN1+1_*SHIFT BITS TO CORRESPOND_^1_%ADD+ =X$FA0_*WITH PARTN. NUMBERS_^1_%STA* SHIF2_^1SHIF2 QLS 0_^1AV4A_!LDA BUSY_,SEE IF ALL REQUIRED PARTNS._^1_%LAQ A_/ARE AVAILABLE_^1_%SAZ AV5_-YES_^1_%JMP* RETHD_+NO, RETHREAD THE REQUEST_^1AV5_"STQ- USE,I_+SET BITS REQUIRED IN USE TABLE_^1_%LDA* (AV4A+1)_^1_%EAQ €€A_^1_%STA* (AV4A+1)_(UPDATE BUSY WORD_^1_%LDQ* (SCN0+1)_(COMPUTE TABLE POINTER_^1_%ADQ* SCN1+1_*TO NEXT PARTITION_^1_%STQ* SAVI_,AND SAVE IT_^1_%LDQ* PTR_-PUT POINTER TO REQUEST IN Q_^1_%RAO* SCAN_^1_%JMP* (SCAN)_*RETURN TO CALLER_^1REQERR LDA- I_^1_%INA 1_^1_%STA* SAVI_^1_%CLR A_/SET Q TO INDICATE CORE_^1_%STA- PQ,Q_,WILL NEVER BE AVAILABLE_^1_%JMP PACOMP_'GO TO PART.ALLOC.COMPL€€T._.76*1849_^1RETHD LDQ* PTR_^1_%LDA- (ZERO),Q_^1_%AND- LPMASK+8_^1_%ARS 4_/STORE REQUEST PRIORITY_^1_%STA* LEVEL_+LEVEL TEMPORARILY_^1_%LDQ* (SCN0+1)_^1_%ADQ* SCN1+1_^1_%STQ* SAVI_^1_%IIN_]_^1_%LDQ- I_^1_%INQ 14_.THREAD THIS REQ._^1RE1_"STQ- I_^1_%LDQ- THD,Q_+BEFORE LOWER OR_^1_%TRQ A_^1_%INA 0_^1_%SAZ HERE_^1_%LDA- (ZERO),Q_(EQUAL PRIORITY REQUESTS_^1_%AND- LPMASK+8_^1_%ARS€€ 4_^1_%SUB* LEVEL_^1_%SAM HERE_^1_%SAZ HERE_^1_%JMP* RE1_^1HERE_!LDA* PTR_-INSERT REQUEST_^1_%STA- THD,I_^1_%LLS 16_^1_%EIN_]_^1_%STA- THD,Q_^1_%LDQ* TOPBSY_*RESUME SCAN_^1_%JMP INPROG_^1_%BZS LEVEL_^1*_$*_%*_%*_%*_%*_%*_%*_#*_%*_^1*_$THIS ROUTINE HANDLES THE UNPROTECTED CORE PARTITION._^1*_$IF REQUEST FOR THIS PARTITION HAS A COMPLETION_^1*_$PRIORITY ^ 2 BACKGROUND PROGRAM €€WILL BE_^1*_$SWAPPED TO MASS MEMORY._^1*_\**MSOS 4.0_^1CKSWAP LDA* P16BSY_K**MSOS 4.0_^1_%SAN 1_P**MSOS 4.0_^1_%JMP* NOSWAP_K**MSOS 4.0_^1ASWAPN LDA SWAPON_'IF SWAP IS ALREADY ON, EXIT_(**MSOS 4.0_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP- (ADISP)_J**MSOS 4.0_^1_%LDA- (ZERO),Q_I**MSOS 4.0_^1_%AND- LPMASK+4_$EXIT IF COMPLETION PRIORITY OF_$**MSOS 4.0_^1_%INA -3_-REQUEST IS NOT GR. TH. 3_)**€€MSOS 4.0_^1_%SAP 1_P**MSOS 4.0_^1_%JMP- (ADISP)_J**MSOS 4.0_^1_%EIN 0_P**MSOS 4.0_^1XLOG1A LDQ+ =XLOG1A_I**MSOS4.0**_^1_%LDQ- 1,Q_N**MSOS 4.0_^1_%LDA- TIME,Q_K**MSOS 4.0_^1_%SAM 1_P**MSOS 4.0_^1_%JMP- (ADISP)_J**MSOS 4.0_^1_%LDA =XPRTCDR_$STORE PART CORE DRIVER_-**MSOS 4.0_^1_%STA- 3,Q_,ADDRESS FOR TIME-OUT_-**MSOS 4.0_^1_%LDA+ UNPIO_(SCHEDULING OF SWAP_1**MSOS 4.0_^1_%SAZ WRT€€OUT_'SKIP IF NO UNPROTECTED I/0 PENDING **MSOS 4.0_^1_%STA SPASW_(SET WAITING TO SWAP SWITCH_^1_%JMP- (ADISP)_%FOR PROTECT PROCESSOR_.**MSOS 4.0_^1WRTOUT LDA- $F6_N**MSOS 4.0_^1_%SUB- $F7_N**MSOS 4.0_^1_%INA -1_+STORE LENGTH OF UNPROTECTED_(**MSOS 4.0_^1_%STA* LENGTH_^1_%STA* SPCLGN_K**MSOS 4.0_^1_%STA* LEN2_M**MSOS 4.0_^1_%LDA- $F7_N**MSOS 4.0_^1_%INA 1_P**MSOS 4.0_^1_%STA* ST€€ART_L**MSOS 4.0_^1_%STA* START2_K**MSOS 4.0_^1_%RTJ- ($F4)_K**MSOS4.0**_^1OUTPV4 ADC $4CF0_(WRITE OUT BACKGROUND_/**MSOS 4.0_^1_%ADC CA_-TO MASS MEMORY_3**MSOS 4.0_^1_%NUM 0,$8C2_K**MSOS 4.0_^1LENGTH NUM 0_P**MSOS 4.0_^1START NUM 0_P**MSOS 4.0_^1_%NUM 0_P**MSOS 4.0_^1_%ADC SWAPAR_K**MSOS 4.0_^1_%RTJ STLPV4_'SUBR IN DRCORE - CLEARS SPASW,_$**MSOS 4.0_^1*_:SETS UP LEVEL TWO €€LOOP,_***MSOS 4.0_^1*_;SETS SWAPON FLAG_0**MSOS 4.0_^1_%JMP- (ADISP)_J**MSOS 4.0_^1*_\**MSOS 4.0_^1*_$ROUTINE ENTERED AT COMPLETION OF SWAP I/0_-**MSOS 4.0_^1CA_#ENA 0_P**MSOS 4.0_^1_%STA* P16BSY_'CLEAR PAR 16 BUSY FLAG_-**MSOS 4.0_^1_%RTJ- ($F4)_L**MSOS 4.0_^1SPCEV4 ADC $6200_)PART 1 PARTITION COREREQUST_'**MSOS 4.0_^1_%ADC CB_/FOR SWAPPED AREA - WILL_(**MSOS 4.0_^1_%NUM 0_-BE€€ COMPLETED WHEN HIGH_,**MSOS 4.0_^1_%NUM 0_O**MSOS4.0**_^1SPCLGN ADC 16_+PRIORITY PROGRAMS RELEASE_***MSOS 4.0_^1_%ADC UNPPRT_*PARTITION_7**MSOS 4.0_^1_%JMP- (ADISP)_J**MSOS 4.0_^1*_\**MSOS 4.0_^1*_#ROUTINE ENTERED_#AFTER SPACE BECOMES AVAILABLE_%**MSOS 4.0_^1CB_#RTJ- ($F4)_L**MSOS 4.0_^1RDPTV4 ADC $4800_(READ SWAPPED AREA BACK IN_)**MSOS4.0**_^1_%ADC CC_N**MSOS4.0**_^1_%NUM €€0,$8C2_J**MSOS4.0**_^1LEN2_!NUM 0_O**MSOS4.0**_^1START2 NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%ADC SWAPAR_J**MSOS4.0**_^1AJDISP JMP- (ADISP)_I**MSOS4.0**_^1CC_#LDA* AJDISP_'TURN OFF LEVEL 2 LOOP_^1_%STA LOOP_^1_%LDQ* XLOG1A+1_H**MSOS4.0**_^1_%LDQ- 1,Q_M**MSOS4.0**_^1_%LDA- 13,Q_)RESET TIME SINCE LAST SWAP_(**MSOS4.0**_^1_%STA- TIME,Q_J**MSOS4.0**_^1_%LDQ- $F6_^1_%LDA* L€€ENGTH_K**MSOS 4.0_^1CD_#INQ -1_+CLEAR PROTECT BITS_1**MSOS 4.0_^1_%CPB 0_P**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%SAZ CE_O**MSOS 4.0_^1_%JMP* CD_O**MSOS 4.0_^1CE_#IIN 0_P**MSOS 4.0_^1_%STA* (ASWAPN+1)_^1_%STA* PRSTAT_)STATE FLAGS_6**MSOS 4.0_^1_%ENA 1_,SET PARTITION 16 BUSY_.**MSOS 4.0_^1_%STA* P16BSY_K**MSOS 4.0_^1_%EIN 0_P**MSOS 4.0_^1_%JMP PRTCDR_K**MSOS 4.0_^1*_\**MSOS 4.€€0_^1*_\**MSOS 4.0_^1P16BSY NUM 0_,PARTITION 16 BUSY FLAG_-**MSOS 4.0_^1PRSTAT NUM 0_,SET IF PARTITION 16_0**MSOS 4.0_^1*_9IN PROTECTED STATE_0**MSOS 4.0_^1*_\**MSOS 4.0_^1NOSWAP LDA- THD,Q_(MOVE NEXT REQ TO_3**MSOS 4.0_^1_%STA- THRDS,I_'TOP OF THREAD_5**MSOS 4.0_^1_%EIN 0_P**MSOS 4.0_^1POINT STQ+ PTR_^1_%LDA =X$F6_^1_%STA* COA_,OF REQ BEYOND LAST_/**MSOS 4.0_^1_%LDA- (ZERO),I_€€$LOCATION OF PARTITION_.**MSOS 4.0_^1_%ADD- LNTH,Q_+16_=**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%SOV 0_P**MSOS 4.0_^1_%RTJ* COMPAR_K**MSOS 4.0_^1COA_"NUM 0_P**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ 2_,SKIP IF NO ERROE_3**MSOS 4.0_^1_%JMP REQERR_K**MSOS 4.0_^1_%LDQ* (POINT+1)_H***MSOS 4._^1_%LDA- (ZERO),Q_$IF COMP PROOR. OF REQ_.**MSOS 4.0_^1_%AND- LPMASK+4_'IS LT 3 - REQUEST_0**€€MSOS 4.0_^1_%INA -3_+IS FOR AN_:**MSOS 4.0_^1_%SAM 1_,UNPROTECTED PARTITION -_,**MSOS 4.0_^1_%JMP* PROT_M**MSOS 4.0_^1_%LDA* PRSTAT_'IF PARTITION IS PRESENTLY_***MSOS 4.0_^1_%SAZ COD_,PROTECTED CLEAR_2**MSOS 4.0_^1_%LDA- $F6_.PROTEC BITS_4**MSOS 4.0_^1_%SUB- $F7_N**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%LDQ- $F6_N**MSOS 4.0_^1COB_"INQ -1_O**MSOS 4.0_^1_%CPB 0_P**MSOS 4.0_^1_%INA€€ -1_O**MSOS 4.0_^1_%SAZ COC_N**MSOS 4.0_^1_%JMP* COB_N**MSOS 4.0_^1COC_"STA* PRSTAT_'CLEAR PROT STATE FLAG_.**MSOS 4.0_^1COD_"JMP* PRD_N**MSOS 4.0_^1*_%IF REQUEST PR IS GT 3-PARTITION MUST BE_.**MSOS 4.0_^1*_#PROTECTED_N**MSOS 4.0_^1PROT_!LDA* PRSTAT_K**MSOS 4.0_^1_%SAN PRD_N**MSOS 4.0_^1_%LDA- $F6_*SET PROTECT BITS_3**MSOS 4.0_^1_%SUB- $F7_,IF NOT SET_7**MSOS 4.0_^1_%INA -1_O*€€*MSOS 4.0_^1_%LDQ- $F6_N**MSOS 4.0_^1PRA_"INQ -1_O**MSOS 4.0_^1_%SPB 0_P**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%SAZ PRB_N**MSOS 4.0_^1_%JMP* PRA_N**MSOS 4.0_^1PRB_"ENA 1_,SET PROT STATE FLAG_0**MSOS 4.0_^1_%STA* PRSTAT_K**MSOS 4.0_^1PRD_"ENA 1_,SET PART 16 BUSY_3**MSOS 4.0_^1_%STA* P16BSY_1FLAG_5**MSOS 4.0_^1_%RAO SCAN_M**MSOS 4.0_^1_%LDQ* (POINT+1)_H***MSOS 4._^1_%JMP (SCAN)€€_K**MSOS 4.0_^1_%SPC 3_^1*_$*_%*_%*_%*_%*_%*_%*_^1*_$SUBROUTINE TO COMPARE TWO 16 BIT ADDRESSES_$*_^1*_$ENTERED VIA RTJ WITH ONE NUMBER IN A AND THE_"*_^1*_$ADDRESS OF THE NUMBER TO BE COMPARED WITH IT_"*_^1*_$FOLLOWING THE RTJ.,'VALUE'._4*_^1*_$IF A.GT.'VALUE' THE DIFFERENCE IS RETURNED IN A *_^1*_$IF A.EQ.'VALUE' A IS SET TO ZERO_/*_^1*_$IF A.LT.'VALUE' A IS SET TO $FFFF_.*_^1*_€€$*_%*_%*_%*_%*_%*_%*_^1_%SPC 1_^1COMPAR NOP 0_^1_%IIN 0_^1_%STQ* SAVQ_^1_%LDQ* (COMPAR)_^1_%LDQ- (ZERO),Q_$GET STORAGE WORD TO COMPARE WITH A_^1_%SAM 2_,A IS IN UPPER BANK_^1_%SQP CMP1_)BOTH IN LOWER BANK--COMPARE_^1_%SQM QBIGR_(Q IN BANK 1-- A IN BANK 0_^1_%SQM CMP1_)A AND Q BOTH IN UPPER BANK_^1_%TCQ Q_,A IN BANK 1-- Q IN BANK 0_^1_%AAQ A_,GET DIFFERENCE IN A_^1_%JMP* AB€€IGR_^1CMP1_!TCQ Q_^1_%AAQ A_,SUB. Q FROM A_^1_%SAP ABIGR_^1QBIGR SET A_,Q IS LARGER--SET A=$FFFF_^1ABIGR LDQ* SAVQ_)OTHERWISE A CONTAINS DIFFERENCE_^1_%RAO* COMPAR_^1_%EIN 0_^1_%JMP* (COMPAR)_^1SAVQ_!NUM 0_^1_%EJT 0_^1* * * * * * * * * * * * * * * * * * * * * * * * * * *_^1*_R*_^1*_$RELEASE PARTITION REQUEST PROCESSOR_(*_^1*_$THIS MODULE IS ENTERED FROM T12 WITH_(*_^1*_$T€€HE FIRST LOCATION OF VOLATILE IN I_)*_^1*_$AND THE POINTER TO THE PARAMETER LIST IN Q. *_^1*_R*_^1* * * * * * * * * * * * * * * * * * * * * * * * * * *_^1_%SPC 2_^1K65T12 LDA- PC,Q_^1_%STA- VTEM,I_^1_%RTJ STPRV4_'CHECK IF COMP PRIORITIES SET_'**MSOS 4.0_^1_%LDA- VTEM,I_K**MSOS 4.0_^1_%SUB- $F7_*CHECK IF RELEASING_1**MSOS 4.0_^1_%INA -1_-UNPROTECTED PARTITION_,**MSOS 4.0_^1_%SAN€€ TAG1_P76*1849_^1_%ENQ UNPPRT_K**MSOS 4.0_^1_%JMP* CHK2_^1TAG1_!ENQ 15_R76*1849_^1LOCATE LDA- I_,SEARCH FOR PARTITION IN WHICH_^1_%INA VTEM_)RELEASE ADDR FALLS_^1_%IIN 0_^1_%STA* LOC2_)LOCATION OF RELEASE ADDR. STUFFED_^1LOC1_!LDA PARTBL,Q_$IN CALL TO COMPAR_^1_%RTJ* COMPAR_'DOES ADDR. TO BE RELEASED FALL_^1LOC2_!ADC VTEM_)IN THIS PARTITION_^1_%SAZ CHKUSE_'YES--RIGHT ON STA€€RT OF PTN._^1_%INA 0_^1_%SAZ CHKUSE_'YES--WITHIN PTN._^1_%SQZ ERR_*NOT WITHIN ANY PTN._^1_%INQ -1_^1_%JMP* LOCATE_'NO--GO CHECK NEXT PTN._^1CHKUSE LDA* (BSY+1)_%IS THIS PTN. EVEN ALLOCATED_^1_%AND- ONEBIT,Q_^1_%SAZ ERR_*NO_^1CHK1_!ADQ* LOC1+1_'YES--FIND WHERE BLOCK_^1_%LDA- USE,Q_(ALLOCATED BEGINS_^1_%SAN CHK2_)FOUND_^1_%INQ -1_+NOT FOUND--CHECK NEXT_^1_%JMP* CHK1_)LOWER PTN€€._^1ERR_"LDQ- VPTR,I_*ILLEGAL REQ.--IGNORE_^1_%JMP SCHERR_^1CHK2_!RTJ- ($F4)_(SCHEDULE SELF AT CORE ALLOC._^1PTNREL NUM $5200_+PRI._^1_%ADC RELEAS_^1_%JMP- (AREQXT)_^1RELEAS TRQ A_P**MSOS 4.0_^1_%INA -UNPPRT_J**MSOS 4.0_^1_%SAN RELA_M**MSOS 4.0_^1_%STA* P16BSY_'SET PARTITION 16_3**MSOS 4.0_^1_%JMP* RELB_,FREE_<**MSOS 4.0_^1RELA_!LDA- USE,Q_L**MSOS 4.0_^1BSY_"EOR BUSY_,CLEAR €€THESE BITS IN BUSY WORD_^1_%STA* (BSY+1)_^1_%CLR A_/CLEAR MASK FOR RANGE ASSOC._^1_%STA- USE,Q_+WITH THIS PARTN._^1RELB_!JMP PRTCDR_(FIND REQ TO FILL_2**MSOS 4.0_^1_%EJT 0_^1* * * * * * * * * * * * * * * * * * * * * * * * * * *_^1*_$SPECIAL PARTITIONED CORE REQUEST FOR 65K_#*_^1*_$SYSTEM -- THIS MODULE IS ENTERED IF BIT 14_!*_^1*_$OF THE FIRST WORD OF A SPACE REQUEST IS SET. *_^€€1*_$ENTRY IS FROM T10--_9*_^1*_*Q = POINTER TO PARAMETER LIST_**_^1*_*I = POINTER TO VOLATILE STORAGE_(*_^1*_R*_^1*_$VOLATILE CONTAINS THE FOLLOWING ON ENTRY--_!*_^1*_R*_^1*_*0_!Q REGISTER OF REQUESTER_,*_^1*_*1_!A REGISTER OF REQUESTER_,*_^1*_*2_!I REGISTER OF REQUESTER_,*_^1*_*3_!RETURN ADDRESS FROM REQ. PROC._$*_^1*_*4_!REQUEST PRIORITY_3*_^1*_*5_!POINTER TO REQUEST_1*_^1*_*6_!U€€NUSED_=*_^1*_*7_!REQUEST CODE_7*_^1*_*8_!INDIRECT REQ. INDICATOR_,*_^1* * * * * * * * * * * * * * * * * * * * * * * * * * *_^1_%ENT K65T10,PTNALC_^1* * * * * * * * * * * * * * * * * * * * * * * * * * *_^1*_$REQUEST PARAMETER LIST IS AS FOLLOWS--_%*_^1*_R*_^1*_$WORD 0_!REQUEST CODE AND PRIORITY LEVELS_"*_^1*_$WORD 1_!COMPLETION ADDRESS_1*_^1*_$WORD 2_!THREAD_=*_^1*_$WORD 3_!REQUEST€€ERS Q_7*_^1*_$WORD 4_!NUMBER OF WORDS_4*_^1*_$WORD 5_!STARTING PARTITION (15 OR LESS)_#*_^1* * * * * * * * * * * * * * * * * * * * * * * * * * *_^1_%EQU PC(1),PT(2),PQ(3),PP(5)_^1_%EQU VR(3),VPL(4),VPTR(5),VTEM(6),VTMP(7),VIND(8)_^1_%EQU AREQXT($B9)_^1K65T10 LDA- VIND,I_*CHECK FOR INDIRECT REQ._^1_%SAN 1_/UPDATE RETURN IF REQ._^1_%RAO- VR,I_,IS DIRECT_^1K65COR LDA- (ZERO),Q_^1_€€%AND- LPMASK+14_^1_%ARS 9_/DIRECTORY REQ._^1_%SAZ 1_^1_%JMP* PTCORE_^1_%STA- VIND,I_*YES_^1_%LDA- PC,Q_,GET PRTN. BDG. ADDR._^1_%STA- VTEM,I_^1_%LDQ* ATBL+1_*GET BASE OF TABLES_^1FNDPRT LDA- (ZERO),Q_^1_%INA 0_/FIND PARTN. NO._^1_%SAN TRYNXT_K**MSOS 4.0_^1CKUNP LDA- $F7_*CHECK IF UMPROTECTED PART_^1_%INA 1_1IS START OF PARTITION_)**MSOS 4.0_^1_%TRA Q_P**MSOS 4.0_^1_%SUB- VTE€€M,I_K**MSOS 4.0_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* SCDERR_^1_%TRQ A_,STORE ($F7+1) INTO PARTITION 16_#**MSOS 4.0_^1_%ENQ UNPPRT_.START ADDRESS_/**MSOS 4.0_^1_%STA* (ATBL+1),Q_G**MSOS 4.0_^1_%STQ- VIND,I_)SAVE NUMBER OF PARTITION_)**MSOS 4.0_^1_%LDQ =XPARTBL,Q_G**MSOS 4.0_^1_%JMP* FOUND_L**MSOS 4.0_^1TRYNXT SUB- VTEM,I_^1_%SAZ FOUND_+PRTN. FOUND_^1_%INQ 1_^1_%RAO- VIND,I_*BUMP IND€€EX AND NO._^1_%LDA- VIND,I_^1_%INA -16_^1_%SAN 1_^1_%JMP* CKUNP_^1_%JMP* FNDPRT_*TRY NEXT PRTN._^1FOUND STQ- VTEM,I_*SAVE INDEX TO TABLES_^1_%JMP* THDSTR_^1PTCORE LDA- PP,Q_,PICK UP PARTITION NUMBER_^1_%AND- LPMASK+5_I**MSOS 4.0_^1_%STA- VIND,I_^1_%TRA Q_P**MSOS 4.0_^1_%INQ -UNPPRT_^1_%SQN ATBL_M**MSOS 4.0_^1_%TRA Q_P**MSOS 4.0_^1_%LDA- $F7_N**MSOS 4.0_^1_%INA 1_P**MSOS 4.0€€_^1_%STA* (ATBL+1),Q_G**MSOS 4.0_^1_%TRQ A_P**MSOS 4.0_^1ATBL_!ADD+ =XPARTBL_(ADD TABLE BASE TO IT_^1_%STA- VTEM,I_*STORE TEMPORARILY_^1_%TRA Q_^1_%LDA- (ZERO),Q_(PICK UP STARTING ADDR OF_^1_%INA 0_^1_%SAN 1_/PARTITION_^1_%JMP* SCDERR_^1_%LDQ- VPTR,I_^1_%LDQ- LNTH,Q_*CHECK FOR POSSIBLE WRAP AROUND_^1_%AAQ Q_^1_%SAM 1_,IF A IS IN BANK 0 AND_^1_%SQM NOWRAP_'Q IS IN BANK 1, NO €€WRAPAROUND_^1_%SAP 1_,IF A IS IN BANK 1 AND_^1_%SQP WRAP_)Q IS IN BANK 0, WRAPAROUND_^1_%TCQ Q_^1_%AAQ Q_,IS START OF PTN. BELOW END_^1_%SQM 1_,YES, NO WRAPAROUND_^1WRAP_!JMP* SCDERR_'NO, MUST BE WRAPAROUND_^1NOWRAP LDQ- VPTR,I_*STORE IN Q RETN. OF REQ._^1_%STA- PQ,Q_^1THDSTR LDQ- VTEM,I_^1_%LDA- THRDS,Q_)TOP OF THIS PARTN. THREAD_^1_%INQ 15_O**MSOS 4.0_^1_%STQ- VTMP,I_^1_%IN€€A 0_/EMPTY THREAD_^1_%SAN 1_^1_%JMP* THRDIT+1_(YES, THREAD THIS REQ._^1_%IIN 0_^1_%STQ* TOP_-SAVE LOC. OF THREAD_^1*_]_^1*_$SEARCH DOWN THREAD FOR APPROPRIATE POSITION_^1*_]_^1SCHTHD STQ- VTMP,I_*SAVE PREVIOUS ENTRY LOC._^1_%LDQ* TOP_^1_%EIN 0_^1_%LDA- PT,Q_,CHECK IF TOP OF THREAD_^1_%NOP 0_/ALTERED WHILE_^1_%IIN 0_/INTERRUPTS_^1_%STQ* TOP_-ENABLED_^1_%SUB- PT,Q_^1_%SAZ 1_^1€€_%JMP* THDSTR_*YES, RESTART SEARCH_^1_%LDQ- VTMP,I_*NO, CONTINUE_^1_%LDQ- PT,Q_,NEXT ENTRY ON THREAD_^1_%INQ 0_/END OF THREAD_^1_%SQN 1_^1_%JMP* THRDIT_*YES, PUT REQ.HERE_^1_%LDA- (ZERO),Q_(NO, LOWER PRI. LEVEL_^1_%AND+ RPMASK_^1_%SUB- VPL,I_^1_%SAM THRDIT_*YES, PUT REQ. HERE_^1_%JMP* SCHTHD_*NO, EXAMINE NEXT REQ. ON THD._^1TOP_"NUM 0_^1THRDIT LDQ- VTMP,I_*POINTER TO FOLLOWING €€REQ._^1_%LDA- PT,Q_^1_%LDQ- VPTR,I_*TO THREAD OF CURRENT REQ._^1_%STA- PT,Q_^1_%TRQ A_/POINTER TO CURRENT REQ._^1_%LDQ- VTMP,I_^1_%STA- PT,Q_,TO THREAD OF PREVIOUS REQ._^1_%EIN 0_^1*_]_^1*_$CHECK TO SEE WHETHER THREADS ARE BEING SCANNED_^1*_$AND WHETHER THIS PARTN THREAD HAS BEEN PASSED_^1*_$BY THE SCAN_^1*_]_^1_%LDA+ DIP_-SCAN IN PROGRESS_^1_%SAM SCHDRV_*NO_^1_%SUB- VIND,I_*YES€J, PAST THIS PARTN_^1_%SAM RETURN_*NO_^1SCHDRV RTJ- ($F4)_+YES, SCHEDULE PARTITIONED_^1PTNALC NUM $5200_+CORE DRIVER_^1_%ADC PRTCDR_^1RETURN JMP- (AREQXT)_^1SCDERR LDQ- VPTR,I_*REQ. POINTER TO Q_^1_%LDA* PTNALC_*STUFF REQ. CODE AND PRIORITY_^1_%STA* RC_^1_%RTJ- ($F4)_^1RC_#NUM 0_^1_%ADC REQERR_^1_%JMP- (AREQXT)_^1_%END_]_^__JPDCORE CSY/ A16 P€1_%NAM DCORE_(DECK-ID A16 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$SPACE DRIVER, DRIVES CORE ALLOCATOR MODULE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_€€^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%SPC 1_^1_%SPC 2_^1* THIS MODULE DRIVES THE CORE ALLOCATOR IN ASSIGNING_^1* AND RELEASING SPACE. IT ALSO CONTROLS SWAPPING._^1_%SPC 1_^1* REVISED TO PERMIT USE BY REQUESTS FROM ABOVE DRCORE PRIORITY LEVEL_^1* TO AVOID DELAYING REQUESTS, ENTIRE DRIVER RUNS AT THE PRIORITY_^1* LEVEL THAT'S IN THE PHSTAB._^1_%SPC 1_^1* DRC€€ORE LOOPS AT LEVEL = PRI FOR 6 * KSIZE MILLISECS_^1* DURING SET AND CLEAR OF SWAP AREA PROTECT BITS_^1* WHERE KSIZE IS THESIZE OF UNPROTECTED CORE / 1000_^1_%SPC 2_^1_%ENT ICORE,T12,ECORE,LEND_;**MSOS 4.1**_^1_%ENT SWAPON_^1_%ENT STLPV4,LOOP_F**MSOS 4.0_^1_%ENT STPRV4_^1*_81 CARD DELETED_^1_%EXT RTNCOR,SWAPAR,PCORE_^1_%EXT UNPIO,SPASW,LOG2,REQALC,LVLSTR,AREAC_^1_%EXT SCHERR€€_'ENTRY POINT IN SCHEDULER_,*434****_^1_%EXT PTNALC_K**MSOS 4.0_^1_%EXT PTNREL_K**MSOS 4.0_^1_%EXT K65T12_K**MSOS 4.0_^1_%EXT SPCEV4,RDPTV4,OUTPV4_=**MSOS 4.0_^1_%EXT PRTCDR_K**MSOS 4.0_^1_%EXT IDLER_(IDLE LOOP IN SYSDAT_.**MSOS 4.1**_^1_%EQU LU(5),ADISP($EA),ZERO($22),ACOMPR($B6)_^1_%EQU LPMSK(2),NZERO($12),AFNR($B5),ANABS($BF)_^1_%EQU LOCORE($F7),HICORE($F6),TIME(4)_^1_%€€EQU CORELU(1)_#CORE ALLOCATOR LOGICAL UNIT_^1_%EQU ELU(5)_^1_%EQU PT(2)_^1*_8SWAPS. SET TO -1 WHEN_^1*_8NO TIMER PACKAGE USED._^1_%EQU REQXT($B9)_^1_%EQU ONEBIT($23)_^1_%SPC 3_^1* E N T R Y_!FOR_!A L L O C A T I O N_^1_%SPC 2_^1WAIT_!NUM -0_+TOP OF WAIT THREAD_1**MSOS 4.0_^1BOTTOM NUM -0_O**MSOS 4.0_^1ICORE STQ- I_N**MSOS 4.1**_^1_%RTJ* STPRV4_^1_%JMP* COR1_M**MSOS 4.0_^€€1STPRV4 NOP 0_^1_%IIN 0_P**MSOS 4.0_^1_%LDA* ATC_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* T1AA_)EXIT IF PRIORITIES HAVE BEEN_'**MSOS 4.0_^1*_;SET_=**MSOS 4.0_^1T1_#LDQ* ATC_*LOAD Q WITH COUNT VALUE_,**MSOS 4.0_^1_%LDQ* T,Q_N**MSOS 4.0_^1_%TRQ A_,DO NOT SET PRIORITY IF EXT_)**MSOS 4.0_^1_%EOR- LPMSK+15_$UNPATCHED_^1_%SAZ T1B_N**MSOS 4.0_^1_%LDA- (ZERO),Q_I**MSOS 4.0_^1_%SAN T1A-*-1_%SKI€€P IF NOT SET_4**MSOS 4.0_^1T1AA_!EIN 0_P**MSOS 4.0_^1_%JMP* (STPRV4)_^1T1A_"LDA PCORE_(GET THE COMP PRIORITY OF DRIVER_^1_%AND- LPMSK+4_J**MSOS 4.0_^1_%EOR- (ZERO),Q_I**MSOS 4.0_^1_%STA- (ZERO),Q_I**MSOS 4.0_^1T1B_"RAO* ATC_N**MSOS 4.0_^1_%JMP* T1_+CONTINUE SETTING PRIORITIES_(**MSOS 4.0_^1*_]_^1***********************************************************************_^1ATC_"NUM 0€€_P**MSOS 4.0_^1T_$ADC OUTPUT_'SET THE FOLLOWING ON THE_+**MSOS 4.0_^1_%ADC SPACE_(FOLLOWING REQUESTS_1**MSOS 4.0_^1_%ADC NOG30A_K**MSOS 4.0_^1_%ADC REL_N**MSOS 4.0_^1_%ADC SCH_N**MSOS 4.0_^1_%ADC PTNALC_K**MSOS 4.0_^1_%ADC PTNREL_K**MSOS 4.0_^1_%ADC SPCEV4_K**MSOS 4.0_^1_%ADC RDPTV4_K**MSOS 4.0_^1_%ADC OUTPV4_K**MSOS 4.0_^1_%ADC ZERO_)THIS IS USED TO INDICATE THE END_"**€€MSOS 4.0_^1*_\**********_^1COR1_!RTJ- (AFNR)_'GET NEXT REQUEST FOR SPACE_^1_%JMP* WAIT2_^1TRY_"LDQ- 6,I_*GET LOC. OF REQUEST_^1_%LDA- (ZERO),Q_$REQUEST_^1_%ARS 9_^1_%AND- LPMSK+5_%ISOLATE CODE_^1_%INA -14_^1_%SAN NOTMOT_'NO MOTION_^1_%STA- 10,I_)ZERO FIRST_^1_%STA- 11,I_)LAST_^1_%JMP* ASWAPD-2_$GO COMPLETE REQUEST_^1NOTMOT EQU NOTMOT(*)_^1_%STQ* TEMP_+AND GET NO. OF WORDS TO Q.€€_^1_%RTJ- (ANABS)_^1_%LDA* (ASWAPD)_^1_%SAZ OK0-*-1_%SKIP IF NOT SWAPPED_0**MSOS 4.0_^1_%LDA* (TEMP)_^1_%AND- LPMSK+4_^1_%INA -3_^1_%SAM NOTOK-*-1_#SKIP IF COMPLETION PRIORITY LT 3_"**MSOS 4.0_^1OK0_"JMP* OK1_*GO ALLOCATE_8**MSOS 4.0_^1NOTOK LDA* TEMP_)POINTER TO NEW REQUEST_-**MSOS 4.0_^1_%LDQ* BOTTOM_'POINTER TO LAST REQUEST ON THREAD_!**MSOS 4.0_^1_%INQ 0_P**MSOS 4.0_^1_%SQ€€Z 1_,NOTHING ON THREAD_2**MSOS 4.0_^1_%STA- PT,Q_)POINTER TO NEW REQ. IN THD. OF LAST **MSOS 4.0_^1_%SQN 1_P**MSOS 4.0_^1_%STA* WAIT_)ONLY ENTRY ON THREAD,SO BOTH TOP-_!**MSOS 4.0_^1_%STA* BOTTOM_'BOTTOM OF THREAD_3**MSOS 4.0_^1_%TRA Q_P**MSOS 4.0_^1_%SET A_,MARK END OF THREAD_1**MSOS 4.0_^1_%STA- PT,Q_)IN THREAD OF NEW REQ._.**MSOS 4.0_^1_%JMP* COR1_)GO CHECK FOR ANOTHER REQUE€€ST_'**MSOS 4.0_^1_%LDA* TEMP_^1_%RTJ* (GTHDIT)_I**MSOS 4.0_^1_%JMP* COR1_)GO CHECK FOR ANOTHER REQUEST_'**MSOS 4.0_^1OK1_"LDA* (TEMP)_'GET 1ST WORD OF PAR. LIST_^1_%ARS 4_.AND UNPACK REQUEST PRIORITY_^1_%AND- LPMSK+4_^1_%LLS 16_^1_%RTJ REQALC_'GO TO ALLOCATE CORE SPACE_^1*_*Q = START OF ALLOCATED AREA, IF REQUEST WAS SUCCESSFUL_^1*_*Q = 0 IF SUFFICIENT CORE CAN NEVER BE AVAILAB€€LE_^1*_*Q = -1 IF THE AVAILABLE CORE IS INSUFFICIENT AT PRESENT_^1_%NOP 0_,*********************************************_^1_%SQM JNOGOT-*-1_^1_%SQN ONE-*-1_%ALLOCATION WAS SUCCESSFUL_^1_%LDQ- $E9_*IF UNPROTECTED IN PART1_^1_%LDA- 10,Q_)OR SWAPS INHIBITED_^1_%ADD- 11,Q_)IN PART0_^1_%SAN JNOGOT+1_$REQUEST IMPOSSIBLE_^1_%LDA* (ASWAPD)_^1_%SAN 1_,IF SWAP IS IN EFFECT,REQUEST IS IM€€POSSIBLE_^1JNOGOT JMP* NOGOT_(UNSUCCESSFUL ALLOCATION_^1_%ADQ- ONEBIT+15_#IF ALLOCATION IS IMPOSSIBLE, SET Q15 = 1_^1*_8AND COMPLETE REQUEST WITH ERROR FIELD SET_^1ONE_"LDA* (TEMP)_^1_%AND- NZERO+9_^1_%SAZ DIRCAL-*-1_"SKIP IF DIRECTORY CALL_^1_%TRQ A_^1_%LDQ* TEMP_)STORE ORIGIN OF ALLOCATED_^1_%STA- 3,Q_,SPACE IN CALL_^1_%LDQ XCORE_^1_%AND- NZERO+13_^1_%STA- 9,Q_*STORE ORIGIN IN€€ PHYSTB FOR_^1_%STQ- I_.USE BY COMPRQ_^1_%RTJ- (ACOMPR)_^1_%JMP* COR1_)GO GET NEXT REQUEST_^1ASWAPD ADC SPACE+2_%ADDRESS OF THREAD TO RETURN SWAPPED CORE_^1_%SPC 1_^1DIRCAL SQM DIR1+1-*-1_"IF CORE NOT ALLOCATED, IGNORE REQUEST_^1_%TRQ A_^1_%LDQ* TEMP_^1_%STA- 1,Q_*STORE ORIGIN AS COMP. ADDRESS_^1_%ADQ- NZERO+15_^1_%STQ* DIR1_^1_%TRA Q_^1_%RTJ- ($F4)_(START I/O_^1DIR1_!NUM 0_^€€1_%LDQ* XCORE_(RESTORE PHYSTB ADDRESS_^1_%JMP* ICORE_(GO GET NEXT ONE_2**MSOS 4.1**_^1_%SPC 2_^1*_]_^1WAIT2 LDQ* WAIT_)MOVE THE WAIT THREAD BACK TO CORE LU THREAD_^1_%INQ 0_^1_%SQN WAIT3_^1_%SET A_,NOTHING LEFT ON THREAD_-**MSOS 4.0_^1_%STA* BOTTOM_'SET BOTH THD POINTERS TO -0_(**MSOS 4.0_^1_%JMP- ($EA)_(AND EXIT_;**MSOS 4.0_^1WAIT3 LDA- PT,Q_)POINTER TO NEXT ENTRY ON THD._%*€€*MSOS 4.0_^1_%STA* WAIT_)UPDATE TOP OF THD._1**MSOS 4.0_^1_%TRQ A_P**MSOS 4.0_^1_%RTJ* (GTHDIT)_$MOVE TO CORE LU THD._/**MSOS 4.0_^1_%JMP* WAIT2_(REPEAT UNTIL WAIT THREAD IS EMPTY_^1XLOG2 ADC LOG2_^1_%SPC 3_^1* THE FOLLOWING IS ENTERRED ON UN-SUCCESSFUL ALLOCATION_^1_%SPC 1_^1NOGOT LDA* XCORE_^1_%STA- I_,RESTORE PHYSTB ADDRESS_^1_%LDA* (TEMP)_'IF COMPLETION PRIORITY IS_^1_%A€€ND- LPMSK+4_%NOT GREATER THAN 2,_^1_%INA -3_+DONOT TRY TO SWAP._^1_%SAM NOG1-*-1_^1_%LDQ- $E9_*IF SWAP INHIBITED, DO NOT_***MSOS 4.0_^1_%LDA- 10,Q_,ATTEMPT SWAP, RE-THREAD_)**MSOS 4.0_^1_%ADD- 11,Q_^1_%SAZ 1_3REQUEST_5**MSOS 4.0_^1_%JMP* NOG1_^1_%LDA* SWAPON_^1_%SAN 1_^1_%JMP* NOG2_)GO TO NOG2 IF NOT SWAPPED_^1NOG1_!LDA* TEMP_^1_%RTJ+ THRDIT_K**MSOS 4.0_^1GTHDIT EQU GTHDIT(*-1€€)_F**MSOS 4.0_^1_%ENQ CORELU_^1_%LDA* (XLOG2),Q_^1_%SUB* TEMP_^1_%SAZ 1_,IF TOP OF THREAD CHANGED_^1_%JMP* COR1_)TRY AGAIN_^1_%STA- ELU,I_(CLEAR SPACDR BUSY FLAG_^1_%JMP- (ADISP)_^1TEMP_!ADC 0_,ADDRESS OF CURRENT REQUEST_^1_%SPC 2_^1_%SPC 2_^1NOG2_!LDA- TIME,I_'IF INTERVAL SINCE LAST SWAP_^1_%SAM NOG4-*-1_'HAS PASSED, SKIP TO NOG4_^1_%JMP* NOG1_^1NOG4_!LDA* (XUNPIO)_^1_%SAZ €€NOG5-*-1_$SKIP IF NO UNPROTECTED I/O_^1_%STA* (XSPASW)_$SET WAITING TO SWAP SWITCH_^1_%JMP* NOG1_^1_%SPC 2_^1NOG5_!LDA- HICORE_'SET UP SWAP WRITE BLOCK_^1_%SUB- LOCORE_)SIZE AND START_^1_%INA -1_^1_%STA* LENGTH_^1_%LDA- LOCORE_^1_%INA 1_^1_%STA* START_^1_%RTJ- ($F4)_^1OUTPUT ADC $4CF0_(PART 1 FWRITE_5**MSOS 4.0_^1_%ADC NOG20_^1_%NUM 0,$8C2_^1LENGTH NUM 0_^1START NUM 0_^1_€€%NUM 0_^1_%ADC SWAPAR_^1_%RTJ* STLPV4_K**MSOS 4.0_^1_%JMP* NOG1_M**MSOS 4.0_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1STLPV4 NOP 0_P**MSOS 4.0_^1_%ENA 0_,TELL PROTECT PROCESSOR_^1_%STA* (XSPASW)_$SWAP IS NOT WAITING_^1_%LDA* LOOP1_^1_%STA* LOOP_)SET UP AND SCHEDULE LEVEL_^1_%LDA* LOOPFG_'IF LOOP NEVER RAN_^1_%SAN TURNON-*-1_"DO NOT RESCHEDULE IT_^1_%RAO* LOOPFG_'SET FLAG_^1_%RTJ- ($F4€€)_*2 LOOP SO AS TO LOCK OUT_^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/0,N4/2 JOB PROCESSING_#***MSOS4.0_^1_%ADC LOOPEN_^1TURNON RAO* SWAPON_'TURN ON SWAP INDICATOR_^1_%JMP* (STLPV4)_I**MSOS 4.0_^1_%SPC 2_^1_%SPC 3_^1* THIS ROUTINE IS ENTERRED ON COMPLETION OF SWAP I/O_^1_%SPC 1_^1NOG20 LDA- HICORE_^1_%INA -1_^1_%STA* LEND_)UPDATE TOP OF ALLOCATABLE AREA_^1_%LDQ- LOCORE_^1_%INQ 1_^1NO€€G6_!LDA+ LVLSTR_'UPDATE START OF LEVEL ZERO_^1_%STQ* (NOG6+1)_'PGMS IN LVLSTR TABLE_^1_%STA* TEMPL_^1_%TRQ_!A_^1_%INA_!2_^1_%STA- 1,Q_^1_%LDA* LENGTH_'SET UP PSEUDO THREAD FOR ALLOCATOR_^1_%STA- (ZERO),Q_^1_%RTJ+ RTNCOR_^1_%LDQ- HICORE_^1_%LDA* LENGTH_^1NOG21 INQ -1_+SET PROTECT BITS FOR THE AREA_^1_%SPB 0_^1_%INA -1_^1_%SAZ NOG22-*-1_^1_%JMP* NOG21_^1NOG22 LDQ* XCORE_^1_%S€€TQ- I_^1_%LDA* LENGTH_'SET UP SPACE REQUEST TO_^1_%INA -2_/GET CORE BACK + PUT_^1_%STA* SPACE1_)IT ON WAIT THREAD_^1_%RTJ- ($F4)_(SPACE REQUEST_^1SPACE VFD N1/0,N1/1,N5/10,N1/0,N8/0_8***MSOS4.0_^1_%ADC NOG30,,_J***MSOS4.0_^1SPACE1 NUM 0_,SIZE_^1_%JMP* REL1_)RESTART DRIVER IF NOT BUSY_^1_%SPC 3_^1XCORE ADC PCORE_^1SWAPON NUM 0_,ZERO WHEN NOT SWAPPED_^1LEND_!ADC 0_,LWA OF A€€LLOCATABLE - STUFFED BY SPACE_^1TEMPL BSS TEMPL_(TEMPORARY HOLD FOR LVLSTR_^1XUNPIO ADC UNPIO_(UNPROTECTED I/O REQUEST COUNT ADR_^1XSPASW ADC SPASW_(SWAP WAITING SWITCH ADR_^1LOOPEN CLR A_^1_%STA* LOOPFG_^1LOOP_!NOP 0_N**MSOS 4.1**_^1_%NOP 0_,MATCH CYCLES IN LEVEL -1 LOOP_#**MSOS 4.1**_^1_%RTJ+ IDLER_(USE SYSDAT IDLE LOOP_-**MSOS 4.1**_^1_%JMP* LOOP_K**MSOS 4.1**_^1LOOP1 NO€€P 0_N**MSOS 4.1**_^1LOOPFG NUM 0_,FLAG TO PREVENT MORE THAN ONE LEVEL 2 LOOP SCH_^1_%SPC 3_^1*_*ENTER HERE WHEN SWAPPED_^1*_*SPACE BECOMES AVAILABLE AGAIN_^1_%SPC 1_^1NOG30 LDA* LENGTH_'STUFF PARAMTERS_4***MSOS4.0_^1_%STA* LGTH_M***MSOS4.0_^1_%LDA* START_L***MSOS4.0_^1_%STA* STRT_M***MSOS4.0_^1*_\***MSOS4.0_^1_%RTJ- ($F4)_(READ SWAPPED AREA BACK IN_****MSOS4.0_^1NOG30A VFD N1€€/0,N1/1,N5/4,N1/0,N4/0,N4/0_4***MSOS4.0_^1_%ADC NOG33_^1_%NUM 0_^1_%NUM $8C2_^1LGTH_!ADC 0_P***MSOS4.0_^1STRT_!ADC 0_P***MSOS4.0_^1_%ADC 0_,MSB_@***MSOS4.0_^1_%ADC SWAPAR_'LSB_@***MSOS4.0_^1AJDISP JMP- (ADISP)_^1NOG33 LDA* AJDISP_^1_%STA* LOOP_)TURN OFF LEVEL 2 LOOP_^1_%LDA* TEMPL_^1_%STA* (NOG6+1)_$RESTORE LVLSTR_^1_%LDA- LOCORE_^1_%STA* LEND_)RESTORE END OF ALLOCATABLE CO€€RE_^1_%LDQ* XCORE_^1_%LDA- 13,Q_(DELAY TIME_^1_%STA- TIME,Q_'RESET TIME SINCE LAST SWAP_^1_%LDQ- HICORE_^1_%LDA* LENGTH_^1NOG32 INQ -1_+CLEAR PROTECT BITS IN THE AREA_^1_%CPB 0_^1_%INA -1_^1_%SAZ NOG35-*-1_^1_%JMP* NOG32_^1NOG35 IIN 0_^1_%STA* SWAPON_'TURN OFF SWAP INDICATOR_^1_%JMP* REL1_)IF DRIVER NOT RUNNING, RESTART IT_^1_%SPC 4_^1* THIS IS ENTERRED FROM RELEASE REQUE€€STS_^1_%SPC 1_^1T12_"RTJ STPRV4_^1_%LDA- 8,I_^1_%SAM R1A-*-1_%SKIP IF INDIRECT REQUEST_+**MSOS 4.0_^1_%RAO- 3,I_*UPDATE RETURN FOR DIRECT CALL_^1_%RAO- 3,I_^1R1A_"LDQ- 5,I_^1_%LDA- (ZERO),Q_$CHECK BIT 0 (R)_^1_%AND- $23_*OF FIRST WORD OF REQUEST_^1_%SAZ R1-*-1_'CHECK RETURN INDICATOR_^1_%LDA- ADISP_(IF NOT ZERO_^1_%STA- 3,I_*RETURN TO ADR OF DISPATCHER_^1R1_#LDA- (ZERO),Q_$CHEC€€K THE D PARAMETER OF THE REQUEST**MSOS 4.0_^1_%AND- ONEBIT+14_#TO DETERMINE WHICH AREA TO RELEASE **MSOS 4.0_^1_%SAZ R11-*-1_%SKIP IF PART 0 RELEASE REQUEST_$**MSOS 4.0_^1_%JMP K65T12_'GO RELEASE PART 1 AREAS_,**MSOS 4.0_^1R11_"LDA- 6,I_*TRANSLATE RETURN PARAMETERS_(**MSOS 4.0_^1_%SAP R29-*-1_^1_%LDA- (ZERO),Q_^1_%AND- ZERO+9_^1_%SAN R2-*-1_^1_%LDQ- 6,I_N**MSOS 4.0_^1_%LDA- (Z€€ERO),Q_^1_%JMP* R29_^1R2_#TRQ A_^1_%AND- NZERO-1_^1_%ADD- 6,I_N**MSOS 4.0_^1_%AND- NZERO-1_^1R29_"INA -2_^1_%TRA Q_^1_%SUB =XAREAC_%AREA RETURNED BELOW AREAC IS IN ERROR*434****_^1_%SAM ERROR_M*434****_^1_%TRQ A_Q*434****_^1_%ADD- (ZERO),Q_J*434****_^1_%IIN 0_Q*434*****_^1_%SUB LEND_N*434****_^1_%INA -2_+OK TO RETURN BLOCK THAT ENDS AT LEND 63*1213_^1_%SAP ERROR_(END OF A€€REA RETURNED ABOVE LEND IS AN ERROR**_^1_%TRQ A_Q*434_^1_%INA 2_Q*434****_^1_%SUB- 1,Q_O*434****_^1_%SAN ERROR_(HEADER WORD NOT POINTING TO 1ST WORD OF AREA_^1_%LDA- (ZERO),Q_J*434****_^1_%INA -2_P*434****_^1_%SAP R41_*LENGTH LESS THAN TWO IS AN ERROR_#*434_^1ERROR JMP SCHERR_'SET BIT 15 OF Q AND RETURN TO REQUESTOR_^1R41_"RTJ- ($F4)_^1REL_"ADC $5200_(RELEASE AT DRIVER PRIO€€RITY LEVEL_"**MSOS 4.0_^1_%ADC RELEAS_K**MSOS 4.0_^1R6_#JMP- (REQXT)_^1_%SPC 3_^1* ENTERRED AT LEVEL OF ALLOCATOR TO RELEASE SPACE_^1_%SPC 1_^1RELEAS RTJ+ RTNCOR_^1REL1_!LDQ* XCORE_(SET ALLOCATOR BUSY_^1_%EQU ECORE(REL1)_!ENTRY FROM DIAGNOSTIC TIMER_%**MSOS 4.1**_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%LDA- LU,Q_^1_%SAZ REL2-*-1_^1_%JMP- (ADISP)_^1REL2_!ENA CORELU_^1_%STA- LU,Q_^1€€_%JMP ICORE_(CHECK FOR WAITING REQUESTS_'**MSOS 4.1**_^1_%EQU R5(R6)_^1_%SPC 2_^1*_*THE SWAPCK SUBROUTINE IS ENTERED TO DECREMENT UNPIO_^1*_*WHEN UNPROTECTED I/O IS COMPLETED, BY JOBPRO AND LIBEDT_^1*_*IF UNPIO EQ 0 AND SPASW NE 0, DRCORE IS RESTARTED_^1_%SPC 2_^1_%ENT SWAPCK_^1SWAPCK NUM 0_,ENTERED WHEN UNPROTECTED I/O IS COMPLETED_^1_%STA* SAVEX_(SAVE A REGISTER_^1_%STQ* SA€€VEY_(SAVE Q REGISTER_^1_%LDA* (XUNPIO)_$DECREMENT UNPIO BY 1_^1_%SAZ SWCKEX-*-1_^1_%INA -1_^1_%STA* (XUNPIO)_^1_%SAN SWCKEX_'EXIT IF SWAP NOT POSSIBLE_+63*1378_^1_%LDA* (XSPASW)_^1_%SAZ SWCKEX-*-1_"SKIP IF NOT WAITING TO SWAP_^1_%ENQ 10_^1_%LDA- ($E9),Q_%GET RESIDENCY OF UNPROTECTED FROM_^1*_8EXTENDED CORE TABLE_^1_%SAZ SCHA_)SCHEDULE PARTITION CORE_,**MSOS 4.0_^1_%LDA =XPRT€€CDR_'DRIVER IF UNPROTECTED_,**MSOS 4.0_^1_%STA* SCH+1_+IS IN PART 1_4**MSOS 4.0_^1SCHA_!RTJ- ($F4)_L**MSOS 4.0_^1SCH_"VFD N1/0,N1/1,N5/9,N1/0,N8/0_#SCHEDULE DRIVER IF NOT BUSY***_^1_%ADC REL1_M***MSOS4.0_^1SWCKEX LDA* SAVEX_(RESTORE A REGISTER_^1_%LDQ* SAVEY_(RESTORE Q REGISTER_^1_%JMP* (SWAPCK)_$RETURN TO USER_^1SAVEX ADC 0_^1SAVEY ADC 0_^1_%SPC 2_^1THRDIT 0_"0_,THREAD REQU€€EST IN A TO CORE LU_^1_%STA* TEMP1_^1_%LDA* (TEMP1)_^1_%AND* RPMSK_^1_%STA* REQP_^1_%LDQ XLOG2_^1_%INQ CORELU-2_^1_%IIN 0_^1THDNXT STQ* THDX_^1_%LDQ- PT,Q_)CHECK FOR END OF THREAD_^1_%INQ 0_^1_%SQN 1_^1_%JMP* THDTHS_^1_%LDA- (ZERO),Q_$SEARCH FOR LOWER RP_^1_%AND* RPMSK_^1_%SUB* REQP_^1_%SAM THDTHS-*-1_"THREAD ENTRY IF NEGATIVE_^1_%SAZ THDTHS-*-1_"THREAD ENTRY IF EQUAL RP_^1_€R%JMP* THDNXT_'GET NEXT ENTRY_^1RPMSK NUM $F0_^1REQP_!NUM 0_^1THDX_!NUM 0_^1THDTHS LDQ* THDX_)POINTER TO PREVIOUS ENTRY_^1_%LDA- PT,Q_^1_%LDQ* TEMP1_(POINTER TO ENTRY TO ADD_^1_%STA- PT,Q_)POINTER TO NEXT ENTRY_^1_%TRQ A_^1_%LDQ* THDX_)POINTER TO PREVIOUS ENTRY_^1_%STA- PT,Q_^1_%JMP* (THRDIT)_^1TEMP1 ADC 0_^1_%SPC 2_^1_%END_]_^__RPNCMPRQ CSY/ A19 P€1_%NAM NCMPRQ_'DECK-ID A19 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$COMPLETE REQUEST FOR DRIVERC_^1_%ENT_!NCMPRQ_^1_%EQU_!NCMPRQ(*)_^1 SPC 1_]_^1 SPC 1_]_^1_%ENT COMPRQ_^1_%EXT LOG1_^1*_]_^1*_*PHYSICAL DEVISE TABLE INDECE€€S._^1*_]_^1_%EQU EDCLK(4)_^1_%EQU ELU(5)_^1_%EQU EPTR(6)_^1_%EQU EREQST(8)_^1_%EQU ESTAT1(9)_^1_%EQU RETURN(15)_^1*_]_^1*_]_^1_%EQU LPMSK(2)_^1_%EQU ONEBIT($23)_^1_%EQU NZERO($12)_^1_%EQU ZERO($22)_^1_%EQU AMONI($F4)_^1*_]_^1*_]_^1*_*THIS MODULE SCHEDULES COMPLETION_^1*_+ROUTINES AND HOUSEKEEPS FOR DRIVERS._^1*_]_^1*_*ON ENTRY FROM A DRIVER, THE I REGISTER_^1*_+MUST CONT€€AIN THE CORE LOCATION OF THE_^1*_+PHYSICAL DEVICE TABLE SLOT OF THE_^1*_+SUBJECT EQUIPMENT._^1*_]_^1*_*I IS SAVED AND RETURNED TO THE CALLER AT_^1*_+CALL+1_^1*_]_^1*_]_^1COMPRQ 0_"0_^1_%IIN 0_^1_%LDQ* COMPRQ_5SAVE RETURN._^1_%EIN 0_^1_%STQ- RETURN,I_^1_%ENA -0_9SET DIAGNOSTIC_^1_%STA- EDCLK,I_6CLOCK IDLE._^1_%LDQ- EPTR,I_^1_%LDA- (ZERO),Q_$DO NOT SET ERROR FIELD IF_^1_%ARS 9_,T€€HE REQUEST WAS A MAS STORAGE_^1_%AND- LPMSK+5_%DIRECTORY CALL_5**MSOS 4.0_^1_%SAZ CC-*-1_^1_%LDA- 3,Q_^1_%AND- LPMSK+13_(CLEAR ERROR FIELD_^1_%STA- 3,Q_-IN REQUEST AND_^1_%LDA- ESTAT1,I_(REPLACE WITH_^1_%AND- NZERO+13_(SAME FROM PHYSTB_^1_%EOR- 3,Q_^1_%STA- 3,Q_^1CC_#LDA- 1,Q_^1_%SAN CD-*-1_*IF COMP. ADDR. EQUAL ZERO_^1_%STA- 2,Q_-CLEAR THREAD AND_^1_%JMP* EE_;GO TO EE._^1CD_#LDA€€- (ZERO),Q_^1_%AND- LPMSK+15_(SET BIT 15 OF WORD ZERO_^1_%EOR- ONEBIT+15_'OF THE REQUEST_^1_%STA- (ZERO),Q_^1_%TRQ A_^1_%LDQ- 3,Q_-GET ERROR WORD FROM REQ._^1_%IIN 0_^1_%STA* CE_^1_%RTJ- (AMONI)_)REQUEST AN INDIRECT_^1_%VFD N1/0,N1/1,N5/16,N1/0,N8/0_8***MSOS4.0_^1CE_#0_"0_/SECONDARY SCHED. CALL_^1EE_#LDA- EREQST,I_(IF E IS EQUAL TO 1_^1_%AND- LPMSK+14_3OTHERWISE,_^1_%STA- EREQS€ΒT,I_(ZERO THE FIELD_^1_%LDQ- ELU,I_^1_%LDA+ LOG1,Q_^1_%ALS 1_:TEST L.U. TYPE_^1_%SAP HH-*-1_^1_%SET A_^1_%IIN 0_^1_%STA- ELU,I_^1HH_#EIN 0_^1_%LDQ- RETURN,I_^1_%JMP- (ZERO),Q_^1_%END_]_^__ΒPNFNR CSY/ A18 P€1_%NAM NFNR_)DECK-ID A18 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$FIND NEXT REQUEST-NON-BUFFERED_^1_%ENT_!NFNR_^1_%EQU_!NFNR(*)_^1 SPC 1_]_^1 SPC 1_]_^1*_]_^1*_]_^1*_*THIS PROGRAM FINDS THE NEXT REQUEST_^1*_+FOR A GIVEN PHY€€SICAL DEVICE._^1*_*IT IS ENTERED FROM ALL DRIVERS AND_^1*_+RETURNS AS FOLLOWS_^1*_]_^1*_-CALL+1 IMPLIES NO REQUEST FOUND_^1*_-CALL+2 IMPLIES A REQUEST IS READY_^1*_]_^1*_*WHEN A REQUEST IS FOUND, FNR SETS_^1*_+ALL POSSIBLE INFORMATION IN THE_^1*_+PHYSICAL TABLE SLOT BEFORE RETURNING._^1*_]_^1*_*FNR IS ENTERED WITH THE CORE LOCATION_^1*_+OF THE PHYSICAL DEVICE TABLE SLOT IN I._^1*_]€€_^1*_]_^1_%ENT FNR_^1_%ENT_!FINDRQ_^1_%EXT LOG1,LOG1A,LOG2_^1_%EXT ALTSUB_'SUB. TO SET Q=ALT. IF LU IN Q IS DOWN_^1*_]_^1*_*PHYSICAL DEVICE TABLE._^1_%EQU ELU(5)_5LOGICAL UNIT=L.U._^1_%EQU EPTR(6)_4CALL PARAMETER LIST LOC._^1_%EQU EREQST(8)_^1_%EQU ESTAT1(9)_2STATUS WD.1._^1_%EQU ECCOR(10)_2CURRENT I/O WD.LOC._^1_%EQU ELSTWD(11)_1LAST+1 WD.LOC._^1_%EQU RETURN(15)_H*632_^1€€*_]_^1*_]_^1_%EQU LPMSK(2)_^1_%EQU ZERO($22)_^1*_]_^1_%EQU ONEBIT($23)_^1_%EQU ASABS($BD)_^1_%EQU ANABS($BF)_^1*_]_^1FNR_"NOP_]_^1_%IIN 0_^1_%LDA* FINDRQ_'SAVE RETURN ADR_^1_%STA- RETURN,I_J*632_^1_%ENQ_!0_^1_%STQ- ECCOR,I_^1_%LDQ- ELU,I_(LU ASSIGNED TO DEVICE_^1_%INQ 0_^1_%SQZ_!AD-*-1_^1_%JMP* CAA_^1_%SPC 2_^1AC_#RTJ ALTSUB_'IF LU = Q IS DOWN, SET Q = ALTERNATE LU_^1_%LDA€€ LOG1A,Q_%INTERRUPTS ARE ENABLED_^1_%SUB- I_^1_%SAZ AE-*-1_'IF THIS L.U. USES THIS DEVICE, GO TO AE_^1AD_#LDA- ECCOR,I_%SEARCH ALL LU FOR THIS DEVICE_^1_%TRA Q_^1_%SUB* (ALOG1)_%MAX LU NO_^1_%SAP EXIT-*-1_$IF SEARCH IS COMPLETED, GO TO EXIT_^1_%INQ 1_^1_%STQ- ECCOR,I_%SAVE LU NO FOR SEARCH_^1_%JMP* AC_^1_%SPC 2_^1AE_#LDQ- ECCOR,I_%REQUESTED LOGICAL UNIT_^1_%IIN 0_^1_%STQ- EL€€U,I_(ASSIGN THIS L.U. TO THE DEVICE_^1_%LDA- RETURN,I_J*632_^1_%STA* FINDRQ_^1_%JMP* CAA_^1_%SPC 2_^1EXIT_!IIN 0_,NO FURTHER REQUESTS FOR THIS DEVICE_^1_%ENA 0_,FREE THE DEVICE_^1_%STA- ELU,I_^1_%LDQ- RETURN,I_J*632_^1_%EIN 0_^1_%JMP- (ZERO),Q_$RETURN TO ADR. OF CALL +1_^1_%SPC 2_^1*_*DEVICE IS ASSIGNED TO A L.U. (I.E., THE L.U. ADDRESS IS IN_^1*_*WORD ELU IN THE PHYS DEV TABL€€E, AND IN Q)._^1_%SPC 2_^1CAA_"LDA+ LOG2,Q_^1_%INA 0_^1_%SAN CB-*-1_'IF THE THREAD IS NOT EMPTY, GO TO CB_^1_%SPC 2_^1*_*THE THREAD IS EMPTY_^1_%SPC 2_^1_%LDA* (ALOG1),Q_#CHECK THE TYPE 0/1 BIT_^1_%ALS 1_^1_%SAP 2_^1_%EIN 0_^1_%JMP* AD_+CONTINUE SEARCH IF LU SHARES A DEVICE_^1_%JMP* EXIT_^1_%SPC 2_^1CB_#STA- EPTR,I_'SAVE ADDRESS OF TOP REQUEST IN THREAD_$4.0_^1_%TRA Q_^1_€€%LDA- 2,Q_^1_%LDQ- ELU,I_^1_%EIN 0_^1_%STA* (CAA+1),Q_#UPDATE THE THREAD_^1_%LDA- EREQST,I_^1_%AND- LPMSK+14_^1_%EOR- ONEBIT+15_#SET REQUEST IN PROGRESS BIT_^1_%STA- EREQST,I_^1_%LDA- ESTAT1,I_^1_%AND- ONEBIT+9_$CLEAR STATUS WORD EXCEPT FOR M.M. BIT_^1_%STA- ESTAT1,I_^1_%LDQ- EPTR,I_^1_%LDA- (ZERO),Q_^1_%AND =N$3E00_%EXTRACT REQUEST CODE_^1_%SAN CCX-*-1_^1_%LDA- 1,Q_-DIRECTORY €€CALL_^1_%STA- ECCOR,I_^1_%LDA- 4,Q_-SET STARTING_^1_%LDQ- RETURN,I_$AND FINISHING_7*632_^1_%ADD- ECCOR,I_)ADDRESSES FROM_^1_%STA- ELSTWD,I_(THE DIRECTORY_^1_%JMP- 1,Q_^1CCX_"LDQ- 3,Q_^1_%LRS 9_^1_%AND- LPMSK+5_%MASK FOR REQUEST CODE_.**MSOS 4.0_^1_%LLS 16_^1_%AND- ONEBIT+3_^1_%INQ -1_^1_%SQZ CBG-*-1_%READ_^1_%INQ -1_^1_%SQZ CBF-*-1_%WRITE_^1_%INQ -2_^1_%SQZ CBE-*-1_%FREAD_^€€1_%INQ -2_^1_%SQZ CBD-*-1_%FWRITE_^1_%JMP* CD_^1_%SPC 3_^1CBD_"INA 1_:FORMAT WRITE CODE = 3_^1CBE_"INA 1_:FORMAT READ CODE = 2_^1CBF_"INA 1_:WRITE CODE = 1_^1CBG_"JMP* CBJ_8READ CODE = 0_^1_%SPC 2_^1ALOG1 ADC LOG1_^1_%SPC 2_^1CBJ_"EOR- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%SPC 2_^1*_0GET THE ABSOLUTE VALUE OF N AND S FROM THE REQUEST_^1_%SPC 2_^1CD_#LDQ- EPTR,I_^1_%LDA- (ZERO)€€,Q_$GET FIRST WORD OF REQUEST_***MSOS 4.0_^1_%AND- ONEBIT+14_#MASK FOR D PARAMETER_/**MSOS 4.0_^1_%SAZ CDA-*-1_%A=0 D PARAMETER NOT SET--PART 0_#**MSOS 4.0_^1_%LDA- 5,Q_*GET THE STARTING ADDRESS_+**MSOS 4.0_^1_%STA- ECCOR,I_%SAVE IN PDT_8**MSOS 4.0_^1_%ADD- 4,Q_*ADD NO OF WORDS TO FORM LAST+1_$**MSOS 4.0_^1_%STA- ELSTWD,I_$SAVE IN PDT_8**MSOS 4.0_^1_%LDQ- RETURN,I_$PICK UP RETURN €€ADDRESS_-**MSOS 4.0_^1_%JMP- 1,Q_*RETURN TO CALL+2_3**MSOS 4.0_^1CDA_"RTJ- (ASABS)_^1_%STQ- ECCOR,I_^1_%LDQ- EPTR,I_^1_%RTJ- (ANABS)_^1_%LDA- RETURN,I_$PICK UP THE RETURN ADDRESS_**632_^1_%STQ- ELSTWD,I_^1_%TRA Q_^1_%LDA- ELSTWD,I_^1_%ADD- ECCOR,I_%PLACE LAST+1 ADDRESS IN ELSTWD_^1_%SAP DAA-*-1_^1_%AND- LPMSK+15_^1DAA_"STA- ELSTWD,I_^1_%JMP- 1,Q_*RETURN TO CALL * 2._^1*_]_^1_%EQ€U FINDRQ(FNR)_^1_%END_]_^__PADEV CSY/ A21 P€1_%NAM ADEV_)DECK-ID A21 MSOS 4.1_-SUMMARY-079_^1*_$ALTERNATE DEVICE HANDLER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT_!ADEV_^1_%EQU_!ADEV(*)_^1 SPC 1_]_^1_%ENT DEVERR,ALTDEV_^1_%ENT CONVER_'HEX TO ASCII CONVERSION ROUTINE_^1_%EXT_!JBCNCL_^1_€€%EXT ALTERR_'TABLE USED TO SAVE ERROR WORDS_^1_%ENT ALTSUB_'ALTERNATE LOGICAL UNIT SUB._^1_%EXT DUMALT_'DUMMY ALTERNATE LU NO._^1_%EXT LOG1,LOG1A,LOG2_@**MSOS 4.1**_^1_%EXT RELBYQ_I**MSOS 4.1**_^1_%EXT SWTCH_^1_%EXT UNPIO,UNPIOF UNPROTECTED I/O FLAFS_.**MSOS 4.0_^1_%EQU NN(10)_'MAX NO OF ALTERNATES IN A SINGLE CHAIN_^1*_8COMMUNICATION REGION ADRS_^1_%EQU FNR($B5)_^1_%EQU €€ LEVEL(14)_^1_%EQU NZERO($12),DISP($EA)_^1_%EQU TEN($46),ZROBIT($33),COMP($B6)_^1_%EQU AMONI($F4),LPMSK(2),ONEBIT($23)_^1*_8PHYSICAL DEV TABLE WORDS_^1_%EQU ELU(5),EPTR(6),ESTAT1(9)_^1*_8CALL PARAMETER WORDS_^1_%EQU PT(2)_^1*_#THIS MODULE IS ENTERRED FROM A DRIVER WHEN A_^1*_#DEVICE HAS FAILED. IT ATTEMPTS TO SWITCH TO AN_^1*_#ALTERNATE IF POSSIBLE. FAILING THAT, IT REQUESTS_^€€1*_#OPERATOR ACTION. IT IS ENTERRED VIA A JUMP WITH_^1*_#Q SET AS FOLLOWS_^1_%SPC 1_^1*_.BITS 0-5 ERROR CODE_^1*_.BITS 6-15 LOGICAL UNIT NUMBER_^1_%SPC 1_^1ALTDEV RTJ- (AMONI)_%SCHEDULER REQUEST_^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/0,X4/LEVEL_0***MSOS4.0_^1_%ADC ALTGO_L***MSOS4.0_^1_%JMP- (DISP)_^1_%SPC 2_^1ALTGO STQ* SAVERR_'SAVE ERROR WORD_^1_%QRS_!6_^1_%SQN 1_,CHECK FOR LU 00_€€^1_%JMP- (DISP)_^1_%LDQ* Q1SAV_^1_%LDA* (ATAB),Q_^1_%SAZ ALT5-*-1_$CHECK FOR SPACE IN ERROR WORD TABLE_^1_%SPC 2_^1_%JMP* *-1_*IRRECOVERABLE ERROR ***HANG***_^1*_8INCREASE SIZE OF TABLE ALTERR_^1_%SPC 2_^1ALT5_!STQ- I_,I = Q1SAV_^1_%LDQ* SAVERR_^1_%QRS 6_,IF LU SPECIFIED IS ALREADY DOWN_^1_%STQ* HASRLU_^1_%RTJ* (XALTSB)_$THEN GET LU OF ALTERNATE THAT FAILED_^1_%STQ* HASHLD_^1_€€%LDA* SAVERR_'Q = LU THAT FAILED, A = ERROR WORD_^1_%ALS 10_^1_%LRS 10_+CHANGE LU NO IN ERROR WORD_^1_%STA* SAVERR_'SAVE ERROR WORD_^1_%LDQ* HASHLD_^1_%SPC 1_^1_%LDA* (ALOG1),Q_#MARK THIS LU DOWN_^1_%STA* HAS7_^1_%AND =N$9FFF_^1_%EOR =N$6000_%MARK LU DOWN AND SET TO TYPE 1_^1_%STA* (ALOG1),Q_^1_%RTJ* (XALTSB)_$IF LU = Q IS DOWN, SET Q = ALTERNATE LU_^1_%SQN HAS4-*-1_^1_%LDQ* €€HASHLD_'FAILED LU_^1_%LDA* HAS7_)RESTORE LU LOG1 STATUS_^1_%STA* (ALOG1),Q_^1_%LDA* (ALOG1A),Q_^1_%STA- I_^1_%JMP* SCHNC_(NO ALTERNATE ASSIGNED_,**MSOS 4.1**_^1HAS4_!STQ* HASLU_(SAVE ALTERNATE LU_^1_%SPC 2_^1*_*HASLU NOW CONTAINS THE LU OF THE ALTERNATE_^1*_*HASRLU CONTAINS THE ORIGINAL REQUESTED LU_^1*_*AND HASHLD CONTAINS THE LU THAT FAILED_^1_%SPC 2_^1_%LDQ* HASHLD_^1_%LDQ* (A€€LOG1A),Q_^1_%LDA- EPTR,Q_'LOCATION OF CURRENT REQUEST_^1_%STA- I_^1_%LDQ* HASRLU_'REQUESTED LU_^1_%LDA* (ALOG2),Q_#RETHREAD THE REQUEST_^1_%STA- PT,I_^1_%LDA- I_^1_%STA* (ALOG2),Q_^1_%SPC 3_^1_%EIN 0_^1_%LDQ* HASHLD_'LU THAT FAILED_^1_%LDA* (ALOG1A),Q_^1_%STA- I_,I = PDT ADR OF FAILED DEV._^1_%CLR A_^1_%STA- ELU,I_(CLEAR FAILED DEVICE TABLE_^1_%SPC 2_^1_%LDQ* HASLU_^1_%LDA* (A€€LOG1),Q_#SET ALTERNATE TO TYPE 1_^1_%AND- ZROBIT+14_^1_%EOR- ONEBIT+14_^1_%STA* (ALOG1),Q_^1_%SPC 1_^1_%LDQ* (ATAB)_^1HAS3_!LDA* SAVERR_'SEARCH TABLE FOR THIS ERROR_^1_%SUB* (ATAB),Q_^1_%SAZ HAS3A-*-1_^1_%INQ -1_^1_%SQZ HAS3B-*-1_#SKIP IF END OF SEARCH_^1_%JMP* HAS3_^1HAS3A STA* SAVERR_'SET SAVERR = 0 IF ERROR IS ALREADY IN TABLE_^1_%SPC 1_^1HAS3B LDQ* HASLU_(LU OF ALTERNATE€€_^1_%LDQ* (ALOG1A),Q_^1_%IIN 0_^1_%LDA- ELU,Q_(IF THE ALT DEV IS NOT BUSY_^1_%SAZ HAS6-*-1_'SCHEDULE THE DRIVER,_^1_%JMP* SCHNC_(GO TO SCHDL LVL 4 SECTION_(**MSOS 4.1**_^1HAS6_!TRQ A_^1*_\***MSOS4.0_^1_%STA* HAS7_^1_%LDA* HASRLU_'SET DEVICE BUSY_^1_%STA- ELU,Q_^1_%RTJ- (AMONI)_^1_%ADC $2000_(SCHEDULE DRIVER VIA PHYSTB_)***MSOS4.0_^1HAS7_!NUM 0_^1_%SPC 2_^1SCHNC LDA* FLAGX_^1€€_%SAN SCHNX-*-1_#IF NOALT SECTION NOT BUSY_^1_%SET A_,SCHEDULE IT AT LEVEL 4_^1_%STA* FLAGX_(SET BUSY FLAG_^1*_]_^1_%RTJ- (AMONI)_^1_%VFD N1/0,N1/1,N5/9,N1/0,N4/4,N4/4_4***MSOS4.0_^1_%ADC NOALT_(SEARCH FOR MORE ENTRIES ON COMP_#***MSOS4.0_^1*_]_^1SCHNX LDQ* Q1SAV_(INDEX TO ALTERR TABLE_^1_%LDA* SAVERR_^1_%SAN 1_^1_%JMP- (DISP)_'EXIT IF SAVERR = 0_^1_%STA* (ATAB),Q_$SAVE ERROR€€ WORD IN TABLE_^1_%INQ -1_+UPDATE AND SAVE INDEX TO ALTERR TABLE_^1_%SQN 1_,SKIP IF NOT END OF TABLE_^1_%LDQ* (ATAB)_'SIZE OF TABLE_^1_%STQ* Q1SAV_^1_%JMP- (DISP)_^1_%SPC 2_^1SAVERR ADC 0_^1XALTSB ADC ALTSUB_'SUB. TO SET Q=ALT. IF LU IN Q IS DOWN_^1ATAB_!ADC ALTERR_'ADR OF ERROR WORD BUFFER TABLE_^1Q1SAV NUM 1_,INDEX FOR READING IN TO ALTERR TABLE_^1Q2SAV NUM 1_,INDEX FO€€R READING OUT OF ALTERR TABLE_^1HASHLD BSS HASHLD(1)_^1HASRLU BSS HASRLU(1)_^1ALOG1 ADC LOG1_^1_%SPC 3_^1*_$MESSAGE OUTPUT AND HANDLING OF DRIVERS THAT_^1*_$HAVE NO ALTERNATE IS DONE AT LEVEL 4_^1_%SPC 2_^1NOALT LDQ* Q2SAV_(GET NEXT ENTRY FROM ALTERR TABLE_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%LDA* (ATAB),Q_^1_%SAN NOALTX-*-1_"SKIP IF ENTRY FOUND_^1*_8OTHERWISE_^1_%STA* FLAGX_€€(CLEAR BUSY FLAG_^1_%JMP- (DISP)_'EXIT_^1_%SPC 2_^1NOALTX STA NOHOLD_K***MSOS4.0_^1_%EIN 0_^1_%ARS 6_,SAVE LU_^1_%STA* NOLU_^1_%ENA 0_,CLEAR ENTRY FROM TABLE_^1_%STA* (ATAB),Q_^1_%LDA* Q2SAV_(UPDATE INDEX TO ALTERR TABLE_^1_%INA -1_^1_%SAN 1_,SKIP IF NOT END OF TABLE_^1_%LDA* (ATAB)_'SIZE OF TABLE_^1_%STA* Q2SAV_^1_%LDQ* NOLU_^1_(LDA*_$(ALOG1A),Q_*SET UP_^1_(STA-_$I_4BASE PD€€T IN I_^1_%LDA* (ALOG1),Q_^1_%AND- LPMSK+10_^1_%TRA Q_,Q = LU OF FIRST ALTERNATE_^1_%RTJ* (XALTSB)_$SET Q= ALT. IF LU IN Q IS DOWN_^1_%SQN NOA-*-1_^1_%JMP* NO3_*NO ALTERNATE ASSIGNED_^1_%SPC 2_^1FLAGX BZS FLAGX(1)_^1HASLU BSS HASLU(1)_^1HOLDAL BSS HOLDAL(1)_^1ALOG1A ADC LOG1A_^1ALOG2 ADC LOG2_^1_%SPC 3_^1*_#THIS SECTION OUTPUTS THE MSG IF THE ALT IS OK_^1_%SPC 1_^1NOA_€€"STQ* HOLDAL_'SAVE ALTERNATE LU_^1_%LDA* MAS300_^1_%EOR- LPMSK+15_^1_%SAZ NOB_^1_%LDA- (I)_^1_%STA* MRINA_^1_%LDQ- I_,GET PDT ADDRESS_2**MSOS 4.1**_^1_%RTJ- ($F4)_^1MRINA NUM $5200_(SCHEDULE MAS300 AT DRIVER PL (MASDRV)**MSOS4.0_^1MAS300 ADC RELBYQ_'RELEASE DRIVERS CORE IF ANY_^1NOB_"LDA* NOLU_)LU THAT FAILED_^1_%RTJ* CONVRT_'CONVERT LU TO ASCII AND_^1_%STA* HASMS1+1_'STORE IN €€MESSAGE_^1_%LDA* NOHOLD_'ERROR WORD_^1_%AND- NZERO-10_^1_%RTJ* CONVRT_'CONVERT ERROR CODE TO ASCII_^1_%STA* HASMS1+6_'AND STOR IN MESSAGE_^1_%LDA* HOLDAL_'ALTERNATE LU_^1_%RTJ* CONVRT_'CONVERT ALTERNATE TO ASCII_^1_%STA* HASMS2+2_%AND STORE IN MESSAGE_^1_%RTJ- (AMONI)_%ALTERNATE LU MESSAGE_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/15,N4/4_3***MSOS4.0_^1_%ADC NOALT_(SEARCH FOR MORE ENTRIES O€€N COMP_#***MSOS4.0_^1_%NUM 0,$18FC,12_^1_%ADC HASMS1_K***MSOS4.0_^1_%JMP- (DISP)_'WAIT FOR COMPLETION_^1_%SPC 1_^1*_*THIS SECTION IS ENTERED AT LEVEL 4_^1*_*WHEN NO OPERATIONAL ALTERNATE EXISTS_^1_%SPC 2_^1NO3_"LDA* NOLU_K**MSOS 4.1**_^1_%RTJ* CONVRT_'CONVERT LU TO ASCII AND_^1_%STA* NOMES1+1_'STORE IN MESSAGE_^1_%LDA* NOHOLD_^1_%AND- NZERO-10_^1_%RTJ* CONVRT_'CONVERT ERROR COD€€E TO ASCII_^1_%STA* NOMES1+6_'AND STORE IN MESSAGE_^1_%RTJ- (AMONI)_%TELL THE OPERATOR_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/15,N4/4_3***MSOS4.0_^1_%ADC 0_^1_%NUM 0,$18FC,7_^1_%ADC NOMES1_K***MSOS4.0_^1_%SPC 2_^1*_*REQUEST ACTION BY THE OPERATOR_^1_%SPC 2_^1NO2_"ENA_!-0_^1_%STA* BUF_^1_%RTJ- (AMONI)_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/15,N4/4_3***MSOS4.0_^1_%ADC 0_^1_%NUM 0,$18FC,4_^1€€_%ADC NOMES2_K**MSOS 4.0_^1_%SPC 3_^1*_*GET OPERATOR INPUT VIA COMMENT INPUT MEDIUM_^1_%SPC 1_^1_%RTJ- (AMONI)_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/15,N4/4_3***MSOS4.0_^1_%ADC NO5_N***MSOS4.0_^1_%NUM 0,$18FD,1_^1_%ADC BUF_N***MSOS4.0_^1_%JMP- (DISP)_^1_%SPC 3_^1*_#AT THIS TIME, THE LEGAL OPTIONS IN BUF CAN BE_^1*_+1. RP - REPEAT REQUEST_^1*_+2. CU - CONTINUE - KEEP DEVICE UP_^1*_€€+3. CD - CONTINUE - MARK DEVICE DOWN_^1*_+4 DU - DELETE JOB - KEEP DEVICE UP_^1*_+5 DD - DELETE JOB - MARK DEVICE DOWN_^1*_]_^1*_#ANYTHING ELSE CAUSES REPETITION OF THE ACTION_^1*_#PRINTOUT._^1_%SPC 2_^1NO5_"SQP 1_,NO IO ERROR_6**MSOS 4.1**_^1_%JMP* NO2_*IO ERROR OR TIMEOUT, REPEAT_%**MSOS 4.1**_^1_%LDA* BUF_*CHECK DATA INPUT_^1_%SUB* RP_^1_%SAN NO6-*-1_^1_%JMP A_,ITS REPEAT_€€^1NO6_"ADD* CU_^1_%SAN NO7-*-1_^1_%JMP B_,CONTINUE_^1NO7_"INA $11_^1_%SAN NO8-*-1_^1_%JMP C_,CONTINUE DEVICE DOWN_^1NO8_"SUB* DU_^1_%SAN NO9-*-1_^1_%JMP D_,JOB DELETE_^1NO9_"INA $11_^1_%SAN NO10-*-1_^1_%JMP E_,JOB DELETE DEVICE DOEN_^1NO10_!NOP 0_,DONT KNOW - TRY AGAIN_^1_%JMP* NO2_^1_%SPC 3_^1NOLU_!BSS NOLU(1)_I**MSOS4.0**_^1_%SPC 2_^1*_*HEX TO ASCII CONVERSION_^1*_*€€A-REG = $00 TO $63 ON ENTRY_^1*_*ROUTINE CONVERTS TO DECIMAL_^1*_*AND RETURNS WITH ASCII CHARS IN A_^1*_*THE Q-REGISTER IS NOT SAVED_^1_%SPC 1_^1CONVRT NUM 0_,HEX TO ASC CONVERSION_^1_%IIN 0_^1_%ENQ 0_^1_%DVI- TEN_*MSB IN A, LSB IN Q_^1_%ALS 8_^1_%AAQ A_^1_%ADD =N$3030_%TWO ASCII CHARS IN A-REG_^1_%EIN 0_^1_%JMP* (CONVRT)_^1_%SPC 2_^1NOHOLD BSS NOHOLD(1)_^1HASMS1 ALF 7,L€€,_!FAILED_^1_%NUM $200D_^1HASMS2 ALF 3,ALT,_^1_%NUM $200D_^1NOMES1 EQU NOMES1(HASMS1)_^1NOMES2 ALF 3,ACTION_^1_%NUM $200D_^1BUF_"BSS BUF(1)_^1RP_#ALF 1,RP_^1CU_#NUM $EFB_^1DU_#NUM $111_^1*_#THIS ROUTINE PROCESSES THE REPEAT OPTION._^1_%SPC 2_^1A_$LDQ NOLU_^1_%LDA* (BLOG1A),Q_^1_%TRA Q_,P.D.T. ADDRESS TO Q_165*1417_^1_%STA* A1_+SCHEDULE DRIVER DIRECTLY_,65*1417_^1_%LDA- €€EPTR,Q_'REQUEST PARAMETER ADDRESS_+65*1417_^1_%STA- I_Q65*1417_^1_%LDQ NOLU_)LOGICAL UNIT_865*1417_^1_%IIN 0_Q65*1417_^1_%LDA* (BLOG2),Q_#RETHREAD THIS REQUEST_/65*1417_^1_%STA- PT,I_)TO THE TOP OF THE THREAD_,65*1417_^1_%LDA- I_Q65*1417_^1_%EIN 0_Q65*1417_^1_%STA* (BLOG2),Q_I65*1417_^1_%LDQ* (BLOG1A),Q_"PYSTAB ADDRESS TO Q_165*1417_^1_%SPC 2_^1A0_#RTJ- (AMONI)_%REPEAT THE REQU€€EST_^1_%ADC $2000_(INDIRECT_;***MSOS4.0_^1A1_#NUM 0_^1_%JMP* (ANOALT)_$RETURN TO SEARCH ALTERR FOR MORE ENTRIES_^1_%SPC 3_^1*_$THIS ROUTINE IS ENTERED VIA THE CONTINUE OPTION_^1_%SPC 2_^1B_$LDQ NOLU_^1_%LDA* (BLOG1A),Q_^1_%STA- I_^1_%RTJ- (COMP)_'COMPLETE THE REQUEST_^1_%LDA- I_^1*_\**********_^1_%STA* A1_^1_%LDQ- I_,Q = ADR OF P.D.T._^1_%JMP* A0_+SCHEDULE THE DRIVER INITIATOR€€_^1_%SPC 3_^1*_$THIS ROUTINE IS ENTERED TO MARK DEVICE DOWN AND_^1*_#REPORT THE ERROR TO ALL CALLERS._^1_%SPC 2_^1C_$LDQ NOLU_^1_%IIN 0_^1_%LDA* (BLOG1),Q_#TURN ALTERNATE INDICATOR ON._^1_%AND- ZROBIT+13_%THIS EFFECTIVELY MARKS THE_^1_%EOR- ONEBIT+13_%DEVICE DOWN, SINCE THERE_^1_%STA* (BLOG1),Q_%IS NO ALTERNATE._^1_%LDA* (BLOG1A),Q_^1_%STA- I_^1_%LDA- ESTAT1,I_$SCHEDULE ALL COM€€PLETION_^1*_:ADDRESSES IN THE THREAD_^1_%STA NOHOLD_'WITH ERROR INDICATORS_^1C1_#RTJ- (COMP)_^1_%RTJ- (FNR)_^1_%JMP* C2_^1_%LDA NOHOLD_^1_%STA- ESTAT1,I_^1_%JMP* C1_^1C2_#LDA MAS300_^1_%STA* MRIN+1_^1_%EOR- LPMSK+15_^1_%SAZ C3-*-1_'SKIP IF NOT IN CORE._^1_%LDA- (I)_*(A) = 1ST WORD OF PDT._^1_%STA* MRIN_^1_%TRQ A_,SAVE Q_;**MSOS 4.1**_^1_%LDQ- I_,GET PDT ADDRESS_2**MSOS 4.1**_^€€1_%RTJ- ($F4)_^1MRIN_!NUM $5200_(SCHEDULE MAS300_4***MSOS4.0_^1_%ADC *-*_*PROGRAM MODIFIED_^1*_8***** IN MMEXEC *****_,**MSOS 4.1**_^1_%TRA Q_,RESTORE Q_8**MSOS 4.1**_^1C3_#JMP* (ANOALT)_^1_%SPC 3_^1*_$THIS ROUTINE IS ENTERED TO KILL A JOB ON THE_^1*_#BASIS OF THE ERROR. THE DEVICE IS LEFT UP._^1_%SPC 2_^1D_$RTJ* JKSUB_(SCHEDULE JBKILL_^1_%JMP* B_,GO TO CU ROUTINE_^1_%SPC 2_^€€1JKSUB NUM 0_^1_%LDA UNPIO_(DU AND DD ONLY LEGAL_/**MSOS 4.0_^1_%ADD UNPIOF_'FOR UNPROTECTED I/O REQUESTS_'**MSOS 4.0_^1_%SAN D1-*-1_'IF JOB PROCESSOR NOT IN, GO_^1D0_#JMP NO2_*BACK TO ACTION TYPEOUT_^1D1_#LDA SWTCH_(IS LIBEDT IN_^1_%SAZ 1_,NO_^1_%JMP* D0_^1_%RTJ- (AMONI)_%SCHEDULE JOBKIL AT LEVEL 2_^1_%NUM $5202_^1_%ADC_!JBCNCL_^1_%JMP* (JKSUB)_%RETURN_^1_%SPC 3_^1*_$THI€€S ROUTINE IS ENTERED WHEN THE DEVICE IS TO_^1*_#BE SET DOWN AND THE JOB DELETED._^1_%SPC 2_^1E_$RTJ* JKSUB_(SCHEDULE JBKILL_^1_%JMP* C_,GO TO DU ROUTINE_^1_%SPC 1_^1BLOG1 ADC LOG1_^1BLOG1A ADC LOG1A_^1BLOG2 ADC LOG2_^1ANOALT ADC NOALT_^1_%SPC 3_^1DEVERR EQU DEVERR(ALTDEV)_^1_%EQU CONVER(CONVRT)_^1 EJT_]_^1_%SPC 4_^1*_*THIS SUBROUTINE IS ENTERED TO DETERMINE_^1*_*IF A GI€€VEN LOGICAL UNIT (IN Q) IS OPERATIVE_^1*_*RETURN IS WITH Q = INITIAL LU OR ITS FIRST_^1*_*OPERATIVE ALTERNATE._^1*_*IF THE INITIAL LU IS MARKED DOWN (INOPERATIVE)_^1*_*1) Q = LU OF THE OPERATIVE ALTERNATE, OR_^1*_*2) Q = 0 IF NO ALTERNATE IS ASSIGNED, OR_^1*_*3) Q = DUMALT(0 OR DUMMY) IF ALL ALTERNATES ARE DOWN_^1_%SPC 2_^1ALTSUB NUM 0_,Q = INITIAL LU ON ENTRY, I IS SAVED_^1_%I€€IN 0_^1_%ENA NN_+SET INITIAL VALUE OF COUNT_^1_%STA* COUNT_^1LOOP_!SQZ EXIT-*-1_$EXIT IF NO ALT LU EXISTS, Q=0_^1_%LDA* (BLOG1),Q_^1_%ALS 2_^1_%SAP EXIT-*-1_$EXIT IF LU Q IS OPERATIVE_^1_%ARS 2_^1_%AND- LPMSK+10_^1_%TRA Q_,Q = ALTERNATE LU_^1_%LDA* COUNT_^1_%INA -1_^1_%STA* COUNT_^1_%SAN OK-*-1_'CONTINUE IF MAX NO OF ALTERNATES NOT EXCEEDED_^1_%LDQ* M_,OTHERWISE SET Q = 0,€– OR DUMMY LU_^1EXIT_!EIN 0_^1_%JMP* (ALTSUB)_^1OK_#JMP* LOOP_^1COUNT NUM 0_^1M_$ADC DUMALT_'LU TO BE USED IF ALL ALTERNATES ARE DOWN_^1_%END_]_^__–PRDISP CSY/ A05 P€1_%NAM RDISP_(DECK-ID A05 MSOS 4.1_-SUMMARY-079_^1*_$SCHEDULER-DISPATCHER FOR REENTRANT FORTRAN LIBRARY_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1**************************************************************MSOS 4.1**_^1*_$THIS VERSION OF THE SCHEDUL€€ER/DISPATCHER IS THE SAME **MSOS 4.1**_^1*_$AS THE NDISP PROGRAM WITH THE ADDITIONAL CAPABILITY **MSOS 4.1**_^1*_$TO SAVE OR RESTORE THE FORTRAN SCRATCH AREA ($C5 TO **MSOS 4.1**_^1*_$$E5) AND THE FORTRAN LIBRARY TEMPORARY CELLS THAT_"**MSOS 4.1**_^1*_$MUST BE SAVED FOR REENTRANCY. THIS PROCESS OCCURS_!**MSOS 4.1**_^1*_$ON CHANGES OF PRIORITY LEVEL WHICH WOULD GIVE CONTROL**MSOS€€ 4.1**_^1*_$TO ANOTHER FORTRAN USER. THE FMASK AND FLIST_'**MSOS 4.1**_^1*_$SECTIONS OF SYSDAT MUST BE PRESENT IN THE SYSTEM._"**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ENT_!RDISP_^1_%EQU_!RDISP(*)_^1_%ENT DISPXX,SCHTOP_^1_%ENT T9_^1_%ENT T18_N**MSOS 4.0_^1_%ENT T19_N***MSOS4.0_^1_%ENT ERRCNT_L51*1008_€€^1_%EXT SCHERR_'SCHEDULER ERROR ENTRY IN TRVEC_$**MSOS 4.0_^1 SPC 1_]_^1_%EXT SCHSTK,SCHLNG_^1*_*FLIST (0) CONTAINS LENGTH OF LIST_^1_%EXT FLIST_(LIST OF LOCATIONS TO BE SAVED ON LEVEL CHANGE_^1_%EXT FMASK_(MASK CONTIANING BITS SET FOR EACH LEVEL USING_^1*_8PSUEDO REENTRANT CODE._^1_%EXT SAVLU,CKTHRD_F*433****_^1_%EXT K65COR_K**MSOS 4.0_^1_%EQU RCSCHD(9)_^1_%EQU P1SCHD(18)€€_%REQ CODE FOR SYS DIRECTORY FROM PART 1_^1_%EQU XA(1),XI(2),XR(3),XPL(4),XL(5)_^1_%EQU PC(1),PT(2),PQ(3)_^1_%EQU VI(2),VR(3),VPL(4),VPTR(5)_^1_%EQU VTPE(6),VTMP(7)_^1_%EQU LPMSK($2),NZERO($12),ZERO($22),ONEBIT($23)_^1_%EQU AVOLA($BB),AVOLR($BA)_^1_%EQU PRLVL($EF),TOMPT($B4),AREQXT($B9)_^1_%EQU COUNT($B8),AMASKT($B7)_^1_%EQU FCOM($C5),F1($E5-FCOM+1)_^1_%EQU ASYSDR($EB)_^1€€_%EQU COMEXT($104)_^1*_]_^1*_$UPON COMPLETION OF A PROGRAM, THE DISPATCHER_^1*_%DETERMINES THE PROGRAM OF HIGHEST PRIORITY_^1*_+WAITING FOR EXECUTION. IT MAY EITHER BE IN THE_^1*_+INTERRUPT STACK OR THE SCHEDULER STACK._^1*_]_^1SCHTOP NUM $FFFF_+SCHEDULE STACK TOP_^1DISPXX RTJ RESRTN_'RESTORE COMM REGION IF A FORTRAN USER HAS_^1*_8JUST TERMINATED._^1_%LDQ- COUNT_^1_%INQ -XL_8AD€€JST STACK_^1_%IIN 0_^1_%LDA* SCHTOP_+IF SCHEDLER STACK IS_^1_%INA 0_^1_%SAZ RESINT-*-1_'EMPTY, CHECK INT. STACK_^1_%LDA* (SCHTOP)_)LOAD FIRST WORD_^1_%AND- LPMSK+4_*ISOLATE PRIORITY_^1_%TRA M_0SAVE TEMP. IN M_^1_%LDA- XPL,Q_L**MSOS 4.0_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%INA 2_P**MSOS 4.0_^1_%SAP DSPA-*-1_I**MSOS 4.0_^1_%ENA 1_P**MSOS 4.0_^1DSPA_!INA -2_O**MSOS 4.0_^1_%TCA A€€_P**MSOS 4.0_^1_%AAM A_P**MSOS 4.0_^1_%SAZ RESINT-*-1_%GO TO INTERRUPT STACK_^1_%SAM RESINT-*-1_^1*_8GO TO SCHEDULER STACK REMOVAL_^1_%JMP* SCHSTC_^1*_]_^1*_!HIGHEST PROGRAM IS IN THE INTERRUPT STACK._^1*_]_^1*_*IF DISPATCHER IS RETURNING CONTROL TO AN INTERRUPTED_^1*_*PSUEDO REENTRANT LEVEL, COOM REGION MUST BE RESTORED BEFORE_^1*_*LEVEL CHANGE_^1RESINT LDA- XR,Q_^1_%STA* (ACOM€€EX)_^1_%LDA- XI,Q_7RESTORE I_^1_%STA- I_^1_%LDA- XPL,Q_L**MSOS 4.0_^1_%AND- LPMSK+15_$MASK OFF OVERFLOW CONDITION_(**MSOS 4.0_^1_%INA 2_P**MSOS 4.0_^1_%SAP RESB-*-1_I**MSOS 4.0_^1_%ENA 1_P**MSOS 4.0_^1RESB_!INA -2_O**MSOS 4.0_^1_%STA- PRLVL_(SAVE AS NEW PRIORITY LEVEL_)**MSOS 4.0_^1_%LDA- XPL,Q_(GET PRIORITY LEVEL + OVF_+**MSOS 4.0_^1_%AND- ONEBIT+15_H**MSOS 4.0_^1_%SOV 0_,CLE€€AR OVERFLOW FAULT_/**MSOS 4.0_^1_%SAZ RESA-*-1_I**MSOS 4.0_^1_%ENA 16_O**MSOS 4.0_^1_%ADD- LPMSK+15_I**MSOS 4.0_^1RESA_!STQ- COUNT_(RESTORE TOP OF INTERRUPT STACK_$**MSOS 4.0_^1_%LDA- XA,Q_)RESTORE VALUE OF A_1**MSOS 4.0_^1_%LDQ- PRLVL_(GET NEW PRIORITY LEVEL_-**MSOS 4.0_^1_%LDQ- (AMASKT),Q_%RESTORE MASK_^1_%TRQ M_^1_%LDQ- (COUNT)_%RESTORE Q_^1_%EXI COMEXT-$100_^1*_]_^1*_!HIGHE€€ST PROGRAM IS IN THE SCEDULER THREAD._^1*_]_^1SCHSTC TRM Q_0PRIORITY TO Q_^1_%STQ- PRLVL_,SET NEW PRIORITY_^1_%LDA- (AMASKT),Q_1AND MASK_^1_%TRA M_^1_%LDQ* SCHTOP_+STORE NEW POINTER_^1_%LDA- PT,Q_-TOP OF SCHEDLER_^1_%STA* SCHTOP_5THREAD_^1_%STQ- I_^1_%RTJ SAVE_^1_%IIN_"0_^1_%LDQ- I_^1_%TRQ A_/TEST IF PRIMARY SCHEDULER_^1_%SUB* ASCHD_+CALL WAS MADE._^1_%SAM SCHSEC-*-1_^1_%SUB* €€ASCLNG_^1_%SAP SCHSEC-*-1_^1_%LDA- TOMPT_,IF PRIMARY CALL RELEASE_^1_%STA- PT,Q_-STACK POSITION AND PLACE_^1_%STQ- TOMPT_+ON EMPTY THREAD._^1_%LDA- PC,Q_-LOAD ABSOLTE ADDRESS_^1_%STA* (ACOMEX)_(STORE INTO COMEXT_^1_%JMP* SCHXIT_^1SCHSEC LDA- (ZERO),Q_)TEST IF ABSOLTE OR_^1_%AND- ONEBIT+14_H**MSOS 4.0_^1_%SAZ SCHA-*-1_I**MSOS 4.0_^1_%LDA- PC,Q_M**MSOS 4.0_^1_%JMP* SCH1A_L**MSOS 4.€€0_^1SCHA_!LDA- (ZERO),Q_I**MSOS 4.0_^1_%AND- ONEBIT+8_3RELATIVE_^1_%SAZ SCH1-*-1_(CALL. SKIP IF ABSOLUTE_^1_%TRQ A_0ADDRESS 1ST WD OF CALL_^1SCH1_!AND- LPMSK+15_^1_%ADD- ONEBIT+15_^1_%ADD- PC,Q_-ADD REL. ADDRESS OR IF_^1_%AND- LPMSK+15_^1SCH1A STA* (ACOMEX)_I**MSOS 4.0_^1_%CLR A_0ZERO INTO THREAD_^1_%STA- PT,Q_-COMPLETION INDICATION_^1SCHXIT TRQ A_0PASS POINTER TO CALL IN A_^1€€_%LDQ- PQ,Q_7PASS,Q_^1_%EXI COMEXT-$100_^1ACOMEX ADC COMEXT_^1ASCHD ADC SCHSTK_*SCHED. STACK LOCATION_^1ASCLNG ADC SCHLNG_*SCHED. STACK LENGTH LOC._^1ERRCNT NUM 0_)SCHED STACK OVERFLOW COUNTER_+51*1008_^1 SPC 1_]_^1*_]_^1*_1SCHDLE REQUEST PROCESSOR (T9)_^1*_]_^1*_]_^1*_1ON ENTRY A POINTER TO THE PARAMETER_^1*_1LIST MUST BE IN THE A REGISTER_^1*_]_^1*_1IF THE SIGN BIT OF THE€€ POINTER_^1*_1IS ONE, THE REFERENCE IS INDIRECT._^1*_]_^1*_]_^1*_]_^1_%EQU T18(*)_K**MSOS 4.0_^1T9_#TRA Q_^1_%LDA- 8,I_N**MSOS 4.0_^1_%SAM SCHD1-*-1_#SKIP IF INDIRECT REQUEST_+**MSOS 4.0_^1_%RAO- VR,I_^1_%RAO- VR,I_7WAS INDIRECT_^1SCHD1 LDA- VTPE,I_'GET WORD TWO_5**MSOS 4.1**_^1_%STA- VTMP,I_'SAVE_=**MSOS 4.1**_^1_%LDA- VPL,I_(GET WORD ONE_5**MSOS 4.1**_^1_%STA- VTPE,I_*TEMPORA€€RILY AND STORE_^1_%AND- LPMSK+4_)PRIORITY OF REQUEST_^1_%STA- VPL,I_^1_%LDA- VTPE,I_'MASK REQUEST CODE_0**MOOS 4.1**_^1_%ARS 9_P**MSOS 4.0_^1_%AND- LPMSK+5_%CHECK IF SYS DIR REQ FROM PART 1_"**MSOS 4.0_^1_%INA -P1SCHD_J**MSOS 4.0_^1_%SAZ SO-1_^1_%LDA- VTMP,I_'GET WORD TWO_5**MSOS 4.1**_^1_%SAP S1-*-1_^1_%LDA- VTPE,I_'REQUEST WORD_5**MSOS 4.1**_^1_%AND- ONEBIT+14_H**MSOS 4.0_^1_€€%SAN S1-*-1_K**MSOS 4.0_^1_%LDA- VTMP,I_'WORD TWO_9**MSOS 4.1**_^1SO_#JMP* DIRCAL_'JUMP IF DIRECTORY CALL_-**MSOS 4.0_^1S1_#LDA- PRLVL_^1_%SUB- VPL,I_+IF REQ PRIORITY HIGHER_^1_%SAP S2-*-1_'THAN CURRENT PRIORITY_^1_%JMP HILVL_(GO TO HILVL_8***MSOS4.0_^1S2_#LDA- VTPE,I_'REQUEST WORD_5**MSOS 4.1**_^1_%ARS 9_:A PRIMARY_^1_%AND- LPMSK+5_^1_%INA -RCSCHD_4CALL_^1_%SAZ SCH2-*-1_3GO_€€^1_%IIN 0_:TO_^1_%JMP* SCHED2_5SCHED2_^1*_]_^1*_1PRIMARY SCHEDULAR CALL_^1*_6- IMPLIES RC=9 -_^1*_1ABSOLUTIZE AND TRANSFER TO STACK_^1*_]_^1SCH2_!LDA- VTPE,I_'REQUEST WORD BIT 14_.**MSOS 4.1**_^1_%AND- ONEBIT+14_H**MSOS 4.0_^1_%SAN ABS-*-1_J**MSOS 4.0_^1_%LDA- VTPE,I_'REQUEST WORD BIT 8_/**MSOS 4.1**_^1_%AND- ONEBIT+8_^1_%SAZ ABS-*-1_)SKIP ON ABS CALL_^1_%EOR- VTPE,I_I**MSOS 4.€€1**_^1_%STA- VTPE,I_^1_%TRQ A_^1_%AND- LPMSK+15_^1_%ADD- ONEBIT+15_^1_%ADD- VTMP,I_'ADD REL COMPLETION_/**MSOS 4.1**_^1_%AND- LPMSK+15_^1_%STA- VTMP,I_^1ABS_"IIN 0_^1_%LDQ- TOMPT_+FIND EMPTY IN STACK_^1_%INQ 0_^1_%SQN S3-*-1_^1_%RAO* ERRCNT_#INCREMENT SCHED STACK OVERFLOW CNT._#51*1008_^1_%JMP SCHERR_'JUMP IF NO ENTRY_3**MSOS 4.0_^1S3_#LDA- PT,Q_^1_%STA- TOMPT_^1_%STQ- VPTR,I_€€*STORE NEW POINTER TO_^1_%LDA- VTPE,I_*PARAMETER LIST_^1_%STA- (ZERO),Q_^1_%LDA- VTMP,I_^1_%STA- PC,Q_^1SCHED2 LDA- (I)_8STORE Q_^1_%STA- PQ,Q_^1*_]_^1*_*SEARCH FOR STACK POSITION ACCORDING_^1*_*TO PRIORITY OF THE REQUEST._^1*_]_^1_%IIN 0_^1_%LDQ =XSCHTOP_(POINTER TO SCHTOP IN Q_^1_%INQ -2_^1THRED1 STQ- VTPE,I_5STORE POINTER_^1_%LDA- PT,Q_,POINTER TO NEXT ENTRY_^1_%INA 0_^1_%SA€€Z SCH3-*-1_(END OF THREAD = 0_^1*_;THREAD INTO Q_^1_%TRA Q_^1_%IIN 0_^1_%LDA- (ZERO),Q_(SKIP TO THREAD NEW ENTRY_^1_%AND- LPMSK+4_)IF ITS PRIORITY HIGHER_^1_%SUB- VPL,I_^1_%SAM THREAD-*-1_^1_%JMP* THRED1_^1*_]_^1*_*THREAD NEW ENTRY_^1*_]_^1SCH3_!IIN 0_^1THREAD LDQ- VTPE,I_*POINTER TO PRECEDING ENTRY_^1_%LDA- PT,Q_,POINTER TO NEXT ENTRY_^1_%LDQ- VPTR,I_*STORE INTO NEW ENTRY_^1_%€€STA- PT,Q_^1_%TRQ A_^1_%LDQ- VTPE,I_*STORE NEW POINTER_^1_%STA- PT,Q_,IN PRECEDING ENTRY_^1_%LDA- (I)_*PICK-UP USERS Q REGISTER_^1_%AND- LPMSK+15_$REMOVE THE SIGN BIT_^1_%STA- (I)_*PUT IT BACK_^1_%JMP- (AREQXT)_^1*_]_^1**_)PROCESS DIRECTORY CALLS_^1*_]_^1*_]_^1DIRCAL AND- LPMSK+15_(GET SYSDIR ADDRESS_^1_%ADD- ASYSDR_^1_%IIN 0_^1_%STA- VPTR,I_^1_%LDA- (ZERO),Q_$PICK UP REQUEST COD€€E_^1_%ARS 9_^1_%AND- LPMSK+5_J**MSOS 4.0_^1_%INA -RCSCHD_^1_%SAZ DIR2-*-1_$IF NOT SCHEDULE REQUEST CODE_^1_%INA -P1SCHD+RCSCHD_^1_%SAZ DIR2_)SKIP IF REQ CODE 18_^1_%ENA 0_,MUST BE A SECONDARY CALL_^1_%STA- PT,Q_)CLEAR THREAD IN USERS REQUEST_^1DIR2_!LDQ- VPTR,I_'Q = SYSTEM DIRECTORY ADR._^1_%LDA- 2,Q_^1_%SAZ DIR1-*-1_^1_%JMP SCHERR_K**MSOS 4.0_^1DIR1_!LDA- (ZERO),Q_$CHECK I€€F OK TO SCHEDULE_,***MSOS4.0_^1_%SAP DIR1A_(OK, CONTINUE_7***MSOS4.0_^1_%JMP SCHERR_(SCHEDULING HAS BEEN DISABLED_%**MSOS 4.0_^1*_\***MSOS4.0_^1*_8REPLACE PRIORITY_3***MSOS4.0_^1DIR1A AND- NZERO+4_%IN DIR(CTORY WITH_2***MSOS4.0_^1_%ADD- VPL,I_+CALL PRIORITY_^1_%STA- (ZERO),Q_^1_%ARS 9_/IF MASS MEMMORY CALL_^1_%AND- LPMSK+5_J**MSOS 4.0_^1_%SAZ MASCAL-*-1_%GO TO DIRECTORY CALL_^€€1*_]_^1*_]_^1**_)CORE RESIDENT DIRECTORY CALL_^1*_]_^1_%SET A_^1_%STA- PT,Q_^1_%EIN 0_^1_%LDA- PRLVL_^1_%SUB- VPL,I_^1_%SAP S5-*-1_^1_%JMP* HILVL_^1S5_#JMP* SCHED2_^1*_]_^1**_)MASS MEMORY DIRECTORY CALL._^1*_]_^1MASCAL LDA- (I)_O*433****_^1_%STA- VPL,I_(SAVE Q TEMP IN VOLATILE_-*433*****_^1_%RTJ CKTHRD_'CHECK THREAD - BUSY, REJECT REQUEST(Q15=1***_^1_%LDA- VPL,I_M*433****_^1_%S€€TA- 3,Q_*MOVE PARAM TO DIRECTORY SLOT 3_%*433****_^1_%LDA- (ZERO),Q_J*433****_^1_%AND =N$F0_(SAVE REQ PRIORITY_3*433****_^1_%STA- VPL,I_(SET UP REQUEST PRIORITY IN VOLATILE *433****_^1_%LDA- (ZERO),Q_I**MSOS 4.0_^1_%AND- ONEBIT+14_H**MSOS 4.0_^1_%SAZ MASC0-*-1_H**MSOS 4.0_^1_%JMP K65COR_K**MSOS 4.0_^1MASC0 ENQ 1_P**MSOS 4.0_^1_%JMP SAVLU_(SET UP THREAD TO CORE ALLOCATOR_$*43€€3****_^1*_8THREAD REQUEST TO LOGICAL UNIT 1_#*433****_^1 EJT_]_^1*_\***MSOS4.0_^1*_$PROCESS ENABLE SCHEDULE CALL_:***MSOS4.0_^1*_\***MSOS4.0_^1_%EQU T19(*)_K***MSOS4.0_^1_%TRA Q_^1_%LDA- (ZERO),Q_I*MSOS 4.0_^1_%AND- LPMSK+8_J*MSOS 4.0_^1_%SAN DISCH_(DISABLE REQUEST_4*MSOS 4.0_^1_%LDQ- PC,Q_)GET SYS DIR INDEX_2***MSOS4.0_^1_%ADQ- ASYSDR_'CALCULATE ADDRESS_2***MSOS4.0_^1_%LDA- (ZE€€RO),Q_I***MSOS4.0_^1_%AND- LPMSK+15_$CLEAR DISABLE BIT IN DIRECTORY_$***MSOS4.0_^1_%STA- (ZERO),Q_I***MSOS4.0_^1_%JMP- (AREQXT)_I***MSOS4.0_^1*_\***MSOS4.0_^1*_$PROCESS DISABLE SCHEDULE CALL_9***MSOS4.0_^1*_\***MSOS4.0_^1DISCH LDQ- PC,Q_)GET DIRECTORY INDEX_0*MSOS 4.0_^1_%ADQ- ASYSDR_'CALCULATE ADDRESS_2***MSOS4.0_^1_%LDA- (ZERO),Q_I***MSOS4.0_^1_%IIN 0_Q69*1566_^1_%AND- LPMSK+15€€_J69*1566_^1_%EIN 0_Q69*1566_^1_%EOR- ONEBIT+15_#SET DISABLE BIT IN DIRECTORY_'***MSOS4.0_^1_%STA- (ZERO),Q_I***MSOS4.0_^1_%JMP- (AREQXT)_I***MSOS4.0_^1*_]_^1*_*SCHDLE REQUEST IS OF HIGHER PRIORITY_^1*_*THAN CURRENT LEVEL._^1*_]_^1*_]_^1*_*PUT REQUESTOR ON INTERRUPT STACK_^1*_]_^1HILVL IIN 0_^1_%LDQ- COUNT_^1_%LDA- PRLVL_^1_%STA- XPL,Q_+SAVE PRESENT LEVEL_^1*_8ADJUST VR TO RETUR€€N TO REQUEST EXIT_^1_%LDA- AREQXT_^1_%STA- XR,Q_^1_%LDA- I_^1_%STA- XI,Q_7SAVE I_^1_%INQ XL_^1_%STQ- COUNT_+SET NEW BASE_^1_%LDQ- VPL,I_^1_%STQ- PRLVL_^1_%LDA- (AMASKT),Q_%SET NEW LEVEL AND_^1_%TRA M_:MASK_^1_%EIN 0_^1*_*NOW AT REQUESTED LEVEL, SAVE COMMON DATA, IF REQUEST AT_^1*_*LEVEL USING PSUEDO REENTRANT LIBRARY_^1_%RTJ* SAVE_^1***_(IF SECONDARY CALL,_^1_%LDQ- VPTR,I_^1_%II€€N 0_^1_%LDA- (ZERO),Q_^1_%ARS 9_,EXTRACT REQUEST CODE_^1_%AND- LPMSK+5_J**MSOS 4.0_^1_%INA -RCSCHD_%IF SECONDARY CALL,(RC.NE.9)_^1_%SAZ PRIMRY-*-1_^1_%CLR A_,CLEAR THREAD IN CALL_^1_%STA- PT,Q_^1PRIMRY LDA- VTPE,I_'FIND PLACE TO GO_1**MSOS 4.1**_^1_%AND- ONEBIT+14_H**MSOS 4.0_^1_%SAZ S6A-*-1_J**MSOS 4.0_^1_%LDA- VTMP,I_I**MSOS 4.1**_^1_%JMP* S6B_N**MSOS 4.0_^1S6A_"LDA- VTPE,I€€_I**MSOS 4.1**_^1_%AND- ONEBIT+8_(FOR REL AND ABS MODE_^1_%SAZ S6-*-1_^1_%TRQ A_^1S6_#AND- LPMSK+15_(15 BIT ARITHMETIC_^1_%ADD- ONEBIT+15_^1_%ADD- VTMP,I_I**MSOS 4.1**_^1_%AND- LPMSK+15_^1S6B_"STA (ACOMEX)_I**MSOS 4.0_^1_%STQ* PASSA_6624_^1_%LDQ- (I)_8624_^1_%LDA- (I)_8624_^1_%AND- LPMSK+15 MASK OFF UPPER BIT_6*624_^1_%STA- (I)_8624_^1_%LDA* PASSA_6624_^1_%EXI COMEXT-$100_!CLE€€AR OVERFLOW AND GO TO NEXT PGM_^1PASSA NUM 0_^1FTOP_!NUM -1_^1FLEVEL NUM -1_^1ALIST ADC FLIST_^1AFMASK ADC FMASK_^1TEMP_!ADC 0_^1***_(SAVE PERSIHABLE REGION IN PUSHDOWN STACK_^1*_*RETURNS I UNCHANGED , Q CONAINS I_^1SAVE_!0_"0_^1_%IIN 0_^1_%LDQ- PRLVL_^1_%LDA* (AFMASK)_^1_%AND- ONEBIT,Q_^1_%SAZ JEXIT-*-1_^1_%TRQ A_^1_%SUB* FLEVEL_^1_%SAZ JEXIT-*-1_^1_%SAP SAV0-*-1_^1J€€EXIT JMP* (SAVE)_^1SAV0_!LDA* (ALIST)_^1_%INA F1+5_^1_%STA* CALL_^1_%LDQ* FLEVEL_'SAVE OLD FLEVEL FTOP IN VOLATILE_^1_%LDA* FTOP_^1_%RTJ- (AVOLA)_%ACQUIRE VOLATILE_^1CALL_!ADC 0_,NO WORDS = F1+F2+4_^1_%LDA* SAVE_)VOLATILE WILL BE RETURNED BY_^1_%STA- 3,I_*THE DISPATCHER BEFORE DROPPING LEVEL)_^1_%LDA- PRLVL_(SET UP NEW PRIORITY LEVLE_^1_%STA* FLEVEL_^1*_]_^1*_]_^1_%LDA- I_^1_%S€€TA* FTOP_^1_%INA 4_^1_%STA- I_^1*_8SET UP NEW FTOP_^1*_]_^1***_]_^1**_]_^1*_]_^1_%EIN 0_^1_%ENQ F1-1_^1SAV1_!LDA- FCOM,Q_'MOVE PART1 OF LIST TO VOLATILE(4)._^1_%STA- (I),Q_^1_%INQ -1_^1_%SQM SAV2-*-1_^1_%JMP* SAV1_^1*_]_^1SAV2_!LDQ* (ALIST)_^1_%JMP* SAV4_)MOVE PART 2 OF LIST TO VOLATILE_^1SAV3_!IIN 0_^1_%STQ* TEMP_^1_%LDQ* (ALIST),Q_#LOCATION_^1_%LDA- (ZERO),Q_^1_%LDQ* TEMP_^€€1_%STA- F1-1,B_^1_%EIN 0_^1_%INQ -1_^1SAV4_!SQZ SAV6_^1_%SQM SAV6_^1_%JMP* SAV3_^1SAV6_!LDQ- I_P**MSOS 4.0_^1_%INQ -4_^1_%LDA- 3,Q_^1_%IIN 0_^1_%STA* SAVE_^1_%LDQ- VI,Q_^1_%STQ- I_^1_%JMP* (SAVE)_^1*_*RESTORE AND RETURN ROUTINE_^1*_*RESTORE COMM REGION ONLY IF A FORTRAN USER LEVEL JUST_^1*_*TERMINATED._^1RESRTN 0_"0_^1_%IIN 0_^1*_]_^1_%LDQ* FTOP_^1_%SQM RXIT-*-1_^1_%LDQ- PR€€LVL_^1_%LDA* (AFMASK)_^1_%AND- ONEBIT,Q_^1_%SAN RES0-*-1_^1RXIT_!JMP* (RESRTN)_^1*_]_^1***_(RESTORE PERISHABLE REGION FROM PUSHDOWN STACK_^1*_]_^1RES0_!LDA* RESRTN_^1_%LDQ* FTOP_^1_%STA- 3,Q_^1_%INQ 4_^1_%STQ- I_^1_%EIN 0_^1*_]_^1*_]_^1*_]_^1_%ENQ F1-1_)MOVE PART 1 OF LIST_^1RES1_!LDA- (I),Q_(COMMUNICATION REGION_^1_%STA- FCOM,Q_^1_%INQ -1_^1_%SQM RES2-*-1_^1_%JMP* RES1_^1*_]€€_^1RES2_!LDQ* (ALIST)_^1_%JMP* RES4_)MOVE PART 2 OF LIST_^1RES3_!IIN 0_,LENGTH IS IN FLIST(0)_^1_%STQ* TEMP_^1_%LDA- F1-1,B_'START OF PART2 IN VOLATILE_^1_%LDQ* (ALIST),Q_#LOCATION OF DATA_^1_%STA- (ZERO),Q_$RESTORE DATA_^1_%LDQ* TEMP_^1_%EIN 0_^1_%INQ -1_^1RES4_!SQZ RESTT_^1_%SQM RESTT_^1_%JMP* RES3_^1*_]_^1RESTT IIN 0_P**MSOS 4.0_^1_%LDQ- I_^1_%INQ -4_^1_%STQ- I_^1_%LDA- €t3,Q_^1_%STA* RESRTN_^1_%RTJ- (AVOLR)_^1_%STQ* FLEVEL_^1_%STA* FTOP_^1_%EIN 0_^1_%JMP* (RESRTN)_^1*_]_^1_%END_]_^__tPNDISP CSY/ A04 P€1_%NAM NDISP_(DECK-ID A04 MSOS 4.1_-SUMMARY-079_^1*_$NON-FORTRAN SCHEDULER/DISPATCHER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT_!SCHEDU,NDISP_B**MSOS 4.1**_^1 SPC 1_]_^1_%ENT T9,DISPXX,SCHTOP_?**MSOS 4.1**_^1_%ENT T18_N***MSOS4.0_^1_%ENT T19€€_N***MSOS4.0_^1_%EXT K65COR_'ENTRY IN PARTITION CORE DRIVER_$***MSOS4.0_^1_%EXT SCHERR_'SCHEDULER ERROR ENTRY IN TRVEC_$**MSOS 4.0_^1_%ENT ERRCNT_L*436_^1_%EXT SAVLU,CKTHRD,SCHSTK,SCHLNG_5**MSOS 4.1**_^1_%EQU PRLVL($EF),TOMPT($B4),AREQXT($B9)_^1_%EQU CONT($B8),COMEXT($104)_9**MSOS 4.1**_^1_%EQU RCSCHD(9)_^1*_\***MSOS4.0_^1_%EQU P1SCHD(18)_"SYS DIR REQ FROM PART 1_,***MSOS4.€€0_^1*_\***MSOS4.0_^1_%EQU ASYSDR($EB)_^1_%EQU COUNT($B8),AMASKT($B7)_^1_%EQU LPMSK($2),NZERO($12),ZERO($22)_^1_%EQU ONEBIT($23),ZROBIT($33)_^1_%EQU VR(3),VPL(4),VPTR(5)_^1_%EQU VTPE(6),VTMP(7)_^1_%EQU PC(1),PT(2),PQ(3)_^1_%EQU XA(1),XI(2),XR(3),XPL(4),XL(5)_^1_%EJT_Q**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1*_$DISPATCHER SECTI€€ON_B**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1*_$UPON COMPLETION OF A PROGRAM, THE DISPATCHER_^1*_%DETERMINES THE PROGRAM OF HIGHEST PRIORITY_^1*_+WAITING FOR EXECUTION. IT MAY EITHER BE IN THE_^1*_+INTERRUPT STACK OR THE SCHEDULER STACK._^1*_]_^1*_]_^1_%EQU NDISP(*)_G**MSOS 4.1**_^1SCHTOP NUM $FFFF_+SCHEDUL€€E STACK TOP_^1DISPXX LDQ- CONT_Q*****_^1_%INQ -XL_8ADJST STACK_^1_%IIN 0_^1_%LDA* SCHTOP_+IF SCHEDLER STACK IS_^1_%INA 0_^1_%SAZ RESINT-*-1_'EMPTY, CHECK INT. STACK_^1_%LDA* (SCHTOP)_)LOAD FIRST WORD_^1_%AND- LPMSK+4_*ISOLATE PRIORITY_^1_%TRA M_0SAVE TEMP. IN M_^1_%LDA- XPL,Q_L***MSOS4.0_^1_%AND- LPMSK+15_I***MSOS4.0_^1_%INA 2_P***MSOS4.0_^1_%SAP DSPA-*-1_I***MSOS4.0_^1_%EN€€A 1_P***MSOS4.0_^1DSPA_!INA -2_O***MSOS4.0_^1_%TCA A_P***MSOS4.0_^1_%AAM A_P***MSOS4.0_^1_%SAZ RESINT-*-1_%GO TO INTERRUPT STACK_^1_%SAM RESINT_K**MSOS 4.0_^1_%JMP* SCHSTC_'GO TO SCHEDULE STACK_/**MSOS 4.0_^1*_]_^1*_!HIGHEST PROGRAM IS IN THE INTERRUPT STACK._^1*_]_^1RESINT LDA- XR,Q_7SET RETRN LOCATION_^1_%STA* (ACOMEX)_^1_%LDA- XI,Q_7RESTORE I_^1_%STA- I_^1_%LDA- XPL,Q_L**M€€SOS 4.0_^1_%AND- LPMSK+15_$MASK OFF OVERFLOW CONDITION_(**MSOS 4.0_^1_%INA 2_P**MSOS 4.0_^1_%SAP RESB_M**MSOS 4.0_^1_%ENA 1_P**MSOS 4.0_^1RESB_!INA -2_O**MSOS 4.0_^1_%STA- PRLVL_(SAVE AS NEW PRIORITY LEVEL_)**MSOS 4.0_^1_%LDA- XPL,Q_(GET PL + OVF_7**MSOS 4.0_^1_%AND- ONEBIT+15_H**MSOS 4.0_^1_%SOV 0_,CLEAR OVERFLOW FAULT_/**MSOS 4.0_^1_%SAZ RESA_M**MSOS 4.0_^1_%ENA 16_O**MSOS€€ 4.0_^1_%ADD- LPMSK+15_I**MSOS 4.0_^1RESA_!STQ- CONT_)RESTORE TOP OF INTERRUPT STACK_$**MSOS 4.0_^1_%LDA- XA,Q_)RESTORE VALUE OF A_1**MSOS 4.0_^1_%LDQ- PRLVL_(SET NEW PRIORITY LEVEL_^1_%LDQ- (AMASKT),Q_%RESTORE MASK_^1_%TRQ M_^1_%LDQ- (CONT)_)RESTORE Q_^1_%EXI COMEXT-256_^1*_]_^1*_!HIGHEST PROGRAM IS IN THE SCEDULER THREAD._^1*_]_^1SCHSTC TRM Q_0PRIORITY TO Q_^1_%STQ- PRLVL_,SET€€ NEW PRIORITY_^1_%LDA- (AMASKT),Q_1AND MASK_^1_%TRA M_^1_%LDQ* SCHTOP_+STORE NEW POINTER_^1_%LDA- PT,Q_-TOP OF SCHEDLER_^1_%STA* SCHTOP_5THREAD_^1_%TRQ A_/TEST IF PRIMARY SCHEDULER_^1_%SUB* ASCHD_+CALL WAS MADE._^1_%SAM SCHSEC-*-1_^1_%SUB* ASCLNG_^1_%SAP SCHSEC-*-1_^1_%LDA- TOMPT_,IF PRIMARY CALL RELEASE_^1_%STA- PT,Q_-STACK POSITION AND PLACE_^1_%STQ- TOMPT_+ON EMPTY THREAD._^€€1_%LDA- PC,Q_-LOAD ABSOLTE ADDRESS_^1_%STA* (ACOMEX)_(STORE INTO COMEXT_^1_%JMP* SCHXIT_^1SCHSEC LDA- (ZERO),Q_)TEST IF ABSOLTE OR_^1_%AND- ONEBIT+14_#CHECK THE D BIT_4***MSOS4.0_^1_%SAZ SCHA_M***MSOS4.0_^1_%LDA- PC,Q_)MUST BE ABSOLUTE_3***MSOS4.0_^1_%JMP* SCH1A_L***MSOS4.0_^1SCHA_!LDA- (ZERO),Q_I***MSOS4.0_^1_%AND- ONEBIT+8_3RELATIVE_^1_%SAZ SCH1-*-1_(CALL. SKIP IF ABSOLUTE_^1_%€€TRQ A_0ADDRESS 1ST WD OF CALL_^1SCH1_!AND- LPMSK+15_^1_%ADD- ONEBIT+15_^1_%ADD- PC,Q_-ADD REL. ADDRESS OR IF_^1_%AND- LPMSK+15_^1SCH1A STA* (ACOMEX)_$A=0, ABS ADDR(SS AND STORE_)***MSOS4.0_^1_%CLR A_0ZERO INTO THREAD_^1_%STA- PT,Q_-COMPLETION INDICATION_^1SCHXIT TRQ A_0PASS POINTER TO CALL IN A_^1_%LDQ- PQ,Q_7PASS,Q_^1_%EXI COMEXT-256_^1ACOMEX ADC COMEXT_^1ASCHD ADC SCHSTK_€€*SCHED. STACK LOCATION_^1ASCLNG ADC SCHLNG_*SCHED. STACK LENGTH LOC._^1_%EJT_Q**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1*_$SCHEDULER SECTION_C**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1*_]_^1*_1SCHDLE REQUEST PROCESSOR (T9)_^1*_]_^1*_]_^1*_1ON ENTRY A POINTER TO€€ THE PARAMETER_^1*_1LIST MUST BE IN THE A REGISTER_^1*_]_^1*_1IF THE SIGN BIT OF THE POINTER_^1*_1IS ONE, THE REFERENCE IS INDIRECT._^1*_]_^1*_]_^1_%EQU T18(*)_K***MSOS4.0_^1_%EQU_!SCHEDU(*)_^1*_]_^1T9_#TRA Q_^1_%LDA- 8,I_N***MSOS4.0_^1_%SAM SCH1X_(SKIP IF INDIRECT_1**MSOS 4.1**_^1_%RAO- VR,I_^1_%RAO- VR,I_7WAS INDIRECT_^1SCH1X LDA- VTPE,I_'GET SECOND PARAMETER_-**MSOS 4.1**_^1€€_%STA- VTMP,I_I**MSOS 4.1**_^1_%LDA- VPL,I_(GET FIRST PARAMETER_.**MSOS 4.1**_^1_%STA- VTPE,I_*TEMPORARILY AND STORE_^1_%AND- LPMSK+4_)PRIORITY OF REQUEST_^1_%STA- VPL,I_^1_%LDA- VTPE,I_I**MSOS 4.1**_^1_%ARS 9_P***MSOS4.0_^1_%AND- LPMSK+5_J***MSOS4.0_^1_%INA -P1SCHD_J***MSOS4.0_^1_%SAZ SP1_*SKIP IF REQ CODE OF 18_-***MSOS4.0_^1_%LDA- VTMP,I_I**MSOS 4.1**_^1_%SAP S1-*-1_^1_%LDA-€€ VTPE,I_I**MSOS 4.1**_^1_%AND- ONEBIT+14_#CHECK IF D BIT SET_1***MSOS4.0_^1_%SAN S1_+SKIP IF SET_8***MSOS4.0_^1SP1_"LDA- VTMP,I_I**MSOS 4.1**_^1_%JMP* DIRCAL_'JMP IF DIRECTORY CALL_^1S1_#LDA- PRLVL_^1_%SUB- VPL,I_+IF REQ PRIORITY HIGHER_^1_%SAP S2-*-1_'THAN CURRENT PRIORITY_^1_%JMP HILVL_(FO TO HILVL_8***MSOS4.0_^1S2_#LDA- VTPE,I_'IF NOT_;**MSOS 4.1**_^1_%ARS 9_:A PRIMARY_^1_%A€€ND- LPMSK+5_3SCHEDULER_-***MSOS4.0_^1_%INA -RCSCHD_4CALL_^1_%SAZ SCH2-*-1_3GO_^1_%IIN 0_:TO_^1_%JMP* SCHED2_5SCHED2_^1*_]_^1*_1PRIMARY SCHEDULAR CALL_^1*_6- IMPLIES RC=9 -_^1*_1ABSOLUTIZE AND TRANSFER TO STACK_^1*_]_^1SCH2_!LDA- VTPE,I_I**MSOS 4.1**_^1_%AND- ONEBIT+14_#CHECK D BIT_8***MSOS4.0_^1_%SAN ABS-*-1_0T_8***MSOS4.0_^1_%LDA- VTPE,I_I**MSOS 4.1**_^1_%AND- ONEBIT+8_^1_%SA€€Z ABS-*-1_)SKIP ON ABS CALL_^1_%EOR- VTPE,I_I**MSOS 4.1**_^1_%STA- VTPE,I_^1_%TRQ A_^1_%AND- LPMSK+15_^1_%ADD- ONEBIT+15_^1_%ADD- VTMP,I_I**MSOS 4.1**_^1_%AND- LPMSK+15_^1_%STA- VTMP,I_^1ABS_"IIN 0_^1_%LDQ- TOMPT_+FIND EMPTY IN STACK_^1_%INQ 0_^1_%SQN S3-*-1_^1_%RAO ERRCNT_K***MSOS4.0_^1_%JMP SCHERR_'JMP IF NO EMPTY_4***MSOS4.0_^1S3_#LDA- PT,Q_^1_%STA- TOMPT_^1_%STQ- VPTR,I_€€*STORE NEW POINTER TO_^1_%LDA- VTPE,I_*PARAMETER LIST_^1_%STA- (ZERO),Q_^1_%LDA- VTMP,I_^1_%STA- PC,Q_^1SCHED2 LDA- (I)_8STORE Q_^1_%STA- PQ,Q_^1*_]_^1*_*SEARCH FOR STACK POSITION ACCORDING_^1*_*TO PRIORITY OF THE REQUEST._^1*_]_^1_%IIN 0_^1_%LDQ =XSCHTOP_(POINTER TO SCHTOP IN Q_^1_%INQ -2_^1THRED1 EIN 0_,ALLOW INTERRUPT_4*465_^1_%STQ- VTPE,I_L*465_^1_%NOP 0_Q*465_^1_%IIN 0_€€Q*465_^1_%LDA- PT,Q_,POINTER TO NEXT ENTRY_^1_%INA 0_^1_%SAZ SCH3-*-1_(END OF THREAD = 0_^1*_;THREAD INTO Q_^1_%TRA Q_^1_%IIN 0_^1_%LDA- (ZERO),Q_(SKIP TO THREAD NEW ENTRY_^1_%AND- LPMSK+4_)IF ITS PRIORITY HIGHER_^1_%SUB- VPL,I_^1_%SAM THREAD-*-1_^1_%JMP* THRED1_^1*_]_^1*_*THREAD NEW ENTRY_^1*_]_^1SCH3_!IIN 0_^1THREAD LDQ- VTPE,I_*POINTER TO PRECEDING ENTRY_^1_%LDA- PT,Q_,POIN€€TER TO NEXT ENTRY_^1_%LDQ- VPTR,I_*STORE INTO NEW ENTRY_^1*_9ALLOW 16 BIT ADDRESSING_+***MSOS4.0_^1_%STA- PT,Q_^1_%TRQ A_^1_%LDQ- VTPE,I_*STORE NEW POINTER_^1_%STA- PT,Q_,IN PRECEDING ENTRY_^1_%LDA- (I)_*PICK-UP USERS Q REGISTER_^1_%AND- LPMSK+15_$REMOVE THE SIGN BIT_^1_%STA- (I)_*PUT IT BACK_^1_%JMP- (AREQXT)_^1*_]_^1**_)PROCESS DIRECTORY CALLS_^1*_]_^1*_]_^1DIRCAL AND- LPMSK+15_€€(GET SYSDIR ADDRESS_^1_%ADD- ASYSDR_^1_%IIN 0_^1_%STA- VPTR,I_^1_%LDA- (ZERO),Q_$PICK UP REQUEST CODE_^1_%ARS 9_^1_%AND- LPMSK+5_J***MSOS4.0_^1_%INA -RCSCHD_^1_%SAZ DIR2-*-1_$IF NOT SCHEDULE REQUEST CODE_^1_%INA -P1SCHD+RCSCHD_C***MSOS4.0_^1_%SAZ DIR2_)SKIP IF REQ CODE 18_0***MSOS4.0_^1_%ENA 0_,MUST BE A SECONDARY CALL_^1_%STA- PT,Q_)CLEAR THREAD IN USERS REQUEST_^1DIR2_!LDQ€€- VPTR,I_'Q = SYSTEM DIRECTORY ADR._^1_%LDA- 2,Q_^1_%SAZ DIR1-*-1_^1_%JMP SCHERR_K**MSOS 4.0_^1DIR1_!LDA- (ZERO),Q_$CHECK IF OK TO SCHEDULE_,***MSOS4.0_^1_%SAP DIR1A_(OK, CONTINUE_7***MSOS4.0_^1_%JMP SCHERR_K**MSOS 4.0_^1*_]_^1*_8REPLACE PRIORITY_3***MSOS4.0_^1DIR1A AND- NZERO+4_%IN DIRECTORY WITH_2***MSOS4.0_^1_%ADD- VPL,I_+CALL PRIORITY_^1_%STA- (ZERO),Q_^1_%ARS 9_/IF MASS €€MEMMORY CALL_^1_%AND- LPMSK+5_J***MSOS4.0_^1_%SAZ MASCAL-*-1_%GO TO DIRECTORY CALL_^1*_]_^1*_]_^1**_)CORE RESIDENT DIRECTORY CALL_^1*_]_^1_%SET A_^1_%STA- PT,Q_^1_%EIN 0_^1_%LDA- PRLVL_^1_%SUB- VPL,I_^1_%SAP S5-*-1_^1_%JMP* HILVL_^1S5_#JMP* SCHED2_^1*_]_^1**_)MASS MEMORY DIRECTORY CALL._^1*_]_^1MASCAL LDA- (I)_O*433***_^1_%STA- VPL,I_(SAVE Q TEMP IN VOLATILE_-*433****_^1_%RTJ €€CKTHRD_'CHECK THREAD - BUSY, REJECT REQUEST(Q15=1)***_^1_%LDA- VPL,I_M*433****_^1_%STA- 3,Q_*MOVE PARAM TO DIRECTORY SLOT 3_%*433****_^1_%LDA- (ZERO),Q_J*433****_^1_%AND =N$F0_(SAVE REQ PRIORITY_3*433****_^1_%STA- VPL,I_(SET UP REQUEST PRIORITY IN VOLATILE *433****_^1_%LDA- (ZERO),Q_$CHECK THE D BIT_4***MSOS4.0_^1_%AND- ONEBIT+14_H***MSOS4.0_^1_%SAZ MASCO_L***MSOS4.0_^1_%JMP K6€€5COR_'EXIT TO PARTITION CORE DRIVER_%***MSOS4.0_^1MASCO ENQ 1_,LU OF CORE ALLOCATOR_/***MSOS4.0_^1_%JMP SAVLU_(SET UP THREAD TO CORE ALLOCATOR_%*43^***_^1*_8THREAD REQUEST TO LOGICAL UNIT 1_#*433****_^1 EJT_]_^1*_\***MSOS4.0_^1*_*PROCESS ENABLE SCHDULE CALL_6***MSOS4.0_^1*_\***MSOS4.0_^1_%EQU T19(*)_K***MSOS4./_^1_%TRA Q_^1_%LDA- (ZERO),Q_I*MSOS 4.0_^1_%AND- LPMSK+8_J*MSOS 4.0€€_^1_%SAN DISCH_(DISABLE REQUEST_4*MSOS 4.0_^1_%LDQ- PC,Q_)GET SYS DIR INDEX_2***MSOS4.0_^1_%ADQ- ASYSDR_'CALCULATE ADDRESS_2***MSOS4.0_^1_%LDA- (ZERO),Q_I***MSOS4.0_^1_%AND- LPMSK+15_$CLEAR DISABLE BIT IN DIRECTORY_$***MSOS4.0_^1_%STA- (ZERO),Q_I***MSOS4.0_^1_%JMP- (AREQXT)_I***MSOS4.0_^1*_\***MSOS4.0_^1*_*PROCESS DISABLE SCHEDULE CALL_4***MSOS4.0_^1*_\***MSOS4.0_^1DISCH LDQ- PC,€€Q_)GET DIRECTORY INDEX_0*MSOS 4.0_^1_%ADQ- ASYSDR_'CALCULATE ADDRESS_2***MSOS4.0_^1_%LDA- (ZERO),Q_I***MSOS4.0_^1_%IIN 0_Q69*1566_^1_%AND- LPMSK+15_J69*1566_^1_%EIN 0_Q69*1566_^1_%EOR- ONEBIT+15_#SET DISABLE BIT IN DIRECTORY_'***MSOS4.0_^1_%STA- (ZERO),Q_I***MSOS4.0_^1_%JMP- (AREQXT)_I***MSOS4.0_^1 EJT_]_^1*_]_^1*_*SCHDLE REQUEST IS OF HIGHER PRIORITY_^1*_*THAN CURRENT LEVEL._^1*€€_]_^1HILVL LDQ- VPTR,I_'GET POINTER_^1_%IIN 0_^1_%LDA- (ZERO),Q_$REQUEST CODE/LEVEL_^1_%ARS 9_,EXTRACT REQUEST CODE_^1_%AND- LPMSK+5_J***MSOS4.0_^1_%INA -RCSCHD_%IF SECONDARY CALL,(RC.NE.9)_^1_%SAZ PRIMRY-*-1_^1_%CLR A_,CLEAR THREAD IN CALL_^1_%STA- PT,Q_^1PRIMRY LDA- VTPE,I_'FIND PLACE TO GO_1**MSOS 4.1**_^1_%AND- ONEBIT+14_#PART 1 REQUEST '_3***MSOS4.0_^1_%SAZ S6A_N***MSOS€€4.0_^1_%LDA- VTMP,I_I**MSOS 4.1**_^1_%JMP* S6B1_M***MSOS4.0_^1S6A_"LDA- VTPE,I_I**MSOS 4.1**_^1_%AND- ONEBIT+8_(FOR REL AND ABS MODE_^1_%SAZ S6-*-1_^1_%TRQ A_^1S6_#AND- LPMSK+15_(15 BIT ARITHMETIC_^1_%ADD- ONEBIT+15_^1_%ADD- VTMP,I_I**MSOS 4.1**_^1_%AND- LPMSK+15_^1S6B1_!IIN 0_P***MSOS4.0_^1_%STA* JMP+1_^1L01FLG NUM 0_N**MSOS 4.1**_^1_%STQ* PASSA_+LOC OF PARAMETER LIST_^1*_]_^1€€*_*PUT RQUESTOR ON INTERRUPT STACK_^1*_]_^1_%LDQ- COUNT_^1_%LDA- PRLVL_^1_%STA- XPL,Q_+SAVE PRESENT LEVEL_^1_%LDA- AREQXT_^1_%STA- XR,Q_^1_%LDA- I_^1_%STA- XI,Q_7SAVE I_^1_%INQ XL_^1_%STQ- COUNT_+SET NEW BASE_^1_%LDQ- VPL,I_^1_%STQ- PRLVL_^1_%LDA- (AMASKT),Q_%SET NEW LEVEL AND_^1_%TRA M_:MASK_^1_%LDQ- (I)_3625_^1_%TRQ A_5625_^1_%AND- LPMSK+15_'MASK OFF UPPER BIT_1624_^1_%STA- (I€Κ)_8624_^1_%LDA* PASSA_6624_^1_%SOV 0_,TURN OFF OVERFLOW IND._^1_%EIN 0_^1JMP_"JMP+ 0_>GO_^1PASSA NUM 0_^1ERRCNT NUM 0_,NUMBER OF TIMES SCHEDULER STACK HAS *436_^1*_8OVERFLOWED._9*436_^1_%END_]_^__ΚPS15721 CSY/ C19 P€1_%NAM S15721_'DECK-ID C19 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$1572-1 SAMPLE RATE GENERATOR HANDLING ROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFOR€€NIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS SUBROUTINE IS DESIGNED TO BE USED FOR INTERRUPTS ONLY WHEN_^1*_'THE 1572-1 (SRG PART) IS NOT THE BASIC SYSTEM TIME BASE_^1*_$IF THIS SUBROUTINE IS USED TO ENABLE THE SRG INTERRUPT, THE USER_^1*_'MUST SUPPLY A ROUTINE WITH ENTRY POINT SRG721 TO ACKNOWLEDGE_^1*_'THE INTERRUPT AND PERFORM ANY OTHER FUNCTION._^1*_$TH€€IS SUBROUTINE IS CALLABLE FROM BOTH ASSEMBLY AND FORTRAN_^1*_'PROGRAMS. PSEUDO RE-ENTRANCY IS ACHIEVED BY INHIBITING_^1*_'INTERRUPTS THROUGHOUT._^1*_$ASSEMBLY LANGUAGE CALL..._^1*_*RTJ+ S15721_'RTJ+ S15721_^1*_*ADC ICOMND_!OR_!ADC (ICOMND-*)_^1*_*ADC IVALUE_'ADC (IVALUE-*)_^1*_$WHERE ICOMND DEFINES THE OPERATION..._^1*_*1 = READ 1572-1 STATUS INTO IVALUE_^1*_*2 = READ 1572-1 S€€RG COUNTER INTO IVALUE_^1*_*3 = OUTPUT 1572-1 SRG COUNT FROM IVALUE_^1*_*4 = OUTPUT 1572-1 FUNCTION FROM IVALUE_^1*_$FOR ICOMND = 4 THE FUNCTION CODES ARE..._^1*_0BITS 0-3,6-15 UNUSED_^1*_0BIT 4 - 0 = DISABLE SRG INTERRUPT_^1*_6- 1 = ENABLE SRG INTERRUPT_^1*_0BIT 5 - 0 = DISABLE SRG SYNC_^1*_6- 1 = ENABLE SRG SYNC_^1*_'ON RETURN TO THE CALLER, THE VALUE IN THE A-REGISTER IS..._^1*_€€-0 = NO ERROR_^1*_,-1 = INTERNAL REJECT_^1*_-1 = EXTERNAL REJECT_^1*_$FORTRAN CALL..._"(AS INTEGER FUNCTION)_^1*_*INTEGER S15721_^1*_*IF(S15721(ICOMND,IVALUE)) 10,20,30_^1*_'WHERE PARAMETERS ARE AS DEFINED ABOVE_^1*_'STATEMENT EXECUTED IS..._^1*_,10 = INTERNAL REJECT_^1*_,20 = NO ERROR_^1*_,30 = EXTERNAL REJECT_^1_%EJT_]_^1* SUBROUTINE ENTRY POINTS_^1_%ENT S15721_'BASIC SUBROUTIN€€E ENTRY_^1_%SPC 2_^1* SUBROUTINE EXTERNALS_^1_%EXT E15721_'BASIC W,E,S FUNCTION (IN SYSDAT)_^1_%EXT H15721_'1572-1 FUNCTION HISTORY (IN SYSDAT)_^1_%EXT PARTBL_'PARTITIONED CORE TABLE (IN SYSDAT)_^1_%SPC 2_^1* SUBROUTINE EQUIVALENCES_^1_%EQU MFF7F($3A)_"$FF7F MASK_^1_%EQU ZERO($22)_#CELL CONTAINING ZERO_^1_%EQU LPMASK(2)_#LOGICAL PRODUCT MASK TABLE_^1_%SPC 2_^1S15721 NUM €€ 0_,SUBROUTINE ENTRY_^1_%IIN 0_^1_%STQ* SAVEQ_(SAVE Q._^1_%LDA* CODE_)COMPUTE ADDRESS FOR DATA_^1_%AND- MFF7F_^1_%STA* CODED_^1_%LDQ* (S15721)_$1ST PARAM. ADDRESS_^1_%RTJ* PARABS_^1_%STA* COMAND_'SAVE THE COMMAND_^1_%RAO* S15721_'INCREMENT TO 2ND PAR. ADR._^1_%LDQ* (S15721)_$2ND PARAM. ADR._^1_%RTJ* PARABS_^1_%STQ* VALADD_'SAVE IVALUE ADDRESS_^1_%RAO* S15721_'ADJUST EXIT ADDRESS_^€€1_%LDQ* CODED_^1_%INA -4_+SUBTRACT 4 FROM ICOMND._^1_%SAM TRY3_^1_%JMP* OUT1_)OPTION 4._^1TRY3_!INA 1_^1_%SAM TRY2_^1_%LDA* (VALADD)_^1_%OUT ERR-*_(OUTPUT VALUE OR FUNCTION._^1_%JMP* EXITOK_^1TRY2_!INA 1_^1_%SAM ONE_*OPTION 1._^1_%JMP* IN1_*OPTION 2._^1ONE_"LDQ* CODE_)FUNCTION/STATUS ADR._^1_%JMP* IN1_^1OUT1_!LDQ* CODE_)CHANGE COMMAND._^1_%LDA+ H15721_'LOAD HISTORY_^1_%AND* €€LSTMSK_'SAVE LST BITS_^1_%ADD* (VALADD)_$SET SRG BITS_^1_%OUT ERR-*_^1_%STA+ H15721_'UPDATE HISTORY WORD_^1_%JMP* EXITOK_^1IN1_"INP ERR-*_(INPUT VALUE OR STATUS._^1_%STA* (VALADD)_$STORE IN IVALUE._^1EXITOK CLR A_,NO ERROR EXIT_^1EXIT_!LDQ* SAVEQ_(RESTORE Q._^1_%EIN 0_^1_%JMP* (S15721)_$RETURN TO CALLER_^1ERR_"JMP* INREJ_^1_%ENA 1_,EXTERNAL REJECT._^1_%JMP* EXIT_^1INREJ ENA €€-1_^1_%JMP* EXIT_^1CODE_!ADC E15721_'FUNCTION/STATUS W,E,S_^1CODED NUM 0_,DATA W,E,S_^1LSTMSK NUM $6_^1SAVEQ NUM 0_,Q._^1COMAND NUM 0_,COMMAND_^1VALADD NUM 0_,ADDR. OF IVALUE._^1APRTBL ADC PARTBL_^1_%SPC 2_^1PARABS NOP 0_,ABSOLUTIZE PARAMETER._!Q = PARAMETER ADDRESS_^1_%LDA* APRTBL_^1_%EOR- LPMASK+15_#IS THERE PARTITIONED CORE_^1_%SAZ PAR1_)NO, ASSUME REQUEST IS FROM BA€bNK 0_^1_%TRQ A_^1_%SUB* (APRTBL)_$IS THE REQUEST FROM PART 1_^1_%SAM PAR1_)NO_^1_%LDA- (ZERO),Q_$YES, ASSUME ABSOLUTE ADDRESSING_^1_%JMP* PAR2_^1PAR1_!LDA- (ZERO),Q_$IS THE ADDRESS RELATIVE_^1_%SAP PAR2_)NO_^1_%AAQ A_,YES, ABSOLUTIZE IT_^1_%AND- LPMASK+15_^1PAR2_!TRA Q_^1_%LDA- (ZERO),Q_$OBTAIN THE PARAMETER_^1_%JMP* (PARABS)_$RETURN_^1_%END_]_^__bPL15721 CSY/ C20 P€1_%NAM L15721_'DECK-ID C20 MSOS 4.1_-SUMMARY-079_^1*_$1572-1 LINE SYNC TIMER HANDLING ROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS SUBROUTINE IS DESIGNED TO BE USED FOR INTERRUPTS ONLY WHEN_^1*_'THE 1572-1 IS NOT THE BASIC SYSTEM TIME BAS€€E. (LST PORTION)_^1*_$IF THIS SUBROUTINE IS USED TO ENABLE THE LST, AND THE 1572-1_^1*_'INTERRUPT IS USED, THE USER MUST SUPPLY A ROUTINE WITH ENTRY_^1*_'POINT LST721 TO ACKNOWLEDGE THE INTERRUPT AND PERFORM ANY_^1*_'OTHER FUNCTION._^1*_$THIS SUBROUTINE IS CALLABLE FROM BOTH ASSEMBLY AND FORTRAN_^1*_'PROGRAMS. PSEUDO RE-ENTRANCY IS ACHIEVED BY INHIBITING_^1*_'INTERRUPTS THROUGHOUT€€._^1*_$ASSEMBLY LANGUAGE CALL..._^1*_*RTJ+ L15721_%OR_!RTJ+ L15721_^1*_*ADC INVALUE_*ADC (IVALUE-*)_^1*_'WHERE IVALUE IS DEFINED AS..._^1*_-BITS 0,3-15 UNUSED_^1*_-BIT 1 - 0 = DISABLE LST INTERRUPT_^1*_3- 1 = ENABLE LST INTERRUPT_^1*_-BIT 2 - 0 = DISABLE LST SYNC_^1*_3- 1 = ENABLE LST SYNC_^1*_'ON RETURN TO THE CALLER, THE VALUE IN THE A-REGISTER IS..._^1*_-0 = NO ERROR_^1*_,-1 =€€ INTERNAL REJECT_^1*_-1 = EXTERNAL REJECT_^1*_$FORTRAN CALL..._"(AS INTEGER FUNCTION)_^1*_*IF(L15721(IVALUE)) 10,20,30_^1*_'WHERE IVALUE IS AS DEFINED ABOVE_^1*_'STATEMENT EXECUTED IS..._^1*_,10 = INTERNAL REJECT_^1*_,20 = NO ERROR_^1*_,30 = EXTERNAL REJECT_^1_%EJT_]_^1* SUBROUTINE ENTRY POINTS_^1_%ENT L15721_'BASIC SUBROUTINE ENTRY_^1_%SPC 2_^1* SUBROUTINE EXTERNALS_^1_%EXT E€€15721_'BASIC W,E,S FUNCTION (IN SYSDAT)_^1_%EXT H15721_'1572-1 FUNCTION HISTORY (IN SYSDAT)_^1_%EXT PARTBL_'PARTITIONED CORE TABLE (IN SYSDAT)_^1_%SPC 2_^1* SUBROUTINE EQUIVALENCES_^1_%EQU LPMASK(2)_#LOGICAL PRODUCT MASK TABLE_^1_%EQU ZERO($22)_#CELL CONTAINING ZERO_^1_%SPC 4_^1L15721 NUM 0_,BASIC ENTRY_^1_%IIN 0_^1_%STQ* SAVEQ_(SAVE Q._^1_%LDQ* (L15721)_$PARAMETER ADDRESS€€_^1_%RTJ* PARABS_^1_%STQ* VALADD_'SAVE VALUE ADDRESS_^1_%RAO* L15721_'ADJUST EXIT ADDRESS_^1_%LDA+ H15721_'LOAD HISTORY WORD_^1_%AND* SRGMSK_'LEAVE SRG FUNCTION AS IS._^1_%ADD* (VALADD)_$SET LST FUNCTION BITS._^1_%LDQ* CODE_)FUNCTION OUTPUT._^1_%OUT ERR-*_^1_%STA+ H15721_'UPDATE HISTORY_^1_%CLR A_,NO ERROR FLAG_^1EXIT_!LDQ* SAVEQ_^1_%EIN 0_^1_%JMP* (L15721)_$RETURN TO CALLER_^1E€€RR_"JMP* INREJ_(INTERNAL REJECT._^1_%ENA 1_,EXTERNAL REJECT._^1_%JMP* EXIT_^1INREJ ENA -1_^1_%JMP* EXIT_^1CODE_!ADC E15721_'BASIC W,E,S FUNCTION ADDRESS_^1SAVEQ NUM 0_,Q._^1VALADD NUM 0_,ADDR. OF IVALUE._^1SRGMSK NUM $30_*SRG FUNCTION BIT MASK._^1APRTBL ADC PARTBL_^1_%SPC 2_^1PARABS NOP 0_,ABSOLUTIZE PARAMETER._!Q = PARAMETER ADDRESS_^1_%LDA* APRTBL_^1_%EOR- LPMASK+15_#I€€S THERE PARTITIONED CORE_^1_%SAZ PAR1_)NO, ASSUME REQUEST IS FROM BANK 0_^1_%TRQ A_^1_%SUB* (APRTBL)_$IS THE REQUEST FROM PART 1_^1_%SAM PAR1_)NO_^1_%LDA- (ZERO),Q_$YES, ASSUME ABSOLUTE ADDRESSING_^1_%JMP* PAR2_^1PAR1_!LDA- (ZERO),Q_$IS THE ADDRESS RELATIVE_^1_%SAP PAR2_)NO_^1_%AAQ A_,YES, ABSOLUTIZE IT_^1_%AND- LPMASK+15_^1PAR2_!TRA Q_^1_%LDA- (ZERO),Q_$OBTAIN THE PARAMETER_€(^1_%JMP* (PARABS)_$RETURN_^1_%END_]_^__(PTOD CSY/ A24 P€1_%NAM TOD_*DECK-ID A24 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$TIME OF DAY CALCULATIONS_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTR€€OL DATA CORPORATION 1973_^1_%SPC 2_^1* THIS PROGRAM IS USED TO UPDATE THE SYSTEM TIME OF DAY. THERE ARE_^1*_"TWO BASIC MODES OF PROGRAM OPERATION...PERIODIC TIME UPDATES ON A_^1*_"SELF SCHEDULING BASIS OR USER CALLED FOR A DEMAND TIME UPDATE._^1*_"THE PERIODIC TIME UPDATES ARE INITIATED BY THE SPACE PROGRAM._^1*_"USER REQUEST IS RTJ+ TOD OR CALL TOD WITH THE USER A,Q, AND I_^1*_€€"REGISTERS PRESERVED. A HARDWARE TIME SOURCE MUST BE PRESENT IN_^1*_"THE SYSTEM FOR PROPER OPERATION OF THIS PROGRAM. THE BASIC_^1*_"SYSTEM TIME AND DATE PATAMETERS ARE CONTAINED IN SYSDAT. THE_^1*_"PRIORITY LEVEL OF THIS PROGRAM IS DETERMINED BY THE TODLVL_^1*_"EQUATE IN SYSDAT. PROGRAM IS RE-ENTRANT._^1*_$THE TIME/DATE FUNCTION PROGRAM (ORDINAL TDFUNC) MUST BE PRESENT_^1*_'IN€€ THE SYSTEM TO ALLOW FOR THE CALENDAR UPDATE FUNCTION_^1*_'THAT IS PERFORMED AT THE BEGINNING OF EACH DAY._^1_%SPC 2_^1* PROGRAM ENTRY POINTS_^1_%ENT UPTOD_(PERIODIC OPERATION INITIATION_^1_%ENT TOD_*USER OPERATION INITIATION_^1_%SPC 2_^1* PROGRAM EXTERNAL POINTS_^1_%EXT TIMCPS_'CYCLES/SECOND ON SYSTEM CLOCK_^1_%EXT TODLVL_'TIMER CALL REQUEST WORD_^1_%EXT TDFUNC_'CALENDAR €€UPDATE ORDINAL_^1_%EXT HORTO_(CURRENT HOUR_^1_%EXT MINTO_(CURRENT MINUTE_^1_%EXT SECON_(CURRENT SECOND_^1_%EXT CONTA_(CURRENT COUNT_^1_%EXT HORMIN_'CURRENT 24-HOUR TIME_^1_%EXT TOTMIN_'CURRENT ELAPSED MINUTES_^1_%SPC 2_^1* PROGRAM EQUIVALENCES_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU QCLK($E8)_#CORE CLOCK_^1_%EQU UPCTS(30)€€_#FREQUENCY AT WHICH PROGRAM RUNS (COUNTS)_^1_%EQU AVOLA($BB)_"VOLATILE STORAGE ACQUISITION ADDRESS_^1_%EQU AVOLR($BA)_"VOLATILE STORAGE RELEASE ADDRESS_^1_%EJT_]_^1************************************************************************_^1*_]_^1*_$TIME OF DAY PERIODIC OPERATION ENTRY_^1*_]_^1************************************************************************_^1_%SPC 2_^1UP€€TOD RTJ* TOD_^1_%RTJ- (AMONI)_%TIMER CALL_^1_%ADC TODLVL_'FOR_^1_%ADC UPTOD_*UPTOD_^1_%ADC UPCTS_+IN SPECIFIED_^1_%JMP- (ADISP)_*NUMBER OF COUNTS_^1_%EJT_]_^1************************************************************************_^1*_]_^1*_$TIME OF DAY UPDATE USER ENTRY_^1*_]_^1************************************************************************_^1_%SPC 2_^1TOD_"NUM 0_,S€€UBROUTINE CALL ENTRY_^1_%IIN 0_^1_%RTJ- (AVOLA)_%VOLATILE STORAGE - 0 Q_^1_%NUM 7_?1 A_^1_%LDA* TOD_<2 I_^1_%STA- 3,I_=3 RETURN ADDRESS_^1_%LDA* PATSO_;4 PAST COUNTS_^1_%STA- 4,I_^1_%LDA* (XCONTA)_85 CURRENT COUNTS_^1_%STA- 5,I_^1_%LDA* (XSECON)_86 CURRENT SECONDS_^1_%STA- 6,I_^1_%EIN 0_^1_%LDQ- QCLK_)GET CURRENT COUNTS_^1_%TRQ A_^1_%SUB- 4,I_*SUBTRACT PAST TO GET ELAPSED COUN€€TS_^1_%STQ- 4,I_*PRESENT BECOMES PAST_^1_%ADD- 5,I_*ADD ELAPSED COUNTS TO CURRENT COUNTS_^1_%CLR Q_-THEN_^1_%DVI* PARA_)DIVIDE BY COUNTS/SEC_^1_%STQ- 5,I_*SET PRESENT VALUE OF COUNTS_^1_%ADD- 6,I_*UPDATE SECONDS_^1_%STA- 6,I_^1_%INA -60_*HAVE 60 SECONDS ELAPSED_^1_%SAP ESEC_)YES_^1_%JMP* EX_+NO_^1ESEC_!IIN 0_^1_%STA- 6,I_+YES,SAVE EXCESS OF 60_^1_%RAO* (XMINTO)_(AND BUMP MINUTE€€S_^1_%LDA* (XMINTO)_^1_%INA -60_*HAVE 60 MINUTES ELAPSED_^1_%SAM EX_,NO_^1_%STA* (XMINTO)_%YES, SAVE EXCESS OF 60_^1_%RAO* (XHORTO)_'AND BUMP HOURS_^1_%LDA* (XHORTO)_^1_%INA -24_*HAVE 24 HOURS ELAPSED_^1_%SAM EX_,NO_^1_%STA* (XHORTO)_'YES, SAVE EXCESS OF 24_^1*_]_^1*_$SCHEDULE CALENDAR PROGRAM_^1*_]_^1_%CLR Q_,ENTRY VECTOR = 0_^1_%SYSCHD_"TDFUNC,4_^1EX_#LDA* (XHORTO)_$SET UP 2€€4-HOUR TIME_^1_%MUI* HUNDRD_^1_%ADD* (XMINTO)_^1_%STA* (XHORMN)_^1_%LDA* (XHORTO)_$SET UP TOTAL ELAPSED MINUTES_^1_%MUI* SIXTY_^1_%ADD* (XMINTO)_^1_%STA* (XTOTMN)_^1_%IIN 0_^1_%LDA- 3,I_*OBTAIN RETURN ADDRESS_^1_%STA* RTURN_(SAVE_^1_%LDA- 4,I_^1_%STA* PATSO_^1_%LDA- 5,I_^1_%STA* (XCONTA)_^1_%LDA- 6,I_^1_%STA* (XSECON)_^1_%RTJ- (AVOLR)_%RETURN VOLATILE STORAGE_^1_%EIN 0_^1_%JMP* (€€RTURN)_%RETURN TO CALLER_^1_%SPC 2_^1*_$TIME PARAMETERS_^1_%SPC 2_^1XHORTO ADC HORTO_(HOURS_^1XMINTO ADC MINTO_(MINUTES_^1XSECON ADC SECON_(SECONDS_^1XCONTA ADC CONTA_(COUNTS_^1XHORMN ADC HORMIN_'24-HOUR TIME_^1XTOTMN ADC TOTMIN_'ELAPSED MINUTES_^1_%SPC 2_^1*_$STORAGE AND CONSTANTS_^1_%SPC 2_^1PARA_!ADC TIMCPS_'TIMER COUNTS PER SECOND_^1PATSO NUM 0_,PAST QCLK_^1SIXTY €HNUM 60_^1HUNDRD NUM 100_^1RTURN ADC 0_,RETURN ADDRESS_^1_%END_]_^__HPT14 CSY/ A07 P€1_%NAM T14_*DECK-ID A07 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$TAPE MOTION CONTROL REQUEST PROCESSOR_^1_%SPC 2_^1_%ENT T14_^1_%EXT SAVLU_^1_%EXT CKTHRD_^1_%EQU RPMASK($F0)_^1_%EQU ALUABS($BC),VPL(4),VR(3)_^1_%EQU VIN€€D(8)_^1_%SPC 2_^1T14_"TRA Q_^1_%LDA- VIND,I_^1_%SAM INDIRT-*-1_^1_%ENA 5_,DIRECT CALL_^1_%ADD- VR,I_^1_%STA- VR,I_^1_%SET A_L*4.0/78*1893_^1_%STA- VIND,I_'SET INDIRECT FLAG TO LOCKOUT_"*4.0/78*1893_^1*_8INCREMENTING RETURN ADDRESS FOR *4.0/78*1893_^1*_8MASS MEMORY DEVICES IN_)*4.0/78*1893_^1*_8RW (CKTHRD)_4*4.0/78*1893_^1INDIRT RTJ CKTHRD_^1*_81 CARD DELETED_1*4.0/78*1892_^1_€Ϊ%ENT_"CARDRD_^1_%EQU_"CARDRD(*)_^1_%LDA- ($22),Q_^1_%AND =XRPMASK_$STORE REQUEST PRIORITY IN VOLATILE_^1_%STA- VPL,I_^1_%RTJ- (ALUABS)_$ABS LOGICAL UNIT_/*4.0/78*1892_^1_%JMP+ SAVLU_(EXIT TO RW PROCESSOR_^1_%END_]_^__ΪPEFDATA CSY/ C01 P€1_%NAM EFDATA_'DECK-ID C01 MSOS 4.1_-SUMMARY-079_^1*_$PROGRAM TO STACK ENGINEERING FILE DATA AND PRINT MM DIAGNOSTIC_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1************************************************************************_^1*_$THIS PROGRAM I€€S ENTERED FROM EACH DRIVER PROGRAM TO LOG SYSTEM *_^1*_$DEVICE FAILURES. LABEL LOG IS ENTERED WITH THE Q-REGISTER_$*_^1*_$CONTAINING THE ERROR CODE/LOGICAL UNIT WORD AS WILL BE PASSED_!*_^1*_$TO THE ALTERNATE DEVICE HANDLER. THIS PROGRAM WILL ADD TO_$*_^1*_$THIS, HARDWARE STATUS, DATE, AND TIME RELEVANT TO THE FAILURE. *_^1*_$THE DATA WILL THEN BE SAVED INTERNALLY IN ONE OF TWO€€ PLACES,_"*_^1*_$IF A MASS MEMORY DEVICE IN A 10 ENTRY PUSH DOWN TABLE, OTHERWISE*_^1*_$IN A 5 ENTRY PUSH DOWN/POINTER TABLE. MASS MEMORY FAILURES_#*_^1*_$ARE PERMANENTLY SAVED INTERNALLY ON THE PRESUMPTION MASS_'*_^1*_$MEMORY IS NOT RELIABLE. OTHER ERRORS CAUSE THE LOG/STORE_%*_^1*_$ORDINAL TO BE SCHEDULED TO MOVE DATA TO THE MASS MEMORY FILE._!*_^1*_$NEWLY ACCUMULATED MASS MEMO€€RY ERRORS WILL BE MOVED AT THIS TIME.*_^1*_$DATA FORMAT IS THE SAME FOR EACH TABLE AS FOLLOWS...._**_^1*_*WORD 1_"LOGICAL UNIT_D*_^1*_*WORD 2_"DATE (DAY=15-11,MONTH=10-7,YEAR=6-0)_,*_^1*_*WORD 3_"MILITARY TIME_C*_^1*_*WORD 4_"SECONDS(15-8), ERROR CODE(7-0)_2*_^1*_*WORD 5_"HARDWARE STATUS_A*_^1*_$THIS PROGRAM IS RE-ENTRANT. SINCE VOLATILE STORAGE IS USED,_#*_^1*_$CALLERS Q AND I REG€€ISTERS ARE PRESERVED._7*_^1*_$IF THE FAILED DEVICE IS A MASS MEMORY DEVICE, THE MASS MEMORY_!*_^1*_$ERROR DIAGNOATIC WILL BE PRINTED USING STACK DATA._-*_^1************************************************************************_^1_%SPC 2_^1*_$PROGRAM ENTRY POINTS_^1_%ENT LOG_*DRIVER ENTRY TO LOG ERRORS_^1_%ENT BSYEFS_'EFSTOR BUSY FLAG_^1_%ENT CEFDTA_'WAITING TABLE POINTER_^1_%€€ENT EFLOCK_'SPACE ERROR LOCKOUT_^1_%ENT EFCOVL_'WAITING TABLE OVERFLOW INDICATOR_^1_%ENT EFDATA_'WAITING DATA STACK_^1_%ENT MMEF_)MASS MEMORY DATA STACK_^1_%SPC 2_^1*_$PROGRAM EXTERNALS_^1_%EXT EFSTOR_'ENG. FILE DATA STORAGE ORDINAL_^1_%EXT DAYTO_(CURRENT DAY_^1_%EXT MONTO_(CURRENT MONTH_^1_%EXT YERTO_(CURRENT YEAR_^1_%EXT HORMIN_'CURRENT MILITARY TIME_^1_%EXT SECON_(CUR€€RENT SECONDS_^1_%EXT LOG1A_(PHYSTB ADDRESSES_^1_%EXT CONVER_'DECIMAL TO ASCII CONVERSION (IN ADEV)_^1_%EXT HA_+HEX TO ASCII CONVERSION(IN NIPROC)_^1_%SPC 2_^1*_$PROGRAM EQUIVALENCES_^1_%EQU ZERO($22)_#CELL CONTAINING ZERO_^1_%EQU AVOLA($BB)_"VOLATILE STORAGE ACQUISITION ADDRESS_^1_%EQU AVOLR($BA)_"VOLATILE STORAGE RELEASE ADDRESS_^1_%EQU ESTAT2(12)_"PDT HARDWARE STATUS_^1_%€€EQU EREQST(8)_#PDT REQUEST STATUS_^1_%EQU M003F($8)_#$003F MASK_^1_%EQU M03FF($C)_#$03FF MASK_^1_%EQU M0007($5)_#$0007 MASK_^1_%EQU P(4)_)EFSTOR PRIORITY_^1_%EQU FIVE($43)_#CELL CONTAINING NUMBER FIVE_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU LUCMNT($FC)_!ADDRESS OF COMMENT LU_^1_%EQU M00FF($A)_#$00FF MASK_^1_%EQU M4000($31)_"$4000 MASK_^1_%EQU AMONI($F4)_"ADDRES€€S OF MONITOR_^1_%EQU PC(1)_(POINTER TO REQUEST_^1_%EQU EPTR(6)_%PHYSTB POINTER TO REQUEST_^1_%EQU LIBUNT($C2)_!MASS MEMORY LIBRARY UNIT_^1_%EQU ELU(5)_'PHYSTB LOGICAL UNIT WORD_^1_%SPC 2_^1LOG_"NUM 0_,BASIC ENTRY FROM DRIVERS_^1_%IIN 0_^1_%LDA* EFLOCK_'CHECK SPACE ERROR LOCK OUT_^1_%SAZ NOLOCK_'ZERO SAYS NO LOCK OUT_^1_%EIN 0_^1_%JMP* (LOG)_(DO NOT LOG ERRORS FROM SPACE_^1€€NOLOCK RTJ- (AVOLA)_%REQUEST VOLATILE_^1_%NUM 9_,REQUEST 9 WORDS OF VOLATILE STORAGE_^1_%SPC 1_^1************************************************************************_^1*_$ORGANIZATION OF VOLATILE STORAGE----_;*_^1*_'WORD 01 Q-REGISTER_J*_^1*_'WORD 02 A REGISTER_J*_^1*_'WORD 03 I REGISTER_J*_^1*_'WORD 04 SUBROUTINE RETURN_C*_^1*_'WORD 05 FAILED LOGICAL UNIT_A*_^1*_'WORD 0€€6 DAY/MONTH/YEAR_F*_^1*_'WORD 07 MILITARY TIME_G*_^1*_'WORD 08 SECONDS/ERROR CODE_B*_^1*_'WORD 09 HARDWARE STATUS_E*_^1************************************************************************_^1_%SPC 1_^1_%LDA* LOG_*SAVE RETURN IN VOLATILE_^1_%EIN 0_^1_%STA- 3,I_^1_%CLR Q_,MAKE UP DATE WORD_^1_%LDQ+ DAYTO_^1_%QLS 4_^1_%LDA+ MONTO_^1_%EAQ Q_^1_%QLS 7_^1_%LDA+ YERTO_^1_%EAQ€€ Q_^1_%STQ- 5,I_*SAVE DATE IN VOLATILE_^1_%LDA+ HORMIN_'GET MILITARY TIME_^1_%STA- 6,I_,AND SAVE IN VOLATILE_^1_%LDA+ SECON_(GET SECONDS_^1_%ALS 8_,POSITION IN WORD_^1_%STA- 7,I_,AND SAVE IN VOLATILE_^1_%LDA- (ZERO),I_$GET PASSED LOGICAL UNIT/ERROR CODE_^1_%AND- M003F_(EXTRACT ERROR CODE_^1_%EOR- 7,I_*MERGE WITH SECONDS_^1_%STA- 7,I_,AND SAVE IN VOLATILE_^1_%LDA- (ZERO),I_$EXTRAC€€T LOGICAL UNIT_^1_%ARS 6_^1_%AND- M03FF_^1_%TRA Q_,USE AS INDEX_^1_%STA- 4,I_*SAVE IN VOLATILE_^1_%LDQ+ LOG1A,Q_%GET PDT ADDRESS_^1_%LDA- ESTAT2,Q_$GET LAST HARDWARE STATUS_^1_%STA- 8,I_,AND SAVE IN VOLATILE_^1_%LDA- EREQST,Q_$EXTRACT CLASS CODE_^1_%ALS 5_^1_%AND- M0007_^1_%INA -2_^1_%IIN 0_^1_%LDQ- I_,SAVE POINTER TO VOLATILE STORAGE_^1_%STQ* ISAVE_^1_%SAN NMASS_(SKIP IF DEV€€ICE NOT MASS STORAGE_^1_%JMP* MASS_)MASS STORAGE DEVICE FAILED_^1NMASS LDA* CEFDTA_'GET POINTER TO HOLDING STACK_^1_%INA -5_+CHECK IF STACK FULL_^1_%SAN NOOVFL_'SKIP IF VACANCIES EXIST_^1_%RAO* EFCOVL_'FULL - BUMP ERROR INDICATOR_^1_%JMP* MOVED_(EXIT -- ERROR DATA WILL BE LOST_^1NOOVFL LDA* CEFDTA_'COMPUTE INDEX INTO NEXT VACANT SLOT_^1_%MUI- FIVE_^1_%ADD =XEFDATA_^1_%TRA Q_,Q€€ POINTS TO NEW SLOT_^1_%LDA- I_^1_%INA 4_^1_%STA- I_,I POINTS TO NEW DATA IN VOLATILE_^1_%ENA -5_+LOOP INDEX_^1_%STA* TEMP_^1_%RAO* CEFDTA_'BUMP SLOT POINTER_^1LOOPA LDA- (ZERO),I_$MOVE DATA INTO HOLDING STACK_^1_%STA- (ZERO),Q_^1_%RAO* TEMP_^1_%LDA* TEMP_^1_%SAZ MOVED_(SKIP IF MOVE DONE_^1_%RAO- I_,INCREMENT INDICIES_^1_%INQ 1_^1_%JMP* LOOPA_^1MOVED LDA* BSYEFS_'CHECK IF EFS€€TOR BUSY_^1_%SAN NOSCH_(SKIP IF BUSY_^1_%RAO* BSYEFS_'SET EFSTOR BUSY FLAG_^1_%LDA* ISAVE_(PRESERVE I-REG IN THIS PATH FOR REENTRANCY_^1_%STA* SAVEI_^1*_$SCHEDULE EFSTOR ORDINAL_^1_%SYSCHD_"EFSTOR,P_^1_%IIN 0_^1_%LDA* SAVEI_(RESTORE TEMPORARY I-REG_^1_%JMP* EXITA_^1EFLOCK NUM 0_^1SAVEI NUM 0_^1NOSCH LDA* ISAVE_(RESTORE VOLATILE POINTER_^1EXITA STA- I_^1_%LDA- 3,I_*FIX RETURN€€ ADDRESS_^1_%STA- 1,I_^1_%RTJ- (AVOLR)_%RLLEASE VOLATILE_^1_%STA* LOG_^1_%EIN 0_^1_%JMP* (LOG)_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION WILL SAVE DATA FOR MASS MEMORY ERRORS IN THE_%*_^1*_$PROGRAM RATHER THAN CAUSING POSSIBLE MASS STORAGE ERRORS_'*_^1*_$TO FURTHER DEGRADE THE SYSTEM._A*_^1*******************************€€*****************************************_^1_%SPC 2_^1MASS_!ENA 5_^1_%STA- I_^1_%ENQ 44_+MOVE MASS MEMORY DATA DOWN ONE SLOT_^1LOOPM LDA* MMEF,Q_)OLDEST ONE FALLS OFF_^1_%STA* MMEF,B_^1_%INQ -1_^1_%SQM MMOVED_^1_%JMP* LOOPM_^1MMOVED LDA* ISAVE_(MOVE NEW DATA TO TOP OF TABLE_^1_%INA 4_^1_%STA- I_^1_%ENQ 4_^1LOOPQ LDA- (ZERO),B_^1_%STA* MMEF,Q_^1_%INQ -1_^1_%SQM EXIT_^1_%J€€MP* LOOPQ_^1EXIT_!LDA* ISAVE_(RESTORE VOLATILE POINTER_^1_%STA- I_^1_%LDA- 3,I_*MOVE RETURN ADDRESS_^1_%STA- 1,I_^1_%RTJ- (AVOLR)_%RELEASE VOLATILE STORAGE_^1_%STA* LOG_*PLUG IN RETURN_^1_%LDA* MPTR_)CHECK IF MORE ERRORS ARE STACKED THAN_^1_%INA -10_,ROOM IN THE TABLE_^1_%SAZ BURST_(SITUATION IS SOMEWHAT HOPELESS SO LOSE SOME_^1_%RAO* MPTR_)INCREMENT NEW ENTRY POINTER_^1BURST LD€€A* BSYMER_'IS MM ERROR MESSAGE BUSY_^1_%SAZ NBSY_)SKIP IF NOT BUSY_^1_%EIN 0_^1_%JMP* (LOG)_(RETURN TO CALLER_^1NBSY_!RAO* BSYMER_'SET BUSY FLAG_^1_%LDA LOG_*SAVE RETURN TO CALLER_^1_%STA* TLOG_^1_%LDA- I_,SAVE DRIVER I-REGISTER_^1_%STA* LISAVE_^1_%STQ* QSAVE_(SAVE DRIVER Q-REGISTER_^1*_$SCHEDULE ERROR PRINTING SECTION_^1_%SCHDLE MMDIAG,P,0,1_^1_%LDA* LISAVE_'RESTORE I-REGISTER_€€^1_%STA- I_^1_%LDA- ELU,I_(GET LOGICAL UNIT THAT FAILED_^1_%SUB- LIBUNT_'COMPARE TO LIBRARY UNIT_^1_%SAZ LIBARY_'SKIP IF LIBRARY UNIT_^1EXITB LDQ* QSAVE_(RESTORE Q-REGISTER_^1_%JMP* (TLOG)_'RETURN TO CALLER_^1LIBARY LDQ- EPTR,I_%GET REQUEST ADDRESS_^1_%LDA- (ZERO),Q_$GET REQUEST CODE_^1_%AND =N$3E00_%CHECK IF SYSTEM DIRECTORY REQUEST (RC=0)_^1_%SAN MMEXIT_'SKIP IF NOT_^1_%LDA- €€(ZERO),Q_$GET REQUEST CODE_^1_%AND- M4000_(CHECK IF PART 1_^1_%SAN E6_+SKIP IF PART 1 REQUEST_^1*_]_^1_%LDA- PC,Q_)YES,_^1_%STA* RELCOR_^1_%RTJ- (AMONI)_%RELEASE ALLOCATED CORE_^1_%NUM $1800_+RELEASE REQUEST_^1RELCOR NUM 0_/COMPLETION ADDRESS_^1*_]_^1_%ENA 0_,CLEAR COMPLETION ADDRESS_^1_%STA- PC,Q_^1MMEXIT LDA* LISAVE_'RESTORE I-REGISTER_^1_%STA- I_^1_%JMP* EXITB_^1E6_#LDA- PC,€€Q_)GET START OF PARTITION_^1_%STA* RELPAR_^1_%RTJ- (AMONI)_^1_%NUM $5800_(RELEASE PARTITION_^1RELPAR NUM 0_^1_%JMP* MMEXIT_'RETURN TO DRIVER_^1BSYMER NUM 0_^1MPTR_!NUM 0_^1TLOG_!NUM 0_^1QSAVE NUM 0_^1LISAVE NUM 0_^1TEMP_!NUM 0_^1ISAVE NUM 0_^1BSYEFS NUM 0_,EFSTOR BUSY FLAG_^1CEFDTA NUM 0_,SLOT COUNTER FOR EFDATA_^1EFCOVL NUM 0_,EFDATA FILLED INDICATOR_^1EFDATA BZS EF€€DATA(25)_"5 SLOT HOLDING STACK_^1MMEF_!BZS MMEF(50)_$10 SLOT MASS MEMORY STACK_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION RUNS AT A LOW PRIORITY LEVEL TO PRINT MASS_(*_^1*_$MEMORY DIAGNOSTIC MESSAGES. DATA IS TAKEN FROM THE ERROR_%*_^1*_$STACK AND REFORMATTED INTO THE ERROR MESSAGE._2*_^1*_$THE ERROR MESSAGE IS...._G*_^1€€*_-MM ERR XX LU=YY T=HHMM:SS S=ZZZZ_7*_^1*_0WHERE...._K*_^1*_4XX = ERROR CODE (SEE DIAGNOSTIC HANDBOOK)_'*_^1*_4YY = LOGICAL UNIT_?*_^1*_4HH = HOUR_G*_^1*_4MM = MINUTE_E*_^1*_4SS = SECOND_E*_^1*_4ZZZZ = HARDWARE STATUS_:*_^1************************************************************************_^1_%SPC 2_^1MMDIAG IIN 0_^1_%LDA* MPTR_)DECREMENT AND RESTORE POINTER TO MASS_^1_%INA€€ -1_-MEMORY ERROR TABLE. POINTS TO ENTRIES IN_^1_%STA* MPTR_+MMEF NEEDING MESSAGE OUTPUT._^1_%MUI- FIVE_)COMPUTE INDEX_^1_%STA- I_^1_%ENQ 4_^1MLOCAL LDA* MMEF,B_'MOVE 5 WORD ENTRY TO LOCAL BUFFER_^1_%STA* LOCAL,Q_(FOR PROCESSING_^1_%INQ -1_^1_%SQM DLOCAL_^1_%JMP* MLOCAL_^1DLOCAL EIN 0_^1_%LDA* LOCAL_(GET FAILED LOGICAL UNIT_^1_%RTJ* (XCONV)_%CONVERT TO ASCII_^1_%STA* MSG+7_(PU€€T IN MESSAGE_^1_%LDA* LOCAL+4_%GET HARDWARE STATUS_^1_%RTJ+ HA_+CONVERT TO ASCII_^1_%STA* MSG+15_'FORMAT AND PUT IN MESSAGE_^1_%TRQ A_^1_%ENQ $3D_^1_%LLS 8_^1_%STQ* MSG+14_^1_%INA $20_^1_%ALS 8_^1_%LDQ* MSG+15_^1_%LLS 24_^1_%STQ* MSG+15_^1_%STA* MSG+16_^1_%LDA* LOCAL+3_%GET ERROR CODE_^1_%AND- M00FF_^1_%RTJ* (XCONV)_%CONVERT TO ASCII_^1_%STA* MSG+4_(PUT IN MESSAGE_^1_%LDA* LO€€CAL+3_%GET SECONDS_^1_%ALS 8_^1_%AND- M00FF_^1_%RTJ* (XCONV)_%CONVERT TO ASCII_^1_%STA* MSG+12_'PUT IN MESSAGE_^1_%CLR Q_^1_%LDA* LOCAL+2_%GET MILITARY TIME_^1_%DVI* N100_)CONVERT TO HOURS/MINUTES_^1_%STQ* LOCAL+1_%SAVE MINUTES_^1_%RTJ* (XCONV)_%CONVERT HOURS_^1_%ENQ $3D_*FORMAT HOURS/MINUTES AND PUT IN MESSAGE_^1_%LLS 8_^1_%STQ* MSG+9_^1_%STA* MSG+10_^1_%LDA* LOCAL+1_^1_%RTJ* €€(XCONV)_%CONVERT MINUTES_^1_%CLR Q_^1_%LLS 8_^1_%INA $3A_^1_%STA* MSG+11_^1_%ADQ* MSG+10_^1_%STQ* MSG+10_^1*_$PRINT ERROR MESSAGE_^1_%FWRITE LUCMNT,CMMER,MSG,17,A,P,P,I,0,1_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1MSG_"ALF 17, MM ERR XX LU=XX T=HHMM:SS S=XXXX_^1CMMER IIN 0_^1_%LDA MPTR_)POINTER = 0 IF NO MORE MESSAGES_^1_%SAZ DONE_)SKIP IF NO MORE_^1_%JMP* MMDIAG_'GO TO PRO€ CESS NEXT MESSAGE_^1DONE_!STA BSYMER_'ZERO MESSAGE BUSY FLAG_^1_%JMP- (ADISP)_%EXIT_^1XCONV ADC CONVER_^1N100_!NUM 100_^1LOCAL BZS LOCAL(5)_^1_%END_]_^__ PALAQ CSY/ C03 P€1_%NAM ALAQ_)DECK-ID C03 MSOS 4.1_-SUMMARY-079_^1*_$A/Q CHANNEL USAGE ALLOCATOR_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1************************************************************************_^1* EACH DRIVER RESPONSIBLE FOR A DEVICE REQUIRING A/Q€€ ALLOCATION MUST_^1*_$REQUEST CONTROL OF THE A/Q CHANNEL AND FOLLOWING COMPLETION OF_^1*_$ONE TRANSFER, RELEASE CONTROL._^1*_]_^1* A SAMPLE OPERATION IS AS FOLLOWS...._^1*_%DRIVER REQUEST 1706 ACCESS...RTJ+ RQAQ_^1*_$DRIVER COMPLETES OPERATION...RTJ+ RLAQ_^1*_"RETURN IS MADE TO THE DRIVER FOR CONTINUATION_^1*_]_^1* IF ACESS IS REQUESTED AND THE A/Q CHANNEL IS BUSY, THE RETURN A€€DDRESS_^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* ON ENTRY TO RELEASE THE A/Q CHANNEL THE I-REGISTER IS RETURNED IN Q._^1************************************************************************_^1_%SPC 2_^€€1* PROGRAM ENTRY POINTS_^1_%ENT RQAQ_)ACESS ENTRY FOR A/Q CHANNEL_%**MSOS 4.1**_^1_%ENT RLAQ_)RELEASE ENTRY FOR A/Q CHANNEL_#**MSOS 4.1**_^1_%SPC 2_^1*_$PROGRAM EXTERNALS_^1_%EXT AQSTCK_'REQUEST STACK_4**MSOS 4.1**_^1_%EXT AQSSIZ_'REQUEST STACK SIZE TABLE_)**MSOS 4.1**_^1_%SPC 2_^1* PROGRAM EQUIVALENCES_^1_%EQU ZERO($22)_#ZERO ADDRESS_^1_%EQU PRIOR($EF)_"SYSTEM PRIORITY L€€EVEL_^1_%EQU ADISP($EA)_"DISPATCHER_^1_%EQU AMONI($F4)_"MONITOR REQUEST ENTRY_^1_%SPC 2_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION IS THE A/Q CHANNEL REQUEST ENTRY. IF THE A/Q CHANNEL_^1*_$IS NOT ACTIVE, RETURN IS MADE IMMEDIATELY TO THE DRIVER. IF THE_^1*_$A/Q CHANNEL IS BUSY, THE DRIVERS I-REGISTER, PRIORITY, RETURN_^€€1*_$ARE SAVED IN THE WAITING STACK. IF THE QUANTITY OF ENTRIESEXCEEDS_^1*_$THE STACK SIZE, THERE IS NO ALTERNATIVE BUT TO STOP THE SYSTEM._^1************************************************************************_^1_%SPC 2_^1RQAQ_!NUM 0_,ACESS ENTRY_6**MSOS 4.1**_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%LDA* BUSYAQ_'CHECK BUSY STATUS_0**MSOS 4.1**_^1_%SAN THREAD_'SKIP IF BUSY_^1_%RAO€€* BUSYAQ_'SET BUSY FLAG_4**MSOS 4.1**_^1RTNGOT LDQ- I_,PUT I-REG. INTO Q-REG. FOR RETURN_^1_%STQ* GOTAQ_(SAVE PDT ADDRESS OF CURRENT USER_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%JMP* (RQAQ)_'RETURN TO CALLER_1**MSOS 4.1**_^1THREAD LDA- I_,CREATE TEMPORARY HOLDING AREA FOR STACK DATA_^1_%LDQ* GOTAQ_(SEE IF THIS DRIVER ALREADY HAS AQ_^1_%EAQ Q_^1_%SQN NOGOT_(SKIP IF NOT CURRENT USER_^1_%€€JMP* RTNGOT_'RETURN TO DRIVER - ALREADY HAS IT_^1NOGOT STA* TEMPII_'SAVE DRIVER I-REG._^1_%LDQ* STKADD_'PICK UP POINTER TO STACK ADDRESS **MSOS 4.1**_^1_%LDA* AQIN_)PICK UP POINTER FOR NEXT IN_%**MSOS 4.1**_^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* RQAQ_)ASSEMBLE STACK ENTRYR€€ETURN ADDRESS**MSOS 4.1**_^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* AQIN_)RESET NEXT IN POINTER_,**MSOS 4.1**_^1_%LDQ* (XSTKSZ)_$OBTAIN STACK SIZE_^1_%TCQ Q_^1_%INA 3_^1_%AAQ Q_^1_%SQN NOOVER_^1_%TRQ A_^1NOOVER STA* AQIN_K**MSOS 4.1**_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%€€JMP- (ADISP)_%EXIT TO DISPATCHER_^1TEMPII NUM 0_^1BUSYAQ NUM 0_^1AQIN_!NUM 0_^1AQOUT NUM 0_N**MSOS 4.1**_^1ITAQ_!NUM 0_N**MSOS 4.1**_^1TIAQ_!NUM 0_N**MSOS 4.1**_^1GOTAQ NUM 0_^1_%EJT_]_^1_%EJT_]_^1*_$THIS SECTION IS ENTERED BY THE DRIVER TO RELEASE THE A/Q CHANNEL*_^1*_$IF NO OTHER DRIVER IS WAITING, RETURN IS MADE IMMEDIATELY TO_"*_^1*_$DRIVER. OTHERWISE, THE STACK ENTRY€€ IS MOVED INTO THIS PROGRAM *_^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_^1RLAQ_!NUM 0_,RELEASE ENTRY_4**MSOS 4.1**_^€€1_%IIN 0_,INHIBIT INTERRUPTS_^1_%LDA- I_,SAVE DRIVER I-REG._^1_%LDQ* GOTAQ_(SEE IF RELEASING DRIVER REALLY HAS AQ_^1_%EAQ Q_^1_%SQZ GOTNO_(SKIP IF SAME_5**MSOS 4.1**_^1_%TRA Q_^1_%EIN 0_^1_%JMP* (RLAQ)_'IGNORE RELEASE - NOT ACQUIRED_^1GOTNO STA* ITAQ_K**MSOS 4.1**_^1_%LDQ* AQIN_)CHECK IF POINTERS =_.**MSOS 4.1**_^1_%LDA* AQOUT_J**MSOS 4.1**_^1_%EAQ Q_^1_%SQN DOIT_)SKIP IF P€€TRS NOT EQUAL_^1_%LDQ* STKADD_'PTRS= IS STACK FULL OR EMPTY_$**MSOS 4.1**_^1_%AAQ Q_^1_%LDQ- (ZERO),Q_^1_%SQN DOIT_)SKIP IF STACK FULL_^1_%ENA 0_,STACK CLEARED, ZERO BUSY FLAG_^1_%STA* BUSYAQ_'AND RETURN_7**MSOS 4.1**_^1_%STA* GOTAQ_(CLEAR CURRENT USER PDT ADDRESS_^1_%LDQ* ITAQ_)RESTORE DRIVER I-REG._,**MSOS 4.1**_^1_%EIN 0_^1_%JMP* (RLAQ)_'RETURN TO DRIVER_1**MSOS 4.1**_^1DOIT€€_!LDQ* STKADD_'MOVE STACK ENTRY TO TEMP_)**MSOS 4.1**_^1_%AAQ Q_^1_%LDA- (ZERO),Q_^1_%STA* SKD11_(SET LOCATION TO SCHEDULE_^1_%CLR A_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%LDA- (ZERO),Q_^1_%STA* TIAQ_)SET DRIVER I-REG._0**MSOS 4.1**_^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€€* AQOUT_(UPDATE STACK PTR_1**MSOS 4.1**_^1_%TCQ Q_^1_%LDQ* (XSTKSZ)_$PICK UP STACK SIZE_/**MSOS 4.1**_^1_%INA 3_^1_%AAQ Q_^1_%SQN OVERNO_^1_%TRQ A_^1OVERNO STA* AQOUT_(UPDATE STACK POINTER_-**MSOS 4.1**_^1_%LDA* RLAQ_)PICK UP RETURN ADDRESS_+**MSOS 4.1**_^1_%JMP* SKDL_)GO TO SCHEDULER ROUTINE_***MSOS 4.1**_^1_%EJT_]_^1***********************************************************€€*************_^1*_$TABLE OF ADDRESSES AND CONSTANTS_?*_^1************************************************************************_^1_%SPC 2_^1STKADD ADC AQSTCK_'DATA STACK ADDRESSES_-**MSOS 4.1**_^1SKDMSK NUM $5200_^1XSTKSZ ADC AQSSIZ_I**MSOS 4.1**_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION SCHEDULES THE REQUESTING AND€€ RELEASING DRIVERS_#*_^1*_$AT THEIR PRIORITIES._K*_^1************************************************************************_^1_%SPC 2_^1SKDL_!STA* REL1_)SAVE DRIVER RETURN_/**MSOS 4.1**_^1_%LDA- PRIOR_(PICK UP CURRENT SYSTEM PRIORITY_^1_%ADD* SKDMSK_'SET UP TO SCHEDULE RELEASING USER_^1_%STA* REL1A_^1_%LDQ* ITAQ_K**MSOS 4.1**_^1_%STQ* GOTAQ_(SAVE PDT ADDRESS OF NEW USER_^1_%RTJ-€Τ (AMONI)_%SCHEDULE RELEASING USER_^1REL1A NUM 0_^1REL1_!NUM 0_^1_%LDQ* ITAQ_K**MSOS 4.1**_^1_%RTJ- (AMONI)_%SCHEDULE NEXT USER_^1SKD01 NUM 0_^1SKD11 NUM 0_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER_^1_%END_]_^__ΤPAL1706 CSY/ C04 P€1_%NAM AL1706_'DECK-ID C04 MSOS 4.1_-SUMMARY-079_^1*_$1706 BUFFERED DATA CHANNEL USAGE ALLOCATOR_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1************************************************************************_^1* EACH DRIVER RESPONSIBLE FOR A DEVI€€CE ON THE 1706 MUST REQUEST 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 ADDRES€€S,_^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 RETURNED 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 STKSIZ_'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_%E€€QU ZERO($22)_#ZERO ADDRESS_^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_%RT€€J* 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 EQUA€€L_^1_%LDQ* STKADD,I_$PTRS = 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 SCHEDULE_^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_%SP€€C 2_^1STKADD ADC STACKA_'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 SECTION 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_%STQ* (XONPDT)_^1_%€€RTJ- (AMONI)_%SCHEDULE RELEASING USER_^1REL1A NUM 0_^1REL1_!NUM 0_^1_%LDQ* (XTEMPI)_^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 SYSTEM PRIORITY_^1_%ADD* SKDMSK_'SET UP€€ TO SCHEDULE RELEASING USER_^1_%STA* REL2A_^1_%ENQ 1_^1_%LDQ* (XITEMP),Q_^1_%STQ* (XONPDT),Q_^1_%RTJ- (AMONI)_%SCHEDULE RELEASING USER_^1REL2A NUM 0_^1REL2_!NUM 0_^1_%ENQ 1_^1_%LDQ* (XTEMPI),Q_"PASS I-REG._^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 SCHEDUL€€ER 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_%STQ* (XONPDT),Q_^1_%RTJ- (AMONI)_%SCHEDULE RELEASING USER_^1REL3A NUM 0_^1REL3_!NUM 0_^1_%ENQ 2_^1_%LDQ* (XTEMPI),Q_"PASS I-REG._^1_%RTJ- (AMONI)_%SCHEDULE NEXT USER_^1SKD03 NUM 0_^1SK€>D13 NUM 0_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER_^1_%END_]_^__>PFILMGR CSY/ F01 P€1_%NAM FILMGR_'DECK-ID F01 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*1 7 0 0_!F I L E_!M A N A G E R_!V E R S I O N_!1 . 0_^1*_]_^1*_]_^1_%EQU RPLSR(10) REQUEST PRIORITY LEVEL FOR SPACE REQUESTS 68*1512_^1*_]_^1*_*CONT€€ENTS_^1*_-1. REQUEST ENTRIES_^1*_-2. REQUEST SUPERVISOR AND SUBROUTINES_^1*_-3. COMMON SUBROUTINES_^1*_1A. ABSPAR - ABSOLUTIZE PARAMETER_^1*_1B. CKCFIS - CHECK IF FIS IS IN CORE_^1*_1C. CKPROT - CHECK IF REQUEST IS PROTECTED_^1*_1D. CKUADR - CHECK UNPROTECTED ADDRESS LEGALITY_^1*_1E. GETSPC - GET ALLOCATABLE SPACE_^1*_1F. MMREAD - MASS MEMORY READ_^1*_1G. MMWRIT - MAS€€S MEMORY WRITE_^1_%EJT_]_^1*_*ENTRY POINTS_^1*_1REQUEST ENTRIES (INCLUDING FMPFLG PRESET AND FMRERR)_^1_%ENT DEFFIL_'REQUEST ENTRY - DEFINE FILE_^1_%ENT RELFIL_'REQUEST ENTRY - RELEASE FILE_^1_%ENT DEFIDX_'REQUEST ENTRY - DEFINE FILE INDEXED_^1_%ENT LOKFIL_'REQUEST ENTRY - LOCK FILE_^1_%ENT UNLFIL_'REQUEST ENTRY - UNLOCK FILE_^1_%ENT STOSEQ_'REQUEST ENTRY - STORE SEQUENTIAL_^€€1_%ENT STODIR_'REQUEST ENTRY - STORE DIRECT_^1_%ENT STOIDX_'REQUEST ENTRY - STORE INDEXED_^1_%ENT RTVSEQ_'REQUEST ENTRY - RETRIEVE SEQUENTIAL_^1_%ENT RTVDIR_'REQUEST ENTRY - RETRIEVE DIRECT_^1_%ENT RTVIDX_'REQUEST ENTRY - RETRIEVE INDEXED_^1_%ENT RTVIDO_'REQUEST ENTRY - RETRIEVE INDEXED-ORDERED_^1_%ENT FMPFLG_'FILE MANAGER PROTECT FILE FLAG VIA PRESET_^1_%ENT FMRERR_'FILE M€€ANAGER REQUEST ERROR ENTRY_^1_%SPC 1_^1*_1COMMON SUBROUTINES_^1_%ENT ABSPAR_'ABSOLUTIZE PARAMETER_^1_%ENT CKCFIS_'CHECK IF FIS IS IN CORE_^1_%ENT CKPROT_'CHECK IF REQUEST IS PROTECTED_^1_%ENT CKUADR_'CHECK UNPROTECTED ADDRESS LEGALITY_^1_%ENT GETSPC_'GET ALLOCATABLE SPACE_^1_%ENT MMREAD_'MASS MEMORY READ_^1_%ENT MMWRIT_'MASS MEMORY WRITE_^1_%SPC 1_^1*_1RELEASE ALLOCATABLE €€CORE SPACE (RACSPC) PARAMETERS_^1_%ENT FILREQ_'EXECUTE NEXT FILE REQUEST_^1_%ENT ACTREQ_'ACTIVE REQUEST FLAG_^1_%ENT ARQPRO_'ADDRESS OF CURRENT (OR LAST) REQUEST PROCESSOR_^1_%ENT RPTABL_'REQUEST PROCESSOR TABLE_^1_%ENT FILNBR_'FILE NUMBER OF CURRENT FILE REQUEST_^1_%SPC 1_^1*_1FILE MANAGER GLOBAL PARAMETERS_^1_%ENT FSTLOC_'FIS STARTING THREAD LOC (ZERO, IF NO CORE FIS)_^1_%€€ENT FIDLOC_'FIS DIRECTORY LOCATION (ZERO, IF NOT IN CORE)_^1_%ENT RPTINT_'REQUEST PROCESSOR TIMEOUT INTERVAL_^1_%ENT FDTINT_'FILE/DIRECTORY TIMEOUT INTERVAL_^1_%ENT NWFISD_'NUMBER OF WORDS IN FIS DIRECTORY (N*96)_^1_%ENT NWFISB_'NUMBER OF WORDS IN A FIS BLOCK (N*96)_^1_%EJT_]_^1*_*EXTERNALS_^1*_1STARTING SECTORS OF REQUEST PROCESSORS_^1_%EXT FMRP01_'STARTING SECTOR OF DEFFIL_€€^1_%EXT FMRP02_'STARTING SECTOR OF RELFIL_^1_%EXT FMRP03_'STARTING SECTOR OF DEFIDX_^1_%EXT FMRP04_'STARTING SECTOR OF LOKFIL_^1_%EXT FMRP05_'STARTING SECTOR OF UNLFIL_^1_%EXT FMRP06_'STARTING SECTOR OF STOSEQ_^1_%EXT FMRP07_'STARTING SECTOR OF STODIR_^1_%EXT FMRP08_'STARTING SECTOR OF STOIDX_^1_%EXT FMRP09_'STARTING SECTOR OF RTVSEQ_^1_%EXT FMRP10_'STARTING SECTOR OF RTVD€€IR_^1_%EXT FMRP11_'STARTING SECTOR OF RTVIDX_^1_%EXT FMRP12_'STARTING SECTOR OF RTVIDO_^1_%EXT FMREND_'ENDING SECTOR OF REQUEST PROCESSORS_^1_%SPC 1_^1*_1EXTERNALLY CALLED PROGRAMS_^1*_81 CARD DELETED_674*1655_^1_%EXT RACSPC_'RELEASE ALLOCATABLE CORE SPACE_^1*_81 CARD DELETED_674*1655_^1_%SPC 1_^1*_1J02 PARAMETERS LOCATIONS FOR PROTECT PROC. IN TRVEC_^1_%EXT LOCF_)LOCATION O€€F F (J02 ENTRY)_^1_%EXT LPTRS_(LOCATION OF PTRS (PARAMETER ADDRESS)_^1_%SPC 1_^1*_1PARAMETERS TO PREVENT SWAPS ON UNPROTECTED FILE REGS._^1_%EXT UNPIO_(UNPROTECTED I/O IN PROGRESS FLAG (IN TRVEC)_^1_%EXT SWAPCK_'DECREMENT UNPIO, IF =0, CHECK SWAP (IN DRCORE)_^1_%SPC 1_^1*_1FILE MANAGER SYSDAT PARAMETERS_^1_%EXT FISLU_(LOGICAL UNIT OF FIS DIRECTORY AND FIS BLOCKS_^1_%EXT MAXM€€MA_'MAXIMUM NO. OF MASS MEMORY ATTEMPTS ON ERROR_^1_%EXT RPTPER_'REQUEST PROCESSOR TIMEOUT PERIOD_^1_%EXT FDTPER_'FILE/DIRECTORY TIMEOUT PERIOD_^1_%EXT FIDSEC_'FIS FIRECTORY SECTOR ADDRESS_^1_%EXT TMRTYP_'TIMER VERSION FLAG_!0 = NO TIMER_"74*1655_^1_%SPC 1_^1*_*FILE MANAGER PARAMETER IN SEARCH FIS (SRHFIS)_^1_%EXT FIBSIZ_'FIS BLOCK SIZE IN WORDS (N*96)_^1_'SPC 1_^1*_1FILE MA€€NAGER PARAMETER IN RSPCV4_+74*1655_^1_%EXT RSAFLG_'RACSPC ACTIVE FLAG_274*1655_^1*_1PARTITIONED CORE TABLE_2**MSOS 4.1**_^1_%EXT PARTBL_'FWA OF PARTITIONED CORE_***MSOS 4.1**_^1_%EJT_]_^1*_*EQUIVALENCES_^1*_1COMMUNICATION REGION CONSTANTS_^1_%EQU ZERO(2)_%ZERO CONSTANT_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ZROMSK($13)_!ZERO MASK TABLE_^1_%EQU ONEBIT($23)_!ONE BIT TABLE_^1€€_%EQU ZROBIT($33)_!ZERO BIT TABLE_^1_%EQU AVOLR($BA)_"ADDRESS OF VOLATILE RELEASE_^1_%EQU AVOLA($BB)_"ADDRESS OF VOLATILE ASSIGN_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU PL($EF)_%PRIORITY LEVEL_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR REQUEST ENTRY_^1_%SPC 1_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEAD€€ER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1_%SPC 1_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SEC€€FIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH COD€€E)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU K€€IBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGIC€€AL UNITS_^1*_]_^1*_1KIS DIRECTORY HEADER_^1_%EQU KIDCLK(0)_#KIS DIRECTORY CLOCK_^1_%EQU NUMKIB(1)_#NUMBER OF KIS BLOCKS_^1_%EQU KIBFSA(2)_#FIRST SECTOR ADDRESS OF KIS BLOCKS_^1_%EQU KIBLSA(3)_#LAST SECTOR ADDRESS OF KIS BLOCKS_^1_%EJT_]_^1*_]_^1*_1FIS DIRECTORY AND BLOCK SIZES_^1_%EQU FIDSIZ(1*WRDSEC) FIS DIRECTORY SIZE IN WORDS_^1_%SPC 1_^1*_1REQUEST BUFFER INDEXES_^1_%EQU€€ RBATHR(0)_#REQUEST BUFFER ADDRESS THREAD_^1_%EQU RTNADR(1)_#RETURN ADDRESS OF CALLER_^1_%EQU QREG(2)_%Q REGISTER_^1_%EQU IREG(3)_%I REGISTER_^1_%EQU APL(4)_'ADDRESS OF PARAMETER LIST_^1_%EQU RPLIDX(5)_#REQUEST PRIORITY LEVEL AND ENTRY INDEX_^1_%SPC 1_^1*_1REQUEST PROCESSOR TABLE INDEXES_^1_%EQU RPSSEC(1)_#REQUEST PROCESSOR STARTING SECTOR_^1_%EQU RPSADR(2)_#REQUEST PROCES€€SOR STARTING CORE ADDRESS_^1_%EQU RPLGTH(2)_#REQUEST PROCESSOR LENGTH_^1_%EQU RPTREM(3)_#REQUEST PROCESSOR TIME REMAINING_^1_%SPC 1_^1*_1VOLATILE ENTRY INDEXES_^1_%EQU VQ(0)_(Q-REGISTER_^1_%EQU VA(1)_(A-REGISTER_^1_%EQU VI(2)_(I-REGISTER_^1_%EQU VARE(3)_%ADDRESS OF REQUEST ENTRY_^1_%EQU VAPL(4)_%ADDRESS OF PARAMETER LIST_^1_%EQU NVWRDS(5)_#NUMBER OF VOLATILE WORDS USED_^1_€€%SPC 1_^1*_1MISCELLANEOUS_^1_%EQU HUPLVL(2)_#HIGHEST UNPROTECTED LEVEL_^1_%EQU INS($A00)_#ENA INSTRUCTION FOR PARAM. LENGTH **MSOS 4.1**_^1_%EQU D($4000)_$D-BIT FOR MONITOR REQUESTS_'**MSOS 4.1**_^1_%EJT_]_^1*_]_^1*_1NUMBER OF PARAMETERS IN REQUESTS_^1_%EQU NPDF(5)_%NUMBER OF PARAMETERS IN DEFINE FILE_^1_%EQU NPRF(3)_%NUMBER OF PARAMETERS IN RELEASE FILE_^1_%EQU NPDI(6)_%NUM€€BER OF PARAMETERS IN DEFINE FILE INDEXED_^1_%EQU NPLF(4)_%NUMBER OF PARAMETERS IN LOCK FILE_^1_%EQU NPUF(4)_%NUMBER OF PARAMETERS IN UNLOCK FILE_^1_%EQU NPSS(6)_%NUMBER OF PARAMETERS IN STORE SEQUENTIAL_^1_%EQU NPSD(6)_%NUMBER OF PARAMETERS IN STORE DIRECT_^1_%EQU NPSI(7)_%NUMBER OF PARAMETERS IN STORE INDEXED_^1_%EQU NPRS(7)_%NUMBER OF PARAMETERS IN RETRIEVE SEQUENTIAL_^1_%E€€QU NPRD(7)_%NUMBER OF PARAMETERS IN RETRIEVE DIRECT_^1_%EQU NPRI(8)_%NUMBER OF PARAMETERS IN RETRIEVE INDEXED_^1_%EQU NPRO(8)_%NUMBER OF PARAMETERS IN RETRIEVE INDEXED-ORDER_^1*_]_^1_%EQU NUMRPE(12)_"NUMBER OF REQUEST PROCESSOR ENTRIES_^1_%EJT_]_^1*_*FILE MANAGER REQUEST ENTRIES_^1_%SPC 2_^1REQENT EQU REQENT(*)_^1*_]_^1*_]_^1DEFFIL 000 000_'1. DEFINE FILE_^1_%IIN 0_,*** NOT€€E- THIS MUST BE THE FIRST ENTRY ***_^1_%ADC INS+NPDF-1_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1RELFIL 000 000_'2. RELEASE FILE_^1_%IIN 0_^1_%ADC INS+NPRF-1_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1DEFIDX 000 000_'3. DEFINE FILE INDEXED_^1_%IIN 0_^1_%ADC INS+NPDI-1_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1LOKFIL 000 000_'4. LOCK FILE_^1_%IIN 0_^1_%ADC INS+NPLF-1_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1UNLFIL 000 €€000_'5. UNLOCK FILE_^1_%IIN 0_^1_%ADC INS+NPUF-1_^1_%RTJ* REQSUP_^1_%EJT_]_^1STOSEQ 000 000_'6. STORE SEQUENTIAL_^1_%IIN 0_^1_%ADC INS+NPSS-1_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1STODIR 000 000_'7. STORE DIRECT_^1_%IIN 0_^1_%ADC INS+NPSD-1_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1STOIDX 000 000_'8. STORE INDEXED_^1_%IIN 0_^1_%ADC INS+NPSI-1_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1RTVSEQ 000 000_'9€€. RETRIEVE SEQUENTIAL_^1_%IIN 0_,*** NOTE- THIS MUST BE THE THIRD FROM ***_^1_%ADC INS+NPRS-1_"***_%THE LAST REQUEST ENTRY_%***_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1RTVDIR 000 000_%10. RETRIEVE DIRECT_^1_%IIN 0_,*** NOTE- THIS MUST BE THE SECOND FROM ***_^1_%ADC INS+NPRD-1_"***_%THE LAST REQUEST ENTRY_%***_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1RTVIDX 000 000_%11. RETRIEVE INDEXED_^1_%IIN €€ 0_,*** NOTE- THIS MUST BE THE NEXT (FIRST)***_^1_%ADC INS+NPRI-1_"***_%FROM THE LAST REQUEST ENTRY ***_^1_%RTJ* REQSUP_^1*_]_^1*_]_^1RTVIDO 000 000_%12. RETRIEVE INDEXED-ORDERED_^1_%IIN 0_,*** NOTE- THIS MUST BE THE LAST_'***_^1_%ADC INS+NPRO-1_"***_%REQUEST ENTRY_/***_^1_%RTJ* REQSUP_^1_%EJT_]_^1*_*FILE MANAGER REQUEST SUPERVISOR_^1*_]_^1*_1SAVE REGISTERS AND GET REQUEST BUF€€FER ADDRESS INTO Q_^1*_1A = INDEX TO REQUEST INDICATOR ADR IN PARAMETER LIST_^1REQSUP 000 000_"INTERRUPTS HAVE BEEN INHIBITED TO PREVENT MULTI-ENTRY_^1_%RTJ- (AVOLA)_%SAVE Q, A, I REGISTERS IN VOLATILE_^1_%ADC NVWRDS_^1*_]_^1_%LDQ- PL_+CHECK IF CALLER IS UNPROTECTED_^1_%INQ -HUPLVL-1_^1_%SQP SAVADR_^1_%RAO UNPIO_(YES, SET I/O IN PROGRESS FLAG TO PREVENT SWAP_^1*_]_^1SAVADR LDQ€€* REQSUP_'SAVE ADDRESS OF REQUEST ENTRY IN VOLATILE_^1_%STQ- VARE,I_^1_%INQ -4_^1_%EIN 0_^1_%LDQ- (ZERO),Q_$SAVE ADDRESS OF PARAMETER LIST IN VOLATILE_^1_%STQ- VAPL,I_^1_%AAQ Q_,Q = ADDRESS OF REQUEST INDICATOR_^1_%RTJ* (AABSPR)_$ABSOLUTIZE THE REQUEST INDICATOR ADDRESS_^1_%RTJ* (ACUADR)_$CHECK IF ILLEGAL UNPROTECTED ADDRESS_^1_%INQ -1_+Q = ADDRESS OF REQUEST BUFFER ADDRESS_^1_€€%RTJ* (AABSPR)_$ABSOLUTIZE THE REQUEST BUFFER ADDRESS_^1_%RTJ* (ACUADR)_$CHECK IF ILLEGAL UNPROTECTED ADDRESS_^1_%EJT_]_^1*_*SAVE THE REQUEST PARAMETERS_^1_%LLS 16_+OK, Q = REQUEST BUFFER ADDRESS_^1_%INA 2_^1_%STA- RTNADR,Q_$SAVE RETURN ADDRESS_^1_%TRQ A_S68*1512_^1_%INA 11_R68*1512_^1_%RTJ* (ACUADR)_$CHECK LAST REQBUF WORD_068*1512_^1_%LDA- (ZERO),I_^1_%STA- QREG,Q_'SAVE Q REG€€ISTER_^1_%LDA- VI,I_^1_%STA- IREG,Q_'SAVE I REGISTER_^1_%LDA- VAPL,I_^1_%STA- APL,Q_(SAVE ADDRESS OF PARAMETER LIST_^1_%LDA- VARE,I_^1_%SUB =XREQENT_$COMPUTE THE REQUEST ENTRY INDEX_^1_%ALS 2_,SAVE IN BITS 4 THRU 15 OF RPLIDX_^1_%EOR- PL_^1_%STA- RPLIDX,Q_$SAVE PRIORITY LEVEL IN BITS 0 THRU 3 OF RPLIDX_^1_%STQ- (ZERO),I_$Q = REQUEST BUFFER ADDRESS_^1_%IIN 0_^1_%RTJ- (AVOLR)_%RET€€URN VOLATILE SPACE_^1_%SPC 2_^1*_*CHECK IF REQUEST SHOULD BE QUEUED OR PROCESSED_^1_%SPC 2_^1CHKREQ LDA* ACTREQ_'IS THERE AN ACTIVE REQUEST IN PROGRESS_^1_%SAN QUEUE_*YES, PLACE REQUEST ON WAITING REQUEST QUEUE_^1*_]_^1*_*FILE MANAGER NOT BUSY. CHECK IF THE REQUEST IS A RETRIEVE,_^1*_+USING A DIFFERENT FILE COMBINATION ON A LOCKED FILE._^1_%ENA -1_+TEMPORIARLY SET ACTIVE REQUE€€ST FLAG_^1_%STQ* RQBADR_'SAVE REQ BUF ADDRESS FOR CHECK AT QUE8064*1408_^1_%EIN 0_^1_%STA* ACTREQ_^1*_8CHECK IF THE REQUEST IS A RETRIEVE/LOCK_^1*_8REQUEST, ITS FIS IS IN CORE, ITS FILE IS_^1_%RTJ RTVCHK_'LOCKED, AND THE COMBINATIONS ARE DIFFERENT._^1_%SAN QUEUE_*YES, QUEUE THE REQUEST UNTIL FILE UNLOCKED_^1*_]_^1_%STQ* ACTREQ_'SET FILE MANAGER ACTIVE_^1_%JMP* CHKRPC_'PROCESS TH€€E REQUEST_^1_%SPC 1_S64*1408_^1AABSPR ADC ABSPAR_'ADDRESS OF ABSOLUTIZE PARAMETER_^1ACUADR ADC CKUADR_'ADDRESS OF CHECK IF ILLEGAL UNPROTECTED ADR_^1_%EJT_]_^1*_*QUEUE THE REQUEST BY LEVEL (FIRST-IN, FIRST-OUT WITHIN IT)_^1_%SPC 1_^1QUEUE STQ- I_,Q = I = REQUEST BUFFER ADDRESS_^1QUE10 LDQ =XWATREQ_$SEARCH FOR INSERTION POINT_^1_%STQ* RUTFLG_'RESET THE REQUEST UNTHREADED FLAG€€_^1*_]_^1QUE20 STQ- (I)_*SAVE LAST POINTER_^1_%EIN 0_^1_%LDQ- (ZERO),Q_$GET NEXT THREADED REQUEST BUFFER_^1_%SQZ QUE30_(END OF QUEUE, THREAD REQUEST THERE_^1*_]_^1_%ENA $F_+IS REQUEST,S PRIORITY GREATER THAN THE_^1_%AND- RPLIDX,Q_%PRIORITY OF THE NEXT WAITING REQUEST._^1_%SUB- PL_^1_%SAM QUE30_(YES, THREAD IT_^1*_]_^1_%IIN 0_,CHECK IF INTERRUPTED BY A REQUEST_^1_%LDA* RUTFLG_€€'BEING UNTHREADED._^1_%SAZ QUE50_*YES, RESTART SEARCH (REQUEST MAY BE GONE)_^1_%JMP* QUE20_*NO, CONTINUE SEARCH_^1*_]_^1QUE30 TRQ A_,INSERTION POINT FOUND_^1_%LDQ- (I)_*Q = LAST POINTER_^1_%STA- (I)_*STORE LAST POINTER INTO REQUEST BUFFER_^1*_]_^1QUE40 IIN 0_,CHECK IF INTERRUPTED BY A REQUEST_^1_%LDA* RUTFLG_'BEING UNTHREADED._^1_%SAN QUE60_^1QUE50 JMP* QUE10_(YES, RESTART €€SEARCH (REQUEST BEING CHECKED OR_^1*_8LAST REQUEST MAY BE UNTHREADED AND DESTROYED)_^1*_]_^1QUE60 LDA- (ZERO),Q_$CHECK IF (LAST POINTER) EQUALS NEXT POINTER_^1_%EOR- (I)_,(MAY HAVE BEEN INTERRUPTED BY HIGHER QUEUE)_^1_%SAZ QUE70_^1_%EIN 0_^1_%LDQ- (ZERO),Q_$NO, CHECK NEXT REQBUF UNTIL (LSTPTR) = NXTPTR_^1_%JMP* QUE40_^1*_]_^1QUE70 LDA- I_,STORE POINTER TO REQUEST BUFFER INTO (L€€STPTR)_^1_%STA- (ZERO),Q_'(REQUEST NOW COMPLETELY THREADED)_^1*_]_^1_%LDA* ACTREQ_'CHECK IF NO REQUEST IS ACTIVE (A REQUEST_^1_%SAN QUE80_*MAY HAVE BEEN UNTHREADED)._^1_%ENA -1_+YES, TEMPORARILY SET ACTIVE REQUEST FLAG_^1_%STA* ACTREQ_^1_%JMP* QUE95_(FAKE A COMPLETE REQUEST_/64*1408_^1_%EJT_V64*1408_^1QUE80 EOR- ZROBIT_'CHECK IF ACTREQ SET TO -1_-66*1408_^1_%SAN QUE85_(NO_D66*1€€408_^1*_] 64*1408_^1_%LDA- I_,CHECK IF THIS REQUEST IS THE ONE_%64*1408_^1_%EOR* RQBADR_'ASSOCIATED WITH -1 SETTING OF ACTREQ_!64*1408_^1_%SAZ QUE90_O64*1408_^1QUE85 JMP- (ADISP)_M64*1408_^1*_] 64*1408_^1QUE90 STA* RQBADR_'THIS REQUEST ASSOCIATED WITH ACTREQ =-164*1408_^1QUE95 EIN 0_,CLEAR RQBADR FAKE A COMPLETED REQUEST 64*1408_^1_%JMP* FILREQ_N64*1408_^1_%EJT_V64*1408_^1*€€_*F I L E_!M A N A G E R_!G L O B A L_!P A R A M E T E R S_^1_%SPC 2_^1*_1REQUEST PROCESSOR TABLE LOCATED AFTER RTVCHK PROGRAM_^1*_]_^1FMPFLG ADC 0_,FILE MANAGER PROTECT FILE FLAG VIA PRESET_^1*_]_^1WATREQ ADC 0_,START OF WAITING REQUEST QUEUE_^1*_]_^1ACTREQ ADC 0_,ACTIVE REQUEST FLAG (CONTAINS A RBA IF BUSY)_^1*_]_^1FSTLOC ADC 0_,FIS STARTING THREAD LOC (ZERO, IF NO CORE FIS)€€_^1*_]_^1FIDLOC ADC 0_,FIS DIRECTORY LOCATION (ZERO, IF NOT IN CORE)_^1*_]_^1RPTINT ADC RPTPER_'REQUEST PROCESSOR TIMEOUT INTERVAL_^1*_]_^1FDTINT ADC FDTPER_'FILE/DIRECTORY TIMEOUT INTERVAL_^1*_]_^1NWFISD ADC FIDSIZ_'NUMBER OF WORDS IN FIS DIRECTORY (N*96)_^1*_]_^1NWFISB ADC FIBSIZ_'NUMBER OF WORDS IN A FIS BLOCK (N*96)_^1_%SPC 3_^1*_82 CARDS DELETED_574*1655_^1RUTFLG ADC 0_€€,REQUEST UNTHREADED FLAG (ZERO IF SET)_^1RQBADR ADC 0_,TEMPORY STORAGE OF REQBUF ADDRESS_$64*1408_^1SCHCOD ADC D+$1200_%SCHEDULER REQUEST CODE_^1_%EJT_]_^1*_*CHECK IF REQUEST PROCESSOR IS IN CORE_^1_%SPC 2_^1CHKRPC LDA- RPLIDX,Q_$GET INDEX TO REQUEST PROCESSOR TABLE_^1_%ARS 4_^1_%INA -1_+CHECK IF DEFINE FILE REQUEST_^1_%SAZ GETRPI_)NO_^1*_]_^1_%LDQ FIDSEC_'CHECK IF FIS DIREC€€TORY DEFINED YET_^1_%SQN GETRPI_^1_%LDA- ONEBIT+0_$NO, FILE NOT DEFINED, RETURN WITH ERROR_^1_%JMP* FMRERR_)(FM SPACE NOT DEFINED TIL FIS DIR ALLOCATED)_^1*_]_^1GETRPI MUI- ONEMSK+1_$MULTIPLY BY 3 (NO. ITEMS IN EACH ENTRY)_^1_%ADD =XRPTABL-1_^1_%STA- I_,SAVE REQUEST PROCESSOR TABLE INDEX - 1 IN I_^1*_]_^1_%IIN 0_^1_%LDA- RPTREM,I_$IF TIME REMAINING IS ZERO, IT IS NOT IN CORE_^1_€€%SAZ NOTINC_)REQUEST PROCESSOR NOT IN CORE_^1_%JMP* SETTIM_)REQUEST PROCESSOR IS IN CORE_^1*_]_^1NOTINC SET A_,SET CURRENT FILE NUMBER TO $FFFF_#71*1630_^1_%STA* (FNUMBR)_J74*1655_^1_%LDA- RPSSEC,I_'SET STARTING SECTOR_^1_%STA* RPSEC_^1*_]_^1_%LDA- RPLGTH,I_$CHECK IF REQUEST PROCESSOR LENGTH SET_^1_%SAN SETNWS_)YES (NOT THE FIRST TIME)_^1*_]_^1_%LDA- RPSSEC+3,I_"FIND NUMBER OF W€€ORDS IN REQUEST PROCESSOR_^1_%SUB- RPSSEC,I_^1_%MUI =XWRDSEC_^1SETNWS STA* RPNW_^1*_]_^1_%RTJ GETSPC_'GET SPACE FOR REQUEST PROCESSOR_^1_%STQ* RPSA_+SET REQUEST PROCESSOR STARTING ADDRESS_^1_%STQ* RELRP+2_(SET REQUEST PROCESSOR RELEASE ADR (IF ERROR)_^1_%EJT_]_^1*_*READ IN REQUEST PROCESSOR_^1_%SPC 2_^1_%RTJ MMREAD_'READ IN REQUEST PROCESSOR_^1RPSA_!NUM 0_.1. REQUEST PROCESSOR€€ STARTING ADDRESS_^1RPNW_!NUM 0_.2. REQUEST PROCESSOR NUMBER OF WORDS_^1RPLU_!NUM $8C2_+3. LIBRARY UNIT_563*1386_^1_%NUM 0_.4. REQUEST PROCESSOR INDEX_^1RPSEC NUM 0_.5. REQUEST PROCESSOR SECTOR_^1_%SQP SETADR_^1_%SPC 2_^1RELRP RELEAS 0_$*****MM ERROR, RELEASE THE REQUEST PROCESSOR SPACE_^1_%LDA- ONEBIT+7_$RETURN TO CALLER WITH ERROR_^1_%SPC 2_^1FMRERR EOR- ONEBIT+15_#FILE €€MANAGER REQUEST ERROR ENTRY_^1_%STA* FMEXIT_^1_%LDQ* ACTREQ_^1_%LDQ- RTNADR,Q_$INCLUDE BIT 15 WITH ERROR CODE AND STORE IT_^1_%INQ -1_^1_%RTJ ABSPAR_^1_%TRA Q_^1_%LDA* FMEXIT_^1_%STA- (ZERO),Q_^1_%JMP* FILREQ_'RETURN TO CALLER, CHECK NEXT FILE REQUEST_^1_%EJT_]_^1*_*EXECUTE REQUEST PROCESSOR_^1_%SPC 2_^1SETADR LDA* RPSA_)I = REQUEST PROCESSOR TABLE INDEX - 1_^1_%STA- RPSADR,I_$€€SAVE REQUEST PROCESSOR STARTING ADDRESS_^1_%IIN 0_Q74*1655_^1*_]_^1SETTIM LDA* RPTINT_'RESET REQUEST PROCESSOR TIME REMAINING_^1_%STA- RPTREM,I_L66*1448_^1*_] 66*1448_^1_%LDA- RPSADR,I_$ADJUST REQUEST PROCESSOR STARTING_$66*1448_^1_%INA 1_,ADDRESS(SKIP OVER PROC. LENGTH)_'66*1448_^1*_] 66*1448_^1_%LDQ* ARQPRO_'CHECK IF FIRST REQUEST AFTER AUTOLOAD 66*1448_^1*_] 66*1448_^1_%EI€€N 0_S66*1448_^1_%STA* ARQPRO_'STORE START ADDRESS_366*1448_^1*_] 66*1448_^1_%SQN EXECRP_'SKIP IF NOT FIRST_566*1448_^1_%LDA* (VFLAG)_%CHECK IF SYSTEM HAS A TIMER_%**MSOS 4.1**_^1_%SAZ EXECRP_'NO_B74*1655_^1_%RTJ- (AMONI)_%INIT. RELEASE ALLOCATABLE CORE PROGRAM 66*1448_^1_%ADC D+$1203_K74*1655_^1_%ADC RACSPC_N66*1448_^1*_] 66*1448_^1EXECRP LDQ* ACTREQ_'Q=REQUEST BUFFER ADDRES€€S_.66*1448_^1_%LDQ- APL,Q_(Q = ADDRESS OF PARAMETER LIST_^1_%SPC 2_^1_%RTJ+ 0_,TRANSFER TO REQUEST PROCESSOR_^1ARQPRO EQU ARQPRO(*-1)_!ADR OF CURRENT (OR LAST) REQUEST PROCESSOR_^1*_]_^1_%RAO* ARQPRO_'INCREMENT TO INDICATE LAST ONE HAS COMPLETED_^1_%EJT_]_^1*_*FIND NEXT ALLOWABLE FILE REQUEST (IF ANY) BY PRIORITY_^1_%SPC 2_^1FILREQ LDQ =XWATREQ_$GET NEXT FILE REQUEST_^1SRHQUE S€€TQ* LSTPTR_'SEARCH QUEUE_^1_%LDQ- (ZERO),Q_^1_%SQZ SETFLG_'END OF QUEUE (NO REQUESTS), RETURN TO CALLER_^1*_]_^1*_8CHECK IF THE REQUEST IS A RETRIEVE/LOCK_^1*_8REQUEST, ITS FIS IS IN CORE, ITS FILE IS_^1_%RTJ* RTVCHK_'LOCKED, AND THE COMBINATIONS ARE DIFFERENT._^1*_]_^1_%SAZ SETFLG_'NO, UNTHREAD THE REQUEST_^1*_]_^1_%JMP* SRHQUE_'THIS REQUEST IS A RETRIEVE REQUEST, ATTEMPTING_^1*€€_9TO LOCK AN ALREADY LOCKED FILE WITH A DIFFER-_^1*_9ENT COMBINATION. LEAVE QUEUED, GET NEXT ONE._^1_%SPC 2_^1SETFLG LDA* ACTREQ_'SET ACTREQ FOR NEXT REQUEST (IF ANY)_^1_%STA- I_,I = REQUEST BUFFER ADDRESS OF FINISHED REQUEST_^1_%STQ* ACTREQ_^1_%SQZ CHKRSC_'NO NEW REQUEST_674*1655_^1*_8CHECK IF RACSPC SCHEDULING REQUIRED 74*1655_^1_%ENA $F_+FORM SCHEDULER CALL_^1_%AND- RPLIDX,€€Q_^1_%EOR* SCHCOD_^1_%STA* SCHCDE_^1_%SPC 2_^1_%RTJ- (AMONI)_%SCHEDULE NEW REQUEST TO BE UNTHREADED_^1SCHCDE ADC 0_^1_%ADC UNTHRD_^1_%SPC 2_Q74*1655_^1*_8CHECK IF RACSPC NEEDS TO BE SCHEDULED74*1655_^1_%SPC 1_Q74*1655_^1CHKRSC LDA* (VFLAG)_%CHECK IF SYSTEM HAS A TIMER_%**MSOS 4.1**_^1_%SAN RETURN_'YES, GO RETURN TO CALLER_,74*1655_^1*_]74*1655_^1_%SET A_,SET CURRENT FILE NUM€€ TO $FFFF TO_#74*1655_^1_%STA* (FNUMBR)_$ALLOW RELEASE OF FIS AND KIS DIRECTOR74*1655_^1_%IIN 0_Q74*1655_^1_%LDA* (RSFLAG)_$CHECK IF RACSPC CURRENTLY BUSY_%74*1655_^1_%RAO* (RSFLAG)_$BUMP RACSPC SCHEDULING FLAG_)74*1655_^1_%EIN 0_Q74*1655_^1_%SAN RETURN_'SKIP IF RACSPC CURRENTLY ACTIVE_$74*1655_^1*_]74*1655_^1_%RTJ- (AMONI)_%SCHEDULE RELEASE ALLOCATABLE_(74*1655_^1_%ADC D+$1203€€_%SPACE PROGRAM_774*1655_^1_%ADC RACSPC_L74*1655_^1_%EJT_]_^1*_*RETURN TO CALLER AND UNTHREAD NEXT FILE REQUEST_^1_%SPC 2_^1RETURN LDQ- I_,RETURN TO CALLER (Q = RBA OF FINISHED REQUEST)_^1_%INQ 1_^1_%SQZ DSPEXT_^1_%INQ -1_^1_%SQN CHKUNP_^1DSPEXT JMP- (ADISP)_%NO CALLER, ENTRY ONLY TO CHECK A QUEUE CHANGE_^1*_]_^1CHKUNP ENA HUPLVL_'CHECK IF CALLER UNPROTECTED_^1_%SUB- PL_^1_%€€SAM RESTOR_^1_%LDA- RTNADR,Q_L68*1512_^1_%RTJ CKUADR_'ASSURE RETURN ADDRESS IS IN UNPROTECTED68*1512_^1_%RTJ SWAPCK_'YES, RESET UNPIO + CHECK IF SWAP IS DESIRED_^1*_]_^1RESTOR LDA- IREG,Q_'RESTORE I AND Q REGISTERS_^1_%STA- I_^1_%LDA- RTNADR,Q_^1_%LDQ- QREG,Q_^1_%IIN 0_^1_%STA* FMEXIT_'SET RETURN_^1_%EIN 0_^1_%JMP* (FMEXIT)_$RETURN TO CALLER_^1*_]_^1FNUMBR ADC FILNBR_L74*1655€€_^1RSFLAG ADC RSAFLG_'RACSPC ACTIVE FLAG_274*1655_^1VFLAG ADC TMRTYP_'SYSTEM TIMER VERSION FLAG_+74*1655_^1FMEXIT ADC 0_,FILE MANAGER REQUEST EXIT_+74*1655_^1LSTPTR ADC 0_,LAST POINTER TO A REQUEST BUFFER_#74*1655_^1*_]_^1UNTHRD STQ- I_,UNTHREAD NEXT REQUEST TO BE PROCESSED_^1_%LDQ* LSTPTR_^1*_]_^1UNT10 IIN 0_,CHECK IF (LAST POINTER) EQUALS NEXT POINTER_^1_%LDA- (ZERO),Q_'(M€€AY HAVE BEEN INTERRUPTED BY QUEUE REQUEST)_^1_%EOR- I_^1_%SAZ UNT20_^1_%EIN 0_^1_%LDQ- (ZERO),Q_$NO, CHECK NEXT REQBUF UNTIL (LSTPTR) = NXTPTR_^1_%JMP* UNT10_^1*_]_^1UNT20 STA RUTFLG_'SET REQUEST UNTHREADED FLAG_)74*1655_^1_%LDA- (I)_^1_%STA- (ZERO),Q_$UNTHREAD THE REQUEST_^1_%LDQ- I_.STORE (NEXT POINTER) INTO (LAST POINTER)_^1_%EIN 0_^1_%JMP CHKRPC_'PROCESS NEXT REQ.(Q=REQ B€€UFF ADDR)_!74*1655_^1_%EJT_]_^1*_*CHECK IF THE REQUEST IS A RETRIEVE/LOCK REQUEST, ITS FIS IS_^1*_+IN CORE, ITS FILE IS LOCKED, COMBINATIONS ARE DIFFERENT._^1RTVCHK 000 000_*Q = REQUEST BUFFER ADDRESS_^1_%STQ- I_-(SAVE REQUEST BUFFER ADDRESS IN I-REGISTER)_^1_%LDQ- APL,Q_(Q = ADDRESS OF PARAMETER LIST_^1_%RTJ* ABSPAR_'ABSOLUTIZE ADDRESS OF FILE NUMBER_^1_%TRA Q_^1_%LDQ- (ZERO),Q_€€^1_%STQ* CFILNO_)SAVE CURRENT FILE NUMBER_^1*_]_^1_%LDA- RPLIDX,I_$CHECK IF REQUEST IS A RETRIEVE REQUEST_^1_%ARS 4_^1_%INA -NUMRPE+3_^1_%SAP RTVREQ_'YES_^1_%CLR A_^1_%JMP* RCEXIT_'NO, EXIT WITH A = 0_^1*_]_^1RTVREQ LDQ- APL,I_(CHECK IF RETRIEVE REQUEST HAS A COMBINATION_^1_%INQ 1_^1_%ARS 1_^1_%AAQ Q_,Q = ADDRESS OF REQUEST,S FILE COMBINATION_^1_%RTJ* ABSPAR_'ABSOLUTIZE THIS€€ ADDRESS_^1_%TRA Q_^1_%LDA- (ZERO),Q_$A = REQUEST,S FILE COMBINATION_^1_%AND- ONEMSK+14_^1_%SAZ RCEXIT_'NO COMBINATION, EXIT WITH A = 0_^1*_]_^1_%STA* RFLCOM_'SAVE REQUEST,S FILE COMBINATION_^1_%LDQ* CFILNO_^1_%RTJ* CKCFIS_^1_%SAP LOKCHK_'FIS IN CORE, CHECK IF FILE LOCKED_^1_%ENQ ZERO-FISCOM_!FIS NOT IN CORE (FAKE TO ALLOW EXIT WITH A=0)_^1*_]_^1LOKCHK LDA- FISCOM,Q_$CHECK IF F€€ILE LOCKED_^1_%SAZ RCEXIT_'FILE NOT LOCKED (EXIT WITH A=0)_^1*_]_^1_%EOR* RFLCOM_'FILE LOCKED, CHECK IF COMBINATIONS NOT EQUAL_^1*_:FILE COMBINATIONS ARE EQUAL (EXIT WITH A=0)_^1*_8IF ALL CHECKS ARE PASSED, EXIT WITH A=NON-ZERO_^1*_]_^1RCEXIT LDQ- I_,RESTORE REQUEST BUFFER ADDRESS IN Q-REGISTER_^1_%JMP* (RTVCHK)_%AND EXIT._^1_%SPC 1_^1RFLCOM ADC 0_,SAVE REQUEST,S FILE COMBINATIO€€N_^1CFILNO ADC 0_,CURRENT FILE NUMBER BEING CHECKED_^1_%EJT_]_^1*_8REQUEST PROCESSOR TABLE_^1_%SPC 1_^1RPTABL EQU RPTABL(*)_^1_%ADC FMRP01_'STARTING SECTOR OF DEFFIL_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF DEFFIL_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR DEFFIL_^1*_]_^1_%ADC FMRP02_'STARTING SECTOR OF RELFIL_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) O€€F RELFIL_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR RELFIL_^1*_]_^1_%ADC FMRP03_'STARTING SECTOR OF DEFIDX_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF DEFIDX_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR DEFIDX_^1*_]_^1_%ADC FMRP04_'STARTING SECTOR OF LOKFIL_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF LOKFIL_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSO€€R LOKFIL_^1*_]_^1_%ADC FMRP05_'STARTING SECTOR OF UNLFIL_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF UNLFIL_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR UNLFIL_^1*_]_^1_%ADC FMRP06_'STARTING SECTOR OF STOSEQ_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF STOSEQ_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR STOSEQ_^1*_]_^1_%ADC FMRP07_'STARTING SECTOR OF STODI€€R_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF STODIR_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR STODIR_^1*_]_^1_%ADC FMRP08_'STARTING SECTOR OF STOIDX_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF STOIDX_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR STOIDX_^1*_]_^1_%ADC FMRP09_'STARTING SECTOR OF RTVSEQ_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF RT€€VSEQ_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR RTVSEQ_^1*_]_^1_%ADC FMRP10_'STARTING SECTOR OF RTVDIR_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF RTVDIR_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR RTVDIR_^1*_]_^1_%ADC FMRP11_'STARTING SECTOR OF RTVIDX_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF RTVIDX_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR RT€€VIDX_^1*_]_^1_%ADC FMRP12_'STARTING SECTOR OF RTVIDO_^1_%ADC 0_,START ADR OR LENGTH (IF NOT IN CORE) OF RTVIDO_^1_%ADC 0_,TIME REMAINING FOR REQUEST PROCESSOR RTVIDO_^1*_]_^1_%ADC FMREND_'ENDING SECTOR OF REQUEST PROCESSORS_^1_%EJT_]_^1*_*A B S O L U T I Z E_!P A R A M E T E R_^1_%SPC 2_^1ABSPAR 000 000_*Q = POINTER TO PARAMETER ADDRESS_^1_%IIN 0_^1_%LDA* APRTBL_'IS THERE PA€€RTITIONED CORE_(**MSOS 4.1**_^1_%EOR- ONEMSK+14_F**MSOS 4.1**_^1_%SAZ AP30_)NO, REQUEST IS FROM BANK 0_'**MSOS 4.1**_^1_%TRQ A_N**MSOS 4.1**_^1_%SUB* (APRTBL)_$IS THE REQUEST FROM PART 1_'**MSOS 4.1**_^1_%SAM AP30_)NO_?**MSOS 4.1**_^1_%LDA- (ZERO),Q_$REQUEST FROM PART 1, ABSOLUTE ADDRESSING ONLY_^1_%JMP* APEXIT_^1*_]_^1APRTBL ADC PARTBL_'PARTITIONED CORE TABLE_+**MSOS 4.1**_^1*€€_]_^1AP30_!LDA- (ZERO),Q_$REQUEST FROM PART 0, A = ABS/REL PARAMETER ADR_^1_%SAP APEXIT_^1_%AAQ A_,ABSOLUTIZE RELATIVE PARAMETER ADDRESS_^1_%AND- ONEMSK+14_^1APEXIT EIN 0_^1_%JMP* (ABSPAR)_$A = ABSOLUTE PARAMETER ADDRESS_^1_%EJT_]_^1*_*C H E C K_!I F_!F I S_!I S_!I N_!C O R E_^1_%SPC 2_^1CKCFIS 000 000_*Q = FILE NUMBER (SAVE IT)_^1_%IIN 0_^1_%STQ* FILNBR_^1_%LDQ =XFSTLOC_$Q €€= START OF CORE FIS THREAD_^1*_]_^1CNXFIS LDQ- (ZERO),Q_$CHECK IF THERE IS A NEXT FIS_^1_%SQN CHKCLK_^1_%EIN 0_,NO MORE, FILE FIS NOT IN CORE_^1_%SET A_^1_%JMP* (CKCFIS)_$EXIT WITH A = -0_^1*_]_^1CHKCLK RAO- FILCLK,Q_$INCREMENT FIS CLOCK TO PREVENT ITS RELEASE_^1_%EIN 0_^1_%LDA- FILENO,Q_$CHECK FIS FILE NUMBER_^1_%SUB* FILNBR_^1_%SAZ FISFND_'FIS FOUND_^1*_]_^1_%LDA- FILCLK,Q_$€€RESTORE CLOCK VALUE_^1_%INA -1_^1_%IIN 0_^1_%SAZ CKNFIS_'DONT RESTORE CLOCK TO ZERO_^1_%STA- FILCLK,Q_^1CKNFIS JMP* CNXFIS_'CHECK NEXT FIS_^1*_]_^1FISFND LDA FDTINT_'FIS FOUND, RESET CLOCK TO TIME INTERVAL_^1_%STA- FILCLK,Q_^1_%JMP* (CKCFIS)_$EXIT WITH A = POSITIVE_^1_%SPC 2_^1FILNBR NUM 0_,FILE NUMBER OF CURRENT REQUEST_^1_%EJT_]_^1*_*C H E C K_!I F_!R E Q U E S T_!P R O T E€€ C T E D_^1_%SPC 2_^1CKPROT 000 000_^1_%IIN 0_^1_%ENA HUPLVL_^1_%SUB- PL_^1_%SAM CP10_)A = NEGATIVE, IF REQUEST PROTECTED_^1*_]_^1_%LDA FMPFLG_'A = POSTIVE, IF REQUEST HAS SET FMPFLG_^1CP10_!EIN 0_,A = ZERO,_#IF REQUEST UNPROTECTED_^1_%JMP* (CKPROT)_^1_%EJT_]_^1*_*C H E C K_!U N P R O T E C T E D_!A D D R E S S_^1_%SPC 2_^1CKUADR 000 000_*A = ADDRESS TO BE CHECKED_^1_%IIN€€ 0_,Q = POINTER TO ADDRESS OR ZERO_^1_%STA* ADRESS_^1_%RTJ* CKPROT_'CHECK IF CALLER UNPROTECTED_^1_%IIN 0_^1_%SAM CKEXIT_)NO, EXIT WITH ADDRESS_^1_%LDA- $F7_*CHECK BOTTOM END_^1_%RTJ* CMPR16_^1_%SAP UNPERR_^1_%LDA- $F6_*CHECK TOP END_^1_%INA -1_^1_%RTJ* CMPR16_^1_%SAM UNPERR_^1CKEXIT LDA* ADRESS_'ADDRESS VALID, EXIT_^1_%EIN 0_^1_%JMP* (CKUADR)_^1_%EJT_]_^1*_*PROCESS UNPROTEC€€TED ADDRESS ERROR_^1*_]_^1UNPERR SQZ RERROR_'UNPROTECTED ADDRESS ERROR_^1_%TRQ A_^1_%LDQ LPTRS_(ILLEGAL REQUEST BUFFER AND / OR INDICATOR_^1_%STA- (ZERO),Q_^1_%RTJ- (AVOLR)_%RELEASE VOLATILE_^1_%EIN 0_^1_%RTJ SWAPCK_'RESET UNPIO AND CHECK IF SWAP DESIRED_^1_%LDQ LOCF_)HANDLE AS A (J02,XXXX) ERROR_^1_%JMP- (ZERO),Q_^1_%SPC 2_^1RERROR EIN 0_,REQUEST ERROR, ILLEGAL PARAMETER, €€SET BIT 14_^1_%LDA- ONEBIT+14_^1_%JMP FMRERR_'RETURN TO USER_^1_%SPC 2_^1CMPR16 000 000_*COMPARE UNP. BOUND WITH A 16 BIT ADDRESS_^1_%EOR* ADRESS_*CHECK IF SIGNS ARE THE SAME_^1_%SAP CMP010_+(YES)_^1_%LDA* ADRESS_^1_%JMP* (CMPR16)_$A .GE. 0 IF UNP. BOUND HIGHER_^1*_]_^1CMP010 EOR* ADRESS_'SUBTRACT ADDRESS FROM UNP. BOUND_^1_%SUB* ADRESS_^1_%JMP* (CMPR16)_$A .GE. 0 IF UNP. BOUND€€ HIGHER_^1_%SPC 2_^1ADRESS NUM 0_,ADDRESS TO BE CHECKED_^1_%EJT_]_^1*_*G E T_!C O R E_!A L L O C A T A B L E_!S P A C E_^1_%SPC 2_^1*_8ROUTINE WILL REQUEST N WORDS OF SPACE_^1*_8INPUT N IN A-REGISTER_^1*_8RETURNS ADDRESS OF ALLOCATED SPACE IN Q_^1*_8IF Q IS NEGATIVE, ALLOCATION ERROR_^1GETSPC 000 000_^1_%STA* RQ+5_)STORE NUMBER OF WORDS IN SPACE REQUEST_^1*_]_^1_%LDA- I_,SAVE I€€-REGISTER_^1_%STA* ISAVE_^1*_]_^1_%ENA -$F_^1_%AND* RQ+1_^1_%EOR- PL_+PROG PRIORITY_^1_%STA* RQ+1_^1*_]_^1RQ_#RTJ- (AMONI)_%GET SPACE_^1_%ADC D+$1400+$10*RPLSR_C68*1512_^1_%ADC CP_^1_%ADC 0_^1_%ADC 0_^1_%ADC 0_^1_%JMP- (ADISP)_^1_%SPC 2_^1CP_#SQP GSEXIT_^1_%NUM $18FF_(*****ALLOCATION SETUP ERROR*******************_^1*_]_^1GSEXIT LDA* ISAVE_(RESTORE I- REGISTER AND EXIT_^1_€€%STA- I_^1_%JMP* (GETSPC)_^1_%EJT_]_^1*_*M A S S_!M E M O R Y_!R E A D_!S U B R O U T I N E_^1*_]_^1*_1READ FROM MASS MEMORY (SA,NW,LU,INDEX,SECTOR)_^1MMREAD 000 000_^1_%LDA- ONEBIT+9-4_"A = READ REQUEST CODE ($200)_^1_%LDQ* MMREAD_'SAVE ENTRY IN THE WRITE SUBROUTINE_^1_%JMP* REDWRT_'TRANSFER TO COMMON READ/WRITE ENTRY_^1_%SPC 1_^1*_*M A S S_!M E M O R Y_!W R I T E_!S U B R O U €€T I N E_^1*_]_^1*_1WRITE FROM MASS MEMORY (SA,NW,LU,INDEX,SECTOR)_^1MMWRIT 000 000_^1_%LDA- ONEBIT+10-4_!A = WRITE REQUEST CODE ($400)_^1_%LDQ* MMWRIT_^1_%SPC 1_^1*_*COMMON READ/WRITE ENTRY_^1REDWRT EOR- PL_+FORM REQUEST WORD WITH READ/WRITE REQUEST CODE_^1_%ALS 4_^1_%EOR- PL_,(USE PRIORITY LEVEL FOR RP AND CP)_^1_%EOR- ONEBIT+14_#PUT IN D BIT._^1_%STA* RW_^1*_]_^1_%LDA- I_,SAVE€€ I-REGISTER_^1_%STA* ISAVE_^1_%STQ- I_,Q = ADDRESS OF FIRST PARAMETER_^1_%INQ 5_^1_%STQ* MMWRIT_'SETUP RETURN_^1*_]_^1_%LDQ- (ZERO),I_$GET PARAMETERS AND STORE INTO MONITOR REQUEST_^1_%STQ* SA_+STORE STARTING ADDRESS_^1_%LDQ- 1,I_^1_%STQ* NW_+STORE NUMBER OF WORDS_^1_%LDQ- 2,I_^1_%STQ* LU_+STORE LOGICAL UNIT_^1*_]_^1_%ENA WRDSEC_'COMPUTE MSB/LSB MASS MEMORY ADDRESS_^1_%MUI- 4,I_,€€(GET SECTOR)_^1_%LLS 1_^1_%ALS 15_^1_%ADD- 3,I_*ADD INDEX USING DOUBLE PRECISION_^1_%SAP STOMMA_^1_%INQ 1_^1_%AND- ONEMSK+14_^1STOMMA STQ* MSB_*STORE MSB AND LSB WORD ADDRESSES_^1_%STA* LSB_^1_%EJT_]_^1*_*EXECUTE THE MASS MEMORY TRANSFER_^1*_]_^1_%LDA =XMAXMMA_$SET MAXIMUM NO. OF MASS MEMORY ERROR ATTEMPTS_^1_%STA* IOCNTR_^1*_]_^1MMTRAN RTJ- (AMONI)_%READ/WRITE MONITOR CALL_^1€€RW_#ADC 0_.1. REQUEST WORD_^1_%ADC MMCOMP_)2. COMPLETION ADDRESS_^1_%ADC 0_.3. THREAD_^1LU_#ADC 0_.4. LOGICAL UNIT_^1NW_#ADC 0_.5. NUMBER OF WORDS_^1SA_#ADC 0_.6. STARTING ADDRESS_^1MSB_"ADC 0_.7. MOST SIGNIFICANT BITS OF MM ADDRESS_^1LSB_"ADC 0_.8. LEASTSIGNIFICANT BITS OF MM ADDRESS_^1_%JMP- (ADISP)_^1_%SPC 2_^1MMCOMP SQP MMEXIT_'MASS MEMORY COMPLETE, CHECK FOR ERROR_^1€€_%LDQ* IOCNTR_'READ/WRITE ERROR, DECREMENT COUNT_^1_%INQ -1_+CHECK IF DONE_^1_%STQ* IOCNTR_^1_%SQM MMEXIT_!*****MM ERROR,EXIT WITH Q NEGATIVE_^1_%JMP* MMTRAN_'GO TRY AGAIN_^1_%SPC 2_^1MMEXIT LDA* ISAVE_(MASS MEMORY EXIT, RESTORE I AND RETURN_^1_%STA- I_^1_%JMP* (MMWRIT)_^1_%SPC 2_^1ISAVE NUM 0_,SAVE I-REGISTER_^1IOCNTR NUM 0_,NUMBER OF TRIES TO REPEAT FAILED I/O REQUEST_^1_%€SPC 5_^1_%END_]_^__PRSPCV4 CSY/ F02 P€1_%NAM RSPCV4_'DECK-ID F02 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*R E L E A S E_!A L L O C A T A B L E_!C O R E_!S P A C E_^1*_]_^1_%EQU RSCPL(3)_$RELEASE ALLOC. SPACE COMP. PRIORITY LVL68*1511_^1_%EQU RSRPL(10)_#RE€€LEASE ALLOC. SPACE REQT. PRIORITY LVL68*1511_^1*_]_^1*_*ENTRY POINTS_^1*_81 CARD DELETED_674*1785_^1_%EQU D($4000)_$D-BIT FOR MONITOR REQUESTS_'**MSOS 4.1**_^1_%ENT FSLMMA_'MM ADR OF FILE SPACE LIST ON AUTOLOAD IMAGE_^1_%ENT RACSPC_'RELEASE ALLOCATABLE CORE SPACE_%74*1785_^1_%ENT RSAFLG_'RACSPC ACTIVE FLAG_274*1785_^1*_]_^1*_*EXTERNALS_^1_%EXT FILREQ_'EXECUTE NEXT FILE REQUEST€€ (FILMGR)_^1_%EXT ACTREQ_'ACTIVE REQUEST FLAG IN REQUEST SUPERVISOR_^1_%EXT ARQPRO_'ADDRESS OF CURRENT (OR LAST) REQUEST PROCESSOR_^1_%EXT RPTABL_'REQUEST PROCESSOR TABLE_^1_%EXT FILNBR_'FILE NUMBER OF CURRENT REQUEST_^1*_]_^1_%EXT FSTLOC_'FIS STARTING THREAD LOC (IF ZERO, NO CORE FIS)_^1_%EXT TMRTYP_'TIMER VERSION FLAG_!0 = NO TIMER_"74*1785_^1_%EXT FIDLOC_'FIS DIRECTORY LO€€CATION (IF ZERO, NO CORE FIS)_^1_%EXT FDTINT_'FILE/DIRECTORY TIMEOUT INTERVAL_^1*_]_^1_%EXT FSLIST_'START OF FILE SPACE LIST_^1_%EXT FSLLTH_'FILE SPACE LIST LENGTH_^1_%EXT FSLEND_'END OF FILE SPACE LIST_^1_%EXT FISLU_(L.U. OF FIS DIRECTORY AND FIS BLOCKS_!63*1348_^1_%EJT_]_^1*_*EQUIVALENCES_^1*_81 CARD DELETED_668*1511_^1_%EQU TIMPER(0)_#TIME PERIOD FOR RESCHEDULING RELSPC_^1€€_%EQU TUNITS(1)_#TIME UNITS FOR RESCHEDULING RELSPC_^1_%EQU FIDCLK(1)_#FIS DIRECTORY CLOCK INDEX_^1_%EQU NUMRPE(12)_"NUMBER OF REQUEST PROCESSOR ENTRIES_^1*_]_^1*_1COMMUNICATION REGION CONSTANTS_^1_%EQU ZERO(2)_%LOCATION CONTAINING ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ZROMSK($13)_!ZERO MASK TABLE_^1_%EQU ONEBIT($23)_!ONE BIT TABLE_^1_%EQU ZROBIT($33)_!ZERO BIT TA€€BLE_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR REQUEST ENTRY_^1*_]_^1*_1REQUEST PROCESSOR TABLE INDEXES_^1_%EQU RPSADR(2)_#REQUEST PROCESSOR STARTING CORE ADDRESS_^1_%EQU RPLGTH(2)_#REQUEST PROCESSOR LENGTH_^1_%EQU RPTREM(3)_#REQUEST PROCESSOR TIME REMAINING_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER€€ OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NE€€XT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO€€ NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS D€€IRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH€€+15) FIS FLAGS AND LOGICAL UNITS_^1_%EJT_]_^1*_*RELEASE REQUEST PROCESSOR SUBROUTINE SPACE, IF NOT USED_^1*_]_^1*_86 CARDS DELETED_574*1785_^1RACSPC LDQ =XRPTABL_$SET I TO ADDRESS OF REQUEST PROCESSOR TABLE_^1_%STQ- I_^1_%ENQ 3*NUMRPE-1_"Q = LENGTH OF THE REQUEST PROCESSOR TABLE_^1*_]_^1CHKRPS INQ -3_+CHECK THE NEXT REQUEST PROCESSOR SUBROUTINE_^1_%IIN 0_^1_%LDA- RPTREM,B_$IS T€€HE REMAINING TIME ZERO_^1_%SAZ DONERP_)YES, REQUEST PROCESSOR NOT IN CORE_^1*_]_^1_%INA -1_-NO, REQUEST PROCESSOR IN CORE_^1_%STA- RPTREM,B_$DECREMENT REMAINING TIME, CHECK IF ZERO_^1_%SAN DONRPS_)NO, LEAVE REQUEST PROCESSOR IN CORE_^1*_]_^1_%LDA- RPSADR,B_'YES, GET STARTING ADDRESS OF REQ PROCESSOR_^1_%STA* RLSRPS+2_^1_%INA 1_^1_%EOR* (ADRRPA)_$IS THIS THE CURRENT ACTIVE REQ€€UEST PROCESSOR_^1_%SAN RELRPS_(NO, RELEASE THE REQUEST PROCESSOR SUBROUTINE_^1*_]_^1_%RAO- RPTREM,B_$REQUEST PROCESSOR IN USE, DO NOT RELEASE_^1DONERP JMP* DONRPS_^1*_]_^1*_]_^1RELRPS LDA* (RLSRPS+2)_"SETUP THE REQUEST PROCESSOR LENGTH_^1_%STA- RPLGTH,B_^1*_]_^1RLSRPS RELEAS 0_*RELEASE THE REQUEST PROCESSOR SUBROUTINE_^1*_83 CARDS DELETED_574*1785_^1*_]_^1DONRPS EIN 0_,CHECK IF D€€ONE CHECKING REQUEST PROCESSOR SUBS._^1_%SQM CHKFID_)YES, CHECK FIS DIRECTORY_^1_%JMP* CHKRPS_)NO , CHECK NEXT ONE_^1_%EJT_]_^1*_*RELEASE FILE INFORMATION SEGMENT DIRECTORY, IF NOT USED_^1*_]_^1CHKFID IIN 0_,CHECK IF FIS DIRECTORY IN CORE_^1_%LDQ* (AFDLOC)_^1_%SQZ CKCFIS_)NO, CHECK CORE FIS,S_^1*_]_^1_%LDA- FIDCLK,Q_$DECREMENT FIS DIRECTORY CLOCK_^1_%INA -1_^1_%STA- FIDCLK,Q_$C€€HECK IF FIS DIRECTORY CLOCK IS ZERO_^1_%SAN CKCFIS_)NO, CHECK CORE FIS,S_^1*_]_^1_%STA* (AFDLOC)_'YES, GET STARTING FIS DIRECTORY LOCATION_^1_%STQ* RELFID+2_^1*_]_^1*_]_^1RELFID RELEAS 0_*RELEASE FIS DIRECTORY_^1*_83 CARDS DELETED_574*1785_^1_%EJT_]_^1*_*CHECK IF ALL CORE FIS,S HAVE BEEN CHECKED_^1*_]_^1CKCFIS LDQ* AFSTLO_'CHECK CORE FIS,S_^1*_]_^1CNXFIS EIN 0_,CHECK NEXT FIS_^1_€€%STQ* LSTPTR_^1_%LDQ- (ZERO),Q_$SAVE LAST FIS POINTER AND GET NEXT ONE_^1_%SQN CINUSE_^1_%JMP SAVFSL_'CHECK IF FILE SPACE LIST IS TO BE SAVED_^1*_]_^1CINUSE IIN 0_,CHECK IF FILE NUMBER CURRENTLY IN USE_^1_%LDA- FILENO,Q_^1_%EOR FILNBR_^1_%SAN CHKKID_^1_%LDA* (ADRARQ)_$YES, CHECK IF FILE MANAGER BUSY_^1_%SAZ CHKKID_^1_%JMP* CNXFIS_'YES, DONT COUNT DOWN CLOCK ON CURRENT FIS_^1_€€%EJT_]_^1*_*CHECK THE KIS DIRECTORY OF THE CORE FIS_^1*_]_^1CHKKID STQ- I_,I = ADDRESS OF CORE FIS_^1_%STQ* FISPTR_^1_%LDQ- ADRKID,Q_$IS KIS DIRECTORY IN CORE_^1_%SQN DCRKID_)YES, DECREMENT KIS DIRECTORY CLOCK_^1_%JMP* CHKFIS_)NO, CHECK CORRESPONDING FIS_^1*_]_^1DCRKID LDA- (ZERO),Q_$DECREMENT KIS DIRECTORY CLOCK_^1_%INA -1_^1_%STA- (ZERO),Q_$IS CLOCK ZERO_^1_%SAZ CHGKID_)YES, €€CHECK IF KIS DIRECTORY CHANGED_^1_%LDA- FILCLK,I_'NO, DECREMENT FIS CLOCK_^1_%INA -1_+DONT RELEASE FIS BEFORE ITS KIS DIRECTORY_^1_%SAZ CNTFIS_^1_%STA- FILCLK,I_^1*_]_^1CNTFIS LDQ- I_,CHECK NEXT FIS (RESTORE CORE FIS ADDRESS IN Q)_^1_%JMP* CNXFIS_^1*_]_^1CHGKID STQ* RKID10+2_$CHECK IF KIS DIRECTORY CHANGED_^1_%ENA 2_.(SET KIS DIRECTORY RELEASE ADDRESS)_^1_%AND- IDXCHG,I_^1_%SAN€€ CLRKID_)YES, CLEAR KIS DIRECTORY CHANGED BIT_^1_%JMP* RELKID_)NO, RELEASE KIS DIRECTORY_^1*_]_^1CLRKID LDA- IDXCHG,I_$CLEAR KIS DIRECTORY CHANGED BIT_^1_%AND- ZROBIT+1_^1_%EIN 0_^1_%STA- IDXCHG,I_^1_%STQ* SAKID_(WRITE CHANGED KIS DIRECTORY ONTO MASS MEMORY_^1_%ENA WRDSEC_^1_%MUI- KIDSIZ,I_^1_%STA* NWKID_(SET STARTING ADDRESS, NUMBER OF WORDS,_^1_%LDA- FISFLG,I_^1_%ARS 7_,LOGI€€CAL UNIT, AND SECTOR OF KIS DIRECTORY._^1_%AND- ONEMSK+6_^1_%STA* LUKID_^1_%LDA- KIDSEC,I_^1_%STA* SECKID_^1_%EJT_]_^1*_*WRITE OUT KIS DIRECTORY AND RELEASE IF NOT USED_^1*_]_^1_%RTJ- (AMONI)_%WRITE OUT CHANGED KIS DIRECTORY_^1_%ADC D+$C00+$10*RSRPL+RSCPL_#1.REQUEST WORD_+68*1511_^1_%ADC CKDMME_)2. COMPLETION ADDRESS_^1_%ADC 0_.3. THREAD_^1LUKID ADC 0_.4. LOGICAL UNIT_^1NWKID €€ ADC 0_.5. NUMBER OF WORDS_^1SAKID ADC 0_.6. STARTING ADDRESS_^1_%ADC 0_.7. NOT USED_^1SECKID ADC 0_.8. SECTOR ADDRESS_^1_%JMP- (ADISP)_^1*_] 63*1348_^1FISPTR NUM 0_,CURRENT FIS POINTER_^1LSTPTR NUM 0_,LAST CORE FIS POINTER_^1ADRARQ ADC ACTREQ_'ACTIVE REQUEST FLAG_^1ADRRPA ADC ARQPRO_'ADDRESS OF CURRENT (OR LAST) REQUEST PROCESSOR_^1AFSTLO ADC FSTLOC_'FIS STARTING THREAD€€ LOCATION_^1AFDLOC ADC FIDLOC_'FIS DIRECTORY LOCATION_^1AFDINT ADC FDTINT_'FILE/DIRECTORY TIMEOUT INTERVAL_^1AFSLEN ADC FSLEND_'END OF FILE SPACE LIST_^1*_85 CARDS DELETED_574*1785_^1CKDMME IIN 0_,CHECK FOR KIS DIRECTORY MASS MEMORY ERROR_^1_%TRQ A_^1_%LDQ* FISPTR_'I = CORE FIS ADDRESS_^1_%STQ- I_^1_%LDQ- ADRKID,Q_$Q= KIS DIRECTORY ADDRESS_^1_%SAP CKDCLK_^1*_]_^1_%LDA* (AFDIN€€T) *****MASS MEMORY ERROR, DONT RELEASE FROM CORE_^1_%STA- (ZERO),Q_$RESET CLOCK IN HOPE THAT NEXT TIME WILL BE OK_^1_%LDA- IDXCHG,I_$RESET KIS DIRECTORY CHANGE BIT_(63*1348_^1_%AND- ZROBIT+1_L63*1348_^1_%EOR- ONEBIT+1_L63*1348_^1_%STA- IDXCHG,I_L63*1348_^1*_]_^1CKDCLK LDA- (ZERO),Q_$CHECK IF KIS DIRECTORY HAS CHANGED_^1_%SAZ RELKID_'NO, RELEASE THE CURRENT FIS,S KIS DIRECTORY_^1_€€%JMP* CNTFIS_'YES, DONT RELEASE, CHECK NEXT FIS_^1*_]_^1RELKID STA- ADRKID,I_$MARK KIS DIRECTORY NOT IN CORE AND RELEASE IT_^1RKID10 RELEAS 0_^1*_83 CARDS DELETED_574*1785_^1_%EJT_]_^1*_*CHECK NEXT FILE INFORMATION SEGMENT_^1*_]_^1CHKFIS IIN 0_,DECREMENT FIS CLOCK_^1_%LDQ- I_^1_%LDA- FILCLK,Q_^1_%INA -1_^1_%STA- FILCLK,Q_$IS CLOCK ZERO_^1_%SAZ CHGFIS_)YES, CHECK IF FIS HAS CHANG€€ED_^1_%JMP* CNXFIS_)NO, CHECK NEXT FIS ON THREAD_^1*_]_^1CHGFIS STQ* RELFIS+2_$CHECK IF FIS HAS CHANGED_^1_%ENA 1_.(SET FIS RELEASE ADDRESS)_^1_%AND- IDXCHG,Q_^1_%SAN CLRFIS_'YES, CLEAR FIS CHANGED BIT_^1_%JMP* CKFCOM_'NO, CHECK IF FILE LOCKED_^1*_]_^1CLRFIS LDA- IDXCHG,Q_$CLEAR FIS CHANGED BIT_^1_%AND- ZROBIT_^1_%EIN 0_^1_%STA- IDXCHG,Q_^1_%ARS 7_,WRITE CHANGED FIS ONTO MASS€€ MEMORY_^1_%AND- ONEMSK+8_^1_%STA* LSBFIS_'SAVE FIS INDEX_^1_%LDA- SECFIS,Q_$SET STARTING ADDRESS_263*1348_^1_%INQ FH_^1_%STQ* SAFIS_^1*_]_^1_%MUI =XWRDSEC_^1_%LLS 1_^1_%ALS 15_+CONVERT FIS SECTOR AND INDEX TO MSB, LSB_^1_%ADD* LSBFIS_^1_%SAP STOLSB_^1_%INQ 1_^1_%AND- ONEMSK+14_^1STOLSB STA* LSBFIS_^1_%STQ* MSBFIS_^1_%EJT_]_^1*_*WRITE OUT FIS AND RELEASE IF NOT USED_^1*_]_^1*€€_*WRITE OUT CHANGED FIS_^1_%RTJ- (AMONI)_%WRITE OUT CHANGED FIS_^1_%ADC D+$400+$10*RSRPL+RSCPL_#1.REQUEST WORD_+68*1511_^1_%ADC CKFMME_)2. COMPLETION ADDRESS_^1_%ADC 0_.3. THREAD_^1_%ADC FISLU_*4. LOGICAL UNIT_563*1348_^1_%ADC FISSIZ_)5. NUMBER OF WORDS_^1SAFIS ADC 0_.6. STARTING ADDRESS_^1MSBFIS ADC 0_.7. MOST SIGNIFICANT BITS_^1LSBFIS ADC 0_.8. LEAST SIGNIFICANT BITS_^1€€_%JMP- (ADISP)_^1*_]_^1CKFMME IIN 0_,CHECK FOR FIS MASS MEMORY ERROR_^1_%LDA* FISPTR_'I = CORE FIS ADDRESS_^1_%STA- I_^1_%SQM RESET_"*****MASS MEMORY ERROR, DONT RELEASE CORE_!63*1348_^1*_]_^1_%LDA- FILCLK,I_$CHECK IF THE FIS CLOCK HAS CHANGED_^1_%SAN CKNFIS_)YES, DONT RELEASE, CHECK NEXT FIS_^1_%JMP* SETCLK_N63*1348_^1RESET LDA- IDXCHG,I_$RESET FIS CHANGED BIT_163*1348_^1_%AND€€- ZROBIT_N63*1348_^1_%EOR- ONEBIT_N63*1348_^1_%STA- IDXCHG,I_L63*1348_^1*_]_^1CKFCOM LDA- FISCOM,I_$CHECK IF FILE LOCKED_^1_%SAZ UNTFIS_)NO, UNTHREAD FIS AND RELEASE_^1*_]_^1SETCLK LDA* (AFDINT)_$MM ERROR OR FILE LOCKED, DONT RELEASE_^1_%STA- FILCLK,I_$RESET CLOCK IN HOPE THAT NEXT TIME WILL BE OK_^1CKNFIS JMP* CNTFIS_'CHECK NEXT FIS_^1_%EJT_V63*1348_^1*_*UNTHREAD THE CORE FIS FRO€€M THREAD_^1UNTFIS LDQ* LSTPTR_'Q = POINTER TO LAST FIS_^1*_]_^1FNDFIS IIN 0_,FIND NEW LAST FIS POINTER IF INTERRUPTED_^1_%LDA- (ZERO),Q_^1_%EOR- I_^1_%SAZ RMVFIS_'FOUND, REMOVE FIS_^1_%EIN 0_^1_%LDQ- (ZERO),Q_^1_%JMP* FNDFIS_'CONTINUE SEARCH_^1*_]_^1RMVFIS LDA- (I)_*REMOVE FIS_^1_%STA- (ZERO),Q_^1*_]_^1RELFIS RELEAS 0_*RELEASE CORE FIS_^1*_83 CARDS DELETED_574*1785_^1_%JMP CNXF€€IS_'CHECK IF AT END OF CORE FIS THREAD_^1_%EJT_]_^1*_*SAVE FILE SPACE LIST, IF CONDITIONS ARE MET_^1*_]_^1SAVFSL IIN 0_^1_%LDA* (AFSTLO)_$CHECK IF ANY FIS,S IN CORE_^1_%SAN RESCH_*YES_^1_%LDA* (ADRARQ)_$CHECK IF FILE MANAGER ACTIVE_^1_%SAN RESCH_*YES_^1_%LDA* (AFSLEN)_$CHECK IF FILE SPACE LIST HAS CHANGED_^1_%SAZ FSLCHG_)YES_^1RESCH JMP* RESCHK_'NO, RESCHEDULE RELEASE SPACE_*7€€8*1922_^1*_]_^1FSLCHG SET A_,FILE SPACE LIST HAS CHANGED, WRITE ON MM IMAGE_^1_%STA* (ADRARQ)_'SET FILE MANAGER ACTIVE TEMPORARILY_^1*_]_^1_%RTJ- (AMONI)_%WRITE FILE SPACE LIST TO MM IMAGE_^1_%ADC D+$400+$10*RSRPL+RSCPL_>68*1511_^1_%ADC CKWMME_^1_%ADC 0_^1_%ADC $8C2_^1_%ADC FSLLTH_^1_%ADC FSLIST_^1FSLMMA ADC 0_^1_%ADC 0_^1_%JMP- (ADISP)_^1*_]_^1CKWMME SQM SCHDFM_!*****MAS€€S MEMORY ERROR, EXIT WITHOUT SAVING FSLIST_^1*_]_^1_%SET A_,RESET FILE SPACE LIST CHANGE FLAG_^1_%STA* (AFSLEN)_^1*_]_^1SCHDFM RTJ- (AMONI)_%REACTIVATE THE FILE MANAGER_^1_%ADC D+$1200+RSCPL_G68*1511_^1_%ADC FILREQ_^1_%SPC 2_Q74*1785_^1*_8CHECK IF RACSPC MUST BE RESCHEDULED 74*1785_^1*_]74*1785_^1RESCHK LDA+ TMRTYP_'CHECK IF SYSTEM HAS A TIMER_%**MSOS 4.1**_^1_%SAN RESCHD_'YE€€S_A74*1785_^1_%SPC 1_Q74*1785_^1*_8CHECK IF NECESSARY TO CYCLE THRU AGIN74*1785_^1_%IIN 0_Q74*1785_^1_%LDA* RSAFLG_L74*1785_^1_%INA -1_P74*1785_^1_%STA* RSAFLG_L74*1785_^1_%EIN 0_Q74*1785_^1_%SAZ EXIT_N74*1785_^1_%JMP RACSPC_'CYCLE THRU RACSPC AGAIN_-74*1785_^1_%EJT_]_^1*_*EXIT FROM RELEASE SPACE PROGRAM_^1*_]_^1*_81 CARD DELETED_674*1785_^1*_*RESCHEDULE RELEASE SPACE PROGRAM€Ψ AND EXIT_^1RESCHD RTJ- (AMONI)_^1_%ADC $1000+TUNITS*$10+RSCPL+D_<78*1925_^1_%ADC RACSPC_^1_%ADC TIMPER_^1EXIT_!JMP- (ADISP)_K74*1785_^1_%SPC 2_Q74*4785_^1RSAFLG NUM 0_,RACSPC ACTIVE FLAG_274*4785_^1_%END_]_^__ΨPSRHFIS CSY/ F03 P€1_%NAM SRHFIS_'DECK-ID F03 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_8SEARCH FIS ON MM FOR FILE NO._^1*_8INPUT IS FILE NUMBER_^1*_]74*1786_^1*_*PROG CHECKS IF INPUT FILE NUMBER IS THE SAME_%74*1786_^1*_*AS THE FILE NUMBER OF TH€€E LAST FIS RETRIEVED_%74*1786_^1*_*BY SRHFIS. IF SO, DIRECTLY READS IN FIS_*74*1786_^1*_*BLOCK WITHOUT HAVING TO SEARCH MASS MEMORY._'74*1786_^1*_]_^1*_8PROG CHECKS TO SEE IF FIS DIRECTORY IN CORE_^1*_8IF NOT,ALLOCATES SPACE AND READS IN_^1*_]_^1*_8GENERATE SCATTER CODE AND LOOK TO SEE IF_^1*_8INDEX DEFINED_^1*_]_^1*_8IF YES, READ FIS BLOCK INTO PROGRAM BUFFER_^1*_8AND SEARCH_!FOR€€ FILE NO. CONTINE DOWN THREAD_^1*_8UNTIL FOUND. THEN ALLOCATE SPACE FOR CORE FIS_^1*_8THREAD INTO OTHER CORE FIS AND BUILD THIS_^1*_8CORE FIS_^1*_]_^1*_8RETURNS_^1*_8IF FOUND, A IS ZERO_^1*_8Q CONTAINS ADDRESS OF CORE FIS JUST BUILT_^1*_]_^1*_8IF NOT FOUND, A IS NON-ZERO AND CONTAINS_^1*_9SCATTER INDEX(9-15) AND FIS BLOCK INDEX(0-8)_^1*_9INTO FIS DIRECTORY._^1*_8Q CONTAINS FIS BLOC€€K POINTER IN FIS DIRECTORY_^1_%EJT_]_^1*_*ENTRY POINTS_^1_%ENT SRHFIS_'SEARCH FOR FIS ON MASS MEMORY (FIS BLOCKS)_^1_%ENT FILBLK_'FILE BLOCK FOR FIS BLOCKS AND FRB BLOCKS_^1_%ENT NWFBLK_'NUMBER OF WORDS IN FILE BLOCK_^1_%ENT FIBSIZ_'FIS BLOCK SIZE IN WORDS (N*96)_^1_%SPC 2_^1*_*EXTERNALS_^1_%EXT FISLU_(LOGICAL UNIT OF FIS DIRECTORY AND BLOCKS_^1_%EXT FIDSEC_'FIS DIRECTORY SE€€CTOR ADDRESS_^1*_]_^1_%EXT FSTLOC_'FIS CORE BLOCK THREAD POINTER_^1_%EXT FIDLOC_'CORE LOC OF FIS DIRECTORY_^1_%EXT FDTINT_'TIME OUT PERIOD FOR CORE BLOCK DATA_^1_%EXT NWFISD_'NUMBER OF WORDS IN FIS DIRECTORY_^1_%EXT NWFISB_'NUMBER OF WORDS IN FIS BLOCK_^1*_]_^1_%EXT FMRERR_'FILE MANAGER REQUEST ERROR ENTRY_^1_%EXT GETSPC_'SPACE REQUEST SUB_^1_%EXT MMREAD_'MASS STORAGE READ €€SUB_^1_%EJT_]_^1*_*EQUIVALENCES_^1*_1COMMUNICATION REGION CONSTANTS_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ONEBIT($23)_!ONE BIT TABLE_^1_%EQU DISP($EA)_#DISPATCHER ADDRESS_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTOR€€Y HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_€€#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03€€) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENG€€TH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1*_1FIS BLOCK SIZE IN WORDS_^1_%EQU FIBSIZ€€(3*WRDSEC)_^1_%EQU NWFBLK(FIBSIZ)_^1_%EJT_]_^1*_*SEARCH FOR FIS ON MASS MEMORY (FIS BLOCKS)_^1*_]_^1SRHFIS 000 000_^1_%STQ FN_+FILE NO._<74*1786_^1_%TRQ A_Q74*1786_^1_%SUB PREFN_(CHECK IF SAME AS LAST RETRIEVED_$74*1786_^1_%SAN SF05_)NO_B74*1786_^1_%JMP SETUP_(YES, GO SETUP TO READ FIS, S FIB_#74*1786_^1*_]74*1786_^1SF05_!LDA (AFDSEC)_$SETUP FIS DIRECTORY SECTOR_*74*1786_^1€€_%STA* FDSC_N74*1786_^1_%LDA (ANWFIB)_$SETUP NUMBER OF WORDS IN FIS BLOCK_!74*1786_^1_%STA* NWFB_^1*_]_^1_%IIN 0_,CHECK IF FIS DIRECTORY IN CORE_^1_%LDQ* (AFIDLO)_^1_%SQZ SF10_^1_%JMP* SF120_*YES, RESET CLOCK_^1*_]_^1SF10_!LDA* (ANWFID)_^1_%STA* NWFD_)SETUP NUMBER OF WORDS IN FIS DIRECTORY_^1*_]_^1_%RTJ* (AGETSP)_$GET SPACE FOR FIS DIRECTORY_^1_%STQ* FIDL_^1_%STQ* MMERR1+2_'(SET€€ FOR RELEASE IF MASS MEMORY ERROR)_^1*_]_^1_%RTJ* (AMMRED)_$READ IN FIS DIRECTORY_^1FIDL_!ADC 0_^1NWFD_!NUM 0_^1_%ADC FISLU_^1_%NUM 0_^1FDSC_!NUM 0_^1_%SQP SF110_^1_%SPC 2_^1MMERR1 RELEAS 0_$*****MASS MEMORY ERROR(RELEASE FIS DIRECTORY SPACE)_^1*_]_^1MMERR2 LDA- ONEBIT+7_$SET BIT 7 AND RETURN TO CALLER_^1_%JMP FMRERR_^1*_]_^1SF110 IIN 0_,SET FIDLOC TO INDICATE FIS DIRECTO€€RY IN CORE_^1_%LDQ* FIDL_^1_%STQ* (AFIDLO)_^1*_]_^1SF120 LDA* (AFDTIN)_$SET (OR RESET) FILE DIRECTORY CLOCK_^1_%EIN 0_^1_%STA- 1,Q_^1_%EJT_]_^1_%ENA -2_+GENERATE SCATTER CODE_^1_%ADD* (ANWFID)_^1_%ARS 1_^1_%STA* TEMP_)SCATTER INDEX = 2*REM((FN-1)/((NWFISD-2)/2))+2_^1_%CLR Q_^1_%LDA* FN_^1_%INA -1_^1_%DVI* TEMP_^1_%QLS 1_^1_%INQ 2_^1_%STQ* INDEX_(SAVE SCATTER INDEX_^1_%ADQ* €€(AFIDLO)_^1_%LDA- 1,Q_*GET INDEX AND SAVE IT_^1_%STA* TEMP_^1_%LDA* INDEX_(SET SCATTER INDEX(9-15) AND FIB INDEX(0-8)_^1_%ALS 9_^1_%EOR* TEMP_^1_%STA* INDEX_^1_%LDA- (ZERO),Q_$GET FIS BLOCK SECTOR POINTER_^1_%STA* POINTR_'SAVE IT_^1_%SAN RDAGN_^1_%JMP* NOFILE_'NO FIS FOR THIS SCATTER CODE_^1*_]_^1RDAGN STA* FIB_*STORE FIS BLOCK SECTOR POINTER_^1_%RTJ* (AMMRED)_$READ IN FIS BLOCK€€_^1_%ADC FIBLOC_^1NWFB_!NUM 0_^1_%ADC FISLU_^1_%NUM 0_^1FIB_"ADC 0_^1_%SQP SF310_^1_%JMP* MMERR2_!*****MASS MEMORY ERROR_^1*_]_^1SF310 LDQ* TEMP_)BLOCK IN CORE_^1_%LDA* FIBLOC+FILENO-FH,Q_^1_%SUB* FN_+CHECK IF FILE NUMBER MATCHES_^1_%SAZ SF400_*YES, FIS FOUND_^1*_]_^1_%LDA* FIBLOC+IXNFIS-FH,Q_^1_%AND- ONEMSK+8_$GET INDEX WITHIN FIS BLOCK_^1_%STA* TEMP_)CHECK IF NO NEXT POIN€€TER TO MORE FIS,S_^1_%LDA* FIBLOC+SANFIS-FH,Q_^1_%SAN SF330_^1_%JMP* NOFILE_'NO NEXT FIS, FILE NOT FOUND_^1*_]_^1SF330 SUB* FIB_*NEXT FIS IN SAME FIS BLOCK_^1_%SAN SF340_^1_%JMP* SF310_(YES, CHECK IT_^1*_]_^1SF340 ADD* FIB_*SAVE NEW SECTOR OF FIS AND GET IT_^1_%JMP* RDAGN_^1_%EJT_]_^1*_]_^1SF400 LDA- I_,FOUND FIS, SAVE I REGISTER_^1_%STA* ISAVE_^1_%STQ- I_,I = ADDRESS OF FIS I€€N CORE FIS BLOCK_^1_%STQ* PREADR_'SAVE ALSO IN PREADR_174*1786_^1_%ENA FH+FISSIZ_^1_%RTJ* (AGETSP)_$GET SPACE FOR CORE FIS_^1*_]_^1_%LDA* FIB_*SET SECTOR AND INDEX IN CORE FIS_^1_%STA- SECFIS,Q_^1_%LDA- I_^1_%ALS 7_^1_%STA- IDXCHG,Q_^1_%CLR A_,CLEAR KIS DIRECTORY ADR AND FILE COMBINATION_^1_%STA- ADRKID,Q_^1_%STA- FISCOM,Q_^1_%LDA* (AFDTIN)_$SET FILE CLOCK_^1_%STA- FILCLK,Q_^1*_€€]_^1_%STQ* POINTR_'SAVE CORE FIS POINTER_^1_%INQ FH_^1_%STQ* TEMP_^1_%ENQ FISSIZ_^1SF410 INQ -1_^1_%LDA* FIBLOC,B_$MOVE MM BLOCK TO CORE FIS BLOCK_^1_%STA* (TEMP),Q_^1_%SQZ SF420_^1_%JMP* SF410_^1*_]_^1SF420 LDQ* POINTR_'THREAD FIS ONTO CORE FIS THREAD_^1_%IIN 0_^1_%LDA* (AFSTLO)_^1_%STA- (ZERO),Q_^1_%EIN 0_^1_%STQ* (AFSTLO)_^1_%LDA* ISAVE_(RESTORE I REGISTER_^1_%STA- I_^1_€€%LDA* FN_+SAVE THIS FILE NUMBER_/74*1786_^1_%STA* PREFN_M74*1786_^1_%LDA* FIB_*SAVE THIS FIB ADDRESS_/74*1786_^1_%STA* PREFIB_L74*1786_^1_%CLR A_,FILE FOUND (EXIT WITH A=0, Q=CORE FIS ADR)_^1_%JMP* (SRHFIS)_^1_%SPC 2_^1NOFILE LDA* INDEX_(A = SCATTER(9-15) AND FIB(0-8) INDEXES IN FISD_^1_%LDQ* POINTR_'Q = FIS BLOCK SECTOR POINTER IN FIS DIRECTORY_^1_%JMP (SRHFIS)_J74*1786_^1_%EJT€€_]_^1*_]_^1FN_#NUM 0_0FILE NO._^1TEMP_!NUM 0_^1ISAVE NUM 0_^1INDEX NUM 0_^1POINTR NUM 0_^1*_]_^1AFSTLO ADC FSTLOC_^1AFIDLO ADC FIDLOC_^1AFDTIN ADC FDTINT_^1AFDSEC ADC FIDSEC_^1ANWFID ADC NWFISD_^1ANWFIB ADC NWFISB_^1AGETSP ADC GETSPC_^1AMMRED ADC MMREAD_^1PREFIB NUM 0_Q74*1786_^1PREFN NUM 0_Q74*1786_^1PREADR NUM 0_Q74*1786_^1_%SPC 2_Q74*1786_^1*_*CURRENT FILE NU€€MBER IS SAME AS PREVIOUS._*74*1786_^1*_*SETUP TO DIRECTLY READ IN FIB._474*1786_^1SETUP LDA* PREADR_'RESET ADRESS OF FIS IN CORE FIS BLOCK74*1786_^1_%STA* TEMP_N74*1786_^1_%LDA* PREFIB_'SET A TO FIB MM ADDRESS_-74*1786_^1_%JMP RDAGN_(GO READ FIB CONTAINING FIS_*74*1786_^1_%SPC 2_Q74*1786_^1*_]_^1FILBLK EQU FILBLK(*)_#FILE BLOCK_^1FIDLOC BZS FIBLOC(FIBSIZ) FIS BLOCK BUFFER_^1*€$_]_^1_%END_]_^__PREVIOUS._*74*1786_^$PSPACE CSY/ A02 P€1_%NAM SPACE_(DECK-ID A02 MSOS 4.1_-SUMMARY-079_^1*_$SPACE REQUEST PROCESSOR, ALLOCATABLE SPACE AND RESTART_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT_!SPACE_^1_%EQU_!SPACE(*)_^1 SPC 1_]_^1 SPC 1_]_^1********************************************€€***************************_^1*_8ENTRY POINTS_^1***********************************************************************_^1_%ENT T10_*SPACE REQUEST PROCESSOR_^1_%ENT STMSV4_'START OF SPACE PROGRAM_^1_%ENT T17_*PARTITION CORE REQUEST PROCESSOR_^1_%ENT AREAC_(TOTAL LENGTH OF ALLOCATABLE_^1_%ENT ALCLGH_'ALLOCATABLE CORE LENGTH TABLE_^1**********************************************€€*************************_^1*_8EXTERNALS_^1***********************************************************************_^1_%EXT CKTHRD_'CHECK THREAD FOR NON-ZERO ENTRY(RW SUB.)_^1_%EXT SAVLU_(ENTRY IN RW PROGRAM FOR SPACE PROCESSOR_^1_%EXT RPMASK_'REQUEST PRIORITY MASK_^1_%EXT LVLSTR_'LEVEL START TABLE_^1_%EXT LEND_)LOCATION CONTAINING END OF ALLOCATABLE_^1_%EXT CALTHD_'LOCATION C€€ONTAINING NO. OF AVAIL ALLOCATABLE_^1_%EXT DTIMER_'DIAGNOSTIC TIMER PROGRAM_^1_%EXT IDLE_)IDLE PROGRAM_^1_%EXT UPTOD_(TIME OF DAY PROGRAM_.**MSOS 4.1**_^1_%EXT H15721_'1572-1 HISTORY TABLE_-**MSOS 4.1**_^1_%EXT D15721_'1572-1 BASIC W,E,S WORD - DATA_"**MSOS 4.1**_^1_%EXT E15721_'1572-1 BASIC W,E,S WORD - FUNCTION**MSOS 4.1**_^1_%EXT E1573_(1573 BASIC W,E,S WORD_,**MSOS 4.1**€€_^1_%EXT O1572_(1572 OSCILLATOR FREQ./CLOCK FREQ. **MSOS 4.1**_^1_%EXT E1572F_'FUNCTION CODE TO ENABLE 1572_$**MSOS 4.1**_^1_%EXT E1572_(1572 BASIC W,E,S WORD_,**MSOS 4.1**_^1_%EXT EQ3644_'FUNCTION CODE FOR COMM. MUX_%**MSOS 4.1**_^1_%EXT TMRTYP_'TIMER TYPE DESIGNATOR_,**MSOS 4.1**_^1_%EXT LOG1A_(TABLE OF P.D.T. ADDRESSES_(**MSOS 4.1**_^1_%EXT JOBENT_'INDEX TO JOBENT DIRECTO€€RY ENTRY_^1_%EXT LIBEDT_'INDEX TO LIBEDT DIRECTORY ENTRY_^1_%EXT PROTEC_'INDEX TO PROTEC DIRECTORY ENTRY_^1_%EXT SYSLVL_'SYSTEM LEVEL (*S STATEMENT)_^1_%EXT K65T10_'ENTRY TO PARTITION CORE DRIVER (PRTCDR)_^1_%EXT IUP_*STANDARD INPUT (TRVEC)_^1_%EXT INPTV4_'INPUT UNIT FOR JOB PROCESSOR (TRVEC)_^1_%EXT N1,N2,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15 **MSOS 4.1**_^1_%EXT LSIZV€€4_'OVERLAY LENGTH OF LIBEDT_+**MSOS 4.0_^1_%EXT PSIZV4_'OVERLAY LENGTH OF PROTECT PROCESSOR **MSOS 4.0_^1_%EXT EFLOCK_'LOCK OUT LOGGER FLAG_-**MSOS 4.1**_^1_%EXT MIBX_)LOCK OUT MIPRO_^1_%EXT TDFUNC_'TIME/DATE FUNCTION ORDINAL_'**MSOS 4.1**_^1_%EXT SYSMON_'MONTH SYSTEM WAS LAST BUILT_%**MSOS 4.1**_^1_%EXT SYSDAY_'DAY_!SYSTEM WAS LAST BUILT_%**MSOS 4.1**_^1_%EXT SYSYER_'YEAR €€SYSTEM WAS LAST BUILT_%**MSOS 4.1**_^1_%EXT SYSID_(SYSTEM IDENTIFICATION BUFFER_$**MSOS 4.1**_^1_%EXT FSLIST_'START OF FILE SPACE LIST_)**MSOS 4.1**_^1_%EXT ADRFMS_'BEGINNING OF FILE SPACE-LIB. UNIT **MSOS 4.1**_^1_%EXT BEGLU1_'BEGINNING OF FILE SPACE-UNIT 1_"**MSOS 4.1**_^1_%EXT BEGLU2_'BEGINNING OF FILE SPACE-UNIT 2_"**MSOS 4.1**_^1_%EXT BEGLU3_'BEGINNING OF FILE SPACE-UNIT€€ 3_"**MSOS 4.1**_^1_%EXT BEGLU4_'BEGINNING OF FILE SPACE-UNIT 4_"**MSOS 4.1**_^1_%EXT BEGLU5_'BEGINNING OF FILE SPACE-UNIT 5_"**MSOS 4.1**_^1_%EXT BEGLU6_'BEGINNING OF FILE SPACE-UNIT 6_"**MSOS 4.1**_^1_%EXT BEGLU7_'BEGINNING OF FILE SPACE-UNIT 7_"**MSOS 4.1**_^1_%EXT BEGLU8_'BEGINNING OF FILE SPACE-UNIT 8_"**MSOS 4.1**_^1_%EXT NUMFS0_'LENGTH_"OF FILE SPACE-LIB. UNIT **MSOS 4€€.1**_^1_%EXT NUMFS1_'LENGTH_"OF FILE SPACE-UNIT 1_"**MSOS 4.1**_^1_%EXT NUMFS2_'LENGTH_"OF FILE SPACE-UNIT 2_"**MSOS 4.1**_^1_%EXT NUMFS3_'LENGTH_"OF FILE SPACE-UNIT 3_"**MSOS 4.1**_^1_%EXT NUMFS4_'LENGTH_"OF FILE SPACE-UNIT 4_"**MSOS 4.1**_^1_%EXT NUMFS5_'LENGTH_"OF FILE SPACE-UNIT 5_"**MSOS 4.1**_^1_%EXT NUMFS6_'LENGTH_"OF FILE SPACE-UNIT 6_"**MSOS 4.1**_^1_%EXT NUMFS7_'LE€€NGTH_"OF FILE SPACE-UNIT 7_"**MSOS 4.1**_^1_%EXT NUMFS8_'LENGTH_"OF FILE SPACE-UNIT 8_"**MSOS 4.1**_^1***********************************************************************_^1*_8EQUIVALENCES_^1***********************************************************************_^1_%EQU LUCORE(1)_#LOGICAL UNIT OF CORE ALLOCATOR_^1_%EQU VR(3)_(RETURN IN VOLATILE_^1_%EQU VPL(4)_'PRIORITY IN VO€€LATILE_^1_%EQU ZERO($22)_#ZERO_^1_%EQU ONEBIT($23)_^1_%EQU VTMP(7)_%TEMP IN VOLATILE_^1_%EQU LPMSK(2)_^1_%EQU AMONI($F4)_^1_%EQU FOUR($25)_^1_%EQU SYDIR($EB)_^1_%EJT_]_^1*_]_^1*_*RW REQUEST PROCESSOR MUST BE PRESENT_^1*_*FOR OPERATION OF THIS MODULE._^1*_]_^1*_*LUCORE MUST BE EQUATED TO THE LOGICAL_^1*_*UNIT ASSIGNED TO THE CORE ALLOCATOR._^1_%SPC 1_^1_%EQU T17(*)_K**MSOS €€4.0_^1T10_"TRA Q_^1_%LDA- 8,I_N**MSOS 4.0_^1_%SAM COR1_)SKIP IF INDIRECT REQ_/**MSOS 4.0_^1_%ENA 5_/INCREMENT RETURN ADDRESS_^1*_FFOR DIRECT_^1_%ADD- VR,I_7CALL_^1_%STA- VR,I_^1COR1_!LDA- (ZERO),Q_(GET REQUEST PRIORITY_^1_%AND RPMASK_^1_%STA- VPL,I_^1_%RTJ CKTHRD_*CHK FOR ZERO THREAD LOC._^1_%LDA- VTMP,I_'CHECK REQ CODE_5**MSOS 4.0_^1_%INA -10_N**MSOS 4.0_^1_%SAZ CORZ_)SPACE€€ REQUEST_6**MSOS 4.0_^1_%JMP K65T10_'A PARTITIONED REQ_2**MSOS 4.0_^1CORZ_!ENQ LUCORE_K**MSOS 4.0_^1_%JMP SAVLU_+SET UP LU FOR ALLOCATOR_^1_%SPC 2_N**MSOS 4.1**_^1TOIDLE ENQ 1_,ENTER TIME/DATE Q CODE_+**MSOS 4.1**_^1_%SCHDLE (TDFUNC),4_B**MSOS 4.1**_^1_%JMP+ IDLE_)GO TO IDLE LOOP_2**MSOS 4.1**_^1_%SPC 2_^1**********************************************************************€€*_^1AREAC ADC 0_,TOTAL LENGTH OF ALLOCATABLE CORE_^1_%ADC ($7FFF)_%THREAD_^1***********************************************************************_^1_%EJT_]_^1*_$THIS IS THE RESTART ROUTINE._"ITS PURPOSE IS -_^1*_]_^1*_$1._!SET UP THE CORE ALLOCATION TABLE_^1*_$2._!PROTECT AND UNPROTECT APPROPRIATE CORE LOCATIONS_^1*_$3._!SET UP THE SYSTEM DIRECTORY ENTRY OF CERTAIN JOB_^1*_*PR€€OCESSOR MODULES_^1*_$4._!START THE SYSTEM TIMER, AND INITIATE THE DIAGNOSTIC_^1*_*TIMER AND TIME-OF-DAY PROGRAMS_^1*_$5._!PRINT THE SYSTEM PSR LEVEL MESSAGE_^1*_$6._!REQUEST THAT THE PROGRAM PROTECT SWITCH BE ENABLED_^1*_*IF IT IS NOT_^1*_$7._!PRINT THE SYSTEM IDENTIFICATION_^1*_$8._!PRINT THE SYSTEM CORE SIZE MODE_^1*_$9._!PERFORM A VALIDITY CHECK ON THE SYSTEM FILES (IF ANY)_^1*_€€$10. INITIATE A REQUEST FOR THE TIME AND DATE_^1*_$11. TRANSFER CONTROL TO THE SYSTEM IDLE LOOP_^1_%SPC 2_^1*_$SET UP THE CORE ALLOCATION TABLE_^1*_]_^1RESTRT ENQ 15_^1_%LDA =XAREAC_^1SETTBL INQ -1_+SETUP ALLOCATION TABLE (LVLSTR)_^1_%STA- I_^1_%LDA ALCLGH,Q_^1_%SAZ CHKEND_'NO ALLOCATION, SEE IF DONE_^1_%INA 2_^1CHKEND ADD- I_^1_%SQZ SETEND_^1_%STA LVLSTR,Q_^1_%JMP* SETT€€BL_^1*_]_^1SETEND INA 1_,SETUP END OF PROTECTED ALLOCATABLE AREA_^1_%STA LEND_^1_%EJT_]_^1_%ENQ 10_M**MSOS 4.1**_^1_%LDQ- ($E9),Q_%IS UNPROTECTED IN PART 1_)**MSOS 4.1**_^1_%SQN SKIPIT_'YES_^1_%TRA Q_,IS THE SIZE OF ALLOCATABLE GREATER_^1_%SUB- $F7_*THAN SPECIFIED BY THE INITIALIZER_^1_%SAM SKIPIT-1_$NO_^1_%STQ- $F7_*YES, SPECIFY THE NEW SIZE_^1_%STQ- $ED_^1_%TRQ A_^1SKIPIT €€SUB =XAREAC-1_^1_%STA* AREAC_(SETUP TOTAL AVAILABLE PROTECTED ALLOCATABLE_^1_%STA CALTHD_^1_%STA MIBX_)LOCK OUT MIPRO_^1_%STA EFLOCK_'LOCK OUT LOGGER_2**MSOS 4.1**_^1_%LDA* LOC0_)SET UP LOCATION 0_^1_%STA- (ZERO)_^1_%EJT_]_^1*_$PROTECT AND UNPROTECT APPROPRIATE CORE LOCATIONS_^1_%SPC 2_^1_%LDQ- $F5_L**MSOS 4.1**_^1SPBLOP SPB 0_,PROTECT ALL OF AVAILABLE CORE_%**MSOS 4.0_^1_%SQ€€Z CLRPB_(SKIP IF ALL UNPROTECTED_,**MSOS 4.0_^1_%INQ -1_O**MSOS 4.0_^1_%JMP* SPBLOP_K**MSOS4.0*_^1CLRPB LDQ- $F7_N**MSOS4.0*_^1_%INQ 1_^1RSTRT1 CPB 0_,CLEAR JOB AREA PROTECT BITS_^1_%INQ 1_^1_%LDA- $F6_*END OF AREA + 1_^1_%EAQ A_^1_%SAZ RSTRT2_^1_%JMP* RSTRT1_^1_%SPC 1_^1RSTRT2 LDQ_!=N$F3_'CLEAR SPECIAL COMMUNICATION AREA_^1_%CPB 0_^1_%INQ_!$C_^1_%CPB_!0_^1_%INQ -$3A_)UN€€PROTECT FORTRAN AREA ($C5-$E5)_^1RSTRT3 CPB_!0_^1_%LDA_!=N$E5_^1_%EAQ_!A_^1_%INQ_!1_^1_%SAZ_!1_^1_%JMP* RSTRT3_^1_%LDQ- $F4_)UNPROTECTED REQUEST ENTRY_^1_%CPB_!0_+POINT_^1_%SPC_!1_^1_%LDA- $F2_)UNPROTECT PRESET LOCATIONS_^1_%STA- I_^1_%ENQ_!2_^1RSTRT4 TCQ_!A_^1_%ADD- $F1_)LENGTH OF TABLE OF PRESETS_^1_%SAM_!RSTRT6_^1_%STQ* RSTRT5_^1_%LDQ- 1,B_^1_%CPB_!0_^1_%LDQ* RSTRT5_^1_%€€INQ_!4_^1_%JMP* RSTRT4_^1_%SPC 1_^1RSTRT5 NUM 0_,COUNTER_^1_%EJT_]_^1*_$SET UP SYSTEM DIRECTORY FOR JOBENT, LIBEDT, AND PROTEC_^1_%SPC 2_^1SDJOB ADC JOBENT_^1SDLIB ADC LIBEDT_^1SDPRO ADC PROTEC_^1LOC0_!ADC $18FF_^1_%SPC 2_^1RSTRT6 LDQ- SYDIR_^1_%ADQ* SDJOB_^1_%ENA $10_*SET PRIORITY OF JOBENT TO 1_^1_%STA- (ZERO),Q_^1_%LDQ- SYDIR_^1_%ADQ* SDLIB_(SET LIMITS FOR INITIAL L€€OAD_^1_%LDA =XLSIZV4_$LIBEDT LOAD LENGTH_1**MSOS 4.0_^1_%STA- (FOUR),Q_G**MSOS 4.1*_^1_%LDQ- SYDIR_^1_%ADQ* SDPRO_(SET LIMITS FOR INITIAL LOAD_^1_%LDA =XPSIZV4_$PROTEC LOAD LENGTH_1**MSOS 4.0_^1_%STA- (FOUR),Q_^1_%LDA- $F9_*GET STANDARD INPUT_1**MSOS 4.0_^1_%ADD- $2F_*ADD ASCII MODE_5**MSOS 4.0_^1_%STA IUP_N**MSOS 4.0_^1_%STA INPTV4_'SET UP FOR JOB PROCESSOR INPUT_$**MSOS 4.0_^€€1_%EJT_]_^1*_$START THE SYSTEM TIMER_^1_%SPC 2_^1*_$TIMER INITIATION CODING_=**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_'TIMER STARTING SEQUENCE IS BASED ON THE TIMER TYPE **MSOS 4.1**_^1*_,TYPE_.CODE_6**MSOS 4.1**_^1*_,NONE_00_7**MSOS 4.1**_^1*_,1572_01_7**MSOS 4.1**_^1*_,1573_02_7**MSOS 4.1**_^1*_,1572-1 LST_*3_7**MSOS 4.1**_^1*_,1572-1 SRG_*4_7**MSOS 4.1**_^1*_,364-4 COMM. MUX._#5_7**M€€SOS 4.1**_^1*_,PSEUDO_.6_7**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1_%LDQ+ TMRTYP_'GET TIMER TYPE_3**MSOS 4.1**_^1_%LDQ* TIMVCT,Q_$GET VECTOR FOR JUMP_.**MSOS 4.1**_^1_%JMP- (ZERO),Q_$GO TO PROPER PROCESSOR_+**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$TIMER PROCESSOR VECTOR TABLE_8**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1TIMVCT ADC REJ_*0 = NO TIMER_5**MSOS 4.1**_^1_%ADC T1572_(1 = 1572€€_9**MSOS 4.1**_^1_%ADC T1573_(2 = 1573_9**MSOS 4.1**_^1_%ADC T72LST_'3 = 1572-1 LST_3**MSOS 4.1**_^1_%ADC T72SRG_'4 = 1572-1 SRG_3**MSOS 4.1**_^1_%ADC T3644_(5 = 364-4 COMM. MUX._-**MSOS 4.1**_^1_%ADC CHKTMR_'6 = PSEUDO TIMER_1**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572 TIMER STARTING CODE_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1T1572 LDQ+ E1572_(FUNCTION CODE_4**MSOS 4.1**_^1_%LDA+ E€€1572F_'ENABLE 1572_6**MSOS 4.1**_^1_%OUT REJ-*_J**MSOS 4.1**_^1_%INQ -1_+DATA CODE_8**MSOS 4.1**_^1_%LDA+ O1572_(REGISTER COUNTS_2**MSOS 4.1**_^1TOUT_!OUT REJ-*_J**MSOS 4.1**_^1_%CLR Q_,SET NO ACTION FLAG_/**MSOS 4.1**_^1_%JMP* CHKTMR_'START DIAGNOSTIC TIMER_+**MSOS 4.1**_^1_%EJT_]_^1*_$1573 TIMER STARTING CODE_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1T1573 LDQ+ E1573_(FUNCTION CODE_€€4**MSOS 4.1**_^1_%INQ -1_M**MSOS 4.1**_^1_%LDA- ONEBIT+15_#$8000 = ENABLE_3**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572-1 LST STARTING CODE_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1T72LST LDQ+ E15721_'FUNCTION CODE_4**MSOS 4.1**_^1_%ENA $38_*AND MASK FOR SRG FUNCTION BITS_"**MSOS 4.1**_^1_%IIN 0_N**MSOS 4.1**_^1_%AND+ H15721_I**MSOS 4.1**_^1_%INA €€2_,2 = ENABLE INTERRUPT_-**MSOS 4.1**_^1_%STA+ H15721_'RESTORE HISTORY WORD_-**MSOS 4.1**_^1_%EIN 0_N**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572-1 SRG STARTING CODE_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1T72SRG LDQ+ E15721_'FUNCTION CODE_4**MSOS 4.1**_^1_%ENA 7_,AND MASK FOR LST FUNCTION BITS_"**MSOS 4.1**_^1_%IIN 0_N**MSOS 4.1**_^1_%AND+ H15721€€_I**MSOS 4.1**_^1_%INA $10_*$10 = ENABLE INTERRUPT_+**MSOS 4.1**_^1_%STA+ H15721_'RESTORE HISTORY WORD_-**MSOS 4.1**_^1_%EIN 0_N**MSOS 4.1**_^1_%OUT REJ-*_J**MSOS 4.1**_^1_%LDQ+ D15721_'DATA CODE_8**MSOS 4.1**_^1_%LDA+ O15721_'REGISTER COUNTS_2**MSOS 4.1**_^1_%EXT O15721_'SRG TIME BASE/CLOCK FREQ._(**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_]_^1*_$364-4 COMMUNIC€€ATIONS MUX. TIMER_5**MSOS 4.1**_^1*_]_^1T3644 LDQ+ EQ3644_'FUNCTION CODE_4**MSOS 4.1**_^1_%ENA 6_,6 = ENABLE CLOCK_1**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1_%EJT_Q**MSOS 4.1**_^1*_$INITIATE THE DIAGNOSTIC TIMER AND TIME-OF-DAY PROGRAMS_^1_%SPC 2_^1CHKTMR LDA* RSTRTA_^1_%EOR- LPMSK+15_^1_%SAN 1_^1_%JMP* RSTRTT_'SKIP IF DTIMER NOT PRESENT_'**MSOS 4.1**_^1_%SPC 1€€_^1_%RTJ- (AMONI)_%START DIAG TIMER_^1_%NUM $5206_L***MSOS4.0_^1RSTRTA ADC DTIMER_^1_%SPC 1_^1RSTRTT LDA* TTRSTR_I**MSOS 4.1**_^1_%EOR- LPMSK+15_G**MSOS 4.1**_^1_%SAN 1_,SKIP IF TOD PRESENT_.**MSOS 4.1**_^1_%JMP* RSTRT9_I**MSOS 4.1**_^1_%SPC 1_^1_%RTJ- (AMONI)_%START TOD PROGRAM_0**MSOS 4.1**_^1_%NUM $5206_J**MSOS 4.1**_^1TTRSTR ADC UPTOD_J**MSOS 4.1**_^1_%JMP* RSTRT9_I**MSO€€S 4.1**_^1_%EJT_]_^1*_$TIMER REJECT MESSAGE_^1_%SPC 2_^1REJ_"NOP 0_^1_%LDQ =XLOG1A_H**MSOS 4.1**_^1_%LDQ- 1,Q_L**MSOS 4.1**_^1_%LDA- 13,Q_K**MSOS 4.1**_^1_%AND- LPMSK+15_G**MSOS 4.1**_^1_%EOR- ONEBIT+15_#DISABLE DELAYED CORE SWAPS_'**MSOS 4.1**_^1_%STA- 13,Q_K**MSOS 4.1**_^1_%ENA 0_,INDICATE NO TIMER_0**MSOS 4.1**_^1_%STA+ TMRTYP_I**MSOS 4.1**_^1_%SPC 1_^1_%RTJ- (AMONI)_%PRINT€€ TIMER REJECT MSG_^1_%ADC $0C00_^1_%ADC 0_^1REJTH ADC 0_^1_%ADC $18FC_^1_%ADC 6_^1_%ADC REJMSG_^1_%SPC 1_^1REJCK LDA* REJTH_^1_%SAZ 1_^1_%JMP* REJCK_(WAIT FOR COMPLETION_^1_%JMP* RSTRT9_^1_%SPC 2_^1REJMSG ALF 6,TIMER REJECT_A**MSOS 4.1**_^1_%EJT_]_^1*_$PRINT THE SYSTEM PSR LEVEL AND DATE OF BUILD_^1_%SPC 2_^1RSTRT9 LDA MONTH_J**MSOS 4.1**_^1_%EOR- LPMSK+15_$IS THE BUI€€LD DATE PATCHED_(**MSOS 4.1**_^1_%SAN 1_N**MSOS 4.1**_^1_%JMP* PSRMSG_'NO_?**MSOS 4.1**_^1_%LDA MONTH_J**MSOS 4.1**_^1_%ENQ $20_*ADD LEADING SPACE_0**MSOS 4.1**_^1_%LLS 8_N**MSOS 4.1**_^1_%INA $2F_*ADD TRAILING SLASH_/**MSOS 4.1**_^1_%STQ DATE+1_I**MSOS 4.1**_^1_%STA DATE+2_'FORM SYSTEM BUILD DATE_+**MSOS 4.1**_^1_%LDA DAY_L**MSOS 4.1**_^1_%STA DATE+3_I**MSOS 4.1**_^1_%LDA€€ YEAR_K**MSOS 4.1**_^1_%ENQ $2F_*ADD LEADING SLASH_0**MSOS 4.1**_^1_%LLS 8_N**MSOS 4.1**_^1_%INA $20_*ADD TRAILING SPACE_/**MSOS 4.1**_^1_%STQ DATE+4_I**MSOS 4.1**_^1_%STA DATE+5_I**MSOS 4.1**_^1_%SPC 1_^1PSRMSG RTJ- (AMONI)_%PRINT THE MESSAGE_0**MSOS 4.1**_^1_%ADC $0C01_^1_%ADC 0_^1TX_#ADC 0_^1_%ADC $18FC_^1_%ADC LSUMLV_^1_%ADC SUMLVL_^1_%SPC 1_^1LTX_"LDA* TX_^1_%SAZ€€ A101M_^1_%JMP* LTX_*WAIT FOR COMPLETION_^1_%EJT_]_^1*_$DETERMINE THE POSITION OF THE PROGRAM PROTECT SWITCH_^1_%SPC 2_^1A101M IIN 0_N**MSOS 4.1**_^1A101_!LDA+ $101_)SAVE THE CONTENTS OF THE TRAP_'50*919_^1_%STA* S101+1_L50*919_^1A102_!LDA+ $102_N50*919_^1_%STA* S102+1_L50*919_^1_%TRM A_,SAVE THE CONTENTS OF 'M'_,50*919_^1_%STA* SM+1_N50*919_^1_%LDA =N$1400_%SET UP RETURN_750€€*919_^1_%STA* (A101+1)_J50*919_^1_%LDQ =XFAULT_K50*919_^1_%CPB 0_Q50*919_^1_%ENA 1_Q50*919_^1_%TRA M_,ALLOW ONLY A PP FAULT_/50*919_^1_%INQ 6_N**MSOS 4.1**_^1_%STQ* (A102+1)_J50*919_^1_%EIN 0_Q51*919_^1FAULT STQ* (A102+1)_J50*919_^1_%LDA* PPFLAG_'IS THIS FIRST PASS_/**MSOS 4.1**_^1_%SAZ HANGIT_'NO, HANG WAITING FOR PP SET_%**MSOS 4.1**_^1_%RAO* FLAGIT_'SET FLAG FOR SET PP M€€ESSAGE_%**MSOS 4.1**_^1_%JMP* GOPP_)GO TO RESTORE PROTECT SETUP_%**MSOS 4.1**_^1HANGIT JMP* FAULT_(WAIT FOR PP FAULT_0**MSOS 4.1**_^1GOPP_!SPF 0_,CLEAR PROTECT FAULT_.**MSOS 4.1**_^1_%INQ -6_M**MSOS 4.1**_^1_%SPB 0_,RETURN TO PRIOR STATUS_.50*919_^1_%EJT_]_^1S101_!LDA =N0_O50*919_^1_%STA* (A101+1)_J50*919_^1S102_!LDA =N0_O50*919_^1_%STA* (A102+1)_J50*919_^1SM_#LDA =N0_O50*919€€_^1_%TRA M_Q50*919_^1_%EIN 0_Q50*919_^1_%LDA* PPFLAG_'IS THIS FIRST TIME THROUGH_'**MSOS 4.1**_^1_%SAZ OUTID_(SKIP IS SECOND PASS_.**MSOS 4.1**_^1_%LDA* FLAGIT_'IS THIS FIRST TIME BUT NEED MSG_!**MSOS 4.1**_^1_%SAZ OUTID_(SKIP IF NO MSG NEEDED_,**MSOS 4.1**_^1_%CLR A_,NEED TO SET PP_3**MSOS 4.1**_^1_%STA* PPFLAG_'SECOND TIME FLAG_1**MSOS 4.1**_^1_%SPC 1_^1_%RTJ- (AMONI)_%WRIT€€E PP MESSAGE_1**MSOS 4.1**_^1_%ADC $0C01_J**MSOS 4.1**_^1_%ADC 0_N**MSOS 4.1**_^1PPTH_!ADC 0_N**MSOS 4.1**_^1_%ADC $18FC_J**MSOS 4.1**_^1_%ADC 12_M**MSOS 4.1**_^1_%ADC PP_M**MSOS 4.1**_^1_%SPC 1_^1PPWAIT LDA* PPTH_K**MSOS 4.1**_^1_%SAZ OUTPP_J**MSOS 4.1**_^1_%JMP* PPWAIT_'WAIT FOR COMPLETION_.**MSOS 4.1**_^1OUTPP JMP* A101M_(GO WAIT FOR PP SET_/**MSOS 4.1**_^1_%EJT_Q**MSOS€€ 4.1**_^1*_$PRINT THE SYSTEM IDENTIFICATION_5**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1OUTID LDA =XSYSID_H**MSOS 4.1**_^1_%EOR- LPMSK+15_$IS THE IDENTIFICATION PATCHED_#**MSOS 4.1**_^1_%SAN ID1_L**MSOS 4.1**_^1_%JMP* MODE_)NO, DONT PRINT IT_0**MSOS 4.1**_^1ID1_"LDA+ SYSID_J**MSOS 4.1**_^1_%STA* SAVID_J**MSOS 4.1**_^1_%AND- LPMSK+7_H**MSOS 4.1**_^1_%EOR =N$0D00_%ADD AN EXTRA CARRI€€AGE RETURN_$**MSOS 4.1**_^1_%STA+ SYSID_J**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1_%ENQ 15_+FIND THE END OF THE TRAILING_$**MSOS 4.1**_^1ID2_"LDA+ SYSID,Q_)BLANKS IN THE IDENTIFICATION_!**MSOS 4.1**_^1_%SUB =A_M**MSOS 4.1**_^1_%SAN ID3_*FOUND THE END_4**MSOS 4.1**_^1_%INQ -1_M**MSOS 4.1**_^1_%SQM ID4_*ALL BLANK, DONT PRINT_,**MSOS 4.1**_^1_%JMP* ID2_L**MSOS 4.1**_^1ID3_"INQ 1_€€N**MSOS 4.1**_^1_%STQ* IDL_*FORM THE MESSAGE LENGTH_***MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1_%RTJ- (AMONI)_%PRINT THE IDENTIFICATION_)**MSOS 4.1**_^1_%ADC $0C01_J**MSOS 4.1**_^1_%ADC 0_N**MSOS 4.1**_^1IDTH_!ADC 0_N**MSOS 4.1**_^1_%ADC $18FC_J**MSOS 4.1**_^1IDL_"ADC 0_N**MSOS 4.1**_^1_%ADC SYSID_J**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1IDWAIT LDA* IDTH_K**MSOS 4.1**_^1_%SAZ €€ID4_L**MSOS 4.1**_^1_%JMP* IDWAIT_'WAIT FOR COMPLETION_.**MSOS 4.1**_^1_%SPC 1_^1ID4_"LDA* SAVID_J**MSOS 4.1**_^1_%STA+ SYSID_(RESTORE LEADING BLANK IN THE ID_!**MSOS 4.1**_^1_%EJT_]_^1*_$DETERMINE THE CORE SIZE MODE, AND PRINT IT_^1_%SPC 2_^1MODE_!LDA* (I1)_)CHECK MULTI-LEVEL INDIRECT_'**MSOS 4.1**_^1_%EOR* I3_/FOR MODE_5**MSOS 4.1**_^1_%SAZ M32K_K**MSOS 4.1**_^1_%JMP* M65K_K**€€MSOS 4.1**_^1M32K_!LDA =XX32K_'SETUP 32K MODE_3**MSOS 4.1**_^1_%JMP* STO_L**MSOS 4.1**_^1M65K_!LDA =XX65K_'SETUP 65K MODE_3**MSOS 4.1**_^1_%ENQ 1_N**MSOS 4.1**_^1_%STQ- ($E9)_(SET MODE FLAG_4**MSOS 4.1**_^1STO_"STA* MMODE_J**MSOS 4.1**_^1_%SPC 1_^1_%RTJ- (AMONI)_%WRITE MODE MESSAGE_/**MSOS 4.1**_^1_%ADC $0C01_J**MSOS 4.1**_^1_%ADC 0_N**MSOS 4.1**_^1MODETH ADC 0_N**MSOS 4.1**€€_^1_%ADC $18FC_J**MSOS 4.1**_^1_%ADC 7_N**MSOS 4.1**_^1MMODE ADC 0_N**MSOS 4.1**_^1_%SPC 1_^1MODWAT LDA* MODETH_I**MSOS 4.1**_^1_%SAZ FILCHK_I**MSOS 4.1**_^1_%JMP* MODWAT_'WAIT FOR COMPLETION_.**MSOS 4.1**_^1_%SPC 1_^1FILCHK RTJ* BONES_(GO CHECK FOR FILE ERRORS_)**MSOS 4.1**_^1_%ENA 0_N**MSOS 4.1**_^1_%STA MIBX_)CLEAR MIPRO AND_^1_%STA EFLOCK_'LOGGER LOCKOUT FLAGS_-**MSOS€€ 4.1**_^1_%JMP TOIDLE_'GO TO IDLE EXIT_2**MSOS 4.1**_^1_%SPC 2_^1PPFLAG NUM 1_N**MSOS 4.1**_^1FLAGIT NUM 0_N**MSOS 4.1**_^1_%SPC 1_^1I1_#ADC (I2)_K**MSOS 4.1**_^1I2_#ADC I3_M**MSOS 4.1**_^1I3_#NUM $7F9C_J**MSOS 4.1**_^1SAVID NUM 0_N**MSOS 4.1**_^1_%EJT_]_^1SUMLVL NUM $0D0A_^1_%ALF 10,MSOS 4.1--PSR LEVEL_9**MSOS 4.1**_^1_%ADC SYSLVL_^1DATE_!ALF 6,_M**MSOS 4.1**_^1_%NUM€€ $200D_^1_%EQU LSUMLV(*-SUMLVL)_?**MSOS 4.1**_^1_%SPC 1_^1PP_#NUM $200D_^1_%ALF 10,SET PROGRAM PROTECT_9**MSOS 4.1**_^1_%NUM $200D_J**MSOS 4.1**_^1_%SPC 1_^1X32K_!NUM $0D0A_J**MSOS 4.1**_^1_%ALF 4,32K MODE_E**MSOS 4.1**_^1_%NUM $0D0A_J**MSOS 4.1**_^1_%NUM $200D_J**MSOS 4.1**_^1_%SPC 1_^1X65K_!NUM $0D0A_J**MSOS 4.1**_^1_%ALF 4,65K MODE_E**MSOS 4.1**_^1_%NUM $0D0A_J**M€€SOS 4.1**_^1_%NUM $200D_J**MSOS 4.1**_^1_%SPC 1_^1MONTH ADC SYSMON_I**MSOS 4.1**_^1DAY_"ADC SYSDAY_I**MSOS 4.1**_^1YEAR_!ADC SYSYER_I**MSOS 4.1**_^1_%EJT_]_^1*_$SUBROUTINE TO CHECK ALL FILE MANAGER SPACE THREADS_^1_%SPC 2_^1BONES NOP 0_^1_%LDA* FSPNT_^1_%SUB- LPMSK+15_$IS THERE A FILE MANAGER IN THIS SYSTEM_^1_%SAN 1_,YES_^1_%RTJ* (BONES)_%NO, RETURN_^1_%SPC 1_^1_%ENQ 0€€_^1_%RTJ MESSAG_'PRINT INITIAL MESSAGE_^1_%LDA+ ADRFMS_^1_%STA* SECTOR_'INITIALIZE THE LIBRARY UNIT SPACE ADDRESS_^1BONES0 LDA* (FSPNT)_%GET FSLIST POINTER_^1_%INA 0_,IS THIS THE END OF THE LIST_^1_%SAN BONES1_'NO_^1_%ENQ 1_,YES, PRINT FINAL MESSAGE_^1_%RTJ MESSAG_^1_%JMP* (BONES)_%AND RETURN_^1BONES1 CLR Q_^1_%STQ* ACCUM_(CLEAR LU AVAILABLE ACCUMULATOR_^1_%LLS 9_,SHIFT LU E€€NTRY LENGTH INTO Q_^1_%ALS 7_,SHIFT LU NUMBER INTO A_^1_%STQ* LUENTL_'SAVE LU ENTRY LENGTH_^1_%STA* MMLU_)SET UP LU FOR READ_^1_%LDQ* FSPNT_(GET LIST POINTER INTO Q_^1_%LDA- 1,Q_*GET START OF FILE SPACE POOL_^1_%STA* BGSCPL_*AND SAVE IT_^1_%LDA- 2,Q_*GET NUMBER OF AVAILABLE SECTORS_^1_%STA* FSENTO_*AND SAVE IT_^1_%INQ 4_,INCREASE POINTER AROUND HEADER WORDS_^1_%STQ* FSLUPT_*AND S€€AVE AS LU ENTRY POINTER_^1_%SAN BONES2_'SKIP IF FSLIST HAS BEEN SET UP_^1_%LDA* FSPNT_(GET POINTER TO CURRENT LU ENTRY_^1_%ADD* LUENTL_*INCREMENT IT BY LENGTH OF THE ENTRY_^1_%STA* FSPNT_(AND STORE IT AS THE CURRENT LU ENTRY POINTER_^1_%CLR A_^1_%STA* ACCUM_(CLEAR ACCUMULATOR_^1_%JMP* BONES7_'GO PROCESS NEXT LU_^1_%EJT_]_^1BONES2 LDA* BGSCPL_'GET POINTER TO NEXT FILE SPACE POOL H€€EADER_^1_%SAZ BONES3_*IF IT IS ZERO WE ARE DONE WITH SPACE POOL_^1_%RTJ* RDMASS_'READ HEADER_^1_%LDA* MMBUFF+2_$GET BLOCK SIZE_^1_%STA* BLKSIZ_*AND SAVE IT_^1_%ADD* ACCUM_(INCREMENT ACCUMULATOR_^1_%STA* ACCUM_+BY THE SIZE OF THIS BLOCK_^1_%LDA* MMBUFF+1_$GET POINTER TO NEXT HEADER_^1_%SUB* BGSCPL_'DOES THE THREAD POINT TO ITSELF_^1_%SAN BONES6_'NO_^1_%JMP* ERROR_(YES,ERROR_^1BONE€€S6 LDA* MMBUFF+1_^1_%STA* BGSCPL_'SAVE HEADER POINTER_^1_%LDA* MMBUFF_'GET THREAD POINTER_^1_%STA* THDPNT_*AND SET UP TO ANALIZE IT_^1_%RTJ* ANATHD_'ANALIZE THREAD_^1_%JMP* BONES2_'GO GET NEXT HEADER AND SET IT UP FOR ANALYSIS_^1BONES3 LDA* FSLUPT_'LOAD LU POINTER_^1_%SUB* FSPNT_+SUBTRACT POINTER TO FIRST WORD FOR THIS LU_^1_%SUB* LUENTL_-SUBTRACT LENGTH OF THIS LUS ENTRY_^1_%SAM €€ BONES4_'IF NEGATIVE SET UP TO ANALIZE NEXT CORE THREAD_^1_%LDA* ACCUM_(GET OUR TOTAL_^1_%SUB* FSENTO_*SUBTRACT THEIR TOTAL_^1_%SAZ BONES5_'SHOULD BE EQUAL_^1_%JMP* ERROR_(NOT EQUAL, ERROR EXIT_^1BONES5 LDA* FSLUPT_'GET CURRENT LU POINTER_^1_%STA* FSPNT_+AND USE IT AS HEADER POINTER FOR NEXT ENTRY_^1_%JMP* BONES7_'GO ANALIZE NEXT LUS ENTRY_^1BONES4 LDA* (FSLUPT)_$GET THREAD POINTE€€R_^1_%STA* THDPNT_*AND STORE IT_^1_%RAO* FSLUPT_'INCREMENT LU POINTER_^1_%LDA* (FSLUPT)_$GET THIS THREADS BLOCK SIZE_^1_%STA* BLKSIZ_*AND SAVE IT_^1_%RAO* FSLUPT_'INCREMENT LU POINTER_^1_%RTJ* ANATHD_'GO ANALIZE THREAD_^1_%JMP* BONES3_'GO SEE IF WE ARE DONE_^1BONES7 RAO* LUNO_)INCREMENT THE LU COUNT_^1_%JMP* BONES0_*AND CONTINUE_^1_%EJT_]_^1*_]_^1* ROUTINE TO ANALIZE THREADS_^1*_]€€_^1ANATHD NUM 0_,ENTRY POINT_^1ANATH0 LDA* THDPNT_'GET THREAD POINTER_^1_%SAN ANATH1_*IF NONZERO GO ANALIZE IT_^1_%JMP* (ANATHD)_$FINISHED WITH THIS THREAD, EXIT_^1ANATH1 LDA* BLKSIZ_'GET BLOCK SIZE_^1_%ADD* ACCUM_+INCREMENT ACCUMULATOR_^1_%STA* ACCUM_^1_%SUB* FSENTO_'SUBTRACT THEIR AVAILABLE SPACE FOR THIS LU_^1_%SAM ANATH2_'SKIP IF NOT BEYOND IT_^1_%SAZ ANATH2_'SKIP IF NOT BE€€YOND IT_^1_%JMP* ERROR_(ALREADY TO MUCH, ERROR EXIT_^1ANATH2 LDA* THDPNT_'GET SECTOR FOR READ_^1_%RTJ* RDMASS_'READ UP NEXT ENTRY IN THREAD_^1_%LDA* MMBUFF_'GET THREAD_^1_%SUB* THDPNT_'DOES IT POINT TO ITSELF_^1_%SAN ANATH3_'NO_^1_%JMP* ERROR_(YES, ERROR_^1ANATH3 LDA* MMBUFF_^1_%STA* THDPNT_'SAVE THE NEW THREAD_^1_%JMP* ANATH0_'GO INCREMENT ACCUMULATOR_^1_%EJT_]_^1*_]_^1*_$DATA ST€€ORAGE_^1*_]_^1NUMRD NUM 0_,ACCUMULATOR OF NUMBER PASSES THROUGH RDMASS_^1MAXRD NUM $7FFF_(PASS CYCLE LIMIT_^1FSPNT ADC FSLIST_'FILE SPACE LIST POINTER_^1FSLUPT NUM 0_,CURRENT LU POINTER_^1LUENTL NUM 0_,LENGTH OF THIS LUS ENTRY_^1BGSCPL NUM 0_,POINTER TO FILE SPACE POOL_^1ACCUM NUM 0_,ANALYSIS ACCUMULATOR_^1FSENTO NUM 0_,WHAT THEY THINK TOTAL SHOULD BE_^1THDPNT NUM 0_,C€€URRENT THREAD POINTER_^1BLKSIZ NUM 0_,CURRENT BLOCK SIZE_^1LUNO_!NUM 0_,CURRENT UNIT NUMBER_^1MMBUFF BZS MMBUFF(3)_#MASS MEMORY READ BUFFER_^1_%SPC 1_^1SECTOR ADC 0_,TABLE OF SPACE POOL STARTING SECTORS_^1_%ADC BEGLU1_^1_%ADC BEGLU2_^1_%ADC BEGLU3_^1_%ADC BEGLU4_^1_%ADC BEGLU5_^1_%ADC BEGLU6_^1_%ADC BEGLU7_^1_%ADC BEGLU8_^1LENGTH ADC NUMFS0_'TABLE OF SPACE POOL LENGTH€€S_^1_%ADC NUMFS1_^1_%ADC NUMFS2_^1_%ADC NUMFS3_^1_%ADC NUMFS4_^1_%ADC NUMFS5_^1_%ADC NUMFS6_^1_%ADC NUMFS7_^1_%ADC NUMFS8_^1_%EJT_]_^1*_]_^1* ROUTINE TO READ THREE WORDS FROM MASS MEMORY_^1*_]_^1RDMASS NUM 0_^1_%STA* SEC_*SAVE THE CURRENT SECTOR_^1_%LDQ* LUNO_^1_%LDA* SECTOR,Q_$CALCULATE THE END SECTOR FOR THIS UNIT_^1_%ADD* LENGTH,Q_^1_%INA -1_^1_%SUB* SEC_*IS THE CURRE€€NT SECTOR IN RANGE_^1_%SAP RDM1_)YES_^1RDM0_!JMP* ERROR_(NO, ERROR_^1_%SPC 1_^1RDM1_!RTJ- (AMONI)_%READ THE THREAD_^1_%ADC $0801_^1_%ADC 0_^1RDTHD ADC 0_^1MMLU_!ADC 0_^1_%ADC 3_^1_%ADC MMBUFF_^1_%ADC 0_^1SEC_"ADC 0_^1_%SPC 1_^1RDWAIT LDA* RDTHD_^1_%SAZ RDMIN_^1_%JMP* RDWAIT_'WAIT FOR COMPLETION_^1_%SPC 1_^1RDMIN SQM ERROR_(I/O ERROR_^1_%RAO* NUMRD_^1_%LDA* NUMRD_^1_€€%SUB* MAXRD_(HAS THE READ CYCLE BEEN EXCEEDED_^1_%SAP ERROR_(YES, ERROR_^1_%JMP* (RDMASS)_^1_%EJT_]_^1*_$ROUTINE TO PROCESS FILE THREAD ERRORS_^1_%SPC 2_^1ERROR ENQ 2_^1_%RTJ* MESSAG_'PRINT ERROR MESSAGE_^1_%SPC 1_^1_%RTJ- (AMONI)_%READ THE REPLY_^1_%ADC $0801_^1_%ADC 0_^1ERTHD ADC 0_^1_%ADC $18FD_^1_%ADC 3_^1_%ADC MMBUFF_^1_%SPC 1_^1ERWAIT LDA* ERTHD_^1_%SAZ ER1_*INP€€UT IS COMPLETE_^1_%JMP* ERWAIT_^1_%SPC 1_^1ER1_"LDA* MMBUFF_^1_%SUB =AYE_)IS THE ANSWER YES_^1_%SAZ CLFILE_'YES, CLEAR THE FILE TABLES_^1_%LDA* MMBUFF_^1_%SUB =ANO_)IS THE ANSWER NO_^1_%SAZ ER2_*YES, EXIT_^1_%JMP* ERROR_(NEITHER, REPEAT THE REQUEST_^1ER2_"ENQ 3_^1_%RTJ* MESSAG_'PRINT LF/CR_^1_%JMP (BONES)_%EXIT_^1_%EJT_]_^1*_$ROUTINE TO CLEAR ALL SYSTEM FILES_^1_%SPC 2_^1CL€€FILE LDQ =XFSLIST_^1_%INQ -3_^1_%ENA 0_^1_%STA- (ZERO),Q_$CLEAR FIDSEC_^1_%STA- 1,Q_*CLEAR FIBLSA_^1_%STA- 2,Q_*CLEAR FIBNIX_^1_%INQ 3_^1_%STQ- I_,SET UP THE BASE ADDRESS OF FLIST_^1_%ENQ 0_^1_%SPC 1_^1CLFIL1 LDA* SECTOR,Q_^1_%STA- 1,I_*INITIALIZE THE FILE MANAGER TABLE_^1_%ENA 0_^1_%STA- 2,I_^1_%LDA* LENGTH,Q_^1_%STA- 3,I_^1_%LDA- (I)_^1_%ARS 7_,LENGTH OF THIS UNIT_^1_%ADD€€- I_^1_%STA- I_,POINT TO NEXT UNIT_^1_%LDA- (I)_^1_%INA 0_,IS THE LIST COMPLETE_^1_%SAZ CLFIL2_'YES_^1_%INQ 1_^1_%JMP* CLFIL1_'CONTINUE_^1CLFIL2 ENQ 3_^1_%RTJ* MESSAG_'PRINT LF/CR_^1_%JMP (BONES)_%RETURN_^1_%EJT_]_^1*_$MESSAGE SUBROUTINE_^1_%SPC 2_^1MESSAG NOP 0_^1_%LDA* MESSAD,Q_^1_%STA* MESADD_'SET UP THE MESSAGE ADDRESS_^1_%LDA* MESSLN,Q_^1_%STA* MESLEN_'SET UP THE MESSAG€€E LENGTH_^1_%SPC 1_^1_%RTJ- (AMONI)_%PRINT THE MESSAGE_^1_%ADC $0401_^1_%ADC 0_^1MESTHD ADC 0_^1_%ADC $18FC_^1MESLEN ADC 0_^1MESADD ADC 0_^1_%SPC 1_^1MESCHK LDA* MESTHD_^1_%SAZ MESDUN_'OUTPUT COMPLETE_^1_%JMP* MESCHK_^1MESDUN JMP* (MESSAG)_$RETURN_^1_%SPC 1_^1MESSAD ADC MESSG1_'MESSAGE ADDRESS_^1_%ADC MESSG2_^1_%ADC MESSG3_^1_%ADC MESSG4_^1MESSLN ADC LMESS1_'MESSAGE €€LENGTH_^1_%ADC LMESS2_^1_%ADC LMESS3_^1_%ADC LMESS4_^1_%EJT_]_^1*_$FILE CHECK MESSAGES_^1_%SPC 2_^1MESSG1 ALF $,CHECKING FILES - $_^1_%EQU LMESS1(*-MESSG1)_^1MESSG2 ALF $,OK$_^1_%NUM $0A0A_^1_%EQU LMESS2(*-MESSG2)_^1MESSG3 ALF $,ERRORS$_^1_%NUM $0D0A_^1_%ALF $,CLEAR ALL FILES? (YES/NO) $_^1_%EQU LMESS3(*-MESSG3)_^1MESSG4 NUM $0A0A_^1_%EQU LMESS4(*-MESSG4)_^1_%EJT_]_€€^1*_*ALLOCATION LENGTHS_^1*_]_^1*_$AREAS 1, 2, AND 3 ARE SETUP BY *S CONTROL CARDS IN_!**MSOS 4.1**_^1*_$SYSTEM INSTALLATION FILE. AREAS 4-15 ARE SETUP BY_!**MSOS 4.1**_^1*_$EQUATES IN SYSDAT_C**MSOS 4.1**_^1_%SPC 2_^1ALCLGH ADC N1_+ALLOCATION LENGTH FOR AREA 1_^1_%ADC N2_+ALLOCATION LENGTH FOR AREA 2_^1_%ADC PSIZV4_'ALLOCATION LENGTH FOR AREA 3_$**MSOS 4.1**_^1_%ADC N4_+ALLO€€CATION LENGTH FOR AREA 4_^1_%ADC N5_+ALLOCATION LENGTH FOR AREA 5_^1_%ADC N6_+ALLOCATION LENGTH FOR AREA 6_^1_%ADC N7_+ALLOCATION LENGTH FOR AREA 7_^1_%ADC N8_+ALLOCATION LENGTH FOR AREA 8_^1_%ADC N9_+ALLOCATION LENGTH FOR AREA 9_^1_%ADC N10_*ALLOCATION LENGTH FOR AREA 10_^1_%ADC N11_*ALLOCATION LENGTH FOR AREA 11_^1_%ADC N12_*ALLOCATION LENGTH FOR AREA 12_^1_%ADC N13_*ALL€€OCATION LENGTH FOR AREA 13_^1_%ADC N14_*ALLOCATION LENGTH FOR AREA 14_^1_%ADC N15_*ALLOCATION LENGTH FOR AREA 15_^1_%SPC 4_^1_%JMP RESTRT_'MUST ALWAYS BE 2 WORD INSTRUCTION_!**MSOS4.0*_^1*_*AUTOLOAD PROGRAM MOVED TO HERE_^1*_]_'*_^1STMSV4 JMP RESTRT_'FIRST WORD OF AUTOLOAD PROGRAM_$**MSOS4.0*_^1_%SPC 4_^1_%BSS (2)_*RESERVE TWO WORD FOR THE ALLOCATABLE_^1*_8CORE THREAD_^1_%EN€D_]_^__LENGTH FOR AREA 13_^PDUMMY CSY/ D R I V E R S C02 P€1_%NAM DUMMY_(DECK-ID C02 MSOS 4.1_-SUMMARY-079_^1*_$DUMMY DEVICE DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1************************************************************************_^1*_$THERE ARE TWO FUNCTIONS THAT THIS DRIVER IS DESIGNED TO PE€€RFORM.*_^1*_$IT CAN FUNCTION AS A NORMAL DRIVER WITH A LOGICAL UNIT TO DO_"*_^1*_$-DO NOTHING- FUNCTIONS, OR IT CAN FUNCTION AS AN ALTERNATE_$*_^1*_$FOR A LOGICAL UNIT SO THAT DEVICE FAILURES FOR THE UNIT WILL_"*_^1*_$BE LOGGED ON THE COMMENT DEVICE BUT REQUIRE NO OPERATOR RESPONSE*_^1*_$AND REPORT AN ERROR TO THE CALLER._=*_^1*******************************************************€€*****************_^1_%SPC 2_^1*_$DRIVER ENTRY POINTS_^1_%ENT IDUMMY_'DUMMY INITIATOR ENTRY_^1_%ENT CDUMMY_'DUMMY CONTINUATOR ENTRY_^1_%ENT EDUMMY_'DUMMY ERROR ENTRY_^1_%SPC 2_^1*_$DRIVER EXTERNAL POINTS_^1_%EXT LOG1_)LOG1 TABLE IN SYSDAT_^1_%EXT DUMALT_'DUMMY LOGICAL UNIT_^1_%EXT LOG1A_(LOG1A TABLE IN SYSDAT_^1_%SPC 2_^1*_$DRIVER EQUIVALENCES_^1_%EQU AFNR($B5)_#ADDRESS OF€€ FIND NEXT REQUEST_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU ELU(5)_I**MSOS 4.1**_^1_%EQU ZROBIT($33)_!TABLE OF COMPLEMENT SINGLE BIT MASKS_^1_%EQU LPMSK($2)_#TABLE OF RIGHT JUSTIFIED MASKS_^1_%EQU ESTAT1(9)_#PDT STATUS 1 WORD_^1_%EQU ONEBIT($23)_!TABLE OF SINGLE BIT MASKS_^1_%EQU ACOMPR($B6)_!ADDRESS OF COMPLETE REQUEST_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1_%SP€€C 2_^1IDUMMY STQ- I_,SAVE ADDRESS OF PDT IN I-REG._^1CDUMMY RTJ- (AFNR)_'LOOK FOR MORE REQUESTS_^1EDUMMY JMP- (ADISP)_%NO REQUESTS--EXIT TO DISPATCHER_^1_%LDQ- ELU,I_(GET LOGICAL UNIT NUMBER_^1_%LDA+ LOG1A,Q_%GET PDT ADDRESS FOR THIS LU_^1_%SUB- I_,MINUS MY PDT ADDRESS_^1_%SAN ASALT_(SKIP IF REQUEST AS ALTERNATE DEVICE_^1_%RTJ- (ACOMPR)_$COMPLETE REQUEST_^1_%JMP* CDUMMY_'GO TO SE€€E IF MORE REQUESTS_^1LUDUMY ADC DUMALT_'DUMMY LOGICAL UNIT_^1ASALT IIN 0_,LOCK OUT OTHER CHANGES TO LOG1_^1_%LDA* (ALOG1),Q_#GET LOG1 ENTRY FOR REQUESTED L.U._^1_%AND- ZROBIT+13_#RESTORE UNIT_^1_%AND- ZROBIT+14_#CLEAR SHARED BIT_^1_%STA* (ALOG1),Q_#MODIFY LOG1 ENTRY_^1_%LDQ+ LOG1A,Q_%MAKE Q-REG. POINT TO FAILED L.U. PDT_^1_%LDA- ESTAT1,I_^1_%AND- LPMSK+15_^1_%EOR- ONEBIT+15_#SET€€ ERROR INDICATOR IN V-FIELD_^1_%STA- ESTAT1,I_^1_%STQ* ADRPHY_'SAVE ADDRESS OF FAILED L.U. PDT_^1_%RTJ- (ACOMPR)_$COMPLETE REQUEST_^1_%IIN 0_,LOCK OUT OTHER ENTRIES TO FAILED DRIVER_^1_%LDQ* ADRPHY_^1_%LDA- ELU,Q_(IS DRIVER BUSY (L.U. NOT ZERO)_^1_%SAN BUSY_)SKIP IF BUSY_^1_%LDA- ELU,I_(SET BUSY SO ANY NEW REQUESTS WILL_^1_%STA- ELU,Q_*BE THREADED_^1_%RTJ- (AMONI)_%PART 1 INDIREC€šT REQUEST_^1_%NUM $2000_^1ADRPHY NUM 0_,PDT ADDRESS OF FAILED DRIVER_^1BUSY_!JMP* CDUMMY_'GO TO LOOK FOR MORE REQUESTS_^1ALOG1 ADC LOG1_^1_%END_]_^__šPD1711 CSY/ C05 P€1_%NAM D1711_(DECK-ID C05 MSOS 4.1_-SUMMARY-079_^1*_*1711 TELETYPE AND 713-10/711-100/713-120 CRT DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*P1711 ADC $520A_(00 SCHEDULER CALL_^1*_%ADC CI1711_'01 INITIATOR ADDRESS_^1*_%ADC CC1711_'02€€ CONTINUATOR ADDRESS_^1*_%ADC CE1711_'03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $0091_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $3006+T713_"08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEV€€ICE 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_%SPC 2_^1*_*DR€€IVER MAY BE USED FOR 1713 IF ONLY KEYBOARD IS USED_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU TIME(4)_"DIAG. CLOCK TIME_^1_%EQU LU(5)_$LOGICAL UNIT_^1_%EQU REQAD(6)_!REQUES ADDRESS_^1_%EQU CALL(7)_"HARDWARE ADDRESS_^1_%EQU ERRTAB(8) REQUEST STATUS_^1_%EQU SWITCH(9) SWITCH WORD_^1_%EQU CORE(10)_!CORE ADDRESS_^1_%EQU LASTP1(11) LAST CORE LOCATION + 1_^1_%EQU STA€€TUS(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_^1B2A4A8_!NUM_%$114_^1_%SPC 1_^1***_"DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I1711 STQ- I_,INITIATOR ENTRY_2**MSOS 4.1**_^1_(RTJ-_$(AFNR)_^1_%JMP* CLROUT_'CLEAR AND EXIT_^1_%RTJ* CLEAR_(CLEAR DEVICE_^1_%ENA -8_^1_%AND- SWITCH,I_!C€€LEAR 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* B2A4A8_#INTERRUPT ON DATA AND ALARM_^1_%OUT ERROR-*_^1_%LDQ- REQAD,I_"REQUEST ADDRESS_6*MSOS V4.0_^1_%LDA- (ZERO),Q_H*MSOS V4.0_^1_%ARS 9_O*MSOS V4.0_^1_%AND- LPMSK+5_"GET REQUEST CODE_5*MSOS V4.0_^1_%INA -14_'CHECK CODE FOR €€MOTION REQUEST_(*MSOS V4.0_^1_%SAN SENULL_#SKIP IF NOT MC_7*MSOS V4.0_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_'GET PARAMETER STRING_1*MSOS V4.0_^1_%SAP P3-*-1_#SKIP IF NOT ITER. TYPE PARA._)*MSOS V4.0_^1_%AND =N$7000_"GET ONLY PARA. IF 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_!LDQ- CALL,I_^1_%INP ERROR-*_^1_%€€STA- STATUS,I_!SAVE STATUS_^1_%AND- BIT9_%READ MODE BIT_^1_%ENQ OUTVAL_#OUTPUT TIME OUT PERIOD_^1_%SAZ SETIME_#SKIP IF WRITE MODE_^1_%ENQ INPVAL_#INPUT TIMEOUT PERIOD_^1SETIME STQ- TIME,I_#SET CLOCK_^1_%JMP- (DISPAD)_!GO TO DISPATCHER_^1CLEAR NUM 0_,SUBROUTINE TO CLEAR DEVICE_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%INP 1_,READ TO CLEAR DATA IF ANY_^1_%NOP 0_^1_%INQ 1_^1_%ENA 3_^1_€€%OUT 1_,CLEAR CONTROLLER AND INT._^1_%NOP 0_^1_%INP 1_,READ STATUS_^1_%NOP 0_^1_%STA- STATUS,I_$A = STATUS, Q = DIRECTOR CODE_^1_%JMP* (CLEAR)_%RETURN_^1_%EJT_]_^1***_"DRIVER CONTINUATOR ENTRY_^1_%SPC 2_^1C1711 STQ- I_,CONTINUATOR_6**MSOS 4.1**_^1_%LDQ- CALL,I_^1_%INP ERROR-*_"GET STATUS_^1_%STA- STATUS,I_^1_%AND- BIT11_$CHECK FOR MANUAL INTERRUPT_^1_%SAN GOMAN_$SKIP IF MAN€€UAL INTERRUPT_^1_%JMP* NOMAN_^1GOMAN LDA- (I)_*PICK-UP SCHEDULER CALL FROM PHYSTAB_^1_%STA* SCHCAL_'MAKE UP SCHEDULER CALL_^1_%RTJ- ($F4)_(SCHEDULE MI_^1SCHCAL NUM $1200_^1_%ADC MI_^1_%ENA B5A3_^1_%AND- STATUS,I_!CHECK FOR DATA OR ALARM_^1_%SAN JNOMAN_#SKIP IF DATA OR ALARM_^1_%ENA 6_)CLEAR INT - SELECT INT ON DATA_^1_%OUT ERROR-*_^1_%JMP- (DISPAD)_^1JNOMAN JMP* NOMAN_^1_%SP€€C 2_^1ERROR JMP* INTRNL_J*MSOS V4.0_^1_%ENA EXTREJ_#EXTERNAL REJECT 6_4*MSOS V4.0_^1_%JMP* SETCOD_J*MSOS V4.0_^1INTRNL ENA INTREJ_#INTERNAL REJECT 5_4*MSOS V4.0_^1SETCOD_!LDQ-_$LU,I_^1_(QLS_%6_^1_(EAQ_%A_^1_(STA-_$ERRCOD,I_^1_(LDA-_$BIT14_^1_(EOR-_$ERRTAB,I_^1_(STA-_$ERRTAB,I_^1_%RTJ* CLEAR_(CLEAR DEVICE_^1_%LDA- LU,I_^1_%SAN 1_,EXIT IF NOT ASSIGNED_^1_%JMP- (DISPAD)_^1_%RTJ €€MAKEQ_^1_(ENA_%-1_^1_(STA-_$TIME,I_.CLEAR TIME_^1_(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)_^€€1_%EJT_R*MSOS V4.0_^1NOMAN1 ENA $20_'ALARM BIT_<*MSOS V4.0_^1_%AND- STATUS,I_!CHECK FOR ALARM_6*MSOS V4.0_^1_%SAN ALRINT_#SKIP IF ALARM INTERRUPT_.*MSOS V4.0_^1_%LDA- SWITCH,I_!CHECK FOR 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_!CHE€€CK FOR DATA INTERRUPT_-*MSOS V4.0_^1_%SAZ TDONE_$SKIP IF NOT_^1_%JMP* NOTDON_#PROCESS DATA INTERRUPT_/*MSOS V4.0_^1ALRINT ENA $40_'BIT 6_@*MSOS V4.0_^1_%AND- STATUS,I_!CHECK FOR LOST DATA_^1_%SAN A1_+SKIP IF LOST DATA_^1_%LDA- PARFLG,I_$CHECK FOR HARDWARE PARITY CHECK_^1_%SAZ A0_+SKIP IF NOT_^1_%ENA BIT7_^1_%AND- STATUS,I_$CHECK FOR PARITY ERROR_^1_%SAN A2_+SKIP IF PARITY ERR€€OR_^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_^1TDONE LDQ- FLAG,I_^1_%SQN 1_^1_%STA- FLAG,I_^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_%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_%E€€RROR-*_-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. F€€ROM STRING_,*MSOS V4.0_^1_%SQZ TRMMCR_#SKIP IF ZERO PARA_4*MSOS V4.0_^1_%STA- TMPWRD,I_!SAVE REMAINDER OF STRING_-*MSOS V4.0_^1_%INQ -2_(IS IT WEOF_;*MSOS V4.0_^1_%SQZ TOPFRM_#SKIP IF WEOF_9*MSOS V4.0_^1_%INQ -2_(IS IT REWIND/UNLOAD_2*MSOS V4.0_^1_%SQZ TRMMCR_#SKIP IF YES_:*MSOS V4.0_^1_%JMP* MOTREQ_#GET NEXT PARAMETER_3*MSOS V4.0_^1TRMMCR JMP* DONE_L*MSOS V4.0_^1_%SPC 2_O*MS€€OS 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-_$S€€WITCH,I_^1_%TRA Q_,Q = 0 IF UNFORMATTED_^1_(ENA_%$10_11ST CHAR._^1_(AND-_$SWITCH,I_^1_(SAN_%NOT1ST-*-1_^1_(ENA_%$10_1YES,CLEAR 1ST_^1_%SQN 1_,SKIP IF FORMATTED_^1_%ENA $30_*RESET LINE FEED FLAGIF UNFORMATTED_^1_(EOR-_$SWITCH,I_,CHAR.SWITCH_^1_(STA-_$SWITCH,I_,SEND OUT A_^1_%SQZ NOCONT-*-1_"CONTINUE IF UNFORMATTED_^1_(ENA_%$D_2MARRIAGE_^1TOSND JMP SENDCH_#RETURN_^1NOT1ST SQZ €€NOCONT-*-1_"SKIP IF UNFORMATTED_/58*1183_^1_%ENA $20_M58*1183_^1_(AND-_$SWITCH,I_,SET_^1_(SAN_%NOCONT-*-1_^1_%RTJ* CHKTYP_'CHECK IF TTY OR DISPLAY._+*MSOS V4.1_^1_%LDA* BIT6T9_'DISPLAY9_;*MSOS V4.1_^1_%INA $20_*TTY._?*MSOS V4.1_^1_(EOR-_$SWITCH,I_,AND SEND OUT_^1_(STA-_$SWITCH,I_,A LINE FEED_^1_(ENA_%$A_^1_%JMP* TOSND_$TO SENDCH_^1_%SPC 2_^1***_"RETURN FROM TOP OF FORM_^1_%EQU €€MOTRTN(*)_G*MSOS V4.0_^1_%SPC 2_^1NOCONT_!LDA-_$SWITCH,I_,ANY CANCELS_^1_(AND*_$BIT6A7_.TO BE SENT_^1_(SAZ_%NOSPCC-*-1_^1_(LDA-_$SWITCH,I_,DECREMENT_^1_(INA_%-$40_0CANCEL COUNT_^1_(STA-_$SWITCH,I_^1_%RTJ* CHKTYP_'CHECK IF TTY OR DISPLAY._+*MSOS V4.1_^1_%JMP* SEND01_'DISPLAY._;*MSOS V4.1_^1_%ENA $7F_*TTY._?*MSOS V4.1_^1SEND01 JMP SENDCH_'GO OUTPUT CHARACTER._/*MSOS V4.1_^1NOSPCC €€LDA- SWITCH,I_H*MSOS V4.0_^1_%SAP 1_)SKIP IF NOT MOTION_3*MSOS V4.0_^1_%JMP* NXTMCR_#GET NEXT PARAMETER_3*MSOS V4.0_^1_%AND- BIT3_%CHECK COMPLETION SWITCH BIT_**MSOS V4.0_^1_(SAZ_%1_^1_(JMP*_$DONE_0YES,FINISHED_^1_(LDQ-_$CORE,I_.NO,PICK UP_^1_(LDQ-_$(ZERO),Q_,DATA WORD_^1_(ENA_%4_3UPPER CHAR._^1_(AND-_$SWITCH,I_^1_(SAN_%LOWER-*-1_^1_(QRS_%8_3YES,SHIFT_^1LOWER_"ENA_%$7F_1NO,CLEAR_^€€1_(LAQ_%A,Q_1UPPER CHAR._^1_%INA -3_+IS IT AN E.O.T._^1_%SAN NOTEOT_'NO_^1_%JMP* DONE_)YES, FINISHED_^1NOTEOT TRQ A_^1_(SAN_%NOTNUL-*-1_*NULL_^1_(ENA_%$7F_1YES,SUBSTITUTE_^1_(ENQ_%$7F_1CANCEL_^1NOTNUL_!INA_%-$D_1CARRIAGE RET._^1_(SAN_%NOTCR-*-1_^1_%RTJ* CHKTYP_'CHECK IF TTY OR DISPLAY._+*MSOS V4.1_^1_%LDA* BIT6T9_'DISPLAY._;*MSOS V4.1_^1_%INA $20_*TTY._?*MSOS V4.1_^1_(JMP*_$GOT€€CR_/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_(LDQ-_$CALL,I_^1_(INQ_%-1_2CHARACTER_^1_(OUT_%TOEROR-*_^1_(LDA-_$CORE,I_.LAST WORD_^1_(SUB-_$LASTP1,I_^1_(SAZ_%CO€€MPLT-*-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_^1GOGODI_!JMP_%EXIT_^1BIT6A7 NUM $3C€€0_^1BIT6T9 NUM $C0_N*MSOS V4.1_^1CHKTYP NUM 0_,ROUTINE CHECKS FOR TTY OR DISPLAY *MSOS V4.1_^1_%LDA- ERRTAB,I_$FETCH TYPE CODE FROM PDT._)*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 PARITY CHECK_^1_%LDA- TEMP,I_^1_(SPA-_$TEMP,I_^1_(SAN_%NOPAR-*-1_+PARITY OK_^1_%ENA PARERR_#PARITY ERROR 3_7*MSOS V4.0_^1_%JMP SETCOD_J*MSOS V4.0_^1TOEROR JMP* TR5_M*MSOS V4.0_^1_%JMP ERROR+1_"EXTERNAL REJECT_6*MSOS V4.0_^1TR5_"JMP ERROR_$INTERNAL R€€EJECT_6*MSOS V4.0_^1NOPAR_"ENA_%$7F_1YES,STRIP_^1_(AND-_$TEMP,I_.PARITY BIT_^1_(TRA_%Q_^1_(ENA_%2_3FORMATTED_^1_(AND-_$SWITCH,I_^1_(SAZ_%ZIFORM-*-1_^1_(TRQ_%A_3YES,_^1_(INA_%-$A_1LINE FEED_^1_(SAZ_%PASSIT-*-1_*YES,IGNORE IT_^1_(INA_%-3_2NO,CARRIAGE_^1_(SAN_%1_3RETURN_^1_(JMP*_$CARRET_.YES_^1_(INA_%-$72_0NO,CANCEL_^1_(SAN_%1_^1_(JMP*_$CANCEL_.YES_^1_(ENA_%$10_1NO,PASS SWITCH_^1_(AND€€-_$SWITCH,I_,SET_^1_(SAZ_%1_^1PASSIT_!JMP*_$TGODIS_.YES,EXIT_^1ZIFORM TRQ A_O*MSOS V4.1_^1_%INA -$61_)LOWER CASE A_6*MSOS V4.1_^1_%SAM ZIFORN_'SKIP IF LESS THAN LOWER CASE A._"*MSOS V4.1_^1_%INA -$1A_)CHECK RANGE TO LOWER CASE Z._%*MSOS V4.1_^1_%SAP ZIFORN_'SKIP IF ABOVE LOWER CASE CHARACTERS*MSOS V4.1_^1_%INQ -$20_)DROP LOWER CASE BIT._.*MSOS V4.1_^1ZIFORN ENA 4_,CHECK IF U€€PPER 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_,SWIT€€CH_^1_%AND- BIT2_%CHECK IF UPPER_7*MSOS V4.0_^1_%SAN TGODIS_#SKIP IF UPPER_8*MSOS V4.0_^1_.RAO-_$CORE,I_.YES,INCREMENT_^1_(LDA-_$CORE,I_.CORE 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_%RAO- FLAG€€,I_^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 LOCA€TION_^1MORUB_"SET_%A_3TO ALL ONES_^1_(STA-_$(ZERO),Q_^1_(INQ_%1_^1_(LDA-_$LASTP1,I_^1_(EAQ_%A_^1_(SAZ_%1_^1_(JMP*_$MORUB_^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_^__PD3644 CSY/ C16 P€1_%NAM D3644_(DECK-ID C16 MSOS 4.1_-SUMMARY-079_^1_%SPC 1_^1*_$NON-SYNCHRONOUS COMMUNICATIONS EQUIPMENT DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS DRIVER IS DESIGNED TO OPERATE UP TO 32 LOW-SPEED NON-_^1*_$SYNCHRONOUS COMMUNICATIONS ADA€€PTER CHANNELS._!THESE CHANNELS_^1*_$MAY CONTAIN UP TO 32 361-1 TYPE CA'S, UP TO 16 361-4 TYPE CA'S,_^1*_$OR ANY COMBINATION OF BOTH._!IT IS DESIGNED TO PROCESS A MIX-_^1*_$TURE OF 10 AND 30 CHARACTER PER SECOND TYPE TERMINALS._^1*_]_^1*_$THE DRIVER CHECKS ALL CA'S AT EVERY INTERRUPT OF THE MULTI-_^1*_$PLEXOR CLOCK, AND SAVES ALL CHARACTERS WHICH ARE READY FOR IN-_^1*_$PUT IN A 40 W€€ORD BUFFER LOCATED IN THE CA'S PHYSICAL DEVICE_^1*_$TABLE._!ALL CHARACTERS ARE INPUT AS UPPER CASE, AND ALL THOSE_^1*_$INPUT AFTER THE FIRST 80 ARE IGNORED._!IF ECHO MODE IS SELECT-_^1*_$ED IN THE CA PHYSICAL DEVICE TABLE, EACH INPUT CHARACTER WILL_^1*_$BE ECHOED AS IT IS READ._!A CARRIAGE RETURN TERMINATES INPUT,_^1*_$AND CAUSES A USER PROGRAM TO BE SCHEDULED WITH THE LOGICAL_^1*_€€$UNIT OF THE CA IN THE Q-REGISTER._!IF AN INPUT TIMEOUT OCCURS_^1*_$BIT 15 OF THE Q-REGISTER WILL ALSO BE SET._!OUTPUT WILL OCCUR_^1*_$EACH CLOCK INTERRUPT IF A WRITE REQUEST IS ACTIVE, AND THE_^1*_$CHARACTER REQUEST IS READY._!IF A DISCONNECT CHARACTER ($14)_^1*_$IS ENCOUNTERED AND THE CA IS A 361-4, THE CHANNEL IS DIS-_^1*_$CONNECTED AND THE REQUEST IS COMPLETED._^1_%SPC 3_^1*_-€€N O T I C E_^1*_]_^1*_$THE 364-4 HAS A FREE RUNNING CLOCK WHICH MUST BE TUNED TO THE_^1*_$SYSTEM._!A LARGE NUMBER OF LOST DATA ERRORS CAN INDICATE THAT_^1*_$THE CLOCK IS RUNNING TOO SLOW AND THE LAST CHARACTER IS NOT_^1*_$BEING READ INTO THE COMPUTER BEFORE THE NEXT CHARACTER IS_^1*_$RECIEVED BY THE MULTIPLEXOR._^1*_$CARE SHOULD BE TAKEN TO ASSURE THAT THE INTERRUPTS ARE NOT SET_^1€€*_$TOO FAST, AS THIS CAN CAUSE EXCESSIVE SYSTEM OVERHEAD._^1*_]_^1*_$IF 364-5 MULTIPLEXORS ARE INCLUDED IN THE SYSTEM, IT IS RE-_^1*_$COMMENDED THAT ONLY THE 364-4 INTERRUPT BE USED, AND THAT ALL_^1*_$CA'S BE LINKED TOGETHER THROUGH THEIR PHYSICAL DEVICE TABLES._^1*_]_^1*_$ALTHOUGH THE CLOCK INTERRUPT IS STARTED BY THE DRIVER UPON THE_^1*_$INITIATION OF A WRITE REQUEST, PROVISION T€€O START THE CLOCK_^1*_$AFTER AN AUTOLOAD TO ALLOW FOR UNATTENDED INPUT MAY BE REQUIR-_^1*_$ED ELSEWHERE IN THE SYSTEM._^1_%EJT_]_^1*_*E N T R Y_!P O I N T_!/_!E X T E R N A L_!T A B L E_^1*_]_^1_%ENT I3644_(DRIVER INITIATOR ENTRY_^1_%ENT C3644_(DRIVER CONTINUATOR ENTRY_^1_%ENT E3644_(DRIVER TIMEOUT ERROR ENTRY_^1_%EXT COMPV4_'COMPARE ROUTINE IN TRVEC_^1_%EXT LOG1A_(LOGICAL UNI€€T TABLE_^1_%EXT LOG_*ENGINEERING FILE LOGGER_^1*_]_^1*_*S Y S T E M_"E Q U I V A L E N C E_"T A B L E_^1*_]_^1_%EQU AMONI($F4)_"MONITOR_^1_%EQU ADISP($EA)_"DISPATCHER_^1_%EQU AFNR($B5)_#FIND NEXT REQUEST_^1_%EQU COMPRQ($B6)_!COMPLETE REQUEST_^1_%EQU LPMASK(2)_#LOGICAL PRODUCT MASK TABLE_^1_%EQU ZERO($22)_#CONSTANT OF VALUE ZERO (0)_^1_%EQU ONEBIT($23)_!ONE BIT MASK TABLE_^1€€_%EQU TEN($46)_$CONSTANT OF VALUE TEN (10)_^1*_]_^1*_*P H Y S T A B_"E Q U I V A L E N C E S_^1*_]_^1_%EQU EDCLK($4)_%DIAGNOSTIC CLOCK_^1_%EQU ELU($5)_(LOGICAL UNIT_^1_%EQU EWES($7)_'HARDWARE ADDRESS_^1_%EQU EREQST($8)_$REQUEST STATUS_^1_%EQU ESTAT1($9)_$STATUS WORD 1_^1_%EQU ECCOR($A)_%NEXT DATA ADDRESS_^1_%EQU ELSTWD($B)_$LWA+1 OF BUFFER_^1_%EQU ESTAT2($C)_$STATUS WORD 2€€_^1_%EQU TEMP($F)_'TEMPORARY STORAGE_^1_%EQU CNTRL1($10)_#CONTROL WORD_^1_%EQU CNTRL2($11)_#TERMINATION CHARACTERS_^1_%EQU CURCAR($12)_#CURRENT CHARACTER_^1_%EQU SLFLAG($13)_#FLAGWORD_^1_%EQU DRFLAG($14)_#HANDLER LEVEL_^1_%EQU USER($15)_%INPUT HANDLER_^1_%EQU BFINDX($16)_#BUFFER INDEX_^1_%EQU INBUFF($17)_#INPUT BUFFER_^1_%EQU WDCT(INBUFF+40) WORD COUNT_^1_%EQU NXUNIT($40€€)_#PHYSTB THREAD_^1_%EJT_]_^1*_*D R I V E R_!E Q U I V A L E N C E S_^1*_]_^1_%EQU ETX($03)_$END-OF-TEXT CHARACTER_^1_%EQU CR($0D)_%CARRIAGE RETURN CHARACTER_^1_%EQU LC($60)_%FIRST CHARACTER OF THE LOWER CASE SET_^1_%EQU RB($7F)_%RUBOUT CHARACTER_^1_%EQU XOFF($13)_#TAPE STOP CHARACTER_^1_%EQU DISCON($14)_!TERMINAL DISCONNECT CHARACTER (361-4 ONLY)_^1_%EQU TYPE(33)_$TYPE CODE€€ FOR THE 361-4 C.A._^1*_]_^1*_$B R E A K D O W N_"O F_"S L F L A G_"W O R D_^1*_]_^1*_$B I T_4M E A N I N G_^1*_]_^1*_%15_/FLAG SAYING SLEW DATA UNTIL CARRIAGE RETURN_^1*_%14_/FLAG SAYING PREFIX DATA HAS BEEN TRANSMITTED_^1*_%13_/PREFIX CHARACTER COUNT_^1*_%12_/RUBOUT FLAG ( 1 = RUBOUT IN PROCESS )_^1*_%11_/INPUT IN PROCESS FLAG_^1*_%10_/DISCONNECT FLAG_^1*_%09_/UNASSIGNED_^1*_%08_€€/UNASSIGNED_^1*_%07_/UNASSIGNED_^1*_%06_/UNASSIGNED_^1*_%05_/UNASSIGNED_^1*_%04_/UNASSIGNED_^1*_%03_/UNASSIGNED_^1*_%02_/UNASSIGNED_^1*_%01_/UNASSIGNED_^1*_%00_/UNASSIGNED_^1*_]_^1*_$B R E A K D O W N_!O F_!D R F L A G_!W O R D_^1*_]_^1*_$B I T_4M E A N I N G_^1*_]_^1*_%15_/1 = ECHO ALL INPUT_^1*_%14_/**_^1*_%13_0*_^1*_%12_0*_^1*_%11_0*_^1*_%10_0*_^1*_%09_0*** INPUT TIMEOUT PERIOD€€ (SECONDS)_^1*_%08_0*_)( 0 = INFINITE PERIOD )_^1*_%07_0*_^1*_%06_0*_^1*_%05_0*_^1*_%04_/**_^1*_%03_/**_^1*_%02_0*** PRIORITY OF USER INPUT PROGRAM_^1*_%01_0*_^1*_%00_/**_^1*_]_^1_%EJT_]_^1*_$I N I T I A T O R_!E N T R Y_^1_%SPC 5_^1I3644 STQ- I_,SAVE ADDRESS OF PHYSTAB_^1*_8BEING SETUP._^1_%RTJ- (AFNR)_'SEE IF A REQUEST IS UP_^1_%JMP* OUTREQ_'NO REQUEST, EXIT FROM INITIATOR_^1€€_%LDA- ESTAT1,I_$REQUEST FOUND - CHECK TYPE_^1_%AND- ONEBIT_'IS THIS AN OUTPUT REQUEST_^1_%SAN OUTREQ_'YES_^1_%JMP* TAPE_)NO, ASSUME IT IS A TAPE MOTION REQUEST_^1_%SPC 1_^1OUTREQ ENQ 6_^1_%RTJ* MUXINT_'CALL FOR INTERRUPT FROM MULTIPLEXOR_^1_%JMP- (ADISP)_)AND EXIT_^1_%SPC 5_^1*_$C O N T I N U A T O R_"E N T R Y_^1_%SPC 5_^1C3644 STQ- I_,SAVE ADDRESS OF FIRST PHYSTAB ON THIS €€MUX_^1_%ENQ 2_^1_%RTJ* MUXINT_'ACKNOWLEDGE INTERRUPT_^1_%JMP* PR361_(PROCESS INTERRUPT OF THE C. A._^1_%SPC 1_^1EXIT_!ENQ 6_^1_%RTJ* MUXINT_'REQUEST NEXT CLOCK INTERRUPT_^1_%JMP- (ADISP)_%EXIT TO WAIT FOR NEXT INTERRUPT_^1_%EJT_]_^1*_$R O U T I N E_"T O_"P R O C E S S_"D A T A_"O N_^1_%SPC 1_^1*_$T H E_!3 6 1_!C O M M U N I C A T I O N S_!A D A P T E R_^1_%SPC 3_^1PR361 LDQ- €€EWES,I_^1_%INP REJECT-*_$INPUT THE DATA WORD_^1_%STA- ESTAT2,I_$SAVE STATUS AND CHARACTER IN PHYSTAB_^1_%RTJ* CATYPE_'IS THIS A 361-4 CA_^1_%SAZ CA3614_'YES_^1_%LDA- ONEBIT+15_#NO, 361-1 IS ALWAYS CONNECTED_^1_%JMP* READY_^1CA3614 INP REJECT-*_^1_%ENA 2_,BE SURE THAT CHARACTER REQUEST IS ENABLED_^1_%OUT REJECT-*_^1_%INP REJECT-*_$OBTAIN THE 2ND LEVEL STATUS_^1_%ALS 9_,POSITI€€ON THE DATA SET READY STATUS (BIT 06)_^1_%AND- ONEBIT+15_^1READY EOR- ESTAT2,I_$AS BIT 15 OF THE STATUS WORD_^1_%STA- ESTAT2,I_^1_%SPC 1_^1_%LDA- SLFLAG,I_^1_%AND- ONEBIT+10_#HAS THE CA JUST BEEN DISCONNECTED_^1_%SAZ CONECT_'NO_^1_%LDA- ESTAT2,I_$YES, IS THE DATA SET STILL READY_^1_%SAM CONECT_'YES, WAIT TO RE-CONNECT_^1_%INP REJECT-*_$NO_^1_%LDA- ONEBIT+7_^1_%OUT REJECT-*_$R€€ECONNECT THE CA_^1_%CLR A_^1_%STA- SLFLAG,I_$CLEAR THE DYNAMIC STATUS WORD_^1CONECT LDA- ESTAT2,I_^1_%LLS 4_,CHECK FOR CHARACTER READY (BIT 11=1)_^1_%SAP SENDCR_'NO CHARACTER, GO PROCESS THE OUTPUT_^1_%JMP* PROCES_'GO PROCESS THE INPUT CHARACTER_^1_%SPC 4_^1*_$R O U T I N E_"T O_"G E T_"P H Y S T A B_"O F_^1_%SPC 1_^1*_$N E X T_"C O M M U N I C A T I O N S_"A D A P T E R_^1_%€€SPC 3_^1NEXT_!LDA- NXUNIT,I_$PICKUP ADDRESS OF NEXT CA FROM PHYSTAB OF_^1_%INA 0_,THIS CA. IF ADDRESS = FFFF, CURRENT CA IS_^1_%SAN ONEMOR_'THE LAST CA IN THE NETWORK._^1_%JMP* EXIT_)LAST UNIT PROCESSED, EXIT_^1_%SPC 1_^1ONEMOR STA- I_,NOT LAST CA, RETURN WITH ADDRESS_^1_%JMP* PR361_(OF NEXT PHYSTAB IN I-REGISTER_^1*_$W R I T E_"R E Q U E S T_"P R O C E S S O R_^1_%SPC 5_^1SEN€€DCR LLS 2_^1_%LDA- EREQST,I_$IS THIS CA IN USE_^1_%SAM OK_+YES_^1_%LDA- SLFLAG,I_^1_%AND- ONEBIT+11_#NO, IS THERE INPUT IN PROCESS_^1_%SAZ GONEXT_'NO, PROCESS THE NEXT CA_^1_%LDA- ESTAT2,I_$YES, IS THE CA CONNECTED_^1_%SAP GONEXT_'YES_^1_%JMP* TOCHK_(NO, REPORT A DISCONNECT_^1_%SPC 1_^1OK_#LRS 1_,IS THERE CHARACTER REQUEST STATUS (BIT 10=1)_^1_%SAP GONEXT_'NO, PROCESS THE NE€€XT CA_^1_%LDA- ESTAT2,I_$IS THE CARRIER ON_^1_%SAM OK1_*YES_^1_%JMP* TOCHK_(NO, TERMINATE THE REQUEST WITH ERROR_^1GONEXT JMP* NEXT_)CHECK THE NEXT CA_^1_%SPC 1_^1OK1_"LDA- ESTAT1,I_$IS THIS A WRITE OR AN FWRITE REQUEST_^1_%AND- ONEBIT+1_^1_%SAZ NORMAL_'SKIP IF UNFORMATTED REQUEST_^1_%LDA- SLFLAG,I_$MAKE SURE CONTROL WORD IS TRANSMITTED IF_^1_%AND- ONEBIT+14_#THIS IS A FORMATTED€€ REQUEST_^1_%SAN NORMAL_'CONTROL WORD HAS BEEN TRANSFERRED_^1_%LDA- SLFLAG,I_^1_%ADD- ONEBIT+13_#INCREMENT THE CHARACTER COUNT_^1_%STA- SLFLAG,I_^1_%ALS 1_,IS THIS THE FIRST CHARACTER_^1_%SAM OK3_*NO_^1_%LDA- ECCOR,I_%YES_^1_%INA -1_+ALLOW FOR THE CONTROL CHARACTERS_^1_%STA- ECCOR,I_^1OK3_"LDQ- CNTRL1,I_^1_%JMP* SEND1_(PROCESS THE CONTROL CHARACTERS_^1_%EJT_]_^1NORMAL LDA- CURC€€AR,I_^1_%INA -CR_*WAS THE PREVIOUS CHARACTER A (CR)_^1_%SAN SEND0_(NO_^1_%RTJ SENDIT_'YES, REPEAT IT TO ALLOW DELAY BEFORE_^1_%ENA 0_,NEXT OUTPUT_^1_%STA- CURCAR,I_^1TONXT JMP* NEXT_)WAIT FOR NEXT INTERRUPT_^1_%SPC 1_^1SEND0 LDQ- ECCOR,I_%PICKUP ADDRESS OF NEXT CHARACTER TO SEND_^1_%LDQ- (ZERO),Q_$PICKUP WORD TO BE SENT_^1SEND1 LDA- ESTAT1,I_^1_%AND- ONEBIT+2_$IS THIS THE U€€PPER OR LOWER CHARACTER_^1_%SAZ SEND2_(UPPER_^1_%QLS 8_,LOWER_^1_%RAO- ECCOR,I_%INCREMENT TO THE NEXT WORD_^1SEND2 LLS 8_,POSITION THE CHARACTER_^1_%STA- CURCAR,I_(AND SAVE IT_^1_%SPC 1_^1_%INA -DISCON_%IS THE CHARACTER A DISCONNECT_^1_%SAN OK4_*NO_^1_%LDQ- EWES,I_'YES_^1_%RTJ* CATYPE_'IS THIS A 361-4 CA_^1_%SAN OK6_*NO, IGNORE THE DISCONNECT_^1_%INP REJECT-*_$YES, SELECT €€THE ODD CHANNEL_^1_%ENA $40_*SELECT THE DISCONNECT BIT_^1_%OUT REJECT-*_$PERFORM THE DISCONNECT_^1_%LDA- SLFLAG,I_^1_%EOR- ONEBIT+10_#SET THE DISCONNECT INDICATOR_^1_%STA- SLFLAG,I_^1_%JMP* CMPLET_'COMPLETE THE REQUEST_^1_%SPC 1_^1OK4_"INA -ETX+DISCON_!IS THE CHARACTER AN ETX_^1_%SAZ CMPLET_'YES_^1_%RTJ* SENDIT_'NO, TRANSMIT THE CHARACTER_^1OK6_"LDA- ESTAT1,I_^1_%EOR- ONEBIT+2€€_$SWITCH TO THE OTHER HALF WORD_^1_%STA- ESTAT1,I_^1_%LDA- ELSTWD,I_$PICKUP LWA+1_^1_%LDQ- ECCOR,I_%PICKUP THE CURRENT CORE ADDRESS_^1_%RTJ+ COMPV4_'COMPARE VALUES TO SEE IF REQUEST COMPLETED_^1_%SAN NOTCPT_'SKIP IF REQUEST NOT COMPLETE_^1_%STA- ESTAT1,I_$CLEAR ERROR BITS IN PHYSTAB_^1CMPLET RTJ* COMPLT_'GO TO COMPLETE THE REQUEST_^1_%SPC 1_^1NOTCPT JMP* NEXT_,AND PROCESS THE NE€€XT CA_^1_%EJT_]_^1_%SPC 5_^1_%SPC 5_^1*_%T A P E_"M O T I O N_"R E Q U E S T_"P R O C E S S O R_^1_%SPC 5_^1*_8CURRENTLY TAPE MOTION REQUESTS ARE IGNORED._^1TAPE_!RTJ* COMPLT_'IF THESE REQUESTS ARE TO BE HONORED,_^1*_8THE PROCESSOR MAY BE INSERTED HERE._^1_%JMP- (ADISP)_^1_%SPC 5_^1*_$R O U T I N E_"T O_"A C K N O W L E D G E_!O R_^1_%SPC 1_^1*_$R E Q U E S T_!I N T E R R U P €€T_!F R O M_!M U X ._^1_%SPC 5_^1MUXINT NOP 0_^1_%STQ- TEMP,I_^1_%LDA- EWES,I_^1_%AND- LPMASK+23_#ISOLATE MUX ADDRESS_^1_%INA 1_,SET DIRECTOR BIT_^1_%TRA Q_^1_%LDA- TEMP,I_^1_%OUT REJECT-*_$PERFORM THE INTERRUPT CONTROL OPERATION_^1_%JMP* (MUXINT)_$RETURN TO CALLER_^1_%EJT_]_^1*_$I / O_!R E J E C T_!P R O C E S S O R S_^1_%SPC 5_^1REJECT JMP* INTREJ_^1_%JMP* EXTREJ_^1_%SPC €€1_^1INTREJ ENA 5_,*** INTERNAL REJECT_!ERROR 05_^1_%JMP* TOERR_(LOG ERROR_^1_%SPC 1_^1EXTREJ ENA 6_,*** EXTERNAL REJECT_!ERROR 06_^1_%JMP* TOERR_(LOG ERROR_^1_%SPC 5_^1*_$R O U T I N E_!T O_!D E T R M I N E_!T H E_!C A_!T Y P E_^1_%SPC 5_^1CATYPE NOP 0_^1_%LDA- EREQST,I_^1_%ARS 4_^1_%AND- LPMASK+7_$ISOLATE THE TYPE CO4E OF THIS DEVICE_^1_%INA -TYPE_(IS THIS A 361-4_^1_%SA€€N CATYP1_'NO_^1_%INQ $10_*YES, ADDRESS THE ODD CHANNEL_^1CATYP1 JMP* (CATYPE)_$AND EXIT_^1_%EJT_]_^1*_$R O U T I N E_"T O_"P R O C E S S_"I N P U T_"D A T A_^1_%SPC 5_^1PROCES LLS 2_,IS THERE LOST DATA STATUS (BIT 09=1)_^1_%SAP NTLOST_'NO_^1_%ENA 1_,*** LOST DATA_!ERROR 01_^1_%JMP* TOERR_(LOG ERROR_^1_%SPC 1_^1NTLOST LLS 1_,IS THERE LINE BREAK STATUS (BIT 08=1)_^1_%SAP N€€TBRAK_'NO_^1_%LDA =N$0303_%*** LINE BREAK ERROR 33_^1TOERR JMP SCHERR_'LOG ERROR_^1_%SPC 1_^1NTBRAK LDA- ESTAT2,I_^1_%SAM OK11_)THE CARRIER IS ON_^1TOCHK JMP ERRCHK_'ITS NOT ON, TERMINATE WITH ERROR_^1_%SPC 1_^1OK11_!AND- LPMASK+7_$ISOLATE THE CHARACTER_^1_%SAN OK12_^1_%JMP* NEXT_)IGNORE NULL INPUTS_^1_%SPC 1_^1OK12_!INA -RB_*IS THIS A RUBOUT_^1_%SAZ RUBOUT_'YES_^1_%I€€NA +RB-LC_'NO, IS IT THE LOWER CASE SET_^1_%SAP LOCASE_'YES_^1_%INA LC*1/3_'NO, RESTORE THE CHARACTER_^1LOCASE INA LC*2/3_'YES, CONVERT TO UPPER CASE_^1_%STA- CURCAR,I_$SAVE THE CHARACTER_^1_%LDA- DRFLAG,I_$IS ECHO MODE ENABLED_^1_%SAP OK13_)NO_^1_%RTJ* SENDIT_'YES, ECHO THE INPUT CHARACTER_^1OK13_!LDA- CURCAR,I_^1_%INA -CR_*IS THIS A CARRIAGE RETURN_^1_%SAN NOTCR_(NO_^1_%JM€€P* CRIN_)YES, TERMINATE INPUT_^1_%SPC 1_^1NOTCR JMP* TERMIN_'GO CHECK FOR OTHER TERMINATORS_^1_%SPC 1_^1RUBOUT LDA- SLFLAG,I_^1_%AND- LPMASK+15_^1_%EOR =N$9000_%SET THE SLEW AND RUBOUT FLAGS_^1_%STA- SLFLAG,I_$SO THAT NO INPUT IS PROCESSED UNTIL A CR._^1_%EJT_]_^1CKSLEW LDA- SLFLAG,I_$IS A SLEW IN PROCESS_^1_%SAP OK14_)NO, GO HANDLE THE CHARACTER_^1_%JMP* NOTCPT_'YES, PROCESS €€NEXT CA_^1_%SPC 1_^1OK14_!LDA- DRFLAG,I_^1_%ARS 4_^1_%AND- LPMASK+11_#ISOLATE THE INPUT TIMEOUT PERIOD_^1_%SAN SETCLK_^1_%ENA -1_+DISABLE THE INPUT TIMEOUT_^1SETCLK STA- EDCLK,I_^1_%LDQ- BFINDX,I_$PICKUP INDEX TO THE BUFFER_^1_%LDA- INBUFF,B_$SEE IF THIS SLOT ALREADY CONTAINS A CHARACTER_^1_%SAM STORE_(YES SKIP DOWN TO INSERT THE SECOND_^1*_=CHARACTER INTO THE WORD_^1_%SQN O€€K15_^1_%LDA- SLFLAG,I_$NEW INPUT_^1_%EOR- ONEBIT+11_#SET THE INPUT IN PROCESS FLAG_^1_%STA- SLFLAG,I_^1OK15_!LDA- CURCAR,I_$PICKUP THE INPUT CHARACTER_^1_%ALS 8_,SHIFT CHAR TO UPPER HALF OF WORD_^1_%EOR- ONEBIT+15_#SET 1 CHAR BIT_^1_%STA- INBUFF,B_$SAVE THIS CHARACTER IN THE BUFFER_^1_%JMP* OK16_)CHECK FOR TAPE STOP_^1_%SPC 1_^1STORE AND- LPMASK+15_#STRIP UPPER BIT THAT FLAGED €€SINGLE CHARACTER_^1_%ADD- CURCAR,I_$ADD SECOND CHARACTER TO WORD_^1_%STA- INBUFF,B_$STORE THE TWO CHARACTERS IN THE BUFFER_^1_%RAO- BFINDX,I_$ADD 1 TO BUFFER INDEX_^1_%ENA 39_+CHECK FOR BUFFER FULL_^1_%SUB- BFINDX,I_^1_%SAP OK16_)NOT FULL_^1_%LDA- SLFLAG,I_$FULL, SET SLEW FLAG_^1_%AND- LPMASK+15_^1_%EOR- ONEBIT+15_^1_%STA- SLFLAG,I_^1OK16_!LDA- CURCAR,I_^1_%INA -XOFF_(WAS THE CH€€ARACTER A TAPE STOP_^1_%SAN NOXOFF_'NO_^1_%JMP* CRIN_)YES, TERMINATE THE INPUT_^1_%SPC 1_^1NOXOFF JMP* TONEXT_'PROCESS THE NEXT CA_^1_%EJT_]_^1*_$R O U T I N E_"T O_"T R A N S M I T_"D A T A_^1_%SPC 5_^1SENDIT NOP 0_^1_%LDA- CURCAR,I_$PICKUP THE CHARACTER TO BE TRANSMITTED_^1_%SPA- CURCAR,I_2EVEN PARITY GENERATION_^1_%SAN OK51_6EVEN PARITY GENERATION_^1_%LDA- CURCAR,I_2EVEN PA€€RITY GENERATION_^1_%ADD- ONEBIT+7_2EVEN PARITY GENERATION_^1_%JMP* OK52_^1OK51_!LDA- CURCAR,I_^1OK52_!ADD- ONEBIT+11_#ALWAYS CLEAR TEST MODE_^1_%LDQ- EWES,I_'PICKUP CA ADDRESS_^1_%OUT REJECT-*_$TRANSMIT CHARACTER_^1_%ENA 1_^1_%STA- EDCLK,I_%SET THE DIAGNOSTIC CLOCK_^1_%JMP* (SENDIT)_^1_%SPC 5_^1*_$R E Q U E S T_!C O M P L E T I O N_!P R O C E S S O R_^1_%SPC 5_^1COMPLT NOP 0_^€€1_%LDA- SLFLAG,I_^1_%AND- ONEBIT+10_#IS THE DISCONNECT FLAG SET_^1_%SAN COMPL1_'YES, DONT CLEAR THE WORD YET_^1_%STA- SLFLAG,I_$CLEAR THE DYNAMIC DATA FOR THIS REQUEST_^1COMPL1 RTJ- (COMPRQ)_^1_%RTJ- (AFNR)_^1_%NOP 0_^1_%JMP* (COMPLT)_^1_%EJT_]_^1*_$R O U T I N E_!T O_!C H E C K_!F O R_!T E R M I N A T O R S_^1_%SPC 3_^1TERMIN LDQ- CNTRL2,I_$ARE THERE ANY SPECIAL TERMINATORS DEF€€INED_^1CKOTHR SQZ NOTERM_'NO_^1_%LRS 8_^1_%ARS 8_,POSITION THEM_^1_%SUB- CURCAR,I_$IS THIS ONE_^1_%SAZ QUIT_)YES_^1_%JMP* CKOTHR_'NO, CHECK THE OTHER ONE_^1NOTERM JMP* CKSLEW_'NONE HERE, RETURN_^1_%SPC 1_^1QUIT_!LDA- ELU,I_(IS THERE AN ACTIVE REQUEST_^1_%SAZ NOACT_(NO_^1_%RTJ* COMPLT_'YES, COMPLETE IT NOW_^1NOACT LDA- CURCAR,I_^1_%ALS 8_,POSITION THE CHARACTER_^1_%ADD- ONEB€€IT+15_'AS A SINGLE INPUT_^1_%STA- INBUFF,I_$PLACE IT IN THE INPUT BUFFER_^1_%ENA 0_/AND FORCE A ONE WORD INPUT_^1_%STA- BFINDX,I_^1_%SPC 3_^1*_$R O U T I N E_"T O_"H A N D L E_"E N D_"O F_"I N P U T_^1_%SPC 3_^1CRIN_!LDA- SLFLAG,I_^1_%ALS 3_,IS THE RUBOUT FLAG-BIT SET_^1_%SAP ENDIN_(NO, SCHEDULE THE USER ROUTINE_^1_%RTJ* CLNUP_(YES, CLEAR POINTERS AND FLAGS_^1_%JMP* TONEXT_*AN€€D PROCESS THE NEXT CA_^1_%SPC 1_^1ENDIN RTJ* CLNUP_(CLEAR POINTERS FOR THE NEXT INPUT_^1_%RTJ* FIND_)OBTAIN THE LOGICAL UNIT IN Q_^1_%RTJ* SCHUSR_*AND SCHEDULE THE USER PROGRAM_^1_%JMP* TONEXT_'PROCESS NEXT CA_^1_%EJT_]_^1*_$R O U T I N E_!T O_"F I N D_!T H E_!A C T I V E_!L . U ._^1_%SPC 3_^1FIND_!NOP 0_^1_%LDQ+ LOG1A_^1_%EQU ALOG1A(*-1)_^1FIND1 LDA* (ALOG1A),Q_^1_%SUB- I_,I€€S THIS THE ACTIVE L. U._^1_%SAZ FIND2_(YES_^1_%SQZ FIND2_(NO SUCH LU_^1_%INQ -1_^1_%JMP* FIND1_(NO, KEEP CHECKING_^1FIND2 JMP* (FIND)_'RETURN_^1_%SPC 3_^1*_$R O U T I N E_!T O_!C L E A R_!F L A G S_!U P O N_^1_%SPC 1_^1*_$C O M P L E T I O N_"O F_!I N P U T_^1_%SPC 3_^1CLNUP NOP 0_,ROUTINE TO ZERO THE CA COUNTERS_^1_%LDQ- BFINDX,I_^1_%LDA- INBUFF,B_$MAKE SURE R/L BIT IS CL€€EARED FROM DATA_^1_%SAP OK17_)BEFORE SENDING DATA TO APPLICATION PROGRAM_^1_%EOR- ONEBIT+15_#CLEAR BIT INDICATING ONLY ONE CHAR IN WORD_^1_%AND- LPMASK+24_#CLEAR GARBAGE FROM LOWER HALF OF WORD_^1_%STA- INBUFF,B_$RESTORE THE LAST WORD OF DATA WITHOUT R/L BIT_^1_%INQ 1_,INCREASE WORD COUNT TO INCLUDE THE LAST CHAR_^1OK17_!STQ- WDCT,I_'SAVE WORD-COUNT IN LWA+1 OF BUFFER_^1_%ENA 0_€€^1_%STA- BFINDX,I_$CLEAR THE INDEX TO THIS CA BUFFER_^1_%STA- SLFLAG,I_$ALSO CLEAR THE DYNAMIC DATA FLAG_^1_%ENA -1_^1_%STA- EDCLK,I_%DISABLE THE DIAGNOSTIC CLOCK_^1_%JMP* (CLNUP)_^1_%SPC 3_^1*_$T I M E O U T_!E R R O R_!E N T R Y_^1_%SPC 3_^1E3644 STQ- I_,ERROR ENTRY_^1_%RTJ* FIND_)GET THE L. U. WHICH CAUSED THE ERROR_^1_%ADQ- ONEBIT+15_^1_%RTJ* SCHUSR_'SCHEDULE THE USER WITH €€Q = $8000 + L.U._^1_%ENA 0_,*** TIMEOUT ERROR_!ERROR 00_^1_%EJT_]_^1*_$E R R O R_!L O G G I N G_!R O U T I N E_^1_%SPC 5_^1SCHERR STA- TEMP,I_'SAVE ERROR CODE_^1_%RTJ* FIND_)OBTAIN THE LOGICAL UNIT_^1_%LDA- TEMP,I_^1_%QLS 6_^1_%EAQ Q_,FORM ERROR LOGGER CODE_^1_%RTJ+ LOG_*GO LOG ERROR_^1_%LDA- TEMP,I_^1_%ADD* ZEROS_(CONVERT ERROR CODE TO ASCII_^1_%STA* ERMSG+6_)AND SAVE_^1_%RTJ€€* FIND_)OBTAIN THE LOGICAL UNIT_^1_%LRS 16_^1_%DVI- TEN_*CONVERT IT TO DECIMAL_^1_%ALS 8_^1_%EAQ A_^1_%EOR* ZEROS_(CONVERT TO ASCII_^1_%STA* ERMSG+1_%SAVE IN MESSAGE_^1_%SPC 1_^1_%RTJ- (AMONI)_^1ERRQ_!ADC $0DCC_(FWRITE REQUEST, LEVEL 12_^1_%ADC 0_^1_%ADC 0_^1_%ADC $18FC_(SYSTEM COMMENT DEVICE_^1_%ADC LERRM_^1_%ADC ERMSG-ERRQ_^1_%SPC 1_^1ERRCHK LDA- ESTAT1,I_^1_%AND- ONEB€€IT_'DID THE ERROR OCCUR ON A WRITE REQUEST_^1_%SAZ RDERR_(NO_^1_%LDA- ESTAT1,I_$YES_^1_%EOR- ONEBIT+15_#SET THE I/O ERROR INDICATOR_^1_%STA- ESTAT1,I_^1_%RTJ* COMPLT_'COMPLETE THE REQUEST_^1TONEXT JMP NEXT_)AND GO CHECK THE NEXT CA_^1_%SPC 1_^1RDERR JMP* ENDIN_(COMPLETE AS IF A (CR) WAS INPUT_^1_%EJT_]_^1*_$R O U T I N E_!T O_!S C H E D U L E_!T H E_!U S E R_^1_%SPC 5_^1SCHUSR€€ NOP 0_^1_%LDA- USER,I_'PICK UP THE USER ENTRY POINT_^1_%SAZ SCH1_)NOT DEFINED_^1_%STA* SCHADD_'SAVE IN THE CALL_^1_%LDA- DRFLAG,I_^1_%AND- LPMASK+4_$ISOLATE THE PRIORITY LEVEL_^1_%EOR =N$5200_)AND FORM A SCHEDULER CALL_^1_%STA* SCHCAL_^1_%SPC 1_^1_%RTJ- (AMONI)_^1SCHCAL ADC 0_,SCHEDULE THE USER APPLICATIONS PROGRAM_^1SCHADD ADC 0_,TO PROCESS THE INPUT DATA_^1_%SPC 1_^1SCH1_€Ά!JMP* (SCHUSR)_$RETURN TO CALLER_^1_%SPC 5_^1*_$D I A G N O S T I C_"B U F F E R_^1_%SPC 5_^1ERMSG ALF $,L,NN FAILED XX$_^1_%EQU LERRM(*-ERMSG)_^1ZEROS ALF 1,00_^1_%END_]_^__ΆPD1713K CSY/ C06 P€1_%NAM D1713K_'DECK-ID C06 MSOS 4.1_-SUMMARY-079_^1*_$1713 TELETYPE DRIVER - KEYBOARD MODULE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^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 L€€OG_*ERROR LOGGING 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 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 R€€EQAD(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 MAS€€S 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 TI€€MEOUT 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_%RTJ CLEAR_^1_%LDA* (EOPFL€€G)_$CHECK IF IN_^1_%AND- ONEBIT+10_#KEYBOARD MODE_^1_%LDA- ONEBIT+15_F**MSOS 4.1**_^1_%STA* (EOPFLG)_^1_%LDA- ONEBIT+10_#SELECT KEYBOARD MODE AND_^1_%INA 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 JMPERR-*_^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 MOTION 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_/*MSOS V4.0_^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 CAUS€€E INTERRUPT_^1EXIT_!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 INPVAL_'INTPUT TIME OUT VALUE_^1STIME STQ- TIME,I_'SET DIAG. CLOCK_^1_%JMP- (DISPAD)_$EXIT TO DISPATCHER_^1_%EJT_]_^1***_"DRIVER CONTINUATOR ENTRY_^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_%AND- BIT11_(MANUAL INT._^1_%SAN GOMAN_$SKIP IF MANUAL INTERRUPT_^1_%JMP* NOMAN_(GO TO TEST LOGICAL UNIT NUMBER_^1GOMAN LDA- (I)_*MANUAL INTERRUPT ENTRY_^1_%STA* SCHCAL_^1_%RTJ- ($F4)_(SCHEDULE MANUAL INTERRUPT PROCESSER_^1SCHCAL NUM $1200_^1_%ADC MI_^1_%ENA $38_L**MSOS 4.1**_^1_%AND- STATUS,I_^1_%SAN NO€€MAN_^1_%LDA* (EOPFLG)_$TEST IF EOP INT NECESSARY_^1_%SAM EOP_^1_%LDA* FLAG_^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_%JMP- (DISPAD)_$TO DISPATCHER_^1NOMAN ENA $20_^1_%AND- STATUS,I_$CHECK ALARM_^1_%SAZ NOMAN1_^1_%ENA $40_^1_%AND- STATUS,I_^1_%SAZ ALM_^1_%ENA LOS€€DAT_'LOST DATA_^1_%JMP* ALM+1_^1ALM_"ENA ALARM_^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_%INA 1_N**MSOS 4.1**_^1_%STA- I_€€,PUT INITIATOR ADDRESS IN I_'**MSOS 4.1**_^1_%CLR A_,CLEAR OUT PDT ADDRESS IN TABLE_"**MSOS 4.1**_^1_%STA* W1713K,Q_G**MSOS 4.1**_^1_%LDQ- I_,PUT PDT ADDRESS INTO Q_+**MSOS 4.1**_^1_%INQ -1_M**MSOS 4.1**_^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 LO€€OK AT NEXT_/**MSOS 4.1**_^1NOWAIT JMP- (DISPAD)_$EXIT TO DISPATCHER_/**MSOS 4.1**_^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)_^1_%STA FLAG_^1DONE_#RTJ*_$CMPLET_^1_(JMP_%TOFNR_C**MSOS 4.1**_^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- S€€TATUS,I_$STORE STATUS IN PHYSICAL DEVICE TABLE_^1_%RTJ+ MAKEQ_^1_%RTJ- (ACOMPR)_$TO COMPLETE REQUEST_^1_%ENA 0_^1_%STA+ S13BZY_^1_(JMP*_$(CMPLET)_^1_%SPC 2_^1JMPERR JMP* REJECT_'INTERNAL REJECT_^1_%JMP* REJECT+1_$EXTERNAL REJECT_^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 SWITCHS_^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_,SK€€IP 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 ALARM._^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 C€€HARACTER SWITCH_^1_%STA- SWITCH,I_^1_%SQZ NOCONT_^1_%ENA $D_^1TOSND JMP SENDCH_^1NOT1ST SQZ 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 BIT6A7_^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 EXIT 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 EN€€A $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 CHARACTER 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_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT REJECT-*_!OUTPUT CHARACTER_^1_%LDA- CORE,I_^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_^1GOGODI JMP EXIT_)TO EXIT_^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_'CLEAR 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 RETUR€€N_^1_%INA -$72_^1_%SAN 1_,SKIP IF NOT CANCEL 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 R€€EG_^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_$STOR€€E 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* GOGODI_#TO EXIT_^1NOG_"ENA $10_^1_%EOR- SWITCH,I_$REVERSE PASS SWITCH_^1_%STA- SWITCH,I_^1_%JMP* GOGODI_#TO EXIT_^1CARRET EN€€A $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_*MSOS V4.0_^1_%SPC 2_O*MSOS V4.0_^1ALMINT CLR A_O*MSOS V4.0_^1_%INQ 2_O*MS€€OS 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 HOPP€€ER 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_^1AL€€M4_!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_%LDA- SWITCH,I_!CHEC€€K IF DATA INT. FOR SLEW_**MSOS V4.0_^1_%SAP DATA_%SKIP IF NOT FOR SLEW_1*MSOS V4.0_^1_%JMP* SLWDAT_J*MSOS V4.0_^1DATA_!LDA- BUFFAD,I_G**MSOS 4.1**_^1_%SUB- BUFFER,I_L68*1546_^1_%INA -80_*MUST READ ONLY 80 COLUMNS (0-79) **MSOS 4.1**_^1_%SAM GETDAT_'SKIP IF LEGAL DATA INT._***MSOS 4.1**_^1_%ENA DINTER_'DATA INTERRUPT NUMBER 81 ERROR 34 **MSOS 4.1**_^1_%JMP* TERROR_I**MSOS 4.1**€€_^1GETDAT INP DEJECT-*_$GET DATA WORD_4**MSOS 4.1**_^1_%LDQ- BUFFAD,I_$CURRENT BUFFER ADDRESS_+**MSOS 4.1**_^1_%STA- (ZERO),Q_$STORE INTO BUFFER_0**MSOS 4.1**_^1EXIT_!RAO- BUFFAD,I_$INCREMENT CURRENT WORD ADDRESS_"**MSOS 4.1**_^1_%LDQ- CALL,I_'FUNCTION_9**MSOS 4.1**_^1_%ENA $1C_*INT. ON DATA - EOP - ALARM_'**MSOS 4.1**_^1_%OUT DEJECT-*_^1SAVSTA ENA 1_^1_%STA- TIME,I_^1_%JMP- (A€€DISP)_%FXIT TO DISPATCHER_^1TTDONE JMP DONE_^1DEJECT JMP* REJT_^1_%JMP* REJT+1_^1_%EJT_]_^1***_"PROCESS EOP INTERRUPT_^1_%SPC 2_^1EP1729 RTJ+ RLAQ_)RELEASE AQ CHANNEL_/MSOS 4.1**_^1_%STQ- I_NMSOS 4.1**_^1_%LDA- SWITCH,I_$CHECK FOR SLEW EOP_/**MSOS 4.1**_^1_%SAP EP_N*MSOS V4.0_^1_%CLR A_,CLEAR COLUMN 1 READ SWITCH_(*MSOS V4.0_^1_%STA* COL1_L*MSOS V4.0_^1_%JMP SNC_*FEED NEXT CAR€€D FOR SLEW_+*MSOS V4.0_^1EP_#LDA- BUFFAD,I_G**MSOS 4.1**_^1_%SUB- BUFFER,I_$SORRY - NO FAST READ FEATURE_$**MSOS 4.1**_^1_%INA -80_*WE MUST READ 80 COLUMNS_***MSOS 4.1**_^1_%SAZ SCH_*SKIP IF 80 READ_2**MSOS 4.1**_^1_%ENA ERLYEP_'EARLY EOP INTERRUPT ERROR 35_$**MSOS 4.1**_^1_%JMP* TERROR_I**MSOS 4.1**_^1SCH_"LDQ- I_O*MSOS V4.0_^1_%RTJ* *+1_*CALCULATE ABS ADDRESSES_,***MSOS4.0_^1_€€%ADC 0_P***MSOS4.0_^1_%LDA* *-1_N***MSOS4.0_^1_%INA ENDOP-*+2_H***MSOS4.0_^1_%STA* SCHINP+2_I***MSOS4.0_^1SCHINP RTJ- (AMONI)_I*MSOS V4.0_^1_%ADC $520A_J**MSOS 4.1**_^1_%ADC ENDOP_L***MSOS4.0_^1_%JMP- (ADISP)_^1ENDOP STQ- I_^1_%LDA- BUFFER,I_$PROCESS END OF_^1_%STA- BUFFAD,I_$OPERATION INTERRUPT_^1*_84 CARDS DELETED_762*1303_^1_%ENA FORMTD_^1_%AND- SWITCH,I_^1_%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- EOFCRD,I_!CHECK FO€€R -_:*MSOS V4.0_^1_%ALS 4_,EOF CARD_^1_%AND- HFFF0_^1_%EAQ A_^1_%SAN TS1-*-1_"SKIP IF NOT EOF_6*MSOS V4.0_^1TTEF_!JMP EOFRD_(TO EOF READ_^1TS1_"JMP* FRDB1_^1_%SPC 2_O*MSOS V4.0_^1***_"PROCESS DATA INTERRUPT FOR SLEW REQUEST_.*MSOS V4.0_^1_%SPC 2_^1SLWDAT INP REJT-*_#READ FIRST COLUMN_4*MSOS V4.0_^1_%LDQ* COL1_)HAS COLUMN 1 BEEN CHECK_+*MSOS V4.0_^1_%SQN NEOFX_(FOR EOF,SKIP €€IF YES_/*MSOS V4.0_^1_%RAO* COL1_)SET COLUMN 1 CHECKED FLAG_)*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0_^1_%LDA- EOFCRD,I_$EOF CARD PAT_6*MSOS V4.0_^1_%AND- H0FFF_K*MSOS V4.0_^1_%EAQ A_O*MSOS V4.0_^1_%SAN NEOFX-*-1_G*MSOS V4.0_^1_%STA* COL1_L*MSOS V4.0_^1_%JMP* TTEF_L*MSOS V4.0_^1NEOFX JMP* EXIT+1_'WAIT FOR EOP_6*MSOS V4.0_^1COL1_!NUM 0_,CLUMN 1 READ FLAG_^1****_]_^1_%SPC 2_O*MSOS V4.0€€_^1FRDB1 TRQ A_^1_%AND- H00FF_$79 PUNCH_^1_%AND =N$0050_K72*1684_^1_%INA -$50_%IF FIRST CARD_^1_%SAZ FRDB2-*-1_^1_%ENA BINASC_'ASCII_^1_%AND- SWITCH,I_^1_%SAN TOASCI-*-1_^1_%ENA FIRST_(NO,FIRST WORD_^1_%AND- SWITCH,I_^1_%SAN NOT1ST_^1_%ENA BINASC_'YES,SET ASCII MODE_^1_%EOR- SWITCH,I_^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 ENA $20_*NO,IS CHECKSUM_^1_%LAQ A_,OVERRIDE BIT SET_^1_%SAZ FRDB3-*-1_#IN THIS CARD_^1_%ENA -ORIDE_'YES,SET IT_^1_%AND- SWITCH,I_$IN PHYSTAB_^1_%INA ORIDE_^1_%STA- SWITCH,I_^1FRDB3 TRQ A_,IS THE SEQUENCE_^1_%ARS 8_,NUMBER OK_^1_%AND- H00FF_€€^1_%SAZ VERIFY_'SEQ.NUMBER.EQ.0_^1_%STA- TPMWRD,I_$SAVE SEQ.NUMBER_^1_%SUB- SEQ,I_^1_%SAN SEQERR_'SEQ.ERROR_^1_%JMP* FRDB4_(NORMAL EXIT_^1VERIFY STA- SEQ,I_(RESET SEQ.TO ZERO FOR_^1_%JMP* FRDB4_(NAM CARD,MACSKL OR 00FF_^1SEQERR LDQ- TPMWRD,I_^1_%STQ- SEQ,I_(SET SEQ.CTR.FOR A READ THRU_^1_%ENA SEQER_(EXIT TO ERROR_^1TTTROR JMP TERROR_^1FRDB4 LDA- SEQ,I_(INCREMENT SEQUENCE_^1_%I€€NA 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_%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_*INI€€TIATED_^1_%QLS 4_^1_%LLS 4_^1_%ENQ CYCLE2-CYCLE1_^1GETWEX STQ- CYCLE,I_^1_%TRA Q_^1_%ADQ- CHKSUM,I_$UPDATE CHECKSUM_^1_%STQ- CHKSUM,I_^1_%LDQ- RETURN,I_^1_%JMP* GETWRD,Q_^1FRDB7 TRA Q_^1NOTOST LDA- LENGTH,I_^1_%SAN NOTUST-*-1_^1_%TRQ A_^1_%JMP* FRDB9_^1NOTUST LDA- CORE,I_^1_%SUB- LASTP1,I_$LAST PLUS 1_^1_%SAZ GOTALL-*-1_^1_%TRQ A_,NO,STORE THE WORD_^1_%LDQ- CORE,I_^1_%STA€€- (ZERO),Q_^1_%RAO- CORE,I_'INCREMENT CORE ADDRESS_^1GOTALL RAO- LENGTH,I_$HAS THE 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_*CALCULATE ABS ADDRESS_.***MSOS4.0_^1_%ADC 0_P***MSOS4.0_^1_%LDA* *-1_N***MSOS4.0_^1_%INA FEEDIT-*+2_G***MSOS4.0_^1_%STA* SCHDAT+1_H*MSOS V4.0_^1_%ADD =XALMLLV-FEEDIT_@**MSOS 4.1**_^1_%STA SCHALM+1_H*MSOS V4.0_^1_%RTJ- (AMONI)_^1SCHDAT 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 O€€N_^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*M€€SOS 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- S€€EQ,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- H000F_^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_%JMP 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*MSO€€S 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_'CHECK ILLEGAL HOLLERITH_***MSOS 4.1**_^1_%SAZ TMAKQ_(PUNCH FLAG_^1_%ENA HOLRTH_^1_%JMP* ERROR_^1TMAKQ EQU €€TMAKQ(*)_G**MSOS 4.1**_^1_%RTJ+ RLAQ_)RELEASE A/Q CHAN._0**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%RTJ- (COMPRQ)_^1_%JMP 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 REPO€€RT 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 COL€€UMN_^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- (Z€€ERO),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 €4CARD_^1ASCII4 JMP* DONE_%YES, FINISHED_^1_%END_]_^__4PD17293 CSY/ C47 P€1_%NAM D17293_'DECK-ID C47 MSOS 4.1_-SUMMARY-079_^1*_*1729-3 CARD READER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*P17293 ADC $520E_%00 SCHEDULER CALL_0**MSOS 4.1**_^1*_%ADC CI293_(01 INITIATOR ADDRESS_^1*_%ADC CC293_(02 CONTINUATOR ADDR€€ESS_^1*_%ADC CE293_(03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $05A1_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $11D2_(08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC L17€€293_'13 DRIVER LENGTH IF MASS MEMORY_^1*_%ADC S17293_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 PACKING CYCLE ADDRESS STORAGE_^1*_%NUM $000F_(16 E O F FORMAT (6789)_^1*_%ADC BFR293_'17 FIRST LOCATION OF 80 WORD INPUT BUFFER_^1*_%NUM 0_,18 CURRENT CARD BUFFER LOCATION_^1*_%NUM 0_,19 SUBROUTINE RETURN ADDRESS_^1*_%NUM 0_,20 CARD SEQUENCE NUMBER_^1*_%NUM 0_€€,21 RECORD LENGTH_^1*_%NUM 0_,22 CHECKSUM ACCUMULATOR_^1*_%NUM 0_,23 TEMPORARY STORAGE_^1*_%NUM 0_,24 OUTPUT OFFSET SWITCH_^1*_%NUM 0_,25 TEMPORARY STORAGE_^1*_%NUM 0_,26 HOLLERITH ERROR FLAG_^1*_%ADC U17293_'27 DIAGNOSTIC LOGICAL UNIT_^1**_]_^1*_$BZS BFR293(80)_"28 INPUT BUFFER_^1**_7107 INPUT BUFFER_^1*_]_^1_%EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^1_%EXT ALTD€€EV_^1_%EXT MAKEQ_^1_%EXT RQAQ_)REQUEST A/Q ALLOCATION_+**MSOS 4.1**_^1_%EXT RLAQ_)RELEASE A/Q ALLOCATION_+**MSOS 4.1**_^1_%EXT* CDRD_)CARD CONVERSION (READ)_+**MSOS 4.1**_^1_%EXT MAS300_'EXIT FOR DRIVER_^1_%SPC 2_^1_%ENT E17293_'DRIVER ERROR_5**MSOS 4.1**_^1_%ENT I17293_'DRIVER INITIATOR_1**MSOS 4.1**_^1_%ENT C17293_'DRIVER CONTINUATOR_/**MSOS 4.1**_^1_%SPC 2_^1_%EQU ADIS€€P($EA)_"ADDRESS OF DISPATCHER_^1_%EQU AFNR($B5)_^1_%EQU COMPRQ($B6)_^1_%EQU AMONI($F4)_^1_%EJT_]_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU TIME(4)_"DIAG. CLOCK TIME_^1_%EQU LU(5)_$LOGICAL UNIT_^1_%EQU REQAD(6)_!ADDRESS OF REQUEST_^1_%EQU CALL(7)_"HARDWARE ADDRESS_^1_%EQU ERRTAB(8) REQUEST STATUS_^1_%EQU SWITCH(9) DRIVER SWITCHS_^1_%EQU CORE(10)_!CORE ADDRESS€€ WORD_^1_%EQU LASTP1(11) LAST CORE LOCATION PLUS ONE_^1_%EQU STATUS(12) HARDWARE STATUS_^1_%EQU CYCLE(15) PACKING CYCLE_^1_%EQU EOFCRD(16) EOF CARD PATTERN_^1_%EQU BUFFER(17) STARTING ADDRESS OF 80 WORD BUFFER_^1_%EQU BUFFAD(18) CURRENT WORD ADRS. OF 80 WORD BUFFER_^1_%EQU RETURN(19) SUBROUTINE RETURN ADDRESS_^1_%EQU SEQ(20)_"SEQUENCE NUMBER_^1_%EQU LENGTH(21) RECORD LENG€€TH_^1_%EQU CHKSUM(22) CHECKSUM WORD_^1_%EQU TPMWRD(23)_^1_%EQU TMPWRD(23) TEMP.MOTION REQUEST PARAMETERS_^1_%EQU OFFSET(24) OFFSET CARD SWITCH_^1_%EQU ERRCOD(25) ERROR CODE_^1_%EQU HOLERR(26)_"HOLLERITH ERROR_2**MSOS 4.1**_^1_%EQU DIAGLU(27)_"DIAGNOSTIC LU_4**MSOS 4.1**_^1_%SPC 2_^1***_"ERROR CODES_^1_%SPC 2_^1_%EQU TIMERR(0) TIME OUT ERROR_^1_%EQU ALARM(2)_!ALARM_^1_%E€€QU CKSMER(4) CHECK SUM ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1_%EQU HOLRTH(8) ILLEGAL HOLLERITH PUNCH_^1_%EQU SEQER(9)_!OUT OF SEQUENCE ERROR_^1_%EQU LENGER(10) NO NEGATIVE RECORD LENGTH_^1_%EQU NO79ER(12) NO 79 PUNCH ON BINARY_^1_%EQU DINTER(34) DATA INTERRUPT NUMBER 81_^1_%EQU ERLYEP(35) EOP BEFORE ALL 80 READ_^1_%EJT_]_^1***_"MAS€€K BITS_^1_%SPC 2_^1_%EQU FORMTD(2) FORMATTED REQUEST IF BIT1=1_^1_%EQU ORIDE(4)_!CHECK SUM OVERRIDE_^1_%EQU BINASC(8) MODE BIT_^1_%EQU FIRST($10) FIRST CARD INDICATOR_^1_%EQU FSTCRD($10)_^1_%EQU QMARK($3F)_^1_%EQU ZERO($22)_^1_%EQU H0001($23)_^1_%EQU H000F(6)_^1_%EQU H00FF($A)_^1_%EQU H0FFF($E)_^1_%EQU H0080($2A)_^1_%EQU HFF00($1A)_^1_%EQU HFFF0($16)_^1_%EQU H0100€€($2B)_^1_%EQU HC000($20)_^1_%EQU HFFBF($39)_^1_%EQU LPMSK(2)_H*MSOS V4.0_^1_%EQU BIT11($2E)_^1_%EQU BIT14($31)_^1_%EQU BIT15($21)_^1_%EJT_]_^1_%SPC 2_^1START STQ- I_^1_%LDQ =XE17293-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC17293-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 2,I_^1_%LDQ =XI17293-START_A**MSOS 4.1**_^1_%AAQ A_^1_%STA- 1,I_^1_%JMP* I17293+1_^1MS300€€ JMP+ MAS300_'RELEASE BUFFER_3**MSOS 4.1**_^1E17293 STQ- I_N**MSOS 4.1**_^1_%ENA TIMERR_'TIME OUT ERROR_4*MSOS V4.0*_^1_%JMP* TTRROR_^1_%EJT_]_^1***_"DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I17293 STQ- I_,INIATIATOR_7**MSOS 4.1**_^1_%RTJ- (AFNR)_'GET A REQUEST_^1_%JMP* MS300_^1_%ENA 0_^1_%STA- TPMWRD,I_^1_%STA- CHKSUM,I_^1_%STA- CYCLE,I_^1_%STA- HOLERR,I_G**MSOS 4.1**_^1_%LDQ- REQAD€€,I_I*MSOS V4.0_^1_%LDA- (ZERO),Q_!GET REQUEST CODE_5*MSOS V4.0_^1_%ARS 9_O*MSOS V4.0_^1_%AND- LPMSK+5_I*MSOS V4.0_^1_%INA -14_'CHECK IF MOTION REQUEST_.*MSOS V4.0_^1_%SAN INITRD_#SKIP IF NOT MOTION_3*MSOS V4.0_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_'GET PARAMETERS_7*MSOS V4.0_^1_%SAP P3-*-1_#SKIP IF NOT ITERATIVE TYPE_+*MSOS V4.0_^1_%AND =N$7000€€_"GET ONLY PARAMETER_3*MSOS V4.0_^1P3_#AND- HFFF0_$NOT ITERATIVE - GET ALL PARAMETERS_"*MSOS V4.0_^1_%STA- TMPWRD,I_!SAVE PARAMETER STRING_0*MSOS V4.0_^1_%JMP MORMC_$PROCESS MOTION REQUEST_/*MSOS V4.0_^1INITRD JMP FEEDCD_#INITIATE CARD READ_^1_%SPC 2_^1***_"EOF READ - SET BIT 14 IN ERRTAB WORD_^1***_/SET BIT 11 IN STATUS WORD_^1_%SPC 2_^1EOFRD LDA- BIT14_(READ EOF_^1_%EOR- ER€€RTAB,I_$MARK THE REQUEST_^1_%STA- ERRTAB,I_$COMPLETE WITH ERROR_^1_%LDA- H0100_^1_%STA- OFFSET,I_^1_%ALS 3_O*MSOS V4.0_^1_%STA- STATUS,I_!SET BIT 11 IN STATUS WORD_,*MSOS V4.0_^1_%JMP* TODONE_J*MSOS V4.0_^1_%EJT_]_^1***_"CONVERT 12 BIT HOLL. COLUMN TO ASCII_^1_%SPC 2_^1CONVRT SAN 2_^1_%ENA $20_^1_%JMP* GETOUT_'CONVERT 12 BIT HOLLERITH_^1_%STQ- RETURN,I_^1_%TRA Q_,COLUMN TO ASC€€II_^1_%ENA 0_^1_%QLS 7_^1_%SQP 1_^1_%INA $71_*ROW 1_^1_%QLS 1_^1_%SQP 1_^1_%INA $62_*ROW 2_^1_%QLS 1_^1_%SQP 1_^1_%INA $63_*ROW 3_^1_%QLS 1_^1_%SQP 1_^1_%INA $64_*ROW 4_^1_%QLS 1_^1_%SQP 1_^1_%INA $65_*ROW 5_^1_%QLS 1_^1_%SQP 1_^1_%INA $66_*ROW 6_^1_%QLS 1_^1_%SQP 1_^1_%INA $67_*ROW 7_^1_%QLS 1_^1_%SQP 1_^1_%INA $18_*ROW 8_^1_%QLS 1_^1_%SQP 1_^1_%INA $79€€_*ROW 9_^1_%AND =N$FF8F_%CLEAR CARRY FORCING BITS FOR_^1_%QLS 5_,NUMERIC PUNCHES_^1_%SQP 1_^1_%INA $70_*ROW 12_^1_%QLS 1_^1_%SQP 1_^1_%INA $60_*ROW 11_^1_%QLS 1_^1_%SQP 1_^1_%INA $50_*ROW ZERO_^1_%AND- HFFBF_^1_%ENQ 0_^1_%LLS 9_,ILLEGAL PUNCH_^1_%SQZ NOHLER_^1_%LDQ- BUFFER,I_G**MSOS 4.1**_^1_%LDA- EOFCRD,I_G**MSOS 4.1**_^1_%AND- H0FFF_J**MSOS 4.1**_^1_%EOR- (ZERO),Q_G*€€*MSOS 4.1**_^1_%SAN 1_N**MSOS 4.1**_^1_%JMP* EOFRD_J**MSOS 4.1**_^1_%ENA 1_^1_%STA- HOLERR,I_G**MSOS 4.1**_^1_%ENA QMARK_^1_%JMP* SETUP_^1NOHLER LLS 6_^1_%LDQ CDRD,Q_I**MSOS 4.1**_^1_%SAN 1_,UPPER CHAR_^1_%LLS 8_,NO, SHIFT IT_^1_%LLS 8_^1SETUP AND- H00FF_^1_%LDQ- RETURN,I_^1GETOUT JMP ASCII1,Q_^1TTRROR JMP* TERROR_^1TODONE JMP* TTDONE_^1_%EJT_]_^1***_"DRIVER CONTINUATOR E€€NTRY_^1_%SPC 2_^1C17293 STQ- I_,CONTINUATOR ENTRY_0**MSOS 4.1**_^1_%LDQ- CALL,I_^1_%INP DEJECT-*_^1_%STA- STATUS,I_^1_%ENA 2_^1_%OUT DEJECT-*_$CLEAR INTERRUPTS_^1_%LDA- TIME,I_I**MSOS 4.1**_^1_%SAM GHOST_J**MSOS 4.1**_^1_%LDA- LU,I_K**MSOS 4.1**_^1_%SAZ GHOST_J**MSOS 4.1**_^1_%ENA -1_M**MSOS 4.1**_^1_%STA- TIME,I_I**MSOS 4.1**_^1_%ENA $20_*ALARM STATUS_5**MSOS 4.1**_^1_%AND€€- STATUS,I_H*MSOS V4.0_^1_%SAZ CHKB5_(SKIP IF NOT ALARM INTERRUPT_%**MSOS 4.1**_^1_%JMP* ALMINT_'PROCESS ALARM INTERRUPT_***MSOS 4.1**_^1GHOST JMP- (ADISP)_"GHOST INTERRUPT RETURN TO DISP._%*MSOS V4.0_^1CHKB5 ENA $10_*EOP BIT_:**MSOS 4.1**_^1_%AND- STATUS,I_H*MSOS V4.0_^1_%SAZ DATINT_'SKIP IF DATA INTERRUPT_+**MSOS 4.1**_^1_%JMP* EP1729_#PROCESS EOP INTERRUPT_0*MSOS V4.0_^1DAT€€INT ENA 8_N**MSOS 4.1**_^1_%AND- STATUS,I_G**MSOS 4.1**_^1_%SAZ ODDINT_I**MSOS 4.1**_^1_%JMP* DA1729_I**MSOS 4.1**_^1ODDINT JMP* ANDATA_^1_%EJT_]_^1ALMINT ENA ALARM_$ALARM - NO TECH. DISCRIPTION 2_%**MSOS 4.1**_^1TERROR JMP ERROR_$REPORT ERROR_9*MSOS V4.0_^1_%EJT_R*MSOS V4.0_^1***_"PROCESS DATA INTERRUPT_?*MSOS V4.0_^1_%SPC 2_^1DA1729 INQ -1_N*MSOS V4.0_^1_%LDA- SWITCH,I_!CHE€€CK IF DATA INT. FOR SLEW_**MSOS V4.0_^1_%SAP DATA_%SKIP IF NOT FOR SLEW_1*MSOS V4.0_^1_%JMP* SLWDAT_J*MSOS V4.0_^1DATA_!LDA- BUFFAD,I_G**MSOS 4.1**_^1_%SUB- BUFFER,I_L68*1546_^1_%INA -80_*MUST READ ONLY 80 COLUMNS (0-79) **MSOS 4.1**_^1_%SAM GETDAT_'SKIP IF LEGAL DATA INT._***MSOS 4.1**_^1_%ENA DINTER_'DATA INTERRUPT NUMBER 81 ERROR 34 **MSOS 4.1**_^1_%JMP* TERROR_I**MSOS 4.1*€€*_^1GETDAT INP DEJECT-*_$GET DATA WORD_4**MSOS 4.1**_^1_%LDQ- BUFFAD,I_$CURRENT BUFFER ADDRESS_+**MSOS 4.1**_^1_%STA- (ZERO),Q_$STORE INTO BUFFER_0**MSOS 4.1**_^1EXIT_!RAO- BUFFAD,I_$INCREMENT CURRENT WORD ADDRESS_"**MSOS 4.1**_^1_%LDQ- CALL,I_'FUNCTION_9**MSOS 4.1**_^1ANDATA ENA $1C_*INT. ON DATA - EOP - ALARM_^1_%OUT DEJECT-*_^1SAVSTA ENA 1_^1_%STA- TIME,I_^1_%JMP- (ADISP)_%F€€XIT TO DISPATCHER_^1TTDONE JMP DONE_^1DEJECT JMP* REJT_^1_%JMP* REJT+1_^1_%EJT_]_^1***_"PROCESS EOP INTERRUPT_^1_%SPC 2_^1EP1729 RTJ+ RLAQ_)RELEASE AQ CHANNEL_/MSOS 4.1**_^1_%STQ- I_NMSOS 4.1**_^1_%LDA- SWITCH,I_$CHECK FOR SLEW EOP_/**MSOS 4.1**_^1_%SAP EP_N*MSOS V4.0_^1_%CLR A_,CLEAR COLUMN 1 READ SWITCH_(*MSOS V4.0_^1_%STA* COL1_L*MSOS V4.0_^1_%JMP SNC_*FEED NEXT CARD FOR SL€€EW_+*MSOS V4.0_^1EP_#LDA- BUFFAD,I_G**MSOS 4.1**_^1_%SUB- BUFFER,I_$SORRY - NO FAST READ FEATURE_$**MSOS 4.1**_^1_%INA -80_*WE MUST READ 80 COLUMNS_***MSOS 4.1**_^1_%SAZ SCH_*SKIP IF 80 READ_2**MSOS 4.1**_^1_%ENA ERLYEP_'EARLY EOP INTERRUPT ERROR 35_$**MSOS 4.1**_^1_%JMP* TERROR_I**MSOS 4.1**_^1SCH_"LDQ- I_O*MSOS V4.0_^1_%RTJ* *+1_*CALCULATE ABS ADDRESSES_,***MSOS4.0_^1_%ADC 0_€€P***MSOS4.0_^1_%LDA* *-1_N***MSOS4.0_^1_%INA ENDOP-*+2_H***MSOS4.0_^1_%STA* SCHINP+2_I***MSOS4.0_^1SCHINP RTJ- (AMONI)_I*MSOS V4.0_^1_%ADC $520A_J**MSOS 4.1**_^1_%ADC ENDOP_L***MSOS4.0_^1_%JMP- (ADISP)_^1ENDOP STQ- I_^1_%LDA- BUFFER,I_$PROCESS END OF_^1_%STA- BUFFAD,I_$OPERATION INTERRUPT_^1*_84 CARDS DELETED_762*1303_^1_%ENA FORMTD_^1_%AND- SWITCH,I_^1_%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- EOFCRD,I_!CHECK FOR -_:*MS€€OS V4.0_^1_%ALS 4_,EOF CARD_^1_%AND- HFFF0_^1_%EAQ A_^1_%SAN TS1-*-1_"SKIP IF NOT EOF_6*MSOS V4.0_^1TTEF_!JMP EOFRD_(TO EOF READ_^1TS1_"JMP* FRDB1_^1_%SPC 2_O*MSOS V4.0_^1***_"PROCESS DATA INTERRUPT FOR SLEW REQUEST_.*MSOS V4.0_^1_%SPC 2_^1SLWDAT INP REJT-*_#READ FIRST COLUMN_4*MSOS V4.0_^1_%LDQ* COL1_)HAS COLUMN 1 BEEN CHECK_+*MSOS V4.0_^1_%SQN NEOFX_(FOR EOF,SKIP IF YES_/€€*MSOS V4.0_^1_%RAO* COL1_)SET COLUMN 1 CHECKED FLAG_)*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0_^1_%LDA- EOFCRD,I_$EOF CARD PAT_6*MSOS V4.0_^1_%AND- H0FFF_K*MSOS V4.0_^1_%EAQ A_O*MSOS V4.0_^1_%SAN NEOFX-*-1_G*MSOS V4.0_^1_%STA* COL1_L*MSOS V4.0_^1_%JMP* TTEF_L*MSOS V4.0_^1NEOFX JMP* EXIT+1_'WAIT FOR EOP_6*MSOS V4.0_^1COL1_!NUM 0_,CLUMN 1 READ FLAG_^1****_]_^1_%SPC 2_O*MSOS V4.0_^1FRDB1€€ TRQ A_^1_%AND- H00FF_$79 PUNCH_^1_%AND =N$0050_K72*1684_^1_%INA -$50_%IF FIRST CARD_^1_%SAZ FRDB2-*-1_^1_%ENA BINASC_'ASCII_^1_%AND- SWITCH,I_^1_%SAN TOASCI-*-1_^1_%ENA FIRST_(NO,FIRST WORD_^1_%AND- SWITCH,I_^1_%SAN NOT1ST_^1_%ENA BINASC_'YES,SET ASCII MODE_^1_%EOR- SWITCH,I_^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 ENA $20_*NO,IS CHECKSUM_^1_%LAQ A_,OVERRIDE BIT SET_^1_%SAZ FRDB3-*-1_#IN THIS CARD_^1_%ENA -ORIDE_'YES,SET IT_^1_%AND- SWITCH,I_$IN PHYSTAB_^1_%INA ORIDE_^1_%STA- SWITCH,I_^1FRDB3 TRQ A_,IS THE SEQUENCE_^1_%ARS 8_,NUMBER OK_^1_%AND- H00FF_^1_%SAZ €€ VERIFY_'SEQ.NUMBER.EQ.0_^1_%STA- TPMWRD,I_$SAVE SEQ.NUMBER_^1_%SUB- SEQ,I_^1_%SAN SEQERR_'SEQ.ERROR_^1_%JMP* FRDB4_(NORMAL EXIT_^1VERIFY STA- SEQ,I_(RESET SEQ.TO ZERO FOR_^1_%JMP* FRDB4_(NAM CARD,MACSKL OR 00FF_^1SEQERR LDQ- TPMWRD,I_^1_%STQ- SEQ,I_(SET SEQ.CTR.FOR A READ THRU_^1_%ENA SEQER_(EXIT TO ERROR_^1TTTROR JMP TERROR_^1FRDB4 LDA- SEQ,I_(INCREMENT SEQUENCE_^1_%INA 1_^1€€_%AND- H00FF_(NUMBER_^1_%STA- SEQ,I_^1_%ENQ FRDB6-GETWRD GET THE NEXT WORD_^1_%JMP* GETWRD_^1FRDB6 TRA Q_^1_%ENA FSTCRD_'IS THIS THE FIRST_^1_%AND- SWITCH,I_$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_%ENA LENGER_^1_%JMP* TTTROR_^1LNGOK STQ- LENGTH,I_^1MORE_!ENQ FRDB7-€€GETWRD GET THE NEXT WORD_^1GETWRD STQ- RETURN,I_$THIS SUBROUTINE_^1_%LDQ- CYCLE,I_%WILL ASSEMBLE_^1_%JMP* CYCLE1,Q_$AND DELIVER_^1CYCLE1 LDA- BUFFAD,I_$A BINARY WORD_^1_%TRA Q_,FROM THE_^1_%SUB- BUFFER,I_$CORE BUFFER_^1_%INA -80_*IF THE BUFFER_^1_%SAN NOTEXB-*-1_"IS EMPTY WHEN_^1_%JMP* FEEDCD_'WORD IS REQUESTED,A -_^1NOTEXB LDA- (ZERO),Q_$FEED CYCLE IS_^1_%LDQ- 1,Q_*INITIATED_^€€1_%QLS 4_^1_%LLS 4_^1_%ENQ CYCLE2-CYCLE1_^1GETWEX STQ- CYCLE,I_^1_%TRA Q_^1_%ADQ- CHKSUM,I_$UPDATE CHECKSUM_^1_%STQ- CHKSUM,I_^1_%LDQ- RETURN,I_^1_%JMP* GETWRD,Q_^1FRDB7 TRA Q_^1NOTOST LDA- LENGTH,I_^1_%SAN NOTUST-*-1_^1_%TRQ A_^1_%JMP* FRDB9_^1NOTUST LDA- CORE,I_^1_%SUB- LASTP1,I_$LAST PLUS 1_^1_%SAZ GOTALL-*-1_^1_%TRQ A_,NO,STORE THE WORD_^1_%LDQ- CORE,I_^1_%STA- (ZERO)€€,Q_^1_%RAO- CORE,I_'INCREMENT CORE ADDRESS_^1GOTALL RAO- LENGTH,I_$HAS THE 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_%LD€€A- (I)_M*MSOS V4.0_^1_%STA* SCHDAT_#SCHEDULE AT DRIVER'S PRIORITY_(*MSOS V4.0_^1_%RTJ* *+1_*CALCULATE ABS ADDRESS_.***MSOS4.0_^1_%ADC 0_P***MSOS4.0_^1_%LDA* *-1_N***MSOS4.0_^1_%INA FEEDIT-*+2_G***MSOS4.0_^1_%STA* SCHDAT+1_H*MSOS V4.0_^1_%ADD =XALMLLV-FEEDIT_@**MSOS 4.1**_^1_%STA SCHALM+1_H*MSOS V4.0_^1_%RTJ- (AMONI)_^1SCHDAT NUM $520E_^1_%ADC *-*_^1_%JMP- (ADISP)_^1FEEDIT STQ€€- I_^1_%LDA- BUFFER,I_$INITIALIZE BUFFER ADDRESS_^1_%STA- BUFFAD,I_$ADDRESS_^1SNC_"RTJ+ RQAQ_)GET AQ_;**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%LDA- OFFSET,I_$CHECK OFFSET OPERATION_+**MSOS 4.1**_^1_%ENQ 0_^1_%STQ- OFFSET,I_^1_%EOR- H0001_(CLEAR CONTROLLER_^1_%LDQ- CALL,I_^1_%OUT REJECT-*_^1_%ENA $14_*SELECT INTERPRET ON_^1_%EOR- H0080_(DATA,ALARM AND END OF_^1_%OUT REJECT-*_$O€€PERATION_^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 IN€€DICATE 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- H000F_^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_%JMP 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 HOOLERITH_***MSOS 4.1**_^1_%SAZ TMAKQ_(PUNCH FLAG_^1_%ENA HOLRTH_^1_%JMP* ERROR_^1TMAKQ EQU TMAKQ(*)_G**MSOS 4.1**_^1_%RTJ+ RLAQ_)RELEASE A/Q CHAN._0*€€*MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%RTJ- (COMPRQ)_^1_%JMP I17293+1_G**MSOS 4.1**_^1_%EJT_]_^1***_"ERROR HANDLER_^1_%SPC 2_^1ERROR LDQ- LU,I_)CODE_^1_%QLS 6_^1_%EAQ A_^1_%STA- ERRCOD,I_$SET UP FOR EXIT TO_^1_%LDA- HC000_^1_%EOR- ERRTAB,I_$HANDLER_^1_%STA- ERRTAB,I_^1_%CLR A_O*MSOS V4.0_^1_%LDQ- CALL,I_^1_%INP 1_^1_%NOP 0_^1_%STA- STATUS,I_^1_%ENA 1_^1_%OUT 1_^1_%NOP €€0_^1_%LDQ- I_^1_%RTJ- (AMONI)_^1SCHALM NUM $520A_^1_%ADC *-*_L**MSOS 4.1**_^1_%JMP- (ADISP)_^1ALMLLV STQ- I_^1_%RTJ+ RLAQ_)RELEASE A/Q CHANNEL_.**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1NOGOT ENA UMAKQ-TOMAKQ_C**MSOS 4.1**_^1_%JMP* MAKQ_^1UMAKQ LDQ- ERRCOD,I_G**MSOS 4.1**_^1_%LDA- LU,I_)DO NOT LOG OR REPORT ERROR ON_#**MSOS 4.1**_^1_%SUB- DIAGLU,I_$DIAGNOSTIC LU_4**MSOS 4.1**_^1€€_%SAZ NORPT_J**MSOS 4.1**_^1_%RTJ+ LOG_*LOG FAILURE IN EF_0**MSOS 4.1**_^1_%JMP+ ALTDEV_^1NORPT JMP* TMAKQ_(COMPLETE REQUEST_1**MSOS 4.1**_^1MAKQ_!STA- RETURN,I_^1_%ENA -ORIDE_^1_%AND- SWITCH,I_^1_%STA- SWITCH,I_^1_%RTJ MAKEQ_^1_%LDQ- RETURN,I_^1_%JMP* TOMAKQ,Q_^1_%EJT_]_^1ASCII LDQ- BUFFAD,I_$GET A COLUMN_^1_%LDA- (ZERO),Q_^1_%ENQ 0_^1_%JMP* TNVRT_(CONVERT IT TO HOLLERITH_^1€€ASCII1 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€j_%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_]_^__jPD1726B CSY/ C51 P€1_%NAM D1726B_'DECK-ID C51 MSOS 4.1_-SUMMARY-079_^1*_$1726/405 BUFFERED CARD READER DRIVER_0**MSOS 4.1**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS DRIVER REQUIRES THE USE OF A CARD CONVERSION_"**MSOS 4.1**_^1*_$DATA TABLE EITHER_C**MSOS 4.1**_€€^1*_*CR026 ASCII 1963 (HOLLERITH)_^1*_*CR029 ASCII 1968 (EBCDIC)_6**MSOS 4.1**_^1_%EJT_]_^1*_$THE FOLLOWING IS A BREAK DOWN OF PHY. DEVICE TABLE_^1_%SPC 2_^1*_$EXT I1726B,C1726B,E1726B_;**MSOS 4.1**_^1*_$EXT S1726B,L1726B_B**MSOS 4.1**_^1*P1726B NUM $520A_'SCHEDULE REQUEST_1**MSOS 4.1**_^1*_$ADC I1726B_'INITIATOR_8**MSOS 4.1**_^1*_$ADC C1726B_'CONTINUATOR_6**MSOS 4.1**_^1*_$A€€DC E1726B_'ERROR TIME OUT_3**MSOS 4.1**_^1*_$NUM -1_+DIAGNOSTIC CLOCK_^1*_$NUM 0_^1*_$NUM 0_,CALL PARAMETER LIST_^1*_$NUM $0201_(HARDWARE ADDRESS 1201 BUFFERED_^1*_$NUM $1972_^1*_$NUM 0_,STATUS WORD ONE_^1*_$NUM 0_,LAST DATA STORAGE LOCATION_^1*_$NUM 0_,CURRENT DATA STORAGE LOCATION_^1*_$NUM 0_,STATUS WORD TWO_^1*_$ADC L1726B_'DRIVER LENGTH_4**MSOS 4.1**_^1*_$ADC S1726B€€_'DRIVER MASS MEMORY ADDRESS_'**MSOS 4.1**_^1*_$NUM 0_,PACKING CYCLE ADDRESS STORAGE_^1*_$NUM $0006_(EOF CARD PATTERN_^1*_$ADC BF1726_'STARTING ADDRESS OF 80 WORD BUFFER_^1*_$NUM 0_,CURRENT CARD BUFFER ADDRESS_^1*_$NUM 0_,SUBROUTINE RETURN ADDRESS STORAGE_^1*_$NUM 0_,CARD SEQUENCE NUMBER WORD_^1*_$NUM 0_,RECORD LENGTH WORD_^1*_$NUM 0_,CHECKSUM ACCUMULATOR WORD_^1*_$NUM 0_,€€TEMP SEQUENCE STORAGE WORD_^1*_$NUM 0_,TEMP STORGE FOR FIRST WORD READ_^1*_$NUM 0_,TEMPORARY STORAGE_^1*_$NUM 0_,HOLLERITH ERROR FLAG_^1*_$BZS BF1726(80)_"80 WORD BUFFER_^1*_]_^1_%EJT_]_^1_%ENT I1726B,C1726B,E1726B_;**MSOS 4.1**_^1_%SPC 1_^1_%EXT MAS300_^1_%SPC 1_^1_%EXT MAKEQ_^1_%EXT ALTDEV_^1_%EXT LOG_L**MSOS 4.1**_^1_%EXT* CDRD_)CARD CONVERSION TABLE_,**MSOS 4.1**_^1_€€%EXT RQ1706_'REQUEST 1706_5**MSOS 4.1**_^1_%EXT RL1706_'RELEASE 1706_5**MSOS 4.1**_^1_%SPC 2_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU TIME(4)_%DIAGNOSTIC CLOCK TIME_^1_%EQU LU(5)_^1_%EQU REQAD(6)_$REQUEST ADDRESS_3*MSOS V4.0*_^1_%EQU CALL(7)_%CONNECT CODE_^1_%EQU ERRTAB(8)_^1_%EQU BINASC(8)_#BINARY-ASCII MODE INDICATOR_^1_%EQU SWITCH(9)_#DRIVER SWITCH BITS WO€€RD_^1_%EQU CORE(10)_$CORE ADDRESS WORD_^1_%EQU LASTP1(11)_"LAST CORE LOCATION +1_^1_%EQU STATUS(12)_"HARDWARE STATUS_^1_%EQU CYCLE(15)_#PACKING CYCLE ADDRESS STORAGE_^1_%EQU EOFCRD(16)_!EOF CARD PATTERN_^1_%EQU BUFFER(17)_"STARTING ADDRESS OF 80 WORD BUFFER_^1_%EQU BUFFAD(18)_^1_%EQU RETURN(19)_"SUBROUTINE RETURN ADR STORAGE_^1_%EQU SEQ(20)_%CARD SEQUENCE NUMBER_^1_%EQU L€€ENGTH(21)_"RECORD LENGTH WORD_^1_%EQU CHKSUM(22)_^1_%EQU TPMWRD(23)_"TEMP STORAGE FOR FIRST WORD READ_^1_%EQU TEMPWD(24)_^1_%EQU FLAG(25)_^1_%EQU DIAGLU(26)_"DIAGNOSTIC LU_4**MSOS 4.1**_^1_%EQU ERRCOD(FLAG)_^1_%EJT_]_^1***_"ERROR CODES_^1_%SPC 2_^1_%EQU TIMERR(0) TIME OUT ERROR_^1_%EQU ALARM(2)_!ALARM_^1_%EQU CKSMER(4) CHECK SUM ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT€€_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1_%EQU COMPAR(7) PRE-READ ERROR_^1_%EQU HOLRTH(8) ILLEGAL HOLLERITH PUNCH_^1_%EQU SEQER(9)_!SEQUENCE ERROR_^1_%EQU LENGER(10) NON NEGATIVE RECORD LENGTH_^1_%EQU NO79ER(12) NO 79 PUNCH_^1_%EQU EMPTY(23) INPUT TRAY EMPTY_^1_%EQU ADRSER(37) 1706 ADDRESS ERROR_^1_%EJT_]_^1***_"MASKS_^1_%SPC 2_^1_%EQU H000F(6)_^1_%EQU H00FF($A)_^1_%EQU €€ FIRST($10)_"FIRST CARD INDICATOR_^1_%EQU FSTCRD($10)_^1_%EQU FORMTD(2)_^1_%EQU ORIDE(4)_^1_%EQU HFF00($1A)_^1_%EQU HFFF0($16)_^1_%EQU HC000($20)_^1_%EQU ZERO($22)_#MASKS_^1_%EQU BIT1($24)_^1_%EQU DATA($26)_^1_%EQU BIT5($28)_^1_%EQU H0100($2B)_^1_%EQU SEPCRD($2D)_^1_%EQU BIT10($2D)_^1_%EQU BIT11($2E)_^1_%EQU H1000($2F)_^1_%EQU H001F(7)_^1_%EQU BIT12($2F)_^1_%EQU B€€IT15($32)_^1_%EQU BIT14($31)_^1_%EQU HFFBF($39)_^1_%EQU QMARK($3F)_^1_%SPC 2_^1_%EQU AFNR($B5)_^1_%EQU COMPRQ($B6)_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EJT_]_^1START STQ- I_N**MSOS 4.1**_^1_%LDQ =XE1726B-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC1726B-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 2,I_^1_%LDQ =XI1726B-START_A**MSOS 4.1**_^1_%AAQ A_^1_%STA€€- 1,I_^1_%LDQ- I_^1_%JMP* I1726B+1_#T_A**MSOS 4.1**_^1_%SPC 1_^1MS300 JMP+ MAS300_'RELEASE DRIVERS CORE_-**MSOS 4.1**_^1_%JMP- (ADISP)_^1E1726B STQ- I_N**MSOS 4.1**_^1_%ENA TIMERR_#TIME OUT ERROR 0_^1J_$JMP ERROR_^1_%EJT_]_^1***_"DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I1726B STQ- I_,INITIATOR_8**MSOS 4.1**_^1GETREQ RTJ- (AFNR)_'GET A REQUEST_^1_%SPC 1_^1_%JMP* MS300_^1_%RTJ+ RQ17€€06_'REQUEST 1706_5**MSOS 4.1**_^1_%STQ- I_,REQUEST 1706_5**MSOS 4.1**_^1_%ENA 0_^1_%STA- TPMWRD,I_^1_%STA- CHKSUM,I_^1_%STA- CYCLE,I_^1_%STA- FLAG,I_^1_%LDQ- REQAD,I_I*MSOS V4.0*_^1_%LDA- (ZERO),Q_H*MSOS V4.0*_^1_%ARS 9_,GET REQUEST CODE_2*MSOS V4.0*_^1_%AND- H001F_K*MSOS V4.0_^1_%INA -14_M*MSOS V4.0*_^1_%SAN FEEDCD_'SKIP IF NOT MOTION REQUEST_(*MSOS V4.0*_^1_%STA- CORE,I_J*MSO€€S V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_M*MSOS V4.0*_^1_%SAP P3-*-1_%SKIP IF NOT ITER.TYPE PARAM._'*MSOS V4.0_^1_%AND =N$7000_$GET ONLY PARAM._4*MSOS V4.0_^1P3_#AND- HFFF0_'GET ALL PARAMS._4*MSOS V4.0_^1_%STA- TPMWRD,I_"SAVE REQUEST PARAMETERS_-*MSOS V4.0*_^1_%JMP* MORMC_%GO PROCESS MOTION REQUEST_+*MSOS V4.0*_^1_%EJT_]_^1***_"THE 1726-405 IS CHECKED FOR READY BEFORE IN€€ITIATING_^1***_"CARD MOTION ._^1_%SPC 2_^1FEEDCD LDQ- CALL,I_^1_%ENA NEXT-NOTALR_!SET PRE-READ ENTRY SWITCH_^1_%STA- RETURN,I_^1_%INP TTREJ-*_I*MSOS V4.0*_^1_%ALS 4_O*MSOS V4.0*_^1_%SAP ST_N*MSOS V4.0*_^1_%SUB =N$7C00_$CLEAR BIT 11/SET BIT 6_-*MSOS V4.0*_^1ST_#ALS 12_N*MSOS V4.0*_^1_%STA- STATUS,I_^1_%ALS 15_*CHECK READY_8*MSOS V4.0*_^1_%SAM D-*-1_$SKIP IF READY_8*MSOS V4.€€0*_^1_%ALS 3_)IS TRAY EMPTY_8*MSOS V4.0*_^1_%SAP E2-*-1_%SKIP IF NOT EMPTY_2*MSOS V4.0_^1_%ENA EMPTY_$INPUT TRAY EMPTY 23_2*MSOS V4.0_^1_%JMP* J_)REPORT ERROR_9*MSOS V4.0_^1E2_#JMP* ALM_)ALARM- GO GET ERROR CODE 2_)*MSOS V4.0_^1D_$CLR A_O*MSOS V4.0*_^1DP1_"ENA $16_*CLEAR INT.- INT ON DATA AND ALARM **MSOS 4.1**_^1_%OUT TTREJ-*_I*MSOS V4.0*_^1SETIME ENA 3_N**MSOS 4.1**_^1_%ST€€A- TIME,I_^1_%JMP- (ADISP)_%EXIT WAIT FOR INTERRUPT_^1_%EJT_]_^1***_"PROCESS MOTION REQUESTS_^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 SLEW REQUEST_0*MSOS V4.0_^1MORMC LDA- TPMWRD,I_"PARAMETER STRING_4*MSOS V4.0*_^1_%CLR Q_O*MSOS V4.0*_^1_%LLS 4_+GET ONE PARA_7*MSOS V4.0*_^1_%SQZ NOTMC-*-1_#GET OUT IF€€ ZERO PARAMETER_)*MSOS V4.0*_^1_%STA- TPMWRD,I_"SAVE REMAINDER OF STRING_,*MSOS V4.0*_^1_%INQ -4_N*MSOS V4.0_^1_%SQZ NOTMC-*-1_G*MSOS V4.0_^1_%INQ -1_N*MSOS V4.0_^1_%SQZ SLEW-*-1_$SKIP IF SLEW REQUEST_.*MSOS V4.0*_^1_%JMP* MORMC_(GET NEXT PARAMETER_0*MSOS V4.0*_^1NOTMC JMP DONE_L*MSOS V4.0_^1SLEW_!LDA- SWITCH,I_H*MSOS V4.0_^1_%EOR- BIT15_$SET BIT 15 TO_8*MSOS V4.0_^1_%STA- SW€€ITCH,I_!INDICATE SLEW REQUEST_0*MSOS V4.0_^1_%JMP* FEEDCD_'INTER ON DATA +ALARM_/*MSOS V4.0_^1***********************************************************************_^1*_$IF ASCII63 HARDWARE CONVERSION IS USED_.**MSOS 4.1**_^1*_'EOF = SEPARATOR CARD_^1*_-6789 PUNCH IN COLUMN 1 = SEP. CARD_^1*_]_'*_^1*_$OTHERWISE ----_E**MSOS 4.1**_^1*_'EOF = EOF CARD PATTERN IN PHYTAB WORD 16 -_^1€€*_'NORMALLY A 78 PUNCH IN COLUMN 1_^1***********************************************************************_^1SLWRTN LDQ- CALL,I_J*MSOS V4.0*_^1_%INQ -1_N*MSOS V4.0*_^1_%INP TTREJ-*_$READ COLUMN 1_6*MSOS V4.0*_^1_%LDA- EOFCRD,I_$CHECK HWARE CONV._0**MSOS 4.1**_^1_%SAP NOHWC_J**MSOS 4.1**_^1_%INQ 1_O*MSOS V4.0_^1_%INP TTREJ-*_$CHECK STATUS FOR_3*MSOS V4.0_^1_%AND- SEPCRD_'SEPA€€RATOR CARD STATUS_-*MSOS V4.0_^1_%SAZ NOEOF-*-1_G*MSOS V4.0_^1_%JMP* YSEOF_J**MSOS 4.1**_^1NOHWC TRA Q_O**MSOS 4.1**_^1_%JMP CHKEOF_I**MSOS 4.1**_^1YSEOF LDQ- CALL,I_J*MSOS V4.0_^1_%LDA- H1000_K*MSOS V4.0_^1_%OUT TTREJ-*_$RELOAD MEMORY_6*MSOS V4.0_^1_%JMP EOFRD_K*MSOS V4.0_^1NOEOF LDA- H1000_'RELOAD MEMORY FUNCTION_-*MSOS V4.0_^1_%LDQ- CALL,I_J*MSOS V4.0_^1_%JMP* DP1_*ADD IN€€TERRUPT REQUESTS_+**MSOS 4.1**_^1_%EJT_]_^1***_"DRIVER CONTINUATOR ENTRY_^1_%SPC 2_^1C1726B STQ- I_,CONTINUATOR_6**MSOS 4.1**_^1_%LDA- TIME,I_'CLOCK RESET_;76*1860_^1_%SAM GHOST_(YES_C76*1860_^1_%LDA- LU,I_)LOGICAL UNIT ZERL_576*1860_^1_%SAZ GHOST_(YES_C76*1860_^1_%JMP* EIEIO_O76*1860_^1GHOST JMP- (ADISP)_%GHOST INTERRUPT,RETURN TO DISP_(76*1860_^1EIEIO ENA -1_R76*1860_^1_%ST€€A- TIME,I_^1_%LDQ- CALL,I_J*MSOS V4.0_^1_%ADQ- BIT12_K*MSOS V4.0_^1_%INP TTREJ-*_"GET 1706 STATUS_6*MSOS V4.0_^1_%AND- BIT1_%CHECK IF BUSY_8*MSOS V4.0_^1_%SAZ NB_(SKIP IF NOT BUSY_5*MSOS V4.0_^1_%LDQ- CALL,I_J*MSOS V4.0_^1_%ADQ- BIT11_K*MSOS V4.0_^1_%INP TTREJ-*_"TERMINATE BUFFER_5*MSOS V4.0_^1_%RTJ* CHKADR_#CURRENT ADDRESS CHECK_0*MSOS V4.0_^1NB_#LDQ- CALL,I_#GET 405 CARD READE€€R -_0*MSOS V4.0_^1_%INP TTREJ-*_"STATUS_?*MSOS V4.0_^1_%ALS 4_O*MSOS V4.0_^1_%SAP S1-*-1_J*MSOS V4.0_^1_%SUB =N$7C00_"CLEAR BIT 11,SET BIT 6_/*MSOS V4.0_^1S1_#ALS 12_N*MSOS V4.0_^1_%STA- STATUS,I_!SAVE ADJUSTED STATUS_1*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0_^1_%AND- BIT5_%CHECK FOR ALARM_6*MSOS V4.0_^1_%SAN EE_(SKIP IF ALARM_8*MSOS V4.0_^1_%JMP* OK_^1EE_#TRQ A_O*MSOS V4.0_^1_%AND€€ =N$91C0_"CHECK ALL BUT SEP AND EMPTY_^1_%SAZ OK-*-1_^1_%AND- H0100_$CHECK FOR ERROR_6*MSOS V4.0_^1_%SAZ ALM_^1_%ENA COMPAR_#COMPARE ERROR 7_6*MSOS V4.0_^1TJ_#JMP J_^1ALM_"ENA ALARM_$ALARM ERROR 2_8*MSOS V4.0_^1_%JMP* TJ_N*MSOS V4.0_^1OK_#LDA- SWITCH,I_H*MSOS V4.0_^1_%SAP NOTS_'NOT SLEW_<*MSOS V4.0_^1_%JMP* SLWRTN_#INT FROM SLEW_8*MSOS V4.0_^1NOTS_!JMP* NOTALR_J*MSOS V4.0_^1€€DA1726 LDQ- CALL,I_^1_%INA $A_^1_%STA- TEMPWD,I_^1_%INP TTREJ-*_I*MSOS V4.0_^1_%AND- DATA_^1_%SAN DATAOK_^1_%ENA NEXT-NOTALR_^1_%STA- RETURN,I_^1TSTIM JMP* SETIME_^1TTREJ JMP* INTR_^1_%ENA EXTREJ_#EXTERNAL REJECT_^1_%JMP* TJ_^1INTR_!ENA INTREJ_#INTERNAL REJECT_^1_%JMP* TJ_^1DATAOK LDA- TEMPWD,I_^1_%OUT TTREJ-*_$FUNCTION ON CODE PRESET IN 'A'_$*MSOS V4.0_^1_%RAO- TEMPWD,I_%€€TIME WASTER_^1_%RAO- BUFFAD,I_^1_%INQ -1_^1_%INP TTREJ-*_I*MSOS V4.0_^1_%STA- TEMPWD,I_^1_%INQ 1_^1_%INP TTREJ-*_I*MSOS V4.0_^1_%STA- STATUS,I_$THE FIRST WORD IS XFERED TO COMPUTER MEMORY_^1_%LDQ- EOFCRD,I_$CHECK HWARE CONV._0**MSOS 4.1**_^1_%SQP LONGBF_I**MSOS 4.1**_^1_%ALS 6_,CHECK FOT BINARY CARD_^1_%SAM LONGBF_'YES 80 WORD BUFF_^1_%ENA BINASC_'IS REQUIRED FOR BINARY ROR€€ ASCII_^1_%AND- SWITCH,I_^1_%SAZ UNFOR_(BINARY_^1SHORT LDA =N$0928_%ASCII HARDWARE CONVERSION 40 WORD BUFF_^1_%JMP* STBF_*0928 COMP. LANG. FOR INA 40_^1UNFOR ENA FORMTD_^1_%AND- SWITCH,I_^1_%SAZ LONGBF_'FORMATTED BINARY 80 WORD BUFF_^1_%JMP* SHORT_(ASCII CARD IN FORMATTED BINARY DECK 40 WORD BU_^1LONGBF LDA =N$0950_^1STBF_!STA* BLENTH_^1_%LDA- BUFFER,I_^1_%TRA Q_^1BLENTH N€€UM 0_,INCREASE A BY BUFFER LENGTH_^1_%STA- (ZERO),Q_$STORE LAST LOCATION OF BUF IN 1ST WORD OF BUF_^1_%STA* LWADRS_#SAVE LAST WORD ADDRESS_/*MSOS V4.0_^1_%STQ* FWADRS_#SAVE FIRST WORD ADDRESS_.*MSOS V4.0_^1_%TRQ A_,PUT STARTING ADDRESS IN A_^1_%LDQ- CALL,I_^1_%ADQ =N$17FF_^1_%OUT TTREJ-*_"START 1706 DATA XFER_^1_%INP TTREJ-*_"GET CURRENT WORD ADDRESS_-*MSOS V4.0_^1_%RTJ* CHKAD€€R_#CURRENT WORD ADDRESS CHECK_+*MSOS V4.0_^1_%JMP* TSTIM_$TO SETIME_^1FWADRS NUM 0_)FIRST WORD ADDRESS_3*MSOS V4.0_^1CWADRS NUM 0_)CURRENT WORD ADDRESS_1*MSOS V4.0_^1LWADRS NUM 0_)LAST WORD ADDRESS_4*MSOS V4.0_^1_%SPC 2_^1***_"CHECK IF CURRENT WORD ADRS. IS LEGAL_^1***_"THE INPUT BUFFER IS ASSUMED TO BE IN LOWER CORE BANK_^1_%SPC 2_^1CHKADR NOP 0_O*MSOS V4.0_^1_%STA* CWADRS_J€€*MSOS V4.0_^1_%SUB* FWADRS_J*MSOS V4.0_^1_%SAP 1_^1_%JMP* ERR37_K*MSOS V4.0_^1_%LDA* LWADRS_#'A' MUST BE GREATER THAN_-*MSOS V4.0_^1_%SUB* CWADRS_J*MSOS V4.0_^1_%SAM 1_O*MSOS V4.0_^1_%JMP* (CHKADR)_H*MSOS V4.0_^1ERR37 ENA ADRSER_#1706 ADDRESS ERROR 37_0*MSOS V4.0_^1_%JMP* JJJ_'REPORT ERROR_9*MSOS V4.0_^1_%SPC 2_^1NOTALR LDA- BUFFER,I_^1_%STA- BUFFAD,I_^1_%LDQ- RETURN,I_^1_%JMP€€* NOTALR,Q_$RETURN TO LOCATION WHERE EXIT WAS MADE TO DA17_^1NEXT_!ENA FORMTD_^1_%AND- SWITCH,I_$IS IT A FORMATTED REQUEST_^1_%SAN FRDBIN_(YES_^1_%ENA BINASC_^1_%AND- SWITCH,I_^1_%SAN FRDBIN_'UNFORMTD ASCII_^1_%JMP RDBIN_(UNFORMTD_^1FRDBIN EQU FRDBIN(*)_I72*1729_^1_%LDA- EOFCRD,I_$CHECK HWARE CONV._0**MSOS 4.1**_^1_%SAP A8_M**MSOS 4.1**_^1_%ENA BINASC_L72*1729_^1_%AND- SWIT€€CH,I_^1_%SAZ A8_^1*_81 CARD DELETED_672*1729_^1_%LDA- BIT11_(RELEASE NEGATE FUNCTION_^1_'ENQ TOSKIP-NOTALR RETURN TO HARDWARE CONVERSION_^1_%STQ- RETURN,I_^1_%JMP* DA1726_^1A8_#ENQ BB-NOTALR_#ASCII 68 AND FORMTD BINARY REQUEST HAS_^1_%STQ- RETURN,I_$THE SAME REENTRY POINT_^1_%LDA- EOFCRD,I_G**MSOS 4.1**_^1_%SAM HWC_L**MSOS 4.1**_^1_%LDA- BIT10_(NEGATE HOLLERITH FUNCTION_^1_%JMP*€€ DA1726_I**MSOS 4.1**_^1HWC_"LDA- BIT11_J**MSOS 4.1**_^1_%JMP* DA1726_^1TOSKIP LDA- EOFCRD,I_G**MSOS 4.1**_^1_%SAP BB_M**MSOS 4.1**_^1_%LDQ- BUFFER,I_G**MSOS 4.1**_^1_%LDA- TEMPWD,I_^1_%STA- (ZERO),Q_^1_%LDA- STATUS,I_J*568_^1_%AND- SEPCRD_'IS IT A SEP. CARD_3*568_^1_%SAZ SKP_*NO_B*568_^1_%JMP* EOFRD_(YES_A*568_^1SKP_"JMP* SKIP_N*568_^1BB_#LDQ- BUFFER,I_^1_%LDA- TEMPWD,I_^1_%STA-€€ (ZERO),Q_^1_%LDA- STATUS,I_J*568_^1_%AND- SEPCRD_'IS IT SEP. CARD_5*568_^1_%SAN TTEOF-*-1_^1_%ENQ TOGETW-GETWRD_^1_%JMP* GETWRD_'GET THE FIRST WORD_^1TOGETW TRA Q_^1_%ENA FIRST_^1_%AND- SWITCH,I_^1_%SAZ CHKEOF-*-1_F*MSOS V4.0_^1_%JMP* FRDB1_K*MSOS V4.0_^1CHKEOF LDA- EOFCRD,I_%EOF CARD PATTERN_^1_%ALS_!4_^1_%AND- HFFF0_^1_%EAQ A_^1_%SAN NEOF-*-1_I*MSOS V4.0_^1_%LDA- SWITCH,I€€_H*MSOS V4.0*_^1TTEOF SAP EOFRD-*-1_G*MSOS V4.0_^1_%JMP YSEOF_$GOT EOF - RELOAD MEM. FOR NEXT READ_!*MSOS V4.0_^1EOFRD LDA- BIT14_(READ EOF_^1_%EOR- ERRTAB,I_$MARK THE REQUEST_^1_%STA- ERRTAB,I_$COMPLETE WITH ERROR_^1_%LDA- STATUS,I_H*MSOS V4.0_^1_%EOR- BIT11_'ADD EOF BIT TO STATUS WORD_)*MSOS V4.0_^1_%STA- STATUS,I_H*MSOS V4.0_^1_%LDA- SWITCH,I_H*MSOS V4.0_^1_%SAP TTDONE_J*MS€€OS V4.0_^1_%JMP NXTMCR_#CKECK NEXT MC REQ. PARA._-*MSOS V4.0_^1TTDONE JMP* TODONE_^1NEOF_!LDA- SWITCH,I_I*MSOS V4.0_^1_%SAP FRDB1-*-1_^1_%JMP NOEOF SLEW REQ.-BUT NO EOF YET-READ NEXT CARD.. *MSOS V4.0_^1FRDB1 TRQ A_O58*1129_^1_%AND- $A_N58*1129_^1_%AND =N$0050_%MASK OUT 7-9 PUNCH_-*4.0/78*1930_^1_%INA -$50_%CHECK FOR 79 PUNCH_358*1129_^1_%SAZ FRDB2-*-1 SKIP IF BINARY CARD€€_258*1129_^1_%ENA BINASC_^1_%AND- SWITCH,I_^1_%SAN SKIP_^1_%ENA FIRST_^1_%AND- SWITCH,I_$NO FIRST WORD_^1_%SAN NOTIST_^1_%ENA BINASC_^1_%EOR- SWITCH,I_$YES SET ASCII MODE_^1_%STA- SWITCH,I_^1SKIP_!JMP ASCII_^1_%JMP* REJECT_^1_%JMP* REJECT+1_^1NOTIST ENA NO79ER_'NO ERROR NO 7-9 PUNCH_^1JJJ_"JMP* JJ_^1FRDB2 ENA $20_*IS CHECKSUM OVERRIDE BIT_^1_%LAQ A_,SET IN THIS CARD_^1_€€%SAZ FRDB3_^1_%ENA -ORIDE_'YES SET IT IN THE PHY DEVICE TABLE_^1_%AND- SWITCH,I_^1_%INA ORIDE_^1_%STA- SWITCH,I_^1FRDB3 TRQ A_,IS THE SEQ NUMBER OK_^1_%ARS 8_^1_%AND- H00FF_^1_%SAZ VERIFY_'SEQ NUMBER.EQ.0_^1_%STA- TPMWRD,I_$SAVE SEQ NUMBER_^1_%SUB- SEQ,I_^1_%SAN SEQERR_'SEQ.ERROR_^1_%JMP* FRDB4_(NORMAL EXIT_^1VERIFY STA- SEQ,I_(RESET SEQ.TO ZERO FOR_^1_%JMP* FRDB4_(NAM CARD€€,MACSKL OR 00FF_^1SEQERR LDQ- TPMWRD,I_^1_%STQ- SEQ,I_(SET SEQ.CTR FOR A READ THRU_^1_%ENA SEQER_(EXIT TO ERROR_^1_%JMP* JJ_^1FRDB4 LDA- SEQ,I_(INCREMENT SEQUENCE_^1_%INA 1_^1_%AND- H00FF_^1_%STA- SEQ,I_^1_%ENQ FRDB6-GETWRD_^1_%JMP* GETWRD_^1FRDB6 TRA Q_^1_%ENA FSTCRD_'IS THIS THE FIRST CARD_^1_%AND- SWITCH,I_^1_%SAZ N_^1_%JMP* NOTOST_^1N_$ENA FSTCRD_'YES RESET FIRST CARD €€SWITCH_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1_%SQM LNGOK_^1_%ENA LENGER_^1_%JMP* JJ_^1LNGOK STQ- LENGTH,I_^1MORE_!ENQ FRDB7-GETWRD GET NEXT WORD_^1GETWRD STQ- RETURN,I_$THIS ROUTINE DELIVERS A WORD_^1_%LDQ- CYCLE,I_%FROM BUFFER IF BUFFER IS_^1_%JMP* CYCLE1,Q_^1CYCLE1 LDA- BUFFAD,I_^1_%TRA Q_^1_%SUB- BUFFER,I_^1_%INA -80_^1_%SAN NOTEXB_^1_%JMP FEEDCD_^1NOTEXB LDA- (ZERO),Q_€€^1_%LDQ- 1,Q_^1_%QLS 4_^1_%LLS 4_^1_%ENQ CYCLE2-CYCLE1_^1GETWEX STQ- CYCLE,I_^1_%TRA Q_^1_%ADQ- CHKSUM,I_$UPDATE CHECKSUM_^1_%STQ- CHKSUM,I_^1_%LDQ- RETURN,I_^1_%JMP* GETWRD,Q_^1FRDB7 TRA Q_^1NOTOST LDA- LENGTH,I_^1_%SAN NOTUST_^1_%TRQ A_^1_%JMP* FRDB9_^1NOTUST LDA- CORE,I_^1_%SUB- LASTP1,I_$LST+1_^1_%SAZ GOTALL_^1_%TRQ A_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_$STORE THE WORD_€€^1_%RAO- CORE,I_'INCREMENT CORE ADDRESS_^1GOTALL RAO- LENGTH,I_$HAS THE COMPLETE RECORD BEEN READ_^1_%LDA- LENGTH,I_^1_%SAZ FRDB8_^1_%JMP* MORE_)NO_^1FRDB8 ENQ FRDB9-GETWRD_^1_%JMP* GETWRD_^1REJECT JMP* INTRNL_^1_%ENA EXTREJ_'SET EXTERNAL REJECT CODE_^1JJ_#JMP* ERROR_^1FRDB9 LDA- CHKSUM,I_$DOES THE CHECKSUM BALANCE_^1_%SAZ TODONE_'TO ZERO_^1_%ENA ORIDE_(NO IS THE CHECKSUM OV€€ERIDE_^1_%AND- SWITCH,I_$SET_^1_%SAN TODONE_'YES_^1_%LDA- SEQ,I_O76*1883_^1_%INA -1_+DECREMENT SEQUENCE COUNTER_,76*1883_^1_%STA- SEQ,I_(FOR RETRY_=76*1883_^1_%ENA CKSMER_'NO ERROR_^1_%JMP* ERROR_^1TODONE JMP* DONE_)FINISHED_^1RDBIN LDA- BIT10_^1_%LDQ =XCD-NOTALR_!SET RETURN ADD. FROM DA1726_^1_%STQ- RETURN,I_$AFTER CARD HAS BEEN READ_^1_%JMP DA1726_^1CD_#LDQ- BUFFER,I_^1_%LD€€A- TEMPWD,I_^1_%STA- (ZERO),Q_^1_%LDA- LASTP1,I_$SINGLE COLUMN INPUT_^1_%SUB- CORE,I_^1_%SAZ ONECHR_^1MORRDB ENQ RDBINI-GETWRD GET A WORD_^1_%JMP* GETWRD_^1RDBINI LDQ- CORE,I_'PUT IT AWAY_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_'INCREMENT CORE_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ RDBIN2_'FINSHED_^1_%JMP* MORRDB_'NO_^1ONECHR ENQ RDBIN3-GETWRD INPUT AND STORE_^1_%JMP* GETWRD_'A SI€€NGLE INPUT_^1RDBIN3 AND- HFFF0_^1_%EOR- H000F_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_^1RDBIN2 JMP* DONE_)FINSHED_^1CYCLE2 LDQ- BUFFAD,I_^1_%LDA- 1,Q_^1_%LDQ- 2,Q_^1_%QLS 4_^1_%LLS 8_^1_%ENQ CYCLE3-CYCLE1_^1_%JMP* GETWEX_^1INTRNL ENA INTREJ_^1_%JMP* ERROR_^1CYCLE3 LDQ- BUFFAD,I_^1_%TRQ A_^1_%INA 4_^1_%STA- BUFFAD,I_^1_%LDA- 3,Q_^1_%ALS 4_^1_%LDQ- 2,Q_^1_%LRS 4_^1_%ENQ 0_^1_%JMP*€€ GETWEX_^1_%EJT_]_^1***_"REQUEST COMPLETION AND ERROR EXIT_^1_%SPC 2_^1DONE_!ENA 1_)CLEAR INTERRUPTS AND ALARM COND._$*MSOS V4.0_^1_%LDQ- CALL,I_^1_%OUT REJECT-*_J*635_^1_%ENA 0_^1_%JMP* MAKQ_^1TOMAKQ LDA- FLAG,I_'CHECK ILLEGAL HOLLERITH PUNCH_^1_%SAZ TMAKQ_(SOFTWARE CONVERSION ONLY_^1_%ENA HOLRTH_^1_%JMP* ERROR_^1TMAKQ RTJ+ RL1706_'RELEASE 1706_5**MSOS 4.1**_^1_%STQ- I_N**M€€SOS 4.1**_^1_%RTJ- (COMPRQ)_G**MSOS 4.1**_^1_%JMP GETREQ_^1ERROR LDQ- LU,I_)SET CODE FOR ALT DEVICE_^1_%QLS 6_,HANDLER_^1_%EAQ A_^1_%STA- ERRCOD,I_^1_%LDA- HC000_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_^1_%LDQ- CALL,I_^1_%INP 1_^1_%NOP 0_^1_%ALS 4_O*MSOS V4.0_^1_%SAP 2_O*MSOS V4.0_^1_%SUB =N$7C00_$SWITCH BITS 6 AND 11_/*MSOS V4.0_^1_%ALS 12_N*MSOS V4.0_^1_%STA- STATUS,I_^1_%E€€NA 1_^1_%OUT 1_^1_%NOP 0_^1_%ADQ- BIT11_)INTERNAL REJECT -_0*MSOS V4.0_^1_%INP 1_-CLEAR 1706 ._5*MSOS V4.0_^1_%NOP 0_^1_%ENA UMAKQ-TOMAKQ_^1_%JMP* MAKQ_^1UMAKQ LDA- DIAGLU,I_$DIAG LU_:**MSOS 4.1**_^1_%SUB- LU,I_K**MSOS 4.1**_^1_%SAN DOLOG_J**MSOS 4.1**_^1_%JMP* TMAKQ_J**MSOS 4.1**_^1DOLOG RTJ+ RL1706_'RELEASE 1706_5**MSOS 4.1**_^1_%STQ- I_,RELEASE 1706_5**MSOS 4.1**_^1_%LD€€Q- ERRCOD,I_G**MSOS 4.1*_^1_%RTJ+ LOG_*LOG ERROR_8**MSOS 4.1**_^1_%JMP+ ALTDEV_^1MAKQ_!STA- RETURN,I_^1_%ENA -ORIDE_^1_%AND- SWITCH,I_^1_%RTJ MAKEQ_^1_%LDQ- RETURN,I_^1_%JMP* TOMAKQ,Q_^1_%EJT_]_^1ASCII LDA- EOFCRD,I_$CHECK_<**MSOS 4.1**_^1_%SAM HWCA_)HWARE_<**MSOS 4.1**_^1_%JMP* ASCIIA_'CONVERSION_7**MSOS 4.1**_^1HWCA_!LDA- STATUS,I_$CHECK BINARY CARD_0**MSOS 4.1**_^1_%ALS 6_^€€1_%SAP Y_^1_%ENA NO79ER_'YES_^1_%JMP* ERROR_^1Y_$LDQ- BUFFAD,I_^1_%LDA- (ZERO),Q_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ ASCII6_I**MSOS 4.1**_^1_%RAO- BUFFAD,I_^1_%LDA- BUFFAD,I_^1_%SUB- BUFFER,I_^1_%INA -40_^1_%SAZ ASCII5_I**MSOS 4.1**_^1_%JMP* ASCII_^1ASCII5 ENA FORMTD_I**MSOS 4.1**_^1_%AND- SWITCH,I_^1_%SAN ASCII6_I**MSO€€S 4.1**_^1_%JMP FEEDCD_^1ASCII6 JMP* DONE_K**MSOS 4.1**_^1_%EJT_]_^1ASCIIA LDQ- BUFFAD,I_G**MSOS 4.1**_^1_%LDA- (ZERO),Q_^1_%ENQ 0_^1_%JMP* CONVRT_^1ASCII1 ALS 8_^1_%EOR- H00FF_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_^1_%TRQ A_^1_%SUB- LASTP1,I_^1_%SAN Z_^1_%JMP* ASCII4_^1Z_$RAO- BUFFAD,I_^1_%LDQ- BUFFAD,I_^1_%LDA- (ZERO),Q_^1_%ENQ ASCII2-ASCII1_^1_%JMP* CONVRT_^1ASCII2 EOR- HFF00_€€^1_%LDQ- CORE,I_^1_%AND- (ZERO),Q_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ ASCII4_^1_%RAO- BUFFAD,I_^1_%LDA- BUFFAD,I_^1_%SUB- BUFFER,I_^1_%INA -80_^1_%SAZ ASCII3_^1_%JMP* ASCII_^1ASCII3 ENA FORMTD_^1_%AND- SWITCH,I_^1_%SAN ASCII4_^1_%JMP FEEDCD_^1ASCII4 JMP* DONE_^1CONVRT SAN 2_^1_%ENA $20_^1_%JMP* GETOUT_^1_%STQ- RETURN,I_^1_%TRA Q_,CON€€VERT 12 BIT HOLLERITH_^1_%ENA 0_^1_%QLS 7_^1_%SQP 1_^1_%INA $71_*ROW 1_^1_%QLS 1_^1_%SQP 1_^1_%INA $62_*ROW 2_^1_%QLS 1_^1_%SQP 1_^1_%INA $63_*ROW 3_^1_%QLS 1_^1_%SQP 1_^1_%INA $64_*ROW 4_^1_%QLS 1_^1_%SQP 1_^1_%INA $65_*ROW 5_^1_%QLS 1_^1_%SQP 1_^1_%INA $66_*ROW 6_^1_%QLS 1_^1_%SQP 1_^1_%INA $67_*ROW 7_^1_%QLS 1_^1_%SQP 1_^1_%INA $18_*ROW 8_^1_%QLS 1_^1_%€€SQP 1_^1_%INA $79_^1_%AND =N$FF8F_^1_%QLS 5_^1_%SQP 1_^1_%INA $70_*ROW 12_^1_%QLS 1_^1_%SQP 1_^1_%INA $60_*ROW 11_^1_%QLS 1_^1_%SQP 1_^1_%INA $50_*ROW ZERO_^1_%AND- HFFBF_^1_%ENQ 0_^1_%LLS 9_,ILLEGAL PUNCH_^1_%SQZ HOLLOK_^1_%ENA 1_^1_%STA- FLAG,I_^1_%ENA QMARK_^1_%JMP* SETUP_^1HOLLOK LLS 6_^1_%LDQ CDRD,Q_I**MSOS 4.1**_^1_%SAN 1_^1_%LLS 8_^1_%LLS 8_^1SETUP AND€>- H00FF_^1_%LDQ- RETURN,I_^1GETOUT JMP* ASCII1,Q_^1_%END_]_^__>PD1726U CSY/ C50 P€1_%NAM D1726U_'DECK-ID C50 MSOS 4.1_-SUMMARY-079_^1*_$1726/405 UNBUFFERED CARD READER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS DRIVER REQUIRES THE USE OF A CARD_^1*_$CONVERSION DATA TABLE EITHER_^1*_*CR026 ASCII 1963 (HOLLERITH)_^1*_*€€CR029 ASCII 1968 (EBCDIC)_^1_%EJT_]_^1*_$THE FOLLOWING IS A BREAK DOWN OF PHY. DEVICE TABLE_^1*_]_^1*P1726U ADC $520A_(00 SCHEDULER CALL_^1*_%ADC I1726U_'01 INITIATOR ADDRESS_^1*_%ADC C1726U_'02 CONTINUATOR ADDRESS_^1*_%ADC E1726U_'03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $05A1_(0€€7 CONVERTER, EQUIPMENT, STATION_^1*_%NUM $1972_(08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC L1726U_'13 DRIVER LENGTH IF MASS MEMORY_^1*_%ADC S1726U_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 PACKING CYCLE ADDRESS STORAGE_^1*_%NUM $000F_(16 E O€€ F FORMAT (6789)_^1*_%ADC BF1726_'17 FIRST ADDRESS OF 80 WORD INPUT BUFFER_^1*_%NUM 0_,18 CORRENT CARD BUFFER LOCATION_^1*_%NUM 0_,19 SUBROUTINE RETURN ADDRESS_^1*_%NUM 0_,20 CARD SEQUENCE NUMBER_^1*_%NUM 0_,21 RECORD LENGTH_^1*_%NUM 0_,22 CHECKSUM ACCUMULATOR_^1*_%NUM 0_,23 TEMPORARY STORAGE_^1*_%NUM 0_,24 OUTPUT OFFSET SWITCH_^1*_%NUM 0_,25 SPARE_^1*_%ADC 1726€€U_(26 DIAGNOSTIC LU_^1**_]_^1*_%BZS BF1726(80)_"27 INPUT BUFFER_^1**_7106 INPUT BUFFER_^1_%SPC 2_^1*_$EXT I1726U,C1726U,E1726U_;**MSOS 4.1**_^1*_$EXT L1726U,S1726U_B**MSOS 4.1**_^1_%EJT_]_^1_%ENT I1726U,C1726U,E1726U_;**MSOS 4.1**_^1_%SPC 1_^1_%EXT* CDRD_)CARD CONVERSION TABLE_,**MSOS 4.1**_^1_%EXT MAS300_'RELEASE DRIVERS BUFFER_+**MSOS 4.1**_^1_%SPC 1_^1_%EXT MAKEQ_^1_€€%EXT ALTDEV_^1_%EXT LOG_*ERROR LOGGING_4**MSOS 4.1**_^1_%SPC 2_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU TIME(4)_%DIAGNOSTIC CLOCK TIME_^1_%EQU LU(5)_^1_%EQU REQAD(6)_$REQUEST ADDRESS_3*MSOS V4.0*_^1_%EQU CALL(7)_%CONNECT CODE_^1_%EQU ERRTAB(8)_^1_%EQU BINASC(8)_#BINARY-ASCII MODE INDICATOR_^1_%EQU SWITCH(9)_#DRIVER SWITCH BITS WORD_^1_%EQU CORE(10)_$CORE ADD€€RESS WORD_^1_%EQU LASTP1(11)_"LAST CORE LOCATION +1_^1_%EQU STATUS(12)_"HARDWARE STATUS_^1_%EQU CYCLE(15)_#PACKING CYCLE ADDRESS STORAGE_^1_%EQU EOFCRD(16)_!EOF CARD PATTERN_^1_%EQU BUFFER(17)_"STARTING ADDRESS OF 80 WORD BUFFER_^1_%EQU BUFFAD(18)_^1_%EQU RETURN(19)_"SUBROUTINE RETURN ADR STORAGE_^1_%EQU SEQ(20)_%CARD SEQUENCE NUMBER_^1_%EQU LENGTH(21)_"RECORD LENGTH WORD_€€^1_%EQU CHKSUM(22)_^1_%EQU TPMWRD(23)_"TEMP STORAGE FOR FIRST WORD READ_^1_%EQU TEMPWD(24)_^1_%EQU FLAG(25)_^1_%EQU DIAGLU(26)_"DIAGNOSTIC UNIT_2**MSOS 4.1**_^1_%EQU ERRCOD(FLAG)_^1_%EJT_]_^1***_"ERROR CODES_^1_%SPC 2_^1_%EQU TIMERR(0) TIME OUT ERROR_^1_%EQU ALARM(2)_!ALARM_^1_%EQU CKSMER(4) CHECK SUM ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNA€€L REJECT_^1_%EQU COMPAR(7) PRE-READ ERROR_^1_%EQU HOLRTH(8) ILLEGAL HOLLERITH PUNCH_^1_%EQU SEQER(9)_!SEQUENCE ERROR_^1_%EQU LENGER(10) NON NEGATIVE RECORD LENGTH_^1_%EQU NO79ER(12) NO 79 PUNCH_^1_%EQU EMPTY(23) INPUT TRAY EMPTY_^1_%EJT_]_^1***_"MASKS_^1_%SPC 2_^1_%EQU H000F(6)_^1_%EQU H00FF($A)_^1_%EQU FIRST($10)_"FIRST CARD INDICATOR_^1_%EQU FSTCRD($10)_^1_%EQU FOR€€MTD(2)_^1_%EQU ORIDE(4)_^1_%EQU HFF00($1A)_^1_%EQU HFFF0($16)_^1_%EQU HC000($20)_^1_%EQU ZERO($22)_#MASKS_^1_%EQU DATA($26)_^1_%EQU BIT5($28)_^1_%EQU H0100($2B)_^1_%EQU SEPCRD($2D)_^1_%EQU BIT10($2D)_^1_%EQU BIT11($2E)_^1_%EQU H1000($2F)_^1_%EQU H001F(7)_^1_%EQU BIT15($32)_^1_%EQU BIT14($31)_^1_%EQU HFFBF($39)_^1_%EQU QMARK($3F)_^1_%SPC 2_^1_%EQU AFNR($B5)_^1_%EQ€€U COMPRQ($B6)_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EJT_]_^1START STQ- I_^1_%LDQ =XE1726U-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC1726U-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 2,I_^1_%LDQ =XI1726U-START_A**MSOS 4.1**_^1_%AAQ A_^1_%STA- 1,I_^1_%LDQ- I_^1_%JMP* I1726U+1_G**MSOS 4.1**_^1_%SPC 1_^1MS300 JMP+ MAS300_'RELEASE DRIVERS CORE_-**MSOS 4.1**_^1_€€%JMP- (ADISP)_^1E1726U STQ- I_N**MSOS 4.1**_^1_%ENA TIMERR_#TIME OUT ERROR 0_^1J_$JMP ERROR_^1_%EJT_]_^1***_"DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I1726U STQ- I_N**MSOS 4.1**_^1GETREQ RTJ- (AFNR)_'GET A REQUEST_^1_%SPC 1_^1_%JMP* MS300_^1_%ENA 0_^1_%STA- TPMWRD,I_^1_%STA- CHKSUM,I_^1_%STA- CYCLE,I_^1_%STA- FLAG,I_^1_%LDQ- REQAD,I_I*MSOS V4.0*_^1_%LDA- (ZERO),Q_H*MSOS V4.0*_^1_%AR€€S 9_,GET REQUEST CODE_2*MSOS V4.0*_^1_%AND- H001F_K*MSOS V4.0_^1_%INA -14_M*MSOS V4.0*_^1_%SAN FEEDCD_'SKIP IF NOT MOTION REQUEST_(*MSOS V4.0*_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_M*MSOS V4.0*_^1_%SAP P3-*-1_%SKIP IF NOT ITER.TYPE PARAM._'*MSOS V4.0_^1_%AND =N$7000_$GET ONLY PARAM._4*MSOS V4.0_^1P3_#AND- HFFF0_'GET ALL PARAMS._4*MSOS V4.0_^1_%€€STA- TPMWRD,I_"SAVE REQUEST PARAMETERS_-*MSOS V4.0*_^1_%JMP* MORMC_%GO PROCESS MOTION REQUEST_+*MSOS V4.0*_^1_%EJT_]_^1***_"THE 1726-405 IS CHECKED FOR READY BEFORE INITIATING_^1***_"CARD MOTION ._^1_%SPC 2_^1FEEDCD LDQ- CALL,I_^1_%ENA NEXT-NOTALR_!SET PRE-READ ENTRY SWITCH_^1_%STA- RETURN,I_^1_%INP TTREJ-*_I*MSOS V4.0*_^1_%ALS 4_O*MSOS V4.0*_^1_%SAP ST_N*MSOS V4.0*_^1_%SUB =€€N$7C00_$CLEAR BIT 11/SET BIT 6_-*MSOS V4.0*_^1ST_#ALS 12_N*MSOS V4.0*_^1_%STA- STATUS,I_^1_%ALS 15_*CHECK READY_8*MSOS V4.0*_^1_%SAM D-*-1_$SKIP IF READY_8*MSOS V4.0*_^1_%ALS 3_)IS TRAY EMPTY_8*MSOS V4.0*_^1_%SAP E2-*-1_%SKIP IF NOT EMPTY_2*MSOS V4.0_^1_%ENA EMPTY_$INPUT TRAY EMPTY 23_2*MSOS V4.0_^1_%JMP* J_)REPORT ERROR_9*MSOS V4.0_^1E2_#JMP* ALM_)ALARM- GO GET ERROR CODE 2_€€)*MSOS V4.0_^1D_$CLR A_O*MSOS V4.0*_^1DP1_"INA $16_*CLEAR INT, INT ON DATA + ALARM_"**MSOS 4.1**_^1_%OUT TTREJ-*_I*MSOS V4.0*_^1SETIME ENA 3_N**MSOS 4.1**_^1_%STA- TIME,I_^1_%JMP- (ADISP)_%EXIT WAIT FOR INTERRUPT_^1_%EJT_]_^1***_"PROCESS MOTION REQUESTS_^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 SLEW R€€EQUEST_0*MSOS V4.0_^1MORMC LDA- TPMWRD,I_"PARAMETER STRING_4*MSOS V4.0*_^1_%CLR Q_O*MSOS V4.0*_^1_%LLS 4_+GET ONE PARA_7*MSOS V4.0*_^1_%SQZ NOTMC-*-1_#GET OUT IF ZERO PARAMETER_)*MSOS V4.0*_^1_%STA- TPMWRD,I_"SAVE REMAINDER OF STRING_,*MSOS V4.0*_^1_%INQ -4_N*MSOS V4.0_^1_%SQZ NOTMC-*-1_G*MSOS V4.0_^1_%INQ -1_N*MSOS V4.0_^1_%SQZ SLEW-*-1_$SKIP IF SLEW REQUEST_.*MSOS V4.0*_^€€1_%JMP* MORMC_(GET NEXT PARAMETER_0*MSOS V4.0*_^1NOTMC JMP DONE_L*MSOS V4.0_^1SLEW_!LDA- SWITCH,I_H*MSOS V4.0_^1_%EOR- BIT15_$SET BIT 15 TO_8*MSOS V4.0_^1_%STA- SWITCH,I_!INDICATE SLEW REQUEST_0*MSOS V4.0_^1_%JMP* FEEDCD_'INTER ON DATA +ALARM_/*MSOS V4.0_^1***********************************************************************_^1*_$IF ASCII63 HARDWARE CONVERSION IS USED --_+**MSO€€S 4.1**_^1*_'EOF = SEPARATOR CARD_^1*_-6789 PUNCH IN COLUMN 1 = SEP. CARD_^1*_]_'*_^1*_$OTHERWISE --_G**MSOS 4.1**_^1*_'EOF = EOF CARD PATTERN IN PHYTAB WORD 16 -_^1*_'NORMALLY A 78 PUNCH IN COLUMN 1_^1***********************************************************************_^1SLWRTN LDQ- CALL,I_J*MSOS V4.0*_^1_%INQ -1_N*MSOS V4.0*_^1_%INP TTREJ-*_$READ COLUMN 1_6*MSOS V4.0*_^1_%L€€DA- EOFCRD,I_$CHECH HARDWARE CONVERSION FLAG_"**MSOS 4.1**_^1_%SAP NOHWC_J**MSOS 4.1**_^1_%INQ 1_O*MSOS V4.0_^1_%INP TTREJ-*_$CHECK STATUS FOR_3*MSOS V4.0_^1_%AND- SEPCRD_'SEPARATOR CARD STATUS_-*MSOS V4.0_^1_%SAZ NOEOF-*-1_G*MSOS V4.0_^1_%JMP* YSEOF_J**MSOS 4.1**_^1NOHWC TRA Q_N**MSOS 4.1**_^1_%JMP CHKEOF_^1YSEOF LDQ- CALL,I_J*MSOS V4.0_^1_%LDA- H1000_K*MSOS V4.0_^1_%OUT €€TTREJ-*_$RELOAD MEMORY_6*MSOS V4.0_^1_%JMP EOFRD_K*MSOS V4.0_^1NOEOF LDA- H1000_'RELOAD MEMORY FUNCTION_-*MSOS V4.0_^1_%LDQ- CALL,I_J*MSOS V4.0_^1_%JMP* DP1_*ADD INTERRUPT REQUESTS_+**MSOS 4.1**_^1_%EJT_]_^1***_"DRIVER CONTINUATOR ENTRY_^1_%SPC 2_^1C1726U STQ- I_,CONTINUATOR_6**MSOS 4.1**_^1_%LDA- TIME,I_'CLOCK RESET_;76*1860_^1_%SAM GHOST_(YES_C76*1860_^1_%LDA- LU,I_)LOGICAL U€€NIT ZERO_576*1860_^1_%SAZ GHOST_(YES_C76*1860_^1_%JMP* EIEIO_O76*1860_^1GHOST JMP- (ADISP)_%GHOST INTERRUPT,RETURN TO DISP_(76*1860_^1EIEIO ENA -1_R76*1860_^1_%STA- TIME,I_^1_%LDQ- CALL,I_'GET 405 CARD READER_^1_%INP TTREJ-*_"STATUS_?*MSOS V4.0_^1_%ALS 4_O*MSOS V4.0_^1_%SAP S1-*-1_J*MSOS V4.0_^1_%SUB =N$7C00_"CLEAR BIT 11,SET BIT 6_/*MSOS V4.0_^1S1_#ALS 12_N*MSOS V4.0_^1_%€€STA- STATUS,I_!SAVE ADJUSTED STATUS_1*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0_^1_%AND- BIT5_%CHECK FOR ALARM_6*MSOS V4.0_^1_%SAN EE_(SKIP IF ALARM_8*MSOS V4.0_^1_%JMP* OK_^1EE_#TRQ A_O*MSOS V4.0_^1_%AND =N$91C0_"CHECK ALL BUT SEP AND EMPTY_^1_%SAZ OK-*-1_^1_%AND- H0100_$CHECK FOR ERROR_6*MSOS V4.0_^1_%SAZ ALM_^1_%ENA COMPAR_#COMPARE ERROR 7_6*MSOS V4.0_^1TJ_#JMP* J_^1ALM_"ENA ALARM€€_$ALARM ERROR 2_8*MSOS V4.0_^1_%JMP* TJ_N*MSOS V4.0_^1OK_#LDA- SWITCH,I_H*MSOS V4.0_^1_%SAP NOTS_'NOT SLEW_<*MSOS V4.0_^1_%JMP* SLWRTN_#INT FROM SLEW_8*MSOS V4.0_^1NOTS_!JMP* NOTALR_J*MSOS V4.0_^1DA1726 LDQ- CALL,I_^1_%INA $A_^1_%STA- TEMPWD,I_^1_%INP TTREJ-*_I*MSOS V4.0_^1_%AND- DATA_^1_%SAN DATAOK_^1_%ENA NEXT-NOTALR_^1_%STA- RETURN,I_^1_%JMP* SETIME_^1TTREJ JMP* INTR_^1_%E€€NA EXTREJ_#EXTERNAL REJECT_^1_%JMP* TJ_^1INTR_!ENA INTREJ_#INTERNAL REJECT_^1_%JMP* TJ_^1DATAOK LDA- TEMPWD,I_^1_%OUT TTREJ-*_$FUNCTION ON CODE PRESET IN 'A'_$*MSOS V4.0_^1_%RAO- TEMPWD,I_%TIME WASTER_^1_%RAO- BUFFAD,I_^1_%INQ -1_^1_%INP TTREJ-*_I*MSOS V4.0_^1_%STA- TEMPWD,I_^1_%INQ 1_^1_%INP TTREJ-*_I*MSOS V4.0_^1_%STA- STATUS,I_$THE FIRST WORD IS XFERED TO COMPUTER MEMORY_€€^1_%JMP* AL_^1EX_#JMP* NOTALR_'CARD XFER COMPLETE_^1PETE_!LDQ- CALL,I_^1_%INP TTREJ-*_I*MSOS V4.0_^1_%ALS 11_+CHECK FOR EOP_^1_%SAP AL_^1_%JMP* EX_+YES_^1AL_#INQ -1_,NO_^1_%INP TTREJ-*_$XFER ANOTHER CARD_2*MSOS V4.0_^1_%LDQ- BUFFAD,I_^1_%STA- (ZERO),Q_^1_%RAO- BUFFAD,I_^1_%JMP* PETE_^1NOTALR LDA- BUFFER,I_^1_%STA- BUFFAD,I_^1_%LDQ- RETURN,I_^1_%JMP* NOTALR,Q_$RETURN TO LOCATIO€€N WHERE EXIT WAS MADE TO DA17_^1NEXT_!ENA FORMTD_^1_%AND- SWITCH,I_$IS IT A FORMATTED REQUEST_^1_%SAN FRDBIN_(YES_^1_%ENA BINASC_^1_%AND- SWITCH,I_^1_%SAN FRDBIN_'UNFORMTD ASCII_^1_%JMP RDBIN_(UNFORMTD_^1FRDBIN EQU FRDBIN(*)_I72*1729_^1_%LDA- EOFCRD,I_$CHECK HARDWARE CONV._-**MSOS 4.1**_^1_%SAP A8_M**MSOS 4.1**_^1_%ENA BINASC_L72*1729_^1_%AND- SWITCH,I_^1_%SAZ A8_^1*_81 CA€€RD DELETED_672*1729_^1_%LDA- BIT11_(RELEASE NEGATE FUNCTION_^1_'ENQ TOSKIP-NOTALR RETURN TO HARDWARE CONVERSION_^1_%STQ- RETURN,I_^1_%JMP* DA1726_^1A8_#ENQ BB-NOTALR_#ASCII 68 AND FORMTD BINARY REQUEST HAS_^1_%STQ- RETURN,I_$THE SAME REENTRY POINT_^1_%LDA- EOFCRD,I_$CHECK HARDWARE CONV._-**MSOS 4.1**_^1_%SAM HWC_L**MSOS 4.1**_^1_%LDA- BIT10_(NEGATE HOLLERITH FUNCTION_^1_%JMP* DA1€€726_I**MSOS 4.1**_^1HWC_"LDA- BIT11_J**MSOS 4.1**_^1_%JMP* DA1726_^1TOSKIP LDA- EOFCRD,I_G**MSOS 4.1**_^1_%SAP BB_M**MSOS 4.1**_^1_%LDQ- BUFFER,I_G**MSOS 4.1**_^1_%LDA- TEMPWD,I_^1_%STA- (ZERO),Q_^1_%LDA- STATUS,I_J*568_^1_%AND- SEPCRD_'IS IT A SEP. CARD_3*568_^1_%SAZ SKP_*NO_B*568_^1_%JMP* EOFRD_(YES_A*568_^1SKP_"JMP* SKIP_N*568_^1BB_#LDQ- BUFFER,I_^1_%LDA- TEMPWD,I_^1_%STA- (ZE€€RO),Q_^1_%LDA- STATUS,I_J*568_^1_%AND- SEPCRD_'IS IT SEP. CARD_5*568_^1_%SAN TTEOF-*-1_^1_%ENQ TOGETW-GETWRD_^1_%JMP* GETWRD_'GET THE FIRST WORD_^1TOGETW TRA Q_^1_%ENA FIRST_^1_%AND- SWITCH,I_^1_%SAZ CHKEOF-*-1_F*MSOS V4.0_^1_%JMP* FRDB1_K*MSOS V4.0_^1CHKEOF LDA- EOFCRD,I_%EOF CARD PATTERN_^1_%ALS_!4_^1_%AND- HFFF0_^1_%EAQ A_^1_%SAN NEOF-*-1_I*MSOS V4.0_^1_%LDA- SWITCH,I_H*M€€SOS V4.0*_^1TTEOF SAP EOFRD-*-1_G*MSOS V4.0_^1_%JMP YSEOF_$GOT EOF - RELOAD MEM. FOR NEXT READ_!*MSOS V4.0_^1EOFRD LDA- BIT14_(READ EOF_^1_%EOR- ERRTAB,I_$MARK THE REQUEST_^1_%STA- ERRTAB,I_$COMPLETE WITH ERROR_^1_%LDA- STATUS,I_H*MSOS V4.0_^1_%EOR- BIT11_'ADD EOF BIT TO STATUS WORD_)*MSOS V4.0_^1_%STA- STATUS,I_H*MSOS V4.0_^1_%LDA- SWITCH,I_H*MSOS V4.0_^1_%SAP TTDONE_J*MSOS V€€4.0_^1_%JMP NXTMCR_#CKECK NEXT MC REQ. PARA._-*MSOS V4.0_^1TTDONE JMP* TODONE_^1NEOF_!LDA- SWITCH,I_I*MSOS V4.0_^1_%SAP FRDB1-*-1_^1_%AND =N$0050_%MASK OUT 7-9 PUNCH_-*4.0/78*1930_^1_%JMP NOEOF SLEW REQ.-BUT NO EOF YET-READ NEXT CARD.. *MSOS V4.0_^1FRDB1 TRQ A_O58*1129_^1_%AND- $A_N58*1129_^1_%INA -$50_%CHECK FOR 79 PUNCH_358*1129_^1_%SAZ FRDB2-*-1 SKIP IF BINARY CARD_258€€*1129_^1_%ENA BINASC_^1_%AND- SWITCH,I_^1_%SAN SKIP_^1_%ENA FIRST_^1_%AND- SWITCH,I_$NO FIRST WORD_^1_%SAN NOTIST_^1_%ENA BINASC_^1_%EOR- SWITCH,I_$YES SET ASCII MODE_^1_%STA- SWITCH,I_^1SKIP_!JMP ASCII_^1_%JMP* REJECT_^1_%JMP* REJECT+1_^1NOTIST ENA NO79ER_'NO ERROR NO 7-9 PUNCH_^1_%JMP* JJ_^1FRDB2 ENA $20_*IS CHECKSUM OVERRIDE BIT_^1_%LAQ A_,SET IN THIS CARD_^1_%SAZ F€€RDB3_^1_%ENA -ORIDE_'YES SET IT IN THE PHY DEVICE TABLE_^1_%AND- SWITCH,I_^1_%INA ORIDE_^1_%STA- SWITCH,I_^1FRDB3 TRQ A_,IS THE SEQ NUMBER OK_^1_%ARS 8_^1_%AND- H00FF_^1_%SAZ VERIFY_'SEQ NUMBER.EQ.0_^1_%STA- TPMWRD,I_$SAVE SEQ NUMBER_^1_%SUB- SEQ,I_^1_%SAN SEQERR_'SEQ.ERROR_^1_%JMP* FRDB4_(NORMAL EXIT_^1VERIFY STA- SEQ,I_(RESET SEQ.TO ZERO FOR_^1_%JMP* FRDB4_(NAM CARD,MACSKL€€ OR 00FF_^1SEQERR LDQ- TPMWRD,I_^1_%STQ- SEQ,I_(SET SEQ.CTR FOR A READ THRU_^1_%ENA SEQER_(EXIT TO ERROR_^1_%JMP* JJ_^1FRDB4 LDA- SEQ,I_(INCREMENT SEQUENCE_^1_%INA 1_^1_%AND- H00FF_^1_%STA- SEQ,I_^1_%ENQ FRDB6-GETWRD_^1_%JMP* GETWRD_^1FRDB6 TRA Q_^1_%ENA FSTCRD_'IS THIS THE FIRST CARD_^1_%AND- SWITCH,I_^1_%SAZ N_^1_%JMP* NOTOST_^1N_$ENA FSTCRD_'YES RESET FIRST CARD SWITCH_€€^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1_%SQM LNGOK_^1_%ENA LENGER_^1_%JMP* JJ_^1LNGOK STQ- LENGTH,I_^1MORE_!ENQ FRDB7-GETWRD GET NEXT WORD_^1GETWRD STQ- RETURN,I_$THIS ROUTINE DELIVERS A WORD_^1_%LDQ- CYCLE,I_%FROM BUFFER IF BUFFER IS_^1_%JMP* CYCLE1,Q_^1CYCLE1 LDA- BUFFAD,I_^1_%TRA Q_^1_%SUB- BUFFER,I_^1_%INA -80_^1_%SAN NOTEXB_^1_%JMP FEEDCD_^1NOTEXB LDA- (ZERO),Q_^1_%LDQ€€- 1,Q_^1_%QLS 4_^1_%LLS 4_^1_%ENQ CYCLE2-CYCLE1_^1GETWEX STQ- CYCLE,I_^1_%TRA Q_^1_%ADQ- CHKSUM,I_$UPDATE CHECKSUM_^1_%STQ- CHKSUM,I_^1_%LDQ- RETURN,I_^1_%JMP* GETWRD,Q_^1FRDB7 TRA Q_^1NOTOST LDA- LENGTH,I_^1_%SAN NOTUST_^1_%TRQ A_^1_%JMP* FRDB9_^1NOTUST LDA- CORE,I_^1_%SUB- LASTP1,I_$LST+1_^1_%SAZ GOTALL_^1_%TRQ A_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_$STORE THE WORD_^1_%RAO€€- CORE,I_'INCREMENT CORE ADDRESS_^1GOTALL RAO- LENGTH,I_$HAS THE COMPLETE RECORD BEEN READ_^1_%LDA- LENGTH,I_^1_%SAZ FRDB8_^1_%JMP* MORE_)NO_^1FRDB8 ENQ FRDB9-GETWRD_^1_%JMP* GETWRD_^1REJECT JMP* INTRNL_^1_%ENA EXTREJ_'SET EXTERNAL REJECT CODE_^1JJ_#JMP* ERROR_^1FRDB9 LDA- CHKSUM,I_$DOES THE CHECKSUM BALANCE_^1_%SAZ TODONE_'TO ZERO_^1_%ENA ORIDE_(NO IS THE CHECKSUM OVERIDE_^€€1_%AND- SWITCH,I_$SET_^1_%SAN TODONE_'YES_^1_%LDA- SEQ,I_O76*1883_^1_%INA -1_+DECREMENT SEQUENCE COUNTER_,76*1883_^1_%STA- SEQ,I_(FOR RETRY_=76*1883_^1_%ENA CKSMER_'NO ERROR_^1_%JMP* ERROR_^1TODONE JMP* DONE_)FINISHED_^1RDBIN LDA- BIT10_^1_%LDQ =XCD-NOTALR_!SET RETURN ADD. FROM DA1726_^1_%STQ- RETURN,I_$AFTER CARD HAS BEEN READ_^1_%JMP DA1726_^1CD_#LDQ- BUFFER,I_^1_%LDA- TEMP€€WD,I_^1_%STA- (ZERO),Q_^1_%LDA- LASTP1,I_$SINGLE COLUMN INPUT_^1_%SUB- CORE,I_^1_%SAZ ONECHR_^1MORRDB ENQ RDBINI-GETWRD GET A WORD_^1_%JMP* GETWRD_^1RDBINI LDQ- CORE,I_'PUT IT AWAY_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_'INCREMENT CORE_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ RDBIN2_'FINSHED_^1_%JMP* MORRDB_'NO_^1ONECHR ENQ RDBIN3-GETWRD INPUT AND STORE_^1_%JMP* GETWRD_'A SINGLE IN€€PUT_^1RDBIN3 AND- HFFF0_^1_%EOR- H000F_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_^1RDBIN2 JMP* DONE_)FINSHED_^1CYCLE2 LDQ- BUFFAD,I_^1_%LDA- 1,Q_^1_%LDQ- 2,Q_^1_%QLS 4_^1_%LLS 8_^1_%ENQ CYCLE3-CYCLE1_^1_%JMP* GETWEX_^1INTRNL ENA INTREJ_^1_%JMP* ERROR_^1CYCLE3 LDQ- BUFFAD,I_^1_%TRQ A_^1_%INA 4_^1_%STA- BUFFAD,I_^1_%LDA- 3,Q_^1_%ALS 4_^1_%LDQ- 2,Q_^1_%LRS 4_^1_%ENQ 0_^1_%JMP* GETWEX€€_^1_%EJT_]_^1***_"REQUEST COMPLETION AND ERROR EXIT_^1_%SPC 2_^1DONE_!ENA 1_)CLEAR INTERRUPTS AND ALARM COND._$*MSOS V4.0_^1_%LDQ- CALL,I_^1_%OUT REJECT-*_J*635_^1_%ENA 0_^1_%JMP* MAKQ_^1TOMAKQ LDA- FLAG,I_'CHECK ILLEGAL HOLLERITH PUNCH_^1_%SAZ TMAKQ_(SOFTWARE CONVERSION ONLY_^1_%ENA HOLRTH_^1_%JMP* ERROR_^1TMAKQ RTJ- (COMPRQ)_^1_%JMP GETREQ_^1ERROR LDQ- LU,I_)SET CODE FOR€€ ALT DEVICE_^1_%QLS 6_,HANDLER_^1_%EAQ A_^1_%STA- ERRCOD,I_^1_%LDA- HC000_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_^1_%LDQ- CALL,I_^1_%INP 1_^1_%NOP 0_^1_%ALS 4_O*MSOS V4.0_^1_%SAP 2_O*MSOS V4.0_^1_%SUB =N$7C00_$SWITCH BITS 6 AND 11_/*MSOS V4.0_^1_%ALS 12_N*MSOS V4.0_^1_%STA- STATUS,I_^1_%ENA 1_^1_%OUT 1_^1_%NOP 0_^1_%ENA UMAKQ-TOMAKQ_^1_%JMP* MAKQ_^1UMAKQ LDQ- ERRCOD,I_^1_€€%LDA- DIAGLU,I_$DIAG LU_:**MSOS 4.1**_^1_%SUB- LU,I_K**MSOS 4.1**_^1_%SAN DOLOG_(NOT DIAG, GO LOG_1**MSOS 4.1**_^1_%JMP* TMAKQ_J**MSOS 4.1**_^1DOLOG RTJ+ LOG_*LOG ERROR_8**MSOS 4.1**_^1_%JMP+ ALTDEV_^1MAKQ_!STA- RETURN,I_^1_%ENA -ORIDE_^1_%AND- SWITCH,I_^1_%RTJ MAKEQ_^1_%LDQ- RETURN,I_^1_%JMP* TOMAKQ,Q_^1_%EJT_]_^1ASCII LDA- EOFCRD,I_$CHECK HRDWR CONVERSION_+**MSOS 4.1**_^1_%S€€AM HWCA_K**MSOS 4.1**_^1_%JMP* ASCIIA_I**MSOS 4.1**_^1HWCA_!LDA- STATUS,I_$CHECK FOR A BINARY CARD_***MSOS 4.1**_^1_%ALS 6_^1_%SAP Y_^1_%ENA NO79ER_'YES_^1_%JMP* ERROR_^1Y_$LDQ- BUFFAD,I_^1_%LDA- (ZERO),Q_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ ASCII6_I**MSOS 4.1**_^1_%RAO- BUFFAD,I_^1_%LDA- BUFFAD,I_^1_%SUB- BUFFER,I_^1_%INA€€ -40_^1_%SAZ ASCII5_I**MSOS 4.1**_^1_%JMP* ASCII_^1ASCII5 ENA FORMTD_I**MSOS 4.1**_^1_%AND- SWITCH,I_^1_%SAN ASCII6_I**MSOS 4.1**_^1_%JMP FEEDCD_^1ASCII6 JMP* DONE_K**MSOS 4.1**_^1_%EJT_]_^1ASCIIA LDQ- BUFFAD,I_G**MSOS 4.1**_^1_%LDA- (ZERO),Q_^1_%ENQ 0_^1_%JMP* CONVRT_^1ASCII1 ALS 8_^1_%EOR- H00FF_^1_%LDQ- CORE,I_^1_%STA- (ZERO),Q_^1_%TRQ A_^1_%SUB- LASTP1,I_^1_%SAN Z_^1_%€€JMP* ASCII4_^1Z_$RAO- BUFFAD,I_^1_%LDQ- BUFFAD,I_^1_%LDA- (ZERO),Q_^1_%ENQ ASCII2-ASCII1_^1_%JMP* CONVRT_^1ASCII2 EOR- HFF00_^1_%LDQ- CORE,I_^1_%AND- (ZERO),Q_^1_%STA- (ZERO),Q_^1_%RAO- CORE,I_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ ASCII4_^1_%RAO- BUFFAD,I_^1_%LDA- BUFFAD,I_^1_%SUB- BUFFER,I_^1_%INA -80_^1_%SAZ ASCII3_^1_%JMP* ASCII_^1ASCII3 ENA FORMTD_^1_%AND- SWITCH,I_^1_€€%SAN ASCII4_^1_%JMP FEEDCD_^1ASCII4 JMP* DONE_^1CONVRT SAN 2_^1_%ENA $20_^1_%JMP* GETOUT_^1_%STQ- RETURN,I_^1_%TRA Q_,CONVERT 12 BIT HOLLERITH_^1_%ENA 0_^1_%QLS 7_^1_%SQP 1_^1_%INA $71_*ROW 1_^1_%QLS 1_^1_%SQP 1_^1_%INA $62_*ROW 2_^1_%QLS 1_^1_%SQP 1_^1_%INA $63_*ROW 3_^1_%QLS 1_^1_%SQP 1_^1_%INA $64_*ROW 4_^1_%QLS 1_^1_%SQP 1_^1_%INA $65_*ROW 5_^1_%QLS 1_^1_%€€SQP 1_^1_%INA $66_*ROW 6_^1_%QLS 1_^1_%SQP 1_^1_%INA $67_*ROW 7_^1_%QLS 1_^1_%SQP 1_^1_%INA $18_*ROW 8_^1_%QLS 1_^1_%SQP 1_^1_%INA $79_^1_%AND =N$FF8F_^1_%QLS 5_^1_%SQP 1_^1_%INA $70_*ROW 12_^1_%QLS 1_^1_%SQP 1_^1_%INA $60_*ROW 11_^1_%QLS 1_^1_%SQP 1_^1_%INA $50_*ROW ZERO_^1_%AND- HFFBF_^1_%ENQ 0_^1_%LLS 9_,ILLEGAL PUNCH_^1_%SQZ HOLLOK_^1_%ENA 1_N**MSOS 4.1€Κ**_^1_%STA- FLAG,I_^1_%ENA QMARK_^1_%JMP* SETUP_^1HOLLOK LLS 6_^1_%LDQ CDRD,Q_I**MSOS 4.1**_^1_%SAN 1_^1_%LLS 8_^1_%LLS 8_^1SETUP AND- H00FF_^1_%LDQ- RETURN,I_^1GETOUT JMP* ASCII1,Q_^1_%END_]_^__ΚPD40421 CSY/ C46 P€1_%NAM D40421_'DECK-ID C46 MSOS 4.1_-SUMMARY-079_^1*_*1740/501 - 1742-1 LINE PRINTER DRIVER_^1*_]_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 3_^1*_$D R I V E R_!D E S C R I P T I O N_^1_%SPC 3_^1*_$THIS DRIVER HAS 3 MODES OPERATION:FORTRAN,NORMAL AN€€D_^1*_$DIAGNOSTIC._^1*_]_^1*_$THE FORTRAN MODE IS USED WHEN THE CURRENT LOGICAL UNIT_^1*_$NUMBER IS EQUAL TO THE LOWER 8 BITS OF WORD 19 OF THE_^1*_$PHYSTAB.IN THIS MODE THE FIRST CHARACTER OF EACH LINE_^1*_$IS USED FOR PRINT CONTROL AND IS NOT PRINTED._^1*_]_^1*_$FIRST CHARACTER IS USED AS FOLLOWS:_^1*_]_^1*_10_$UP SPACE 2 LINES_^1*_11_$TOP OF FORM_^1*_1+_$SUPPRESS SPACE (PRINT O€€N SAME LINE)_^1*_$ALL OTHERS_(UP SPACE 1 LINE_^1*_]_^1*_$PRINT CONTROL APPLIES ONLY TO FORMATTED (FWRITE) REQUESTS._^1*_$ALSO NO LINE COUNTING IS DONE,THIS IS LEFT UP TO THE_^1*_$FORTRAN PROGRAM.IF AN UNFORMATTED (WRITE) REQUEST IS MADE_^1*_$TO THE FORTRAN LOGICAL UNIT,IT IS HANLED IN THE SAME WAY_^1*_$AS AN UNFORMATTED REQUEST TO THE NORMAL LOGICAL UNIT._^1*_$HARDWARE ERROR REPOR€€TING IS AS DESCRIBED FOR THE NORMAL_^1*_$MODE._^1*_]_^1*_$THE DIAGNOSTIC MODE IS USED WHEN THE CURRENT LOGICAL UNIT_^1*_$NUMBER IS EQUAL TO WORD 23 OF THE_^1*_$PHYSTAB.IN THIS MODE, THE DRIVER DOES NOT GO TO THE ALTERNATE_^1*_$DEVICE HANDLER,IN CASE OF AN ERROR,RATHER THE REQUEST IS_^1*_$COMPLETED IN THE NORMAL MANNER WITH Q ERROR BITS SET.THIS_^1*_$MODE WILL BE USED BY SCMM. SCMM €€WILL ALSO RETRIEVE THE_^1*_$ERROR CODE STORED IN WORD 17 OF THE PHYSTAB FOR ANALYSIS_^1*_$TO DETERMINE REJECTS AND TIMEOUT ERRORS._^1*_]_^1*_$THE NORMAL MODE IS USED FOR ALL OTHER LOGICAL UNIT NUMBERS._^1*_$IN THIS MODE,THE DRIVER GOES TO THE ALTERNATE DEVICE HANDLER_^1*_$IN CASE OF AN ERROR,WITH THE ERROR CODES AS LISTED BELOW._^1*_]_^1*_$DRIVER ERROR CODES:_^1*_]_^1*_10_$FAILURE €€TO INTERRUPT(REQUIRES TIMER)_^1*_12_$ALARM CONDITION_^1*_13_$PARITY ERROR_^1*_15_$INTERNAL REJECT_^1*_16_$EXTERNAL REJECT_^1*_]_^1*_$IN ALL MODES OF OPERATIN NO LINE COUNTING WILL BE DONE IF_^1*_$BIT 15 OF WORD 21 OF THE PHYSTAB (MAXIMUM LINES PER PAGE)_^1*_$WILL BE SET._^1*_]_^1*_$REQUESTS DESCRIPTION_^1*_]_^1*_$FORMATTED REQUESTS- EACH REQUEST IS PRECEEDED BY AN UPSPACE_^1*_$AND €€FOLLOWED BY A PRINT COMMAND._^1*_]_^1*_$UNFORMATTED REQUESTS- THERE IS NO PRECEEDING UPSPACE_^1*_$THE BUFFER IS PRINTED ONLY WHEN A CONTROL CHARACTER WHICH_^1*_$CAUSE A PRINT OR A CONTROL CHARACTER WHICH CAUSE PAPER_^1*_$MOTION IS ENCOUNTERED_^1*_]_^1*_'CHARACTER EDITING:_^1*_]_^1*_$$20-$5F_+SEND TO BUFFER_^1*_]_^1*_$$60-$7F_#(LOWERCASE).CHANGE TO $20-$5F (MADE BY HARDWARE)_^1*_]€€_^1*_$$03_(END OF TEXT.PRINT BUFFER,UPSPACE 1 LINE,_^1*_=TERMINATE REQUEST_^1*_$$04_(END OF XMSION.SAME AS $03_^1*_]_^1*_$$09_/HORZ. TAB._!SEND BLANKS TO BUFFER_^1*_]_^1*_$$0A_(LINE FEED.IGNORE_^1*_]_^1*_$$0B_(VERT. TAB_#PRINT BUFFER,FORMAT LEVEL 2,_^1*_?SPACE TO THE NEXT PRINTING POSITION_^1*_?AND CONTINUE_^1*_]_^1*_$$0C_/FORM FEED_^1*_]_^1*_$$0D_(CARRIAGE RETURN.PRINT BUFFER,UPS€€PACE 1 LINE,_^1*_ACONTINUE._^1*_]_^1*_$$1B_(ESCAPE._%USED FOR DIRECT FUNCTION CONTROL_^1*_?OF LINE PRINTER.THE NEXT CHARACTER_^1*_?IS INTERPRETED AS FOLLOWS:_^1*_]_^1*_1$00-$2F IGNORED_^1*_1$30-_#PRINT BUFFER.NO UPSPACE.NEXT LINE STARTS_^1*_9FROM THE BEGINNING_^1*_1$31-_"PRINT BUFFER.SINGLE SPACE NEXT LINE STARTS_^1*_9FROM THE BEGINNING_^1*_1$32-_"PRINT.DOUBLE SPACE.NEXT LINE STA€€RTS FROM_^1*_9THE BEGINNING._^1*_1$33-$3E PRINT BUFFER.SELECT FORMAT TAPE LEVEL_^1*_9(01-12).CONTINUE PRINTING FROM THE_^1*_9NEXT PRINTING POSITION_^1*_1$3F-_"SELECT 8 LINES PER INCH_^1*_9PER INCH_^1*_1$40_#CLEAR CONTROLLER.CONTINUE_^1*_1$41-$7F IGNORED_^1*_]_^1*_]_^1*P40421 ADC $520A_(00 SCHEDULER CALL_^1*_%ADC I40421_'01 INITIATOR ADDRESS_^1*_%ADC C40421_'02 CONTINUATOR ADD€€RESS_^1*_%ADC E40421_'03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $0201_(07 CONVERTER, EQUIPMENT, STATION_^1*_%NUM $2934_(08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC L€€40421_'13 DRIVER LENGTH IF MASS MEMORY_^1*_%ADC S40421_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 ODD CHARACTER AND ERROR CODE_^1*_%NUM 0_,16 SPARE_^1*_%NUM 0_,17 TEMPORARY_^1*_%NUM 0_,18 LINE COUNT_^1*_%ADC FPLU_)19 FORTRAN LINE PRINTER LOGICAL UNIT_^1*_%NUM 0_,20 NUMBER OF BLANKS TO BE SENT_^1*_%NUM 60_+21 MAXIMUM NUMBER OF LINES PER PAGE_^1*_%NUM 136€€_*22 NUMBER OF CHARACTERS PER LINE_^1*_%ADC U42312_'23 DIAGNOSTIC LU_^1_%EJT_]_^1_%EXT MAS300_^1_%ENT I40421,C40421,E40421_;**MSOS 4.1**_^1_%EXT ALTDEV_^1_%EXT MAKEQ_^1_%EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^1_%SPC 3_^1*_$E Q U I V A L E N C E S_^1_%SPC 3_^1_%EQU TIME(4)_%WD 4 (DIAG CLOCK)_^1_%EQU LU(5)_(WD 5 (LOGICAL UNIT)_^1_%EQU REQADR(6)_#WD 6 (REQUEST ADD€€RESS)_^1_%EQU CALL(7)_%WD 7 (EQUIPMENT STATUS)_^1_%EQU ERRTAB(8)_#WD 8 (STATUS REQUEST)_^1_%EQU SWITCH(9)_#WD 9 (CHECK VARIOUS ASPECTS)_^1_%EQU CORE(10)_$WD 10 (NEXT LOCATION)_^1_%EQU LASTP1(11)_"WD 11 (LAST LOCATION +1)_^1_%EQU STATUS(12)_"WD 12 (STATUS)_^1_%EQU BLNKDT(15)_"WD 15 (BLANK DETECT.WHEN 0 NO PRINTABLE CHAR)_^1_%EQU COUNT(16)_#WD 16 (LINE COUNT)_^1_%EQU SAVE€€(17)_$WD 17 (SAVE AND USE AS CONTROL CHAR)_^1_%EQU NUMCHR(18)_"WD 18 (CHARACTER COUNT)_^1_%EQU FTNSW(19)_#WD 19 ( FORTRAN LU )_-**MSOS 4.1**_^1_%EQU BLANKS(20)_"WD 20 (NUMBER OF BLANKS TO SEND TO BUFFER)_^1_%EQU MAXLIN(21)_"WD 21 (MAX NUMBER OF LINES PER PAGE)_^1_%EQU LINLEN(22)_"WD 22 (NUMBER OF CHARACTERS PER LINE)_^1_%EQU DIAGLU(23)_"WD 23 (DIAGNOSTIC LU)_0**MSOS 4_^1_%SPC€€ 3_^1*_'E R R O R C O D E S_^1_%SPC 3_^1_%EQU TIMERR(0)_#TIME OUT ERROR_^1_%EQU ALARM(2)_$ALARM_^1_%EQU INTREJ(5)_#INTERNAL REJECT_^1_%EQU EXTREJ(6)_#EXTERNAL REJECT_^1_%SPC 3_^1_%EQU ACOMPC($B6)_!ADR OF FNR SUBROUTINE BY ROUTINE_^1_%EQU AFNR($B5)_#LOCATION OF FNR_^1_%EQU ADISP($EA)_"LOCATION OF DISPATCHER_^1_%SPC 3_^1*_'M A S K S_^1_%SPC 3_^1_%EQU INTVAL(30)_"TIME OU€€T VALUE_^1_%EQU FIRST($20)_"CHECK IF FIRST ENTRY TO CONTINUATOR_^1_%EQU FORMTD($2)_"CHECK IF FORMATTED_^1_%EQU FINISH($4)_"CHECK IF FINISH WITH THE REQUEST_^1_%EQU ZERO($22)_#LOC $22 IN SYSDAT=0_^1_%EQU BIT1($24)_^1_%EQU BIT4($27)_^1_%EQU BIT14($20)_^1_%EQU BIT15($21)_^1_%EQU H001F(7)_$$001F_^1_%EQU H007F(9)_^1_%EQU H00FF($A)_^1_%EQU HFFF0($16)_"$FFF0_^1_%EQU UPPER($10€€)_"TAKE UPPER CHAR OF WORD IF EQ 1 WHEN_^1*_8ENTERING TO NXTCHR_^1_%EQU TBSTOP(20)_"NUMBER OF BLANKS FOR EACH TAB_^1_%EQU M8000($21)_^1_%EQU MF(6)_^1_%EQU BASE($23)_^1_%SPC 3_^1*_$ENTRY FROM MASDRV/DBLDRV_^1_%SPC 3_^1START STQ- I_^1_%LDQ =XE40421-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC40421-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ 2,I_^1_%LDQ =XI40421-START€€_A**MSOS 4.1**_^1_%AAQ A_^1_%STA- 1,I_^1_%JMP* I40421+1_G**MSOS 4.1**_^1MS300 ADC MAS300_^1_%EJT_]_^1***_$P R O C E S S M O T I O N R E Q U E S T S_^1_%SPC 3_^1NXTMCR EOR- BIT15_(CLEAR BIT 15 FROM_^1_%STA- SWITCH,I_$PREVIOUS PEJT PARA_^1_%SPC 3_^1MOTREQ LDA- SAVE,I_'GET PARAMETER STRING_^1_%CLR Q_^1_%LLS 4_,GET ONE PARAMETER_^1_%SQZ M1_+SKIP IF ZERO PARAMETER_^1_%STA- SAV€€E,I_'SAVE REMAINDER OF STRING_^1_%INQ -2_+WEOF=2_^1_%SQZ PE1_^1_%INQ -2_^1_%SQZ RWUNLD_'SKIP IF PARA.=4_^1_%JMP* MOTREQ_'CHECK NEXT PARAMETER_^1RWUNLD STQ- COUNT,I_%SET LINE COUNT TO ZERO_^1M1_#JMP* DONE_^1_%SPC 2_^1PE1_"STQ- COUNT,I_%SET LINE COUNT TO ZERO_^1_%LDA- SWITCH,I_^1_%EOR- BIT15_(SET BIT 15 TO INDICATE_^1_%STA- SWITCH,I_$PAGE EJECT REQUEST_^1_%ENA 8_,PAGE EJECT CON€€TROL CHARACTER9_^1_%RTJ SENDF2_$- SEND THIS CONTROL CHAR TO BUFFER_^1_%JMP* NXTMCR_'** NOT EXECURE **_^1_%EJT_]_^1***_$D R I V E R I N I T I A T O R E N T R Y_^1_%SPC 3_^1I40421 STQ- I_,INITIATOR_8**MSOS 4.1**_^1_%RTJ- (AFNR)_'ANY REQUEST_^1_%JMP* (MS300)_H**MSOS 4.1**_^1_%LDQ- CALL,I_^1_%ENA 1_,CLEAR CONTROLLER_^1_%OUT REJECT-*_^1_%ENA 0_,INITIALIZE PHYSTB_^1_%STA- SAVE,I_€€^1_%STA- BLNKDT,I_^1_%STA- BLANKS,I_^1_%LDQ- REQADR,I_^1_%LDA- (ZERO),Q_$GET REQUEST CODE_^1_%ARS 9_^1_%AND- H001F_^1_%INA -14_^1_%SAN NOTMRQ_'SKIP IF NOT MOTION REQUEST_^1_%STA- CORE,I_'ZERO CORE AND LASTP1 FOR_^1_%STA- LASTP1,I_$LATER USE BY MAKEQ_^1_%LDA- 4,Q_*GET PARAMETERS_^1_%SAP P3_+SKIP IF NOT ITER. TYPE PARAM_^1_%AND =N$7000_%GET ONLY PARAM._^1P3_#AND- HFFF0_(GET ALL €€ PARAMS._^1_%STA- SAVE,I_'SAVE PARAMETERS_^1_%JMP* MOTREQ_^1_%SPC 3_^1NOTMRQ JMP* AFALAR_'JUMP TO CONTINUATOR_^1_%SPC 3_^1DONE_!RTJ* STAT_^1_%LDQ- CALL,I_^1_%ENA 1_,CLEAR CONTROLLER_^1_%OUT REJECT-*_^1_%RTJ MAKEQ_^1DONE1 RTJ- (ACOMPC)_^1_%JMP* I40421+1_$GO FIND ANOTHER REQUEST_***MSOS 4.1**_^1_%SPC 3_^1*_'THIS ROUTINE STORES HARDWARE STATUS IN PHYSTAB_^1*_'AND EXITS WIT€€H A EQUAL TO THE STATUS_^1_%SPC 3_^1STAT_!NOP 0_^1_%STQ* SAVEQ_^1_%LDQ- CALL,I_^1_%INQ 2_^1_%INP REJECT-*_^1_%STA- STATUS,I_^1_%LDQ* SAVEQ_^1_%JMP* (STAT)_^1SAVEQ NUM 0_^1_%SPC 3_^1ER5_"ENA INTREJ_^1ERROR LDQ- LU,I_)PICK UP LU NUMBER_^1_%QLS 6_,SHIFT LU NUMBER_^1_%EAQ A_,COMBINE LU NUM WITH ERROR_^1_%STA- SAVE,I_'ERROR CODE_^1_%LDA- BIT14_(SET ERROR INDICATOR_^1_%EOR- ER€€RTAB,I_^1_%STA- ERRTAB,I_^1_%LDQ- CALL,I_^1_%INQ 2_^1_%INP 1_,GET STATUS_^1_%NOP 0_^1_%STA- STATUS,I_^1_%INQ -2_^1_%ENA 1_,CLEAR PRINTER_^1_%OUT 1_^1_%NOP 0_^1_%RTJ MAKEQ_^1_%ENA -1_+SET DIAGNOSTIC CLOCK NEGATIVE_^1_%STA- TIME,I_^1_%LDQ- SAVE,I_'TAKE ERROR CODE_^1_%LDA- DIAGLU,I_$CHECK IF DIAGNOSTIC LU_+**MSOS 4.1**_^1_%SUB- LU,I_^1_%SAZ NOALT_(DO NOT GO TO ALTDEV_^1_%RTJ€€+ LOG_L**MSOS 4.1**_^1_%JMP ALTDEV_^1NOALT JMP* DONE1_^1_%SPC 3_^1E40421 STQ- I_,ERROR_<**MSOS 4.1**_^1_%ENA TIMERR_'TIME OUT ERROR_^1_%JMP* ERROR_^1_%EJT_]_^1***_$D R I V E R C O N T I N U A T O R E N T R Y_^1_%SPC 3_^1C40421 STQ- I_,CONTINUATOR_6**MSOS 4.1**_^1_%ENA -1_^1_%STA- TIME,I_'SET DIAG. CLOCK NEGATIVE_^1_%RTJ* STAT_^1_%LDQ- CALL,I_^1_%ENA 2_,CLEAR INTERRUPTS_^1_€€%OUT REJECT-*_^1_%ENA $18_^1_%OUT REJECT-*_^1_%ENA $20_*CHECK FOR ALARM_^1_%AND- STATUS,I_^1_%SAZ AFALAR_'SKIP IF NOT ALARM_^1_%ENA ALARM_(SET ALARM CODE_^1_%JMP* ERROR_^1REJECT JMP* ER5_*INTERNAL REJECT_^1_%ENA EXTREJ_'EXTERNAL REJECT_^1_%JMP* ERROR_^1_%SPC 3_^1AFALAR LDA- SWITCH,I_^1_%SAP AFA_*SKIP IF NOT MOTION REQUEST_^1_%JMP NXTMCR_'CHECK NEXT MOTION REQ. PARA._^1AF€€A_"CLR A_^1_%STA- NUMCHR,I_^1_%ENA FIRST_(IS IT FIRST ENTRY TO CONTINUATOR_^1_%AND- SWITCH,I_^1_%SAZ SET1ST_'YES,SET THE FIRST SWITCH_^1_%JMP* NOT1ST_'NO,_^1SET1ST ENA FIRST_^1_%EOR- SWITCH,I_$SET FIRST SWITCH TO 1_^1_%STA- SWITCH,I_^1_%AND- BIT1_)CHECK IF FORMATTED REQUEST_^1_%SAN FORMAT_'FORMATTED_^1LAB_"STA- SAVE,I_'NO.STORE SUPPRESS SPACE CODE IN SAVE (A=0)_^1_%JMP* INIT€€_^1FORMAT LDA- FTNSW,I_^1_%AND- H00FF_(GET FORTRAN LOGICAL UNIT NUMBER_^1_%SUB- LU,I_)CHECK IF FORTRAN LU_^1_%SAZ FTN_*YES,_^1SINGLE ENA 2_,NO, SINGLE SPACE CODE_^1_%JMP* LAB_^1FTN_"RTJ NXTCHR_'GET FIRST CHARACTER_^1_%INA -$2B_)CHECK FOR +_^1_%SAN NOTPLS_^1_%JMP* LAB_*SUPRESS SPACE_^1NOTPLS INA -5_+CHECK FOR 0_^1_%SAN NOTZRO_^1_%ENA 3_^1_%JMP* LAB_*DOUBLE SPACE_^1NOTZRO €€INA -1_+CHECK FOR 1_^1_%SAZ ONE_^1_%JMP* SINGLE_^1ONE_"ENA 8_,TOP OF FORM CODE_^1_%JMP* LAB_^1_%SPC 3_^1NOT1ST ENA FINISH_'CHECK IF FINISH SWITCH SET_^1_%AND- SWITCH,I_^1_%SAN TDONE_(YES DONE_^1_%LDQ* SENDF2_'GET RETURN OF SENDF2_^1_%ENA 0_^1_%STA* SENDF2_'CLEAR RETURN_^1_%SQZ INIT_)NOT ACTIVE_^1_%JMP- (ZERO),Q_$RETURN TO CALLER_^1TDONE JMP* DONE_)YES_^1_%SPC 3_^1INIT_!LD€€A- MAXLIN,I_$UPDATE LINE COUNTER_^1_%SAM GO1_*DO NOTHING_^1_%LDA- LU,I_)GET LOGICAL UNIT_^1_%SUB- FTNSW,I_%MINUS FORTRAN_^1_%SAZ GO1_*SAME, DON'T COUNT LINES_^1_%LDA- SAVE,I_^1_%SAZ BAC_*NO FORM CONTROL IF ZERO_^1_%SAP BACK_)GO DO FORM CONTROL_^1_%JMP* GOA_^1BAC_"JMP* LAB7_^1BACK_!INA -8_+CHECK FOR TOP OF FORM_^1_%SAN CONT_)NOT PAGE EJECT FUNCTION_^1_%STA- COUNT,I_%CLEAR LI€€NE COUNTER_^1GO1_"JMP* GO_^1CONT_!INA 6_,CHECK FOR SINGLE SPACE_^1_%SAZ SEC_^1_%INA -2_+CHECK IF DOUBLE SPACE_^1_%SAN GO_^1_%RAO- COUNT,I_%INCREASE LINE COUNTER TWICE_^1SEC_"RAO- COUNT,I_^1_%LDA- COUNT,I_%CHECK IF BOTTOM OF FORM REACHED_^1_%SUB- MAXLIN,I_^1_%SAM GO_^1_%ENA 8_,CHANGE TO TOP OF FORM_^1_%STA- SAVE,I_^1_%JMP* BACK_^1_%SPC 3_^1GO_#LDA- SAVE,I_^1GOA_"RTJ* SENDF€€2_'GO OUTPUT CONTROL CODE_^1LAB7_!LDA- BLANKS,I_$CHECK IF ANY BLANKS TO BE SENT TO BUFFER_^1_%SAN 1_^1_%JMP* LAB1_^1_%ENA $20_*$20 IS THE CODE OF BLANK_^1_%RTJ FILL_^1_%RAO- BLANKS,I_^1_%JMP* LAB7_^1SENDF2 NUM 0_,OUTPUT CONTROL CHARACTERS_^1_%LDQ- CALL,I_'OUTPUT A_^1_%INQ 2_^1_%OUT TOREJ-*_'DIRECTOR 2 FUNCTION_^1_%INQ -2_^1_%ENA 2_,CLEAR INTERRUPTS_^1_%OUT TOREJ-*_^1_%ENA €€ $18_*REQUEST ALARM AND EOP_^1_%OUT TOREJ-*_^1SETCLK ENA INTVAL_'SET DIAGNOSTIC CLOCK_^1_%STA- TIME,I_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER.WAIT FOR EOP INT_^1_%JMP* (SENDF2)_^1_%SPC 3_^1LAB1_!RTJ* NXTCHR_^1_%INA -$20_)IS IT A SPECIAL CHARACTER_^1_%SAM EDIT_)YES,GO DO SOME EDITING BEFORE SENDING TO BUF_^1_%INQ -$7F_)IF EQUALS_!$7F IGNORE_^1_%SQZ EDIT-1_^1_%INA $20_*NO,SEND€€ THE CHAR.IF IT IS UPPER CASE_^1_%RTJ FILL_)THE HARDWARE WILL TAKE CARE OF IT._^1_%JMP* LAB1_^1EDIT_!INA 5_,IS IT $1B (ESCAPE)_^1_%SAN TRYCR_(NO, TRY CARRAIAGE RETURN_^1_%JMP* ESCAPE_^1TRYCR INA 14_+IS IT $D (CARRIAGE RETURN)_^1_%SAN TRYFF_(NO,TRY FORM FEED_^1_%JMP* LAB9_^1TRYFF INA 1_,IS IT $C (FORM FEED)_^1_%SAN TRYVT_(NO,TRY VERTICAL TAB_^1_%ENA 8_,TOP OF FORM CODE_€€^1BACK1 STA- SAVE,I_^1_%LDA- NUMCHR,I_^1_%TCA A_,SAVE IN BLANKS THE COMPLEMENT. OF NUMBER_^1_%INA 0_,TAKE CARE WHEN IT IS $FFFF_^1_%STA- BLANKS,I_$OF BLANKS THAT SHOULD BE SENT TO BUFFER_^1_%JMP* LAB2_^1_%SPC 2_^1TOREJ JMP* REJECT_^1_%JMP* REJECT+1_^1_%SPC 2_^1TRYVT INA 1_,IS IT A VERTICAL TAB_^1_%SAN TRYTB_(TRY TAB_^1_%ENA $10_*FORMAT TAPE LEVEL 2 CODE_^1_%JMP* BACK1_^€€1TRYTB INA 2_,IS IT A TAB_^1_%SAN TRY04_(NO, TRY EOT (04)_^1_%CLR Q_^1_%LDA- NUMCHR,I_^1_%DVI =XTBSTOP_%FIND HOW MANY BLANKS_^1_%INQ -TBSTOP+1_^1_%STQ- BLANKS,I_^1_%JMP* LAB7_^1TRY04 INA 5_^1_%SAN TRY03_^1SETEND LDA- LASTP1,I_$SET POINTERS_^1_%STA- CORE,I_^1LAB9_!ENA 2_,SINGLE SAPCE CODE_^1_%STA- SAVE,I_^1_%JMP* LAB2_^1TRY03 INA 1_^1_%SAN IGNORE_^1_%JMP* SETEND_^1IGN€€ORE JMP* LAB1_^1***_$THIS ROUTINE IS ENTERED WITH A EQUALS TO THE WORD_^1***_$TO BE OUTPUT TO THE BUFFER_^1_%SPC 3_^1SEND_!NOP 0_^1_%STQ* QSAVE_(SAVE USERS Q-REG_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT TOREJ-*_^1_%LDQ* QSAVE_(RESTORE USERS Q-REG_^1_%JMP* (SEND)_^1QSAVE NUM 0_^1_%SPC 3_^1_%SPC 3_^1***_$THIS ROUTINE BRINGS NEXT CHAR.IF END OF BUFFER A JUMP_^1***_$IS MADE TO FIN_".€€OTHERWISE IT EXIT WITH THE CHARACTER_^1***_$IN 7 LOWER BITS OF A._^1_%SPC 3_^1NXTCHR NOP 0_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_$CHECK IF END OF BUFFER_^1_%SAM OK_+NO,BRING NEXT CHAR_^1_%LDQ* WORD_^1_%STA* WORD_)A = 0000_^1_%SQZ GOFIN_(NO DATA TO SEND_^1_%INQ $20_*FILL WITH SPACE_^1_%TRQ A_,DATA IN TO A FOR SEND_^1_%RTJ* SEND_*PARTIAL WORD_^1GOFIN JMP* FIN_*YES,NO MORE CHARACTE€€RS._^1OK_#ENA UPPER_(BIT 4_^1_%EOR- SWITCH,I_$INVERT THE UPPER/LOWER SWITCH_^1_%STA- SWITCH,I_^1_%AND- BIT4_)CHECK IF UPPER_^1_%LDQ- CORE,I_^1_%LDQ- (ZERO),Q_$BRING WORD FROM USERS BUFFER_^1_%SAZ UP_+YES,UPPER_^1_%CLR A_^1_%LLS 8_,UPPER 8 BITS OF Q TO LOWER 8 BITS OF A_^1LOW_"AND- H007F_^1_%TRA Q_^1_%JMP* (NXTCHR)_$EXIT_^1UP_#TRQ A_,TRANSFER WORD TO A_^1_%RAO- CORE,I_'ADVAN€€CE POINTER_^1_%JMP* LOW_^1_%SPC 3_^1ESCAPE RTJ* NXTCHR_^1_%INA -$30_)IS IT A $30_^1_%SAP 1_,GREATER THAN $2F_^1_%JMP* LAB1_)IGNORE_^1_%SAN 1_,NO_^1_%JMP* LAB9+1_'YES,GO PRINT (SUPPRESS SPACE)_^1_%INA -1_+IS IT A $31 (SINGLE)_^1_%SAN 1_,NO_^1_%JMP* LAB9_)YES_^1_%INA -1_+IS IT A $32 (DOUBLE)_^1_%SAN 2_,NO_^1_%ENA 3_,DOUBLE SPACE CODE_^1_%JMP* LAB9+1_^1_%INA -13_*CHECK€€ FOR_^1_%SAN CLEAR_)8 LINE PER INCH_^1_%LDA- M8000_(YES_^1_%JMP* LAB9+1_^1CLEAR INA 1_^1_%SAN LSTTRY_^1_%STA- SAVE,I_^1_%STA- BLNKDT,I_^1_%JMP* LAB2_^1LSTTRY INA 1_^1_%SAM 1_^1_%JMP* LAB1_)INGORE THE CHARACTER_^1_%LDQ- NUMCHR,I_$PREPARE NUMBER OF BLANKS_^1_%TCQ Q_^1_%INQ 0_^1_%STQ- BLANKS,I_^1_%INA $2C_*CODE FOR FORMAT TAPE LEVEL_^1_%AND- MF_+SAVE LOWER 8 BITS_^1_%TRA Q_-A€€S A INDEX_^1_%LDA- BASE,Q_'GET BIT POSITION TO SPECIFY FORMAT TAPE LEVEL_^1_%JMP* LAB9+1_^1_%SPC 3_^1FIN_"ENA FORMTD_'IS IT FORMATTED_^1_%AND- SWITCH,I_^1_%SAN SETFIN_^1_%JMP DONE_)NO,DO NOT PRINT_^1SETFIN ENA FINISH_^1_%EOR- SWITCH,I_$SET FINISH SWITCH_^1_%STA- SWITCH,I_^1LAB2_!LDA- BLNKDT,I_%IS_^1_%SAN PRINT_^1*_8THE DRIVER THINK THAT IT GOT EOP INT._^1_%JMP C40421+1_$GO C€€ONTINUATOR. MAKE_^1PRINT LDA* WORD_)GET WAITING DATA_^1_%SAZ NOWORD_'NONE_^1_%INA $20_*ADD A SPACE_^1_%RTJ* SEND_)SEND DATA_^1_%CLR A_^1_%STA* WORD_)CLEAR DATA_^1NOWORD STA- NUMCHR,I_$-AND NUMBER CHARACTERS THIS LINE_^1_%ENA 1_,PRINT FUNCTION_^1_%RTJ SENDF2_'PRINT_^1_%JMP INIT_)GO CONTINUE PROCESS LINE_^1_%SPC 3_^1***_!- THIS ROUTINE FILLS THE BUFFER,INCREMENT CHARACTER C€€OUNT_^1***_$AND DETECT END OF BUFFER FOR FORMATTED REQUESTS_^1_%SPC 3_^1FILL_!NOP 0_^1_%TRA Q_^1_%LDA- SWITCH,I_^1_%AND- BIT1_)CHECK IF FORMATTED_^1_%SAZ FILL1_(SKIP IF NOT FORMATTED_^1_%LDA- NUMCHR,I_$CHECK IF NUMBER OF CHARS IS ALREADY_^1_%SUB- LINLEN,I_$EQUAL TO LINLEN (WD 22 OF PHYSTAB)_^1_%SAN FILL1_(NO,_^1_%JMP* LAB2_)GO PRINT BUFFER_^1FILL1 TRQ A_,CHARACTER TO A_^1_€€%INA -$20_)CHECK_^1_%SAZ INCCHR_(IF BLANK_^1_%RAO- BLNKDT,I_$YES - INCREMENT BLANK DETECT_^1INCCHR RAO- NUMCHR,I_$INCREMENT CHARACTER COUNT_^1_%LDA* WORD_^1_%SAN LOWCHR_'DATA -- LOWER NOW_^1_%QLS 8_,YES - SHIFT CHARACTER INTO UPPER 8 BITS_^1_%STQ* WORD_*SAVE IT TEMPORARILY_^1_%JMP* (FILL)_'GO GET NEXT CHARACTER_^1LOWCHR AAQ A_,COMBINE UP - LOW_^1_%CLR Q_^1_%STQ* WORD_)CLEAR W€šAITING DATA_^1_%RTJ* SEND_+TO RPINTER_^1_%JMP* (FILL)_'GO GET NEXT CHARACTER_^1_%SPC 3_^1WORD_!NUM 0_,TEMPORARY STORAGE OF UPPER CHARACTER_^1_%END_]_^__šPD42312 CSY/ C44 P€1_%NAM D42312_'DECK-ID C44 MSOS 4.1_-SUMMARY-079_^1*_$1742-30 AND 1742-120 LINE PRINTER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1*_]_^1*P42312 ADC $520A_(00 SCHEDULER CALL_^1*_%ADC I42312_'01 INITIATOR ADDRESS_^1*_%ADC C42312_'02 CONTINUATOR ADDRES€€S_^1*_%ADC E42312_'03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $0201_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $2804+T4230_!08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC €€ L42312_'13 DRIVER LENGTH IF MASS MEMORY_^1*_%ADC S42312_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 BLANK DETECTION INDICATOR_^1*_%NUM 0_,16 LINE COUNT_^1*_%NUM 0_,17 TEMPORARY STORAGE FOR CONTROL FUNC._^1*_%NUM 0_,18 CHARACTER COUNT_^1*_%ADC FPLU_)19 DIAGNOSTIC/FTN LOGICAL UNITS_^1*_%NUM 0_,20 NUMBER OF BLANKS TO BE SENT_^1*_%NUM 60_+21 MAXIMUM NUMBER €€OF LINES PER PAGE_^1*_%NUM 136_*22 NUMBER OF CHARACTERS PER LINE_^1*_%ADC U42312_'23 DIAGNOSTIC LU_^1_%SPC 2_^1*_$NOTE - - IF THE 1742-120 LINE PRINTER IS USED, THE TABLE_^1*_$T5954 IS REQUIRED TO LOAD THE PRINTER TRAIN IMAGINE._%--_^1_%SPC 3_^1*_$D R I V E R_!D E S C R I P T I O N_^1_%SPC 3_^1*_$THIS DRIVER HAS 3 MODES OPERATION:FORTRAN,NORMAL AND_^1*_$DIAGNOSTIC._^1*_]_^1€€*_$THE FORTRAN MODE IS USED WHEN THE CURRENT LOGICAL UNIT_^1*_$NUMBER IS EQUAL TO THE LOWER 8 BITS OF WORD 19 OF THE_^1*_$PHYSTAB.IN THIS MODE THE FIRST CHARACTER OF EACH LINE_^1*_$IS USED FOR PRINT CONTROL AND IS NOT PRINTED._^1*_]_^1*_$FIRST CHARACTER IS USED AS FOLLOWS:_^1*_]_^1*_10_$UP SPACE 2 LINES_^1*_11_$TOP OF FORM_^1*_1+_$SUPPRESS SPACE (PRINT ON SAME LINE)_^1*_$ALL OTHER€€S_(UP SPACE 1 LINE_^1*_]_^1*_$PRINT CONTROL APPLIES ONLY TO FORMATTED (FWRITE) REQUESTS._^1*_$ALSO NO LINE COUNTING IS DONE,THIS IS LEFT UP TO THE_^1*_$FORTRAN PROGRAM.IF AN UNFORMATTED (WRITE) REQUEST IS MADE_^1*_$TO THE FORTRAN LOGICAL UNIT,IT IS HANLED IN THE SAME WAY_^1*_$AS AN UNFORMATTED REQUEST TO THE NORMAL LOGICAL UNIT._^1*_$HARDWARE ERROR REPORTING IS AS DESCRIBED FOR TH€€E NORMAL_^1*_$MODE._^1*_]_^1*_$THE DIAGNOSTIC MODE IS USED WHEN THE CURRENT LOGICAL UNIT_^1*_$NUMBER IS EQUAL TO WORD 23 OF THE_^1*_$PHYSTAB.IN THIS MODE, THE DRIVER DOES NOT GO TO THE ALTERNATE_^1*_$DEVICE HANDLER,IN CASE OF AN ERROR,RATHER THE REQUEST IS_^1*_$COMPLETED IN THE NORMAL MANNER WITH Q ERROR BITS SET.THIS_^1*_$MODE WILL BE USED BY SCMM. SCMM WILL ALSO RETRIEVE THE_^€€1*_$ERROR CODE STORED IN WORD 17 OF THE PHYSTAB FOR ANALYSIS_^1*_$TO DETERMINE REJECTS AND TIMEOUT ERRORS._^1*_]_^1*_$THE NORMAL MODE IS USED FOR ALL OTHER LOGICAL UNIT NUMBERS._^1*_$IN THIS MODE,THE DRIVER GOES TO THE ALTERNATE DEVICE HANDLER_^1*_$IN CASE OF AN ERROR,WITH THE ERROR CODES AS LISTED BELOW._^1*_]_^1*_$DRIVER ERROR CODES:_^1*_]_^1*_10_$FAILURE TO INTERRUPT(REQUIRES TI€€MER)_^1*_12_$ALARM CONDITION_^1*_13_$PARITY ERROR_^1*_15_$INTERNAL REJECT_^1*_16_$EXTERNAL REJECT_^1*_]_^1*_$IN ALL MODES OF OPERATIN NO LINE COUNTING WILL BE DONE IF_^1*_$BIT 15 OF WORD 21 OF THE PHYSTAB (MAXIMUM LINES PER PAGE)_^1*_$WILL BE SET._^1*_]_^1*_$REQUESTS DESCRIPTION_^1*_]_^1*_$FORMATTED REQUESTS- EACH REQUEST IS PRECEEDED BY AN UPSPACE_^1*_$AND FOLLOWED BY A PRINT COMM€€AND._^1*_]_^1*_$UNFORMATTED REQUESTS- THERE IS NO PRECEEDING UPSPACE_^1*_$THE BUFFER IS PRINTED ONLY WHEN A CONTROL CHARACTER WHICH_^1*_$CAUSE A PRINT OR A CONTROL CHARACTER WHICH CAUSE PAPER_^1*_$MOTION IS ENCOUNTERED_^1*_]_^1*_'CHARACTER EDITING:_^1*_]_^1*_$$20-$5F_+SEND TO BUFFER_^1*_]_^1*_$$60-$7F_#(LOWERCASE).CHANGE TO $20-$5F (MADE BY HARDWARE)_^1*_]_^1*_$$03_(END OF TEXT.P€€RINT BUFFER,UPSPACE 1 LINE,_^1*_=TERMINATE REQUEST_^1*_$$04_(END OF XMSION.SAME AS $03_^1*_]_^1*_$$09_/HORZ. TAB._!SEND BLANKS TO BUFFER_^1*_]_^1*_$$0A_(LINE FEED.IGNORE_^1*_]_^1*_$$0B_(VERT. TAB_#PRINT BUFFER,FORMAT LEVEL 2,_^1*_?SPACE TO THE NEXT PRINTING POSITION_^1*_?AND CONTINUE_^1*_]_^1*_$$0C_/FORM FEED_^1*_]_^1*_$$0D_(CARRIAGE RETURN.PRINT BUFFER,UPSPACE 1 LINE,_^1*_ACONTIN€€UE._^1*_]_^1*_$$1B_(ESCAPE._%USED FOR DIRECT FUNCTION CONTROL_^1*_?OF LINE PRINTER.THE NEXT CHARACTER_^1*_?IS INTERPRETED AS FOLLOWS:_^1*_]_^1*_1$00-$2F IGNORED_^1*_1$30-_#PRINT BUFFER.NO UPSPACE.NEXT LINE STARTS_^1*_9FROM THE BEGINNING_^1*_1$31-_"PRINT BUFFER.SINGLE SPACE NEXT LINE STARTS_^1*_9FROM THE BEGINNING_^1*_1$32-_"PRINT.DOUBLE SPACE.NEXT LINE STARTS FROM_^1*_9THE BEGINN€€ING._^1*_1$33-$3E PRINT BUFFER.SELECT FORMAT TAPE LEVEL_^1*_9(01-12).CONTINUE PRINTING FROM THE_^1*_9NEXT PRINTING POSITION_^1*_1$3F-_"IGNORED.NO POSSIBILITY TO SELECT 8 LINES_^1*_9PER INCH_^1*_1$40_#CLEAR CONTROLLER.CONTINUE_^1*_1$41-$7F IGNORED_^1*_]_^1_%EJT_]_^1_%EXT MAS300_^1_%ENT I42312,C42312,E42312_;**MSOS 4.1**_^1_%EXT ALTDEV_^1_%EXT MAKEQ_^1_%EXT LOG_*ERROR LOGGING EN€€TRY_.**MSOS 4.1**_^1_%EXT* TRAIN_(TRAIN IMAGE_6**MSOS 4.1**_^1_%SPC 3_^1*_$E Q U I V A L E N C E S_^1_%SPC 3_^1_%EQU TIME(4)_%WD 4 (DIAG CLOCK)_^1_%EQU LU(5)_(WD 5 (LOGICAL UNIT)_^1_%EQU REQADR(6)_#WD 6 (REQUEST ADDRESS)_^1_%EQU CALL(7)_%WD 7 (EQUIPMENT STATUS)_^1_%EQU ERRTAB(8)_#WD 8 (STATUS REQUEST)_^1_%EQU SWITCH(9)_#WD 9 (CHECK VARIOUS ASPECTS)_^1_%EQU CORE(10)_$€€WD 10 (NEXT LOCATION)_^1_%EQU LASTP1(11)_"WD 11 (LAST LOCATION +1)_^1_%EQU STATUS(12)_"WD 12 (STATUS)_^1_%EQU BLNKDT(15)_"WD 15 (BLANK DETECT.WHEN 0 NO PRINTABLE CHAR)_^1_%EQU COUNT(16)_#WD 16 (LINE COUNT)_^1_%EQU SAVE(17)_$WD 17 (SAVE AND USE AS CONTROL CHAR)_^1_%EQU NUMCHR(18)_"WD 18 (CHARACTER COUNT)_^1_%EQU FTNSW(19)_#WD 19 (FORTRAN LU)_/**MSOS 4.1**_^1_%EQU BLANKS(20)_€€"WD 20 (NUMBER OF BLANKS TO SEND TO BUFFER)_^1_%EQU MAXLIN(21)_"WD 21 (MAX NUMBER OF LINES PER PAGE)_^1_%EQU LINLEN(22)_"WD 22 (NUMBER OF CHARACTERS PER LINE)_^1_%EQU DIAGLU(23)_"WD 23 (DIAGNOSTIC LU)_,**MSOS 4.1**_^1_%SPC 3_^1*_'E R R O R C O D E S_^1_%SPC 3_^1_%EQU TIMERR(0)_#TIME OUT ERROR_^1_%EQU ALARM(2)_$ALARM_^1_%EQU INTREJ(5)_#INTERNAL REJECT_^1_%EQU EXTREJ(6)_#EX€€TERNAL REJECT_^1_%SPC 3_^1_%EQU ACOMPC($B6)_!ADR OF FNR SUBROUTINE BY ROUTINE_^1_%EQU AFNR($B5)_#LOCATION OF FNR_^1_%EQU ADISP($EA)_"LOCATION OF DISPATCHER_^1_%SPC 3_^1*_'M A S K S_^1_%SPC 3_^1_%EQU INTVAL(30)_"TIME OUT VALUE_^1_%EQU FIRST($20)_"CHECK IF FIRST ENTRY TO CONTINUATOR_^1_%EQU FORMTD($2)_"CHECK IF FORMATTED_^1_%EQU FINISH($4)_"CHECK IF FINISH WITH THE REQUEST_€€^1_%EQU ZERO($22)_#LOC $22 IN SYSDAT=0_^1_%EQU BIT1($24)_^1_%EQU BIT4($27)_^1_%EQU BIT8($2B)_^1_%EQU BIT14($20)_^1_%EQU BIT15($21)_^1_%EQU H001F(7)_$$001F_^1_%EQU H007F(9)_^1_%EQU H00FF($A)_^1_%EQU HFFF0($16)_"$FFF0_^1_%EQU UPPER($10)_"TAKE UPPER CHAR OF WORD IF EQ 1 WHEN_^1*_8ENTERING TO NXTCHR_^1_%EQU TBSTOP(20)_"NUMBER OF BLANKS FOR EACH TAB_^1_%SPC 3_^1*_$ENTRY FRO€€M MASDRV/DBLDRV_^1_%SPC 3_^1START STQ- I_^1_%LDQ =XE42312-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC42312-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ 2,I_^1_%LDQ =XI42312-START_A**MSOS 4.1**_^1_%AAQ A_^1_%STA- 1,I_^1_%JMP* I42312+1_G**MSOS 4.1**_^1MS300 ADC MAS300_^1_%EJT_]_^1***_$P R O C E S S M O T I O N R E Q U E S T S_^1_%SPC 3_^1NXTMCR EOR- BIT15_(CLEAR BIT€€ 15 FROM_^1_%STA- SWITCH,I_$PREVIOUS PEJT PARA_^1_%SPC 3_^1MOTREQ LDA- SAVE,I_'GET PARAMETER STRING_^1_%CLR Q_^1_%LLS 4_,GET ONE PARAMETER_^1_%SQZ M1_+SKIP IF ZERO PARAMETER_^1_%STA- SAVE,I_'SAVE REMAINDER OF STRING_^1_%INQ -2_+WEOF=2_^1_%SQZ PE1_^1_%INQ -2_^1_%SQZ RWUNLD_'SKIP IF PARA.=4_^1_%JMP* MOTREQ_'CHECK NEXT PARAMETER_^1RWUNLD STQ- COUNT,I_%SET LINE COUNT TO ZERO_^1€€M1_#JMP* DONE_^1_%SPC 2_^1PE1_"STQ- COUNT,I_%SET LINE COUNT TO ZERO_^1_%LDA- SWITCH,I_^1_%EOR- BIT15_(SET BIT 15 TO INDICATE_^1_%STA- SWITCH,I_$PAGE EJECT REQUEST_^1_%ENA $40_*PAGE EJECT CONTROL CHARACTER9_^1_%RTJ SEND_)SEND THIS CONTROL CHAR TO BUFFER_^1_%JMP LAB2_)GO ISSUE A PRINT_^1_%EJT_]_^1***_$D R I V E R I N I T I A T O R E N T R Y_^1_%SPC 3_^1I42312 STQ- I_N**MSOS 4.€€1**_^1_%RTJ- (AFNR)_'ANY REQUEST_^1_%JMP* (MS300)_^1_%LDQ- CALL,I_^1_%ENA 1_,CLEAR CONTROLLER_^1_%OUT REJECT-*_^1_%RTJ* STAT_)GET CURRENT STATUS_^1_%AND- BIT8_)CHECK FOR LOAD IMAGE REQUEST_^1_%SAZ IMAGOK_'SKIP IF NO REQUEST_^1_%RTJ* LODIMG_'GO LOAD TRAIN IMAGE_.**MSOS 4.1**_^1IMAGOK ENA 0_,INITIALIZE PHYSTB_^1_%STA- SAVE,I_^1_%STA- BLNKDT,I_^1_%STA- BLANKS,I_^1_%LDQ- REQADR,I_€€^1_%LDA- (ZERO),Q_$GET REQUEST CODE_^1_%ARS 9_^1_%AND- H001F_^1_%INA -14_^1_%SAN NOTMRQ_'SKIP IF NOT MOTION REQUEST_^1_%STA- CORE,I_'ZERO CORE AND LASTP1 FOR_^1_%STA- LASTP1,I_$LATER USE BY MAKEQ_^1_%LDA- 4,Q_*GET PARAMETERS_^1_%SAP P3_+SKIP IF NOT ITER. TYPE PARAM_^1_%AND =N$7000_%GET ONLY PARAM._^1P3_#AND- HFFF0_(GET ALL PARAMS._^1_%STA- SAVE,I_'SAVE PARAMETERS_^1_%JMP* MOT€€REQ_^1_%SPC 3_^1NOTMRQ JMP* AFALAR_'JUMP TO CONTINUATOR_^1_%SPC 3_^1LODIMG NUM 0_^1_%RTJ* STATCK_^1_%CLR Q_N**MSOS 4.1**_^1LOOP_!LDA TRAIN,Q_%PICK UP CHARACTER PAIR_+**MSOS 4.1**_^1_%ALS 8_,EXCHANGE UPPER AND LOWER CHARACTERS_^1_%RTJ* SENDIT_^1_%ALS 8_,EXCHANGE UPPER AND LOWER CHARACTERS_^1_%RTJ* SENDIT_^1_%INQ 1_^1_%LDA =N-144_'CHECK IF_9**MSOS 4.1**_^1_%AAQ A_,ALL CHA€€RACTERS_3**MSOS 4.1**_^1_%SAZ EXITLI_'OUT FOR IMAGE_4**MSOS 4.1**_^1_%JMP* LOOP_)GO BACK FOR NEXT CHARACTER PAIR_^1EXITLI JMP* (LODIMG)_$RETURN TO SENDER_1**MSOS 4.1**_^1SENDIT NUM 0_^1_%RTJ SEND_^1_%STA* SAV_L**MSOS 4.1**_^1_%RTJ* STATCK_^1_%LDA* SAV_L**MSOS 4.1**_^1_%JMP* (SENDIT)_^1SAV_"NUM 0_N**MSOS 4.1**_^1STATCK NUM 0_^1_%RTJ* STAT_K**MSOS 4.1**_^1_%ALS 10_^1_%SAM EREX€€IT_^1_%ALS 2_^1_%SAM 1_^1_%JMP* STATCK+1_^1_%JMP* (STATCK)_^1EREXIT ALS 15_^1_%SAM PARITY_^1_%ENA 2_^1_%JMP* ERROR_J**MSOS 4.1**_^1PARITY ENA 3_^1_%JMP* ERROR_J**MSOS 4.1**_^1DONE_!RTJ* STAT_^1_%LDQ- CALL,I_^1_%ENA 1_,CLEAR CONTROLLER_^1_%OUT REJECT-*_^1_%RTJ MAKEQ_^1DONE1 RTJ- (ACOMPC)_^1_%JMP* I42312+1_$GO FIND ANOTHER REQUEST_***MSOS 4.1**_^1_%SPC 3_^1*_'THIS ROUTINE €€ STORES HARDWARE STATUS IN PHYSTAB_^1*_'AND EXITS WITH A EQUAL TO THE STATUS_^1_%SPC 3_^1STAT_!NOP 0_^1_%STQ* SAVEQ_^1_%LDQ- CALL,I_^1_%INP REJECT-*_^1_%STA- STATUS,I_^1_%LDQ* SAVEQ_^1_%JMP* (STAT)_^1SAVEQ NUM 0_^1_%SPC 3_^1REJECT JMP* ER5_*INTERNAL REJECT_^1_%ENA EXTREJ_'EXTERNAL REJECT_^1_%JMP* ERROR_^1ER5_"ENA INTREJ_^1ERROR LDQ- LU,I_)PICK UP LU NUMBER_^1_%QLS 6_,SH€€IFT LU NUMBER_^1_%EAQ A_,COMBINE LU NUM WITH ERROR_^1_%STA- SAVE,I_'ERROR CODE_^1_%LDA- BIT14_(SET ERROR INDICATOR_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_^1_%LDQ- CALL,I_^1_%INP 1_,GET STATUS_^1_%NOP 0_^1_%STA- STATUS,I_^1_%ENA 1_,CLEAR PRINTER_^1_%OUT 1_^1_%NOP 0_^1_%RTJ MAKEQ_^1_%ENA -1_+SET DIAGNOSTIC CLOCK NEGATIVE_^1_%STA- TIME,I_^1_%LDQ- SAVE,I_'TAKE ERROR CODE_^1_%LDA- €€DIAGLU,I_$CHECK IF DIAGNOSTIC LU_+**MSOS 4.1**_^1_%SUB- LU,I_^1_%SAZ NOALT_(DO NOT GO TO ALTDEV_^1_%RTJ+ LOG_*LOG ERROR_8**MSOS 4.1**_^1_%JMP ALTDEV_^1NOALT JMP* DONE1_^1_%SPC 3_^1E42312 STQ- I_,TIME OUT ERROR_3**MSOS 4.1**_^1_%ENA TIMERR_'TIME OUT ERROR_^1_%JMP* ERROR_^1_%EJT_]_^1***_$D R I V E R C O N T I N U A T O R E N T R Y_^1_%SPC 3_^1C42312 STQ- I_N**MSOS 4.1**_^1_%E€€NA -1_^1_%STA- TIME,I_'SET DIAG. CLOCK NEGATIVE_^1_%RTJ* STAT_^1_%LDQ- CALL,I_^1_%ENA 2_,CLEAR INTERRUPTS_^1_%OUT REJECT-*_^1_%ENA $20_*CHECK FOR ALARM_^1_%AND- STATUS,I_^1_%SAZ AFALAR_'SKIP IF NOT ALARM_^1_%ENA ALARM_(SET ALARM CODE_^1_%JMP* ERROR_^1_%SPC 3_^1AFALAR LDA- SWITCH,I_^1_%SAP AFA_*SKIP IF NOT MOTION REQUEST_^1_%JMP NXTMCR_'CHECK NEXT MOTION REQ. PARA._$**MSOS €€4.1**_^1AFA_"CLR A_^1_%STA- NUMCHR,I_^1_%ENA FIRST_(IS IT FIRST ENTRY TO CONTINUATOR_^1_%AND- SWITCH,I_^1_%SAZ SET1ST_'YES,SET THE FIRST SWITCH_^1_%JMP* NOT1ST_'NO,_^1SET1ST ENA FIRST_^1_%EOR- SWITCH,I_$SET FIRST SWITCH TO 1_^1_%STA- SWITCH,I_^1_%AND- BIT1_)CHECK IF FORMATTED REQUEST_^1_%SAN FORMAT_'FORMATTED_^1LAB_"STA- SAVE,I_'NO.STORE SUPPRESS SPACE CODE IN SAVE (A=0)_^1_€€%JMP* INIT_^1FORMAT LDA- FTNSW,I_^1_%AND- H00FF_(GET FORTRAN LOGICAL UNIT NUMBER_^1_%SUB- LU,I_)CHECK IF FORTRAN LU_^1_%SAZ FTN_*YES,_^1SINGLE ENA 1_,NO,STORE SINGLE SPACE CODE IN SAVE(A=1)_^1_%JMP* LAB_^1FTN_"RTJ* NXTCHR_'GET FIRST CHARACTER_^1_%INA -$2B_)CHECK FOR +_^1_%SAN NOTPLS_^1_%JMP* LAB_*SUPRESS SPACE_^1NOTPLS INA -5_+CHECK FOR 0_^1_%SAN NOTZRO_^1_%ENA 2_^1_%JMP*€€ LAB_*DOUBLE SPACE_^1NOTZRO INA -1_+CHECK FOR 1_^1_%SAZ ONE_^1_%JMP* SINGLE_^1ONE_"ENA $40_*TOP OF FORM._^1_%JMP* LAB_^1_%SPC 3_^1NOT1ST ENA FINISH_'CHECK IF FINISH SWITCH SET_^1_%AND- SWITCH,I_^1_%SAZ INIT_)NO_^1_%JMP* DONE_)YES_^1_%SPC 3_^1INIT_!LDA- MAXLIN,I_$UPDATE LINE COUNTER_^1_%SAM GO1_*DO NOTHING_^1_%LDA- FTNSW,I_%IS IT FTN LU_^1_%AND- H00FF_^1_%SUB- LU,I_^1_%SAZ €€GO1_*YES,DO NOTHING_^1_%LDA- SAVE,I_^1BACK_!INA -$40_)CHECK FOR PAGE EJECT._^1_%SAN CONT_)NOT PAGE EJECT FUNCTION_^1_%STA- COUNT,I_%CLEAR LINE COUNTER_^1GO1_"JMP* GO_^1CONT_!INA $3F_*CHECK IF SINGLE PACE._^1_%SAZ SEC_^1_%INA -1_+CHECK IF DOUBLE SPACE_^1_%SAN GO_^1_%RAO- COUNT,I_%INCREASE LINE COUNTER TWICE_^1SEC_"RAO- COUNT,I_^1_%LDA- COUNT,I_%CHECK IF BOTTOM OF FORM REA€€CHED_^1_%SUB- MAXLIN,I_^1_%SAM GO_^1_%ENA $40_*TOP OF FORM._^1_%STA- SAVE,I_^1_%JMP* BACK_^1_%SPC 3_^1TOREJ JMP* REJECT_^1_%JMP* REJECT+1_^1GO_#LDA- SAVE,I_^1_%RTJ* SEND_^1LAB7_!LDA- BLANKS,I_$CHECK IF ANY BLANKS TO BE SENT TO BUFFER_^1_%SAZ LAB1_)NO_^1_%ENA $20_*$20 IS THE CODE OF BLANK_^1_%RTJ FILL_^1_%RAO- BLANKS,I_^1_%JMP* LAB7_^1_%SPC 3_^1LAB1_!RTJ* NXTCHR_^1_%INA -$2€€0_)IS IT A SPECIAL CHARACTER_^1_%SAM EDIT_)YES,GO DO SOME EDITING BEFORE SENDING TO BUF_^1_%INQ -$7F_)IF EQUALS_!$7F IGNORE_^1_%SQZ EDIT-1_^1_%INA $20_*NO,SEND THE CHAR.IF IT IS UPPER CASE_^1_%RTJ* FILL_)THE HARDWARE WILL TAKE CARE OF IT._^1_%JMP* LAB1_^1EDIT_!INA 5_,IS IT $1B (ESCAPE)_^1_%SAN TRYCR_(NO, TRY CARRAIAGE RETURN_^1_%JMP* ESCAPE_^1TRYCR INA 14_+IS IT $D (CARR€€IAGE RETURN)_^1_%SAN TRYFF_(NO,TRY FORM FEED_^1_%JMP* LAB9_^1TRYFF INA 1_,IS IT $C (FORM FEED)_^1_%SAN TRYVT_(NO,TRY VERTICAL TAB_^1_%ENA $40_*TOP OF FORM._^1BACK1 STA- SAVE,I_^1_%LDA- NUMCHR,I_^1_%TCA A_,SAVE IN BLANKS THE COMPLEMENT. OF NUMBER_^1_%INA 0_,TAKE CARE WHEN IT IS $FFFF_^1_%STA- BLANKS,I_$OF BLANKS THAT SHOULD BE SENT TO BUFFER_^1_%JMP* LAB2_^1TRYVT INA 1_,€€IS IT A VERTICAL TAB_^1_%SAN TRYTB_(TRY TAB_^1_%ENA $41_*CODE FOR FORMAT LEVEL 2_^1_%JMP* BACK1_^1TRYTB INA 2_,IS IT A TAB_^1_%SAN TRY04_(NO, TRY EOT (04)_^1_%CLR Q_^1_%LDA- NUMCHR,I_^1_%DVI =XTBSTOP_%FIND HOW MANY BLANKS_^1_%INQ -TBSTOP+1_^1_%STQ- BLANKS,I_^1_%JMP* LAB7_^1TRY04 INA 5_^1_%SAN TRY03_^1SETEND LDA- LASTP1,I_$SET POINTERS_^1_%STA- CORE,I_^1LAB9_!ENA 1_,S€€INGLE SPACE_^1_%STA- SAVE,I_^1_%JMP* LAB2_^1TRY03 INA 1_^1_%SAN IGNORE_^1_%JMP* SETEND_^1IGNORE JMP* LAB1_^1***_$THIS ROUTINE IS ENTERED WITH A EQUALS TO THE CHARACTER_^1***_$TO BE OUTPUT TO THE BUFFER_^1_%SPC 3_^1SEND_!NOP 0_^1_%STQ* QSAVE_(SAVE USERS Q-REG_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT TOREJ-*_^1_%LDQ* QSAVE_(RESTORE USERS Q-REG_^1_%JMP* (SEND)_^1QSAVE NUM 0_^1_%SP€€C 3_^1_%SPC 3_^1***_$THIS ROUTINE BRINGS NEXT CHAR.IF END OF BUFFER A JUMP_^1***_$IS MADE TO FIN_".OTHERWISE IT EXIT WITH THE CHARACTER_^1***_$IN 7 LOWER BITS OF A._^1_%SPC 3_^1NXTCHR NOP 0_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_$CHECK IF END OF BUFFER_^1_%SAM OK_+NO,BRING NEXT CHAR_^1_%JMP* SETFIN_'USER BUFFER COMPLETE_^1OK_#ENA UPPER_(BIT 4_^1_%EOR- SWITCH,I_$INVERT THE UPPER/L€€OWER SWITCH_^1_%STA- SWITCH,I_^1_%AND- BIT4_)CHECK IF UPPER_^1_%LDQ- CORE,I_^1_%LDQ- (ZERO),Q_$BRING WORD FROM USERS BUFFER_^1_%SAZ UP_+YES,UPPER_^1_%CLR A_^1_%LLS 8_,UPPER 8 BITS OF Q TO LOWER 8 BITS OF A_^1LOW_"AND- H007F_^1_%TRA Q_^1_%JMP* (NXTCHR)_$EXIT_^1UP_#TRQ A_,TRANSFER WORD TO A_^1_%RAO- CORE,I_'ADVANCE POINTER_^1_%JMP* LOW_^1_%SPC 3_^1ESCAPE RTJ* NXTCHR_^1_%INA €€-$30_)IS IT A $30_^1_%SAP 1_,GREATER THAN $2F_^1_%JMP* LAB1_)IGNORE_^1_%SAN 1_,NO_^1_%JMP* LAB9+1_'YES,GO PRINT (SUPPRESS SPACE)_^1_%INA -1_+IS IT A $31 (SINGLE)_^1_%SAN 1_,NO_^1_%JMP* LAB9_)YES_^1_%INA -1_+IS IT A $32 (DOUBLE)_^1_%SAN 2_,NO_^1_%ENA 2_,YES_^1_%JMP* LAB9+1_^1_%INA -14_*IS IT A $40 (CLEAR PRINTER)_^1_%SAN LSTTRY_^1_%STA- SAVE,I_^1_%STA- BLNKDT,I_^1_%€€JMP* CLRCON_^1LSTTRY INA 1_^1_%SAM 1_^1_%JMP* LAB1_)IGNORE THE CHARACTER_^1_%LDQ- NUMCHR,I_$PREPARE NUMBER OF BLANKS_^1_%TCQ Q_^1_%INQ 0_^1_%STQ- BLANKS,I_^1_%INA $2C_*CODE FOR FORMAT TAPE LEVEL_^1_%JMP* LAB9+1_^1_%SPC 3_^1FIN_"ENA FORMTD_'IS IT FORMATTED_^1_%AND- SWITCH,I_^1_%SAN SETFIN_'YES_^1_%JMP DONE_)NO,DO NOT PRINT_^1SETFIN ENA FINISH_^1_%EOR- SWITCH,I_$SET FINISH €€SWITCH_^1_%STA- SWITCH,I_^1LAB2_!ENA $3A_*CLEAR INT,SELECT EOP,ALARM,PRINT_^1_%LDQ- BLNKDT,I_$IS IT A BLANK LINE_^1_%SQN PRINT_(NO,_^1CLRCON ENA $19_*YES,CLEAR PRINTER,SELECT EOP,ALARM_^1PRINT LDQ- CALL,I_^1_%OUT TOREJ-*_^1_%RTJ STAT_)GET STATUS_^1_%AND- BIT1_)IS PRINTER BUSY_^1_%SAZ NOTBSY_'NO,IT IS NOT BUSY_^1SETCLK ENA INTVAL_'SET DIAGNOSTIC CLOCK_^1_%STA- TIME,I_^1_%JMP€€- (ADISP)_%EXIT TO DISPATCHER.WAIT FOR EOP INT_^1NOTBSY LDQ- BLNKDT,I_$IS IT A BLANK LINE_^1_%SQZ CONT1_(YES_^1_%JMP* SETCLK_'NO, HANDLE THIS LINE NORMALLY_^1CONT1 JMP C42312+1_$GO TO CONTINUATOR_^1*_8THE DRIVER THINK THAT IT GOT EOP INT._^1_%SPC 3_^1***_!- THIS ROUTINE FILLS THE BUFFER,INCREMENT CHARACTER COUNT_^1***_$AND DETECT END OF BUFFER FOR FORMATTED REQUESTS_^1_%SPC €€3_^1FILL_!NOP 0_^1_%TRA Q_^1_%LDA- SWITCH,I_^1_%AND- BIT1_)CHECK IF FORMATTED_^1_%SAZ FILL1_(SKIP IF NOT FORMATTED_^1_%LDA- NUMCHR,I_$CHECK IF NUMBER OF CHARS IS ALREADY_^1_%SUB- LINLEN,I_$EQUAL TO LINLEN (WD 22 OF PHYSTAB)_^1_%SAN FILL1_(NO,_^1_%JMP* LAB2_)GO PRINT BUFFER_^1FILL1 TRQ A_^1_%RTJ* SEND_)SEND CHAR TO BUFFER_^1_%RAO- NUMCHR,I_$INCREASE CHARACTER COUNT_^1_%INA€L -$20_^1_%SAZ 1_^1_%RAO- BLNKDT,I_^1_%JMP* (FILL)_^1_%SPC 3_^1_%END_]_^__LPT5954 CSY/ C45 P€1_%NAM T5954_(DECK-ID C45 MSOS 4.1_-SUMMARY-079_^1*_$594- 4/5 TRAIN IMAGE FOR 1742-120 PRINTER_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_]_^1_%ENT TRAIN_J**MSOS 4.1**_^1*_8SLUG NUMBER_^1TRAIN ALF 2,0123_'01_?**MSOS 4.1**_^1_%ALF 2,4567_+02_^1_%ALF 2,BZ,/_+03_^1_%ALF 2,89AC_+04_^1_%ALF 2,(GH)_+05_^1_%ALF 2,RIFL_+06€€_^1_%ALF 2,MNOP_+07_^1_%ALF 2,[%"]_+08_^1_%ALF 2,DUST_+09_^1_%ALF 2,VWXY_+10_^1_%ALF 2,+-.E_+11_^1_%ALF 2,JKQ*_+12_^1_%ALF 2,0123_+13_^1_%ALF 2,4567_+14_^1_%ALF 2,$@'=_+15_^1_%ALF 2,89AC_+16_^1_%ALF 2,BZ,/_+17_^1_%ALF 2,RIFL_+18_^1_%ALF 2,MNOP_+19_^1_%ALF 2,(GH)_+20_^1_%ALF 2,DUST_+21_^1_%ALF 2,#\^!_+22_^1_%ALF 2,+-.E_+23_^1_%ALF 2,VWXY_+24_^1_%ALF 2,0123_+25_^1_€€%ALF 2,4567_+26_^1_%ALF 2,JKQ*_+27_^1_%ALF 2,89AC_+28_^1_%NUM $263F_,29_^1_%NUM $3C3E_^1_%ALF 2,RIFL_+30_^1_%ALF 2,MNOP_+31_^1_%ALF 2,BZ,/_+32_^1_%ALF 2,DUST_+33_^1_%ALF 2,(GH)_+34_^1_%ALF 2,+-.E_+35_^1_%ALF 2,:;_ =_^1_%ALF 2,0123_+37_^1_%ALF 2,4567_+38_^1_%ALF 2,VWXY_+39_^1_%ALF 2,89AC_+40_^1_%ALF 2,JKQ*_+41_^1_%ALF 2,RIFL_+42_^1_%ALF 2,MNOP_+43_^1_%ALF 2,[%"]_€€+44_^1_%ALF 2,DUST_+45_^1_%ALF 2,BZ,/_+46_^1_%ALF 2,+-.E_+47_^1_%ALF 2,(GH)_+48_^1_%ALF 2,0123_+49_^1_%ALF 2,4567_+50_^1_%ALF 2,$@'=_+51_^1_%ALF 2,89AC_+52_^1_%ALF 2,VWXY_+53_^1_%ALF 2,RIFL_+54_^1_%ALF 2,MNOP_+55_^1_%ALF 2,JKQ*_+56_^1_%ALF 2,DUST_+57_^1_%ALF 2,#\^!_+58_^1_%ALF 2,+-.E_+59_^1_%ALF 2,BZ,/_+60_^1_%ALF 2,0123_+61_^1_%ALF 2,4567_+62_^1_%ALF 2,(GH)_+63_€Μ^1_%ALF 2,89AC_+64_^1_%NUM $263F_,65_^1_%NUM $3C3E_^1_%ALF 2,RIFL_+66_^1_%ALF 2,MNOP_+67_^1_%ALF 2,VWXY_+68_^1_%ALF 2,DUST_+69_^1_%ALF 2,JKQ*_+70_^1_%ALF 2,+-.E_+71_^1_%ALF 2,:;_ =_^1_%END_]_^__ΜPD1777R CSY/ C56 P€1_%NAM D1777R_'DECK-ID C56 MSOS 4.1_-SUMMARY-079_^1*_*1721 AND 1777 PAPER TAPE READER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1*_]_^1*P1777R ADC $520E_(00 SCHEDULER CALL_^1*_%ADC I1777R_'01 INITIATOR ADDRESS_^1*_%ADC C1777R_'02 CONTINUATOR ADDRESS_€€^1*_%ADC E1777R_'03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $00A1_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $2002+T177R_!08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC €€L1777R_'13 DRIVER LENGTH IF MASS MEMORY_^1*_%ADC S1777R_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 CHECKSUM AND ERROR CODE_^1*_%NUM 0_,16 LENGTH_^1*_%NUM 0_,17 RETURN ADDRESS_^1*_%NUM 0_,18 TEMPORARY ADDRESS_^1*_%NUM 0_,19 ERROR CODE_^1*_%NUM 0_,20 TEMPORARY_^1*_%NUM 0_,21 LOST DATA_^1*_%ADC SKPAR_(22 LU OF NON-PARITY PAPER TAPE READER_^1*_%ADC U1777R€€_'23 DIAGNOSTIC LOGICAL UNIT_^1_%SPC 2_^1_%EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^1_%EXT RQAQ_)REQUEST A/Q ALLOCATION_+**MSOS 4.1**_^1_%EXT RLAQ_)RELEASE A/Q ALLOCATION_+**MSOS 4.1**_^1_%EXT MAS300_'EXIT FOR DRIVER_^1_%EXT MAKEQ_^1_%EXT ALTDEV_^1_%ENT I1777R,C1777R,E1777R_;**MSOS 4.1**_^1*_]_^1_%EJT_]_^1*_$PYSTAB EQUATES_^1*_]_^1_%EQU_!INIADR(1)_^1_%EQU_!CONADR(2)_^1_€€%EQU_!ERRADD(3)_^1_%EQU TIME(4)_^1_%EQU LU(5)_^1_%EQU REQAD(6)_^1_%EQU CALL(7)_^1_%EQU ERRTAB(8)_^1_%EQU SWITCH(9)_^1_%EQU CORE(10)_^1_%EQU LASTP1(11)_^1_%EQU STATUS(12)_^1_%EQU CHKSUM(16)_^1_%EQU LENGTH(17)_"LENGTH OF RECORD_^1_%EQU ADDRES(18)_"RETURN ADDRESS_^1_%EQU ERRCOD(19)_"ERROR CODE STORAGE_^1_%EQU TEMP(20)_$TEMP STORAGE FOR WORD BRAKING_^1_%EQU LOSDAT(21)_"F€€LAG FOR DATA THAT IS LOST_^1_%EQU SKPAR(22)_#ASCII READ WITHOUT PARITY LU_^1_%EQU DIAGLU(23)_"DIAGNOSTIC LU_4**MSOS 4.1**_^1_%EQU EOF($1C)_$END-OF-FILE CODE_1**MSOS 4.1**_^1*_]_^1*_$SYSTEM EQUATES_^1*_]_^1_%EQU_!COMPRQ($B6)_%COMPLETE REQUEST_^1_%EQU ONEBIT($23)_^1_%EQU DISP($EA)_^1_%EQU AFNR($B5)_^1*_]_^1*_$ERROR EQUATES_^1*_]_^1_%EQU TIMERR(0) TIME OUT ERROR_^1_%EQU LOSTD€€A(1) LOST DATA ERROR_^1_%EQU ALARM(2)_!ALARM ERROR_^1_%EQU PARERR(3) PARITY ERROR_^1_%EQU CHEKSM(4) CHECKSUM ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1*_]_^1*_$MASKS_^1*_]_^1_%EQU BIT7($2A)_^1_%EQU BIT11($2E)_E**MSOS 4.1**_^1_%EQU BIT14($31)_E**MSOS 4.1**_^1_%EQU BI1415($20)_^1_%EQU INTVAL(1)_^1_%EQU ZERO($22)_^1_%EQU H001F(7)_^1_%E€€QU HFFF0($16)_E**MSOS 4.1**_^1_%EJT_]_^1START STQ- I_"ENTER ADDRESS OF START IN A_^1_%RTJ* *+1_*LOCALIZE, MAY BE CORE RESIDENT_"**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_%LDQ =XE1777R-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- ERRADD,I_!ERROR ADDRESS_^1_%LDQ =XC1777R-START_A**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- CONADR,I CONTINUATOR A€€DDRESS_^1_%LDQ =XI1777R-START_A**MSOS 4.1**_^1_%AAQ A_^1_%STA- INIADR,I_"INITATOR ADDRESS_^1_%JMP* I1777R+1_G**MSOS 4.1**_^1MS300 ADC MAS300_^1_%EJT_]_^1***_"DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I1777R STQ- I_,STORE ADDRESS OF PHYSTAB_)**MSOS 4.1**_^1_%RTJ- (AFNR)_^1_%JMP* (MS300)_^1_%LDQ- REQAD,I_%REQUEST ADDRESS_3*MSOS V4.0_^1_%LDA- (ZERO),Q_H*MSOS V4.0_^1_%ARS 9_O*MSOS V4.0_€€^1_%AND- H001F_(MASK REQUEST CODE_1*MSOS V4.0_^1_%INA -14_*CHECK FOR MOTION REQUEST_**MSOS V4.0_^1_%SAN NOTMC_(SKIP IF NOT MOTION_0*MSOS V4.0_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_*IS THIS A REPETITIVE REQUEST_$**MSOS 4.1**_^1_%SAP P3_+NO_?**MSOS 4.1**_^1_%AND =N$7000_%SAVE ONLY THE MOTION CODE_(**MSOS 4.1**_^1P3_#AND- HFFF0_J**MSOS 4.1**_^1_%ST€€A- TEMP,I_'MOTION CODES_5**MSOS 4.1**_^1TOMOT JMP MOTREQ_'GO PROCESS THE MOTION REQUEST_#**MSOS 4.1**_^1NOTMC RTJ+ RQAQ_)REQUEST A/Q ALLOCATION_+**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%LDQ- CALL,I_^1_%ENA $36_^1_%OUT STCK60-*_^1_%ENA INTVAL_'SET CLOCK COUNT TO 1_^1_%STA- TIME,I_^1_%ENA 0_^1_%STA- CHKSUM,I_$CLEAR_^1_%ENA 1_^1_%STA- LENGTH,I_$LENGTH_^1_%JMP- (DISP)_'EXIT A€€ND WAIT FOR INT_^1_%EJT_]_^1*_]_^1*_$THIS PART IS THE CONTINUATOR_^1*_]_^1C1777R STQ- I_,STORE PHYSTAB ADDR IN I_***MSOS 4.1**_^1_%ENA -1_+RESET TIMER_6**MSOS 4.1**_^1_%STA- TIME,I_^1_%LDQ- CALL,I_'PICK UP CONNECT CODE_^1_%ENA $16_^1_%OUT STCK60-*_%INTERUPPTS CLEARED_^1_%INP STCK60-*_$INPUT STATUS_^1_%TRA Q_,STATUS TO Q FOR FURTHER_^1_%STA- STATUS,I_$STORE STATUS IN PYSTAB_^1€€_%AND- ONEBIT+5_$MASK FOR ALARM_^1_%SAZ STCK20_'NO ALARM NORMAL RETURN_^1_%TRQ A_^1_%AND- ONEBIT+6_$ALARM CK FOR LOST DATA_^1_%SAN STCK30 LOST DATA ERROR RETURN_^1_%JMP STCK40_I**MSOS 4.1**_^1STCK20 STA- LOSDAT,I_G**MSOS 4.1**_^1_%JMP* PTR1_K**MSOS 4.1**_^1STCK30 JMP PTR190_I**MSOS 4.1**_^1PTR1_!LDQ- CALL,I_I**MSOS 4.1_^1_%INQ -1_^1_%ENA 0_^1_%INP STCK60-*_G**MSOS 4.1**_^1€€_%TRA Q_,CHARACTER IN Q_^1_%ENA 2_^1_%AND- SWITCH,I CHECK FOR FORMATTED_^1_%SAN 1_^1_%JMP* PTR090_'NOT FORMATTED_^1_%ENA $10_L**MSOS 4.1**_^1_%AND- SWITCH,I_$IS THIS THE FIRST CHARACTER_%**MSOS 4.1**_^1_%SAN PTR020_'NO_?**MSOS 4.1**_^1_%ENA EOF_L**MSOS 4.1**_^1_%EAQ A_,IS THIS AN E-O-F CHARACTER_'**MSOS 4.1**_^1_%SAN PTR020_'NO_?**MSOS 4.1**_^1_%STA- CORE,I_I**MSOS 4.1**_^€€1_%STA- LASTP1,I_G**MSOS 4.1**_^1_%LDA- BI1415_I**MSOS 4.1**_^1_%EOR- ERRTAB,I_$SET END OF FILE CONDITION_(**MSOS 4.1**_^1_%STA- ERRTAB,I_$IN THE DRIVER STATUS_-**MSOS 4.1**_^1_%JMP* TP290_(COMPLETE THE REQUEST_-**MSOS 4.1**_^1PTR020 ENA 8_N**MSOS 4.1**_^1_%AND- SWITCH,I_!ASC II_^1_%SAZ PTR030_^1_%JMP* PTR080_'FORMATTED ASCII_^1*_]_^1*_$THIS NOW BECOMES FORMATTED BINARY_^1*_]_^1€€PTR030 ENA $10_*1ST CHAR_^1_%AND- SWITCH,I_^1_%SAN PTR050_'NOT 1ST CHARACTER_^1_%LDA- BIT7_^1_%LAQ A_,IS THIS LEADER_^1_%SAN PTR040_^1_%JMP* PTR160_'YES, IGNORE_^1*_]_^1*_$RESET THE 1ST CHARTER SWITCH AND CK TO SEE_^1*_$IF IT IS AN ASTERISK_^1*_]_^1PTR040 ENA $10_^1_%EOR- SWITCH,I_$CHANGE 1ST CHAR BIT_^1_%STA- SWITCH,I_^1_%TRQ A_^1_%SUB =N$AA_(CODE FOR ASTERISK_^1_%SAZ PTR0€€70_'ASTERISK_^1_%SAP 1_,NO GRTR THAN *_^1_%INQ 1_,MAKE PARITY ERROR INVALD CHARATER_^1PTR050 ENA_!$20_!CONTROL CHARACTER_^1_%AND- SWITCH,I_^1_%SAN PTR080_'CONTROL CHARACTER_^1_%LDA- LENGTH,I_$END OF RECORD_^1_%SAN 1_^1_%JMP* PTR100_^1_%ENA LENGTH_'SET ADDRESS_^1_%JMP* PTR110_^1PTR070 LDA- SWITCH,I_$SET ASCII MODE_^1_%INA 8_^1_%STA- SWITCH,I_^1PTR080 LDA- CORE,I_^1_%SUB- LAS€€TP1,I_$CORE EQ LAST+ 1_^1_%SAZ PTR100_^1PTR090 LDA- CORE,I SET ADDRESS TO CURRENT CORE_^1_%JMP* PTR120_^1PTR100 ENA TEMP_)SET DUMMY ADDRES_^1PTR110 ADD- I_^1PTR120 STA- ADDRES,I_^1_%ENA 8_^1_%AND- SWITCH,I_$CHECK FOR ASCII_^1_%SAN PTR133_I**MSOS 4.1**_^1_%JMP* PTR140_I**MSOS 4.1**_^1PTR133 TRQ A_N**MSOS 4.1**_^1_%SPA- TEMP,I_'ODD PARITY_^1_%SAN PTR135_^1_%LDA- LU,I_)ACTIVE L€€OGICAL UNIT_/*MSOS V4.0_^1_%SUB- SKPAR,I_%SKIP PARITY LOGICAL UNIT_**MSOS V4.0_^1_%SAZ PTR135_'SKIP IF NO PARITY ERROR LOG. UNIT *MSOS V4.0_^1_%ENA PARERR_'PARITY ERROR 3_^1_%JMP* TSTC10_'TO ERROR EXIT_5*MSOS V4.0_^1*_]_^1STCK60 JMP* INTRJ_K*MSOS V4.0_^1_%ENA EXTREJ_'EXTERNAL REJECT_3*MSOS V4.0_^1_%JMP* TSTC10_I**MSOS 4.1**_^1INTRJ ENA INTREJ_'INTERNAL REJECT_3*MSOS V4.0_^1_€€%JMP STCD10_I**MSOS 4.1**_^1*_]_^1PTR135 ENA $7F_*STRIP PARITY BIT_^1_%LAQ Q_^1_%ENA 2_,FORMATED_^1_%AND- SWITCH,I_^1PTR140 SAZ PTR180_^1_%TRQ A_^1_%INA -$D_*CARRAGE RETURN_^1_%SAN 1_^1TP290 JMP* PTR290_^1_%SQZ PTR160_'NULL, CANCEL OR LINE FEED_^1_%INA -$72_^1_%SAZ PTR160_^1_%INA $75_^1_%SAN 1_^1PTR160 JMP* PTR270_^1PTR180 LDA- $1A_"PICK UP $FF00 UPPER BITS FOR A_^1€€_%EAQ Q_^1_%ENA 4_^1_%AND- SWITCH,I_$UPPER CHARACTER_^1_%SAN 1_^1_%JMP* PTR230_'YES_^1_%TRQ A_,NO, COMBINE_^1_%LDQ- ADDRES,I_^1_%AND- (ZERO),Q_$OR THE TWO CHARACTERS_^1_%STA- (ZERO),Q_^1_%ADD- CHKSUM,I_^1_%STA- CHKSUM,I_^1_%ENA $A_+FORMATTED BINARY_^1_%AND- SWITCH,I_^1_%INA -2_^1_%SAZ 1_^1_%JMP* PTR240_'NO_^1_%LDA- LENGTH,I_$YES LENGTH_^1_%SAN PTR200_'IS IT ZERO_^1_%LDA- CH€€KSUM,I_^1_%SAZ 2_^1_%ENA CHEKSM_^1_%JMP* TSTC10_'TO ERROR EXIT_5*MSOS V4.0_^1_%ENA 4_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1_%JMP* PTR290_'YES, FINISHED_^1*_]_^1*_$CONTINUATION OF THE REQUEST_^1*_]_^1PTR200 ENA $20_^1_%AND- SWITCH,I_^1_%SAZ PTR210_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_$LAST +1_^1_%SAZ 1_^1_%RAO- CORE,I_'NO INCREMENT CORE_^1_%RAO- LENGTH,I_$DEC LENGTH_^1PTR210 ENA €€ 4_^1_%EOR- SWITCH,I_$REVERSE UPPER AND LOWER_^1_%STA- SWITCH,I_^1_%LDA- LENGTH,I_$END OF RECORD_^1_%SAN PTR220_^1_%ENA -$20_)YES_^1_%AND- SWITCH,I_$CLEAR CONTROL SWITCH BIT_^1_%STA- SWITCH,I_^1_%JMP* PTR270_^1PTR190 ENA LOSTDA_#LOST DATA ERROR 1_^1TSTC10 JMP STCD10_'TO ERROR EXIT ROUTINE_^1*_]_^1* THIS PART IF NOT AT END OF RECORD, SET CONTROL SWITCH_^1*_]_^1PTR220 ENA -$20_^€€1_%AND- SWITCH,I_^1_%INA $20_^1_%STA- SWITCH,I_^1_%JMP* PTR270_^1*_]_^1* THIS PART FOR THE STORAGE OF THE UPPER CHARACTER_^1*_]_^1PTR230 TRQ A_^1_%ALS 8_^1_%LDQ- ADDRES,I_^1_%STA- (ZERO),Q_^1_%JMP* PTR250_^1*_]_^1*_$IF NOT LAST CORE LOCATION INCREMENT CORE_^1*_]_^1PTR240 LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAZ PTR260_^1_%RAO- CORE,I_^1PTR250 LDA- CORE,I_^1_%SUB- LASTP1,I NOW LAS€€T_^1_%SAZ PTR280_'YES_^1*_]_^1* MISC CLEANUP_^1*_]_^1PTR260 ENA 4_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1PTR270 LDQ- CALL,I_^1_%ENA $14_*SET INTERUPTS_^1_%OUT STCK60-*_$SELECT INTERRUPTS_0**MSOS 4.1**_^1_%INP STCK60-*_$STATUS_;**MSOS 4.1**_^1_%STA- STATUS,I_^1_%JMP- (DISP)_^1PTR280 ENA 2_^1_%AND- SWITCH,I_$FORMATTED_^1_%SAZ PTR290_^1_%JMP* PTR260_'YES_^1*_]_^1* THIS PART STO€€PS READER AND COMPLETE THE REQUEST_^1*_]_^1PTR290 LDQ- CALL,I_'PICK UP CONNECT CODE_-**MSOS 4.1**_^1_%ENA_!$42_!CLEAR INTERRUPTS AND STOP MOTION_^1_%OUT_!STCK60-*_^1_%ENA_!-1 INACTIVATE TIMER_^1_%STA- TIME,I_^1_%INP_!STCK60-*_%INPUT STATUS_^1_%LDQ- ERRTAB,I_$WAS AN END-OF-FILE FOUND_)**MSOS 4.1**_^1_%SQP PTR292_'NO_?**MSOS 4.1**_^1_%LDQ- BIT11_(YES, SET E-O-F STATUS_,**MSOS 4.1*€€*_^1_%EAQ A_N**MSOS 4.1**_^1PTR292 STA- STATUS,I_$STORE IT AWAY_4**MSOS 4.1**_^1_%RTJ MAKEQ_^1_%RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_+**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1PTR295 RTJ- (COMPRQ)_G**MSOS 4.1**_^1_%JMP I1777R+1_G**MSOS 4.1**_^1E1777R STQ- I_N**MSOS 4.1**_^1_%ENA TIMERR_^1_%JMP* TSTC10_'TO ERROR EXIT_5*MSOS V4.0_^1*_Z**MSOS 4.1**_^1*_$MOTION REQUEST PROCESSOR_<**MSOS€€ 4.1**_^1*_Z**MSOS 4.1**_^1MOTREQ LDA- TEMP,I_I**MSOS 4.1**_^1_%CLR Q_N**MSOS 4.1**_^1_%LLS 4_,GET NEXT PARAMETER_/**MSOS 4.1**_^1_%SQZ TRMMC_(ZERO PARAMETER TERMINATES RQST_"**MSOS 4.1**_^1_%STA- TEMP,I_I**MSOS 4.1**_^1_%INQ -4_+REWIND-UNLOAD REQUEST_,**MSOS 4.1**_^1_%SQZ TRMMC_(YES, TERMINATE_3**MSOS 4.1**_^1_%JMP* MOTREQ_'NO, GET NEXT PARAMETER_+**MSOS 4.1**_^1TRMMC JMP* P€€TR290_'EXIT_=**MSOS 4.1**_^1_%EJT_]_^1STCK40 ENA ALARM_^1_%JMP* STCD10_^1*_$PROCESS ERRORS_^1*_]_^1STCD10 LDQ- LU,I_)PICK UP LOGICAL UNIT NUMBER_^1_%QLS 6_,SHIFT 6 PLACES_^1_%EAQ A_,OR WITH ERROR CODE_^1_%STA- ERRCOD,I_^1_%LDA- BIT14_(SET ERROR IN ERRTAB_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_$ERROR IN ERRTAB_^1_%RTJ MAKEQ_^1_%LDQ- CALL,I_'PICKUP CONNECT CODE_^1_%INP 1_^1_%STA- S€€TATUS,I_^1_%ENA 1_^1_%OUT 1_^1_%NOP_!0_+CLEAR CONTROLLER_^1_%ENA -1_^1_%STA- TIME,I_'CLEAR TIMER_^1_%RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_+**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%LDQ- ERRCOD,I_^1_%LDA- LU,I_)IF LU = DIAGNOSTIC LU_,**MSOS 4.1**_^1_%SUB- DIAGLU,I_$DON T LOG ERROR_2**MSOS 4.1**_^1_%SAZ NOLOG_J**MSOS 4.1**_^1_%RTJ+ LOG_*LOG THE ERROR IN EF_.**MSOS 4.1**_^1_%JMP+ ALT€4DEV_^1NOLOG JMP* PTR295_I**MSOS 4.1**_^1_%END_]_^__4PD1777P CSY/ C57 P€1_%NAM D1777P_'DECK-ID C57 MSOS 4.1_-SUMMARY-079_^1*_*1723 AND 1777 PAPER TAPE PUNCH DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1*_]_^1*P1777P ADC $520E_(00 SCHEDULER CALL_^1*_%ADC CI77P_(01 INITIATOR ADDRESS_^1*_%ADC CC77P_(02 CONTINUATOR ADDRESS_^1*€€_%ADC CE77P_(03 TIMEOUT ERROR ADDRESS_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LOCATION_^1*_%NUM $00C1_(07 CONVERTER, EQUIPMENT, STATION_^1*_%ADC $2004+T177P_!08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%ADC L177€€7P_'13 DRIVER LENGTH IF MASS MEMORY_^1*_%ADC S1777P_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 CHECKSUM AND ERROR CODE_^1*_%NUM 0_,16 TEMPORARY_^1*_%NUM 0_,17 RETURN ADDRESS_^1*_%NUM 0_,18 TEMPORARY ADDRESS_^1*_%NUM 0_,19 ERROR CODE_^1*_%NUM 0_,20 TEMPORARY_^1*_%NUM 0_,21 LOST DATA_^1*_%ADC U1777P_'22 DIAGNOSTIC LOGICAL UNIT_^1_%SPC 2_^1*_]_^1*_$EXTER€€NAL PROGRAMS_^1*_]_^1_%ENT I1777P,C1777P,E1777P_;**MSOS 4.1**_^1_%EXT MAS300_^1_%EXT MAKEQ_^1_%EXT ALTDEV_^1_%EQU ONEBIT($23)_^1_%EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^1_%EXT RLAQ_)RELEASE A/Q ALLOCATION_+**MSOS 4.1**_^1_%EXT RQAQ_)REQUEST A/Q ALLOCATION_+**MSOS 4.1**_^1_%EJT_]_^1*_$PYSTAB EQUATES_^1*_]_^1_%EQU INIADR(1)_^1_%EQU CONADR(2)_^1_%EQU ERRADD(3)_^1_%EQU €€ TIME(4)_^1_%EQU LU(5)_^1_%EQU REQAD(6)_!REQUEST ADDRESS_^1_%EQU CALL(7)_^1_%EQU ERRTAB(8)_^1_%EQU SWITCH(9)_^1_%EQU CORE(10)_^1_%EQU LASTP1(11)_^1_%EQU STATUS(12) HARDWARE STATUS_^1_%EQU CHKSUM(16) CHECKSUM_^1_%EQU LENGTH(17) RECOR LENGTH_^1_%EQU ERRCOD(19) ERROR CODE_^1_%EQU TEMP(20)_!TEMP. STORAGE_^1_%EQU TMPWRD(20) MOTION REQUEST PARAMETERS_^1_%EQU LOSDAT(21) FLAG€€ FOR LOST DATA_^1_%EQU DIAGLU(22)_"DIAGNOSTIC LU_4**MSOS 4.1**_^1_%SPC 2_^1*_$SYSTEM EQUATES_^1*_]_^1_%EQU BIT2($25)_^1_%EQU COMPRQ($B6)_^1_%EQU AFNR($B5)_^1_%EQU DISP($EA)_#DISPATCHER_^1_%EQU BIT5($28),BIT7($2A),BIT8($2B)_^1_%EQU M007F($9)_#$007F MASK_7**MSOS 4.1**_^1_%EQU HFFF0($16)_^1_%EQU H001F(7)_^1_%EQU LDLNG(60) LEADER LENGTH (6 INCHES)_^1_%EQU EOFCOD($1C)_!END-OF€€-FILE CODE_1**MSOS 4.1**_^1_%EQU BIT14($20),BIT15($21)_^1_%EQU T1777(37)_#1777 PUNCH TAPE CODE_-**MSOS 4.1**_^1_%EQU ZERO($22)_^1_%EQU INTVAL(2)_^1*_]_^1*_$ERROR EQUATES_^1*_]_^1_%EQU TIMERR(0) TIME OUT ERROR_^1_%EQU ALARM(2)_!ALARM ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1_%EQU PUNERR(30) VALIDATION ERROR_^1_%EJT_]_^1START STQ- I ENTE€€R ADDRESS OF START IN A_^1_%LDQ =XE1777P-START_B**MSOS 4.1*_^1_%AAQ Q_^1_%STQ- ERRADD,I_!ERROR ADDRESS_^1_%LDQ =XC1777P-START_B**MSOS 4.1*_^1_%AAQ Q_^1_%STQ- CONADR,I CONTINUATOR ADDRESS_^1_%LDQ =XI1777P-START_B**MSOS 4.1*_^1_%AAQ A_^1_%STA- INIADR,I_!INITATOR ADDRESS_^1_%JMP* I1777P+1_H**MSOS 4.1*_^1MS300 ADC MAS300_^1CRLF_!NUM $0D0A_(CARRAGE RETURN LINE FEED_^1B6A7_!NUM €€ $C0_^1*_]_^1*_]_^1*_]_^1_%EJT_]_^1***_"DRIVER INITATOR ENTRY_^1_%SPC 2_^1I1777P STQ- I_,STORE ADDRESS OF PHSTAB_+**MSOS 4.1*_^1_%RTJ- (AFNR)_'FIND NEXT REQUEST_^1_%JMP* (MS300)_^1_%LDQ- REQAD,I_I*MSOS V4.0_^1_%LDA- (ZERO),Q_$CHECK REQUEST CODE_0*MSOS V4.0_^1_%ARS 9_O*MSOS V4.0_^1_%AND- H001F_K*MSOS V4.0_^1_%INA -14_'FOR MOTION REQUEST_3*MSOS V4.0_^1_%SAN NOTMC_$SKIP IF NOT MOT€€ION_3*MSOS V4.0_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_%LDA- 4,Q_'PICKUP PARAMETER STRING_.*MSOS V4.0_^1_%SAP P3-*-1_#SKIP IF NOT ITER. TYPE_/*MSOS V4.0_^1_%AND =N$7000_"GET ONLY PARA._7*MSOS V4.0_^1P3_#AND- HFFF0_$GET THREE PARA,S_5*MSOS V4.0_^1_%STA- TMPWRD,I_!SAVE PARA. STRING_4*MSOS V4.0_^1_%RTJ+ RQAQ_)REQUEST A/Q ALLOCATION_,**MSOS 4.1*_^1_%STQ- I_O**MS€€OS 4.1*_^1_%JMP MOTREQ_#PROCESS MOTION REQUEST_/*MSOS V4.0_^1NOTMC RTJ+ RQAQ_)REQUEST A/Q ALLOCATION_+**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%LDQ- CALL,I_I**MSOS 4.1**_^1_%ENA $36_^1_%OUT STCK60-*_^1_%ENA INTVAL_'SET CLOCK COUNT TO 1_^1_%STA- TIME,I_^1_%ENA 0_^1_%STA- CHKSUM,I_$CLEAR CHECK SUM_^1_%JMP- (DISP)_^1_%EJT_]_^1***_"DRIVER CONTINUATOR ENTRY_^1_%SPC 2_^1C1777P STQ€€- I_,CONTINUATOR_7**MSOS 4.1*_^1_%LDQ- CALL,I_'PICK UP CONNECT CODE_^1_%INP STCK60-*_$INPUT STATUS_^1_%STA- STATUS,I_$STORE STATUS IN PYSTAB_^1_%ENA $16_*CLEAR/SELECT INTERRUPTS_-57*1172_^1_%OUT STCK60-*_J57*1172_^1_%LDA- STATUS,I_J57*1172_^1_%TRA Q_Q57*1172_^1_%AND- ONEBIT+6_$CHECK FOR VAL ERROR_157*1172_^1_%SAZ STCK15_'OR LOST DATA SKIP IF NO_***MSOS 4.1**_^1_%JMP PTP500_I*€€*MSOS 4.1**_^1STCK15 TRQ A_N**MSOS 4.1**_^1_%AND- ONEBIT+5_$MASK FOR ALARM_^1_%SAZ STCK20_'NO ALARM NORMAL RETURN_^1_%JMP STCK40_^1STCK20 STA- LOSDAT,I_G**MSOS 4.1**_^1_%LDA- SWITCH,I_^1_%SAP C1_^1_%JMP MOTRTN_^1C1_#AND- BIT5_%CHECK FOR CONTROL SWITCH SET_)*MSOS V4.0_^1_%SAZ PTP010_'NO_^1_%ENA -$20_^1_%AND- SWITCH,I_$RESET_^1_%STA- SWITCH,I_^1_%ENQ $A SEND LINE FEED CHARAC€€TER_^1_%JMP* PTP038_^1PTP010 LDA- BIT8_)COMP SWITCH_^1_%AND- SWITCH,I_$SWITCH SET_^1_%SAZ PTP020_'NO IT'S NOT CONTINUE_^1PTP015 LDQ- CALL,I_'PICK UP CONNECT CODE_-**MSOS 4.1**_^1_%ENA_!$42_!CLEAR INTERRUPTS AND STOP MOTION_^1_%OUT_!STCK60-*_^1_%ENA_!-1 INACTIVATE TIMER_^1_%STA- TIME,I_^1_%INP_!STCK60-*_%INPUT STATUS_^1_%STA- STATUS,I_!STORE IT AWAY_^1_%RTJ+ RLAQ_)RELEASE A/Q AL€€LOCATION_+**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%RTJ MAKEQ_^1PTP017 RTJ- (COMPRQ)_H**MSOS 4.1*_^1_%JMP* I1777P+1_H**MSOS 4.1*_^1PTP020 LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%TRA Q_,PUT LENGTH IN Q_^1_%ARS 8_^1_%INA -$2A_)LENGTH= *_^1_%SAN PTP030_^1_%ADQ =N$FEEF_%YES, ADD $100_^1PTP030 ENA 2_^1_%AND- SWITCH,I_$FORMATTED_^1_%SAN PTP035_'YES_^1_%JMP* PTP070_'NO_^1PTP035 ENA 8_^€€1_%AND- SWITCH,I_$ASCII_^1_%SAZ PTP050_'BINARY_^1_%LDA* B6A7_"ASCII, ANY SPACE CHAR TO SEND_^1_%AND- SWITCH,I_^1_%SAZ PTP040_'NO, SPACERS_^1_%LDA- SWITCH,I_$YES,DECREMENT_^1_%INA -$40_)SPACE COUNTER_767*1488_^1_%STA- SWITCH,I_^1_%ENQ $7F_^1PTP038 RTJ* PTP400_^1_%JMP* PTP300_^1PTP040 SQN PTP070_'END OF RECORD_^1_%LDQ* CRLF_)YES, SEND C.R._^1_%JMP* PTP080_^1PTP050 SQN PTP060_'E€€ND OF RECORD_^1_%LDQ- CHKSUM,I_$YES, SEND COMPL OF LENGTH_^1_%TCQ Q_^1_%JMP* PTP080_^1PTP060 ENA $10_*1ST WORD_^1_%AND- SWITCH,I_^1_%SAZ PTP080_'YES,PUNCH LENGTH_^1PTP070 LDQ- CORE,I_^1_%LDQ- (ZERO),Q_^1PTP080 ENA 4_^1_%AND- SWITCH,I_^1_%SAN PTP090_'LOWER_^1_%QRS 8_^1_%JMP* PTP100_'UPPER_^1PTP090 TRQ A_^1_%ADD- CHKSUM,I_^1_%STA- CHKSUM,I_^1PTP100 ENA 8_,BINARY MODE_^1_%AND-€€ SWITCH,I_^1_%SAN PTP105_^1_%JMP* PTP160_'YES BINARY MODE_^1PTP105 ENA $7F_"STRIP HIGH ORDER BITS_^1_%LAQ Q_^1_%ENA 2_^1_%AND- SWITCH,I_$FORMATTED_^1_%SAZ PTP140_^1_%TRQ A_,YES_^1_%INA -$D_*CAR. RETURN_^1_%SAN PTP110_'NOT CAR RETURN_^1_%ENA $20_*YES SET CONTROL SWITCH_^1_%JMP* PTP130_^1PTP110 INA 1_^1_%SAZ PTP120_'TAB_^1_%INA 1_^1_%SAZ PTP120_'TAB AGAIN OR FORM OUT_^1_€€%INA 2_^1_%SAN PTP140_'ITS ASCII_^1PTP120 LDA B6A7_)SET SPACER CT._^1PTP130 EOR- SWITCH,I_$SET SWITCH_^1_%STA- SWITCH,I_^1PTP140 RTJ* PTP400_^1_%JMP* PTP200_^1*_]_^1STCK60 JMP* ST61_^1_%ENA EXTREJ_'EXTERNAL REJECT 6_^1_%JMP* STCD10_^1ST61_!ENA INTREJ_'INTERNAL REJECT 5_^1_%JMP STCD10_I**MSOS 4.1**_^1*_]_^1PTP160 TRQ A_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT STCK60-*_H**MSOS 4.1€€*_^1_%JMP* PTP200_^1*_$THIS PART OF THE PROGRAM REVERSES THE UPPER_^1*_$AND LOWER SWITCH CHECKS FOR FIRST CHARACTER_^1*_$OR LAST WORD ADDRESS + 1_^1PTP200 LDA- LASTP1,I_^1_%SUB- CORE,I_^1_%TRA Q_,PUT REMAIN LENGTH IN Q_^1_%ENA 4_^1_%EOR- SWITCH,I_$REVERSE UPPER + LOWER_^1_%STA- SWITCH,I_^1_%AND- BIT2_^1_%SAZ PTP210_'LOWER_^1_%ENA $10_^1_%AND- SWITCH,I_^1_%SAN PTP205_'FIRST CHA€€RACTER YES_^1_%SQZ PTP220_'LAST WORD_^1PTP205 JMP* PTP300_^1PTP210 SQZ PTP220_'DONE_^1_%ENA $1A_*FORMATTED BINARY_^1_%AND- SWITCH,I_^1_%INA -2_^1_%SAZ PTP230_'FIRST CHAR_^1_%RAO- CORE,I_'NO INC CORE_^1_%INQ -1_^1_%SQN PTP300_'LAST_^1_%ENA 2_,YES IT'S LAST_^1_%AND- SWITCH,I_$FORMATTED_^1_%SAN PTP300_^1PTP220 LDA- BIT8_)NO SET COMPL SWITCH_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,€€I_^1_%JMP* PTP300_^1PTP230 ENA $10_^1_%EOR- SWITCH,I_$RESET 1ST CHAR SWITCH_^1_%STA- SWITCH,I_^1_%EJT_]_^1*_]_^1*_$THIS PART OF THE PROGRAM GETS LATEST STATUS_^1*_$AND THEN GOES TO DISPATCHER_^1*_]_^1*_]_^1PTP300 ENA INTVAL_^1_%STA- TIME,I_^1_%JMP- (DISP)_'DISPATCHER EXIT_^1_%SPC 2_^1*_$PUNCH LEADER / MOTION REQUEST_^1_%SPC 2_^1PLEAD CLR A_O*MSOS V4.0_^1_%LDQ- CALL,I_J*MSOS V€€4.0_^1_%INQ -1_N*MSOS V4.0_^1_%OUT STCK60-*_H**MSOS 4.1*_^1_%JMP* PTP300_J*MSOS V4.0_^1*_]_^1*_$THIS PART OF THE PROGRAM CKS PARITY AND OUTPUTS_^1*_]_^1*_]_^1PTP400 NOP_]_^1_%TRQ A_^1_%SPA- TEMP,I_^1_%SAN PTP410_'PARITY OK SKIP_^1_%LDA- BIT7_^1_%EAQ Q_^1PTP410 TRQ A_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT STCK60-*_H**MSOS 4.1*_^1_%JMP* (PTP400)_^1_%EJT_]_^1*_]_^1*_$THIS PART REP€€UNCHES THE BAD CHARACTER_^1*_]_^1*_]_^1PTP500 LDA- ERRTAB,I_$LOOK AT TYPE CODE_1**MSOS 4.1*_^1_%ARS 4_,1723 HAS NO VALIDATION LOGIC_%**MSOS 4.1*_^1_%AND- M007F_(1777 HAS NO VALIDATION LOGIC_$**MSOS 4.1**_^1_%INA -T1777_I**MSOS 4.1**_^1_%SAZ IS1777_'SKIP IF 1777_5**MSOS 4.1**_^1_%ENA PUNERR_'PUNCH ERROR 30_3**MSOS 4.1**_^1_%JMP* TSTC10_#TO ERROR EXIT_8*MSOS V4.0_^1IS1777 LDA- LO€€SDAT,I_H**MSOS 4.1*_^1_%SAZ PTP510_^1_%ENA PUNERR_'VALIDATION ERROR 30_^1_%JMP* TSTC10_#TO ERROR EXIT_8*MSOS V4.0_^1PTP510 LDQ- TEMP,I_^1_%RAO- LOSDAT,I_$SET LOSDAT FLAG_^1_%ENA 8_^1_%AND- SWITCH,I_^1_%SAZ PTP520_"SKIP IF BINARY_^1_%RTJ* PTP400_!SEND ASCII CHARACTER_^1_%JMP* PTP300_'EXIT_^1PTP520 TRQ A_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%OUT STCK60-*_G**MSOS 4.1**_^1_%JMP* PTP300€€_^1E1777P STQ- I_,ERROR_<**MSOS 4.1**_^1_%ENA TIMERR_'TIME OUT ERROR 0_^1TSTC10 JMP STCD10_#TO ERROR ROUTINE_5*MSOS V4.0_^1_%EJT_]_^1STCK40 ENA ALARM_^1_%JMP* STCD10_^1*_$THIS PART PROCESSES ALL ERRORS EXCEPT LOST DATA_^1*_]_^1STCD10 LDQ- LU,I_)PICK UP LOGICAL UNIT NUMBER_^1_%QLS 6_,SHIFT 6 PLACES_^1_%EAQ A_,OR WITH ERROR CODE_^1_%STA- ERRCOD,I_^1_%LDA- BIT14_(SET ERROR IN ERR€€TAB_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_$ERROR IN ERRTAB_^1_%RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_+**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%RTJ MAKEQ_^1_%LDQ- CALL,I_'PICKUP CONNECT CODE_^1_%INP 1_^1_%STA- STATUS,I_^1_%ENA 1_^1_%OUT 1_^1_%NOP_!0_+CLEAR CONTROLLER_^1_%ENA -1_^1_%STA- TIME,I_'CLEAR TIMER_^1_%LDQ- ERRCOD,I_^1_%LDA- LU,I_)SKIP FAILURES LOG_0**MSOS 4.1**_^1_%SUB- DIA€€GLU,I_$IF DIAGNOSTIC LU_1**MSOS 4.1**_^1_%SAZ NOLOG_J**MSOS 4.1**_^1_%RTJ+ LOG_*LOG ERROR_8**MSOS 4.1**_^1_%JMP+ ALTDEV_^1NOLOG JMP PTP017_I**MSOS 4.1**_^1_%EJT_]_^1***_"PROCESS MOTION REQUEST_^1_%SPC 2_^1NXTMCR LDA- SWITCH,I_^1_%EOR- BIT15_^1_%STA- SWITCH,I_^1_%SPC 2_^1MOTREQ LDA- TMPWRD,I_!GET PARAMETER STRING_^1_%CLR Q_^1_%LLS 4_)GET ONE PARAMETER_^1_%SQZ TRMMC_$SKIP IF €€PARA. ZERO_^1_%STA- TMPWRD,I_!SAVE REMAINDER OF STRING_^1_%INQ -2_(CHECK IF WEOF (LEADER)_^1_%SAZ LEADER_#SKIP IF WEOF_^1_%INQ -2_(CHECK IF REWIND/UNLOAD_^1_%SQZ TRMMC_$SKIP IF YES_^1_%JMP* MOTREQ_#CHECK NEXT PARAMETER_^1TRMMC JMP PTP015_'TERMINATE MOTION REQUEST_**MSOS V4.0_^1_%SPC 2_^1LEADER LDA- SWITCH,I_^1_%EOR- BIT15_^1_%STA- SWITCH,I_^1_%ENA LDLNG_$60 FRAMES = 6 INCH€€ES_^1_%STA- LENGTH,I_^1_%JMP NOTMC_$SETUP INT'S - EXIT_3*MSOS V4.0_^1_%SPC 2_^1MOTRTN LDA- LENGTH,I_!CHECK IF LEADER PUNCH_0*MSOS V4.0_^1_%SAZ GOT6_%IS DONE_^1_%TRA Q_N**MSOS 4.1**_^1_%INQ -LDLNG_I**MSOS 4.1**_^1_%INA -1_(UPDATE COUNT_^1_%STA- LENGTH,I_^1_%SQZ EOF_*START OF LEADER - PUNCH EOF_%**MSOS 4.1**_^1_%JMP* PLEAD_(PUNCH LEADER_6*MSOS V4.0_^1GOT6_!JMP* NXTMCR_#PROCESS€€ NEXT PARAMETER_/*MSOS V4.0_^1EOF_"ENA EOFCOD_I**MSOS 4.1**_^1_%JMP* PLEAD+1_%GO PUNCH THE EOF CODE_,**MSOS 4.1**_^1_%END_]_^__€PD1738 CSY/ C08 P€1_%NAM D1738_(DECK-ID C08 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 AD€€DRESS_^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_,1€€4 DATA TRANSFER FUNCTION_^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 P17381_'22 PHYSTB THRAD_^1*_%ADC U17380_'23 DIAGNOST€€IC LU_^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_%E€€XT 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)_'LOGI€€CAL 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 H€€3FFF(LPMSK+14),H1FFF(LPMSK+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_(**MSO€€S4.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 NORMAL-*-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 ADDRESS_$**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*_]_^1U€€SEOWN RTJ- (ACOMPC)_$COMPLETION 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 IF 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* WRIT€€OP_'SAVE RETURN ADDRESS IN 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_%SAN GTZERO_'SKIP IF LSB IS GT ZERO_,**MSOS4.0**_^1_%ENQ ZROER_J**MSOS 4.1**_^1_%JMP DET3_L**MSOS4.0**_^1GTZERO INA 4_,BIAS FOR AOUTLOAD_0**MSOS €€4.1**_^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 NUMBER_!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_%L€€DA- 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$300_'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_,D€€IRECTOR 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 CO€€MMANDS_^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_%L€€DA- 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 PORTION 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, INTERRUPT 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*_8AGAINST 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_%OUT 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* 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 I€€N 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_%LOAD 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*13€€73_^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_%EIN 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 STATUS_^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_)**MSOS4.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_%LDQ- CKWDER_'CHECKWORD ERROR_!(ERROR 20)_#**MSOS 4.1**_^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_)UPPER 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_^1€€TEMLWD 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 NUMBE€€R (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_'TRANSFER 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 DEV€€ICE 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)_$EQUIPME€€NT CODE = 3_^1*P1751 NUM $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),ZROBIT($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),READC(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 CODE_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* TE€€MREQ_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_*I€€NITIAL 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- SECTOR,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 FORM€€AT WRITE_^1_%SPC 1_^1TS_#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_%LRS 1_^1_%DVI =N96_^1_%SAZ NOBIA1_^1_%INA 4_-BIAS SECTOR NUMBER BY 4 IF N€€OT ZERO_^1NOBIA1 STQ* TEMPWD_^1_%MUI =N96_*CONVERT BACK TO WORD FORM_^1_%ADD* TEMPWD_^1_%JMP* DRMA1_^1FRW_"LDA- SECTOR,I_%GET DISK SECTOR ADDRESS_^1_%SAZ NOBIA2_^1_%INA 4_-BIAS BY 4 IF SECTOR NUMBER NOT ZERO_^1NOBIA2 MUI =N96_*CONVERT TO DRUM WORD ADDRESS_^1DRMA1 LLS 5_-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 FORMAT WRITE_^1_%JMP* SAVWR_^1_%SPC 1_^1TEMPWD NUM 0_-TEMP STORAGE_^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 SCHEDULER 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 SEQU€€ENCE_^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 ERROR, 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 BACK VIA INTERRUPT FROM THE DRUM._^1_%SPC 2_^1E1751 EQU E1751(*)_$ERROR TIME OUT_"RY_-**MSOS 4.1**_^1C1751 STQ- I_,CONTIN€€UATOR, 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 TIMING 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 ERR€€OR 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 ERROR 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 ADDRESS IS IN READ AREA._^1*_*AND AN ERROR OCCURRED,CALL DIAGNOSTIC(8,C)_^1_%LDA- ESTAT1,I_^1_%SAM 1_^1_%JMP* NOERR_(NO ERR€€OR 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$3E€€00_%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_'INTER€€NAL 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 ERRO€€RS_^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* ERRCNT_'INCREMENT ERROR COUNTER_^1_%LDA* STATUS_'PUT STATUS INTO TABLE._^1_%STA- ESTAT2,I_^1_%ENQ 40_(LESS THAN MAXERR ATTEMP€€TS_,*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 ROUTINE_^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 CONTINUE_^1BZS96 BZS BZS96(96)_#96 WORD BLOCK OF ZEROS FOR DISK SIMULATION_^1_%END_]_^__\PD1752 CSY/ C11 P€1_%NAM D1752_(DECK-ID C11 MSOS 4.1_-SUMMARY-079_^1*_$1752 DRIVER MSOS 4.1_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT I1752,C1752,E1752_>**MSOS 4.1**_^1_%EQU ANFNR($B5)_"($B5)= ADDRESS OF FIND NEXT REQUEST ROUTINE_^1_%EQU ACOMP($B6)_"($B6)= ADDR€€ESS OF COMPLE3E REQUEST ROUTINE_^1_%EQU AZERO($22)_"($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($22)_^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)_%INTER€€NAL 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_%EJT_]_^1I1752 STQ- I_,INITIATOR, PDT ADDRESS TO --I--_!**MSOS 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 SIGNS AR€€E 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_%RTJ- (ACABS)_%ABSOLUTIZE_^1************** THIS IS A DIRECTORY READ REQUE€€ST_!*********************_^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€€ READ 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 WO€€RD $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- ER€€ETN,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_%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 WH€€Y BAD_^1DOAG_!ENA EOALIN_^1_%RTJ* OUT_*ENABLE EOP AND ALARM INTERRUPT_^1_%LDA- ESN,I_(PICK UP REQUESTED DRUM ADDRESS_^1_%SAZ NOBIAD_^1_%INA 4_-BIAS SECTOR NUMBER BY 4 IF NOT ZERO_^1NOBIAD 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 T€€RACK,_^1DO1_"INA -1_+LOAD SECTOR 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- ECC€€OR,I_%GET FWA_^1_%RTJ* OUT_*LOAD 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 REQU€€EST STATUS WORD_^1_%AND- ZROBIT+14_^1_%EOR- ONEBIT+14_#SET I/O HANGUP BIT IN WORD 8 OF PHYSTAB_^1_%STA- EREQST,I_^1_%STQ- OVCA,I_'STORE ABSOLUTE RETURN ADDRESS_^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 A€€DDRESS_^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_**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_%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 NOTSK€€P_'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_+DECREMENT 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 **MSOS4.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_!TPM3-*-1_^1_%LDA- $FF_*SAVE UNIT NO. IN SAVI_^1_%STA SAVEI_K**MSOS4.0**_^1_%JMP* DYNSTA_^1_%SPC_!1_^1TP€€M3_!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_662*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* SKPFLG_'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_%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 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**_^1TAPC01 LDQ- WES,I_)CL€€EAR 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 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 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 RE€€DIE(*)_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* NOREA€€D_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**MSOS4.0**_^1_%LDA BUFFWA_'SET UP SNR CHECK_2**MSOS4.0**_^1_%STA SNRAD_K**MSOS4.0**_^1_%LDA* TERFV4_J**MSOS4.0**_^1_%RTJ SNRCV4_'CHECK FOR SNR_5**MSOS4.0**_^1€€_%JMP* NOTSNR_'NOT A SNR_9**MSOS4.0**_^1_%LDA SAVLV4_'RESTORE ORG LWA._^1_%STA BUFLWA_J**MSOS4.0**_^1_%JMP IOXFER_J**MSOS4.0**_^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**MSOS€€4.0**_^1_%SUB $11_M**MSOS4.0**_^1_%SAZ REVR1_K**MSOS4.0**_^1REVR_!RTJ RECVTB_J**MSOS4.0**_^1REVR1 LDA* 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**MSO€€S4.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- S€€TS,I_K**MSOS4.0**_^1_%LDQ- WES,I_(DIRECTOR ONE_6**MSOS4.0**_^1_%INP BUFREJ-*_H**MSOS4.0**_^1_%AND- LOWBTS+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_^1EOTFLG NUM 0_^1EOTCHK NUM 0_,RETURN EXIT_^1_%STA* ASVIT_^1_%STQ* QSVIT_^1_%LDA* EOTFLG_^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_'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- SYS€€T,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_%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 LOGERR_'TEST FOR DIA€€G. LU, NO ALTDEV IF SAME_^1_%LDA- (I)_*GET REQUEST CODE/PRIORITY_^1_%STA* ALTRC_^1_%RTJ- ($F4)_(MONI CALL_^1ALTRC ADC *-*_*SCHEDULE ALTDEV SO WE CALL RETAIN_^1_%ADC ALTDEV_'CONTROL TO PROCESS OTHER UNITS_^1LOGERR RTJ+ LOG_*GO LOG ERROR_^1_%JMP* SEARCH_^1_%SPC 1_^1CONTIU 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_%EO€€R- 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* 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_%JMP+ MAS300_'RELEASE DRIVERS BUFFER_+**MSOS 4.1**_^1_%SPC 2_^1OVER1 LDA- SYST,I_^1_%AND- ONEBIT+14_^1_%SAZ 1_^1_%JMP* RELFB_^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*_[**MSOS4.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**MSOS4.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**MSOS4.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_%S€€AP 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- (DISP)_^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**_^1NOISC€K 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 0_O**MSOS4.0**_^1BUFFER BSS BUFFER(SIZE)_D**MSOS4.0**_^1_%END_]_^__PFRWAB CSY/ C39 P€1_%NAM FRWAB_(DECK-ID C39 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 BUFFERED 601 MAG TAPE DRIVER REV.1_)**MSOS4.0**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT FRWAB_^1_%EXT* BUFLWA,SAVLV4_C**MSOS4.0**_^1_%EXT* BUFFWA_J**MSOS4.0**_^1_%EXT* NRMRTB_J**MS€€OS4.0**_^1_%EXT* PREPV4,ENRIV4_C**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%EQU LPMSK(2)_^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_^1FRWAB LDA- FWA,I_K**MSOS4.0**_^1_%STA* CORE_^1_%STA* CORADR_^1_%LDA- LWA,I_$LAST ADDRESS + 1_^1_%STA* LAST_^1_%RTJ* FRAABS_J**MSOS4.0**_^1FRAABS NUM 0_O**MSOS4.0**_^1_%LDA =XINFRWA-FRAABS_A**MSOS4.0**_^1_%ADD* FRAABS_J**MSOS4.0**_^1_%STA- MODRTN,I_H**MSOS4.0**_^1_%LDA- I_^1_%STA* SAVE_^1_%LDA SAVLV4_J**MSOS4.0**_^1_%ALS 1_O**MSOS4.0**_^1_%ADD BUFFWA_J**MSOS4.0**_^1_€€%INA 1_O**MSOS4.0**_^1_%STA BUFLWA_J**MSOS4.0**_^1_%ENA_!1_)EXTRACT_^1_%AND- RQST,I_$WR/RD BIT (0)_^1_%SAN EXHAIL_J**MSOS4.0**_^1EXTIO ENQ 1_O**MSOS4.0**_^1_%JMP PREPV4_'GO PREPARE IO._4**MSOS4.0**_^1EXHAIL STA* SAVEIX_J**MSOS4.0**_^1_%RTJ ENRIV4_J**MSOS4.0**_^1_%RTJ* PKBUFF_'PACK OUTPUT BUFFER_0**MSOS4.0**_^1_%LDA* SAVEIX_J**MSOS4.0**_^1_%JMP* EXTIO_K**MSOS4.0**_^1_%SPC_!2€€_^1*****************************************************_^1_%SPC_!1_^1INFRWA NOP_!0_)ENTER HERE FROM EPROC_^1_%SUB BUFFWA_'BUFF-1 FROM IT, THEN_^1_%ENQ 0_O**MSOS4.0**_^1_%DVI- $24_($2_^1_%ADD* CORADR_^1_%STA* NXTLOC_^1_%JMP* EXORIN_J**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1SAVEIX NUM 0_O**MSOS4.0**_^1SAVE_!NUM 0_^1CORE_!NUM€€_!0_^1LAST_!NUM_!0_^1TEMP_!NUM_!0_^1SAVEI NUM_!0_^1NXTLOC NUM_!0_^1CORADR NUM_!0_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1FINICH LDA* NXTLOC_J**MSOS4.0**_^1_%JMP NRMRTB_J**MSOS4.0**_^1EXORIN ENA 1_O**MSOS4.0**_^1_%AND- RQST,I_J**MSOS4.0**_^1_%SAZ UNPAK_K**MSOS4.0**_^1_%JMP* FINICH_J**MSOS4.0**_^1********************************************€€*********_^1_%SPC_!1_^1* THE FOLLOWING CODE UNPACKS THE BUFFER AFTER_^1* A BUFFERED READ._^1UNPAK LDQ BUFFWA_J**MSOS4.0**_^1_%STQ* SAVEI_^1UA_#LDQ* (SAVEI)_^1_%LDA* TABLE,Q_^1_%ARS_!8_^1_%STA* TEMP_^1_%RAO* SAVEI_^1_%LDQ* (SAVEI)_^1_%LDA* TABLE,Q_^1_%LDQ* TEMP_^1_%LRS_!8_^1_%STA* (CORE)_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* NXTLOC_^1_%SAN_!1_^1_%JMP* FINI_^1_%RAO* SAV€€EI_^1_%JMP* UA_^1FINI_!JMP* FINICH_J**MSOS4.0**_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* THE FOLLOWING CODE PACKS DATA INTO THE BUFFER_^1* PRIOR TO A BUFFERED WRITE._^1PKBUFF NOP 0_O**MSOS4.0**_^1_%LDA BUFFWA_J**MSOS4.0**_^1_%STA* SAVEI_^1PA_#LDQ* (CORE)_^1_%QLS_!8_^1_%ENA_!$3F_^1_%LAQ_!Q_^1_%LDA* TABLE,Q_^1_%AND- $A_,$00FF_<**MSOS4.0**_€€^1_%STA* (SAVEI)_^1_%LDQ* (CORE)_^1_%LDA =N$FF_^1_%LAQ A_^1_%EOR- LPMSK+8_%CHECK FOR A NULL_^1_%SAN OK1-*-1_^1_%ENQ $20_^1OK1_"ENA $3F_^1_%LAQ_!Q_^1_%LDA* TABLE,Q_^1_%RAO* SAVEI_^1_%AND- $A_+$00FF_=**MSOS4.0**_^1_%STA* (SAVEI)_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAZ_!WRTAPE-*-1_^1_%RAO* SAVEI_^1_%JMP* PA_^1WRTAPE JMP* (PKBUFF)_H**MSOS4.0**_^1_%SPC_!1_^1*****€€************************************************_^1_%SPC_!1_^1TABLE NUM_"$261F_^1_%NUM $3131_)1_1A_^1_%NUM $3232_)2_1B_^1_%NUM $3333_)3_1C_^1_%NUM $3434_)4_1D_^1_%NUM $3535_)5_1E_^1_%NUM $3636_)6_1F_^1_%NUM $3737_)7_1G_^1_%NUM $3838_)8_1H_^1_%NUM $3939_)9_1I_^1_%NUM $3021_)0_1J_^1_%NUM $3D22_)=_1K_^1_%NUM $2723_)'_1L_^1_%NUM_"$3A24_^1_%NUM_"$3E25_^1_%NUM_"$2226_^1_%NUM€€ $2027_)SP_0P_^1_%NUM $2F28_)/_1Q_^1_%NUM $5329_)S_1R_^1_%NUM $5412_)T_1S_^1_%NUM $5513_)U_1T_^1_%NUM $5614_)V_1U_^1_%NUM $5715_)W_1V_^1_%NUM $5816_)X_1W_^1_%NUM $5917_)Y_1X_^1_%NUM $5A18_)Z_1Y_^1_%NUM_"$5F19_^1_%NUM_"$2C3D_^1_%NUM_"$281E_^1_%NUM_"$252D_^1_%NUM_"$5C2F_^1_%NUM_"$401A_^1_%NUM $2D10_)-_1SP_^1_%NUM $4A2A_)J_^1_%NUM_"$4B0F_^1_%NUM_"$4C3F_^1_%NUM $4D2B_)M_1$€€_^1_%NUM_"$4E1D_^1_%NUM $4F1D_^1_%NUM $500C_)P_1'_^1_%NUM $511C_)Q_1(_^1_%NUM $523C_)R_1)_^1_%NUM $212C_<*_^1_%NUM $2430_)$_1+_^1_%NUM $2A1B_)*_1,_^1_%NUM_!$5D20_^1_%NUM_"$3B3B_^1_%NUM_"$5E11_^1_%NUM $2B0A_)+_10_^1_%NUM $4101_)A_11_^1_%NUM $4202_)B_12_^1_%NUM $4303_)C_13_^1_%NUM $4404_)D_14_^1_%NUM $4505_)E_15_^1_%NUM $4606_)F_16_^1_%NUM $4707_)G_17_^1_%NUM $4808_)H€€_18_^1_%NUM $4909_)I_19_^1_%NUM_"$3F0D_^1_%NUM_"$2E2E_^1_%NUM_"$293E_^1_%NUM_"$5B0B_^1_%NUM_"$3C0E_^1_%NUM_"$233A_^1_%END_]_^__€PFRWBB CSY/ C40 P€1_%NAM FRWBB_(DECK-ID C40 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 BUFFERED 601 MAG TAPE DRIVER REV.1_)**MSOS4.0**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT_"FRWBB_^1_%EXT* SAVLV4,ENRIV4,PREPV4,NRMRTB_5**MSOS4.0**_^1_%EXT* BRTNV4_J**MSOS4.0**_^1_%EXT€€* BUFFWA,BUFLWA_C**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_^1FRWBB LDA BUFFWA_J**MSOS4€€.0**_^1_%STA* HOLD_^1_%RTJ* FRBABS_J**MSOS4.0**_^1FRBABS NUM 0_O**MSOS4.0**_^1_%LDA =XINTRW-FRBABS_B**MSOS4.0**_^1_%ADD* FRBABS_J**MSOS4.0**_^1_%STA- MODRTN,I_H**MSOS4.0**_^1_%LDA- I_^1_%STA* SAVEI_^1_%LDA- FWA,I_%BEGIN ADDRESS_^1_%STA* CORE_^1_%LDA- LWA,I_$LAST ADDRESS + 1_^1_%STA* LAST_^1_%ENA_!1_^1_%AND- RQST,I_^1_%SAZ HAULIN_'GO READ_;**MSOS4.0**_^1_%STA* SAVIXD_J**MSO€€S4.0**_^1_%RTJ ENRIV4_J**MSOS4.0**_^1_%RTJ* PCKAGE_J**MSOS4.0**_^1IOEXIT LDA* SAVIXD_J**MSOS4.0**_^1_%ENQ 2_O**MSOS4.0**_^1_%JMP PREPV4_J**MSOS4.0**_^1HAULIN STA* SAVIXD_J**MSOS4.0**_^1_%LDA SAVLV4_J**MSOS4.0**_^1_%ENQ 0_O**MSOS4.0**_^1_%ALS 4_O**MSOS4.0**_^1_%DVI- $44_*BY 6_>**MSOS4.0**_^1_%SQZ_!1_^1_%INA_!1_^1_%INA_!1_^1_%ADD* HOLD_)BUFFWA_<**MSOS4.0**_^1_%STA BUFLWA_J**MS€€OS4.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_^1€€BUFSTT 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_,$00€€3F_<**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* F€€INIS_^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€Z_%EOR* TEMP_^1_%STA* (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_]_^__ZPRWBAB CSY/ C41 P€1_%NAM RWBAB_(DECK-ID C41 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 BUFFERED 601 MAG TAPE DRIVER REV.1_)**MSOS4.0**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT_"RWBAB_^1_%EXT* PREPV4,ENRIV4_C**MSOS4.0**_^1_%EXT* BRTNV4_J**MSOS4.0**_^1_%EXT* BUFFWA_J**MS€€OS4.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* CORE_^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_%STA* 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_^1€€CORADR 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* T€€EMP_^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 D€€ATA 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-€8 $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_]_^__8PMAXRVB CSY/ C42 P€1_%NAM MAXRVB_'DECK-ID C42 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 BUFFERED 601 MAG TAPE DRIVER REV.1_)**MSOS4.0**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT RECVTB_J**MSOS4.0**_^1_%ENT CHKSV4_J**MSOS4.0**_^1_%EXT* TERFV4,ERRRV4,NOPAV4,BUFLWA,MOTNV€€4_-**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**_^1ERRCOD EQU ERRCOD(18)_F**MSOS4.0**_^1RTRECV EQU RTRECV(19)_"ERR€€OR 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 NOP 0_O**MSOS4.0**_^1_%TRQ €€ A_O**MSOS4.0**_^1RCVR_!STQ ERRNO_K**MSOS4.0**_^1_%LDQ- ELU,I_^1_%QLS 6_O**MSOS4.0**_^1_%SUB ADDASC+1_H**MSOS4.0**_^1_%AAQ Q_O**MSOS4.0**_^1_%RTJ LOG_M**MSOS4.0**_^1_%LDA- (I)_M**MSOS4.0**_^1_%AND- 6_,$000F_^1_%LDQ =N$4C00_^1_%AAQ A_^1_%STA RELADD+1_%PUT INTO REQUEST._0**MSOS4.0**_^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**_^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 L€€DA* TIMES_K**MSOS4.0**_^1_%SAN DEBUMP_J**MSOS4.0**_^1LPRTN LDA ERRNO_K**MSOS4.0**_^1_%SUB* ADDASC+1_H**MSOS4.0**_^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**_^1WRCV€€R1 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 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 E€€NQ 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_%ALS 8_^1_%SAP WRTEOF_'SKIP IF NO PARITY_1**M€€SOS4.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 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**_^1ADVRV LDQ- ELU,I_K**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1_%INQ -$A_M**MSOS4.0**_^1_%SQP LETTER_J**MSOS4.0**_^1_%JMP* ADDASC_J**MSOS4.0**_^1LETTER CLR Q_O€€**MSOS4.0**_^1_%DVI =N$A_L**MSOS4.0**_^1_%QLS 12_N**MSOS4.0**_^1_%ALS 4_O**MSOS4.0**_^1_%LLS 4_O**MSOS4.0**_^1ADDASC ADD =N$3030_I**MSOS4.0**_^1_%STA* RVMSG_K**MSOS4.0**_^1_%LDA- I_O**MSOS4.0**_^1_%STA* CURPST_J**MSOS4.0**_^1_%LDA- $FC_*TTY LUN_;**MSOS4.0**_^1_%ADD- $2F_*$1000 ASCII MODE._1**MSOS4.0**_^1_%STA* MODLUN_J**MSOS4.0**_^1_%RTJ* ADDCAL_'CALCULATE ADDRESSES_/**MSOS4.0€€**_^1ADDCAL NUM 0_O**MSOS4.0**_^1_%LDA =XTRYTE-ADDCAL_B**MSOS4.0**_^1_%ADD* ADDCAL_J**MSOS4.0**_^1_%STA* CPLADD_'COMPLETION ADDRESS_0**MSOS4.0**_^1_%LDA =XRCVMSG-ADDCAL_A**MSOS4.0**_^1_%ADD* ADDCAL_J**MSOS4.0**_^1_%STA* STRGAD_'STARTING ADDRESS_2**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FWRITE $FC,TRYRE,RCVMSG,RCVEND-RCVMSG,A,0,0,0,0,D_"**MSOS4.0**_^1*_[**MSOS4.0**_^1RELADD RTJ- ($F4)_€€K**MSOS4.0**_^1_%NUM 0_-SET AT RECV+7._3**MSOS4.0**_^1CPLADD NUM 0_O**MSOS4.0**_^1_%NUM 0_,THREAD_<**MSOS4.0**_^1MODLUN NUM 0_,V,M,A,LUN_9**MSOS4.0**_^1_%ADC RCVEND-RCVMSG NUMBER OF WORDS._2**MSOS4.0**_^1STRGAD NUM 0_,STARTING ADDRESS_2**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1RCVMSG ALF Z,L,Z_K**MSOS4.0**_^1RVMSG ALF Z,_!RECOVERED Z_@**MSOS4.0**_^1ERRNO NUM 0_O**MSOS4.€€0**_^1RCVEND EQU RCVEND(*)_G**MSOS4.0**_^1TRYTE LDA =N0_M**MSOS4.0**_^1CURPST EQU CURPST(*-1)_E**MSOS4.0**_^1_%STA- I_O**MSOS4.0**_^1_%CLR A_O**MSOS4.0**_^1_%STA- RTRECV,I_H**MSOS4.0**_^1_%LDA* ERRNO_(CHECK IF SWITCHMODE READ 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**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 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* TEMLWA_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**MSOS4.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_%INQ 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* TEMFWA_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**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**MSOS€€4.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 ERR€€NO_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**M€SOS4.0**_^1_%END_]_^__PD1731U CSY/ C33 P€1_%NAM D1731U_'DECK-ID C33 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 UNBUFFERED 601 MAG TAPE DRIVER REV.1_'**MSOS4.0**_^1*_8SELECT EITHER MAX OR MIN._^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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**MSO€€S4.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 START(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(2€€2)_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**_^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_!ST€€Q-_$I_^1_%RTJ* *+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_%LDQ =XE1731U-STARTA_@**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_*** SET **_6**MSOS 4.1**_^1_%LDQ =XC1731U-STARTA_@**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 2,I_*** SUP **_6**MSOS 4.1**_^1_%LDQ- I_^1_%JMP* TAPE2_^1_%SPC 2_^1ABSEV4 NUM 0_O**MSOS4.0**_^1_%SPC 2_^1I173€€1U 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+€€ RQAQ_)REQUEST AQ CHANNEL_/**MSOS 4.1**_^1_%STQ- I_,RESTORE PDT ADDRESS_^1_%RTJ- (FNR)_O63*1345_^1_(JMP-_$(DISP)_^1TAPE6 LDQ- CONECT,I_^1_%INP IX-*_L**MSOS4.0**_^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**MS€€OS4.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_%SAZ TP4X-*-1_$SKIP IF NO DENSITY CHANGE_^1_%INA -1_-DO NOT ALLOW 800 BPI._,**MSOS4.0**_^1_%SAZ TP4X_L**MSOS4.0**_^1_%INA 1_O**MSOS4.0**_^1_%TRA Q_Q*559_^1_%LDA- ONEBIT+2,Q_"PIC€€K 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- START,I_^1_%SUB- STOP,I_^1_%SAN 1_,ZERO WORDS REQUESTED._^1_%JMP* ILLREQ_'YES._^1_%ENA $38_M**MSOS€€4.0**_^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_%LDA- CONTRL,I_^1_%AND- NZERO+7_^1_%AAQ A_^1_%STA- CONTRL,I_^1_%LDQ- CONECT,I_^1_%INQ 1_^1_%OUT REJCTI-*_$SELECT UNIT, MODE, AND DENS_'**MSOS4.0**_^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_^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 CHECKS€€UM 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_-CHECK 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_!JMP 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* STA€€T2_K**MSOS4.0**_^1ALSET EQU ALSET(*)_H**MSOS4.0**_^1_%LDQ- RTRECV,I_$CHK RECOVERY RETURN_/**MSOS4.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_(CHECK 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* NOPAR_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_%ST€€A- 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_S65*1398_^1_%STA- START,I_%CLEAR MOTION CONTROL WORD_-65*1398_^1MFAIL RTJ MAKEQ_O65*1398_^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_%LD€€A- (I)_*GET SCHEDULE REQUEST/PRIORITY LEVEL_^1_%STA* GO_^1_%RTJ- ($F4)_(MONITOR CALL_^1GO_#ADC *-*_*SCHEDULE ALTDEV SO WE CAN_^1_%ADC ALTDEV_'RETAIN CONTROL AND PROCESS OTHER UNITS_^1LOGERR RTJ+ LOG_*GO LOG ERR_^1_%JMP* CYCLE_^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_%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_%L€€LS 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**MSOS4.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**MS€€OS4.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* (CKEOP)_I**MSOS4.0**_^1ASVIT NUM 0_^1QSVIT NUM 0_^1EOTFLG NUM 0_^1EOTCHK NUM 0_,RETURN EXIT_^1_%STA* ASVIT_^1_%STQ* QSVIT_^1_%LDA* EOTFLG_^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_'SET EOT FLAG_^1_%LDQ- CONECT,I_^1_%OUT REJCTX-*_$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 CO€€NIDITION._+**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 SGLMOT_'SKIP ID MOTION REQUEST._+**MSOS4.0**_^1_%AND- $E_,$0FFF. SAVE ITERATIONS._***MSOS4.0**_^1_%STA* MOTITR_'SAVE ITERATIONS FOR UPDATING._$**MSOS4.0**_^1_%SA€€Z 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_%LLS 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 SE€€VEN._#**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 BIT_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 MO€€TION 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_%LDQ* 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_%STQ- CLOCK,I_I**MSOS4.0**_^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_%€€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_%LDA- I_^1_%STA* SAVEI_(SAVE PHYSTB 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* TPM€€2_)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 HANGUP DELAY TIME_^1_%STQ- CLOCK,I_^1_%JMP* TPM1_^1_%SPC 1_^1REWIND LDA =N$408_'ENTERRED FOR REWIND_^1_%LDQ =XT3_^1_%STQ- CLOCK,I_%SET HANGUP DELAY TIME_^1_%LDQ- STS,I_^1_%QLS 5_,CHECK FOR LOAD POINT_^1_%SQP 1_^1_%JMP* TPM1AA_(LOAD P€€OINT_^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**_^1S€€KRECF RTJ CKBUSY_'CHECK UNIT FOR BUSY._.**MSOS4.0**_^1_%ENA T1_+SET TIME OUT DELAY._/**MSOS4.0**_^1_%STA- CLOCK,I_I**MSOS4.0**_^1_%LDA =N$108_'SET MOTION DIRECTION AND EOP INTER **MSOS4.0**_^1_%OUT R-*_*START MOTION._5**MSOS4.0**_^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* SKP€€FLG_'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_^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_€bL**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_^__bPFRWA CSY/ C34 P€1_%NAM FRWA_)DECK-ID C34 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 UNBUFFERED 601 MAG TAPE DRIVER REV.1_'**MSOS4.0**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT FRWA_^1_%EXT* CKBUSY_^1_%EXT* ABSEV4,FAILED,INTAV4,REJCTX,PARCV4_.**MSOS4.0**_^1_%SPC 1_^1€€_%EQU LPMSK(2),ONEBIT($23),NZERO($12)_^1_%EQU CONECT(7),ERCD(9),STATUS(12)_^1_%EQU START(10),STOP(11)_^1_%SPC 1_^1MODRTN EQU MODRTN(23)_F**MSOS4.0**_^1FRWA_!RTJ* ABST_L**MSOS4.0**_^1ABST_!NUM 0_O**MSOS4.0**_^1_%LDA =XERORIN-ABST_C**MSOS4.0**_^1_%ADD* ABST_L**MSOS4.0**_^1_%STA- MODRTN,I_H**MSOS4.0**_^1_%LDA ABSEV4_J**MSOS4.0**_^1_%STA* EOHERE_J**MSOS4.0**_^1ERORIN LDA- CONEC€€T,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 FRDA6-*-1 IS THIS A READ REQUEST_^1_(JMP_%FWRA1_/NO, WRITE REQ_^1FRDA6 RTJ CKBUSY_^1_%LDA- ONEBIT+8_^1_(OUT_%REJ-*_^1FRDA_!LDQ* EQTAB_^1FRDA2 ENA 0_^1_%INP DONE1-*_^1_%TRA Q_^1_%LDA* TABLE,Q_^1_%ARS 8_^1_%STA* TEMP_^1_%LDQ* EQTAB_^1FRD€€A3 ENA 0_^1_%INP DONE2-*_^1_%TRA Q_^1_%LDA* TABLE,Q_^1_%LDQ* TEMP_^1_%LRS 8_^1_%STA* (CORE)_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAZ 1_^1_%JMP* FRDA_^1_%LDQ* EQTAB_^1FRDA1 INP DONE3-*_^1_%JMP* FRDA1_^1DONE1 NOP 0_$INTERNAL REJECT_^1_%RTJ* (EOHERE)_H**MSOS4.0**_^1_%JMP* FRDA2 NO_^1FRDA4 LDA* CORE_L**MSOS4.0**_^1_%LDQ* LAST_L**MSOS4.0**_^1_%JMP PARCV4_J**MSOS4.0€€**_^1DONE2 NOP 0_$INTERNAL REJECT_^1_%RTJ* (EOHERE)_H**MSOS4.0**_^1_%JMP* FRDA3 NO_^1_%LDA- NZERO+8_!YES_^1_%ADD* TEMP_^1_%ALS 8_^1_%STA* (CORE)_^1_%RAO*_!CORE_^1_%JMP* FRDA4_^1EOHERE NUM 0_O**MSOS4.0**_^1DONE3 NOP 0_^1_%RTJ* (EOHERE)_H**MSOS4.0**_^1_%JMP* FRDA1_^1_%JMP* FRDA4_^1_%BZS EQTAB(1),CORE(1),LAST(1)_^1TEMP_!NUM 0_^1REJ_"JMP* INTAL1_J**MSOS4.0**_^1_%JMP REJCTX_J*€€*MSOS4.0**_^1INTAL1 JMP INTAV4_J**MSOS4.0**_^1*_4FREAD-ASCII_%FWRITE-ASCII_^1TABLE NUM_"$261F_^1_%NUM $3131_)1_1A_^1_%NUM $3232_)2_1B_^1_%NUM $3333_)3_1C_^1_%NUM $3434_)4_1D_^1_%NUM $3535_)5_1E_^1_%NUM $3636_)6_1F_^1_%NUM $3737_)7_1G_^1_%NUM $3838_)8_1H_^1_%NUM $3939_)9_1I_^1_%NUM $3021_)0_1J_^1_%NUM $3D22_)=_1K_^1_%NUM $2723_)'_1L_^1_%NUM_"$3A24_^1_%NUM_"$3E25_^1_%NU€€M_"$2226_^1_%NUM $2027_)SP_0P_^1_%NUM $2F28_)/_1Q_^1_%NUM $5329_)S_1R_^1_%NUM $5412_)T_1S_^1_%NUM $5513_)U_1T_^1_%NUM $5614_)V_1U_^1_%NUM $5715_)W_1V_^1_%NUM $5816_)X_1W_^1_%NUM $5917_)Y_1X_^1_%NUM $5A18_)Z_1Y_^1_%NUM_"$5F19_^1_%NUM_"$2C3D_^1_%NUM_"$281E_^1_%NUM_"$252D_^1_%NUM_"$5C2F_^1_%NUM_"$401A_^1_%NUM $2D10_)-_1SP_^1_%NUM $4A2A_)J_^1_%NUM_"$4B0F_^1_%NUM_"$4C3F_^1_%€€NUM $4D2B_)M_1$_^1_%NUM_"$4E1D_^1_%NUM $4F1D_^1_%NUM $500C_)P_1'_^1_%NUM $511C_)Q_1(_^1_%NUM $523C_)R_1)_^1_%NUM $212C_<*_^1_%NUM $2430_)$_1+_^1_%NUM $2A1B_)*_1,_^1_%NUM_!$5D20_^1_%NUM_"$3B3B_^1_%NUM_"$5E11_^1_%NUM $2B0A_)+_10_^1_%NUM $4101_)A_11_^1_%NUM $4202_)B_12_^1_%NUM $4303_)C_13_^1_%NUM $4404_)D_14_^1_%NUM $4505_)E_15_^1_%NUM $4606_)F_16_^1_%NUM $4707_)G_17_^€€1_%NUM $4808_)H_18_^1_%NUM $4909_)I_19_^1_%NUM_"$3F0D_^1_%NUM_"$2E2E_^1_%NUM_"$293E_^1_%NUM_"$5B0B_^1_%NUM_"$3C0E_^1_%NUM_"$233A_^1_%SPC 2_^1FWRA1 LDA- STATUS,I IS TAPE WRITE ENABLED_^1_%SAM RITOK_K**MSOS4.0**_^1_%ENA 13_N**MSOS4.0**_^1_%JMP FAILED_J**MSOS4.0**_^1RITOK RTJ CKBUSY_J**MSOS4.0**_^1_%LDA- ONEBIT+7_$SET WRITE MOTION_^1_(OUT_%REJ-*_^1FWRA_!LDQ* (CORE)_^1_%QLS €€8_^1_%LDA =N$FF_^1_%LAQ A_^1_%EOR- LPMSK+8_^1_%SAN OK-*-1_^1_%ENQ $20_*ENTER Q WITH A SPACE_^1OK_#ENA $3F_^1_%LAQ Q_^1_%LDA* TABLE,Q_^1_%STA* TEMP_^1_%LDQ* EQTAB_^1OUT_"OUT REJOK-*_^1_%LDQ* (CORE)_^1_%LDA =N$FF_^1_%LAQ A_^1_%EOR- LPMSK+8_^1_%SAN OK1-*-1_^1_%ENQ $20_*ENQ WITH A SPACE_^1OK1_"ENA $3F_^1_%LAQ Q_^1_%LDA* TABLE,Q_^1_%STA* TEMP_^1_%LDQ* EQTAB_^1OUT1_!OUT REJ€€OK1-*_^1_%RAO* CORE_^1_%LDA* CORE_^1_%SUB* LAST_^1_%SAZ EO-*-1_^1_%JMP* FWRA_^1EO_#RTJ* (EOHERE)_H**MSOS4.0**_^1_%JMP* EO_#NO_^1_%JMP FRDA4_^1REJOK JMP* REJ_*INTERNAL REJ_^1_%INQ 1_^1_%INP REJ-*_^1_%ALS 11_^1_%SAP 1_^1_%JMP* EO_^1_%LDA* TEMP_^1_%INQ -1_^1_%JMP* OUT_^1_%SPC 1_^1REJOK1 JMP* REJ_^1_%INQ 1_^1_%INP REJ-*_^1_%ALS 11_^1_%SAP 1_^1_%JMP* EO_^1_%LDA TEMP_L**MSO€.S4.0**_^1_%INQ -1_^1_%JMP* OUT1_^1_%END_]_^__.PFRWB CSY/ C35 P€1_%NAM FRWB_)DECK-ID C35 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 UNBUFFERED 601 MAG TAPE DRIVER REV.1_'**MSOS4.0**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT FRWB_^1_%EXT* CKBUSY_^1_%EXT* ABSEV4,FAILED,INTAV4,REJCTX,PARCV4_.**MSOS4.0**_^1MODRTN EQU €€ MODRTN(23)_F**MSOS4.0**_^1_%SPC 1_^1_%EQU ONEBIT($23)_^1_%EQU CONECT(7),ERCD(9),STATUS(12)_^1_%EQU START(10),STOP(11)_^1_%SPC 2_^1FRWB_!RTJ* ABSTT_K**MSOS4.0**_^1ABSTT NUM 0_O**MSOS4.0**_^1_%LDA =XERRENT-ABSTT_B**MSOS4.0**_^1_%ADD* ABSTT_K**MSOS4.0**_^1_%STA- MODRTN,I_H**MSOS4.0**_^1_%LDA ABSEV4_J**MSOS4.0**_^1_%STA* CHKEOP_J**MSOS4.0**_^1ERRENT 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 FRDB1-*-1_^1_(JMP_%FWRB1_^1FRDB1 RTJ CKBUSY_^1_%LDA- ONEBIT+8_^1_%OUT REJ-*_^1FRDB_!ENA 0_^1_%LDQ* EQTAB_^1_%INP REJ1-*_^1_%ALS 10_^1_%STA* TEMP_^1FBR1_!ENA 0_^1_%INP REJ2-*_^1_%ALS 4_^1_%ADD* TEMP_^1_%STA* TEMP_^1FBR2_!ENA 0_^1_%INP REJ3-*_^1_%ENQ€€ $3_^1_%LAQ Q_^1_%ARS 2_^1_%EOR* TEMP_^1_%STQ* TEMP_^1_%STA* (CORE)_^1_%RAO* CORE_L**MSOS4.0**_^1_%LDA* CORE_L**MSOS4.0**_^1_%SUB* LAST_L**MSOS4.0**_^1_%SAN FBR4-1_J**MSOS4.0**_^1_%JMP* SPIN_^1_%LDQ* EQTAB_^1FBR4_!ENA 0_^1_%INP REJ4-*_^1_%LDQ* TEMP_^1_%ALS 10_^1_%LRS 2_^1_%STA* TEMP_^1_%LDQ* EQTAB_^1FBR6_!ENA 0_^1_%INP REJ5-*_^1_%ALS 2_^1_%ADD* TEMP_^1_%STA* TEMP_^1FBR7_€€!ENA 0_^1_%INP REJ6-*_^1_%ENQ $F_^1_%LAQ Q_^1_%ARS 4_^1_%EOR* TEMP_^1_%STQ* TEMP_^1_%STA* (CORE)_^1_%RAO* CORE_L**MSOS4.0**_^1_%LDA* CORE_L**MSOS4.0**_^1_%SUB* LAST_L**MSOS4.0**_^1_%SAN FBR8-1_J**MSOS4.0**_^1_%JMP* SPIN_^1_%LDQ* EQTAB_^1FBR8_!ENA 0_^1_%INP REJ7-*_^1_%LDQ* TEMP_^1_%ALS 10_^1_%LRS 4_^1_%STA* TEMP_^1_%LDQ* EQTAB_^1FBR9_!ENA 0_^1_%INP REJ8-*_^1_%EOR* TEMP_^€€1_%STA* (CORE)_^1_%RAO* CORE_L**MSOS4.0**_^1_%LDA* CORE_L**MSOS4.0**_^1_%SUB* LAST_L**MSOS4.0**_^1_%SAZ SPIN_L**MSOS4.0**_^1_%JMP* FRDB_L**MSOS4.0**_^1SPIN_!LDQ* EQTAB_^1_%INP REJ9-*_^1_%JMP* *-1_^1REJ1_!NOP 0_$INTERNAL REJECT_^1_%RTJ* (CHKEOP)_H**MSOS4.0**_^1_%JMP* FRDB_!NO END OF OPERATION_^1FBRA_!JMP* CK4ERR_J**MSOS4.0**_^1REJ2_!NOP 0_$INTERNAL REJECT_^1_%RTJ* (CHKEOP)_H**MS€€OS4.0**_^1_%JMP* FBR1_!NO_^1FBR3_!LDQ* TEMP_!YES_^1_%STQ* (CORE)_^1_%RAO* CORE_^1_%JMP* FBRA_^1REJ3_!NOP 0_$INTERNAL REJECT_^1_%RTJ* (CHKEOP)_H**MSOS4.0**_^1_%JMP* FBR2_!NO_^1_%JMP* FBR3_!YES_^1REJ4_!NOP 0_$INTERNAL REJECT_^1_%RTJ* (CHKEOP)_H**MSOS4.0**_^1_%JMP* FBR4_!NO_^1_%JMP*_!FBRA_^1_%BZS EQTAB(1),CORE(1),LAST(1)_^1REJ5_!NOP 0_$INTERNAL REJECT_^1_%RTJ* (CHKEOP)_H**MSOS4.0*€€*_^1_%JMP* FBR6_!NO_^1_%JMP* FBR3_!YES_^1CHKEOP NUM 0_O**MSOS4.0**_^1REJ6_!NOP 0_$INTERNAL REJECT_^1_%RTJ* (CHKEOP)_H**MSOS4.0**_^1_%JMP* FBR7_!NO_^1_%JMP* FBR3_!YES_^1REJ7_!NOP 0_$INTERNAL REJECT_^1_%RTJ* (CHKEOP)_H**MSOS4.0**_^1_%JMP* FBR8_!NO_^1_%JMP*_!FBRA_^1REJ8_!NOP 0_$INTERNAL REJECT_^1_%RTJ* (CHKEOP)_H**MSOS4.0**_^1_%JMP* FBR9_!NO_^1_%JMP* FBR3_^1REJ9_!NOP 0_^1_%RTJ* (€€CHKEOP)_H**MSOS4.0**_^1_%JMP* SPIN+1 NO_^1_%JMP* FBRA_^1TEMP_!NUM 0_^1REJ_"JMP* INTAL2_J**MSOS4.0**_^1_%JMP REJCTX_J**MSOS4.0**_^1INTAL2 JMP INTAV4_J**MSOS4.0**_^1FWRB1 LDA- STATUS,I_^1_%SAM RITEK_K**MSOS4.0**_^1_%ENA 13_N**MSOS4.0**_^1_%JMP FAILED_J**MSOS4.0**_^1RITEK RTJ CKBUSY_J**MSOS4.0**_^1_%LDA- ONEBIT+7_$SET WRITE MODE_^1_%OUT REJ-*_^1FWRB_!LDQ* EQTAB_^1_%LDA* (COR€€E)_^1_%ALS 6_^1_%STA* TEMP_^1FW_#OUT RJ1-*_^1_%ALS 6_^1_%STA* TEMP_^1FWA_"OUT RJ2-*_^1_%LLS 4_^1_%RAO* CORE_L**MSOS4.0**_^1_%LDA* CORE_L**MSOS4.0**_^1_%SUB* LAST_L**MSOS4.0**_^1_%SAN 1_O**MSOS4.0**_^1_%JMP* FWB1_^1_%LDA* (CORE)_^1_%LRS 14_^1_%STA* TEMP_^1_%LDQ* EQTAB_^1FWB_"OUT RJ3-*_^1_%LDA* (CORE)_^1_%ALS 8_^1_%STA* TEMP_^1FWC_"OUT RJ4-*_^1_%ALS 6_^1_%STA* TEMP_^1FWD_"€€OUT RJ5-*_^1_%LLS 2_^1_%RAO* CORE_L**MSOS4.0**_^1_%LDA* CORE_L**MSOS4.0**_^1_%SUB* LAST_L**MSOS4.0**_^1_%SAN 1_O**MSOS4.0**_^1_%JMP* FWB4_^1_%LDA* (CORE)_^1_%LRS 12_^1_%STA* TEMP_^1_%LDQ* EQTAB_^1FWF_"OUT RJ6-*_^1_%LDA* (CORE)_^1_%ALS 10_^1_%STA* TEMP_^1FWG_"OUT RJ7-*_^1_%ALS 6_^1_%STA* TEMP_^1FWH_"OUT RJ8-*_^1_%RAO* CORE_L**MSOS4.0**_^1_%LDA* CORE_L**MSOS4.0**_^1_%SUB* LA€€ST_L**MSOS4.0**_^1_%SAZ FWB2_L**MSOS4.0**_^1_%JMP* FWRB_L**MSOS4.0**_^1_%JMP* FWRB_^1FWB1_!ENA 0_^1_%LRS 14_^1_%STA* TEMP_^1FWB5_!LDQ* EQTAB_^1_%OUT RJ9-*_^1FWB2_!RTJ* (CHKEOP)_H**MSOS4.0**_^1_%JMP* FWB2_^1CK4ERR LDA* CORE_L**MSOS4.0**_^1_%LDQ* LAST_L**MSOS4.0**_^1_%JMP PARCV4_J**MSOS4.0**_^1FWB4_!ENA 0_^1_%LRS 12_^1_%STA* TEMP_^1_%JMP* FWB5_^1RJ1_"JMP* REJ_^1_%RTJ* CKSTAT_^€€1_%JMP* FW_^1RJ2_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* FWA_^1RJ3_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* FWB_^1RJ4_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* FWC_^1RJ5_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* FWD_^1RJ6_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* FWF_^1RJ7_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* FWG_^1RJ8_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* FWH_^1RJ9_"JMP* REJ_^1_%RTJ* CKSTAT_^1_%JMP* FWB5+1_^1CKSTAT N€„OP 0_^1_%INQ 1_^1_%INP REJ-*_^1_%ALS 11_^1_%SAP CKS_^1_%JMP* FWB2_^1CKS_"INQ -1_^1_%LDA* TEMP_^1_%JMP* (CKSTAT)_^1_%END_]_^__„PRWBA CSY/ C36 P€1_%NAM RWBA_)DECK-ID C36 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 UNBUFFERED 601 MAG TAPE DRIVER REV.1_'**MSOS4.0**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT RWBA_^1_%EXT* ABSEV4,FAILED,INTAV4,REJCTX,PARCV4_.**MSOS4.0**_^1MODRTN EQU MODRTN(23)_F**M€€SOS4.0**_^1_%EXT* CKBUSY_^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* T€€EMP_^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_!YE€€S_^1_%QLS 4_^1RBA7_!STQ* (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**_^1INTAL3 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_€r^1_%INP REJ-*_^1_%ALS 11_^1_%SAP CKS_^1_%JMP* WBA3_^1CKS_"INQ -1_^1_%LDA* TEMP_^1_%JMP* (CKSTAT)_^1_%END_]_^__rPMAXRVU CSY/ C37 P€1_%NAM MAXRVU_'DECK-ID C37 MSOS 4.1_-SUMMARY-079_^1*_$1731/1732 UNBUFFERED 601 MAG TAPE DRIVER REV.1_'**MSOS4.0**_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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**_^1ESTAT€€2 EQU ESTAT2(12)_G**MSOS4.0**_^1START EQU START(10)_G**MSOS4.0**_^1STOP_!EQU STOP(11)_H**MSOS4.0**_^1CONTRL EQU CONTRL(16)_F**MSOS4.0**_^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**_^1STOLSW EQU STOLSW($1F)_E**MS€€OS4.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_%QLS 6_O**MSOS4.0**_^1_%LDA ERRNO_K**MSOS4.0**_^1_%SUB ADDASC+1_H**MSOS4.0**_^1_%AAQ Q_O**MSOS4.0€€**_^1_%RTJ LOG_M**MSOS4.0**_^1_%LDA- (I)_M**MSOS4.0**_^1_%AND- 6_,$000F_^1_%LDQ =N$4C00_^1_%AAQ A_^1_%STA RELADD+1_%PUT INTO THE REQUEST._,**MSOS4.0**_^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**_^1BKSPCT BSS BKSPCT(1)_G**MSOS€€4.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_H**MSOS4.0**_^1_%ENQ 0_O**MSOS4.0**_^1_%STQ- RTRECV,I_H**MSOS4.0**_^1_%JMP* (RECOVT)_H**M€€SOS4.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 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_>**MS€€OS4.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-REC€€V 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**_^1ADVRV LDQ- ELU,I_K**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1€€_%INQ -$A_M**MSOS4.0**_^1_%SQP LETTER_J**MSOS4.0**_^1_%JMP* ADDASC_J**MSOS4.0**_^1LETTER CLR Q_O**MSOS4.0**_^1_%DVI =N$A_L**MSOS4.0**_^1_%QLS 12_N**MSOS4.0**_^1_%ALS 4_O**MSOS4.0**_^1_%LLS 4_O**MSOS4.0**_^1ADDASC ADD =N$3030_I**MSOS4.0**_^1_%STA* RVMSG_K**MSOS4.0**_^1_%LDA- I_O**MSOS4.0**_^1_%STA* CURPST_J**MSOS4.0**_^1_%LDA- $FC_*TTY LUN_;**MSOS4.0**_^1_%ADD- $2F_*$1000 AS€€CII MODE._1**MSOS4.0**_^1_%STA* MODLUN_J**MSOS4.0**_^1_%RTJ* ADDCAL_'CALCULATE ADDRESSES_/**MSOS4.0**_^1ADDCAL NUM 0_O**MSOS4.0**_^1_%LDA =XTRYTE-ADDCAL_B**MSOS4.0**_^1_%ADD* ADDCAL_J**MSOS4.0**_^1_%STA* CPLADD_'COMPLETION ADDRESS_0**MSOS4.0**_^1_%LDA =XRCVMSG-ADDCAL_A**MSOS4.0**_^1_%ADD* ADDCAL_J**MSOS4.0**_^1_%STA* STRGAD_'STARTING ADDRESS_2**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FW€€RITE $FC,TRYTE,RCVMSG,RCVEND-RCVMSG,A,0,0,0,0,D_"**MSOS4.0**_^1*_[**MSOS4.0**_^1RELADD RTJ- ($F4)_K**MSOS4.0**_^1_%NUM 0_-SET AT RECV+9._3**MSOS4.0**_^1CPLADD NUM 0_O**MSOS4.0**_^1_%NUM 0_,THREAD_<**MSOS4.0**_^1MODLUN NUM 0_,V,M,A,LUN_9**MSOS4.0**_^1_%ADC RCVEND-RCVMSG NUMBER OF WORDS._2**MSOS4.0**_^1STRGAD NUM 0_,STARTING ADDRESS_2**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1€€RCVMSG ALF Z,L,Z_K**MSOS4.0**_^1RVMSG ALF Z,_!RECOVERED Z_@**MSOS4.0**_^1ERRNO NUM 0_O**MSOS4.0**_^1RCVEND EQU RCVEND(*)_G**MSOS4.0**_^1TRYTE LDA =N0_M**MSOS4.0**_^1CURPST EQU CURPST(*-1)_E**MSOS4.0**_^1_%STA- I_O**MSOS4.0**_^1_%CLR A_O**MSOS4.0**_^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**MS€€OS4.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 A€€DD 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- RTREC€€V,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_%SUB- 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* T€€EMUSE_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**_^1MODCOD 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**MS€€OS4.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**_^1BKSPRN 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**M€€SOS4.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**MSO€€S4.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- ESTAT1,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_,SE€€T 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_'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**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**M€€SOS4.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**MSOS4.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_%LD€€A- 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€N**_^1_%JMP* RELRD1_J**MSOS4.0**_^1NOT1_!JMP* RELRD2_J**MSOS4.0**_^1_%END_]_^__NPD1732U CSY/ C31 P€1_%NAM D1732U_'DECK-ID C31 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_*1732-1 UNBUFFERED 608/609 DRIVER_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 3_^1*_*LOW CORE EQU STATEMENTS_^1*_*LOW ORDER BITS MASK_^1_%EQU LOWBTS($3)_^1*_*HIGH ORDER BITS MASK_^1_%EQU HIH€€BTS($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*_*BI€€TS 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)_"DIAGNOS€€TIC 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) MS€€OS4.1_^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_%EXT ALT€€DEV_^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_%EJT_]_^1I1732U RTJ* HERE_)LOCALIZE_9**MSOS 4.1**_^1_%EQU LOC(*)_^1HERE_!NUM 0_^1_%STQ- I_^1_%LDQ- (ZERO),Q_^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_%LDA =XC1732U-LOC_C**MSOS 4.1**_^1_%AAQ A_,INCREMENT + DRIVER_^1_%STA- 2,I_*STORE ADDRESS OF CONTINUATOR_$**MSOS 4.1**_^1_%LDA =XE1732U-LOC_C**MSOS 4.1**_^1_%AAQ A_,INCREMENT + BASE_^1_%STA- 3,I_*STORE ADDRESS OF TIME OUT_(**MSOS 4.1**_^1_%LDA =XWAIT-LOC_"CALCULATE ABSOLUTE_^1_%AAQ A_-ADDRESSES OF ALL REQUESTS._^1_%STA DOWNWT+2_)*_^1_%LDA =XREWCK-LOC_%*_^1_%AAQ A_€€0*_^1_%STA REWA+2_+*_^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_%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_%LDA- ZROBIT+5_O0308_^1_%AND- ESTAT1,I_O0308_^1_%STA- ESTAT1,I_O0308_^1_%LDA* RW_^1_%€€INA -1_^1_%STA* RW_^1_%LDA- ETEMP2,I_$WAS REWINDING_^1_%ALS 4_,COMPLETE, SO UPDATE MOTION CODE_^1_%AND- HIHBTS+4_^1_%JMP MOTION+2_$GO EXECUTE RESR OF MOTION_^1FIND_!RTJ- (FNR)_(FIND NEXT REQUEST_0**MSOS 4.1**_^1_%JMP* NXTPT_(NO REQUEST THIS PHYSTB_^1_%LDQ- I_,CURRENT PHYSTB_^1_%STQ* LSTPT_(UPDATE LAST POINT_^1_%LDQ- EPTR,I_'LIST LOCATION IN Q_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND€€- LOWBTS+4_^1_%INA -14_*A = 0 IF MOTION_^1_%SAN NOMO_)SKIP IF NOT MOTION_70308_^1_%JMP MOTION_'REQUEST_B0308_^1NOMO_!JMP* XFER_^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_%RTJ RLAQ_)RELEASE AQ CHANNEL_/**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 WO€€RDS 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_%SA€€P 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_(PR€€USIZE_=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_M€€72*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 RECOR€€D_+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_%RTJ* PRUCMP_'CHK IF LAST PRU.LT.NOISE RECORD_$72*1609_^1NUMOK LDA- ESTAT1,I_O0311_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAN L€€WACAL_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_O0€€308_^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 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_^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 F€€WA_^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_^1N€€OTYET 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 N€€UM 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 UNPAC€€KED 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)_'STO€€RE 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_^1I€€N_#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 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_'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_'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_^1EOTFLG NUM 0_^1EOTCHK NUM 0_,RETURN EXIT_^1_%STA* ASVIT_^1_%STQ* QSVIT_^1_%LDA* EOTFLG_^1_%SAN HEREB4_^1_%LDA- ESTAT2,I_^1_%AND- BITMSK+9_$EOT BIT POSITION_^1_%SAN PRTEOT_^1H€€EREB4 LDA* ASVIT_^1_%LDQ* QSVIT_^1_%JMP* (EOTCHK)_$NO EOT RETURN_^1PRTEOT EQU PRTEOT(*)_^1_%ENA 1_^1_%STA* EOTFLG_'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_,CONT€€INUATOR_6**MSOS 4.1**_^1TAPC2 LDQ- EWES,I_'NO._?**MSOS4.0**_^1_%ENA 2_^1_%RTJ* OUT_^1_%LDA LSTPT_^1_%SAN EXPECT_'EXPECT INTERRUPT_^1_%JMP EXIT_^1EXPECT STA- I_^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_7022€€6_^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_^1NOMO1 EQU NOMO1(*)_O0226_^1_%ALS 5_,CHK 4 READ_?0226_^1_%SAP 1_^1_%JMP* NOMO2_^1_%LDA- E€€STAT2,I_^1_%ALS 4_^1_%SAP NOEF_^1_%JMP* ATEOF_^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*11€€31_^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 NOFILE_Q0308_^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 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_%JMP 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+ RLAQ_)RELE€€ASE 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_%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 BITS_^1_%RTJ* STRFST_'GO STORE_^1_%LLS 4_,4 BITS_^1_%RTJ* GETFWA_'GET 12_^1_%ALS 2_,PASS 2_^1_%LLS 6_,6 BITS_^1_%ALS 2_,PASS 2_^1_%LLS 6_,6 BITS_^1_%RTJ* STRFST_'STORE_^1_%JMP* NXTGET_'N€€EXT 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_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(*)_O€€0309_^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_%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 REA€€D._^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- T€€CKSUM,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 LDA =N0_^1CURPST EQU CURPST(*-1)_^1_%STA- I_^1_%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_^1C€€ALCUT NOP 0_^1_%SQN USNR_^1_%LDA =XREADBF-*+2_#RELATIVE ADD OF BUFFER_00312_^1_%JMP* SWAP1_^1USNR_!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 15_+SWITCH MODE RECOVERY CODE_^1BKSSP NOP 0_V0305_^1_%SAZ ERRMOT_^1_%LDA- BITMSK+12_N0305_^1_%JMP* WIGGLE_^1E€€RRMOT LDA- WRITFM_^1WIGGLE LDQ =XBKSPRN-REDY3_^1_%STQ- RTRECV,I_^1_%RTJ XCTMOT_Q0312_^1BKSPRN 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* 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_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_%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_%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_%LDA- ESTAT1,I_J70*1610_^1_%€€AND- ZROBIT+5_$CLEAR MOTION BIT_470*1610_^1_%AND- ZROBIT+6_$AND REWIND BIT_670*1610_^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_%NO€€P 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*_]_^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 GONXTP_'NO ADEV CALL, THIS IS DIAGNOSTIC **MSOS 4.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_^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_%SAZ DOMOT_R0308_^1_%STA* MOTITR_'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* DONEM_^1NODENS AND- LOWBTS+11 MASK OUT INTERAT€€IONS_^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_^1SUBMOT JMP* DONEM_(DONE OR DENSITY_)0_^1_%JMP* BKS€€P_)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_^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_%JMP- (DISP)_Q0308_^1EOPNOT ALS 10_+CHK 4 REW/UNLOAD_^1_%SAM DONEM_R0308_^1_%LDQ- I_,SCHEDULE REWIND CHECK_165*1395_^1REWA_!RTJ- ($F4)_O65*1395_^1_%NUM $5203_O65*1395_^1_%NUM 0_S65*1395_^1_%JMP NXTPT_O65*1395_^€€1_%EQU DONEM(*)_^1_%LDA* MOTITR_^1_%SAZ NODEN_R0308_^1_%AND- LOWBTS+1_^1_%TRA Q_^1_%LDA- BITMSK+2,Q_^1_%RTJ UNTSEL_^1NODEN LDA- ETEMP2,I_J72*1713_^1_%AND =N$7000_^1_%SAZ GOAWAY_L72*1713_^1_%JMP* DOMOT_(YES,MOTION REQUESTED_072*1713_^1GOAWAY LDA- ZROBIT+5_$NO MOTION_;72*1713_^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 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_%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* MOTITR_^1_%SAN NZITR_R0308_^1_%LDA- ETEMP2,I_^1_%ALS 4_^1_%AND- HIHBTS+4_^1_%STA- ETEMP2,I_^1_%JMP* DOMOT_^1NZITR INA -1_^1_%STA* MOTITR_^1_%SAZ 1_^1_%JMP* DOMOT_(MORE ITERATIONS THIS MOTION_^1_%JMP* GOAWAY_'DONE ALL ITERATIONS THIS MOTION_^1BUSYCK NUM 0_^1_%LDA- ESTAT2,I_O0308_^1_%AND- BITMSK+1_O0308_^1_%SAN ISBUSY_Q0308_^1NOBUSY L€€DA 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*_]_^1S€€2_#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_%JM€€P* (LPCHK)_P0308_^1LODYES ENA 0_,YES ON LOAD POINT_^1_%STA* MOTITR_'ZERO ITERATIONS_^1_%JMP* NXTMOT_'NEXT MOTION_^1_%SPC 5_^1REWCK STQ- I_^1_%LDQ- EWES,I_'EQUIP CODE_7**MSOS 4.1**_^1_%INQ 1_N**MSOS 4.1**_^1_%LDA- UNTMOD,I_$UNIT SELECT CODE_1**MSOS 4.1**_^1_%IIN 0_N**MSOS 4.1**_^1_%OUT AGRWCK-*_$SELECT IT_8**MSOS 4.1**_^1_%INQ -1_M**MSOS 4.1**_^1_%INP AGRWCK-*_$STATUS_;**MSO€€S 4.1**_^1_%EIN 0_N**MSOS 4.1**_^1_%ALS 5_,LOAD POINT TO BIT 15_-**MSOS 4.1**_^1_%SAM ATLOAD_I**MSOS 4.1**_^1AGRWCK NOP 0_,NOT A LOAD OR REJ OR BUSY_(**MSOS 4.1**_^1_%LDA =XREWCK-HERE_C**MSOS 4.1**_^1_%ADD HERE_K**MSOS 4.1**_^1_%STA* ADRREW_'ABSOL. ADDRESS_3**MSOS 4.1**_^1_%LDQ- I_,GET PDT ADDR._4**MSOS 4.1**_^1_%RTJ- (MONI)_'RESCHEDULE REWCK_1**MSOS 4.1**_^1_%NUM $5203_J**M€€SOS 4.1**_^1ADRREW ADC REWCK_J**MSOS 4.1**_^1_%JMP- (DISP)_I**MSOS 4.1**_^1ATLOAD EQU ATLOAD(*)_F**MSOS 4.1**_^1_%LDA- ESTAT1,I_$GOT LOAD POINT_^1_%AND- ZROBIT+6_$RESET REWIND BIT_^1_%STA- ESTAT1,I_^1_%LDQ- I_N**MSOS 4.1**_^1_%STQ* ADR_L**MSOS 4.1**_^1_%RTJ- (MONI)_^1_%VFD N1/0,N1/1,N5/16,N9/0_^1ADR_"ADC *_^1_%JMP- (DISP)_^1*_818 CARDS DELETED_465*1396_^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_%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 ORIGI€€NAL 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 SUBRO€€UTINE_^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 UP€€PER 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 AFFECTED_A*_^1************************************************************************_^1_%SPC 1_^1BCD2A 0_"0000_"ENTRY TO BCD TO ASCII CONVERSION SU€€BROUTINE_^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 S€€TORAGE 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 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 $261€€F_(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_%NU€€M $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_%NU€€M $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 $41€€01_'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_%N€šUM $293E_^1_%NUM $5B0B_^1_%NUM $3C0E_^1_%NUM $233A_^1_%SPC 2_^1************************************************************************_^1_%END_]_^__šPD1732B CSY/ C32 P€1_%NAM D1732B_'DECK-ID C32 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_*1732-1 BUFFERED 608/609 DRIVER_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 3_^1*_*LOW CORE EQU STATEMENTS_^1*_*LOW ORDER BITS MASK_^1_%EQU LOWBTS($3)_^1*_*HIGH ORDER BITS MASK_^1_%EQU HIHBT€€S($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)_"DIAGNOSTI€€C 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) MSOS€€4.1_^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_%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_^1CRXX_!LDQ- (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_%LDA =XC1732B-LOC_C**MSOS 4.1**_^1_%AAQ A_,INCREMENT + DRIVER_^1_%STA- 2,I_*STORE ADDRESS OF CONTINUATOR_$**MSOS 4.1**_^1_%LDA =XE1732B-LOC_C**MSOS 4.1**_^1_%AAQ A_,INCREMENT + BASE_^1_%STA- 3,I_*STORE ADDRESS OF TIME OUT_(**MSOS 4.1**_^1_%LDA =XWAIT-LOC_"CALCULATE ABSOLUTE_^1_%AAQ A_-ADDRESSES OF ALL REQUESTS._^1_%STA €€ DOWNWT+2_)*_^1_%LDA =XREWCK-LOC_%*_^1_%AAQ A_0*_^1_%STA REWA+2_+*_^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_%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- ESTAT1,I_$GET BIT 5_@0308_^1_%AND- BITMSK+5_O0308_^1_%SAZ FIND_S0308_^1_%LDA- ZROBIT+5_O0308_^1_%AND- ESTAT1,I_O0308_^1_%STA- ESTAT1,I_O0308_^1_%LDA* RW_^1_%INA -1_^1_%STA* RW_^1_%L€€DA- ETEMP2,I_$WAS REWINDING_^1_%ALS 4_,COMPLETE, SO UPDATE MOTION CODE_^1_%AND- HIHBTS+4_^1_%JMP MOTION+2_$GO EXECUTE RESR OF MOTION_^1FIND_!RTJ- (FNR)_(FIND NEXT REQUEST_^1_%JMP* NXTPT_(NO REQUEST THIS PHYSTB_^1_%LDQ- I_,CURRENT PHYSTB_^1_%STQ* LSTPT_(UPDATE LAST POINT_^1_%RTJ+ RQ1706_'REQUEST 1706_5**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%LDQ- EPTR,I_'LIST LOCATION IN Q_^1_%LD€€A- (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_%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_(PRUSIZ€€E_=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*1€€609_^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_+7€€2*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_%RTJ* PRUCMP_'CHK IF LAST PRU.LT.NOISE RECORD_$72*1609_^1NUMOK LDA- ESTAT1,I_O0311_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAN LWACA€€L_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_^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 EOTFL€€G_'END-OF-TAPE FLAG SET_^1_%SAZ 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* SAV€€FWA_^1_%LDA* LWA_^1_%IIN 0_,STORE_!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_%STA- (ZERO),Q_$RESTORE FWA-1_^1_%JMP FAILED+1_^1BB_#ENA 5_^1_%JMP* BA_^1RWMOTN NUM $11B_)READ,ALARM,EOP,CLR INT,CLR_*58*1131_^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 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 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_%J€€MP* (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_,CONTROLL€€ER 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_%RT€€J* 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_'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_'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_^1EOTFLG NUM 0_^1EOTCHK NUM 0_,RETURN EXIT_^1_%STA* ASVIT_^1_%STQ* QSVIT_^1_%LDA* EOTFLG_^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_'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_"C€€ONVERTER 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**_^1TAPC01 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_%ENA 2_^1_%RTJ* OUT_^1_%LDA LSTPT_^1_%SAN EXPECT_'EXPECTED INTERRUPT_^1_%JMP EXIT_)NO EXPECT, GO RELEASE CHANNEL/BUFFER_^1EXPECT STA- I_^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_^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_%JMP* ATEOF_^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 NOFILE_Q0308_^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* S€€NRADR_^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*15€€58_^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_%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 FWA BUFFER_^1_%CLR Q_^1_%LLS 8_,6 BITS_^1_%ALS 2_,PASS 2 0 BITS_^1_%LLS 6_,6 BITS_^1_%RTJ* GETFWA_'GET 12 BITS_^1_%ALS 2_,PASS 2 0 BIT€€S_^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* 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)_$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_R0226_^1_%SAP NONOIS_Q0308_^1NOISE RAO* NOISCK_Q0308_^1NONOIS JMP* (NOISCK)_O0308_^1_%SPC 2_O**MSOS4.0**_^1SNR_"NUM $2D2E_R0€€226_^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_%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_R033€€0_^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 C€€HKSUM_^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 BKSS€€P_^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 LDA =N0_^1CURPST EQU CURPST(*-1)_^1_%STA- I_^1_%CLR A_^1_%STA- RTRECV,I_^1_%LDA* ERRNO_(CHECK IF SWITCH MODE RECOVERY._^1_%SUB* MO€€DCOD_^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(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_^1BKSPRN 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* 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_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_%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_^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_%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_%LDA- ESTAT1,I_J70*1610_^1_%AND- ZROBIT+5_$CLEAR MOTION BIT_470*1610_^1_%AND- ZROBIT+6_$AND REWIND BIT_670*1610_^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+ 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 ERR€€OR_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 GONXTP_'NO ADEV CALL, THIS IS DIAGNOSTIC **MSOS 4.1**_^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_^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_%SAZ DOMOT_R0308_^1_%STA* MOTITR_'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* DONEM_^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- ETEMP€€2,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_^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 FOR€€WARD_$5_^1_%JMP* FLBK_)SEARCH FILE BACKWARD_#6_^1_%JMP* MOTSTR_'ADVANCE RECORD_*7_^1MCODS NUM $199,$299,$401,$601,$319,$399,$109_058*1131_^1MOTSTR LDA EOTFLG_^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_%JMP- (DISP)_Q0308_^1EOPNOT ALS 10_+CHK 4 REW/UNLOAD_^1_%SAM DONEM_R0308_^1_%LDQ- I_,SCHEDULE REWIND CHECK_165*1395_^1REWA_!RTJ- ($F4)_O65*1395_^1_%NUM $5203_O65*1395_^1_%NUM 0_S65*1395_^1_%JMP NXTPT_O65*1395_^1_%EQU DONEM(*)_^1_%LDA* MOTITR_^1_%SAZ NODEN_R0308_^1_%AND- LOWBTS+1_^1_%TRA Q_^1_%LDA- BITMSK+2,Q_^1_%RTJ UNTSEL_^1NODEN LDA- ETEMP2,I_J7€€2*1713_^1_%AND =N$7000_^1_%SAZ GOAWAY_L72*1713_^1_%JMP* DOMOT_(YES,MOTION REQUESTED_072*1713_^1GOAWAY LDA- ZROBIT+5_$NO MOTION_;72*1713_^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_O0€€308_^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 TERMINAT€€E_^1_%RTJ* BUSYCK_^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* MOTITR_^1_%SAN NZITR_R0308_^1_%LDA- ETEMP2,I_^1_%ALS 4_^1_%AND- HIHBTS+4_^1_%STA- ETEMP2,I_^1_%JMP*€€ DOMOT_^1NZITR INA -1_^1_%STA* MOTITR_^1_%SAZ 1_^1_%JMP* DOMOT_(MORE ITERATIONS THIS MOTION_^1_%JMP* GOAWAY_'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* (ST€€ATIN)_^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_%SPC 5_^1REWCK STQ- I_^1_€€%LDQ- EWES,I_'EQUIP CODE_7**MSOS 4.1**_^1_%INQ 1_N**MSOS 4.1**_^1_%LDA- UNTMOD,I_$UNIT SELECT CODE_1**MSOS 4.1**_^1_%IIN 0_N**MSOS 4.1**_^1_%OUT AGRWCK-*_$SELECT_;**MSOS 4.1**_^1_%INQ -1_M**MSOS 4.1**_^1_%INP AGRWCK-*_$STATUS_;**MSOS 4.1**_^1_%EIN 0_N**MSOS 4.1**_^1_%ALS 5_,LOAD POINT TO BIT 15_-**MSOS 4.1**_^1_%SAM ATLOAD_I**MSOS 4.1**_^1AGRWCK NOP 0_,NOT A LOAD OR REJ OR€€ BUSY_(**MSOS 4.1**_^1_%LDA =XREWCK-HERE_C**MSOS 4.1**_^1_%ADD HERE_K**MSOS 4.1**_^1_%STA* ADRREW_'ABSOL. ADDRESS_3**MSOS 4.1**_^1_%LDQ- I_,GET PDT ADDR._4**MSOS 4.1**_^1_%RTJ- (MONI)_'RESCHEDULE REWCK_1**MSOS 4.1**_^1_%NUM $5203_J**MSOS 4.1**_^1ADRREW ADC REWCK_J**MSOS 4.1**_^1_%JMP- (DISP)_I**MSOS 4.1**_^1ATLOAD EQU ATLOAD(*)_F**MSOS 4.1**_^1_%LDA- ESTAT1,I_$GOT LOAD POINT_^€€1_%AND- ZROBIT+6_$RESET REWIND BIT_^1_%STA- ESTAT1,I_^1_%LDQ- I_,PDT ADDRESS_6**MSOS 4.1**_^1_%STQ* ADR_*ADDRESS OF INDIRECT_.**MSOS 4.1**_^1_%RTJ- (MONI)_^1_%VFD N1/0,N1/1,N5/16,N9/0_^1ADR_"ADC *_^1_%JMP- (DISP)_^1*_818 CARDS DELETED_465*1396_^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* WA€€IT+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 BUFFER. *_^1*_]_'*_^1*_*CALL_)RTJ A2BCD_B*_^1*_]_'*_^1*_*WITH_!(A) = A€€DDRESS 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_^1L€€OOPA 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 CHARACT€€ER_^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 CONVERSI€€ON 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 AFFECTED_A*_^1************************************************************************_^1_%SPC 1_^1BCD2A 0_"0000_"ENTRY TO BCD TO ASCII CONVERSION SUBROUTINE_^1_%STA* BUFFER_'SAVE STARTING ADDRESS OF BUFFER_^1_%LDA- I_^1_%STA* SAVEI_(SAVE CONTENTS OF I REGISTER_€€^1LOOPB LDA =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$F€€F00_%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 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_!3€€3_'**_'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 $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_%NUM $233A_^1_%SPC 2_^1*********************************************€****************************_^1_%END_]_^__*PD17322 CSY/ C29 P€1_%NAM D17322_'DECK-ID C29 MSOS 4.1_-SUMMARY-079_^1*_$1732-2/615, E32/PEC MAG TAPE DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 3_^1*_*LOW CORE EQU STATEMENTS_^1_%EQU LOWBTS($3)_"LOW ORDER BITS MASK_^1_%EQU HIHBTS($12)_!HIGH ORDER BITS MASK_^1_%EQU €€ ZERO($22)_#LOCATION CONTAINING ZERO_^1_%EQU BITMSK($23)_!INDIVIDUAL BIT MASK_^1_%EQU ZROBIT($33)_!BIT EXCLUSION MASK_^1_%EQU FNR($B5)_$ADDRESS OF FIND NEXT REQUEST SUBROUTINE_^1_%EQU COMPRQ($B6)_!ADDRESS OF COMPLETE REQUEST SUBROUTINE_^1_%EQU DISP($EA)_#ADDRESS OF DISPATCHER_^1_%EJT_]_^1*_*PHYSICAL DEVICE TABLE LAYOUT_^1*_*REFER TO MASS STORAGE OPERATING SYSTEM 2.0 REFERENCE €€MANUAL_^1_%EQU EDIN(1)_%INITIATOR ADDRESS_^1_%EQU EDCN(2)_%CONTINUATOR ADDRESS_^1_%EQU EDPGM(3)_$ERROR ENTRY ADDRESS_^1_%EQU EDCLK(4)_$DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_'LOGICAL UNIT NUMBER ASSIGNED_^1_%EQU EPTR(6)_%LOCATION OF REQUEST PARAMETER LIST_^1_%EQU EWES(7)_%EQUIPMENT CODE FOR STATUS_^1_%EQU EREQST(8)_#REQUEST STATUS_^1_%EQU ESTAT1(9)_#DRIVER STATUS_^1_%EQU ECCOR(1€€0)_#NEXT LOCATION TO STOR DATA_^1_%EQU ELSTWD(11)_"LAST WORD + 1 TO STORE DATA_^1_%EQU ESTAT2(12)_"LAST EQUIPMENT STATUS_^1_%EQU ETEMP1(15)_"TEMPORARY STORAGE_^1_%EQU UNTMOD(16)_"UNIT AND MODE SELECT CODE_^1_%EQU DIAGLU(17)_"DIAGNOSTIC LOGICAL UNIT_***MSOS 4.1**_^1_%EQU ETEMP2(18)_"TEMPORARY STORAGE_^1_%EQU RTRECV(19)_M0226_^1_%EQU ECKSUM(20)_F**MSOS4.0**_^1_%EQU ERDIRC(21€€)_^1_%EQU TCKSUM(22)_^1_%EQU ELINK(23)_#PHYSTAB THREAD_3**MSOS 4.1**_^1_%EQU PHSREC(24)_"MAXIMUM PHYSICAL RECORD SIZE (7 TRACK) 1732-2_^1_%EQU ABUFF(25)_#PACK/UNPACK BUFFER ADDRESS_"(7 TRACK) 1732-2_^1_%SPC 2_O**MSOS4.0**_^1_%EQU NOISLN(9)_#MINIMUM ACCEPTABLE RECORD SIZE_^1_%EQU TERM($43)_N0309_^1_%EQU STOLSW($1F)_L0309_^1_%EQU WRITFM($30)_L0305_^1_%EQU TRYNBR(50)_"NUMBE€€R OF RECOVERY RETRIES._'**MSOS4.0**_^1_%EQU MODCOD(15)_"SWITCH MODE ERROR CODE_^1_%EQU ERRDEN(6)_#DENSITY REQUEST ERROR CODE_^1_%SPC 2_^1_%EXT MAS300_^1_%EXT MAKEQ_^1_%EXT ALTDEV_^1_%EXT* PACK_^1_%EXT* UNPK_^1_%EXT* ASCBCD_^1_%EXT* BCDASC_^1_%EXT* PRUCMP_^1_%EXT LOG_^1_%ENT I17322,C17322,E17322_^1_%EXT COMPV4_J**MSOS4.0**_^1_%EXT REWCK_(REWIND CHECK_^1_%EJT_]_^1*_]_^1*_$E€€NTRY FROM MASDRV/DBLDRV_^1*_]_^1MASTAP STQ- I_,SAVE PHYSTB ADDRESS_^1*_]_^1*_$NOTE: THE NEXT INSTRUCTION IS CHANGED BY DRIVER TO JMP* ADRPLG_^1*_,BEFORE EXIT TO MAS300_^1*_]_^1_%STA* LOCN_)SAVE LOCATION OF DRIVER_^1_%TRA Q_,TRANSFER LOCATION TO Q_^1_%LDA =XDUMBUF-MASTAP SET UP FWA-1_8PECTAPE_^1_%AAQ A_,OF ZERO LENGTH_8PECTAPE_^1_%STA ADVR+1_NPECTAPE_^1_%INA 1_,DUMMY BUFFER_:P€€ECTAPE_^1_%STA DUMBUF_'FOR ADVANCE RECORD MOTION_-PECTAPE_^1_%EJT_]_^1*_]_^1*_$SET UP PHYSTB ADDRESSES_^1*_]_^1_%ENA TAPINI-MASTAP_^1_%AAQ A_^1_%STA* ADRINT_'STORE ADDRESS OF INITIATOR_^1_%LDA =XC17322-MASTAP_^1_%AAQ A_,INCREMENT + DRIVER_^1_%STA* ADRCON_'STORE ADDRESS OF CONTINUATOR_^1_%LDA =XE17322-MASTAP_^1_%AAQ A_,INCREMENT + BASE_^1_%STA* ADRHNG_'STORE ADDRESS OF HANGUP€€_^1_%SPC 3_^1I17322 STQ- I_^1_%LDA- (ZERO),Q_^1_%STA XXX+1_(REFLECT LEVEL_^1ADRPLG LDA- 0_^1ADRINT ADC TAPINI_^1_%STA- 1,Q_*STORE ADDRESS OF INITIATOR IN PHYSTB_^1_%LDA- 0_^1ADRCON ADC C17322_^1_%STA- 2,Q_*STORE ADDRESS OF CONTINUATOR IN PHYSTB_^1_%LDA- 0_^1ADRHNG ADC E17322_^1_%STA- 3,Q_*STORE ADDRESS OF HANGUP IN PHYSTB_^1_%LDA- ELINK,Q_%PICK UP ADDRESS OF NEXT PHYSTB_^1_%TR€€A Q_,SAVE IN Q_^1_%SUB- I_,SUBTRACT ADDRESS OF START PHYSTB_^1_%SAZ TAPINI_'SKIP IF DONE_^1_%JMP* ADRPLG_'GO BACK AND SET UP NEXT PHYSTB_^1_%EJT_]_^1*_]_^1*_$DRIVER INITIATOR ENTRY FOR ALL EXCEPT FIRST REQUEST_^1*_]_^1TAPINI STQ- I_,SAVE ADDRESS OF PHYSTB_^1_%LDA- 0_^1LSTPT NUM 0_,ADDRESS OF CURRENT PHYSTB_^1_%SAZ NOTBSY_Q0308_^1_%JMP- (DISP)_Q0308_^1_%SPC 2_^1LOCN_!ADC MAST€€AP_'DRIVER LOCATION_^1ERRCNT NUM 0_^1_%SPC 2_^1NOTBSY STA* ERRCNT_'RESET COUNTER_^1_%LDA- I_^1_%STA* LSTPT_^1TSTRWD LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+6_$GET BIT 6 OF ESTAT1,I_40308_^1_%SAZ NORWD_(CHK 4 REWIND_=0308_^1_%JMP* NXTPT_K**MSOS4.0**_^1NORWD LDA- ESTAT1,I_$GET BIT 5_@0308_^1_%AND- BITMSK+5_O0308_^1_%SAZ FIND_S0308_^1_%LDA- ZROBIT+5_O0308_^1_%AND- ESTAT1,I_O0308_^1_%€€STA- ESTAT1,I_O0308_^1_%LDA- ETEMP2,I_$WAS REWINDING_^1_%ALS 4_,COMPLETE, SO UPDATE MOTION CODE_^1_%AND- HIHBTS+4_^1_%JMP MOTION+2_$GO EXECUTE REST OF MOTION_^1FIND_!RTJ- (FNR)_(FIND NEXT REQUEST_^1_%JMP* NXTPT_(NO REQUEST THIS PHYSTB_^1_%LDQ- I_,CURRENT PHYSTB_^1_%STQ* LSTPT_(UPDATE LAST POINT_^1_%LDQ- EPTR,I_'LIST LOCATION IN Q_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- LOWBTS+4_^1_€€%INA -14_*A = 0 IF MOTION_^1_%SAN NOMO_)SKIP IF NOT MOTION_70308_^1_%JMP MOTION_'REQUEST_B0308_^1NOMO_!JMP* XFER_^1_%EJT_]_^1NXTPT LDA- ELINK,I_%GET NEXT PHYSTB_^1_%STA- I_^1_%EOR* LSTPT_^1_%SAZ EXIT_)SKIP IF END OF THREAD_40308_^1_%LDA- EREQST,I_$IS AN ERROR PENDING ON THIS UNIT_^1_%AND- BITMSK+14_^1_%SAN BACK_^1_%JMP* TSTRWD_^1BACK_!JMP* NXTPT_^1EXIT_!CLR A_^1_%STA* LSTPT_€€(SET DRIVER NOT BUSY_^1_%LDA- 0_^1_%ADC $1800+ADRPLG-MASTAP-1_*(JMP* ADRPLG-MASTAP-1)_^1_%STA MASTAP+1_^1_%JMP MAS300_^1_%SPC 3_^1ZEROWD ENA 31_+ZERO WORDS ERROR_668*1517_^1_%JMP FAILED_N68*1517_^1_%EJT_]_^1XFER_!CLR A_^1_%CLR Q_,SET FORWARD MOTION_^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* M60€€8_S0308_^1_%SPC 3_^1M609_!LDA- ECCOR,I_^1_%STA FWA_*SET FWA TO USERS BUFR_^1_%SUB- ELSTWD,I_^1_%INA NOISLN-1_$LOGIC REC.LT.NOISE REC_072*1609_^1_%SAM 1_S72*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_R0€€329_^1_%SPC 3_^1M608_!LDA- ABUFF,I_%PACK/UNPACK BUFFER IN PHYSTB_*MSOS4.1_^1_%STA* FWA_*SET FWA TO FIRST ALLOC_^1_%LDA- ELSTWD,I_$LAST ADDRESS_^1_%SUB- ECCOR,I_%FIRST ADDRESS_^1_%INA -NOISLN_%LOGIC REC.LT.NOISE RECORD_+*72*1609*_^1_%SAP 1_Q*72*1609*_^1_%JMP* ZEROWD_'YES._^1_%INA NOISLN_L*72*1609*_^1_%STA* NUMBR_(NUMBER WORDS TO TRANSFER_^1_%LDA- PHSREC,I_$MAX PHYSICAL RECORD SI€€ZE_.MSOS4.1_^1_%SUB- 0_,2 WORD INSTRUCTION_^1NUMBR NUM 0_,NUMBER OF WORDS TO TRANSFER_^1_%SAP NUMOK_(NUMBER WORDS LESS THAN OR EQUAL PHYSICAL REC._^1_%LDA* NUMBR_^1_%RTJ PRUCMP_'CHK IF LAST PRU.LT.NOISE RECORD_$*72*1609*_^1_%STA* NUMBR_^1NUMOK LDA- ESTAT1,I_O0311_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAN LWACAL_Q0308_^1_%LDA* NUMBR_^1_%MUI- BITMSK+2_$NUMBER * 4_^1_%DVI- LOWBTS+1€€_$/3_^1_%SQZ 1_,NO REMAINDER_^1_%INA 1_,SOME REMAINDER, TALLY QUOTIENT_^1_%STA* NUMBR_^1LWACAL LDA* FWA_^1_%ADD* NUMBR_^1_%STA* LWA_*LWA = FWA + NUMBER OF WORDS_^1_%LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+0_$BIT 0_D0308_^1_%SAN WRITEI_Q0308_^1_%ENA 4_^1_%STA* PRITYC_'PARITY ODD FOR BINARY_^1_%LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAZ RREC_S0308_^1_%ENA 2_^1_%STA*€€ PRITYC_^1_%ENA 0_^1RREC_!JMP* WREC1_^1_%SPC 3_^1WRITEI ENA 4_^1_%STA* PRITYC_'SET PARITY CODE FOR ODD_^1_%LDA- ESTAT1,I_O0308_^1_%AND- BITMSK+3_$BIT 3_D0308_^1_%SAN WASC_S0308_^1_%LDA* FWA_^1_%LDQ* LWA_^1_%RTJ UNPK_)CONVERT BINARY TO ASSY/DASSY_^1_%JMP* WREC_^1WASC_!LDA* FWA_^1_%LDQ* LWA_^1_%RTJ ASCBCD_'CONVERT ASCII TO BCD FOR WRITE_^1_%ENA 2_^1_%STA* PRITYC_'SET PARITY CO€€DE FOR EVEN_^1WREC_!RTJ CHKSUM_'GO CHECK SUM RECORD 1ST 16_/0308_^1_%STA- TCKSUM,I_^1_%ENA 1_V0329_^1WREC1 STA* MOTIDX_Q0329_^1_%EJT_]_^1IOXFER LDA* PRITYC_'PARITY CODE 1, OR 2_^1_%CLR Q_,SET FORWARD MOTION_^1_%RTJ* UNTSEL_^1_%ALS 15_^1_%SAM TAPRDY_^1_%JMP NORDY_^1TAPRDY LDA- ESTAT1,I_^1_%AND- BITMSK+0_$BIT 0_D0308_^1_%SAZ IOCONT_Q0308_^1_%RTJ RINGCK_^1IOCONT LDQ* MOTIDX_%€€MOTION CODE INDEX_^1_%LDA* RWMOTN,Q_^1_%STA* FUNCT1_'SET FUNCTION CODES_^1_%LDQ* FWA_^1_%INQ -1_^1_%STQ* FWADR_^1_%LDA- (ZERO),Q_^1_%STA* SAVFWA_^1_%LDA* LWA_^1_%IIN 0_,STORE_!LWA+1 IN FWA-1_^1_%STA- (ZERO),Q_^1_%TRQ A_S1732-2_^1_%LDQ- EWES,I_^1_%INQ 2_S1732-2_^1_%OUT BUFREJ-*_$LOAD FWA-1_<1732-2_^1NMARD INP BUFREJ-*_^1_%SUB* FWA_*DIFFERENCE NMA,FWA_^1_%SAP 1_Q70*1611_^1_%J€€MP* NMARD_^1_%LDA- 0_,2 WORD INSTRUCTION_^1SAVFWA NUM 0_,USERS FWA-1_^1_%LDQ- 0_,2 WORD INSTRUCTION_^1FWADR NUM 0_S1732-2_^1_%STA- (ZERO),Q_$RESTORE CONTENTS OF FWA-1_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%LDQ- EWES,I_^1_%LDA- 0_,2 WORD INSTRUCTION_^1FUNCT1 NUM 0_,READ/WRITE MOTION FUNCTION_^1_%RTJ* OUT_*READ/WRITE MOTION_51732-2_^1_%ENA 10_^1_%STA- EDCLK,I_^1_%JMP- (DISP)_^1_%EJT_€€]_^1BUFREJ JMP* BB_+INTERNAL REJECT_^1_%ENA 6_,EXTERNAL REJECT_^1BA_#STA- ETEMP2,I_$SAVE AS ERROR CODE_^1_%LDA* SAVFWA_^1_%LDQ* FWADR_^1_%STA- (ZERO),Q_$RESTORE FWA-1_^1_%JMP FAILED+1_^1BB_#ENA 5_^1_%JMP* BA_^1_%SPC 5_^1RWMOTN NUM $118_)READ,EOP,ALARM_81732-2_^1_%NUM $98_*WRITE,EOP,ALARM_71732-2_^1MOTIDX NUM 0_,AN INDEX INTO RWMOTN_^1PRITYC NUM 1_,PARITY CODE_^1FWA_"NUM 0_^€€1LWA_"NUM 0_^1SAVLWA NUM 0_V0308_^1SAVEIT NUM 0_Q72*1658_^1_%SPC 5_^1IN_#NUM 0_,RETURN ADDRESS OF IN SUBROUTINE_^1_%INP INRJT-*_^1_%JMP* (IN)_)RETURN_^1_%SPC 5_^1INRJT JMP* INCODE_^1_%ENA 6_,EXTERNAL REJECT CODE_^1FAILX JMP FAILED_'GO TO FAILED ROUTINE_^1INCODE ENA 5_^1_%JMP* FAILX_^1_%SPC 5_^1OUT_"NUM 0_,RETURN ADDRESS OF OUT SUBROUTINE_^1_%OUT INRJT-*_^1_%JMP* (OUT€€)_(RETURN_^1_%EJT_]_^1UNTSEL NUM 0_^1_%SAN US1_*SKIP IF BINARY OR BCD MODE SELECTED_"PECTAPE_^1_%ENA 4_,FAKE BINARY MODE IF NONE_.PECTAPE_^1US1_"ADD- UNTMOD,I_$ADD UNIT AND MODE SELECT BITS_)PECTAPE_^1_%QLS 15_+MOTION DIRECTION TO Q15_/NONSTOP_^1_%AAQ A_,COMBINE WITH CONNECT CODE_-NONSTOP_^1_%STA* CONCOD_^1_%EOR* LSTCON_'CHECK AGAINST LAST CONNECT AND DIRECTION_^1_%SAN US2_*S€€KIP IF NOT SAME TO CONNECT_^1_%JMP* USSTAT_'SAME, STATUS ONLY_^1US2_"LDA =N32200_%5 MILLISECOND DELAY_^1_%STA* DELAY1_^1_%LDQ- EWES,I_'PICK UP EQIIP CODE_^1US3_"RTJ* IN_^1_%ALS 3_,CONTROLLER ACTIVE IN A15_^1_%SAP SLTIT_(CONTROLLER NOT ACTIVE_^1_%RAO* DELAY1_'BUMP DELAY COUNTER_^1_%SOV TOOLNG_'SKIP IF DELAY EXPIRED_^1_%JMP* US3_*GO BACK AND RECHECK_^1SLTIT INQ 1_^1_%LDA* CONCO€€D_^1_%RTJ* OUT_^1_%STA* LSTCON_'SAVE CONNECT CODE FOR NEXT TIME_'NONSTOP_^1USSTAT RTJ* STATUS_'UPDATE STATUS_9NONSTOP_^1_%JMP* (UNTSEL)_$RETURN TO USER_^1_%SPC 3_^1TOOLNG ENA 0_,TIMEOUT ERROR CODE_^1_%JMP FAILED_'REPORT ERROR_^1_%SPC 2_^1CONCOD NUM 0_^1LSTCON NUM 0_,PREVIOUS CONNECT AND DIRECTION_(NONSTOP_^1DELAY1 NUM 0_,DELAY COUNTER_^1_%EJT_]_^1*_]_^1*_*STATUS BIT POSITION€€S_^1*_]_^1*_$BIT_/MEANING_^1*_%0_*READY_^1*_%1_*BUSY_^1*_%2_*CORRECTED DROPOUT_^1*_%3_*WRONG POSTAMBLE_^1*_%4_*END OF OPERATION_^1*_%5_*ALARM_^1*_%6_*LOST DATA_^1*_%7_*CONNECTED TO PE TRANSPORT_^1*_%8_*PARITY ERROR_^1*_%9_*END OF TAPE_^1*_$10_*LOAD POINT_^1*_$11_*FILE MARK_^1*_$12_*556 BPI_^1*_$13_*800 BPI_^1*_$14_*SEVEN TRACK_^1*_$15_*WRITE ENABLE_^1*_]_^1_%SPC 5_^1STATUS NUM 0_€€,READ STATUS 1, 2 AND STORE IN ESTAT2_^1_%LDQ- EWES,I_^1_%INQ 1_^1_%RTJ* IN_+READ STATUS 2_^1_%CLR Q_^1_%LLS 9_,BIT 7 TO Q_^1_%QLS 3_,ZERO 3 BITS_^1_%LLS 5_,BITS 2-6 TO Q_^1_%QRS 1_,WASTE BIT_^1_%LRS 2_,REPOSITION A BITS_^1_%QLS 2_,REPOSITION Q BITS_^1_%EAQ Q_,COMBINE IN A_^1_%STA- ESTAT2,I_^1_%LDQ- EWES,I_^1_%RTJ* IN_+READ STSUS 1_^1_%AND =N$F73_'MASK OFF UNWANTED BITS_^€€1_%ADD- ESTAT2,I_$COMBINE WITH STATUS 2_^1_%STA- ESTAT2,I_^1_%RTJ* EOTCHK_N73*1728_^1_%JMP* (STATUS)_L73*1728_^1_%EJT_]_^1ASVIT NUM 0_S73*1728_^1QSVIT NUM 0_S73*1728_^1EOTFLG NUM 0_S73*1728_^1_%SPC 3_S73*1728_^1EOTCHK NUM 0_S73*1728_^1_%STA* ASVIT_O73*1728_^1_%STQ* QSVIT_O73*1728_^1_%LDA* EOTFLG_N73*1728_^1_%SAN HEREB4_N73*1728_^1_%LDA- ESTAT2,I_L73*1728_^1_%AND- BITMSK+9_$€€EOT BIT POSITION_673*1728_^1_%SAN PRTEOT_N73*1728_^1HEREB4 LDA* ASVIT_O73*1728_^1_%LDQ* QSVIT_O73*1728_^1_%JMP* (EOTCHK)_$NO END OF TAPE, RETURN_073*1728_^1PRTEOT ENA 1_S73*1728_^1_%STA* EOTFLG_'SET EOT FLAG_:73*1728_^1_%LDQ- EWES,I_N73*1728_^1_%RTJ* OUT_*CLEAR CONTROLLER_673*1728_^1_%ENA -0_R73*1728_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_073*1728_^1_%LDA- EREQST,I_L73*1728_^1€€_%AND- $41_*($BFFF)_?73*1728_^1_%EOR- BITMSK+14_#SET BIT 14 OF EREQST,I (WORD 8)_'73*1728_^1_%STA- EREQST,I_L73*1728_^1_%JMP CMPRD_O73*1728_^1_%EJT_]_^1C17322 STQ- I_^1_%LDQ- EWES,I_^1TAPBSY RTJ* IN_+GET STATUS_,*****TEMPORARY*****_^1_%AND- BITMSK+1_$GET BUSY BIT_******TEMPORARY*****_^1_%SAZ 1_,SKIP IF NOT BUSY_%*****TEMPORARY*****_^1_%JMP* TAPBSY_'GO BACK AND RECHECK_"*****TEMPO€€RARY*****_^1_%ENA 2_^1_%RTJ* OUT_*CLEAR INTERRUPTS_^1_%INQ 2_S1732-2_^1_%RTJ* IN_^1_%LDQ LSTPT_(CHECK FOR GHOST INT AND SET LAST_^1_%SQN TAPC06_'PHYSTB ADDRESS. SKIP IF NO GI._^1_%JMP EXIT_)EXIT IF NOT EXPECTED_2ECL PSR_^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_%S€€AP UPDAT_(NO MOTION REQUEST_372*1658_^1_%JMP* TAPC2_(MOTION REQUEST_672*1658_^1UPDAT LDA* SAVEIT_L72*1658_^1_%LDQ* LWA_O72*1658_^1_%STQ* SAVLWA_L72*1658_^1_%STA* LWA_O72*1658_^1_%LDQ* FWA_*FWA OF BUFFER._4**MSOS4.0**_^1_%RTJ COMPV4_'CHECK IF CURRENT ADDRESS IS WITHIN **MSOS4.0**_^1_%SAZ TAPC1_(BUFFER BOUNDARY._2**MSOS4.0**_^1_%SAP TAPC1_K**MSOS4.0**_^1BUFERR ENA 37_^1_%JMP F€€AILED_J**MSOS4.0**_^1TAPC1 LDQ* LWA_*CURRENT ADDRESS._2**MSOS4.0**_^1_%LDA* SAVLWA_'BUFFER LWA._7**MSOS4.0**_^1_%RTJ COMPV4_J**MSOS4.0**_^1_%SAZ TAPC2_K**MSOS4.0**_^1_%INA 0_O**MSOS4.0**_^1_%SAN TAPC2_K**MSOS4.0**_^1_%JMP* BUFERR_'YES_^1TAPC2 ENA -0_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%RTJ* STATUS_N73*1728_^1_%LDQ- ESTAT2,I_^1_%LRS 1_^1_%SAM REDY_S0308_^1NORDY ENA€€ 14_^1_%JMP FAILED_^1REDY_!LDA- RTRECV,I_$CHK 4 RECOVERY I/O_70226_^1_%SAZ REDY1_(SKIP IF NOT RECOV_80226_^1_%STA* REDY3_(SET RECV RETN_<0304_^1_%JMP REDY1_(EXIT TO RECOV_^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_^1NOMO1 LRS 6_,CHK 4 LOST DATA_:0226€€_^1_%SAP NOMO3_(NO LOST DATA_=0226_^1_%ENA 1_,LOST DATA ERROR CODE_^1_%JMP* RECVR_^1NOMO3 LRS 2_,CHK 4 PARITY_=0226_^1_%SAM RECV1_^1_%JMP* NOPAR_^1RECV1 ENA 3_,PARITY ERROR CODE_^1_%JMP* RECVR_(EXIT TO RECOVERY_90226_^1NOPAR LDA FWA_O72*1131_^1_%STA* SNRADR_L72*1131_^1_%LDA LWA_O72*1131_^1_%RTJ* NOISCK_'CHECK FOR SNR_772*1131_^1_%JMP* RECV2_(NOT SNR_=72*1131_^1IODO_!LDA €€SAVLWA_^1_%STA LWA_O72*1131_^1_%JMP IOXFER_L72*1131_^1RECV2 LDA- ESTAT1,I_J72*1131_^1_%AND- BITMSK+0_^1_%SAZ NOWRIT_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_^1NOWRIT LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK 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_^1READC LDA- ESTAT2,I_^1_%ALS 4_,FILE MARK STATUS IN A15_^1_%SAP NOFILE_Q0308_^1_%LDA- EREQST,I_^1_%ADD- BITMSK+14_#BIT 14_C0308_^1_%STA- EREQST,I_O0308_^1_%JMP* CMPRD_^1NOFILE LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK IN A15_^1_%SAM CKMOD_R0308_^1_%JMP* WRITEC_Q0308_^1CKMOD LDQ- ESTAT1,I_^1_%LRS 4_,ASC BIT IN A15_^1_%SAP CKMOD1_'SKIP IF B€€INARY MODE_^1_%JMP* BCDASK_^1CKMOD1 LDA- ECCOR,I_^1_%STA* SNRADR_^1_%LDA FWA_^1_%LDQ LWA_^1_%RTJ PACK_)CONVERT ASSY/DASSY TO BINARY_^1_%LDA- ECCOR,I_^1_%RTJ* NOISCK_^1_%JMP* WRITEC_^1_%LDA* SNRADR_^1_%STA- ECCOR,I_^1_%JMP* IODO_^1_%SPC 2_^1SNRADR NUM 0_S68*1558_^1_%SPC 2_^1BCDASK LDA FWA_^1_%LDQ LWA_^1_%RTJ BCDASC_^1_%SPC 2_^1WRITEC LDQ- ESTAT1,I_^1_%LRS 2_,FORMAT BIT IN€€ A15_^1_%SAM COMPL_R0308_^1_%LDA- ELSTWD,I_^1_%SUB- ECCOR,I_%GET DIFFERENCE OF LAST AND FIRST_^1_%SAZ COMPL_R0308_^1_%JMP XFER_S0308_^1COMPL LDA- ESTAT1,I_^1_%AND- BITMSK+5_^1_%SAN COMPLT_Q0308_^1CMPRD RTJ MAKEQ_^1COMPLT RTJ- (COMPRQ)_$COMPLETE THE REQUEST_^1_%JMP FIND_^1NOISCK NOP 0_V0311_^1_%SUB* SNRADR_^1_%INA -NOISLN_P0226_^1_%SAZ NOISE_R0226_^1_%SAP NONOIS_Q0308_^1€€NOISE RAO* NOISCK_Q0308_^1NONOIS JMP* (NOISCK)_O0308_^1_%SPC 3_^1RECVR 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* COMPL_^1_%SPC 3_^1TIMES NUM 0_V0311_^1TRIES NUM 0_^1_%SPC 3_^1RECV_!LDQ- ELU,I_^1_%QLS 6_^1_%ADQ ERRNO_^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_%RT€€J CALAD_R0330_^1DUMRD ENQ 0_V0304_^1_%RTJ* SWAP_*SET UP READ._^1_%RTJ CALAD_R0330_^1_%LRS 8_,CHECK FOR PARITY._^1_%SAP READOK_'SKIP IF NO ERROR_90304_^1CORRFD LDA- ERDIRC,I_$FD Z A_C0304_^1_%ALS 1_V0304_^1_%SAP SHFT_)MID-RECV CORR NEEDED_50304_^1_%STA- ERDIRC,I_O0325_^1_%JMP* CLRBKP_Q0311_^1SHFT_!ALS 1_V0304_^1_%STA- ERDIRC,I_O0325_^1_%JMP* WRCVR_R0311_^1READOK RTJ CHKSUM€€_^1_%EOR- 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_(WRITE SNR_^1_%LRS 8_,CHECK FOR PARITY._^1_%SAP WRTEOF_'SKIP IF NO PARITY_^1_%RTJ BKSSP_^1_%CLR A_,SET EOF FLAG_^1_%RTJ BKSSP_(WRITE EOF OVER BAD SPOT_^1_%RTJ BKSSP_(BKSSP EOF_^€€1_%JMP* RTYSNR_'RETRY WRITING THE SNR._,**MSOS4.0**_^1WRTEOF LDA* TRIES_^1_%SUB =XTRYNBR_^1_%SAN CONEOF_^1_%JMP* LPRTN_^1CONEOF RAO* TRIES_^1_%ENA 0_^1_%RTJ* BKSSP_^1_%RTJ* BKSSP_^1_%ENQ 1_V0309_^1_%RTJ* SWAP_S0304_^1_%RTJ* CHKSUM_(CHECK SUM SNR._^1_%STA- TCKSUM,I_^1_%RTJ* CALAD_^1_%LRS 8_,CHECK FOR PARITY._^1_%SAP ADVRCV_Q0310_^1_%RTJ* BKSSP_^1_%JMP* WRTEOF_^1ADVRCV RTJ RES€€WAP_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_O0330_^1_%RTJ* CHKSUM_^1_%STA- TCKSUM,I_^1_%RTJ* CALAD_R0330_^1_%RTJ STUSCK_^1_%JMP* ADVRV_R0330_^1_%LDA* ERRNO_^1_%JMP RECVR_R0330_^1ADVRV CLR A_^1_%STA- RTRECV,I_^1_%LDA* ERRNO_(CHECK IF SWITCH MODE RECOVERY._^1_%INA -MODCOD_^1_%SAZ YESMOD_'SKIP IF MODE RECOVERY,_^1_%JMP NOPAR_^1YESMOD LDA- ESTAT2,I_$SET PSEUDO PE BIT._^1_%EOR- BITMS€€K+8_^1_%STA- ESTAT2,I_^1_%LDA- EREQST,I_$SET V BIT 14._^1_%EOR- BITMSK+14_^1_%STA- EREQST,I_^1_%JMP CMPRD_^1_%SPC 3_^1CKBKSP LDA BKSPCT_^1_%INA -3_^1_%SAM CKBK1_^1_%JMP* DUMRD_^1CKBK1 LDA NBRBSP_^1_%INA -2_^1_%SAZ CKBK2_^1_%JMP LPRTN_^1CKBK2 JMP* CKSMOK_^1_%SPC 3_^1SWAP_!NOP 0_V0308_^1_%STQ MOTIDX_Q0308_^1_%RTJ* CALCUT_^1CALCUT NOP 0_^1_%SQN USNR_^1_%ENA READBF-CAL€€CUT RELATIVE ADDRESS OF BUFFER_^1_%JMP* SWAP1_^1USNR_!ENA SNR-CALCUT_"RELATIVE ADDRESS OF SNR_^1SWAP1 ADD* CALCUT_Q0312_^1_%STA FWA_^1_%ADD* LWATAB,Q_O0308_^1_%STA LWA_T0308_^1_%JMP* (SWAP)_Q0308_^1_%SPC 3_^1ERRNO NUM 0_,ERROR NUMBER_^1LWATAB NUM 8_V0304_^1_%NUM 2_V0304_^1READBF BSS READBF(8)_N0311_^1SNR_"NUM $2D2E_R0226_^1_%NUM $2D2E_R0226_^1_%SPC 3_^1SAVORG NOP 0_V0€€308_^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_^1_%SPC 3_^1TEMIDX NUM 0_^1TEMLWA NUM 0_^1TEMFWA NUM 0_^1_%SPC 3_^1CALAD NOP 0_V0330_^1_%LDA =XALLRTN-REDY3_I0330_^1_%STA- RTRECV,I_O0330_^1_%JMP IOXFER_^1ALLRTN JMP* (CALAD)_P0330_^1_%S€€PC 3_^1CHKSUM NOP 0_V0308_^1_%LDA LWA_T0304_^1_%INA -1_+LWA+1 TO LWA_^1_%SUB FWA_*CALCULATE NBR OF WORDS_30304_^1_%TRA Q_,Q=INDEX_B0304_^1_%INA -8_^1_%SAM BEGNCK_Q0308_^1_%ENQ 7_^1BEGNCK CLR A_,ZERO COUNTERS_;0308_^1GTBITS ADD (FWA),Q_^1_%SQZ DONBIT_^1_%INQ -1_^1_%JMP* GTBITS_^1DONBIT JMP* (CHKSUM)_^1_%SPC 3_^1BKSSP NOP 0_V0305_^1_%SAZ ERRMOT_^1_%LDA- BITMSK+12_N0€€305_^1_%JMP* WIGGLE_^1ERRMOT LDA- WRITFM_^1WIGGLE LDQ =XBKSPRN-REDY3_^1_%STQ- RTRECV,I_^1_%RTJ XCTMOT_Q0312_^1BKSPRN LDA- ZROBIT+5_%CLEAR MOTION FLAG_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* (BKSSP)_^1_%SPC 3_^1SWMOD NOP 0_V0309_^1_%LDA PRITYC_Q0311_^1_%INA -2_+SWITCH_C0309_^1_%SAN BCDING_'MODE_E0309_^1_%ENA 4_V0309_^1BCDING STA PRITYC_Q0309_^1_%JMP* (SWMOD)_P0309_^1_€€%SPC 3_^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_^1_%SPC 3_^1TOTLSW NUM 0_V0311_^1_%SPC 3_^1ADVREV JMP ADVRV_^1_%SPC 3_^1RRCVR LDA SAVLWA_Q0309_^1_%STA LWA_T0309_^1_%LDA- STOLSW_Q0310_^1_%STA* TOTLSW_Q0311_^1LOPAGN CLR A_,S€€ET SWS_B0305_^1_%STA* PINTCT_^1_%ENA -0_^1RRCVR1 RTJ* BKSSP_(BKSP_E0305_^1_%RTJ* CALAD_R0330_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* ADVREV_^1_%LDA- 0_,THIS LOOP COMPLETE_^1PINTCT NUM 0_^1_%EOR- TERM_S0309_^1_%SAZ STEP2_R0305_^1_%RAO* PINTCT_^1_%JMP* RRCVR1_'CONTINUE_A0305_^1STEP2 STA* PINTCT_^1_%LDA- ESTAT2,I_^1_%ALS 1_^1_%SAM SWCHMD_^1_%JMP* NONEED_^1SWCHMD RTJ* SWMOD_^1_%RTJ*€€ BKSSP_(BKSP_E0305_^1_%RTJ* CALAD_R0330_^1_%RTJ* STUSCK_^1_%JMP* MODERR_Q0305_^1_%RTJ* BKSSP_R0305_^1_%RTJ* CALAD_R0330_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* MODERR_'ADVISE OF MODE ERR_70305_^1_%RTJ* SWMOD_R0305_^1NONEED RTJ* BKSSP_^1_%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 R€€TJ* CALAD_^1RELRD1 RTJ* CALAD_^1_%RTJ* STUSCK_^1_%JMP* ADVREV_^1_%LDA* TOTLSW_Q0330_^1_%SAP DONOW_(SKIP IF DONE_=0305_^1_%ALS 1_V0305_^1_%STA* TOTLSW_Q0330_^1_%JMP* LOPAGN_'GO LOOP AGAIN_<0305_^1DONOW LDA ERRNO_^1_%ENQ 0_^1_%STQ- RTRECV,I_^1_%JMP* FAILED_Q0305_^1_%SPC 3_^1MODERR ENA MODCOD_'SET SWITCH MODE CODE._^1_%STA ERRNO_^1_%JMP* ADVREV_^1_%SPC 3_^1STUSCK NOP 0_V0305€€_^1_%LDA- ESTAT2,I_O0330_^1_%ALS 7_V0309_^1_%SAP GODST_(SKIP ID GOOD_=0305_^1_%RAO* STUSCK_Q0330_^1GODST JMP* (STUSCK)_O0305_^1_%SPC 3_^1CKPINT NOP 0_^1_%LDA- ESTAT2,I_^1_%ALS 5_^1_%SAM PINT_^1_%JMP* (CKPINT)_^1PINT_!LDA* PINTCT_^1_%SAN NOT1_^1_%STA* TOTLSW_^1_%JMP* RELRD1_^1NOT1_!JMP* RELRD2_^1_%EJT_]_^1E17322 LDA LSTPT_^1_%STA- I_^1_%ENA 1_Q70*1611_^1_%LDQ- EWES,I_'CLEA€€R 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 FAILURES_^1_%ENA 0_Q72*1658_^1_%STA MOTITR_'CLR A15 WRD4 IF SET_172*1658_^1_%EIN 0_^1_%LDA- EREQST,I_O0308_^1_%ADD- BITMSK+14_N0308_^1_%STA- EREQST,I_O0308_^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+5_$CHECK MOTION_870*1610_^1_%SAZ NOTRW_^1_%LDA- ESTAT1,I_J70€€*1610_^1_%AND- ZROBIT+5_$CLEAR MOTION BIT_470*1610_^1_%AND- ZROBIT+6_$AND REWIND BIT_670*1610_^1_%STA- ESTAT1,I_$CLEAR REWIND BIT_665*1395_^1NOTRW RTJ MAKEQ_^1_%LDQ- ELU,I_(PICK UP LU NUMBER_^1_%TRQ A_^1_%SUB- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%SAZ XXX1_)SKIP IF YES TO BYPASS ALTDEV_^1_%QLS 6_^1_%ADQ- ETEMP2,I_$COMBINE WITH ERROR CODE_^1XXX_"SCHDLE ALTDEV,0,,1_^1XXX1_!JMP €€ NXTPT_(CONTINUE SEARCH FOR WAITING REQUEST_^1_%EJT_]_^1MOTION LDQ- EPTR,I_^1_%LDA- 4,Q_*GET USER-S CONTROL WORD_^1_%RTJ* XCTMOT_^1_%JMP COMPLT_^1_%SPC 5_^1XCTMOT NUM 0_,USED BY MOTION AND RECOVERY_^1_%STA- ETEMP2,I_$SAVE MOTION CONTROL IN A_^1_%LDA- ESTAT1,I_L68*1509_^1_%ADD- BITMSK+5_$SET MOTION REQ. BIT_368*1509_^1_%STA- ESTAT1,I_L68*1509_^1_%CLR A,Q_^1_%RTJ UNTSEL_'SELECT €€THE UNIT AND STATUS_^1_%SAM NODENS_'SKIP IF ITERATIVE REQUEST_^1_%LDA- ETEMP2,I_^1_%AND- LOWBTS+3_"SAVE DENSITY (0-3) ONLY_^1_%SAZ DOMOT_R0308_^1_%STA* MOTITR_'SAVE DENSITY_^1_%ENA 0_^1_%STA- ETEMP2,I_$SET TO TERMINTAE REQUEST_^1_%JMP* DONEM_^1NODENS AND- LOWBTS+11 MASK OUT INTERATIONS_^1_%STA* MOTITR_'SAVE ITERATIONS_^1_%LDA- ETEMP2,I_^1_%AND- HIHBTS+12_#MASK MOTION INDEX TO T€€ERMINATE_^1_%STA- ETEMP2,I_^1DOMOT LDA- ETEMP2,I_O0308_^1_%ARS 12_U0308_^1_%AND- LOWBTS+14-12_K0308_^1_%STA- ETEMP1,I_$SAVE MOTION CODE_^1_%INA -4_+OFFSET TO GET COMPLEMENT OF DIRECTION_^1_%TCA A_^1_%AND- BITMSK+0_$SAVE BIT 0 (DIRECTION) ONLY_^1_%TRA Q_^1_%CLR A_^1_%RTJ UNTSEL_'SELECT UNIT_^1_%LDQ- ETEMP1,I_$PICK UP MOTION CODE_^1_%SQN TABDEX_Q0323_^1_%ENA 0_^1_%STA* MOTIT€€R_'ZERO COUNT IF DO NOTHING_^1TABDEX JMP* SUBMOT,Q_$INDEX ON MOTION CODE_50323_^1_%EJT_]_^1SUBMOT JMP* DONEM_(DONE OR DENSITY_)0_^1_%JMP* BKSP_)BACKSPACE RECORD_(1_^1_%JMP* WRFM_)WRITE FILE MARK_)2_^1_%JMP* REW_*REWIND_23_^1_%JMP* REWUN_(REWIND UNLOAD_+4_^1_%JMP* MOTSTR_'SEARCH FILE FORWARD_$5_^1_%JMP* FLBK_)SEARCH FILE BACKWARD_#6_^1_%JMP* ADVR_)ADVANCE RECORD_*7_,PECTAPE_^1_%SPC €€ 5_^1MCODS NUM $189_)BACKSPACE RECORD_61732-2_^1_%NUM $289_)WRITE FILE MARK_71732-2_^1_%NUM $401_)REWIND_@1732-2_^1_%NUM $601_)UNLOAD_@1732-2_^1_%NUM $319_)ADVANCE FILE_:1732-2_^1_%NUM $389_)BACKSPACE FILE_81732-2_^1_%NUM $109_)ADVANCE RECORD_81732-2_^1_%SPC 5_^1MOTSTR LDA* MCODS-1,Q_#GET MOTION CODE, INDEXED BY Q_^1_%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- EWES,I_'CLEAR CONTROLLER_^1_%ENA 1_.TO ALLOW OTHER UNITS_^1_%RTJ OUT_.ACCESS TO CONTROLLER_^1_%LDQ- I_,SCHEDULE REWIND CHECK_165*1395_^1_%SCHDLE REWCK,3,,1_^1_%JMP NXTPT_O65*1395_^1_%EJT_]€€_^1DONEM LDA* MOTITR_^1_%SAN 1_,SKIP IF DENSITY REQUEST_^1_%JMP* NODEN_^1_%INA -2_+CHECK FOR 556 BPI REQUEST_^1_%SAN CK800_^1_%ENA $10_^1_%JMP* DENSEL_^1CK800 INA -1_+CHECK FOR 800 BPI REQUEST_^1_%SAN CK1600_^1_%ENA 8_^1_%JMP* DENSEL_^1CK1600 INA -1_+CHECK FOR 1600 BPI REQUEST_^1_%SAN DENERR_^1_%LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 5_^1_%SAP DENERR_'SKIP IF NOT AT LOA€€D POINT_^1_%ALS 3_^1_%SAP DENERR_'SKIP IF NOT PE CAPABLE TRANSPORT_^1_%ENA $20_^1DENSEL CLR Q_,SET FORWARD MOTION_^1_%INA 4_,FAKE BINARY MODE_6PECTAPE_^1_%RTJ UNTSEL_^1NODEN LDA- ZROBIT+5_O0308_^1_%AND- ESTAT1,I_O0308_^1_%STA- ESTAT1,I_O0308_^1_%JMP* (XCTMOT)_$RETURN TO CALLER_^1_%SPC 5_^1DENERR ENA ERRDEN_'DENSITY ERROR CODE_^1_%JMP FAILED_^1_%EJT_]_^1WRFM_!RTJ* RINGCK_^€€1_%JMP* MOTSTR_^1_%SPC 3_^1REW_"RTJ* LPCHK_(CHECK FOR LOAD POINT, RETURN IF NOT L.P._^1_%LDA- ESTAT1,I_O0308_^1_%AND- ZROBIT+6_^1_%ADD- BITMSK+6_O0308_^1_%STA- ESTAT1,I_O0308_^1_%RTJ* BUSYCK_^1_%ENQ 3_,INDEX FOR REWIND_^1_%JMP* MOTSTR_'START MOTION_^1_%SPC 3_^1BKSP_!RTJ* LPCHK_^1_%ENQ 1_,NOT LP SO BACKSPACE RECORD_^1_%JMP* MOTSTR_'START BACKSPACE RECORD_^1_%SPC 3_^1REWUN ENA €€ 0_^1_%STA* MOTITR_'0 INTO ITERATIONS_^1_%STA- ETEMP2,I_$CONTROL TO 0 TO TERMINATE_^1_%RTJ* BUSYCK_^1_%ENQ 4_^1_%JMP* MOTSTR_^1_%SPC 3_^1FLBK_!RTJ* LPCHK_(CHECK LOAD POINT_^1_%JMP* MOTSTR_'START FILE BACKWARD SEARCH_^1_%SPC 3_^1ADVR_!LDA =XDUMBUF_$FWA-1 OF DUMMY, ZERO LENGTH BUFFER_#PECTAPE_^1_%LDQ- EWES,I_NPECTAPE_^1_%INQ 2_SPECTAPE_^1_%RTJ OUT_*LOAD FWA-1_72*1609_^1_%SQZ LEAVE_(NO REMAINDER,LOGIC REC#PRU SIZE_$*72*1609*_^1_%INQ -NOISLN-1_#REMAINDER.GT.NOISE LIMIT_,*72*1609*_^1_%SQP LEAVE_(YES, EXIT_;*72*1609*_^1_%LDA* PRUSZ_(NO, LOAD PRU SIZE_3*72*1609*_^1_%INA -NOISLN-1_#DECR PRUSZ BY NOISE-1_/*72*1609*_^1_%STA* PRUSZ_M*72*1609*_^1_%JMP* TRYAGN_'TRY REMAINDERING AGAIN_.*72*1609*_^1LEAVE LDA* PRUSZ_M*72*1609*_^1_%ST€€A* NUMBR_(SIZE OF SEGMENT RECORDS_-*72*1609*_^1_%JMP* (PRUCMP)_J*72*1609*_^1_%SPC 2_^1NUMBR NUM 0_^1PRUSZ NUM 0_Q*72*1609*_^1_%EJT_]_^1ASCBCD NUM 0_,ASC TO BCD PREP_^1_%RTJ* SETUP_^1ASCLOP LDQ- ECCOR,I_%GET USER ADDRESS_^1_%LDA- (ZERO),Q_$GET DATA_^1_%STA* (CURR)_^1_%RAO- ECCOR,I_%TALLY USER ADDRESS_^1_%RAO* CURR_)TALLY CURR_^1_%LDA* CURR_^1_%EOR* LWA_*CHECK FOR DONE_^1_%SAZ €€ 1_,YES_^1_%JMP* ASCLOP_'NOT DONE_^1_%RTJ* AQGET_(PREP AQ FOR ASC TO BCD_^1_%RTJ A2BCD_(CONVERT_^1_%JMP* (ASCBCD)_$RETURN_^1_%SPC 5_^1AQGET NUM 0_^1_%LDQ* FWA_^1_%TRQ A_,INTO A_^1_%TCQ Q_,COMPLEMENT_^1_%ADQ* LWA_^1_%JMP* (AQGET)_^1_%EJT_]_^1UNPK_!NUM 0_,ENTRY FOR BINARY TO ASSEM/DISASSEM_^1_%RTJ* SETUP_^1_%CLR Q_,0 INTO Q_^1NXTCYC RTJ* GETFST_^1_%LLS 6_,6 BITS_^1_%QLS 2_,€€2 BITS =0_^1_%LLS 6_,6 BITS_^1_%RTJ* STRDAT_'GO STORE Q WHICH IS UNPACKED FOR 1732_^1_%LLS 4_,4 BITS_^1_%RTJ* GETFST_'GET ANOTHER 16 BINARY BITS_^1_%LLS 2_,2 BITS MORE FOR 6_^1_%QLS 2_,2 BITS =0_^1_%LLS 6_,6 BITS_^1_%RTJ* STRDAT_'STORE Q_^1_%LLS 6_,6 BITS_^1_%QLS 2_,2 BITS =0_^1_%LLS 2_,2 BITS_^1_%RTJ* GETFST_'GET MORE DATA_^1_%LLS 4_,4 BITS_^1_%RTJ* STRDAT_'STORE Q_^1_%LL€€S 6_,6 BITS_^1_%QLS 2_,2 BITS =0_^1_%LLS 6_,6 BITS_^1_%RTJ* STRDAT_'STORE Q_^1_%JMP* NXTCYC_'GO THRU ANOTHER CYCLE_^1_%SPC 5_^1GETFST NUM 0_^1_%STQ* QSAV_)SAVE Q_^1_%LDA- ELSTWD,I_^1_%SUB- ECCOR,I_%CHECK END OF BUFFER_^1_%SAN 2_^1_%ENA 0_^1_%JMP* (GETFST)_^1_%LDQ- ECCOR,I_%GET CURRENT LOCATION OF DATA_^1_%LDA- (ZERO),Q_$GET NEW DATA_^1_%LDQ- 0_^1QSAV_!NUM 0_^1_%RAO- ECCOR,I€€_%TALLY CURRENT ADDRESS_^1_%JMP* (GETFST)_^1_%EJT_]_^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_^1SETUP NUM 0_^1_%STA* CURR_^1_%STA* FWA_^1_%STQ* LWA_^1_%JMP* (SETUP)_^1_%SPC 2_^1CURR_!NUM 0_^1FWA_"NUM 0_^1LWA_"NUM 0_^1_%EJT_]_^1PACK_!NUM 0_,ENTRY FOR ASSEM/DISASSEM TO BINARY_^1_%RTJ* SETUP_^1NXTGET RTJ* GETFWA_'GO GET FROM FWA BUFFER_^1_%CLR Q_^1_%LLS 8_,6 BITS_^1_%ALS 2_,PASS 2 0 BITS_^1_%LLS 6_,6 BITS_^1_%RTJ* GETFWA_'GET 12 BITS_^1_%ALS 2_,PASS 2 0 €€BITS_^1_%LLS 4_,4 BITS_^1_%RTJ* STRFST_'GO STORE IN 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* STRFST_'GO STORE_^1_%LLS 4_,4 BITS_^1_%RTJ* GETFWA_'GET 12_^1_%ALS 2_,PASS 2_^1_%LLS 6_,6 BITS_^1_%ALS 2_,PASS 2_^1_%LLS €€ 6_,6 BITS_^1_%RTJ* STRFST_'STORE_^1_%JMP* NXTGET_'NEXT CYCLE_^1_%SPC 5_^1GETFWA NUM 0_,ENTRY TO GET NEXT DATA FROM FWA_^1_%LDA* CURR_^1_%EOR* LWA_^1_%SAN NOTCUR_Q0308_^1_%JMP* (PACK)_'EXIT FROM PACK_^1NOTCUR LDA* (CURR)_^1_%RAO* CURR_^1_%JMP* (GETFWA)_$RETURN_^1_%SPC 5_^1STRFST NUM 0_,STORE DATA IN Q INTO USER-S BUFFER_^1_%STA* QSAV1_^1_%TRQ A_,DATA INTO A_^1_%LDQ- ECCOR,I_%€€GET CORE LOCATION OF USER-S BUFFER_^1_%STA- (ZERO),Q_$STORE DATA_^1_%LDA- 0_,2 WORD INSTRUCTION_^1QSAV1 NUM 0_^1_%CLR Q_^1_%RAO- ECCOR,I_%TALLY STORAGE LOCATION_^1_%JMP* (STRFST)_^1_%EJT_]_^1BCDASC NUM 0_^1_%RTJ* SETUP_^1_%RTJ* AQGET_^1_%RTJ BCD2A_(CONVERT_^1BCDLOP LDQ- ECCOR,I_%GET USER-S LOCATION_^1_%LDA* (CURR)_'GET DATA_^1_%STA- (ZERO),Q_$STORE IN USER_^1_%RAO- ECCOR,I_%TA€€LLY USER_^1_%RAO* CURR_^1_%LDA* CURR_^1_%EOR* LWA_*CHECK FOR BUFFER COMPLETE_^1_%SAZ BCDAEX_^1_%JMP* BCDLOP_'MORE TO TRANSFER_^1BCDAEX JMP* (BCDASC)_^1_%END_]_^__€PDSBUFR CSY/ C14 P€1_%NAM DSBUFR_'DECK-ID C14 MSOS 4.1_-SUMMARY-079_^1*_$OUTPUT MESSAGE BUFFERING PACKAGE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT ISBUFR_'DRIVER INITIATOR ENTRY_+**MSOS 4.1**_^1_%ENT CBWRIT_'MM WRITE COMPLETION ENTRY_(**MSOS 4.1**_^1_%ENT CBRE€€AD_'MM READ COMPLETION ENTRY_)**MSOS 4.1**_^1_%ENT BOUTC_(BUFFER OUTPUT COMPLETION ENTRY_"**MSOS 4.1**_^1_%EXT LOG_*EF ERROR LOGGING ROUTINE_)**MSOS 4.1**_^1_%EXT ALTDEV_^1_%EQU REJECT(57)_"MASS MEMORY ERROR CODE_+**MSOS 4.1**_^1_%EQU XFRERR(56)_"STORAGE BUFFER FILLED ERROR_%**MSOS 4.1**_^1_%EQU AMONI($F4),ADISP($EA),AFNR($B5),ACOMPC($B6)_^1_%EQU LPMSK($02),ZERO($22),ONEBIT(€€$23),ZROBIT($33)_^1_%EQU LEVEL($EF)_^1_%SPC 2_^1*_*BUFFER DRIVER - INITIATOR ENTRY_^1_%SPC 2_^1ISBUFR STQ- I_,I = ADR OF BUFFER TABLE_***MSOS 4.1**_^1BF01_!RTJ- (AFNR)_'FIND NEXT REQUEST_^1_%JMP- (ADISP)_%NONE_^1_%SPC 2_^1*_*TRANSFER DATA FROM REQUEST TO BUFFER_^1_%SPC 2_^1_%LDQ- 6,I_*REQUEST ADDRESS_^1_%LDA- (ZERO),Q_$REQUEST CODE_^1_%ARS 9_^1_%AND- 7_^1_%INA -14_*MOTION_^1€€_%SAN 1_^1_%JMP* BF40_)YES, COMPLETE_^1_%LDA- 3,Q_*GET MODE BIT_^1_%ALS 3_P**MSOS 4.0_^1_%AND- ONEBIT+15_#SAVE_?**MSOS 4.0_^1_%TRA Q_,SAVE_?**MSOS 4.0_^1_%LDA- ELSTWD,I_I**MSOS 4.0_^1_%SUB- ECCOR,I_^1_%INA 1_^1_%EAQ A_,ADD MODE TO NUMBER OF WORDS_(**MSOS 4.0_^1_%STA- CONTRL,I_$LENGTH OF MESSAGE + 1_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%INA 1_^1_%STA- DLEG,I_'LENGTH OF MESSAGE + 2€€_^1_%LDA- FIRST,I_^1_%SUB- STOR,I_^1_%SAZ BF10-*-1_$EMPTY_^1_%SAP BF11-*-1_$CHECK LOWER AREA_^1_%JMP* BF12_)CHECK UPPER AREA_^1_%SPC 2_^1BF10_!LDA- LOCB,I_'RESET BUFFER POINTERS_^1_%STA- FIRST,I_^1_%STA- READ,I_^1_%STA- STOR,I_^1_%LDA- ENDB,I_^1_%STA- LAST,I_^1_%SUB- STOR,I_^1BF11_!SUB- DLEG,I_^1_%SAM ERR1-*-1_$NO FIT_^1_%JMP* BF30_K**MSOS 4.1**_^1_%SPC 2_^1*_8REJECTED REQUEST€€_^1_%SPC 2_^1ERR1_!ENA REJECT_'ERROR CODE_^1ERR2_!LDQ- ELU,I_^1_%QLS 6_^1_%EAQ Q_^1_%LDA- ESTAT1,I_$SET ERROR FLAG IN PDT_,**MSOS 4.1**_^1_%EOR- ONEBIT+15_F**MSOS 4.1**_^1_%STA- ESTAT1,I_G**MSOS 4.1**_^1_%RTJ+ LOG_*LOG ERROR IN EF_2**MSOS 4.1**_^1_%JMP+ ALTDEV_'GO TO ALTERNATE DEVICE HANDLER_^1_%SPC 3_^1BF12_!LDA- ENDB,I_^1_%SUB- STOR,I_^1_%SUB- DLEG,I_^1_%SAP BF30-*-1_$IF DA€€TA FITS ABOVE STOR, GO TO 30 **MSOS 4.1**_^1_%LDA- FIRST,I_^1_%SUB- LOCB,I_^1_%SUB- DLEG,I_^1_%SAP BF16-*-1_$IF DATA FITS BELOW FIRST, GO TO BF16_^1_%JMP* ERR1_)REJECT_^1_%SPC 2_^1BF16_!LDA- STOR,I_'LAST = STOR_^1_%STA- LAST,I_^1_%LDA- LOCB,I_'STOR = LOCB_^1_%STA- STOR,I_^1_%SPC 2_^1*_$BUFFER INPUT HANDLER_@**MSOS 4.1**_^1_%SPC 2_^1BF30_!ENA 1_,SET UP TO TRANSFER CONTRL TO BFR€€_^1_%STA- DLEG,I_^1_%ENA CONTRL_^1_%ADD- I_^1_%STA- DART,I_^1BF31_!LDA- I_^1_%INA DPL0_^1_%STA* BF32_^1_%RTJ- (AMONI)_%INITIATE MM WRITE_^1_%NUM $2000_(PART 1 INDIRECT_4**MSOS 4.0_^1BF32_!NUM 0_^1_%JMP- (ADISP)_^1_%SPC 2_^1*_8COMPLETION OF MM WRITE_^1_%SPC 2_^1CBWRIT INA -DPL0_(RESTORE I=ADDR OF BFRTAB_)**MSOS 4.1**_^1_%STA- I_^1_%LDA- CONTRL,I_^1_%SQM BF34-*-1_$IF MM WRITE€€ FAILED GO TO BF34_^1_%SAN 1_^1_%JMP* BF35_)DATA TRANSFER COMPLETED OK_^1_%SPC 2_^1_%LDA- ECCOR,I_%SET UP TO TRANSFER DATA TO BFR_^1_%STA- DART,I_^1_%LDA- CONTRL,I_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%INA -1_^1_%STA- DLEG,I_^1_%RAO- STOR,I_'STOR = STOR + 1_^1_%CLR A_,SET CONTRL = 0_^1_%STA- CONTRL,I_^1_%JMP* BF31_^1_%SPC 2_^1BF34_!SAN BF38-*-1_^1_%LDA- STOR,I_'RESET STOR POINTER€€_^1_%INA -1_^1_%STA- STOR,I_^1BF38_!ENA XFRERR_'SET ERROR CODE_^1_%JMP* ERR2_^1_%SPC 2_^1BF35_!LDA- STOR,I_'UPDATE STOR POINTER_^1_%ADD- DLEG,I_^1_%STA- STOR,I_^1_%SPC 2_^1*_*DATA TRANSFER DONE, COMPLETE USERS REQUEST_^1_%SPC 2_^1BF40_!RTJ- (ACOMPC)_^1_%LDA- OUTP2,I_^1_%SAN BF41-*-1_$IF NO OUTPUT IS IN PROGRESS FOR THIS BFR_^1_%LDA- LEVEL_(START OUTPUT_^1_%ADD =N$5200_%PART €€1 SCHEDULE OF BF50_,**MSOS 4.0_^1_%STA* BF42_^1_%LDQ- I_^1_%RTJ- (AMONI)_^1BF42_!NUM 0_^1_%ADC BF50_^1BF41_!JMP* BF01_)GET NEXT REQUEST_^1_%SPC 2_^1*_*BUFFER OUTPUT HANDLER_^1_%SPC 2_^1*_*START BUFFER OUTPUT ENTRY_^1_%SPC 2_^1BF50_!STQ- I_,I = BUFFER TABLE ADDRESS_^1BF53_!LDA- STOR,I_^1_%SUB- FIRST,I_^1_%SAZ BF51-*-1_^1_%INA -1_^1_%SAN BF52-*-1_^1BF51_!JMP- (ADISP)_%EXIT IF€€ BUFFER IS EMPTY_^1_%SPC 2_^1BF52_!LDA- LCHAR,I_%SET UP TO TRANSFER FROM BFR_^1_%STA- OUTLNG,I_^1_%STA- OUTP4,I_^1_%LDA- ACHAR,I_^1_%STA- DADR,I_^1_%SPC 2_^1*_$BUFFER OUTPLU HANDLER_?**MSOS 4.1**_^1_%SPC 2_^1_%LDA- I_N**MSOS 4.1**_^1_%INA DOUT0_^1_%STA* BF71_^1_%RTJ- (AMONI)_%INITIATE MM READ_^1_%NUM $2000_(PART 1 INDIRECT_4**MSOS 4.0_^1BF71_!NUM 0_^1_%JMP- (ADISP)_^1_%SPC 2€€_^1*_*COMPLETION OF MM READ_^1_%SPC 2_^1CBREAD INA -DOUT0_'RESTORE I=ADDR OF BFRTAB_)**MSOS 4.1**_^1_%STA- I_^1_%SQP BF73-*-1_^1_%JMP- (ADISP)_%EXIT IF READ ERROR OCCURRED, WAIT FOR RESTART_^1BF73_!LDA- READ,I_'UPDATE READ POINTER_^1_%ADD- OUTLNG,I_^1_%STA- READ,I_^1_%SPC 2_^1*_*DATA IS NOW IN CHARACTER BUFFER_^1_%SPC 2_^1_%LDA- SKELNG,I_^1_%SAZ BF81-*-1_^1_%SAP BF82-*-1_^1B€€F81_!LDQ- ACHAR,I_%NEW MESSAGE_^1_%LDA- (ZERO),Q_^1_%AND- LPMSK+15_^1_%STA- SKELNG,I_$TOTAL MESSAGE LENGTH_^1_%SPC 2_^1BF82_!LDA- SKELNG,I_^1_%SUB- LCHAR,I_^1_%STA- SKELNG,I_$LENGTH REMAINING_^1_%SAZ BF83-*-1_$COMPLETE_^1_%SAP BF84-*-1_$MESSAGE NOT COMPLETED_^1_%ADD- READ,I_'ADJUST LENGTH AND READ POINTER_^1_%STA- READ,I_'TO ACTUAL LENGTH OF MESSAGE_^1_%LDA- OUTP4,I_^1_%ADD- SKE€€LNG,I_^1_%STA- OUTP4,I_^1BF83_!LDA- READ,I_'FIRST = READ_^1_%STA- FIRST,I_^1_%SUB- LAST,I_^1_%SAN BF84-*-1_$NOT END OF BUFFER_^1_%LDA- ENDB,I_'LAST = ENDB_^1_%STA- LAST,I_^1_%LDA- LOCB,I_'READ = FIRST = LOCB_^1_%STA- READ,I_^1_%STA- FIRST,I_^1BF84_!LDA- OUTP3,I_%LOGICAL UNIT_7**MSOS 4.0_^1_%AND- ZROBIT+12_#CLEAR MODE BIT_5**MSOS 4.0_^1_%STA- OUTP3,I_^1_%LDQ- ACHAR,I_^1_%LDA- (ZERO€€),Q_$MODE TO USE AND WORDS+1_^1_%ARS 3_P**MSOS 4.0_^1_%AND- ONEBIT+12_H**MSOS 4.0_^1_%EOR- OUTP3,I_^1_%STA- OUTP3,I_%STORE NEW MODE_5**MSOS 4.0_^1_%LDA- (ZERO),Q_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%STA- OUTP4,I_%RESET WORDS TO GET RID OF HEADER_"**MSOS 4.0_^1_%RAO- ACHAR,I_%GET PAST HEADER_4**MSOS 4.0_^1_%LDA- I_P**MSOS 4.0_^1_%INA OUTP0_^1_%STA* BF85_^1_%RT€€J- (AMONI)_%INITIATE OUTPUT FROM CHAR BFR_^1_%NUM $2000_(PART 1 INDIRECT_4**MSOS 4.0_^1BF85_!NUM 0_^1_%JMP- (ADISP)_^1_%SPC 2_^1*_*CHARACTER BUFFER OUTPUT COMPLETED_^1_%SPC 2_^1BOUTC INA -OUTP0_I**MSOS 4.1**_^1_%STA- I_^1_%LDA- ACHAR,I_J**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%STA- ACHAR,I_J**MSOS 4.0_^1_%JMP* BF53_)CONTINUE BUFFER OUTPUT_^1_%SPC 4_^1_%EQU ELU(5)_^1_%EQU EST€€AT1(9)_F**MSOS 4.1**_^1_%EQU ECCOR(10)_^1_%EQU ELSTWD(11)_^1_%EQU LOCB(16)_^1_%EQU ENDB(17)_^1_%EQU FIRST(18)_^1_%EQU LAST(19)_^1_%EQU DPL0(20)_^1_%EQU DLEG(24)_^1_%EQU DART(25)_^1_%EQU STOR(27)_^1_%EQU CONTRL(28)_^1_%EQU DOUT0(29)_^1_%EQU OUTLNG(33)_^1_%EQU DADR(34)_^1_%EQU READ(36)_^1_%EQU SKELNG(37)_^1_%EQU OUTP0(38)_^1_%EQU OUTP2(40)_^1_%EQU OUTP3(41)_^1_%EQU€€ OUTP4(42)_^1_%EQU ACHAR(43)_^1_%EQU LCHAR(44)_^1_%SPC 2_^1*_*EXAMPLE OF BUFFER PHYSICAL DEVICE TABLE MACRO FOLLOWS_^1_%SPC 2_^1*BUFFER MAC FLSB,LLSB,FMSB,BLU,MMLU,CBSIZE_^1*_%LOC A_^1*_%EXT ISBUFR_'BUFFER DRIVER INITIATOR_^1*_%EXT CBWRIT_'MASS MEMORY WRITE COMPLETION_^1*_%EXT CBREAD_'MASS MEMORY READ COMPLETION_^1*_%EXT BOUTC_(BUFFER OUTPUT COMPLETION_^1*_%NUM $520A_(0€€0 SCHEDULER CALL_^1*_%ADC ISBUFR_'01 INITIATOR ADDRESS_^1*_%ADC 0_,02 CONTINUATOR ADDRESS (NOT USED)_^1*_%ADC 0_,03 DIAGNOSTIC ERROR ADDRESS (NOT USED)_^1*_%NUM -1_+04 DIAGNOSTIC CLOCK (NOT USED)_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%ADC 0_,06 PARAMETER LOCATION_^1*_%NUM 0_,07 CONVERTER, EQUIPMENT, STATION (NOT USED)_^1*_%NUM $A4_*08 REQUEST STATUS_^1*_%NUM 0_,09 DRIV€€ER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS (NOT USED)_^1*_%NUM 0_,13 MASS MEMORY LENGTH (NOT USED)_^1*_%NUM $7FFF_(14 MASS MEMORY LOCATION (NOT USED)_^1*_%NUM 0_,15 MONITOR RETURN_^1*_%ADC 'FLSB'_'16 LSB START OF BUFFER_^1*_%ADC 'LLSB'_'17 LSB END OF BUFFER_^1*_%ADC 'FLSB'_'18 CURRENT LSB START OF B€€UFFER_^1*_%ADC 'LLSB'_'19 CURRENT LSB END OF BUFFER_^1*_%NUM $44AA_(20 MASS MEMORY WRITE REQUEST (UNFORMATTED)_^1*_%ADC CBWRIT_'21 COMPLETION_^1*_%NUM 0_,22 THREAD_^1*_%ADC 'MMLU'_'23 MASS MEMORY LOGICAL UNIT_^1*_%NUM 0_,24 NUMBER OF WORDS_^1*_%NUM 0_,25 STARTING DATA LOCATION_^1*_%ADC 'FMSB'_'26 MSB ADDRESS_^1*_%ADC 'FLSB'_'27 LSB ADDRESS_^1*_%NUM 0_,28 CONTROL€€ WORD_^1*_%NUM $42AA_(29 MASS MEMORY READ REQUEST (UNFORMATTED)_^1*_%ADC CBREAD_'30 COMPLETION_^1*_%NUM 0_,31 THREAD_^1*_%ADC 'MMLU'_'32 MASS MEMORY LOGICAL UNIT_^1*_%NUM 0_,33 NUMBER OF WORDS_^1*_%ADC 'A'_*34 STARTING LOCATION (CHARACTER BUFFER)_^1*_%ADC 'FMSB'_'35 MSB ADDRESS_^1*_%ADC 'FLSB'_'36 LSB ADDRESS_^1*_%NUM 0_,37 PARTIAL WORD OUTPUT FLAG_^1*_%NUM $4CAA€R_(38 BUFFER WRITE REQUEST (FORMATTED)_^1*_%ADC BOUTC_(39 COMPLETION_^1*_%NUM 0_,40 THREAD_^1*_%ADC 'BLU'_(41 OUTPUT LOGICAL UNIT_^1*_%NUM 0_,42 NUMBER OF WORDS_^1*_%ADC 'A'_*43 STARTING LOCATION (CHARACTER BUFFER)_^1*_%ADC 'CBSIZE'_$44 CHARACTER BUFFER SIZE_^1*_%BZS 'A'('CBSIZE') 45- CHARACTER BUFFER_^1*_%EMC_^1_%END_]_^__RPDCOSY CSY/ C28 P€1_%NAM DCOSY_(DECK-ID C28 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_1CSYDRV (COSY DRIVER) VERSION 1.0._^1*_1PROGRAM BASE-MSOS4.0_^1_%SPC 2_^1_%EXT MAS300_^1_%ENT ICOSY_(INITIATOR_8**MSOS 4.1**_^1_%EXT LOG1A_^1_%EXT ALTDEV_€€^1_%EXT MAKEQ_^1WORD8 EQU WORD8(8)_^1LPMASK EQU LPMASK($2)_^1NZERO EQU NZERO($12)_^1ZERO_!EQU ZERO($22)_^1_%EQU BIT12($2F)_^1_%EQU BIT14($31)_^1TEN_"EQU TEN($46)_^1DISP_!EQU DISP($EA)_^1_%EQU AFNR($B5)_^1EXTBV4 EQU EXTBV4($E9)_^1_%EQU COMREQ($B6)_^1REQPRO EQU REQPRO($F4)_^1_%EQU ELU(5)_^1_%EQU EPTR(6)_^1_%EQU EREQST(8)_^1_%EQU ESTAT1(9)_^1_%EQU ECCOR(10)_^1_%EQU€€ ELSTWD(11)_^1_%EQU ESTAT2(12)_^1ELINK EQU ELINK(16)_^1SEQNUM EQU SEQNUM(17)_^1ID_#EQU ID(18)_^1NWORDS EQU NWORDS(21)_^1HOLLR EQU HOLLR(22)_^1INPLR EQU INPLR(23)_^1RWFG_!EQU RWFG(24)_^1PCN5F EQU PCN5F(25)_^1FSTCHR EQU FSTCHR(26)_^1ENDDCK EQU ENDDCK(27)_^1ADINPB EQU ADINPB(28)_^1INPPTR EQU INPPTR(29)_^1HOLPTR EQU HOLPTR(30)_^1FTIME EQU FTIME(31)_^1SFLG_!EQU SFL€€G(32)_^1_%EQU CSYLR(INPLR)_^1_%EQU CSYPTR(INPPTR)_^1_%EQU ADCSYB(ADINPB)_^1_%SPC 4_^1ICOSY STQ- I_,INITIATOR_8**MSOS 4.1**_^1_%RTJ* *+1_*LOCALIZE, MAY BE CORE RESIDENT_"**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_%STA- 1,Q_*STORE INITIATOR_2**MSOS 4.1**_^1_%ADD* ADRTAB_'CALCULATE ABSOLUTE ADDRESS._^1_%STA WREQ+1_^1_%ADD* ADRTA€€B+1_^1_%STA MRQ+1_^1_%ADD* ADRTAB+2_^1_%STA* CSYADR_^1_%ADD* ADRTAB+3_^1_%STA RREQ+1_^1_%ADD* ADRTAB+4_^1_%STA* ENDADR_^1_%LDA =N0_^1*_]_^1BUSY_!EQU BUSY(*-1)_^1LPHYTB EQU LPHYTB(*-1)_^1*_]_^1_%SAN 1_,COSY DRIVER BUSY._^1_%JMP* INCSY1_'NO._^1_%JMP- (DISP)_'YES._^1_%SPC 4_^1ADRTAB ADC WCO-ICOSY_F**MSOS 4.1**_^1_%ADC MCMP-WCO_^1_%ADC CSYREC-MCMP_^1_%ADC RC1-CSYREC_^1_%ADC €€ ENDREC-RC1_^1_%SPC 4_^1INCSY2 LDA- ELINK,I_^1_%STA- I_^1_%EOR* LPHYTB_^1_%SAZ INCSY3_'ALL PHYSTBS CHECKED._^1_%JMP* INCS10_^1INCSY3 ENA 0_,YES._^1_%STA* BUSY_^1_%JMP+ MAS300_'RELEASE BUFFER_3**MSOS 4.1**_^1INCSY1 STQ* BUSY_)NO._^1_%LDA- FTIME,I_^1_%SAP INCS5_^1_%RTJ RESET_(RESET DRIVER FLAGS._^1INCS5 LDA- ADINPB,I_^1_%STA RRB_*SET THE BUFFER ADDRESS._^1INCS10 RTJ- (AFNR)_^1€€_%JMP* INCSY2_^1_%LDA- ELSTWD,I_^1_%SUB- ECCOR,I_^1_%STA- NWORDS,I_$NUMBER OF WORDS REQUESTED_^1_%SPC 4_^1_%LDQ- EPTR,I_'GET THE PARAMETER STRING ADDRESS._^1_%LDA- (ZERO),Q_^1_%AND =N$1C00_%CHECK FOR MOTION REQUEST._^1N1C_"EQU N1C(*-1)_^1_%SUB* N1C_^1_%SAN IOP01_(IS IT A MOTION REQUEST._^1_%JMP* IOP20_(YES._^1IOP01 LDQ- ESTAT1,I_^1_%LRS 1_^1_%SAP IOP03_(IS IT A READ REQUEST.€€_^1_%JMP* IOP10_(NO._^1IOP03 LDA- RWFG,I_'YES._^1_%SAZ IOP05_(LAST OPERATION A READ._^1_%LDA- FTIME,I_%NO._^1_%SAN IOP05_(FIRST REQUEST MADE ON PRESENT DECK._^1IOP04 ENA 5_,READ ON A WRITE UNIT._^1_%JMP* IOP21+1_^1IOP05 ENQ 1_,YES._^1_%LDQ- (EXTBV4),Q_"PICK UP READ DEVICE LOGICAL_^1_%RTJ* TYPDEV_'CHECK TYPE OF INPUT DEVICE._^1_%STA RLU_*SET HE LOGICAL UNIT._^1_%JMP IN1_^1*€€_]_^1IOP10 LDA- RWFG,I_^1_%SAN IOP12_(LAST OPERATION A WRITE._^1_%LDA- FTIME,I_%NO._^1_%SAN IOP12_(FIRST TIME DRIVER BEING ENTERED._^1_%JMP* IOP04_(WRITE ON A READ UNIT._^1IOP12 ENQ 2_,YES._^1_%LDQ- (EXTBV4),Q_"WRITE LOGICAL UNIT NUMBER._^1_%RTJ* TYPDEV_'CHECK TYPE OF OUTPUT DEVICE._^1_%STA* WLU_^1_%JMP* WN1_^1_%SPC 2_^1*_]_^1*_1THIS ROUTINE SETS UP THE PRIORITIES OF_^1*_3THE€€ REQUESETS._^1*_]_^1SETREQ NOP 0_^1_%LDQ* REQTAB,Q_^1_%LDA- (ZERO),I_^1_%AND- LPMASK+8_^1_%AAQ Q_^1_%JMP* (SETREQ)_^1_%SPC 2_^1REQTAB VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/0_'FREAD_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/0_'FWRITE_^1_%VFD N1/0,N1/1,N5/14,N1/0,N4/0,N4/0_%MOTION._^1ENDADR ADC ENDREC_^1CSYADR ADC CSYREC_^1*_]_^1IOP20 LDA- RWFG,I_^1_%SAN IOP22_(MOTION ON WRITE UNIT._^1€€_%LDA- FTIME,I_%NO._^1_%SAZ IOP21_(FIRST REQUEST MADE ON PRESENT DECK._^1_%LDA- 4,Q_*YES._^1_%STA* MREQ_)SET MOTION WORD._^1_%ENQ 1_^1_%LDA- (EXTBV4),Q_"SET THE READ LOGICA UNIT._^1_%ADD- BIT12_^1_%STA* MLU_^1_%STQ* MCMP1_^1_%JMP* DOMO_^1IOP21 ENA 6_,MOTION ON A READ UNIT AND NO END OF DECK_^1_%JMP ERRPRO_'IDENTIFIER ENCOUNTERED._^1IOP22 ENQ 2_^1_%STQ* MCMP1_^1_%LDA- (EXTBV4€€),Q_^1_%EOR- BIT12_^1_%STA* MLU_^1_%AND- LPMASK+8_^1_%TRA Q_^1_%RTJ* TYPDEV_^1_%STA* WLU_^1_%AND- BIT12_^1_%STA CLEAR1_'SET LAST BUFFER POINTER FOR THE CARD PUNCH._^1_%LDQ- EPTR,I_'PARAMETER LIST ADDRESS._^1_%LDA- 4,Q_*MOTION CODE WORD._^1_%STA* MREQ_^1_%SAP IOP24_(ITERATION TYPE REQUEST._^1_%AND- NZERO-1_%YES. CLEAR ITERATION BIT._^1IOP24 CLR Q_^1_%LLS 4_^1_%INQ -2_^1_%SQZ €€ FEOF_^1_%QRS 4_^1_%LLS 4_^1_%INQ -2_^1_%SQZ FEOF_^1_%QRS 4_^1_%LLS 4_^1_%INQ -2_^1_%SQN DOMO_^1FEOF_!RTJ CLEARI_^1_%LDQ* ENDADR_^1_%ENA 6_^1_%RTJ* WRCD_^1DOMO_!RTJ* MRQQ_^1_%ENA 1_^1_%STA- FTIME,I_^1_%LDA* WLU+1_^1_%INA -6_^1_%SAN DOMO1_^1_%ENQ 18_+CLEAR THE COSY DRIVER IN USE FLAG._^1_%STA- ($E9),Q_^1DOMO1 JMP* COMP_^1_%SPC 4_^1WN1_"LDA- FTIME,I_%IS THIS INITIAL C€€ALL_^1_%SAZ WNO_*NO_^1_%STA- RWFG,I_'SET THE R/W FLAG TO WRITE._^1_%LDQ* CSYADR_^1_%ENA 6_^1_%RTJ* WRCD_^1_%ENA 0_^1_%STA- FTIME,I_%CLEAR INITIAL FLAG_^1WNO_"LDQ- ECCOR,I_^1_%RTJ WRITE_^1_%JMP* COMP_^1_%SPC 2_^1TYPDEV NOP 0_^1_%STQ* SAVLU_(SAVE THE LOGICAL UNIT._^1_%LDQ LOG1A,Q_%LOGICAL UNIT PHYSTB._^1_%LDA- WORD8,Q_%EQUIPMENT CLASS CODE._^1_%AND =N$1800_^1N18_"EQU N18(*-1€€)_^1_%SUB* N18_^1_%SAZ TYP01_(CARD DEVICE._^1_%LDA- BIT12_(NO. GET ASCII MODE BIT._^1TYP01 EOR* SAVLU_(ADD THE LOGICAL UNIT NUMBER._^1_%JMP* (TYPDEV)_^1*_]_^1SAVLU NUM 0_,LOGICAL UNIT NUMBER BEING DEFINED._^1*_]_^1_%SPC 4_^1WRCD_!NOP 0_^1_%STQ* WRB_^1_%STA* WLU+1_(WORDS TO WRITE_^1_%LDQ- I_^1_%STQ* ISAVE_^1_%ENQ 1_^1_%RTJ* SETREQ_^1_%STQ* WREQ_^1_%RTJ- ($F4)_^1WREQ_!NUM $4C€€00_^1_%ADC WCO_^1_%NUM 0_^1WLU_"NUM 0_^1_%NUM 40_^1WRB_"NUM 0_^1_%JMP- (DISP)_^1WCO_"LDA* ISAVE_^1_%STA- I_^1_%ENQ 2_^1_%RTJ* PLUGPT_'SET UP COSY DRIVER PHYSTB._^1_%LDA* WLU_^1_%RTJ* CHKV_)CHECK IF ERROR FIELD SET._^1_%JMP* (WRCD)_^1_%SPC 4_^1MRQQ_!NOP 0_^1_%LDQ- I_^1_%STQ* ISAVE_^1_%ENQ 2_^1_%RTJ* SETREQ_^1_%STQ* MRQ_^1_%RTJ- ($F4)_^1MRQ_"NUM $5C00_^1_%ADC MCMP_^1_%NUM €€ 0_^1MLU_"NUM 0_^1MREQ_!NUM 0_^1_%JMP- (DISP)_^1MCMP_!LDA* ISAVE_^1_%STA- I_^1_%LDQ =N0_^1MCMP1 EQU MCMP1(*-1)_^1_%RTJ* PLUGPT_'SET UP THE COSY DRIVER PHYSTB._^1_%LDA* MLU_^1_%RTJ* CHKV_^1_%JMP* (MRQQ)_^1_%SPC 4_^1PLUGPT NOP 0_^1_%LDQ- (EXTBV4),Q_"PICK UP WORKING LOGICAL UNIT._^1_%LDQ LOG1A,Q_%PICK UP WORKING LOGICAL UNITS PHYSTB ADDRESS._^1_%LDA- ESTAT2,Q_^1_%STA- ESTAT2,I€€_^1_%JMP* (PLUGPT)_^1_%SPC 4_^1ISAVE NUM 0_^1BLANK EQU BLANK(*)_^1CSYREC ALF 3,_^1C_$ALF 1, C_^1SY_#ALF 1,SY_^1SL_#ALF 1,/_^1_%SPC 4_^1IN1_"LDA- FTIME,I_%IS THIS INITIAL CALL_^1_%SAZ N1_+NO_^1_%ENA 0_^1_%STA- RWFG,I_'SET R/W FLAG TO READ._^1_%STA- SEQNUM,I_^1_%RTJ* RCSY_)YES,READ A COSY CONTROL CARD_^1N1_#RTJ READI_(GET A COSY RECORD_^1_%LDA- ENDDCK,I_$DID WE FIND AN E€€ND OF DECK_^1_%SAZ N2_+NO_^1_%STA- FTIME,I_%RESET INITIAL FLAG_^1_%RTJ* CLR_*CLEAR POINTERS FOR NEXT READ_^1_%JMP* N1-1_^1N2_#RAO- SEQNUM,I_$BUMP CARD SEQUENCE_^1_%LDQ- ECCOR,I_%WE HAVE DEBLOCKED A LOGICAL RECORD INTO_^1_%INQ 39_+USERS BUFFER GET ADDRESS TO STORE SEQ+ID_^1_%RTJ WRITEI_^1_%ENA 0_^1_%STA- FTIME,I_%CLEAR INITIAL FLAG_^1COMP_!LDA- HOLPTR,I_^1_%LDQ- SFLG,I_(CHECK IF€€ SEQ. NO. WERE ADDED._^1_%SQN COMP3_^1_%LDA- ECCOR,I_'YES._^1_%INA 40_^1_%JMP* COMP2_^1COMP3 LDQ- HOLLR,I_'CHECK NEXT CHARACTER TO BE STORED IN._^1_%SQP 1_Q72*1682_^1_%INA 1_^1COMP2 STA- ECCOR,I_^1_%RTJ MAKEQ_^1_%RTJ- (COMREQ)_^1_%JMP INCS10_^1_%SPC 4_^1*_]_^1********_*CHECK V FIELD AND PASS IT BACK TO THE USER IF IT_^1********_,IS SET, ELSE RETURN TO CALLER._^1*_]_^1CHKV_€€!NOP 0_^1_%SAP CHKVX_^1_%STA- ESTAT1,I_^1_%STA- FTIME,I_%FLAG THE RESET FLAG ROUTINE._^1_%TRA Q_^1_%RTJ* CHKEOF_^1_%JMP* COMP2_^1CHKVX JMP* (CHKV)_^1_%SPC 2_^1CLR_"NOP 0_^1_%ENA 0_^1_%STA- SEQNUM,I_^1_%STA- ID,I_^1_%STA- ID+1,I_^1_%STA- ID+2,I_^1_%STA- FSTCHR,I_^1_%ENA 1_^1_%STA- PCN5F,I_^1_%LDA- ADINPB,I_^1_%STA- INPPTR,I_^1_%JMP* (CLR)_^1_%SPC 4_^1RCSY_!NOP 0_,READ A CS€€Y/ OR END/ CARD_^1_%ENA 0_^1_%STA* BUFSIZ_'FORCE THE FIRST COSY READ._^1_%ENA 40_+NUMBER OF WORDS_^1_%RTJ* RQQ_^1_%LDQ- ADINPB,I_^1_%LDA- 5,Q_^1_%SUB* SL_+IS IT A /_^1_%SAZ C1_+YES_^1ER_#ENA 2_,FIRST CARD NOT A CSY/ CARD._^1_%JMP* D11_^1C1_#LDA- ENDDCK,I_$IF ENDDCK SET_^1_%SAZ CC_^1_%JMP* EDLOOK_'LOOK FOR END/ CARD_^1CC_#LDA- 4,Q_^1_%SUB* SY_^1_%SAZ C2_^1_%JMP* ER_^1C2_#LDA- €€3,Q_^1_%SUB* C_^1_%SAZ IDCK_^1_%JMP* ER_+NOT A CSY/ CARD_^1IDCK_!LDA- (ZERO),Q_^1_%SUB* BLANK_^1_%SAN IDPUT_^1_%RAO- SFLG,I_'WE WON'T BE ADDING SEQUENCE NUMBERS_^1_%JMP* (RCSY)_^1IDPUT LDA- 36,Q_^1_%STA- ID,I_)PICK UP 6 CHARACTER ID AND SAVE_^1_%LDA- 37,Q_^1_%STA- ID+1,I_^1_%LDA- 2,Q_^1_%STA- ID+2,I_^1_%JMP* (RCSY)_^1_%SPC 4_^1RQQ_"NOP 0_^1_%STA* RLU+1_^1_%LDQ- I_,SAVE I_^1_%S€€TQ* ISAVE_^1_%ENQ 0_^1_%RTJ SETREQ_^1_%STQ* RREQ_^1_%RTJ- ($F4)_^1RREQ_!NUM $4800_^1_%ADC RC1_^1_%NUM 0_^1RLU_"NUM 0_^1_%NUM 40_^1RRB_"NUM 0_^1_%JMP- (DISP)_^1RC1_"LDA* ISAVE_^1_%STA- I_^1_%ENQ 1_,SET UP COSY DRIVER PHYSTB TO LOOK LIKE THE_^1_%RTJ* PLUGPT_'DEVICE PHYSTB._^1_%LDA* RLU_^1_%RTJ* CHKV_^1_%JMP* (RQQ)_^1_%SPC 4_^1EDLOOK LDA- 4,Q_^1_%SUB* ND_^1_%SAZ D1_^1_%JMP*€€ CC_+NOT AN END/ STILL COULD BE A CSY/_^1D1_#LDA- 3,Q_^1_%SUB* E_^1_%SAZ D2_^1_%ENA 3_,NO END/ CARD ENCOUNTERED._^1D11_"JMP ERRPRO_^1D2_#LDA* M_^1_%LDQ- ECCOR,I_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%LDA* ON_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%LDA* BLNK_^1_%STA- (ZERO),Q_^1_%INQ 9_^1_%RTJ* RESET_(CLEAR THE FLAGS_^1_%TRQ A_^1_%JMP* COMP2_^1CHKEOF NOP 0_^1_%ENA 0_^1_%LLS 2_,CHECK FOR€€ EOF_^1_%INA -3_^1_%SAZ EOFA_^1_%JMP* D3_^1EOFA_!LLS 1_+CLEAR READY BIT AND SET BIT 14_^1_%EOR- $4_^1_%LLS 13_^1_%STA- 8,I_^1D3_#RTJ* RESET_'CLEAR PROCESS FLAGS_^1_%LDA- ECCOR,I_%SET SHORT READ_^1_%INA 1_^1_%STA- ECCOR,I_^1_%JMP* (CHKEOF)_^1_%SPC 4_^1RESET NOP 0_^1_%ENA 0_^1_%STA- SFLG,I_^1_%STA- ENDDCK,I_^1_%INA 1_^1_%STA- FTIME,I_^1_%RTJ* CLR_^1_%JMP* (RESET)_^1*_]_^1* €€* * * * * *_^1*_]_^1M_$ALF 1, M_^1ON_#ALF 1,ON_^1BUFSIZ NUM 192_^1_%NUM 0_^1BLNK_!EQU BLNK(*)_^1ENDREC ALF 3,_^1E_$ALF 1, E_^1ND_#ALF 2,ND/_^1*_]_^1_%SPC 2_^1*_8WRITEI SUBROUTINE_^1*_]_^1*_*OUTPUTS THE CARD IN THE HOLLERITH INPUT BUFFER._^1*_]_^1WRITEI 0_"0_^1_%LDA- SFLG,I_^1_%SAZ 1_^1_%JMP* (WRITEI)_$NO SEQUENCE NUMBERS FOR THIS DECK_^1_%LDA- SEQNUM,I_$CONVERT INPUT RECO€€RD COUNT TO DECIMAL. STORE_^1_%STQ* QSAVE_^1_%RTJ* WRITI1_)IN SEQUENCE NUMBER FIELD (COLUMNS 76-80)._^1_%RTJ* STORE_^1_%RTJ* WRITI1_^1_%RTJ* STORE_^1_%ENQ 0_^1_%DVI- TEN_^1_%INQ $30_^1_%LDA* IDINP_^1_%SAN PID_*PUT I.D. ON THE RECORD_^1_%ADQ- $30_*ADD ABLANK - NO I.D._^1_%JMP* LID_^1PID_"LDA- ID+1,I_^1_%AND- NZERO+8_^1_%AAQ Q_^1_%RTJ* STORE_^1_%LDQ- ID,I_^1LID_"RTJ* STORE_^1_%J€€MP* (WRITEI)_^1_%SPC 4_^1*_]_^1WRITI1 0_"0_^1_%ENQ 0_,CONVERT HEXIDECIMAL VALUE IN A TO A DECIMAL_^1_%DVI- TEN_,WORD (TWO CHARACTERS)._^1_%INQ $30_^1_%STQ* WRTMP_^1_%ENQ 0_^1_%DVI- TEN_^1_%INQ $30_^1_%QLS 8_^1_%ADQ* WRTMP_^1_%JMP* (WRITI1)_^1_%SPC 4_^1*_]_^1STORE NOP 0_^1_%STQ* (QSAVE)_^1_%LDQ* QSAVE_^1_%INQ -1_^1_%STQ* QSAVE_^1_%JMP* (STORE)_^1_%SPC 4_^1QSAVE NUM 0_^1€€IDINP NUM 0_^1_%SPC 4_^1BBUF_!NOP 0_,BLANKS OUT BUFFER_^1_%STA* QSAVE_^1_%LDQ- NWORDS,I_^1_%INQ -1_^1_%LDA* BLNK_^1BLK_"STA* (QSAVE),Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* BLK_^1_%JMP* (BBUF)_^1_%SPC 4_^1READI NOP 0_^1_%LDA- ECCOR,I_^1_%STA- HOLPTR,I_^1_%RTJ* BBUF_^1_%ENA 0_^1_%STA- ENDDCK,I_$CLEAR THE END OF DECK MARKER AND SET THE_^1_%STA- FSTCHR,I_'FIRST CHARACTER MARKER._^1€€_%LDA* LRSET_^1_%STA- HOLLR,I_%SET HOLLERITH BUFFER L/R MARKER TO LEFT._^1RDI05 LDA- INPPTR,I_^1_%SUB* BUFSIZ_'TEST FOR INPUT BUFFER EMPTY._^1_%SUB- ADINPB,I_^1_%SAZ 1_^1_%JMP* RDI07_^1_%LDA- ADINPB,I_$BUFFER EMPTY. RESET THE BUFFER POINTER TO_^1_%STA- INPPTR,I_'THE START OF THE BUFFER._^1_%LDA* LRSET_^1_%STA- INPLR,I_%SET INPUT BUFFER L/R MARKER TO LEFT._^1_%LDA =N$C0_(192 WOR€€DS_^1_%EQU N192(*-1)_^1_%RTJ RQQ_*READ A COSY RECORD_^1_%LDA* N192_^1_%STA* BUFSIZ_^1*_]_^1*_*UNPACKING ROUTINE_^1*_]_^1RDI07 LDQ- INPPTR,I_^1_%LDA- (ZERO),Q_^1_%LDQ- INPLR,I_%SWITCH INPUT L/R MARKER._^1_%QLS 1_^1_%STQ- INPLR,I_^1_%SQM 2_^1_%RAO- INPPTR,I_$RIGHT CHARACTER. INCREMENT BUFFER POINTER._^1_%JMP* *+2_^1_%ARS 8_,LEFT CHARACTER. SHIFT TO RIGHT HALF._^1_%AND- LPMASK€€+8_^1_%LDQ- FSTCHR,I_^1_%SQN RDI08_^1_%INA -$30_)FIRST CHARACTER IS THE ID CHARACTER._^1_%STA* IDINP_*DECREMENT TO GET A 0 OR A 1._^1_%RAO- FSTCHR,I_^1_%INA -$2F_)IF CHARACTER WAS $5F, HANDLE SPECIAL. SHOULD_^1_%SAZ 1_.BE AN END-OF-DECK CHARACTER._^1_%JMP* RDI05_^1_%ENA $5F_^1RDI08 STA* CHAR_)SAVE THE CHARACTER BEING UNPACKED._^1_%LDA- PCN5F,I_^1_%SAN 1_,THE PREVIOUS CHARAC€€TER WAS NOT $5F._^1_%JMP* RDI11_^1_%LDA* CHAR_^1_%INA -$5F_^1_%SAN RDI09_(THIS CHARACTER NOT $5F._^1_%STA- PCN5F,I_%SET PREVIOUS CHARACTER = $5F._^1_%JMP* RDI05_^1RDI09 LDA* CHAR_^1_%LDQ- HOLLR,I_%SWITCH HOLLERITH BUFFER L/R MARKER._^1_%QLS 1_^1_%STQ- HOLLR,I_^1_%SQP RDI10_^1_%ALS 8_,STORE THE CHARACTER IN THE LEFT HALF OF THE_^1_%INA $20_,WORD WITH A BLANK IN THE RIGHT HALF€€._^1_%LDQ- HOLPTR,I_^1_%STA- (ZERO),Q_^1_%JMP* RDI05_^1RDI10 LDQ- HOLPTR,I_$STORE THE CHARACTER IN THE RIGHT HALF OF THE_^1_%INA -$20_+WORD (REMOVING THE BLANK)._^1_%ADD- (ZERO),Q_^1_%STA- (ZERO),Q_^1_%RAO- HOLPTR,I_$INCREMENT HOLBUF POINTER._^1_%JMP* RDI05_^1RDI11 LDA* CHAR_^1_%STA- PCN5F,I_%SET PREVIOUS CHARACTER NOT $5F._^1_%INA -$20_^1_%SAN 2_^1_%ENA $5F_*HAD $5F20, A TRU€€E $5F CHARACTER._^1_%JMP* RDI09+1_^1_%INA -$3E_^1_%SAZ 2_,HAD $5F5E - END OF CARD._^1_%SAM RDI12_(HAD $5FXX, A STRING OF BLANKS._^1_%RAO- ENDDCK,I_$HAD $5F5F. SET END OF DECK MARKER._^1_%LDA- HOLLR,I_^1_%SAP 1_^1_%RAO- HOLPTR,I_^1_%JMP* (READI)_^1RDI12 INA $38_^1_%SAM 1_^1_%INA -1_+CHARACTER WAS 26 OR GREATER. DECREMENT BY 1._^1_%INA 8_,NUMBER OF BLANKS = CHARACTER - $20€€ + 2._^1_%ENQ 0_^1_%LLS 15_^1_%ADQ- HOLPTR,I_$INCREMENT HOLLERITH POINTER BY_^1_%STQ- HOLPTR,I_'HALF THE NUMBER OF BLANKS._^1_%SAP RDI13_(HAD AN EVEN NUMBER OF BLANKS._^1_%LDA- HOLLR,I_^1_%SAP 1_^1_%RAO- HOLPTR,I_$WAS A RIGHT CHARACTER. INCREMENT POINTER._^1_%ALS 1_,SWITCH THE HOLLERITH L/R MARKER._^1_%STA- HOLLR,I_^1RDI13 JMP* RDI05_^1_%SPC 4_^1*_]_^1LRSET NUM $5555_^1*_€€8WRITE SUBROUTINE_^1CHAR_!NUM 0_^1WRTMP NUM 0_,TEMPORARY STORAGE USED BY WRITEI AND WRITE._^1WRTMP1 NUM 0_,TEMPORARY STORAGE USED BY WRITEI_^1_%SPC 4_^1*_]_^1WRITE 0_"0_^1_%STQ* WRTMP1_^1_%ENA $30_*NO ID'S ON WRITES_^1_%RTJ* PACK_)PACK THE ID MARKER IN CSYBUF._^1WRITE7 LDA- (ZERO),Q_$GET THE HOLLERITH WORD._^1_%ALS 8_^1_%RTJ* PACK_)PACK LEFT CHARACTER IN CSYBUF._^1_%LDA- (Z€€ERO),Q_^1_%RTJ* PACK_)PACK RIGHT CHARACTER IN CSYBUF._^1_%INQ 1_^1_%TRQ A_^1_%SUB* WRTMP1_^1_%SUB- NWORDS,I_^1_%SAZ 1_,DONE WHEN 36 WORDS HAVE BEEN OUTPUT._^1_%JMP* WRITE7_^1_%LDA* BLKCTR_^1_%SAZ WRIT71_^1_%STA* EBKCTR_^1_%RTJ* PAK01_^1_%CLR A_^1WRIT71 STA* BLKCTR_^1_%STA* EBKCTR_^1_%ENA $5F_^1_%RTJ* PAK06_(OUTPUT END OF CARD CHARACTERS ($5F5E)._^1_%ENA $5E_^1_%RTJ* PAK06_^1€€_%JMP* (WRITE)_^1*_8PACK SUBROUTINE_^1*_]_^1*_*PACKS CHARACTERS INTO THE COSY OUTPUT BUFFER AND WRITES_^1*_,THE BUFFER WHEN IT IS FULL._^1*_*ENTER WITH THE CHARACTER TO BE PACKED IN THE ACCUMULATOR._^1*_*Q IS RESTORED BEFORE EXITING THE ROUTINE._^1*_]_^1PACK_!0_"0_^1_%STQ* SAVEQ_^1_%AND- LPMASK+8_^1_%STA* CHAR_^1_%INA -$20_^1_%SAZ 2_,IS A BLANK_^1_%RTJ* PAK01_^1_%JMP* PAK03_^1_%R€€AO* BLKCTR_'INCREMENT BLANK COUNTER._^1_%LDA* BLKCTR_^1_%INA -62_^1_%SAP PAK00_^1_%JMP* (PACK)_^1PAK00 ENA $5F_*62 BLANKS OR END OF DECK OR END OF LIBRARY._^1_%RTJ* PAK06_(OUTPUT $5F._^1_%LDA* BLKCTR_^1_%INA $1F_^1_%RTJ* PAK06_(OUTPUT $5D OR $5E OR $5F._^1_%JMP* PAK05_^1_%SPC 2_^1PAK01 NOP 0_^1_%LDA* BLKCTR_^1_%SAN PAK011+1_^1_%LDQ* EBKCTR_^1_%SQZ PAK011_^1_%JMP* (PAK01)_€€^1PAK011 JMP* PAK03_^1_%INA -3_^1_%SAP PAK02_(OVER 2 BLANKS._^1_%INA 2_^1_%STA* BLKCTR_'DECREMENTS BLANK COUNTER BY ONE._^1_%ENA $20_^1_%RTJ* PAK06_(OUTPUT A BLANK._^1_%JMP* PAK01+1_^1PAK02 ENA $5F_^1_%RTJ* PAK06_(OUTPUT $5F._^1_%LDA* BLKCTR_^1_%INA -8_^1_%SAM 1_^1_%INA 1_^1_%INA $26_^1_%RTJ* PAK06_(OUTPUT NUMBER OF BLANKS ($21 - $5C (NOT $26))_^1_%JMP* (PAK01)_^1_%SPC 2€€_^1PAK03 LDA* CHAR_^1_%INA -$5F_^1_%SAN PAK04_^1_%ENA 1_,TRUE $5F. SET TO OUTPUT $5F THEN $20._^1_%STA* BLKCTR_^1_%JMP* PAK00_^1PAK04 LDA* CHAR_^1_%RTJ* PAK06_(OUTPUT THE CHARACTER._^1PAK05 ENA 0_^1_%STA* BLKCTR_'CLEAR THE BLANK COUNTER._^1_%LDQ* SAVEQ_^1_%JMP* (PACK)_^1*_]_^1PAK06 0_"0_^1_%LDQ- CSYLR,I_%SWITCH COSY L/R MARKER._^1_%QLS 1_^1_%STQ- CSYLR,I_^1_%SQP PAK07_(+€€ MEANS FILL RIGHT CHARACTER._^1_%ALS 8_^1_%LDQ- CSYPTR,I_^1_%STA- (ZERO),Q_$STORE THE LEFT CHARACTER IN THE BUFFER._^1_%JMP* (PAK06)_^1PAK07 LDQ- CSYPTR,I_^1_%ADD- (ZERO),Q_^1_%STA- (ZERO),Q_$STORE THE RIGHT CHARACTER IN THE BUFFER._^1_%RAO- CSYPTR,I_$INCREMENT THE BUFFER POINTER AND SEE IF THE_^1_%LDA- CSYPTR,I_'BUFFER IS FULL._^1_%SUB BUFSIZ_^1_%SUB- ADCSYB,I_^1_%SAN PAK09_^1€€_%LDA- ADCSYB,I_$BUFFER IS FULL. RESET THE BUFFER POINTER_^1_%STA- CSYPTR,I_'AND WRITE THE BUFFER._^1_%LDA N192_^1_%LDQ- ADINPB,I_^1_%RTJ WRCD_^1PAK09 JMP* (PAK06)_^1BLKCTR NUM 0_,BLANK CHARACTER COUNTER FOR PACK SUBROUTINE._^1EBKCTR NUM 0_,BLANK COUNTER FLAG FOR END OF RECORD._^1SAVEQ NUM 0_,VALUE OF Q WHEN PACK SUBROUTINE WAS ENTERED._^1*_]_^1*_*PACKS END-OF-LIBRARY CHARA€€CTERS INTO THE COSY OUTPUT BUFFER_^1*_,AND WRITES THE BUFFER._^1*_]_^1CLEARI 0_"0_^1_%ENA $5F_^1_%RTJ* PAK06_^1_%ENA $5F_*OUTPUT END OF LIBRARY MARKER._^1_%RTJ* PAK06_^1_%LDA- CSYPTR,I_$CALCULATE THE NUMBER OF WORDS THAT WERE USED_^1_%SUB- ADCSYB,I_'IN THE BUFFER._^1_%LDQ- CSYLR,I_^1_%SQP 1_^1_%INA 1_,IF RIGHT, INCREMENT NUMBER OF WORDS BY 1._^1_%SAZ CLEAR2_^1_%LDQ =N0_^1CLEA€€R1 EQU CLEAR1(*-1)_^1_%SQN CLEA11_^1_%LDA N192_^1CLEA11 LDQ- ADINPB,I_^1_%INA -10_*ALLOW A MINIMUN RECORD OF 10_%**MOSO4.0**_^1_%SAP 1_,WORDS FOR TAPE DRIVER NOISE LENGTH.**MOSO4.0**_^1_%INA 10_N**MSOS4.0**_^1_%INA 10_N**MSOS4.0**_^1_%RTJ WRCD_^1CLEAR2 LDA- ADCSYB,I_^1_%STA- CSYPTR,I_$RESET THE COSY BUFFER POINTER AND THE_^1_%LDA LRSET_*LEFT/RIGHT CHARACTER POINTER._^1_%ST€€A- CSYLR,I_^1_%JMP* (CLEARI)_^1_%SPC 4_^1ERRCOD NUM 0_^1ERRPRO STA* ERRCOD_^1_%LDA- EREQST,I_$SET THE ERROR BIT FOR MAKEQ._^1_%EOR- BIT14_^1_%STA- EREQST,I_^1_%RTJ MAKEQ_^1_%LDQ* ERRCOD_'FORM ERROR WORD FOR ALTDEV._^1_%QLS 10_^1_%ADQ- ELU,I_^1_%QLS 6_^1_%LDA- (ZERO),I_^1_%STA* ERRPR1_^1_%RTJ- (REQPRO)_^1*_]_^1*_$SCHDLE ALTDEV,0,0,D_^1*_]_^1ERRPR1 NUM 0_^1_%ADC ALTDEV_^1_%LD€6A- $12_^1_%STA- FTIME,I_^1_%JMP INCS10_^1_%END_]_^__6PDPSUDO CSY/ C43 P€1_%NAM DPSUDO_'DECK-ID C43 MSOS 4.1_-SUMMARY-079_^1*_$BACKGROUND FILE MANAGER PSEUDO MAG TAPE DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1*_]_^1*PSTPD1 ADC $5200+LPSDO_!00 SCHEDULER CALL_^1*_%ADC IPSUDO_%01_!INITIATOR ADDRESS_^1*_$NUM 0_,02 INTERNAL TE€€MP STORAGE MOTION CODE_^1*_$NUM 0_,03 INTERNAL TEMP STORAGE ITERATION_^1*_$NUM 0_,04 INTERNAL TEMP STORAGE WRITCK,RTVBLK_^1*_%NUM 0_,05 LOGICAL UNIT_^1*_%NUM 0_,06 PARAMETER LIST ADDRESS_^1*PWES1 NUM 0_,07 EQUIPMENT CODE - NONE_^1*_%NUM $A46_)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 1_,12 DEVICE STATUS_^1*_%ADC LPSUDO_'13 DRIVER LENGTH IF MASS MEMORY_^1*_%ADC SPSUDO_'14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 RETURN AND TEMP STORAGE_^1*_%NUM 0_,16 FILE NUMBER_^1*_%NUM 0_,17 TEMP FOR MOTION REQ PROCESSOR_^1*_%NUM 0_,18 TEMP FOR MOTION REQ PROCESSOR_^1*_%BZS (12)_)19 REQUEST BUFFER - REQBUF_^1*_%NUM 0_,31 BLOCK POINTER - BLKPTR_^1€€*_%BZS (30)_)32 POINTER BLOCK - PTRBLK_^1*PSDRQ1 NUM 0_,62 *_^1*_%NUM $5400_(63 *_^1*_%NUM 0_,64 * AREA TO BE STUFFED WITH_^1*_%ADC PWES1_(65 * FILE MANAGER AND DISK REQUESTS_^1*_%BZS (6)_*66 *_^1*_%NUM $1400_(72 *_^1*_%RTJ* (PSDRQ1)_$73 *_^1*_%ADC 0_,74 INPUT BUFFER ADDRESS_^1*_%ADC PSTPD2_'75 PHYSTB THREAD_^1_%SPC 2_^1*_$*_%*_%*_%*_%*_%*_%*_%*_^1*_$THIS DRIVER €€SIMULATES MAGNETIC TAPE IN ORDER TO AMKE_"*_^1*_$FILES WHICH ARE SET UP THROUGH THE JOB PROCESSOR_'*_^1*_$AVAILABLE FOR STORING COSY SOURCE, RELOCATABLE BINARY_!*_^1*_$PROGRAMS, INSTALLATION TAPE IMAGES, ETC._/*_^1*_]*_^1*_$USE OF THIS DRIVER DEPENDS ON THE PRESENCE OF THE 1700 *_^1*_$FILE MANAGER._J*_^1*_$*_%*_%*_%*_%*_%*_%*_%*_^1_%SPC 3_^1_%EQU BUFLNG(192)_!LENGTH OF INTERMEDI€€ATE BUFFER_^1_%SPC 2_^1_%ENT IPSUDO_I**MSOS 4.1**_^1_%SPC 2_^1*_$EQUATES FOR ADDRESSING THE PHYSICAL DEVICE TABLE_'*_^1_%SPC 1_^1_%EQU EDCN(2)_%DRIVER CONTINUATOR ADDR_^1_%EQU REQIND(EDCN) NO CONTINUATOR, USE FOR ERROR IND._^1_%EQU EDPGM(3)_$DRIVER TIMEOUT ERROR ROUTINE_^1_%EQU ELU(5)_'LOGICAL UNIT ASSIGNED TO DEVICE_^1_%EQU EPTR(6)_%CALL PARAMETER LIST LOC._^1_%EQU EWES€€(7)_%SAVE LAST FILE NUM_^1_%EQU EREQST(8)_#REQUEST STATUS_^1_%EQU ESTAT1(9)_#STATUS WORD 1_^1_%EQU ECCOR(10)_#LOCATION OF BUFFER TO OUTPUT_^1_%EQU ELSTWD(11)_"RECORD LENGTH_^1_%EQU ESTAT2(12)_"HARDWARE STATUS_^1_%EQU RETURN(15)_"RETURN ADDR. FROM NFNR, MAKQ, NCMPRQ_^1_%EQU FILNUM(16)_"FILE NUMBER--FILLED BY ** PROC._^1_%EQU RECPTR(17)_"POINTER TO RECORD BEING STORED_^1_%EQU€€ REQBUF(19)_"REQUEST PROCESSING BUFFER_^1_%EQU BLKPTR(31)_"INDEX TO RECORD POINTER BLOCK_^1_%EQU PTRBLK(32)_"RECORD POINTER BLOCK_^1_%EQU REQUST(63)_"REQUEST TO FILE MANAGER_^1_%EQU BUFADR(74)_"ADDRESS OF INTERMED. BUFFER_^1_%EQU LINK(75)_$LINK PHYSTABS TOGETHER_^1_%SPC 3_^1*_$EQUATES FOR LOCORE MASKS_?*_^1_%SPC 1_^1_%EQU LPMSK(2)_^1_%EQU NZERO($12)_^1_%EQU ONEBIT($23)_^€€1_%EQU ZROBIT($33)_^1_%EQU ZERO($22)_^1_%SPC 3_^1*_$EQUATES FOR PROCESSOR CELLS_<*_^1_%EQU FNR($B5)_$FIND NEXT REQUEST ROUTINE_^1_%EQU COMPRQ($B6)_!COMPLETE REQUEST ROUTINE_^1_%EQU DISP($EA)_#DISPATCHER_^1_%EQU MONI($F4)_^1_%EQU LEVEL($EF)_^1_%SPC 3_^1*_$EXTERNALS_N*_^1_%SPC 1_^1_%EXT DEFFIL_^1_%EXT MAKEQ_^1_%EXT ALTDEV_^1_%EXT JLLUV4_^1_%EXT MAS300_^1_%EXT LOG_*ERR€€OR LOGGING ENTRY_.**MSOS 4.1**_^1_%EJT_]_^1*_$ENTRY FOR MASS MEMORY RESIDENT DRIVER_(*_^1_%SPC 3_^1START STQ- I_N**MSOS 4.1**_^1_%LDQ =XIPSUDO-START_A**MSOS 4.1**_^1_%AAQ Q_N**MSOS 4.1**_^1_%STQ- 1,I_*FILL IN INITIATOR ADDRESS_(**MSOS 4.1**_^1_%JMP* IPSUDO+1_G**MSOS 4.1**_^1IPSUDO STQ- I_,INITIATOR_8**MSOS 4.1**_^1_%RTJ* HERE_)COMPUTE LOCATION_1**MSOS 4.1**_^1HERE_!NUM 0_N**MS€€OS 4.1**_^1_%LDA* HERE_)MAY BE CORE RESIDENT_-**MSOS 4.1**_^1_%ADD =XPTBFV4-HERE *ADDRESS OF I/O BUFFER TO PDT_#**MSOS 4.1**_^1_%STA- BUFADR,I_$ADDRESS OF I/O BUFFER TO PHYSTAB **MSOS 4.1**_^1_%JMP PSDTV4_'CONTROL GIVEN TO FWA BY_***MSOS 4.1**_^1*_8MASS MEMORY EXECUTIVE_,**MSOS 4.1**_^1_%EJT_]_^1*_$*_%*_%*_%*_%*_%*_%*_^1*_$THIS SECTION SIMULATES MOTION REQUESTS._(*_^1*_$ALL MOTI€€ON FUNCTIONS ARE THE SAME AS FOR MAG_"*_^1*_$TAPE EXCEPT UNLOAD WHICH ACTS LIKE A REWIND_#*_^1*_$FUNCTION._F*_^1*_$*_%*_%*_%*_%*_%*_%*_^1MOT100 LDA- NZERO+10_^1_%EOR- LPMSK+7_^1_%AND- ESTAT1,I_$CLEAR BITS INDICATING REWIND OR_^1_%STA- ESTAT1,I_$BACKSPACE FILE OR RECORD_^1_%LDA* MCOD_)MOTION CODE_^1_%CLR Q_^1_%LLS 4_^1_%JMP* MOT110_^1MOTION LDQ- EPTR,I_^1_%LDQ- 4,Q_*PICK UP MOTION€€ CODES WORD_^1_%CLR A_^1_%STA* MCOD_)MOTION CODE_^1_%LRS 12_+MOTION CODE IN Q_^1_%SQM 2_,IS IT REPEATED MOTION_^1MOT110 STA* MCOD_)NO, STORE REMAINING CODE_^1_%ENA $10_*SET NUMBER OF TIMES TO ONE_^1_%ARS 4_^1_%SQP 1_^1_%INQ $7_+MASK OFF MOTION CODE_^1_%AND- LPMSK+12_$AND NUMBER OF TIMES_^1_%JMP* REQTBL,Q_$BRANCH TO APPRIPRIATE PROCESSOR_^1CMPLET CLR A_^1_%STA- ECCOR,I_^1_%S€€TA- ELSTWD,I_^1_%JMP NCOMP_^1REQTBL JMP* CMPLET_'MOTION CODE IS ZERO, REQUEST COMPLETE_^1_%JMP* BSPR_)BACKSPACE RECORD(S)_^1_%JMP* WEF_*WRITE END OF FILE(S)_^1_%JMP* REW_*REWIND TAPE (NO. TIMES IGNORED)_^1_%JMP* UNL_*UNLOAD TAPE (NO. TIMES IGNORED)_^1_%JMP* ADVF_)ADVANCE FILE(S)_^1_%JMP* BSVF_)BACKSPACE OVER FILE(S)_^1_%JMP* ADVR_)ADVANCE RECORD(S)_^1ADVF_!JMP ADF_^1ADVR_!JMP AD€€R_^1BSVF_!JMP* BSF_^1MCOD_!NUM 0_,SAVED MOTION CODE_^1_%EJT_]_^1*_$UNLOAD AND REWIND SIMULATION_;*_^1_%SPC 3_^1UNL_"CLR Q_,NO MORE MOTION CODES IN THIS_^1_%STQ* MCOD_)REQUEST WILL BE PROCESSED_^1REW_"LDA- ESTAT1,I_$SET BIT TO INDICATE_^1_%EOR- ONEBIT+7_$REWIND OR UNLOAD_^1_%STA- ESTAT1,I_^1_%LDA- ESTAT2,I_$IF TAPE IS ALREADY AT LOAD POINT_^1_%AND- ONEBIT+10_^1_%SAZ 1_^1_%JMP* R€€EW200_'DO NOT ATTEMPT REWIND--SET STATUS,EXIT_^1REW50 RTJ OPPRBK_'PUT OUT LAST PTRBLK_^1REW200 LDA- ESTAT2,I_$IF MOTION WAS UNLOAD BUSY HAS_^1_%AND- ONEBIT+15_#MASK WRITE RING_^1_%ADD =N$401_'SET LOAD POINT, READY_^1_%STA- ESTAT2,I_^1_%LDA- ESTAT1,I_$WAS THIS REWIND REQ._^1_%AND- ONEBIT+7_^1_%SAN 2_,YES_^1_%JMP NOWRT_(NO, MUST BE A NEW FILE_^1WEF100 JMP* MOT100_'GO GET NEXT MO€€TION CODE_^1_%EJT_]_^1*_$WRITE END OF FILE_F*_^1_%SPC 3_^1WEF_"STA- 3,I_*SAVE ITERATION_^1_%RTJ WRITCK_'CHECK CONDITIONS FOR WRITE_^1WEF20 LDQ- BLKPTR,I_$BUMP POINTER TO PTRBLK_^1_%INQ 2_^1_%STQ- BLKPTR,I_^1_%SET A_,MINUS ZERO AS RECORD DISK ADDR._^1_%STA- PTRBLK,B_$INDICATES END OF FILE_^1_%STA- PTRBLK+1,B_^1_%LDA- 3,I_*GET ITERATION COUNT_^1_%INA -1_^1_%SAZ 1_,YES_^1_%JMP*€€ WEF_*CONTINUE WRITING EOF_^1_%JMP* BSP160_'GO SET STATUS BITS FOR EOF_^1_%EJT_]_^1*_$BACKSPACE RECORD_G*_^1_%SPC 3_^1BSPR_!TRA Q_,Q TEMPY_^1_%LDA- ESTAT1,I_$SET BIT TO INDICATE_^1_%EOR- ONEBIT+8_$BACKSPACE RECORD_^1_%STA- ESTAT1,I_^1BACKER STQ- 3,I_*SAVE ITERATION COUNT_^1_%LDA- ESTAT2,I_^1_%AND- ONEBIT+10_#MASK LOAD POINT_^1_%SAZ 1_^1_%JMP* MOT100_'AT LOAD POINT_^1_%LDQ- BLKPT€€R,I_$GET CURRENT INDEX_^1_%SQN BACKUP_'MORE THIS BLOCK_^1_%RTJ* RTVBLK_'RETRIEVE PREVIOUS BLOCK_^1_%SAN MORE_)THERE WAS A PREVIOUS BLOCK_^1_%JMP* REW200_'AT LOAD POINT, GO SET STATUS_^1MORE_!ENQ 26_^1BACKUP INQ -2_+BACK UP INDEX_^1_%STQ- BLKPTR,I_$SAVE IT_^1_%LDQ- PTRBLK+2,B_"GET POINTER OF RECORD JUST BKSP OVER_^1_%LDA- ESTAT1,I_^1_%AND- ONEBIT+8_$MASK BACKSPACE RECORD_^1_%SAN€€ 1_,RECORDS BACK_^1_%TCQ Q_,FILES BACK, SO COMP FOR TEST_^1_%SQP YUP_*RECORD-NOT-FILE,OR FILES-AND-FILE--BUMP COUNT_^1_%SAN 1_,RECORD IS FILE_^1_%JMP* BACKER+1_$RECORD NOT FILE_^1BSP160 JMP* ADF125_'YES, GO SET EOF STATUS_^1YUP_"LDQ- 3,I_*NOT EOF, GET ITERATION COUNT_^1_%INQ -1_^1_%SQZ 1_,DONE_^1_%JMP* BACKER_'MORE, CONTINUE BACKSPACE_^1_%SAN 1_,RECORDS_^1_%JMP* ADF125_'FILE€€S, SET EOF STATUS_^1_%LDA- ESTAT2,I_^1_%AND* ADF130_'MASK NON-PERMANENT BITS OFF STATUS_^1_%INA $12_*SET EOP STATUS AND BUSY_^1_%STA- ESTAT2,I_^1BSP200 JMP* MOT100_'DO NEXT MOTION_^1_%SPC 5_^1*_$SUBROUTINE TO READ NEXT (FORWARD/BACKWARD) POINTER BLOCK_^1_%SPC 3_^1RTVBLK NOP 0_^1_%LDQ* RTVBLK_^1_%STQ- 4,I_*SAVE RETURN, 4 BECAUSE OPPRBK CALLED_^1_%LDQ- BLKPTR,I_$GET CURRENT INDEX€€_^1_%LDA- ESTAT2,I_$DEVICE STATUS_^1_%AND- ONEBIT+14_#MASK READ/WRITE BIT_^1_%SAN 1_,WRITING_^1_%JMP* READNG_'READING_^1_%LDA- PTRBLK,B_$GET SECTOR_^1_%STA* SECSAV_'SAVE IT_^1_%LDA- PTRBLK+1,B_"WORD RELATIVE TO SECTOR_^1_%STA* WRDSAV_'SAVE IT_^1_%STQ* PTRSAV_'SAVE POINTER_^1_%RTJ OPPRBK_'OUT PTRBLK, SWICHING MODES TO READ_^1_%LDA- ZROBIT+14_^1_%AND- ESTAT2,I_$STATUS TO READ MODE_€€^1_%STA- ESTAT2,I_$NEW STATUS_^1_%LDQ =N0_*RESTORE INDEX_^1PTRSAV EQU PTRSAV(*-1)_^1_%LDA =N0_*RESTORE_^1WRDSAV EQU WRDSAV(*-1)_^1_%STA- PTRBLK+1,B_"WORD_^1_%LDA =N0_^1SECSAV EQU SECSAV(*-1)_^1_%STA- PTRBLK,B_$SECTOR_^1READNG LDA- PTRBLK+1,B_"GET WORD_^1_%STA- RECPTR+1,I_"*********** WHEN READING_^1_%LDA- PTRBLK,B_$GET SEC_!* RECPTR CONTAIN CURRENT PTRBLK_^1_%STA- RECPTR,I_$*€€********** ADDRESS MASS MEMORY_^1_%SAN 1_^1_%JMP* RTVEXT_^1_%LDQ- I_^1_%INQ BLKPTR_'CALCULATE LOCATION CONTAINING_^1_%STQ- REQUST+6,I_^1_%INQ RECPTR-BLKPTR ADDRESS OF MASS MEMORY ADDRESS_^1_%LDA RCRD_)READ REQUEST CODE_^1_%RTJ SETREQ_'SET UP REQUEST_^1_%RTJ- REQUST-1,I_^1RTV50 NOP 0_,EXECUTE REQUEST_^1_%LDA* RTV50_(FIND PHYSTB LOCATION_^1_%INA -BUFADR_^1_%STA- I_^1_%SQP RT€€VEXT_'NO ERROR ON READ_^1_%JMP ALARM_(ERROR, REPORT IT_^1RTVEXT EQU RTVEXT(*)_^1_%LDQ- 4,I_^1_%JMP- (ZERO),Q_^1_%EJT_]_^1*_$BACKSPACE OVER FILE MARKS_>*_^1_%SPC 3_^1BSF_"TRA Q_,ITERATION TO Q_^1_%LDA- ESTAT1,I_$SET BIT TO INDICATE_^1_%EOR- ONEBIT+9_$BACKSPACE FILE_^1_%STA- ESTAT1,I_^1_%JMP* BACKER_'GO USE BSPR TO LOOK FOR FILES BACK_^1_%EJT_]_^1*_$ADVANCE FORWARD OVER FILE MARK€€S_8*_^1_%SPC 3_^1ADF_"STA- ELSTWD,I_$SAVE NO. OF REPETITIONS_^1_%LDQ- BLKPTR,I_^1_%LDA- ESTAT2,I_^1_%AND- ONEBIT+10_#IS TAPE AT LOAD POINT_^1_%SAZ ADF30_^1_%RTJ* RTVBL1_'YES, BRING IN FIRST PTRBLK_^1_%TRQ A_,REQIND TO A_^1_%CLR Q_^1_%SAP ADF30_^1_%JMP* ADF150_'END OF TAPE_^1ADF20 STA- ELSTWD,I_$SAVE NO. OF REPETITIONS_^1ADF30 INQ -26_*AT END OF PTRBLK_^1_%SQP 1_^1_%JMP* AD€€F100_'NO, CHECK NEXT POINTER_^1_%INQ 28_+YES, READ IN NEXT PTRBLK_^1_%STQ- BLKPTR,I_^1_%RTJ* RTVBLK_^1_%SAN 1_^1_%JMP* ADF150_'YES, END OF TAPE_^1_%ENQ -26_*NO, CONTINUE SCAN FOR EOF_^1ADF100 INQ 28_^1_%LDA- PTRBLK,B_^1_%SAZ ADF150_'END OF TAPE_^1_%SAM ADF120_'NEGATIVE RECORD PTR IMPLIES EOF_^1_%JMP* ADF30_(NOT EOF, CHECK NEXT POINTER_^1ADF120 LDA- ELSTWD,I_$EOF, HAVE WE SKIP€€PED ENOUGH_^1_%INA -1_+FILES_^1_%SAZ 1_^1_%JMP* ADF20_(NO, CONTINUE SCAN FOR FILES_^1_%STQ- BLKPTR,I_$PUT PTR TO NEXT REC. AFTER EOF_^1ADF125 LDA- ESTAT2,I_$YES, MASK NON-PERMANENT STATUS_^1_%AND =N$C401_%MASK PERM STATUS_^1ADF130 EQU ADF130(*-1)_^1_%EOR- ONEBIT+11_#SET EOF,_^1ADF140 INA $32_*ALARM, EOF STATUS_^1_%STA- ESTAT2,I_^1ADF145 JMP* BSP200_'GO PROCESS NEXT MOTION CODE€€_^1ADF150 LDA- ESTAT2,I_^1_%AND =N$C001_%MASK WRITE RING,MODE, READY_^1_%EOR- ONEBIT+9_^1_%JMP* ADF140_'GO SET ALARM+EOP_^1_%EJT_]_^1*_$ADVANCE FORWARD A GIVEN NUMBER OF RECORDS_.*_^1_%SPC 3_^1ADR_"STA- 3,I_*SAVE ITERATIONS_^1_%LDA- ESTAT2,I_$IS TAPE AT LOAD POINT_^1_%AND- ONEBIT+10_#NO, CONTINUE_^1_%SAZ ADR05_(NOT LOAD POINT_^1_%RTJ* RTVBL1_'YES, MUST GET 1ST PTRBLK_^1_%SQP AD€€R05_(NO F.M. ERROR_^1_%JMP* ADR150_'NO FILE DEFINED, END OF TAPE_^1ADR05 EQU ADR05(*)_^1_%LDQ- BLKPTR,I_$GET CURRENT INDEX_^1ADR10 INQ -26_^1_%SQM ADR60_(STILL IN THIS BLOCK_^1_%INQ 28_^1_%STQ- BLKPTR,I_$SAVE IT_^1_%RTJ RTVBLK_'GET NEXT BLOCK_^1_%ENQ 0_^1_%STQ- BLKPTR,I_$INITIALIZE_^1_%SAZ ADR150_'END OF TAPE, NO NEXT BLOCK_^1_%JMP* ADR10_^1ADR60 INQ 28_^1_%LDA- PTRBLK,B€€_$GET SECTOR_^1_%SAZ ADR150_'NO DATA, END OF TAPE_^1_%STQ- BLKPTR,I_$DATA HERE, UPDATE INDEX_^1_%SAP ADR100_'NOT END OF FILE_^1_%JMP* ADF125_'END OF FILE_^1ADR100 LDA- 3,I_*GET COUNT_^1_%INA -1_+DECREMENT_^1_%STA- 3,I_*SAVE IT_^1_%SAZ ADRDON_^1_%JMP* ADR10_(MORE_^1ADR150 JMP* ADF150_'SET END OF TAPE_^1ADRDON JMP* ADF145_'DO NEXT NOTION_^1_%EJT_]_^1*_$SUBROUTINE TO RETRIEVE FIRS€€T POINTER BLOCK_-*_^1_%SPC 3_^1RTVBL1 NOP 0_,THE FIRST POINTER BLOCK MUST BE OBTAINED_^1_%LDA* RTVBL1_'SAVE RETURN_^1_%STA- RETURN,I_^1_%LDA- ESTAT2,I_^1_%AND- ZROBIT+14_#READ MODE_^1_%STA- ESTAT2,I_^1_%LDA* AFLMGR_'CALCULATE ENTRY FOR_^1_%INA $20_*RTVSEQ IN FILE MANAGER_^1_%STA- REQUST+1,I_^1_%LDA* RTJ_^1_%STA- REQUST,I_$STUFF RTJ INSTRUCTION_^1_%CLR A_^1_%STA- RECPTR,I_$REC P€€OINTER = 0_^1_%STA- RECPTR+1,I_^1_%STA- REQUST+9,I_^1_%INA $1F_*STUFF LENGTH_^1_%STA- BLKPTR,I_^1_%INA $22-$1F_^1_%STA- REQUST+3,I_"FILE COMBINATION = 0_^1_%LDA- I_^1_%INA EWES_^1_%STA- REQUST+2,I_"FILE NUMBER_^1_%INA REQIND-EWES_^1_%STA- REQUST+8,I_"REQUST INDICATOR_^1_%INA RECPTR-REQIND_^1_%STA- REQUST+4,I_"RECORD POINTER_^1_%INA BLKPTR-RECPTR_^1_%STA- REQUST+5,I_"BUFFER AD€€DR._^1_%STA- REQUST+6,I_"ALSO LENGTH_^1_%INA REQBUF-PTRBLK+1_^1_%STA- REQUST+7,I_"ADDR OF REQUST BUFFER_^1_%LDA- ONEBIT+15_#PART1 FLAG TO FILE MANAGER_^1_%RTJ- REQUST-1,I_^1_%NOP 0_^1_%CLR A_^1_%STA- BLKPTR,I_^1_%LDQ- REQIND,I_^1_%SQM STLLP_(STILL LOAD POINT_^1_%LDA- ESTAT2,I_^1_%AND- ZROBIT+10_#RESET LOAD POINT_^1_%STA- ESTAT2,I_^1STLLP EQU STLLP(*)_^1_%LDA- RETURN,I_^1_%STA€€* RTVBL1_'RESTORE RETURN_^1_%JMP* (RTVBL1)_^1_%EJT_]_^1AFLMGR ADC DEFFIL_^1RTJ_"NUM $5400_^1DATBUF NUM 0_^1DISBUF NUM 0_^1_%SPC 5_^1*_$SET UP A SEQUETIAL STORE REQUEST IN THE PHYSICAL DEVICE *_^1*_$TABLE OF THIS LOGICAL UNIT_=*_^1_%SPC 3_^1SQSTR NOP 0_^1_%LDQ* SQSTR_^1_%LDA* AFLMGR_'CALCULATE ENTRY FOR_^1_%INA $14_*STOSEQ IN FILE MANAGER_^1_%STA- REQUST+1,I_^1_%LDA* RTJ_^1€€_%STA- REQUST,I_$STUFF RETURN JUMP_^1_%CLR A_^1_%STA- REQUST+8,I_^1_%STA- REQUST+9,I_^1_%LDA- I_^1_%INA EWES_^1_%STA- REQUST+2,I_"AND FILE NUMBER LOCATION_^1_%INA REQBUF-EWES_^1_%STA- REQUST+6,I_^1_%INA REQIND-REQBUF_^1_%STA- REQUST+7,I_^1_%JMP- (ZERO),Q_^1_%EJT_]_^1*_$CHECK ALL CONDITIONS REQUIRED FOR WRITING_^1_%SPC 3_^1WRITCK NUM 0_,ENTRY_^1_%LDA* WRITCK_'SAVE ENTRY_^1_%ST€€A- 4,I_^1_%LDA- ESTAT2,I_$GET DEVICE STATUS, WRITE RING ?_^1_%SAM WRT50_(YES, PROCEDE_^1WRT20 ENA $10_*NO, SET EOP_^1_%EOR- ESTAT2,I_$IN HARDWARE STATUS WORD_^1_%STA- ESTAT2,I_^1_%ENA 13_+ERROR CODE FOR NO WRITE RING_^1_%JMP SETCOD_'TO ERROR EXIT_^1WRT50 LDA- ESTAT2,I_^1_%AND- ONEBIT+10_#IS TAPE AT LOAD POINT_^1_%SAN 1_^1_%JMP* WRT100_'NO, CONTINUE WITH WRITE_^1_%CLR A_,YES€€, CLEAR OUT PTRBLK_^1_%STA- PTRBLK,I_$ZERO THIS BLOCK ADDRESS_^1_%STA- PTRBLK+28,I_!ZERO NEXT BLOCK ADDRESS_^1_%STA- RECPTR,I_$ZERO LAST BLOCK ADDRESS_^1_%ENQ 9_,SET UP RELEASE OF FILE_^1_%LDA =N$B00_'NOP_^1WRT70 EQU WRT70(*)_^1_%STA- REQUST,B_^1_%INQ -1_^1_%SQM 1_^1_%JMP* WRT70_^1_%LDA* RTJ_^1_%STA- REQUST,I_^1_%LDA* AFLMGR_'CALCULATE ENTRY FOR_^1_%INA 4_,RELEASE FILE IN FI€€LE MANAGER_^1_%STA- REQUST+1,I_^1_%LDA- I_^1_%INA EWES_^1_%STA- REQUST+2,I_^1_%INA REQBUF-EWES_^1_%STA- REQUST+3,I_^1_%INA REQIND-REQBUF_^1_%STA- REQUST+4,I_^1_%LDA- ONEBIT+15_#SET UP ABSOLUTE PARAMETER FLAG_^1_%RTJ- REQUST-1,I_"GO RELEASE FILE_^1WRT80 NOP 0_^1_%LDA* AFLMGR_'SET UP DEFINE FILE REQUEST_^1_%STA- REQUST+1,I_^1_%LDA- REQUST+4,I_^1_%STA- REQUST+6,I_^1_%LDA- REQUST+€€3,I_^1_%STA- REQUST+5,I_^1_%LDA* LU_^1_%STA- REQUST+4,I_^1_%LDA- REQUST-1,I_^1_%ADD =XMAXLTH-WRT80_^1_%STA- REQUST+3,I_^1_%LDA- ONEBIT+15_#SET UP ABSOLUTE PARAMETER FLAG_^1_%RTJ- REQUST-1,I_^1_%NOP 0_^1_%ENA 26_+FAKE FULL BLOCK_^1_%STA- BLKPTR,I_^1WRT100 LDA- ESTAT2,I_^1_%AND- ONEBIT+14_#MASK MODE_^1_%SAN WRT105_'WRITING_^1_%LDA- ONEBIT+14_#WERE READING_^1_%ADD- ESTAT2,I_$SET W€€RITE_^1_%STA- ESTAT2,I_^1WRT105 LDA- BLKPTR,I_$GET CURRENT INDEX_^1_%INA -26_*IS PTRBLK FULL_^1_%SAM 1_,NOT FULL_^1_%RTJ* OPPRBK_'YES, GO OUTPUT PTRBLK_^1_%LDQ- 4,I_^1_%JMP- (ZERO),Q_$RETURN_^1_%EJT_]_^1*_$WRITE REQUEST PROCESSOR_^1_%SPC 3_^1WRITE RTJ* WRITCK_'CHECK WRITING CONDITIONS_^1_%RTJ* SQSTR_(SET UP SEQUENTIAL STORE_^1*_8RESTORE IT_^1_%INA ELSTWD-REQIND_^1_%STA- REQUST€€+5,I_"RECORD LENGTH_^1_%LDA- BUFADR,I_^1_%INA -1_^1_%STA- REQUST+4,I_"SET UP BUFFER LOCATION_^1_%LDA- I_^1_%INA PTRBLK_^1_%RAO- BLKPTR,I_$UPDATE PTRBLK INDEX_^1_%RAO- BLKPTR,I_^1_%ADD- BLKPTR,I_$AND LOCATION TO RETURN DISK WORD_^1_%STA- REQUST+3,I_"ADDRESS OF RECORD_^1_%LDQ- ELSTWD,I_^1_%INQ -1_^1_%LDA- BUFADR,I_^1_%STA* DISBUF_^1_%LDA- ECCOR,I_^1_%STA* DATBUF_^1WRT125 INQ -1_+€€NO WORDS TO WRITE_^1_%LDA* (DATBUF),Q_^1_%STA* (DISBUF),Q_^1_%SQZ 1_^1_%JMP* WRT125_^1_%LDA- ONEBIT+15_#SET UP ABSOLUTE PARAMETER FLAG_^1_%RTJ- REQUST-1,I_^1_%NUM 0_^1_%LDQ- REQUST+4,I_"CALCULATE ACTUAL NO OF WORDS_^1_%LDA- (ZERO),Q_$TRANSFERRED_^1_%LDQ- ECCOR,I_^1_%AAQ A_^1_%INA -1_^1_%STA- ECCOR,I_^1_%LDA- ELSTWD,I_$CALCULATE LAST WORD_^1_%INA -1_++1 THAT SHOULD HAVE_^1_%AAQ€€ A_,BEEN WRITTEN_^1_%STA- ELSTWD,I_^1_%LDA- REQIND,I_$WAS REQUST REJECTED_^1_%SAP 2_,NO_^1_%JMP REJECT_'YES, GENERATE ERROR INDICATORS_^1_%ENA $1A_*SET DATA, EOP, BUSY_^1_%EOR- ESTAT2,I_^1_%AND- ZROBIT+10_#NOT AT LOAD POINT_^1_%STA- ESTAT2,I_^1_%JMP NCOMP_(NORMAL COMPLETION_^1RCRD_!NUM $4200_^1RCWT_!NUM $4400_^1LU_#ADC JLLUV4_^1REQ_"RTJ- (MONI)_^1DISPAT JMP- (DISP)_^1_%EJT_€€]_^1*_$*_%*_%*_%*_%*_%*_%*_^1*_$SUBROUTINE FOR WRITING OUT POINTER BLOCKS_^1*_$*_%*_%*_%*_%*_%*_%*_^1_%SPC 3_^1OPPRBK NOP 0_^1_%LDA* OPPRBK_'SAVE RETURN_^1_%STA- RETURN,I_^1_%LDA- ESTAT2,I_^1_%ALS 1_^1_%SAM OPB10_(WRITING_^1_%JMP* (OPPRBK)_$READ MODE, NO OUTPUT, RETURN_^1OPB10 LDA- PTRBLK+28,I_!GET NEXT BLOCK ADDRESS_^1_%SAZ 1_^1_%JMP* OPB150_'GO REWRITE BLOCK ON MM_^1_%ENQ €€31_^1_%STQ PTBFV4-1_$SAVE LENGTH_^1_%CLR A_^1OPB15 INQ -1_^1_%STA PTBFV4,Q_$CLEAR OUT A FAKE PTRBLK_^1_%SQZ 1_,DONE_^1_%JMP* OPB15_(CONTINUE LOOP_^1_%LDA- RECPTR,I_$CURRENT IS LAST OF NEXT_^1_%STA PTBFV4_^1_%LDA- RECPTR+1,I_^1_%STA PTBFV4+1_^1OPB50 RTJ SQSTR_^1_%INA PTRBLK+28-REQIND_!WHERE TO STORE REC POINTER_^1_%STA- REQUST+3,I_^1_%LDA- BUFADR,I_^1_%INA -1_+ADDRESS OF€€ SEQ. STORE BUFFER_^1_%STA- REQUST+4,I_^1_%STA- REQUST+5,I_^1_%LDA- ONEBIT+15_#SET UP ABSOLUTE PARAMETER FLAG_^1_%RTJ- REQUST-1,I_"EXECUTE REQUEST_^1_%NOP 0_^1OPB150 LDA- RECPTR,I_$ADDRESS OF THIS BLOCK_^1_%SAN 1_,NE. 0 SIGNIFIES IS DEFINED, SO WRITE MM_^1_%JMP* OPB205_'NOT DEFINED, IS FIRST, GO WRAP UP_^1_%LDQ =XPTRBLK+2,I BUFFER START_^1_%STQ- REQUST+6,I_^1_%INQ RECPTR-PTRB€€LK-2_^1_%LDA* RCWT_^1_%RTJ* SETREQ_^1_%LDA- REQUST+8,I_"ADJUST WORD ADDR. TO LAST TWO_^1_%SOV 0_^1_%INA 3_,BIAS ADDRESS TO START AT DATA POINTERS_^1_%SNO OPB160_^1_%RAO- REQUST+7,I_^1_%AND- LPMSK+15_^1OPB160 STA- REQUST+8,I_^1_%ENA 28_+LENGTH OF XFER_^1_%STA- REQUST+5,I_^1_%RTJ- REQUST-1,I_"EXECUTE WRITE OF BLOCK_^1OPB200 NOP 0_^1_%LDA* OPB200_'FIND PHYSTB_^1_%INA -BUFADR_^1_€€%STA- I_^1_%SQP 2_^1JLARM JMP ALARM_^1OPB205 LDA- RECPTR,I_$THIS_^1_%STA- PTRBLK,I_$TO LAST_^1_%LDA- RECPTR+1,I_^1_%STA- PTRBLK+1,I_"NEXT_^1_%LDA- PTRBLK+28,I MAKE ADDRESS OF NEXT = THIS_^1_%STA- RECPTR,I_$IN RECORD POINTER_^1_%LDA- PTRBLK+29,I_^1_%STA- RECPTR+1,I_^1OPB210 ENQ 27_^1_%CLR A_^1OPB220 STA- PTRBLK+2,B_"CLEAR OUT REMAINDER OF PTRBLK_^1_%INQ -1_^1_%SQM 1_^1_%JMP* €€OPB220_^1_%ENA 0_^1_%STA- BLKPTR,I_$RESET INDEX TO POINTER BLOCK_^1_%LDQ- RETURN,I_^1_%JMP- (ZERO),Q_^1MAXLTH ADC BUFLNG+1_#MAXIMUM RECORD LENGTH = LENGTH OF INTERMEDIATE_^1*_8BUFFER + 1_^1_%EJT_]_^1*_$*_%*_%*_%*_%*_%*_%*_^1*_$SUBROUTINE TO SET UP DISK READ OR WRITE REQUEST*_^1*_U*_^1*_$ENTERED WITH REQUEST CODE IN A AND POINTER_$*_^1*_$TO DISK ADDRESS IN Q._:*_^1*_$STARTING LOCA€€TION MUST BE SET UP IN THE CALLING *_^1*_$SEQUENCE._F*_^1*_$*_%*_%*_%*_%*_%*_%*_^1_%SPC 3_^1SETREQ NOP 0_,SET UP DISK READ OR WRITE_^1_%ARS 4_^1_%ADD- LEVEL_(USE CURRENT PRIORITY LEVEL_^1_%ALS 4_,FOR BOTH REQUEST AND_^1_%ADD- LEVEL_(COMPLETION_^1_%STA- REQUST+1,I_^1_%LDA- 1,Q_^1_%STA- REQUST+8,I_^1_%LDA- (ZERO),Q_^1_%MUI =X96_^1_%LLS 1_^1_%ALS 15_^1_%STQ- REQUST+7,I_^1_%LDQ*€€ SETREQ_^1_%SOV 0_^1_%ADD- REQUST+8,I_^1_%SNO 1_^1_%RAO- REQUST+7,I_^1_%AND- LPMSK+15_^1_%STA- REQUST+8,I_^1_%LDA* REQ_^1_%STA- REQUST,I_^1_%LDA- I_^1_%INA REQUST+10_#SET UP COMP ADDR_^1_%STA- REQUST+2,I_^1_%CLR A_^1_%STA- REQUST+3,I_"THREAD WORD_^1_%INA 31_^1_%STA- REQUST+5,I_"LENGTH_^1_%LDA* (LU)_)LOGICAL UNIT_^1_%STA- REQUST+4,I_^1_%LDA* DISPAT_^1_%STA- REQUST+9,I_^1_%JMP- €€(ZERO),Q_$RETURN_^1_%SPC 10_^1*_$CHECK FOR MORE REQUESTS TO BE ON OTHER PSEUDO TAPE_$*_^1*_$LOGICAL UNITS_J*_^1_%SPC 3_^1BUSY_!NUM 0_^1NXTFIL LDQ- LINK,I_'JOB PROCESSOR FILE_^1_%TRQ A_^1_%SUB* BUSY_)YES, HAVE ALL TABLES BEEN LOOKED AT_^1_%SAZ CLRBSY_'YES, EXIT_^1_%LDA- 8,I_*REQUEST STATUS_^1_%SAM LOKNXT_'I/O IN PROGRESS_^1_%STQ- I_N**MSOS 4.1**_^1_%JMP* NTBSY_J**MSOS 4.1**_^1€€LOKNXT STQ- I_N**MSOS 4.1**_^1_%JMP* NXTFIL_^1CLRBSY CLR A_^1_%STA* BUSY_^1_%JMP+ MAS300_'RELEASE CORE BUFFER_.**MSOS 4.1**_^1_%EJT_]_^1*_$ENTRY TO DRIVER--UNTHREAD NEXT REQUEST AND ROUTE IT TO *_^1*_$THE CORRECT SECTION FOR PROCESSING_5*_^1_%SPC 3_^1PSDTV4 LDA* BUSY_)IS DRIVER BUSY_3**MSOS 4.1**_^1_%SAZ NOTBSY_'NO_^1_%JMP- (DISP)_'YES, GO AWAY_^1NOTBSY LDQ- I_,GET PDT ADDRESS_€€2**MSOS 4.1**_^1_%STQ* BUSY_)SET DRIVER BUSY_2**MSOS 4.1**_^1NTBSY LDA- FILNUM,Q_G**MSOS 4.1**_^1_%AND- LPMSK+15_^1_%SUB- EWES,I_'NEW FILE BEING PROCESSED_^1_%SAN NEWFIL_'NO_^1_%JMP* NOTNEW_^1NEWFIL LDA- ESTAT1,I_$WAS OTHER FILE BEING WRITTEN_^1_%AND- ONEBIT_'WRITTEN INTO_^1_%SAZ NOWRT_(NO_^1_%LDA- BLKPTR,I_$YES, WAS IT BOUND OFF_^1_%SAZ NOWRT_(YES_^1_%JMP REW50_(NO, PUT OUT L€€AST PTR BLOCK_^1NOWRT LDA- FILNUM,I_$UPDATE FILE NO. TO BE_^1_%STA- EWES,I_'USED_^1_%CLR A_^1_%STA- BLKPTR,I_^1NOTNEW RTJ- (FNR)_(FIND NEXT REQUEST THIS FILE_^1_%JMP* NXTFIL_'NONE_^1_%LDA- FILNUM,I_$IS THERE A FILE FOR THIS LU_^1_%SAN PROCED_'YES, PROCEDE_^1_%ENA 28_+NO, GO PUT OUT ERROR_^1_%JMP SETCOD_^1PROCED LDA =N$C401_%W. RING, MODE, LOAD POINT READY_^1_%AND- ESTAT2,I_$B€€ITSIN STATUS WORD_^1_%INA 2_,SET BUSY STATUS_^1_%STA- ESTAT2,I_^1_%LDQ- EPTR,I_'IS THIS A MOTION REQ_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- LPMSK+5_^1_%INA -14_^1_%SAN 2_^1_%JMP MOTION_'YES_^1_%LDA- ELSTWD,I_^1_%STA- 3,I_*SAVE ELSTWD FOR LATTER_^1_%SUB- ECCOR,I_^1_%INA 1_^1_%SAM PR50_)MORE THAN 32K WORDS REQUESTED_^1_%STA- ELSTWD,I_^1_%SUB* MAXLTH_'IS NO. WORDS REQD..GT.INTERM€€ED. BUF. LENGTH_^1_%SAM PR100_(NO_^1PR50_!LDA* MAXLTH_'YES, SET TO INTERMED. BUF LENGTH_^1_%STA- ELSTWD,I_^1PR100 LDA- ESTAT1,I_^1_%AND- ONEBIT_'READ REQUEST_^1_%SAZ 2_^1_%JMP WRITE_(NO_^1_%EJT_]_^1*_$READ REQUEST PROCESSOR_A*_^1_%SPC 3_^1_%LDA- ESTAT2,I_$IS TAPE AT LOAD POINT_^1_%AND- ONEBIT+10_^1_%SAN 1_^1_%JMP* RD100_(NO_^1_%RTJ RTVBL1_'YES, SET UP REQUST TO FETCH 1ST PTR€€BLK_^1_%LDA- REQIND,I_$RETURN FROM REQUEST_^1_%SAP 2_,REQUEST REJECTED_^1_%JMP REJECT_'YES_^1_%AND- ONEBIT+3_$NO, CHECK FOR 'END OF TAPE'_^1_%SAZ RD90_)NO, PROCEDE WITH READ_^1RD60_!LDA =N$220_'END OF TAPE,ALARM_^1_%JMP* EOFEOT_^1RD90_!ENQ 0_,SET PTRBLK INDEX BACK_^1_%STQ- BLKPTR,I_^1_%LDA- ESTAT2,I_^1_%AND- ZROBIT+14_#DEFINE READ MODE, BIT 14 = 0_^1_%STA- ESTAT2,I_^1_%LDA- I€€_,RESET RECORD LENGTH_^1_%INA ELSTWD_'POINTER_^1_%STA- REQUST+6,I_^1RD100 LDQ- BLKPTR,I_$END OF PTRBLK_^1_%INQ -26_^1_%SQM 1_^1_%JMP* RD160_(YES_^1_%INQ 28_+NO, CONTINUE WITH READ_^1_%LDA- PTRBLK,B_^1_%SAN 1_,SOME DATA_^1_%JMP* RD60_)END OF TAPE_^1_%STQ- BLKPTR,I_$UPDATE INDEX_^1_%SAP 1_,NOT EOF_^1_%JMP* EOF_*END OF FILE_^1_%LDQ =XPTRBLK,B_"FORM ADDRESS OF MM_^1_%LDA- BUFAD€€R,I_^1_%INA -1_^1_%STA- REQUST+6,I_^1_%LDA RCRD_^1_%RTJ SETREQ_^1_%LDQ- ELSTWD,I_^1_%STQ- REQUST+5,I_^1_%RTJ- REQUST-1,I_^1RD150 NOP 0_^1_%LDA* RD150_^1_%INA -BUFADR_^1_%STA- I_^1_%SQP 1_^1_%JMP* JALARM_^1_%JMP* RD200_^1_%SPC 3_^1RD160 ENQ 28_^1_%STQ- BLKPTR,I_$INDEX TO NEXT BLOCK ADDRESS_^1_%RTJ RTVBLK_^1_%ENQ 0_^1_%STQ- BLKPTR,I_$INITIALIZE INDEX_^1_%SAN RD180_(END O€€F PSEUDO TAPE_^1_%JMP* RD60_)YES_^1RD180 JMP* RD90_)NO, CONTINUE WITH READ_^1RD200 LDQ- BUFADR,I_^1_%INQ -1_^1_%LDA- (ZERO),Q_$FM WORD CNT+2_761*1286_^1_%INA -1_P61*1286_^1_%SUB- ELSTWD,I_$USERS WORD CNT+1_461*1286_^1_%SAP RD213_(SKIP IF LONG READ_361*1286_^1_%LDQ- (ZERO),Q_$SHORT READ_:61*1286_^1_%JMP* RD214_M61*1286_^1RD213 LDA- ELSTWD,I_$USERS WORD CNT+1_461*1286_^1_%STA- €€(ZERO),Q_J61*1286_^1_%TRA Q_Q61*1286_^1_%JMP* RD215_M61*1286_^1RD214 INQ -1_P61*1286_^1RD215 INQ -1_+TRANSFER RECORD FROM INPUT BUFF._^1_%LDA- ECCOR,I_^1_%STA* DATBF2_^1_%LDA- BUFADR,I_^1_%STA* DISBF2_^1_%LDA* (DISBF2),Q_^1_%STA* (DATBF2),Q_^1_%SQZ 1_^1_%JMP* RD215_^1_%LDQ- BUFADR,I_^1_%INQ -1_^1_%LDA- (ZERO),Q_^1_%INA -1_^1_%LDQ- ECCOR,I_^1_%AAQ A_^1_%STA- ECCOR,I_^1_%LDA€€- 3,I_^1_%STA- ELSTWD,I_$DETERMINE SHORT READ._^1_%CLR A_^1_%JMP* NOEOF_^1EOF_"ENA $20_*ALARM_^1_%EOR- ONEBIT+11_$SET EOF STATUS._^1EOFEOT LDQ- EREQST,I_$SET ERROR BIT (14)._^1_%ADQ- ONEBIT+14_^1_%STQ- EREQST,I_^1_%RAO- ECCOR,I_%SET 1 WORD TRANSFER._^1_%LDQ- 4,I_*RESET LWA+1_^1_%STQ- ELSTWD,I_^1NOEOF INA $1A_^1_%EOR- ESTAT2,I_$AS HARDWARE STATUS_^1_%STA- ESTAT2,I_$NEW STATUS_^1€€NCOMP RTJ MAKEQ_(SET UP ERROR CODE FIELD_^1_%RTJ- (COMPRQ)_$COMPLETE THE REQUEST_^1_%JMP NOTNEW_'GO FIND NEXT REQUEST_^1REJECT LDA- REQIND,I_$WAS THERE A DISK READ/WRITE_^1_%AND- ONEBIT+7_$ERROR_^1_%SAZ 1_,NO_^1JALARM JMP* ALARM_(YES, GO SET ALARM STATUS_^1_%LDA- REQIND,I_$IS FILE RUNNING OUT OF SPACE_^1_%AND- ONEBIT+8_^1_%SAZ RJT100_^1_%ENA $30_*SET ALARM, EOP,_^1_%EOR- ONEB€€IT+9_$AND END OF TAPE STATUS_^1_%EOR- ESTAT2,I_^1_%STA- ESTAT2,I_^1_%ENA 26_+ERROR CODE FOR OUT OF FILE SPACE_^1_%JMP* SETCOD_^1DISBF2 NUM 0_^1DATBF2 NUM 0_^1RJT100 EQU RJT100(*)_^1_%SPC 3_^1ALARM ENA $30_*END OF OP, ALARM_^1_%EOR- ESTAT2,I_$TO HARDWARE STATUS_^1_%STA- ESTAT2,I_^1_%ENA 2_,ALARM CODE_^1SETCOD LDQ- ELU,I_^1_%ALS 10_^1_%LLS 6_^1_%STQ* PTBFV4_'SAVE CODE TEMPY_^€j1_%LDA- EREQST,I_^1_%EOR- ONEBIT+14_#SET BIT 14 OF REQUEST STATUS WORD_^1_%STA- EREQST,I_^1_%RTJ MAKEQ_(GO SET Q BITS_^1_%LDA- (ZERO),I_^1_%STA* SET1_^1_%LDQ* PTBFV4_^1_%RTJ+ LOG_*LOG DEVICE ERROR_1**MSOS 4.1**_^1_%RTJ- (MONI)_'SCHEDULE ALT DEVICE HANDLER_^1SET1_!ADC $1200_^1_%ADC ALTDEV_^1_%JMP NXTFIL_^1_%NUM 0_^1PTBFV4 BZS PTBFV4(BUFLNG)_^1_%END_]_^__jPD1747 CSY/ C17 P€1_%NAM D1747_(DECK-ID C17 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT I1747,C1747,E1747_^1_%EQU TIME(4)_^1_(EQU_%EDCLK(4)_,4 CLOCK TIMEOUT 1 MIN=3600/10_^1_(EQU_%EREQST(8)_+8 REQ STAT (NOT AV.) DEVICE DEF_^1_(EQU_%ESTAT1(€€9)_+9 STAT (NOT AV.) REQ PAR DECODE_^1_%EQU H3FFF($10)_^1_%EQU H4000($31)_^1_%EQU ADISP($EA)_^1_%EQU PRTHD(18)_^1_%EQU CALL(7)_^1_%EQU SWITCH(9)_^1_%EQU CORE(10)_^1_%EQU LASTP1(11)_^1_%EQU STATUS(12)_^1_%EQU SAVI(17)_^1_%EQU TTYREQ(18)_^1_%EQU NW(23)_^1_%EQU ADDR(24)_^1_%EQU TTYCMP(29)_^1_%EQU H1FFF($F)_^1_%EQU H0080($2A)_^1_%EQU H0800($2E)_^1_%EQU H1000($2F)_^1_€€%EQU H8000($32)_^1_%EQU HF7FF($3E)_^1_%EQU AFNR($B5)_^1_%EQU ACMPRQ($B6)_^1_%EQU DISPAD($EA)_^1I1747 STQ- I_^1_%STQ- SAVI,I_^1GOGET RTJ- (AFNR)_)ANY REQUESTS_^1_%JMP- (ADISP)_(NO,GET OUT_^1_%RTJ* DSCHK_^1_%ENA 2_^1_%AND- SWITCH,I_^1_%SAN FORMTD_^1_%JMP* NOFORM_^1FORMTD ENA 1_-READ OR WRITE_^1_%AND- SWITCH,I_^1_%SAN FWRITE_^1_%JMP FREAD_^1FWRITE LDQ- CALL,I_)WRITE,YES SE€€LECT_^1_%LDA- H0080_*TRANSMIT_^1_%RTJ OUTSUB_^1_%INQ -1_^1_%LDA =N$F92_)7622(8)INTERRUPT CODE WORD_^1_%RTJ OUTSUB_^1_%JMP NOSYNC_^1NOFORM LDA- CORE,I_)SET UP TO MINIMIZE_^1_%INA -1_-INTERRUPT LOCKOUT_^1_%STA* COREM1_)TIME_^1_%LDA- LASTP1,I_^1_%STA* TLSTP1_^1_%LDQ- CALL,I_^1_%ENA $18_,SELECT INTERRUPT ON EOP_^1_%RTJ* OUTSUB_^1_%LDQ- SWITCH,I_'SELECT TRANSMIT OR_^1_%QLS 15_-R€€ECEIVE AS THE_^1_%LDA- H0080_*CASE MAY BE_^1_%SQM 1_^1_%ALS 1_^1_%LDQ- CALL,I_^1_%IIN 0_^1_%OUT TRJECT-*_^1_%INQ -1_^1_%LDA- SWITCH,I_'CHECK FOR READ OR_^1_%ALS 15_-WRITE OPERATION_^1_%SAM 1_^1_%ADQ- H0800_*SET BUFFERED OUTPUT_^1_%ADQ- H1000_*SET BUFFERED INPUT_^1_%LDA* (COREM1)_'SAVE CORE LOCATION_^1_%STA* TEMP_+PRECEDING BUFFER_^1_%LDA* TLSTP1_)SET LAST LOCATION+1_^1_%STA*€€ (COREM1)_^1_%LDA* COREM1_^1_%OUT TRJECT-*_'INPUT OR OUTPUT_^1_%LDA* TEMP_+RESTORE SAVED LOCATION_^1_%STA* (COREM1)_^1_%EIN 0_.ENABLE INTERRUPTS_^1_%JMP EXIT_^1TRJECT NOP 0_^1_%LDA* TEMP_^1_%STA* (COREM1)_^1_%EIN 0_^1_%JMP* REJECT_^1COREM1 ADC 0_^1TLSTP1 ADC 0_^1TEMP_!ADC 0_^1DSCHK NOP 0_^1DSCHNK LDQ- CALL,I_^1_%ADQ- H0800_^1_%RTJ* INPSUB_^1_%ADQ- HF7FF_^1_%ENA 1_.CLEAR €€CONTROLLER_^1_%RTJ* OUTSUB_^1_%RTJ* DSCST_*GET STATUS_^1_%LDQ =N$3000_(NON RECOVERABLE DSC ERROR_^1_%LAQ A_.CONDITIONS_^1_%SAN SKP21_^1_%JMP* (DSCHK)_(NO_^1SKP21 ALS 1_^1_%SAM 3_^1_%LDA =XNOCARR_^1_%JMP* PR1_^1_%LDA =XTSTMOD_^1_%JMP* PR1_^1DSCST NOP 0_^1_%ENA -100_+SET RETRY COUNTER FOR_^1_%STA* BDCBSY_)BDC OR DSC_^1_%STA* DSCNRD_^1_%STA* DSCBSY_^1RETDSC LDA- CALL,I_^1_%€€AND =N$7801_^1_%ADD- H1000_^1_%TRA Q_^1_%RTJ* INPSUB_^1_%ENQ 1_^1_%LAQ Q_^1_%SQZ NRDBDC_)BDC READY_^1_%ENQ 2_.YES_^1_%LAQ Q_^1_%SQN BSYBDC_)BDC BUSY_^1_%LDQ- CALL,I_)NO,DSC READY_^1_%RTJ* INPSUB_^1_%ENQ 1_^1_%LAQ Q_^1_%SQZ NRDDSC_^1_%ENQ 2_.YES,DSC BUSY_^1_%LAQ Q_^1_%SQN BSYDSC_^1_%JMP* (DSCST)_(NO,RETURN_^1NRDBDC RAO* BDCNRD_)BDC NOT READY COUNTER_^1_%LDA* BDCNRD_)ZE€€RO_^1_%SAZ PBDCNR_^1_%JMP* RETDSC_)NO,TRY AGAIN_^1BSYBDC RAO* BDCBSY_)BDC BUSY COUNTER ZERO_^1_%LDA* BDCBSY_^1_%SAZ PBDCBS_^1_%JMP* RETDSC_)NO,TRY AGAIN_^1NRDDSC RAO* DSCNRD_)DSC NOT READY COUNTER ZERO_^1_%LDA* DSCNRD_^1_%SAZ PDSCNR_^1_%JMP* RETDSC_)NO,TRY AGAIN_^1BSYDSC RAO* DSCBSY_)DSC BUSY COUNTER ZERO_^1_%LDA* DSCBSY_^1_%SAZ PDSCBS_^1_%JMP* RETDSC_)NO,TRY AGAIN_^1PBDCNR LDA€€ =XBDCMS1_^1_%JMP* PR1_^1PBDCBS LDA =XBDCMS2_^1_%JMP* PR1_^1PDSCNR LDA =XDSCMS1_^1_%JMP* PR1_^1PDSCBS LDA =XDSCMS2_^1_%JMP* PR1_^1INPSUB NOP 0_^1_%ENA -100_^1_%STA* COUNT_^1MORINP INP INPCNT-*_^1_%JMP* (INPSUB)_^1INPCNT NOP 0_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%SAZ 1_^1_%JMP* MORINP_^1_%JMP* REJECT_^1OUTSUB NOP 0_^1_%STA* TEMPP_^1_%ENA -100_^1_%STA* COUNT_^1MOROUT LDA* TEM€€PP_^1_%OUT OUTCNT-*_^1_%JMP* (OUTSUB)_^1TEMPP ADC 0_^1COUNT ADC 0_^1OUTCNT NOP 0_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%SAZ 1_^1_%JMP* MOROUT_^1_%JMP* REJECT_^1BDCNRD ADC 0_^1BDCBSY ADC 0_^1DSCNRD ADC 0_^1DSCBSY ADC 0_^1PR1_"LDQ- SWITCH,I_^1_%QLS 14_^1_%SQP NOINIT_^1_%QLS 1_^1_%SQP NOINIT_^1_%JMP NOSYNC_^1NOINIT LDQ- PRTHD,I_^1_%SQN ERROR_*NO,TYPE THE MESSAGE_^1_%ENQ 7€€_^1_%STA- ADDR,I_^1_%STQ- NW,I_^1_%ENA 10_^1_%STA- EDCLK,I_^1_%LDA- DISPAD_^1_%STA- TTYCMP,I_^1_%JMP- TTYREQ,I_^1REJECT NOP 0_^1_%LDA =XDSCREJ_^1_%ENQ 7_^1_%JMP* PR1_^1ERROR ENQ 0_^1_%RTJ* ERRCMP_^1TOFNR JMP GOGET_^1ERRCMP NOP 0_^1_%LDA- H4000_^1_%EOR- EREQST,I_^1_%STA- EREQST,I_^1_%LDA- H3FFF_^1_%AND- ESTAT1,I_^1_%EOR- H8000_^1_%EAQ A_^1_%STA- ESTAT1,I_^1_%ENA -1_^1_%ST€€A- EDCLK,I_^1_%ADQ- H8000_^1_%RTJ- (ACMPRQ)_^1_%LDQ- CALL,I_^1_%ENA 1_^1_%OUT 1_^1_%NOP 0_^1_%JMP* (ERRCMP)_^1E1747 STQ- I_^1_%LDQ- H4000_*AND ERROR_^1_%RTJ* ERRCMP_^1_%JMP* TOFNR_^1FEXIT RTJ* INPSUB_^1_%STA- STATUS,I_'SAVE STATUS_^1EXIT_!LDA- SWITCH,I_^1_%ALS 15_^1_%SAM 2_^1_%ENA 7_^1_%JMP* *+1_^1_%ENA 2_^1_%STA- TIME,I_^1_%JMP- (ADISP)_(JMP TO DISPATCHER_^1C1747 STQ- I_€€^1_%LDQ- CALL,I_^1_%ADQ- H0800_^1_%RTJ* INPSUB_^1_%LDQ- CALL,I_^1_%RTJ* INPSUB_^1_%ALS 10_^1_%SAP NOTALR_^1_%JMP* ERROR_^1NOTALR ENA 2_^1_%RTJ* OUTSUB_^1CHKRW ENA 1_^1_%AND- SWITCH,I_^1_%SAN DOSYCH_^1_%LDA* CYCNT_^1_%STA* TCYCNT_^1MOCYC RTJ* INPSUB_^1_%ALS 10_^1_%SAP 1_^1_%JMP* ERROR_^1_%RAO* TCYCNT_^1_%LDA* TCYCNT_^1_%SAZ NOSYNC_^1_%JMP* MOCYC_^1DOSYCH LDA* SNCNAK_^1_%ST€€A* SYNCNK_(NOT ACK. DELAY COUNTER_^1MOSYNC RTJ* INPSUB_^1_%STA- STATUS,I_^1_%ALS 1_-SYNC. WORD ACKNOWLEDGED_^1_%SAP NOSYNC_^1_%RAO* SYNCNK_(NO,INCREMENT COUNTER_^1_%LDA* SYNCNK_(LIMIT EXCEEDED_^1_%SAZ NORRR_^1_%JMP* MOSYNC_(NO_^1NORRR ENA 2_-YES_^1_%JMP* ERROR_^1NOSYNC LDA- H1FFF_^1_%AND- SWITCH,I_^1_%STA- SWITCH,I_^1_%RTJ- (ACMPRQ)_^1_%ENA -1_^1_%STA- TIME,I_^1_%JMP* TOFNR_^€P1FREAD ENA $30_^1_%LDQ- CALL,I_^1_%RTJ* OUTSUB_^1_%JMP* FEXIT_^1SYNCNK ADC 0_^1SNCNAK NUM -10_^1CYCNT NUM -10_^1TCYCNT NUM 0_^1BDCMS1 ALF 7,BDC NOT READY_^1BDCMS2 ALF 7,BDC BUSY_^1DSCMS1 ALF 7,DSC NOT READY_^1DSCMS2 ALF 7,DSC BUSY_^1NOCARR ALF 7,NO CARRIER_^1TSTMOD ALF 7,TEST MODE_^1DSCREJ ALF 7,DSC REJECT_^1_%END_]_^__PPD1744 CSY/ C18 P€1_%NAM D1744_(DECK-ID C18 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT I1744,C1744,E1744_^1_%ENT FUNC44_I**MSOS 4.1**_^1_)ENT_"IING,EING_^1_)EXT_"LOG1A_^1_)EQU_"AFNR($B5),NABS($BF),DISP($EA),ALUABS($BC)_^1_)EQU_"COMPRQ($B6),AV€€OLA($BB),AREQXT($B9)_^1***_]_^1*_(PHYSICAL DEVICE TABLE ENTRIES_^1***_]_^1_)EQU_"TIME(4)_^1_)EQU_"EPTR(6)_^1_)EQU_"CALL(7)_^1_)EQU_"EREQST(8)_^1_)EQU_"SWITCH(9)_^1_)EQU_"FWA(10)_^1_)EQU_"LWA(11)_^1_)EQU_"ESTAT2(12)_^1_%EQU NXTRD(20)_^1_%EQU NXTWR(21)_^1_%EQU NXTIDR(22)_^1_%EQU NCON(23)_^1***_]_^1*_(MASK TABLE_^1***_]_^1_%EQU THREE(4)_^1_)EQU_"HX1000($2F)_^1_)EQU_"HXE000($1F)_^€€1_)EQU_"ZERO($22)_^1_)EQU_"HX4000($31)_^1_)EQU_"HX0800($2E)_^1_)EQU_"HX8000($21)_^1_)EQU_"HX1FFF($F)_^1_)EQU_"HX3FFF($10)_^1_)EQU_"HX0FFF($E)_^1_)EQU_$HXC000($20)_^1_)SPC_"3_^1_)EQU_"FAVAL($5A),AATADR($50),SLPS($65)_^1_)EQU_"PLPS($62),XLPS($6A),YLPS($6B)_^1_)EQU_"QHLPI($76),QHLKI($78),QHKBI($77),TRACD($95)_^1_)EQU_"LPRFLG($99)_^1_)EQU_"TABLEN(2)_^1I1744 STQ- I_^1NEXT_$RTJ-_!(AFNR)€€_+ANY REQUESTS_^1_)JMP-_!(DISP)_+NO, GET OUT_^1_)RTJ*_!DSCHK_^1_%LDQ- EPTR,I_^1_)LDA-_!3,Q_^1_)AND-_!HX1000_+GET DISPLAY RESTART BIT_^1_)ARS_"7_^1_%EOR- SWITCH,I_^1_)STA-_!SWITCH,I_^1_)LDA-_!3,Q_^1_)AND-_!HX0FFF_+MASK DISPLAY RESTART BIT OFF_^1_)STA-_!3,Q_^1_)LDQ-_!6,Q_.PICK UP B_^1_)SQP_"1_^1_)LDQ-_!(ZERO),Q_)ASSUMES X = 0_^1_)STQ*_!BUFFAD_^1_)ADQ-_!HXE000_^1_)SQM_"3_^1_)SQZ_"2_^1€€_)SET_"Q_^1_)STQ*_!BUFFAD_^1_)LDQ-_!FWA,I_^1_)INQ_"-1_^1_)STQ*_!FWAM1_^1_)LDA-_!(ZERO),Q_^1_)STA*_!TEM_^1_)LDA-_!LWA,I_^1_)STA-_!(ZERO),Q_^1_)LDQ-_!EPTR,I_^1_)LDA-_!(ZERO),Q_)PICK UP REQUEST CODE_^1_)AND_"=N$7E00_^1_)ARS_"9_^1_)TRA_"Q_^1_)INA_"-15_^1_)SAN_"1_^1_)ENQ_"3_^1_)STQ*_!REQCOD_^1_)LDQ*_!CODTAB-1,Q_^1_)LDA*_!BUFFAD_+IF (BUFFA) NEG_^1_)SAM_"1_0THEN USE ****NEXT****_^1_)INQ_"€€1_^1_)JMP-_!(ZERO),Q_^1_)SPC_"3_^1CODTAB_"ADC_"DIGRD_,READ_-T1_^1_)ADC_"DIGWR_,WRITE_,T2_^1_)ADC_"DIGCPD_+DISPLAY ON_'T15_^1_)ADC_"DIGIDR_+SEARCH FOR ID_#T4_^1_)ADC_"0_^1_)ADC_"DIGWRF_+FORMATED WRITE_"T6_^1_)SPC_"3_^1_)BZS_"BUFFAD,FWAM1,TEM_^1_)BZS_"REQCOD_^1_)SPC_"3_^1DSCHK_#ADC_"0_^1_)ENA_"-100_-SET RETRY COUNTER FOR_^1_)STA*_!BDCNRD_+BUSY OR NOT READY FOR_^1_)STA*_!BDCBSY_+BCD O€€R DSC_^1_)STA*_!DSCNRD_^1RETDSC_"LDQ-_!CALL,I_^1_)ADQ-_!HX1000_^1_)RTJ*_!DIGIN_,GET 1706 STATUS_^1_)ALS_"14_^1_)SAP_$1_^1_)JMP*_#BSYBDC_#BDC IS BUSY_^1_)ALS_"1_^1_)SAP_"NRDBDC_+BDC NOT READY_^1_)LDQ-_!CALL,I_^1_)RTJ*_!DIGIN_,GET 1744 STATUS_^1_)ENQ_"1_^1_)LAQ_"Q_^1_)SQN_"NRDDSC_+DSC NOT READY_^1_)JMP*_!(DSCHK)_^1_)BZS_"BDCNRD,BDCBSY,DSCNRD_^1NRDBDC_"RAO*_!BDCNRD_^1_)LDA*_!BDCNRD_^1€€_)SAN_$1_^1_)JMP*_#PBDCNR_^1_)JMP*_!RETDSC_^1BSYBDC_"RAO*_!BDCBSY_^1_)LDA*_!BDCBSY_^1_)SAN_$1_^1_)JMP*_#PBDCBS_^1_)JMP*_!RETDSC_^1NRDDSC_"RAO*_!DSCNRD_^1_)LDA*_!DSCNRD_^1_)SAN_$1_^1_)JMP*_#PDSCNR_^1_)JMP*_!RETDSC_^1PBDCNR_"LDA_"=XBDCMS1_^1_)RTJ_$ERRMES_#TYPE OUT MESSAGE_^1_)LDQ_$=N$A000_^1_)RTJ_$SETSTA_^1_)JMP_$NRSTRT_^1PBDCBS_"LDA_"=XBDCMS2_^1_)JMP*_#PBDCNR+2_^1PDSCNR_"LDA_"=XDSCM€€S1_^1_)JMP*_#PBDCNR+2_^1_(EQU_%EXXCNT(9),INTCNT($10)_^1_)SPC_"3_^1DIGOUT_"ADC_"0_0COMMON OUTPUT_^1_)STA*_!DIGIN_,DUAL PURPOSE CELL_^1_)RTJ*_!EXSET_^1_)LDA*_!DIGIN_^1_)OUT_"IR-*_^1_)JMP*_!(DIGOUT)_^1DIGIN_#ADC_"0_0COMMON INPUT_^1_)RTJ*_!EXSET_^1_)INP_"IR-*_^1_)JMP*_!(DIGIN)_^1EXSET_#ADC_"0_^1_)SOV_"0_0CLEAR OVERFLOW_^1_(LDA-_$EXXCNT_#SET EXTERNAL REJECT COUNT $7F_^1_(STA*_$EXCNT_^1€€_(LDA-_$INTCNT_"SET INTERNAL REJECT COUNT $3FFF_^1_(STA*_$INCNT_^1_)JMP*_!(EXSET)_^1_(BZS_%EXCNT,INCNT_^1IR_'JMP*_!INRJ_-COMMON REJECT_^1_)RTJ_"CLRCH_^1_)RAO*_!EXCNT_^1_)SOV_"EXR_^1_)JMP*_!(EXSET)_^1EXR_%LDQ-_#HX8000_#ERROR CODE FOR EXT. REJECT (4)_^1_(JMP*_$ERRCOD_^1INRJ_#RAO*_$INCNT_^1_)SOV_"INR_^1_)JMP*_!(EXSET)_^1INR_%LDQ*_#HX6000_#ERROR CODE FOR INT. REJECT (3)_^1_(RTJ*_$SET€€STA_^1_(LDA_%=XIREJ_^1_(RTJ_%ERRMES_^1_(RTJ-_$(COMPRQ)_^1_)JMP-_#(DISP)_^1_)SPC_"3_^1DIGRD_#LDA-_!NXTRD,I_^1_)RTJ*_!SETS_^1_)LDQ-_!CALL,I_^1_)INQ_"1_^1_)JMP*_!INPUT_^1***_]_^1DIGWR_#LDA-_!(NXTWR),I_^1_)RTJ*_!SETS_^1_)LDQ-_!CALL,I_^1_)INQ_"1_^1_)JMP*_!OUTPUT_^1***_]_^1DIGWRF_"LDQ-_!NCON,I_^1_)LDA-_!(FAVAL),Q_^1_)STA*_!BUFFAD_^1_)LDQ-_!EPTR,I_^1_)RTJ-_!(NABS)_+GET NUMBER OF WORDS_^1_€€)TRQ_"A_^1_)ADD*_!BUFFAD_^1_)LDQ-_!NCON,I_^1_)SUB-_!(AATADR),Q_^1_)SAP_"WRFERR_^1_)LDA_$BUFFAD_^1_)JMP*_!DIGWR+1_^1WRFERR_"LDQ-_#HX4000_#ERROR CODE FOR BUF. OVERFL. (2)_^1_%LDA TEM_^1_(STA_%(FWAM1)_^1_)JMP*_!ERRCOD_^1***_]_^1DIGIDR_"LDA-_!NXTIDR,I_^1_)RTJ*_!SETS_^1_)LDQ-_!CALL,I_^1_)INQ_"6_^1_)JMP*_!INPUT_^1***_]_^1DIGCPD_"ENA_"0_^1_)RTJ*_!SETS_^1_)LDQ-_!CALL,I_^1_)INQ_"4_^1_)JMP€€*_!OUTPUT_^1_)SPC_"3_^1SETS_$ADC_"0_0SET S FORM A_^1_)LDQ-_!CALL,I_^1_)INQ_"2_^1_)RTJ*_!DIGOUT_^1_)JMP*_!(SETS)_^1****_]_^1INPUT_#ADQ-_!HX0800_^1OUTPUT_"ADQ-_!HX1000_^1_)LDA_"FWAM1_^1_)RTJ*_!DIGOUT_^1_)LDA_"TEM_.RESTORE SAVED LOCATION_^1_)STA_"(FWAM1)_^1_)JMP*_!EXIT_^1HX6000_"NUM_$$6000_^1_)SPC_$3_^1ERRCOD_"RTJ*_#SETSTA_^1_%AND- THREE_^1_%INA -3_^1_%SAN RSTRT_^1_)LDQ-_!NCON,I_+FW€€RITE_^1_)LDA-_!(FAVAL),Q_^1_)RTJ*_!SETS_^1_)LDA_"=N$1F8_^1_)INQ_"-1_^1_)RTJ*_!DIGOUT_^1RSTRT_#ENA_"$20_.IS RESTART BIT SET_^1_)AND-_!SWITCH,I_^1_)SAZ_"NRSTRT_^1_)CLR_"A_^1_)RTJ*_!SETS_^1_)LDQ-_!CALL,I_+RESTART DPU IF SET_^1_)LDA_"=N$1080_*AND FREEZE_^1_)RTJ_"DIGOUT_^1NRSTRT_"RTJ-_!(COMPRQ)_^1_)JMP_"NEXT_^1SETSTA_"ADC_$0_^1_)LDA-_#HX1FFF_^1_)AND-_#SWITCH,I_^1_)EAQ_$A_^1_)STA-_#SWITC€€H,I_^1_)JMP*_#(SETSTA)_^1_)SPC_"3_^1E1744 STQ- I_^1_)LDA-_!HX4000_^1_)EOR-_!EREQST,I_^1_)STA-_!EREQST,I_^1_)LDA-_!HX3FFF_^1_)AND-_!SWITCH,I_^1_)EOR-_!HX8000_^1_)STA-_!SWITCH,I_^1_)ENA_"-1_^1_)STA-_!TIME,I_^1_)JMP*_!NRSTRT_^1_)SPC_"3_^1EXIT_$ENA_"10_^1_)STA-_!TIME,I_^1_)JMP*_!WAIT_^1_)SPC_"3_^1BDCMS1_"ALF_"7,BDC NOT READY_^1BDCMS2_"ALF_"7,BDC BUSY_^1DSCMS1_"ALF_"7,DGC NOT READY_^1_€€)EJT_^1WAIT_$LDQ-_!CALL,I_^1_)ADQ-_!HX1000_^1_)RTJ_"DIGIN_,GET 1706 STATUS_^1_)STA-_!ESTAT2,I_^1_)ALS_"11_^1_)SAM_"1_0CHECK IF END OF OPERATION_^1_)JMP*_!WAIT_^1_)LDQ-_!CALL,I_,YES_^1_)ADQ-_!HX0800_^1_)RTJ_"DIGIN_,TERMINATE CHANNEL TRANSFER_^1_)STA-_!FWA,I_^1_)LDQ-_!CALL,I_^1_)INQ_"2_^1_)RTJ_"DIGIN_,GET REGISTER S_^1_%STA* LASTS_^1_)LDA-_!LWA,I_^1_)SUB-_!FWA,I_^1_)SAZ_"NSHORT_^1***€€_%SHORT TRANSFER_^1_%LDA- FWA,I_^1_)LDQ-_#HXC000_^1_)JMP*_!ERRCOD_^1NSHORT LDA* LASTS_^1_)LDQ_"REQCOD_^1_)LDQ*_!NXTTAB-1,Q_^1_)SQZ_"FWRIT_^1_)SQM_"CPDISP_^1_)STA-_!(ZERO),B_)Q=INDX TO PHYSTAB_^1_)JMP*_!CPDISP_^1FWRIT_#LDQ-_!NCON,I_^1_)STA-_!(FAVAL),Q_^1CPDISP_"ENQ_"0_^1_)JMP*_!ERRCOD_^1LASTS BSS LASTS(1)_^1NXTTAB_"NUM_"17_^1_)NUM_"18_^1_)NUM_"-1_^1_)NUM_"19_^1_)NUM_"0_^1_)NUM_"0_€€^1_)EJT_^1*_]_^1*_$ERROR MESSAGE PROCESSOR_^1*_$ENTRY A - FWA OF ERROR MESSAFE_^1_)SPC_$3_^1ERRMES_"ADC_$0_^1_)STA*_#TTYADR_^1_)RTJ-_#($F4)_^1_)NUM_$$CFB_^1_)ADC_$TTWCX_^1_)NUM_$0_^1_)NUM_$$18FC_$ASCII TO OUTPUT COMMENT DEVICE_^1_)NUM_$7_^1TTYADR_"ADC_$0_^1_)JMP-_#($EA)_^1TTWCX_#JMP*_!(ERRMES)_^1_)EJT_^1C1744 STQ- I_^1_)LDA-_!NCON,I_^1_)STA*_!CONSL_^1_)INA_"1_^1_)STA*_!CONSL2_^1_€€)LDQ-_!CALL,I_^1_)RTJ*_!DIGI_-GET 1744 STATUS_^1_)STA-_!ESTAT2,I_^1_)SAP_"1_^1_)JMP*_!DIPSWI_+LP SWITCH INT._^1_)LDQ*_!DIPTAB_^1_)ALS_"3_^1_)SAP_"1_^1_)JMP*_!DIPKBI_+KEY BOARD INTERRUPT_^1_)INQ_"TABLEN_^1_)ALS_"11_^1_)SAP_"1_^1_)JMP*_!DIPCOM_+DELAY INTERRUPT_^1_)INQ_"TABLEN_^1_)ALS_"15_^1_)SAP_"1_^1_)JMP*_!DIPLPS_+LIGHT PEN INTERRUPT_^1_)INQ_"TABLEN_^1_)ALS_"15_^1_)SAP_"1_^1_)JMP*_€€!DIPCOM_+PRIORITY INTERRUPT_^1_)JMP-_!(DISP)_+GHOST INTERRUPT_^1_)JMP*_!*-1_^1DIPTAB_"ADC_"CLRKBI_+BEG OF DIP TABLES_^1CONSL_#NUM_"0_^1CONSL2_"NUM_"0_^1_)SPC_"3_^1DIPLPS_"LDQ-_!CALL,I_^1_)INQ_"2_^1_)RTJ*_!DIGI_^1_)LDQ*_!CONSL_^1_)STA-_!(SLPS),Q_^1_)LDQ-_!CALL,I_^1_)INQ_"3_^1_)RTJ*_!DIGI_^1_)LDQ*_!CONSL_^1_)STA-_!(PLPS),Q_^1_)LDQ-_!CALL,I_^1_)INQ_"4_^1_)RTJ*_!DIGI_^1_)LDQ*_!CONSL_^1€€_)STA-_!(XLPS),Q_^1_)LDQ-_!CALL,I_^1_)INQ_"5_^1_)RTJ*_!DIGI_^1_)LDQ*_!CONSL_^1_)STA-_!(YLPS),Q_^1_)LDQ-_!CALL,I_^1_)LDA-_!HX1000_^1_)RTJ*_!DIGO_-START DISPLAY_^1_%LDA* CLRLPS_^1_)LDQ-_!CALL,I_^1_)RTJ*_!OUTFCN_+CLEAR INTERRUPT_^1_)RTJ-_!(QHLPI)_^1_)ADC_"CONSL2_^1_)JMP-_!(DISP)_^1DIPSWI_"LDA-_!ESTAT2,I_^1_)AND-_!HX0800_^1_)SAZ_"NOTDWN_^1_)LDA-_!LPRFLG_^1_)SAZ_"NOTDWN_^1_)LDA*_!ENALPI€€_+CLR ENABLE LPSI_^1_)JMP*_!NOTDWN+1_^1NOTDWN_"LDA*_!CLRLPI_+CLR DISABLE LPSI_^1_)LDQ-_!CALL,I_^1_)RTJ*_!OUTFCN_^1_)LDA*_!ENALPS_+CLR ENABLE LPSWI_^1_)LDQ-_!CALL,I_^1_)RTJ*_!OUTFCN_^1_)LDA-_!ESTAT2,I_^1_)AND-_!HX0800_^1_)SAZ_"1_^1_)JMP-_!(DISP)_^1_)RTJ-_!(QHLKI)_^1_)ADC_"CONSL2_^1_)JMP-_!(DISP)_^1DIPKBI_"LDQ-_!CALL,I_^1_)INQ_"7_^1_)RTJ*_!DIGI_-GET KEYBOARD STATUS_^1_%STA* KBSTAT_^1€€_)LDA*_!CLRKBI_^1_)RTJ*_!OUTFCN_+CLEAR INT_^1_%LDA- ESTAT2,I_$1744 STATUS_^1_)LDQ*_!KBSTAT_+KEYBOARD STATUS_^1_)RTJ-_!(QHKBI)_^1_)ADC_"CONSL2_^1_%LDA* ENAKBI_'CLR ENA KEYBOARD_^1_)LDQ-_!CALL,I_^1_)INQ_"7_^1_)RTJ*_!OUTFCN_^1_)JMP-_!(DISP)_^1KBSTAT_"NUM_"0_^1DIPCOM_"LDA-_!(ZERO),Q_)GET CLEAR INTERRUPT CODE_^1_)LDQ-_!CALL,I_^1_)RTJ*_!OUTFCN_^1_%LDA* CONSL_(GET CONS. NO. - 1_^1_)LDQ-_!€€TRACD_%GET TRACKING ADDRESS_^1_)INQ_"-1_)CALCULATE ADDR OF CONS IN TRACKING PROGRAM_^1_)STA-_!(ZERO),Q_"STORE CONSOL NO. THERE_^1_)INQ_"2_^1_)STQ*_!TRACKADR_^1_)LDQ-_!I_*GET PHYSTAB-ADDR_^1_)RTJ-_!($F4)_^1_)NUM_"$120B_%SCHEDULER REQUEST PRIORITY B_^1TRACKADR ADC_"0_*FOR TRACKING ROUTINE_^1_)JMP-_!(DISP)_$EXIT TO DISPATCHER_^1_)SPC_"3_^1OUTFCN_"ADC_"0_0OUTPUT FUNCTION_^1_)RTJ*_!DIG€€O_^1_)LDQ-_!CALL,I_^1_)RTJ*_!DIGI_-GET 1744 STATUS_^1_)STA-_!ESTAT2,I_^1_)JMP*_!(OUTFCN)_^1_)SPC_"3_^1*_(TABLES FOR DIG INT PROC_^1*_(KEYBOARD_^1CLRKBI_"NUM_"$500_^1ENAKBI_"NUM_"$300_^1*_(LIGHT PEN STRIKE_^1CLRLPS_"NUM_"$404_^1ENALPS_"NUM_"$91_^1*_]_^1CLRLPI_"NUM_"$484_^1ENALPI_"NUM_"$C4_^1_)SPC_"3_^1DIGI_$ADC_"0_^1_)RTJ*_!EXST_^1_)INP_"IRR-*_^1_)JMP*_!(DIGI)_^1DIGO_$ADC_"0_^1_)STA€€*_!DIGI_-DUAL PURPOSE CELL_^1_)RTJ*_!EXST_^1_)LDA*_!DIGI_^1_)OUT_"IRR-*_^1_)JMP*_!(DIGO)_^1EXST_$ADC_"0_^1_)SOV_"0_^1_)LDA_$=N$7F00_,SET REJECT COUNTER_^1_)STA*_!EXCT_^1_)JMP*_!(EXST)_^1IRR_%JMP*_!INREJ_^1_)RTJ*_!CLRCH_^1_)RAO*_!EXCT_^1_)SOV_"1_^1_)JMP*_!(EXST)_^1_)LDA_"=XEXREJ_^1IOERRX_"RTJ_$ERRMES_^1_)JMP-_#($EA)_$EXIT TO DISPATCHER_^1INREJ_#RAO*_!EXCT_^1_)SOV_"1_^1_)JMP*_!(EXST)€€_^1_)LDA_"=XIREJ_^1_)JMP*_#IOERRX_^1_)BZS_"EXCT_^1EXREJ_#ALF_"7,DGC EXT REJ_^1IREJ_$ALF_"7,DGC INT REJ_^1_)SPC_"2_^1CLRCH_#ADC_"0_^1_)STA*_!ISAVA_^1_)STQ*_!ISAVQ_^1_)LDQ-_!CALL,I_^1_)ADQ-_!HX0800_^1_)NOP_"0_^1_)INP_"-1_^1_)LDA*_!ISAVA_^1_)LDQ*_!ISAVQ_^1_)JMP*_!(CLRCH)_^1_)BSS_"ISAVA,ISAVQ_^1_)EJT_^1***_]_^1*_(DIGIGRAPHIC FUNCTION PROCESSOR_^1***_]_^1*_(RTJ_$DIFUNC_^1*_(VFD_$N3/CODE€€,N3/0,N10/LUN_^1*_]_^1*_(CODE = 0 START DISP, DISABLE LIGHTPEN_^1*_(CODE = 1 ENABLE KEYBOARD INT_^1*_(CODE = 2 ENABLE DELAY INT_^1*_(CODE = 3 ENABLE LIGHT PEN STRIKE INT_^1*_(CODE = 4 ENABLE PRIORITY INT_^1*_(CODE = 5 RESTART DISPLAY_^1*_(CODE = 6 CLEAR 1706 CHANNEL_^1*_(CODE = 7 GET 1744 STATUS (Q CONTAINS PARAMETER FOR SPECIAL_^1*_DSTATUS_^1_)EQU_"VR(3),VTP(4)_^1_)EQU_"V€€PTR(5),VTMP(6)_^1_)EQU_"VTTM(7)_^1_)EQU_"VCODE(8)_^1_)SPC_"3_^1FUNC44 ADC 0_N**MSOS 4.1**_^1_)IIN_"0_^1_)RTJ-_!(AVOLA)_*ALLOCATE VOLATILE FOR THIS REQUEST_^1_)NUM_"9_*NUMBER OF WORDS_^1_%LDQ* FUNC44_I**MSOS 4.1**_^1_)STQ-_!VR,I_-SAVE RETURN ADR._^1_)STQ-_!VPTR,I_+STORE ADR. OF PAR LIST_^1_)EIN_"0_^1_)LDA-_!VR,I_^1_)INA_"1_^1_)STA-_!VR,I_^1_)LDQ-_!VPTR,I_^1_)INQ_"-3_^1_)RTJ-_!(ALUA€€BS)_^1_)LDQ*_!(ALOG1A),Q_'PHYSTB ADDRESS_^1_)STQ-_!VTMP,I_^1_)LDQ-_!VPTR,I_^1_)LDA-_!(ZERO),Q_)GET PARAMETER WORD_^1_)AND-_!HXE000_+MASK OUT REQUEST_^1_)ALS_"3_^1_)STA-_!VCODE,I_#SAVE CODE_^1_)TRA_"Q_^1_(LDQ*_$FUNCTB,Q_!GET PROCESSOR ADDR_^1_(JMP-_$(ZERO),Q_!JUMP TO PROCESSOR_^1_(SPC_%2_^1*_"TABLE OF PROCESSOR ADDRESSES_^1FUNCTB_!ADC_%F0_^1_(ADC_%F1_^1_(ADC_%F2_^1_(ADC_%F3_^1_(ADC_€€%F4_^1_(ADC_%F5_^1_(ADC_%F6_^1_(ADC_%F7_^1*_"END OF TABLE_^1_(SPC_%2_^1F0_%ENA_%0_^1_(ENQ_%2_^1_(RTJ*_$FUNCTN_#GO RESET S-REG TO ZERO_^1_(ENQ_%0_^1FUN1_#LDA*_$FCNTAB,Q_!GET FUNTION CODE_^1_(ENQ_%0_^1FUN2_#RTJ*_$FUNCTN_#GO OUTPUT FUNTION_^1_(JMP-_$(AREQXT)_!EXIT FUNTION PROCESSOR_^1F1_%ENQ_%1_^1_(LDA*_$FCNTAB,Q_^1_(ENQ_%7_)SET FOR KEYBOARD FUNTION_^1_(JMP*_$FUN2_^1F2_%ENQ_%2_^1_(JMP€€*_$FUN1_^1F3_%RAO-_$LPRFLG_#SET LIGHTPEN FLAG_^1_(ENQ_%3_^1_(JMP*_$FUN1_^1F4_%JMP*_$FUN2+1_#IGNORE REQUEST FOR PRIORITY INTERRUPT_^1F5_%ENA_%0_^1_(ENQ_%2_^1_(RTJ*_$FUNCTN_#SET S-REG TO ZERO_^1_(ENQ_%5_^1_(JMP*_$FUN1_^1F6_%LDQ-_$VTMP,I_^1_(LDQ-_$CALL,Q_^1_(RTJ*_$FCHNCL_#GO CLEAR 1706 CHANNEL_^1_(JMP-_$(AREQXT)_^1F7_%LDQ-_$VTMP,I_^1_(LDQ-_$CALL,Q_^1_(JMP*_$STATUS_^1FCNTAB_"NUM_"$1084€€_^1_)NUM_"$300_-ENABLE KEYBOARD INT_^1_)NUM_"$A2_5DELAY_"INT_^1_)NUM_"$91_5LIGHT PEN STR. INT_^1_)NUM_"$4088_3PRIORITY INT_^1_)NUM_"$1000_,RESTART DISPLAY_^1ALOG1A_"ADC_"LOG1A_^1_)SPC_"2_^1FUNCTN_!ADC_%0_^1_(STQ-_$VTP,I_$SAVE Q-REGISTER_^1_(LDQ-_$VTMP,I_#GET_^1_(LDQ-_$CALL,Q_)EQUIPMENT NO._^1_(ADQ-_$VTP,I_^1_(STA-_$VTP,I_$SAVE FUNTION CODE_^1_(RTJ*_$RTRY_%SET REJECT COUNT_^1_(LDA-_€€$VTP,I_^1_(OUT_%REJ-*_^1_)ENA_"0_^1_)JMP*_!FEXIT_^1RTRY_$ADC_"0_^1_)SOV_"0_^1_)LDA_$=N$7F00_,SET REJECT COUNTER_^1_)STA-_!VTTM,I_^1_)JMP*_!(RTRY)_^1REJ_%JMP*_!IEJ_^1_)RTJ*_!FCHNCL_^1_)RAO-_!VTTM,I_^1_)SOV_"1_^1_)JMP* (RTRY)_^1_)ENA_$-4_(EXT. REJECT_^1_)JMP*_!FEXIT_^1IEJ_%RAO-_!VTTM,I_^1_)SOV_"1_^1_)JMP* (RTRY)_^1_)ENA_$-3_(INT. REJECT_^1_)JMP*_!FEXIT_^1FCHNCL_"ADC_"0_^1_)STA*_!IS€€A_^1_)STQ*_!ISQ_^1_)ADQ-_!HX0800_^1_)NOP_"0_^1_)INP_"-1_^1_)LDA*_!ISA_^1_)LDQ*_!ISQ_^1_)JMP*_!(FCHNCL)_^1_)BSS_"ISA,ISQ_^1_)SPC_"3_^1STATUS_"ADQ-_#(ZERO),I_'0 IF STATUS, 7 IF KEYBOARD STATUS_^1_)RTJ*_!RTRY_^1_)INP_"REJ-*_^1_)LDQ-_!VTMP,I_^1_)STA-_!ESTAT2,Q_^1_)STA-_!1,I_.PUT STATUS IN A-REGISTER_^1_)JMP-_!(AREQXT)_^1_)SPC_"3_^1FEXIT_#SAM_"1_*SKIP IF ERROR_^1_)JMP*_!(FUNCTN)_"EXIT_^€€1_)LDQ-_!VCODE,I_#GET CODE_^1_)INQ_"-1_)IS IT ENABLE KEYBOARD INT_^1_)SQN_"1_+NO_^1_)JMP*_!(FUNCTN)_#YES,_!WE HAVE NO KEYBOARD_^1_)LDQ-_!VTMP,I_$GET PHYSTAB-ADDR_^1_)STQ-_!2,I_(STORE IT IN VOLATILE STORAGE_^1_)STA-_!1,I_(STORE IT IN VOLATILE STORAGE_^1_)JMP-_#(AREQXT)_^1_)EJT_^1_)EQU_"AMASKT($B7)_^1_)EQU_"GIMASK($4E)_^1_)SPC_"3_^1IING_$ADC_"0_^1_)RTJ*_!SAVAQ_^1_)TRM_"A_^1_)STA*_!MS€€AVE_^1_)AND-_!GIMASK_$MASK OFF 1744 INTERRUPT LINES_^1_)TRA_"M_^1_)ENQ_"0_^1IING1_#LDA-_!GIMASK_$SEE IF MASK_^1_)TCA_"A_+HAS INT. LINES SET_^1_)AND-_!(AMASKT),Q_^1_)SAZ_"IING2_%NO_^1_)LDA-_!(AMASKT),Q_!YES_^1_)AND-_!GIMASK_$CLEAR INT. LINES_^1_)STA-_!(AMASKT),Q_^1_)INQ_"1_^1_)JMP*_!IING1_^1IING2_#INQ_"-1_^1_)STQ*_!MINDEX_^1_)RTJ*_!RESAQ_^1_)JMP*_!(IING)_^1_)SPC_"3_^1EING_$ADC_"0_^1€€_)RTJ*_!SAVAQ_^1_)LDA-_!GIMASK_+SEE IF INTERRUPTS ALREADY ENABLED_^1_)TCA_"A_0BITS CORRES TO IGS INTERRUPTS SET_^1_%AND-_$(AMASKT)_)IF PRIORITY -1 HAS MASK BITS SET_^1_)SAN_"EING2_,THEN INTERRUPTS ALREADY ENABLED_^1_)LDQ*_!MINDEX_^1EING1_#LDA-_!GIMASK_^1_)TCA_"A_^1_)EOR-_!(AMASKT),Q_!RESTORE 1744 INT. LINES_^1_)STA-_!(AMASKT),Q_"IN MASKTABLE_^1_)INQ_"-1_^1_)SQM_"1_^1_)JMP*_!EING1_^€.1_)LDA*_!MSAVE_^1_)TRA_"M_^1EING2_#EQU_"EING2(*)_^1_)RTJ*_!RESAQ_^1_)JMP*_!(EING)_^1_)SPC_"3_^1SAVAQ_#ADC_"0_^1_)IIN_"0_^1_)STA*_!ASAVE_^1_)STQ*_!QSAVE_^1_)JMP*_!(SAVAQ)_^1RESAQ_#ADC_"0_^1_)LDA*_!ASAVE_^1_)LDQ*_!QSAVE_^1_)EIN_"0_^1_)JMP*_!(RESAQ)_^1_)BSS_"MSAVE,MINDEX_^1_)BSS_"ASAVE,QSAVE_^1_)END_^__.PD1544A CSY/ C58 P€1_%NAM D1544A_'DECK-ID C58 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORP. 1974_^1*_$1700 MSOS 4.1_$08-08-74_^1_%SPC 2_^1*_$CALL FORMAT_^1*_)Q=POINT NUMBER_^1*_'RTJ DISB_^1*_)A=VALUE_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_%CALL DIRD(INDEX,IVAL,IERR)_^1€€_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT DISB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT DIRD_)FORTRAN ENTRY_^1_%EXT GETD_)ENTRY IN BUFEXC_^1_%EXT* DICRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* DIBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%€€01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_€€#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#THREAD TO NEXT RECORD_^1_%EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR FIRST POINT_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H8000($32€€)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1_%EQU ZERO($22)_^1_%SPC 4_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1DISB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDA* DISB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLO€€T_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1DIRD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDQ* DIRD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_€€%INA -1_+MAKE INDEX ZERO BASED_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_'SAVE IVAL ADDRESS_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA DICRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- INDEX,I_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*OK_^1_%JMP* DR14_)€€ERROR_^1DR4_"LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*NOT REMOTE I/O_^1_%RTJ GETD_)GET VALUE FROM VALUE BUFFER_^1_%JMP* DR14_)FINISH AND RETURN_^1DR8_"LDQ- IREC,I_^1_%LDQ- WES,Q_(GET WES FOR FIRST STATION_^1_%ADQ- INDEX,I_%ADD INDEX_^1_%INP REJ-*_(DO INPUT_^1_%JMP* DR10_)GOOD INPUT_^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR €€CODE TO REJECT_^1_%JMP* DR14_^1DR10_!STA- AREG,I_'SAVE DATA IN A-VOL_^1_%LDQ DIBUF_(=DATA BUFFER ADDRESS_^1_%SQN DR12_^1_%JMP* DR14_)=0, DO NOT STORE_^1DR12_!ADQ- ITEMP,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR14_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR16_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* DISB_^1_%LDQ- ETEMP,I_%ERROR€€ CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (DISB)_'RETURN_^1DR16_!LDQ- IVAL,I_'=ADDRESS OF VALUE WORD_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$RETURN VALUE_^1_%LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA* DIRD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (DIRD)_'RETURN_^1_%END_]_^€__ODE_^1_%STQ- (ZERO),PD1553A CSY/ C59 P€1_%NAM D1553A_'DECK-ID C59 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORP. 1974_^1*_$1700 MSOS 4.1_$08-06-74_^1_%SPC 2_^1*_$CALL FORMAT_^1*_)Q15=0_^1*_*Q=OUTPUT WORD INDEX 1 TO N_^1*_)Q15=1_^1*_*Q=OUTPUT BIT INDEX 1 TO N_^1*_-BITS NUMBERED RIGHT TO LEFT IN OUTPUT WORD_^1*_-***D€€ATA BUFFER REQUIRED FOR BIT ADDRESSING***_^1*_)A=VALUE OF OUTPUT WORD OR A-ZERO = NEW BIT STATE_^1*_'RTJ DOSB_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_*=$8002_$NO DATA BUFFER FOR BIT ADDRESSING_^1*_]_^1*_%CALL DORD(INDEX,IVAL,IERR)_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT DOSB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT DORD_)FORTRAN ENTRY_^1_%EXT PUTD_)€€ENTRY IN BUFEXC_^1_%EXT* DOCRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* DOBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#03 SUBROUTINE RETURN ADDRESS_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADD€€RESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%EQU BITX(13)_$13 BIT INDEX_^1_%SPC 4_^1*_$CON€€TROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#THREAD TO NEXT RECORD_^1_%EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR FIRST POINT_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H8000($32)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1_%EQU H0010($27)_^1_%EQU ZERO($22)_€€^1_%EQU ONEBIT($23)_^1_%EQU MASKT($33)_^1_%EJT_]_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1DOSB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDA* DOSB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA-€€ IVAL,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1DORD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDQ* DORD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_^1_%STA- IND€€EX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_^1_%LDA- (ZERO),Q_^1_%STA- AREG,I_'PUT VALUE INTO A-VOL_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA DOCRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- INDEX,I_^1_%SAM DR2A_)BIT ADDRESS_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%JMP* DR2C_^1DR2A_!CLR Q_,MAKE INDEXES FOR BIT ADDRESSING_^1_%AND- H7FF€€F_^1_%DVI- H0010_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%STA- INDEX,I_%SAVE STATION INDEX_^1_%STQ- BITX,I_'SAVE BIT INDEX_!0 TO 15_^1_%LDQ DOBUF_(IS DATA BUFFER PRESENT_^1_%SQN DR2B_^1_%LDA =N$8002_%ERROR, NO DATA BUFFER_^1_%STA- ETEMP,I_^1_%JMP* DR14_^1DR2B_!ADQ- ITEMP,I_%INDEX TO DATA BUFFER_^1_%LDA- (ZERO),Q_$HISTORY DATA WORD_^1_%LDQ- BITX,I_'BIT INDEX_^1_%AND- MASKT,Q_€€%MASK OUT SPECIFIED BIT_^1_%LDQ- AREG,I_'NEW BIT STATE_^1_%STA- AREG,I_'SAVE MASKED HISTORY WORD_^1_%SQZ DR2C_)LEAVE BIT = 0_^1_%LDQ- BITX,I_^1_%LDA- AREG,I_^1_%EOR- ONEBIT,Q_$SET BIT_^1_%STA- AREG,I_'SAVE NEW OUTPUT WORD_^1DR2C_!ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*OK_^1_%JMP* DR14_)ERROR_^1DR4_"LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%A€€ND- H2000_^1_%SAZ DR8_*NOT REMOTE I/O_^1_%RTJ PUTD_)PUT VALUE INTO BUFFER_^1_%JMP* DR14_)FINISH AND RETURN_^1DR8_"LDA- AREG,I_'LOAD DATA TO OUTPUT_^1_%LDQ- IREC,I_^1_%LDQ- WES,Q_(GET WES FOR FIRST STATION_^1_%ADQ- INDEX,I_%ADD INDEX_^1_%OUT REJ-*_(DO OUTPUT_^1_%JMP* DR10_)GOOD_^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1_%JMP* DR14_^1DR10_€€!LDQ DOBUF_(=DATA BUFFER ADDRESS_^1_%SQN DR12_^1_%JMP* DR14_)=0, DO NOT STORE_^1DR12_!ADQ- ITEMP,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR14_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR16_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* DOSB_^1_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%€βJMP* (DOSB)_'RETURN_^1DR16_!LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA* DORD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (DORD)_'RETURN_^1_%END_]_^__βPD1555A CSY/ C60 P€1_%NAM D1555A_'DECK-ID C60 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORP. 1974_^1*_$1700 MSOS 4.1_$08-26-74_^1_%SPC 2_^1*_$CALL FORMAT WORD ADDRESSING_^1*_%DATA BUFFER OPTIONAL_^1*_]_^1*_)Q15=0_^1*_+Q=OUTPUT WORD INDEX 1 TO N_^1*_+A=OUTPUT WORD VALUE_^1*_]_^1*_]_^1*_$CALL FORMAT€€ BIT ADDRESSING NON-MOMENTARY RELAYS_^1*_'DATA BUFFER REQUIRED_^1*_]_^1*_)Q15=1_^1*_+Q=OUTPUT BIT INDEX 1 TO N_^1*_-BITS NUMBERED RIGHT TO LEFT IN OUTPUT WORD_^1*_+A=0 CLEAR BIT_^1*_+A=1 SET BIT_^1*_]_^1*_]_^1*_$CALL FORMAT BIT ADDRESSING MOMENTARY RELAYS_^1*_%DATA BUFFER OPTIONAL_^1*_%M FLAG IN CONTROL RECORD SET_^1*_]_^1*_)Q15=1_^1*_+Q=OUTPUT BIT INDEX_^1*_+A=NOT USED_^1*_]_^1*€€_]_^1*_'RTJ ROSB_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_*=$8002_$NO DATA BUF FOR BIT ADDRESSING_^1*_6NON MOMENTARY RELAYS_^1*_]_^1*_%CALL RORD(INDEX,IVAL,IERR)_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT ROSB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT RORD_)FORTRAN ENTRY_^1_%EXT PUTD_)ENTRY IN BUFEXC_^1_%EXT* ROCRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EX€€T* ROBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#03 SUBROUTINE RETURN ADDRESS_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06€€ INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%EQU BITX(13)_$13 BIT INDEX_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#THREAD TO NEXT RECORD_^1_%€€EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR FIRST POINT_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H8000($32)_^1_%EQU H1000($2F)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1_%EQU H0010($27)_^1_%EQU ZERO($22)_^1_%EQU ONEBIT($23)_^1_%EQU MASKT($33)_^1_%EJT_]€€_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1ROSB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDA* ROSB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SP€€C 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1RORD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDQ* RORD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVA€€L,I_^1_%LDA- (ZERO),Q_^1_%STA- AREG,I_'PUT VALUE INTO A-VOL_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA ROCRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE = 0_^1_%LDA- INDEX,I_^1_%SAM DR4_*BIT ADDRESS_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%ALS 1_,MAKE INDEX TO 8 BIT OUTPUT WORDS_^1_%STA- INDEX,I_^1_%RTJ FINDCR_€€^1_%JMP* DR14_^1_%JMP* DR24_)ERROR_^1DR4_"CLR Q_,MAKE INDEXES FOR BIT ADDRESSING_^1_%AND- H7FFF_^1_%DVI- H0010_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%ALS 1_,MAKE INDEX TO 8 BIT OUTPUT WORDS_^1_%STA- INDEX,I_%SAVE STATION INDEX_^1_%STQ- BITX,I_'SAVE BIT INDEX_!0 TO 15_^1_%RTJ FINDCR_^1_%JMP* DR6_^1_%JMP* DR24_)ERROR_^1DR6_"LDQ- IREC,I_'ARE RELAYS MOMENTARY_^1_%LDA- TYPLU,Q_€€^1_%AND- H1000_^1_%SAZ DR8_*NO_^1_%LDQ- BITX,I_^1_%LDA- ONEBIT,Q_$GET OUTPUT BIT_^1_%STA- AREG,I_^1_%JMP* DR14_^1DR8_"LDQ ROBUF_(IS DATA BUFFER PRESENT_^1_%SQN DR10_^1_%LDA =N$8002_%ERROR, NO DATA BUFFER_^1_%STA- ETEMP,I_^1_%JMP* DR24_^1DR10_!ADQ- ITEMP,I_%INDEX TO DATA BUFFER_^1_%LDA- (ZERO),Q_$HISTORY DATA WORD_^1_%LDQ- BITX,I_'BIT INDEX_^1_%AND- MASKT,Q_%MASK OUT SPECIFIED B€€IT_^1_%LDQ- AREG,I_'NEW BIT STATE_^1_%STA- AREG,I_'SAVE MASKED HISTORY WORD_^1_%SQZ DR14_)LEAVE BIT = 0_^1_%LDQ- BITX,I_^1_%LDA- AREG,I_^1_%EOR- ONEBIT,Q_$SET BIT_^1_%STA- AREG,I_'SAVE NEW OUTPUT WORD_^1DR14_!LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR16_)NOT REMOTE I/O_^1_%RTJ PUTD_)PUT VALUE INTO BUFFER_^1_%JMP* DR24_)FINISH AND RETURN_^1DR16_!LDQ RO€€BUF_(=DATA BUFFER ADDRESS_^1_%SQN DR18_^1_%JMP* DR20_)=0, DO NOT STORE_^1DR18_!ADQ- ITEMP,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR20_!LDQ- IREC,I_'OUTPUT LOW 8 BITS_^1_%LDQ- WES,Q_^1_%ADQ- INDEX,I_^1_%LDA- AREG,I_^1_%OUT REJ-*_^1_%RAO- INDEX,I_%BUMP INDEX FOR UPPER 8 BITS_^1_%RTJ FINDCR_^1_%JMP* DR22_^1_%CLR Q_,RELAYS FOR UPPER 8 BITS NOT €€INSTALLED_^1_%STQ- ETEMP,I_%CLEAR ERROR RETURNED BY FINDCR_^1_%JMP* DR24_^1DR22_!LDQ- IREC,I_'OUTPUT HIGH 8 BITS_^1_%LDA- TYPLU,Q_%ABORT IF REMOTE_^1_%AND- H2000_^1_%SAZ DR23_)NOT REMOTE_^1_%JMP* DR24_^1DR23_!LDQ- WES,Q_^1_%ADQ- INDEX,I_^1_%LDA- AREG,I_^1_%ARS 8_^1_%OUT REJ-*_^1_%JMP* DR24_^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1DR24_!€€LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR26_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA ROSB_^1_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP (ROSB)_'RETURN_^1DR26_!LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA RORD_^1_%RTJ- (VOLR)_^1_%€,EIN 0_^1_%JMP (RORD)_'RETURN_^1_%END_]_^__,PD1566A CSY/ C61 P€1_%NAM D1566A_'DECK-ID C61 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORP. 1974_^1*_$1700 MSOS 4.1_$08-06-74_^1_%SPC 2_^1*_$CALL FORMAT_^1*_)A=VALUE_"$000(10 MA) TO $FFF(50 MA)_^1*_)Q=POINT NUMBER_^1*_'RTJ AOSB_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_€€%CALL AORD(INDEX,IVAL,IERR)_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT AOSB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT AORD_)FORTRAN ENTRY_^1_%EXT PUTD_)ENTRY IN BUFEXC_^1_%EXT* AOCRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* AOBUF_(ADDRESS OF DATA BUFFER_^1_%EXT* FINDCR_'FIND CONTROL RECORD_^1_%EXT* ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0€€)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO D€€ATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#THREAD TO NEXT RECORD_^1_%EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR FIRST POINT_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU€€ VOLR($BA)_^1_%EQU H8000($32)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1_%EQU ZERO($22)_^1_%EQU H0004($25)_^1_%EQU H0005($43)_^1_%EQU H0FFF($E)_^1_%EQU DACBIT($2F)_^1_%SPC 4_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1AOSB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM€€ 13_^1_%LDA* AOSB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1AORD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^€€1_%LDQ* AORD_^1_%STQ- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_+MAKE INDEX ZERO BASED_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_'SAVE IVAL ADDRESS_^1_%LDA- (ZERO),Q_^1_%STA- AREG,I_(VALUE TO A-REG_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA AOCRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD A€€DDRESS_^1_%LDA- AREG,I_'CONVERT VALUT TO OUTPUT FORM_^1_%ARS 3_^1_%AND- H0FFF_^1_%CLR Q_^1_%MUI- H0004_^1_%DVI- H0005_^1_%ADD =N$66_^1_%STA- AREG,I_^1_%LDA- INDEX,I_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%CLR Q_^1_%DVI- H0004_(MAKE STATION ADDRESS_^1_%STA- INDEX,I_^1_%LDA- AREG,I_^1_%ADD- DACBIT,Q_$ADD CHANNEL ADDRESS_^1_%STA- AREG,I_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR €€CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*OK_^1_%JMP* DR14_)ERROR_^1DR4_"LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*NOT REMOTE I/O_^1_%RTJ PUTD_)PUT VALUE INTO BUFFER_^1_%JMP* DR14_)FINISH AND RETURN_^1DR8_"LDQ- IREC,I_^1_%LDQ- WES,Q_(GET WES FOR FIRST STATION_^1_%ADQ- INDEX,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%OUT REJ-*_(DO OUTPUT_^1_%JMP* DR10_)GOOD INPUT_€€^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1_%JMP* DR14_^1DR10_!LDQ AOBUF_(=DATA BUFFER ADDRESS_^1_%SQN DR12_^1_%JMP* DR14_)=0, DO NOT STORE_^1DR12_!ADQ- ITEMP,I_%ADD INDEX_^1_%LDA- AREG,I_^1_%AND- H0FFF_^1_%STA- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR14_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR16_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTOR€XE RETURN_^1_%STA* AOSB_^1_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (AOSB)_'RETURN_^1DR16_!LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA* AORD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (AORD)_'RETURN_^1_%END_]_^__XPD1501A CSY/ C62 P€1_%NAM D1501A_'DECK-ID C62 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORP. 1974_^1*_$1700 MSOS 4.1_$08-30-74_^1_%SPC 2_^1*_$CALL FORMAT_^1*_)Q=POINT NUMBER_^1*_'RTJ AISB_^1*_)A=VALUE_^1*_)Q=0_(NO ERROR_^1*_*=$8000_#BAD INDEX_^1*_*=$8001_#REJECT_^1*_%CALL AIRD(INDEX,IVAL,IERR)_^1€€_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT AISB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT AIRD_)FORTRAN ENTRY_^1_%EXT GETD_)ENTRY IN BUFEXC_^1_%EXT* AICRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* AIBUF_(ADDRESS OF DATA BUFFER_^1_%EXT FINDCR_'FIND CONTROL RECORD_^1_%EXT ABSAD_(ABSOLUTIZE PARAMETERS_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%0€€2 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU€€ COMP(12)_$12 COMPLETION ADDRESS_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1_%EQU NBRS(1)_%NUMBER OF POINTS IN RECORD AND BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,OPERATION MODE_^1_%EQU WES(3)_'WES CODE FOR ADC_^1_%EQU MWES(4)_%WES CODE FOR MUX_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU VOLR($BA)_^1_%EQU H8000($32)_^1_%EQU H7FFF($42)_^1_%EQU H2000($30)_^1€€_%EQU ZERO($22)_^1_%EQU H0080($2A)_^1_%EQU H0002($24)_^1_%EQU H0010($27)_^1*_]_^1_%EQU ONECPL(-16)_!-16/12 BIT ADC_!-4/14 BIT ADC_^1_%SPC 4_^1****************************************************_^1*_)ASSEMBLY LANGUAGE CALL ENTRY POINT_$*_^1****************************************************_^1AISB_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDA* AISB_^1_%STA- IRETN,I_€€%SAVE RETURN_^1_%EIN 0_^1_%INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS = 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_)FORTRAN CALL ENTRY POINT_/*_^1****************************************************_^1AIRD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 13_^1_%LDQ* AIRD_^1_%STQ- IRETN,I_%SAVE €€RETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARAMETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_+MAKE INDEX ZERO BASED_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_'SAVE IVAL ADDRESS_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1DR2_"LDA AICRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- INDEX,I_^1_%STA- ITEMP,I_%SAVE DATA BUFFER INDEX_^1_%CLR Q_,MAKE STAT€€ION INDEX_^1_%DVI- H0010_^1_%STA- INDEX,I_%SAVE STATION INDEX_^1_%STQ- AREG,I_'SAVE CHANNEL ADDRESS_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*OK_^1_%JMP* DR14_)ERROR_^1DR4_"LDQ- IREC,I_'IS I/O REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*NOT REMOTE I/O_^1_%RTJ GETD_)GET VALUE FROM VALUE BUFFER_^1_%JMP* DR14_)FINISH AND RETURN_^1DR8_"LDQ- €€IREC,I_^1_%LDQ- MWES,Q_'WES FOR MUX_^1_%ADQ- INDEX,I_^1_%LDA- AREG,I_'CHANNEL ADDRESS_^1_%IIN 0_^1_%OUT REJ-*_^1_%LDQ- IREC,I_^1_%LDQ- WES,Q_^1_%ADQ- H0080_(FUNCTION BIT_^1_%ENA -30_^1_%STA- COMP,I_^1DR9_"INP REJ-*_(WAIT ON DATA READY_^1_%AND- H0002_^1_%SAN DR9A_^1_%RAO- COMP,I_'BUMP LOOP COUNTER_^1_%LDA- COMP,I_^1_%SAZ REJ_*TOO LONG_^1_%JMP* DR9_^1DR9A_!LDQ- IREC,I_'READ ADC€€_^1_%LDQ- WES,Q_^1_%INP REJ-*_^1_%JMP* DR10_^1REJ_"NOP 0_,REJECT_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR CODE TO REJECT_^1_%EIN 0_^1_%JMP* DR14_^1DR10_!EIN 0_^1_%SAP DR10A_^1_%INA ONECPL_'CORRECT FOR TWOS COMPLEMENT ADC_^1DR10A STA- AREG,I_'SAVE DATA_^1_%LDQ AIBUF_(=DATA BUFFER ADDRESS_^1_%SQN DR12_^1_%JMP* DR14_)=0, DO NOT STORE_^1DR12_!ADQ- ITEMP,I_%ADD INDEX_^1_%ST€€A- (ZERO),Q_$STORE VALUE IN DATA BUFFER_^1DR14_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR16_)FORTRAN_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* AISB_^1_%LDQ- ETEMP,I_%ERROR CODE_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (AISB)_'RETURN_^1DR16_!LDQ- IVAL,I_'=ADDRESS OF VALUE WORD_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$RETURN VALUE_^1_%LDQ- IERR,I_^1_%LD€΄A- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_%RESTORE RETURN ADDRESS_^1_%STA* AIRD_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (AIRD)_'RETURN_^1_%END_]_^__΄PD1547A CSY/ C63 P€1_%NAM D1547A_'DECK-ID C63 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1_%SPC 2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORP. 1974_^1*_$1700 MSOS 4.1_$08-22-74_^1_%SPC 4_^1*_$CALL FORMAT_^1*_*Q=POINT NUMBER_^1*_'RTJ CTSB_^1*_*A=VALUE_^1*_*Q=0_#NO ERROR_^1*_*Q=$8000 BAD INDEX_^1*_*Q=$8001 REJECT_^1*_*Q=$8003 NOT INITIAL€€IZED , BAD DATA_^1*_'CALL(INDEX,IVAL,IERR)_^1_%SPC 4_^1*_$DIAGNOSTIC CALL FORMAT--OPERATES I/O DIRECT_^1*_*Q=POINT NUMBER_^1*_'RTJ CTDG_^1*_*A=VALUE_^1*_*Q=0_#NO ERROR_^1*_*Q=$8000 BAD INDEX_^1*_*Q=$8001 REJECT_^1*_*Q=$8003 SCAN ALREADY ON_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT CTSB_)ASSEMBLY LANGUAGE ENTRY_^1_%ENT CTRD_*FORTRAN ENTRY_^1_%ENT CTDG_)DIAGNOSTIC ENTRY_^€€1_%EXT GETD_)ENTRY IN BUFEXC_^1_%EXT* CTCRS_(ADDRESS OF CONTROL RECORD BLOCK_^1_%EXT* CTBUF_(ADDRESS OF DATA BUFFER_^1_%EXT* FINDCR_'FIND CONTROL RECORD_^1_%EXT* ABSAD_(ABSOLUTIZE PARAMETERS_^1_%EXT* CTUNIT_'UNITS OF TIME DELAY FOR SCAN_^1_%EXT* CTDELY_'TIME DELAY FOR SCAN_^1_%EXT E15721_'1572 W-E-S FOR FUNCTION_^1_%EXT* CTMULT_'1572 MULTIPLIER FOR COUNTER GATE_^1_%EXT H15721_'1€€572 HISTORY WORD_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRE€€SS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS_^1_%EQU DIAG(13)_$13 DIAGNOSTIC ENTRY FLAG_^1_%EJT_]_^1*_$CONTROL RECORD REFERENCES_^1_%EQU TYPLU(2)_$DEVICE TYPE_^1_%EQU WES(3)_'WES COCE FOF FIRST STATION_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU VOLA($BB)_^1_%EQU €€ VOLR($BA)_^1_%EQU ZERO($22)_^1_%EQU H2000($30)_^1_%EQU AMONI($F4)_^1_%EQU H7FFF($42)_^1_%EQU H8000($32)_^1_%EQU HFFDF($38)_^1_%EQU H0020($28)_^1_%EQU HFF7F($3A)_^1_%EQU ADISP($EA)_^1_%EJT_]_^1****************************************************_^1*_)ASSEMBLY LANGUAGE ENTRY POINT_**_^1****************************************************_^1CTSB_!NUM 0_^1_%IIN 0_^1_%RTJ- (€€VOLA)_^1_%NUM 14_^1_%LDA* CTSB_^1_%STA- IRETN,I_%SAVE RETURN_^1_%EIN 0_^1_%ENA 0_^1_%STA- DIAG,I_'CLEAR DIAG ENTRY FLAG_^1DR1_"INQ -1_^1_%STQ- INDEX,I_%PUT Q INTO INDEX SLOT_^1_%ENA 0_^1_%STA- IVAL,I_'SET VALUE ADDRESS= 0_^1_%JMP* DR2_^1_%SPC 4_^1****************************************************_^1*_*DIAGNOSTIC ENTRY_6*_^1***************************************************€€*_^1CTDG_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDA* CTDG_^1_%STA- IRETN,I_^1_%EIN 0_^1_%RAO- DIAG,I_'SET ENTRY FLAG_^1_%JMP* DR1_^1_%SPC 4_^1****************************************************_^1*_*FORTRAN ENTRY POINT_3*_^1****************************************************_^1CTRD_!NUM 0_^1_%IIN 0_^1_%RTJ- (VOLA)_^1_%NUM 14_^1_%LDQ* CTRD_^1_%STQ- IRETN,I_%SAVE R€€ETURN_^1_%EIN 0_^1_%RTJ ABSAD_(PICK UP PARANETERS_^1_%LDA- (ZERO),Q_^1_%INA -1_^1_%STA- INDEX,I_%SAVE INDEX VALUE_^1_%RTJ ABSAD_^1_%STQ- IVAL,I_'SAVE IVAL ADDRESS_^1_%RTJ ABSAD_^1_%STQ- IERR,I_'SAVE ERROR ADDRESS_^1_%ENA 0_^1_%STA- DIAG,I_'CLEAR DIAG ENTRY FLAG_^1DR2_"LDA CTCRS_^1_%STA- IREC,I_'SAVE CONTROL RECORD ADDRESS_^1_%LDA- INDEX,I_^1_%STA- ITEMP,I_%MAKE INDEX TO DATA€€ BUFFER_^1_%ENA 0_^1_%STA- ETEMP,I_%SET ERROR CODE =0_^1_%RTJ FINDCR_^1_%JMP* DR4_*0K_^1_%JMP* DR16_)ERROR, BAD INDEX_^1DR4_"LDQ- IREC,I_'IS I/0 REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR8_*NOT REMOTE_^1_%RTJ GETD_^1_%JMP* DR16_)FINISH AND RETURN_^1DR8_"LDA- DIAG,I_'IS DIAGNOSTIC ENTRY_^1_%SAZ DR9_*NO_^1_%LDA* INITL_(IS SCAN ON_^1_%SAN DR8A_)YES_^1_%JMP* DR20_)NO- GO O€€N_^1DR8A_!LDA =N$8003_%SET ERROR_^1_%STA- ETEMP,I_^1_%JMP* DR14_^1DR9_"LDQ- IREC,I_'IS ERROR FLAG SET_^1_%LDA- TYPLU,Q_^1_%SAP DR10_)NO_^1_%LDA =N$8001_^1_%STA- ETEMP,I_%SET ERROR_^1DR10_!LDQ CTBUF_(MAKE INDEX_^1_%ADQ- ITEMP,I_^1_%LDA- (ZERO),Q_$GET VALUE_^1_%STA- AREG,I_'SAVE_^1_%LDA* INITL_(IS DRIVER INITIALIZED_^1_%SAZ DR12_)NO_^1_%JMP* DR16_)YES_^1_%SPC 2_^1**************€€**************************************_^1*_*INITIALIZE SCAN_7*_^1****************************************************_^1DR12_!LDA- $EF_*INITIALIZE DRIVER_^1_%ADD =N$5200_^1_%STA- REQST,I_^1_%LDA =XDR50_^1_%STA- COMP,I_^1_%LDA- I_,MAKE PARAM LIST ADDRS FOR INDIR REQST_^1_%INA REQST_^1_%IIN 0_^1_%STA* DR14+2_^1DR14_!RTJ- (AMONI)_%START DRIVER I/0_^1_%NUM $2000_^1_%NUM 0_,ADDRES€€S OF PARAMETERS_^1_%RAO* INITL_(SET INITIACIZATION FLAG_^1_%LDA =N$8003_%SET ERROR DATA BAD_^1_%STA- ETEMP,I_^1_%RTJ* SYNC_^1_%SPC 2_^1DR16_!LDA- IVAL,I_'CHECK CALLER_^1_%SAN DR18_)FORTRAN_^1_%IIN 0_,ASSEMBLY RETURN_^1_%LDA- IRETN,I_%RESTORE RETURN_^1_%STA* CTSB_^1_%LDQ- ETEMP,I_^1_%STQ- (ZERO),I_$SET Q TO RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (CTSB)_^1DR18_!LDQ- IVAL,I_'F€€ORTRAN RETURN_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$RETURN VALUE_^1_%LDQ- IERR,I_^1_%LDA- ETEMP,I_^1_%STA- (ZERO),Q_$RETURN ERROR IF ANY_^1_%IIN 0_^1_%LDA- IRETN,I_^1_%STA* CTRD_)RESTORE RETURN_^1_%RTJ- (VOLR)_^1_%EIN 0_^1_%JMP* (CTRD)_^1INITL NUM 0_,INITIALIZATION FLAG_^1SRGFLG NUM 0_^1DR20_!LDA* SRGFLG_'IS SRG INITIALIZED_^1_%SAN DR22_)YES_^1_%RTJ* SYNC_^1_%RAO* SRGFLG_^1DR22_€€!LDQ- IREC,I_^1_%LDQ- WES,Q_(STATION ADDRESS_^1_%ADQ- INDEX,I_^1_%INP REJX-*_^1_%JMP* DR24_^1REJX_!NOP 0_^1_%LDA =N$8001_%SET REJECT ERROR_^1_%STA- ETEMP,I_^1_%JMP* DR14_^1DR24_!STA- AREG,I_^1_%JMP* DR14_^1_%SPC 2_^1****************************************************_^1*_*INITIALIZE 1572_7*_^1****************************************************_^1SYNC_!NUM 0_^1_%LDA H15721_'€€ENABLE SRG SYNC IN 1572_^1_%AND- HFFDF_^1_%ADD- H0020_^1_%STA H15721_^1_%LDA E15721_'INITIALIZE 1572_^1_%AND- HFF7F_(MASK OUT FUNCTION BIT_^1_%TRA Q_^1_%LDA CTMULT_^1_%OUT REJA-*_^1_%JMP* DR16_^1REJA_!NOP 0_^1_%LDA =N$8001_%REJECT ERROR_^1_%STA- ETEMP,I_^1_%JMP* (SYNC)_^1_%EJT_]_^1****************************************************_^1*_*READ COUNTERS AND BUFFER DATA_)*_^1**€€**************************************************_^1DR50_!LDA =XPSDVOL_^1_%STA- I_,PSEUDO VOLATILE POINTER_^1_%LDA CTCRS_^1_%STA- IREC,I_'CONTROL RECORD ADDRESS_^1_%ENQ 0_,INITIAL INDEX_^1_%STQ- ITEMP,I_%DATA BUFFER INDEX_^1_%STQ- INDEX,I_%POINT INDEX_^1_%LDQ- IREC,I_^1DR51_!LDA- TYPLU,Q_%CLEAR ERROR FLAG AT START OF SCAN_^1_%AND- H7FFF_^1_%STA- TYPLU,Q_^1_%LDQ- (ZERO),Q_$GWT N€€EXT CONTROL RECORD_^1_%INA 0_^1_%SAZ DR52_)DONE_^1_%JMP* DR51_^1DR52_!RTJ FINDCR_'GET CONTROL RECORD_^1_%JMP* DR54_)OK_^1_%JMP* DR60_)LAST IS DONE_^1DR54_!LDQ- IREC,I_'IS I/0 ON REMOTE_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_%SAZ DR56_)NO_^1_%JMP* DR59_^1DR56_!LDQ- IREC,I_^1_%LDQ- WES,Q_(FIRST STATION W-E-S_^1_%ADQ- INDEX,I_%ADD INDEX_^1_%INP REJ-*_(DO INPUT_^1_%JMP* DR58_)GOOD_^1R€€EJ_"NOP 0_,REJECT_^1_%LDQ- IREC,I_^1_%LDA- TYPLU,Q_^1_%AND- H7FFF_(SET ERROR FLAG IN CR_^1_%ADD- H8000_^1_%STA- TYPLU,Q_^1_%JMP* DR59_^1DR58_!STA- AREG,I_'SAVE VALUE_^1_%LDQ CTBUF_(STORE VALUE IN DATA BUFFER_^1_%ADQ- ITEMP,I_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_^1DR59_!RAO- ITEMP,I_^1_%RAO- INDEX,I_^1_%JMP* DR52_^1PSDVOL BZS PSDVOL(15)_"PSEUDO VOLATILE_^1DR60_!LDA CTUNIT_'UNITS OF€ξ DELAY_^1_%ALS 4_^1_%ADD- $EF_^1_%ADD =N$5000_^1_%STA* DR62+1_^1_%LDA CTDELY_'TIME DELAY_^1_%STA* DR62+3_^1DR62_!RTJ- (AMONI)_%RESTART SCAN AFTER TIME DELAY_^1_%NUM 0_^1_%ADC DR50_^1_%NUM 0_,TIME DELAY_^1_%JMP- (ADISP)_^1_%END_]_^__ξPD1536 CSY/ C64 P€1_%NAM D1536_(DECK-ID C64 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1*_$MSOS 4.1_*08-30-74_^1_%SPC 2_^1*_#DRIVER FOR 1536/1525 RELAY MUX-ADC_!5.120 VOLT ADC_^1*_$DRIVER EXPECTS ADC VALUE TO€€ BE LEFT JUSTIFIED TO BIT 15_^1*_$DRIVER EXPECTS GAINS OF 1,10,100,1000_^1*_$PDT WORD 21 DEPENDENT ON ADC RESOLUTION_^1*_]_^1*_)RC=4 FREAD_^1*_+VALUE RETURNED IS MILLIVOLTS * GAIN (+/-5120)_^1*_]_^1*_)RC=1 READ_^1*_+VALUE RETURNED IS COUNTS LEFT JUSTIFIED SIGN FILLED_^1*_]_^1*_)ERROR CODES RETURNED AS DATA VALUES_^1*_+$8000 TIMEOUT_^1*_+$8001 MUX REJECT_^1*_+$8002 ADC REJECT_^1€€*_]_^1*_]_^1*_$ENTRY POINTS_^1_%ENT I1536,C1536,E1536_>**MSOS 4.1**_^1*_]_^1*_$EXTERNAL POINTS_^1_%EXT LOG_^1*_]_^1*_$EQUIVALENTS_^1_%EQU ZERO($2)_^1_%EQU H0003($4)_^1_%EQU ONEBIT($23)_^1_%EQU AFNR($B5)_^1_%EQU ACMPRQ($B6)_^1_%EQU ADISP($EA)_^1_%EQU EIGHTY($2A)_^1_%EQU FORTY($29)_^1_%EQU ONE($3)_^1_%EQU SVN($5)_^1_%EQU TEN($27)_^1_%EQU MSKFF($A)_^1_%EQU MK7FFF($11)_^€€1_%EQU MKFF7F($3A)_^1_%EQU H0040($29)_^1_%EQU H8000($32)_^1*_]_^1*_$PROGRAM PARAMETERS_^1_%EQU ADCCLK(1)_#ADC TIMEOUT CLOCK._^1*_RSAMPLE PHYSTAB_^1_%EQU ELVL(0)_%SCHEDULER CALL._*NUM $1209_^1_%EQU EDIN(1)_%INITIATOR ADDRESS_(ADC I1536_^1_%EQU EDCN(2)_%CONTINUATOR ADDRESS_%ADC C1536_^1_%EQU EDER(3)_%ERROR ADDRESS_,ADC E1536_^1_%EQU EDCLK(4)_$DIAGNOSTIC CLOCK._(NUM -1_^1_%EQ€€U ELU(5)_'LOGICAL UNIT._,NUM 0_^1_%EQU EPTR(6)_%PARAMETER POINTER._'NUM 0_^1_%EQU EWES(7)_%MUX W-E-S_0ADC MWES0_^1_%EQU EREQST(8)_#REQUEST STATUS_+NUM $02C1_^1_%EQU ESTAT1(9)_#DRIVER STATUS/INITL FLAG NUM 0_^1_%EQU ECCOR(10)_#CURRENT CORE ADDRESS._#NUM 0_^1_%EQU ELSTWD(11)_"LAST CORE ADDRESS._'NUM 0_^1_%EQU ESTAT2(12)_"MUX STATUS_/NUM 0_^1_%EQU MASLGN(13)_"RESERVED_1NUM 0€€_^1_%EQU ADMMDR(14)_"ADDRESS MASS MEMORY DVR. NUM $7FFF_^1_%EQU RETURN(15)_"FNR,CMR RETURN_+NUM 0_^1_%EQU ADCSTS(16)_"STATUS OF ADC._+NUM 0_^1_%EQU ADCEQP(17)_"ADC W-E-S_0ADC AWES0_^1_%EQU CURINP(18)_"CURRENT DATA ADDRESS_$NUM -1_^1_%EQU MVFLG(19)_#CONVERT TO MV FLAG._%NUM 0_^1_%EQU ERFLG(20)_#ERROR FLAG._.NUM 0_^1_%EQU ONECPL(21)_"TWOS COMPL CORRECT_'NUM $10/$4_^1_%EQU A€€CON(22)_$GAIN 1_3NUM 10240 = X1_^1*_.(23)_*2_3NUM 10240 = X10_^1*_.(24)_*3_3NUM 10240 = X100_^1*_.(25)_*4_3NUM 10240 = X1000_^1_%EJT_]_^1****************************************************_^1*_$INITIATOR ENTRY_<*_^1****************************************************_^1I1536 STQ- I_N**MSOS 4.1**_^1FNR_"RTJ- (AFNR)_^1_%JMP- (ADISP)_%NO REQUESTS._^1_%LDA- ECCOR,I_^1_%EOR- ELSTWD,I_€€$IS NUM. OF REQUESTED POINTS 0._^1_%SAN SETIDX_^1_%RAO- ELSTWD,I_$ASSUME 1 POINT FOR N = 0._^1SETIDX LDA- ELSTWD,I_^1_%STA- CURINP,I_$SET INDEX TO START OF USERS BUFFER._^1_%ENA 0_,CLEAR ERROR FLAG._^1_%STA- ERFLG,I_^1_%LDQ- EPTR,I_^1_%LDA- (ZERO),Q_$REQUEST WORD._^1_%ARS 9_^1_%AND- ZERO+5_'REQUEST CODE_:84*2543_^1_%TRA Q_S84*2543_^1_%INQ -14_*CHECK FOR MOTION REQUEST_.84*254€€3_^1_%SQN NOTMTN_N84*2543_^1_%JMP* FINISH_'IGNORE MOTION REQUESTS_084*2543_^1NOTMTN SUB- ONE_Q84*2543_^1_%STA- MVFLG,I_%COUNTS = 0, MV = 3._^1CLRMUX LDA- ESTAT1,I_$IS ADC/MUX INITIALIZED_^1_%AND- H0040_^1_%SAZ CLR8_)NO_^1_%JMP* NXT_^1CLR8_!ENA $40_*SET INITIALIZATION FLAG_^1_%ADD- ESTAT1,I_^1_%STA- ESTAT1,I_^1CLR10 LDQ- EWES,I_'INITIALIZE MUX-ADC_^1_%ENA 1_^1_%OUT ERR-*_(OUTP€€UT FUNCTION CLEAR._^1_%ENA $10_^1_%OUT ERR-*_(OUTPUT FUNCTION INTERRUPT ON CLEAR._^1_%JMP* EXTINT_^1_%EJT_]_^1****************************************************_^1*_$CONTINUATOR ENTRY_:*_^1****************************************************_^1C1536 STQ- I_N**MSOS 4.1**_^1_%LDA- ELU,I_^1_%SAN 1_^1_%JMP- (ADISP)_%GHOST INTERUPT_^1_%SET A_,$FFFF._^1_%STA- EDCLK,I_%CLEAR DIAG. €€CLOCK._^1_%LDQ- EWES,I_^1_%INP ERR-*_^1_%AND- TEN_*$10._^1_%SAN ADDR_)SKIP IF INTERRUPT WAS AFTER A CLEAR._^1_%JMP* DATA_^1ADDR_!LDA- FORTY_^1_%OUT ERR-*_(OUTPUT ENABLE READ DATA READY INTERRUPT._^1NXT_"LDQ- ECCOR,I_%GET THE NEXT_^1_%LDQ- (ZERO),Q_$GAIN AND MUX ADDRESS_284*2543_^1_%LDA- EWES,I_N84*2543_^1_%AND- MKFF7F_^1_%LLS 16_+SWAP A AND Q_:84*2543_^1_%OUT ERR-*_(OUTPUT NEX€€T MUX ADDRESS AND GAIN._^1EXTINT ENA ADCCLK_'START DIAGNOSTIC CLOCK_^1_%STA- EDCLK,I_^1_%JMP- (ADISP)_%EXIT AND WAIT UNTIL INTERRUPT._^1DATA_!LDA- ADCEQP,I_L84*2543_^1_%AND- MKFF7F_^1_%TRA Q_S84*2543_^1_%INP ERRA-*_^1_%SAP DAT1_^1_%SUB- ONECPL,I_$CORRECT FOR TWOS COMPLEMENT ADC_^1DAT1_!LDQ- MVFLG,I_^1_%SQN MV_+SKIP IF MV REQUESTED._^1STORE LDQ- CURINP,I_$ADDRESS OF BUFFER_^1_€€%STA- (ZERO),Q_$PLACE DATA IN USERS BUFFER._^1_%RAO- ECCOR,I_%BUMP LIST ADDRESS._^1_%RAO- CURINP,I_$BUMP USERS BUFF. ADDRESS._^1_%LDA- ECCOR,I_%CUR. CORE ADDRESS._^1_%SUB- ELSTWD,I_$LAST CORE ADDRESS._^1_%SAP CRQST_(SKIP IF DONE._^1_%JMP* NXT_*GO P.U. NEXT WORD IN LIST._^1MV_#STA* TEMP1_(SAVE ANALOG VALUE._^1_%LDQ- ECCOR,I_^1_%LDA- (ZERO),Q_$P.U. GAIN._^1_%ARS 10_^1_%AND- H0003_^€€1_%TRA Q_^1_%LDA* TEMP1_^1_%MUI- ACON,B_'CONVERT TO MILIVOLTS._^1_%TRQ A_,PLACE INTEGER IN A._^1_%JMP* STORE_^1CRQST LDA- ERFLG,I_%COMPLETE REQUEST._^1_%SAZ ESTAT_^1FINISH RTJ- (ACMPRQ)_$COMPLETE REQUEST ROUTINE._^1_%JMP* FNR_^1ESTAT LDQ- EWES,I_'GET STATUS OF MUX._^1_%INP 1_^1_%NOP 0_^1_%STA- ESTAT2,I_^1_%LDQ- ADCEQP,I_$GET STATUS OF ADC._^1_%INP 1_^1_%NOP 0_^1_%STA- ADCS€€TS,I_^1_%JMP* FINISH_^1_%SPC 4_^1****************************************************_^1*_%REJECT PROCESSING_9*_^1****************************************************_^1ERR_"JMP* INREJ_(MUX REJECT_^1_%LDA* MUXREJ_^1_%ENQ 6_,EXT REJ CODE_^1_%STQ* LOGREJ_^1_%JMP* STRCD_^1INREJ LDA* MUXREJ_'INT. REJ CODE._^1_%ENQ 5_,INT REJ CODE_^1_%STQ* LOGREJ_^1_%JMP* STRCD_^1ERRA_!JMP* INREJA_'€€ADC REJECT_^1_%LDA* ADCREJ_^1_%ENQ 6_,EXT REJ CODE_^1_%STQ* LOGREJ_^1_%JMP* STRCD_^1INREJA LDA* ADCREJ_^1_%ENQ 5_,INT REJ CODE_^1_%STQ* LOGREJ_^1STRCD LDQ- CURINP,I_^1_%STA- (ZERO),Q_$STORE CODE IN INPUT SLOT._^1_%LDQ- EWES,I_^1_%INP 1_^1_%NOP 0_^1_%STA- ESTAT2,I_^1_%LDQ- ADCEQP,I_^1_%INP 1_^1_%NOP 0_^1_%STA- ADCSTS,I_^1_%LDA* LOGREJ_'GET CODE TO LOG_^1_%LDQ- ELU,I_^1_%QLS €€6_^1_%AAQ Q_^1_%RTJ LOG_^1_%LDA- ESTAT1,I_$CLEAR INITIALIZAT+ON FLAG, SET V FIELD_^1_%AND =N$1FBF_^1_%ADD- H8000_^1_%STA- ESTAT1,I_^1_%RAO- ERFLG,I_%SET ERROR FLAG._^1_%RAO- ECCOR,I_%BUMP LIST ADDRESS._^1_%RAO- CURINP,I_$BUMP USERS BUFF. ADDRESS._^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_^1_%SAP DONE_)SKIP IF DONE._^1_%JMP* NXT_^1DONE_!JMP* CRQST_^1_%SPC 4_^1*************************€€***************************_^1*_$ERROR ENTRY_@*_^1****************************************************_^1E1536 STQ- I_,ERROR ENTRY_6**MSOS 4.1**_^1_%CLR Q_,TIME OUT CODE_^1_%STQ* LOGREJ_^1_%SET A_,TURN OFF CLOCK_^1_%STA- EDCLK,I_^1_%LDA* TIMCD_(TIMEOUT CODE._^1_%JMP* STRCD_^1TIMCD NUM $8000_(TIME OUT ERROR CODE_384*2543_^1MUXREJ NUM $8001_(INT REJ CODE_^1ADCREJ NUM $8002_(EX€8J REJ CODE_^1TEMP1 NUM 0_^1LOGREJ NUM 0_^1_%END_]_^__8PABSADR CSY/ C65 P€1_%NAM ABSADR_'DECK-ID C65 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORP. 1974_^1*_$1700 MSOS 4.1 07-15-74_^1_%SPC 2_^1*_$ABSOLUTIZES PARAMETER ADDRESS, RETURNS IT IN Q, BUMPS RETURN_^1*_]_^1*_$PARAMETER ADDRESS PASSED AND BUMPED IN VOLATILE_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTE€€RNALS_^1_%ENT ABSAD_^1_%EXT END0V4_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU H7FFF($42)_^1_%EQU ZERO($22)_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1_%EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 RETURN ADDRESS_^1_%SPC 4_^1ABSAD NUM 0_^1_%IIN 0_^1_%LDA* ABSAD_^1_%STA- SUBRET,I_$SAVE RET€pURN_^1_%EIN 0_^1_%LDA- IRETN,I_^1_%TRA Q_^1_%LDQ- (ZERO),Q_^1_%SAM AB2_*PART 1 CALL_^1_%SUB =XEND0V4_^1_%SAP AB2_*PART 1 CALL_^1_%SQP AB2_*PART 0 ABSOLUTE PARAMETERS_^1_%ADQ- IRETN,I_^1_%TRQ A_^1_%AND- H7FFF_^1_%TRA Q_^1AB2_"RAO- IRETN,I_%BUMP RETURN ADDRESS_^1_%IIN 0_^1_%LDA- SUBRET,I_^1_%STA* ABSAD_(RESTORE RETURN_^1_%EIN 0_^1_%JMP* (ABSAD)_^1_%END_]_^__pPFINDCR CSY/ C66 P€1_%NAM FINDCR_'DECK-ID C66 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORP. 1974_^1*_$1700 MSOS 4.1_$08-08-74_^1_%SPC 2_^1*_$RETURNS ADDRESS OF CONTROL RECORD CONTAINING_^1*_$POINT SPECIFIED BY INDEX . SETS ERROR IF CANT FIND._^1*_]_^1*_$PARAMETERS PASSED IN VOLATILE_^1_%SPC 4_^1€€*_$ENTRY POINTS AND EXTERNALS_^1_%ENT FINDCR_^1_%SPC 4_^1_%EQU H8000($32)_^1_%EQU ZERO($22)_^1_%EQU H7FFF($11)_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1*_$EQU QREG(0)_%00 Q-REG_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#SUBROUTINE RETURN_^1_%EQU IRETN(4)_$04 RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO €€CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1*_$EQU THREAD(0)_#00 THREAD_^1_%EQU NBRS(1)_%01 NUMBER OF POINTS_^1_%EQU TYPLU(2)_$02 DEVICE TYPE_^1_%EJT_]_^1_%SPC 4_^1FINDCR NUM 0_^1_%IIN 0_^1_%LDA* FINDCR_^1_€€%STA- SUBRET,I_$SAVE RETURN_^1_%EIN 0_^1FIN2_!LDQ- IREC,I_^1_%LDA- NBRS,Q_'GET NUMBER OF POINTS IN RECORD_^1_%SUB- INDEX,I_%SUBTRACT INDEX_^1_%INA -1_^1_%SAM FIN3_^1_%JMP* FIN8_)INDEX POINTS TO THIS RECORD_^1*_)GET NEXT CONTROL RECORD ON THREAD_%*_^1FIN3_!LDA- INDEX,I_%DECREMENT INDEX_!BY NBR PTS IN LAST RECD_^1_%LDQ- IREC,I_^1_%SUB- NBRS,Q_^1_%STA- INDEX,I_%SAVE INDEX TO NEW CO€HNTROL RECORD_^1_%LDQ- IREC,I_'GET THREAD_^1_%LDA- (ZERO),Q_^1_%INA 0_^1_%SAN FIN4_)NOT THE END_^1_%LDA- H8000_(SET ERROR_^1_%STA- ETEMP,I_^1_%RAO- SUBRET,I_$BUMP RETURN FOR ERROR_^1_%JMP* FIN8_^1FIN4_!STA- IREC,I_'UPDATE LOCATION OF CONTROL RECORD_^1_%JMP* FIN2_)TRY AGAIN_^1FIN8_!LDQ- SUBRET,I_^1_%JMP- (ZERO),Q_^1_%END_]_^__HPD1595 CSY/ C67 P€1_%NAM D1595_(DECK-ID C67 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1*_$1595 SERIAL I/O CARD DRIVER_^1*_]_^1*_$**********_"DRIVER DESCRIPTION_"**********_^1*_$D1595 €€IS A MSOS 4 DRIVER FOR THE IOM 1595 SERIAL I/O CARD. THE_^1*_$1595 PROVIDES A FLEXIBLE COMMUNICATIONS INTERFACE BETWEEN THE_^1*_$1700 COMPUTER AND SERIAL DATA (R232-C) COMPATIBLE DEVICES SUCH_^1*_$AS CRT TERMINALS, PRINTERS, ETC. THIS WILL BE COMPATIBLE WITH_^1*_$TIMESHARE. THE DRIVER HAS SIX MODES OF OPERATION - WRITE_^1*_$REQUESTS, FORMATTED WRITE REQUESTS, READ REQUESTS, FORM€€ATTED READ_^1*_$REQUESTS, MOTION REQUESTS, AND UNSOLICITED READ REQUESTS (FOR_^1*_$TIMESHARE ONLY.)_^1*_]_^1*_$FORMATTED WRITE REQUEST - THE REQUEST IS PROCEEDED BY A CARRIAGE_^1*_$RETURN, LINE FEED. THE NUMBER OF WORDS SPECIFIED IS OUTPUT, THE_^1*_$CHARACTER IN THE UPPER BYTE IS OUTPUT FIRST. WHEN A CARRIAGE_^1*_$RETURN IS ENCOUNTERED, IT IS AUTOMATICALLY FOLLOWED BY A LINE_^1*€€_$FEED. IF ZERO WORDS ARE SPECIFIED, ONLY ONE CHARACTER, IN THE_^1*_$UPPER BYTE OF THE FIRST WORD OF THE OUTPUT BUFFER, IS OUTPUT._^1*_$MODE HAS NO MEANING AND IS ASSUMED TO BE ASCII._^1*_]_^1*_$WRITE REQUEST - THIS REQUEST IS THE SAME AS THE FORMATTED WRITE_^1*_$REQUEST EXCEPT THAT THE REQUEST IS NOT PRECEDED BY A CARRIAGE_^1*_$RETURN. LINE FEEDS DO NOT AUTOMATICALLY FOLLOW CARR€€IAGE RETURN_^1*_$WHEN ENCOUNTERED._^1*_]_^1*_$FORMATTED READ REQUEST - THE NUMBER OF WORDS ARE INPUT. CHARA-_^1*_$CTERS ARE PACKED TWO IN EACH WORD WITH THE FIRST CHARACTER_^1*_$STORED IN THE UPPER BYTE OF THE FIRST WORD OF THE INPUT BUFFER._^1*_$THE DRIVER INPUTS CHARACTERS UNTIL A CARRIAGE RETURN IS ENCOUNT-_^1*_$ERED. EACH CHARACTER IS CHECKED FOR PROPER PARITY. IF MORE THAN_€€^1*_$THE SPECIFIED NUMBER OF CHARACTERS (TWICE AS MANY CHARACTERS_^1*_$AS WORDS SPECIFIED) ARE ENTERED BEFORE RECEIPT OF A CARRIAGE_^1*_$RETURN, THE EXTRA CHARACTERS ARE IGNORED. A RUBOUT CANCELS ALL_^1*_$DATA WHICH HAS BEEN PREVIOUSLY INPUT, AND A NEW CHARACTER_^1*_$STRING FOLLOWS THE NEXT CARRIAGE RETURN. IN ADDITION TO CARRIAGE_^1*_$RETURN, IT IS POSSIBLE TO SPECIFY TWO SPECIA€€L INPUT TERMINATION_^1*_$CHARACTERS. INPUT CHARACTERS ARE ALWAYS TRANSLATED TO UPPER_^1*_$CASE IF LOWER CASE CHARACTERS ARE INPUT. IT IS POSSIBLE TO_^1*_$SPECIFY AN ECHOPLEX MODE, THE DRIVER WILL AUTOMATICALLY OUTPUT_^1*_$ALL INPUT CHARACTERS AS THEY ARE RECEIVED, EXCEPT LOWER CASE ARE_^1*_$ECHOED AS UPPER CASE CHARACTERS. A FREAD/READ MADE ON_^1*_$DIAGNOSTIC LOGICAL UNIT IS PRO€€CESSED NORMALLY UNLESS UNSOLICITED_^1*_$INPUT IS IN PROGRESS. IN WHICH CASE, THE INPUT IS PERFORMED_^1*_$FOLLOWING THE COMPLETION OF THE UNSOLICITED INPUT. A TIMESHARE_^1*_$LOGICAL UNIT IS ALWAYS IN READ CONDITION. DATA_^1*_$IS READ INTO A 40 WORD BUFFER ASSOCIATED WITH EACH DEVICE,_^1*_$UNTIL A CARRIAGE RETURN IS DETECTED. WHEN THIS OCCURS,_^1*_$THE ENTRY POINT OF A CORE RESID€€ENT INPUT PROCESSOR SPECIFIED IN_^1*_$THE PHYSICAL DEVICE TABLE IS SCHEDULED IF IT IS NON-ZERO. THE_^1*_$ENTRY IS SCHEDULED WITH THE Q REGISTER CONTAINING THE LOGICAL_^1*_$UNIT._^1*_]_^1*_$READ REQUEST - THE NUMBER OF WORDS SPECIFIED IS INPUT. TWO CHAR_^1*_$ACTERS ARE PACKER PER WORD. ALL CHARACTERS ARE TRANSFERRED AFTER_^1*_$PARITY CHECK. THE OVERFLOW OF THE INPUT BUFFER AND T€€HE LOWER_^1*_$CASE CHARACTERS AND ECHO FEATURES ARE HANDLED THE SAME AS THE_^1*_$FORMATTED READ._^1*_]_^1*_$MOTION REQUEST - MOTION REQUESTS ARE DEFINED IN THE PHYSICAL_^1*_$DEVICE TABLE FOR EACH DEVICE. EXAMPLES ARE AS FOLLOWS -_^1*_]_^1*_$713 CRT_^1*_$1. BACKSPACE RECORD_'BACKSPACE CURSOR ONE CHARACTER_^1*_$2. WRITE END OF FILE_%RESET CURSOR TO HOME POSITION_^1*_$3. REWIND_1N€€O ACTION_^1*_$4. REWIND/UNLOAD_*RESET CURSOR TO BEGINING OF LINE_^1*_$5. ADVANCE FILE_+MOVE CURSOR DOWN ONE LINE_^1*_$6. BACKSPACE FILE_)MOVE CURSOR UP ONE LINE_^1*_$7. ADVANCE RECORD_)ADVANCE CURSOR ONE CHARACTER_^1*_]_^1*_$1711 TELETYPE_^1*_$1. BACKSPACE RECORD_'NO ACTION_^1*_$2. WRITE END OF FILE_%TOP OF FORM_^1*_$3. REWIND_1NO ACTION_^1*_$4. REWIND/UNLOAD_*TERMINATE REQ€€UEST_^1*_$5. ADVANCE FILE_+NO ACTION_^1*_$6. BACKSPACE FILE_)NO ACTION_^1*_$7. ADVANCE RECORD_)NO ACTION_^1*_]_^1*_]_^1*_$UNSOLICITED READ REQUEST - (TIMESHARE ONLY) THE DRIVER CHECKS ALL_^1*_$DEVICES FOR INPUT AT EVERY INTERRUPT AND SAVES ALL CHARACTERS_^1*_$WHICH ARE READY FOR INPUT IN A 40 - WORD BUFFER LOCATED IN AN_^1*_$ADDRESS STORED IN THE PHYSICAL DEVICE TABLE. ALL CHAR€€ACTERS ARE_^1*_$INPUT AS UPPER CASE, AND ALL CHARACTERS INPUT AFTER THE_^1*_$FIRST 80 ARE IGNORED. IF ECHO MODE IS SELECTED, EACH INPUT_^1*_$CHARACTER WILL BE ECHOED AS IT IS READ. A CARRIAGE RETURN TERM-_^1*_$INATES INPUT, AND CAUSES A USER PROGRAM TO BE SCHEDULED WITH_^1*_$THE LOGICAL UNIT IN THE Q REGISTER._^1*_]_^1*_$ERRORS - THE DRIVER RECOGNIZES I/O OPERATION ERRORS. WHEN €€AN_^1*_$ERROR CONDITION IS DETECTED, AN ERROR CODE IS DETERMINED AS_^1*_$LISTED BELOW -_^1*_,00 = FAILURE TO INTERRUPT_^1*_,01 = LOST DATA_^1*_,02 = ALARM CONDITION_^1*_,03 = PARITY ERROR ON INPUT_^1*_,05 = INTERNAL REJECT_^1*_,06 = EXTERNAL REJECT_^1*_,33 = LINE BREAK_^1_%EJT_]_^1*_$*****************************************************************_^1*_$*_] *_^1*_$*_] *_^1*_$*_0SAM€€PLE PHYICAL DEVICE TABLE_2*_^1*_$*_] *_^1*_$*_] *_^1*_$*****************************************************************_^1*_]_^1*_]_^1*_$ENT P1595X_^1*_$EXT I1595,C1595,E1595_^1*_$EQU L1595(10)_#SERIAL I/O CARD LEVEL_^1*P1595XADC $5200+L1595_!00 SCHEDULAR CALL_^1*_$ADC I1595_(01 INITIATOR ADDRESS_^1*_$ADC C1595_(02 CONTINUATOR_^1*_$ADC E1595_(03 I/O ERROR ADDRESS_^1*_$N€€UM -1_+04 DIAGNOSTIC CLOCK_^1*_$NUM 0_,05 CURRENT LOGICAL UNIT_^1*_$NUM 0_,06 PARAMETER LIST ADDRESS_^1*_$ADC EQ1595+SLOTX 07 HARDWARE ADR/EQUIP STATUS_^1*_$NUM 0_,08 REQUEST STATUS_^1*_$NUM 0_,09 STATUS BITS_^1*_$ADC INBUF_(10 CURRENT LOCATION ( ADC INBUFF IF T/S)_^1*_$ADC INBUF+40_$11 LWA+1_^1*_$NUM 0_,12 HARDWARE STATUS_^1*_$NUM 0_,13 DRIVER LENGTH (M.M. ONL€€Y)_^1*_$NUM 0_,14 SECTOR ADR (M.M. ONLY)_^1*_$NUM 0_,15 TEMP STORAGE_^1*_$ADC INBUF_(16 START OF BUFFER ADR_^1*_$NUM 0_,17 DIAGNOSTIC LOGICAL UNIT_^1*_$NUM 0_,18 TERMINATION CHARACTERS_^1*_$NUM 0_,19 ERROR CODE STORAGE_^1*_$NUM $8000_(20 ECHO TYPE, 0 = HALF DUPLEX_^1*_$NUM 0_,21 OUTPUT/INPUT DIAG CLOCK TIME_^1*_$NUM 0_,22 MOTION WORD 1_^1*_$NUM 0_,23 MOTION WORD€€ 2_^1*_$NUM 0_,24 MOTION WORD 3_^1*_$NUM 0_,25 MOTION WORD 4_^1*_$NUM 0_,26 MOTION WORD 5_^1*_$NUM 0_,27 MOTION WORD 6_^1*_$NUM 0_,28 MOTION WORD 7_^1*_$NUM $8000_(29 CONTROL WORD - = T/S_%0 = NON T/S_^1*_$NUM 40_+30 BUFFER SIZE_((TIMESHARE ONLY)_^1*_$NUM 0_,31 USER ADR_^1*_$NUM 0_,32 CURRENT MOTION CODE_^1*_$ADC LU1595X-LOG1A 33 ACTUAL LOGICAL UNIT_^1*_$BZS I€€NBUF(40)_#34 BEGINNING OF BUF_"(TIMESHARE ONLY)_^1*_$NUM 0_,74 TIMESHARE BUFFER LENGTH_^1*_$ADC P1595X_'75 PHYSTB THREAD_^1*_]_^1*_$* CONTROL WORD - BIT 15 = 1 TIMESHARE_^1*_6BIT 14 = 1 UNSOLICITED INPUT ACTIVE_^1*_6BITS 0-3 USER PRIORITY LEVEL_^1_%EJT_]_^1*_]_^1*_$*****************************************************************_^1*_$*_4EQUIVALENCES_=*_^1*_$***************€€**************************************************_^1*_]_^1_%EQU EDCLK(4)_(WD 4 DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_*WD 5 LOGICAL UNIT_^1_%EQU EPTR(6)_)WD 6 PARAMETER LIST LOCATION_^1_%EQU EWES(7)_)WD 7 EQUIPMENT / STATION CODE_^1_%EQU EREQST(8)_'WD 8 REQUEST STATUS_^1_%EQU ESTAT1(9)_'WD 9 DRIVER STATUS_^1_%EQU ECCOR(10)_'WD 10 NEXT CORE LOCATION_^1_%EQU ELSTWD(11)_%WD 11€€ LAST CORE LOCATION + 1_^1_%EQU ESTAT2(12)_%WD 12 HARDWARE STATUS_^1_%EQU TEMP(15)_(WD 15 TEMPORARY STORAGE_^1_%EQU COREIN(16)_%SAVE START OF BUFFER ADDRESS_^1_%EQU DIAGLU(17)_%DIAGNOSTIC LOGICAL UNIT_^1_%EQU TERM(18)_(TERMINATION CHARS (2)_^1_%EQU ERRCOD(19)_%ALTDEV ERROR CODE STORAGE_^1_%EQU ECHO(20)_(TYPE OF I/O FD,HD,BATCH_^1_%EQU TIMVAL(21)_%DIAGNOSTIC CLOCK TIME_^1_%E€€QU MTN(22)_)MOTION BUFER_^1_%EQU TYPE(29)_(TIMESHARE INDICATOR AND PRI_^1_%EQU BUFFNO(30)_%NO OF WORDS FOR UNSIL. READ_^1_%EQU USER(31)_(USER PROGRAM RETURN ADR_^1_%EQU MOTWD(32)_'CURRENT MOTION WORD_^1_%EQU ACTLU(33)_'ACTUAL LOGICAL UNIT_^1_%EQU INBUF(34)_'START OF BUFFER_^1_%EQU NEXT(75)_(NEXT PHYSTB ADR_^1_%EQU TIMERR(0)_'TIMEOUT ERROR CODE_^1_%EQU LOST(1)_)LOST DATA E€€RROR CODE_^1_%EQU ALARM(2)_(ALARM ERROR CODE_^1_%EQU PARITY(3)_'PARITY ERROR CODE_^1_%EQU INTREJ(5)_'INTERNAL REJECT CODE_^1_%EQU EXTREJ(6)_'EXTERNAL REJECT CODE_^1_%EQU LINEBK(33)_%LINE BREAK ERROR CODE_^1_%EQU LPMSK(2)_(START LEFT PARTS MASKS_^1_%EQU NZERO($12)_%START RIGHT PARTS MASKS_^1_%EQU ZERO($22)_'LOCATION CONTAINING ZERO_^1_%EQU ONEBIT($23)_$START ONE BIT MASKS_^€€1_%EQU ZROBIT($33)_$START ZERO BIT MASKS_^1_%EQU AFNR($B5)_'LOCATION OF FIND NEXT REQUEST_^1_%EQU ACMPRQ($B6)_$LOCATION OF COMPLETE REQUEST_^1_%EQU ADISP($EA)_%LOCATION OF DISPATCHER_^1_%EQU AMONI($F4)_%LOCATION OF MONITOR_^1*_]_^1_%ENT I1595,C1595,E1595_^1*_]_^1_%EXT MAKEQ,ALTDEV,LOG_^1_%EJT_]_^1*_$*****************************************************************_^1*_$*_] *€€_^1*_$*_"H A R D W A R E Q - R E G I S T E R D E S C R I P T I O N*_^1*_$*_] *_^1*_$*****************************************************************_^1*_]_^1*_*Q R E G I S T E R D E S C R I P T I O N_^1*_]_^1*_*W FIELD = 0_$BITS 15 - 11_^1*_*EQUIP NUM_'BITS 10 = 07_^1*_*MODULE (1 OF 8) BITS 06 = 04_^1*_*STA LOC(1 OF 16) BITS 03 = 00_^1*_]_^1*_]_^1*_]_^1*_*BITS 00 - 03 = THE S€€TATION I/O ADDRESS, DECODED FOR 1 OF 16_^1*_9STATION ADDRESS LOCATIONS IN THE MODULE_^1*_]_^1*_*BITS 04 - 06 = THE MODULE ADDRESS, DECODED FOR THE CIU MOD-_^1*_9ULE OR UP TO SEVEN CIE MODULES IN THE SYSTEM_^1*_]_^1*_]_^1*_*BIT 07 =_%FUNCTION/STATUS BIT CONTAINED IN THE EQUIP-_^1*_9MENT NUMBER_^1*_]_^1*_9IF 0, WRITE OPERATION LOADS STATION DEVICES_^1*_9WITH DATA FROM THE A REGISTER,€€ READ OPERATION_^1*_9GATES DATA FROM STATION DEVICE INTO THE A_^1*_9REGISTER._^1*_]_^1*_9IF 1, WRITE OPERATION LOADS STATION DEVICE_^1*_9WITH FUNCTION COMMAND CONTAINED IN THE A_^1*_9REGISTER, READ OPERATION GATES STATUS FROM_^1*_9STATION DEVICE INTO THE A REGISTER._^1*_]_^1*_]_^1*_*BITS 08 - 10 = THE REMAINING BITS OF THE CIU/CIE EQUIPMENT_^1*_9NUMBER. THE CIU RESPONDS TO TWO EQU€€IPMENT_^1*_9NUMBERS= N AND N+1, WHERE N IS EVEN, DATA_^1*_9TRANSFERS ARE PERFORMED ON EQUIPMENT NUMBER_^1*_9N AND FUNCTION/STATUS OPERATIONS ON EQUIPMENT_^1*_9NUMBER N+1._^1*_]_^1*_]_^1*_*BITS 11 - 15 = ALL ZEROS FOR THE W FIELD._^1_%EJT_]_^1*_*A R E G I S T E R D E S C R I P T I O N_^1*_]_^1*_]_^1*_]_^1*_*THE A REGISTER IS USED TO TRANSFER ALL INFORMATION TO/FROM_^1*_*THE SIO U€€NIT DEVICES. THE TYPE OF INFORMATION CONTAINED IN_^1*_*THE A REGISTER IS DEPENDENT UPON BIT 7 OF THE Q REGISTER._^1*_]_^1*_9IF 0 (DATA). BITS 0-15 OF A CONTAIN DATA TO_^1*_9BE TRANSFERRED TO/FROM THE SIO STATION DEVICE_^1*_9DURING WRITE/READ OPERATIONS_^1*_]_^1*_9IF 1 (FUNCTION/STATUS), BITS 0-15 OF A CON-_^1*_9TAIN, FOR WRITE OPERATIONS, FUNCTION BITS_^1*_9FOR SETTING UP THE SIO €€UNIT, AND, FOR READ_^1*_9OPERATIONS, FUNCTION BITS FOR SETTING UP THE_^1*_9SIO UNIT, AND, FOR READ OPERATIONS, STATUS_^1*_9FROM THE SIO UNIT._^1*_]_^1*_*F U N C T I O N W R I T E O P E R A T I O N_^1*_]_^1*_*BITS 8-15 OF THE A REGISTER PROVIDE THE WRITE FUNCTION OPER-_^1*_*ATION TO THE SIO. THE A-REGISTER FUNCTIONS ARE AS FOLLOWS=_^1*_]_^1*_]_^1*_]_^1*_9BITS 0-7= N/A_^1*_]_^1*_]€€_^1*_9BIT 8 = IF SET, ENABLES THE SERIAL DATA TRANS_^1*_9MITTER FOR DATA WRITE TRANSFERS TO A TERMINAL_^1*_9DEVICE OR MODEM._^1*_]_^1*_]_^1*_9BIT 9 = IF SET, ENABLES THE FLAG FOR INTER-_^1*_9RUPT TO THE CIU WHEN THE TRANSMIT UNIT IS_^1*_9READY TO ACCEPT A DATA WORD._^1*_]_^1*_]_^1*_9BIT 10 = IF SET, ENABLES THE FLAG FOR INTER-_^1*_9RUPT TO THE CIU WHEN DATA IS RECEIVED FROM_^1*_9AN€€ EXTERNAL DEVICE._^1*_]_^1*_]_^1*_9BIT 11 = IF SET, ENABLES THE FLAG FOR INTER-_^1*_9RUPT TO THE CIU ON THE FOLLOWING RECEIVED_^1*_9DATA ERRORS=_^1*_;- PARITY ERROR_^1*_;- LINE BREAK_^1*_;- LOST CHARACTER_^1*_]_^1*_]_^1*_9BIT 12 = IF SET, ENABLES THE FLAG FOR INTER-_^1*_9RUPT TO THE CIU WHEN A PRESELECTED ASCII_^1*_9CHARACTER CODE OR A REMOTE SYSTEM INTERRUPT_^1*_9HAS BEEN DETECTED€€._^1*_]_^1*_]_^1*_9BIT 13 = IF SET, DISABLES RECEIVER ERROR AND_^1*_9AUXILLARY FLAGS AND CLEARS RECEIVER._^1*_]_^1*_]_^1*_9BIT 14 = IF SET, DISABLES REQUEST TO SEND AND_^1*_9TRANSMITTER FLAG AND CLEARS TRANSMITTER._^1*_]_^1*_]_^1*_9BIT 15 = IF SET, PROVIDES A COMBINED FUNCTION_^1*_9OF BITS 13 AND 14._^1*_]_^1*_*NOTE.. ALL BITS MUST BE SET TO THE DESIRED STATE FOR EACH_^1*_1FUNCTION€€ COMMAND,_^1*_11 = ENABLE FUNCTION AND 0 = DISABLE FUNCTION_^1*_]_^1_%EJT_]_^1*_*S T A T U S R E A D O P E R A T I O N_^1*_]_^1*_]_^1*_*BITS 8 - 15 OF THE A -REGISTER WILL CONTAIN THE SIO CARD_^1*_*STATUS ON A READ STATUS OPERAION. A DESCRIPTION OF THE A-_^1*_*REGISTER STATUS READ IS AS FOLLOWS._^1*_]_^1*_]_^1*_]_^1*_9BITS 0 - 7 = NOT USED_^1*_]_^1*_]_^1*_9BIT 8 = IF SET, INDICA€€TES READY STATUS OF_^1*_9EXTERNAL DEVICE OR MODEM._^1*_]_^1*_]_^1*_9BIT 9 = IF SET, INDICATES THAT A PRESELECTED_^1*_9ASCII CHARACTER CODE HAS BEEN DETECTED._^1*_]_^1*_]_^1*_9BIT 10 = IF SET, INDICATES THAT A SIGNAL HAS_^1*_9BEEN RECEIVED FROM A TERMINAL DEVICE OR MODEM_^1*_9VERIFYING IT IS RECEIVING SUITABLE DATA._^1*_]_^1*_]_^1*_9BIT 11 = IF SET, INDICATES ABSENCE OF STOP_^1*_9M€€ITTER WILL ACCEPT THE NEXT DATA WORD TO BE_^1*_9TRANSMITTED._^1*_]_^1*_]_^1*_9BIT 12 = IF SET, INDICATES A PARITY ERROR_^1*_9CONDITION OCCURRED DURING A READ DATA OPER._^1*_]_^1*_]_^1*_9BIT 13 = IF SET, INDICATES ABSENCE OF STOP_^1*_9BIT IN RECEIVED CHARACTER._^1*_]_^1*_]_^1*_9BIT 14 = IF SET, INDICATES TWO OR MORE CHAR-_^1*_9ACTERS RECEIVED WITHOUT AN INTERVENING READ_^1*_9OPERATI€€ON._^1*_]_^1*_]_^1*_9BIT 15 = IF SET, INDICATES THAT A SUITABLE_^1*_9CHARACTER HAS BEEN RECEIVED._^1*_]_^1*_]_^1_%EJT_]_^1*_*D A T A R E A D / W R I T E O P E R A T I O N_^1*_]_^1*_*BIT 0 - 7 OF THE A-REGISTER CONTAIN THE RECEIVED DATA(READ)_^1*_*OR DATA TO BE TRANSMITTED(WRITE)._^1_%EJT_]_^1*_]_^1*_$*****************************************************************_^1*_$*_*INITIA€€TOR ENTRY_D*_^1*_$*****************************************************************_^1*_]_^1I1595 STQ- I_,STORE PHYTAB_^1_%STQ* BASE_)SAVE BASE ADR_^1I0000 LDA- TYPE,I_'CHECK FOR TIMESHARE_^1_%SAP I0010_(NOT T/S CONTINUE_^1_%ALS 1_,CHECK FOR UNSOL READ_^1_%SAM I0020_(YES UNSOL READ_^1I0010 LDA- EREQST,I_$CHECK FOR OPERATION IN PROGRESS BIT SET_^1_%SAP I0040_(NO - GO TO FNR_^€€1I0020 LDA- NEXT,I_'PICKUP NEXT PHYTAB ADR_^1_%STA- I_,SAVE NEW PHYTAB ADR_^1_%SUB* BASE_)CHECK IF BACK AT BASE ADR_^1_%SAZ I0030_(YES THEY ARE THE SAME - FINISHED_^1_%JMP* I0000_(CHECK NEW PHYTAB_^1I0030 JMP- (ADISP)_%EXIT FROM DRIVER_^1*_]_^1I0040 RTJ- (AFNR)_'ANY REQUESTS_^1_%JMP* I0050_(NO_^1_%LDQ- EWES,I_'PICKUP HARDWARE ADR_^1_%INP REJECT-*_$INPUT STATUS_^1_%STA- ESTAT2,€€I_$SAVE STATUS WORD_^1_%ALS 1_,CHECK FOR ERROR_^1_%AND- NZERO+13_$LOST CHAR, LINE BRK, PARITY_^1_%SAZ I0070_(GO TO CHECK TYPE OF REQUEST_^1_%ENA ALARM_(ALARM ERROR = 2_^1_%JMP* ERROR_^1*_]_^1I0050 LDA- TYPE,I_'NO REQUEST FROM FNR_^1_%SAP* I0060_(NOT T/S - CHECK NEXT PHYTAB_^1_%RTJ* TSSET_(SETUP ECCOR AND ENABLE INTERRUPTS_^1I0060 JMP* I0020_^1*_]_^1I0070 LDQ- EPTR,I_'CHECK TY€€PE OF REQUEST_^1_%LDA- (ZERO),Q_$GET REQUEST WORD_^1_%ALS 7_^1_%AND- LPMSK+5_%GET REQUEST CODE AND CHECK FOR MOTION (T14)_^1_%INA -14_^1_%SAN I0080_(NOT MOTION_^1_%ENA 0_^1_%STA- ECCOR,I_%MOTION REQUEST - ZERO BUFFER LOCATION_^1_%STA- ELSTWD,I_$ZERO LENGTH_^1_%JMP MOTION_^1*_]_^1I0080 LDA- ECCOR,I_%SAVE BUFFER POINTER LOCATION_^1_%STA- COREIN,I_^1_%ENA 1_,1 EQUALS WRITE 0 = €€READ_^1_%AND- ESTAT1,I_$CHECK TYPE OF I/O REQUEST_^1_%SAZ I0090_(READ FUNCTION_^1_%JMP WRITE_^1*_]_^1I0090 ENA $07_*SEND BELL_^1_%LDQ- EWES,I_'HARDWARE ADR_^1_%ADQ- ZROBIT+7_$MASK ,FF7F FOR CHAR OUTPUT_^1_%OUT REJECT-*_^1_%LDA- TYPE,I_'CHECK FOR T/S_^1_%SAP I0100_(NOT T/S_^1_%LDA- DIAGLU,I_$CHECK FOR DIAG LU_^1_%SUB- ELU,I_^1_%SAZ I0100_(YES - CONTINUE AS A REGUALR READ_^1_%€€LDA- TIMVAL,I_$SET DIAGNOSTIC CLOCK_^1_%AND- LPMSK+8_^1_%STA- EDCLK,I_^1_%JMP NTSDON_'GO COMPLETE REQUEST_^1*_]_^1I0100 LDA- TIMVAL,I_$SET DIAGNOSTIC CLOCK_^1_%AND- LPMSK+8_^1_%STA- EDCLK,I_%SET CLOCK AT 60 SECONDS_^1I0110 LDA =N$1500_^1_%LDQ- EWES,I_'HARDWARE/EQUIP CODE_^1_%OUT REJECT-*_%ENABLE INTERRUPTS_^1_%JMP* C0020_(GET NEXT PHYTAB_^1*_]_^1TSSET NOP 0_^1_%LDA =XINBUF,I€€_#PICKUP ADR OF INBUF_^1_%STA- COREIN,I_$STORE IN SAVE ADR BUFFER_^1_%STA- ECCOR,I_%SAVE IN ECCOR_^1_%ADD- BUFFNO,I_$NO OF ALLOWABLE INPUTS_^1_%STA- ELSTWD,I_$SAVE IN LWA+1_^1_%LDA- TYPE,I_'SET BIT $8000 INDICATING T/S UNSOL NOT RUNNING_^1_%AND- ZROBIT+14_#MASK WITH $BFFF_^1_%STA- TYPE,I_^1_%LDA =N$1500_%READ MODE FUNCTION COMMAND_^1_%LDQ- EWES,I_'HARDWARE ADR_^1_%OUT LOGREJ-*_$O€€UTPUT ENABLE EOT, DATA ERROR, DATA READY_^1_%ENA 0_,ZERO LOGICAL UNIT_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%STA- ELU,I_(ZERO LU_^1_%EIN 0_-ENABLE INTERRUPTS_^1_%JMP* (TSSET)_%EXIT_^1LOGREJ ENQ INTREJ_'INTERNAL REJECT_^1_%JMP* I0120_^1_%ENQ EXTREJ_'EXTERNAL REJECT_^1I0120 LDA- ACTLU,I_%FORM LOGGER CODE_^1_%ALS 6_^1_%EAQ Q_^1_%RTJ+ LOG_*LOG ERROR_^1_%JMP- (ADISP)_^1*_]_^1_%BZS B€€ASE(1)_^1_%EJT_]_^1*_$*****************************************************************_^1*_$*_*TIMEOUT ERROR ENTRY_@*_^1*_$*****************************************************************_^1E1595 STQ- I_^1_%STQ* BASE_)SAVE BASE ADR_^1_%ENA TIMERR_'TIMEOUT ERROR = 0_^1*_]_^1ERROR LDQ- ELU,I_^1_%QLS 6_,FORM ALTERNATE DEVICE ERROR CODE_^1_%EAQ Q_^1_%STQ- ERRCOD,I_$SAVE ERROR CO€€DE_^1_%RTJ+ LOG_*LOG ERROR ROUTINE_^1_%CLR A_^1_%LDQ- EWES,I_'LOAD HARDWARE ADR_^1_%INP 2_^1_%STA- ESTAT2,I_$SAVE INPUT STATUS IF NO REJECT_^1_%NOP 0_^1_%LDA- ONEBIT+15_#$8000 TO CLEAR SIO CARD_^1_%OUT 1_,CLEAR SIO CARD_^1_%NOP 0_^1ERR_"LDA- ONEBIT+14_#SET HARDWARE FAILURE IN PHYTAB $4000_^1_%EOR- EREQST,I_^1_%STA- EREQST,I_^1_%RTJ+ MAKEQ_(SET V BITS_^1_%LDA- EREQST,I_$CHECK I€€F OPERATION IN PROGRESS BIT SET_^1_%SAM E0010_(YES - THIS IS A MONITOR CALL_^1_%LDA- TYPE,I_'NO THIS IS AN UNSOLICITED READ_^1_%SAP E0000_(NOT T/S PROCESS NEXT FNR_^1_%RTJ* SCHUSR_^1E0000 JMP* I0040_(RETURN TO FNR_^1*_]_^1E0010 LDA- DIAGLU,I_$CHECK FOR DIAG LU_^1_%SUB- ELU,I_^1_%SAN E0015_^1_%RTJ- (ACMPRQ)_^1_%JMP* E0000_^1E0015 LDQ- ERRCOD,I_$PICKUP ERROR CODE FOR ALTDEV CAL€€L_^1_%RTJ- (AMONI)_%SCHEDULE ALTERNATE DEVICE HANDLER_^1_%NUM $520A_^1_%ADC ALTDEV_^1_%JMP* C0020_(RETURN TO CHECK FOR NEXT PHYTAB_^1*_]_^1REJECT JMP* REJ2_^1REJ1_!ENA EXTREJ_'EXTERNAL REJECT = 6_^1_%JMP* ERROR_^1REJ2_!ENA INTREJ_'INTERNAL REJECT = 5_^1_%JMP* ERROR_^1*_]_^1*_]_^1*_]_^1SCHUSR NOP 0_,ROUTINE TO SCHEDULE USER PROGRAM_^1_%LDA- TYPE,I_'SET BIT $8000 INDICATING T/€€S UNSOL NOT RUNNING_^1_%AND- ZROBIT+14_#MASK WITH $BFFF_^1_%STA- TYPE,I_^1_%LDA- USER,I_'INPUT TIMEOUT - SCHED USER_^1_%SAN 1_^1_%JMP* S0030_(NO USER DEFINED GO GET FNR_^1_%STA* S0020_'SAVE USER ADR IN SCH CALL_^1_%LDA- TYPE,I_'PICKUP PRI LEVEL_^1_%AND- LPMSK+4_%MASK OFF PRI WITH $F_^1_%EOR =N$5200_%FORM SCHEDULAR CALL_^1_%STA* S0010_(SAVE IN MONITOR CALL_^1_%LDA- ECCOR,I_^1_%SU€€B- COREIN,I_^1_%INA 1_^1_%LDQ- COREIN,I_^1_%ADQ- BUFFNO,I_^1_%STA- (ZERO),Q_'STORE LENGTH OF TRANSFER_^1_%LDA- EREQST,I_$CHECK IF ERROR OCCURRED_^1_%AND- ONEBIT+14_^1_%ALS 1_,SET Q REGISTER WITH ERROR_^1_%ADD- ELU,I_(INDICATOR AND LU NUMBER_^1_%TRA Q_^1_%RTJ- (AMONI)_^1S0010 ADC 0_,REQUEST CODE AND PRI_^1S0020 ADC 0_,USER ADR_^1S0030 JMP* (SCHUSR)_$EXIT_^1_%EJT_]_^1*_$*****€€************************************************************_^1*_$*_*CONTINUATOR ENTRY_B*_^1*_$*****************************************************************_^1*_]_^1_%BZS SLOT(1)_^1*_]_^1C1595 STQ- I_,SAVE PHYTAB ADR_^1_%STQ* BASE_)SAVE BASE ADR_^1C0010 LDA- EWES,I_'PICKUP EQUIPMENT ADR_^1_%AND- LPMSK+4_%SAVE SLOT ADDRESS_^1_%STA* SLOT_^1_%LDA- EWES,I_'GET EQUIPMENT ADR_^1_%€€AND- NZERO+4_%MASKOUT SLOT ADR_^1_%TRA Q_^1_%INP C0020-*_%INPUT 1750-X MODULE STATUS_^1_%LDQ* SLOT_^1_%AND- ONEBIT,Q_$CHECK IF INTERRUPT SET_^1_%SAN C0040_(NO_"FOUND INTERRUPT_^1C0020 NOP 0_^1_%LDA- NEXT,I_'PICKUP NEXT PHYTAB ADR_^1_%STA- I_^1_%SUB* BASE_)CHECK IF BACK AT BASE ADR_^1_%SAN C0030_(NOT DONE CHECKING_^1_%JMP- (ADISP)_%EXIT_^1C0030 JMP* C0010_^1*_]_^1C0040 LDQ- €€EWES,I_'EQUIP ADR_^1_%INP REJECT-*_$INPUT STATUS_^1_%STA- ESTAT2,I_$SAVE STATUS_^1_%ENA $40_*IS COMPLETE FLAG SET_^1_%AND- ESTAT1,I_^1_%SAN 1_^1_%JMP* CKTS_)CHECK TIMESHARE_^1_%ENA $40_^1_%EOR- ESTAT1,I_$RESET COMPLETION FLAG_^1_%STA- ESTAT1,I_^1C040X LDA- TYPE,I_'TIMESHARE_^1_%SAP NTSDON_^1_%ALS 1_,CHECK FOR UNSOL BIT SET_^1_%SAP NTSDON_^1_%RTJ* SCHUSR_'SCHEDULER USER PROG€€RAM_^1_%JMP* C0041+1_^1NTSDON RTJ+ MAKEQ_^1C0041 RTJ- (ACMPRQ)_$COMPLETE REQUEST_^1_%JMP I0040_(CHECK NEXT FNR_^1*_]_^1*_]_^1CKTS_!LDA- ESTAT2,I_%CHECK TO SEE IF A VALID CHAR IS READY_^1_%SAM 1_^1_%JMP* C0042_(NO_^1_%LDQ- EWES,I_^1_%ADQ- ZROBIT+7_^1_%INP REJECT-*_$INPUT CHAR_^1_%AND- LPMSK+7_%STRIP OFF UNUSED BITS_^1_%INA -$60_)CHECK FOR LOWER CASE_^1_%SAP 1_^1_%INA $20_*NO,€€ RESTORE CHAR_^1_%INA $40_*CONVERT TO UPPER_^1_%STA- TEMP,I_'STORE IT IN TEMP_^1_%STA* CHARSV+1_%ALSO SAVE IT IN TEMP LOC_^1_%LDA- TYPE,I_'IS IT A TIMESHARE LU_^1_%JMP* C0042_(NO_^1_%RTJ TERMCK_'CHECK TO SEE IF A TERMINATION CHAR_^1_%JMP* C0042_(NOT A TERM CHAR_^1_%ENA $40_^1_%EOR- ESTAT1,I_$RESET COMPLETION FLAG_^1_%STA- ESTAT1,I_^1_%LDA- EREQST,I_$CHECK FOR OPERATION IN PROGRE€€SS_^1_%SAP NOREQQ_'NO_^1_%RTJ+ MAKEQ_^1_%RTJ- (ACMPRQ)_^1NOREQQ RTJ TSSET_(GO SET UP FOR TIMESHARE_^1CHARSV LDA =N0_^1_%STA- TEMP,I_^1_%JMP* C0105_^1C0042 LDA- ESTAT2,I_(CHECK STATUS FOR ERRORS_^1_%AND =N$7000_%CHECK FOR LOST DATA, LINE BRK, OR PARITY_^1_%SAN 1_^1_%JMP* C0080_(NO ERROR_^1_%ALS 1_,CHECK FOR LOST DATA_^1_%SAP C0070_(NOT LOST DATA_^1_%ENQ LOST_)LOST DATA IS E€€RROR 1_^1_%JMP* C0078_^1C0070 ALS 1_,CK FOR LINE BRK_^1_%SAP C0075_(NOT LINE BRK MUST BE PARITY_^1_%ENQ LINEBK_'LINE BRK ERROR IS 33_^1_%JMP* C0078_^1C0075 ENQ PARITY_'PARITY IS ERROR 3_^1C0078 LDA- ELU,I_(LU_^1_%SAN C0079_^1_%LDA- ACTLU,I_%GET LOGICAL UNIT IF TIMESHARE_^1C0079 STQ- ERRCOD,I_$STORE ERROR CODE_^1_%ALS 6_,SET UP CODE FOR LOGGER_^1_%EAQ Q_^1_%RTJ+ LOG_*LOG€€ ERROR_^1_%ENA $7F_*OUTPUT BLOB_^1_%LDQ- EWES,I_'HARDWARE ADR_^1_%ADQ- ZROBIT+7_^1_%OUT REJECC-*_^1_%LDQ- EWES,I_^1_%LDA- ONEBIT+13_#CLEAR INTERRUPT_^1_%OUT REJECC-*_^1_%LDA- ELU,I_(CHECK FOR DIAGNOSTIC LU_^1_%SUB- DIAGLU,I_^1_%SAN JPI100_^1_%JMP ERR_*GO TO COMPLETE REQUEST_^1JPI100 JMP I0100_^1*_]_^1REJECC JMP* REC_*INTERNAL REJECT_^1_%JMP REJ1_)EXTERNAL REJECT_^1REC_"JMP €€REJ2_^1*_]_^1*_]_^1C0080 LDA- EREQST,I_$CHECK FOR OPERATION IN PROGRESS_^1_%SAM C0090_(YES OPERATION IN PROGRESS_^1_%LDA- TYPE,I_'CHECK FOR T/S_^1_%SAP 1_^1_%JMP* C0105_(YES T/S_^1_%LDA- ONEBIT+15_#CLEAR SERIAL I/O CARD_^1_%LDQ- EWES,I_'HARDWARD ADR_^1_%OUT 1_^1_%NOP 0_^1_%JMP* C0020_(READ NEXT PHYTAB_^1C0090 LDQ- EPTR,I_'PICKUP REQUEST WORD ADR_^1_%LDA- (ZERO),Q_$PICKUP RE€€QUEST WORD_^1_%ALS 7_^1_%AND- LPMSK+5_%GET REQUEST CODE AND CHECK FOR MOTION (T14)_^1_%INA -14_^1_%SAN C0100_^1_%JMP MOT2_)MOTION REQUEST_^1*_]_^1*_]_^1C0100 ENA 1_^1_%AND- ESTAT1,I_$CHECK FOR R/W REQ_^1_%SAN 1_,WRITE REQUEST_^1_%JMP* C0110_(READ REQ_^1_%JMP WRITE_^1*_]_^1C0105 IIN 0_,INHIBIT INTERRUPTS_^1_%LDA- ELU,I_(CHECK FOR LU = 0_^1_%SAZ 1_^1_%JMP* C0110_(REGULAR €€MONITOR CALL GO ON_^1_%LDA- ACTLU,I_%PICKUP WORD CONTAINING UNSOL READ LU_^1_%STA- ELU,I_(SET UP ELU AND ESTAT2 TO LOOK LIKE MONITOR CAL_^1_%ENA $A_+SET FORMATTED READ AND ASCII MODE BITS_^1_%STA- ESTAT1,I_$NOW CONTINUE_^1_%LDA- TYPE,I_^1_%AND- LPMSK+14_$MASK WITH $3FFF_^1_%EOR- NZERO+14_$SET $C000_^1_%STA- TYPE,I_'SET INDICATOR THAT UNSOL READ IS IN PROGRESS_^1_%LDQ- ECCOR,I_%FI€€LL BUFFER WITH $FFFF_^1TS_#SET A_^1_%STA- (ZERO),Q_$FILL WITH $FFFF_^1_%INQ 1_,INCREMENT POINTER IN BUFFER_^1_%LDA- ELSTWD,I_%CHECK FOR LAST WORD TO BE FILLED_^1_%EAQ A_^1_%SAZ 1_,DONE_^1_%JMP* TS_+DO ANOTHER WORD_^1*_]_^1C0110 EIN 0_^1_%LDA- ESTAT2,I_$CHECK STATUS_^1_%SAM C0130_(NOT GHOST INTERRUPT_!GO ON_^1_%JMP I0110_(RETURN FOR NEXT CHAR_^1C0130 LDA- ECHO,I_'CHECK IS E€€CHO REQUIRED_^1_%SAP C0160_(NO ECHO REQUIRED_^1_%LDA- ONEBIT+8_^1_%LDQ- EWES,I_^1_%OUT REJECX-*_%ENABLE TRANSMITT_^1_%ADQ- ZROBIT+7_^1_%LDA- TEMP,I_'CHARACTER_^1_%OUT REJECX-*_$ECHO CHARACTER_^1*_]_^1C0160 LDQ- ESTAT2,I_%PICKUP STATUS_^1_%QLS 6_,CHECK FOR EOT_^1_%SQP TERCK_(NOT SET_^1_%JMP* C0285_(EOT IS SET_^1TERCK RTJ* TERMCK_'GO CHECK FOR TERMINATION CHAR_^1_%NOP 0_,NOT €€A TRM CHAR_^1*_]_^1C0210 LDQ- TEMP,I_'PICKUP CHAR_^1_%ENA 2_^1_%AND- ESTAT1,I_$CHECK FOR FORMATTED REQUEST_^1_%SAZ C0220_(UNFORMATTED_^1_%TRQ A_,CHECK FOR LINE FEED_^1_%INA -$A_^1_%SAZ C0215_(YES - IGNOR IT_^1_%INA -3_+CHECK FOR CARRIAGE RETURN_^1_%SAN 1_^1_%JMP* C0280_(YES - PROCESS IT CARRIAGE RETURN_^1_%INA -$52_)CHECK FOR CANCEL CHAR_^1_%SAN 1_^1_%JMP* C0330_(YES - PR€€OCESS CANCEL - RUBOUT_^1_%ENA $10_^1_%AND- ESTAT1,I_$CHECK FOR PASS FLAG_^1_%SAZ C0220_(STORE CHAR_^1C0215 JMP* C0250_(GO READ FUNCTION_^1*_]_^1C0220 ENA 4_^1_%AND- ESTAT1,I_$CHECK FOR UPPER CHAR_^1_%SAN C0230_(NO LOWER CHARACTER_^1_%ENA -0_+UPPER CHAR INIDCATOR SET_^1_%LLS 24_+SET LOWER CHAR TO $FF_^1_%JMP* C0240_(STORE CHAR_^1*_]_^1C0230 TRQ A_,LOWER CHAR_^1_%EOR- NZERO€€+8_%$FF MASK_^1_%LDQ- ECCOR,I_$ADR OF BUFFER_^1_%AND- (ZERO),Q_#COMBINE CHARACTERS_^1C0240 LDQ- ECCOR,I_$ADR OF BUFFER_^1_%STA- (ZERO),Q_$STORE CHARACTER(S)_^1_%TRQ A_^1_%SUB- ELSTWD,I_$CHECK FOR LAST WORD STORED_^1_%SAZ C0260_(YES BUFFER FULL_^1_%ENA 4_^1_%EOR- ESTAT1,I_$REVERSE UPPER/LOWER SWITCH_^1_%STA- ESTAT1,I_^1_%ALS 13_^1_%SAM C0250_(LOWER CHAR_^1_%RAO- ECCOR,I_%IT€€ IS UPPER CHAR NOW - INC ECCOR POINTER_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$CHECK FOR END OF BUFFER NOW_^1_%SAZ C0260_(YES - END OF BUFFER_^1C0250 JMP I0100_^1*_]_^1C0260 ENA 2_^1_%AND- ESTAT1,I_$CHECK FOR FORMATTED REQ_^1_%SAZ C0285_^1C0270 ENA $10_*SET PASS FLAG_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* C0250_(SETUP READ NEXT FUNCTION_^1*_]_^1C0280 ENA $20_+CHECK FOR C€€ANCEL SWITCH_^1_%AND- ESTAT1,I_^1_%SAN C0290_^1C0285 JMP C040X_(COMPLETE_^1C0290 ENA -$34_)CLEAR LOWER BIT, CANCEL AND PASS FLAGS_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%LDQ- COREIN,I_$RESTORE BUFFER ADDRESS_^1_%STQ- ECCOR,I_^1C0320 SET A_^1_%STA- (ZERO),Q_$BACKROUND BUFFER WITH $FFFF_^1_%INQ 1_^1_%LDA- ELSTWD,I_^1_%EAQ A_^1_%SAZ 1_^1_%JMP* C0320_^1_%JMP* C0250_^1*_]_^1C0€€330 ENA -$30_)CLEAR CANCEL AND PASS FLAG_^1_%AND- ESTAT1,I_^1_%INA $30_*SET CANCEL AND PASS FLAG_^1_%STA- ESTAT1,I_^1_%JMP* C0250_^1*_]_^1*_]_^1*_'TERMINATION CHARACTER CHECK_^1*_]_^1*_'IF NOT TERM CHAR RETURN+0_!IF TERM CHAR RETURN+1_^1*_]_^1TERMCK NOP 0_^1_%LDQ- TERM,I_'GET TERM CHARS_^1TERM1 SQZ TOUT_)NO MORE TERM CHARS_^1_%LRS 8_^1_%ARS 8_^1_%SUB- TEMP,I_'SUB INPUT CHAR€€_^1_%SAN NEXTER_^1_%ENA $40_^1_%EOR- ESTAT1,I_%SET COMPLETION FLAG_^1_%STA- ESTAT1,I_^1_%RAO* TERMCK_^1TOUT_!JMP* (TERMCK)_^1NEXTER JMP* TERM1_(CHECK OTHER TERM CHARACTER_^1*_]_^1REJECX JMP* REJ_*INTERNAL REJECT_^1_%JMP REJ1_)EXTERNAL REJECT_^1REJ_"JMP REJ2_^1*_]_^1WRITE LDA- ESTAT2,I_$CHECK STATUS FOR READY TO OUTPUT NEXT CHAR_^1_%AND- ONEBIT+11_#CHAR REQUEST BIT_^1_%SAN W00€€00_(READY - CONTINUE_^1_%JMP* W0130_(GO SET PROPER INTERRUPTS AND EXITS_^1W0000 ENA 2_^1_%AND- ESTAT1,I_$CHECK FOR FORMATTED REQ_^1_%TRA Q_-Q = 0 IF UNFORMATTED_^1_%ENA $10_^1_%AND- ESTAT1,I_$CHECK FOR FIRST CHAR_^1_%SAN W0020_(NOT FIRST CHAR_^1_%ENA $10_*YES, FIRST CHAR - CLEAR FIRST CHAR FLAG_^1_%SQN 1_^1_%ENA $30_*CLEAR LINE FEED FLAG ALSO IF UNFORMATTED_^1_%EOR- ESTAT1€€,I_^1_%STA- ESTAT1,I_^1_%SQZ W0030_(CONTINUE IF UNFORMATTED_^1_%ENQ $D_+SEND CARRIAGE RETURN_^1_%JMP* W0110_(SEND CHARACTER ROUTINE_^1*_]_^1W0020 SQZ W0030_(NOT FIRST CHARACTER - CONT IF FORMATTED_^1_%ENA $20_^1_%AND- ESTAT1,I_$CHECK FOR LINE FEED FLAG_^1_%SAN W0030_(NOT LINE FEED_^1_%ENA $20_^1_%EOR- ESTAT1,I_$CLEAR LINE FEED FLAG_^1_%STA- ESTAT1,I_$CLEAR_^1_%ENQ $A_+$A = €€LINE FEED_^1_%JMP* W0110_(SEND CHARACTER ROUTINE_^1*_]_^1W0030 ENA $40_^1_%AND- ESTAT1,I_$CHECK FOR COMPLETION FLAG_^1_%SAZ W0040_^1_%JMP* W0080_(FINISHED - DO COMP REQ AND CLEAN UP_^1W0040 LDQ- ECCOR,I_%GET CURRENT CORE ADDRESS_^1_%LDQ- (ZERO),Q_$GET DATA WORD_^1_%ENA 4_^1_%AND- ESTAT1,I_$CHECK FOR UPPER CHAR_^1_%SAN W0050_(NO IT IS LOWER CHAR_^1_%QRS 8_,UPPER CHAR_^1W0050 €€ LDA- LPMSK+8_%$FF MASK/ PICKUP PROPER CHAR_^1_%LAQ A,Q_^1_%INA -$D_*CHECK FOR CARRIAGE RETURN_^1_%SAN W0060_(NOT CARRIAGE RETURN_^1_%ENA 2_,CR - CHECK FOR FORMATTED REQ_^1_%AND- ESTAT1,I_^1_%SAZ W0060_(UNFORMATTED_^1_%LDA =N$60_(YES, SET LINE FEED FLAG AND COMP FLAG_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* W0110_(GO OUTPUT_^1W0060 TRQ A_^1_%INA -3_^1_%SAZ W0080_(IT I€€S A ETX_^1_%TRQ A_^1_%EOR- LPMSK+8_^1_%SAN W0090_(IF CHARACTER = $FF, TERMINATE_^1W0080 JMP C0041_)DONE_^1W0090 LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$CHECK FOR ZERO WORDS REQUESTED_^1_%SAZ W0100_(YES - SET COMPLETE INDICATOR_^1_%ENA 4_^1_%EOR- ESTAT1,I_$REVERSE UPPER/LOWER SWITCH_^1_%STA- ESTAT1,I_^1_%ALS 13_+CHECK FOR UPPER CHAR_^1_%SAM W0110_(NOT UPPER CHAR_^1_%RAO- ECCOR,I_%Y€€ES - CHECK FOR LAST WORD_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_^1_%SAN W0110_(NOT COMPLETE_^1W0100 ENA $40_+YES, SET COMPLETE FLAG_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_^1*_]_^1W0110 LDA- EWES,I_^1_%AND- ZROBIT+7_$ELIMINATE STATUS/FUNCTION BIT $FF7F_^1_%LLS 16_^1_%OUT REJECX-*_$OUTPUT CHARACTER_^1_%LDA- TIMVAL,I_$SET DIAGNOSTIC CLOCK_^1_%ARS 8_^1_%AND- LPMSK+8_^1_%STA- EDCLK,I_%SET€€ DIAG CLOCK_^1W0130 LDQ- EWES,I_'EQUIP CODE_^1_%LDA =N$700_'REQUEST IN/OUT INT,XMIT_^1_%OUT REJECX-*_$ENABLE INTERRUPTS_^1_%JMP C0020_(NEXT PHYTAB_^1_%EJT_]_^1*_]_^1*_$*****************************************************************_^1*_$*_*MOTION REQUEST PROCESSING (REQ CODE = 14)_)*_^1*_$*****************************************************************_^1*_]_^1MOTION LDA- 4€€,Q_*GET MOTION DEFINITION WORD FROM PARAM LIST_^1_%SAM 1_,REQUEST CAN BE REPEATED_^1_%AND- NZERO+4_%$FFF0 MASK OUT DENSITY BITS IF NOT REPEAT REQ_^1_%STA- TEMP,I_^1_%SAP MOT2_^1_%AND- LPMSK+12_$$FFF SAVE REPEAT COUNT IF REPEAT REQEST_^1_%STA- ERRCOD,I_^1MOT2_!ENA 4_^1_%AND- ESTAT1,I_$CHECK FOR UPPER MOTION CHARACTER_^1_%SAZ MOT2A_^1_%JMP* MOT5_)NO, PROCESS LOWER CHARACTER_^1MOT€€2A LDA- TEMP,I_'CHECK WHICH TYPE REQUEST_^1_%SAP MOT3_)REGULAR_^1_%LDA- ERRCOD,I_$REPEAT REQUEST_^1_%SAZ MOT4_)IF COUNT IS ZERO, REPEATS COMPLETE_^1_%INA -1_^1_%STA- ERRCOD,I_^1_%LDA- TEMP,I_'GET MOTION CODE_^1_%CLR Q_^1_%ALS 1_^1_%LLS 3_,STRIP OFF MOTION CODE_^1_%STQ- MOTWD,I_^1_%SQZ MOT4_)MOTION CODE ZERO - ILLEGAL NO ACTION_^1_%JMP* MOT5_)PROCESS MOTION CODE_^1MOT3_!CLR€€ Q_^1_%LLS 4_,GET NEXT MOTION CODE_^1_%STQ- MOTWD,I_^1_%STA- TEMP,I_^1_%SQN MOT5_^1MOT4_!JMP* W0080_(DONE_^1*_]_^1*_*PROCESS MOTION CODE_^1*_]_^1MOT5_!LDQ- MOTWD,I_^1_%INQ -1_^1_%ENA 4_^1_%AND- ESTAT1,I_^1_%SAZ MOT5A_^1_%LDA- MTN,B_(PROCESS LOWER CHARACTER_^1_%AND- LPMSK+8_^1_%JMP* MOT5B_^1MOT5A LDA- MTN,B_(PROCESS UPPER CHARACTER_^1_%ARS 8_^1_%AND- LPMSK+8_^1MOT5B TRA Q_€Ά^1_%ENA 4_^1_%EOR- ESTAT1,I_$REVERSE UPPER/LOWER SWITCH_^1_%STA- ESTAT1,I_^1_%SQN MOT6_^1_%JMP* MOT2_)IF CONTROL IS ZERO, IGNOR CONTROL_^1MOT6_!JMP* W0110_(SEND CHAR_^1_%END_]_^__ΆPBUFEXC CSY/ C68 P€1_%NAM BUFEXC_'DECK-ID C68 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT PUTD_)OUTPUT DATA_^1_%ENT GETD_)INPUT DATA_^1_%EXT€€ IOMBUF_'BUFFER LOCATION TABLE_^1_%EXT IOMFLG_^1_%EXT ATOSAN_^1_%EXT SCANON_^1_%SPC 4_^1*_$VOLATILE REFERENCES_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU IREG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#03 SUBROUTINE RETURN ADDRESS_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD€€ ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHEDULE REQUEST AND TEMP STORAGE_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS AND TEMP STORAGE_^1_%EQU BITX(13)_$13 BIT INDEX_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1_%EQU NBRS(1)_%NUMBER OF POINTS - BUSY_^1_%EQU TYPLU(2)_$DEVICE T€€YPE,LU,MODE_^1_%EQU WES(3)_'W-E-S FOR FIRST STATION_^1_%EQU XXXX(4)_%W-E-S FOR ADC OR FLAG TABLE ADDRESS_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU AMONI($F4)_^1_%EQU ZERO($22)_^1_%EQU MASK($33)_^1_%EQU ONEBIT($23)_^1_%EQU H0010($27)_^1_%EQU H000F($6)_^1_%EQU SCANPL(4)_#SCAN PRIORITY LEVEL_^1_%SPC 2_^1_%EJT_]_^1****************************************************_^1*_$OU€€TPUT DATA ENTRY_:*_^1****************************************************_^1PUTD_!NUM 0_^1_%IIN 0_^1_%LDA* PUTD_^1_%STA- SUBRET,I_$SAVE RETURN_^1_%EIN 0_^1_%LDQ- IREC,I_'GET DEVICE TYPE_^1_%LDA- TYPLU,Q_^1_%ARS 8_^1_%AND- H000F_^1_%STA- COMP,I_'SAVE DEVICE TYPE_^1_%TRA Q_,=DEVICE TYPE_^1_%LDQ IOMBUF,Q_$BUFFER LOCATION_^1_%ADQ- ITEMP,I_^1_%LDA- AREG,I_^1_%STA- (ZERO),Q_$STORE €€OUTPUT VALUE_^1_%LDA- ITEMP,I_%SET BIT IN FLAG TABLE_^1_%ENQ 0_^1_%DVI- H0010_^1_%STQ- BITX,I_'BIT NBR_^1_%LDQ- COMP,I_'DEVICE TYPE_^1_%LDQ IOMFLG,Q_^1_%INQ 1_^1_%AAQ Q_,ADD WORD NUMBER_^1_%STQ- REQST,I_^1_%LDA- (ZERO),Q_^1_%LDQ- BITX,I_^1_%AND- MASK,Q_'MASK OUT BIT_^1_%ADD- ONEBIT,Q_$ADD NEW BIT_^1_%LDQ- REQST,I_^1_%STA- (ZERO),Q_^1_%JMP* BX8_^1_%SPC 4_^1*********************€€*******************************_^1*_$INPUT DATA ENTRY_;*_^1****************************************************_^1GETD_!NUM 0_^1_%IIN 0_^1_%LDA* GETD_^1_%STA- SUBRET,I_^1_%EIN 0_^1_%LDQ- IREC,I_'CHECK ERROR FLAG_^1_%LDA- TYPLU,Q_^1_%SAP BX6_*NO ERROR_^1_%LDA =N$8001_^1_%STA- ETEMP,I_^1_%LDA- TYPLU,Q_^1BX6_"ARS 8_,GET DEVICE TYPE_^1_%AND- H000F_^1_%TRA Q_^1_%LDQ IOMBUF,Q_$BU€€FFER LOCATION_^1_%ADQ- ITEMP,I_^1_%LDA- (ZERO),Q_$GET VALUE_^1_%STA- AREG,I_^1BX8_"LDA SCANON_'IS SCAN ON_^1_%SAZ BX18_)NO_^1BX16_!LDQ- SUBRET,I_$YES,RETURN_^1_%JMP- (ZERO),Q_^1BX18_!ENA SCANPL_'START SCAN_^1_%ADD =N$2400_%BUILD SCHED REQUEST IN VOL_^1_%STA- REQST,I_^1_%LDA =XATOSAN_^1_%STA- COMP,I_^1_%LDA- I_^1_%INA REQST_^1_%IIN 0_^1_%STA* BX20+2_^1_%RAO SCANON_^1BX20_!RT€HJ- (AMONI)_^1_%NUM $2000_^1_%NUM 0_^1_%JMP* BX16_)RETURN_^1_%END_]_^__HPATOSAN CSY/ C69 P€1_%NAM ATOSAN_'DECK-ID C69 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1_%SPC 2_^1*_$SCHEDULED BY BUFEXC OR OTHER USER PROGRAM TO PROCESS_^1*_$ALL I/O ON REMOTE IOM BY SCA€€NNING CONTROL TABLES_^1*_$OR OUTPUT FLAG TABLES. ONCE STARTED RUNS ON TIMER LOOP._^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%EXT IOMBUF_'BUFFER LOCATION TABLE_^1_%EXT IOMCNT_'CONTROL RECORDS LOCATION TABLE_^1_%EXT IOMFLG_^1_%EXT FINDCR_^1_%EXT SANBSY_^1_%EXT ATOSAN_^1_%EXT TM1590_^1_%SPC 4_^1*_$VOLATILE REFERENCES (PSEUDO VOLATILE)_^1_%EQU AREG(1)_%01 A-REG_^1_%EQU I€€REG(2)_%02 I-REG_^1_%EQU SUBRET(3)_#03 SUBROUTINE RETURN ADDRESS_^1_%EQU IRETN(4)_$04 DRIVER RETURN ADDRESS_^1_%EQU IREC(5)_%05 CONTROL RECORD ADDRESS_^1_%EQU INDEX(6)_$06 INDEX TO CONTROL RECORD_^1_%EQU IVAL(7)_%07 VALUE WORD ADDRESS_^1_%EQU IERR(8)_%08 ERROR WORD ADDRESS_^1_%EQU ETEMP(9)_$09 ERROR CODE_^1_%EQU ITEMP(10)_#10 INDEX TO DATA BUFFER_^1_%EQU REQST(11)_#11 SCHE€€DULE REQUEST AND TEMP STORAGE_^1_%EQU COMP(12)_$12 COMPLETION ADDRESS AND TEMP STORAGE_^1_%EQU BITX(13)_$13 BIT INDEX_^1_%SPC 4_^1*_$CONTROL RECORD REFERENCES_^1_%EQU NBRS(1)_%NUMBER OF POINTS - BUSY_^1_%EQU TYPLU(2)_$DEVICE TYPE,LU,MODE_^1_%EQU WES(3)_'W-E-S FOR FIRST STATION_^1_%SPC 4_^1*_$LOW CORE REFERENCES_^1_%EQU AMONI($F4)_^1_%EQU ADISP($EA)_^1_%EQU ZERO($22)_^1_%E€€QU MASK($33)_^1_%EQU H0010($27)_^1_%EQU H0004($25)_^1_%EQU H2000($30)_^1_%EQU H00FF($A)_^1_%EQU H8000($32)_^1_%EQU H7FFF($42)_^1_%SPC 2_^1*_$SCAN PARAMETERS_^1_%EQU ENDDEV(8)_#LAST DEVICE TYPE INDEX IN LOCATION TABLES_^1_%SPC 4_^1****************************************************_^1*_*SCAN TO DRIVE REMOTE IOM_.*_^1****************************************************_^1S€€CAN_!LDA =N$1E20_%BUILD TIMER CALL_^1_%ADD- $EF_^1_%STA* SC2+1_^1_%LDA TM1590_'SET SCAN PERIOD_^1_%STA* SC2+3_^1_%RTJ* HERE_^1HERE_!NUM 0_^1SC2_"RTJ- (AMONI)_^1_%NUM 0_^1_%ADC ATOSAN_^1_%NUM 0_^1_%LDA SANBSY_^1_%SAZ SC6_^1SC5_"RELEAS (SCAN-*+1),1,1,0_^1SC6_"RAO SANBSY_'SET BUSY_^1_%ENA ENDDEV+1_^1_%STA* DEVIDX_'INDEX TO DEVICE TYPE_^1SC7_"LDA* DEVIDX_^1_%SAN SC8_^1_%ENA€€ 0_,CLEAR BUSY_^1_%STA SANBSY_^1_%JMP* SC5_^1SC8_"INA -1_+BUMP DEVICE INDEX_^1_%STA* DEVIDX_^1_%TRA Q_^1_%LDA* HERE_^1_%ADD =XPSDVOL-HERE_^1_%STA- I_,I=POINTER TO PSEUDO VOLATILE_^1_%LDA IOMCNT,Q_^1_%SAN SC10_^1_%JMP* SC7_*NO CONTROL RECORDS FOR THIS DEVICE_^1SC10_!STA- IREC,I_'INITIALIZE_^1_%ENA 0_^1_%STA- INDEX,I_%INDEX_^1_%STA- ETEMP,I_%ERROR_^1_%STA- ITEMP,I_%BUFFER POI€€NTER_^1_%STA NBS_*NBR OF POINTS IN MONITOR REQUEST_^1_%LDA IOMBUF,Q_^1_%STA* BUFADD_'SAVE DATA BUFFER ADDRESS_^1_%LDA* TYPE,Q_^1_%INA -1_^1_%STA* SC12+1_^1SC12_!JMP TYPE_^1PSDVOL BZS PSDVOL(14)_"PSEUDO VOLATILE_^1DEVIDX NUM 0_^1TYPE_!ADC (SC7-SC12)_"DEVICE TYPE 00 NEVER USED_^1_%ADC TYONE-SC12_/01 DI_^1_%ADC TYTWO-SC12_/02 DO_^1_%ADC TYONE-SC12_/03 COUNTERS_^1_%ADC T€€YFOR-SC12_/04 RO_^1_%ADC (SC7-SC12)_/05 FUTURE_^1_%ADC TYSIX-SC12_/06 HS AI_^1_%ADC (SC7-SC12)_/07 LS AI_^1_%ADC TYEIG-SC12_/08 AO_^1_%ADC (SC7-SC12)_/09 FUTURE_^1_%ADC (SC7-SC12)_/10 FUTURE_^1_%ADC (SC7-SC12)_/11 FUTURE_^1_%ADC (SC7-SC12)_/12 FUTURE_^1_%ADC (SC7-SC12)_/13 FUTURE_^1_%ADC (SC7-SC12)_/14 FUTURE_^1_%ADC (SC7-SC12)_/15 FUTURE_^1_%SPC 4_^1*******€€*********************************************_^1*_)DIGITAL IN , COUNTERS_2*_^1****************************************************_^1TYONE RTJ FINDCR_^1_%JMP* TY1A2_^1_%LDA NBS_*NO MORE CONTROL RECORDS_^1_%SAZ TY1A1_^1_%RTJ* WRITIO_'COMPLETE OUTSTANDING REQUEST_^1_%RTJ MOVE_^1TY1A1 JMP* SC7_*DONE WITH THIS DEVIE_^1TY1A2 RTJ CHECK_(IS I/O REMOTE_^1_%JMP* TYONE_(NOT REMOTE_^1€€_%LDQ- IREC,I_^1_%STQ CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- WES,Q_(COMPUTE W-E-S_^1_%ADD- INDEX,I_^1_%LDQ NBS_*PUT IN REQUEST BUFFER_^1_%STA DEVADD,Q_^1_%RAO NBS_^1_%LDA NBS_^1_%INA -10_^1_%SAN TY1A4_(NO_^1_%RTJ* WRITIO_^1_%RTJ MOVE_^1TY1A4 RAO- INDEX,I_^1_%JMP* TYONE_^1BUFADD NUM 0_^1_%SPC 4_^1****************************************************_^1*_)DIGITAL OUT_<€€*_^1****************************************************_^1TYTWO RTJ PREP_)SET UP TO SEARCH FLAG TABLE_^1TY2A1 RTJ FLAG_^1_%JMP* SC7_*DONE_^1_%RTJ FINDCR_^1_%JMP* TY2A6_^1_%JMP* TY2A1_^1TY2A6 LDQ- IREC,I_'CALCULATE WES_^1_%STQ CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- TYPLU,Q_%SAVE LU_^1_%STA LUSAVE_^1_%LDA- WES,Q_^1_%ADD- INDEX,I_^1_%LDQ* NBS_^1_%STA DEVADD,Q_$STORE WES€€ IN REQUEST_^1_%LDQ- ITEMP,I_^1_%LDA* (BUFADD),Q_^1_%LDQ* NBS_^1_%STA DEVDAT,Q_$STORE OUTPUT VALUE IN REQUEST_^1_%RAO* NBS_*BUMP N IN REQUEST_^1_%LDA* NBS_^1_%INA -10_^1_%SAZ TY2A8_(READY TO OUTPUT_^1_%JMP* TY2A1_^1TY2A8 RTJ* WRITIO_^1_%ENA 0_^1_%STA* NBS_^1_%JMP* TY2A1_^1_%SPC 4_^1****************************************************_^1*_)RELAY OUTPUT_;*_^1*******************€€*********************************_^1TYFOR RTJ PREP_)SET UP TO SEARCH FLAG TABLE_^1TY4A2 RTJ FLAG_)FIND NEXT OUTPUT_^1_%JMP SC7_*DONE_^1_%LDA- INDEX,I_%FIX INDEX FOR 8 BIT OUTPUTS_^1_%ALS 1_,X2_^1_%STA- INDEX,I_^1_%RTJ FINDCR_^1_%JMP* TY4A4_^1_%JMP* TY4A2_^1TY4A4 LDQ- IREC,I_'CALCULATE W-E-S FOR LOW 8 BITS_^1_%STQ* CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- TYPLU,Q_%SAVE LU€€_^1_%STA* LUSAVE_^1_%LDA- WES,Q_^1_%ADD- INDEX,I_^1_%LDQ* NBS_^1_%STA* DEVADD,Q_^1_%LDQ- ITEMP,I_^1_%LDA* (BUFADD),Q_"=OUTPUT VALUE_^1_%AND- H00FF_^1_%LDQ* NBS_^1_%STA* DEVDAT,Q_^1_%RAO* NBS_^1_%LDA* NBS_^1_%INA -10_^1_%SAN TY4A6_^1_%RTJ* WRITIO_^1_%ENA 0_^1_%STA* NBS_^1TY4A6 RAO- INDEX,I_%BUMP FOR HIGH 8 BITS_^1_%RTJ FINDCR_^1_%JMP* TY4A8_^1_%JMP* TY4A2_(NOT INSTALLED_^1TY4A8€€ LDQ- IREC,I_'CALCULATE W-E-S FOR HIGH 8 BITS_^1_%LDA- TYPLU,Q_%SAVE LU_^1_%STA* LUSAVE_^1_%AND- H2000_^1_%SAN TY4A9_(IT IS REMOTE_^1_%JMP* TY4A2_(NOT REMOTE_^1TY4A9 LDA- WES,Q_^1_%ADD- INDEX,I_^1_%LDQ* NBS_^1_%STA* DEVADD,Q_^1_%LDQ- ITEMP,I_^1_%LDA* (BUFADD),Q_"=OUTPUT VALUE_^1_%ARS 8_^1_%AND- H00FF_^1_%LDQ* NBS_^1_%STA* DEVDAT,Q_^1_%RAO* NBS_^1_%LDA* NBS_^1_%INA -10_^1_%SAN €€ TY4A10_^1_%RTJ WRITIO_'OUTPUT TO REMOTE I0M_^1_%ENA 0_^1_%STA* NBS_^1TY4A10 JMP* TY4A2_^1_%SPC 4_^1****************************************************_^1*_)OUTPUT TO REMOTE IOM_3*_^1****************************************************_^1WRITIO NUM 0_^1_%LDA- $EF_^1_%ALS 4_^1_%ADD- $EF_^1_%ADD =N$4C00_^1_%STA* WR2+1_^1_%LDA* LUSAVE_'GET LU_^1_%AND- H00FF_^1_%STA* WR2+4_^1_%L€€DA- I_^1_%STA* ISAV_^1_%LDA HERE_^1_%ADD =XWR4-HERE_^1_%STA* WR2+2_^1_%LDA HERE_^1_%ADD =XDEVADD-HERE_^1_%STA* WR2+6_^1_%LDA* NBS_*MOVE DATA TO END OF ADDRESSES_^1_%STA- I_^1_%ENQ 0_^1WR1_"LDA* DEVDAT,Q_^1_%STA* DEVADD,I_^1_%RAO- I_^1_%INQ 1_^1_%TRQ A_^1_%SUB* NBS_^1_%SAZ WR2_^1_%JMP* WR1_^1WR2_"RTJ- (AMONI)_^1_%NUM 0_^1_%NUM 0_,COMPLETION_^1_%NUM 0_^1_%NUM 0_^1NBS_"NUM€€ 0_^1_%NUM 0_,BUFFER_^1_%JMP- (ADISP)_^1WR4_"LDA* ISAV_^1_%STA- I_^1_%SQP WR5_^1_%LDQ* CRLOC_^1_%LDA- TYPLU,Q_^1_%AND- H7FFF_(SET ERROR FLAG IN CONTROL RECORD_^1_%ADD- H8000_^1_%STA- TYPLU,Q_^1_%JMP* WR6_^1WR5_"LDQ* CRLOC_(NO ERROR CLEAR FLAG_^1_%LDA- TYPLU,Q_^1_%AND- H7FFF_^1_%STA- TYPLU,Q_^1WR6_"JMP* (WRITIO)_^1DEVADD BZS DEVADD(10)_^1DEVDAT BZS DEVDAT(10)_^1ISAV_!NUM 0_^1€€LUSAVE NUM 0_^1CRLOC NUM 0_^1_%SPC 4_^1****************************************************_^1*_)HIGH SPEED ANALOG INPUT_0*_^1****************************************************_^1TYSIX ENA 0_,INITIALIZE CHANNEL ADDRESS_^1_%STA- COMP,I_^1TY6A2 RTJ FINDCR_^1_%JMP* TY6A6_^1_%LDA* NBS_*NO MORE CONTROL RECORDS_^1_%SAZ TY6A4_^1_%RTJ* WRITIO_'FINISH OUTSTANDING REQUEST_^1_%RTJ*€€ MOVE_^1TY6A4 JMP SC7_^1TY6A6 RTJ* CHECK_^1_%JMP* TY6A14_'I/O NOT REMOTE_^1_%LDQ- IREC,I_^1_%STQ* CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- COMP,I_'CHANNEL ADDRESS_^1_%LDQ* NBS_^1_%STA* DEVADD,Q_$PUT ADDRESS IN REQUEST_^1_%RAO* NBS_^1_%LDA* NBS_^1_%INA -10_^1_%SAN TY6A8_^1_%RTJ* WRITIO_^1_%RTJ* MOVE_^1TY6A8 RAO- COMP,I_'ARE 16 CHANNELS DONE_^1_%LDA- COMP,I_^1_%INA -16_^1_%€€SAZ TY6A9_^1_%JMP* TY6A2_^1TY6A9 LDQ- IREC,I_'IS THIS LAST MUX STATION IN RECORD_^1_%LDA- NBRS,Q_^1_%SUB- INDEX,I_^1_%INA -1_^1_%SAN TY6A12_'NO_^1_%RTJ* WRITIO_'WRITE TO REMOTE IOM_^1_%RTJ* MOVE_)MOVE DATA_^1TY6A12 RAO- INDEX,I_^1_%JMP* TYSIX_^1TY6A14 LDA- ITEMP,I_%BUMP BUFFER INDEX_^1_%INA 15_+CHECK BUMPS ONCE_^1_%STA- ITEMP,I_^1_%JMP* TYSIX_^1_%SPC 4_^1*********************€€*******************************_^1*_)ANALOG OUTPUT_:*_^1****************************************************_^1TYEIG RTJ* PREP_)SET UP TO SEARCH FLAG TABLE_^1TY8A2 RTJ* FLAG_)FIND NEXT OUTPUT_^1_%JMP SC7_*DONE_^1_%LDA- INDEX,I_%MAKE STATION INDEX_^1_%CLR Q_^1_%DVI- H0004_^1_%STA- INDEX,I_^1_%RTJ FINDCR_^1_%JMP* TY8A4_^1_%JMP* TY8A2_^1TY8A4 LDQ- IREC,I_'SET W-E-S AND CHANNEL A€€DDRESS_^1_%STQ* CRLOC_(SAVE CONTROL RECORD ADDRESS_^1_%LDA- TYPLU,Q_%SAVE LU_^1_%STA* LUSAVE_^1_%LDA- WES,Q_^1_%ADD- INDEX,I_^1_%LDQ* NBS_^1_%STA* DEVADD,Q_$PUT WES IN REQUEST_^1_%LDQ- ITEMP,I_^1_%LDA (BUFADD),Q_"OUTPUT VALUE_^1_%LDQ* NBS_^1_%STA* DEVDAT,Q_$PUT VALUE/CHANNEL INTO REQUEST_^1_%RAO* NBS_^1_%LDA* NBS_^1_%INA -10_^1_%SAN TY8A6_^1_%RTJ WRITIO_'WRITE TO REMOTE IOM_^1_€€%ENA 0_^1_%STA* NBS_^1TY8A6 JMP* TY8A2_^1_%SPC 4_^1**************************************************_^1*_)MOVE DATA TO DATA BUFFER_-*_^1**************************************************_^1MOVE_!NUM 0_^1_%LDQ* NBS_^1_%STQ* QTEMP_^1MOV1_!LDA* DEVADD,Q_^1_%LDQ- ITEMP,I_^1_%STA (BUFADD),Q_^1_%RAO- ITEMP,I_%BUMP BUFFER POINTER_^1_%RAO* QTEMP_^1_%LDA* QTEMP_^1_%SUB* NBS_^1_%SUB* N€€BS_^1_%SAZ MOV2_)END OF MOVE_^1_%LDQ* QTEMP_^1_%JMP* MOV1_^1MOV2_!ENA 0_,RESET NUMBER OF POINTS IN REQUEST_^1_%STA NBS_^1_%JMP* (MOVE)_'RETURN_^1QTEMP NUM 0_^1_%SPC 4_^1****************************************************_^1*_*CHECK I/O TYPE FOR REMOTE_-*_^1****************************************************_^1CHECK NUM 0_^1_%LDQ- IREC,I_^1_%LDA- TYPLU,Q_^1_%AND- H2000_^1_€€%SAN CK6_*I/O IS REMOTE_^1_%RAO- INDEX,I_%NOT REMOTE_^1_%LDA NBS_^1_%SAZ CH4_^1_%RTJ WRITIO_'DO OUTSTANDING REQUEST_^1_%RTJ* MOVE_)MOVE DATA TO BUFFER_^1_%JMP* (CHECK)_%RETURN TO CALL+1_^1CH4_"RAO- ITEMP,I_%NO REQUEST OUTSTANDING_^1_%JMP* (CHECK)_^1CK6_"RAO* CHECK_^1_%LDQ- IREC,I_'SAVE LU FROM REMOTE RECORD_^1_%LDA- TYPLU,Q_^1_%STA* LUSAVE_^1_%JMP* (CHECK)_%I/O IS REMOTE,RETURN€€ CALL+2_^1_%SPC 4_^1***************************************************_^1*_*SEARCH FLAG TABLE_5*_^1***************************************************_^1FLAG_!NUM 0_^1FL2_"LDQ* SIZFLG_'=WORD INDEX_^1_%LDA* (FLGADD),Q_"=NEXT FLAG WORD_^1_%SAN FL6_*FOUND A BIT SET_^1_%LDA* SIZFLG_'DO NEXT WORD_^1_%INA -1_^1_%SAN FL4_^1_%LDA NBS_^1_%SAZ FL3A_^1_%RTJ WRITIO_'DO OUTSTANDING REQ€€UEST_^1FL3A_!JMP* (FLAG)_^1FL4_"STA* SIZFLG_^1_%JMP* FL2_^1FL6_"ENQ 15_+SEARCH FLAG WORD_^1_%STQ* QTEMP_^1FL8_"SAM FL12_)FOUND BIT SET, Q=BIT INDEX_^1_%SQN FL10_^1_%JMP* FL2_*END OF WORD SEARCH,DO AGAIN SAME WORD_^1FL10_!ALS 1_,SHIFT FLAG WORD BUMP BIT INDEX_^1_%INQ -1_^1_%STQ* QTEMP_^1_%JMP* FL8_^1FL12_!LDA* SIZFLG_'MAKE POINT INDEX ,BUFFER INDEX_^1_%INA -1_^1_%MUI- H0010_^1€€_%ADD* QTEMP_^1_%STA- ITEMP,I_^1_%STA- INDEX,I_^1_%LDQ DEVIDX_'RESET POINTER TO FIRST CONTROL RECORD_^1_%LDA IOMCNT,Q_^1_%STA- IREC,I_^1_%LDQ* SIZFLG_^1_%LDA* (FLGADD),Q_"PICK UP WORD_^1_%LDQ* QTEMP_^1_%AND- MASK,Q_'MASK_^1_%LDQ* SIZFLG_^1_%STA* (FLGADD),Q_"STORE FLAG WORD_^1_%RAO* FLAG_^1_%JMP* (FLAG)_'POINT INDEX SET, RETURN TO CALLER+2_^1FLGADD NUM 0_^1SIZFLG NUM 0_^1_%SPC €<4_^1****************************************************_^1*_$SET UP TO SEARCH FLAG TABLE_0*_^1****************************************************_^1PREP_!NUM 0_^1_%LDQ DEVIDX_^1_%LDQ IOMFLG,Q_$FLAG TABLE ADDRESS_^1_%STQ* FLGADD_^1_%LDA- (ZERO),Q_$NBR OF FLAG WORDS_^1_%STA* SIZFLG_^1_%JMP* (PREP)_^1_%END_]_^__<PD1590 CSY/ C70 P€1_%NAM D1590_(DECK-ID C70 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1_%SPC 2_^1*_$THIS DRIVER SUPPORTS THE FOLLOWING DEVICES CONNECTED_^1*_$TO A REMOTE IOM SUBSYSTEM_^1*_€€*1544 DIGITAL INPUTS_$TYPE 1_^1*_*1553 DIGITAL OUTPUTS_#TYPE 2_^1*_*1555 RELAY OUTPUTS_%TYPE 2_^1*_*1547 COUNTERS_+TYPE 4_^1*_*1501/1525 ANALOG INPUTS TYPE 6_^1*_,1501 STATIONS IN ONE PDT MUST BE CONTIGUOUS_^1*_*1536/1525 ANALOG INPUTS TYPE 7_"ONE ONLY PER 1590_^1*_*1566 ANALOG OUTPUTS_$TYPE 8_^1*_*1572 TIMER TO GATE 1547 COUNTERS_^1_%SPC 2_^1*_$ANALOG INPUT ERRORS RETURNED IN D€€ATA WORD ._^1*_$V FIELD NOT SET WHEN THESE ERRORS OCCUR ON ANALOG INPUT_^1*_*$8000 TIMEOUT_^1*_*$8001 EXTERNAL REJECT ON ADC OR MUX_^1*_*$8002 INTERNAL REJECT ON ADC OR MUX_^1_%SPC 2_^1*_$ANALOG OUTPUT IN CURRENT MODE_^1*_*VALUE IN REQUEST BUFFER IS DAC HARDWARE VALUE_^1*_*PLUS CHANNEL ADDRESS_^1*_,BIT 12=CHANNEL 1_^1*_,BIT 13=CHANNEL 2_^1*_,BIT 14=CHANNEL 3_^1*_,BIT 15=CHANNEL€€ 4_^1*_*HARDWARE VALUES ARE_^1*_,0 0/0 FS=$66_^1*_,100 0/0 FS=$1FF_^1_%SPC 2_^1*_$THIS DRIVER WILL OPERATE ONE OR MORE 1590 SUBSYSTEMS_^1*_$A SEPARATE INTERRUPT LINE AND INTERRUPT RESPONSE_^1*_$ROUTINE FOR EACH 1590 IS REQUIRED_^1_%SPC 4_^1*_$ENTRY POINTS AND EXTERNALS_^1_%ENT I1590_(INITIATOR_^1_%ENT C1590_(CONTINUATOR_^1_%ENT E1590_(ERROR TIME OUT_^1_%EXT LOG_*ENGINEERING E€€RROR LOG_^1_%SPC 3_^1*_$LOCORE REFERENCES_^1_%EQU AFNR($B5)_#ENTRY TO FIND NEXT REQUEST_^1_%EQU ACOMPC($B6)_#-_!- COMPLETE REQUEST_^1_%EQU ADISP($EA)_$-_!- DISPATCHER_^1_%EQU H40($29)_^1_%EQU HFF($A)_^1_%EQU H80($2A)_^1_%EQU H8000($32)_^1_%EQU ZERO($22)_^1_%EQU HFF7F($3A)_^1_%EQU H2000($30)_^1_%EQU H1000($2F)_^1_%EQU H100($2B)_^1_%EQU H4000($31)_^1_%EQU H1FFF($F)_^€€1_%EQU H200($2C)_^1_%EQU H7FFF($42)_^1_%EQU H001F(7)_^1_%EQU H0010($27)_^1_%EQU HBFFF($41)_^1*_]_^1_%EQU MULT(1000)_^1_%EQU CLCKVA(1)_^1_%SPC 3_^1*_$PHYSICAL DEVICE TABLE REFERENCES_^1_%EQU EDCLK(4)_$04 DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_'05 LOGICAL UNIT_^1_%EQU EPTR(6)_%06 ADDRESS OF PARAMETER LIST_^1_%EQU EWES(7)_%07 W-E-S OF LCU FOR DATA_^1_%EQU EREQST(8)_#08 REQU€€EST STATUS_^1_%EQU ESTAT1(9)_#09 DRIVER STATUS_^1_%EQU ECCOR(10)_#10 CURRENT LOCATION OF STATION ADDRESS_^1_%EQU ELSTWD(11)_"11 LAST LOCATION PLUS 1 OF STATN ADDRESS_^1_%EQU ESTAT2(12)_"12 DEVICE STATUS_^1_%EQU MASLGN(13)_"13 DRIVER REQUEST THREAD_^1_%EQU MASSEC(14)_"14 RESERVED_^1_%EQU RETURN(15)_"15 RESERVED FOR FNR_^1_%EQU ERCONT(16)_"16 ERROR COUNTER_^1_%EQU DA€€TBUF(17)_"17 DATA BUFFER CURRENT ADDRESS_^1_%EQU MODTYP(18)_"18 DEVICE TYPE, AI WAIT FLAG, INITL FLAG_^1_%EQU STAN1(19)_#19 RCIU STATION ADDRESS PRIMARY_^1_%EQU STAN2(20)_#20 RCIU STATION ADDRESS SECONDY_^1_%EQU ONECPL(21)_"21 CONVERT TO ONES COMPLEMENT FACTOR_^1_%EQU ERETNX(22)_"22 RETURN ADDRESS IN DRIVER_^1_%EQU OTHER(23)_#23 PHYSTAB THREAD_^1_%EJT_]_^1***********€€*****************************************_^1*_)INITIATOR ENTRY_8*_^1****************************************************_^1_%SPC 2_^1I1590 STQ- I_,PDT ADDRESS TO I_^1_%LDQ BUSY_)IS DRIVER BUSY_^1_%SQZ I2A_*NO_^1I1_#LDA- MASLGN,Q_$PUT NEW REQUEST ON END OF THREAD_^1_%INA 0_,IS THIS END_^1_%SAZ I2_+YES_^1_%TRA Q_,NO KEEP LOOKING_^1_%JMP* I1_^1I2_#LDA- I_,PUT NEW REQUEST ON TH€€READ_^1_%STA- MASLGN,Q_^1_%JMP- (ADISP)_^1I2A_"RTJ- (AFNR)_'FIND NEXT REQUEST FOR THIS LU_^1_%JMP* I2B_*NO REQUESTS FOR THIS LU_^1_%JMP* I3_^1I2B_"LDA- MASLGN,I_$FIND ANY MORE REQUESTS FOR THIS DRIVER_^1_%INA 0_,IS REQUEST THREAD BUSY_^1_%SAN I2C_*YES_^1_%JMP- (ADISP)_%NO MORE REQUESTS FOR THIS DRIVER_^1I2C_"ENQ -0_^1_%STQ- MASLGN,I_$CLEAR THREAD WORD_^1_%STA- I_,SET POINTER TO €€NEW LU_^1_%JMP* I2A_^1I3_#LDA- I_,SET DRIVER BUSY WORD_^1_%STA BUSY_^1_%LDA- ELSTWD,I_$INITIALIZE DATA BUFFER ADDRESS_^1_%STA- DATBUF,I_^1_%CLR A_,CLEAR ERROR COUNTER_^1_%STA- ERCONT,I_^1_%LDQ- EPTR,I_'CHECK FOR MOTION REQUEST_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- H001F_^1_%INA -14_^1_%SAN I3AA_^1_%JMP COMREQ_^1I3AA_!LDQ* INITL_(CHECK INITIALIZATION FLAG TABLE_^1_%SQN I3A_^1_€€%JMP INREM_(INITIALIZE_^1I3A_"LDA- EWES,I_^1_%SUB* INITL,Q_^1_%SAZ I4_+NO INITIALIZE_^1_%INQ -1_^1_%SQN I3B_^1_%JMP INREM_(INITIALIZE_^1I3B_"JMP* I3A_^1INITL BZS INITL(6)_$INITIALIZATION FLAG TABLE_^1_%SPC 2_^1****************************************************_^1*_)DECODE DEVICE TYP TO START I/O OPER_#*_^1****************************************************_^1_%SPC 2_^1I€€4_#LDA- MODTYP,I_$GET DEVICE TYPE_^1_%AND- HFF_^1_%INA -1_+IS DIG IN_^1_%SAZ I5_+YES_^1_%INA -2_+IS COUNTER_^1_%SAN I6_+NO_^1_%LDA- MODTYP,I_$CHECK INITIALIZATION FLAG FOR COUNTERS_^1_%AND- H4000_^1_%SAN I5_+NONE REQD_^1_%JMP INCNT_(INITIALIZE COUNTERS_^1I5_#JMP* OPER3_(START I/O FOR DI OR CNTRS_^1I6_#INA -3_+IS ANALOG INPUT TYPE 6_^1_%SAZ I8_+YES_^1_%INA -1_+IS ANALOG INP€€UT TYPE 7_^1_%SAN OPER1_(NO_^1_%LDA- MODTYP,I_$ANALOG INPUT_^1_%AND- H7FFF_(CLEAR WAIT FLAG_^1_%STA- MODTYP,I_^1_%AND- H4000_(CHECK INITIALIZE FLAG FOR ANALOG INPUT_^1_%SAN OPER1_(NO INITIALIZATION REQD_^1_%JMP INANA_(INITIALIZE MUX AND ADC_^1I8_#LDA- MODTYP,I_$IS AI TYPE 6 INITIALIZED_^1_%AND- H4000_^1_%SAN OPER1_(YES_^1_%JMP INANA_(NO_^1_%EJT_]_^1****************************€€************************_^1*_/I/O OPERATION 1_1*_^1****************************************************_^1OPER1 LDQ- DATBUF,I_$START OPERATION 1_^1_%LDA- (ZERO),Q_$GET DATA WORD_^1_%STA* TEMP_^1_%LDA- MODTYP,I_$IS ANALOG INPUT TYPE 6 (1501/1525)_^1_%AND- HFF_^1_%INA -6_^1_%SAZ OP14_)YES_^1_%INA -1_+IS ANALOG INPUT TYPE 7 (1536/1525)_^1_%SAN OP12_)NO_^1_%JMP* OP18_)YES_^1OP12_€€!LDA* TEMP_^1_%LDQ- EWES,I_'LCU ADDRESS_^1_%RTJ OUT_*LOAD DATA_^1_%LDQ- ECCOR,I_^1_%LDA- (ZERO),Q_$STATION ADDRESS_^1_%LDQ- EWES,I_^1_%JMP* OP19_^1OP14_!LDQ- ECCOR,I_%TYPE 6 AI_^1_%LDA- (ZERO),Q_$CHANNEL INDEX_^1_%CLR Q_^1_%DVI- H0010_^1_%STA* TEMP1_^1_%TRQ A_^1_%LDQ- EWES,I_'LOAD CHANNEL ADDRESS_^1_%RTJ OUT_^1_%LDA- STAN2,I_^1_%ADD* TEMP1_(MUX WES_^1_%JMP* OP19_^1OP18_!LDQ- EC€€COR,I_%TYPE 7 AI_^1_%LDA- (ZERO),Q_$AI CHANNEL ADDRESS_^1_%LDQ- EWES,I_'LCU ADDRESS_^1_%RTJ OUT_*LOAD LCU WITH DATA_^1_%LDA- STAN2,I_%MUX STATION ADDRESS_^1OP19_!ALS 2_^1_%INA 2_,ADD WRITE CYCLE CODE_^1_%ADQ- H80_*ADD FUNCTION BIT_^1_%RTJ OUT_^1_%LDA =XOPER2_%SET UP RETURN ADDRESS_^1_%STA- ERETNX,I_^1_%JMP* FIN_*WAIT FOR REPLY_^1TEMP1 NUM 0_^1_%SPC 4_^1*********************€€*******************************_^1*_)I/O OPERATION 2_7*_^1****************************************************_^1_%SPC 2_^1OPER2 LDA- MODTYP,I_$START OPERATION 2_^1_%AND- HFF_^1_%INA -6_+IS ANALOG INPUT TYPE 6_^1_%SAN OP20_)NO_^1_%JMP* OPER3_(YES_^1OP20_!INA -1_+IS ANALOG INPUT TYPE 7_^1_%SAN OP22_)NO_^1_%LDA- MODTYP,I_$SET WAIT FLAG_^1_%AND- H7FFF_^1_%ADD- H8000_^1_%STA- MO€€DTYP,I_^1_%ENA 0_^1_%STA BUSY_)CLEAR BUSY_^1_%JMP* FIN_^1OP22_!RAO- ECCOR,I_%BUMP CURRENT STATION_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$IS LAST POINT_^1_%SAN OP23_)NO_^1_%JMP* COMREQ_'COMPLETE REQUEST_^1OP23_!RAO- DATBUF,I_$BUMP DATA BUFFER ADDRESS_^1_%JMP* I4_+PROCESS NEXT POINT_^1_%SPC 4_^1****************************************************_^1*_)I/O OPERATION 3_7*_^1*********€€*******************************************_^1_%SPC 2_^1OPER3 LDA- MODTYP,I_$IS DI OR COUNTERS_^1_%AND- HFF_^1_%INA -6_^1_%SAP OP32_)NO IT IS AI_^1_%LDQ- ECCOR,I_%YES_^1_%LDA- (ZERO),Q_$STATION ADDRESS FOR DI OR COUNTERS_^1_%JMP* OP34_^1OP32_!LDA- STAN1,I_%ADC STATION ADDRESS_^1OP34_!ALS 2_^1_%INA 1_,READ CYCLE_^1_%LDQ- EWES,I_'LCU ADDRESS_^1_%ADQ- H80_*FUNCTION BIT_^1_%RTJ*€€ OUT_^1_%LDA =XOPER4_%SET RETURN ADDRESS_^1_%STA- ERETNX,I_^1_%JMP* FIN_*WAIT FOR REPLY_^1_%SPC 4_^1****************************************************_^1*_)I/O OPERATION 4_8*_^1****************************************************_^1_%SPC 2_^1OPER4 LDQ- EWES,I_'START OPERATION 4_^1_%RTJ* INPUT_(READ DATA_^1_%STA* TEMP_^1_%LDA- MODTYP,I_$IS ANALOG INPUT_^1_%AND- HFF_^1_%INA -6€€_^1_%SAZ OP41_)YES_^1_%INA -1_^1_%SAN OP42_)NO_^1OP41_!RTJ* CONVAI_'CONVERT ANALOG DATA_^1OP42_!LDA* TEMP_)STORE DATA IN DATA BUFFER_^1_%LDQ- DATBUF,I_^1_%STA- (ZERO),Q_^1_%RAO- ECCOR,I_%BUMP CURRENT STATION/CHANNEL_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$IS LAST POINT_^1_%SAN OP43_)NO_^1_%JMP* COMREQ_'COMPLETE REQUEST_^1OP43_!RAO- DATBUF,I_$BUMP DATA BUFFER ADDRESS_^1_%JMP I4_+PR€€OCESS NEXT POINT_^1TEMP_!NUM 0_^1_%SPC 4_^1FIN_"ENA CLCKVA_'START TIMER_^1_%STA- EDCLK,I_^1_%JMP- (ADISP)_%EXIT, WAIT FOR REPLY INTERRUPT_^1_%SPC 4_^1****************************************************_^1*_)CONVERT ADC READING TO VALUE_+*_^1****************************************************_^1_%SPC 2_^1CONVAI NUM 0_,CORRECT TO ONES COMPLEMENT_^1_%LDA* TEMP_^1_%SAP CON2_^1€€_%SUB- ONECPL,I_^1CON2_!STA* TEMP_^1_%JMP* (CONVAI)_^1_%EJT_]_^1****************************************************_^1*_)COMPLETE REQUEST_7*_^1****************************************************_^1_%SPC 2_^1COMREQ RTJ- (ACOMPC)_$COMPLETE REQUEST_^1COMR1 LDA* INTFLG_'ANY UNSOLICITED INTERRUPTS_^1_%SAN COM10_(YES_^1COM2_!ENA 0_^1_%STA* BUSY_)CLEAR BUSY_^1_%JMP I2A_*NO_!LOOK FO€€R NEXT REQUEST_^1COM10 LDA- I_^1_%STA* BUSY_)SAVE PTD POINTER FOR BASE_^1COM12 LDA- MODTYP,I_$FIND ANALOG INPUT PDT_^1_%SAM COM20_(THIS PDT IS WAITING_^1_%LDA- OTHER,I_%GO TO NEXT PDT_^1_%STA- I_^1_%SUB* BUSY_)HAVE ALL BEEN SEARCHED_^1_%SAN COM16_(NO_^1_%JMP* COM2_)YES- NO WAITING AI FOUND_^1COM16 JMP* COM12_(LOOK AT NEXT PDT_^1COM20 LDA- MODTYP,I_^1_%AND- H7FFF_^1_%STA- MODT€€YP,I_$CLEAR WAIT FLAG_^1_%LDA- I_^1_%STA* BUSY_)SET BUSY = WAITING PDT_^1_%ENA 0_^1_%STA* INTFLG_'CLEAR INTERRUPT FLAG_^1_%ENA -0_^1_%STA- EDCLK,I_%STOP CLOCK_^1_%JMP* OPER3_^1_%SPC 4_^1****************************************************_^1*_)OUTPUT AND INPUT_7*_^1****************************************************_^1_%SPC 2_^1OUT_"NUM 0_,OUTPUT TO REMOTE IOM_^1_%STA* SAVA_^€€1_%ENA 0_^1_%STA* RJTCT_(CLEAR REJECT COUNTER_^1OUT2_!LDA* SAVA_^1_%OUT OUT4-*_^1_%JMP* (OUT)_(NO REJECT, RETURN_^1OUT4_!JMP* OUT8_)INTERNAL REJECT_^1_%RAO* RJTCT_^1_%LDA* RJTCT_^1_%INA -10_^1_%SAZ OUT6_^1_%JMP* OUT2_^1OUT6_!ENQ 6_,EXTERNAL REJECT CODE_^1_%LDA- H7FFF_^1_%STA- ESTAT2,I_$PLUG STATUS WORD_^1_%JMP* OUT10_^1OUT8_!ENQ 5_,INTERNAL REJECT CODE_^1_%LDA- H7FFF_^1_%STA-€€ ESTAT2,I_$PLUG STATUS WORD_^1OUT10 STQ* SAVQ_^1_%RTJ CLEAR_(CLEAR 1590_^1_%LDQ* SAVQ_^1_%JMP LOGE_^1_%SPC 6_^1INPUT NUM 0_,INPUT FROM REMOTE IOM_^1_%INP INP2-*_^1_%JMP* (INPUT)_^1INP2_!JMP* OUT8_^1_%JMP* OUT6_^1RJTCT NUM 0_^1SAVA_!NUM 0_^1SAVQ_!NUM 0_^1BUSY_!NUM 0_^1_%EJT_]_^1****************************************************_^1*_)CONTINUATOR ENTRY_6*_^1*************€€***************************************_^1_%SPC 2_^1*_$LCU STATUS_^1*_'0-7_!INTERRUPTS FROM REMOTE_^1*_'8_#INTERRUPT RECEIVED_^1*_'9-10 00 INTERRUPT_^1*_-01 EXT REJ_^1*_-10 INT REJ_^1*_-11 REPLY_^1*_'11_"TEST MODE_^1*_'12_"REMOTE RECEIVE ERROR_^1*_'13_"LOCAL RECEIVE ERROR_^1*_'14_"LCU BUSY_^1*_'15_"DATA READY_^1_%SPC 2_^1C1590 LDA* BUSY_)GET BUSY PTD_^1_%SAZ C1_+NONE BUSY_^1_%€€TRA Q_^1C1_#STQ- I_,SET PTD INDEX_^1_%LDQ- EWES,I_'=WES OF LCU_^1_%ADQ- H80_*SET STATUS BIT_^1_%RTJ* INPUT_(READ STATUS_^1_%STA- ESTAT2,I_$SAVE STATUS IN LCU PDT_^1_%STA* STATUS_^1_%AND- H2000_(CHECK FOR LCU RECEIVE ERROR_^1_%SAZ C2_+NO LCU RECEIVE ERROR_^1_%ENA 1_^1_%STA* ERTYP_(SAVE ERROR TYPE_^1_%JMP* ERROR_(PROCESS ERROR_^1C2_#LDA* STATUS_^1_%AND- H1000_(CHECK RCIU RECEIVE E€€RROR_^1_%SAZ C4_+NO RCIU RECEIVE ERROR_^1_%ENA 2_^1_%STA* ERTYP_(SAVE ERROR TYPE_^1_%JMP* ERROR_(PROCESS ERROR_^1C4_#LDA* STATUS_'CHECK RCIU DEVICE REJECTS_^1_%AND =N$600_^1_%ARS 9_^1_%INA -1_^1_%SAN C6_+NOT EXT REJ ON RCIU_^1_%ENA 3_^1_%STA* ERTYP_^1_%JMP* ERROR_(PROCESS EXT REJ ERROR_^1C6_#INA -1_^1_%SAN C8_+NOT INT REJ ON RCIU_^1_%ENA 4_^1_%STA* ERTYP_(SAVE ERROR TYPE_€€^1_%JMP* ERROR_(PROCESS INT REJ ERROR_^1C8_#LDA* STATUS_'CHECK FOR UNSOLICITED INTERRUPT_^1_%AND- H100_^1_%SAZ C10_*NORMAL REPLY INTERRUPT_^1_%JMP* C14_*PROCESS UNSOLICITED INTERRUPT_^1C10_"LDA* BUSY_)IS DRIVER BUSY_^1_%SAN C12_*YES_^1_%JMP GHOST_(GHOST INTERRUPT_^1C12_"ENA -0_+STOP CLOCK_^1_%STA- EDCLK,I_^1_%LDQ- ERETNX,I_$GET RETURN ADDRESS_^1_%JMP- (ZERO),Q_$RETURN_^1_%SPC €€2_^1C14_"RAO* INTFLG_'SET INTERRUPT FLAG_^1_%LDA* BUSY_)IS DRIVER BUSY_^1_%SAZ C18_*NO_^1_%JMP- (ADISP)_%WAIT FOR REPLY INTERRUPT_^1C18_"JMP COMR1_^1INTFLG NUM 0_,UNSOLICITED INTERRUPT FLAG_^1STATUS NUM 0_,SAVE STATUS_^1ERTYP NUM 0_,ERROR TYPE_^1_%EJT_]_^1****************************************************_^1*_)ERROR PATH_=*_^1************************************************€€****_^1_%SPC 2_^1*_$ERTYP CODE_^1*_*=1 LCU RECEIVE ERROR_^1*_*=2 RCIU RECEIVE ERROR_^1*_*=3 RCIU DEVICE EXTERNAL REJECT_^1*_*=4 RCIU DEVICE INTERNAL REJECT_^1_%SPC 2_^1ERROR ENA -0_+STOP CLOCK_^1_%STA- EDCLK,I_^1_%RAO- ERCONT,I_$TEST ERROR COUNTER = 10_^1_%LDA- ERCONT,I_^1_%INA -10_^1_%SAN ER2_*KEEP TRYING_^1_%RTJ CLEAR_(CLEAR 1590_^1_%ENQ $28_*ERROR 40_^1_%JMP* LOGE_)L€€OG ERROR_^1ER2_"LDA* ERTYP_^1_%INA -3_+IS DEVICE REJECT_^1_%SAP DEVREJ_'YES_^1_%JMP I4_+NO- RETRY POINT_^1_%SPC 4_^1DEVREJ LDA- ELU,I_^1_%SAN D1_^1_%JMP GHOST_(TREAT LU=0 AS GHOST INTERRUPT_^1D1_#LDA- MODTYP,I_$IS ANALOG INPUT_^1_%AND- HFF_^1_%INA -6_^1_%SAN D2_+NOT 6_^1_%JMP* D4_^1D2_#INA -1_^1_%SAN D6_+NOT 7_^1D4_#JMP* AIREJ_(PROCESS AI REJECT_^1D6_#LDA* ERTYP_(IS EXT R€€EJ_^1_%INA -3_^1_%SAZ D8_+YES_^1_%ENQ 5_,INT REJ CODE_^1_%JMP* D10_^1D8_#ENQ 6_,EXT REJ CODE_^1D10_"JMP* LOGE_^1_%SPC 4_^1AIREJ LDQ- DATBUF,I_$PUT ERROR INTO DATA WORD_^1_%LDA* ERTYP_^1_%INA -3_+IS EXTERNAL REJECT_^1_%SAN AIR2_)NO_^1_%LDA =N$8001_%YES_^1_%STA- (ZERO),Q_^1_%JMP* AIR4_^1AIR2_!LDA =N$8002_%INTERNAL REJECT_^1_%STA- (ZERO),Q_^1AIR4_!LDA- MODTYP,I_$CLEAR INITIA€€LIZATION FLAG_^1_%AND- HBFFF_^1_%STA- MODTYP,I_^1_%RAO- ECCOR,I_%BUMP CURRENT CHANNEL NBR_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_$IS LAST_^1_%SAN AI2_*NO_^1_%JMP COMREQ_'COMPLETE REQUEST_^1AI2_"RAO- DATBUF,I_$BUMP DATA BUFFER ADDRESS_^1_%JMP I4_+DO NEXT CHANNEL_^1_%SPC 4_^1LOGE_!LDA- ELU,I_^1_%SAN LO2_^1_%JMP GHOST_(TREAT LU=0 AS GHOST INTERRUPT_^1LO2_"LDA- EREQST,I_$SET ERROR BI€€T IN PDT WORD 8_^1_%AND- HBFFF_^1_%ADD- H4000_^1_%STA- EREQST,I_^1_%LDA- ESTAT1,I_$SET ERROR BIT IN PDT WORD 9_^1_%AND- H1FFF_^1_%EOR- H8000_^1_%STA- ESTAT1,I_^1_%LDA- ELU,I_(COMBINE LU AND ERROR CODE_^1_%ALS 6_^1_%AAQ Q_^1_%RTJ LOG_*LOG ERROR_^1_%JMP COMREQ_'COMPLETE REQUEST_^1_%SPC 4_^1****************************************************_^1*_)DIAGNOSTIC CLOCK ENTRY_1*_^1****€€************************************************_^1_%SPC 2_^1E1590 STQ- I_^1_%LDA- MODTYP,I_^1_%AND- HFF_^1_%INA -6_+IS ANALOG IN TYPE 6_^1_%SAZ ET2_*YES_^1_%INA -1_+IS ANALOG IN TYPE 7_^1_%SAZ ET2_*YES_^1_%ENQ 0_^1_%JMP* LOGE_)LOG TIME OUT ERROR_^1ET2_"LDA- H8000_(PUT ERROR IN DATA WORD ANALOG IN_^1_%LDQ- DATBUF,I_^1_%STA- (ZERO),Q_^1_%JMP* AIR4_^1**************************€€**************************_^1*_)INITIALIZATION REMOTE IOM_-*_^1****************************************************_^1_%SPC 2_^1INREM LDQ- EWES,I_'M/C 1590 LOCAL UNIT_^1_%ADQ- H80_^1_%LDA- H8000_^1_%RTJ OUT_^1_%LDQ- EWES,I_'M/C 1590 REMOTE UNIT_^1_%ENA 1_,LOAD DATA=CLEAR FUNCTION_^1_%RTJ OUT_^1_%ADQ- H80_*FUNCTION_^1_%ENA 2_,WRITE CYCLE TO STATION ZERO ON RCIU_^1_%ADD- H200_€€)FUNCTION_^1_%RTJ OUT_^1_%LDA =XINR2_'SET RETURN ADDRESS_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INR2_!RAO INITL_(SET INITIALIZE FLAG_^1_%LDQ INITL_^1_%LDA- EWES,I_^1_%STA INITL,Q_^1_%JMP I4_^1_%SPC 4_^1****************************************************_^1*_)INITIALIZE ADC/MUX_5*_^1****************************************************_^1_%SPC 2_^1INANA LDQ- EWES,I_'INITIALIZE AN€€ALOG INPUT_^1_%ENA 1_,LOAD DATA=CLEAR ADC/MUX_^1_%RTJ OUT_^1_%ADQ- H80_^1_%LDA- STAN1,I_%ADC STATION ADDRESS_^1_%ALS 2_^1_%INA 2_,WRITE CODE_^1_%ADD- H200_)FUNCTION_^1_%RTJ OUT_^1_%LDA =XINA2_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INA2_!LDA- MODTYP,I_$IS TYPE 7 AI_^1_%AND- HFF_^1_%INA -7_^1_%SAZ INA3_)YES_^1_%JMP* INA4_)NO_^1INA3_!LDA- H40_*ENABLE INTERRUPT ON ADC DATA READY_^1_%€€LDQ- EWES,I_'MUX STATION ADDRESS_^1_%RTJ OUT_^1_%ADQ- H80_^1_%LDA- STAN2,I_%MUX STATION ADDRESS_^1_%ALS 2_^1_%INA 2_,WRITE CODE_^1_%ADD- H200_)FUNCTION_^1_%RTJ OUT_^1_%LDA =XINA4_'SET RETURN ADDRESS_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INA4_!LDA- MODTYP,I_$SET INITIALIZE FLAG_^1_%ADD- H4000_^1_%STA- MODTYP,I_^1_%JMP OPER1_^1_%SPC 4_^1*********************************************€€*******_^1*_)INITIALIZE 1572 FOR COUNTER GATE_'*_^1****************************************************_^1_%SPC 2_^1INCNT LDQ- EWES,I_^1_%ENA $24_*LOAD DATA=ENABLE SRG SYNC FOR COUNTERS_^1_%RTJ OUT_^1_%ADQ- H80_*FUNCTION BIT_^1_%LDA- STAN2,I_%1572 STATION ADDRESS_^1_%ALS 2_^1_%INA 2_,WRITE CYCLE_^1_%ADD- H200_)FUNCTION_^1_%RTJ OUT_^1_%LDA =XINC2_^1_%STA- ERETNX,I_^1_%JMP F€€IN_^1INC2_!LDA =XMULT_'LOAD 1572 MULTIPLIER_^1_%LDQ- EWES,I_^1_%RTJ OUT_^1_%LDA- STAN2,I_%1572 STATION ADDRESS_^1_%ALS 2_^1_%INA 2_,WRITE CODE_^1_%ADQ- H80_*FUNCTION BIT_^1_%RTJ OUT_^1_%LDA =XINC4_'SET RETURN_^1_%STA- ERETNX,I_^1_%JMP FIN_^1INC4_!LDA- MODTYP,I_$SET INITIALIZED FLAG_^1_%ADD- H4000_^1_%STA- MODTYP,I_^1_%JMP OPER3_^1_%SPC 4_^1*********************************€€*******************_^1*_$PROCESS GHOST INTERRUPT_4*_^1****************************************************_^1GHOST LDA- ESTAT1,I_^1_%AND- HFF7F_^1_%ADD- H80_*SET BIT IN PDT IF GHOST INTERRUPT_^1_%STA- ESTAT1,I_^1_%JMP- (ADISP)_^1_%SPC 4_^1****************************************************_^1*_)M/C 1590 LOCAL AND REMOTE CONTROL_%*_^1**********************************************€x******_^1CLEAR NUM 0_^1_%LDQ- EWES,I_'M/C LOCAL 1590_^1_%ADQ- H80_^1_%LDA- H8000_^1_%OUT 1_^1_%NOP 0_^1_%LDQ- EWES,I_'M/C 1590 REMOTE CONTROL ONLY_^1_%ENA 2_^1_%OUT 1_^1_%NOP 0_^1_%ADQ- H80_^1_%ENA 2_,WRITE CYCLE TO STATION ZERO ON REMOTE_^1_%ADD- H200_^1_%OUT 1_^1_%NOP 0_^1_%LDA =XCLR4_'SET RETURN_^1_%STA- ERETNX,I_^1_%JMP FIN_^1CLR4_!JMP* (CLEAR)_^1_%END_]_^__xPD17323 CSY/ C71 P€1_%NAM D17323_'DECK-ID C71 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1732-3/616-72/92/95 MAGNETIC TAPE SUBSYSTEM DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1_%SPC 3_^1*_*LOW CORE EQU STATEMENTS_^1_%EQU€€ LOWBTS($3)_"LOW ORDER BITS MASK_^1_%EQU HIHBTS($12)_!HIGH ORDER BITS MASK_^1_%EQU ZERO($22)_#LOCATION CONTAINING ZERO_^1_%EQU BITMSK($23)_!INDIVIDUAL BIT MASK_^1_%EQU ZROBIT($33)_!BIT EXCLUSION MASK_^1_%EQU FNR($B5)_$ADDRESS OF FIND NEXT REQUEST SUBROUTIN_^1_%EQU COMPRQ($B6)_!ADDRESS OF COMPLETE REQUEST SUBROUTINE_^1_%EQU DISP($EA)_#ADDRESS OF DISPATCHER_^1_%EJT_]_^1*_*PHY€€SICAL DEVICE TABLE LAYOUT_^1*_$REFER TO MASS STORAGE OPERATING SYSTEM 4.1 REFERENCE MANU_^1_%EQU EDCLK(4)_$DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_'LOGICAL UNIT NUMBER ASSIGNED_^1_%EQU EPTR(6)_%LOCATION OF REQUEST PARAMETER LIST_^1_%EQU EWES(7)_%EQUIPMENT CODE FOR STATUS_^1_%EQU EREQST(8)_#REQUEST STATUS_^1_%EQU ESTAT1(9)_#DRIVER STATUS_^1_%EQU ECCOR(10)_#NEXT LOCATION TO STOR DATA_€€^1_%EQU ELSTWD(11)_"LAST WORD + 1 TO STORE DATA_^1_%EQU ESTAT2(12)_"LAST EQUIPMENT STATUS_^1_%EQU ETEMP1(15)_"TEMPORARY STORAGE_^1_%EQU UNTMOD(16)_"UNIT AND MODE SELECT CODE_^1_%EQU DIAGLU(17)_"DIAGNOSTIC LOGICAL UNIT_***MS_^1_%EQU ETEMP2(18)_"TEMPORARY STORAGE_^1_%EQU RTRECV(19)_^1_%EQU ECKSUM(20)_F**M_^1_%EQU ERDIRC(21)_^1_%EQU TCKSUM(22)_^1_%EQU ELINK(23)_#PHYSTAB THR€€EAD_3**MS_^1_%EQU PHSREC(24)_"MAXIMUM PHYSICAL RECORD SIZE (7 TRACK_^1_%EQU ABUFF(25)_#PACK/UNPACK BUFFER ADDRESS_"(7 TRACK_^1_%SPC 2_O**M_^1_%EQU NOISLN(2)_#MINIMUM ACCEPTABLE RECORD SIZE_^1_%EQU TERM($43)_^1_%EQU STOLSW($1F)_^1_%EQU WRITFM($30)_^1_%EQU TRYNBR(50)_"NUMBER OF RECOVERY RETRIES._'**M_^1_%EQU MODCOD(15)_"SWITCH MODE ERROR CODE_^1_%EQU ABORTE(50)_"ID ABORT E€€RROR CODE_^1_%EQU ERRDEN(51)_"DENSITY REQUEST ERROR CODE_^1_%EQU PELOSD(59)_"PE LOST DATA ERROR CODE_^1_%SPC 2_^1_%EQU T61672(20)_"TYPE CODE FOR 616-72_^1_%EQU T6169X(21)_"TYPE CODE FOR 616-92/95_^1_%SPC 2_^1_%EXT MAS300_^1_%EXT MAKEQ_^1_%EXT ALTDEV_^1_%EXT* PACK_^1_%EXT* UNPK_^1_%EXT* ASCBCD_^1_%EXT* BCDASC_^1_%EXT* PRUCMP_^1_%EXT LOG_^1_%ENT I17323,C17323,E17323_^1_%EX€€T COMPV4_J**M_^1_%EXT REWCK_(REWIND CHECK_^1_%EJT_]_^1*_]_^1*_$ENTRY FROM MASDRV/DBLDRV_^1*_]_^1MASTAP STQ- I_,SAVE PHYSTB ADDRESS_^1*_]_^1*_$NOTE: THE NEXT INSTRUCTION IS CHANGED BY DRIVER TO JMP*_^1*_,BEFORE EXIT TO MAS300_^1*_]_^1_%STA* LOCN_)SAVE LOCATION OF DRIVER_^1_%EJT_]_^1*_]_^1*_$ABSOLUTIZE PROGRAM RELOCATABLE ADDRESSES_^1*_]_^1_%TRA Q_,LOCATION OF DRIVER TO Q_^1_%ENA€€ TAPINI-MASTAP_^1_%AAQ A_^1_%STA* ADRINT_'STORE ADDRESS OF INITIATOR_^1_%LDA =XC17323-MASTAP_^1_%AAQ A_,INCREMENT + DRIVER_^1_%STA* ADRCON_'STORE ADDRESS OF CONTINUATOR_^1_%LDA =XE17323-MASTAP_^1_%AAQ A_,INCREMENT + BASE_^1_%STA* ADRHNG_'STORE ADDRESS OF HANGUP_^1_%LDA =XBUSYCK-MASTAP_^1_%AAQ A_^1_%STA BSYAD1_^1_%LDA =XNOBSY1-MASTAP_^1_%AAQ A_^1_%STA BSYAD2_^1_%LDA =XD€€UMBUF-MASTAP SET UP FWA-1_^1_%AAQ A_,OF ZERO LENGTH_^1_%STA ADVR+1_^1_%INA 1_,DUMMY BUFFER_^1_%STA DUMBUF_'FOR ADVANCE RECORD MOTION_^1_%LDQ- I_,PICK UP PHYSTB ADDRESS_^1_%SPC 3_^1I17323 STQ- I_^1_%LDA- (ZERO),Q_^1_%STA XXX+1_(REFLECT LEVEL_^1_%STA DVRLVL_'SET DRIVER LEVEL_^1ADRPLG LDA- 0_^1ADRINT ADC TAPINI_^1_%STA- 1,Q_*STORE ADDRESS OF INITIATOR IN PHYSTB_^1_%LDA- 0_^1AD€€RCON ADC C17323_^1_%STA- 2,Q_*STORE ADDRESS OF CONTINUATOR IN PHYSTB_^1_%LDA- 0_^1ADRHNG ADC E17323_^1_%STA- 3,Q_*STORE ADDRESS OF HANGUP IN PHYSTB_^1_%LDA- ELINK,Q_%PICK UP ADDRESS OF NEXT PHYSTB_^1_%TRA Q_,SAVE IN Q_^1_%SUB- I_,SUBTRACT ADDRESS OF START PHYSTB_^1_%SAZ TAPINI_'SKIP IF DONE_^1_%JMP* ADRPLG_'GO BACK AND SET UP NEXT PHYSTB_^1_%EJT_]_^1*_]_^1*_$DRIVER INITIATOR EN€€TRY FOR ALL EXCEPT FIRST REQUEST_^1*_]_^1TAPINI STQ- I_,SAVE ADDRESS OF PHYSTB_^1_%LDA- 0_^1LSTPT NUM 0_,ADDRESS OF CURRENT PHYSTB_^1_%SAZ NOTBSY_^1_%JMP- (DISP)_^1_%SPC 2_^1LOCN_!ADC MASTAP_'DRIVER LOCATION_^1ERRCNT NUM 0_^1_%SPC 2_^1NOTBSY STA* ERRCNT_'RESET COUNTER_^1_%LDA- I_^1_%STA* LSTPT_^1TSTRWD LDA- ESTAT1,I_^1_%AND- BITMSK+6_$GET BIT 6 OF ESTAT1,I_^1_%SAZ NORWD_(CH€€K 4 REWIND_^1_%JMP* NXTPT_K**M_^1NORWD LDA- ESTAT1,I_$GET BIT 5_^1_%AND- BITMSK+5_^1_%SAZ FIND_^1_%LDA* RW_^1_%INA -1_^1_%STA* RW_^1_%JMP NXTMOT_'GO EXECUTE REST OF MOTION_^1FIND_!RTJ- (FNR)_(FIND NEXT REQUEST_^1_%JMP* NXTPT_(NO REQUEST THIS PHYSTB_^1_%LDQ- I_,CURRENT PHYSTB_^1_%STQ* LSTPT_(UPDATE LAST POINT_^1_%ENQ 0_^1_%ENA 1_^1_%RTJ OUT_*CLEAR CONTROLLER_^1_%LDQ- EPTR,I_'€€LIST LOCATION IN Q_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- LOWBTS+4_^1_%INA -14_*A = 0 IF MOTION_^1_%SAN NOMO_)SKIP IF NOT MOTION_^1_%JMP MOTION_'REQUEST_^1NOMO_!JMP* XFER_^1_%EJT_]_^1NXTPT LDA- ELINK,I_%GET NEXT PHYSTB_^1_%STA- I_^1_%EOR* LSTPT_^1_%SAZ EXIT_)SKIP IF END OF THREAD_^1_%LDA- EREQST,I_$IS AN ERROR PENDING ON THIS UNIT_^1_%AND- BITMSK+14_^1_%SAN BACK_^1_%JMP* TSTRW€€D_^1BACK_!JMP* NXTPT_^1EXIT_!CLR A_^1_%STA* LSTPT_(SET DRIVER NOT BUSY_^1_%LDA- 0_^1_%ADC $1800+ADRPLG-MASTAP-1_*(JMP* ADRPLG-MASTAP-_^1_%STA* MASTAP+1_^1_%LDA* RW_^1_%SAN EXIT1_^1_%JMP MAS300_^1EXIT1 JMP- (DISP)_'EXIT TO DISPATCHER_^1_%SPC 3_^1ZEROWD ENA 31_+ZERO WORDS ERROR_^1_%JMP FAILED_^1_%SPC 3_^1RW_#NUM 0_^1_%EJT_]_^1XFER_!LDA- ELSTWD,I_^1_%LDQ- ECCOR,I_^1_%RTJ CO€€MPV4_'GET TRANSFER LENGTH_^1_%STA* NUMBR_(SAVE FOR 7 TRACK CHECK_^1_%INA -NOISLN_%CHECK IF RECORD LENGTH.GT.NOISLN_^1_%SAM TOSHRT_^1_%SAZ TOSHRT_^1_%LDA- EREQST,I_$REQUEST STATUS TO A_^1_%ARS 4_,TYPE CODE TO LOWER BITS_^1_%AND- LOWBTS+6_$SAVE TYPE CODE ONLY_^1_%INA -T6169X_%CHECK FOR 9 TRACK TRANSPORT_^1_%SAZ M609_^1_%JMP* M608_^1TOSHRT JMP* ZEROWD_^1_%SPC 3_^1M609_!LDQ- ECC€€OR,I_^1_%STQ* FWA_*SET FWA TO USERS BUFFER_^1_%LDA- ELSTWD,I_^1_%STA* LWA_*SET LWA TO USERS LAST_^1_%ENA 4_^1_%STA* PRITYC_^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+0_$BIT 0_^1_%SAZ REED_^1_%JMP* WREC_^1REED_!JMP* WREC1_^1_%SPC 3_^1M608_!LDA- ABUFF,I_%PACK/UNPACK BUFFER IN PHYSTB_^1_%STA* FWA_*SET FWA TO FIRST ALLOC_^1_%LDA- PHSREC,I_$MAX PHYSICAL RECORD SIZE_^1_%SUB- 0_,2 WORD INSTRUCT€€ION_^1NUMBR NUM 0_,NUMBER OF WORDS TO TRANSFER_^1_%SAP NUMOK_(NUMBER WORDS LESS THAN OR EQUAL PHYSIC_^1_%LDA* NUMBR_^1_%RTJ PRUCMP_'CHK IF LAST PRU.LT.NOISE RECORD_$*_^1_%STA* NUMBR_^1NUMOK LDA- ESTAT1,I_^1_%AND- BITMSK+3_$BIT 3_^1_%SAN LWACAL_^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_^1_%AND- BITMSK+0_$BIT 0_^1_%SAN WRITEI_^1_%ENA 4_^1_%STA* PRITYC_'PARITY ODD FOR BINARY_^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+3_$BIT 3_^1_%SAZ RREC_^1_%ENA 2_^1_%STA* PRITYC_^1_%ENA 0_^1RREC_!JMP* WREC1_^1_%SPC 3_^1WRITEI ENA 4_^1_%STA* PRITYC_'SET PARITY CODE FOR ODD_^1€€_%LDA- ESTAT1,I_^1_%AND- BITMSK+3_$BIT 3_^1_%SAN WASC_^1_%LDA* FWA_^1_%LDQ* LWA_^1_%RTJ UNPK_)CONVERT BINARY TO ASSY/DASSY_^1_%JMP* WREC_^1WASC_!LDA* FWA_^1_%LDQ* LWA_^1_%RTJ ASCBCD_'CONVERT ASCII TO BCD FOR WRITE_^1_%ENA 2_^1_%STA* PRITYC_'SET PARITY CODE FOR EVEN_^1WREC_!RTJ CHKSUM_'GO CHECK SUM RECORD 1ST 16_^1_%STA- TCKSUM,I_^1_%ENA 1_^1WREC1 STA* MOTIDX_^1_%EJT_]_^1IOXF€€ER LDA* PRITYC_'PARITY CODE 1, OR 2_^1_%RTJ* UNTSEL_^1_%ALS 15_^1_%SAM TAPRDY_^1_%JMP NORDY_^1TAPRDY LDA- ESTAT1,I_^1_%AND- BITMSK+0_$BIT 0_^1_%SAZ IOCONT_^1_%RTJ RINGCK_^1IOCONT LDQ* MOTIDX_%MOTION CODE INDEX_^1_%LDA* RWMOTN,Q_^1_%STA* FUNCT1_'SET FUNCTION CODES_^1_%LDQ* FWA_^1_%INQ -1_^1_%STQ* FWADR_^1_%LDA- (ZERO),Q_^1_%STA* SAVFWA_^1_%LDA* LWA_^1_%IIN 0_,STORE_!LWA+1 IN €€FWA-1_^1_%STA- (ZERO),Q_^1_%TRQ A_^1_%LDQ- EWES,I_^1_%INQ 2_^1_%OUT BUFREJ-*_$LOAD FWA-1_^1NMARD INP BUFREJ-*_^1_%SUB* FWA_*DIFFERENCE NMA,FWA_^1_%SAP 1_Q7_^1_%JMP* NMARD_^1_%LDA- 0_,2 WORD INSTRUCTION_^1SAVFWA NUM 0_,USERS FWA-1_^1_%LDQ- 0_,2 WORD INSTRUCTION_^1FWADR NUM 0_^1_%STA- (ZERO),Q_$RESTORE CONTENTS OF FWA-1_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%LDA- 0_,2 WORD INSTRU€€CTION_^1FUNCT1 NUM 0_,READ/WRITE MOTION FUNCTION_^1_%ENQ 0_^1_%RTJ* OUT_*READ/WRITE MOTION_^1_%ENA 5_^1_%STA- EDCLK,I_^1_%JMP- (DISP)_^1_%EJT_]_^1BUFREJ JMP* BB_+INTERNAL REJECT_^1_%ENA 6_,EXTERNAL REJECT_^1BA_#STA- ETEMP2,I_$SAVE AS ERROR CODE_^1_%LDA* SAVFWA_^1_%LDQ* FWADR_^1_%STA- (ZERO),Q_$RESTORE FWA-1_^1_%JMP FAILED+1_^1BB_#ENA 5_^1_%JMP* BA_^1_%SPC 5_^1RWMOTN NUM $108€€_)READ,EOP,_^1_%NUM $98_*WRITE,EOP_^1MOTIDX NUM 0_,AN INDEX INTO RWMOTN_^1PRITYC NUM 1_,PARITY CODE_^1FWA_"NUM 0_^1LWA_"NUM 0_^1SAVLWA NUM 0_^1SAVEIT NUM 0_Q7_^1_%SPC 5_^1IN_#NUM 0_,RETURN ADDRESS OF IN SUBROUTINE_^1_%ADQ- EWES,I_'ADD IN EQUIPMENT CODE_^1_%INP INRJT-*_^1_%JMP* (IN)_)RETURN_^1_%SPC 5_^1INRJT JMP* INCODE_^1_%ENA 6_,EXTERNAL REJECT CODE_^1FAILX JMP FAIL€€ED_'GO TO FAILED ROUTINE_^1INCODE ENA 5_^1_%JMP* FAILX_^1_%SPC 5_^1OUT_"NUM 0_,RETURN ADDRESS OF OUT SUBROUTINE_^1_%ADQ- EWES,I_'ADD IN EQUIPMENT CODE_^1_%OUT INRJT-*_^1_%JMP* (OUT)_(RETURN_^1_%EJT_]_^1UNTSEL NUM 0_^1_%ADD- UNTMOD,I_$ADD UNIT AND MODE SELECT BITS_^1_%STA* CONCOD_^1_%EOR* LSTCON_'CHECK AGAINST LAST CONNECT AND DIRECTI_^1US1_"SAM US2_*SKIP IF DIRECTION CHANGE_^€€1_%LDA- BITMSK+12_^1_%STA- ETEMP1,I_$SET MASK TO CHECK CONTROLLER ACTIVE_^1_%JMP* US3_^1US2_"LDA- BITMSK+1_^1_%STA- ETEMP1,I_$SET MASK TO CHECK BUSY_^1US3_"ENQ 0_^1_%RTJ* IN_+GET STATUS 1_^1_%AND- ETEMP1,I_$CHECK SELECTED STATUS_^1_%SAZ SLTIT_(SKIP IF BIT NOT SET TO SELECT_^1_%JMP* CKBUSY_'WAIT FOR NOT BUSY AT LEVEL 3_^1SLTIT LDA* CONCOD_'CONNECT CODE TO A_^1_%STA* LSTCON_'UPDAT€€E LAST CONNECT_^1_%AND- LOWBTS+14_#MASK OFF DIRECTION BIT_^1_%ENQ 1_^1_%RTJ* OUT_*CONNECT TO UNIT_^1_%RTJ* STATUS_'UPDATE STATUS_^1_%JMP* (UNTSEL)_$RETURN TO USER_^1_%SPC 3_^1CONCOD NUM 0_^1LSTCON NUM 0_,PREVIOUS CONNECT AND DIRECTION_^1_%SPC 3_^1CKBUSY LDQ- I_,PASS PHYSTB ADDRESS_^1_%RTJ- ($F4)_(SCHDLE BUSYCK,3,,1_^1_%NUM $5203_^1BSYAD1 ADC BUSYCK_^1_%JMP- (DISP)_'EXIT TO €€DISPATCHER_^1BUSYCK STQ- I_,SAVE PHYSTB ADDRESS_^1_%ENQ 0_^1_%RTJ* IN_+GET STATUS_^1_%AND- ETEMP1,I_$CHECK SELECTED STATUS_^1_%SAZ NOBUSY_'SKIP IF BIT NOT SET_^1_%JMP* CKBUSY_'RESCHEDULE BUSYCK_^1NOBUSY LDQ- I_,PASS PHYSTB ADDRESS_^1_%RTJ- ($F4)_(SCHDLE NOBSY1,X,,1_^1DVRLVL NUM $520A_^1BSYAD2 ADC NOBSY1_^1_%JMP- (DISP)_^1NOBSY1 STQ- I_,SAVE PHYSTB ADDRESS_^1_%JMP* SLTIT_(GO SE€€LECT UNIT_^1_%EJT_]_^1*_]_^1*_*STATUS BIT POSITIONS_^1*_]_^1*_$BIT_/MEANING_^1*_%0_*READY_^1*_%1_*BUSY_^1*_%2_*PE WARNING_^1*_%3_*PE LOST DATA_^1*_%4_*END OF OPERATION_^1*_%5_*ALARM_^1*_%6_*LOST DATA_^1*_%7_*CONNECTED TO PE TRANSPORT_^1*_%8_*PARITY ERROR_^1*_%9_*END OF TAPE_^1*_$10_*LOAD POINT_^1*_$11_*FILE MARK_^1*_$12_*556 BPI_^1*_$13_*800 BPI_^1*_$14_*SEVEN TRACK_^1*_$15_*WRITE €€ENABLE_^1*_]_^1_%SPC 5_^1STATUS NUM 0_,READ STATUS 1, 2 AND STORE IN ESTAT2_^1_%ENQ 1_^1_%RTJ* IN_+READ STATUS 2_^1_%AND- LOWBTS+7_$($00FF) SAVE BITS 7-0 ONLY_^1_%CLR Q_^1_%LLS 9_,BIT 7 TO Q_^1_%QLS 3_,ZERO 3 BITS_^1_%LLS 5_,BITS 2-6 TO Q_^1_%QRS 1_,WASTE BIT_^1_%LRS 2_,REPOSITION A BITS_^1_%QLS 2_,REPOSITION Q BITS_^1_%EAQ A_,COMBINE IN A_^1_%STA- ESTAT2,I_^1_%ENQ 0_^1€€_%RTJ* IN_+READ STSUS 1_^1_%AND =N$F73_'MASK OFF UNWANTED BITS_^1_%ADD- ESTAT2,I_$COMBINE WITH STATUS 2_^1_%STA- ESTAT2,I_^1_%JMP* (STATUS)_^1_%EJT_]_^1C17323 STQ- I_^1_%ENA 2_^1_%ENQ 0_^1_%RTJ* OUT_*CLEAR INTERRUPTS_^1_%ENQ 2_^1_%RTJ* IN_^1_%LDQ LSTPT_(CHECK FOR GHOST INT AND SET LAST_^1_%SQN TAPC06_'PHYSTB ADDRESS. SKIP IF NO GI._^1_%JMP EXIT_)EXIT IF NOT EXPECTED_^1TAPC06€€ STQ- I_^1_%STA* SAVEIT_'SAVE NMA-1 (LWA)_47_^1_%ENA -0_^1_%STA- EDCLK,I_%CLEAR DIAGNOSTIC CLOCK_^1_%LDA- ESTAT1,I_$DO NOT CHECK FWA AND LWA_,7_^1_%ALS 10_+IF A MOTION REQUEST_17_^1_%SAP UPDAT_(NO MOTION REQUEST_37_^1_%JMP* TAPC2_(MOTION REQUEST_67_^1UPDAT LDA* SAVEIT_L7_^1_%LDQ* LWA_O7_^1_%STQ* SAVLWA_L7_^1_%STA* LWA_O7_^1_%LDQ* FWA_*FWA OF BUFFER._4**M_^1_%RTJ COMPV4_'CHECK €€IF CURRENT ADDRESS IS WITHIN **M_^1_%SAZ TAPC1_(BUFFER BOUNDARY._2**M_^1_%SAP TAPC1_K**M_^1BUFERR ENA 37_^1_%JMP FAILED_J**M_^1TAPC1 LDQ* LWA_*CURRENT ADDRESS._2**M_^1_%LDA* SAVLWA_'BUFFER LWA._7**M_^1_%RTJ COMPV4_J**M_^1_%SAZ TAPC2_K**M_^1_%INA 0_O**M_^1_%SAN TAPC2_K**M_^1_%JMP* BUFERR_'YES_^1TAPC2 RTJ* STATUS_'GET FRESH STATUS_^1_%LDA- ESTAT2,I_^1_%ALS 15_^1_%SAM REDY€€_^1NORDY ENA 14_^1_%JMP FAILED_^1REDY_!LDQ- RTRECV,I_$CHECK FOR RECOVERY I/O_^1_%JMP* REDY3,Q_%CONTINUE OR EXIT TO RECOVERY_^1REDY3 LDA- ESTAT1,I_$CHECK MOTION REQUEST_^1_%ALS 10_+MOTION BIT IN A15_^1_%SAP NOMO1_^1_%JMP NXTMOT_'EXCUTE NEXT MOTION_^1NOMO1 ALS 5_,CHECK FOR READ_^1_%SAP 1_,SKIP IF READING_^1_%JMP* NOEF_)BYPASS CHECK IF WRITING_^1_%LDA- ESTAT2,I_$PICK UP STAT€€US_^1_%ALS 4_,EOF STATUS TO BIT 15_^1_%SAP NOEF_)SKIP IF NOT FILE MARK/TAPE MARK_^1_%JMP* ATEOF_(GOT END OF FILE_^1NOEF_!LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 10_+ALARM TO BIT 15_^1_%SAM ALRMCK_'SKIP IF ALARM TO CHECK REASON_^1_%JMP* NOALRM_'NO ALARM, CONTINUE_^1ALRMCK LDA- ESTAT2,I_$PICK UP STATUS_^1_%AND =N$3000_%SAVE ONLY DENSITY BITS_^1_%SAN ALRMC2_'SKIP IF TRANSPORT AT 5€€56 OR 800 BPI_^1_%LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 12_+PE LOST DATA ERROR TO A15_^1_%SAP ALRMC1_'SKIP IF NO ALARM_^1_%ENA PELOSD_'ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1ALRMC1 ENQ 1_^1_%RTJ IN_+GET STATUS 2_^1_%AND- BITMSK+8_$CHECK FOR ID ABORT_^1_%SAZ ALRMC2_'SKIP IF NO ALARM_^1_%ENA ABORTE_'ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1ALRMC2 LDA- EST€€AT2,I_$STATUS TO A_^1_%ALS 7_,BIT 8 (PARITY) TO BIT 15_^1_%SAP ALRMC3_'SKIP IF NO PARITY ERROR_^1_%ENA 3_,ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1ALRMC3 ALS 2_,BIT 6 (LOST DATA)_^1_%SAP NOALRM_'SKIP IF NO ERROR_^1_%ENA 1_,ERROR CODE TO A_^1_%JMP* RECVR_(EXIT TO RECOVERY_^1NOALRM LDQ FWA_^1_%LDA LWA_^1_%RTJ* NOISCK_'CHECK FOR SNR_77_^1_%JMP* RECV2_(NOT SNR_=7_^1IO€€DO_!LDA SAVLWA_^1_%STA LWA_O7_^1_%JMP IOXFER_L7_^1RECV2 LDA- ESTAT1,I_J7_^1_%AND- BITMSK+0_^1_%SAZ NOWRIT_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_^1NOWRIT LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK STATUS IN A15_^1_%SAM RECCMP_^1_%LDA LWA_^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_^1_%J€€MP* WRITEC_^1READC LDA- ESTAT2,I_^1_%ALS 4_,FILE MARK STATUS IN A15_^1_%SAP NOFILE_^1ATEOF LDA- EREQST,I_^1_%ADD- BITMSK+14_#BIT 14_^1_%STA- EREQST,I_^1_%JMP* CMPRD_^1NOFILE LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK IN A15_^1_%SAM CKMOD_^1_%JMP* WRITEC_^1CKMOD LDQ- ESTAT1,I_^1_%LRS 4_,ASC BIT IN A15_^1_%SAP CKMOD1_'SKIP IF BINARY MODE_^1_%JMP* BCDASK_^1CKMOD1 LDA- ECCOR,I_^1_%STA* €€SNRADR_^1_%LDA FWA_^1_%LDQ LWA_^1_%RTJ PACK_)CONVERT ASSY/DASSY TO BINARY_^1_%LDA- ECCOR,I_^1_%LDQ* SNRADR_^1_%RTJ* NOISCK_^1_%JMP* WRITEC_^1_%LDA* SNRADR_^1_%STA- ECCOR,I_^1_%JMP* IODO_^1_%SPC 2_^1SNRADR NUM 0_^1_%SPC 2_^1BCDASK LDA FWA_^1_%LDQ LWA_^1_%RTJ BCDASC_^1_%SPC 2_^1WRITEC LDQ- ESTAT1,I_^1_%LRS 2_,FORMAT BIT IN A15_^1_%SAM COMPL_^1_%LDA- ELSTWD,I_^1_%SUB- ECCO€€R,I_%GET DIFFERENCE OF LAST AND FIRST_^1_%SAZ COMPL_^1_%JMP XFER_^1COMPL LDA- ESTAT1,I_^1_%AND- BITMSK+5_^1_%SAN COMPLT_^1CMPRD RTJ MAKEQ_^1COMPLT RTJ- (COMPRQ)_$COMPLETE THE REQUEST_^1_%JMP FIND_^1_%SPC 2_^1NOISCK NOP 0_^1_%RTJ COMPV4_'GET TRANSFER LENGTH_^1_%INA -NOISLN_^1_%SAZ NOISE_^1_%SAP NONOIS_^1NOISE RAO* NOISCK_^1NONOIS JMP* (NOISCK)_^1_%SPC 2_^1RECVR STA €€ERRNO_^1_%LDA- ESTAT2,I_^1_%AND- BITMSK+11_#BIT 11_^1_%SAZ RECV_^1_%LDA- EREQST,I_^1_%ADD- BITMSK+14_#BIT 14_^1_%STA- EREQST,I_^1_%JMP* COMPL_^1_%SPC 3_^1TIMES NUM 0_^1TRIES NUM 0_^1_%SPC 3_^1RECV_!LDQ- ELU,I_^1_%TRQ A_,LOGICAL UNIT TO A_^1_%EOR- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%SAN T00001_'IT''S NOT, CONTINUE_^1_%JMP* LPRTN_^1T00001 QLS 6_^1_%ADQ ERRNO_^1_%ENA 15_€€^1_%RTJ LOG_^1_%LDA FWA_*ORIGINAL FWA_^1_%STA* TEMFWA_^1_%LDA MOTIDX_'MOTION INDEX_^1_%STA* TEMIDX_^1_%LDA SAVLWA_'ORIGINAL LWA_^1_%STA* TEMLWA_^1_%LDA- ESTAT1,I_$CHK 4 READ OR WRITE_^1_%AND- BITMSK+0_^1_%SAN WRCVRO_'SKIP IF WRITE_^1_%JMP RRCVR_^1_%SPC 2_^1BKSPCT BSS BKSPCT(1)_^1NBRBSP BSS NBRBSP(1)_^1TEMIDX NUM 0_^1TEMFWA NUM 0_^1TEMLWA NUM 0_^1_%SPC 2_^1WRCVRO CLR A€€_^1_%STA* NBRBSP_^1_%STA* TRIES_^1_%ENA 5_^1_%STA* TIMES_^1WRCVR LDA* TIMES_^1_%SAN DEBUMP_^1LPRTN ENA 0_^1_%STA- RTRECV,I_^1_%LDA ERRNO_^1_%JMP FAILED_^1DEBUMP INA -1_^1_%STA* TIMES_^1CLRBKP CLR A_,CLEAR BKSP CNTR_^1_%STA* BKSPCT_^1WRCVR1 LDA- ESTAT2,I_$CHK 4 LP_^1_%ALS 5_^1_%SAP NOLP_)SKIP IF NO LP_^1_%JMP* CKBKSP_'CHK BKSPCT_^1NOLP_!RTJ BKSSP_(BACKSPACE_^1_%RAO* NBRB€€SP_^1_%RAO* BKSPCT_^1_%LDA- ERDIRC,I_$FD FROM PHYSTB_^1_%SAP REREAD_'TRY READ NEXT_^1_%ALS 1_,UPDATE DIRECTORY_^1_%STA- ERDIRC,I_$RESTORE FD_^1_%JMP* WRCVR1_'CONTINUE DASHING_^1REREAD ENQ 0_,PICK UP MOTION INDEX_^1_%RTJ* SWAP_*SET UP READ._^1_%RTJ* CALAD_^1DUMRD ENQ 0_^1_%RTJ* SWAP_*SET UP READ._^1_%RTJ* CALAD_^1_%ALS 8_,CHECK FOR PARITY_^1_%SAP READOK_'SKIP IF NO ERROR_^1CO€€RRFD LDA- ERDIRC,I_$FD Z A_^1_%ALS 1_^1_%SAP SHFT_)MID-RECV CORR NEEDED_^1_%STA- ERDIRC,I_^1_%JMP* CLRBKP_^1SHFT_!ALS 1_^1_%STA- ERDIRC,I_^1_%JMP* WRCVR_^1READOK RTJ* CHKSUM_^1_%EOR- ECKSUM,I_$CHKSUMS EQUAL_^1_%SAZ CKSMOK_'YES_^1_%JMP* CORRFD_'NO_^1CKSMOK LDA =N$DCDC_%RESET_^1_%STA- ERDIRC,I_$FD_^1RTYSNR ENQ 1_^1_%RTJ* SWAP_^1_%RTJ* CALAD_(WRITE SNR_^1_%ALS 8_,CHECK FOR PARI€€TY_^1_%SAP WRTEOF_'SKIP IF NO PARITY_^1_%RTJ* BKSSP_^1_%CLR A_,SET EOF FLAG_^1_%RTJ* BKSSP_(WRITE EOF OVER BAD SPOT_^1_%RTJ* BKSSP_(BKSSP EOF_^1_%JMP* RTYSNR_'RETRY WRITING THE SNR._,**M_^1WRTEOF LDA* TRIES_^1_%INA -TRYNBR_^1_%SAN CONEOF_^1_%JMP* LPRTN_^1CONEOF RAO* TRIES_^1_%ENA 0_^1_%RTJ* BKSSP_^1_%RTJ* BKSSP_^1_%ENQ 1_^1_%RTJ* SWAP_^1_%RTJ* CHKSUM_(CHECK SUM SNR._^1_%STA- €€TCKSUM,I_^1_%RTJ* CALAD_^1_%ALS 8_,CHECK FOR PARITY_^1_%SAP ADVRCV_^1_%RTJ* BKSSP_^1_%JMP* WRTEOF_^1ADVRCV LDA* TEMIDX_'ORIGINAL MOTIDX_^1_%STA MOTIDX_^1_%LDA* TEMFWA_'ORIGINAL FWA_^1_%STA FWA_^1_%LDA* TEMLWA_'ORIGINAL LWA_^1_%STA LWA_^1_%LDA- TCKSUM,I_^1_%STA- ECKSUM,I_^1_%RTJ* CHKSUM_^1_%STA- TCKSUM,I_^1_%RTJ* CALAD_^1_%RTJ STUSCK_^1_%JMP* ADVRV_^1_%LDA* ERRNO_^1_%JMP RECV€€R_^1ADVRV CLR A_^1_%STA- RTRECV,I_^1_%LDA* ERRNO_(CHECK IF SWITCH MODE RECOVERY._^1_%INA -MODCOD_^1_%SAZ YESMOD_'SKIP IF MODE RECOVERY,_^1_%JMP NOALRM_^1YESMOD LDA- ESTAT2,I_$SET PSEUDO PE BIT._^1_%EOR- BITMSK+8_^1_%STA- ESTAT2,I_^1_%LDA- EREQST,I_$SET V BIT 14._^1_%EOR- BITMSK+14_^1_%STA- EREQST,I_^1_%JMP CMPRD_^1_%SPC 3_^1CKBKSP LDA* BKSPCT_^1_%INA -3_^1_%SAM CKBK1_^1_%J€€MP* DUMRD_^1CKBK1 LDA* NBRBSP_^1_%INA -2_^1_%SAZ CKBK2_^1_%JMP* LPRTN_^1CKBK2 JMP* CKSMOK_^1_%SPC 3_^1SWAP_!NOP 0_^1_%STQ MOTIDX_^1_%RTJ* CALCUT_^1CALCUT NOP 0_^1_%SQN USNR_^1_%ENA READBF-CALCUT RELATIVE ADDRESS OF BUFFER_^1_%JMP* SWAP1_^1USNR_!ENA SNR-CALCUT_"RELATIVE ADDRESS OF SNR_^1SWAP1 ADD* CALCUT_^1_%STA FWA_^1_%ADD* LWATAB,Q_^1_%STA LWA_^1_%JMP* (SWAP)_^1_%SPC€€ 3_^1ERRNO NUM 0_,ERROR NUMBER_^1LWATAB NUM 8_^1_%NUM 2_^1READBF BSS READBF(8)_^1SNR_"NUM $2D2E_^1_%NUM $2D2E_^1_%SPC 3_^1CALAD NOP 0_^1_%LDA =XALLRTN-REDY3_^1_%STA- RTRECV,I_^1_%JMP IOXFER_^1ALLRTN JMP* (CALAD)_^1_%SPC 3_^1CHKSUM NOP 0_^1_%LDA LWA_^1_%INA -1_+LWA+1 TO LWA_^1_%SUB FWA_*CALCULATE NBR OF WORDS_^1_%TRA Q_,Q=INDEX_^1_%INA -8_^1_%SAM BEGNCK_^1_%ENQ €€ 7_^1BEGNCK CLR A_,ZERO COUNTERS_^1GTBITS ADD (FWA),Q_^1_%SQZ DONBIT_^1_%INQ -1_^1_%JMP* GTBITS_^1DONBIT JMP* (CHKSUM)_^1_%SPC 3_^1BKSSP NOP 0_^1_%SAZ ERRMOT_^1_%LDA- BITMSK+12_^1_%JMP* WIGGLE_^1ERRMOT LDA- WRITFM_^1WIGGLE LDQ =XBKSPRN-REDY3_^1_%STQ- RTRECV,I_^1_%RTJ XCTMOT_^1BKSPRN LDA- ZROBIT+5_%CLEAR MOTION FLAG_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* (BKSSP)_^1_€€%SPC 3_^1SWMOD NOP 0_^1_%LDA PRITYC_^1_%INA -2_+SWITCH_^1_%SAN BCDING_'MODE_^1_%ENA 4_^1BCDING STA PRITYC_^1_%JMP* (SWMOD)_^1_%SPC 3_^1TOTLSW NUM 0_^1_%SPC 3_^1ADVREV JMP* ADVRV_^1_%SPC 3_^1RRCVR LDA SAVLWA_^1_%STA LWA_^1_%LDA- STOLSW_^1_%STA* TOTLSW_^1LOPAGN CLR A_,SET SWS_^1_%STA* PINTCT_^1_%ENA -0_^1RRCVR1 RTJ* BKSSP_(BKSP_^1_%RTJ* CALAD_^1_%RTJ* STUSCK_'CHK STA€€TUS_^1_%JMP* ADVREV_^1_%LDA- 0_,THIS LOOP COMPLETE_^1PINTCT NUM 0_^1_%EOR- TERM_^1_%SAZ STEP2_^1_%RAO* PINTCT_^1_%JMP* RRCVR1_'CONTINUE_^1STEP2 STA* PINTCT_^1_%LDA- ESTAT2,I_^1_%ALS 1_^1_%SAM SWCHMD_^1_%JMP* NONEED_^1SWCHMD RTJ* SWMOD_^1_%RTJ* BKSSP_(BKSP_^1_%RTJ* CALAD_^1_%RTJ* STUSCK_^1_%JMP* MODERR_^1_%RTJ* BKSSP_^1_%RTJ* CALAD_^1_%RTJ* STUSCK_'CHK STATUS_^1_%JMP* MODERR_'A€€DVISE OF MODE ERR_^1_%RTJ* SWMOD_^1NONEED RTJ* BKSSP_^1_%RTJ* BKSSP_(BKSP_^1_%RTJ* CKPINT_^1_%RAO* PINTCT_'ADD ONE LOAD POINT_^1_%RTJ* BKSSP_(BKSP_^1_%RTJ* CKPINT_^1_%RTJ* CALAD_^1RELRD2 RTJ* CALAD_^1RELRD1 RTJ* CALAD_^1_%RTJ* STUSCK_^1_%JMP* ADVREV_^1_%LDA* TOTLSW_^1_%SAP DONOW_(SKIP IF DONE_^1_%ALS 1_^1_%STA* TOTLSW_^1_%JMP* LOPAGN_'GO LOOP AGAIN_^1DONOW LDA* ERRNO_^1_%ENQ 0_€€^1_%STQ- RTRECV,I_^1_%JMP* FAILED_^1_%SPC 3_^1MODERR ENA MODCOD_'SET SWITCH MODE CODE._^1_%STA* ERRNO_^1_%JMP* ADVREV_^1_%SPC 3_^1STUSCK NOP 0_^1_%LDA- ESTAT2,I_^1_%ALS 7_^1_%SAP GODST_(SKIP ID GOOD_^1_%RAO* STUSCK_^1GODST JMP* (STUSCK)_^1_%SPC 3_^1CKPINT NOP 0_^1_%LDA- ESTAT2,I_^1_%ALS 5_^1_%SAM PINT_^1_%JMP* (CKPINT)_^1PINT_!LDA* PINTCT_^1_%SAN NOT1_^1_%STA* TOTLSW_^1€€_%JMP* RELRD1_^1NOT1_!JMP* RELRD2_^1_%EJT_]_^1E17323 LDA LSTPT_^1_%STA- I_^1_%CLR A_,HANGUP CODE IN A_^1_%SPC 5_^1FAILED STA- ETEMP2,I_$ENTRY FOR FAILURES_^1_%ENA 0_Q7_^1_%STA MOTITR_'CLR A15 WRD4 IF SET_17_^1_%EIN 0_^1_%LDA- EREQST,I_^1_%ADD- BITMSK+14_^1_%STA- EREQST,I_^1_%LDA- ESTAT1,I_^1_%AND- BITMSK+5_$CHECK MOTION_87_^1_%SAZ NOTRW_^1_%EOR- ESTAT1,I_$CLEAR THE MOTION BI€€T_^1_%STA- ESTAT1,I_^1_%AND- BITMSK+6_$CHECK REWIND BIT_^1_%SAZ NOTRW_^1_%EOR- ESTAT1,I_^1_%STA- ESTAT1,I_$CLEAR REWIND BIT_^1_%LDA RW_^1_%INA -1_^1_%STA RW_^1NOTRW LDQ- EWES,I_^1_%ENA 1_^1_%OUT 1_,CLEAR CONTROLLER AFTER FAILURE_^1_%NOP 0_^1_%RTJ MAKEQ_^1_%LDQ- ETEMP2,I_^1_%QLS 10_^1_%ADQ- ELU,I_(COMBINE LU NUMBER WITH ERROR CODE_^1_%QLS 6_,POSITION_^1_%RTJ LOG_*GO LOG €€ERROR_^1_%LDA- ELU,I_(CURRENT LOGICAL UNIT_^1_%EOR- DIAGLU,I_$CHECK IF DIAGNOSTIC LOGICAL UNIT_^1_%SAZ CMPLIT_'IT IS, COMPLETE REQUEST_^1XXX_"SCHDLE ALTDEV,0,,1_^1_%JMP NXTPT_(CONTINUE SEARCH FOR WAITING REQUEST_^1_%EJT_]_^1MOTION LDQ- EPTR,I_^1_%LDA- 4,Q_*GET USER-S CONTROL WORD_^1_%RTJ* XCTMOT_^1CMPLIT JMP COMPLT_^1_%SPC 3_^1XCTMOT NUM 0_,USED BY MOTION AND RECOVERY_^1_%STA€€- ETEMP2,I_$SAVE MOTION CONTROL IN A_^1_%LDA- ESTAT1,I_^1_%ADD- BITMSK+5_$SET MOTION REQ. BIT_^1_%STA- ESTAT1,I_^1_%LDA- ETEMP2,I_^1_%SAM NODENS_'SKIP IF ITERATIVE REQUEST_^1_%AND- LOWBTS+3_"SAVE DENSITY (0-3) ONLY_^1_%STA* DENCOD_'SAVE DENSITY_^1_%LDA- ETEMP2,I_^1_%AND- HIHBTS+4_$REMOVE DENSITY_^1_%STA- ETEMP2,I_^1_%JMP* DOMOT_^1NODENS AND- LOWBTS+11 MASK OUT INTERATIONS_^1_%STA€€ MOTITR_'SAVE ITERATIONS_^1_%LDA- ETEMP2,I_^1_%AND- HIHBTS+12_#MASK MOTION INDEX TO TERMINATE_^1_%STA- ETEMP2,I_^1DOMOT LDA- ETEMP2,I_^1_%ARS 12_^1_%AND- LOWBTS+14-12_^1_%STA* MOTCOD_'SAVE MOTION CODE_^1_%INA -4_+OFFSET TO GET COMPLEMENT OF DIRECTION_^1_%TCA A_^1_%AND- BITMSK+0_$SAVE BIT 0 (DIRECTION) ONLY_^1_%ALS 15_+DIRECTION TO BIT 15_^1_%INA 4_,SET BINARY MODE_^1_%RTJ U€€NTSEL_'SELECT UNIT_^1_%LDQ* MOTCOD_'PICK UP MOTION CODE_^1TABDEX JMP* SUBMOT,Q_$INDEX ON MOTION CODE_^1_%SPC 2_^1DENCOD NUM 0_^1MOTCOD NUM 0_^1_%EJT_]_^1SUBMOT JMP* DONEM_(DONE OR DENSITY_)0_^1_%JMP* BKSP_)BACKSPACE RECORD_(1_^1_%JMP* WRFM_)WRITE FILE MARK_)2_^1_%JMP* REW_*REWIND_23_^1_%JMP* REWUN_(REWIND UNLOAD_+4_^1_%JMP* MOTSTR_'SEARCH FILE FORWARD_$5_^1_%JMP* FLBK_)SEARCH FI€€LE BACKWARD_#6_^1_%JMP* ADVR_)ADVANCE RECORD_*7_^1_%SPC 5_^1MCODS NUM $189_)BACKSPACE RECORD_^1_%NUM $289_)WRITE FILE MARK_^1_%NUM $401_)REWIND_^1_%NUM $401_)REWIND UNLOAD_^1_%NUM $309_)ADVANCE FILE_^1_%NUM $389_)BACKSPACE FILE_^1_%NUM $109_)ADVANCE RECORD_^1_%SPC 5_^1MOTSTR LDA* MCODS-1,Q_#GET MOTION CODE, INDEXED BY Q_^1_%ENQ 0_^1_%RTJ OUT_*GO OUTPUT_^1_%ALS 12_+EOP €€REQUEST IN A15_^1_%SAP EOPNOT_^1_%LDA- $B_+H01FF_^1_%STA- EDCLK,I_^1_%JMP- (DISP)_^1EOPNOT LDA* MOTCOD_^1_%INA -4_+CHECK FOR 'REWIND UNLOAD' REQUEST_^1_%SAZ DONEM_(SKIP IF IT IS TO COMPLETE THE REQUEST_^1_%LDQ- I_,SCHEDULE REWIND CHECK_^1_%SCHDLE REWCK,3,,1_^1_%JMP NXTPT_^1_%EJT_]_^1DONEM LDA* DENCOD_'PICK UP DENSITY_^1_%SAN 1_,SKIP IF DENSITY REQUEST_^1_%JMP* NODEN_^1_%LDQ-€€ ESTAT2,I_$PICK UP STATUS_^1_%QLS 5_,LOAD POINT TO BIT 15_^1_%SQM DEN1_)AT LOAD POINT, OK FOR DENSITY SELECT_^1_%JMP* DENERR_'ERROR, NOT AT LOAD POINT_^1DEN1_!LDA- ESTAT2,I_^1_%ALS 1_,7 TRACK STATUS TO BIT 15_^1_%SAP CK800_(SKIP IF 9 TRACK,OK_^1_%LDA* DENCOD_^1_%INA -3_^1_%SAM DEN1A_(SKIP IF 556 OR 800 BPI REQUEST_^1_%JMP* DENERR_'ERROR, 200 OR 1600 BPI ON 7 TRACK_^1DEN1A IN€€A 1_^1_%SAN CK800A_'SKIP IF 800 BPI REQUEST_^1_%ENA $10_^1_%JMP* DENSEL_^1CK800 LDA* DENCOD_^1_%INA -1_+CHECK FOR 800 BPI REQUEST_^1_%SAN CK1600_^1CK800A ENA 8_^1_%JMP* DENSEL_^1CK1600 INA -3_+CHECK FOR 1600 BPI REQUEST_^1_%SAZ 1_^1_%JMP* DENERR_^1_%LDA- ESTAT2,I_$PICK UP STATUS_^1_%ALS 8_^1_%SAP DENERR_'SKIP IF NOT PE CAPABLE TRANSPORT_^1_%ENA $20_^1DENSEL TRA Q_,SAVE€€ DENSITY SELECT IN Q_^1_%ENA -$38_)MASK TO A_^1_%AND- UNTMOD,I_$MASK OFF OLD DENSITY_^1_%AAQ A_,ADD IN NEW DENSITY_^1_%STA- UNTMOD,I_$SET BACK IN PHYSTB_^1NODEN LDA- ZROBIT+5_^1_%AND- ESTAT1,I_^1_%STA- ESTAT1,I_^1_%JMP* (XCTMOT)_$RETURN TO CALLER_^1_%SPC 5_^1DENERR ENA ERRDEN_'DENSITY ERROR CODE_^1_%JMP FAILED_^1_%EJT_]_^1WRFM_!RTJ* RINGCK_^1_%JMP* MOTSTR_^1_%SPC 3_^1REW_"RT€€J* LPCHK_(CHECK FOR LOAD POINT, RETURN IF NOT L._^1_%LDA- ESTAT1,I_^1_%AND- ZROBIT+6_^1_%ADD- BITMSK+6_^1_%STA- ESTAT1,I_^1_%RAO RW_^1_%JMP* MOTSTR_'START MOTION_^1_%SPC 3_^1BKSP_!RTJ* LPCHK_^1_%ENQ 1_,NOT LP SO BACKSPACE RECORD_^1_%JMP* MOTSTR_'START BACKSPACE RECORD_^1_%SPC 3_^1REWUN ENA 0_^1_%STA* MOTITR_'0 INTO ITERATIONS_^1_%STA- ETEMP2,I_$CONTROL TO 0 TO TERMINATE_^1_%S€€TA* DENCOD_'CLEAR POSSIBLE DENSITY SELECTION_^1_%LDA- ESTAT2,I_^1_%AND- ZROBIT_'CLEAR READY_^1_%STA- ESTAT2,I_^1_%JMP* MOTSTR_^1_%SPC 3_^1FLBK_!RTJ* LPCHK_(CHECK LOAD POINT_^1_%JMP* MOTSTR_'START FILE BACKWARD SEARCH_^1_%SPC 3_^1ADVR_!LDA =XDUMBUF_$FWA-1 OF DUMMY, ZERO LENGTH BUFFER_^1_%ENQ 2_^1_%RTJ OUT_*LOAD FWA-1_^1_%ENQ 7_^1_%JMP* MOTSTR_^1_%SPC 2_^1DUMBUF ADC *+1_^1_%E€€JT_]_^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_%AND- HIHBTS+12_#($F000)_^1_%SAN MOTNXT_'SKIP IF NOT END OF COMMANDS_^1_%STA* MOTITR_'ZERO TO ITERATIONS_^1_%JMP* DONEM_^1MOTNXT JMP DOMOT_(EXECUTE NEXT MOTION_^1NZITR LDA* MOT€€ITR_'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_^1_%EJT_]_^1RINGCK NUM 0_^1_%LDA- ESTAT2,I_^1_%SAP NORING_^1_%JMP* (RINGCK)_^1NORING ENA 13_^1_%JMP FAILED_^1_%SPC 3_^1LPCHK NUM 0_^1_%LDA- ESTAT2,I_^1_%AND- BITMSK+10_€^1_%SAN LODYES_^1_%JMP* (LPCHK)_^1LODYES ENA 0_,YES ON LOAD POINT_^1_%STA* MOTITR_'ZERO ITERATIONS_^1_%JMP* NXTMOT_'NEXT MOTION_^1_%END_]_^__PD17432 CSY/ C72 P€1_%NAM D17432_'DECK-ID C72 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1*_$**********_!DRIVER DESCRIPTION_!**********_^1*_]_^1*_$THIS DRIVER IS FOR THE DJ815-A ASYNCHRONOUS COMMUNICATIONS_^1*_$CONTROLLER. THE DRIVER HAS FIVE MODES OF OP€€ERATION WRITE_^1*_$REQUEST, FORMATTED WRITE REQUEST, READ REQUEST, FORMATTED_^1*_$READ REQUEST, MOTION (T14) REQUEST. THIS DRIVER WILL HANDLE_^1*_$UNSOLICITED INPUT FROM A TIMESHARE TERMINAL_^1*_]_^1*_$FORMATTED WRITE REQUEST - THE REQUEST IS PRECEEDED BY A_^1*_$CARRIAGE RETURN, LINE FEED. THE NUMBER OF WORDS SPECIFIED_^1*_$IS OUTPUT, THE CHARACTER IN THE UPPER BYTE IS OUTPUT FIR€€ST._^1*_$WHEN A CARRIAGE RETURN IS ENCOUNTERED, IT IS AUTOMATICALLY_^1*_$FOLLOWED BY A LINE FEED. IF ZERO WORDS IS SPECIFIED, THE_^1*_$CHARACTER IN THE UPPER BYTE OF THE BUFFER ADDRESS IS OUTPUT._^1*_$MODE HAS NO MEANING AND IS ASSUMED TO BE ASCII_^1*_]_^1*_$WRITE REQUEST - SAME AS FORMATTED REQUEST EXCEPT THAT REQUEST_^1*_$IS NOT PRECEDED BY A CARRIAGE RETURN, LINE FEED AND LINE F€€EEDS_^1*_$DO NOT AUTOMATICALLY FOLLOW CARRIAGE RETURNS WHEN ENCOUNTERED._^1*_]_^1*_$FORMATTED READ REQUEST - THE NUMBER OF WORDS ARE INPUT._^1*_$CHARACTERS ARE PACKED TWO IN EACH WORD WITH THE FIRST_^1*_$CHARACTER IN THE UPPER BYTE. THE DRIVER INPUTS CHARACTERS_^1*_$UNTIL A CARRIAGE RETURN IS ENCOUNTERED. EACH CHARACTER IS_^1*_$CHECKED FOR PROPER PARITY. IF A CANCEL CHARACTER IS E€€N-_^1*_$COUNTERED THE BUFFER IS FILLED WITH ONES BEFORE THE REQUEST_^1*_$IS REPEATED. LINE FEED CHARACTERS ARE IGNORED. A RUBOUT CANCELS_^1*_$ALL DATA WHICH HAS BEEN PREVIOUSLY INPUT, AND A NEW_^1*_$CHARACTER STRING FOLLOWS THE NEXT CARRIAGE RETURN. IN ADDITION TO_^1*_$CARRIAGE RETURN, IT IS POSSIBLE TO SPECIFY TWO SPECIAL INPUT_^1*_$TERMINATIONS CHARACTERS. IT IS POSSIBLE TO SPEC€€IFY ECHOPLEX_^1*_$MODE. A FREAD/READ MADE ON DIAGNOSTIC LOGICAL UNIT_^1*_$IS PROCESSED NORMALLY UNLESS UNSOLICITED INPUT IS IN PROGRESS._^1*_$IN WHICH CASE, THE INPUT IS PREFORMED FOLLOWING THE COMPLETION_^1*_$OF THE UNSOLICITED INPUT. A TIMESHARE LOGICAL UNIT IS ALWAYS_^1*_$IN A READ CONDITION. DATA IS READ INTO A 40 WORD BUFFER_^1*_$ASSOCIATED WITH EACH DEVICE, UNTIL A CARRIAG€€E RETURN IS DETECTED._^1*_$WHEN THIS OCCURS, THE ENTRY POINT OF A CORE RESIDENT INPUT_^1*_$PROCESSOR SPECIFIED IN THE PHYSICAL DEVICE TABLE IS SCHEDULED_^1*_$IF IT IS NONZERO. THE ENTRY IS SCHEDULED WITH THE Q REGISTER_^1*_$CONTAINING THE LOGICAL UNIT_^1*_]_^1*_$READ REQUEST - THE NUMBER OF WORDS SPECIFIED IS INPUT. TWO_^1*_$CHARACTERS ARE PACKED PER WORD. ALL CHARACTERS ARE TRANS€€-_^1*_$FERED AFTER PARITY CHECK._^1*_]_^1*_$MOTION REQUEST - MOTION REQUESTS ARE USED FOR CURSOR CONTROL_^1*_$AS FOLLOWS:_^1*_]_^1*_*1_!BACKSPACE RECORD_$BACKSPACE CURSOR ONE CHARACTER_^1*_*2_!WRITE END OF FILE_#RESET CURSOR TO HOME POSITION_^1*_*3_!REWIND_/RESET CURSOR TO BEGINNING OF LINE_^1*_*4_!REWIND/UNLOAD_(IGNORE_^1*_*5_!ADVANCE FILE_)MOVE CURSOR DOWN ONE LINE_^1*_*6_!BACKSP€€ACE FILE_'MOVE CURSOR UP ONE LINE_^1*_*7_!ADVANCE RECORD_'ADVANCE CURSOR ONE CHARACTER_^1*_]_^1*_$UNSOLICITED READ - (TIMESHARE ONLY) THE DRIVER CHECKS ALL_^1*_$CHANNELS FOR INPUT AT EVERY INTERRUPT PRODUCED BY THE TIMER AND_^1*_$SAVES ALL CHARACTERS WHICH ARE READY FOR INPUT IN A 40 WORD_^1*_$BUFFER LOCATED IN THE PHYSICAL DEVICE TABLE. ALL CHARACTERS_^1*_$INPUT AFTER THE FIRST €€80 ARE IGNORED. A CARRIAGE RETURN OR_^1*_$SPECIAL CHARACTER TERMINATES INPUT AND CAUSES A USER PROGRAM TO_^1*_$BE SCHEDULED WITH THE LOGICAL UNIT IN THE Q REGISTER._^1_%EJT_]_^1*_$ALL I/O OPERATIONS ARE MONITORED FOR ERRORS. WHEN ERROR_^1*_$CONDITIONS ARE DETECTED, AN ERROR CODE IS DETERMINED AS_^1*_$LISTED BELOW._^1*_]_^1*_*DRIVER ERROR CODES:_^1*_]_^1*_,00 = FAILURE TO INTERRUPT€€ (REQUIRES TIMER PACKAGE)_^1*_]_^1*_,01 = LOST CHARACTER_^1*_]_^1*_,02 = ALARM CONDITION DETECTED_^1*_]_^1*_,03 = PARITY ERROR ON INPUT_^1*_]_^1*_,05 = INTERNAL REJECT_^1*_]_^1*_,06 = EXTERNAL REJECT_^1*_]_^1*_,33 = BREAK_^1*_]_^1_%EJT_]_^1************************************************************************_^1*_1SAMPLE PHYSICAL DEVICE TABLE_^1***********************************€€*************************************_^1*_]_^1*_,ENT P1743X_^1*_,EXT I17432,C17432,E17432_^1*_,EQU L17432(10)_#CONTROLLER LEVEL_^1*_$P1743X ADC $5200+L17432_!00 SCHEDULER CALL_^1*_,ADC I17432_(01 INITIATOR ADDRESS_^1*_,ADC C17432_(02 CONTINUATOR ADDRESS_^1*_,ADC E17432_(03 TIMEOUT ERROR ADDRESS_^1*_,NUM -1_,04 DIAGNOSTIC CLOCK_^1*_,NUM 0_-05 CURRENT LOGICAL UNIT_^1*_€€,NUM 0_-06 PARAMETER LIST ADDRESS_^1*_,NUM 0_-07 EQUIPMENT/STATION ADDRESS_^1*_,NUM 0_-08 REQUEST STATUS_^1*_,NUM 0_-09 DRIVER STATUS_^1*_,ADC INBUF_)10 CURRENT LOCATION_^1*_,ADC INBUF+40_%11 LAST LOCATION PLUS ONE_^1*_,NUM 0_-12 HARDWARE STATUS_^1*_,NUM 0_-13 DRIVER LENGTH (M.M. ONLY)_^1*_,NUM 0_-14 SECTOR ADDRESS (M.M. ONLY)_^1*_,NUM 0_-15 TEMPORY STORAGE_^1*_€€,ADC INBUF_)16 START OF BUFFER ADDRESS_^1*_,NUM 0_-17 DIAGNOSTIC LOGICAL UNIT_^1*_,NUM 0_-18 TERMINATION CHARACTERS_^1*_,NUM 0_-19 ERROR CODE STORAGE_^1*_,NUM $8000_)20 TYPE OF I/O -FD, +HD_^1*_,NUM 0_-21 INPUT/OUTPUT DIAG CLOCK TIME_^1*_,NUM 0_-22 MOTION WORD 1 - BACKSPACE RECORD_^1*_,NUM 0_-23 MOTION WORD 2 - WRITE EOF_^1*_,NUM 0_-24 MOTION WORD 3 - REWIND_^1*_,€€NUM 0_-25 MOTION WORD 4 - REWIND/UNLOAD_^1*_,NUM 0_-26 MOTION WORD 5 - ADVANCE FILE_^1*_,NUM 0_-27 MOTION WORD 6 - BACKSPACE FILE_^1*_,NUM 0_-28 MOTION WORD 7 - ADVANCE RECORD_^1*_,NUM 0_-29 TIMESHARE FLAG AND PRI LEVEL**_^1*_,NUM 40_,30 LENGTH OF TIMESHARE BUFFER_^1*_,NUM 0_-31 USER ADDRESS_^1*_,NUM 0_-32 CURRENT MOTION WORD_^1*_,ADC LU1734X-LOG1A 33 ACTUAL LOGI€€CAL UNIT_^1*_,BZS TSBUF(40)_$34 TIMESHARE BUFFER_^1*_,NUM 0_-74 TIMESHARE INPUT LENGTH_^1*_,ADC P1743X_(75 PHYSTB THREAD_^1*_]_^1*_+*IF NEGATIVE, FULL DUPLEX, CHARACTER IS ECHOED._^1*_,OTHERWISE, NO ECHO AND RECEIVER IS NOT ON DURING TRANSMIT_^1*_,OR TRANSMIT DURING RECEIVE_^1*_]_^1*_,** TIMESHARE FLAG - BIT 15 = 1 TIMESHARE_^1*_@BIT 14 = 1 UNSOLICITED INPUT ACTIVE_^1*_@BIT€€S 0-3 USER PRIORITY LEVEL_^1_-EJT_^1*_]_^1************************************************************************_^1*_]_'*_^1*_1Q REGISTER FORMAT_B*_^1*_]_'*_^1************************************************************************_^1*_,BIT 0 - FUNCTION/STATUS BIT_^1*_]_^1*_,BIT 1 - ENABLE CHARACTER READY_^1*_]_^1*_,BIT 2 - DISABLE CHARACTER READY_^1*_]_^1*_,BIT 3 - UNASSIGNED_^€€1*_]_^1*_,BITS 4-6 - CHANNEL ADDRESS_^1*_]_^1*_,BITS 7-10 - CONTROLLER ADDRESS (EQUIPMENT NUMBER)_^1*_]_^1*_,BITS 11-15 - W FIELD (ALWAYS 0)_^1*_]_^1_'EJT_^1*_]_^1************************************************************************_^1*_]_'*_^1*_1A REGISTER FORMATS_A*_^1*_]_'*_^1************************************************************************_^1*_,INPUT - FUNCTION/STATUS€€ BIT = 1_^1*_]_^1*_1BIT 3 - CLOCK STATUS = 1 IF THE INTERRUPT CLOCK_^1*_9HAS COMPLETED A CYCLE SINCE THE LAST STATUS_^1*_9CHECK_^1*_]_^1*_1BIT 7 - PROTECT SWITCH STATUS = 1 IF THE PROTECT_^1*_9JUMPER PLUG IS NOT INSERTED_^1*_]_^1*_1ALL OTHER BITS ARE UNASSIGNED_^1*_]_^1*_]_^1*_,OUTPUT - FUNCTION/STATUS BIT = 1_^1*_]_^1*_1BIT 0 - CLEAR CONTROLLER_^1*_]_^1*_1BIT 1 - CLEAR INTERRUPTS_€€^1*_]_^1*_1BIT 2 - ENABLES AN INTERRUPT TO BE SENT TO THE_^1*_9COMPUTER ON THE NEXT CLOCK PULSE_^1*_]_^1*_1ALL OTHER BITS ARE UNASSIGNED_^1*_]_^1*_]_^1*_,INPUT - FUNCTION/STATUS BIT = 0_^1*_]_^1*_1BITS 0-7 - DATA_^1*_]_^1*_1BIT 8 - BREAK ERROR ON INPUT_^1*_]_^1*_1BIT 9 - CHARACTER LOST ON INPUT_^1*_]_^1*_1BIT 10 - CHARACTER REQUEST - THE SEND SECTION IS_^1*_:READY TO RECEIVE DATA F€€ROM THE COMPUTER_^1*_]_^1*_1BIT 11 - CHARACTER READY - THE RECEIVE SECTION CONTAI_^1*_:A CHARACTER WHICH IS READY FOR TRANSFER_^1*_:TO THE COMPUTER_^1*_]_^1*_1BITS 12-14 - UNASSIGNED_^1*_]_^1*_1BIT 15 - PARITY ERROR ON INPUT_^1*_]_^1*_]_^1*_,OUTPUT - FUNCTION/STATUS BIT = 0_^1*_]_^1*_1BITS 0-7 - DATA_^1*_]_^1*_1BITS 8-15 - UNASSIGNED_^1_'EJT_^1*_]_^1********************************€€****************************************_^1*_1EQUIVALENCES_^1************************************************************************_^1*_]_^1_(EQU_%TIME(4)_,WD 4 DIAGNOSTIC CLOCK_^1_(EQU_%LU(5)_.WD 5 LOGICAL UNIT_^1_(EQU_%EPTR(6)_,WD 6 PARAMETER LIST LOCATION_^1_(EQU_%CALL(7)_,WD 7 EQUIPMENT/STATION CODE_^1_(EQU_%ERRTAB(8)_*WD 8 REQUEST STATUS_^1_(EQU_%SWITCH(9)_*WD 9 DRIVER€€ STATUS_^1_(EQU_%CORE(10)_+WD 10 NEXT CORE LOCATION_^1_(EQU_%LASTP1(11)_)WD 11 LAST CORE LOCATION + 1_^1_(EQU_%STATUS(12)_)WD 12 HARDWARE STATUS_^1_(EQU_%TEMP(15)_+WD 15 TEMPORARY STORAGE_^1_(EQU_%COREIN(16)_)SAVE START OF BUFFER ADDRESS_^1_(EQU_%DIAGLU(17)_)DIAGNOSTIC LOGICAL UNIT_^1_(EQU_%CNTRL2(18)_)TERMINATION CHARACTERS_^1_(EQU_%ERRCOD(19)_)ALTDEV ERROR CODE STORAGE_^1_(EQU_%T€€YPE(20)_+TYPE I/O FD, HD_^1_(EQU_%COUNT(21)_*DIAGNOSTIC CLOCK TIME_^1_(EQU_%MOTTAB(22)_)MOTION TABLE_^1_(EQU_%TSFLAG(29)_)TIMESHARE FLAG AND PRI LEVEL_^1_(EQU_%BUFFNO(30)_)NO OF WORDS FOR UNSOL READ_^1_(EQU_%USER(31)_+USER ADDRESS_^1_(EQU_%MOTWD(32)_*CURRENT MOTION WORD_^1_(EQU_%ACTLU(33)_*ACTUAL LOGICAL UNIT_^1_(EQU_%TSBUF(34)_*TIMESHARE BUFFER_^1_(EQU_%NXCHAN(75)_)PHYSTAB THREAD_€€^1_(EQU_%TIMERR(0)_*TIMEOUT ERROR CODE_^1_(EQU_%LOST(1)_,LOST DATA ERROR CODE_^1_(EQU_%ALARM(2)_+ALARM ERROR CODE_^1_(EQU_%PARITY(3)_*PARITY ERROR CODE_^1_(EQU_%INTREJ(5)_*INTERNAL REJECT CODE_^1_(EQU_%EXTREJ(6)_*EXTERNAL REJECT CODE_^1_(EQU_%BREAK(33)_*BREAK ERROR CODE_^1_(EQU_%LPMSK(2)_+START LEFT PARTS MASKS_^1_(EQU_%NZERO($12)_)START RIGHT PARTS MASKS_^1_(EQU_%ZERO($22)_*LOCATI€€ON CONTAINING ZERO_^1_(EQU_%ONEBIT($23)_(START ONE BIT MASKS_^1_(EQU_%ZROBIT($33)_(START ZERO BIT MASKS_^1_(EQU_%AFNR($B5)_*LOCATION OF FIND NEXT REQUEST_^1_(EQU_%COMPRQ($B6)_(LOCATION OF COMPLETE REQUEST_^1_(EQU_%ADISP($EA)_)LOCATION OF DISPATCHER_^1_(EQU_%AMONI($F4)_)LOCATION OF MONITOR_^1_(EQU_%CR($0D)_,CARRIAGE RETURN_^1_(EQU_%LINE($0A)_*LINE FEED_^1_%ENT E17432,C17432,I17432_€€^1*_]_^1_%EXT MAKEQ,ALTDEV,LOG_^1_%EJT_]_^1*_]_^1************************************************************************_^1*_1INITIATOR ENTRY_^1************************************************************************_^1*_]_^1*_]_^1I17432 STQ- I_^1_%STQ* BASE_^1START LDA- TSFLAG,I_$TIMESHARE_^1_%SAP OPPROG_^1_%ALS 1_^1_%SAM NXTCH_(YES, UNSOLICITED INPUT_^1OPPROG LDA- ERRTAB,I_€€$OPERATION IN PROGRESS_^1_%SAP FNR_^1NXTCH LDA- NXCHAN,I_$NO, FIND NEXT CHANNEL,S PHYSTAB_^1_%STA- I_^1_%SUB* BASE_^1_%SAZ OUTREQ_^1_%JMP* START_^1OUTREQ LDQ- CALL,I_'REQUEST CLOCK INTERRUPT_^1_%INQ -1_^1_%ENA 4_^1_%OUT REJECT-*_^1_%JMP- (ADISP)_^1FNR_"RTJ- (AFNR)_^1_%JMP* NOREQ_^1_%LDQ- CALL,I_^1_%INP REJECT-*_$GET STATUS_^1_%STA- STATUS,I_$STORE STATUS_^1_%LDQ- EPTR,I_'GET€€ REQUEST CODE_^1_%LDA- (ZERO),Q_^1_%ALS 7_^1_%AND- LPMSK+5_^1_%INA -14_*MOTION REQUEST_^1_%SAN NOTMTN_^1_%ENA 0_^1_%STA- CORE,I_'YES, ZERO BUFFER LOCATION, LENGTH_^1_%STA- LASTP1,I_^1_%JMP MOTION_^1NOTMTN LDA- CORE,I_'STORE BUFFER LOCATION_^1_%STA- COREIN,I_^1_%ENA 1_^1_%AND- SWITCH,I_$READ REQUEST_^1_%SAZ SETRD_^1_%JMP AWRITE_^1SETRD ENA $07_^1_%LDQ- CALL,I_'SEND BELL_^1€€_%OUT REJECT-*_^1_%LDA- TSFLAG,I_$YES, TIMESHARE_^1_%SAM DIARED_^1_%JMP STREAD_^1DIARED LDA- DIAGLU,I_$YES, DIAGNOSTIC LU_^1_%SUB- LU,I_^1_%SAN CMPRQ_^1_%JMP STREAD_^1CMPRQ LDA- COUNT,I_%SET DIAGNOSTIC CLOCK_^1_%AND- LPMSK+8_^1_%STA- TIME,I_^1_%RTJ- (COMPRQ)_$COMPLETE REQUEST_^1_%JMP* FNR_*FIND NEXT REQUEST_^1NOREQ LDA- TSFLAG,I_$TIMESHARE_^1_%SAP JPNEXT_^1_%RTJ* TSSET_(SET€€ UP CORE_^1JPNEXT JMP* NXTCH_^1TSSET NOP_]_^1_%LDA =XTSBUF,I_#GET LOCATION OF TIMESHARE BUFFER_^1_%STA- COREIN,I_^1_%STA- CORE,I_'STORE IN CURRENT CORE LOCATION_^1_%ADD- BUFFNO,I_$GET NUMBER OF WORDS IN BUFFER_^1_%STA- LASTP1,I_$STORE IN LWA+1_^1_%ENA 0_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%STA- LU,I_)ZERO LOGICAL UNIT NUMBER_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%LDA- TSFLAG,I_^1_%AND-€€ ZROBIT+14_^1_%STA- TSFLAG,I_$SET NO UNSOLICITED INPUT_^1_%JMP* (TSSET)_^1BASE_!NUM 0_^1REJECT JMP* INTERR_^1_%ENA EXTREJ_'EXTERNAL REJECT_^1_%JMP* ERROR_^1INTERR ENA INTREJ_'INTERNAL REJECT_^1_%JMP* ERROR_^1_%EJT_]_^1*_]_^1************************************************************************_^1*_1TIMEOUT ERROR ENTRY_^1*********************************************************€€***************_^1*_]_^1E17432 STQ- I_^1_%STQ* BASE_^1_%ENA TIMERR_'TIMEOUT ERROR_^1*_]_^1ERROR LDQ- LU,I_^1_%SQN PROERR_'CHECK FOR LU = 0_^1_%JMP- (ADISP)_%YES, EXIT_^1PROERR QLS 6_,NO, PROCESS ERROR_^1_%EAQ A_,FORM ALTDEV ERROR CODE_^1_%STA- ERRCOD,I_^1_%LDA- ONEBIT+14_^1_%AND- ERRTAB,I_$CHECK FOR ERROR INDICATOR ALREADY SET_^1_%SAZ NOERR_(NO, PROCESS ERROR_^1_%JMP- (ADISP)€€_%YES, EXIT_^1NOERR LDA- ONEBIT+14_#SET HARDWARE FAILURE IN PHYSTAB_^1_%EOR- ERRTAB,I_^1_%STA- ERRTAB,I_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%ENA 2_,CLEAR INTERRUPTS AND CONTROLLER_^1_%OUT 1_^1_%NOP 0_^1_%LDQ- ERRCOD,I_^1_%RTJ+ LOG_*LOG ERROR_^1_%RTJ+ MAKEQ_(SET V BITS_^1_%LDA- ERRTAB,I_$OPERATION IN PROGRESS_^1_%SAM CKDIAG_'YES, THIS IS A MONITOR CALL_^1_%LDA- TSFLAG,I_$TIMESHARE_^€€1_%SAP JPFNR_^1_%RTJ SCHUSR_'SCHEDULE USER_^1JPFNR JMP* FNR_*FIND NEXT REQUEST_^1CKDIAG LDA- DIAGLU,I_$CHECK FOR DIAGNOSTIC LU_^1_%SUB- LU,I_^1_%SAN JPMAKQ_^1CMPREQ RTJ- (COMPRQ)_$YES, COMPLETE REQUEST_^1_%JMP* JPFNR_^1JPMAKQ LDA- (I)_^1_%AND- LPMSK+4_^1_%EOR =N$5200_^1_%STA* SCHCL1_'SCHEDULE ALTERNATE DEVICE HANDLER_^1_%LDQ- ERRCOD,I_^1_%RTJ- (AMONI)_^1SCHCL1 ADC 0_^1_%ADC €€ALTDEV_^1OUTERR JMP* NEXT_^1_%EJT_]_^1*_]_^1************************************************************************_^1*_$CONTINUATOR ENTRY_^1************************************************************************_^1*_]_^1C17432 STQ- I_^1_%STQ* BASE_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%ENA 2_,CLEAR INTERRUPTS_^1_%OUT REJECT-*_^1CONT_!LDQ- CALL,I_^1_%INP REJECT-*_$INPUT DATA/STATUS W€€ORD_^1_%STA- STATUS,I_^1_%LDA- ONEBIT+7_^1_%AND- SWITCH,I_^1_%SAN DONE_^1_%JMP* CKTS_)GO SEE IF T/S INPUT ACTIVE_^1DONE_!LDA- ONEBIT+7_^1_%EOR- SWITCH,I_$RESET DONE FLAG_^1_%STA- SWITCH,I_^1_%LDA- TSFLAG,I_$TIMESHARE_^1_%SAP NTSDON_^1_%ALS 1_^1_%SAP NTSDON_'YES, UNSOLICITED INPUT ACTIVE_^1_%RTJ SCHUSR_'YES, SCHEDULE USER_^1_%JMP* TOFNR_^1NTSDON RTJ+ MAKEQ_^1_%RTJ- (COMPRQ)_$CO€€MPLETE REQUEST_^1TOFNR JMP FNR_^1CKTS_!LDA- STATUS,I_$CHECK TO SEE IF A VALID CHAR IS READY_^1_%ALS 4_,CHECK BIT 11_^1_%SAM 1_,YES_^1_%JMP* NDONE_(NO_^1_%LDA- STATUS,I_^1_%AND- LPMSK+7_%GET CURRENT CHARACTER_^1_%INA -$60_)CHECK FOR LOWER CASE_^1_%SAP 1_^1_%INA $20_*NO, RESTORE CHARACTER_^1_%INA $40_*CONVER TO UPPER_^1_%STA- TEMP,I_'SAVE IT_^1_%STA* SVTEMP_'SAVE IT FOR TIMES€€HARE SET UP_^1_%LDA- TSFLAG,I_%TIMESHARE LU_^1_%SAM 1_^1_%JMP* NDONE_(NO_^1_%RTJ TERMCK_'CHECK TO SEE IF A TERMINATION CHAR_^1_%JMP* NDONE_(NOT A TERM CHAR_^1_%LDA- ONEBIT+7_^1_%EOR- SWITCH,I_$RESET DONE SWITCH_^1_%STA- SWITCH,I_^1_%LDA- ERRTAB,I_$OPERATION IN PROGRESS_^1_%SAP NOREQQ_(NO_^1_%RTJ+ MAKEQ_(COMPLETE REQUEST IN PROGRESS_^1_%RTJ- (COMPRQ)_^1NOREQQ RTJ* TSSET_^1_%LDA €€=N0_^1_%EQU SVTEMP(*-1)_^1_%STA- TEMP,I_*RESTORE TEMP WITH TERM CHAR_^1_%JMP* SETTS_(SET UP TIMESHARE_^1*_]_^1*_]_^1NDONE LDQ- ERRTAB,I_$OPERATION IN PROGRESS_^1_%SQP LDTS_^1_%JMP* OPERON_^1LDTS_!LDQ- TSFLAG,I_$NO, TIMESHARE_^1_%SQM INNTER_^1_%JMP* NEXT_)NO, GET NEXT CHANNEL_^1INNTER LDA- STATUS,I_^1_%ALS 4_,CHARACTER READY BIT ON_^1_%SAM SETTS_^1_%JMP* NEXT_)NO, GET NEXT CHA€€NNEL_^1SETTS IIN_]_^1_%LDA- LU,I_)L=0_^1_%SAZ DIAG_^1_%JMP* OKREAD_'NO, REGULAR MONITOR CALL_^1DIAG_!LDA- ACTLU,I_%YES, SET UP LU AND SWITCH_^1_%STA- LU,I_)TO LOOK LIKE A MONITOR CALL_^1_%ENA $A_+SET FORMATTED READ AND ASCII BITS_^1_%STA- SWITCH,I_^1_%EIN_]_^1_%LDA- TSFLAG,I_^1_%AND- LPMSK+14_$MASK WITH $3FFF_^1_%EOR- NZERO+14_$SET $C000_^1_%STA- TSFLAG,I_$SET UNSOLICITED READ €€IN PROGRESS_^1_%LDQ- CORE,I_^1TS_#SET A_^1_%STA- (ZERO),Q_$FILL BUFFER WITH $FFFF_^1_%INQ 1_^1_%LDA- LASTP1,I_^1_%EAQ A_^1_%SAZ JPREAD_^1_%JMP* TS_^1JPREAD JMP* OKREAD_'PROCESS READ REQUEST_^1NEXT_!LDA- NXCHAN,I_$FIND NEXT CHANNEL S PHYSTAB_^1_%STA- I_^1_%SUB BASE_^1_%SAN MORCHA_^1_%LDQ- CALL,I_^1_%INQ -1_^1_%ENA 4_,REQUEST CLOCK INTERRUPT_^1_%OUT RJECT-*_^1_%JMP- (ADISP)_€€^1RJECT JMP* JT_+INT REJECT_^1_%JMP REJECT+1_$EXT REJECT_^1JT_#JMP INTERR_^1MORCHA JMP* CONT_^1OPERON LDQ- EPTR,I_^1_%LDA- (ZERO),Q_$GET REQUEST CODE_^1_%ALS 7_^1_%AND- LPMSK+5_^1_%INA -14_*MOTION REQUEST_^1_%SAN NOTMT1_^1_%JMP MTNCON_^1NOTMT1 ENA 1_,READ REQUEST_^1_%AND- SWITCH,I_^1_%SAZ DOREAD_'YES_^1_%JMP AWRITE_^1*_]_^1*_$PROCESS READ REQUEST_^1*_]_^1DOREAD LDA- STATU€€S,I_$CHARACTER READY BIT ON_^1_%LLS 4_^1_%SAM OKREAD_^1_%JMP* NEXT_)NO, GET NEXT CHANNEL_^1OKREAD LDA- STATUS,I_^1_%AND =N$8300_%CHECK FOR DATA,BREAK, PARITY ERROR_^1_%SAN CKPAR_^1_%JMP* NTBRAK_^1CKPAR SAP NOPAR_^1_%ENQ PARITY_'PARITY ERROR_^1_%JMP* SDBLOB_^1NOPAR ALS 6_^1_%SAP NTLOST_'LOST DATA_^1_%ENQ LOST_^1_%JMP* SDBLOB_^1NTLOST ENQ BREAK_(BREAK ERROR_^1SDBLOB STQ- €€ERRCOD,I_$SAVE ERROR CODE_^1_%LDQ- CALL,I_^1_%INP TOJECT-*_$ENABLE TRANSMIT_^1_%ENA $7F_^1_%OUT TOJECT-*_$OUTPUT BLOB_^1_%LDA- LU,I_)CHECK FOR DIAGNOSTIC LU_^1_%SUB- DIAGLU,I_^1_%SAN TOREAD_^1_%LDA- ERRCOD,I_$GET ERROR CODE_^1_%JMP ERROR_(PROCESS ERROR_^1TOREAD LDA- ERRCOD,I_$GET ERROR CODE_^1_%LDQ- LU,I_^1_%QLS 6_^1_%EAQ Q_,SET UP CODE FOR LOGGER_^1_%RTJ+ LOG_*LOG ERROR_^1_€€%JMP* STREAD_^1NTBRAK LDQ- TYPE,I_'FULL DUPLEX_^1_%SQP TERMIN_^1_%LDQ- CALL,I_^1_%INP TOJECT-*_$ENABLE TRANSMIT_^1_%LDA- TEMP,I_^1_%OUT TOJECT-*_$ECHO CHARACTER_^1TERMIN RTJ* TERMCK_'CHECK FOR TERMINATION CHARACTER_^1_%NOP 0_,NOT A TERMINATION CHARACTER_^1NOTDON ENA 2_^1_%AND- SWITCH,I_$FORMATTED REQUEST_^1_%SAZ STORCH-*-1_^1_%LDA- TEMP,I_'GET CHARACTER_^1_%INA -LINE_(CHK FO€€R LINE FEED_^1_%SAZ PASSIT_'YES, IGNORE IT_^1_%INA -3_+CHK FOR CARRIAGE RETURN_^1_%SAN 1_^1_%JMP* CRIN_)YES, PROCESS IT_^1_%INA -$52_)CHK FOR CANCEL CHARACTER_^1_%SAN 1_^1_%JMP* CANCEL_'YES, PROCESS IT_^1_%ENA $10_^1_%AND- SWITCH,I_$CHK FOR PASS FLAG_^1_%SAZ STORCH-*-1_^1PASSIT JMP* STREAD_'YES EXIT_^1STORCH LDQ- TEMP,I_^1_%ENA 4_^1_%AND- SWITCH,I_$CHK FOR UPPER CHAR_^1_%SA€€N LOWCHR-*-1_^1_%ENA -0_+YES, SET LOWER CHAR TO $FF_^1_%LLS 24_^1_%JMP* STORIT_'GO STORE CHARACTER_^1LOWCHR TRQ A_^1_%EOR- NZERO+8_^1_%LDQ- CORE,I_^1_%AND- (ZERO),Q_$COMBINE CHARACTERS_^1STORIT LDQ- CORE,I_^1_%STA- (ZERO),Q_$STORE CHARACTER(S)_^1_%TRQ A_^1_%SUB- LASTP1,I_$CHECK FOR ZERO WORDS REQUESTED_^1_%SAZ CHKEND-*-1_"YES_^1_%ENA 4_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_$RE€€VERSE UPPER/LOWER SWITCH_^1_%TRA Q_^1_%ALS 13_^1_%SAM GSETRD-*-1_^1_%RAO- CORE,I_'NOW UPPER, UPDATE CORE ADDRESS_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_$CHECK FOR LAST WORD_^1_%QLS 8_,GET DONE BIT_^1_%SQM GSETRD_^1_%SAZ CHKEND-*-1_^1GSETRD JMP* STREAD_^1CHKEND ENA 2_^1_%AND- SWITCH,I_$CHECK FOR FORMATTED REQ_^1_%SAN SETPAS-*-1_^1_%JMP* SETDON_^1SETPAS ENA $10_*SET PASS FLAG_^1_€€%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1_%JMP* STREAD_^1CANCEL ENA -$30_)CLEAR CANCEL,PASS FLAGS_^1_%AND- SWITCH,I_^1_%INA $30_*SET CANCEL,PASS FLAGS_^1_%STA- SWITCH,I_^1_%JMP* STREAD_^1CRIN_!ENA $20_*CANCEL FLAG SET_^1_%AND- SWITCH,I_^1_%SAN NOTIME_^1SETDON LDA- ONEBIT+7_^1_%EOR- SWITCH,I_$SET DONE FLAG_^1_%STA- SWITCH,I_^1_%JMP* STREAD_^1NOTIME ENA -$34_)CLEAR LOWER,CANCEL,PASS_^€€1_%AND- SWITCH,I_^1_%STA- SWITCH,I_^1_%LDQ- COREIN,I_$RESTORE BUFFER ADDRESS_^1_%STQ- CORE,I_^1SETBUF SET A_^1_%STA- (ZERO),Q_$BACKGROUND BUFFER WITH $FFFF_^1_%INQ +1_^1_%LDA- LASTP1,I_^1_%EAQ Q_^1_%SAN 1_^1_%JMP* SETBUF_^1STREAD LDA- COUNT,I_%SET DIAGNOSTIC CLOCK_^1_%AND- LPMSK+8_^1_%STA- TIME,I_^1_%JMP NEXT_)GET NEXT CHANNEL S PHYSTAB_^1*_]_^1TOJECT JMP* REJ_*INTERNAL REJECT€€_^1_%JMP REJECT+1_$EXTERNAL REJECT_^1REJ_"JMP INTERR_^1*_]_^1*_]_^1*_$TERMINATION CHARACTER CHECK_^1*_$IF NOT TERM CHAR RETURN+0_(IF TERM CHAR RETURN+1_^1*_]_^1*_]_^1TERMCK NOP 0_^1_%LDQ- CNTRL2,I_$CHECK FOR TERMINATION CHARACTERS_^1TERM1 SQZ TOUT_)NO MORE TERM CHARS_^1_%LRS 8_^1_%ARS 8_^1_%SUB- TEMP,I_(SUB INPUT CHAR_^1_%SAN NEXTER_^1_%LDA- ONEBIT+7_^1_%EOR- SWITCH,I_$SET €€DONE_^1_%STA- SWITCH,I_^1_%RAO* TERMCK_^1TOUT_!JMP* (TERMCK)_^1NEXTER JMP* TERM1_(CHECK OTHER TERM CHARACTER_^1*_]_^1*_$ROUTINE TO SCHEDULE USER_^1*_]_^1SCHUSR NOP_]_^1_%LDA- TSFLAG,I_$SET UNSOLICITED FLAG TO NOT RUNNING_^1_%AND- ZROBIT+14_^1_%STA- TSFLAG,I_^1_%LDA- USER,I_'GET USER LOCATION_^1_%SAN 1_^1_%JMP* SCH1_^1_%STA* SCHADD_'STORE IN SCHEDULE CODE_^1_%LDA- TSFLAG,I_^1_%AND-€€ LPMSK+4_%GET USER PRIORITY_^1_%EOR =N$5200_%FORM SCHEDULER CALL_^1_%STA* SCHCAL_^1_%LDA- CORE,I_^1_%SUB- COREIN,I_^1_%INA 1_^1_%LDQ- COREIN,I_^1_%ADQ- BUFFNO,I_^1_%STA- (ZERO),Q_$SAVE LENGTH OF TRANSFER_^1_%LDA- ERRTAB,I_$CHECK IF ERRORS OCCURRED_^1_%AND- ONEBIT+14_^1_%ALS 1_,SET Q REQISTER WITH ERROR INDICATOR_^1_%ADD- ACTLU,I_%AND WITH LU NUMBER_^1_%TRA Q_^1_%RTJ- (AMONI)_^1€€SCHCAL ADC 0_^1SCHADD ADC 0_^1SCH1_!JMP* (SCHUSR)_^1*_]_^1*_$PROCESS WRITE REQUEST_^1*_]_^1AWRITE LDA- STATUS,I_$CHARACTER REQUEST BIT ON_^1_%ALS 5_^1_%SAM OKWRIT_^1_%JMP NEXT_)NO, GET NEXT CHANNEL_^1OKWRIT ENA 2_^1_%AND- SWITCH,I_$CHK FOR FORMATTED REQ_^1_%TRA Q_,Q = 0 IF UNFORMATTED_^1_%ENA $10_^1_%AND- SWITCH,I_$CHK FOR FIRST CHAR_^1_%SAN NOT1ST-*-1_^1_%ENA $10_*YES,CL€€EAR FIRST CHAR FLAG_^1_%SQN 1_^1_%ENA $30_*CLEAR LF FLAG ALSO IF UNFORMTD_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1_%SQZ NOCNTL-*-1_^1_%ENA CR_+SEND CARRIAGE RETURN_^1_%JMP* SENDCH_^1NOT1ST SQZ NOCNTL-*-1_"CONTINUE IF UNFORMATTED_^1_%ENA $20_^1_%AND- SWITCH,I_$CHK LINE FEED FLAG_^1_%SAN NOCNTL-*-1_^1_%ENA $20_*YES, CLEAR FLAG_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1_%ENA LINE_)€€SEND LINE FEED_^1_%JMP* SENDCH_^1NOCNTL ENA $40_^1_%AND- SWITCH,I_$CHK COMPLETION FLAG_^1_%SAZ GETCHR-*-1_^1TODONE LDA- ONEBIT+7_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_$SET DONE FLAG_^1_%JMP* EXIT_^1GETCHR LDQ- CORE,I_'GET CURRENT CORE ADDRESS_^1_%LDQ- (ZERO),Q_$GET DATA WORD_^1_%ENA 4_^1_%AND- SWITCH,I_$CHK UPPER CHARACTER_^1_%SAN LOWER-*-1_^1_%QRS 8_,YES_^1LOWER LDA- LPMSK+8_%€€MASK OFF PROPER CHARACTER_^1_%LAQ A,Q_^1_%INA -CR_*CHK FOR CARRIAGE RETURN_^1_%SAN NOCR-*-1_^1_%ENA 2_,YES, CHK FOR FORMATTED REQ_^1_%AND- SWITCH,I_^1_%SAZ NOCR-*-1_^1_%ENA $20_*YES, SET LINE FEED FLAG_^1_%EOR- SWITCH,I_^1_%STA- SWITCH,I_^1NOCR_!TRQ A_^1_%INA -3_+CHECK FOR ETX_^1_%SAZ TDONE_^1_%TRQ A_^1_%EOR- LPMSK+8_^1_%SAN NOTFF-*-1_#IF CHARACTER = $FF, TERMINATE_^1TDO€€NE JMP* TODONE_^1NOTFF LDA- CORE,I_'CHECK FOR ZERO WORDS REQUESTED_^1_%SUB- LASTP1,I_^1_%SAZ COMPLT_^1_%ENA 4_^1_%EOR- SWITCH,I_$REVERSE UPPER/LOWER SWITCH_^1_%STA- SWITCH,I_^1_%ALS 13_+CHK UPPER CHARACTER_^1_%SAM NOTLST-*-1_^1_%RAO- CORE,I_'YES, CHK FOR LAST WORD_^1_%LDA- CORE,I_^1_%SUB- LASTP1,I_^1_%SAN NOTLST-*-1_^1COMPLT ENA $40_*YES, SET COMPLETE FLAG_^1_%EOR- SWITCH,I€€_^1_%STA- SWITCH,I_^1NOTLST TRQ A_^1SENDCH LDQ- CALL,I_^1_%OUT TOJECT-*_$OUTPUT CHARACTER_^1EXIT_!LDA- COUNT,I_^1_%ARS 8_^1_%AND- LPMSK+8_^1_%STA- TIME,I_'SET DIAGNOSTIC CLOCK_^1_%JMP NEXT_^1_%EJT_]_^1*_]_^1************************************************************************_^1*_*MOTION REQUEST PROCESSING (RC = 14)_^1**********************************************************€€**************_^1*_]_^1MOTION LDA- 4,Q_*GET MOTION DEFINITION WORD FROM PARAM LIST_^1_%SAM 1_^1_%AND- NZERO+4_%AND OUT DENSITY BITS IF NOT REPEAT REQUEST_^1_%STA- TEMP,I_^1_%SAP MTNCON-*-1_^1_%AND- LPMSK+12_$SAVE REPEAT COUNT IF REPEAT REQUEST_^1_%STA- ERRCOD,I_^1MTNCON LDA- STATUS,I_$CHARACTER REQUEST BIT ON_^1_%ALS 5_^1_%SAM OKMOT_^1_%JMP NEXT_)NO, GET NEXT CHANNEL_^1OKMOT €€ENA 4_^1_%AND- SWITCH,I_^1_%SAZ CKMOT_(CKECK FOR UPPER MOTION CHARACTER_^1_%JMP* MTNNXT_^1CKMOT LDA- TEMP,I_'YES, INCREMENT COUNT_^1_%SAP NOTMLT-*-1_"CHECK WHICH TYPE REQUEST_^1_%LDA- ERRCOD,I_^1_%SAZ MTNDON_^1_%INA -1_^1_%STA- ERRCOD,I_^1_%LDA- TEMP,I_'GET MOTION CODE_^1_%CLR Q_^1_%ALS 1_^1_%LLS 3_^1_%STQ- MOTWD,I_%SAVE MOTION CODE_^1_%SQZ MTNDON-*-1_"MOTION CODE ZERO -- €€ILLEGAL_^1_%JMP* MTNNXT_'PROCESS MOTION CODE_^1NOTMLT CLR Q_^1_%LLS 4_,GET NEXT MOTION CODE_^1_%STQ- MOTWD,I_%SAVE MOTION CODE_^1_%STA- TEMP,I_^1_%SQN MTNNXT-*-1_^1MTNDON JMP* TODONE_^1MTNNXT LDQ- MOTWD,I_^1_%INQ -1_^1_%ENA 4_^1_%EOR- SWITCH,I_$REVERSE UPPER/LOWER SWITCH_^1_%STA- SWITCH,I_^1_%ENA 4_^1_%AND- SWITCH,I_^1_%SAN MTNNT1_'CHECK FOR UPPER MOTION CHARACTER_^1_%LDA- M€OTTAB,B_$PROCESS LOWER CHARACTER_^1_%AND- LPMSK+8_^1_%JMP* MTNNT2_^1MTNNT1 LDA- MOTTAB,B_$PROCESS UPPER CHARACTER_^1_%ARS 8_^1_%AND- LPMSK+8_^1MTNNT2 SAN SENMOT_^1_%JMP* MTNCON_'IF CONTROL ZERO, IGNORE CONTROL_^1SENMOT JMP* SENDCH_'EXECUTE CURSOR MOVEMENT_^1_%END_]_^__PD1745B CSY/ C73 P€1_%NAM D1745B_'DECK-ID C73 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1*_$BUFFERED 1745-2 DRIVER._^1*_*PROGRAM BASE : 39562051_^1*_$SPEC ID 39562000_^1*_$THIS DRIVER DOES NOT ALLOW THE CRT TO BE USED AS A_^1*_$COMMENT DEVICE._^1*_]_^1*_€€$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1_%SPC 3_^1*_$ENTRY POINTS_^1_%SPC 2_^1_%ENT I1745_(INITIATOR_^1_%ENT C1745_(CONTINUATOR_^1_%ENT E1745_(TIMEOUT ERROR_^1_%ENT IN4506_'1706 INTERRUPT ENTRY_^1_%SPC 2_^1*_$EXTERNALS_^1_%SPC 2_^1_%EXT RQ1706_'ROUTINE TO G€€ET CONTROL OF 1706_^1_%EXT RL1706_'ROUTINE TO RELEASE CONTROL OF 1706_^1_%EXT P2111_(ADDRESS OF 1ST PHYSTB_^1_%EXT RD1745_'USER RESPONSE TO UNATTENDED SEND_^1_%SPC 2_^1*_$ERROR MESSAGE FORMAT - CRT YX - WHERE_^1*_$Y IS THE STATION ADDRESS OF THE UNIT_^1*_$X_"ERROR_^1_%SPC 2_^1*_$0_"DIAGNOSTIC TIMEOUT_^1*_$1_"REJECT IN INITIATOR_^1*_$2_"REJECT DOING FUNCTION OUTPUT_^1*_$3_"REJE€€CT ATTEMPTING BUFFERED IO_^1*_$4_"REJECT ON WRITE TERMINATE FUNCTION_^1*_$5_"REJECT IN INTERRUPT RESPONSE (STATION INT)_^1*_$6_"REJECT IN INTERRUPT RESPONSE (EOP INT)_^1*_$7_"REJECT AFTER SEND INT RECEIVED_^1*_$8_"REJECT AFTER EOP IN CONTINUATOR_^1*_$9_"ALLOCATABLE CORE NOT SUFFICIENT FOR THIS_^1*_*FORMAT READ SIZE_^1*_$A_"ZERO LENGTH REQUEST. NOT COMPLETED WITH ERROR,_^1*_*AND NOT€€ EXECUTED._^1*_$B_"SFWE CANT IDENTIFY INTERRUPT (TREATED AS GHOST)_^1_%SPC 2_^1_%SPC 2_^1*_$SYSTEM EQUIVALENCES_^1_%SPC 2_^1_%EQU AMONI($F4)_"MONITOR_^1_%EQU ADISP($EA)_"DISPATCHER_^1_%EQU AFNR($B5)_#FIND NEXT REQUEST_^1_%EQU ACMR($B6)_#COMPLETE REQUEST_^1_%SPC 2_^1*_$MASKS_^1_%SPC 2_^1_%EQU ZERO($22)_^1_%EQU ONEBIT($23)_^1_%EQU LPMSK(2)_^1_%EQU NZERO($12)_^1_%EQU ZRO€€BIT($33)_^1_%SPC 2_^1*_$PHYSICAL DEVICE TABLE EQUIVALENCES_^1_%SPC 2_^1_%EQU EDCLK(4)_$DIAGNOSTIC CLOCK_^1_%EQU ELU(5)_'LOGICAL UNIT_^1_%EQU EPTR(6)_%USER PARAMETER LIST_^1_%EQU EWES(7)_%EQUIPMENT CODE_^1_%EQU EREQST(8)_#SOFTWARE REQUEST STATUS_^1_%EQU ESTAT1(9)_#SOFTWARE REQUEST STATUS_^1_%EQU ECCOR(10)_#FWA OF USER BUFFER_^1_%EQU ELSTWD(11)_"LWA+1 OF USER BUFFER_^1_%EQU€€ ESTAT2(12)_"LAST EQUIPMENT STATUS TAKEN_^1_%EQU NOUSED(13)_"NOT USED_^1_%EQU ADMMDR(14)_"ADDRESS OF MASS MEMORY DRIVER_^1_%EQU RETURN(15)_"RETURN ADDRESS_^1_%EQU MODE(16)_$INT. RESPONSE BRANCH INDICATOR_^1_%EQU NXUNIT(17)_"ADDRESS OF NEXT PHYSTB_^1_%EQU STANUM(18)_"UNIT STATION NUMBER_^1_%EQU TFWA(19)_$TEMP STG FOR USER FWA_^1_%EQU TLWA(20)_$TEMP STG FOR USER LWA+1_^1_%EQ€€U FWCH1(21)_#FIRST WORD CHAR 1 OF FWRITE_^1*_$PSEUDO CODES ARE USED IN NON-FORMAT WRITES_^1*_$A MAXIMUM OF THREE ARE ALLOWED, AND THEY MUST PRECEED_^1*_$ANY DATA OR FUNCTIONAL ESCAPE CODES._^1_%EQU PSC1(22)_$PSEUDO CODE 1 STG_^1_%EQU PSC2(23)_$PSEUDO CODE 2 STG_^1_%EQU PSC3(24)_$PSEUDO CODE 3 STG_^1_%EQU SEND(25)_$SEND SUPPRESS FLAG_^1_%EJT_]_^1I1745 STQ- I_,SAVE PHYSTB ADDRE€€SS_^1_%RTJ- (AFNR)_'FIND A REQUEST_^1_%JMP- (ADISP)_^1_%LDA- ONEBIT+15_#SET MODE FOR 1ST TIME THRU_^1_%STA- MODE,I_^1_%LDA CURENT_'IS DRIVER BUSY_^1_%SAZ GET06_^1_%JMP- (ADISP)_%YES, IT WILL PICK UP THIS REQUEST LATER_^1GET06 LDA- I_,PICK UP PHYSTB ADDRESS_^1_%STA CURENT_'SAVE TEMPORARILY_^1_%LDA =XP2111_%ADDRESS OF UNIT 1 PHYSTB_^1_%STA- I_^1_%RTJ RQ1706_^1_%LDA CURENT_^1_%€€STA- I_,RESTORE I_^1_%ENA 0_^1_%STA CURENT_^1_%SPC 2_^1CKIOZL LDA- ECCOR,I_%COMPLETE IMMEDIATELY IF_^1_%SUB- ELSTWD,I_$IF ZERO LENGTH REQUEST_^1_%SAN CKIO_^1_%ENA $41_*PRINT MSG A_^1_%RTJ ERR_^1_%JMP COMPRQ_^1CKIO_!LDQ- EWES,I_'CLEAR INTERRUPTS AND ENABLES_^1_%ENA $A_^1_%OUT REJ1-*_^1_%INQ 1_^1_%LDA- STANUM,I_$SET UP CURRENT STATION ADDRESS_^1_%STA CURENT_^1_%ALS 6_,SEL€€ECT STATION, SET ACTIVE_^1_%EOR =N$410_^1_%OUT REJ1-*_^1_%LDA- MODE,I_'IS THOS FREAD_^1_%SUB =N$8001_%WAITING FOR XFER_^1_%SAN CKIO1_(NO, GO AHEAD_^1_%JMP FREAD2_'YES, GO TRANSFER DATA_^1_%SPC 2_^1*_$REJECT WHILE STILL IN INITIATOR_^1_%SPC 2_^1REJ1_!NOP 0_^1_%ENA $31_*PRINT MSG 1_^1RJPATH RTJ ERR_^1_%LDA- ESTAT1,I_$SET V-FIELD FOR ERROR_^1_%AND- LPMSK+13_^1_%EOR- NZERO+14€€_^1_%STA- ESTAT1,I_^1_%JMP COMPRQ_'GO COMPLETE REQUEST WITH ERROR_^1_%SPC 2_^1CKIO1 LDQ- ESTAT1,I_$BIT 0 WORD 9 R/W = 0/1_^1_%ENA 0_,CLEAR SEND SUPPRESS_^1_%STA- SEND,I_^1_%ENA 1_^1_%LAQ A_^1_%SAN WRITE_^1_%JMP READ_^1_%SPC 2_^1WRITE ENA 2_,WRITE REQUEST_^1_%LAQ A_^1_%SAN FWRITE_'BIT 1 WORD 9 FMT/REG = 1/0_^1_%JMP* RWRITE_^1_%SPC 2_^1FWRITE ENA $40_*SET FORMAT CONTRO€€L MODE_^1_%STA- MODE,I_^1_%LDQ- ECCOR,I_%SAVE ORIGINAL FIRST WORD_^1_%LDA- (ZERO),Q_^1_%STA- PSC1,I_^1_%AND- LPMSK+8_^1_%EOR =N$1600_%REPLACE 1ST CHAR WITH SYNC_^1_%STA- (ZERO),Q_^1_%LDA- PSC1,I_'ISOLATE 1ST CHAR_^1_%ALS 8_^1_%AND- LPMSK+8_^1_%STA- FWCH1,I_^1_%SPC 2_^1*_$NOTE- ENCODE/DECODE INSERTS CARRAIGE RETURN ($0D)_^1*_$IN PLACE OF ZERO ($30) IN-LINE IN THE FORMAT_^1*_$TOP €€OF FORM ($0C) IS INSERTED IN PLACE OF 1 ($31)._^1_%SPC 2_^1_%INA -$0D_)WAS IT CR ($0D)_^1_%SAN CKOC_^1_%JMP* SKIP2_(YES, SET TO SKIP 2 LINES_^1CKOC_!INA 1_,WAS IT TOP OF FORM ($0C)_^1_%SAZ CLRRES_'YES, CLEAR RESET_^1_%INA -$14_)WAS IT BLANK ($20)_^1_%SAN NSK_^1_%JMP* SKIP1_(YES, SKIP ONE LINE_^1NSK_"INA -$B_*WAS IT + ($2B)_^1_%SAN CM_^1_%JMP* GO_+YES, NO CURSOR MOVEMENT_^1€€CM_#INA -5_+WAS IT ZERO ($30)_^1_%SAZ SKIP2_(YES, SKIP 2 LINES_^1_%INA -1_+WAS IT 1 ($31)_^1_%SAZ CLRRES_'YES, CLEAR RESET_^1_%SPC 2_^1_%LDA- PSC1,I_'RESTORE 1ST CHARACTER TO MESSAGE_^1_%STA- (ZERO),Q_^1_%JMP* SKIP1_(NONE OF THE ABOVE, SKIP 1_^1_%SPC 2_^1CLRRES LDQ- EWES,I_'SET UP DIR FCN 1_^1_%LDA =N$102_'CLR/RES, CLR INT+ENABLES_^1_%OUT REJC-*_^1_%JMP* GO_^1_%SPC 2_^1SKI€€P2 LDQ =XASKIP2_$SET BUFFER FWA FOR 2 LINE SKIPS_^1_%JMP* SKIP_^1_%SPC 2_^1SKIP1 LDQ =XASKIP1_$SET FWA FOR 1 LINE SKIP_^1SKIP_!LDA- ECCOR,I_%SAVE FWA AND LWA_^1_%STA- TFWA,I_'WHILE DOING BUFFERED WRITE FOR SKIPS_^1_%STQ- ECCOR,I_^1_%LDA- ELSTWD,I_^1_%STA- TLWA,I_^1_%LDA =XASKIP1+1_"SET FUNCTION CONTROL ADDRESS_^1_%STA- ELSTWD,I_^1_%LDA- ESTAT1,I_^1_%AND- ONEBIT_'IF COMING THR€€U FOR FWRITE_^1_%SAZ MSET2_)SET MODE = 4_^1_%ENA 4_^1_%JMP* MSET_^1MSET2 ENA 2_,IF COMING THRU FOR FREAD,_^1_%RAO- ELSTWD,I_$SET TO OUTPUT STX_^1MSET_!STA- MODE,I_'SET MODE = 2_^1_%SPC 2_^1GO_#LDQ BOUT06_'SET UP FOR BUFFERED OUTPUT_^1_%JMP XFER_)GO TRANSFER DATA_^1_%SPC 2_^1RWRITE ENA $20_*SET MODE_^1_%STA- MODE,I_^1_%ENA 0_,CLEAR PSEUDO ESCAPE COUNTER_^1_%STA PSCCNT_^1_%€€LDQ- ECCOR,I_^1NXESC LDA- (ZERO),Q_$CHECK 1ST CHAR OF WORD PAIR_^1_%AND- NZERO+8_^1_%EOR ESCCOD_'IS THIS AN ESCAPE_^1_%SAZ CKESC_(YES_^1NPS_"LDA* PSCCNT_'NO, WERE THERE ANY PREVIOUS ESCAPES_^1_%SAZ NEVPS_^1_%JMP* PSFND_(YES, GO MARK THIS AS LAST ONE_^1NEVPS ENA 0_,NO, SET INDICATOR FOR NO PSEUDO ESCS_^1_%STA- PSC1,I_^1_%JMP* GOPS_)GO OUTPUT_^1_%SPC 2_^1CKESC LDA- (ZERO),Q_€€$ESCAPE CODE FOUND_^1_%STQ SAVPTR_'SAVE LOC OF CHAR PAIR_^1_%AND- LPMSK+8_^1_%INA -7_+WAS THIS AN ALERT_^1_%SAN NALERT_^1_%RTJ ALERT_(YES, DO ALERT_^1_%JMP* STRPSC_'GO SAVE PSEUDO CODE_^1_%SPC 2_^1NALERT INA -5_+WAS THIS A CLEAR RESET_^1_%SAN NCLR_^1_%LDQ- EWES,I_'YES, DO DF1 FOR_^1_%LDA =N$102_'CLEAR RESET, CLEAR INT+ENABLES_^1_%OUT REJC-*_^1_%JMP* STRPSC_'GO SAVE PSEUDO €€CODE_^1_%SPC 2_^1NCLR_!INA -$E_*WAS THIS A SUPPRESS SEND_^1_%SAN NNS_^1_%RAO- SEND,I_'YES, SET NO SEND FLAG_^1_%JMP* STRPSC_^1NNS_"LDA* PSCCNT_'THIS IS NOT A PSEUDO CODE_^1_%SAN PSFND_)WERE THERE ANY PSEUDOS_^1_%JMP NEVPS_^1_%SPC 2_^1PSFND LDQ* PSCCNT_'SET LAST PSEUDO TO BE FOUND NEGATIVE_^1_%INQ PSC1-1_^1_%LDA- (ZERO),B_^1_%EOR- ONEBIT+15_^1_%STA- (ZERO),B_^1GOPS_!LDQ* BOUT€€06_'GO XFER DATA_^1_%JMP* XFER_^1_%SPC 2_^1STRPSC RAO* PSCCNT_'INCREMENT PSEUDO CODE COUNTER_^1_%LDQ* PSCCNT_^1_%INQ PSC1-1_^1_%LDA (SAVPTR)_$FOR LATER MESSAGE RESTORATION_^1_%STA- (ZERO),B_^1_%LDA =N$1616_%REPLACE PSEUDO CODE WITH SYNCS_^1_%STA (SAVPTR)_^1_%LDA* PSCCNT_'HAS MAX NO OF PSEUDOS BEEN REACHED_^1_%INA -3_^1_%SAZ MAXPSC_^1_%LDQ SAVPTR_'NO, GO CHECK FOR MORE_^1_%I€€NQ 1_^1_%JMP* NXESC_^1MAXPSC JMP* PSFND_^1_%SPC 2_^1*_$REJECT DOING FUNCTION OUTPUT_^1_%SPC 2_^1REJC_!NOP 0_^1_%ENA $32_*PRINT MSG 2_^1_%JMP RJPATH_^1_%SPC 2_^1*_$READ REQUESTS_^1_%SPC 2_^1READ_!ENA 2_,BIT 1 WORD 9 FMT/REG = 1/0_^1_%LAQ A_^1_%SAZ RREAD_^1_%SPC 2_^1FREAD JMP* SKIP1_(IF FMT, GO SKIP 1+STX_^1_%SPC 2_^1RREAD ENA $10_*VANILLA READ, SET MODE_^1_%STA- MODE€€,I_^1_%ENA 30_+SET LONG DIAG CLOCK TIMEOUT_^1_%STA- EDCLK,I_^1_%JMP* GORX_)GO TRANSFER DATA_^1_%SPC 2_^1*_$COME HERE ON SEND INTERRUPT_^1*_$RESPONSE TO FREAD_^1_%SPC 2_^1FREAD2 LDA- TLWA,I_^1_%SUB- TFWA,I_'FIND READ REQUEST LENGTH_^1_%INA 2_^1_%STA* SPACRQ_'IF SIZE OF READ GREATER THAN_^1SIZEP2 SUB =N522_(MAX SCREEN SIZE_^1_%SAZ SIZOK_^1_%SAM SIZOK_^1_%LDA* SIZEP2+1_$SET LEN€€GTH TO LONGEST SCREEN SIZE_^1_%STA* SPACRQ_^1_%SPC 2_^1SIZOK LDA- (I)_*SET UP SPACE REQUEST_^1_%AND- LPMSK+4_^1_%TRA Q_^1_%ALS 4_^1_%AAQ A_^1_%EOR* SPACRC_^1_%STA* PARAM_^1_%LDA- I_,SAVE I_^1_%STA* TEMPI_^1_%RTJ- (AMONI)_^1PARAM ADC 0_^1_%ADC COMP,0,0_^1SPACRQ ADC 0_^1_%JMP- (ADISP)_%WAIT FOR CORE_^1COMP_!LDA* TEMPI_(RESTORE I_^1_%STA- I_^1_%SQP SPOK_^1_%ENA 5_,COMPLETE €€WITH ERROR IF CANT_^1FCER_!ALS 13_^1_%EOR- ESTAT1,I_$SET V-FIELD NEGATIVE_^1_%STA- ESTAT1,I_^1_%ENA $39_*PRINT MSG 9_^1_%RTJ ERR_^1_%JMP COMPRQ_'GO COMPLETE_^1SPOK_!STQ- ECCOR,I_%COMPUTE FWA, LWA FOR XFER_^1_%ADQ* SPACRQ_^1_%STQ- ELSTWD,I_^1_%ENA 8_^1_%STA- MODE,I_'SET MODE_^1_%LDQ- EWES,I_'ENABLE EOP ON 1745_^1_%ENA $A_^1_%OUT 1_^1_%NOP 0_^1GORX_!LDQ* BIN06_(SET UP FOR BUF€€FERED INPUT_^1_%JMP* XFER_)GO TRANSFER DATA_^1_%SPC 2_^1_%SPC 2_^1*_$CONSTANTS AND STORAGE_^1STAMSK NUM $780_)STATION ADDRESS MASK_^1IO1706 NUM 0_,1706 IO COMMAND_^1FWAM1 NUM 0_,FWA-1 TEMP STG_^1BOUT06 NUM $2000_(1706 BUFFERED OUTPUT COMMAND_^1BIN06 NUM $2800_(1706 BUFFERED INPUT COMMAND_^1ASKIP2 NUM $1B12_(LINE SKIP_^1ASKIP1 NUM $1B12_(LINE SKIP_^1_%NUM $0216_(STX+SYNC€€_^1PSCCNT NUM 0_,PSEUDO ESCAPE CODE INDEX OFFSET_^1ESCCOD NUM $1B00_(ESCAPE CODE IN UPPER CHAR_^1SPACRC NUM $5400_(SPACE REQUEST CODE_^1TEMPI NUM 0_^1_%SPC 2_^1XFER_!STQ* IO1706_'Q=1706 IO BITS ON ENTRY_^1_%LDQ =N$1800_%ENABLE 1706 EOP_^1_%LDA =N$8001_^1_%OUT REJIO-*_^1_%LDA- EDCLK,I_%IF IT IS NOT ALREADY ON,_^1_%SAM ST4_^1_%JMP* TIMOK_^1ST4_"ENA 4_,TURN ON DIAGNOSTIC CL€€OCK_^1_%STA- EDCLK,I_^1TIMOK LDQ- ECCOR,I_^1_%INQ -1_+PICK UP WORD BEFORE BUFFER_^1_%LDA- (ZERO),Q_$INHIBIT INTERRUPTS_^1_%IIN 0_,WHILE IT IS DESTROYED_^1_%STA* FWAM1_^1_%LDA- ELSTWD,I_$PUT LWA+1 INTO FWA-1_^1_%STA- (ZERO),Q_^1_%LDA- EWES,I_'SET UP STATION ADDRESS_^1_%AND* STAMSK_'AND 1706 IO BITS IN Q-REG_^1_%EOR* IO1706_^1_%TRA Q_^1_%LDA- ECCOR,I_%SET A = FWA-1_^1_%INA -1_^1€€_%OUT REJIO-*_^1_%TRA Q_,RESTORE FWA-1_^1_%LDA* FWAM1_^1_%STA- (ZERO),Q_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%LDA* IO1706_'WAS THIS BUFFERED OUTPUT_^1_%EOR* BOUT06_^1_%SAZ WTERM_^1_%ENA 2_,SET TO COMPLETE READ_^1_%JMP* STRFG_^1WTERM ENA 1_,SET TO ISSUE WRITE TERMINATE_^1STRFG STA* FLAG06_^1_%JMP- (ADISP)_^1_%SPC 2_^1*_$REJECT ATTEMPTING BUFFERED IO_^1_%SPC 2_^1REJIO NOP 0_^1€€_%LDQ =N$1800_%TERMINATE BUFFER ON 1706_^1_%INP 1_^1_%NOP 0_^1_%LDA- MODE,I_'HAS CORE BEEN ALLOCATED_^1_%INA -8_^1_%SAZ RELCOR_'YES_^1_%JMP* ER3_*NO_^1RELCOR LDA- ECCOR,I_%CORE FWA IN ECCOR_^1_%STA* RELA1_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%ADC $1800_^1RELA1 ADC 0_^1ER3_"ENA $33_*PRINT ERROR 3_^1_%JMP* (ARJP)_^1_%SPC 2_^1*_$1706 INTERRUPT RESPONSE ROUTINE_^1_%SPC 2_^1IN45€€06 LDA* FLAG06_^1_%SAN NFINT_^1_%JMP- (ADISP)_%NOT EXPECTING THIS ONE_^1NFINT ENQ 0_,CLEAR FLAG_^1_%STQ* FLAG06_^1_%INA -1_^1_%SAN EQ06_)IS THIS END OF READ_^1_%JMP* WT_+NO_^1EQ06_!LDQ =N$1800_%DISABLE 1706 EOP TO CLEAR_^1_%INP 1_,AND TERMINATE BUFFER ON 1706_^1_%NOP 0_^1_%ENA 1_^1_%OUT 1_^1_%NOP 0_^1_%LDQ =XP2111_%PICK UP FIRST PHYSTAB ADDRESS_^1_%STQ- I_^1_%LDQ- EWES,€€I_'GET EQUIPMENT CODE FROM PHYSTAB_^1_%ENA 2_^1_%OUT 1_^1_%NOP 0_^1_%JMP EOP45_(TREAT AS 1745 EOP_^1_%SPC 2_^1WT_#LDQ* EQ06+1_'DISABLE 1706 EOP INT TO CLEAR_^1_%ENA 1_^1_%OUT 1_^1_%NOP 0_^1_%LDQ =XP2111_^1_%LDQ- EWES,Q_^1_%LDA =N$100A_%ISSUE WRITE TERMINATE_^1_%OUT REJWT-*_^1_%JMP- (ADISP)_^1_%SPC 2_^1*_$REJECT ON WRITE TERMINATE, ENABLE EOP_^1_%SPC 2_^1REJWT NOP 0_^€€1_%LDQ =N$1800_%TERMINATE BUFFER ON 1706_^1_%INP 1_^1_%NOP 0_^1_%ENA $34_*PRINT MESSAGE 4_^1_%JMP* (ARJP)_^1_%SPC 2_^1FLAG06 NUM 0_^1_%EJT_]_^1*_$CONTINUATOR_^1*_$ENTERED BY INTERRUPT FROM 1745_^1_%SPC 2_^1C1745 STQ- I_,SAVE ADDRESS OF UNIT 0 PHYSTB_^1_%LDQ- ONEBIT+13_#SET Q = $2000_^1_%INP 1_^1_%NOP 0_^1_%AND =N$106_'IS IT BUSY, REJECT, INTERRUPT_^1_%SAZ N1706_(NO, CRT€€ SEND_^1_%AND =N$102_'IS IT BUSY, REJECT_^1_%SAZ N1706_(NO, CRT SEND_^1_%JMP* NFINT_(YES, TERMINATE 1706_^1_%SPC 2_^1_%SPC 2_^1_%SPC 2_^1N1706 RTJ RQ1706_'GET CONTROL OF 1706_^1_%STQ- I_,RESTORE PHYSTB ADDRESS_^1_%LDQ- EWES,I_^1_%INP REJIR-*_%READ DIR. STATUS 1_^1_%STA- ESTAT2,I_^1_%AND- ONEBIT+2_$IS INTERRUPT BIT UP_^1_%SAZ GHOST_(NO, GI_^1_%LDA- ESTAT2,I_$WAS THIS AN EOP€€ INTERRUPT_^1_%AND- ONEBIT+4_^1_%SAZ NEOP_^1_%JMP* EQ06_^1_%SPC 2_^1NEOP_!LDA- ESTAT2,I_$WAS THIS A STATION INTERRUPT_^1_%AND- ONEBIT+13_^1_%SAZ GHOST_(IF NEITHER, GI_^1_%JMP* SEND45_^1_%SPC 2_^1GHOST LDQ =XP2111_%GET EQUIPMENT CODE FROM FIRST PHYSTAB_^1_%LDQ- EWES,Q_^1_%LDA =N$8A_^1_%OUT 1_^1_%NOP 0_^1_%JMP+ EX1706_'RELEASE 1706_^1_%SPC 2_^1_%SPC 2_^1*_$REJECT IN INTERR€€UPT RESPONSE SECTION_^1_%SPC 2_^1REJIR NOP 0_^1_%LDQ- EWES,I_'ENABLE EOP, SEND_^1_%LDA =N$8A_(PLUS CLR INT+ENABLES_^1_%OUT 1_^1_%NOP 0_^1_%LDA- ELU,I_(IF REQUEST IN PROGRESS, TURN IT_^1_%SAN EXIT_)OFF, IF NOT_9SCO1638_^1_%ENA $35_*PRINT MSG 5 AND GO AWAY_^1_%RTJ ERR_^1_%JMP EX1706_^1EXIT_!ENA $36_*PRINT MSG 6 (PROBABLE EOP)_^1_%JMP* (ARJP)_^1ARJP_!ADC RJPATH_^1_%SPC 2_€€^1SEND45 INQ 1_,INPUT DIR. STATUS 2_^1_%INP REJS-*_^1_%STA- ESTAT2,I_^1_%AND =N$3C0_'MASK OFF STATION NUMBER_^1_%SAN FNDSTA_^1_%JMP* GHOST_(GI IF NO STATION NUMBER_^1FNDSTA ARS 6_,SEARCH FOR MATCHING STATION_^1_%STA* TEMP_^1_%LDQ- I_^1CKSTA LDA- STANUM,Q_^1_%SUB* TEMP_^1_%SAZ THIS1_^1_%LDQ- NXUNIT,Q_^1_%LDA- I_^1_%EAQ A_^1_%SAZ NFIND_^1_%JMP* CKSTA_^1NFIND JMP* GHOST_(GI €€IF NO MATCH FOUND_^1_%SPC 2_^1THIS1 STQ- I_,FOUND THIS STATIONS PHYSTB_^1_%ENA -1_^1_%STA- EDCLK,I_%CLEAR DIAGNOSTIC CLOCK_^1_%LDA- SEND,I_'HAVE SEND INTS BEEN DISALLOWED_^1_%SAZ SOK_*NO_^1_%JMP* REJS1_(YES, TURN OFF AND IGNORE_^1SOK_"LDA- MODE,I_'CHECK IF THIS ONE WAITING_^1_%AND- ONEBIT_^1_%SAZ NBIT0_(NO_^1_%JMP* FRWAIT_'YES_^1NBIT0 LDA- STANUM,I_$SELECT THIS STATION_^1_%RT€€J* SELECT_^1_%INQ -1_^1_%ENA $A_+CLEAR SEND REQUEST, ENABLE EOP_^1_%OUT REJS-*_^1_%LDA* CURENT_'IS THERE ANOTHER STATION_^1_%SAZ NC1_*USING THE 1706_^1_%RTJ* SELECT_'YES, RESELECT HIM_^1NC1_"LDA- ELU,I_(IS ANOTHER REQ IN PGRS ON THIS UNIT_^1_%SAN NC_+YES, DUMP SEND_^1_%JMP* USCALL_'NO, GO START UP READ_^1NC_#JMP EX1706_^1_%SPC 2_^1SELECT 0_"0_^1_%ALS 6_,SELECT THE STATION I€€N A-REG_^1_%ADD =N$410_'AND SET ACTIVE_^1_%LDQ- EWES,I_^1_%INQ 1_^1_%OUT 1_^1_%NOP 0_^1_%JMP* (SELECT)_^1_%SPC 2_^1USCALL LDA- ESTAT2,I_$NO REQUEST ON THIS UNIT_^1_%AND- LPMSK+4_%CALL USER TO MAKE READ REQUEST_^1_%ALS 12_+SEND STATION NUMBER_^1_%ADD- STANUM,I_$AND STATUS SWITCH CONFIGURATION_^1_%TRA Q_,IN Q-REG_^1_%RTJ- (AMONI)_^1_%NUM $5205_^1_%ADC RD1745_^1_%LDQ- EWES,I_€€^1_%ENA 2_,CLEAR INT AND ENABLES AND EXIT_^1_%OUT 1_^1_%NOP 0_^1_%JMP+ EX1706_^1_%SPC 2_^1FRWAIT LDA* CURENT_'IS ANOTHER STATION USING THE 1706_^1_%SAZ GOAHD_^1_%LDA =N$8001_%YES, SET TO PICK THIS REQUEST UP LATER_^1_%STA- MODE,I_^1_%JMP* NBIT0_(GO CLEAR THIS INTERRUPT_^1GOAHD LDA- STANUM,I_$SELECT THIS STATION AND SET IT CURRENT_^1_%STA* CURENT_^1_%RTJ* SELECT_^1_%INQ -1_+T€€URN OFF SEND_^1_%ENA $A_^1_%OUT 1_^1_%NOP 0_^1_%JMP FREAD2_'COMPLETE READ_^1_%SPC 2_^1*_$REJECT AFTER SEND INTERRUPT RECEIVED_^1_%SPC 2_^1REJS_!NOP 0_^1_%ENA $37_*PRINT MSG 7_^1_%RTJ ERR_^1_%SPC 2_^1REJS1 LDA- STANUM,I_$SELECT THIS STATION_^1_%RTJ* SELECT_^1_%ENA $A_+TURN OFF INTERRUPT_^1_%INQ -1_^1_%OUT 1_^1_%NOP 0_^1_%LDA CURENT_'WAS ANOTHER UNIT USING THE 1706_^1€€_%SAZ XRJS_^1_%RTJ* SELECT_'YES, SELECT IT_^1XRJS_!JMP* NC_^1_%SPC 2_^1CURENT NUM 0_,CURRENT STATION_^1SAVPTR NUM 0_,MSG POINTER TEMP STG_^1TEMP_!NUM 0_^1CA1706 NUM 0_,1706 CURRENT ADDRESS_^1_%SPC 2_^1*_$THE MODE WORD (WORD 13 OF PHYSTB)_^1*_$SHOULD INDICATE WHICH OPERATION_^1*_$IS COMPLETE FOR THIS UNIT._^1*_$BIT OPERATION_^1*_$0_"FREAD WAITING FOR SEND (SPECIAL CASE)_^1*_€€$1_"PRE-FREAD LINE SKIP_^1*_$2_"PRE-FWRITE LINE SKIP(S)_^1*_$3_"FREAD DATA TRANSFER (TO ALLOCATABLE)_^1*_$4_"REGULAR READ DATA TRANSFER_^1*_$5_"REGULAR WRITE DATA TRANSFER_^1*_$6_"FWRITE DATA TRANSFER_^1*_$15_!START OF REQUEST (EOP NOT APPLICABLE)_^1_%SPC 2_^1EOP45 LDA* CURENT_'GI IF NO CURRENT STATION_^1_%SAN CSTA_^1_%JMP GHOST_^1CSTA_!ENA 2_^1_%OUT 1_^1_%NOP 0_,CLEAR INT+E€€NABLES_^1_%LDQ- I_^1CKPT_!LDA- STANUM,Q_$SEARCH FOR STATION PHYSTB_^1_%SUB* CURENT_^1_%SAZ PTFND_^1_%LDQ- NXUNIT,Q_^1_%LDA- I_^1_%EAQ A_^1_%SAZ NPTSTA_^1_%JMP* CKPT_^1NPTSTA JMP GHOST_^1PTFND STQ- I_,FOUND PHYSTB_^1_%ENA -1_^1_%STA- EDCLK,I_%CLEAR DIAGNOSTIC CLOCK_^1_%SPC 2_^1*_$BRANCH TO EOP RESPONSE BY MODE WORD_^1_%SPC 2_^1_%LDA- MODE,I_^1_%ALS 9_^1_%SAP CKM5_^1_%JMP* €€MBIT6_(BIT 6_^1CKM5_!ALS 1_^1_%SAP CKM4_^1_%JMP* MBIT5_(BIT 5_^1CKM4_!ALS 1_^1_%SAP CKM3_^1_%JMP* MBIT4_(BIT 4_^1CKM3_!ALS 1_^1_%SAP CKM2_^1_%JMP* MBIT3_(BIT 3_^1CKM2_!ALS 1_^1_%SAP CKM1_^1_%JMP* MBIT2_(BIT 2_^1CKM1_!ALS 1_^1_%SAP NBIT_^1_%JMP* MBIT1_(BIT 1_^1NBIT_!ENA 2_^1_%STA- EDCLK,I_%RESET DIAGNOSTIC CLOCK_^1_%ENA $42_^1_%RTJ ERR_^1_%JMP GHOST_(SOFTWARE LOST, TRE€€AT AS GHOST_^1_%SPC 2_^1*_$FREAD LINE SKIP DONE_^1_%SPC 2_^1MBIT1 ENA 1_,SET WAITING FOR SEND STATUS_^1_%STA- MODE,I_^1_%ENA 120_*SET 2 MIN TIMEOUT_^1_%STA- EDCLK,I_^1_%RTJ ALERT_^1_%INQ 1_^1_%LDA- STANUM,I_$CLEAR ACTIVE ON THIS STATION_^1_%ALS 6_^1_%ADD =N$820_'AND DESELECT THE UNIT_^1_%OUT REJ-*_^1_%ENA 0_,FREE DRIVER TO WORK ON OTHER UNITS_^1_%STA CURENT_^1_%JMP NEX€€T_)GO CHECK FOR MORE WORK_^1_%SPC 2_^1*_$FWRITE LINE SKIP(S) COMPLETE_^1_%SPC 2_^1MBIT2 LDA- TFWA,I_'RESTORE FWA, LWA IN PHYSTB_^1_%STA- ECCOR,I_^1_%LDA- TLWA,I_^1_%STA- ELSTWD,I_^1_%ENA $40_*SET MODE FOR DATA XFER_^1_%STA- MODE,I_^1_%LDQ BOUT06_'SET UP FOR BUFFERED OUTPUT_^1_%JMP XFER_^1_%SPC 2_^1*_$REGULAR READ XFER DONE_^1_%SPC 2_^1MBIT4 LDQ =N$1800_%TERMINATE BUFFER O€€N 1706_^1_%INP REJ-*_^1_%TRA Q_,IS CURRENT ADDRESS = LWA+1_^1_%SUB- ELSTWD,I_^1_%SAZ NSHORT_'YES,INPUT WAS CORRECT SIZE OR LONGER_^1_%TRQ A_,NO, STORE 1706 CURRENT ADDRESS_^1_%LDQ- ELSTWD,I_$IN LAST WORD OF BUFFER_^1_%INQ -1_^1_%STA- (ZERO),Q_^1_%LDA- ESTAT1,I_$SET SHORT READ INDICATOR_^1_%AND- LPMSK+13_^1_%EOR- ONEBIT+14_^1_%STA- ESTAT1,I_^1NSHORT JMP COMPRQ_^1_%SPC 2_^1*_$€€REGULAR WRITE DATA TRANSFER DONE_^1_%SPC 2_^1MBIT5 LDA- PSC1,I_'WERE THERE ANY PSEUDO ESCAPES_^1_%SAN RPS_^1_%JMP* LASTPS_^1RPS_"LDQ- ECCOR,I_%YES_^1_%STQ* SAVPTR_'RESTORE ORIGINAL MESSAGE_^1_%ENQ PSC1_^1RESTPS LDA- (ZERO),B_^1_%AND- LPMSK+15_^1_%STA* (SAVPTR)_^1_%LDA- (ZERO),B_^1_%SAM LASTPS_'LAST ONE IN_^1_%RAO* SAVPTR_'NO_^1_%INQ 1_^1_%JMP* RESTPS_^1LASTPS JMP COMPRQ_^1_%€€SPC 2_^1*_$REJECT AFTER EOP FOUND IN CONTINUATOR_^1_%SPC 2_^1REJ_"NOP 0_^1_%ENA $38_*PRINT ERROR 8_^1_%JMP RJPATH_^1_%SPC 2_^1*_$FWRITE DATA XFER DONE_^1_%SPC 2_^1MBIT6 LDQ- ECCOR,I_%RESTORE ORIGINAL 1ST WORD_^1_%LDA- PSC1,I_^1_%STA- (ZERO),Q_^1_%JMP COMPRQ_^1_%SPC 2_^1*_$FORMAT READ DATA TRANSFER DONE_^1_%SPC 2_^1MBIT3 LDQ =N$1800_%FIND 1706 CURRENT ADDRESS_^1_%INP R€€EJX-*_^1_%JMP* NRT_^1REJX_!NOP 0_^1_%JMP REJIO_^1NRT_"STA* CA1706_'SAVE CURRENT ADDRESS_^1_%LDQ- ECCOR,I_%GET FWA OF ALLOC BUFFER_^1LOOP_!LDA- (ZERO),Q_$SEAR H FOR 1ST ETX_^1_%AND- LPMSK+8_^1_%INA -3_^1_%SAZ LO_^1_%LDA- (ZERO),Q_^1_%ALS 8_^1_%AND- LPMSK+8_^1_%INA -3_^1_%SAZ HI_^1_%INQ 1_^1_%TRQ A_^1_%SUB CA1706_^1_%SAZ STRQ_^1_%JMP* LOOP_^1HI_#LDA- LPMSK+16_^1_%STA- (ZER€€O),Q_^1_%JMP* STRQ_^1LO_#LDA- (ZERO),Q_^1_%AND- NZERO+8_^1_%EOR- LPMSK+8_^1_%STA- (ZERO),Q_^1_%INQ 1_^1_%LDA- LPMSK+16_^1_%STA- (ZERO),Q_^1_%INQ -1_^1STRQ_!STQ CA1706_'SET ADR TO ETX WORD_^1MOVE_!NOP 0_,********_^1_%ENA 0_^1_%STA* ODDCHK_^1_%LDQ- ECCOR,I_%WAS 1ST CHAR =ETX_^1_%STQ* RELA_)SET UP TO RELEASE ALLOC WHEN DONE_^1_%LDA- (ZERO),Q_^1_%ARS 8_^1_%AND- LPMSK+8_^1_%INA -€€2_^1_%SAZ FSTX_^1_%JMP* SCHMB_^1FSTX_!RAO* ODDCHK_'YES, SET ODD FLAG_^1SCHMB LDQ- I_,SET I IN Q_^1_%RTJ- (AMONI)_%MOVE BUFFER AT LEVEL 3_^1_%ADC $5203_^1_%ADC MOVEB_^1_%JMP- (ADISP)_^1_%SPC 2_^1MOVEB NOP 0_^1_%STQ* ISAV_)GET I_^1_%LDA- TLWA,Q_'MOVE ALLOC BUFFER TO USER AREA_^1_%STA* ULWA_^1_%LDA- TFWA,Q_^1_%STA- I_^1_%LDQ- ECCOR,Q_^1MOVEON LDA* ODDCHK_'OFFSET BY ONE CHAR IF €€STX WAS 1ST_^1_%SAZ EVEN_^1_%STQ* APTR_^1_%LDA- 1,Q_^1_%LDQ- (ZERO),Q_^1_%LLS 8_^1_%SQP 1_^1_%JMP* DONEME_^1_%TRQ A_^1_%LDQ* APTR_^1_%JMP* PUT_^1EVEN_!LDA- (ZERO),Q_^1_%SAP PUT_^1_%JMP* DONEME_^1PUT_"STA- (ZERO),I_^1_%RAO- I_^1_%LDA- I_^1_%SUB* ULWA_^1_%SAN CKCA_^1_%JMP* DONEM1_^1CKCA_!TRQ A_^1_%SUB CA1706_^1_%SAZ DONEME_^1_%INQ 1_^1_%JMP* MOVEON_^1DONEME LDA- I_,WAS LEN€€GTH SHORTER THAM REQUESTED_^1_%INA 1_^1_%SUB* ULWA_^1_%SAP DONEM1_^1_%LDQ* ULWA_)YES, STORE ADDRESS OF LAST WORD MOVED_^1_%INQ -1_+IN LAST WORD OF USER BUFFER_^1_%LDA- I_^1_%STA- (ZERO),Q_^1_%ENA 0_^1_%STA CA1706_^1DONEM1 LDQ* ISAV_)RESTORE I TO Q_^1_%LDA- (ZERO),Q_$PHYSTB FWA=SCHEDULER PARAM_^1_%STA* RQE_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1RELA_!NUM 0_^1_%NOP 0_€€^1_%RTJ- (AMONI)_%GO BACK TO DRIVER_^1RQE_"ADC 0_^1_%ADC MOVED_^1_%JMP- (ADISP)_^1_%SPC 2_^1_%SPC 2_^1ODDCHK NUM 0_^1ISAV_!NUM 0_,SAVE I-REG_^1ULWA_!NUM 0_,USER BUFFER LWA_^1APTR_!NUM 0_,ALLOCATABLE BUFFER CURRENT POINTER_^1_%EJT_]_^1*_$EDITED DATA MOVED INTO USER BUFFER_^1*_$AND CORE HAS BEEN RELEASED_^1_%SPC 2_^1MOVED STQ- I_,RESTORE I_^1_%LDA CA1706_^1_%SAN RITSIZ_'S€€ET SHORT READ IN PHYSTB_^1_%LDA- ESTAT1,I_$IF APPLICABLE_^1_%AND- LPMSK+12_^1_%EOR- ONEBIT+14_^1_%STA- ESTAT1,I_^1RITSIZ JMP* COMPRQ_^1_%SPC 2_^1ALERT 0_"0_^1_%LDQ- EWES,I_'OUTPUT ALERT, CLR INT+ENABLES_^1_%LDA =N$282_'ALERT, CLR INT+ENABLES, ENABLE STATION INT_^1_%OUT REJA-*_^1_%ENA 0_,CLEAR SEND SUPPRESS_^1_%STA- SEND,I_^1_%JMP* (ALERT)_^1_%SPC 2_^1*_$REJECT ON ALERT, SAME €€AS ON CLEAR/RESET_^1_%SPC 2_^1REJA_!NOP 0_^1_%JMP REJC_^1_%SPC 2_^1_%SPC 2_^1COMPRQ LDQ- EWES,I_'SELECT STATION INT, CLR INT+ENABLES_^1_%INQ 1_,SET UP DIR FCN 2_^1_%LDA- STANUM,I_^1_%ALS 6_^1_%ADD- ONEBIT+11_#DESELECT STATION_^1_%OUT 1_^1_%NOP 0_^1_%RTJ- (ACMR)_'COMPLETE REQUEST_^1_%LDA- ESTAT1,I_$CLEAR V-FIELD_^1_%AND- LPMSK+13_^1_%STA- ESTAT1,I_^1_%ENA 0_,SET MODE = 0 F€€OR NO REQUEST_^1_%STA- MODE,I_^1_%RTJ- (AFNR)_'LOOK FOR MORE REQUESTS_^1_%JMP* NOMORE_'NO MORE_^1_%JMP CKIOZL_'MORE, GO TAKE CARE OF THEM_^1NOMORE ENA 0_,NO MORE, CLEAR DRIVER BUSY_^1_%STA CURENT_^1_%SPC 2_^1*_$WHEN A REQUEST IS COMPLETE, GO BACK_^1*_$AND PICK UP UNITS THAT WERE CUT OFF IN THE_^1*_$INITIATOR WHILE A REQUEST WAS_^1*_$IN PROGRESS, SUCH UNITS WILL HAVE_^1*_$MODE =€€ 8000, AND ELU (PT WORD 5) NON-ZERO._^1_%SPC 2_^1NEXT_!LDQ- NXUNIT,I_$GET NEST UNIT PHYSTB_^1NEXTP1 TRQ A_,HAVE ALL UNITS BEEN CHECKED_^1_%SUB- I_^1_%SAZ EX1_*YES_^1_%LDA- MODE,Q_'IS MODE = 8000_^1_%SAM NURQ_)YES_^1_%JMP* NOCALL_'NO_^1NURQ_!LDA- ELU,Q_(IS PHYSTB SET UP_^1_%SAZ NOCALL_^1_%STQ- I_^1_%JMP CKIOZL_'YES, GO PROCESS THIS REQUEST_^1NOCALL LDQ- NXUNIT,Q_$NO, GO CHECK €€NEXT UNIT_^1_%JMP* NEXTP1_^1EX1_"LDQ- EWES,I_'SELECT STATION INTERRUPT_^1_%LDA =N$82_(AND CLEAR INT+ENABLES_^1_%OUT 1_^1_%NOP 0_^1_%JMP EX1706_'GO RELEASE 1706_^1_%SPC 2_^1_%SPC 2_^1ERR_"0_"0_^1_%STA* MSGER_(STORE REQUESTED MSG_^1_%LDA- STANUM,I_$CONVERT STATION NUMBER TO ASCII_^1_%INA -10_^1_%SAM LS10_^1 INA_!$41_]_^1_%JMP* STRA_^1LS10_!INA $3A_^1STRA_!ALS 8_,STORE IN MS€€G_^1_%EOR* MSGER_^1_%STA* MSGER_^1_%RTJ- (AMONI)_^1_%NUM $4CB0_(REQUEST CODE_^1_%NUM 0_,COMPLETION ADDRESS_^1_%NUM 0_,THREAD_^1_%NUM $18FC_(OUTPUT COMMENT, ASCII_^1_%NUM 3_,NUMBER OF WORDS_^1_%ADC MSGE_)ADDRESS_^1_%JMP* (ERR)_^1_%SPC 2_^1MSGE_!ALF 2,CRT_^1MSGER NUM 0_^1_%SPC 2_^1*_$DIAGNOSTIC TIMEOUT ENTRY_^1_%SPC 2_^1E1745 STQ- I_,SAVE PHYSTB ADDRESS_^1_%LDA- MODE,I_'€€WAS CORE ALLOCATED_^1_%INA -8_^1_%SAZ REL3_^1_%JMP* TOUT_^1REL3_!LDA- ECCOR,I_%YES, RELEASE_^1_%STA* RELAT_^1_%RTJ- (AMONI)_^1_%NUM $1800_^1RELAT NUM 0_^1TOUT_!LDA- ESTAT1,I_$SET V=100_^1_%AND- LPMSK+13_^1_%EOR- ONEBIT+15_^1_%STA- ESTAT1,I_^1_%ENA $30_^1_%RTJ* ERR_*PRINT MSG 0_^1_%JMP* COMPRQ_'COMPLETE REQUEST_^1_%SPC 3_^1EX1706 LDQ- EWES,I_'EQUIPMENT CODE TO Q_^1_%LDA =N$8€Δ2_^1_%OUT 1_-ENABLE CRT SEND INTERRUPT_^1_%NOP 0_^1_%LDA =XP2111_%ADDRESS OF UNIT 0 PHYSTB_^1_%STA- I_^1_%RTJ RL1706_'RELEASE 1706_^1_%JMP- (ADISP)_%EXIT TO DISPATCHER_^1_%SPC 3_^1_%END_]_^__ΔPLIBEDT CSY/ S Y S T E M L I B R A R Y D02 P€1_%NAM LIBEDT_'DECK-ID D02 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%EXT_#IP1_^1_%EXT FILE2_(IN TRVEC_^1_%EXT SWTCH_$JOB-KILL CONTROL CELL_^1_%EXT UNPIO,SWAPCK_^1_%EXT LOG1A_^1_%EXT NUMLU_(NUMBER OF LU IN SYSBUF_^1_%EXT LI€€BEDT_^1_%EXT LOADSD_^1_%EXT PARTBL_K**MSOS4.0*_^1_%EXT LSTPRT_K**MSOS4.0*_^1_%EXT LSTLOC_K**MSOS4.0*_^1_%EXT LOADIN_K**MSOS4.0_^1_%EXT JPRET1_^1_%EXT JPRETN_^1_%EXT JPRET_^1_%EXT SECTOR_N62*1274_^1_%EQU CHRSLV(0)_#LEVEL OF THIS PROGRAM_^1_%EQU EREQST(8)_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU FMSE($E7)_#INDEX TO 1ST MS. STR. ENTRY IN DIR._^1_%EQU SYSDIR€€($EB)_!CORE LOC. OF SYS. DIRECTORY_^1_%EQU LENSYS($E6)_!LENGTH OF SYS. DIR._^1_%EQU INCOM($FD)_"INPUT COMMENT_^1_%EQU SATLTH(22)_"LENGTH OF SECTOR AVAIL. TABLE IN SECTORS_^1_%EQU LPMASK(2)_^1*_*SIZE TO HOLD AREA 2,AREA 3, AND AREA4 PROGRAMS_^1_%EQU LNGTH(400)_"LENGTH OF PROGIN(AREA2)_,**MSOS4.0*_^1_%EQU LNGTH1(600)_!LENGTH OF MAIN PROCESSOR_+**MSOS4.0*_^1_%EQU LAREA3(205)_!L€€ENGTH OF AREA 3_3**MSOS4.0*_^1_%EQU LAREA4(200)_!LENGTH OF AREA 4_^1_%SPC 2_^1*_$THESE EQU ARE INDICES FOR STORAGE_^1*_$AND ARE USED BY ALL LIBEDT MODULES_^1_%SPC_#2_^1_%EQU H1000($2F),H100($2B),H7FFF($11),HFF00($1A),HFFF($E)_^1_%EQU HFF($A),H2($24),HFFFF($12),D10($46),ZERO($22)_^1_%EQU H8000($32),H4($25),H7(5),D5($43),H10($27)_^1_%EQU H2000($30)_G**MSOS4.0_^1_%EQU H4000($31€€)_G**MSOS4.0*_^1_%EQU D8($46)_J**MSOS4.0*_^1_%EQU H0800($2E)_G**MSOS4.0*_^1_%EQU HFFE0($17)_^1_%EQU_#XXK(1)_^1_%EQU_#TS(XXK+7)_^1_%EQU_#QS(TS+1)_^1_%EQU_#EMTK(QS+1)_^1_%EQU_#ERCA(EMTK+1)_^1_%EQU_#WDCNT(ERCA+1)_^1_%EQU_#NOWLB(WDCNT+1)_^1_%EQU_#SECAD(NOWLB+1)_^1_%EQU_#SIC(SECAD+2)_^1_%EQU_#WS(SIC+2)_^1_%EQU_#IOWC(WS+2)_^1_%EQU NOWLR(IOWC+1)_^1_%EQU_#ORCA(NOWLR+1)_^1_%EQU_#B1BABS(€€ORCA+2)_^1_%EQU_#NSIX(B1BABS+1)_^1_%EQU_#SSIX(NSIX+1)_^1_%EQU_#PIBUFF(SSIX+1)_^1_%EQU_#TERMSW(PIBUFF+16)_^1_%EQU_#RETAD(TERMSW+1)_^1_%EQU RA(RETAD+1)_^1_%EQU INTMP(RA+1)_^1_%EQU ZS(INTMP+2)_^1_%EQU_#ZSEC(ZS+3)_^1_%EQU_#TTEMP(ZSEC+2)_^1_%EQU_#HR(TTEMP+2)_^1_%EQU_#ORD(HR+1)_^1_%EQU_#WSK(ORD+1)_^1_%EQU_#LNOR(WSK+2)_^1_%EQU_#LASTAD(LNOR+1)_^1_%EQU_#LSECAD(LASTAD+1)_^1_%EQU SYSTEM(L€€SECAD+1)_^1_%EQU ADDCT1(SYSTEM+1)_^1_%EQU ERRNUM(ADDCT1+1)_^1_%EQU ENTSEC(ERRNUM+1)_^1_%EQU SECS(ENTSEC+3)_^1_%EQU SECX(SECS+2)_^1_%EQU IOSEC(SECX+2)_^1_%EQU BUF1S(IOSEC+2)_^1_%EQU SATMP(BUF1S+2)_^1_%EQU BUFF1A(SATMP+2)_^1_%EQU BUFF1B(BUFF1A+1)_^1_%EQU BUFF1C(BUFF1B+1)_^1_%EQU BUFF1D(BUFF1C+1)_^1_%EQU SICID(BUFF1D+1)_^1_%EQU IOSAD(SICID+1)_^1_%EQU NENT(IOSAD+1)_^1_%E€€QU NORD(NENT+1)_^1_%EQU NSEC(NORD+1)_^1_%EQU PDSN(NSEC+1)_^1_%EQU REMOV(PDSN+1)_^1_%EQU REMFIL(REMOV+1)_^1_%EQU UPDATE(REMFIL+1)_^1_%EQU POINT(UPDATE+1)_^1_%EQU SAT(POINT+1)_^1_%EQU DUP(SAT+1)_^1_%EQU INPPAR(DUP+1)_^1_%EQU IOSEAD(INPPAR+1)_^1_%EQU WORD(IOSEAD+1)_^1_%EQU SECXID(WORD+1)_^1_%EQU CSSAVE(SECXID+1)_^1_%EQU EXTLKA(CSSAVE+1)_^1_%EQU W1(EXTLKA+1)_^1_%EQU W2€€(W1+1)_^1_%EQU RDREQ(W2+1)_^1_%EQU MSINP(RDREQ+1)_^1_%EQU UPDL(MSINP+1)_^1_%EQU UPDL1(UPDL+1)_^1_%EQU UPDSAT(UPDL1+1)_^1_%EQU TRISEC(UPDSAT+2)_^1_%EQU NUSECT(TRISEC+1)_^1_%EQU CSCNT(NUSECT+1)_^1_%EQU FILIN(CSCNT+1)_^1_%EQU LAST(FILIN+1)_^1_%EQU ASAVA3(LAST+2)_^1_%EQU QSAVA3(ASAVA3+1)_^1_%EQU ASAVA4(QSAVA3+1)_^1_%EQU QSAVA4(ASAVA4+1)_^1_%EQU TEMPF7(QSAVA4+1)_B**MSOS4.€€0_^1_%SPC_#5_^1LBDT_!NUM $C8FE_(THIS IS DONE TO SET A_^1_%STA_#FILE2_%FLAG IN THE JOB PROCESSOR_^1_%NOP 0_)SELECTIVE STOP DEBUG CELL_^1_%RTJ_#ENDK_^1_%SPC_#5_^1*_$THESE ARE THE STORAGE ALLOCATIONS FOR_^1*_$THE EQU._^1_%SPC_#2_^1CONTAB NUM 0,0,0,0,0,0,0,0,0,0,0_^1ONE8_!NUM $08FD_$INPUT, COMMENT DEVICE_^1_%BZS CON2(10)_^1_%NUM_#$18FC_^1_%NUM_#$18FB_^1_%NUM_#0_^1_%NUM_#96_^1_%NUM€€_#60_^1_%BZS_#PIBF(16)_^1CON3_!NUM 0,0_^1_%NUM -1_^1_%NUM 0,-1_^1_%BZS CON4(71)_^1INBFAD NUM 0_^1BUF1A NUM 0_^1BFA58 NUM 0_^1BFA59 NUM 0_^1BFC93 NUM 0_^1BFC94 NUM 0_^1BFC95 NUM 0_^1BFC96 NUM 0_^1BFB93 NUM 0_^1BFB95 NUM 0_^1BFA93 NUM 0_^1BFA94 NUM 0_^1BFA95 NUM 0_^1BFC4_!NUM 0_^1BFC15 NUM 0_^1BF1BA NUM 0_^1TTTEMP ADC TTEMP_^1_%SPC 2_^1IOTAB ADC €€0,0,0,0,0,0,0_^1_%SPC_#2_^1_%EJT_]_^1*********************************************************************_^1ENDK_!0_"0_^1_%LDA*_"ENDK_^1_%STA- I_^1_%STQ- RETAD,I_%RETURN TO JOB PROCESSOR_^1_%RTJ* BA_^1BA_#NUM_#0_)ABSOLUTE LOC._^1_%LDA*_"BA_^1_%ADD_#=XB-BA_^1_%STA_#IP1_^1_%LDA =N$B00_K**MSOS 4.0_^1_%LDQ- ($E9)_(IF IN 65K MODE_5**MSOS 4.0_^1_%SQZ BA1X_)NO_A$*MSOS 4.0_^1_%STA* ADX€€R_)DON'T CLEAR UPPER ADDRESS_***MSOS 4.0_^1_%STA* ADXR1_(BIT ON PROTECT FAULTS_^1BA1X_!JMP START_(START INITIALIZATION_^1* *********************************************************************_^1*_]_^1*_*THIS IS THE LIBEDT PROTECT PROCESSOR._^1*_]_^1* *********************************************************************_^1B_$STA*_"E_*SAVE CONTENTS OF A_^1_%LDA* (AJKSW)_!IF JOB €€KILL SWITCH IS SET_^1_%SAP CBDERR_'KILL THE LOADERS REQUEST_^1_%LDA- (H100)_'WAS PROTECT FAULT CAUSED_^1ADXR_!AND- H7FFF_(BY LOADER ENTRY TO_^1_%INA -2_(JOB PROCESSOR....._^1_%SUB- $EE_^1_%SAN_#CBD-*-1_#SKIP IF A MONITOR CALL_^1_%LDA*_"E_*A RET FROM THE LOADER_^1KILLDR RTJ- ($EE)_#RETURN FROM LOADER TO USER_^1CBD_"LDA- (H100)_'NO, WAS PROTECT FAULT_^1ADXR1 AND- H7FFF_(CAUSED BY€€ LOADER ENTRY_^1_%INA -2_(TO MONITOR........_^1_%SUB- $F4_^1_%SAZ CBDOK-*-1_^1_%ENA 1_)NOT MONITOR ENTRY_^1_%STA* (AJKSW)_!SO KILL JOB_^1CBDERR ENA_!0_^1_%ENQ_!0_^1_%STQ- I_^1_%JMP* KILLDR_"KILL THE LOADER , RETURN TO USER OF LOADER_^1CBDOK LDA- ($F4)_(SAVE CONTENTS OF MONITOR ENTRY_^1_%STA* D1_^1_%RTJ SWAPCK_'TEST FOR SWAP REQUEST BEFORE MAKING THE_^1_%RAO UNPIO_(MONITOR €€CALL._^1_%LDA- $F4_^1_%INA_#1_*WITH THE MONITOR CALL_^1_%STA*_"D_^1_%IIN 0_^1_%LDA* D1_+RESTORE CONTENTS OF MON ENTRY_^1_%STA- ($F4)_^1_%LDA*_"E_^1_%JMP*_"(D)_^1D_$NUM_#0_^1D1_#NUM 0_,SCRATCH FOR MON ENTRY_^1E_$NUM_#0_^1AJKSW ADC_!SWTCH_#ADDRESS OF JOB KILL SWITCH POSITVE = KILL THE JOB_^1*_]_^1_%EJT_]_^1_%EQU ERROR(*)_^1*_#RELEASE LIBEDIT CONTROL MODULE_^1*_]_^1LIBXIT LDQ- RE€€TAD,I_%RETURN TO JOB PROCESSOR_^1_%CLR A_,CLEAR LOADER IN CORE FLAG_***MSOS4.0_^1_%STA LOADIN_'FOR SYSTEM_9**MSOS4.0_^1_%JMP- (ZERO),Q_^1_%SPC 4_^1*********************************************************************_^1JKILL 0_"0_^1_%STA* JKILLA_^1_%LDA SWTCH_$IS JOB-KILL ROUTINE IN_^1_%SAM JKILL1-*-1 MINUS IMPLIES NO_^1_%LDA* JKILAD_'NECESSARY TO EXIT BACK TO PROCESSOR_^1_%€€SAZ EXIT_^1_%ENQ 0_,IF *N OR *L_8**MSOS4.0*_^1_%ENA 7_,PROCESSORS IN CORE_1**MSOS4.0*_^1_%RTJ* READA3_'UPDATE ($C1)_7**MSOS4.0*_^1EXIT_!JMP* LIBXIT_K**MSOS4.0*_^1JKILL1 LDA* JKILLA_^1_%JMP* (JKILL)_^1JKILLA NUM_!0_^1JKILAD ADC 0_^1_%EJT_]_^1* *******************************************************************_^1*_]_^1*_]_^1*_1LIBEDT SUBROUTINE OVERLAY PROCESSORS_^1*_]_^1*_]_€€^1*_*THE FOLLOW TWO ROUTINES WITH ENTRY-POINTS READA3 AND_^1*_*READA4 BRING THE CALLED FOR SUBROUTINES INTO AREAS 3_^1*_*AND 4. ENTER THE PROCESSOR FOR THE DESIRED SUBROUTINE_^1*_*WITH THE NO. OF THE GRUOP CONTAINING THE SUBROUTINE IN A_^1*_*AND THE INDEX TO THE SUBROUTINE IN Q. IF THE SUBROUTINE_^1*_*REQUIRES PARAMETERS IN A AND Q FOR PROCESSING THESE MUST_^1*_*BE SAVED BEFORE ENT€€ERING THE OVERLAY PROCESSORS. A AND Q_^1*_*WILL THEN BE PASSED TO THE SUBROUTINE. THE RETURN ADDRESS_^1*_*WILL BE SET IN FIRST WORD OF THE SUBROUTINE WITH CONTROL_^1*_*PASSED TO THE SECOND WORD._^1*_]_^1* *******************************************************************_^1_%SPC 2_^1*_*GET PROGRAM INTO AREA 3_^1_%SPC 2_^1GOTIT SQP GOTO3-*-1_^1_%JMP* ERROR_(I/O ERROR GO AWAY_^€€1READA3 NUM 0_,START OF SUBROUTINE_^1_%STQ* QTEMP_^1_%TRA Q_^1_%EOR* PROG2_(CHECK IF CORRECT PROG IS IN AREA 3_^1_%SAZ 1_^1_%JMP* NOPRG_^1GOTO3 LDA* READA3_^1_%LDQ* ENDK_^1_%STQ- I_,PASS I TO THE SUBROUTINE_^1_%LDQ* QTEMP_^1STA_"STA AREA3,Q_%STORE RETURN IN AREA3 SUBROUTINE_^1_%LDA* *-1_^1_%AAQ A_^1_%INA -DIFF1_^1_%STA* JMP+1_^1_%LDA- ASAVA3,I_$PICKUP A AND Q_^1_%LDQ- QSAVA3€€,I_^1JMP_"JMP AREA3_(GO EXECUTE SUBROUTINE_^1_%EQU DIFF1(JMP-STA-1)_^1_%SPC 2_^1NOPRG LDA* PROLOC,Q_^1_%STQ* PROG2_(SET FOR NEW SUBROUTINE IN AREA 3_^1_%RTJ* MMADDR_'CALC. MM ADDRESS_^1_%STQ* MSBSR_^1_%STA* LSBSR_^1_%RAO* (UNPIOK)_$SET UNPROTECTED I/O FLAG_^1_%RTJ- ($F4)_^1GETROU ADC $300+CHRSLV_^1_%NUM 0_^1_%NUM 0_^1_%ADC MASSLU_^1_%ADC LAREA3_^1_%ADC AREA3-GETROU_^1MSBS€€R 0_"0_^1LSBSR 0_"0_^1CKTHRD LDA* GETROU+2_$CHECK THREAD FOR COMPLETION_^1_%SAZ 1_^1_%JMP* CKTHRD_^1_%RTJ* (SWAPK)_%CLR. UNPROTECTED I/O FLAG_^1_%LDQ* GETROU+3_^1_%JMP* GOTIT_^1_%SPC 2_^1QTEMP NUM 0_^1PROG2 NUM 0_,SUBROUTINE IN AREA 3_^1_%SPC 2_^1_%EQU PROLOC(*-1)_!TABLE OF AREA 3 PROGRAMS_^1_%ADC MASLOC-LBDT_!1_^1_%ADC INSERT-LBDT_!2_^1_%ADC SENDC-LBDT_"3_^1_%ADC SAC€€-LBDT_$4_^1_%ADC SEARCH-LBDT_!5_^1_%ADC INPUT-LBDT_"6_^1_%ADC MASSUP-LBDT_!7_^1_%ADC EES-LBDT_$8_^1_%ADC AINRBL-LBDT_!9_^1_%ADC AINS46-LBDT_"10_^1_%SPC 2_^1*_*GET PROGRAM INTO AREA 4_^1_%SPC 2_^1GOTIT1 SQP GOTO4-*-1_^1_%JMP* ERROR_(I/O ERROR GO AWAY_^1READA4 NUM 0_,START OF SUBROUTINE_^1_%STQ* QTEMP1_^1_%TRA Q_^1_%EOR* PROG3_(CHECK IF CORREDT PROGRAM IN AREA 4_^1_%SAZ 1€€_^1_%JMP* NOPRG1_^1GOTO4 LDA* READA4_^1_%LDQ ENDK_^1_%STQ- I_,PASS I TO THE SUBROUTINE_^1_%LDQ* QTEMP1_^1STA1_!STA AREA4,Q_%STORE RETURN IN AREA4 SUBROUTINE_^1_%LDA* *-1_^1_%AAQ A_^1_%INA -DIFF2_^1_%STA* JMP1+1_^1_%LDA- ASAVA4,I_$PICKUP A AND Q_^1_%LDQ- QSAVA4,I_^1JMP1_!JMP AREA4_(GO EXECUTE SUBROUTINE_^1_%EQU DIFF2(JMP1-STA1-1)_^1_%SPC 2_^1NOPRG1 LDA* SUBLOC,Q_^1_%STQ* PRO€€G3_(SET FOR NEW SUBROUTINE IN AREA 4_^1_%RTJ* MMADDR_'CALC. MM ADDRESS_^1_%STQ* MSBSR1_^1_%STA* LSBSR1_^1_%RAO* (UNPIOK)_$SET UNPROTECTED I/O FLAG_^1_%RTJ- ($F4)_^1GETSUB ADC $300+CHRSLV_^1_%NUM 0_^1_%NUM 0_^1_%ADC MASSLU_^1_%ADC LAREA4_^1_%ADC AREA4-GETSUB_^1MSBSR1 0_"0_^1LSBSR1 0_"0_^1CHKTHD LDA* GETSUB+2_$CHECK THREAD FOR COMPLETION_^1_%SAZ 1_^1_%JMP* CHKTHD_^1_%RTJ* (SWA€€PK)_%CLEAR UNPROTECTED I/O FLAG_^1_%LDQ* GETSUB+3_^1_%JMP* GOTIT1_^1PROG3 NUM 0_,SUBROUTINE IN AREA 4_^1_%SPC 2_^1QTEMP1 NUM 0_^1UNPIOK ADC UNPIO_^1SWAPK ADC SWAPCK_^1_%SPC 2_^1_%EQU SUBLOC(*-1)_!TABLE OF AREA 4 PROGRAMS_^1_%ADC MFREAD-LBDT_!1_^1_%ADC PPRK-LBDT_#2_^1_%ADC READIN-LBDT_!3_^1_%ADC KWRITE-LBDT_!4_^1_%SPC 2_^1* ********************************************€€***********************_^1*_]_^1*_1LIBEDT STATEMENT OVERLAY PROCESSOR_^1*_]_^1*_$THIS PROCESSOR IS USED TO BRING IN THE MAIN CONTROL MODULE_^1*_$FOR LIBEDT,FOR STATEMENT ANALYSIS,ERROR LOGGING,AND TO EXIT_^1*_$FROM LIBEDT. MAIN STATEMENT PROCESSING PROGRAMS ARE ALSO_^1*_$INITIATED THROUGH THIS OVERLAY ROUTINE._^1*_]_^1* *************************************************************€€******_^1_%SPC 4_^1_%SPC 2_^1TRANF STQ* QTEMP3_^1_%STA- ERRNUM,I_^1_%LDA =N600_(LENGTH OF READ FOR MAIN PROCESSOR_!**MSOS4.0*_^1_%STA* GTPRG1_^1NOINYT LDA* AGETRQ_^1_%RTJ* MMADDR_'CALC. MM ADDRESS_^1_%STQ* MSBPRC_^1_%STA* LSBPRC_^1_%SPC 2_^1*_*BRING REQUESTED PROGRAM INTO AREA 2_^1_%SPC 2_^1BRIPRO STA* PROG1_^1BRIPR1 RAO* (UNPIOK)_$SET UNPROTECTED I/O FLAG_^1_%RTJ- ($F4)_^1GE€€TPRG ADC $300+CHRSLV_^1_%NUM 0_^1_%NUM 0_^1_%ADC MASSLU_^1GTPRG1 ADC 0_^1_%ADC PROGIN-GETPRG_^1MSBPRC 0_"0_^1LSBPRC 0_"0_^1CHKTRD LDA* GETPRG+2_$CHECK THREAD FOR COMPLETION_^1_%SAZ 1_^1_%JMP* CHKTRD_^1_%RTJ* (SWAPK)_%CLEAR UNPROTECTED I/O FLAG_^1_%LDQ* GETPRG+3_^1_%SQP 2_^1_%JMP ERROR_^1_%JMP* PROGIN_^1_%SPC 2_^1AGETRQ ADC GETREQ-LBDT_!RELATIVE ADDR. TO GET MAIN PROCESSO€€R_^1PROG1 NUM 0_,PROGRAM IN AREA 2(PROGIN)_^1QTEMP3 NUM 0_^1_%SPC 2_^1*_*SUBROUTINE TO CALC. MASS MEMORY ADDRESS OF SUBROUTINE_^1*_*FROM MM ADDRESS OF LIBEDT IN SYSTEM DIRECTORY_^1*_*ENTRY AND ADDRESS OF SUBROUTINE RELATIVE TO LIBEDT_^1*_*(A-REG.=RELATIVE ADDRESS OF THE SUBROUTINE)_^1*_]_^1*_]_^1MMADDR 0_"0_^1_%STA* RELMMA_^1_%LDQ- $EB_*ADDRESS OF SYSTEM DIRECTORY_^1_%ADQ* LIBE€€NT_'PLUS ENTRY TO LIBEDT ENTRY_^1_%INQ 6_,PLUS 6 = CELL CONTAIN_^1_%LDA- (ZERO),Q_$MM ADDRESS OF LIBEDT_^1_%MUI =N96_)CONVERT FROM SECTOR ADDRESSING_^1_%LLS 1_,TO WORD ADDRESSING_^1_%ALS 15_^1_%SOV 0_^1_%ADD* RELMMA_'ADD RELATIVE ADDRESS OF SUBROUTINE_^1_%SNO NOOVF-*-1_^1_%INQ 1_^1_%AND- LPMASK+15_^1NOOVF JMP* (MMADDR)_$Q=MSB,A=LSB_^1RELMMA 0_"0_^1LIBENT ADC LIBEDT_^1_%SPC€€ 4_^1_%SPC 4_^1_%EQU BUFFER(*)_^1*_$THIS BUFFER MUST REMAIN JUST BEFORE AREA2_^1*_*INITIALIZE I/O TABLE FOR LIBEDT USE._^1*_]_^1_%EJT_]_^1START NOP 0_^1_%LDA- $B3_+SCRATCH UNIT_^1_%STA IOTAB_^1_%LDA- $C2_+LIBRARY UNIT_^1_%ADD* N1000_^1_%STA IOTAB+1_^1_%LDA- $F9_+STANDARD I/P_^1_%STA IOTAB+2_^1_%LDA- $FA_+STD BIN O/P_^1_%STA IOTAB+3_^1_%LDA- $FB_+STANDARD PRINT_^1_%ADD* N1€€000_^1_%STA IOTAB+4_^1_%LDA- $FC_+O/P COMMENT_^1_%ADD* N1000_^1_%STA IOTAB+5_^1_%LDA- $F6_^1_%STA- $EC_^1_%LDA- $F7_*SET ABSOLUTE ADDRESS OF BUFFERS_^1_%INA 1_^1_%STA- BUFF1B,I_^1_%STA- B1BABS,I_$ABS ADDR OF BUFF1B_^1_%INA 96_^1_%STA- BUFF1C,I_^1_%INA 96_^1_%STA- BUF1S,I_%1ST SAT I/P BUFFER_^1*_8SAT IS SECTOR AVAILIBILITY TABLE_^1*_0INITIALIZE SAT PARAMETERS_^1_%INA 96_^1_%€€STA- BUFF1A,I_^1_%INA 96_^1_%STA- BUFF1D,I_^1_%STA- IOSAD,I_%FOR LIB PROG. I/P_^1_%INA 96_O**MSOS4.0*_^1_%STA- TEMPF7,I_J**MSOS4.0_^1_%STA- $ED_N**MSOS4.0*_^1_%ENQ 5_P**MSOS4.0*_^1_%LDA- ($E9),Q_%PICKUP ADDR. OF SAT_0**MSOS4.0*_^1_%STA- SECS+1,I_^1_%ENA SECX_^1_%ADD- I_^1_%STA- SECXID,I_^1_%ENA IOSEC_^1_%ADD- I_^1_%STA- IOSEAD,I_^1_%ENA SIC_^1_%ADD- I_^1_%STA- SICID,I_^1_%LDA€€- BUFF1C,I_^1_%INA 93_^1_%STA BFC93_^1_%INA 1_^1_%STA BFC94_^1_%INA 1_^1_%STA BFC95_^1_%INA 1_^1_%STA BFC96_^1_%LDA- BUFF1A,I_^1_%INA 58_^1_%STA BFA58_^1_%INA 1_^1_%STA BFA59_^1_%LDA- BUFF1B,I_^1_%INA 93_^1_%STA BFB93_^1_%INA 2_^1_%STA BFB95_^1_%LDA- BUFF1C,I_^1_%INA 4_^1_%STA BFC4_^1_%LDA- BUFF1A,I_^1_%INA 93_^1_%STA BFA93_^1_%INA 1_^1_%STA BFA94_^1_%INA 1_^€€1_%STA BFA95_^1_%LDA IUP_*PICK-UP V SWITCH FROM JOB PROCESSOR_^1_%AND- HFFF_^1_%CLR Q_^1_%LLS 8_,CHECK FOR INDIRECT SWITCH SET_^1_%SQN PICKLU_'YES - PICK IT UP_^1_%ALS 8_,NO - USE WHAT IS GIVEN_^1_%JMP* STORLU_^1N1000 NUM $1000_^1PICKLU CLR Q_^1_%LLS 8_,PICK-UP UNIT NO._^1_%LDA- (ZERO),Q_^1STORLU TRA Q_R*518_^1_%LDA+ IUP GET J B MODE BIT_>*518_^1_%AND- $2F_"$1000_G*518_€€^1_%AAQ A_R*518_^1_%STA IOTAB+6 PUT INTO LU TABLE_:*518_^1_%EXT IUP_^1_%LDA =XBA-IOTAB_^1_%TCA A_^1_%ADD BA_^1_%STA- ERCA,I_^1_%LDA- $FD_^1_%ADD- H1000_^1_%STA- SECAD,I_^1_%ENQ_!3_^1_%STQ- QSAVA4,I_^1_%ENQ 0_^1_%ENA 4_^1_%RTJ READA4_^1_%ALF_!1,_^1_%ALF_#1,LI_^1_%NUM $420D_(B *CR_^1_%ENA_#0_^1_%STA- TERMSW,I_^1_%ENQ 4_,GET SYSTEM SECTOR FROM_-**MSOS4.0_^1_%LDA- ($E9),Q_%€€EXTENDED LOCORE TABLE_.**MSOS4.0*_^1_%STA- SYSTEM,I_!SECTOR ON WHICH SYSTEM RESIDES_^1_%ENQ 0_^1_%JMP TRANF_(BRING MAIN PRECESSOR_^1_%EQU LCHRIS(BUFFER+LNGTH+LAREA3+LAREA4-LBDT)_^1_%EQU PROGIN(BUFFER)_^1_%EQU AREA3(BUFFER+LNGTH)_^1_%EQU AREA4(BUFFER+LNGTH+LAREA3)_^1_%EJT_]_^1* *******************************************************************_^1*_]_^1*_1MAIN LIBEDT CONTROL €€PROGRAM_^1*_]_^1* *******************************************************************_^1_%EQU GTRREL(*-PROGIN)_^1GETREQ LDA ENDK+GTRREL_^1_%STA- I_^1_%LDA- ERCA,I_^1_%STA* IOTAD_^1_%LDQ QTEMP3+GTRREL_^1_%JMP* *+1,Q_^1_%JMP* RPSA_^1_%JMP* RPSX_^1_%JMP* NEXT_^1IOTAD ADC 0_^1RPSA_!ENA 0_,RE-INITIALIZE JOB KILL RETURN_^1_%STA JKILAD+GTRREL ADDRESS_^1_%STA PROG2+GTRREL CLEAR P€€ROGRAM IN AREA3_^1_%STA PROG3+GTRREL CLEAR PROGRAM IN AREA4_^1_%RTJ* *+1_^1RPSB_!NOP 0_^1_%LDA* RPSB_/CALC. BGN. ADDRESS FOR_^1_%SUB =XRPSB-PIBF-GTRREL_%PARAMETER READ_^1_%STA_#RPARS_^1_%ENQ_#0_+INITIALIZE PARAM_^1_%LLS_#1_+PICKUP COUNTER_^1_%STA- ADDCT1,I_^1*_]_^1RPSX_!LDA SWTCH_$IS J0B-KILL ROUTINE IN_^1_%SAM RPPSX-*-1 MINUS IMPLIES NO_^1_%JMP LIBXIT+GTRREL RELEASE LIBEDI€€T_^1*_]_^1RPPSX ENQ_!3_^1_%STQ- QSAVA4,I_^1_%ENA 4_^1_%ENQ 0_,KWRITE WRITE IN MESSAGE_^1_%RTJ READA4+GTRREL_^1_%ALF 2, IN_^1_%NUM_!$200D_#SPACE CR_^1_%LDA- PIBUFF,I_!CONTROL STMNT INPUT BUFFER_^1_%INA 0_^1_%SAP DOREAD-*-1_^1_%TCA A_^1_%STA- PIBUFF,I_!STMNT FOUND SWITCH WAS SET_^1_%RTJ_!KPRNT_^1_%JMP* KKKRD_^1DOREAD RTJ KREAD_$READ A LIBEDT CONTROL STMNT_^1KKKRD LDA- HFF0€€0_(FIRST CHARACTER MASK_^1_%AND-_"PIBUFF,I_^1_%SUB*_"AST_^1_%SAZ XXQ_^1PREKRD ENA_#4_^1_%JMP_#NEXT1_^1XXQ_"ENQ 0_^1_%ENA 2_,PPRK_^1_%RTJ READA4+GTRREL_^1_%SQN_#1_^1_%JMP*_"PREKRD_^1_%INA_#-1_^1_%SAN X2_^1_%JMP*_"PREKRD_^1X2_#JMP_#TABLK_^1AST_"NUM_#$2A00_^1*_]_^1*_#ERROR MESSAGE OUTPUT_^1*_]_^1NEXT_!LDA- ERRNUM,I_^1NEXT1 0_"0_,CONVERT ERROR NO TO_^1_%ENQ_!0_^1_%DVI- D10_^1_%AL€€S_!8_^1_%ADD =A00_^1_%AAQ_!A_^1_%STA* OUTX_^1NEXT1B ENQ 2_S62*1311_^1_%STQ- QSAVA4,I_^1_'ENQ 0_,KWRITE WRITE IN MESSAGE_^1_%ENA 4_^1_%RTJ READA4+GTRREL PRINT ERROR MESSAGE_^1_%ALF_!1, L_^1OUTX_!ADC 0_^1_%LDA* NEXT1A_N62*1311_^1_%SAN NEXT1D_'INPUT NOT COMMENT DEVICE_.62*1311_^1_%ENQ 6_^1_%LDA* (IOTAD),Q_^1_%STA-_"SECAD,I_^1*_89 CARDS DELETED_^1_%LDA- $FD_*SAVE PREVIOUS LUN_€€^1_%ADD- H1000_^1_%ENQ 6_^1_%STA* (IOTAD),Q_#SECT FOR ICM_^1_%SUB- SECAD,I_M62*1311_^1_%SAZ NEXT1C_'STANDARD INPUT COMMENT DEVICE_)62*1311_^1_%STA* NEXT1A_N62*1311_^1_%JMP* NEXT1B_'NO, OUTPUT ERROR MESSAGE TO COMMENT_"62*1311_^1NEXT1D LDA- RETAD,I_%RETURN TO JOB PROCESSOR_/62*1311_^1_%INA -1_R62*1311_^1_%STA- RETAD,I_%TO ABORT CURRENT JOB_262*1311_^1_%JMP LIBXIT+GTRREL_G62*1311€€_^1NEXT1C JMP* RPSA_P62*1311_^1NEXT1A NUM 0_S62*1311_^1* **************************************************_^1* THIS ROUTINE READS A LIBEDIT REQUEST INTO_^1* PIBUFF. CALLING SEQUENCE FOR THIS REQUEST_^1* MUST NOT BE PROGRAM MODIFIED._^1KREAD 0_"0_^1_%LDA- TERMSW,I_^1_%SAZ_#X3-*-1_^1_%ENA_#0_^1_%STA- TERMSW,I_^1_%JMP*_"(KREAD)_^1X3_#ENQ 6_^1_%LDA* (IOTAD),Q_^1_%STA*_"RCA+2_^1_%EN€€Q_#15_)INITIALIZE PIBUFF TO_^1_%ENA_#-0_)ALL ONES._^1X32_"STA- PIBUFF,B_^1_%SQZ X31_^1_%INQ_#-1_^1_%JMP* X32_^1X31_"RTJ- ($F4)_(PERFORM READ_^1_%NUM_#$800_^1RCA_"NUM_#0_^1_%NUM_#0_^1_%NUM_#$18FD_^1_%NUM_#$10_^1RPARS NUM_#0_+LOOP TO WAIT FOR_^1RPARS1 LDA* RCA+1_^1_%SAZ_#1_^1_%JMP* RPARS1_'NOT COMPLETE_^1_%LDA* RCA+2_$TEST FOR NO DATA RETURN_^1_%SAP CONT-*-1_!POS IMPLIES NO ERROR €€RETURN_^1_%LDA- $FD_^1_%ADD- H1000_^1_%ENQ 6_^1_%STA (IOTAD),Q_K62*1311_^1_%JMP RPSX_%TYPE IN COMMENT_^1CONT_!ENQ 6_^1_%LDA (IOTAD),Q_^1_%EOR- $FD_^1_%AND- HFF_^1_%SAN CONTA1_^1_%JMP*_!(KREAD)_^1CONTA1 LDA* RPARS_^1_%INA_!-1_^1_%STA* CONT3_^1_%LDA* (CONT3)_^1_%STA* SEVA_^1_%LDA =A_+BLANKS_^1_%STA* (CONT3)_^1_%ENQ 4_^1_%LDA (IOTAD),Q_^1_%STA* CONT3-2_^1_%RTJ- ($F4)_^€€1_%NUM_!$0C00_^1_%NUM_!0,0,0,$10_^1CONT3 NUM_!0_^1CONT3A LDA* CONT3-3_^1_%SAZ_!1_^1_%JMP* CONT3A_^1_%LDA* SEVA_^1_%STA* (CONT3)_^1CONT2 JMP* (KREAD)_^1SEVA_!NUM_!0_^1KPRNT NUM_!0_^1_%LDA* KPRNT_^1_%STA* KREAD_^1_%JMP* CONT_^1_%EJT_]_^1* **************************************************_^1* THIS ROUTINE TAKES THE FIRST PARAMETER FROM A_^1* LIBEDT REQUEST AND LOOKS IN THE F€€UNCTION TABLE_^1* TO SEE IF IT IS A LEGAL PARAMETER. IF LEGAL_^1* THE ADDRESS OF THE NECESSARY ROUTINE IS IN THE_^1* Q-REGISTER AND THE A-REGISTER IS ZERO. IF NOT_^1* LEGAL THE A-REGISTER IS NOT ZERO, Q-REGISTER IS_^1* NOT USED._^1TABLK 0_"0_^1_%ENQ_#0_^1_%ENA_#FEND-FUNTAB_#CALCULATE LENGTH OF_^1_%DVI- H2_^1_%STA-_"XXK+6,I_^1_%ENA_#0_^1_%STA*_"LPS_^1_%ENQ_#0_^1LP_#LDA_!FUNTAB,Q_€€(START COMPARING TABLE_^1_%SUB-_"XXK,I_^1_%SAN LP1_^1_%JMP*_"LP2_^1LP1_"INQ 2_^1_%LDA-_"XXK+6,I_^1_%INA_#-1_^1_%SAZ LP1A_^1_%STA-_"XXK+6,I_^1_%JMP*_"LP_^1LP1A_!ENA FEND1-FEND_^1_%STA-_"XXK+6,I_^1_%SAN LP1B_^1_%JMP_#PREKRD_^1LP1B_!INA -6_^1_%SAP LP1C_^1_%STA*_"LPS_^1LP1C_!ENQ 1_^1LP3_"LDA_!FEND,Q_%FIRST WORD_^1_%SUB-_"XXK,I_^1_%SAZ_#XX2-*-1_^1_%INQ_#3_^1_%JMP*_"XX1_^1XX2_"IN€€Q_#1_^1_%LDA_!FEND,Q_'SECOND WORD_^1_%SUB-_"XXK+1,I_^1_%SAN XX2A_)A MATCH_^1_%JMP*_"LP22_'YES_^1XX2A_!INQ 2_^1XX1_"LDA*_"LPS_^1_%SAN XX1A_^1_%STQ*_"LPS_(SET LPS TO NON ZERO_^1_%JMP*_"LP3_(TRY SECOND (*DL)_^1XX1A_!JMP PREKRD_^1LP2_"LDA- XXK+1,I_%DELIMMITER MISSING_^1_%SAM 2_^1_%JMP PREKRD_'YES,ERROR 4_^1_%INQ 1_^1_%JMP_#FUNTAB,Q_^1LP22_!INQ_#1_^1_%JMP_!FEND,Q_^1LPS_"ADC 0_^1€€*_8DL_^1M1_#ENQ_#0_*SET CORRECT MODULE_^1_%JMP*_"MGO_^1*_8DM_^1M2_#ENQ_#1_^1_%JMP*_"MGO_^1*_8V,LUIN_^1M3_#ENQ_#2_^1_%JMP*_"MGO_^1*_8U_^1M4_#ENQ_#3_^1_%JMP*_"MGO_^1*_8Z_^1M5_#ENQ_#4_^1_%JMP*_"MGO_^1*_8K,I INPUT, P OUTPUT, L OUTPUT_^1M6_#ENQ_#5_^1_%JMP*_"MGO_^1*_8P, F OR *P, ENTRY NAME_^1M7_#ENQ_#6_^1_%JMP* MGO_^1*_8M, ORDINAL, SECTOR, M_^1M8_#ENQ_#7_*0_^1_%JMP* MGO_^1*_8L, NAME_^1M9€€_#ENQ_#8_^1_%JMP*_"MGO_^1*_8N, NAME, START, END, A OR B_^1M10_"ENQ_#9_^1_%JMP* MGO_^1M11_"ENQ 10_(*S,ORD,VALUE,M_^1_%JMP* MGO_^1M12_"ENQ 11_(*T,LUIN,MODEIN,LUOUT,MODEOUT_^1_%JMP*_"MGO_^1M13_"ENQ_#12_+*R,NAME,F_^1_%JMP* MGO_^1M14_"ENQ 13_+*A,ORD,S,N,D,C,L,P,M_^1MGO_"LDA* ADCT,Q_^1_%SAP 2_^1_%JMP LIBXIT+GTRREL MINUS IMPLIES *Z - KILL THE JOB_^1_%SAN MGO1_^1_%LRS 1_,ZERO IMPLIE€€S *V, *U, OR *K PROCESSOR_^1_%SAM 1_^1_%JMP* SYSINP_^1_%LRS 1_^1_%SAM 2_^1_%JMP CHANGE_^1_%JMP* CONCTL_^1MGO1_!STQ PROG1+GTRREL_^1_%RTJ MMADDR+GTRREL_^1_%STQ MSBPRC+GTRREL_^1_%STA LSBPRC+GTRREL_^1_%LDA =N400_(LENGTH OF READ FOR AREA2_+**MSOS4.0*_^1_%STA GTPRG1+GTRREL BACK LENGTH FOR STATEMENT PROCESSORS_^1_%JMP BRIPR1+GTRREL_^1_%SPC 2_^1ADCT_!ADC LISTPD-LBDT_!1_^1_%ADC€€ LISTSD-LBDT_!2_^1_%ADC 0_,3_^1_%ADC 0_,4_^1_%NUM -1_+5_^1_%ADC 0_,6_^1_%ADC PGHABS-LBDT_!7_^1_%ADC SLINSN-LBDT_!8_^1_%ADC PLINSN-LBDT_!9_^1_%ADC FILE-LBDT_#10_^1_%ADC RPUPDT-LBDT_!11_^1_%ADC COPY-LBDT_#12_^1_%ADC PLINSN-LBDT_!13_^1_%ADC AINSN-LBDT_^1_%SPC 2_^1* **************************************************_^1FUNTAB ALF 1,*M_)1_^1_%JMP*_"M8_^1_%ALF 1,*L_)2_^1_%€€JMP*_"M9_^1_%ALF 1,*P_)3_^1_%JMP*_"M7_^1_%ALF 1,*V_)4_^1_%JMP*_"M3_^1_%ALF 1,*U_)5_^1_%JMP*_"M4_^1_%ALF 1,*Z_)6_^1_%JMP*_"M5_^1_%ALF 1,*K_)7_^1_%JMP*_"M6_^1_%ALF 1,*N_)8_^1_%JMP*_"M10_^1_%ALF 1,*S_)9_^1_%JMP* M11_^1_%ALF 1,*T_)10_^1_%JMP* M12_^1_%ALF 1,*R_)11_^1_%JMP*_"M13_^1_%ALF 1,*A_^1_%JMP* M14_^1FEND_!NUM_#0_^1_%ALF 1,*D_)12_^1_%NUM $4DFF_(M_^1_%JMP*_"M2_^1_%ALF 1€€,*D_)13_^1_%NUM $4CFF_(L_^1_%JMP*_"M1_^1FEND1 NUM_#0_^1*********************************************************************_^1*_8*V, LU NO._^1SYSINP ENQ 0_^1_%ENA 2_^1_%RTJ READA4+GTRREL SET UP FOR PPRK_^1_%SQZ PRKUP_^1_%JMP* SYSIN2_^1PRKUP ENA 0_^1SYSIN1 ADD- $F9_^1_%JMP* SYSIN6_^1SYSIN2 SAN CHRUP_^1_%ENA_!6_^1_%JMP NEXT1_(ERROR 6_^1CHRUP LDA- XXK,I_(NO,LUN_^1_%SAN S€€TAMP_^1_%LDA-_"$F9_^1STAMP STA* SYSTMP_^1SYSIN3 ENQ 0_^1_%ENA 2_^1_%RTJ READA4+GTRREL SEE IF B PARA. I/P_^1_%SQN BRITY_^1SYSIN4 ENA_!0_^1_%JMP* SYSIN5_^1BRITY LDA- XXK,I_^1_%SUB* BCELL_^1_%SAZ BCEL1A_^1_%JMP* SYSIN4_^1BCEL1A LDA- $2F_^1SYSIN5 ADD* SYSTMP_^1SYSIN6 ENQ 6_^1_%STA (IOTAD),Q_^1_%JMP RPSA_^1BCELL NUM_!$41FF_^1SYSTMP NUM 0_^1_%EJT_]_^1***********************€€**********************************************_^1*_8* U PROCESSOR_^1CONCTL LDA- $FD_^1_%ADD- H1000_(1000_^1_%ENQ_!6_^1_%STA (IOTAD),Q_^1_%JMP RPSA_^1**********************************************************************_^1*_]_^1*_+THIS ROUTINE PROCESSES THE *K CONTROL STATEMENT_^1*_*STANDARD INPUT,PRINT OR BINARY OUTPUT LOGICAL UNITS MAY_^1*_*BE CHANGED IN IOTAB DEPENDING ON THE€€ *K OPTIONS._^1*_]_^1CHANGE NOP_!0_(THIS IS NOT A SUBROUTINE_^1CH0_"ENA 2_^1_%ENQ 0_^1_%RTJ READA4+GTRREL_^1_%SQN CH1_^1_%JMP_!RPSA_^1CH1_"INQ -2_^1_%STQ- XXK+5,I_^1_%SQZ CH2_^1_%INQ_!-1_^1_%SQZ CH2_^1_%JMP* CHERRY_^1CH2_"SAZ 1_^1_%JMP* CHERRY_^1_%LDA- XXK,I_(TEST FOR I,L OR P PREFIX_^1_%AND*_!HMSK_*FF00_^1_%ALS_!8_^1_%SUB* H49_^1_%SAN CH3_^1_%RTJ* CHCNVT_'CONVERT NUMER€€IC PART TO BINARY_^1_%RTJ* LU1CK_(CHECK FOR LU 1_^1_%ENQ 2_^1_%STA (IOTAD),Q_^1_%JMP* CH0_^1CH3_"SUB* N3_^1_%SAN CH5_^1_%RTJ* CHCNVT_(L_^1_%RTJ* LU1CK_(CHECK FOR LU 1_^1_%ADD- $2F_^1_%ENQ 4_^1_%STA (IOTAD),Q_^1_%JMP* CH0_^1CH5_"SUB* N4_^1_%SAZ CH6_^1CHERRY ENA_!4_^1_%JMP NEXT1_^1CH6_"RTJ* CHCNVT_^1_%ENQ 3_^1_%STA (IOTAD),Q_^1_%JMP* CH0_^1*_]_^1*_$CONVERT ASCII L.U. TO BIN€€ARY_^1*_]_^1CHCNVT 0_"0_^1_%LDA- XXK,I_^1CHCGO AND-_!$A_^1_%SUB_!=N$3A_^1_%SAM CH7_^1_%JMP* CHERRY_^1CH7_"INA $A_^1_%SAP CH8_^1_%JMP*_!CHERRY_^1CH8_"LDQ- XXK+5,I_^1_%SQN CH9_^1_%JMP* (CHCNVT)_^1CH9_"SQP CH10_^1_%ADD* CTTH_^1_%JMP* (CHCNVT)_^1CH10_!MUI =N10_^1_%STA*_!CTTH_^1_%LDA- XXK+5,I_^1_%INA_!-2_^1_%STA-_!XXK+5,I_^1_%LDA- XXK+1,I_^1_%ARS_!8_^1_%JMP* CHCGO_^1CTTH_€€!NUM_!0_^1HMSK_!NUM $FF00_^1N3_#NUM 3_^1N4_#NUM 4_^1H49_"NUM $49_^1LU1CK NUM 0_,SUBROUTINE TO CHECK FOR LU 1_^1_%INA -1_^1_%SAN 3_Q58*1192_^1_%ENA 6_^1_%JMP NEXT1_^1_%INA 1_^1_%JMP* (LU1CK)_^1_%EJT_]_^1**********************************************************************_^1*_]_$*_^1*_1LIBEDT STATEMENT PROCESSING PROGRAMS_-*_^1*_]_$*_^1***********************************€€***********************************_^1_%SPC 4_^1**********************************************************************_^1*_]_^1* THIS ROUTINE PRINTS THE PROGRAM LIBRARY DIRECTORY._^1* ENTRIES FOR FILES ARE MARKED. THE FOLLOWING IS_^1* THE FORMAT OF THE OUTPUT._^1*_]_^1*_6BINFIL SECT. 5683 FILE_^1*_]_^1*_6EQSOV SECT. 2386_^1*_]_^1* THE LISTING IS TERM WITH THE WORD -FINI-. SPA€€CES_^1* ARE LEFT BETWEEN INDIVIDUAL ENTRIES._^1*_]_^1_%EQU LPDREL(*-PROGIN)_^1**********************************************************************_^1_%SPC 2_^1*_**DL_^1_%SPC 2_^1LISTPD LDA ENDK+LPDREL_^1_%STA- I_^1_%RTJ* BB_^1BB_#ADC 0_^1_%ENA_#KS-BB_$(ABS.ADD OF CELL CONT SECT_^1_%ADD*_"BB_)NUMBER ) - 1 INTO Q_^1_%STA-_"XXK+1,I_^1_%LDA-_"$C3_^1_%LDQ-_"$C4_(BEGIN. SECT. NO.€€ OF DIR._^1REPRD STA*_"KS_)STORE FOR USE._^1_%STQ*_"KS+1_^1_%AAQ A_)TEST FOR LAST DIRECTORY SECTOR_^1_%SAN IDGO_^1_%RAO* LSWK_%SET LAST SECTOR FLAG_^1_%JMP* EXITS_$ZERO IF NO DIRECTORY_^1IDGO_!CLR Q_^1_%STQ* LSWK_^1ID_#LDA- BUFF1A,I_$A (BUFF1A)_^1_%STA-_"HR,I_'SAVE ABS ADDR OF BUFF_^1_%ENA_#18_)NUMB. OF ENTRIES/SECTOR_^1_%STA-_"XXK,I_^1_%ENA_#96_^1_%STA-_"WS,I_^1_%LDA-_"HR,I_^1€€_%LDQ-_"XXK+1,I_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_,MFREAD_^1_%ENA 1_^1_%RTJ READA4+LPDREL_^1_%LDQ (BFA93+LPDREL)_^1_%SQZ_#LPXF-*-1_^1_%ENA_#90_)YES. CALC NO. OF ENT IN I_^1_%TCQ_#Q_^1_%AAQ_#A_^1_%CLR Q_)ZERO TO Q_^1_%DVI- D5_^1_%STA-_"XXK,I_^1_%STA*_"LSWK_'LAST SECT INDICATOR ON_^1LPXF_!LDA-_"XXK,I_%TEST IF SECTOR COMPLETE_^1_%SAZ LPXFA_^1_%JMP*_"X10_^1LPXFA LDQ*€€ LSWK_)YES. WAS IT LAST SECT._^1_%SQN EXITS_^1_%JMP*_"X11_^1EXITS ENQ 1_)OUTPUT 1 WORD_^1_%STQ- QSAVA4,I_^1_%ENQ OWRIT_(OWRITE ROUTINE_^1_%ENA 4_^1_%RTJ READA4+LPDREL_^1_%ALF_#1,_^1EXET_!ENQ_!3_^1_%STQ- QSAVA4,I_^1_%ENQ OWRIT_)OWRITE ROUTINE_^1_%ENA 4_^1_%RTJ READA4+LPDREL_^1_%ALF_!1,_^1_%ALF_#2,FINI_^1_%ENQ 0_^1_%JMP TRANF+LPDREL_^1*_]_^1X11_"LDA (BFA94+LPDREL)_"NOT LA€€ST BUFF SECTOR NO._^1_%LDQ (BFA95+LPDREL)_"OF NEXT BUFFER TO READ_^1_%JMP*_"REPRD_%GO READ_^1X10_"INA_#-1_)NO. SECT NOT COMPLETE._^1_%STA-_"XXK,I_^1_%ENA_#0_*TEST ENTRY TO SEE IF IT_^1_%LDQ-_"HR,I_^1_%ADD- (ZERO),Q_^1_%ADD-_"1,Q_^1_%ADD-_"2,Q_^1_%ADD-_"3,Q_^1_%ADD-_"4,Q_^1_%SAN X12_^1_%JMP*_"C2K_(YES. AN EMTY ENTRY_^1X12_"ENA_!12_^1_%STA-_"TS,I_^1_%LDQ-_"HR,I_^1_%LDA- (ZERO),Q_$W€€ORD ONE OF NAME_^1_%STA* FIL+1_^1_%LDA- 1,Q_'WORD TWO OF NAME_^1_%STA* FIL+2_^1_%LDA- 2,Q_'WORD THREE OF NAME_^1_%STA* FIL+3_^1_%RTJ*_"KCON_'ENT FOR PRINTING_^1_%ENQ_#FIL-BB_^1_%ADQ*_"BB_^1_%LDA-_"TS,I_^1_%RTJ*_"KPWRIT_$PRINT BUFF_^1C2K_"LDA-_"HR,I_^1_%INA_#5_^1_%STA-_"HR,I_^1_%JMP*_"LPXF_'RECYCLE._^1FIL_"ALF_!4,_^1_%ALF_#1,_^1SEX2_!ALF_#3,SECT._#SECT. NUMB. PRINT BUFF_^1_%NUM_#€€0,0,0,0_^1_%ALF_#3, FILE_^1KS_#NUM 0,0_*SECT. NO. CELL_^1LSWK_!NUM 0_,LAST SECTOR SWICH_^1ADD_"NUM 0_,ADDRESS CELL FOR KCON_^1* **************************************************_^1KPWRIT 0_"0_^1_%STQ*_"X13+1_^1_%STA*_"X13_^1_%RTJ JKILL+LPDREL TEST FOR JOB KILL ROUTINE_^1_%LDA IOTAB+4+LPDREL_^1_%STA* X13-1_^1_%RTJ-_"($F4)_^1_%NUM $4C00,0,0,$18FB_B**MSOS4.0*_^1X13_"NUM_#0,0€€_^1X13A_!LDA* X13-2_^1_%SAZ SCRBL_^1_%JMP* X13A_^1SCRBL JMP* (KPWRIT)_^1_%SPC 2_^1* **************************************************_^1* THIS ROUTINE CONVERTS THE LAST TWO WORDS OF A_^1* PROGRAM DIRECTORY ENTRY FROM HEX TO ASCII._^1* IT USES THE ROUTINE HEXASC. WORD TO CONVERT IN A,_^1* CONVERTED WORDS IN QA._^1KCON_!0_"0_,CONVERTION ROUTINE_^1_%STQ*_"ADD_(SAVE ADDRESS_^1_%LDA€€- 3,Q_'MSB OF MASS STG SECT NBR_^1_%SAZ X3A-*-1_%IS MSB ZERO_^1_%SAP X4-*-1_#IS ENTRY PERM FILE_^1_%ENA_!15_^1_%STA- TS,I_%WORD COUNT FOR OUTPUT_^1X3A_"LDA* BLANK_(MINUS IMPLIES YES_^1_%LDQ* BLANK_^1_%JMP* X5_^1X4_#RTJ* HEXASC_#CONVERT MSB OF MASS STG SECT_^1X5_#STQ* SEX2+3_#STORE IN PRINT BUFFER_^1_%STA*_"SEX2+4_^1_%LDQ*_"ADD_^1_%LDA- 4,Q_'LSB OF MASS STG SECT NBR_^1_%RTJ*_"HEXA€€SC_$CONVERT_^1_%STQ*_"SEX2+5_$STORE IN PRINT BUFF_^1_%STA*_"SEX2+6_^1_%JMP*_"(KCON)_$RETURN_^1BLANK NUM $2020_$TWO BLANKS_^1_%SPC 2_^1* **************************************************_^1HEXASC 0_"0_^1_(STA*_$STORE_^1_(ENA_%-2_^1_(STA*_$COUNT_/SET COUNT TO_^1BACK1_"RTJ*_$GETHEX_.PICK UP HEX_^1_(ALS_%8_3STORE CHARAC_^1_(LDQ*_$COUNT_1STORE+1+(C_^1_(STA*_$STORE+3,Q_^1_(RTJ*_$GETH€€EX_.PICK UP NEXT_^1_(LDQ*_$COUNT_/STORE CHARAC_^1_(ADD*_$STORE+3,Q_-STORE+1+(C_^1_(STA*_$STORE+3,Q_^1_(RAO*_$COUNT_/INCREASE (CO_^1_(LDA*_$COUNT_1FOR ZERO_^1_%SAZ COUNTA_'SKIP TO EXIT_^1_(JMP*_$BACK1_/LOOP IF NOT_^1COUNTA LDQ* STORE+1_%PUT 2 LEFT D_^1_(LDA*_$STORE+2_-PUT 2 RIGHT_^1_(JMP*_$(HEXASC)_,EXIT FROM HE_^1STORE NUM 0,0,0,0_^1_(EQU_%COUNT(STORE+3)_^1GETHEX 0_"0_^1_(LDA*_$€€STORE_/SHIFT 4 BITS_^1_(ALS_%4_^1_(STA*_$STORE_^1_(ENQ_%$F_2EXTRACT 4 BI_^1_(LAQ_%Q_^1_(LDA*_$HEX,Q_/PICK UP ASCI_^1_(JMP*_$(GETHEX)_^1_(SPC_%2_^1HEX_$NUM_%$30,$31,$32,$33,$34,$35,$36,$37_^1_%NUM_#$38,$39_^1_(NUM_%$41,$42,$43,$44,$45,$46_^1_%EJT_]_^1**********************************************************************_^1*_8* DM PROCESSOR_^1* THIS ROUTINE WILL LIST THE SYSTEM DIREC€€TORY ON_^1* THE STANDARD LIST UNIT. A SPACE WILL BE PRINTED_^1* BETWEEN ENTRIES. THE DIRECTORY LIST WILL BE_^1* CONCLUDED WITH THE WORD -FINI- ._^1**********************************************************************_^1_%SPC 2_^1_%EQU LSDREL(*-PROGIN)_^1_%SPC 2_^1LISTSD LDA ENDK+LSDREL_^1_%STA- I_^1_%LDA- BUFF1C,I_^1_%STA* HOLD6_^1_%ENQ_!20_^1_%LDA*_"UX1_^1LIST1A STA* (HOLD6)€€,Q_^1_%INQ_#-1_^1_%SQM WRTRD_^1_%JMP* LIST1A_^1WRTRD LDA- $EB_*GET BEGINNING ADDR OF DIR_^1_%STA CNT_^1_%ENQ_#3_^1_%STQ KT_^1_%STQ-_"QS,I_^1_%ENQ_#0_^1_%LDA-_"$E7_(CALC NO OF ENTRIES_^1_%DVI- H4_+FOR CORE RES. PROGR._^1_%SQZ_#PZ1-*-1_^1_%ENA_#3_^1_%ENQ 2_,NEXT(ERROR NO. 3)_^1_%JMP TRANF+LSDREL_^1PZ1_"SAN PLEEZ_^1_%JMP*_"PZ2_^1PLEEZ INA -1_+MINUS ONE_^1_%STA-_"TTEMP,I_^1_%R€€TJ*_"SOT_(PRINT CORE RES DIR_^1PZ2_"ENQ_#0_^1_%LDA-_"$E6_^1_%SUB-_"$E7_^1_%SAN PLEEZR_^1_%JMP*_"PZ3_^1PLEEZR DVI- H7_^1_%INA_#-1_^1_%STA-_"TTEMP,I_^1_%ENQ_#6_^1_%STQ-_"QS,I_^1_%STQ*_"KT_^1_%RTJ*_"SOT_(PRINT MASS STOR. SUST.DIR_^1PZ3_"ENQ 3_,TYPE FINI THEN EXIT_^1_%STQ- QSAVA4,I_^1_%ENQ OWRIT_^1_%ENA 4_^1_%RTJ READA4+LSDREL_^1_%ALF 1,_^1_%ALF 2,FINI_^1_%ENQ 0_^1_%JMP TRANF+€€LSDREL_^1HOLD6 ADC 0_^1*********************************************************************_^1SOT_"0_"0_^1_%ENQ_#0_*SET FOR NO. OF WDS/ENT._^1_%ENA 1_^1_%STA* ORDINL_'ORDINAL=1_^1LP70_!LDA- BUFF1C,I_^1_%INA 1_,START OF RPINT BUFFER_^1_%STA*_"KARL_^1_%STQ- WS+1,I_^1*_]_^1_%LDA* ORDINL_'PUT ORDINAL NO AS FIRST DIGIT OF DM PRINTOUT_^1_%ENQ 0_,CONVERT ORDINAL TO DECIAML (ASCII) €€NUMBER_^1_%DVI- D10_^1_%SAN SOT2_^1_%LDA =N$FFEF_%LEADING DIGIT SUPPRESSION_^1SOT2_!ALS 8_^1_%AAQ A_^1_%ADD =A00_)CONVERT TO ASCII_^1_%STA* (KARL)_^1*_]_^1_%RAO* KARL_^1_%RAO* KARL_$KARL=KARL+2_^1_%LDA* ORDINL_^1_%INA -100+1_^1_%SAM 1_^1_%ENA -100_^1_%INA 100_^1_%STA* ORDINL_'ORDINL = ORDINL+1 MODULO 100_^1_%LDQ- WS+1,I_^1LP69_!LDA* (CNT),Q_%GET WORD_^1_%STQ- WS+1,I_^1_%R€€TJ HXASC_(CONVERT TO ASCII_^1_%STQ* (KARL)_^1_%RAO*_"KARL_^1_%STA* (KARL)_^1_%RAO*_"KARL_^1_%RAO*_"KARL_^1_%LDA-_"QS,I_^1_%INA_#-1_^1_%STA-_"QS,I_^1_%SAM P5Y-*-1_^1_%LDQ-_"WS+1,I_^1_%INQ_#1_^1_%JMP*_"LP69_'GO DO NEXT WORD OF ENT._^1P5Y_"LDA- BUFF1C,I_^1_%STA*_"P1Y_^1_%LDA*_"KARL_^1_%SUB- BUFF1C,I_^1_%INA -1_^1_%STA*_"P2Y_^1_%LDA IOTAB+4+LSDREL_^1_%STA*_"P3Y_^1_%RTJ JKILL+LSDRE€€L TEST FOR JOB-KILL ROUTINE_^1_%RAO UNPIO_^1_%RTJ-_"($F4)_^1_%NUM $4C00,0,0_H**MSOS4.0*_^1P3Y_"NUM_#$18FC_^1P2Y_"NUM_#0_^1P1Y_"NUM_#0_^1P1YA_!LDA* P3Y-1_^1_%SAZ CNTEST_^1_%JMP* P1YA_^1CNTEST RTJ SWAPCK_^1_%ENQ 1_^1_%STQ- QSAVA4,I_^1_%ENQ OWRIT_^1_%ENA 4_^1_%RTJ READA4+LSDREL_^1UX1_"ALF_#1,_^1_%LDA* CNT_^1_%ADD*_"KT_^1_%INA_#1_^1_%STA* CNT_*ADDRESS OF NEXT ENTRY_^1_%LDA-_"T€€TEMP,I_^1_%SAN RACER_(OF DIRECTORY IS COMPLETE._^1_%JMP*_"(SOT)_%YES. RETURN_^1RACER INA -1_+NO. GO LIST NEXT ENTRY._^1_%STA-_"TTEMP,I_^1_%LDA*_"KT_)RESET NO. OF WORDS/ENT._^1_%STA-_"QS,I_^1_%ENQ_#0_^1_%JMP*_"LP70_^1KT_#NUM 0_^1CNT_"NUM 0_^1KARL_!NUM 0_^1ORDINL NUM 0_^1_(SPC_%2_^1* **************************************************_^1HXASC 0_"0_^1_%STA* STORE1_^1_(ENA_%-2_^€€1_%STA* COUNT1_^1BACK2 RTJ* GTHEX_(PICK-UP HEX_^1_(ALS_%8_^1_%LDQ* COUNT1_'STORE1++(C_^1_%STA* STORE1+3,Q_^1_%RTJ* GTHEX_^1_%LDQ* COUNT1_'STORE CHARACTER_^1_%ADD* STORE1+3,Q_"STORE+1+(C_^1_%STA* STORE1+3,Q_^1_%RAO* COUNT1_'INCREASE (C0_^1_%LDA* COUNT1_'FOR ZERO_^1_%SAZ COUNTB_'SKIP TO EXIT_^1_%JMP BACK2_(LOOP IF NOT_^1COUNTB LDQ* STORE1+1_$PUT 2 LEFT D_^1_%LDA* STORE1+2_$PUT 2 R€€IGHT_^1_%JMP* (HXASC)_%EXIT_^1STORE1 NUM 0,0,0,0_^1_%EQU COUNT1(STORE1+3)_^1GTHEX 0_"0_^1_%LDA* STORE1_'SHIFT 4 BITS_^1_(ALS_%4_^1_%STA* STORE1_^1_(ENQ_%$F_2E_^1_(LAQ_%Q_^1_%LDA* HEX1,Q_'PICK-UP ASCII_^1_%JMP* (GTHEX)_^1_(SPC_%2_^1HEX1_!NUM $30,$31,$32,$33,$34,$35,$36,$37_^1_%NUM_#$38,$39_^1_(NUM_%$41,$42,$43,$44,$45,$46_^1_%EJT_]_^1*********************************************€€*************************_^1*_]_^1*_]_^1_%EQU PGHREL(*-PROGIN)_^1*_8* P,F PROCESSOR_^1*_]_^1*_]_^1**********************************************************************_^1PGHABS LDA ENDK+PGHREL_^1_%STA- I_^1_%ENA 0_^1_%STA- DBASE,I_J**MSOS4.0*_^1_%STA-_"EMTK,I_$INITIALIZE BLOCK INDICAT._^1_%STA- REMOV,I_J**MSOS4.0_^1_%STA- REMFIL,I_I**MSOS4.8_^1_%STA- UPDATE,I_I**MSOS4.0_^1_%LDQ€€ IOTAB+3+PGHREL_"PICK-UP OUTPUT LU NUMBER_^1_%LDQ+ LOG1A,Q_^1_%LDA- 8,Q_'SWITCH WORD OF PHYSTB_^1_%ALS 5_)MASS STOGRAGE BIT_^1_%AND- 5_^1_%INA -2_+TWO IS MM CODE_^1_%SAN NMS-*-1_"SKIP IF NOT MASS STORAGE_^1_%RAO IMSS_M**MSOS4.0*_^1_%LDA- $C0_'SETUP SECTOR ONTO WHICH TO PUNCH_^1_%STA MSBC0_L**MSOS4.0*_^1_%LDA- $C1_^1_%INA 1_^1_%STA LSBC1_L**MSOS4.0*_^1*_8SELECTED BINARY OUTP€€UT UNIT_^1NMS_"LDA IOTAB+3+PGHREL_^1_%STA THR+1_L**MSOS4.0*_^1_%ENQ 0_^1_%ENA 2_^1_%RTJ READA4+PGHREL PPRK- PICK-UP F FIELD_^1_%SQZ NOMESS_^1_%LDA* FCELL_(TEST IF -F-_^1_%SUB-_"XXK,I_^1_%SAN NOFUSS_^1_%ENA_#96_)IT WAS F . SET FOR BLOCK_^1NOMESS STA- EMTK,I_^1NOFUSS ENQ 0_P**MSOS4.0_^1_%ENA 2_,PPRK PICK UP P/R FIELD_-**MSOS4.0*_^1_%RTJ READA4+PGHREL_D**MSOS4.0*_^1_%SQN 2€€_S67*1458_^1_%RTJ* F7BASE_'SET FWA-LWA LIMITS TO $F7-$F6_)67*1458_^1_%JMP* FSTPL_(LINK TO PROGRAM LIB. FIRST_)**MSOS4.0*_^1_%SAN CKPART_N73*1458_^1_%RTJ* F7BASE_'SET FWA-LWA LIMITS TO $F7-$F6_)73*1458_^1_%JMP* PCHECK_'CHECK FOR P AND R_2**MSOS4.0*_^1CKPART LDA- XXK,I_(CHECK NUMERIC VALUE_373*1458_^1_%TRA Q_P**MSOS4.0*_^1_%SUB LSTPRT_'IS THIS A LEGAL PARTITION_***MSOS4.0*_^1_%SAM€€ LEGAL_L**MSOS4.0*_^1_%SAZ LASTPT_'LAST PARTITION_5**MSOS4.0*_^1PTNOER ENA 6_,NO,ERROR_;**MSOS4.0*_^1_%ENQ 2_P**MSOS4.0*_^1_%JMP TRANF+PGHREL_E**MSOS4.0*_^1FCELL NUM $46FF_(ASCII F_<**MSOS4.0*_^1PCELL NUM $50FF_(ASCII P_<**MSOS4.0*_^1*_81 CARD DELETED_867*1458_^1LEGAL LDA PARTBL,Q_$NO,USE STARTING ADDR. OF THIS_%**MSOS4.0*_^1_%STA- PABA,I_'PARTITION FOR ABSOLUTIZING_)**M€€SOS4.0*_^1_%INQ 1_P**MSOS4.0*_^1_%LDA PARTBL,Q_$USE STARTING ADDR. OF_.**MSOS4.0*_^1_%STA- PAND,I_'NEXT PARTITION FOR LWA_,**MSOS4.0*_^1_%JMP* FSTCP1_'LOAD WITH 1ST LINK TO CREP1_(**MSOS4.0_^1LASTPT LDA PARTBL,Q_$USE STARTING ADDR. OF LAST_)**MSOS4.0*_^1_%STA- PABA,I_'PARTITION FOR ABSOLUTIZING_)**MSOS4.0*_^1_%LDA LSTLOC_'USE LAST AVAIL. PARTITION_***MSOS4.0*_^1_%STA- PAND,I_'€€ADDRESS PLUS 1 FOR LWA_,**MSOS4.0*_^1FSTCP1 LDA- H0800,I_%SET TO NOT LINK TO PRESET TABLE_#**MSOS4.0*_^1_%ADD- $20_*$COOO LINK TO SYSTEM COM/DAT_#**MSOS 4.1**_^1_%STA- DBASE,I_J**MSOS4.0*_^1_%RTJ* ABSADD_'DO RELOCATABLE LOAD_0**MSOS4.0*_^1_%ENA 3_,PATCH TO CREP1 TABLE_/**MSOS4.0*_^1_%RTJ* PLOAD_J**MSOS 4.1**_^1_%SQP DONER_(ALL LINKAGE COMPLETE_-**MSOS 4.1**_^1_%ENA 5_,PATCH TO€€ CREP0 TABLE_-**MSOS 4.1**_^1_%RTJ* PLOAD_J**MSOS 4.1**_^1_%SQP DONER_J**MSOS 4.1**_^1_%JMP* FSTPL+1_%TRY THE PROGRAM LIBRARY_***MSOS 4.1**_^1DONER JMP* NXTPRM_'FINISHED._!GET NEXT PARAMETER_"**MSOS 4.1**_^1PCHECK LDA- XXK,I_(IS PARAMETER A 'P'_467*1458_^1_%SUB* PCELL_O67*1458_^1_%SAM TOFSTP_'IF MINUS ITS NOT 'P' OR 'R'_%**MSOS 4.1**_^1_%SAN RCHECK_'CHECK FOR 'R'_967*1458_^1_%L€€DA- H0800_(SET TO NOT LINK TO PRESET TABLE_#**MSOS4.0*_^1_%ADD- $20_*$COOO LINK TO SYSTEM COM/DAT_)67*1458_^1_%STA- DBASE,I_J**MSOS4.0*_^1_%RTJ* ABSADD_'DO RELOCATALE LOAD_1**MSOS4.0*_^1_%ENA 5_P**MSOS4.0*_^1_%RTJ* PLOAD_(P PRESENT. LINK FIRST TO CREP0_!**MSOS 4.1**_^1_%SQP DONEP_(ALL LINKAGE COMPLETE_-**MSOS 4.1**_^1_%ENA 3_,PATCH TO CREP1 TABLE_-**MSOS 4.1**_^1_%RTJ* PLOAD_J€€**MSOS 4.1**_^1_%SQP DONEP_J**MSOS 4.1**_^1_%JMP* FSTPL+1_%TRY THE PROGRAM LIBRARY_***MSOS 4.1**_^1DONEP JMP* NXTPRM_'FINISHED._!GET NEXT PARAMETER_"**MSOS 4.1**_^1RCHECK SUB- $2C_*$0200 CHECK IF PARAMETER IS 'R'_%67*1458_^1TOFSTP SAN FSTPL_(SKIP IF NOT 'R'_2**MSOS 4.1**_^1_%JMP* FSTCP1_'GO LINK TO CREP1_667*1458_^1FSTPL RTJ* ABSADD_'DO RELO. LOAD_967*1458_^1_%ENA 10_+PATCH T€€O PROGRAM LIBRARY_+**MSOS4.0*_^1_%RTJ* PLOAD_L**MSOS4.0*_^1_%SQP ENDPLD_K**MSOS4.0_^1PTEXT ENA 7_,REMAINING UNPATCHED EXTERNALS_%**MSOS4.0_^1_%RTJ* PLOAD_(ALLOW FOR *E, *, OR *T_+**MSOS 4.1**_^1PTEXT1 SQP ENDPLD_K**MSOS4.0_^1_%JMP* PTEXT_L**MSOS4.0_^1ENDPLD JMP* NXTPRM_'FINISHED GO CHECK ENT PNT NAME_$**MSOS4.0*_^1ABSADD 0_"0_P**MSOS4.0*_^1_%LDQ- I_,GET Q ADDRESS POINTER FOR_**€€*MSOS4.0*_^1_%INQ PARAD_(THE LOADER_9**MSOS4.0*_^1_%LDA- DBASE,I_%SET NO TRANSFER ADDRESS_,**MSOS4.0*_^1_%EOR- H2000_(REQUIRED INDICATOR TO LOADER_'**MSOS4.0*_^1_%STA- DBASE,I_J**MSOS4.0*_^1_%ENA 1_,ISSUE SETBASES FUNCTION_,**MSOS4.0*_^1_%RTJ* PLOAD_L**MSOS4.0*_^1_%ENQ 0_P**MSOS4.0*_^1_%ENA 9_,GIVE RELOCATABLE LOAD FUNCTION_$**MSOS4.0*_^1_%RTJ READA3+PGHREL TO THE LOADER_6**MS€€OS4.0*_^1_%ENA 2_,GIVE PROGRAM ENTRY POINT_+**MSOS4.0*_^1_%RTJ* PLOAD_(LINK TO LOADER_5**MSOS4.0*_^1_%SQM 1_P**MSOS4.0*_^1_%JMP* NXTPRM_'NO UNPATCHED EXTS CHECK S.A._'**MSOS4.0*_^1_%JMP* (ABSADD)_I**MSOS4.0*_^1PLOAD 0_"0_,SUBROUTINE TO PERFORM_.**MSOS4.0*_^1_%STA- ASAVA3,I_$LOADER FUNCTIONS_3**MSOS4.0*_^1_%STQ- QSAVA3,I_I**MSOS4.0*_^1_%ENA 9_P**MSOS4.0*_^1_%ENQ AINLOD_K**MSOS4€€.0*_^1_%RTJ READA3+PGHREL_D**MSOS4.0*_^1_%JMP* (PLOAD)_J**MSOS4.0_^1F7BASE 0_"0_P**MSOS4.0*_^1_%LDA- BUFF1B,I_I**MSOS4.0*_^1_%STA- PABA,I_'ADDRESSES_:**MSOS4.0*_^1_%LDA- $F6_N**MSOS4.0*_^1_%STA- PAND,I_K**MSOS4.0*_^1_%JMP* (F7BASE)_I**MSOS4.0*_^1_%EJT_]_^1NXTPRM LDQ- ADDCT1,I_$GET CURRENT STATEMENT BUF ADDR._#**MSOS4.0*_^1_%QLS 15_^1_%SQM LOAD6_^1_%LDA- (ZERO),Q_^1_%ALS 8_^1_%J€€MP* LOAD7_(RIGHT CHARACTER_4**MSOS 4.0_^1LOAD6 LDA- H8000_(SAVE RIGHT CHAR. INDICATOR_)**MSOS4.0*_^1_%STA* CHARID_K**MSOS4.0*_^1_%LDA- H7FFF_L**MSOS4.0*_^1_%LAQ Q_^1_%LDA- (ZERO),Q_^1LOAD7 AND- HFF_*SAVE LOWER 8 BITS_2**MSOS 4.0_^1_%INA -$20_"IF FIELD BLANK, THEN SKIP_^1_%SAN 1_^1_%JMP* NOENT_^1_%SUB =N$DF_!IF FIELD BACKGROUND CHARACTER,THEN SKIP_^1_%SAZ NOENT-*-1_^1_%ENA 9€€_P**MSOS4.0*_^1_%EOR* CHARID_K**MSOS4.0_^1_%RTJ* PLOAD_(LOOK UP ENTRY POINT_0**MSOS4.0_^1*_5LOCATE AND SUPPLY ADDRESS OF_^1*_5SPECIFIED ENTRY POINT._^1_%SAP LOAD8_L**MSOS4.0_^1_%INA 0_3-_;**MSOS4.0_^1_%SAP NOENT_L**MSOS4.0_^1LOAD8 JMP* ADRSET_K**MSOS4.0*_^1CHARID NUM 0_P**MSOS4.0*_^1IMSS_!ADC 0_^1NOENT LDA- TEMPF7,I_$LOWEST UNPROTECTED -1_/**MSOS4.0_^1_%INA 1_^1_%STA- WS+1,€€I_^1_%LDA- NOWLB,I_%GET LENGTH OF LOAD_1**MSOS4.0*_^1_%STA- WDCNT,I_^1ADRSIN ENQ 0_,MASLOC WILL LEAVE FILE IN_^1_%ENA 1_,UNPROTECTED CORE_^1_%RTJ READA3+PGHREL_^1XK1_"LDA- WDCNT,I_^1_%STA*_"CBUF_^1_%LDA* IMSS_)MASS MEMORY INDICATOR_^1_%SAN IMSSA_(NOT ZERO - PUNCH ON MASS MEMORY_^1_%JMP* XK2_*ZERO - TO OUTPUT DEVICE_^1IMSSA ENA 4_^1_%STA- WS,I_^1_%RTJ* XK11_^1XK11_!NUM 0_^€€1_%LDA* XK11_^1_%ADD =XCBUF-XK11_^1_%LDQ_!=N$C0_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_^1_%ENA 1_^1_%RTJ READA4+PGHREL_^1XK2_"LDA- EMTK,I_^1_%SAN EMTK1A_^1_%JMP*_"ONEPC_%NOT BLOCKED. ONE FORM REC_^1EMTK1A ENQ 0_,BLOCKED. CALC NO OF BLOK_^1_%LDA-_"WDCNT,I_^1_%DVI-_"NSIX,I_^1_%STQ-_"NOWLB,I_#NO OF WORDS IN LAST BLOCK_^1_%STA-_"XXK+6,I_#NO OF BLOCKS_^1_%SAN LLL1_^1€€_%JMP* LPLXQ_^1LLL1_!ENA_#96_^1_%STA-_"WS,I_^1LLLA_!LDA-_"WS,I_^1_%STA*_"NW_)SET NO OF WORDS_^1LLL_"LDA-_"WS+1,I_$START ADDRESS_^1_%STA*_"STAK_^1_%RTJ JKILL+PGHREL_^1_%RAO* (UNPIOX)_$SET UNPIO SWITCH_^1_%RTJ-_"($F4)_%PUNCH PROGRAMS_^1_%NUM $4C00,0_J**MSOS4.0*_^1THR_"NUM_#0,$8FA_^1NW_#NUM_#0_^1STAK_!NUM_#0_^1MSBC0 NOP 0_^1LSBC1 NOP 0_^1NMSS_!LDA* THR_'TEST IF WRITE COMPLETE_^1€€_%SAZ THRU_^1_%JMP* NMSS_)NOT COMPLETE,_^1THRU_!RTJ* (SWAPX)_%CLEAR UNPIO SWITCH_^1_%LDA* IMSS_)NON-ZERO IF MASS STG DEVICE_^1_%SAZ LPL1_^1_%RAO* LSBC1_$UPDATE LSB OF MASS STG SECTOR_^1LPL1_!LDQ-_"XXK+6,I_^1_%INQ_#-1_)DONE. TES IF ALL BLOCKS_^1_%STQ- XXK+6,I_^1_%SQZ LPLX_^1LPL_"LDA-_"WS+1,I_^1_%INA_#96_)INCR. START ADDRESS_^1_%STA-_"WS+1,I_^1_%JMP* LLLA_)DO NEXT BLOCK_^1LPLX_!LD€€A- NOWLB,I_"NBR OF WDS IN LAST BLOCK_^1_%SAZ LPLX1A_^1_%STA-_"WS,I_^1_%RAO-_"XXK+6,I_#SET TO PUNCH LAST BLOCK_^1_%ENA_#0_^1_%STA-_"NOWLB,I_^1_%JMP*_"LPL_(GO WRITE LAST BLOCK_^1LPLX1A ENA 0_^1_%JMP TRANF+PGHREL_^1_%SPC_!2_^1ADRSET SUB- BUFF1B,I_$CALCULATE DIFFERENCE BETWEEN_'**MSOS4.0*_^1_%TCA Q_,($F7+1) AND STARTING ENTRY POINT_"**MSOS4.0*_^1_%ADD- TEMPF7,I_$ADD THIS VALUE TO $€€F7 USED BY LIBEDT**MSOS4.0*_^1_%INA 1_P**MSOS4.0_^1_%STA- WS+1,I_'AND SAVE AS ADDRESS TO START WRITE **MSOS4.0*_^1_%TRQ A_,DECREMENT THE NUMBER OF WORDS TO_"**MSOS4.0*_^1_%ADD- NOWLB,I_J**MSOS4.0_^1_%STA- WDCNT,I_^1_%SAP 1_^1_%JMP* NOENT_(ILLEGAL LENGTH, USE GETCOR AND CONTINUE_^1_%JMP* ADRSIN_'GET FILE PUT INTO CORE AND CONTINUE_^1*_]_^1ONEPC LDA- WDCNT,I_^1_%STA*_"NW_)RECO€€RD FOR ALL PROGR._^1_%ENA 0_,CLEAR OVERFLOW BLOCK FLAG_)4.0*79*1937_^1_%STA- NOWLB,I_I4.0*79*1937_^1_%ENQ_#1_^1_%STQ-_"XXK+6,I_^1_%JMP*_"LLL_(GO PUNCH ONE BLOCK_^1_%SPC_!2_^1*_]_^1LPLXQ LDA- WS+1,I_)SET BACK ADDR OF O/P BUFFER_^1_%INA -96_)TEMPORARILY_^1_%STA- WS+1,I_^1_%JMP* LPLX_^1CBUF_!NUM_#0_^1_%ALF_#3,LIBE_^1UNPIOX ADC UNPIO_(POINTER TO UNPIO SWITCH_^1SWAPX ADC SWAPCK_'€€POINTER TO SWAPCK ROUTINE_^1_%EJT_]_^1*********************************************************************_^1*_]_^1*_**M,ORD,S,D,M,N_'PROCESSOR_^1*_]_^1**********************************************************************_^1_%SPC 2_^1_%EQU SLNREL(*-PROGIN)_^1_%SPC 2_^1SLINSN LDA ENDK+SLNREL_^1_%STA- I_^1_%ENA 0_^1_%STA- W1,I_^1_%STA- SAT,I_L**MSOS4.0*_^1_%STA- WORD,I_K**MSOS€€4.0*_^1_%STA- REMOV,I_J**MSOS4.0_^1_%STA- REMFIL,I_I**MSOS4.0_^1_%STA- UPDATE,I_I**MSOS4.8_^1_%ENA -1_^1_%STA- INTMP+1,I_^1_%STA- RA,I_M**MSOS4.0*_^1_%RTJ* PPRKAD_%PPRK-GET ORDINAL FROM CALL_^1_%SQZ EXTK_)ERROR IF OMITTET_^1_%INA_#-1_)NOT OMITTED. TEST FOR_^1_%SAZ EXTK1A_^1EXTK_!ENA_#6_^1EXTK1 ENQ 2_,NEXT-OUTPUT ERROR MESSAGE_^1_%JMP TRANF+SLNREL_^1EXTK1A JMP* MSE_^1ORNO_!AD€€C 0_^1_%SPC_!2_^1CORRES LDA* ORNO_%ORDINAL NUMBER_^1_%INA_#-1_^1_%ENQ_#0_^1_%MUI- H4_^1_%STA-_"ORD,I_%SAVE ORD(NO.OF WRODS)_^1_%SUB- $E7_'INDEX TO FIRST MASS STG ENTRY_^1_%SAM EXTK1B_'MINUS IMPLIES IN CORE PART OF DIRECTORY_^1EXTKX ENA 3_,ERROR NO. 3_^1_%ENQ 2_^1_%JMP TRANF+SLNREL_^1EXTK1B LDQ- ORD,I_(GET ORDINAL NUMBER_-*4.0/78*1853_^1_%ADQ- $EB_J*4.0/78*1853_^1_%LDA- 1,Q_*G€€ET START ADDRESS OF CORE ORDINA*4.0/78*1853_^1_%RTJ* LDPROG_G*4.0/78*1853_^1_%RTJ* PPRKAD_'CHECK FOR N PARAMETER_.**MSOS4.0*_^1_%SQN EXTK1D_I**MSOS 4.1**_^1_%ENA 10_+NOT PRESENT_6**MSOS 4.1**_^1_%RTJ* STLOAD_K**MSOS4.0*_^1PTEXT2 SQP EXTK1C_K**MSOS4.0*_^1_%ENA 7_,REMAINING UNPATCHED EXTERNALS_%**MSOS4.0*_^1_%RTJ* STLOAD_'PRINT FOR * OR *T RESPONSE_'**MSOS 4.1**_^1_%JMP* PTEXT2_'€€CHECK FOR UNPATCHED EXTERNALS_%**MSOS4.0*_^1EXTK1D LDA* UNPIND_'WERE THERE UNPATCHED EXTERNALS_"**MSOS 4.1**_^1_%SAP EXTK1C_'NO_?**MSOS 4.1**_^1_%JMP* PTEXT2+1_$YES_>**MSOS 4.1**_^1EXTK1C LDA- SSEC,I_'CHECK IF LOADER PAGED TO SCRATCH_"**MSOS4.0*_^1_%SAZ NOWBLA_^1_%JMP*_"MSIN_'DID NOT FIT.IS ON MS._^1NOWBLA RTJ* LGTHCK_'GET THE LENGTH OF THE LOAD_^1_%STA- ASAVA3,I_^1_%ENQ MOVIT1_€€'CORE TRANFER_^1_%ENA 1_^1_%RTJ READA3+SLNREL_^1PUX1_!STQ- QSAVA4,I_^1_%ENQ 0_,UPDATE C0,C1 ON MASSS STG._^1_%ENA 7_^1_%RTJ READA3+SLNREL_^1_%ENQ 0_^1_%STQ- FILIN,I_%CLEAR FILE FLAG USED BY SEARCH_$**MSOS4.0*_^1_%JMP TRANF+SLNREL_^1PPRKAD 0_"0_,SETUP ROUTINE FOR PROCESSING_^1_%ENQ 0_,THE *M PARAMETERS_^1_%ENA 2_^1_%RTJ READA4+SLNREL_^1_%JMP* (PPRKAD)_^1LGTHCK 0_"0_^1_%LDA€€- NOWLB,I_%GET LENGTH OF LOAD_1**MSOS4.0*_^1_%STA NTEM_^1_%SAN LGTHOK_'LENGTH GREATER THAN 0_^1_%ENA 18_+NO,ATTEMPT TO LOAD ZERO_^1_%JMP* EXTK1_(LENGTH PROGRAM_^1LGTHOK JMP* (LGTHCK)_^1REPLC ADC 0_^1MSIN_!LDA- TEMPF7,I_$RESET CORE TO CLOBBER THE LOADER_#**MSOS4.0_^1_%STA- $ED_^1_%LDA- $F6_N**MSOS4.0*_^1_%STA- $EC_^1_%LDA-_"NOWLB,I_^1_%STA NTEM_)STORE NUMBER OF WORDS_^1_%STA- €€ASAVA3,I_^1_%ENQ RDIN1_(READ THEM INTO CORE_^1_%ENA 1_^1_%RTJ READA3+SLNREL_^1_%JMP* PUX1_^1_%SPC_!2_^1MSE_"LDA-_"XXK,I_%MASS STORAGE ENTRY_^1_%STA* ORNO_%ORDINAL NUMBER_^1_%ENQ_#0_*CALCULATE NO OF WORDS TO_^1_%INA_#-1_)INDEX THIS ENTRY_^1_%MUI- H7_^1_%ADD-_"$E7_^1_%STA-_"ORD,I_^1_%RTJ* PPRKAD_'PPRK-GET S PARAMETER FROM CALL_^1_%SQN SEND_^1_%STQ SENO_)S, OMIT. SET SENO TO INDI€€C._^1_%JMP* BSX_^1SEND_!INA -1_+TEST FOR NUMERIC_9**_^1_%SAZ SENDR_^1_%JMP*_"EXTK_'ILLEGAL PAR.(NOT NUM.)_^1SENDR LDA- XXK,I_(S IS NUMERIC_^1_%STA SENO_)PAR. S. SECT NUMBER_^1BSX_"RTJ* PPRKAD_(PPRK-GET D INDICATOR FROM CALL_^1_%SQN 1_P**MSOS4.0_^1_%JMP* BSXX_M**MSOS4.0*_^1_%LDA- XXK,I_(CHECK IF PARAMETER IS D_/61*1290_^1_%SUB* DIND_P61*1290_^1_%SAZ BSXD_P61*1290_^1_%JMP* EXTK€€_)NOT D ISSUE AN ERROR_261*1290_^1BSXD_!ENQ 17_+CHECK IF DATA IS PRESENT_.61*1290_^1_%LDA- ($E9),Q_J**MSOS4.0*_^1_%SAN BSX1_M**MSOS4.0*_^1_%ENA 14_+ERROR NO SYSTEM DATA_/**MSOS4.0*_^1_%JMP* EXTK1_L**MSOS4.0*_^1BSX1_!ENQ 2_P**MSOS4.0*_^1_%QLS 14_O**MSOS4.0*_^1BSXX_!TRQ A_P**MSOS4.0_^1_%EOR =N$6800_%COMMON LINKAGE REQUIRED_^1_%STA- DBASE,I_%REQUIRED INDICATOR_1**MSOS4.0_^1_%RT€€J* PPRKAD_'PPRK-GET M INDICATOR FROM CALL_$**MSOS4.0*_^1_%SQN SENDA_^1_%LDA SENO_^1_%SAZ SENDB_^1_%JMP*_"EXTK_'A VALUE FOR S,NO M (ILLE)_^1SENDB JMP* CORRES_'PROG IS CORE RESIDENT_^1MIND_!NUM $4DFF_('F' CHARACTER WITH BACKGROUND_^1DIND_!NUM $44FF_('D' CHARACTER WITH BACKGROUND_)61*1290_^1_%SPC_!2_^1SENDA LDA- XXK,I_^1_%SUB*_"MIND_'MIND IS_!-MFF-_^1_%SAZ MINDB_^1_%JMP* CORRE€€S_#PROGRAM MUST BE CORE RESIDENT_^1STLOAD 0_"0_,SETUP ROUTINE FOR LOADER CALL_^1_%STQ- QSAVA3,I_^1_%STA- ASAVA3,I_^1_%ENQ AINLOD_K**MSOS4.0*_^1_%ENA 9_P**MSOS4.0*_^1_%RTJ READA3+SLNREL_^1_%JMP* (STLOAD)_^1MINDB LDA- ORD,I_^1_%SUB- $E6_^1_%SAM MINI_^1_%JMP* EXTKX_^1MINI_!ENA 0_,SET START OF ORDINAL LOAD_%*4.0/78*1853_^1_%RTJ* LDPROG_'TOPSEUDO BASE OF ZERO_**4.0/78*1853_^1_%JMP€€* GOLOAD_^1UNPIND NUM 0_N**MSOS 4.1**_^1LDPROG 0_"0_^1*_81 CARD DELETED_1*4.0/78*1853_^1_%STA PABA,I_'FWA OF LOADING BASE_0**MSOS4.0*_^1_%ENQ 15_O**MSOS4.0*_^1_%LDA- ($E9),Q_%LWA OF LOADING BASE_0**MSOS4.0*_^1_%STA- PAND,I_K**MSOS4.0*_^1_%ENA 1_,GIVE SET BASES FUNCTION TO LOADER_!**MSOS4.0*_^1_%LDQ- I_P**MSOS4.0*_^1_%INQ PARAD_(Q CONTAIN POINTER TO BASES_)**MSOS4.0*_^1_%RTJ* S€€TLOAD_K**MSOS4.0*_^1_%ENQ 0_,PERFORM RELOCATABLE LOAD_+**MSOS4.0*_^1_%ENA 9_P**MSOS4.0*_^1_%RTJ READA3+SLNREL_D**MSOS4.0*_^1_%ENA 2_,LINK ENTRY POINTS_2**MSOS4.0*_^1_%RTJ* STLOAD_K**MSOS4.0*_^1_%SQP LOADOK_K**MSOS4.0*_^1_%ENA 5_,UNPATCHED EXTERNALS LINK_+**MSOS4.0*_^1_%RTJ* STLOAD_'TO CREP TABLE_6**MSOS4.0*_^1_%SQP LOADOK_K**MSOS4.0*_^1_%ENA 3_,UNPATCHED EXTERNALS LINK_)**M€€SOS 4.1**_^1_%RTJ* STLOAD_'TO CREP1 TABLE_3**MSOS 4.1**_^1LOADOK STQ* UNPIND_'SAVE THE UNPATCHED INDICATOR_$**MSOS 4.1**_^1_%JMP* (LDPROG)_G**MSOS 4.1**_^1GOLOAD RTJ* PPRKAD_'PPRK-GET N INDICATOR FROM CALL_^1_%SQN NOPG1_(IF FIELD NOT BLANK DONT LINK TO_!**MSOS 4.1**_^1_%ENA 10_+PROGRAM LIBRARY,IF BLANK LINK ALSO TO*MSOS4.0*_^1_%RTJ* STLOAD_'PROGRAM LIBRARY_4**MSOS4.0_^1PTEXT3 SQP€€ NOPROG_K**MSOS4.0*_^1_%ENA 7_,PRINT UNPATCHED EXTERNALS_+*MSOS4.0*_^1_%RTJ* STLOAD_L*MSOS4.0*_^1_%JMP* PTEXT3_K**MSOS4.0_^1NOPG1 LDA* UNPIND_'WERE THERE UNPATCHED EXTERNALS_"**MSOS 4.1**_^1_%SAP NOPROG_'NO_?**MSOS 4.1**_^1_%JMP* PTEXT3+1_$YES_>**MSOS 4.1**_^1NOPROG LDA- NOWLB,I_%GET LENGTH OF LOAD_2*MSOS4.0*_^1_%STA* NTEM_^1_%CLR Q_Q71*1625_^1_%DVI- NSIX,I_'CALCULATE NUMBER O€€F SECTORS_)71*1625_^1_%SQZ EV_P71*1625_^1_%INA 1_Q71*1625_^1EV_#STA- FILIN,I_K71*1625_^1_%LDQ-_"ORD,I_^1_%ADQ-_"$EB_^1_%STQ_!SORD_^1LUKZ_!IIN 0_^1_%LDA- 2,Q_*CHECK THREAD OF PROGRAM_^1_%SAZ LUCKY_(NOT BUSY, CONTINUE_^1_%EIN 0_^1_%NOP 0_,BUSY - ALLOW INTERRUPT, TRY AGAIN_^1_%JMP* LUKZ_^1LUCKY SET A_^1_%STA- 2,Q_*SET THREAD BUSY WHILE WORKING ON ENTRY_^1_%EIN 0_^1_%LDA- 4,Q€€_^1_%STA_!OLDLN_#OLD LENGTH IN WORDS_^1_%LDA- 6,Q_$OLD PROG. SECTOR NO._^1_%STA_!OLDSEC+1_^1_%LDA* SENO_)CHECK FOR SECTOR NUMBER GIVEN_^1_%SAZ NOSENO_'NOT GIVEN - FIND IT_^1_%STA- 6,Q_*YES - USE IT_^1_%JMP* SECOK_^1NOSENO LDA-_"4,Q_(GET LENGTH OF OLD PROGR._^1*_8ROUND UP TO A FULL SECTOR SO THAT PROGRAM_^1*_8IS NOT MOVED TO NEW AREA UNNECESSARILY_^1_%SAZ GETSCR_'IF NO PROGRAM WA€€S PREVIOUSLU LOADED,GET_!*728_^1*_8SECTORS FROM SCRATCH AREA_^1_%ENQ 0_^1_%DVI- NSIX,I_*L/96 TO A, REMAINDER IN Q_^1_%SQZ 1_/MORE THAN AN EVEN 96 WORDS_^1_%INA 1_/ROUND IT UP BY ONE SECTOR_^1_%MUI- NSIX,I_*CONVERT BACK TO WORDS_^1_%LDQ_!SORD_(LOCATION OF DIRECTORY ENTRY_^1_%SUB*_"NTEM_^1_%SAM 1_P**MSOS4.0*_^1_%JMP* SECOK_(OK WHERE IT IS-JUST PUT IN LENGTH_!**MSOS4.0*_^1GETSCR €€LDA- SECS+1,I_$SET ADDRESS TO FIRST_/**MSOS4.0*_^1_%STA- SECX+1,I_$SAT SECTOR_9**MSOS4.0*_^1_%ENQ RSAT1_L**MSOS4.0*_^1_%ENA 1_,READ A SECTOR OF SAT INTO_***MSOS4.0*_^1_%RTJ READA4+SLNREL BUFF1S_=**MSOS4.0*_^1_%LDA- FILIN,I_K71*1625_^1_%TCA A_,COMPLEMENT LENGTH TO BE USED_'**MSOS4.0*_^1_%STA- UPDL,I_'BY SEARCH ROUTINE_2**MSOS4.0*_^1_%ENQ 0_P**MSOS4.0*_^1_%ENA 5_P**MSOS4.0*_^1_€€%RTJ READA3+SLNREL PERFORM SEARCH_5**MSOS4.0*_^1_%LDQ* SORD_)STORE SECTOR NUMBER IN_-**MSOS4.0*_^1_%STA- 6,Q_*SYSTEM DIRECTORY ENTRY_-**MSOS4.0*_^1_%ADD- FILIN,I_%INCREASE BY LENGTH OF FILE_)**MSOS4.0_^1_%SUB- $C1_+START OF SCRATCH EXCEEDED_)**MSOS4.0*_^1_%SAM SECOK_L**MSOS4.0*_^1_%SAZ SECOK_L**MSOS4.0*_^1_%ADD- $C1_*YES,UPDATE $C1 TO ALLOW FOR_(**MSOS4.0*_^1_%STA- $C1_*NEW ENTR€€Y_:**MSOS4.0*_^1SECOK LDA* NTEM_^1_%STA- 4,Q_*PUT LENGTH INTO DIRECTORY_^1* WRITE STARTS HERE_^1_%STA- WS,I_)SET-UP LENGTH FOR WRITE_^1_%LDA- SSEC,I_'LOAD ON MASS STORAGE_0*MSOS4.0*_^1_%SAZ SECOK1_L*MSOS4.0*_^1_%JMP* MMTOMM_L*MSOS4.0*_^1SECOK1 LDA- TEMPF7,I_$BUFFER ADDRESS FOR MOVE_-**MSOS4.0_^1_%INA 1_P**MSOS4.0_^1_%INQ 5_,Q POINTS TO LOCATION OF MASS ADDRESS IN DIR_^1_%STQ- Q€€SAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_(WRITE IT_^1_%ENA 1_^1_%RTJ READA4+SLNREL_^1_%JMP PUX_*GET SAT UPDATED_^1NTEM_!NUM 0,0_^1SENO_!NUM 0_,SAVE SECTOR NUMBER HERE_^1*_]_^1MMTOMM STA- QSAVA3,I_$SUBROUTINE TO MOVE SECTORS_**MSOS4.0*_^1_%LDA- FILIN,I_%GET NO. OF SECTORS_1**MSOS4.0*_^1_%STA- WS,I_)AND STORE FOR MOVE OPERATION_'**MSOS4.0*_^1_%LDA- 6,Q_*LOADED ON MASS MEMORY_/*M€€SOS4.0*_^1_%STA- ASAVA3,I_J*MSOS4.0*_^1_%ENA 9_Q*MSOS4.0*_^1_%ENQ MOVMM_M*MSOS4.0*_^1_%RTJ READA3+SLNREL_E*MSOS4.0*_^1_%SPC_!2_^1************************************************************************_^1PUX_"LDQ* SORD_)NOW WE ARE THROUGH - CLEAR DIR THREAD_^1_%LDA- (ZERO),Q_I**MSOS4.0*_^1_%CLR Q_,CLEAR D BIT IF ORDINAL_-**MSOS4.0*_^1_%LLS 2_,PREVIOUSLY USED FOR_0**MSOS4.0*_^1€€_%QRS 1_,PARTITION CORE PROGRAM_-**MSOS4.0*_^1_%QLS 1_P**MSOS4.0*_^1_%LRS 2_P**MSOS4.0*_^1_%LDQ* SORD_M**MSOS4.0*_^1_%STA- (ZERO),Q_I**MSOS4.0*_^1_%CLR A_,CLEAR STARTING ADDRESS WORD SINCE_!**MSOS4.0_^1_%STA- 1,Q_*ORDINAL MAY HAVE BEED A PARTITION_!**MSOS4.0_^1_%LDA* NTEM_M**MSOS4.0*_^1_%LDQ* SORD_M**MSOS4.0*_^1_%STA- ASAVA3,I_I**MSOS4.0*_^1_%STQ- QSAVA3,I_I**MSOS4.0*_^1_%ENQ €€0_,UPDATE CORE IMAGE_2**MSOS4.0*_^1_%ENA 10_+ON MM_>**MSOS4.0*_^1_%RTJ READA3+SLNREL_D**MSOS4.0*_^1_%LDQ* SORD_M**MSOS4.0*_^1_%CLR A_^1_%STA- 2,Q_^1_%ENQ_!0_^1_%LDA* OLDLN_^1_%DVI- NSIX,I_^1_%SQZ OLDLNA_^1_%INA_!1_^1OLDLNA TCA A_,C(LENGTH)_^1_%STA- UPDL,I_^1_%LDA* OLDSEC+1_^1_%STA- UPDSAT+1,I_^1_%ENA_!1_^1_%STA- ASAVA3,I_^1_%ENQ UDSET_^1_%ENA 2_^1_%RTJ READA3+SLNREL_^1_%€€LDQ* SORD_^1_%LDA- 6,Q_%NEW SECT NO._^1_%STA- UPDSAT+1,I_^1_%LDA- 4,Q_%LENGTH_^1_%ENQ_!0_^1_%DVI- NSIX,I_^1_%SQZ UPDL1A_^1_%INA_!1_^1UPDL1A TCA A_^1_%STA- UPDL,I_^1_%ENA_!0_^1_%STA- ASAVA3,I_^1_%ENQ UDSET_^1_%ENA 2_^1_%RTJ READA3+SLNREL_^1_%JMP_!PUX1_^1SORD_!NUM_!0_^1OLDLN NUM_!0_^1OLDSEC NUM_!0,0_^1_%EJT_]_^1_%SPC 2_^1_%SPC 2_^1_%EQU REPREL(*-PROGIN)_^1_%SPC 2_^1****€€******************************************************************_^1*_]_^1*_**L,ENTRY-POINT NAME_^1*_]_^1*_**R,N,F_^1* THIS ROUTINE REPLACES PROGRAMS IN THE PROGRAM_^1* LIBRARY OR ADDS THEM TO THE LIBRARY. DUPLICATE_^1* ENTRY POINTS ARE ILLEGAL._^1*_]_^1* PROGRAMS OR FILES MAY ALSO BE REMOVED_^1*_]_^1**********************************************************************_^1_%SPC 2€€_^1PLINSN NOP 0_^1_%LDA ENDK+REPREL_^1_%STA- I_^1_%RTJ* BRR_^1BRR_"NUM 0_^1_%LDA =XXYT1A-BRR_^1_%ADD* BRR_^1_%STA JKILAD+REPREL_^1_%LDA PROG1+REPREL OVERLAY OF PLINSN IN PROGRESS_^1_%SAP 1_^1_%JMP* REPL_)YES_^1_%ENA 0_^1_%STA- SECX,I_^1_%ENQ 0_^1_%ENA 2_,PPRK_^1_%RTJ READA4+REPREL_^1_%SQN OKX-*-1_^1_%ENA 6_,ENTRY POINT NAME MISSING_^1ER_#ENQ 2_,NEXT1 OUTPUT ERROR MES€€SAGE_^1_%JMP TRANF+REPREL_^1OKX_"ENA 0_^1_%STA- QS,I_^1_%STA- DUP,I_^1_%STA- WORD,I_^1_%STA- SAT,I_^1_%STA- REMFIL,I_^1_%STA- REMOV,I_^1_%STA- MSINP,I_^1_%STA- FILIN,I_J**MSOS4.0*_^1_%STA- NSEC,I_'NUMBER OF_^1_%INA -1_^1_%STA- RA,I_^1_%STA- INTMP+1,I_^1_%LDA- BUFF1A,I_$A(BUFF1A)_^1_%STA INBFAD+REPREL_^1_%LDQ =XZOUT_^1_%ENA 2_^1_%RTJ READA4+REPREL_^1_%LDA INBFAD+REPREL_^1_%S€€TA BUF1A+REPREL_^1_%LDA PROG1+REPREL_^1_%SUB =N12_^1_%SAN ZR2_^1_%RAO- REMOV,I_^1_%ENQ 0_^1_%ENA 2_,PPRK CHECK FOR FILE FLAG_^1_%RTJ READA4+REPREL_^1_%SQZ ZR2_^1_%RAO- REMFIL,I_$SET FILE REMOVE FLAG_^1ZR2_"ENQ 0_^1_%ENA 4_,SAC CHECK IF ENTRY IN DIRECT._^1_%RTJ READA3+REPREL_^1_%STA- UPDATE,I_^1_%STQ- POINT,I_^1_%STQ BF1BA+REPREL POINTER TO DUP. ENTRY PTS._^1NBEK0 LDA-€€ SECS+1,I_^1_%STA- SECX+1,I_^1_%ENQ RSAT1_^1_%ENA 1_,RSAT_^1_%RTJ READA4+REPREL_^1_%ENA 0_^1_%STA- WSK,I_^1_%LDA- $C4_*START OF PROG. DIRECTORY_^1_%STA- ZSEC+1,I_^1_%LDA- UPDATE,I_^1_%SAN NBEK2_(CHECK IF MATCH FOUND_^1_%JMP* REPL_)REPLACE ACTIVE_^1NBEK2 LDA- REMOV,I_^1_%SAZ OVNBEK_'ADD NEW PROGRAM_^1_%ENA_!10_^1_%JMP* ER_^1*_8NO MATCH, NEW PROGRAM_^1*_]_^1OVNBEK LDA* NBEKAD_€€^1_%RTJ MMADDR+REPREL_#BRING IN NBEK0 OVERLAY/_^1_%STQ MSBPRC+REPREL_^1_%STA LSBPRC+REPREL_^1_%JMP BRIPR1+REPREL_^1_%SPC 2_^1NBEKAD ADC NBEK-LBDT_^1_(SPC_%2_^1*_]_^1*_*REPLACE OLD PROGRAM WITH NEW PROGRAM_^1*_]_^1REPL_!0_"0_^1_%ENQ ZAES1_^1_%ENA 2_^1_%RTJ READA3+REPREL_^1*_]_^1*_2PREPARE TO READ_^1_%ENA 0_^1_%STA- IOSEC,I_^1_%STA- SIC,I_^1_%STA- ENTSEC,I_^1_%LDQ- POINT,I€€_^1_%LDA- 4,Q_*SECT NO. OF START OF PROG._^1_%STA- IOSEC+1,I_^1_%STA- SIC+1,I_^1_%STA- ENTSEC+1,I_^1_%STA- ENTSEC+2,I_^1_%LDA- REMFIL,I_$REMOVE PERMANENT FILE_^1_%SAZ REPL14_^1_%JMP* REPL20_)YES_^1REPL14 LDA- H8000_^1_%STA- INPPAR,I_^1REPL15 LDQ- IOSEC,I_%PREPARE TO RELEASE SECT. FROM SAT_^1_%LDA- IOSEC+1,I_^1_%STA- ASAVA3,I_^1_%ENQ 0_^1_%ENA 2_,INSERT-RELEASE UNUSED SECTORS_^€€1_%RTJ READA3+REPREL_^1_%STQ- QSAVA3,I_^1_%STA- ASAVA3,I_^1_%ENQ IOBLE1_^1_%ENA 2_^1_%RTJ READA3+REPREL_^1_%SAZ REPL1A_^1_%JMP* REPL15_^1REPL1A LDA- DUP,I_^1_%SAP REPL2A_^1_%JMP* XYT1A_(DUPLICATE ENTRY-_^1REPL2A LDA- REMOV,I_^1_%SAZ RMV1A_^1_%JMP* XYTA_^1RMV1A RTJ JKILL+REPREL_^1_%ENA_!0_^1_%STA- SAT,I_^1_%INA_!-1_^1_%STA- RA,I_^1_%STA- INTMP+1,I_^1_%INA_!2_^1_%STA- UPDAT€€E,I_^1_%JMP* NBEK0_^1*_9REMOVE PERMANENT FILE_^1REPL20 LDA- 3,Q_*FILE SECTOR LENGTH_^1_%TCA_!A_^1_%ADD- IOSEC+1,I_^1_%STA- ENTSEC+1,I_^1_%LDA- H8000_(8000_^1_%STA- INPPAR,I_^1_%ENA_!-1_^1_%STA- INTMP+1,I_^1REPL21 LDA- IOSEC+1,I_^1_%ENQ_!0_^1_%STA- ASAVA3,I_^1_%ENQ 0_,INSERT ZEROS IN SEC AVAIL TABLE_^1_%ENA 2_^1_%RTJ READA3+REPREL_^1*_8FROM IOSEC TO ENTSEC_^1_%LDA- IOSEC+1,I_^1_%€€INA_!1_^1_%STA- IOSEC+1,I_^1_%SUB- ENTSEC+1,I_^1_%SAZ REPX0T_^1_%JMP*_!REPL21_^1REPX0T LDA- IOSEC+1,I_^1_%SUB- $C1_^1_%SAN REPX1T_^1_%LDA- ENTSEC+2,I_^1_%STA- $C1_^1REPX1T JMP* XYT1A_^1XYTA_!ENQ 0_,WRITE OUT LAST UPDATED_^1*_8SAT SECTOR_^1_%LDA- SECS+1,I_^1_%ADD- SAT,I_^1_%STA- SECX+1,I_^1_%ENQ WSAT1_)WSAT_^1_%ENA 1_^1_%RTJ READA4+REPREL_^1XYT1A ENQ 0_,MASSUP_^1_%ENA 7_^€€1_%RTJ READA3+REPREL_^1_%ENQ 0_^1_%STQ- REMOV,I_%ZERO THESE LOCATIONS - CHECKED_^1_%STQ- REMFIL,I_$WHEN *N(FILE) PROCESSOR IS IN_^1_%LDA- DUP,I_(DUPLICATE ENTRY POINT_^1_%SAP XYT1B_^1_%ENA 8_,YES,OUTPUT AN ERROR 8_^1_%ENQ 2_^1XYT1B JMP TRANF+REPREL NO,GET NEXT INPUT STATEMENT_^1_%EJT_]_^1_%SPC 2_^1_%EQU PGMREL(*-PROGIN)_^1_%SPC 2_^1NBEK_!0_"0_^1_%LDA ENDK+PGMREL_^1_%STA€€- I_^1_%RTJ* BR_^1BR_#NUM 0_^1_%LDA =XXYT1-BR_#SET EXIT FOR JKILL_^1_%ADD* BR_^1_%STA JKILAD+PGMREL_^1_%LDA- BUFF1A,I_^1_%STA INBFAD+PGMREL_^1_%ENA 0_^1_%RTJ SETADD_^1_%ENQ 0_,SEARCH FOR FIRST EMPTY SECTOR_^1_%ENA 5_^1_%RTJ READA3+PGMREL_^1_%STQ- SIC,I_^1_%STQ- ENTSEC,I_$SAVE SEC. NO. FOR BEGIN. OF PROG._^1_%STA- SIC+1,I_^1_%STA- ENTSEC+1,I_^1NBEK1 RTJ IPNEW_(READ ONE BL€€OCK OF NEW PROG._^1_%LDA* SECCNT_'MASS STORAGE INPUT_^1_%SAN 1_^1_%JMP* NBEK1B_'NO_^1_%TCA A_^1_%STA* SECCNT_^1_%LDA* EXTCNT_^1_%SAZ NBEK3_^1_%INA 1_,COMPENSATE FOR XFR BLOCK_^1_%TCA A_^1_%STA* EXTCNT_^1NBEK3 LDA- BUFF1A,I_$RESET BUFF1A TO START OF_^1_%STA INBFAD+PGMREL FIRST ENTRY BLOCK_^1_%ENA 0_^1NBEK1C RTJ* SETADD_'RESET ALL BUFF1A CHECKS_^1_%RTJ* ENTENT_'GO PROCESS ENT€€RY-POINT BLOCK_^1NBEK1B LDA- NSEC,I_^1_%SAN NBEK1A_'END OF BIN I/P_^1_%JMP* NBEK5_(NO_^1NBEK1A ENA 0_^1_%STA* (INBF58)_$YES,SET POINTER WORDS_^1_%STA* (INBF59)_$TO ZERO FOR END OF STRING_^1_%JMP* NBEK6_^1NBEK5 ENQ 0_,GET NEXT AVAILABLE SECTOR_^1_%ENA 5_^1_%RTJ READA3+PGMREL_^1_%STQ* (INBF58)_^1_%STA* (INBF59)_^1NBEK6 ENQ OPNEW1_^1_%ENA 1_^1_%RTJ READA4+PGMREL_^1_%LDA- NSE€€C,I_^1_%SAZ NBEK6A_'ALL THRU_^1_%JMP* NBEK7_%YES_^1NBEK6A LDA* (INBF58)_^1_%STA- SIC,I_*AVAILABLE_^1_%LDA* (INBF59)_^1_%STA- SIC+1,I_^1_'LDA* SECCNT_%M.S. INPUT_^1_%SAN NBEK6B_^1_%LDA* EXTCNT_^1_'SAN NBEK7B_^1_%JMP* NBEK1_^1NBEK6B RAO* SECCNT_'YES, TRANFER BLOCK_^1_%LDA* SECCNT_^1_%SAZ NBEK7B_^1_%ENA 96_^1_%JMP* NBEK1C_^1NBEK7B LDA* EXTCNT_'EXTERNAL BLOCKS TO PROCESS_^1_%SAZ €€ NBEK7C_^1_%INA 1_^1_%SAZ NBEK7C_^1_%RAO* EXTCNT_^1_%JMP* NBEK7D_^1NBEK7C RAO- NSEC,I_^1NBEK7D ENA 96_^1_%RTJ* SETADD_^1_%JMP* NBEK1B_^1NBEK7 LDA- $C1_$TEST IF_^1_%SUB- SIC+1,I_(M.S. SCRATCH AREA_^1_%SAM NBEK7A_'HAS BEEN ENTERED._^1_%SAZ NBEK7A_^1_%JMP* XYT_^1NBEK7A RAO- SIC+1,I_^1_%LDA- SIC,I_(ENTERED SCRATCH AREA_^1_%STA- $C0_,UP4DATE POINTERS_^1_%LDA- SIC+1,I_^1_%STA- $C€€1_^1XYT_"ENQ 0_,WRITE OUT LAST UPDATED_^1*_:SAT SECTOR._^1_%LDA- SECS+1,I_^1_%ADD- SAT,I_^1_%STA- SECX+1,I_^1_%ENQ WSAT1_^1_%ENA 1_,WSAT_^1_%RTJ READA4+PGMREL_^1_%LDA- DUP,I_(DUPLICATE ENTRY POINTS_^1_%SAN 1_^1_%JMP* XYT1_*NO,_^1_%STA- REMOV,I_^1_%ENA -1_^1_%STA- DUP,I_^1_%LDA- ENTSEC+1,I_^1_%LDQ BF1BA+PGMREL_^1_%STQ- POINT,I_^1_%STA- 4,Q_^1_%LDA* REPLAD_^1_%RTJ MMADDR+PGM€€REL_"BRING IN REPLACE OVERLAY_^1_%STQ MSBPRC+PGMREL_^1_%STA LSBPRC+PGMREL_^1_%ENA -1_^1_%JMP BRIPRO+PGMREL_^1_%SPC 2_^1REPLAD ADC PLINSN-LBDT_^1*_8COMMON EXIT_^1XYT1_!ENQ 0_^1_%ENA 7_^1_%RTJ READA3+PGMREL_^1_%LDA* BADFLG_'I/P ERRORS_^1_%SAN 2_^1_%ENQ 0_^1_%JMP* RPTERR_^1_%INA -1_^1_%SAZ ILLBLK-*-1_"ILLEGAL I/P BLOCK_^1_%INA 14_+MUST I/O ERROR_^1_%JMP* *+2_^1ILLBLK INA€€ 16_^1_%ENQ 2_^1RPTERR JMP TRANF+PGMREL_^1SECCNT ADC 0_,NO. OF SECTORS OF ENTRY POINTS_^1EXTCNT NUM 0_^1INBF58 ADC 0_^1INBF59 ADC 0_^1INBF95 ADC 0_^1_%SPC 2_^1SETADD 0_"0_,SET BUFF1A ADDRESSES_^1_%ADD INBFAD+PGMREL_^1_%STA INBFAD+PGMREL_^1_%INA 58_^1_%STA* INBF58_^1_%INA 1_^1_%STA* INBF59_^1_%INA 36_^1_%STA* INBF95_^1_%SUB- $EC_^1_%SAM 4_^1_%ENA 17_+ERROR 17 NO. OF E€€NTRYPOINTS BLOCKS_^1_%ENQ 2_,IN PROGRAM EXCEEDS LMT. OF UNPROTECTED_^1_'JMP TRANF+PGMREL_^1_%JMP* (SETADD)_^1BADFLG NUM 0_,BAD OPERATION FLAG_^1_%SPC 2_^1ENTENT 0_"0_,ENTER ALL ENT NAMES IN DI_^1_%LDA INBFAD+PGMREL_^1_%STA BUF1A+PGMREL_^1_%RAO BUF1A+PGMREL_^1_%ENA -14_(NBR OF ENTRIES IN ENT PNT BLOCK_^1_%STA* ENTTST_^1TSTQ_!ENQ 0_^1_%ENA 4_,SAC - TEST FOR DUPLICATE_^1_%RTJ€€ READA3+PGMREL ENT PNT NAME_^1_%STQ BF1BA+PGMREL_#POINTER TO DUP. ENTRY PTS._^1_%SAN TSTQ2_^1_%RAO- DUP,I_(SET DUPLICATE ENTRY POINTS FLAG_^1TSTQ2 LDQ =XONSE_^1_%ENA 1_^1_%RTJ READA4+PGMREL_^1_%RAO* ENTTST_^1_%LDA* ENTTST_^1_%SAZ DUN-*-1_^1_%LDA BUF1A+PGMREL_^1_%INA 4_^1_%STA BUF1A+PGMREL_^1_%LDA (BUF1A+PGMREL)_!TEST FOR LAST ENT PT. NAME_^1_%SAZ DUN-*-1_^1_%JMP* TSTQ_€€^1DUN_"JMP* (ENTENT)_^1ENTTST ADC 0_^1*_]_^1*_*THIS SUBROUTINE READS ONE BLOCK AT A TIME_^1*_*FORM STANDARD I/P DEVICE._^1IPNEW 0_"0_^1RDLOP CLR A_,BACKGROUND INPUT BUFFER TO ZERO_^1_%ENQ -95_^1RDLOP1 STA* (INBF95),Q_^1_%SQZ RDLOP2-*-1_^1_%INQ 1_^1_%JMP* RDLOP1_^1RDLOP2 LDA INBFAD+PGMREL_^1_%ENQ 60_^1_%STQ- WS,I_^1_%LDQ* FSTREC_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ €€0_^1_%ENA 3_^1_%RTJ READA4+PGMREL_^1_%SAP RDN_^1_%ENA 2_^1_%STA* BADFLG_'SET I/P ERROR FLAG = 2_^1_%JMP* OUTL1_^1RDN_"LDA (INBFAD+PGMREL)_^1_%SUB* ENTN_^1_%SAN RDNA_^1_%LDA- MSINP,I_%M.S. INPUT_^1_%SAZ RDNB_)NO_^1_%RAO* SECCNT_'NO. OF SECTORS OF ENTRY-POINTS_^1RDNC_!ENA 96_^1_%RTJ* SETADD_^1_%JMP* RDLOP_^1RDNB_!RTJ* ENTENT_^1_%JMP* (IPNEW)_^1RDNA_!LDA (INBFAD+PGMREL)_^1_%S€€UB* XFEBL_(TRANSFER BLOCK ($C050)_^1_%SAN OTL_^1OUTL1 LDA* SECCNT_^1_%SAN 1_^1_%RAO- NSEC,I_'SET END I/P_^1_%JMP* IPOK_^1OTL_"LDA* FSTREC_^1_%SAN NEXO-*-1_^1_%JMP* FSTRC_^1NEXO_!LDA (INBFAD+PGMREL)_^1_%SUB* RBDBL_(RBD BLOCK_^1_%SAN NEX1-*-1_^1_%JMP* IPOK_)YES_^1NEX1_!LDA (INBFAD+PGMREL)_^1_%SUB* BZSBL_(BZS BLOCK_^1_%SAN NEX2-*-1_^1_%JMP* IPOK_)YES_^1NEX2_!LDA (INBFAD+PGMRE€€L)_^1_%SUB* EXTBL_(EXT BLOCK_^1_%SAN NEX3_^1_%LDA- MSINP,I_%M.S. INPUT_^1_%SAZ IPOK_^1_%RAO* EXTCNT_'READ EXT BLOCKS INTO UNPROTECTED_^1_%JMP* RDNC_^1NEX3_!NOP 0_^1_%RAO* BADFLG_'NO, SET I/P ERROR FLAG = 1_^1_%JMP* OUTL1_^1IPOK_!JMP* (IPNEW)_^1FSTRC RAO* FSTREC_^1_%LDA (INBFAD+PGMREL)TEST FIRST REC._^1_%SUB* NAMB_-FOR NAME BLOCK_^1_%SAN NAMBA_(IS IT NAM BLOCK_^1_%JMP* (IPN€€EW)_(YES_^1NAMBA LDA- H8000_^1_%STA- INPPAR,I_^1_%LDA- SIC+1,I_^1_%STA- IOSEC+1,I_^1_%STA- ASAVA3,I_^1_%ENQ 0_,INSERT_^1_%ENA 2_^1_%RTJ READA3+PGMREL_^1_%ENA_!12_-NO...ERROR NO 12_^1_%ENQ 2_^1_%JMP TRANF+PGMREL_^1FSTREC NUM_!0_^1NAMB_!NUM_!$2050_^1XFEBL NUM_#$C050_^1ENTN_!NUM_#$8050_^1RBDBL NUM $4050_^1BZSBL NUM $6050_^1EXTBL NUM $A050_^1_%EJT_]_^1_%EJT_]_^1_%SPC 2_^€€1_%EQU FILREL(*-PROGIN)_^1_%SPC 2_^1**********************************************************************_^1*_]_^1*_**N,N,W1,W2,M_^1*_]_^1**********************************************************************_^1_%SPC 4_^1FILE_!NOP 0_^1_%LDA ENDK+FILREL_^1_%STA- I_^1_%RTJ* BZ_^1BZ_#NUM 0_^1_%LDA =XXYT2-BZ_#SET EXIT FOR JOB KILL_^1_%ADD* BZ_^1_%STA JKILAD+FILREL_^1_%ENA_#0_^€€1_%STA- QS,I_^1_%STA- MSINP,I_^1_%STA- REMOV,I_J**MSOS4.0_^1_%STA- REMFIL,I_I**MSOS4.8_^1_%STA- UPDATE,I_I**MSOS4.0_^1_%STA- CSCNT,I_^1_%STA- TRISEC,I_^1_%STA-_"ZSEC,I_^1_%STA- W1,I_^1_%STA- W2,I_^1_%STA- SECS,I_^1_%STA- SAT,I_^1_%STA- WORD,I_^1_%ENA 1_^1_%STA- FILIN,I_^1_%TCA A_^1_%STA- INTMP+1,I_#CLEAR SAT_^1_%STA- RA,I_^1_%LDA- BUFF1D,I_^1_%STA- $ED_^1_%RTJ* PPRKGO_'GET NAME P€€ARAMETER_1**MSOS4.0*_^1_%SQN AXF1-*-1_^1ERF_"ENA_#6_*ERROR 6. BAD PARAMETERS_^1ERF1_!ENQ 2_^1_%JMP TRANF+FILREL_^1AXF1_!SAZ AXF2_)FILE NAME PARAMETER NUMERIC_^1_%JMP* ERF_*YES, ERROR NO. 6_^1AXF2_!LDQ =XZOUT_^1_%ENA 2_^1_%RTJ READA4+FILREL_^1_%RTJ* PPRKGO_'CHECK FOR W1 PARAMETER_-**MSOS4.0*_^1_%SQZ BFF2A_^1_%LDA-_"XXK,I_%W1 WAS GIVEN. SAVE IT._^1_%STA- W1,I_^1_%JMP*_"CKW2_'€€GO CHECK FOR W2_^1BFF2A RTJ* PPRKGO_'CHECK FOR W2 PARAMETER_-**MSOS4.0*_^1_%SQZ RETSEQ_^1_%JMP*_"ERF_(W2 WITHOUT W1. ERROR_^1RETSEQ RTJ* PPRKGO_'CHECK FOR M PARAMETER_.**MSOS4.0*_^1_%SQN BFF3A_^1_%JMP*_"ERF_(M OMITTED. ERROR_^1BFF3A LDA- XXK,I_(CHECK IF BIN OR ASCII_^1_%SUB*_"LETA_^1_%SAZ 1_P**MSOS4.0_^1_%JMP* BXF2_M**MSOS4.0_^1_%LDA*_"ASCWRD_$SET READ-IN REQ FOR ASCII_^1_%STA€€- RDREQ,I_^1_%JMP*_"XF3_^1CKW2_!RTJ* PPRKGO_'W1 GIVEN CHECK FOR W2_.**MSOS4.0*_^1_%SQZ REQB_^1_%LDA-_"XXK,I_%W2 WAS GIVEN. SAVE IT_^1_%STA- W2,I_^1REQB_!JMP* RETSEQ_'RETURN TO SEQUENCE_^1PPRKGO 0_"0_P**MSOS4.0*_^1_%ENQ 0_,PPRK SUBROUTINE CALL_^1_%ENA 2_P**MSOS4.0*_^1_%RTJ READA4+FILREL_D**MSOS4.0*_^1_%JMP* (PPRKGO)_I**MSOS4.0*_^1ASCWRD NUM_!$1000_*ASCII MODE_^1BINWRD NUM_!0_.BI€€NARY MODE_^1LETA_!NUM_#$41FF_^1LETB_!NUM $42FF_^1BXF2_!LDA- XXK,I_^1_%SUB* LETB_^1_%SAZ BFF4A_^1_%JMP ERF_^1BFF4A LDA* BINWRD_^1_%STA- RDREQ,I_%FOR BINARY_^1XF3_"LDQ- W1,I_)TEST FOR PROCEDURE_^1_%SQN OVUPTE_^1_%LDQ- W2,I_^1_%SQZ 1_^1_%JMP* ERF_*FOR UPDATE W1=0 NOT ALLOWED_^1_%JMP* INSREP_'INSERT NEW OR REPLACE OLD_^1OVUPTE LDA* UPDTAD_^1_%RTJ MMADDR+FILREL BRING UPDATE FILE€€ OVERLAY_^1_%STQ MSBPRC+FILREL_^1_%STA LSBPRC+FILREL_^1_%JMP BRIPR1+FILREL_^1_%SPC 2_^1UPDTAD ADC UPDYTE-LBDT_^1_%SPC 2_^1_%SPC 2_^1_%SPC 2_^1INSREP ENQ 0_,INPUT-READ IN WHOLE FILE_^1_%ENA 6_^1_%RTJ READA3+FILREL_^1_%LDQ-_"$C1_^1_%ADQ- MSINP,I_^1_%STQ-_"$C1_^1XXX1_!STA* LENGTH_'LENGTH IN SECTORS_^1_%LDA- BUFF1A,I_^1_%STA BUF1A+FILREL ADDRESS OF BUFFER BUFF1A_^1_%ENQ S€€ACF1_(SEE IF REPLACEMENT FILE_^1_%ENA 4_^1_%RTJ READA3+FILREL_^1_%SAZ SACF1A_^1_%STA- NUSECT,I_^1_%JMP* XXXX2_(NEW FILE_^1SACF1A STA- XXK+1,I_^1_%STA- SECAD,I_^1_%STQ* QQ_(SAVE Q TEMPORARILY_^1_%LDA- 3,Q_'COMPLEMENT OF FILE LENGTH_^1_%ADD* LENGTH_^1_%SAZ RPLCA_^1_%SAP RPLCB_^1RPLCA JMP* REPLAC_'REPLACEMENT FITS_^1RPLCB LDA- 3,Q_^1_%STA- UPDL,I_^1_%LDA- 4,Q_^1_%STA- UPDSAT+1€€,I_^1_%ENA_!1_^1_%STA- ASAVA3,I_^1_%ENQ UDSET_)UPDSET UPDATE SAT_^1_%ENA 2_^1_%RTJ READA3+FILREL_^1XXXX2 LDA- SECS+1,I_$READ UP SECTOR AVAILABLE TABLE_^1_%STA- SECX+1,I_^1_%ENQ RSAT1_(RSAT_^1_%ENA 1_^1_%RTJ READA4+FILREL_^1_%LDA* LENGTH_'STORE NEW LENGTH IN DIRECTORY_^1_%ADD- MSINP,I_%COMPENSATE TO ALLOW FOR P.L. SEC._^1_%TCA A_^1_%STA- UPDL,I_^1_%ENQ 0_,SEARCH FOR FIRST €€GROUP OF SECTORS_^1_%ENA 5_,IN SAT LARGE ENOUGH FOR THIS FILE_^1_%RTJ READA3+FILREL_^1_%ADD- MSINP,I_%IF M.S. INPUT ADD 1 TO BGN. ADDR._^1_%STA- UPDSAT+1,I_^1_%SUB- $C1_*FIRST AVAILABLE = $C1_^1_%SAZ BGNC1_^1_%ADD* LENGTH_'NO,NECESSARY TO INCREASE $C1_^1_%SAM 1_^1_'STA* HOLDC1_#YES_^1_%LDA- UPDL,I_'SET ACTUAL LENGTH FOR M.S. MOVE_^1_%ADD- MSINP,I_^1_%STA- UPDL,I_^1_%LDA- UPDSAT€€+1,I_^1_%RTJ* MVSECT_'MOVE FILE TO NEW LOCATION_^1_%LDA- NENT,I_'GET CORRECT PROGRAM_^1_%STA- SECAD+1,I_#LIBRARY SECTOR_^1_%LDA- $C1_*UPDATE 1ST SCRATCH IF_^1_%ADD* HOLDC1_'$C1 EXCEEDED_^1_%STA- $C1_^1_%JMP* RPLCC_^1BGNC1 LDA- UPDSAT+1,I_^1_%ADD*_"LENGTH_$RESET FIRST SCRATCH SECT_^1_%STA-_"$C1_(NUMBER_^1_%LDA- UPDL,I_'SET ACTUAL LENGTH FOR P.L. STORAGE_^1_%ADD- MSINP,I_^1_%STA- UP€€DL,I_^1RPLCC ENA 0_^1_%STA- ASAVA3,I_^1_%ENQ UDSET_(UPDSET_^1_%ENA 2_^1_%RTJ READA3+FILREL_^1_%LDA- NUSECT,I_$NEW DIRECTORY ENTRY REQUIRED_^1_%SAZ RPLCC1_^1_%RTJ* NEWFIL_'YES_^1RPLCC1 LDQ* QQ_^1_%LDA- UPDL,I_^1_%STA- 3,Q_^1_%LDA- UPDSAT+1,I_^1_%STA- 4,Q_^1_%RTJ* DIROUT_'WRITE OUT DIRECTORY AGAIN_^1XYT2_!ENQ 0_,UPDATE C0 AND C1_^1_%ENA 7_^1_%RTJ READA3+FILREL_^1_%LDA- TEMPF€€7,I_J**MSOS4.0_^1_%STA- $ED_^1_%ENQ 0_^1_%STQ- FILIN,I_^1_%STQ- NUSECT,I_^1_%JMP TRANF+FILREL_^1QQ_#ADC 0_^1HOLDC1 NUM 0_^1_%EJT_]_^1*********************************************************************_^1LENGTH NUM 0_^1REPLAC LDA*_"LENGTH_$SET NEW LENGTH INTO ENTRY_^1_%SAN NUFIL-*-1_^1_%ENA_!9_^1_%JMP ERF+1_^1NUFIL STA- UPDL,I_'NEW LENGTH_^1_%LDA- 3,Q_^1_%STA- UPDL1,I_%OL€€D LENGTH_^1_%LDA- UPDL,I_^1_%TCA_!A_^1_%STA- 3,Q_^1_%RTJ*_"DIROUT_$WRITE DIRECTORY BLOCK OUT_^1_%LDQ* QQ_(FETCH Q REGISTER FROM STG_^1_%LDA- 4,Q_'SECTOR ON WHICH FILE IS STORED_^1_%RTJ* MVSECT_^1_%LDA- $C1_*RESTORE $C1_;67*1460_^1_%SUB- MSINP,I_)IF REQUIRED_867*1460_^1_%STA- $C1_Q67*1460_^1_%LDA- SECAD+1,I_^1_%STA- UPDSAT+1,I_^1_%LDA- UPDL1,I_^1_%ADD- UPDL,I_^1_%STA- UPDL,I_^1_%STA€€- ASAVA3,I_^1_%ENQ UDSET_)UPDSET UPDATE SAT_^1_%ENA 2_^1_%RTJ READA3+FILREL_^1_%JMP* XYT2_^1MVSECT 0_"0_^1_%STA- SECAD+1,I_"TO SECAD_^1_%LDA-_"$C1_(BEG ADDR FOR READIN_^1_%STA-_"XXK+2,I_^1_%ENA_#96_)NUMBER OF WORDS_^1_%STA-_"WS,I_^1XXX3_!ENQ XXK+1_^1_%ADQ- I_^1_%LDA- BUFF1D,I_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_,MFREAD - READ IN A SECTOR_^1_%ENA 1_^1_%RTJ READA4+F€€ILREL_^1_%ENQ SECAD_^1_%ADQ- I_^1_%LDA- BUFF1D,I_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_(MFWRIT - WRITE IT INTO LIBRARY_^1_%ENA 1_^1_%RTJ READA4+FILREL_^1_%RAO-_"XXK+2,I_#INCREMENT SECT NUMBERS_^1_%RAO-_"SECAD+1,I_^1_%LDA*_"LENGTH_$TEST IF TOTAL FILE HAS_^1_%INA_#-1_)BEEN MOVED TO LIBRARY_^1_%STA* LENGTH_^1_%SAZ 1_^1_%JMP*_"XXX3_'NOT YET._^1_%JMP* (MVSECT)_^1_%EJT_]€€_^1*********************************************************************_^1DIROUT 0_"0_,WRITE THIS DIRECTORY SECT_^1_%ENQ SECAD_^1_%ADQ- I_,ABS ADDR OF DIR SECT NO_^1_%ENA_#96_)NUMBER OF WORDS_^1_%STA-_"WS,I_^1_%LDA- B1BABS,I_$ABS. ADDR. OF BUFF1B_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_(WRITE IT_^1_%ENA 1_^1_%RTJ READA4+FILREL_^1_%JMP*_"(DIROUT)_^1NEWFIL 0_"0_^1_%ENQ€€ ONSE_)PUT NAME IN DIRECTORY_^1_%ENA 1_^1_%RTJ READA4+FILREL_^1_%ENQ SACF1_(PREPARE TO ADD LENGTH_^1_%ENA 4_^1_%RTJ READA3+FILREL_^1_%STQ* QQ_^1_%SAN SACF1B_^1_%JMP* (NEWFIL)_^1SACF1B ENA 10_+LOGIC ERROR_^1_%JMP ERF+1_^1_%EJT_]_^1_%SPC 2_^1_%EQU UPDREL(*-PROGIN)_^1_%SPC 2_^1*********************************************************************_^1UPDYTE NOP 0_^1_%LDA E€€NDK+UPDREL_^1_%STA- I_^1_%RTJ* BP_^1BP_#NUM 0_^1_%LDA =XXYT2A-BP_"SET EXIT FOR JOB KILL_^1_%ADD* BP_^1_%STA JKILAD+UPDREL_^1_%LDA- W2,I_)W2=0_^1_(SAZ_%XF4-*-1_,YES, 1 WORD UPDATE_^1_%SUB- W1,I_)NO,W1 LESS THAN W2_^1_%SAP 4_^1ERFF_!ENA 10_^1ERFF1 ENQ 2_^1_%JMP TRANF+UPDREL_^1_(SAN_%XF4-*-1_,W1 = W2_^1_%JMP* ERFF_^1XF4_$INA_%1_2NO, NBR OF WRDS TO UPDATE_^1_(STA-_$ZS,I_^1_%ENQ€€ 0_^1_%ENA 6_^1_%RTJ READA3+UPDREL_^1_(LDA-_$$C1_0FETCH SCRATCH SECTOR NBR_^1_%ADD- TRISEC,I_$NBR. SECTOR USED TO STORE FILE_^1_%ADD- MSINP,I_%ADJUST FOR HEADER RECORD_^1_(STA-_$XXK+2,I_,SAVE AS NEW SCRATCH SECTOR_^1X4S5_!LDA- BUFF1A,I_^1_%STA BUF1A+UPDREL_^1_%ENQ SACF1_^1_%ENA 4_^1_%RTJ READA3+UPDREL_^1_%SAZ UPTD_^1_%ENA_#7_*UPDATE TO AN UNDEFINED_^1_%JMP ERFF1_^1UPTD_!ST€€Q* INDSV_(SAVE ORDINAL TO SECT_^1_%LDA- 4,Q_'SECTOR ON WHICH FILE STARTS_^1_%STA-_"ZSEC+1,I_"SAVE SECT NO OF FILE TEMP_^1_%STA- ZS+1,I_^1_%LDA- 3,Q_'COMPLEMENT OF NBR OF SECTORS USED_^1_%TCA_#A_^1_%STA SIZ_'NBR OF SECTORS USED BY PROG_^1_%LDA- W2,I_^1_%SAN UPTD1A_^1_%JMP ONONLY_#MUST UPDATE ONLY ONE WORD_^1UPTD1A LDA- ZS,I_)NBR OF WORDS TO BE UPDATED_^1_%CLR Q_^1_%DVI- NSIX,I_#€€DECIMAL 96_^1_%SQZ UPTD2A_^1_%INA 1_)ADDITIONAL SECTOR_^1UPTD2A STA- TRISEC,I_$NBR OF SECTORS WHICH MUST BE HANDLED_^1_%LDA- W1,I_^1_%INA -1_(UPDATE FROM 1,...,N_^1_%ENQ_#0_^1_%DVI-_"NSIX,I_$CALC SECT POSITION OF W1_^1_%ADD-_"ZS+1,I_$SECT NO WHERE W1 STARTS_^1_%STA-_"ZS+1,I_$SECT POS OF W1 IN FILE_^1_%STQ W1ORD_^1_%ENA_#96_^1_%SUB W1ORD_^1_%STA W1INP_^1_%STA-_"WS,I_^1_%RTJ €€CHCK_^1_%LDA- ZS,I_%NBR OF WORDS TO UPDATE_^1_%SUB W1INP_$NBR OF WDS ON FIRST SECTOR_^1_%SAZ MORA_^1_%SAP MORE-*-1_#TO UPDATE._^1MORA_!ENA -1_^1_%LDQ- ZS,I_%NBR OF WDS TO UPDATE_^1_%RAO* FSTLST_#FIRST SECTOR IS THE LAST SECTOR_^1_%JMP* MOREX_^1MORE_!CLR Q_^1_%DVI- NSIX,I_#DECIMAL 96_^1MOREX ADD- ZS+1,I_#LOC OF FIRST SECOR TO BE UPDATED_^1_%SQZ MORB_^1_%INA 1_^1MORB_!STA* LA€€ST1_(LAST SECTOR TO BE UPDATED_^1_%STQ* W3ORD_$NBR OF WDS ON LAST SECT TO BE UPDATED_^1_%STA- ZSEC+1,I_!SAVE LAST SECTOR NBR_^1_%CLR A_^1_%STA- ZSEC,I_#LSB OF LAST SECTOR NVR_^1_%ENA 96_^1_%STA- WS,I_%PREPARE TO READ AND SAVE LAST SECTOR_^1_%LDA- BUFF1C,I_^1_%LDQ- I_^1_%ADQ =XZSEC_'A(ZSEC)_^1_%RTJ* MFRD_^1*_]_^1*_]_^1_%LDA- ZS+1,I_#FIRST SECTOR TO BE UPDATED_^1_%STA- ZSEC+1,I_#T€€O STORAGE_^1_%LDA- $EC_'TEMP HIGHEST UNPROTECTED LOC +1_^1_%SUB- $ED_'TEMP LOWEST UNPROTECTED LOC -1_^1_%INA -97_'MINUS ONE SECTOR_^1_%CLR Q_^1_%DVI- NSIX,I_#DECIMAL 96_^1_%STA- CSCNT,I_%NBR OF SECTOR WHICH MAY BE READ_^1PROCSS SUB- TRISEC,I_$NBR OF SECTORS TO BE UPDATED_^1_%SAP MULTX-*-1_^1_%RAO* MULTI_$ALL SECTORS WILL NOT FIT IN CORE AT ONCE_^1_%LDA- CSCNT,I_^1_%JMP* MULTX1_^€€1INDSV NUM 0_^1W2ORD ADC 0_^1NSECTS ADC 0_^1SECTS ADC 0_^1MULTI ADC 0_^1WDDS_!ADC 0_^1W3ORD ADC 0_^1LAST1 ADC 0_^1FSTLST ADC 0_^1MULTX LDA- TRISEC,I_$NBR OF SECTS ACTUALLY INPUT_^1MULTX1 STA* SECTS_^1_%MUI- NSIX,I_#DECIMAL 96_^1_%STA- WS,I_%INPUT WORD COUNT_^1_%STA* WDDS_^1_%RTJ PRERD_$SETUP PARAMETERS FOR MASS STG READ_^1_%LDA- XXK+6,I_"ADDR OF LOWEST UNPROTECTED €€LOC_^1_%ADD* W1ORD_$NBR OF WDS NOT TO BE UPDATED ON SECT ONE_^1_%LDQ- XXK+5,I_^1_%ADQ* NSECTS_#NBR OF SECTORS ALREADY TRANSFERRED_^1_%STQ- XXK+5,I_^1_%LDQ- XXK+3,I_"ADDR OF FIRST SCRATCH SECTOR_^1_%RTJ* MFRD_^1*_]_^1_(LDQ-_$I_^1_(ADQ_%=XZSEC_-A(ZSEC)_^1_(STQ-_$XXK+1,I_^1_(LDA*_$W1ORD_.PREPARE TO READ W1ORD WORDS FROM_^1_(SAZ_%BYPASS-*-1_^1_(STA-_$WS,I_/FIRST UPDATE SECTOR_^1_(LDA-_€€$XXK+6,I_,ADDR OF LOWEST UNPROTECTED LOC_^1_%RTJ* MFRD_^1BYPASS LDA* WDDS_%NBR OF WORDS TO BE TRANSMITTED_^1_%LDQ* MULTI_$ON LAST PHASE OF INPUT_^1_%SQN FERGET-*-1_#NO_^1_%LDQ* W3ORD_$YES, CONTINUE_^1_%SQZ FERGET-*-1_^1_%ADD* W3ORD_$WDS UPDATED ON LAST SECTOR_^1_%INA -96_*MINUS ONE SECTOR_^1FERGET ADD* W1ORD_$WORDS BEFORE UPDATE_^1_%STA- WS,I_(TO STORAGE LOC_^1_%LDA- XXK+6,I_"AD€€DR OF LOWEST UNPROTECTED LOC_^1_%LDQ- ZSEC+1,I_!CURRENT SECTOR NBR_^1_%ADQ* NSECTS_#NBR OF SECTORS ALREADY OUTPUT_^1_%STQ- ZSEC+1,I_^1_%LDQ- XXK+1,I_"A(ZSEC)_^1_%RTJ* MFWT_^1_%LDQ* SECTS_^1_%ADQ* NSECTS_^1_%STQ* NSECTS_^1_%LDA* MULTI_^1_%SAZ NOTMUL-*-1_^1_%LDA- TRISEC,I_^1_%SUB- CSCNT,I_^1_%STA- TRISEC,I_$NBR OF SECTORS TO BE MOVED_^1_%CLR Q_^1_%STQ* W1ORD_^1_%STQ* MULTI_$TURN OF€€F MULTI PASS SWITCH_^1_%LDA- CSCNT,I_^1_%JMP* PROCSS_^1_%SPC 2_^1NOTMUL LDA* W3ORD_$NBR OF WDS TO BE PLACED ON LAST SECTOR_^1_%LDQ* FSTLST_#IS FIRST SECTOR THE LAST SECTOR_^1_%SQZ FSTL1A_'NO_^1_%ADD* W1ORD_$YES_^1FSTL1A STA- WS,I_)TO STORAGE._^1_%LDA- BUFF1C,I_$ADDR. OF LASTSECTOR STORAGE BUFFER_^1_%LDQ* LAST1_$LAST SECTOR NUMBER_^1_%STQ- ZSEC+1,I_^1_%LDQ- I_^1_%ADQ =XZSEC_'A(ZS€€EC)_^1_%STQ- XXK+1,I_^1_%RTJ* MFRD_^1*_]_^1*_]_^1_%ENA 96_^1_%STA- WS,I_%OUTPUT LAST SECTOR_^1_%LDA- BUFF1C,I_^1_%LDQ- XXK+1,I_"A(ZSEC)_^1_%RTJ* MFWT_)SETUP ROUTINE FOR MFWRITE_^1_%JMP* XYT2A_(EXIT_^1SIZ_"NUM 0_^1W1ORD NUM 0_^1W1INP NUM 0_^1NSTG_!NUM 0_^1HOLDA ADC 0_^1_%SPC 2_^1MFRD_!0_"0_,SETUP ROUTINE FOR MFREAD_^1_%STQ- QSAVA4,I_$SUBROUTINE IN AREA4 FOR UPDYTE_^1_%STA-€€ ASAVA4,I_^1_%ENQ 0_,MFREAD_^1_%ENA 1_^1_%RTJ READA4+UPDREL_^1_%JMP* (MFRD)_^1_%SPC 2_^1MFWT_!0_"0_,SETUP ROUTINE FOR MFWRITE_^1_%STQ- QSAVA4,I_$SUBROUTINE IN AREA4 FOR MFWRITE_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_^1_%ENA 1_^1_%RTJ READA4+UPDREL_^1_%JMP* (MFWT)_^1_%SPC 2_^1ONONLY LDA- W1,I_)UPDATE ONE WORD ONLY_^1_%ENQ_#0_^1_%STQ- ZS,I_^1_%DVI-_"NSIX,I_$CALCULATE POS OF W1 IN_^1€€_%STQ-_"XXK+4,I_^1_%ADD-_"ZS+1,I_$FILE_^1_%STA-_"ZS+1,I_$SECT WHERE W1 IS_^1_%LDQ-_"$FF_^1_%ADQ =XZS_)ABS OF W1 SECT_^1_%ENA_#96_^1_%STA-_"WS,I_^1_%LDA- B1BABS,I_$ABS OF BUFF1B_^1_%RTJ* MFRD_^1_%LDQ- $ED_'TEMP LOWEST UNPROTECTED LOC -1_^1_%LDA- 1,Q_'UPDATE WORD_^1_%LDQ-_"XXK+4,I_^1_%LDA- BUFF1B,I_^1_%INA -1_^1_%STA* HOLDA_^1_%STA* (HOLDA),Q_^1_%LDA- B1BABS,I_$ABS. OF BUFF1B_^1_%L€€DQ- I_,ABS OF W1 SECT_^1_%ADQ =XZS_^1_%RTJ* MFWT_^1_%JMP* XYT2A_^1CHCK_!0_"0_^1_%LDA*_"SIZ_(UPDATE FITS INTO PRESENT_^1_%ADD- ZSEC+1,I_^1_%SUB-_"ZS+1,I_$TEXT BLOCK_^1_%ENQ_#0_^1_%MUI-_"NSIX,I_^1_%SUB-_"ZS,I_^1_%SAM ZSECA_^1_%JMP* (CHCK)_^1ZSECA ENA 7_,DOES NOT FIT. NO OF WORDS_^1_%JMP ERFF1_(TO UPDATE TOO LARGE_^1* THIS ROUTINE SETS UP NECESSARY PARAMETERS FOR_^1* READ IN FROM€€ MASS STORAGE FOR UPDATE._^1PRERD 0_"0_^1_%ENA_#0_*CLEAR SOME CELLS_^1_%STA-_"XXK+4,I_^1_%LDA-_"$C1_(SET BEG SECTOR NO FOR_^1_%ADD- MSINP,I_^1_%STA-_"XXK+5,I_#READ_^1_%LDA-_"$ED_(SET UP STARTING ADDRES_^1_%INA_#1_*FOR INTERMEDIATE READIN_^1_%STA-_"XXK+6,I_^1_%ENA 5_^1_%ADD- I_,SECT NO._^1_%STA-_"XXK+3,I_^1_%JMP*_"(PRERD)_^1_%SPC 2_^1XYT2A ENQ 0_^1_%ENA 7_^1_%RTJ READA3+UPDRE€€L_^1_%LDA- $F7_^1_%STA- $ED_^1_%ENQ 0_^1_%STQ- FILIN,I_^1_%JMP TRANF+UPDREL_^1_%EJT_]_^1_%SPC 2_^1_%EQU RPDREL(*-PROGIN)_^1_%SPC 2_^1**********************************************************************_^1*_]_^1*_**S,ORDINAL,VALUE,M_#MASS STG STMNT_^1*_**S,ORDINAL,VALUE_%CORE STG STMNT_^1*_]_^1**********************************************************************_^1_%SPC 2_^€€1RPUPDT LDA ENDK+RPDREL_^1_%STA- I_^1_%LDA- BUFF1C,I_^1_%STA* HOLD7_^1_%ENQ 0_^1_%ENA 2_,PPRK (FOR ORDINAL NUMBER)_^1_%RTJ READA4+RPDREL_^1_%INA -1_^1_%SAZ ISNUM-*-1_^1_%ENA 6_)NON-NUMERIC SYS DIR ORDINAL_^1ERR_"ENQ 2_,OUTPUT ERROR MESSAGE_^1_%JMP TRANF+RPDREL_^1ISNUM LDA- XXK,I_^1_%STA* ORDNL_(ORDINAL NUMBER_^1_%ENQ 0_^1_%ENA 2_,PPRK (FOR RP VALUE)_^1_%RTJ READA4+RPDR€€EL_^1_%INA -1_^1_%SAZ ISNUM1-*-1_^1ISTMNT ENA 6_,LO6 ERROR_^1_%JMP* ERR_^1ISNUM1 LDA- XXK,I_^1_%ALS 4_^1_%STA* VALUE_$VALUE OF RP_^1_%ARS 4_^1_%INA -16_^1_%SAM VALOK-*-1_^1_%JMP* ISTMNT_#L1 ERROR_^1VALOK ENQ 0_^1_%ENA 2_,PPRK (FOR M DESIGNATOR)_^1_%RTJ READA4+RPDREL_^1_%SAZ ISALF-*-1_^1_%JMP* ISTMNT_#L1 ERROR_^1ISALF LDA- XXK,I_^1_%STA* SAVEM_^1_%ENQ 0_^1_%ENA 2_^1_%€€RTJ READA4+RPDREL_^1_%LDA- XXK,I_^1_%EOR $12_*MORE THAN 8 CHARACTERS_^1_%SAZ OK-*-1_^1_%JMP* ISTMNT_'YES, ERROR_^1OK_#LDA =N$4DFF_%NO, CONTINUE_^1_%SUB* SAVEM_^1_%SAN CORRS-*-1_^1_%JMP* MASRES_^1CORRS LDA* ORDNL_^1_%INA -1_^1_%CLR Q_^1_%MUI- H4_^1_%STA* ORDNL_^1_%SUB- FMSE_%INDEX TO FIRST MASS STORAGE ENTRY_^1_%SAM ORDOK-*-1_^1IORD_!ENA 3_)ILLEGAL ORDINAL TO ENTRY IN SYS €€DIR_^1_%JMP* ERR_^1ORDOK LDQ* ORDNL_^1_%ADQ- SYSDIR_^1_%LDA =N$FF0F_"RP OUT_^1_%AND- (ZERO),Q_!$120X_^1_%ADD* VALUE_$$00W0_^1_%STA- (ZERO),Q_!$12WX_^1_%STA* VALUE_^1_%TRQ A_)CORE ADDRESS OF LOCATION TO UPDATE_^1_%CLR Q_^1_%DVI =N96_^1_%STA* NSECT+1_^1_%STQ* WPOS_^1_%RTJ* MSTUP_$UPDATE MASS STORAGE WORD_^1EXITT ENQ 0_,RPSA_^1_%JMP TRANF+RPDREL_^1*_]_^1MASRES LDA* ORDNL_^1_%I€€NA -1_^1_%CLR Q_^1_%MUI- H7_^1_%ADD- FMSE_%INDEX TO FIRST MASS STG ENTRY_^1_%STA* ORDNL_((ORDINAL-1)*7+(FMSE)_^1_%SUB- LENSYS_#LENGTH OF SYSTEM DIRECTORY_^1_%SAM MSENT-*-1_^1_%JMP* IORD_%L3 ERROR_^1MSENT JMP* ORDOK_$UPDATE REQUEST PRIORITY_^1ORDNL ADC 0_^1WPOS_!ADC 0_^1VALUE ADC 0_^1SAVEM NOP 0_^1HOLD7 ADC 0_^1*_]_^1MSTUP ADC 0_)UPDATE SYSTEM SECTOR + (NSEC+1)_^1_%CL€€R A_)WORD (WPOS) WITH_^1_%STA- ZSEC,I_#CONTENTS OF VALUE._^1_%LDA- SYSTEM,I_!SECTOR ON WHICH SYSTEM RESIDES_^1NSECT ADD =N0_^1_%STA- ZSEC+1,I_^1_%ENQ SETC_)SETC1_^1_%ENA 7_^1_%RTJ READA3+RPDREL_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_^1_%ENA 1_,MFREAD_^1_%RTJ READA4+RPDREL_^1_%LDA* VALUE_$VALUE TO STORE_^1_%LDQ* WPOS_%WORD POSITION IN SECTOR_^1_%STA* (HOLD7),Q_^1_%EN€€Q SETC_)SETC1_^1_%ENA 7_^1_%RTJ READA3+RPDREL_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_(MFWRIT_^1_%ENA 1_^1_%RTJ READA4+RPDREL_^1_%JMP* (MSTUP)_^1_%EJT_]_^1_%SPC 2_^1_%EQU CPYREL(*-PROGIN)_^1_%SPC 2_^1**********************************************************************_^1*_]_^1*_**T,LUIN,MODEIN,LUOUT,MODEOUT,MAXRECCT_^1*_]_^1*************************************€€*********************************_^1_%SPC 2_^1COPY_!LDA ENDK+CPYREL_^1_%STA- I_^1_%RTJ* PARAMS_'PPRK (FOR LUIN)_4**MSOS4.0*_^1_%SQZ SIB-*-1_^1_%INA -1_^1_%SAZ LUINOK-*-1_^1L1_#ENA 6_,L06 ERROR_:**MSOS4.0*_^1ERX_"ENQ 2_,OUTPUT ERROR MESSAGE_^1_%JMP TRANF+CPYREL_^1SIB_"LDA IOTAB+2+CPYREL_^1_%JMP* SIB1_^1LUINOK ENA 2_,FETCH INPUT LOGICAL UNIT_^1_%STA- ASAVA3,I_^1_%ENA 3_^1_€€%ENQ LOGUT_^1_%RTJ READA3+CPYREL_^1SIB1_!STA* LUIN_P62*1274_^1_%STA* MSFLG_(CLEAR 1ST TIME M.S. FLAG_^1_%LDA- $C0_'FIRST SCRATCH SECTOR MSB_^1_%STA* CZ_^1_%STA* C00_^1_%LDA- $C1_'FIRST SCRATCH SECTOR LSB_^1_%STA* CZ1_^1_%STA* C01_^1_%LDA- $F7_'LOWEST UNPROTECTED LOC -1_^1_%INA 1_^1_%STA SAPK_%ADDRESS OF INPUT BUFFER_^1_%STA SAPK1_^1_%LDA- $F6_'HIGHEST UNPROTECTED LOC + 1_^1_%S€€UB- $F7_'LOWEST UNPROTECTED LOC -1_^1_%INA -2_^1_%STA REQ+1_$REQUESTED NUMBER OF WORDS_^1_%STA* XXXXX_$UNPROTECTED BUFFER LENGTH_^1_%RTJ* PARAMS_'PPRK(FOR MODE IN)_2**MSOS4.0*_^1_%SAZ INMODK-*-1_^1_%JMP* L1_(L1 ERROR_^1INMODK LDA- XXK,I_^1_%SUB* ACH_*$41FF_>**MSOS4.0*_^1_%SAN NASC-*-1_^1_%LDA* ASC_N**MSOS4.0*_^1_%STA INMOD_(INPUT MODE IS ASCII_0**MSOS4.0*_^1_%JMP* CONTT_^1NASC€€_!SUB =N$100_^1_%SAZ BINRY-*-1_^1_%JMP* L1_^1BINRY STA INMOD_(INPUT MODE IS BINARY_/**MSOS4.0*_^1CONTT RTJ* PARAMS_'PPRK (FOR LUOUT)_3**MSOS4.0_^1_%SQZ SOBIN-*-1_^1_%INA -1_^1_%SAZ OULUOK-*-1_^1_%JMP* L1_(L1 ERROR_^1SOBIN LDA IOTAB+3+CPYREL O/P TO STANDARD O/P BINARY_^1_%JMP* SOB1_^1OULUOK ENA 4_,FETCH OUTPUT LOGICAL UNIT_^1_%STA- ASAVA3,I_^1_%ENA 3_^1_%ENQ LOGUT_^1_%€€RTJ READA3+CPYREL_^1SOB1_!STA LUOUT_(OUTPUT LOGICAL UNIT_0**MSOS4.0*_^1_%RTJ* PARAMS_'PPRK (FOR MODE OUT)_0**MSOS4.0_^1_%SAZ OUOK-*-1_^1_%JMP* L1_(L1 ERROR_^1OUOK_!LDA- XXK,I_^1_%SUB* ACH_*$41FF_>**MSOS4.0*_^1_%SAN NASC1-*-1_^1_%LDA* ASC_N**MSOS4.0*_^1_%STA OUMOD_(OUTPUT MODE IS ASCII_^1_%JMP* CONTA_^1NASC1 SUB* NASC+1_^1_%SAN 1_P**MSOS4.0*_^1_%JMP* BINRY1_K**MSOS4.0*_^1_%JM€€P* L1_(L1 ERROR_^1ACH_"NUM $41FF_(CHARACTER A_8**MSOS4.0*_^1ASC_"NUM $1000_(ASCII MODE BIT_5**MSOS4.0*_^1PARAMS 0_"0_P**MSOS4.0*_^1_%ENQ 0_,PPRK TO GET PARAMETERS_-**MSOS4.0*_^1_%ENA 2_P**MSOS4.0*_^1_%RTJ READA4+CPYREL_D**MSOS4.0*_^1_%JMP* (PARAMS)_I**MSOS4.0*_^1CLCODE 0_"0_P**MSOS4.0*_^1_%LDQ+ LOG1A,Q_J**MSOS4.0*_^1_%LDA- 8,Q_N**MSOS4.0*_^1_%ALS 5_P**MSOS4.0*_^1_%AND- 5_P**M€€SOS4.0*_^1_%INA -2_O**MSOS4.0*_^1_%JMP* (CLCODE)_I**MSOS4.0*_^1BINRY1 STA OUMOD_(OUTPUT MODE IS BINARY_^1CONTA RTJ* PARAMS_'PPRK(FOR MAXIMUM NBR. OF RECORDS)_!**MSOS4.0*_^1_%SQZ MAXREC-*-1_^1_%INA -1_^1_%SAZ MAXREC-*-1_^1_%JMP* L1_^1_%SPC 2_P**MSOS4.0*_^1CZ_#ADC 0_P**MSOS4.0*_^1C00_"ADC 0_P**MSOS4.0*_^1CZ1_"ADC 0_P**MSOS4.0*_^1C01_"ADC 0_P**MSOS4.0*_^1XXXXX ADC 0_P**MS€€OS4.0*_^1MSFLG NUM 0_P**MSOS4.0*_^1CNTR_!NUM 0_P**MSOS4.0*_^1LUIN_!ADC 0_,INPUT LOGICAL UNIT_1**MSOS4.0*_^1MAXREC LDA- XXK,I_$MAXIMUM NUMBER OF RECORDS_^1_%TCA A_^1_%STA RECOUN_K**MSOS4.0*_^1_%RTJ* PARAMS_'PPRK FOR NO, OF FILES_/**MSOS4.0_^1_%SQZ MAXFIL_L**MSOS4.0_^1_'INA -1_O**MSOS4.0_^1_%SAZ MAXFIL_L**MSOS4.0_^1_%JMP* L1_P**MSOS4.0_^1MAXFIL LDA- XXK,I_(MAXIMUM NO, OF FIL€€ES_0**MSOS4.0_^1_%TCA A_Q**MSOS4.0_^1_%SAN 1_P**MSOS4.0_^1_%ENA 1_P**MSOS4.0_^1_%STA FLCOUN_K**MSOS4.0*_^1CONT1 LDQ* LUIN_%INPUT LU_^1_%RTJ* CLCODE_K**MSOS4.0*_^1XMS_"SAN XMS1X-*-1_^1_%JMP* MS_^1XMS1X JMP* BINOUT_K**MSOS4.0*_^1MS_#LDA* LUIN_M**MSOS4.0*_^1_%SUB- $C2_*LIBRARY UNIT_^1_(SAN_%MSMS-*-1_^1MMS1_!LDA* CZ_+LIBRARY UNIT SETUP_^1_%STA MSBMSS_'SECTORS_^1_%LDA* CZ1_^1_%S€€TA LSBMS_^1_(JMP*_$MSMM_^1MSMS_!LDA* MSFLG_(1ST TIME THROUGH HERE_^1_%SAZ 1_,YES_^1_%JMP* MMS1_)NO,PICKUP NEXT SECTOR NO._^1_%ENA 0_^1_%STA* CZ_+SCR UNIT SET UP SECTORS_^1_%STA MSBMS_L**MSOS4.0*_^1_(ENA_%1_^1_%STA* CZ1_^1_%STA MSBMS_L**MSOS4.0*_^1MSMM_!RAO MZINP_L**MSOS4.0*_^1_%ENA 96_(96 WORD INPUT RECORD ONLY_^1_%STA REQ1_M**MSOS4.0*_^1*_]_^1BINOUT LDQ LUOUT_(OUTPUT LU_;€€**MSOS4.0_^1_%RTJ* CLCODE_K**MSOS4.0_^1XMS1_!SAZ MS1-*-1_^1_%JMP* RGOX_^1MS1_"LDA LUOUT_(IS IT SCRATCH OR_3**MSOS4.0*_^1_%SUB- $C2_*LIBRARY UNIT_^1_%SAN MS1MS-*-1_^1MMS2_!LDA* C01_Q62*1274_^1_%STA LSBMS1_K**MSOS4.0*_^1_%SUB =XSECTOR_L62*1274_^1_%SAM MMS2OK_N62*1274_^1_%ENA 21_+L21 EXCEED MAXSEC ON LIBRARY DISK_$62*1274_^1_%JMP_!ERX_P62*1274_^1MS1MS LDA* MSFLG_(1ST TIME THRO€€UGH HERE_^1_%SAN 2_S62*1274_^1_%ENA 1_S62*1274_^1_%STA* C01_Q62*1274_^1_%LDA* C01_Q62*1274_^1_%STA LSBMS1_N62*1274_^1MMS2OK LDA* C00_Q62*1274_^1_%STA MSBMS1_N62*1274_^1*_]_^1RGOX_!ENA 1_^1_%STA* MSFLG_L**MSOS4.0*_^1_%LDA* LUIN_^1_%AND- 9_)$7F MASK_^1_%ADD* INMOD_$ASCII=1000,BINARY=0_^1_%STA REQ_N**MSOS4.0*_^1_%LDA* LUOUT_^1_%AND- 9_)$7F MASK_^1_%ADD* OUMOD_$ASCII=1000,BINARY=€€0_^1_%STA* REQ1_P62*1274_^1RGO_"LDA REQ_*PICK UP REQUEST CODE_0**MSOS4.0_^1_%ALS 3_^1_%SAP RGO1_)IF BINARY, DON'T CLEAR BUFFER_^1_%CLR A_^1_%ENQ 80_+IF ASCII, CLEAR SPACE FOR 160 CHARACTERS_^1RGOLOP INQ -1_^1_%STA (SAPK),Q_I**MSOS4.0*_^1_%SQZ RGO1_)AT END - KEEP GOING_^1_%JMP* RGOLOP_'NO - CLEAR ANOTHER ONE_^1RGO1_!RTJ* FREAD_$READ FROM INPUT DEVICE_^1_%RAO* RECOUN_^1_%SAM €€ RGO2_M**MSOS4.0_^1_%JMP* RGOA_)NO, ERROR ON READ CONTINUE_(**MSOS4.0_^1RGO2_!ALS 1_,ERROR AND SHORT READ(EOF)_***MSOS4.0_^1_%SAP RGOB_M**MSOS4.0*_^1_%LDQ* LUIN_M**MSOS4.0_^1_%LDQ LOG1A,Q_%CHECK FOR END OF FILE BIT_***MSOS4.0_^1_%LDA- 12,Q_)SET FOR INPUT UNIT_1**MSOS4.0_^1_%ALS 4_P**MSOS4.0_^1_%SAP RGOB_M**MSOS4.0_^1_%RTJ WRTEOF_'YES,WRITE AN END OF FILE ON OUTPUT **MSOS4.0€€*_^1_%RAO* FLCOUN_'INCREASE NO, OF FILES ENCOUNTERED_!**MSOS4.0*_^1_%SAM RGOB_M**MSOS4.0*_^1_%SAZ 1_Q**MSOS4.0_^1_%RAO* FILES_(INCREASE NO. OF FILES TRANSFERRED_"**MSOS4.0_^1_%ENQ -1_+NO ERROR ON EOF WRITE_.**MSOS4.0*_^1_%STQ* QSAV_)SAVE WRITE END OF FILE INDICATOR_"**MSOS4.0_^1_%JMP* RGOA_M**MSOS4.0*_^1RGOB_!JMP* REXIT_(YES,EXIT_^1RGOA_!LDA* (SAPK)_'IS THIS RECORD AN *F CARD_**€€*MSOS4.0*_^1_%EOR =N$2A46_J**MSOS4.0_^1_%SAN RGOE_M**MSOS4.0*_^1_%ENQ 1_P**MSOS4.0_^1_%LDA* (SAPK),Q_$TEST FOR *F FOLLOWED BY ONE_(**MSOS4.0_^1_%EOR =N$2020_%WORDS OF BLANKS_4**MSOS4.0_^1_%SAN 1_P**MSOS4.0*_^1_%JMP* REXIT_(YES, EXIT PRINT NO. OF REC. TRANS. **MSOS4.0*_^1_%EOR =N$6F6B_%IS THIS AN *FOK STATEMENT_***MSOS4.0*_^1_%SAN RGOE_^1_%LDA =N$2020_J**MSOS4.0*_^1_%STA* (€€SAPK),Q_$STORE BLANKS IN INPUT BUFFER_'**MSOS4.0*_^1RGOE_!RAO CZ1_^1RGOF_!LDQ* QSAV_)WRITTING EOF_7**MSOS4.0_^1_%SQP RGOG_M**MSOS4.0_^1_%RAO* QSAV_)YES CLEAR EOF WRITE FLAG_+**MSOS4.0_^1_%RAO C01_N**MSOS4.0*_^1_%JMP* RGOC_M**MSOS4.0*_^1RGOG_!LDA* MZINP_(NO_A**MSOS4.0*_^1_%SAZ RGOA1-*-1_^1_%ENA 96_(WAS MASS STG INPUT._^1_%JMP* RGOA2_^1RGOA1 LDQ* SAPK_%ADDR OF INPUT BUFFER_^1_%€€ADQ XXXXX_L**MSOS4.0*_^1_%INQ -2_^1_%LDA- 1,Q_'FETCH LAST WORD OF BUFFER_^1_%SUB* SAPK_%BUFFER FWA_^1RGOA2 STA* REQ1+1_#STORE AS LENGTH OF OUTPUT RECORD_^1_%RTJ* FWRITE_^1_%RAO C01_N**MSOS4.0*_^1_%SAM REXIT_(ERROR ON WRITE_^1_%RAO CNTR_)NO,BUMP RECORD COUNTER_-**MSOS4.0*_^1RGOC_!LDA* RECOUN_K**MSOS4.0*_^1_%SAZ REXIT-*-1_^1_%LDA* FLCOUN_L**MSOS4.0_^1_%SAZ REXIT_M**MSOS4.0_^1€€_%JMP CONT1_L**MSOS4.0*_^1REXIT JMP* TIXE_)PRINT NUMBER OF RECORDS TRANSFERED **MSOS4.0*_^1*_]_^1QSAV_!NUM 0_P**MSOS4.0_^1RECOUN NUM 0_P**MSOS4.0*_^1FLCOUN NUM 0_Q**MSOS4.0_^1FILES NUM 0_Q**MSOS4.0_^1INMOD ADC 0_)INPUT MODE (ASCII=1000,BINARY=0)_^1LUOUT ADC 0_)OUTPUT LOGICAL UNIT_^1OUMOD ADC 0_)OUTPUT MODE (ASCII=1000,BINARY=0)_^1MZINP ADC 0_^1AUNPIO ADC UNPIO_(ADD€€RESS OF UNPROTECTED I/O COUNTER_^1XSWAPK ADC SWAPCK_^1*_]_^1*_]_^1FWRITE ADC 0_^1_%LDA SWTCH_L**MSOS4.0*_^1_%SAM FREAD1_K**MSOS4.0*_^1_%LDQ =XCOSYCK_$IS THE COSY DRIVER_1**MSOS4.0*_^1_%ENA 3_,BEING USED ON THIS JOB_-**MSOS4.0*_^1_%RTJ READA3+CPYREL_D**MSOS4.0*_^1_%RTJ JKILL+CPYREL_!TEST FOR JOB KILL_1**MSOS4.0*_^1FREAD1 RAO* (AUNPIO)_$SET UNPIO TO INHIBIT SWAPPING_%**MSOS4.€€0*_^1_%RTJ- ($F4)_^1_%NUM $4C00,0,0_^1REQ1_!NUM 0,96_^1SAPK1 NUM 0_^1MSBMS1 NOP 0_^1LSBMS1 NOP 0_^1_%LDA* REQ1-1_^1_%SAZ 1_^1_%JMP* *-2_^1_%RTJ* (XSWAPK)_$DECREMENT UNPIO AND RESTART DRCORE_^1_%LDA* REQ1_%TEST FOR ERROR_^1_%JMP* (FWRITE)_^1*_]_^1FREAD ADC 0_^1_%LDA SWTCH_L**MSOS4.0*_^1_%SAM FWRIT1_K**MSOS4.0*_^1_%LDQ =XCOSYCK_$IS THE COSY DRIVER_1**MSOS4.0*_^1_%ENA 3_,€€BEING USED ON THIS JOB_-**MSOS4.0*_^1_%RTJ READA3+CPYREL_D**MSOS4.0*_^1_%RTJ JKILL+CPYREL TEST FOR JOB KILL_2**MSOS4.0*_^1FWRIT1 RAO* (AUNPIO)_$SET UNPIO TO INHIBIT SWAPPING_%**MSOS4.0*_^1READGO RTJ- ($F4)_^1_%NUM $4800,0,0_H**MSOS4.0*_^1REQ_"NUM 0_^1_%ADC 0_)BUFFER SIZE_^1SAPK_!NUM 0_^1MSBMS NOP 0_^1LSBMS NOP 0_^1_%LDA* REQ-1_^1_%SAZ 1_^1_%JMP* *-2_^1_%RTJ* (XSWAPK)_$D€€ECREMENT UNPIO AND RESTART DRCORE_^1_%LDA* REQ_'TEST FOR ERROR_^1_%JMP* (FREAD)_^1WRTEOF 0_"0_P**MSOS4.0*_^1_%LDA* MSBMS1_K**MSOS4.0*_^1_%STA* EOFMSB_K**MSOS4.0*_^1_%LDA* LSBMS1_K**MSOS4.0*_^1_%STA* EOFLSB_K**MSOS4.0*_^1_%LDA* REQ1_M**MSOS4.0*_^1_%STA* REQ2_)STORE OUTPUT MODE FOR MOTION REQ_"**MSOS4.0*_^1NOSLEW RTJ JKILL+CPYREL TEST FOR JOBKILL_3**MSOS4.0*_^1_%RAO* (AUNPIO)_$SET €€UNPIO TO INHIBIT SWAPPING_%**MSOS4.0*_^1_%RTJ- ($F4)_L**MSOS4.0*_^1_%NUM $1C00,0,0_H**MSOS4.0*_^1REQ2_!NUM 0_P**MSOS4.0*_^1_%NUM $2000_L**MSOS4.0*_^1EOFMSB NOP 0_P**MSOS4.0*_^1EOFLSB NOP 0_P**MSOS4.0*_^1_%LDA* REQ2-1_K**MSOS4.0*_^1_%SAZ 1_P**MSOS4.0*_^1_%JMP* *-2_N**MSOS4.0*_^1_%RTJ* (XSWAPK)_I**MSOS4.0*_^1_%LDA* REQ2_M**MSOS4.0*_^1_%JMP* (WRTEOF)_I**MSOS4.0*_^1TIXE_#LDA_%CNT€€R_^1_%STA- ASAVA3,I_^1_%LDQ* FILES_M**MSOS4.0_^1_%STQ- QSAVA3,I_J**MSOS4.0_^1_%ENQ 0_^1_%ENA 3_^1_%RTJ READA3+CPYREL_^1_%EJT_]_^1_%EQU PARAD(REMOV)_^1_%EQU PABA(REMOV)_^1_%EQU PAND(PABA+1)_^1_%EQU DBASE(PAND+1)_^1_%EQU ONEBIT($23)_^1_%EQU ZROBIT($33)_^1SIXTN EQU SIXTN(ONEBIT+4)_^1_%EQU LPMSK(2)_^1_%EQU NZERO($12)_^1_%EQU FLCTR(27)_^1_%EQU_!CP1FG($B2)_^1_%EQU SSEC(HR)€€_^1******_]_^1*_$*A,ORD,S,N,D,C,L,P,M PROCESSOR_^1*_]_^1*_]_^1******_]_^1_%EQU AN1REL(*-PROGIN)_^1AINSN LDA ENDK+AN1REL_%LOCATION OF DATA AREA TRELATIVE TO_^1_%STA- I_-THIS PROGRAM INTO I_^1_%ENA -1_+FORCE FLAG FOR_^1_%STA- INTMP+1,I_$INSERT PROG_^1_%STA- RA,I_M**MSOS4.0*_^1_%ENA 0_P**MSOS4.0*_^1_%STA- SAT,I_L**MSOS4.0*_^1_%STA- WORD,I_K**MSOS4.0*_^1_%STA- REMOV,I_J**MSOS4.0_€€^1_%STA- REMFIL,I_I**MSOS4.8_^1_%STA- UPDATE,I_I**MSOS4.0_^1*_]_^1***_"S PARAMETER_^1*_]_^1_%RTJ PRKAD_(PPRK GET ORDINAL FROM CALL_^1_%SQN AINSNA_^1AINSNB ENA 6_,OMITTED SET UP ERROR_^1EREX1 ENQ 2_-GOTO_^1_%JMP TRANF+AN1REL_#COMMON ERROR EXIT_^1AINSNA INA -1_+TEST FOR NUMERIC_^1_%SAZ 1_^1_%JMP* AINSNB_'NOT NUMERIC_^1_%LDA- XXK,I_(NUMERIC GET ORDINAL_^1_%STA* AORNL_(SAVE IT_€€^1_%ENQ 0_,CALC INDEX IN SYS DIR TO THIS MM PROGRAM_^1_%INA -1_+ORD-1_^1_%MUI- LPMSK+3_'TIMES 7_^1_%ADD- $E7_,PLUS INDEX TO FIRST MS ENTRY_^1_%STA- ORD,I_+SAVE IT_^1_%SUB- $E6_*ORDINAL NUMBER EXCEED MAXIMUN_)61*1291_^1_%SAM GETS_P61*1291_^1_%JMP* AINSNB_'YES,ERROR NO. 6_761*1291_^1GETS_!RTJ* PRKAD_(GET S PARAMETER_661*1291_^1_%SQN AINSNC_'OMITTED_^1_%JMP* AINSNB_'GO TO ERROR S€€ETTING_^1AINSNC INA -1_+NO, IS IT NUMERIC_^1_%SAZ AINSND_^1_%JMP* AINSNB_'ERROR IF NOT NUMERIC_^1AINSND LDA- XXK,I_(GET VALUE OF S_^1_%SAP AINSNS_'MUST BE POSITIVE_^1_%JMP* AINSNB_^1AINSNS STA* STPT_)SAVE START OF PARTITIONS_^1_%SUB =XLSTPRT_$IS STARTING PARTITION NO._)**MSOS4.0**_^1_%SAM PROTEK_'PARTITION NUMBER EQUAL TO OR LES_"**MSOS4.0*_^1_%SAZ PROTEK_'THAN LAST PARTITION€€ SPECIFIED_%**MSOS4.0*_^1_%LDA* STPT_)YES,CHECK IF UNPROTECTED_+**MSOS4.0_^1_%INA -16_*PARTITION_:**MSOS4.0_^1_%SAZ 1_P**MSOS4.0*_^1_%JMP* AINSNB_'NOT UNPROTECTED PART. ISSUR ERROR_"*MSOS4.0*_^1_%ENQ 10_P*MSOS4.0*_^1_%LDA- ($E9),Q_%IS UNPROTECTED IN PART1_-*MSOS4.0*_^1_%SAN 1_Q*MSOS4.0*_^1_%JMP* AINSNB_'NO,ERROR_<*MSOS4.0*_^1_%LDA- BUFF1B,I_I**MSOS4.0*_^1_%STA- PABA,I_'AS START€€ING BASE_4*MSOS4.0*_^1_%LDA- $F6_*SET LAST LOC. OF UNPROTECTED_'*MSOS4.0*_^1_%STA- PAND,I_'STORE LWA ADDRESS FOR LOADER_'**MSOS4.0*_^1*_]_^1***_"N PARAMETER_^1*_]_^1PROTEK RTJ* PRKAD_(GET N PARAMETER_5*MSOS4.0*_^1_%SQN AINSNE_^1_%JMP* AINSNG_'NO N SET TO BE 1_^1AINSNE INA -1_+TEST FOR_^1_%SAZ AINSNF_(NUMERIC_^1_%ENA 6_/NOT NUMERIC_^1_%JMP* EREX1_*IS ERROE_^1AORNL NUM 0_^1AIN€€SNF LDA- XXK,I_(GET N(NUMBER OF PARTITIONS)_^1_%INA -1_,MUST BE_^1_%SAP 1_.GREATER THAN ZERO_^1AINSNG ENA 0_,IF LT 1 SET TO BE ONE_^1_%INA 1_^1_%STA* NOPT_)NUMBER OF PARTITIONS_^1_%LDA* STPT_)IS STARTING PARTITION THE_***MSOS4.0*_^1_%INA -16_*UNPROTECTED PARTITION_.**MSOS4.0*_^1_%SAN 1_P**MSOS4.0*_^1_%JMP* AINSHC_'YES_@**MSOS4.0*_^1_%LDA* NOPT_M**MSOS4.0*_^1_%ADD* STPT_)CHECK€€ IF PARTITIONS_^1_%SUB =XLSTPRT_H**MSOS4.0**_^1_%INA -1_O**MSOS4.0_^1_%SAM AINSNH_'PARTITION NUMBER OK_1*MSOS4.0*_^1_%SAZ AINSNH_K**MSOS4.0_^1_%JMP* AINSNB_'OR 1 AND 15. IF NONE OUTPUT ERROR_"*MSOS4.0*_^1AINSNH LDQ* STPT_)GET START OF_^1_%LDA PARTBL,Q_%PARTITION_^1_%STA- PABA,I_)STORE FOR LOADER_^1_%ADQ* NOPT_*GET LAST PARTITION +1_^1_%SUB =XLSTPRT_H**MSOS4.0**_^1_%INA -1_O*€€*MSOS4.0_^1_%SQN AINSHA_(IF LAST Q IS 0_^1_%LDA LSTLOC_'Q IS 0 USE LSTLOC FOR LWAD+1_^1_%JMP* AINSHB_^1AINSHA INQ 16_+RESTORE POINTER_^1_%LDA PARTBL,Q_$GET ADDR OF NEXT PARTITION FOR LWAD+1_^1AINSHB STA- PAND,I_'LWAD+1 OF END PARTITION_^1*_]_^1***_"D PARAMETER_^1*_]_^1AINSHC RTJ* PRKAD_(GET THE D PARAMETER_0**MSOS4.0*_^1_%SQN AINSNI_'IS D SET_^1_%ENA 0_-NO SET DATA BASE TO Z€€ERO_^1_%JMP* AINLPA_^1STPT_!NUM 0_^1NOPT_!NUM 0_^1AINTM1 NUM 0_^1AINSNI INA -1_+DATA BASE REQUESTED_^1_%SAN AINSNJ_^1_%JMP* AINSNB_'NUMERIC IS ERROR_^1AINSNJ ENQ 17_O**MSOS4.0*_^1_%LDA- ($E9),Q_%SYSTEM DATA PRESENT_0**MSOS4.0*_^1_%SAN AINSNK_K**MSOS4.0*_^1_%ENA 19_^1_%JMP* EREX1_L**MSOS4.0*_^1AINSNK LDA- H8000_(YES,SET BIT 15 IN THIRD WORD_'**MSOS4.0*_^1AINLPA STA- DBASE,I_€€%OF LOADER INFORMATION BUFFER_'**MSOS4.0*_^1_%LDA* ALN2AD_^1_%RTJ MMADDR+AN1REL_^1_%STQ MSBPRC+AN1REL_^1_%STA LSBPRC+AN1REL_^1_%JMP BRIPR1+AN1REL_^1ALN2AD ADC ALN2-LBDT_^1PRKAD 0_"0_,SET UP ROUTINE FOR PROCESSING_^1_%ENQ 0_-*A PARAMETERS_^1_%ENA 2_^1_%RTJ READA4+AN1REL_^1_%JMP* (PRKAD)_^1*_]_^1*_]_^1***_"C PARAMETER_^1*_]_^1_%EQU ALNREL(*-PROGIN)_^1ALN2_!RTJ* PRKAD2_'GET €€C PARAM_^1_%SQN AINSNM_^1_%ENA 0_,NO C PARAM SET COMMON BASE_^1_%JMP* AINSNL_(WORD TO ZERO_^1AINSNM ENQ 16_+SYSTEM COMMON PRESENT_.**MSOS4.0*_^1_%LDA- ($E9),Q_J**MSOS4.0*_^1_%SAN AINSNR_^1_%ENA 13_^1_%JMP* EREX_*GIVE BACK ERROR_^1AINSNR LDA- H4000_L**MSOS4.0*_^1AINSNL EOR- DBASE,I_J**MSOS4.0*_^1_%EOR =N$1800_J**MSOS4.0*_^1_%STA- DBASE,I_J**MSOS4.0*_^1*_]_^1***_"L PARAMETER_^1€€*_]_^1_%RTJ* PRKAD2_'GET L PARAMETER_^1_%SQN AINSNO_^1_%ENA 0_,NO L SET = TO ZERO_^1_%JMP* AINSNN_^1AINL_!NUM 0_^1AINSNO INA -1_+CHECK FOR NUMERIC_^1_%SAN AINSNN_'NOT NUMERIC_^1_$ENA_!6_^1EREX_!ENQ 2_^1_%JMP TRANF+ALNREL_^1AINSNN STA* AINL_)SAVE L INDICATOR_^1_%ENA 1_,GIVE SET BASES_!A HAS LOADER COMMAND CODD_^1_%LDQ- I_,GET PROG BASE_#Q HAS BASE ADDR OF PARAM_^1_%INQ PARA€€D_)PLUS DIST TO PARAD PACKET_^1_%RTJ* AINLDR_^1AINSNY ENQ 0_^1_%ENA 9_,GIVE RELOCATABLE LOAD_^1_%RTJ READA3+ALNREL FUNCTION TO LOADER_^1AINSYA LDA* AINL_^1_%SAN 1_^1_%JMP* AINSNZ_)NO L_^1_%LDA IOTAB+2+ALNREL_^1_%STA AINTM3_K**MSOS4.0*_^1_%LDA- $FD_^1_%STA IOTAB+2+ALNREL_^1_%ENQ 0_^1_%ENA 4_^1_%RTJ READA4+ALNREL SEND OUT_^1_%NUM $2A20_** CR LF TO_^1_%NUM $2020_^1_%NUM €€ $0D0A_+GET NEW LU FROM USER_^1_%RTJ* *+1_*GET_^1AINSYB 0_#0_,ABSOLUTE ADDRESS_^1_%LDA* *-1_,OF BUFFER_^1_%ADD* ANBUFA_*TO READ INTO_^1_%STA- ASAVA4,I_*INTO A_^1_%ENA 3_,NUMBER OF WORDS TO READ_^1_%STA- WS,I_*SAVE IN WS_^1_%ENA 3_,ISSUE READ_^1_%ENQ 0_^1_%RTJ READA4+ALNREL_^1_%LDQ- ASAVA4,I_%GET INPUT BUFFER ADDRESS TOQ_^1_%LDA- (ZERO),Q_^1_%SUB* ASTKT_(IS IT *K_^1_%SAZ AINSRA€€_'YES_^1_%SUB* ASTKT+1_%NO CHECK FOR *T_^1_%SAZ AINSRB_^1_%ENA 4_,ERROR NEITHER_^1_%JMP* EREX_)*K OR *T_^1ASTKT NUM $2A4B_(*K CONSTANT_^1_%NUM $0009_(CHECK FOR *T IF NOT ASTERISK_^1AINSRB LDA* AINTM3_'RESTORE_^1_%STA IOTAB+2+ALNREL_!INPUT LU_^1_%JMP* AINSNZ_'IT IS T GO TO TERMINATE_^1AINSRA LDA- 2,Q_*IT IS *K GET NEW LU_^1_%AND- NZERO+8_%MASK OFF LO8B_^1_%ALS 8_^1_%INA -$3€€9_)MASK OUT ENCODING CECK FOR LEGAL_^1_%SAM AINSRC_'NEG IS LEGAL_^1_%ENA 6_,NOT LEGAL_^1_%JMP* EREX_^1PRKAD2 0_"0_,SET UP ROUTINE FOR PROCESSING_^1_%ENQ 0_^1_%ENA 2_^1_%RTJ READA4+ALNREL_^1_%JMP* (PRKAD2)_^1AINSRC INA 9_^1_'MUI =N10_^1_%STA* AINTM2_^1_%LDQ- ASAVA4,I_^1_%LDA- 2,Q_^1_%AND- LPMSK+8_'MASK OFF HO8B_^1_%SUB- LPMSK+8_%CHECK FOR FF_^1_%SAN AINSRX_^1_%LDA* AINTM2_'ON€€LY ONE DIGIT_^1_%JMP* AINSRE_^1AINSRX ADD- LPMSK+8_^1_%INA -$39_^1_%SAM AINSRD_^1AINSRW ENA 6_,OUT OF RANGE_^1_%JMP* EREX_)GO TO ERROR_^1AINSRD INA 9_,RESTORE NUMBER_^1_%SAP AINSRF_^1_%JMP* AINSRW_^1AINSRF ADD* AINTM2_'CONVERT_^1AINSRE STA- XXK,I_(STORE L.U._^1_%TRA Q_,CHECK IF LOGICAL UNIT_.**MSOS4.0*_^1_%LDQ+ LOG1A,Q_J**MSOS4.0*_^1_%LDA- EREQST,Q_I**MSOS4.0*_^1_%AND- H2_+C€€AN THIS LOGICAL UNIT BE READ_%**MSOS4.0*_^1_%SAN CORELU_'BY UNPROTECTED PROGRAMS_,**MSOS4.0*_^1_%JMP* AINSRW_K**MSOS4.0*_^1CORELU LDQ- XXK,I_(YES,IS THIS THE CORE ALLOCATOR_$**MSOS4.0*_^1_%INQ -1_+LOGICAL UNIT_7**MSOS4.0*_^1_%SQN NOLUS_L**MSOS4.0*_^1_%JMP* AINSRW_K**MSOS4.0*_^1NOLUS LDA- XXK,I_(NO,IS LOGICAL UNIT NO._-**MSOS4.0*_^1_%SUB =XNUMLU_%GREATER THAN TOTAL NUMBER_***MS€€OS4.0*_^1_%SAZ LUCKOK_'OF LOGICAL UNITS IN_0**MSOS4.0*_^1_%SAM LUCKOK_'THE SYSTEM_9**MSOS4.0*_^1_%JMP* AINSRW_K**MSOS4.0*_^1LUCKOK LDA- XXK,I_(NO,LEGAL L.U. CONTINUE LOADING_$**MSOS4.0*_^1_%STA IOTAB+2+ALNREL_^1_%JMP* AINSNY_'CONTINUE LOADING_^1ANBUFA ADC AINBUF-AINSYB_^1AINBUF BZS AINBUF(3)_^1AINLDR 0_"0_^1_%STA- ASAVA3,I_^1_%STQ- QSAVA3,I_^1_%ENA 9_^1_%ENQ AINLOD_^1_%RTJ €€READA3+ALNREL_^1_%JMP* (AINLDR)_^1AINSNZ ENA 2_,GIVE PROGRAM ENTRY POINT LINK TO LOADER_^1_%RTJ* AINLDR_^1_%SQM AINSZA_^1_%JMP* AINSZD_'NO UNPATCHED EXTERNALS_^1AINSZA ENQ 7_,CHECK FOR CREP1 TABLE_.**MSOS4.0*_^1_%LDA- ($E9),Q_J**MSOS4.0*_^1_%SAZ AINSZB_(NO CREP 1_^1_%ENA 3_-YES CREP1_^1_%RTJ* AINLDR_'GIVE LINK TO CREP1 TABLE_^1_%SQM AINSZB_^1_%JMP* AINSZF_'NO UNPATCHED EXTER€€NALS_-**MSOS4.0*_^1AINSZB ENA 5_,LINK TO CREP 0_3**MSOS 4.1**_^1_%RTJ* AINLDR_I**MSOS 4.1**_^1AINSZF STQ* AINTM4_'SAVE UNPATCHED INDICATOR_)**MSOS 4.1**_^1_%RTJ PRKAD2_'GET P PARAMETER_2**MSOS 4.1**_^1_%SQN 1_P**MSOS4.0*_^1_%JMP* AINSZG_'NO P, CONTINUE_3**MSOS 4.1**_^1_%INA -1_+NUMERIC_<**MSOS4.0*_^1_%SAN 3_P**MSOS4.0*_^1_%ENA 6_,YES ERROR_:**MSOS4.0*_^1_%JMP EREX_M**MSOS4.0€€*_^1_%ENA 10_+NO, LINK TO THE PROGRAM LIBRARY_#**MSOS4.0*_^1_%RTJ* AINLDR_K**MSOS4.0*_^1_%SQM PRTUNP_K**MSOS4.0*_^1_%JMP* AINSZD_'NO UNPATCHED EXTS AFTER P.L. LINK_!**MSOS4.0*_^1PRTUNP ENA 7_P**MSOS4.0*_^1_%RTJ* AINLDR_K**MSOS4.0*_^1_%SQP 1_P**MSOS4.0_^1_%JMP* PRTUNP_'REMAINING UNPATCHED EXTS_+**MSOS4.0*_^1_%JMP* AINSZD_^1AINTM2 NUM 0_^1AINTM3 NUM 0_^1AINTM4 NUM 0_N**MSOS 4.€€1**_^1*_]_^1***_"M PARAMETER_^1*_]_^1AINSZG LDA* AINTM4_'WERE THERE UNPATCHED EXTERNALS_"**MSOS 4.1**_^1_%SAP AINSZD_'NO_?**MSOS 4.1**_^1_%JMP* PRTUNP_'YES_>**MSOS 4.1**_^1AINSZD RTJ PRKAD2_'GET M PARAMETRR_^1_%SQN AINSNQ_^1_%ENA 0_,NO M SET TO 0_^1_%JMP* AINSNP_^1AINSNQ INA -1_+CHECK FOR NUMERIC_^1AINSNP SAZ AINSZE_(0IS NO M_^1_%ENA 6_/YES SO_^1_%RTJ* AINLDR_+PRINT MEMORY MA€€P_^1AINSZE LDQ- ORD,I_^1_%ADQ- $EB_^1_%STQ ORNL_M**MSOS4.0_^1AINSNW IIN 0_,CHECK THREAD OF ENTRY_^1_%LDA- 2,Q_^1_%SAZ AINSNV_^1_%EIN 0_^1_%NOP 0_^1_%JMP* AINSNW_'BUSY ALLOW IR TRY AGAIN_^1AINSNV SET A_,SET THREAD OF ENTRY_^1_%STA- 2,Q_+BUSY_^1_%EIN 0_^1_%LDA- 6,Q_^1_%STA SECO_)OLD PROG. SECTOR NO._/**MSOS4.0_^1_%LDA- 4,Q_^1_%STA* LNGHO_(OLD LENGTH IN WORDS_^1_%SAN 1_,CHECK€€ FOR ZERO LENGTH_^1_%JMP* AINSUA_(IF ZERO SET IN NEW LENGTH_^1_%ENQ 0_^1_%DVI- NSIX,I_'L/96 TO A, REMAINDER IN Q_^1_%SQZ 1_,MORE THAN EVEN 96 WORDS_^1_%INA 1_,ROUND IT UP BY ONE SECTOR_^1_%STA- WS,I_^1_%MUI- NSIX,I_'CONVERT BACK TO WORDS_^1_%LDQ* ORNL_)LOCATION OF DIRECTORY ENTRY_^1_%SUB- NOWLB,I_(NEW PROG SMALLER THAN OLD_^1_%STA* AINTM3_^1_%SAM 1_P**MSOS4.0*_^1_%JMP* AINSNU_'€€YES, USE SAME LOCATION_-**MSOS4.0*_^1AINSUA ENQ 0_P**MSOS4.0*_^1_%LDA- NOWLB,I_%CONVERT NEW LENTH TO SECTORS_'**MSOS4.0*_^1_%DVI- NSIX,I_'FOR S.A.T SEARCH_3**MSOS4.0*_^1_%SQZ 1_P**MSOS4.0*_^1_%INA 1_P**MSOS4.0*_^1_%STA- FILIN,I_%SET NUMBER OF FILES REQUIRED_'**MSOS4.0*_^1_%TCA A_,COMPLEMENT SECTOR LENGTH TO_(**MSOS4.0*_^1_%STA- UPDL,I_'BE USED IN BLOCK SEARCH_,**MSOS4.0*_^1_%LD€€A- SECS+1,I_$SET ADDRESS FOR FIRST SAT SECTOR_"**MSOS4.0*_^1_%STA- SECX+1,I_I**MSOS4.0*_^1_%ENQ RSAT1_L**MSOS4.0*_^1_%ENA 1_P**MSOS4.0*_^1_%RTJ READA4+ALNREL_D**MSOS4.0*_^1_%ENQ 0_P**MSOS4.0*_^1_%ENA 5_P**MSOS4.0*_^1_%RTJ READA3+ALNREL_D**MSOS4.0*_^1_%LDQ* ORNL_)STORE BEGINNING SECTOR NUMBER_%**MSOS4.0*_^1_%STA- 6,Q_*IN DIRECTORY ENTRY_1**MSOS4.0*_^1_%ADD- FILIN,I_"---ADD NUM€€BER OF SECTORS FOR THIS FILE *MSOS4.0*_^1_%SUB- $C1_*START OF SCRATCH EXCEEDED_***MSOS4.0*_^1_%SAM AINSNU_K**MSOS4.0*_^1_%SAZ AINSNU_K**MSOS4.0*_^1_%ADD- $C1_.ADJUST NEW_^1_%STA- $C1_.ADJUST NEW_^1AINSNU LDA- NOWLB,I_'PUT LENGTH_^1_%STA- WS,I_^1_%STA- 4,Q_+INTO DIRECTORY_^1_%LDA- (ZERO),Q_(SET D BIT_^1_%AND- ZROBIT+14_'IN I/O CALL_^1_%EOR- ONEBIT+14_)IN SYSTEM_^1_%STA- (ZERO),Q_€€+DIRECTORY_^1_%LDA- PABA,I_'ADDR OF START OF PARTITION_^1_%STA- 1,Q_+TO DIRECTORY_^1_%LDA- 6,Q_*SECTOR TO_^1_%STA- ASAVA3,I_%MOVE TO_^1_%LDA- SSEC,I_'CHECK IF LOAD IN CORE_.**MSOS4.0_^1_%SAN 1_P**MSOS4.0_^1_%JMP* INCORE_K**MSOS4.0_^1_%STA- QSAVA3,I_$SECTOR TO MOVE FROM_0**MSOS4.0_^1_%LDA- FILIN,I_%GET NO. OF SECTORS_1**MSOS4.0*_^1_%STA- WS,I_)AND STORE FOR MOVE OPERATION_'**MSOS4.€€0*_^1_%ENA 9_,SUBROUTINE TO_^1_%ENQ MOVMM_)MOVE LOADED PROGAM_^1_%RTJ READA3+ALNREL_!TO PERM MASS STORAGE_!(MASS MEM TO MASS MEM_^1_%JMP* SETDIR_K**MSOS4.0_^1INCORE LDA- TEMPF7,I_$POINTER TO START OF BUFFER_***MSOS4.0_^1_%INA 1_P**MSOS4.0_^1_%INQ 5_,Q POINTS TO STARTING SECTOR NUMBERR **MSOS4.0_^1_%STQ- QSAVA4,I_I**MSOS4.0_^1_%STA- ASAVA4,I_I**MSOS4.0_^1_%ENQ MFWRT_(PERFORM W€€RITE OPERATIOM_,**MSOS4.0_^1_%ENA 1_P**MSOS4.0_^1_%RTJ READA4+ALNREL_D**MSOS4.0_^1SETDIR LDA- NOWLB,I_%UPDATE_=**MSOS4.0_^1_%LDQ* ORNL_*SYSTEM_^1_%STA- ASAVA3,I_'DIRECTORY_^1_%STQ- QSAVA3,I_(IMAGE_^1_%ENQ 0_^1_%ENA 10_^1_%RTJ READA3+ALNREL_%STORAGE_^1_%LDQ* ORNL_)CLEAR_^1_%CLR A_-DIRECTORY_^1_%STA- 2,Q_.THREAD_^1_%ENQ 0_^1_%LDA* LNGHO_(GET OLD LENGTH IN WORDS_^1_%DVI- NSIX,I€€_(CONVERT_^1_%SQZ 1_.TO SECTORS_^1_%INA 1_^1_%TCA A_^1_%STA- UPDL,I_^1_%LDA* SECO_^1_%STA- UPDSAT+1,I_^1_%ENA 1_,SET FLAG TO RELEASE_^1_%STA- ASAVA3,I_%OLD LOC_^1_%ENQ UDSET_*IN SECTOR AVAILABILITY TABLE_^1_%ENA 2_^1_%RTJ READA3+ALNREL_^1_%LDQ* ORNL_^1_%LDA- 6,Q_*NEW SECT NO._^1_%STA- UPDSAT+1,I_^1_%LDA- 4,Q_*NEW LENGTH_^1_%ENQ 0_^1_%DVI- NSIX,I_^1_%SQZ 1_^1_%INA 1_^1_%TC€€A A_^1_%STA- UPDL,I_^1_%ENA 0_,SET FLAG TO_^1_%STA- ASAVA3,I_'MAKE NEW LOC. SECTORS_^1_%ENQ UDSET_+UNAVAILABLE IN_^1_%ENA 2_0S.A.T._^1_%RTJ READA3+ALNREL_^1_%STQ- QSAVA4,I_^1_%ENQ 0_,UPDATE CO, C1 ON MASS STORAGE_^1_%ENA 7_^1_%RTJ READA3+ALNREL_^1AINSNX ENQ 0_P**MSOS4.0_^1_%JMP TRANF+ALNREL_^1ORNL_!NUM 0_^1LNGHO NUM 0_^1SECO_!NUM 0_^1PROGLN NUM 0_^1****_]_^1*_]_^1_%E€€JT_]_^1**********************************************************************_^1*_]_$*_^1*_]_$*_^1*_8AREA 3 SUBROUTINES_6*_^1*_]_$*_^1*_]_$*_^1**********************************************************************_^1_%SPC 2_^1_%EQU MSLOC(*-AREA3)_^1_%SPC 2_^1* THIS SUBROUTINE CHECKS TO SEE WHETHER THE LOADER LEFT THE_^1*_"ABSOLUTIZED FILE OUT ON MASS MEMORY OR LEFT IT IN CORE€€. IF_^1*_"IT IS ON MASS, IT IS BROUGHT INTO CORE. IF ITS IN CORE, IT'S_^1*_"LEFT THERE._^1_%SPC 3_^1MASLOC ADC 0_^1_%LDA- SSEC,I_'IF SSEC NOT ZERO-FILE ON MASS STORAG**MSOS4.0*_^1_%SAN GO1_^1_%JMP* (MASLOC)_$IF ZERO - FILE ALREADY IN CORE, RTS_^1GO1_"LDA- NOWLB,I_%GET LENGTH AND SAVE_0**MSOS4.0*_^1_%STA- WS,I_)FOR READ TO CORE_3**MSOS4.0*_^1_%ADD- TEMPF7,I_J**MSOS4.0_^1_%INA €€1_^1_%SUB- $F6_^1_%SAM G02_^1_%ENA 14_+CURRENT LIMITS OF UNPROTECTED_^1_%ENQ 2_,EXCEEDED_"ERROR 14_^1_%JMP TRANF+MSLOC_^1G02_"ENA 0_^1_%STA- NOWLB,I_%SET TO ZERO TO INDICATE NOW IN CORE_^1_%LDQ- SSEC,I_'STORE SECTOR ADDRESS FOR_+**MSOS4.0*_^1_%STQ* MPONT+1_%MASS MEMORY READ_3**MSOS4.0*_^1_%RTJ* LEAVX_(ABSOLUTIZE POINTER_^1MPONT ADC 0,0_*SIMULATE MSB,LSB SECTOR ADDRESS_^1LEA€€VX ADC 0_^1_%LDQ* LEAVX_(MAKE Q POINT TO MSB, LSB SLOT_^1_(LDA-_$$C2_^1_(SUB-_$$B3_^1_(SAZ_%SAM2-*-1_^1_(LDA-_$H8000_^1_(EAQ_%Q_3SET BIT 15_^1SAM2_!LDA- TEMPF7,I_J**MSOS4.0_^1_%INA 1_,SET A TO START OF BUFFER_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_,MFREAD_^1_%ENA 1_^1_%RTJ READA4+MSLOC_^1_%JMP* (MASLOC)_$RETURN TO CALLER_^1_%EJT_]_^1_%EQU MOVIT1(*-MASLOC)_^1* ********€€******************************************_^1MOVIT 0_"0_,CORE TO CORE TRANSFER_^1_%STA* NTEMAD_^1_%RTJ JKILL+MSLOC_^1_%LDQ-_"ORD,I_%SET UP RECEIVING ADDR._^1_%ADQ-_"$EB_^1_%LDA-_"1,Q_^1_%INA_#-1_^1_%STA-_"TTEMP,I_^1_%STA* CORADR_#ADDR OF PROG BEING REPLACED_^1_%LDQ* NTEMAD_^1_%IIN_#0_*INHIBIT INTERRUPTS_^1_%LDA- TEMPF7,I_J**MSOS4.0_^1_%STA* F7HOLD_L**MSOS4.0_^1MX1_"LDA* (F7HOLD),€€Q_H**MSOS4.0_^1_%STA* (CORADR),Q_^1_%INQ_#-1_^1_%SQZ MULT_^1_%JMP*_"MX1_^1MULT_!EIN 0_,ENABLE INTERRUPTS_^1_%LDA* CORADR_'RESET STARTING CORE ADDRESS_(**MSOS4.0*_^1_%INA 1_,TO CORRECT VALUE FOR CORE_***MSOS4.0*_^1_%STA* CORADR_'IMAGE UPDATE_7**MSOS4.0*_^1_%LDA- SYSTEM,I_$GET SECTOR ADDR. OF CORE IMAGE_%*MSOS4.0*_^1_%MUI =N96_)CONVERT TO WORD ADDRESS_,**MSOS4.0*_^1_%LLS 1_P**MS€€OS4.0*_^1_%ARS 1_P**MSOS4.0*_^1_%AND- $11_N**MSOS4.0*_^1_%STA* CORLSB_K**MSOS4.0*_^1_%LDA* CORADR_'GET STARTING CORE ADDRESS_***MSOS4.0*_^1_%SAP CHK65K_K**MSOS4.0*_^1_%INQ 1_,65K ADDRESS GREATER THAN_+**MSOS4.0*_^1_%AND- $11_*8000 REMOVE THE SIGN BIT_+**MSOS4.0*_^1CHK65K ADD* CORLSB_K**MSOS4.0*_^1_%SAP 2_P**MSOS4.0*_^1_%INQ 1_,ADDITION OF CORADR SET BIT 15_%**MSOS4.0*_^1_%AND-€€ $11_*OF LSB MASK OFF AND INCREMENT Q_#**MSOS4.0*_^1_%STQ* CORMSB_K**MSOS4.0*_^1_%STA* CORLSB_K**MSOS4.0*_^1_%RTJ- ($F4)_(PERFORM WRITE_6**MSOS4.0*_^1_%NUM $4400_L**MSOS4.0*_^1UPDONE NUM 0_P**MSOS4.0*_^1_%NUM 0_P**MSOS4.0*_^1_%NUM $8C2_M**MSOS4.0*_^1NTEMAD NUM 0_P**MSOS4.0*_^1CORADR NUM 0_P**MSOS4.0*_^1CORMSB NUM 0_P**MSOS4.0*_^1CORLSB NUM 0_P**MSOS4.0*_^1NOSTOP LDA* UPDONE€€+1_$CHECK FOR COMPLETION_/**MSOS4.0*_^1_%SAZ STOP_M**MSOS4.0*_^1_%JMP* NOSTOP_K**MSOS4.0*_^1STOP_!JMP* (MOVIT)_J**MSOS4.0*_^1F7HOLD NUM 0_Q**MSOS4.0_^1*_]_^1_%EQU RDIN1(*-MASLOC)_^1*_]_^1* **************************************************_^1RDIN_!0_"0_^1_%STA* NTEMAD_^1_%RTJ JKILL+MSLOC_!TEST FOR JOB-KILL ROUTINE_^1_%LDA* NTEMAD_^1_%STA-_"WS,I_^1_%RTJ* MASLOC_'GET POINTER TO L€€OCATION ON MASS MEMORY_^1_%LDA* NTEMAD_'GET MOVE SIZE_967*1463_^1_%RTJ*_"MOVIT_^1_%JMP*_"(RDIN)_$RETURN_^1_%EJT_]_^1_%EJT_]_^1_%SPC 2_^1_%EQU INSREL(*-AREA3)_^1_%SPC 2_^1*_$THIS SUBROUTINE INSERTS A 1 OR 0 INTO_^1*_+SAT. SECTOR NO. I/P IN Q AND A REG._^1*_$BIT TO BE INSERTED IN INPPAR_^1INSERT 0_"0_^1_%LDQ- BUF1S,I_^1_%STQ* HOLD5_^1_%ENQ_"0_^1_%DVI_!=N1536_^1_%STA- SAT,I_(COMPU€€TE WHICH SECTOR OF SAT_^1_%STQ- RA,I_)I/P SECTOR RESIDES IN_^1_%ADD- SECS+1,I_$SECS = 1ST_^1_%STA- SECX+1,I_^1_%LDA- SAT,I_(IF SAME SECTOR_^1_%SUB- INTMP+1,I_#NO NEED TO READ IN AGAIN_^1_%SAN INSRT1_^1_%JMP* INS5_^1INSRT1 ENQ RSAT1_(READ SAT SECTOR_^1_%ENA 1_^1_%RTJ READA4+INSREL_^1INS5_!ENQ_!0_^1_%LDA- RA,I_(BIT POSITION_^1_%DVI- H10_*DEC 16_^1_%ADD* HOLD5_(SECTOR WORD CONTA€€INING THE_^1_%STA* HOLD5_(BIT TO BE MODIFIED_^1_%STQ- RA,I_)BIT POSITION_^1_%LDA* INS6_^1_%AND- HFFE0_(FFE0_^1_%ADD- RA,I_^1_%STA* INS6_^1_%LDA* INS7_^1_%AND- HFFE0_^1_%ADD- RA,I_^1_%STA* INS7_^1_%LDA* (HOLD5)_^1_%ENQ_!0_^1INS6_!LLS_!0_^1_%AND- H7FFF_(7FFF_^1_%STA- INTMP,I_^1_%TCA_!A_^1_%AND- INPPAR,I_^1_%EOR- INTMP,I_^1INS7_!LRS_!0_^1_%STA* (HOLD5)_^1_%ENQ WSAT1_(O/P UPDATE€€ SAT SECTOR_^1_%ENA 1_^1_%RTJ READA4+INSREL_^1_%LDA- SAT,I_^1_%STA- INTMP+1,I_^1_%JMP*_!(INSERT)_^1HOLD5 ADC 0_^1_%SPC 2_^1_%EQU UDSET(*-INSERT)_^1_%SPC 2_^1UPDSET 0_"0_^1_%SAZ EXIT1A_^1_%LDA- H8000_(8000_^1EXIT1A STA- INPPAR,I_^1_%LDA- UPDL,I_^1_%INA 0_^1_%SAN 1_^1_%JMP* UPDL2_(IF PROG. LGTN. EQ. 0, DONT UPDATE S.A.T._^1_%ENA_!0_^1_%STA- UPDL1,I_^1_%ENA -1_+SET INTMP+1,€€I SO INSERT_/67*1473_^1_%STA- INTMP+1,I_'WILL READ UP THE SAT SECTOR_(67*1473_^1UPDST1 LDA- UPDSAT+1,I_"STARTING SECTOR_^1_%ADD- UPDL1,I_%INCREMENT_^1_%RTJ* INSERT_^1_%RAO- UPDL1,I_^1_%LDA- UPDL,I_^1_%ADD- UPDL1,I_^1_%SAZ UPDL2_^1_%JMP* UPDST1_^1UPDL2 JMP* (UPDSET)_^1_%SPC 2_^1_%EQU IOBLE1(*-INSERT)_^1_%SPC 2_^1* **************************************************_^1********€€*************************************************************_^1*_]_^1*_.THIS SUBROUTINE READS ONE BLOCK_^1*_.OF OLD PROGRAM RESIDING ON M.S._^1IOBLE 0_"0_,INTO BUFF1D_^1_%ENA 96_^1_%STA- WS,I_^1_%ENQ SUR1_^1_%ENA 1_^1_%RTJ READA4+INSREL_^1_%LDQ- IOSEAD,I_^1_%LDA- IOSAD,I_%BEGIN. ADDR.(BUFF1D)_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_^1_%ENA 1_,MFREAD_^1_%RTJ READA4+€€INSREL_^1_%LDQ- BUFF1D,I_^1_%INQ 59_^1_%LDA- (ZERO),Q_^1_%SAZ BUFFD_^1_%STA- IOSEC+1,I_^1BUFFD JMP* (IOBLE)_^1_%SPC 2_^1_%EQU ZAES1(*-INSERT)_^1_%SPC 2_^1* **************************************************_^1* THIS ROUTINE WILL ZERO ALL DIRECTORY ENTRIES WHICH_^1* HAVE AS A BEGINNING SECTOR NUMBER THE SAME NUMBER_^1* AS THAT WHICH IS IN SECAD,SECAD+1._^1ZAES_!0_"0_^1_%ENA_#0€€_^1_%STA-_"ZS,I_'INITIALIZE ZS,ZS+2_^1_%STA- ZSEC,I_^1_%STA-_"ZS+2,I_^1_%ENQ SUR1_^1_%ENA 1_^1_%RTJ READA4+INSREL_^1X2K_"ENA_#96_^1_%STA-_"WS,I_^1_%LDQ-_"ZS,I_'ABS OF SECT NO ADDR_^1_%LDA-_"ZS+1,I_$ABS OF INPUT BUFF_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_^1_%ENA 1_^1_%RTJ READA4+INSREL_^1_%LDA (BFC95+INSREL)_^1_%SAN BUFFR_^1_%RAO-_"ZS+2,I_$YES. SET LAST SECT IND ON_^€€1BUFFR STA* SECSAV_'SAVE NEXT PROG DIR SECT_^1_%LDQ- POINT,I_^1_%LDA- 4,Q_%SECT NBR OF PROGRAM START_^1_%STA*_"ZSK_(BEG SECT NO OF OLD PROGR._^1_%ENQ 0_)CLEAR Q FOR DIRECTORY SECTOR SEARCH_^1X1K_"LDA- BUFF1C,I_^1_%INA 4_^1_%AAQ A_^1_%STA* HOLD_^1_%LDA* (HOLD)_^1_%SUB*_"ZSK_^1_%SAN ZSK1A_^1_%RTJ*_"ZER_(WERE SAME. ZERO ENTRY_^1ZSK1A INQ 5_,NOT SAME, SET FOR NEXT EN_^1_%TRQ_#A€€_*TEST IF SECT COMPLETE_^1_%INA_#-89_^1_%SAZ ZSK2A_^1_%SAP ZSK3A_^1ZSK2A JMP* X1K_*NOT FINISH. DO NEXT ENT_^1ZSK3A LDQ- ZS,I_)ADDR OF LOC CONTAINING SECT NBR_^1_%LDA- ZS+1,I_#ADDR OF BUFF1C BUFFER_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_(MFWRITE_^1_%ENA 1_^1_%RTJ READA4+INSREL_^1_%LDA* SECSAV_#NEXT DIRECTORY SECTOR_^1_%STA- ZSEC+1,I_#TO STORAGE_^1_%LDA-_"ZS+2,I_$€€FINISHED.WAS IT LAST SECT_^1_%SAZ ZSK4A_^1_%JMP*_"(ZAES)_$WAS LAST SECT. RETURN_^1ZSK4A JMP* X2K_*NOT LAST. GO GET NEXT SEC_^1SECSAV ADC 0_^1ZSK_"NUM 0_^1HOLD_!ADC 0_^1_%SPC 2_^1_%EQU ZER1(*-INSERT)_^1_%SPC 2_^1* **************************************************_^1ZER_"0_"0_,ZERO ENTRY IN BUFF1C_^1_%LDA- BUFF1C,I_^1_%AAQ A_^1_%STA* ZRENT_^1_%INA 4_^1_%STA* ZRENT1_^1ZER2_€€!ENA 0_^1_%STA* (ZRENT)_^1_%LDA* ZRENT1_^1_%SUB* ZRENT_^1_%SAZ 2_^1_%RAO* ZRENT_^1_%JMP* ZER2_^1_%JMP* (ZER)_^1ZRENT NUM 0_^1ZRENT1 NUM 0_^1_%SPC 2_^1_%EJT_]_^1************************************************************************_^1*_$THESE SUBROUTINES ARE USED BY THE *T PROCESSOR_^1*_$TO CONVERT THE RECORD COUNT FROM HEX TO ASCII,_^1*_$WRITE THE MESSAGE SPECIFYING THE NO.€€ OF RECORDS_^1*_$TRANSFERRED AND TO CHECK FOR CORRECT LOGICAL UNITS_^1_%EQU SENDC1(*-AREA3)_^1_%SPC 2_^1SENDC NOP 0_^1_%STQ* FILENO_K**MSOS4.0*_^1SENDK SAN GETNO_(SKIP IF ANY TO TRANSFER_-**MSOS4.0_^1_%STA* PACKNO_L47*797_^1_%LDA- 0_Q47*797_^1NOTRAN NUM $2030_$SPACE,ZERO_=47*797_^1_%STA* PACK1_M47*797_^1_%JMP* DLOOP_M47*797_^1GETNO RTJ* SENDF_M47*797_^1_%STQ* PACK1_$LEAST S€€IGNIFICANT NUMBER_/47*797_^1_%SAN GETONE_#SKIP IF MORE_;47*797_^1_%STA* PACKNO_L47*797_^1_%LDA* NOTRAN_L47*797_^1DLOOP INA -$10_N47*797_^1_%STA* PACK2_M47*797_^1_%JMP* TIXE1_$TO PRINT_?47*797_^1GETONE RTJ* SENDF_M47*797_^1_%STQ* PACK2_M47*797_^1_%SAZ 1_)SKIP IF ONLY 4 DIGITS_247*797_^1_%INA $30_O47*797_^1_%STA* PACKNO_L47*797_^1_%JMP* TIXE1_$TO PRINT_?47*797_^1FILENO NUM 0_Q*€€*MSOS4.0_^1SENDT ADC 0_^1SENDF NOP 0_^1_%ENQ 0_^1_%DVI- D10_^1_%INQ $30_^1_%STQ* SENDT_^1_%SAZ SENDF1_^1_%ENQ 0_^1_%DVI- D10_^1_%INQ $30_^1_%QLS 8_^1_%ADQ* SENDT_^1_%JMP* (SENDF)_^1SENDF1 LDQ =N$2000_^1_%ADQ* SENDT_^1_%JMP* (SENDF)_^1TIXE1 RTJ* LOCTB_M47*797_^1PACKNO NUM 0_Q47*797_^1PACK2 ADC 0_^1PACK1 ADC 0_^1PACK3 ALF 11, RECORDS TRANSFERRED_:**MSOS4.0_^1LOCTB€€ ADC 0_^1_%LDA* LOCTB_^1_%STA* SAPK1A_^1_%LDA IOTAB+4+SENDC1_^1_%STA* REQ1A_^1_%RTJ- ($F4)_^1_%NUM $C01,0,0_^1REQ1A NUM $18FB,14_^1SAPK1A NUM 0_^1_%LDA* REQ1A-1_^1_%SAZ 1_^1_%JMP* *-2_^1_%LDA* FILENO_L**MSOS4.0_^1_%SAZ XXTX_N**MSOS4.0_^1_%ENQ 10_O**MSOS4.0*_^1MOVALF LDA* PACK4,Q_%PACK FILES TRANSFERRED_-**MSOS4.0*_^1_%STA* PACK3,Q_%MESSAGE IN WRITE_3**MSOS4.0*_^1_%INQ -€€1_+BUFFER_=**MSOS4.0*_^1_%SQM 1_P**MSOS4.0*_^1_%JMP* MOVALF_K**MSOS4.0*_^1_%LDA* FILENO_K**MSOS4.0*_^1_%ENQ 0_Q**MSOS4.0_^1_%STQ* FILENO_L**MSOS4.0_^1_%JMP* SENDK_M**MSOS4.0_^1XXTX_!RTJ* CHKCSY_K**MSOS4.0*_^1_%ENQ 0_P**MSOS4.0*_^1_%JMP TRANF+SENDC1_^1PACK4 ALF 11, FILES TRANSFERRED_;**MSOS4.0*_^1_%SPC 2_^1_%EQU LOGUT(*-SENDC)_^1_%SPC 2_^1LUCHK ADC 0_^1_%STA* LUCHK1_'CHE€€CK FOR LEGAL LU - 2=INPUT, 4=OUTPUT_^1_%LDQ- XXK,I_^1_%STQ* LUCHK3_'STORE LU NUMBER_^1_%LDQ LOG1A,Q_^1_%LDA- EREQST,Q_^1_%AND* LUCHK1_^1_%SAN LUCH10_^1LUCHK4 ENA 6_,ERROR 6 IF ILLEGAL_^1_%ENQ 2_^1_%JMP TRANF+SENDC1_^1LUCH10 LDQ* LUCHK3_'PICK UP LU NUMBER_^1_%INQ -1_+CHECK FOR CORE ALLOCATOR_^1_%SQZ ERR06-*-1_^1_%LDA* LUCHK3_L47*845_^1_%SUB =XNUMLU_%GET NUMBER OF LOGICAL UN€€ITS FROM SYSBUF_^1_%SAZ LUCH11-*-1_^1_%SAM LUCH11-*-1_"SKIP IF LU NOT TOO LARGE_^1ERR06 JMP* LUCHK4_'PRINT L06 ERROR_^1LUCH11 LDQ* LUCHK3_'GET LOGICAL UNIT NO,_/**MSOS4.0*_^1_%LDQ LOG1A,Q_%AND CHECK TO SEE IF THE_,**MSOS4.0*_^1_%LDA- EREQST,Q_$UNIT IS THE COSY DRIVER_,**MSOS4.0*_^1_%ARS 4_P**MSOS4.0*_^1_%AND- NZERO-9_J**MSOS4.0*_^1_%INA -11_N**MSOS4.0*_^1_%SAN LUCH12_K**MSOS€€4.0*_^1_%LDQ* LUCHK3_'UNIT IS A COSY DRIVER_.**MSOS4.0*_^1_%LDA* CSYINP_'CHECK IF A PREVIOUS COSY_+**MSOS4.0*_^1_%SAN STRCSY_'DRIVER SPECIFIED_3**MSOS4.0*_^1_%STQ* CSYINP_'NO,STORE FIRST UNIT_0**MSOS4.0*_^1_%JMP* LUCH12_K**MSOS4.0*_^1STRCSY STQ* CSYOUT_'YES,STORE SECOND UNIT_.**MSOS4.0*_^1LUCH12 LDA- XXK,I_L**MSOS4.0*_^1_%JMP* (LUCHK)_^1LUCHK1 ADC 0_^1LUCHK3 ADC 0_,LU NUMBER_^1C€€SYINP NUM 0_P**MSOS4.0*_^1CSYOUT NUM 0_P**MSOS4.0*_^1_%SPC 2_P**MSOS4.0*_^1_%EQU COSYCK(*-SENDC)_B**MSOS4.0*_^1_%SPC 2_P**MSOS4.0*_^1CHKCSY 0_"0_P**MSOS4.0*_^1_%LDQ* CSYINP_'COSY LOGICAL UNIT USED_,**MSOS4.0*_^1_%SQZ NOCSY_L**MSOS4.0*_^1_%RTJ* CLRCSY_'YES,CLEAR WORD 31 IN PHYSTAB_'**MSOS4.0*_^1_%LDQ* CSYOUT_'TWO COSY LU,S USED_1**MSOS4.0*_^1_%SQZ NOCSY_L**MSOS4.0*_^1_%RTJ* €€CLRCSY_'YES,CLEAR PHYSTAB_2**MSOS4.0*_^1_%JMP* NOCSY_L**MSOS4.0*_^1CLRCSY 0_"0_P**MSOS4.0_^1_%LDQ LOG1A,Q_J**MSOS4.0_^1_%SET A_,CLEAR PHYSTAB WORD 31_.**MSOS4.0*_^1_%STA- 31,Q_M**MSOS4.0*_^1_%JMP* (CLRCSY)_I**MSOS4.0*_^1NOCSY JMP* (CHKCSY)_I**MSOS4.0*_^1_%EJT_S**MSOS4.0*_^1_%SPC 2_^1_%EQU SACREL(*-AREA3)_^1_%SPC 2_^1* **************************************************_^1* THI€€S ROUTINE SEARCHES THE PROGRAM DIRECTORY FOR A_^1* MATCH TO AN ENTRY POINT NAME IN BUFF1A+1/BUFF1A+3_^1* IF FOUND, SECT NO. OF DIRECTORY BLOCK WILL BE IN_^1* SAC,SAC+1 AND THE Q-REGISTER CONTAIN THE INDEX TO_^1* THE FIRST WORD OF THE MATCH ENTRY IN THIS SECTOR._^1* THE A-REGISTER IS ZERO. IF NO MATCH FOUND, THE_^1* A-REGISTER IS NON-ZERO._^1SAC_"0_"0_^1_%LDA BUF1A+SACREL_^1_%STA* €€BF1A_^1_%ENA_#0_^1_%STA*_"FLI_^1_%STA- SECAD,I_^1X15_"STA*_"LSTFLG_^1_%LDA-_"$C4_^1_%STA-_"SECAD+1,I_^1_%LDA- B1BABS,I_^1_%STA*_"SACAD_%ABS ADDR OF INP BUFF_^1_%ENA 14_(A(SECAD)_^1_%ADD- I_,ABS ADDR OF WORD CONTAIN_^1_%STA*_"SACSEC_$SECT NUMBER_^1RDLPP ENA_#96_^1_%STA-_"WS,I_^1_%LDA- FILIN,I_%FILE PROCESSOR IN_^1_%SAZ RDLPP1_^1_%LDA- SECAD+1,I_^1_%STA* SAVSED_^1RDLPP1 LDA* SACAD€€_^1_%STA* BF1B_^1_%LDQ*_"SACSEC_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_^1_%ENA 1_^1_%RTJ READA4+SACREL_^1_%LDA (BFB95+SACREL)_!TEST FOR LAST SECTOR_^1_%SAN_#X9-*-1_^1_%RAO*_"LSTFLG_$SET LAST FLAG ON_^1_%ENA 90_(USABLE WORDS ON PROG DIR SECT_^1_%SUB (BFB93+SACREL)_!IN LAST SECTOR_^1_%CLR Q_^1_%DVI- D5_^1_%JMP* X9A_^1X9_#STA-_"SECAD+1,I_!SECT NO OF NEXT SECT_^1_%ENA_#18€€_^1X9A_"STA* TS1_*NUMBER OF ENT/SECT_^1LXT_"ENQ 3_^1_%ENA 1_^1_%STA- WS+1,I_#POINTER FOR BUFFER_^1_%LDA* (BF1B),Q_$CHECK FOR FILE ENTRY_^1_%ENQ 0_^1_%SAP LLJ_^1_%JMP* FILCHK_#A FILE ENTRY_^1LLJ_"LDA* (BF1A),Q_$COMPARE GIVEN NAME_^1_%SUB* (BF1B),Q_$TO NAME IN PROGRAM DIRECTORY_^1_%SAZ SWPXA_^1_%JMP*_"NXTENT_$NO MATCH ON NAME_^1SWPXA LDA- WS+1,I_'PARTIAL MATCH. SET TO_^1_%INA_#€€-3_)COMPARE NEXT WORD._^1_%SAZ MTCH_)IF ZERO, COMPLETE MATCH_^1_%RAO-_"WS+1,I_$GO TEST NEXT WORD_^1_%INQ_#1_*GO TEST NEXT WORD_^1_%JMP*_"LLJ_^1MTCH_!JMP* MATCH_(YES COMPLETE MATCH_^1NXTENT LDA* BF1B_^1_%INA 5_^1_%STA* BF1B_^1_%LDA* TS1_'TEST FOR SECTOR COMPLETE_^1_%INA -1_^1_%STA* TS1_^1_%SAZ LXTA_^1_%JMP*_"LXT_(SECTOR NOT COMPLETE_^1LXTA_!LDA* LSTFLG_'TEST FOR LAST SECTOR_^1_%€€SAN LXTB_^1_%JMP*_"RDLPP_^1LXTB_!JMP* (SAC)_(LAST SECT AND NO MATCH_^1MATCH RTJ* REMCK_^1_%LDA- FILIN,I_^1_%SAZ MATCH1_^1_%ENQ 3_P**MSOS4.0*_^1_%LDA* (BF1B),Q_$FILE ENTRY_9**MSOS4.0*_^1_%SAM 1_P**MSOS4.0*_^1_%JMP* NXTENT_'NO, GET NEXT ENTRY_1**MSOS4.0*_^1_%LDA* SAVSED_^1_%STA- SECAD+1,I_^1_%STA- NENT,I_^1MATCH1 ENA 0_,A MATCH FOUND._^1_%LDQ* BF1B_)SET Q TO FIRST WD OF PROG DI€€R ENT_^1_%JMP*_"(SAC)_%RETURN_^1_%SPC 2_^1FILCHK LDA- REMOV,I_%REMOVE FLAG ON_^1_%SAZ FILCK0_'NO_^1_%JMP*_"FILCK1_'TEST FOR FILE OR PROGRAM REMOVAL_^1FILCK0 LDA*_"FLI_^1_%SAZ FLKA_^1_%JMP*_"LLJ_^1FLKA_!JMP* NXTENT_^1FILCK1 LDA- REMFIL,I_^1_%SAN FLKB_^1_%JMP*_"FILCK0_^1FLKB_!LDA* FLI_^1_%SAZ FLKC_^1_%JMP*_"NXTENT_^1FLKC_!JMP* LLJ_^1REMCK 0_"0_^1_%LDA- REMOV,I_%REMOVE FLAG ON_^€€1_%SAZ REMCK1_^1_%ENQ 3_,YES,FILE REMOVAL FLAG SET_^1_%LDA* (BF1B),Q_$ON CHECK OF PROGRAM ENTRY_^1_%LDQ- REMFIL,I_^1_%SAM REMCK1_^1_%SQZ REMCK1_^1_%JMP* NXTENT_'YES,CHECK NEXT ENTRY_^1REMCK1 JMP* (REMCK)_^1_%SPC 2_^1_%EQU SACF1(*-SAC)_^1_%SPC 2_^1************************************************************************_^1SACF_!0_"0_^1_%RAO*_"FLI_^1_%LDA*_"SACF_^1_%STA*_"SAC_^€€1_%LDA BUF1A+SACREL_^1_%STA* BF1A_^1_%ENA_#0_^1_%JMP*_"X15_^1FLI_"NUM 0_^1TS1_"NUM 0_^1LSTFLG NUM 0_^1SACSEC NUM 0_^1SACAD NUM 0_^1BF1B_!ADC 0_^1BF1A_!ADC 0_^1SAVSED ADC 0_^1_%EJT_]_^1_%SPC 2_^1_%EQU SERCH(*-AREA3)_^1 SPC 1_]_^1*_]_^1*_$THIS SUBROUTINE SCANS THE SECTOR AVAILABILITY_^1*_$TABLE FOR THE NEXT EMPTY SECTOR. RETURNS WITH_^1*_$SECT NO. IN A AND Q REG. THE EM€€PTY SECTOR BIT_^1*_$IS SET TO FULL BEFORE EXITING_^1SEARCH 0_"0_^1SR1_"LDA- RA,I_)SET RA TO NEXT BIT_^1_%INA 1_^1_%STA- RA,I_^1_%INA -15_^1_%SAM SRCH_)EXCEEDED WORD BOUNDARY_^1_%SAZ SRCH_^1SR2_"ENA 0_,YES, RESET BIT POINTER_^1_%STA- RA,I_)AND_^1_%RAO- WORD,I_'SET TO NEXT WORD IN SAT_^1SRCH_!LDA- WORD,I_^1_%INA_!-96_"REACHED SECTOR BOUNDARY YET_^1_%SAZ SRCH1_(SKIP IF YES_^1_%J€€MP* SR5_^1SRCH1 ENQ 0_,YES, RESET R AND WORD_^1_%STQ- WORD,I_^1_%STQ- RA,I_^1_%LDA- SECS+1,I_^1_%ADD- SAT,I_^1_%STA- SECX+1,I_^1_%ENQ WSAT1_(O/P UPDATED SAT SECTOR_^1_%ENA 1_^1_%RTJ READA4+SERCH_^1_%RAO- SAT,I_(INCR. SAT NO._^1_%LDA- SAT,I_(HAS THE NUMBER OF SECTORS_***MSOS4.0*_^1_%INA -23_*IN THE SECTOR AVAILABILITY_)**MSOS4.0*_^1_%SAM SR4_*TABLE BEEN EXCEED WHILE SEARCHING€€_!**MSOS4.0*_^1_%ENA 21_O**MSOS4.0*_^1_%ENQ 2_,YES,ERROR ATTEMPT TO WRITE_)**MSOS4.0*_^1_%JMP TRANF+SERCH_!BEYOND MAXSEC_6**MSOS4.0*_^1SR4_"LDA- SECS+1,I_$1ST S(CT. NO OF SAT_0**MSOS4.0*_^1_%ADD- SAT,I_^1_%STA- SECX+1,I_^1_%ENQ RSAT1_(READ SAT SECTOR_^1_%ENA 1_^1_%RTJ READA4+SERCH_^1SR5_"LDQ- BUF1S,I_%ABS. ADDR. OF I/P BUFFER_^1_%ADQ- WORD,I_^1_%STQ- SATMP+1,I_^1_%LDA- (ZERO)€€,Q_^1_%SAN SRCH2_^1_%STA* FOUND_^1_%STA* BITCNT_^1_%JMP* SR2_*NO EMPTY SECT IN THIS WORD_^1SRCH2 STA- SATMP,I_^1_%LDA- RA,I_^1_%TCA Q_,COMPLEMENT OF R_^1_'LDA- H8000,Q_^1_%AND- SATMP,I_^1_%SAN SRCH3_^1_%STA* FOUND_^1_%STA* BITCNT_^1_%JMP* SR1_*BIT = 0, IMPLIES SECT FULL_^1SRCH3 LDQ- FILIN,I_%FILE PROCESSOR IN_^1_%SQZ 1_^1_%JMP* SRCH3B_'YES_^1_%TCA A_^1_%AND- SATMP,I_^1_%LDQ-€€ SATMP+1,I_^1_%STA- (ZERO),Q_^1SRCH3A ENA 0_,COMPUTE SEC. NO. OF_^1_%LDA =N1536_*EMPTY SECTOR_^1_%MUI- SAT,I_^1_%STA- SATMP,I_^1_%ENQ 0_^1_%ENA 16_^1_%MUI- WORD,I_^1_%ADD- SATMP,I_^1_%ADD- RA,I_)SAT*1536+WORD*16+RA=SECT_^1_%ENQ 0_^1_%JMP* (SEARCH)_^1SRCH3B LDA* FOUND_(NOW BUILDING STRING_^1_%SAN BITSET_^1_%LDQ- SAT,I_(NO, SAVE THIS BIT AS 1ST SECTOR_^1_%STQ* SVESAT_^1_%LDQ- W€€ORD,I_^1_%STQ* SVEWRD_^1_%LDQ- RA,I_^1_%STQ* SVERA_^1_%RAO* FOUND_^1BITSET RAO* BITCNT_^1_%LDA* BITCNT_^1_%ADD- UPDL,I_'ENOUGH SECTORS FOR FILE_^1_%SAP 1_^1_%JMP* SR1_*NO,CHECK NEXT BIT_^1_%LDA* SVESAT_^1_%STA- SAT,I_^1_%LDA* SVEWRD_^1_%STA- WORD,I_^1_%LDA* SVERA_^1_%STA- RA,I_^1_%JMP* SRCH3A_^1FOUND NUM 0_^1BITCNT NUM 0_^1SVESAT NUM 0_^1SVEWRD NUM 0_^1SVERA NUM 0_^1_%SPC €€2_^1_%EQU FELD1(*-SEARCH)_^1_%SPC 2_^1* **************************************************_^1* THIS ROUTINE FINDS THE END OF THE PROGRAM DIRECTORY_^1* THE SECTOR NUMBER OF THE LAST DIRECTORY SECTOR_^1* WILL BE IN LAST,LAST+1, AND THE FIRST AVAILABLE_^1* WORD IN THE SECTOR WILL BE IN LNOR._^1FELD_!0_"0_^1_%LDA-_"$C4_(NO OF FIRST DIR SECTOR_^1_%STA- LAST+1,I_^1_%CLR A_^1_%STA- LAS€€T,I_^1_%ENA LAST_)ABS. ADDR. OF LAST (CELL_^1_%ADD- I_,CONTAINING SECT. NO.)_^1_%STA-_"LSECAD,I_^1_%ENA_#96_)NUM2BER OF WORDS FOR READ_^1_%STA-_"WS,I_^1_%LDA- BUFF1C,I_$A(BUFF1C)_^1_%STA-_"LASTAD,I_"ABS ADD OF INPUT BUFF_^1FLP_"LDA-_"LASTAD,I_^1_%LDQ-_"LSECAD,I_"ABS OF SECT NO._^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_,MFREAD_^1_%ENA 1_^1_%RTJ READA4+SERCH_^1_%LDA (BFC95+€€SERCH)_^1_%SAZ FLPA_^1_%STA- LAST+1,I_^1_%JMP*_"FLP_^1FLPA_!LDA (BFC93+SERCH)_^1_%SAZ FLPB_^1_%ENA_#90_$GET NO OF WORDS IN SECT_^1_%SUB (BFC93+SERCH)_^1_%STA-_"LNOR,I_$STORE IN LNOR_^1_%JMP*_"(FELD)_$RETURN_^1FLPB_!RTJ SEARCH_'GET 1ST AVAIL. SEC. FOR PROG. LIB._^1_%STQ (BFC94+SERCH)_^1_%STA (BFC95+SERCH)_^1_%LDQ-_"LSECAD,I_^1_%LDA-_"LASTAD,I_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4€€,I_^1_%ENQ MFWRT_^1_%ENA 1_^1_%RTJ READA4+SERCH_^1_%LDA (BFC95+SERCH)_^1_%STA- LAST+1,I_^1_%LDA- LAST+1,I_^1_%SUB- $C1_^1_%SAM LTS_*1ST AV16. SECT. IN SCRATCH AREA_^1_%LDA- LAST+1,I_^1_%INA 1_^1_%STA- $C1_^1LTS_"ENA 0_,BACKGROUND BUFF1C BUFFER_^1_%ENQ -96_'TO ZERO AND OUTPUT AS A_^1LOP_"STA (BFC96+SERCH),Q_#NEW PROGRAM DIRECTORY_^1_%INQ 1_)SECTOR._^1_%SQZ LOPDON-*-1_^1_%€€JMP* LOP_^1LOPDON ENA 96_(PREPARE TO OUTPUT BUFFER._^1_%STA-_"WS,I_^1_%LDQ-_"LSECAD,I_^1_%LDA-_"LASTAD,I_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_(MFWRIT_^1_%ENA 1_^1_%RTJ READA4+SERCH_^1_%ENA_#0_^1_%STA-_"LNOR,I_$SET LNOR = 0_^1FLPBD JMP* (FELD)_'NORMAL RETURN_^1_%EJT_]_^1_%SPC 2_^1_%EQU INPREL(*-AREA3)_^1_%SPC 2_^1*_!THIS ROUTINE READS FROM THE INPUT OR COMMENT M€€EDIUM_^1*_!ASCIT OR BINARY FORMAT RECORDS (96 WDS OR LESS)._^1*_!READING IS TERMINATED BY AN ERROR RETURN FROM THE_^1*_!INPUT DRIVER (I.E. WHEN CU IS TYPED IN). ON EXIT_^1*_!FROM THIS PROGRAM THE NUMBER OF SECTORS USED IS_^1*_!IN A._]_^1*_]_^1INPUT 0_"0_^1_%NOP 0_^1_%CLR A_)CLEAR OUT PARAMETERS_^1_%STA* RISEC_^1_%STA- TRISEC,I_^1_%STA- XXK+1,I_^1_%STA- XXK+3,I_^1_%LDA- $ED_'TEM€€P LOWEST UNPROTECTED LOC-1_^1_%INA 1_)TEMP LOWEST UNPROTECTED LOC_^1_%STA- XXK,I_'TO BUFFER STARTING ADDR._^1X17A_!LDA- $EC_*TEMP HIGHEST UNPROTECTED LOC+1_(62*1314_^1_%SUB- XXK,I_'MINUS LOWEST UNPROTECTED LOC_^1_%CLR Q_^1_%DVI- NSIX,I_#DECIMAL 96_^1_%STA- CSCNT,I_%PERMISSABLE NO. OF SECTORS_^1_%MUI- NSIX,I_#DECIMAL 96_^1_%TRA Q_)SIZE OF UNPROTECTED CORE_^1_%CLR A_)CLEAR ALL OF€€ UNPROTECTED CORE_^1LOOPX STA- ($ED),Q_^1_%INQ -1_^1_%SQZ X17-*-1_M62*1314_^1_%JMP* LOOPX_^1X17_"ENA 96_+96 WORD RECORD TO FRDIN ROUTINE_^1_%STA- WS,I_^1_%LDA- XXK,I_^1_%LDQ* FIRST_(FIRST TIME FLAG FOR FILE_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_^1_%ENA 3_^1_%RTJ READA4+INPREL_^1_%STQ* SAPKAD_^1_%STA* RTNREQ_^1_%SAP FRD1-*-1_^1_%LDA* FIRST_^1_%SAN FRD1-*-1_^1_%ENA €€9_,ERROR NO. 9 - NO INPUT_^1ERFF2 ENQ 2_^1_%RTJ TRANF+INPREL_^1FRD1_!RAO* FIRST_^1_%LDA- MSINP,I_^1_%SAZ X31A_^1_%JMP*_"FIND_%JMP IF M.S. I/P_^1X31A_!RTJ TSTAST_'TEST FOR * CONTROL STATEMENT_^1_%LDA* RTNREQ_'TEST FOR CU RETURN_^1_%SAP XGO-*-1_$NO CU RETURN_^1X30GO RAO- XXK+3,I_"CU HAS BEEN INPUT_^1_%JMP* FINC_$NO-MORE INPUT_^1XGO_"RAO* RISEC_$INCR MASS STG SECT COUNT_^1_%LD€€A- XXK,I_$UPDATE BEGINNING ADDR_^1_%INA_!96_)OF INPUT BUFFER_^1_%STA- XXK,I_^1_%LDA- CSCNT,I_%MAX NBR. OF MASS STG SECTORS_^1_%SUB* RISEC_$CURR NBR OF MASS STG SECTRS_4F_^1_%SAM CSCNTA_^1_%SAN CSCNTB_'CORE NOT FULL, CONTINUE READING_^1CSCNTA RTJ* CLCOR_(CORE FULL, MOVE TO MASS STG_^1_%JMP* X17A_P62*1314_^1CSCNTB JMP* X17_^1FINC_!RTJ* CLCOR_$OUTPUT CORE SECTORS TO MASS STG_^1_%LDA€€- TRISEC,I_$NUMBER OF SECTORS USED_^1_%JMP* (INPUT)_^1RTNREQ NUM 0_^1FIND_!LDQ* SAPKAD_'I/P BUFFER ADDRESS_^1_%INQ_#1_)SET TO RECORD ID_^1_%LDA- (ZERO),Q_^1_%SUB*_"MSID_%CHECK FOR HEADER RECORD ID_^1_%SAN_#NOFND-*-1 O/P BY LIBEDT._^1_%INQ_#1_)2ND WORD_^1_%LDA- (ZERO),Q_^1_%SUB*_"MSID+1_^1_%SAZ_#FIND1-*-1_^1NOFND ENA_!11_'ERROR... M.S. RECORD HAS NO LIBEDT HEADER REC._^1_%JMP ER€€FF2_^1FIND1 LDA* (SAPKAD)_$WORD COUNT_^1_%CLR_#Q_^1_%DVI-_"NSIX,I_#CONVERT_^1_%SQZ NSIXA_(TO_^1_%INA 1_,SECTORS_^1NSIXA STA- TRISEC,I_^1_%JMP* (INPUT)_^1MSID_!ALF 2,LIBE_^1RISEC NUM 0_^1SAPKAD ADC 0_^1FIRST NUM 0_^1_%EJT_]_^1*_]_^1*_!OUTPUT CORE SECTORS TO MASS STORAGE_^1*_]_^1CLCOR 0_"0_^1_%LDA* RISEC_$SECTORS USED_^1_%CLR Q_^1_%MUI- NSIX,I_#DECIMAL 96_^1_%STA- WS,I_(T€€O MFWRIT CONTROL WD_^1_%LDA- $ED_'TEMP LOWEST UNPROTECTED LOC -1_^1_%INA 1_^1_%STA- XXK,I_$OUTPUT BUFFER STARTING ADDR_^1_%LDQ- $C1_'FIRST SCRATCH SECTOR_^1_%ADQ- TRISEC,I_^1_%STQ- XXK+1,I_^1X21_"LDA- XXK,I_$ADDR OF OUTPUT BUFFER_^1_%ENQ XXK_^1_%ADQ- I_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ MFWRT_(MFWRITE_^1_%ENA 1_^1_%RTJ READA4+INPREL WRITE CORE OUT_^1_%LDA* RISEC_^1_%€€ADD- TRISEC,I_^1_%STA- TRISEC,I_^1_%CLR A_^1_%STA* RISEC_^1_%JMP* (CLCOR)_^1TSTAST 0_"0_,ROUTINE FOR TESTING FOR AN * CONTROL CHARACTER_^1_%LDQ- XXK,I_$ADDRESS OF INPUT BUFFER_^1_%INQ -1_^1_%LDA- 1,Q_'FIRST CHARACTER OF BUFFER_^1_%ARS 8_)TO BITS 0-7_^1_%AND- $9_($7F MASK_^1_%INA -$2A_%* CHARACTER_^1_%SAZ ISAST-*-1_^1_%JMP* (TSTAST)_#NOT *_^1_%SPC 2_^1ISAST LDA* RTNREQ_'LU WO€€RD OF I/O REQUEST_^1_%ARS 13_(TEST V FIELD_^1_%INA -2_^1_%SAZ NCTL1-*-1_^1_%JMP* (TSTAST)_^1_%SPC 2_^1NCTL1 ENQ -$11_)MOVE CONTROL STATEMENT TO BUFFER_%62*1309_^1_%LDA- XXK,I_^1_%INA $11_Q62*1309_^1_%STA* XXKP11_^1CTC_"LDA* (XXKP11),Q_^1_%STA- PIBUFF+$11,B_H62*1309_^1_%INQ 1_^1_%SQZ TCDON-*-1_^1_%JMP* CTC_^1TCDON LDA- PIBUFF,I_$SET CONTRL STMNT FOUND SWITCH_^1_%TCA A_^1_€€%STA- PIBUFF,I_^1_%JMP X30GO_^1XXKP11 ADC 0_^1_%EJT_]_^1*_8UPDATE MASS STORAGE_^1_%SPC 2_^1_%EQU MASUP(*-AREA3)_^1_%SPC 2_^1MASSUP 0_"0_,UPDATE MASS STORAGE C0 AND C1_^1_%STQ* QG_^1_%LDA SWTCH_^1_%SAM MSSUP_(JOB-KILL IN PROGRESS_^1_%ENA -1_+YES_^1_%STA* KILEXT_^1_%STA SWTCH_^1MSSUP CLR A_^1_%STA- ZSEC,I_^1_%LDA- SYSTEM,I_!SECTOR ON WHICH SYSTEM RESIDES_^1_%INA 2_)C0 AN€€D C1 ARE ON 3RD SECTOR OF SYSTEM_^1_%STA- ZSEC+1,I_^1_%RTJ* SETC1_$SET A,Q, AND WS_^1_%STA- ASAVA4,I_^1_%STQ- QSAVA4,I_^1_%ENQ 0_,MFREAD_^1_%ENA 1_^1_%RTJ READA4+MASUP_^1_%LDA- $C0_'CORE CONTENTS OF LOC C0_^1_%LDQ- BUFF1C,I_^1_%STA- (ZERO),Q_$TO MASS STORAGE_^1_%LDA- $C1_'LSB OF FIRST SCRATCH SECTOR_^1_%INQ 1_^1_%STA- (ZERO),Q_$TO MASS STORAGE_^1_%RTJ* SETC1_$SET A,Q, AND WS_^1€€_%ENQ MFWRT_(MFWRITE WRITE SECTOR BACK_^1_%ENA 1_,ONTO MASS STORAGE_^1_%RTJ READA4+MASUP_^1_%LDA* KILEXT_^1_%SAP MASSP1_^1_%CLR A_^1_%STA SWTCH_^1MASSP1 LDQ* QG_^1_%JMP* (MASSUP)_^1QG_#ADC 0_^1KILEXT NUM 0_^1_%SPC 2_^1_'EQU SETC(*-MASSUP)_^1_%SPC 2_^1***********************************************************E************_^1SETC1 0_"0_,SETUP PARAMETERS FOR READ_^1_%ENA€€ 96_(READ 96 WORD SECTOR_^1_%STA- WS,I_^1_%LDA- BUFF1C,I_^1_%LDQ =XZSEC_'LOC OF ZSEC_^1_%ADQ- I_+TO Q_^1_%JMP* (SETC1)_^1_%EJT_]_^1_%SPC 2_^1_%EQU EESREL(*-AREA3)_^1_%SPC 2_^1* **************************************************_^1* THIS ROUTINE SEARCHES THE PROGRAM DIRECTORY FOR_^1* EMPTY ENTRIES. SECTOR NUMBER OF DIRECTORY BLOCK_^1* IS IN ZSEC,ZSEC+1, POINTER TO ENTRY IN Q, A€€=0_^1* IF ONE IS FOUND. A IS NONZERO IF NONE FOUND._^1EES_"0_"0_^1_%ENA_#0_^1_%STA*_"TTI_^1_%STA-_"ZSEC,I_^1_%ENQ SUR1_^1_%ENA 1_^1_%RTJ READA4+EESREL_^1OIX2K ENA_#96_^1_%STA-_"WS,I_'NUMBER OF WORDS FOR READ_^1_%LDA- ZS+1,I_#ADDR OF INPUT BUFFER_^1_%LDQ- ZS,I_%LOC OF MASS STG SECT NBR_^1_%STQ- QSAVA4,I_^1_%STA- ASAVA4,I_^1_%ENQ 0_^1_%ENA 1_^1_%RTJ READA4+EESREL_^1_%LDA- ZSEC€€+1,I_!CURR PROG DIR SECT_^1_%STA- CSSAVE,I_^1_%LDA (BFC95+EESREL)_^1_%SAN ITT_^1_%RAO*_"TTI_(LAST SECT. TTI ON_^1_%JMP* ITT1_)DO NOT CLOBBER ZSEC+1_^1ITT_"STA- ZSEC+1,I_$NOT LAST. SECT NO OF NEXT_^1ITT1_!LDQ- QS,I_)POINT TO ENT IN SECT_^1OIX3K LDA- BUFF1C,I_$BUFF1C BUFFER_^1_%AAQ A_^1_%STA* HOLD1_^1_%LDA* (HOLD1)_^1_%SAN TEM_^1_%JMP*_"EMT_(EMTY ENTRY._^1TEM_"INQ 5_,SET FOR NE€€XT ENT_^1_%STQ- QS,I_^1_%TRQ_#A_*TEST IF SECT COMPLETE_^1_%INA_#-89_^1_%SAZ TEMA_^1_%SAP META_^1TEMA_!JMP* OIX3K_(SECTOR NOT DONE. DO NEXT_^1META_!LDA* TTI_*TEST IF LAST SECTOR_^1_%ENQ_#0_^1_%STQ-_"QS,I_'RESET POINTER (QS)_^1_%SAN QSK_^1_%JMP*_"OIX2K_%NOT LAST. GO DO NEXT SECT_^1QSK_"JMP* (EES)_(RETURN_^1EMT_"TRQ_#A_^1_%STA-_"QS,I_^1_%ENA 0_,A=0 TO INDICATE AN EMPTY RETURN_^1_%€€JMP*_"(EES)_%RETURN_^1TTI_"NUM 0_^1HOLD1 ADC 0_^1_%EJT_]_^1_%EQU AINLOC(*-AREA3)_^1AINRBL 0_"0_^1_%LDA IOTAB+2+AINLOC_^1_%ALS 4_^1_%RTJ* LODR_^1_%JMP* (AINRBL)_^1_%EQU AINLOD(*-AINRBL)_^1LODR_!0_"0_,SUBROUTINE TO CALL LOADER A HAS INPUT COMMAND_^1_%STQ* LDRT1_^1_%LDQ- I_,SAVE I REGISTER FOR RETURN_^1_%STQ* LDRI_^1_%RTJ* LDRET_^1_%STQ* LDRTQ_(SAVE Q FROM LOADER_^1_%LDQ- $EE_^€€1_%SPB 0_^1_%EIN_!0_^1_%LDQ- I_,GET POINTER TO PARAMETER LOADER PASSES_^1_%STQ* LODTM_)AND SAVE_^1_%STA* MVCL1+1_'LOADER BUFFER ADDR(MON CONTROL STMT)_^1_%RTJ* (SWAP65)_%CLEAR UNPIO SWITCH_^1_%LDQ* LDRI_*AND RESTORE I TO_^1_%STQ- I_/BASE OF LIBEDT DATA LOC_^1_%LDA* MVCL1+1_^1_%SAN 1_^1_%JMP* MVCL2_(A=0 GOOD AND NO CONTROL STMT_^1_%EOR- NZERO_^1_%SAN ALODRA_^1_%ENA 20_+A=-0 IRR€€ECOVERABLE ERROR ALL CASES_^1_%ENQ 2_^1_%JMP TRANF+AINLOC_^1ALODRA LDQ* LDRTA_(IS THSI A LOOK-UP ENTRY POINT_%**MSOS4.0_^1_%INQ -9_+FUNCTION_;**MSOS4.0_^1_%SQN 1_P**MSOS4.0_^1_%JMP* MVCL2_(YES_@**MSOS4.0_^1_%ENQ 15_O**MSOS4.0_^1MVCL1 LDA+ 0,Q_*MOVE TO LIBEDT_^1_%STA- PIBUFF,B_%BUFFER_^1_%INQ -1_^1_%SQM MVCL3_L**MSOS4.0_^1_%JMP* MVCL1_^1MVCL3 LDA- PIBUFF,I_$CONPLEMENT BUFFE€€R ADDRESS_***MSOS4.0_^1_%TCA A_,SO THAT ANOTHER CONTROL CARD_'**MSOS4.0_^1_%STA- PIBUFF,I_$ISN,T READ_9**MSOS4.0_^1MVCL2 LDQ* LODTM_(GET PARAM POINTER_^1_%LDA- (ZERO),Q_I**MSOS4.0*_^1_%STA- SSEC,I_(TO LIBDDT DATA LOC_^1_%LDA- 1,Q_*MOVE LENGTH_^1_%STA- NOWLB,I_'TO LIBEDT DATA LOC_^1MVCL6 RTJ JKILL+AINLOC_^1_%LDQ* LDRTQ_(Q FROM LOADER_^1_%LDA* MVCL1+1_%RETURN A FOR USE IF ENTRY P€€OINT_#**MSOS4.0_^1_%JMP* (LODR)_^1LDRET 0_"0_^1LODP_!STA* LDRTA_^1_%LDQ* LOADPP_^1_%SQZ 1_,CHECK IF LOADER IN CORE_^1_%JMP* LODRB_^1_%LDA- TEMPF7,I_$ZERO IS NOT IN SET_2**MSOS4.0_^1_%STA- $ED_*TEMPORARY HIGHEST AND_^1_%LDA- $F6_,LOWEST_^1_%STA- $EC_/UNPROTECTED LOCATION_^1_%LDQ* LDPD_^1_%ADQ- $EB_^1_%LDA- 4,Q_*GET LOADER_^1_%STA* NWD_+SIZE_^1_%TCA A_,COMPUTE_^1_%ADD- $F6_+FIRST€€ ADDR OF LOADER_^1_%STA* LLOC_)LOADER LOCATION_^1_%STA* LOADPP_^1_%STA LOADIN_K**MSOS4.0_^1_%STA* LODPL1+1_^1_%LDA- 6,Q_*MSB IN Q LSB IN A_^1_%LDQ- 5,Q_^1_%RAO* (UNIO65)_$SET UNPIO SWITCH_^1_%RTJ* READMM_'READ LOADER FROM MASS STORAGE_^1_%RTJ* (SWAP65)_$CLEAR UNPIO SWITCH_^1LODRB LDQ* LDRET_^1_%STQ JPRET1_'PATCH RETUNN IN TRVEC_^1_%LDQ =XJPRETN_$RETURN FROM LOADER TO JPRETN I€€N TRVEC_^1_%STQ JPRET_(PATCH PRESET TABLE_^1_%STQ- $EE_*CLEAR PROTECT BIT FOR_^1_%CPB 0_-RETURN LOCATION FROM LOADER_^1_%LDQ* LDRT1_)SET UP A AND Q_^1_%LDA* LDRTA_*FOR LOADER_^1_%RAO* (UNIO65)_'SET UNPIO SWITCH_^1LODPL1 JMP+ 0_^1LOADPP NUM 0_^1LDPD_!ADC LOADSD_K**MSOS4.0*_^1LODTM NUM 0_^1LDRI_!NUM 0_^1UNIO65 ADC UNPIO_(POINTER TO UNPIO SWITCH_^1SWAP65 ADC SWAPCK_'POINTER TO€€ SWAPCK SWITCH_^1LDRTA NUM 0_^1LDRTQ NUM 0_^1LDRT1 NUM 0_^1READMM 0_#0_^1_%STA* STS+1_^1_%STQ* STS_^1_%RTJ- ($F4)_^1_%NUM $4800,0_J**MSOS4.0_^1THD_"NUM $0000,$8C2_^1NWD_"NUM 0_^1LLOC_!NUM 0_^1STS_"NUM 0,0_^1_%LDA* THD_*WAIT FOR COMPLETION_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* (READMM)_^1_%EJT_]_^1CFLG_!NUM 0_^1SECCT NUM 0_^1SECREM NUM 0_^1_%EQU MOVMM(*-AINRBL)_^1*_]_^1*_€€$*_"THIS SUBROUTINE PERFORMS A MASS STORAGE TO MASS STORAGE_^1*_*TRANSFER ON ENTRY A CONTAINS SECTOR TO MOVE TO,_^1*_*Q CONTAINS SECTOR TO MOVE FROM THE PROGRAM USES UNPROTECTED_^1*_*CORE AS THE BUFFER_^1MVMM_!0_"0_^1_%STA* SECTO_(SECTOR TO MOVE TO_^1_%STQ* SECFM_(SECTOR TO MOVE FROM_^1_%LDA- BUFF1B,I_I**MSOS4.0*_^1_%STA* STBUF_*UP CORE_^1_%STA* STBUFA_^1_%TCA A_^1_%ADD- $F6_^1_%I€€NA -1_^1_%ENQ 0_^1_%DVI- NSIX,I_^1_%STA* SECCT_(NO. SECTORS UNPROTECTED CAN HOLD_^1_%MUI- NSIX,I_'LENGTH IN_^1_%STA* BUFLN_)WORDS_^1_%STA* BUFLNA_^1_%LDA- WS,I_)INITIALIZE NO. OF SECTORS_^1_%STA* SECREM_(REMAINING CELL_^1MVMMD LDA* SECREM_^1_%SUB* SECCT_^1_%STA* CFLG_)SET COMPLETION FLAG_^1_%SAM MVMMB_^1_%STA* SECREM_'COUNT DOWN SECREM CELL_^1_%JMP* MVMMA_)MORE THAN ONE BUFFER €€LEFT_^1MVMMB LDA* SECREM_'LESS THAN ONE BUFFER LEFT_^1_%MUI- NSIX,I_(COMPUTE_^1_%STA* BUFLN_*LENGTH OF MOVE_^1_%STA* BUFLNA_^1MVMMA RTJ* MOVR_^1_%RTJ* MOVW_^1_%LDA* CFLG_^1_%SAM MVMMC_^1_%LDA* SECTO_(UPDATE ADDRESS OF_^1_%ADD* SECCT_)SECTOR TO MOVE TO_^1_%STA* SECTO_*AND SECTOR_^1_%LDA* SECFM_+TO MOVE FROM_^1_%ADD* SECCT_,BY NUMBER OF SECTORS_^1_%STA* SECFM_,IN BUFFER WRITTEN_^1€€_%LDA* SECREM_^1_%JMP* MVMMD_^1MVMMC JMP* (MVMM)_^1MOVR_!0_"0_,READ FROM MM INTO CORE_^1_%LDA- $C2_*IS LIBRARY DISK SAME_/**MSOS4.0*_^1_%SUB- $B3_*AS SCRATCH DISK_4**MSOS4.0*_^1_%SAZ LIBDSK_'YES CONTINUE_7**MSOS4.0*_^1_%LDA IOTAB+AINLOC NO,FILL LOGICAL UNIT SLOT_***MSOS4.0*_^1_%STA* BUFLN-1_%WITH L.U. OF SCRATCH DISK_***MSOS4.0*_^1LIBDSK RTJ JKILL+AINLOC CHECK FOR JOB BEING T€€ERMINATED_$**MSOS4.0*_^1_%RAO* (UNIO65)_^1_%RTJ- ($F4)_)PERFORM READ_^1_%NUM $4800_L**MSOS4.0_^1COMPLE NUM 0_^1_%NUM 0_^1_%NUM $8C2_^1BUFLN NUM 0_^1STBUF NUM 0_^1_%NUM 0_^1SECFM NUM 0_^1MOVRB LDA* COMPLE+1_^1_%SAZ MOVRA_^1_%JMP* MOVRB_^1MOVRA RTJ* (SWAP65)_^1_%JMP* (MOVR)_^1MOVW_!0_"0_,WRITE FROM CORE TO MM_^1_%RTJ JKILL+AINLOC_^1_%RAO* (UNIO65)_^1_%RTJ- ($F4)_(PERFO€€RM WRITE_^1_%NUM $4C00_L**MSOS4.0_^1COMPL NUM 0_^1_%NUM 0_^1_%NUM $8C2_^1BUFLNA NUM 0_^1STBUFA NUM 0_^1_%NUM 0_^1SECTO NUM 0_^1MOVWB LDA* COMPL+1_^1_%SAZ MOVWA_^1_%JMP* MOVWB_^1MOVWA RTJ* (SWAP65)_^1_%JMP* (MOVW)_^1_%EJT_]_^1*_\**MSOS4.0_^1*_$ROUTINE TO UPDATE SYSTEM DIRECTORY ENTRIES_,**MSOS4.0*_^1*_\**MSOS4.0_^1_%EQU ST4Q6B(*-AREA3)_^1AINS46 0_"0_^1_%STQ* S46DIR+1_$€€Q POINTS TO DIRECTORY ENTRY IN CORE_^1_%RTJ* S4Q6S_^1S46SC 0_"0_^1_%0_"0_^1S4Q6S 0_"0_^1_%TRQ A_^1S4Q6SA ENQ 0_^1_%DVI- NSIX,I_^1_%STQ* S46TM_(SAVE REMAINDER_^1_%ADD- SYSTEM,I_$SECTOR ON WHICH SYSTEM RESIDES_^1_%STA* S46SC+1_'SEC LOC OF DIR ENTRY_^1_%ENA 96_^1_%STA- WS,I_^1_%LDA- BUFF1A,I_'Z HAS ADDRESS OF_^1_%STA- ASAVA4,I_'INPUT BUFFER_^1_%LDQ* S4Q6S_(Q HAS LOC-1 OF DIRECTOR€€Y ENTRY_^1_%STQ- QSAVA4,I_^1_%ENQ 0_^1_%ENA 1_^1_%RTJ READA4+ST4Q6B READ SECTOR INTO BUFFER_^1_%LDQ- BUFF1A,I_$LOCATION_^1_%ADQ* S46TM_*TO MOVE_^1S46DIR LDA+ 0_,MOVE DIR_^1S46STR STA- (ZERO),Q_'ENTRY INTO BUFFER_^1_%LDA* S46CTR_^1_%INA -2_*CHECK TO ZERO_^1_%SAN 1_/THREAD WORD_^1_%STA- (ZERO),Q_^1S46B_!ENQ MFWRT_^1_%ENA 1_^1_%RTJ READA4+ST4Q6B_^1_%RAO* S46DIR+1_^1_%LDA* S46€€CTR_%ALL_^1_%INA -6_,WORDS_^1_%SAP S46X_,MOVED_^1_%RAO* S46CTR_(NO GO BACK FOR NEXT_^1S46BA LDA* S46DIR+1_^1_%JMP* S4Q6SA_^1S46X_!JMP* (AINS46)_^1S46CTR 0_"0_^1S46TM NUM 0_^1_%EJT_]_^1**********************************************************************_^1*_]_$*_^1*_]_$*_^1*_8AREA 4 SUBROUTINES_6*_^1*_]_$*_^1*_]_$*_^1*********************************************************€€*************_^1_%SPC 4_^1* **************************************************_^1* THIS ROUTINE READS ONE SECTOR FROM A MASS_^1* STORAGE UNIT. THE ADDRESS-1 OF THE SECTOR_^1* NUMBER MUST BE IN Q, THE ADDRESS_!OF THE_^1* INPUT BUFFER MUST BE IN A._^1* IF A 60 WORD READ IS DESIRED, ENTER AT_^1* MFREAD. IF A 96 WORD READ IS DESIRED ENTER_^1* AT MREAD._^1* Q15 = 1 SIGNIFIES SEPARATE S€€CRATCH UNIT_^1* Q15 = 0 SIGNIFIES LIBRARY UNIT_^1_%EQU MFRREL(*-AREA4)_^1MFREAD 0_"0_^1_%STA* STAD_)BEGIN ADDR. OF BUFFER_^1_%RTJ JKILL+MFRREL_^1_%LDA- WS,I_^1_%STA*_"NOWK_%NUMBER OF WORDS TO READ_^1_(SQM_%SCRUNT-*-1_^1_%LDA IOTAB+1+MFRREL Q15=0 LIBRARY UNIT_^1_(STA*_$NOWK-1_^1_(JMP*_$BEG1_^1SCRUNT LDA IOTAB+MFRREL Q15=1 SCRATCH UNIT_^1_(STA*_$NOWK-1_^1_(LDA-_$H8000_/REMOVE €€BIT 15_^1_(EAQ_%Q_^1BEG1_!LDA- (ZERO),Q_$PICK UP SECTOR NUMBER_^1_%STA*_"SNM_(AND INSERT AT END OF REQUEST_^1_%LDA-_"1,Q_^1_%STA*_"SNM+1_^1_%RAO UNPIO_(SET UNPIO SWITCH_^1_%RTJ-_"($F4)_%PERFORM READ_^1_%NUM $4800_(USE PART 1 REQUEST ALWAYS_^1COMPXP NUM_#0_^1_%NUM_#0_^1_%NUM_#$8C2_^1NOWK_!NUM_#0_^1STAD_!NUM_#0_^1SNM_"NUM_#0_*SECTOR NUMBER_^1_%NUM_#0_^1MF2_"LDA* COMPXP+1_$TEST IF C€€OMPL HAS OCCURE_^1_%SAZ MF1_^1_%JMP* MF2_*NOT COMPLETE_^1MF1_"RTJ SWAPCK_'CLEAR UNPIO SWITCH_^1_%JMP*_"(MFREAD)_"COMPLETE_^1* **************************************************_^1* THIS ROUTINE WRITES N WORDS ON A MASSTORAGE DEVICE_^1* THE ADDRESS OF THE WORD CONTAINING THE SECTOR_^1* NUMBER MUST BE IN Q, THE ADDRESS OF THE OUTPUT_^1* BUFFER MUST BE IN A, THE NUMBER OF WORDS TO W€€RITE_^1* IN WS, ORDINAL 17._^1_%EQU MFWRT(*-MFREAD)_^1MFWRIT 0_"0_^1_%STA*_"ADK_(BEGINING ADDR OF BUFF_^1_%RTJ JKILL+MFRREL_^1_%LDQ-_"1,Q_^1_%STQ*_"SECK+1_$ADDRES OF SECT NUMB._^1_%LDA-_"WS,I_^1_%LDQ- FILIN,I_^1_%SQZ NTZERO_^1_%SAN NTZERO_(NO. OF WORDS OK_4*428****_^1_%STA- FILIN,I_%CLEAR *N(FILE) PROCESSOR IN FLAG_^1_%ENA 7_-PRINT L07 ERROR_6*428***_^1_%ENQ 2_,MESSAGE_^1_%JM€€P TRANF+MFRREL_^1NTZERO STA* NWK_Q*428_^1_%LDA IOTAB+1+MFRREL_^1_%STA* NWK-1_^1_%RAO UNPIO_(SET UNPIO SWITCH_^1_%RTJ-_"($F4)_%PERFORM WRITE_^1_%NUM $4C00_L**MSOS4.0*_^1CPXK_!NUM_#0,0_^1_%NUM_#$8C2_^1NWK_"NUM_#0_^1ADK_"NUM_#0_^1SECK_!NUM_#0,0_^1SECKA LDA* CPXK+1_'COMPLETION LOOP_^1_%SAZ SUNNY_^1_%JMP* SECKA_^1SUNNY RTJ SWAPCK_'CLEAR UNPIO SWITCH_^1_%JMP*_"(MFWRIT)_^1********€€*************************************************************_^1_%SPC 2_^1_%EQU OPNEW1(*-MFREAD)_^1_%SPC 2_^1*_]_^1*_*THIS SUBROUTINE WRITES ONE SECTOR FROM_^1*_/RUFF1A ONTO M.S._^1OPNEW 0_"0_^1_%ENA 96_^1_%STA- WS,I_^1_%LDA INBFAD+MFRREL_^1_%LDQ- SICID,I_%ABS. ADDR. OF SEC. NO._^1_%RTJ* MFWRIT_^1_%JMP* (OPNEW)_^1_%SPC 2_^1_%EQU RSAT1(*-MFREAD)_^1*_]_^1*_$THIS SUBROUTINE €€READS ONE SECTOR OF SAT_^1*_.FROM M.S. INTO UNPROTECTED CORE_^1*_]_^1RSAT_!0_"0_^1_%ENA 96_^1_%STA- WS,I_^1_%LDA- BUF1S,I_%ABS. ADDR. OF INPUT BUFFER_^1_%LDQ- SECXID,I_$ABS. ADDR. OF_^1_'RTJ* MFREAD_^1_%JMP* (RSAT)_^1_%SPC 2_^1_%EQU WSAT1(*-MFREAD)_^1*_]_^1*_$THIS SUBROUTINE WRITES ONE SECTOR INTO SAT_^1*_]_^1*_]_^1WSAT_!0_"0_^1_%ENA 96_^1_%STA- WS,I_^1_%LDA- BUF1S,I_%ABS. AD€€DR. OF INPUT BUFFER_^1_%LDQ- SECXID,I_^1_%RTJ* MFWRIT_^1_%JMP* (WSAT)_^1_%EJT_]_^1_%EQU SUR1(*-MFREAD)_^1_%SPC 2_^1* **************************************************_^1SUR_"0_"0_^1_%LDA-_"$C4_(BEG SECT NO OF DIR_^1_%STA-_"ZSEC+1,I_^1_%LDA- I_^1_%ADD =XZSEC_'A(ZSEC)_^1_%STA-_"ZS,I_^1_%LDA- BUFF1C,I_$A(BUFF1C)_^1_%STA-_"ZS+1,I_$(BUFF1C)_^1_%JMP*_"(SUR)_^1_%SPC 2_^1_%EQU ONSE(*€€-MFREAD)_^1_%SPC 2_^1* **************************************************_^1* THIS ROUTINE INSERTS AN ENTRY POINT INTO THE_^1* DIRECTORY, ONE ENTRY POINT AT A TIME._^1OINSE 0_"0_^1_%LDA- BUFF1C,I_^1_%STA* HOLD4_^1_%ENQ 0_^1_%ENA 8_^1_%RTJ READA3+MFRREL_^1_%SAZ SEE_^1_%JMP*_"ENDA_'NO EMTY FOUND. ADD AT END_^1SEE_"STQ- WS+1,I_'SAVE EMTY ENT POINTER_^1OINLP ENQ_#2_^1MUVE_!LDA €€(BUF1A+MFRREL),Q_^1_%STQ-_"TTEMP+1,I_^1_%ADQ-_"WS+1,I_$SET TO STORE IN DIR SECT_^1_%STA* (HOLD4),Q_$STORE NAME IN ENTRY (BUFF1C)_^1_%LDQ-_"TTEMP+1,I_^1_%INQ_#-1_^1_%SQM MVE_*TRANSFER COMPLETE_^1_%JMP* MUVE_^1MVE_"LDA- FILIN,I_^1_%SAN 2_^1_%LDA- ENTSEC+1,I_"STARTING SECT. NO. OF PROG._^1_%JMP* MVE1_^1_%ENQ 3_^1_%ADQ- WS+1,I_^1_%SET A_^1_%STA* (HOLD4),Q_^1_%LDA- SIC,I_^1MVE1_!LDQ€€- WS+1,I_^1_%STA (BFC4+MFRREL),Q_^1_%LDA (BFC93+MFRREL)_!CHECK IF LAST SECT._^1_%SAZ ARND-*-1_^1_%INA_#-5_)YES. INCR NO OF WORDS_^1_%STA (BFC93+MFRREL)_"CHECK IF LAST SECTOR_^1ARND_!ENA 96_^1_%STA-_"WS,I_^1_%LDA- CSSAVE,I_$PREV PROG DIR SECT_^1_%STA- ZSEC+1,I_^1_%LDA-_"ZS+1,I_^1_%LDQ- ZS,I_%ABS ADDR OF LAST PROG DIR SECT_^1_%RTJ* MFWRIT_^1_%JMP*_"(OINSE)_^1ENDA_!LDA- NUSECT,I_€€^1_%SAZ ENDB_^1_%ENA 0_^1_%STA- FILIN,I_^1ENDB_!ENQ FELD1_(FELD FIND END OF DIRECTORY_^1_%ENA 5_^1_%RTJ READA3+MFRREL_^1_%LDA- NUSECT,I_^1_%STA- FILIN,I_^1_%RTJ* WSAT_)WRITE S.A.T. TO LIBRARY_^1_%LDA- LNOR,I_^1_%STA-_"WS+1,I_^1_%ENA 96_^1_%STA-_"WS,I_^1_%LDA-_"LASTAD,I_"THESE TWO SET BY FELD_^1_%LDQ-_"LSECAD,I_^1_%STQ- ZS,I_%ABS ADDR OF LAST PROG DIR SECT_^1_%RTJ MFREAD_^1_€€%JMP*_"OINLP_^1OKLOK NUM_!0_^1HOLD4 ADC 0_^1_%EJT_]_^1* **************************************************_^1* THIS ROUTINE PICKS UP INDIVIDUAL PARAMETERS_^1* FROM THE REQUEST. THIS ROUTINE IS OPERATED BY_^1* WHATEVER MODULE IS ACTIVE, BUT THIS ROUTINE CAN_^1* ONLY BE RE-INITIALIZED BY LIBEDT CONTROL._^1_%EQU PRKREL(*-AREA4)_^1PPRK_!0_"0_^1_%LDA- ADDCT1,I_^1_%STA* ADDCT_^1_%EN€€A 1_^1_%STA* C_^1_%ENA_#0_^1_%STA*_"CNK_^1_%STA*_"NSK_^1_%STA*_"AS_^1_%STA*_"AD1CT_^1_%LDA- HFFFF_(INITIALIZE PARAMETER_^1_%ENQ_#6_*BUCKET TO ALL ONES._^1PPRK1 STA- XXK,B_^1_%INQ_#-1_^1_%SQM LPK1_^1_%JMP* PPRK1_^1LPK1_!LDQ*_"ADDCT_%CHECK FOR LEFT OR RIGHT_^1_%QLS_#15_)CHARACTER._^1_%SQM LPK1A_^1_%LDA- (ZERO),Q_$PICK UP NEXT CHARACTER_^1_%ARS_#8_^1_%JMP* LPK1B_^1LPK1A LDA- H7FF€€F_^1_%LAQ Q_^1_%LDA- (ZERO),Q_^1_%ALS 8_^1_%ARS_#8_^1LPK1B RAO* ADDCT_(INCREMENT ADDCT_^1_%RAO*_"AD1CT_^1_%STA*_"KTEM_'STORE TEMPORARY_^1_%SUB*_"COMMA_%TEST FOR A COMMA_^1_%SAN LPK1C_^1_%JMP*_"I1_)COMMA_^1LPK1C LDA* KTEM_^1_%SUB* BLANK1_^1_%SAN LPK1D_^1_%JMP*_"I1_)BLANK TERMIN STATEMENT_^1LPK1D LDQ* KTEM_)NO. NOT A COMMA. TEST_^1_%LRS_#4_*FOR NUMERIC_^1_%INQ_#-3_^1_%SQN_#X20€€-*-1_^1*_81 CARD DELETED_^1_%LLS 4_^1_%JMP* E2_+GO PROCESS NUM._^1X20_"INQ 1_,CHECK IF CHARACTER $20 TO $2F_)61*1300_^1_%SQN LPK1E_(BUT NOT A COMMA_761*1300_^1_%LLS 4_,PERMIT ASTERIKS TO PASS_/61*1300_^1_%INQ -10_Q61*1300_^1_%SQZ LPK1E_O61*1300_^1_%JMP* E5_+YES,OUTPUT AN ERROR L05_/61*1300_^1LPK1E LDA* KTEM_)TEST FOR $FF_:61*1300_^1_%SAP X20A_^1_%JMP* I1_,NON- ZERO PASS NEX€€T COMMA_^1X20A_!STA* AS_^1_%LDA* CNK_*TEST FOR MORE THAN 6 CHAR_^1_%INA -6_^1_%SAM B2_^1_%JMP* C3_+YES, MORE_^1B2_#ENQ 0_-NO LESS THAN 6 CHAR. OR EQUAL_^1_%LDA* NSK_^1_%SAZ B2A_^1_%JMP* C3_^1B2A_"LDA* CNK_*CALCULATE WHICH WORD THIS_^1_%DVI- H2_,CHAR. POSITION THIS_^1_%STA* KTEM+1_'CHAR. HAS IN XXK_^1_%LDQ* AD1CT_^1_%ENA 0_^1_%LRS 1_^1_%SAM X5B-*-1_^1_%LDA* KTEM_)INSETT AND S€€TORE FOR_^1_%LDQ* KTEM+1_'RIGHT HAND POSITION IN_^1_%LDQ- XXK,B_(THE WORD_^1_%QRS 8_^1_%ALS 8_^1_%LRS 8_^1_%LDQ* KTEM+1_^1_%STA- XXK,B_^1_%JMP* X5A_^1X5B_"LDA* KTEM_)INSERT AND STORE FOR_^1_%LDQ* KTEM+1_'LEFT HAND POSITON IN_^1_%LDQ- XXK,B_^1_%QLS 8_^1_%LLS 8_^1_%LDQ* KTEM+1_^1_%STA- XXK,B_^1X5A_"RAO* CNK_*INCREMENT CHARACTER CNT_^1_%JMP* LPK1_)COUNT GET NEXT ONE._^1I1_#LDA*€€ NSK_*NO. WAS TERMINATING COMMA_^1_%SAZ I1A_*WAS PARAMETER MUMERIC_^1_%JMP* A3_,YES._^1I1A_%LDQ* CNK_(NO NUMBER OF CHAR INTO Q_^1_'LDA* ADDCT_'SAVE ADDRESS POINTER_^1_%STA- ADDCT1,I_^1_%ENA 0_^1*_81 CARD DELETED_^1_%JMP* (PPRK)_'RETURN_^1NSK_"ADC 0_,NUMERIC SWITCH_^1CNK_"ADC 0_,CHARACTER COUNT_^1ADDCT ADC 0_-ADDRESS POINTER_^1AD1CT ADC 0_^1KTEM_!ADC 0,0_*TEMP STORAGE_^1AS_#€€ADC 0_,ALPHA SWITCH_^1COMMA NUM $2C_^1BLANK1 NUM $20_^1MSB_"ADC 0_-SECTOR NUMBER_^1T1_#ADC 0_^1C_$NUM 1_^1E2_#LDA* KTEM_^1_%INA -$3A_^1_%SAM E2B_^1E5_#ENA 5_,IMPROPER FIELD DELIMMITER_-61*1292_^1ERROUT ENQ 2_^1_%JMP TRANF+PRKREL_^1E2B_"LDA* AS_^1_%SAN E2A_^1_%JMP*_"G1_)NO_^1E2A_"JMP* X20A_)YES_C61*1292_^1C3_#ENA_#1_*ERONIOUS PARAMETER. EXIT_^1_%JMP* ERROUT_'ERROR NO. 1€€_^1A3_#ENA_#0_*CONVERT N NUMERIC DIGITS_^1_%STA*_"T1_^1_%STA*_"MSB_((ASCII) TO A BIN NUMBER_^1_%LDQ*_"CNK_^1_%INQ_#-1_^1_%STQ-_"TTEMP,I_^1LPKK_!SOV_#0_^1_%LDQ-_"TTEMP,I_^1_%LDA-_"XXK,B_^1_%ENQ_#0_^1_%MUI*_"C_^1_%ADD*_"T1_)ADD PREVIOUS DIGITS_^1_%STA*_"T1_)STORE BACK_^1_%SOV_#X6-*-1_^1LPKK1 LDA-_"TTEMP,I_^1_%INA_#-1_^1_%STA-_"TTEMP,I_^1_%SAM_#X8-*-1_^1_%LDA*_"C_^1_%ENQ_#0_^1_%MUI-€€ D10_^1_%STA*_"C_^1_%JMP*_"LPKK_'REPEAT WITH NEXT DIGIT_^1X6_#RAO*_"MSB_(INCREMENT SECOND WORD_^1_%JMP*_"LPKK_'NEXT DIGIT_^1X8_#JMP*_"LPKK2_^1G1_#LDA*_"CNK_(TEST FOR MORE THAN 7_^1_%INA -6_^1_%SAM_#X7-*-1_^1_%ENA_#2_*ERROR NUMB. 2_^1_%JMP* ERROUT_^1X7_#TRQ_#A_^1_%LDQ*_"CNK_^1_%STA-_"XXK,B_%STORE IN SIGN. POSIT._^1_%RAO* NSK_'SET NUMERIC COUNTER SWITCH_^1_%RAO*_"CNK_(INCREM. SIGNIF€€. POSIT._^1_%JMP_#LPK1_'NEXT CHARACTER_^1LPKK2 ENQ_#6_*COMPLETE NUMERIC PARAMETE_^1_%LDA- HFFFF_(ALL ONES INTO XXK BUFF_^1LPKK3 STA-_"XXK,B_^1_%INQ_#-1_^1_%SQM LPKK4_^1_%JMP*_"LPKK3_^1LPKK4 LDQ* CNK_*PUT NO. OF DIGITS INTO Q_^1_%LDA*_"MSB_(PUT NUMBER INTO XXK,XXK+1_^1_%STA-_"XXK,I_^1_%LDA*_"T1_^1_%STA-_"1,I_^1_%LDA* ADDCT_(SAVE ADDRESS POINTER_^1_%STA- ADDCT1,I_^1_%ENA_#1_*SET €€ A=1 FOR NUMERIC_^1_%JMP_#(PPRK)_$RETURN_^1_%SPC 2_^1_%EQU ZOUT(*-PPRK)_^1_%SPC 2_^1ZRQOUT ADC 0_^1_%LDA- BUFF1A,I_^1_%STA* HOLD8_^1_%ENQ 2_,PUT BLANKS IN XXK BUFFER_^1ZRQ_"LDA- XXK,B_^1_%SAP CHARQ-*-1_^1_%LDA =A_(TWO BLANK CHARACTERS_^1_%STA- XXK,B_%TO BUFFER WORD._^1_%SQZ XF1-*-1_"LAST WORD BEEN BLANKED_^1_%INQ -1_*NO,CONTINUE_^1_%JMP* ZRQ_^1CHARQ AND- HFF_*TEST FOR BLA€€NK RIGHT HALF CHARACTER_^1_%ALS 8_^1_%SAP XF1-*-1_"POS IMPLIES RH CHAR NON-BLANK_^1_%LDA- XXK,B_^1_%AND- HFF00_(FF00 MASK_^1_%INA $20_'CHARACTER BLANK_^1_%STA- XXK,B_'TO BUFFER WORD._^1XF1_"ENQ_#2_^1ZROQ_!LDA- XXK,B_$SAVE FILE NAME IN BUFF1A_^1_%STA* (HOLD8),Q_^1_%SQZ ZR1_^1_%INQ -1_^1_%JMP* ZROQ_^1HOLD8 ADC 0_^1ZR1_"JMP* (ZRQOUT)_^1_%EJT_]_^1_%SPC 2_^1_%EQU RINREL(*-AREA€€4)_^1_%SPC 2_^1* **************************************************_^1* THIS ROUTINE READS N-(I) WORDS FROM STAND INPUT_^1* OR OCM UNITS. INPUT BUFF ADDRESS MUST BE IN A,_^1* LENGTH IN WORDS IN WS._^1READIN 0_"0_^1_%STA*_"SADK_^1_%LDA- PDSN,I_^1_%STA* C0_^1_%LDA- NORD,I_^1_%STA* C1_^1_%SQZ 1_^1_(JMP*_$READG_^1_%RTJ JKILL+RINREL TEST FOR JOB-KILL ROUTINE_^1_%LDA IOTAB+2+RINREL€€_^1_(TRA_%Q_^1_(SUB-_$$C2_^1_(SAN_%SECCHK-*-1_^1_(LDA-_$$C1_1YES , STD INPUT IS LIBRARY UNIT_^1_(STA*_$C1_^1_(LDA-_$$C0_^1_(STA*_$C0_^1_(JMP*_$READG_^1SECCHK_!TRQ_%A_^1_(SUB-_$$B3_^1_(SAN_%READG-*-1_^1_(ENA_%0_3YES, STD INPUT IS SR UNIT_^1_(STA_%C0_^1_(INA_%1_^1_(STA*_$C1_^1READG ENQ_#2_^1_%LDA-_"WS,I_'NO OF WORDS_^1_%STA*_"LNGT_^1_%LDQ IOTAB+2+RINREL_^1_%STQ* LUNK_^1_%LDQ+ LOG1€€A,Q_"ADDRESS OF PHYSTB_^1_%LDA- 8,Q_'WORD CONTAINING CLASS CODE_^1_%ALS 5_^1_%AND- H7_^1_%INA -2_(MASS MEMORY DEVICE_^1_%SAZ YM-*-1_^1_%LDA =N$B00_^1_%STA* MSBMSS_^1_%STA* LSBMSS_^1_%JMP* REDGO_^1YM_#LDA* C0_+MSB_^1_%STA* MSBMSS_^1_%LDA* C1_(LSB_^1_%STA* LSBMSS_^1_%RAO- MSINP,I_^1REDGO LDA- FILIN,I_%FILE PROCESSOR IN_^1_%SAZ REDGO1_^1_%RTJ* MDECHK_'YES , CHECK INPUT MODE_^1RE€€DGO1 RAO* (UNPIOZ)_^1_%RTJ- ($F4)_$READ REQUEST_^1_%NUM $4800_L**MSOS4.0*_^1CPKXK NUM_#0_^1_%NUM_#0_^1LUNK_!NUM $08F9_$INPUT FROM INPUT DEVICE IN BINARY_^1LNGT_!NUM_#0_^1SADK_!NUM_#0_^1MSBMSS NOP 0_^1LSBMSS NOP 0_^1CPK1_!LDA* CPKXK+1_^1_%SAZ CPKK_^1_%JMP* CPK1_^1CPKK_!SOV 0_^1_%RAO* C1_+INCREMENT POINTER TO SCRATCH_^1_%SNO CPK2_^1_%STA* C1_^1_%RAO* C0_^1CPK2_!RTJ* (SWAPZ)_%€€RESET UNPIO SWITCH_^1_%LDA* C0_^1_%STA- PDSN,I_^1_%LDA* C1_^1_%STA- NORD,I_^1_%LDA* LUNK_^1_%LDQ* SADK_^1_%JMP*_"(READIN)_^1MDECHK 0_"0_^1_%LDA* LUNK_^1_%ALS 8_^1_%LDQ- RDREQ,I_^1_%QRS 8_^1_%LRS 8_^1_%STA* LUNK_^1_%JMP* (MDECHK)_^1C0_#ADC 0_^1C1_#ADC 0_^1UNPIOZ ADC UNPIO_^1SWAPZ ADC SWAPCK_^1_%EJT_]_^1* **************************************************_^1* THIS ROUTINE WRI€€TES TWO WORDS ON THE_^1* STANDARD OUTPUT COMMENT MEDIUM_^1* THE TWO WORDS TO WRITE IMMEDIATELY_^1* FOLLOW THE RTJ USED TO COME TO_^1* THIS ROUTINE._^1* Q CONTAINS THE NUMBER OF WORDS. KWRITE=OCM,OWRITE=_^1_%EQU KWRIT(*-AREA4)_^1KWRITE 0_"0_^1_%STQ* KWTMP_^1_%LDA IOTAB+6+KWRIT_^1_%AND- HFFF_^1_%EOR- INCOM_^1_%SAZ READR_^1_%JMP* OWRIT4_^1READR LDA IOTAB+5+KWRIT_^1KWRIT1 STA* N€€OWLK_^1_%LDA*_"KWRITE_$SET OUT BUFF ADDR_^1_%STA*_"NOWW+1_^1_%ADD* KWTMP_^1_%STA*_"KWRITE_^1_%LDQ* KWTMP_^1_%STQ*_"NOWW_'SET NO OF WORDS_^1_%RTJ-_"($F4)_%WRITE_^1_%NUM_#$C00,0,0_^1NOWLK NUM_#$18FC_^1NOWW_!NUM_#0,0_^1NOWW1 LDA* NOWLK-1_^1_%SAZ RDWRT_^1_%JMP* NOWW1_^1RDWRT JMP* (KWRITE)_^1_%SPC 2_^1_%EQU OWRIT(*-KWRITE)_^1OWRITE 0_"0_^1_%STQ* KWTMP_^1_%LDA*_"OWRITE_$SET RET €pADDR TO KWRITE_^1_%STA*_"KWRITE_^1OWRIT4 LDA IOTAB+4+KWRIT_^1_%JMP* KWRIT1_^1KWTMP NUM 0_^1_%END_#LIBEDT_^__pPLOAD1 CSY/ D03 P€1_%NAM LOAD1_(DECK-ID D03 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_*PROGRAM BASE-MSOS 4.0_^1_%SPC 1_^1_%EXT* BRANCH_^1_%EQU MASK1($42)_!(MASK1) = $7FFF_^1_%EQU MASK2($21)_!(MASK2) IS $8000_^1_%EQU IO($F4)_^1_%ENT LOAD_^1L€€OAD_!RTJ* PART1_^1_%ALF 2,LOAD_^1PART1 NUM $FFFF_^1_%STA* AINP_(PUT ENTRANCE PARAMETERS IN_^1_%STQ* QINP_*TEMPORARY STORAGE_^1_%JMP* PART2_^1AINP_!NUM $FFFF_^1QINP_!NUM $FFFF_^1PART2 RTJ CONBAS_^1_%NUM 0_^1_%SPC 10_^1_%EQU CONLEN(243)_^1_%BZS CONTAB(CONLEN)_^1_%SPC 2_^1*_]_^1*_]_^1*_]_^1*_$THESE EQUATES SET UP PAGE LENGTH AND AMOUNT OF PAGES_^1*_$RESERVED FOR THE ENTRY €€AND EXTERNAL TABLES_^1_%EQU SECTR(96)_^1_%EQU NUMSEC(2)_#NUMBER OF SECTORS IN A PAGE_^1_%EQU PGE(SECTR*NUMSEC) LENGTH OF PAGE ON MASS MEMORY_^1_%EQU FLAGS(3)_$NUMBER OF FLAGS PER PAGE_^1_%EQU LENGTH(PGE+FLAGS)_!LENGTH OF PAGE WITH CORE FLAGS_^1_%EQU HSHLGN(15)_"NUMBER OF PAGES IN HASH TABLE_^1_%EQU ENTLGN(25)_"NO OF PAGES IN HASH + OVERFLOW TABLES_^1_%EQU EXTLGN(25)_"NO OF €€PAGES IN EXTERNAL TABLE_^1_%EQU NUMBER(0)_#PAGE NO FLAG_^1_%EQU REFER(1)_$'NO OF TIMES REFERENCED' FLAG_^1_%EQU MODIFY(2)_#'PAGE HAS BEEN MODIFIED' FLAG_^1_%EQU ENTEXT(ENTLGN+EXTLGN)_^1_%EQU HSHENT(HSHLGN*PGE/5)_#NO OF POSSIBLE ENTERIES IN_^1*_?HASH TABLE_^1*_$THIS IS THE LENGTH OF THE TABLE WHERE ALL RELOCATABLE_^1*_$ABSOLUTIZED ADDRESSES OF $7FFF ARE STORED_^1_%EQU LNKLGN(1€€92)_^1*_]_^1_%ENT NUMBER_^1_%ENT REFER_^1_%ENT MODIFY_^1_%ENT LENGTH_^1_%ENT BITTBL_^1_%ENT LNKTBL_^1_%ENT TBLEND_^1_%ENT STRTBL_^1_%ENT NUMSEC_^1*_]_^1_%SPC 10_^1_%ORG CONTAB_^1_%SPC 10_^1*CONSTANT TABLE BLOCK, TABLE OF CONTENTS_^1_%SPC 2_^1*_1BEGIN CONTAB ENTRY 1_^1COMBAS ADC 0_-RELOC BASE FOR COMMON STORAGE_^1DATBAS ADC 0_-RELOC BASE FOR DATA STORAGE_^1PROBAS ADC €€0_-RELOC BASE FOR PROG CURR BEING LOADED_^1COMLIM ADC 0_-HIGHEST ADDR OF COMMON STORAGE + 1_^1DATLIM ADC 0_-HIGHEST ADDR OF CATA STORAGE + 1_^1CSQLIM ADC 0_-HIGHEST ADDR OF COMMAND SEQ STORAGE + 1_^1EXTCTR ADC ENTLGN*PGE_"POINTS TO NEXT AVAILABLE LOCATION IN EXT TBL_^1ENDSW ADC 0_-=1 IF LAST RELOC BYTE IN RBD OR BZS BLOCK_^1ABRLSW NUM 0_,0 IF ABS EXT, 1 IF RELATIVE EXTERNAL_€€^1*_1BEGIN CONTAB ENTRY 10_^1INPWRD ADC 0_-CONTAINS END OF COMMARD SEQ STORAGE_^1INPREL ADC 0_-CONTAINS REL FLAG FOR WORD OF COMMON SEQ STG_^1TBLNUM ADC ENTEXT*NUMSEC NO OF SECTORS RESERVED FOR ENT/EXT TBLS_^1ENTPNT ADC 0_-CONTAINS ADDR ASSOC WITH NAME IN ENT OR EXT B_^1LINK_!ADC 0_-CONTAINS ADDR ASSOC WITH NAME IN LOADER TABLE_^1INPCTR ADC 0_-USED TO ADDR LOC OF COMMAND SEQ€€ STORAGE_^1NOTLNK ADC 0_,WILL BE A 1 IF UNPATCHED EXTERNALS ARE FOUND_^1*_1BEGIN CONTAB ENTRY 17_^1ENDINP ADC 0_+LAST STORAGE ADDRESS + 1 AT_^1*_9END OF REL BINARY LOAD_^1BLANKS NUM $2020_)SPACES_^1SYMSTR ADC 0_,UASED BY SCAN_^1_%ADC 0_,UASED BY SCAN_^1_%ADC 0_,UASED BY SCAN_^1_%ADC 0_,UASED BY SCAN_^1BASE_!ADC 0_-BASE ADDRESS OF LEADER (OR INITIALIZER)_^1WRDCNT ADC 0_-ADD€€R OF CHAR REFERENCE COUNTER_^1*_1BEGIN CONTAB ENTRY 25_^1COUNT1 ADC 0_-COUNTER_^1BZSSW ADC 0_-USED BY SUBS COMMON TO RBDPRO AND BZSPRO = 1_^1BLKCNT ADC 0_-COUNTER_^1SW6_"ADC 0_-COUNTER_^1*_1BEGIN CONTAB ENTRY 29_^1ASAV_!ADC 0_-TEMPORARY STORAGE FOR A REGISTER_^1QSAV_!ADC 0_-TEMPORARY STORAGE FOR Q REGISTER_^1ISAV_!ADC 0_-TEMPORARY STORAGE FOR I REGISTER_^1XFRNAM ALF 3,_,ST€€ORAGE OF 6 CHARACTER XFR NAME_^1*_8BEGIN CONTAB ENTRY 35_^1_%BZS_!NAME(4)_%ASCII CODED INFORMATION_^1_%JMP+ ($7FFF)_4RETURN FROM TABSCH *LDR TAB SER_^1_%JMP TABSCH_5JUMP TO TABSCH_^1*_8BEGIN CONTAB ENTRY 43_^1HSHADR NUM 0_,RELATIVE ADDRESS OF ENT OR EXT ON MASS MEMORY_^1HASHCD NUM 0_,HASH CODE OF ENT OR EXT_^1TEMP_!NUM 0_^1TEMP1 NUM 0_^1UNPBAS NUM 0_,0 IF PROGRAM BASE IN UN€€PROTECTED CORE_^1NOTRAN NUM 0_,0 IF TRANSFER ADDRESS NEEDED_^1NOJMP NUM 0_,0 IF NO PRECEEDING JUMP INSTRUCT REQUIRED_^1FLGLGN ADC FLAGS_(NUMBER OF CORE FLAGS PER PAGE_^1BINASC ADC 0,0_^1*_8BEGIN CONTAB ENTRY 53_^1_%JMP+ ($7FFF)_4RETURN FROM PRINT3 *ERROR OUT R_^1_%JMP PRINT3_5JUMP TO PRINT3_^1INPXC0 ADC INPUT_^1INPXC1 ADC INPUT+1_'ADDRESS CONSTANT_^1PRINT2 RTJ- 54,I_)PRINT€€ ERROR MESSAGE USING_^1_%JMP STOP_*PRINT3, THEN TAKE ERROR EXT_^1INPXCC ADC INPUT-3_'ADDRESS CONSTANT_^1NXTINP JMP NXTBLK_5JUMP TO NXTBLK_^1*_8BEGIN CONTAB ENTRY 65_^1HEXDIG NUM $30,$31,$32,$33,$34,$35,$36,$37,$38,$39_^1_%NUM $41,$42,$43,$44,$45,$46_^1*_8BEGIN CONTAB ENTRY 81_^1_%JMP+ ($7FFF)_4RETURN FROM ADJOVF *ADDR ARITH_^1_%JMP ADJOVF_5JUMP TO ADJOVF_^1EXTPCH NUM 0_,NEG€€ATIVE IF EXTERNAL NOT PATCHED_^1NGRLSW NUM 0_,=0 FOR POS RELOC,=1 FOR NEG ADDRESS RELOC_^1ARIT15 NUM 0_,0/1 RESPECTIVELY FOR 15 OR 16 BIT ARITHMETIC_^1PRESET NUM 0_,NEGATIVE IF PRESET HAS NOT USED TO PATCH_^1*_:EXTERNAL_^1*_8BEGIN CONTAB ENTRY 89_^1_%JMP+ ($7FFF)_4RETURN FROM CONVRT *BIN TO ASC_^1_%JMP CONVRT_5JUMP TO CONVRT_^1*_8BEGIN CONTAB ENTRY 93_^1_%JMP+ ($7FFF)_4RETURN €€FROM PRINT4_^1_%JMP PRINT4_5JUMP TO PRINT4_^1_%JMP+ ($7FFF)_4RETURN FROM PRINT5_^1_%JMP PRINT5_5JUMP TO PRINT5_^1*_8BEGIN CONTAB ENTRY 101_^1AINPUT ADC 0_-STORE A UPON ENTERING LOADER_^1QINPUT ADC 0_-STORE Q UPON ENTERING LOADER_^1*_8BEGIN CONTAB ENTRY 103_^1_%JMP+ ($7FFF)_'RETURN FORM LINK1_^1_%JMP LINK1_)JUMP TO LINK1_^1MASINP ADC 0_,CONTAINS LOGICAL UNIT FOR MDRIV_^1HSHTBL€€ ADC HSHENT_'NUMBER OF HASH CODES (ENTRIES) IN HASH TBL_^1PGEWRT ADC 0_,1 IF ANY PAGE WRITTEN TO MASS STORAGE_^1LGEPGE ADC 0_,LARGEST CSQ PAGE THAT HAS BEEN STORED INTO_^1IGNORE ADC 0_,FLAG TO IGNORE DUP. ENT POINTS DURING CREP LOA_^1LNKSTR ADC 0_,ADDRESS OF LNKTBL_^1LNKCTR ADC 0_,NEXT AVAILABLE LOCATION IN LNKTBL_^1LNKEND ADC 0_,LAST ADDRESS + 1 IN LNKTBL_^1INPLUN ADC 0_-€€LOGICAL UNIT NO FOR INPUT_^1_%ADC 0_.(L AND A)_^1ADDR_!NUM 0_^1*_*BEGIN CONTAB ENTRY 118_^1EXTSTR ADC ENTLGN*PGE_#WORD ADDR OF START OF EXT TABLE_^1CORADR ADC 0_,CONTAINS ($F7)+1_^1PRODAT ADC 0_,NON ZERO IF PROTECTED DATA IS DECLARED_^1PROCOM ADC 0_,NON ZERO IF PROTECTED COMMON IS DECLARED_^1*_8BEGIN CONTAB ENTRY 122_^1PAGE_!ADC PGE_*LENGTH OF PAGE ON MASS MEMORY, MUST BE A_€€^1*_8MUTIPLE OF 96_^1CSQCTR ADC 0_-LAST ADDR OF PROG CMD SEQ STG +1_^1OVSTR ADC HSHLGN*PGE_"WORD ADDRESS OF OVERFLOW TABLE START_^1OVCTR ADC HSHLGN*PGE_"POINTS TO NXT AVAILABLE LOC. IN OVERFLOW TABLE_^1DIFCON ADC 0_-TEMPORARY STORAGE_^1ENTSEC ADC 0_,START SECT OF ENT/EXT TABLES_^1CSQSEC ADC 0_,START SECT OF COM SEQUENCE IMAGE_^1MAXPGE ADC 0_,MAX PAGE NUMBER THAT CAN BE USE€€D ON MASS MEM_^1NOPAGE ADC 0_-NUMBER OF PAGES IN UNPROTECTED CORE_^1PARBAS ADC 0_,ADDR OF START PARTITION_^1PARLIM ADC 0_,LWAD+1 OF LAST PARTITION_^1STRSEC ADC 0_,START SECTOR OF IMAGE ON MASS MEMORY_^1MSDWCT ADC 0_,NUMBER OF WORDS STORED ON MASS MEMORY_^1XFRADR ADC 0_,TRANSFER ADDRESS OF NAME FROM XFR BLOCK_^1*_8BEGIN CONTAB ENTRY 136_^1AHOLD ADC 0_-TEMPORARY STORAGE_^1QHO€€LD ADC 0_-TEMPORARY STORAGE_^1SECTOR ADC 96_,NUMBER WORDS IN SECTOR_^1_%JMP CMNXIT_^1EXTSWT ADC 0_,NON-ZERO IF PROCESSING EXT BLOCK_^1SAVEA ADC 0_^1EXTADR NUM 0_,TEMP OF EXT TBL START_^1TEMP3 ADC 0_,TEMP STORAGE_^1FLGBSE ADC 0_,BASE ADDRESS OF CORE FLAGS TABLE_^1PROGCT NUM 0_^1*_*BEGIN CONTAB ENTRY 147_^1INPUT BZS INPUT(97)_^1_%ORG*_^1_%SPC 10_^1_%EXT* ADJOVF_^1_%EXT€€* CONVRT_^1_%EXT* LINK1_^1_%EXT* NXTBLK_^1_%EXT* PRINT3_^1_%EXT* PRINT4_^1_%EXT* PRINT5_^1_%EXT* STOP_^1_%EXT* TABSCH_^1_%EXT* CMNXIT_^1_%SPC 5_^1_%EQU CQSADR(CSQCTR)_^1_%EQU CT1ADR(COUNT1)_^1_%EQU EPTADR(ENTPNT)_^1_%EQU INPADR(INPCTR)_^1_%EQU LNKADR(LINK)_^1_%EQU WRDADR(WRDCNT)_^1_%SPC 5_^1_%ENT CT1ADR_^1_%ENT CQSADR_^1_%ENT EPTADR_^1_%ENT INPADR_^1_%ENT ISAV_^1_%ENT €€ LNKADR_^1_%ENT NXTINP_^1_%ENT WRDADR_^1_%ENT SAVEA_^1_%EJT_]_^1LNKTBL BZS LNKTBL(LNKLGN)_^1_%EQU TBLEND(*)_^1BITTBL BZS BITTBL(HSHENT/16+1)_^1STRTBL BZS STRTBL(ENTEXT/16+1)_^1_%SPC 10_^1CONBAS NUM $FFFF_'(CONBAS) = 'CONTAB'-1_^1_%LDA* CONBAS_%PUT RELOCATION BASE OF_^1_%STA- I_-CONSTANT TABLE IN MEM INDEX_^1_%STA- 31,I_)AND IN ISAV_^1_%LDQ PART1_'PUT LOADER RELOCATION BASE€€_^1_%INQ -1_,IN BASE AND IN TABLIM_^1_%STQ- 23,I_^1_%LDA =XINPUT-LOAD STORE EXECUTION TIME VALUES_^1_%AAQ A_-OF ADDRESS CONSTANTS IN_^1_%STA- 57,I_)LOADER TABLE_^1_%INA 1_+- PUT 'INPUT'_!IN INPXC0_^1_%STA- 58,I_)PUT 'INPUT+1' IN INPXC1_^1_%INA -4_*- PUT'INPUT-3' IN INPXCC_^1_%STA- 62,I_^1_%LDA QINP_^1_%STA- 102,I_^1_%LDA AINP_^1_%STA- 101,I_^1_%LDQ- 47,I_)IF BASE NOT IN UNPR€€OTECTED, DO NOT_^1_%SQN CONBS2_(ISSUE CORE REQUEST_^1_%SAZ CONBS1_'ISSUE REQ FOR RBLOAD FUNCTION_^1_%INA -1_^1_%SAZ CONBS2_'SKIP AROUND IF ST BASE FUNCTION_^1_%INA -7_^1_%SAZ CONBS1_'ISSUE REQ FOR PROGLD FUNCTION_^1_%INA -2_^1_%SAN CONBS2_'ISSUE REQ FOR SBLOAD FUNCTION_^1CONBS1 ENQ 0_^1_%RTJ- (IO)_^1_%NUM $1600_^1_%INQ 1_,SET PROBAS TO CURRENT LOWER LIMIT +1_^1_%STQ- 3,I€\_^1_%STQ- 6,I_*SET CSQLIM TO (PROBAS)_^1CONBS2 JMP BRANCH_'JUMP TO BRANCH_^1_%END LOAD_^__\PBRNCH1 CSY/ D04 P€1_%NAM BRNCH1_'DECK-ID D04 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$DETERMINE CALL TYPE FOR RELO. LOADER_^1_%SPC 1_^1_%EXT* CDRIV_^1_%EXT* INPADR_%'INPADR' IS 'INPCTR' IN CONTAB_^1_%EXT* ISAV_^1_%EXT* LDRIV_^1_%EXT* LOADER_^€€1_%EXT* STBASE_^1_%EXT* LNKENT_^1_%EXT* LNKCR1_^1_%EXT* PROGLD,SBLOAD,SETDAT_^1_%EXT* ADRPRO,SIGNCK_^1_%EXT* BITTBL_^1_%EXT* PROSEC_^1_%EXT* PRINT6_^1_%EXT* WRTOUT_^1_%EXT* PATCH_^1_%EXT* DISKRD_^1*_]_^1_%EXT* LNKCRP_^1_%EXT* LNK01_J**MSOS 4.1**_^1_%ENT CMNXIT_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU PROCOM(121)_^1_%EQU PARLIM(132)_^1_%EQU CSQLIM(6)_^1_%€€EQU TEMP(45)_^1_%EQU HSHTBL(108)_^1_%EQU BITCNT(46)_^1_%EQU WRDCNT(144)_!SAME AS TEMP3_^1_%EQU TEMP3(144)_^1_%EQU PGEWRT(109)_^1_%EQU OVSTR(124)_^1_%EQU OVCTR(125)_^1_%EQU UNPBAS(47)_^1_%EQU PRINT2(59)_^1_%EQU PROBAS(3)_^1_%EQU PARBAS(131)_^1_%EQU MSDWCT(134)_^1_%EQU STRSEC(133)_^1_%EQU AINPUT(101)_^1_%EQU QINPUT(102)_^1_%EQU IGNORE(111)_^1_%EQU SAVEA(142)_^1_%EQU€€ XIT(139)_^1_%EQU MASINP(107)_^1_%EQU INPXC0(57)_^1_%EQU INPCTR(15)_^1_%EQU EXTSTR(118)_^1_%EQU PRINT3(54)_^1_%EQU SW6(28)_^1_%EQU INPWRD(10)_^1_%EQU TABSCH(40)_^1_%EQU QSAV(30)_^1_%EQU PRINT5(98)_^1_%EQU PRINT4(94)_^1_%EQU LINK(14)_^1_%EQU CSQSEC(128)_^1_%EQU LINBUF(147)_^1_%EQU BLKCTR(27)_^1_%EQU NOTLNK(16)_^1_%EQU INPLUN(115)_^1_%EQU INPXC1(58)_^1_%EQU INPUT(€€147)_^1_%EQU INPREL(11)_^1_%EQU ENTPNT(13)_^1_%EQU ENDINP(17)_^1_%EQU DATBAS(2)_^1_%EQU COUNT1(25)_^1_%EQU CONVRT(90)_^1_%EQU COMBAS(1)_^1_%EQU BLNCTR(27)_^1_%EQU BLANKS(18)_^1_%EQU BINASC(51)_^1_%EQU EXTCTR(7)_^1*_]_^1_%SPC 10_^1_%EQU IO($F4)_^1_%EQU MASK1($42)_!(MASK1) = $7FFF_^1_%ENT BRANCH_^1BRANCH ENA $F_^1_%AND- AINPUT,I_^1_%ALS 1_^1_%TRA Q_^1_%INA TYPELD-RB€€LOAD_^1_%SAP 1_+EITHER BRANCH ACCORIDNG TO_^1_%JMP* TYPELD,Q_%TYPE OF LOADER OPERATION OR_^1_%LDA =A14_)GIVE ERROR INDICATION_^1_%JMP- PRINT2,I_^1*_]_^1TYPELD JMP RBLOAD_(RELOCATABLE BINARY LOAD_^1_%JMP STBASE_(SET BASES FUNCTION_^1_%JMP LNKENT_'LINK PROGRAM ENTRY POINTS_^1_%JMP LNKCR1_'LINK TO CREP1 TABLE_^1_%JMP SETDAT_'SET DATA BASE_^1_%JMP LNKCRP_'LINK TO CREP TABLE_^1_€€%JMP MAPS_)PRINT MEMORY MAP_^1_%JMP PRNEXT_'PRINT UNPATCHED EXTERNALS_^1_%JMP PROGLD_'LOAD PROGRAM FROM LIBRARY_^1_%JMP ADRPRO_'FIND ENTRY POINT ADDRESS_^1_%JMP SBLOAD_'LOAD SUBROUTINE FROM LIBRARY_^1_%SPC 10_^1RBLOAD ENA -$F_^1_%AND- AINPUT,I_^1_%ENQ 2_+TEST FOR AND SKIP IF INP DEV_^1_%SAP RBLDJ3-*-1_#IS NOT SYSTEM INPUT DEVICE_^1_%LDA =X$F9_''$F9' IS LOC WITH LOG UNIT N€€O_^1_%JMP* RBLDJ1_(FOR SYSTEM INPUT DEVICE_^1RBLDJ3 ARS 4_^1_%SUB- $B3_)TEST FOR AND SKIP INPUT DEV_^1_%SAN RBLDJ4-*-1_#IS NOT MASS STORAGE_^1_%LDA =X$B3_''$C2' IS LOC WITH LOG UNIT NO_^1_%JMP* RBLDJ1_(FOR MASS STORAGE UNIT_^1RBLDJ4 ADD- $B3_)BITS 0-13 OF AINPUT IS LOG_^1_%ENQ 0_-UNIT NO FOR INPUT DEVICE_^1RBLDJ1 STA- INPLUN,I_#RECORD LOGICAL UNIT NO._^1_%STQ- INPLUN+1,I_^1_%QL€€S 10_*INSERT (INPLUN) + (INPLUN+1)_^1_%EAQ A_-INTO STATUS REQUEST PARA-_^1_%STA* STAREQ+2_%METER LIST_^1STAREQ RTJ- (IO)_(ISSUE STATUS REQUEST_^1_%NUM $0600_^1_%NUM $FFFF_^1_%ADC ($7FFF)_^1_%LDA ISAV_^1_%STA- I_-RESTORE MEMORY INDEX_^1_%ENA 7_^1_%QRS 11_^1_%LAQ A_^1_%INA -2_+CHECK FOR MASS MEMORY DEVICE_^1_%SAN RBLDJ5_^1RBLDJ6_!LDA-_$$C2_1RECORD STARTING_^1_(SUB-_$$B3_1S€€ECTOR NUMBER_^1_(SAZ_%SAME-*-1_,FOR SCRATCH_^1_%ENA 1_^1_%STA PROSEC_^1_(JMP*_$RBLDJ5_^1SAME_!LDA- $C1_^1_%STA PROSEC_'LIBRARY UNIT CONTAINS SCRATCH_^1RBLDJ5 RTJ LOADER_%LOAD RELOCATABLE BIN INPUT_^1CMNXIT STA- AINPUT,I_%STORE EXIT PARAMETERS_^1_%STQ- QINPUT,I_^1_%LDA- PROBAS,I_^1_%SUB- PARBAS,I_^1_%STA- MSDWCT,I_^1_%ENA 0_-CLEAR FLAG TO IGNORE_^1_%STA- IGNORE,I_)DUP ENTRY PO€€INTS_^1_%LDA- PGEWRT,I_$CHECK IF CSQ OUT ON MASS STORAGE, IF_^1_%SAZ 1_,NOT SET SECTOR OF CSQ TO ZERO._^1_%LDA- CSQSEC,I_^1_%STA- STRSEC,I_^1_%LDA- UNPBAS,I_$DO NOT SET CORE IF BASE IS NOT_^1_%SAZ 1_,WITHIN UNPROTECTED CORE_^1_%JMP* RBDXIT_^1_%LDA- PROCOM,I_^1_%SAN RBDA_^1_%LDA- COMBAS,I_$SET NEW LIMITS OF CORE_^1_%SAN 1_^1RBDA_!LDA- PARLIM,I_$IF COMMON PROTECTED OR NOT USED, U€€SE_^1_%LDQ- CSQLIM,I_$PARLIM FOR UPPER LIMIT_^1_%INQ -1_^1_%STQ- TEMP3,I_^1_%STA- TEMP,I_'DO NOT SET NEW LIMITS OF CORE IF NEW_^1_%RTJ SIGNCK_'UPPER LIMIT IS LESS THAN NEW LOWER_^1_%JMP* RBDXIT_^1_%JMP* RBDXIT_^1_%SAM RBDXIT_^1_%LDQ- TEMP3,I_^1_%LDA- TEMP,I_^1_%RTJ- ($F4)_(ISSUE CORE REQUEST_^1_%NUM $1600_^1RBDXIT LDA- $EE_*PICK UP EXIT ADDRESS FROM_^1_%STA* LDXIT1+1_%MONITOR_^€€1_%LDQ- I_^1_%LDA =XSTRSEC,I_^1_%STA- I_^1_%LDA- AINPUT,Q_^1_%LDQ- QINPUT,Q_^1_%SOV 0_^1LDXIT1 RTJ+ ($7FFF)_'EXIT TO BE TAKEN, THEN EXIT_^1_%SPC 10_^1*_]_^1*_]_^1PRNEXT LDA- EXTSTR,I_^1_%STA- INPCTR,I_^1_%SUB- EXTCTR,I_^1_%SAN PRNA_^1_%ENQ 0_^1_%JMP- XIT,I_^1PRNA_!LDA =A10_)PRINT UNPATCHED EXTERNAL MESSAGE_^1_%RTJ- PRINT3,I_^1PRNB_!LDA- INPCTR,I_^1_%INA 1_,CHECK 2ND WORD OF €€EXTERNAL ENTRY_^1_%RTJ DISKRD_^1_%NUM $8000_^1_%SAM PRND_)SKIP IF EXTERNAL PATCHED_^1_%RTJ PRINT6_'PRINT UNPATCHED EXTERNAL_^1PRND_!LDA- INPCTR,I_^1_%INA 4_^1_%STA- INPCTR,I_^1_%SUB- EXTCTR,I_^1_%SAZ PRNF_)SKIP IF ALL OF EXTERNAL TABLE HAS BEEN CHKD_^1_%JMP* PRNB_^1PRNF_!RTJ* SBLDJ6_^1_%NUM $0A0A,$4520_^1SBLDJ6 NUM $FFFF_^1DOAEIO LDA* SBLDJ6_L78*1919_^1_%ENQ 2_+GIVE INDICA€€TION OF END_^1_%RTJ CDRIV_)CONDITION_^1_%ENA -0_^1_%STA- INPUT,I_^1_%STA- INPUT+1,I_^1_%LDA- INPXC0,I_^1_%ENQ 0_^1_%RTJ CDRIV_'ENTER MESSAGE AT CONSOLE_^1_%SAM NOIOER_'SKIP IF NO ERROR_478*1919_^1_%JMP* DOAEIO_'REPEAT I/O SEQUENCE_178*1919_^1NOIOER LDA- INPUT,I_%CHECK * CR_:78*1919_^1_%SUB =N$2AFF_^1_%SAN 1_+TEST FOR AND XFER IF JOB IS_^1*_8TO BE CONTINUED, SKIP IF NOT_^1_%J€€MP* PRNGA_(GO TO WRITE OUT CSQ TO MASS MEMORY_^1_%LDA- INPUT,I_%IS THIS REQUEST TO PATCH WITH PART 0_^1_%SUB =A*E_)CORE RESIDENT ENTRY POINTS_^1_%SAN SBLDJA_'NO_?**MSOS 4.1**_^1_%JMP LNK01_(GO LINK TO THE CREP TABLES_'**MSOS 4.1**_^1SBLDJA LDA- INPUT,I_#IS THIS A *T_^1_%SUB =A*T_^1_%SAN INPERR_^1PRNG_!ENA -0_^1_%STA- SAVEA,I_^1_%JMP* PRNXIT_^1INPERR LDA =A3_^1_%RTJ- PRINT3,€€I_#GIVE ERROR MESSAGE FOR_^1_%JMP* PRNG_)ILLEGAL INPUT_^1*_]_^1PRNGA RTJ WRTOUT_^1_%ENA 0_^1_%STA- SAVEA,I_^1PRNXIT LDQ- SAVEA,I_^1_%JMP- XIT,I_^1*_]_^1*_]_^1_%SPC 10_^1MAPS_!RTJ* TITLE_^1_%ALF_!10,1 ENTRY POINT TABLE-_^1TITLE NUM $FFFF_^1_%LDA* TITLE_'PUT 1ST WORD ADDRESS IN A_^1_%ENQ TITLE-MAPS-1 PUT WORD COUNT IN Q_^1_%RTJ LDRIV_'PRINT TITLE_^1_%LDA- COMBAS,I_#TEST FOR A€€ND SKIP IF_^1_%SAZ LSTDAT-*-1_#NO COMMON STORAGE_^1_%RTJ* PRTCOM_^1_%ALF 8,_"***COM_^1PRTCOM NUM $FFFF_^1_%LDQ* PRTCOM_%LIST NAME AND RELOCATION_^1_%RTJ- PRINT4,I_%BASE FOR COMMON BLOCK_^1LSTDAT LDA- DATBAS,I_#TEST FOR AND SKIP IF_^1_%SAN 1_^1_%JMP* MAPSA_^1_%RTJ* PRTDAT_^1_%ALF 8,_"***DAT_^1PRTDAT NUM $FFFF_^1_%LDQ* PRTDAT_%LIST NAME AND RELOCATION_^1_%RTJ- PRINT4,I_%BASE FO€€R DATA BLOCK_^1MAPSA LDQ- HSHTBL,I_^1_%TCQ Q_^1_%STQ- SW6,I_(COMPLEMENT OF NO OF POSSIBLE ENTRIES IN_^1_%ENQ 15_+HASH TABLE IN SW6_^1_%STQ- BITCNT,I_$COUNT OF BITS SHIFTED IN BITTCNT_^1_%ENA -1_+WORD INDEX FOR TABLE OF BITS IN_^1_%STA- WRDCNT,I_$WRDCNT_^1_%ENA -5_^1_%ENQ 0_,CLEAR FOR POSSIBLE DIVIDE_-76*1850_^1_%STA- INPWRD,I_$ADDRESS OF FILLED ENTRY IN INPWRD_^1_%LDA- OVCTR,€€I_^1_%SUB- OVSTR,I_^1_%SAZ 1_^1_%DVI- $43_^1_%TCA A_,PUT COMPLEMENT OF NUMBER OF ENTRIES_^1_%STA- TEMP,I_'IN OVERFLOW TABLE IN TEMP_^1MAPSJ1 ENQ -36_*SPACE FILL LINE-OF-PRINT BUFFER_^1_%LDA- BLANKS,I_^1FILL_!STA- LINBUF+36,B_^1_%INQ 1_^1_%SQZ 1_^1_%JMP* FILL_^1_%LDA- INPXC1,I_#SET INPCTR TO 'LINBUF+2'_^1_%INA 1_^1_%STA- INPCTR,I_^1_%ENA -4_*SET COUNT1 TO -4_^1_%STA- BLKCTR,I€€_^1MAPSJ3 LDA- INPWRD,I_$BUMP RELATIVE ADDRESS OF ENTRY_^1_%INA 5_,POINT TABLE_^1_%STA- INPWRD,I_^1_%LDA- SW6,I_(SW6=0 WHEN ALL OF HASH TABLE_^1_%SAN 1_,CHECKED FOR ENTRIES_^1_%JMP* CKOVR_^1_%RAO- SW6,I_(GO TO CHECK OVERFLOW TABLE WHEN ALL_^1_%RAO- BITCNT,I_$HASH ENTRIES HAVE BEEN PRINTED._^1_%LDA- BITCNT,I_$BUMP BIT COUNTER AND CHECK IF ALL_^1_%INA -16_*16 BITS HAVE BEEN TESTED€€,_^1_%LDQ* WORD_)IF NO,USE OLD WORD_^1_%SAN MA_+IF YES, ZERO BIT COUNTER_^1_%STA- BITCNT,I_$AND USE NEXT WORD OF BITTBL_^1_%RAO- WRDCNT,I_^1_%LDQ- WRDCNT,I_^1_%LDQ BITTBL,Q_^1MA_#ENA 0_,SHIFT 1 BIT OF 'WORD' INTO A_^1_%LRS 1_^1_%STQ* WORD_)IF BIT IS SET TO ONE,THERE IS AN_^1_%SAN CVRENT_'ENTRY IN THE HASH TABLE THAT_^1_%JMP* MAPSJ3_'CORRESPONDS TO IT_^1CKOVR LDA- TEMP,I_^1_%I€€NA 0_^1_%SAN CKA_*SKIP IF NOT THRU ALL OVERFLOW ENTRIES_^1_%JMP* MAPXIT_^1WORD_!NUM 0_^1CKA_"LDA* PRTDAT_'FIRST TIME THRU,PRTDAT WILL BE_^1_%SAZ CKB_*NON-ZERO AND ADDRESS OF_^1_%LDA- OVSTR,I_%OVERFLOW TABLE WILL BE STORED IN INPWRD_^1_%STA- INPWRD,I_^1_%ENA 0_^1_%STA* PRTDAT_^1CKB_"RAO- TEMP,I_^1CVRENT LDA- INPWRD,I_$CHECK IF ENTRY IS A PRESET THAT_^1_%INA 2_,HAS NOT BEEN PAT€€CHED TO_^1_%RTJ DISKRD_^1_%NUM $8000_^1_%SAP 1_,SKIP IF PRESET HAS BEEN USED,OTHERWISE_^1_%JMP* MAPSJ3_'IGNORE IT_^1_%LDA- INPWRD,I_^1_%INA 3_^1_%RTJ DISKRD_^1_%NUM $8000_^1_%RTJ- CONVRT,I_#CONVERT ENT PT ADR TO ASCII_^1_%ENQ 0_^1INSERT LDA- INPWRD,I_^1_%AAQ A_^1_%RTJ DISKRD_^1_%NUM $8000_^1_%AND- $11_-CONSTANT $7FFF_^1_%STA (INPADR),Q_#INTO LINE-OF-PRINT BUFFER_^1_%INQ€€ 1_^1_%ENA -3_^1_%AAQ A_^1_%SAZ 1_^1_%JMP* INSERT_^1_%LDQ- INPCTR,I_^1_%LDA- BINASC,I_#PUT ASCII CODE FOR 4 HEX_^1_%STA- 4,Q_+DIGITS OF ENT PT ADDR INTO_^1_%LDA- BINASC+1,I_#LINE-OF-PRINT BUFFER_^1_%STA- 5,Q_^1_%INQ 8_^1_%STQ- INPCTR,I_#PUT (INPCTR) + 8 IN INPCTR_^1_%RAO- BLKCTR,I_#PUT (BLKCTR) + 1 IN BLKCTR_^1_%LDA- BLKCTR,I_^1_%SAZ 1_+TEST FOR AND XFER IF LINE-OF-_^1_%JMP* €€MAPSJ3_'PRINT BUFFER NOT FULL_^1_%LDA- INPXC0,I_^1_%ENQ 34_^1_%RTJ LDRIV_'DUMP LINE-OF-PRINT BUFFER_^1_%JMP* MAPSJ1_%LOOP FOR NEXT LINE_^1MAPXIT LDA- INPCTR,I_^1_%INA -2_^1_%SUB- INPXC0,I_^1_%SAZ MA1_^1_%TRA Q_,1ST WORD ADDR = LINBUF_^1_%LDA- INPXC0,I_^1_%RTJ LDRIV_(PRINT LINE BUFFER CONTENTS_^1MA1_"RTJ* LNFEED_'WORD COUNT = (INPCTR)- (LINBUF-2)_^1_%NUM $D0A,$A0A_^1LNFEED NU€ M $FFFF_^1_%LDA* LNFEED_^1_%ENQ 2_^1_%RTJ LDRIV_(GIVE LINE FEED AFTER MAP REQUEST_^1_%ENA 0_^1_%ENQ 0_^1_%JMP- XIT,I_(EXIT MAPS ROUTINE_^1_%END BRANCH_^__ PLIDRV1 CSY/ D05 P€1_%NAM LIDRV1_'DECK-ID D05 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT PROSEC_^1*_]_^1*_$FORMAT READS FOR RELO. LOADER_^1_%SPC 1_^1_%EXT* ISAV_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU INPLUN(115)_^1€€_%SPC 10_^1_%EQU IO($F4)_^1_%EQU MASK1($42)_!(MASK1) = $7FFF_^1_%EQU MASK2($21)_!(MASK2) = $8000_^1_%EQU AINPUT(101)_^1_%EQU INPUT(147)_^1_%ENT IDRIV_^1IDRIV NUM $FFFF_^1_%STA* SINPUT_^1_%QLS 2_^1_%ADQ- INPLUN+1,I_^1_%QLS 10_^1_%ADQ- INPLUN,I_#STORE MODE + LOGICAL UNIT_^1_%STQ* VINPUT_(NUMBER IN PARAMETER LIST_^1_%ENA -$F_^1_%ALS 12_^1_%LAQ A_+STORE LOGICAL UNIT NUMBER€€_^1_%STA* VSTAT_)IN STATUS REQUEST_^1_%ENA 60_^1_%STA* NINPUT_%STORE WORD COUNT_^1_%RTJ* STAREQ_^1IRQCOP NUM $4801_(PART 1 READ REQUEST FORMAT_^1_%NUM 0_^1THREAD NUM 0_^1VINPUT NUM $FFFF_'MODE + LOGICAL UNIT NUMBER_^1NINPUT NUM $FFFF_'WORD COUNT_^1SINPUT ADC ($7FFF)_$STARTING ADDRESS_^1_%NUM 0_^1PROSEC NUM 0_^1*_]_^1STAREQ NUM $FFFF_^1_%LDA* STAREQ_%STORE 1ST WORD ADDRESS€€ OF_^1_%STA* READIN_^1_%RTJ- (IO)_^1_%NUM $2000_^1READIN ADC 0_^1WAIT_!LDQ* THREAD_^1_%SQZ 2_+TEST FOR AND WAIT UNTIL_^1_%JMP* WAIT_*OPERATION IS COMPLETE_^1IFLAG NUM $FFFF_'COMPLETION FLAG_^1_%LDA* VINPUT_^1_%LLS 3_^1_%STQ* IFLAG_'SET IFLAG WHEN OPTN COMPLETE_^1_%RTJ- (IO)_(ISSUE STATUS REQUEST_^1_%NUM $0600_'REQUEST CODE_^1VSTAT NUM $FFFF_'LOGICAL UNIT NUMBER_^1TSTAT AD€€C ($7FFF)_$BEGINNING OF PARAM. LIST_^1_%STA* STATUS+1_#SAVE HARDWARE STATUS_^1_%LDA ISAV_^1_%STA- I_+RESTORE MEMORY INDEX_^1_%ENA 7_^1_%QRS 11_^1_%LAQ A_^1_%INA -2_+CHECK FOR MASS MEMORY DEVICE_^1_%SAZ_!IDRVJ1-*-1_^1_%JMP* IDRVJ3_^1IDRVJ1 ENA $F_+PICK UP LOADER TYPE CALL,_^1_%AND- AINPUT,I_^1_%INA -3_-IF CALL IS TO LNKCR1, LNKCRP,_^1_%SAZ IDRVJ2_)PROGLD OR SB LOAD, WE ARE€€_^1_%INA -2_-LOADING FROM PR0G LIBRARY._^1_%SAZ IDRVJ2_'WE MUST PICK UP NEXT SECTOR_^1_%INA -3_+ADDRESS FROM LAST WORD OF THIS_^1_%SAZ IDRVJ2_'BLOCK AND STORE IN PROSEC FOR_^1_%INA -2_+NEXT READ_^1_%SAZ IDRVJ2_^1_%RAO* PROSEC_'WE ARE NOT READING FROM PR0G LIB, SO_^1_%JMP* IDRVJ3_'JUST ADD ONE_^1IDRVJ2 LDA- INPUT+59,I_^1_%STA* PROSEC_'PICK UP LSB AND STORE (MSB ALWAYS ZERO)_^1€€IDRVJ3 CLR_!A_*NOW CLEAR LAST THREE WORDS_^1_%STA- INPUT+59,I SO LOADER WONT GET_^1_%STA- INPUT+58,I CONFUSED WITH THIS INFO_^1_%STA- INPUT+57,I_^1IDRVJ0 ENA 4_^1_%AND* IFLAG_^1_%SAN 2_^1_%ENA -0_*SET A TO ERROR FREE EXIT_^1_%JMP* (IDRIV)_'PARAMETER + GO TO EXIT_^1STATUS LDA =N$FFFF_^1_%AND =N$A00_'CHECK FOR END OF FILE OR_^1_%SAZ 2_-NO TAPE IN READER_^1_%ENA 1_+SET A T€„O ALARM EXIT_^1_%JMP* (IDRIV)_'PARAMETER_^1_%ENA 0_+SET A TO ERROR EXIT PARAMETER_^1_%JMP* (IDRIV)_'+ GO TO EXIT_^1_%END IDRIV_^__„PLCDRV1 CSY/ D06 P€1_%NAM LCDRV1_'DECK-ID D06 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$READ/WRITE ON COMMENT MEDIUM FOR RELO. LOADER_^1_%SPC 1_^1_%EQU IO($F4)_^1_%ENT CDRIV_^1CDRIV NUM $FFFF_^1_%STA* SCOM_(RECORD 1ST WORD ADDRESS_^1_%STQ* €€INSW_(SET SWITCH FOR READ OR WRITE_^1_%RTJ* ENDLST_^1CODES NUM $4C01,$4801_!PART 1 REQUEST CODES_^1_%NUM $18FC,$18FD LOGICAL UNITS_^1ENDLST NUM $FFFF_^1_%LDA* ENDLST_^1_%SQN 2_^1_%INA 1_^1_%ENQ 60_^1_%STQ* NCOM_^1_%STA* ENDLST_^1_%LDA* (ENDLST)_#STORE REQUEST CODE IN_^1_%STA* RQCOM_)PARAMETER LIST_^1_%RAO* ENDLST_^1_%RAO* ENDLST_^1_%LDA* (ENDLST)_#STORE LOGICAL UNIT IN_^1_%€€STA* VCOM_*PARAMETER LIST_^1_%RTJ- (IO)_(ISSUE I/O REQUEST_^1RQCOM NUM $FFFF_'REQUEST CODE_^1_%NUM 0_^1THREAD NUM 0_^1VCOM_!NUM $FFFF_'LOGICAL UNIT_^1NCOM_!NUM $FFFF_'WORD COUNT_^1SCOM_!ADC ($7FFF)_$STARTING ADDRESS_^1WAIT_!LDQ* THREAD_^1_%SQZ 3_+TEST FOR AND WAIT UNTIL_^1_%JMP* WAIT_*OPERATION IS COMPLETE_^1CFLAG NUM $FFFF_'COMPLETION FLAG_^1INSW_!NUM $FFFF_^1_%LDA* VCO€bM_^1_%LLS 3_^1_%STQ* CFLAG_'SET CFLAG UPON COMPLETION AND_^1_%LDQ* INSW_^1_%SQZ 2_+SKIP IF OPTN IS WRITE_^1_%ENA -0_*SET EXIT PARA. AND XFER IF_^1_%JMP* (CDRIV)_'READ OPERATION_^1_%ENA -0_*SET EXIT PARA. IF ERROR FREE_^1_%LDQ* VCOM_*OPERATION_^1_%SQP 1_+SKIP IF NO ERROR_^1_%ENA 0_+SET EXIT PARA. IF ERROR_^1_%JMP* (CDRIV)_$EXIT_^1_%END CDRIV_^__bPLMDRV1 CSY/ D07 P€1_%NAM LMDRV1_'DECK-ID D07 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$READ/WRITE ON MASS STORAGE DEVICE FOR RELO. LOADER_^1_%SPC 1_^1_%SPC 10_^1_%ENT SECTNO_^1*_]_^1_%EQU PRINT2(59)_^1_%EQU MASINP(107)_^1_%EQU ONEBIT($23)_^€€1_%SPC 10_^1_%EQU IO($F4)_^1_%EQU MASK2($21)_!(MASK2) = $8000_^1_%ENT MDRIV_^1MDRIV NUM $FFFF_^1_%STA* SMASS_^1_%ENA 4_+IF Q POSITIVE, STORE (Q) AS_^1_%SQP 2_-WORD COUNT AT N-PARA. WORD_^1_%TCQ Q_-+ SET REQUEST CODE FOR READ_^1_%INA 2_+IF Q NEGATIVE, STORE COMPL._^1_%ALS 9_-OF (Q) AS WORD COUNT AND_^1_%INA 1_^1_%EOR- ONEBIT+14_#MAKE PART1 REQUEST_^1_%STA* MMASS_)SET REQ.€€ CODE FOR WRITE_^1_%STQ* NMASS_^1_%LDQ- MASINP,I_^1SETLUN STQ* VMASS_'RECORD LOGICAL UNIT NUMBER_^1_%RTJ- (IO)_(ISSUE REQUEST_^1MMASS NUM $FFFF_'REQUEST CODE_^1_%NUM 0_^1THREAD NUM 0_^1VMASS NUM $FFFF_'(VMASS) IS SET FOR LOGICAL_^1*_9UNIT NUMBER OF DEVICE_^1NMASS ADC ($7FFF)_$WORD COUNT_^1SMASS ADC ($7FFF)_$POINTER TO START ADDR._^1_%NUM 0_^1SECTNO NUM 0_^1WAIT_!LDQ* TH€΄READ_^1_%SQZ 1_+TEST FOR AND WAIT UNTIL_^1_%JMP* WAIT_*OPERATION IS COMPLETE_^1_%LDQ* VMASS_^1_%SQP NOERR_^1_%LDA =A1_^1_%JMP- PRINT2,I_^1NOERR JMP* (MDRIV)_^1_%END MDRIV_^__΄PLLDRV1 CSY/ D08 P€1_%NAM LLDRV1_'DECK-ID D08 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$WRITE ON LIST DEVICE FOR RELO. LOADER_^1_%SPC 1_^1_%EQU IO($F4)_^1_%ENT LDRIV_^1LDRIV NUM $FFFF_^1_%STA* SLIST_'STORE 1ST WORD ADDRESS_^1_%STQ* NLIST_'S€€TORE WORD COUNT_^1_%RTJ- (IO)_(ISSUE REQUEST_^1_%NUM $4C01_(FOR FORMATTED ASCII WRITE_^1_%NUM 0_^1THREAD NUM 0_^1VLIST NUM $18FB_'($FB) = LOGICAL UNIT NUMBER_^1NLIST ADC ($7FFF)_$WORD COUNT_^1SLIST ADC ($7FFF)_$START ADDRESS_^1WAIT_!LDQ* THREAD_^1_%SQZ 1_+TEST FOR AND WAIT UNTIL_^1_%JMP* WAIT_*OPERATION IS COMPLETE_^1_%JMP* (LDRIV)_'FINISHED AND XFER TO EXIT_^1_%END LDRI€V_^__ORD COUNT_^1_%RTJ- (PADJOF1 CSY/ D09 P€1_%NAM ADJOF1_'DECK-ID D09 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_816 BIT ARITHMETIC_^1_%SPC 1_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU PRINT2(59)_^1_%EQU BGRLSW(9)_^1_%EQU ADJXIT(81)_^1_%EQU QHO€€LD(137)_^1_%SPC 10_^1_%EQU MASK1($42)_!(MASK1) = $7FFF_^1_%EQU MASK2($21)_!(MASK2) = $8000_^1_%ENT ADJOF1_^1*_$A CONTAINS RELATIVE ADDRESS_^1*_$Q CONTAINS BASE ADDRESS_^1ADJOF1 SAP R8J1_)SKIP IF HIGH ORDER BIT HAS NOT BEEN SET_^1_%SQZ R8J2+1_'SKIP IF ABS RELOC_^1_%LDA =A9_^1_%JMP- PRINT2,I_^1R8J1_!STQ- QHOLD,I_^1_%LDQ- BGRLSW,I_$TEST FOR AND SET UPPER BIT IF BACKWARDS_^1_%SQN€v R8J_*RELOCATION_^1_%EOR- MASK2_^1R8J_"LDQ- QHOLD,I_^1R8J2_!AAQ A_^1_%JMP- ADJXIT,I_#EXIT_^1*_]_^1_%END_.ADJOVF_^__vPCNVRT1 CSY/ D10 P€1_%NAM CNVRT1_'DECK-ID D10 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$CONVRT ONE WORD TO ASCII FROM BINARY_^1_%SPC 1_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU AHOLD(136)_^1_%EQU BINASC(51)_^1_%EQU CNV€€XIT(89)_^1_%EQU HEX(65)_^1_%SPC 10_^1_%ENT CONVRT_^1CONVRT STA- AHOLD,I_^1_%ENA -2_^1_%STA- 25,I_(SET COUNT1 TO -2_^1R2J5_!RTJ* GETHEX_%PICK UP HEX DIGIT_^1_%ALS 8_+STORE CHARACTER IN LEFT HALF OF_^1_%LDQ- 25,I_*BINASC+2+(COUNT1)_^1_%STA- BINASC+2,B_^1_%RTJ* GETHEX_%PICK UP NEXT HEX DIGIT_^1_%LDQ- 25,I_(STORE CHARACTER IN RIGHT HALF OF_^1_%ADD- BINASC+2,B_#BINASC+2+(COUNT1)_^1_€€%STA- BINASC+2,B_^1_%RAO- 25,I_(INCREASE (COUNT1) BY 1 AND TEST_^1_%LDA- 25,I_*FOR ZERO_^1_%SAZ 1_+SKIP TO ECIT IF ZERO_^1_%JMP* R2J5_(LOOP IF NOT_^1_%JMP- CNVXIT,I_%EXIT FROM CONVRT_^1GETHEX NUM $FFFF_^1_%LDA- AHOLD,I_$HIFT 4 BITS INTO POSTN._^1_%ALS 4_^1_%STA- AHOLD,I_^1_%ENQ $F_*EXTRACT 4 BITS_^1_%LAQ Q_^1_%LDA- HEX,B_(PICK UP ASCII CODE FOR HEX DIGIT_^1_%JMP* (GETHEX)_^1_%€$END CONVRT_^___^1_%RAO- 25,I_(INCR$PLSTOT1 CSY/ D11 P€1_%NAM LSTOT1_'DECK-ID D11 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PRINT ERROR MESSAGE_^1_%SPC 1_^1_%EXT* LDRIV_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU PR3XIT(53)_^1_%EQU CMNXIT(139)_^1_%SPC 5_^1€€_%ENT PRINT3_^1PRINT3 RTJ* PR3J1_^1_%ALF_!1,_^1COMSGE NUM $7F45,$2020_^1PR3J1 NUM $FFFF_^1_%STA* COMSGE+1_#STORE ERROR CODE_^1_%LDA* PR3J1_'PICK UP 1ST WORD ADDR_^1_%ENQ_!3_^1_%RTJ LDRIV_'PRINT ERROR MESSAGE_^1_%JMP- PR3XIT,I_#EXIT_^1_%SPC 10_^1_%ENT STOP_^1STOP_!ENA -0_^1_%ENQ -0_^1_%JMP- CMNXIT,I_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU BINASC(51)€€_^1_%EQU CONVRT(90)_^1_%EQU PR4XIT(93)_^1_%ENT NMPRNT_^1_%SPC 5_^1_%ENT PRINT4_^1NMPRNT NOP 0_^1_%STQ* PRTADR_^1_%ENQ 32_+PRINT OUT 32 WORDS_^1_%STQ* NUMWRD+1_*FOR NAME OF PROG._^1_%LDQ* NMPRNT_^1_%STQ- PR4XIT+1,I_^1_%JMP* PRINT4+1_^1PRINT4 STQ* PRTADR_%SAVE 1ST WORD ADDR OF OUTPUT_^1_%RTJ- CONVRT,I_#CONVERT BIN NO IN A TO ASCII_^1_%LDQ* PRTADR_^1_%LDA- BINASC,I_^1_%STA- 6,Q€€_^1_%LDA- BINASC+1,I_!RECORD ASCII CODE FOR 4 HEX_^1_%STA- 7,Q_+DIGITS TO BE PRINTED_^1_%TRQ A_^1NUMWRD LDQ =N8_^1_%RTJ LDRIV_'PRINT NAME_^1_%ENQ 8_,RESTORE WORD COUNT_^1_%STQ* NUMWRD+1_^1_%JMP- PR4XIT,I_#EXIT_^1PRTADR NUM $FFFF_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU INPCTR(15)_^1*_]_^1*_]_^1_%ENT PRINT6_^1_%EXT* DISKRD_^1_%SPC 2_^1PRINT6 NOP 0_^1€€_%RTJ* PR6_^1BUF6_!ALF 4,_^1PR6_"NOP 0_^1_%LDA- INPCTR,I_$ADDRESS OF EXTERNAL_^1_%STA* PR6A+1_^1_%ENQ 0_^1PR6A_!LDA =X0,Q_(STORE EXTERNAL NAME INTO PRINT BUFFER_^1_%RTJ DISKRD_^1_%NUM $8000_^1_%AND- $11_^1_%STA* BUF6+1,Q_^1_%INQ 1_^1_%ENA -3_^1_%AAQ A_^1_%SAZ PR6B_^1_%JMP* PR6A_^1PR6B_!LDA* PR6_*ADDRESS OF BUFFER_^1_%ENQ 4_,NUMBER OF WORDS_^1_%RTJ LDRIV_^1_%JMP* (PRINT6€€)_^1_%SPC 5_^1_%ENT PRINT5_^1_%EQU PR5XIT(97)_^1PRINT5 RTJ* PR5J1_^1BUF_"ALF_!4,_^1PR5J1 NUM_!$FFFF_^1_%LDQ- INPCTR,I_'ADDRESS OF MESSAGE_^1_%LDA- ($22),Q_(MOVE THREE-WORD_^1_%AND- $11_-CONSTANT $7FFF_^1_%STA* BUF+1_'INTO THIS BUFFER_^1_%LDA- 1,Q_)FOR CAZRRIAGE CONTROL_^1_%STA* BUF+2_^1_%LDA- 2,Q_^1_%STA* BUF+3_^1_%LDA* PR5J1_'ADDRESS OF BUFFER_^1_%ENQ_!4_'NIMBER OF W€JORDS_^1_%RTJ LDRIV_8AT (INPCTR)_^1_%JMP- PR5XIT,I_3EXIT_^1_%END LOAD_^__JPLINK11 CSY/ D12 P€1_%NAM LINK11_'DECK-ID D12 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%SPC 1_^1_%EXT* DISKRD_^1_%EXT* DISKWR_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU ABRLSW(9)_^1_%EQU ARIT15(87)_^1_%EQU PRINT2(59)_^1_€€%EQU ZERO($22)_^1_%EQU ENTPNT(13)_^1_%EQU INPWRD(10)_^1_%EQU LINK(14)_^1_%EQU LK1XIT(103)_^1_%EQU LNKSTR(112)_^1_%EQU LNKCTR(113)_^1_%EQU NZERO($12)_^1_%SPC 10_^1_%EQU MASK1($42)_"(MASK1) = $7FFF_^1_%EQU MASK2($21)_"(MASK2) = $8000_^1_%ENT LINK1_^1LINK1 LDA- LINK,I_'(LINK) IS NEXT ADR IN STRING_^1_%STA* LNKSAV_'SAVE LINK ADR FOR COMPARISON_^1_%TRA Q_,TEST IF FIRST LINK €€WAS PGM RELOC AND_^1_%EOR- NZERO_)WAS ABSOLUTIZED TO $7FFF----IF IT WAS_^1_%SAN LINK1A_'EXTPRO CHANGED IT TO $FFFF TO FLAG AS_^1_%TRQ A_,UNIQUE ADDRESS_^1_%AND- MASK1_^1_%STA- LINK,I_^1_%JMP* LINA_^1LINK1A TRQ A_^1LINK2 SUB- MASK1_(TEST FOR END OF STRING-$7FFF_^1_%SAN LINA_)SKIP IF NOT END_^1_%RTJ* LNKCK_(GO TO CHECK IF THIS IS TRUE END OF STRING_^1_%JMP- LK1XIT,I_$IT WAS END€€, EXIT_^1LINA_!LDA- LINK,I_)FETCH ADRRESS TO BE READ_^1_%RTJ DISKRD_^1_%ADC 0_^1_%STA- INPWRD,I_%AND SET INPWRD TO ((LINK))_^1_%LDQ- ARIT15,I_$IF 15 BIT ARITH, UPPER BIT MAY BE_^1_%SQZ LINB_)SET ON FINAL LINK_^1_%EOR- NZERO_(TEST IF FINAL LINK HAS UPPER BIT SET_^1_%SAN LINB_)SKIP IF BIT NOT SET_^1_%LDA =A9_*ISSUE DIAG + TERMINATE LOAD, MULTI-LEVEL_^1_%JMP- PRINT2,I_$INDIRECT A€€DDRESSING_^1LINB_!LDA- ENTPNT,I_$PICK UP (ENTPNT)_^1_%LDQ- ABRLSW,I_$PICK UP (ABRLSW) TO CHECK FOR RELATIVE LINK_^1_%SQM 1_,SKIP IF PATCH FOR RELATIVE ADDRESSING_^1_%JMP* LK1J11_'JMP FOR ABS ADDR._^1_%SUB- LINK,I_^1LK1J10 STA* STAB_)SAVE VALUE TO BE STORED_^1_%LDA- LINK,I_^1_%RTJ DISKWR_^1STAB_!ADC 0_^1_%ADC 0_^1_%LDA- LINK,I_'SAVE ADDRESS OF NEXT LINK_^1_%STA* LNKSAV_^1_%LDA- €€INPWRD,I_#GET NEXT LINK ADDR IN STRING_^1_%LDQ- ARIT15,I_I**MSOS4.0_^1_%SQN 1_^1_%AND- MASK1_L**MSOS4.0_^1_%STA- LINK,I_^1_%JMP* LINK2_(LOOP FOR NEXT LINK IN STRING_^1*_]_^1*_]_^1LNKCK NOP 0_^1_%LDQ- LNKSTR,I_$CHECK FOR END OF TABLE_^1LNA_"LDA- LNKCTR,I_^1_%TCA A_^1_%AAQ A_^1_%SAZ LNB_*SKIP IF END_^1_%LDA- (ZERO),Q_$COMPARE TABLE ENTRY TO ADDRESS OF $7FFF_^1*_8LINK - IF THEY €€COMPARE, $7FFF IS A_^1*_8POINTER TO THE NEXT LINK ADDRESS AND_^1_%EOR* LNKSAV_'NOT AN END OF STRING FLAG._^1_%SAZ LNC_*SKIP IF ADDRESS COMPARES_^1_%INQ 1_,INCREASE LNKTBL POINTER_^1_%JMP* LNA_*GO TO GET NEXT ENTRY_^1LNB_"JMP* (LNKCK)_^1LNC_"JMP* LINA_)GO TO LINK THIS ADDRESS_^1*_]_^1LK1J11 LDQ- ARIT15,I_^1_%SQZ 1_,SKIP IF 15-BIT ADDR- UPPER BIT OF LINK_^1_%JMP* LK1J10_'ADDR CANN€βOT BET SET IF 16 BIT ARITH_^1_%TRA Q_^1_%LDA- INPWRD,I_$UNITE BIT 15 OF ((LINK)) WITH_^1_%AND- MASK2_(BITS 0-14 OF (ENTPNT)+ STORE RESULT_^1_%EAQ A_,IN (LINK)_^1_%JMP* LK1J10_^1*_]_^1LNKSAV ADC 0_^1*_]_^1_%END LINK1_^__βPLOADR1 CSY/ D13 P€1_%NAM LOADR1_'DECK-ID D13 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$JUMP TO PROCESS ROUTINE_^1_%SPC 1_^1_%EXT* IDRIV_^1_%EXT* NAMPRO,RBDPRO,BZSPRO,ENTPRO,EXTPRO,XFRPRO_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2€€_^1_%EQU CSQCTR(123)_^1_%EQU DATBAS(2)_^1_%EQU DATLIM(5)_^1_%EQU INPXC0(57)_^1_%EQU INPUT(147)_^1_%EQU NXTINP(63)_^1_%EQU PRINT2(59)_^1_%EQU PRINT3(54)_^1_%EQU SECTOR(138)_^1_%EQU CSQLIM(6)_^1_%EQU PARBAS(131)_^1_%EQU MSDWCT(134)_^1_%EQU CSQSEC(128)_^1_%EQU STRSEC(133)_^1_%SPC 10_^1_%EQU MASK1($42)_!(MASK1) = $7FFF_^1_%ENT ALRMOK_^1_%ENT LOADER_^1_%ENT NXTBLK_^1LO€€ADER NUM $FFFF_^1SW1AXC LDA =XSW1A-SW1-1_^1_%STA* SW1+1_'PUT 'SW1A' IN SW1_^1NXTBLK ENQ -60_^1_%ENA -0_^1CLEAR STA- INPUT+60,B_!SET EACH LOCATION IN REL BIN_^1_%INQ 1_-INPUT BUFFER TO $FFFF_^1_%SQZ 1_^1_%JMP* CLEAR_^1INPDEV LDA- INPXC0,I_^1_%ENQ 0_,SET BINARY MODE_^1_%RTJ IDRIV_)RECORD FROM INPUT DEVICE_^1_%SAP 2_+SKIP IF OPTN NOT ERROR FREE_^1SW1_"NUM $1800,$FFFF JUMP €€THROUGH SW1 IF NO ERROR_^1_%INA -1_*TEST FOR AND SKIP IF ERROR_^1_%SAZ ALARM-*-1_$DUE ONLY TO ALARM INTERRUPT_^1E1ER_!LDA =A1_)GIVE ERROR INDICATION AND_^1_%JMP- PRINT2,I_%TAKE ERROR EXIT_^1ALARM LDA* SW1+1_^1_%SUB* SW1AXC+1_^1_%SAZ ALRMOK-*-1_!SKIP IF SW1 SET TO 'SW1A'_^1_%JMP* E1ER_(JUMP ON ERROR CONDITION_^1ALRMOK LDA =A*T_^1_%STA- INPUT,I_^1_%ENA -0_^1_%STA- INPUT+1,I_"I€€NSERT DUMMY EOL INTO INPUT_^1_%JMP* SW1F_*BLOCK AND PROCEED TO SW1F_^1SW1A_!LDA- INPUT,I_^1_%ALS 8_^1_%ENQ $7F_^1_%LAQ Q_^1_%LDA- INPUT,I_^1_%SUB =N$2050_%TEST FOR AND SKIP IF_^1_%SAN SW1AJ0-*-1_#INPUT BLOCK NOT NAM_^1_%LDA =XSW1B-SW1-1_^1_%STA* SW1+1_'PUT 'SW1B' IN SW1_^1_%JMP NAMPRO_%JUMP TO PROCESS NAM BLOCK_^1SW1AJ0 INQ -$2A_(TEST FOR AND SKIP IF_^1_%SQZ SW1AJ1_'1ST CH€€ARACTER ASTERISK_^1E3ER_!LDA =A3_)GIVE ERROR INDICATION AND_^1_%JMP- PRINT2,I_%TAKE ERROR EXIT_^1SW1AJ1 JMP SW1F_(JUMP IF ASCII RECORD_^1SW1B_!LDA- INPUT,I_^1_%ENQ 0_^1_%LLS 3_^1_%ARS 11_*TEST FOR AND XFER TO ERROR_^1_%SQZ 1_^1_%SAZ 1_-EXIT FOR ILLEGAL INPUT IF_^1_%JMP* E3ER_*BITS 8-12 OF (INPUT) NOT =0_^1_%ENA -2_^1_%AAQ A,Q_)TEST FOR AND SKIP IF INPUT_^1_%INA -3_,BLOCK €€IS NOT_^1_%SAP SW1BJ1-*-1_#RBD, BZS, OR ENT._^1_%QLS 1_+BRANCH TO APPROPRIATE ROUTINE_^1_%JMP* BRANCH,Q_%IF INPUT IS RBD, BZS OR ENT_^1BRANCH JMP RBDPRO_%JUMP TO PROCESS RBD BLOCK._^1_%JMP BZSPRO_%JUMP TO PROCESS BZS BLOCK._^1_%JMP ENTPRO_%JUMP TO PROCESS ENT BLOCK._^1SW1BJ1 LDA =XSW1C-SW1-1_^1_%STA* SW1+1_'PUT 'SW1C' IN SW1_^1SW1C_!LDA- INPUT,I_^1_%ENQ 0_^1_%LLS 3_^1_%ARS €€ 11_*TEST FOR AND XFER TO ERROR_^1_%SAZ 1_-EXIT FOR ILLEGAL INPUT IF_^1_%JMP* E3ER_*BITS 8-12 OF (INPUT) NOT =0_^1_%INQ -5_^1_%SQN 2_+TEST FOR AND XFER IF_^1_%JMP EXTPRO_(INPUT BLOCK IS EXT_^1_%INQ -1_^1_%SQZ 1_+TEST FOR AND XFER TO ERROR_^1_%JMP* E3ER_*EXIT IF INPUT BLOCK NOT XFER_^1_%LDA =XSW1A-SW1-1 PUT 'SW1A' IN SW1_^1_%STA* SW1+1_^1_%JMP XFRPRO_%JUMP TO PROCESS XFR BLO€€CK_^1SW1F_!LDA- CSQLIM,I_^1_%SUB- PARBAS,I_^1_%STA- MSDWCT,I_^1_%LDA- CSQSEC,I_^1_%STA- STRSEC,I_^1_%LDQ- INPUT,I_^1_%LDA- INPUT+1,I_^1_%LLS 8_^1_%TRQ A_^1_%SUB =N$54FF_$TEST FOR AND SKIP IF INPUT_^1_%SAN SW1EJ2-*-1_#NOT EOL BLOCK OFF PAPER TAPE_^1EOLPR1 ENA 0_^1_%ENQ 0_^1_%JMP* EOLPRO_^1SW1EJ2 TRQ A_^1_%SUB =N$5420_$TEST FOR AND SKIP IF INPUT_^1_%SAN SW1EJ3-*-1_#NOT EOL B€œLOCK OFF CARDS_^1_%JMP* EOLPR1_^1SW1EJ3 ENQ 0_,SET A REGISTER TO ADDRESS_^1_%LDA- INPXC0,I_$OF CONTROL STATEMENT_^1EOLPRO JMP (LOADER)_^1_%END LOADER_^__œPNAMPR1 CSY/ D14 P€1_%NAM NAMPR1_'DECK-ID D14 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$NAM PROGRAMS FROM RELO. LOADER_^1_%SPC 1_^1_%EXT* NMPRNT_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU PRODAT(120)_^1_%EQU PARLIM(132)_€€^1_%EQU AINPUT(101)_^1_%EQU ASAV(29)_^1_%EQU BINASC(51)_^1_%EQU BLANKS(18)_^1_%EQU COMBAS(1)_^1_%EQU COMLIM(4)_^1_%EQU CSQLIM(6)_^1_%EQU DATBAS(2)_^1_%EQU DATLIM(5)_^1_%EQU ENTPNT(13)_^1_%EQU INPCTR(15)_^1_%EQU INPUT(147)_^1_%EQU INPXC0(57)_^1_%EQU INPXC1(58)_^1_%EQU INPXCC(62)_^1_%EQU NXTINP(63)_^1_%EQU PRINT3(54)_^1_%EQU PRINT4(94)_^1_%EQU PRINT5(98)_^1_%EQU P€€ROBAS(3)_^1_%EQU QINPUT(102)_^1_%EQU QSAV(30)_^1_%EQU SW6(28)_^1_%EQU PROGCT(146)_^1_%EQU PROCOM(121)_^1_%EQU PRINT2(59)_^1_%ENT SIGNCK_^1_%SPC 10_^1_%ENT NAMPRO_^1NAMPRO ENA 0_+CLEAR SW6_^1_%STA- SW6,I_^1_%LDA- INPUT+1,I_^1_%SAN 1_+TEST FOR AND XFER IF NO COM_^1_%JMP* NAMPR1_(STOR RESERVED FOR THIS PROG_^1_%SAP 1_,SKIP IF COMMON DECLARATION OK_^1_%JMP* COMERR_'ERROR IF €€NEGATIVE_^1_%LDA- COMBAS,I_^1_%SAN 1_+TEST FOR AND XFER IF NO COM_^1_%JMP* NAMJ00_(STOR RSVD FOR PREVIOUS PROG_^1_%LDA- COMLIM,I_^1_%LDQ- COMBAS,I_^1_%ADQ- INPUT+1,I_^1_%STQ- QSAV,I_^1_%RTJ* SIGNCK_'CHECK IF SIGNS SAME_^1_%JMP* NAMJ01_^1_%JMP* DATERR_'EXIT IF UPPER LIMIT EXCEEDED_^1*_*RETURNS RESULT HERE IF SIGNS ARE SAME -- TEST NORMALLY_^1*_8TEST FOR AND SKIP IF (COMLIM)_^1_%SAP€€ NAMJ01-*-1_"LESS THAN (COMBAS)+(INPUT+1)_^1COMERR JMP* DATERR_(ILLEGAL COMMON BLOCK RESEVATION_^1NAMJ01 JMP* NAMPR1_^1NAMJ00 LDA- COMLIM,I_^1_%SUB- INPUT+1,I_$AND SET COMMON STORAGE RE-_^1CMSQCK STA- COMBAS,I_$LOCATION BASE_7*495_^1_%LDA- PROCOM,I_$IF COMMON PROTECTED,DO NOT CHECK FOR CORE_^1_%SAN NAMPR1_'OVERFLOW_^1_%LDA- COMBAS,I_^1_%LDQ- CSQLIM,I_^1_%RTJ* SIGNCK_'CHECK IF SIG€€NS SAME_^1_%JMP* NAMPR1_^1_%JMP* NAMJ02_'OVERFLOW OF PARTITION_^1*_8OCCURS IF EITHER_^1_%SAM NAMJ02-*-1_#(COMBAS) LESS THAN (CSQLIM)_^1_%SAN NAMPR1-*-1_#OR IF (COMBAS) = (CSQLIM)_^1_%LDA- INPUT+3,I_$AND PROGRAM HAS NO PROGRAM_^1_%SAZ NAMPR1-*-1_#RELOCATABLE COM SEQ SUCH_^1NAMJ02 ENA -0_,THAT (INPUT+3) = 0._^1_%STA- SW6,I_'SET SWITCH FOR CORE OVERFLOW_^1NAMPR1 LDA- INPUT+2,I_^1_€€%SAN 1_+TEST FOR AND XFER IF NO DATA_^1_%JMP* NAMPR2_(STOR RESERVED FOR THIS PROG_^1_%SAP 1_,SKIP IF POSITIVE DATA DECLARATION_^1_%JMP* DATERR_'ERROR IF NEGATIVE_^1_%LDA- DATBAS,I_^1_%SAN 1_+TEST FOR AND XFER IF NO DATA_^1_%JMP* NAMJ10_(STOR RESERVED PREVIOUSLY_^1_%LDA- DATLIM,I_^1_%LDQ- DATBAS,I_^1_%ADQ- INPUT+2,I_^1_%STQ- QSAV,I_^1_%RTJ* SIGNCK_^1_%JMP* NAMPR2_^1_%JMP* DATERR_€€^1*_8TEST FOR + SKIP IF (DATLIM)_^1_%SAP NAMJ11-*-1_"LESS THAN (DATBAS)+(INPUT+2)_^1DATERR RTJ* PRNNAM_(GIVE ERROR INDICATION_^1_%LDA =A4_^1_%RTJ- PRINT3,I_$ILLEGAL DATA BLOCK RESEUTN_^1NAMJ11 JMP* NAMPR2_^1NAMJ10 LDA- PRODAT,I_$CHECK IF DATA BLOCK IN PROT CORE_^1_%SAZ NAMJ1A_^1_%JMP* NAMPR2_^1NAMJ1A LDQ- PROBAS,I_$SET DATA BASE TO CURRENT BASE_^1_%STQ- DATBAS,I_^1_%ADQ- INPUT+2€€,I_^1_%STQ- DATLIM,I_$DATA STORAGE LIMIT_^1_%STQ- PROBAS,I_$NEXT PROGRAM RELOCATION BASE_^1_%STQ- CSQLIM,I_$NEXT PROGRAM LIMIT ADDRESS_^1_%STQ- QSAV,I_^1_%LDA- PROCOM,I_$SKIP IF COMMON PROTECT(ED_^1_%SAN NAMJ12_^1_%LDA- COMBAS,I_^1_%SAN 1_^1NAMJ12 LDA- PARLIM,I_$USE PARLIM FOR UPPER LIMIT IF COMMON PROTECTED_^1_%LDQ- QSAV,I_'OR NOT DECLARED_^1_%RTJ* SIGNCK_^1_%JMP* NAMPR2_^1_%JMP€€* OVFER1_^1_%SAM OVFER1_^1_%SAN NAMPR2_^1_%LDA- INPUT+3,I_#IF CSQLIM = UPPER LIMITS AND NO CSQ, THERE_^1_%SAZ NAMPR2_'IS NO CORE OVERFLOW_^1OVFER1 ENA -0_^1_%STA- SW6,I_^1NAMPR2 LDA- INPUT+3,I_#TEST AND XFER IF NO COMMAND SEQUENCE_^1_%STA- PROGCT,I_^1_%SAN 1_^1_%JMP* NAMPR3_^1_%LDQ- PROBAS,I_$PUT CSQ LIMIT FOR_^1_%ADQ- INPUT+3,I_$PROGRAM BEING LOADED IN_^1_%STQ- QSAV,I_(QSAV_^€€1_%LDA- PROCOM,I_$SKIP IF COMMON PROTECTED_^1_%SAN NAMJ_^1_%LDA- COMBAS,I_#OVERFLOW OCCURS IF LIMIT ADDR_^1_%SAN 1_-IS GREATER THAN COM BLOCK_^1NAMJ_!LDA- PARLIM,I_%THAN LIMIT OF PARTITION_^1_%RTJ* SIGNCK_^1_%JMP* NAMJ30_^1_%JMP* OVFER2_^1NAMJ3 SAP NAMJ30-*-1_^1OVFER2 ENA -0_*SET OVERFLOW SWITCH IF ERROR_^1_%STA- SW6,I_)CONDITION SHOULD ARISE_^1_%JMP* NAMPR3_^1NAMJ30 LDA- QSAV€€,I_'SET COMMAND SEQUENCE LIMIT_^1_%LDQ- CSQLIM,I_^1_%RTJ* SIGNCK_^1_%JMP* NAMJ31_^1_%JMP* NAMPR3_^1_%SAP 1_^1_%JMP* NAMPR3_^1NAMJ31 LDQ- QSAV,I_^1_%STQ- CSQLIM,I_^1NAMPR3 ENA $F_+IF CREP TABLE LOAD,DO NOT PRINT OUT NAME_^1_%AND- AINPUT,I_^1_%INA -5_^1_%SAZ OVFTST_^1_%INA -3_+OMIT PRINTING IF PROGLD FUNCTION_^1_%SAZ OVFTST_^1_%RTJ* PRNNAM_^1OVFTST LDA- SW6,I_^1_%SAM COROVF-*-€€1_#SET TO INDICATE CORE OVFL._^1_%JMP- NXTINP,I_#IF NO OVF., READ NEXT BLOCK_^1COROVF LDA =A5_)GIVE ERROR INDICATION IF_^1_%JMP- PRINT2,I_$PRINT MESSAGE AND ABORT_#30*532_^1*_]_^1PRNNAM NOP 0_^1_%LDA- BLANKS,I_^1_%STA- INPUT+2,I_^1_%STA- INPUT+3,I_^1_%STA- INPUT+10,I_^1_%STA- INPUT+7,I_^1_%LDQ =XINPUT+2,I_^1_%LDA- PROBAS,I_'LIST NAME + RELOCATION_^1_%RTJ NMPRNT_^1_%JMP* (PRNNAM)€€_^1*_]_^1*_$IF (A) IS NEG(LARGES) AND (Q) IS POS, RETURN TO P+1_^1*_$IF (Q) IS NEG(LARGER) AND (A) IS POS, RETURN TO P+2_^1*_$IF SIGNS ARE SAME, (A)-(Q) % A AND RETURN IS TO P+3_^1*_$IF SIGNS ARE SAME, (A)+(Q) ARE DESTROYED_^1*_]_^1SIGNCK NOP 0_^1_%SAP LIMA_)UPPER LIMIT IN A_^1_%SQP LIMC_*LOWER LIMIT IN Q_^1LIMA_!RAO* SIGNCK_^1_%SQP LIMB_^1_%SAP LIMC_^1LIMB_!RAO* SIGNCK_^1_%TC€tQ Q_,SIGNS ARE SAME, SUB Q FROM A AND_^1_%AAQ A_,PUT DIFFERENCE IN A_^1LIMC_!JMP* (SIGNCK)_^1*_]_^1_%END LOAD_^__tPRBDBZ1 CSY/ D15 P€1_%NAM RBDBZ1_'DECK-ID D15 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%EXT* WRDADR_%'WRDADR' = 'WRDCNT' IN CONTAB_^1_%EXT* DISKWR_^1_%EXT* SIGNCK_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU ADJOVF(82)_^1_%EQ€€U AINPUT(101)_^1_%EQU PRODAT(120)_^1_%EQU PROCOM(121)_^1_%EQU PARLIM(132)_^1_%EQU ASAV(29)_^1_%EQU BLKCNT(27)_^1_%EQU BZSSW(26)_^1_%EQU COMBAS(1)_^1_%EQU COMLIM(4)_^1_%EQU COUNT1(25)_^1_%EQU CSQLIM(6)_^1_%EQU DATBAS(2)_^1_%EQU DATLIM(5)_^1_%EQU ENDSW(8)_^1_%EQU INPCTR(15)_^1_%EQU INPREL(11)_^1_%EQU INPWRD(10)_^1_%EQU INPXC0(57)_^1_%EQU BGRLSW(9)_^1_%EQU NXTINP(6€€3)_^1_%EQU PRINT3(54)_^1_%EQU PROBAS(3)_^1_%EQU PROGCT(146)_^1_%EQU QINPUT(102)_^1_%EQU QSAV(30)_^1_%EQU SW6(28)_^1_%EQU WRDCNT(24)_^1_%EQU PRINT2(59)_^1_%EQU LNKSTR(112)_^1_%EQU LNKCTR(113)_^1_%EQU LNKEND(114)_^1_%EQU ARIT15(87)_^1_%EQU NGRLSW(86)_^1_%EQU SAVEA(143)_^1*_]_^1_%EQU NZERO($12),ZERO($22)_^1*_]_^1_%SPC 10_^1_%ENT RBDPRO_^1_%ENT BZSPRO_^1*_]_^1*_]_^1BZS€€PRO ENA -1_^1_%STA- BZSSW,I_%SET BZSSW TO MINUS ONE WHEN_^1*_9BZS BLOCK TO BE PROCESSED_^1_%ENA 0_^1_%JMP* RBDBZS_^1RBDPRO ENA 0_+INITIALIZE -_^1_%STA- BZSSW,I_%SET BZSSW TO ZERO WHEN AN RBD_^1*_:BLOCK IS TO BE PROCESSED_^1RBDBZS STA- COUNT1,I_$INITIALIZE COUNT1 TO ZERO_^1_%LDA- INPXC0,I_^1_%STA- WRDCNT,I_#PUT 'INPUT' IN WRDCNT_^1_%STA- BGRLSW,I_$SET BACKWARDS RELOC SWITCH NON-Z€€ERO_^1RBDB_!LDA =X(SW2A-SW2-1)_^1_%STA SW2+1_'PUT 'SW2A' IN SW2_^1_%LDA =X(SW3A-SW3-1)_^1_%STA SW3+1_'PUT 'SW3A' IN SW3_^1_%RTJ* NXTWRD_'PICK UP NEXT ENTRY IN RBD BLOCK_^1_%LDA- INPREL,I_%CONTAINING STARTING ADDRESS_^1_%INA -1_^1_%STA- SW6,I_'SET SWITCH FOR RLCTN TYPE_^1_%SAN 1_+TEST FOR AND XFER IF STARTING_^1_%JMP* RBDJ00_(ADDR NOT PROGRAM RELOC._^1_%SAP RBDJ01-*-1_!SKIP I€€F DATA RELOCATABLE_^1_%LDA =X(SW2C-SW2-1) PUT 'SW2C' IN SW2_^1_%LDQ =X(SW3C-SW3-1) PUT 'SW3C' IN SW3_^1_%JMP* RBDJ02_^1RBDJ01 LDA =X(SW2B-SW2-1) PUT 'SW2B' IN SW2_^1_%LDQ =X(SW3B-SW3-1) PUT 'SW3B' IN SW3_^1RBDJ02 STA SW2+1_^1_%STQ SW3+1_^1RBDJ00 RTJ ADJUST_^1_%JMP SW2_^1SW2A_!LDA- PROGCT,I_^1_%SAN SW2X_^1_%LDA- PROCOM,I_^1_%SAN SW_^1_%LDA- COMBAS,I_^1_%SAN 1_^1SW_#LDA- P€€ARLIM,I_^1_%JMP* RBDJ03_^1SW2X_!LDA- CSQLIM,I_#SET STORAGE LIM IF COM SEQ_^1_%JMP* RBDJ03_^1SW2B_!LDA- DATLIM,I_^1_%JMP* RBDJ03_^1SW2C_!LDA =N$E4_^1RBDJ03 STA- ASAV,I_^1RBDPR1 LDA- BZSSW,I_^1_%SAZ RBD_^1_%JMP* BZSPR2_^1RBD_"RTJ* NXTWRD_'PICK UP NEXT WORD_^1_%LDA- INPREL,I_#PICK UP RELOCATION FLAG_^1_%ENQ 0_^1_%SAZ RBDJ10-*-1_!SKIP IF NO RELOCATION_^1_%INA -1_^1_%LDQ- PROBAS,I_€€#SET REL BASE FOR PROG RLCTN_^1_%SAZ RBDJ10-*-1_!SKIP IF PROG RELOCATION_^1_%INA -1_^1_%LDQ- COMBAS,I_#SET REL BASE FOR COM STOR REL_^1_%SAZ RBDJ10-*-1_!SKIP IF COM STOR RLCTN_^1_%LDQ- DATBAS,I_#SET REL BASE FOR DATA STOR RL_^1RBDJ10 LDA- INPWRD,I_^1_%RTJ- ADJOVF,I_#PERFORM ADDRESS ARITHMETIC_^1_%STA* CSQ_^1_%EOR- NZERO-1_%IS THIS WORD = $7FFF_^1_%SAN 2_^1_%RTJ STRLNK_^1_%LDA-€€ ASAV,I_^1_%LDQ- INPCTR,I_^1_%RTJ SIGNCK_^1_%JMP* RBDJ11_^1_%JMP* RBDJ1A_^1_%SAM 1_^1_%SAN RBDJ11_'TEST FOR + TRANSFER IF OVERFLOW_^1RBDJ1A JMP SW3_*OF UPPER LIMIT OF INPUT AREA_^1RBDJ11 LDA- INPCTR,I_$SET A TO EXECUTION TIME STORAGE ADDRESS_^1_%RTJ DISKWR_^1CSQ_"ADC 0_-CSQ VALUE STORED HERE_^1_%NUM 0_,INDICATES STORE IS TO CSQ VIRTUAL_^1_%RAO- INPCTR,I_^1_%LDA- PROGCT,I_#TE€€ST FOR AND SKIP IF STARTING_^1_%ADD- SW6,I_)ADDR NOT PROG RELOCATABLE_^1_%SAN RBDJ13-*-1_#AND/OR WORD COUNT NON-ZERO_^1_%LDA- INPCTR,I_^1_%STA- CSQLIM,I_^1RBDJ13 LDA- ENDSW,I_%LAST WORD IN BLOCK_^1_%SAZ 1_,SKIP IF NOT_^1_%JMP- NXTINP,I_^1_%JMP* RBDPR1_^1*_]_^1SW3A_!LDA =A5_)GIVE ERROR INDICATION IF_^1_%JMP* SW3X_*OVERFLOW OF AVAIL. CORE_^1SW3B_!LDA =A7_+GIVE ERREO INDICATION IF€€_^1*_]_^1_%JMP* SW3X_*OVERFLOW OF DATA BLOCK_^1SW3C_!LDA =A6_)GIVE ERROR INDICATION IF_^1*_8OVERFLOW OF UNPROTECTED COMMUNICATION_^1*_8REGION_^1SW3X_!JMP- PRINT2,I_^1*_]_^1*_]_^1BZSPR2 LDA- ASAV,I_^1_%LDQ- INPCTR,I_^1_%RTJ SIGNCK_^1_%JMP* BZSJ20_^1_%JMP* SW3_^1_%SAP BZSJ20-*-1_!TEST FOR AND XFER IF OVERFLOW_^1_%JMP* SW3_+OF UPPER LIMIT OF INP AREA_^1BZSJ20 LDA- INPCTR,I_$A= EXEC€€UTION TIME ADDRESS_^1_%RTJ DISKWR_^1_%NUM 0_,VALUE THAT WILL BE STORED- ZERO FOR BZS_^1_%NUM 0_,INDICATES VALUE IS COMMAND SEQUENCE_^1_%RAO- INPCTR,I_^1_%LDA- PROGCT,I_#TEST FOR AND SKIP IF STARTING_^1_%ADD- SW6,I_)ADDR NOT PROG RELOCATABLE_^1_%SAN BZSJ21-*-1_#AND/OR WORD COUNT NON-ZERO_^1_%LDA- INPCTR,I_^1_%STA- CSQLIM,I_^1BZSJ21 LDA- BLKCNT,I_^1_%INA -1_^1_%STA- BLKCNT,I_^1_€€%SAZ BZSPR3-*-1_!STORE ZERO AT WORD AND LOOP_^1_%JMP* BZSPR2_(UNTIL (BLKCNT)-1 = 0_^1BZSPR3 LDA- ENDSW,I_^1_%SAZ 1_+TEST FOR AND XFER TO EXIT_^1_%JMP- NXTINP,I_%IF LAST ENTRY IN BLOCK_^1_%JMP BZSPR1_'LOOP IF NOT_^1_%EQU BZSPR1(RBDB)_^1NXTWRD NUM $FFFF_^1_%LDA- COUNT1,I_^1_%SAN NWJ1-*-1_^1_%ENA -4_^1_%STA- COUNT1,I_^1_%RAO- WRDCNT,I_^1_%LDA (WRDADR)_#PICK UP WORD CONTAINING €€4_^1_%STA* RELWRD_(REL BYTES + STORE AT RELWRD_^1NWJ1_!ENA 0_^1_%LDQ* RELWRD_^1_%LLS 4_+EXTRACT LEFT MOST 4 BIT REL_^1_%STQ* RELWRD_(BYTE FROM + STORE AT RELWRD_^1_%ENQ 0_+BIT 3 OF REL BYTE = 1 IF LAST_^1_%LLS 13_,REL BYTE IN INPUT BLOCK_^1_%STQ- ENDSW,I_$STORE BIT 3 AT NGRLSW_^1_%ENQ 0_+BIT 2 OF REL BYTE = 1 IF_^1_%LLS 1_-NEG RELOCATION_^1_%STA- SAVEA,I_^1_%LDA- ARIT15,I_$TE€€ST FOR NEGATIVE REL IN BIT 2, IT IS_^1_%SAZ NWA_*ILLEGAL WITH 16 BIT ARITHMETIC_^1_%SQZ NWA_*SKIP IF POS REL_^1_%JMP* NEGERR_'16 BIT ARITH + NEG REL = IRRECOV. ERROR_^1NWA_"STQ- NGRLSW,I_^1_%LDA- SAVEA,I_^1_%ENQ 0_^1_%LLS 2_-TYPE OF ADDRESS RELOCATION_^1_%STQ- INPREL,I_#STORE BITS 0-1 AT INPREL_^1_%RAO- COUNT1,I_^1_%RAO- WRDCNT,I_#NO RELOCATION IF (INPREL) =00_^1_%LDA (WRDADR)€€_#PROG RLCTN IF (INPREL) = 01_^1_%STA- INPWRD,I_#COM STOR RLCTN IF (INPREL)=10_^1*_8DATA STOR RLCTN IF (IMPREL)= 11_^1_%SQN NWJB_)SKIP IF NOT ABS RELCTN_^1_%ENA 1_^1_%JMP* NWJA_^1*_8RELOC. ADDR. GR. OR EQ. $7F80 ARE ASSUMED TO_^1*_8MEAN BACKWARD RELOCATION -- THE FORTRAN_^1*_8COMPILER GENERATES SUCH RELOCATABLE ADDRESSES_^1*_8ON INDEXED VARIABLES._!LARGER BACKWARD_^1*_8RELOCATION€€ MAY BE OBTAINED BY MAKING THE VALUE_^1*_8AT NWJB+2 SMALLER._^1NWJB_!SAM NWJA_^1_%SUB =X$7F80_%THIS VALUE IS STRICTLY ARBITRARY_^1_%SAM NWJA_^1_%CLR A_,BIT 15 OF THESE VALUES MUST_^1*_8BE SET TO CAUSE 16 BIT ADDRESS ARITHMETIC_^1*_8TO GENERATE AN END AROUND CARRY._^1NWJA_!STA- BGRLSW,I_^1NWJ2_!LDA- BZSSW,I_%DATA RELOCTN IF = 11_^1_%SAN 1_+IF RBD BLOCK, PLACE WORD OF_^1_%JMP* €€(NXTWRD)_%COM SEQ IN INPWRD AND EXIT_^1_%RAO- WRDCNT,I_#IF BZS BLOCK, PLACE BZS START_^1_%LDA (WRDADR)_%ADR IN INPWRD AND BLOCK_^1_%STA- BLKCNT,I_%SIZE IN BLKCNT. THEN EXIT._^1_%JMP* (NXTWRD)_^1RELWRD NUM 0_^1NEGERR LDA =A9_*ERROR IF NEGATIVE RELOCATION OCCURS_^1_%JMP- PRINT2,I_^1ADJUST NUM $FFFF_^1_%LDA- INPREL,I_#TEST FOR AND SKIP IF STARTING_^1_%SAZ 1_,ADDRESS ABSOLUTE_^1_€€%JMP* ADJ1_^1_%LDA- INPWRD,I_^1_%STA- INPCTR,I_#STORE ABS ADDRESS IN INPCTR_^1ADJA_!LDQ =N$C5_^1_%RTJ SIGNCK_^1_%JMP* ADJB_^1_%JMP* ADJ2_^1_%SAM ADJ2_^1ADJB_!LDA =N$E3_^1_%LDQ- INPCTR,I_^1_%RTJ SIGNCK_^1_%JMP* *+3_^1_%JMP* ADJ2_*ABSOLUTE STARTING ADDRESS_^1*_8ILLEGAL IF LESS THAN $C5_^1_%SAM ADJ2_)OR GREATER THAN $E3_^1_%JMP* (ADJUST)_#EXIT_^1ADJ2_!JMP* SW3_^1ADJ1_!INA -1_*P€€ICK UP PROGRAM RELOCATION_^1_%LDQ- PROBAS,I_%BASE IF (INPREL) = 1_^1_%SAZ 4_^1_%LDA- PRODAT,I_^1_%SAZ 1_^1_%JMP* SW3C_^1_%LDQ- DATBAS,I_%RELOCATION BASE_^1_%LDA- INPWRD,I_#PICK UP RELATIVE START ADDR_^1_%RTJ- ADJOVF,I_#PERFORM ADDRESS ARITHMETIC_^1_%STA- INPCTR,I_#STORE ABS VALUE IN INPCTR_^1_%JMP* (ADJUST)_#EXIT_^1SW2_"NUM $1800,$FFFF JUMP THROUGH SW2_^1SW3_"NUM $1800,$FFFF €€JUMP THROUGH SW3_^1STRLNK NOP 0_^1_%LDA- INPREL,I_^1_%INA -1_^1_%SAZ 1_^1_%JMP* SB_+EXIT IF NOT PROG RELOCATABLE_^1_%LDA- LNKCTR,I_$CHECK IF LNKTBL IS FULL_^1_%SUB- LNKEND,I_^1_%SAM SA_+SKIP IF NOT FULL_^1_%LDA =A15_)ISSUE ERROR MESSAGE AND EXIT LOADER_^1_%JMP- PRINT2,I_^1SA_#LDA- INPCTR,I_$STORE ADDRESS OF THIS CSQ WORD THAT_^1_%LDQ- LNKCTR,I_$CONTAINS $7FFF - IT MAY BE A LIN€rK_^1_%STA- (ZERO),Q_$ADDRESS POINTING TO $7FFF_^1_%RAO- LNKCTR,I_^1SB_#JMP* (STRLNK)_^1*_]_^1*_]_^1_%END LOAD_^__rPENTEX1 CSY/ D16 P€1_%NAM ENTEX1_'DECK-ID D16 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS ENTRY POINT,EXTERNAL BLOCKS FOR RELO. LOADER_^1_%SPC 1_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU CSQLIM(6)_^1_%EQU ENTPNT(1€€3)_^1_%EQU INPCTR(15)_^1_%EQU INPWRD(10)_^1_%EQU NGRLSW(9)_^1_%EQU PROBAS(3)_^1_%EQU SW6(28)_^1_%EQU MASK1($42)_^1_%EQU NZERO($12)_^1_%EQU EXTSWT(141)_^1_%SPC 10_^1*_]_^1_%EXT* ENTSTR,EXSTOR_^1*_]_^1_%EQU IGNORE(111)_^1_%EQU INPXCC(62)_^1_%EQU NXTINP(63)_^1_%EQU PRINT3(54)_^1_%EQU PRINT5(98)_^1_%EQU TABSCH(40)_^1_%ENT ENTPRO_^1_%ENT EXTPRO_^1ENTPRO LDA- INPXCC,I_#PU€€T 'INPUT-3' IN INPCTR_^1_%STA- INPCTR,I_^1_%ENA 0_^1_%STA- EXTSWT,I_^1ENTPR1 RTJ* NXTNAM_%PICK UP ENTRY FROM ENT BLOCK_^1_%RTJ- TABSCH,I_#SEARCH LOAD TAB FOR SAME NAME_^1_%LDQ- SW6,I_'TEST FOR AND SKIP IF MATCHING_^1_%SQM ENTPR3_'NAME NOT IN LOADER TABLE_^1_%LDA- IGNORE,I_$IF THIS IS A CREP LOAD, DO NOT FLAG ERROR_^1_%SAN ENTPR4_^1_%LDA =A8_*GIVE ERROR INDICATION_^1_%RTJ- PRINT€€3,I_%PRINT NAME FOR DUPL. ENT PT_^1_%RTJ- PRINT5,I_#SET SW1 TO 'SW1D' AT INPSLW,_^1_%JMP* ENTPR4_^1ENTPR3 RTJ ENTSTR_^1ENTPR4 JMP* ENTPR1_^1EXTPRO LDA- INPXCC,I_#PUT ' INPUT-3' IN INPCTR_^1_%STA- INPCTR,I_^1_%ENA 1_^1_%STA- EXTSWT,I_^1EXTPR1 RTJ* NXTNAM_%PICK UP ENTRY FROM EXT BLOCK_^1EXTPR3 RTJ EXSTOR_^1_%JMP* EXTPR1_%LOOP FOR NEXT EXT BLOCK ENTRY_^1NXTNAM NUM $FFFF_^1_%LDQ- I€€NPCTR,I_^1_%INQ 3_^1_%ENA 1_^1_%AAQ A_+SET INPCTR TO 1ST WORD ADDR_^1_%STA- INPCTR,I_%OF NEXT ENTRY IN INP BLOCK_^1_%LDA- 1,Q_)PICK UP WORD1 OF ENTRY_^1_%INA 0_^1_%SAN 1_+TEST FOR AND XFER TO EXIT_^1_%JMP- NXTINP,I_%IF END OF INPUT BLOCK_^1_%LDA- 4,Q_)PICK UP ENTRY ADDRESS FROM_^1_%SAM ABSADR-*-1_#WORD4 - SKIP IF ABSOLUTE_^1_%ADD- PROBAS,I_#ADD PROGRAM RELOCATION BASE_^1_%STA€€- ENTPNT,I_^1*_8IF PGM RELOC PONTER IN EXT BLOCK_^1*_**MSOS 4.1**_^1_%STA* L01FLG_I**MSOS 4.1**_^1_%JMP* LNKCR1_'GO LINK TO THE CREP1 TABLE_'**MSOS 4.1**_^1BG1_"JMP- CMNXIT,I_G**MSOS 4.1**_^1*_]_^1*_]_^1READIN NOP 0_^1_%LDA =X$8C2_^1_%STA- MASINP,I_^1_%LDA- SAVEA,I_^1_%STA SECTNO_^1_%LDA- INPXC0,I_$READ IN SECTOR_^1_%ENQ 96_^1_%RTJ MDRIV_^1_%RAO- SAVEA,I_^1_%JMP* (READIN)_^1*_Z**MSOS 4.1**_^1*_Z**MSOS€ΐ 4.1**_^1LNK01 ENA 1_,SET DUAL LINAGE FLAG_-**MSOS 4.1**_^1_%STA* L01FLG_I**MSOS 4.1**_^1_%JMP* LNKCRP_'LINK TO THE CREP TABLE_+**MSOS 4.1**_^1L01FLG NUM 0_N**MSOS 4.1**_^1_%END LNKCR1_^__ΐPPATCH CSY/ D21 P€1_%NAM PATCH_(DECK-ID D21 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT PATCH_^1*_]_^1_%EXT* DISKRD,DISKWR_^1*_]_^1*_$INDEX TO CONSTANT TABLE STORAGE_^1*_]_^1_%EQU EXTCTR(7)_^1_%EQU EXTSTR(118)_^1_%EQU SECTOR(138)_^1_%EQU €€TEMP3(144)_^1_%EQU EXTADR(143)_^1_%EQU INPXC0(57)_^1_%EQU INPCTR(15)_^1_%EQU ABRLSW(9)_^1_%EQU TABSCH(40)_^1_%EQU SW6(28)_^1_%EQU NOTLNK(16)_^1_%EQU LINK(14)_^1_%EQU ENTPNT(13)_^1_%EQU LINK1(104)_^1_%EQU HSHADR(43)_^1*_]_^1_%EQU ZERO($22)_^1_%EQU MASK2($21)_"=$8000_^1*_]_^1*_]_^1PATCH NOP 0_^1_%ENA 0_^1_%STA- NOTLNK,I_^1_%LDA- EXTSTR,I_^1_%STA- EXTADR,I_^1_%SUB- EXT€€CTR,I_$SKIP IF ANY EXTERNALS IN TABLE_^1_%SAN PA_^1_%JMP* (PATCH)_^1PA_#ENQ -4_+MOVE EXTERNAL INTO INPUT BUFFER_^1_%STQ- TEMP3,I_^1_%LDQ- INPXC0,I_$SET INPUT CTR TO FIRST ADDRESS OF_^1_%STQ- INPCTR,I_$INPUT BUFFER_^1PB_#LDQ- INPCTR,I_^1_%LDA- EXTADR,I_^1_%RTJ DISKRD_^1_%NUM $8000_^1_%ADQ- TEMP3,I_^1_%STA- 4,Q_^1_%RAO- TEMP3,I_^1_%LDA- TEMP3,I_^1_%RAO- EXTADR,I_^1_%SAZ LB_^1_%€€JMP* PB_^1LB_#LDQ- INPCTR,I_^1_%LDA- (ZERO),Q_^1_%STA- ABRLSW,I_$STORE ABSOLUTE/RELATIVE EXT SWITCH_^1_%LDA- 1,Q_*EXTERNAL IS PATCHED IF WORD 2 IS NEGATIVE._^1_%SAP LA_+SKIP IF NOT PATCHED_^1_%JMP* LH_^1LA_#RTJ- TABSCH,I_$SEARCH ENTRY POINTS FOR MATCH_^1_%LDA- SW6,I_^1_%SAP LE_+SKIP IF THERE IS A MATCH_^1_%ENA 1_^1_%STA- NOTLNK,I_$NO ENTRY, SET FLAG THAT UNPATCHED EXTERNAL_^1_%€€JMP* LH_-EXISTS._^1LE_#LDQ- INPCTR,I_^1_%LDA- 3,Q_^1_%STA- LINK,I_^1_%RTJ- LINK1,I_%PATCH EXTERNAL_^1_%LDQ- INPCTR,I_^1_%LDA- 1,Q_^1LG_#EOR- MASK2_(SET 'PATCHED' FLAG IN WORD 2_^1_%STA* VALUE_^1_%LDA- EXTADR,I_$WRITE OUT PATCH WORD_^1_%INA -3_^1_%RTJ DISKWR_^1VALUE ADC 0_^1_%NUM $8000_^1_%EQU MASK1($11)_^1_%EQU PRESET(88)_^1_%LDQ- PRESET,I_$IF ENTRY POINT IS A PRESET-CLEAR_^€N1_%SQP LH_+UPPER BIT OF WORD 3 TO INDICATE_^1_%LDA- MASK1_(AN EXTERNAL HAS BEEN PATCHED_^1_%LAQ Q_,WITH IT._^1_%STQ* VALUE1_^1_%LDA- HSHADR,I_^1_%INA 2_^1_%RTJ DISKWR_^1VALUE1 ADC 0_^1_%NUM $8000_^1LH_#LDA- EXTADR,I_^1_%SUB- EXTCTR,I_^1_%SAZ LI_+SKIP IF ALL EXTERNALS PROCESSED_^1_%JMP* PA_^1LI_#JMP* (PATCH)_^1_%END PATCH_^__NPTBSCH1 CSY/ D22 P€1_%NAM TBSCH1_'DECK-ID D22 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT TABSCH_^1_%ENT EXTSCH_^1_%EQU EXTCTR(7)_^1_%EQU EXTADR(143)_^1_%EQU EXTSTR(118)_^1_%EQU EXTPCH(85)_^1_%EQU PRESET(88)_^1_%EQU AHOLD(136)_^1_%EQU €€INPCTR(15)_^1_%EQU SCHXIT(39)_^1_%EQU SW6(28)_^1_%EQU HSHADR(43)_^1_%EQU TEMP(45)_^1_%EQU ENTPNT(13)_^1*_]_^1_%EXT* HASH,BITCHK,DISKRD_^1*_]_^1*_]_^1_%EQU LPMSK(2)_^1TABSCH RTJ HASH_)HASH ENTRY OR EXTERNAL NAME_^1_%RTJ BITCHK_'CHECK IF ENTRY IN BIT TABLE_^1_%SAN TAA_^1TA_#ENA -0_+NO ENTRY-RETURN_^1_%STA- SW6,I_^1_%JMP- SCHXIT,I_^1TAA_"ENA 0_^1_%STA- PRESET,I_^1_%LDA- HSH€€ADR,I_^1TB_#RTJ* SEARCH_'SEARCH FOR MATCHING ENTRY POINT_^1_%JMP* TE_+MATCH FOUND_^1TCC_"LDA- HSHADR,I_$NAMES DO NOT MATCH, PICK UP ADDRESS OF_^1_%INA 4_,NEXT ENTRY_^1_%RTJ* GET_^1_%INA 0_^1_%SAN 1_^1_%JMP* TA_+NO MORE ENTRIES,EXIT_^1_%STA- HSHADR,I_^1_%JMP* TB_^1*_]_^1TE_#RTJ* GET_*PICK UP VALUE OF MATCHED ENTRY POINT_^1_%STA- ENTPNT,I_^1_%JMP- SCHXIT,I_^1*_]_^1*_]_^1EXTSCH NOP€€ 0_^1_%ENA 0_,SET 'EXTERNAL PATCHED' FLAG TO ZERO_^1_%STA- EXTPCH,I_^1_%LDA- EXTSTR,I_^1EXA_"STA- EXTADR,I_^1_%EOR- EXTCTR,I_^1_%SAN EXB_^1_%ENA -0_+SET SW6 NEGATIVE TO INDICATE_^1_%STA- SW6,I_(NO MATCH FOUND_^1_%JMP* (EXTSCH)_$EXIT_^1EXB_"LDA- EXTADR,I_^1_%RTJ* SEARCH_^1_%JMP* EXC_*MATCH FOUND_^1_%LDA- EXTADR,I_^1_%INA 4_^1_%JMP* EXA_*NAMES DO NOT MATCH, TRY NEXT ENTRY_^1EXC_€€"INA -2_+(A)= 2ND WORD OF EXT ENTRY_^1_%RTJ* GET_^1_%STA- EXTPCH,I_$STORE 2ND WORD IN PATCHED SWITCH_^1_%JMP* (EXTSCH)_^1*_]_^1*_]_^1*_*ON ENTRY TO SEARCH SUBROUTINE_!A REG IS EQUAL_^1*_*TO NEXT ADDRESS OF ENTRY OR EXTERNAL IN TABLE._^1*_*INPCTR = ADDRESS OF ENTRY OR EXTERNAL BEING_^1*_*COMPARED TO TABLE_^1*_]_^1*_*ON EXIT A REG IS EQUAL TO ADDRESS OF THE_^1*_*ENTRY POINT VALUE OR€€ ADDRESS OF EXTERNAL_^1*_*LINK ADDRESS AND SW6 IS POSITIVE ZERO_^1*_]_^1*_*EXIT IS TO P+1 IF MATCH FOUND,P+2 IF NOT FOUND_^1*_]_^1SEARCH NOP 0_^1_%STA- TEMP,I_'STORE ADDRESS OF TABLE_^1_%ENQ -3_+SET SWITCH FOR 3 WORD LOOP_^1_%STQ- SW6,I_^1SA_#RTJ* GET_*GO GET WORD_^1_%STA- PRESET,I_I**MSOS4.0*_^1_%AND- LPMSK+15_^1_%STA- AHOLD,I_%SAVE WORD OF NAME_^1_%LDQ- SW6,I_^1_%ADQ- INPCTR,I_€€$GET OTHER WORD FROM INPUT BUFFER AND_^1_%LDA- 3,Q_*COMPARE WITH WORD FROM TABLE_^1_%AND- LPMSK+15_I**MSOS4.0*_^1_%EOR- AHOLD,I_^1_%SAZ SB_+SKIP IF MATCH OF WORDS_^1_%RAO* SEARCH_'NAMES DO NOT MATCH, EXIT TO P+2_^1_%JMP* (SEARCH)_^1SB_#RAO- SW6,I_^1_%LDQ- SW6,I_(PREPARE TO EXAMINE NEXT WORD_^1_%RAO- TEMP,I_^1_%LDA- TEMP,I_^1_%SQZ SC_+SKIP AND EXIT TO P+1 IF LAST WORD_^1_%JMP* SA_€ˆ+GO TO COMPARE NEXT WORD_^1SC_#JMP* (SEARCH)_^1*_]_^1*_]_^1GET_"NOP 0_^1_%RTJ DISKRD_^1_%NUM $8000_^1_%JMP* (GET)_^1_%END TABSCH_^__ˆPHASH CSY/ D23 P€1_%NAM HASH_)DECK-ID D23 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1_%ENT HASH_^1*_]_^1*_$THIS ROUTINE HASHES THE ASCII CHARACTERS OF AN ENTRY POINT OR_^1*_$EXTERNAL NAME AND COMPUTES THE ADDRESS IN THE HASH TABLE._^1*_$THE€€ ASCII CHARACTERS ARE ADDED TOGETHER AND THE SUM_^1*_$IS DIVIDED BY THE NUMBER OF POSSIBLE ENTRIES IN_^1*_$THE TABLE. THE REMAINDER IS THE HASH CODE._^1*_]_^1*_$SINCE THERE ARE 5 WORDS USED PER ENTRY, THE HASHCD_^1*_$IS MULTIPLIED BY 5 TO FIND THE ADDRESS OF THE ENTRY_^1*_$IN THE HASH TABLE._^1*_]_^1*_]_^1*_$INDEXES TO THE CONSTANT TABLE_^1*_]_^1*_]_^1_%EQU LPMSK(2)_^1_%EQU FIVE(€€$43)_^1_%EQU ZERO($22)_^1*_]_^1_%EQU HASHCD(44)_^1_%EQU SW6(28)_^1_%EQU INPCTR(15)_^1_%EQU TEMP(45)_^1_%EQU HSHADR(43)_^1_%EQU HSHTBL(108)_^1*_]_^1*_]_^1HASH_!NOP 0_^1_%ENQ 0_,SET HASHCD TO ZERO_^1_%STQ- HASHCD,I_^1_%ENQ -3_^1_%STQ- SW6,I_^1_%LDA- INPCTR,I_^1_%STA- TEMP,I_^1HA_#LDQ- TEMP,I_^1_%LDA- (ZERO),Q_^1_%AND- LPMSK+15_^1HC_#ADD- HASHCD,I_^1_%STA- HASHCD,I_^1_%RAO- €ΖSW6,I_^1_%LDQ- SW6,I_^1_%SQZ HD_^1_%RAO- TEMP,I_^1_%JMP* HA_^1*_]_^1*_]_^1HD_#ENQ 0_^1_%DVI- HSHTBL,I_^1_%TRQ A_^1_%STA- HASHCD,I_^1_%MUI- FIVE_^1_%STA- HSHADR,I_^1_%JMP* (HASH)_^1_%END HASH_^__ΖPTBSTR1 CSY/ D24 P€1_%NAM TBSTR1_'DECK-ID D24 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT ENTSTR,EXSTOR_^1_%ENT BITCHK_^1_%EXT* BITTBL_^1_%EXT* DISKWR_^1*_]_^1_%EQU HFFFF($12)_^1_%EQU H10($27)_^1_%EQU ONEBIT($23),ZERO($22)_^1_%EQU SW6(28)€€_^1_%EQU ENTPNT(13)_^1_%EQU INPCTR(15)_^1_%EQU OVCTR(125)_^1_%EQU EXTSTR(118)_^1_%EQU HSHADR(43)_^1_%EQU TEMP(45)_^1_%EQU EXTCTR(7)_^1_%EQU HASHCD(44)_^1_%EQU PRINT2(59)_^1*_]_^1ENTSTR NOP 0_^1_%LDA* BITSW_(IS THERE AN ENTRY IN THE HASH TABLE_^1_%SAZ EA_^1_%JMP* EB_^1EA_#LDQ* BITWRD_'NO,SET BIT IN SCATTER TABLE AND_^1_%LDA BITTBL,Q_^1_%EOR* BITPOS_^1_%STA BITTBL,Q_^1_%€€JMP* EBA_^1EB_#LDA- OVCTR,I_%STORE ADDRESS OF NEW ENTRY IN POINTER_^1_%STA* VALUE_(WORD OF LAST ENTRY_^1_%TRA Q_^1_%INA 5_^1_%SUB- EXTSTR,I_$CHECK IF OVERFLOW TABLE IS FULL_^1_%SAP 1_^1_%JMP* EAA_^1_%LDA =A2_^1_%JMP- PRINT2,I_^1*_]_^1*_]_^1*_]_^1*_]_^1EAA_"LDA- HSHADR,I_^1_%INA 4_^1_%RTJ* STORE_^1_%STQ- HSHADR,I_$STORE ADDRESS IN OVERFLOW TABLE IN HSHADR_^1_%INQ 5_^1_%STQ- OV€€CTR,I_%INCREMENT TO NEXT AVAILABLE LOCATION IN TABLE_^1EBA_"RTJ* STRENT_^1_%JMP* (ENTSTR)_^1*_]_^1*_]_^1STRENT NOP 0_^1_%LDA- HSHADR,I_$HSHADR CONTAINS START ADDRESS OF AVAILABLE_^1_%STA- TEMP,I_*SLOT_^1_%ENQ -3_^1_%STQ- SW6,I_^1EC_#ADQ- INPCTR,I_^1_%LDQ- 3,Q_*PICK UP WORD OF ENTRY OR EXTERNAL NAME_^1_%STQ* VALUE_^1_%LDA- TEMP,I_^1_%RTJ* STORE_(STORE IN APPROPRIATE TABLE_^1_%RAO-€€ SW6,I_^1_%LDQ- SW6,I_^1_%RAO- TEMP,I_^1_%SQZ ED_+SKIP IF FINISHED_^1_%JMP* EC_^1*_]_^1ED_#LDQ- ENTPNT,I_$STORE VALUE OF NAME IN TABLE_^1_%STQ* VALUE_^1_%LDA- TEMP,I_^1_%RTJ* STORE_^1_%RAO- TEMP,I_'STORE FFFF IN POINTER WORD FOR ENTRY POINT._^1_%LDQ- HFFFF_(IF THI_^1_%STQ* VALUE_^1_%LDA- TEMP,I_^1_%RTJ* STORE_^1EE_#JMP* (STRENT)_^1*_]_^1*_]_^1*_]_^1EXSTOR NOP 0_^1_%LDA- EXTCTR,I_€€$STORE ADDRESS OF NEXT AVAILABLE SLOT IN_^1_%STA- HSHADR,I_'EXTERNAL TABLE INTO HSHADR_^1_%INA 4_^1_%STA- EXTCTR,I_$INCREMENT EXTERNAL TABLE COUNTER_^1_%RTJ* STRENT_^1_%JMP* (EXSTOR)_^1*_]_^1*_]_^1STORE NOP 0_^1_%RTJ DISKWR_^1VALUE ADC 0_^1_%NUM $8000_^1_%JMP* (STORE)_^1*_]_^1BITSW NUM 0_^1BITWRD NUM 0_^1BITPOS NUM 0_^1*_]_^1*_]_^1BITCHK NOP 0_^1_%LDA- HASHCD,I_^1_%E€hNQ 0_^1_%SAZ BA_^1_%DVI- H10_*DIVIDE HASHCODE BY 16 TO FIND WORD_^1*_8AND BIT POSITION_^1BA_#INQ ONEBIT_^1_%LDQ- (ZERO),Q_%Q = (ONEBIT+(Q))_^1_%STQ* BITPOS_'MASK FOR FINDING CORRECT BIT_^1_%TRA Q_^1_%STQ* BITWRD_^1_%LDA BITTBL,Q_$TEST IF BIT IS SET INDICATING AN ENTRY IN_^1_%AND* BITPOS_'THAT POSITION_^1_%STA* BITSW_^1_%JMP* (BITCHK)_^1_%END TABSTR_^__hPPAGE CSY/ D25 P€1_%NAM PAGE_)DECK-ID D25 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$CALLING SEQUENCE TO GET A WORD_^1*_$RTJ DISKRD_^1*_$NUM $8000 OR 0_"$8000 IF WORD CONTAINED IN ENTRY-EXTERNAL PAGE_^1*_80 IF WORD CONTAINED IN CSQ IMAGE PAGE€€S_^1*_$A REGISTER EQUAL TO ADDRESS OF WORD_^1*_]_^1*_]_^1*_$CALLING SEQUENCE TO STORE A WORD_^1*_$RTJ DISKWR_^1*_$ADC VALUE_(WORD TO BE STORED_^1*_$NUM $8000 OR 0_"$8000 IF WORD TO BE STORED IN ENT-EXT PAGES_^1*_80 IF WORD TO BE STORED IN CSQ IMAGE PAGES_^1*_$A REGISTER EQUAL TO ADDRESS OF VALUE_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_*(Q) IS SAVED ON ENTRY AND RESTORED ON EXIT_^1*_]€€_^1_%EXT NUMSEC_^1_%EXT REFER_^1_%EXT NUMBER_^1_%EXT MODIFY_^1_%EXT* SIGNCK_^1_%EXT* MDRIV_^1_%EXT* SECTNO_^1_%EXT* STRTBL_^1_%ENT DISKRD,DISKWR,WRTOUT_^1_%ENT FLGADR_^1_%ENT ADPAGE_^1*_]_^1_%EQU H10($27)_^1_%EQU NZERO($12)_^1_%EQU LPMSK(2)_^1_%EQU ZERO($22),ONEBIT($23)_^1_$EQU FLGBSE(145)_^1_%EQU FLGLGN(50)_^1_%EQU PGEWRT(109)_^1_%EQU PAGE(122)_^1_%EQU MASINP(107)_^€€1_%EQU LGEPGE(110)_^1_%EQU PARBAS(131)_^1_%EQU NOPAGE(130)_^1_%EQU ADDR(117)_^1_%EQU CORADR(119)_^1_%EQU MAXPGE(129)_^1_%EQU CSQSEC(128)_^1_%EQU ENTSEC(127)_^1_%EQU PRINT2(59)_^1*_]_^1*_]_^1DISKRD NOP 0_^1_%STQ* SQ_+SAVE Q REGISTER_^1_%CLR Q_,SET READ INDICATOR_^1_%JMP* DISKRW_^1*_]_^1DISKWR NOP 0_^1_%STQ* SQ_^1_%LDQ* DISKWR_^1_%STQ* DISKRD_'STORE RETURN_^1_%LDQ- (ZERO€€),Q_^1_%STQ* VALUE_(SAVE VALUE TO BE STORED_^1_%RAO* DISKRD_'UPDATE RETURN_^1_%ENQ 1_,SET WRITE INDICATOR_^1*_]_^1DISKRW STQ* RWFLAG_'READ/WRITE FLAG = 0/1 RESPECTIVELY_^1_%LDQ* (DISKRD)_^1_%STQ* PGFLAG_'STORE ENT-EXT/CSQ INDICATOR_^1_%RAO* DISKRD_'UPDATE RETURN_^1_%STA* SA_^1_%SQM DA_+SKIP IF ENT-EXT REFERENCE_^1_%LDQ- PARBAS,I_%SEE IF THIS IS A ABSOLUTE REFERENCE_^1_%RTJ SIG€€NCK_'OUTSIDE OF PAGES, BUT FIRST CHECK SIGNS_^1_%JMP* DAA_*RETURN HERE REF .GT. PARBAS_^1_%JMP* ABSLUT_'RETURN HERE IF REF .LT. PARBAS_^1*_*SIGNS ARE SAME,COMPARE_^1_%SAP DA_+SKIP IF REF .GT. PARBAS_^1_%JMP* ABSLUT_^1DAA_"SUB- PARBAS,I_$DECREASE CSQ ADDRESS TO RELATIVE VALUE_^1DA_#CLR Q_,ON ENTRY,A= ADDRESS OF WORD BEING SOUGHT_^1_%SAZ DB_^1_%DVI- PAGE,I_'DIVIDE BY LENGTH OF PAG€€E TO GET_^1*_8PAGE NUMBER (QUOTIENT) AND_^1DB_#STQ* WORD_)INCREMENTAL WORD NUMBER_^1_%LDQ* PGFLAG_^1_%EAQ A_^1_%STA* PAGENO_'COMBINE PAGE NUMBER AND VIRTUAL INDICATOR_^1_%EOR* LSTPGE_'WAS LAST PAGE_!THE SAME_^1_%SAN NOTSME_^1_%LDQ* FLGADR_^1_%JMP* FOUND1_^1NOTSME LDQ- NZERO-1_^1_%STQ* MINREF_^1_%LDQ- NOPAGE,I_$NUMBER OF PAGES IN CORE_^1_%TCQ Q_^1_%STQ- ADDR,I_^1_%LDA- CORADR,I€€_^1_%STA* MINBAS_^1_%LDQ- FLGBSE,I_$SET FLGADR TO BASE OF CORE FLAG TABLE_^1FIND_!STQ* FLGADR_^1_%STA* ADPAGE_^1_%LDA* (NUM+1),Q_^1_%EOR* PAGENO_^1_%SAN REFR_)SKIP IF PAGE NUMBERS DO NOT MATCH_^1_%JMP* FOUNDA_^1*_]_^1*_]_^1REFR_!LDA+ REFER,Q_^1_%SUB* MAXREF_^1_%SAM FB_^1_%LDA* (REFR+1),Q_^1_%STA* MAXREF_^1FB_#LDA* (REFR+1),Q_^1_%SUB* MINREF_^1_%SAZ NOTOK_^1_%SAP MINOK_^1NOTOK €€LDA* (REFR+1),Q_^1_%STA* MINREF_^1_%STQ* MINFLG_'SAVE ADRESS OF LST REF PAGES'S CORE FLAGS_^1_%LDA* ADPAGE_'SAVE ADDRESS OF LEAST REF PAGE_^1_%STA* MINBAS_^1MINOK RAO- ADDR,I_^1_%LDA- ADDR,I_^1_%SAN NOTEND_^1_%JMP* END_^1NOTEND LDA* ADPAGE_'INCREASE ADPAGE BY LENGTH_^1_%ADD- PAGE,I_'OF PAGE (ADPAGE=CORE BASE_^1*_?OF PAGE BEING EXAMINED)_^1_%ADQ- FLGLGN,I_$ADD LENGTH OF FLAGS TO Q€€ AND LOOP TO_^1*_:LOOK AT NEXT PAGES'S CORE FLAGS_^1_%JMP* FIND_^1*_]_^1ABSLUT LDQ* SA_+GET ADDRESS OF WORD_^1_%LDA* RWFLAG_^1_%SAZ ABS_*SKIP IF READ OPERATION_^1_%LDA* VALUE_^1_%STA- (ZERO),Q_$STORE VALUE IN WORD_^1_%JMP* EXIT_^1ABS_"LDA- (ZERO),Q_$PUT WORD SOUGHT IN A_^1_%JMP* EXIT_^1*_]_^1FOUND STQ* ADPAGE_'CORE ADDRESS OF PAGE TO BE REFERENCED_^1_%LDQ* FLGADR_'ADDRESS OF REF €€PAGES'S CORE FLAGS_^1FOUNDA LDA* (NUM+1),Q_$PICK UP PAGE NUMBER +_^1_%STA* LSTPGE_2STORE THIS AS PREVIOUS PAGE_^1FOUND1 LDA* (REFR+1),Q_"INCREASE NUMBER OF TIMES REFERENCED 61*1296_^1_%INA 1_Q61*1296_^1_%SNO FOUNDB_'CHECK FOR NUMBER NOT BECOME NEGATIVE 61*1296_^1_%LDA =N$6000_K61*1296_^1FOUNDB STA* (REFR+1),Q_H61*1296_^1_%LDA* RWFLAG_'0=READ, 1=WRITE_^1_%SAZ READ_^1_%STA* (MOD€€+1),Q_$SET HAS BEEN MODIFIED FLAG_^1_%LDA* VALUE_^1_%LDQ* WORD_^1_%STA* (ADPAGE),Q_"STORE A INTO PAGE_^1_%LDA* LSTPGE_^1_%SAM EXIT_)SKIP IF ENT/EXT PAGE_^1_%TRA Q_^1_%SUB- LGEPGE,I_$IF THIS IS THE LARGEST CSQ THAT HAS_^1*_8BEEN STORED INTO, STORE PAGE NUMBER_^1*_8IN LGEPGE_^1_%SAM EXIT_^1_%SAZ EXIT_^1_%INA -1_+TEST IF LGEPGE IS ONE LESS THAN_^1_%SAZ 1_/NEW LGEPGE -- IF YE€€S, SET PAGE_^1_%STA- PGEWRT,I_(WRITE FLAG SO THERE ARE NO HOLES_^1_%STQ- LGEPGE,I_^1_%JMP* EXIT_^1READ_!LDQ* WORD_^1_%LDA* (ADPAGE),Q_"LOAD A REG FROM PAGE_^1EXIT_!LDQ* SQ_+RESTORE Q REGISTER_^1_%JMP* (DISKRD)_^1*_]_^1*_]_^1RWFLAG NUM 0_,0 IF READ - 1 IF WRITE_^1PGFLAG NUM 0_,STORAGE FOR ENT-EXT/CSQ FLAG_^1SA_#NUM 0_,A REGISTER ON ENTRY_^1SQ_#NUM 0_,Q REGISTER ON ENTRY_^1VALUE€€ NUM 0_,VALUE TO BE STORED_^1WORD_!NUM 0_,WORD ADDRESS WITHIN A PAGE_^1PAGENO NUM 0_,PAGE NUMBER SOUGHT_^1LSTPGE NUM 0_,PAGE LAST REFERENCED_^1MINREF NUM 0_,COUNTER FOR PAGE USED FEWEST TIMES_^1MAXREF NUM 0_,COUNTER FOR PAGE USED MOST TIMES_^1MINBAS NUM 0_,CORE ADDRESS OF PAGE USED FEWEST TIMES_^1ADPAGE NUM 0_,CORE ADDRESS OF PAGE TO BE REFERENCED_^1FLGADR NUM 0_,ADDRESS €€OF REFERENCED PAGE CORE FLAGS_^1MINFLG NUM 0_,ADDRESS OF LEAST REF PAGE'S CORE FLAGS_^1*_]_^1*_]_^1END_"LDQ* MINFLG_^1_%STQ* FLGADR_^1MOD_"LDA+ MODIFY,Q_^1_%SAZ READIN_'DO NOT WRITE OUT PAGE IF IT HAS NOT BEEN_^1_%ENA 1_,MODIFIED_^1_%STA- PGEWRT,I_$SET FLAG THAT A PAGE HAS BEEN WRITTEN_^1NUM_"LDA+ NUMBER,Q_$OUT TO MASS STORAGE_^1_%RTJ* FNDSEC_^1_%TCQ Q_,COMPLEMENT NUMBER OF WO€€RDS TO SIGNAL A WRITE_^1_%RTJ MDRIV_(WRITE PAGE_^1READIN LDA* PAGENO_^1_%SAM ENTEXT_^1_%MUI* NUMSC+1_^1_%ADD- CSQSEC,I_^1_%SUB- ENTSEC,I_^1_%SAM INRNGE_^1_%LDA =A12_)COMPARE CSQ PAGE TO MAXIMUM PAGE NUMBER_^1*_8OF ENTRY/EXT TABLE_^1_%JMP- PRINT2,I_$SKIP IF WITHIN RANGE, OTHERWISE PRINT_^1*_8ERROR AND TERMINATE LOAD_^1ENTEXT AND- LPMSK+15_$COMPARE ENT/EXT PAGE TO LAST_^1_%SUB-€€ MAXPGE,I_'PAGE ON MM_^1_%SAM INRNGE_'SKIP IF WITHIN RANGE_^1_%LDA =A2_^1_%JMP- PRINT2,I_^1INRNGE LDQ* FLGADR_'INITIALIZE CORE FLAGS OF NEW PAGE_^1_%LDA* MAXREF_^1_%INA -2_,SET NUMBER OF TIMES REFERENCED TO MAXREF-2_^1_%STA* (REFR+1),Q_^1_%ENA 0_^1_%STA* (MOD+1),Q_^1_%STA* MAXREF_^1_%LDA* PAGENO_^1_%STA* (NUM+1),Q_^1_%LDQ* RWFLAG_'IS THIS A STORE OPERATION_^1_%SQZ GET_*NO, GO €€GET PAGE FROM MASS MEMORY_^1CKA_"SAM ENTCK_(SKIP IF REFERENCING ENT/EXT PAGE_^1_%SUB- LGEPGE,I_$IF WE ARE STORING INTO A CSQ PAGE FOR THE_^1_%SAM GET_*FIRST TIME, ITS NUMBER WILL BE_^1_%SAZ GET_*LARGER THAN ANY PREVIOUS CSQ PAGE, THUS_^1_%JMP* IN_/DOES NOT HAVE TO BE READ IN FROM_^1GET_"JMP* GTPAGE_'MAS MEMORY_^1*_]_^1ENTCK AND- LPMSK+15_^1_%CLR Q_,IS THERE A BIT SET FOR THIS €€PAGE_^1_%SAZ EAB_^1_%DVI- H10_^1EAB_"INQ ONEBIT_'BIT IS SET IF ENT/EXT PAGE HAS BEEN_^1_%LDQ- (ZERO),Q_'STORED INTO_^1_%STQ- ADDR,I_^1_%TRA Q_^1_%LDA STRTBL,Q_^1_%AND- ADDR,I_^1_%SAN GTPAGE_'PAGE HAS BEEN STORED INTO, GO GET IT_^1_%LDA STRTBL,Q_^1_%EOR- ADDR,I_'PAGE HAS NOT BEEN STORED INTO, SET BIT_^1_%STA STRTBL,Q_$AND SKIP READING THE PAGE IN_^1_%JMP* IN_^1*_]_^1*_]_^1GTP€€AGE LDA* PAGENO_^1_%RTJ* FNDSEC_'GET SECTOR NUMBER OF PAGE_^1_%RTJ MDRIV_(READ PAGE INTO CORE_^1IN_#LDQ* MINBAS_^1_%JMP* FOUND_^1*_]_^1FNDSEC NOP 0_^1_%SAM NOTCSQ_^1NUMSC MUI =XNUMSEC_^1_%ADD- CSQSEC,I_$ADD MM BASE FOR COMMAND SEQUENCE VIRTUAL_^1_%JMP* EA_^1NOTCSQ AND- LPMSK+15_^1_%MUI* NUMSC+1_^1_%ADD- ENTSEC,I_$ADD MMBASE FOR ENTRY-ETERNAL VIRTUAL_^1EA_#STA SECTNO_^1_%LDA €€=X$8B3_'PUT LOGICAL UNIT IN MASINP FOR MDRIV_^1_%STA- MASINP,I_^1_%LDA* MINBAS_'PUT CORE ADDRESS IN A_^1_%LDQ- PAGE,I_)PUT LENGTH OF PAGE IN Q_^1_%JMP* (FNDSEC)_^1*_]_^1*_*THIS ROUTINE IS USED AFTER EXTERNALS ARE PATCHED_^1*_*IT WILL WRITE ALL PAGES THAT HAVE BEEN MODIFIED_^1*_*TO MASS MEMORY_^1*_]_^1*_]_^1WRTOUT NOP 0_^1_%LDA- PGEWRT,I_^1_%SAN 1_^1_%JMP* (WRTOUT)_^1_%LDQ- NOPAGE€n,I_^1_%TCQ Q_^1_%STQ- ADDR,I_^1_%LDQ- FLGBSE,I_^1_%LDA- CORADR,I_^1WRA_"STA* MINBAS_^1_%STQ* MINFLG_^1_%LDA* (MOD+1),Q_^1_%SAZ WRB_^1_%LDA* (NUM+1),Q_^1_%RTJ* FNDSEC_^1_%TCQ Q_^1_%RTJ MDRIV_^1WRB_"RAO- ADDR,I_^1_%LDA- ADDR,I_^1_%SAZ WRC_^1_%LDA* MINBAS_^1_%ADD- PAGE,I_^1_%LDQ* MINFLG_^1_%ADQ- FLGLGN,I_^1_%JMP* WRA_^1WRC_"JMP* (WRTOUT)_^1*_]_^1_%END PAGE_^__nPPROGLD CSY/ D26 P€1_%NAM PROGLD_'DECK-ID D26 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_]_^1_%EXT* LOADER_^1_%EXT* LDRIV_^1_%EXT* MDRIV_^1_%EXT* EXSTOR_^1_%EXT* EXTSCH_^1_%EXT* SECTNO_^1_%EXT* PATCH_^1_%EXT* WRTOUT_^1_%EXT* PROSEC_^1_%EXT* €€SCAN_^1_%ENT PROGLD_^1_%ENT SBLOAD_^1_%ENT SETDAT_^1*_]_^1*_]_^1_%EQU AINPUT(101)_^1_%EQU IGNORE(111)_^1_%EQU MASINP(107)_^1_%EQU INPXC0(57)_^1_%EQU MASK1($42)_^1_%EQU BINASC(51)_^1_%EQU CONVRT(90)_^1_%EQU DATBAS(2)_^1_%EQU ENTPNT(13)_^1_%EQU EXTPCH(85)_^1_%EQU INPCTR(15)_^1_%EQU INPREL(11)_^1_%EQU INPLUN(115)_^1_%EQU PRINT3(54)_^1_%EQU QINPUT(102)_^1_%EQU SCANSW€€(22)_^1_%EQU INPUT(147)_^1_%EQU NOTLNK(16)_^1_%EQU SW6(28)_^1_%EQU SYMSTR(19)_^1_%EQU WRDCNT(24)_^1_%EQU TABSCH(40)_^1_%EQU XIT(139)_^1_%EQU CHSW(111)_^1_%EQU ONEBIT($23)_^1_%SPC 10_^1PROGLD LDA- QINPUT,I_#SET CHARACTER REFERENCE_^1*_:COUNTER TO EXTRACT NAME_^1_%STA- WRDCNT,I_%FROM STORAGE_^1_%ENA -0_+SET CHSW TO -0 TO PICK UP_^1_%STA- CHSW,I_)RIGHT CHARACTER FIRST_^1_%E€€NA 0_+SET SCANSW TO PICK UP NON-NUM_^1_%STA- SCANSW,I_%ENTRY-POINT-NAME_^1_%RTJ SCAN_)USE SCAN SUBR TO GET NAME_^1_%LDA =XSYMSTR,I_^1_%STA- INPCTR,I_^1_%RTJ- TABSCH,I_#SEARCH LOADER TABLE FOR NAME_^1_%LDA- SW6,I_(XFER IF NAME IS FOUND IN ENTRY POINT_^1_%SAM PRA_*TABLE, PROGRAM ALREADY LOADED_^1PROGA CLR A_^1_%CLR Q_^1_%JMP- XIT,I_^1PRA_"RTJ EXTSCH_'SEARCH IF NAME IN EXTERNA€€L TABLE_^1_%LDA- SW6,I_^1_%SAM PRB_*SKIP IF NOT_^1_%LDA- EXTPCH,I_$EXTPCH IS NEGATIVE IF MATCHING EXTERNAL_^1_%SAP 1_,IS PATCHED_^1_%JMP* PROGA_(EXIT, EXTERNAL PATCHED_^1_%JMP* SUBRLD_'GO, TO LOAD SUBROUTINE_^1PRB_"LDA- INPREL,I_^1_%INA -$20_(TEST FOR AND SKIP IF PROGRAM_^1_%SAZ STNAME-*-1_#NAME TERMINATOR IS SPACE_^1_%SUB =N$DF_'TEST FOR AND SKIP FI PROGRAM_^1_%SAZ STNAME-*-€€1_#NAME TERMINATOR IS CAR-RET_^1_%JMP* ILGNAM_^1STNAME LDA- MASK1_(INSERT NAME INTO_^1_%STA- ENTPNT,I_'TABLE AS EXTERNAL THEN_^1_%RTJ EXSTOR_'PERFORM SUBROUTINE LOAD_^1_%ENA 1_^1_%STA- NOTLNK,I_$SET UNPATCHED EXT FLAG_^1_%JMP* SUBRLD_^1ILGNAM LDA =A10_(GIVE ERROR INDICATION IF PROG_^1_%RTJ- PRINT3,I_%NAME HAS ILLEGAL TERMINATOR_^1_%LDQ- QINPUT,I_#MOVE 1ST 8 CHARACTERS OF_^1_%LDA€€- 3,Q_+INPUT AREA INTO INPUT_^1_%STA- INPUT+3,I_$BUFFER_^1_%LDA- 2,Q_^1_%STA- INPUT+2,I_^1_%LDA- 1,Q_^1_%STA- INPUT+1,I_^1_%LDA+ 0,Q_)INSERT CANCEL CHARACTER_^1_%ENQ $7F_+INTO 1ST CHARACTER_^1_%ALS 8_-POSITION_^1_%LRS 8_^1_%STA- INPUT,I_^1_%LDA- INPXC0,I_#PRINT NAME OF PROGRAM_^1_%ENQ 4_-TOGETHER WITH TERMINATOR_^1_%RTJ LDRIV_)ON LIST DEVICE_^1_%ENA -0_+SET A FOR IRRECOVERABL€€E ERROR_^1_%JMP* PROGA+1_^1_%SPC 10_^1SBLOAD LDA- NOTLNK,I_^1_%SAN SUBRLD_^1_%ENA 0_,EXIT IF NO UNPATCHED EXTERNALS EXIST_^1_%ENQ 0_^1_%JMP- XIT,I_^1SUBRLD RTJ* BUFADR_)OPERATION_^1_%BZS DIRBUF(96)_^1LIBSEC NUM $FFFF_^1SBLFLG NUM 0_,SUBPROGRAM LOAD FLAG_^1PLDPAS NUM 0_,NO. OF PASSES THRU PLD._^1BUFADR NUM $FFFF_^1_%ENA 0_,CAN BE USED TO COUNT_^1_%STA* PLDPAS_'THE NO. OF T€€IMES_^1_%LDA =X$8C2_^1_%STA- MASINP,I_^1_%ENA 1_,SET FLAG TO IGNORE_^1_%STA- IGNORE,I_(DUP ENT POINTS_^1BUFDR RAO* PLDPAS_'WE CAN SCAN THE PLD._^1_%LDA- $C4_^1SBLDJ9 STA* LIBSEC_^1_%ENA 0_,CLEAR SUBPROGRAM_^1_%STA* SBLFLG_'LOAD FLAG_^1SBLDJ2 LDA* BUFADR_'SET INPCTR TO 1ST WORD ADDR_^1_%STA- INPCTR,I_'OF DIRBUF_^1_%LDQ* LIBSEC_'INSERT NUMBER FOR NEXT SECT._^1_%STQ SECTNO_'I€€N PROG LIB DIRECTORY INTO SECTNO_^1_%ENQ 96_,PUT WORD LENGTH IN Q_^1_%RTJ MDRIV_)READ NEXT SECTOR OF PROGRAM_^1*_8DIRECTORY INTO DIRBUF AND RECORD_^1*_8LINK POINTING TO_^1_%LDA* DIRBUF+95_'FOLLOWING SECTOR IN_^1_%STA* LIBSEC_'PROGRAM LIBRARY DIRECTORY_^1SBLDJ1 LDQ- INPCTR,I_^1_%INQ -1_^1_%LDA- 1,Q_+TEST FOR AND SKIP IF DIREC-_^1_%SAZ NXTENT-*-1_%TORY DELETED_^1_%LDA- 4,Q_+TEST €€FOR AND SKIP IF DIREC-_^1_%SAM NXTENT-*-1_%TORY ENTRY FILE NAME_^1_%RTJ EXTSCH_'SEARCH EXT TABLE FOR_^1_%LDQ- SW6,I_)NAME TO MATCH DIR. ENT._^1_%SQM NXTENT-*-1_!SKIP IF NAME NOT FOUND_^1_%LDQ- EXTPCH,I_$EXTPCH IS NEGATIVE IF MATCHING EXTERNAL_^1_%SQM NXTENT_)IS ALREADY PATCHED._^1_%JMP* LOADIN_%JUMP TO LOAD FROM LIBRARY_^1NXTENT LDA- INPCTR,I_#INCREASE DIRECTORY ADDRESS_^1_%INA€€ 5_-COUNTER BY 5, SUCH THAT IT_^1_%STA- INPCTR,I_%POINTS TO WORD_^1_%LDA* BUFADR_^1_%INA 90_^1_%SUB- INPCTR,I_^1_%SUB* DIRBUF+93_^1_%SAZ 1_+TEST FOR AND XFER IF NOT_^1_%JMP* SBLDJ1_(END OF SECTOR_^1_%LDQ* LIBSEC_^1_%SQZ 1_,TEST FOR AND XFER IF NOT_^1_%JMP* SBLDJ2_)END OF PROG. LIBR. DIREC._^1_%LDA- NOTLNK,I_^1_%SAN SUBA_^1_%JMP* SUBC_^1SUBA_!LDA* SBLFLG_'IS SUB PROGRAM_^1_%SAZ€€ 1_,LOAD FLAG SET_^1_%JMP* BUFDR_(YES,SEARCH THE PLD AGAIN_^1_%LDA- INPLUN+1,I_"IF NO SUBPRO LOAD + UNPATCHED_^1_%INA -8_.EXT REMAIN, PGM NAME WAS_^1_%SAN 2_5NOT FOUND IN PGM LIB,_^1_%JMP ILGNAM_,IRRECOV ERROR_^1_%ENQ -0_+SET Q -0 TO SIGNAL UNPATCHED EXTERNALS_^1_%ENA 0_^1_%JMP- XIT,I_^1LOADIN LDA =X$C2_(SET L PARAMETER TO LOGICAL_^1_%STA- INPLUN,I_'UNIT NUMBER FOR LIB UNIT_€€^1_%ENA 2_,SET A PARAMETER = 2_^1_%STA- INPLUN+1,I_^1_%LDQ- INPCTR,I_^1_%STQ* INPSAV_'SAVE POINTER TO DIRECTORY_^1_%LDA- 4,Q_*RECORD STARTING SECTOR NUMBER FOR_^1_%STA PROSEC_'PROGRAM TO BE LOADED_^1_%RAO* SBLFLG_'SET SUBPROGRAM LOAD FLAG_^1_%RTJ LOADER_%LOAD SUBROUTINE FROM LIBRARY_^1_%SAN SUBB_)SKIP IF LOAD WAS NOT TERMINATED NORMALLY_^1_%RTJ PATCH_(PATCH EXTERNALS_^1_%LDA- €`NOTLNK,I_^1_%SAN SUBD_)GO TO CKECK LIB DIRECTORY IF UNPATCHED EXT_^1_%RTJ WRTOUT_^1SUBC_!ENA 0_,ALL EXT PATCHED, WRITE CSQ OUT TO MM_^1_%ENQ 0_,AND EXIT_^1SUBB_!JMP- XIT,I_^1SUBD_!LDA* INPSAV_^1_%STA- INPCTR,I_$RESTORE POINTER_^1_%JMP* NXTENT_^1INPSAV ADC 0_^1*_]_^1*_]_^1SETDAT LDA- QINPUT,I_^1_%STA- DATBAS,I_^1_%JMP* SUBC_^1_%END PROGLD_^__`PSCAN1 CSY/ D27 P€1_%NAM SCAN1_(DECK-ID D27 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$UNPACK FIELDS ON ASCII INPUT_^1_%SPC 1_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU LPMSK(2)_^1_%EQU NZERO($12)_^1_%EQU ZERO($22)_^1_%€€EQU COUNT2(27)_^1_%EQU INPREL(11)_^1_%EQU SYMSTR(19)_^1_%EQU CHSW(111)_^1_%EQU AHOLD(136)_^1_%EQU QHOLD(137)_^1_%EXT* SAVEA_^1_%EXT* CHPU_^1_%SPC 10_^1_%ENT SCAN_^1SCAN_!NOP 0_^1_%ENQ 0_^1_%STQ- 9,I_^1_%STQ- 10,I_^1_%LDQ- 18,I_^1_%STQ- 19,I_(SPACE FILL SYMSTR TO SYMSTR+3_^1_%STQ- 20,I_^1_%STQ- 21,I_^1_%ADQ- 22,I_^1_%STQ- 22,I_^1_%STA- 11,I_(IF A IS NON-ZERO, 1ST CHARACTER_€€^1_%SAN SCAN2-*-1_$TO BE PROCESSED IS IN RIGHT A_^1SCAN1 RTJ CHPU_)GET FIRST CHAR IF A NOT 0_^1_%LDA- 11,I_(PICK UP 1ST CHAR_^1SCAN2 INA -$24_^1_%SAZ 1_+TEST FOR AND XFER IF NOT_^1_%JMP* PLUS_*DOLLAR SIGN_^1_%ENA -1_^1_%AND- 22,I_^1_%INA 1_^1_%STA- 22,I_(SET BIT 0 OF SCANSW = HEXSW_^1_%ENA 0_^1_%STA- 10,I_^1_%ENA -5_*SET COUNT1 TO PICK UP_^1_%STA- 25,I_*4 HEXADECIMAL DIGI€€TS_^1_%JMP* SCAN3_^1PLUS_!INA -7_^1_%SAN MINUS-*-1_"SKIP IF 1ST CHAR NOT PLUS SIGN_^1_%ENA 2_+BIT 1 OF SCANSW IF IT IS_^1_%AND- 22,I_*ILLEGAL TO HAVE + AS 1ST CHAR_^1_%SAN 2_,TEST FOR AND XFER IF_^1_%STA- CHSW,I_^1_%JMP* (SCAN)_'LEADING + IS ZERO_^1_%ENA 1_+SET NGRLSW TO +1 IF LEADING_^1_%STA- 9,I_+PLUS LEGAL_^1_%JMP* SCAN1_'LOOP TO PICK UP NEXT CHAR_^1MINUS INA -2_^1_%SAN €€ALFNUM-*-1_!SKIP IF 1ST CHAR NOT MINUS SIGN_^1_%ENA 4_+BIT 2 OF SCANSW IS ONE IF IT IS_^1_%AND- 22,I_*ILLEGAL TO HAVE - AS 1ST CHAR_^1_%SAN 1_+TEST FOR AND XFER IF_^1_%JMP* (SCAN)_'LEADING - IS ZERO_^1_%ENA -1_*SET NGRLSW TO -1 IF LEADING_^1_%STA- 9,I_+MINUS LEGAL_^1_%JMP* SCAN1_'LOOP TO PICK UP NEXT CHARACTER_^1ALFNUM RTJ* NUMBER_^1_%SAM 1_+TEST FOR AND XFER IF_^1_%JMP* NUMTRM€€_(CHARACTER NUMERIC_^1_%RTJ* LETTER_^1_%SAM 1_+TEST FOR AND XFER IF_^1_%JMP* ALFTRM_(CHARACTER ALPHABETIC_^1_%ENQ 0_^1_%STQ- CHSW,I_^1_%JMP* (SCAN)_'EXIT_^1ALFTRM ENA -6_^1_%STA- 25,I_(SET COUNT1 TO -6_^1_%ENA 0_,SET COUNT2 TO REF LEFT CHAR_^1_%STA- COUNT2,I_^1_%LDA =XSYMSTR,I_^1_%STA SAVEA_^1SCAN5 RTJ* STRCHR_%STORE CHARACTER NOW IN INPREL_^1_%RTJ CHPU_)PICK UP NEXT CHARAC€€TER_^1_%RAO- 25,I_(INCREASE CHARACTER COUNT_^1_%LDA- 25,I_^1_%SAN 1_+TEST FOR AND XFER TO EXIT IF_^1_%JMP* (SCAN)_'6 CHARACTERS STORED_^1_%RTJ* LETTER_^1_%SAP 1_+TEST FOR AND XFER TO EXIT IF_^1_%JMP* (SCAN)_'CHR NOT ALPHA/NUMERIC_^1_%JMP* SCAN5_'LOOP TO STORE ALPHA/NUMERIC CHAR_^1NUMTRM LDA- 11,I_^1_%RTJ* GETBIN_^1_%STA- 10,I_^1_%ENA 1_^1_%AND- 22,I_^1_%ENQ -5_*SET COUNT1 IF DE€€CIMAL NUMBER_^1_%SAZ 1_^1_%ENQ -4_*SET COUNT1 IF HEXADEC. NUMBER_^1_%STQ- 25,I_^1SCAN3 ENA 0_+CLEAR SYMSTR IF NUMERIC OPERAND_^1_%STA- 19,I_^1_%STA- COUNT2,I_^1_%LDA =XSYMSTR,I_$SET TO STORE CHAR IN SYMSTR+1_^1_%INA 1_^1_%STA SAVEA_^1SCAN4 ENA 8_^1_%AND- 22,I_^1_%SAZ 1_+SKIP IF ASCII CODE NOT SAVED_^1_%RTJ* STRCHR_%RECORD ASCII CODE FOR DIGIT_^1_%RTJ CHPU_)GET NEXT CHARA€€CTER IF NOT_^1_%RAO- 25,I_(INCREASE CHARACTER COUNT BY 1_^1_%LDA- 25,I_^1_%SAN 1_+TEST FOR AND XFER IF_^1_%JMP* SGNTST_(ALL DIGITS PROCESSED_^1_%RTJ* NUMBER_^1_%SAP 1_+TEST FOR AND XFER IF_^1_%JMP* SGNTST_(CHAR NOT DIGIT_^1_%LDA- 11,I_^1_%RTJ* GETBIN_^1_%STA* BINVAL+1_#SAVE BINARY VALUE OF DIGIT_^1_%ENA 1_^1_%AND- 22,I_^1_%TRA Q_^1_%LDA- 10,I_(COMPUTE BINARY VALUE OF_^1_%ALS 4€€_-HEXADECIMAL NUMBER_^1BINVAL EOR =N$FFFF_^1_%SQN NUMSTR-*-1_!SKIP IF HEX SWITCH SET_^1_%ENA 10_^1_%MUI- 10,I_^1_%ADD* BINVAL+1_^1NUMSTR STA- 10,I_(STORE CONVERSION_^1_%JMP* SCAN4_'LOOP_^1SGNTST LDQ- 10,I_(PICK UP BINARY VALUE OF NO._^1_%LDA- 9,I_)PICK UP LEADING ALG SIGN_^1_%SAP 2_+SKIP IF POSITIVE NO._^1_%TCQ Q_+COMPLEMENT NO. IF NEGATIVE_^1_%STQ- 10,I_^1_%JMP* (SCAN)_'XIT_^€€1NUMBER NUM $FFFF_^1_%LDQ- 11,I_(PICK UP CHARACTER FROM INPREL_^1_%INQ -$30_^1_%SQM NOTNUM-*-1_!SKIP IF NOT NUMERIC_^1_%INQ -$A_^1_%SQP HEXTST-*-1_!SKIP TO IF CHR A HEX DIGIT_^1NUMXIT LDA- 11,I_(PICK UP ASCII CODE FOR DIGIT_^1_%JMP* (NUMBER)_%AND XFER TO EXIT_^1NOTNUM ENA -0_*SET A NEGATIVE + EXIT_^1_%JMP* (NUMBER)_^1HEXTST ENA 1_^1_%AND- 22,I_^1_%SAN 1_+TEST FOR AND XFER I€€F SWITCH_^1_%JMP* NOTNUM_(NOT SET FOR HEXADECIMAL NOS._^1_%INQ -7_^1_%SQP 1_+TEST FOR AND XFER IF CHR_^1_%JMP* NOTNUM_(A TO F_^1_%INQ -6_^1_%SQM 1_+TEST FOR AND XFER IF CHAR_^1_%JMP* NOTNUM_(NOT A TO F_^1_%JMP* NUMXIT_%XFER TO EXIT_^1LETTER NUM $FFFF_^1_%LDA- 11,I_^1_%INA -$30_^1_%SAM NOTALF-*-1_!SKIP IF CHR NOT ALF/NUM_^1_%INA -$A_^1_%SAP 2_+SKIP IF CHR NOT NUMERIC_^1_%LD€€A- 11,I_^1_%JMP* (LETTER)_#XFER TO EXIT IF CHAR NUMERIC_^1_%INA -7_^1_%SAP ALFTST-*-1_!SKIP IF CHARACTER IS LETTER_^1NOTALF ENA -0_^1_%JMP* (LETTER)_#XFER TO EXIT IF CHAR NOT ALF/NUM_^1ALFTST INA -$1A_^1_%SAM 1_+TEST FOR AND XFER IF_^1_%JMP* NOTALF_(CHAR NOT ALPHA_^1_%LDA- 11,I_^1_%JMP* (LETTER)_#XFER TO EXIT IF CHAR ALPHA_^1STRCHR NUM $FFFF_^1_%LDA- COUNT2,I_$TEST IF STORE I€€N LEFT OR RIGHT_^1_%LDQ- INPREL,I_)CHARACTER_^1_%SAN STA_,SKIP IF RIGHT CHARACTER_^1_%LDA (SAVEA)_^1_%AND- LPMSK+8_^1_%QLS 8_^1_%EAQ A_^1_%STA (SAVEA)_%STORE LEFT CHARACTER IN SYMSTR_^1_%JMP* STB_/BUFFER_^1STA_"LDA (SAVEA)_%COMBINE LEFT AND RIGHT CHARACTER_^1_%AND- NZERO+8_^1_%EAQ A_^1_%STA (SAVEA)_^1_%RAO SAVEA_(BUMP SYMSTR ADDRESS_^1STB_"LDQ- COUNT2,I_^1_%TCQ Q_,REVERSE€€ RIGHT/LEFT CHAR SWITCH_^1_%STQ- COUNT2,I_^1_%JMP* (STRCHR)_#EXIT_^1GETBIN NUM $FFFF_^1_%LDA- 11,I_(PICK UP 7 BITS OF ASCII CODE_^1_%ENQ 0_^1_%LLS 12_*PUT LOWER 4 BITS IN A 0-3_^1_%ALS 4_+PUT UPPER 3 BITS IN Q 0-2_^1_%INQ -3_*IF Q = 3, A CONTAINS BINARY_^1_%SQZ 1_-VALUE OF DIGIT_^1_%ENQ 9_+IF Q = 4, (A) + 9 IS BINARY_^1_%AAQ A_-VALUE OF DIGIT_^1_%JMP* (GETBIN)_#EXIT_^1_%END€_]_^__/LEFT CHAR SWITCH_^1PCHPU1 CSY/ D28 P€1_%NAM CHPU1_(DECK-ID D28 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$EXTRACT SINGLE CHARACTERS FROM ASCII RECORD_^1_%SPC 1_^1_%SPC 10_^1_%EQU WRDCNT(24)_^1_%EQU INPREL(11)_^1_%EQU CHSW(111)_^1_%EQU ZERO($22)_^1_%EQU LPMSK€€(2)_^1_%SPC 10_^1_%ENT CHPU_^1CHPU_!NOP 0_^1_%LDQ- WRDCNT,I_$PICK UP CURRENT ADDRESS_^1_%LDA- (ZERO),Q_(AND CONTENTS_^1_%LDQ- CHSW,I_^1_%SQM CHA_,SKIP IF RIGHT CHARACTER NEXT_^1_%ALS 8_/SHIFT LEFT CHARACTER_^1_%JMP* CHB_^1CHA_"RAO- WRDCNT,I_$IF RIGHT CHAR. INCREASE ADDR BY 1_^1CHB_"AND- LPMSK+8_%PUT CHARACTER IN BITS 0-7 OF A_^1_%STA- INPREL,I_'AND IN INPREL_^1_%TCQ Q_^1_%STQ-€. CHSW,I_^1_%JMP* (CHPU)_'XIT_^1_%END CHPU_^__.PADJOV2 CSY/ D29 P€1_%NAM ADJOV2_'DECK-ID D29 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$15 BIT ARITHMETIC_^1_%SPC 1_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU ADJXIT(81)_^1_%EQU AHOLD(136)_^1_%EQU QHOLD(137)_^1_%EQU NG€€RLSW(86)_^1_%SPC 10_^1_%EQU MASK1($42)_!(MASK1) = $7FFF_^1_%EQU MASK2($21)_!(MASK2) = $8000_^1_%ENT ADJOVF_^1ADJOVF STA- AHOLD,I_$SAVE RELATIVE ADDRESS_^1_%STQ- QHOLD,I_$SAVE BASE ADDRESS_^1_%LDA- NGRLSW,I_^1_%SAZ 1_^1_%TCQ Q_^1_%LDA- AHOLD,I_^1_%AND- MASK1_'STRIP OFF SIGN BIT_^1_%SQP R8J1-*-1_#SKIP IF POSITIVE RELOCATION_^1_%TCQ Q_+COMPLEMENT BASE - PUT -(Q) IN Q_^1_%ADD- M€tASK2_'INSERT MINUS SIGN IF NEG REL_^1_%TCA A_+COMPL REL ADR - PUT -(A) IN A_^1R8J1_!AAQ A_^1_%ENQ 0_^1_%LLS 1_^1_%ALS 15_^1_%AAQ A_^1_%LDQ- QHOLD,I_^1_%SQP 1_+SKIP IF POSITIVE RELOCATION_^1_%TCA A_+PUT -(A) IN A_^1_%AND- MASK1_'STRIP OFF SIGN BIT_^1_%ALS 1_^1_%LDQ- AHOLD,I_$REPLACE ORIG. SIGN BIT_^1_%QLS 1_^1_%LRS 1_^1_%JMP- ADJXIT,I_#EXIT_^1_%END_.ADJOVF_^__tPADRPR1 CSY/ D30 P€1_%NAM ADRPR1_'DECK-ID D30 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$LOADER MODULE_^1_%EXT* CDRIV_^1_%EXT* SCAN_^1_%SPC 10_^1*INDEX TO CONSTANT TABLE STORAGE_^1_%SPC 2_^1_%EQU BLANKS(18)_^1_%EQU INPCTR(15)_^1_%EQU INPREL(€€11)_^1_%EQU INPUT(147)_^1_%EQU AINPUT(101)_^1_%EQU PRINT5(98)_^1_%EQU ARIT15(87)_^1_%EQU INPWRD(10)_^1_%EQU CHSW(111)_^1_%EQU INPXC0(57)_^1_%EQU QINPUT(102)_^1_%EQU SCANSW(22)_^1_%EQU SW6(28)_^1_%EQU SYMSTR(19)_^1_%EQU TABSCH(40)_^1_%EQU WRDCNT(24)_^1_%EQU ENTPNT(13)_^1_%EQU CMNXIT(139)_^1_%SPC 10_^1_%ENT ADRPRO_^1ADRPRO LDA- QINPUT,I_#SET CHAR. REFERENCE COUNTER_^€€1ADRPR1 STA- WRDCNT,I_%TO 1ST CHAR POSITION_^1_%ENQ 0_^1_%LDA- AINPUT,I_$IF BIT 15 OF AINPUT SET, FIRST_^1_%SAP 1_/CHARACTER IS ON RIGHT_^1ADRPRA ENQ -0_^1_%STQ- CHSW,I_^1_%ENA 8_+SET SWITCH TO SAVE ASCII CODE_^1_%STA- SCANSW,I_%FOR STARTING ADDRESS_^1_%ENA 0_+EXTRACT STARTING ADDRESS FROM_^1_%RTJ SCAN_,INPUT AREA_^1_%LDA- SYMSTR,I_#TEST FOR AND SKIP IF STARTING_^1_%SAN ADRP€€R2-*-1_#ADDRESS NOT NUMERIC_^1_%ENA 1_^1_%AND- SCANSW,I_^1_%SAN 1_+TEST FOR AND JUMP IF STARTING_^1_%JMP* ADRERR_(ADDRESS NOT HEXADECIMAL_^1_%LDA- INPWRD,I_#PICK UP BINARY VALUE FOR_^1_%JMP* ADRPR3_(NUMERIC STARTING ADDRESS_^1ADRPR2 SUB- BLANKS,I_#TEST FOR AND JUMP IF STARTING_^1_%SAN ADRPR4-*-1_#ADDRESS = ALPHA/NUMERIC_^1_%TCA A_+IF START ADR OMITTED, SET =-0_^1ADRPR3 STA- AIN€€PUT,I_#RECORD BINARY VALUE FOR ADDR._^1_%JMP* ADRPR8_%JUMP TO TEST FOR END OF INPUT_^1ADRPR4 LDA =XSYMSTR,I_^1_%STA- INPCTR,I_#SEARCH LOADER TABLE FOR ALPHA_^1_%RTJ- TABSCH,I_%NUMERIC START ADDR NAME_^1_%LDQ- SW6,I_^1_%SQP 1_+TEST FOR AND JUMP IF NAME_^1_%JMP* ADRERR_(NOT IN TABLE_^1_%LDA- ENTPNT,I_^1_%STA- AINPUT,I_#RECORD ENTRY POINT ADDRESS_^1_%LDA- INPREL,I_^1_%INA -$2B_^1_%€€SAZ ADRPR5-*-1_^1_%INA -2_^1_%SAZ ADRPR5-*-1_!TEST FOR AND JUMP IF NO_^1_%JMP* ADRPR8_(HEX INCR FOR STARTING ADDR_^1ADRPR5 ENA 7_+SET SCANSW TO EXTRACT START_^1_%STA- SCANSW,I_%ADDR FROM INPUT AREA_^1_%LDA- INPREL,I_#SET A REG TO LEADING CHAR OF_^1_%RTJ SCAN_)FIELD, THEN GET INCREMENT_^1_%LDA- SYMSTR,I_^1_%SAZ ADRPR7-*-1_^1_%SUB- BLANKS,I_^1_%SAZ ADRPR7-*-1_!TEST FOR AND JUM€€P IF HEXADEC._^1_%JMP* ADRERR_(INCR. IS ALPHA/NUMERIC_^1ADRPR7 LDA- AINPUT,I_#ADD HEXADECIMAL INCREMENT TO_^1_%ADD- INPWRD,I_%ENTRY POINT ADDRESS TO OBTAIN_^1_%STA- AINPUT,I_%VALUE OF STARTING ADDRESS_^1ADRPR8 LDA- INPREL,I_^1_%INA -$20_(TEST FOR AND SKIP IF END OF_^1_%SAZ ADRPR9-*-1_#INPUT = SPACE CHAR._^1_%SUB =N$DF_'TEST FOR AND SKIP IF END OF_^1_%SAZ ADRPR9-*-1_#INPUT = CAR€€RIAGE RETURN_^1_%JMP* ADRERR_%JUMP IF LAST CHAR ILLEGAL_^1ADRPR9 LDA- AINPUT,I_^1_%TCA Q_+TEST FOR AND SKIP IF START_^1_%SQZ EXIT_)ADDRESS = $FFFF_^1_%LDQ- ARIT15,I_$DO NOT DO 15 BIT ARITHMETIC UNLESS_^1_%SQN EXIT_)FLAG IS ZERO_^1_%LLS 1_+ADDRESS ARITHMETIC = 15 BIT_^1_%ALS 15_,WRAP ARROUND_^1_%AAQ A_^1EXIT_!ENQ 0_,(A) REG = ENTRY POINT VALUE WITH INCREMENT_^1_%JMP- CMNXIT,I€€_$OR DECREMENT ADDED_^1_%SPC 5_^1ADRERR LDQ =XSYMSTR,I_"OUTPUT FIRST THREE WORDS TO PRINTER_^1_%STQ- INPCTR,I_^1_%RTJ- PRINT5,I_^1_%RTJ* ADRA_^1_%ALF 2,E16_^1ADRA_!NOP 0_^1_%LDA* ADRA_)GIVE ERROR INDICATION FOR_^1_%ENQ 2_^1_%RTJ CDRIV_)ILLEGAL INPUT = 'E3'_^1_%ENQ -60_^1_%ENA -0_^1ADRPR6 STA- INPUT+60,B_^1_%INQ 1_^1_%SQZ 1_^1_%JMP* ADRPR6_^1_%LDA- INPXC0,I_#ENTER NEW STAR€€TING ADDRESS_^1_%ENQ 0_-ON TYPEWRITER_^1_%RTJ CDRIV_'INPUT AREA = 'INPUT'_^1_%LDA- INPXC0,I_^1_%STA- WRDCNT,I_^1_%ENQ 0_^1_%JMP* ADRPRA+1_^1_]_^1_%END LOAD_^__€PJOBENT CSY/ D31 P€1_%NAM JOBENT_'DECK-ID D31 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROGRAM BASE- MSOS 3.0 JOBENT_9**MSOS 4.0_^1 SPC 1_]_^1_%SPC_!1_^1*_$JOB PROCESSOR CONTROL MODULE_^1_%SPC_!1_^1*********************************************€€********_^1_%SPC_!2_^1_%ENT_!JBENT_^1_%ENT JBPRO_^1_%ENT MIPBUF_^1_%SPC_!1_^1_%EXT FILE1,FILE2_^1_%EXT JBCNFG_'JOB CANCEL FLAG_^1_%EXT MIB_^1_%EXT_!JOBIND_^1_%EXT_!SWTCH_^1_%EXT_!LIBEDT,RCOVER_^1_%EXT JPSWT_(TEMP. LOC. FOR MIINP BUFFER ADR. OR_^1*_9AN INDEX TO THE TRANTA TABLE OR_^1*_9A NEG. VALUE SET BY JOBENT OR JBKILL_^1_%EXT JOBPRO,JPLOAD,JPCHGE,JPT13_^1_%EXT JLGOV4,JCR€€DV4,JPFLV4,NAMEV4_6**MSOS 4.0_^1_%EXT JPSTV4,AFILV4_D**MSOS 4.0_^1_%EXT IUP_N**MSOS 4.0_^1_%EXT INPTV4_K**MSOS 4.0_^1_%EXT RESTOR_^1_%EXT TRANV_^1_%EXT JKIN_^1_%EXT* T3_^1_%EXT* T5_^1_%EXT* T7_^1_%EXT* T11_^1_%SPC_!1_^1_%EQU_!DISP($EA)_^1_%EQU ZERO($22)_^1_%EQU H7FFF($11)_G**MSOS 4.0_^1_%EQU L(36)_(INPUT BUFFER LENGTH_0**MSOS 4.0_^1_%SPC_!2_^1JBENT NUM_!$C8FE_$ENTRY P€€OINT_^1****_3NOTICE - THE INSTRUCTION LDA*_^1****_4*-1 CAN NOT BE ASSEMBLED_^1****_4BECAUSE IT REFERENCES A LOC._^1****_4OUTSIDE THE PROGRAM_^1_%STA* (F1)_%STORE LOCATION OF JOBENT FILE_^1_%STA* ENTTBL_'STORE FWA OF JOBENT IN ENTRY POINT TABLE_^1_%SPC 1_^1_%STQ* SAVBUF_(SAVE MIINP BUFFER ADDRESS_)**MSOS 4.0_^1_%JMP* BUFF1_^1ERRM_!ALF 1,JP_M**MSOS 4.0_^1_%ALF 1,_O**MSOS 4.0_^1€€_%ALF 1,,_N**MSOS 4.0_^1_%SPC 1_^1***********************************************************************_^1_!SPC 1_]_^1*_$AFTER THE INITIAL PASS THROUGH JOBENT THIS AREA WILL BE_^1*_$OVERLAID BY THE MIPBUF BUFFER._^1_"SPC 1_]_^1BUFF1 ENQ LENGTH_'LOAD Q WITH THE LENGTH OF ENTRY POINT TABLE_^1LOOP_!LDA* ENTTBL,Q_$PICK UP RELATIVE ENTRY POINT ADDRESS_^1_%ADD* ENTTBL_'ADD FWA OF€€ JOBENT_^1_%STA TRANV,Q_%STORE IN TRVEC_^1_%INQ -1_^1_%SQZ OUT_^1_%JMP* LOOP_^1OUT_"LDQ- $E9_*ADDR OF EXTENDED CORE TABLE_^1_%LDQ- 9,Q_*ADDR OF RCTV IN MONI_/**MSOS 4.0_^1_%LDA* JB1_*IF THERE IS NO_5**MSOS 4.0_^1_%AND- H7FFF_(T7 MODULE DON'T TRY_0**MSOS 4.0_^1_%EOR- H7FFF_L**MSOS 4.0_^1_%SAN 1_P**MSOS 4.0_^1_%JMP* BUFF2+2_%AND LINK_;**MSOS 4.0_^1_%LDA* (F1)_^1_%INA JB1-JBENT_^€€1_%JMP* BUFF2_L**MSOS 4.0_^1_#SPC 1_^1_%EQU ENDB(*-BUFF1)_D**MSOS 4.0_^1_%BZS FILL(L-ENDB)_E**MSOS 4.0_^1_%BZS DRV(1)_'WORD FOR DRIVERS ON SHORT READ_$**MSOS 4.0_^1***********************************************************************_^1_#SPC 1_^1*_$THIS AREA WILL BE OVERLAID BY THE TRNTBL BUFFER._^1_%SPC 1_^1BUFF2 ADD* JB1_^1_%STA- 7,Q_)LOADER REQUEST_^1_%LDA* (F1)_^1_%I€€NA_!JB2-JBENT_^1_%ADD* JB2_^1_%STA- 11,Q_%CORE REQUEST_^1_%LDA* (F1)_^1BPS_"INA JB3-JBENT_^1RI_#ADD* JB3_^1LOADEP STA- 3,Q_*STATUS REQUEST_^1_%LDA* (F1)_^1_%INA JB4-JBENT_^1JFLG_!ADD* JB4_N**MSOS 4.0_^1_%STA- 5,Q_*EXIT REQUEST_^1_%SPC 1_^1_%ENA 0_,THIS IS THE LAST LOCATION OF TRANTA **MSOS 4.0_^1*_8TABLE BUFFER.. NEXT 22 LOCATIONS_"**MSOS 4.0_^1*_8ARE 3 WORDS--JOB NAME. 3 €€WORDS-- **MSOS 4.0_^1*_8ACCOUNT NUMBER.. 16 WORDS PARAMETER**MSOS 4.0_^1*_8BUFFER FOR FILES_3**MSOS 4.0_^1JNAME JMP* BRL_N**MSOS 4.0_^1_%SPC 1_P**MSOS 4.0_^1*_8TABLE OF ENTRY POINTS TO JOBENT_#**MSOS 4.0_^1ENTTBL NUM 0_,FWA OF JOBENT_6**MSOS 4.0_^1_%ADC JBPRO-JBENT_!SCHEDULE J P MODULES (JBPTROE)_"**MSOS 4.0_^1_%ADC ERRM-JBENT_"JO3 JO4 ERRORS (ERRMSG)_,**MSOS 4.0_^1_%ADC €€MIPBUF-JBENT LOCAL INPUT BUFFER_'(MIBUF)_!**MSOS 4.0_^1_%ADC TRNTBL-JBENT TRANSFER TABLE ADDRESS (TRNVEC)_#**MSOS 4.0_^1FILTAB ADC LIB-JBENT_#SCHEDULE LIBEDT_4**MSOS 4.0_^1_%ADC RECOVR-JBENT SCHEDULE RCOVER (RECOV)_+**MSOS 4.0_^1_%ADC SAVQ1-JBENT_!INDEX PASSED TO J.P. POUTINES_^1_%ADC FILTAB-JBENT FILE PARAMETER TABLE (PARBV4)_%**MSOS 4.0_^1_%EQU LENGTH(*-ENTTBL-1)_?**MS€€OS 4.0_^1_%SPC 1_P**MSOS 4.0_^1_%SPC 1_^1***********************************************************************_^1_%SPC 1_^1BRL_"STA* BPS_*CLEAR THESE THREE LOCATIONS IN WHAT **MSOS 4.0_^1_%STA* RI_+BE THE TRNTBL BUFFER BEFORE SCHEDULING_^1_%STA* LOADEP_(JOBPRO_^1_%STA* JFLG_M**MSOS 4.0_^1_%SET A_,SET FIRST WORD TO INDICATE NO_%**MSOS 4.0_^1_%STA* JNAME_(JOB NAME YET_7**MSOS 4€€.0_^1_%LDQ* SAVBUF_'PICK UP MIINP BUFFER ADDRESS_^1_%STQ* (JBST)_'SAVE INPUT BUFFER ADDRESS IN TRVEC_!61*1295_^1_%STQ- I_,SAVE BUFFER ADDRESS IN I REG._^1_%ENQ L-1_N**MSOS 4.0_^1MVBUF LDA- (I),Q_(TRANSFER MIINP BUFFER TO BUFFER IN JOBENT_^1_%STA* MIPBUF,Q_$STORE IN MIPBUF LOCAL_^1_%INQ -1_^1_%SQM 1_^1_%JMP* MVBUF_^1* LOAD AND GO SECTOR NUMBER_^1_%ENA_!1_^1_%STA- $E4_^1_%SPC_!1€€_^1_%LDA INPTV4_'RESET CONTROL INPUT DEVICE_)**MSOS 4.0_^1_%STA IUP_N**MSOS 4.0_^1_%ENQ 3_P**MSOS 4.0_^1SJBPRO STQ* SAVQ1_^1_%LDA* JBPADR_'SCHEDULE JOBPRO_4**MSOS 4.0_^1_%JMP* JBPRO0_^1JBPRO STQ* SAVQ1_(SAVE INDEX TO PROPER ROUTINE WITHIN THE_^1*_8SCHEDULED MODULE OR AN EXECUTION ADDRESS_^1_%TRA Q_,MOVE INDEX FOR PROPER MODULE TO Q REG._^1_%LDA* TBL,Q_(Q REG. 0=JPT13, 1=JOBPR€€O, 2=JPLOAD,_^1*_83=JPCHGE, 4=RESTOR, 5=JLGOV4_'**MSOS 4.0_^1*_86=JCRDV4, 7=JBFLV4, 8=NAMEC4_'**MSOS 4.0_^1*_89=JPSTV4, 10=AFILV4_0**MSOS 4.0_^1JBPRO0 STA* SCHADR_^1*_$RELEASE FILES TWO AND THREE_^1_%RTJ MRELF_(RELEASE SPECIFIED FILE_^1_%LDQ* SAVQ1_(INDEX TO LOC IN SCHEDULED MODULE TO BEGIN_^1*_8EXECUTION OR AN EXECUTION ADDRESS._^1SCHED RTJ- ($F4)_^1_%NUM $1200_^1SCHADR ADC 0_€€^1_%JMP- (DISP)_^1F1_#ADC FILE1_L**MSOS 4.0_^1JB1_"ADC T7_O**MSOS 4.0_^1JB2_"ADC T11_N**MSOS 4.0_^1JB3_"ADC T3_O**MSOS 4.0_^1JB4_"ADC T5_O**MSOS 4.0_^1_%SPC 2_^1 SPC 1_]_^1_%SPC 2_^1TBL_"ADC (JPT13)_^1JBPADR ADC (JOBPRO)_^1_%ADC (JPLOAD)_^1_%ADC (JPCHGE)_^1_%ADC (RESTOR)_^1_%ADC (JLGOV4)_I**MSOS 4.0_^1_%ADC (JCRDV4)_I**MSOS 4.0_^1_%ADC (JPFLV4)_I**MSOS 4.0_^1_%ADC €€ (NAMEV4)_I**MSOS 4.0_^1_%ADC (JPSTV4)_I**MSOS 4.0_^1_%ADC (AFILV4)_I**MSOS 4.0_^1_%SPC 2_^1F2_#ADC_!FILE2_^1SWT_"ADC_!SWTCH_^1JB_#ADC_!JOBIND_^1JBST_!ADC JPSWT_M61*1295_^1_%SPC_!2_^1SAVI_!NUM 0_^1SAVQ1 NUM 0_^1SAVBUF NUM 0_,TEMP LOC FOR MIINP BUFFER ADDRESS_^1_%EQU MIPBUF(BUFF1)_^1_'EQU TRNTBL(BUFF2)_^1_%SPC 1_^1*****************************************************_^1_%S€€PC_!1_^1* THIS ROUTINE RELEASES FILE3 (PROTEC) IF PRESENTLY_^1* INCORE, RELEASES FILE2 (JOB PROC. MODS.) AND SCHEDULES_^1* LIBEDIT WITH THE RETURN LOCATION STORED IN Q._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1LIB_"RTJ* REL_)RELEASE OUTSTANDING FILES_^1_%LDQ* (F1)_^1_%ADQ =XLB2-JBENT_^1_%RTJ- ($F4)_$SCHDLE LIBEDT_^1TWLVE NUM_!$1200_^1_%€€ADC_!(LIBEDT)_^1_%JMP- (DISP)_^1_%SPC_!1_^1_%SPC 1_^1************************_!RETURN FROM LIBEDT_!********************_^1_%SPC 1_^1_%RAO* SAVQ_)THIS MUST REMAIN BEFORE TAG LB2_#**MSOS 4.0_^1LB2_"ENA 1_^1_%STA- $E4_*RESET LOAD AND GO ON RETURN FROM LIBEDT_^1LB4_"RAO MIB_*SET MIB FLAG TO LOCK OUT OTHER ENTRIES_^1_%ENA_!0_^1_%STA* (SWT)_$CLEAR SWITCH FOR JP LOCK-OUT._^1_%STA* L€€OADEP_'CLEAR LOADER IN CORE FLAG_-76*1881_^1_%SET_!Q_^1_%STQ* (JBST)_K**MSOS 4.0_^1_%STQ* (JB)_)RESET J.P. IN CORE FLAG_,**MSOS 4.0_^1_%LDA* SAVQ_M**MSOS 4.0_^1_%SAN 1_P**MSOS 4.0_^1_%JMP* SJBPRO-1_I**MSOS 4.0_^1_%ENA 0_,LIBEDT IS TERMINATING_.**MSOS 4.0_^1_%STA* SAVQ_)ABNORMALLY_9**MSOS 4.0_^1_%ENQ 6_,TELL JOBPRO TO_5**MSOS 4.0_^1_%JMP* SJBPRO_'ABORT JOB_:**MSOS 4.0_^1_%SPC_!1_€€^1SAVQ_!NUM_!$0000_^1_%SPC_!1_^1* THIS ROUTINE RELEASES FILE3 (PROTEC) IF PRESENTLY_^1* INCORE, RELEASES FILE2 (JOB PROC. MODS.) AND SCHEDULES RECOVERY_^1* WITH THE RETURN LOCATION STORED IN LOCATION $EE._^1_%SPC_!1_^1RECOVR RTJ* REL_*RELEASE ANY UNUSED FILES_+**MSOS 4.0_^1_%LDQ* (F1)_^1_%ADQ =XRC2-JBENT_!SET RETURN IN $EE TO RC2_^1_%STQ- $EE_^1_%RTJ- ($F4)_^1_%NUM_!$1200_^1_%€€ADC_!(RCOVER)_^1_%JMP- (DISP)_^1_%SPC_!1_^1RC2_"IIN 0_,RETURN FROM RECOVERY PROGRAM_'**MSOS 4.0_^1_%ENA 0_^1_%STA* RI_+CLEAR RECOVERY SWITCH_.**MSOS 4.0_^1_%STA* BPS_*BREAKPOINT SWITCH_2**MSOS 4.0_^1_%STA* LOADEP_'LOADER FLAG_8**MSOS 4.0_^1_%JMP* LB4_N**MSOS 4.0_^1_%SPC 3_^1REL_"ADC 0_,RELEASE FILE2, FILE3 ROUTINE IF THEY'RE IN_^1_%IIN 0_^1_%LDA JBCNFG_'IF CANCEL FLAG SET - €€GO AWAY AND LET IT_^1_%SAZ GO1_-TAKE OVER. IF NOT SET, CONTINUE ON_^1_%JMP- ($EA)_^1GO1_"STA* (JB)_)SET JOB PROCESSOR NOT ACTIVE_^1_%STA JKIN_^1_%SET A_,SET LIBEDT IN FLAG_^1_%STA* (SWT)_^1_%EIN 0_^1_%SET Q_,RELEASE AREA 3_^1_%RTJ* MRELF_^1_%JMP* (REL)_^1MRELF NOP 0_^1_%SQZ LOPER_(DON'T RELEASE 3 IF T13 OR JLGOV4_^1_%INQ -5_+ARE BEING CALLED_^1_%SQZ LOPER_(PROTEC IS THE€€RE_^1_%ENQ 1_,SET TO RELEASE FILE3 AND FILE2_^1LOPER LDA* (F2),Q_^1_%SAZ CK_+IF ALREADY RELEASED - TO NEXT ONE_^1_%STA* REL1_)NOT RELEASED - RELEASE IT_^1_%CLR A_^1_%STA* (F2),Q_'ZERO FLAG_^1_%RTJ- ($F4)_^1_%ADC $1800_(RELEASE_^1REL1_!ADC 0_^1CK_#SQZ CONT_)ALL COMPLETED - LEAVE_^1_%INQ -1_^1_%JMP* LOPER_(NO - TRY AGAIN_^1CONT_!JMP* (MRELF)_^1 SPC 1_]_^1SAVA_!NUM 0_^1_%EN€D_]_^__NQ 1_,SET TO RELEASPT11 CSY/ D32 P€1_%NAM T11_*DECK-ID D32 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$T11 CORE REQUEST PROCESSOR_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* THIS IS THE CORE REQUEST MODULE_^1* THIS REQUEST IS€€ USED TO SET OR DETERMINE THE_^1* BOUNDS OF AVAILABLE UNPROTECTED CORE._^1* UPON ENTRANCE, THE I REGISTER CONTAINS THE LOCATION_^1* OF VOLATILE STORAGE._^1***_!$EC - TEMPORARY HIGHEST UNPROTECTED_^1***_*LOCATION + 1_^1***_!$ED - TEMPORARY LOWEST UNPROTECTED_^1***_*LOCATION - 1_^1***_!$F6 - HIGHEST UNPROTECTED LOCATION + 1_^1***_!$F7 - LOWEST UNPROTECTED LOCATION - 1_^1_%SPC€€_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!T11_^1_%EXT JBCNFG_^1_%SPC_!1_^1_%EXT* REQERR_^1_%EXT_!LOADIN_O****_^1_%EXT COMPV4_'16 BIT ADDRESS COMPARE ROUTINE (TRVE**MSOS 4.0_^1_%SPC_!1_^1_%EQU_!A(1),Q($22),RL(3),PR(5)_^1_%EQU_!REQXT($B9)_^1_%SPC_!2_^1T11_"LDA- 8,I_*VOL WD. 8 IS INDIR INDICATOR_'**MSOS 4.0_^1_%SAM 1_,ENTRY CHECK IF REQUEST IN€€DIRECT_#**MSOS 4.0_^1_%RAO- RL,I_%INCREMENT RETURN LOC. BY ONE_^1_%LDA- RL,I_)INSURE THE RETURN ADDRESS IS_'**MSOS 4.0_^1_%LDQ- $F6_*LEGAL_*N_2**MSOS 4.0_^1_%RTJ* (EQUAL)_J**MSOS 4.0_^1_%SAZ ERR_*NO_A**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAN ERR_*NO_^1_%LDA- A,I_^1_%SAZ_!1_)CHECK FOR A AND Q ZERO._^1_%JMP* CORE1_^1_%LDA- (Q),I_^1_%SAZ_!CORE-*-1_^1ERR_"JMP_!REQERR_#ERROR MESSA€€GE JO2_^1_%SPC_!1_^1CORE_!LDA- $EC_'A = Q = ZERO_^1_%STA- A,I_'HIGHEST UNPROTECTED IN A_^1_%LDA- $ED_^1_%STA- (Q),I_$LOWEST UNPROTECTED IN Q_^1_%JMP* CORE2_^1_%SPC_!1_^1CORE1 LDQ- (Q),I_$A AND Q NOT EQUAL TO ZERO_^1_%RTJ COMPV4_'UPPER MUST BE GREATER THAN LOWER_"**MSOS 4.0_^1_%EQU EQUAL(*-1)_G**MSOS 4.0_^1_%SAZ C1_+IT IS_>**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAN C1_+IT€€ IS_>**MSOS 4.0_^1_%JMP* ERR_'NO - REQUEST ERROR_^1C1_#LDQ- $F6_*CHECK IF A IN UNPROTECTED_***MSOS 4.0_^1_%LDA- A,I_*CORE_?**MSOS 4.0_^1_%RTJ* (EQUAL)_J**MSOS 4.0_^1_%SAZ ARND_^1_%INA 0_P**MSOS 4.0_^1_%SAZ ARND_)YES_@**MSOS 4.0_^1_%LDA LOADIN_$CHECK IF LOADER IS IN_5****_^1_%SAN 1_U****_^1_%JMP* ERR_'NO - REQUEST ERROR_^1ARND_!LDA- $F7_*IS LOWER BOUNDS BELOW TOP_***MSOS 4.0_€€^1_%LDQ- (Q),I_(OF MONITOR_9**MSOS 4.0_^1_%RTJ* (EQUAL)_J**MSOS 4.0_^1_%SAZ AR1_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ AR1_*YES_@**MSOS 4.0_^1_%JMP* ERR_'NO - REQUEST ERROR_^1AR1_"LDA- (Q),I_L**MSOS 4.0_^1_%STA- $ED_^1_%LDA- A,I_^1_%STA- $EC_^1_%LDA JBCNFG_'IF JOB CANCEL FLAG IS SET, DO NOT RETURN_^1_%SAZ CORE2_(TO USER_^1_%LDA- $EA_^1_%STA- 3,I_^1CORE2 JMP- (REQXT)_^1€ _%END_]_^__,I_(OF MONITOR_9**MS PT7 CSY/ D33 P€1_%NAM T7_+DECK-ID D33 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$T7 LOADER REQUEST PROCESSOR_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* THIS IS THE LOADER REQUEST MODULE_^1* ITS PURPOSE I€€S TO PLACE THE LOADER IN THE UPPER_^1* MOST PART OF UNPROTECTED CORE._^1* THE RELOCATING LOADER WILL THEN BE OPERATED._^1* THE PARAMETERS SUPPLIED TO THE LOADER MUST BE_^1* IN A AND Q WHEN THE REQUEST IS MADE._^1* UPON ENTRANCE, THE I REGISTER CONTAINS THE LOCATION_^1* OF VOLATILE STORAGE._^1* THE A REGISTER CONTAINS POINTER TO PARAMETER LIST_^1* AND IF NEGATIVE, CALL IS INDIRECT_^€€1*_]_^1* VOLATILE STORAGE ASSIGNMENT_^1* 0 - Q REGISTER_^1* 1 - A REGISTER_^1* 2 - I REGISTER_^1* 3 - RETURN LOCATION._^1* 4 - NOT USED._^1* 5 - LOC. OF REQUEST PARAMETER LIST._^1* 6 - NOT USED._^1* 7 - NOT USED._^1* 8-- INDICATOR FOR INDIRECT_@**MSOS4.0*_^1_%SPC_!1_^1*** LIC - LOADER IN CORE FLAG, SET TO LOCATION_^1***_'OF LOADER._^1*** LOADSD - MASS STORAGE SYSTEM DIRE€€CTORY TABLE_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!T7_^1_%EXT* REQERR_^1_%SPC_!1_^1_%EXT LOADSD,JPRET1,JPRETN,JPRET JOB PROCESSOR RETURNS_^1_%EXT_!LOADIN_^1_%EXT UNPIO,SWAPCK_^1_%EXT JBCNFG_^1_%EXT JOBIND_K**MSOS4.0*_^1_%EXT MIBUF_L**MSOS4.0*_^1_%SPC_!1_^1_%EQU ONEBIT($23)_^1_%EQU ZERO($22)_^1_%EQU_!DISP($EA)_^1_%SPC_!1_^1T7_#€€LDA- 8,I_*GET INDIRECT WORD_2**MSOS4.0*_^1_%SAM 1_,ENTRY-CHECK FOR INDIRECT REQ._%**MSOS4.0*_^1_%RAO- 3,I_(INCREASE RETURN LOC. BY ONE_^1_%LDQ* LOF_'CHECK LOCK OUT FLAG._^1_%SQZ_!LOAD-*-1_^1_%JMP* REQER_^1LOAD_!LDA- 3,I_^1_%STA* RL_+SAVE RETURN LOCATION_^1LOADA SET A_^1_%STA* LOF_'SET LOCK-OUT FLAG._^1_%IIN 0_P**MSOS4.0*_^1_%RTJ- ($BA)_(RELEASE VOLATILE_3**MSOS4.0*_^1_%EIN €€0_P**MSOS4.0*_^1_%STQ* TNA_*SAVE Q_=**MSOS4.0_^1_%STQ* TEMP_M**MSOS4.0*_^1_%STA* FUNC_)SAVE A_=**MSOS4.0*_^1_%STA* TEMP1_L**MSOS4.0*_^1_%AND- $6_^1_%STA* T_)TYPE OF LOADING OPERATION_^1_%TRA Q_^1_%LDA* FUNC_)REPLACE T7 LOADER REQUEST_***MSOS4.0*_^1_%ARS 4_,FUNCTION WITH NECESSARY_,**MSOS4.0*_^1_%ALS 4_,LOADER FUNCTION TO EXECUTE_)**MSOS4.0*_^1_%EOR* FNCODE,Q_$REQUSTED OPERATIO€€N_1**MSOS4.0*_^1_%STA* FUNC_M**MSOS4.0*_^1_%STA* TEMP1_L**MSOS4.0*_^1_%LDA- ONEBIT,Q_^1_%AND =N$3A_(IS IT A 1,3,4,OR 5_1**MSOS4.0*_^1_%SAN LOAD1_(YES - ASSUME LOADER IS ALREADY IN CORE_^1*_8IF IS WAS PREVIOUSLY USED BY A 0,3 OR 7_^1*_8IT WILL STILL BE IN CORE_^1_%LDA* LIC_'CHECK FOR LOADER IN CORE._^1_%SAZ_!1_^1LOAD1 JMP* LOAD4_$LOADER IN CORE_^1_%SPC_!1_^1_%LDA- $ED_*SET TEMP€€ORARY HIGHEST AND_***MSOS4.0*_^1_%INA 1_P**MSOS4.0_^1_%STA* FWALOD_K**MSOS4.0_^1_%LDA- $EC_*FUNCTION_;**MSOS4.0*_^1_%STA* LWALOD_K**MSOS4.0*_^1_%LDA- $F6_R*****_^1_%TRA_!Q_*SHALL WE USE_=*****_^1_%SUB- $EC_(F6 OR EC_A*****_^1_%SAM_!1_*USE THE SMALLER_:*****_^1_%LDQ- $EC_((LOWEST ADDRESS)_9*****_^1_%STQ* ALDR_Q*****_^1_%LDQ* LSD_'LOAD LOADER INTO HIGH CORE_^1_%ADQ- $EB_^1_%LD€€A- 4,Q_^1_%STA* LOAD3+5_"LOADER SIZE_^1_%SUB* ALDR_Q*****_^1_%TCA A_^1_%SUB- $ED_*CHECK IF LOADER SIZE_^1_%SAP OK-*-1_'EXCEEDS TEMP. UNPROT. CORE_^1REQER JMP REQERR_^1OK_#ADD- $ED_*RESTORE A REG._^1_%STA* LL_^1_%STA* LIC_'SET LOADER IN CORE FLAG_^1_%STA* LOAD3+6_^1_%SPC_!1_^1_%LDA- 5,Q_'MOST SIGNIFICANT BITS OF_^1_%STA* LOAD3+7_$SECTOR NO. WHERE PROGRAM_^1*_8BEGINS._^1_€€%LDA- 6,Q_'LEAST SIGNIFICANT BITS OF_^1_%STA* LOAD3+8_$SECTOR NO._^1_%LDA- $C2_*USE LIBRARY DISK TO READ_+**MSOS4.0*_^1_%STA* THREAD+1_$IN THE LOADER_6**MSOS4.0*_^1_%RTJ* DKREAD_'READ IN THE LOADER_1**MSOS4.0*_^1_%RTJ* LOAD5_L**MSOS4.0*_^1LOAD5 0_"0_P**MSOS4.0*_^1_%LDA =XFWALOD-LOAD5_C**MSOS4.0*_^1_%ADD* LOAD5_(SET UP FWA-LWA ADDRESS_-**MSOS4.0*_^1_%STA* TNA_*POINTER FOR SETBAS€€ES FUNCTION_%**MSOS4.0*_^1_%ENA 1_P**MSOS4.0*_^1_%STA* FUNC_M**MSOS4.0*_^1_%RTJ* LOAD8_(DO SET BASES FUNCTION_.**MSOS4.0*_^1_%LDA* TEMP_M**MSOS4.0*_^1_%STA* TNA_N**MSOS4.0*_^1_%LDA* TEMP1_L**MSOS4.0*_^1_%STA* FUNC_M**MSOS4.0*_^1_%JMP* LOAD4_L**MSOS4.0*_^1FUNC_!NUM 0_,STORAGE FOR A FOR LOADER_+**MSOS4.0*_^1TEMP1 NUM 0_,TEMPORARY A FOR LOADER_-**MSOS4.0*_^1TNA_"NUM 0_,STORAGE FO€€R Q FOR LOADER_+**MSOS4.0*_^1TEMP_!NUM 0_,TEMPORARY Q FOR LOADER_-**MSOS4.0*_^1LOADI ADC LOADIN_K**MSOS4.0_^1RL_#NUM 0_,RETURN LOCATION_4**MSOS4.0_^1LOF_"NUM 0_,LOCK-OUT FLAG SET WHEN LOADER_%**MSOS4.0_^1ALDR_!NUM 0_P**MSOS4.0_^1*_8REQUEST IN OPERATION_/**MSOS4.0_^1LIC_"NUM 0_,LOADER IN CORE FLAG_0**MSOS4.0_^1LL_#NUM 0_,1ST WORD LOCATION OF THE LOADER_#**MSOS4.0*_^1LSD_"ADC€€ LOADSD_K**MSOS4.0*_^1FWALOD NUM 0_,BASES FOR SETBASES_1**MSOS4.0*_^1LWALOD NUM 0_,FUNCTION_;**MSOS4.0*_^1*_*ACTUAL LOADER FUNCTIONS USED FOR EXECUTION OF%_"**MSOS4.0*_^1FNCODE NUM 0_,RELOCATABLE LOAD_3**MSOS4.0*_^1_%NUM 10_+LOAD FROM PROGRAM LIBRARY_***MSOS4.0*_^1_%NUM 8_,LOAD PROGRAM FROM LIB. AND EXECUTE **MSOS4.0*_^1_%NUM 6_,PRODUCE MEMORY MAP_1**MSOS4.0*_^1_%NUM 9_,LO€€OK UP ENTRY-POINT NAME_+**MSOS4.0*_^1_%NUM 1_,SAME AS T=1 BUT NO MEMORY MAP_%**MSOS4.0*_^1_%NUM 5_,SEARCH CREP DIRECTORIES_,**MSOS4.0*_^1_%NUM 4_,INITIALIZE DATA BASE_/**MSOS4.0*_^1_%SPC 2_P**MSOS4.0*_^1DKREAD 0_"0_P**MSOS4.0*_^1_%RAO UNPIO_(SET UNPIO TO INHIBIT SWAPPING_^1LOAD3 RTJ- ($F4)_$SYSTEM REQUEST TO LOAD_^1_%NUM $4800_(LOADER FROM MASS STORAGE_+**MSOS4.0*_^1_%NUM_!€€$0000_^1THREAD NUM_!$0000_^1_%NUM_!$08C2_$LIBRARY UNIT_^1_%NUM_!$0000_$NUMBER OF WORDS_^1_%NUM_!$0000_$STARTING ADDRESS_^1_%NUM_!$0000_$MOST SIGNIFICANT BITS_^1_%NUM_!$0000_$LEAST SIGNIFICANT BITS_^1_%LDA* THREAD_#CHECK FOR COMPLETION_^1_%SAZ 1_^1_%JMP* *-2_^1_%RTJ SWAPCK_'RELEASE UNPIO FLAG_^1_%JMP* (DKREAD)_I**MSOS4.0*_^1_%SPC_!1_^1LOAD4 LDA* T_,CHECK FOR SUBROUTINE LOAD FUN€€CTIONS **MSOS4.0_^1_%INA -1_*ONE FUNCTION_:MSOS4.0_^1_%SAN 2_,NO_CMSOS4.0_^1LOAD4A RTJ* LINK_)LINK ENTRY POINTS_4MSOS4.0_^1_%JMP* TCHECK_MMSOS4.0_^1_%INA -4_+FIVE FUNCTION_8MSOS4.0_^1_%SAN 1_RMSOS4.0_^1_%JMP* LOAD4A_MMSOS4.0_^1_%INA -1_+PATCH TO CREP TABLES FUNCTION_%**MSOS4.0*_^1_%SAN 1_P**MSOS4.0*_^1_%JMP* LOAD4A_'YES_@**MSOS4.0*_^1_%RTJ* LOAD8_(NO,EXECUTE THE REQUESTED FUN€€CTION_#MSOS4.0_^1_%SAP NOERR_L**MSOS4.0*_^1_%INA 0_,-0 ERROR INDICATOR FROM LOADER_$**MSOS4.0*_^1_%SAM NOERR_L**MSOS4.0*_^1_%SET A_,IRRECOVERABLE ERROR FROM_+**MSOS4.0*_^1_%STA* SAVA_)LOADER - REPORT BACK TO_,**MSOS4.0*_^1_%JMP* LOAD6-2_%USER_?**MSOS4.0*_^1NOERR SAN 1_P**MSOS4./*_^1_%JMP* NOCCRD_K**MSOS4.0_^1_'STA* TEMP_(SAVE POINTER TO ADDR, OF STATEMENT **MSOS4.0_^1_%LDQ* €€T_,LOOK-UP ENTRY-POINT FUNCTION_'**MSOS4.0*_^1_%INQ -4_O**MSOS4.0*_^1_%SQN MOVE1_L**MSOS4.0*_^1_%STA* SAVA_)YES,SAVE ADDRESS FOR RETURN TO USER **MSOS4.0_^1_%JMP* TCHECK_K**MSOS4.0_^1T_$NUM 0_,TYPE OF LOADING OPERATION_***MSOS4.0_^1SAVA_!NUM 0_P**MSOS4.0*_^1MOVE1 LDA MIBUF_L**MSOS4.0*_^1_%STA* TEMP1_L**MSOS4.0_^1_%ENQ 36_O**MSOS4.0_^1MOVE_!LDA* (TEMP),Q_$MOVE THE STATEMENT_1€€**MSOS4.0_^1_%STA* (TEMP1),Q_H**MSOS4.0_^1_%INQ -1_O**MSOS4.0_^1_%SQM 1_,MOVE COMPLETED_5**MSOS4.0_^1_%JMP* MOVE_M**MSOS4.0_^1_%LDA* TEMP1_(YES,STORE ADDR. OF JOBENT_***MSOS4.0_^1_%STA JOBIND_'BUFFER FOR JOBPRO_2**MSOS4.0_^1NOCCRD LDA- 2,I_N**MSOS4.0*_^1_%SPC_!1_^1_%STA* SAVA_%SAVE A REGISTER_^1TCHECK LDA* T_,TYPE OF LOADING OPERATION_***MSOS4.0_^1_%SAZ_!LOAD6-*-1_^1_%INA -2_P€€46*773_^1_%SAN IST3_N46*773_^1_%RTJ* LINK_)SUBROUTINE LOAD FUNCTION_+**MSOS4.0*_^1_%LDA* SAVA_N46*773_^1_%SAZ ERT2_N46*773_^1_%STA* RL_P46*773_^1ERT2_!JMP* LOAD6-2_K46*773_^1IST3_!INA -1_P46*773_^1_%SAZ_!LOAD6-*-1_^1_%INA -3_+CHECK FOR T=6_753*1062_^1_%SAZ 2_,T=6 SET LOADER NOT IN CORE_)**MSOS4.0*_^1_%INA -1_O**MSOS4.0*_^1_%SAZ LOAD6-*-1_#T=7 NOT NECESSARY TO CLEAR LIC_$**MS€€OS4.0*_^1_%ENA_!0_)SET LOADER NOT IN CORE_^1_%STA* LIC_^1LOAD6 STA* LOF_'SET LOCK-OUT FLAG ZERO_^1_%STA* (LOADI)_^1_%LDQ- $EE_+PICK UP LOADER RETURN_^1_%SPB_!0_,RESET PROTECT BIT_^1_%LDQ JBCNFG_^1_%SQZ 1_^1_%JMP- (DISP)_'EXIT, JOB CANCEL FLAG HAS BEEN SET_^1_%LDA* RL_^1_%STA* RET+1_$RETURN LOCATION_^1LOAD9 LDA* SAVA_%RETURN A REGISTER._^1_%EIN 0_,ENABLE INTERRUPTS BEFOR€€E RETURNING TO USER_^1RET_"JMP+ 0_)RETURN TO CALLING PROGRAM_^1_%SPC_!1_^1LOAD8 0_"0_^1_%LDQ* LOAD8_'LOADER RETURN LOCATION._^1_%STQ JPRET1_'PATCH RETURN FROM TRVEC_^1_%LDQ =XJPRETN_^1_%STQ JPRET_(PATCH THE PRESET TABLE_^1_%STQ- $EE_)PATCH THE LO CORE INDIRECT ADDR TO JPRETN_^1_%CPB 0_,CLEAR PROTECT BIT ON JPRETN_^1LOAD7 RAO* (LOADI)_"SET FLAG IN PROTECT PROCESSOR_^1*_7TO€€ LET LOADER READ AND WRITE._^1_%LDA* FUNC_)A_DMSOS4.0_^1_%LDQ* TNA_*Q_B**MSOS4.0*_^1_%EIN 0_,ENABLE INTERRUPTS_2**MSOS4.0*_^1_%JMP* (LL)_)JUMP TO LOADER_5**MSOS4.0*_^1_%SPC_!1_^1LINK_!0_"0_P**MSOS4.0*_^1_%ENA 2_,LINK ENTRIES_7**MSOS4.0*_^1_%RTJ* CMLOAD_K**MSOS4.0*_^1_%LDA* T_,CREP TABLE PATCH_3**MSOS4.0*_^1_%INA -6_O**MSOS4.0*_^1_%SAN LINK2_L**MSOS4.0*_^1_%JMP* LINK1_L**MSOS4.0€€*_^1LINK2 ENA 10_+LINK TO PROGRAM LIBRARY_,**MSOS4.0*_^1_%RTJ* CMLOAD_K**MSOS4.0*_^1LINK1 ENA 7_,PRINT UNPATCHED EXTERNALS_***MSOS4.0*_^1_%RTJ* CMLOAD_K**MSOS4.0*_^1_%JMP* LINK1_L**MSOS4.0*_^1CMLOAD 0_"0_P**MSOS4.0*_^1_%STA FUNC_)STORE FUNCTION CODE_0**MSOS4.0_^1_%RTJ* LOAD8_(RETURN TO LOADER_3**MSOS4.0*_^1_%SAP NERROR_K**MSOS4.0*_^1EREXIT SET A_,IRRECOVERABLE ERROR_0**MSOS4€€.0*_^1_%STA* SAVA_)RETURN TO USER WITH A SET_***MSOS4.0*_^1_%JMP* LOAD6-2_%TO INDICATE AN ERROR_/**MSOS4.0*_^1NERROR SQP PATCH_L**MSOS4.0*_^1_%JMP* (CMLOAD)_$UNPATCHED EXTERNAL REMAIN_***MSOS4.0*_^1PATCH LDA* T_,ONE(1) FUNCTION REQUIRING_***MSOS4.0*_^1_%INA -1_+MEMORY MAP_9**MSOS4.0*_^1_%SAN NOMAP_L**MSOS4.0*_^1_%ENA 6_,YES,GIVE PRINT MEMORY MAP_***MSOS4.0*_^1_%STA FUNC_)STOR€€E FUNCTION COL_1**MSOS4.0_^1_%RTJ* LOAD8_L**MSOS4.0*_^1_%SAP NOMAP_L**MSOS4.0*_^1_%JMP* EREXIT_'ERROR FROM LOADER RETURN TO USER_"**MSOS4.0*_^1NOMAP LDA* T_P**MSOS4.0*_^1_%INA -6_+CURRENT FUNCTION =6_0**MSOS4.0*_^1_%SAN NOCREP_K**MSOS4.0*_^1_%ENA 1_,YES,FAKE A ONE FUNCTION_,**MSOS4.0*_^1_%STA* T_,TO PATCH TO PROG, LIBRARY_***MSOS4.0*_^1_%JMP* LINK2_(AFTER ALL CREP TABLE LINKS_€€)**MSOS4.0*_^1NOCREP LDA- 2,I_*SAVE THE TRANSFER ADDRESS_***MSOS4.0*_^1_%STA* SAVA_M**MSOS4.0_^1_%LDA- (ZERO),I_$LOAD IN CORE_7**MSOS4.0_^1_%SAZ INCORE_K**MSOS4.0*_^1_%STA THREAD+5_$NO,STORE SECTOR ADDRESS FOR READ_"**MSOS4.0_^1_%LDA- 1,I_*STORE NUMBER OF WORDS TO_+**MSOS4.0*_^1_%STA THREAD+2_$READ IN_<**MSOS4.0_^1_%LDA FWALOD_K**MSOS4.0*_^1_%STA THREAD+3_$STARTING ADDRESS TO €ξREAD INTO_%**MSOS4.0_^1_%LDA- $B3_*IF THE LOADER HAS PAGED THE_(**MSOS4.0*_^1_%STA THREAD+1_$INFORMATION IS ON THE SCRATCH UNIT **MSOS4.0*_^1_%RTJ DKREAD_'READ FROM DISK TO CORE_-**MSOS4.0_^1INCORE JMP* (LINK)_K**MSOS4.0*_^1_%END_]_^__ξPT5 CSY/ D34 P€1_%NAM T5_+DECK-ID D34 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_'EXIT REQUEST MODULE_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* THIS IS THE EXIT REQUEST MODULE_^1* ITS PURPOSE IS TO SIGNA€€L COMPLETION OF A JOB._^1* THE INTERRUPT STACK IS CHECKED FOR EXITS TO_^1* UNPROTECTED CORE. IF ANY EXIST, THE DISPATCHER_^1* IS ENTERED. IF NONE EXIST, THE REQUEST STACKS ARE_^1* INTERROGATED FOR REQUESTS ORIGINATING IN UNPRO-_^1* TECTED CORE. IF NONE EXIST, THE JOB PROCESSOR IS_^1* ENTERED FOR COMPLETION. IF ONE OR MORE EXIST,_^1* THE JOB PROCESSOR WAITS FOR COMPLETION._^1_%SP€€C_!1_^1*** $B8 - TOP OF INTERRUPT STACK_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!T5_^1_%SPC_!1_^1_%ENT REQERR_K**MSOS 4.0_^1_%EXT LPTRS_L**MSOS 4.0_^1_%EXT LOCF_M**MSOS 4.0_^1_%EXT JBCNCL_'JOB CANCEL ROUTINE_^1_%EXT_!UNPTIM_^1_%EXT_!INTSTK_^1_%EXT_!UNPIO_^1_%EXT UNPIOF_K**MSOS 4.0_^1_%EXT COMPV4_K**MSOS 4.0_^1_%EQU LPMSK(2)_I*€€*MSOS 4.0_^1_%EQU ZERO($22)_H**MSOS 4.0_^1_%SPC_!1_^1T5_#SQP 1_,CALLED FROM MONI_3**MSOS 4.0_^1_%JMP* T5DX_)CALLED FROM PROTECT_0**MSOS 4.0_^1_%STA- 5,I_*LIST_^1_%LDA- $F7_^1_%LDQ- 5,I_*CHECK FOR PROTECTED_0**MSOS 4.0_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%EQU EQUAL(*-1)_G**MSOS 4.0_^1_%SAZ EXIT_)REQUEST LOCATION YES_.**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAN EXIT_)YES_@**MSOS 4.0€€_^1_%LDA- 5,I_^1_%SUB- $F6_^1EXIT_!STA- 1,I_^1_%IIN_!0_)RELEASE VOLATILE_^1_%RTJ- ($BA)_'STORAGE_^1_%EIN_!0_^1_%SAM_!1_^1_%JMP- ($EA)_^1_%SPC_!1_^1T5DX_!LDA =XINTSTK_!FIRST LOCATION OF INTERRUPT_^1_%STA- I_+STACK_^1_%ENQ_!0_^1_%LDA- ($E9)_(CHECK 65K MODE SWITCH 65K=1_'**MSOS 4.0_^1_%SAZ EXIT1_L**MSOS 4.0_^1_%LDA =X$0B00_%-_B**MSOS 4.0_^1_%STA* EX11_)DON'T CLEAR BIT 15 OF €€P_^1_%STA* EX1_*IF 65K MACHINE_5**MSOS 4.0_^1_%SPC_!1_^1EXIT1 IIN 0_^1_%LDA- 3,B_*CHECK IF A RETURN LOCATION IS_^1EX11_!AND- $11_*A UNPROTECTED CORE LOCATION_^1_%STQ* QSAV_M**MSOS 4.0_^1_%LDQ- $F7_N**MSOS 4.0_^1_%INA_!-1_^1_%RTJ* (EQUAL)_J**MSOS 4.0_^1_%LDQ* QSAV_M**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ EXIT3_(PROTECTED CORE RETURN_.**MSOS 4.0_^1_%LDA- 3,B_^1EX1_"AND- $11_N**€€MSOS 4.0_^1_%LDQ- $F6_N**MSOS 4.0_^1_%RTJ* (EQUAL)_J**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAN EXIT3_(PROTECTED CORE RETURN_.**MSOS 4.0_^1EXIT2 JMP- ($EA)_$UNPROTECTED CORE RETURN DISP._^1_%SPC_!1_^1EXIT3 LDQ* QSAV_)A PROTECTED CORE RETURN_,**MSOS 4.0_^1_%INQ 5_P**MSOS 4.0_^1_%TRQ_!A_)HAS COMPLETE STACK BEEN_^1_%ADD- I_^1_%SUB- $B8_)CHECKED._^1_%SAP EXIT4_L**MSOS 4.0_^1_%JMP€€* EXIT1_$NO_^1EXIT4 EIN 0_^1_%LDA- $EF_*CURRENT PROIRITY LEVEL_^1_%SAZ_!1_)IF NOT ZERO JUMP TO_^1_%JMP- ($EA)_%DISPATCHER._^1EX4_"IIN 0_^1_%LDA UNPTIM_#UNPROTECTED TIMER_^1_%ADD UNPIO_$UNPROTECTED I/O_^1_%ADD UNPIOF_'I/O COMPLETING IN FOREGROUND_'**MSOS 4.0_^1_%EIN 0_^1_%SAZ EX5-*-1_^1_%JMP* EX4_^1EX5_"ENQ -5_+TELL JBKILL IT WAS CALLED FROM HERE **MSOS 4.0_^1_%RTJ- ($F4)€€_^1_%NUM $5202_^1_%ADC JBCNCL_^1_%JMP- ($EA)_^1QSAV_!NUM 0_P**MSOS 4.0_^1REQERR LDA- 5,I_*REQUEST ERROR JP02_1**MSOS 4.0_^1_%LDQ LPTRS_(LOCATION OF REQUEST PARAMETER_%**MSOS 4.0_^1_%STA- (ZERO),Q_$STORE ERROR ADDRESS_0**MSOS 4.0_^1_%IIN 0_P**MSOS 4.0_^1_%RTJ- ($BA)_(RELEASE VOLATILE_3**MSOS 4.0_^1_%EIN 0_P**MSOS 4.0_^1_%ENQ 2_P**MSOS 4.0_^1_%LDA LOCF_)RETURN TO PROTEC_3**MS€^OS 4.0_^1_%STA- I_,TO SET UP ERROR_4**MSOS 4.0_^1_%JMP- (I)_*MESSAGE_<**MSOS 4.0_^1_%END_]_^__^PT3 CSY/ D35 P€1_%NAM T3_+DECK-ID D35 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$T3 STATUS REQUEST PROCESSOR_^1 SPC 1_]_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* THIS IS THE STATUS REQUEST PROCESSOR_^1€€* IT GIVES THE REQUESTER IN THE A, Q, AND I REGISTERS,_^1* INFORMATION ABOUT AN I/O DEVICE._^1* THE FOUR INPUT PARAMETERS ARE_^1**_"L_!LOGICAL UNIT_^1**_"A_!RELATIVE/INDIRECT INDICATOR_^1**_"T_!LOCATION OF A PARAMETER LIST OF AN I/O REQ._^1**_"X_!INDIRECT/RELATIVE INDICATOR._^1***_!UPON ENTRANCE, EIGHT VOLATILE STORAGE LOCATIONS_^1***_!HAVE BEEN SAVED. THE EIGHT LOCATIONS ARE AS_^1€€***_!FOLLOWS_^1*_#0 - S VALUE AND Q REGISTER UPON RETURN_^1*_#1 - PHYSTB TABLE LOCATION AND A REGISTER UPON_^1*_)RETURN_^1*_#2 - TEMPORARY STORAGE AND I REGISTER UPON RETURN_^1*_#3 - RETURN LOCATION_^1*_#4 - LOC. OF REQUEST PARAMETER LIST - PHYSTB_^1*_#5 - LOC. OF REQUEST PARAMETER LIST_^1*_#6 - EQUIPMENT TYPE AND STATUS_^1*_#7 - LOGICAL UNIT NO._^1*_#8 - INDIRECT INDICATO€€R_@**MSOS 4.0_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!T3_^1_%SPC_!1_^1_%EXT LOG1A_J**MSOS 4.1**_^1_%EXT* REQERR_^1_%EXT JBCNFG_^1_%SPC_!1_^1_%EQU_!RL(3)_^1_%EQU_!REQXT($B9)_^1_%SPC_!2_^1T3_#LDA- 8,I_*CHECK FOR INDIRECT_1**MSOS 4.0_^1_%SAM STAT-*-1_$SKIP IF INDIRECT_3**MSOS 4.0_^1_%LDA- 3,I_(REQUEST_^1_%INA_!3_)INCREASE RETURN BY 3€€_^1_%STA- 3,I_^1STAT_!LDQ- 5,I_'LOC. OF REQUEST_^1_%LDQ- 1,Q_'LOGICAL UNIT NO. WORD_^1_%LLS_!6_)A CONTAINS A PARAMETER_^1_%AND- $4_^1_%INA_!-1_^1_%QRS_!6_)Q CONTAINS L.U. PARAMETER_^1_%SAM_!STAT2-*-1_"A PARAMETER = 0_^1_%SAZ_!STAT3-*-1_"A PARAMETER = 1_^1STAT1 LDA- $C_(A PARAMETER = 2_^1_%LAQ_!Q_^1_%LDA- ($22),Q_^1_%JMP* STAT4_^1_%SPC_!1_^1STAT2 LDA- $C_(A PARAMETER = 0_^€€1_%LAQ_!A_^1_%JMP* STAT4_^1_%SPC_!1_^1STAT3 ADQ- 5,I_'A PARAMETER = 1_^1_%LDA- ($22),Q_"A = SIGNED INCREMENT_^1_%SPC_!1_^1STAT4 STA- 7,I_'L.U. NO._^1_%SAZ_!ERR-*-1_"CHECKING FOR L.U. NO. ERROR_^1_%SAM_!ERR-*-1_^1_%LDA* (LOG1)_^1_%SUB- 7,I_^1_%SAP_!STAT5-*-1_^1ERR_"JMP_!REQERR_#ERROR MESSAGE JO2_^1_%SPC_!1_^1STAT5 LDQ- 7,I_'L.U. NO_^1_%LDQ* (LOG1),Q_^1_%LDA- 6,Q_'PHYSTB€t LOC. OF REQUEST_^1_%STA- 4,I_(PARAMETER LIST_^1_%LDA- 11,Q_^1_%INA_!-1_)INTO_^1_%STA- 2,I_'VOLATILE - I REGISTER_^1_%LDA- 8,Q_'SET WORD 8 OF PHYSTB IN_^1_%STA- ($22),I_"VOLATILE - Q REGISTER_^1_%LDA- 12,Q_^1_%STA- 1,I_'VOLATILE - A REGISTER_^1_%LDA JBCNFG_^1_%SAZ STAT17_^1_%LDA- $EA_^1_%STA- 3,I_^1STAT17 JMP- (REQXT)_^1_%SPC_!1_^1LOG1_!ADC_!LOG1A_^1_%END_]_^__tPJOBPRO CSY/ D36 P€1_%NAM JOBPRO_'DECK-ID D36 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*****************************************************_^1_%SPC_!1_^1*_$JOB PROCESSOR SECONDARY CONTROL MODULE_0**MSOS 4.0_^1_%SPC_!1_^1**************************€€***************************_^1_%SPC_!2_^1_%ENT_!JOBTWO_^1_%ENT_!RF3_^1_%ENT JO3T_)ERROR RETURN FROM DUMMY 1,2,3_#**MSOS 4.1**_^1_%ENT_!RI_^1_%SPC_!1_^1_%EXT TRNVEC_'ABS. ADDRESS OF TRANTA BUFFER IN JOBENT_^1_%EXT JBPROE_(ENTRY POINT TO JOBENT (TRVEC)_^1_%EXT MIBUF_(ADDR. OF JOBENT MIBUF (TRVEC)_^1_%EXT JPSWT_(SWITCH IN TRVEC_!SET BY JOBENT_^1_%EXT JBCNFG_'JOB CANCEL FLAG_^1€€_%EXT RECOV_^1_%EXT ERRMSG_^1_%EXT_!FILE2_^1_%EXT NSTACK_^1_%EXT_!TRANV_^1_%EXT_!IUP_^1_%EXT_!MIB_^1_%EXT_!FILE3_^1_%EXT JOBIND_K**MSOS 4.0_^1_%EXT INPTV4_K**MSOS 4.0_^1_%EXT LOG1A_L**MSOS 4.0_^1_%EXT VINPV4_^1_%EXT* ONE,TWO,THREE_^1_%EQU HFF($A)_^1_%EQU H7FFF($11),HFFFF($12)_^1_%EQU REQXT($B9)_^1_%SPC_!1_^1_%EQU_!DISP($EA)_^1_%EQU ZERO($22)_H**MSOS 4.0_^1_%SPC_!2_^1JOB€€TWO NUM_!$C8FE_$ENTRY POINT_^1_%STA* (F2)_^1JP1_"STQ* SAVQ2_(SAVE Q REG._^1_%STA TRANTA_K**MSOS 4.0_^1_%ADD =XTRANTA-JOBTWO_B**MSOS 4.0_^1_%STA TRANV_(ADD. OF JOBPRO TRANTA TABLE STORED_^1*_:IN TRVEC._^1_%ENA 7_^1_%ADD TRNVEC_K**MSOS 4.0_^1_%STA- I_^1_%ENQ -6_O**MSOS 4.0_^1LOOP_!LDA- (I)_*MOVE CONTENTS OF BPI, RI, AND LOADEP**MSOS 4.0_^1_%STA TRANTA+13,Q_!AND ERROR NUMBER,S€€TACK ADDR. JOB FLA**MSOS 4.0_^1_%RAO- I_^1_%INQ 1_P**MSOS 4.0_^1_%SQZ OUT2_^1_%JMP* LOOP_^1OUT2_!LDQ* SAVQ2_^1_%SQM JB-*-1_'SKIP IF Q IS SET NEG._^1_%LDA JOBIND_K**MSOS 4.0_^1_%EQU JOBI(*-1)_H**MSOS 4.0_^1_%SAN OUT3A_L**MSOS 4.0_^1OUT2A SET A_,EITHER INITIAL CALL OR BACK FROM_"**MSOS 4.0_^1*_8LIBEDT OR RECOVERY_1**MSOS 4.0_^1_%STA* (JOBI)_K**MSOS 4.0_^1OUT3_!LDQ TRANTA,Q_I€€**MSOS 4.0_^1_%JMP* JOBTWO,Q_$JUMP THROUGH THE ADDRESS IN THE TRANTA_^1*_9TABLE TO THE PROPER ROUTINE._^1OUT3A SAP JBP_N**MSOS 4.0_^1_%JMP* OUT3_M**MSOS 4.0_^1SAVQ2 NUM 0_^1JB_#LDQ JPSWT_(JPSWT IS SET NEG. AFTER RETURN FROM_^1*_9LIBEDT AND RECOVERY. JOBENT STORES THE_^1*_9MIINP BUFFER ADDRESS IN HERE. IF A NEW_^1*_9J P STMT. IS READ IN BY JOBPRO, THE ADDRESS_^1*_9OF MIBUF IN€€ JOBENT IS STORED IN INPBUF_^1*_9AT TAG RD3._^1_%STQ INPBUF_'STORE MIINP BUFFER ADDR IN TRANTA TA**MSOS 4.0_^1_%SQP_!JBPRO-*-1_^1_%CLR A_^1_%STA (MIB1)_'CLEAR MIB SWITCH_3**MSOS 4.0_^1_%JMP JOBP_)TYPE 'J' AND INPUT CONTROL STATEMENT_^1JBP_"TRA Q_,T7 OR JPLOAD TERMINATED ON A CONTROL**MSOS 4.0_^1*_8STATEMENT. JOBIND IS BUFFER ADDRESS **MSOS 4.0_^1*_8OF CONTROL STATEMENT._.**MSO€€S 4.0_^1_%SET A_P**MSOS 4.0_^1_%STA* (JOBI)_'RESET FOR NORMAL CONTROL CARD PROC. **MSOS 4.0_^1JBPRO JMP SSI_*STATEMENT ALREADY INPUT, MOVE TO SM BUF_^1_%SPC_!1_^1JPTAB ALF_!1,K,_%K JP REQ. NO. 0_^1_%NUM_!$42FF_$B JP REQ. NO. 1_^1_%NUM_!$55FF_$U JP REQ. NO. 2_^1_%NUM_!$56FF_$V JP REQ. NO. 3_^1_%NUM_!$5AFF_$Z JP REQ. NO. 4_^1_%ALF_!1,SR_%SR JP REQ. NO. 5_^1_%NUM_!$FFFF_$* J€€P REQ. NO. 6_^1_%ALF 1,EO_'EO JP REQ. NO. 7_5**MSOS 4.0_^1_%ALF 1,V,_'V, JP REQ. NO. 8_^1_%ALF 1,CS_'CS JP REQ. NO. 9_5**MSOS 4.0_^1_%ALF 1,R,_'R, JP REQ. NO. A_5**MSOS 4.0_^1_%ALF 1,JO_'JO JP REQ. NO. B_5**MSOS 4.0_^1_%ALF 1,CT_'CT JP REQ. NO. C_5**MSOS 4.0_^1_%ALF 1,PA_'PA JP REQ. NO. D_5**MSOS 4.0_^1_%ALF 1,UN_'UN JP REQ. NO. E_5**MSOS 4.0_^1_%ALF 1,FI_'FI JP REQ. NO. F€€_5**MSOS 4.0_^1_%ALF 1,PU_'PU JP REQ. NO. 10_4**MSOS 4.0_^1_%ALF 1,MO_'MO JP REQ. NO. 11_4**MSOS 4.0_^1_%ALF 1,RE_'RE JP REQ. NO. 12_4**MSOS 4.0_^1_%ALF 1,DE_'DE JP REQ. NO. 13_4**MSOS 4.0_^1_%ALF 1,CL_'CL JP REQ. NO. 14_4**MSOS 4.0_^1_%ALF 1,OP_'OP JP REQ. NO. 15_4**MSOS 4.0_^1_%NUM $31FF_'1 JP REQ. NO. 16_4**MSOS 4.0_^1_%NUM $32FF_'2 JP REQ. NO. 17_4**MSOS 4.0_^1_#NUM $3€€3FF_)3 JP REQ. NO. 18_4**MSOS 4.0_^1JPTABL BSS_!JPTABL(0)_^1SAVQ_!NUM_!$0000_^1TEMP_!NUM 0_P**MSOS 4.0_^1F2_#ADC FILE2_L**MSOS 4.0_^1_%SPC_!1_^1JOBP4 LDQ- ($22),I_"GET FIRST TWO WORDS._^1_%LDA- 1,I_^1_%LLS_!8_^1_%STQ* TEMP_%SAVE SECOND AND THIRD CHAR._^1_%AND- $A_(CHECK FOR ASTERICK_^1_%INA_!-$2A_^1_%SAZ_!1_^1_%JMP* JO3T_^1_%LDA* TRANTA+12_#IS A JOB IN PROGRESS_/**MSOS 4.0_€€^1_%SAN JOLK_)YES_@**MSOS 4.0_^1_%LDA* JPTAB+4_%LET AN *Z THRU_5**MSOS 4.0_^1_%EOR* TEMP_M**MSOS 4.0_^1_%SAN JCHK_M**MSOS 4.0_^1_%JMP* JOLKA_L**MSOS 4.0_^1JCHK_!LDA* JPTAB+11_$NO-BUT MAY BE A JOB CARD_+**MSOS 4.0_^1_%EOR* TEMP_M**MSOS 4.0_^1_%SAZ JOLKA_(LET JCRDV4 DO THE REST OF THE CHECK **MSOS 4.0_^1_%LDA* JPTAB+8_%V, ALLOWED TO START INPUT_***MSOS 4.0_^1_%EOR* TEMP_)FROM OTHE€€R THAN STANDARD_+**MSOS 4.0_^1_%SAZ JOLKA_L**MSOS 4.0_^1_%LDA =N$3135_J**MSOS 4.0_^1_%JMP* JO3T1_(ABORT THE JOB_6**MSOS 4.0_^1JOLK_!LDA* TTYEOF_'*G - EOF FOR TTY_3**MSOS 4.0_^1_%EAQ A_P**MSOS 4.0_^1_%SAN JOLKA_L**MSOS 4.0_^1_%JMP TERMA_(TERMINATE JOB_6**MSOS 4.0_^1TTYEOF NUM $47FF_L**MSOS 4.0_^1JOLKA ENQ JPTABL-JPTAB-1 SEARCH THE TABLE_1**MSOS 4.0_^1RETRY LDA* JPTAB,Q_"C€€HECK FOR REQUEST WORD._^1_%EOR*_!TEMP_^1_%SAZ_!JOBP6-*-1_^1_%EOR =X$DF_+TEST FOR BLANK_^1_%SAZ JOBP6-*-1_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* RETRY_(LOOP AROUND FOR NEXT STATEMENT_^1JOBP6 STQ* QREG_)REQUEST NUMBER_5**MSOS 4.0_^1_%RTJ JBKMIB_'CHECK FOR JOB CANCEL_/**MSOS 4.0_^1_%RTJ* MVTBL_(MOVE TRANTA TABLE TO JOBENT_(**MSOS 4.0_^1_%LDQ* QREG_M**MSOS 4.0_^1_%ENA 0_P**MSOS 4.0_^1_%S€€QM IDXTBL_'JPLOAD CONTROL STATEMENT_+**MSOS 4.0_^1_%SQN 1_P**MSOS 4.0_^1_%JMP* IDXTBL+6_$K_B**MSOS 4.0_^1_%INQ -8_^1_%SQP 1_P**MSOS 4.0_^1_%SQM IDXTBL+2_$*,B,SR,U,V,Z,EOF_3**MSOS 4.0_^1_%INQ -2_O**MSOS 4.0_^1_%SQP 1_P**MSOS 4.0_^1_%SQM IDXTBL+6_$CSY,V,_=**MSOS 4.0_^1_%SQZ IDXTBL+5_$R_B**MSOS 4.0_^1_%INQ -4_O**MSOS 4.0_^1_%SQM IDXTBL+4_$JOB,CTO,PAUS_7**MSOS 4.0_^1_%INQ -€€8_O**MSOS 4.0_^1_%SQM IDXTBL+3_$REWIND,FILES_7**MSOS 4.0_^1_%JMP* JOBP9_(1,2,3_<**MSOS 4.1**_^1IDXTBL INA -8_+JPLOAD_=**MSOS 4.0_^1_%INA 1_,AFILV4_=**MSOS 4.0_^1_%INA 2_,JPSTV4_=**MSOS 4.0_^1_%INA 1_,JPFLV4_=**MSOS 4.0_^1_%INA 2_,JCRDB4_=**MSOS 4.0_^1_%INA 1_,RESTOR_=**MSOS 4.0_^1_%INA 3_,JPCHGE_=**MSOS 4.0_^1JBPEX ENQ 0_P**MSOS 4.0_^1_%STA* INDEX_L**MSOS 4.0_^1_%LDA JBP€€ROE_K**MSOS 4.0_^1_%STA- I_P**MSOS 4.0_^1_%LDA* INDEX_L**MSOS 4.0_^1_%JMP- (I)_N**MSOS 4.0_^1INDEX NUM 0_P**MSOS 4.0_^1TERM_!RTJ* RELFIL_K**MSOS 4.0_^1_%ENA 7_,A JOB IS ABNORMALLY TERMINATING SO **MSOS 4.0_^1_%SET Q_,SCHEDULE FILE MOD TO CLOSE OPEN JOB **MSOS 4.0_^1_%JMP* JBPEX+1_%FILES- RETURN WILL BE AT CLSDON_#**MSOS 4.0_^1_%SPC_!1_^1_%SPC_!1_^1JO3T_!LDA =N$3033_%SET UP 03€€ ERROR CODE_/**MSOS 4.0_^1JO3T1 LDQ* (TRNTB)_%JOBENT TRANTA TABLE_0**MSOS 4.0_^1_%STA- 10,Q_)STORE ERROR IN TRANTA ERROR WORD_"**MSOS 4.0_^1_%JMP* TERM_M**MSOS 4.0_^1*****_#THIS ROUTINE MOVES THE TRANTA TABLE TO JOBENT_!********_^1_%SPC_!1_^1MVTBL NUM 0_^1_%LDA TRNVEC_'GET TRN TBL ADDR IN JOBENT_)**MSOS 4.0_^1_%EQU TRNTB(*-1)_G**MSOS 4.0_^1_%STA- I_-FROM TRVEC AND SAVE_/**MSOS€€ 4.0_^1_%ENQ LENGTH_^1MOVE_!LDA* TRANTA,Q_$TRANSFER TRANTA TABLE TO JOBENT_^1_%STA- (I),Q_L**MSOS 4.0_^1_%SQZ 2_^1_%INQ -1_^1_%JMP* MOVE_^1_%JMP* (MVTBL)_^1_%EJT_]_^1* VECTOR TABLE FOR JOB PROCESSOR_^1_%SPC 2_^1TRANTA NUM $7FFF_)0 - ABSOLUTE LOCATION OF JOBTWO_^1_%ADC JBPRO-JOBTWO_!1 - RETURN WHEN STATEMENT ALREADY INPUT_^1INPBUF NUM 0_.2 - ABS. ADDR. OF INPUT BUFFER IN JOB€€ENT_^1_%ADC JOBP-JOBTWO_"3 - RETURN WHEN NO STATEMENT - 'J' PRINTED_^1_%ADC CLSDON-JOBTWO 4-RETURN AFTER FILES CLOSED_'**MSOS 4.0_^1_%ADC FILHD-JOBTWO_!5-ROUTINE FOR FILE MODS_+**MSOS 4.0_^1_%ADC TERM-JOBTWO_"6-START ABNORMAL JOB TERMINATION_!**MSOS 4.0_^1BPS_"NUM 0_-7 - BREAKPOINT SWITCH_^1RI_#NUM 0_-8 - RECOVERY ON/OFF SWITCH_^1LOADEP NUM 0_-9 - LOADER ENTRY POINT_^1QREG_€€!NUM 0_,10 - REQUEST NUMBER_^1STCK_!NUM 0_,11 - LOCATION OF PROTECT PROCESSOR REQ STACK_^1JFLG_!NUM 0_,12-INDICATES IF A JOB IS IN PROGRESS**MSOS 4.0_^1NN_#ADC NSTACK_'13 - NO. OF ENTRIES IN PROTEC STACK_^1_%ADC RF3-JOBTWO_"14 - RETURN TO RELEASE FILE 3 'OUTPUT J'_^1_%EQU LENGTH(*-TRANTA-1)_?**MSOS 4.0_^1_%SPC_!2_^1JOBP9 LDA* TABLE,Q_"GET ADDRESS OF PROGRAM_^1_%AAQ_!A_^1_%I€€NA_!TABLE-JOBP10_^1_%STA* JOBP10_^1_%RTJ* *_^1JOBP10 NUM_!$0000_^1_%JMP* JOBP_%GET NEXT STATEMENT_^1_%SPC_!1_^1TABLE ADC ONE_*RELATIVE TRANSFER TABLE_^1_%ADC_!TWO_)USERS PROGRAMS._^1_%ADC_!THREE_^1* USER CAN ADD PROGRAM NAMES HERE._^1_%SPC_!1_^1F3_#ADC FILE3_L**MSOS 4.0_^1MIB1_!ADC_!MIB_^1_%SPC_!1_^1RELFIL NOP 0_^1_%RTJ* JBKMIB_^1OUT_"STQ* (MIB1)_'CLEAR MIB FLAG_^1_%JMP* (RE€€LFIL)_$RTS_^1_%SPC 3_^1FILHD RTJ* RELFIL_^1_%ENA 0_P**MSOS 4.0_^1_%JMP* IDXTBL+1_$SCHEDULE THE SECOND PORTION OF_$**MSOS 4.0_^1*_8THE FILE HANDLER_3**MSOS 4.0_^1RF3_"RTJ* RELFIL_^1JOBP_!LDA (IUPP)_'CHECK FOR TYPE PF INPUT_,**MSOS 4.0_^1_%STA* READLU_^1_%AND- $A_+MEDIUM_^1_%SUB- $FD_*INPUT COMMENT DEVICE_/**MSOS 4.0_^1_%SAZ JOBP1_(YES_@**MSOS 4.0_^1_%ADD- $FD_N**MSOS 4.0_^1_%S€€UB =N$FD_L**MSOS 4.0_^1JOBP1 STA* COMSW_L**MSOS 4.0_^1_%SAN JOBP61_'DON'T PRINT A -J- ON THE LIST DEVICE**MSOS 4.0_^1WRIT_!RTJ* JBKILL_'CHECK FOR JOB CANCEL FLAG SET_^1_%RTJ- ($F4)_(OUTPUT J_^1_%ADC $D00,WRIT1-WRIT-2_@**MSOS 4.0_^1WRITHD ADC 0_^1WRITLU ADC_!$18FC,$2_^1_%ADC_!WRITO-*+5_^1_%JMP- (DISP)_K**MSOS 4.0_^1WRIT1 SQP JOBP61_K**MSOS 4.0_^1_%JMP* WRIT_^1JOBP61 LDA (F2€€)_)FIND ABS. LOC. OF SM_/**MSOS 4.0_^1_%ADD =XSM1-JOBTWO_^1_%STA- I_^1_%LDA* (STABUF)_$GET ADDRESS INPUT BUF IN JOBENT_#**MSOS 4.0_^1_%STA* SET+1_L**MSOS 4.0_^1_%ENA -0_+SET BUFFER TO $FFFF_^1_%ENQ L-1_^1SET_"STA+ 0,Q_*STORE IN MIBUF IN JOBENT_+**MSOS 4.0_^1_%STA* SM1,Q_(STORE IN LOCAL BUFFER_^1_%INQ_!-1_^1_%SQM READR_^1_%JMP* SET_^1READR RTJ* JBKILL_'CHECK FOR JOB CANCEL FL€€AG SET_^1_%LDA MIBUF_(SET BUFFER ADDRESS IN CASE_^1_%STA* READLU+2_$MONITOR IS IN UPPER BANK_^1_%RTJ- ($F4)_(READ JP STATEMENT_^1REDPAR NUM $800,0_^1RDTHD ADC 0_^1READLU ADC 0,L+1,(MIBUF)_^1RD2_"LDA* RDTHD_(CHECK FOR COMPLETION OF I/O_^1_%SAZ RD1_^1_%JMP* RD2_^1RD1_"LDA* READLU_'CHECK FOR I/O ERROR_^1_%SAP RD3_*IF A READ ERROR,_^1_%ALS 4_P**MSOS 4.0_^1_%SAM RD1A_)TTY ERRO€€R_:**MSOS 4.0_^1_%ENQ 0_P**MSOS 4.0_^1_%LLS 12_O**MSOS 4.0_^1_%LDQ LOG1A,Q_%PSYTAB OF INPUT DEVICE_-**MSOS 4.0_^1_%LDA- 12,Q_)LOOK FOR EOF_7**MSOS 4.0_^1_%ALS 4_P**MSOS 4.0_^1_%SAP RD1A_M**MSOS 4.0_^1_%JMP TERMA_(EOF--TERMINATE JOB_1**MSOS 4.0_^1RD1A_!JMP RESTR_(RESTORE INPUT ON FAILURE_+**MSOS 4.0_^1_%SPC 2_Q*601_^1SM1A_!ADC (MIBUF)_'ABS ADDR. OF INPUT BUFFER IN JOBENT_^1€€_%SPC 1_^1RD3_"LDQ MIBUF_L**MSOS 4.0_^1_%EQU STABUF(*-1)_F**MSOS 4.0_^1_%JMP* SSI_*TRANSFER MIINP BUFFER_^1SMCKS ENQ L-1_^1_%LDA* (STABUF)_$ADDR. OF INPUT BUFFER IN JOBENT_#**MSOS 4.0_^1_%STA* SMCKS2+1_I**MSOS 4.0_^1_%STA* SMCKS3+1_I**MSOS 4.0_^1SMCKS1 LDA* SM1,Q_(CHANGE SPACE CODES TO $FF_^1_%EOR =A_+BLANKS_^1_%SAN SMX-*-1_^1_%LDA- HFFFF_^1_%STA* SM1,Q_^1SMCKS2 STA+ 0,Q_*B€€ACKGROUND BUFFER IN JOBENT_(**MSOS 4.0_^1_%INQ_!-1_^1_%JMP* SMCKS1_(LOOP_^1SMX_"AND- HFF_^1_%SAN SMY-*-1_^1_%LDA* SM1,Q_^1_%AND- $1A_^1_%EOR- HFF_^1_%STA* SM1,Q_(BACK GROUND LOWER HALF OF WORD IN LOCAL_^1SMCKS3 STA+ 0,Q_,BUFFER AND IN JOBENT_-**MSOS 4.0_^1SMY_"LDA* COMSW_^1_%SAZ JJOBP4-*-1_^1_%LDQ* SM1+1_L**MSOS 4.0_^1_%LDA* SM1+2_L**MSOS 4.0_^1_%LRS 8_P**MSOS 4.0_^1_%SUB* B_€€,DON'T COPY A JOB CARD_.**MSOS 4.0_^1_%SAZ JJOBP4_'JCRDV4 WILL DO IT_2**MSOS 4.0_^1_%RTJ- ($F4)_^1SMWRIT ADC $D00,0,0,$18FB,L_!COPY SM BUFFER TO LIST OUTPUT_^1_%ADC SM1-SMWRIT_^1SMW1_!LDA* SMWRIT+2_^1_%SAZ JJOBP4_^1_%JMP* SMW1_^1JJOBP4 RTJ* JBKILL_'CHECK FOR JOB CANCEL FLAG SET_^1_%JMP_!JOBP4_^1COMSW NUM_!0_^1WRITO ALF_!1,J_^1_%NUM_!$0DFF_^1_%SPC_!1_^1B_$ALF 1,B,_M**MSOS 4€€.0_^1_%EJT_]_^1* THIS SUBROUTINE CHECKS FOR JOB CANCEL FLAG SET AND, IF CLEAR, SETS_^1*_!MIB FLAG FOR JOB LOCKOUT._^1_%SPC 2_^1JBKMIB ADC 0_^1_%RTJ* JBKILL_'CHECK FOR JOB CANCEL FLAG SET_^1_%RAO MIB_*NOT SET SET MIB SWITCH_,**MSOS 4.0_^1_%EQU MIBFLG(*-1)_F**MSOS 4.0_^1_%JMP* (JBKMIB)_$RETURN TO SENDER_^1* THIS SUBROUTINE CHECKS THE JOB CANCEL FLAG. IF SET, IT EXITS TO_^1*_$€€THE DISP. TO WAIT FOR JOBKILL_^1_%SPC 2_^1JBKILL ADC 0_^1_%LDA JBCNFG_'CHECK FOR JOB KILL MODULE ACTIVE_^1_%SAZ RETURN_^1_%JMP- ($EA)_^1RETURN JMP* (JBKILL)_$NOT ACTIVE- RETURN WITH INHIBITED INTERRUPTS_^1_%SPC_!1_^1_%SPC_!1_^1* THIS ROUTINE SAVES THE JOB PROCESSOR STATEMENT_^1* DEFINE BY LOCATION SPECIFIED IN Q REGISTER._^1_%SPC_!1_^1_%EQU L(36)_L**MSOS 4.0_^1SSI_"RTJ* SSI1_)€€MOVE STATEMENT TO INTERNAL BUFFER_^1_%BSS SM1(L)_'STATEMENT BUFFER_^1_%NUM_!$FFFF_^1SSI1_!0_"0_,ABS LOCATION OF SM1 BUFFER_^1_%LDA* SSI1_^1_%STA- I_,I POINTS TO BEGINNING OF INPUT BUFFER_^1_%STQ* BUFPTR_'SET BUFPTR TO POINT TO SOURCE BUFFER_^1_%STQ INPBUF_^1_%ENQ L-1_^1LOP1_!LDA* (BUFPTR),Q_"PICK-UP FROM USERS_^1_%STA- (I),Q_(INTO LOCAL_^1_%SQZ OUT1_)IF Q ZERO - DONE_^1_%INQ -€€1_^1_%JMP* LOP1_)NEXT WORD_^1OUT1_!STQ* (MIBFLG)_$CLEAR MIB SWITCH_3**MSOS 4.0_^1_%JMP* SMCKS_(GET LOCAL BUFFER AND BUFFER IN JOBENT_^1*_8BACKGROUNDED_^1BUFPTR ADC 0_,POINTER TO USERS BUFFER_^1_%EJT_]_^1***********************************************************_^1*_$THIS AREA IS ENTERED AFTER TERM LOGIC HAS CALLED FILE **MSOS 4.0_^1*_$MODULE TO CLOSE JOB FILES FOR ABNORMAL TERM.€€_***MSOS 4.0_^1****************************************************************MSOS 4.0_^1CLSDON LDA TRANTA+10_#ERROR CODE_9**MSOS 4.0_^1_%SAP 1_,MINUS FOR *T RESPONSE TO_+**MSOS 4.0_^1_%LDA* NAME+2_'LOADER ERROR_7**MSOS 4.0_^1J_$LDQ ERRMSG_'PICK UP ADDRESS OF ERRM IN JOBENT_^1_%STQ* JSTART_'STORE IN WRITE REQ._^1_%STA- ($23),Q_%STORE CORRECT ERROR NO. IN SM IN JOBENT_^1_%INQ L€€+3_*Q POINTS TO MIPBUF+1 IN JOBENT_$**MSOS 4.0_^1*_9MIPBUF IN JOBENT_^1_%STQ- I_^1_%ENQ -L-3_M**MSOS 4.0_^1J1_#LDA- (ZERO),B_$CHECK FOR A NULL CHARACTER_)**MSOS 4.0_^1_%TCA_!A_^1_%SAZ J2A_N**MSOS 4.0_^1_%RAO* JN_O**MSOS 4.0_^1_%INQ 1_P**MSOS 4.0_^1_%SQZ J2A_N**MSOS 4.0_^1_%JMP* J1_^1_%SPC_!1_^1J2A_"RTJ* WRERR_(WRITE ERROR MESSAGE_^1_%JMP* ERRAG_^1WRERR NOP 0_^1_%RTJ- ($F4)_^1€€_%NUM $C00,$0,$0,$18FC_^1JN_#NUM_!$0000_^1JSTART ADC 0_,STARTING ADDRESS OF MIPBUF IN JOBENT_^1_%LDA* JN-2_%WAIT FOR COMPLETION_^1_%SAZ_!1_^1_%JMP* *-2_^1_%LDQ* JN-1_%CHECK FOR ERROR ON WRITTING_^1_%SQP_!1_+MESSAGE._^1_%JMP* J2A_^1_%JMP* (WRERR)_^1ERRAG LDA =N$18FB_^1_%STA* JN-1_^1_%RTJ* WRERR_^1_%RAO* JN-1_^1_%ENA 0_P**MSOS 4.0_^1_%STA* JN_+CLEAR WORD COUNT_3**MSOS 4.0_^1_€€%LDA* (IUPP)_'INPUT DEVICE_7**MSOS 4.0_^1_%STA* MLU_N**MSOS 4.0_^1_%RTJ- ($F4)_(GET THE NEXT JOB_3**MSOS 4.0_^1_%NUM $1C00,0_%SKIP TO EOF ON INPUT UNIT_***MSOS 4.0_^1TH_#NUM 0_P**MSOS 4.0_^1MLU_"NUM 0_P**MSOS 4.0_^1_%NUM $5000_L**MSOS 4.0_^1_%LDA* TH_O**MSOS 4.0_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* *-2_N**MSOS 4.0_^1_%LDQ TRNVEC_'ADDRESS OF TRANTA TABLE IN JOBENT_!**MSOS 4.0_^1_%EQ€€U TRATBL(*-1)_F**MSOS 4.0_^1_%LDA- 15,Q_M**MSOS 4.0_^1_%SAM ABOR_)NO JOB NAME_8**MSOS 4.0_^1_%STA* NAME_M**MSOS 4.0_^1_%LDA- 16,Q_M**MSOS 4.0_^1_%STA* NAME+1_K**MSOS 4.0_^1_%LDA- 17,Q_M**MSOS 4.0_^1_%STA* NAME+2_K**MSOS 4.0_^1ABOR_!ENA -0_+CLEAR JOB NAME_5**MSOS 4.0_^1_%STA- 15,Q_)CLEAR JOB NAME_5**MSOS 4.0_^1_%RTJ* ABERR_^1_%JMP* TERM1+1_^1ABERR NOP 0_^1ABORT RTJ- ($F4)_L**M€€SOS 4.0_^1_%ADC $D00,TERM1-ABORT-1,0,$18FC,8_^1_%ADC NAME-ABORT-1_E**MSOS 4.0_^1_%JMP- (DISP)_K**MSOS 4.0_^1TERM1 JMP* (ABERR)_^1_%LDA =N$18FB_^1_%STA* ABORT+4_^1_%RTJ* ABERR_^1_%RAO* ABORT+4_^1TERMA ENA 1_P**MSOS 4.0_^1_%STA- $E4_N**MSOS 4.0_^1_%ENA 0_P**MSOS 4.0_^1_%LDQ* (TRATBL)_I**MSOS 4.0_^1_%STA- 12,Q_)CLEAR JOB IN PROGRESS FLAG_)**MSOS 4.0_^1_%STA TRANTA+12_H**MSOS 4€€.0_^1_%STA TRANTA+9_$CLEAR LOADER IN CORE FLAG_^1_%LDA VINPV4_K**MSOS 4.0_^1_%SAZ TR1_N**MSOS 4.0_^1_%STA* (IUPP)_K**MSOS 4.0_^1_%JMP* RSET_M**MSOS 4.0_^1TR1_"LDA INPTV4_K**MSOS 4.0_^1_%STA* (IUPP)_K**MSOS 4.0_^1RSET_!LDA RI_O**MSOS 4.0_^1_%SAZ GETMOR_K**MSOS 4.0_^1_%SET Q_P**MSOS 4.0_^1_%ENA 0_P**MSOS 4.0_^1_%STA RI_O**MSOS 4.0_^1_%LDA RECOV_(SCHEDULE RCOVER_4**MSOS 4.0_€B^1_%STA- I_,THRU JOBENT_8**MSOS 4.0_^1_%JMP- (I)_N**MSOS 4.0_^1GETMOR JMP RF3_*GET ANOTHER JOB_4**MSOS 4.0_^1IUPP_!ADC IUP_N**MSOS 4.0_^1RESTR LDA =N$18FD_K*390_^1_%EQU COMDEV(*-1)_F**MSOS 4.0_^1_%STA* (IUPP)_^1_%JMP_!JOBP_^1SAVIT ADC 0_^1NAME_!ALF 3, JOB_K**MSOS 4.0_^1_%ALF 5, ABORTED_G**MSOS 4.0_^1_%END_]_^__BPONE CSY/ D37 P€1_%NAM ONE_*DECK-ID D37 MSOS 4.1_-SUMMARY-079_^1*_$LOCATION FILLER FOR OPTIONAL USER PROGRAM_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS MODULE IS TO BE REPLACED IF THE OPTIONAL USER SUPPLIED_^1*_$PROGRAM -ONE- IS IN THE SYSTEM_^1_%SPC 2_^1_%EN€†T ONE_*ENTRY FROM JOBPRO_^1_%EXT* JO3T_)JOBPRO ERROR EXIT_^1_%SPC 2_^1ONE_"JMP JO3T_)RETURN TO JOBPRO FOR ERROR PRINT_^1_%END_]_^__†PTWO CSY/ D38 P€1_%NAM TWO_*DECK-ID D38 MSOS 4.1_-SUMMARY-079_^1*_$LOCATION FILLER FOR OPTIONAL USER PROGRAM_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS MODULE IS TO BE REPLACED IF THE OPTIONAL USER SUPPLIED_^1*_$PROGRAM -TWO- IS IN THE SYSTEM_^1_%SPC 2_^1_%EN€†T TWO_*ENTRY FROM JOBPRO_^1_%EXT* JO3T_)JOBPRO ERROR EXIT_^1_%SPC 2_^1TWO_"JMP JO3T_)RETURN TO JOBPRO FOR ERROR PRINT_^1_%END_]_^__†PTHREE CSY/ D39 P€1_%NAM THREE_(DECK-ID D39 MSOS 4.1_-SUMMARY-079_^1*_$LOCATION FILLER FOR OPTIONAL USER PROGRAM_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$THIS MODULE IS TO BE REPLACED IF THE OPTIONAL USER SUPPLIED_^1*_$PROGRAM -THREE- IS IN THE SYSTEM_^1_%SPC 2_^1€Ž_%ENT THREE_(ENTRY FROM JOBPRO_^1_%EXT* JO3T_)JOBPRO ERROR EXIT_^1_%SPC 2_^1THREE JMP JO3T_)RETURN TO JOBPRO FOR ERROR PRINT_^1_%END_]_^__ŽPUPROTK CSY/ D40 P€1_%NAM UPROTK_'DECK-ID D40 MSOS 4.1_-SUMMARY-079_^1*_$UNBUFFERED PROTECT PROCESSOR_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%SPC 2_P**MSOS 4.0_^1_%EXT LOG1A,HA_G**MSOS 4.1**_^1_%EXT COMPV4_K**MSOS 4.0_^1_%EXT MIBUF_L**MSOS 4.0_^1_%EXT SECTOR_J*€€*MSOS 4.0_^1_%EXT LOADIN_^1_%EXT UNPIO_^1_%EXT UNPTIM_^1_%EXT TMRTYP_'TIMER TYPE IN SYSTEM_^1_%EXT SWAPCK_^1_%EXT JKIN_^1_%EXT JBCNFG_'JOB CANCEL WAIT FLAG_^1_%EXT TRNVEC_'ABS. ADDR. OF TRANTA BUFFER IN JOBENT (TRVEC)_^1_%EXT PRORET_'RETURN LOC. FOR PROTEC_!(TRVEC)_^1_%EXT COMPV4_'LIMIT CHECK, IN TRVEC_,**MSOS 4.1**_^1_%EXT FILE3_^1_%EXT IP1_^1_%EXT LOCF,LPTRS_^1_%EXT€€ PROTEC_^1_%EXT* JKILL_^1*_$PART 1 REQ. ALLOWED FROM UNPROTECTED CORE_-**MSOS 4.0_^1_%EQU CODE(19)_I**MSOS 4.0_^1_%EQU N(5)_)MAX NUMBER OF STACKED REQ._^1_%EQU SIZE(13*N-1)_E**MSOS 4.0_^1_%EQU PRLVL($EF),ZERO($22),CNOTE($2B),MASKT($B7)_^1_%EQU NZERO($12),CABS($BE),SABS($BD),NABS($BF)_^1_%EQU TOPMON($F7),BOTOP($F6),LUABS($BC)_^1_%EQU PRESET($F2),LPREST($F1),DISP($EA)_^1_%EQU€€ ONEBIT($23),ZROBIT($33),LIBLU($C2)_^1_%EQU MMATOP($C0),SIZECR($F5)_^1_%EQU H7FFF($11)_^1_%EQU COUNT($B8)_^1_%EQU LPMSK(2)_^1*_#*_%*_#*_#*_#*_#*_#*_#*_#*_#**MSOS 4.0_^1_%EQU BUFF($D0)_#SIZE OF JBKILL OVERLAY_-**MSOS 4.0_^1*_#*_%*_#*_#*_#*_#*_#*_#*_#*_#**MSOS 4.0_^1_%EQU MASLU($8C2)_^1_%EQU J01(1)_^1_%EQU J02(2)_^1_%EQU J06(6)_^1_%EQU J08(8)_^1_%SPC 4_P**MSOS 4.0_^1*_$TH€€IS VERSION WILL NOT DO CORE SWAPS_^1*_$WHILE UNPROTECTED I/O IS IN PROGRESS_^1_%SPC 3_^1_%EJT_]_^1*_(**********_)**********_)**********_^1*_]_^1PRT_"NUM $C8FE_(PICK UP PRECEEDING WORD_^1_%STA (F3)_^1_%SQP PRTER-*-1_#CHECK Q TO SEE IF JBKILL IS REQUESTED_^1_%JMP GET_*GO BRING IN JBKILL_^1PRTER JMP PRTA_^1*_]_^1*_(**********_)**********_)**********_^1*_$THIS PROGRAM OPERATES A€€T LEVEL ONE AND IS NOT_^1*_$RE-ENTRANT AS NO PROTECT VIOLATIONS OCCUR ABOVE_^1*_$LEVEL 1. IT PROCESSES ALL PROTECT VIOLATIONS_^1*_$INCLUDING ILLEGAL VIOLATIONS, UNPROTECTED_^1*_$PROTECTED COMMUNICATION AN UNPROTCTED MONITOR_^1*_$CALLS. IT DOES VALIDITY CHECKING FOR MONITOR_^1*_$CALLS WHICH NEED IT._^1_%SPC 2_^1IPROC1 STA* SAVA_)SAVE A_^1_%STQ* SAVQ_)Q_^1_%LDA- I_^1_%STA* SAVI_)I_^€€1_%LDA- PRLVL_L**MSOS 4.0_^1_%LDQ- ($E9)_(65K MODE SWITCH 65K=1_.**MSOS 4.0_^1_%SQZ K32-*-1_J**MSOS 4.0_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%SNO 1_P**MSOS 4.0_^1_%EOR- ONEBIT+15_H**MSOS 4.0_^1_%SOV 0_P**MSOS 4.0_^1K32_"STA* SAVPR_L**MSOS 4.0_^1BELOW2 LDA GETTEM_'IF NONZERO JOB IS BEING TERNIMATED **MSOS 4.0_^1_%SAZ 1_,IF JOB CANCEL FLAG NOT SET - GO ON_^1_%JMP- ($EA)_(SET - GO A€€WAY_^1_%LDA- (CNOTE)_^1_%LDQ- ($E9)_(65K MODE SWITCH 65K=1_.**MSOS 4.0_^1_%SQN 1_P**MSOS 4.0_^1_%AND- NZERO-1_%CLEAR OVERFLOW INDICATOR_^1*_8IF IT WAS A CALL TO A SYSTEM_^1_%INA -2_+MODULE, PCELL CONTAINS THE_^1_%STA* PCELL_(LOCATION OF THE MARK._^1_%LDA* (PCELL)_^1_%STA* PTR_*SAVE MARK TWICE_^1_%STA* PTRS_^1_%ENQ 1_,SET UP LEVEL 1_^1_%STQ- PRLVL_^1_%LDA- (MASKT),Q_^1_%EIN_]_^1_€€%TRA M_^1_%LDA* PCELL_L**MSOS 4.0_^1_%SUB- $F4_N**MSOS 4.0_^1_%SAZ A-*-1_(CONTAIN AN RTJ- ($F4)._^1_%JMP C_,GO CHECK FOR ENTRY TO A PRESET_^1_%SPC 3_^1_%EJT_]_^1*_$THE INTERRUPT WAS PROBABLY A MONITOR CALL._^1*_$THEREFORE_^1*_%1. PTR MUST POINT TO A PARAMETER LIST_^1*_%2. PCELL CONTENTS MUST BE THE ADDRESS OF_^1*_)MONI._^1_%SPC 2_^1A_$LDQ* PTR_+A MONITOR CA-- 0HEN_/**MSOS 4.0_€€^1_%INQ -1_/LOCATION BEFORE_1**MSOS 4.0_^1_%LDA- (ZERO),Q_'THE MARK MUST_4**MSOS 4.0_^1_%SUB REQST_(LOC. BEFORE THE MARK MUST_***MSOS 4.0_^1_%SAZ A02-*-1_%ENTRY, WE HAVE A PROTECT_^1_%JMP E_,VIOLATION_:**MSOS 4.0_^1A02_"LDQ* PTR_^1_%STQ* RETURN_'SET RETURN LOCATION_^1_%LDA- (ZERO),Q_(LIST WORD_7**MSOS 4.0_^1_%ENQ 0_,SET INDIRECT FLAG_^1_%STQ* INDIR_L**MSOS 4.0_^1_%SAP A1-*-1_'€€0 IF DIRECT_^1_%ENQ 1_,1 IF INDIRECT_^1_%EOR- NZERO+15_$CLEAR INDIRECT BIT_^1A03_"STQ* INDIR_L**MSOS 4.0_^1_%STA* PTR_*SET PTR TO PAR. LIST LOCATION_%**MSOS 4.0_^1_%LDQ- TOPMON_K**MSOS 4.0_^1_%INA -1_+MAKE SURE THAT THE INDIRECT_^1_%RTJ COMPV4_'ADDRESS IS IN UNPROTECTED CORE_$**MSOS 4.0_^1_%EQU COMP(*-1)_H**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ A1A_*IT ISN'T_;**MSOS 4.0_^1A0€€5_"LDQ- BOTOP_(SEE IF IT IS BELOW TOP OF UNPROTECTE**MSOS 4.0_^1_%LDA* PTR_N**MSOS 4.0_^1_%RTJ* (COMP)_'COMPARE ADDRESSES_2**MSOS 4.0_^1_%SAM A1_+ADDRESS WITHIN UNPROTECTED BOUNDS_!**MSOS 4.0_^1A1A_"JMP* F_,ABORT THE JOB_6**MSOS 4.0_^1A1_#LDQ* PTR_N**MSOS 4.0_^1_%LDQ- (ZERO),Q_$D AND X BITS MAY NOT BOTH BE SET_"**MSOS 4.0_^1_%LRS 9_P**MSOS 4.0_^1_%SAP A15_N**MSOS 4.0_^1_%LRS 6_€€P**MSOS 4.0_^1_%SAM A1F_N**MSOS 4.0_^1A15_"LDQ* PTR_N**MSOS 4.0_^1_%LDA- (ZERO),Q_I**MSOS 4.0_^1_%AND- NZERO+9_%UNPACK REQUEST CODE_^1A2_#ARS 9_^1_%SAM A1F-*-1_%REQUEST CODE GREATER THAN MAX_^1_%AND- NZERO-11_$MASK OFF D FIELD_3**MSOS 4.0_^1_%STA RCODE_(SAVE REQUEST CODE_^1_%TRA Q_^1_%INA -CODE_^1_%SAM A4-*-1_'ILLEGAL REQUEST SIGN = 1_^1A1F_"JMP* F_,GO GIVE J02 MESSAGE_^1A4_€€#LDQ- $E9_*ADDR OF EX. CORE TABLE_-**MSOS 4.0_^1_%LDQ- 9,Q_*ADDR OF RCTV TABLE IN MONI_)**MSOS 4.0_^1_%ADQ RCODE_(ADD INDEX TO PROCESSOR_-**MSOS 4.0_^1_%LDA- (ZERO),Q_$GET ADDR OF REQUEST RPOCESSOR_%**MSOS 4.0_^1_%SUB- NZERO-1_^1_%SAN A5-*-1_^1_%JMP* F_,NO PROCESSOR - ILLEGAL_^1A5_#LDQ RCODE_(GET INDEX TO REQTB_1**MSOS 4.0_^1_%LDA* REQTB,Q_%PICK UP DISTANCE TO ROUTINE_(**MSOS 4.€€0_^1_%AND- NZERO-5_%MASK OFF REQUEST LENGTH AND THRD IND_^1_%TRA Q_,MOVE DISTANCE TO ROUTINE TO Q_^1_%JMP* REQTB,Q_%GO CHECK LEGALITY OF PARAMETERS_^1*_8FOR THIS MONITOR CALL_^1_%SPC 3_^1_%EJT_]_^1_%SPC 3_^1*_$THIS TABLE IS INDEXED BY REQUEST CODE. IT_^1*_$CONTAINS THE LENGTH OF THE PARAMETER LIST IN THE_^1*_8*_$UPPER 4 BITS AND THE DISTANCE TO_^1*_$PROCESSORS IN BITS 0-10._^1*_€€$BIT 11=1 FOR REQUESTS WHICH ARE STACKED BUT_^1*_$NOT THREADED._^1_%SPC 2_^1REQTB ADC F-REQTB_^1_%ADC Y-REQTB+$6000 READ_01_^1_%ADC Y-REQTB+$6000 WRITE_/2_^1_%ADC BB-REQTB+$2000 STATUS_-3_-**MSOS 4.0_^1_%ADC Y-REQTB+$6000 FREAD_/4_^1_%ADC BB-REQTB+$1000 EXIT_/5_-**MSOS 4.0_^1_%ADC Y-REQTB+$6000 FWRITE_.6_^1_%ADC BB-REQTB+$1000 LOADER_-7_-**MSOS 4.0_^1_%ADC X-REQTB+$3800 €€TIMER_/8_-**MSOS 4.0_^1_%ADC X-REQTB+$2800 SCHDLE_.9_^1_%ADC F-REQTB_%SPACE_/10_^1_%ADC BB-REQTB+$1000 CORE_/11_,**MSOS 4.0_^1_%ADC F-REQTB_%RELEAS_.12_^1_%ADC (Z-REQTB+$2000) GTFILE_,13_,**MSOS 4.0_^1_%ADC W-REQTB+$5000 TAPE_014_^1_%ADC F-REQTB_;15_,**MSOS 4.0_^1_%ADC IND-REQTB+$1000 PART1 INDIR_'16_,**MSOS 4.0_^1_%ADC F-REQTB_%PARTITIONED CORE_#17_,**MSOS 4.0_^1_%ADC F-€€REQTB_%DIR. SCHDLE_)18_,**MSOS 4.0_^1_%SPC 3_^1*_$THE FOLLOWING LOCATIONS ARE USED FOR STORING_^1*_$APPLICABLE PARAMETERS UPON ENTRY TO PROTECT_^1SAVA_!NUM 0_^1SAVI_!NUM 0_^1SAVPR NUM 0_^1PTR_"NUM 0_^1PCELL NUM 0_^1PTRS_!NUM 0_^1RETURN NUM 0_^1INDIR NUM 0_^1SAVQ_!NUM 0_^1_%EJT_]_^1IND_"LDQ* PTR_*PART 1 INDIR REQ._2**MSOS 4.0_^1_%LDA- 1,Q_*PICK UP LIST POINTER_/**MSOS 4€€.0_^1_%ENQ 2_P**MSOS 4.0_^1_%JMP* A03_*RESET PTR_:**MSOS 4.0_^1BB_#LDA* RETURN_^1_%STA* PTR_^1_%SPC 3_^1*_$THIS IS THE EXIT TO A PRESET ENTRY POINT._^1_%SPC 2_^1B_$LDA* SAVPR_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%SAZ B1-*-1_^1_%JMP* B4_^1B1_#LDA* PCELL_(SAVE THE MARK_6**MSOS 4.0_^1_%STA* APCELL_K**MSOS 4.0_^1_%LDA* PTR_N**MSOS 4.0_^1_%STA* APTR_M**MSOS 4.0_^1_%RTJ* DOWN0_(GO TO LEV€€EL 0_6**MSOS 4.0_^1_%STA* ASAVA_(ALL REGISTERS ARE RESTORED_)**MSOS 4.0_^1_%LDA* APTR_M**MSOS 4.0_^1_%IIN 0_P**MSOS 4.0_^1_%STA* (APCELL)_$RESTORE THE MARK_3**MSOS 4.0_^1_%RAO* APCELL_K**MSOS 4.0_^1_%LDA* ASAVA_(RESTORE A REG._5**MSOS 4.0_^1_%JMP* (APCELL)_$JUMP TO PRESET_5**MSOS 4.0_^1B4_#LDA* SAVI_)RESTORE I_:**MSOS 4.0_^1_%STA- I_P**MSOS 4.0_^1_%SOV 0_,CLEAR OVERFLOW_5**MSOS 4€€.0_^1_%LDA* SAVPR_L**MSOS 4.0_^1_%LDQ- ($E9)_(65K_@**MSOS 4.8_^1_%SQN 1_^1_%LDA- (CNOTE)_^1_%ADD- ONEBIT+15_#RESTORE OVERFLOW_3**MSOS 4.0_^1_%LDQ* SAVQ_)RESTORE Q_:**MSOS 4.0_^1_%LDA* PTR_N**MSOS 4.0_^1_%IIN 0_P**MSOS 4.0_^1_%STA* (PCELL)_%RESTORE THE MARK_3**MSOS 4.0_^1_%RAO* PCELL_L**MSOS 4.0_^1_%LDA* SAVA_M**MSOS 4.0_^1_%JMP* (PCELL)_%JUMP TO PRESET_5**MSOS 4.0_^1DOWN0 NUM 0€€_P**MSOS 4.0_^1_%LDQ* DOWN0_(RETURN ADDREDS_5**MSOS 4.0_^1_%JMP H1B_N**MSOS 4.0_^1ASAVA NUM 0_P**MSOS 4.0_^1APTR_!NUM 0_P**MSOS 4.0_^1APCELL NUM 0_P**MSOS 4.0_^1_%SPC 3_^1_%EJT_]_^1*_$THIS ROUTINE HANDLES THE BRINGING IN_^1*_$OF THE ERROR PROCESSOR AND JBKILL_^1*_$IF Q IS POSITIVE THE CONTENTS OF Q EQUALS_^1*_*THE ERROR CODE_^1*_$IF Q IS NEGATIVE JBKILL HAS BEEN REQUESTED_^1E€€_$ENQ J01_*ENTER HERE TO GET J01 MESSAGE_^1_%JMP* F1_^1F_$ENQ J02_*ENTER HERE TO GET J02 MESSAGE_^1_%EQU F1(*)_^1_%RAO JBCNFG_'KILL THE JOB_^1*_$ENTER THE ROUTINE HERE TO PROCESS OTHER_^1*_$ERRORS WITH FORMAT J0X OR TO BRING IN JBKILL_^1GET_"STQ* GETTEM_'SAVE ERROR CODE OR JBKILL FLAG_^1_%LDA =XPRTEND-PRT FIND THE LENGTH OF PROTEC WHICH_^1_%ENQ 0_,IS READ INTO CORE INITIALLY€€_^1_%DVI =N96_)CONVERT THE LENGTH TO SECTORS_^1_%LDQ- $EB_*GET THE SECTOR WHERE PROTEC IS_^1_%ADQ* PROTEN_'LOCATED FROM THE SYSTEM DIRECTORY_^1_%INQ 6_,AND ADD THE LENGTH OF PROTEC TO IT_^1_%ADD- (ZERO),Q_$THIS VALUE IS THE ADDRESS TO READ_^1_%STA* GETLSB_'THE ERROR PROCESSOR AND JBKILL FROM_^1*_$GO AND READ THE ERROR PROCESSOR AND JBKILL_^1*_$INTO CORE. THEY WILL OVERLAY PROTEC €€STARTING_^1*_$AT 'AREA'._^1REQST RTJ- ($F4)_^1GETR_!NUM $0912_^1_%ADC GETC-GETR_^1_%NUM 0_^1_%ADC MASLU_^1_%ADC BUFF_^1_%ADC AREA-GETR_^1GETMSB NUM 0_^1GETLSB NUM 0_^1_%JMP- (DISP)_^1GETC_!SQM GETERR-*-1_"IF DISK ERROR RETRY THE READ_^1_%LDQ* GETTEM_'NO ERROR ON READ. RESTORE Q_^1_%JMP AREA_)AND JUMP TO OVERLAY_^1GETERR JMP* GETR-1_^1GETTEM NUM 0_^1PROTEN ADC PROTEC_^1€€_%EJT_]_^1*_$THIS IS A CONTROL ROUTINE USED FOR READ TYPE_^1*_$REQUESTS. IT CAUSES UNPACKING AND LEGALITY_^1*_$CHECKING OF ALL PARAMETERS._^1_%SPC 2_^1Y_$RTJ* G_,GO MOVE REQUEST TO PROTECT STACK_^1_%RTJ J_,CHECK LU, S_^1_%RTJ L_,CHECK N,S+N, READ/WRITE, ETC_^1Y2_#LDA- I_^1_%INA 1_^1_%ENQ 2_^1_%STA* (PTR),Q_%SET CALLER THREAD NON ZERO_^1_%RAO UNPIO_(SET UNPROTECTED I/O SWITCH_€€^1Y1_#JMP H_,GO MAKE THE REQUEST AGAIN_^1_%SPC 3_^1_%EJT_]_^1*_#THIS IS ENTERRED FOR SCHDLE REQUESTS AND OTHERS_^1*_#WHICH ARE STACKED BUT NOT CHECKED PAST PRIORITY_^1*_#AND COMPLETION ADDRESS._^1_%SPC 2_^1X_$RTJ* G_^1_%LDA RCODE_^1_%INA -8_+IF IT IS A TIMER REQUEST_^1_%SAZ X1-*-1_'MOVE TIMER UNITS TO STACK_^1_%JMP* X2_+AND GO TO EXIT ROUTINE._^1_%LDQ* PTR_^1X1_#LDA+ TMRTYP_'€€0 SAYS NO TIMER IN SYSTEM_^1_%SAZ TOF_*DO NOT ALLOW REQUEST_^1_%LDA- (ZERO),Q_(JUST GO TO EXIT_1**MSOS 4.0_^1_%AND- NZERO-8_%ROUTINE._^1_%AND- NZERO+4_^1_%TRA Q_P**MSOS 4.0_^1_%INQ -$31_)IS UNITS PARAMETER=0,1,2,3_$*4.0/77*1867_^1_%SQM 1_,SKIP IF LEGAL REQUEST_.**MSOS 4.0_^1TOF_"JMP* F_^1_%ADD- 1,I_^1_%STA- 1,I_^1_%JMP* TEXP_)GET ADDRESS OF TIMER EXPIRATION_^1ATEXP ADC 0_^1_%€€LDA* ATEXP_(ADDRESS OF TIMER EXP RTN_^1_%STA- 9,I_*PLACE IN TIMER STACK ENTRY_^1_%ENQ 3_,MOVE 4 INSTRUCTIONS ONTO STACK_^1X14_"LDA* TIME,Q_^1_%STA- 5,B_^1_%SQZ X15-*-1_^1_%INQ -1_^1_%JMP* X14_^1X15_"LDA- I_,SAVE SLOT LOC. IN SLOT_^1_%INA 1_,BUMP I FOR COMPLETION_^1_%STA- 4,I_^1_%INA 4_,SET TIMER COMPLETION_^1_%STA- 2,I_^1_%LDQ SAVQ_M**MSOS 4.0_^1X16_"RAO+ UNPTIM_'INCREMENT TI€€MER REQ COUNTER_^1_%JMP* Y1_+GO TO MAKE REQUEST AGAIN_^1X2_#LDA* G_,CALCULATE ABS ADDR FOR SCHDLE_%**MSOS 4.0_^1X3_#ADD =XSCHCMP-X-1_E**MSOS 4.0_^1_%STA- 2,I_*SAVE IN PROTECT STACK_^1_%LDA SAVQ_M**MSOS 4.0_^1_%STA- 3,I_*USERS PARAMETER TO SLOT_^1_%AND- NZERO-1_^1_%STA SAVQ_^1*_81 CARD DELETED_1*4.0/77*1868_^1*_81 CARD DELETED_1*4.0/77*1868_^1_%JMP* Y1_+GO MAKE THE REQUEST AGAIN_€€^1_%SPC 3_^1TIME_!LDA* *-1_*ADDRESS OF TIMER STACK ENTRY_^1_%STQ* *-3_*VALUE OF CLOCK_^1_%TRA Q_^1_%NUM $1400_(JUMP ABSOLUTE INSTR_^1TEXP_!RTJ* ATEXP_^1*_$TIMER EXPIRATION ENTERS HERE_^1TIMEXP LDA* (X16+1)_^1_%INA -1_^1_%STA* (X16+1)_^1_%SPC 3_^1*_$THIS IS ENTERRED TO EXECUTE SCHDLE AND TIMER_^1*_$TYPE REQUESTS._^1_%SPC 2_^1SCHCMP INQ -2_P61*1298_^1_%CLR A_P**MSOS 4.0_^1_%S€€TA- 13,Q_)CLEAR STACK ENTRY_2**MSOS 4.0_^1_%LDA- 1,Q_N**MSOS 4.0_^1_%STA* SCHJMP_'SET UP TO JUMP TO USER_^1_%SAN SCH-*-1_^1_%JMP- (DISP)_'THE JOB IS DEAD_^1SCH_"LDQ- 4,Q_^1_%JMP* (SCHJMP)_^1SCHJMP NUM 0_^1_%EJT_]_^1*_#THIS IS THE PROCESSOR FOR GTFILE REQUESTS._^1_%SPC 2_^1Z_$RTJ* G_,GO MOVE REQUEST TO PROTECT STACK_^1_%LDA- (ZERO),Q_$D BIT SET_:**MSOS 4.0_^1_%ALS 1_P**MSOS 4.0_€€^1_%SAP Z4_O**MSOS 4.0_^1_%LDA- 1,I_*YES GET STACKED REQUEST_,**MSOS 4.0_^1_%EOR- $31_*D BIT_>**MSOS 4.0_^1_%STA- 1,I_*RESET FOR GTFILE_3**MSOS 4.0_^1Z4_#RTJ J_,CHECK LU'S , S_5**MSOS 4.0_^1Z3_#JMP* Y2_+CONTNUE PROCESSING AS A RED TYPE_^1Z0_#JMP F_,REQUEST ERROR_^1_%SPC 1_^1_%EJT_]_^1*_#THE FOLLOWING PROCESSES TAPE MOTION CONTROL REQUESTS._^1_%SPC 1_^1W_$RTJ* G_,GO MOVE REQUES€€T TO PROTECT STACK_^1_%RTJ CHKLU_(CHECK LU_^1_%ENA 1_,SEE IF_=**MSOS 4.0_^1_%AND- 8,Q_*UNPROTECTED I/O IS ALLOWED_^1_%SAZ NEWTAP_'A=0 IF IT IS ALLOWED_^1W3A_"ENQ J08_*NO UNPROTECTED I/O ALLOWED_^1_%JMP* G24_*GO OUTPUT J08 MESSAGE_^1NEWTAP LDQ- 5,I_*CHECK IF MOTION_^1_%SQM W7_+NO_^1W6_#LDA =N$7773_%CHECK TAPE MOTION FUNCTIONS TO_^1_%SUB- 5,I_*SEE IF THEY ARE ALL LEGAL_^1_%AND €€ =N$8888_^1_%SAZ W7-*-1_'A=0 THEY ARE ALL LEGAL_^1_%JMP* Z0_+GO OUTPUT J02 MESSAGE_^1W7_#JMP* Y2_+CONTINUE AS A READ TYPE_,**MSOS 4.0_^1_%SPC 3_^1_%SPC 3_^1_%EJT_]_^1*_$THS FOLLOWING ROUTINE IS ENTERRED ONLY FOR_^1*_$REQUESTS WHOSE PARAMETER LISTS ARE MOVED TO_^1*_$PROTECTED CORE FOR EXECUTION._^1_%SPC 2_^1G_$0_"0_^1_%ENQ SIZE_^1G1_#LDA* STACK,Q_%DETERMINE IF MAXIMUM NO OF_^1_€€%SAP G15-*-1_%REQUESTS ARE STACKED_^1_%INQ -13_*A=- IF NO ROOM AVAILABLE_+**MSOS 4.0_^1_%SQM G2-*-1_'Q=- IF NO STACK SPACE AVAILABLE_^1_%JMP* G1_+GO CONTINUE CHECKING SLOTS_^1G15_"JMP* G3_+OPEN SLOT MOVE REQUEST_^1_%SPC 2_^1*_$NO SPACE - REQUEST MUST WAIT IF CALLER WAS_^1*_$AT LEVEL ZERO - IF HE WAS AT LEVEL ONE, THE_^1*_$JOB MUST BE BOMBED BECAUSE THERE IS NO_^1*_$WAY FOR AN E€€MPTY TO OCCUR IN THE STACK WHILE_^1*_$OPERATING AT LEVEL ONE._^1_%SPC 1_^1G2_#LDA SAVPR_(CHECK PRIORITY TO SEE IF 1 OR 0_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%SAZ G25-*-1_%A=0 IF PRIORITY IS ZERO_^1_%ENQ J06_*PRIORITY IS NOT ZERO GIVE J06_^1G24_"JMP F1_+MESSAGE_^1G25_"LDA- ($E9)_(IF MODE IS 65K_5**MSOS 4.0_^1_%SAZ G26_N**MSOS 4.0_^1_%CLR A_,DO NOT TRY TO SAVE OVERFLOW FROM_"**MS€€OS 4.0_^1_%SAZ 2_,INT. TRAP_:**MSOS 4.0_^1G26_"LDA- (CNOTE)_%FOR 32K SAVE OV AND UNPRO. RETURN_!**MSOS 4.0_^1_%AND- NZERO+15_$IN LOCATION 100_^1_%ADD PTRS_^1_%INA -1_^1_%STA- (CNOTE)_%RETURN TO UNPROTECTED TO MAKE THE_^1_%JMP K_,REQUEST AGAIN_^1_%SPC 1_^1_%SPC 3_^1*_$AN OPEN SLOT FOR STACKING IS AVAILABLE._^1*_$INDEX TO IT IS IN Q._^1_%SPC 2_^1G3_#RTJ* G8_+FIND WHERE WE ARE_€€^1G8_#NUM 0_^1_%INQ -12_*ADJUST Q TO GET TOP OF SLOT_(**MSOS 4.0_^1_%ADQ* G8_+PUT SLOT ADDRESS IN I_^1_%INQ STACK-G8_^1_%STQ- I_^1_%LDQ PTR_^1_%LDA- 2,Q_*GET THREAD_^1_%STA- 3,I_*CLEAR THREAD IN STACKED REQ._^1_%SAZ G4-*-1_^1_%LDQ RCODE_(THREAD CHECK NOT VALID FOR_^1_%LDA REQTB,Q_%SOME REQUESTS_^1_%AND- ONEBIT+11_^1_%LDQ PTR_^1_%SAN G4-*-1_^1_%JMP* G2_+ALREADY THREADED_^1G€€4_#LDA- 1,Q_*CHECK THE COMPLETION ADDRESS_^1_%SAZ G51-*-1_%TO SEE IF IT IS ZERO OR_^1G5_#RTJ- (CABS)_'ABSOLUTIZE COMPLETION ADDR._^1_%TRQ A_^1G51_"STA- (ZERO),I_$PUT C IN STACK_^1_%SAZ G7-*-1_'NO COMPLETION ADDRESS_^1_%LDQ- TOPMON_'CHECK THE COMPLETION ADDRESS TO_#**MSOS 4.0_^1_%INA -1_+SEE IF IT IS IN PROTECTED CORE_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%EQU EQC(*-1)_I**MSOS 4.0_^1_€€%SAZ G6_O**MSOS 4.0_^1_%INA 0_,IF IT IS REQUEST IS ILLEGAL_(**MSOS 4.0_^1_%SAZ G65_N**MSOS 4.0_^1G6_#LDA- (ZERO),I_I**MSOS 4.0_^1_%LDQ- BOTOP_L**MSOS 4.0_^1_%INA 1_^1_%RTJ* (EQC)_L**MSOS 4.0_^1_%SAZ G65_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ G7_O**MSOS 4.0_^1G65_"JMP* Z0_+GO OUTPUT J02 MESSAGE_.**MSOS 4.0_^1G7_#LDA RCODE_L**MSOS 4.0_^1_%TRA A,Q_*SAVE REQUEST CODE IN Q_^€€1_%ALS 9_,UNPACK REQUEST CODE AND_^1_%INA 2_,SET X=0, RP=0,CP=2_^1_%LDQ REQTB,Q_%CHECK FOR TIMER OR SCHEDULE CALL_^1_%LLS 16_^1_%AND- ONEBIT+11_#IF NO THREAD CHECK, IT'S TIMER OR SCH_^1_%SAZ 1_,NOT - COMPLETION AT LEVEL 2_^1_%INQ -1_+YES - COMPLETION AT LEVEL 1_^1_%STQ- 1,I_*PUT WORD 1 IN STACK_^1_%LDA* G8_+PUT COMPLETION PROCESSOR_^1_%ADD =XCCP-G8_I**MSOS 4.0_^1_%STA- 2,I_*€€COMPLETION ADDRESS_^1_%LDQ PTR_^1_%STQ- 11,I_^1_%ENQ 3_^1G9_#LDA (PTR),Q_%MOVE WORDS 4 THROUGH 10 OF_^1_%STA- 1,B_*THE REQUEST TO THE PROTECT_^1_%INQ 1_,STACK._^1_%TRQ A_^1_%INA -10_^1_%SAZ G10-*-1_^1_%JMP* G9_^1G10_"SET A_,SET THE STACK ENRRY BUSY_+**MSOS 4.0_^1_%STA- 12,I_M**MSOS 4.0_^1_%LDA- (ZERO),I_$USERS COMPLETION ADDRESS_'*4.0/77*1865_^1_%SAZ TAG2_I*4.0/77*1865_^1_€€%SUB- TOPMON_'BOTTOM OF UNPROTECTED - 1_%*4.0/77*1865_^1_%INA 1_,ADD BIAS_7*4.0/77*1865_^1_%SAP TAG1_)WITHIN LOWER LIMIT_-*4.0/77*1865_^1_%JMP E_,JP01 ERROR_5*4.0/77*1865_^1TAG1_!LDA- BOTOP_(TOP OF UNPROTECTED + 1_)*4.0/77*1865_^1_%SUB- (ZERO),I_$USERS COMPLETION ADDRESS_'*4.0/77*1865_^1_%INA -1_+REMOVE BIAS_4*4.0/77*1865_^1_%SAP TAG2_)WITHIN UPPER LIMIT_-*4.0/77*1865_^1_%JMP €€ E_,JP01 ERROR_5*4.0/77*1865_^1TAG2_!LDQ- 11,I_)REQUEST ADDRESS_0*4.0/77*1865_^1_%JMP* (G)_^1_%SPC 3_^1*_$THE FOLLOWING AREA IS THE PROTECT STACK_^1*_$UPON INITIAL EXECUTION OF PROTECT THIS AREA_^1*_$IS USED TO PLACE PARAMETERS INTO OTHER_^1*_$AREAS WHICH REQUIRE THEM. AFTER IT IS USED_^1*_$TO FIX PARAMETERS THE AREA IS CLEARED AND_^1*_$THEN BECOMES THE PROTECT STACK(TABLE)_^1*_$€€THIS TABLE IS USED TO STACK UNPROTECTED_^1*_$PARAMETER LISTS FOR EXECUTION._^1_%SPC 2_^1O2_#ADC F-PRT_^1O3_#ADC PTRS-PRT_^1O4_#ADC IPROC1-PRT_^1O5_#ADC STACK-PRT_^1O6_#ADC GET-PRT_^1F3_#ADC FILE3_^1_%EQU STACK(O2)_^1PRTA_!TRA Q_^1_%ADD* O2_^1_%STA LOCF_)POINTER TO PROTECT PROCESSOR ERROR ENTRY_^1_%TRQ A_^1_%ADD* O3_^1_%STA LPTRS_(POINTER TO PROTECT PROCESSOR'S PARAMETER€€_^1_%TRQ A_^1_%ADD* O4_^1_%STA IP1_*LOCATION TO HANDLE INTERNAL INTERRUPTS_^1_%TRQ A_^1_%ADD* O6_^1_%STA JKIN_)FLAG TO INDICATE THAT JBKILL IS IN_^1_%TRQ A_^1_%ADD* O5_^1_%LDQ TRNVEC_'LOCATION OF PROTECT STACK_^1_%STA- 11,Q_^1_%ENQ *-O2+1_^1_%ENA 0_^1PRTZRO STA* O2,Q_)ZERO OUT WHAT HAS JUST EXECUTED_^1_%INQ -1_^1_%SQZ PRTZ-*-1_^1_%JMP* PRTZRO_^1PRTZ_!LDQ PRORET_'GET ADDR€€ESS TO RETURN TO AFTER_^1_%STA* *-2_*INITIAL FLAGS ARE SET AND_^1_%STA* *-2_*ZERO MORE LOCATIONS_^1_%JMP- ($22),Q_%RETURN_^1_%EQU PRTLEN(*-O2)_^1_%EQU STLEN(13*N)_F**MSOS 4.0_^1_%BZS STX(STLEN-PRTLEN)_^1_%EJT_]_^1_%SPC 3_^1*_#THIS IS THE COMPLETION PROCESSOR FOR ALL_^1*_#STACKED REQUESTS. IT IS ENTERRED WITH THE ADDRES_^1*_#OF THE PARAMETER LIST IN A AND THE ERROR CODE_^1*_#IN €€Q._^1_%SPC 2_^1CCP_"TRA Q_,POINTER TO STACK IN Q_^1_%INQ -2_^1_%RTJ SWAPCK_'CHECK IF A SWAP IS WAITING_^1CCP0_!LDA- 12,Q_M**MSOS 4.0_^1_%STA- I_^1*_8POINTER TO USERS REQUEST NOW IN I_^1_%LDA- 5,Q_^1_%AND- NZERO+13_^1_%STA* CCTEMP_^1_%LDA- 3,I_^1_%AND- NZERO-3_^1_%ADD* CCTEMP_^1_%STA- 3,I_*MOVE V FIELD FROM STACK TO USERS REQUEST_^1*_]_^1_%LDA- 2,Q_^1_%ARS 9_^1_%AND- NZERO-11_$€€IF IT IS A GTFILE REQUEST_^1_%INA -13_^1_%SAN CCP1_^1*_]_^1_%LDA- 8,Q_L**MSOS 4.1**_^1_%STA- 6,I_*STORE W2 BACK IN CALL_,**MSOS 4.1**_^1_%LDA- 10,Q_)MOVE MASS STORAGE ADDRESS INTO_^1*_8USERS REQUEST_^1_%STA- 8,I_^1_%LDA- 11,Q_^1_%STA- 9,I_^1CCP1_!CLR A_,CLEAR THREAD IN USERS REQUEST_^1_%STA- 2,I_^1*_]_^1_%LDA- 1,Q_*CHECK FOR COMPLETION IN PROTECT STK4.0*79*1947_^1_%SAN CADRS_(I€€F NO COMPLETION ADDRESS_^1_%CLR A_P**MSOS 4.0_^1_%STA- 13,Q_)RELEASE STACK ENTRY_0**MSOS 4.0_^1_%JMP- (DISP)_^1*_]_^1CADRS RTJ- ($F4)_(SCHEDULE DOWN TO LEVEL 1_^1CAREF ADC $1301,CADRS1-CAREF_^1_%JMP- (DISP)_^1CADRS1 CLR A_,NOW AT LEVEL 1_5**MSOS 4.0_^1_%STA- 13,Q_)RELEASE STACK ENTRY_0**MSOS 4.0_^1_%LDA- 1,Q_*COMPLETION ADDRESS_1**MSOS 4.0_^1_%STA* JMP_^1*_]_^1_%LDA JBCNFG_^1€€_%SAZ 1_^1_%JMP- (DISP)_'EXIT, IF JOB WAS CANCELED._^1_%LDA- 12,Q_)ADDRESS OF USER IN A_^1_%LDQ- 5,Q_*V FIELD OF USER IN Q_^1_%JMP* (JMP)_(RETURN TO USER IN UNPROTECTED CORE AT LEVEL 1_^1*_]_^1JMP_"NUM 0_^1CCTEMP NUM 0_^1_%SPC 3_^1_%EJT_]_^1CHKLU NOP 0_^1_%LDQ- 11,I_)REQUEST ADDRESS_4**MSOS 4.0_^1_%RTJ- (LUABS)_%ABSOLUTIZE LU_^1_%SQZ LUER_)LU. ZERO_^1_%TCQ A_^1LOGTAB ADD L€€OG1A_(CHECK TO SEE IF LU LARGER THAN MAX_^1_%SAM LUER_)YES_^1_%TCQ A_,NO_^1_%INA 1_,IS THE LU=1_^1_%SAM 1_^1LUER_!JMP* LUERR_^1_%LDA- 4,I_*NO PUT THE LU IN THE PROTECT STACK_^1_%AND- ONEBIT+12_^1_%AAQ A_^1_%STA- 4,I_^1_%LDQ* (LOGTAB+1),Q GET THE PDT ADDRESS IN Q_^1_%LDA- 8,Q_^1_%ARS 4_O**MSOS 4.0_^1_%AND- LPMSK+7_%EQUIPMENT TYPE BITS_/**MSOS 4.0_^1_%INA -11_*COSY DRIVER_7**€€MSOS 4.0_^1_%SAN NOTCSY_J**MSOS 4.0_^1_%LDA- 4,Q_*COSY FLAG, -ACTIVE = NOT ZERO_#**MSOS 4.1**_^1_%SAN NOTCSY_'SO JOBKILL WILL RESET IT'S_(**MSOS 4.0_^1_%SET A_O**MSOS 4.0_^1_%STA- 4,Q_K**MSOS 4.1**_^1NOTCSY JMP* (CHKLU)_%RETURN_<**MSOS 4.0_^1LUERR JMP F_,GO OUTPUT J02 ERROR_^1_%EJT_]_^1_%EJT_]_^1H_$LDQ RCODE_^1_%LDA REQTB,Q_^1_%AND- NZERO+12_$UNPACK REQUEST LENGTH_^1_%ALS 4€€_^1_%LDQ INDIR_(IF REQUEST WAS INDIRECT, USE_^1_%SQZ H2-*-1_'1 INSTEAD OF REQ. LENGTH TO_^1_%TRQ A_,FIND RETURN ADDRESS_0**MSOS 4.0_^1H2_#ADD RETURN_^1_%STA* SQV_N**MSOS 4.0_^1_%LDQ- BOTOP_(MAKE SURE RETURN IS_0**MSOS 4.0_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%SAZ H25_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ H3_+UNPROTECTED_8**MSOS 4.0_^1H25_"LDA- BOTOP_L**MSOS 4.0_^1_%INA -2_^1_€€%STA PCELL_(RETURN IS PROTECTED THEREFORE_^1_%JMP NOEIN_(A PROTECT VIOLATION HAS OCCURED_#**MSOS 4.0_^1H3_#LDA- I_P**MSOS 4.0_^1_%INA 1_P**MSOS 4.0_^1_%TRA Q_^1_%EOR- NZERO+15_I**MSOS 4.0_^1_%STA* H1_O**MSOS 4.0_^1_%LDA RCODE_(IF THIS IS A GTFILE REQUEST_^1_%INA -13_*SUBR. Z HAS_^1_%SAZ H1-1_)SET CORRECT D BIT_^1_%LDA- (ZERO),Q_^1_%AND- ONEBIT+14_^1_%SAN H1-1_^1_%EOR- ONEBI€€T+14_#SET D BIT IF NOT SET_^1_%ADD- (ZERO),Q_^1_%STA- (ZERO),Q_^1_%RTJ- ($F4)_(INDIRECT REQUEST USING_-**MSOS 4.0_^1H1_#NUM 0_,STACKED ENTRY_6**MSOS 4.0_^1_%LDQ* SQV_N**MSOS 4.0_^1H1B_"LDA- ($E9)_L**MSOS 4.0_^1_%SAZ H4_O**MSOS 4.0_^1_%CLR A_,65K MODE--DO NOT SAVE_.**MSOS 4.0_^1_%SAZ 2_,OVERFLOW_;**MSOS 4.0_^1H4_#LDA- (CNOTE)_J**MSOS 4.0_^1_%AND- NZERO+15_$SAVE OVERFLOW BIT_^1_€€%AAQ A_^1_%STA- (CNOTE)_^1_%SPC 3_^1*_$THIS EXITS VIA WHATEVER IS IN 100 ON ENTRY_^1_%SPC 2_^1K_$LDQ SAVQ_^1_%IIN 0_^1_%STQ- (COUNT)_%SAVE Q IN INTERRUPT STACK_^1_%LDQ- COUNT_^1_%LDA SAVA_^1_%STA- 1,Q_*SAVE A IN INTERRUPT STACK_^1_%LDA SAVI_^1_%STA- 2,Q_*SAVE I IN INTERRUPT STACK_^1_%LDA SAVPR_^1_%STA- 4,Q_*SAVE PRIORITY IN INTERRUPT STACK_^1_%LDA- (CNOTE)_^1_%STA- 3,Q_*SAV€€E RETURN IN INTERRUPT STACK_^1_%INQ 5_^1_%STQ- COUNT_(RESTORE TOP OF INTERRUPT STACK_^1_%EIN 0_^1_%JMP- (DISP)_^1SQV_"NUM 0_P**MSOS 4.0_^1_%SPC 3_^1_%EJT_]_^1*_$THIS IS WHERE THE OVERLAY OF THE ERROR_^1*_$ROUTINE AND JBKILL BEGINS. ROUTINES_^1*_$WHICH ARE IN THIS AREA INITIALLY ARE_^1*_$NOT REQUIRED AFTER AN ERROR HAS OCCURRED_^1*_$OR JBKILL IS SCHEDULED._^1_%EQU AREA(*)_^1_%€€SPC 2_^1*_$WE NOW INVESTIGATE THE POSSIBILITY OF_^1*_$AN ATTEMPTED ENTRY INTO A PROTECTED PROGRAM_^1*_$WHOSE ENTRY IS A PRESET._^1_%SPC 2_^1C_$LDA PTR_^1_%LDQ- BOTOP_(IS IT BELOW MONITOR COMMON_)**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ C1_O**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ D_P**MSOS 4.0_^1C1_#JMP* TSTDIS_'NO - CHECK JMP TO DISPATCHER_'**MSOS 4.0_^1D_$LDQ- LPREST_€€'LENGTH OF PRESET TO Q_^1_%INQ -1_^1D1_#LDA- (PRESET),Q_"IS THE COMPUTED ADDRESS_^1_%SUB PCELL_(A PRESET ENTRY POINT_^1_%SAN D2-*-1_^1_%LDQ PCELL_(YES_^1_%LDA- 1,Q_*IS IT FOLLOWED BY AN IIN_^1_%SUB* AT1_^1_%SAN D3-*-1_'SKIP IF NO_^1_%JMP B_,YES, GO EXIT IT PRESET_^1D2_#INQ -4_^1_%SQM TSTDIS-*-1_"ARE WE DONE CHECKING PRESETS_^1_%JMP* D1_+NO CONTINUE CHECKING_^1D3_#JMP* NOEIN€€_(GO OUTPUT J01 ERROR_^1_%SPC 1_^1_%EJT_]_^1TSTDIS LDA PCELL_^1_%TRA Q_^1_%INA 1_,ADDR AT WHICH VIOLATION OCCURRED_^1_%SUB- DISP_)ADDRESS OF DISPATCHER_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* NOTDIS_'NOT A JUMP TO DISP_1**MSOS 4.0_^1ISDISP LDA SAVPR_(YES, WAS IT FROM LEVEL ZERO_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%SAN ATONE_L**MSOS 4.0_^1_%RTJ DOWN0_L**MSOS 4.0_^1ATONE LDQ- $E9_*ADDR €€OF EXTENDED CORE TABLE_(**MSOS 4.0_^1_%LDQ- 9,Q_*ADDR OF RCTV IN MONI_/**MSOS 4.0_^1_%LDA- 5,Q_*ADDR OF EXIT REQUEST (T5)_^1AT1_"IIN 0_^1_%STA- I_^1_%SET Q_,-0 TO Q TO INDICATE ENTRY FROM PP_^1_%JMP- (ZERO),I_$JUMP TO T5_^1NOTDIS INQ 2_,Q=LOC OF INTERRUPT +1_^1_%STQ* VIOL_^1_%STQ* SAVQ1_L**MSOS 4.0_^1_%LDA- (CNOTE)_^1_%LDQ- ($E9)_(CHECK TO SEE IF_4**MSOS 4.0_^1_%SQN TBCK_)LOC.€€ IS FROM PART1_1**MSOS 4.0_^1_%AND- H7FFF_^1TBCK_!STA* ADR+1_L**MSOS 4.0_^1_%LDQ- TOPMON_'CONTENTS OF $100 MUST_.**MSOS 4.0_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%EQU COMV(*-1)_H**MSOS 4.0_^1_%SAZ ADR_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ PROT_)BE IN UNPROTECTED_2**MSOS 4.0_^1ADR_"LDA =N$0000_J**MSOS 4.0_^1_%LDQ- BOTOP_(CORE OR ABORT_6**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SA€€Z PROT_M**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ TSOK_M**MSOS 4.0_^1PROT_!JMP* NOEIN_^1TSOK_!LDQ* SAVQ1_L**MSOS 4.0_^1_%INQ -3_+Q=ADDR OF CELL 3 LOCATIONS BACK_^1TRYEIN LDA- (ZERO),Q_$FETCH CONTENTS OF CELL TO BE TESTED_^1_%ARS 8_^1_%INA -4_+EIN=400, IIN=500, ..., INTERREG=800, EXI=E00_^1_%SAM NOTEIN-*-1_^1_%INA -5_^1_%SAM ISINT-*-1_^1_%INA -5_^1_%SAN NOTEIN-*-1_^1ISINT €€ LDQ* VIOL_^1_%STQ- (CNOTE)_%RETURN TO UNPROTECTED PROGRAM_^1_%JMP K_,THE VIOLATION IS LEGAL_-**MSOS 4.0_^1NOTEIN LDA* VIOL_)LAST ADDRESS TO TEST_^1_%TCA A_^1_%AAQ A_^1_%SAZ NOEIN-*-1_^1_%INQ 1_,TRY NEXT CELL_^1_%JMP* TRYEIN_^1NOEIN JMP E_,ERROR EXIT, PROTECT VIOLATION_^1VIOL_!ADC 0_^1_%EJT_]_^1*_#THIS ROUTINE ABSOLUTIZES LOGICAL UNIT AND_^1*_#STARTING ADDRESS WHILE DOING L€€EGALITY CHECKS_^1*_#ON THEM._^1_%SPC 2_^1J_$0_"0_^1_%RTJ CHKLU_(GO CHECK LU. RETURN WITH Q_^1_%ENA 1_,SET TO ADDRESS OF PDT_^1_%AND- 8,Q_*PROTECTED_@****_^1_%SAZ J2B-*-1_%NO--OK_C****_^1_%JMP P1_+YES--ERROR J08_^1J2B_"LDQ- 11,I_)NO,PREPARE TO ABS. PARAMETERS_%**MSOS 4.0_^1J2C_"RTJ- (SABS)_'ABSOLUTIZE S_7**MSOS 4.0_^1_%STA* LOCS_^1_%STQ- 6,I_*PUT S IN STACKED REQUEST_^1_%LDA* R€€CODE_(GET REQUEST CODE_^1_%INA -2_+IS IT WRITE_^1_%STA* WRIND_^1_%SAZ J43_*YES-RETURN_9**MSOS 4.0_^1J4_#INA -4_+IS IT FWRITE_^1_%STA* WRIND_^1J43_"SAZ J8_+YES-RETURN_9**MSOS 4.0_^1_%LDA- 6,I_N**MSOS 4.0_^1_%INA -1_+STARTING ADDRESS - 1_+*4.0/77*1868_^1_%LDQ- TOPMON_'SEE IF STARTING ADDRESS IS IN UNPROT**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ J45_N**MSOS 4.0_^1_%INA 0_P€€**MSOS 4.0_^1_%SAZ J7_+NO - ERROR_9**MSOS 4.0_^1J45_"LDA- 6,I_N**MSOS 4.0_^1_%LDQ- BOTOP_L**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ J7_O**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ J8_+YES_@**MSOS 4.0_^1J7_#JMP F_,GO OUTPUT J02 ERROR_^1J8_#JMP* (J)_*OK - RETURN_^1SAVQ1 NUM 0_P**MSOS 4.0_^1_%SPC 3_^1_%EJT_]_^1*_#THIS ROUTINE ABSOLUTIZES N AND LEGALITY CHECKS_^1*_#S+N. IT VE€€RIFIES THAT THE CALLED DEVICE CAN READ_^1*_#OR WRITE AS REQUESTED._^1_%SPC 2_^1LOCS_!NUM 0_,LOCATION OF PARAMETER LIST_^1RCODE NUM 0_,REQUEST CODE_^1WRIND NUM 0_,ZERO IF WRITE OR FWRITE_^1N96_"ADC 96_^1L_$0_"0_^1_%LDQ- 11,I_)REQUEST ADDRESS_4**MSOS 4.0_^1_%LDA- (ZERO),Q_$DBIT SET_;**MSOS 4.0_^1_%ALS 1_P**MSOS 4.0_^1_%SAP L01-*-1_%NO_A**MSOS 4.0_^1_%LDA- 4,Q_*YES--BIT 15 ON€€ N SET_/**MSOS 4.0_^1_%SAP L01-*-1_%NO_A**MSOS 4.0_^1_%JMP* J7_+YES--ERROR_9**MSOS 4.0_^1L01_"RTJ- (NABS)_'ABSOLUTIZE N AND STORE IT IN_'**MSOS 4.0_^1_%STQ- 5,I_*THE STACKED REQUEST_^1_%LDA* WRIND_^1_%SAN 1_P**MSOS 4.0_^1_%JMP* L5_+IF REQUEST IS NOT WRITE OR_)**MSOS 4.0_^1*_8EWRITE, MAKE SURE BUFFER_^1L1_#LDA- 6,I_*IS NOT IN PROTECTED CORE_^1_%INA -1_^1_%SOV L2-*-1_^1L2_#AAQ A€€_^1_%SOV L4A-*-1_^1L3_#LDQ- SIZECR_K**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ L4A_*IT IS IN PROTECTED_1**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAN L4A_*IT IS_>**MSOS 4.0_^1L4_#LDA- 6,I_N**MSOS 4.0_^1_%ADD- 5,I_*NUMBER OF WORDS_4**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%LDQ- BOTOP_L**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ L4A_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ L5_€€O**MSOS 4.0_^1L4A_"JMP* J7_+BUFFER ENDS IN PROTECTED CORE_^1L5_#LDA- 4,I_*GET LU NUMBER_^1_%AND- NZERO-6_^1_%TRA Q_^1_%LDQ LOG1A,Q_%GET PDT ADDRESS IN Q_^1_%STQ* HOLD_^1_%LDA- 8,Q_^1_%ALS 5_^1_%AND- 5_,MASK 3 BITS_^1_%INA -1_^1_%SAN L50-*-1_%SKIP IF NOT MAG TAPE_^1_%LDA- 5,I_*MAG TAPE CHECK FOR ZERO WORDS_^1_%SAN L50A-*-1_$SKIP IF NOT ZERO WORDS_^1_%JMP* J7_+ERROR 0 WORD + MA€€G TAPE_^1L50_"INA -1_+CHECK TO SEE IS MASS MEMORY_^1_%SAZ L6-*-1_'A=0 YES MASS MEMORY_^1L50A_!JMP* P_,NO_^1L6_#LDQ- 11,I_)REQUEST ADDRESS_4**MSOS 4.0_^1_%LDA- ($E9)_(IF 65K SKIP THE_^1_%SAN L6A_*INDIRECT S CHECK_^1_%LDA- 5,Q_*IF S IS INDIRECT, MOVE MASS_^1_%SAM L7-*-1_'STORAGE ADDRESS TO STACK_^1L6A_"LDA INDIR_^1_%SAN L8-*-1_^1_%RAO RETURN_'IF REQUEST AND S ARE DIRECT_^1_%RA€€O RETURN_'ADD 2 TO RETURN ADDRESS_^1_%JMP* L8_^1L7_#LDQ* LOCS_^1_%LDA- 1,Q_^1_%STA- 7,I_^1_%LDA- 2,Q_^1_%STA- 8,I_^1L8_#LDA- 8,I_*CHECK FOR MINUS SECTOR NO._^1_%SAP L85-*-1_^1L84_"JMP* J7_^1L85_"LDQ* RCODE_M61*1294_^1_%INQ -3_P61*1294_^1_%LDA- 4,I_*IF LU NOT LIB DON'T ADD SCRATCH_$61*1294_^1_%AND- LPMSK+8_%MASK OFF MODE BIT_364*1294_^1_%SUB- LIBLU_^1_%STA* LIFLAG_'ZERO IS LIB AN€€D SCRATCH ARE SAME UNIT61*1294_^1_%SAN L9A-*-1_^1L9_#LDA+ LOADIN_'IF LOADING IS IN PROGRESS,_^1_%SAZ L10-*-1_%DONT ADD SCRATCH ADDRESS._^1L9A_"ENA 0_,SCRATCH DISK_861*1294_^1_%JMP* L10A_N61*1294_^1L10_"LDA- $C1_*COMPENSATE SCRATCH SECTOR -1_(61*1294_^1_%INA -1_^1L10A_!SQM L01A_)READ/WRITE_:61*1294_^1_%JMP* L010_)HANDLE FREAD/FWRITE AT L010_^1L01A_!LDQ- 7,I_^1_%SQM L01ER_(IF M€€SB NEGATIVE - ERROR_^1_%SQN L01GO_(IF MSB POSITIVE, NOT ZERO - OK_^1_%LDQ- 8,I_^1_%INQ -96_*CHECK LSB GT SECTOR ZERO IF MSB = 0_^1_%SQP L01GO_^1L01ER JMP* L84_*ERROR EXIT_^1L01GO ENQ 0_Q61*1294_^1_%SAZ L01GOA_'SCRATCH DISK_861*1294_^1_%MUI* N96_O61*1294_^1_%LLS 1_,MAKE START OF SCRATCH LOOK LIKE DRUM ADDRESS_^1_%ALS 15_^1L01GOA ADQ- 7,I_O61*1294_^1_%ADD- 8,I_*COMBINE START€€ OF SCRATCH WITH USERS ADDRESS_^1_%SAP L010B_M61*1294_^1_%INQ 1_^1_%AND- NZERO-1_%REMOVE SIGN IN LSB IF SET_^1L010B SQP 1_^1_%JMP* LER_^1_%STQ- 7,I_*STORE COMPENSATED MSB_^1_%STA- 8,I_*LSB_>**MSOS 4.1**_^1PCK1_!ALS 1_^1_%LRS 1_,COMBINE DRUM ADDRESS_^1_%DVI* N96_*CONVERT TO SECTOR ADDRESS_^1_%JMP* GOODAD_'GOOD ADDRESS_5**MSOS 4.1**_^1L010_!LDQ- 7,I_*THIS SECTION CHECKS FWRITE/€€FREAD_^1_%SQN LER_*MSB HAS TO BE ZERO_^1_%LDQ- 8,I_^1_%SQZ LER_*LSB CAN'T BE ZERO_^1_%ADD- 8,I_*COMBINE LSB AND SCRATCH START_^1_%CLR Q_^1_%SAP L11_*POSITIVE OK - STORE IT_^1_%ENQ 1_N**MSOS 4.1**_^1_%AND- LPMSK+15_$MASK $7FFF_^1_%JMP* L11_L**MSOS 4.1**_^1LER_"JMP* L84_*ERROR EXIT_^1L11_"STA- 8,I_*STORE INTO PARAMETER LIST_^1_%STQ- 7,I_*MAKE_=**MSOS 4.1**_^1_%ALS 1_,SINGLE_;**€€MSOS 4.1**_^1_%LRS 1_,PRECISION_8**MSOS 4.1**_^1_%JMP* PCK3_K**MSOS 4.1**_^1*_81 CARD DELETED_661*1294_^1GOODAD SQN PCK3_M**MSOS 4.0_^1PCK2_!INA -1_+ADJUST LSB FOR LATER CHECK_^1PCK3_!LDQ* LIFLAG_'IF LIBRARY UNIT MAKE SURE_+61*1294_^1_%SQN P_,ADDRESS NOT BEYOND MAXSEC_+61*1294_^1_%LDQ =XSECTOR_$GET MAX SECTOR_3**MSOS 4.1**_^1_%RTJ+ COMPV4_'COMPARE MAGNITUDE_0**MSOS 4.1**_^1_%S€€AZ P_,EQUAL SECTOR_5**MSOS 4.1**_^1_%INA 0_,CHECK -0_9**MSOS 4.1**_^1_%SAZ P_,LESS THAN SECTOR_1**MSOS 4.1**_^1_%JMP* L84_*ADDRESS BEYOND MAXSEC - ERROR_^1P_$LDQ WRIND_(****_?**MSOS 4.0_^1_%ENA 4_,****_^1_%SQZ P01_*IS I/O REQUEST BY UNPROTECTED_^1_%ENA 2_,PROGRAM ALLOWED ON THIS_2****_^1P01_"LDQ* HOLD_)DEVICE_^1_%AND- 8,Q_*****_^1_%SAN P2-*-1_'YES--OK_B****_^1P1_#JMP W3A_*€€NO- GO OUTPUT J08_^1P2_#JMP (L)_*RETURN TO CALLING ROUTINE_^1HOLD_!NUM 0_,HOLDS DEVICE PHYSTB ADDRESS_^1LIFLAG NUM 0_Q61*1294_^1_%EQU LSA01(*/96)_^1_%EQU LSU01(LSA01+1)_^1_%EQU LTL01(LSU01*96)_^1_%BSS (LTL01-*)_^1_%EQU PRTEND(*)_^1_%EJT_]_^1**********************************************************************_^1_%SPC 3_^1_%EQU ERREL(*-AREA)_^1****************************€€******************************************_^1_%SPC 5_^1*_$THE PROTECT VIOLATION IS ILLEGAL._^1_%SPC 2_^1GETGO ENA 0_^1_%STA GETTEM+ERREL_E**MSOS 4.0_^1_%SQP ERR_*Q=+ IF ERROR EMESSAGE_^1_%JMP JKILL_(Q=- JBKILL WAS REQUESTED_^1ERR_"RTJ- ($F4)_(SCHEDUE DOWN TO LEVEL 1_^1ERRSCH ADC $1301_^1_%ADC ERRA-ERRSCH_^1_%JMP- (DISP)_^1ERRA_!TRQ A_P**MSOS 4.0_^1_%ADD =N$3030_%FORM THE€€ ERROR CODE_0**MSOS 4.0_^1_%INQ -1_+CHECK IF PROTECT VIOLATION_^1_%SQN E0-*-1_'SKIP IF NOT PROTECT VIOLATION_^1_%LDQ PCELL+ERREL_!PROTECT VIOLATION MOVE ADDRESS_$**MSOS 4.0_^1_%INQ 2_,TO BR CONVERTED TO ASCCI_+**MSOS 4.0_^1_%STQ PTRS+ERREL_H**MSOS 4.0_^1E0_#LDQ TRNVEC_K**MSOS 4.0_^1_%STA- 10,Q_)SAVE ERROR CODE IN TRANTA TABLE_#**MSOS 4.0_^1*_$THE FOLLOWING ROUTINE CONVERTS THE€€ ADDRESS_^1*_$OF THE VIOLATION FROM HEXIDECIMAL TO ASCII_^1*_$AND PUTS IT IN THE MESSAGE BUFFER_^1E1_#LDQ+ MIBUF_J**MSOS 4.1**_^1_%STQ- I_P**MSOS 4.0_^1_%ENQ 3_,CLEAR OUT ERROR BUFFER SO JOBPRO_"**MSOS 4.0_^1_%ENA -0_+DOESN'T PTINT MORE THAN THE ERROR_!**MSOS 4.0_^1E1A_"STA- (ZERO),B_$MESSAGE_<**MSOS 4.0_^1_%INQ -1_O**MSOS 4.0_^1_%SQM E1B_N**MSOS 4.0_^1_%JMP* E1A_N**MSOS 4.0_^1€nE1B_"LDA PTRS+ERREL_G**MSOS 4.0_^1_%LDQ+ MIBUF_(GET ADDRESS OF MESSAGE BUFFER_#**MSOS 4.1**_^1_%STQ- I_,SAVE FOR INDEXING_0**MSOS 4.1**_^1_%RTJ+ HA_+CONVERT ADDRESS TO ASCII_)**MSOS 4.1**_^1_%STQ- (ZERO),I_$STORE UPPER TWO CHAR_-**MSOS 4.1**_^1_%STA- 1,I_*STORE LOWER TWO CHAR_-**MSOS 4.1**_^1_%SET Q_,ABNORMAL TERMINATE_/**MSOS 4.1**_^1_%JMP JKILL_^1_%END_]_^__nPBPROTK CSY/ D41 P€1_%NAM BPROTK_'DECK-ID D41 MSOS 4.1_-SUMMARY-079_^1*_$BUFFERED PROTECT PROCESSOR_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%SPC 2_P**MSOS 4.0_^1_%EXT LOG1A,HA_^1_%EXT COMPV4_K**MSOS 4.0_^1_%EXT MIBUF_L**MSOS 4.0_^1_%EXT SECTOR_J**MSOS 4.0_^1_%EX€€T LOADIN_^1_%EXT UNPIO_^1_%EXT UNPTIM_^1_%EXT TMRTYP_'TIMER TYPE IN SYSTEM_^1_%EXT SWAPCK_^1_%EXT JKIN_^1_%EXT JBCNFG_'JOB CANCEL WAIT FLAG_^1_%EXT TRNVEC_'ABS. ADDR. OF TRANTA BUFFER IN JOBENT (TRVEC)_^1_%EXT PRORET_'RETURN LOC. FOR PROTEC_!(TRVEC)_^1_%EXT COMPV4_'LIMIT CHECK, IN TRVEC_,**MSOS 4.1**_^1_%EXT FILE3_^1_%EXT IP1_^1_%EXT LOCF,LPTRS_^1_%EXT PROTEC_^1_%EXT€€* JKILL_^1*_$PART 1 REQ. ALLOWED FROM UNPROTECTED CORE_-**MSOS 4.0_^1_%EQU CODE(19)_I**MSOS 4.0_^1_%EQU N(5)_)MAX NUMBER OF STACKED REQ._^1_%EQU SIZE(13*N-1)_E**MSOS 4.0_^1_%EQU PRLVL($EF),ZERO($22),CNOTE($2B),MASKT($B7)_^1_%EQU NZERO($12),CABS($BE),SABS($BD),NABS($BF)_^1_%EQU TOPMON($F7),BOTOP($F6),LUABS($BC)_^1_%EQU PRESET($F2),LPREST($F1),DISP($EA)_^1_%EQU ONEBIT($23),ZR€€OBIT($33),LIBLU($C2)_^1_%EQU MMATOP($C0),SIZECR($F5)_^1_%EQU H7FFF($11)_^1_%EQU COUNT($B8)_^1_%EQU LPMSK(2)_^1*_#*_%*_#*_#*_#*_#*_#*_#*_#*_#**MSOS 4.0_^1_%EQU BUFF($D0)_#SIZE OF JBKILL OVERLAY_-**MSOS 4.0_^1*_#*_%*_#*_#*_#*_#*_#*_#*_#*_#**MSOS 4.0_^1_%EQU MASLU($8C2)_^1_%EQU J01(1)_^1_%EQU J02(2)_^1_%EQU J06(6)_^1_%EQU J08(8)_^1_%SPC 4_P**MSOS 4.0_^1*********************€€*******************************************MSOS 4.0_^1_%SPC 1_P**MSOS 4.0_^1*_$THIS VERSION WILL DO CORE SWAPS WHILE BUFFERED_^1*_$I/O IS IN PROGRESS UNDER THE FOLLOWING RULES_^1*_$BUFSIZ IS THE MAXIMUN BUFFERED TRANSFERS THAT WILL_#**MSOS 4.0_^1*_$BE ATTEMPTED_J**MSOS 4.0_^1*_$BUFFERED DATA TRANSFERS WILL BE ATTEMPTED IF..._'**MSOS 4.0_^1*_$1._!THE DEVICE IS NOT A MASS STORAGE TY€€PE(EQUIPMENT CL**MSOS 4.0_^1*_$2._!THE TRANSFER IS LESS THAN OR EQUAL TO BUFSIZ_$**MSOS 4.0_^1*_$3._!THERE ARE NO BUFFERED TRANSFERS IN PROGRESS---_"**MSOS 4.0_^1*_*IF THERE ARE THE I/O WILL BE PROCESSED UNBUFFERED **MSOS 4.0_^1_%SPC 2_P**MSOS 4.0_^1****************************************************************MSOS 4.0_^1_%SPC 2_P**MSOS 4.0_^1_%EXT UNPIOF_'BUFFERED I-O FLAG_2*€€*MSOS 4.0_^1_%EXT SWAPON_K**MSOS 4.0_^1_%EQU BUFSIZ(96)_G**MSOS 4.0_^1_%SPC 3_^1_%EJT_]_^1*_(**********_)**********_)**********_^1*_]_^1PRT_"NUM $C8FE_(PICK UP PRECEEDING WORD_^1_%STA (F3)_^1_%SQP PRTER-*-1_#CHECK Q TO SEE IF JBKILL IS REQUESTED_^1_%JMP GET_*GO BRING IN JBKILL_^1PRTER JMP PRTA_^1*_]_^1*_(**********_)**********_)**********_^1*_$THIS PROGRAM OPERATES AT LEVE€€L ONE AND IS NOT_^1*_$RE-ENTRANT AS NO PROTECT VIOLATIONS OCCUR ABOVE_^1*_$LEVEL 1. IT PROCESSES ALL PROTECT VIOLATIONS_^1*_$INCLUDING ILLEGAL VIOLATIONS, UNPROTECTED_^1*_$PROTECTED COMMUNICATION AN UNPROTCTED MONITOR_^1*_$CALLS. IT DOES VALIDITY CHECKING FOR MONITOR_^1*_$CALLS WHICH NEED IT._^1_%SPC 2_^1IPROC1 STA* SAVA_)SAVE A_^1_%STQ* SAVQ_)Q_^1_%LDA- I_^1_%STA* SAVI_)I_^1_%LDA€€- PRLVL_L**MSOS 4.0_^1_%LDQ- ($E9)_(65K MODE SWITCH 65K=1_.**MSOS 4.0_^1_%SQZ K32-*-1_J**MSOS 4.0_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%SNO 1_P**MSOS 4.0_^1_%EOR- ONEBIT+15_H**MSOS 4.0_^1_%SOV 0_P**MSOS 4.0_^1K32_"STA* SAVPR_L**MSOS 4.0_^1BELOW2 LDA GETTEM_'IF NONZERO JOB IS BEING TERNIMATED **MSOS 4.0_^1_%SAZ 1_,IF JOB CANCEL FLAG NOT SET - GO ON_^1_%JMP- ($EA)_(SET - GO AWAY_^1€€_%LDA- (CNOTE)_^1_%LDQ- ($E9)_(65K MODE SWITCH 65K=1_.**MSOS 4.0_^1_%SQN 1_P**MSOS 4.0_^1_%AND- NZERO-1_%CLEAR OVERFLOW INDICATOR_^1*_8IF IT WAS A CALL TO A SYSTEM_^1_%INA -2_+MODULE, PCELL CONTAINS THE_^1_%STA* PCELL_(LOCATION OF THE MARK._^1_%LDA* (PCELL)_^1_%STA* PTR_*SAVE MARK TWICE_^1_%STA* PTRS_^1_%ENQ 1_,SET UP LEVEL 1_^1_%STQ- PRLVL_^1_%LDA- (MASKT),Q_^1_%EIN_]_^1_%TRA €€M_^1_%LDA* PCELL_L**MSOS 4.0_^1_%SUB- $F4_N**MSOS 4.0_^1_%SAZ A-*-1_(CONTAIN AN RTJ- ($F4)._^1_%JMP C_,GO CHECK FOR ENTRY TO A PRESET_^1_%SPC 3_^1_%EJT_]_^1*_$THE INTERRUPT WAS PROBABLY A MONITOR CALL._^1*_$THEREFORE_^1*_%1. PTR MUST POINT TO A PARAMETER LIST_^1*_%2. PCELL CONTENTS MUST BE THE ADDRESS OF_^1*_)MONI._^1_%SPC 2_^1A_$LDQ* PTR_+A MONITOR CA-- 0HEN_/**MSOS 4.0_^1_%IN€€Q -1_/LOCATION BEFORE_1**MSOS 4.0_^1_%LDA- (ZERO),Q_'THE MARK MUST_4**MSOS 4.0_^1_%SUB REQST_(LOC. BEFORE THE MARK MUST_***MSOS 4.0_^1_%SAZ A02-*-1_%ENTRY, WE HAVE A PROTECT_^1_%JMP E_,VIOLATION_:**MSOS 4.0_^1A02_"LDQ* PTR_^1_%STQ* RETURN_'SET RETURN LOCATION_^1_%LDA- (ZERO),Q_(LIST WORD_7**MSOS 4.0_^1_%ENQ 0_,SET INDIRECT FLAG_^1_%STQ* INDIR_L**MSOS 4.0_^1_%SAP A1-*-1_'0 IF D€€IRECT_^1_%ENQ 1_,1 IF INDIRECT_^1_%EOR- NZERO+15_$CLEAR INDIRECT BIT_^1A03_"STQ* INDIR_L**MSOS 4.0_^1_%STA* PTR_*SET PTR TO PAR. LIST LOCATION_%**MSOS 4.0_^1_%LDQ- TOPMON_K**MSOS 4.0_^1_%INA -1_+MAKE SURE THAT THE INDIRECT_^1_%RTJ COMPV4_'ADDRESS IS IN UNPROTECTED CORE_$**MSOS 4.0_^1_%EQU COMP(*-1)_H**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ A1A_*IT ISN'T_;**MSOS 4.0_^1A05_"LDQ€€- BOTOP_(SEE IF IT IS BELOW TOP OF UNPROTECTE**MSOS 4.0_^1_%LDA* PTR_N**MSOS 4.0_^1_%RTJ* (COMP)_'COMPARE ADDRESSES_2**MSOS 4.0_^1_%SAM A1_+ADDRESS WITHIN UNPROTECTED BOUNDS_!**MSOS 4.0_^1A1A_"JMP* F_,ABORT THE JOB_6**MSOS 4.0_^1A1_#LDQ* PTR_N**MSOS 4.0_^1_%LDQ- (ZERO),Q_$D AND X BITS MAY NOT BOTH BE SET_"**MSOS 4.0_^1_%LRS 9_P**MSOS 4.0_^1_%SAP A15_N**MSOS 4.0_^1_%LRS 6_P**MSO€€S 4.0_^1_%SAM A1F_N**MSOS 4.0_^1A15_"LDQ* PTR_N**MSOS 4.0_^1_%LDA- (ZERO),Q_I**MSOS 4.0_^1_%AND- NZERO+9_%UNPACK REQUEST CODE_^1A2_#ARS 9_^1_%SAM A1F-*-1_%REQUEST CODE GREATER THAN MAX_^1_%AND- NZERO-11_$MASK OFF D FIELD_3**MSOS 4.0_^1_%STA RCODE_(SAVE REQUEST CODE_^1_%TRA Q_^1_%INA -CODE_^1_%SAM A4-*-1_'ILLEGAL REQUEST SIGN = 1_^1A1F_"JMP* F_,GO GIVE J02 MESSAGE_^1A4_#LDQ- €€$E9_*ADDR OF EX. CORE TABLE_-**MSOS 4.0_^1_%LDQ- 9,Q_*ADDR OF RCTV TABLE IN MONI_)**MSOS 4.0_^1_%ADQ RCODE_(ADD INDEX TO PROCESSOR_-**MSOS 4.0_^1_%LDA- (ZERO),Q_$GET ADDR OF REQUEST RPOCESSOR_%**MSOS 4.0_^1_%SUB- NZERO-1_^1_%SAN A5-*-1_^1_%JMP* F_,NO PROCESSOR - ILLEGAL_^1A5_#LDQ RCODE_(GET INDEX TO REQTB_1**MSOS 4.0_^1_%LDA* REQTB,Q_%PICK UP DISTANCE TO ROUTINE_(**MSOS 4.0_^1_%€€AND- NZERO-5_%MASK OFF REQUEST LENGTH AND THRD IND_^1_%TRA Q_,MOVE DISTANCE TO ROUTINE TO Q_^1_%JMP* REQTB,Q_%GO CHECK LEGALITY OF PARAMETERS_^1*_8FOR THIS MONITOR CALL_^1_%SPC 3_^1_%EJT_]_^1_%SPC 3_^1*_$THIS TABLE IS INDEXED BY REQUEST CODE. IT_^1*_$CONTAINS THE LENGTH OF THE PARAMETER LIST IN THE_^1*_8*_$UPPER 4 BITS AND THE DISTANCE TO_^1*_$PROCESSORS IN BITS 0-10._^1*_$BIT 1€€1=1 FOR REQUESTS WHICH ARE STACKED BUT_^1*_$NOT THREADED._^1_%SPC 2_^1REQTB ADC F-REQTB_^1_%ADC Y-REQTB+$6000 READ_01_^1_%ADC Y-REQTB+$6000 WRITE_/2_^1_%ADC BB-REQTB+$2000 STATUS_-3_-**MSOS 4.0_^1_%ADC Y-REQTB+$6000 FREAD_/4_^1_%ADC BB-REQTB+$1000 EXIT_/5_-**MSOS 4.0_^1_%ADC Y-REQTB+$6000 FWRITE_.6_^1_%ADC BB-REQTB+$1000 LOADER_-7_-**MSOS 4.0_^1_%ADC X-REQTB+$3800 TIMER_€€/8_-**MSOS 4.0_^1_%ADC X-REQTB+$2800 SCHDLE_.9_^1_%ADC F-REQTB_%SPACE_/10_^1_%ADC BB-REQTB+$1000 CORE_/11_,**MSOS 4.0_^1_%ADC F-REQTB_%RELEAS_.12_^1_%ADC (Z-REQTB+$2000) GTFILE_,13_,**MSOS 4.0_^1_%ADC W-REQTB+$5000 TAPE_014_^1_%ADC F-REQTB_;15_,**MSOS 4.0_^1_%ADC IND-REQTB+$1000 PART1 INDIR_'16_,**MSOS 4.0_^1_%ADC F-REQTB_%PARTITIONED CORE_#17_,**MSOS 4.0_^1_%ADC F-REQTB_€€%DIR. SCHDLE_)18_,**MSOS 4.0_^1_%SPC 3_^1*_$THE FOLLOWING LOCATIONS ARE USED FOR STORING_^1*_$APPLICABLE PARAMETERS UPON ENTRY TO PROTECT_^1SAVA_!NUM 0_^1SAVI_!NUM 0_^1SAVPR NUM 0_^1PTR_"NUM 0_^1PCELL NUM 0_^1PTRS_!NUM 0_^1RETURN NUM 0_^1INDIR NUM 0_^1SAVQ_!NUM 0_^1_%EJT_]_^1IND_"LDQ* PTR_*PART 1 INDIR REQ._2**MSOS 4.0_^1_%LDA- 1,Q_*PICK UP LIST POINTER_/**MSOS 4.0_^1_€€%ENQ 2_P**MSOS 4.0_^1_%JMP* A03_*RESET PTR_:**MSOS 4.0_^1BB_#LDA* RETURN_^1_%STA* PTR_^1_%SPC 3_^1*_$THIS IS THE EXIT TO A PRESET ENTRY POINT._^1_%SPC 2_^1B_$LDA* SAVPR_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%SAZ B1-*-1_^1_%JMP* B4_^1B1_#LDA* PCELL_(SAVE THE MARK_6**MSOS 4.0_^1_%STA* APCELL_K**MSOS 4.0_^1_%LDA* PTR_N**MSOS 4.0_^1_%STA* APTR_M**MSOS 4.0_^1_%RTJ* DOWN0_(GO TO LEVEL 0_6€€**MSOS 4.0_^1_%STA* ASAVA_(ALL REGISTERS ARE RESTORED_)**MSOS 4.0_^1_%LDA* APTR_M**MSOS 4.0_^1_%IIN 0_P**MSOS 4.0_^1_%STA* (APCELL)_$RESTORE THE MARK_3**MSOS 4.0_^1_%RAO* APCELL_K**MSOS 4.0_^1_%LDA* ASAVA_(RESTORE A REG._5**MSOS 4.0_^1_%JMP* (APCELL)_$JUMP TO PRESET_5**MSOS 4.0_^1B4_#LDA* SAVI_)RESTORE I_:**MSOS 4.0_^1_%STA- I_P**MSOS 4.0_^1_%SOV 0_,CLEAR OVERFLOW_5**MSOS 4.0_^1_€€%LDA* SAVPR_L**MSOS 4.0_^1_%LDQ- ($E9)_(65K_@**MSOS 4.8_^1_%SQN 1_^1_%LDA- (CNOTE)_^1_%ADD- ONEBIT+15_#RESTORE OVERFLOW_3**MSOS 4.0_^1_%LDQ* SAVQ_)RESTORE Q_:**MSOS 4.0_^1_%LDA* PTR_N**MSOS 4.0_^1_%IIN 0_P**MSOS 4.0_^1_%STA* (PCELL)_%RESTORE THE MARK_3**MSOS 4.0_^1_%RAO* PCELL_L**MSOS 4.0_^1_%LDA* SAVA_M**MSOS 4.0_^1_%JMP* (PCELL)_%JUMP TO PRESET_5**MSOS 4.0_^1DOWN0 NUM 0_P**MS€€OS 4.0_^1_%LDQ* DOWN0_(RETURN ADDREDS_5**MSOS 4.0_^1_%JMP H1B_N**MSOS 4.0_^1ASAVA NUM 0_P**MSOS 4.0_^1APTR_!NUM 0_P**MSOS 4.0_^1APCELL NUM 0_P**MSOS 4.0_^1_%SPC 3_^1_%EJT_]_^1*_$THIS ROUTINE HANDLES THE BRINGING IN_^1*_$OF THE ERROR PROCESSOR AND JBKILL_^1*_$IF Q IS POSITIVE THE CONTENTS OF Q EQUALS_^1*_*THE ERROR CODE_^1*_$IF Q IS NEGATIVE JBKILL HAS BEEN REQUESTED_^1E_$ENQ €€ J01_*ENTER HERE TO GET J01 MESSAGE_^1_%JMP* F1_^1F_$ENQ J02_*ENTER HERE TO GET J02 MESSAGE_^1_%EQU F1(*)_^1_%RAO JBCNFG_'KILL THE JOB_^1*_$ENTER THE ROUTINE HERE TO PROCESS OTHER_^1*_$ERRORS WITH FORMAT J0X OR TO BRING IN JBKILL_^1GET_"STQ* GETTEM_'SAVE ERROR CODE OR JBKILL FLAG_^1_%LDA =XPRTEND-PRT FIND THE LENGTH OF PROTEC WHICH_^1_%ENQ 0_,IS READ INTO CORE INITIALLY_^1_%D€€VI =N96_)CONVERT THE LENGTH TO SECTORS_^1_%LDQ- $EB_*GET THE SECTOR WHERE PROTEC IS_^1_%ADQ* PROTEN_'LOCATED FROM THE SYSTEM DIRECTORY_^1_%INQ 6_,AND ADD THE LENGTH OF PROTEC TO IT_^1_%ADD- (ZERO),Q_$THIS VALUE IS THE ADDRESS TO READ_^1_%STA* GETLSB_'THE ERROR PROCESSOR AND JBKILL FROM_^1*_$GO AND READ THE ERROR PROCESSOR AND JBKILL_^1*_$INTO CORE. THEY WILL OVERLAY PROTEC STARTI€€NG_^1*_$AT 'AREA'._^1REQST RTJ- ($F4)_^1GETR_!NUM $0912_^1_%ADC GETC-GETR_^1_%NUM 0_^1_%ADC MASLU_^1_%ADC BUFF_^1_%ADC AREA-GETR_^1GETMSB NUM 0_^1GETLSB NUM 0_^1_%JMP- (DISP)_^1GETC_!SQM GETERR-*-1_"IF DISK ERROR RETRY THE READ_^1_%LDQ* GETTEM_'NO ERROR ON READ. RESTORE Q_^1_%JMP AREA_)AND JUMP TO OVERLAY_^1GETERR JMP* GETR-1_^1GETTEM NUM 0_^1PROTEN ADC PROTEC_^1_%EJT_€€]_^1*_$THIS IS A CONTROL ROUTINE USED FOR READ TYPE_^1*_$REQUESTS. IT CAUSES UNPACKING AND LEGALITY_^1*_$CHECKING OF ALL PARAMETERS._^1_%SPC 2_^1Y_$RTJ* G_,GO MOVE REQUEST TO PROTECT STACK_^1_%RTJ J_,CHECK LU, S_^1_%RTJ L_,CHECK N,S+N, READ/WRITE, ETC_^1Y2_#RTJ M_,MOVE THE BUFFER TO THE FOREGROUND_!**MSOS 4.0_^1_%SQN Y3_+ALLOW A SWAP TO OCCUR_.**MSOS 4.0_^1_%RAO UNPIO_L**MSOS€€ 4.0_^1_%JMP* Y4_O**MSOS 4.0_^1Y3_#RAO UNPIOF_'TELL T5 THAT I/O IS GOING ON._%**MSOS 4.0_^1Y4_#LDA- I_P**MSOS 4.0_^1_%INA 1_P**MSOS 4.0_^1_%ENQ 2_P**MSOS 4.0_^1_%STA (PTR),Q_%SET CALLER THREAD NON-ZERO_)**MSOS 4.0_^1Y1_#JMP H_,GO MAKE THE REQUEST AGAIN_^1_%SPC 3_^1_%EJT_]_^1*_#THIS IS ENTERRED FOR SCHDLE REQUESTS AND OTHERS_^1*_#WHICH ARE STACKED BUT NOT CHECKED PAST PRIORITY€€_^1*_#AND COMPLETION ADDRESS._^1_%SPC 2_^1X_$RTJ* G_^1_%LDA RCODE_^1_%INA -8_+IF IT IS A TIMER REQUEST_^1_%SAZ X1-*-1_'MOVE TIMER UNITS TO STACK_^1_%JMP* X2_+AND GO TO EXIT ROUTINE._^1_%LDQ* PTR_^1X1_#LDA+ TMRTYP_'0 SAYS NO TIMER IN SYSTEM_^1_%SAZ TOF_*DO NOT ALLOW REQUEST_^1_%LDA- (ZERO),Q_(JUST GO TO EXIT_1**MSOS 4.0_^1_%AND- NZERO-8_%ROUTINE._^1_%AND- NZERO+4_^1_%TRA Q_P**€€MSOS 4.0_^1_%INQ -$31_)IS UNITS PARAMETER=0,1,2,3_$*4.0/77*1867_^1_%SQM 1_,SKIP IF LEGAL REQUEST_.**MSOS 4.0_^1TOF_"JMP* F_^1_%ADD- 1,I_^1_%STA- 1,I_^1_%JMP* TEXP_)GET ADDRESS OF TIMER EXPIRATION_^1ATEXP ADC 0_^1_%LDA* ATEXP_(ADDRESS OF TIMER EXP RTN_^1_%STA- 9,I_*PLACE IN TIMER STACK ENTRY_^1_%ENQ 3_,MOVE 4 INSTRUCTIONS ONTO STACK_^1X14_"LDA* TIME,Q_^1_%STA- 5,B_^1_%SQZ X15-€€*-1_^1_%INQ -1_^1_%JMP* X14_^1X15_"LDA- I_,SAVE SLOT LOC. IN SLOT_^1_%INA 1_,BUMP I FOR COMPLETION_^1_%STA- 4,I_^1_%INA 4_,SET TIMER COMPLETION_^1_%STA- 2,I_^1_%LDQ SAVQ_M**MSOS 4.0_^1X16_"RAO+ UNPTIM_'INCREMENT TIMER REQ COUNTER_^1_%JMP* Y1_+GO TO MAKE REQUEST AGAIN_^1X2_#LDA* G_,CALCULATE ABS ADDR FOR SCHDLE_%**MSOS 4.0_^1X3_#ADD =XSCHCMP-X-1_E**MSOS 4.0_^1_%STA- 2,I_*SAVE I€€N PROTECT STACK_^1_%LDA SAVQ_M**MSOS 4.0_^1_%STA- 3,I_*USERS PARAMETER TO SLOT_^1_%AND- NZERO-1_^1_%STA SAVQ_^1*_81 CARD DELETED_1*4.0/77*1866_^1_%JMP* Y1_+GO MAKE THE REQUEST AGAIN_^1_%SPC 3_^1TIME_!LDA* *-1_*ADDRESS OF TIMER STACK ENTRY_^1_%STQ* *-3_*VALUE OF CLOCK_^1_%TRA Q_^1_%NUM $1400_(JUMP ABSOLUTE INSTR_^1TEXP_!RTJ* ATEXP_^1*_$TIMER EXPIRATION ENTERS HERE_^1TIMEXP LDA*€€ (X16+1)_^1_%INA -1_^1_%STA* (X16+1)_^1_%SPC 3_^1*_$THIS IS ENTERRED TO EXECUTE SCHDLE AND TIMER_^1*_$TYPE REQUESTS._^1_%SPC 2_^1SCHCMP INQ -2_P61*1298_^1_%CLR A_P**MSOS 4.0_^1_%STA- 13,Q_)CLEAR STACK ENTRY_2**MSOS 4.0_^1_%LDA- 1,Q_N**MSOS 4.0_^1_%STA* SCHJMP_'SET UP TO JUMP TO USER_^1_%SAN SCH-*-1_^1_%JMP- (DISP)_'THE JOB IS DEAD_^1SCH_"LDQ- 4,Q_^1_%JMP* (SCHJMP)_^1SCHJMP NU€€M 0_^1_%EJT_]_^1*_#THIS IS THE PROCESSOR FOR GTFILE REQUESTS._^1_%SPC 2_^1Z_$RTJ* G_,GO MOVE REQUEST TO PROTECT STACK_^1_%LDA- (ZERO),Q_$D BIT SET_:**MSOS 4.0_^1_%ALS 1_P**MSOS 4.0_^1_%SAP Z4_O**MSOS 4.0_^1_%LDA- 1,I_*YES GET STACKED REQUEST_,**MSOS 4.0_^1_%EOR- $31_*D BIT_>**MSOS 4.0_^1_%STA- 1,I_*RESET FOR GTFILE_3**MSOS 4.0_^1Z4_#RTJ J_,CHECK LU'S , S_5**MSOS 4.0_^1_%ENA 0€€_P**MSOS 4.0_^1_%STA MMIND_(SET MASS STORAGE INDICATOR_)**MSOS 4.0_^1Z3_#JMP* Y2_+CONTNUE PROCESSING AS A RED TYPE_^1Z0_#JMP F_,REQUEST ERROR_^1_%SPC 1_^1_%EJT_]_^1*_#THE FOLLOWING PROCESSES TAPE MOTION CONTROL REQUESTS._^1_%SPC 1_^1W_$RTJ* G_,GO MOVE REQUEST TO PROTECT STACK_^1_%RTJ CHKLU_(CHECK LU_^1_%ENA 1_,SEE IF_=**MSOS 4.0_^1_%AND- 8,Q_*UNPROTECTED I/O IS ALLOWED_^1_%SA€€Z NEWTAP_'A=0 IF IT IS ALLOWED_^1W3A_"ENQ J08_*NO UNPROTECTED I/O ALLOWED_^1_%JMP* G24_*GO OUTPUT J08 MESSAGE_^1NEWTAP LDQ- 5,I_*CHECK IF MOTION_^1_%SQM W7_+NO_^1W6_#LDA =N$7773_%CHECK TAPE MOTION FUNCTIONS TO_^1_%SUB- 5,I_*SEE IF THEY ARE ALL LEGAL_^1_%AND =N$8888_^1_%SAZ W7-*-1_'A=0 THEY ARE ALL LEGAL_^1_%JMP* Z0_+GO OUTPUT J02 MESSAGE_^1W7_#JMP* Y2_+CONTINUE AS A READ TYPE€€_,**MSOS 4.0_^1_%SPC 3_^1_%SPC 3_^1_%EJT_]_^1*_$THS FOLLOWING ROUTINE IS ENTERRED ONLY FOR_^1*_$REQUESTS WHOSE PARAMETER LISTS ARE MOVED TO_^1*_$PROTECTED CORE FOR EXECUTION._^1_%SPC 2_^1G_$0_"0_^1_%ENQ SIZE_^1G1_#LDA* STACK,Q_%DETERMINE IF MAXIMUM NO OF_^1_%SAP G15-*-1_%REQUESTS ARE STACKED_^1_%INQ -13_*A=- IF NO ROOM AVAILABLE_+**MSOS 4.0_^1_%SQM G2-*-1_'Q=- IF NO STACK SP€€ACE AVAILABLE_^1_%JMP* G1_+GO CONTINUE CHECKING SLOTS_^1G15_"JMP* G3_+OPEN SLOT MOVE REQUEST_^1_%SPC 2_^1*_$NO SPACE - REQUEST MUST WAIT IF CALLER WAS_^1*_$AT LEVEL ZERO - IF HE WAS AT LEVEL ONE, THE_^1*_$JOB MUST BE BOMBED BECAUSE THERE IS NO_^1*_$WAY FOR AN EMPTY TO OCCUR IN THE STACK WHILE_^1*_$OPERATING AT LEVEL ONE._^1_%SPC 1_^1G2_#LDA SAVPR_(CHECK PRIORITY TO SEE IF 1 OR 0€€_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%SAZ G25-*-1_%A=0 IF PRIORITY IS ZERO_^1_%ENQ J06_*PRIORITY IS NOT ZERO GIVE J06_^1G24_"JMP F1_+MESSAGE_^1G25_"LDA- ($E9)_(IF MODE IS 65K_5**MSOS 4.0_^1_%SAZ G26_N**MSOS 4.0_^1_%CLR A_,DO NOT TRY TO SAVE OVERFLOW FROM_"**MSOS 4.0_^1_%SAZ 2_,INT. TRAP_:**MSOS 4.0_^1G26_"LDA- (CNOTE)_%FOR 32K SAVE OV AND UNPRO. RETURN_!**MSOS 4.0_^1_%AND- NZERO€€+15_$IN LOCATION 100_^1_%ADD PTRS_^1_%INA -1_^1_%STA- (CNOTE)_%RETURN TO UNPROTECTED TO MAKE THE_^1_%JMP K_,REQUEST AGAIN_^1_%SPC 1_^1_%SPC 3_^1*_$AN OPEN SLOT FOR STACKING IS AVAILABLE._^1*_$INDEX TO IT IS IN Q._^1_%SPC 2_^1G3_#RTJ* G8_+FIND WHERE WE ARE_^1G8_#NUM 0_^1_%INQ -12_*ADJUST Q TO GET TOP OF SLOT_(**MSOS 4.0_^1_%ADQ* G8_+PUT SLOT ADDRESS IN I_^1_%INQ STACK-G8_^1€€_%STQ- I_^1_%LDQ PTR_^1_%LDA- 2,Q_*GET THREAD_^1_%STA- 3,I_*CLEAR THREAD IN STACKED REQ._^1_%SAZ G4-*-1_^1_%LDQ RCODE_(THREAD CHECK NOT VALID FOR_^1_%LDA REQTB,Q_%SOME REQUESTS_^1_%AND- ONEBIT+11_^1_%LDQ PTR_^1_%SAN G4-*-1_^1_%JMP* G2_+ALREADY THREADED_^1G4_#LDA- 1,Q_*CHECK THE COMPLETION ADDRESS_^1_%SAZ G51-*-1_%TO SEE IF IT IS ZERO OR_^1G5_#RTJ- (CABS)_'ABSOLUTIZE COMPLETI€€ON ADDR._^1_%TRQ A_^1G51_"STA- (ZERO),I_$PUT C IN STACK_^1_%SAZ G7-*-1_'NO COMPLETION ADDRESS_^1_%LDQ- TOPMON_'CHECK THE COMPLETION ADDRESS TO_#**MSOS 4.0_^1_%INA -1_+SEE IF IT IS IN PROTECTED CORE_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%EQU EQC(*-1)_I**MSOS 4.0_^1_%SAZ G6_O**MSOS 4.0_^1_%INA 0_,IF IT IS REQUEST IS ILLEGAL_(**MSOS 4.0_^1_%SAZ G65_N**MSOS 4.0_^1G6_#LDA- (ZERO),I_I**M€€SOS 4.0_^1_%LDQ- BOTOP_L**MSOS 4.0_^1*_81 CARD DELETED_1*4.0/77*1868_^1_%RTJ* (EQC)_L**MSOS 4.0_^1_%SAZ G65_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ G7_O**MSOS 4.0_^1G65_"JMP* Z0_+GO OUTPUT J02 MESSAGE_.**MSOS 4.0_^1G7_#LDA RCODE_L**MSOS 4.0_^1_%TRA A,Q_*SAVE REQUEST CODE IN Q_^1_%ALS 9_,UNPACK REQUEST CODE AND_^1_%INA 2_,SET X=0, RP=0,CP=2_^1_%LDQ REQTB,Q_%CHECK FOR TIMER€€ OR SCHEDULE CALL_^1_%LLS 16_^1_%AND- ONEBIT+11_#IF NO THREAD CHECK, IT'S TIMER OR SCH_^1_%SAZ 1_,NOT - COMPLETION AT LEVEL 2_^1_%INQ -1_+YES - COMPLETION AT LEVEL 1_^1_%STQ- 1,I_*PUT WORD 1 IN STACK_^1_%LDA* G8_+PUT COMPLETION PROCESSOR_^1_%ADD =XCCP-G8_I**MSOS 4.0_^1_%STA- 2,I_*COMPLETION ADDRESS_^1_%LDQ PTR_^1_%STQ- 11,I_^1_%ENQ 3_^1G9_#LDA (PTR),Q_%MOVE WORDS 4 THROUGH 1€€0 OF_^1_%STA- 1,B_*THE REQUEST TO THE PROTECT_^1_%INQ 1_,STACK._^1_%TRQ A_^1_%INA -10_^1_%SAZ G10-*-1_^1_%JMP* G9_^1G10_"SET A_,SET THE STACK ENRRY BUSY_+**MSOS 4.0_^1_%STA- 12,I_M**MSOS 4.0_^1_%LDA- (ZERO),I_$USERS COMPLETION ADDRESS_'*4.0/77*1865_^1_%SAZ TAG2_I*4.0/77*1865_^1_%SUB- TOPMON_'BOTTOM OF UNPROTECTED - 1_%*4.0/77*1865_^1_%INA 1_,ADD BIAS_7*4.0/77*1865_^1_%SAP T€€AG1_)WITHIN LOWER LIMIT_-*4.0/77*1865_^1_%JMP E_,JP01 ERROR_5*4.0/77*1865_^1TAG1_!LDA- BOTOP_(TOP OF UNPROTECTED + 1_)*4.0/77*1865_^1_%SUB- (ZERO),I_$USERS COMPLETION ADDRESS_'*4.0/77*1865_^1_%INA -1_+REMOVE BIAS_4*4.0/77*1865_^1_%SAP TAG2_)WITHIN UPPER LIMIT_-*4.0/77*1865_^1_%JMP E_,JP01 ERROR_5*4.0/77*1865_^1TAG2_!LDQ- 11,I_)REQUEST ADDRESS_0*4.0/77*1865_^1_%JMP* (G)_^1_%SPC €€ 3_^1*_$THE FOLLOWING AREA IS THE PROTECT STACK_^1*_$UPON INITIAL EXECUTION OF PROTECT THIS AREA_^1*_$IS USED TO PLACE PARAMETERS INTO OTHER_^1*_$AREAS WHICH REQUIRE THEM. AFTER IT IS USED_^1*_$TO FIX PARAMETERS THE AREA IS CLEARED AND_^1*_$THEN BECOMES THE PROTECT STACK(TABLE)_^1*_$THIS TABLE IS USED TO STACK UNPROTECTED_^1*_$PARAMETER LISTS FOR EXECUTION._^1_%SPC 2_^1O2_#ADC F€€-PRT_^1O3_#ADC PTRS-PRT_^1O4_#ADC IPROC1-PRT_^1O5_#ADC STACK-PRT_^1O6_#ADC GET-PRT_^1F3_#ADC FILE3_^1_%EQU STACK(O2)_^1PRTA_!TRA Q_^1_%ADD* O2_^1_%STA LOCF_)POINTER TO PROTECT PROCESSOR ERROR ENTRY_^1_%TRQ A_^1_%ADD* O3_^1_%STA LPTRS_(POINTER TO PROTECT PROCESSOR'S PARAMETER_^1_%TRQ A_^1_%ADD* O4_^1_%STA IP1_*LOCATION TO HANDLE INTERNAL INTERRUPTS_^1_%TRQ A_^1_%ADD* O6€€_^1_%STA JKIN_)FLAG TO INDICATE THAT JBKILL IS IN_^1_%TRQ A_^1_%ADD* O5_^1_%LDQ TRNVEC_'LOCATION OF PROTECT STACK_^1_%STA- 11,Q_^1_%ENQ *-O2+1_^1_%ENA 0_^1PRTZRO STA* O2,Q_)ZERO OUT WHAT HAS JUST EXECUTED_^1_%INQ -1_^1_%SQZ PRTZ-*-1_^1_%JMP* PRTZRO_^1PRTZ_!LDQ PRORET_'GET ADDRESS TO RETURN TO AFTER_^1_%STA* *-2_*INITIAL FLAGS ARE SET AND_^1_%STA* *-2_*ZERO MORE LOCATIONS_^1€€_%JMP- ($22),Q_%RETURN_^1_%EQU PRTLEN(*-O2)_^1_%EQU STLEN(13*N)_F**MSOS 4.0_^1_%BZS STX(STLEN-PRTLEN)_^1_%EJT_]_^1_%SPC 3_^1*_#THIS IS THE COMPLETION PROCESSOR FOR ALL_^1*_#STACKED REQUESTS. IT IS ENTERRED WITH THE ADDRES_^1*_#OF THE PARAMETER LIST IN A AND THE ERROR CODE_^1*_#IN Q._^1_%SPC 2_^1CCP_"TRA Q_,POINTER TO STACK IN Q_^1_%INQ -2_^1_%RTJ SWAPCK_'CHECK IF A SWAP IS €€WAITING_^1CCP0_!LDA- 12,Q_M**MSOS 4.0_^1_%STA- I_^1*_8POINTER TO USERS REQUEST NOW IN I_^1_%LDA- 5,Q_^1_%AND- NZERO+13_^1_%STA* CCTEMP_^1_%LDA- 3,I_^1_%AND- NZERO-3_^1_%ADD* CCTEMP_^1_%STA- 3,I_*MOVE V FIELD FROM STACK TO USERS REQUEST_^1*_]_^1_%LDA- 2,Q_^1_%ARS 9_^1_%AND- NZERO-11_$IF IT IS A GTFILE REQUEST_^1_%INA -13_^1_%SAN CCP1_^1*_]_^1_%LDA- 8,Q_L**MSOS 4.1**_^1_%STA- 6,I_€€*STORE W2 BACK IN CALL_,**MSOS 4.1**_^1_%LDA- 10,Q_)MOVE MASS STORAGE ADDRESS INTO_^1*_8USERS REQUEST_^1_%STA- 8,I_^1_%LDA- 11,Q_^1_%STA- 9,I_^1CCP1_!CLR A_,CLEAR THREAD IN USERS REQUEST_^1_%STA- 2,I_^1*_]_^1_%LDA- 1,Q_*CHECK FOR COMPLETION IN PROTECT STK4.0*79*1947_^1_%SAN CADRS_(IF NO COMPLETION ADDRESS_^1_%CLR A_P**MSOS 4.0_^1_%STA- 13,Q_)RELEASE STACK ENTRY_0**MSOS 4.0_^1_%J€€MP- (DISP)_^1*_]_^1CADRS RTJ- ($F4)_(SCHEDULE DOWN TO LEVEL 1_^1CAREF ADC $1301,CADRS1-CAREF_^1_%JMP- (DISP)_^1CADRS1 CLR A_,NOW AT LEVEL 1_5**MSOS 4.0_^1_%STA- 13,Q_)RELEASE STACK ENTRY_0**MSOS 4.0_^1_%LDA- 1,Q_*COMPLETION ADDRESS_1**MSOS 4.0_^1_%STA* JMP_^1*_]_^1_%LDA JBCNFG_^1_%SAZ 1_^1_%JMP- (DISP)_'EXIT, IF JOB WAS CANCELED._^1_%LDA- 12,Q_)ADDRESS OF USER IN A_^1_%LDQ- 5€€,Q_*V FIELD OF USER IN Q_^1_%JMP* (JMP)_(RETURN TO USER IN UNPROTECTED CORE AT LEVEL 1_^1*_]_^1JMP_"NUM 0_^1CCTEMP NUM 0_^1*_$THIS IS THE COMPLETION ADDRESS FOR I/O REQUESTS WHICH H**MSOS 4.0_^1*_$BEEN MADE INTO THE FOREGROUND BUFFER._!THE DATA IS MOV**MSOS 4.0_^1*_$BACK TO THE REQUESTORS BUFFER AND THE NORMAL COMPLETION**MSOS 4.0_^1*_$PROCESSING IS PERFORMED._>**MSOS 4.0_^1CCCP_€€!INA -1_O**MSOS 4.0_^1_%TRA Q_,STACK ADDRESS_6**MSOS 4.0_^1CCCP0 LDA SWAPON_'IS THE SYSTEM SWAPED_/**MSOS 4.0_^1_%SAZ CCCP02_'NO_A**MSOS 4.0_^1_%RTJ- ($F4)_(YES WAIT UNTIL SWAP DONE_***MSOS 4.0_^1CCCP01 ADC $1302_L**MSOS 4.0_^1_%ADC CCCP0-CCCP01_E**MSOS 4.0_^1_%JMP- (DISP)_K**MSOS 4.0_^1CCCP02 STQ- I_P**MSOS 4.0_^1_%LDA- 10,I_)REQUEST CODE FOR THIS REQUEST_'61*1284_^1_%INA €€ -14_O61*1284_^1_%SAN 1_Q61*1284_^1_%JMP* CCCP5_(YES_A61*1284_^1_%LDA- 4,I_N**MSOS 4.0_^1_%ALS 1_,CHECK FOR SHORT READ CONDITION_$**MSOS 4.0_^1_%SAP CCCP1_(NO_A**MSOS 4.0_^1_%LDQ- 5,I_N**MSOS 4.0_^1_%ADQ- 6,I_N**MSOS 4.0_^1_%INQ -1_+CALCULATE S + N - 1_0**MSOS 4.0_^1_%LDA- (ZERO),Q_$PICK UP THE LAST STORED ADDRESS_#**MSOS 4.0_^1_%SUB- 6,I_N**MSOS 4.0_^1_%ADD- 9,I_*AND ADJUST TO€€ THE REQUESTORS ADDRESS**MSOS 4.0_^1_%STA- (ZERO),Q_I**MSOS 4.0_^1*_\**MSOS 4.0_^1CCCP1 LDA- 9,I_*BLOCK TRANSFER THE DATA BACK TO THE **MSOS 4.0_^1_%STA* XFERT_(REQUESTORS BUFFER_2**MSOS 4.0_^1_%LDA- 6,I_N**MSOS 4.0_^1_%STA* XFERF_L**MSOS 4.0_^1_%LDQ- 5,I_N**MSOS 4.0_^1_%SQN CCCP3_(FORCE ZERO LENGTH REQUEST_%*4.0/77*1882_^1_%ENQ 1_,TO 1 WORD_6*4.0/77*1882_^1_%JMP* CCCP3_L**MSOS €€4.0_^1CCCP2 LDA* (XFERF),Q_H**MSOS 4.0_^1_%STA* (XFERT),Q_H**MSOS 4.0_^1CCCP3 INQ -1_O**MSOS 4.0_^1_%SQM CCCP4_L**MSOS 4.0_^1_%JMP* CCCP2_L**MSOS 4.0_^1*_\**MSOS 4.0_^1CCCP4 ENA 0_P**MSOS 4.0_^1*_81 CARD DELETED_661*1284_^1_%STA* BUFBZY_'SET THE BUFFER NOT BUSY_,**MSOS 4.0_^1CCCP5 LDA UNPIOF_'DECREMENT FOREGROUND I/O FLAG_'61*1284_^1_%EQU UNP(*-1)_J61*1284_^1_%INA -1_P61*€€1284_^1_%STA* (UNP)_M61*1284_^1_%LDQ- I_/AND GO THE THE NORMAL COMPLETION **MSOS 4.0_^1_%INQ -1_O**MSOS 4.0_^1_%JMP* CCP0_M**MSOS 4.0_^1_%SPC 3_^1_%EJT_]_^1CHKLU NOP 0_^1_%LDQ- 11,I_)REQUEST ADDRESS_4**MSOS 4.0_^1_%RTJ- (LUABS)_%ABSOLUTIZE LU_^1_%SQZ LUER_)LU. ZERO_^1_%TCQ A_^1LOGTAB ADD LOG1A_(CHECK TO SEE IF LU LARGER THAN MAX_^1_%SAM LUER_)YES_^1_%TCQ A_,NO_^1_%INA 1_,€€IS THE LU=1_^1_%SAM 1_^1LUER_!JMP* LUERR_^1_%LDA- 4,I_*NO PUT THE LU IN THE PROTECT STACK_^1_%AND- ONEBIT+12_^1_%AAQ A_^1_%STA- 4,I_^1_%LDQ* (LOGTAB+1),Q GET THE PDT ADDRESS IN Q_^1_%LDA- 8,Q_^1_%ARS 4_O**MSOS 4.0_^1_%AND- LPMSK+7_%EQUIPMENT TYPE BITS_/**MSOS 4.0_^1_%INA -11_*COSY DRIVER_7**MSOS 4.0_^1_%SAN NOTCSY_J**MSOS 4.0_^1_%LDA- 4,Q_*COSY FLAG, -ACTIVE = NOT ZERO_#**MSO€€S 4.1**_^1_%SAN NOTCSY_'SO JOBKILL WILL RESET IT'S_(**MSOS 4.0_^1_%SET A_O**MSOS 4.0_^1_%STA- 4,Q_K**MS6 4.1**_^1NOTCSY JMP* (CHKLU)_%RETURN_<**MSOS 4.0_^1LUERR JMP F_,GO OUTPUT J02 ERROR_^1XFERT NUM 0_P**MSOS 4.0_^1XFERF NUM 0_P**MSOS 4.0_^1_%EJT_]_^1H_$LDQ RCODE_^1_%LDA REQTB,Q_^1_%AND- NZERO+12_$UNPACK REQUEST LENGTH_^1_%ALS 4_^1_%LDQ INDIR_(IF REQUEST WAS INDIRECT,€€ USE_^1_%SQZ H2-*-1_'1 INSTEAD OF REQ. LENGTH TO_^1_%TRQ A_,FIND RETURN ADDRESS_0**MSOS 4.0_^1H2_#ADD RETURN_^1_%STA* SQV_N**MSOS 4.0_^1_%LDQ- BOTOP_(MAKE SURE RETURN IS_0**MSOS 4.0_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%SAZ H25_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ H3_+UNPROTECTED_8**MSOS 4.0_^1H25_"LDA- BOTOP_L**MSOS 4.0_^1_%INA -2_^1_%STA PCELL_(RETURN IS PROTECTED THEREFOR€€E_^1_%JMP NOEIN_(A PROTECT VIOLATION HAS OCCURED_#**MSOS 4.0_^1H3_#LDA- I_P**MSOS 4.0_^1_%INA 1_P**MSOS 4.0_^1_%TRA Q_^1_%EOR- NZERO+15_I**MSOS 4.0_^1_%STA* H1_O**MSOS 4.0_^1_%LDA RCODE_(IF THIS IS A GTFILE REQUEST_^1_%INA -13_*SUBR. Z HAS_^1_%SAZ H1-1_)SET CORRECT D BIT_^1_%LDA- (ZERO),Q_^1_%AND- ONEBIT+14_^1_%SAN H1-1_^1_%EOR- ONEBIT+14_#SET D BIT IF NOT SET_^1_%ADD- (ZER€€O),Q_^1_%STA- (ZERO),Q_^1_%RTJ- ($F4)_(INDIRECT REQUEST USING_-**MSOS 4.0_^1H1_#NUM 0_,STACKED ENTRY_6**MSOS 4.0_^1_%LDQ* SQV_N**MSOS 4.0_^1H1B_"LDA- ($E9)_L**MSOS 4.0_^1_%SAZ H4_O**MSOS 4.0_^1_%CLR A_,65K MODE--DO NOT SAVE_.**MSOS 4.0_^1_%SAZ 2_,OVERFLOW_;**MSOS 4.0_^1H4_#LDA- (CNOTE)_J**MSOS 4.0_^1_%AND- NZERO+15_$SAVE OVERFLOW BIT_^1_%AAQ A_^1_%STA- (CNOTE)_^1_%SPC 3_^1*_$€€THIS EXITS VIA WHATEVER IS IN 100 ON ENTRY_^1_%SPC 2_^1K_$LDQ SAVQ_^1_%IIN 0_^1_%STQ- (COUNT)_%SAVE Q IN INTERRUPT STACK_^1_%LDQ- COUNT_^1_%LDA SAVA_^1_%STA- 1,Q_*SAVE A IN INTERRUPT STACK_^1_%LDA SAVI_^1_%STA- 2,Q_*SAVE I IN INTERRUPT STACK_^1_%LDA SAVPR_^1_%STA- 4,Q_*SAVE PRIORITY IN INTERRUPT STACK_^1_%LDA- (CNOTE)_^1_%STA- 3,Q_*SAVE RETURN IN INTERRUPT STACK_^1_%INQ 5_^1€€_%STQ- COUNT_(RESTORE TOP OF INTERRUPT STACK_^1_%EIN 0_^1_%JMP- (DISP)_^1SQV_"NUM 0_P**MSOS 4.0_^1_%SPC 2_P**MSOS 4.0_^1*_$THIS ROUTINE MOVES THE I/O BUFFER TO THE FOREGROUND, IF**MSOS 4.0_^1*_$POSSIBLE._!THIS ALLOWS CORE SWAPS TO BE PERFORMED EVEN**MSOS 4.0_^1*_$THOUGH BACKGROUND I/O IS IN PROCESS._2**MSOS 4.0_^1_%SPC 3_P**MSOS 4.0_^1M_$0_"0_P**MSOS 4.0_^1_%LDA* MMIND_(IS THIS€€ A M.M. REQUEST_-**MSOS 4.0_^1_%SAZ M1_+YES, EXIT_:**MSOS 4.0_^1_%LDA RCODE_(IF MOTION BYPASS BUFFER MOVING_%61*1284_^1_%STA- 10,I_N61*1284_^1_%INA -14_O61*1284_^1_%SAN 1_Q61*1284_^1_%JMP* M9_+MOTION_>61*1284_^1*_\**MSOS 4.0_^1_%LDA* BUFBZY_'IS THE BUFFER BUSY_1**MSOS 4.0_^1_%SAN M1_+YES, EXIT_:**MSOS 4.0_^1*_\**MSOS 4.0_^1_%LDA- 5,I_*CHECK LENGTH FOR LESS THAN BUFSIZ_!**MSOS €€4.0_^1_%SUB =XBUFSIZ+1_G**MSOS 4.0_^1_%SAM M4_O**MSOS 4.0_^1M1_#JMP* M8_+CAN'T BUFFER THIS REQUEST - EXIT_"**MSOS 4.0_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1BUFBZY NUM 0_P**MSOS 4.0_^1MMIND NUM 0_P**MSOS 4.0_^1ACCCP ADC (CCCP-M5)_H**MSOS 4.0_^1ABUF_!ADC BUFR-M5_J**MSOS 4.0_^1*_\**MSOS 4.0_^1M4_#STA* BUFBZY_'SET THE BUFFER BUSY_0**MSOS 4.0_^1_%LDA- 6,I_N**MSOS 4.0_^1_%STA- 9,I_*S€€AVE THE REQUESTORS S_.**MSOS 4.0_^1_%STA* XFERF_L**MSOS 4.0_^1*_\**MSOS 4.0_^1_%RTJ* M5_+ABSOLUTIZE ALL REQUIRED ADDRESSES_!**MSOS 4.0_^1M5_#0_"0_P**MSOS 4.0_^1*_84 CARDS DELETED_561*1284_^1_%LDA* M5_O**MSOS 4.0_^1_%ADD* ABUF_M**MSOS 4.0_^1*_81 CARD DELETED_561*1284_^1_%STA- 6,I_*SET NEW BUFFER ADDRESS IN THE STACK **MSOS 4.0_^1_%STA* XFERT_L**MSOS 4.0_^1*_\**MSOS 4.0_^1_%LDQ- 5,I€€_*BLOCK TRANSFER FROM USER TO THE BUFF**MSOS 4.0_^1_%JMP* M7_O**MSOS 4.0_^1M6_#LDA* (XFERF),Q_H**MSOS 4.0_^1_%STA* (XFERT),Q_H**MSOS 4.0_^1M7_#INQ -1_O**MSOS 4.0_^1_%SQM M9_O**MSOS 4.0_^1_%JMP* M6_O**MSOS 4.0_^1M8_#CLR Q_,INDICATOR TO SET THE UNPIO FLAG_#**MSOS 4.0_^1_%JMP* M10_O61*1284_^1M9_#LDA* M5_+SET NEW COMPLETION IN THE STACK_$61*1284_^1_%ADD* ACCCP_M61*1284_^1_%STA- 2,I_€€O61*1284_^1M10_"JMP* (M)_*EXIT_@61*1284_^1BUFR_!BZS BUFR(BUFSIZ)_E**MSOS 4.0_^1_%SPC 3_^1_%EJT_]_^1*_$THIS IS WHERE THE OVERLAY OF THE ERROR_^1*_$ROUTINE AND JBKILL BEGINS. ROUTINES_^1*_$WHICH ARE IN THIS AREA INITIALLY ARE_^1*_$NOT REQUIRED AFTER AN ERROR HAS OCCURRED_^1*_$OR JBKILL IS SCHEDULED._^1_%EQU AREA(*)_^1_%SPC 2_^1*_$WE NOW INVESTIGATE THE POSSIBILITY OF_^1*_$AN ATT€€EMPTED ENTRY INTO A PROTECTED PROGRAM_^1*_$WHOSE ENTRY IS A PRESET._^1_%SPC 2_^1C_$LDA PTR_^1_%LDQ- BOTOP_(IS IT BELOW MONITOR COMMON_)**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ C1_O**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ D_P**MSOS 4.0_^1C1_#JMP* TSTDIS_'NO - CHECK JMP TO DISPATCHER_'**MSOS 4.0_^1D_$LDQ- LPREST_'LENGTH OF PRESET TO Q_^1_%INQ -1_^1D1_#LDA- (PRESET),Q_"IS €€THE COMPUTED ADDRESS_^1_%SUB PCELL_(A PRESET ENTRY POINT_^1_%SAN D2-*-1_^1_%LDQ PCELL_(YES_^1_%LDA- 1,Q_*IS IT FOLLOWED BY AN IIN_^1_%SUB* AT1_^1_%SAN D3-*-1_'SKIP IF NO_^1_%JMP B_,YES, GO EXIT IT PRESET_^1D2_#INQ -4_^1_%SQM TSTDIS-*-1_"ARE WE DONE CHECKING PRESETS_^1_%JMP* D1_+NO CONTINUE CHECKING_^1D3_#JMP* NOEIN_(GO OUTPUT J01 ERROR_^1_%SPC 1_^1_%EJT_]_^1TSTDIS LDA PCEL€€L_^1_%TRA Q_^1_%INA 1_,ADDR AT WHICH VIOLATION OCCURRED_^1_%SUB- DISP_)ADDRESS OF DISPATCHER_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* NOTDIS_'NOT A JUMP TO DISP_1**MSOS 4.0_^1ISDISP LDA SAVPR_(YES, WAS IT FROM LEVEL ZERO_^1_%AND- LPMSK+15_I**MSOS 4.0_^1_%SAN ATONE_L**MSOS 4.0_^1_%RTJ DOWN0_L**MSOS 4.0_^1ATONE LDQ- $E9_*ADDR OF EXTENDED CORE TABLE_(**MSOS 4.0_^1_%LDQ- 9,Q_*ADDR OF RCTV€€ IN MONI_/**MSOS 4.0_^1_%LDA- 5,Q_*ADDR OF EXIT REQUEST (T5)_^1AT1_"IIN 0_^1_%STA- I_^1_%SET Q_,-0 TO Q TO INDICATE ENTRY FROM PP_^1_%JMP- (ZERO),I_$JUMP TO T5_^1NOTDIS INQ 2_,Q=LOC OF INTERRUPT +1_^1_%STQ* VIOL_^1_%STQ* SAVQ1_L**MSOS 4.0_^1_%LDA- (CNOTE)_^1_%LDQ- ($E9)_(CHECK TO SEE IF_4**MSOS 4.0_^1_%SQN TBCK_)LOC. IS FROM PART1_1**MSOS 4.0_^1_%AND- H7FFF_^1TBCK_!STA* ADR+1_€€L**MSOS 4.0_^1_%LDQ- TOPMON_'CONTENTS OF $100 MUST_.**MSOS 4.0_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%EQU COMV(*-1)_H**MSOS 4.0_^1_%SAZ ADR_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ PROT_)BE IN UNPROTECTED_2**MSOS 4.0_^1ADR_"LDA =N$0000_J**MSOS 4.0_^1_%LDQ- BOTOP_(CORE OR ABORT_6**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ PROT_M**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ TSOK_M**M€€SOS 4.0_^1PROT_!JMP* NOEIN_^1TSOK_!LDQ* SAVQ1_L**MSOS 4.0_^1_%INQ -3_+Q=ADDR OF CELL 3 LOCATIONS BACK_^1TRYEIN LDA- (ZERO),Q_$FETCH CONTENTS OF CELL TO BE TESTED_^1_%ARS 8_^1_%INA -4_+EIN=400, IIN=500, ..., INTERREG=800, EXI=E00_^1_%SAM NOTEIN-*-1_^1_%INA -5_^1_%SAM ISINT-*-1_^1_%INA -5_^1_%SAN NOTEIN-*-1_^1ISINT LDQ* VIOL_^1_%STQ- (CNOTE)_%RETURN TO UNPROTECTED PROGRAM_^1€€_%JMP K_,THE VIOLATION IS LEGAL_-**MSOS 4.0_^1NOTEIN LDA* VIOL_)LAST ADDRESS TO TEST_^1_%TCA A_^1_%AAQ A_^1_%SAZ NOEIN-*-1_^1_%INQ 1_,TRY NEXT CELL_^1_%JMP* TRYEIN_^1NOEIN JMP E_,ERROR EXIT, PROTECT VIOLATION_^1VIOL_!ADC 0_^1_%EJT_]_^1*_#THIS ROUTINE ABSOLUTIZES LOGICAL UNIT AND_^1*_#STARTING ADDRESS WHILE DOING LEGALITY CHECKS_^1*_#ON THEM._^1_%SPC 2_^1J_$0_"0_^1_%RTJ CH€€KLU_(GO CHECK LU. RETURN WITH Q_^1_%ENA 1_,SET TO ADDRESS OF PDT_^1_%AND- 8,Q_*PROTECTED_@****_^1_%SAZ J2B-*-1_%NO--OK_C****_^1_%JMP P1_+YES--ERROR J08_^1J2B_"LDQ- 11,I_)NO,PREPARE TO ABS. PARAMETERS_%**MSOS 4.0_^1J2C_"RTJ- (SABS)_'ABSOLUTIZE S_7**MSOS 4.0_^1_%STA* LOCS_^1_%STQ- 6,I_*PUT S IN STACKED REQUEST_^1_%LDA* RCODE_(GET REQUEST CODE_^1_%INA -2_+IS IT WRITE_^1_%STA* WRIN€€D_^1_%SAZ J43_*YES-RETURN_9**MSOS 4.0_^1J4_#INA -4_+IS IT FWRITE_^1_%STA* WRIND_^1J43_"SAZ J8_+YES-RETURN_9**MSOS 4.0_^1_%LDA- 6,I_N**MSOS 4.0_^1_%INA -1_+STARTING ADDRESS - 1_+*4.0/77*1868_^1_%LDQ- TOPMON_'SEE IF STARTING ADDRESS IS IN UNPROT**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ J45_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ J7_+NO - ERROR_9**MSOS 4.0_^1J45_"LDA- 6,€€I_N**MSOS 4.0_^1_%LDQ- BOTOP_L**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ J7_O**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ J8_+YES_@**MSOS 4.0_^1J7_#JMP F_,GO OUTPUT J02 ERROR_^1J8_#JMP* (J)_*OK - RETURN_^1SAVQ1 NUM 0_P**MSOS 4.0_^1_%SPC 3_^1_%EJT_]_^1*_#THIS ROUTINE ABSOLUTIZES N AND LEGALITY CHECKS_^1*_#S+N. IT VERIFIES THAT THE CALLED DEVICE CAN READ_^1*_#OR WRITE AS REQUE€€STED._^1_%SPC 2_^1LOCS_!NUM 0_,LOCATION OF PARAMETER LIST_^1RCODE NUM 0_,REQUEST CODE_^1WRIND NUM 0_,ZERO IF WRITE OR FWRITE_^1N96_"ADC 96_^1L_$0_"0_^1_%LDQ- 11,I_)REQUEST ADDRESS_4**MSOS 4.0_^1_%LDA- (ZERO),Q_$DBIT SET_;**MSOS 4.0_^1_%ALS 1_P**MSOS 4.0_^1_%SAP L01-*-1_%NO_A**MSOS 4.0_^1_%LDA- 4,Q_*YES--BIT 15 ON N SET_/**MSOS 4.0_^1_%SAP L01-*-1_%NO_A**MSOS 4.0_^1_%JMP* €€J7_+YES--ERROR_9**MSOS 4.0_^1L01_"RTJ- (NABS)_'ABSOLUTIZE N AND STORE IT IN_'**MSOS 4.0_^1_%STQ- 5,I_*THE STACKED REQUEST_^1_%LDA* WRIND_^1_%SAN 1_P**MSOS 4.0_^1_%JMP* L5_+IF REQUEST IS NOT WRITE OR_)**MSOS 4.0_^1*_8EWRITE, MAKE SURE BUFFER_^1_%LDA LOADIN_'IF LOADING IS IN PROGRESS_^1_%INA -1_^1_%SOV L2-*-1_^1L2_#AAQ A_^1_%SOV L4A-*-1_^1L3_#LDQ- SIZECR_K**MSOS 4.0_^1_%RTJ* (C€€OMV)_K**MSOS 4.0_^1_%SAZ L4A_*IT IS IN PROTECTED_1**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAN L4A_*IT IS_>**MSOS 4.0_^1L4_#LDA- 6,I_N**MSOS 4.0_^1_%ADD- 5,I_*NUMBER OF WORDS_4**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%LDQ- BOTOP_L**MSOS 4.0_^1_%RTJ* (COMV)_K**MSOS 4.0_^1_%SAZ L4A_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ L5_O**MSOS 4.0_^1L4A_"JMP* J7_+BUFFER ENDS IN PROTECTED CORE_^€€1L5_#LDA- 4,I_*GET LU NUMBER_^1_%AND- NZERO-6_^1_%TRA Q_^1_%LDQ LOG1A,Q_%GET PDT ADDRESS IN Q_^1_%STQ* HOLD_^1_%LDA- 8,Q_^1_%ALS 5_^1_%AND- 5_,MASK 3 BITS_^1_%INA -1_^1_%SAN L50-*-1_%SKIP IF NOT MAG TAPE_^1_%LDA- 5,I_*MAG TAPE CHECK FOR ZERO WORDS_^1_%SAN L50A-*-1_$SKIP IF NOT ZERO WORDS_^1_%JMP* J7_+ERROR 0 WORD + MAG TAPE_^1L50_"INA -1_+CHECK TO SEE IS MASS MEMORY_^1_%STA €€ MMIND_(MASS MEMOTY INDICATOR_.**MSOS 4.0_^1_%SAZ L6-*-1_'A=0 YES MASS MEMORY_^1L50A_!JMP* P_,NO_^1L6_#LDQ- 11,I_)REQUEST ADDRESS_4**MSOS 4.0_^1_%LDA- ($E9)_(IF 65K SKIP THE_^1_%SAN L6A_*INDIRECT S CHECK_^1_%LDA- 5,Q_*IF S IS INDIRECT, MOVE MASS_^1_%SAM L7-*-1_'STORAGE ADDRESS TO STACK_^1L6A_"LDA INDIR_^1_%SAN L8-*-1_^1_%RAO RETURN_'IF REQUEST AND S ARE DIRECT_^1_%RAO RETURN€€_'ADD 2 TO RETURN ADDRESS_^1_%JMP* L8_^1L7_#LDQ* LOCS_^1_%LDA- 1,Q_^1_%STA- 7,I_^1_%LDA- 2,Q_^1_%STA- 8,I_^1L8_#LDA- 8,I_*CHECK FOR MINUS SECTOR NO._^1_%SAP L85-*-1_^1L84_"JMP* J7_^1L85_"LDQ* RCODE_M61*1294_^1_%INQ -3_P61*1294_^1_%LDA- 4,I_*IF LU NOT LIB DON'T ADD SCRATCH_$61*1294_^1_%AND- LPMSK+8_%MASK OFF MODE BIT_364*1294_^1_%SUB- LIBLU_^1_%STA* LIFLAG_'ZERO IS LIB AND SCRATCH€€ ARE SAME UNIT61*1294_^1_%SAN L9A-*-1_^1L9_#LDA+ LOADIN_'IF LOADING IS IN PROGRESS,_^1_%SAZ L10-*-1_%DONT ADD SCRATCH ADDRESS._^1L9A_"ENA 0_,SCRATCH DISK_861*1294_^1_%JMP* L10A_N61*1294_^1L10_"LDA- $C1_*COMPENSATE SCRATCH SECTOR -1_(61*1294_^1_%INA -1_^1L10A_!SQM L01A_)READ/WRITE_:61*1294_^1_%JMP* L010_)HANDLE FREAD/FWRITE AT L010_^1L01A_!LDQ- 7,I_^1_%SQM L01ER_(IF MSB NEGATI€€VE - ERROR_^1_%SQN L01GO_(IF MSB POSITIVE, NOT ZERO - OK_^1_%LDQ- 8,I_^1_%INQ -96_*CHECK LSB GT SECTOR ZERO IF MSB = 0_^1_%SQP L01GO_^1L01ER JMP* L84_*ERROR EXIT_^1L01GO ENQ 0_Q61*1294_^1_%SAZ L01GOA_'SCRATCH DISK_861*1294_^1_%MUI* N96_O61*1294_^1_%LLS 1_,MAKE START OF SCRATCH LOOK LIKE DRUM ADDRESS_^1_%ALS 15_^1L01GOA ADQ- 7,I_O61*1294_^1_%ADD- 8,I_*COMBINE START OF SCRAT€€CH WITH USERS ADDRESS_^1_%SAP L010B_M61*1294_^1_%INQ 1_^1_%AND- NZERO-1_%REMOVE SIGN IN LSB IF SET_^1L010B SQP 1_^1_%JMP* LER_^1_%STQ- 7,I_*STORE COMPENSATED MSB_^1_%STA- 8,I_*LSB_>**MSOS 4.1**_^1PCK1_!ALS 1_^1_%LRS 1_,COMBINE DRUM ADDRESS_^1_%DVI* N96_*CONVERT TO SECTOR ADDRESS_^1_%JMP* GOODAD_'GOOD ADDRESS_5**MSOS 4.1**_^1L010_!LDQ- 7,I_*THIS SECTION CHECKS FWRITE/FREAD_^1_€€%SQN LER_*MSB HAS TO BE ZERO_^1_%LDQ- 8,I_^1_%SQZ LER_*LSB CAN'T BE ZERO_^1_%ADD- 8,I_*COMBINE LSB AND SCRATCH START_^1_%CLR Q_^1_%SAP L11_*POSITIVE OK - STORE IT_^1_%ENQ 1_N**MSOS 4.1**_^1_%AND- LPMSK+15_$MASK $7FFF_^1_%JMP* L11_L**MSOS 4.1**_^1LER_"JMP* L84_*ERROR EXIT_^1L11_"STA- 8,I_*STORE INTO PARAMETER LIST_^1_%STQ- 7,I_*MAKE_=**MSOS 4.1**_^1_%ALS 1_,SINGLE_;**MSOS 4.1*€€*_^1_%LRS 1_,PRECISION_8**MSOS 4.1**_^1_%JMP* PCK3_K**MSOS 4.1**_^1*_81 CARD DELETED_661*1294_^1GOODAD SQN PCK3_M**MSOS 4.0_^1PCK2_!INA -1_+ADJUST LSB FOR LATER CHECK_^1PCK3_!LDQ* LIFLAG_'IF LIBRARY UNIT MAKE SURE_+61*1294_^1_%SQN P_,ADDRESS NOT BEYOND MAXSEC_+61*1294_^1_%LDQ =XSECTOR_$GET MAX SECTOR_3**MSOS 4.1**_^1_%RTJ+ COMPV4_'COMPARE MAGNITUDE_0**MSOS 4.1**_^1_%SAZ P_,EQ€€UAL SECTOR_5**MSOS 4.1**_^1_%INA 0_,CHECK -0_9**MSOS 4.1**_^1_%SAZ P_,LESS THAN SECTOR_1**MSOS 4.1**_^1_%JMP* L84_*ADDRESS BEYOND MAXSEC - ERROR_^1P_$LDQ WRIND_(****_?**MSOS 4.0_^1_%ENA 4_,****_^1_%SQZ P01_*IS I/O REQUEST BY UNPROTECTED_^1_%ENA 2_,PROGRAM ALLOWED ON THIS_2****_^1P01_"LDQ* HOLD_)DEVICE_^1_%AND- 8,Q_*****_^1_%SAN P2-*-1_'YES--OK_B****_^1P1_#JMP W3A_*NO- GO OU€€TPUT J08_^1P2_#JMP (L)_*RETURN TO CALLING ROUTINE_^1HOLD_!NUM 0_,HOLDS DEVICE PHYSTB ADDRESS_^1LIFLAG NUM 0_Q61*1294_^1_%EQU LSA01(*/96)_^1_%EQU LSU01(LSA01+1)_^1_%EQU LTL01(LSU01*96)_^1_%BSS (LTL01-*)_^1_%EQU PRTEND(*)_^1_%EJT_]_^1**********************************************************************_^1_%SPC 3_^1_%EQU ERREL(*-AREA)_^1*************************************€€*********************************_^1_%SPC 5_^1*_$THE PROTECT VIOLATION IS ILLEGAL._^1_%SPC 2_^1GETGO ENA 0_^1_%STA GETTEM+ERREL_E**MSOS 4.0_^1_%SQP ERR_*Q=+ IF ERROR EMESSAGE_^1_%JMP JKILL_(Q=- JBKILL WAS REQUESTED_^1ERR_"RTJ- ($F4)_(SCHEDUE DOWN TO LEVEL 1_^1ERRSCH ADC $1301_^1_%ADC ERRA-ERRSCH_^1_%JMP- (DISP)_^1ERRA_!TRQ A_P**MSOS 4.0_^1_%ADD =N$3030_%FORM THE ERROR CO€€DE_0**MSOS 4.0_^1_%INQ -1_+CHECK IF PROTECT VIOLATION_^1_%SQN E0-*-1_'SKIP IF NOT PROTECT VIOLATION_^1_%LDQ PCELL+ERREL_!PROTECT VIOLATION MOVE ADDRESS_$**MSOS 4.0_^1_%INQ 2_,TO BR CONVERTED TO ASCCI_+**MSOS 4.0_^1_%STQ PTRS+ERREL_H**MSOS 4.0_^1E0_#LDQ TRNVEC_K**MSOS 4.0_^1_%STA- 10,Q_)SAVE ERROR CODE IN TRANTA TABLE_#**MSOS 4.0_^1*_$THE FOLLOWING ROUTINE CONVERTS THE ADDRESS_€€^1*_$OF THE VIOLATION FROM HEXIDECIMAL TO ASCII_^1*_$AND PUTS IT IN THE MESSAGE BUFFER_^1E1_#LDQ+ MIBUF_J**MSOS 4.1**_^1_%STQ- I_P**MSOS 4.0_^1_%ENQ 3_,CLEAR OUT ERROR BUFFER SO JOBPRO_"**MSOS 4.0_^1_%ENA -0_+DOESN'T PTINT MORE THAN THE ERROR_!**MSOS 4.0_^1E1A_"STA- (ZERO),B_$MESSAGE_<**MSOS 4.0_^1_%INQ -1_O**MSOS 4.0_^1_%SQM E1B_N**MSOS 4.0_^1_%JMP* E1A_N**MSOS 4.0_^1E1B_"LDA €δ PTRS+ERREL_G**MSOS 4.0_^1_%LDQ+ MIBUF_(ADDRESS OF JOBENT INPUT BUFFER_^1_%STQ- I_^1_%RTJ+ HA_+CONVERT ADDRESS TO ASSCII_^1_%STQ- (ZERO),I_$STORE IN BUFFER_^1_%STA- 1,I_^1_%SET Q_,ABNORMAL TERMINATE_^1_%JMP JKILL_^1_%END_]_^__δPJBKILL CSY/ D42 P€1_%NAM JBKILL_'DECK-ID D42 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$JOB KILL MODULE OF JOB PROCESSOR_^1_%SPC_!1_^1* THIS IS THE JOB KILL PORTION OF THE JOB PROCESSOR._^1* ALL INTERRUPT STACK ENTRIES AND PENDING I/O FROM_^1* U€€NPROTECTED CORE ARE DELETED._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%ENT_!JKILL_^1_%SPC_!1_^1_%EXT_!INTSTK_^1_%EXT_!UNPTIM_^1_%EXT LOG1A_^1_(EXT_%FILE3_^1_(EXT_%IUP,LOADIN_^1_%EXT UNPIO_^1_%EXT UNPIOF_^1_%EXT JBCNFG_'JOB CANCEL WAIT FLAG_^1_%EXT JBPROE_(ENTRY POINT IN JOBENT (TRVEC)_^1_(EXT_%JKIN_^1_%EQU LPMSK(2)_I**MSOS 4.0_^1_%EXT €€ COMPV4_K**MSOS 4.0_^1_%SPC_!1_^1_%EQU_!DISP($EA)_^1_%SPC_!1_^1JKILL STQ* QSAV_)-5 TELLS CALL WAS FROM T5_***MSOS 4.0_^1_%LDQ LOG1A_K**MSOS 4.0_^1GETCSY STQ* LOGQ_L**MSOS 4.0_^1_%LDQ LOG1A,Q_^1_%LDA- 8,Q_*EQUIP. TYPE_6**MSOS 4.1**_^1_%ARS 4_N**MSOS 4.1**_^1_%AND- LPMSK+7_%BITS 4-10_7**MSOS 4.1**_^1_%INA -11_*COSY TYPE_8**MSOS 4.1**_^1_%SAN DNCSY_J**MSOS 4.1**_^1_%LDA- 4,Q_*C€€OSY ACTIVE FLAG_1**MSOS 4.1**_^1_%SAZ DNCSY_(NOT ACTIVE_7**MSOS 4.1**_^1_%INA 0_N**MSOS 4.1**_^1_%SAN DNCSY_J**MSOS 4.1**_^1_%STA- 4,Q_*SET UNPROTECTED COSY INACTIVE_#**MSOS 4.1**_^1_%SET A_,RESET INITIAL CALL FLAG IN COSY_"**MSOS 4.0_^1_%STA- 31,Q_)DRIVER PSYTAB IF C.D. USED DURING **MSOS 4.0_^1DNCSY LDQ* LOGQ_)THIS JOB_:**MSOS 4.0_^1_%INQ -1_N**MSOS 4.0_^1_%SQZ DONCSY_J**€€MSOS 4.0_^1_%JMP* GETCSY_J**MSOS 4.0_^1N_$NUM_!$0000_^1IUPP_!ADC_!IUP_^1LOGQ_!NUM 0_^1_%SPC_!1_^1DONCSY ENA 0_^1_%STA LOADIN_K**MSOS 4.0_^1_%SPC_!1_^1_%LDA* N_)SET FIRST WORD OF EACH SLOT_^1_%SPC_!1_^1SG1_"LDA- $B8_'SET ALL UNPROTECTED RETURN_^1SG2_"INA_!-5_)LOCATIONS, LEVEL ZERO AND_^1_%STA- I_*ONE PRIORITY, TO THE ADDRESS_^1_%SUB_!=XINTSTK_"OF THE DISPATCHER._^1_%SAP_!1_^1_€€%JMP* SG4_'TABLE CHECKED._^1_%LDA- ($E9)_(CHECK 65K MODE SWITCH 65K=1_'**MSOS 4.0_^1_%SAZ S1_O**MSOS 4.0_^1_%LDA =X$0B00_J**MSOS 4.0_^1_%STA* SGA+1_(DO NOT CLEAR UPPER BIT OF P REG_#**MSOS 4.0_^1_%STA* S2_+IF 65K MACHINE_5**MSOS 4.0_^1S1_#LDA- 4,I_*CHECK IF PRIORITY LEVEL ZERO_'**MSOS 4.0_^1_%AND- LPMSK+15_$OR ONE_=**MSOS 4.0_^1_%ALS 1_,SIGN EXTEND BIT 14_1**MSOS 4.0_^1_%ARS €€1_P**MSOS 4.0_^1_%SAM SGA_N**MSOS 4.0_^1_%INA_!-2_^1_%SAM SGA_N**MSOS 4.0_^1_%JMP* SG3_N**MSOS 4.0_^1SGA_"LDA- 3,I_'CHECK IF A RETURN LOCATION IS_^1_%AND- $11_(A UNPROTECTED CORE LOCATION._^1_%LDQ- $F7_*A UNPROTECTED LOCATION_-**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%EQU COMPAR(*-1)_F**MSOS 4.0_^1_%SAZ S25_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ €€SG3_*PROTECTED CORE RETURN_.**MSOS 4.0_^1S25_"LDA- 3,I_N**MSOS 4.0_^1S2_#AND- $11_N**MSOS 4.0_^1_%LDQ- $F6_N**MSOS 4.0_^1_%RTJ* (COMPAR)_I**MSOS 4.0_^1_%SAZ SG3_N**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ SGZ_N**MSOS 4.0_^1SG3_"LDA- I_)TABLE LOCATION_^1_%JMP* SG2_^1SGZ_"LDA- $EA_'SET ADDRESS TO DISPATCHER_^1_%STA- 3,I_^1_%JMP* SG3_^1_%SPC_!1_^1SG4_"RTJ- ($F4)_$SCHDLE SHELF D€€OWN TO LEVEL_^1SG4A_!NUM $1300_+ZERO_^1_%ADC RETRN-SG4A_^1_%JMP- ($EA)_^1QSAV_!NUM 0_P**MSOS 4.0_^1_%SPC 2_^1RETRN LDA_!UNPTIM_#CHECK IF TIMER IN EFFECT_^1_%ADD UNPIO_(OR UNPROTECTED I/O_^1_%ADD UNPIOF_^1_%SAZ_!1_*IF SO, WAIT UNTIL COMPLETED._^1_%JMP* RETRN_^1_%STA JBCNFG_'CLEAR JOB CANCEL WAIT FLAG_^1_%STA JKIN_^1_%TRQ A_^1_%LDQ- $EE_^1_%SPB 0_,REPROTECT LOADER RETURN €|ADDRESS_^1_%LDQ* QSAV_M**MSOS 4.0_^1_%INQ 0_P**MSOS 4.0_^1_%SQZ JOBP_M**MSOS 4.0_^1_%ENQ 8_,TERMINATE IN JOBPRO_0**MSOS 4.0_^1JOBP_!INQ 6_,RF3 IN JOBPRO_6**MSOS 4.0_^1_%LDA JBPROE_'GET JOBENT RETURN_2**MSOS 4.0_^1_%STA- I_P**MSOS 4.0_^1_%ENA 1_,INDEX TO SCHEDULE JOBPRO_+**MSOS 4.0_^1_%JMP- (I)_N**MSOS 4.0_^1_%SPC_!1_^1 SPC 1_]_^1F3_%ADC_%FILE3_^1 SPC 1_]_^1_%END_]_^__|PJPLOAD CSY/ D43 P€1_%NAM JPLOAD_'DECK-ID D43 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESSOR FOR *L,*LGO,AND *ENTRY-POINT STATEMENTS_$**MSOS 4.0_^1_%SPC 2_P**MSOS 4.0_^1 SPC 1_]_^1*****************************************************_^1_%€€SPC_!1_^1_%SPC_!1_^1_%ENT_!JBL_^1_%ENT JP1_^1_%SPC_!1_^1_%EXT TRNVEC_'ABS. ADDR. OF TRANTA BUFFER IN JOBENT (TRVEC)_^1_%EXT PRORET_"RETURN LOC. FOR PROTEC_!(TRVEC)_^1_%EXT JBPROE_'ABS ADDR. OF JOB PROC. ROUTINE IN JOBENT_^1_%EXT RELS1A_^1_%EXT PROTEC_^1_%EXT LOG1A_^1_%EXT MIB_^1_%EXT_!LIBET_^1_%EXT JBCNCL,JBCNFG_^1_%EXT_!TRANV_^1_%EXT_!IUP,MIB,LOADSD_^1_%EXT_!LOADIN_^1_%E€€XT JPRET,JPRET1,JPRETN_^1_%EXT FILE2_^1_%EXT_!FILE3_^1_%EXT_!LOG1_^1_%EXT_!BRKPT_^1_%EXT UNPIO_^1_%EXT SWAPCK_^1_%EXT JOBIND_K**MSOS 4.0_^1_%EQU LPMSK(2)_$LOCORE MASK TABLE_^1_%EQU HFFFF($12)_^1_%EQU H8000($32)_G**MSOS 4.0_^1_%EQU_!DISP($EA)_^1_%SPC_!1_^1JBL_"NUM_!$C8FE_$ENTRY POINT_^1_%STA* (F2)_^1_%SQP JP2_N**MSOS 4.0_^1_%LDA* (F3)_)ENTERING FROM JOB FILE MODULES_$**MSOS€€ 4.0_^1_%STA* RELEAS_'RELEASE IT BEFORE CALLING PROTECT_!**MSOS 4.0_^1_%ENA 0_P**MSOS 4.0_^1_%STA* (F3)_)CLEAR PROGRAM IN AREA3 FLAG_(**MSOS 4.0_^1_%RTJ- ($F4)_L**MSOS 4.0_^1_%NUM $1800_L**MSOS 4.0_^1RELEAS NUM 0_P**MSOS 4.0_^1JP2_"LDA* (F3)_)IS PROTEC IN CORE_2**MSOS 4.0_^1_%SAN JP1_^1_%LDQ* (F2)_)SET UP RETURN ADDRESS FOR PROTEC_^1_%ADQ =XJP1-JBL_^1_%STQ PRORET_#TEMP RETUR€€N LOC. IN TRVEC_^1_%RTJ- ($F4)_^1_%NUM $1200_^1_%ADC (PROTEC)_%SCHEDLE PROTEC_^1_%JMP- (DISP)_^1JP1_"ENQ 5_^1_%LDA TRNVEC_'GET ADDR OF TRANTA TABLE IN JOBENT **MSOS 4.0_^1_%EQU TRNV(*-1)_G**MSOS 4.0_^1_%STA- I_P**MSOS 4.0_^1JP1A_!LDA- (I),Q_(MOVE 5WORDS FROM JOBENT BUFFER TO L**MSOS 4.0_^1*_9TRANSFER TABLE_^1_%STA* JOBP3,Q_^1_%INQ -1_^1_%SQZ 1_^1_%JMP* JP1A_^1_%LDA* (TRNV)€€_'TRANTA TABLE ADDRESS_.**MSOS 4.0_^1_%INA 10_+SET ABS. ADDRESS OF TRANTA_)**MSOS 4.0_^1_%STA* ERRBUF_'ADDRESS FOR STORE OF ERR. MES._$**MSOS 4.0_^1_%INA -4_O**MSOS 4.0_^1_%ENQ -3_^1LOOP_!STA* LOADEP,Q_$AND LOADEP FROM JOBENT BUFFER_^1_%INA 1_-BUFFER._^1_%SQZ OUT_^1_%INQ 1_^1_%JMP* LOOP_^1OUT_"STQ MIB_*CLEAR INTERMODULE LOCKOUT FLAG_^1_%LDA JBPROE_'GET RETURN_9**MSOS 4.0_^1€€_%STA LBL7+1_'TO JOBENT_:**MSOS 4.0_^1LBL1_!ENQ 1_P**MSOS 4.0_^1_%LDA* (SM),Q_^1_%LDQ* (SM)_^1_%LLS_!8_^1_%STQ* TEMP_^1_%SPC_!1_^1_%ENQ_!LTAB-TAB1-1_^1LBL2_!LDA* TAB1,Q_^1_%SUB* TEMP_^1_%SAZ_!LBL3-*-1_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* LBL2_^1_%SPC_!1_^1LBL2A ENQ 5_P**MSOS 4.0_^1LBL3_!STQ* TEMP_)REQUIRED TO BRING IN JPLGO_)**MSOS 4.0_^1_%INQ -2_O**MSOS 4.0_^1_%SQP LBL8_)NO€€T *X OR *X,N_5**MSOS 4.0_^1_%ENQ 1_P**MSOS 4.0_^1_%LDA* (SM),Q_'CHECK FOR N ON *X_2**MSOS 4.0_^1_%EOR- HFFFF_L**MSOS 4.0_^1_%SAN 2_P**MSOS 4.0_^1_%ENQ 1_P**MSOS 4.0_^1_%JMP* *+2_N**MSOS 4.0_^1_%ENQ 2_P**MSOS 4.0_^1_%JMP* LBL9_)SCHEDULE JPLGV4 TO EXECUTE_)**MSOS 4.0_^1LBL8_!SQN 1_P**MSOS 4.0_^1_%JMP* LBL3A_L**MSOS 4.0_^1_%INQ -1_O**MSOS 4.0_^1_%SQN 1_P**MSOS 4.0_^1_%JMP* LBL3€€A_L**MSOS 4.0_^1_%INQ -2_O**MSOS 4.0_^1_%SQN LBL5_M**MSOS 4.0_^1LBL3A LDA* (LOADEP)_$IS THE LOADER ALREADY IN CORE_^1_%SAN LADDON_'YES, GO ON_^1_%RTJ PREJOB_'NO, GET IT_^1LADDON LDQ* TEMP_^1_%LDA* TABLOC,Q_I**MSOS 4.0_^1_%AAQ_!A_^1_%INA_!TABLOC-LBL4_^1_%STA* LBL4_^1_%RTJ* *_^1LBL4_!NUM_!$0000_^1_%JMP* RETRN_^1LBL5_!ENQ 2_,IS THIS A LOAD AND GO STATEMENT_#**MSOS 4.0_^1_%LDA€€* (SM),Q_K**MSOS 4.0_^1_%ENQ 1_P**MSOS 4.0_^1_%LDQ* (SM),Q_K**MSOS 4.0_^1_%LLS 8_P**MSOS 4.0_^1_%TRQ A_P**MSOS 4.0_^1_%SUB =N$4F2C_J**MSOS 4.0_^1_%SAZ LBL6_)YES_@**MSOS 4.0_^1_%SUB =N$D3_(*LGO FROM STANDARD INPUT_+**MSOS 4.0_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* LBL2A_(NO, LOAD FROM LIBRARY_.**MSOS 4.0_^1LBL6_!JMP* LBL3A_L**MSOS 4.0_^1LBL9_!ENA 5_P**MSOS 4.0_^1_%JMP* LBL7_M**MSOS €€4.0_^1_%SPC_!1_^1* TABLE OF JOB PROCESSOR LOADER TYPE REQUEST_^1TAB1_!NUM $58FF_(X JP PROCESSOR STATEMENT_+**MSOS 4.0_^1_%ALF 1,X,_)X,N JP PROCESSOR STATEMENT_)**MSOS 4.0_^1_%NUM $4CFF_(L_!JP PROCESSOR STATEMENT_)**MSOS 4.0_^1_%ALF 1,L,_)L,LU JP PROCESSOR STATEMENT_(**MSOS 4.0_^1_%ALF 1,LG_)LGO JP PROCESSOR STATEMENT_)**MSOS 4.0_^1LTAB_!BSS_!LTAB(0)_^1_%SPC_!1_^1* TABLE OF JOB€€ PROCESSOR LOADER PROGRAMS_^1TABLOC ADC RBLOAD-*_I**MSOS 4.0_^1_%ADC RBLOAD-*_I**MSOS 4.0_^1_%ADC RBLOAD-*_I**MSOS 4.0_^1_%ADC RBLOAD-*_I**MSOS 4.0_^1_%ADC RBLOAD-*_I**MSOS 4.0_^1_%ADC_!TRLOAD-*_^1_%SPC_!1_^1TEMP_!NUM_!$0000_^1F2_#ADC FILE2_^1F3_#ADC_!FILE3_^1LGOMOD NUM 0_P**MSOS 4.0_^1ERRBUF NUM 0_P**MSOS 4.0_^1GOLOAD NUM $FFFF_L**MSOS 4.0_^1_%EJT_]_^1********************€€*********************************_^1_%SPC_!1_^1***_!*ENTRY POINT JOB PROCESSOR STATEMENT_^1* THIS IS A PROGRAM LOAD AND EXECUTION PROGRAM_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1TRLOAD NOP_!0_)ENTRY POINT_^1_%ENQ_!3_^1TRL_"LDA* (SM),Q_#CHECK FOR LIBEDT_^1_%SUB* TAB,Q_^1_%SAN_!TRL0-*-1_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* TRL_^1_%LDQ LIBET_^1_€€%JMP- ($22),Q_%GET LIBEDT SCHEDULED_^1_%SPC_!1_^1TRL0_!LDQ* SM_(ABS. LOCATION OF J.P._^1*_8STATEMENT._^1_%ENA 8_,PROGRAM LOAD AND EXECUTE FROM LIB_!**MSOS 4.0_^1_%RTJ_!LOADLR_^1_%SAP TRL2_M**MSOS 4.0_^1_%JMP* JBP_*LOADER ERROR-ABORT JOB_,**MSOS 4.0_^1TRL2_!ENQ 0_P**MSOS 4.0_^1_%STQ- $F3_*ZERO $F3 - LOC OF BREAKPOINT_^1_%ENQ 3_P**MSOS 4.0_^1_%JMP* LBL9_)GET JOB EXECUTED_3**MSOS€€ 4.0_^1TAB_"ALF 3,*LIBEDT_((NOTE THAT T IS IN NEXT WORD)_^1_%NUM_!$54FF_^1 SPC 1_]_^1*****************************************************_^1_%SPC_!1_^1JOBP3 NUM_!$0000_$ABS. LOC._^1_%NUM $0000_(NOT USED_^1SM_#NUM_!$0000_$ABS. L_^1JOBP_!NUM_!$0000_$ABS. LOC._^1JO4_"NUM_!$0000_$ABS. LOC._^1JO3_"NUM 0_^1_%NUM 0_,NOT USED_^1BPS_"NUM_!$0000_$ABS. LOC._^1RI_#NUM_!$0000_$ABS. LOC._^€€1LOADEP NUM_!$0000_$ABS. LOC._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1RETRN ENQ 14_+INDEX TO RF3 IN JOBPRO_^1LBL5GO ENA 1_,INDEX TO SCHEDULE JOBPRO_+**MSOS 4.0_^1LBL7_!JMP+ 0_P**MSOS 4.0_^1_%EJT_]_^1*****************************************************_^1_%SPC_!1_^1***_!*L JOB PROCESSOR STATEMENT_^1* THIS ROUTINE INSTRUCTS THE LOADER TO L€€OAD_^1* RELOCATABLE BINARY INFORMATION._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1RBLOAD NOP 0_,ENTRY POINT_^1_%LDA* TEMP_M**MSOS 4.0_^1_%INA -4_O**MSOS 4.0_^1_%SAZ 2_P**MSOS 4.0_^1_%ENA 0_P**MSOS 4.0_^1_%JMP* LOAD_M**MSOS 4.0_^1_%ENQ 2_P**MSOS 4.0_^1_%LDA* (SM),Q_K**MSOS 4.0_^1_%EOR =N$2C4E_J**MSOS 4.0_^1_%SAZ 2_P**MSOS 4.0_^1_%ENA 1_P€€**MSOS 4.0_^1_%JMP* *+2_N**MSOS 4.0_^1_%ENA 2_P**MSOS 4.0_^1_%STA* LGOMOD_'SET *LGO,N STATEMENT INDICATOR_$**MSOS 4.0_^1LOAD_!ADD* SM_O**MSOS 4.0_^1_%INA_!1_^1_%ALS_!1_^1LOAD1 STA- I_P**MSOS 4.0_^1_%RTJ_!ASCHEX_$NUMBER IS GIVEN._^1_%SQP_!RBL1-*-1_^1ERR_"JMP* ERRJO4_'INPUT ERROR._^1_%SPC_!1_^1RBL1_!LDQ- I_P**MSOS 4.0_^1_%STQ* NEXTI_(SAVE INPUT BUFFER CURRENT ADDRESS_!**MSOS 4.0_^1€€_%SAN RBL2B_L**MSOS 4.0_^1_%JMP* RBL2_)NO LU BY USER - USE STANDARD_^1RBL2B LDQ LOG1_^1_%TCQ_!Q_^1_%AAQ_!Q_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* ERRJO4_^1_%STA* SAVLU_(SAVE LU NO._^1_%TRA Q_^1_%LDQ+ LOG1A,Q_%PICK-UP POINTER TO PHSTAB_^1_%ENA 2_^1_%AND- 8,Q_*CK BIT TO ALLOW UNPROTECTED READS_^1_%SAZ EREX_)IF ZERO, READ BIT NOT SET_^1_%ENA 1_^1_%AND- 8,Q_*CHECK PROTECTED BIT_^1_%SA€€Z RBL1A_)IF PROTECTED BIT SET - ERROR_^1EREX_!JMP* ERRJO4_^1RBL1A LDA* SAVLU_(RESTORE LU IN A_^1RBL1B ALS 4_,NUMBER GIVEN_7**MSOS4.0*_^1_%JMP*_!RBL3_^1_%SPC_!1_^1RBL2_!LDA* LGOMOD_'CHECK IF *LGO STATEMENT_+**MSOS4.0*_^1_%SAZ RBL2A_L**MSOS4.0*_^1_%LDA- $B3_*FOR NO. NOT GIVEN ON *LGO_***MSOS4.0*_^1_%JMP* RBL1B_(USE STANDARD SCRATCH LU_,**MSOS4.0*_^1RBL2A LDA- H8000_(FOR NO. NOT€€ GIVEN ON$L_-**MSOS4.0*_^1RBL3_!RTJ LOADLR_'USE STANDARD INPUT LU_.**MSOS4.0*_^1_%SAZ RBL3A_(NO,ERROR_;**MSOS4.0*_^1_%INA 0_,CHECK FOR 65K ADDRESS WITH_)**MSOS4.0*_^1_%SAN RBL5_)A CONTROL STATEMENT_0**MSOS4.0*_^1_%JMP* JBP_*LOADER ERROR DISCONTINUE LOADING_"**MSOS 4.0_^1RBL3A LDQ* GOLOAD_'ALL LOADS COMPLETED_0**MSOS 4.0_^1_%SQP 2_P**MSOS 4.0_^1_%LDA* NEXTI_(NO,GET NEXT LOGICA€€L UNIT_+**MSOS 4.0_^1_%JMP* LOAD1_L**MSOS 4.0_^1_%LDQ* LGOMOD_'YES,*LGO STATEMENT_1**MSOS 4.0_^1_%SQZ RBL4_M**MSOS 4.0_^1_%JMP* LBL9_)YES,SCHEDULE EXECUTE MODULE_(**MSOS 4.0_^1RBL4_!JMP* (RBLOAD)_$RETURN TO JOBPRO_^1_%SPC_!1_^1RBL5_!ENQ 36_+CONTROL STATEMENT TERMINATED_'**MSOS 4.0_^1_%STA* JO3+1_(LOAD_?**MSOS 4.0_^1RBL7_!LDA* (JO3+1),Q_#MOVE STATEMENT TO THE JOB_***MSOS 4.0_^1_%S€€TA* (SM),Q_'PROCESSOR INPUT BUFFER_-**MSOS 4.0_^1_%INQ -1_O**MSOS 4.0_^1_%SQM RBL9_)MOVE FINISHED_6**MSOS 4.0_^1_%JMP* RBL7_)NO_A**MSOS 4.0_^1RBL9_!LDA* SM_+YES,SET INDICATOR FOR JOBPRO MODULE **MSOS 4.0_^1_%STA JOBIND_K**MSOS 4.0_^1_%JMP* RBL3A_L**MSOS 4.0_^1_%SPC_!1_^1MIBI_!ADC_!MIB_^1_%SPC_!1_^1*_8SET UP TO RETURN TO J04 PRINTOUT_^1ERRJO4 LDA =N$3034_%PUT AN 04 IN TRANTA LOC€€ATION_'**MSOS 4.0_^1_%JMP* ERJO3A_'FOR ERROR MESSAGE_2**MSOS 4.0_^1*_8SET UP TO RETURN TO J03 PRINTOUT_^1ERJO3 LDA =N$3033_%PUT 03 IN TRANTA ERROR INDICATOR_"**MSOS 4.0_^1ERJO3A STA* (ERRBUF)_$FOR ERROR MESSAGE_2**MSOS 4.0_^1_%ENQ 6_,INDEX TO ERROR ROUTINE IN JOBPRO_"**MSOS 4.0_^1_%JMP* LBL5GO_^1JBP_"ENA -0_+LOADER ERROR-ABORT JOB_,**MSOS 4.0_^1_%JMP* ERJO3A_^1SAVLU ADC 0_,SA€€VE LU HERE WHILE CHECKING CLASS CODE_^1NEXTI NUM 0_P**MSOS 4.0_^1_%SPC 2_^1_%EJT_]_^1_%SPC_!2_^1_%SPC_!1_^1*_8READ MASS MEMORY SUBROUTINE_^1READMM 0_"0_^1_%STA* SN+1_^1_%STQ* SN_+Q HAS MSB, A HAS LSB OF MM ADDRESS_^1_%RTJ- ($F4)_^1_%NUM $4800,0_J**MSOS 4.0_^1TH_#NUM_!$0000,$8C2_^1NW_#NUM_!$0000_^1FL_#NUM_!$0000_^1SN_#NUM_!$0,$0_^1_%LDA* TH_+WAIT FOR COMPLETION_^1_%SAZ 1_^1_%J€€MP* *-2_^1_%JMP* (READMM)_^1_%EJT_]_^1*****************************************************_^1_%SPC_!1_^1* THIS SUBROUTINE JUMPS TO AND IS RETURN FROM THE_^1* LOADER_]_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1XSWAP ADC_!SWAPCK_%POINTER TO UNPIO RESET_^1UNPIOS ADC UNPIO_(POINTER TO UNPIO SWITCH_^1QSAV_!ADC 0_^1LOADLR 0_"0_^1_%RTJ* LLR_*GIVE€€ THE LOADER CONTROL_^1_%STQ* QSAV_^1_%LDQ- $EE_^1_%SPB_!0_)SET PROTECT BIT FOR_^1_%ENQ_!0_)CLEAR FLAG_^1_%STQ* (LOADI)_^1_%EIN 0_,RETURN LOCATION_^1_%LDQ* QSAV_^1_%JMP* (LOADLR)_!RETURN TO CALLING PROGRAM._^1LLR_"0_"0_^1_%STQ* QSAV_^1_%LDQ* (LOADEP)_$CHECK IF LOADER PRESENT_^1_%SQN LOADL1_^1_%JMP* ERJO3_^1LOADL1 STQ* LOADL2+1_$LOCATION OF LOADER_^1_%RAO* (LOADI)_%SET FLAG FOR €€PROTECT PROCESSOR_^1*_7TO LET LOADER READ AND WRITE_^1*_7BELOW THE SCRATCH AREA._^1_%LDQ* LLR_*LOADER RETURN ADDRESS IS AT RTJ LLR PLUS 1_^1_%STQ JPRET1_'PATCH RETURN IN TRVEC MODULE_^1_%LDQ =XJPRETN_$RETURN FROM LOADER TO JPRETN IN TRVEC MODULE_^1_%STQ JPRET_(PATCH THE PRESET TABLE IN LOCORE_^1_%STQ- $EE_'CLEAR PROTECT BIT FOR_^1_%CPB_!0_*RETURN LOCATION._^1_%LDQ* QSAV_^1LOADL€€2 JMP+ 0_^1LOADI ADC LOADIN_^1_%EJT_]_^1*****************************************************_^1_%SPC_!1_^1***_!*P JOB PROCESSOR STATEMENT_^1* THIS IS THE PRELOAD INITIALIZATION ROUTINE_^1_%SPC_!1_^1* LOADSD_!- MASS STORAGE SYSTEM DIRECTOR TABLE LOC._^1* LOADEP_!- LOADER ENTRY POINT_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1PREJOB NOP_!0_)€€ENTRY POINT_^1_%LDA- $F7_'SET TEMPORARY HIGHEST AND_^1_%STA- $ED_(LOWEST UNPROTECTED LOCATION_^1_%INA 1_P**MSOS 4.0_^1_%STA* FWALOD_'SET FWA BASE FOR LOADER_+**MSOS 4.0_^1_%LDA- $F6_^1_%STA- $EC_^1_%STA* LWALOD_'SET LWA BASE FOR LOADER_,**MSOS 4.0_^1_%SPC_!1_^1_%LDQ* LSD_'LOAD LOADER INTO HIGH CORE_^1_%ADQ- $EB_^1_%LDA- 4,Q_^1_%STA* NW_+LOADER SIZE_^1_%SUB- $F6_^1_%TCA_!A_€€)FIRST WORD ADDRESS_^1_%STA* FL_^1_%STA_!(LOADEP)_^1_%LDA- 6,Q_^1_%LDQ- 5,Q_*MSB IN Q, LSB IN A_^1_%SPC_!1_^1_%RAO* (UNPIOS)_$SET UNPIO SWITCH_^1_%RTJ* READMM_%READ IN LOADER FROM MASS STORAGE_^1_%SPC_!1_^1PJ4_"RTJ* (XSWAP)_$CLEAR UNPIO SWITCH_^1_%RTJ* *+1_N**MSOS 4.0_^1PJ5_"0_"0_P**MSOS 4.0_^1_%LDA =XFWALOD-PJ5 SET UP Q TO POINT TO ADDRESS_'**MSOS 4.0_^1_%ADD* PJ5_*CONTAINING €€ FWA-LWA-BASES FOR_%**MSOS 4.0_^1_%TRA Q_,LOADER_=**MSOS 4.0_^1_%ENA 1_P**MSOS 4.0_^1_%RTJ* LOADLR_K**MSOS 4.0_^1_%JMP* (PREJOB)_!RETURN_^1_%SPC_!1_^1LSD_"ADC_!LOADSD_^1FWALOD NUM 0_P**MSOS 4.0_^1LWALOD NUM 0_P**MSOS 4.0_^1_%NUM 0_P**MSOS 4.0_^1_%EJT_]_^1***********************************************************_^1*_]_^1* THIS IS A DECIMAL ASCII TO HEX ONVERSION ROUTINE_^1A€€SCHEX 0_"0_^1_%ENA_!0_^1_%STA* TEMP1_$SET TEMP LOC. TO ZERO_^1NEXT_!LDQ- I_^1_%LRS_!1_)LEFT OR WRITE CHAR. COUNT_^1_%SQP 2_P**MSOS4.0*_^1_%ADQ- H8000_L**MSOS4.0*_^1_%INQ -1_O**MSOS4.0*_^1_%LDQ- ($22),Q_^1_%SAP_!2_^1_%QRS_!8_)LEFT CHARACTER_^1_%JMP* *+3_^1_%RAO- I_)RIGHT CHAR. INCREASE WORD_^1_%RAO- I_+COUNT_^1_%CLR_!A_^1_%LRS_!8_^1_%ALS_!8_^1_%TRA_!Q_)A AND Q CONTAINS CHARA€€CTER_^1_%LDA- I_^1_%EOR- $3_^1_%STA- I_^1_%TRQ_!A_^1_%EOR- $A_(CHECK FOR $FF_^1_%SAN NEXT1_(NOT $FF CHECK IF COMMA_-**MSOS 4.0_^1_%ENA 0_P**MSOS 4.0_^1_%STA GOLOAD_K**MSOS 4.0_^1_%JMP* OVER_M**MSOS 4.0_^1NEXT1 EOR =N$D3_(THIS CHARACTER A COMMA_-**MSOS 4.0_^1_%SAN_!CHECK-*-1_^1OVER_!ENA_!0_^1_%LDQ* TEMP1_$DECIMAL HEX HUMBER_^1_%LLS_!8_^1_%SAZ_!OK-*-1_#CHECK FOR OVER TWO CH€€ARACTERS._^1_%JMP* ERR1_^1OK_#LLS_!4_)COMPUTE HEX NUMBER_^1_%QLS_!4_^1_%STQ* TEMP1_^1_%SAZ_!2_^1_%MUI_!=N$A_^1_%ADD* TEMP1_$A CONTAINS HEX NUMBER_^1_%ENQ_!0_)Q - NO ERROR._^1_%JMP* (ASCHEX)_!RETURN_^1_%SPC_!1_^1CHECK INQ_!-$30_%CHECK IF BETWEEN $30 AND $39_^1_%TRQ_!A_^1_%SQM_!ERR1-*-1_^1_%INQ_!-10_^1_%SQM_!CK1-*-1_^1ERR1_!LDQ- LPMSK+16_#ERROR RETURN Q=$FFFF_^1_%JMP* (ASCHEX)€ _^1CK1_"LDQ* TEMP1_$STORE HEX. DIGIT_^1_%QLS_!4_^1_%AAQ_!A_^1_%STA* TEMP1_^1_%JMP* NEXT_%GET NEXT CHARACTER._^1TEMP1 NUM_!$0000_^1_%SPC 3_^1_%END JBL_^__ PJPCHGE CSY/ D44 P€1_%NAM JPCHGE_'DECK-ID D44 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$JPCHGE-STATEMENT PROCESSOR FOR, *K * CSY *V_)**MSOS 4.0_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1***_!*K JOB PROCES€€SOR STATEMENT_^1* THIS STATEMENT ALLOWS THE OPERATOR THE OPTION OF_^1* SELECTING DEVICES FOR SYSTEM UNITS OTHER THAN_^1* THOSE CURRENTLY USED._^1**********_]_^1_%SPC_!2_^1_%ENT CHANGE_^1_%ENT_!JPCG_^1_%SPC_!1_^1_%EQU ZERO($22)_H**MSOS 4.0_^1_%EXT JBCNCL_K**MSOS 4.0_^1_%EXT MIINP_(BUFFER ADDRESS IN MINT_-**MSOS 4.0_^1_%EXT VINPV4_K**MSOS 4.0_^1_%EXT NUMLU_(NO OF LU IN SYSBUF_^€€1_%EXT* ASCHEX_^1_%EXT IUP_^1_%EXT TRNVEC_'ABS. ADDR. OF TRANTA BUFFER IN JOBENT (TRVEC)_^1_%EXT_!FILE2_^1_%EXT_!LOG1A_^1_%EXT MIB,MIBX_$FLAGS IN MINT_^1_%EXT JBPROE_^1_%EXT MIBUF_^1_%EQU LPMSK(2)_^1_%EQU LEVEL($EF)_^1_%SPC_!1_^1JPCG_!NUM_!$C8FE_$ENTRY POINT - (LDA* *-1)_^1_%STA* ABSLOC_'SAVE ABS LOC OF PROGRAM_^1_%LDQ- LEVEL_L**MSOS 4.0_^1_%SQN GOGO_)CALLED FROM MINT_3*€€*MSOS 4.0_^1_%STA* (F2)_)FWA TO FILE 2_^1_%CLR A_^1_%STA MIB_*CLEAR MIB SWITCH - LOCK OUT FOR INTER MODULE_^1*_;TRANSFERS_^1_%LDQ MIBUF_(CALLED FROM JOBPRO_1**MSOS 4.0_^1_%JMP* REENTR_K**MSOS 4.0_^1GOGO_!LDQ =XMIINP_J**MSOS 4.0_^1_%SPC_!1_^1REENTR LDA- ($22),Q_%Q IS POINTER TO INPUT BUFFER AT THIS POINT_^1_%EOR_!=N$2A56_^1_%STA*_!VSW_^1_%SAZ NCSY_M**MSOS 4.0_^1_%INA -$15_)IS €€IT *C_;**MSOS 4.0_^1_%SAN NCSY_)NO_A**MSOS 4.0_^1_%INQ 1_P**MSOS 4.0_^1_%LDA- ($22),Q_J**MSOS 4.0_^1_%EOR =N$5359_J**MSOS 4.0_^1_%SAN SET1_M**MSOS 4.0_^1_%LDA- 1,Q_*MAKE SURE A COMMA_2**MSOS 4.0_^1_%ALS 8_,FOLLOWS *CSY_7**MSOS 4.0_^1_%AND- $A_O**MSOS 4.0_^1_%INA -$2C_M**MSOS 4.0_^1_%SAZ SETCF_L**MSOS 4.0_^1SET1_!ENA 2_,NO_A**MSOS 4.0_^1_%JMP* RF3A+1_'SCHEDULE JPLOAD_4**MSOS€€ 4.0_^1SETCF RAO* CFLAF_(WIL BE STORING L.U. IN COSY UNIT LOC**MSOS 4.0_^1NCSY_!INQ 1_,INPUT BUFFER_7**MSOS 4.0_^1_%STQ- I_^1_%SPC_!1_^1_%RTJ* CHANGE_^1_%LDA* VLUFLG_'NO V PROCESSED GET OUT_-**MSOS 4.0_^1_%SAN GTOUT_^1_%LDQ TRNVEC_'JOBENT TRANTA TABLE_0**MSOS 4.0_^1_%LDA- 12,Q_)IS A JOB IN PROGRESS_/**MSOS 4.0_^1_%SAN GTOUT_(YES_@**MSOS 4.0_^1_%LDA* (IUPP)_^1_%STA VINPV4_K*€€*MSOS 4.0_^1GTOUT LDA- LEVEL_L**MSOS 4.0_^1_%SAZ RF3A-1_'BACK TO J.P._7**MSOS 4.0_^1SWAP_!CLR A_P**MSOS 4.0_^1_%STA MIBX_)DONE WITH MINT BUFFER_.**MSOS 4.0_^1_%RELEAS (JPCG-*+1),1,1_@**MSOS 4.0_^1_%ENA 1_,SCHEDULE JOBPRO_4**MSOS 4.0_^1RF3A_!ENQ 14_+INDEX TO RF3 IN JOBPRO_^1_%STA* INDEX_(INDEX TO PROPER MOD IN JOBENT_%**MSOS 4.0_^1_%LDA JBPROE_'SET UP RETURN_6**MSOS 4.0_^1_%€€STA- I_-TO JOBPRO_9**MSOS 4.0_^1_%LDA* INDEX_L**MSOS 4.0_^1_%JMP- (I)_*RETURN TO JOBENT_3**MSOS 4.0_^1_%SPC_!1_^1F2_#ADC_!FILE2_^1INDEX NUM 0_P**MSOS 4.0_^1_%SPC_!2_^1IUPP_!ADC_!IUP_^1QSAVE ADC 0_^1ABSLOC ADC 0_^1CFLAF NUM 0_P**MSOS 4.0_^1VLU_"NUM 0_P**MSOS 4.0_^1VLUFLG NUM -1_O**MSOS 4.0_^1_%SPC_!1_^1CHANGE NOP_!0_)ENTRY POINT_^1_%ENA_!-2_(SET COUNT TO -2_^1_%STA* COUNT_€€^1_%LDA* VSW_*CHECK IF *V OR *K_^1_%SAN C3-*-1_'A=NON ZERO IF *K_^1_%LDA =N$56_(A=0 SET COUNT+1 TO ENABLE THE_^1*_9PROCESSING OF THE *V STATEMENT_^1_%STA* COUNT+1_^1_%SPC_!1_^1C3_#LDQ* ABSLOC_'FIND ABS. LOC. OF BUFFER_^1_%ADQ =XBUF-JPCG_"LOCATION TO STORE ALPHA_^1_%ADQ* COUNT_'CHAR. INTO._^1_%SPC_!1_^1_%RTJ_!ASCHEX_^1_%SPC_!1_^1_%LLS_!16_^1_%SQN_!C5-*-1_^1_%LDQ* COUNT_^1_%SQZ€€_!1_)IF MORE THAN 3 WORDS READ_^1_%SQP_!ERR-*-1_%ERROR._^1_%STA* NUM,Q_$STORE L.U. NO. IN NUM ARRAY._^1_%RAO* COUNT_^1_%JMP* C3_^1_%SPC_!1_^1C5_#SQM_!C6-*-1_^1ERR_"JMP JO4ER_L**MSOS 4.0_^1_%SPC_!1_^1C6_#LDQ* COUNT_$LAST CHAR._^1_%SQZ_!C7-*-1_^1_%SQM_!C7-*-1_^1_%JMP* JO4ER_^1C7_#STA* NUM,Q_$STORE L.U. NO. IN NUM ARRAY._^1_%SQZ SAX-*-1_%Q=0 IF COUNT HAS GONE TO ZERO_^1_%INQ_!€€1_)SET UNUSED PORTION OF ARRAY_^1_%SET_!A_^1_%JMP* C7_^1_%SPC_!1_^1SAX_"ENA -3_^1_%STA- I_^1C8_#RAO- I_^1_%LDA* BUF,I_$CHARACTER_^1_%LDQ* NUM,I_$LOGICAL UNIT NO._^1_%SQP_!C14-*-1_^1_%JMP* (CHANGE)_!RETURN_^1_%SPC_!1_^1C14_"SQN C14XX_L**MSOS 4.0_^1_%JMP* JO8ER_(L.U. ZERO_:**MSOS 4.0_^1C14XX INA -$49_M**MSOS 4.0_^1_(SAN_%C9-*-1_^1C14A_!ENA 1_P**MSOS 4.0_^1_%RTJ* CADD_)GET €€THE RIGHT SYSTEM ADDRESS_'**MSOS 4.0_^1_(ENA_%2_^1_(STA*_$MASK_0MAY BE READ FROM_^1_(JMP*_$PROTST_.($F9) = UNIT NI FOR CURRENT DEVI_^1C9_%INA_%-3_^1_(SAN_%C11-*-1_^1_%ENA 3_,PUNCH_>**MSOS 4.0_^1_%RTJ* CADD_M**MSOS 4.0_^1_(ENA_%4_^1_(STA*_$MASK_0BE WRITTEN ON_^1_(JMP*_$PROTST_.LIST DEVICE_^1C11_$INA_%-4_^1_(SAN_%C13-*-1_^1_%ENA 2_,LIST_?**MSOS 4.0_^1_%RTJ* CADD_M**MSOS 4.0_^1_(ENA€€_%4_^1_(STA*_$MASK_0MAY BE WRITTEN ON_^1_(JMP*_$PROTST_.FOR CURRENT PUNCH DEVICE_^1VSW_"NUM_!0_^1COUNT NUM_!0,0,0_^1BUF_"NUM_!0,0,0_^1NUM_"NUM_!0,$FFFF_^1C13_"INA_!-6_^1_%SAN C13J-*-1_^1_%ENA_!2_^1_%STA*_!MASK_^1_%LDA* NUM+1,I_^1_%SAM C13X-*-1_^1_%RAO- I_^1_%LDA*_!BUF,I_^1_%INA_!-$41_U*_^1_%SAN C13Y-*-1_^1C13X_!ADQ_!=N$1000_^1_%JMP* C13Z_^1C13Y_!INA_!-1_^1_'SAZ_!1_^1C13J_!JMP€€* JO4ER_^1C13Z_!STA* VLUFLG_'SET V FLAG_9**MSOS 4.0_^1_%LDA* (IUPP)_'SAVE J P INPUT UNIT_/**MSOS 4.0_^1_%STA* VLU_N**MSOS 4.0_^1_%LDA =XIUP_L**MSOS 4.0_^1_%STA* LUADDR_K**MSOS 4.0_^1PROTST STQ* UNITNO_'SAVE NEW LU NUMBER_1**MSOS 4.0_^1_%LDA- LPMSK+9_^1_%LAQ A,Q_*SAVE LU ONLY_^1_%INA -1_^1_%SAN NOERR-*-1_^1_%JMP* JO4ER_(JUMP IF CORE ALLOCATOR_^1NOERR INA 1_^1_%SUB =XNUMLU_%€€GET NO OF LU FROM SYSBUF_^1_%SAZ CNTINU-*-1_"CONTINUE IF OK_^1_%SAM CNTINU-*-1_"CONTINUE IF OK_^1_%JMP* JO4ER_^1CNTINU LDQ LOG1A,Q_^1_(ENA_%1_^1_(AND-_$8,Q_0PROTECTED_^1_(SAZ_%1_3SKIP IF LEGITIMATE CHANGE_^1_%JMP* JO7ER_^1_(LDA*_$MASK_0UNIT NUMBER--DEVICE IS PROTECTED_^1_(AND-_$8,Q_1IF BIT 0 = 1_^1_(SAN_%1_^1PTDER JMP* JO8ER_(ERROR-EXIT_9**MSOS 4.0_^1_(LDA*_$UNITNO_.FINALLY--S€€ET NEW UNIT NUMBER_^1_(STA*_$(LUADDR)_,IN LOCATION RESERVED FOR IT_^1_(JMP*_$C8_2GO GET ANOTHER PARAM_^1LUADDR_!NUM_%0_^1UNITNO_!NUM_%0_^1MASK_#NUM_%0_^1JO4ER ENA 0_P**MSOS 4.0_^1COMEX LDQ TRNVEC_'TRANTA TABLE IN JOBENT_-**MSOS 4.0_^1COMEXX ADD =N$3034_J**MSOS 4.0_^1_%STA- 10,Q_M**MSOS 4.0_^1_%LDA- LEVEL_L**MSOS 4.0_^1_%SAZ JPXERR_K**MSOS 4.0_^1_%SET Q_P**MSOS 4.0_^1_%RTJ- (€€$F4)_(SCHEDULE JOB CANCEL WHICH WILL CALL **MSOS 4.0_^1_%NUM $1202_(IN JBKILL_:**MSOS 4.0_^1_%ADC JBCNCL_K**MSOS 4.0_^1_%JMP SWAP_)RELEASE CORE_7**MSOS 4.0_^1JPXERR ENA 1_,TELL JOBPRO_8**MSOS 4.0_^1_%ENQ 6_P**MSOS 4.0_^1_%JMP RF3A+1_'TO TERMINATE JOB_3**MSOS 4.0_^1JO7ER ENA 3_P**MSOS 4.0_^1_%JMP* COMEX_L**MSOS 4.0_^1JO8ER ENA 4_P**MSOS 4.0_^1_%JMP* COMEX_L**MSOS 4.0_^1CAD€zD_!NOP 0_P**MSOS 4.0_^1_%STQ* COUNT_L**MSOS 4.0_^1_%LDQ CFLAF_L**MSOS 4.0_^1_%SQZ SYS_N**MSOS 4.0_^1_%ADD- $E9_*THE STATEMENT WAS XCSY, PICK UP_^1HERE_!STA* LUADDR_'COSY L.U. ADDRESS_1**MSOS 4.0_^1_%LDQ* COUNT_L**MSOS 4.0_^1_%JMP* (CADD)_K**MSOS 4.0_^1SYS_"ADD* SADD_)STANDARD SYSTEM ADDRESSES_***MSOS 4.0_^1_%JMP* HERE_M**MSOS 4.0_^1SADD_!NUM $F8_N**MSOS 4.0_^1_%END_]_^__zPASCHEX CSY/ D45 P€1_%NAM ASCHEX_'DECK-ID D45 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$ASCII TO HEX CONVERSION_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* THIS IS A DECIMAL ASCII TO HEX CONVERSION ROUTINE._€€^1* UPON ENTRANCE THE FOLLOWING REGISTERS CONTAIN._^1*_!I - LOCATION OF 1ST CHARACTER._^1*_!Q = THE LOCATION TO STORE A ALPHA CHARACTER._^1* UPON EXIT._^1*_!A - PLUS ONE IS ERROR CONDITION_^1*_%ZERO - MORE WORDS FOLLOWING_^1*_%MINUS - NO MORE FOLLOWING_^1*_!Q - HEX NUMBER_^1*_!I - NEXT WORD LOCATION_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%€€ENT_!ASCHEX_^1_%SPC_!1_^1_%SPC_!1_^1ASCHEX NOP_!0_)ENTRY POINT_^1_%SPC_!1_^1_%STQ* LOCA_%LOC. OF ALPHA CHAR._^1_%ENA_!0_^1_%STA* TEMP_%ZERO TEMPORARY STORAGE_^1_%STA* COMMA_$ZERO COMMA COUNTER._^1_%SPC_!1_^1ASCH_!LDA- ($22),I_"INPUT WORD_^1_%TRA_!Q_^1_%ADQ_!=N$D3D3_^1_%SQZ_!ERR-*-1_^1_%ARS_!8_^1_%AND- $A_^1_%RTJ* SUB_^1_%RAO* COMMA_$INCREASE COMMA COUNTER._^1_%SQN_!ASCH1-*-1€€_^1_%LDA- ($22),I_#WORD_^1_%AND- $A_^1_%RTJ* SUB_^1_%RAO- I_)INCREASE WORD LOCATION_^1_%SQN_!ASCH1-*-1_^1_%JMP* ASCH_^1_%SPC_!1_^1ASCH1 SAM_!ASCH4-*-1_^1_%SAZ_!ASCH4-*-1_^1ERR_"ENA_!1_^1_%SPC_!1_^1ASCH2 JMP* (ASCHEX)_!RETURN_^1_%SPC_!1_^1ASCH4 STA* TP_^1_%ENA_!0_^1_%STA* HEXNO_$HEX NO._^1_%ENA_!-3_^1_%STA* COMMA_$WORD COUNT_^1_%SPC_!1_^1ASCH5 LDA* TEMP_%CONVERSION WOR€€D - SHIFT 4_^1_%ALS_!4_^1_%STA* TEMP_^1_%AND- $6_^1_%LDQ* COMMA_$CHECK IF LAST WORD_^1_%SQZ_!ASCH7-*-1_^1_%SAZ_!ASCH6-*-1 IF NO. ZERO_^1_%MUI* LOC+1,Q_^1_%ADD* HEXNO_^1_%STA* HEXNO_^1_%SPC_!1_^1ASCH6 RAO* COMMA_$INCREASE WORD COUNT_^1_%JMP* ASCH5_^1_%SPC_!1_^1ASCH7 ADD* HEXNO_$LAST CHARACTER - ADD SUM_^1_%TRA_!Q_^1_%LDA* TP_^1_%JMP* ASCH2_$RETURN_^1_%NUM_!$3EB,$64_^1L€€OC_"NUM_!$A_^1_%SPC_!1_^1SUB_"NOP_!0_)ENTRY POINT._^1_%ENQ_!$2C_^1_%EAQ_!Q_)CHECK FOR COMMA._^1_%SQN_!SUB2-*-1_^1_%LDQ* COMMA_$YES - IS THIS FIRST CHAR._^1_%ENA_!0_)A EQUAL ZERO_^1_%SQN_!SUB0-*-1_^1_%ENQ_!-1_(FIRST CHARACTER COMMA_^1_%LDA- ($22),B_"CHECK LAST CHAR. OF_^1_%AND- $A_)PREVIOUS WORD FOR COMMA._^1_%INA_!-$2C_^1_%SAN_!1_^1_%JMP* ERR_^1_%ENA_!0_^1_%ENQ_!0_^1_%JMP* (SU€€B)_^1SUB0_!SET_!Q_)Q EQUALS MINUS_^1SUB1_!JMP* (SUB)_$RETURN_^1_%SPC_!1_^1SUB2_!LDQ- $A_^1_%EAQ_!Q_)CHECK FOR $FF_^1_%SQZ_!4_^1_%LDQ_!=N$20_^1_%EAQ_!Q_^1_%SQN_!SUB3-*-1_^1_%SET_!A_)YES A AND Q MINUS_^1_%JMP* SUB1-1_^1_%SPC_!1_^1SUB3_!ENQ_!-$30_%CHECK FOR CHARACTER SMALLER_^1_%AAQ_!Q_*THAN $30_^1_%SQP_!SUB4-*-1_^1SERR_!ENA_!1_)YES - ERROR - A = ONE_^1_%JMP* SUB1-1_$RETURN_^1_%SP€€C_!1_^1SUB4_!ENQ_!-$3A_%CHECK FOR NUMERIC._^1_%AAQ_!Q_^1_%SQM_!SUB6-*-1_^1_%LDQ* TEMP_)CHECK TEMP TO SEE IF ALPHA CHARACTER_^1*_8FOLLOWS NUMERIC CHARACTER_^1_%SQN SUB4A-*-1_#Q=NON ZERO IF NUMERIC CHARACTER FIRST_^1*_9THIS IS AN ERROR_^1_%LDQ* (LOCA)_'Q=0 ALPHA CHARACTER IS FIRST_^1*_9CHECK TO SEE IF THERE WAS AN ALPHA_^1*_9CHARACTER BEFORE THIS ONE._^1_%SQZ SUB4B-*-1_#Q=0 THIS €€IS FIRST ALPHA CHARACTER_^1SUB4A CLR Q_,AN ERROR CONDITION HAS OCCURRED_^1*_92 ALPHA CHARACTERS FOUND BETWEEN DELIMETERS_^1*_9OR AN ALPHA CHAR. FOLLOWS A NUMERIC CHAR._^1_%JMP* ERR_*RETURN WITH AN ERROR INDICATION_^1SUB4B STA* (LOCA)_'STORE CHARACTER_^1SUB5_!ENA_!0_)A = Q = 0_^1_%ENQ_!0_^1_%JMP* (SUB)_$RETURN_^1_%SPC_!1_^1SUB6_!AND- $6_(STORE 4 BIT NUMERIC_^1_%LLS_!16_(NUMBER €ΤIN 4,I OF_^1_%LDA* TEMP_^1_%ALS_!4_^1_%AND- $16_^1_%AAQ_!A_^1_%STA* TEMP_^1_%JMP* SUB5_^1_%SPC_!1_^1LOCA_!NUM_!$0000_^1TP_#NUM_!$0000_^1TEMP_!NUM_!$0000_^1COMMA NUM_!$0000_^1HEXNO NUM_!$0000_^1_%END_]_^__ΤPT13 CSY/ D46 P€1_%NAM T13_*DECK-ID D46 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$GET-FILE REQUEST PROCESSOR_^1_%SPC 1_^1*****************************************************_^1_%SPC 1_^1* THIS IS THE GET-FILE ROUTINE_^1* THIS IS THE GET-FI€€LE REQUEST PROCESSOR_^1* THIS REQUEST IS USED TO ACCESS PERMANENT FILES_^1* WHICH ARE LOCATED IN THE PROGRAM LIBRARY._^1* GET-FILE IS CHECKED FOR BEING BUSY, IF SO, THE_^1* REQUEST IS THREAD AND A RETURN IS MADE TO THE_^1**_!A REGISTER NEGATIVE IF CALL IS INDIRECT._^1* DISPATCHER._^1** UPON ENTRANCE THE FOLLOWING REGISTERS CONTAIN._^1**_!I ADDRESS OF VOLATILE_^1**_!Q LOCATION OF GE€€T-FILE_^1**_#0 - Q REGISTER_^1**_#1 - A REGISTER_^1**_#2 - I REGISTER_^1**_#3 - RETURN LOCATION_^1**_#4 - UNUSED_^1**_#5 - LOC. OF REQUEST PARAMETER LIST._^1**_#6 - UNUSED_^1**_#7 - UNUSED_^1*_$8_"- INDIRECT REQ INDICATION = MINUS WHEN INDIRECT **MSOS 4.0_^1_%SPC 1_^1*****************************************************_^1_%SPC 2_^1_%ENT T13_^1_%SPC 1_^1_%EXT €€ SCHERR_^1_%EXT SWAPCK_^1_%EXT LOCF,LPTRS_^1_%EXT FILE2,MIB_^1_%EXT COMPV4_K**MSOS 4.0_^1_%EQU SABS($BD)_^1_%EQU NZERO($12),ZERO($22),BOTOP($F6)_2**MSOS 4.0_^1_%EQU LPMSK(2)_I**MSOS 4.0_^1_%EQU CABS($BE)_^1_%EQU REQXT($B9),DISP($EA)_^1_%SPC 2_^1EREQST NUM $C8FE_(GET LOCATION OF T13_^1_%JMP T13SUP_'GO SETUP INITIAL PARAMETERS_^1T13_"STQ T13LOC_K**MSOS 4.0_^1_%LDA- 8,I_N€€**MSOS 4.0_^1_%SAM GFA_N**MSOS 4.0_^1_%LDA- 3,I_^1_%INA 10_+INCREASE RETURN ADDRESS_^1_%STA- 3,I_*BY TEN._^1GFA_"LDQ- 5,I_*CHECK IF REQUEST ALREADY_^1_%LDA- 2,Q_*THREADED._^1_%SAZ GFB-*-1_%A=0 REQUEST NOT THREADED_^1_%JMP SCHERR_'REQUEST ALREADY THREADED ERROR_^1_%SPC 1_^1GFB_"LDA GFBUSY_'CHECK IF GETFILE BUSY_.**MSOS 4.0_^1_%SAN GFB1-*-1_^1_%SET A_,SET THREAD LOCATION NEG€€ATIVE._^1_%STA- 2,Q_^1_%JMP* GF_^1_%SPC 1_^1GFB1_!SET A_,GET FILE BUSY._^1_%IIN 0_^1_%STA- 2,Q_*SET THREAD LOC. NEGATIVE._^1_%LDA- $11_^1_%LAQ Q_^1_%LDA GFTHED_K**MSOS 4.0_^1_%SAP GFB4-*-1_$CHECK IF ANY REQUESTS THREADED_^1_%STQ GFTHED_K**MSOS 4.0_^1GFB2_!EIN 0_^1GFB3_!JMP- (REQXT)_^1_%SPC 1_^1GFB4_!LDQ* GFTHED_'CHECK EACH REQUEST THREAD_^1GFB5_!TRQ A_,FOR A NEGATIVE VALU€€E._^1_%LDQ- 2,Q_^1_%SQM GFB6-*-1_^1_%JMP* GFB5_^1_%SPC 1_^1GFB6_!TRA Q_^1_%LDA- 5,I_*STORE REQUEST LOC. IN_^1_%AND- $11_^1_%STA- 2,Q_*THREAD OF LAST REQUEST._^1_%JMP* GFB2_^1_%SPC 2_^1GF_#STQ* GFBUSY_'LOC. OF REQUEST_^1_%LDA- I_,SAVE I REGISTER_^1_%STA* SAVI_^1_%STQ- I_,STORE REQUEST LOC. IN I REG._^1UNPROT LDQ- (ZERO),I_I**MSOS 4.0_^1_%LDA- 7,I_N**MSOS 4.0_^1_%QLS 1_,IS D BIT€€ SET_7**MSOS 4.0_^1_%SQP UN1_*NO_A**MSOS 4.0_^1_%SAM UN1A_)D IS SET AND I IS NEGATIVE_)**MSOS 4.0_^1UN1_"LDQ- 9,I_*NEGATIVE SECTOR_4**MSOS 4.0_^1_%SQP 1_^1UN1A_!JMP* ERRGO_(YES_@**MSOS 4.0_^1_%AAQ A_,I AND SECTOR ARE ZERO -- ERROR_$**MSOS 4.0_^1_%SAZ UN2_*YES_@**MSOS 4.0_^1_%LDA- 6,I_N**MSOS 4.0_^1_%SAZ UN3_*W2=0_?**MSOS 4.0_^1*_$THIS COMPARE ALLOWS FOR FILES LARGER THAN 32K_€€)**MSOS 4.0_^1_%LDQ- 4,I_*IF W2 LESS THAN W1_1**MSOS 4.0_^1_%RTJ* (COMPV)_J**MSOS 4.0_^1_%SAZ UN2_*EQUAL ERROR_8**MSOS 4.0_^1_%INA 0_,LESS THAN ERROR_4**MSOS 4.0_^1_%SAZ UN2_N**MSOS 4.0_^1_%STA* NS1_*WORDS-1 TO READ_4**MSOS 4.0_^1_%ADD- 5,I_*DOES BUFFER END IN PROTECTED CORE_!**MSOS 4.0_^1_%LDQ- BOTOP_L**MSOS 4.0_^1_%RTJ* (COMPV)_J**MSOS 4.0_^1_%SAZ UN2_*YES_@**MSOS 4.0_^1_%INA€€ 0_P**MSOS 4.0_^1_%SAZ UN3_*NO_A**MSOS 4.0_^1UN2_"JMP* ERRGO_L**MSOS 4.0_^1UN3_"LDA- 7,I_*ADJUST LOCATION OF NAME_,**MSOS 4.0_^1_%SAM UN4_N**MSOS 4.0_^1_%ADD- 10,I_)PARAMETER ADD. LIST - FROM PROTECT **MSOS 4.0_^1_%EOR- NZERO+15_$BIT 15=0,PART1---_!=1,PART0_'**MSOS 4.0_^1_%STA- 7,I_N**MSOS 4.0_^1UN4_"LDA- 1,I_N**MSOS 4.0_^1_%STA* C_,MOVE COMPLETION ADDRESS_^1_%LDA- 5,I_*AND STA€€RTING ADDRESS INTO_^1_%STA* S_,T13 ROUTINE_^1GFM_"LDA- 4,I_*SAVE W1_^1_%STA* W1_^1_%LDA- 6,I_*SAVE W2_^1_%STA* W2_^1_%LDA- 9,I_*CHECK IF SECTOR NO IS SPECIFIED_^1_%SAZ GT4-*-1_%A=0 NO SECTOR SPECIFIED_^1_%LDA* W2_+SECTOR SPECIFIED CHECK IF W2_^1_%SAZ GT4_*TREAT AS IF ALL PARAM = 0_(**MSOS 4.1**_^1*_8MANY WORDS TO READ_1**MSOS 4.0_^1GT4A_!JMP* GT9B_)GET THE FILE_7**MSOS 4.0_^1GT4_€€"LDQ- 7,I_*CHECK IF FILE NAME SPECIFIED_^1GT5_"SQM GT6_N**MSOS 4.0_^1GT5A_!ADQ- $32_N**MSOS 4.0_^1_%STQ- 7,I_*RESET THE 16 BIT ADDRESS_+**MSOS 4.0_^1_%JMP* GT6A_M**MSOS 4.0_^1GT6_"LDA- LPMSK+15_I**MSOS 4.0_^1_%LAQ Q_P**MSOS 4.0_^1GT6A_!LDA- (ZERO),Q_I**MSOS 4.0_^1_%STA* NAME_^1_%LDA- 1,Q_^1_%STA* NAME+1_^1_%LDA- 2,Q_^1_%STA* NAME+2_^1_%RTJ SPD_*GO SEARCH PROGRAM LIBRARY FOR NAME€€_^1_%LDQ* W1_O**MSOS 4.0_^1_%LDA* NS_+NUMBER OF WORDS IN FILE_,**MSOS 4.0_^1_%SQN GT91_)PARTAIL READ_7**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%STA* NS1_*READ ENTIRE FILE_3**MSOS 4.0_^1_%JMP* GTA_N**MSOS 4.0_^1GT91_!LDQ* W2_O**MSOS 4.0_^1_%SQN GT9A_)PARTAIL READ_7**MSOS 4.0_^1_%INA 1_,PARTAIL READ TO END OF FILE_(**MSOS 4.0_^1_%SUB* W1_+STARTING WITH W1_3**MSOS 4.0_^1_%STA* NS1_N**€€MSOS 4.0_^1_%JMP* GTA_N**MSOS 4.0_^1GT9A_!INA 1_P**MSOS 4.0_^1_%RTJ* (COMPV)_%IF W2 EXCEEDS NS ERROR_-**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ ERRGO_(ERROR_>**MSOS 4.0_^1GT9B_!LDA* NS1_N**MSOS 4.0_^1GTA_"ADD* S_,CHECK TO BE SURE ENDING_,**MSOS 4.0_^1_%LDQ- $F6_*ADDRESS IS IN UNPROTECTED CORE_$**MSOS 4.0_^1_%RTJ COMPV4_K**MSOS 4.0_^1_%EQU COMPV(*-1)_G**MSOS 4.0_^1_%SAZ ERRGO_L€€**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ GT10_)ADDRESS IS O.K._4**MSOS 4.0_^1ERRGO JMP* ERRC_)GO TO OUTPUT ERROR MESSAGE_)**MSOS 4.0_^1GT10_!LDA* T13LOC_'GET ADDRESS OF T13_^1_%ADD =XCOMP1-T13_!FORM COMPLETION ADDRESS_^1_%STA* CR_+SET COMPLETION ADDRESS_^1_%RAO* NS1_N**MSOS 4.0_^1_%LDA* S_,STARTING ADDRESS_^1_%STA* SA_^1_%LDA- 9,I_^1_%RTJ* WCONV_(CONVERT TO WORD ADDRESS_^1_%RTJ€€- ($F4)_L**MSOS 4.0_^1_%NUM $4202_^1CR_#NUM 0,0,$8C2_I**MSOS 4.0_^1NS1_"NUM 0_,NUMBER OF WORDS_4**MSOS 4.0_^1SA_#NUM 0_,STARTING ADDRESS_3**MSOS 4.0_^1SN_#NUM 0,0_*SECTOR NUMBER_6**MSOS 4.0_^1_%LDA* SAVI_)CHECK FOR NOT BEING THREAD_^1_%SAN 1_,REQUEST_^1_%JMP- (DISP)_'NO_^1_%STA- I_,YES_^1_%ENA 0_^1_%STA* SAVI_)SAVI = 0_^1_%JMP- (REQXT)_^1_%SPC 2_^1**************************€€***************************_^1_%SPC 1_^1* CONSTANTS_^1T13LOC NUM $7FFF_(ABSOLUTE LOC. OF GET-FILE._^1GFBUSY NUM $0000_(GET-FILE BUSY SWITCH, POINTER_^1*_8TO LOC. OF REQ. PARAMETER_^1*_8LIST._^1GFTHED NUM $FFFF_(GETFILE THREAD POINTER_-$*MSOS 4.0_^1NAME_!NUM $0000_(FILE NAME_^1_%NUM $0000_^1_%NUM $0000_^1W1_#NUM 0_3FIRST WORD OF FILE_^1W2_#NUM 0_,LAST WORD OF FILE_^1NS_#NUM€€ $0000_(NUMBER OF SECTORS IN FILE._^1C_$NUM $7FFF_(COMPLETION ADDRESS._^1S_$NUM $0000_(STARTING ADDRESS OF BLOCK INTO_^1*_7WHICH THE FILE OR PORTION OF_^1*_7FILE IS TO BE TRANSFERED._^1SAVI_!NUM $0000_(SAVE I REGISTER._^1_%SPC 1_^1*****************************************************_^1_%SPC 1_^1_%SPC 2_^1*_$CONVERSION ROUTINE FOR SECTOR TO WORD ADDRESS_^1_%SPC 2_^1WCONV N€€OP 0_P**MSOS 4.0_^1_%MUI* NINE6_L**MSOS 4.0_^1_%LLS 1_P**MSOS 4.0_^1_%ARS 1_P**MSOS 4.0_^1_%AND- $11_*7FFF_?**MSOS 4.0_^1_%STA* SN+1_)LSB_@**MSOS 4.0_^1_%LDA* W1_O**MSOS 4.0_^1_%SAZ OUT_N**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%ADD* SN+1_M**MSOS 4.0_^1_%SAP 2_P**MSOS 4.0_^1_%INQ 1_P**MSOS 4.0_^1_%AND- $11_N**MSOS 4.0_^1_%STA* SN+1_)LSB_@**MSOS 4.0_^1OUT_"STQ* SN_+MSB_@**MSOS 4.€€0_^1_%JMP* (WCONV)_J**MSOS 4.0_^1_%SPC 2_^1*_$DISK I/O COMPLETION ROUTINE_^1COMP1 LDQ* GFBUSY_'CLEAR THREAD_^1_%ENA 0_^1_%STA- 2,Q_^1_%LDA- ($22),Q_^1_%ADD- $21_^1_%STA- ($22),Q_^1_%SQM 1_^1_%ADQ- $21_^1_%STQ* COMP4_^1_%ENQ 0_^1_%RTJ- ($F4)_(SCHEDULE COMPLETION ADDRESS_^1COMP4 NUM $0000_^1_%IIN 0_^1_%LDA* GFTHED_'CHECK THREAD TO SEE IF ANY_^1_%SAP COMP5-*-1_#REQUESTS ARE W€€AITING_^1_%ENA 0_,NONE WATING - EXIT_^1_%STA* GFBUSY_^1_%EIN 0_^1_%JMP- (DISP)_^1COMP5 STA* GFBUSY_'REQUEST WAITING SET GTFILE BUSY_^1_%STA- I_^1_%LDA- 2,I_*THREAD LOC._!POINTER TO_^1_%STA* GFTHED_'NEXT REQUEST._^1_%EIN 0_,GO PERFORM THE NEW REQUEST_^1_%JMP UNPROT_K**MSOS 4.0_^1NINE6 NUM 96_+NO. OF WORDS IN SECTOR_^1SAVII NUM $0000_^1_%SPC 1_^1*_$THE FOLLOWING ROUTINE PRO€€CESSES ERRORS_^1*_$IT SCHEDULES LOCF IN PROTECT FOR THE_^1*_$ERROR MESSAGE TO BE OUTPUT._^1ERRC_!LDQ* GFBUSY_'GET LOCATION OF REQUEST_^1_%LDA LPTRS_L**MSOS 4.0_^1_%STA* ERRCE+1_J**MSOS 4.0_^1_%LDA- 10,Q_M**MSOS 4.0_^1ERRCE STA+ 0_O**MSOS 4.0_^1_%CLR A_^1_%IIN 0_^1_%STA- 2,Q_*CLEAR THREAD - PROTECT PROC._^1_%INQ -1_^1_%STA- ($22),Q_%CLEAR WORD PROCEEDING REQUEST_^1_%SET A_^1_€€%STA* GFTHED_'SET THREAD POINTER TO $FFFF_^1_%LDA* SAVI_^1_%SAZ ERRD-*-1_^1_%STA- I_^1_%RTJ- ($BA)_(RELEASE VOLATILE_^1_%SPC 1_^1ERRD_!EIN 0_^1_%LDA* (F)_^1_%STA* ERR1_^1_%RTJ SWAPCK_'DECREMENT UNPIO_^1_%ENQ 2_^1_%RTJ- ($F4)_(SCHDLE LOC. F AT LEVEL ONE_^1_%NUM $1201_^1ERR1_!ADC $0000_^1_%JMP- (DISP)_^1F_$ADC LOCF_^1_%SPC 1_^1SPD_"NOP 0_^1_%LDA- I_^1_%STA* SAVII_(SAVE THE €€CONTENTS OF THE I REG_^1_%LDQ- $C4_*GET SECTOR NO OF PROGRAM LIBRARY_^1SPDA_!SQN SPDB_)DIRECTORY AND CHECK IF EQUAL TO 0_^1ERR_"JMP* ERRC_)SECTOR NO EQUALS 0 -- ERROR_^1SPDB_!STQ* SPD2+1_'STORE SECTOR NO IN READ REQUEST_^1*_8FIND NAME_^1SPD1_!RTJ- ($F4)_(READ ONE SECTOR_^1_%NUM $900,$0,$0,$8C2_^1_%NUM 96_^1_%ADC GTFILE-*+5_^1SPD2_!NUM $0,$0_(SECTOR NUMBER_^1_%SPC 1_^1_%LDA* S€€PD1+3_^1_%SAZ 1_^1_%JMP* *-2_^1_%ENQ -89_*COMPLEMENT OF 89_^1_%LDA GTFILE+93_^1_%AAQ Q_^1SPD3_!ENA 0_^1_%STA- I_^1SPD4_!LDA* GTFILE,I_$CHECK PROGRAM LIBRARY DIRECTORY_^1_%SUB* NAME_)FOR THE NAME OF THE SPECIFIED FILE_^1_%SAN NO-*-1_^1_%LDA* GTFILE+1,I_^1_%SUB* NAME+1_^1_%SAN NO-*-1_^1_%LDA* GTFILE+2,I_^1_%SUB* NAME+2_^1_%SAN NO-*-1_^1_%JMP* YES_^1NO_#LDA- I_,NAME NOT SAME_^€€1_%INA 5_^1_%STA- I_^1_%AAQ A_^1_%SAP OVER-*-1_^1_%JMP* SPD4_)CHECK NEXT NAME_^1OVER_!LDQ* GTFILE+95_#CHECK IF ANOTHER SECTOR OF NAMES_^1_%JMP* SPDA_)FOLLOWS._^1YES_"LDA* GTFILE+3,I_"NAMES MATCH_^1_%SAM 1_,TEST FOR AND JUMP IF PROGRAM_^1_%JMP* NO_+NAME INSTEAD OF FILE NAME_^1_%TCA A_,THE DESIRED FILE HAS BEEN FOUND_^1_%MUI* NINE6_(FORM THE NUMBER OF WORDS_^1_%STA NS_+AND SAVE€€_^1_%SQZ 1_P**MSOS 4.0_^1_%JMP* ERRC_)FILE LARGER THAN 65K_/**MSOS 4.0_^1_%LDQ* SAVII_^1_%STA- 6,Q_*STORE W2 BACK IN CALL_,**MSOS 4.1**_^1_%LDA* GTFILE+4,I_^1_%STQ- I_^1_%STA- 9,I_*STORE SECTOR NUMBER._^1_%ENA 0_^1_%STA- 8,I_^1_%JMP* (SPD)_(RETURN TO THE CALLING ROUTINE_^1*_$THE FOLLOWING AREA IS THE AREA WHERE_^1*_$THE GTFILE ROUTINE READS THE INFORMATION INTO_^1*_$THIS AREA UPO€€N INITIALLY CALLING T13 INTO_^1*_$CORE IS USED TO ESTABLISH THE T13 PARAMETERS_^1*_$REQUIRED BY OTHER ROUTINES._^1T13SUP STA* (F2)_)SAVE ADDRESS OF T13 MODULE_^1_%STQ* SAVQ_)SAVE CONTENTS OF Q UPON ENTRY_^1_%ADD* JBT13_(GET ADDRESS OF REQUEST PROCESSOR TABLE_^1_%LDQ- $E9_^1_%LDQ- 9,Q_*ADDR OF RCTV IN MONI_/**MSOS 4.0_^1*_8SAVE ADDR OF T13 IN SLOT 13_(**MSOS 4.0_^1_%STA- 13,Q_^1_%CL€zR A_^1_%STA MIB_^1_%LDA- $F3_*CHECK IF BREADPOINT IS REQUIRED_^1_%LDQ* SAVQ_^1_%SAZ NOBP-*-1_^1_%JMP- ($F3)_(YES--GO TO BREAKPOINT ROUTINE_^1NOBP_!JMP- ($22),Q_%NO--RETURN TO ADDRESS BROUGHT IN Q_^1SAVQ_!NUM 0_^1F2_#ADC FILE2_^1JBT13 ADC T13-EREQST_^1_%EQU GTFILE(T13SUP)_^1_%EQU SUPLEN(*-T13SUP)_^1_%BZS GTFB(96-SUPLEN)_^1_%EQU T13LEN(*-T13)_^1_%SPC 2_^1_%END_]_^__zPJCRDV4 CSY/ D47 P€1_%NAM JCRDV4_'DECK-ID D47 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$JCRDV4-STATEMENT PROCESSOR FOR *JOB, *CTO, *PAUS_%**MSOS 4.0_^1_%SPC 1_P**MSOS 4.0_^1_%ENT CRDV4_L**MSOS 4.0_^1_%EXT JBPROE_K**MSOS 4.0_^1_%EXT MIBUF_L**€€MSOS 4.0_^1_%EXT TRNVEC_K**MSOS 4.0_^1_%EXT FILE2_L**MSOS 4.0_^1_%EXT MIB_^1_%EQU HFF(10)_J**MSOS 4.0_^1_%SPC 1_P**MSOS 4.0_^1CRDV4 NUM $C8FE_L**MSOS 4.0_^1_%STA* ABS_N**MSOS 4.0_^1_%STA* (F2)_)SET JCRDV4 ADDRESS IN FILE2_(**MSOS 4.0_^1_%CLR A_P**MSOS 4.0_^1_%STA MIB_*CLEAR LOCKOUT_6**MSOS 4.0_^1_%LDA MIBUF_(ADDRESS OF INPUT BUFFER_,**MSOS 4.0_^1_%STA* ISAVE_L**MSOS 4.0_^€€1_%STA- I_P**MSOS 4.0_^1_%LDA- 2,I_N**MSOS 4.0_^1_%LDQ- 1,I_N**MSOS 4.0_^1_%LRS 8_P**MSOS 4.0_^1_%LDQ TRNVEC_'TRANTA TABLE ADD. IN JOBENT_(**MSOS 4.0_^1_%EQU TARD(*-1)_H**MSOS 4.0_^1_%LDQ- 10,Q_)J.P. REQUEST CODE_2**MSOS 4.0_^1_%INQ -11_N**MSOS 4.0_^1_%LDQ* TAB,Q_L**MSOS 4.0_^1_%JMP* CRDV4,Q_%GO TO PROPER ROUTINE_/**MSOS 4.0_^1TAB_"ADC JO-CRDV4_J**MSOS 4.0_^1_%ADC CTO-CRDV4_H*€€*MSOS 4.0_^1_%ADC PA-CRDV4_I**MSOS 4.0_^1CTO_"SUB =N$4F2C_%LOOK FOR O,_8**MSOS 4.0_^1_%SAZ CT1_*FOUND IT_;**MSOS 4.0_^1LOAD_!ENA 2_,NOT A $CTO GET JPLOAD AND_***MSOS 4.0_^1_%JMP* EXIT+1_'TRY TO LOAD IT_5**MSOS 4.0_^1CT1_"ENQ L-1_*INPUT BUFFER LENGTH-1_.**MSOS 4.0_^1_%EQU L(36)_L**MSOS 4.0_^1CT2_"LDA- (ZERO),B_$LAST WORD OF BUFFER_0**MSOS 4.0_^1_%EQU ZERO($22)_H**MSOS 4.0_^1_€€%INA 0_,GET RID OF BACKGROUND_.**MSOS 4.0_^1_%SAZ CT3_N**MSOS 4.0_^1_%STA* CTOBUF,Q_$OVERLAID BUFFER_4**MSOS 4.0_^1_%RAO* CWD_*BUMP WORD COUNT_4**MSOS 4.0_^1CT3_"INQ -1_O**MSOS 4.0_^1_%SQM CT4_N**MSOS 4.0_^1_%JMP* CT2_*GET MORE_;**MSOS 4.0_^1CT4_"RTJ- ($F4)_L**MSOS 4.0_^1CT5_"NUM $D00,0_K**MSOS 4.0_^1TR_#NUM 0_P**MSOS 4.0_^1_%NUM $18FC_L**MSOS 4.0_^1CWD_"NUM 0_P**MSOS 4.0_^€€1_%ADC CTOBUF-CT5_G**MSOS 4.0_^1_%LDA* TR_O**MSOS 4.0_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* *-2_N**MSOS 4.0_^1_%SQP 1_P**MSOS 4.0_^1_%JMP* CT5-1_(I/O ERROR TRY AGAIN_0**MSOS 4.0_^1_%ENA 1_,SCHEDULE JBPRO_5**MSOS 4.0_^1_%JMP* EXIT_M**MSOS 4.0_^1_%EQU CTOBUF(*)_#OVERLAY BUFFER FOR CTO ROUTINE_$**MSOS 4.0_^1PA_#SUB =N$5553_%WAS STATMENT PAUS_2**MSOS 4.0_^1_%SAN PAX_N**MSOS 4.0_^1_%LDA€€- 2,I_*MAKE SURE REST_5**MSOS 4.0_^1_%LDQ- 3,I_*IS BACKGROUND_6**MSOS 4.0_^1_%LLS 8_P**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ PA1-1_(YES_@**MSOS 4.0_^1PAX_"JMP* LOAD_)NO - TRY TO LOAD IT_0**MSOS 4.0_^1_%RTJ- ($F4)_L**MSOS 4.0_^1PA1_"NUM $D00,0_K**MSOS 4.0_^1TR1_"NUM 0_P**MSOS 4.0_^1_%NUM $18FC,3_J**MSOS 4.0_^1_%ADC PABUF-PA1_#READY_>**MSOS 4.0_^1_%LDA* TR1_N**MSOS 4.0_^1_%SA€€Z PA2_N**MSOS 4.0_^1_%JMP* *-2_N**MSOS 4.0_^1PA2_"SQP PA3-1_L**MSOS 4.0_^1_%JMP* PA1-1_(I/O ERROR TRY AGAIN_0**MSOS 4.0_^1_%RTJ- ($F4)_(INPUT A CR_9**MSOS 4.0_^1PA3_"NUM $300,0_K**MSOS 4.0_^1TR2_"NUM 0_P**MSOS 4.0_^1_%NUM $18FD,0_J**MSOS 4.0_^1_%ADC CR-PA3_K**MSOS 4.0_^1_%LDA* TR2_N**MSOS 4.0_^1_%SAZ PA4_N**MSOS 4.0_^1_%JMP* *-2_N**MSOS 4.0_^1PA4_"SQP PA5_N**MSOS 4.0_^1_%JM€€P* PA1-1_(I/O ERROR START OVER_/**MSOS 4.0_^1PA5_"LDA* CR_O**MSOS 4.0_^1_%EOR =N$DFF_'WAS INPUT A CR_5**MSOS 4.0_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* PA1-1_(NO-TRY AGAIN_7**MSOS 4.0_^1_%ENA 1_P**MSOS 4.0_^1_%JMP* EXIT_M**MSOS 4.0_^1CR_#NUM 0_P**MSOS 4.0_^1PABUF ALF 3,READY?_I**MSOS 4.0_^1ABS_"NUM 0_,ABSOLUTE LOAD ADDRESS_.**MSOS 4.0_^1CHCT_!NUM 0_,CHARACTER COUNT_4**MSOS 4.0_^1_%€€ENA 1_P**MSOS 4.0_^1EXIT_!ENQ 14_O**MSOS 4.0_^1_%STA* RMOD_M**MSOS 4.0_^1_%LDA JBPROE_K**MSOS 4.0_^1_%STA- I_P**MSOS 4.0_^1_%LDA* RMOD_M**MSOS 4.0_^1ERR_"JMP- (I)_N**MSOS 4.0_^1_%ENA 1_P**MSOS 4.0_^1_%ENQ 6_,TERMINATE IN JOBPRO_0**MSOS 4.0_^1_%JMP* EXIT+1_K**MSOS 4.0_^1RMOD_!NUM 0_P**MSOS 4.0_^1_%EQU PARAM(RMOD)_F**MSOS 4.0_^1F2_#ADC FILE2_L**MSOS 4.0_^1JO_#SUB =N$422C_%IS€€ IT A B,_9**MSOS 4.0_^1_%EQU NAME(JO)_I**MSOS 4.0_^1_%SAZ JO1_*YES_@**MSOS 4.0_^1_%SUB =N$D3_(LOOK FOR BACKGROUND_0**MSOS 4.0_^1_%SAN JO11_M**MSOS 4.0_^1_%RAO* PARAM_(JOB CARD NO PARAMETERS_-**MSOS 4.0_^1_%JMP* JO1_N**MSOS 4.0_^1JO11_!JMP* LOAD_)NO,LET JPLOAD HANDLE IT_,**MSOS 4.0_^1JO1_"LDQ* (TARD)_K**MSOS 4.0_^1_%LDA- 12,Q_)IS A JOB IN PROGRESS_/**MSOS 4.0_^1_%SAZ JO3_N**MSO€€S 4.0_^1_%LDA =N$3135_J**MSOS 4.0_^1_%STA- 10,Q_M**MSOS 4.0_^1_%JMP* ERR+1_L**MSOS 4.0_^1ISAVE NUM 0_P**MSOS 4.0_^1JO3_"RAO- 12,Q_M**MSOS 4.0_^1_%LDA* PARAM_L**MSOS 4.0_^1_%SAZ JO33_M**MSOS 4.0_^1_%SET A_,FLAG ABSENSE OF NAME_/**MSOS 4.0_^1_%STA- 15,Q_M**MSOS 4.0_^1_%JMP* JO1A-1_K**MSOS 4.0_^1JO33_!RAO- I_P**MSOS 4.0_^1_%RAO- I_P**MSOS 4.0_^1_%ENQ 6_^1_%ENA $20_^1BLN_"STA* N€€AME,Q_'BLANK OUT NAME BUFFER_^1_%INQ -1_^1_%SQM 1_^1_%JMP* BLN_^1GOON_!RTJ* CRACK_(GET THE JOB NAME_3**MSOS 4.0_^1_%LDA* CT_^1_%SAN 1_^1_%JMP* ERRX_^1_%ENA 15_^1_%RTJ PACK_)PUT NAME IN WORD 15 OF TRANTA_^1_%ENA 0_P**MSOS 4.0_^1_%STA* CT_O**MSOS 4.0_^1_%RTJ* CRACK_(GET THE ACCOUNT NUMBER_-**MSOS 4.0_^1_%LDA* CT_^1_%SAN 1_^1_%JMP* ERRX_^1_%ENA 18_^1_%RTJ PACK_)PUT ACCT. IN W€€ORD 18 OF TRANTA_^1_%LDA* ISAVE_L**MSOS 4.0_^1_%STA- I_P**MSOS 4.0_^1_%ENQ L-1_N**MSOS 4.0_^1JO1A_!LDA- (ZERO),B_I**MSOS 4.0_^1_%INA 0_P**MSOS 4.0_^1_%SAZ JO2_N**MSOS 4.0_^1_%STA* CTOBUF,Q_$OVERLAID BUFFER_4**MSOS 4.0_^1_%RAO* WORDS_L**MSOS 4.0_^1JO2_"INQ -1_O**MSOS 4.0_^1_%SQM JO3A_M**MSOS 4.0_^1_%JMP* JO1A_M**MSOS 4.0_^1JO3A_!LDA- $FB_*STANDARD LIST_6**MSOS 4.0_^1_%EOR- $2F_€€*ADD MOBE BIT_7**MSOS 4.0_^1_%STA* LU_O**MSOS 4.0_^1_%LDA* ABS_N**MSOS 4.0_^1_%ADD =XCTOBUF-CRDV4_C**MSOS 4.0_^1_%STA* BF_O**MSOS 4.0_^1_%LDA CTOBUF_K**MSOS 4.0_^1_%SUB =N$1E00_%CHANGE THE * TO A_2**MSOS 4.0_^1_%STA CTOBUF_'PAGE EJECT($0C)_4**MSOS 4.0_^1_%RTJ- ($F4)_L**MSOS 4.0_^1JO5_"NUM $C00,0_K**MSOS 4.0_^1TR4_"NUM 0_P**MSOS 4.0_^1LU_#NUM 0_P**MSOS 4.0_^1WORDS NUM 0_P**€€MSOS 4.0_^1BF_#ADC 0_P**MSOS 4.0_^1_%LDA* TR4_N**MSOS 4.0_^1_%SAZ JO6_N**MSOS 4.0_^1_%JMP* *-2_N**MSOS 4.0_^1JO6_"SQP JO7_N**MSOS 4.0_^1_%JMP* JO5-1_(I/O ERROR_:**MSOS 4.0_^1JO7_"LDA- $FB_*IF STANDARD LIST AND OUTPUT_(**MSOS 4.0_^1_%SUB- $FC_*COMMENT ARE THE SAME DEVICE_(**MSOS 4.0_^1_%SAZ JO7A_)DON'T PRINT BLOCK JOB NAME_)**MSOS 4.0_^1_%ENA 8_P**MSOS 4.0_^1_%JMP* EXIT_)PRINT €€THE NAME_5**MSOS 4.0_^1JO7A_!JMP* EXIT-1_'DON'T PRINT IT_5**MSOS 4.0_^1CT_#NUM 0_^1CRACK NOP 0_P**MSOS 4.0_^1JO41_!LDA* RL_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* JO4B_)COMMA WAS IN RIGHT CHAR. POSITION_!**MSOS 4.0_^1JO4A_!LDA- (ZERO),I_I**MSOS 4.0_^1_%AND- HFF_N**MSOS 4.0_^1_%RTJ* SUB_N**MSOS 4.0_^1_%SQZ 1_P**MSOS 4.0_^1_%JMP* ASCH1_(END OF FIELD_7**MSOS 4.0_^1_%SAN 1_P**MSOS 4.0_^1_€€%JMP* ASCH2_L**MSOS 4.0_^1_%RAO* CT_^1_%LDQ* CT_+INDEX_>**MSOS 4.0_^1_%STA* NAME,Q_K**MSOS 4.0_^1JO4B_!RAO- I_P**MSOS 4.0_^1_%LDA- (ZERO),I_I**MSOS 4.0_^1_%TRA Q_P**MSOS 4.0_^1JO4_"ADQ =N$D3D3_J**MSOS 4.0_^1_%SQN 1_P**MSOS 4.0_^1_%JMP* ERRX_)TWO COMMAS IN A ROW_0**MSOS 4.0_^1_%ARS 8_P**MSOS 4.0_^1_%AND- HFF_N**MSOS 4.0_^1_%RTJ* SUB_N**MSOS 4.0_^1_%SQN ASCH1_(END OF FIELD_7**MS€€OS 4.0_^1_%SAZ ASCH1_(COMMA_>**MSOS 4.0_^1_%RAO* CT_^1_%LDQ* CT_+INDEX_>**MSOS 4.0_^1_%STA NAME,Q_K**MSOS 4.0_^1_%JMP* JO41_M**MSOS 4.0_^1ASCH2 ENA 1_^1_%STA* RL_^1_%JMP* (CRACK)_^1ASCH1 ENA 0_^1_%STA* RL_^1_%JMP* (CRACK)_^1ERRX_!LDQ (TARD)_K**MSOS 4.0_^1_%LDA =N$3033_J**MSOS 4.0_^1_%STA- 10,Q_M**MSOS 4.0_^1_%JMP ERR+1_L**MSOS 4.0_^1SUB_"NOP 0_P**MSOS 4.0_^1_%ENQ $2C_*CO€€MMA_>**MSOS 4.0_^1_%EAQ Q_P**MSOS 4.0_^1_%SQN SUB2_M**MSOS 4.0_^1SUB5_!ENA 0_P**MSOS 4.0_^1_%ENQ 0_P**MSOS 4.0_^1_%JMP* (SUB)_L**MSOS 4.0_^1SUB0_!SET Q_P**MSOS 4.0_^1SUB1_!JMP* (SUB)_L**MSOS 4.0_^1SUB2_!LDQ- HFF_N**MSOS 4.0_^1_%EAQ Q_P**MSOS 4.0_^1_%SQZ SUB2A_L**MSOS 4.0_^1_%ENQ $20_N**MSOS 4.0_^1_%EAQ Q_P**MSOS 4.0_^1_%SQN SUB3_M**MSOS 4.0_^1SUB2A JMP* SUB0_M**MSOS 4.0_€2^1SUB3_!JMP* SUB5+1_K**MSOS 4.0_^1RL_#NUM 0_^1PACK_!NUM 0_^1_%LDQ (TARD)_^1_%AAQ Q_^1_%STQ* ADR_^1_%ENQ 1_^1ANOT_!LDA NAME,Q_^1_%ALS 8_^1_%INQ 1_^1_%ADD NAME,Q_^1_%STA* (ADR)_^1_%RAO* ADR_^1_%INQ 1_^1_%INQ -7_^1_%SQZ DONE_^1_%INQ 7_^1_%JMP* ANOT_^1DONE_!JMP* (PACK)_^1ADR_"NUM 0_^1_%END_]_^__2PJLGOV4 CSY/ D48 P€1_%NAM JLGOV4_'DECK-ID D48 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESSOR FOR *X,*LGO,AND *ENTRY-POINT STATEMENTS_$**MSOS 4.0_^1 SPC 1_]_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1_%E€€NT JLGV4_L**MSOS 4.0_^1_%SPC_!1_^1_%EXT TRNVEC_'ABS. ADDR. OF TRANTA BUFFER IN JOBENT (TRVEC)_^1_%EXT JBPROE_'ABS ADDR. OF JOB PROC. ROUTINE IN JOBENT_^1_%EXT MIB_^1_%EXT MIB_L**MSOS 4.1**_^1_%EXT_!LOADIN_^1_%EXT JPRET,JPRET1,JPRETN_^1_%EXT FILE2_^1_%EXT_!BRKPT_^1_%EXT UNPIO_^1_%EXT SWAPCK_^1_%EQU LPMSK(2)_$LOCORE MASK TABLE_^1_%EQU HFFFF($12)_^1_%EQU HFF00($1A)_G**MSO€€S 4.0_^1_%EQU H00FF($A)_H**MSOS 4.0_^1_%EQU H0020($28)_G**MSOS 4.0_^1_%EQU H8000($32)_G**MSOS 4.0_^1_%EQU ZERO($22)_H**MSOS 4.0_^1_%EQU_!DISP($EA)_^1_%SPC_!1_^1JLGV4 NUM $C8FE_(ENTRY POINT_8**MSOS 4.0_^1_%STA (F2)_M**MSOS 4.0_^1_%STQ* CONTRL_K**MSOS 4.0_^1_%ENQ 5_P**MSOS 4.0_^1_%LDA TRNVEC_'GET ADDR OF TRANTA TABLE IN JOBENT **MSOS 4.0_^1_%EQU TRNV(*-1)_G**MSOS 4.0_^1_%S€€TA- I_P**MSOS 4.0_^1JP1A_!LDA- (I),Q_(MOVE 5WORDS FROM JOBENT BUFFER TO L**MSOS 4.0_^1*_9TRANSFER TABLE_^1_%STA JOBP3,Q_J**MSOS 4.0_^1_%INQ -1_^1_%SQZ 1_^1_%JMP* JP1A_^1_%LDA* (TRNV)_'TRANTA TABLE ADDRESS_.**MSOS 4.0_^1_%INA 10_+SET ABS. ADDRESS OF TRANTA_)**MSOS 4.0_^1_%STA* ERRBUF_'ADDRESS FOR STORE OF ERR. MES._$**MSOS 4.0_^1_%INA -4_O**MSOS 4.0_^1_%ENQ -3_^1LOOP_!STA* LO€€ADEP,Q_%AND LOADEP FROM JOBENT BUFFER INTO LOCAL_^1_%INA 1_-BUFFER._^1_%SQZ OUT_^1_%INQ 1_^1_%JMP* LOOP_^1OUT_"STQ MIB_*CLEAR INTERMODULE LOCKOUT FLAG_^1_%LDA* (JBPR)_'GET RETURN_8**MSOS 4._^1_%STA LBL5+1_'TO JOBENT_:**MSOS 4.0_^1_%ENA -3_O**MSOS 4.0_^1_%ADD* CONTRL_'*ENTRY-POINT STATEMENT_-**MSOS 4.0_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* LULOAD_'*X,*X,*LGO OR *LGO,N STATEMENT_$**M€€SOS 4.0_^1_%JMP* PLLOAD_'*ENTRY-POINT STATEMENT_-**MSOS 4.0_^1CONTRL NUM 0_P**MSOS 4.0_^1ERRBUF NUM 0_P**MSOS 4.0_^1F2_#ADC FILE2_^1_%EJT_]_^1 SPC 1_]_^1*****************************************************_^1_%SPC_!1_^1JOBP3 NUM_!$0000_$ABS. LOC._^1_%NUM $0000_(NOT USED_^1SM_#NUM_!$0000_$ABS. L_^1JOBP_!NUM_!$0000_$ABS. LOC._^1JO4_"NUM_!$0000_$ABS. LOC._^1JO3_"NUM 0_^1_%NUM €€ 0_,NOT USED_^1BPS_"NUM_!$0000_$ABS. LOC._^1RI_#NUM_!$0000_$ABS. LOC._^1LOADEP NUM_!$0000_$ABS. LOC._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1ERJO3 LDA =N$3034_%STORE ERROR IN TRANTA BUFFER_'**MSOS 4.0_^1LDERR STA* (ERRBUF)_$IN JOBENT_9**MSOS 4.0_^1_%ENQ 6_P**MSOS 4.0_^1_%JMP* LBL5GO_K**MSOS 4.0_^1RETRN ENQ 14_+INDEX TO RF3 IN JOBPRO_^1L€€BL5GO ENA 1_,INDEX TO SCHEDULE JOBPRO_^1LBL5_!JMP+ 0_P**MSOS 4.0_^1_%EJT_]_^1_%EJT_]_^1*****************************************************_^1_%SPC_!1_^1***_!*X JOB PROCESSOR STATEMENT_^1* THIS ROUTINE INSTRUCTS THE JOB PROCESSOR TO BEGIN_^1* PROGRAM EXECUTION._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%SPC_!1_^1SAVI_!ADC 0_,SAVE MASS-CORE€€ PTR FROM LOADER_^1_%SPC 2_P**MSOS 4.0_^1PLLOAD RTJ LINK_)PROGRAM LIBRARY LOAD-LINK ENTRYS_"**MSOS 4.0_^1_%JMP* EX8_*GO EXECUTE THE PROGRAM_-**MSOS 4.0_^1LULOAD RTJ LINK_)LOAD FROM LOGICAL UNIT-LINK ENTRYS **MSOS 4.0_^1_%ENQ 0_P**MSOS 4.0_^1_%STQ- $F3_*ZERO F3_;**MSOS 4.0_^1_%ENA -2_O**MSOS 4.0_^1_%ADD* CONTRL_K**MSOS 4.0_^1_%SAZ EX8_*NO MEMORY MAP_6**MSOS 4.0_^1_%ENA 6_,ME€€MORY MAP_9**MSOS4.0*_^1_%RTJ* LOADLR_^1_%SPC_!1_^1EX8_"RAO* (UNPIOS)_$SET UNPIO SWITCH_^1_%LDQ* SAVI_M**MSOS 4.0_^1_%LDA- 2,Q_O**MSOS4.0_^1_%STA* TRNADR_'SAVE TRANSFER ADDRESS_/**MSOS4.0_^1_%LDA- (ZERO),Q_$CHECK IF PROGRAM ON MASS STORAGE_"**MSOS 4.0_^1_%SAN_!1_+STORAGE._^1_%JMP* EX9_^1_%LDA- 1,Q_*GET NUMBER OF WORDS LOADED_)**MSOS 4.0_^1_%STA* NW_(READ PROGRAMS FROM MASS_^1_%LD€€A- $F7_)STORAGE._^1_%INA_!1_^1_%STA* FL_(STARTING ADDRESS._^1_%LDA* SCRLU_L**MSOS 4.0_^1_%STA* LUWRD_(GET SCRATCH LOGICAL UNIT_+**MSOS 4.0_^1_%LDA- (ZERO),Q_$GET SECTOR WHERE_3**MSOS 4.0_^1_%ENQ 0_P**MSOS 4.0_^1EX10_!RTJ* READMM_'READ THE PROGRAMS IN FROM MASS STORAGE UNIT_^1EX9_"ENA 0_^1_%STA (LOADEP)_I**MSOS 4.0_^1_%LDA (BPS)_(CHECK FOR BREAKPOINT SWITCH ON_$**MSOS 4.0_^1_%€€SAN_!1_^1_%JMP* EX15_%NOT SET_^1_%ENA 0_^1_%STA (BPS)_(BREAKPOINT SWITCH =0_^1_%LDQ* BRKPTD_^1_%ADQ- $EB_^1_%LDA- 4,Q_'BRKPTD PROGRAM SIZE_^1_%STA* NW_^1_%LDA* LIBRLU_%READ BREAKPOINT FROM LIB.LU._(**MSOS 4.0_^1_%STA* LUWRD_'STORE IN READ M.M. REQUEST_***MSOS 4.0_^1_%LDA- $EC_)END OF AVIALABLE UNPROTECTED CORE_"**MSOS 4.0_^1_%SUB- 4,Q_N**MSOS 4.0_^1_%STA* FL_+FIRST LOCATION O€€F READ_^1_%STA- $F3_^1_%LDA- $EC_'CHECK IF BREAKPOINT FITS_^1_%SUB- $ED_*IN UNPROTECTED CORE._^1_%INA_!-1_^1_%SUB* NW_+NUMBER OF WORDS TO READ_^1_%SAP EX13_^1_%RTJ* (XSWAP)_%RESET UNPIO_^1_%JMP* EX20_^1EX13_!LDA- $F3_*LOAD START ADDR.OF BREAKPOINT AND_^1_%STA- $EC_*STORE IT AS TOP OF UNPROTECTED CORE_^1*_8SO THAT IT CANNOT BE OVERLAID_^1_%LDA- 6,Q_*READ IN BREAKPOINT_^1_%LDQ- €€5,Q_^1_%RTJ* READMM_^1EX15_!RTJ* (XSWAP)_$CLEAR UNPIO SWITCH_^1T_$LDQ* TRNADR_'PASS THE TRANSFER ADDRESS_+**MSOS4.0_^1_%LDA JBPROE_'GET RETURN_9**MSOS 4.0_^1_%EQU JBPR(*-1)_^1_%STA* EX15Z+1_'TO JOBENT_9**MSOS 4.0_^1_%ENA 0_,INDEX TO SCHEDULE JPT 13_+**MSOS 4.0_^1EX15Z JMP+ 0_,RETURN TO JOBENT_3**MSOS 4.0_^1TRNADR NUM 0_Q**MSOS4.0_^1BRKPTD ADC_!BRKPT_^1 SPC 1_]_^1EX20_!RTJ- €€($F4)_$WRITE ERROR MESSAGE_^1_%ADC_!$0D00,0,0,$18FC_^1_%ADC_!$7,EX21-EX20-1_^1_%LDA* EX20+3_#WAIT FOR COMPLETION_^1_%SAZ_!1_^1_%JMP* *-2_^1_%STA- $F3_*CLEAR F3 IF BRKPT WONT FIT_^1_%JMP* T_,EXECUTE WITHOUT BREAKPOINT_(**MSOS 4.0_^1*_8READ MASS MEMORY SUBROUTINE_^1READMM 0_"0_^1_%STA* SN+1_^1_%STQ* SN_+Q HAS MSB, A HAS LSB OF MM ADDRESS_^1_%RTJ- ($F4)_^1_%NUM $4800,0_J**MSOS 4.0€€_^1TH_#NUM 0_P**MSOS 4.0_^1LUWRD NUM $08C2_M**MSOS 4.0_^1NW_#NUM_!$0000_^1FL_#NUM_!$0000_^1SN_#NUM_!$0,$0_^1_%LDA* TH_+WAIT FOR COMPLETION_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* (READMM)_^1LIBRLU NUM $08C2_'ADDRESS OF LIBRARY LU._.**MSOS 4.0_^1SCRLU NUM $08B3_(ADDRESS OF SCRATCH LOGICAL UNIT_#**MSOS 4.0_^1* FOLLOWING IS ALFA FOR_^1*_1E5_^1*_1E10_^1*_1BRKPT_^1EX21_!NUM_!$0D45,$350D€€,$4531,$300D,$4252_^1_%NUM_!$4B50,$540D_^1_%EJT_]_^1*****************************************************_^1_%SPC_!1_^1* THIS SUBROUTINE JUMPS TO AND IS RETURN FROM THE_^1* LOADER_]_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1XSWAP ADC_!SWAPCK_%POINTER TO UNPIO RESET_^1UNPIOS ADC UNPIO_(POINTER TO UNPIO SWITCH_^1QSAV_!ADC 0_^1LOADLR 0_"0_^1_%R€€TJ* LLR_*GIVE THE LOADER CONTROL_^1_%STQ* QSAV_^1_%LDQ- $EE_^1_%SPB_!0_)SET PROTECT BIT FOR_^1_%ENQ_!0_)CLEAR FLAG_^1_%STQ* (LOADI)_^1_%EIN 0_,RETURN LOCATION_^1_%LDQ* QSAV_^1_%JMP* (LOADLR)_!RETURN TO CALLING PROGRAM._^1LLR_"0_"0_^1_%STQ* QSAV_^1_%LDQ_!(LOADEP)_!CHECK IF LOADER PRESENT_^1_%SQN LOADL1_^1_%JMP_!ERJO3_^1LOADL1 STQ* LOADL2+1_$LOCATION OF LOADER_^1_%RAO* (LOADI)_%€€SET FLAG FOR PROTECT PROCESSOR_^1*_7TO LET LOADER READ AND WRITE_^1*_7BELOW THE SCRATCH AREA._^1_%LDQ* LLR_*LOADER RETURN ADDRESS IS AT RTJ LLR PLUS 1_^1_%STQ JPRET1_'PATCH RETURN IN TRVEC MODULE_^1_%LDQ =XJPRETN_$RETURN FROM LOADER TO JPRETN IN TRVEC MODULE_^1_%STQ JPRET_(PATCH THE PRESET TABLE IN LOCORE_^1_%STQ- $EE_'CLEAR PROTECT BIT FOR_^1_%CPB_!0_*RETURN LOCATION._^1_%LDQ*€€ QSAV_^1LOADL2 JMP+ 0_^1LOADI ADC LOADIN_^1_%EJT_]_^1LINK_!0_"0_P**MSOS 4.0_^1_%ENA 2_,LINK ENTRY POINTS_2**MSOS 4.0_^1_%RTJ* CMLOAD_K**MSOS 4.0_^1_%ENA 10_+PATCH TO PROGRAM LIBRARY_+**MSOS 4.0_^1_%RTJ* CMLOAD_K**MSOS 4.0_^1LINK1 ENA 7_,PRINT UNPATCHED EXTERNALS_***MSOS 4.0_^1_%RTJ* CMLOAD_K**MSOS 4.0_^1_%JMP* LINK1_L**MSOS 4.0_^1CMLOAD 0_"0_P**MSOS 4.0_^1_%RTJ* LOADLR_'PERFO€PRM LOADER FUNCTION_,**MSOS 4.0_^1_%SAM EREXIT_'LOADER ERROR-ABORT JOB_,**MSOS 4._^1_%SQP 1_P**MSOS 4.0_^1_%JMP* (CMLOAD)_$UNPATCHED EXTERNALS REMAIN_)**MSOS 4.0_^1_%LDQ- I_P**MSOS 4.0_^1_%STQ SAVI_)SAVE ADDR. OF KEY LOADER INFRO._#**MSOS 4.0_^1_%JMP* (LINK)_K**MSOS 4.0_^1EREXIT JMP LDERR_K**MSOS 4.0_^1_%END JLGV4_L**MSOS 4.0_^__PPJPFLV4 CSY/ D51 P€1_%NAM JPFLV4_'DECK-ID D51 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$JOB PROCESSOR FILE REQUEST PROGRAM MODULE1_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA€€_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1** ** ** ** **_^1*_]_^1*_$THIS MODULE ENTERED FRON THE JOB PROCESSOR FOR PROCESSING_^1*_$A REQUEST REGARDING A JOB PROCESSOR FILE_^1*_]_^1*_$THIS MODULE VALIDATES THE GIVEN REQUEST FORMAT-_^1*_$CORRECT REQUEST CODE AND CORRECT NUMBER OF CORRECTLY_^1*_$FORMATTED PARAMETERS_^1*_$FOR A CORRECT REQUEST THE PARAMETEERS ARE S€€AVED IN A_^1*_$BUFFER JPFLBF IN THE JOBENT PROGRAM. AN EXIT IS NADE_^1*_$TO THE JOB PROCESSOR WHICH IN TURN CALLS MODULE 2 -JPF2V4- TO_^1*_$ACTUALLY EXECUTE THE REQUEST_^1*_]_^1*_$FOR AN INCORRECT REQUEST RETURN IS MADE TO THE JOB PROCESSOR_^1*_$WITH THE APPROPRIATE ERROR CODE_^1*_]_^1_%SPC 4_^1*_]_^1****** EQUATE CARDS_^1_%EQU LPMASK($2)_^1_%EQU NZERO($12)_^1_%EQU ZERO($22)_^1€€_%EQU ONEBIT($23)_^1_%EQU TEN($46)_$TEN DECIMAL_^1_%EQU ADISP($EA)_^1_%EQU AMONI($F4)_^1_%SPC 4_^1*_]_^1*_8FIRST WORD IS THE NUMBER OF PARAMETERS._^1_%EQU V01(1)_'REQUEST CODE_^1_%EQU V02(2)_')_^1_%EQU V03(3)_') 1ST PARAMETER_^1_%EQU V04(4)_')_^1*_]_^1_%EQU V05(5)_')_^1_%EQU V06(6)_') 2ND PARAMETER_^1_%EQU V07(7)_')_^1*_]_^1_%EQU V08(8)_')_^1_%EQU V09(9)_') THIRD PARA€€METER_^1_%EQU V10(10)_%)_^1*_]_^1_%EQU V11(11)_%)_^1_%EQU V12(12)_%) 4TH PARAMETER_^1_%EQU V13(13)_%)_^1*_]_^1_%EQU V14(14)_%)_^1_%EQU V15(15)_%) 5TH PARAMETER_^1_%EQU V16(16)_%)_^1*_]_^1_%EQU V17(17)_^1_%EQU V18(18)_^1_%EQU V19(19)_^1_%EQU V20(20)_^1_%EQU V21(21)_^1_%EQU V22(22)_%TEMPORARY CHAR STORAGE_^1_%EQU V23(23)_%CHARACTER STORAGE ADDRESS_^1_%EQU V24(24)_^1_%E€€QU V25(25)_%TEMPORARY USAGE_^1_%EQU V26(26)_%ADDRESS OF FLBUF2_^1_%EQU V27(27)_%TOTAL NUMBER OF FILES CHECKED SO FAR_^1*_]_^1_%SPC 4_^1*******ENTRY POINTS_^1_%ENT JPFL_^1*_]_^1_%SPC 4_^1*******EXTERNAL POINTS_^1_%EXT MIBUF_(SMI BUFFER ADDRESS_^1_%EXT PKEYV4_^1_%EXT JBPROE_'ENTRY POINT TO JOBENT(TRNVEC)_^1_%EXT TRNVEC_'ABS.ADRS OF TRANTA BUFFER IN JOBENT_^1_%EXT MIB_^1_%E€€XT JBFLV4_'NBR OF JP FILES IN SYSTEM_^1_%EXT AYERTO_'CURRENT SYSTEM YEAR_.**MSOS 4.1**_^1_%EXT AMONTO_'CURRENT SYSTEM MONTH_-**MSOS 4.1**_^1_%EXT ADAYTO_'CURRENT SYSTEM DAY_/**MSOS 4.1**_^1_%EXT LOG1A_^1_%EXT FILE3_^1_%EXT PARBV4_'LOC. WITH THE ADDRESS OF THE JOBENT BUFFER_^1_%EJT_]_^1*_]_^1JPFL_!NUM $C8FE_^1_%STA* (F3)_^1*_$SAVE START ADDRESS OF JBFL PROGRAM_^1_%STA* JBV01€€_^1*_]_^1*_$SAVE THE CONTENTS OF REGISTER Q_^1*_]_^1_%STQ* JBV03_^1*_]_^1*_$SAVE INPUT REQUEST BUFFER ADDRESS_^1_%LDQ MIBUF_^1*_8IN HERE_^1_%STQ* JBV02_^1*_]_^1*_$COMPUTE THE OTHER ABSOLUTE ADDRESSES OF LOCATIONS_^1*_$REFERRED TO IN THIS MODULE_^1*_]_^1_%LDQ* FLBF1A_'REQUEST PARAMETER BUFFER ADDRESS_^1_%AAQ Q_^1_%STQ* FLBF1A_^1_%STQ- I_^1_%SPC 2_^1*_$THE FOLLOWING CODE WILL SET €€SET THE JOB FILE TABLE_^1*_$TO ZERO THE FIRST TIME THE JOB FILES ARE USED._^1*_$THE CORE IMAGE IS UPDATED--WORD 19 OF EXTENDED CORE_^1*_$TABLE-- SO THIS PROCEDURE IS ONLY DONE ONCE_^1*_$EACH TIME A NEW SYSTEM IS BUILT_^1_%SPC 2_^1JBFL03 LDQ- $E9_*ADDRESS OF EXT. CORE TABLE_)**MSOS 4.0_^1_%LDA- 19,Q_M**MSOS 4.0_^1_%SAZ JBFL3A_K**MSOS 4.0_^1_%JMP* JBFL02_^1JBFL3A LDA =XJBFLV4_'ANY€€ FILES TO INITIALIZE_^1_%EQU JBF(*-1)_I**MSOS 4.0_^1_%SAN JBFL3B_^1_%LDA* JBV03_(NO_^1_%SAM JBFL31_^1_%JMP FL0001_^1JBFL31 ENQ 4_,ABORTING A JO SO_^1_%JMP FL0076_'JUST GET OUT_^1JBFL3B INQ 19_O**MSOS 4.0_^1_%STQ* FWORD_(SAVE FLAG ADDRESS_2**MSOS 4.0_^1_%INQ -11_N**MSOS 4.0_^1_%LDA- (ZERO),Q_$FIRST SECTOR OF DIRECTORY_***MSOS 4.0_^1_%STA* SECTOR_K**MSOS 4.0_^1_%INQ -4_O**MS€€OS 4.0_^1_%LDA- (ZERO),Q_$CORE IMAGE SECTOR_2**MSOS 4.0_^1_%STA* IMAGE_L**MSOS 4.0_^1_%LDA* JBFL3A+1_$NUMBER OF FILES_^1_%MUI* NINE_)NINE WORDS / ENTRY_^1_%DVI =N96_)GET NUMBER OF SECTORS TO_+**MSOS 4.0_^1_%EQU N96(*-1)_$ZERO OUT_;**MSOS 4.0_^1_%SQZ 1_P**MSOS 4.0_^1_%INA 1_P**MSOS 4.0_^1_%STA* NSECT_L**MSOS 4.0_^1DCOMP RTJ- ($F4)_L**MSOS 4.0_^1_%NUM $D00_M**MSOS 4.0_^1_%ADC €€COMP-DCOMP-1_E**MSOS 4.0_^1_%NUM 0,$8C2,1_I**MSOS 4.0_^1_%ADC BUF-DCOMP-1,0_D**MSOS 4.0_^1SECTOR NUM 0_P**MSOS 4.0_^1_%JMP- ($EA)_L**MSOS 4.0_^1COMP_!SQP 1_,NO I/O ERROR_7**MSOS 4.0_^1_%JMP* DCOMP_L**MSOS 4.0_^1_%LDA* NSECT_(HAVE ALL SECTORS BEEN ZEROED_'**MSOS 4.0_^1_%INA -1_O**MSOS 4.0_^1_%STA* NSECT_L**MSOS 4.0_^1_%SAZ GONE_M**MSOS 4.0_^1_%RAO* SECTOR_'NO,BUMP SECTOR NUMBE€€R_.**MSOS 4.0_^1_%JMP* DCOMP_(AND DO ANOTHER_5**MSOS 4.0_^1BUF_"NUM 0_P**MSOS 4.0_^1IMAGE NUM 0_P**MSOS 4.0_^1NSECT NUM 0_P**MSOS 4.0_^1FWORD NUM 0_P**MSOS 4.0_^1NINE_!NUM 9_^1GONE_!LDQ- $E9_*SET INITIALIZED FLAG_/**MSOS 4.0_^1_%STQ- 19,Q_M**MSOS 4.0_^1_%STQ* BUF_N**MSOS 4.0_^1_%LDA* IMAGE_(CORE IMAGE SECTOR_2**MSOS 4.0_^1_%MUI* N96_N**MSOS 4.0_^1_%LLS 1_,CONVERT TO WORD A€€DDRESS_,**MSOS 4.0_^1_%ARS 1_P**MSOS 4.0_^1_%AND- $11_N**MSOS 4.0_^1_%STA* SECTOR_K**MSOS 4.0_^1_%LDA* FWORD_(ADDRESS TO UPDATE_2**MSOS 4.0_^1_%ADD* SECTOR_'CONBINE CORE IMAGE ADDRESS_)**MSOS 4.0_^1_%SAP 2_P**MSOS 4.0_^1_%INQ 1_P**MSOS 4.0_^1_%AND- $11_N**MSOS 4.0_^1_%STQ* SECTOR-1_I**MSOS 4.0_^1_%STA* SECTOR_K**MSOS 4.0_^1_%LDA =N$500_'WORD WRITE_^1_%STA* DCOMP+1_^1_%LDA =XCO€€MP1-DCOMP-1_B**MSOS 4.0_^1_%STA* DCOMP+2_J**MSOS 4.0_^1_%JMP* DCOMP_(UPDATE CORE IMAGE_2**MSOS 4.0_^1COMP1 SQP 1_P**MSOS 4.0_^1_%JMP* DCOMP_L**MSOS 4.0_^1_%JMP* FL0001_K**MSOS 4.0_^1*_]_^1*_$CHECK WHETHER THE REQUEST IS TO CLOSE ALL THE FILES_^1*_$OPENED SO FAR._^1*_]_^1JBFL02 LDQ* JBV03_^1_%SQP JBFL05_'NOT SUCH A REQUEST. SKIP_^1_%RTJ* TESTFM_'TEST FILE MANAGER PRESENT TEST_^1_€€%STQ- 1,I_*JUMP TO CLOSE ALL PREVIOUSLY OPENED FILES_^1_%JMP FL0190_^1*_]_^1*_$EXIT TO CALLER. NO FILES TO BE CLOSED_^1*_]_^1JBFL05 INQ -7_^1_%SQP NOFMTS_'REWIND OR UNLOAD_^1_%RTJ* TESTFM_'TEST FILE MANAGER PRESENT TEST_^1NOFMTS JMP FL0001_'EXIT TO PROCESSOR_^1_%SPC 2_^1TESTFM NUM 0_,CHECK FOR FILE MANAGER PRESENT_^1_%LDA* JBFL3A+1_$GET NO. JOB FILES_^1_%SAZ NOFM_)NO FILES,D€€O NOT RETURN_^1_%JMP* (TESTFM)_$FILES PRESENT, OK TO RETURN_^1NOFM_!JMP FL0070_'JP04, NO FILES, CANT OPERATE_^1*_]_^1_%EJT_]_^1*_]_^1*******VARIABLES USED_^1*_]_^1F3_#ADC FILE3_^1JBV01 ADC 0_,START ADDRESS OF JBFL PROGRAM_^1JBV02 ADC 0_,INPUT REQUEST BUFFER ADDRESS_^1JBV03 NUM 0_,TEMPY STORAGE FOR Q PASSED BY CALLER_^1*_]_^1FLBF1A ADC FLBUF1-JPFL_!ADDRESS OF FLBUF1_^1*_]_^€€1*_$THE BUFFER FLBUF1 IS USED TO SAVE THE PARAMETERS OF THE_^1*_$GIVEN REQUEST.THE TEMPY STORAGE FOR SAVING INTERMEDIATE_^1*_$INFORMATION IS THE LATTER PART OF THIS BUFFER_^1*_]_^1FLBUF1 BZS FLBUF1(28)_^1_(EJT_^1*_]_^1*_$REQUESTS AND THEIR CODES TABLE_^1*_]_^1FLT001 ALF 3,DEFINE_^1_%NUM 0_,REQUEST CODE 0 FOR DEFINE_^1*_]_^1_%ALF 3,RELEAS_^1_%NUM 1_,REQUEST CODE 1 FOR RELEASE_^€€1*_]_^1_%ALF 3,OPEN_^1_%NUM 2_,REQUEST CODE 2 FOR OPEN_^1*_]_^1_%ALF 3,CLOSE_^1_%NUM 3_,REQUEST CODE 3 FOR CLOSE_^1*_]_^1_%ALF 3,MODIFY_^1_%NUM 4_,REQUEST CODE 4 FOR MODIFY_^1*_]_^1_%ALF 3,FILTBL_^1_%NUM 5_,REQUEST CODE 5 FOR FILTBL_^1*_]_^1_%ALF 3,PURGE_^1_%NUM 6_,REQUEST CODE 6 FOR PURGE_^1*_]_^1_%ALF 3,REW_^1_%NUM 7_,REQUEST CODE 7 FOR REWIND_^1*_]_^1_%ALF 3,UNL_^1_€€%NUM 8_,REQUEST CODE 8 FOR UNLOAD_^1*_]_^1_%NUM $FFFF_(END OF REQUEST CODE TABLE._^1*_]_^1_%SPC 4_^1*_]_^1*_$ADDRESSES OF THE VAIDATION S/ROUTINES_^1*_]_^1FLT002 ADC FL0145-JPFL_!+0 DEFINE_^1_%ADC FL0120-JPFL_!+1 RELEAS_^1_%ADC FL0150-JPFL_!+2 OPEN_^1_%ADC FL0120-JPFL_!+3 CLOSE_^1_%ADC FL0140-JPFL_!+4 MODIFY_^1_%ADC FL0190-JPFL_!+5 FILTBL_^1_%ADC FL0160-JPFL_!+6 PURGE_^1_€€%ADC FL0170-JPFL_!+7 REWIND_^1_%ADC FL0170-JPFL_!+8 UNLOAD_^1*_]_^1_(EJT_^1*_]_^1_%SPC 4_^1*_]_^1*_$EXTRACT THE PARAMETERS OF THE REQUEST AND SAVE THEM_^1*_$IN BUFFER FLBUF1_^1*_$THE REQUEST CODE WILL ALSO BE SAVED IN FLBUF1._^1*_]_^1FL0001 LDA* FLBF1A_^1_%STA- I_^1_%ENA 1_^1_%RTJ FLS01_(COLLECT THE CODE CHARACTERS_^1_%JMP* FL0007_'INVALID CHARACTER JUMP_^1*_]_^1*_$COME HERE F€€OR THE COMMA OR END OF REQUEST DELIMITER_^1*_]_^1*_$VALIDATE THE REQUEST CODE._^1*_$AFTER THE REQUEST CODE IS SAVED IN V19,V20,AND V21 VALIDATE._^1*_$THE CODE._^1*_$THE VALID CODES ARE IN FLT001 TABLE._^1*_]_^1FL0002 ENQ 0_^1FL0003 LDA* FLT001,Q_$ADDRESS OF FLT001_^1_%SAM FL0007_'END OF TABLE SKIP_^1_%EOR- V19,I_^1_%SAZ FL0005_'FIRST TWO CHARS MATCH.SKIP_^1_%INQ 4_,GET NEXT TAB€€LE ADDRESS._^1_%JMP* FL0003_^1*_]_^1FL0005 INQ 1_^1_%LDA* FLT001,Q_$CHECK NEXT TWO CHARACTERS_^1_%EOR- V20,I_^1_%SAN FL007D_'SKIP IF NO MATCH OF 3RD AND 4TH CHARS_^1_%INQ 1_^1_%LDA* FLT001,Q_$CHECK NEXT TWO CHARACTERS_^1_%EOR- V21,I_^1_%SAZ FL0008_'MATCH FOUND.SKIP_^1*_]_^1_%JMP* FL007E_'JUMP IF NO MATCH OF 5TH AND 6TH CHARS_^1*_$SET UP TO CALL A PROGRAM WITH THE GINEN NAME_^1*€€_]_^1FL0007 LDA JBPROE_'GET RETURN_^1_%STA* FL007A+1_$TO JOBENT_^1_%ENQ 0_,RESET THE LOCKOUT FLAG_^1_%STQ* (FL007B)_^1_%LDQ- ONEBIT+15_#SET Q NEGATUVE_^1_%ENA 2_,INDEX TO SCHDULE JPLOAD_^1FL007A JMP+ 0_^1*_]_^1FL007D INQ 1_-SET UP TO GET NEXT CODE ENTRY_^1FL007E INQ 2_-SET UP TO GET NEXT CODE ENTRY_^1_%JMP* FL0003_'PROCESS NEXT ENTRY_^1*_]_^1FL007B ADC MIB_^1*_]_^1*_$SAVE THE R€€EQUEST CODE IN THE PARAMETER BUFFER_^1*_]_^1FL0008 INQ 1_^1_%LDA* FLT001,Q_^1_%STA- 1,I_*PARAMETER BUFFER ADDRESS_^1*_]_^1*_$CHECK ANY MORE PARAMETERS FOR THE REQUEST._^1*_]_^1FL0010 LDA- V22,I_(CHARACTER GOT LAST_^1_%INA -$2C_)CHECK IT TO BE A COMMA_^1_%SAZ FL0012_'SKIP IF A COMMA_^1_%JMP* FL0050_'OTHERWSIE JUMP TO PROCESS REQUEST._^1*_]_^1*_$FOR A COMMA CHECK WHETHER FIVE(MAX €€NBR FOR A REQUEST)_^1*_$ALREADY SAVED. IF YES,REJECT. J04_^1*_]_^1FL0012 LDA- (ZERO),I_^1_%INA -5_^1_%SAM FL0014_'OK LESS THAN 5_^1_%JMP* FL0070_'REJECT. J04. INVALID PARAMETER_^1*_]_^1*_$SET UP TO GET THE PARAMETERS OF THE REQUEST,IF ANY_^1*_]_^1FL0014 RAO- V17,I_(UPDATE CHARACTER INDEX_^1_%LDA- V17,I_^1_%RTJ FLS01_(COLLECT PARAMETER_^1_%JMP* FL0070_'REJECT. J04. INVALID PARAME€€TER_^1*_]_^1*_$SAVE THE PARAMETER IN THE REQUEST PARAMETER BUFFER_^1*_$COMPUTE STORAGE ADDRESS_!3*PARAM NBR + 2_^1*_]_^1FL0020 LDA- (ZERO),I_$PARAMETER NUMBER_^1_%RTJ FLS02_^1*_]_^1_%LDA- V19,I_(SAVE THE 6 CHARACTERS OF THE PARAMETER._^1_%STA- (ZERO),Q_^1_%LDA- V20,I_^1_%STA- 1,Q_^1_%LDA- V21,I_^1_%STA- 2,Q_^1*_]_^1_%RAO- (ZERO),I_$UPDATE NUMBER OF PARAMETERS SAVED_^1*_]_^1*_$AND €€BRANCH TO GET THE NEXT PARAMETER IF ANY_^1*_]_^1_%JMP* FL0010_^1_%SPC 4_^1*_]_^1*_$AFTER ALL THE PARAMETERS OF A REQUEST HAVE BEEN COLLECTED_^1*_$CHECK CORRECT NUMBER OF PARAMETERS HAVE BEEN OBTAINED._^1*_]_^1FL0050 LDQ- 1,I_*REQUEST CODE_^1_%LDA- (ZERO),I_$NUMBER OF PARAMETERS_^1_%SUB* FL0080,Q_^1_%SAZ FL0060_'VALID NUMBER.SKIP_^1_%SQZ FL0055_'SKIP IF A DEFINE REQUEST_^1_%INQ €€-4_^1_%SQZ FL0055_'SKIP IF A MODIFY REQUEST_^1_%INQ -2_^1_%SQZ FL0055_'PURGE_^1_%INQ -1_^1_%SQZ FL0060_'REWIND_^1_%INQ -1_^1_%SQZ FL0060_'UNLOAD_^1_%SQN FL0070_'NOT UNLOAD EITHER. REJECT_^1FL0055 INA 1_^1_%SAN FL0070_'INVALID NBR OF PARAMETERS. REJECT J04_^1*_]_^1FL0060 JMP* FL0100_'JUMP TO VALIDATE THE PARAMETERS._^1*_]_^1FL0070 LDA =N$3034_%ILLEGAL PARAMETER FORMAT. ER€€ROR J04_^1*_]_^1FL0072 ENQ 6_^1*_]_^1FL0075 STQ* FL0079_'SAVE Q TEMPORARLIY_^1_%LDQ TRNVEC_'GET TRANTA+10_^1_%INQ 10_^1_%STA- (ZERO),Q_$AND SAVE THE ERROR CODE_^1*_]_^1_%LDQ* FL0079_'GET Q CONTENTS_^1*_]_^1FL0076 LDA JBPROE_'GET RETURN_^1_%STA* FL007A+1_$TO JOBENT_^1*_]_^1_%ENA 0_^1_%STA* (FL007B)_^1_%ENA 1_,INDEX TO SCHEDULE JOBPRO_^1_%JMP* FL007A_^1*_]_^1FL0079 NUM 0_,TEMPO€€RARRY Q STORAGE_^1*_]_^1*_]_^1_%SPC 4_^1*_]_^1*_$NUMBER OF VALID PARAMETERS FOR REQUESTS_^1*_]_^1FL0080 NUM 3_,+0 DEFINE NUMBER MAY BE 2 OR 3._^1_%NUM 2_,+1 RELEAS_^1_%NUM 4_,+2 OPEN_^1_%NUM 2_,+3 CLOSE_^1_%NUM 5_,+4 MODIFY NUMBER MAY BE 4 OR 5._^1_%NUM 0_,+5 FILTBL_^1_%NUM 2_,+6 PURGE MAY BE 1 OR 2_^1_%NUM 5_,+7 REWIND_^1_%NUM 5_,+8 UNLOAD_^1*_]_^1_%SPC 4_^1*_]_^1*_$PIC€€K UP THE PARAMETER VALIDATION ROUTINE_^1*_]_^1FL0100 LDQ- 1,I_*REQUEST CODE_^1*_]_^1_%LDQ FLT002,Q_$REQUEST CODE=INDEX TO TABLE_^1_%ADQ JBV01_^1_%JMP- (ZERO),Q_^1*_]_^1_%SPC 4_^1*_]_^1*_$COME HERE FOR RELEASE,CLOSE_^1*_$VALIDATE PARAMETER AS A VALID FILE NAME_^1*_$FIRST CHARACTER MUST BE AN ALPHA CHAR._^1*_]_^1FL0120 ENA 0_,PARAMETER INDEX=0_^1_%RTJ FLS04_^1*_]_^1FL0125 JMP* F€€L0190_'EXIT_^1*_]_^1_%SPC 4_^1*_]_^1*_$MODIFY REQUEST_^1*_]_^1*_$VALIDATE 5TH PARAMETER AS A DATE._^1*_$IF 5TH PARAMETER IS NOT GIVEN, MAKE DATE=PRESENT DATE(LOCORE)_^1*_]_^1FL0140 LDA- (ZERO),I_$NO OF PARAMETERS IN THE REQUEST_^1_%INA -4_^1_%SAN FL0141_'SKIP.NOT 4._^1*_]_^1*_$FOR THE GIVEN 4 PARAMETERS,ASSUME DATE=PRESENT DATE (LOCORE)_^1*_$AND ENTER AS 5TH PARAMETER_^1*_]_^1_%€€LDA+ AMONTO_I**MSOS 4.1**_^1_%STA- 14,I_^1_%LDA+ ADAYTO_I**MSOS 4.1**_^1_%STA- 15,I_^1_%LDA+ AYERTO_I**MSOS 4.1**_^1_%STA- 16,I_^1_%RAO- (ZERO),I_$BUMP NUMBER OF PARAMETERS TO 5_^1*_]_^1_%JMP* FL0142_^1*_]_^1FL0141 ENA 4_,VALIDATE 5TH PARAM AS A DATE_^1_%RTJ FLS09_^1*_]_^1*_$CHECK 3RD PARAMETER AS A VALID FILE NUMBER_^1*_]_^1FL0142 ENA 2_^1_%RTJ FLS04_^1*_]_^1*_$VALIDATE 1ST PA€€RAMETER AS A VALID FILE NAME._^1*_]_^1_%JMP* FL0120_^1*_]_^1_%SPC 4_^1*_]_^1*_$DEFINE STATEMENT VALIDATION_^1*_]_^1*_$VALIDATE THE 3RD PARAMETER AS A VALID DATE_^1*_]_^1*_$IF THE 3RD PARAMETER IS ABSENT MAKE DATE=CURRENT DATE (LOCORE)._^1*_]_^1FL0145 LDA- (ZERO),I_$NBR OF PARAMETERS IN REQUEST_^1_%INA -2_^1_%SAN FL0147_'NOT 2. SKIP_^1*_]_^1*_$MAKE DATE=PRESENT DATE_^1*_]_^1_%LDA€€+ AMONTO_I**MSOS 4.1**_^1_%STA- V08,I_^1_%LDA+ ADAYTO_I**MSOS 4.1**_^1_%STA- V09,I_^1_%LDA+ AYERTO_I**MSOS 4.1**_^1_%STA- V10,I_^1*_]_^1_%RAO- (ZERO),I_$BUMP NUMBER OF PARAMETERS TO 3._^1_%JMP* FL0120_^1FL0147 ENA 2_,VALIDATE 3RD PARAMETER AS A JULIAN DATE._^1_%RTJ FLS09_^1_%JMP* FL0120_^1*_]_^1*_]_^1_%SPC 4_^1*_]_^1*_$OPEN_^1*_]_^1*_$VALIDATE THE 4TH PARAMETER AS A VALID LU_^1*€€_]_^1FL0150 ENA 3_,GET PARAMETER ADDRESS_^1_%RTJ FLS02_^1_%RTJ FLS13_^1*_]_^1*_$VALIDATE 3RD PARAMETER AS R/W CHARACTER._^1*_$IF NOT EXACTLY R/W,REJECT._^1*_$IF R, SET PARAMETER TO 0, IF W SETA6ARAMETER TO 1_^1*_]_^1_%ENA 2_^1_%RTJ FLS02_^1*_]_^1*_*(Q)=PARAMETER ADDRESS_^1*_]_^1_%LDA- (ZERO),Q_^1_%SUB =AR_^1_%SAZ FL0153_'R. SKIP_^1_%LDA- (ZERO),Q_^1_%SUB =AW_^1_%SAZ FL0152€€_'W. SKIP_^1FL0151 JMP* FL0070_'ILLEGAL PARAMETER. REJECT. J04_^1*_]_^1FL0152 ENA 1_^1FL0153 ALS 15_^1_%STA- (ZERO),Q_^1*_]_^1_%JMP* FL0120_^1*_]_^1_%SPC 4_^1*_]_^1*_$COME HERE TO VALIDATE THE PURGE REQUEST_^1*_]_^1*_$VALIDATE THE PARAMETER AS A VALID DATE_^1*_]_^1FL0160 ENA 0_^1_%RTJ FLS09_^1*_]_^1*_$VALIDATE NEXT PARAMETER AS PURGE KEY_^1*_]_^1_%LDA- V05,I_^1_%SUB =XPKEYV4_€€^1_%SAN 1_^1*_]_^1_%JMP* FL0190_^1*_]_^1_%JMP* FLS015_'INVALID PURGE KEY_^1_%SPC 4_^1*_]_^1*_$COME HERE TO VALIDATE THE REWIND AND THE UNLOAD REQUEST_^1*_]_^1*_$THE MAXIMUM NUMBER OF PARAMETERS IS 5._^1*_]_^1*_$THE PARAMETER CAN BE ONE OR TWO DIGIT NUMBER( 0-9,00-99)_^1*_]_^1FL0170 ENA 0_,SAVE CURRENT PARAMETER NUMBER_^1_%STA* FLV171_^1*_]_^1FL0171 LDA* FLV171_^1*_]_^1*_]_^1*_$C€€HECK ALL PARAMETERS CHECKED_^1*_]_^1_%SUB- (ZERO),I_^1_%SAM FL0172_'SKIP IF ALL NOT CHECKED_^1*_]_^1*_$SAVE THE NBR OF PARAMETERS IN V16 FOR LATER USE ( IN JPF2V4)_^1_%LDA- (ZERO),I_^1_%STA- V16,I_^1_%JMP* FL0190_'OTHERWISE EXIT_^1*_]_^1FL0172 LDA* FLV171_'GET THE PARAMETER ADDRESS_^1_%RTJ FLS02_^1*_]_^1*_$CHECK IT TO BE ONE OR TWO DIGIT NUMBER_^1*_]_^1_%RTJ FLS13_^1*_]_^1*_]_^1€€*_$COME HERE TO PROCESS THE NEXT PARAMETER_^1*_]_^1_%RAO* FLV171_^1_%JMP* FL0171_^1*_]_^1FLV171 NUM 0_,TEMPORARY STORAGE_^1*_]_^1*_]_^1_%EJT_]_^1*_]_^1*_$AFTER COMPLETING THE VALIDATION OF A REQUEST ALL THE_^1*_$VALIDATED PARAMETERS AND THE REQUEST CODE WILL BE_^1*_$MOVED TO THE JOBENT BUFFER- JPFLBF- FOR USE BY THE_^1*_$MODULE 2(JPF2V4) FOR TAKING THE APPROPRIATE ACTION_^1*_$AS P€€ER THE REQUEST CODE_^1*_]_^1FL0190 ENA 15_,TOTAL NBR OF WORDS(MAX 16)_^1_%RAO- $FF_*UPDATE INDEX TO FLBUF1 BUFFER_^1*_]_^1_%LDQ PARBV4_'GET ADDRESS OF JOBENT BUFFER_^1FL0192 STA* FL0197_'SAVE CURRENT WORD INDEX_^1*_]_^1_%LDA* (FL0197),I_"CURRENT WORD_^1*_]_^1_%STA* (FL0197),Q_"SAVE WORD_^1*_]_^1_%LDA* FL0197_'CHECK ALL WORDS NOVED_^1_%INA -1_^1_%SAM FL0195_'SKIP IF ALL MOVED_^1*€€_]_^1_%JMP* FL0192_'OTHERWISE LOOP_^1*_]_^1FL0195 CLR A_,CLEAR THE MIB SWITCH_^1_%STA* (FL0198)_^1_%ENQ 5_^1_%LDA JBPROE_^1_%STA* FL0196+1_^1_%ENA 1_^1*_]_^1FL0196 JMP+ 0_^1*_]_^1FL0197 NUM 0_,TEMP STORAGE_^1FL0198 ADC MIB_^1*_]_^1_%EJT_]_^1*_]_^1*_]_^1*_$COMMON SUBROUTINE TO COLLECT THE CHARACTERS OF A PARAMETER_^1*_]_^1*_$FOR A VALID PARAMETER_^1*_).IT MUST BE ONE THRU SIX €€ALPHANUMERIC CHARS_^1*_).THE DELIMITER MUST BE A COMMA,OR $FF._^1*_]_^1*_$INPUT_^1*_*(A)= CHAR POSITION IN THE BUFFER_^1*_/UPPER CHAR (B8-15) OF BUFFER+0=CHAR POSITION 0_^1*_/LOWER CHAR (B0-7) OF BUFFER+0=CHAR POSITION 1_^1*_/UPPER CHAR (B8-15) OF BUFFER+1=CHAR POSITION 2_^1*_/AND SO ON._^1*_]_^1*_$OUTPUT_^1*_*V17=UPDATED TO REFLECT NEXT CHAR POSITION IN BUFFER_^1*_*V18=NUMBER OF €€CHARACTERS IN THE PARAMETERS_^1*_*V19=FIRST TWO CHARACTERS_^1*_*V20=NEXT TWO CHARACTERS_^1*_*V21=LAST TWO CHARACTERS_^1*_*V22=DELIMITER CHARACTER (COMMA OR $FF)_^1*_]_^1*_$EXIT_^1*_]_^1*_$RETURN+0_*INVALID NOT AN ALPHANUMERIC_^1*_$RETURN+1_*COMMA OR END OF REQUEST DELIMITER_^1*_]_^1*_$CELLS USED V17,18,22,23,19,20,21_^1*_]_^1FLS01 ADC 0_^1_%STA- V17,I_(SAVE INPUT CHAR POSITION_^€€1_%ENA 0_^1_%STA- V18,I_(CLEAR CHAR STORED COUNT_^1*_]_^1_%LDQ- I_,INITIALIZE PARAMETER STORAGE ADDRESS_^1_%INQ 19_^1_%STQ- V23,I_^1*_]_^1*_$BLANK OUT THE THREE WORD PARAMETER STORE AREA_^1*_]_^1_%LDA =N$2020_^1_%STA- (ZERO),Q_^1_%STA- 1,Q_^1_%STA- 2,Q_^1*_]_^1FLS010 LDQ JBV02_(INPUT REQUEST BUFFER ADDRESS_^1*_]_^1_%RTJ FLS11_(GET THE CHARACTER_^1*_]_^1_%STA- V22,I_(SAVE CHARA€€CTER TEMPORARILY_^1*_]_^1_%SAZ FLS011_'SKIP IF END OF REQUEST_^1*_$CHECK CHAR TO BE AN ALPHAMERIC, $FF, OR COMMA._^1*_]_^1_%EOR- LPMASK+8_^1_%SAN FLS013_'NOT A BLANK SKIP_^1FLS011 JMP* FLS01D_'END OF REQUEST ($FF OR 0)_^1*_]_^1FLS013 LDA- V22,I_^1_%INA -$2C_^1_%SAN FLS014_'NOT A COMMA.SKIP_^1_%JMP* FLS01D_'COMMA.JUMP_^1FLS014 LDA- V22,I_(CHECK CHAR TO BE AN ALPHANUMERIC_^1_%IN€€A -$30_^1_%SAM FLS015_'INVALID CHARACTER. SKIP_^1_%INA -10_^1_%SAM FLS016_'VALID NUM CHAR 0-9_^1_%LDA- V22,I_^1_%INA -$41_^1_%SAM FLS015_'INVALID CHAR_^1_%INA -$1A_^1_%SAM FLS016_'VALID ALPHA CHAR_^1*_]_^1FLS015 JMP* FLS01F_^1*_]_^1*_$FOR A VALID CHAR CHECK NBR OF CHARS ALREADY SAVED. 6 INVALID_^1*_]_^1FLS016 LDA- V18,I_^1_%INA -6_^1_%SAM FLS017_^1_%JMP* FLS01F_'INVALID I€€F 6 CHARS ALREADY SAVED_^1*_]_^1*_$SAVE CHARACTER IN APPROPRIATE SLOT._^1*_]_^1FLS017 RAO- V18,I_(UPDATE CHAR COUNT_^1_%LDQ- V23,I_(CHARACTER STORAGE ADDRESS_^1_%LDA- V18,I_(CURRENT CHARACTER COUNT_^1_%INA -3_+COMPUTE PARAMETER STORAGE ADDRESS_^1_%SAM FLS01A_^1_%INQ 1_^1_%INA -2_^1_%SAM FLS01A_^1_%INQ 1_^1*_]_^1FLS01A LDA- V18,I_^1_%ALS 15_^1*_]_^1*_$(Q)= ADDRESS OF THE WORD€€ FOR THE CHARACTER STORAGE_^1*_]_^1*_$CHECK CHARACTER TO BE STORED IN THE UPPER OR LOWER POSTION_^1*_]_^1*_$FOR CHARACTER COUNT=1,3,5 CHARACTER WILL BE IN UPPER POSTION_^1*_$FOR CHARACTER COUNT= 2,4,6 CHARACTER WILL BE IN LOWER POSITION_^1*_]_^1_%SAM FLS018_'SKIP IF UPPER POSITION OF CHARACTER_^1*_]_^1*_$FOR THE LOWER POSITION OF CHARACTR_^1*_]_^1_%LDA- (ZERO),Q_^1_%AND- NZERO+8_^€€1_%JMP* FLS019_^1*_]_^1*_$FOR THE UPPER CHARACTER_^1*_]_^1*_]_^1FLS018 LDA- V22,I_(ADJUST CHARACTER FOR STORAGE_^1_%ALS 8_^1_%STA- V22,I_^1*_]_^1_%LDA- (ZERO),Q_^1_%AND- LPMASK+8_^1*_]_^1FLS019 EOR- V22,I_(SAVE THE CHARACTER_^1*_]_^1_%STA- (ZERO),Q_^1*_]_^1*_$SET UP TO GET NEXT CHAR_^1*_]_^1_%RAO- V17,I_^1_%JMP* FLS010_^1*_]_^1FLS01D LDA- V18,I_(REJECT IF NO CHAR STORED_^1_%SAZ F€€LS01F_'REJECT_^1_%RAO* FLS01_(ERROR FREE EXIT_^1*_]_^1*_]_^1FLS01F JMP* (FLS01)_%EXIT.NON ALPHANUM/COMMA_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO COMPUTE THE START ADDRESS_^1*_$OF A PARAMETER IN THE PARAMETER BUFFER_^1*_]_^1*_$INPUT_^1*_*(A) = PARAMETER NUMBER 0- 4_^1*_]_^1*_8=(3*NUMBER+2)+I_^1*_]_^1*_$OUTPUT_^1*_*(Q)= START ADDRESS OF THE PARAMETER_^1*_]_^1FLS02 ADC 0_^€€1_%TRA Q_^1_%ALS 1_^1_%AAQ A_^1_%INA 2_^1_%ADD- I_^1_%TRA Q_^1*_]_^1_%JMP* (FLS02)_%EXIT_^1*_]_^1_%EJT_]_^1*_$FOR THE OPEN,CLOSE,RELEAS,AND MODIFY REQUESTS_^1*_]_^1*_$COMMON SUBROUTINE TO VALIDATE A PARAMETER AS A FILE IDENTIFIER_^1*_]_^1*_$INPUT_^1*_*(A)=PARAMETER INDEX 0-4_^1*_]_^1FLS04 ADC 0_^1_%RTJ* FLS02_(COMPUTE PARAMETER ADDRESS_^1_%LDA- (ZERO),Q_$FIRST CHARACTER MUS€€T BE ALPHA.ELSE REJECT._^1_%ALS 8_^1_%AND- LPMASK+8_^1_%INA -$41_^1_%SAM FLS045_'REJECT.NOT ALPHA_^1_%INA -$1A_^1_%SAM FLS049_'O.K._^1FLS045 JMP FL0070_'ILLEGAL PARAMETER. J04_^1*_]_^1FLS049 JMP* (FLS04)_%EXIT_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO VALIDATE THE GIVEN SIX CHARACTER_^1*_$PARAMETER AS A DATE_^1*_]_^1*_$THIS PARAMETER SHOULD BE ALL NUMERICS (0-9), AND IS€€ AS FOLLOWS_^1*_]_^1*_8MMDDYY_^1*_$WHERE_^1*_*MM = MONTH 01-12_^1*_*DD = DAY_"01-31_^1*_*YY = YEAR_!00-99_^1*_]_^1*_$ALSO DD MUST CORRESPOND TO THE MONTH, VIZ.,31 FOR JAN,28 FOR_^1*_$FEB, 31 FOR MAR, AND SO ON._^1*_$FOR A LEAP YEAR (YY DIVIDED EQUALLY BY 4) DD FOR FEB MAY BE 29._^1*_]_^1*_$ANY NUMBER OTHER THAN THE ABOVE RESULTS IN J04._^1*_]_^1*_$INPUT_^1*_*(A)= INDEX TO PARAMET€€ER IN BUFFER_^1*_]_^1*_$OUTPUT_^1*_*THE VALIDATED NUMBER IN ITS ORIGINAL PLACE._^1*_]_^1FLS09 ADC 0_^1*_]_^1_%RTJ FLS02_(COMPUTE ADDRESS OF PARAMETER._^1*_*UPON RETURN (Q)=ADDRESS OF FIRST WORD OF THE PARAMETER_^1*_]_^1*_$VALIDATE FIRST WORD AS A MONTH 01-12_^1*_]_^1_%LDA- (ZERO),Q_^1_%RTJ* FLS10_(CONVERT ASCII TO BINARY_^1_%SAZ FLS092_'00 IS INVALID. SKIP_^1_%INA -13_^1_%SAM €€ FLS095_'LT.13. VALID. SKIP_^1*_]_^1FLS092 JMP* FLS045_'INVALID PATAMETER. J04_^1*_]_^1FLS095 INA 13_^1_%STA* FLSV91_^1*_]_^1*_]_^1*_$VALIDATE THIRD WORD AS A YEAR. 00-99._^1*_]_^1_%LDA- 2,Q_^1_%RTJ* FLS10_(CONVERT ASCII TO BINARY_^1_%STA* FLSV93_'AND SAVE IT TEMPORARILY._^1*_]_^1*_$VALIDATE SECOND WORD AS A DAY. 01-31.THIS MUST CORRESPOND_^1*_$TO THE MONTH. IT MAY BE 29 FOR FEBRU€€ARY OF A LEAP YEAR._^1*_]_^1_%LDA- 1,Q_^1_%RTJ* FLS10_(CONVERT ASCII TO BINARY_^1_%STA* FLSV94_'SAVE NBR OF DAYS_^1*_]_^1*_$GET THE HIGHEST VALID NUMBER OF DAYS FOR THE GIVEN MONTH._^1*_]_^1_%LDQ* FLSV91_'MONTH_^1_%LDA* FLS90T,Q_$VALID HIGHEST NUMBER OF DAY_^1*_]_^1FLS096 SUB* FLSV94_^1_%SAP FLS099_'VALID.SKIP_^1*_]_^1_%INA 1_^1_%SAN FLS098_'INVALID REJECT J04_^1*_]_^1_%INQ -2_€€^1_%SQN FLS098_'NOT FEBRUARY. SKIP.INVALID_^1*_]_^1_%LDA* FLSV93_'CHECK FOR A LEAP YEAR_^1_%AND- LPMASK+2_^1_%SAZ FLS099_'29 DAYS FOR FEB IN LEAP YEAR.VALID.SKIP_^1*_]_^1FLS098 JMP* FLS045_'INVALID PARAMETER. J04_^1*_]_^1FLS099 JMP* (FLS09)_%VALID PARAMETER.EXIT._^1*_]_^1FLSV91 NUM 0_,)MONTH (BINARY)_^1FLSV93 NUM 0_,)YEAR (BINARY)_^1FLSV94 NUM 0_,)DAYS (BINARY)_^1*_]_^1_%SPC€€ 4_^1FLS90T NUM 0_^1_%NUM 31_+JAN +1_^1_%NUM 28_+FEB +2_'CHECK FOR LEAP YEAR_^1_%NUM 31_+MAR +3_^1_%NUM 30_+APR +4_^1_%NUM 31_+MAY +5_^1_%NUM 30_+JUN +6_^1_%NUM 31_+JUL +7_^1_%NUM 31_+AUG +8_^1_%NUM 30_+SEP +9_^1_%NUM 31_+OCT +10_^1_%NUM 30_+NOV +11_^1_%NUM 31_+DEC +12_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO CONVERT AN ASCII WORD TO A BINARY VALUE_^1*_]_^1*_$I€€NPUT_^1*_*(A)= ASCII WORD_8EXAMPLE_^1*_R19(DEC)=3139(ASCII)_^1*_]_^1*_$OUTPUT_^1*_*(A)= BINARY VALUE_^1*_$EXAMPLE_^1*_*(A)=ASCII WORD_!3139_!(DECIMAL 19)_^1*_U(Q)_#(A)_^1FLS10 ADC 0_IQ_%A_^1*_]_^1_%STQ* FLS101_'SAVE REGISTER Q_43139_^1*_]_^1*_$VALIDATE THE PARAMETER AS TWO NUMERALS (00-99)_^1*_]_^1_%STA* FLS102_'SAVE IT TEMPORARILY._^1*_]_^1_%AND =N$F0F0_^1_%EOR =N$3030_^1_%SAZ€€ FLS104_'NUMERIC. SKIP_^1FLS103 JMP* FLS045_'INVALID PARAMETER. J04_^1*_]_^1FLS104 LDA* FLS102_^1_%TRA Q_H3139_"3139_^1_%AND- LPMASK+4_A3139_"0009_^1_%LLS 16_G0009_"3139_^1_%ARS 8_H0009_"0031_^1_%STQ* FLS102_^1_%AND- LPMASK+4_A0009_"0001_^1_%TRA Q_H0001_"0001_^1_%ALS 3_H0001_"0008_^1_%AAQ A_H0001_"0009_^1_%AAQ A_H0001_"000A_^1_%ADD* FLS102_K0013 (HEX)_^1*_]_^1_%LDQ* FLS101_€€'RESTORE Q_^1_%JMP* (FLS10)_%EXIT._^1*_]_^1FLS101 NUM 0_,TEMPORARY STORAGE_^1FLS102 NUM 0_,TEMPY STORAGE_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO GET A CHAR(INDEX IN V17) FROM_^1*_$A BUFFER (ADDRESS IN Q)_^1*_]_^1*_$INPUT_^1*_*V17=CHARACTER INDEX_^1*_80=UPPER CHAR(B8-15) OF WORD1_^1*_81=LOWER CHAR(B0-7) OF WORD1_^1*_82=UPPER CHAR(B8-15)OF WORD2,_^1*_8AND SO ON._^1*_]_^1*_$€€OUTPUT_^1*_*A BITS 0-7= CHARACTER_^1*_]_^1FLS11 ADC 0_^1_%LDA- V17,I_(CHARACTER INDEX_^1_%ARS 1_^1_%AAQ Q_,Q=WORD ADDRESS_^1_%STQ* FLS11V_^1*_]_^1_%LDA- V17,I_(CHECK UPPER OR LOWER CHARRACTER_^1_%AND- LPMASK+1_^1*_]_^1_%LDQ* (FLS11V)_$GET WORD_^1_%SAZ FLS11D_$SKIP IF UPPER CHARACTER (A=0)_^1*_]_^1_%TRQ A_^1_%JMP* FLS11E_^1*_]_^1FLS11D TRQ A_,GET LOWER CHARACTER_^1_%ALS 8_^1€€*_]_^1FLS11E AND- LPMASK+8_^1*_]_^1_%JMP* (FLS11)_%EXIT_^1*_]_^1FLS11V NUM 0_,TEMP STORAGE_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TP VALIDATE A PARAMETER AS A VALID LU_^1*_$NUMBER OF 1 OR 2 NUMERALS AND ALSI .LE. LEGAL LU NUMBER(ALOG1A)_^1*_]_^1*_$INPUT_^1*_*(Q)=PARAMETER ADDRESS_^1*_]_^1FLS13 ADC 0_^1*_]_^1*_$CHECK IR TO BE ONE OR TWO DIGIT NUMBER_^1*_]_^1_%LDA- 1,Q_^1_%EOR =N€€$2020_^1_%SAZ FLS132_^1FLS131 JMP* FLS103_'OTHERWISE REJECT(J04)_^1*_]_^1FLS132 LDA- (ZERO),Q_$CONVERT THE NBR TO BINARY_^1_%AND- LPMASK+8_^1_%INA -$20_^1_%SAN FLS134_'SKIP IF 2 CHARACTERS_^1_%LDA- (ZERO),Q_^1_%AND- NZERO+8_^1_%INA $30_^1_%ALS 8_^1_%JMP* FLS135_^1*_]_^1FLS134 LDA- (ZERO),Q_^1*_]_^1FLS135 RTJ FLS10_^1*_]_^1_%STA- (ZERO),Q_$SAVE THE BINARY NUMBER_^1*_]_^1*_$VAL€€IDATE THE NBR TO BE A VALID LEGAL LU_^1*_]_^1_%SUB* (ALOG1A)_^1_%SAZ FLS136_'EQ. OK_^1_%SAM FLS136_'LT. OK_^1*_]_^1_%JMP* FLS131_'OTHERWISE REJECT_^1*_]_^1FLS136 LDA- V01,I_(REQUEST CODE_^1_%INA -7_^1_%SAP FLS139_'SKIP FOR THE REWIND AND UNLOAD REQUESTS_^1_%LDQ- (ZERO),Q_$FOR OTHERS CHECK LU REFERS A PSUEDO DRIVER_^1*_]_^1_%LDQ* (ALOG1A),Q_^1_%LDA- 8,Q_*EQPT CODE_^1_%ARS 4_^1_€΄%AND- LPMASK+7_^1_%INA -36_^1_%SAZ FLS139_'SKIP IF A PSUEDO DRIVER_^1_%JMP* FLS131_'OTHERWISE REJEXT_^1*_]_^1FLS139 JMP* (FLS13)_%EXIT_^1*_]_^1ALOG1A ADC LOG1A_^1_%END JPFL_^__΄PJPF2V4 CSY/ D52 P€1_%NAM JPF2V4_'DECK-ID D52 MSOS 4.1_-SUMMARY-079_^1*_$JOB PROCESSOR FILE REQUEST PROGRAM MODULE 2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_$THIS MODULE IS ENTERED FROM THE JOB PROCESSOR FOR_^1*_$PROCESSING A REQUEST FOR PROCESSUNG A REQUEST FO€€R_^1*_$THE JOB PROCESSOR FILE_^1*_]_^1*_$THE REQUEST WAS ALREADY CHECKED FOR THE ACCURACY IF THE_^1*_$VALIDATED REQUEST CODE AND THE NIMBER AND FORMAT_^1*_$OF THE PARAMETERS OF A REQUEST_^1*_]_^1*_$THE REQUEST CODE AND THE PARAMETERS ARE SAVED IN_^1*_$THE JOBENT BUFFER JPFLBF_^1*_]_^1*_$MODULE 2 TAKED THE APPROPRIATE ACTION ON RHE REQUEST AS PER THE_^1*_$THE REQUEST CODE_^1*_$AFTER€€ EXECUTION THE CONTROL IS RETURNED TO THE JOB PROCESSOR_^1*_]_^1*_$DIAGNOSTICS ARE TYPED IN CASE OF AN INVALID PARAMETER(S)_^1*_]_^1_%SPC 4_^1*_]_^1****** EQUATE CARDS_^1_%EQU LPMASK($2)_^1_%EQU NZERO($12)_^1_%EQU ZERO($22)_^1_%EQU ONEBIT($23)_^1_%EQU TEN($46)_$TEN DECIMAL_^1_%EQU ADISP($EA)_^1_%EQU AMONI($F4)_^1_%SPC 4_^1*_]_^1*_8FIRST WORD IS THE NUMBER OF PARAMETERS._^1€€_%EQU V01(1)_'REQUEST CODE_^1_%EQU V02(2)_')_^1_%EQU V03(3)_') 1ST PARAMETER_^1_%EQU V04(4)_')_^1*_]_^1_%EQU V05(5)_')_^1_%EQU V06(6)_') 2ND PARAMETER_^1_%EQU V07(7)_')_^1*_]_^1_%EQU V08(8)_')_^1_%EQU V09(9)_') THIRD PARAMETER_^1_%EQU V10(10)_%)_^1*_]_^1_%EQU V11(11)_%)_^1_%EQU V12(12)_%) 4TH PARAMETER_^1_%EQU V13(13)_%)_^1*_]_^1_%EQU V14(14)_%)_^1_%EQU V15(15)_%) 5T€€H PARAMETER_^1_%EQU V16(16)_%)_^1*_]_^1_%EQU V17(17)_^1_%EQU V18(18)_^1_%EQU V19(19)_^1_%EQU V20(20)_^1_%EQU V21(21)_^1_%EQU V22(22)_%TEMPORARY CHAR STORAGE_^1_%EQU V23(23)_%CHARACTER STORAGE ADDRESS_^1_%EQU V24(24)_^1_%EQU V25(25)_%TEMPORARY USAGE_^1_%EQU V26(26)_%ADDRESS OF FLBUF2_^1_%EQU V27(27)_%TOTAL NUMBER OF FILES CHECKED SO FAR_^1*_]_^1_%SPC 4_^1*******ENTRY PO€€INTS_^1_%ENT JPF2_^1*_]_^1_%SPC 4_^1*******EXTERNAL POINTS_^1_%EXT MIBUF_(SMI BUFFER ADDRESS_^1_%EXT JBPROE_'ENTRY POINT TO JOBENT(TRNVEC)_^1_%EXT TRNVEC_'ABS.ADRS OF TRANTA BUFFER IN JOBENT_^1_%EXT MIB_^1_%EXT LOG1A_^1_%EXT FILE3_^1_%EXT PARBV4_'LOC. WITH THE ADDRESS OF THE JOBENT BUFFER_^1_%EXT FBASV4_'FIRST FILE NBR USED BY JOB PROCESSOR_^1_%EXT JBFLV4_'NBR OF JOB PRO€€CESSOR FILES IN SYSTEM_^1_%EXT RELFIL_'FILE MANAGER RELEASE ROUTINE_^1_%EJT_]_^1*_]_^1_%EQU JPF2(*)_%ENTRY POINT_^1JPFL_!NUM $C8FE_^1_%STA* (F3)_^1*_$SAVE START ADDRESS OF JBFL PROGRAM_^1_%STA* JBV01_^1*_]_^1*_$SAVE INPUT REQUEST BUFFER ADDRESS_^1_%LDQ MIBUF_^1*_8IN HERE_^1_%STQ* JBV02_^1*_]_^1*_$COMPUTE THE OTHER ABSOLUTE ADDRESSES OF LOCATIONS_^1*_$REFERRED TO IN THIS MODULE_€€^1*_]_^1_%LDQ* FLBF1A_'REQUEST PARAMETER BUFFER ADDRESS_^1_%AAQ Q_^1_%STQ* FLBF1A_^1_%STQ- I_^1*_]_^1_%LDQ* FLBF2A_'FILE BLOCK BUFFER ADDRESS_^1_%AAQ Q_^1_%STQ* FLBF2A_^1_%STQ- V26,I_^1*_]_^1_%LDQ* FLBF3A_'PRINT BUFFER ADDRESS_^1_%AAQ Q_^1_%STQ FLS08C_^1_%STQ* FLBF3A_^1*_]_^1*_$MOVE THE REQUEST COSE AND THE PARAMETERS FROM THE JOBENT_^1*_$BUFFER JBFLBF TO THE LOCAL BUFFER FLBUF€€1_^1*_]_^1_%ENA 15_+INDEX=15_^1_%RAO- I_,ADJUST I_^1*_]_^1_%LDQ PARBV4_'GET ADDRESS OF JOBENT BUFFER_^1*_]_^1JBFL02 STA* JBV04_(SAVE CURRENT INDEX_^1*_]_^1_%LDA* (JBV04),Q_#GET WORD_^1_%STA* (JBV04),I_#STORE WORD_^1*_]_^1_%LDA* JBV04_(CHECK IF ALL WORDS MOVED_^1_%INA -1_^1_%SAM JBFL04_'SKIP IF ALL MOVED_^1_%JMP* JBFL02_'OTHERWISE LOOP_^1*_]_^1JBFL04 LDA- $FF_*RESTORE I_^1_%INA €€ -1_^1_%STA- $FF_^1*_]_^1_%LDA =XJBFLV4_^1_%SAN JBFL03_'SKIP IF ANY FILE IN SYSTEM_^1*_]_^1_%LDA- 1,I_*FOR ANY REQUEST OTHER THAN REW/UNL NO ACTION_^1_%INA -7_^1_%SAP JBFL05_'SKIP IF REW/UNL_^1*_]_^1_%ENQ 4_^1_%JMP FL0622_^1*_$READ THE FIRST FILE BLOCK_^1*_]_^1JBFL03 LDQ- $E9_*EXTENDED CORE TABLE_^1_%LDA- 8,Q_*FIRST SECTOR OF DIRECTORY_^1_%STA- V17,I_(SAVE IT FOR USE IN FLS05€€_^1_%RTJ FLS05_(READ THE BLOCK_^1_%NUM $4800_(FREAD_^1*_]_^1*_]_^1*_$CHECK WHETHER THE REQUEST IS TO CLOSE ALL THE FILES_^1*_$OPENED SO FAR._^1*_]_^1_%LDQ- 1,I_^1_%SQP JBFL05_'NOT SUCH A REQUEST. SKIP_^1_%JMP FL0600_^1*_]_^1JBFL05 LDQ- 1,I_*GET REQUEST CODE AVD EXIT TO_^1_%LDQ FLT003,Q_$YHE APPROPRIATE ROUTINE_^1_%ADQ JBV01_^1_%JMP- (ZERO),Q_^1*_]_^1_%EJT_]_^1*_]_^1*******VAR€€IABLES USED_^1*_]_^1F3_#ADC FILE3_^1JBV01 ADC 0_,START ADDRESS OF JBFL PROGRAM_^1JBV02 ADC 0_,INPUT REQUEST BUFFER ADDRESS_^1JBV03 NUM 0_,TEMPY STORAGE FOR Q PASSED BY CALLER_^1JBV04 NUM 0_,TEMP SOTIRAGE_^1*_]_^1FLBF1A ADC FLBUF1-JPFL_!ADDRESS OF FLBUF1_^1FLBF2A ADC FLBUF2-JPFL_!ADDRESS OF FLBUF2_^1FLBF3A ADC FLBUF3-JPFL_!ADDRESS OF FLBUF3_^1*_]_^1*_$THE BUFFER FLBUF1 I€€S USED TO SAVE THE PARAMETERS OF THE_^1*_$GIVEN REQUEST.THE TEMPY STORAGE FOR SAVING INTERMEDIATE_^1*_$INFORMATION IS THE LATTER PART OF THIS BUFFER_^1*_]_^1FLBUF1 BZS FLBUF1(28)_^1*_]_^1*_$THE BUFFER FLBUF2 IS USED TO READ THE FILE BLOCK AVAILABLE_^1*_$ON ONE SECTOR OF THE MASS STORAGE FILE._^1*_]_^1FLBUF2 BZS FLBUF2(96)_^1*_]_^1*_$THE FLBUF3 IS USED TO DUMP THE FILE TABLE_^1*_]€€_^1FLBUF3 ALF 22,_!NAME_'DATE_'OP/CL_%R/W_^1*_]_^1_(EJT_^1*_8JOB ABORTED_^1JBFIOE LDA =N$3039_%I/O ERROR IN EXECUTION OF REQUEST_^1*_8JOB ABORTED_^1_%JMP FL0405_^1*_]_^1_(EJT_^1*_]_^1*_$FILE HANDLING ROUTINE ADDRESS TABLES_^1*_]_^1FLT003 ADC FL0300-JPFL_!+0 DEFINE_^1_%ADC FL0400-JPFL_!+1 RELEAS_^1_%ADC FL0450-JPFL_!+2 OPEN_^1_%ADC FL0500-JPFL_!+3 CLOSE_^1_%ADC FL0350-JPFL_!€€+4 MODIFY_^1_%ADC FL0650-JPFL_!+5 FILTBL_^1_%ADC FL0600-JPFL_!+6 PURGE_^1_%ADC FL0700-JPFL_!+7 REWIND_^1_%ADC FL0700-JPFL_!+8 UNLOAD_^1*_]_^1_%EJT_]_^1*_]_^1*_$DEFINE FILE REQUEST ACTION_^1*_]_^1*_$SEARCH FOR A 9 WORD EMPTY FILE ENTRY.IF NO EMPTY ENTRY_^1*_$IS FOUND, REJECT (J13)._^1*_$REJECT REQUEST IF THE GIVEN FILE NAME ALREADY DEFINES_^1*_$AN EXISTING FILE (J11)._^1*_]_^1*_€€$THE FIRST FILE BLOCK ADDRESS IS IN V26,I_^1*_]_^1FL0300 RTJ FLS07_^1*_]_^1*_$CHECK WHETHER AN EMPTY FILE WAS FOUND_^1*_]_^1_%LDA- V20,I_^1_%SAN FL0304_'EMPTY FILE ENTRY IS AVAILABLE.SKIP_^1_%LDA =N$3133_%NO MORE ROOM FOR THIS FILE, J13_^1_%JMP* FL0405_^1*_]_^1*_$READ THE FILE BLOCK WITH THE EMPTY ENTRY_^1*_]_^1FL0304 RTJ FLS12_^1*_]_^1*_$BASE ADDRESS OF THE EMPTY ENTRY IN (Q)_€€^1*_]_^1*_$SET UP TO DEFINE THE FILE AND REWRITE THE FILE BLOCK_^1*_]_^1*_$SAVE THE DEFINITION PARAMETERS_^1*_]_^1_%LDA- V02,I_(FILE NAME_^1_%STA- (ZERO),Q_^1_%LDA- V03,I_^1_%STA- 1,Q_^1_%LDA- V04,I_^1_%STA- 2,Q_^1*_]_^1*_]_^1_%LDA- V05,I_(SECURITY CODE_^1_%STA- 3,Q_^1_%LDA- V06,I_^1_%STA- 4,Q_^1_%LDA- V07,I_^1_%STA- 5,Q_^1*_]_^1_%LDA- V08,I_(EXPIRATION DATE_^1_%STA- 6,Q_^1_%LDA- V€€09,I_^1_%STA- 7,Q_^1_%LDA- V10,I_^1_%STA- 8,Q_^1*_]_^1_%JMP* FL0360_'REWRITE BLOCK AND EXIT_^1*_]_^1_%EJT_]_^1*_]_^1*_$MODIFY FILE REQUEST ACTION_^1*_]_^1*_$SEARCH FOR A 9 WORD FILE ENTRY MATCHING THE GIVEN_^1*_$FILE NAME, AND THE SECURITY CODE._^1*_$IF NO SUCH ENTRY IS PRESENT,REJECT(J10 OR J04)_^1*_$IF SUCH AN ENTRY IS PRESENT,CHECK WHETHER THE NEW_^1*_$FILE NAME ALREADY DEFINES €€ANOTHER EXISTING FILE._^1*_$IF YES, REJECT J11 IN FLS07_^1*_$IF NO, THEN MODIFY THE FILE PARAMETERS_^1*_]_^1*_$THE FIRST FILE BLOCK CORE ADDRESS IS IN V26,I._^1*_]_^1FL0350 RTJ FLS07_^1*_]_^1*_$CHECK WHETHER A FILE ENTRY HAS BEEN FOUND_^1*_]_^1_%LDA- V20,I_^1_%SAN FL0352_^1_%JMP* FL0401_'FILE NOT DEFINED EARLIER. J10_^1*_]_^1*_$READ THE FILE BLOCK CONTAINING THE SPECIFIC FILE EN€€TRY_^1*_]_^1FL0352 RTJ FLS12_^1*_]_^1*_$BASE ADDRESS OF THE ENTRY IN (Q)_^1*_]_^1*_$SET UP TO MODIFY THE FILE._^1*_]_^1_%LDA- V08,I_(NEW FILE NAME_^1_%STA- (ZERO),Q_^1_%LDA- V09,I_^1_%STA- 1,Q_^1_%LDA- V10,I_^1_%STA- 2,Q_^1*_]_^1_%LDA- 11,I_)NEW SECURITY CODE_^1_%STA- 3,Q_^1_%LDA- 12,I_^1_%STA- 4,Q_^1_%LDA- 13,I_^1_%STA- 5,Q_^1*_]_^1_%LDA- 6,Q_*NEW EXPIRATION DATE_^1_%AND- NZERO+1€€5_^1_%ADD- 14,I_^1_%STA- 6,Q_^1_%LDA- 7,Q_^1_%AND- NZERO+15_^1_%ADD- 15,I_^1_%STA- 7,Q_^1_%LDA- 16,I_^1_%STA- 8,Q_^1*_]_^1*_$REWRITE THE FILE BLOCK AND EXIT_^1*_]_^1FL0360 RTJ FLS05_^1_%NUM $4C00_(FWRITE_^1*_]_^1_%JMP FL0620_^1*_]_^1_%EJT_]_^1*_]_^1*_$RELEASE FILE REQUEST ACTION_^1*_]_^1*_$SEARCH FOR A 9 WORD FILE ENTRY MATCHING THE GIVEN_^1*_$FILE NAME AND THE SECURITY CODE._^1€€*_$IF NO SUCH ENTRY IS FOUND, REJECT (J10 OR J04)_^1*_$IF SUCH A FILE EXISTS CLEAR ALL THE 9 WORDS OF THE_^1*_$ENTRY, AND REWRITE THE FILE BLOCK._^1*_]_^1FL0400 RTJ FLS07_(SEARCH FOR THE SPECIFIC FILE_^1*_]_^1_%LDA- V20,I_^1_%SAN FL0402_^1FL0401 LDA =N$3130_%FILE NOT DEFINED EARLIER. J10_^1FL0405 JMP FL0072_^1*_]_^1*_$SET UP TO CLEAR THE 9 WORD ENTRY_^1*_]_^1*_*V18,I= INDEX TO €€FILE BLOCK_^1*_*V19,I= INDEX TO ENTRY_^1*_*V26,I= FILE BLOCK ADDRESS_^1*_*(Q) = FILE ENTRY BASE ADDRESS_^1*_]_^1FL0402 ENA 8_^1FL0404 STA FLV601_^1_%CLR A_^1_%STA- (ZERO),Q_^1_%LDA FLV601_^1_%SAZ FL0409_'RELEAS IT_^1_%INQ 1_^1_%INA -1_^1_%JMP* FL0404_^1FL0409 RTJ FLS15_(REWIND AND CLEAN UP PSYTAB_,61*1293_^1_%RTJ* RELFEL_N61*1293_^1_%JMP* FL0360_^1RELFEL NOP 0_^1*_]_^1FL04€€10 LDA JBV01_(ABSOLUTIZE ADDRESSES FOR FILMGR_^1_%ADD =XFILEN-JPFL_!CALL_^1_%STA* LOC1_)ADDRESS OF FILE NUMBER_^1_%STA* LOC3_)STATUS RETURN_^1_%INA 1_^1_%STA* LOC2_)WORKINF BUFFER FOR FILE MANAGER_^1_%RTJ FLS14_(GET FILE NUMBER_^1_%STA* FILEN_^1*_$HAVE TO SCHEDULE UP TO 3 TO MAKE THE FILE MANAGER CALL_^1*_$IF WE DON'T THE F. M. WILL INTERRPRET THE CALL AS IF_^1*_$IT CAME FROM U€€NPROTECTED_^1_%RTJ- ($F4)_^1RIL_"NUM $1303_^1_%ADC RFIL-RIL_^1_%JMP- ($EA)_^1RFIL_!RTJ RELFIL_'RELEASE THE FILE_^1LOC1_!NUM 0_^1LOC2_!NUM 0_^1LOC3_!NUM 0_^1_%RTJ- ($F4)_^1GOZERO NUM $1300_^1_%ADC BACK0-GOZERO_^1_%JMP- ($EA)_^1BACK0 LDA FLBF1A_'RESTORE I_^1_%STA- I_^1_%JMP* (RELFEL)_^1_%SPC 2_^1FILEN NUM 0_^1*_$THE NEXT 12 DEC. LOCATIONS WILL BE USED AS A WORKING_^1*_$BU€€FFER BY THE FILE MANAGER. THIS WILL OVERLAY PART_^1*_$OF THE OPEN FILE ROUTINE BUT WILL CAUSE NO PROBLEM_^1*_$SINCE JPF2V4 WILL BE BROUGHT IN AGAIN._^1_%EJT_]_^1*_]_^1*_$OPEN FILE REQUEST ACTION_^1*_]_^1*_$SEARCH FOR A 9-WORD FILE ENTRY MATCHING THE GIVEN_^1*_$FILE NAME AND THE SECURITY CODE._^1*_$IF NO SUCH ENTRY IS FOUND REJECT (J10 OR J04)_^1*_$IF SUCH A FILE EXISTS OPEN THE FIL€€E (SET B15 OF_^1*_$ENTRY+6) AND REWRITE THE FILE BLOCK._^1*_]_^1FL0450 LDQ- V11,I_(GET LOGICAL UNIT_1**MSOS 4.1**_^1_%LDQ (ALOG1A),Q_"GET PDT ADDRESS_2**MSOS 4.1**_^1_%LDA- 8,Q_*GET EREQST_7**MSOS 4.1**_^1_%ALS 15_+GET AVAILABLE TO UNPROT BIT IN A15**MSOS 4.1**_^1_%SAP OKUP_)IS AVAILABLE TO UNPROTECTED_%**MSOS 4.1**_^1_%LDA =A07_)JP07 ERROR_7**MSOS 4.1**_^1_%JMP* FL0405_'GO REP€€ORT_8**MSOS 4.1**_^1OKUP_!RTJ FLS07_(SEARCH FOR SPECIFIC FILE_)**MSOS 4.1**_^1*_]_^1_%LDA- V20,I_^1_%SAN FL0452_^1_%JMP* FL0401_'FILE NOT DEFINED EARLIER. J10_^1*_]_^1*_$SET B15 OF FILE ENTRY+6_^1*_$BASE ADDRESS OF FILE ENTRY IS IN (Q)_^1*_]_^1FL0452 LDA- 6,Q_^1_%SAP FL0453_'SKIP IF THE FILE IS CLOSED_^1_%JMP* FL0455_'OTHERWISE REJECT. J14_^1*_]_^1FL0453 EOR- ONEBIT+15_^1*_]_^1€€_%STA- 6,Q_^1*_]_^1*_$SET THE R/W INDICATOR (BIT 15 OF ENTRY+7)._^1*_$FOR R(READ) B15=0 AND FOR W(WRITE) B15=1_^1*_]_^1_%LDA- 7,Q_^1_%AND- LPMASK+15_^1_%EOR- V08,I_^1_%STA- 7,Q_^1*_]_^1*_]_^1_%RTJ FLS14_(GET THE ABS. NBR OF THE FILE_^1*_]_^1*_]_^1*_$GET THE PHSTAB ASSOC. WITH THE ASSIGNED LU_^1*_$AND SAVE THE FILE NUMBER IN PHSTAB+16_^1*_]_^1_%LDQ- V11,I_(GIVEN LU(4TH PARAMETER)_^€€1_%LDQ (ALOG1A),Q_^1_%STA- 16,Q_)(A)=FILE NUMBER_^1*_]_^1_%LDA =N$2401_%SET 800 LOADPOINT READY STARUS_^1_%EOR- V08,I_^1_%STA- 12,Q_^1*_]_^1_%JMP* FL0360_^1*_]_^1FL0455 LDA =N$3134_%TRY TO OPEN AN OPENED FILE.REJECT.J14_^1_%JMP* FL0405_^1FLV457 NUM 0_,TEMPY USE_^1FLV458 NUM 0_,TEMPY USE_^1FLV459 NUM 0_,TEMPY USE_^1*_]_^1*_]_^1_%EJT_]_^1*_]_^1*_$CLOSE FILE REQUEST ACTION_^1*_]€€_^1*_$SEARCH FOR A 9 WORD FILE ENTRY MATCHING THE GIVEN_^1*_$FILE NAME AND THE SECURITY CODE._^1*_$IF NO SUCH ENTRY IS FOUND REJECT (J10 OR J04)_^1*_]_^1*_$IF SUCH A FILE EXISTS BUT HAS NOT BEEN YET OPENED REJECT J12_^1*_]_^1*_$IF SUCH A FILE EXISTS CLOSE THE FILE(CLEAR B15 OF_^1*_$ENTRY+6) AND REWRITE THE FILE BLOCK._^1*_]_^1FL0500 RTJ FLS07_(SEARCH FOR THE MATCHING FILE ENTRY_^€€1*_]_^1_%LDA- V20,I_^1_%SAN FL0502_^1_%JMP* FL0401_'FILE NOT DEFINED EARLIER. J10_^1*_]_^1*_$CLEAR BIT 15 OF THE FILE ENTRY+6 (BASE ADDRESS IN Q)_^1*_$AND REWRITE THE FILE BLOCK._^1*_]_^1FL0502 LDA- 6,Q_^1_%SAM FL502A_'SKIP IF OPEN FILE_^1_%JMP* FL0509_'OTHERWISE REJECT._^1FL502A EOR- ONEBIT+15_^1_%STA- 6,Q_^1*_]_^1*_$RESET THE WRITE INDICATOR(BIT 15 OF ENTRY+7)_^1*_]_^1_%LDA- 7,€€Q_^1_%AND- LPMASK+15_^1_%STA- 7,Q_^1_%STQ* FLV459_'SAVE CURRENT FULE ENTRY_^1_%RTJ FLS15_^1*_]_^1FL0506 LDQ* FLV459_^1_%LDA FLBF1A_'RESTORE I_^1_%STA- I_^1*_]_^1FL0507 JMP* FL0360_^1*_]_^1*_]_^1FL0509 LDA =N$3132_%FILE NOT OPENED EARLIER. REJECT. J12_^1_%JMP* FL0405_^1*_]_^1_%EJT_]_^1*_]_^1*_$PURGE REQUEST ACTION_^1*_]_^1*_$SEARCH FOR A 9 WORD ENTRY FOR A DEFINED FILE._^1*_]_^1*€€_$COMPARE THE EXPIRATION DATE WITH THE GIVEN DATE_^1*_$IF THE EXPIRATION DATE.LE.GIVEN DATE, ZERO OUT THE ENTRY._^1*_]_^1*_$AFTER ALL THE ENTRIES IN A FILE BLOCK HAVE BEEN CHECKED_^1*_$REWRITE THE FILE BLOCK ONLY IF ANY ONE OF ITS ENTRIES_^1*_$HAS BEEN PURGED._^1*_]_^1*_$EXIT FROM THE ROUTINE AFTER ALL THE FILE BLOCKS HAVE_^1*_$BEEN PURGED OF ALL ENTRIES WITH THEIR DATES.LE.GIVEN D€€ATE._^1*_]_^1*_]_^1*_$ROUTINE TO CLOSE ALL FILES OPENED SO FAR._^1*_]_^1*_$THIS CLOSING OF ALL THE FILES OPENED AT ANY TIME IS_^1*_$DONE ON THE CALL FROM THE JOB PROCESSOR. THE CONTENTS_^1*_$OF Q IN SUCH A CALL ARE $FFFF (NEGATIVE ZERO)._^1*_]_^1*_$SEARCH FOR A 9 WORD ENTRY FOR A DEFINED FILE_^1*_$CHECK WHETHER THE FILE IS CLOSED OR OPENED._^1*_$IF CLOSED NO ACTION_^1*_$IF OPEN, CL€€OSE THE FILE, AND SET FILE FOR READ ONLY_^1*_]_^1*_$AFTER ALL THE FILES IN A FILE BLOCK HAVE BEEN CHECKED_^1*_$REWRITE THE FILE BLOCK ONLY IF ANYONE OF ITS ENTRIES_^1*_$HAS BEEN CLOSED_^1*_]_^1*_$EXIT FROM THE ROUTINE AFTER ALL THE FILE BLOCKS HAVE_^1*_$BEEN CHECKED._^1*_]_^1***_"THIS ROUTINE IS USED FOR BOTH THE PURGE AND THE_^1*_$THE CLOSE ALL THE OPENED FILES_^1*_]_^1*_$THE WORD€€ INDICATING THE PURGE/CLOSE ALL OPENED FILES_^1*_$IS THE REQUEST PARAMETER BUFFER(ADDRESS IN I)+1._^1*_$IT IS NEGATIVE WHEN ALL OPENED FILES ARE TO BE CLOSED_^1*_$IT IS 6 FOR PURGE FILE TABLE REQUEST_^1*_]_^1*_$INITIALIZE_^1*_]_^1*_*V26,I=FIRST FILE BLOCK CORE ADDRESS_^1*_]_^1FL0600 CLR A_^1_%STA- V20,I_(A FILE ENTRY HAS BEEN PURGED INDICATOR_^1_%STA- V21,I_(INDEX TO NUMBER OF FIL€€E BLOCKS CHECKED_^1_%STA- V22,I_(INDEX TO CURRENT FILE ENTRY IN FILE BLOCK_^1_%LDQ- V26,I_(FILE BLOCK CORE BASE ADDRESS_^1*_]_^1FL0601 LDA- (ZERO),Q_$GET ENTRY ASSOCIATED WITH V22,I_^1_%SAN FL061A_'ENTRY IS DEFINED.SKIP_^1_%JMP* FL0610_'EMPTY ENTRY._^1*_]_^1*_]_^1*_$CHECK THE PURGE/CLOSE ALL REQUEST_^1*_]_^1FL061A LDA- V01,I_^1_%SAP FL061B_'PURGE REQUEST.SKIP_^1_%JMP* FL0615_'CLO€€SE ALL FILES REQUEST._^1*_]_^1FL061B LDA- 6,Q_*DO NOT PURGE AN OPEN FILE._^1_%SAP FL0602_'CLOSED FILE.SKIP TO PURGE IF NECESSARY_^1_%JMP* FL0605_'OPEN FILE.DO NOT PURGE._^1*_$COMPARE THE EXPIRATION DATE OF THE ENTRY WITH THAT OF REQUEST._^1*_]_^1FL0602 LDA- V04,I_(YY_^1_%SUB- 8,Q_^1_%SAZ FL0603_'SKIP TO CHECK MONTH_^1_%SAP FL0606_'PURGE_^1_%JMP* FL0605_'DO NOT PURGE_^1*_]_^1FL06€€03 LDA- 6,Q_*MM_^1_%AND- LPMASK+15_^1_%SUB- V02,I_^1_%SAZ FL0604_'SKIP TO CHECK DAYS_^1_%SAM FL0606_'PURGE_^1_%JMP* FL0605_'DO NOT PURGE_^1*_]_^1FL0604 LDA- 7,Q_*DD_^1_%AND- LPMASK+15_^1_%SUB- V03,I_^1_%SAM FL0606_'PURGE_^1_%SAZ FL0606_'PURGE OF EQUAL DAYS.EQUALMONTH.EQUAL YEAR_^1FL0605 JMP* FL0610_'DO NOT PURGE_^1*_]_^1*_$PURGE THE ENTRY_^1*_]_^1FL0606 ENA 8_^1FL0607 STA* FLV€€601_^1_%CLR A_^1_%STA- (ZERO),Q_^1_%LDA* FLV601_^1_%SAZ FL0608_'ENTRY PURGED.SKIP_^1_%INQ 1_^1_%INA -1_^1_%JMP* FL0607_'LOOP_^1*_]_^1FL0608 RTJ RELFEL_'RELEASE FILE SPACE_^1_%RAO- V20,I_(SET AN ENTRY WAS PURGED_^1_%INQ -8_^1*_]_^1FL0610 LDA- V22,I_(CHECK ALL ENTRIES IN THE FILE BLOCK_^1_%INA -9_^1_%SAN FL0614_'NOT ALL PROCESSED. SKIP_^1*_]_^1_%LDA- V20,I_(CHECK ANY FILE CLO€€SED/PURGED FROM THIS BLOCK._^1_%SAZ FL0614_'NONE.SKIP_^1*_]_^1_%RTJ FLS05_(OTHERWISE REWRITE THE FILE BLOCK_^1_%NUM $4C00_(FWRITE_^1*_]_^1_%CLR A_,RESET THE FILE CLOSED/PURGED FLAG._^1_%STA- V20,I_^1*_]_^1FL0614 RTJ FLS06_(GET NEXT FILE ENTRY,IF ANY._^1_%JMP* FL0620_'ALL FILES CHECKED EXIT_^1_%JMP* FL0601_'PROCESS THE NEXT ENTRY._^1*_]_^1*_$COME HERE TO CLOSE THE FILE IF IT IS€€ OPEN_^1*_]_^1FL0615 LDA- 6,Q_^1_%SAP FL0616_'FILE CLOSED ALREADY SKIP_^1*_]_^1_%AND- LPMASK+15_#CLOSED FILE FLAG_^1_%STA- 6,Q_^1_%LDA- 7,Q_^1_%AND- LPMASK+15_^1_%STA- 7,Q_^1*_]_^1_%RTJ FLS15_^1*_]_^1_%RAO- V20,I_(SET A FILE IS CLOSED INDICATOR_^1*_]_^1FL0616 JMP* FL0610_'CHECK NEXT ENTRY_^1*_]_^1_%SPC 4_^1*_]_^1*_$SET UP TO TYPE J AND INPUT CONTROL STATEMENT_^1*_]_^1FL0620 ENQ €€ 0_^1_%LDA- V01,I_(ARE WE ABIRTING A JOB_^1_%SAM 1_,YES_^1_%INQ 10_^1_%INQ 4_^1*_]_^1FL0622 CLR A_,CLEAR MIB SWITCH_^1_%STA* (FL0625)_^1_%LDA JBPROE_^1_%STA* FL0629+1_^1_%ENA 1_^1*_]_^1FL0629 JMP+ 0_^1*_]_^1*_]_^1FL0625 ADC MIB_^1*_]_^1*_]_^1FLV601 NUM 0_,TEMPORARY STORAGE_^1*_]_^1_%EJT_]_^1*_]_^1*_$PRINT FILE TABLE REQUEST ACTION._^1*_]_^1*_$SEARCH FOR A DEFINED FILE AND P€€RINT_^1*_*FILE NAME_^1*_*MAXIMUM RECORD LENGTH_^1*_*EXPIRATION DATE_^1*_*OPEN/CLOSE STATUS_^1*_*READ/WRITE STATUS_^1*_]_^1*_*EXIT WHEN ALL FILES HAVE BEEN PROCESSED_^1*_]_^1*_$ON ENTRY THE FIRST FILE BLOCK CORE ADDRESS IS IN V26,I._^1*_]_^1*_$INITIALIZE_^1*_]_^1FL0650 CLR A_^1_%STA- V21,I_(INDEX TO FILE BLOCKS_^1_%STA- V22,I_(INDEX TO FILE ENTRY_^1*_]_^1*_$PRINT THE HEADER FOR THE€€ BUFFER,AND THEN RESET THE_^1*_$PRINT BUFFER TO ALL BLANKS_^1*_]_^1_%RTJ FLS08_^1*_]_^1*_]_^1*_$GET THE BASE ADDRESS OF THE FILE ENTRY_^1*_]_^1FL0652 ENQ 0_^1_%LDA- V22,I_(INDEX TO FILE ENTRY_^1_%ALS 3_,MULTIPLY BY 9_^1_%ADD- V22,I_^1_%ADD- V26,I_(PLUS BASE ADDRESS OF THE BUFFER_^1_%TRA Q_,BASE ADDRESS OF ENTRY_^1*_]_^1_%STQ* FLV652_'SAVE FILE ENTRY ADDRESS_^1_%LDA- (ZERO),Q_$G€€ET ENTRY_^1_%SAN FL0654_'FILE IS DEFINED.SKIP_^1_%JMP* FL0664_'EMPTY FILE ENTRY._^1*_]_^1*_$FORMAT THE FILE PARAMETERS FOR PRINT OUT_^1*_]_^1FL0654 LDA- I_,SAVE REGISTER I_^1_%STA* FLV651_^1*_]_^1_%LDA FLBF3A_'PRINT BUFFER ADDRESS TO I._^1_%STA- I_^1*_]_^1_%LDA- (ZERO),Q_$FILE NAME_^1_%STA- 1,I_^1_%LDA- 1,Q_^1_%STA- 2,I_^1_%LDA- 2,Q_^1_%STA- 3,I_^1*_]_^1_%LDA- 6,Q_*EXPIRATION DAT€€E_^1_%AND- LPMASK+15_^1_%STA- 7,I_^1_%LDA- 7,Q_^1_%AND- LPMASK+15_^1_%STA- 8,I_^1_%LDA- 8,Q_^1_%STA- 9,I_^1*_]_^1*_$CHECK STATUS OPEN/CLOSE_^1*_]_^1_%LDA- 6,Q_^1_%SAP FL0656_'CLOSED. SKIP_^1*_]_^1_%LDA =AOP_)ENTER OPEN_^1_%STA- 13,I_^1_%LDA =AEN_^1_%JMP* FL0658_^1*_]_^1FL0656 LDA =ACL_^1_%STA- 13,I_^1_%LDA =AOS_^1*_]_^1FL0658 STA- 14,I_^1_%LDA =AED_^1_%STA- 15,I_^1*_$CHECK RE€€AD/WRITE STATUS_^1*_]_^1_%LDA- 7,Q_^1*_]_^1_%SAP FL0660_'READ ONLY. SKIP_^1*_]_^1_%LDA =AWR_)ENTER WRITE_^1_%STA- 19,I_^1_%LDA =AIT_^1_%STA- 20,I_^1_%LDA =AE_^1_%JMP* FL0662_^1*_]_^1FL0660 LDA =ARE_^1_%STA- 19,I_^1_%LDA =AAD_^1_%STA- 20,I_^1_%LDA =A_^1FL0662 STA- 21,I_^1*_]_^1_%LDA* FLV651_'RESTORE I_^1_%STA- I_^1*_]_^1_%RTJ FLS08_(PRINT BUFFER AND BLANK OUT._^1*_]_^1FL0664€€ RTJ FLS06_(GET NEXT ENTRY_^1_%JMP* FL0669_'ALL FILES PROCESSED EXIT_^1_%JMP* FL0652_'PROCESS NEXT FILE ENTRY._^1*_]_^1*_$PAGE EJECT AFTER THE FILES ARE PRINTED_^1*_]_^1FL0669 LDA =N$200C_%PAGE EJECT_7**MSOS 4.1**_^1*_]_^1_%LDQ FLBF3A_'BUFFER ADDRESS_^1_%STA- (ZERO),Q_^1*_]_^1_%ENA 1_,NUMBER OF WORDS TO BE OUTPUT_^1_%STA FLS08C-1_^1*_]_^1_%RTJ FLS08_(I/O PRINTER_^1*_]_^1_%JMP€€* FL0620_'EXIT_^1*_]_^1FLV651 NUM 0_,TEMPY STORAGE_^1FLV652 ADC 0_,SAVE Q TEMPORARILLY_^1*_]_^1_%EJT_]_^1*_]_^1*_$REWIND/UNLOAD REQUEST_^1*_]_^1*_$THE MAXIMUM NUMBER OF PARAMETERS IN A REWIND/UNLOAD_^1*_$REQUEST IS 5._^1*_]_^1*_$THE PARAMETERS OF A REWIND/UNLOAD REQUEST SPECIFY A_^1*_$LOGICAL UNIT NUMBER_^1*_]_^1*_$FOR A LU THE EQUIVALENT BINARY NUMBER IS THE PARAMETER_^1*_]_^1*_€€$GET THE NUMBER OF PARAMETERS IN THE REW/UNL REQUEST_^1*_$IT WAS SAVED AT V16,I( BY JPFLV4). PICK IT UP AND SAVE IN V00,I_^1*_]_^1FL0700 LDA- V16,I_^1_%STA- (ZERO),I_^1_%STA* FLV651_^1_%ENQ 3_^1*_]_^1*_$CHECK IT FOR REWIND/ UNLOAD REQUEST_^1*_]_^1_%LDA- V01,I_(REQUEST CODE_^1_%INA -7_^1_%SAZ FL0704_'SKIP IF REWIND REQUEST_^1*_]_^1_%INQ 1_^1*_]_^1FL0704 QLS 12_^1_%STQ* FL0726_€€^1*_]_^1FL0705 LDA* FLV651_'NBR OF PARAMETERS_^1_%INA -1_^1_%RTJ FLS02_(GET PARAMETER ADDRESS_^1*_]_^1_%LDA- (ZERO),Q_$SAVE THE GIVEN LU_!IN REQUEST._^1_%STA* FL0725_^1*_]_^1*_]_^1*_$REWIND REQUEST_^1*_]_^1FL0720 RTJ- (AMONI)_^1_%NUM $1D00_^1_%ADC FL0742-FL0720-1_^1FL0724 ADC 0_,+2 THREAD_^1FL0725 NUM 0_,+3 V,M,A,LU_^1FL0726 NUM 0_,+4 MOTION REQ CODE (3=REW,4=UNLOAD)._^1*_]_€€^1FL0730 JMP- (ADISP)_%DISPATCHER EXIT._^1*_]_^1*_]_^1FL0742 LDA FLBF1A_'RESTORS I_^1_%STA- I_^1_%LDA* FLV651_^1_%INA -1_^1_%SAZ FL0745_'SKIP IF ALL DONE_^1*_]_^1_%STA* FLV651_'OTHERWISE UPDATE NBR YET TO BE DONE_^1_%JMP* FL0705_'AND BUILD NEXT REW/UNL REQUEST_^1*_]_^1FL0745 JMP FL0620_'EXIT FROM THE ROUTINE_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO COMPUTE THE START ADDRE€€SS_^1*_$OF A PARAMETER IN THE PARAMETER BUFFER_^1*_]_^1*_$INPUT_^1*_*(A) = PARAMETER NUMBER 0- 4_^1*_]_^1*_8=(3*NUMBER+2)+I_^1*_]_^1*_$OUTPUT_^1*_*(Q)= START ADDRESS OF THE PARAMETER_^1*_]_^1FLS02 ADC 0_^1_%TRA Q_^1_%ALS 1_^1_%AAQ A_^1_%INA 2_^1_%ADD- I_^1_%TRA Q_^1*_]_^1_%JMP* (FLS02)_%EXIT_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO READ/WRITE A FILE BLOCK_^1*_]_^1*_€€$INPUT_^1*_*(I)=BASE ADDRESS OF TEMPORARY STORAGE_^1*_*V17,I=LSB OF THE SECTOR TO BE READ/WRITTEN_^1*_]_^1*_$OUTPUT_^1*_*(I)= NOT CHANGED_^1*_*(Q)= BASE ADDRESS OF THE BUFFER_^1*_]_^1FLS05 ADC 0_^1_%LDA* (FLS05)_%SAVE THE REQUEST CODE_^1_%STA* FLS051_^1_%RAO* FLS05_(UPDATE RETURN_^1_%LDA- I_,SAVE REGISTER I_^1_%STA* FLSV51_^1*_]_^1_%LDQ- V26,I_(BUFFER ADDRESS_^1_%STQ* FLS05C_^1_%€€LDA- V17,I_(LSB_^1_%STA* FLS05D_^1*_]_^1*_]_^1_%RTJ- (AMONI)_^1FLS051 NUM 0_,+0 RC USER SUPPLIED_^1_%ADC 0_,+1 CA_^1FLS05A ADC 0_,+2 T_^1FLS05B NUM $8C2_)+3 LIBRARY UNIT_^1_%NUM 96_++4 NUMBER OF WORDS_^1FLS05C ADC 0_,+5 START ADDRESS_^1_%NUM 0_,+6 MSB_^1FLS05D NUM 0_,+7 LSB_^1*_]_^1FLS052 LDA* FLS05A_'CHECK REQUEST COMPLETED_^1_%SAZ FLS053_'COMPLETED.SKIP_^1_%JMP* FLS052_^€€1*_]_^1FLS053 LDA* FLSV51_'RESTORE I_^1_%STA- I_^1*_]_^1*_$CHECK ANY ERROR_^1*_]_^1_%LDA* FLS05B_^1_%SAP FLS059_'NO ERROR.SKIP_^1_%JMP JBFIOE_'I/O ERROR.DIAGNOSTIC_^1FLS059 LDQ- V26,I_^1_%JMP* (FLS05)_^1*_]_^1FLSV51 NUM 0_,TEMP STORAGE_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO FIND NEXT FILE ENTRY IN THE FILE BLOCK._^1*_]_^1*_$IF NO MORE ENTRY IN THE CURRENT FILE BLOCK, TH€€E NEXT FILE_^1*_$BLOCK IS ACCESSED._^1*_]_^1*_$IF ALL FILE BLOCKS HAVE BEEN CHECKED AND NO FILE ENTRY CAN_^1*_$BE PASSED TO THE CALLER THE EXIT IS RETURN+0_^1*_$IF A FILE ENTRY IS AVAILABLE THE EXIT IS RETURN+1_^1*_]_^1*_$INPUT_^1*_*(I)=BASE ADDRESS OF TEMPORARY STORAGE_^1*_*V21,I =NUMBER OF FILE BLOCKS CHECKED_^1*_*V22,I =NUMBER OF ENTRIES CHECKED_^1*_*V23,I =CURRENT FILE BLOCK AD€€DRESS_^1*_*V27,I = CURRENT TOTAL NUMBER OF FILES CHECKED_^1*_*(Q)_!=CURRENT FILE ENTRY ADDRESS_^1*_]_^1*_$OUTPUT_^1*_*V21,I = UPDATED NUMBER OF FILE BLOCKS CHECKED_^1*_*V22,I = UPDATED NUMBER OF FILE ENTRIES CHECKED IN_^1*_2THE FILE BLOCK(ADDRESS IN V23,I)_^1*_*V23,I = ADDRESS OF FILE BLOCK(EITHER OLD,OR NEW)_^1*_*V27,I = UPDATED TOTAL NUMBER OF FILES CHECKED_^1*_*(Q) = NEW FILE EN€€TRY ADDRESS_^1*_]_^1FLS06 ADC 0_^1*_]_^1_%RAO- V22,I_(BUMP NBR OF FILES IN CURRENT BLOCK CHECKED_^1*_]_^1_%RAO- V27,I_(BUMP NBR OF FILES (TOTAL)CHECKED SO FAR_^1*_]_^1*_$CHECK ALL THE SYSTEM FILES CHECKED_^1*_]_^1_%LDA =XJBFLV4_^1_%SUB- V27,I_(LESS FILES CHECKED SO FAR_^1_%SAN FLS06A_'NOT DONE. SKIP_^1_%JMP* FLS069_'JUMP IF ALL CHECKED_^1*_]_^1FLS06A LDA- V22,I_(CHECK IF ALL 10€€ ENTRIED OF THIS BLOCK DONE_^1_%INA -10_^1_%SAZ FLS061_'SKIP IF YES._^1*_]_^1*_$OTHERWISE SET UP FOR NEXT ENTRY IN THIS BUFFER_^1*_]_^1_%INQ 9_^1_%JMP* FLS067_^1*_]_^1FLS061 RAO- V21,I_(BUMP NUMBER OF SECTORS CHECKED_^1*_]_^1*_$SET UP TO READ THE NEXT SECTOR_^1*_]_^1FLS062 RAO- V17,I_(UPDATE LSB OF SECTOR_^1*_]_^1_%RTJ FLS05_(READ THE SECTOR_^1_%NUM $4800_(FREAD_^1*_]_^1*_$UPO€€N RETURN THE NEW SECTOR IS READ INTO FILE BUFFER FLBUF2_^1*_$THE ADDRESS OF THIS BUFFER IS IN Q AND V26,I_^1*_0V22,I TO ZERO (NUMBER OF ENTRIES CHECKED)._^1_%CLR A_^1_%STA- V22,I_(FIRST ENTRY IN FILE BLOCK_^1*_]_^1*_$AND EXIT WITH AN AVAILABLE FILE ENTRY._^1*_]_^1FLS067 RAO* FLS06_^1*_]_^1FLS069 JMP* (FLS06)_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO SEARCH FOR A FILE ENTRY I€€N THE_^1*_$JOB PROCESSOR FILES, WHICH MATCHES THE FILE REFERENCED_^1*_$IN THE CURRENT FILE REQUEST._^1*_]_^1*_$THE FIRST FILE BLOCK ADDRESS IS IN V26,I_^1*_]_^1FLS07 ADC 0_^1*_8INITIALIZE_^1_%CLR A_^1_%STA- V20,I_(ORIGINAL FILE NAME AND SC ENTRY FOUND._^1_%STA- V21,I_(INDEX TO FILE BLOCK HAVING THE ENTRY._^1_%STA- V22,I_(INDEX TO ENTRY IN THE FILE BLOCK_^1*_]_^1_%LDQ- V26,I_(FIL€€E BLOCK CORE ADDRESS_^1*_]_^1*_$CHECK REQUEST CODE_^1*_]_^1FLS071 LDA- V01,I_^1_%SAZ FLS71A_'DEFINE REQUEST.SKIP_^1_%JMP* FLS072_^1*_]_^1*_$FOR DEFINE REQUEST_^1*_]_^1FLS71A LDA- (ZERO),Q_$CHECK FILE ENTRY EMPTY_^1_%SAZ FLS71B_'EMPTY.SKIP_^1*_]_^1*_$OTHERWISE CHECK WHETHER THE GIVEN FILE NAME ALREADY_^1*_$EXISTS FOR ANOTHER FILE. IF YES, REJECT (J11)_^1*_]_^1_%SUB- V02,I_^1_%SAN €€ FLS71C_'NO DUPLICATE SKIP_^1_%LDA- 1,Q_^1_%SUB- V03,I_^1_%SAN FLS71C_'NO DUPLICATE. SKIP_^1_%LDA- 2,Q_^1_%SUB- V04,I_^1_%SAN FLS71C_'NO DUPLICATE. SKIP_^1_%JMP* FLS07F_'DUPLICATE FILE. J11_^1*_]_^1*_$CHECH WHETHER AN EMPTY ENTRY HAS BEEN ALREADY FOUND._^1*_]_^1FLS71B LDA- V20,I_^1_%SAZ FLS71D_'EMPTY ENTRY NOT FOUND. SKIP_^1FLS71C JMP* FLS07A_'OTHERWISE ACCESS NEXT ENTRY IF ANY_€€^1*_]_^1*_$SAVE THE POINTERS TO THE EMPTY FILE, AND SET THE EMPTY_^1*_$ENTRY FOUND FLAG._^1*_]_^1FLS71D LDA- V21,I_(INDEX TO FILE BLOCK_^1_%STA- V18,I_^1_%LDA- V22,I_(INDEX TO FILE ENTRY_^1_%STA- V19,I_^1_%RAO- V20,I_(SET FLAG WORD_^1*_]_^1*_$AND ACCESS NEXT ENTRY_^1*_]_^1_%JMP* FLS07A_^1*_]_^1*_$COME HERE FOR THE MODIFY,RELEAS,OPEN,AND CLOSE FILE REQUESTS_^1*_]_^1FLS072 LDA- (ZERO€€),Q_^1_%SAZ FLS073_'NO MATCH.SKIP_^1_%EOR- V02,I_^1_%SAN FLS073_'NO MATCH. SKIP_^1_%LDA- 1,Q_^1_%EOR- V03,I_^1_%SAN FLS073_'NO MATCH. SKIP_^1_%LDA- 2,Q_^1_%EOR- V04,I_^1_%SAZ FLS074_'MATCH FOUND.SKIP_^1FLS073 JMP* FLS07B_'NO MATCH FOUND._^1*_]_^1*_$THE SECURITY CODES MUST ALSO MATCH_^1*_]_^1FLS074 LDA- 3,Q_*CHECK THE SC_^1_%EOR- V05,I_^1_%SAN FLS076_'NO MATCH.SKIP_^1_%LDA- 4,Q€€_^1_%EOR- V06,I_^1_%SAN FLS076_'NO MATCH.SKIP_^1_%LDA- 5,Q_^1_%EOR- V07,I_^1_%SAZ FLS078_'SC MATCH.SKIP_^1FLS076 JMP FL0070_'INVALID PARAMETER. J04_^1*_]_^1*_$FOR A MATCHING FILE ENTRY,SAVE ITS INDICES._^1*_]_^1FLS078 RAO- V20,I_(SET THE FLAG INDICATING ENTRY FOUND_^1_%LDA- V21,I_(INDEX TO FILE BLOCK_^1_%STA- V18,I_^1_%LDA- V22,I_(INDEX TO FILE ENTRY IN BLOCK_^1_%STA- V19,I_^1€€*_]_^1_%LDA- V01,I_(SKIP FOR A MODIFY REQUEST._^1_%INA -4_^1_%SAZ FLS07A_'SKIP IF A MODIFY REQUEST_^1*_]_^1FLS079 JMP* (FLS07)_%EXIT TO CALLER_^1*_]_^1*_$COME HERE TO ACCESS NEXT FILE ENTRY, IF ANY_^1*_]_^1FLS07A RTJ FLS06_^1_%JMP* FLS079_'AFTER ALL FILE BLOCKS ARE CHECKED._^1_%JMP* FLS071_'AFTER AN ENTRY IS FOUND_^1*_]_^1*_$CHECK THE REQUEST CODE IS TO MODIFY FILE(=4)_^1*_]_^1F€€LS07B LDA- V01,I_(REQUEST CODE_^1_%INA -4_^1_%SAZ FLS07C_'SKIP IF YES_^1*_]_^1_%JMP* FLS07A_'OTHERWISE GET NEXT ENTRY, IF ANY_^1*_]_^1*_$FOR A MODIFY REQUEST CHECK THE NEW FILE NAME IS GIVEN TO A_^1*_$PREVIOUSLY DEFINED FILE.IF YES,REJECT.J11_^1*_]_^1FLS07C LDA- (ZERO),Q_^1_%SAZ FLS07D_'NO DUPLICATE.SKIP_^1_%EOR- V08,I_^1_%SAN FLS07D_'NO DUPLICATE.SKIP_^1_%LDA- 1,Q_^1_%EOR- V09€€,I_^1_%SAN FLS07D_'NO DUPLICATE.SKIP_^1_%LDA- 2,Q_^1_%EOR- V10,I_^1_%SAN FLS07D_'NO DUPLICATE.SKIP_^1FLS07F LDA =N$3131_%DUPLICATE FILE. REJECT. J11_^1_%JMP FL0072_^1*_]_^1FLS07D JMP* FLS07A_'ACCESS NEXT ENTRY,IF ANY._^1*_]_^1*_]_^1_%EJT_]_^1*_]_^1*_$TYPE THE ERROR MESSAGE_^1*_]_^1FL0070 LDA =N$3034_%ILLEGAL PARAMETER. J04_^1*_]_^1FL0072 LDQ TRNVEC_^1_%STA- 10,Q_)SAVE ERROR C€€ODE_^1_%ENQ 6_,TERMINATE IN JOBPRO_^1_%LDA JBPROE_'GET RETURN_^1_%STA* FL007A+1_$TO JOBENT_^1_%ENA 0_^1_%STA (FL0625)_$CLEAR MIB_^1_%ENA 1_^1FL007A JMP+ 0_^1*_]_^1FL0079 NUM 0_,TEMP STORAGE_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO PRINT A BUFFER FLBUF3 AT THE_^1*_$STANDARD LIST DEVICE ($FB)_^1*_]_^1FLS08 ADC 0_^1*_]_^1_%STQ* FLSV81_'SAVE Q TEMPORARILY_^1*_]_^1_%RTJ- (AMONI€€)_^1_%NUM $4C00_(+0 RC FWRITE_^1_%ADC 0_,+1 CA_^1FLS08A ADC 0_,+2 T_^1FLS08B NUM $08FB_(+3 V,M,A,LU_^1_%NUM 22_++4 NUMBER_^1FLS08C ADC 0_,+5 START ADDRESS.PRINT BUFFER._^1*_]_^1*_]_^1FLS082 LDA* FLS08A_'CHECK REQUEST COMPLETED_^1_%SAZ FLS084_'COMPLETED. SKIP_^1_%JMP* FLS082_'WAIT TILL REQUEST IS DONE_^1*_]_^1FLS084 LDA FLBF1A_'RESTORE I_=61*1288_^1_%STA- I_S61*1288_^1_%LDA*€€ FLS08B_'CHECK FOR I/O ERROR_361*1288_^1_%SAP FLS085_'NO ERROR. SKIP_^1_%JMP FL0620_'ERROR - EXIT_:61*1288_^1*_]_^1*_]_^1*_82 CARDS DELETED_561*1288_^1*_]_^1*_$RESET THE BUFFER TO ALL BLANKS_^1*_]_^1FLS085 ENQ 21_R61*1288_^1_%LDA =N$2020_^1FLS086 STA (FLBF3A),Q_^1_%INQ -1_^1_%SQM FLS088_'ALL DONE. SKIP_^1_%JMP* FLS086_^1*_]_^1FLS088 LDQ* FLSV81_'RESTORE Q_^1FLS089 JMP* (FLS0€€8)_%EXIT._^1*_]_^1FLSV81 NUM 0_,TEMPY Q STORAGE_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO READ A FILE BLOCK CONTAINING A SPECIFIC_^1*_$FILE ENTRY AND TO RETURN WITH THE FILE ENTRY ADDRESS_^1*_]_^1*_$INPUT_^1*_]_^1*_*V18,I=INDEX TO FILE BLOCK_^1*_*V19,I= INDEX TO FILE ENTRY_^1*_]_^1*_$OUTPUT_^1*_]_^1*_*(Q)= BASE ADDRESS OF THE FILE ENTRY_^1*_*V26,I= BASE ADDRESS OF THE FILE BLOCK_^€€1*_]_^1FLS12 ADC 0_^1*_]_^1_%LDQ- $E9_*EXTENDED CORE TABLE_^1_%LDA- 8,Q_*FIRST SECTOR OF DIRECTORY_^1_%ADD- V18,I_(ADD THE FILE BLOCK INDEX_^1_%STA- V17,I_^1*_]_^1_%RTJ FLS05_(READ THE SECTOR_^1_%NUM $0800_^1*_]_^1*_$UPON RETURN (Q)= V26,I= FILE BLOCK ADDRESS_^1*_]_^1*_$COMPUT BASE ADDRESS OF FILE ENTRY_^1*_]_^1_%LDA- V19,I_(FILE ENTRY INDEX_^1_%ALS 3_,*8_^1_%ADD- V19,I_^1_%AA€€Q Q_,ADD BASE ADDRESS OF THE FILE BLOCK_^1*_]_^1_%JMP* (FLS12)_%EXIT_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON SUBROUTINE TO FIND THE ABS NBR OF A DEFINED FILE_^1*_]_^1*_$INPUT_^1*_*V18,I=INDEX TO FILE SECTOR_^1*_*V19,I=INDEX TO FILE ENTRY_^1*_]_^1*_$OUTPUT_^1*_*A=ABS FILE NUMBER_^1*_]_^1FLS14 ADC 0_^1_%LDA- V18,I_^1_%ALS 3_,* 9 = *8 + 1_^1_%ADD- V18,I_^1_%ADD =XFBASV4_^1_%ADD- V19,I_€€^1*_]_^1_%JMP* (FLS14)_^1*_]_^1_%EJT_]_^1*_]_^1*_$COMMON S/R TO SEARCH FOR A PSUEDO DRIVER WITH THE THE GIVEN FILR_^1*_]_^1*_$IF FOUND REWIND THE LU ASSOC WITH THE FILE_^1*_]_^1*_$START SEARCH IN LOG1A BACKWARDS WITH MAX LU_^1*_]_^1FLS15 ADC 0_^1_%STQ* FLS15C_^1_%RTJ FLS14_(GET ABS FILE NBR_^1_%STA* FLS15A_^1*_]_^1_%LDQ* ALOG1A_^1_%LDQ- (ZERO),Q_^1FLS153 STQ* FLS15B_'SAVE CURREN€€T LU_^1_%LDQ (ALOG1A),Q_^1_%LDA- 8,Q_^1_%ARS 4_^1_%AND- LPMASK+7_^1_%INA -36_^1_%SAZ FLS155_'SKIP IF PSUEDO DRIVER_^1*_]_^1*_$OTHERWISE CHECK NEXT LU IF ANY_^1*_]_^1FLS154 LDQ* FLS15B_^1_%INQ -1_^1_%SQZ FLS156_'SKIP IF DONE_^1_%JMP* FLS153_^1*_]_^1FLS155 LDA- 16,Q_)COMPARE THE FILE NUMBER_^1_%SUB* FLS15A_^1_%SAZ FLS158_'SKIP IF MATCHES_^1*_]_^1_%JMP* FLS154_'OTHERWISE SEARCH€€ NEXT_^1*_]_^1FLS156 LDQ* FLS15C_'RESTORE Q_^1_%LDA FLBF1A_'RESTORE I_^1_%STA- I_^1_%JMP* (FLS15)_%EXIT_^1*_]_^1FLS158 STQ* FLS15D_'SAVE PSYTAB OF PSEUDO TAPE_^1_%LDA* FLS15B_'GENERATE A REWIND REQUEST_^1_%STA* FLS162_^1*_]_^1_%RTJ- (AMONI)_^1FLS160 NUM $1D00_^1_%ADC FLS167-FLS160_^1_%ADC 0_,+2 T_^1FLS162 NUM 0_,+3 V,M,A,LU_^1_%NUM $3000_(+4 REWIND_^1*_]_^1_%JMP- (ADISP)_^1*_€ψ]_^1FLS167 LDQ* FLS15D_^1_%ENA 0_^1_%STA- 16,Q_)ZERO FILE NUMBER_^1_%JMP* FLS156_^1*_]_^1FLS15A NUM 0_,TEMP STORAGE_^1FLS15B NUM 0_,TEMP STORAGE_^1FLS15C NUM 0_^1FLS15D NUM 0_,CURRENT PSYTAB_^1ALOG1A ADC LOG1A_^1*_]_^1***_]_^1_%END JPFL_^__ψPJPSTV4 CSY/ D49 P€1_%NAM JPSTV4_'DECK-ID D49 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT V4JPV4_K**MSOS 4.0_^1_%EXT INPTV4_K**MSOS 4.0_^1_%EXT TRNVEC,IUP,JOBIND,LOADIN_^1_%EXT IP1,RELFLE,FILE2,JBPROE_^1_%EXT MIB_L**MSOS 4.1**_^1_%EQU DIS€€P($EA)_H**MSOS 4.0_^1_%EQU REQXT($B9)_G**MSOS 4.0_^1_%SPC_!1_^1*_'JPST ROUTINE_'*_^1*_'HANDLES *B, *U, *V, *SR, *, AND *Z INPUT STATEMENTS **_^1_%SPC 2_^1V4JPV4 NUM $C8FE_L**MSOS 4.0_^1_%STA* (F2)_)STORE FWA IN TRVEC_1**MSOS 4.0_^1_%ENA 0_P**MSOS 4.0_^1_%STA MIB_*CLEAR JOB LOCKOUT_2**MSOS 4.0_^1_%LDQ TRNVEC_'TRANTA TABLE ADDRESS IN JOBENT_$**MSOS 4.0_^1_%TRQ A_P**MSOS 4.0_^€€1JPST_!LDQ- 10,Q_)REQUEST CODE_7**MSOS 4.0_^1_%INQ -1_^1_%LDQ* TAB,Q_^1_%JMP* JPST,Q_^1RETRF3 ENQ 14_+SCHEDULE JOBPRO_4**MSOS 4.0_^1_%ENA 1_P**MSOS 4.0_^1GETMOD STA* INDEX_(MODULE INDEX_7**MSOS 4.0_^1_%LDA JBPROE_'GET NEXT CONTROL_3**MSOS 4.0_^1_%STA- I_,STATEMENT_:**MSOS 4.0_^1_%LDA* INDEX_L**MSOS 4.0_^1_%JMP- (I)_N**MSOS 4.0_^1INDEX NUM 0_P**MSOS 4.0_^1COMDEV NUM $18FD_L**€€MSOS 4.0_^1F2_#ADC FILE2_L**MSOS 4.0_^1_%SPC 1_^1_%SPC 1_^1* ********************************************************************_^1 SPC 1_]_^1TAB_"ADC BPLOAD-JPST_^1_%ADC TYPEIN-JPST_^1_%ADC STDINP-JPST_^1_%ADC SGNOFF-JPST_^1_%ADC SETREC-JPST_^1_%ADC RESUME-JPST_^1_%ADC WEOF-JPST_H**MSOS 4.0_^1_%SPC 1_^1* *************************************************************€€*******_^1_%SPC_!1_^1***_!*B JOB PROCESSOR STATEMENT_^1* SET THE BREAK-POINT LOAD SWITCH_^1_%SPC_!1_^1BPLOAD TRA Q_,TRANTA ADDTESS_5**MSOS 4.0_^1_%STA- 7,Q_*SET BPS_<**MSOS 4.0_^1_%JMP* RETRF3_^1_%SPC_!1_^1***_!*U JOB PROCESSOR STATEMENT_^1* READ ALL CONTROL STATEMENTS FROM COMMENT MEDIUM_^1_%SPC_!1_^1TYPEIN LDA* COMDEV_'SET INPUT COMMENT TO TTY_+**MSOS 4.0_^1_%STA* (IUPP)_^1€€_%JMP* RETRF3_^1 SPC 1_]_^1_%SPC_!1_^1***_!*V JOB PROCESSOR STATEMENT_^1* READ ALL CONTROL STATEMENTS FROM STANDARD_^1* INPUT DEVICE_^1_%SPC_!1_^1STDINP LDA INPTV4_'SET INPUT TO STD. BINARY_+**MSOS 4.0_^1_%STA* (IUPP)_^1_%JMP* RETRF3_^1_%SPC_!1_^1***_!*SR JOB PROCESSOR STATEMENT_^1_%SPC_!1_^1SETREC TRA Q_P**MSOS 4.0_^1_%LDA- 2,Q_*INPUT BUFFER_7**MSOS 4.0_^1_%STA- I_P**MSOS 4€€.0_^1_%LDA- 1,I_N**MSOS 4.0_^1_%AND- $A_+FF_A**MSOS 4.0_^1_%SUB- $A_+IF NOT RECOVERY GO TO JPLOAD_'**MSOS 4.0_^1_%SAN GETLD_(NOT AN *SR_9**MSOS 4.0_^1_%STQ- 8,Q_*SET RECOVERY INDICATOR_-**MSOS 4.0_^1_%JMP* RETRF3_^1GETLD ENA 2_P**MSOS 4.0_^1_%JMP* GETMOD_(GET JPLOAD THRU JOBENT_,**MSOS 4.0_^1_%SPC_!2_^1* THIS ROUTINE WILL CAUSE THE JOB PROCESSOR TO CONTINUE WITH ($E4) = 1_^1*_$€€AND THE LOADER-IN-CORE FLAG SET TO ZERO_/**MSOS 4.0_^1_%SPC 2_^1RESUME ENA 1_,SET START OF SCRATCH TO BEGINNING_^1_%STA- $E4_^1_%ENA 0_P**MSOS 4.0_^1_%STA LOADIN_K**MSOS 4.0_^1_%JMP* RETRF3_^1IUPP_!ADC IUP_N**MSOS 4.0_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1***_!*Z JOB PROCESSOR STATEMENT_^1*_$*Z WILL TERMINATE THE BATCH SUBSYSTEM_1**MS€€OS 4.0_^1_%SPC_!1_^1SGNOFF ENA 0_^1_%STA_!JOBIND_^1_%STA_!LOADIN_^1_%ENA_!1_^1_%STA- $E4_^1_%SPC_!1_^1_%LDQ- $E9_*ADDR OF EXTENDED CORE TABLE_(**MSOS 4.0_^1_%LDQ- 9,Q_*ADDR OF RCTV IN MONI_/**MSOS 4.0_^1_%LDA- REQXT_^1_%STA- 3,Q_^1_%STA- 5,Q_^1_%STA- 7,Q_^1_%STA- 11,Q_^1_%STA- 13,Q_^1_%LDA- DISP_^1_%STA IP1_*SET PROTECT FAULT RETURN TO DISPATCHER_^1_%LDA INPTV4_'RESET CONT€€ROL INPUT DEVICE_)**MSOS 4.0_^1_%STA* (IUPP)_K**MSOS 4.0_^1_%CLR A_^1_%RTJ_!RELFLE_^1_%SPC 5_P**MSOS 4.0_^1*_$*EOF PROCESSOR_H**MSOS 4.0_^1*_$*EOF WILL WRITE ONE END OF FILE_7**MSOS 4.0_^1*_$TP_!THE STANDARD BINARY OUTPUT DECICE_0**MSOS 4.0_^1_%SPC 3_P**MSOS 4.0_^1WEOF_!TRA Q_P**MSOS 4.0_^1_%LDQ- 2,Q_*INPUT BUFFER ADDRESS_/**MSOS 4.0_^1_%LDA- 2,Q_N**MSOS 4.0_^1_%INA 0_P**MSOS €4.0_^1_%SAZ 1_P**MSOS 4.0_^1_%JMP* GETLD_(NOT A CONTROL STATEMENT_,**MSOS 4.0_^1_%LDA- $FA_N**MSOS 4.0_^1_%STA* REQ+3_L**MSOS 4.0_^1_%RTJ- ($F4)_L**MSOS 4.0_^1REQ_"NUM $1D00_L**MSOS 4.0_^1_%ADC COMP-REQ_I**MSOS 4.0_^1_%NUM 0,0,$2000_^1_%JMP- ($EA)_^1COMP_!JMP* RETRF3_^1_%END_]_^__PNAMEV4 CSY/ D50 P€1_%NAM NAMEV4_'DECK-ID D50 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1** ** ** ** **_^1_%SPC 1_P**MSOS 4.0_^1*_$NAMEV4-OUTPUTS JOB NAME IN BLOCK FORM_1**MSOS 4.0_^1*_+-ON STANDARD LIST DEVICE_8**MSOS 4.0_^1_%SPC 1_P**MSOS 4.€€0_^1_%ENT NV4_N**MSOS 4.0_^1_%EXT FILE3_L**MSOS 4.0_^1_%EXT SYSID,SYSMON,SYSDAY,SYSYER_^1_%EXT AYERTO,AMONTO,ADAYTO,TRNVEC_4**MSOS 4.1**_^1_%EQU ONEBIT($23)_^1_%EQU NZERO($12)_^1NV4_"NUM $C8FE_(PICK UP FILE3 ADDRESS_.**MSOS 4.0_^1_%STA FILE3_L**MSOS 4.0_^1_%JMP* NAMJOB_K**MSOS 4.0_^1_%EQU ZERO($22)_H**MSOS 4.0_^1_)BZS_%SPACTR_C**MSOS 4.0_^1_(BZS_%CHKLEG(1),ADRJOB(1)_7**MSO€€S 4.0_^1NAMJOB_!ENA_%0_I**MSOS 4.0_^1_(STA*_$SPACTR_.*COUNTER OF NO. OF DOU**MSOS 4.0_^1_(STA_%THIRT_.COUNTER OF BITS SHIFTED**MSOS 4.0_^1_%STA FLAG1_L**MSOS 4.0_^1_(ENA_%8_I**MSOS 4.0_^1_%STA OUTCTR_K**MSOS 4.0_^1_%LDA TRNVEC_K**MSOS 4.0_^1_%INA 15_+ADDRESS OF JOB NAME IF ANY_)**MSOS 4.0_^1_%STA* ADRJOB_K**MSOS 4.0_^1_%ENQ 15_^1MOVID LDA+ SYSID,Q_%MOVE SYSTEM ID_^1_%STA OUT€€BFB+7,Q_"INTO BUFFER_^1_%INQ -1_^1_%SQM MOVDAT_^1_%JMP* MOVID_^1MOVDAT LDA =XSYSMON_^1_%STA OUTBFC+1_$MOVE SYSTEM DATE_^1_%LDA =XSYSYER_$INTO BUFFER_^1_%STA OUTBFC+4_^1_%LDQ =N$2F2F_^1_%LDA =XSYSDAY_^1_%LLS 8_^1_%STQ OUTBFC+2_^1_%STA OUTBFC+3_^1_%LDA+ AMONTO_I**MSOS 4.1**_^1_%STA OUTBFA+8_^1_%LDA+ ADAYTO_I**MSOS 4.1**_^1_%ENQ $2F_*/_B**MSOS 4.0_^1_%LLS 8_P**MSOS 4.0_^€€1_%STQ OUTBFA+9_^1_%INA $2F_*/_B**MSOS 4.0_^1_%STA OUTBFA+10_^1_%LDA+ AYERTO_I**MSOS 4.1**_^1_%STA OUTBFA+11_^1RUN_"FWRITE $FB,HEADXX-RUN-1,OUTBUF-RUN-1,68,A,,,I,X_%**MSOS 4.0_^1_%JMP- ($EA)_L**MSOS 4.0_^1HEADXX ENA 0_P**MSOS 4.0_^1_%ENQ 67_O**MSOS 4.0_^1ZERXX STA OUTBUF,Q_I**MSOS 4.0_^1_%INQ -1_O**MSOS 4.0_^1_%SQM 1_P**MSOS 4.0_^1_%JMP* ZERXX_L**MSOS 4.0_^1_%LDQ TRNVEC€€_K**MSOS 4.0_^1_%LDA- 15,Q_M**MSOS 4.0_^1_%SAP FORM_M**MSOS 4.0_^1_%JMP EJECT_(NO JOB NAME_8**MSOS 4.0_^1FORM_!FWRITE $FB,LOOP-FORM-1,SPACE-FORM-1,1,A,,,I,X_(**MSOS 4.0_^1_%JMP- ($EA)_L**MSOS 4.0_^1LOOP_#RAO*_$SPACTR_.*INCREASE DOUBLE SPACE**MSOS 4.0_^1_(LDA*_$SPACTR_D**MSOS 4.0_^1_(SUB- $25 FOUR_!* 8 LINES DOWN FROM TOP OF FORM_#**MSOS 4.0_^1_(SAZ_%STOSPA_D**MSOS 4.0_^1_(JMP*_€€$FORM_F**MSOS 4.0_^1STOSPA_!STA*_$SPACTR_D**MSOS 4.0_^1_(STA- I_N**MSOS 4.0_^1_(RTJ_%REL_0PICK UP ADDRESS OF TABL**MSOS 4.0_^1START_"LDQ*_$ADRJOB_^1_(LDA-_$(ZERO),Q_^1_(CLR_%Q_I**MSOS 4.0_^1_(LLS_%8_.SHIFT UPPER CHAR TO A_$**MSOS 4.0_^1_(STA*_$CHKLEG_.*STORE LOWER CHAR_#**MSOS 4.0_^1_(RTJ*_$STWDAD_D**MSOS 4.0_^1_(LDA*_$CHKLEG_-*LOWER CHAR. OF WORD_!**MSOS 4.0_^1_(CLR_%Q_^1_(LLS_%8_€€^1_(RTJ*_$STWDAD_-STORE ADDRESS OF WORD **MSOS 4.0_^1_(RAO*_$ADRJOB_^1_(JMP*_$START_E**MSOS 4.0_^1STWDAD_!NOP_%0_.STORE ADDRESS OF WORD_$**MSOS 4.0_^1_(TRQ_%A_^1_(INQ_%-$30_^1_(SQM_%NOTLEG-*-1_*SKIP IF LOW LIMIT ILL_^1_(INQ_%-10_^1_(SQM_%LEGAL1-*-1_*SKIP IF NUMERIC_^1_(INQ_%-7_^1_(SQM_%NOTLEG-*-1_*SKIP IF MIDDLE LIMIT_^1_(INQ_%-$1A_^1_(SQM_%LEGAL2-*-1_*SKIP IF ALPHA_^1NOTLEG_!ENA_€€%$20_^1_(ENQ_%0_3INDEX TO SPACE_^1LEGAL2_!INQ_%$1A_1INDEX TO ALPHA_^1LEGAL1_!INQ_%$A_2INDEX TO NUMBR_^1_(STA*_$ASCII,I_^1_(QLS_%3_3X8_^1_(ADQ*_$ABSTAD_^1_(STQ*_$WORD,I_)WORD_^1_(RAO- I_N**MSOS 4.0_^1_(LDA-_$I_^1_(SUB- $44 SIX_"* SIX WORD ADDRESS_1**MSOS 4.0_^1_(SAZ_%STBLKS_-YES - ALL SIX ARE STORE**MSOS 4.0_^1_(JMP*_$(STWDAD)_+NO - PICK UP NEXT WORD **MSOS 4.0_^1ASCII BZS ASCII(€€6)_^1STBLKS RTJ SETBL_^1DECOD_"ENA_%0_I**MSOS 4.0_^1_(STA- I_N**MSOS 4.0_^1DECODE_!LDQ*_$WORD,I_)Q=ADDRESS OF CODING FOR LET**MSOS 4.0_^1_(LDA*_$FLAG1_E**MSOS 4.0_^1_(SUB- $24 TWO_"* SHOULD Q BE INCREASED_,**MSOS 4.0_^1_(SAN_%LOAD1_E**MSOS 4.0_^1_(INQ_%1_2INC ADR TO PICK UP_#**MSOS 4.0_^1_(STQ*_$WORD,I_-NEXT WORD_-**MSOS 4.0_^1LOAD1 LDA- (ZERO),Q_$A = CONTENTS OF ADDRESS_^1_(AND€€- $1A $FF00 * PICK UP FIRST CODE_/**MSOS 4.0_^1_(ALS_%8_I**MSOS 4.0_^1PKUP_#TRA_%Q_.Q= NUMBER OF CODE_)**MSOS 4.0_^1_(LDA_%CODEL,Q_(CODE IN A_1**MSOS 4.0_^1_(STA*_$TEMPBF_D**MSOS 4.0_^1_%LDA* ASCII,I_^1_%TRA Q_^1_%EOR- ONEBIT+13_#20XX_^1_%STA* BLKX+1_^1_%ALS 8_^1_%STA* INSX+2_^1_%AND- NZERO+8_%$FF00_^1_%AAQ A_^1_%STA* DUB58+1_%XXXX_^1SUBST_#LDA*_!TEMPBF_%TEMPBF_"CONTAINS CODE_€€(**MSOS 4.0_^1_(SAM_%INSX_/CHECK BIT 15 FOR A 1_!**MSOS 4.0_^1_(JMP*_$INSBLK_-NOT SET LEAVE BLANK_!**MSOS 4.0_^1INSX_#LDQ*_$OUTCTR_-BIT 15 SET_!STORE A X**MSOS 4.0_^1_(LDA_%=N$5820_,AND A BLANK IN THE BUFF**MSOS 4.0_^1_(STA_%OUTBUF,Q_B**MSOS 4.0_^1_(ENA_%1_I**MSOS 4.0_^1_(STA*_$XSET_0* SET FLAG TO INSERT X**MSOS 4.0_^1_(LDA*_$TEMPBF_D**MSOS 4.0_^1INSBLK_!ALS_%1_2SHIFT TO CHECK FO€€R BIT **MSOS 4.0_^1_(STA*_$TEMPBF_D**MSOS 4.0_^1_(RAO* THIRT_4*INCREASE COUNTER OF B**MSOS 4.0_^1_(JMP*_$SUBSTI_D**MSOS 4.0_^1WDCNT_"LDA*_$FLAG1_(*CHECK IF IN LOWER PART OF WO**MSOS 4.0_^1_(SUB- $23 ONE_H**MSOS 4.0_^1_(SAN_%INCR_/IN UPPER PORTION OF WOR**MSOS 4.0_^1_(JMP*_$DEC1_/CONTINUE_.**MSOS 4.0_^1INCR_#RAO- I_N**MSOS 4.0_^1_(LDA- I_N**MSOS 4.0_^1_(SUB- $44 SIX_#* SIX WORDS_8**€€MSOS 4.0_^1_(SAN_%BLANKS_D**MSOS 4.0_^1_(JMP*_$OUTBLK_-YES - OUTPUT BLANKS_"**MSOS 4.0_^1BLANKS_!JMP*_$DECODE_-NO - PICK UP CODE_$**MSOS 4.0_^1SUBSTI_!SAM_%INX_,BIT 15 SET - INSERT AN X **MSOS 4.0_^1_(JMP*_$INBLKI_-KEEP BLANK_,**MSOS 4.0_^1INX_$LDQ*_$OUTCTR_.*Q=POSITION IN OUTPUT **MSOS 4.0_^1_(LDA* XSET_'* CHECK IF X SET IN UPPER_***MSOS 4.0_^1_(SUB- $23 ONE_#* PART OF WORD_5**M€€SOS 4.0_^1_(SAN_%BLKX_/NO-STORE A BLANK AND A **MSOS 4.0_^1_(JMP*_$DUB58_.YES - STORE 2 X'S_$**MSOS 4.0_^1BLKX_#LDA_%=N$2058_C**MSOS 4.0_^1_(STA*_$OUTBUF,Q_B**MSOS 4.0_^1INBLKI_!LDA*_$TEMPBF_D**MSOS 4.0_^1_(ALS_%1_2CHECK IF BIT 15 SET_"**MSOS 4.0_^1_(STA* TEMPBF_I**MSOS 4.0_^1_(RAO* OUTCTR_$* INC COUNTER OF WORDS USED IN BUFFE**MSOS 4.0_^1_(RAO* THIRT_%* INCREASE COUNTER_1**MSOS 4.€€0_^1_(LDA* THIRT_J**MSOS 4.0_^1_(SUB- $27 $10_"* 16 BITS SHIFTED_2**MSOS 4.0_^1_(SAN_%LOOP1_E**MSOS 4.0_^1_%STA* XSET_^1_(STA* THIRT_%*CLEAR COUNTER OF BITS SHIFTED_$**MSOS 4.0_^1_%RTJ* SIXBLK_'YES- OUTPUT TWO BLANKS_^1_(JMP*_$WDCNT_E**MSOS 4.0_^1DUB58_"LDA_%=N$5858_C**MSOS 4.0_^1_(STA* OUTBUF,Q_G**MSOS 4.0_^1_(JMP*_$INBLKI_D**MSOS 4.0_^1LOOP1_"ENA_%0_I**MSOS 4.0_^1_(STA*_$XSET_/C€€LEAR FLAG_,**MSOS 4.0_^1_(JMP*_$SUBST_E**MSOS 4.0_^1_(BZS_"TEMPBF(1)_D**MSOS 4.0_^1_(BZS_%XSET(1)_C**MSOS 4.0_^1_(BZS_%ABSTAD(1),WORD(6),FLAG1(1)_^1_%BZS LINCTR(1)_^1_(BZS_#THIRT(1),OUTCTR(1)_:**MSOS 4.0_^1DECOD1_!ENA_%0_I**MSOS 4.0_^1_%STA* FLAG1_^1_(STA- I_N**MSOS 4.0_^1DE1_$LDQ*_$WORD,I_D**MSOS 4.0_^1_(LDA*_$FLAG1_E**MSOS 4.0_^1_(SUB- $24 TWO_#* SHOULD Q BE INCREASED_,**MSOS 4.€€0_^1_(SAN_%DEC_G**MSOS 4.0_^1_(INQ_%1_I**MSOS 4.0_^1DEC_$ENA_%1_2SET FLAG FOR_***MSOS 4.0_^1_(STA*_$FLAG1_.LOWER PORTION OF WORD **MSOS 4.0_^1LOAD_!LDA- (ZERO),Q_$PICK UP CODE IN LOWER_^1_(AND- $A $FF_#* PART OF WORD_5**MSOS 4.0_^1_(JMP*_$PKUP_F**MSOS 4.0_^1DEC1_#ENA_%0_I**MSOS 4.0_^1_(STA*_$FLAG1_.CLEAR FLAG_,**MSOS 4.0_^1_(RAO- I_N**MSOS 4.0_^1_(LDA- I_N**MSOS 4.0_^1_(SUB- $44 €€ SIX_G**MSOS 4.0_^1_(SAN_%PKNXCH_.NO - PICK UP NEXT CHAR**MSOS 4.0_^1_(JMP*_$OUTBK1_.YES - OUTPUT LINE OF C**MSOS 4.0_^1PKNXCH_!JMP*_$DE1_G**MSOS 4.0_^1OUTBK1 FWRITE $FB,OB1-OUTBK1-1,OUTBUF-OUTBK1-1,68,A,,,I,X_"**MSOS 4.0_^1_(JMP-_$($EA)_E**MSOS 4.0_^1OB1_$RTJ* SETBL_%* CLEAR OUTPUT BUFFER_.**MSOS 4.0_^1_(RAO* LINCTR_$* INCREASE LINE COUNTER_,**MSOS 4.0_^1_(LDA*_$LINCTR_D**MSOS 4.€€0_^1_(SUB-_$$27_"16 LINES OF CODE PRINTED_^1_(SAN_%JMDEC_E**MSOS 4.0_^1_(STA*_$LINCTR_-CLEAR LINE COUNTER_#**MSOS 4.0_^1_%JMP* EJECT_L**MSOS 4.0_^1JMDEC_"ENA_%2_^1_(STA*_$FLAG1_.SET FLAG TO INCREASE Q**MSOS 4.0_^1_(JMP_%DECOD_^1SETBL_"NOP_%0_.ROUTINE TO SET BLANKS IN BU**MSOS 4.0_^1_(ENA_%8_I**MSOS 4.0_^1_(STA*_$OUTCTR_-SET LEFT HAND MARGIN_!**MSOS 4.0_^1_(LDA_%=N$2020_C**MSOS 4.0€€_^1_(ENQ_%67_H**MSOS 4.0_^1BLANK_"STA*_$OUTBUF,Q_+STORE BLANKS IN 134 CHA**MSOS 4.0_^1_(INQ_%-1_-DECREASE MODIFIER_)**MSOS 4.0_^1_(SQM_%RET-*-1_C**MSOS 4.0_^1_(JMP*_$BLANK_*LOOP UNTIL BLANKS IN ALL_!**MSOS 4.0_^1RET_$JMP*_$(SETBL)_C**MSOS 4.0_^1OUTBLK_!FWRITE_"$FB,OB-OUTBLK-1,OUTBUF-OUTBLK-1,68,A,,,I,X **MSOS 4.0_^1_(JMP-_$($EA)_E**MSOS 4.0_^1OB_%RTJ* SETBL_%* CLEAR OUTPUT BUFFER_.€€**MSOS 4.0_^1_(RAO* LINCTR_$* INCREASE LINE COUNTER_,**MSOS 4.0_^1_(JMP*_$DECOD1_^1SIXBLK_!NOP_%0_I**MSOS 4.0_^1_(LDQ*_$OUTCTR_D**MSOS 4.0_^1_(LDA_%=N$2020_C**MSOS 4.0_^1_*STA*_$OUTBUF,Q_)STORE BLANKS OUTPUT BUF**MSOS 4.0_^1_(RAO* OUTCTR_I**MSOS 4.0_^1_(JMP*_$(SIXBLK)_B**MSOS 4.0_^1ABSTAB_!NOP_%0_I**MSOS 4.0_^1_(LDA*_$ABSTAB_D**MSOS 4.0_^1_(STA*_$ABSTAD_D**MSOS 4.0_^1_(JMP* (REL)_J€€**MSOS 4.0_^1EJECT FWRITE $FB,BACKJP-EJECT-1,TOPA-EJECT-1,1,A,,,I,X_$**MSOS 4.0_^1_%JMP- ($EA)_L**MSOS 4.0_^1BACKJP ENQ 14_O**MSOS 4.0_^1_%LDA JBPROE_K**MSOS 4.0_^1_%EXT JBPROE_K**MSOS 4.0_^1_%STA- I_P**MSOS 4.0_^1_%ENA 1_P**MSOS 4.0_^1_%JMP- (I)_N**MSOS 4.0_^1TOPA_!NUM $C20_M**MSOS 4.0_^1SPACE NUM $D20_M**MSOS 4.0_^1OUTBUF ALF 24, 1700 MASS STORAGE OPERATING SYSTEM VERSI€€ON 4.1_^1OUTBFA ALF 12,_!DATE OF RUN: MM/DD/YY_^1OUTBFB ALF 23,_!SYSTEM ID:_^1OUTBFC ALF 9, (MM/DD/YY)_^1REL_$NOP_%0_I**MSOS 4.0_^1_(RTJ*_$ABSTAB_D**MSOS 4.0_^1H0_#NUM $1300,$0003,$0303,$0303,$0303,$0303,$0,$132B_^1H1_#NUM $040F,$1011,$0504,$0404,$0404,$0404,$0,$002B_^1H2_#NUM $1300,$0003,$0608,$0904,$0A0B,$0D01,$0,$002B_^1H3_#NUM $1300,$0003,$1414,$0E13,$0E14,$1403,$0,$132B€€_^1H4_#NUM $0303,$0303,$0303,$0,$0014,$1414,$1414,$142B_^1H5_#NUM $0,$0001,$0101,$0200,$0014,$1403,$0,$132B_^1H6_#NUM $1300,$0003,$0101,$0200,$0003,$0303,$0,$132B_^1H7_#NUM $0,$0003,$1406,$0708,$0904,$0A0B,$0B0B,$0B2B_^1H8_#NUM $1300,$0003,$0303,$0013,$0003,$0303,$0,$132B_^1H9_#NUM $1300,$0003,$0303,$0,$0E14,$1403,$0,$132B_^1TA_#NUM $1300,$0003,$0303,$0000,$0003,$0303,$0303,€€$032B_^1TB_#NUM $0200,$0003,$0303,$0002,$0003,$0303,$0,$022B_^1TC_#NUM $1300,$0003,$0101,$0101,$0101,$0103,$0,$132B_^1TD_#NUM $0200,$0003,$0303,$0303,$0303,$0303,$0,$022B_^1TE_#NUM $0,1,$0101,$0202,$0201,$0101,0,$002B_^1TF_#NUM 0,1,$0101,$0202,$0201,$0101,$0101,$012B_^1TG_#NUM $1300,$0003,$0101,$0101,$1212,$0303,$0,$132B_^1TH_#NUM $0303,$0303,$0303,$0,$0003,$0303,$0303,$032B€€_^1TI_#NUM $0,$0004,$0404,$0404,$0404,$0404,$0,$002B_^1TJ_#NUM $1414,$1414,$1414,$1414,$1414,$1403,$0,$132B_^1TK_#NUM $0303,$1517,$1829,$1B1A,$1B29,$1817,$1503,$032B_^1TL_#NUM $0101,$0101,$0101,$0101,$0101,$0101,$0,$002B_^1TM_#NUM $031D,$1E1F,$2021,$2203,$0303,$0303,$0303,$032B_^1TN_#NUM $0303,$0323,$2425,$2621,$2716,$122A,$0303,$032B_^1TO_#NUM $1300,$002A,$1216,$2721,$2625,€€$2423,$0,$132B_^1TP_#NUM $0200,$0003,$0303,$0000,$0201,$0101,$0101,$012B_^1TQ_#NUM $1300,$0003,$0303,$0303,$0303,$2127,$0,$1314_^1TR_#NUM $0200,$0003,$0303,$0000,$022D,$2918,$1715,$032B_^1TS_#NUM $1300,$0003,$0101,$0200,$0E14,$1403,$0,$132B_^1TT_#NUM $0,0004,$0404,$0404,$0404,$0404,$0404,$042B_^1TU_#NUM $0303,$0303,$0303,$0303,$0303,$0303,$0,$132B_^1TV_#NUM $0303,$0303,$0303€€,$0303,$0303,$1C28,$192C,$042B_^1TW_#NUM $0303,$0303,$0303,$0303,$2221,$201F,$1E1D,$032B_^1TX_#NUM $0303,$031C,$2819,$2C04,$2C19,$281C,$0303,$032B_^1TY_#NUM $0303,$031C,$2819,$2C04,$0404,$0404,$0404,$042B_^1TZ_#NUM $0,$0006,$0708,$0904,$0A0B,$0C0D,$0,$002B_^1SP_#NUM $2B2B,$2B2B,$2B2B,$2B2B,$2B2B,$2B2B,$2B2B,$2B2B_^1CODEL NUM $FFF8_($00_^1_%NUM $E000_($01_^1_%NUM $FFF0_($02€€_^1_%NUM $E038_($03_^1_%NUM $0700_($04_^1_%NUM $7F00_($05_^1_%NUM $0070_($06_^1_%NUM $00E0_($07_^1_%NUM $01C0_($08_^1_%NUM $0380_($09_^1_%NUM $0E00_($0A_^1_%NUM $1C00_($0B_^1_%NUM $3800_($0C_^1_%NUM $7000_($0D_^1_%NUM $7FF8_($0E_^1_%NUM $0F00_($0F_^1_%NUM $1F00_($10_^1_%NUM $3F00_($11_^1_%NUM $E0F8_($12_^1_%NUM $7FF0_($13_^1_%NUM $0038_($14_^1_%NUM $E070_($15_^1_€€%NUM $E1F8_($16_^1_%NUM $E0E0_($17_^1_%NUM $E1C0_($18_^1_%NUM $1DC0_($19_^1_%NUM $FE00_($1A_^1_%NUM $FF00_($1B_^1_%NUM $7070_($1C_^1_%NUM $F078_($1D_^1_%NUM $F8F8_($1E_^1_%NUM $FDF8_($1F_^1_%NUM $EFB8_($20_^1_%NUM $E738_($21_^1_%NUM $E238_($22_^1_%NUM $F038_($23_^1_%NUM $F838_($24_^1_%NUM $FC38_($25_^1_%NUM $EE38_($26_^1_%NUM $E3B8_($27_^1_%NUM $38E0_($28_^1_%NUM€j $E380_($29_^1_%NUM $E078_($2A_^1_%NUM $0000_($2B_^1_%NUM $0F80_($2C_^1_%NUM $E700_($2D_^1_%END_]_^__jPRESTOR CSY/ D53 P€1_%NAM RESTOR_'DECK-ID D53 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$RESTORE A LOGICAL UNIT THAT WAS PREVIOUSLY DOWNED_$**MSOS 4.0_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, L€€A JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1* THIS ROUTINE INFORMS THE 1700 OPERATING SYSTEM THAT_^1* ACTION HAS BEEN TAKEN TO RESTORE THE DEVICE TO AN_^1* OPERABLE STATE AND IT IS NOW READY FOR I/O._^1_%SPC_!1_^1_%ENT_!RSTR_^1_%EXT MIB,MIBX_^1_%EXT LOG1_^1_%EXT JBPROE_^1_%EXT MIBUF_^1_%EXT FILE2_^1_%EXT LOG1A_^1_%EQU PRLVL($EF)_^1_%EQU RPC€€P($20)_^1_%EQU LPMSK($2),ONEBIT($23),ZROBIT($33)_^1RSTR_!NUM_!$C8FE_$ENTRY POINT_^1_%STQ* SAVEPT_'SAVE Q_^1_%LDQ- PRLVL_(CHECK PRIORITY LEVEL_^1_%SQN GOGO_)NOT ZERO - BEING RUN AS A STAND ALONE PROG_^1_%STQ MIB_*CLEAR MIB FLAG_^1_%STA* (F2)_^1_%LDQ MIBUF_(PICK UP JOBENT MIPBUF ADDRESS_^1_%JMP* GOGO1_(MAKE Q POINT TO STATEMENT BUFFER_^1GOGO_!LDQ* SAVEPT_^1GOGO1 TRQ A_,Q POINTS€€ TO INPUT BUFFER_^1_%STQ* SAVEPT_'SAVE POINTER_^1_%INA_!1_)LOC OF BUFFER_^1_%ALS_!1_^1_%STA- I_^1_%RTJ ASCHEX_'GET THE LU NO_^1_%SQP_!RSTR1-*-1_^1_%JMP* ERJ04_(PRINT J04 ILLEGAL CHARACTER_^1_%SPC_!1_^1RSTR1 LDQ* (L1)_^1_%SAZ ERR_^1_%TCQ_!Q_^1_%AAQ_!Q_^1_%INQ_!-1_^1_%SQM_!1_^1ERR_"JMP* ERJ04_^1_%TRA_!Q_^1_%STQ- I_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%JMP* X1_+GO TO X1_9**MSOS 4.1€€**_^1_%SPC 2_^1*_$THIS SECTION OUTPUT LU NO RESTORED, CLEAR MIBX, RELEASE CORE_^1_%SPC 2_^1SAVEPT ADC 0_^1RSTR2 LDQ* SAVEPT_'RESTORE POINTER TO INPUT BUFFER_^1_%LDA- 1,Q_^1_%AND- LPMSK+7_%PICK OFF FIRST CHARACTER_^1_%EOR =X$2000_%ADD SPACE CHARACTER TO LSB_^1_%LDQ- 2,Q_^1_%SQM STORE_(IF SECOND CHAR, CHECK FOR FF_^1_%LLS 8_^1STORE STA* LUBUF_^1WRITE RTJ- ($F4)_^1PARM_!ADC €€$D00+RPCP_#FORMAT WRITE - LU XX RESTORED_^1_%ADC 0_^1_%ADC 0_^1_%ADC $18FC_^1QUANT ADC NUM_^1_%ADC BUF-PARM_^1LOP2_!LDA* PARM+2_^1_%SAZ 1_,WAIT ON THREAD_^1_%JMP* LOP2_^1_%LDA* PARM+3_'CHECK FOR ERROR_^1_%SAP 1_^1_%JMP* WRITE_^1**************************EXIT SECTION*********************_^1_%LDA- PRLVL_(CHECK LEVEL_^1_%SAZ RF3A_)NOT ZER, DO RELEASE CORE_^1_%CLR A_^1_%STA M€€IBX_)CLEAR MIBX FLAG_^1_%RELEAS (RSTR-*+1),1,1_^1_%SPC 2_^1RF3A_!ENQ 14_+INDEX TO RF3 ROUTINE IN JOBPRO_^1_%LDA JBPROE_'SET UP INDIR ADDRESS_/**MSOS 4.0_^1_%STA- I_,FOR RETURN_9**MSOS 4.0_^1_%ENA 1_,INDEX TO SCHEDULE JOBPRO_+**MSOS 4.0_^1_%JMP- (I)_*RETURN TO JOBENT_3**MSOS 4.0_^1_%EJT_]_^1BUF_"ALF 2, LU_^1LUBUF ALF 5,_!RESTORED_^1_%NUM $440D_(CR_^1_%EQU NUM(*-BUF)_^1ERJ04 €€ LDA =AJP_M**MSOS 4.0_^1_%STA* BUF_*STORE J04 MESSAGE IN BUFFER_^1_%LDA =A04_M**MSOS 4.0_^1_%STA BUF+1_^1_%ENA 2_,MODIFY LENGTH IN PARAMETER LIST_^1_%STA* QUANT_^1_%JMP* WRITE_^1L1_#ADC LOG1_^1L1A_"ADC LOG1A_^1F2_#ADC FILE2_^1PDTI_!NUM 0_^1_%SPC 2_^1X1_#LDA* (L1),I_'RESET LU DOWN BIT_^1_%AND- ZROBIT+13_^1_%STA* (L1),I_^1_%SPC 2_^1*_8UPDATE ALL TYPE 1 BITS_^1_%SPC 1_^1*_1€€I =_!INDEX FOR LU NO BEING CHECKED_^1*_1J =_!COUNT OF NO OF PDTS THAT ARE SHARE BY LU I_^1*_1Q =_!INDEX FOR SEARCH OF LOG1A TABLE_^1_%SPC 1_^1_%LDA* (L1)_^1T8_#STA- I_^1_%LDA* (L1),I_^1_%ALS 2_^1_%SAP T0-*-1_'IF LU IS DOWN_^1_%JMP* T9_+GO TO T9_^1T0_#ENA 0_^1_%STA* J_,RESET P.D.T COUNT_^1_%LDA* (L1A),I_^1*_]_^1*_]_^1_%EQU ZERO($22)_^1_%EQU HFEFF($3B)_^1*_]_^1_%LDQ* (L1A),€€I_)ADR OF PDT_^1_%LDA- (ZERO),Q_(FIRST WORD OF PDT_^1_%AND- HFEFF_+CLEAR MESSAGE FLAG BIT_^1_%STA- (ZERO),Q_^1_%TRQ A_^1_%LDQ* (L1)_^1*_]_^1_%STA* PDTI_)P.D.T. ADR OF LU I_^1T6_#STQ* QSAV_^1T2_#LDA* (L1)_)INITIALIZE LUCNT TO MAX LU_^1_%STA* LUCNT_^1_%LDA* (L1),Q_^1_%ALS 2_^1_%SAP T1-*-1_^1_%ARS 2_^1_%AND- LPMSK+10_^1_%SAZ T4-*-1_'LU Q IS DOWN AND HAS NO ALT_^1_%TRA Q_^1_%LDA*€€ LUCNT_^1_%INA -1_^1_%STA* LUCNT_^1_%SAM 1_^1_%JMP* T2_^1_%JMP* T4_^1LUCNT NUM 0_^1T1_#LDA* (L1A),Q_%PDT OF LU Q OR ITS ALT LU_^1_%SUB* PDTI_)PDT OF LU I_^1_%SAN T4-*-1_^1_%RAO* J_,ADD ONE TO J IF PDTS MATCH_^1T4_#LDQ* QSAV_^1_%INQ -1_^1_%SQZ T5-*-1_'END OF SEARCH FOR LU I_^1_%JMP* T6_^1T5_#LDQ* J_^1_%INQ -2_^1_%IIN 0_^1_%LDA* (L1),I_^1_%AND- ZROBIT+14_#CLEAR BIT 14 OF LOG€€1 FOR LU I_^1_%SQM T7-*-1_^1_%EOR- ONEBIT+14_#SET BIT 14, LU I IS TYPE 1_^1T7_#STA* (L1),I_^1_%EIN 0_^1T9_#LDA- I_^1_%INA -1_^1_%SAZ T10_*END OF SUBPROGRAM_^1_%JMP* T8_^1T10_"JMP* RSTR2_^1QSAV_!NUM 0_^1J_$NUM 0_^1_%SPC 2_^1_%SPC 2_^1_%SPC 2_^1* THIS IS A DECIMAL ASCII TO HEX ONVERSION ROUTINE_^1_%SPC_!1_^1ASCHEX NOP_!0_^1_%ENA_!0_^1_%STA* TEMP1_$SET TEMP LOC. TO ZERO_^1N€€EXT_!LDQ- I_^1_%LRS_!1_)LEFT OR WRITE CHAR. COUNT_^1_%SQP 2_P**MSOS 4.0_^1_%ADQ- $32_*ADJUST TO A_8**MSOS 4.0_^1_%INQ -1_+15 BIT ADDRESS_5**MSOS 4.0_^1_%LDQ- ($22),Q_^1_%SAP_!2_^1_%QRS_!8_)LEFT CHARACTER_^1_%JMP* *+3_^1_%RAO- I_)RIGHT CHAR. INCREASE WORD_^1_%RAO- I_+COUNT_^1_%CLR_!A_^1_%LRS_!8_^1_%ALS_!8_^1_%TRA_!Q_)A AND Q CONTAINS CHARACTER_^1_%LDA- I_^1_%EOR- $3_^1_%STA€€- I_^1_%TRQ_!A_^1_%EOR- $A_(CHECK FOR $FF_^1_%SAN_!CHECK-*-1_^1OVER_!ENA_!0_^1_%LDQ* TEMP1_$DECIMAL HEX HUMBER_^1_%LLS_!8_^1_%SAZ_!OK-*-1_#CHECK FOR OVER TWO CHARACTERS._^1_%JMP* ERR1_^1OK_#LLS_!4_)COMPUTE HEX NUMBER_^1_%QLS_!4_^1_%STQ* TEMP1_^1_%SAZ_!2_^1_%MUI_!=N$A_^1_%ADD* TEMP1_$A CONTAINS HEX NUMBER_^1_%ENQ_!0_)Q - NO ERROR._^1_%JMP* (ASCHEX)_!RETURN_^1_%SPC_!1_^1CHECK €, INQ_!-$30_%CHECK IF BETWEEN $30 AND $39_^1_%TRQ_!A_^1_%SQM_!ERR1-*-1_^1_%INQ_!-10_^1_%SQM_!CK1-*-1_^1ERR1_!ENQ -0_+ERROR CONDITION_^1_%JMP* (ASCHEX)_^1CK1_"LDQ* TEMP1_$STORE HEX. DIGIT_^1_%QLS_!4_^1_%AAQ_!A_^1_%STA* TEMP1_^1_%JMP* NEXT_%GET NEXT CHARACTER._^1TEMP1 NUM_!$0000_^1_%END RSTR_^__,PRCOVER CSY/ H09 P€1_%NAM RCOVER_'DECK-ID H09 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*****************************************************_^1_%SPC_!1_^1* THIS IS THE RECOVERY ROUTINE._^1* ITS PURPOSE IS TO GIVE A PROGRAMER THE ABILITY_^1* TO DUM€€P CORE AND MASS STORAGE AT THE END OF_^1* EXECUTING.A JOB._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!RECOVR_^1_%ENT_!IBUF,REC,ERR_^1_%ENT_!ABIBUF,BUF,BIASCI_^1_%ENT_!TERMIN_^1_%ENT_!GET,SIFT_^1_%ENT_!SP_^1_%ENT_!LUNO_^1_%SPC_!1_^1_%EXT* DMPCOR,MASDMP_^1_%EXT* OUTSEL_^1_%EXT JKIN_^1_%EXT FILE3_^1_%EXT_!SWTCH_^1_%SPC_!2_^1RECOVR ENQ_!-€€1_(ENTRY POINT_^1_%LDA* RECOVR,Q_!FIND ABS. LOC. OF RECOVR_^1_%STA* (F3)_^1_%INA_!IBUF-RECOVR_!STORE ABS. LOC. OF INPUT_^1_%STA* ABIBUF_(AND OUTPUT BUFFER._^1_%LDA- $FB_'SET UP STANDARD OUTPUT_^1_%STA* LUNO_'COMMENT MEDIUM._^1_%SPC_!1_^1REC_"ENQ_!3_)WRITE RE_^1_%LDA_!SWTCH_$IF SWTCH POSITIVE TERMINATE_^1_%SAM_!1_^1_%JMP* TERMIN_^1_%RTJ* WR_^1_%NUM_!$0D52_%RECOVERY READY_^1_%€€NUM_!$4520_^1_%NUM_!$200D_^1_%SPC_!1_^1_%ENA -0_)INPUT RECOVERY STATEMENT._^1_%ENQ_!39_^1REC1_!STA* IBUF,Q_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* REC1_^1_%RTJ- ($F4)_^1_%NUM_!$0900,$0000_^1REC2_!NUM_!$0000_^1_%NUM_!$18FD_$COMMENTS IN DEVICE_^1_%NUM_!39_(NUMBER OF WORDS_^1_%ADC_!IBUF-*+5_^1_%LDA* REC2_%CHECK FOR COMPLETION_^1_%SAZ_!1_*OF REQUEST._^1_%JMP* *-2_^1*_]_^1* TEST FIRST WOR€€D IN BUFFER FOR CORRECT INPUT_^1* INFORMATION AND JUMP TO APPROPIATE ROUTINE TO_^1* PROCESS STATEMENT._^1REC3_!LDA* IBUF_^1_%SUB_!=N$2A44_^1_%SAN_!REC4-*-1_^1_%JMP_!DMPCOR_#CORE DUMP_^1REC4_!LDA* IBUF_%1ST WORD OF STATEMENT IN BUFFER._^1_%SUB_!=N$2A4D_"1ST WORD SHOULD LOOK LIKE._^1_%SAN_!REC5-*-1_^1_%JMP_!MASDMP_#COMPARES - MASS STORAGE DUMP._^1******_!NOTICE_^1*_]_^1* A USER M€€AY INSERT CODING HERE TO TEST FOR USER_^1* INSERTED PROGRAMS._^1* 1. LDA* IBUF_"1ST WORD OF INPUTED STATEMENT_^1* 2. SUB_!=N$---- THE ALPHNUMERIC CHARACTERS WHICH_^1*_2DEFINE THE USERS INSERTED PROGRAM._^1* 3. TEST FOR ZERO_^1* 4. IF ZERO JUMP TO USERS PROGRAM._^1****** THIS PROGRAM MUST BE DEFINED AS AN EXTERNAL._^1*_]_^1*_]_^1REC5_!LDQ* IBUF_^1_%LDA* IBUF+1_^1_%LLS_!8_^1_€€%AND- $A_^1_%INA_!-$2A_^1_%SAZ_!REC6-*-1_^1ERR_"ENQ_!2_(WRITE ERROR MESSAGE_^1_%RTJ* WR_^1_%ALF_!2,ERR_^1_%LDA* WR1_^1_%SAZ_!1_^1_%JMP* *-2_^1_%ENA 0_^1_%STA HEXN_^1_%JMP* REC_^1REC6_!TRQ_!A_^1_%SUB_!=N$54FF_^1_%SAN REC7_^1_%JMP* TERMIN_^1REC7_!JMP_!OUTSEL_^1_%SPC_!2_^1TERMIN LDA- $EE_'SCHDLE RETURN LOCATION_^1_%STA* TERM_^1_%RTJ- ($F4)_^1_%NUM_!$1200_^1TERM_!NUM_!$7FFF€€_^1_%LDA* (F3)_^1_%ENQ_!0_^1_%STQ* (F3)_^1_%STQ JKIN_*CLEAR PROTEC FLAG IN TRVEC_^1_%STA* TERM1_^1_%RTJ- ($F4)_^1_%NUM_!$1801_^1TERM1 NUM_!$0000_^1_%SPC_!2_^1F3_#ADC FILE3_(ABS. LOC. OF RECOVER_^1ABIBUF NUM_!$7FFF_$ABS. LOC. OF IBUF_^1LUNO_!NUM_!$0000_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* WRITE ROUTINE_^1WR_#NOP_!0_^1_%LDA* WR_^1_%S€€TA* WR2+1_^1_%AAQ_!A_^1_%STA* WR_^1_%STQ* WR2_^1_%RTJ- ($F4)_^1_%NUM_!$0C00,$0000_^1WR1_"NUM_!$0000_^1_%NUM_!$18FC_$COMMENTS OUT_^1WR2_"NUM_!$0000_$NO. OF WORDS_^1_%NUM_!$0000_$STARTING ADDRESS_^1_%JMP* (WR)_^1_%SPC_!1_^1IBUF_!BSS_!IBUF(96)_!INPUT AND OUTPUT BUFFER_^1_%SPC_!1_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1GET_"NOP_!0_^1_%LDQ- €€I_^1_%LRS_!1_)LEFT OR WRITE CHAR. COUNT._^1_%LDQ* IBUF,Q_#GET BUFFER WORD._^1_%SAM_!1_^1_%QRS_!8_)LEFT CHARACTER_^1_%CLR_!A_^1_%LRS_!8_^1_%ALS_!8_^1_%TRA_!Q_)A AND Q CONTAINS CHARACTER_^1_%RAO- I_)INCREASE I CHARACTER COUNTER_^1_%JMP* (GET)_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1SIFT_!NOP_!0_)ENTRY_^1_%ENA_!0_^1_%ENQ_!4_^1SFT_"STA* BUF,Q€€_$ZERO OUT 5 WORD BUFFER_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* SFT_^1_%STA* COUNT_$ZERO OUT WORD CHAR. COUNTER_^1_%STA* WCOUNT_#ZERO OUT WORD COUNT._^1_%ENA_!2_)SET CHARACTER COUNTER_^1_%STA- I_+TO TWO._^1_%SPC_!1_^1GO_#RTJ* GET_^1_%EOR- $A_(CHECK FOR $FF_^1_%SAZ_!OVER-*-1_^1_%SUB_!=N$D3_$CHECK FOR COMMA_^1_%SAZ_!COMMA-*-1_^1_%RTJ* CHECK_^1_%RTJ* STORE_^1_%JMP* GO_(GET NEXT CHAR€€ACTER._^1_%SPC_!1_^1OVER_!LDA* COUNT_^1_%INA_!-5_^1_%SAM_!1_^1_%JMP* ERR1_^1_%JMP* (SIFT)_#ALL INPUT STORED IN BUF_^1_%SPC_!1_^1COMMA RAO* WCOUNT_#INCREASE WORD COUNT_^1_%LDA* WCOUNT_^1_%INA_!-6_(CHECK FOR MORE THAN 5 WORDS_^1_%SAM_!1_^1_%JMP* ERR1_^1_%LDA* COUNT_$CHECK FOR MORE THAN 4 CHAR._^1_%INA_!-5_^1_%SAM_!1_^1_%JMP* ERR1_^1_%ENA_!0_^1_%STA* COUNT_^1_%JMP* GO_(READ €€NEXT CHARACTER_^1_%SPC_!1_^1CHECK NOP_!0_^1_%INQ_!-$30_^1_%TRQ_!A_)CHECK FOR UNDER $30_^1_%SQP_!1_^1_%JMP* ERR1_^1_%INQ_!-10_'CHECK OVER $39_^1_%SQM_!CK1-*-1_^1_%INA_!-7_^1_%INQ_!-7_(CHECK OVER $40_^1_%SQP_!1_^1_%JMP* ERR1_^1_%INQ_!-6_(CHECK UNDER 47_^1_%SQM C11A_^1ERR1_!JMP_!ERR_^1C11A_!RAO* HEXN_^1CK1_"STA* TEMP_%STORE HEX DIGIT IN TEMP_^1_%JMP* (CHECK)_^1_%SPC_!1_^1STORE €€ NOP_!0_^1_%LDQ* WCOUNT_#GET WORD COUNT_^1_%INQ -4_^1_%SQN STR1_^1_%LDA* HEXN_^1_%SAZ 1_^1_%JMP* ERR1_)HEX LU NUMBER_^1STR1_!INQ 4_^1_%LDA* BUF,Q_'GET WORD BUFFER_4**MSOS 4.0_^1_%ALS_!4_)SHIFT OVER 4_^1_%AND- $16_^1_%EOR* TEMP_%ADD HEX DIGIT_^1_%STA* BUF,Q_^1_%RAO* COUNT_$INCREASE WORD COUNT_^1_%ENA 0_^1_%STA* HEXN_^1_%JMP* (STORE)_"RETURN_^1_%SPC_!1_^1COUNT NUM_!$0000€€_$CHAR. COUNT_^1WCOUNT NUM_!$0000_$WORD COUNT_^1BUF_"BZS_!BUF(5)_#5 WORD HEX BUFFER OF INPUT DATA._^1TEMP_!NUM_!$0000_$TEMP. STORAGE OF HEX NUMBER._^1HEXN_!NUM 0_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1*_]_^1* ENTER WITH BINARY NUMBER IN A_^1* EXIT WITH ASCII CODE IN A AND Q_^1*_]_^1BIASCI_!NOP_%0_^1_(STA*_$WRD_^1_(ENQ_%3_I**MSOS 4.0_^1RPT_€€$AND-_$6_(CONVERT LOWER 4 BITS TO ASCII_$MSOS 4.0_^1_(INA_%-$A_G**MSOS 4.0_^1_(SAM_%LT10_$CHARACTER OR NUMBER_/MSOS 4.0_^1_(INA_%7_KMSOS 4.0_^1LT10_#INA_%$3A_%IS A NUMBER_7MSOS 4.0_^1_(STA*_$W4,Q_$STORE CONVERTED WORD_.MSOS 4.0_^1_(SQZ_%DONE_HMSOS 4.0_^1_(INQ_%-1_JMSOS 4.0_^1_(LDA*_$WRD_IMSOS 4.0_^1_(ARS_%4_KMSOS 4.0_^1_(STA*_$WRD_IMSOS 4.0_^1_(JMP*_$RPT_IMSOS 4.0_^1DONE_#ALS_%8_KM€€SOS 4.0_^1_(ADD*_$W3_JMSOS 4.0_^1_(LDQ*_$W2_JMSOS 4.0_^1_(QLS_%8_KMSOS 4.0_^1_(ADQ*_$W1_JMSOS 4.0_^1_(JMP*_$(BIASCI)_DMSOS 4.0_^1W4_%NUM_%0_KMSOS 4.0_^1W3_%NUM_%0_KMSOS 4.0_^1W2_%NUM_%0_KMSOS 4.0_^1W1_%NUM_%0_KMSOS 4.0_^1WRD_$NUM_%0_I**MSOS 4.0_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* STORE SPACES IN IBUF_^1_%SPC_!1_^1***********************€¦******************************_^1_%SPC_!1_^1SP_#NOP_!0_^1_%LDA_!=N$2020_^1_%ENQ_!57_^1SP1_"STA_!IBUF,Q_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* SP1_^1_%JMP* (SP)_^1_(END_^__¦POUTSEL CSY/ H10 P€1_%NAM OUTSEL_'DECK-ID H10 MSOS 4.1_-SUMMARY-079_^1_%SPC 2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$CHANGE DUMPING UNIT_^1 SPC 1_]_^1*****************************************************_^1_%SPC_!1_^1* A RECOVERY FUNCTION MODULE - *UNIT NUMBER_^€€1* THIS STATEMENT ALLOWS THE OPERATOR THE OPTION_^1* OF SELECTING ANY DEVICE TO BE USED AS THE OUTPUT_^1* MEDIUM._]_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!OUTSEL_^1_%EXT* GET,ERR,REC,LUNO_^1_%EXT_!LOG1A_^1_%SPC_!1_^1OUTSEL ENA_!0_^1_%STA* HOLD_^1_%ENQ_!1_^1_%STQ- I_^1OUT_"RTJ_!GET_^1_%EOR- $A_^1_%SAZ_!OVER-*-1_^1_%RTJ* SAVE_^1_%J€€MP* OUT_^1OVER_!LDA- I_)CHECK IF ONLY FOUR CHARACTERS_^1_%INA_!-6_)INPUTED._^1_%SAM_!OK-*-1_^1_%JMP* ER_^1OK_#ENA_!0_^1_%STA* NUMB_^1_%ENA_!-3_^1_%STA- I_^1OUT1_!LDA* HOLD_%CONVERSION WORD - SHIFT 4_^1_%ALS_!4_^1_%STA* HOLD_^1_%AND- $6_^1_%LDQ- I_)CHECK IF LAST WORD_^1_%SQZ_!OUT3-*-1_^1_%SAZ_!OUT2-*-1_!IF NO. ZERO_^1_%MUI* LOC+1,Q_^1_%ADD* NUMB_^1_%STA* NUMB_^1OUT2_!RAO-€€ I_)INCREASE WORD COUNT_^1_%JMP* OUT1_^1OUT3_!ADD* NUMB_^1_%STA* LU_(A CONTAINS LOGICAL UNIT NO._^1_%TRA_!Q_^1_%SAN_!1_^1_%JMP* ER_^1_%LDA_!LOG1A_^1_%SUB* LU_^1_%SAZ_!OUT4-*-1_^1_%SAP_!OUT4-*-1_^1ER_#JMP_!ERR_'NO SUCH DEVICE_^1OUT4_!LDQ_!LOG1A,Q_^1_%LDA- 8,Q_^1_%ALS_!13_^1_%SAM_!1_^1_%JMP* ER_(DEVICE CAN NOT BE WRITTEN ON_^1_%LDA* LU_^1_%STA_!LUNO_^1_%JMP_!REC_^1_%SPC_!1_^1€€HOLD_!NUM_!$0000_^1NUMB_!NUM_!$0000_^1_%NUM_!$3EB,$64_^1LOC_"NUM_!$A_^1LU_#NUM_!$0000_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1SAVE_!NOP_!0_)DECIMAL DIGIT SAVER._^1_%LDA* HOLD_%CHARACTER DIGIT IN Q_^1_%ALS_!4_+REGISTER_^1_%AND- $16_'HOLD CONTAINS ANY PREVIOUS_^1_%LLS_!16_)DIGITS._^1_%INA_!-$30_^1_%AND- $6_^1_%EAQ_!A_^1_%STA* HOLD_^1_%JMP* € (SAVE)_^1_%END_]_^__PRDMPV4 CSY/ H11 P€1_%NAM RDMPV4_'DECK-ID H11 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS *D STATEMENTS FOR RECOVERY PROGRAM_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* *DHHHH,HHHH_^1* AT HEXADECIMAL A€€DDRESS HHHH AND TERMINATING AT_^1* HEXADECIMAL ADDRESS HHHH._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!DMPCOR_^1_%ENT_!DUMPC_^1_%ENT_!COREL,WLOC,STOP_^1_%ENT_!COMPE,ASKWR,B_^1_%SPC_!1_^1_%EXT_!SWTCH_^1_%EXT* REC,BUF,SP,LUNO_^1_%EXT* SIFT,ABIBUF_^1_%EXT* BIASCI_^1_%EXT* ERR_^1_%EXT* TERMIN_^1_%EXT_!LOG1A_^1_%SPC_!1_^1DMPCOR RTJ_!SIFT€€_^1_%LDA_!BUF_'FIND START AND STOP LOCATION._^1_%STA* START_^1_%STA* WLOC_^1_%STA* COREL_^1_%ENQ_!1_^1_%LDA_!BUF,Q_^1_%STA* STOP_^1_%SAN_!2_^1_%LDA* START_^1_%STA* STOP_^1_%ENQ_!2_^1_%LDA_!BUF,Q_^1_%SAZ_!2_^1_%JMP_!ERR_^1_%SPC_!1_^1_%LDA_!ABIBUF_#ABS. LOC. OF IBUF_^1_%STA B_P**MSOS 4.0_^1_%SPC_!1_^1_%STA* COMPE_^1_%ENA_!0_^1_%STA* ASKWR_^1_%SPC_!1_^1_%LDA* STOP_%CHECK IF €€START LOCATION_^1_%LDQ* WLOC_M**MSOS 4.0_^1_%SAM BNK1_M**MSOS 4.0_^1_%SQM RETURN_K**MSOS 4.0_^1BNK1_!SQP NOERR_L**MSOS 4.0_^1_%SUB* WLOC_'GREATER THAN STOP LOCATION._^1_%SAP_!2_^1RETURN JMP_!REC_'RETURN TO PROGRAM_^1NOERR RTJ* DUMPC_L**MSOS 4.0_^1_%JMP* RETURN_^1_%SPC_!1_^1START NUM_!$7FFF_$FIRST LOC. TO DUMP_^1STOP_!NUM_!$7FFF_$LAST LOC. TO DUMP_^1WLOC_!NUM_!$7FFF_$CURRENT €€WORD DUMPING._^1COMPE NUM_!$7FFF_$WORD COMPARE CHECK FLAG_^1ASKWR NUM_!$0000_$LINE COMPARE CHECK FLAG._^1WORDC NUM_!$0000_$WORD COUNT_^1LWORD NUM_!$0000_$LAST WORD_^1SAVE_!NUM_!$0000_^1COREL NUM_!$7FFF_$LOC. OF CURRENT WORD DUMPING._^1_%SPC_!1_^1DUMPC NOP_!0_)STORE SPACES IN BUFFER_^1DUMP_!RTJ_!SP_(STORE SPACES IN BUFFER._^1_%SPC_!1_^1_%RTJ* SETC_M**MSOS 4.0_^1_%STA* B-1_^1_€€%ENA_!1_^1_%STA- I_^1_%LDA* WLOC_%SET WORD LOCATION IN BUFFER._^1_%RTJ_!BIASCI_^1_%STA* (B),I_^1_%RAO- I_^1_%STQ* (B),I_^1_%ENA_!6_^1_%STA- I_)SET UP NEW BUFFER COUNT_^1_%SPC_!1_^1_%LDA* DNL_N**MSOS 4.0_^1_%STA* WORDC_^1_%SPC_!1_^1DUMP1 LDA* (COREL)_"GET WORD TO DUMP_^1_%STA* SAVE_^1_%RTJ_!BIASCI_^1_%STA* (B),I_^1_%RAO- I_^1_%STQ* (B),I_^1_%RAO- I_^1_%RAO- I_^1_%LDA*€€ COMPE_$IS COMPE SET_^1_%SAM_!DUMP3-*-1_^1_%SAN_!DUMP3-*-1_^1_%LDA* LWORD_$CHECK LAST WORD OF PREVIOUS_^1_%EOR* (COREL)_#BUFFER)_B*****_^1_%SAZ_!DUMP3-*-1_^1_%SET_!A_^1_%STA* COMPE_$NOT EQUAL_^1_%SPC_!1_^1DUMP3 LDA* WLOC_M**MSOS 4.0_^1_%SAZ INCRE_L**MSOS 4.0_^1_%RTJ* FFFECH_'CHECK FOR FFFE_5**MSOS 4.0_^1_%RTJ* PRINT_K**MSOS 4.0_^1_%JMP* (DUMPC)_$TERMINATE ON FFFE_2**MSOS 4.€€0_^1INCRE RAO* WLOC_M**MSOS 4.0_^1_%RAO* COREL_L**MSOS 4.0_^1INCRC RAO* WORDC_L**MSOS 4.0_^1CHBUFF LDA* STOP_)HAVE ALL WORDS BEEN SET IN BUFFERS **MSOS 4.0_^1_%SAP DUMP3A_K**MSOS 4.0_^1_%LDQ* WLOC_M**MSOS 4.0_^1_%SQP DUMP3B_K**MSOS 4.0_^1DUMP3A SUB* WLOC_L**MSOS 4.0_^1_%SAP_!1_^1_%JMP* DUMP7_^1DUMP3B LDA* WORDC_(CHECK IF 10 WORDS IN BUFFER_(**MSOS 4.0_^1_%SAP_!DUMP4-*-1_^1_%€€JMP* DUMP1_^1_%SPC_!1_^1DUMP4 LDA* COMPE_^1_%SAZ_!DUMP5-*-1_^1_%RTJ* PRINT_^1_%LDA* SAVE_^1_%STA* LWORD_^1_%ENA_!0_^1_%STA* ASKWR_^1_%STA* COMPE_^1_%JMP* DUMP_%GET NEXT LINE_^1DUMP5 LDA* ASKWR_^1_%SAP_!DUMP6-*-1_^1_%JMP* DUMP_%GET NEXT LINE_^1DUMP6 RTJ_!SP_^1_%LDA_!=N$2A2A_^1_%ENQ_!1_^1_%STA* (B),Q_^1_%ENA_!2_^1_%STA* B-1_^1_%RTJ* PRINT_$STORE DUP. LINE *_^1_%SET_!A€€_^1_%STA* ASKWR_$SET DUP. LINE SWITCH._^1_%JMP* DUMP_^1_%SPC_!1_^1DUMP7 LDA* COMPE_^1_%SAZ_!DUMP8-*-1_^1_%LDA- I_^1_%STA* B-1_^1_%RTJ* PRINT_^1_%JMP* (DUMPC)_^1DUMP8 LDA* ASKWR_^1_%SAM_!DUMP9-*-1_^1_%RTJ_!SP_^1_%LDA_!=N$2A2A_#STORE DUP. LINE *_^1_%ENQ_!1_^1_%STA* (B),Q_^1_%ENA_!2_^1_%STA* B-1_^1_%RTJ* PRINT_$PRINT BUF_^1DUMP9 JMP* (DUMPC)_#RETURN TO PROGRAM_^1_%SPC_!€€2_^1PRINT NOP_!0_^1_%LDA_!LUNO_%SET UP LOGICAL UNIT_^1_%ADD- $2F_^1_%STA* TH+1_^1_%RTJ- ($F4)_$WRITE BUFFER_^1_%NUM_!$0C00,$0000_^1TH_#NUM_!$0000,$0000_^1_%NUM_!36_^1B_$NUM_!$7FFF_$ABSOLUTE LOC. OF IBUF_^1_%LDA* TH_(CHECK THREAD FOR COMPLETION_^1_%SAZ_!1_^1_%JMP* *-2_^1_%LDA_!SWTCH_$IF SWTCH POSITIVE TERMINATE_^1_%SAM_!2_^1_%JMP_!TERMIN_^1_%JMP* (PRINT)_^1SETC_!NOP_!0_^1_%LD€€Q_!LUNO_^1_%LDQ_!LOG1A,Q_^1_%LDA-_!8,Q_^1_%ARS_!11_^1_%AND-_!$6_^1_%INA_!-1_$MT_^1_%SAZ_!PR-*-1_^1_%INA_!-4_#PR_^1_%SAZ_!PR-*-1_^1_%ENA_!36_^1_%ENQ_!-10_^1_%JMP* PRA_^1PR_#ENA_!54_^1_%ENQ_!-16_^1PRA_"STA* DNW_^1_%STQ* DNL_^1_%JMP* (SETC)_^1DNW_"NUM_!0_^1DNL_"NUM_!0_^1*_$SUBROUTINE TO CHECK FOR FFFE_:**MSOS 4.0_^1FFFECH NOP 0_P**MSOS 4.0_^1_%SUB =N$FFFE_%CHECK FOR FFFE_5**MSOS€Ξ 4.0_^1_%SAN LESTHN_K**MSOS 4.0_^1_%JMP* (FFFECH)_$EXIT_?**MSOS 4.0_^1LESTHN RAO* FFFECH_'INCREMENT RETURN ADDRESS_+**MSOS 4.0_^1_%RAO* FFFECH_J**MSOS 4.0_^1_%JMP* (FFFECH)_$EXIT_?**MSOS 4.0_^1_%END_]_^__ΞPMASDMP CSY/ H12 P€1_%NAM MASDMP_'DECK-ID H12 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$DUMP MASS STORAGE FOR RECOVERY PROGRAM_^1_%SPC 1_^1* THIS ROUTINE DUMPS MASS STORAGE._^1_%SPC_!1_^1_%ENT_!MASDMP_^1_%SPC_!1_^1_%EXT* SIFT,REC,ERR_C**MSOS 4.€€1**_^1_%EXT* BIASCI,BUF,LUNO_^1_%EXT* DUMPC,B,ASKWR,COMPE,COREL_^1_%EXT* WLOC,STOP,ABIBUF_^1_%EXT_!LOG1A_^1_%SPC_!1_^1MASDMP RTJ_!SIFT_%ENTRY_^1_%ENQ_!4_)STORE INPUTED PARAMETERS_^1MD_#LDA_!BUF,Q_^1_%STA S1,Q_^1_%INQ_!-1_^1_%SQM_!MD1-*-1_^1_%JMP* MD_^1_%SPC_!1_^1MD1_"LDA N_^1_%TRA Q_^1_%INA -16_^1_%SAM MD11_^1_%INA -16_^1_%SAM MD111_^1_%INA -16_^1_%SAM MD1111_^1_%INQ €€-6_^1MD1111 INQ -6_^1MD111 INQ -6_^1MD11_!STQ* N_^1_%LDA ABIBUF_'ABS LOC OF IBBUF_^1_%STA_!B_^1_%SPC_!1_^1_%LDA- $C2_'CHECK IF PARAMETER N IS A MASS_^1_%LDQ* N_*STORAGE DEVICE._^1_%SQN_!MD2-*-1_^1_%SPC_!1_^1_%STA* N_)NO N GIVER USE STANDARD LIB. UNIT_^1_%JMP* MD4_^1MD2_"EAQ_!A_^1_%SAN_!MD3-*-1_^1_%JMP* MD4_'N EQUALS STANDARD LIB. UNIT_^1MD3_"LDA* (LOG)_^1_%SUB* N_^1_%SAM_€€!ERR1-*-1_!NO_^1_%LDQ* (LOG),Q_^1_%LDA- 8,Q_'STORAGE DEVICE._^1_%ALS 5_-CHECK GROUP CLASS CODE FOR MASS_^1_%AND- 5_^1_%INA -2_,MASS CLASS CODE = 2_^1_%SAZ MD4_+IF MASK - OK, NOT - GO TO ERROR_^1ERR1_!JMP_!ERR_^1_%SPC_!1_^1MD4_"LDA* S1_S*_^1_%LDQ* S2_S*_^1_%SQN_!1_T*_^1_%STA* S2_(S2=0,SET S2=S1_<*_^1_%LDA* W1_S*_^1_%SAN_!1_T*_^1_%RAO* W1_(W1=0, SET W1=1_<*_^1_%LDQ* W2_S*_^€€1_%SQN_!2_T*_^1_%ENQ_!96_(SET W2=96 ID ZERO_9*_^1_%STQ* W2_S*_^1_%LDA* S1_S*_^1_%SUB* S2_S*_^1_%SAM_!MD6-*-1_N*****_^1_%SAN_!ERCD-*-1_"ERROR--S1 GTR S2_9*****_^1_%LDA* W2_S*_^1_%SUB* W1_(S1=S2, SO_A*_^1_%SAP_!MD6-*-1_"CHECK W1 AND W2_;*_^1ERCD_!JMP* ERR1_%ERROR W1 GTR W2_;*_^1MD6_"ENA_!1_^1_%STA_!COMPE_$SET SO FIRST LINE IS PRINTED._^1_%ENA_!0_^1_%STA_!ASKWR_^1MSD_"LDA* S2_(€€CHECK IF LAST SECTOR_^1_%SUB* S1_^1_%SAN_!MSD1-*-1_^1_%LDA* W2_(LAST SECTOR_^1_%STA_!STOP_^1_%JMP* MSD3_^1MSD1_!SAP_!MSD2-*-1_!CHECK IF COMPLETED._^1_%JMP* OVER_^1MSD2_!ENA_!96_(NO. OF LAST WORD TO PRINT OF SECTOR._^1_%STA_!STOP_^1MSD3_!LDA* W1_(FIRST WORD TO PRINT OF SECTOR_^1_%STA_!WLOC_^1_%RTJ* *+1_^1_%NOP_!0_^1_%LDQ* *-1_'FIND ABS. LOC. OF MBUF_^1_%INQ_!MBUF-*+2_^1_%INA_€€!-1_^1_%AAQ_!A_^1_%STA_!COREL_$STORE ABS. LOC. OF BUFFER_^1_%RTJ* SECNO_$WRITE SECTOR NO._^1_%RTJ* GETFIL_#GET SECTOR._^1_%RTJ_!DUMPC_^1_%ENA_!1_^1_%STA* W1_(SET 1ST WORD_^1_%RAO* S1_^1_%JMP* MSD_^1_%SPC_!1_^1OVER_!JMP_!REC_'OPERATION COMPLETED._^1_%SPC_!2_^1SECNO NOP_!0_)SEQUENCE NO. PRINT OUT_^1_%LDA* S1_^1_%RTJ_!BIASCI_^1_%STA* SNO1_^1_%STQ* SNO2_^1_%LDA_!LUNO_%SET UP L€€U NO._^1_%ADD- $2F_^1_%STA* LU1_^1_%RTJ- ($F4)_^1_%NUM_!$0D00,$0_^1TH_#NUM_!$0_^1LU1_"NUM_!$0000_^1_%NUM_!$B_^1_%ADC_!SNO-*+5_^1_%LDA* TH_,WAIT FOR I/O COMPLETION_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* (SECNO)_^1SNO_"ALF_!9,_!SECTOR NUMBER_^1SNO1_!NUM_!$2020_^1SNO2_!NUM_!$2020_^1_%SPC_!1_^1S1_#NUM_!$0000_$STARTING SECTOR_^1W1_#NUM_!$0000_$FIRST WORD OF STARTING SECTOR._^1S2_#NUM_!$00€€00_$LAST SECTOR_^1W2_#NUM_!$0000_$LAST WORD OF LAST SECTOR._^1N_$NUM_!$0000_$LOGICAL UNIT NO._^1LOG_"ADC_!LOG1A_^1_%SPC_!1_^1GETFIL NOP_!0_)GET MASS STORAGE SECTOR TO BE_^1_%LDA* S1_)OUTPUTED._^1_%STA* SN2_^1_%LDA* N_^1_%STA* LU_^1_%RTJ- ($F4)_^1_%NUM_!$0900,$0_^1_%NUM_!$0_^1LU_#NUM_!$0000_^1_%NUM_!96_^1_%ADC_!MBUF-*+5_^1SN1_"NUM_!$0000_^1SN2_"NUM_!$0000_^1_%LDA* LU-1_^1_%SAZ€²_!1_^1_%JMP* *-2_^1_%LDA* LU_^1_%SAM_!1_^1_%JMP* (GETFIL)_^1_%JMP_!REC_)OPERATION COMPLETED WITH ERROR_$**MSOS 4.0_^1*_8TYPE RE_^1_%SPC_!1_^1MBUF_!BSS_!MBUF(96)_^1_%END_]_^__²PBRKPTD CSY/ H13 P€1_%NAM BRKPTD_'DECK-ID H13 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$CONTROL FOR BREAKPOINT_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!2_^1* BREAKPOINT DEBUG CONTROL MODULE_^1_%SPC_€€!1_^1* PROGRAM ENTRY_^1* POINT NAMES_#EXTERNAL NAMES_^1_%SPC_!1_^1*_"READY_!***_#BRKP01_^1*_"REG_#***_#BRKP02_^1*_"BUF_#***_#BRKP03_^1*_"B01_#***_#BRKP04_^1*_"SIFT_"***_#BRKP05_^1*_"BUF1_"***_#BRKP06_^1*_"BIASCI ***_#BRKP07_^1*_"SP_$***_#BRKP08_^1*_"PROTEC ***_#BRKP09_^1*_"BPL_#***_#BRKP10_^1*_"INST_"***_#BRKP11_^1*_"BPCONT ***_#BRKP12_^1*_"DUMPC_!***_#BRKP20_^1*_"COREL_!***_#€€BRKP21_^1*_"WLOC_"***_#BRKP22_^1*_"STOP_"***_#BRKP23_^1*_"COMPE_!***_#BRKP24_^1*_"ASKWR_!***_#BRKP25_^1*_"B_%***_#BRKP26_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%ENT_!BRKPTD_^1_%ENT_!BRKP01,BRKP02,BRKP03,BRKP04_^1_%SPC_!1_^1_%EXT* BRKP07,BRKP05_^1_%EXT* BRKP10,BRKP11,BRKP12_^1_%EXT* ENTERA_^1_%EXT* RESUME_^1_%EXT* DMPCOR,ENTCOR,ENTERI,J€€UMPTO,MASDMP_^1_%EXT* PRTREG,ENTERQ,RETJMP,SETBRP,TERMIN_^1_%SPC_!2_^1BRKPTD RTJ* *+1_'FIRST ENTRANCE TO BREAKPOINT_^1_%NOP_!0_)ABSOLUTE LOC. OF BRKPTD+1_^1_%STQ* USERP_$SAVE Q - ENTRY POINT TO USERS_^1_%LDA* BRKPTD+1_"PROGRAM_^1_%INA_!BRKP-BRKPTD-1_^1_%STA- $F3_'SET UP ABS. LOC. OF ENTRY TO_^1*_7BREADPOINT FROM USERS ROUTINE._^1_%JMP* READY_^1_%SPC_!1_^1BRKP_!NOP_!0_)ENTRY -€€ FROM USERS PROGRAM._^1_%STA* REG_'SAVE REGISTERS A,Q, AND I_^1_%STQ* REG+1_^1_%LDA- $FF_^1_%STA* REG+2_^1_%TRM_!A_^1_%STA* REG+3_^1_%LDA* BRKP_%GET PROGRAM ADDRESS WHERE_^1_%INA_!-1_(BREAKPOINT OCCURED._^1_%STA* REG+4_%SAVE P LOCATION_;****_^1_%STA* LOC_^1_%RTJ_!BRKP07_^1_%STA* BRKP1+2_^1_%STQ* BRKP1+3_^1_%LDA* BRKPTD+1_H**MSOS 4.0_^1_%INA_!BRKP1-BRKPTD-1 GET BUFFER ADD€€RESS_.**MSOS 4.0_^1_%STA* ADDRES_J**MSOS 4.0_^1_%RTJ- ($F4)_$WRITE BP,HHHH_^1_%NUM_!$4C00,0_I**MSOS 4.0_^1_%NUM_!$0,$18FC_^1_%NUM_!$5_^1ADDRES NUM_!0_O**MSOS 4.0_^1_%LDQ_!BRKP12_#FIND LOC. AND INSTRUCTION_^1_%INQ_!-1_(BREAKPOINTED._^1BRKP2 LDA_!BRKP10,Q_!TABLE OF BREAK POINT LOCATIONS._^1_%SUB* LOC_^1_%SAZ_!BRKP4-*-1_^1_%INQ_!-1_^1_%SQM_!BRKP3-*-1_^1_%JMP* BRKP2_^1BRKP3 LDA_!€€=N$B00_#CAN NOT FIND INSTRUCTION_^1_%JMP* BRKP5_$SET INSTRUCTION AS NOP_^1BRKP4 LDA_!BRKP11,Q_^1_%ENQ_!-1_^1BRKP5 STA_!BRKP11,Q_!INSTRUCTION_^1_%LDA* LOC_^1_%STA_!BRKP10,Q_!LOCATION_^1_%JMP* READ1_^1_%SPC_!1_^1BRKP1 ALF_!2,BP,_^1_%NUM_!$2020,$2020,$0D0D_^1REG_"BSS REG(5)_P****_^1USERP NUM_!$7FFF_$ADDRESS OF USERS ENTRY_^1LOC_!NUM_!$0000_^1BP_#NUM_!$0D42,$500D_^1_%SPC_!1_^1R€€EADY LDA* BRKPTD+1_H**MSOS 4.0_^1_%INA_!BP-BRKPTD-1_E**MSOS 4.0_^1_%STA* ADDRSS_%ABSOLUTE ADDRESS OF BUFFER_)**MSOS 4.0_^1_%RTJ- ($F4)_'WRITE BP_;**MSOS 4.0_^1_%NUM_!$4C00,0_I**MSOS 4.0_^1_%NUM_!$0,$18FC_^1_%NUM_!2_^1ADDRSS NUM_!0_O**MSOS 4.0_^1_%SPC_!1_^1READ1 ENQ_!39_^1_%SET_!A_^1READY1 STA* BUF,Q_$SET BUFFER AREA_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* READY1_^1_%SPC_!1_^1READ_!L€€DA* BRKPTD+1_H**MSOS 4.0_^1_%INA_!BUF-BRKPTD-1_D**MSOS 4.0_^1_%STA* ADR1_(ADDRESS OF BUFFER_2**MSOS 4.0_^1_%RTJ- ($F4)_'READY_>**MSOS 4.0_^1_%NUM_!$4800,0_I**MSOS 4.0_^1THREAD NUM_!$0_N**MSOS 4.0_^1_%NUM_!$18FD,40_^1ADR1_!NUM_!0_O**MSOS 4.0_^1_%SPC_!1_^1STAT_!LDA* THREAD_%CHECK TO SEE IF DONE_/**MSOS 4.0_^1_%SAZ CONT-*-1_"YES_G****_^1_%JMP* STAT_'LOOP TIL DONE_=****_^1CONT_!LD€€A* READ+4_^1_%SAP_!1_^1_%JMP* READY_^1_%JMP* DEFINE_^1_%SPC_!1_^1ERRMSG ALF_!2,B01,_^1BUF_"BSS_!BUF(40)_^1_%SPC_!2_^1*****************************************************_^1_%SPC_!1_^1BPTAB ALF_!1,*A_%PROGRAM - ENTERA_^1_%ALF_!1,*C_%PROGRAM - RESUME_^1_%ALF_!1,*D_%PROGRAM - DMPCOR_^1_%ALF_!1,*E_%PROGRAM - ENTCOR_^1_%ALF_!1,*I_%PROGRAM - ENTERI_^1_%ALF_!1,*J_%PROGRAM - JUMPTO_^1€€_%ALF_!1,*M_%PROGRAM - MASDMP_^1_%ALF_!1,*P_%PROGRAM - PRTREG_^1_%ALF_!1,*Q_%PROGRAM - ENTERQ_^1_%ALF_!1,*R_%PROGRAM - REJMP_^1_%ALF_!1,*S_%PROGRAM - SETBRP_^1_%ALF_!1,*T_%PROGRAM - TERMIN_^1*_]_^1* OTHER BREAKPOINT FUNCTION MAY BE INSERTED HERE._^1*_]_^1LASTAB BSS_!LASTAB(0)_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1BPREL ADC_!ENTERA_^1_%ADC_€€!RESUME_^1_%ADC_!DMPCOR_^1_%ADC_!ENTCOR_^1_%ADC_!ENTERI_^1_%ADC_!JUMPTO_^1_%ADC_!MASDMP_^1_%ADC_!PRTREG_^1_%ADC_!ENTERQ_^1_%ADC_!RETJMP_^1_%ADC_!SETBRP_^1_%ADC_!TERMIN_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!3_^1DEFINE ENQ_!LASTAB-BPTAB-1_^1_%LDA* BPTAB,Q_"SEARCH BPTAB FOR FIRST WORD_^1_%SUB* BUF_(OF BREAKPOINT INPUT._^1_%SAZ_!DEF2-*-1_^1_%INQ_€€!-1_^1_%SQM_!DEF1-*-1_^1_%JMP* DEFINE+1_^1DEF1_!JMP* B01_^1DEF2_!LDA* BPREL,Q_"CHECK IF BP ROUTINE PRESENT._^1_%EOR- $11_^1_%SAN_!1_^1_%JMP* B01_'NO - ERROR B01_^1_%LDA* BPREL,Q_"YES - FIND RELATIVE LOC. OF_^1_%AAQ_!A_+BP ROUTINE._^1_%INA_!BPREL-JUMP-1_^1_%STA* JUMP+1_^1_%RTJ_!BRKP05_#PLACE INPUT IN BUF1 ARRAY_^1*_7A REG. CONTAINS NO. OF WORDS IN_^1*_8BUF1. Q ABS LOC. OF BU€€F1_^1JUMP_!JMP* *_^1_%NUM_!$0000_^1_%SPC_!2_^1*****************************************************_^1_%SPC_!2_^1B01_"ENQ_!0_)ERROR MESSAGE B01,STATEMENT_^1_%LDA* BUF,Q_$FIND LAST WORD OF BUFFER._^1_%EOR- $12_^1_%SAZ_!B01A-*-1_^1_%INQ_!1_^1_%JMP* B01+1_^1B01A_!INQ_!2_^1_%STQ* B01B+1_^1_%LDA_!BRKPTD+1_H**MSOS 4.8_^1_%INA_!ERRMSG-BRKPTD-1_A**MSOS 4.0_^1_%STA* ADR3_L**MSOS 4.0_^€B1_%RTJ- ($F4)_$WRITE ERROR MESSAGE PLUS_^1_%NUM_!$4C00,0,0_G**MSOS 4.0_^1B01B_!NUM_!$18FC,$0_^1ADR3_!NUM_!0_O**MSOS 4.0_^1STAT1 LDA* B01B-1_P****_^1_%SAZ CONT1-*-1_!DONE YET_B****_^1_%JMP* STAT1_Q****_^1CONT1 JMP_!READY_^1_%SPC_!1_^1_%EQU_!BRKP04(B01)_^1_%EQU_!BRKP01(READY),BRKP02(REG),BRKP03(BUF)_^1_%END_!BRKPTD_^__BPSIFT CSY/ H14 P€1_%NAM SIFT_)DECK-ID H14 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT_!BRKP05,BRKP06_^1_%SPC_!1_^1_%EXT* BRKP03,BRKP04_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1SIFT_!NOP_!0_)ENTRY_^1_%EN€€A_!0_^1_%ENQ_!31_^1SFT_"STA* BUF1,Q_#ZERO OUT 32 WORD BUFFER._^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* SFT_^1_%STA* COUNT_$ZERO OUT WORD CHAR. COUNTER_^1_%STA* WCOUNT_#ZERO OUT WORD COUNT._^1_%ENA_!2_)SET CHARACTER COUNTER_^1_%STA- I_+TO TWO._^1_%SPC_!1_^1GO_#RTJ* GET_^1_%EOR- $A_(CHECK FOR $FF_^1_%SAZ_!OVER-*-1_^1_%SUB_!=N$D3_$CHECK FOR COMMA_^1_%SAN_!1_^1_%JMP* COMMA_^1_%RTJ* CHE€€CK_^1_%RTJ* STORE_^1_%JMP* GO_(GET NEXT CHARACTER._^1_%SPC_!1_^1OVER_!LDA* COUNT_^1_%SAN_!OVER0-*_^1_%LDQ* WCOUNT_^1_%SET_!A_^1_%STA* BUF1+16,Q_^1OVER0 LDA* COUNT_^1_%INA_!-5_^1_%SAM_!1_^1_%JMP* ERR1_^1_%LDA* WCOUNT_^1_%LDQ* COUNT_^1_%SQN_!OVER1-*-1_^1_%SAN_!OVER1-*-1_^1_%LDQ* BUF1_^1_%SQZ_!OVER1-*_^1OVER1 INA_!1_-A CONTAINS NO. OF WORDS IN_^1_%RTJ* *+1_*INPUT BUFFER_^€€1_%NUM_!$0000_^1_%LDQ* *-1_^1_%INQ_!BUF1-*+2_^1*_:Q CONTAINS ABS. LOC. OF ARRAY._^1_%JMP* (SIFT)_(RETURN_^1_%SPC_!1_^1COMMA RAO* WCOUNT_#INCREASE WORD COUNT_^1_%LDA* WCOUNT_^1_%INA_!-17_'CHECK FOR MORE THAN 16 WORDS._^1_%SAM_!1_^1_%JMP* ERR1_^1_%LDA* COUNT_$CHECK FOR MORE THAN 4 CHAR._^1_%SAN_!COMMA1-*-1_^1_%LDQ* WCOUNT_#NO CHAR. TRANSFERED._^1_%SET_!A_)SET FLAG_^1_%STA* B€€UF1+15,Q_^1_%JMP* COMMA2_^1COMMA1 INA_!-5_^1_%SAM_!1_^1_%JMP* ERR1_^1COMMA2 ENA_!0_^1_%STA* COUNT_^1_%JMP* GO_(READ NEXT WORD_^1_%SPC_!1_^1CHECK NOP_!0_^1_%INQ_!-$30_^1_%TRQ_!A_)CHECK FOR UNDER $30_^1_%SQP_!1_^1_%JMP* ERR1_^1_%INQ_!-10_'CHECK OVER $39_^1_%SQM_!CK1-*-1_^1_%INA_!-7_^1_%INQ_!-7_(CHECK OVER $40_^1_%SQP_!1_^1_%JMP* ERR1_^1_%INQ_!-6_(CHECK UNDER 47_^1_%SQM_!CK1-*€€-1_^1ERR1_!JMP_!BRKP04_^1CK1_"STA* TEMP_%STORE HEX DIGIT IN TEMP_^1_%JMP* (CHECK)_^1_%SPC_!1_^1STORE NOP_!0_^1_%LDQ* WCOUNT_#GET WORD COUNT_^1_%LDA* BUF1,Q_#GET WORD BUFFER_^1_%ALS_!4_)SHIFT OVER 4_^1_%AND- $16_^1_%EOR* TEMP_%ADD HEX DIGIT_^1_%STA* BUF1,Q_^1_%RAO* COUNT_$INCREASE WORD COUNT_^1_%JMP* (STORE)_"RETURN_^1_%SPC_!1_^1COUNT NUM_!$0000_$CHAR. COUNT_^1WCOUNT NUM_€€!$0000_$WORD COUNT_^1TEMP_!NUM_!$0000_$TEMP. STORAGE OF HEX NUMBER._^1BUF1_!BZS_!BUF1(40)_!40 WORD HEX BUFFER OF INPUT DATA._^1*_7ALSO USED AS OUTPUT BUFFER._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1GET_"NOP_!0_^1_%LDQ- I_^1_%LRS_!1_)LEFT OR WRITE CHAR. COUNT._^1_%LDQ_!BRKP03,Q_!GET BUFFER WORD._^1_%SAM_!1_^1_%QRS_!8_)LEFT CHARACTER_^1_%CLR_€ͺ!A_^1_%LRS_!8_^1_%ALS_!8_^1_%TRA_!Q_)A AND Q CONTAINS CHARACTER_^1_%RAO- I_)INCREASE I CHARACTER COUNTER_^1_%JMP* (GET)_^1_%EQU_!BRKP05(SIFT),BRKP06(BUF1)_^1_%END_]_^__ͺPBIASCI CSY/ H15 P€1_%NAM BIASCI_'DECK-ID H15 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT_!BRKP07,BRKP08,BRKP09_^1_%SPC_!1_^1_%EXT* BRKP06_^1_%SPC_!2_^1*****************************************************_^1_%SPC_!1_^1* ENTER WITH BINARY NUMB€€ER IN A_^1* EXIT WITH ASCII CODE IN A AND Q_^1*_]_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1BIASCI_!NOP_%0_^1_(STA*_$WRD_^1_(ENQ_%3_I**MSOS 4.0_^1RPT_$AND-_$6_(CONVERT LOWER 4 BITS TO ASCII_$MSOS 4.0_^1_(INA_%-$A_G**MSOS 4.0_^1_(SAM_%LT10_$CHARACTER OR NUMBER_/MSOS 4.0_^1_(INA_%7_KMSOS 4.0_^1LT10_#INA_%$3A_%IS A NUMBER_7MSOS 4.0_^1STORE_"STA*_$€€W4,Q_$STORE CONVERTED WORD_.MSOS 4.0_^1_(SQZ_%DONE_HMSOS 4.0_^1_(INQ_%-1_JMSOS 4.0_^1_(LDA*_$WRD_IMSOS 4.0_^1_(ARS_%4_KMSOS 4.0_^1_(STA*_$WRD_IMSOS 4.0_^1_(JMP*_$RPT_IMSOS 4.0_^1DONE_#ALS_%8_KMSOS 4.0_^1_(ADD*_$W3_JMSOS 4.0_^1_(LDQ*_$W2_JMSOS 4.0_^1_(QLS_%8_KMSOS 4.0_^1_(ADQ*_$W1_JMSOS 4.0_^1_(JMP*_$(BIASCI)_DMSOS 4.0_^1W4_%NUM_%0_KMSOS 4.0_^1W3_%NUM_%0_KMSOS 4.0_^1W2_%NUM_%0_KMSOS€€ 4.0_^1W1_%NUM_%0_KMSOS 4.0_^1WRD_$NUM_%0_I**MSOS 4.0_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* STORE SPACES IN IBUF_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1SP_#NOP_!0_^1_%LDA_!=N$2020_^1_%ENQ_!39_^1SP1_"STA_!BRKP06,Q_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* SP1_^1_%JMP* (SP)_^1_%SPC_!2_^1*********************€€********************************_^1_%SPC_!1_^1*_]_^1* IF LOC. IN A REGISTER PROTECTED, TYPE B02,HHHH AND_^1* RETURN WITH A REGISTER SET._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1PROTEC NOP_!0_)ENTRY_^1_%STQ* SAVQ_^1_%TRA_!Q_^1_%SUB- $F7_'CHECK LOWEST UNPROTECTED._^1_%INA_!-1_^1_%SAM_!P1-*-1_^1_%TRQ_!A_^1_%SUB- $F6_'CHECK HIGHEST UNPROTECTED€€._^1_%INA_!-1_N**MSOS 4.0_^1_%SAP_!P1-*-1_^1_%TRQ_!A_)UNPROTECTED LOCATION._^1PROT_!LDQ* SAVQ_^1_%JMP* (PROTEC)_^1_%SPC_!1_^1P1_#TRQ_!A_)PROTECT ERROR_^1_%RTJ* BIASCI_K**MSOS 4.0_^1_%STA* P4_^1_%STQ* P4+1_^1_%RTJ* *+1_M**MSOS 4.0_^1PICKUP NOP_!0_O**MSOS 4.0_^1_%LDA* PICKUP_%GET BUFFER ADDRESS_1**MSOS 4.0_^1_%INA_!16_N**MSOS 4.0_^1_%STA* ADDRES_J**MSOS 4.0_^1_%RTJ- ($F4)_$WR€hITE B02,HHHH_^1_%NUM_!$4C00,0_I**MSOS 4.0_^1P2_#NUM_!$0,$18FC_^1_%NUM_!$4_^1ADDRES NUM_!0_O**MSOS 4.0_^1STAT2 LDA* P2_T****_^1_%SAZ CONTU-*-1_M****_^1_%JMP* STAT2_Q****_^1CONTU SET_!A_)SET ERROR FLAG_^1_%JMP* PROT_^1P3_#ALF_!2,B02,_^1P4_#NUM_!$0,$0_$ERROR BUFFER_^1SAVQ_!NUM_!$0000_^1_%SPC_!1_^1_%EQU_!BRKP07(BIASCI),BRKP08(SP),BRKP09(PROTEC)_^1_%END_]_^__hPRETJMP CSY/ H16 P€1_%NAM RETJMP_'DECK-ID H16 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1** ** ** ** **_^1*_$PROCESSES *R STATEMENTS FOR BREAKPOINT PROGRAM_^1_%SPC_!1_^1*****************************************************_^1 SPC 1_]_^1 SPC 1_€€]_^1_%SPC_!1_^1* BREAK POINT DEBUG FUNCTION MODULE_^1_%SPC_!1_^1* *R,HHHH_]_^1* THIS STATEMENT CAUSES A RETURN JUMP TO LOCATION HHHH_^1* UPON ENTRANCE A CONTAINS NO. OF WORDS IN INPUT_^1* BUFFER ARRAY._^1* Q CONTAINS ABS. LOC. OF BUFFER ARRAY._^1* PROTEC RETURNS A MINUS IF A PROTECT VIOLATION_^1*_]_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%E€€NT_!RETJMP_^1_%SPC_!1_^1_%EXT* BRKP09,BRKP01,BRKP04_^1_%EXT* BRKP02_^1_%SPC_!1_^1RETJMP INA_!-1_)INPUTED._^1_%SAZ_!R1-*-1_^1_%JMP_!BRKP04_^1_%SPC_!1_^1R1_#LDA- ($22),Q_^1_%RTJ_!BRKP09_#CHECK IF LOC. PROTECTED._^1_%INA_!0_^1_%SAN_!2_^1OUT_"JMP_!BRKP01_^1_%STA* R2+1_^1_%ENQ 2_^1_%LDA BRKP02,Q_^1_%STA- I_^1_%ENQ 1_^1_%LDQ BRKP02,Q_^1_%LDA BRKP02_^1R2_#RTJ+ 0_^1_%JMP* OUT_'RET€&URN_^1_%END_]_^___!1_^1_%EXT* BRKP09&PJUMPTO CSY/ H17 P€1_%NAM JUMPTO_'DECK-ID H17 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1** ** ** ** **_^1*_$PROCESS *J STATEMENTS FOR BREAKPOINT PROGRAM_^1*_$PROGRAMMING SYSTEMS, A/D SYSTEMS DIVISION, CDC_^1_%SPC_!1_^1***************************€€**************************_^1 SPC 1_]_^1*_$PART NO._!E00610A0910S_^1_%SPC_!1_^1* BREAKPOINT DEBUG FUNCTION MODULE_^1* *JHHHH_]_^1* THIS CAUSES CONTROL TO JUMP TO LOCATION HHHH AND_^1* BEGIN EXECUTION._^1* UPON ENTRANCE A CONTAINS NO. OF WORDS IN INPUT_^1* BUFFER ARRAY._^1* Q CONTAINS ABS. LOC. OF BUFFER ARRAY._^1_%SPC_!1_^1*****************************************************_^1_€€%SPC_!1_^1_%ENT_!JUMPTO_^1_%SPC_!1_^1_%EXT* BRKP09,BRKP01,BRKP04_^1_%EXT* BRKP02_^1_%SPC_!1_^1JUMPTO INA_!-1_)INPUTED._^1_%SAZ_!JT-*-1_^1_%JMP_!BRKP04_#ERROR B01_^1JT_#LDA- ($22),Q_^1_%RTJ_!BRKP09_#CHECK LOC TO SEE IF PROTECTED_^1_%INA_!0_^1_%SAN_!2_^1OUT_"JMP_!BRKP01_#ERROR_^1_%STA* JT1+1_^1_%ENQ 2_^1_%LDA BRKP02,Q_^1_%STA- I_^1_%ENQ 1_^1_%LDQ BRKP02,Q_^1_%LDA BRKP02_^1JT1€_"JMP+ 0_^1_%END_]_^__PENTER CSY/ H18 P€1_%NAM ENTER_(DECK-ID H18 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS *A, *Q, *I STATEMENTS FOR BREAKPOINT_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1_%SPC_!1_^1* BREAKPOI€€NT DEBUG FUNCTION MODULE_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%ENT_!ENTERQ,ENTERA,ENTERI_^1_%SPC_!1_^1_%EXT* BRKP02,BRKP01,BRKP04_^1_%SPC_!2_^1ENTERQ INA_!-1_(ENTER IN Q ROUTINE._^1_%SAZ_!2_^1B2_#JMP_!BRKP04_^1_%LDA- ($22),Q_^1_%ENQ_!1_^1_%JMP* RETURN_^1_%SPC_!2_^1*****************************************************_^1_%SPC_!1_^1ENTER€BA INA_!-1_(ENTER IN A REGISTER_^1_%SAZ_!1_^1_%JMP* B2_^1_%LDA- ($22),Q_^1_%ENQ_!0_^1_%JMP* RETURN_^1_%SPC_!2_^1*****************************************************_^1_%SPC_!1_^1ENTERI INA_!-1_(ENTER IN I ROUTINE_^1_%SAZ_!1_^1_%JMP* B2_^1_%LDA- ($22),Q_^1_%ENQ_!2_^1RETURN STA_!BRKP02,Q_^1_%JMP_!BRKP01_^1_%END_]_^__BPENTCOR CSY/ H19 P€1_%NAM ENTCOR_'DECK-ID H19 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS *E STATEMENTS FOR BREAKPOINT PKG._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1_%SPC_!1_^1*_]_^1* *EHHHH€€,HHHH,HHHH,...._^1* THIS MODULE WILL ENTER CONSECUTIVE HEXADECIMAL_^1* CONSTANTS BEGINNING WITH HHHH INTO SEQUENTIAL MEMORY_^1* LOCATIONS OF UNPROTECTED CORE BEGINNING WITH_^1* HEXADECIMAL ADDRESS HHHH._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%ENT_!ENTCOR_^1_%SPC_!1_^1_%EXT* BRKP09,BRKP01,BRKP04_^1_%SPC_!1_^1ENTCOR INA_!-1_^1_%SAM_!ERR-*-1_€€^1_%SAN_!ENTC-*-1_^1ERR_"JMP_!BRKP04_#ZERO OR LESS - ERROR_^1ENTC_!STA- I_)NO. OF WORDS TO BE INTERED._^1_%SPC_!1_^1_%LDA- ($22),Q_"ADDRESS TO BE STORED INTO_^1_%RTJ_!BRKP09_#CHECK IF PROTECTED_^1_%INA_!0_^1_%SAN_!2_^1RETURN JMP_!BRKP01_#PROTECTED LOC._^1_%STA* ENTC2+1_^1_%INQ_!1_^1_%STQ* ENTC1+1_^1_%INQ_!16_^1_%STQ* ENTCA+1_^1_%SPC_!1_^1ENTC1 LDA+ 0_^1ENTCA LDQ+ 0_^1_%SQM€Μ_!ENTCB-*-1_^1ENTC2 STA+ 0_^1ENTCB LDA- I_^1_%INA_!-1_^1_%SAZ_!OVER-*-1_^1_%STA- I_^1_%RAO* ENTC1+1_^1_%RAO* ENTC2+1_^1_%RAO* ENTCA+1_^1_%JMP* ENTC1_^1_%SPC_!1_^1OVER_!JMP* RETURN_^1_%END_]_^__ΜPPRTREG CSY/ H20 P€1_%NAM PRTREG_'DECK-ID H20 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS *P STATEMENTS FOR BREAKPOINT_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1_%SPC_!1_^1*_]_^1* *P_]_^1* T€€HIS ROUTINE PRINTS THE CONTENTS OF A, Q, I_^1* AND MASK REGISTERS._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!PRTREG_^1_%SPC_!1_^1_%EXT* BRKP01,BRKP02,BRKP04,BRKP07,BRKP08_^1_%SPC_!1_^1PRTREG SAZ_!PRTR-*-1_!CHECK IF ANY CHAR.FOLLOWING._^1_%JMP_!BRKP04_#*P INPUT - ERROR._^1PRTR_!STQ- I_^1_%STQ* ADDR_^1_%RTJ_!BRKP08_^1_%LDA* ALPH_%SET U€€P FIRST TWO WORDS OF OUTPUT_^1_%STA- 1,I_(BUFFER._^1_%LDA* ALPH+1_^1_%STA- 2,I_^1_%SPC_!1_^1_%ENQ 0_U****_^1PRTR1 LDA* TAB,Q_%PICK UP ALPHA HEADER_6****_^1_%STA- 4,I_(PUT IN BUFFER_=****_^1_%LDA BRKP02,Q_"PICK UP REGISTER_:****_^1_%INQ 1_U****_^1_%STQ* SAVQ_R****_^1_%RTJ BRKP07_$CONVERT TO ASCII_:****_^1_%STA- 5,I_S****_^1_%STQ- 6,I_S****_^1_%LDA- I_U****_^1_%INA 4_U****_^€€1_%STA- I_U****_^1_%LDQ* SAVQ_R****_^1_%TRQ A_*DONE YET_B****_^1_%INA -5_T****_^1_%SAZ PRTR3-*-1_!YES_G****_^1_%JMP* PRTR1_%NO--GO AGAIN_>****_^1PRTR3 RTJ- ($F4)_%WRITE BUFFER_^1_%NUM_!$4C00,$0,$0,$18FB_?**MSOS 4.0_^1_%NUM 23_^1ADDR_!NUM_!$0000_^1STAT_!LDA* PRTR3+3_O****_^1_%SAZ CONT-*-1_N****_^1_%JMP* STAT_R****_^1CONT_!LDA* PRTR3+4_#CHECK IF ERROR_^1_%SAP_!1_^1_%JMP* PRT€R3_^1_%JMP_!BRKP01_^1ALPH_!ALF_!2,REG._^1SAVQ_!NUM_!$0000_^1TAB_"ALF 1,A=_R****_^1_%ALF 1,Q=_R****_^1_%ALF 1,I=_R****_^1_%ALF 1,M=_R****_^1_%ALF 1,P=_R****_^1_%END_]_^__PTERMIN CSY/ H21 P€1_%NAM TERMIN_'DECK-ID H21 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS *T STATEMENTS FOR BREAKPOINT_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1_%SPC_!1_^1* *T,HHHH,HHHH,...€€._^1* BREAK POINT DEBUG FUNCTION MODULE_^1* THIS ROUTINE REMOVES BREAKPOINTS FROM HEXADECIMAL_^1* ADDRESS HHHH._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1_%ENT_!TERMIN_^1_%EXT* BRKP01,BRKP10,BRKP11,BRKP12_^1_%SPC_!1_^1TERMIN SAN_!TERM-*-1_!ENTRY_^1_%JMP* CAB_^1TERM_!STA* NOPT_%REMOVE SPECIFIED BREAKPOINTS._^1_%STQ- I_^1_%ENA_!0_^€€1_%STA* NC_^1_%SPC_!1_^1TERM1 LDQ- ($22),I_"GET LOC. OF BP TO REMOVE_^1_%STQ* COMPAR_$SAVE LOC._^1_%LDQ_!BRKP12_#SEARCH TABLE OF BP LOCATIONS._^1_%INQ_!-1_^1TERM2 LDA_!BRKP10,Q_^1_%SUB* COMPAR_^1_%SAZ_!TERM3-*-1_^1_%INQ_!-1_(CHECK IF ALL LOC. CHECKED._^1_%SQM_!TERM4-*-1 NO LOC. FOUND IN TABLE_^1_%JMP* TERM2_^1TERM3 LDA_!BRKP11,Q_!LOCATION FOUND - RESTORE VALUE_^1_%STA* (C€€OMPAR)_^1_%ENA -0_^1_%STA_!BRKP10,Q_^1TERM4 RAO- I_^1_%RAO* NC_(INCR. WORD COUNT_^1_%LDA* NC_^1_%SUB* NOPT_%CHECK IF ALL INPUTED LOC. BP_^1_%SAZ_!OVER-*-1_#REMOVED._^1_%JMP* TERM1_^1_%SPC_!1_^1OVER_!STA- I_)COMPLETED._^1_%ENQ_!0_)PACK BPL AND INST TABLES_^1OVER1 LDA BRKP10,I_^1_%INA_!0_^1_%SAZ_!NEXT-*-1_^1_%STA BRKP10,Q_^1_%LDA BRKP11,I_^1_%STA BRKP11,Q_^1_%INQ 1_^1NE€€XT_!LDA- I_^1_%SUB BRKP12_^1_%INA 1_^1_%RAO- I_^1_%SAP NEXT1-*-1_^1_%JMP* OVER1_^1NEXT1 STQ BRKP12_^1RETURN JMP_!BRKP01_^1CAB_"LDQ BRKP12_'REMOVE ALL SET BREAKPOINTS_)**MSOS 4.0_^1_%SQN INCRSQ_'ANY BREAKPOINTS SET_0**MSOS 4.0_^1_%JMP* NOBPST_'NO_A**MSOS 4.0_^1INCRSQ INQ_!-1_*YES_@**MSOS 4.0_^1CAB1_!LDA_!BRKP10,Q_^1_%STA* TEMP_%STORE ADDRESS OF BREAKPOINT_^1_%LDA_!BRKP11,Q_!€€LOAD INSTRUCTION SAVED_^1_%STA* (TEMP)_#RESTORE INSTRUCTION_^1_%INQ_!-1_^1_%SQM_!1_)CHECK FOR ALL REMOVED._^1_%JMP* CAB1_^1NOBPST ENA 0_,YES-SET BREAKPOINT COUNTER_)**MSOS 4.0_^1_%STA_!BRKP12_%TO ZERO._^1_%JMP* RETURN_^1NOPT_!NUM_!$0000_$NUMBER OF LOC. TO REMOVE BP._^1NC_#NUM_!$0000_$COUNT NUMBER OF WORDS REMOVED_^1COMPAR NUM_!$0000_$LOC. OF WORD TO REMOVE_^1TEMP_!NUM_!$0000_^1€ _%END_]_^__TION SAVED_^1_%STA* PRESUME CSY/ H22 P€1_%NAM RESUME_'DECK-ID H22 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS *C STATEMENTS FOR BREAKPOINT_^1 SPC 1_]_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1 SPC 1_]_^1* *C_]_^1* THI€€S MODULE CAUSES BREAKPOINT TO EXIT AND RESUME_^1* EXECUTION OF THE JOB._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%ENT_!RESUME_^1_%EXT* BRKP02,BRKP04,BRKP11_;**MSOS 4.1**_^1_%SPC_!1_^1RESUME SAZ_!1_)IF A NOT ZERO - INPUT ERROR_^1_%JMP* ERR_^1_%ENQ_!5_^1_%LDA_!BRKP02,Q_!CHECK FLAG FOR FIRST TIME_^1_%SAZ_!RESME-*-1_^1_%STA* RET+1_$JUMP TO USE€€RS PROGRAM_^1_%ENA_!0_^1_%STA_!BRKP02,Q_!CLEAR FIRST PASS FLAG_^1RET_"JMP+ 0_^1_%SPC_!1_^1RESME LDA- ($F3)_$SEARCH TABLE FOR BP LOC. AND_^1_%STA* LOC1_(INSTRUCTION_^1_%INA_!-1_^1_%STA* LOC_^1_%INA_!2_^1_%STA* LOC2_^1_%SPC_!1_^1_%ENQ_!-1_^1_%LDA_!BRKP11,Q_^1_%STA* INSTR_^1_%SPC_!1_^1_%CLR_!Q_^1_%LLS_!4_^1_%STQ* INSTN_^1_%SQN_!RESME3-*-1_^1_%JMP* SRRI_'SKIP OR REGISTER REFER€€ENCE_^1*_8INSTRUCTION._^1_%SPC_!1_^1ERR_"JMP_!BRKP04_#ERROR BREAK POINT NOT SET HERE._^1_%SPC_!1_^1RESME3 ENQ_!0_)BREAK INSTRUCTION INTO MODE_^1_%LLS_!4_,AND DELT._^1_%STQ* MODE_^1_%ENQ_!0_^1_%LLS_!8_^1_%STQ* DELT_^1_%LDA* MODE_%CHECK MODE TYPE_^1_%INA_!-8_^1_%SAP_!1_^1_%JMP* RESMEA_^1_%INA_!-4_^1_%SAP_!RESME4-*-1_^1_%JMP* RESMED_^1RESME4 LDA* INSTR_$INDIRECT RELATIVE MODE_^1€€_%AND_!=N$F300_"MAKE TWO WORD RELATIVE ABS._^1_%ADD- $2D_^1_%STA- I_^1_%LDA* DELT_%CHECK IF ONE OR TWO WORD_^1_%SAN_!RESME5-*-1_^1_%LDQ* (LOC1)_#TWO WORDS_^1_%ADQ* LOC1_^1_%ADQ- $32_^1_%LDA* LOC2_^1_%JMP* RETURN_^1_%SPC_!1_^1RESME5 LDQ* DELT_%ONE WORD INDIRECT RELATIVE_^1_%QLS_!8_)MAKE TWO WORD ABS. COMMAND_^1_%QRS_!8_^1_%ADQ* LOC_^1_%ADQ- $32_^1_%LDA* LOC1_^1_%JMP* RE€€TURN_^1_%SPC_!1_^1RESMEA LDA* DELT_%ABSOLUTE AND INDIRECT ABSOLUTE_^1_%SAN_!RESMEB-*-1_^1_%LDA* INSTR_$TWO WORD COMMAND_^1_%STA- I_^1_%LDQ* (LOC1)_^1_%LDA* LOC2_%LOC. OF NEXT INSTRUCTION._^1_%JMP* RETURN_^1_%SPC_!1_^1RESMEB LDA* MODE_%ONE WORD COMMAND_^1_%INA_!-4_^1_%SAM_!RESMEC-*-1_^1_%LDQ* DELT_'ONE WORD INDIRECT ABSOLUTE._^1_%ADQ- $32_(SET SIGN_^1_%JMP* *+2_^1RESMEC LD€€Q* DELT_%ONE WORD ABSOLUTE_^1_%LDA* INSTR_(MAKE INTO TWO WORD INDIRECT ABS_#**MSOS 4.0_^1_%AND_!=N$F300_^1_%ADD- $2D_'SET INDIRECT BIT_^1_%STA- I_^1_%LDA_!LOC1_%LOC OF NEST INSTRUCTION_^1_%JMP* RETURN_^1_%SPC_!1_^1RESMED LDA* INSTR_$DIRECT RELATIVE_^1_%AND_!=N$F300_"MAKE TWO ABS COMMAND_^1_%ADD- $2D_^1_%STA- I_^1_%LDA* DELT_'CHECK IF ONE OR TWO WORDS_^1_%SAN_!RESMEE-*-1_^1_€€%LDQ* (LOC1)_$TWO WORDS_^1_%ADQ* LOC1_^1_%LDA* LOC2_^1_%JMP* RETURN_^1_%SPC_!1_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1* CONSTANTS_^1LOC_"NUM_!$0000_$LOCATION OF INSTRUCTION_^1LOC1_!NUM_!$0000_$1 WORD LOC. FOLLOWING INSTR._^1LOC2_!NUM_!$0000_$2 WORD LOC. FOLLOWING INSTR._^1INSTR NUM_!$0000_$INSTRUCTION AT LOC._^1INSTN NUM_!$0000_$FIRST €€FOUR BITS OF INSTRUCTION_^1MODE_!NUM_!$0000_$MODE OF OPERATION_^1DELT_!NUM_!$0000_$DELTA_^1NOP_"NUM_!$0B00_^1REGA_!NUM_!$0000_$A REGISTER SAVED._^1REGQ_!NUM_!$0000_$Q REGISTER SAVED._^1REGI_!NUM_!$0000_$I REGISTER SAVED._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1RESMEE LDQ* DELT_%ONE WORD DIRECT RELATIVE_^1_%QLS_!8_)MAKE TWO WORD AB€€S. COMMAND_^1_%QRS_!8_^1_%ADQ* LOC_^1_%LDA* LOC1_^1_%JMP* RETURN_^1_%SPC_!2_^1SRRI_!ENQ_!0_)SKIP OR REGISTER REFERENCE_^1_%LLS_!4_+INSTRUCTION_^1_%SQN_!SRRI1-*-1_^1SRRI0 LDA* NOP_%NOP INSTRUCTION_^1_%STA* INST1_^1_%LDA* INSTR_^1_%STA* INST2_^1_%LDA* LOC1_^1_%STA* RL_^1_%JMP* RETRN_^1_%SPC_!1_^1SRRI1 INQ_!-1_^1_%SQZ_!SRRI2-*-1_^1_%JMP* SRRI0_'NOT A SKIP INSTRUCTION_^1SR€€RI2 ENQ_!0_)SKIP INSTRUCTION_^1_%ALS_!4_^1_%LLS_!4_^1_%ADQ* LOC1_M**MSOS 4.0_^1_%STQ* RLSKP_^1_%LDA* NOP_^1_%STA* INST1_^1_%LDA* INSTR_^1_%AND- $16_^1_%INA_!2_^1_%STA* INST2_^1_%LDA* LOC1_^1_%STA* RL_^1_%JMP* RETRN_^1_%SPC_!1_^1RETURN STA* RL_(A CONTAINS RETURN LOCATION_^1_%STQ* INST2_$Q CONTAINS SECOND WORD OF INSTR._^1_%LDA- I_)I CONTAINS FIRST WORD OF INSTR_^1_%STA*€€ INST1_^1_%SPC_!1_^1RETRN ENQ_!2_)STORE SAVED REGISTERS IN_^1_%LDA_!BRKP02,Q_"PROGRAM_^1_%STA* REGA,Q_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* RETRN+1_^1_%SPC_!1_^1_%LDA* INSTN_^1_%INA_!-5_)CHECK IF RETURN JUMP_^1_%SAN_!RETRN1-*-1_#INSTRUCTION._^1_%JMP* RTJUMP_^1_%SPC_!1_^1RETRN1 LDA* REGI_%RETURN REGISTERS_^1_%STA- I_^1_%LDQ* REGQ_^1_%LDA* REGA_^1_%SPC_!1_^1INST1 NOP_!0_)FIRST W€€ORD OF INSTRUCTION_^1INST2 NOP_!0_)SECOND WORD OF INSTRUCTION_^1_%NUM_!$1400_'JUMP_^1RL_#NUM_!$0000_$NEXT LOC. FOLLOWING INSTRUCTION._^1_%NUM_!$1400_$JUMP_^1RLSKP NUM_!$0000_$SKIP LOCATION_^1_%SPC_!1_^1RTJUMP LDA* INST1_$RETURN JUMP INSTRUCTION_^1_%ARS_!8_^1_%AND- $6_^1_%LDQ- $E9_*CHECK MODE SWITCH_2**MSOS 4.0_^1_%LDQ- ($22),Q_J**MSOS 4.0_^1_%SQZ IS32K_L**MSOS 4.0_^1_%LDQ* INS€€T2_L**MSOS 4.0_^1_%JMP* CHECK4_K**MSOS 4.0_^1IS32K LDQ* INST2_(LOCATION_;**MSOS 4.0_^1_%SQP_!2_)CHECK IF INDIRECT_^1_%LDQ- ($22),Q_^1_%JMP* *-2_^1_%SPC_!1_^1CHECK4 INA -4_O**MSOS 4.0_^1_%SAP_!1_^1_%INA_!5_^1_%SAZ_!OVER-1-*_^1_%INA_!-1_^1_%SAZ_!X-*-1_^1_%INA_!-1_^1_%SAZ_!Q-*-1_^1QI_#ADQ* REGQ_%ADD Q REGISTER_^1X_$ADQ* REGI_%ADD I REGISTER_^1OVER_!STQ* RETJMP+1_^1_%JMP* NEXT_€Κ^1Q_$ADQ* REGQ_^1_%JMP* OVER_^1_%SPC_!1_^1NEXT_!LDA* RL_^1_%STA- ($22),Q_^1_%RAO* RETJMP+1_^1_%LDA* REGI_%RETURN REGISTERS_^1_%STA- I_^1_%LDA* REGA_^1_%LDQ* REGQ_^1RETJMP JMP+ 0_^1_%END_]_^__ΚPDPCORB CSY/ H23 P€1_%NAM DPCORB_'DECK-ID H23 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS *D STATEMENTS FOR RECOVERY PROGRAM_^1_%SPC_!1_^1_%SPC_!1_^1* *DHHHH,HHHH_^1* THIS ROUTINE DUMPS THE CONTENTS OF CORE BEGINING_^1* AT HEXADECIMAL ADDR€€ESS HHHH AND TERMINATING AT_^1* HEXADECIMAL ADDRESS HHHH._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1_%ENT_!DMPCOR_^1_%ENT_!BRKP20,BRKP21,BRKP22,BRKP23,BRKP24_^1_%ENT_!BRKP25,BRKP26_^1_%SPC_!1_^1_%EXT* BRKP01,BRKP04,BRKP07,BRKP08_^1_%SPC_!1_^1DMPCOR STQ* B_)ABS. LOC. OF OUTPUT BUFFER._^1_%INA_!-3_^1_%SAM_!2_^1_%JMP_!BRKP04_^1_%LDA- ($22),Q_"F€€IND START AND STOP LOCATION._^1_%STA* START_^1_%STA* WLOC_^1_%STA* COREL_^1_%LDA- 1,Q_^1_%STA* STOP_^1_%SAN_!2_^1_%LDA* START_^1_%STA* STOP_^1_%SPC_!1_^1_%STA* COMPE_^1_%ENA_!0_^1_%STA* ASKWR_^1_%SPC_!1_^1_%LDA* STOP_%CHECK IF START LOCATION_^1_%LDQ* WLOC_M**MSOS 4.0_^1_%SAM BNK1_M**MSOS 4.0_^1_%SQM RETURN_K**MSOS 4.0_^1BNK1_!SQP NOERR_L**MSOS 4.0_^1_%SUB* WLOC_'GREAT€€ER THAN STOP LOCATION._^1_%SAP_!2_^1RETURN JMP_!BRKP01_#RETURN TO PROGRAM_^1_%SPC_!1_^1NOERR RTJ* DUMPC_L**MSOS 4.0_^1_%JMP* RETURN_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1START NUM_!$7FFF_$FIRST LOC. TO DUMP_^1STOP_!NUM_!$7FFF_$LAST LOC. TO DUMP_^1WLOC_!NUM_!$7FFF_$CURRENT WORD DUMPING._^1COMPE NUM_!$7FFF_$WORD COMPARE CHECK FLAG_^1ASKWR€€ NUM_!$0000_$LINE COMPARE CHECK FLAG._^1WORDC NUM_!$0000_$WORD COUNT_^1LWORD NUM_!$0000_$LAST WORD_^1SAVE_!NUM_!$0000_^1COREL NUM_!$7FFF_$LOC. OF CURRENT WORD DUMPING._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!2_^1PRINT NOP_!0_^1_%RTJ- ($F4)_$WRITE BUFFER_^1_%NUM_!$4C00,$0_H**MSOS 4.0_^1TH_#NUM_!$0000,$18FB_^1_%NUM_!36_^1B_$NUM_!$7FFF_$ABSOLU€€TE LOC. OF IBUF_^1STAT_!LDA* TH_T****_^1_%SAZ CONT-*-1_N****_^1_%JMP* STAT_R****_^1CONT_!JMP* (PRINT)_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1DUMPC NOP_!0_)STORE SPACES IN BUFFER_^1DUMP_!RTJ_!BRKP08_#STORE SPACES IN BUFFER._^1_%SPC_!1_^1_%ENA_!36_^1_%STA* B-1_^1_%ENA_!1_^1_%STA- I_^1_%LDA* WLOC_%SET WORD LOCATION IN BUFFER._^€€1_%RTJ_!BRKP07_^1_%STA* (B),I_^1_%RAO- I_^1_%STQ* (B),I_^1_%ENA_!6_^1_%STA- I_)SET UP NEW BUFFER COUNT_^1_%SPC_!1_^1_%ENA_!-10_'SET UP WORD COUNT_^1_%STA* WORDC_^1_%SPC_!1_^1DUMP1 LDA* (COREL)_"GET WORD TO DUMP_^1_%STA* SAVE_^1_%RTJ_!BRKP07_^1_%STA* (B),I_^1_%RAO- I_^1_%STQ* (B),I_^1_%RAO- I_^1_%RAO- I_^1_%LDA* COMPE_$IS COMPE SET_^1_%SAM_!DUMP3-*-1_^1_%SAN_!DUMP3-*-1€€_^1_%LDA* LWORD_$CHECK LAST WORD OF PREVIOUS_^1_%EOR* (COREL)_#BUFFER._B*****_^1_%SAZ_!DUMP3-*-1_^1_%SET_!A_^1_%STA* COMPE_$NOT EQUAL_^1_%SPC_!1_^1DUMP3 LDA* WLOC_M**MSOS 4.0_^1_%SAZ_!INCRE_K**MSOS 4.0_^1_%RTJ* FFFECH_'CHECK FOR FFFE,_4**MSOS 4.0_^1_%RTJ* PRINT_K**MSOS 4.0_^1_%JMP* (DUMPC)_$TERMINATE ON FFFE_2**MSOS 4.0_^1INCRE RAO* WLOC_M**MSOS 4.0_^1_%RAO* COREL_L**MSOS 4.€€0_^1_%RAO* WORDC_L**MSOS 4.0_^1_%LDA* STOP_%HAVE ALL WORDS BEEN SET IN BUFFER._^1_%SAP DUMP3A_K**MSOS 4.0_^1_%LDQ* WLOC_M**MSOS 4.0_^1_%SQP DUMP3B_K**MSOS 4.0_^1DUMP3A SUB* WLOC_M**MSOS 4.0_^1_%SAP_!1_^1_%JMP* DUMP7_^1DUMP3B LDA* WORDC_L**MSOS 4.0_^1_%SAP_!DUMP4-*-1_^1_%JMP* DUMP1_^1_%SPC_!1_^1DUMP4 LDA* COMPE_^1_%SAZ_!DUMP5-*-1_^1_%RTJ* PRINT_^1_%LDA* SAVE_^1_%STA* LWORD€€_^1_%ENA_!0_^1_%STA* ASKWR_^1_%STA* COMPE_^1_%JMP* DUMP_%GET NEXT LINE_^1DUMP5 LDA* ASKWR_^1_%SAP_!DUMP6-*-1_^1_%JMP* DUMP_%GET NEXT LINE_^1DUMP6 RTJ_!BRKP08_^1_%LDA_!=N$2A2A_^1_%ENQ_!1_^1_%STA* (B),Q_^1_%ENA_!2_^1_%STA* B-1_^1_%RTJ* PRINT_$STORE DUP. LINE *_^1_%SET_!A_^1_%STA* ASKWR_$SET DUP. LINE SWITCH._^1_%JMP* DUMP_^1_%SPC_!1_^1DUMP7 LDA* COMPE_^1_%SAZ_!DUMP8-*-1€€_^1_%LDA- I_^1_%STA* B-1_^1_%RTJ* PRINT_^1_%JMP* (DUMPC)_^1DUMP8 LDA* ASKWR_^1_%SAM_!DUMP9-*-1_^1_%RTJ_!BRKP08_^1_%LDA_!=N$2A2A_#STORE DUP. LINE *_^1_%ENQ_!1_^1_%STA* (B),Q_^1_%ENA_!2_^1_%STA* B-1_^1_%RTJ* PRINT_$PRINT BUF_^1DUMP9 JMP* (DUMPC)_#RETURN TO PROGRAM_^1*_$SUBROUTINE TO CHECK FOR FFFE_:**MSOS 4.0_^1FFFECH NOP 0_P**MSOS 4.0_^1_%SUB =N$FFFE_%CHECK FOR FFFE_5**€`MSOS 4.0_^1_%SAN LESTHN_K**MSOS 4.0_^1_%JMP* (FFFECH)_$EXIT_?**MSOS 4.0_^1LESTHN RAO* FFFECH_'INCREMENT RETURN ADDRESS_+**MSOS 4.0_^1_%RAO* FFFECH_J**MSOS 4.0_^1_%JMP* (FFFECH)_$EXIT_?**MSOS 4.0_^1_%SPC_!1_^1_%SPC_!1_^1_%EQU_!BRKP26(B)_^1_%EQU_!BRKP20(DUMPC),BRKP21(COREL),BRKP22(WLOC)_^1_%EQU_!BRKP23(STOP),BRKP24(COMPE),BRKP25(ASKWR)_^1_%END_]_^__`PMSDMPB CSY/ H24 P€1_%NAM MSDMPB_'DECK-ID H24 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$DUMP MAS STORAGE FOR BREAKPOINT_^1* THIS ROUTINE DUMPS MASS STORAGE._^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%ENT_!M€€ASDMP_^1_%SPC_!1_^1_%EXT* BRKP20,BRKP21,BRKP22,BRKP23,BRKP24_^1_%EXT* BRKP25,BRKP26_^1_%EXT* BRKP01,BRKP04,BRKP07_;**MSOS 4.1**_^1_%SPC_!1_^1MASDMP STQ BRKP26_%ABS. LOC. OF OUTPUT BUFFER_^1_%STQ- I_^1_%ENQ_!4_)STORE INPUTED PARAMETERS_^1MD_#LDA- ($22),B_^1_%STA* S1,Q_^1_%INQ_!-1_^1_%SQM_!MD1-*-1_^1_%JMP* MD_^1_%SPC_!1_^1MD1_"LDA- $C2_'CHECK IF PARAMETER N IS A MASS_^1_%LDQ* €€ N_*STORAGE DEVICE._^1_%SQN_!MD2-*-1_^1_%SPC_!1_^1_%STA* N_)NO N GIVER USE STANDARD LIB. UNIT_^1_%JMP* MD4_^1MD2_"EAQ_!A_^1_%SAN_!MD3-*-1_^1_%JMP* MD4_'N EQUALS STANDARD LIB. UNIT_^1_%SPC_!1_^1MD3_"STQ* LU2_^1_%RTJ- ($F4)_%STATUS_^1_%NUM_!$600_^1LU2_"NUM_!$0,$0_^1_%LLS_!12_^1_%ALS 5_-CHECK GROUP CLASS CODE FOR MASS_^1_%AND- 5_^1_%INA -2_,MASS CLASS CODE = 2_^1_%SAZ MD4_+IF €€MASS - OK, NOT - GO TO ERROR_^1_%SPC_!1_^1ERR1_!JMP_!BRKP04_^1_%SPC_!1_^1MD4_"LDA* S1_S*_^1_%SAN_!1_T*_^1_%INA_!1_)SET S1=1 IF ZERO_:*_^1_%LDQ* S2_S*_^1_%SQN_!1_T*_^1_%TRA_!Q_)SET S2=S1 IF ZERO_9*_^1_%STA* S1_S*_^1_%STQ* S2_S*_^1_%LDA* W1_S*_^1_%SAN_!1_T*_^1_%RAO* W1_(SET W1=1 IF ZERO_:*_^1_%LDQ* W2_S*_^1_%SQN_!2_T*_^1_%ENQ_!96_S*_^1_%STQ* W2_(SET W2=96 IF ZERO_9*_^1_%LDA* €€ S1_S*_^1_%SUB* S2_S*_^1_%SAM_!MD6-*-1_N*****_^1_%SAN_!MDE-*-1_#ERROR--S1 GTR S2_9*****_^1_%LDA* W2_(S1=S2, SO_A*_^1_%SUB* W1_(CHECK W1 AND W2_;*_^1_%SAP_!MD6-*-1_N*_^1MDE_"JMP* ERR1_%ERROR, W1 GTR W2 AND S1=S2_0*_^1_%SPC_!1_^1MD6_"ENA_!1_^1_%STA_!BRKP24_#SET SO FIRST LINE IS PRINTED._^1_%ENA_!0_^1_%STA_!BRKP25_^1MSD_"LDA* S2_(CHECK IF LAST SECTOR_^1_%SUB* S1_^1_%SAN_!MSD1-*-€€1_^1_%LDA* W2_(LAST SECTOR_^1_%STA_!BRKP23_^1_%JMP* MSD3_^1MSD1_!SAP_!MSD2-*-1_!CHECK IF COMPLETED._^1_%JMP* OVER_^1MSD2_!ENA_!96_(NO. OF LAST WORD TO PRINT OF SECTOR._^1_%STA_!BRKP23_^1MSD3_!LDA* W1_(FIRST WORD TO PRINT OF SECTOR_^1_%STA_!BRKP22_^1_%RTJ* *+1_^1_%NOP_!0_^1_%LDQ* *-1_^1_%INQ_!MBUF-*+2_!FIND ABS. LOC. OF MBUF_^1_%INA_!-1_^1_%AAQ_!A_^1_%STA_!BRKP21_#STORE ABS. L€€OC. OF BUFFER_^1_%RTJ* SECNO_$WRITE SECTOR NO._^1_%RTJ* GETFIL_#GET SECTOR._^1_%RTJ_!BRKP20_^1_%ENA_!1_^1_%STA* W1_(SET 1ST WORD_^1_%RAO* S1_^1_%JMP* MSD_^1_%SPC_!1_^1OVER_!JMP_!BRKP01_#OPERATION COMPLETED._^1_%SPC_!2_^1SECNO NOP_!0_)SEQUENCE NO. PRINT OUT_^1_%LDA* S1_^1_%ADD- $C1_N**MSOS 4.0_^1_%RTJ_!BRKP07_^1_%STA* SNO1_^1_%STQ* SNO2_^1_%RTJ* *+1_M**MSOS 4.0_^1P2_#NOP_!€€0_O**MSOS 4.0_^1_%LDA* P2_*GET CURRENT ADDRESS_0**MSOS 4.0_^1_%INA_!15_N**MSOS 4.0_^1_%STA* ADR1_L**MSOS 4.0_^1_%RTJ- ($F4)_^1_%NUM_!$4C00,0_I**MSOS 4.0_^1TH_#NUM_!$0_^1LU1_"NUM_!$18FB_^1_%NUM_!$B_^1ADR1_!NUM_!0_O**MSOS 4.0_^1_%LDA* TH_,WAIT FOR I/O COMPLETION_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* (SECNO)_^1SNO_"ALF_!9,_!SECTOR NUMBER_^1SNO1_!NUM_!$2020_^1SNO2_!NUM_!$2020_^1_%SPC_!1€€_^1S1_#NUM_!$0000_$STARTING SECTOR_^1W1_#NUM_!$0000_$FIRST WORD OF STARTING SECTOR._^1S2_#NUM_!$0000_$LAST SECTOR_^1W2_#NUM_!$0000_$LAST WORD OF LAST SECTOR._^1N_$NUM_!$0000_$LOGICAL UNIT NO._^1_%SPC_!1_^1GETFIL NOP_!0_)GET MASS STORAGE SECTOR TO BE_^1_%LDA* S1_)OUTPUTED._^1_%STA* SN2_^1_%LDA* N_^1_%STA* LU_^1_%RTJ* *+1_M**MSOS 4.0_^1P1_#NOP_!0_O**MSOS 4.0_^1_%LDA* P1_*GET CU€rRRENT ADDRESS_0**MSOS 4.0_^1_%INA 21_O**MSOS 4.0_^1_%STA* ADR_M**MSOS 4.0_^1_%RTJ- ($F4)_^1_%NUM_!$4800,0_I**MSOS 4.0_^1_%NUM_!$0_^1LU_#NUM_!$0000_^1_%NUM_!96_^1ADR_"NUM_!0_O**MSOS 4.0_^1SN1_"NUM_!$0000_^1SN2_"NUM_!$0000_^1_%LDA* LU-1_^1_%SAZ_!1_^1_%JMP* *-2_^1_%LDA* LU_^1_%SAM_!1_^1_%JMP* (GETFIL)_^1_%JMP_!BRKP01_^1_%SPC_!1_^1MBUF_!BSS_!MBUF(96)_^1_%END_]_^__rPSETBRP CSY/ H25 P€1_%NAM SETBRP_'DECK-ID H25 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROCESS *S STATEMENTS FOR BREAKPOINT_^1*****************************************************_^1_%SPC_!1_^1_%SPC_!1_^1_%SPC_!1_^1*_]_^1* *SHHHH,HHHH,...._^1* €€THIS ROUTINE SETS BREAKPOINTS AT EACH HEXADECIMAL_^1* ADDRESS SPECIFIED._^1*_]_^1_%SPC_!1_^1*****************************************************_^1_%SPC_!1_^1_%ENT_!SETBRP_^1_%ENT_!BRKP10,BRKP11,BRKP12_^1_%SPC_!1_^1_%EXT* BRKP01,BRKP04,BRKP07,BRKP09_^1_%SPC_!2_^1SETBRP SAN_!SETB-*-1_"ENTRY_^1_%JMP_!BRKP04_#NO ENTRIES GIVEN - ERROR_^1SETB_!TCA_!A_)NEG. NO. OF BREAK POINTS_^1_%STA*€€ COUNT_'TO SET_^1_%SPC_!1_^1SETB0 LDA* BPCONT_#CHECK NO. OF BREAKPOINTS_^1_%STA- I_*SET IS NOT GREATER THAN_^1_%INA_!-NOBP_%ALLOWABLE._^1_%SAM_!SETB1-*-1_^1_%JMP* B03_^1_%SPC_!1_^1SETB1 LDA- ($22),Q_"CHECK IF BREAKPOINT ADDRESS_^1_%RTJ_!BRKP09_%UNPROTECTED._^1_%INA_!0_^1_%SAN SETB2-*-1_H**MSOS 4.0_^1_%JMP* SETB4_$IF SO, OMIT SETTING BP._^1_%SPC_!1_^1SETB2 STA* LOC_'SAVE €€LOC. OF BP_^1_%STA* BPL,I_$SAVE LOC. OF BP IN ARRAY._^1_%LDA* (LOC)_$SAVE INSTRUCTION WHERE BP STORED._^1_%STA* INST,I_^1_%SUB* RTJ53_$CHECK IF BP ALLREADY SET._^1_%SAZ_!SETB4-*-1_^1_%LDA* RTJ53_$STORE BP IN ADDRESS SPECIFIED._^1_%STA* (LOC)_^1_%RAO* BPCONT_#INCREASE BP COUNTER_^1_%SPC_!1_^1SETB4 RAO* COUNT_^1_%LDA* COUNT_$CHECK IF ALL INPUTED BP SET._^1_%SAZ_!OVER-*-1_^€€1_%INQ_!1_^1_%JMP* SETB0_^1OVER_!JMP_!BRKP01_^1B03_"LDA- ($22),Q_#BP ADDRESS_^1_%RTJ_!BRKP07_^1_%STA* BUF2+2_^1_%STQ* BUF2+3_^1BO3A_!RTJ* *+1_M**MSOS 4.0_^1P1_#NOP_!0_O**MSOS 4.0_^1_%LDA* P1_N**MSOS 4.0_^1_%INA_!$51_M**MSOS 4.0_^1_%STA* ADR_M**MSOS 4.0_^1_%RTJ- ($F4)_'WRITE ERROR MESSAGE BO3,HHHH_'**MSOS 4.0_^1_%NUM_!$4C00,0,0_G**MSOS 4.0_^1_%NUM_!$18FC,$4_^1ADR_"NUM_!0_O**€€MSOS 4.0_^1STAT_!LDA* BO3A+8_J**MSOS 4.0_^1_%SAZ CONT-*-1_N****_^1_%JMP* STAT_R****_^1CONT_!JMP* OVER_^1_%SPC_!2_^1*_]_^1* THIS NUMBER NOBP CONTROLS THE NUMBER OF BREAKPOINTS_^1* THAT CAN BE SET._^1_%EQU_!NOBP(30)_^1_%SPC_!2_^1_%NUM_!$0000_$CURRENT BREAKPOINT LOCATION_^1BPL_"BZS_!BPL(NOBP)_^1_%NUM_!$0000_$CURRENT BREAKPOINT INSTRUCTION_^1INST_!BZS_!INST(NOBP)_^1COUNT NUM_!$00€š00_^1LOC_"NUM_!$0000_^1RTJ53 NUM_!$54F3_^1BPCONT NUM_!$0000_^1BUF2_!ALF_!4,B03,_^1_%SPC_!1_^1_%EQU_!BRKP10(BPL),BRKP11(INST),BRKP12(BPCONT)_^1_%END_]_^__šPSETBR1 CSY/ H33 P€1_%NAM SETBR1_'DECK-ID H33 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM ADDS BREAKPOINTS TO THE LIST OF CURRENT ONES._^1* IT IGNORES DUPLICATES AND CHEC€€KS FOR PROTECT VIOLATIONS_^1* AS WELL AS FORMAT ERRORS._^1*_]_^1NBTS_!EQU NBTS(15)_$MAXIMUM NUMBER OF BREAKPOINTS_^1*_]_^1SET_"NUM 0_^1_%INA 12_^1_%STA- I_,INPUT BUFFER LOCATION_^1_%CLR A_^1_%STA CHAR_^1_%ENA 2_^1_%STA WDIX_^1*_]_^1SET1_!RTJ* GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ SET3-*-1_$SKIP ON A COMMA_^1_%INA $C_+IS IT A BLANK_^1_%SAZ SET2_^1_%SUB =N$DF_(IS IT A F€€F_^1_%SAZ SET2-*-1_$SKIP ON STATEMENT END_^1_%ENA 2_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1SET2_!JMP* (SET)_(DONE - RETURN_^1*_]_^1SET3_!LDA* WDIX_^1_%STA* FSTRT_(SAVE FIELD START LOCATION_^1_%RTJ* HEX_*CONVERT BASE_^1_%STA* BASE_)SAVE IT_^1_%RTJ* GET_*GET DELIMITOR_^1_%INA -$2B_^1_%SAN SET4-*-1_$SKIP IF NOT A PLUS_^1_%RTJ* HEX_*CONVERT INCREMENT_^1_%ADD* BASE_€€^1_%STA* BASE_)ADD TO BASE TO GET EFFECTIVE ADDRESS_^1_%JMP* SET6_^1SET4_!INA -1_^1_%SAZ SET5-*-1_$SKIP IF COMMA_^1_%INA $C_+IS IT A BLANK_^1_%SAN TRYFF_^1_%JMP* SET5_^1TRYFF SUB =N$DF_(IS IT A FF_^1_%SAZ SET5-*-1_$SKIP ON STATEMENT END_^1_%LDA* FSTRT_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1*_]_^1SET5_!RTJ* BACK_)BACK UP SCAN BY 1_^1SET6_!RTJ* PCHK_)PROTECT C€€HECK_^1_%LDA* (BASE)_^1_%SUB* TOF3_^1_%SAN SET7-*-1_$SKIP IF NOT A BREAKPOINT ALREADY_^1_%JMP* SET1_)IGNORE IT - CONTINUE_^1SET7_!LDQ- I_^1_%INQ 43_+ADDRESS OF BPL TABLE IN Q_^1_%STQ* NUM_^1_%ENQ NBTS-1_'INDEX TO BPL_^1SET8_!LDA* (NUM),Q_%GET A BPL CELL_^1_%SAZ SET10-*-1_#SKIP IF EMPTY FOUND_^1_%INQ -1_^1_%SQP SET9-*-1_$SKIP IF MORE LOOKING NEEDED_^1_%JMP* SET20_(FULL - PRINT€€ DIAGNOSTIC_^1SET9_!JMP* SET8_^1SET10 LDA* BASE_^1_%STA* (NUM),Q_%STORE BREAKPOINT ADDRESS IN BPL_^1_%LDA* NUM_^1_%INA NBTS+1_'BASE ADDRESS OF INST TABLE_^1_%STA* NUM_^1_%LDA* (BASE)_^1_%STA* (NUM),Q_%USER INSTRUCTION STORED IN INST TABLE_^1_%LDA* TOF3_^1_%STA* (BASE)_'JUMP TO BREAKPOINT STORED IN USER PROGRAM_^1_%JMP* SET1_)CONTINUE_^1*_]_^1SET20 RTJ* *+1_^1_%NUM 0_^1_%LDA* SE€€T20+1_^1_%INA POO-SET20-1_^1_%STA* STRT_)STARTING LOCATION OF DIAGNOSTIC_^1_%ENQ -7_^1_%LDA- ($22),B_%GET OUTPUT UNIT_^1_%STA* VEE_*STORE FOR OUTPUT_^1*_]_^1_%RTJ- ($F4)_(WRITE DIAGNOSTIC_^1_%NUM $4C00,0_^1THUD_!NUM 0_^1VEE_"NUM 0,0_^1STRT_!NUM 0_^1*_]_^1SET21 LDA* THUD_^1_%SAZ SET22-*-1_#SKIP ON OUTPUT COMPLETE_^1_%JMP* SET21_'WAIT_^1SET22 LDA* FSTRT_^1_%JMP- 40,I_^1*_]_€€^1POO_"ALF 10,TOO MANY BREAKPOINTS_^1*_]_^1* THIS SUBROUTINE CHECKS THE STORE ADDRESS TO DETECT POSSIBLE_^1* PROTECT ERRORS_^1*_]_^1PCHK_!NUM 0_^1_%LDA* BASE_^1_%SUB- $F7_*LOWER BOUND CHECK_^1_%INA -1_^1_%SAM PE-*-1_'SKIP ON PROTECT ERROR_^1_%LDA* BASE_^1_%SUB- $F6_*UPPER BOUND CHECK_^1_%SAP PE-*-1_'SKIP ON PROTECT ERROR_^1_%JMP* (PCHK)_'OK_^1PE_#LDA* FSTRT_^1_%JMP- 41,I_)GO T€€O PROTECT ERROR TYPEOUT_^1*_]_^1* THE FOLLOWING BACKS UP THE STATEMENT SCAN BY ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%LDA* CHAR_^1_%SAN BACK1-*-1_#SKIP ON CHAR > RIGHT_^1_%RAO* CHAR_^1_%LDA* WDIX_^1_%INA -1_^1_%STA* WDIX_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_%STA* CHAR_)SET CHAR TO LEFT_^1_%JMP* (BACK)_^1*_]_^1* THIS SUBROUTINE UNPACKS ONE CHARACTER FROM THE INPUT BUFFER_^1* AND RE€€TURNS IT IN A._^1*_]_^1GET_"NUM 0_^1_%LDA* (WDIX),I_$GET CHARACTER WORD_^1_%LDQ* CHAR_)CHARACTER FLAG 0=LEFT 1=RIGHT_^1_%SQN GET1-*-1_$SKIP ON RIGHT CHARACTER_^1_%ALS 8_^1GET1_!AND- $A_+UNPACK IT_^1_%SQZ GET2-*-1_$SKIP ON LEFT_^1_%CLR Q_^1_%STQ* CHAR_)UPDATE CHARACTER FLAG_^1_%RAO* WDIX_)UPDATE WORD INDEX_^1_%JMP* (GET)_(RETURN_^1GET2_!RAO* CHAR_)UPDATE CHARACTER FLAG_^1_%LD€€Q* WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#SKIP ON INPUT BUFFER END - ERROR_^1_%JMP* (GET)_(RETURN_^1OFLOW ENA 0_^1_%JMP- 40,I_^1*_]_^1CHAR_!BSS CHAR(1)_%CHARACTER FLAG FOR UNPACKING_!0=LEFT 1=RIGHT_^1BASE_!BSS BASE(1)_%BASE OR EFFECTIVE ADDRESS_^1WDIX_!BSS WDIX(1)_%INDEX TO CURRENT BUFFER WORD_^1NUM_"BSS NUM(6)_'SCRATCH_^1TOF3_!RTJ- ($F3)_(ENTRY SUBSTITUT€€ED FOR USER INSTRUCTION_^1FSTRT BSS FSTRT(1)_$FIELD START ONDEX_^1*_]_^1* THIS ROUTINE CONVERTS A HEX (ASCII) FIELD TO BINARY._^1*_]_^1HEX_"NUM 0_^1_%CLR A_^1_%STA* NUM_*INITIALIZE CONVERTED VALUE_^1_%ENA -5_^1_%STA* NUM+1_(INITIALIZE DIGIT COUNT_^1*_]_^1HEX3_!RTJ* GET_*GET A CHARACTER_^1_%INA -$30_)UNDER $30 CHECK_^1_%SAP HEX4-*-1_$SKIP ON NUMERIC - MAYBE_^1_%JMP* HEX10_(NO€€T NUMERIC_^1HEX4_!TRA Q_^1_%INQ -$A_^1_%SQM HEX405-*-1_"SKIP ON DIGIT 0 THRU 9_^1_%INA -7_^1_%INQ -7_^1_%SQM HEX10-*-1_#SKIP IF NON-NUMERIC_^1_%INQ -6_+UNDER $47 CHECK_^1_%SQP HEX10-*-1_#SKIP IF NON-NUMERIC_^1HEX405 LDQ* NUM_*CONVERTED DIGIT IN A_^1_%QLS 4_^1_%EAQ A_^1_%STA* NUM_*PACKED DIGIT IS STORED_^1_%RAO* NUM+1_^1_%LDA* NUM+1_^1_%SAN HEX5-*-1_$SKIP IF 4 OR LESS DIG€°ITS_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1HEX5_!JMP* HEX3_)CONTINUE_^1HEX10 RTJ* BACK_)BACK UP SCAN BY ONE_^1_%LDA* NUM_^1_%JMP* (HEX)_(RETURN_^1_%END_]_^__°PTERMI1 CSY/ H34 P€1_%NAM TERMI1_'DECK-ID H34 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM TERMINATES BREAKPOINTS SPECIFIED VIA THE *TRM STATEMENT._^1* NO PARAMETERS IMPLI€€ES TERMINATE ALL._^1*_]_^1NBTS_!EQU NBTS(15)_$MAXIMUM NUMBER OF BREAKPOINTS_^1*_]_^1TRM_"NUM 0_^1_%INA 12_^1_%STA- I_,BUFFER LOCATION_^1_%INA 43_^1_%STA* TEMP_)BPL TABLE ORIGIN_^1_%CLR A_^1_%STA* CHAR_)SET CHARACTER FLAG TO LEFT_^1_%ENA 2_^1_%STA* WDIX_)INITIALIZE WORD INDEX TO BUFFER_^1*_]_^1TRM1_!RTJ GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ TRM3-*-1_$SKIP IF A COMMA_^1_%I€€NA $C_+IS IT A BLANK_^1_%SAZ TRM2_^1_%SUB =N$DF_(IS IT A FF_^1_%SAZ TRM2-*-1_$SKIP IF NO PARAMETERS (STATEMENT END)_^1_%ENA 2_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1TRM2_!JMP* TRM30_(REMOVE ALL BREAKPOINTS_^1*_]_^1TRM3_!LDA* WDIX_^1_%STA* FSTRT_(SAVE INDEX TO FIELD START_^1_%RTJ* HEX_*CONVERT BASE_^1_%STA* BASE_)SAVE IT_^1_%RTJ* GET_*GET DELIMITOR_^1_%INA -$2€€B_^1_%SAN TRM4-*-1_$SKIP IF NOT A PLUS_^1_%RTJ* HEX_*CONVERT INCREMENT_^1_%ADD* BASE_^1_%STA* BASE_)EFFECTIVE ADDRESS OF BREAKPOINT_^1_%JMP* TRM6_^1*_]_^1TRM4_!INA -1_^1_%SAZ TRM5-*-1_$SKIP IF A COMMA_^1_%INA $C_+IS IT A BLANK_^1_%SAN TRYFF_^1_%JMP* TRM5_^1TRYFF SUB =N$DF_(IS IT A FF_^1_%SAZ TRM5-*-1_$SKIP IF STATEMENT END_^1TRM45 LDA* FSTRT_^1_%JMP- 40,I_)FORMAT ERROR - B€€ACK TO CONTROL PROGRAM_^1*_]_^1TRM5_!RTJ* BACK_)BACK UP SCAN BY ONE_^1TRM6_!ENQ NBTS-1_'INDEX TO BPL_^1TRM7_!LDA* (TEMP),Q_$GET A BPL ENTRY_^1_%SUB* BASE_^1_%SAZ TRM9-*-1_$SKIP IF A CORRESPONDING ENTRY IS FOUND_^1_%INQ -1_^1_%SQM TRM8-*-1_$SKIP IF A CORRESPONDING ENTRY DOES NOT EXIST_^1_%JMP* TRM7_)LOOK SOME MORE_^1TRM8_!JMP* TRM45_(GO DO DIAGNOSTIC_^1TRM9_!RTJ* TREM_)GO TERMIN€€ATE THE BREAKPOINT_^1_%RTJ* GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ TRM11-*-1_#SKIP IF A COMMA_^1_%SUB =N$D3_^1_%SAZ TRM10-*-1_#SKIP IF STATEMENT END_^1_%LDQ* CHAR_^1_%LDA* WDIX_^1_%SQN TRM95-*-1_^1_%INA -1_^1TRM95 JMP- 40,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1TRM10 JMP* (TRM)_(RETURN_^1TRM11 JMP* TRM3_)CONTINUE_^1*_]_^1* THE FOLLOWING SUBROUTINE TERMINATES ONE BREAK€€POINT._^1* BPL INDEX (VIA TEMP) IS IN Q._^1*_]_^1TREM_!NUM 0_^1_%CLR A_^1_%STA* (TEMP),Q_$CLEAR BPL ENTRY_^1_%INQ NBTS+1_^1_%LDA* (TEMP),Q_$GET USER INSTRUCTION_^1_%STA* (BASE)_'PUT IT BACK IN THE PROGRAM_^1_%INQ -NBTS-1_^1_%JMP* (TREM)_'RETURN_^1*_]_^1* THIS SUBROUTINE REMOVES ALL BREAKPOINTS._^1*_]_^1TRM30 ENQ NBTS-1_^1TRM31 LDA* (TEMP),Q_$GET A BPL ENTRY_^1_%SAZ TRM32-*-€€1_#SKIP IF AN EMPTY ENTRY_^1_%STA* BASE_^1_%RTJ* TREM_)REMOVE THE BREAKPOINT_^1TRM32 INQ -1_^1_%SQM TRM33-*-1_#SKIP IF DONE_^1_%JMP* TRM31_'CONTINUE_^1TRM33 JMP* (TRM)_(DONE_^1*_]_^1BUFLOC BSS BUFLOC(1)_#INPUT BUFFER LOCATION PLUS 2_^1CHAR_!BSS CHAR(1)_%CHARACTER FLAG FOR UNPACKING - 0=LEFT 1=RIGHT_^1WDIX_!BSS WDIX(1)_%INDEX TO CURRENT BUFFER WORD_^1BASE_!BSS BASE(1)_%BASE €€OR EFFECTIVE ADDRESS_^1NUM_"BSS NUM(6)_'SCRATCH_^1FSTRT BSS FSTRT(1)_$FIELD START INDEX_^1TEMP_!BSS TEMP(1)_%MORE SCRATCH_^1_%EJT_]_^1*_]_^1* THIS ROUTINE CONVERTS A HEX (ASCII) FIELD TO BINARY._^1*_]_^1HEX_"NUM 0_^1_%CLR A_^1_%STA* NUM_*INITIALIZE CONVERTED VALUE_^1_%ENA -5_^1_%STA* NUM+1_(INITIALIZE DIGIT COUNT_^1*_]_^1HEX3_!RTJ* GET_*GET A CHARACTER_^1_%INA -$30_)UNDER $€€30 CHECK_^1_%SAP HEX4-*-1_$SKIP ON NUMERIC - MAYBE_^1_%JMP* HEX10_(NOT NUMERIC_^1HEX4_!TRA Q_^1_%INQ -$A_^1_%SQM HEX405-*-1_"SKIP ON DIGIT 0 THRU 9_^1_%INA -7_^1_%INQ -7_^1_%SQM HEX10-*-1_#SKIP IF NON-NUMERIC_^1_%INQ -6_+UNDER $47 CHECK_^1_%SQP HEX10-*-1_#SKIP IF NON-NUMERIC_^1HEX405 LDQ* NUM_*CONVERTED DIGIT IN A_^1_%QLS 4_^1_%EAQ A_^1_%STA* NUM_*PACKED DIGIT IS STORED_€€^1_%RAO* NUM+1_^1_%LDA* NUM+1_^1_%SAN HEX5-*-1_$SKIP IF 4 OR LESS DIGITS_^1_%JMP* TRM45_(FORMAT ERROR - BACK TO CONTROL PROGRAM_^1HEX5_!JMP* HEX3_)CONTINUE_^1HEX10 RTJ* BACK_)BACK UP SCAN BY ONE_^1_%LDA* NUM_^1_%JMP* (HEX)_(RETURN_^1*_]_^1* THE FOLLOWING BACKS UP THE STATEMENT SCAN BY ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%LDA* CHAR_^1_%SAN BACK1-*-1_#SKIP IF ON RIGHT CHARACTER€€_^1_%RAO* CHAR_)SET RIGHT CHARACTER_^1_%LDA* WDIX_^1_%INA -1_+REDUCE WORD INDEX BY ONE_^1_%STA* WDIX_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_%STA* CHAR_)SET TO LEFT CHARACTER_^1_%JMP* (BACK)_^1*_]_^1* THIS SUBROUTINE UNPACKS 1 CHARACTER FROM INPUT BUFFER. RETURNS IN A._^1*_]_^1GET_"NUM 0_^1_%LDA* (WDIX),I_$CHARACTER WORD_^1_%LDQ* CHAR_)CHARACTER FLAG 0=LEFT 1=RIGHT_^1_%SQN GET1-*-1€€_$SKIP IF RIGHT CHARACTER_^1_%ALS 8_^1GET1_!AND- $A_+UNPACK_^1_%SQZ GET2-*-1_$SKIP IF LEFT CHARACTER_^1_%CLR Q_^1_%STQ* CHAR_)SET TO LEFT CHARACTER_^1_%RAO* WDIX_)GO TO NEXT BUFFER WORD_^1_%JMP* (GET)_(RETURN_^1*_]_^1GET2_!RAO* CHAR_)SET TO RIGHT CHARACTER_^1_%LDQ* WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#SKIP IF PAST BUFFER END_^1_%JMP* (GET)_^1OFLOW ENA 0_^€,1_%JMP- 40,I_)PRINT DIAGNOSTIC_^1_%END_]_^__,PENTCO1 CSY/ H35 P€1_%NAM ENTCO1_'DECK-ID H35 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM OPERATES AS AN OVERLAY CALLED VIA GTFILE IN BREAKPOINT_^1* CONTROL. IT PROCESSE€€S *LHX, *LIT, *LAS, *LSP, *LDP STATEMENTS._^1* IT IS ENTERRED WITH THE LOCATION OF THE 1ST CELL OF THE TABLE_^1* BLOCK IN A. IT DOES EVERYTHING ELSE ITSELF._^1*_]_^1ENTCOR NUM 0_,ENTRY FROM BREAKPOINT CONTROL_^1_%INA 12_^1_%STA- I_,LOCATION OF INPUT BUFFER TO I_^1_%LDA- 1,I_*GET THIRD INPUT CHARACTER_^1_%ALS 8_^1_%AND- 6_,CONTAINS $F_^1_%CLR Q_^1_%INA -1_^1_%SAZ ENTC-*-1_$S€€KIP IF ASCII INPUT_^1_%INA -3_^1_%SAM ENT1-*-1_$SKIP ON SINGLE PRECISION FP_^1_%SAZ ENT2-*-1_$SKIP ON DOUBLE PRECISION FP_^1_%INA -4_^1_%SAZ ENT3-*-1_$SKIP ON HEX INPUT_^1_%INQ 3_,DECIMAL INPUT_^1ENT3_!INQ 3_^1ENT2_!INQ 3_^1ENT1_!INQ 3_^1ENTC_!INQ JMPLST-CONVRT_^1_%ADQ =N$1800_%COMPUTE ENTRY TO PROPER CONV. ROUTINE_^1_%STQ* CONVRT_'PLUGS ENTRY TO CONVERSION ROUTINE_^1*_]€€_^1* THE FOLLOWING INITIALIZES THE GET SUBROUTINE._^1*_]_^1_%ENQ 2_,INDEX TO 1ST STATEMENT DELIMITOR_^1_%STQ WDIX_^1_%CLR A_^1_%STA CHAR_)SET FOR LEFT CHARACTER_^1*_]_^1_%RTJ GET_*GET NEXT CHARACTER_^1_%SUB =N$2C_^1_%SAZ ENT4-*-1_$SKIP IF A COMMA_^1_%ENA 2_^1_%JMP- 40,I_)BACK TO CONTROL PROGRAM_^1*_]_^1ENT4_!LDA WDIX_^1_%STA FSTRT_(SAVE FIELD START INDEX_^1_%ENA 0_^1_€€%RTJ HEX_*CONVERT BASE ADDRESS_^1_%STA BASE_^1_%RTJ GET_*GET NEXT CHARACTER_^1_%INA -$2C_^1_%SAZ ENT5-*-1_$SKIP ON COMMA_^1ENT45 LDA FSTRT_^1_%JMP- 40,I_)BAD DELIMITOR_^1ENT5_!ENA 0_^1_%RTJ HEX_*CONVERT INCREMENT_^1_%ADD BASE_^1_%STA BASE_)EFFECTIVE ADDRESS CALCULATED_^1_%RTJ GET_*GET NEXT CHARACTER_^1_%INA -$2F_^1_%SAZ ENT6-*-1_$SKIP IF SLASH_^1_%JMP* ENT45_(BAD DELI€€MITOR_^1ENT6_!LDA WDIX_^1_%STA FSTRT_^1_%RTJ* CONV_)CONVERT AND STORE NEXT VALUE_^1_%RTJ GET_*GET NEXT CHARACTER_^1_%INA -$2C_^1_%SAN ENT7-*-1_$SKIP ON NO COMMA_^1_%JMP* ENT6_^1ENT7_!INA $C_+IS IT A BLANK_^1_%SAN TRYFF_^1_%JMP ENT8_^1TRYFF SUB =N$DF_(IS IT A FF_^1_%SAZ ENT8-*-1_$SKIP ON END OF STATEMENT_^1_%JMP* ENT45_^1ENT8_!JMP* (ENTCOR)_$STATEMENT PROCESSING COMPLETE_€€^1*_]_^1* THIS FOLLOWING IS THE ENTRY TO THE CONVERSION SUBROUTINES._^1* ENTRY IS VIA RTJ._^1*_]_^1CONV_!NUM 0_^1_%ENA 1_,NON-ZERO MEANS CONVERT AND STORE DATA_^1*_8ZERO MEANS CONVERT BUT DO NOT STORE._^1*_]_^1* THE FOLLOWING INSTRUCTION IS PLUGGED ON PROGRAM ENTRY_^1* TO GO TO THE PROPER CONVERSION AND STORE ROUTINE._^1*_]_^1CONVRT NUM 0_^1*_]_^1* THE INSTRUCTION AT CONVRT €€JUMPS TO ONE OF THE FOLLOWING._^1*_]_^1JMPLST RTJ ASCII_(ASCII_^1_%JMP* (CONV)_^1_%RTJ SPRE_)SINGLE PRECISION FLOATING POINT_^1_%JMP* (CONV)_^1_%RTJ DPRE_)DOUBLE PRECISION FLOATING POINT_^1_%JMP* (CONV)_^1_%RTJ HEX_*HEXADECIMAL_^1_%JMP* (CONV)_^1_%RTJ DEC_*DECIMAL_^1_%JMP* (CONV)_^1_%EJT_]_^1*_]_^1* THIS ROUTINE UNPACKS ASCII CHARACTERS AND REPACKS THEM_^1* TWO PER WORD AND ST€€ORES THEM. IT CHECKS FOR PROTECT ERROR ALSO._^1*_]_^1ASCII NUM 0_^1_%CLR A_^1_%STA* NUM+1_(SET LEFT/RIGHT FLAG TO LEFT_^1ASC1_!RTJ GET_*GET A CHARACTER_^1_%SUB- $A_+CONTAINS $FF_^1_%SAN ASC3-*-1_$SKIP IF NOT DONE_^1ASC2_!RTJ BACK_)BACK SCAN UP BY ONE_^1_%LDA* NUM+1_^1_%SAN ASC21-*-1_#SKIP ON RIGHT CHARACTER_^1_%JMP* (ASCII)_%DONE_^1ASC21 LDA- $A_^1_%EOR* NUM_*ADD $FF TO RIG€€HT OF LAST CHARACTER_^1_%STA* NUM_^1_%RTJ* PCHK_)PROTECT CHECK_^1_%LDA* NUM_^1_%STA* (BASE)_'STORE LAST WORD_^1_%RAO* BASE_^1_%JMP* (ASCII)_%DONE_^1*_]_^1ASC3_!ADD- $A_^1_%LDQ* NUM+1_^1_%SQN ASC4-*-1_$SKIP ON RIGHT CHARACTER_^1_%ALS 8_^1_%RAO* NUM+1_(SET FLAG TO RIGHT_^1_%STA* NUM_^1_%JMP* ASC1_^1ASC4_!EOR* NUM_*ADD FIRST TO SECOND CHARACTER_^1_%CLR Q_^1_%STQ* NUM+1_(SET FLAG TO€€ LEFT_^1_%STA* NUM_^1_%RTJ* PCHK_)PROTECT CHECK_^1_%LDA* NUM_^1_%STA* (BASE)_'STORE THE WORD_^1_%RAO* BASE_)UPDATE STORE ADDRESS_^1_%JMP* ASC1_)CONTINUE_^1_%EJT_]_^1*_]_^1* THIS SUBROUTINE CONVERTS SIGNED DECIMAL INTEGERS TO BINARY_^1* AND STORES THEM AFTER CHECKING FOR A PROTECT ERROR._^1*_]_^1DEC_"NUM 0_^1_%CLR A_^1_%STA* NUM_*CLEAR NUMBER_^1_%STA* NUM+1_(SET SIGN POSITIVE_^1€€_%STA* NUM+2_(SET 1ST CHARACTER FLAG TO 1ST_^1_%ENA -6_^1_%STA* NUM+3_(SET DIGIT COUNT_^1*_]_^1DEC1_!RTJ* GET_*GET A CHARACTER_^1_%LDQ* NUM+2_^1_%SQN DEC8-*-1_$SKIP ON NOT 1ST CHARACTER_^1DEC2_!INA -$2B_^1_%SAN DEC5-*-1_$SKIP IF NOT A PLUS_^1DEC3_!RAO* NUM+2_(TURN OFF 1ST CHARACTER FLAG_^1_%JMP* DEC1_^1DEC5_!INA -2_^1_%SAN DEC6-*-1_$SKIP IF NOT A MINUS_^1_%RAO* NUM+1_(SET SIG€€N NEGATIVE_^1_%JMP* DEC3_^1DEC6_!RAO* NUM+2_(TURN OFF 1ST CHARACTER FLAG_^1_%INA $2D_^1DEC8_!LDQ* NUM+3_^1_%SQN DEC9-*-1_$SKIP IF LESS THAN 5 DIGITS_^1DEC85 LDA* FSTRT_^1_%JMP- 40,I_)TOO MANY DIGITS_^1DEC9_!RAO* NUM+3_(UPDATE DIGIT COUNT_^1_%INA -$30_^1_%SAP DEC10-*-1_#SKIP ON OK SO FAR_^1_%JMP* DEC30_(NOT A DECIMAL DIGIT_^1DEC10 INA -$A_^1_%SAM DEC11-*-1_#SKIP ON DECIMAL DI€€GIT_^1_%JMP* DEC30_^1DEC11 INA $A_^1_%STA* NUM+4_^1_%ENA 10_+HERE IS THE ACTUAL CONVERSION_^1_%MUI* NUM_^1_%SQZ DEC12-*-1_#SKIP IF NUMBER LESS THAN 32768_^1_%JMP* DEC85_(NUMBER TOO LARGE_^1DEC12 ADD* NUM+4_^1_%SNO DEC13-*-1_#SKIP IF NO. LESS THAN 32768_^1_%JMP* DEC85_(NUMBER TOO LARGE_^1DEC13 STA* NUM_*SAVE CURRENT PROCEEDS_^1_%JMP* DEC1_)GO GET NEXT DIGIT_^1*_]_^1DEC30 RTJ€€* BACK_)BACK UP SCAN BY ONE_^1_%RTJ* PCHK_)PROTECT CHECK_^1_%LDA* NUM_^1_%LDQ* NUM+1_^1_%SQZ DEC31-*-1_#SKIP IF NUMBER IS POSITIVE_^1_%TCA A_,COMPLEMENT A NEGATIVE_^1DEC31 STA* (BASE)_'STORE THE DATA_^1_%RAO* BASE_)SET FOR NEXT CELL_^1_%JMP* (DEC)_(DONE_^1*_]_^1CHAR_!BSS CHAR(1)_%CHARACTER FLAG FOR UNPACKING - 0=LEFT 1=RIGHT_^1WDIX_!BSS WDIX(1)_%INDEX TO CURRENT BUFFER WORD_^1€€BASE_!BSS BASE(1)_%EFFECTIVE STORE ADDRESS_^1NUM_"BSS NUM(9)_'CONVERSION SCRATCH_^1FSTRT BSS FSTRT(1)_$FIELD START INDEX_^1_%EJT_]_^1* THIS SUBROUTINE CONVERTS ASCII-HEX VALUES TO BINARY IF A=0._^1* IF A IS NOT ZERO IT ALSO CHECKS FOR PROTECT ERRORS AND STORES DATA._^1*_]_^1HEX_"NUM 0_^1_%STA* NUM+2_^1HEX1_!LDA* NUM+2_^1_%SAZ HEX2-*-1_$SKIP IF CONVERT ONLY_^1_%RTJ* PCHK_)PROT€€ECT CHECK_^1HEX2_!CLR A_^1_%STA* NUM_*INITIALIZE CONVERTED VALUE_^1_%ENA -5_^1_%STA* NUM+1_(DIGIT COUNT INITIALIZED_^1HEX3_!RTJ* GET_*GRT A CHARACTER_^1_%INA -$30_)UNDER $30 CHECK_^1_%SAP HEX4-*-1_$SKIP ON OK NUMBER_^1_%JMP* HEX10_(NON-NUMBER_^1HEX4_!TRA Q_^1_%INQ -$A_^1_%SQM HEX405-*-1_"DIGIT IS 0 THRU 9 AND IN A_^1_%INA -7_^1_%INQ -7_+OVER $40 CHECK_^1_%SQM HEX10-*-1_#S€€KIP ON NON NUMBER_^1_%INQ -6_+UNDER $47 CHECK_^1_%SQP HEX10-*-1_#SKIP ON NON NUMBER_^1HEX405 LDQ* NUM_*CONVERTED DIGIT IN A_^1_%QLS 4_^1_%EAQ A_^1_%STA* NUM_*PACKED DIGIT IS STORED_^1_%RAO* NUM+1_^1_%LDA* NUM+1_^1_%SAN HEX5-*-1_$SKIP ON 5 OR LESS DIGITS_^1_%JMP* DEC85_(BAD DATA_^1HEX5_!JMP* HEX3_)CONTINUE_^1*_]_^1HEX10 RTJ* BACK_)BACK SCAN UP ONE_^1_%LDQ* NUM+2_^1_%LDA* NUM_^€€1_%SQN HEX11-*-1_#SKIP IF STORING REQUIRED_^1_%JMP* (HEX)_(DONE_^1HEX11 STA* (BASE)_'STORE THE DATA_^1_%RAO* BASE_)INCREMENT STORE ADDRESS_^1_%JMP* (HEX)_(DONE_^1*_]_^1* THIS SUBROUTINE CHECKS THE STORE ADDRESS TO DETECT_^1* POSSIBLE PROTECT ERRORS_^1*_]_^1PCHK_!NUM 0_^1_%LDA* BASE_^1_%SUB- $F7_*LOWER BOUND CHECK_^1_%INA -1_^1_%SAM PE-*-1_'PROTECT ERROR_^1_%LDA* BASE_^1_%SUB- €€$F6_*UPPPER BOUND CHECK_^1_%SAP PE-*-1_'PROTECT ERROR_^1_%JMP* (PCHK)_'OK_^1PE_#LDA* FSTRT_^1_%JMP- 41,I_)PROTECT ERROR - BACK TO BRKPTD_^1*_]_^1* THE FOLLOWING BACKS THE SCAN UP ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%LDA* CHAR_^1_%SAN BACK1-*-1_#SKIP ON RIGHT_^1_%RAO* CHAR_)SET TO RIGHT_^1_%LDA* WDIX_^1_%INA -1_^1_%STA* WDIX_)BACK UP ONE WORD_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_€€%STA* CHAR_)SET TO LEFT CHARACTER_^1_%JMP* (BACK)_^1*_]_^1* THIS SUBROUTINE UNPACKS A CHARACTER FROM THE INPUT BUFFER_^1* AND RETURNS IT IN A._^1*_]_^1GET_"NUM 0_^1_%LDA* (WDIX),I_$GET CHARACTER WORD_^1_%LDQ* CHAR_)CHARACTER FLAG 0=LEFT 1=RIGHT_^1_%SQN GET1-*-1_$SKIP ON RIGHT CHARACRER_^1_%ALS 8_^1GET1_!AND- $A_+UNPACK IT_^1_%SQZ GET2-*-1_$SKIP ON LEFT_^1_%CLR Q_^1_%STQ* CHA€€R_)UPDATE LEFT/RIGHT FLAG_^1_%RAO* WDIX_)UPDATE WORD INDEX_^1_%JMP* (GET)_(RETURN_^1*_]_^1GET2_!RAO* CHAR_)UPDATE LRFT/RIGHT FLAG_^1_%LDQ* WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#END OF BUFFER - ERROR_^1_%JMP* (GET)_(RETURN_^1OFLOW ENA 0_^1_%JMP- 40,I_)TO PRINT DIAGNOSTIC_^1*_]_^1SPRE_!JMP* OFLOW_(*******HOOK FOR SINGLE PRECISION INPUT_^1DPRE_!JMP* OFLOW_(*****€0**HOOK FOR DOUBLE PRECISION INPUT_^1_%END_]_^__0PRESUM1 CSY/ H36 P€1_%NAM RESUM1_'DECK-ID H36 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM PROCESSES *END STATEMENTS FOR BREAKPOINT._^1* NORMAL EXIT FROM THIS PROGRAM IS €€TO THE USER._^1*_]_^1NBTS_!EQU NBTS(15)_$MAXIMUM NUMBER OF BREAKPOINTS_^1*_]_^1RESUME NUM 0_^1_%STA- I_,SAVE TABLE BASE_^1_%STA* BASE_^1_%ENQ 56+2*NBTS_^1_%LDA- ($22),B_%CHECK FOR 1ST ENTRY (FROM MONITOR)_^1_%SAZ RESME-*-1_#SKIP IF NOT 1ST TIME_^1_%STA* RET+1_(SET JUMP TO USER PROGRAM_^1_%CLR A_^1_%STA- ($22),B_%CLEAR 1ST PASS FLAG_^1RET_"JMP+ 0_,TO USER PROGRAM_^1*_]_^1RESME €€ LDA- 54,I_)GET BREAKPOINT LOCATION_^1_%STA* LOC_^1_%INA 1_^1_%STA* LOC1_^1_%INA 1_^1_%STA* LOC2_^1_%LDA- NBTS+55,I_#GET INSTRUCTION AT BREAKPOINT (SAVED)_^1_%STA* INSTR_^1_%CLR Q_^1_%LLS 4_^1_%STQ* INSTN_^1_%SQN RESME3-*-1_^1_%JMP* SRRI_)SKIP OR REGISTER REFERENCE INSTR._^1*_]_^1RESME3 ENQ 0_,BREAK INSTR. INTO MODE AND DELTA_^1_%LLS 4_^1_%STQ* MODE_^1_%ENQ 0_^1_%LLS 8_^1_€€%STQ* DELT_^1_%LDA* MODE_)CHECK MODE TYPE_^1_%INA -8_^1_%SAP RESM05-*-1_^1_%JMP* RESMEA_^1RESM05 INA -4_^1_%SAP RESME4-*-1_^1_%JMP* RESMED_^1RESME4 LDA* INSTR_(INDIRECT RELATIVE MODE_^1_%AND =N$F300_%MAKE TWO WORD RELATIVE ABSOLUTE_^1_%ADD- $2D_^1_%STA- I_^1_%LDA* DELT_)CHECK IF ONE OR TWO WORD_^1_%SAN RESME5-*-1_^1_%LDQ* (LOC1)_'TWO WORDS_^1_%ADQ* LOC1_^1_%ADQ- $32_^1_%LDA* €€LOC2_^1_%JMP* RETURN_^1*_]_^1RESME5 LDQ* DELT_)ONE WORD INDIRECT RELATIVE_^1_%QLS 8_,MAKE 2 WORD ABSOLUTE_^1_%QRS 8_^1_%ADQ* LOC_^1_%ADQ- $32_^1_%LDA* LOC1_^1_%JMP* RETURN_^1*_]_^1RESMEA LDA* DELT_)ABSOLUTE AND INDIRECT ABSOLUTE_^1_%SAN RESMEB-*-1_^1_%LDA* INSTR_(2 WORD COMMAND_^1_%STA- I_^1_%LDQ* (LOC1)_^1_%LDA* LOC2_)LOC. OF NEXT INSTRUCTION_^1_%JMP* RETURN_^1*_]_^1RESMEB LDA*€€ MODE_)1 WORD COMMAND_^1_%INA -4_^1_%SAM RESMEC-*-1_^1_%LDQ* DELT_)1 WORD INDIRECT ABSOLUTE_^1_%ADQ- $32_*SET SIGN_^1_%JMP* RESMEZ_^1RESMEC LDQ* DELT_)1 WORD ABSOLUTE_^1RESMEZ LDA* INSTR_(MAKE INTO 2 WORD DIRECT ABSOLUTE_^1_%AND =N$F300_^1_%ADD- $2D_*SET INDIRECT BIT_^1_%STA- I_^1_%LDA* LOC1_)LOC. OF NEST INSTRUCTION_^1_%JMP* RETURN_^1*_]_^1RESMED LDA* INSTR_(DIRECT RELATIVE_^1_€€%AND =N$F300_%MAKE 2 WORD ABS COMMAND_^1_%ADD- $2D_^1_%STA- I_^1_%LDA* DELT_)CHECK IF 1 OR 2 WORDS_^1_%SAN RESME9-*-1_^1_%LDQ* (LOC1)_'2 WORDS_^1_%ADQ* LOC1_^1_%LDA* LOC2_^1_%JMP* RETURN_^1*_]_^1RESME9 JMP* RESMEE_^1_%EJT_]_^1*_]_^1***********************************************************_^1*_+CONSTANTS_^1*_]_^1LOC_"NUM 0_,LOCATION OF INSTRUCTION_^1LOC1_!NUM 0_,1 WORD LOC. FO€€LLOWING INSTR._^1LOC2_!NUM 0_,2 WORD LOC. FOLLOWING INSTR._^1INSTR NUM 0_,INSTRUCTION AT LOC_^1INSTN NUM 0_,1ST 4 BITS OF INSTRUCTION_^1MODE_!NUM 0_,MODE OF OPERATION_^1DELT_!NUM 0_,DELTA_^1NOP_"NOP_]_^1REGQ_!NUM 0_,Q REGISTER SAVED_^1REGA_!NUM 0_,A REGISTER SAVED_^1REGI_!NUM 0_,I REGISTER SAVED_^1BASE_!BSS BASE(1)_%BRKPTD TABLES BASE ADDRESS_^1*_]_^1********************€€***************************************_^1*_]_^1RESMEE LDQ* DELT_)1 WORD DIRECT RELATIVE_^1_%QLS 8_,MAKE 2 WORD ABS. COMMAND_^1_%QRS 8_^1_%ADQ* LOC_^1_%LDA* LOC1_^1_%JMP* RETURN_^1*_]_^1SRRI_!CLR Q_,SKIP OR REGISTER REF. INSTRUCTION_^1_%LLS 4_^1_%SQN SRRI1-*-1_^1SRRI0 LDA* NOP_*GET NOP INSTRUCTION_^1_%STA* INST1_^1_%LDA* INSTR_^1_%STA* INST2_^1_%LDA* LOC1_^1_%STA* RL_^1_%JMP*€€ RETRN_^1*_]_^1SRRI1 INQ -1_^1_%SQZ SRRI2-*-1_^1_%JMP* SRRI0_(NOT A SKIP INSTRUCTION_^1SRRI2 CLR Q_,SKIP INSTRUCTION_^1_%ALS 4_^1_%LLS 4_^1_%ADQ* LOC1_^1_%STQ* RLSKP_^1_%LDA* NOP_^1_%STA* INST1_^1_%LDA* INSTR_^1_%AND- $16_^1_%INA 2_^1_%STA* INST2_^1_%LDA* LOC1_^1_%STA* RL_^1_%JMP* RETRN_^1*_]_^1RETURN STA* RL_+A CONTAINS RETURN LOCATION_^1_%STQ* INST2_(Q CONTAINS 2ND WORD O€€F INSTRUCTION_^1_%LDA- I_,I CONTAINS 1ST WORD OF INSTRUCTION_^1_%STA* INST1_^1*_]_^1RETRN ENQ 2_,GO GET SAVED REGISTERS_^1_%LDA* (BASE),Q_^1_%STA* REGQ,Q_^1_%INQ -1_^1_%SQM RETR05-*-1_^1_%JMP* RETRN+1_^1RETR05 LDA* INSTN_^1_%INA -5_+CHECK FOR RTJ_^1_%SAN RETRN1-*-1_^1_%JMP* RTJUMP_^1*_]_^1RETRN1 LDA* REGI_)RETURN REGISTERS_^1_%STA- I_^1_%LDQ* REGQ_^1_%LDA* REGA_^1*_]_^1INST1 €€ NOP 0_,1ST WORD OF INSTRUCTION_^1INST2 NOP 0_,2ND WORD OF INSTRUCTION_^1_%NUM $1400_(JUMP_^1RL_#NUM 0_,NEXT LOC. FOLLOWING INSTRUCTION_^1_%NUM $1400_(JUMP_^1RLSKP NUM 0_,SKIP LOCATION_^1*_]_^1RTJUMP LDA* INST1_(RETURN JUMP INSTRUCTION_^1_%ARS 8_^1_%AND- 6_^1_%LDQ- $E9_*CHECK MODE SWITCH_^1_%LDQ- ($22),Q_^1_%SQZ IS32K-*-1_^1_%LDQ* INST2_^1_%JMP* CHECK4_^1IS32K LDQ* INST2€€_(LOCATION_^1_%SQP CHECK4-*-1_"CHECK IF INDIRECT_^1_%LDQ- ($22),Q_^1_%JMP* *-2_^1CHECK4 INA -4_^1_%SAP CHECK5-*-1_^1_%INA 5_^1CHECK5 SAZ OVER-*-1_^1_%INA -1_^1_%SAZ X-*-1_^1_%INA -1_^1_%SAZ Q-*-1_^1_%ADQ* REGQ_)ADD Q REGISTER_^1X_$ADQ* REGI_)ADD I REGISTER_^1OVER_!STQ* RETJMP+1_^1_%JMP* NEXT_^1Q_$ADQ* REGQ_^1_%JMP* OVER_^1*_]_^1NEXT_!LDA* RL_^1_%STA- ($22),Q_^1_%RAO* RETJM€hP+1_^1_%LDA* REGI_)RETURN REGISTERS_^1_%STA- I_^1_%LDA* REGA_^1_%LDQ* REGQ_^1RETJMP JMP+ 0_^1_%END_]_^__hPPRTRE1 CSY/ H37 P€1_%NAM PRTRE1_'DECK-ID H37 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM PRINTS THE CONTENTS OF P, A, Q, I, AND M_^1* AT THE CURRENT BREAKPOINT_^1*_]_^1P€€RTREG NUM 0_^1_%STA* HOLD_)SAVE TABLE AREA ADDRESS_^1_%LDQ* (HOLD)_'GET USER Q_^1_%RTJ* CONVRT_'CONVERT TO ASCII_^1_%STA* QBUF+1_'STORE FOR OUTPUT_^1_%STQ* QBUF_^1_%RAO* HOLD_)SET UP FOR NEXT USER REGISTER_^1_%LDQ* (HOLD)_'GET USER A_^1_%RTJ* CONVRT_'CONVERT TO ASCII_^1_%STA* ABUF+1_'STORE FOR OUT PUT_^1_%STQ* ABUF_^1_%RAO* HOLD_)SET UP FOR NEXT REGISTER_^1_%LDQ* (HOLD)_'GET USER €€I_^1_%RTJ* CONVRT_^1_%STA* IBUF+1_'STORE FOR OUTPUT_^1_%STQ* IBUF_^1_%RAO* HOLD_)SET UP FOR NEXT REGISTER_^1_%LDQ* (HOLD)_'GET M CONTENTS_^1_%RTJ* CONVRT_'CONVERT TO ASCII_^1_%STA* MBUF+1_'STORE FOR OUTPUT_^1_%STQ* MBUF_^1_%ENQ 4_^1_%LDQ* (HOLD),Q_$GET P CONTENTS_^1_%RTJ* CONVRT_'CONVERT TO ASCII_^1_%STA* PBUF+1_'STORE FOR OUTPUT_^1_%STQ* PBUF_^1*_]_^1_%RTJ* PRT1_)COMPUTE BUFFER L€€OCATION_^1PRT1_!NUM 0_^1_%LDA* PRT1_^1_%INA BUF-PRT1_^1_%STA* PRTS_)STORE ADDRESS FOR OUTPUT_^1_%ENQ 2_^1_%LDA* (HOLD),Q_$GET OUTPUT UNIT_^1_%STA* LU_+STORE IN REQUEST_^1*_]_^1_%RTJ- ($F4)_(WRITE THE MESS OUT_^1THUD_!NUM $4C00,0,0_^1LU_#NUM 0,23_^1PRTS_!NUM 0_^1*_]_^1PRT5_!LDA* THUD+2_^1_%SAZ PRT6-*-1_$SKIP WHEN OUTPUT COMPLETE_^1_%JMP* PRT5_)WAIT SOME MORE_^1PRT6_!JMP* (PRT€€REG)_$RETURN_^1*_]_^1_%EJT_]_^1* THE FOLLOWING CONVERTS A WORD TO 4 HEX DIGITS IN_^1* A AND Q. MOST SIGNIFICANT DIGITS IN Q. NUMBER IN Q ON ENTRY._^1*_]_^1CONVRT NUM 0_^1_%RTJ* CON7_)GET 2 CHARACTERS_^1_%STA* TEMP+1_'SAVE THEM TEMPORARILY_^1_%RTJ* CON7_)2 MORE_^1_%LDQ* TEMP+1_^1_%JMP* (CONVRT)_$RETURN_^1*_]_^1CON10 NUM 0_^1_%CLR A_^1_%LLS 4_,SHIFT 1 HEX DIGIT INTO A_^1_%INA €€-$A_^1_%SAM CON11-*-1_#SKIP IF DIGIT LESS THAN A_^1_%INA 7_^1CON11 INA $3A_^1_%JMP* (CON10)_%RETURN WITH CONVERTED DIGIT IN A_^1*_]_^1CON7_!NUM 0_^1_%RTJ* CON10_(CONVERT 1 DIGIT_^1_%ALS 8_-PACK LEFT DIGIT_^1_%STA* TEMP_^1_%RTJ* CON10_(CONVERT RIGHT DIGIT_^1_%EOR* TEMP_)PACK IT_^1_%JMP* (CON7)_'RETURN_^1*_]_^1* OUTPUT AREA_^1*_]_^1BUF_"ALF 1,P=_^1PBUF_!NUM 0,0_^1_%ALF 3,_"A€ΰ=_^1ABUF_!NUM 0,0_^1_%ALF 3,_"Q=_^1QBUF_!NUM 0,0_^1_%ALF 3,_"I=_^1IBUF_!NUM 0,0_^1_%ALF 3,_"M=_^1MBUF_!NUM 0,0_^1*_]_^1HOLD_!BSS HOLD(1)_%BREAKPOINT TABLE AREA BASE ADDRESS_^1TEMP_!BSS TEMP(1)_%SCRATCH_^1_%END_]_^__ΰPSETAQ1 CSY/ H38 P€1_%NAM SETAQ1_'DECK-ID H38 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM PROCESSES *SAH, *SQH, AND *SIH FOR BREAKPOINT._^1* THE ADDRESS OF THE BREAKPOINT€€ TABLES IS IN A ON ENTRY._^1* THIS PROGRAM MOVES CORRECT INPUT DATA TO QX, AX, OR IX IN BRKPTD._^1*_]_^1SETAQI NUM 0_^1_%INA 12_^1_%STA- I_,LOCATION OF INPUT BUFFER_^1_%ENA 2_,WORD INDEX TO 5TH CHARACTER_^1_%STA* WDIX_^1_%CLR A_^1_%STA* CHAR_)SET CHARACTER FLAG FOR LEFT_^1*_]_^1_%RTJ* GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ SET1-*-1_$SKIP IF A COMMA_^1SET05 ENA 0_^1_%JMP- 4€€0,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1SET1_!RTJ* HEX_*CONVERT BASE VALUE OF INPUT DATA_^1_%STA* BASE_^1_%RTJ* GET_*GET DELIMITOR_^1_%INA -$2B_^1_%SAZ SET2-*-1_$SKIP IF A PLUS_^1_%INA $B_+IS IT A BLANK_^1_%SAN TRYFF_^1_%JMP* SET3_^1TRYFF SUB =N$DF_(IS IT A FF_^1_%SAZ SET3-*-1_$SKIP IF STATEMENT END_^1_%JMP* SET05_(FORMAT ERROR - BACK TO BRKPTD_^1SET2_!RTJ* HEX_*CONVER€€T INCREMENT_^1_%ADD* BASE_^1_%STA* BASE_)INCREMENT ADDED TO BASE VALUE_^1SET3_!LDA- 1,I_*GET WORD WITH 3RD CHARACTER_^1_%AND- $1A_*UNPACK IT_^1_%SUB =N$4900_^1_%CLR Q_^1_%SAZ SET35-*-1_#SKIP IF I TO BE CHANGED_^1_%SAP SET5-*-1_$SKIP IF Q TO BE CHANGED_^1_%SAM SET4-*-1_$SKIP IF A TO BE CHANGED_^1SET35 INQ 1_,Q TO BE CHANGED_^1SET4_!INQ 1_^1SET5_!LDA* BASE_)Q HAS INDEX TO QX,€€ AX, OR IX_^1_%INQ -12_^1_%STA- ($22),B_%STORE NEW VALUE IN REGISTER STORAGE_^1_%JMP* (SETAQI)_$DONE_^1*_]_^1WDIX_!BSS WDIX(1)_%WORD INDEX TO INPUT BUFFER_^1CHAR_!BSS CHAR(1)_%CHARACTER FLAG 0=LEFT 1=RIGHT_^1BASE_!BSS BASE(1)_%STORAGE FOR NEW VALUE_^1NUM_"BSS NUM(3)_'SCRATCH_^1*_]_^1* THE FOLLOWING BACKS UP THE STATEMENT SCAN BY ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%LDA* C€€HAR_^1_%SAN BACK1-*-1_#SKIP ON CHAR = RIGHT_^1_%RAO* CHAR_^1_%LDA* WDIX_^1_%INA -1_^1_%STA* WDIX_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_%STA* CHAR_)SET CHAR TO LEFT_^1_%JMP* (BACK)_^1*_]_^1* THIS SUBROUTINE UNPACKS ONE CHARACTER FROM THE INPUT BUFFER_^1* AND RETURNS IT IN A._^1*_]_^1GET_"NUM 0_^1_%LDA* (WDIX),I_$GET CHARACTER WORD_^1_%LDQ* CHAR_)CHARACTER FLAG 0=LEFT 1=RIGHT_^1_%S€€QN GET1-*-1_$SKIP ON RIGHT CHARACTER_^1_%ALS 8_^1GET1_!AND- $A_+UNPACK IT_^1_%SQZ GET2-*-1_$SKIP ON LEFT_^1_%CLR Q_^1_%STQ* CHAR_)UPDATE CHARACTER FLAG_^1_%RAO* WDIX_)UPDATE WORD INDEX_^1_%JMP* (GET)_(RETURN_^1GET2_!RAO* CHAR_)UPDATE CHARACTER FLAG_^1_%LDQ* WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#SKIP ON INPUT BUFFER END - ERROR_^1_%JMP* (GET)_(RETURN_^1OFLOW€€ JMP* SET05_^1*_]_^1* THIS ROUTINE CONVERTS A HEX (ASCII) FIELD TO BINARY._^1*_]_^1HEX_"NUM 0_^1_%CLR A_^1_%STA* NUM_*INITIALIZE CONVERTED VALUE_^1_%ENA -5_^1_%STA* NUM+1_(INITIALIZE DIGIT COUNT_^1*_]_^1HEX3_!RTJ* GET_*GET A CHARACTER_^1_%INA -$30_)UNDER $30 CHECK_^1_%SAP HEX4-*-1_$SKIP ON NUMERIC - MAYBE_^1_%JMP* HEX10_(NOT NUMERIC_^1HEX4_!TRA Q_^1_%INQ -$A_^1_%SQM HEX405€€-*-1_"SKIP ON DIGIT 0 THRU 9_^1_%INA -7_^1_%INQ -7_^1_%SQM HEX10-*-1_#SKIP IF NON-NUMERIC_^1_%INQ -6_+UNDER $47 CHECK_^1_%SQP HEX10-*-1_#SKIP IF NON-NUMERIC_^1HEX405 LDQ* NUM_*CONVERTED DIGIT IN A_^1_%QLS 4_^1_%EAQ A_^1_%STA* NUM_*PACKED DIGIT IS STORED_^1_%RAO* NUM+1_^1_%LDA* NUM+1_^1_%SAN HEX5-*-1_$SKIP IF 4 OR LESS DIGITS_^1_%JMP* SET05_(FORMAT ERROR - BACK TO CONTROL PR€|OGRAM_^1HEX5_!JMP* HEX3_)CONTINUE_^1HEX10 RTJ* BACK_)BACK UP SCAN BY ONE_^1_%LDA* NUM_^1_%JMP* (HEX)_(RETURN_^1_%END_]_^__|PCORDM1 CSY/ H39 P€1_%NAM CORDM1_'DECK-ID H39 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM PROCESSES ALL CORE DUMP REQUESTS FOR BREAKPOINT._^1* CORE LOCATION OF QX, IN BRK€€PTD, IS IN A ON ENTRY._^1*_]_^1COR_"NUM 0_^1_%INA 12_^1_%STA- I_,INPUT BUFFER ADDRESS_^1_%CLR A_^1_%STA* CHAR_)SET FOR LEFT CHARACTER_^1_%ENA 2_^1_%STA* WDIX_)SET FOR 5TH CHARACTER_^1*_]_^1_%LDA- 1,I_*GET 2ND BUFFER WORD_^1_%AND- $1A_*UNPACK LEFT CHARACTER (3RD)_^1_%ALS 8_^1_%STA* TYPE_)WILL TELL DUMP TYPE LATER_^1_%ENQ -7_^1_%LDA- ($22),B_%GET OUTPUT UNIT_^1_%STA LU_+SET OU€€TPUT UNIT_^1*_]_^1_%ENQ 20_^1COR03 LDA DMPTAB,Q_$SEARCH DATA TABLE FOR DUMP TYPE_^1_%SUB* TYPE_^1_%SAZ COR04-*-1_#SKIP IF RIGHT ONE FOUND_^1_%INQ -5_^1_%JMP* COR03_(LOOK SOME MORE_^1*_]_^1COR04 LDA DMPTAB+1,Q_^1_%STA* INCREM_'SET NUMBER OF WORDS PER VALUE_^1_%LDA DMPTAB+2,Q_^1_%STA* VPL_*SET NUMBER OF VALUES PER LINE_^1_%LDA DMPTAB+3,Q_^1_%STA* CONVRT_'SET INDEX TO CONVERS€€ION ROUTINE_^1_%LDA DMPTAB+4,Q_^1_%STA* DBUF_)SET NUMBER OF POSITIONS PER DUMP FIELD_^1*_]_^1_%RTJ GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ COR1-*-1_$SKIP IF A COMMA_^1_%ENA 2_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO BRKPTD_^1*_]_^1COR1_!RTJ HEX_*GET START_^1_%STA* START_(STORE FOR DUMP START_^1_%RTJ GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ COR2-*-1_$SKIP IF A COMMA_^1COR15 LD€€A* FSTRT_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO BRKPTD_^1*_]_^1COR2_!RTJ HEX_*GET DUMP END_^1_%STA* END_*STORE FOR DUMP_^1_%RTJ GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ COR3-*-1_$SKIP IF A COMMA_^1_%INA $C_+IS IT A BLANK_^1_%SAN TRYFF_^1_%JMP* COR35_^1TRYFF SUB =N$DF_(IS IT A FF_^1_%SAZ COR35-*-1_#SKIP ON STATEMENT END - NO BASE ADDRESS_^1_%JMP* COR15_(FORMAT ERROR - BACK TO€€ BRKPTD_^1*_]_^1COR3_!RTJ HEX_*GET BASE_^1_%ADD* START_^1_%STA* START_(BASE ADDED TO START OF DUMP_^1_%LDA* END_^1_%ADD* NUM_^1_%STA* END_*BASE ADDED TO END OF DUMP_^1COR35 LDA* END_^1_%SUB* START_^1_%SAP COR4-*-1_$SKIP IF END NOT LESS THAN START_^1_%ENA 0_^1_%JMP- 40,I_)BAD INPUT_^1*_]_^1COR4_!RTJ* *+1_^1_%NUM 0_^1_%LDA* *-1_^1_%ADD =XOUTBUF-COR4-1_^1_%STA ESS_*STARTING ADD€€RESS FOR OUTPUT BUFFER_^1*_]_^1COR5_!ENQ 35_^1COR6_!LDA =N$2020_%BLANKS_^1_%STA* OUTBUF,Q_$BLANK OUT BUFFER_^1_%INQ -1_^1_%SQM COR8-*-1_$SKIP WHEN DONE_^1_%JMP* COR6_^1*_]_^1COR8_!CLR A_^1_%STA OBIX_)INITIALIZE BUFFER INDEX_^1_%STA* CV_+INITIALIZE CURRENT VALUES PER LINE_^1_%LDA* START_^1_%RTJ HEXM_)CONVERT AND PUT LINE START ADDR. IN BUFFER_^1_%ENA 5_^1_%STA* OBIX_)SET BUF€€FER INDEX FOR 1ST VALUE_^1*_]_^1*_]_^1COR10 LDQ* CONVRT_^1_%RTJ* CONTBL,Q_$CONVERT AND STORE A VALUE IN BUFFER_^1_%LDA* OBIX_^1_%ADD* DBUF_^1_%STA* OBIX_^1*_]_^1_%LDA* START_^1_%ADD* INCREM_^1_%STA* START_(SET FOR NEXT VALUE_^1_%LDA* END_^1_%SUB* START_^1_%SAP COR10A_'SKIP IF NOT DONE_^1_%RTJ* WRITE_(EMPTY THE BUFFER_^1_%JMP* (COR)_(DONE_^1COR10A RAO* CV_+ADD 1 TO CURRENT NO. OF €€VALUES ON THE LINE_^1_%LDA* CV_^1_%SUB* VPL_^1_%SAN COR11-*-1_#SKIP IF MORE NEEDED ON THIS LINE_^1_%RTJ* WRITE_(EMPTY LINE BUFFER_^1_%JMP* COR5_)PREPARE FOR NEXT LINE_^1*_]_^1COR11 JMP* COR10_^1*_]_^1****************************************************_^1*_]_^1WDIX_!BSS WDIX(1)_%WORD INDEX TO INPUT BUFFER_^1CHAR_!BSS CHAR(1)_%CHARACTER FLAG 0=LEFT 1=RIGHT_^1TYPE_!BSS TYPE(1)€€_%FORMAT TYPE (CHARACTER FROM COMMAND)_^1START BSS START(1)_$STARTING ADDRESS FOR DUMP (INCREMENTED)_^1END_"BSS END(1)_'ENDING ADDRESS FOR DUMP_^1NUM_"BSS NUM(5)_'SCRATCH_^1VPL_"BSS VPL(1)_'NUMBER OF VALUES PER LINE_^1INCREM BSS INCREM(1)_#INCREMENT BETWEEN CORE VALUES_^1CONVRT BSS CONVRT(1)_#INDEX TO CONVERSION ROUTINE ENTRY_^1CV_#BSS CV(1)_(CURRENT NUMBER OF VALUES ON THE€€ LINE_^1DBUF_!BSS DBUF(1)_%NUMBER OF POSITIONS PER FIELD_^1FSTRT BSS FSTRT(1)_$FIELD START INDEX_^1*_]_^1OUTBUF BSS OUTBUF(36)_"OUTPUT BUFFER_^1_%EJT_]_^1*_]_^1* THE FOLLOWING TABLE CONTAINS DATA FOR EACH TYPE OF DUMP._^1* EACH ENTRY CONSISTS OF 5 WORDS AS FOLLOWS,_^1*_]_^1*_'WORD 1_"ASCII CHARACTER FROM COMMAND_^1*_'WORD 2_"NO. OF WORDS FOR EACH VALUE TO BE DUMPED_^1*_'WORD 3_€€"NUMBER OF VALUES ON EACH LINE OF THE DUMP_^1*_'WORD 4_"INDEX TO A CONVERSION ROUTINE_^1*_'WORD 5_"NUMBER OF BUFFER WORDS PER FIELD_^1*_]_^1DMPTAB NUM $41,1,8,0,2_!A_!ASCII_^1_%NUM $50,1,8,4,4_!P_!HEX_^1_%NUM $44,3,2,8,13 D_!DOUBLE PRECISION_^1_%NUM $49,1,8,12,4 I_!DECIMAL_^1_%NUM $53,2,2,16,13 S_!SINGLE PRECISION_^1*_]_^1* FOLLOWING ARE THE JUMPS TO CONVERSION ROUTINES INDE€€XED VIA DMPTAB_^1*_]_^1CONTBL NUM 0_^1_%RTJ ASCII_(ASCII CONVERSION_^1_%JMP* (*-3)_^1_%NUM 0_^1_%RTJ HEXO_)HEX CONVERSION_^1_%JMP* (*-3)_^1_%NUM 0_^1_%RTJ DP_+DOUBLE PRECISION_^1_%JMP* (*-3)_^1_%NUM 0_^1_%RTJ DECI_)DECIMAL CONVERSION_^1_%JMP* (*-3)_^1_%NUM 0_^1_%RTJ SP_+SINGLE PRECISION_^1_%JMP* (*-3)_^1*_]_^1* THE FOLLOWING ROUTINE WRITES THE OUTPUT BUFFER OUT._^1*_]_^1W€€RITE NUM 0_^1_%LDA* OBIX_^1_%INA -1_^1_%STA* OBIX_^1_%RTJ- ($F4)_(EMPTY THE BUFFER_^1_%NUM $4C00,0,0_^1LU_#NUM 0_^1OBIX_!NUM 0_^1ESS_"NUM 0_^1*_]_^1WRITE1 LDA* LU-1_)THREAD TO A_^1_%SAZ WRITE2-*-1_"SKIP WHEN OUTPUT DONE_^1_%JMP* WRITE1_'WAIT_^1WRITE2 JMP* (WRITE)_%DONE_^1*_]_^1* THIS ROUTINE MOVES DATA FROM MEMORY TO THE OUTPUT BUFFER._^1* THIS IS THE SO-CALLED ASCII CONVER€€SION WHICH REQUIRES NO WORK._^1*_]_^1ASCII NUM 0_^1_%LDA* (START)_%GET A DATA WORD_^1_%LDQ* OBIX_)INDEX TO CURRENT BUFFER POSITION_^1_%STA* OUTBUF,Q_$STORE IN BUFFER_^1_%JMP* (ASCII)_%THATS ALL THERE IS TO IT_^1*_]_^1* THIS ROUTINE CONVERTS ONE VALUE TO FOUR_^1* ASCII HEX VALUES AND STORES THEM IN THE OUTPUT BUFFER._^1*_]_^1HEXO_!NUM 0_^1_%LDA* (START)_%GET A VALUE_^1HEXM1 ENQ €€ 1_^1_%STQ* NUM_*LOOP INITIALIZER_^1HEXO1 CLR Q_^1_%LLS 4_,GET 1 HEX DIGIT_^1_%LDQ* HEXCON,Q_$LOOK UP ASCII_^1_%QLS 8_^1_%STQ* NUM+1_(PACK IT_^1_%CLR Q_^1_%LLS 4_,GET NEXT HEX DIGIT_^1_%LDQ* HEXCON,Q_$LOOK UP ASCII_^1_%ADQ* NUM+1_^1_%STQ* NUM+1_(PACK WITH OTHER_^1_%LDQ* NUM_^1_%INQ -1_^1_%SQM HEXO2-*-1_#SKIP IF 4 DIGITS CONVERTED_^1_%STQ NUM_^1_%LDQ NUM+1_^1_%STQ NUM+2_(€€MOVW_^1_%STQ NUM+2_(MOVE CONVERTED PAIR TO SAFETY_^1_%JMP* HEXO1_(CONTINUE_^1*_]_^1HEXO2 LDA NUM+2_(GET MOST SIGNIFICANT PAIR_^1_%LDQ* OBIX_)BUFFER INDEX_^1_%STA OUTBUF,Q_$STORE IN BUFFER_^1_%LDA NUM+1_(LEAST SIGNIFICANT PAIR_^1_%STA OUTBUF+1,Q_"STORE THOSE IN BUFFER TOO_^1_%JMP* (HEXO)_'ALL DONE_^1*_]_^1HEXM_!NUM 0_-SPECIAL ENTRY FOR LINE START ETC._^1_%LDQ* HEXM_^1_%STQ* H€€EXO_)SET FOR NORMAL HEXO EXIT_^1_%JMP* HEXM1_^1*_]_^1* HEX-ASCII CONVERSION TABLE_^1* HEX TABLE LOOK-UP GIVES ASCII VALUE_^1*_]_^1HEXCON NUM $30,$31,$32,$33,$34,$35,$36,$37,$38,$39_^1_%NUM $41,$42,$43,$44,$45,$46_^1*_]_^1* THIS ROUTINE CONVERTS ONE VALUE TO FIVE ASCII_^1* DECIMAL DIGITS AND STORES THEM WITH SIGN IN THE OUTPUT BUFFER._^1*_]_^1DECI_!NUM 0_^1_%LDA (START)_%GET A V€€ALUE_^1_%LDQ =N$2030_%SET FOR BLANK (PLUS)_^1_%SAP DECI1-*-1_#SKIP IF NUMBER IS POSITIVE_^1_%LDQ =N$2D30_%MINUS_^1_%TCA A_,SET VALUE POSITIVE FOR PROCESSING_^1DECI1 STQ* DECNUM_'STORE MINUS SIGN OR BLANK_^1_%LDQ =N$3030_^1_%STQ* DECNUM+1_$SET ALL DIGITS TO ZERO_^1_%STQ* DECNUM+2_^1_%CLR Q_^1_%DVI =N10000_^1_%ADD* DECNUM_^1_%STA* DECNUM_'NUMBER OF TEN THOUSANDS IS PACKED_^1_€€%TRQ A_^1_%CLR Q_^1_%DVI =N1000_^1_%ADD* DECNUM+1_^1_%ALS 8_^1_%STA* DECNUM+1_$NUMBER OF THOUSANDS IS PACKED_^1_%TRQ A_^1_%CLR Q_^1_%DVI =N100_^1_%ADD* DECNUM+1_^1_%STA* DECNUM+1_$NUMBER OF HUNDREDS IS PACKED_^1_%TRQ A_^1_%CLR Q_^1_%DVI =N10_^1_%ADD* DECNUM+2_^1_%ALS 8_,NUMBER OF TENS PACKED_^1_%AAQ A_,NUMBER OF ONES PACKED_^1_%STA* DECNUM+2_^1*_]_^1_%LDQ OBIX_)BUFFER €€INDEX_^1_%STQ- I_^1_%ENQ 2_^1DECI2 LDA DECNUM,Q_$STORE RESULTS IN OUTPUT BUFFER_^1_%STA OUTBUF,B_^1_%INQ -1_^1_%SQM DECI3-*-1_#SKIP WHEN TRANSFER COMPLETE_^1_%JMP* DECI2_(CONTINUE_^1DECI3 JMP* (DECI)_'ALL DONE_^1*_]_^1DECNUM BSS DECNUM(3)_#SCRATCH FOR DECI_^1*_]_^1* THIS ROUTINE CONVERTS A HEX (ASCII) FIELD TO BINARY._^1*_]_^1HEX_"NUM 0_^1_%LDA WDIX_^1_%STA FSTRT_^1_%CLR€€ A_^1_%STA* DECNUM_'INITIALIZE CONVERTED VALUE_^1_%ENA -5_^1_%STA* DECNUM+1_$INITIALIZE DIGIT COUNT_^1*_]_^1HEX3_!RTJ* GET_*GET A CHARACTER_^1_%INA -$30_)UNDER $30 CHECK_^1_%SAP HEX4-*-1_$SKIP ON NUMERIC - MAYBE_^1_%JMP* HEX10_(NOT NUMERIC_^1HEX4_!TRA Q_^1_%INQ -$A_^1_%SQM HEX405-*-1_"SKIP ON DIGIT 0 THRU 9_^1_%INA -7_^1_%INQ -7_^1_%SQM HEX10-*-1_#SKIP IF NON-NUMERIC_^1_%€€INQ -6_+UNDER $47 CHECK_^1_%SQP HEX10-*-1_#SKIP IF NON-NUMERIC_^1HEX405 LDQ* DECNUM_'CONVERTED DIGIT IN A_^1_%QLS 4_^1_%EAQ A_^1_%STA* DECNUM_'PACKED DIGIT IS STORED_^1_%RAO* DECNUM+1_^1_%LDA* DECNUM+1_^1_%SAN HEX5-*-1_$SKIP IF 4 OR LESS DIGITS_^1_%LDA FSTRT_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1HEX5_!JMP* HEX3_)CONTINUE_^1HEX10 RTJ* BACK_)BACK UP SCAN BY O€€NE_^1_%LDA* DECNUM_^1_%STA NUM_*STORE FOR USERS OF NUM_^1_%JMP* (HEX)_(RETURN_^1*_]_^1* THE FOLLOWING BACKS UP THE STATEMENT SCAN BY ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%LDA CHAR_^1_%SAN BACK1-*-1_#SKIP ON CHARACTER = RIGHT_^1_%RAO CHAR_^1_%LDA WDIX_^1_%INA -1_^1_%STA WDIX_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_%STA CHAR_)SET TO LEFT CHARACTER_^1_%JMP* (BACK)_^1*_]_^1* THIS€€ SUBROUTINE UNPACKS ONE CHARACTER FROM THE INPUT BUFFER_^1* AND RETURNS IT IN A._^1*_]_^1GET_"NUM 0_^1_%LDA (WDIX),I_$GET CHARACTER WORD_^1_%LDQ CHAR_)CHARACTER FLAG 0=LEFT_!1=RIGHT_^1_%SQN GET1-*-1_$SKIP ON RIGHT CHARACTER_^1_%ALS 8_^1GET1_!AND- $A_+UNPACK CHARACTER_^1_%SQZ GET2-*-1_$SKIP ON LEFT_^1_%CLR Q_^1_%STQ CHAR_)UPDATE CHARACTER FLAG_^1_%RAO WDIX_)UPDATE WORD IND€lEX_^1_%JMP* (GET)_(RETURN_^1GET2_!RAO CHAR_)UPDATE CHARACTER FLAG_^1_%LDQ WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#SKIP ON INPUT BUFFER END - ERROR_^1_%JMP* (GET)_^1OFLOW ENA 0_^1_%JMP- 40,I_)BACK TO BRKPTD_^1*_]_^1DP_#JMP* OFLOW_(*******HOOK FOR DOUBLE PRECISION OUTPUT_^1SP_#JMP* OFLOW_(*******HOOK FOR SINGLE PRECISION OUTPUT_^1_%END_]_^__lPJUMPR1 CSY/ H40 P€1_%NAM JUMPR1_'DECK-ID H40 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* PROCESSES JUMP AND RETURN JUMP COMMANDS FOR BREAKPOINT._^1*_]_^1* ENTERRED WITH THE ADDRESS€€ OF THE BREAKPOINT TABLES IN A._^1*_]_^1JMPRTJ NUM 0_^1_%STA* TADR_)SAVE BREAKPOINT TABLE LOCATION_^1_%INA 12_^1_%STA- I_,BREAKPOINT BUFFER LOCATION_^1_%CLR A_^1_%STA* ADDR+1_'PRESET ADDR FOR CONVERSION_^1_%STA* CHAR_^1_%ENA 2_^1_%STA* WDIX_)SET UP FOR BUFFER SCAN_^1*_]_^1JMP2_!RTJ* HEX_*GET BASE ADDRESS_^1_%STA* ADDR+1_'STORE FOR USE_^1_%RTJ* GET_*GET DELIMITOR_^1_%INA -$2B_^€€1_%SAZ JMP3-*-1_$SKIP IF A PLUS - INCREMENT GIVEN_^1_%INA $B_+IS IT A BLANK_^1_%SAN TRYFF_^1_%JMP* JMP4_^1TRYFF SUB =N$DF_(IS IT A FF_^1_%SAZ JMP4-*-1_$SKIP ON STATEMENT END - NO INCREMENT_^1JMP15 ENA 0_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO BRKPTD_^1JMP3_!RTJ* HEX_*GET AND CONVERT INCREMENT_^1JMP4_!ADD* ADDR+1_^1_%STA* ADDR+1_'ADD INCREMENT TO BASE_^1*_]_^1_%SUB- $F7_^1_%I€€NA -1_^1_%SAP JMP5-*-1_$SKIP IF ADDRESS ABOVE LOWER BOUND_^1JMP45 ENA 0_^1_%JMP- 41,I_)PROTECT ERROR - BACK TO BRKPTD_^1*_]_^1JMP5_!LDA* ADDR+1_^1_%SUB- $F6_^1_%SAM JMP6-*-1_$SKIP IF ADDRESS BELOW LOWER BOUND_^1_%JMP* JMP45_(PROTECT ERROR - BACK TO BRKPTD_^1*_]_^1JMP6_!LDA- 1,I_*GET THIRD CHARACTER FROM BUFFER_^1_%AND- $1A_^1_%SUB =N$5000_^1_%SAZ JMP-*-1_%SKIP ON JMP_^1_%LDA€€ =N$4000_^1JMP_"ADD =N$1400_^1_%STA* ADDR_^1_%CLR A_^1_%STA 74,I_)CLEAR FIRST TIME FLAG_^1_%ENQ 2_^1_%LDA* (TADR),Q_$TO RESET I_^1_%STA- I_^1_%INQ -1_^1_%LDA* (TADR),Q_$TO RESET A_^1_%LDQ* (TADR)_'TO RESET Q_^1ADDR_!NUM 0,0_^1_%JMP* (JMPRTJ)_$RETURN FROM RTJ_^1*_]_^1TADR_!BSS TADR(1)_%TABLE ORIGIN ADDRESS_^1WDIX_!BSS WDIX(1)_%BUFFER WORD INDEX_^1CHAR_!BSS CHAR(1)_%CHARACT€€ER FLAG_!0=LEFT_!1=RIGHT_^1NUM_"BSS NUM(2)_'SCRATCH_^1*_]_^1* THIS SUBROUTINE CONVERTS ASCII-HEX VALUES TO BUNARY._^1*_]_^1HEX_"NUM 0_^1HEX2_!CLR A_^1_%STA* NUM_*INITIALIZE CONVERTED VALUE_^1_%ENA -5_^1_%STA* NUM+1_(DIGIT COUNT INITIALIZED_^1HEX3_!RTJ* GET_*GRT A CHARACTER_^1_%INA -$30_)UNDER $30 CHECK_^1_%SAP HEX4-*-1_$SKIP ON OK NUMBER_^1_%JMP* HEX10_(NON-NUMBER_^1HEX4_!TRA€€ Q_^1_%INQ -$A_^1_%SQM HEX405-*-1_"DIGIT IS 0 THRU 9 AND IN A_^1_%INA -7_^1_%INQ -7_+OVER $40 CHECK_^1_%SQM HEX10-*-1_#SKIP ON NON NUMBER_^1_%INQ -6_+UNDER $47 CHECK_^1_%SQP HEX10-*-1_#SKIP ON NON NUMBER_^1HEX405 LDQ* NUM_*CONVERTED GDIGIT IN A_^1_%QLS 4_^1_%EAQ A_^1_%STA* NUM_*PACKED DIGIT IS STORED_^1_%RAO* NUM+1_^1_%LDA* NUM+1_^1_%SAN HEX5-*-1_$SKIP ON 5 OR LESS DIGIT€€S_^1_%JMP* JMP15_(BAD DATA_^1HEX5_!JMP* HEX3_)CONTINUE_^1*_]_^1HEX10 RTJ* BACK_)BACK SCAN UP ONE_^1_%LDA* NUM_^1_%JMP* (HEX)_(DONE_^1*_]_^1* THIS SUBROUTINE UNPACKS A CHARACTER FROM THE INPUT BUFFER_^1* AND RETURNS IT IN A._^1*_]_^1GET_"NUM 0_^1_%LDA* (WDIX),I_$GET CHARACTER WORD_^1_%LDQ* CHAR_)CHARACTER FLAG 0=LEFT 1=RIGHT_^1_%SQN GET1-*-1_$SKIP ON RIGHT CHARACRER_^1_%ALS 8_€€^1GET1_!AND- $A_+UNPACK IT_^1_%SQZ GET2-*-1_$SKIP ON LEFT_^1_%CLR Q_^1_%STQ* CHAR_)UPDATE LEFT/RIGHT FLAG_^1_%RAO* WDIX_)UPDATE WORD INDEX_^1_%JMP* (GET)_(RETURN_^1*_]_^1GET2_!RAO* CHAR_)UPDATE LRFT/RIGHT FLAG_^1_%LDQ* WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#END OF BUFFER - ERROR_^1_%JMP* (GET)_(RETURN_^1OFLOW JMP* JMP15_(TO PRINT DIAGNOSTIC_^1*_]_^1* THE FOLL€*OWING BACKS THE SCAN UP ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%LDA* CHAR_^1_%SAN BACK1-*-1_#SKIP ON RIGHT_^1_%RAO* CHAR_)SET TO RIGHT_^1_%LDA* WDIX_^1_%INA -1_^1_%STA* WDIX_)BACK UP ONE WORD_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_%STA* CHAR_)SET TO LEFT CHARACTER_^1_%JMP* (BACK)_^1*_]_^1_%END_]_^__*PLUCHG1 CSY/ H41 P€1_%NAM LUCHG1_'DECK-ID H41 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM PROCESSES THE *LUI AND *LUO STATEMENTS FOR BREAKPOINT_^1* THE VALUES PROVIDED BY€€ A USER WILL NOT BE CHECKED FOR LEGALITY_^1* DUE TO INABILITY OF BREAKPOINT TO ACCESS EQUIPMENT TABLES._^1*_]_^1_%EXT LOG1A_^1*_]_^1LUC_"NUM 0_^1_%INA 4_^1_%STA* LINDEX_'LOC. OF LU STORAGE IN BRKPTD_^1_%INA 8_^1_%STA- I_,INPUT BUFFER ADDRESS_^1_%ENA 1_,INDEX TO 4TH CHARACTER_^1_%STA* WDIX_^1_%STA* CHAR_)SET CHARACTER FLAG FOR 4TH_^1_%RTJ* GET_*GET 4TH CHARACTER_^1_%INA -$49_^€€1_%SAZ LUC1-*-1_$SKIP IF LUI_^1_%RAO* LINDEX_'SET INDEX FOR LUO_^1LUC1_!STA* FLAG_)SET I/U FLAG_^1_%RTJ* GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ LUC2-*-1_$SKIP IF A COMMA_^1LUC15 ENA 0_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1*_]_^1LUC2_!RTJ* DEC_*CONVERT LOGICAL UNIT NUMBER FIELD_^1_%TRA Q_^1_%ADD =N$1000_%FOR ASCII MODE_^1_%STA* NUM_*SAVE LOGICAL UNIT_^1_%TRQ€€ A_^1_%SUB LOG1A_^1_%SAM LUC25-*-1_^1_%SAZ LUC25-*-1_^1_%JMP* LUC15_(LU NUMBER TOO LARGE_^1LUC25 LDQ LOG1A,Q_%GET PHYSTAB ADDRESS IN Q_^1_%LDA- 8,Q_*WORD 8 OF PHYSTAB ENTRY_^1_%AND- 5_,UNPACK AVAILABILITY BITS_^1_%LDQ* FLAG_^1_%SQZ LUC3-*-1_$SKIP ON LUI_^1_%ENQ 2_^1LUC3_!INQ 2_^1_%LAQ A_^1_%SAN LUC4-*-1_$LU IS OK_^1_%JMP* LUC15_^1LUC4_!LDA* NUM_^1_%STA* (LINDEX)_$STORE N€€EW LOGICAL UNIT_^1_%JMP* (LUC)_(DONE_^1*_]_^1LINDEX BSS LINDEX(1)_#ADDR. OF LOGICAL UNIT IN QUESTION_^1WDIX_!BSS WDIX(1)_%WORD INDEX OF CURRENT CHARACTER_^1CHAR_!BSS CHAR(1)_%CHARACTER FLAG 0=LEFT 1=RIGHT_^1NUM_"BSS NUM(5)_'SCRATCH_^1FLAG_!BSS FLAG(1)_%0=INPUT_!NOT ZERO = OUTPUT_^1*_]_^1* THE FOLLOWING BACKS UP THE STATEMENT SCAN BY ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%LD€€A* CHAR_^1_%SAN BACK1-*-1_#SKIP ON CHAR = RIGHT_^1_%RAO* CHAR_^1_%LDA* WDIX_^1_%INA -1_^1_%STA* WDIX_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_%STA* CHAR_)SET CHAR TO LEFT_^1_%JMP* (BACK)_^1*_]_^1* THIS SUBROUTINE UNPACKS ONE CHARACTER FROM THE INPUT BUFFER_^1* AND RETURNS IT IN A._^1*_]_^1GET_"NUM 0_^1_%LDA* (WDIX),I_$GET CHARACTER WORD_^1_%LDQ* CHAR_)CHARACTER FLAG 0=LEFT 1=RIGHT_^€€1_%SQN GET1-*-1_$SKIP ON RIGHT CHARACTER_^1_%ALS 8_^1GET1_!AND- $A_+UNPACK IT_^1_%SQZ GET2-*-1_$SKIP ON LEFT_^1_%CLR Q_^1_%STQ* CHAR_)UPDATE CHARACTER FLAG_^1_%RAO* WDIX_)UPDATE WORD INDEX_^1_%JMP* (GET)_(RETURN_^1GET2_!RAO* CHAR_)UPDATE CHARACTER FLAG_^1_%LDQ* WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#SKIP ON INPUT BUFFER END - ERROR_^1_%JMP* (GET)_(RETURN_^1O€€FLOW JMP* LUC15_^1*_]_^1* THIS SUBROUTINE CONVERTS SIGNED DECIMAL INTEGERS TO BINARY_^1*_]_^1DEC_"NUM 0_^1_%CLR A_^1_%STA* NUM_*CLEAR NUMBER_^1_%STA* NUM+1_(SET SIGN POSITIVE_^1_%STA* NUM+2_(SET 1ST CHARACTER FLAG TO 1ST_^1_%ENA -4_^1_%STA* NUM+3_(SET DIGIT COUNT_^1*_]_^1DEC1_!RTJ* GET_*GET A CHARACTER_^1_%LDQ* NUM+2_^1_%SQN DEC8-*-1_$SKIP ON NOT 1ST CHARACTER_^1DEC2_!INA -$€€2B_^1_%SAN DEC5-*-1_$SKIP IF NOT A PLUS_^1DEC3_!RAO* NUM+2_(TURN OFF 1ST CHARACTER FLAG_^1_%JMP* DEC1_^1DEC5_!INA -2_^1_%SAN DEC6-*-1_$SKIP IF NOT A MINUS_^1_%RAO* NUM+1_(SET SIGN NEGATIVE_^1_%JMP* DEC3_^1DEC6_!RAO* NUM+2_(TURN OFF 1ST CHARACTER FLAG_^1_%INA $2D_^1DEC8_!LDQ* NUM+3_^1_%SQN DEC9-*-1_$SKIP IF LESS THAN 5 DIGITS_^1_%JMP* LUC15_(TOO MANY DIGITS_^1DEC9_!RAO* NUM+3_(€€UPDATE DIGIT COUNT_^1_%INA -$30_^1_%SAP DEC10-*-1_#SKIP ON OK SO FAR_^1_%JMP* DEC30_(NOT A DECIMAL DIGIT_^1DEC10 INA -$A_^1_%SAM DEC11-*-1_#SKIP ON DECIMAL DIGIT_^1_%JMP* DEC30_^1DEC11 INA $A_^1_%STA* NUM+4_^1_%ENA 10_+HERE IS THE ACTUAL CONVERSION_^1_%MUI* NUM_^1_%SQZ DEC12-*-1_#SKIP IF NUMBER LESS THAN 32768_^1_%JMP* LUC15_(NUMBER TOO LARGE_^1DEC12 SNO 0_^1_%ADD* NUM+4_€`^1_%SNO DEC13-*-1_#SKIP IF NUMBER LESS THAN 32768_^1_%JMP* LUC15_(NUMBER TOO LARGE_^1DEC13 STA* NUM_*SAVE CURRENT PROCEEDS_^1_%JMP* DEC1_)GO GET NEXT DIGIT_^1*_]_^1DEC30 RTJ* BACK_)BACK UP SCAN BY ONE_^1_%LDA* NUM_^1_%LDQ* NUM+1_^1_%SQZ DEC31-*-1_#SKIP ON POSITIVE NUMBER_^1_%JMP* LUC15_(NO NEGATIVES ALLOWED_^1DEC31 JMP* (DEC)_(DONE_^1_%END_]_^__`PBRKPT1 CSY/ H42 P€1_%NAM BRKPT1_'DECK-ID H42 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS IS THE CONTROL PROGRAM FOR BREAKPOINT.._^1* ON INITIAL ENTRY FROM THE MONITOR, Q CONTAIN€€S THE ENTRY LOCATION_^1* TO THE USER PROGRAM. NORMAL ENTRIES FROM THE USER AS THE RESULT_^1* OF BREAKPOINTS ARE MADE AT BRKP._^1* IN RESPONSE TO USER COMMANDS BRKPTD WILL CALL, AS OVERLAYS,_^1* THE APPROPRIATE PROCESSORS TO PROCESS THE COMMANDS.. THE PROCESSORS_^1* ARE ACCESSED AS ABSOLUTE, LOAD ANYWHERE PROGRAMS FROM THE PROGRAM_^1* LIBRARY VIA GTFILE REQUESTS.. THE PROGRAMS (OVER€€LAYS) ARE LOADED_^1* INTO THE AREA DESIGNATED AS OLAY. EACH OVERLAY IS ENTERRED AT_^1* ITS LOWEST LOCATION AS A CLOSED SUBROUTINE. ON ENTRY, A WILL_^1* CONTAIN THE CORE ADDRESS OF THE BLOCK OF TABLES AND DATA STARTING_^1* AT QX IN THIS PROGRAM. THE BLOCK OF DATA FROM QX TO USERP SHOULD_^1* NOT BE DISTURBED AS IT REPRESENTS THE COMMUNICATION BETWEEN THIS_^1* PROGRAM AND THE OVERLAYS€€._^1* NBTS REPRESENTS THE MAXIMUM NUMBER OF BREAKPOINTS ALLOWED. IT MAY_^1* BE CHANGED BY ASSEMBLY OF THOSE PROGRAMS IN WHICH IT IS AN ASSEMBLY_^1* PARAMETER. NEW STATEMENTS AND PROCESSORS MAY BE ADDED BY SIMPLY_^1* ADDING THEM TO THE BPTAB AND BPREL TABLES. STATEMENT PROCESSING_^1* IS CONTAINED ENTIRELY WITHIN THE STATEMENT PROCESSOR (OVERLAY)._^1*_]_^1_%ENT BRKPTD_^1*_]_^1NBTS_!€€EQU NBTS(15)_^1*_]_^1BRKPTD RTJ* *+1_*FIRST ENTRANCE TO BREAKPOINT_^1_%NOP 0_,WILL HOLD ABS LOC OF BRKPTD+1_^1_%STQ USERP_(SAVE ENTRY TO USER PROGRAM_^1_%LDA* BRKPTD+1_^1_%INA BRKP-BRKPTD-1_^1_%STA- $F3_*SET ENTRY TO BREAKPOINT FROM THE USER_^1_%LDA* BRKPTD+1_$COMPUTE BUFFER ADDRESS_^1_%INA BRKP1-BRKPTD-1_^1_%STA* ADDRES_'STORE BUFFER LOC. FOR OUTPUT_^1_%LDA* BRKPTD+1_$COMPUT€€E ABS LOC OF BP FOR OUTPUT_^1_%INA BP-BRKPTD-1_^1_%STA* ADDRSS_'STORE IN OUTPUT REQUEST_^1_%LDA* BRKPTD+1_$COMPUTE INPUT BUFFER ADDRESS_^1_%ADD =XBUF-BRKPTD-1_^1_%STA* ADR1_)STORE FOR INPUT REQUEST_^1_%JMP* READY_^1*_]_^1BRKP_!NOP 0_,ENTRY FROM USER PROGRAM_^1_%STA* AX_+SAVE USER A_^1_%STQ* QX_+SAVE USER Q_^1_%LDA- I_^1_%STA* IX_+SAVE USER I_^1_%TRM A_^1_%STA* MX_+SAVE M_^1_%LD€€A* BRKP_)BREAKPOINT LOC. TO A_^1_%INA -1_^1_%STA* BPLOC_(SAVE BREAKPOINT LOCATION_^1_%STA SPC_*SAVE IT HERE ALSO_^1_%STA* W1_^1_%ENQ 3_^1*_]_^1* THE FOLLOWING CONVERTS BREAKPOINT ADDRESS TO 4 ASCII CHARACTERS_^1*_]_^1RPT_"AND- 6_,CONTAINS $F - UNPACKS 1 HEX DIGIT_^1_%INA -$A_^1_%SAM LT10-*-1_$SKIP IF DIGIT LESS THAN $A_^1_%INA 7_^1LT10_!INA $3A_^1STORE STA* W1,Q_)SAVE A C€€ONVERTED DIGIT_^1_%SQZ FIN-*-1_%SKIP IF CONVERSION COMPLETE_^1_%INQ -1_^1_%LDA* W1_^1_%ARS 4_^1_%STA* W1_^1_%JMP* RPT_^1FIN_"ALS 8_^1_%ADD* W2_^1_%LDQ* W3_^1_%QLS 8_^1_%ADQ* W4_+ADDRESS NOW IN ASCII IN A AND Q_^1*_]_^1_%STA* BRKP1+2_%STORE FOR OUTPUT_^1_%STQ* BRKP1+3_^1_%LDA* LUO_^1_%STA* LUO1_)SET OUTPUT DEVICE_^1_%RTJ- ($F4)_(WRITE_!BP,HHHH_^1_%NUM $4C00,0_^1_%NUM 0_^1LUO1€€_!NUM $18FC_^1_%NUM 5_^1ADDRES NUM 0_^1*_]_^1WAIT_!LDA* LUO1-1_^1_%SAZ THOK_^1_%JMP* WAIT_^1THOK_!ENQ NBTS-1_^1*_]_^1* THE FOLLOWING TRIES TO LOCATE THE BREAKPOINT IN THE TABLE_^1*_]_^1BRKP2 LDA BPL,Q_(BREAKPOINT LOC. TABLE SEARCH_^1_%SUB* SPC_^1_%SAZ BRKP4-*-1_#SKIP IF LOCATION FOUND_^1_%INQ -1_^1_%SQM BRKP3-*-1_#SKIP IF LOCATION CANNOT BE FOUND_^1_%JMP* BRKP2_(CONTINUE€€ SEARCH_^1*_]_^1BRKP3 LDA =N$B00_'SET INSTRUCTION AS A NOP_^1_%JMP* BRKP5_^1*_]_^1BRKP4 LDA INST,Q_'GET CORRESPONDING INSTRUCTION_^1BRKP5 STA* SPC1_)STORE AS CURRENT INSTRUCTION_^1_%JMP* READ1_^1*_]_^1BRKP1 ALF 4, BP,_^1_%NUM $0D0D_(2 CARRIAGE RETURNS_^1*_]_^1BP_#NUM $0D42,$500D_!BP SURROUNDED BY CARRIAGE RETURNS_^1*_]_^1READY RTJ- ($F4)_(WRITE BP_^1_%NUM $4C00,0_^1_%NUM€€ 0_^1LUO2_!NUM $18FC_^1_%NUM 2_^1ADDRSS NUM 0_^1*_]_^1WAIT2 LDA* LUO2-1_^1_%SAZ READ1_^1_%JMP* WAIT2_^1READ1 ENQ 39_+BACKGROUND INPUT BUFFER TO $FFFF_^1_%SET A_^1READY1 STA* BUF,Q_^1_%INQ -1_^1_%SQM READ-*-1_$SKIP WHEN DONE BACKGROUNDING_^1_%JMP* READY1_^1*_]_^1READ_!LDA* LUI_^1_%STA* LUI1_)SET INPUT DEVICE_^1*_]_^1_%RTJ- ($F4)_(READ A STATEMENT_^1_%NUM $4800,0_^1THREAD€€ NUM 0_^1LUI1_!NUM $18FD,40_$READS 80 CHARACTERS_^1ADR1_!NUM 0_^1*_]_^1STAT_!LDA* THREAD_'WAIT FOR COMPLETION_^1_%SAZ CONT-*-1_$SKIP WHEN DONE_^1_%JMP* STAT_)WAIT SOME MORE_^1CONT_!LDA* LUI1_^1_%SAP TDEF-*-1_$SKIP IF NO READ ERRORS_^1_%JMP* READY_(GO BACK AND TRY IT AGAIN FROM THE START_^1TDEF_!JMP DEFINE_^1*_]_^1ERRMSG ALF 7,FORMAT ERROR_^1ERRM2 ALF 7,PROTECT ERROR_^1_%EJ€€T_]_^1*_]_^1* THE FOLLOWING TABLES BUFFERS ETC. ARE USED IN OVERLAYS OF_^1*_!BREAKPOINT. THE LOCATION [ABSOLUTE] OF QX IS TRANSFERRED IN_^1*_!THE A REGISTER TO ALL CALLED OVERLAYS._^1*_]_^1QX_#BSS QX(1)_(USERS Q_^1AX_#BSS AX(1)_(USERS A_^1IX_#BSS IX(1)_(USERS I_^1MX_#BSS MX(1)_(MASK REGISTER CONTENTS_^1LUI_"NUM $18FD_(LOGICAL UNIT FOR INPUT (WHOLE WORD)_^1LUO_"NUM $18FC_(LO€€GICAL UNIT FOR OUTPUT (WHOLE WORD)_^1PASS_!BZS PASS(1)_%FIRST PASS FLAG_^1BPLOC BSS BPLOC(1)_$STORAGE FOR BREAKPOINT ADDRESS_^1_%BSS W1(1),W2(1),W3(1),W4(1)_^1BUF_"BSS BUF(40)_%INPUT BUFFER_^1_%JMP* B01_^1_%JMP* B02_^1SPC_"BZS SPC(1)_'CURRENT BREAKPOINT LOCATION_^1BPL_"BZS BPL(NBTS)_#BREAKPOINT TABLE_^1SPC1_!BZS SPC1(1)_%INSTRUCTION AT CURRENT BREAKPOINT_^1INST_!BZS INST(N€€BTS)_"INSTRUCTION TABLE_^1USERP NUM $7FFF_(USER PROGRAM INITIAL ENTRY LOCATION_^1*_]_^1*_!THE FOLLOWING ARE ERROR TYPEOUTS_^1*_]_^1B01_"SAZ B01A-*-1_$SKIP ON BAD STATEMENT_^1_%RTJ* FIELD_(PROCESS BAD FIELD_^1B01A_!LDA BRKPTD+1_$COMPUTE ADDRESS OF BAD STATEMENT ERROR MESS._^1_%INA ERRMSG-BRKPTD-1_^1BZ1_"STA* ADR3_^1_%LDA* LUO_^1_%STA* B01B_)SET OUTPUT DEVICE_^1_%RTJ- ($F4)_(ERR€€OR MESSAGE OUTPUT_^1_%NUM $4C00,0,0_^1B01B_!NUM $18FC,7_^1ADR3_!NUM 0_^1STAT1 LDA* B01B-1_'WAIT FOR COMPLETION_^1_%SAZ CONT1-*-1_#SKIP IF DONE_^1_%JMP* STAT1_(WAIT SOME MORE_^1CONT1 JMP READY_^1*_]_^1B02_"SAZ B02A-*-1_$SKIP ON BAD STATEMENT_^1_%RTJ* FIELD_(PROCESS BAD FIELD_^1B02A_!LDA BRKPTD+1_$COMPUTE ADDRESS OF PROTECT ERROR MESSAGE_^1_%INA ERRM2-BRKPTD-1_^1_%JMP* BZ1_€€^1*_]_^1* THIS ROUTINE PRINTS THE CONTENTS OF A BAD FIELD._^1* THE INDEX TO THE FIELD START IS IN A ON ENTRY._^1* FIELD IS TERMINATED BY A COMMA OR STATEMENT END._^1*_]_^1FIELD NUM 0_^1_%STA- I_,SAVE INDEX TO FIELD START_^1_%STA* WDIX_)SAVE AS INDEX FOR FIELD SCAN_^1_%ENA 1_^1_%STA* CHAR_)SET CHARACTER FLAG FOR RIGHT_^1_%LDA* BUF,I_(GET 1ST WORD_^1_%AND- $1A_*CONTAINS $FF00_^1_%€€SUB =N$2C00_^1_%SAN F1-*-1_'SKIP IF 1ST CHAR IS NOT A COMMA_^1_%LDA* BUF,I_^1_%AND- $A_+SAVE RIGHT CHARACTER_^1_%EOR- $1A_*SET COMMA TO RUBOUT_^1_%STA* BUF,I_(RESTORE TO BUFFER_^1*_]_^1F1_#LDQ* WDIX_)SET INDEX FOR CURRENT WORD_^1_%LDA* BUF,Q_(GET WORD WITH NEXT CHARACTER_^1_%LDQ* CHAR_^1_%SQN F2-*-1_'SKIP ON RIGHT CHARACTER_^1_%ALS 8_^1*_]_^1F2_#AND- $A_+UNPACK THE CHARACTER_^1€€_%INA -$20_^1_%SAZ F4_+SKIP IF BLANK_^1_%INA -$C_^1_%SAZ F4-*-1_'SKIP IF A COMMA_^1_%INA -3_^1_%SAZ F4-*-1_'SKIP IF A SLASH_^1_%SUB =N$D0_^1_%SAZ F4-*-1_'SKIP IF END OF STATEMENT_^1_%SQZ F3-*-1_'SKIP ON LEFT CHARACTER_^1_%CLR Q_^1_%STQ* CHAR_^1_%RAO* WDIX_^1_%JMP* F1_^1F3_#RAO* CHAR_^1_%JMP* F1_^1*_]_^1F4_#LDQ* WDIX_^1_%LDA* CHAR_^1_%SAN F5-*-1_'SKIP IF IT WAS RIGHT CHAR€€ACTER_^1_%LDA =N$3FFF_%QUESTION MARK AND RUBOUT_^1_%JMP* F6_^1F5_#LDA BUF,Q_^1_%AND- $1A_*REMOVE RIGHT CHARACTER_^1_%INA $3F_*REPLACE WITH A QUESTION MARK_^1F6_#STA BUF,Q_(RESTORE WORD TO BUFFER_^1_%LDA ADR1_^1_%ADD- I_,STARTING ADDRESS FOR OUTPUT_^1_%STA* STRT_^1_%LDA* WDIX_^1_%SUB- I_^1_%INA 1_^1_%STA* FWORDS_'NUMBER OF WORDS TO OUTPUT_^1_%LDA LUO_*OUTPUT UNIT_^1_%STA* FOU€€T_^1*_]_^1_%RTJ- ($F4)_(PRINT THE BAD FIELD_^1_%NUM $4C00,0,0_^1FOUT_!NUM 0_^1FWORDS NUM 0_^1STRT_!NUM 0_^1WAIT3 LDA* FOUT-1_^1_%SAZ 1_^1_%JMP* WAIT3_^1_%JMP* (FIELD)_%EXIT_^1*_]_^1WDIX_!BSS WDIX(1)_%WORD INDEX FOR BUFFER SCAN_^1CHAR_!BSS CHAR(1)_%CHARACTER FLAG FOR BUFFER SCAN_^1*_]_^1_%EJT_]_^1*_]_^1* THE FOLLOWING IS A TABLE OF ALL POSSIBLE STATEMENTS WHICH ARE_^1*_!LEG€€AL TO BREAKPOINT TOGAETHER WITH AN INDEX TO AN ASCII_^1*_!NAME USED TO ACCESS THE ASSOCIATED PROCESSOR._^1*_]_^1BPTAB ALF 2,*SAH_'SET A_^1_%NUM 0_^1_%ALF 2,*SQH_'SET Q_^1_%NUM 0_^1_%ALF 2,*SIH_'SET I_^1_%NUM 0_^1_%ALF 2,*END_'RESUME_^1_%NUM 6_^1_%ALF 2,*LRG_'LIST REGISTERS_^1_%NUM 3_^1_%ALF 2,*LHX_'LOAD HEX_^1_%NUM 9_^1_%ALF 2,*LIT_'LOAD DECIMAL_^1_%NUM 9_^1_%ALF 2€€,*LAS_'LOAD ASCII_^1_%NUM 9_^1_%ALF 2,*LSP_'LOAD SINGLE PRECISION FLOATING POINT_^1_%NUM 9_^1_%ALF 2,*LDP_'LOAD DOUBLE PRECISION FLOATING POINT_^1_%NUM 9_^1_%ALF 2,*DPC_'CORE HEX DUMP_^1_%NUM 12_^1_%ALF 2,*DIC_'CORE DECIMAL DUMP_^1_%NUM 12_^1_%ALF 2,*DAS_'CORE ASCII DUMP_^1_%NUM 12_^1_%ALF 2,*DSP_'CORE SINGLE PRECISION FLOATING DUMP_^1_%NUM 12_^1_%ALF 2,*DDP_'CORE DOU€€BLE PRECISION FLOATING DUMP_^1_%NUM 12_^1_%ALF 2,*JP,_'JUMP_^1_%NUM 15_^1_%ALF 2,*RJ,_'RETURN JUMP_^1_%NUM 15_^1_%ALF 2,*SET_'SET BREAKPOINT_^1_%NUM 18_^1_%ALF 2,*TRM_'TERMINATE A BREAKPOINT(S)_^1_%NUM 21_^1_%ALF 2,*DMH_'MASS STORAGE HEX DUMP_^1_%NUM 24_^1_%ALF 2,*DMI_'MASS STORAGE DECIMAL DUMP_^1_%NUM 24_^1_%ALF 2,*DMA_'MASS STORAGE ASCII DUMP_^1_%NUM 24_^1_%ALF 2,€€*DMS_'MASS STORAGE SINGLE PRECISION FP DUMP_^1_%NUM 24_^1_%ALF 2,*DMD_'MASS STORAGE DOUBLE PRECISION FP DUMP_^1_%NUM 24_^1_%ALF 2,*LUI_'CHANGE INPUT LOGICAL UNIT_^1_%NUM 27_^1_%ALF 2,*LUO_'CHANGE OUTPUT LOGICAL UNIT_^1_%NUM 27_^1_%ALF 2,*ADF_'SKIP FILE(S)_^1_%NUM 30_^1_%ALF 2,*BSF_'BACKSPACE FILE_^1_%NUM 30_^1_%ALF 2,*ADR_'SKIP RECORD_^1_%NUM 30_^1_%ALF 2,*BSR_'BACKSP€€ACE RECORD_^1_%NUM 30_^1_%ALF 2,*WEF_'WRITE EOF_^1_%NUM 30_^1_%ALF 2,*REW_'REWIND_^1_%NUM 30_^1_%ALF 2,*UNL_'REWIND AND UNLOAD_^1_%NUM 30_^1_%ALF 2,*SLD_'SET DENSITY_^1_%NUM 30_^1*_]_^1* OTHER BREAKPOINT FUNCTIONS MAY BE INSERTED HERE._^1*_]_^1LASTAB BSS LASTAB(0)_#DEFINES END OF BPTAB_^1*_]_^1* THE FOLLOWING CODE CODE SEARCHES BPTAB FOR A MATCHING STATEMENT_^1*_]_^1DEF€€INE ENQ LASTAB-BPTAB-1_^1_%LDA BPTAB-1,Q_#GET 1ST TABLE WORD_^1_%SUB BUF+1_^1_%SAZ DEF01-*-1_#SKIP ON 1ST 2 CHARACTERS MATCH_^1_%JMP* DEF02_^1DEF01 LDA BPTAB-2,Q_#GET OTHER ENTRY WORD_^1_%SUB BUF_^1_%SAZ DEF2-*-1_$SKIP IF WE HAVE A MATCH_^1DEF02 INQ -3_+SET INDEX FOR NEXT TABLE ENTRY_^1_%SQM DEF1-*-1_$SKIP IF NO MATCH CAN BE FOUND_^1_%JMP* DEFINE+1_^1DEF1_!ENA 0_^1_%JMP€€ B01_*GO PRINT DIAGNOSYIC_^1*_]_^1DEF2_!LDQ BPTAB,Q_%GET BPREL INDEX_^1_%INQ BPREL-FIRST_!COMPUTE DISPLACEMENT FOR GTFILE_^1_%STQ* EYE_^1_%LDA BRKPTD+1_$COMPUTE OVERLAY BUFFER ADDRESS_^1_%ADD =XOLAY-BRKPTD-1_^1_%STA* ESS_*STORE FOR GTFILE_^1_%ENA 0_^1_%STA* SECTOR_'RE-INITIALIZE SECTOR NUMBER_^1_%STA* SECTOR+1_^1_%STA* ESS+1_^1GETOLA RTJ- ($F4)_(GTFILE REQUEST FOR AN OVERLAY_€€^1FIRST NUM $5A00,0_^1THUD_!NUM 0_^1VEE_"NUM $8C2,0_^1ESS_"NUM 0,0_^1EYE_"NUM 0_^1SECTOR NUM 0,0_^1CHK_"LDA* THUD_)WAIT FOR COMPLETION_^1_%SAZ PAR-*-1_%SKIP IF COMPLETE_^1_%JMP* CHK_^1PAR_"LDA* VEE_*CHECK FOR ERRORS IN TRANSFER_^1_%SAP GO-*-1_'SKIP IF NO ERRORS_^1_%JMP* GETOLA_'ERROR, TRY AGAIN_^1GO_#LDA BRKPTD+1_$COMPUTE TABLE ADDRESS_^1_%ADD =XQX-BRKPTD-1_^1_%RTJ* OLAY€€_)GO TO OVERLAY_^1_%JMP READY_(GO BACK TO GET A COMMAND ON RETURN_^1*_]_^1* THE FOLLOWING TABLE IS THE ONE REFERRED TO ABOVE IN THE_^1*_!DESCRIPTION OF BPTAB. IT REPRESENTS ALPHABETIC NAMES_^1*_!USED IN GTFILE REQUESTS TO OB TAIN OVERLAYS ASSOCIATED WITH_^1*_!THE PROCESSING OF EACH CONTROL STATEMENT._^1*_]_^1BPREL ALF 3,BPRSET_$SET REGISTERS_^1_%ALF 3,BPRLST_$LIST REGISTERS_€€^1_%ALF 3,BPEND_%RESUME_^1_%ALF 3,BPLOAD_$LOAD CORE_^1_%ALF 3,BPDMPC_$DUMP CORE_^1_%ALF 3,BPJMP_%JUMP AND RETURN JUMP_^1_%ALF 3,BPST_'SET BREAKPOINTS_^1_%ALF 3,BPCLR_%CLEAR BREAKPOINTS_^1_%ALF 3,BPMASS_$MASS STORAGE DUMP_^1_%ALF 3,BPBPLU_$I/O UNIT CHANGE_^1_%ALF 3,BPTAPC_$TAPE REQUESTS_^1*_]_^1*_]_^1* BELOW IS THE AREA RESERVED FOR OVERLAYS. THIS AREA CAN_^1*_!BE CHANGED €¨BY SIMPLY CHANGING THE BSS VALUE. IT IS CURRENTLY_^1*_!SET FOR THE LARGEST OVERLAY PLUS TEN PERCENT._^1*_]_^1OLAY_!BSS OLAY($2A0)_"7 SECTORS_^1*_]_^1_%END BRKPTD_^__¨PBPTAP1 CSY/ H43 P€1_%NAM BPTAP1_'DECK-ID H43 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM PERFORMS ALL TAPE FUNCTIONS FOR BREAKPOINT._^1* NO LEGALITY CHECK IS MADE ON LOG€€ICAL UNIT NUMBER._^1*_]_^1_%EXT LOG1A_^1*_]_^1TAPE_!NUM 0_^1_%INA 12_^1_%STA- I_,INPUT BUFFER LOCATION_^1_%ENA 2_^1_%STA* WDIX_)SET FOR 5TH CHARACTER_^1_%CLR A_^1_%STA* CHAR_)SET FOR LEFT CHARACTER_^1_%LDA- 1,I_*GET 2ND AND 3RD CHARACTERS_^1_%STA* NUM_^1*_]_^1_%ENQ CTEND-CTABLE-2_^1TAPE1 LDA* CTABLE,Q_$SEARCH TABLE FOR NEEDED COMMAND_^1_%SUB* NUM_^1_%SAZ TAPE2-*-1_#SKIP IF €€OPERATION FOUND_^1_%INQ -2_^1_%SQM TAPE25_^1_%JMP* TAPE1_(SEARCH SOME MORE_^1*_]_^1TAPE2 LDA* CTABLE+1,Q_"GET COMMAND TYPE FLAG_^1_%STA* OP_^1_%RTJ* GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ TAPE3-*-1_#SKIP IF A COMMA_^1TAPE25 ENA 0_^1_%JMP- 40,I_)FORMAT ERROR - RETURN TO BRKPTD_^1*_]_^1TAPE3 RTJ* DEC_*DECODE LOGICAL UNIT NUMBER_^1_%TRA Q_^1_%STA* LU_+STORE FOR REQUEST_^1_%SA€€Z TAPE31-1_^1_%SUB LOG1A_^1_%SAM TAPE31-*-1_^1_%SAZ TAPE31-*-1_^1_%JMP* TAPE25_'LU NUMBER TOO LARGE_^1TAPE31 LDQ+ LOG1A,Q_%GET PHYSTAB ADDRESS IN Q_^1_%LDQ- 8,Q_*WORD 8 OF PHYSTAB_^1_%LRS 1_^1_%SAP TAPE36-*-1_"SKIP IF OK TO ADDRESS FROM BACKGROUND_^1_%JMP* TAPE25_^1*_]_^1TAPE36 LDA* OP_^1_%SAM TAPE5-*-1_#SKIP ON ALL BUT REW, UNL, SLD_^1_%INA -1_^1_%SAZ TAPE5-*-1_#SKIP ON S€€LD_^1_%RTJ* GET_*GET DELIMITOR_^1_%SUB- $A_^1_%SAZ TAPE4-*-1_#SKIP ON STATEMENT END_^1_%JMP* TAPE25_'FORMAT ERROR - BACK TO BRKPTD_^1TAPE4 JMP* MOTION_'TO EXECUTE_^1*_]_^1TAPE5 RTJ* GET_*GET DELIMITOR_^1_%INA -$2C_^1_%SAZ TAPE7-*-1_#SKIP IF A COMMA_^1_%INA $C_+IS IT A BLANK_^1_%SAN TRYFF_^1_%JMP* TAPE6_^1TRYFF SUB =N$DF_(IS IT A FF_^1_%SAZ TAPE6-*-1_#SKIP IF STATEMENT END€€_^1_%JMP* TAPE25_'FORMAT ERROR - BACK TO BRKPTD_^1TAPE6 JMP* MOTION_'TO EXECUTE_^1*_]_^1TAPE7 RTJ* DEC_*GET REPEAT CODE OR DENSITY FLAG_^1_%LDA* OP_^1_%SAM TAPE9-*-1_#SKIP IF NOT SLD_^1_%LDA* NUM_*GET DENSITY FLAG_^1_%SAP TAPE8-*-1_#SKIP IF PLUS_^1_%JMP* TAPE25_'FORMAT ERROR - BACK TO BRKPTD_^1*_]_^1TAPE8 INA -4_^1_%SAM TAPE9-*-1_#FLAG IN PROPER RANGE 0-3_^1_%JMP* TAPE25_'F€€ORMAT ERROR - BACK TO BRKPTD_^1*_]_^1TAPE9 LDA* OP_^1_%AND- $1A_^1_%EOR* NUM_*PUT REPEAT COUNT OR DENSITY IN REQUEST_^1_%STA* OP_^1*_]_^1MOTION RTJ- ($F4)_(THIS IS THE PLUGGED MOTION REQUEST_^1_%NUM $5C00,0,0_^1LU_#NUM $1000_(LOGICAL UNIT GOES HERE_^1OP_#NUM 0_,OPERATION GOES HERE_^1*_]_^1_%JMP* (TAPE)_'DONE - EXIT_^1*_]_^1WDIX_!BSS WDIX(1)_%WORD INDEX TO BUFFER_^1CHAR_!BSS C€€HAR(1)_%CHARACTER FLAG 0=LEFT 1=RIGHT_^1NUM_"BSS NUM(5)_'SCRATCH_^1*_]_^1* THIS TABLE CONTAINS TWO WORD ENTRIES. THE FIRST CONTAINS_^1* THE 2ND AND 3RD CHARACTERS FROM EACH POSSIBLE STATEMENT CODE._^1* THE 2ND CONTAINS THE ASSOCIATED MOTION REQUEST CODE_^1* ALONG WITH A DEFAULT PARAMETER._^1*_]_^1CTABLE ALF 1,DF_)ADVANCE FILE_^1_%NUM $D001_^1_%ALF 1,SF_)BACKSPACE FILE_^1_%NUM€€ $E001_^1_%ALF 1,DR_)ADVANCE RECORD_^1_%NUM $F001_^1_%ALF 1,SR_)BACKSPACE RECORD_^1_%NUM $9001_^1_%ALF 1,EF_)WRITE END OF FILE_^1_%NUM $A001_^1_%ALF 1,EW_)REWIND_^1_%NUM $3000_^1_%ALF 1,NL_)UNLOAD_^1UNLOAD NUM $4000_^1_%ALF 1,LD_)SET DENSITY_^1_%NUM 1_^1CTEND BSS CTEND(0)_^1*_]_^1* THE FOLLOWING BACKS UP THE STATEMENT SCAN BY ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%L€€DA* CHAR_^1_%SAN BACK1-*-1_#SKIP ON CHAR > RIGHT_^1_%RAO* CHAR_^1_%LDA* WDIX_^1_%INA -1_^1_%STA* WDIX_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_%STA* CHAR_)SET CHAR TO LEFT_^1_%JMP* (BACK)_^1*_]_^1* THIS SUBROUTINE UNPACKS ONE CHARACTER FROM THE INPUT BUFFER_^1* AND RETURNS IT IN A._^1*_]_^1GET_"NUM 0_^1_%LDA* (WDIX),I_$GET CHARACTER WORD_^1_%LDQ* CHAR_)CHARACTER FLAG 0=LEFT 1=RIGHT_€€^1_%SQN GET1-*-1_$SKIP ON RIGHT CHARACTER_^1_%ALS 8_^1GET1_!AND- $A_+UNPACK IT_^1_%SQZ GET2-*-1_$SKIP ON LEFT_^1_%CLR Q_^1_%STQ* CHAR_)UPDATE CHARACTER FLAG_^1_%RAO* WDIX_)UPDATE WORD INDEX_^1_%JMP* (GET)_(RETURN_^1GET2_!RAO* CHAR_)UPDATE CHARACTER FLAG_^1_%LDQ* WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#SKIP ON INPUT BUFFER END - ERROR_^1_%JMP* (GET)_(RETURN_^1€€OFLOW JMP* TAPE25_^1*_]_^1* THIS SUBROUTINE CONVERTS SIGNED DECIMAL INTEGERS TO BINARY_^1*_]_^1DEC_"NUM 0_^1_%CLR A_^1_%STA* NUM_*CLEAR NUMBER_^1_%STA* NUM+1_(SET SIGN POSITIVE_^1_%STA* NUM+2_(SET 1ST CHARACTER FLAG TO 1ST_^1_%ENA -4_^1_%STA* NUM+3_(SET DIGIT COUNT_^1*_]_^1DEC1_!RTJ* GET_*GET A CHARACTER_^1_%LDQ* NUM+2_^1_%SQN DEC8-*-1_$SKIP ON NOT 1ST CHARACTER_^1DEC2_!INA €€-$2B_^1_%SAN DEC5-*-1_$SKIP IF NOT A PLUS_^1DEC3_!RAO* NUM+2_(TURN OFF 1ST CHARACTER FLAG_^1_%JMP* DEC1_^1DEC5_!INA -2_^1_%SAN DEC6-*-1_$SKIP IF NOT A MINUS_^1_%RAO* NUM+1_(SET SIGN NEGATIVE_^1_%JMP* DEC3_^1DEC6_!RAO* NUM+2_(TURN OFF 1ST CHARACTER FLAG_^1_%INA $2D_^1DEC8_!LDQ* NUM+3_^1_%SQN DEC9-*-1_$SKIP IF LESS THAN 5 DIGITS_^1_%JMP* DEC125_'TOO MANY DIGITS_^1DEC9_!RAO* NUM+€€3_(UPDATE DIGIT COUNT_^1_%INA -$30_^1_%SAP DEC10-*-1_#SKIP ON OK SO FAR_^1_%JMP* DEC30_(NOT A DECIMAL DIGIT_^1DEC10 INA -$A_^1_%SAM DEC11-*-1_#SKIP ON DECIMAL DIGIT_^1_%JMP* DEC30_^1DEC11 INA $A_^1_%STA* NUM+4_^1_%ENA 10_+HERE IS THE ACTUAL CONVERSION_^1_%MUI* NUM_^1_%SQZ DEC12-*-1_#SKIP IF NUMBER LESS THAN 32768_^1_%JMP* DEC125_'NUMBER TOO LARGE_^1DEC12 ADD* NUM+4_^1_%SNO€p DEC13-*-1_#SKIP IF NUMBER LESS THAN 32768_^1DEC125 ENA 0_^1_%JMP- 40,I_)NUMBER TOO LARGE_^1DEC13 STA* NUM_*SAVE CURRENT PROCEEDS_^1_%JMP* DEC1_)GO GET NEXT DIGIT_^1*_]_^1DEC30 RTJ* BACK_)BACK UP SCAN BY ONE_^1_%LDA* NUM_^1_%LDQ* NUM+1_^1_%SQZ DEC31-*-1_#SKIP ON POSITIVE NUMBER_^1_%JMP* DEC125_'NO NEGATIVE NUMBERS ALLOWED_^1DEC31 JMP* (DEC)_(DONE_^1_%END_]_^__pPMASDM1 CSY/ H44 P€1_%NAM MASDM1_'DECK-ID H44 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1* THIS PROGRAM PROCESSES ALL REQUESTS TO DUMP_^1* MASS STORAGE FOR BREAKPOINT. THE LOCATION OF_€€^1* QX IN BRKPTD IS IN A ON ENTRY._^1*_]_^1MAS_"NUM 0_^1_%INA 12_^1_%STA- I_,SAVE INPUT BUFFER ADDRESS_^1_%CLR A_^1_%STA CHAR_)SET TO UNPACK LEFT CHARACTER_^1_%ENA 2_^1_%STA WDIX_)SET TO UNPACK 5TH CHARACTER IN GET ROUTINE_^1_%STA FSTRT_(SAVE FIELD START INDEX_^1_%LDA- 1,I_*GET 2ND BUFFER WORD_^1_%AND- $A_+UNPACK 4TH CHARACTER_^1_%STA TYPE_)DEFINES FORM OF DESIRED OUTPUT_^1€€_%ENQ -7_^1_%LDA- ($22),B_%GET OUTPUT UNIT_^1_%STA LU_+STORE IN WRITE REQUEST_^1*_]_^1_%ENQ 20_^1MAS1_!LDA DMPTAB,Q_$SEARCH FOR DATA ON THIS OUTPUT FORM_^1_%SUB TYPE_^1_%SAZ MAS2-*-1_$SKIP WHEN RIGHT SET OF DATA FOUND_^1_%INQ -5_^1_%JMP* MAS1_^1*_]_^1MAS2_!LDA DMPTAB+1,Q_^1_%STA INCREM_'SET NUMBER OF WORDS PER VALUE_^1_%LDA DMPTAB+2,Q_^1_%STA VPL_*SET VALUES PER LINE_^1_€€%LDA DMPTAB+3,Q_^1_%STA CONVRT_'SET CONVERSION ROUTINE INDEX_^1_%LDA DMPTAB+4,Q_^1_%STA DBUF_)SET NUMBER OF POSITIONS PER FIELD_^1*_]_^1_%RTJ COMCHK_'CHECK 1ST DELIMITOR_^1_%RTJ HEX_*GET SECTOR MOST SIGNIFICANT BITS_^1_%STA MSB_^1_%RTJ COMCHK_'CHECK DELIMITOR FOR COMMA_^1_%RTJ HEX_*GET SECTOR LEAST SIGNIFICANT BITS_^1_%STA LSB_^1_%RTJ COMCHK_'CHECK FOR COMMA DELIMITOR_^€€1_%RTJ HEX_*GET STARTING WORD NUMBER_^1_%CLR Q_^1_%DVI =N96_^1_%ADD LSB_^1_%SNO MAS201-*-1_^1_%RAO MSB_^1_%AND- $11_^1MAS201 STA LSB_^1_%STQ START_(SET STARTING WORD NUMBER IN SECTOR_^1MAS25 RTJ COMCHK_'CHECK DELIMITOR FOR COMMA_^1_%RTJ HEX_*GET NUMBER OF WORDS TO DUMP_^1_%STA NWDS_^1_%SAP MAS26-*-1_#SKIP ON POSITIVE NUMBER OF WORDS_^1MAS22 LDA FSTRT_^1_%JMP- 40,I_)F€€ORMAT ERROR - BACK TO BRKPTD_^1MAS26 RTJ GET_*GET NEXT CHARACTER - SHOULD BE END_^1_%SUB- $A_+CONTAINS $FF_^1_%SAZ MAS3-*-1_$SKIP IF STATEMENT END_^1_%JMP* MAS22_(FORMAT ERROR - BACK TO BRKPTD_^1*_]_^1MAS3_!RTJ* *+1_^1_%NUM 0_^1_%LDA* *-1_^1_%ADD =XOUTBUF-MAS3-1_^1_%STA ESS_*STORE ABS LOCATION OF OUTPUT BUFFER_^1_%LDA* MAS3+1_^1_%ADD =XINBUF-MAS3-1_^1_%STA INLOC_(STORE ABS €€LOCATION OF INPUT BUFFER_^1*_]_^1MAS4_!LDA =N$2020_%BLANKS_^1_%STA OUTBUF_^1_%ENA 1_^1_%STA OBIX_^1_%RTJ WRITE_(WRITE A BLANK LINE_^1_%RTJ WRITE_(ANOTHER BLANK LINE_^1*_]_^1_%ENA 0_,THE FOLLOWING PUTS SECTOR NUMBER IN OUTBUF_^1_%STA OBIX_^1_%LDA MSB_^1_%RTJ HEXM_)SPECIAL ENTRY TO HEXO_^1_%ENA 2_^1_%STA OBIX_^1_%LDA LSB_^1_%RTJ HEXM_)SPECIAL ENTRY TO HEXO_^1*_]_^1_%ENA€€ 4_^1_%STA OBIX_^1_%RTJ WRITE_(OUTPUT SECTOR NUMBER_^1_%RTJ READ_)READ A SECTOR_^1*_]_^1MAS5_!ENQ 35_^1_%LDA =N$2020_%BLANKS_^1MAS6_!STA OUTBUF,Q_$BLANK OUTPUT BUFFER_^1_%INQ -1_^1_%SQM MAS7-*-1_$SKIP WHEN DONE_^1_%JMP* MAS6_^1*_]_^1MAS7_!ENA 0_^1_%STA OBIX_)INITILIZE OUTPUT BUFFER INDEX_^1_%LDA* VPL_^1_%INA -1_+MASK FOR COLUMN POSITION IN A_^1_%AND* START_^1_%STA* CV_+€€GIVES CURRENT NUMBER OF VALUES IN THE LINE_^1*_]_^1MAS8_!LDA* START_^1_%RTJ HEXM_)SPECIAL ENTRY TO HEXO FOR LINE START ETC._^1_%ENA 4_^1_%STA OBIX_)SET INDEX FOR STORING OUTPUT DATA_^1*_]_^1MAS9_!LDQ* CONVRT_^1_%RTJ* CONTBL,Q_$CONVERT AND STORE DATA IN BUFFER_^1*_]_^1_%RAO* CV_+INCREMENT NO. OF VALUES ON THE LINE_^1_%LDA* START_^1_%ADD* INCREM_^1_%STA* START_(SET INPUT BUFFER IN€€DEX FOR NEXT VALUE_^1*_]_^1_%LDA* OBIX_)UPDATE BUFFER INDEX_^1_%ADD* DBUF_^1_%STA* OBIX_^1_%LDA* NWDS_^1_%INA -1_^1_%STA* NWDS_^1_%SAN MAS11-*-1_#SKIP IF MORE OUTPUT NEEDED_^1_%LDA* CV_^1_%SAN MAS10-*-1_#SKIP IF PARTIAL LINE WAITING FOR OUTPUT_^1_%JMP* MASBY_(DONE - EXIT_^1MAS10 RTJ* WRITE_(EMPTY THE BUFFER_^1MASBY JMP (MAS)_(DONE - EXIT_^1*_]_^1MAS11 LDA* START_^1_%INA -97€€_^1_%SAM MAS12-*-1_#SKIP IF MORE DATA IN THIS SECTOR_^1_%RTJ* WRITE_(EMPTY BUFFER_^1_%RAO* LSB_*UPDATE SECTOR NUMBER_^1_%CLR A_^1_%STA* START_(REINITIALIZE INBUT BUFFER INDEX_^1_%JMP* MAS4_^1*_]_^1MAS12 LDA* CV_^1_%SUB* VPL_^1_%SAZ MAS13-*-1_#SKIP IF AT END OF LINE_^1_%JMP* MAS9_^1*_]_^1MAS13 RTJ* WRITE_(EMPTY BUFFER_^1_%JMP* MAS5_^1*_]_^1*_]_^1CHAR_!BSS CHAR(1)_%CHARACTER FL€€AG 0=LEFT 1=RIGHT_^1WDIX_!BSS WDIX(1)_%WORD INDEX TO INPUT BUFFER - USER_^1TYPE_!BSS TYPE(1)_%DUMP TYPE_^1VPL_"BSS VPL(1)_'NUMBER OF VALUES PER LINE_^1INCREM BSS INCREM(1)_#INCREMENT BETWEEN SUCCESSIVE VALUE LOCATIONS_^1NUM_"BSS NUM(6)_'SCRATCH_^1CONVRT BSS CONVRT(1)_#INDEX TO CONVERSION ROUTINE ENTRY_^1CV_#BSS CV(1)_(CURRENT NUMBER OF VALUES ON A LINE_^1DBUF_!BSS DBUF(1)€€_%NUMBER OF POSITIONS PER FIELD_^1START BSS START(1)_$INDEX TO DISK INPUT BUFFER_^1NWDS_!BSS NWDS(1)_%NUMBER OF WORDS LEFT TO DUMP_^1FSTRT BSS FSTRT(1)_$FIELD START INDEX_^1*_]_^1* THE FOLLOWING TABLE CONTAINS DATA FOR EACH TYPE OF DUMP._^1* EACH ENTRY CONSISTS OF 5 FIVE WORDS AS FOLLOWS,_^1*_]_^1*_$WORD 1_$ASCII CHARACTER IDENIFYING THE DUMP_^1*_$WORD 2_$NUMBER OF WORDS PER €€VALUE BEFORE CONVERSION_^1*_$WORD 3_$NUMBER OF VALUES PER LINE OF OUTPUT_^1*_$WORD 4_$INDEX TO THE CONVERSION ROUTINE TABLE (CONTBL)_^1*_$WORD 5_$NUMBER OF BUFFER WORDS PER FIELD_^1*_]_^1DMPTAB NUM $41,1,8,0,2 ASCII_^1_%NUM $48,1,8,4,4_!HEX_^1_%NUM $44,3,2,8,13 DOUBLE PRECISION_^1_%NUM $49,1,8,12,4 DECIMAL_^1_%NUM $53,2,2,16,13 SINGLE PRECISION_^1*_]_^1* ENTRY TABLE TO CONV€€ERSION ROUTINES_^1*_]_^1CONTBL NUM 0_^1_%RTJ ASCII_(ASCII_^1_%JMP* (*-3)_^1_%NUM 0_^1_%RTJ HEXO_)HEX_^1_%JMP* (*-3)_^1_%NUM 0_^1_%RTJ DP_+DOUBLE PRECISION_^1_%JMP* (*-3)_^1_%NUM 0_^1_%RTJ DECI_)DECIMAL_^1_%JMP* (*-3)_^1_%NUM 0_^1_%RTJ SP_+SINGLE PRECISION_^1_%JMP* (*-3)_^1*_]_^1* CHECKS FOR A COMMA_^1*_]_^1COMCHK NUM 0_^1_%RTJ* GET_*GET NEXT INPUT BUFFER CHARACTER_^1_%IN€€A -$2C_^1_%SAZ COMEX-*-1_#SKIP IF IT IS A COMMA_^1_%LDA* FSTRT_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO BRKPTD_^1COMEX JMP* (COMCHK)_$RETURN_^1*_]_^1* MASS STORAGE READ_^1*_]_^1READ_!NUM 0_^1_%RTJ- ($F4)_^1_%NUM $4800,0_^1THUD_!NUM 0_^1LOGU_!NUM $18B3_^1NOWDS NUM 96_^1INLOC NUM 0_^1MSB_"NUM 0_^1LSB_"NUM 0_^1*_]_^1READ1 LDA* THUD_^1_%SAZ READ2-*-1_#SKIP IF INPUT COMPLETE€€_^1_%JMP* READ1_(WAIT_^1READ2 LDA* LOGU_^1_%SAP READ3-*-1_#SKIP IF NO ERROR_^1_%JMP* READ+1_'TRY AGAIN_^1READ3 JMP* (READ)_'DONE_^1*_]_^1* THE FOLLOWING EMPTIES THE OUTPUT BUFFER_^1*_]_^1WRITE NUM 0_^1_%RTJ- ($F4)_^1_%NUM $4C00,0,0_^1LU_#NUM 0_^1OBIX_!NUM 0_,OUTPUT BUFFER INDEX_^1ESS_"NUM 0_^1*_]_^1WRITE1 LDA* LU-1_)GET THREAD_^1_%SAZ WRITE2-*-1_"SKIP WHEN DONE_^1_%JMP* W€€RITE1_'WAIT_^1WRITE2 JMP* (WRITE)_%EXIT_^1*_]_^1* THIS ROUTINE CONVERTS A HEX (ASCII) FIELD TO BINARY._^1*_]_^1HEX_"NUM 0_^1_%LDA* WDIX_^1_%STA* FSTRT_(SAVE FIELD START INDEX_^1_%CLR A_^1_%STA* NUM_*INITIALIZE CONVERTED VALUE_^1_%ENA -5_^1_%STA* NUM+1_(INITIALIZE DIGIT COUNT_^1*_]_^1HEX3_!RTJ* GET_*GET A CHARACTER_^1_%INA -$30_)UNDER $30 CHECK_^1_%SAP HEX4-*-1_$SKIP ON NUMERIC€€ - MAYBE_^1_%JMP* HEX10_(NOT NUMERIC_^1HEX4_!TRA Q_^1_%INQ -$A_^1_%SQM HEX405-*-1_"SKIP ON DIGIT 0 THRU 9_^1_%INA -7_^1_%INQ -7_^1_%SQM HEX10-*-1_#SKIP IF NON-NUMERIC_^1_%INQ -6_+UNDER $47 CHECK_^1_%SQP HEX10-*-1_#SKIP IF NON-NUMERIC_^1HEX405 LDQ* NUM_*CONVERTED DIGIT IN A_^1_%QLS 4_^1_%EAQ A_^1_%STA* NUM_*PACKED DIGIT IS STORED_^1_%RAO* NUM+1_^1_%LDA* NUM+1_^1_%SAN HEX5€€-*-1_$SKIP IF 4 OR LESS DIGITS_^1_%LDA* FSTRT_^1_%JMP- 40,I_)FORMAT ERROR - BACK TO CONTROL PROGRAM_^1HEX5_!JMP* HEX3_)CONTINUE_^1HEX10 RTJ* BACK_)BACK UP SCAN BY ONE_^1_%LDA* NUM_^1_%JMP* (HEX)_(RETURN_^1*_]_^1* THE FOLLOWING BACKS UP THE STATEMENT SCAN BY ONE CHARACTER._^1*_]_^1BACK_!NUM 0_^1_%LDA CHAR_^1_%SAN BACK1-*-1_#SKIP ON CHARACTER = RIGHT_^1_%RAO CHAR_^1_%LDA WDIX_€€^1_%INA -1_^1_%STA WDIX_^1_%JMP* (BACK)_^1BACK1 CLR A_^1_%STA CHAR_)SET TO LEFT CHARACTER_^1_%JMP* (BACK)_^1*_]_^1* THIS SUBROUTINE UNPACKS ONE CHARACTER FROM THE INPUT BUFFER_^1* AND RETURNS IT IN A._^1*_]_^1GET_"NUM 0_^1_%LDA (WDIX),I_$GET CHARACTER WORD_^1_%LDQ CHAR_)CHARACTER FLAG 0=LEFT_!1=RIGHT_^1_%SQN GET1-*-1_$SKIP ON RIGHT CHARACTER_^1_%ALS 8_^1GET1_!AND- $A_+UN€€PACK CHARACTER_^1_%SQZ GET2-*-1_$SKIP ON LEFT_^1_%CLR Q_^1_%STQ CHAR_)UPDATE CHARACTER FLAG_^1_%RAO WDIX_)UPDATE WORD INDEX_^1_%JMP* (GET)_(RETURN_^1GET2_!RAO CHAR_)UPDATE CHARACTER FLAG_^1_%LDQ WDIX_)TEST FOR BUFFER END_^1_%INQ -37_^1_%SQZ OFLOW-*-1_#SKIP ON INPUT BUFFER END - ERROR_^1_%JMP* (GET)_^1OFLOW ENA 0_^1_%JMP- 40,I_)BACK TO BRKPTD_^1*_]_^1* THIS ROUTINE MOVES D€€ATA FROM A WORD DIRECTLY TO_^1* THE OUTPUT BUFFER. NO CONVERSION IS NECESSARY._^1*_]_^1ASCII NUM 0_^1_%LDQ START_^1_%LDA INBUF,Q_%GET A VALUE FOR OUTPUT_^1_%LDQ OBIX_)INDEX TO CURRENT OUTPUT BUFFER LOCATION_^1_%STA* OUTBUF,Q_$STORE IN BUFFER_^1_%JMP* (ASCII)_%THATS ALL_^1*_]_^1* THIS ROUTINE CONVERTS THE CONTENTS OF AN INPUT BUFFER VALUE_^1* TO 4 ASCII HEX DIGITS AND STORES TH€€EM IN THE OUTPUT BUFFER._^1*_]_^1HEXO_!NUM 0_^1_%LDQ START_^1_%LDA INBUF,Q_%GET VALUE FOR CONVERSION_^1HEXM1 ENQ 1_^1_%STQ* HNUM_)INITIALIZE COUNT_^1HEXO1 CLR Q_^1_%LLS 4_,GET 1 HEX DIGIT_^1_%LDQ* HEXCON,Q_$LOOK UP ASCII_^1_%QLS 8_^1_%STQ* HNUM+1_^1_%CLR Q_^1_%LLS 4_,GET 2ND HEX DIGIT_^1_%LDQ* HEXCON,Q_$LOOK UP ASCII_^1_%ADQ* HNUM+1_'PACK_^1_%STQ* HNUM+1_^1_%LDQ* HNUM_^1€€_%INQ -1_^1_%SQM HEXO2-*-1_#SKIP IF DONE WITH ALL 4 DIGITS_^1_%STQ* HNUM_^1_%LDQ* HNUM+1_^1_%STQ* HNUM+2_^1_%JMP* HEXO1_^1*_]_^1HEXO2 LDA* HNUM+2_'GET MOST SIGNIFICANT PAIR_^1_%LDQ OBIX_^1_%STA* OUTBUF,Q_$STORE IN OUTPUT BUFFER_^1_%LDA* HNUM+1_'GET LEAST SIGNIFICANT PAIR_^1_%STA* OUTBUF+1,Q_"STORE IN BUFFER_^1_%JMP* (HEXO)_^1*_]_^1HEXM_!NUM 0_,SPECIAL ENTRY FOR LINE HEADERS ET€€C._^1_%LDQ* HEXM_^1_%STQ* HEXO_)SET FOR NORMAL HEXO EXIT_^1_%JMP* HEXM1_^1*_]_^1HNUM_!BSS HNUM(3)_%SCRATCH FOR HEXO AND DECI_^1*_]_^1* HEX-ASCII CONVERSION TABLE_^1*_]_^1HEXCON NUM $30,$31,$32,$33,$34,$35,$36,$37,$38,$39_^1_%NUM $41,$42,$43,$44,$45,$46_^1_%EJT_]_^1*_]_^1* THIS ROUTINE CONVERTS AN INPUT BUFFER VALUE TO 5 ASCII_^1* DECIMAL DIGITS AND STORES IT IN THE OUTPUT BUFFE€€R._^1*_]_^1DECI_!NUM 0_^1_%LDQ START_^1_%LDA* INBUF,Q_%GET VALUE FOR CONVERSION_^1_%LDQ =N$2030_%SET FOR BLANK_^1_%SAP DECI1-*-1_#SKIP ON POSITIVE NUMBER_^1_%LDQ =N$2D30_^1_%TCA A_,SET NUMBER POSITIVE FOR PROCESSING_^1DECI1 STQ* HNUM_)STORE MINUS SIGN OR BLANK_^1_%LDQ =N$3030_^1_%STQ* HNUM+1_'SET ALL DIGITS TO ZERO_^1_%STQ* HNUM+2_^1_%CLR Q_^1_%DVI =N10000_^1_%ADD* HNUM_^€€1_%STA* HNUM_)NUMBER OF TEN THOUSANDS PACKED_^1_%TRQ A_^1_%CLR Q_^1_%DVI =N1000_^1_%ADD* HNUM+1_'NUMBER OF ONE THOUSANDS PACKED_^1_%ALS 8_^1_%STA* HNUM+1_^1_%TRQ A_^1_%CLR Q_^1_%DVI =N100_^1_%ADD* HNUM+1_'NUMBER OF ONE HUNDREDS PACKED_^1_%STA* HNUM+1_^1_%TRQ A_^1_%CLR Q_^1_%DVI =N10_^1_%ADD* HNUM+2_^1_%ALS 8_,NUMBER OF TENS PACKED_^1_%AAQ A_,NUMBER OF ONES PACKED_^1_%ST€€A* HNUM+2_^1*_]_^1_%LDQ OBIX_^1_%STQ- I_^1_%ENQ 2_^1DECI2 LDA* HNUM,Q_'STORE RESULTS IN OUTPUT BUFFER_^1_%STA* OUTBUF,B_^1_%INQ -1_^1_%SQM DECI3-*-1_#SKIP WHEN MOVE COMPLETE_^1_%JMP* DECI2_^1DECI3 JMP* (DECI)_'DONE_^1*_]_^1OUTBUF BSS OUTBUF(36)_"OUTPUT BUFFER_^1INBUF BSS INBUF(96)_#INPUT BUFFER - DISK_^1*_]_^1DP_#ENA 0_,**********HOOK FOR DOUBLE PRECISION OUTPUT_^1_%JMP- €L40,I_^1SP_#JMP* DP_+**********HOOK FOR SINGLE PRECISION OUTPUT_^1_%END_]_^__LPEFSTOR CSY/ A28 P€1_%NAM EFSTOR_'DECK-ID A28 MSOS 4.1_-SUMMARY-079_^1*_$PROGRAM TO MOVE DATA TO MASS MEMORY ENGINEERING FILE_+*_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1************************************************************************_^1*_$THIS PROGRAM IS SCHED€€ULED BY EFDATA TO CAUSE RECORDATION OF_#*_^1*_$DEVICE ERRORS IN THE ENGINEERING FILE DATA AREA. THIS SEQUENCE *_^1*_$APPLIES TO NON-MASS MEMORY DEVICES ONLY SINCE DATA FOR MASS_#*_^1*_$MEMORY DEVICES IS SAVED IN EFMM. HOWEVER, EACH TIME THIS_%*_^1*_$PROGRAM RUNS, IT WILL RECORD NEW MASS MEMORY ERRORS ON MASS_#*_^1*_$MEMORY._X*_^1***************************************************€€*********************_^1_%SPC 2_^1************************************************************************_^1*_$THE ENGINEERING FILE EXISTS ON MASS MEMORY IN AN AREA DEFINED_!*_^1*_$THROUGH THE EXTENDED CORE TABLE. THE INITIALIZER ZEROS A 99_"*_^1*_$SECTOR AREA ON MASS MEMORY, ONE SECTOR PER POSSIBLE SYSTEM_$*_^1*_$LOGICAL UNIT. EACH SECTOR CAN HOLD UP TO 24 4 WORD ERROR DATA *€€_^1*_$BLOCKS IN A PUSH DOWN STACK. EACH FOUR WORD BLOCK IS DEFINED_!*_^1*_$AS FOLLOWS...._Q*_^1*_*WORD 1--BITS 0-6 YEAR OF ERROR_;*_^1*_2BITS 7-10 MONTH OF ERROR_9*_^1*_2BITS 11-15 DAY OF ERROR_:*_^1*_*WORD 2--MILITARY TIME OF ERROR_<*_^1*_*WORD 3--BITS 0-7 ERROR CODE_?*_^1*_2BITS 8-15 SECONDS OF ERROR_7*_^1*_*WORD 4--HARDWARE STATUS FOR ERROR_9*_^1****************************€€********************************************_^1_%SPC 2_^1*_$PROGRAM EXTERNALS_^1_%EXT MMEF_)MASS MEMORY ENGINEERING FILE DATA_^1_%EXT EFDATA_'TEMPORARY EF DATA STACK_^1_%EXT CEFDTA_'QUANTITY OF ENTRIES IN EF DATA STACK_^1_%EXT BSYEFS_'EFSTOR BUSY FLAG_^1_%EXT EFCOVL_'EFDATA STACK OVERFLOW COUNTER_^1_%SPC 2_^1*_$PROGRAM EQUIVALENCES_^1_%EQU FIVE($43)_#NUMBER FIVE_^1_%EQU AD€€ISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU P(4)_)PROGRAM PRIORITY_^1_%EQU LUMM($C2)_#ADDRESS OF LIBRARY LU_^1_%EQU LUCMNT($FC)_!ADDRESS OF COMMENT LU_^1_%EQU EXTBV4($E9)_!ADDRESS OF EXTENDED CORE TABLE_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION OF THE PROGRAM WILL MOVE THE TEMPORARY€€ ERROR_%*_^1*_$STACK DATA FROM EFDATA INTO A TEMPORARY ARRAY. THE DATA_'*_^1*_$ENTRIES ARE THEN MOVED TO MASS MEMORY SINGLY FOR EACH OF THE_"*_^1*_$MAXIMUM OF FIVE DATA BLOCKS. WHEN THIS IS DONE, THE STACK ENTRY*_^1*_$COUNTER IS EXAMINED TO SEE IF MORE ENTRIES HAVE ACCUMULATED_#*_^1*_$SINCE IT WAS MOVED. IF MORE HAVE BEEN ENTERED, THE PROCESS IS *_^1*_$REPEATED UNTIL THE COUNTE€€R IS ZERO._<*_^1************************************************************************_^1_%SPC 2_^1EFSTOR NUM $C8FE_(FIND OUT PROGRAM LOCATION_^1_%STA PLOC_)SAVE IN RELEASE REQUEST_^1_%IIN 0_^1_%LDA+ CEFDTA_'SAVE NUMBER OF ENTRIES IN STACK_^1BLOOP STA* TCEF_^1_%ENQ 24_^1MTT_"LDA+ EFDATA,Q_$SAVE FULL STACK_^1_%STA TEFD,Q_^1_%INQ -1_^1_%SQM ALLMOV_^1_%JMP* MTT_^1ALLMOV CLR€€ A_,CLEAR STACK ENTRY FLAG_^1_%STA+ CEFDTA_^1_%EIN 0_^1_%STA- I_^1LOOPS ENQ 20_+POINTS TO LSB START OF EF DATA_^1_%LDA- (EXTBV4),Q_"GET SECTOR OF MM EF_^1_%ADD TEFD,I_'ADD LU INCREMENT_^1_%INA -1_^1_%STA* MMLSBA_'SAVE IN DISK I/O REQUESTS_^1_%STA* MMLSBB_^1_%ENQ 3_,MOVE FIRST ENTRY TO FRONT OF BUFFER_^1_%RAO- I_^1MOVETW LDA TEFD,B_^1_%STA WEFD,Q_^1_%INQ -1_^1_%SQM DT_^1_€€%JMP* MOVETW_^1*_$READ DATA SECTOR_^1DT_#FREAD LUMM,CDT-DT-1,SEFD-DT-1,96,B,P,P,I,1,0_^1_%NUM 0_^1MMLSBA NUM 0_^1_%JMP- (ADISP)_^1CDT_"SQP WDT_*SKIP IF NO ERROR_^1ERROR FWRITE LUCMNT,DONE-ERROR-1,MERROR-ERROR-1,12,A,P,P,I,1,0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1*_$WRITE DATA BACK ON MASS MEMORY_^1WDT_"FWRITE LUMM,CWDT-WDT-1,WEFD-WDT-1,96,B,P,P,I,1,0_^1_%NUM 0_^1MMLSBB N€€UM 0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1SCTR_!NUM 0_^1TCEF_!NUM 0_^1CWDT_!SQP NOE_*SKIP IF NO ERROR_^1_%JMP* ERROR_^1NOE_"LDA* TCEF_)CHECK IF MORE STACK ENTRIES_^1_%INA -1_^1_%SAN MORE_)ZERO SAYS ALL DONE_^1_%JMP* ENDCHK_^1MORE_!RAO* SCTR_)BUMP LOOP COUNTER_^1_%STA* TCEF_)RESTORE NEW STACK SIZE_^1_%LDA* SCTR_)COMPUTE INDEX_^1_%MUI- FIVE_^1_%STA- I_^1_%JMP* LOOPS_(GO TO T€€RANSFER NEXT ENTRY_^1ENDCHK IIN 0_^1_%LDA+ CEFDTA_'SEE IF MORE STACK ENTRIES NOW_^1_%SAZ NOMORE_^1_%JMP* BLOOP_(MORE ENTRIES SO LOOP BACK THROUGH_^1NOMORE STA+ BSYEFS_'CLEAR BUSY FLAG_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION TAKES THE NEW MASS MEMORY TABLE ENTRIES THAT_%*_^1*_$HAVE ACCUMULATED SINCE THIS PROGRAM RAN LA€€ST AND PUTS THEM_$*_^1*_$IN THE MASS MEMORY EF DATA AREA._?*_^1************************************************************************_^1_%SPC 2_^1_%ENQ 49_+MOVE MASS MEMORY ENTRIES INTO TEMP AREA_^1MRMM_!LDA+ MMEF,Q_^1_%STA* TMMEF,Q_^1_%INQ -1_^1_%SQM MMM_^1_%JMP* MRMM_^1MMM_"EIN 0_^1_%CLR A_,INITIALIZE MM LOOP COUNTER_^1_%STA* SCTR_^1ZLOOP MUI- FIVE_^1_%STA- I_,USE I-REG €€AS TABLE INDEX_^1_%LDA* TMMEF,I_%IS SLOT FILLED_^1_%SAN ACTIVE_'YES IF NON-ZERO_^1_%JMP* DONE_)NO MORE ENTRIES_^1ACTIVE ENQ 20_+POINTS TO LSB OF MM DATA BLOCK_^1_%LDA- (EXTBV4),Q_^1_%ADD* TMMEF,I_%COMPUTE MASS MEMORY DATA ADDRESS_^1_%INA -1_^1_%STA* MMLSBC_'SAVE IN REQUESTS_^1_%STA* MMLSBD_^1_%RAO- I_,INCREMENT INDEX_^1_%LDA- I_^1_%STA* ISAVE_(SAVE INDEX_^1*_$READ DATA FROM MASS€€ MEMORY_^1MMR_"FREAD LUMM,CMMR-MMR-1,SEFD-MMR-1,96,B,P,P,I,1,0_^1_%NUM 0_^1MMLSBC NUM 0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1ISAVE NUM 0_^1MMFLOP NUM 0_^1QSAVE NUM 0_^1CMMR_!SQP MMROK_(SKIP IF NO ERROR_^1_%JMP* ERROR_^1MMROK LDA* ISAVE_(RESTORE INDEX TO MM TABLE_^1_%STA- I_^1_%ENQ 0_^1YLOOP ENA -4_+SMALL LOOP COUNTER_^1_%STA* MMFLOP_^1_%STQ* QSAVE_(SAVE Q_^1XLOOP L€€DA SEFD,Q_'LOOK AT MASS MEMORY BLOCK_^1_%EOR* TMMEF,I_%COMPARE TO CORE BLOCK_^1_%SAN NXENTY_'SKIP IF NOT THE SAME_^1_%RAO* MMFLOP_'INCREMENT BLOCK ENTRY COUNTER_^1_%LDA* MMFLOP_^1_%SAN BUMPX_(SKIP IF BLOCK NOT DONE_^1_%JMP* ADONE_(4 WORD BLOCK IS SAME SO ALL NEW ENTRIES DONE_^1BUMPX INQ 1_,INCREMENT BLOCK POINTERS_^1_%RAO- I_^1_%JMP* XLOOP_(LOOK AT NEXT ENTRY IN 4 WORD BLOCK_^€€1NXENTY LDQ* QSAVE_(RESTORE BLOCK POINTERS--BLOCKS NOT SAME_^1_%LDA* ISAVE_^1_%STA- I_^1_%INQ 4_,INCREMENT INTO NEXT MM BLOCK_^1_%ENA -95_*CHECK IF ALL 24 MM ENTRIES CHECKED_^1_%AAQ A_^1_%SAP NOSAME_'ALL MM BLOCKS CHECKED AND NONE MATCH CORE_^1_%JMP* YLOOP_(MORE 4 WORD BLOCKS TO CHECK_^1NOSAME ENQ 3_,SETUP AND MOVE NEW DATA TO MM_^1MDTFR LDA* TMMEF,B_^1_%STA* WEFD,Q_^1_%INQ €€-1_^1_%SQM MMW_^1_%JMP* MDTFR_^1*_$WRITE NEW ENTRY TO MASS MEMORY_^1MMW_"FWRITE LUMM,CMMW-MMW-1,WEFD-MMW-1,96,B,P,P,I,1,0_^1_%NUM 0_^1MMLSBD NUM 0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1CMMW_!SQP MMWOK_^1_%JMP* ERROR_(EXIT ON MASS MEMORY ERROR_^1MMWOK RAO* SCTR_)SEE IF ALL ENTRIES IN CORE PROCESSED_^1_%LDQ* SCTR_^1_%ENA -10_^1_%AAQ A_^1_%SAZ ADONE_(SKIP IF ALL NEW ENTRIES€€ MOVED_^1_%TRQ A_,PUT BLOCK INDEX INTO A_^1_%JMP* ZLOOP_(GO CHECK NEXT CORE BLOCK_^1_%EJT_]_^1************************************************************************_^1*_$THIS SECTION CHECKS TO DETERMINE IF THE TEMPORARY HOLDING STACK *_^1*_$FOR NON-MASS MEMORY ERRORS HAS OVERFLOWED SINCE THIS PROGRAM_"*_^1*_$RAN , AND IF SO, PRINTS AN ERROR INDICATION._3*_^1*********************€€***************************************************_^1_%SPC 2_^1ADONE LDA+ EFCOVL_'LOOK AT STACK HOLDING OVERFLOW COUNTER_^1_%SAZ DONE_)SKIP IF NO OVERFLOW_^1*_$INDICATE STACK OVERFLOW_^1SERR_!FWRITE LUCMNT,CSERR-SERR-1,MSERR-SERR-1,9,A,P,P,I,1,0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1CSERR CLR A_,CLEAR OVERFLOW FLAG_^1_%STA+ EFCOVL_^1DONE_!RTJ- (AMONI)_%RELEASE MEMORY_^1_%N€€UM $1801_^1PLOC_!NUM 0_^1_%EJT_]_^1************************************************************************_^1*_$DATA AND MESSAGE BUFFERS_G*_^1************************************************************************_^1_%SPC 2_^1*_]_^1*_$TEMPORARY AREA FOR MASS MEMORY ERROR ARRAY_^1*_]_^1TMMEF BZS TMMEF(50)_^1*_]_^1*_$TEMPORARY AREA FOR NON-MASS MEMORY HOLDING STACK_^1*_]_^1TEF€D_!BZS TEFD(25)_^1*_]_^1*_$BUFFER FOR NEWEST ERROR TABLE ENTRY_^1*_]_^1WEFD_!BZS WEFD(4)_^1*_]_^1*_$CURRENT MASS MEMORY EF ARRAY FOR A LU_^1*_]_^1SEFD_!BZS SEFD(96)_^1MERROR ALF 12,EFSTOR MASS MEMORY ERROR_^1MSERR ALF 09,EF STACK OVERFLOW_^1_%END_]_^__PEFLIST CSY/ A29 P€1_%NAM EFLIST_'DECK-ID A29 MSOS 4.1_-SUMMARY-079_^1*_$PROGRAM TO LIST INFORMATION FROM ENGINEERING FILE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1* PROGRAM WILL PRINT DATA FROM THE ENGINEERING FILE IN 3 MODES..._^1*_"ALL SYSTEM LOGICAL UNITS (Q-REG.€€ = 0)_^1*_"A SPECIFIED LOGICAL UNIT (Q-REG. = 1)_^1*_"ALL MASS MEMORY UNITS_#(Q-REG. = 2)_^1* THE Q-REGISTER ON ENTRY SPECIFIES THE OPERATION_^1_%SPC 4_^1* PROGRAM EXTERNALS_^1_%EXT LOG1A_(TABLE OF LOGICAL UNIT PDT ADDRESSES_^1_%EXT MMEF_)MASS MEMORY ERROR STORAGE_^1_%SPC 2_^1* PROGRAM EQUIVALENCES_^1_%EQU TEN($46)_$CELL CONTAINING 10_^1_%EQU M00FF($A)_#$00FF MASK_^1_%EQU€€ ZERO($22)_#CELL CONTAINING ZERO_^1_%EQU AMONI($F4)_"ADDRESS OF DISPATCHER_^1_%EQU LUCMNT($FC)_!COMMENT LOGICAL UNIT_^1_%EQU LUMM($C2)_#LIBRARY MASS MEMORY UNIT_^1_%EQU M000F(6)_$$000F MASK_^1_%EQU EXTBV4($E9)_!ADDRESS OF EXTENDED CORE TABLE_^1_%EQU M007F($9)_#$007F MASK_^1_%EQU LISTLU($FB)_!STANDARD PRINT OUTPUT UNIT_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU P(4)€€_)PROGRAM PRIORITY_^1_%EQU M0007(5)_$$0007 MASK_^1_%EQU EREQST(8)_#PDT REQUEST STATUS_^1_%SPC 2_^1EFLIST NUM $C8FE_(DETERMINE PROGRAM LOCATION_^1_%STA PGMADR_)AND STORE IN RELEASE REQUEST_^1_%QLS 1_,VECTOR IS TABLE OF TWO WORD INSTRUCTIONS_^1_%JMP* VECTOR,Q_$BRANCH TO PROCESSOR FOR SPECIFIED TASK_^1_%SPC 2_^1VECTOR JMP ALLLU_(ALL LOGICAL UNITS_^1_%JMP ONELU_(ONE LOGICAL UN€€IT_^1_%JMP MMLU_)ALL MASS MEMORY LOGICAL UNITS_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$P R I N T D A T A F O R A L L L O G I C A L U N I T S_$*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ALLLU LDA+ LOG1A_(MAXIMUM SYSTEM UNITS_^1_%STA* MAXLU_(SAVE MAX LU NUMBER_^1*€€_$PRINT LISTING HEADER_^1BIGHDR FWRITE LISTLU,ALOOP-BIGHDR-1,HDR1-BIGHDR-1,29,A,P,P,I,1,0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1MAXLU NUM 0_-QUANTITY OF SYSTEM LOGICAL UNITS_^1N28_"NUM 28_^1ALOOP LDQ* CURRLU_'GET CURRENT LU NUMBER_^1_%LDA+ LOG1A,Q_%GET PDT ADDRESS FOR INDEXING_^1_%STA- I_^1_%LDA- EREQST,I_$SAVE CLASS/TYPE CODES_^1_%STA* RQ_^1_%ARS 11_+ISOLATE CLASS CODE_^1_%€€AND- M0007_^1_%INA -2_+CHECK FOR MASS MEMORY_^1_%STA* MMFLAG_'SET MASS MEMORY FLAG_^1_%LDQ MMLUS_(MASS MEMORY REQUEST_^1_%SQZ NOTMMP_'SKIP IF NOT_^1_%SAZ NOTMMP_'SKIP IF MM LU_^1_%JMP MANYLU_'GO TO BUMP COUNTER_^1NOTMMP LDA* RQ_+GET REQUEST STATUS_^1_%ARS 4_,ISOLATE TYPE CODE_^1_%AND- M007F_^1_%TRA Q_,SAVE TYPE CODE_^1_%INA -44_*CHECK VALID TYPE_^1_%SAM OKTYPE_'TYPE OK(0-4€€3) IF MINUS_^1_%ENQ 44_+SET TYPE TO UNDEFINED CODE FOR MESSAGE_^1OKTYPE TRQ A_,RESTORE INDEX TO TYPE_^1_%MUI* N28_*COMPUTE INDEX INTO LU MESSAGES_^1_%STA- I_^1_%ENQ 27_+MOVE 28 WORD BLOCK_^1MOVMOR LDA LUDESC,B_$MOVE MESSAGE INTO OUTPUT BUFFER_^1_%STA HDR2+13,Q_^1_%INQ -1_^1_%SQM MDESC_^1_%JMP* MOVMOR_^1MDESC LDA* CURRLU_'GET LU NUMBER_^1_%RTJ HXDCU_(CONVERT TO ASCII_^1_%ST€€A HDR2+11_%SAVE IN MESSAGE_^1*_$PRINT LU NO. AND DESCRIPTION_^1PHDR2 FWRITE LISTLU,0,HDR2-PHDR2-1,41,A,P,P,I,1,0_^1*_$PRINT INFO HEADINGS_^1PHDR3 FWRITE LISTLU,CPHDR3-PHDR3-1,HDR3-PHDR3-1,31,A,P,P,I,1,0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1MMCTR NUM 0_^1MMFLAG NUM 0_^1RQ_#NUM 0_^1CPHDR3 LDA MMLUS_(LOOK AT MASS MEMORY MODE_^1_%SAN MM_+SKIP IF MASS MEMORY_^1_%JMP* NOMM_€€)NOT MASS MEMORY_^1MM_#ENQ -10_^1_%STQ* MMCTR_(SET UP MASS MEMORY ERROR COUNTER_^1_%LDA =XMMEF_'GET BASE ADDRESS OF TABLE_^1_%STA- I_^1LOOKMM LDA- (ZERO),I_$GET LU ELEMENT OF TABLE ENTRY_^1_%SUB* CURRLU_'IS LU SAME AS CURRENT LU_^1_%SAZ CURR_)SKIP IF EQUAL_^1_%LDA- I_^1_%INA 4_,NOT SAME -- ADJUST TABLE INDEX_^1_%STA- I_^1_%JMP* NOCURR_'GO BACK AND LOOK AT NEXT ENTRY_^1CURR_!RAO€€- I_,BUMP TABLE POINTER_^1_%RTJ PDATA_(PRINT DATA_^1NOCURR RAO* MMCTR_(TEN MM ENTRIES_^1_%LDA* MMCTR_(ARE ALL CHECKED_^1_%SAZ ALLMM_(SKIP IF YES_^1_%RAO- I_,ADJUST INDEX_^1_%JMP* LOOKMM_'LOOK AT NEXT MM_^1ALLMM JMP NXTLU_(LOOK FOR NEXT LU_^1CURRLU NUM 1_^1NOMM_!ENQ 20_+POINTS TO LSB OF MM DATA BLOCK_^1_%LDA- (EXTBV4),Q_"GET SECTOR OF DATA ON MM_^1_%ADD* CURRLU_'COMPUTE SECTOR€€ ADDRESS FOR CURRENT BLOCK_^1_%INA -1_^1_%STA* MMLSB_(SAVE IN REQUEST_^1*_$READ DATA FROM MASS MEMORY_^1MMDTA FREAD LUMM,CMMDTA-MMDTA-1,CDATA-MMDTA-1,96,B,P,P,I,1,0_^1_%NUM 0_^1MMLSB NUM 0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1CMMDTA SQP LX_+SKIP ON NO ERROR_^1*_$MASS MEMORY ERROR_^1ERRMM FWRITE LUCMNT,FINISH-ERRMM-1,MERRMM-ERRMM-1,11,A,P,P,I,1,0_^1_%JMP- (ADISP)_%WAIT F€€OR COMPLETION_^1MCTR_!NUM 0_^1LX_#RTJ* FOWWA_(COMPUTE ABSOLUTE ADDRESS_^1FOWWA NUM 0_^1_%LDA* FOWWA_^1_%ADD =XCDATA-FOWWA_^1_%STA- I_,SAVE ADDRESS BASE_^1_%ENQ -24_*24 ENTRIES_^1_%STQ* MCTR_^1GPDATA RTJ PDATA_(WRITE DATA LINE_^1_%RAO- I_,ADJUST INDEX_^1_%RAO* MCTR_)SEE IF ALL 24 ENTRIES DONE_^1_%LDA* MCTR_^1_%SAZ NXTLU_(ALL DONE IF ZERO_^1_%JMP* GPDATA_'DO NEXT ENTRY_^1NXTLU€€ LDA ONELUF_'WAS REQUEST FOR ONE LU ONLY_^1_%SAZ MANYLU_^1_%JMP* FINFRM_'ALL DONE_^1MANYLU RAO CURRLU_'LOOK IF ALL DONE_^1_%LDA MAXLU_^1_%SUB CURRLU_^1_%SAM FINFRM_^1_%JMP ALOOP_(MORE TO DO_^1*_$END OUTPUT WITH TOP OF FORM_^1FINFRM FWRITE LISTLU,FINISH-FINFRM-1,HDR1-FINFRM-1,1,A,P,P,I,1,0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1CDATA BZS CDATA(96)_^1*_$PRINT COMMENT TO O€€PERATOR ON COMPLETION_^1FINISH FWRITE LUCMNT,MEND-FINISH-1,MSGEND-FINISH-1,9,A,P,P,I,1,0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1MSGEND ALF 9,LISTING COMPLETED_^1MEND_!RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1801_^1PGMADR NUM 0_^1ONELUF NUM 0_^1MMLUS NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$P R I N T D A T A F O R€€ O N E L O G I C A L U N I T_'*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ONELU RAO* ONELUF_'SET ONE LU FLAG_^1GETLU FWRITE LUCMNT,ASKC-GETLU-1,ASKMSG-GETLU-1,12,A,P,P,I,1,0_^1_%JMP- (ADISP)_^1ASKMSG ALF 12,ENTER LOGICAL UNIT (XX)_^1ASKC_!FREAD LUCMNT,READLU-ASKC-1,LUBUF-ASKC-1,1,A,P,P,I,1,0_^1_%JMP- (ADISP)_^1LUBUF NU€€M 0_^1UNIT_!NUM 0_^1READLU SQP LURDOK_'SKIP IF NO ERROR_^1_%JMP* GETLU_(TRY AGAIN_^1LURDOK LDA* LUBUF_^1_%SUB* N3030_(REMOVE ASCII BASE_^1_%CLR Q_^1_%LLS 8_^1_%ALS 8_^1_%STA* UNIT_)SAVE UNITS_^1_%TRQ A_^1_%MUI- TEN_^1_%ADD* UNIT_)COMPOSE LU NO._^1_%STA CURRLU_^1_%LDQ+ LOG1A_(CHECK FOR A VALID LU NUMBER_^1_%TCA A_^1_%AAQ Q_^1_%SQP GOODLU_^1_%JMP* GETLU_(REQUEST INPUT AGAI€€N_^1GOODLU JMP BIGHDR_'GET DATA_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$P R I N T D A T A F O R M A S S M E M O R Y U N I T S_$*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MMLU_!RAO* MMLUS_(SET MASS MEMORY FLAG_^1_%JMP ALLLU_^1_%EJT_]_^1***************************€€*********************************************_^1*_]_'*_^1*_$D A T A P R I N T I N G S U B R O U T I N E_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1PDATA NUM 0_^1_%LDQ- (ZERO),I_$GET FIRST TABLE ELEMENT (DAY/MONTH/YEAR)_^1_%SQN ISDATA_'ZERO INDICATES NO DATA_^1_%LDA- I_,ADJUST INDEX_^1_%INA 3_^1_%STA- I_^1_%JMP* (PDATA)_€€%PRINT NO DATA_^1ISDATA CLR A_^1_%LLS 5_,ISOLATE DAY_^1_%RTJ* HXDCU_(CONVERT DAY TO ASCII_^1_%LDQ =N$2020_%RE-FORMAT FOR MESSAGE_^1_%LLS 8_^1_%STQ* OBUFF+4_%SAVE IN MESSAGE_^1_%STA* OBUFF+5_^1_%LDQ- (ZERO),I_^1_%CLR A_,ISOLATE MONTH INDEX_^1_%LLS 9_^1_%AND- M000F_^1_%INA -1_^1_%ALS 1_^1_%TRA Q_,INDEX INTO MONTH ASCII ARRAY_^1_%LDA MONTH,Q_^1_%STA* OBUFF+6_%SAVE ASCII MONT€€H_^1_%INQ 1_^1_%LDA MONTH,Q_^1_%STA* OBUFF+7_^1_%LDA- (ZERO),I_$ISOLATE YEAR_^1_%AND- M007F_^1_%RTJ* HXDCU_(CONVERT TO ASCII_^1_%STA* OBUFF+8_%SAVE IN MESSAGE_^1_%RAO- I_^1_%LDA- (ZERO),I_$GET 2ND TABLE ELEMENT (MILITARY TIME)_^1_%RTJ* HXDC_)CONVERT TO ASCII_^1_%STA* TEMP_)RE-FORMAT SHUFFLE_^1_%TRQ A_^1_%ENQ $20_^1_%LLS 8_^1_%STQ* OBUFF+10_^1_%ENQ $3A_^1_%LLS 8_^1_%LDA* TEMP€€_^1_%LLS 8_^1_%STQ* OBUFF+11_$SAVE IN MESSAGE_^1_%STA* OBUFF+12_^1_%RAO- I_^1_%LDA- (ZERO),I_$GET 3RD TABLE ELEMENT (SECONDS/ERROR CODE)_^1_%ARS 8_^1_%AND- M00FF_(ISOLATE SECONDS_^1_%RTJ* HXDCU_(CONVERT TO ASCII_^1_%STA* OBUFF+13_$SAVE IN MESSAGE_^1_%LDA- (ZERO),I_^1_%AND- M00FF_(ISOLATE ERROR CODE_^1_%RTJ* HXDCU_(CONVERT TO ASCII_^1_%STA* OBUFF+18_$SAVE IN MESSAGE_^1_%RAO- I_^1€€_%LDA- (ZERO),I_$GET 4TH TABLE ELEMENT (HARDWARE STATUS)_^1_%RTJ* HEXASC_'CONVERT TO ASCII_^1_%STQ* OBUFF+25_$STORE IN MESSAGE_^1_%STA* OBUFF+26_^1_%LDA- I_^1_%STA* ISAVE_(SAVE INDEX TO TABLE_^1*_$PRINT OUTPUT BUFFER_^1WOBUFF FWRITE LISTLU,COBUFF-WOBUFF-1,OBUFF-WOBUFF-1,27,A,P,P,I,1,0_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_^1OBUFF ALF 27,_^1COBUFF LDA* ISAVE_(RESTORE POINTER TO T€€ABLE_^1_%STA- I_^1_%JMP* (PDATA)_%RETURN_^1N3030 NUM $3030_^1ISAVE NUM 0_^1TEMP_!NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$H E X T O D E C I M A L A S C I I C O N V E R S I O N_%*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1HXDCU NUM 0_,HEX-DECIMAL 2 DIGIT €€CONVERSION_^1_%CLR Q_^1_%DVI- TEN_*(A)=TENS (Q)=UNITS_^1_%ALS 8_^1_%AAQ A_,FORMAT ASCII OF DECIMAL_^1_%ADD* N3030_(ADD ASCII NUMBER BASE_^1_%JMP* (HXDCU)_%RETURN_^1HXDC_!NUM 0_,HEX-DECIMAL 4 DIGIT CONVERSION_^1_%CLR Q_^1_%DVI* N1000_((A)=THOUSANDS (Q)=REM_^1_%STA* S1000_(SAVE THOUSANDS_^1_%TRQ A_^1_%CLR Q_^1_%DVI* N100_)(A)=HUNDREDS_!(Q)=REM_^1_%ALS 8_,FORMAT THOUSAND/HUN€€DRED_^1_%ADD* S1000_^1_%ALS 8_^1_%ADD* N3030_(ADD ASCII NUMBER BASE_^1_%STA* S1000_(SAVE_^1_%TRQ A_^1_%RTJ* HXDCU_(DO TENS/UNITS_^1_%LDQ* S1000_^1_%JMP* (HXDC)_'RETURN (Q)=THOU/HUND (A)=TEN/UNIT_^1S1000 NUM 0_^1N1000 NUM 1000_^1N100_!NUM 100_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$H E X T O A S C I I C O N V E R €€S I O N_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1HEXASC NUM 0_,HEX-ASCII NUMBER CONVERSION_^1_%TRA Q_^1_%RTJ* CHAR_^1_%STA* C01_^1_%RTJ* CHAR_^1_%ALS 8_^1_%ADD* C01_*MAKE LOWER BYTES_^1_%STA* C01_^1_%RTJ* CHAR_^1_%STA* C02_^1_%RTJ* CHAR_^1_%ALS 8_^1_%ADD* C02_*MAKE UPPER BYTES_^1_%LDQ* C01_^1_%LLS 16_^1_%JMP* (HEXASC)_€€$RETURN (Q)=UPPER BYTES (A)=LOWER BYTES_^1C01_"NUM 0_^1C02_"NUM 0_^1CHAR_!NUM 0_,SUBROUTINE TO CONVERT A BYTE_^1_%CLR A_^1_%LRS 4_^1_%ALS 4_^1_%INA -10_^1_%SAP ATHRUF_^1_%INA $3A_^1_%JMP* (CHAR)_^1ATHRUF INA $41_^1_%JMP* (CHAR)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$B A S I C M E S S A G E S K E L E T O N S_4*€€_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1HDR1_!NUM $200C_^1_%ALF 27,_0ENGINEERING FILE INFORMATION LISTING_^1_%NUM $0D0D_^1HDR2_!NUM $200D_^1_%ALF 28,_%LOGICAL UNIT XX TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT_^1_%ALF 12,TTTTTTTTTTTTTTTTTTTTTTTT_^1HDR3_!ALF 27,_*DATE_%TIME_#FAILURE CODE_!HARDWARE_^1_%ALF 4, STATUS_^1MERRMM AL€€F 11,MASS MEMORY READ ERROR_^1MONTH ALF 24,JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$D E V I C E T Y P E M E S S A G E S K E L E T O N S_)*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1LUDESC ALF 28,1711 TELETYPEWRITER_^€€1_%ALF 28,1721/1722 PAPER TAPE READER_^1_%ALF 28,1723/1724 PAPER TAPE PUNCH_^1_%ALF 28,1752 DRUM_^1_%ALF 28,713-10/711-100/713-120 CRT/SLAVE PRINTER_^1_%ALF 28,1738/853 DISK DRIVE_^1_%ALF 28,1751 DRUM_^1_%ALF 28,1739-1 CARTRIDGE DISK DRIVE_^1_%ALF 28,1738/854 DISK DRIVE_^1_%ALF 28,1731/601 MAGNETIC TAPE DRIVE_^1_%ALF 28,SOFTWARE BUFFERING DEVICE_^1_%ALF 28,COSY DRIVER UN€€IT_^1_%ALF 28,1728/430 CARD READER/PUNCH_^1_%ALF 28,CORE ALLOCATOR_^1_%ALF 28,1733-1/854 DISK DRIVE_^1_%ALF 28,1733-2/856-2 CARTRIDGE DISK DRIVE_^1_%ALF 28,1733-2/856-4 CARTRIDGE DISK DRIVE_^1_%ALF 28,1742-30 LINE PRINTER_^1_%ALF 28,1742-120 LINE PRINTER_^1_%ALF 28,1740/501 LINE PRINTER_^1_%ALF 28,1732-2/615-73 MAGNETIC TAPE DRIVE_^1_%ALF 28,1732-2/615-93 MAGNETIC TAPE DR€€IVE_^1_%ALF 28,1732-1/1706/608 BUFFERED MAGNETIC TAPE DRIVE_^1_%ALF 28,1726/405 CARD READER_^1_%ALF 28,1732-1/608 MAGNETIC TAPE DRIVE_^1_%ALF 28,1732-1/609 MAGNETIC TAPE DRIVE_^1_%ALF 28,1713 TELETYPEWRITER KEYBOARD_^1_%ALF 28,1713 TELETYPEWRITER PAPER TAPE PUNCH_^1_%ALF 28,1713 TELETYPEWRITER PAPER TAPE READER_^1_%ALF 28,1729-2 CARD READER_^1_%ALF 28,1732-1/1706/609 BUFFE€€RED MAGNETIC TAPE DRIVE_^1_%ALF 28,SOFTWARE DUMMY DEVICE_^1_%ALF 28,364-4/361-1 HDX COMMUNICATION DEVICE_^1_%ALF 28,364-4/361-4 FDX COMMUNICATION DEVICE_^1_%ALF 28,1742-1 LINE PRINTER_^1_%ALF 28,1777 PAPER TAPE READER_^1_%ALF 28,PSEUDO TAPE UNIT_^1_%ALF 28,1777 PAPER TAPE PUNCH_^1_%ALF 28,1729-3 CARD READER_^1_%ALF 28,1733-1/853 DISK DRIVE_^1_%ALF 28,1731/1706/601 BUFFERE€ D MAGNETIC TAPE UNIT_^1_%ALF 28,1726/1706/405 BUFFERED CARD READER_^1_%ALF 28,1747 DATA SET INTERFACE_^1_%ALF 28,1744/274 DIGIGRAPHIC CONSOLE_^1_%ALF 28,1536 LOW LEVEL ANALOG INPUT_^1_%ALF 28,1501 HIGH LEVEL ANALOG INPUT_^1_%ALF 28,UNDEFINED DEVICE_^1_%END_]_^__ PMIPRO CSY/ A26 P€1_%NAM MIPRO_(DECK-ID A26 MSOS 4.1_-SUMMARY-079_^1*_$MANUAL INTERRUPT RESPONSE HANDLER FOR INPUTS OTHER THAN *_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 5_^1* THE PROGRAM BASICALLY INVOLVES ENTRY FROM MINT (IN_%**MSOS 4.1**_^1*_"MONITOR) WHEN THE FIRST C€€HARACTER INPUT AFTER A MANUAL **MSOS 4.1**_^1*_"INTERRUPT IS NOT AN *. IF THE INPUT CHARACTER STRING **MSOS 4.1**_^1*_"IS MATCHED IN TABLE -FUNCTN-, THE REQUESTED ACTION IS **MSOS 4.1**_^1*_"TAKEN. IF THE ACTION INVOLVES STARTING OR STOPPING A **MSOS 4.1**_^1*_"TIMER AND A REJECT IS FOUND, THE MESSAGE -TIMER REJECT-**MSOS 4.1**_^1*_"UNLINKED, OR THE INPUT IS OTHERWISE IN ERROR€€, THE_$**MSOS 4.1**_^1*_"MESSAGE, -MI INPUT ERROR IS PRINTED. THE FOLLOWING_"**MSOS 4.1**_^1*_"LIST OF INPUT CODES IS CONSIDERED BASIC TO THE PROGRAM.**MSOS 4.1**_^1*_"ADDITIONS TO THIS LIST MAY BE MADE BY USERS AS REQUIRED**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1*_$INPUT_"FUNCTION_C**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$=S_%FOR SCHEDULING SYSTEM LIBRARY ORDINAL WITH **MSOS 4.€€1**_^1*_0THE INPUT FORMAT =SXXX,Y,ZZZZ WHERE XXX IS**MSOS 4.1**_^1*_0THE 3-DIGIT DECIMAL ORDINAL NUMBER (NUMBER**MSOS 4.1**_^1*_0CORRESPONDS TO DIRECTORY POSITION), Y IS **MSOS 4.1**_^1*_0THE HEX PRIORITY FOR EXECUTION, AND ZZZZ **MSOS 4.1**_^1*_0IS A HEX PARAMETER PASSED TO THE PROGRAM **MSOS 4.1**_^1*_0IN THE Q-REGISTER._7**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$SCMM_#SCHEDU€€LES ON-LINE SMALL COMPUTER MAINTENANCE**MSOS 4.1**_^1*_0MONITOR (SCMM-17) LOADED UNDER ORDINAL_"**MSOS 4.1**_^1*_0NAME SCMM17_>**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$EF_%SCHEDULES ORDINAL EFLIST TO PRINT_***MSOS 4.1**_^1*_0ENGINEERING FILE DATA FOR ALL LOGICAL_#**MSOS 4.1**_^1*_0UNITS_D**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$EFMM_#SCHEDULES ORDINAL EFLIST TO PRINT_***MSOS 4.€€1**_^1*_0ENGINEERING FILE DATA FOR MASS MEMORY_#**MSOS 4.1**_^1*_0UNITS_D**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$EFLU_#SCHEDULES ORDINAL EFLIST TO PRINT_***MSOS 4.1**_^1*_0ENGINEERING FILE DATA FOR SPECIFIED_%**MSOS 4.1**_^1*_0LOGICAL UNIT_=**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$TON_$STARTS SYSTEM HARDWARE TIME BASE AS DEFINED **MSOS 4.1**_^1*_0IN SYSDAT_@**MSOS 4.1**_^1_%SP€€C 1_N**MSOS 4.1**_^1*_$TOFF_#STOPS SYSTEM HARDWARE TIME BASE AS DEFINED **MSOS 4.1**_^1*_0IN SYSDAT_@**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$SYSCOP_!SCHEDULES SYSTEM CHECKOUT PACKAGE LOADED_"**MSOS 4.1**_^1*_0UNDER ORDINAL NAME SYSCOP_0**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$DB_%STARTS ON-LINE DEBUG PACKAGE, ODEBUG, LOADED**MSOS 4.1**_^1*_0UNDER ORDINAL NAME ODEBUG._/**MSOS€€ 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$DX_%STOPS ON-LINE DEBUG PACKAGE BY CLEARING_#**MSOS 4.1**_^1*_0CHRSFG IN SYSDAT_9**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$DATE_#ALLOWS THE USER TO ENTER A NEW DATE AND_#**MSOS 4.1**_^1*_0TIME. ROUTINE IS A SUB-FUNCTION OF TDFUNC**MSOS 4.1**_^1*_0LOADED UNDER ORDINAL NAME TDFUNC._(**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$TIME_#CAUSES THE CUR€€RENT DATE AND TIME TO BE_$**MSOS 4.1**_^1*_0PRINTED ON THE COMMENT UNIT. ROUTINE IS A**MSOS 4.1**_^1*_0SUB-FUNCTION OF TDFUNC LOADED UNDER_%**MSOS 4.1**_^1*_0ORDINAL NAME TDFUNC._5**MSOS 4.1**_^1_%SPC 1_^1*_$VERIFY_!SCHEDULES THE MSOS VERIFICATION PACKAGE LOADED_^1*_0UNDER ORDINAL NAME VERIFY._^1_%SPC 1_N**MSOS 4.1**_^1*_$TSUT_#SCHEDULES THE TIMESHARE UTILITY PACKAGE_#**MSOS 4.1€€**_^1*_0LOADED UNDER ORDINAL NAME TSUTIL. THIS IS**MSOS 4.1**_^1*_0A PART OF THE TIMESHARE 1.0 PRODUCT._$**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$DACS_#SCHEDULES THE DATA ACQUISITION AND CONTROL **MSOS 4.1**_^1*_0SUBSYSTEM LOADED UNDER ORDINAL NAME INDACS**MSOS 4.1**_^1*_0THIS IS A PART OF THE AUTRAN 2.0 PRODUCT. **MSOS 4.1**_^1_%SPC 1_^1*_$QUESTION MARK----- SCHEDULES CORE RE€€SIDENT PROGRAM CRIMPT_^1*_8TO INITATE IMPORT PACKAGE THIS IS A_^1*_8PART OF THE IMPORT PRODUCT_^1_%EJT_]_^1* THE TABLE -FUNCTN- CONTAINS A 6-WORD DATA BLOCK FOR EACH **MSOS 4.1**_^1*_"PARAMETERIZED INPUT MNEMONIC. THE DATA BLOCK IS_%**MSOS 4.1**_^1*_"DEFINED AS FOLLOWS..._A**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1*_*WORDS 0-1_#A MNEMONIC CODE WHICH MAY CONTAIN **MSOS 4.1**_^1*_82-€€4 CHARACTERS. UNUSED CHARACTERS **MSOS 4.1**_^1*_8MUST BE SPACES. ANY LEGAL ASCII_!**MSOS 4.1**_^1*_8CODE MAY BE USED BUT A SPACE._#**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_*WORD 2_'THE RELATIVE DISTANCE BETWEEN THE **MSOS 4.1**_^1*_8LABEL JMP AND ANY DESIRED FUNCTION**MSOS 4.1**_^1*_8PRE-PROCESSOR. IF A DATA STRING_!**MSOS 4.1**_^1*_8FOLLOWS THE MNEMONIC, THE PRE-_"**MSOS 4.1**_^€€1*_8PROCESSOR MAY BE USED FOR ITS_#**MSOS 4.1**_^1*_8ANALYSIS. IN THIS CASE, THE_%**MSOS 4.1**_^1*_8ADDRESS OF THE INPUT BUFFER IS_"**MSOS 4.1**_^1*_8CONTAINED IN LOCATION, QSAVE. IF **MSOS 4.1**_^1*_8NO PRE-PROCESSING IS REQUIRED,_"**MSOS 4.1**_^1*_8CONTROL SHOULD BE PASSED TO LABEL,**MSOS 4.1**_^1*_8GETIND._:**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_*WORD 3_'A SCHEDULER CALL (SY€€SCHD TYPE) FOR THE_^1*_8DESIRED PROCESSOR_^1_%SPC 1_N**MSOS 4.1**_^1*_*WORD 4_'AN INDEX TO THE ORDINAL TABLE (ORDTBL)_^1*_8SET TO $FFFF IF NO ORDINAL_^1_%SPC 1_^1*_*WORD 5_'THE PARAMETER TO BE PASSED TO THE **MSOS 4.1**_^1*_8PROCESSOR PROGRAM IN THE Q-_%**MSOS 4.1**_^1*_8REGISTER._8**MSOS 4.1**_^1_%SPC 3_N**MSOS 4.1**_^1* EACH ENTRY IN THIS TABLE MUST CONTAIN SIX WORDS EVEN IF €€ **MSOS 4.1**_^1*_"LESS ARE USED. A SAMPLE ENTRY FOLLOWS..._-**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1*_$ALF 2,SAMPLE_$MNEMONIC NAME_4**MSOS 4.1**_^1*_$ADC PREPRO-JMP_"INCREMENT FROM PRE-PROCESSOR TO_!**MSOS 4.1**_^1*_:JMP LABEL_6**MSOS 4.1**_^1*_$NUM $240X_(SYSTEM SCHEDULER CALL AT PRIORITY_^1*_:X._=**MSOS 4.1**_^1*_$NUM X OR $FFFF_"WHERE X IS THE INDEX TO TABLE ORDTBL_^1*_8$F€€FFF IS USED IF NO ORDINAL REQUIRED_^1*_$NUM XXXX_)PARAMETER TO BE PASSED IN THE Q- **MSOS 4.1**_^1*_8REGISTER._8**MSOS 4.1**_^1_%EJT_Q**MSOS 4.1**_^1* PROGRAM ENTRY POINTS_D**MSOS 4.1**_^1_%ENT MIPROC_'TRANSFER ADDRESS_1**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1* PROGRAM EXTERNAL POINTS_A**MSOS 4.1**_^1_%EXT LOG1A_(TABLE OF P.D.T. ADDRESSES_(**MSOS 4.1**_^1_%EXT MIBX_)MANUAL I€€NTERRUPT BUSY FLAG_'**MSOS 4.1**_^1_%EXT CHRSFG_'ODEBUG ACTIVE FLAG_/**MSOS 4.1**_^1_%EXT SCMMLC_'SCMM-17 ACTIVE FLAG_^1_%EXT SYSCOP_'SYSTEM CHECKOUT ORDINAL_***MSOS 4.1**_^1_%EXT ODEBUG_'ON-LINE DEBUG ORDINAL_,**MSOS 4.1**_^1_%EXT ODBSIZ_'ON-LINE DEBUG OVERLAY SIZE_^1_%EXT EFLIST_'ENGINEERING FILE LIST ORDINAL_#**MSOS 4.1**_^1_%EXT TDFUNC_'TIME/DATE FUNCTION ORDINAL_'**MSOS€€ 4.1**_^1_%EXT VERIFY_'MSOS VERIFICATION ORDINAL_^1_%EXT TSUTIL_'TIMESHARE UTILITIES ORDINAL_%**MSOS 4.1**_^1_%EXT INDACS_'DACS ORDINAL_5**MSOS 4.1**_^1_%EXT SCMM17_'SCMM ORDINAL NAME_0**MSOS 4.1**_^1_%EXT TMRTYP_'TIMER TYPE DESIGNATOR_,**MSOS 4.1**_^1_%EXT TMCODE_'TIMER TYPE CODE_2**MSOS 4.1**_^1_%EXT H15721_'1572-1 HISTORY WORD_.**MSOS 4.1**_^1_%EXT E1572_(1572 BASIC W,E,€€S WORD_,**MSOS 4.1**_^1_%EXT E1572F_'FUNCTION CODE TO ENABLE 1572_$**MSOS 4.1**_^1_%EXT O1572_(1572 OSCILLATOR FREQ./CLOCK FREQ. **MSOS 4.1**_^1_%EXT E1573_(1573 BASIC W,E,S WORD_,**MSOS 4.1**_^1_%EXT E15721_'1572-1 BASIC W,E,S WORD - FUNCTION**MSOS 4.1**_^1_%EXT D15721_'1572-1 BASIC W,E,S WORD - DATA_"**MSOS 4.1**_^1_%EXT O15721_'SRG TIME BASE/CLOCK FREQ._(**MSOS 4.1**_^1_%E€€XT EQ3644_'FUNCTION CODE FOR COMM. MUX_%**MSOS 4.1**_^1_%EXT CRIMPT_'IMPORT INPUT ENTRY_^1_%SPC 2_N**MSOS 4.1**_^1* PROGRAM EQUIVALENCES_D**MSOS 4.1**_^1_%EQU LPMSK($2)_#RIGHT JUSTIFIED MASKS_,**MSOS 4.1**_^1_%EQU NZERO($12)_"LEFT JUSTIFIED MASKS_-**MSOS 4.1**_^1_%EQU ONEBIT($23)_!SINGLE BIT MASKS_1**MSOS 4.1**_^1_%EQU ZERO($22)_#CELL CONTAINING ZERO_-**MSOS 4.1**_^1_%EQU €€FOUR($25)_#CELL CONTAINING FOUR_-**MSOS 4.1**_^1_%EQU SIX($44)_$CELL CONTAINING SIX_.**MSOS 4.1**_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_,**MSOS 4.1**_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_/**MSOS 4.1**_^1_%EJT_Q**MSOS 4.1**_^1MIPRO ENA 0_,INITIALIZE INDEX_1**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%STA* ISAVE_J**MSOS 4.1**_^1_%STQ* QSAVE_(SAVE LOCATION OF INPUT CHAR BUFFER€€**MSOS 4.1**_^1_%STQ QDACS_(SAVE INPUT BUFFER LOC IF DACS ENT **MSOS 4.1**_^1_%SPC 2_^1*_$CHECK FOR QUESTION MARK ENTRY FOR IMPORT_^1_%LDA- (ZERO),Q_$LOOK AT FIRST CHARACTER_^1_%AND- NZERO+8_^1_%EOR =N$3F00_%CHECK FOR QUESTION MARK_^1_%SAN REPEAT_'SKIP IF NOT_^1_%LDA* IMPT_)CHECK IF IMPORT HANDLER LINKED_^1_%EOR- LPMSK+15_^1_%SAN QSKED_^1_%JMP* JMP_*NOT LINKED-ERROR_^1QSKED R€€TJ- (AMONI)_%SCHEDULE IMPORT HANDLER_^1_%NUM $5206_(PASS BUFFER ADDRESS IN Q-REG._^1IMPT_!ADC CRIMPT_^1_%JMP MIDONE_'EXIT MIPRO_^1_%SPC 1_N**MSOS 4.1**_^1REPEAT LDQ* QSAVE_J**MSOS 4.1**_^1_%LDA- (ZERO),Q_$PICKUP FIRST 2 CHAR INPUT_(**MSOS 4.1**_^1_%SUB* FUNCTN,I_$DO THEY MATCH_4**MSOS 4.1**_^1_%SAZ CHAR2_(YES_>**MSOS 4.1**_^1_%JMP* NEXT_)NO, TRY AGAIN_4**MSOS 4.1**_^1_%SPC 1_€€N**MSOS 4.1**_^1CHAR2 LDA* FUNCTN+1,I_E**MSOS 4.1**_^1_%SUB =A_+IS THIS A 2 CHARACTER INPUT_%**MSOS 4.1**_^1_%SAN NOT2_)NO_?**MSOS 4.1**_^1_%LDA- I_,SAVE INDEX TO 2 CHAR INPUT MATCH **MSOS 4.1**_^1_%STA* FOUND2_I**MSOS 4.1**_^1_%JMP* NEXT_)CONTINUE TO SEE IF 3 OR 4 CHAR_"**MSOS 4.1**_^1NOT2_!LDA* FUNCTN+1,I_E**MSOS 4.1**_^1_%AND- LPMSK+8_%NO, IS IT 3 CHARACTERS_+**MSOS 4.1**_^1€€_%INA -$20_K**MSOS 4.1**_^1_%SAN CHAR4_(NO, IT IS 4 CHAR._0**MSOS 4.1**_^1_%LDA- 1,Q_*3 CHARACTER INPUT_0**MSOS 4.1**_^1_%ALS 8_,MERGE THE 4TH CHAR OF THE INPUT_!**MSOS 4.1**_^1_%LDQ* FUNCTN+1,I_"WITH THE 3RD CHAR OF THE FUNCTION **MSOS 4.1**_^1_%QRS 8_N**MSOS 4.1**_^1_%LRS 8_N**MSOS 4.1**_^1_%STA* FUNCTN+1,I_E**MSOS 4.1**_^1_%LDQ* QSAVE_J**MSOS 4.1**_^1_%LDA* FUNCTN+1,I_"SEE €€IF THREE CHAR MATCH_***MSOS 4.1**_^1_%SUB- 1,Q_L**MSOS 4.1**_^1_%SAN NEXT_)SKIP IF NO MATCH_1**MSOS 4.1**_^1_%LDA- I_,SAVE INDEX TO 3 CHAR MATCH_'**MSOS 4.1**_^1_%STA* FOUND3_I**MSOS 4.1**_^1_%JMP* NEXT_)SEE IF SIMILAR 4 CHAR MATCH_%**MSOS 4.1**_^1CHAR4 LDA* FUNCTN+1,I_E**MSOS 4.1**_^1_%SUB- 1,Q_*DO THE SECOND SET OF CHAR MATCH_!**MSOS 4.1**_^1_%SAN NEXT_)NO_?**MSOS 4.1**_^1_%SP€€C 1_N**MSOS 4.1**_^1FOUND LDA* FUNCTN+2,I_"YES, PROCESS THE REQUEST_)**MSOS 4.1**_^1_%INA -1_M**MSOS 4.1**_^1_%STA* JMP+1_J**MSOS 4.1**_^1JMP_"JMP ERROR_J**MSOS 4.1**_^1_%EJT_]_^1_%SPC 2_N**MSOS 4.1**_^1NEXT_!RAO* ISAVE_J**MSOS 4.1**_^1_%LDA* ISAVE_J**MSOS 4.1**_^1_%MUI- SIX_*SET UP FOR NEXT GROUP_,**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%SUB* MAX_*ARE WE THROUGH_3**MSOS 4.1*€€*_^1_%SAP FINI_)YES_>**MSOS 4.1**_^1_%JMP* REPEAT_'NO, TRY AGAIN_4**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1FINI_!LDQ* QSAVE_J**MSOS 4.1**_^1_%LDA* FOUND3_'SEE IF 3 CHAR MATCH FOUND_(**MSOS 4.1**_^1_%SAM TRY2_)SKIP IF NOT_6**MSOS 4.1**_^1SMALL STA- I_,SETUP MATCH INDEX_0**MSOS 4.1**_^1_%JMP* FOUND_(PROCESS INPUT_4**MSOS 4.1**_^1TRY2_!LDA* FOUND2_'SEE IF 2 CHAR MATCH_.**MSOS 4.1**_€€^1_%SAM GERROR_'SKIP IF NO_7**MSOS 4.1**_^1_%JMP* SMALL_(PROCESS INPUT_4**MSOS 4.1**_^1GERROR JMP ERROR_(ILLEGAL REQUEST_2**MSOS 4.1**_^1_%SPC 1_N**MSOS 4.1**_^1FOUND3 NUM -1_M**MSOS 4.1**_^1FOUND2 NUM -1_M**MSOS 4.1**_^1QSAVE NUM 0_N**MSOS 4.1**_^1ISAVE NUM 0_N**MSOS 4.1**_^1_%EJT_Q**MSOS 4.1**_^1FUNCTN ALF 2,=S_)=S SCHEDULE ORDINAL_.**MSOS 4.1**_^1_%ADC EQUALS-JMP_E**M€€SOS 4.1**_^1_%NUM $2404_^1_%NUM $FFFF_J**MSOS 4.1**_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,SCMM_'SMALL COMPUTER MAINTENANCE MONITOR**MSOS 4.1**_^1_%ADC SCMM-JMP_G**MSOS 4.1**_^1_%NUM $2404_^1_%NUM 0_,SCMM17_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,EF_)EF LIST ALL UNITS_0**MSOS 4.1**_^1_%ADC GETIND-JMP_E**MSOS 4.1**_^1_%NUM $2404_^1_%€€NUM 1_,EFLIST_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,EFMM_'EF LIST MASS MEMORY_.**MSOS 4.1**_^1_%ADC GETIND-JMP_E**MSOS 4.1**_^1_%NUM $2404_^1_%NUM 1_,EFLIST_^1_%NUM 2_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,EFLU_'EF LIST SPECIFIED LU_-**MSOS 4.1**_^1_%ADC GETIND-JMP_E**MSOS 4.1**_^1_%NUM $2404_^1_%NUM 1_,EFLIST_^1_%NUM 1_N**MSOS 4.1**_^1_%S€€PC 2_N**MSOS 4.1**_^1_%ALF 2,TON_(START TIMER_6**MSOS 4.1**_^1_%ADC TIMER-JMP_F**MSOS 4.1**_^1_%NUM $2404_^1_%NUM $FFFF_J**MSOS 4.1**_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,TOFF_'STOP TIMER_7**MSOS 4.1**_^1_%ADC MOTIME-JMP_E**MSOS 4.1**_^1_%NUM $2404_^1_%NUM $FFFF_J**MSOS 4.1**_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,SYSCOP_$SYSTEM€€ CHECKOUT_2**MSOS 4.1**_^1_%ADC GETIND-JMP_E**MSOS 4.1**_^1_%NUM $2404_^1_%NUM 2_,SYSCOP_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,DB_)START ODEBUG_5**MSOS 4.1**_^1_%ADC DB-JMP_I**MSOS 4.1**_^1_%NUM $2404_^1_%NUM 3_,ODEBUG_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,DX_)STOP ODEBUG_6**MSOS 4.1**_^1_%ADC DX-JMP_I**MSOS 4.1**_^1_%NUM $2404_€€^1_%NUM $FFFF_J**MSOS 4.1**_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,DATE_'ENTER DATE/TIME_2**MSOS 4.1**_^1_%ADC GETIND-JMP_E**MSOS 4.1**_^1_%NUM $2404_^1_%NUM 4_,TDFUNC_^1_%NUM 1_N**MSOS 4.1**_^1_%SPC 3_^1_%ALF 2,VERIFY_$MSOS VERIFICATION_^1_%ADC GETIND-JMP_^1_%NUM $2404_^1_%NUM 5_,VERIFY_^1_%NUM 0_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,TIME_'PRINT CURR€€ENT DATE AND TIME_%**MSOS 4.1**_^1_%ADC GETIND-JMP_E**MSOS 4.1**_^1_%NUM $2404_^1_%NUM 4_,TDFUNC_^1_%NUM 2_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,TSUT_'TIMESHARE UTILITIES_.**MSOS 4.1**_^1_%ADC GETIND-JMP_E**MSOS 4.1**_^1_%NUM $2404_^1_%NUM 6_,TSUTIL_^1_%NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%ALF 2,DACS_'DACS_=**MSOS 4.1**_^1_%ADC GETIND-JMP_E**MSOS 4€€.1**_^1_%NUM $2407_^1_%NUM 7_,INDACS_^1QDACS NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1MAX_"ADC *-FUNCTN_$FUNCTION TABLE SIZE_.**MSOS 4.1**_^1ORDTBL ADC SCMM17_'ORDINAL TABLE FOR MNEMONICS_^1_%ADC EFLIST_^1_%ADC SYSCOP_^1_%ADC ODEBUG_^1_%ADC TDFUNC_^1_%ADC VERIFY_^1_%ADC TSUTIL_^1_%ADC INDACS_^1_%EJT_Q**MSOS 4.1**_^1*_$TIMER INITIATION CODING_=**MSOS 4.1**_^1*_Z**€€MSOS 4.1**_^1*_'TIMER STARTING SEQUENCE IS BASED ON THE TIMER TYPE **MSOS 4.1**_^1*_,TYPE_.CODE_6**MSOS 4.1**_^1*_,NONE_00_7**MSOS 4.1**_^1*_,1572_01_7**MSOS 4.1**_^1*_,1573_02_7**MSOS 4.1**_^1*_,1572-1 LST_*3_7**MSOS 4.1**_^1*_,1572-1 SRG_*4_7**MSOS 4.1**_^1*_,364-4 COMM. MUX._#5_7**MSOS 4.1**_^1*_,PSEUDO_.6_7**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1TIMER LDQ =XLOG1A_H€€**MSOS 4.1**_^1_%LDQ- 1,Q_L**MSOS 4.1**_^1_%LDA- 13,Q_K**MSOS 4.1**_^1_%INA 1_,IS THERE A SWAP TIME DEFINED_$**MSOS 4.1**_^1_%SAZ TIMER1_'NO_?**MSOS 4.1**_^1_%LDA- 13,Q_K**MSOS 4.1**_^1_%AND- LPMSK+15_$RE-ENABLE CORE SWAP DELAYS_'**MSOS 4.1**_^1_%STA- 13,Q_K**MSOS 4.1**_^1TIMER1 LDQ =XTMCODE_G**MSOS 4.1**_^1_%STQ+ TMRTYP_'RESTORE THE TIMER TYPE CODE_%**MSOS 4.1**_^1_%JMP* TIMVCT€€,Q_$GO TO VECTOR FOR JUMP_,**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$TIMER PROCESSOR VECTOR TABLE_8**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1TIMVCT JMP* VCTTIM_'0 = NO TIMER_5**MSOS 4.1**_^1_%JMP* T1572_(1 = 1572_9**MSOS 4.1**_^1_%JMP* T1573_(2 = 1573_9**MSOS 4.1**_^1_%JMP* T72LST_'3 = 1572-1 LST_3**MSOS 4.1**_^1_%JMP* T72SRG_'4 = 1572-1 SRG_3**MSOS 4.1**_^1_%JMP* T3644_(5 = 364-4 COMM. MUX._-**M€€SOS 4.1**_^1_%JMP* PSEUDO_'6 = PSEUDO TIMER_1**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572 TIMER STARTING CODE_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1T1572 LDQ+ E1572_(FUNCTION CODE_4**MSOS 4.1**_^1_%LDA+ E1572F_'ENABLE 1572_6**MSOS 4.1**_^1_%OUT REJ-*_J**MSOS 4.1**_^1_%INQ -1_+DATA CODE_8**MSOS 4.1**_^1_%LDA+ O1572_(REGISTER COUNTS_2**MSOS 4.1**_^1TOUT_!OUT REJ-*_J**MSOS 4.1**_^1_%JMP* €€MIDONE_'EXIT_^1*_Z**MSOS 4.1**_^1*_$1573 TIMER STARTING CODE_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1T1573 LDQ+ E1573_(FUNCTION CODE_4**MSOS 4.1**_^1_%INQ -1_^1_%LDA- ONEBIT+15_#$8000 = ENABLE_3**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572-1 LST STARTING CODE_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1T72LST LDQ+ E15721_'FUNCTION CODE_4**MSOS 4.1**_^1_%ENA €€$38_*AND MASK FOR SRG FUNCTION BITS_"**MSOS 4.1**_^1_%IIN 0_N**MSOS 4.1**_^1_%AND+ H15721_I**MSOS 4.1**_^1_%INA 2_,2 = ENABLE INTERRUPT_-**MSOS 4.1**_^1_%STA+ H15721_'RESTORE HISTORY WORD_-**MSOS 4.1**_^1_%EIN 0_N**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572-1 SRG STARTING CODE_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1T72SRG LDQ+ E15721_'FUNCTION CO€€DE_4**MSOS 4.1**_^1_%ENA 7_,AND MASK FOR LST FUNCTION BITS_"**MSOS 4.1**_^1_%IIN 0_N**MSOS 4.1**_^1_%AND+ H15721_I**MSOS 4.1**_^1_%INA $10_*$10 = ENABLE INTERRUPT_+**MSOS 4.1**_^1_%STA+ H15721_'RESTORE HISTORY WORD_-**MSOS 4.1**_^1_%EIN 0_N**MSOS 4.1**_^1_%OUT REJ-*_J**MSOS 4.1**_^1_%LDQ+ D15721_'DATA CODE_8**MSOS 4.1**_^1_%LDA+ O15721_'REGISTER COUNTS_2**MSOS 4.1**_^1_%JMP* T€€OUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_]_^1*_$364-4 COMMUNICATIONS MUX. TIMER_^1*_]_^1T3644 LDQ+ EQ3644_'FUNCTION CODE_4**MSOS 4.1**_^1_%ENA 6_,6 = ENABLE INTERRUPT_-**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$PSEUDO TIMER_H**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1PSEUDO JMP* REJ1_K**MSOS 4.1**_^1_%EJT_]_^1*_$MAKE SYSTEM DIRECTORY SCHEDULER CALL IF PROGRAM €€SUPPLIED_^1_%SPC 3_^1GETIND LDQ FUNCTN+4,I_"GET ORDINAL INDEX_^1_%LDA ORDTBL,Q_$GET ORDINAL_^1_%EOR- LPMSK+15_^1_%SAN GET1_)SKIP IF ENTRY PRESENT_^1_%JMP* ERROR_^1GET1_!LDA ORDTBL,Q_$GET ORDINAL_^1_%STA* CALL+1_'STORE ORDINAL IN SCHEDULER CALL_^1_%TRA Q_^1_%ADQ- $EB_^1_%LDA- 4,Q_*HAS THE ORDINAL BEEN LOADED_^1_%SAN GET2_)YES_^1GETERR JMP* ERROR_(PROGRAM IS UNLINKED OR NOT LO€€ADED_^1GET2_!LDA FUNCTN+3,I_^1_%STA* CALL_)SET THE LEVEL OF THE PROGRAM_$**MSOS 4.1**_^1_%LDQ FUNCTN+5,I_"OBTAIN THE PARAMETER TO PASS_$**MSOS 4.1**_^1SCHDRP RTJ- (AMONI)_"SCHEDULE REQUESTED PROGRAM_+*MSOS V4.0_^1CALL_!NUM $5204_^1_%ADC 0_N**MSOS 4.1**_^1_%SPC 3_^1*_$EXIT PATH FROM MIPRO_^1_%SPC 3_^1MIDONE ENA 0_^1_%STA+ MIBX_)CLEAR BUSY FLAG IN MANINT PROGRAM_^1_%RTJ- (AMON€€I)_%RELEASE CORE AND EXIT_^1LIST_!NUM $1901_^1_%ADC (MIPRO-LIST)_^1_%EJT_]_^1_%SPC 2_^1*_$TIMER TERMINATION CODING_<**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$TIMER TERMINATION SEQUENCE IS BASED ON TIMER TYPE_"**MSOS 4.1**_^1*_'AS DEFINED ABOVE_B**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1MOTIME LDQ =XLOG1A_H**MSOS 4.1**_^1_%LDQ- 1,Q_L**MSOS 4.1**_^1_%LDA- 13,Q_K**MSOS 4.1**_^1_%AND- LPMSK+15_G*€€*MSOS 4.1**_^1_%EOR- ONEBIT+15_#DISABLE DELAYED CORE SWAPS_'**MSOS 4.1**_^1_%STA- 13,Q_K**MSOS 4.1**_^1_%LDQ =XTMCODE_G**MSOS 4.1**_^1_%ENA 0_N**MSOS 4.1**_^1_%STA+ TMRTYP_'INDICATE NO TIMER_0**MSOS 4.1**_^1_%JMP* VCTTIM,Q_$GO TO VECTOR FOR JUMP_,**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$STOP TIMER PROCESSOR VECTOR TABLE_3**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1VCTTIM JMP* REJ_*0 = NO TIMER_5€€**MSOS 4.1**_^1_%JMP* N1572_(1 = 1572_9**MSOS 4.1**_^1_%JMP* N1573_(2 = 1573_9**MSOS 4.1**_^1_%JMP* N72LST_'3 = 1572-1 LST_3**MSOS 4.1**_^1_%JMP* N72SRG_'4 = 1572-1 SRG_3**MSOS 4.1**_^1_%JMP* N3644_(5 = 364-4 COMM. MUX._-**MSOS 4.1**_^1_%JMP* PSEUDO_'6 = PSEUDO TIMER_1**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572 TIMER STOP CODE_@**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1N1572 LDQ+ E1572_(FUNCT€€ION CODE_4**MSOS 4.1**_^1_%LDA- ONEBIT+14_#$4000 = DISABLE_2**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1573 TIMER STOP CODE_@**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1N1573 LDQ+ E1573_(FUNCTION CODE_4**MSOS 4.1**_^1_%INQ -1_^1_%LDA- ONEBIT+14_#$4000 = DISABLE_2**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572-1 LST STOP C€€ODE_@**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1N72LST LDQ+ E15721_'FUNCTION CODE_4**MSOS 4.1**_^1_%ENA $38_*AND MASK FOR SRG FUNCTION BITS_"**MSOS 4.1**_^1NOUT_!IIN 0_N**MSOS 4.1**_^1_%AND+ H15721_I**MSOS 4.1**_^1_%STA+ H15721_'RESTORE HISTORY_2**MSOS 4.1**_^1_%EIN 0_N**MSOS 4.1**_^1_%JMP* TOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$1572-1 SRG STOP CODE_@**MSOS 4.1**_^1*_Z**M€€SOS 4.1**_^1N72SRG LDQ+ E15721_'FUNCTION CODE_4**MSOS 4.1**_^1_%ENA 7_,AND MASK FOR LST FUNCTION BITS_"**MSOS 4.1**_^1_%JMP* NOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1*_]_^1*_$364-4 COMMUNICATION MUX. TIMER_^1*_]_^1N3644 LDQ+ EQ3644_'FUNCTION CODE_4**MSOS 4.1**_^1_%ENA 2_,2 = DISABLE INTERRUPT_,**MSOS 4.1**_^1_%JMP* NOUT_)GO TO OUTPUT_5**MSOS 4.1**_^1_%SPC 3_^1*_$REJECT EXIT_^1_%SPC €€3_^1REJ_"NOP 0_N**MSOS 4.1**_^1_%ENA 0_N**MSOS 4.1**_^1_%STA+ TMRTYP_'INDICATE NO TIMER_0**MSOS 4.1**_^1REJ1_!LDA =XMSG2-REF_"TO PRINT -TIMER REJECT-_***MSOS 4.1**_^1_%JMP* STORIT_^1_%EJT_]_^1_%SPC 3_^1*_$ERROR EXIT_^1_%SPC 3_^1ERROR LDA =XMSG1-REF_"TO PRINT -MI INPUT ERROR-_(**MSOS 4.1**_^1STORIT STA* MSGLOC_I**MSOS 4.1**_^1_%RTJ- (AMONI)_^1REF_"NUM $D33_^1_%ADC MIDONE-RE€€F_^1_%ADC 0_^1_%ADC $18FC_^1_%ADC 7_N**MSOS 4.1**_^1MSGLOC ADC 0_N**MSOS 4.1**_^1_%JMP- ($EA)_^1_%SPC 2_^1MSG1_!ALF 7,MI INPUT ERROR_?**MSOS 4.1**_^1MSG2_!ALF 7,TIMER REJECT_A**MSOS 4.1**_^1_%SPC 5_^1*_$ON-LINE SCMM-17 HANDLER_=**MSOS 4.1**_^1SCMM_!LDA+ SCMMLC_'CHECK FLAG IN SYSDAT_^1_%SAN R1_+SKIP IF SCMM NOW IN CORE_)**MSOS 4.1**_^1_%JMP* GETIND_'FIRST TIME, SCHEDULE SCM€€M_(**MSOS 4.1**_^1R1_#STA* CALL+1_^1_%JMP* SCHDRP_^1_%SPC 2_^1*_$INITIATE DEBUG PACKAGE_^1_%SPC 1_^1DBSYSD ADC ODEBUG_'REL. INCREMENT TO DEBUG ENTRY IN SYS. DIR._^1DB_#LDQ- $EB_*STORE CORRECT LENGTH_^1_%ADQ* DBSYSD_(IN SYS. DIR. ENTRY_^1_%LDA =XODBSIZ_$CHANGE DIR. LENGTH_^1_%STA- (FOUR),Q_^1DBCKIT LDA+ CHRSFG_'IS DEBUG IN_^1_%SAZ DBRQIT-*-1_#SKIP NO_^1_%JMP* ERROR_)PRINT ERROR€€ MSG._^1DBRQIT JMP* GETIND_#SCHEDULE ODEBUG_^1*_$TURN OFF DEBUG PKG._^1DX_#ENA 0_^1_%STA+ CHRSFG_^1_%JMP* MIDONE_^1_%EJT_]_^1_%SPC 5_^1*_$EQUAL S ROUTINE TO START SYSTEM DIRECTORY PROGRAMS._^1_%SPC 3_^1EQUALS LDA- 1,Q_*PICKUP TWO DIGITS OF DIRECTORY NUMBER_^1_%STQ- I_,SAVE BUFFER ADDRESS_^1_%RTJ* CK_+CHECK AND CONVERT TO HEX_^1_%STA* HOLD_)SAVE SECOND DIGIT_^1_%LDA- 1,Q_^1_%ALS €€ 8_,DO SECOND DIGIT FIRST_^1_%RTJ* CK_+NOW FIRST DIGIT_^1_%ALS 4_,X 16_^1_%ADD* HOLD_)FORM COMPLETE DIRECTORY NUMBER_^1_%ALS 4_^1_%STA* HOLD_^1_%LDA- 2,Q_^1_%ALS 8_,RIGHT JUSTIFY 3RD DIGIT_^1_%RTJ* CK_^1_%ADD* HOLD_^1_%RTJ* DEOCT_(CONVERT FROM DECIMAL TO HEX_^1_%INA -1_+REFERENCE TO ZERO_^1_%MUI- $5_+X 7_^1_%ADD- $E7_*ADDRESS OF 1ST MASS STORAGE ENTRY_^1_%STA* CALL+1_'STORE IN €€SCHEDULER CALL_***MSOS 4.1**_^1_%AND- $42_*REMOVE BIT 15_^1_%LDQ- $EB_O53*1069_^1_%AAQ Q_Q53*1069_^1_%LDQ- 4,Q_'CHECK FOR ZERO LENGTH ORDINAL_*53*1069_^1_%SQN SPICI_$SKIP IF OK_=53*1069_^1_%JMP* ERROR_J**MSOS 4.1**_^1SPICI SUB- $E6_'CHECK IF WITHIN LIMITS_153*1069_^1_%SAM SPIC2_(SK-P IF WITHIN LIMITS_^1_%JMP* ERROR_(TO ERROR ROUTINE_1**MSOS 4.1**_^1_%SPC 1_^1*_$SET PRIORITY LE€€VEL_^1_%SPC 1_^1SPIC2 LDA- 3,I_^1_%ALS 8_^1_%RTJ* CK_^1_%AND- LPMSK+4_"SCHEDULE PRIORITY/_1**MSOS 4.1**_^1_%ADD =N$2400_^1_%STA CALL_K**MSOS 4.1**_^1_%SPC 1_^1*_$CHECK FOR A PARAMETER TO PASS_^1_%SPC 1_^1_%LDA- 3,I_^1_%AND- $A_+FFMASK_^1_%EOR =N$2C_),_^1_%SAZ SPIC3_(SKIP IF NEXT CHARACTER COMMA_^1_%JMP SCHDRP_#SCHEDL. REQSED. PROGR._^1SPIC3 LDA- 4,I_^1_%ALS 8_^1_%RTJ* CK€€_^1_%ALS 4_^1_%STA* HOLD_)SAVE DIGIT 1_^1_%LDA- 4,I_^1_%RTJ* CK_^1_%ADD* HOLD_^1_%ALS 4_^1_%STA* HOLD_)SAVE DIGITS 1 AND 2_^1_%LDA- 5,I_^1_%ALS 8_^1_%RTJ* CK_^1_%ADD* HOLD_^1_%ALS 4_^1_%STA* HOLD_)SAVE DIGITS 1,2 AND 3_^1_%LDA- 5,I_^1_%RTJ* CK_^1* THIS INSTRUCTION ORS IN CASE OF NEGATIVE ZERO IS PASSED_^1_%EOR* HOLD FORM COMPLETE PARAMETER_6*629_^1_%TRA Q_,PUT IN Q TO PASS_^1€€_%SPC 1_^1*_$SCHEDULE THE PROGRAM_^1_%SPC 1_^1_%JMP SCHDRP_#SCHEDL. REQSED. PROGR._^1HOLD_!0_"0_,TEMPORARY STORAGE CELL_^1_%SPC 1_^1*_$INPUT DATA CHECK AND CONVERSION ROUTINE_^1_%SPC 1_^1CK_#0_"0_^1_%AND- $A_+FF MASK_^1_%INA -$30_^1_%SAM ER-*-1_'SKIP IF LESS THAN $30_^1_%INA -$17_N*629_^1_%SAP ER NOT 0 THRU $F_A*629_^1_%INA 6_R*629_^1_%SAM 1_Q*629_^1_%INA -7_P*629_^1_%I€€NA $11_O*629_^1_%AND- $6_!MASK WITH 000F_>*629_^1_%JMP* (CK)_^1ER_#JMP ERROR_(ILLEGAL CHARACTER INPUT_^1DEOCT 0_"0_^1_%LDQ- $1E_8SET ALL THRU FLAG_^1_%LLS 20_9FIRST DIGIT TO A, REST TO Q_^1_%STQ* BAKER_6SAVE REST_^1_%EOR* MINUS_6CHECK FOR MINUS SIGN_^1_%STA* ABLE_7SET INDICATOR FOR LATER_^1_%SAZ ADEOCT-*-1_1START TO CONVERT_^1_%EOR* MINUS_6SET FIRST DIGIT BACK IF NOT -_^1ADEO€€CT MUI- $46_8CONVERT THIS PART (TIMES 10)_^1_%STA* CHARLE_5PUT NEW VALUE TO TEMP_^1_%CLR A_:CLEAR A_^1_%LDQ* BAKER_6GET SAVED NEXT PORTION_^1_%LLS 4_:NEXT FOUR TO A_^1_%ADD* CHARLE_5ADD THE PREVIOUS_^1_%STQ* BAKER_6SAVE THE REST_^1_%ADQ- $E_9CHECK FOR DONE_^1_%SQZ BDEOCT-*-1_1ZERO MEANS DONE_^1_%JMP* ADEOCT_5GO BACK FOR ANOTHER TRY_^1BDEOCT LDQ* ABLE_7CHECK FOR MINUS SIGN_^1_%SQ€ΨN CDEOCT-*-1_1ZERO IS MINUS_^1_%TCA A_:COMPLEMENT THE ANSWER_^1CDEOCT JMP* (DEOCT)_4GO BACK HOME_^1MINUS NUM $D_9MINUS SIGN_^1ABLE_!0_"0_^1BAKER 0_"0_^1CHARLE 0_"0_^1MIPROC EQU MIPROC(MIPRO)_^1_%END MIPROC_^__ΨPODEBUG CSY/ H26 P€1_%NAM ODEBUG_'DECK-ID H26 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$1700 ON-LINE DEBUG PACKAGE_^1_%EXT LOG1A_^1_%EXT ODEBUG_^1_%EXT CHRSFG_'ODP IN-PROGRESS FLAG_^1_%EXT NUMLU_K**MSOS4.0**_^1_%SPC 5_^1_%EQU AMONI($F4),AD€€ISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 10_^1*_*VARIABLE EQUS_^1_%EQU MAXPAG(16)_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU LBUFF(36)_#LENGTH OF OPER. INPUT BUFFER (2 CHAR./W€€ORD)_^1_%SPC 2_^1*_*SIZED TO HOLD AREA 2 AND AREA3 PROGRAMS RESPECTIVELY_^1_%EQU LENGTH(200)_!LENGTH OF PROGIN(AREA 2)_^1_%EQU LAREA3(130)_!LENGHT OF AREA 3_^1_%SPC 5_^1*_*EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($18FC) TYPER OUTPUT LOGICAL UNIT (ASCII) 4.0*78*1909_^1_%EQU COMLU($18FD) TYPER INPUT COMMENT MEDIUM(ASCII) 4.0*78*1909_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UN€€IT_^1_%SPC 10_^1ODP_"LDA+ CHRSFG_'GET ODP-IN-PROGRESS FLAG_^1_%SAZ SETFG-*-1_#CHRIS ALREADY IN_^1_%JMP* GOWAY_(YES-RELEASE SECOND ONE_^1SETFG INA 1_,NO-SET CHRSFG_^1_%STA+ CHRSFG_^1_%LDA- $FC_)SET-UP STANTARD OUTPUT_^1_%STA COMOLU_(L.U. NO._^1_%STA* LISTLU_J**MSOS4.0**_^1_%JMP START_+GO TO START UP_^1*_$BACK GROUND INPUT BUFFER WITH ALL ONES_^1LOKMOR ENQ LBUFF-1_^1_%ENA -0_€€^1BUFLOP STA BUFFER,Q_^1_%INQ -1_^1_%SQM ALL1S-*-1_^1_%JMP* BUFLOP_^1*_*SET UP BUFFER COUNTERS FOR GETFLD_^1ALL1S ENA 1_^1_%STA* BITFLG_^1_%STQ* BUFCNT_^1_%ENA 0_,RESET SLASH FLAG_^1_%STA* SLASHF_^1_%STA* BUFEMT_(AND BUFFER EMTY FLAG_^1_%SPC 5_^1*_*READ ONE LINE FROM INPUT COMMENT DEVICE_^1_%RTJ- (AMONI)_^1READLN ADC $900+CHRSLV_^1_%ADC FIRSTF-READLN_^1_%NUM 0_^1_%ADC CO€€MLU_^1_%ADC LBUFF_^1_%ADC BUFFER-READLN_^1_%JMP- (ADISP)_^1_%SPC 5_^1*_*BRING OVER PROGRAM SUBROUTINE_^1*_*THIS ROUTINE PUT CORRECT PROGRAM IN AREA 3_^1*_*ENTER HANDLE WITH SUBROUTINE NUMBER IN A AND Q WILL_^1*_*BE PASSED. RETURN ADDRESS WILL BE SET IN FIRST WORD OF_^1*_*SUBROUTINE WITH CONTROL GIVEN TO SECOND WORD._^1GOTOIT SQP GOTO3-*-1_^1_%JMP* IOERR_K**MSOS4.0**_^1HANDLE N€€UM 0_,START OF SUBROUTINE_^1_%STQ* QTEMP_^1_%TRA Q_^1_%EOR* PROG1_(CHECK IFF CORRECT PROG IS IN AREA 3_^1_%SAN NOPRG-*-1_^1GOTO3 LDA* HANDLE_^1_%STA AREA3_^1_%LDQ* QTEMP_^1_%JMP AREA3+1_^1_%SPC 5_^1*_*GET PROGRAM INTO AREA 3_^1_%SPC 3_^1NOPRG LDA* PROLOC,Q_^1_%STQ* PROG1_(SET FOR NEW SUBROUTINE IN AREA 3_^1_%RTJ* MMADDR_'CALC. MM ADDRESS_^1_%STQ* MSBSR_^1_%STA* LSBSR_^1_%R€€TJ- (AMONI)_^1GETROU ADC $300+CHRSLV+$600_^1_%ADC GOTOIT-GETROU_^1_%NUM 0_^1_%ADC MASSLU_^1_%ADC LAREA3_^1_%ADC AREA3-GETROU_^1MSBSR 0_"0_^1LSBSR 0_"0_^1_%JMP- (ADISP)_^1_%SPC 3_^1QTEMP NUM 0_^1_%SPC 3_^1_%EQU PROLOC(*-1)_!TABLE OF AREA 3 PROGRAMS_^1_%ADC PRINT-ODP_#1_^1_%ADC GETFLD-ODP_"2_^1_%ADC ASCHEX-ODP_"3_^1_%ADC DMPBUF-ODP_"4_^1_%ADC ASCDEC-ODP_"5_^1_%ADC €€HEXASC-ODP_"6_^1_%ADC DECDMP-ODP_"7_A**MSOS4.0**_^1_%SPC 5_^1FIRSTF SQP NOERR-*-1 NO I/O ERROR_^1_%JMP* IOERR_K**MSOS4.0**_^1NOERR LDA* PROG2_^1_%SAP NOINYT-*-1_^1_%JMP* PROGIN_'PROGRAM IN CORE_^1AGETRQ ADC GETREQ-ODP_"RELATIVE ADDRESS TO GET REQUEST PROCESSOR_^1NOINYT LDA* AGETRQ_^1_%RTJ* MMADDR_'CALC. MM ADDRESS_^1_%STQ* MSBPRC_^1_%STA* LSBPRC_^1_%ENA -1_^1_%SPC 5_^1*_*B€€RING IN REQUESTED PROGRAM INTO AREA 2_^1BRIPRO STA* PROG2_^1BRIPR1 RTJ- (AMONI)_^1GETPRG ADC $300+CHRSLV+$600_^1_%ADC NOWIN-GETPRG_^1_%NUM 0_^1_%ADC MASSLU_^1_%ADC LENGTH_^1_%ADC PROGIN-GETPRG_^1MSBPRC 0_"0_^1LSBPRC 0_"0_^1_%JMP- (ADISP)_^1NOWIN SQM IOERR_K**MSOS4.0**_^1_%JMP* PROGIN_^1_%SPC 5_^1*_*TURN OFF REQUEST_^1OFF_"ENQ 1_^1_%ENA 1_^1_%RTJ* HANDLE_^1_%SPC 3_^1*_*E€€RROR DETECTED IN I/O -RELEASE CORE_^1_%EQU ERROR(*)_^1_%SPC 5_^1CHREXT CLR A_^1LCHRSF STA+ CHRSFG_%CLEAR CHRSFG_^1GOWAY RTJ- (AMONI)_^1_%NUM $1901_^1_%ADC (ODP-*+1)_$RELEASE CORE_^1_%SPC 5_^1*_*LOG ILLEGAL MESSAGE_^1IOERR ENQ 2_,I/O ERROR ENTRY_^1MSG_"ENA 1_,Q SET BY REQUESTOR OF MESSAGE_^1_%RTJ* HANDLE_^1_%SPC 3_^1SOMMOR LDA* (LCHRSF+1)_$CHECK FLAG_^1_%SAN SOME-*-1_^1€€_%JMP* OFF_^1_%SPC 3_^1*_*LOG ANY MORE REQ MESSAGE_^1SOME_!ENQ 3_^1_%ENA 1_^1_%RTJ* HANDLE_^1_%JMP* LOKMOR_^1_%SPC 3_^1PROG1 NUM 0_,SUBROUTINE IN AREA 3_^1PROG2 NUM 0_,PROGRAM IN AREA2 (PROGIN)_^1BITFLG NUM 0_,BUFFER BIT POSITION NEXT_^1BUFCNT NUM 0_,BUFFER COUNTER_^1FIELD NUM 0_,CONTROL CHAR._^1_%NUM 0_+SIGN AND 1ST DEC. DIGIT_^1_%NUM 0_,2 MOST SIGNIFCANT HEX CHARACT€€ERS_^1_%NUM 0_-LEAST SIGNIFCANT HEX CHARACTERS_^1SLASHF 0_"0_,SLASH FLAG_^1BUFEMT 0_"0_+BUFFER EMTY FLAG_^1*_]_^1*_$SUBROUTINE TO CALC. MASS MEMORY ADDRESS OF SR_^1*_'FROM MM ADDRESS OF ODP IN SYS. DIRECTORY_^1*_'ENTRY AND ADDRESS OF SR RELATIVE TO ODP_^1*_'(A-REG.=RELATIVE ADDRESS OF SUBROUTINE)_^1*_]_^1MMADDR 0_"0_^1_%ENQ 0_^1_%DVI =N96_^1_%STA* RELMMA_^1_%LDQ- $EB_*ADDRESS OF€€ SYS. DIR._^1_%ADQ* ODPDEN_(PLUS INDEX TO ODP ENTRY_^1_%INQ 6_-PLUS 6 = CELL CONTAINING_^1_%LDA- (ZERO),Q_%MM ADDRESS OF ODP_^1_%ADD* RELMMA_'ADD RELATIVE ADDRESS OF SR_^1_%ENQ 0_^1NOOVF JMP* (MMADDR)_$Q=MSB,A=LSB_^1RELMMA 0_"0_^1ODPDEN ADC ODEBUG_'ODP SYS. DIRECTORY ENTRY INDEX_^1LISTLU 0_"0_,LOC. OF LIST OUTPUT L.U. NO._%**MSOS4.0**_^1COMOLU 0_"0_+LOC. OF COMMENT OUTPUT L.U. €€NO._^1MAXLU ADC NUMLU_K**MSOS4.0**_^1_%SPC 5_^1_%BZS PATCH1(5) **************************************************_^1_%SPC 5_^1_%EQU BUFFER(*)_^1*_*THIS BUFFER MUST MUST REMAIN JUST BEFOR AREA 2_^1_%EQU START(*)_$START -- ONE SHOT START-UP_^1_%SPC 5_^1*_*WRITE INTIAL MESSAGE_^1CHRLOP ENQ 0_^1_%ENA 1_^1_%RTJ* HANDLE_'PRINT START MESSAGE_^1_%JMP LOKMOR_^1_%SPC 5_^1_%EQU LC€€HRIS(BUFFER+LBUFF+LENGTH+LAREA3-ODP)_^1_%EQU PROGIN(BUFFER+LBUFF)_^1_%EQU AREA3(BUFFER+LBUFF+LENGTH)_^1_%SPC 5_^1_%SPC 10_^1*********************************************************************_^1*****************************AREA 2 PROGRAMS*************************_^1*********************************************************************_^1*_]_^1_%EQU SA01(*/96)_^1_%EQU SP01(SA€€01+1)_^1_%EQU DB01(SP01*96)_^1_%BSS (DB01-*)_^1*_]_^1_%SPC 10_^1*_*THIS PROGRAM FINDS THE REQUEST AND CALLS IN THE REQ._^1*_*PROG. INTO PROGIN (AREA 2)._^1_%SPC 5_^1_%EQU GTRREL(*-PROGIN)_^1_%SPC 5_^1*_*GO GET FIRST FIELD_^1GETREQ ENA 2_^1_%ENQ 3_,SET TO GET 3 CHAR. FIELD_^1_%RTJ HANDLE+GTRREL_^1_%SPC 5_^1*_*SEE IF VALID REQUEST_^1_%LDA FIELD+GTRREL IS CONTROL CHAR. LEG€€AL_^1_%SAZ REQOK-*-1_$SKIP YES (ZERO)_^1_%SUB- LPMSK+8_^1_%SAZ REQOK-*-1_$SKIP YES ($FF)_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ REQOK-*-1_$SKIP YES(COMMA)_^1_%ENQ 4_,FORMAT INCORRECT MSG._^1_%JMP MSG+GTRREL_!NO COMMA_^1REQOK ENQ LGNU-1_'SCAN GNUTAB_^1REQLOP LDA* FIELD+3+GTRREL_^1_%EOR* GNUTAB,Q_^1_%INQ -1_^1_%SAN TRYOTH-*-1_^1_%LDA* FIELD+2+GTRREL_^1_%EOR* GNUTAB,Q_^1_%A€€ND- LPMSK+7_^1_%SAZ FOUND-*-1_#FOUND VALID FIELD_^1TRYOTH INQ -1_^1_%SQM LOGILL-*-1_^1_%JMP* REQLOP_^1LOGILL ENQ 5_,ILLEGAL REQUEST_^1_%JMP MSG+GTRREL_^1_%SPC 5_^1*_*VALID REQUEST FOUND_^1_%SPC 2_^1FOUND QRS 1_,2 WORD PER MNUMONIC_^1_%SQN BRING-*-1_#GET CORRECT REQUEST_^1_%SPC 3_^1GETOUT JMP* OFF+GTRREL_"TURN OFF PACKAGE_^1_%SPC 3_^1BRING LDA* REQTAB,Q_^1_%STQ PROG2+G€€TRREL_^1_%RTJ* MMADDR+GTRREL_^1_%STQ MSBPRC+GTRREL_^1_%STA LSBPRC+GTRREL_^1_%JMP BRIPR1+GTRREL GO PUT REQ PROG. IN THIS AREA_^1_%SPC 5_^1*_*MNEMONIC TABLE OF REQUESTS_^1_%SPC 5_^1GNUTAB ALF 2, OFF_'0_^1_%ALF 2, LHX_'1_^1_%ALF 2, DPC_'2_^1_%ALF 2, SCN_^1_%ALF 2, SET_'4_^1_%ALF 2, MBC_'5_^1_%ALF 2, SCH_'6_^1_%ALF 2, SPE_'7_^1_%ALF 2, CPP_'8_^1_%ALF 2, SPP_'9_^1_%ALF €€2, ADH_%10_^1_%ALF 2, SBH_%11_^1_%ALF 2, GEN_'12_^1_%ALF 2, REL_'13_^1_%ALF 2, DAC_'14_^1_%ALF 2, PTH_'15_^1_%ALF 2, ADF_'16_^1_%ALF 2, BSF_'17_^1_%ALF 2, ADR_'18_^1_%ALF 2, BSR_'19_^1_%ALF 2, WEF_'20_^1_%ALF 2, REW_'21_^1_%ALF 2, LHC_'22_@**MSOS4.0**_^1_%ALF 2, LHO_'23_@**MSOS4.0**_^1_%ALF 2, LHM_'24_@**MSOS4.0**_^1_%ALF 2, DDC_'25_@**MSOS4.0**_^1_%ALF 2, MSD_'26_@€€**MSOS4.0**_^1_%ALF 2, CLU_'27_@**MSOS4.0**_^1_%ALF 2, LDC_'28_@**MSOS4.0**_^1_%ALF 2, LDM_'29_@**MSOS4.0**_^1_%ALF 2, WCD_'30_@**MSOS4.0**_^1_%ALF 2, RDC_'31_@**MSOS4.0**_^1_%SPC 3_^1_%EQU LGNU(*-GNUTAB)_%LENGTH OF TABLE_^1_%SPC 5_^1*_*PROGRAM TABLE - LOCATION ON M.M._^1_%SPC 2_^1_%EQU REQTAB(*-1)_!PROGRAM LOCATIONS ON MASS MEMORY_^1_%SPC 2_^1_%ADC LHXREQ-ODP_01_^1_%AD€€C DPCREQ-ODP_02_^1_%ADC SCNREQ-ODP_03_^1_%ADC SETREQ-ODP_04_^1_%ADC MBCREQ-ODP_05_^1_%ADC SCHREQ-ODP_06_^1_%ADC SPEREQ-ODP_07_^1_%ADC CPPREQ-ODP_08_^1_%ADC SPPREQ-ODP_09_^1_%ADC ADHREQ-ODP_/10_^1_%ADC SBHREQ-ODP_/11_^1_%ADC GENREQ-ODP_"12_^1_%ADC RELREQ-ODP_"13_^1_%ADC DACREQ-ODP_"14_^1_%ADC PTHREQ-ODP_"15_^1_%ADC MTRREQ-ODP_"16_^1_%ADC MTRREQ-ODP_"17_^1_%ADC MTRRE€€Q-ODP_"18_^1_%ADC MTRREQ-ODP_"19_^1_%ADC MTRREQ-ODP_"20_^1_%ADC MTRREQ-ODP_"21_^1_%ADC LHCREQ-ODP_"22_@**MSOS4.0**_^1_%ADC LHCREQ-ODP_"23_@**MSOS4.0**_^1_%ADC LHCREQ-ODP_"24_@**MSOS4.0**_^1_%ADC DPCREQ-ODP_"25_@**MSOS4.0**_^1_%ADC MSDREQ-ODP_"26_@**MSOS4.0**_^1_%ADC CLUREQ-ODP_"27_@**MSOS4.0**_^1_%ADC LDCREQ-ODP_"28_@**MSOS4.0**_^1_%ADC LDCREQ-ODP_"29_@**MSOS4.0**_^1_%AD€€C RCDREQ-ODP_"30_@**MSOS4.0**_^1_%ADC RCDREQ-ODP_"31_@**MSOS4.0**_^1_%BZS PATCH2(5) **************************************************_^1_%SPC 10_^1*_]_^1_%EQU SA02(*/96)_^1_%EQU SP02(SA02+1)_^1_%EQU DB02(SP02*96)_^1_%BSS (DB02-*)_^1*_]_^1 EJT_]_^1*_$THIS PROCESSOR LOADS WORDS FROM THE_^1*_%INPUT COMMENT MEDIUM TO CORE._^1*_]_^1*_$REQUEST HAS FOLLOWING FORMAT._^1*_'LHX,CORE€€ LOC.,BASE/DATA,OP CODE*ADDRESS(CR)_^1*_%ALL FIELDS PRECEDING SLASH ARE ADDED TO_^1*_'OBTAIN STARTING CORE LOCATION._^1*_%AN OP. CODE OF ZERO CAUSES 16 BIT RELATIVE_^1*_'ADDRESS TO BE STORED._^1*_]_^1_%EQU LHXREL(*-PROGIN)_^1*_]_^1LHXREQ CLR A_^1_%STA* LHXSLH_'RESET SLASH FLAG AND_^1_%STA* LHXRLV_(RELATIVE FLAG_^1_%STA* CORNDX_'SET CORE INDEX AND OPCODE_^1_%STA* OPCODE_(TO ZERO_^€€1LHX001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_,GET NEXT FIELD_^1_%RTJ HANDLE+LHXREL_^1_%ENA 3_,CONVERT TO HEX_^1_%RTJ HANDLE+LHXREL_^1LHXVAL 0_"0_^1_%LDA FIELD+LHXREL CONTROL CHAR.=SLASH_^1_%INA -SLASH_^1_%SAN LHX002-*-1_#SKIP NO_^1_%JMP* LHX009_(YES_^1LHX002 INA -ASTRIC+SLASH CONTROL CHAR.=ASTERISK_^1_%SAN LHX003-*-1_#SKIP NO_^1_%LDA* LHXSLH_'IS LHX SLASH FLAG SET_^€€1_%SAN LHX02A-*-1_#SKIP YES_^1_%JMP* LHX09A_(ILLEGAL_^1LHX02A SET A_-YES,SET RELATIVE FLAG_^1_%STA* LHXRLV_^1_%LDA* LHXVAL_'SAVE VALUE AS OP CODE_^1_%ALS 8_^1_%AND- NZERO+8_^1_%STA* OPCODE_^1_%JMP* LHX001_'RETURN FOR NEXT FIELD_^1LHX003 INA -COMMA+ASTRIC CONTROL CHAR.=COMMA_^1_%SAN LHX006-*-1_#SKIP NO_^1_%LDA* LHXSLH_'LHX SLASH FLAG SET_^1_%SAN LHX004-*-1_$SKIP YES_^1LHX010 L€€DA* CORNDX_)ADD VALUE TO CORE INDEX_^1_%ADD* LHXVAL_^1_%STA* CORNDX_^1_%JMP* LHX005_J**MSOS4.0**_^1LHX004 RTJ* LHXPRO_'GO PROCESS VALUE_^1LHX005 JMP* LHX001_'RETURN TO GET NEXT FIELD_^1*_$CONTROL CHARACTER MUST BE EOT_^1LHX006 LDA* LHXSLH_(IF END OF BUFFER CHECK IF_**398_^1*_9SLASH HAS BEEN READ_0*398_^1_%SAN LHX06A_%OK, STORE VALUE IN CORE_.*398_^1_%JMP* LHX09A_(ILLEGAL - FORMAT €€INCORRECT_)*398_^1LHX06A RTJ* LHXPRO_'GO PROCESS VALUE_^1LHX008 JMP SOMMOR+LHXREL EXIT PROCESSOR_^1*_$HERE IF CONTROL CHAR.=SLASH_^1LHX009 CLR A_,RESET SYSTEM SLASH FLAG_^1_%STA SLASHF+LHXREL (NOTE,SEE GET FIELD SUB.)_^1_%LDA* LHXSLH_'LHX SLASH FLAG SET_^1_%SAZ LHX110-*-1_#SKIP NO_^1LHX09A ENQ 4_-OUTPUT FORMAT INCORRECT_^1_%JMP MSG+LHXREL_#MSG._^1LHX110 SET A_-SET LHX SLASH€€ FLAG_^1_%STA* LHXSLH_^1_%JMP* LHX010_^1*_]_^1*_$SUBROUTINE TO STORE VALUE INTO CORE_^1LHXPRO 0_"0_^1_%LDQ* LHXRLV_'RELATIVE FLAG SET_^1_%LDA* LHXVAL_((LOAD VALUE TO A)_^1_%SQN 1_O**MSOS4.0**_^1_%JMP* LHX100_J**MSOS4.0**_^1_%SAM LHXPR2_'OKAY IF THIS IS NEG ALL CASES_$**MSOS4.0**_^1_%LDA* CORNDX_J**MSOS4.0**_^1_%SAM LHXPR3_'OKAY BOTH NEG_5**MSOS4.0**_^1_%LDA* LHXVAL_'NOT OKAY CAS€€E VAL +, NDX -_(**MSOS4.0**_^1_%TCA A_-USE OPPOSIT TO GET_.**MSOS4.0**_^1_%ADD* CORNDX_*PROPER REL VALUE_/**MSOS4.0**_^1_%JMP* LHXPR1_J**MSOS4.0**_^1LHXPR3 LDA* LHXVAL_J**MSOS4.0**_^1LHXPR2 SUB* CORNDX_'CALC REL ADDRESS_2**MSOS4.0**_^1LHXPR1 LDQ* OPCODE_'OR IN OPCODE IF NOT ZERO_***MSOS4.0**_^1_%LDQ* OPCODE_(OR IN OP CODE IF NON-ZERO_^1_%SQZ LHX100-*-1_^1_%AND- LPMSK+8_^1_%EAQ €€A_^1LHX100 STA* (CORNDX)_%STORE INTO CORE_^1_%RAO* CORNDX_'INCREMENT CORE INDEX_^1_%CLR A_,RESET RELATIVE FLAG_^1_%STA* LHXRLV_^1_%JMP* (LHXPRO)_$RETURN TO CALLER_^1*_$CONSTANTS AND STORAGE_^1LHXSLH 0_"0_,LHX SLASH FLAG_^1LHXRLV 0_"0_,RELATIVE ADDRESS FLAG_^1CORNDX 0_"0_,CORE INDEX_^1OPCODE 0_"0_,OP CODE_^1LHXBLK ALF 1,_+ASCII BLANK CODES_^1_%SPC 5_^1*_]_^1_%EQU SA03(*/96)_^1_%€€EQU SP03(SA03+1)_^1_%EQU DB03(SP03*96)_^1_%BSS (DB03-*)_^1 EJT_]_^1*_$THIS PROCESSOR DUMPS CORE CELLS ON THE_^1*_%OUTPUT COMMENT MEDIUM.THE REQUEST HAS THE_^1*_%FOLLOWING FORMAT._^1*_(DPC,START CORE,END CORE,BASE(CR)_^1*_]_^1_%EQU DPCREL(*-PROGIN)_^1*_]_^1DPCREQ ENA 3_,INITIALIZE FIELD INDEX_^1_%STA* DPCFLX_(TO 3_^1_%CLR A_,INITIALIZE BASE ADDRESS_^1_%STA* DPCBSE_^1_%LDA PRO€€G2+DPCREL_D**MSOS4.0**_^1_%INA -5_N**MSOS4.0**_^1_%STA* DDCFLG_'DPC IS MINUS, DDC IS PLUS_)**MSOS4.0**_^1DPC001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+DPCREL GET FIELD_^1_%LDA FIELD+DPCREL CONTOL CHAR.=NONE_^1_%SAZ DPC002-*-1_#SKIP YES_^1_%SUB- LPMSK+8_%CONTROL CHAR.=$FF_^1_%SAZ DPC002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_%CONTROL CHAR.=COMMA_^1_%INA -COMMA_^1_€€%SAZ DPC002-*-1_#SKIP YES_^1DPC008 ENQ 4_,INITIATE FORMAT INCORRECT_^1_%JMP MSG+DPCREL_#MESSAGE_^1DPC002 ENA 3_,CONVERT ASCII TO HEX_^1_%RTJ HANDLE+DPCREL_^1DPCVAL 0_"0_^1_%LDA* DPCVAL_'STORE VALUE_^1_%LDQ* DPCFLX_^1_%STA* DPCBSE-1,Q_^1_%INQ -1_+DECREMENT FIELD INDEX_^1_%STQ* DPCFLX_^1_%SQZ DPC003-*-1_"SKIP IF ALL FIELD DONE_^1_%JMP* DPC001_'GET NEXT FIELD_^1DPC003 LDA* DPCS€€TA_'ADD START AND BASE_^1_%ADD* DPCBSE_^1_%STA* DPCSTR_(STORE AS START_^1_%STA* DDCSTR_J**MSOS4.0**_^1DPC007 LDA* DPCFIN_'LAST=0_^1_%SAZ DPC004-*-1_#SKIP IF 0_^1_%ADD* DPCBSE_'ADD LAST AND BASE_^1_%JMP* DPC005_^1DPC009 JMP* DPC008_^1DPC004 LDA* DPCSTR_^1DPC005 STA* DPCFIN_(STORE LAST_^1_%LDA* DPCFIN_'IF FIRST GREATER THAN LAST_^1_%SAP DPCOK1_J**MSOS4.0**_^1_%LDA* DPCSTR_J**MSOS4.€€0**_^1_%SAM DPCOK_K**MSOS4.0**_^1_%JMP* DPC006_'FIN MINUS, STR PLUS IS OKAY_'**MSOS4.0**_^1DPCOK1 LDA* DPCSTR_'IS STR LT FIN_5**MSOS4.0**_^1_%SAP DPCOK_K**MSOS4.0**_^1_%JMP* DPC004_(SET LAST TO FIRST_0**MSOS4.0**_^1DPCOK LDA* DPCFIN_J**MSOS4.0**_^1_%SUB* DPCSTR_(SET LAST = FIRST_^1_%SAP DPC006-*-1_^1_%JMP* DPC004_^1DPC006 LDA* DPCFIN_'CHECK FOR MORE THAN ONE_^1_%SAP DPC099_'EN€€D ADDR IN UPPER BANK_,**MSOS4.0**_^1_%LDA* DPCSTR_'BEG ADDR IN UPPER ABNK_,**MSOS4.0**_^1_%SAM DPC098_'YES BOTH IN UPPER BANK_,**MSOS4.0**_^1_%TCA A_-FIN IN UPPER BEG IN LOWER_(**MSOS4.0**_^1_%INA -7_N**MSOS4.0**_^1_%ADD* DPCFIN_J**MSOS4.0**_^1_%SAZ DPCLST-*-1_"SKIP IF LAST LINE_1**MSOS4.0**_^1_%SAM DDCCON_'SKIP IF NOT LAST LINE_-**MSOS4.0**_^1DPC098 LDA* DPCFIN_J**MSOS4.0**_^€€1DPC099 INA -7_N**MSOS4.0**_^1_%SUB* DPCSTR_J**MSOS4.0**_^1_%SAZ DPCLST-*-1_#SKIP IF LAST LINE_^1_%SAP DDCCON_'SKIP IF NOT LAST LINE_-**MSOS4.0**_^1_%JMP* DPCLST_J**MSOS4.0**_^1DDCCON JMP* DPCCON_J**MSOS4.0**_^1DPCLST INA 8_,LAST LINE_^1_%TRA Q_-Q=NO. OF WORDS IN LINE_^1_%LDA* DPCSTR_((TRANSFER START ADDRESS_^1_%STA* DPCST2_)TO THIS CALL)_^1_%STA* DDCST2_J**MSOS4.0**_^1_%LDA* €€DDCFLG_J**MSOS4.0**_^1_%SAP 2_O**MSOS4.0**_^1_%ENA 4_,OUTPUT IN HEXADECIMAL FORMAT_%**MSOS4.0**_^1_%JMP* DPC010_J**MSOS4.0**_^1_%STQ* DDCQTP_J**MSOS4.0**_^1_%ENQ -1_+OUTPUT ADDRESS TAG_0**MSOS4.0**_^1_%ENA 4_O**MSOS4.0**_^1_%RTJ HANDLE+DPCREL_C**MSOS4.0**_^1DDCST2 NUM 0_O**MSOS4.0**_^1_%LDQ* DDCQTP_J**MSOS4.0**_^1_%ENA 7_,OUTPUT IN DECIMAL FORMAT_***MSOS4.0**_^1DPC010 RTJ H€€ANDLE+DPCREL OUTPUT ONE LINE OR LESS_+**MSOS4.0**_^1DPCST2 0_"0_^1_%JMP SOMMOR+DPCREL EXIT PROCESSOR_^1DPCCON ENQ 8_,NOT LAST LINE_^1_%LDA* DDCFLG_J**MSOS4.0**_^1_%SAP 2_O**MSOS4.0**_^1_%ENA 4_,OUTPUT IN HEXADECIMAL FORMAT_%**MSOS4.0**_^1_%JMP* DPC011_J**MSOS4.0**_^1_%STQ* DDCQTP_J**MSOS4.0**_^1_%ENQ -1_+OUTPUT ADDRESS TAG_0**MSOS4.0**_^1_%ENA 4_O**MSOS4.0**_^1_%RTJ HANDLE+D€€PCREL_C**MSOS4.0**_^1DDCSTR NUM 0_O**MSOS4.0**_^1_%LDQ* DDCQTP_J**MSOS4.0**_^1_%ENA 7_,OUTPUT IN DECIMAL FORMAT_***MSOS4.0**_^1DPC011 RTJ HANDLE+DPCREL OUTPUT ONE LINE_3**MSOS4.0**_^1DPCSTR 0_"0_^1_%JMP* DPC006_'GO TO OUTPUT ANOTHER LINE_^1*_$STORAGE_^1DPCFLX 0_"0_,NO. OF REMAINING FIELD TO GET_^1DPCBSE 0_"0_,BASE CORE ADDRESS_^1DPCFIN 0_"0_,LAST CORE ADDRESS_^1DPCSTA 0_"0_,STAR€€T CORE ADDRESS_^1DDCFLG NUM 0_,DPC/DDC FLAG_6**MSOS4.0**_^1DDCQTP NUM 0_,DDC Q TEMP STORAGE_0**MSOS4.0**_^1_%SPC 5_^1*_]_^1_%EQU SA04(*/96)_^1_%EQU SP04(SA04+1)_^1_%EQU DB04(SP04*96)_^1_%BSS (DB04-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR SEARCHES CORE FOR THE (PARTIAL)_^1*_%FIELD AS SPECIFIED IN THE REQUEST._^1*_%THE REQUEST HAS FOLLOWING FORMAT._^1*_(SCN,START CORE,END C€€ORE,NUMBER,MASK,INCREMENT(CR)_^1*_]_^1_%EQU SCNREL(*-PROGIN)_^1*_]_^1SCNREQ ENA 5_,SET INDEX TO GET 5 FIELDS_^1_%STA* SCNFLD_^1_%CLR A_,RESET HEADING FLAG_^1_%STA* SCNHDG_^1SCN001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+SCNREL GET FIELD_^1_%LDA FIELD+SCNREL IS CONTROL CHAR.=COMMA,_^1_%SAZ SCN002-*-1_#$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SCN002-*-1_#SKIP Y€€ES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SCN002-*-1_#SKIP YES_^1SCN012 ENQ 4_,OUTPUT FORMAT INCORRECT MSG._^1_%JMP MSG+SCNREL_#AND EXIT PROCESSOR_^1SCN002 ENA 3_,CONVERT TO HEX_4**MSOS4.0**_^1_%RTJ HANDLE+SCNREL_^1SCNVAL 0_"0_^1_%LDA* SCNVAL_'STORE FIELD_^1_%LDQ* SCNFLD_^1SCN004 STA* SCNINC-1,Q_^1_%INQ -1_+DECREMENT FIELD INDEX_^1_%STQ* SCNFLD_^1_%SQZ SCN005-*-1_#SKIP IF €€INDEX =0 (NO MORE FIELDS)_^1_%JMP* SCN001_^1SCN005 LDA* SCNINC_J**MSOS4.0**_^1_%SAN 2_O**MSOS4.0**_^1_%ENA 1_,MINIMUM INCREMENT IS ONE_***MSOS4.0**_^1_%STA* SCNINC_J**MSOS4.0**_^1_%LDA* SCNMSK_J**MSOS4.0**_^1_%SAN SCN011_J**MSOS4.0**_^1_%SET A_,NO MASK GIVEN MEANS MASK OF $FFFF **MSOS4.0**_^1_%STA* SCNMSK_J**MSOS4.0**_^1SCN011 LDA* (SCNSTR)_$GET WORD FROM CORE_^1_%AND* SCNMSK_€€(MASK AND COMPARE WITH DESIRED_^1_%EOR* SCNNUM_)NUMBER_^1_%SAN SCN006_'SKIP NOT FOUND_4**MSOS4.0**_^1_%JMP* SCN008_'FOUND_=**MSOS4.0**_^1SCN006 LDA* SCNSTR_'INCREMENT CORE STORAGE_^1_%ADD* SCNINC_^1_%STA* SCNSTR_^1_%SAP SCN099_'NOT IN UP BNK_5**MSOS4.0**_^1_%LDA* SCNEND_'END ADDR IN H B_3**MSOS4.0**_^1_%LDA* SCNSTR_'IS BEG ADDR IN H.B. TOO_+**MSOS4.0**_^1_%SAM SCN099_'YES BOTH I€€N H B OK_0**MSOS4.0**_^1_%SUB* SCNSTR_)CHECK FOR SEARCH FINISHED_'**MSOS4.0**_^1_%LDA* SCNEND_(NO_?**MSOS4.0**_^1_%SAP SCN007-*-1_%FINISHED_7**MSOS4.0**_^1_%JMP* SCN011_*NOT FINISHED_3**MSOS4.0**_^1SCN099 LDA* SCNEND_'IS SEARCH FINISHED_0**MSOS4.0**_^1_%SUB* SCNSTR_J**MSOS4.0**_^1_%SAM SCN007-*-1_$SKIP YES_^1_%JMP* SCN011_'GO CHECK NEXT WORD_^1SCN007 ENQ 7_,OUTPUT SEARCH FINISHE€€D_^1_%JMP MSG+SCNREL_#MESSAGE AND EXIT PROCESSOR_^1SCN008 LDA* SCNHDG_'IS HEADING FLAG SET_^1_%SAN SCN009-*-1_#SKIP YES_^1_%ENA 1_,OTHERWISE, SET HEADING FLAG_)69*1567_^1_%STA* SCNHDG_^1_%RTJ- (AMONI)_%AND OUTPUT HEADING TO LISTLU_(69*1567_^1SCNMSP ADC $500+CHRSLV_G69*1567_^1_%ADC SCN009-SCNMSP_E69*1567_^1_%NUM 0_Q69*1567_^1_%ADC $17FF+LISTLU+SCNREL-SCNMSP_64.0*781567_^1_%NU€€M $A_P69*1567_^1_%ADC SCNMSG-SCNMSP_E69*1567_^1_%JMP- (ADISP)_K69*1567_^1SCN009 SQP SCN09A_J4.0*78*1909_^1_%JMP IOERR+SCNREL I/O ERROR PROCESSOR_/4.0*78*1909_^1SCN09A LDA* SCNSTR_'OUTPUT ONE LINE CONTAINING_(4.0*78*1909_^1_%STA* SCN111_(LOCATION AND CONTENTS OF_^1_%ENQ 1_-ONE CELL ._^1_%ENA 4_^1_%RTJ HANDLE+SCNREL_^1SCN111 0_"0_-(LOCATION OF CELL)_^1_%JMP* SCN006_^1*_$CONST€€ANTS AND STORAGE_^1SCNFLD 0_"0_,NO. OF REMAINING FIELD TO GET_^1SCNHDG 0_"0_,HEADING FLAG_^1SCNMSG NUM $A0D_N69*1567_^1_%ALF 8,CELL_!CONTENTS_A69*1567_^1_%NUM $A0D_N69*1567_^1*_$TABLE FOR STORAGE OF FIELDS_^1SCNINC 0_"0_,1_^1SCNMSK 0_"0_,2_^1SCNNUM 0_"0_,3_^1SCNEND 0_"0_,4_^1SCNSTR 0_"0_,5_^1SCNCEL 0_"0_,CONTENTS OF PRESENT CELL_^1_%SPC 5_^1*_]_^1_%EQU SA05(*/96)_^1_%EQU SP05€€(SA05+1)_^1_%EQU DB05(SP05*96)_^1_%BSS (DB05-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR FILLS THE SPECIFIED CORE WITH_^1*_'THE SPECIFIED VALUE._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_'SET,START CORE,END CORE,PATTERN(CR)_^1*_]_^1_%EQU SETREL(*-PROGIN)_^1*_]_^1SETREQ ENA 3_,INITIALIZE TO GET 3 FIELDS_^1_%STA* SETFLD_^1SET001 ENQ 4_,SET TO GET 4 CHAR FIELD_^1_%ENA 2_^1€€_%RTJ HANDLE+SETREL GET FIELD_^1_%LDA FIELD+SETREL IS CONTROL CHAR.= COMMA,_^1_%SAZ SET002-*-1_#$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SET002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SET002-*-1_#SKIP YES_^1SET01A ENQ 4_,PRINT FORMAT_^1_%JMP MSG+SETREL_#INCORRECT MESSAGE AND EXIT PROCES OR_^1SET002 ENA 3_,CONVERT TO HEX_^1_%RTJ HANDLE+SETREL_^1SETVAL 0_"0_^1_%L€€DA* SETVAL_'SAVE FIELD_^1_%LDQ* SETFLD_^1_%STA* SETPAT-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* SETFLD_^1_%SQZ SET003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* SET001_^1SET003 LDA* SETSTR_'CHECK FOR LEGAL ADD._^1SET03B LDQ* SETPAT_'STORE PATTERN INTO CORE_^1SET004 STQ* (SETSTR)_^1_%RAO* SETSTR_^1_%LDA* SETSTR_J**MSOS4.0**_^1_%LDA* SETEND_J**MSOS4.0**_^1_%SAM SET099_J**MSOS4.€€0**_^1_%SAP SET099_J**MSOS4.0**_^1_%SUB* SETSTR_J**MSOS4.0**_^1_%SAP SET005-*-1_"SKIP IF DONE_6**MSOS4.0**_^1_%JMP* SET004_J**MSOS4.0**_^1SET099 LDA* SETEND_J**MSOS4.0**_^1_%SUB* SETSTR_^1_%SAM SET005-*-1_#SKIP IF DONE_^1_%JMP* SET004_^1SET005 JMP SOMMOR+SETREL EXIT PROCESSOR_^1*_]_^1*_$STORAGE_^1*_]_^1SETFLD 0_"0_,NO. OF REMAINING FIELD TO GET_^1SETPAT 0_"0_,PATTERN USED TO FI€€LL CORE_^1SETEND 0_"0_,LAST CORE LOCATION TO RE FILLED_^1SETSTR 0_"0_,FIRST CORE LOCATION TO BE FILLED_^1_%SPC 5_^1*_]_^1_%EQU SA06(*/96)_^1_%EQU SP06(SA06+1)_^1_%EQU DB06(SP06*96)_^1_%BSS (DB06-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR MOVES A BLOCK OF CORE TO_^1*_'ANOTHER LOCATION IN CORE._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT_^1*_(MBC,START CORE,END CORE,NEW LOCATION(€€CR)_^1*_]_^1_%EQU MBCREL(*-PROGIN)_^1*_]_^1MBCREQ ENA 3_,INITIALIZE TO GET 3 FIELDS_^1_%STA* MBCFLD_^1MBC001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+MBCREL GET FIELD_^1_%LDA FIELD+MBCREL IS CONTROL CHAR.=COMMA,_^1_%SAZ MBC002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ MBC002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ MBC002-*-1_#SKIP YES_^1MBC0€€1A ENQ 4_,PRINT FORMAT_^1_%JMP MSG+MBCREL_#INCORRECT MSG. AND EXIT PROCESSOR_^1MBC002 ENA 3_,CONVERT TO HEX_^1_%RTJ HANDLE+MBCREL_^1MBCVAL 0_"0_^1_%LDA* MBCVAL_^1_%LDQ* MBCFLD_^1_%STA* MBCNEW-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* MBCFLD_^1_%SQZ MBC003-*-1_"SKIP IF ALL FIELDS OBTAINED_^1_%JMP* MBC001_^1MBC003 LDA* MBCSTR_'DETERMINE IF BACKWARD MOVE REQUIRED**MSOS4.0**_^€€1_%SAP MBC03B_J**MSOS4.0**_^1_%LDA* MBCNEW_J**MSOS4.0**_^1_%SAM MBC03A_J**MSOS4.0**_^1_%JMP* MBC004_'STR -, NEW PLUS_3**MSOS4.0**_^1MBC03B LDA* MBCNEW_J**MSOS4.0**_^1_%SAM MBC03C_'STR + NEW -_6**MSOS4.0**_^1MBC03A LDA* MBCSTR_J**MSOS4.0**_^1_%SUB* MBCNEW_J**MSOS4.0**_^1_%SAM MBC03C_J**MSOS4.0**_^1_%JMP* MBC004_J**MSOS4.0**_^1MBC03C LDA* MBCNEW_J**MSOS4.0**_^1_%SAP MBC03D_J**M€€SOS4.0**_^1_%LDA* MBCEND_J**MSOS4.0**_^1_%SAM MBC03E_J**MSOS4.0**_^1MBC03D LDA* MBCEND_J**MSOS4.0**_^1_%SAP MBC03E_J**MSOS4.0**_^1_%JMP* MBC006_J**MSOS4.0**_^1MBC03E LDA* MBCNEW_J**MSOS4.0**_^1_%SUB* MBCEND_J**MSOS4.0**_^1_%SAP MBC004_J**MSOS4.0**_^1_%JMP* MBC006_J**MSOS4.0**_^1_%SUB* MBCNEW_^1_%SAP MBC004-*-1_#SKIP IF NO_^1_%LDA* MBCNEW_^1_%SUB* MBCEND_^1_%SAP MBC004-*-1_#SKI€€P IF NO_^1_%JMP* MBC006_(GO TO BACKWARD MOVE_^1MBC004 LDA* (MBCSTR)_$MOVE THE BLOCK_^1_%STA* (MBCNEW)_^1_%LDA* MBCEND_J**MSOS4.0**_^1_%SAP MBC04A_'END POS_;**MSOS4.0**_^1_%LDA* MBCSTR_'END NEG_;**MSOS4.0**_^1_%SAP MBC04B_)STR POS_9**MSOS4.0**_^1MBC04A LDA* MBCEND_J**MSOS4.0**_^1_%SUB* MBCSTR_J**MSOS4.0**_^1_%SAZ MBC005-*-1_F**MSOS4.0**_^1_%SAM MBC005-*-1_F**MSOS4.0**_^1MBC04B R€€AO* MBCSTR_J**MSOS4.0**_^1_%RAO* MBCNEW_J**MSOS4.0**_^1_%JMP* MBC004_^1MBC005 JMP SOMMOR+MBCREL EXIT PROCESSOR_^1*_$BACKWARDS MOVE_^1MBC006 LDA* MBCEND_'CALC. END OF NEW BLOCK_^1_%SUB* MBCSTR_^1_%ADD* MBCNEW_^1_%STA* MBCNEW_^1MBC008 LDA* (MBCEND)_$MOVE THE BLOCK_^1_%STA* (MBCNEW)_^1_%LDA* MBCNEW_^1_%INA -1_^1_%STA* MBCNEW_^1_%LDA* MBCEND_^1_%INA -1_^1_%STA* MBCEND_^1_%SAP MBC08€€A_'END ADDR POS_6**MSOS4.0**_^1_%LDA* MBCSTR_'NO BEG_<**MSOS4.0**_^1_%SAM MBC08A_J**MSOS4.0**_^1_%JMP* MBC008_'END NEG, BEG POS_2**MSOS4.0**_^1MBC08A LDA* MBCEND_J**MSOS4.0**_^1_%SUB* MBCSTR_^1_%SAM MBC007-*-1_#SKIP IF DONE_^1_%JMP* MBC008_^1MBC007 JMP SOMMOR+MBCREL EXIT PROCESSOR_^1*_]_^1*_$STORAGE_^1*_]_^1MBCFLD 0_"0_,NO. OF REMAINING FIELD TO GET_^1MBCNEW 0_"0_,NEW LOCATION O€€F BLOCK_^1MBCEND 0_"0_,END OF PRESENT LOCATION_^1MBCSTR 0_"0_,START OF PRESENT LOCATION_^1_%SPC 5_^1*_]_^1_%EQU SA07(*/96)_^1_%EQU SP07(SA07+1)_^1_%EQU DB07(SP07*96)_^1_%BSS (DB07-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR CREATES A SCHEDULER REQUEST._^1*_%THE FORMAT OF THE REQUEST FOLLOWS._^1*_(SCH,CORE LOCATION,Q-REG.,COMPLETION PRIORITY LEVEL(CR)_^1*_]_^1_%EQU SCHREL(*-PR€€OGIN)_^1*_]_^1SCHREQ ENA 3_,INITIALIZE TO GET 3 FIELDS_^1_%STA* SCHFLD_^1SCH001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+SCHREL GET FIELD_^1_%LDA FIELD+SCHREL IS CONTROL CHAR.=COMMA,_^1_%SAZ SCH002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SCH002-*-1_$SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SCH002-*-1_$SKIP YES_^1_%ENQ 4_,ILLEGAL CHAR. PRINT FORM€€AT INCORRECT_^1_%JMP MSG+SCHREL_$MESSAGE AND EXIT PROCESSOR_^1SCH002 ENA 3_,CONVERT TO HEX_^1_%RTJ HANDLE+SCHREL_^1SCHVAL 0_"0_^1_%LDA* SCHVAL_'SAVE VALUE_^1_%LDQ* SCHFLD_^1_%STA* SCHCPL-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* SCHFLD_^1_%SQZ SCH003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* SCH001_^1SCH003 LDA* SCHCPL_'SET-UP COMPLETION_^1_%AND- LPMSK+4_'PRIORITY LEVEL_^1_€€%TRA Q_^1_%LDA* SCHPAR_^1_%AND- NZERO+4_^1_%EAQ A_^1_%STA* SCHPAR_^1_%LDA* SCHCOM_'SET-UP COMPLETION LOCATION_^1_%STA* SCHPAR+1_^1_%LDQ* SCHQRG_'PASS DESIRED CONTENTS OF Q_^1_%RTJ- (AMONI)_%SCHEDULER REQUEST_^1SCHPAR NUM $1200_^1_%0_"0_^1_%JMP* SOMMOR+SCHREL EXIT PROCESSOR_^1*_]_^1*_$STORAGE_^1*_]_^1SCHFLD 0_"0_,NO. OF REMAINING FIELDS TO GET_^1SCHCPL 0_"0_,COMPLETION PRIORITY L€€EVEL_^1SCHQRG 0_"0_,CONTENTS OF Q-REG._^1SCHCOM 0_"0_,COMPLETION LOCATION_^1_%SPC 5_^1*_]_^1_%EQU SA08(*/96)_^1_%EQU SP08(SA08+1)_^1_%EQU DB08(SP08*96)_^1_%BSS (DB08-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR SEARCHS CORE FOR PARITY._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_(SPE,LAST LOCATION IN CORE(CR)_^1*_]_^1_%EQU SPEREL(*-PROGIN)_^1*_]_^1SPEREQ ENQ 4_,SET TO GET €€4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+SPEREL GET FIELD_^1_%LDA FIELD+SPEREL IS CONTROL CHAR.=COMMA,_^1_%SAZ SPE001-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SPE001-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SPE001-*-1_#SKIP YES_^1SPE000 ENQ 4_-ILLEGAL CONTROL CHAR. OUTPUT FORMAT_^1_%JMP MSG+SPEREL_$INCORRECT MSG. AND EXIT PROCESSOR_^1SPE001 ENQ 2_,IS FIELD BL€€ANK_^1_%LDA FIELD+1+SPEREL,Q_^1_%EOR =N$2020_^1_%SAN SPE01A-*-1_#SKIP NO_^1_%INQ -1_^1_%SQM SPE002-*-1_#SKIP YES_^1_%JMP* SPE001+1_^1SPE01A ENA 3_-NO,CONVERT TO HEX_^1_%RTJ HANDLE+SPEREL_^1SPEVAL 0_"0_^1_%JMP* SPE008_^1SPE002 LDA =N$FFFF_I**MSOS4.0**_^1_%STA* SPEVAL_^1SPE008 CLR A_,INITIALIZE CORE READ INDEX_(**MSOS4.0**_^1_%STA* SPELOC_^1SPE003 IIN 0_,INHIBIT INTERRUPTS €€DURING CHECK_^1_%LDA* (SPELOC)_$READ FROM CORE_^1_%SPE SPE005-*-1_"SKIP IF PARITY ERROR_^1SPE007 EIN 0_,ENABLE INTERRUPTS_^1_%LDA* SPEVAL_'CHECK FINISHED_^1_%SUB* SPELOC_^1_%SAZ SPE004-*-1_#SKIP YES_^1_%RAO* SPELOC_'BUMP INDEX_^1_%JMP* SPE003_^1SPE004 ENQ 7_,OUTPUT SEARCH FINISHED_^1_%JMP MSG+SPEREL_#MSG AND EXIT PROCESSOR_^1SPE005 EIN 0_^1_%LDA* SPELOC_'OUTPUT LOCATION OF PA€€RITY_^1_%STA* SPE006_^1_%ENQ -1_,(NEG. INDICATES ADDRESS ONLY)_^1_%ENA 4_^1_%RTJ HANDLE+SPEREL_^1SPE006 0_"0_^1_%JMP* SPE007_'COTINUE SEARCH_^1SPELOC 0_"0_,LOC. OF PRESENT CELL BEING CHECKED_^1_%SPC 5_^1*_]_^1_%EQU SA09(*/96)_^1_%EQU SP09(SA09+1)_^1_%EQU DB09(SP09*96)_^1_%BSS (DB09-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR CLEARS THE PROGRAM PROTECT BIT_^1*_%FOR THE CELLS€€ SPECIFIED._^1*_%THE FORMAT FOR THE REQUEST IS AS FOLLOWS._^1*_(CPP,START CORE,END CORE(CR)_^1*_]_^1_%EQU CPPREL(*-PROGIN)_^1*_]_^1CPPREQ ENA 2_,INITIALIZE TO GET 2 FIELDS_^1_%STA* CPPFLD_^1CPP001 ENQ 4_,SET TO GET 4 CHAR. FIELDS_^1_%ENA 2_^1_%RTJ HANDLE+CPPREL GET FIELD_^1_%LDA FIELD+CPPREL IS CONTROL CHAR.=COMMA,_^1_%SAZ CPP002-*-1_#$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ C€€PP002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ CPP002-*-1_#SKIP YES_^1CPP01A ENQ 4_,OUTPUT FORMAT INCORRECT_^1_%JMP MSG+CPPREL_#MESSAGE AND EXIT PROCESSOR._^1CPP002 ENA 3_,CONVERT FIELD TO HEX_^1_%RTJ HANDLE+CPPREL_^1CPPVAL 0_"0_^1_%LDA* CPPVAL_'SAVE FIELD_^1_%LDQ* CPPFLD_^1_%STA* CPPEND-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* CPPFLD_^1_%SQZ CPP003-*-1_#SK€€IP IF ALL FIELD OBTAINED_^1_%JMP* CPP001_^1CPP003 LDQ* CPPSTR_'CLEAR PROTECT BIT FROM_,**MSOS4.0**_^1_%CPB 0_-START TO LAST_^1_%RAO* CPPSTR_^1_%LDA* CPPEND_^1_%SAP CPP03A_J**MSOS4.0**_^1_%LDA* CPPSTR_J**MSOS4.0**_^1_%SAP CPP03B_J**MSOS4.0**_^1CPP03A LDA* CPPEND_J**MSOS4.0**_^1_%SUB* CPPSTR_^1_%SAM CPP004-*-1_#SKIP IF DONE_^1CPP03B JMP* CPP003_J**MSOS4.0**_^1CPP004 JMP SOMMOR+C€€PPREL EXIT PROCESSOR_^1*_$STORAGE_^1CPPFLD 0_"0_,NO. OF REMAINING FIELDS_^1CPPEND 0_"0_,LAST CELL TO BE CLEARED_^1CPPSTR 0_"0_,FIRST CELL TO BE CLEARED_^1_%SPC 5_^1*_]_^1_%EQU SA10(*/96)_^1_%EQU SP10(SA10+1)_^1_%EQU DB10(SP10*96)_^1_%BSS (DB10-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR SETS THE PROGRAM PROTECT BIT_^1*_'FOR THE CELLS SPECIFIED._^1*_%THE REQUEST HAS THE FOLLOWI€€NG FORMAT._^1*_(SPP,START CORE,END CORE(CR)_^1*_]_^1_%EQU SPPREL(*-PROGIN)_^1*_]_^1SPPREQ ENA 2_,INITIALIZE TO GET 2 FIELDS_^1_%STA* SPPFLD_^1SPP001 ENQ 4_,SET TO GET 4 CHAR._^1_%ENA 2_^1_%RTJ HANDLE+SPPREL GET FIELD_^1_%LDA FIELD+SPPREL IS CONTROL CHAR.=COMMA,_^1_%SAZ SPP002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SPP002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1€€_%SAZ SPP002-*-1_#SKIP YES_^1SPP01A ENQ 4_,OUTPUT FORMAT_^1_%JMP MSG+SPPREL_$INCORRECT MESSAGE AND EXIT PROCESSOR_^1SPP002 ENA 3_,CONVERT FIELD TO HEX_^1_%RTJ HANDLE+SPPREL_^1SPPVAL 0_"0_^1_%LDA* SPPVAL_'SAVE FIELD_^1_%LDQ* SPPFLD_^1_%STA* SPPEND-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* SPPFLD_^1_%SQZ SPP003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* SPP001_^1SPP003 LDQ* €€SPPSTR_'SET PROTECT BIT FROM_.**MSOS4.0**_^1_%SPB 0_-START TO END_^1_%RAO* SPPSTR_^1_%LDA* SPPEND_^1_%SAP SPP03A_J**MSOS4.0**_^1_%LDA* SPPSTR_J**MSOS4.0**_^1_%SAP SPP03B_J**MSOS4.0**_^1SPP03A LDA* SPPEND_J**MSOS4.0**_^1_%SUB* SPPSTR_^1_%SAM SPP004-*-1_#SKIP IF DONE_^1SPP03B JMP* SPP003_J**MSOS4.0**_^1SPP004 JMP SOMMOR+SPPREL EXIT PROCESSOR_^1*_$STORAGE_^1SPPFLD 0_"0_,NO. OF RE€€MAINING FIELDS TO GET_^1SPPEND 0_"0_,LAST CORE LOC. TO PROTECT_^1SPPSTR 0_"0_,FIRST CORE LOC. TO PROTECT_^1_%SPC 5_^1*_]_^1_%EQU SA11(*/96)_^1_%EQU SP11(SA11+1)_^1_%EQU DB11(SP11*96)_^1_%BSS (DB11-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR ADDS A MAXIMUM OF 8_^1*_'HEXADECIMAL NUMBERS._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_(ADH,NUMBER 1,NUMBER 2,...NUMBER 8(CR)_^1*_]_€€^1_%EQU ADHREL(*-PROGIN)_^1*_]_^1ADHREQ ENA 0_,INITIALIZE ACCUMULATION_^1_%STA* ADHNUM_^1_%ENA 8_,INITIALIZE TO GET 8 FIELDS_^1_%STA* ADHFLD_^1ADH001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+ADHREL GET FIELD_^1_%LDA FIELD+ADHREL IS CONTROL CHAR.=COMMA,_^1_%SAZ ADH002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ ADH002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -€€COMMA_^1_%SAZ ADH002-*-1_#SKIP YES_^1_%ENQ 4_-NO,PRINT FORMAT INCORRECT_^1_%JMP MSG+ADHREL_$MESSAGE AND EXIT PROCESSOR._^1ADH002 ENA 3_,CONVERT FIELD TO HEX_^1_%RTJ HANDLE+ADHREL_^1ADHVAL 0_"0_^1_%LDA* ADHNUM_^1_%ADD* ADHVAL_^1_%STA* ADHNUM_^1_%LDQ* ADHFLD_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* ADHFLD_^1_%SQZ ADH003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* ADH001_^1ADH003€€ ENQ -1_+PRINT THE RESULT_^1_%ENA 4_-(NEG. Q = PRINT ONE HEX. NO.)_^1_%RTJ HANDLE+ADHREL_^1ADHNUM 0_"0_^1_%JMP SOMMOR+ADHREL EXIT PROCESSOR_^1*_$STORAGE_^1ADHFLD 0_"0_,NO. OF REMAINING FIELD TO GET_^1_%SPC 5_^1*_]_^1_%EQU SA12(*/96)_^1_%EQU SP12(SA12+1)_^1_%EQU DB12(SP12*96)_^1_%BSS (DB12-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR SUBTRACTS TWO HEXADECIMAL NUMBERS._^1*_%T€€HE REQUEST HAS THE FOLLOWING FORMAT._^1*_(SBH,NUMBER 1,NUMBER 2(CR)_^1*_]_^1_%EQU SBHREL(*-PROGIN)_^1*_]_^1SBHREQ ENA 2_,INITIALIZE TO GET 2 FIELDS_^1_%STA* SBHFLD_^1SBH001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+SBHREL GET FIELD_^1_%LDA FIELD+SBHREL IS CONTROL CHAR.=COMMA,_^1_%SAZ SBH002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SBH002-*-1_#SKIP YES_^1_%A€€DD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SBH002-*-1_#SKIP YES_^1_%ENQ 4_,ILLEGAL CHAR. PRINT FORMAT INCORRECT_^1_%JMP MSG+SBHREL_$MESSAGE AND EXIT PROCESSOR_^1SBH002 ENA 3_,CONVERT TO HEX_^1_%RTJ HANDLE+SBHREL_^1SBHVAL 0_"0_^1_%LDA* SBHVAL_'SAVE FIELD_^1_%LDQ* SBHFLD_^1_%STA* SBHNUM-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* SBHFLD_^1_%SQZ SBH003-*-1_#SKIP IF ALL FIELDS OBTAINE€€D_^1_%JMP* SBH001_^1SBH003 LDA* SBHNUM+1_$SUBTRACT FIELDS AND SAVE_^1_%SUB* SBHNUM_(FOR TYPE-OUT_^1_%STA* SBH004_^1_%ENQ -1_^1_%ENA 4_^1_%RTJ HANDLE+SBHREL TYPE VALUE_^1SBH004 0_"0_^1_%JMP SOMMOR+SBHREL EXIT PROCESSOR_^1SBHFLD 0_"0_,NO. OF REMAINING FIELDS TO GET_^1SBHNUM BZS SBHNUM(2)_#STORAGE FOR THE TWO FIELDS_^1_%SPC 5_^1*_]_^1_%EQU SA13(*/96)_^1_%EQU SP13(SA13+1)_^1_%E€€QU DB13(SP13*96)_^1_%BSS (DB13-*)_^1*_]_^1*_$THIS PROCESSOR ALLOCATES SCRATCH AREA IN_^1*_$ALLOCATABLE CORE. THE REQUEST PRIORITY HAS THE_^1*_$FOLLOWING FORMAT._^1*_*GEN,LENGTH,REQUEST,PRIORITY(CR)_^1*_]_^1_%EQU GENREL(*-PROGIN)_^1*_]_^1GENREQ ENA 2_^1_%STA* GENFLD_^1_%ENQ 4_,SET TO GET 4 CHAR. FIELD_^1GEN001 ENA 2_^1_%RTJ HANDLE+GENREL_^1_%LDA FIELD+GENREL IS CONTROL CHAR€€.=COMMA,_^1_%SAZ GEN002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ GEN002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ GEN002-*-1_#SKIP YES_^1GEN004 ENQ 4_,OUTPUT FORMAT INCORRECT MSG._^1_%JMP MSG+GENREL_#AND EXIT PROCESSOR_^1GEN002 ENA 3_,CONVERT TO HEX_^1_%RTJ HANDLE+GENREL_^1GENVAL 0_"0_^1_%LDA* GENVAL_'STORE FIELD_^1_%LDQ* GENFLD_^1_%STA* GENRPL-1,Q_^1_%INQ -1_€€^1_%STQ* GENFLD_^1_%SQZ GEN003-*-1_^1_%ENQ 1_,SET TO GET 1 CHAR. FIELD_^1_%JMP* GEN001_^1GEN003 LDA* GENRPL_'IS REQUEST PL GREATER THAN_^1_%SUB- THREE_)TWO (TO AVOID ANY DIFFICULTIES)_^1_%SAP GEN005-*-1_#SKIP YES_^1_%JMP* GEN004_(GO TO OUTPUT MSG._^1GEN005 LDA* GENPAR_'PUT REQUEST PRIORITY_^1_%AND =N$FF0F_'INTO CALL_^1_%ALS 12_^1_%EOR* GENRPL_^1_%ALS 4_^1_%STA* GENPAR_^1_%LDA€€* GENLTH_'PUT LENGTH INTO CALL_^1_%STA* GENPAR+4_^1_%RTJ- (AMONI)_%ALLOCATE CORE_^1GENPAR ADC $1500+CHRSLV_^1_%ADC GEN006-GENPAR_^1_%0_"0_^1_%0_"0_^1_%0_"0_^1_%JMP- (ADISP)_^1GEN006 SQP GEN007-*-1_"SKIP IF ALLOCATION MADE_^1_%ENQ 8_-OUTPUT NO CORE AVAILABLE_^1_%JMP MSG+GENREL_$MSG._^1GEN007 STQ* GENLTH_'SAVE STARTING LOCATION_^1_%ADQ* GENPAR+4_^1_%INQ -1_+DECREASE BY 1 FOR CO€€RRECT ADDRESS_#PSR 1071_^1_%ENA 6_,CONVERT LAST LOCATION_^1_%RTJ HANDLE+GENREL_!TO ASCII_^1_%ADC GENLST-*_^1_%LDQ* GENLTH_^1_%ENA 6_,CONVERT STARTING LOCATION_^1_%RTJ HANDLE+GENREL_!TO ASCII_^1_%ADC GENSTR-*_^1_%RTJ- (AMONI)_%OUTPUT MSG._^1GENPR1 ADC $500+CHRSLV_^1_%ADC GEN008-GENPR1_^1_%0_"0_^1_%ADC $17FF+COMOLU+GENREL-GENPR1_64.0*78*1909_^1_%ADC GENMLG_^1_%ADC GENMSG-G€€ENPR1_^1_%JMP- (ADISP)_^1GEN008 SQP GEN08A_J4.0*78*1909_^1_%JMP IOERR+GENREL I/O ERROR PROCESSOR_/4.0*78*1909_^1GEN08A JMP SOMMOR+GENREL EXIT PROCESSOR_44.0*78*1909_^1*_$STORAGE_^1GENFLD 0_"0_,NO. OF REMAINING FIELDS TO GET_^1GENRPL 0_"0_,REQUEST PRIORITY LEVEL_^1GENLTH 0_"0_,LENGTH OF REQUEST_^1GENRP2 0_"0_,REQUEST PRIORITY LEVEL_^1*_$MESSAGE SKELETON_^1_%0_"0_,(FOR BUFFERING)€€_^1GENMSG NUM $A0D_)(CARRIAGE RETURN)_^1_%ALF 10,CORE ALLOCATED FROM_^1GENSTR 0_"0_,STARTING LOCATION_^1_%0_"0_^1_%ALF 2, TO_^1GENLST 0_"0_,LAST LOCATION_^1_%0_"0_^1_%NUM $A0D_)(CR)_^1_%EQU GENMLG(*-GENMSG)_^1_%SPC 5_^1*_]_^1_%EQU SA14(*/96)_^1_%EQU SP14(SA14+1)_^1_%EQU DB14(SP14*96)_^1_%BSS (DB14-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR RELEASES CORE STARTING AT THE_^€€1*_%LOCATION SPECIFIED. THE REQUEST HAS THE_^1*_%FOLLOWING FORMAT._^1*_(REL,START OF CORE TO BE RELEASED_^1*_]_^1_%EQU RELREL(*-PROGIN)_^1*_]_^1RELREQ ENQ 4_,GET ONLY FIELD_^1_%ENA 2_^1_%RTJ HANDLE+RELREL_^1_%ENA 3_,CONVERT TO HEX_^1_%RTJ HANDLE+RELREL_^1RELVAL 0_"0_^1_%LDA* RELVAL_'STORE LOCATION FOR_^1_%SAM REL001-*-1_#SKIP ILLEGAL ADD._^1_%STA* RELSTR_(RELEASE_^1_%RTJ- (A€€MONI)_^1_%NUM $1800_^1RELSTR 0_"0_^1_%JMP SOMMOR+RELREL EXIT PROCESSOR_^1REL001 ENQ 4_,OUTPUT MSG AND_^1_%JMP MSG+RELREL_#EXIT PROCESSOR_^1_%SPC 5_^1*_]_^1_%EQU SA15(*/96)_^1_%EQU SP15(SA15+1)_^1_%EQU DB15(SP15*96)_^1_%BSS (DB15-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR DUMPS A MAP OF ALLOCATABLE CORE._^1*_%THE MAP IS OBTAINED UNDER INTERRUPT LOCK-OUT_^1*_%AT THE PRIORIT€€Y LEVEL OF ODP. THE REQUEST HAS_^1*_%THE FOLLOWING FORMAT._^1*_(DAC(CR)_^1*_]_^1_%EQU DACREL(*-PROGIN)_^1*_]_^1_%EXT CALTHD,LVLSTR,LEND_^1DACREQ ENQ 15_*SET CORE INDEX TO START OF_^1_%LDA+ LVLSTR,Q_%AVAILABLE CORE_^1_%STA- I_^1_%LDA+ LEND_)GET LAST AVAILABLE CORE LOC._^1_%STA* DACLP1_^1_%CLR Q_,INITIALIZE PIECE STORE INDEX_^1_%IIN 0_,IHIBIT INTERRUPTS DURING SNAP SHOT_^1DAC00€€1 LDA- I_,STORE CORE INDEX AS START_^1_%STA* DACTBL,Q_%OF PIECE_^1_%LDA- (ONE),I_%IS THIS PIECE OF CORE BEING USED_^1_%SUB- I_^1_%INA -2_^1_%SAN DAC002-*-1_#SKIP NO_^1_%LDA- (ZERO),I_$GET LENGTH OF PIECE_^1_%JMP* DAC003_^1DAC002 ENA -1_+GET * FLAG TO INDICATE PIECE EMPTY_^1DAC003 STA* DACTBL+1,Q_"STORE LENGTH OR FLAG FOR MSG._^1_%INQ 2_,INCREMENT PIECE STORE INDEX BY 2_^1_%LDA*€€ DACMXP_'IS PIECE INDEX=MAX._^1_%AAQ A_-(STORAGE FOR SNAP SHOT FULL)_^1_%SAP DAC005-*-1_#SKIP YES_^1_%LDA- I_,ADD LENGTH OF PIECE TO CORE_^1_%ADD- (ZERO),I_%INDEX_^1_%STA- I_^1_%SUB* DACLP1_'IS THIS END OF ALLOCATABLE CORE_^1_%SAP DAC004-*-1_#SKIP YES_^1_%JMP* DAC001_^1DAC004 LDA- I_,STORE END OF ALLOCATABLE CORE_^1_%INA -1_,FOR MSG._^1_%STA* DACTBL,Q_^1_%ENA -2_+STORE END FLA€€G_^1_%STA* DACTBL+1,Q_^1_%INQ 2_,BUMP PIECE STORE INDEX_^1DAC005 STQ* DACSTO_'SAVE IT_^1_%EIN 0_,RESTORE INTERRUPTS_^1*_$BUILD MESSAGE TO PRINT MAP_^1_%CLR Q_,INITIALIZE MSG. STORE INDEX_^1_%STQ* DACMSX_(AND PIECE REMOVAL INDEX_^1_%STQ* DACREM_^1DAC006 LDA* DACMSX_'CALC. RELATIVE ADDRESS FOR_^1_%ADD* DACMR1_(HEXASC CALL_^1_%STA* DAC007_^1_%LDQ* DACTBL,Q_$GET START OF PIECE_^1_%E€€NA 6_^1_%RTJ HANDLE+DACREL CONVERT TO ASCII AND STORE_^1DAC007 0_"0_-IN MSG._^1_%RAO* DACMSX_'BUMP MSG. STORE BY 2_^1_%RAO* DACMSX_^1_%LDQ* DACREM_'IS NEXT WORD LENGTH OF PIECE_^1_%LDQ* DACTBL+1,Q_^1_%SQP DAC009-*-1_#SKIP YES_^1_%INQ 1_,IS IT * FLAG_^1_%SQZ DAC008-*-1_#SKIP YES_^1_%JMP* DAC011_^1DAC008 LDA =N$A0D_'PUT CR AND ASTERISK INTO_^1_%LDQ* DACMSX_(MSG._^1_%STA* DACMSG€€,Q_^1_%INQ 1_^1_%LDA =N$2A_)(ASTERISK=$2A)_^1_%STA* DACMSG,Q_^1_%INQ 1_^1_%STQ* DACMSX_^1_%JMP* DAC011_^1DAC009 LDA =N$2020_%PUT SPACE INTO MSG._^1_%LDQ* DACMSX_^1_%STA* DACMSG,Q_^1_%RAO* DACMSX_^1_%LDA* DACMSX_'CALC. RELATIVE ADDRESS FOR_^1_%ADD* DACMR2_(HEXASC CALL_^1_%STA* DAC010_^1_%LDQ* DACREM_'GET LENGTH_^1_%LDQ* DACTBL+1,Q_^1_%ENA 6_,CONVERT LENGTH TO ASCII_^1_%RTJ HAN€€DLE+DACREL_^1DAC010 0_"0_^1_%RAO* DACMSX_^1_%RAO* DACMSX_^1DAC011 LDA* DAC008+1_$PUT CR RETURN INTO MSG._^1_%LDQ* DACMSX_^1_%STA* DACMSG,Q_^1_%RAO* DACMSX_^1_%LDA* DACREM_'INCREASE REMOVE INDEX_^1_%INA 2_-BY 2_^1_%STA* DACREM_^1_%TRA Q_^1_%SUB* DACSTO_'IS REMOVE INDEX=PIECE INDEX_^1_%SAZ DAC012-*-1_#SKIP YES (DONE)_^1_%JMP* DAC006_^1DAC012 LDA* DACMSX_'CALC. LENGTH OF MSG._^1_%I€€NA 12_^1_%STA* DACPAR+4_^1_%RTJ- (AMONI)_%OUTPUT MSG._^1DACPAR ADC $500+CHRSLV_^1_%ADC DAC013-DACPAR_^1_%0_"0_^1_%ADC $17FF+LISTLU+DACREL-DACPAR_64.0*78*1909_^1_%0_"0_^1_%ADC DACSKL-DACPAR_^1_%JMP- (ADISP)_^1DAC013 SQP DAC13A_J4.0*78*1909_^1_%JMP IOERR+DACREL I/O ERROR PROCESSOR_/4.0*78*1909_^1DAC13A JMP SOMMOR+DACREL EXIT PROCESSOR_44.0*78*1909_^1*_]_^1*_$CONSTANTS_^1DACL€€P1 0_"0_,LAST LOC. PLUS 1 OF ALLOC. CORE_^1DACTBL BZS DACTBL(18)_"TEMPORARY STORAGE FOR SNAP SHOT_^1DACMXP NUM -18_*MAX. PIECE STORE INDEX_^1DACSTO 0_"0_,PIECE STORE INDEX_^1DACREM 0_"0_,PIECE REMOVE INDEX_^1DACMR1 ADC DACMSG-DAC007 REL. ADDRESSING FOR HEXASC CALL_^1DACMSX 0_"0_,MSG. STORE INDEX_^1DACMR2 ADC DACMSG-DAC010 REL. ADDRESSING FOR HEXASC CALL_^1*_]_^1*_$MESSAGE SKELE€€TON_^1_%0_"0_,(FOR BUFFERING)_^1DACSKL NUM $A0D_)(CR)_^1_%ALF 10,ALLOCATABLE CORE MAP_^1_%NUM $A0D_^1DACMSG 0_"0_^1_%SPC 5_^1*_]_^1_%EQU SA16(*/96)_^1_%EQU SP16(SA16+1)_^1_%EQU DB16(SP16*96)_^1_%BSS (DB16-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR PRINTS THE LOCATION AND THE_^1*_%FIRST 2 WORDS OF THE REQUESTS ON A THREAD,_^1*_%UP TO 10 REQUESTS,AT THE LEVEL OF ODP._^1*_%TH€€E REQUEST HAS THE FOLLOWING FORMAT._^1*_(PTH,LOCATION OF TOP OF THREAD,BASE(CR)_^1*_]_^1_%EQU PTHREL(*-PROGIN)_^1*_]_^1PTHREQ CLR 0_,INITIALIZE BASE TO ZERO_^1_%STA* PTHBSE_^1_%ENA 2_,SET TO GET 2 FIELDS_^1_%STA* PTHFLD_^1PTH001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+PTHREL GET FIELD_^1_%LDA FIELD+PTHREL IS CONTROL CHAR. LEGAL_^1_%SAZ PTH002-*-1_#SKIP YES€€ (ZERO)_^1_%SUB- LPMSK+8_^1_%SAZ PTH002-*-1_#SKIP YES ($FF)_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ PTH002-*-1_#SKIP YES (COMMA)_^1PTH01A ENQ 4_,NO,OUTPUT FORMAT INCORRECT_^1_%JMP MSG+PTHREL_(MSG._^1PTH002 ENA 3_,CONVERT TO HEX_^1_%RTJ HANDLE+PTHREL_^1PTHVAL 0_"0_^1_%LDA* PTHVAL_'SAVE FIELD_^1_%LDQ* PTHFLD_^1_%STA* PTHBSE-1,Q_^1_%INQ -1_+DECREMENT FIELD COUNTER_^1_%STQ* PTH€€FLD_^1_%SQZ PTH003-*-1_#SKIP IF DONE (GOT 2 FIELDS)_^1_%JMP* PTH001_^1PTH003 LDA* PTHBSE_'ADD FIELDS TO GET FINAL_^1_%ADD* PTHTOP_(ABS. LOC. OF TOP OF THREAD_^1PTH03A STA- I_^1_%ENQ 0_,INITIALIZE THREAD ENTRY COUNTER_^1_%IIN 0_,INHIBIT FOR SNAP SHOT_^1_%LDA- (I)_*IS TOP OF THREAD = END OF_^1_%INA 0_-THREAD_^1_%SAN PTH004-*-1_#SKIP NO_^1_%JMP* PTH006_(YES,GO TO TERMINATE_^1PTH0€€04 LDA- (ZERO),I_$GET LOC. OF FIRST ENTRY_^1_%STA- I_^1PTH005 LDA- I_,GET LOCATION OF ENTRY_^1_%STA* PTHTBL,Q_^1_%LDA- (ZERO),I_$STORE WDS 1 AND 2 AND THREAD_^1_%STA* PTHTBL+1,Q_^1_%LDA- (ONE),I_^1_%STA* PTHTBL+2,Q_^1_%LDA- (TWO),I_^1_%STA- I_,UPDATE FOR NEXT ENTRY,IF ANY_^1_%INQ 3_,BUMP THREAD ENTRY COUNTER_^1_%INA 0_,IS THIS END OF THREAD_^1_%SAZ PTH006-*-1_#SKIP YES_^1_%ENA €€-30_*HAVE TEN ENTRIES BEEN FOUND_^1_%AAQ A_-(MAX. ALLOWED)_^1_%SAZ PTH007-*-1_#SKIP YES_^1_%JMP* PTH005_'GO GET NEXT ENTRY_^1PTH006 ENA -0_+STORE EOT FLAG_^1_%STA* PTHTBL,Q_^1_%INQ 1_,BUMP ENTRY COUNTER_^1PTH007 EIN 0_,END OF SNAP SHOT_^1_%STQ* PTHCTR_'SAVE ENTRY COUNTER_^1_%RTJ- (AMONI)_%OUTPUT HEADING_^1PTHPRM ADC $500+CHRSLV_^1_%ADC PTH013-PTHPRM_^1_%0_"0_^1_%ADC $17FF+L€€ISTLU+PTHREL-PTHPRM_64.0*78*1909_^1_%ADC LHEADG_^1_%ADC PTHSKH-PTHPRM_^1_%JMP- (ADISP)_^1PTH013 SQP PTH13A_J4.0*78*1909_^1_%JMP IOERR+PTHREL I/O ERROR PROCESSOR_/4.0*78*1909_^1PTH13A ENA 0_,INITIALIZE INDEX TO SNAP_*4.0*78*1909_^1_%STA* PTHTCT_(SHOT TBL._^1PTH014 CLR A_,INITIALIZE MSG. INDEX_^1_%STA* PTHMSX_^1PTH008 LDA* PTHMSX_'SET-UP REL. LOC. IN HEXASC_^1_%ADD* PTHRML_(CA€€LL FOR ENTRY OF DATA_^1_%STA* PTH009_(INTO MSG. SKELETON_^1_%LDQ* PTHTCT_'GET VALUE_^1_%LDQ* PTHTBL,Q_^1_%ENA 6_^1_%RTJ HANDLE+PTHREL CONVERT TO ASCII AND STORE IN SKEL._^1PTH009 0_"0_^1_%RAO* PTHMSX_'BUMP MSG. INDEX BY 2_^1_%RAO* PTHMSX_^1_%RAO* PTHTCT_'BUMP SNAP SHOT INDEX_^1_%LDA =N$20_(PUT SPACE INTO MSG._^1_%LDQ* PTHMSX_^1_%STA* PTHMSG,Q_^1_%RAO* PTHMSX_'BUMP MSG INDEX BY 1€€_^1_%LDA* PTHTCT_'HAVE ALL VALUES BEEN ASSEM._^1_%SUB* PTHCTR_^1_%SAN PTH010-*-1_#SKIP NO_^1_%RTJ* PTHSR_(ADD CR AND OUTPUT LINE_^1_%JMP SOMMOR+PTHREL EXIT PROCESSOR_^1PTH010 LDA* PTHMSX_'HAS ONE LINE BEEN ASSEM._^1_%INA -9_^1_%SAN PTH011-*-1_#SKIP NO_^1_%RTJ* PTHSR_(ADD CR AND OUTPUT LINE_^1_%JMP* PTH014_'RETURN FOR ANOTHER LINE_^1PTH011 JMP* PTH008_'CONTINHUE LINE_^1*_]_^1*_$€€SR TO ADD CR AND OUTPUT_^1*_%ONE LINE_^1*_]_^1PTHSR 0_"0_^1_%LDA =N$A0D_'ADD CR_^1_%LDQ* PTHMSX_^1_%STA* PTHMSG,Q_^1_%INQ 1_^1_%STQ* PTHPAR+4_$STORE MSG. LENGTH_^1_%RTJ- (AMONI)_%OUTPUT MSG._^1PTHPAR ADC $500+CHRSLV_^1_%ADC PTH012-PTHPAR_^1_%0_"0_^1_%ADC $17FF+LISTLU+PTHREL-PTHPAR_64.0*78*1909_^1_%0_"0_^1_%ADC PTHMSG-PTHPAR_^1_%JMP- (ADISP)_^1PTH012 SQP PTH12A_J4.0*78*1909_€€^1_%JMP IOERR+PTHREL I/O ERROR PROCESSOR_/4.0*78*1909_^1PTH12A JMP* (PTHSR)_%RETURN TO CALLER_24.0*78*1909_^1*_]_^1*_$CONSTANTS_^1PTHBSE 0_"0_,BASE_^1PTHTOP 0_"0_,RELATIVE ADDRESS OF TOP OF THREAD_^1PTHFLD 0_"0_,NO. OF REMAINING FIELDS TO GET_^1PTHCTR 0_"0_,TABLE ENTRY COUNTER_^1PTHTCT 0_"0_,TABLE REMOVE COUNTER_^1PTHMSX 0_"0_,MSG. INDEX_^1PTHRML ADC PTHMSG-PTH009 RELATIVE BASE €€FOR HEXASC CALL_^1PTHTBL BZS PTHTBL(31)_"TABLE TO STORE ENTRIES ON THREAD_^1*_$MESSAGE SKELETONS_^1_%0_"0_,(FOR BUFFERING)_^1PTHSKH NUM $A0D_)MSG. SKELETON FOR HEADING_^1_%ALF 7,LOC. WD1 WD2_^1_%NUM $A0D_^1_%EQU LHEADG(*-PTHSKH)_^1*_]_^1PTHMSG BZS PTHMSG(10)_"MSG. FOR DATA TO BE ASSEM. BY PROG._^1_%BZS (20)_^1_%SPC 5_^1*_]_^1_%EQU SA17(*/96)_^1_%EQU SP17(SA17+1)_^1_%EQU €€ DB17(SP17*96)_^1_%BSS (DB17-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS PROCESSOR HANDLES ALL MAG TAPE MOTION REQUESTS._^1*_%THE FOLLOWING REQUESTS ARE PROCESSED BY THIS_^1*_'PROCESSOR._^1*_%ALL VALUES IN THESE REQUESTS ARE IN DECIMAL_^1*_(ADF,LU,NO. OF FILES(CR)_^1*_(BSF,LU,NO. OF FILES(CR)_^1*_(ADR,LU,NO. OF RECORDS(CR)_^1*_(BSR,LU,NO. OF RECORDS(CR)_^1*_(WEF,LU,NO. OF FILES(CR)_^1*_(REW€€,LU(CR)_^1*_]_^1_%EQU MTRREL(*-PROGIN)_^1_%EQU MTCLAS(1)_^1*_]_^1MTRREQ ENQ 2_,GET L.U. FIELD_^1_%ENA 2_^1_%RTJ HANDLE+MTRREL_^1_%RTJ* CCCK_^1_%STA* MTRPR1+3_^1_%SUB* MAXLU+MTRREL_D**MSOS4.0**_^1_%INA -1_N**MSOS4.0**_^1_%SAM MTR000_J**MSOS4.0**_^1_%ENQ 9_O**MSOS4.0**_^1_%JMP MSG+MTRREL_#OUTPUT ILLEGAL LU MSG._^1MTR000 ENQ 4_,GET NO. OF FILES(RECORDS) FIELD_^1_%ENA 2_^1_%€€RTJ HANDLE+MTRREL_^1_%RTJ* CCCK_^1_%SUB- $E_+$0FFF. CHECK FOR MAXIMUN TIMES_#**MSOS4.0**_^1_%SAZ MTR00A_'SKIP IF TIMES=MAXIMUM._,**MSOS4.0**_^1_%SAM MTR00A_'SKIP IF TIMES IS LT MAXIMUM._%**MSOS4.0**_^1_%JMP* MTRERR_^1MTR00A LDA* MTRN_L**MSOS4.0**_^1_%SAN MTR001_'IF NO. OF TIMES = 0, SET TO ONE._!**MSOS4.0**_^1_%ENA 1_^1MTR001 STA* MTRN_^1MTR005 LDQ PROG2+MTRREL GET INDEX TO €€MOTION CONTROL CODE_^1_%INQ -16_+FROM MNEMONIC INDEX-16_^1_%LDA* MTRCTW,Q_$PICK UP MOTION CONTROL CHARACTER. **MSOS4.0**_^1_%EOR* MTRN_)SET ITERATIONS IN REQUEST._(**MSOS4.0**_^1_%STA* MTRPR1+4_$STORE IN TAPE MOTION REQUEST_^1_%RTJ- (AMONI)_%TAPE MOTION REQUEST FOR_^1MTRPR1 ADC $1D00+CHRSLV_!3 OR LESS EXECTIONS_^1_%ADC MTR006-MTRPR1_^1_%ADC 0,0,0_^1_%JMP- (ADISP)_^1MTR006 JMP €€ SOMMOR+MTRREL_!GOT TO EXIT PROCESSOR_+**MSOS4.0**_^1*_]_^1*_$SR TO CHECK FOR ACCEPTABLE CONTROL CHARACTER_^1*_%AND CONVERT TO DECIMAL._^1*_]_^1CCCK_!0_"0_^1_%LDA FIELD+MTRREL IS CONTROL CHAR.=COMMA_^1_%SAZ CCCK01-*-1_#$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ CCCK01-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ CCCK01-*-1_#SKIP YES_^1MTRERR ENQ 4_-OUTPUT ERROR MSG._^1_%J€€MP MSG+MTRREL_^1CCCK01 ENA 5_,CONVERT ASCII DEC. TO BINARY_^1_%RTJ HANDLE+MTRREL_^1_%STA* MTRN_L**MSOS4.0**_^1_%JMP* (CCCK)_^1*_$CONSTANTS_^1MTRN_!0_"0_,NO. OF FILES OR RECORDS_^1*_*TABLE OF MOTION CONTROL CODES._2**MSOS4.0**_^1MTRCTW NUM $D000_(0 ADVANCE FILE._2**MSOS4.0**_^1_%NUM $E000_(1 BACKSPACE FILE._0**MSOS4.0**_^1_%NUM $F000_(2 ADVANCE RECORD._0**MSOS4.0**_^1_%NUM €€ $9000_(3 BACKSPACE RECORD._.**MSOS4.0**_^1_%NUM $A000_(4 END OF FILE._3**MSOS4.0**_^1_%NUM $B000_(5 REWIND TAPE._3**MSOS4.0**_^1*_]_^1_%EQU SA18(*/96)_^1_%EQU SP18(SA18+1)_^1_%EQU DB18(SP18*96)_^1_%BSS (DB18-*)_^1*_]_^1 EJT_]_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_8LHC_?**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESS€€OR MODIFIES THE SYSTEM ON MASS MEMORY_#**MSOS4.0**_^1*_%VIA THE INPUT COMMENT MEDIUM_8**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$REQUEST HAS THE FOLLOWING FORMAT_5**MSOS4.0**_^1*_%LHC,COR LOC.,BASE/DATA,OP CODE*ADDRESS(CR)_***MSOS4.0**_^1*_$ALL FIELDS PRECEDING SLASH ARE ADDED TO_.**MSOS4.0**_^1*_%OBTAIN STARTING ADDRESS TO MODIFY_3**MSOS4.0**_^1*_$AN OP CODE OF ZERO CAUSES 16 BIT RELATIVE_€€,**MSOS4.0**_^1*_%ADDRESS TO BE STORED_@**MSOS4.0**_^1*_[**MSOS4.0**_^1*_8LHO_?**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR MODIFIES AN OVERLAY IN THE_,**MSOS4.0**_^1*_%SYSTEM DIRECTORY VIA THE INPUT COMMENT MEDIUM_'**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$REQUEST HAS THE FOLLOWING FORMAT_5**MSOS4.0**_^1*_%LHO,ORDINAL,CORE LOC.,BASE/DATA,OP CODE*ADDRESS(CR) **MSOS4.0**_^1*_$THE ORDIN€€AL IS THE ORDINAL OF THE OVERLAY TO BE_%**MSOS4.0**_^1*_%MODIFIED IN THE SYSTEM DIRECTORY_4**MSOS4.0**_^1*_$ALL FIELDS FOLLOWING THE ORDINAL FIELD TO THE SLASH_!**MSOS4.0**_^1*_%ARE ADDED TO OBTAIN THE LOCATION TO MODIFY_***MSOS4.0**_^1*_$RIGHT SIDE OF SLASH IS SAME AS FOR LHC_/**MSOS4.0**_^1*_[**MSOS4.0**_^1*_7LHM_@**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR MODIFIES WORDS IN€€ ANY GIVEN SECTOR_#**MSOS4.0**_^1*_%IN MASS MEMORY VIA THE COMMENT MEDIUM_/**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$REQUEST HAS THE FOLLOWING FORMAT_5**MSOS4.0**_^1*_%LHM,SECTOR,WORD IN SECTOR/DATA,OP CODE*ADDRESS(CR)_!**MSOS4.0**_^1*_$THE SECTOR NUMBER IS TRANSLATED INTO WORDS AND THE_"**MSOS4.0**_^1*_%WORD NUMBER IS ADDED TO DETERMINE THE MASS MEMORY_"**MSOS4.0**_^1*_%LOCATION TO BE MOD€€IFIED_=**MSOS4.0**_^1*_$RIGHT SIDE OF SLASH IS SAME AS FOR LHC_.**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$NOTE THAT THE NUMBER OF DATA ITEMS PERMITTED IS_%**MSOS4.0**_^1*_%LIMITED BY THE SIZE OF THE BUFFER -- LHCBUF_)**MSOS4.0**_^1*_%THE LIMITING FACTOR IS THAT ANY ONE OVERLAY MUST BE **MSOS4.0**_^1*_%NO LONGER THAN 200 (DECIMAL) WORDS LONG) ANY PSR'S **MSOS4.0**_^1*_%OR OTHER PROGRAM €€MODIFICATIONS MUST TAKE THIS INTO_!**MSOS4.0**_^1*_%ACCOUNT._L**MSOS4.0**_^1*_[**MSOS4.0**_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU LHCBFL(5)_#LOCAL BUFFER LENGTH (SEE LHCOA+4) **MSOS4.0**_^1_%EQU SEVN(5)_I**MSOS4.0**_^1MAXORD EQU MAXORD(37)_F**MSOS4.0**_^1_%EQU LHCREL(*-PROGIN)_@**MSOS4.0**_^1_%EQU L€€HOREL(*-PROGIN)_@**MSOS4.0**_^1LHCREQ RTJ- (AMONI)_%OUTPUT THE INPUT MESSAGE BACK_$**MSOS4.0**_^1LHCOA ADC $D00+CHRSLV_$TO THE COMMENT MEDIUM SO USER_!**MSOS4.0**_^1_%ADC LHCOB-LHCOA_(CAN VERIFY ACCURACY_)**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%ADC COMOUT_J**MSOS4.0**_^1_%ADC $17_*BASED ON BUFFER LENGTH OF 5_'**MSOS4.0**_^1_%ADC BUFFER-LHCOA+LHCREL_=**MSOS4.0**_^1_%JMP- (ADIS€€P)_I**MSOS4.0**_^1LHCOB SQP NERR1_K**MSOS4.0**_^1_%JMP* IOERR+LHCREL_D**MSOS4.0**_^1NERR1 RTJ- (AMONI)_%GET USER'S RESPONSE_/**MSOS4.0**_^1LHCOC ADC $900+CHRSLV_E**MSOS4.0**_^1_%ADC LHCOD-LHCOC_E**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%ADC COMLU_K**MSOS4.0**_^1_%ADC 2_O**MSOS4.0**_^1_%ADC LHCBUF-LHCOC_D**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1LHCOD SQP NERR2_K**MSOS4.0€€**_^1_%JMP* IOERR+LHCREL_D**MSOS4.0**_^1NERR2 LDA* LHCBUF_'IF RESPONSE IS A MERE CARRIAGE_#**MSOS4.0**_^1_%INA 0_/RETURN, THEN PROCEDE_+**MSOS4.0**_^1_%SAZ LHCINB_J**MSOS4.0**_^1_%JMP* LHC09A_+ELSE IGNORE REQUEST_+**MSOS4.0**_^1LHCINB LDQ* PROG2+LHCREL_D**MSOS4.0**_^1_%INQ -22_M**MSOS4.0**_^1_%STQ* LHOCF_(SYSTEM =0, OVERLAY=1, MS=2_(**MSOS4.0**_^1_%SQZ LHCRQ1_'REQ IS LHC_8**MS€€OS4.0**_^1_%INQ -1_N**MSOS4.0**_^1_%SQN LHC001_'REQ IS LHM_8**MSOS4.0**_^1_%JMP* LHOREQ_J**MSOS4.0**_^1LHCRQ1 ENQ 4_,GET START OF CORE IMAGE ON MM_$**MSOS4.0**_^1_%LDA- ($E9),Q_I**MSOS4.0**_^1_%RTJ* LHCWDS_J**MSOS4.0**_^1LHC001 ENQ 4_,GET FOUR CHAR FIELD_/**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+LHCREL_C**MSOS4.0**_^1_%ENA 3_O**MSOS4.0**_^1_%RTJ HANDLE+LHCREL_C**MS€€OS4.0**_^1LHCVAL NUM 0_O**MSOS4.0**_^1_%LDA* FIELD+LHCREL_D**MSOS4.0**_^1_%INA -SLASH_J**MSOS4.0**_^1_%SAN LHC002_'SKIP NO_;**MSOS4.0**_^1_%JMP* LHC009_'YES_?**MSOS4.0**_^1LHC002 INA -COMMA+SLASH CONTROL CHAR = COMMA_.**MSOS4.0**_^1_%SAZ LHC003_'YES COMMA_9**MSOS4.0**_^1_%JMP* LHC006_'NO_@**MSOS4.0**_^1***_"CHAR IS A COMMA_F**MSOS4.0**_^1LHC003 LDA* LHCSLH_'LHC SLASH FLAG SET€€_0**MSOS4.0**_^1_%SAN LHC004_(SKIP YES RT SIDE OF SLASH_(**MSOS4.0**_^1LHC010 LDQ* LHOCF_K**MSOS4.0**_^1_%INQ -2_N**MSOS4.0**_^1_%SQN LHC011_J**MSOS4.0**_^1_%LDA* LMSFLG_'REQUEST IS LHM_3**MSOS4.0**_^1_%SAZ LHC011_'SKIP IF NOT THE SECTOR PARAMETER_!**MSOS4.0**_^1_%STQ* LMSFLG_'CLEAR SECTOR PARAMETER FLAG_'**MSOS4.0**_^1_%LDA* LHCVAL_'LOAD SECTOR PARAMETER_-**MSOS4.0**_^1_%RTJ*€€ LHCWDS_'CONVERT SECTOR TO WORDS_+**MSOS4.0**_^1_%JMP* LHC005_J**MSOS4.0**_^1LHC011 LDQ* LHCNDX_*NO LEFT SIDE ADD VALUE TO_%**MSOS4.0**_^1_%ADQ* LHCVAL_,CORE INDEX_3**MSOS4.0**_^1_%STQ* LHCNDX_J**MSOS4.0**_^1_%JMP* LHC005_J**MSOS4.0**_^1LHC004 RTJ* LHCPRO_'PROCESS VALUE_5**MSOS4.0**_^1LHC005 JMP* LHC001_'RETURN TO GET NEXT FIELD_***MSOS4.0**_^1***_"CONTROL CHAR IS A SLASH_>**MSOS4.€€0**_^1LHC009 STA* SLASHF+LHCREL RESET SYSTEM SLASH FLAG_***MSOS4.0**_^1_%LDA* LHCSLH_'LHC SLASH FLAG SET_0**MSOS4.0**_^1_%SAZ LHC110_'SKIP NO_;**MSOS4.0**_^1LHC09A ENQ 4_,OUTPUT FORMAT INCORRECT_+**MSOS4.0**_^1_%JMP MSG+LHCREL_"MSG_?**MSOS4.0**_^1LHC110 SET A_,SET LHC SLASH FLAG_0**MSOS4.0**_^1_%STA* LHCSLH_J**MSOS4.0**_^1_%JMP* LHC010_J**MSOS4.0**_^1LHC006 INA -ASTRIC+COMMA_€€!CONTROL CHARACTER ASTERISK_%**MSOS4.0**_^1_%SAN LHC007_'SKIP NO_;**MSOS4.0**_^1_%LDA* LHCSLH_'IS LHC SLASH FLAG SET_-**MSOS4.0**_^1_%SAN LHC06A_'SKIP YES_:**MSOS4.0**_^1_%JMP* LHC09A_'ILLEGAL_;**MSOS4.0**_^1LHC06A STA* LHCRLV_'YES SET RELATIVE FLAG_,**MSOS4.0**_^1_%LDA* LHCVAL_'SAVE VALUE AS OP CODE_-**MSOS4.0**_^1_%ALS 8_O**MSOS4.0**_^1_%AND- NZERO+8_I**MSOS4.0**_^1_%STA* LHC€€OPC_J**MSOS4.0**_^1_%JMP* LHC001_'RETURN FOR NEXT FIELD_-**MSOS4.0**_^1***_"CHARACTER MUST BE EOT_@**MSOS4.0**_^1LHC007 LDA* LHCSLH_'LHC SLASH FLAG SET_0**MSOS4.0**_^1_%SAN LHC008_'SKIP YES_:**MSOS4.0**_^1_%JMP* LHC09A_'ILLEGAL_;**MSOS4.0**_^1LHC008 STA* LHCEND_J**MSOS4.0**_^1_%RTJ* LHCPRO_'PROCESS VALUE_5**MSOS4.0**_^1LHCXIT JMP SOMMOR+LHCREL_!EXIT PROCESSOR_2**MSOS4.0**_^1LHCWD€€S NOP 0_,CONVERT SECTORS TO WORDS IN REQUEST**MSOS4.0**_^1_%MUI =N96_L**MSOS4.0**_^1_%LLS 1_O**MSOS4.0**_^1_%ARS 1_O**MSOS4.0**_^1_%AND- $11_M**MSOS4.0**_^1_%STA* LHCLSB_J**MSOS4.0**_^1_%STQ* LHCMSB_J**MSOS4.0**_^1_%JMP* (LHCWDS)_H**MSOS4.0**_^1LMSFLG NUM 7_O**MSOS4.0**_^1LHCSLH NUM 0_,LHC SLASH FLAG_4**MSOS4.0**_^1LHCRLV NUM 0_,RELATIVE FLAG_5**MSOS4.0**_^1LHCNDX NUM 0_,AD€€DRESS TO CHANGE_1**MSOS4.0**_^1LHCOPC NUM 0_,OP CODE (RELATIVE ADDRESSING)_$**MSOS4.0**_^1LHCRC VFD N7/1,N1/1,N4/0,X4/CHRSLV_#READ REQUEST_'**MSOS4.0**_^1LHCWC VFD N7/2,N1/1,N4/0,X4/CHRSLV_#WRITE REQUEST_%**MSOS4.0**_^1LHCSLF NUM 0_,BUFFER LOAD FLAG_2**MSOS4.0**_^1LHCEND NUM 0_O**MSOS4.0**_^1LHOCF NUM 0_,OVERLAY SYSTEM FLAG_/**MSOS4.0**_^1LHCIOS 0_"0_O**MSOS4.0**_^1_%STQ* €€LHCIOR_'STORE REQUEST_5**MSOS4.0**_^1_%RTJ- (AMONI)_%ISSUE FUNCTION_4**MSOS4.0**_^1LHCIOR ADC 0_O**MSOS4.0**_^1LHCIOG ADC LHCIOX-LHCIOR_C**MSOS4.0**_^1_%NUM 0_,THREAD_<**MSOS4.0**_^1_%ADC MASSLU_'L U OF M M DEVICE_1**MSOS4.0**_^1LHCIOL ADC LHCBFL_'NUMBER OF WORDS TO HANDLE_)**MSOS4.0**_^1LHCIOB ADC LHCBUF-LHCIOR_!BUFFER ADDRESS_2**MSOS4.0**_^1LHCMSB NUM 0_,MASS MEMORY ADDRES€€S_/**MSOS4.0**_^1LHCLSB NUM 0_O**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1LHCBUF BZS LHCBUF(LHCBFL)_!LOCAL BUFFER_3**MSOS4.0**_^1LHCIOX SQP LHCIOZ_'SKIP IF NO I/O ERROR_.**MSOS4.0**_^1_%JMP IOERR+LHCREL_D**MSOS4.0**_^1LHCIOZ JMP* (LHCIOS)_H**MSOS4.0**_^1LHCINC NUM 0_O**MSOS4.0**_^1LHOREQ ENQ 4_,GET FOUR CHAR FIELD_/**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+LHCREL_C€€**MSOS4.0**_^1_%ENA 5_,CONVERT FROM DECIMAL_.**MSOS4.0**_^1_%RTJ HANDLE+LHCREL_C**MSOS4.0**_^1_%MUI- SEVN_)ADDRESS_;**MSOS4.0**_^1_%INA -7_.IN SYSTEM DIRECTORY_,**MSOS4.0**_^1_%ADD- $EB_M**MSOS4.0**_^1_%ADD- $E7_M**MSOS4.0**_^1_%TRA Q_O**MSOS4.0**_^1_%LDA- 6,Q_*GET DISK ADDR OF OVERLAY_***MSOS4.0**_^1_%RTJ* LHCWDS_'SECTORS TO WORDS_2**MSOS4.0**_^1_%LDA FIELD+LHCREL_D**MSOS4.0*€€*_^1_%INA -COMMA_'FORMAT REQUIRES ORDINAL TO_(**MSOS4.0**_^1_%SAZ LHO001_(SYSTEM DIRECTORY FIRST_+**MSOS4.0**_^1_%JMP* LHC09A_J**MSOS4.0**_^1LHO001 JMP* LHC001_J**MSOS4.0**_^1LHCPRO 0_"0_O**MSOS4.0**_^1_%LDA* LHCSLF_'SYSTEM LOADED FLAG_0**MSOS4.0**_^1_%SAZ LHC101_'IS NEW BUFFER NEEDED_.**MSOS4.0**_^1_%JMP* LHC102_(NO_?**MSOS4.0**_^1LHC101 SET A_-YES_>**MSOS4.0**_^1_%STA* LHCSLF€€_'SET TO NOT NEXT TIME_.**MSOS4.0**_^1LHO100 LDA* LHCNDX_'OKAY_>**MSOS4.0**_^1_%ADD* LHCLSB_J**MSOS4.0**_^1_%SAP 4_O**MSOS4.0**_^1_%LDQ* LHCMSB_J**MSOS4.0**_^1_%INQ 1_O**MSOS4.0**_^1_%STQ* LHCMSB_J**MSOS4.0**_^1_%AND- $11_M**MSOS4.0**_^1_%STA* LHCLSB_'ADDRESS IN WORD FORM_.**MSOS4.0**_^1_%LDQ* LHCRC_K**MSOS4.0**_^1_%RTJ* LHCIOS_'LOAD BUFFER TO BE CHANGED_)**MSOS4.0**_^1LHC102 LDQ€€* LHCRLV_'RELATIVE FLAG SET_1**MSOS4.0**_^1_%LDA LHCVAL_((LOAD VALUE TO A)_0**MSOS4.0**_^1_%SQZ LHC100_(SKIP NO_:**MSOS4.0**_^1_%SUB* LHCNDX_'CALC REL ADDRESS_2**MSOS4.0**_^1_%LDQ* LHCOPC_(OR IN OP CODE IF NONZERO_)**MSOS4.0**_^1_%SQZ LHC100_J**MSOS4.0**_^1_%AND- LPMSK+8_I**MSOS4.0**_^1_%EAQ A_O**MSOS4.0**_^1LHC100 LDQ* LHCINC_J**MSOS4.0**_^1_%STA* LHCBUF,Q_$CHANGE BUFFER_5**MS€€OS4.0**_^1_%LDQ* LHOCF_K**MSOS4.0**_^1_%SQN 1_O**MSOS4.0**_^1_%STA* (LHCNDX)_$CHANGE CORE IF LHC_0**MSOS4.0**_^1_%RAO* LHCNDX_J**MSOS4.0**_^1_%RAO* LHCINC_'INCREMENT BUFFER INDEX_,**MSOS4.0**_^1***_"END OF BUFFER OR END OF LINE_9**MSOS4.0**_^1_%LDA* LHCEND_'END OF LINE_7**MSOS4.0**_^1_%SAN LHC104_(YES WRITE_8**MSOS4.0**_^1_%LDA* LHCINC_(NO CHECK FOR_5**MSOS4.0**_^1_%INA -LHCBFL_€€,END OF BUFFER_/**MSOS4.0**_^1_%SAM LHC103_)NO, NEITHER_5**MSOS4.0**_^1_%JMP* LHC09A_'ILLEGAL_;**MSOS4.0**_^1LHC104 LDQ* LHCWC_*YES_=**MSOS4.0**_^1_%RTJ* LHCIOS_-WRITE MODIFIED_.**MSOS4.0**_^1LHC103 CLR A_,RESET_=**MSOS4.0**_^1_%STA* LHCRLV_*RELATIVE FLAG_2**MSOS4.0**_^1_%JMP* (LHCPRO)_$RETURN TO CALLER_2**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU SA24(*/96)_F**MSOS4.0**_^1_%EQU SP24(€€SA24+1)_D**MSOS4.0**_^1_%EQU DB24(SP24*96)_C**MSOS4.0**_^1_%BSS (DB24-*)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EJT_]_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_:CLU_=**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR CHANGES THE LOGICAL UNIT NUMBER OF_#**MSOS4.0**_^1*_*LISTABLE OUTPUT_A**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THE REQUEST H€€AS THE FOLLOWING FORMAT_0**MSOS4.0**_^1*_$CLU,LU(CR)_(LU = LOGICAL UNIT NUMBER OF NEW_"**MSOS4.0**_^1*_?LISTABLE OUTPUT TO BE USED **MSOS4.0**_^1*_?BY ODEBUG_2**MSOS4.0**_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU CLUREL(*-PROGIN)_@**MSOS4.0**_^1CLUREQ ENQ 2_O**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+CLUREL GET 2€€ CHAR. FIELD_1**MSOS4.0**_^1_%ENA 5_O**MSOS4.0**_^1_%RTJ HANDLE+CLUREL CONVERT ASCII DEC. TO BINARY_%**MSOS4.0**_^1_%SAZ CLUERR-*-1_"SKIP IF ZERO (ILLEGAL LU)_)**MSOS4.0**_^1_%STA* CLU_M**MSOS4.0**_^1_%TRA Q_O**MSOS4.0**_^1_%LDQ+ LOG1A,Q_%Q = ADDRESS OF PHYS. DEV. TABLE_"**MSOS4.0**_^1_%SQZ CLUERR_'NO PHYS. DEV. TABLE_/**MSOS4.0**_^1_%LDA- 8,Q_*GET LU CLASS_6**MSOS4.0**_^1_%AR€€S 11_N**MSOS4.0**_^1_%AND- LPMSK+4_I**MSOS4.0**_^1_%SAZ CLU001_'SKIP IF CLASS NOT DEFINED_)**MSOS4.0**_^1_%INA -2_.CLASS 2 = MASS MEMORY_***MSOS4.0**_^1_%SAN CLU001_'SKIP IF LU OK_5**MSOS4.0**_^1CLUERR ENQ 9_O**MSOS4.0**_^1_%JMP MSG+CLUREL_"ILLEGAL LU_8**MSOS4.0**_^1CLU001 LDA* CLU_M**MSOS4.0**_^1_%SUB* MAXLU+CLUREL CHECK IF LU EXCEEDS MAX_+**MSOS4.0**_^1_%INA -1_N**MSOS4.0€€**_^1_%SAM CLU002_'SKIP IF NO_8**MSOS4.0**_^1_%JMP* CLUERR_'ILLEGAL LU_8**MSOS4.0**_^1CLU002 LDA* CLU_M**MSOS4.0**_^1_%STA LISTLU+CLUREL SET LIST OUTPUT TO NEW LU_)**MSOS4.0**_^1_%JMP SOMMOR+CLUREL_C**MSOS4.0**_^1CLU_"NUM 0_,NEW LIST LU_7**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU SA26(*/96)_F**MSOS4.0**_^1_%EQU SP26(SA26+1)_D**MSOS4.0**_^1_%EQU DB26(SP26*96)_C**MSOS4.0**_^1_%BSS €€(DB26-*)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EJT_]_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_:MSD_=**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR PRINTS DATA FROM THE DISK_-**MSOS4.0**_^1*_*IN HEX, ASCII, OR DECIMAL FORMAT_0**MSOS4.0**_^1*_$THE REQUEST HAS THE FOLLOWING FORMAT_1**MSOS4.0**_^1*_$MSD,STARTING SECTOR,ENDING SECTOR,€€A OR B OR D(CR)_#**MSOS4.0**_^1*_*ENDING SECTOR = STARTING SECTOR IF NOT SPECIFIED **MSOS4.0**_^1*_*A OR B OR D = B (HEX) IF NOT SPECIFIED_***MSOS4.0**_^1*_*A = DATA IS ASCII_?**MSOS4.0**_^1*_*B = DATA IS HEXIDECIMAL_9**MSOS4.0**_^1*_*D = DATA IS DECIMAL_=**MSOS4.0**_^1*_[**MSOS4.0**_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU€€ MSDREL(*-PROGIN)_@**MSOS4.0**_^1MSDREQ JMP* MSDITL_'JUMP TO INITIALIZE REQUEST_(**MSOS4.0**_^1MSD007 STA* MMSADR_'SET SECTOR ADDRESS IN I/O CALL_#**MSOS4.0**_^1_%STA* MSDSEC_J**MSOS4.0**_^1_%RTJ- (AMONI)_%READ ONE SECTOR_3**MSOS4.0**_^1MSD008 ADC $900+CHRSLV_E**MSOS4.0**_^1_%ADC MSD009-MSD008_C**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1MSLU_!ADC MASSLU_J**MSOS4.0**_^1_%NUM 96_N**M€€SOS4.0**_^1_%ADC MMSBUF-MSD008_C**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1MMSADR 0_"0_O**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1MSD009 SQP MSD010_'SKIP IF NO I/O ERROR_.**MSOS4.0**_^1_%JMP IOERR+MSDREL_D**MSOS4.0**_^1MSD010 LDA* AHDFLG_'CHECK FOR TYPE OF DUMP_,**MSOS4.0**_^1_%SAP MSD011_J**MSOS4.0**_^1_%JMP* ASCDMP_J**MSOS4.0**_^1MSD011 ENA 12_+SET LINE INDEX_4**MSOS4.0**_^1_%S€€TA* MSDLN_K**MSOS4.0**_^1_%LDA* MSBADR_J**MSOS4.0**_^1_%STA* MSD013_J**MSOS4.0**_^1_%ENQ -1_N**MSOS4.0**_^1_%ENA 4_,DUMP SECTOR ADDRESS_/**MSOS4.0**_^1_%RTJ HANDLE+MSDREL_C**MSOS4.0**_^1MSDSEC NUM 0_O**MSOS4.0**_^1MSD012 LDA* AHDFLG_J**MSOS4.0**_^1_%ENQ 24_+Q BIASED BY 16 TO INDICATE RELATIVE**MSOS4.0**_^1_%SAZ 2_O**MSOS4.0**_^1_%ENA 7_,OUTPUT IN DECIMAL FORMAT_***MSOS4.0**_€€^1_%JMP* MSD030_J**MSOS4.0**_^1_%ENA 4_,OUTPUT IN HEX FORMAT_.**MSOS4.0**_^1MSD030 RTJ HANDLE+MSDREL_C**MSOS4.0**_^1MSD013 ADC MMSBUF-*_H**MSOS4.0**_^1_%LDA* MSDLN_(CHECK IF LAST 8 WORDS_-**MSOS4.0**_^1_%INA -1_N**MSOS4.0**_^1_%SAZ MSD015_'SKIP IF YES_7**MSOS4.0**_^1_%STA* MSDLN_K**MSOS4.0**_^1_%JMP* MSD012_'PRINT ANOTHER LINE_0**MSOS4.0**_^1MSBADR ADC MMSBUF-MSD013_C**MSOS4.€€0**_^1STRSEC NUM 0_,STARTING/CURRENT SECTOR ADDRESS_"**MSOS4.0**_^1LSTSEC 0_"0_,LAST SECTOR ADDRESS_/**MSOS4.0**_^1AHDFLG 0_"0_,TYPE OF DUMP FLAG_1**MSOS4.0**_^1MSDLN 0_"0_O**MSOS4.0**_^1DMPFLG 0_"0_O**MSOS4.0**_^1DMPADR ADC ASCBUF-MSD018_C**MSOS4.0**_^1MSD015 LDA* LSTSEC_'CHECK IF LAST SECTOR PRINTED_%**MSOS4.0**_^1_%SUB* STRSEC_J**MSOS4.0**_^1_%SAN MSD016_'SKIP IF NO_8**MSOS4€€.0**_^1MSDEXT JMP SOMMOR+MSDREL EXIT_>**MSOS4.0**_^1MSD016 RAO* STRSEC_'INCREMENT SECTOR ADDRESS_***MSOS4.0**_^1_%LDA* STRSEC_J**MSOS4.0**_^1_%JMP* MSD007_J**MSOS4.0**_^1ASCDMP LDQ* STRSEC_J**MSOS4.0**_^1_%ENA 6_O**MSOS4.0**_^1_%RTJ HANDLE+MSDREL CONVERT SECTOR ADDRESS TO ASCII_"**MSOS4.0**_^1_%ADC ASCBUF+1-*_F**MSOS4.0**_^1_%LDA* DMPADR_J**MSOS4.0**_^1_%STA* DMPFLG_J**MSOS4.0*€€*_^1MSD017 STA* MSD019_'SET ADDRESS OF BUFFER_-**MSOS4.0**_^1_%RTJ- (AMONI)_I**MSOS4.0**_^1MSD018 ADC $D00+CHRSLV_E**MSOS4.0**_^1_%ADC MSD020-MSD018_C**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%ADC $17FF+LISTLU+MSDREL-MSD018_64.0*78*1909_^1_%NUM 52_N**MSOS4.0**_^1MSD019 ADC ASCBUF-MSD018_C**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1MSD020 SQP MSD021_'SKIP IF NO I/O ERROR_.**MSOS4€€.0**_^1_%JMP IOERR+MSDREL_D**MSOS4.0**_^1MSD021 LDA* DMPFLG_J**MSOS4.0**_^1_%SAN MSD022_'SKIP IF SECOND LINE TO LIST_'**MSOS4.0**_^1_%JMP* MSD015_J**MSOS4.0**_^1MSD022 LDA* ASCBUF+3_$SET A WITH BLANKS_1**MSOS4.0**_^1_%ENQ 5_O**MSOS4.0**_^1MSD023 INQ -1_N**MSOS4.0**_^1_%SQZ MSD024_J**MSOS4.0**_^1_%STA* ASCBUF+48,Q_!SET BLANKS IN START OF 2ND LINE_"**MSOS4.0**_^1_%JMP* MSD023_J*€€*MSOS4.0**_^1MSD024 STQ* DMPFLG_'CLEAR DUMP FLAG_3**MSOS4.0**_^1_%LDA* DMPADR_J**MSOS4.0**_^1_%INA 48_+SET BUFFER ADDRESS FOR 2ND LINE_"**MSOS4.0**_^1_%JMP* MSD017_J**MSOS4.0**_^1ASCBUF NUM $A0D_L**MSOS4.0**_^1_%ALF 3,_N**MSOS4.0**_^1_%EQU MMSBUF(*)_G**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS CODE WILL BE OVERLAYED WHEN INITIALIZING IS DONE **MSOS4.0**_^1MSDITL ENQ 4_O**MSOS4.0**_€€^1_%RTJ* CHRFLD_'GET STARTING SECTOR ADDRESS_'**MSOS4.0**_^1_%STA* STRSEC_'SET STARTING AND LAST SECTOR_%**MSOS4.0**_^1_%STA* LSTSEC_'ADDRESS TO DUMP AT LEAST ONE SECTOR**MSOS4.0**_^1_%INQ -COMMA_J**MSOS4.0**_^1_%SQZ MSD001_'SKIP IF LAST SECTOR SPECIFIED_$**MSOS4.0**_^1_%JMP* MSDIX_K**MSOS4.0**_^1MSD001 ENQ 4_O**MSOS4.0**_^1_%RTJ* CHRFLD_'GET LAST SECTOR ADDRESS_+**MSOS4.0**_^1_€€%SAZ MSD002_'SKIP IF NOT SPECIFIED_-**MSOS4.0**_^1_%SUB* STRSEC_'LAST MUST BE GREATER THAN OR EQUAL **MSOS4.0**_^1_%SAM MSD002_*TO FIRST SECTOR_0**MSOS4.0**_^1_%ADD* STRSEC_J**MSOS4.0**_^1_%STA* LSTSEC_J**MSOS4.0**_^1MSD002 INQ -COMMA_J**MSOS4.0**_^1_%SQZ MSD003_'SKIP IF MODE GIVEN_0**MSOS4.0**_^1_%JMP* MSDIX_K**MSOS4.0**_^1MSD003 ENQ 1_O**MSOS4.0**_^1_%RTJ* CHRFLD_'GET MODE_:€€**MSOS4.0**_^1_%SAZ MSD03A_'SKIP IF HEX ASSUMED_/**MSOS4.0**_^1_%INA -11_M**MSOS4.0**_^1MSD03A STA* AHDFLG_'-1 = ASCII, 0 = HEX, 1 = DECIMAL_!**MSOS4.0**_^1_%INQ -COMMA_J**MSOS4.0**_^1_%SQN MSDIX_K**MSOS4.0**_^1_%JMP* MSDFI_(FORMAT ERROR_6**MSOS4.0**_^1MSDIX ENA 0_,SET NUMBER OF WORDS TO SKIP_'**MSOS4.0**_^1_%STA FIELD+MSDREL_#ON OUTPUT BUFFER_/**MSOS4.0**_^1_%LDA* STRSEC_J*€€*MSOS4.0**_^1_%JMP MSD007_J**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$GET ONE FIELD FROM REQUEST AND CONVERT TO HEX_(**MSOS4.0**_^1*_[**MSOS4.0**_^1CHRFLD ADC 0_O**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+MSDREL_C**MSOS4.0**_^1_%LDA FIELD+MSDREL CONTROL CHAR. = NONE_.**MSOS4.0**_^1_%SAZ CHR001_'SKIP YES_:**MSOS4.0**_^1_%SUB- LPMSK+8_%CONTROL CHAR. = $FF_/**MSOS4.0**_^1_%SAZ C€€HR001_'SKIP YES_:**MSOS4.0**_^1_%ADD LPMSK+8_I**MSOS4.0**_^1_%INA -COMMA_'CONTROL CHAR. = COMMA_-**MSOS4.0**_^1_%SAZ CHR001_'SKIP YES_:**MSOS4.0**_^1MSDFI ENQ 4_O**MSOS4.0**_^1_%JMP MSG+MSDREL_"FORMAT INCORRECT_2**MSOS4.0**_^1CHR001 ENA 3_O**MSOS4.0**_^1_%RTJ HANDLE+MSDREL CONVET FIELD TO HEX_/**MSOS4.0**_^1MSDVAL NUM 0_O**MSOS4.0**_^1_%LDQ FIELD+MSDREL Q = CONTROL CHARA€€CTER_-**MSOS4.0**_^1_%LDA* MSDVAL_J**MSOS4.0**_^1_%JMP* (CHRFLD)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU SA29(*/96)_F**MSOS4.0**_^1_%EQU SP29(SA29+1)_D**MSOS4.0**_^1_%EQU DB29(SP29*96)_C**MSOS4.0**_^1_%BSS (DB29-*)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EJT_]_^1***************************************************************MSOS4.0**_^1*_;LDC_<**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PRO€€CESSOR LOADS DECIMAL DATA INTO CORE VIA THE_!**MSOS4.0**_^1*_*INPUT COMMENT MEDIUM_<**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$REQUEST HAS THE FOLLOWING FORMAT_5**MSOS4.0**_^1*_*LDC,CORE LOC.,BASE/DATA(CR)_5**MSOS4.0**_^1*_*BASE IS ZERO IF NOT SPECIFIED_3**MSOS4.0**_^1*_[**MSOS4.0**_^1*_;LDM_<**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR LOADS DECIMAL DATA ONTO MASS STORAGE_!**MSOS4.0**_€€^1*_*VIA THE INPUT COMMENT MEDIUM_4**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$REQUEST HAS THE FOLLOWING FORMAT_5**MSOS4.0**_^1*_*LDM,SECTOR,WORD IN SECTOR/DATA(CR)_.**MSOS4.0**_^1*_[**MSOS4.0**_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU LDMBFL(5)_#LOCAL BUFFER LENGTH_/**MSOS4.0**_^1*_;(MAX NO. OF DATA ITEMS PER REQ.)€€**MSOS4.0**_^1_%EQU LDCREL(*-PROGIN)_@**MSOS4.0**_^1_%EQU LDMREL(*-PROGIN)_@**MSOS4.0**_^1LDCREQ LDA* PROG2+LDCREL_D**MSOS4.0**_^1_%INA -28_M**MSOS4.0**_^1_%STA* LDCFLG_'0 = LDC, 1 = LDM_2**MSOS4.0**_^1LDC001 LDA* LDCSLH_'IS THIS RIGHT SIDE OF SLASH_'**MSOS4.0**_^1_%SAZ 1_,SKIP NO_;**MSOS4.0**_^1_%JMP* LDM005_'GET DECIMAL DATA_2**MSOS4.0**_^1_%ENQ 4_,GET 4 CHAR FIELD_2**MSOS4.€€0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+LDCREL_C**MSOS4.0**_^1_%ENA 3_O**MSOS4.0**_^1_%RTJ HANDLE+LDCREL_C**MSOS4.0**_^1LDCVAL NUM 0_O**MSOS4.0**_^1_%JMP* LDC014_J**MSOS4.0**_^1LDM005 ENQ 6_,GET 6 CHAR FIELD_2**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+LDCREL_C**MSOS4.0**_^1_%ENA 5_,CONVERT FROM DECIMAL_.**MSOS4.0**_^1_%RTJ HANDLE+LDCREL_C**MSOS4.0**_^1_%STA* LDCV€€AL_J**MSOS4.0**_^1LDC014 LDA* FIELD+LDCREL_D**MSOS4.0**_^1_%INA -SLASH_'CONTROL CHAR = SLASH_.**MSOS4.0**_^1_%SAN LDC002_'SKIP NO_;**MSOS4.0**_^1_%JMP* LDC009_'YES_?**MSOS4.0**_^1LDC002 INA -COMMA+SLASH CONTROL CHAR = COMMA_.**MSOS4.0**_^1_%SAZ LDC003_'SKIP YES_:**MSOS4.0**_^1_%JMP* LDC006_'NO_@**MSOS4.0**_^1***_"CONTROL CHARACTER IS A COMMA_9**MSOS4.0**_^1LDC003 LDA* LDCSLH_'€€LDC SLASH FLAG SET_0**MSOS4.0**_^1_%SAZ LDC004_'SKIP NO, LEFT SIDE OF SLASH_'**MSOS4.0**_^1_%RTJ* LDCPRO_'YES, PROCESS VALUE_0**MSOS4.0**_^1_%JMP* LDC001_'RETURN TO GET NEXT FIELD_***MSOS4.0**_^1LDC004 LDA* LDCFLG_J**MSOS4.0**_^1_%SAZ LDC011_'SKIP NOT LDM_6**MSOS4.0**_^1LDC010 LDA* LDMFLG_J**MSOS4.0**_^1_%SAN LDC011_'SKIP NOT SECTOR PARAMETER_)**MSOS4.0**_^1_%SET A_O**MSOS4.0**€€_^1_%STA* LDMFLG_'SET SECTOR PARAM. FLAG_,**MSOS4.0**_^1_%LDA* LDCVAL_J**MSOS4.0**_^1_%MUI =N96_)CONVERT SECTORS TO WORDS_***MSOS4.0**_^1_%LLS 1_O**MSOS4.0**_^1_%ARS 1_O**MSOS4.0**_^1_%AND- $11_M**MSOS4.0**_^1_%STA* LDMLSB_J**MSOS4.0**_^1_%STQ* LDMMSB_J**MSOS4.0**_^1_%JMP* LDC001_J**MSOS4.0**_^1LDC011 LDQ* LDCNDX_J**MSOS4.0**_^1_%ADQ* LDCVAL_J**MSOS4.0**_^1_%STQ* LDCVAL_J**MSOS4€€.0**_^1_%STQ* LDCNDX_J**MSOS4.0**_^1_%JMP* LDC001_J**MSOS4.0**_^1***_"CONTROL CHARACTER IS A SLASH_9**MSOS4.0**_^1LDC009 STA* SLASHF+LDCREL RESET SYSTEM SLASH FLAG_+**MSOS4.0**_^1_%LDA* LDCSLH_'LDC SLASH FLAG SET_0**MSOS4.0**_^1_%SAZ LDC110_'SKIP NO_;**MSOS4.0**_^1LDC09A ENQ 4_,FORMAT INCORRECT_2**MSOS4.0**_^1_%JMP MSG+LDCREL_F**MSOS4.0**_^1LDC110 SET A_,SET LDC SLASH FLAG_0**M€€SOS4.0**_^1_%STA* LDCSLH_J**MSOS4.0**_^1_%JMP* LDC004_J**MSOS4.0**_^1***_"CONTROL CHARACTER MUST BE EOT_8**MSOS4.0**_^1LDC006 LDA* LDCSLH_'IS LDC SLASH FLAG SET_-**MSOS4.0**_^1_%SAN LDC007_'SKIP YES_:**MSOS4.0**_^1_%JMP* LDC09A_'ILLEGAL_;**MSOS4.0**_^1LDC007 STA* LDCEND_J**MSOS4.0**_^1_%RTJ* LDCPRO_'PROCESS VALUE_5**MSOS4.0**_^1LDCXIT JMP SOMMOR+LDCREL EXIT_>**MSOS4.0**_^1*_[**MS€€OS4.0**_^1*_[**MSOS4.0**_^1LDMFLG NUM 0_,LDM SECTOR PARAMETER FLAG_)**MSOS4.0**_^1LDCSLH NUM 0_,LDC SLASH FLAG_4**MSOS4.0**_^1LDCNDX NUM 0_,CORE ADDRESS TO CHANGE_,**MSOS4.0**_^1LDMBLF NUM 0_,BERRER LOAD FLAG_2**MSOS4.0**_^1LDCFLG NUM 0_,LDC/LDM FLAG_6**MSOS4.0**_^1LDCEND NUM 0_O**MSOS4.0**_^1LDCINC NUM 0_O**MSOS4.0**_^1LDMDON NUM 0_O**MSOS4.0**_^1LDMWC ADC $500+CHRSLV_E*€€*MSOS4.0**_^1LDCPRO NOP 0_O**MSOS4.0**_^1_%LDA* LDCFLG_J**MSOS4.0**_^1_%SAN LDMPRO_J**MSOS4.0**_^1_%LDA* LDCVAL_J**MSOS4.0**_^1_%STA* (LDCNDX)_$CHANGE CORE_7**MSOS4.0**_^1_%RAO* LDCNDX_J**MSOS4.0**_^1_%JMP* (LDCPRO)_$RETURN_<**MSOS4.0**_^1LDMPRO LDA* LDMBLF_'IS NEW BUFFER NEEDED_.**MSOS4.0**_^1_%SAZ LDM101_'SKIP YES_:**MSOS4.0**_^1_%JMP* LDM102_'NO_@**MSOS4.0**_^1LDM101 LDA* LDC€€NDX_J**MSOS4.0**_^1_%ADD* LDMLSB_J**MSOS4.0**_^1_%SAP 2_O**MSOS4.0**_^1_%RAO* LDMMSB_J**MSOS4.0**_^1_%AND- $11_M**MSOS4.0**_^1_%STA* LDMLSB_J**MSOS4.0**_^1_%SET A_O**MSOS4.0**_^1_%STA* LDMBLF_'SET TO NO BUFFER NEXT TIME_(**MSOS4.0**_^1LDMIO RTJ- (AMONI)_I**MSOS4.0**_^1LDMCAL ADC $300+CHRSLV_E**MSOS4.0**_^1_%ADC LDMEXT-LDMCAL_C**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%ADC MASSLU€€_J**MSOS4.0**_^1_%ADC LDMBFL_J**MSOS4.0**_^1_%ADC LDMBUF-LDMCAL_C**MSOS4.0**_^1LDMMSB NUM 0_,MASS MEMORY ADDRESS (WORD)_(**MSOS4.0**_^1LDMLSB NUM 0_O**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1LDMBUF BSS LDMBUF(LDMBFL) LOCAL BUFFER_4**MSOS4.0**_^1LDMEXT SQP LDMOK_(SKIP NO I/O ERROR_1**MSOS4.0**_^1_%JMP IOERR+LDCREL_D**MSOS4.0**_^1LDMOK LDA* LDMDON_J**MSOS4.0**_^1_%SAZ LDM€€102_J**MSOS4.0**_^1_%JMP* (LDCPRO)_H**MSOS4.0**_^1LDM102 LDQ* LDCINC_J**MSOS4.0**_^1_%LDA* LDCVAL_J**MSOS4.0**_^1_%STA* LDMBUF,Q_H**MSOS4.0**_^1_%RAO* LDCINC_J**MSOS4.0**_^1_%LDA* LDCEND_'END OF LINE_7**MSOS4.0**_^1_%SAN LDC104_'SKIP YES, WRITE_3**MSOS4.0**_^1_%LDA* LDCINC_'NO, CHECK FOR END OF BUFFER_'**MSOS4.0**_^1_%INA -LDMBFL_I**MSOS4.0**_^1_%SAM LDM003_'NO, NEITHER_7**MSOS4€€.0**_^1_%JMP* LDC09A_'ILLEGAL_;**MSOS4.0**_^1LDC104 LDQ* LDMWC_K**MSOS4.0**_^1_%STQ* LDMCAL_J**MSOS4.0**_^1_%SET Q_O**MSOS4.0**_^1_%STQ* LDMDON_J**MSOS4.0**_^1_%JMP* LDMIO_(WRITE CORRECTED DATA ON MM_(**MSOS4.0**_^1LDM003 JMP* (LDCPRO)_$RETURN_<**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU SA30(*/96)_F**MSOS4.0**_^1_%EQU SP30(SA30+1)_D**MSOS4.0**_^1_%EQU DB30(SP30*96)_C**MSOS4.0**_^1_%B€€SS (DB30-*)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EJT_]_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_1WCD_*RDC_8**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR TRANSFERS DATA FROM CORE TO DISK (RCD) **MSOS4.0**_^1*_*OR DISK TO CORE (RDC)_;**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$BOTH HAVE THE SAME FORMAT_<**MSOS4.0**_^1*_$WCD,SECTOR,WORD IN€€ SECTOR,CORE LOC.,NO. WORDS(CR)_#**MSOS4.0**_^1*_$RDC,SECTOR,WORD IN SECTOR,CORE LOC.,NO. WORDS(CR)_#**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$INPUT IS ASSUMED TO BE HEX EXCEPT FOR NO. OF WORDS_"**MSOS4.0**_^1*_*WHICH IS ASSUMED TO BE DECIMAL_2**MSOS4.0**_^1*_[**MSOS4.0**_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU R€€CDREL(*-PROGIN)_@**MSOS4.0**_^1RCDREQ ENQ 4_,GET FOUR CHARACTER FIELD_***MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+RCDREL_C**MSOS4.0**_^1_%ENA 3_O**MSOS4.0**_^1_%RTJ HANDLE+RCDREL_C**MSOS4.0**_^1RCDVAL NUM 0_O**MSOS4.0**_^1_%LDA* FIELD+RCDREL_D**MSOS4.0**_^1_%INA -COMMA_J**MSOS4.0**_^1_%SAZ RCDOK1_J**MSOS4.0**_^1RCDFI ENQ 4_,FORMAT INCORRECT_2**MSOS4.0**_^1_%JMP MS€€G+RCDREL_F**MSOS4.0**_^1RCDOK1 LDA* RCDVAL_J**MSOS4.0**_^1_%MUI =N96_)CONVERT SECTOR TO WORDS_+**MSOS4.0**_^1_%LLS 1_O**MSOS4.0**_^1_%ARS 1_O**MSOS4.0**_^1_%AND- $11_M**MSOS4.0**_^1_%STA* RCDLSB_J**MSOS4.0**_^1_%STQ* RCDMSB_J**MSOS4.0**_^1_%ENQ 4_,GET NEXT FIELD_4**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+RCDREL_C**MSOS4.0**_^1_%ENA 3_O**MSOS4.0**_^1_%RTJ HANDLE+RCDR€€EL_C**MSOS4.0**_^1RDCVAL NUM 0_O**MSOS4.0**_^1_%LDA* FIELD+RCDREL_D**MSOS4.0**_^1_%INA -COMMA_J**MSOS4.0**_^1_%SAZ RCDOK2_J**MSOS4.0**_^1_%JMP* RCDFI_K**MSOS4.0**_^1RCDOK2 LDA* RDCVAL_'ADD TO WORD COUNT_1**MSOS4.0**_^1_%ADD* RCDLSB_J**MSOS4.0**_^1_%SAP 2_O**MSOS4.0**_^1_%RAO* RCDMSB_J**MSOS4.0**_^1_%AND- $11_M**MSOS4.0**_^1_%STA* RCDLSB_J**MSOS4.0**_^1_%ENQ 4_,GET CORE LOCATIO€€N_1**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+RCDREL_C**MSOS4.0**_^1_%ENA 3_O**MSOS4.0**_^1_%RTJ HANDLE+RCDREL_C**MSOS4.0**_^1RCDTMP NUM 0_O**MSOS4.0**_^1_%LDA* FIELD+RCDREL_D**MSOS4.0**_^1_%INA -COMMA_J**MSOS4.0**_^1_%SAZ RCDOK3_J**MSOS4.0**_^1_%JMP* RCDFI_K**MSOS4.0**_^1RCDOK3 LDA* RCDTMP_J**MSOS4.0**_^1_%STA* RCDCOR_J**MSOS4.0**_^1_%ENQ 6_,GET NUMBER OF WORDS_/**M€€SOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ HANDLE+RCDREL_C**MSOS4.0**_^1_%ENA 5_,CONVERT FROM DECIMAL_.**MSOS4.0**_^1_%RTJ HANDLE+RCDREL_C**MSOS4.0**_^1_%SAP 1_,MUST BE POSITIVE_2**MSOS4.0**_^1_%JMP* RCDFI_K**MSOS4.0**_^1_%STA* RCDNUM_J**MSOS4.0**_^1_%LDA FIELD+RCDREL_D**MSOS4.0**_^1_%INA -COMMA_J**MSOS4.0**_^1_%SAN 1_O**MSOS4.0**_^1_%JMP* RCDFI_K**MSOS4.0**_^1_%RTJ* RCDABS_J*€€*MSOS4.0**_^1RCDABS NOP 0_O**MSOS4.0**_^1_%LDA* RCDABS_J**MSOS4.0**_^1_%ADD* RCDDIF_J**MSOS4.0**_^1_%STA* RCDCAL+1_H**MSOS4.0**_^1_%LDA PROG2+RCDREL_D**MSOS4.0**_^1_%INA -30_*RCD = 0, RDC = 1 NOW_.**MSOS4.0**_^1_%SAN RDCPRO_J**MSOS4.0**_^1_%LDA* RCDWC_(WRITE ON DISK_5**MSOS4.0**_^1_%STA* RCDCAL_J**MSOS4.0**_^1_%JMP* RCD001_J**MSOS4.0**_^1RDCPRO LDA* RDCRC_(READ FROM DISK_4**MSO€€S4.0**_^1_%STA* RCDCAL_J**MSOS4.0**_^1RCD001 RTJ- (AMONI)_I**MSOS4.0**_^1RCDCAL NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%ADC MASSLU_J**MSOS4.0**_^1RCDNUM NUM 0_O**MSOS4.0**_^1RCDCOR NUM 0_O**MSOS4.0**_^1RCDMSB NUM 0_O**MSOS4.0**_^1RCDLSB NUM 0_O**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1RCDEXT SQP RCDOK5_'SKIP IF NO I/O ERROR_.**MSOS4.0**_^1_%J€€MP IOERR+RCDREL_D**MSOS4.0**_^1RCDOK5 JMP SOMMOR+RCDREL EXIT_>**MSOS4.0**_^1*_[**MSOS4.0**_^1RCDWC ADC $4400+CHRSLV_D**MSOS4.0**_^1RDCRC ADC $4200+CHRSLV_D**MSOS4.0**_^1RCDDIF ADC RCDEXT-RCDABS_C**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU SA31(*/96)_F**MSOS4.0**_^1_%EQU SP31(SA31+1)_D**MSOS4.0**_^1_%EQU DB31(SP31*96)_C**MSOS4.0**_^1_%BSS (DB31-*)_H**MSOS4.0**_^1*_[**MSOS4.0**_^€€1_%EJT_]_^1_%SPC 10_^1*********************************************************************_^1*****************************AREA 3 SUBROUTINES*****************M****_^1*********************************************************************_^1*_]_^1*_$THIS SUBROUTINE PRINTS MESSAGES. Q CONTAINS_^1*_%THE MESSAGE INDEX._^1*_]_^1*_$INDEX MESSAGE_^1*_'0_!DEBUG IN_^1*_'1_!DEBUG OUT_^1*_'2_€€!DB I/O ERROR_^1*_'3_!NEXT_^1*_'4_!DB FORMAT INCORRECT_^1*_'5_!DB INVALID REQUEST_^1*_'6_!CELL CONTENTS_^1*_'7_!DB SEARCH FINISHED_^1*_'8_!DB NO CORE AVAILABLE_^1*_'9_!DB ILLEGAL LU_^1*_]_^1_%EQU PRIREL(*-AREA3)_^1*_]_^1PRINT 0_"0_^1_%QLS 1_,ADJUST INDEX FOR 2 WD ENTRY IN TBL._^1_%LDA* MESTBL,Q_$STORE REL. ADDRESS AND LENGTH IN_^1_%STA* MESP+5_(WRITE REQUEST_^1_%LDA* MESTBL+1,Q_€€^1_%STA* MESP+4_^1_%RTJ- (AMONI)_%INITIATE MESSAGE_^1MESP_!ADC $500+CHRSLV_^1_%ADC MESCOM-MESP_^1_%0_"0_^1_%ADC $17FF+COMOLU+PRIREL-MESP_84.0*78*1909_^1_%ADC 0,0_^1_%JMP- (ADISP)_^1MESCOM SQP MESNOE_'SKIP IF NO I/O ERROR_^1_%JMP ERROR+PRIREL_^1MESNOE JMP* (PRINT)_%RETURN TO CALLER_^1*_]_^1*_$TABLE OF RELATIVE ADDRESSES (REL. TO START OF_^1*_'WRITE REQUEST) AND LENGTHS FOR MSG€€. SKELETONS_^1*_]_^1MESTBL ADC MES0-MESP_#0_^1_%ADC LMES0_^1_%ADC MES1-MESP_#1_^1_%ADC LMES1_^1_%ADC MES2-MESP_#2_^1_%ADC LMES2_^1_%ADC MES3-MESP_#3_^1_%ADC LMES3_^1_%ADC MES4-MESP_#4_^1_%ADC LMES4_^1_%ADC MES5-MESP_#5_^1_%ADC LMES5_^1_%ADC MES6-MESP_#6_^1_%ADC LMES6_^1_%ADC MES7-MESP_#7_^1_%ADC LMES7_^1_%ADC MES8-MESP_#8_^1_%ADC LMES8_^1_%ADC MES9-MESP_#9_^1_%AD€€C LMES9_^1*_]_^1*_$MESSAGE SKELETONS_^1*_]_^1MES0_!NUM $A0D_^1_%ALF 4,DEBUG IN_^1_%NUM $A0D_^1_%EQU LMES0(*-MES0)_^1MES1_!NUM $A0D_^1_%ALF 5,DEBUG OUT_^1_%NUM $A0D_^1_%EQU LMES1(*-MES1)_^1MES2_!NUM $A0D_^1_%ALF 6,DB I/O ERROR_^1_%NUM $A0D_^1_%EQU LMES2(*-MES2)_^1MES3_!NUM $A0D_^1_%ALF 3,NEXT_^1_%NUM $A0D_^1_%EQU LMES3(*-MES3)_^1MES4_!NUM $A0D_^1_%ALF 10,DB FORMAT€€ INCORRECT_^1_%NUM $A0D_^1_%EQU LMES4(*-MES4)_^1MES5_!NUM $A0D_^1_%ALF 9,DB INVALID REQUEST_^1_%NUM $A0D_^1_%EQU LMES5(*-MES5)_^1MES6_!NUM $A0D_^1*_82 CARDS DELETED_569*1567_^1_%EQU LMES6(*-MES6)_^1MES7_!NUM $A0D_^1_%ALF 9,DB SEARCH FINISHED_^1_%NUM $A0D_^1_%EQU LMES7(*-MES7)_^1MES8_!NUM $A0D_^1_%ALF 10,DB NO CORE AVAILABLE_^1_%NUM $A0D_^1_%EQU LMES8(*-MES8)_^1MES9_€€!NUM $A0D_^1_%ALF 7,DB ILLEGAL LU_^1_%NUM $A0D_^1_%EQU LMES9(*-MES9)_^1_%SPC 5_^1*_]_^1_%EQU SA19(*/96)_^1_%EQU SP19(SA19+1)_^1_%EQU DB19(SP19*96)_^1_%BSS (DB19-*)_^1*_]_^1 EJT_]_^1*_$THIS SUBROUTINE FINDS THE NEXT FIELD THAT IS_^1*_%TERMINATED BY A COMMA SLASH OR ASTERISK_^1*_%AND PLACES IT IN THE FIELD BUFFER._^1*_%IF THE BUFFER WAS EMPTY BLANKS ARE RETURNED._^1*_%IF THE€€ SLASH FLAG IS SET BLANKS ARE RETURNED._^1*_%THE NO. OF CHARACTERS IN THE FIELD ARE_^1*_'SPECIFIED IN THE Q-REGISTER. ONLY THE_^1*_'SPECIFIED NO. OF CHARACTERS PRECEDING THE_^1*_'CONTROL CHARACTER ARE SENT._^1*_%THE CONTROL CHARACTER IS ALSO SENT._^1_%EQU GETREL(*-AREA3)_^1GETFLD 0_"0_,(RETURN)_^1_%STQ* NOCHAR_'SAVE NO. OF CHARACTERS_^1_%LDA =N$3030_%BACKGROUND WITH ZEROS_^1_%ENQ€€ 3_-WITH BLANKS_^1GET001 STA FIELD+GETREL,Q_^1_%INQ -1_^1_%SQZ GET002-*-1_^1_%JMP* GET001_^1GET002 LDA SLASHF+GETREL IS SLASH FLAG SET_^1_%SAZ GET003-*-1_^1_%LDA =N$202C_%YES,SET CONTROL CHARACTER_^1_%STA FIELD+GETREL_!TO COMMA_^1GETXIT JMP* (GETFLD)_$RETURN TO CALLER_^1GET003 LDA BUFEMT+GETREL IS BUFFER EMPTY_^1_%SAZ GET004-*-1_^1_%ENA 0_,SET TO NO CONTROL CHAR._^1_%STA€€ FIELD+GETREL_^1_%JMP* GETXIT_^1GET004 ENA 3_,SET FIELD INDEX TO 3_^1_%STA* FIELDX_^1_%ENA 0_,INITIALIZE NO. OF CHAR. IN FIELD COUNTER_^1_%STA* GETCHC_^1_%LDA BUFCNT+GETREL GET BUFFER COUNTER_^1_%STA- I_^1_%LDQ BITFLG+GETREL IS NEXT CHAR. IN HI BITS_^1GET005 SQZ GET006-*-1_^1_%CLR Q_,YES,CHANGE TO LO_^1_%RAO- I_+BUMP BUFFER INDEX_^1_%JMP* GET007_^1GET006 ENQ 1_,NO,CHANGE TO€€ HI_^1GET007 LDA BUFFER+GETREL,I GET WORD_^1_%SQN GET008-*-1_^1_%ARS 8_,POSITION TO LOW BITS_^1GET008 AND- LPMSK+8_^1_%STA* T1_+(SAVE IT)_^1_%EOR- LPMSK+8_%IS IT END OF TEXT($FF)_^1_%SAZ GETCCH-*-1_^1_%LDA* T1_^1_%EOR* COMMAC_'IS IT COMMA_^1_%SAZ GETCCH-*-1_^1_%EOR- SIX_*IS IT ASTERISK_^1_%SAZ GETCCH-*-1_^1_%EOR- FIVE_)IS IT SLASH_^1_%SAZ GETCCH-*-1_^1_%RAO* GETCHC_'TALLY N€€O. OF CHAR. IN FIELD COUMTER_^1_%JMP* GET005_'NOT A CONTROL CHAR._^1*_*PUT CONTROL CHARACTER IN FIELD_^1GETCCH LDA* T1_*GET CONTROL CHARACTER_^1IGOTFD STA FIELD+GETREL_!SAVE CONTROL CHAR._^1_%STQ BITFLG+GETREL SAVE WORD COUNT IN BUFFER_^1_%LDA- I_^1_%STA BUFCNT+GETREL SAVE WORD COUNT IN BUFFER_^1_%STQ* T1_^1_%LDA* GETCHC_'IS ACTUAL NO. OF CHAR. IN FIELD_^1_%SUB* NOCHAR_(LESS T€€HAN NO. OF CHAR. DESIRED_^1_%SAP GET010-*-1_#SKIP NO_^1_%LDA* GETCHC_'SET DESIRED =ACTUAL_^1_%STA* NOCHAR_^1_%SAN GET010-*-1_"SKIP IF FIELD NOT BLANK_^1_%JMP* GET103_^1GET010 LDA- I_,RESTORE WORD COUNT_^1_%INA -1_+DECREASE BUFFER COUNT BY 1_^1_%STA- I_-AND SAVE_^1_%SQZ GET100-*-1_"SKIP IF CONTROL CHAR. IN HI BITS_^1_%LDQ BUFFER+GETREL,I GET WORD FROM BUFFER_^1_%LDA BUFFER+1+€€GETREL,I_^1_%LRS 8_^1_%JMP* GET101_^1GET100 LDA BUFFER+GETREL,I GET WORD FROM BUFFER_^1GET101 LDQ* NOCHAR_'DECREASE NO. OF CHAR. BY 1_^1_%INQ -1_^1_%STQ* NOCHAR_^1_%SQN GET102-*-1_"SKIP IF NOT DONE_^1_%AND- LPMSK+8_%OR IN BLANK TO HI BITS_^1_%EOR* TTHOUS_'HEX 3000_^1_%LDQ* FIELDX_^1_%STA FIELD+GETREL,Q STORE IN FIELD WORD_^1_%JMP* GET103_^1GET102 LDQ* FIELDX_'STORE IN FIELD W€€ORD_^1_%STA FIELD+GETREL,Q_^1_%INQ -1_+DECREASE FIELD INDEX BY 1_^1_%STQ* FIELDX_^1_%LDA* NOCHAR_'DECREASE NO. OF CHAR. BY 2_^1_%INA -1_^1_%STA* NOCHAR_^1_%SAZ GET103-*-1_"SKIP IF FILD COMPLETE_^1_%LDQ* T1_+RESTORE CHAR. POSITION_^1_%JMP* GET010_'GO TO GET ANOTHER CHAR._^1GET103 LDA FIELD+GETREL IS IT $FF CONTROL CHAR._^1_%EOR- LPMSK+8_'(EOT)_^1_%SET Q_,SET BUFFER EMPTY_^1_%€€SAN GET104-*-1_"SKIP IF EOT CHAR._^1_%STQ BUFEMT+GETREL_^1GET104 LDA FIELD+GETREL IS IT SLASH CONTROL CHAR._^1_%EOR* SLASHC_^1_%SAN GET105-*-1_^1_%STQ SLASHF+GETREL_^1GET105 JMP* GETXIT_'RETURN TO CALLER_^1NOCHAR 0_"0_,NO. OF CHARACTERS_^1GETCHC 0_"0_,NO. OF CHAR . IN FIELD COUNTER_^1T1_#0_"0_,TEMPORARY STORAGE_^1FIELDX 0_"0_,FIELD WORD INDEX_^1COMMAC NUM $2C_*ASCII FOR COMM€€A_^1SLASHC NUM $2F_*ASCII FOR SLASH_^1TTHOUS NUM $3000_^1_%SPC 5_^1*_]_^1_%EQU SA20(*/96)_^1_%EQU SP20(SA20+1)_^1_%EQU DB20(SP20*96)_^1_%BSS (DB20-*)_^1*_]_^1 EJT_]_^1*_*ASCII TO HEX CONVERSION VALUE OF CHARACTERS IN FIELD_^1*_*ARE STORED IN WORD FOLLOWING RTJ TO ASCHEX. CONTROL IS_^1*_*RETURNED TO SECOND WORD AFTER RTJ. (NUMBERIC CONVERSIONS)_^1*_*ANY NON HEX CHARACTER CAU€€SES PROGRAM TO CLEAR OUT VALUE_^1*_*SO FAR ACCUMULATE IN CELL FOLLOWING RTJ AND CONTINUE._^1_%SPC 5_^1_%EQU ASCREL(*-AREA3)_^1_%SPC 2_^1ASCHEX NUM 0_^1_%CLR Q_^1_%STQ* (ASCHEX)_$INITIALIZE_^1_%STQ* LOWFLG_^1_%STQ* PASCTR_^1NXDIG1 LDA FIELD+2+ASCREL_^1NEXDIG SQN LFGSET-*-1_"CHECK BIT FLAG_^1_%ARS 8_^1LFGSET AND- LPMSK+7_^1_%INA -$30_)START OF NUMBERS_^1_%SAM ASCCLR-*-1_"IL€€LEGAL-CLEAR VALUE_^1_%TRA Q_^1_%INA -$3A+$30_$END OF ASCII NOS._^1_%SAP CHKALF-*-1_"SEE IF ALF HEX NUMBER_^1ASCALC LDA* (ASCHEX)_^1_%ALS 4_^1_%EAQ A_^1ASCUP STA* (ASCHEX)_$UPDATE IN (ASCHEX)_^1_%LDA* PASCTR_^1_%LDQ* LOWFLG_^1_%SAZ WORONE-*-1_"CHECK WORD_^1_%SQZ WORONE-*-1_"SECOND WORD-CHECK BITS_^1_%RAO* ASCHEX_'DONE EXIT_^1_%JMP* (ASCHEX)_^1ASCCLR ENQ 4_^1_%JMP MSG+ASCRE€€L_^1CHKALF INA -$41+$3A_$ASSII ALF NOS._^1_%SAP ALFOK-*-1_^1_%JMP* ASCCLR_^1ALFOK TRA Q_^1_%INA -$47+$41_^1_%SAM ALFOK1-*-1_^1_%JMP* ASCCLR_^1ALFOK1 INQ 10_+GET TO TRUE VALUE_^1_%JMP* ASCALC_^1WORONE SQZ ASCHI-*-1_#DO NEXT DIGIT_^1_%RAO* PASCTR_'ON TO WORD 2_^1_%CLR Q_^1_%STQ* LOWFLG_^1WORTWO LDA FIELD+3+ASCREL_^1_%JMP* NEXDIG_^1ASCHI ENQ 1_^1_%STQ* LOWFLG_^1_%SAZ WDON€€E-*-1_^1_%JMP* WORTWO_^1WDONE JMP* NXDIG1_^1_%SPC 5_^1*_*FLAGS_^1LOWFLG NUM 0_^1PASCTR NUM 0_^1_%BZS CORRT2(5) **************************************************_^1_%SPC 5_^1*_]_^1_%EQU SA21(*/96)_^1_%EQU SP21(SA21+1)_^1_%EQU DB21(SP21*96)_^1_%BSS (DB21-*)_^1*_]_^1 EJT_]_^1_%SPC 5_^1*_*THIS SUBROUTINE PRINTS OUT CORE CELLS ON_^1*_*COMMENT OUTPUT DEVICE. TWO TYPES OF_^1*€€_*CALLS ARE SHOWN BELOW. ONLY ONE_^1*_*LINE IS OUTPUT. FOUR SPACES BETWEEN CELL_^1*_*AND FIRST CONTENTS THE TWO SPACES_^1*ABSOL RTJ DMPBUF_'Q REG HAS NO OF CELLS_^1*_$ADC STARTING CELL_^1*RELAT RTJ DMPBUF_'Q REG HAS NO. OF CELLS_^1*_$ADC (RELATIVE START ADDRESS OF BUFFER TO BE OUTPUT)_^1*_$ADC ADDRESS FROM WHICH DUMP COMES (FOR PRINTOUT)_^1_%SPC 3_^1_%EQU DPBREL(*-AREA3)_^€€1DMPBUF NUM 0_^1_%LDA* (DMPBUF)_^1_%INQ -16_M**MSOS4.0**_^1_%SQM NOTREL_J**MSOS4.0**_^1_%ADD* DMPBUF_'Q GREATER THAN 16 MEANS RELATIVE_!**MSOS4.0**_^1_%STA* DMPADD_*-- USED BY MSD PROCESSOR_'**MSOS4.0**_^1_%STQ* DMPCTR_'REMOVE BIAS FROM COUNT_,**MSOS4.0**_^1_%CLR Q_,NO ADDRESS TAG PRINTED_,**MSOS4.0**_^1_%STQ- I_/WITH MSD OUTPUT LINES_***MSOS4.0**_^1_%JMP* DMP001_J**MSOS4.0**_^€€1NOTREL INQ 16_N**MSOS4.0**_^1_%STA* DMPADD_J**MSOS4.0**_^1_%STQ* DMPCTR_'SET UP COUNTER_^1_%SPC 3_^1_%CLR Q_^1_%STQ- I_,INITIALIZE I REG_^1_%LDA* (DMPBUF)_^1_%RTJ* PUTINB_'PUT ASCII CODE IN BUFFER_^1_%LDQ* DMPCTR_^1_%SQP DMP001-*-1_"SKIP IF NOT 1 WORD PRINT-OUT_^1_%JMP* GOOUT_^1DMP001 LDA* SPACE2_^1_%STA BUFFER+DPBREL,I_^1_%RAO- I_,4 SPACES_^1DMPLOP STA BUFFER+DPBREL,I_^1_%R€€AO- I_^1_%LDA* (DMPADD)_$GET CELL VALUE_^1_%RTJ* PUTINB_^1_%RAO* DMPADD_^1_%LDA* DMPCTR_^1_%INA -1_^1_%SAZ GOOUT-*-1_^1_%STA* DMPCTR_^1_%LDA* SPACE2_^1_%JMP* DMPLOP_^1_%SPC 5_^1*_*BUFFER FULL_^1GOOUT LDA- I_,SET UP LENGTH_^1_%STA* DMPLEN_^1_%LDA (LCHRSF+1+DPBREL)_"CHECK IF PROGRAM TO BE TURNED OFF_^1_%SAN DMPCON-*-1_^1DMPEXI JMP OFF+DPBREL_"EXIT FROM PACKAGE_^1DMPCON RTJ- (AM€€ONI)_^1DMPCAL ADC $D00+CHRSLV_^1_%ADC DMPEXT-DMPCAL_^1_%NUM 0_^1_%ADC $17FF+LISTLU+DPBREL-DMPCAL_64.0*78*1909_^1DMPLEN NUM 0_^1_%ADC BUFFER-DMPCAL+DPBREL_^1_%JMP- (ADISP)_^1_%SPC 5_^1*_*SET UP FOR NEXT CELL INCASE LONG PRINTOUT_^1DMPEXT SQP DMPOK1-*-1_"CHECK FOR I/O ERROR_^1_%JMP IOERR+DPBREL_^1DMPOK1 LDA* (DMPBUF)_^1_%INA 8_^1_%STA* (DMPBUF)_^1_%RAO* DMPBUF_^1_%JMP* (DMP€€BUF)_^1_%SPC 5_^1*_*FLAGS, COUNTERS ETC_^1PIBFLG NUM 0_^1DMPTMP NUM 0_^1DMPADD NUM 0_^1DMPCTR NUM 0_^1SPACE2 ALF 1,_+2 SPACES_^1_%SPC 5_^1*_*SUBROUTINE TO STORE VAL IN A REG INTO BUFFER_^1PUTINB 0_"0_^1_%STA* DEXHEX_'SAVE HEX NO._^1_%CLR A_^1_%STA* DEXCH_(INITIALIZE ASCII WORD TO BE MADE_^1DEX001 ENQ 1_,INITIALIZE COUNTER FOR 2 WDS._^1DEX002 STQ* DEXCNT_^1DEX003 CLR Q_,GE€€T A HEX DIGIT_^1_%LDA* DEXHEX_^1_%LLS 4_^1_%STA* DEXHEX_^1_%TRQ A_^1_%INA -$A_^1_%SAP DEX004-*-1_"SKIP IF DIGIT A THRU F_^1_%INA $3A-$41_^1DEX004 INA $41_*CONVERT TO ASCII_^1_%LDQ* DEXCH_^1_%SQN DEX005-*-1_"SKIP IF NOT FIRST CHAR. FOR WORD_^1_%ALS 8_^1_%STA* DEXCH_^1_%JMP* DEX003_'GO TO GET NEXT HEX DIGIT_^1DEX005 EAQ A_,BUILD ASCII WORD_^1_%STA BUFFER+DPBREL,I STORE WORD€€ IN BUFFER_^1_%RAO- I_^1_%LDQ* DEXCNT_^1_%SQZ DEX006-*-1_"SKIP IF DONE_^1_%INQ -1_^1_%STQ* DEXCH_(INITIALIZE ASCII WORD_^1_%JMP* DEX002_^1DEX006 JMP* (PUTINB)_$RETURN TO CALLER_^1*_$CONSTANTS_^1DEXHEX 0_"0_,HEX NUMBER_^1DEXCH 0_"0_,STORAGE FOR ASCII WORD BEING BUILT_^1DEXCNT 0_"0_,ASCII WORD COUNTER_^1_%BZS CORRT3(5) **************************************************_^1_%SPC 5€€_^1*_]_^1_%EQU SA22(*/96)_^1_%EQU SP22(SA22+1)_^1_%EQU DB22(SP22*96)_^1_%BSS (DB22-*)_^1*_]_^1 EJT_]_^1*_]_^1*_$THIS SUBROUTINE CONVERTS ASCII(REPRESENTING_^1*_%A SIGNED DECIMAL NO.) TO BINARY. ASCII CHARACTERS_^1*_%ARE IN BUFFER(FIELD+1,2,3)._^1*_%RESULT IS RETURNED IN A-REG._^1*_%LEGAL CHARACTERS ARE +,-,0-9_^1*_%ILLEGAL CHAR. AND +,- ZEROS OUT ACCUMMULATION_^1*_%DECIMAL VALU€€E .GT. 2**15-1 WILL RESULT IN ERROR_^1*_]_^1_%EQU DECREL(*-AREA3)_^1*_]_^1_%EQU SPACE($20),PLUS($2C),NEG($2D)_^1ASCDEC 0_"0_^1_%CLR A_,INITIALIZE SIGN AND_^1_%STA* DECSGN_(ACCUMMULATION_^1_%STA* DECACC_^1_%ENQ 2_,GET AND STORE ONE CHARACTER_^1DEC001 LDA FIELD+1+DECREL,Q PER WORD_^1_%AND- LPMSK+8_'(GET LSD)_^1_%QLS 1_^1_%STA* DECCHR+1,Q_^1_%QRS 1_^1_%LDA FIELD+1+DECREL,Q_^1_€€%ALS 8_^1_%AND- LPMSK+8_^1_%QLS 1_^1_%STA* DECCHR,Q_^1_%QRS 1_^1_%INQ -1_^1_%SQM DEC002-*-1_#SKIP IF DONE_^1_%JMP* DEC001_^1*_$TABLE TO HOLD CHARACTERS_^1_%BZS DECCHR(6)_^1DEC002 ENA 0_,SET INDEX FOR CONVERSION_^1_%STA- I_-TO DECIMAL_^1DEC010 LDA* DECCHR,I_$GET CHAR._^1_%INA -PLUS_^1_%SAZ DEC003-*-1_#SKIP IF PLUS SIGN_^1_%INA -NEG+PLUS_^1_%SAN DEC005-*-1_#SKIP IF NOT NEG€€. SIGN_^1_%ENA -0_,SET SIGN FLAG NEG._^1DEC003 STA* DECSGN_^1_%CLR A_,CLEAR ACCUMMULATION_^1DEC004 JMP* DEC009_^1DEC005 INA -$30+NEG_$IS CHAR. A DECIMAL DIGIT_^1_%SAP DEC006-*-1_#SKIP OK_^1DEC007 CLR A_^1_%JMP* DEC003_^1DEC006 INA -$3A+$30_%SKIP OK_^1_%SAM DEC008-*-1_^1_%JMP* DEC007_^1DEC008 INA $A_+CONVERT TO HEX_^1_%MUI* DECTEN,I_$CONVERT TO DECIMAL_^1_%ADD* DECACC_'ADD T€€O ACCUMMULATED VALUE_^1DEC009 STA* DECACC_^1_%LDA- I_,CONVERSION COMPLETE_^1_%INA -5_^1_%SAZ DEC011-*-1_#SKIP YES_^1_%RAO- I_^1_%JMP* DEC010_'GO TO CONVERT NEXT DIGIT_^1DEC011 LDA* DECACC_'IS SIGN NEG._^1_%LDQ* DECSGN_^1_%SQP DEC012-*-1_#SKIP NO_^1_%TCA A_-COMPLEMENT RESULT_^1DEC012 JMP* (ASCDEC)_$RETURN TO CALLER_^1DECACC 0_"0_,STORAGE FOR ACCUMMULATION_^1DECSGN 0_"0_,SIGN FLA€€G_^1*_$TABLE OF POWERS OF TEN_^1DECTEN NUM 0_,0_^1_%NUM 10000_(1_^1_%NUM 1000_)2_^1_%NUM 100_*3_^1_%NUM 10_+4_^1_%NUM 1_,5_^1_%SPC 5_^1*_]_^1_%EQU SA23(*/96)_^1_%EQU SP23(SA23+1)_^1_%EQU DB23(SP23*96)_^1_%BSS (DB23-*)_^1*_]_^1*_$THIS SUBROUTINE CONVERTS HEX NUMBER TO_^1*_%TWO WORD ASCII FOR PRINTING._^1*_%Q-REG.=HEX NUMBER_^1*_%WORD FOLLOWING CALL CONTAINS RELATIVE_^1*_'€€INCREMENT TO WHERE ASCII IS TO BE STORED._^1*_%RETURN IS MADE TO SECOND WORD FOLLOWING CALL._^1*_]_^1HEXASC 0_"0_^1_%STQ* HEXHEX_'SAVE HEX NO._^1_%LDA* (HEXASC)_$CALC. ABS. LOC. TO PUT_^1_%ADD* HEXASC_(ASCII CHARS._^1_%STA* HEXLAS_^1_%RAO* HEXASC_'BUMP RETURN AROUND PARAMETER_^1_%CLR A_^1_%STA* HEXCH_(INITIALIZE ASC WORD TO BE MADE_^1HEX001 ENQ 1_,INITIALIZE COUNTER FOR 2 WDS._^1€€HEX002 STQ* HEXCNT_^1HEX003 CLR Q_,GET A HEX DIGIT_^1_%LDA* HEXHEX_^1_%LLS 4_^1_%STA* HEXHEX_^1_%TRQ A_^1_%INA -$A_^1_%SAP HEX004-*-1_"SKIP IF DIGIT A THRU F_^1_%INA $3A-$41_^1HEX004 INA $41_*CONVERT TO ASCII_^1_%LDQ* HEXCH_(GET ASC WORD_^1_%SQN HEX005-*-1_"SKIP IF THIS IS NOT FIRST CHAR. FOR WORD_^1_%ALS 8_^1_%STA* HEXCH_^1_%JMP* HEX003_'GO TO GET NEXT HEX DIGIT_^1HEX005 €€EAQ A_,BUILD ASC WORD_^1_%LDQ* HEXLAS_'STORE IT IN SPECIFIED_^1_%STA- (ZERO),Q_%LOCATION_^1_%RAO* HEXLAS_'BUMP TO NEXT LOC._^1_%LDQ* HEXCNT_^1_%SQZ HEX006-*-1_"SKIP IF DONE_^1_%INQ -1_^1_%STQ* HEXCH_(INITIALIZE ASC WORD TO BE MADE_^1_%JMP* HEX002_^1HEX006 JMP* (HEXASC)_$RETURN TO SENDER_^1*_]_^1*_$CONSTANTS_^1HEXHEX 0_"0_,HEX NUMBER_^1HEXLAS 0_"0_,LOC. TO STORE ASCII_^1HEXCH 0_€€"0_,STORAGE FOR ASCII WORD BEING BUILT_^1HEXCNT 0_"0_,ASCII WORD COUNTER_^1*_[**MSOS4.0**_^1_%EQU SA25(*/96)_F**MSOS4.0**_^1_%EQU SP25(SA25+1)_D**MSOS4.0**_^1_%EQU DB25(SP25*96)_C**MSOS4.0**_^1_%BSS (DB25-*)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EJT_]_^1*_$THIS SUBROUTINE PRINTS OUT CORE CELLS IN DECIMAL_$**MSOS4.0**_^1*_*FORMAT ON THE COMMENT OUTPUT DEVICE. THE CODE_!**MSOS4.0**_€€^1*_*IS VERY SIMILAR TO THE HEX FORMAT ROUTINE._%**MSOS4.0**_^1*_[**MSOS4.0**_^1*_*Q REG HAS NUMBER OF CELLS TO OUTPUT_-**MSOS4.0**_^1*_*Q GREATER THAN SIXTEEN INDICATES A RELATIVE CALL **MSOS4.0**_^1*_.WITH A BIAS OF SIXTEEN_6**MSOS4.0**_^1*_$NO ADDRESS TAG IS PRINTED (ROUTINE WOULD EXCEDE AREA3)**MSOS4.0**_^1*_[**MSOS4.0**_^1_%EQU DLNREL(*-AREA3)_A**MSOS4.0**_^1DECDMP NOP 0_O**€€MSOS4.0**_^1_%LDA* (DECDMP)_H**MSOS4.0**_^1_%INQ -16_M**MSOS4.0**_^1_%SQM NTREL_(SKIP IF NOT RELATIVE_.**MSOS4.0**_^1_%ADD* DECDMP_J**MSOS4.0**_^1_%JMP* DLN301_J**MSOS4.0**_^1NTREL INQ 16_N**MSOS4.0**_^1DLN301 STA* DLNADD_J**MSOS4.0**_^1_%STQ* DLNCTR_J**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%STQ- I_O**MSOS4.0**_^1DLN006 LDA* DLNSP2_'STUF 2 SPACES_5**MSOS4.0**_^1DLN007 STA BUFFE€€R+DLNREL,I_A**MSOS4.0**_^1_%RAO- I_O**MSOS4.0**_^1_%LDA* (DLNADD)_H**MSOS4.0**_^1_%RTJ* DLNPIB_'CONVERT AND STUF A WORD_+**MSOS4.0**_^1_%RAO* DLNADD_J**MSOS4.0**_^1_%LDA* DLNCTR_J**MSOS4.0**_^1_%INA -1_N**MSOS4.0**_^1_%SAZ DLNOUT_J**MSOS4.0**_^1_%STA* DLNCTR_J**MSOS4.0**_^1_%JMP* DLN006_J**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$BUFFER FULL_J**MSOS4.0**_^1*_[**MSOS4.0**_^1DLNOUT LDA- I_,€€SET UP LENGTH_5**MSOS4.0**_^1_%STA* DLNLEN_J**MSOS4.0**_^1_%LDA (LCHRSF+1+DLNREL)_!CHECK IF PROGRAM TO BE_%**MSOS4.0**_^1_%SAN DLNCON_/TURNED OFF_0**MSOS4.0**_^1_%JMP OFF+DLNREL_"EXIT FROM PACKAGE_1**MSOS4.0**_^1DLNCON RTJ- (AMONI)_I**MSOS4.0**_^1DLNCAL ADC $D00+CHRSLV_E**MSOS4.0**_^1_%ADC DLNEXT-DLNCAL_C**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%ADC $17FF+LISTLU+DLNREL-DLNCAL_:€€78*1909_^1DLNLEN NUM 0_O**MSOS4.0**_^1_%ADC BUFFER-DLNCAL+DLNREL_<**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$SET UP FOR NEXT CELL IN CASE LONG PRINTOUT_+**MSOS4.0**_^1DLNEXT SQP DLNOK_K**MSOS4.0**_^1_]_^1_]_^1_]_^1_]_^1_]_^1_]_^1_]_^1_]_^1_]_^1_%JMP IOERR+DLNREL_D**MSOS4.0**_^1DLNOK LDA* (DECDMP)_H**MSOS4.0**_^1_%INA 8_O**MSOS4.0**_^1_%STA* (DECDMP)_H**MS€€OS4.0**_^1_%RAO* DECDMP_J**MSOS4.0**_^1_%JMP* (DECDMP)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FLAGS, COUNTERS, ETC._@**MSOS4.0**_^1DLNADD NUM 0_,WORD ADDRESS_6**MSOS4.0**_^1DLNCTR NUM 0_,WORD COUNTER_6**MSOS4.0**_^1DLNSP2 ALF 1,_+2 SPACES_:**MSOS4.0**_^1DLNTMP NUM 0_O**MSOS4.0**_^1DLNPLS NUM $2B00_(PLUS SIGN_9**MSOS4.0**_^1DLNMNS NUM $2D00_(MINUS SIGN_8**MSOS4.0**_^1*_[**MSOS4.0*€€*_^1*_$SUBROUTINE TO STORE VAL IN A REG INTO BUFFER IN_%**MSOS4.0**_^1*_*DECIMAL ASCII FORMAT_<**MSOS4.0**_^1DLNPIB NOP 0_O**MSOS4.0**_^1_%STA* DLNTMP_J**MSOS4.0**_^1_%SAP DLN009_'CHECK FOR SIGN_4**MSOS4.0**_^1_%TCA A_,MINUS_=**MSOS4.0**_^1_%STA* DLNTMP_J**MSOS4.0**_^1_%LDA* DLNMNS_J**MSOS4.0**_^1DLN010 STA BUFFER+DLNREL,I_A**MSOS4.0**_^1_%JMP* DLN008_J**MSOS4.0**_^1DLN009 LDA*€€ DLNPLS_'PLUS_>**MSOS4.0**_^1_%JMP* DLN010_J**MSOS4.0**_^1DLN008 LDA* DLNTMP_J**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_*CONVERT TO DECIMAL_0**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%RAO- I_O**MSOS4.0**_^1_%STQ BUFFER+1+DLNREL,I_?**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_M**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%LLS 16_N**MSOS4.0**_^1_%ALS 8_O**MSOS4.0**_^1_%EOR €€BUFFER+1+DLNREL,I_?**MSOS4.0**_^1_%STA BUFFER+1+DLNREL,I_?**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_M**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%STQ BUFFER+DLNREL,I_A**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_M**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%LLS 16_N**MSOS4.0**_^1_%ALS 8_O**MSOS4.0**_^1_%EOR BUFFER+DLNREL,I_A**MSOS4.0**_^1_%STA BUF€BFER+DLNREL,I_A**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_M**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1_%EOR BUFFER+DLNREL-1,I_?**MSOS4.0**_^1_%STA BUFFER+DLNREL-1,I_?**MSOS4.0**_^1_%RAO- I_O**MSOS4.0**_^1_%RAO- I_O**MSOS4.0**_^1_%JMP* (DLNPIB)_H**MSOS4.0**_^1_%END_]_^__BPODBUG1 CSY/ H45 P€1_%NAM ODEBUG_'DECK-ID H45 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$1700 ON-LINE DEBUG PACKAGE_^1_%SPC 3_^1*_]_^1****_.C O R E_$M A P_$L A Y - O U T_^1*_]_^1*_]_^1*_]_^1*_1€€+---------------------------+_^1*_11_:1_^1*_11 CORE RESIDENT EXECUTIVE 1_^1*_11_:1_^1*_11_$SIZE : 180 (APPX.)_!1_^1*_11_:1_^1*_1+---------------------------+_^1*_11_:1_^1*_11_$INPUT BUFFER_'1_^1*_11_:1_^1*_11_$SIZE : 40_*1_^1*_11_:1_^1*_1+---------------------------+_^1*_11_:1_^1*_11_"AREA 2 PROCESSOR_#1_"REQUEST_^1*_11_:1_"PROCESSOR_^1*_11_$SIZE : 340 (APPX.)_!1_"OVERLAY ARE€€A_^1*_11_:1_^1*_1+---------------------------+_^1*_11_:1_^1*_11_"AREA 3 SUBROUTINE_"1_"SUBROUTINE_^1*_11_:1_"OVERLAY AREA_^1*_11_$SIZE : 288_*1_^1*_11_:1_^1*_1+---------------------------+_^1*_]_^1*_]_^1******_,TOTAL CORE SIZE --- $350 ( 848)_^1*_]_^1*_]_^1_%SPC 2_^1*_]_^1*_]_^1****_.***********************************************_^1****_.*_L*_^1***_/*_$THIS MODULE IS EXECUTED I€€N BANK 0_$*_^1****_.*_L*_^1****_.***********************************************_^1*_]_^1*_]_^1_%SPC 2_^1_%SPC 5_^1*_1E N T R Y_$N A M E S_^1_%ENT HANDLE_^1_%ENT BRIPR1_^1_%ENT ERROR_^1_%ENT IOERR_^1_%ENT SOMMOR_^1_%ENT SOME_^1_%ENT MMADDR_^1_%ENT MSG_^1_%ENT OFF_^1_%SPC 2_^1*_1E X T E R N A L S_^1_%EXT GETREQ_'TO MATCH COMMAND_^1*_1FOLLOWING EXTERNALS ARE FOR SUBROUTI€€NES (AREA 3)_^1_%EXT PRINT_(01. PRINT MESSAGE_^1_%EXT GETFLD_'02. FIND NEXT FIELD_^1_%EXT ASCHEX_'03. ASCII TO HEX. CONVERSION_^1_%EXT DMPBUF_'04. PRINT CORE DATA_^1_%EXT ASCDEC_'05. ASCII TO BINARY CONVERSION_^1_%EXT HEXASC_'06. HEX. TO I-WORD ASCII CONVERSION_^1_%EXT DECDMP_'07. PRINT CORE DATA IN DECIMAL FORMAT_^1_%EXT GETINT_'08. GET INTEGER FOR E/D VALUE_^1_%EXT FETMM€€_(09. GET/CONVERT MM ADDRESS_^1_%EXT PNTMD_(10. PRINT MM DATA_^1_%EXT MASOT_(11. PRINT MM DATA WITH DIFFERENT FORMATS_^1_%EXT CONFM_(12. PRINT DATA AND REQUEST CONFIRMATION_^1_%EXT FLCVSG_'13. PRINT/CONFIRM SINGLE PRECISION VALUE_^1_%EXT FLCVDB_'14. PRINT/CONFIRM DOUBLE PRECISION VALUE_^1_%EXT NAMEMS_'15. "NAMEMS" -- COMMAND MESSAGE_^1*_]_^1_%EXT ECONV_(E- OR F-FORMAT CONVER€€SION (SINGLE)_^1_%EXT DCONV_(D- OR F-FORMAT CONVERSION (DOUBLE)_^1_%SPC 1_^1_%EXT ODEBUG_'DIRECTORY NAME OF THIS PACKAGE_^1_%EXT CHRSFG_'ODP IN-PROGRESS FLAG_^1_%EXT NUMLU_K**MSOS4.0**_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),A€€STRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%SPC 10_^1*_*VARIABLE EQUS_^1_%EQU MAXPAG(16)_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU LBUFF(40)_#LENGTH OF OPER. INPUT BUFFER (2 CHAR./WORD)_^1_%SPC 2_^1*_*SIZED TO HOLD AREA 2 AND AREA3 PROGRAMS RESPECTIVELY_^1_%EQU LENGTH(340)_!LENGTH OF PROGIN(AREA 2)_^1_%EQU LAREA3(288)_!LENGT€€H OF AREA 3_^1_%SPC 5_^1*_*EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($18FC) TYPER OUTPUT LOGICAL UNIT_^1_%EQU COMLU($18FD) INPUT COMMENT MEDIUM_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%SPC 10_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1ODP_"LDA CHRSFG_'GET ODP-IN-PROGRESS FLAG_^1_%EQU CHRIS(ODP+1)_^1_%SAZ SETFG-*-1_#CHRIS ALREA€€DY IN_^1_%JMP* GOWAY_(YES-RELEASE SECOND ONE_^1SETFG RAO* (CHRIS)_%NO-SET CHRSFG_^1_%RTJ* SELF_)TRAP CURRENT CORE LOCATION_^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA HANDLE-SELF_!CALCULATE "HANDLE" ROUTINE LOCATION_^1_%STA BASE+1_^1_%INA MSG-HANDLE_"ABSOLUTIZED "MSG" ADDRESS_^1_%STA BASE+2_^1_%INA SOMMOR-MSG_"GENERATE "SOMMOR" ADDRESS_^1_%STA* BASE+3_^1_%INA IOERR-SOMMOR CALCULAT€€E "IOERR" LOCATION_^1_%STA* BASE+4_^1_%INA BASE-IOERR_"GENERATE PARAMETER BASE LOCATION_^1_%STA* BASE_^1_%LDA- $FC_)SET-UP STANTARD OUTPUT_^1_%STA* COMOLU_(L.U. NO._^1_%STA* LISTLU_J**MSOS4.0**_^1_%LDA- $C2_*SET UP MASS MEMORY LOGICAL UNIT_^1_%STA* NEWMLU_^1_%JMP START_+GO TO START UP_^1*_$BACK GROUND INPUT BUFFER WITH ALL ONES_^1LOKMOR ENQ LBUFF-1_^1_%ENA -0_^1BUFLOP STA BUFF€€ER,Q_^1_%INQ -1_^1_%SQM ALL1S-*-1_^1_%JMP* BUFLOP_^1*_*SET UP BUFFER COUNTERS FOR GETFLD_^1ALL1S ENA 1_^1_%STA* BITFLG_^1_%STQ* BUFCNT_^1_%ENA 0_,RESET SLASH FLAG_^1_%STA* SLASHF_^1_%STA* BUFEMT_(AND BUFFER EMTY FLAG_^1_%SPC 5_^1*_*READ ONE LINE FROM INPUT COMMENT DEVICE_^1_%RTJ- (AMONI)_^1READLN ADC $900+CHRSLV_^1_%ADC FIRSTF-READLN_^1_%NUM 0_^1_%ADC COMLU_^1_%ADC LBUFF€€_^1_%ADC BUFFER-READLN_^1_%JMP- (ADISP)_^1_%SPC 5_^1*_*BRING OVER PROGRAM SUBROUTINE_^1*_*THIS ROUTINE PUT CORRECT PROGRAM IN AREA 3_^1*_*ENTER HANDLE WITH SUBROUTINE NUMBER IN A AND Q WILL_^1*_*BE PASSED. RETURN ADDRESS WILL BE SET IN FIRST WORD OF_^1*_*SUBROUTINE WITH CONTROL GIVEN TO SECOND WORD._^1GOTOIT SQP GOTO3-*-1_^1_%JMP* IOERR_K**MSOS4.0**_^1HANDLE NUM 0_,START OF SU€€BROUTINE_^1_%STQ* QTEMP_^1_%TRA Q_^1_%EOR* PROG1_(CHECK IFF CORRECT PROG IS IN AREA 3_^1_%SAN NOPRG-*-1_^1GOTO3 LDA* HANDLE_^1_%STA AREA3_^1_%LDQ* QTEMP_^1_%LDA* BASE_)GET PARAMETER BUFFER ADD. AND PASS TO SUB._^1_%JMP AREA3+1_^1_%SPC 5_^1*_*GET PROGRAM INTO AREA 3_^1_%SPC 3_^1NOPRG LDA* PROLOC,Q_^1_%STQ* PROG1_(SET FOR NEW SUBROUTINE IN AREA 3_^1_%RTJ* MMADDR_'CALC. MM ADD€€RESS_^1_%STQ* MSBSR_^1_%STA* LSBSR_^1_%RTJ- (AMONI)_^1GETROU ADC $300+CHRSLV+$600_^1_%ADC GOTOIT-GETROU_^1_%NUM 0_^1_%ADC MASSLU_^1_%ADC LAREA3_^1_%ADC AREA3-GETROU_^1MSBSR 0_"0_^1LSBSR 0_"0_^1_%JMP- (ADISP)_^1_%SPC 3_^1QTEMP NUM 0_^1_%SPC 5_^1FIRSTF SQP NOERR-*-1 NO I/O ERROR_^1_%JMP* IOERR_K**MSOS4.0**_^1NOERR LDA* PROG2_^1_%SAP NOINYT-*-1_^1GETBAS LDA* BASE_)GET €€PARAMETER LIST LOCATION_^1_%JMP PROGIN_'PROGRAM IN CORE_^1_%SPC 1_^1AGETRQ ADC GETREQ_'RELATIVE ADDRESS TO GET REQUEST PROCESSOR_^1_%SPC 1_^1NOINYT LDA* AGETRQ_^1_%RTJ* MMADDR_'CALC. MM ADDRESS_^1_%STQ* MSBPRC_^1_%STA* LSBPRC_^1_%ENA -1_^1_%SPC 5_^1*_*BRING IN REQUESTED PROGRAM INTO AREA 2_^1BRIPRO STA* PROG2_^1BRIPR1 RTJ- (AMONI)_^1GETPRG ADC $300+CHRSLV+$600_^1_%ADC NOWIN€€-GETPRG_^1_%NUM 0_^1_%ADC MASSLU_^1_%ADC LENGTH_^1_%ADC PROGIN-GETPRG_^1MSBPRC 0_"0_^1LSBPRC 0_"0_^1_%JMP- (ADISP)_^1NOWIN SQM IOERR_K**MSOS4.0**_^1_%JMP* GETBAS_'TO START EXECUTION_^1_%SPC 3_^1*_*ERROR DETECTED IN I/O -RELEASE CORE_^1_%SPC 5_^1*_*TURN OFF REQUEST_^1OFF_"ENQ 1_^1_%ENA 1_^1_%RTJ* HANDLE_^1ERROR EQU ERROR(*)_^1_%SPC 5_^1CHREXT CLR A_^1LCHRSF STA* (CHRIS€€)_%CLEAR CHRSFG_^1GOWAY RTJ- (AMONI)_^1_%NUM $1901_^1_%ADC (ODP-*+1)_$RELEASE CORE_^1_%SPC 5_^1*_*LOG ILLEGAL MESSAGE_^1IOERR ENQ 2_,I/O ERROR ENTRY_^1MSG_"ENA 1_,Q SET BY REQUESTOR OF MESSAGE_^1_%RTJ* HANDLE_^1_%SPC 3_^1SOMMOR LDA* (CHRIS)_%CHECK FLAG_^1_%SAN SOME-*-1_^1_%SPC 3_^1*_*LOG ANY MORE REQ MESSAGE_^1SOME_!ENQ 3_^1_%ENA 1_^1_%RTJ* HANDLE_^1_%JMP* LOKMOR_^1*_]_€€^1*_$SUBROUTINE TO CALC. MASS MEMORY ADDRESS OF SR_^1*_'FROM MM ADDRESS OF ODP IN SYS. DIRECTORY_^1*_'ENTRY AND ADDRESS OF SR RELATIVE TO ODP_^1*_'(A-REG.=RELATIVE ADDRESS OF SUBROUTINE)_^1*_]_^1MMADDR 0_"0_^1_%ENQ 0_^1_%DVI =N96_^1_%STA* RELMMA_^1_%LDQ- $EB_*ADDRESS OF SYS. DIR._^1_%ADQ* ODPDEN_(PLUS INDEX TO ODP ENTRY_^1_%LDA- 6,Q_*LSB OF MM ADDRESS OF "ODP"_^1_%ADD* RELMMA_'AD€€D RELATIVE ADDRESS OF SR_^1_%INQ 5_,SET LOCATION TO MSB_^1_%STQ* RELMMA_^1_%ENQ 0_^1_%LLS 1_^1_%ADQ* (RELMMA)_$CALCULATE LSB_^1_%ALS 15_^1NOOVF JMP* (MMADDR)_$Q=MSB,A=LSB_^1_%SPC 1_^1RELMMA 0_"0_^1ODPDEN ADC ODEBUG_'DIRECTORY NAME OF THIS PACKAGE_^1_%SPC 3_^1*_1PARAMETER BUFFER_^1BASE_!NUM 0_,ABSOULTIZED PARAMETER BUFFER ADD. (BE FILLED)_^1_%ADC HANDLE-SELF_!"HANDLE" LOC€€ATION (TO BE FILLED) --- 1_^1_%ADC MSG-HANDLE_""MSG" LOCATION (TO BE FILLED)_"--- 2_^1_%ADC SOMMOR-MSG_""SOMMOR" ENTRY_2--- 3_^1_%ADC IOERR-SOMMOR "IOERR" ENTRY_3--- 4_^1LISTLU NUM 0_,LOC. OF LIST OUTPUT L.U. NO._#--- 5_^1COMOLU NUM 0_+LOC. OF COMMENT OUTPUT L.U. NO._!--- 6_^1NEWMLU NUM 0_,NEW MASS MEMORY LOGICAL UNIT_#--- 7_^1PROG1 NUM 0_,SUBROUTINE IN AREA 3_,--- 8_^1PRO€€G2 NUM 0_,PROGRAM IN AREA2 (PROGIN)_'--- 9_^1BITFLG NUM 0_,BUFFER BIT POSITION NEXT_(--- 10_^1BUFCNT NUM 0_,BUFFER COUNTER_2--- 11_^1FIELD NUM 0_,CONTROL CHAR._3--- 12_^1_%NUM 0_+SIGN AND 1ST DEC. DIGIT_*--- 13_^1_%NUM 0_,2 MOST SIGNIFCANT HEX CHARACTERS --- 14_^1_%NUM 0_-LEAST SIGNIFCANT HEX CHARACTERS --- 15_^1SLASHF 0_"0_,SLASH FLAG_6--- 16_^1BUFEMT 0_"0_+BUFFER EMTY FL€€AG_1--- 17_^1_%ADC BUFFER-BASE_C--- 18_^1_%SPC 3_^1_%EQU PROLOC(*-1)_!TABLE OF AREA 3 PROGRAMS_^1_%SPC 3_^1*_]_^1***_/AREA 3 PROGRAM NAMES TABLE_^1*_]_^1A3_#ADC PRINT_(INDEX NO. 1_^1_%ADC GETFLD_12_^1_%ADC ASCHEX_13_^1_%ADC DMPBUF_14_^1_%ADC ASCDEC_15_^1_%ADC HEXASC_16_^1_%ADC DECDMP_17_^1_%ADC GETINT_'08._^1_%ADC FETMM_(9._^1_%ADC PNTMD_(10. PRINT MM DATA_^1_%ADC€€ MASOT_(11. PRINT MM DATA WITH DIFFERENT FORMATS_^1_%ADC CONFM_(12. PRINT DATA AND REQUEST CONFIRMATION_^1_%ADC FLCVSG_'13. PRINT/CONFIRM SINGLE PRECISION VALUE_^1_%ADC FLCVDB_'14. PRINT/CONFIRM DOUBLE PRECISION VALUE_^1_%ADC NAMEMS_'15. "NAMEMS" -- COMMAND MESSAGE_^1_%ADC ECONV_(E- OR F-FORMAT CONVERSION (SINGLE)_^1_%ADC DCONV_(D- OR F-FORMAT CONVERSION (DOUBLE)_^1_%SPC 5_€€^1_%BZS PATCH1(5) **************************************************_^1_%SPC 5_^1_%EQU BUFFER(*)_^1*_*THIS BUFFER MUST MUST REMAIN JUST BEFOR AREA 2_^1START EQU START(*)_$START -- ONE SHOT START-UP_^1_%SPC 5_^1*_*WRITE INTIAL MESSAGE_^1CHRLOP ENQ 0_^1_%ENA 1_^1_%RTJ HANDLE_'PRINT START MESSAGE_^1_%JMP LOKMOR_^1_%SPC 5_^1_%EQU LCHRIS(BUFFER+LBUFF+LENGTH+LAREA3-ODP)_^1_%EQ€€U PROGIN(BUFFER+LBUFF)_^1_%EQU AREA3(BUFFER+LBUFF+LENGTH)_^1_%SPC 5_^1_%SPC 10_^1*********************************************************************_^1*****************************AREA 2 PROGRAMS*************************_^1*********************************************************************_^1*_]_^1_%EQU SA01(*/96)_^1_%EQU SP01(SA01+1)_^1_%EQU DB01(SP01*96)_^1_%BSS (DB01€-*)_^1*_]_^1_%END_]_^__PGETREQ CSY/ H46 P€1_%NAM GETREQ_'DECK-ID H46 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_*THIS PROGRAM FINDS THE REQUEST AND CALLS IN THE REQ._^1*_*PROG. INTO PROGIN (AREA 2)._^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT GETREQ_^1_%SPC 2_^1*_1E X T E R N A L S_^1_%EXT LHXREQ_'01. LOAD HEXADECIMAL_^1_%EXT DPCREQ_'02. DUMP HEXADECIMAL_^1_%EXT SCNREQ_'€€03. SEARCH COR_^1_%EXT SETREQ_'04. SET CORE TO PATTERN_^1_%EXT MBCREQ_'05. MOVE BLOCK OF CORE_^1_%EXT SCHREQ_'06. SCHEDULE PROGRAM_^1_%EXT SPEREQ_'07. SEARCH CORE FOR PARITY ERROR_^1_%EXT CPPREQ_'08. CLEAR PROTECT BITS_^1_%EXT SPPREQ_'09. SET PROTECT BITS_^1_%EXT ADHREQ_'10. ADD HEX. NUMBER_^1_%EXT SBHREQ_'11. SUBTRACT HEX. NUMBER_^1_%EXT ALCREQ_'12. ALLOCATE CORE_^1_%EXT €€ RELREQ_'13. RELEASE CORE_^1_%EXT DACREQ_'14. LIST ALLOCATABLE CORE MAP_^1_%EXT PTHREQ_'15. PRINT THREAD_^1_%EXT ADFREQ_'16. ADVANCE FILE_^1_%EXT BSFREQ_'17. BACKSPACE FILE_^1_%EXT ADRREQ_'18. ADVANCE RECORD_^1_%EXT BSRREQ_'19. BACKSPACE RECORD_^1_%EXT WEFREQ_'20. WRITE END OF FILE_^1_%EXT REWREQ_'21. REWIND TAPE_^1_%EXT LHCREQ_'22. MODIFY CORE IMAGE --- ASCII_^1_%EXT LHO€€REQ_'23. MODIFY ORDINAL ---HEX_^1_%EXT LHMREQ_'24. MODIFY MASS MEMORY --- HEX_^1*_)REQUEST CODE 25 IS SAME AS CODE 2 --- "DPC"_^1_%EXT DICREQ_'25. DUMP DECIMAL (INTEGER)_^1_%EXT MSDREQ_'26. LIST MASS MEMORY_^1_%EXT CLUREQ_'27. CHANGE LIST UNIT_^1_%EXT LITREQ_'28. LOAD DECIMAL (INTEGER)_^1_%EXT LIMREQ_'29. MODIFY MASS MEMORY (INTEGER)_^1_%EXT WCDREQ_'30. WRITE CORE TO MM_^1_%€€EXT RCDREQ_'31. READ TO CORE FROM MM_^1_%EXT LASREQ_'32. LOAD ASCII_^1_%EXT DASREQ_'33. DUMP ASCII_^1_%EXT MLUREQ_'34. CHANGE MASS MEMORY UNIT_^1_%EXT DPTREQ_'35. LIST PARTITION CORE MAP_^1_%EXT LSPREQ_'36. LOAD SINGLE PRECISION_^1_%EXT DSPREQ_'37. DUMP SINGLE PRECISION_^1_%EXT LDPREQ_'38. LOAD DOUBLE PRECISION_^1_%EXT DDPREQ_'39. DUMP DOUBLE PRECISION_^1_%EXT WDKREQ_'40.€€ WRITE TO DISK FROM CORE_^1_%EXT RDKREQ_'41. READ FROM MASS MEMORY TO CORE_^1_%EXT SMPREQ_'42. SET MASS MEMORY TO PATTERN_^1_%EXT CCCREQ_'43. COMPARE CORE TO CORE_^1_%EXT MMMREQ_'44. MOVE MASS MEMORY_^1_%EXT DMHREQ_'45. DUMP MASS MEMORY_^1_%EXT DMIREQ_'46. DUMP MASS MEMORY --- DECIMAL_^1_%EXT DMAREQ_'47. DUMP MASS MEMORY (ASCII)_^1_%EXT DMSREQ_'48. DUMP MASS MEMORY --- SING€€LE PRECISION_^1_%EXT DMDREQ_'49. DUMP MASS MEMORY --- DOUBLE PRECISION_^1_%EXT CWAREQ_'50. CONVERT WORD ADD. TO SECTOR/WORD ADD._^1_%EXT CCMREQ_'51. COMPARE CORE TO MASS MEMORY_^1_%EXT CMMREQ_'52. COMPARE MASS MEMORY TO MM_^1_%EXT SMNREQ_'53. SEARCH MM FOR PATTERN_^1_%EXT UNLREQ_'54. UNLOAD TAPE_^1*_)REQUEST CODE 54 IS SAME AS CODE 55 ---- 'UNL'_^1_%EXT SLDREQ_'55. SELECT DE€€NSITY_^1_%EXT LICREQ_'56. MODIFY CORE IMAGE (DECIMAL)_^1_%EXT LACREQ_'57. MODIFY CORE IMAGE (ASCII)_^1_%EXT LIOREQ_'58. MODIFY ORDINAL (DECIMAL)_^1_%EXT LAOREQ_'59. MODIFY ORDINAL (ASCII)_^1_%EXT LSOREQ_'60. MODIFY ORDINAL (SINGLE PRECISION)_^1_%EXT LDOREQ_'61. MODIFY ORDINAL (DOUBLE PRECISION)_^1_%EXT LAMREQ_'62. MODIFY MM (ASCII)_^1_%EXT LSMREQ_'63. LOAD MM SINGLE PRECISI€€ON (SAME AS 60)_^1_%EXT LDMREQ_'64. MODIFY MM (DOUBLE PRECISION)_^1_%EXT LSTREQ_'65. LIST COMMAND_^1_%SPC 1_^1_%EXT HANDLE_'"HANDLE"_^1_%EXT BRIPR1_'"BRIPR1"_^1_%EXT MMADDR_'"MMADDR"_^1_%EXT OFF_*"OFF"_^1_%EXT MSG_*"MSG"_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTE€€N($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 1_^1_%EQU MSBPRC(7)_#OFF-COUNT FROM "BRIPR1" TO "MSBPRC"_^1_%EQU LSBPRC(8)_#OFF-COUNT FROM "BRIPR1" TO "LSBPRC"_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHANDLE(1)_""HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SO€€MMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%SPC €€ 5_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1*_1SET UP ADDRESSES_^1GETREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%TRA Q_^1_%LDA* OFTB+1_^1_%SUB* OFTB_)CALCULATE OFF-COUNT FROM "BRIPR1" TO "HANDLE"_^1_%STA* EXTBRI_^1_%LDA* OFTB+2_^1_%SUB* OFTB+1_^1_%STA* EXTMMA_^1_%LDA- BHANDLE,Q_#GET "HANDLE" ADDRESS_^1_%STA* EXTHAN_^1_%ADD* EXTBRI_'SET TO "BRIP€€R1 " LOCATION_^1_%STA* EXTBRI_^1_%ADD* EXTMMA_'SET TO MMADDR" ADDRESS_^1_%STA* EXTMMA_^1_%LDA- BMSG,Q_^1_%STA* EXTMSG_^1_%LDA* OFTB+3_'CALCULATE "OFF"_^1_%SUB* OFTB_^1_%ADD* EXTHAN_^1_%STA* EXTOFF_^1_%SPC 1_^1*_*GO GET FIRST FIELD_^1_%ENA 2_^1_%ENQ 3_,SET TO GET 3 CHAR. FIELD_^1_%RTJ* (EXTHAN)_^1_%SPC 5_^1*_*SEE IF VALID REQUEST_^1_%LDA* BASE_^1_%STA- I_,SET UP PARAMETER BUFFER€€ ADDRESS_^1_%LDA- FIELD,I_%IS CONTROL CHARACTER LEGAL_^1_%SAZ REQOK-*-1_$SKIP YES (ZERO)_^1_%SUB- LPMSK+8_^1_%SAZ REQOK-*-1_$SKIP YES ($FF)_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ REQOK-*-1_$SKIP YES(COMMA)_^1_%ENQ 4_,FORMAT INCORRECT MSG._^1_%JMP* (EXTMSG)_$NO COMMA_^1_%SPC 1_^1OFTB_!ADC HANDLE_'0. "HANDLE"_^1_%ADC BRIPR1_'1. "BRIPR1"_^1_%ADC MMADDR_'2. "MMADDR"_^1_%ADC €€OFF_*3. "OFF"_^1_%ADC MSG_*4. "MSG"_^1_%SPC 1_^1REQOK LDQ =XLGNU-1_$SCAN GNUTAB_^1REQLOP LDA- FIELD+3,I_^1_%EOR* GNUTAB,Q_^1_%INQ -1_^1_%SAN TRYOTH-*-1_^1_%LDA- FIELD+2,I_^1_%EOR* GNUTAB,Q_^1_%AND- LPMSK+7_^1_%SAZ FOUND-*-1_#FOUND VALID FIELD_^1TRYOTH INQ -1_^1_%SQM LOGILL-*-1_^1_%JMP* REQLOP_^1LOGILL ENQ 5_,ILLEGAL REQUEST_^1_%JMP* (EXTMSG)_^1_%SPC 5_^1*_*VALID REQUEST €€FOUND_^1_%SPC 2_^1FOUND QRS 1_,2 WORD PER MNUMONIC_^1_%SQN BRING-*-1_#GET CORRECT REQUEST_^1_%SPC 3_^1GETOUT JMP* (EXTOFF)_$TURN OFF PACKAGE_^1_%SPC 2_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTOFF NUM 0_^1EXTMSG NUM 0_^1EXTMMA NUM 0_^1EXTBRI NUM 0_^1_%SPC 3_^1BRING LDA REQTAB,Q_^1_%STQ- PROG2,I_^1_%RTJ* (EXTMMA)_^1_%STA* BASE_)SAVE DATA TEMPORARY_^1_%LDA* EXTBRI_'GET "BRIPR1€€" LOCATION_^1_%STA- I_^1_%STQ- MSBPRC,I_^1_%LDA* BASE_)RECALL DATA_^1_%STA- LSBPRC,I_$SAVE LSB_^1_%JMP- (ZERO),I_$GO PUT REQ. PROGRAM IN THIS AREA_^1_%SPC 5_^1*_*MNEMONIC TABLE OF REQUESTS_^1_%SPC 5_^1GNUTAB ALF 2, OFF_'0_^1_%ALF 2, LHX_'01. LOAD HEXADECIMAL_^1_%ALF 2, DPC_'02. DUMP HEXADECIMAL_^1_%ALF 2, SCN_'03. SEARCH COR_^1_%ALF 2, SET_'04. SET CORE TO PATTERN_^1_%ALF €€2, MBC_'05. MOVE BLOCK OF CORE_^1_%ALF 2, SCH_'06. SCHEDULE PROGRAM_^1_%ALF 2, SPE_'07. SEARCH CORE FOR PARITY ERROR_^1_%ALF 2, CPP_'08. CLEAR PROTECT BITS_^1_%ALF 2, SPP_'09. SET PROTECT BITS_^1_%ALF 2, ADH_'10. ADD HEX. NUMBER_^1_%ALF 2, SBH_'11. SUBTRACT HEX. NUMBER_^1_%ALF 2, ALC_'12. ALLOCATE CORE_^1_%ALF 2, REL_'13. RELEASE CORE_^1_%ALF 2, DAC_'14. LIST ALLOCATABLE C€€ORE MAP_^1_%ALF 2, PTH_'15. PRINT THREAD_^1_%ALF 2, ADF_'16. ADVANCE FILE_^1_%ALF 2, BSF_'17. BACKSPACE FILE_^1_%ALF 2, ADR_'18. ADVANCE RECORD_^1_%ALF 2, BSR_'19. BACKSPACE RECORD_^1_%ALF 2, WEF_'20. WRITE END OF FILE_^1_%ALF 2, REW_'21. REWIND TAPE_^1_%ALF 2, LHC_'22. MODIFY CORE IMAGE --- ASCII_^1_%ALF 2, LHO_'23. MODIFY ORDINAL ---HEX_^1_%ALF 2, LHM_'24. MODIFY MASS M€€EMORY --- HEX_^1_%ALF 2, DIC_'25. DUMP DECIMAL (INTEGER)_^1_%ALF 2, MSD_'26. LIST MASS MEMORY_^1_%ALF 2, CLU_'27. CHANGE LIST UNIT_^1_%ALF 2, LIT_'28. LOAD DECIMAL (INTEGER)_^1_%ALF 2, LIM_'29. MODIFY MASS MEMORY (INTEGER)_^1_%ALF 2, WCD_'30. WRITE CORE TO MM_^1_%ALF 2, RDC_'31. READ MM TO CORE_^1_%ALF 2, LAS_'32. LOAD ASCII_^1_%ALF 2, DAS_'33. DUMP ASCII_^1_%ALF 2, MLU_'€€34. CHANGE MASS MEMORY UNIT_^1_%ALF 2, DPT_'35. LIST PARTITION CORE MAP_^1_%ALF 2, LSP_'36. LOAD SINGLE PRECISION_^1_%ALF 2, DSP_'37. DUMP SINGLE PRECISION_^1_%ALF 2, LDP_'38. LOAD DOUBLE PRECISION_^1_%ALF 2, DDP_'39. DUMP DOUBLE PRECISION_^1_%ALF 2, WDK_'40. WRITE TO DISK FROM CORE_^1_%ALF 2, RDK_'41. READ FROM MASS MEMORY TO CORE_^1_%ALF 2, SMP_'42. SET MASS MEMORY TO PAT€€TERN_^1_%ALF 2, CCC_'43. COMPARE CORE TO CORE_^1_%ALF 2, MMM_'44. MOVE MASS MEMORY_^1_%ALF 2, DMH_'45. DUMP MASS MEMORY_^1_%ALF 2, DMI_'46. DUMP MASS MEMORY --- DECIMAL_^1_%ALF 2, DMA_'47. DUMP MASS MEMORY (ASCII)_^1_%ALF 2, DMS_'48. DUMP MASS MEMORY --- SINGLE PRECISION_^1_%ALF 2, DMD_'49. DUMP MASS MEMORY --- DOUBLE PRECISION_^1_%ALF 2, CWA_'50. CONVERT WORD ADD. TO SECTO€€R/WORD ADD._^1_%ALF 2, CCM_'51. COMPARE CORE TO MASS MEMORY_^1_%ALF 2, CMM_'52. COMPARE MASS MEMORY TO MM_^1_%ALF 2, SMN_'53. SEARCH MM FOR PATTERN_^1_%ALF 2, UNL_'54. UNLOAD TAPE_^1_%ALF 2, SLD_'55. SELECT DENSITY_^1_%ALF 2, LIC_'56. MODIFY CORE IMAGE (DECIMAL)_^1_%ALF 2, LAC_'57. MODIFY CORE IMAGE (ASCII)_^1_%ALF 2, LIO_'58. MODIFY ORDINAL (DECIMAL)_^1_%ALF 2, LAO_'59. M€€ODIFY ORDINAL (ASCII)_^1_%ALF 2, LSO_'60. MODIFY ORDINAL (SINGLE PRECISION)_^1_%ALF 2, LDO_'61. MODIFY ORDINAL (DOUBLE PRECISION)_^1_%ALF 2, LAM_'62. MODIFY MM (ASCII)_^1_%ALF 2, LSM_'63. MODIFY MM (SINGLE PRECISION)_^1_%ALF 2, LDM_'64. MODIFY MM (DOUBLE PRECISION)_^1_%ALF 2, LST_'65. LIST COMMAND_^1_%SPC 3_^1_%EQU LGNU(*-GNUTAB)_%LENGTH OF TABLE_^1_%SPC 5_^1*_*PROGRAM TAB€€LE - LOCATION ON M.M._^1_%SPC 2_^1_%EQU REQTAB(*-1)_!PROGRAM LOCATIONS ON MASS MEMORY_^1_%SPC 2_^1_%ADC LHXREQ_'01. LOAD HEXADECIMAL_^1_%ADC DPCREQ_'02. DUMP HEXADECIMAL_^1_%ADC SCNREQ_'03. SEARCH COR_^1_%ADC SETREQ_'04. SET CORE TO PATTERN_^1_%ADC MBCREQ_'05. MOVE BLOCK OF CORE_^1_%ADC SCHREQ_'06. SCHEDULE PROGRAM_^1_%ADC SPEREQ_'07. SEARCH CORE FOR PARITY ERROR_^1_%ADC €€ CPPREQ_'08. CLEAR PROTECT BITS_^1_%ADC SPPREQ_'09. SET PROTECT BITS_^1_%ADC ADHREQ_'10. ADD HEX. NUMBER_^1_%ADC SBHREQ_'11. SUBTRACT HEX. NUMBER_^1_%ADC ALCREQ_'12. ALLOCATE CORE_^1_%ADC RELREQ_'13. RELEASE CORE_^1_%ADC DACREQ_'14. LIST ALLOCATABLE CORE MAP_^1_%ADC PTHREQ_'15. PRINT THREAD_^1_%ADC ADFREQ_'16. ADVANCE FILE_^1_%ADC BSFREQ_'17. BACKSPACE FILE_^1_%ADC ADRREQ€€_'18. ADVANCE RECORD_^1_%ADC BSRREQ_'19. BACKSPACE RECORD_^1_%ADC WEFREQ_'20. WRITE END OF FILE_^1_%ADC REWREQ_'21. REWIND TAPE_^1_%ADC LHCREQ_'22. MODIFY CORE IMAGE --- ASCII_^1_%ADC LHOREQ_'23. MODIFY ORDINAL ---HEX_^1_%ADC LHMREQ_'24. MODIFY MASS MEMORY --- HEX_^1_%ADC DICREQ_'25. DUMP DECIMAL (INTEGER)_^1_%ADC MSDREQ_'26. LIST MASS MEMORY_^1_%ADC CLUREQ_'27. CHANGE LIS€€T UNIT_^1_%ADC LITREQ_'28. LOAD DECIMAL (INTEGER)_^1_%ADC LIMREQ_'29. MODIFY MASS MEMORY (INTEGER)_^1_%ADC WCDREQ_'30. WRITE CORE TO MM_^1_%ADC RCDREQ_'31. READ TO CORE FROM MM_^1_%ADC LASREQ_'32. LOAD ASCII_^1_%ADC DASREQ_'33. DUMP ASCII_^1_%ADC MLUREQ_'34. CHANGE MASS MEMORY UNIT_^1_%ADC DPTREQ_'35. LIST PARTITION CORE MAP_^1_%ADC LSPREQ_'36. LOAD SINGLE PRECISION_^1_%AD€€C DSPREQ_'37. DUMP SINGLE PRECISION_^1_%ADC LDPREQ_'38. LOAD DOUBLE PRECISION_^1_%ADC DDPREQ_'39. DUMP DOUBLE PRECISION_^1_%ADC WDKREQ_'40. WRITE TO DISK FROM CORE_^1_%ADC RDKREQ_'41. READ FROM MASS MEMORY TO CORE_^1_%ADC SMPREQ_'42. SET MASS MEMORY TO PATTERN_^1_%ADC CCCREQ_'43. COMPARE CORE TO CORE_^1_%ADC MMMREQ_'44. MOVE MASS MEMORY_^1_%ADC DMHREQ_'45. DUMP MASS MEMORY€€_^1_%ADC DMIREQ_'46. DUMP MASS MEMORY --- DECIMAL_^1_%ADC DMAREQ_'47. DUMP MASS MEMORY (ASCII)_^1_%ADC DMSREQ_'48. DUMP MASS MEMORY --- SINGLE PRECISION_^1_%ADC DMDREQ_'49. DUMP MASS MEMORY --- DOUBLE PRECISION_^1_%ADC CWAREQ_'50. CONVERT WORD ADD. TO SECTOR/WORD ADD._^1_%ADC CCMREQ_'51. COMPARE CORE TO MASS MEMORY_^1_%ADC CMMREQ_'52. COMPARE MASS MEMORY TO MM_^1_%ADC SMNRE€€Q_'53. SEARCH MM FOR PATTERN_^1_%ADC UNLREQ_'54. UNLOAD TAPE_^1_%ADC SLDREQ_'55. SELECT DENSITY_^1_%ADC LICREQ_'56. MODIFY CORE IMAGE (DECIMAL)_^1_%ADC LACREQ_'57. MODIFY CORE IMAGE (ASCII)_^1_%ADC LIOREQ_'58. MODIFY ORDINAL (DECIMAL)_^1_%ADC LAOREQ_'59. MODIFY ORDINAL (ASCII)_^1_%ADC LSOREQ_'60. MODIFY ORDINAL (SINGLE PRECISION)_^1_%ADC LDOREQ_'61. MODIFY ORDINAL (DOUBLE P€xRECISION)_^1_%ADC LAMREQ_'62. MODIFY MM (ASCII)_^1_%ADC LSMREQ_'63. LOAD MM SINGLE PRECISION (SAME AS 60)_^1_%ADC LDMREQ_'64. MODIFY MM (DOUBLE PRECISION)_^1_%ADC LSTREQ_'65. LIST COMMAND_^1_%BZS PATCH2(5) **************************************************_^1_%SPC 10_^1*_]_^1_%EQU SA02(*/96)_^1_%EQU SP02(SA02+1)_^1_%EQU DB02(SP02*96)_^1_%BSS (DB02-*)_^1_%END_]_^__xPLHXREQ CSY/ H47 P€1_%NAM LHXREQ_'DECK-ID H47 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_$THIS PROCESSOR LOADS WORDS FROM THE_^1*_%INPUT COMMENT MEDIUM TO CORE._^1*_]_^1*_$REQUEST HAS FOLLOWING FORMAT._^1*_'LHX,CORE LOC.,BASE/DATA,OP CODE*ADDRESS(CR)_^1*_%ALL FIELDS PRECEDING SLASH ARE ADDED TO_^1*_'OBTAIN STARTING CORE LOCATION._^1*_%AN OP. CODE OF ZERO CAU€€SES 16 BIT RELATIVE_^1*_'ADDRESS TO BE STORED._^1*_]_^1_%SPC 2_^1*_1E N T R Y_#N A M E_^1_%ENT LHXREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1€€_%EQU CONFM(12)_#"CONFM" ENTRY_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^€€1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1*_]_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LHXREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADDRESS_^1_%STA* BUF€€ADD_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%CLR A_^1_%STA* LHXSLH_'RESET SLASH FLAG AND_^1_%STA* LHXRLV_(RELATIVE FLAG_^1_%STA* CORNDX_'SET CORE INDEX AND OPCODE_^1_%STA* OPCODE_(TO ZERO_^1_%STA* COUNT_^1LHX001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_,GET NEXT FIELD_^1_%RTJ* (EXTHAN)_^1_%ENA 3_,CO€€NVERT TO HEX_^1_%RTJ* (EXTHAN)_^1LHXVAL 0_"0_^1_%LDA- FIELD,I_%CONTROL CHAR.=SLASH_^1_%INA -SLASH_^1_%SAN LHX002-*-1_#SKIP NO_^1_%JMP* LHX009_(YES_^1LHX002 INA -ASTRIC+SLASH CONTROL CHAR.=ASTERISK_^1_%SAN LHX003-*-1_#SKIP NO_^1_%LDA* LHXSLH_'IS LHX SLASH FLAG SET_^1_%SAN LHX02A-*-1_#SKIP YES_^1_%JMP* LHX09A_(ILLEGAL_^1LHX02A SET A_-YES,SET RELATIVE FLAG_^1_%STA* LHXRLV_^1_%LD€€A* LHXVAL_'SAVE VALUE AS OP CODE_^1_%ALS 8_^1_%AND- NZERO+8_^1_%STA* OPCODE_^1_%JMP* LHX001_'RETURN FOR NEXT FIELD_^1_%SPC 2_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1COUNT NUM 0_^1BUFADD NUM 0_^1_%SPC 1_^1LHX003 INA -COMMA+ASTRIC CONTROL CHAR.=COMMA_^1_%SAN LHX006-*-1_#SKIP NO_^1_%LDA* LHXSLH_'LHX SLASH FLAG SET_^1_%SAN LHX004-*-1_$SKIP YES_^1LHX010 LDA* CORN€€DX_)ADD VALUE TO CORE INDEX_^1_%ADD* LHXVAL_^1_%STA* CORNDX_^1_%STA* ORGADD_'SAVE ORGINAL ADD. FOR PRINT + SAVE DATA_^1_%JMP* LHX005_J**MSOS4.0**_^1LHX004 RTJ* LHXPRO_'GO PROCESS VALUE_^1LHX005 JMP* LHX001_'RETURN TO GET NEXT FIELD_^1*_$CONTROL CHARACTER MUST BE EOT_^1LHX006 LDA* LHXSLH_(IF END OF BUFFER CHECK IF_**398_^1*_9SLASH HAS BEEN READ_0*398_^1_%SAN LHX06A_%OK, STORE VALUE€€ IN CORE_.*398_^1_%JMP* LHX09A_(ILLEGAL - FORMAT INCORRECT_)*398_^1LHX06A RTJ* LHXPRO_'GO PROCESS VALUE_^1_%SPC 2_^1*_]_^1******_,TO REQUEST CONFIRMATION_^1*_]_^1*_]_^1_%LDA* BUFADD_'TO MOVE OLD DATA TO BUFFER TO CONFIRMATION_^1_%STA- I_^1_%ENQ 0_^1MOVOLD LDA* (ORGADD),Q_^1_%STA- (ZERO),B_^1_%INQ 1_^1_%TRQ A_^1_%SUB* COUNT_(CHECK IF DONE MOVING_^1_%SAZ ENDOLD_^1_%JMP* MOVOLD€€_'TO REPEAT_^1ENDOLD ENA CONFM_(TO PRINT DATA AND REQUEST CONFIRMATION_^1_%RTJ* (EXTHAN)_^1_%ADC NEWDAT-*_^1_%LDA* (BUFADD)_$CHECK IF APPROVED_^1_%SAN LHX008_'NO, SKIP_^1SAVE0 ENQ 0_,SET UP INDEX TO MOVE DATA TO CORE_^1SAVE1 LDA* NEWDAT,Q_^1_%STA* (ORGADD),Q_^1_%INQ 1_^1_%TRQ A_^1_%SUB* COUNT_(CHECK IF DONE MOVING_^1_%SAZ LHX008_'YES, SKIP_^1_%JMP* SAVE1_(TO REPEAT_^1LHX00€€8 LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1*_$HERE IF CONTROL CHAR.=SLASH_^1LHX009 CLR A_,RESET SYSTEM SLASH FLAG_^1_%STA- SLASHF,I_%(NOTE,SEE GET FIELD SUB.)_^1_%LDA* LHXSLH_'LHX SLASH FLAG SET_^1_%SAZ LHX110-*-1_#SKIP NO_^1LHX09A ENQ 4_-OUTPUT FORMAT INCORRECT_^1_%JMP* (EXTMSG)_%MSG._^1LHX110 SET A_-SET LHX SLASH FLAG_^1_%STA* LHXSLH_^1_%JMP* LHX010_^€€1*_]_^1*_$SUBROUTINE TO STORE VALUE INTO CORE_^1LHXPRO 0_"0_^1_%LDQ* LHXRLV_'RELATIVE FLAG SET_^1_%LDA* LHXVAL_((LOAD VALUE TO A)_^1_%SQN 1_O**MSOS4.0**_^1_%JMP* LHX100_J**MSOS4.0**_^1_%SAM LHXPR2_'OKAY IF THIS IS NEG ALL CASES_$**MSOS4.0**_^1_%LDA* CORNDX_J**MSOS4.0**_^1_%SAP LHXPR3_'OKAY BOTH POSITIVE_^1_%LDA* LHXVAL_'NOT OKAY CASE VAL +, NDX -_(**MSOS4.0**_^1_%TCA A_-USE OPP€€OSIT TO GET_.**MSOS4.0**_^1_%ADD* CORNDX_*PROPER REL VALUE_/**MSOS4.0**_^1_%JMP* LHXPR1_J**MSOS4.0**_^1LHXPR3 LDA* LHXVAL_J**MSOS4.0**_^1LHXPR2 SUB* CORNDX_'CALC REL ADDRESS_2**MSOS4.0**_^1LHXPR1 LDQ* OPCODE_'OR IN OPCODE IF NOT ZERO_***MSOS4.0**_^1_%SQZ LHX100-*-1_^1_%AND- LPMSK+8_^1_%EAQ A_^1*_]_^1LHX100 LDQ* COUNT_(SAVE NEW INPUT DATA TO TEMPORARY BUFFER_^1_%STA* NEWDAT,Q_^1_€€%RAO* CORNDX_'BUMP CORE ADDRESS BY 1_^1_%RAO* COUNT_(UPDATE INDEX BY 1_^1_%CLR A_,RESET RELATIVE FLAG_^1_%STA* LHXRLV_^1_%JMP* (LHXPRO)_$RETURN TO CALLER_^1*_$CONSTANTS AND STORAGE_^1LHXSLH 0_"0_,LHX SLASH FLAG_^1LHXRLV 0_"0_,RELATIVE ADDRESS FLAG_^1CORNDX 0_"0_,CORE INDEX_^1OPCODE 0_"0_,OP CODE_^1LHXBLK ALF 1,_+ASCII BLANK CODES_^1ORGADD NUM 0_,ORGINAL ADDRESS_^1NEWDAT BZS NEW€tDAT(40)_^1_%SPC 5_^1_%EQU SA01(*/96)_^1_%EQU SP01(SA01+1)_^1_%EQU DB01(SP01*96)_^1_%BSS (DB01-*)_^1_%END_]_^__tPDPCREQ CSY/ H48 P€1_%NAM DPCREQ_'DECK-ID H48 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$THIS PROCESSOR DUMPS CORE CELLS ON THE_^1*_%OUTPUT COMMENT MEDIUM.THE REQUEST HAS THE_^1*_%FOLLOWING FORMAT._^1*_(DPC,START CORE,END CORE,BASE(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT DPCREQ_^1_%ENT DICREQ_^1_%SPC 2_^1*_1E X T E R N A L_^1_%EXT COMPV4_€€^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU M€€SG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU €€ BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DPCREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%EQU DICREQ(DPCREQ)_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENA 3_,INITIALIZE FIELD INDEX_^1_€€%STA* DPCFLX_(TO 3_^1_%CLR A_,INITIALIZE BASE ADDRESS_^1_%STA* DPCBSE_^1_%LDA- PROG2,I_^1_%INA -5_N**MSOS4.0**_^1_%STA* DDCFLG_'DPC IS MINUS, DDC IS PLUS_)**MSOS4.0**_^1DPC001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%CONTOL CHAR.=NONE_^1_%SAZ DPC002-*-1_#SKIP YES_^1_%SUB- LPMSK+8_%CONTROL CHAR.=$FF_^1_%SAZ DPC002-*-1_#SKIP YES_^€€1_%ADD- LPMSK+8_%CONTROL CHAR.=COMMA_^1_%INA -COMMA_^1_%SAZ DPC002-*-1_#SKIP YES_^1DPC008 ENQ 4_,INITIATE FORMAT INCORRECT_^1_%JMP* (EXTMSG)_%MESSAGE_^1DPC002 ENA 3_,CONVERT ASCII TO HEX_^1_%RTJ* (EXTHAN)_^1DPCVAL 0_"0_^1_%LDA* DPCVAL_'STORE VALUE_^1_%LDQ* DPCFLX_^1_%STA* DPCBSE-1,Q_^1_%INQ -1_+DECREMENT FIELD INDEX_^1_%STQ* DPCFLX_^1_%SQZ DPC003-*-1_"SKIP IF ALL FIELD DONE_^€€1_%JMP* DPC001_'GET NEXT FIELD_^1DPC003 LDA* DPCSTA_'ADD START AND BASE_^1_%ADD* DPCBSE_^1_%STA* DPCSTR_(STORE AS START_^1_%STA* DDCSTR_J**MSOS4.0**_^1DPC007 LDA* DPCFIN_'LAST=0_^1_%SAZ DPC004-*-1_#SKIP IF 0_^1_%ADD* DPCBSE_'ADD LAST AND BASE_^1_%JMP* DPC005_^1DPC009 JMP* DPC008_^1DPC004 LDA* DPCSTR_^1DPC005 STA* DPCFIN_(STORE LAST_^1DPC006 LDA* DPCFIN_'SET UP FOR ADDRESS COMPARE_€€^1_%LDQ* DPCSTR_'START TO Q_^1_%RTJ COMPV4_'COMPARE UM_^1_%ENQ 1_,ASSUME LAST TIME ONE WORD_^1_%SAZ DPCLST_'FIRST = LAST, 1 WORD DUMP_^1_%INA 0_,TEST FOR -0_^1_%SAZ DPCLST_'FIRST GREATER THAN LAST/ 1 WORD WRITE_^1_%AAQ A,Q_*TOTAL WORDS TO PRINT TO Q_^1_%INA -8_+DECREMENT FOR 8 WORDS TEST_^1_%SAM DPCLST_'LESS THAN 8 WORDS, LAST LINE_^1_%SAZ DPCLST_'8 WORDS LAST TIME_^1_%JMP€€* DPCCON_'MORE THAN 8 WORDS, DO 8 WORDS, CONTINUE_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_]_^1_%SPC 1_^1DPCLST LDA* DPCSTR_'LAST TIME, NO. TO Q, MOVE START ADDRESS_^1_%STA* DPCST2_)TO THIS CALL)_^1_%STA* DDCST2_J**MSOS4.0**_^1_%LDA* DDCFLG_J**MSOS4.0**_^1_%SAP DL01_^1_%ENA 4_,OUTPUT IN HEXADECIMAL FORMAT_%**MSOS4.0**_^1_%JMP* DPC010_J**MSOS4.0**_^1DL0€€1_!STQ* DDCQTP_^1_%ENQ -1_+OUTPUT ADDRESS TAG_0**MSOS4.0**_^1_%ENA 4_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_^1DDCST2 NUM 0_O**MSOS4.0**_^1_%LDQ* DDCQTP_J**MSOS4.0**_^1_%ENA 7_,OUTPUT IN DECIMAL FORMAT_***MSOS4.0**_^1DPC010 RTJ* (EXTHAN)_$OUTPUT ONE LINE OR LESS_^1DPCST2 0_"0_^1_%LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1DPCCON ENQ 8_,NOT LAST LINE_^1_%LDA* DDCF€€LG_J**MSOS4.0**_^1_%SAP DL02_^1_%ENA 4_,OUTPUT IN HEXADECIMAL FORMAT_%**MSOS4.0**_^1_%JMP* DPC011_J**MSOS4.0**_^1DL02_!STQ* DDCQTP_J**MSOS4.0**_^1_%ENQ -1_+OUTPUT ADDRESS TAG_0**MSOS4.0**_^1_%ENA 4_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_^1DDCSTR NUM 0_O**MSOS4.0**_^1_%LDQ* DDCQTP_J**MSOS4.0**_^1_%ENA 7_,OUTPUT IN DECIMAL FORMAT_***MSOS4.0**_^1DPC011 RTJ* (EXTHAN)_$OUTPUT ONE LINE_^1D€€PCSTR 0_"0_^1_%JMP* DPC006_'GO TO OUTPUT ANOTHER LINE_^1*_$STORAGE_^1DPCFLX 0_"0_,NO. OF REMAINING FIELD TO GET_^1DPCBSE 0_"0_,BASE CORE ADDRESS_^1DPCFIN 0_"0_,LAST CORE ADDRESS_^1DPCSTA 0_"0_,START CORE ADDRESS_^1DDCFLG NUM 0_,DPC/DDC FLAG_6**MSOS4.0**_^1DDCQTP NUM 0_,DDC Q TEMP STORAGE_0**MSOS4.0**_^1_%SPC 5_^1*_]_^1_%EQU SA02(*/96)_^1_%EQU SP02(SA02+1)_^1_%EQU DB02(SP02*96€")_^1_%BSS (DB02-*)_^1_%END_]_^__"PSCNREQ CSY/ H49 P€1_%NAM SCNREQ_'DECK-ID H49 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR SEARCHES CORE FOR THE (PARTIAL)_^1*_%FIELD AS SPECIFIED IN THE REQUEST._^1*_%THE REQUEST HAS FOLLOWING FORMAT._^1*_(SCN,START CORE,END CORE,NUMBER,MASK,INCREMENT(CR)_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT SCNREQ_^1_%SPC 1_^1*_1E X T E R €€N A L S_^1_%EXT CHRSFG_^1_%EXT OFF_^1_%EXT HANDLE_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)€€_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_€€^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU ASMOD($1000) ASCII MODE €€OUTPUT_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1SCNREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- BHAN,I_'GET "HANDLE" ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_$GET LIST LOGICAL UNIT_^1_%ADD* MODE_)+ MODE (ASCII) CODE_^1_%STA* OTLU_^1_%ENA 5_,SET INDEX TO GET 5 FIELDS_€€^1_%STA* SCNFLD_^1_%CLR A_,RESET HEADING FLAG_^1_%STA* SCNHDG_^1SCN001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ SCN002-*-1_#$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SCN002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SCN002-*-1_#SKIP YES_^1SCN012 ENQ 4_,OUTPUT FORMAT INCORRECT MSG._^1_%JMP€€* (EXTMSG)_%AND EXIT PROCESSOR_^1SCN002 ENA 3_,CONVERT TO HEX_4**MSOS4.0**_^1_%RTJ* (EXTHAN)_^1SCNVAL 0_"0_^1_%LDA* SCNVAL_'STORE FIELD_^1_%LDQ* SCNFLD_^1SCN004 STA* SCNINC-1,Q_^1_%INQ -1_+DECREMENT FIELD INDEX_^1_%STQ* SCNFLD_^1_%SQZ SCN005-*-1_#SKIP IF INDEX =0 (NO MORE FIELDS)_^1_%JMP* SCN001_^1SCN005 LDA* SCNINC_J**MSOS4.0**_^1_%SAN 2_O**MSOS4.0**_^1_%ENA 1_,MINIMUM INCREM€€ENT IS ONE_***MSOS4.0**_^1_%STA* SCNINC_J**MSOS4.0**_^1_%LDA* SCNMSK_J**MSOS4.0**_^1_%SAN SCN011_J**MSOS4.0**_^1_%SET A_,NO MASK GIVEN MEANS MASK OF $FFFF **MSOS4.0**_^1_%STA* SCNMSK_J**MSOS4.0**_^1SCN011 LDA* (SCNSTR)_$GET WORD FROM CORE_^1_%AND* SCNMSK_(MASK AND COMPARE WITH DESIRED_^1_%EOR* SCNNUM_)NUMBER_^1_%SAN SCN006_'SKIP NOT FOUND_4**MSOS4.0**_^1_%JMP* SCN008_'FOUND_=**€€MSOS4.0**_^1SCN006 LDA* SCNSTR_'INCREMENT CORE STORAGE_^1_%ADD* SCNINC_^1_%STA* SCNSTR_^1_%SAP SCN099_'NOT IN UP BNK_5**MSOS4.0**_^1_%LDA* SCNEND_'END ADDR IN H B_3**MSOS4.0**_^1_%LDA* SCNSTR_'IS BEG ADDR IN H.B. TOO_+**MSOS4.0**_^1_%SAM SCN099_'YES BOTH IN H B OK_0**MSOS4.0**_^1_%SUB* SCNSTR_)CHECK FOR SEARCH FINISHED_'**MSOS4.0**_^1_%LDA* SCNEND_(NO_?**MSOS4.0**_^1_%SAP SCN007€€-*-1_%FINISHED_7**MSOS4.0**_^1_%JMP* SCN011_*NOT FINISHED_3**MSOS4.0**_^1SCN099 LDA* SCNEND_'IS SEARCH FINISHED_0**MSOS4.0**_^1_%SUB* SCNSTR_J**MSOS4.0**_^1_%SAM SCN007-*-1_$SKIP YES_^1_%JMP* SCN011_'GO CHECK NEXT WORD_^1SCN007 ENQ 7_,OUTPUT SEARCH FINISHED_^1_%JMP* (EXTMSG)_%MESSAGE AND EXIT PROCESSOR_^1SCN008 LDA* SCNHDG_'IS HEADING FLAG SET_^1_%SAN SCN009-*-1_#SKIP YES_^1_%EN€€A 1_,OTHERWISE, SET HEADING FLAG_)69*1567_^1_%STA* SCNHDG_^1_%RTJ- (AMONI)_%AND OUTPUT HEADING TO LISTLU_(69*1567_^1SCNMSP ADC $500+CHRSLV_G69*1567_^1_%ADC SCN009-SCNMSP_E69*1567_^1_%NUM 0_Q69*1567_^1OTLU_!NUM 0_,LOGICAL UNIT (TO BO FILLED)_^1_%NUM $A_P69*1567_^1_%ADC SCNMSG-SCNMSP_E69*1567_^1_%JMP- (ADISP)_K69*1567_^1MODE_!ADC ASMOD_^1SCN009 LDA* SCNSTR_'OUTPUT ONE LINE CO€€NTAINING_^1_%STA* SCN111_(LOCATION AND CONTENTS OF_^1_%ENQ 1_-ONE CELL ._^1_%ENA 4_^1_%RTJ* (EXTHAN)_^1SCN111 0_"0_-(LOCATION OF CELL)_^1_%LDA CHRSFG_'CHECK IF "DX"_^1_%SAZ TOOFF_("DX" TO OFF, SKIP_^1_%JMP* SCN006_'TO REPEAT IF NOT DONE_^1*_]_^1TOOFF LDQ* BASE_)GENERATE "OFF" ADD._^1_%LDA* OOT+1_^1_%SUB* OOT_^1_%ADD- BHAN,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_$TO "OFF"_^1_%SPC 1_^1€€*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_$CONSTANTS AND STORAGE_^1SCNFLD 0_"0_,NO. OF REMAINING FIELD TO GET_^1SCNHDG 0_"0_,HEADING FLAG_^1SCNMSG NUM $A0D_N69*1567_^1_%ALF 8,CELL_!CONTENTS_A69*1567_^1_%NUM $A0D_N69*1567_^1*_$TABLE FOR STORAGE OF FIELDS_^1SCNINC 0_"0_,1_^1SCNMSK 0_"0_,2_^1SCNNUM 0_"0_,3_^1SCNEND 0_"0_,4_^1SCNSTR 0_"0_,5_^1SCNCEL 0_"0_,CONTENTS OF PR€΄ESENT CELL_^1OOT_"ADC HANDLE_'0. "HANDLE"_^1_%ADC OFF_*1. "OFF"_^1_%SPC 5_^1*_]_^1_%EQU SA03(*/96)_^1_%EQU SP03(SA03+1)_^1_%EQU DB03(SP03*96)_^1_%BSS (DB03-*)_^1_%END_]_^__΄PSETREQ CSY/ H50 P€1_%NAM SETREQ_'DECK-ID H50 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR FILLS THE SPECIFIED CORE WITH_^1*_'THE SPECIFIED VALUE._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_'SET,START CORE,END CORE,PATTERN(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT SETREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU €€ AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMO€€R" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""B€€UFFER"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1SETREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%ENA 3_,INITIALIZE TO GET 3 FIELDS_^1_%STA* SETFLD_^1SET001 ENQ 4_,SET TO GET 4 CHAR FIELD_^1_%ENA 2_^1_%RTJ* (E€€XTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ SET002-*-1_#$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SET002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SET002-*-1_#SKIP YES_^1SET01A ENQ 4_,PRINT FORMAT_^1_%JMP* (EXTMSG)_%INCORRECT MESSAGE AND EXIT PROCES OR_^1SET002 ENA 3_,CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1SETVAL 0_"0_^1_%LDA* SETVAL_'SAVE FIELD_^1€€_%LDQ* SETFLD_^1_%STA* SETPAT-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* SETFLD_^1_%SQZ SET003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* SET001_^1SET003 LDA* SETSTR_'CHECK FOR LEGAL ADD._^1SET03B LDQ* SETPAT_'STORE PATTERN INTO CORE_^1SET004 STQ* (SETSTR)_^1_%RAO* SETSTR_^1_%LDA* SETSTR_J**MSOS4.0**_^1_%LDA* SETEND_J**MSOS4.0**_^1_%SAM SET099_J**MSOS4.0**_^1_%SAP SET099_J**MS€€OS4.0**_^1_%SUB* SETSTR_J**MSOS4.0**_^1_%SAP SET005-*-1_"SKIP IF DONE_6**MSOS4.0**_^1_%JMP* SET004_J**MSOS4.0**_^1SET099 LDA* SETEND_J**MSOS4.0**_^1_%SUB* SETSTR_^1_%SAM SET005-*-1_#SKIP IF DONE_^1_%JMP* SET004_^1SET005 LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_]_^1*_$STO€2RAGE_^1*_]_^1SETFLD 0_"0_,NO. OF REMAINING FIELD TO GET_^1SETPAT 0_"0_,PATTERN USED TO FILL CORE_^1SETEND 0_"0_,LAST CORE LOCATION TO RE FILLED_^1SETSTR 0_"0_,FIRST CORE LOCATION TO BE FILLED_^1_%SPC 5_^1*_]_^1_%EQU SA04(*/96)_^1_%EQU SP04(SA04+1)_^1_%EQU DB04(SP04*96)_^1_%BSS (DB04-*)_^1_%END_]_^__2PMBCREQ CSY/ H51 P€1_%NAM MBCREQ_'DECK-ID H51 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR MOVES A BLOCK OF CORE TO_^1*_'ANOTHER LOCATION IN CORE._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT_^1*_(MBC,START CORE,END CORE,NEW LOCATION(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT MBCREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%E€€QU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SO€€MMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_€€""BUFFER"_^1_%EQU CONFM(12)_#"CONFM"--PRINT NEW + OLD DATA FOR CONFIRM_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1MBCREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADD._^1_%STA* BUFADD_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* E€€XTMSG_^1_%SPC 1_^1_%ENA 3_,INITIALIZE TO GET 3 FIELDS_^1_%STA* MBCFLD_^1MBC001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ MBC002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ MBC002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ MBC002-*-1_#SKIP YES_^1MBC01A ENQ 4_,PRINT FORMAT_^1_%JMP* (EXTM€€SG)_%INCORRECT MSG. AND EXIT PROCESSOR_^1MBC002 ENA 3_,CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1MBCVAL 0_"0_^1_%LDA* MBCVAL_^1_%LDQ* MBCFLD_^1_%STA* MBCNEW-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* MBCFLD_^1_%SQZ MBC003-*-1_"SKIP IF ALL FIELDS OBTAINED_^1_%JMP* MBC001_^1BUFADD NUM 0_^1MBC003 LDA* (MBCSTR)_$MOVE OLD DATA (FIRST WORD) AND NEW DATA,_^1_%STA* (BUFADD)_*REQUEST CONFIRM€€_^1_%LDA* (MBCNEW)_^1_%STA* INPDAT_^1_%ENA CONFM_^1_%ENQ 1_,SET FOR ASCII DATA AND 1 WORD_^1_%RTJ* (EXTHAN)_^1_%ADC INPDAT-*_^1_%LDA* (BUFADD)_$CHECK IF APPROVED_^1_%SAZ MBCXX3_'YES_^1_%JMP* MBC005_'NO, EXIT TO "SOMMOR"_^1MBCXX3 LDA* MBCSTR_'DETERMINE IF BACKWARD MOVE REQUIRED_^1_%SAP MBC03B_J**MSOS4.0**_^1_%LDA* MBCNEW_J**MSOS4.0**_^1_%SAM MBC03A_J**MSOS4.0**_^1_%JMP* MBC004€€_'STR -, NEW PLUS_3**MSOS4.0**_^1MBC03B LDA* MBCNEW_J**MSOS4.0**_^1_%SAM MBC03C_'STR + NEW -_6**MSOS4.0**_^1MBC03A LDA* MBCSTR_J**MSOS4.0**_^1_%SUB* MBCNEW_J**MSOS4.0**_^1_%SAM MBC03C_J**MSOS4.0**_^1_%JMP* MBC004_J**MSOS4.0**_^1MBC03C LDA* MBCNEW_J**MSOS4.0**_^1_%SAP MBC03D_J**MSOS4.0**_^1_%LDA* MBCEND_J**MSOS4.0**_^1_%SAM MBC03E_J**MSOS4.0**_^1MBC03D LDA* MBCEND_J**MSOS4.0**_€€^1_%SAP MBC03E_J**MSOS4.0**_^1_%JMP* MBC006_J**MSOS4.0**_^1MBC03E LDA* MBCNEW_J**MSOS4.0**_^1_%SUB* MBCEND_J**MSOS4.0**_^1_%SAP MBC004_J**MSOS4.0**_^1_%JMP* MBC006_J**MSOS4.0**_^1_%SUB* MBCNEW_^1_%SAP MBC004-*-1_#SKIP IF NO_^1_%LDA* MBCNEW_^1_%SUB* MBCEND_^1_%SAP MBC004-*-1_#SKIP IF NO_^1_%JMP* MBC006_(GO TO BACKWARD MOVE_^1MBC004 LDA* (MBCSTR)_$MOVE THE BLOCK_^1_%STA* (MBCNEW)€€_^1_%LDA* MBCEND_J**MSOS4.0**_^1_%SAP MBC04A_'END POS_;**MSOS4.0**_^1_%LDA* MBCSTR_'END NEG_;**MSOS4.0**_^1_%SAP MBC04B_)STR POS_9**MSOS4.0**_^1MBC04A LDA* MBCEND_J**MSOS4.0**_^1_%SUB* MBCSTR_J**MSOS4.0**_^1_%SAZ MBC005-*-1_F**MSOS4.0**_^1_%SAM MBC005-*-1_F**MSOS4.0**_^1MBC04B RAO* MBCSTR_J**MSOS4.0**_^1_%RAO* MBCNEW_J**MSOS4.0**_^1_%JMP* MBC004_^1MBC005 LDQ* BASE_)EXIT (TO "SO€€MMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1INPDAT NUM 0_^1*_$BACKWARDS MOVE_^1MBC006 LDA* MBCEND_'CALC. END OF NEW BLOCK_^1_%SUB* MBCSTR_^1_%ADD* MBCNEW_^1_%STA* MBCNEW_^1MBC008 LDA* (MBCEND)_$MOVE THE BLOCK_^1_%STA* (MBCNEW)_^1_%LDA* MBCNEW_^1_%INA -1_^1_%STA* MBCNEW_^1_%LDA* MBCEND_^1_%INA -1_^1_%STA* MBCEND_^1_%SAP MBC08A_'END ADDR POS_6**MSOS4.0**_^1_%LDA* MBCSTR_'NO BEG_€€<**MSOS4.0**_^1_%SAM MBC08A_J**MSOS4.0**_^1_%JMP* MBC008_'END NEG, BEG POS_2**MSOS4.0**_^1MBC08A LDA* MBCEND_J**MSOS4.0**_^1_%SUB* MBCSTR_^1_%SAM MBC007-*-1_#SKIP IF DONE_^1_%JMP* MBC008_^1MBC007 JMP* MBC005_'EXIT PROCESSOR_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_]_^1*_$STORAGE_^1*_]_^1MBCFLD 0_"0_,NO. OF REMAINING FIELD TO GET_^1MBCNEW 0_"0_,NEW LOCAT€ΞION OF BLOCK_^1MBCEND 0_"0_,END OF PRESENT LOCATION_^1MBCSTR 0_"0_,START OF PRESENT LOCATION_^1_%SPC 5_^1*_]_^1_%EQU SA05(*/96)_^1_%EQU SP05(SA05+1)_^1_%EQU DB05(SP05*96)_^1_%BSS (DB05-*)_^1_%END_]_^__ΞPSCHREQ CSY/ H52 P€1_%NAM SCHREQ_'DECK-ID H52 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR CREATES A SCHEDULER REQUEST._^1*_%THE FORMAT OF THE REQUEST FOLLOWS._^1*_(SCH,CORE LOCATION,Q-REG.,COMPLETION PRIORITY LEVEL(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT SCHREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),€€ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU COMLU($18FD) INPUT COMMENT MEDIUM_^1_%SPC 1_^1*_1S Y S T E M_$" E Q U "_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000)_^1_%SPC 2_^1*_1€€PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)€€_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1SCHREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXT€€MSG_^1_%LDA- COMOLU,I_^1_%ADD* MODE_^1_%STA* OTLU_^1_%SPC 1_^1_%ENA 3_,INITIALIZE TO GET 3 FIELDS_^1_%STA* SCHFLD_^1SCH001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ SCH002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SCH002-*-1_$SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SCH002-*-1_$SKIP YES_€€^1_%ENQ 4_,ILLEGAL CHAR. PRINT FORMAT INCORRECT_^1_%JMP* (EXTMSG)_'MESSAGE AND EXIT PROCESSOR_^1SCH002 ENA 3_,CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1SCHVAL 0_"0_^1_%LDA* SCHVAL_'SAVE VALUE_^1_%LDQ* SCHFLD_^1_%STA* SCHCPL-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* SCHFLD_^1_%SQZ SCH003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* SCH001_^1*_1REQUEST CONFIRMATION_^1SCH003 LDA* SCHCOM€€_'INSERT LOC._^1_%RTJ* ASMASC_^1_%ADC MES1-*_^1*_]_^1OUT_"RTJ- (AMONI)_^1WRTCD ADC $500+CHRSLV_!WRITE CODE_^1WRTEX ADC WRTRN-WRTCD_!RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU._^1WRTSZ ADC LMES0_(SIZE_^1WRTBF ADC MES0-WRTCD_"BUFFER ADD._^1_%JMP- (ADISP)_^1*_]_^1WRTRN SQP WRTOK_^1ERIO_!LDQ* BASE_)I/O ERROR_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1MODE_!ADC ASMOD_^1*_]_^1WRT€€OK RTJ- (AMONI)_%READ IN CONFIRMATION_^1REDCD ADC $900+CHRSLV_!F-READ_^1_%ADC GETRT-REDCD_!RETURN_^1_%NUM 0_^1_%ADC COMLU_^1_%NUM 1_,1WORD_^1_%ADC OKWD-REDCD_^1_%JMP- (ADISP)_^1EXME_!ADC MESX-WRTCD_"0. BUFFER ADD._^1_%ADC GONE-WRTCD_"1. EXIT ADD._^1OKWD_!NUM 0_^1*_]_^1GETRT SQP REDOK_^1_%JMP* ERIO_^1REDOK LDA* OKWD_)CHECK IF CONFIRM --- 'OK'_^1_%SUB =AOK_^1_%SAZ SCH€€XX3_'YES, SKIP_^1_%ENA LMESX_(SET-UP WRITE DATA TO PRINT ABORT MESSAGE AND_^1_%STA* WRTSZ_/EXIT_^1_%LDA* EXME_^1_%STA* WRTBF_^1_%LDA* EXME+1_^1_%STA* WRTEX_^1_%JMP* OUT_^1*_]_^1SCHXX3 LDA* SCHCPL_'SET-UP COMPLETION_^1_%AND- LPMSK+4_'PRIORITY LEVEL_^1_%TRA Q_^1_%LDA* SCHPAR_^1_%AND- NZERO+4_^1_%EAQ A_^1_%STA* SCHPAR_^1_%LDA* SCHCOM_'SET-UP COMPLETION LOCATION_^1_%STA* SCHPAR+1_^1€€_%LDQ* SCHQRG_'PASS DESIRED CONTENTS OF Q_^1_%RTJ- (AMONI)_%SCHEDULER REQUEST_^1SCHPAR NUM $1200_^1_%0_"0_^1GONE_!LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_]_^1*_$STORAGE_^1*_]_^1SCHFLD 0_"0_,NO. OF REMAINING FIELDS TO GET_^1SCHCPL 0_"0_,COMPLETION PRIORITY LEVEL_^1SCHQRG 0_"0_,CONTENTS OF €€Q-REG._^1SCHCOM 0_"0_,COMPLETION LOCATION_^1_%SPC 2_^1*_]_^1*****_-MESSAGE_^1*_]_^1MES0_!NUM $A0D_^1_%ALF 8, FIRST WORD DATA_^1_%NUM $A0D_^1MES1_!ALF 2,_^1_%ALF 2,_!(_^1MES2_!ALF 2,_^1_%ALF 1,)_^1_%NUM $A0D_^1_%ALF 5, CONFIRM_^1_%EQU LMES0(*-MES0)_^1MESX_!NUM $A0D_^1_%ALF 8,DB REQUEST ABORT_^1_%EQU LMESX(*-MESX)_^1_%SPC 1_^1*_]_^1******_,ASSEMBLE LOCATION AND CONTEN€€T INTO ASCII_^1*_]_^1ASMASC NOP 0_,ENTRY_^1_%STA* A0_+SAVE LOCATION_^1_%LDQ* (ASMASC)_^1_%ADQ* ASMASC_^1_%STQ* A1_+SAVE DATA CONTENT ADD._^1_%RTJ* TW_+ASSEMBLE INTO ASCII_^1_%LDA* A1_^1_%INA 4_^1_%STA* A1_^1_%LDA* (A0)_)GET CONTENT_^1_%RTJ* TW_+ASSEMBLE INTO ASCII_^1_%RAO* ASMASC_'SET EXIT_^1_%JMP* (ASMASC)_$EXIT_^1_%SPC 2_^1*_]_^1A0_#NUM 0_^1A1_#NUM 0_^1_%SPC 2_^1*_]_^1TW_#N€€OP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* TW1_*ZERO COUNT_^1TW0_"LLS 4_,EXTRACT 4-BIT BYTE_^1_%STA* TW2_^1_%INQ -10_*ASSEMBLE INTO ASCII ACCORDING TO NO. OR A-F_^1_%SQM TWX_^1_%INQ 7_^1TWX_"INQ $3A_^1_%LLS 16_+TO A-REG._^1_%LDQ* TW1_^1_%STA* TW3,Q_(SAVE ACCORDINGLY_^1_%INQ 1_^1_%STQ* TW1_^1_%INQ -4_^1_%SQZ TWAS_)DONE, ALL 4 BYTE BEEN PROCESSED_^1_%LDA* TW2_^1_%ENQ 0_^1_%JMP* TW0_^€j1*_]_^1TW1_"NUM 0_^1TW2_"NUM 0_^1TW3_"BZS TW3(4)_^1TWAS_!LDQ* A1_+ASSEMBLE INTO 2-WORD AND SAVE_^1_%LDA* TW3_^1_%ALS 8_^1_%ADD* TW3+1_^1_%STA- (ZERO),Q_^1_%LDA* TW3+2_^1_%ALS 8_^1_%ADD* TW3+3_^1_%INQ 1_^1_%STA- (ZERO),Q_^1_%JMP* (TW)_)RETURN_^1_%SPC 5_^1*_]_^1_%EQU SA06(*/96)_^1_%EQU SP06(SA06+1)_^1_%EQU DB06(SP06*96)_^1_%BSS (DB06-*)_^1_%END_]_^__jPSPEREQ CSY/ H53 P€1_%NAM SPEREQ_'DECK-ID H53 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR SEARCHS CORE FOR PARITY._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_(SPE,LAST LOCATION IN CORE(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT SPEREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO(€€$12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" EN€€TRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_]_^1*****_(*****€€_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1SPEREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ SPE001-*-1_$$FF €€OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SPE001-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SPE001-*-1_#SKIP YES_^1SPE000 ENQ 4_-ILLEGAL CONTROL CHAR. OUTPUT FORMAT_^1S001_!JMP* (EXTMSG)_%INCORRECT MSG. AND EXIT PROCESSOR_^1SPE001 ENQ 2_,IS FIELD BLANK_^1_%LDA- FIELD+1,B_^1_%EOR =N$2020_^1_%SAN SPE01A-*-1_#SKIP NO_^1_%INQ -1_^1_%SQM SPE002-*-1_#SKIP YES_^1_%JMP* SPE001+1€€_^1SPE01A ENA 3_-NO,CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1SPEVAL 0_"0_^1_%JMP* SPE008_^1SPE002 LDA- LPMSK+15_^1_%STA* SPEVAL_^1SPE008 CLR A_,INITIALIZE CORE READ INDEX_(**MSOS4.0**_^1_%STA* SPELOC_^1SPE003 IIN 0_,INHIBIT INTERRUPTS DURING CHECK_^1_%LDA* (SPELOC)_$READ FROM CORE_^1_%SNP SPE007_^1_%JMP* SPE005_'PARITY ERROR_^1SPE007 EIN 0_,ENABLE INTERRUPTS_^1_%LDA* FAFFFF_'CHECK I€€F THIS WAS $FFFF ADDRESS_^1_%SAM SPE004_'SKIP TO END IF =$FFFF_^1_%LDA* SPEVAL_'CHECK FINISHED_^1_%SUB* SPELOC_^1_%SAZ SPE004-*-1_#SKIP YES_^1_%LDA* SPELOC_'CHECK IF NOW $FFFF_^1_%EOR- ZROBIT_^1_%SAN BMPIDX_'SKIP IF NOT $FFFE_^1_%SET A_^1_%STA* FAFFFF_^1_%STA* SPELOC_'SET $FFFF (RAO TO $FFFE=+0, NOT -0)_^1_%JMP* SPE003_'DO NEXT CHECK_^1BMPIDX RAO* SPELOC_'BUMP INDEX_^1SPE004 EN€€Q 7_,OUTPUT SEARCH FINISHED_^1_%JMP* S001_*MSG AND EXIT PROCESSOR_^1SPE005 EIN 0_^1_%LDA* SPELOC_'OUTPUT LOCATION OF PARITY_^1_%STA* SPE006_^1_%ENQ -1_,(NEG. INDICATES ADDRESS ONLY)_^1_%ENA 4_^1_%RTJ* (EXTHAN)_^1SPE006 0_"0_^1_%JMP* SPE007_'COTINUE SEARCH_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1SPELOC 0_"0_,LOC. OF PRESENT CELL BEING CHECKED_^1FAFFFF N€ˆUM 0_,LAST PASS FLAG_^1_%SPC 5_^1*_]_^1_%EQU SA07(*/96)_^1_%EQU SP07(SA07+1)_^1_%EQU DB07(SP07*96)_^1_%BSS (DB07-*)_^1_%END_]_^__ˆPCPPREQ CSY/ H54 P€1_%NAM CPPREQ_'DECK-ID H54 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR CLEARS THE PROGRAM PROTECT BIT_^1*_%FOR THE CELLS SPECIFIED._^1*_%THE FORMAT FOR THE REQUEST IS AS FOLLOWS._^1*_(CPP,START CORE,END CORE(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT CPPREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU €€ AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMO€€R" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""B€€UFFER"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1CPPREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENA 2_,INITIALIZE TO GET 2 FIELDS_^1_%STA* CPPFLD_^1CPP001 ENQ 4_,SET TO GET 4 CHAR. FIELDS_^1_%ENA €€2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ CPP002-*-1_#$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ CPP002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ CPP002-*-1_#SKIP YES_^1CPP01A ENQ 4_,OUTPUT FORMAT INCORRECT_^1_%JMP* (EXTMSG)_%MESSAGE AND EXIT PROCESSOR._^1CPP002 ENA 3_,CONVERT FIELD TO HEX_^1_%RTJ* (EXTHAN)_^1CPPVAL 0_"0_^1_%LDA* €€CPPVAL_'SAVE FIELD_^1_%LDQ* CPPFLD_^1_%STA* CPPEND-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* CPPFLD_^1_%SQZ CPP003-*-1_#SKIP IF ALL FIELD OBTAINED_^1_%JMP* CPP001_^1CPP003 LDQ* CPPSTR_'CLEAR PROTECT BIT FROM_,**MSOS4.0**_^1_%CPB 0_-START TO LAST_^1_%RAO* CPPSTR_^1_%LDA* CPPEND_^1_%SAP CPP03A_J**MSOS4.0**_^1_%LDA* CPPSTR_J**MSOS4.0**_^1_%SAP CPP03B_J**MSOS4.0**_^1CPP03A LDA*€€ CPPEND_J**MSOS4.0**_^1_%SUB* CPPSTR_^1_%SAM CPP004-*-1_#SKIP IF DONE_^1CPP03B JMP* CPP003_J**MSOS4.0**_^1CPP004 LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_$STORAGE_^1CPPFLD 0_"0_,NO. OF REMAINING FIELDS_^1CPPEND 0_"0_,LAST CELL TO BE CLEARED_^1CPPSTR 0_"0_,FIRST CELL TO BE CLEARED_^1_%SPC €h5_^1*_]_^1_%EQU SA08(*/96)_^1_%EQU SP08(SA08+1)_^1_%EQU DB08(SP08*96)_^1_%BSS (DB08-*)_^1_%END_]_^__hPSPPREQ CSY/ H55 P€1_%NAM SPPREQ_'DECK-ID H55 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR SETS THE PROGRAM PROTECT BIT_^1*_'FOR THE CELLS SPECIFIED._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_(SPP,START CORE,END CORE(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT SPPREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI€€($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENT€€RY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"€€_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1SPPREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENA 2_,INITIALIZE TO GET 2 FIELDS_^1_%STA* SPPFLD_^1SPP001 ENQ 4_,SET TO GET 4 CHAR._^1_%ENA 2_^1_%RTJ* (E€€XTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ SPP002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SPP002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SPP002-*-1_#SKIP YES_^1SPP01A ENQ 4_,OUTPUT FORMAT_^1_%JMP* (EXTMSG)_%INCORRECT MSG. AND EXIT PROCESSOR_^1SPP002 ENA 3_,CONVERT FIELD TO HEX_^1_%RTJ* (EXTHAN)_^1SPPVAL 0_"0_^1_%LDA* SPPVAL_'SAVE FIEL€€D_^1_%LDQ* SPPFLD_^1_%STA* SPPEND-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* SPPFLD_^1_%SQZ SPP003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* SPP001_^1SPP003 LDQ* SPPSTR_'SET PROTECT BIT FROM_.**MSOS4.0**_^1_%SPB 0_-START TO END_^1_%RAO* SPPSTR_^1_%LDA* SPPEND_^1_%SAP SPP03A_J**MSOS4.0**_^1_%LDA* SPPSTR_J**MSOS4.0**_^1_%SAP SPP03B_J**MSOS4.0**_^1SPP03A LDA* SPPEND_J**MSOS4.0*€€*_^1_%SUB* SPPSTR_^1_%SAM SPP004-*-1_#SKIP IF DONE_^1SPP03B JMP* SPP003_J**MSOS4.0**_^1SPP004 LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_$STORAGE_^1SPPFLD 0_"0_,NO. OF REMAINING FIELDS TO GET_^1SPPEND 0_"0_,LAST CORE LOC. TO PROTECT_^1SPPSTR 0_"0_,FIRST CORE LOC. TO PROTECT_^1_%SPC 5_^1*_]_€`^1_%EQU SA09(*/96)_^1_%EQU SP09(SA09+1)_^1_%EQU DB09(SP09*96)_^1_%BSS (DB09-*)_^1_%END_]_^__`PADHREQ CSY/ H56 P€1_%NAM ADHREQ_'DECK-ID H56 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR ADDS A MAXIMUM OF 8_^1*_'HEXADECIMAL NUMBERS._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_(ADH,NUMBER 1,NUMBER 2,...NUMBER 8(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT ADHREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F€€4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_€€^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1€€_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1ADHREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENA 0_,INITIALIZE ACCUMULATION_^1_%STA* ADHNUM_^1_%ENA 8_,INITIALIZE TO GET 8 FIELDS_^1_%STA* ADHFLD_^1ADH001 €€ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ ADH002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ ADH002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ ADH002-*-1_#SKIP YES_^1_%ENQ 4_-NO,PRINT FORMAT INCORRECT_^1_%JMP* (EXTMSG)_'MESSAGE AND EXIT PROCESSOR._^1ADH002 ENA 3_,CONVERT FIELD TO HEX_^1€€_%RTJ* (EXTHAN)_^1ADHVAL 0_"0_^1_%LDA* ADHNUM_^1_%ADD* ADHVAL_^1_%STA* ADHNUM_^1_%LDQ* ADHFLD_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* ADHFLD_^1_%SQZ ADH003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* ADH001_^1ADH003 ENQ -1_+PRINT THE RESULT_^1_%ENA 4_-(NEG. Q = PRINT ONE HEX. NO.)_^1_%RTJ* (EXTHAN)_^1ADHNUM 0_"0_^1_%LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO)€ξ,Q_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_$STORAGE_^1ADHFLD 0_"0_,NO. OF REMAINING FIELD TO GET_^1_%SPC 5_^1*_]_^1_%EQU SA10(*/96)_^1_%EQU SP10(SA10+1)_^1_%EQU DB10(SP10*96)_^1_%BSS (DB10-*)_^1_%END_]_^__ξPSBHREQ CSY/ H57 P€1_%NAM SBHREQ_'DECK-ID H57 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR SUBTRACTS TWO HEXADECIMAL NUMBERS._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_(SBH,NUMBER 1,NUMBER 2(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT SBHREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),€€NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOE€€RR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_]_^1*****_€€(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1SBHREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENA 2_,INITIALIZE TO GET 2 FIELDS_^1_%STA* SBHFLD_^1SBH001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1€€_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ SBH002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ SBH002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ SBH002-*-1_#SKIP YES_^1_%ENQ 4_,ILLEGAL CHAR. PRINT FORMAT INCORRECT_^1_%JMP* (EXTMSG)_'MESSAGE AND EXIT PROCESSOR_^1SBH002 ENA 3_,CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1SBHVAL 0_"0_^1_%LDA* SBHVAL_'SAVE FIELD_^1_%LDQ* SBHF€€LD_^1_%STA* SBHNUM-1,Q_^1_%INQ -1_+DECREMENT FIELD NO._^1_%STQ* SBHFLD_^1_%SQZ SBH003-*-1_#SKIP IF ALL FIELDS OBTAINED_^1_%JMP* SBH001_^1SBH003 LDA* SBHNUM+1_$SUBTRACT FIELDS AND SAVE_^1_%SUB* SBHNUM_(FOR TYPE-OUT_^1_%STA* SBH004_^1_%ENQ -1_^1_%ENA 4_^1_%RTJ* (EXTHAN)_$TYPE VALUE_^1SBH004 0_"0_^1_%LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_€]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1SBHFLD 0_"0_,NO. OF REMAINING FIELDS TO GET_^1SBHNUM BZS SBHNUM(2)_#STORAGE FOR THE TWO FIELDS_^1_%SPC 5_^1*_]_^1_%EQU SA11(*/96)_^1_%EQU SP11(SA11+1)_^1_%EQU DB11(SP11*96)_^1_%BSS (DB11-*)_^1_%END_]_^__PALCREQ CSY/ H58 P€1_%NAM ALCREQ_'DECK-ID H58 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_$THIS PROCESSOR ALLOCATES SCRATCH AREA IN_^1*_$ALLOCATABLE CORE. THE REQUEST PRIORITY HAS THE_^1*_$FOLLOWING FORMAT._^1*_*GEN,LENGTH,REQUEST,PRIORITY(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT ALCREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F€€4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_€€^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1€€_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU ASMOD($1000) ASCII MODE OUTPUT_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1A€€LCREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_$GET LIST LOGICAL UNIT_^1_%ADD* MODE_)+ MODE (ASCII) CODE_^1_%STA* OTLU_^1_%SPC 1_^1_%ENA 2_^1_%STA* GENFLD_^1_%ENQ 4_,SET TO GET 4 CHAR. FIELD_^1GEN001 ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_€€^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ GEN002-*-1_$$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ GEN002-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ GEN002-*-1_#SKIP YES_^1GEN004 ENQ 4_,OUTPUT FORMAT INCORRECT MSG._^1GENX04 JMP* (EXTMSG)_%AND EXIT PROCESSOR_^1GEN002 ENA 3_,CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1GENVAL 0_"0_^1_%LDA* GENVAL_'STORE FIELD_^1_%LDQ* GENFLD_€€^1_%STA* GENRPL-1,Q_^1_%INQ -1_^1_%STQ* GENFLD_^1_%SQZ GEN003-*-1_^1_%ENQ 1_,SET TO GET 1 CHAR. FIELD_^1_%JMP* GEN001_^1GEN003 LDA* GENRPL_'IS REQUEST PL GREATER THAN_^1_%SUB- THREE_)TWO (TO AVOID ANY DIFFICULTIES)_^1_%SAP GEN005-*-1_#SKIP YES_^1_%JMP* GEN004_(GO TO OUTPUT MSG._^1GEN005 LDA* GENPAR_'PUT REQUEST PRIORITY_^1_%AND =N$FF0F_'INTO CALL_^1_%ALS 12_^1_%EOR* GENRPL_^1€€_%ALS 4_^1_%STA* GENPAR_^1_%LDA* GENLTH_'PUT LENGTH INTO CALL_^1_%STA* GENPAR+4_^1_%RTJ- (AMONI)_%ALLOCATE CORE_^1GENPAR ADC $1500+CHRSLV_^1_%ADC GEN006-GENPAR_^1_%0_"0_^1_%0_"0_^1_%0_"0_^1_%JMP- (ADISP)_^1GEN006 SQP GEN007-*-1_"SKIP IF ALLOCATION MADE_^1_%ENQ 8_-OUTPUT NO CORE AVAILABLE_^1_%JMP* GENX04_^1GEN007 STQ* GENLTH_'SAVE STARTING LOCATION_^1_%ADQ* GENPAR+4_^1_%INQ -1€€_+DECREASE BY 1 FOR CORRECT ADDRESS_#PSR 1071_^1_%ENA 6_,CONVERT LAST LOCATION_^1_%RTJ* (EXTHAN)_$TO ASCII_^1_%ADC GENLST-*_^1_%LDQ* GENLTH_^1_%ENA 6_,CONVERT STARTING LOCATION_^1_%RTJ* (EXTHAN)_#TO ASS_^1_%ADC GENSTR-*_^1_%RTJ- (AMONI)_%OUTPUT MSG._^1GENPR1 ADC $500+CHRSLV_^1_%ADC GEN008-GENPR1_^1_%0_"0_^1OTLU_!NUM 0_,LOGICAL UNIT (TO BO FILLED)_^1_%ADC GENMLG_^1_%ADC GEN€€MSG-GENPR1_^1_%JMP- (ADISP)_^1MODE_!ADC ASMOD_^1GEN008 LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_$STORAGE_^1GENFLD 0_"0_,NO. OF REMAINING FIELDS TO GET_^1GENRPL 0_"0_,REQUEST PRIORITY LEVEL_^1GENLTH 0_"0_,LENGTH OF REQUEST_^1GENRP2 0_"0_,REQUEST PRIORITY LEVEL_^1*_$MESSAGE SKELETON_^1_%0_"0€V_,(FOR BUFFERING)_^1GENMSG NUM $A0D_)(CARRIAGE RETURN)_^1_%ALF 10,CORE ALLOCATED FROM_^1GENSTR 0_"0_,STARTING LOCATION_^1_%0_"0_^1_%ALF 2, TO_^1GENLST 0_"0_,LAST LOCATION_^1_%0_"0_^1_%NUM $A0D_)(CR)_^1_%EQU GENMLG(*-GENMSG)_^1_%SPC 5_^1*_]_^1_%EQU SA12(*/96)_^1_%EQU SP12(SA12+1)_^1_%EQU DB12(SP12*96)_^1_%BSS (DB12-*)_^1_%END_]_^__VPRELREQ CSY/ H59 P€1_%NAM RELREQ_'DECK-ID H59 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR RELEASES CORE STARTING AT THE_^1*_%LOCATION SPECIFIED. THE REQUEST HAS THE_^1*_%FOLLOWING FORMAT._^1*_(REL,START OF CORE TO BE RELEASED_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT RELREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMON€€I($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" EN€€TRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER€€"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1RELREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENQ 4_,GET ONLY FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_^1_%ENA 3_,CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1RELVAL 0_€€"0_^1_%LDA* RELVAL_'STORE LOCATION FOR_^1_%SAM REL001-*-1_#SKIP ILLEGAL ADD._^1_%STA* RELSTR_(RELEASE_^1_%RTJ- (AMONI)_^1_%NUM $1800_^1RELSTR 0_"0_^1_%ENQ 2_^1_%JMP* (EXTMSG),Q_^1REL001 ENQ 4_,OUTPUT MSG AND_^1_%JMP* (EXTMSG)_%EXIT PROCESSOR_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1_%SPC 5_^1*_]_^1_%EQU SA13(*/96)_^1_%EQU SP13(SA13+1)_^1_%EQU DB13(S€(P13*96)_^1_%BSS (DB13-*)_^1_%END_]_^__(PDACREQ CSY/ H60 P€1_%NAM DACREQ_'DECK-ID H60 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR DUMPS A MAP OF ALLOCATABLE CORE._^1*_%THE MAP IS OBTAINED UNDER INTERRUPT LOCK-OUT_^1*_%AT THE PRIORITY LEVEL OF ODP. THE REQUEST HAS_^1*_%THE FOLLOWING FORMAT._^1*_(DAC(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT DACREQ_^1_%SPC 1_^€€1*_1E X T E R N A L_^1_%EXT LVLSTR_^1_%EXT LEND_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET €€FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(1€€2)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU ASMOD($1000) €€ ASCII MODE OUTPUT_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DACREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%TRA Q_^1_%LDA- HANDLE,Q_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- COMOLU,Q_$GET COMMENT LOGICAL UNIT_^1_%ADD* MODE_)+ MODE (ASCII) CODE_^1_%STA* OTLU_^1_%SPC 2_^1_'ENQ 15_*SET CORE INDEX TO START OF_^1_%LDA+ LVLST€€R,Q_%AVAILABLE CORE_^1_%STA- I_^1_%LDA+ LEND_)GET LAST AVAILABLE CORE LOC._^1_%STA* DACLP1_^1_%CLR Q_,INITIALIZE PIECE STORE INDEX_^1_%IIN 0_,IHIBIT INTERRUPTS DURING SNAP SHOT_^1DAC001 LDA- I_,STORE CORE INDEX AS START_^1_%STA* DACTBL,Q_%OF PIECE_^1_%LDA- (ONE),I_%IS THIS PIECE OF CORE BEING USED_^1_%SUB- I_^1_%INA -2_^1_%SAN DAC002-*-1_#SKIP NO_^1_%LDA- (ZERO),I_$GET LENGTH O€€F PIECE_^1_%JMP* DAC003_^1DAC002 ENA -1_+GET * FLAG TO INDICATE PIECE EMPTY_^1DAC003 STA* DACTBL+1,Q_"STORE LENGTH OR FLAG FOR MSG._^1_%INQ 2_,INCREMENT PIECE STORE INDEX BY 2_^1_%LDA* DACMXP_'IS PIECE INDEX=MAX._^1_%AAQ A_-(STORAGE FOR SNAP SHOT FULL)_^1_%SAP DAC005-*-1_#SKIP YES_^1_%LDA- I_,ADD LENGTH OF PIECE TO CORE_^1_%ADD- (ZERO),I_%INDEX_^1_%STA- I_^1_%SUB* DACLP1_'IS TH€€IS END OF ALLOCATABLE CORE_^1_%SAP DAC004-*-1_#SKIP YES_^1_%JMP* DAC001_^1DAC004 LDA- I_,STORE END OF ALLOCATABLE CORE_^1_%INA -1_,FOR MSG._^1_%STA* DACTBL,Q_^1_%ENA -2_+STORE END FLAG_^1_%STA* DACTBL+1,Q_^1_%INQ 2_,BUMP PIECE STORE INDEX_^1DAC005 STQ* DACSTO_'SAVE IT_^1_%EIN 0_,RESTORE INTERRUPTS_^1*_$BUILD MESSAGE TO PRINT MAP_^1_%CLR Q_,INITIALIZE MSG. STORE INDEX_^1_%STQ*€€ DACMSX_(AND PIECE REMOVAL INDEX_^1_%STQ* DACREM_^1DAC006 LDA* DACMSX_'CALC. RELATIVE ADDRESS FOR_^1_%ADD* DACMR1_(HEXASC CALL_^1_%STA* DAC007_^1_%LDQ* DACTBL,Q_$GET START OF PIECE_^1_%ENA 6_^1_%RTJ* (EXTHAN)_$CONVERT ASC AND STORE_^1DAC007 0_"0_-IN MSG._^1_%RAO* DACMSX_'BUMP MSG. STORE BY 2_^1_%RAO* DACMSX_^1_%LDQ* DACREM_'IS NEXT WORD LENGTH OF PIECE_^1_%LDQ* DACTBL+1,Q_^1_%SQP €€ DAC009-*-1_#SKIP YES_^1_%INQ 1_,IS IT * FLAG_^1_%SQZ DAC008-*-1_#SKIP YES_^1_%JMP* DAC011_^1DAC008 LDA =N$A0D_'PUT CR AND ASTERISK INTO_^1_%LDQ* DACMSX_(MSG._^1_%STA* DACMSG,Q_^1_%INQ 1_^1_%ENA $2A_+(ASTERISK=$2A)_^1_%STA* DACMSG,Q_^1_%INQ 1_^1_%STQ* DACMSX_^1_%JMP* DAC011_^1DAC009 LDA =N$2020_%PUT SPACE INTO MSG._^1_%LDQ* DACMSX_^1_%STA* DACMSG,Q_^1_%RAO* DACMSX_^1_%LDA* D€€ACMSX_'CALC. RELATIVE ADDRESS FOR_^1_%ADD* DACMR2_(HEXASC CALL_^1_%STA* DAC010_^1_%LDQ* DACREM_'GET LENGTH_^1_%LDQ* DACTBL+1,Q_^1_%ENA 6_,CONVERT LENGTH TO ASCII_^1_%RTJ* (EXTHAN)_^1DAC010 0_"0_^1_%RAO* DACMSX_^1_%RAO* DACMSX_^1DAC011 LDA* DAC008+1_$PUT CR RETURN INTO MSG._^1_%LDQ* DACMSX_^1_%STA* DACMSG,Q_^1_%RAO* DACMSX_^1_%LDA* DACREM_'INCREASE REMOVE INDEX_^1_%INA 2_-BY 2_^1_€€%STA* DACREM_^1_%TRA Q_^1_%SUB* DACSTO_'IS REMOVE INDEX=PIECE INDEX_^1_%SAZ DAC012-*-1_#SKIP YES (DONE)_^1_%JMP* DAC006_^1DAC012 LDA* DACMSX_'CALC. LENGTH OF MSG._^1_%INA 12_^1_%STA* DACPAR+4_^1_%RTJ- (AMONI)_%OUTPUT MSG._^1DACPAR ADC $500+CHRSLV_^1_%ADC DAC013-DACPAR_^1_%0_"0_^1OTLU_!NUM 0_,LOGICAL UNIT (TO BO FILLED)_^1_%0_"0_^1_%ADC DACSKL-DACPAR_^1_%JMP- (ADISP)_^1DAC013€€ LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1MODE_!ADC ASMOD_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_]_^1*_$CONSTANTS_^1DACLP1 0_"0_,LAST LOC. PLUS 1 OF ALLOC. CORE_^1DACTBL BZS DACTBL(18)_"TEMPORARY STORAGE FOR SNAP SHOT_^1DACMXP NUM -18_*MAX. PIECE STORE INDEX_^1DACSTO 0_"0_,PIECE STORE INDEX_^1DACREM 0_"0_,PIECE REMOVE INDEX€€_^1DACMR1 ADC DACMSG-DAC007 REL. ADDRESSING FOR HEXASC CALL_^1DACMSX 0_"0_,MSG. STORE INDEX_^1DACMR2 ADC DACMSG-DAC010 REL. ADDRESSING FOR HEXASC CALL_^1*_]_^1*_$MESSAGE SKELETON_^1_%0_"0_,(FOR BUFFERING)_^1DACSKL NUM $A0D_)(CR)_^1_%ALF 10,ALLOCATABLE CORE MAP_^1_%NUM $A0D_^1DACMSG 0_"0_^1_%SPC 5_^1*_]_^1_%EQU SA14(*/96)_^1_%EQU SP14(SA14+1)_^1_%EQU DB14(SP14*96)_^1_%BSS €(DB14-*)_^1_%END_]_^__PPTHREQ CSY/ H61 P€1_%NAM PTHREQ_'DECK-ID H61 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR PRINTS THE LOCATION AND THE_^1*_%FIRST 2 WORDS OF THE REQUESTS ON A THREAD,_^1*_%UP TO 10 REQUESTS,AT THE LEVEL OF ODP._^1*_%THE REQUEST HAS THE FOLLOWING FORMAT._^1*_(PTH,LOCATION OF TOP OF THREAD,BASE(CR)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A€€ M E_^1_%ENT PTHREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)€€_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(1€€6)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU ASMOD($1000) ASCII MODE OUTPUT_^1_%SPC 2€€_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1PTHREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_$GET LIST LOGICAL UNIT_^1_%ADD* MODE_)+ MODE (ASCII) CODE_^1_%STA* OTLU1_^1_%STA* OTLU2_^1_%SPC 1_^1_%CLR 0_,INITIA€€LIZE BASE TO ZERO_^1_%STA* PTHBSE_^1_%ENA 2_,SET TO GET 2 FIELDS_^1_%STA* PTHFLD_^1PTH001 ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_$GET FIELD_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ PTH002-*-1_#SKIP YES (ZERO)_^1_%SUB- LPMSK+8_^1_%SAZ PTH002-*-1_#SKIP YES ($FF)_^1_%ADD- LPMSK+8_^1_%INA -COMMA_^1_%SAZ PTH002-*-1_#SKIP YES (COMMA)_^1PTH01A ENQ 4_€€,NO,OUTPUT FORMAT INCORRECT_^1_%JMP* (EXTMSG)_*MSG._^1PTH002 ENA 3_,CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1PTHVAL 0_"0_^1_%LDA* PTHVAL_'SAVE FIELD_^1_%LDQ* PTHFLD_^1_%STA* PTHBSE-1,Q_^1_%INQ -1_+DECREMENT FIELD COUNTER_^1_%STQ* PTHFLD_^1_%SQZ PTH003-*-1_#SKIP IF DONE (GOT 2 FIELDS)_^1_%JMP* PTH001_^1PTH003 LDA* PTHBSE_'ADD FIELDS TO GET FINAL_^1_%ADD* PTHTOP_(ABS. LOC. OF TOP OF THR€€EAD_^1PTH03A STA- I_^1_%ENQ 0_,INITIALIZE THREAD ENTRY COUNTER_^1_%IIN 0_,INHIBIT FOR SNAP SHOT_^1_%LDA- (I)_*IS TOP OF THREAD = END OF_^1_%INA 0_-THREAD_^1_%SAN PTH004-*-1_#SKIP NO_^1_%JMP* PTH006_(YES,GO TO TERMINATE_^1PTH004 LDA- (ZERO),I_$GET LOC. OF FIRST ENTRY_^1_%STA- I_^1PTH005 LDA- I_,GET LOCATION OF ENTRY_^1_%STA* PTHTBL,Q_^1_%LDA- (ZERO),I_$STORE WDS 1 AND 2 AND THRE€€AD_^1_%STA* PTHTBL+1,Q_^1_%LDA- (ONE),I_^1_%STA* PTHTBL+2,Q_^1_%LDA- (TWO),I_^1_%STA- I_,UPDATE FOR NEXT ENTRY,IF ANY_^1_%INQ 3_,BUMP THREAD ENTRY COUNTER_^1_%INA 0_,IS THIS END OF THREAD_^1_%SAZ PTH006-*-1_#SKIP YES_^1_%ENA -30_*HAVE TEN ENTRIES BEEN FOUND_^1_%AAQ A_-(MAX. ALLOWED)_^1_%SAZ PTH007-*-1_#SKIP YES_^1_%JMP* PTH005_'GO GET NEXT ENTRY_^1PTH006 ENA -0_+STORE EOT FL€€AG_^1_%STA* PTHTBL,Q_^1_%INQ 1_,BUMP ENTRY COUNTER_^1PTH007 EIN 0_,END OF SNAP SHOT_^1_%STQ* PTHCTR_'SAVE ENTRY COUNTER_^1_%RTJ- (AMONI)_%OUTPUT HEADING_^1PTHPRM ADC $500+CHRSLV_^1_%ADC PTH013-PTHPRM_^1_%0_"0_^1OTLU1 NUM 0_,LIST LOGICAL UNIT (TO BE FILLED)_^1_%ADC LHEADG_^1_%ADC PTHSKH-PTHPRM_^1_%JMP- (ADISP)_^1PTH013 ENA 0_,INITIALIZE INDEX TO SNAP_^1_%STA* PTHTCT_(SHOT T€€BL._^1PTH014 CLR A_,INITIALIZE MSG. INDEX_^1_%STA* PTHMSX_^1PTH008 LDA* PTHMSX_'SET-UP REL. LOC. IN HEXASC_^1_%ADD* PTHRML_(CALL FOR ENTRY OF DATA_^1_%STA* PTH009_(INTO MSG. SKELETON_^1_%LDQ* PTHTCT_'GET VALUE_^1_%LDQ* PTHTBL,Q_^1_%ENA 6_^1_%RTJ* (EXTHAN)_$CONVERT TO ASCII AND STORE IN SKEL._^1PTH009 0_"0_^1_%RAO* PTHMSX_'BUMP MSG. INDEX BY 2_^1_%RAO* PTHMSX_^1_%RAO* PTHTCT_'BUMP€€ SNAP SHOT INDEX_^1_%ENA $20_*PUT SPACE INTO MSG._^1_%LDQ* PTHMSX_^1_%STA* PTHMSG,Q_^1_%RAO* PTHMSX_'BUMP MSG INDEX BY 1_^1_%LDA* PTHTCT_'HAVE ALL VALUES BEEN ASSEM._^1_%SUB* PTHCTR_^1_%SAN PTH010-*-1_#SKIP NO_^1_%RTJ* PTHSR_(ADD CR AND OUTPUT LINE_^1_%LDQ* BASE_)EXIT TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1OTLU_!NUM 0_,LOGICAL UNIT (TO BO FILLED)_^1PTH010 LDA* PTHMSX_€€'HAS ONE LINE BEEN ASSEM._^1_%INA -9_^1_%SAN PTH011-*-1_#SKIP NO_^1_%RTJ* PTHSR_(ADD CR AND OUTPUT LINE_^1_%JMP* PTH014_'RETURN FOR ANOTHER LINE_^1PTH011 JMP* PTH008_'CONTINHUE LINE_^1MODE_!ADC ASMOD_^1*_]_^1*_$SR TO ADD CR AND OUTPUT_^1*_%ONE LINE_^1*_]_^1PTHSR 0_"0_^1_%LDA* PTHSKH_'ADD CR_^1_%LDQ* PTHMSX_^1_%STA* PTHMSG,Q_^1_%INQ 1_^1_%STQ* PTHPAR+4_$STORE MSG. LENGTH_^1_%RT€€J- (AMONI)_%OUTPUT MSG._^1PTHPAR ADC $500+CHRSLV_^1_%ADC PTH012-PTHPAR_^1_%0_"0_^1OTLU2 NUM 0_,LIST LOGICAL UNIT (TO BE FILLED)_^1_%0_"0_^1_%ADC PTHMSG-PTHPAR_^1_%JMP- (ADISP)_^1PTH012 JMP* (PTHSR)_%RETURN TO CALLER_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_]_^1*_$CONSTANTS_^1PTHBSE 0_"0_,BASE_^1PTHTOP 0_"0_,RELATIVE ADDRESS OF TOP OF THREAD_^1PTHFLD €€0_"0_,NO. OF REMAINING FIELDS TO GET_^1PTHCTR 0_"0_,TABLE ENTRY COUNTER_^1PTHTCT 0_"0_,TABLE REMOVE COUNTER_^1PTHMSX 0_"0_,MSG. INDEX_^1PTHRML ADC PTHMSG-PTH009 RELATIVE BASE FOR HEXASC CALL_^1PTHTBL BZS PTHTBL(31)_"TABLE TO STORE ENTRIES ON THREAD_^1*_$MESSAGE SKELETONS_^1_%0_"0_,(FOR BUFFERING)_^1PTHSKH NUM $A0D_)MSG. SKELETON FOR HEADING_^1_%ALF 7,LOC. WD1 WD2_^1_%NUM $A0D€ή_^1_%EQU LHEADG(*-PTHSKH)_^1*_]_^1PTHMSG BZS PTHMSG(10)_"MSG. FOR DATA TO BE ASSEM. BY PROG._^1_%BZS (20)_^1_%SPC 5_^1*_]_^1_%EQU SA15(*/96)_^1_%EQU SP15(SA15+1)_^1_%EQU DB15(SP15*96)_^1_%BSS (DB15-*)_^1_%END_]_^__ήPMTRREQ CSY/ H62 P€1_%NAM MTRREQ_'DECK-ID H62 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS PROCESSOR HANDLES ALL MAG TAPE MOTION REQUESTS._^1*_%THE FOLLOWING REQUESTS ARE PROCESSED BY THIS_^1*_'PROCESSOR._^1*_%ALL VALUES IN THESE REQUESTS ARE IN DECIMAL_^1*_(ADF,LU,NO. OF FILES(CR)_^1*_(BSF,LU,NO. OF FILES(CR)_^1*_(ADR,LU,NO. OF RECORDS(CR)_^1*_(BS€€R,LU,NO. OF RECORDS(CR)_^1*_(WEF,LU,NO. OF FILES(CR)_^1*_(REW,LU(CR)_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT MTRREQ_^1_%ENT ADFREQ_'16. ADVANCE FILE_^1_%ENT BSFREQ_'17. BACKSPACE FILE_^1_%ENT ADRREQ_'18. ADVANCE RECORD_^1_%ENT BSRREQ_'19. BACKSPACE RECORD_^1_%ENT WEFREQ_'20. WRITE END OF FILE_^1_%ENT REWREQ_'21. REWIND TAPE_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EX€€T NUMLU_^1_%EXT CHRSFG_^1_%EXT HANDLE_^1_%EXT OFF_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE€€)_^1_%EQU BHAN(1)_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU €€SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU MTCLAS(1)_^1_%SPC 2_^1*_]_^1*****€€_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1MTRREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%EQU ADFREQ(MTRREQ)_^1_%EQU BSFREQ(MTRREQ)_^1_%EQU ADRREQ(MTRREQ)_^1_%EQU BSRREQ(MTRREQ)_^1_%EQU WEFREQ(MTRREQ)_^1_%EQU REWREQ(MTRREQ)_^1_%STA- I_^1_%LDA- BHAN,I_'GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1*_]_^€€1_%SPC 1_^1_%ENQ 2_,GET L.U. FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_^1_%RTJ* CCCK_^1_%STA* MTRPR1+3_^1_%SUB* MAXLU_^1_%INA -1_N**MSOS4.0**_^1_%SAM MTR000_J**MSOS4.0**_^1_%ENQ 9_O**MSOS4.0**_^1_%JMP* (EXTMSG)_%OUTPUT ILLEGAL LU MSG._^1MTR000 ENQ 4_,GET NO. OF FILES(RECORDS) FIELD_^1_%ENA 2_^1_%RTJ* (EXTHAN)_^1_%RTJ* CCCK_^1_%SUB- $E_+$0FFF. CHECK FOR MAXIMUN TIMES_#**MSOS4.0**_^1€€_%SAZ MTR00A_'SKIP IF TIMES=MAXIMUM._,**MSOS4.0**_^1_%SAM MTR00A_'SKIP IF TIMES IS LT MAXIMUM._%**MSOS4.0**_^1_%JMP* MTRERR_^1MTR00A LDA* MTRN_L**MSOS4.0**_^1_%SAN MTR001_'IF NO. OF TIMES = 0, SET TO ONE._!**MSOS4.0**_^1_%ENA 1_^1MTR001 STA* MTRN_^1_%LDA* BASE_^1_%STA- I_^1MTR005 LDQ- PROG2,I_%GET INDEX TO MOTION CONTROL CODE_^1_%INQ -16_+FROM MNEMONIC INDEX-16_^1_%STQ* PROTYP€€_'SAVE COMMAND TYPE (-16) INDEX_^1MTREP LDA* MTRCTW,Q_$PICK UP MOTION CONTROL CHARACTER. **MSOS4.0**_^1_%STA* MTRPR1+4_$STORE IN TAPE MOTION REQUEST_^1_%RTJ- (AMONI)_%TAPE MOTION REQUEST FOR_^1MTRPR1 ADC $1D00+CHRSLV*$10+CHRSLV_$3 OR LESS EXECTIONS_^1_%ADC MTR006-MTRPR1_^1_%ADC 0,0,0_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1MAXLU ADC NUMLU_^1PROTYP NUM 0_^1_%SPC 2_^1MTR006 LDA*€€ MTRN_)CHECK IF ALL RECORD/FILE BEEN DONE_^1_%INA -1_^1_%SAZ TOEXIT_'DONE, SKIP_^1_%SAM TOEXIT_'DONE, SKIP_^1_%STA* MTRN_^1_%LDA CHRSFG_'CHECK FOR DX_^1_%SAZ TOOFF_^1_%LDQ* PROTYP_'RECALL COMMAND TYPE_^1_%JMP* MTREP_(TO REPEAT_^1TOEXIT LDQ* BASE_)EXIT TO 'SOMMOR'_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 2_^1*_1EXIT TO 'OFF'_^1TOOFF LDA* OTB_*GENERATE 'OFF' ADDRESS_^1_%S€€UB* OTB+1_^1_%ADD* EXTHAN_^1_%TRA Q_^1_%JMP- (ZERO),Q_$TO 'OFF'_^1OTB_"ADC OFF_*0. 'OFF' ENTRY_^1_%ADC HANDLE_'1. 'HANDLE' ENTRY_^1*_]_^1*_$SR TO CHECK FOR ACCEPTABLE CONTROL CHARACTER_^1*_%AND CONVERT TO DECIMAL._^1*_]_^1CCCK_!0_"0_^1_%LDA- FIELD,I_%IS CONTROL CHAR.= COMMA,_^1_%SAZ CCCK01-*-1_#$FF OR NONE_^1_%SUB- LPMSK+8_^1_%SAZ CCCK01-*-1_#SKIP YES_^1_%ADD- LPMSK+8_^1_%INA €€ -COMMA_^1_%SAZ CCCK01-*-1_#SKIP YES_^1MTRERR ENQ 4_-OUTPUT ERROR MSG._^1_%JMP* (EXTMSG)_^1CCCK01 ENA 5_,CONVERT ASCII DEC. TO BINARY_^1_%RTJ* (EXTHAN)_^1_%STA* MTRN_L**MSOS4.0**_^1_%JMP* (CCCK)_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1*_$CONSTANTS_^1MTRN_!0_"0_,NO. OF FILES OR RECORDS_^1*_*TABLE OF MOTION CONTROL CODES._2**MSOS4.0**_^1MTRCTW NUM $5000_€.(0 ADVANCE FILE._^1_%NUM $6000_(1 BACKSPACE FILE._^1_%NUM $7000_(2 ADVANCE RECORD._^1_%NUM $1000_(3 BACKSPACE RECORD._^1_%NUM $2000_(4 END OF FILE._^1_%NUM $3000_(5 REWIND TAPE._^1_%SPC 5_^1*_]_^1_%EQU SA16(*/96)_^1_%EQU SP16(SA16+1)_^1_%EQU DB16(SP16*96)_^1_%BSS (DB16-*)_^1_%END_]_^__.PMSDREQ CSY/ H63 P€1_%NAM MSDREQ_'DECK-ID H63 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_[**MSOS4.0**_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_:MSD_=**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR PRINTS DATA FROM THE DISK_-**MSOS4.0**_^1*_*IN HEX, ASCII, OR DECIMAL FORMAT_0**MSOS4.0**_^1*_[**MSOS4.0**_^1****€€***********************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1_%SPC 2_^1*_]_^1******_,INPUT FORMAT_!:_^1*_]_^1*_*MSD,SSMSB,SSLSB,ESMSB,ESLSB,M_^1*_]_^1*_]_^1*_8SSMSB = START SECTOR (HEX) MSB_^1*_8SSLSB = START SECTOR (HEX) LSB_^1*_8ESMSB = END SECTOR (HEX) MSB_^1*_8ESLSB = END SECTOR (HEX) LSB_^1*_8M_#= MODE --- A FOR ASCII_^1*_IH FOR HEX._^1*_II DECIMAL€€._^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT MSDREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT OFF_^1_%EXT HANDLE_^1_%EXT CHRSFG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ON€€E(3),TWO($24)_^1_%EQU TEN($46)_^1_%SPC 1_^1*_1SYSTEM SUBROUTINE INDEX_^1_%EQU GETFLD(2)_#"GETFLD" -- GET A FIELD_^1_%EQU ASCHEX(3)_#"ASCHEX" -- ASC TO HEX. CONVERSION_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT -€€-- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PRO€€GRAM_^1_%EQU KCHARA($41)_!CHARACTER A_^1_%EQU KCHARH($48)_,H_^1_%EQU KCHARI($49)_,I_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU ASMOD($1000) ASCII MODE OUTPUT_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_€€]_^1_%SPC 2_^1MSDREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- BHAN,I_'GET "HANDLE" ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_$GET LIST LOGICAL UNIT_^1_%ADD* MODE_)+ MODE (ASCII) CODE_^1_%STA* OTLU_^1_%LDA- NEWMLU,I_$SET UP MM LU_^1_%STA* MSLU_^1_%SPC 1_^1_%JMP* MSDITL_'JUMP TO INITIALIZE REQUEST_^1MSD007 LDA*€€ STRSEC_'SET UP MM ADD. FOR I/O CALL_^1_%STA* MMSADR-1_^1_%LDA* STRLSB_^1_%STA* MMSADR_^1*_]_^1*****_-CHECK FOR LSB LESS THAN/EQUAL TO $7FFF_^1*_]_^1_%SAM HILSB_(SKIP ON ERROR_^1_%LDA* LSTLSB_'CHECK THE ENDING LSB_^1_%SAP 1_,OK, SKIP_^1HILSB JMP* MSDFI_(TO PRINT FORMAT ERROR_^1_%RTJ- (AMONI)_%READ ONE SECTOR_3**MSOS4.0**_^1MSD008 ADC $900+CHRSLV_E**MSOS4.0**_^1_%ADC MSD009-MSD€€008_C**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1MSLU_!ADC MASSLU_J**MSOS4.0**_^1_%NUM 96_N**MSOS4.0**_^1_%ADC MMSBUF-MSD008_C**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1MMSADR 0_"0_O**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1MSD009 SQP MSD010_'SKIP IF NO I/O ERROR_.**MSOS4.0**_^1X_$LDQ* BASE_)EXIT (TO "IOERR")_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 2_^1*_]_^1MSD010 ENA STRSEC-ASECM€€L_^1_%STA* ASECML_^1_%ENQ 16+2_)SETUP FOR 2 WORDS (AND + BIAS OF 16)_^1_%ENA 4_,DUMP SECTOR ADDRESS_/**MSOS4.0**_^1_%RTJ* (EXTHAN)_^1ASECML ADC STRSEC-*_^1_%LDA* AHDFLG_'CHECK FOR TYPE OF DUMP_^1_%SAP MSD011_J**MSOS4.0**_^1_%JMP* ASCDMP_J**MSOS4.0**_^1MSD011 ENA 12_+SET LINE INDEX_4**MSOS4.0**_^1_%STA* MSDLN_K**MSOS4.0**_^1_%LDA* MSBADR_J**MSOS4.0**_^1_%STA* MSD013_J**MSOS4.0*€€*_^1MSD012 LDA* AHDFLG_J**MSOS4.0**_^1_%ENQ 24_+Q BIASED BY 16 TO INDICATE RELATIVE**MSOS4.0**_^1_%SAZ M01_^1_%ENA 7_,OUTPUT IN DECIMAL FORMAT_***MSOS4.0**_^1_%JMP* MSD030_J**MSOS4.0**_^1M01_"ENA 4_,OUTPUT IN HEX FORMAT_.**MSOS4.0**_^1MSD030 RTJ* (EXTHAN)_^1MSD013 ADC MMSBUF-*_H**MSOS4.0**_^1_%LDA* MSDLN_(CHECK IF LAST 8 WORDS_-**MSOS4.0**_^1_%INA -1_N**MSOS4.0**_^1_%SAZ MSD€€015_'SKIP IF YES_7**MSOS4.0**_^1_%STA* MSDLN_K**MSOS4.0**_^1_%JMP* MSD012_'PRINT ANOTHER LINE_0**MSOS4.0**_^1_%SPC 2_^1*_]_^1MSBADR ADC MMSBUF-MSD013_C**MSOS4.0**_^1STRSEC NUM 0,0,0,0_^1_%EQU STRLSB(STRSEC+1)_^1_%EQU LSTMSB(STRSEC+2)_^1_%EQU LSTLSB(STRSEC+3)_^1AHDFLG 0_"0_,TYPE OF DUMP FLAG_1**MSOS4.0**_^1MSDLN 0_"0_O**MSOS4.0**_^1DMPFLG 0_"0_O**MSOS4.0**_^1DMPADR ADC ASCBU€€F-MSD018_C**MSOS4.0**_^1MODE_!ADC ASMOD_^1_%SPC 2_^1MSD015 LDA* LSTLSB_'CHECK IF LAST SECTOR PRINTED_^1_%SUB* STRLSB_^1_%SAN MSD016_'SKIP IF NO_8**MSOS4.0**_^1_%LDA* LSTMSB_'LSB SECTORS DONE, CHECK IF MSB DEFINED_^1_%SUB* STRSEC_^1_%SAN MSD016_'SKIP MORE TO DO_^1MSDEXT LDQ* BASE_)EXIT_^1_%LDQ- SOMMOR,Q_$TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1MSD016 RAO* STRLSB_'INCREMENT SECTOR ADDRES€€S_^1_%LDA* STRLSB_^1_%SAP MSDX16_'SKIP, MORE ON LSB_^1_%AND- LPMSK+15_^1_%STA* STRLSB_'RESET LSB AND INCREMENT MSB_^1_%RAO* STRSEC_^1MSDX16 JMP* MSD007_J**MSOS4.0**_^1_%SPC 2_^1*_]_^1ASCDMP ENA 0_,ZERO OUT LINE COUNT_^1_%STA* MSDLN_^1_%LDA* DMPADR_J**MSOS4.0**_^1_%STA* DMPFLG_J**MSOS4.0**_^1MSD017 STA* MSD019_'SET ADDRESS OF BUFFER_-**MSOS4.0**_^1_%RTJ- (AMONI)_I**MSOS4.0**_^1MS€€D018 ADC $D00+CHRSLV_E**MSOS4.0**_^1_%ADC MSD020-MSD018_C**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1OTLU_!NUM 0_,LOGICAL UNIT (TO BO FILLED)_^1_%NUM 18_+NO. OF WORDS_^1MSD019 ADC ASCBUF-MSD018_C**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1MSD020 SQP MSD021_'SKIP IF NO I/O ERROR_.**MSOS4.0**_^1_%JMP* X_^1*_]_^1MSD021 LDA CHRSFG_'CHECK IF "DX"_^1_%SAN MSD21X_'NO, SKIP_^1_%LDA* OFTB€€+1_^1_%SUB* OFTB_)CALCULATE "OFF" ADDRESS_^1_%ADD* EXTHAN_^1_%TRA Q_^1_%JMP- (ZERO),Q_$TO "OFF"_^1_%SPC 1_^1OFTB_!ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF"_"ENTRY_^1_%SPC 1_^1*_]_^1MSD21X RAO* MSDLN_(INCREMENT LINE COUNT BY 1_^1_%LDA* MSDLN_(CHECK IF ALL 6 LINES BEEN PRINT_^1_%INA -6_^1_%SAZ CHDON_(YES, SKIP_^1_%LDQ* MSDLN_(CALCULATE CURRENT POSITION_^1_%QLS 4_1AN€€D INSERT 2-SPCE_^1_%LDA* ASCBUF_,(GET SPACE CODE)_^1_%STA* ASCBUF,Q_^1_%STA* ASCBUF+1,Q_^1_%LDA* MSD019_'ADJUST TO NEXT LINE_^1_%INA 16_^1_%JMP* MSD017_'TO REPEAT PRINTING_^1CHDON JMP* MSD015_'TO CHECK IF ALL SECTORS BEEN DONE_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1_%SPC 2_^1*_]_^1ASCBUF ALF 2,_^1_%EQU MMSBUF(*)_G**MSOS4.0**_^1_%SPC 2_^1*_[**MSOS4.0€€**_^1*_$THIS CODE WILL BE OVERLAYED WHEN INITIALIZING IS DONE **MSOS4.0**_^1MSDITL ENA 0_,ZERO OUT SECTOR PARAMETER COUNT_^1_%STA* COUNT_^1MSDPAR ENQ 4_,GET MM ADD._^1*_$GET ONE FIELD FROM REQUEST AND CONVERT TO HEX_(**MSOS4.0**_^1*_[**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_^1_%LDA- FIELD,I_%CONTROL CHAR. = NONE_^1_%SUB- LPMSK+8_^1_%SAN NOFF_)NO, SKIP_^1_%LDA* COUNT€€_(MAKE SURE ALL MM ADD. ARE IN_^1_%INA -3_^1_%SAN MSDFI_(FORMAT ERROR, GO_^1_%JMP* CHR001_'TO CONVERT LAST PARAMETER_^1NOFF_!LDA- FIELD,I_^1_%INA -COMMA_'CONTROL CHAR. = COMMA_-**MSOS4.0**_^1_%SAZ CHR001_'SKIP YES_:**MSOS4.0**_^1MSDFI ENQ 4_O**MSOS4.0**_^1_%JMP* (EXTMSG)_$FORMAT INCORRECT_^1CHR001 ENA 3_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_$CONVET FIELD TO HEX_^1MSDVAL NUM 0_O**M€€SOS4.0**_^1_%LDA* MSDVAL_J**MSOS4.0**_^1_%LDQ* COUNT_(SAVE IT ACCORDINGLY_^1_%STA* STRSEC,Q_^1_%INQ +1_+UPDATE INPUT COUNT AND CHECK IF ALL 4 PAR. IN_^1_%STQ* COUNT_^1_%INQ -4_^1_%SQZ MSD003_'YES, SKIP_^1MSDREP JMP* MSDPAR_^1_%SPC 2_^1COUNT NUM 0_^1_%SPC 2_^1*_]_^1MSD003 LDA- FIELD,I_%CHECK IF TERMINATOR =$FF_^1_%SUB- LPMSK+8_^1_%SAN 1_,NO, SKIP_^1_%JMP* MSDIX_(TO SET DEFAU€€LT MODE = H_^1_%ENQ 1_^1_%ENA GETFLD_'GET MODE CHARACTER_^1_%RTJ* (EXTHAN)_^1_%LDA- FIELD+3,I_^1_%AND- LPMSK+8_^1_%ENQ -1_^1_%INA -KCHARA_%CHECK IF IT IS 'A'_^1_%SAZ MSD03A_'YES, SKIP_^1_%INA -KCHARH+KCHARA_^1_%INQ 1_,CHECK FOR 'H'_^1_%SAZ MSD03A_'YES, SKIP_^1_%INQ 1_,CHECK FOR 'I'_^1_%INA -KCHARI+KCHARH_^1_%SAZ MSD03A_'YES, SKIP_^1_%JMP* MSDFI_(TO PRINT FORMAT ERROR_^1M€€SD03A STQ* AHDFLG_'-1 = ASCII, 0 = HEX, 1 = DECIMAL_!**MSOS4.0**_^1_%LDA- FIELD,I_^1_%SUB- LPMSK+8_%MAKE SURE NO MORE DATA_^1_%SAZ MSDIX_^1_%JMP* MSDFI_(FORMAT ERROR_6**MSOS4.0**_^1MSDIX ENA 0_,SET NUMBER OF WORDS TO SKIP_'**MSOS4.0**_^1_%STA- FIELD,I_)ON OUTPUT BUFFER_^1_%JMP MSD007_J**MSOS4.0**_^1*_[**MSOS4.0**_^1_%SPC 5_^1*_[**MSOS4.0**_^1_%EQU SA26(*/96)_F**MSOS4.0**_^1_%€pEQU SP26(SA26+1)_D**MSOS4.0**_^1_%EQU DB26(SP26*96)_C**MSOS4.0**_^1_%BSS (DB26-*)_H**MSOS4.0**_^1_%END_]_^__pPCLUREQ CSY/ H64 P€1_%NAM CLUREQ_'DECK-ID H64 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_[**MSOS4.0**_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_:CLU_=**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR CHANGES THE LOGICAL UNIT NUMBER OF_#**MSOS4.0**_^1*_*LISTABLE OUTPUT_A**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THE REQU€€EST HAS THE FOLLOWING FORMAT_0**MSOS4.0**_^1*_$CLU,LU(CR)_(LU = LOGICAL UNIT NUMBER OF NEW_"**MSOS4.0**_^1*_?LISTABLE OUTPUT TO BE USED **MSOS4.0**_^1*_?BY ODEBUG_2**MSOS4.0**_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT CLUREQ_^1_%SPC 2_^1*_1E X T E R N A L S_^1_%EXT LOG1A_^1_%EXT NUMLU_€€^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU M€€SG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU €€ BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1CLUREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENQ 2_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_$GET 2 CH€€AR. FIELD_^1_%ENA 5_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_$CONVERT ASCII DEC. TO BINARY_^1_%SAZ CLUERR-*-1_"SKIP IF ZERO (ILLEGAL LU)_)**MSOS4.0**_^1_%STA* CLU_M**MSOS4.0**_^1_%TRA Q_O**MSOS4.0**_^1_%LDQ+ LOG1A,Q_%Q = ADDRESS OF PHYS. DEV. TABLE_"**MSOS4.0**_^1_%SQZ CLUERR_'NO PHYS. DEV. TABLE_/**MSOS4.0**_^1_%LDA- 8,Q_*GET LU CLASS_6**MSOS4.0**_^1_%ARS 11_N**MSOS4.0**_^1_%AND- LPMSK€€+4_I**MSOS4.0**_^1_%SAZ CLU001_'SKIP IF CLASS NOT DEFINED_)**MSOS4.0**_^1_%INA -2_.CLASS 2 = MASS MEMORY_***MSOS4.0**_^1_%SAN CLU001_'SKIP IF LU OK_5**MSOS4.0**_^1CLUERR ENQ 9_O**MSOS4.0**_^1_%JMP* (EXTMSG)_$ILLEGAL LU_^1CLU001 LDA* CLU_M**MSOS4.0**_^1_%SUB* MAXLU_(CHECK IF LU EXCEEDS MAX_^1_%INA -1_N**MSOS4.0**_^1_%SAM CLU002_'SKIP IF NO_8**MSOS4.0**_^1_%JMP* CLUERR_'ILLEGAL€€ LU_8**MSOS4.0**_^1CLU002 LDA* CLU_M**MSOS4.0**_^1_%ENQ LISTLU_^1_%STA* (BASE),Q_$SET NEW LIST LU_^1_%LDQ* BASE_)EXIT TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1CLU_"NUM 0_,NEW LIST LU_7**MSOS4.0**_^1MAXLU ADC NUMLU_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1_%SPC 5_^1*_[**MSOS4.0**_^1_%EQU SA27(*/96)_^1_%EQU SP27(SA27+1)_^1_%EQU DB27(SP27*96)_€ ^1_%BSS (DB27-*)_^1_%END_]_^__ PWCDREQ CSY/ H65 P€1_%NAM WCDREQ_'DECK-ID H65 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1***************************************************************MSOS4.0**_^1*_[**MSOS4.0**_^1*_1WCD_*RCD_8**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$THIS PROCESSOR TRANSFERS DATA FROM CORE TO DISK (RCD) **MSOS4.0**_^1*_*OR DISK TO CORE (RDC)_;**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$BOTH HAVE TH€€E SAME FORMAT_<**MSOS4.0**_^1*_$WCD,SECTOR,WORD IN SECTOR,CORE LOC.,NO. WORDS(CR)_#**MSOS4.0**_^1*_$RCD,SECTOR,WORD IN SECTOR,CORE LOC.,NO. WORDS(CR)_#**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$INPUT IS ASSUMED TO BE HEX EXCEPT FOR NO. OF WORDS_"**MSOS4.0**_^1*_*WHICH IS ASSUMED TO BE DECIMAL_2**MSOS4.0**_^1*_[**MSOS4.0**_^1***************************************************************MSOS€€4.0**_^1*_[**MSOS4.0**_^1*_[**MSOS4.0**_^1_%SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT WCDREQ_^1_%ENT RCDREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($4€€6)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_€€^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU FETMM(9)_$"FETMM"--GET MM ADD. SUB. INDEX_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!€€INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1WCDREQ STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%EQU RCDREQ(WCDREQ)_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ROUTINE ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%LDA- $C2_*S€€ET UP MM LU FOR MM ADD. SIZE CHECK_^1_%STA* MSB_^1_%ENA FETMM_^1_%ENQ 1_^1_%RTJ* (EXTHAN)_$TO EXTRACT MM ADD. AND CONVERT_^1_%ADC MSB-*_^1_%LDA- FIELD,I_%GET "FIELD"_^1_%INA -COMMA_J**MSOS4.0**_^1_%SAZ RCDOK1_J**MSOS4.0**_^1RCDFI ENQ 4_,FORMAT INCORRECT_2**MSOS4.0**_^1_%JMP* (EXTMSG)_^1RCDOK1 LDQ* MSB_*SET UP MM ADDRESS FOR READ/WRITE_^1_%LDA* LSB_^1_%STA* RCDLSB_J**MSOS4.0*€€*_^1_%STQ* RCDMSB_J**MSOS4.0**_^1_%ENQ 4_,GET CORE LOCATION_1**MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_^1_%ENA 3_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_^1RCDTMP NUM 0_O**MSOS4.0**_^1_%LDA- FIELD,I_%GET "FIELD"_^1_%INA -COMMA_J**MSOS4.0**_^1_%SAZ RCDOK3_J**MSOS4.0**_^1_%JMP* RCDFI_K**MSOS4.0**_^1RCDOK3 LDA* RCDTMP_J**MSOS4.0**_^1_%STA* RCDCOR_J**MSOS4.0**_^1_%ENQ 4_,GET NU€€MBER OF WORDS_^1_%ENA 2_O**MSOS4.0**_^1_%RTJ* (EXTHAN)_^1_%ENA 3_,CONVERT TO HEX. FROM ASCII_^1_%RTJ* (EXTHAN)_^1NW_#NUM 0_^1_%LDA* NW_^1_%SAP RC02_)MUST BE POSITIVE_^1_%JMP* RCDFI_K**MSOS4.0**_^1RC02_!STA* RCDNUM_J**MSOS4.0**_^1_%LDA- FIELD,I_%GET "FIELD"_^1_%INA -COMMA_J**MSOS4.0**_^1_%SAN RC03_^1_%JMP* RCDFI_K**MSOS4.0**_^1RC03_!RTJ* RCDABS_J**MSOS4.0**_^1RCDABS NOP 0_O**€€MSOS4.0**_^1_%LDA* RCDABS_J**MSOS4.0**_^1_%ADD* RCDDIF_J**MSOS4.0**_^1_%STA* RCDCAL+1_H**MSOS4.0**_^1_%LDA- PROG2,I_%GET "PROG2"_^1_%INA -30_*RCD = 0, RDC = 1 NOW_.**MSOS4.0**_^1_%SAN RDCPRO_J**MSOS4.0**_^1_%LDA* RCDWC_(WRITE ON DISK_5**MSOS4.0**_^1_%STA* RCDCAL_J**MSOS4.0**_^1_%JMP* RCD001_J**MSOS4.0**_^1RDCPRO LDA* RDCRC_(READ FROM DISK_4**MSOS4.0**_^1_%STA* RCDCAL_J**MSOS4.0**€€_^1RCD001 RTJ- (AMONI)_I**MSOS4.0**_^1RCDCAL NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%ADC MASSLU_J**MSOS4.0**_^1RCDNUM NUM 0_O**MSOS4.0**_^1RCDCOR NUM 0_O**MSOS4.0**_^1RCDMSB NUM 0_O**MSOS4.0**_^1RCDLSB NUM 0_O**MSOS4.0**_^1_%JMP- (ADISP)_I**MSOS4.0**_^1RCDEXT SQP RCDOK5_'SKIP IF NO I/O ERROR_.**MSOS4.0**_^1_%LDQ* BASE_)EXIT (TO "IOERR")_^1_%LDQ€€- IOERR,Q_^1_%JMP- (ZERO),Q_^1RCDOK5 LDQ* BASE_)EXIT (TO "SOMMOR")_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1*_[**MSOS4.0**_^1RCDWC ADC $4400+CHRSLV_D**MSOS4.0**_^1RDCRC ADC $4200+CHRSLV_D**MSOS4.0**_^1RCDDIF ADC RCDEXT-RCDABS_C**MSOS4.0**_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1MSB_"BZS MSB(5)_^1_%EQU LSB(MSB+1)_^1_%SPC 5_^1*_[**MSOS4.0**_^1_%EQU SA3€ˆ0(*/96)_F**MSOS4.0**_^1_%EQU SP30(SA30+1)_D**MSOS4.0**_^1_%EQU DB30(SP30*96)_C**MSOS4.0**_^1_%BSS (DB30-*)_H**MSOS4.0**_^1_%END_]_^__ˆPLASREQ CSY/ H66 P€1_%NAM LASREQ_'DECK-ID H66 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_***************************************************_^1*_**_O*_^1*_**_%THIS PROCESSOR LOAD ASCII WORDS FROM_#*_^1*_**_(INPUT COMMENT MEDIUM TO CORE_**_^1*_**_O*_^1*_***************************************************_^1*_]_^1*_]_^1****_.INPUT FORMAT :_^1*_]_^1*_1LA€€S,CORE LOC.,BASE/DATA_^1*_]_^1*_1LIT,CORE LOC.,BASE/I,I,......_^1*_]_^1*_4WHERE DATA = A STRING OF ASCII CHARACTERS_^1*_AAND STORED 2 CHAR./WORD WITH_^1*_ASPACE FILLED LOW 8-BIT IF NEEDED_^1*_]_^1*_:I_"= INTEGER DATA_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT LASREQ_^1_%ENT LITREQ_^1_%SPC 1_^1*_1E X T E R N A L_^1_%EXT MSIZV4_'MAX. SIZE OF CORE OF SYSTEM_^1_%EXT €€HANDLE_'"HANDLE" ENTRY_^1_%EXT OFF_*"OFF" ENTRY_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU EXTBV4($E9)_!LOCATION CONTAINS EXTE€€NDED CORE TABLE_^1_%EQU COMLIT(28)_"COMMAND "LIT" INDEX_^1_%EQU NO40(40)_$LOCAL INPUT BUFFER SIZE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU€€_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU CONFM(12)_#€€"CONFM" ENTRY_^1_%SPC 2_^1*_]_^1*****_%*****_%P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LASREQ STA* BASE_^1_%EQU LITREQ(LASREQ)_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE 'BUFFER' ADD. AND SAVE_^1_%STA* BUFADD_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDQ- BHAN,I_'GET "HANDLE" ADDRESS_^1_%STQ* EXTHAN_^1_%LDA* OTB+1_(CALCULATE "OFF" ADDRESS_^1_%SUB* OTB_^1_%AAQ€€ A_^1_%STA* EXTOFF_^1_%SPC 2_^1_%ENA GETFLD_'TO GET STARTING CORE LOC._^1_%ENQ 4_,SET 4 CHAR. IS MAX._^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT FROM ASC TO HEX_^1_%RTJ* (EXTHAN)_^1LASLOC NUM 0_,STARTING LOCATION (TO BE FILLED)_^1_%SPC 1_^1*_1CHECK IF BASE ADD. USED._^1*_1SLASH IS NEXT CHAR. WHEN BASE IS UNUSED._^1_%LDA- FIELD,I_%IS CONTROL CHAR.= SLASH_^1_%INA -SLASH_^1_%SA€€N LAS2_^1_%JMP* LAS10_(NO BASE ADDRESS USED, GO_^1OTB_"ADC HANDLE_'0. "HANDLE" ENTRY ADDRESS_^1_%ADC OFF_*1. "OFF"_"ENTRY ADDRESS_^1*_]_^1LAS2_!ENA GETFLD_'GET BASE LOCATION_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1LASBAS NUM 0_^1_%LDA* LASBAS_'BASE + STARTING = CORE LOCATION_^1_%ADD* LASLOC_^1_%STA* LASLOC_^1_%SPC 1_^1*_1CHECK FOR FOR€€MAT ---- SLASH_^1_%LDA- FIELD,I_^1_%INA -SLASH_^1_%SAZ LAS10_^1LAS7_!ENQ 4_,OUTPUT FORMAT INCORRECT_^1_%JMP* (EXTMSG)_^1_%SPC 3_^1*_]_^1****_.GET ASCII CHARACTERS_^1LAS10 STA- SLASHF,I_^1_%STA* UPDOW_^1_%STA* COUNT_^1_%LDA =XMSIZV4_$GET MAX. CORE SIZE_^1_%STA* MAX_^1_%LDA* LASLOC_'TO CHECK CORE ADD. LEGALITY_^1_%RTJ* CORADK_^1_%JMP* LAS7_)ADDRESS ERROR, GO_^1_%LDA- PROG2,I_€€%CHECK FOR "LIT"_^1_%INA -COMLIT_^1_%SAN LASX_)NO, SKIP_^1_%JMP* DECDAT_'TO DECIMAL DATA PROCESSING_^1LASX_!RAO* PROTYP_'SET TO ASCII DATA TYPE_^1_%LDQ- BITFLG,I_$GET BUFFER COUNTER AND BYTE POSITION_^1_%STQ* HILO_/FLAG AND SAVE_^1_%LDA- BUFCNT,I_^1_%STA- I_^1LAS15 SQZ LAS21_(SKIP IF NO CHANGE OF CHAR. POSITION IS NEEDED_^1_%ENQ -1_^1_%RAO- I_^1LAS21 INQ 1_^1_%LDA* (BUFADD),€€I_"GET INPUT TEXT WORD_^1_%STQ* HILO_)SAVE HI-LO FLAG_^1_%SQN LAS22_^1_%ARS 8_^1LAS22 AND- LPMSK+8_%ISOLATE CHAR._^1_%STA* TEMP_^1_%EOR- LPMSK+8_%CHECK FOR END OF TEXT ($FF)_^1_%SAN LAS25_^1_%JMP* LAS32_^1_%SPC 2_^1*_1ASSEMBLE DATA WORD AND SAVE IF NEEDED_^1LAS25 LDQ* UPDOW_(GET POSITION FLAG_^1_%LDA* TEMP_)RECALL INPUT TEXT CHAR._^1_%SQN LAS26_^1_%ALS 8_,POSITION TO HI-8-€€BIT_^1_%ENQ 1_^1_%JMP* LAS27_^1LAS26 EOR* CHAR_)INSERT WITH HI-8-BIT_^1_%ENQ 0_,ADJUST POSITION FLAG AND SAVE_^1LAS27 STQ* UPDOW_^1_%STA* CHAR_^1_%SQN LAS30_(SKIP IF ON HI-8-BIT_^1_%RTJ* SAVCHK_'TO SAVE DATA IN INPUT BUFFER_^1LAS30 LDQ* HILO_)RECALL HI-LO FLAG AND REPEAT_^1_%JMP* LAS15_^1_%SPC 2_^1*_]_^1****_.CLOSE OUT BEFORE EXIT_^1*_]_^1LAS32 LDA* UPDOW_(ANY CHAR (HALF WO€€RD) NOT YET STORE_^1_%SAZ LAS34_^1_%LDA* CHAR_^1_%INA $20_*INSERT SPACE INTO LO-8-BIT_^1_%RTJ* SAVCHK_'TO SAVE DATA IN INPUT BUFFER_^1LAS34 LDA* BUFADD_'MOVE CURRENT DATA TO "BUFFER" FOR PRINTING_^1_%EQU CONFRM(LAS34)_^1_%STA- I_^1_%ENQ 0_^1LAS40 LDA* (LASLOC),Q_^1_%STA- (ZERO),B_^1_%INQ 1_^1_%TRQ A_,CHECK IF ALL DATA BEEN MOVED_^1_%SUB* COUNT_^1_%SAZ LAS44_^1_%JMP* LAS40_€€(REPEAT, NOT DONE_^1*_]_^1LAS44 LDQ* COUNT_(SET UP NO. OF WORDS AND DATA TYPE_^1_%LDA* PROTYP_'ASSEMBLE DATA TYPE AND NO. OF WORDS_^1_%ALS 8_^1_%AAQ Q_^1_%ENA CONFM_(TO PRINT DATA AND REQUEST CONFIRMATION_^1_%RTJ* (EXTHAN)_^1_%ADC NEWDAT-*_^1_%LDA* (BUFADD)_$CHECK IF CONFIRM_^1_%SAN LAS51_(NO, SKIP_^1_%ENQ 0_,SET INDEX AND MOVE NEW DATA TO CORE_^1LAS48 LDA* NEWDAT,Q_^1_%STA€€* (LASLOC),Q_^1_%INQ 1_^1_%TRQ A_,CHECK IF DONE MOVING_^1_%SUB* COUNT_^1_%SAZ LAS51_(YES, SKIP_^1_%JMP* LAS48_(NO, REPEAT_^1LAS51 LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1_%SPC 3_^1*_1COUNTERS, FLAGS, ETC._^1BUFADD NUM 0_,TEXT BUFFER ADD. (TO BE FILLED)_^1UPDOW NUM 0_,HI-8/LO-8 FLAG (0=HI)_^1HILO_!NUM 0_,INPUT TEXT POSITION ( 0 = HI-8)_^1TEMP_!NUM €€ 0_,TEMPORARY STORAGE_^1CHAR_!NUM 0_,DATA_^1BASE_!NUM 0_,PARAMETER BASE ADDRESS_^1EXTHAN NUM 0_,"HANDLE" ADDRESS_^1EXTMSG NUM 0_,"MSG" ADDRESS_^1MAX_"NUM 0_^1COUNT NUM 0_^1EXTOFF NUM 0_,"OFF" ADDRESS_^1PROTYP NUM 1_,SET FOR DECIMAL TYPE DATA_^1_%SPC 2_^1*_.1. DECIMAL DATA_^1DECDAT ENA GETFLD_'GET INPUT DATA_^1_%ENQ 6_^1_%RTJ* (EXTHAN)_^1_%ENA ASCDEC_'CONVERT TO DEC._^€€1_%RTJ* (EXTHAN)_^1_%LDQ* COUNT_^1_%STA* INPDAT,Q_$SAVE INPUT DATA_^1_%RAO* COUNT_(BUMP STORAGE INDEX BY 1_^1_%LDQ* BASE_^1_%LDA- FIELD,Q_%CHECK IF END OF TEXT_^1_%EOR- LPMSK+8_^1_%SAN DEC3_^1_%JMP* CONFRM_'NO MORE DATA,TO PRINT_^1DEC3_!LDA- FIELD,Q_%CHECK FOR COMMA_^1_%INA -COMMA_^1_%SAZ DEC7_^1DEC5_!JMP* LAS7_)FORMAT ERROR, GO_^1DEC7_!JMP* DECDAT_'TO REPEAT_^1_%SPC 3_^1*_]_^1€€*****_-SAVE NEW DATA IN TEMPORARY BUFFER AND MAKE SURE_^1*****_1LESS THAN OR EQUAL TO 40 WORDS IN INPUT_^1*_]_^1SAVCHK NOP 0_,ENTRY_^1_%LDQ* COUNT_(CHECK NO. OF INPUT DATA_^1_%INQ -41_^1_%SQM SAV1_)OK, SKIP_^1_%JMP* LAS7_)TO PRINT FORMAT ERROR_^1SAV1_!LDQ* COUNT_(SET INDEX TO SAVE INPUT DATA_^1_%STA* NEWDAT,Q_^1_%RAO* COUNT_(UP DATE INPUT COUNT_^1_%JMP* (SAVCHK)_$RETURN_^1_%SPC €€ 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 65K_^1_%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR SO_^1_%SUB* MAX_^€01_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1_%SPC 2_^1*_]_^1NEWDAT BZS NEWDAT(NO40)_^1_%EQU INPDAT(NEWDAT)_^1_%SPC 3_^1*_]_^1_%EQU SA32(*/96)_^1_%EQU SP32(SA32+1)_^1_%EQU DB32(SP32*96)_^1_%BSS (DB32-*)_^1_%END_]_^__0PDASREQ CSY/ H67 P€1_%NAM DASREQ_'DECK-ID H67 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#THIS PROCESSOR DUMPS CORE CELLS ONTO_#*_^1*_,*_#THE LIST COMMENT MEDIUM IN ASC FORM_#*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1*_]_^1*****_-REQUEST FORMAT :_€€^1*_]_^1*_1DAS,START CORE,END CORE,BASE(CR)_^1*_]_^1*_8WHERE (CR) = CARRAGE RETURN_^1*_]_^1*_]_^1*_]_^1*****_-OUTPUT FORMAT :_^1*_]_^1*_1LLLL_"AA BB CC DD EE FF GG HH II JJ KK LL MM NN_^1*_]_^1*_8WHERE LLLL = CORE LOCATION_^1*_]_^1*_]_^1_%SPC 2_^1*_1E N T R Y_$N A M E_^1_%ENT DASREQ_^1_%SPC 1_^1*_1E X T E R N A L_^1_%EXT MSIZV4_'MAX. SIZE OF CORE OF SYSTEM_^1_%EXT HANDLE_'"HA€€NDLE" ENTRY_^1_%EXT OFF_*"OFF"_"ENTRY_^1_%EXT CHRSFG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%EQU€€ EXTBV4($E9)_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU LNWD28(28)_"MAX. NO. OF WORDS USED BY 1 LINE_^1_%EQU LNCH16(16)_"MAX. NO. OF DATA IN LINE_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_€€^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" €€POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DASREQ STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA BUFADD_^1_%STA* DATLOC_^1_%LDA- LISTLU,I_$GET LIST UNIT_^1_%ADD* MODE_^1_%STA OTLU_^1_%LDQ- BHAN,I_'GET "HANDLE" ADDRESS_^1_%STQ* EXTHAN_^1_%LDA* OT€€B+1_(CALCULATE "OFF" ADDRESS_^1_%SUB* OTB_^1_%AAQ A_^1_%STA* EXTOFF_'SAVE "OFF" ADDRESS_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA =XMSIZV4_$GET MAX. CORE SIZE_^1_%STA* MAX_^1_%SPC 2_^1*_1GET ADDRESSING DATA_^1_%ENA 0_^1_%STA* DASLOC+2_^1_%STA* COUNT_^1DAS1_!ENA GETFLD_'TO EXTRACT A FIELD --- ADDRESS_^1_%ENQ 4_,SET TO GET 4 CHAR. FIELD_^1_%RTJ* (EXTHAN)_^1_€€%LDA- FIELD,I_%IF EMPTY_^1_%SAZ DAS5_^1_%SUB- LPMSK+8_%CHECK FOR END OF TEXT_^1_%SAZ DAS5_-YES, SKIP_^1_%ADD- LPMSK+8_^1_%INA -COMMA_'CHECK FOR COMMA_^1_%SAZ DAS5_-YES, SKIP_^1*_]_^1DAS3_!ENQ 4_,INCORRECT FORMAT AND GO PRINT MESSAGE_^1_%JMP* (EXTMSG)_^1_%SPC 1_^1DAS5_!ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1DASVA NUM 0_^1_%LDQ* COUNT_(SET-UP STORAGE INDEX_^1_%LDA* €€DASVA_^1_%STA* DASLOC,Q_$SAVE ADD. ACCORDING TO FIELD INDEX_^1_%INQ 1_,BUMP FIELD COUNT BY 1 AND CHECK IF ALL FIELDS_^1_%STQ* COUNT_-BEEN EXTRACTED_^1_%INQ -3_^1_%SQZ DAS10_(SKIP, DONE_^1_%JMP* DAS1_^1_%SPC 2_^1*_]_^1****_.ADDRESSES ARE OBTAINED, ADJUST IF NEEDED_^1*_]_^1DASLOC BZS DASLOC(3)_^1DAS10 LDA- BUFEMT,I_$MAKE SURE BUFFER IS EMPTY_^1_%EOR- LPMSK+16_^1_%SAZ DAS11_^1_€€%JMP* DAS3_^1DAS11 LDA* DASLOC+1_$END - START_^1_%SUB* DASLOC_^1_%SAP DAS12_^1_%JMP* DAS3_)ADDRESS ERROR, GO PRINT MESSAGE_^1*_]_^1DAS12 LDA* DASLOC_'START AND END ADDRESS + BASE_^1_%ADD* DASLOC+2_^1_%STA* DASLOC_^1_%RTJ* CORADK_'TO CHECK IF CORE LOC. WITHIN LIMIT_^1_%JMP* DAS3_)ADDRESS ERROR, GO_^1_%LDA* DASLOC+1_^1_%ADD* DASLOC+2_^1_%STA* DASLOC+1_^1_%RTJ* CORADK_'TO CHECK IF €€CORE LOC. WITHIN LIMIT_^1_%JMP* DAS3_)ADDRESS ERROR, GO_^1*_]_^1_%SPC 4_^1*_]_^1***_/INSERT ASCII INTO OUTPUT LINE_^1*_]_^1DAS19 ENA 0_^1_%STA* COUNT_^1_%STA* HILO_^1*_]_^1*_1FILL OUTPUT BUFFER WITH SPACE CODE_^1_%ENQ LNWD28_^1_%LDA =A_^1DAS20 STA* (BUFADD),Q_^1_%INQ -1_^1_%SQZ DAS22_^1_%JMP* DAS20_^1_%SPC 1_^1*_]_^1OTB_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF€€"_"ENTRY_^1*_]_^1EXTOFF NUM 0_^1*_]_^1*****_-ASSEMBLE CORE LOCATION TAG_^1*_]_^1DAS22 LDA* DASLOC_'ASSEMBLE HI-2-DIGIT OF LOC._^1_%ARS 12_^1_%RTJ* CONASC_^1_%TRA Q_^1_%QLS 8_^1_%LDA* DASLOC_^1_%ARS 8_^1_%RTJ* CONASC_^1_%EAQ A_^1_%STA* (BUFADD)_^1_%LDA* DASLOC_'ASSEMBLE LOW-2-DIGIT OF LOCATION_^1_%ARS 4_^1_%RTJ* CONASC_^1_%TRA Q_^1_%QLS 8_^1_%LDA* DASLOC_^1_%RTJ* CONASC_^€€1_%EAQ A_^1_%ENQ 1_^1_%STA* (BUFADD),Q_^1*_]_^1_%ENA 4_,SET INDEX TO FIRST DATA WORD_^1_%ADD* DATLOC_^1_%STA* DATLOC_^1_%SPC 1_^1*_1GET DATA AND INSERT_^1DAS30 LDA* (DASLOC)_$GET DATA FROM CORE_^1_%LDQ* HILO_)FETCH STORAGE POSITION_^1_%SQZ DAS32_(SKIP ON WHOLE WORD_^1_%LDQ =A_^1_%LLS 8_,INSERT SPACE IN BOTH SIDES_^1_%STQ* (DATLOC)_$SAVE MSD_^1_%RAO* DATLOC_^1_%ENQ -1_^1DAS€€32 STA* (DATLOC)_$SAVE DATA_^1_%RAO* DATLOC_^1_%INQ 1_,UPDATE STORAGE POSITION_^1_%STQ* HILO_^1_%RAO* DASLOC_'UPDATE CORE DATA LOCATION AND NO. OF WORDS_^1_%RAO* COUNT_/IN A LINE_^1*_1CHECK IF ONE LINE_^1_%ENA LNCH16_^1_%SUB* COUNT_^1_%SAZ DAS40_(LINE BEEN FILLED, TO PRINT_^1_%LDA* DASLOC_'CHECK IF ALL REQUEST LOC. BEEN DONE_^1_%SUB* DASLOC+1_^1_%INA -1_^1_%SAZ DAS40_(DONE, S€€KIP_^1_%JMP* DAS30_(NO, TO PROCESS MORE_^1_%SPC 3_^1*_1CONSTAND, BUFFER LOCATION,...ETC._^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1DATLOC NUM 0_^1COUNT NUM 0_^1HILO_!NUM 0_^1MAX_"NUM 0_^1*_]_^1MODE_!ADC ASMOD_^1_%SPC 5_^1*_]_^1***_/PRINT DATA_^1*_]_^1DAS40 RTJ* SELF_^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA DASRET-SELF_^1_%STA* DASX_^1_%RTJ- (AMONI)_^1_%ADC $C00+CHRSL€€V_!CALL CODE_^1DASX_!NUM 0_,EXIT ADD. (TO BE FILLED)_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED WITH LIST UNIT)_^1_%ADC LNWD28_'LENGTH_^1BUFADD NUM 0_,"BUFFER" ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 6€€5K_^1_%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR SO_^1_%SUB* MAX_^1_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1_%SPC 1_^1*_]_^1*_1RETURN FROM OUTPUT_^1D€€ASRET SQP DASOK_(SKIP WHEN NO ERROR ENCOUNTERED_^1_%LDQ* BASE_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_$EXIT TO "IOERR"_^1*_]_^1DASOK LDA CHRSFG_'CHECK FOR "DX"_^1_%SAN DASUP_(OK, SKIP_^1_%JMP* (EXTOFF)_$EXIT TO "OFF"_^1DASUP LDA* DASLOC_^1_%SUB* DASLOC+1_^1_%INA -1_^1_%SAZ DAS50_(DONE, SKIP_^1_%LDA* BUFADD_^1_%STA* DATLOC_^1_%JMP* DAS19_^1_%SPC 1_^1*_1DONE ---- €€EXTI_^1DAS50 LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1_%SPC 5_^1*_]_^1*****_-SUBROUTINE FOR ASSEMBLE ASCII_^1*_]_^1CONASC NOP 0_,ENTRY_^1_%AND- MASK+3_'EXTRACT 4 BITS_^1_%INA -10_*CHECK FOR NUMBER_^1_%SAM DASNO_^1_%INA 7_,SET FOR A-F_^1DASNO INA $3A_^1_%JMP* (CONASC)_$EXIT_^1_%SPC 3_^1*_]_^1_%EQU SA33(*/96)_^1_%EQU SP33(SA33+1)_^1_%EQU DB33(SP33€$*96)_^1_%BSS (DB33-*)_^1_%END_]_^__$PMLUREQ CSY/ H68 P€1_%NAM MLUREQ_'DECK-ID H68 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#THIS PROCESSOR IS USED TO CHANGE THE_#*_^1*_,*_)MASS MEMORY LOGICAL UNIT_+*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1*_]_^1*****_-INPUT FORMAT %_^1*_]_^1*_1MLU€€,UNIT_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT MLUREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT LOG1A_^1_%EXT NUMLU_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),€€TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8€€)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R €€O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1MLUREQ STA* BASE_^1_%STA- I_^1_%LDA- HANDLE,I_$GET "HANDLE" ADDRESS_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1*_1GET LOGICAL UNIT FROM TEXT_^1_%ENQ 2_^1_%ENA GETFLD_^1_%RTJ* (EXTHAN)_$GET 2 CHAR._^1_%ENA ASCDEC_'CONVERT TO BINARY_^1_%RTJ* (EXTHAN)_^1_%SAZ MLUER_(LU = 0, ERROR, SKIP_^1_%STA* LU€€_^1_%TRA Q_^1LUOK_!LDA* LU_^1_%SUB* MAXLU_^1_%INA -1_^1_%SAP MLUER_(ERROR, SKIP_^1_%LDQ LOG1A,Q_%GET PHY. DEV. FROM PHY. TAB._^1_%SQZ MLUER_(ERROR, UNDEFINED_^1_%LDA- 8,Q_*EXTRACT CLASS TYPE_^1_%ARS 11_^1_%AND- MASK+2_^1_%INA -2_/FOR MASS MEMORY, CLASS =2_^1_%SAZ MLU10_^1MLUER ENQ 9_,PRINT ERROR_^1_%JMP* (EXTMSG)_^1_%SPC 1_^1*_1LAST CHECK, MAKE SURE WITHIN MAX._^1_%SPC €€1_^1*_]_^1MLU10 LDA* LU_+RECALL NEW MM UNIT AND STORE_^1_%ENQ NEWMLU_^1_%STA* (BASE),Q_^1_%LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1*_]_^1_%SPC 1_^1LU_#NUM 0_^1MAXLU ADC NUMLU_(MAX. NO. OF LU_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1_%SPC 3_^1*_]_^1_%EQU SA34(*/96)_^1_%EQU SP34(SA34+1)_^1_%EQU DB34(SP34*96)_^1_%BSS (DB34-*)_^1_%END_€]_^__]_^1MLU10 LDA* LU_+PDPTREQ CSY/ H69 P€1_%NAM DPTREQ_'DECK-ID H69 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,**********************************************_^1*_,*_K*_^1*_,*_#THIS PROCESSOR PRINT THE PARTITION_#*_^1*_,*_2CORE MAP_0*_^1*_,*_K*_^1*_,**********************************************_^1*_]_^1*_]_^1*_]_^1*****_-INPUT FORMAT :_^1*_]_^1*_1DPT_^1*_]_^1*_]_^1*****_-O€€UTPUT FORMAT :_^1*_]_^1*_1PARTITION CORE MAP_^1*_1PARTITION NO. NN_"LLLL MMMM_^1*_]_^1*_1WHERE NN = PARTITION NO._^1*_7LLLL = CORE LOCATION_^1*_7MMMM = SIZE_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT DPTREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT BUSY_)BUSY INDICATORS FOR ALL PARTITIONS_^1_%EXT PARTBL_'PARTITION CORE TABLE_^1_%EXT LSTPRT_'LAST PARTITION IN SYSTEM€€_^1_%EXT LSTLOC_'LAST ADDRESS OF LAST PARTITION_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU CHRSLV(3)_#THIS PROGRAM LEVEL_^1_%E€€QU ASMOD($1000) ASCII OUTPUT MODE CODE_^1_%EQU EXTBV4($E9)_!LOCATION CONTAINS EXTENDED CORE TABLE_^1_%SPC 1_^1*_1SUBROUTINE POINTER_^1_%EQU HEXASC(6)_#"HEXASC" --- HEX. TO ASC_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIS€€T OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_€€#*****_^1*_]_^1_%SPC 2_^1DPTREQ STA* BASE_^1_%TRA Q_^1_%LDA- HANDLE,Q_$GET 'HANDLE' ADDRESS AND SAVED_^1_%STA* EXTHAN_^1_%LDA- MSG,Q_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- COMOLU,Q_$OBTAIN COMMENT UNIT AND ADD ASCII MODE CODE_^1_%ADD* MODE_^1_%STA* OTLU_^1_%SPC 2_^1_%LDQ- EXTBV4_'GET EXTENDED CORE TABLE ADDRESS_^1_%LDA- (ZERO),Q_$OBTAIN 32K OR 65K FLAG_^1_%SAN DPT1_)65K €€, SKIP_^1_%JMP* NOPART_'32K, NO PATITION CORE GO_^1DPT1_!CLR Q_^1_%STQ* COUNT_^1*_1I N T E R R U P T_$D I S A B L E_^1_%IIN 0_^1_%LDQ BUSY_^1_%STQ* BUSYFG_^1_%TRQ A_,BUSY INDICATOR TO A AND CHECK IF ANY ONE IS_^1_%SUB- NZERO_.IN BUSY STATUS_^1_%SAN DPT2_^1_%JMP* NOPART_'NO, GO_^1DPT2_!CLR A_^1_%LRS 1_,PUT THIS PARTITION BUSY BIT TO A-REGISTER_^1_%STQ* TEMP_^1_%SAZ DPT10_(PA€€RTITION IS NOT BUSY, SKIP_^1*_]_^1***_/GET PARTITION CORE DATA_^1DPT5_!LDQ* COUNT_^1_%LDA PARTBL,Q_$GET CORE LOC. OF THIS PARTITION AND SAVE_^1_%STA* PATLOC,Q_^1_%STA- I_^1_%LDA- 1,I_*GET ITS SIZE AND SAVE_^1_%STA* PATSIZ,Q_^1DPT10 RAO* COUNT_(BUMP COUNT BY 1_^1_%LDA* COUNT_(CHECK IF ALL 16 PARTITION BEEN EXAMINED_^1_%INA -16_^1_%SAZ DPT20_(SKIP TO ASSEMBLE MESSAGE_^1_%LDQ* TEM€€P_)RECALL BUSY INDICATOR AND REPEAT_^1_%JMP* DPT2_^1_%SPC 3_^1*_]_^1****_.PARTITION DATA (LOC. + SIZE) BEEN FETCHED_^1*_]_^1****_0ENABLE INTERRUPT AND GENERATE MESSAGE_^1*_]_^1DPT20 EIN 0_^1_%CLR A_,CLEAR HEADING INDICATOR_^1_%STA* HEADNG_^1_%LDA* BUSYFG_'RECALL BUSY FLAG_^1DPT22 CLR Q_^1_%LLS 1_,GET THIS PARTITION BUSY BIT TO Q-REG._^1_%STA* TEMP_^1_%SQN DPT30_(YES IT IS B€€USY_^1_%JMP* DPT40_^1*_]_^1DPT30 LDQ* COUNT_(GET PARTITION NO._^1_%LDQ* PATLOC-1,Q_"GET CORE LOCATION AND CONVERT TO ASCII FOR_^1_%ENA HEXASC_,PRINT_^1_%RTJ* (EXTHAN)_^1_%ADC MES01-*_^1_%LDQ* COUNT_^1_%LDQ* PATSIZ-1,Q_"GET SIZE AND CONVERT TO ASCII_^1_%ENA HEXASC_^1_%RTJ* (EXTHAN)_^1_%ADC MES02-*_^1_%LDQ* COUNT_(CONVERT PARTITION NO. TO ASCII_^1_%ENA HEXASC_^1_%RTJ* (EXTHAN)_€€^1_%ADC MES00-*_^1_%LDA =APT_^1_%STA* MES0_^1*_1SET UP SIZE OF MESSAGE ACCORDINGLY_^1_%LDQ* HEADNG_^1_%LDA* SIZE,Q_'GET MESSAGE AND SET UP_^1_%LDQ* MESLOC,Q_$OBTAIN MESSAGE LOCATION_^1DPT33 STQ* ADDRES_^1_%STA* SZ_^1_%ENA 1_,SET NO MORE HEADING_^1_%STA* HEADNG_^1*_]_^1_%RTJ- (AMONI)_^1DPTCAL ADC $D00+CHRSLV_!CALL CODE_^1_%ADC DPTEXT-DPTCAL EXIT_^1_%NUM 0_,THREAD_^1OTLU_!NUM €€ 0_,COMMENT UNIT_^1SZ_#NUM 0_,SIZE (TO BE FILLED)_^1ADDRES NUM 0_^1_%JMP- (ADISP)_^1_%SPC 2_^1*_]_^1***_/CHECK IF ERROR ENCOUNTERED_^1*_]_^1DPTEXT SQP DPT40_^1_%LDQ* BASE_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1DPT40 LDA* COUNT_(DECREMENT PARTITION COUNT BY 1_^1_%INA -1_^1_%SAZ DPT50_(SKIP WHEN ALL DONE_^1_%STA* COUNT_^1_%LDA* TEMP_)RECALL BUSY INDICATOR €€AND REPEAT_^1_%JMP* DPT22_^1_%SPC 1_^1*_1E X I T_!---_"A L L DONE_^1DPT50 LDQ* BASE_^1_%LDQ- SOMMOR,Q_$GET "SOMMOR" ADDRESS AND EXIT TO IT_^1_%JMP- (ZERO),Q_^1_%SPC 5_^1*_]_^1*****_-P A R T I T I O N_%U N U S E D_^1*_]_^1NOPART ENA 1_,SET UP TO PRINT ONE SHOT MESSAGE_^1_%STA* COUNT_^1_%LDA =AUN_^1_%STA* MES0_^1_%LDA =AUS_^1_%STA* MES00_^1_%LDA =AED_^1_%STA* MES00+1_^1_%ENA €€ MES0X-MES_^1_%LDQ* MESLOC_^1_%JMP* DPT33_^1_%SPC 2_^1*_1CONSTANTS OR STORAGE LOCATIONS_^1BASE_!NUM 0_,PARAMETER ADD. (TO BE FILLED)_^1EXTHAN NUM 0_,'HANDLE' ADDRESS (TO BE FILLED)_^1MODE_!ADC ASMOD_(ASCII OUTPUT MODE CODE_^1COUNT NUM 0_^1TEMP_!NUM 0_^1HEADNG NUM 0_^1BUSYFG NUM 0_^1EXTMSG NUM 0_^1PATLOC BZS PATLOC(16)_"PARTITION CORE LOC._^1PATSIZ BZS PATSIZ(16)_"PARTIT€€ION CORE SZE._^1_%SPC 2_^1*_]_^1*****_-MESSAGE SKELTON_^1*_]_^1MES_"NUM $A0D_^1_%ALF 9,PARTITION CORE MAP_^1_%NUM $A0D_^1MES0_!ALF 1,PT_^1MES00 NUM 0,0_*PARTITION NUMBER_^1MES0X ALF 1,_^1MES01 NUM 0,0_*CORE LOCATION_^1_%ALF 1,_^1MES02 NUM 0,0_*CORE SIZE_^1_%NUM $A0D_^1MES03 ADC *-MES_^1MESLOC ADC MES-DPTCAL_'MESSAGE LOCATION_^1_%ADC MES0-DPTCAL_^1SIZE_!ADC MES0€Œ3-MES_^1_%ADC MES03-MES0_^1*_]_^1_%SPC 3_^1_%EQU SA35(*/96)_^1_%EQU SP35(SA35+1)_^1_%EQU DB35(SP35*96)_^1_%BSS (DB35-*)_^1_%END_]_^__ŒPSLDREQ CSY/ H70 P€1_%NAM SLDREQ_'DECK-ID H70 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#THIS PROCESSOR SELECTS THE REQUESTED_#*_^1*_,*_#DENSITY FOR USER, IT ALSO UNLOAD TAPE_"*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1*_]_^1******_,INPUT FORMATS €€:_^1*_]_^1*_8(1) SELECT DENSITY_^1*_]_^1*_8SLD,U,D(CR)_^1*_]_^1*_1WHERE U = LOGICAL UNIT_^1*_8D = DENSITY_^1*_<0 FOR 200 BPI_^1*_<1 FOR 556 BPI_^1*_<2 FOR 800 BPI_^1*_<3 FOR 1600 BPI_^1*_]_^1*_8(CR) = CARRAGE RETURN_^1*_]_^1*_]_^1*_8(2) UNLOAD TAPE_^1*_]_^1*_8UNL,U(CR)_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT SLDREQ_^1_%ENT UNLREQ_'UNLOAD MAG. TAPE REQU€€EST_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT LOG1A_^1_%EXT NUMLU_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT€€ MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU COMSLD(55)_""SLD" COMMAND INDEX_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1€€_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"€€_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_$S T A R T_#*****_^1*_]_^1_%SPC 2_^1SLDREQ STA* BASE_^1_%EQU UNLREQ(SLDREQ)_^1_%STA- I_^1_%LDA- HANDLE,I_$OBTAIN AND SAVE "HANDLE" ADD._^1_%STA* EXTHAN_^1_%LDA- MSG,I_(GET "MSG" LOCATION AND KEEP_^1_%STA* EXTMSG_^1_%LDA- ONEBIT+14_#SET FOR UNLOAD_^1_%STA* DENTY_^1_%SPC 1_^1*_1GET LOGICAL UNIT AND CHE€€CK FOR LEGILTY_^1_%ENA GETFLD_'GET AN INPUT FIELD_^1_%ENQ 2_3(2 CHAR. MAX.)_^1_%RTJ* (EXTHAN)_^1_%ENA ASCDEC_'CONVERT TO BINARY_^1_%RTJ* (EXTHAN)_^1_%SAZ LUER_)LU=0, ERROR_^1_%STA* LU_^1_%TRA Q_^1_%SUB* MAXLU_(CHECK FOR MAX. NO. OF LU_^1_%INA -1_^1_%SAP LUER_^1_%LDQ LOG1A,Q_%GET PHYSICAL DEVICE FROM PHY. TAB_^1_%SQZ LUER_)ERROR, UNDEFINED._^1_%LDA- 8,Q_*GET CLASS TYPE_^1_%€€ARS 11_^1_%AND- MASK+2_^1_%INA -1_+CLASS TYPE = 1 FOR MAG. TAPE_^1_%SAZ LUOK_^1*_]_^1LUER_!ENQ 9_,LU ERROR,_^1_%JMP* (EXTMSG)_^1*_]_^1_%SPC 1_^1*_1LOGICAL UNIT OK, GET DENSITY IF IS "SLD"_^1LUOK_!LDA* BASE_^1_%STA- I_^1_%LDA- PROG2,I_%CHECK IF 'SLD' REQUEST_^1_%INA -COMSLD_^1_%SAZ SLD5_^1_%JMP* SLD15_^1SLD5_!LDA- FIELD,I_%FORMAT CHECK ---- COMMA_^1_%SUB- LPMSK+8_%CHECK €€IF 'NULL' FIRST_^1_%SAN SLD6_^1_%ENA 1_^1_%STA* DENTY_^1_%JMP* SLD15_^1SLD6_!ADD- LPMSK+8_^1_%INA -COMMA_'THEN CHECK FOR COMMA_^1_%SAN SLD9E_^1*_]_^1SLD7_!ENA GETFLD_'GET FIELD --- DENSITY CODE_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%LDA- BUFEMT,I_$MAKE SURE NO MORE DATA_^1_%EOR- LPMSK+16_^1_%SAZ SLD12_^1SLD9E ENQ 4_,FORMAT ERROR_^1_%JMP* (EXTMSG)_^1*_]_^1SLD12 ENA ASCDEC_'CONVE€€RT TO BINARY_^1_%RTJ* (EXTHAN)_^1_%TRA Q_,DENSITY REQUESTED CODE TO Q_^1_%INA -4_^1_%SAM SLD14_^1_%JMP* SLD9E_^1SLD14 LDA* DENCD,Q_^1_%STA* DENTY_^1_%SPC 2_^1*_1OUTPUT_^1SLD15 RTJ- (AMONI)_^1SLDCD ADC $1D00+CHRSLV_^1_%ADC SLDEX-SLDCD_^1_%NUM 0_^1LU_#NUM 0_^1DENTY NUM 0_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1SLDEX TRQ A_^1_%LDQ* BASE_)EXIT TO "IOERR" (ERROR) OR "SOMMOR"_€€^1_%SAP SLD25_^1_%INQ 1_^1SLD25 LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_1STORAGE AND CONSTANTS_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1MAXLU ADC NUMLU_^1_%SPC 1_^1*_1DENSITY CODES_^1DENCD NUM 3_,0. 200 BPI_^1_%NUM 2_,1. 556 BPI_^1_%NUM 1_,2. 800 BPI_^1_%NUM 4_,3. 1600 BPI_^1_%SPC 3_^1*_]_^1_%EQU SA55(*/96)_^1_%EQU SP55(SA55+1)_^1_%EQU DB55(SP55*96)€ _^1_%BSS (DB55-*)_^1_%END_]_^__ PCWAREQ CSY/ H71 P€1_%NAM CWAREQ_'DECK-ID H71 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#THIS PROCESSOR CONVERTS WORD ADDRESS TO_#*_^1*_,*_,SECTOR/WORD ADDRESS_0*_^1*_,*_P*_^1*_,***************************************************_^1*_]_^1*_]_^1*_]_^1******_,INPUT FORMAT :_^1*_]_^1€€*_8CWA,WA(CR)_^1*_]_^1*_1WHERE WA =WORD ADDRESS (HEX.) (MAX. SIZE = 8)_^1*_]_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1*_1SECTOR/WORD ADDRESS = MSB-LSB-WORD_^1*_]_^1*_1WHERE MSB = SECTOR MSB --- 4 DIGITS HEX._^1*_8LSB = SECTOR LSB --- 4 DIGITS HEX._^1*_8WORD = WORD ADD. --- 4 DIGITS HEX._^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT CWAREQ_^1_%SPC 5_^1*_1' E Q€€ U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT €€ASC MODE_^1_%SPC 1_^1*_1CHARACTER 'EQUIVALENCES'_^1_%EQU KAR0($30)_#CHARACTER = 0_^1_%EQU KAR9($39)_#CHARACTER = 9_^1_%EQU KARA($41)_#CHARACTER = A_^1_%EQU KARF($46)_#CHARACTER = F_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)€€_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU €€GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1CWAREQ STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA* BUFADD_^1_%LDA- HANDLE,I_^1_%STA* EXTHAN_^1_%LDA- MSG,I_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_$GET LIST LU_^1_%ADD* MODE_^1_%STA OTLU_^1_%SPC 1_^1*_1GET INPUT DATA_^1_%E€€NQ 8_^1_%STQ* COUNT_^1_%QLS 1_^1_%ENA 0_,ZERO OUT COUNTERS_^1CWA1_!STA INV,Q_^1_%SQZ CWA2_^1_%INQ -1_^1_%JMP* CWA1_^1CWA2_!LDQ- BITFLG,I_^1_%STQ* HILO_^1_%LDA- BUFCNT,I_^1_%STA- I_^1CWA4_!SQZ CWA5_)NO CHANGE OF CHAR. POSITION, SKIP_^1_%ENQ -1_0OTHERWISE BUMP POINTERS_^1_%RAO- I_^1CWA5_!INQ 1_^1_%STQ* HILO_^1*_]_^1_%LDA* (BUFADD),I_"GET AND EXTRACT CHAR._^1_%SQN CWA7_^1_%A€€RS 8_^1CWA7_!AND- LPMSK+8_^1_%STA* TEMP_^1_%EOR- LPMSK+8_%IS END OF TEXT_^1_%SAN CWA9_^1_%JMP* CWA27_^1*_1CHECK FOR 0-9 AND A-F_^1CWA9_!LDA* TEMP_^1_%INA -KAR0_^1_%SAZ CWA18_^1_%SAM CWA12_(ERROR_^1_%INA -KAR9+KAR0-1_^1_%SAM CWA15_(BETWEEN 1-9, SKIP_^1_%INA -KARA+KAR9+1_^1_%SAZ CWA15_(SKIP ON 'A'_^1_%SAM CWA12_(ERROR_^1_%INA -KARF+KARA-1_^1_%SAM CWA14_^1CWA12 ENQ 4_,F€€ORMAT ERROR --- TO "MSG"_^1_%JMP* (EXTMSG)_^1*_]_^1CWA14 INA 6_^1CWA15 INA 10_^1CWA18 LDQ* COUNT_^1_%STA* INV-1,Q_^1_%SQP CWA20_^1_%JMP* CWA12_(ERROR, GO_^1CWA20 INQ -1_+DECREMENT COUNT BY 1_^1_%STQ* COUNT_-9_^1_%SPC 1_^1*_1UPDATE POINTERS_^1CWA25 LDQ* HILO_)RECALL BYTE POSITION FLAG AND REPEAT_^1_%JMP* CWA4_^1_%SPC 1_^1*_1S T O R A G E_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1E€€XTMSG NUM 0_^1BUFADD NUM 0_^1MODE_!ADC ASMOD_^1COUNT NUM 0_^1HILO_!NUM 0_^1_%SPC 2_^1*_]_^1******_,ALL INPUT IN, DO CONVERSION_^1*_]_^1_%SPC 2_^1*_1ARRANGE INPUT DATA INTO PROPER ORDER_^1CWA27 LDA* COUNT_^1_%STA- I_^1_%ENQ 8_^1CWA29 LDA* INV-1,Q_^1_%STA* CWAVAL,I_^1_%INQ -1_+DECREMENT COUNT BY 1 AND CHECK IF DONE_^1_%TRQ A_^1_%SUB* COUNT_^1_%SAZ CWA30_^1_%RAO- I_^€€1_%JMP* CWA29_(TO REPEAT_^1CWA30 ENQ 0_^1_%STQ- I_^1_%STQ* MOSMSB_^1CWA32 LDA* CWAVAL+2,I_"CONVERT INTO HEX._^1_%MUI- ONEBIT+4_^1_%ADD* CWAVAL+3,I_^1_%STA* CWAVAL+3,I_^1_%LDA* CWAVAL+1,I_^1_%MUI- ONEBIT+8_^1_%ADD* CWAVAL+3,I_^1_%STA* CWAVAL+3,I_^1_%LDA* CWAVAL,I_^1_%MUI- ONEBIT+12_^1_%ADD* CWAVAL+3,I_^1_%STA* CWAVAL+3,I_^1_%LDQ- I_,CHECK IF DONE_^1_%SQN CWA34_^1_%INQ 4_,BUMP P€€OINTER AND REPEAT_^1_%STQ- I_^1_%JMP* CWA32_^1*_]_^1CWA34 SAP CWA36_(SKIP IF LSB LESS THAN $7FFF (OR EQUAL)_^1_%RAO* CWAVAL+3_*OTHERWISE BUMP MSB_^1_%AND- LPMSK+15_^1_%STA* CWAVAL+7_^1CWA36 ENQ 0_^1_%DVI* NO96_)CONVERT LSB (WORD ADDRESSING) TO SECTOR_^1_%STA* COUNT_^1_%STQ* TEMP_^1*_1341 SECTORS AND 32 WORDS FOR EVERY COUNT_^1*_8OF MSB_^1_%LDA* CWAVAL+3_$CALCULATE NO. OF SECTOR€€S_^1_%MUI* NO341_^1_%SAP CWA41_^1_%INQ 1_,BUMP MSB (SECTOR)_^1_%AND- LPMSK+15_^1CWA41 STQ* MOSMSB_'SAVE MSB SECTOR_^1_%ADD* COUNT_(+ SECTORS (FROM LSB)_^1_%SAP CWA43_^1_%AND- LPMSK+15_^1_%RAO* MOSMSB_^1CWA43 STA* COUNT_(SAVE LSB SECTOR_^1_%ENQ 0_^1_%LDA* CWAVAL+3_$CALCULATE NO. OF WORDS FROM MSB (WORD)_^1_%MUI- ONEBIT+5_$(* 32)_^1_%ADD* TEMP_^1_%DVI* NO96_)CONVERT TO SECTOR_^€€1_%STQ* TEMP_^1_%ADD* COUNT_^1_%SAP CWA47_^1_%RAO* MOSMSB_^1_%AND- LPMSK+15_^1CWA47 RTJ* CV4A_)CONVERT LSB SECTOR TO ASCII_^1_%STQ* MES2_^1_%STA* MES2+1_^1_%LDA* MOSMSB_'CONVERT MSB SECTOR_^1_%RTJ* CV4A_^1_%STQ* MES1_^1_%STA* MES1+1_^1_%LDA* TEMP_)CONVERT WORD_^1_%RTJ* CV4A_^1_%STQ* MES3_^1_%STA* MES3+1_^1*_]_^1_%RTJ- (AMONI)_^1CWACD ADC $500+CHRSLV_!WRITE_^1_%ADC CWART-CWACD_€€!RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1_%ADC LMES_)LENGTH_^1_%ADC MES-CWACD_#BUFFER_^1_%JMP- (ADISP)_^1*_]_^1CWART TRQ A_^1_%LDQ* BASE_^1_%SAP CWAEX_^1_%INQ 1_,SET FOR I/O ERROR_^1CWAEX LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_$EXIT ACCORDINGLY_^1NO341 NUM 341_^1MOSMSB NUM 0_^1TEMP_!NUM 0_^1NO96_!NUM 96_^1INV_"BZS INV(8)_^1CWAVAL BZS CWAVAL(9)_^1_%SPC €€1_^1*_1M E S S A G E_^1MES_"NUM $A0D_^1_%ALF 11,SECTOR/WORD ADDRESS =_^1MES1_!ALF 2,_+MSB ADD._^1_%ALF 1,--_^1MES2_!ALF 2,_+LSB ADD._^1_%ALF 1,--_^1MES3_!ALF 2,_+WORD ADD._^1_%EQU LMES(*-MES)_^1_%SPC 2_^1*_]_^1*****_-ROUTINE TO CONVERT TO I-WORD ASCII_^1*_]_^1CV4A_!NOP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* CI_+SET UP INDEX_^1C1_#LLS 12_+EXTRACT 4-BIT TO A-REG._^1_%ALS 4_^1_%STQ*€€ CT_+SAVE REMAINDER_^1_%INA -10_*SET UP CHAR. AS NO. OR A-F_^1_%SAM NOAF1_^1_%INA 7_^1NOAF1 INA $3A_^1_%LDQ* CI_+RECALL INDEX TO SAVE CHAR._^1_%STA* CU,Q_^1_%INQ -3_+CHECK IF DONE_^1_%SQZ CE_+SKIP WHEN DONE_^1_%RAO* CI_^1_%ENQ 0_^1_%LDA* CT_+TO PROCESS ANOTHER ONE_^1_%JMP* C1_^1*_]_^1CT_#NUM 0_^1CU_#BZS CU(4)_^1CI_#NUM 0_^1*_]_^1CE_#LDQ* CU+3_^1_%QLS 8_,ASSEMBLE INTO 2-€ΘCHAR. WORD_^1_%ADQ* CU+2_^1_%LDA* CU+1_^1_%ALS 8_^1_%ADD* CU_^1_%JMP* (CV4A)_'RETURN_^1_%SPC 3_^1*_]_^1_%EQU SA50(*/96)_^1_%EQU SP50(SA50+1)_^1_%EQU DB50(SP50*96)_^1_%BSS (DB50-*)_^1_%END_]_^__ΘPDMHREQ CSY/ H72 P€1_%NAM DMHREQ_'DECK-ID H72 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,****************************************************_^1*_,*_Q*_^1*_,*_#THIS PROCESSOR DUMPS MASS MEMORY IN HEX._#*_^1*_,*_Q*_^1*_,****************************************************_^1*_]_^1*_]_^1******_,INPUT FORMAT :_^1*_]_^1*_*DMH,SSMSB,SSLSB,SW,NW(CR)_^1*_]€€_^1*_]_^1*_1WHERE SSMSB = START SECTOR (HEX) MSB_^1*_8LSMSB = START SECTOR (HEX) LSB_^1*_8SW_"= START WORD (HEX) -- DEFAULT = 0_^1*_8NW_"= NO. OF WORDS (HEX)_^1*_]_^1*_]_^1_%SPC 1_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1*_1MMLLLL/WWWW_!XXXX XXXX XXXX XXXX_^1*_]_^1*_]_^1*_1WHERE MM_!= 2-DIGIT MSB (HEX.)_^1*_8LLLL = 4-DIGIT LSB (HEX.)_^1*_8WWWW = 4-DIGIT WORD (HEX.)_^1*€€_8XXXX = MM DATA (8/LINE) (HEX.)_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT DMHREQ_^1_%ENT DMAREQ_^1_%ENT DMIREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(€€3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU NO96(96)_$BUFFER SIZE_^1_%EQU COMDMH(45)_"COMMAND "DMH" INDEX_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOE€€RR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*€€_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$"FETMM" --- GET MM ADDRESS_^1_%EQU MASOT(11)_#"MASOT"-- PRINT MM DATA WITH DIFF. FORMATS_^1_%SPC 3_^1*_]_^1******_'*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DMHREQ STA* BASE_^1_%EQU DMAREQ(DMHREQ)_^1_%EQU DMIREQ(DMHREQ)_^1_%STA-€€ I_^1_%LDA- HANDLE,I_$GET AND SAVE "HANDLG"_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH AND STORE "MSG"_^1_%STA* EXTMSG_^1_%LDA- NEWMLU,I_$GET MM LU_^1_%STA* DMHLOC_^1_%STA* OTLU_^1_%LDA- PROG2,I_%GENERATE PROGRAM TYPE, 0=HEX., 1=DECIMAL_^1_%INA -COMDMH_+AND 2=ASCII DUMP_^1_%STA* PROTYP_^1_%SPC 1_^1*_1GET MM ADDRESS_^1_%ENA FETMM_(GET MM ADDRESS WITH INPUT MM ADD. DATA SAVE_^1_%ENQ 1€€_^1_%RTJ* (EXTHAN)_^1_%ADC DMHLOC-*_^1_%LDA- FIELD,I_%MAKE SURE FORMAT OK_^1_%INA -COMMA_^1_%SAN DMH3_)ERROR, SKIP_^1_%ENA GETFLD_'GET NEXT FIELD --- NO. OF WORDS_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%LDA- BUFEMT,I_$MAKE SURE NO MORE DATA_^1_%EOR- LPMSK+16_^1_%SAZ DMH6_^1*_]_^1DMH3_!ENQ 4_,FORMAT ERROR_^1_%JMP* (EXTMSG)_^1*_]_^1DMH6_!ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_€€^1NW_#NUM 0_^1_%SPC 3_^1*_]_^1******_,INPUT DATA IN, TO READ OVER MM DATA_^1*_]_^1DMH9_!ENA NO96_^1_%STA* DMHZ_^1_%STA* SIZE_^1_%LDA* DMHLOC_'SET UP MM ADD._^1_%STA* DMHM_^1_%LDA* DMHLOC+1_^1_%STA* DMHL_^1_%RTJ- (AMONI)_^1DMHCD ADC $300+CHRSLV_!READ_^1_%ADC DMHRT-DMHCD_!RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1DMHZ_!ADC NO96_)NO. OF WORDS_^1_%ADC €€ MMDAT-DMHCD_!BUFFER_^1DMHM_!NUM 0_,MSB (TO BE FILLED)_^1DMHL_!NUM 0_,LSB_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1DMHRT SQP DMH20_^1_%LDQ* BASE_)I/O ERROR_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1*_]_^1DMH20 ENA 0_^1_%STA* DONE_^1_%LDA* NW_+CHECK IF MORE DATA THAN REQUIRED_^1_%SUB* DMHZ_^1_%INA -1_^1_%SAP DMH22_^1_%RAO* DONE_)SET DONE_^1_%LDA* NW_+SET UP SIZE_^1_%STA* SIZE_^1DMH22 €€ ENA MASOT_(TO ASSEMBLE MM ADD./DATA AND PRINT_^1_%LDQ* PROTYP_,ACCORDING TO PROGRAM TYPE_^1_%RTJ* (EXTHAN)_^1_%ADC DMHLOC+2-*_^1_%ADC SIZE-*_^1_%ADC MMDAT-*_^1*_]_^1_%LDA* DONE_)CHECK IF ALL DATA BEEN PRINT_^1_%SAZ DMH30_(NO, SKIP TO UPDATE POINTERS_^1_%LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1*_1UPDATE POINTERS AND REPEAT_^1DMH30 LDA* NW_^1_%SUB* D€€MHZ_^1_%STA* NW_^1_%LDA* DMHLOC+1_$ADJUST MM ADD._^1_%ADD* DMHZ_^1_%SAP DMH31_^1_%AND- LPMSK+15_^1_%RAO* DMHLOC_^1DMH31 STA* DMHLOC+1_^1_%LDA* DMHLOC+4_$UPDATE WORD POSITION_^1_%ADD* DMHZ_^1_%STA* DMHLOC+4_^1_%JMP* DMH9_^1_%SPC 1_^1*_1S T O R A G E_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1PROTYP NUM 0_,PROGRAM TYPE_^1DMHLOC BZS DMHLOC(5)_^1DONE_!NUM 0_^1SIZE_!NUM 0_^€Š1MMDAT BZS MMDAT(NO96)_^1_%SPC 3_^1*_]_^1_%EQU SA45(*/96)_^1_%EQU SP45(SA45+1)_^1_%EQU DB45(SP45*96)_^1_%BSS (DB45-*)_^1_%END_]_^__ŠPSMNREQ CSY/ H73 P€1_%NAM SMNREQ_'DECK-ID H73 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#THIS PROCESSOR SEARCHES MASS MEMORY FOR_#*_^1*_,*_3PATTERN_5*_^1*_,*_P*_^1*_,***************************************************_^1*_]_^1*_]_^1******_,INPUT FORMAT :_^1*_]_^1*_*SMN,SSMSB,SSLSB€€,SW,NW,N,M,I_^1*_]_^1*_]_^1*_1WHERE SSMSB = START SECTOR (HEX) MSB_^1*_8SSLSB = START SECTOR (HEX) LSB_^1*_8SW_"= START WORD (HEX)_^1*_8NW_"= NO. OF WORDS (HEX_^1*_8N_#= NUMBER FOR SEARCH (HEX)_^1*_8M_#= BIT MASK FOR MATCH (HEX)_^1*_8I_#= INCREMENT_^1*_]_^1*_1DEFAULT "I" (INCREMENT) = 1_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT SMNREQ_^1_%SPC 1_^1*_1E X T E R N A L €€S_^1_%EXT CHRSFG_^1_%EXT OFF_^1_%EXT HANDLE_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%€€EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU ONESTR(96)_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$"FETMM" --- FETCH MM ADDRESS_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTR€€Y_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUF€€EMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1SMNREQ STA* BASE_^1_%STA- I_^1_%LDA- BHAN,I_'FETCH "HANDLE" ADD._^1_%STA* EXTHAN_^1_%LDA- MSG,I_(GET "MSG" LOCATION_^1_%STA* EXTMSG_^1_%LDA- NEWMLU,I_$GET MM LU_^1_%STA* MMINP_^1_%STA* OTLU_^1_%LDA- PROG2,I_%GET PROGRAM NO. AND GENERATE MASK FOR_^1_%ENQ 0_1OUTPUT €€UNIT_^1_%INA -1_^1_%DVI- ONEBIT+4_$GENERATE BIT MASK INDEX TO GET OUTPUT LU_^1_%STA* COUNT_^1_%LDA- ONEBIT,Q_$GET BIT MASK_^1_%LDQ* COUNT_^1_%AND* LUMSK,Q_%AND WITH PINT LU MASK_^1_%SAZ MA5_^1_%RAO- I_,SET FOR "COMOLU"_^1MA5_"LDA- LISTLU,I_$GET LU ACCORDINGLY AN ASSEMBLE FOR ASCII MODE_^1_%ADD* MODE_^1_%STA* OTLU2_^1_%SPC 2_^1*_]_^1_%ENA FETMM_(GET MM ADDRESS_^1_%ENQ 1_^1_%RTJ€€* (EXTHAN)_^1_%ADC MMINP-*_^1_%LDA* MMINP_^1_%STA* SMNLOC_^1_%LDA* MMINP+1_^1_%STA* SMNLOC+1_^1_%ENA 0_,ZERO OUT COUT_^1_%STA* COUNT_^1_%STA* SMNVAL+3_^1**_0LOOP TO OBTAIN (1) NO. OF WORDS_^1*_A(2) NO. FOR SEARCH_^1*_A(3) BIT MASK_^1*_]_^1SMN7_!ENA GETFLD_'TO GET NEXT INPUT FIELD_^1_%ENQ 4_,4 CHAR. MAX._^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1SMN€€XXX NUM 0_^1_%LDA- FIELD,I_^1_%SAZ SMN10_^1_%INA -COMMA_^1_%SAZ SMN10_^1_%LDA* COUNT_^1_%INA -2_^1_%SAZ SMN10_^1*_]_^1_%ENQ 4_,ERROR, ---- FORMAT_^1_%JMP* (EXTMSG)_^1MMINP BZS MMINP(5)_^1*_]_^1SMN10 LDQ* COUNT_(SAVE INPUT DATA ACCORDINGLY_^1_%LDA* SMNXXX_^1_%STA* SMNVAL,Q_^1_%INQ 1_,BUMP INDEX AND CHECK IF DONE_^1_%STQ* COUNT_^1_%INQ -3_^1_%SQZ SMN20_^1_%JMP* SMN7_)TO €€REPEAT_^1_%SPC 3_^1*_]_^1*****_-LIST LOGICAL UNIT MASK_^1*_]_^1*********_)BIT ASSIGNMENT ---- WORD 1 BIT 0 IS CORRESPONDING_^1*****_ATO ENTRY 1_^1*_]_^1*********_)BIT IS RESET (=0) IMPLIED LOGICAL UNIT FROM 'LISTLU'_^1*******_+OTHER WISE LOGICAL UNIT IS OBTAINED FROM 'COMOLU'_^1*_]_^1*********_)FOR EXAMPLE--'DPC' IS ENTRY 2 AND ITS LOGICAL UNIT_^1*********_)IS OBTAINED FROM 'LISTL€€U'. ITS MASK IS IN BIT 1_^1*******_+OF WORD 1 AND IT IS RESET_^1*_]_^1LUMSK NUM $FFFD,$FCFF,$0FAE,$FFF2_^1_%SPC 2_^1*_1GET INCREMENT ("I")_^1SMN20 LDA- BUFEMT,I_$SKIP I_!"I" UNDEFINED_^1_%EOR- LPMSK+16_^1_%SAZ SMN22_^1SMN21 ENA GETFLD_'GET "I" FIELD_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCDEC_'CONVERT TO BINARY_^1_%RTJ* (EXTHAN)_^1_%STA* SMNVAL+3_^1_%SAN SMN25_^1SMN22 RA€€O* SMNVAL+3_$SET TO DEFAULT = 1_^1*_1READ OVER DATA (1 SECTOR) AND SEARCH_^1SMN25 ENA 0_^1_%STA* COUNT_^1_%STA* HEADIG_^1_%LDA* SMNVAL+1_^1_%AND* SMNVAL+2_^1_%STA* BAMASK_^1_%SPC 2_^1SMN26 RTJ- (AMONI)_^1SMNCAL ADC $300+CHRSLV_^1_%ADC SMNIOE-SMNCAL EXIT_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1_%ADC ONESTR_'SIZE (96 WORDS)_^1_%ADC MMDATA-SMNCAL BUFFER_^1SMNLOC€€ NUM 0,0_*MSB AND LSB_^1_%JMP- (ADISP)_^1_%SPC 2_^1*_]_^1SMNIOE SQP SMN33_^1SMNEM ENQ 2_,I/O ERROR, PRINT MESSAGE_^1_%JMP* (EXTMSG)_^1*_]_^1SMN33 LDA* SMNVAL_'CHECK IF ANY WORD LEFT TO BE SEARCHED_^1_%SAP SMN36_^1SMN34 ENQ 7_,OUTPUT SEARCH FINISH MESSAGE AND EXIT_^1_%JMP* (EXTMSG)_^1*_]_^1SMN36 LDQ* COUNT_^1_%LDA MMDATA,Q_^1_%AND* SMNVAL+2_^1_%EOR* BAMASK_^1_%SAZ SMN40_€€^1_%JMP* SMN50_(TO BUMP POINTERS_^1_%SPC 1_^1*_1ASSEMBLE DATA_^1SMN40 LDQ* HEADIG_^1_%QLS 1_^1_%LDA* MESTBL,Q_$GET PROPER MESSAGE_^1_%STA* MESLOC_^1_%LDA* MESTBL+1,Q_^1_%STA* MESSIZ_^1_%SQN SMN43_(SKIP IF NOT PRINT HEADING_^1_%JMP* SMN45_^1_%SPC 2_^1*_1STORAGE AND CONSTANTS_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1MODE_!ADC ASMOD_^1SMNVAL NUM 0,0,0,0_^1COUNT NUM €€ 0_^1TEMP_!NUM 0_^1_%SPC 2_^1*_]_^1*_1ASSEMBLE ADDRESS DATA_^1SMN43 LDA* MMINP+2_%MSB_^1_%RTJ* ASMASC_^1_%ADC MES21-*_^1_%LDA* MMINP+3_%LSB_^1_%RTJ* ASMASC_^1_%ADC MES22-*_^1_%LDA* MMINP+4_%WORD_^1_%RTJ* ASMASC_^1_%ADC MES23-*_^1_%LDQ* COUNT_^1_%LDA* MMDATA,Q_$CONTENT_^1_%RTJ* ASMASC_^1_%ADC MES24-*_^1*_]_^1SMN45 RTJ- (AMONI)_^1SMNPNT ADC $500+CHRSLV_^1_%ADC SMNPX-SMNPN€€T EXIT_^1_%NUM 0_,THREAD_^1OTLU2 NUM 0_,LU (TO BE FILLED)_^1MESSIZ NUM 0_,SIZE_^1MESLOC NUM 0_^1_%JMP- (ADISP)_^1*_]_^1SMNPX SQP SMN48_^1_%JMP* SMNEM_^1SMN48 LDQ* HEADIG_^1_%LDA CHRSFG_(CHECK IF "DX"_^1_%SAN SMN49_)NO, ASSEMBLE DATA AND PRINT_^1_%LDA* OTB+1_)CALCULATE "OFF" ADDRESS_^1_%SUB* OTB_^1_%LDQ* BASE_^1_%ADD- BHAN,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_%EXIT TO "OFF"_^1O€€TB_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF" ENTRY_^1SMN49 SQN SMN50_(SKIP IF NOT PRINT HEADING_^1_%RAO* HEADIG_'SET NO HEADING FLAG_^1_%JMP* SMN40_^1_%SPC 1_^1*_1UPDATE POINTERS_^1SMN50 LDA* SMNVAL_^1_%SUB* SMNVAL+3_^1_%STA* SMNVAL_^1_%RAO* MMINP+4_%BUMP WORD COUNT_^1_%SAZ SMN51_^1_%SAP SMN53_^1SMN51 JMP* SMN34_(ALL DONE_^1SMN53 LDA* COUNT_(UPDATE CORE BUFFER€€_^1_%ADD* SMNVAL+3_^1_%STA* COUNT_^1_%INA -96_^1_%SAP SMN55_^1_%JMP* SMN36_^1*_1CORE BUFFER EXHAUSTED, UP DATE MM ADD._^1SMN55 STA* COUNT_^1_%LDA* SMNVAL+1_$UPDATE LSB_^1_%INA ONESTR_^1_%STA* SMNVAL+1_^1_%SAP SMN56_^1_%RAO* SMNVAL_'BUMP MSB WHEN LSB OVER 32K_^1_%AND- LPMSK+15_^1_%STA* SMNVAL+1_^1SMN56 JMP* SMN26_(TO READ OVER DATA FROM MM_^1_%SPC 1_^1HEADIG NUM 0_^1BAMASK N€€UM 0_^1*_1MESSAGE_^1MESTBL ADC MES1-SMNPNT_^1_%ADC LMES1_^1_%ADC MES2-SMNPNT_^1_%ADC LMES2_^1*_]_^1MES1_!NUM $A0D_^1_%ALF 6,CELL CONTENT_^1_%NUM $A0D_^1_%EQU LMES1(*-MES1)_^1MES2_!NUM $A0D_^1MES21 ALF 2,_+MSB LOCATION_^1_%ALF 1,_^1MES22 ALF 2,_+LSB LOCATION_^1_%ALF 1,_^1MES23 ALF 2,_+WORD LOCATION_^1_%ALF 3,_#(_^1MES24 ALF 2,_+DATA_^1_%ALF 1,)_^1_%EQU LMES2(*€€-MES2)_^1_%SPC 5_^1*_]_^1************************************************************************_^1*_]_^1_%SPC 1_^1*_]_^1******_,ASSEMBLE LOCATION AND CONTENT INTO ASCII_^1*_]_^1ASMASC NOP 0_,ENTRY_^1_%STA* A0_+SAVE LOCATION_^1_%LDQ* (ASMASC)_^1_%ADQ* ASMASC_^1_%STQ* A1_+SAVE DATA CONTENT ADD._^1_%RTJ* TW_+ASSEMBLE INTO ASCII_^1_%RAO* ASMASC_'SET EXIT_^1_%JMP* (ASMASC)_$EXIT_^€€1_%SPC 2_^1*_]_^1A0_#NUM 0_^1A1_#NUM 0_^1_%SPC 2_^1*_]_^1TW_#NOP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* TW1_*ZERO COUNT_^1TW0_"LLS 4_,EXTRACT 4-BIT BYTE_^1_%STA* TW2_^1_%INQ -10_*ASSEMBLE INTO ASCII ACCORDING TO NO. OR A-F_^1_%SQM TWX_^1_%INQ 7_^1TWX_"INQ $3A_^1_%LLS 16_+TO A-REG._^1_%LDQ* TW1_^1_%STA* TW3,Q_(SAVE ACCORDINGLY_^1_%INQ 1_^1_%STQ* TW1_^1_%INQ -4_^1_%SQZ TWAS_)DONE€€, ALL 4 BYTE BEEN PROCESSED_^1_%LDA* TW2_^1_%ENQ 0_^1_%JMP* TW0_^1*_]_^1TW1_"NUM 0_^1TW2_"NUM 0_^1TW3_"BZS TW3(4)_^1TWAS_!LDQ* A1_+ASSEMBLE INTO 2-WORD AND SAVE_^1_%LDA* TW3_^1_%ALS 8_^1_%ADD* TW3+1_^1_%STA- (ZERO),Q_^1_%LDA* TW3+2_^1_%ALS 8_^1_%ADD* TW3+3_^1_%STA- 1,Q_^1_%JMP* (TW)_)RETURN_^1_%SPC 2_^1*_]_^1MMDATA BZS MMDATA(96)_^1_%SPC 3_^1*_]_^1_%EQU SA53(*/96)_^1_%EQU€F SP53(SA53+1)_^1_%EQU DB53(SP53*96)_^1_%BSS (DB53-*)_^1_%END_]_^__FPSMPREQ CSY/ H74 P€1_%NAM SMPREQ_'DECK-ID H74 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,****************************************************_^1*_,*_Q*_^1*_,*_#THIS PROCESS SETS MASS MEMORY TO PATTERN_#*_^1*_,*_Q*_^1*_,****************************************************_^1*_]_^1*_]_^1******_,INPUT FORMAT :_^1*_]_^1*_*SMP,SSMSB,SSLSB,SW,NW,P(CR)_^1*€€_]_^1*_]_^1*_1WHERE SSMSB = START SECTOR (HEX.) MSB_^1*_8SSLSB = START SECTOR (HEX.) LSB_^1*_8SW_"= START WORD (HEX.)_^1*_8NW_"= NO. OF WORDS (HEX.)_^1*_8P_#= PATTERN (HEX.)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT SMPREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($€€23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU NO96(96)_$SIZE OF DATA(PATTERN) BUFFER_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GET€€FLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$"FETMM" --- FETCH MM ADDRESS_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_€€#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1SMPREQ STA* BASE_^1_%STA- I_^1_%LDA- HANDLE,€€I_^1_%STA* EXTHAN_^1_%LDA- MSG,I_^1_%STA* EXTMSG_^1_%LDA- NEWMLU,I_$SET UP LU_^1_%STA* OTLU_^1_%STA* SMPLOC_^1_%SPC 1_^1*_1GET MM ADDRESS AND CHECK_^1_%ENQ 0_^1_%ENA FETMM_^1_%RTJ* (EXTHAN)_^1_%ADC SMPLOC-*_^1_%ENA GETFLD_'GET NEXT FIELD --- NO. OF WORDS_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%LDA- FIELD,I_%MAKE SURE FORMAT OK_^1_%INA -COMMA_^1_%SAN SMP4_^1_%ENA ASCHEX_'CONVERT TO€€ HEX._^1_%RTJ* (EXTHAN)_^1SMPVAL NUM 0_^1_%LDA* SMPVAL_'MAKE SURE VALUE IS POSITIVE_^1_%SAZ SMP4_^1_%SAP SMP6_^1SMP4_!ENQ 4_,FORMAT ERROR_^1_%JMP* (EXTMSG)_^1*_]_^1SMP6_!LDA- FIELD,I_^1_%INA -COMMA_^1_%SAN SMP8_^1_%ENA GETFLD_'GET NEXT FIELD --- PATTERN_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%LDA- BUFEMT,I_$MAKE SURE BUFFER EMPTY_^1_%EOR- LPMSK+16_^1_%SAZ SMP10_^1SMP8_!JMP* SMP4_^€€1*_]_^1SMP10 ENA ASCHEX_'CONVERT PATTERN TO HEX._^1_%RTJ* (EXTHAN)_^1PATTEN NUM 0_^1_%SPC 3_^1*_]_^1******_,A L L_#I N P U T_#I N_^1*_]_^1*_]_^1_%ENQ 0_,SET BUFFER FOR PATTERN_^1SMP20 LDA* PATTEN_^1_%STA* DATBUF,Q_^1_%INQ 1_^1_%TRQ A_^1_%INA -NO96-1_^1_%SAZ SMP22_^1_%JMP* SMP20_^1SMP22 ENA NO96_)SET UP SIZE_^1_%STA* SMPSIZ_^1_%SUB* SMPVAL_^1_%SAM SMP26_^1_%LDA* SMPVAL_€€^1_%STA* SMPSIZ_^1SMP26 RTJ- (AMONI)_^1SMPCD ADC $500+CHRSLV_!WRITE REQUEST_^1_%ADC SMPRET-SMPCD RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1SMPSIZ ADC NO96_)SIZE_^1_%ADC DATBUF-SMPCD BUFFER_^1SMPLOC NUM 0,0_*MSB AND LSB (TO BE FILLED)_^1_%JMP- (ADISP)_^1*_]_^1SMPRET SQP SMP32_^1_%LDQ* BASE_)I/O ERROR, EXIT_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1*_1CHECK €€IF DONE_^1SMP32 LDA* SMPVAL_^1_%SUB* SMPSIZ_^1_%STA* SMPVAL_^1_%SAZ SMP36_^1_%SAP SMP40_^1SMP36 LDQ* BASE_)DONE, --- TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1*_]_^1****_.UP DATE MM_^1SMP40 LDA* SMPLOC+1_^1_%ADD* SMPSIZ_^1_%SAP SMP42_^1_%AND- LPMSK+15_^1_%RAO* SMPLOC_^1SMP42 STA* SMPLOC+1_^1_%JMP* SMP22_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTMSG NUM 0_^1EXTHAN NUM 0€Œ_^1DATBUF BZS DATBUF(96)_^1_%SPC 3_^1*_]_^1_%EQU SA42(*/96)_^1_%EQU SP42(SA42+1)_^1_%EQU DB42(SP42*96)_^1_%BSS (DB42-*)_^1_%END_]_^__ŒPLSPREQ CSY/ H75 P€1_%NAM LSPREQ_'DECK-ID H75 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#THIS PROCESSOR LOAD SINGLE PRECISION_#*_^1*_,*_#VALUE(S) FROM INPUT COMMENT MEDIUM_%*_^1*_,*_/INTO CORE_3*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1******_,INP€€UT FORMAT :_^1*_]_^1*_1LSP,CORE LOC.,BASE/DATA_^1*_]_^1*_5WHERE DATA = SIGNED/UNSIGNED 7 DIGITS VALUE_^1*_BWITH/WITHOUT DECIMAL POINT_^1*_]_^1*_;COMMA IS USED TO SEPARATE 2 VALUES_^1*_]_^1*_;DATA = SIGNED FLOATING POINT VALUE_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT LSPREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT ECONV_(E- OR F-FORMAT CONVERSION -- SINGLE_^€€1_%EXT MMADDR_^1_%EXT MSG_^1_%EXT MSIZV4_'MAX. SIZE OF CORE OF SYSTEM_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASSLU($8C2€€)_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU EXTBV4($E9)_^1_%SPC 2_^1*_1SUBROUTINE POINTER (FOR REQUEST)_^1_%EQU GETFLD(2)_#"GETFLD" --- GET FIELD SUBROUTINE_^1_%EQU ASCHEX(3)_#"ASCHEC" --- ASC TO HEX._^1_%EQU GETINT(8)_#"GETINT" --- GET SINGLE/DOUBLE PRECISION VALUE_^1_%EQU FLCVSG(13)_""FLCVSG" --- PRINT VALUE AND CONFIRM_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT €€PACKAGE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BI€€TFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LSPREQ STA* BASE_^1_%STA- I_^1_%LDA- HANDLE,I_^1_%STA* EXTHAN_^1_%LDA- BMSG,I_'FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 2_^1_%ENQ 4_,SET 4 CH€€AR. MAX._^1_%ENA GETFLD_'GET STARTING LOC._^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1LSPLOC NUM 0_^1*_1CHECK IF BASE ADDRESS USED._^1*_1CONTROL CHAR. = SLASH, BASE IS UNUSED_^1_%LDA- FIELD,I_%IS CONTROL CHAR. = SLASH_^1_%INA -SLASH_^1_%SAN LSP2_)NO, GET BASE_^1_%JMP* LSP10_^1*_]_^1LSP2_!ENA GETFLD_'GET BASE_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCH€€EX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1LSPBAS NUM 0_^1_%LDA* LSPBAS_'ADDRESS = START LOC. + BASE_^1_%ADD* LSPLOC_^1_%STA* LSPLOC_^1_%SPC 1_^1*_1CHECK FOR FORMAT ---- CONTROL CHAR = SLASH_^1_%LDA- FIELD,I_%IS CONTROL CHAR. = SLASH_^1_%INA -SLASH_^1_%SAZ LSP10_^1LER_"ENQ 4_,TO PRINT FORMAT INCORRECT MESSAGE_^1_%JMP* (EXTMSG)_^1_%SPC 2_^1*_]_^1****_.TO OBTAIN SINGLE PRECISION€€ VALUE_^1*_]_^1LSP10 STA- SLASHF,I_^1_%STA* COUNT_^1_%LDA =XMSIZV4_$GET MAX. CORE SIZE_^1_%STA* MAX_^1_%LDA* LSPLOC_'TO CHECK CORE ADD._^1_%STA* CORLOC_^1_%RTJ CORADK_'TO CHECK IF CORE LOC. WITHIN LIMIT_^1_%JMP* LER_*ERROR, GO_^1LSP11 ENQ 7_,SET FOR 7 DIGIT MAX_^1_%ENA GETINT_'GET DECODE SINGLE/DOUBLE PRECISION_^1_%RTJ* (EXTHAN)_^1_%ADC VALUE-*_^1_%SPC 2_^1*_]_^1*****_-REQU€€EST SPACE TO BRING IN FLOATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* LSP32_(TO ERROR (I/O ERROR)_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM TO BE READ_^1_%STQ* LSP31_^1€€_%STQ* LSP40_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-SELF_^1_%STA* LSP24_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO "MMADDR" FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SAVE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_€€^1LSP24 NUM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC ECONV_(E- OR F-FORMAT CONVERSION -- SINGLE_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM €€TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE DUE TO ERROR_^1_%NUM $1800_^1LSP31 NUM 0_,CORE ADD. TO BE FILLED_^1LSP32 LDQ* BASE_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1LSP35 ENQ 0_^1_%RTJ* (LSP13)_^1_%ADC VALUE-*_^1LSP37 RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)€€_^1_%LDQ* COUNT_^1_%LDA* VALUE+13_$SAVE FLOATING VALUE IN TEMPORARY STORAGE_^1_%STA* TEMP,Q_^1_%LDA* VALUE+14_^1_%STA* TEMP+1,Q_^1_%RAO* COUNT_(UPDATE STORAGE COUNT BY 2_^1_%RAO* COUNT_^1*_1CHECK IF ALL INPUT TEXT BEED PROCESSED_^1_%LDA* BASE_^1_%STA- I_^1_%LDA- BUFEMT,I_^1_%SAM LSP50_(DONE, SKIP_^1_%JMP* LSP11_(TO REPEAT_^1*_1CONSTANTS OR STORAGE LOC._^1BASE_!NUM 0_,PARAMETER BA€€SE ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1EXTMSG NUM 0_,"MSG" ADD._^1COUNT NUM 0_,NO. OF INPUT VALUES_^1MAX_"NUM 0_^1_%SPC 3_^1*_]_^1***_/INPUT TEXT EXHAUSTED, REQUEST CONFIRMATION_^1*_]_^1LSP50 LDQ* COUNT_^1_%ENA FLCVSG_'TO PRINT DATA AND REQUEST CONFIRMATION_^1_%RTJ* (EXTHAN)_^1_%ADC TEMP-*_^1_%ADC CORLOC-*_^1_%LDQ* COUNT_(MOVE TO REQUESTED CORE LOCATION_^1LSP51 INQ -1_€€^1_%SQP LSP55_^1LSP53 LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1CORLOC NUM 0_^1*_]_^1LSP55 LDA* TEMP,Q_^1_%STA* (CORLOC),Q_^1_%JMP* LSP51_^1_%SPC 1_^1VALUE BZS VALUE(15)_^1TEMP_!BZS TEMP(20)_$FLOATING VALUE TEMPORARY STORAGE_^1_%SPC 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 6€€5K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 65K_^1_%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR SO_^1_%SUB* MAX_^1_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RET€vURN_^1_%SPC 2_^1*_]_^1_%EQU SA36(*/96)_^1_%EQU SP36(SA36+1)_^1_%EQU DB36(SP36*96)_^1_%BSS (DB36-*)_^1_%END_]_^__vPDSPREQ CSY/ H76 P€1_%NAM DSPREQ_'DECK-ID H76 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,**********************************************_^1*_,*_K*_^1*_,*_#THIS PROCESSOR DUMPS CORE VALUE IN_#*_^1*_,*_)SINGLE PRECISION FORMAT_**_^1*_,*_K*_^1*_,**********************************************_^1*_]_^1*_]_^1*****_-INPUT FORMAT :_^1*_]_^1*_1DSP,STARTING CORE€€, END CORE,BASE_^1*_]_^1*_]_^1*****_-OUTPUT FORMAT :_^1*_]_^1*_8A TOTAL OF 4 VALUES ARE INSERTED IN A LINE_^1*_]_^1*_1LLLL_"+.NNNNNNNE+NNN -.NNNNNNNE-NNN_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT DSPREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT ECONV_(E- OR F-FORMAT CONVERSION FOR SINGLE_^1_%EXT MMADDR_^1_%EXT MSG_^1_%EXT MSIZV4_'MAX. SIZE OF CORE OF SYSTEM_^1_%€€EXT OFF_^1_%EXT HANDLE_^1_%EXT CHRSFG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU C€€HRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU EXTBV4($E9)_^1_%EQU LNWD36(36)_"36WORDS/LINE_^1_%EQU ASMOD($1000) ASC OUTPUT MODE_^1_%EQU MASSLU($8C2) MASS MEMORY LU_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PACKAGE_^1_%EQU WRDLN(3)_$NO. OF DATA PER LINE_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASC€€DEC"_^1_%EQU KARPER($2E)_!CHARACTER = ._^1_%EQU KARE($45)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^€€1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DSPREQ STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADD._^1_%STA BUFADD_^1_%STA* €€DATLOC_^1_%LDA- BHAN,I_'GET "HANDLE" ADD._^1_%STA* EXTHAN_^1_%LDA- BMSG,I_'FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_^1_%ADD* MODE_^1_%STA OTLU_^1_%LDA =XMSIZV4_$GET MAX. CORE SIZE_^1_%STA* MAX_^1_%SPC 2_^1*_1GET ALL CORE ADDRESSES_^1_%ENA 0_^1_%STA* COUNT_^1DSP1_!ENA GETFLD_'GET A FIELD (CORE LOC.)_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%LDA- FIELD,I_%CHECK IF EMPTY_€€^1_%SAZ DSP5_^1_%SUB- LPMSK+8_%IS END OF TEXT_^1_%SAZ DSP5_^1_%ADD- LPMSK+8_^1_%INA -COMMA_'IS COMMA_^1_%SAZ DSP5_^1*_]_^1DSP3_!ENQ 4_,INCORRECT FORMAT,_^1_%JMP* (EXTMSG)_^1MODE_!ADC ASMOD_(ASC OUTPUT MODE_^1DSP5_!ENA ASCHEX_'CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1DSPVA NUM 0_^1_%LDQ* COUNT_^1_%LDA* DSPVA_(STORE LOCATION ACCORDINGLY_^1_%STA* DSPLOC,Q_^1_%RAO* COUNT_^1_%RTJ CO€€RADK_'TO CHECK IF CORE LOC. WITHIN LIMIT_^1_%JMP* DSP3_)ERROR, GO_^1_%LDQ* COUNT_^1_%INQ -3_+CHECK IF DONE_^1_%SQZ DSP10_^1_%JMP* DSP1_)NO, REPEAT_^1_%SPC 1_^1*_]_^1***_/ADJUST ADDRESSES IF NEEDED_^1*_]_^1DSP10 LDA- BUFEMT,I_$MAKE SURE IS EMPTY_^1_%EOR- LPMSK+16_^1_%SAZ DSP11_^1_%JMP* DSP3_^1DSP11 LDA* DSPLOC+1_$MAKE SURE "END" LARGER THE "BEGIN"_^1_%SUB* DSPLOC_^1_%SAP DSP1€€2_^1_%JMP* DSP3_^1*_]_^1DSP12 LDA* DSPLOC_^1_%ADD* DSPLOC+2_^1_%STA* DSPLOC_^1_%LDA* DSPLOC+1_^1_%ADD* DSPLOC+2_^1_%STA* DSPLOC+1_^1*_1INSERT DATA_^1DSP19 CLR A_^1_%STA* COUNT_^1_%SPC 2_^1*_1FILL LINE WITH SPACE_^1_%LDA =A_^1_%ENQ 35_^1DSP20 STA (BUFADD),Q_^1_%INQ -1_^1_%SQM DSP22_^1_%JMP* DSP20_^1*_1INSERT CORE LOCATION TAG_^1*_]_^1DSP22 LDA* DSPLOC_'ASSEMBLE HI-2-D€€IGIT OF LOC._^1_%ARS 12_^1_%RTJ* CONASC_^1_%TRA Q_^1_%QLS 8_^1_%LDA* DSPLOC_^1_%ARS 8_^1_%RTJ* CONASC_^1_%EAQ A_^1_%STA* (DATLOC)_$SAVE HI-2-DIGIT_^1_%LDA* DSPLOC_'CONVERT LO-2-DIGIT OF LOC._^1_%ARS 4_^1_%RTJ* CONASC_^1_%TRA Q_^1_%QLS 8_^1_%LDA* DSPLOC_^1_%RTJ* CONASC_^1_%EAQ A_^1_%ENQ 1_^1_%STA* (DATLOC),Q_^1*_8INCREMENT DATA LOC. TO VALUE_^1_%ENA WRDLN_(INCREMENT LOCAT€€ION COUNT FOR NEXT_^1_%ADD* DATLOC_^1_%STA* DATLOC_^1_%SPC 2_^1*_]_^1****_.GET AND ASSEMBLE VALUE_^1*_]_^1DSP26 LDA* (DSPLOC)_$MOVE FLOATING POINT VALUE INTO CALLING PAR._^1_%STA* VALUE_-ARRAY_^1_%RAO* DSPLOC_^1_%LDA* (DSPLOC)_^1_%STA* VALUE+1_^1_%RAO* DSPLOC_^1_%SPC 2_^1*_]_^1*****_-REQUEST SPACE TO BRING IN FLOATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSL€€V_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1_%SPC 3_^1*_]_^1*****_-SUBROUTINE FOR ASSEMBLE ASCII_^1*_]_^1CONASC NOP 0_,ENTRY_^1_%AND- MASK+3_'EXTRACT 4 BITS_^1_%INA -10_*CHECK FOR NUMBER_^1_%SAM DASNO_^1_%INA 7_,SET FOR A-F_^1DASNO INA $3A_^1_%JMP* (CONASC)_$EXIT_^1_%SPC 1_^1*_]_^1DATLOC NUM 0_^1E€€XTMSG NUM 0_,"MSG" ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1COUNT NUM 0_^1BASE_!NUM 0_,PARAMETER ADD._^1MAX_"NUM 0_^1_%SPC 2_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* DSPEIO_'TO ERROR (I/O ERROR)_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM TO BE READ_^1_%STQ* LSP31_^1_%STQ* LSP40_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%€€INA LSP30-SELF_^1_%STA* LSP24_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO 'MMADDR' FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SAVE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP24 NUM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC €€ FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC ECONV_(E- OR F-FORMAT CONVERSION FOR SINGLE_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP31 NUM 0_^€€1DSPEIO LDQ* BASE_)EXIT TO "IOERR"_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1LSP35 ENQ 1_^1_%RTJ* (LSP13)_^1_%ADC VALUE-*_^1LSP37 RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%JMP* DSP100_^1_%SPC 4_^1*_1STORAGE AND/OR CONSTANTS_^1DSPLOC BZS DSPLOC(3)_^1VALUE BZS VAL€€UE(16)_^1_%SPC 5_^1*_]_^1*****_-INSERT INTEGER INTO OUTPUT FORMAT_^1*_]_^1DSP100 ENQ 0_^1DSP101 LDA* VALUE+2,Q_#ASSEMBLE 2-DIGIT INTO ONE WORD (INTEGER)_^1_%ALS 8_^1_%ADD* VALUE+3,Q_^1_%STA* (DATLOC)_^1_%RAO* DATLOC_^1_%INQ 2_,BUMP NO. OF INTEGER IN E-FORMAT_^1_%TRQ A_^1_%INA -14_*CHECK IF DONE_^1_%SAP DSP102_^1_%JMP* DSP101_^1DSP102 RAO* DATLOC_^1_%RAO* DATLOC_'BUMP POI€€NTER TO NEXT VALUE_^1_%SPC 2_^1*_1CHECK IF LINE EXHAUSTED_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%INA -WRDLN_^1_%SAZ DSP105_^1*_1CHECK IF DATA EXHAUSTED_^1_%LDA* DSPLOC+1_^1_%SUB* DSPLOC_^1_%SAM DSP105_'DATA EXHAUSTED, TO PRINT_^1_%JMP* DSP26_^1_%SPC 2_^1*_]_^1*****_-PRINT DATA_^1*_]_^1DSP105 LDA* SELF_^1_%INA DSPRET-SELF_^1_%STA* DSPX_^1_%RTJ- (AMONI)_%CALL MONITOR_^1_%ADC $C00+C€€HRSLV_^1DSPX_!NUM 0_,EXIT (TO BE FILLED)_^1_%NUM 0_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1_%ADC LNWD36_^1BUFADD NUM 0_,"BUFFER" ADD._^1_%JMP- (ADISP)_^1_%SPC 2_^1*_1RETURN FROM OUTPUT_^1DSPRET SQP DSPOK_^1_%JMP* DSPEIO_'TO "IOERR" ERROR EXIT_^1*_]_^1DSPOK LDA CHRSFG_'CHECK IF "DX"_^1_%SAN DSPREP_'NO, SKIP_^1_%JMP* GONE_)YES, TO EXIT_^1DSPREP LDA* DSPLOC+1_$CHECK IF ALL DATA E€€XHAUSTED_^1_%SUB* DSPLOC_^1_%SAM DSPDON_^1_%LDA* BUFADD_'RESTORE BUFFER ADD. AND REPEAT_^1_%STA* DATLOC_^1_%JMP DSP19_^1*_1D O N E ----- E X I T_^1DSPDON LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1GONE_!LDQ* BASE_^1_%LDA* OTB+1_(GENERATE "OFF" ADDRESS_^1_%SUB* OTB_^1_%ADD- BHAN,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_$TO "OFF"_^1OTB_"ADC HANDLE_'0. "HANDLE" ENTRY€€_^1_%ADC OFF_*1. "OFF" ENTRY_^1_%SPC 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 65K_^1_%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD6€5EX_'SKIP FOR 32K OR SO_^1_%SUB MAX_^1_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1_%SPC 2_^1*_]_^1_%EQU SA37(*/96)_^1_%EQU SP37(SA37+1)_^1_%EQU DB37(SP37*96)_^1_%BSS (DB37-*)_^1_%END_]_^__PDMSREQ CSY/ H77 P€1_%NAM DMSREQ_'DECK-ID H77 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#THIS PROCESSOR DUMP MASS MEMORY DATA IN_#*_^1*_,*_)SINGLE PRECISION FORMAT_/*_^1*_,*_P*_^1*_,***************************************************_^1*_]_^1*****_-INPUT FORMAT :_^1*_]_^1*_]_^1*_1DM€€S,SSMSB,SSLSB,SW,NW_^1*_]_^1*_1WHERE SSMSB = START SECTOR (HEX.) MSB_^1*_8SSLSB = START SECTOR (HEX.) LSB_^1*_8SW_"= START WORD (HEX.)_^1*_8NW_"= NO. OF WORDS TO BE DUMPED (HEX.)_^1*_]_^1*_]_^1*****_-OUTPUT FORMAT :_^1*_]_^1*_8A TOTAL OF 4 VALUES ARE INSERTED IN A LINE_^1*_]_^1*_1MMLLLL/WWWW_!+0.NNNNNNNE+NN -0.NNNNNNNE-NN_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT D€€MSREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT ECONV_(E- OR F-FORMAT CONVERSION FOR SINGLE_^1_%EXT MMADDR_^1_%EXT MSG_^1_%EXT MSIZV4_'MAX. SIZE OF CORE OF SYSTEM_^1_%EXT CHRSFG_^1_%EXT OFF_^1_%EXT HANDLE_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU C€€OMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU EXTBV4($E9)_^1_%EQU LNWD36(36)_"36WORDS/LINE_^1_%EQU ASMOD($1000) ASC OUTPUT MODE_^1_%EQU MASSLU($8C2) MASS MEMORY LU_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PAC€€KAGE_^1_%EQU NO40(40)_$BUFFER SIZE_^1_%EQU WRDLN(3)_$NO. OF DATA PER LINE_^1_%SPC 1_^1_%EQU KARPER($2E)_!CHARACTER = ._^1_%EQU KARE($45)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)€€_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU€€ ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$'FETMM' --- GET MM ADD._^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DMSREQ STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADD._^1_%STA BUFADD_^1_%STA* DATLOC_^1_%LDA- BHAN,I_'GET "HANDLE" ADD._^1_%STA* EXTHAN_^1_%LDA- BMSG,I_'FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_^1_%ADD* M€€ODE_^1_%STA OTLU_^1_%LDA- NEWMLU,I_$SET UP MM LU_^1_%STA* DMSLU_^1_%STA* DMSLOC_^1_%SPC 2_^1*_1GET ALL CORE ADDRESSES_^1_%SPC 3_^1*_]_^1*****_-DUMP MASS MEMORY --- SINGLE PRECISION_^1*_]_^1DMSENT ENA FETMM_(GET MM ADD._^1_%ENQ 1_,RETURN WITH INPUT ADD. DATA_^1_%RTJ* (EXTHAN)_^1_%ADC DMSLOC-*_^1_%ENA GETFLD_'GET NEXT FIELD --- NO. OF WORDS_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_€€%ENA ASCHEX_'CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1NW_#NUM 0_^1_%LDA- BUFEMT,I_$MAKE SURE IS EMPTY_^1_%EOR- LPMSK+16_^1_%SAZ DMS5_^1*_]_^1DSP3_!ENQ 4_,INCORRECT FORMAT,_^1_%JMP* (EXTMSG)_^1MODE_!ADC ASMOD_(ASC OUTPUT MODE_^1*_]_^1DMS5_!STA* INDEX_^1_%LDA* DMSLOC_'SET UP MSB AND LSB_^1_%STA* DMSM_^1_%LDA* DMSLOC+1_^1DMS5R STA* DMSL_^1_%ENA NO40_)NO. OF WORDS TO BE XFER_^1_%STA* €€DMSZ_^1_%STA WDBF_^1_%RTJ- (AMONI)_%READ OVER DATA_^1DMSCD ADC $300+CHRSLV_^1_%ADC DMSRT-DMSCD_^1_%NUM 0_^1DMSLU NUM 0_,LU (FILLED)_^1DMSZ_!NUM 0_,SIZE (FILLED)_^1_%ADC DMSBUF-DMSCD_^1DMSM_!NUM 0_,MSB (FILLED)_^1DMSL_!NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1*_]_^1DMSRT SQP DMS10_^1_%JMP DSPEIO_^1*_]_^1DMS10 CLR A_^1_%STA* COUNT_^1_%SPC 2_^1*_1FILL LINE WITH SPACE_^1€€*_]_^1DMS13 LDA BUFADD_^1_%INA -1_^1_%STA- I_^1_%ENQ 0_-FILL BUFFER WITH SPACE_^1MA12_!LDA =A_^1_%STA- 1,B_^1_%INQ 1_^1_%TRQ A_^1_%INA -36_^1_%SAZ MA14_^1_%JMP* MA12_^1DMSLOC BZS DMSLOC(5)_^1*_1INSERT CORE LOCATION TAG_^1*_]_^1MA14_!LDA* DMSLOC+2_$CONVERT MSB TO ASC_^1_%RTJ* CV4A_^1_%STA- 1,I_^1_%LDA* DMSLOC+3_$GET LSB AND CONVERT TO ASC_^1_%RTJ* CV4A_^1_%STQ- 2,I_^1_%€€STA- 3,I_^1_%LDA* DMSLOC+4_$GET WORD_^1_%RTJ* CV4A_^1_%STA* CV4A_^1_%TRQ A_^1_%ENQ SLASH_(INSERT '/' BETWEEN SECTOR AND WORD_^1_%LLS 8_^1_%STQ- 4,I_^1_%LDQ* CV4A_^1_%ALS 8_^1_%LLS 24_^1_%INA $20_^1_%STA- 6,I_^1_%STQ- 5,I_^1*_]_^1*_8INCREMENT DATA LOC. TO VALUE_^1_%ENA 7_^1_%ADD* DATLOC_^1_%STA* DATLOC_^1_%SPC 2_^1*_]_^1****_.GET AND ASSEMBLE VALUE_^1*_]_^1DMS22 LDQ* INDEX_€€(SET UP INDEX AND MOVE FLOATING POINT VALUE_^1_%LDA DMSBUF,Q_$INTO CALLING PARAMETER LOCATION_^1_%STA* VALUE_^1_%LDA DMSBUF+1,Q_^1_%STA* VALUE+1_^1_%INQ 2_^1_%STQ* INDEX_^1_%SPC 2_^1*_]_^1*****_-REQUEST SPACE TO BRING IN FLOATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_€€%ADC FLOATZ_^1_%JMP- (ADISP)_^1INDEX NUM 0_^1_%SPC 1_^1*_]_^1DATLOC NUM 0_^1EXTMSG NUM 0_,"MSG" ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1COUNT NUM 0_^1BASE_!NUM 0_,PARAMETER ADD._^1_%SPC 2_^1*_]_^1*****_-ROUTINE TO CONVERT TO I-WORD ASCII_^1*_]_^1CV4A_!NOP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* CI_+SET UP INDEX_^1C1_#LLS 12_+EXTRACT 4-BIT TO A-REG._^1_%ALS 4_^1_%STQ* CT_+SAVE REMAI€€NDER_^1_%INA -10_*SET UP CHAR. AS NO. OR A-F_^1_%SAM NOAF1_^1_%INA 7_^1NOAF1 INA $3A_^1_%LDQ* CI_+RECALL INDEX TO SAVE CHAR._^1_%STA* CU,Q_^1_%INQ -3_+CHECK IF DONE_^1_%SQZ CE_+SKIP WHEN DONE_^1_%RAO* CI_^1_%ENQ 0_^1_%LDA* CT_+TO PROCESS ANOTHER ONE_^1_%JMP* C1_^1*_]_^1CT_#NUM 0_^1CU_#BZS CU(4)_^1CI_#NUM 0_^1*_]_^1CE_#LDQ* CU+3_^1_%QLS 8_,ASSEMBLE INTO 2-CHAR. WORD_^1_%€€ADQ* CU+2_^1_%LDA* CU+1_^1_%ALS 8_^1_%ADD* CU_^1_%JMP* (CV4A)_'RETURN_^1_%SPC 2_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* DSPEIO_'TO ERROR (I/O ERROR)_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM TO BE READ_^1_%STQ* LSP31_^1_%STQ* LSP40_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-SELF_^1_%STA* LSP24_^1_%LDA* OFTB_)€€GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO 'MMADDR' FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SAVE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP24 NUM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (T€€O BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC ECONV_(E- OR F-FORMAT CONVERSION FOR SINGLE_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP31 NUM 0_^1DSPEIO LDQ* BASE_)EXIT TO "IOERR"_^1_%LDQ- IO€€ERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1LSP35 ENQ 1_^1_%RTJ* (LSP13)_^1_%ADC VALUE-*_^1LSP37 RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%JMP* DSP100_^1_%SPC 4_^1*_1STORAGE AND/OR CONSTANTS_^1VALUE BZS VALUE(16)_^1_%SPC 5_^1*_]_^1*****_-INSERT INTEGER INTO OUTPUT FORMAT€€_^1*_]_^1DSP100 ENQ 0_^1DSP101 LDA* VALUE+2,Q_#ASSEMBLE 2-DIGIT INTO ONE WORD (INTEGER)_^1_%ALS 8_^1_%ADD* VALUE+3,Q_^1_%STA* (DATLOC)_^1_%RAO* DATLOC_^1_%INQ 2_,BUMP NO. OF INTEGER IN E-FORMAT_^1_%TRQ A_^1_%INA -14_*CHECK IF DONE_^1_%SAP DSP102_^1_%JMP* DSP101_^1DSP102 RAO* DATLOC_^1_%RAO* DATLOC_'BUMP POINTER TO NEXT VALUE_^1_%SPC 2_^1*_1CHECK IF LINE EXHAUSTED_^1_%RAO* CO€€UNT_^1_%LDQ* WDBF_)ADJUST NO. OF WORDS IN BUFFER_^1_%INQ -2_^1_%STQ* WDBF_^1_%LDA* COUNT_^1_%INA -WRDLN_^1_%SAZ DSP105_^1_%LDA NW_+CHECK IF DATA EXHAUSTED_^1_%INA -2_^1_%STA NW_^1_%SAZ DSP105_^1_%SAM DSP105_^1_%SQN DMS171_'BUFFER NOT YET EMPTY_^1_%JMP* DMS201_'BUFFER EMPTY, TO UPDATE MM AND GET DATA_^1DMS171 JMP DMS22_^1_%SPC 2_^1*_]_^1*****_-PRINT DATA_^1*_]_^1DSP105 LD€€A* SELF_^1_%INA DSPRET-SELF_^1_%STA* DSPX_^1_%RTJ- (AMONI)_%CALL MONITOR_^1_%ADC $C00+CHRSLV_^1DSPX_!NUM 0_,EXIT (TO BE FILLED)_^1_%NUM 0_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1_%ADC LNWD36_^1BUFADD NUM 0_,"BUFFER" ADD._^1_%JMP- (ADISP)_^1_%SPC 2_^1*_1RETURN FROM OUTPUT_^1DSPRET SQP DSPOK_^1_%JMP* DSPEIO_'TO "IOERR" ERROR EXIT_^1*_]_^1DSPOK LDA CHRSFG_'CHECK IF "DX"_^1_%SAN €€ DSPREP_'NO, SKIP_^1_%JMP* GONE_)YES, TO EXIT_^1DSPREP LDA NW_+CHECK IF ALL DATA EXHAUSTED_^1_%INA -2_^1_%STA NW_^1_%SAZ DSPDON_^1_%SAM DSPDON_^1_%LDA* BUFADD_'RESTORE BUFFER ADD. AND REPEAT_^1_%STA DATLOC_^1_%LDA DMSLOC+4_$UP DATA LOCATION COUNT_^1_%INA 6_^1_%STA DMSLOC+4_^1_%LDQ* WDBF_)CHECK IF BUFFER EMPTY_^1_%SQZ DMS201_'YES, SKIP_^1_%JMP DMS10_^1*_1D O N E ----- E€€ X I T_^1DSPDON LDQ BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1_%SPC 3_^1*_1BUFFER EMPTY, UP DATE MM ADD. AND GET DATA_^1DMS201 STQ INDEX_^1_%LDA DMSL_)UPDATE LSB_^1_%INA NO40_^1_%SAP DMS207_^1_%RAO DMSM_^1_%AND- LPMSK+15_^1DMS207 JMP DMS5R_(TO GET DATA, ETC._^1WDBF_!NUM 0_^1_%SPC 2_^1*_]_^1GONE_!LDQ BASE_^1_%LDA* OTB+1_(GENERATE "OFF" ADDRESS_^1_%SUB* €OTB_^1_%ADD- BHAN,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_$TO "OFF"_^1OTB_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF" ENTRY_^1_%SPC 2_^1*_]_^1DMSBUF BZS DMSBUF(40)_^1_%SPC 3_^1*_]_^1_%EQU SA48(*/96)_^1_%EQU SP48(SA48+1)_^1_%EQU DB48(SP48*96)_^1_%BSS (DB48-*)_^1_%END_]_^__PLSOREQ CSY/ H78 P€1_%NAM LSOREQ_'DECK-ID H78 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#THIS PROCESSOR LOAD SINGLE PRECISION_#*_^1*_,*_#VALUE(S) FROM INPUT COMMENT MEDIUM_%*_^1*_,*_/INTO CORE_3*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1******_,INP€€UT FORMATS :_^1*_]_^1******_,(1)_"MODIFY ORDINAL "LSO"_^1*_]_^1*_1LSO,O,L,B/DATA_^1*_]_^1******_,(2)_"MODIFY MM "LSM"_^1*_]_^1*_1LSM,SSMSB,SSLSB,SW/DATA_^1*_]_^1*_5WHERE DATA = SIGNED/UNSIGNED 7 DIGITS VALUE_^1*_BWITH/WITHOUT DECIMAL POINT_^1*_]_^1*_8O_#=ORDINAL NO. (DECIMAL)_^1*_8L_#= LOCATION IN MODULE (HEX)_^1*_8B_#= BASE (HEX) (DEFAULT = 0)_^1*_]_^1*_8SSMSB = START SECTOR€€ MSB (HEX)_^1*_8SSLSB = START SECTOR LSB (HEX)_^1*_8SW_"= START WORD (HEX)_^1*_]_^1*_;COMMA IS USED TO SEPARATE 2 VALUES_^1*_]_^1*_;DATA = SIGNED FLOATING POINT VALUE_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_%N A M E S_^1_%ENT LSOREQ_^1_%ENT LSMREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT ECONV_(E- OR F-FORMAT CONVERSION -- SINGLE_^1_%EXT MMADDR_^1_%EXT MSG_^1_%EXT MSIZV4€€_'MAX. SIZE OF CORE OF SYSTEM_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASSLU($8C2)_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU CSY€€LEN($E6)_!LENGTH OF SYSTEM DIRECTORY (IN THIS LOC.)_^1_%EQU CSYDIR($E7)_!INDEX OF FIRST MM DIRECTORY_^1_%EQU EXTBV4($E9)_^1_%EQU DIRTRY($EB)_!SYSTEM DIRECTORY CORE LOCATION_^1_%EQU LSO(60)_%COMMAND "LSO" INDEX_^1_%SPC 2_^1*_1SUBROUTINE POINTER (FOR REQUEST)_^1_%EQU GETFLD(2)_#"GETFLD" --- GET FIELD SUBROUTINE_^1_%EQU ASCHEX(3)_#"ASCHEC" --- ASC TO HEX._^1_%EQU ASCDEC(5)_#AS€€E TO DEC._^1_%EQU GETINT(8)_#"GETINT" --- GET SINGLE/DOUBLE PRECISION VALUE_^1_%EQU FETMM(9)_$FETMM --- FETCH/CONVERT MM ADD._^1_%EQU FLCVSG(13)_""FLCVSG" --- PRINT VALUE AND CONFIRM_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PACKAGE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" EN€€TRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER€€"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LSOREQ STA* BASE_^1_%EQU LSMREQ(LSOREQ)_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA DATBUF_^1_%STA BUFADD_^1_%LDA- HANDLE,I_^1_%STA EXTHAN_^1_%LDA- BMSG,I_'FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- PROG2,I_%GET PROGRAM TYPE_^1_%INA -LSO_^1_%SAZ LSO1_)SKIP ON "LSO"_^1_%SPC 2_^1*_]_^1****_.GET "L€€SM" DATA --- MM ADDRESSES_^1*_]_^1LSM_"ENQ 0_^1_%LDA- NEWMLU,I_$GET LU_^1_%STA MSB_/FOR MM SIZE CHECK INCONJUNCTION WITH ADD._^1_%STA COUNT-1_^1_%STA XF2WD-1_^1_%ENA FETMM_^1_%RTJ* (EXTHAN)_^1_%ADC MSB-*_^1_%JMP* LSOM_^1_%SPC 2_^1*_]_^1******_,MODIFY ORDINAL, GET (1) ORDINAL, LOC., AND BASE_^1*_]_^1LSO1_!ENA GETFLD_'GET ORDINAL_^1_%ENQ 3_^1_%RTJ* (EXTHAN)_^1_%ENA ASCDEC_€€'CONVERT TO DEC._^1_%RTJ* (EXTHAN)_^1_%SAZ LER_^1_%SAP LSO2_^1LER_"ENQ 4_,TO PRINT FORMAT ERROR_^1_%JMP* (EXTMSG)_^1*_]_^1LSO2_!RTJ ORDCHK_'TO CHECK IF ORDINAL WITHIN LIMIT/GET ADDRESS_^1_%ENQ 4_^1_%ENA GETFLD_'GET LOC._^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1LSPLOC NUM 0_^1*_1GET BASE ADDRESS_^1_%LDA- FIELD,I_^1_%INA -COMMA_'CHECK FOR COMMA (€€GET BASE)_^1_%SAN LSO5_)NO, SKIP_^1_%ENQ 4_,SET FOR 4 CHAR. MAX._^1_%ENA GETFLD_^1_%RTJ* (EXTHAN)_$GET BASE ADDRESS_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1LSOB_!NUM 0_^1_%LDA* LSOB_)ASSEMBLE ADDRESS = BASE + L_^1_%ADD* LSPLOC_^1_%STA* LSPLOC_^1_%STA MSB+2_^1LSO5_!ENA FETMM_(CONVERT TO WORD ADDRESSING_^1_%ENQ 2_^1_%RTJ* (EXTHAN)_^1_%ADC MSB-*_^1_%SPC 1_^1*_1CH€€ECK FOR FORMAT ---- CONTROL CHAR = SLASH_^1LSOM_!LDA- FIELD,I_%IS CONTROL CHAR. = SLASH_^1_%INA -SLASH_^1_%SAZ LSP10_^1_%JMP* LER_*TO PRINT FORMAT ERROR_^1_%SPC 2_^1*_]_^1****_.TO OBTAIN SINGLE PRECISION VALUE_^1*_]_^1LSP10 STA- SLASHF,I_^1_%STA* COUNT_^1LSP11 ENQ 7_,SET FOR 7 DIGIT MAX_^1_%ENA GETINT_'GET DECODE SINGLE/DOUBLE PRECISION_^1_%RTJ* (EXTHAN)_^1_%ADC VALUE-*_^€€1_%SPC 2_^1*_]_^1*****_-REQUEST SPACE TO BRING IN FLOATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* LSP32_(TO ERROR (I/O ERROR)_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM€€ TO BE READ_^1_%STQ* LSP31_^1_%STQ* LSP40_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-SELF_^1_%STA* LSP24_^1_%INA XFRDRT-LSP30_^1_%STA* XFRDAD_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO "MMADDR" FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SA€€VE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP24 NUM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC ECONV_(E- OR F-FO€€RMAT CONVERSION -- SINGLE_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE DUE TO ERROR_^1_%NUM $1800_^1LSP31 NUM 0_,CORE ADD. TO BE FILLED_^1LSP32 LDQ* BASE_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1BASE_!NUM 0_,PARAMETER BASE ADD._^1LSP35 ENQ 0_^1_%RTJ* (LSP13)_^€€1_%ADC VALUE-*_^1LSP37 RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%LDQ* COUNT_^1_%LDA* VALUE+13_$SAVE FLOATING VALUE IN TEMPORARY STORAGE_^1_%STA* TEMP,Q_^1_%LDA* VALUE+14_^1_%STA* TEMP+1,Q_^1_%RAO* COUNT_(UPDATE STORAGE COUNT BY 2_^1_%RAO* COUNT_^1*_1CHECK IF ALL INPUT TEXT BEED PROCESSED_^1_%LDA* BASE_^1_%STA- I_^1_%LDA- BUFEMT,I_^1_%SAM €€LSO113_'DONE, SKIP_^1_%JMP* LSP11_(TO REPEAT_^1*_1CONSTANTS OR STORAGE LOC._^1EXTMSG NUM 0_,"MSG" ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1_%SPC 3_^1*_]_^1******_,GET MASS MEMORY DATA ACCORDING TO REQUEST TYPE_^1*_]_^1*_]_^1LSO113 LDA MSB_*GET WORD ADDRESSING MSB AND SET UP FOR READ/_^1_%STA* XFMSB1_+WRITE OPERATION_^1_%STA* XFMSB2_^1_%LDA* LSB_*GET LSB_^1_%STA* XFLSB1_^1_%STA* XF€€LSB2_^1_%RTJ- (AMONI)_^1XFRDCD ADC $200+CHRSLV_!READ_^1XFRDAD NUM 0_,RETURN (FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1COUNT NUM 0_,NO OF WORDS_^1BUFADD NUM 0_,BUFFER ADD. (FILLED)_^1XFMSB1 NUM 0_,MSB (FILLED)_^1XFLSB1 NUM 0_,LSB_^1_%JMP- (ADISP)_^1*_]_^1XFRDRT SQP XFOR_^1_%JMP* LSP32_(TO I/O ERROR_^1_%SPC 3_^1*_]_^1*****_-MM DATA IN CORE, GET CONFIRMATION_^1*_]_^€€1XFOR_!LDQ* COUNT_^1_%STQ* XF2WD_^1_%ENA FLCVSG_'TO PRINT DATA AND REQUEST CONFIRMATION_^1_%RTJ* (EXTHAN)_^1_%ADC TEMP-*_^1_%ADC DATBUF-*_^1*_1DATA CONFIRMED, SAVE_^1_%RTJ- (AMONI)_^1XF2CD ADC $500+CHRSLV_!WRITE_^1COMBK ADC FINRT-XF2CD_!RETURN_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1XF2WD NUM 0_,NO. OF WORDS (FILLED)_^1_%ADC TEMP-XF2CD_"BUFFER_^1XFMSB2 NUM 0_,MSB (FILLED)€€_^1XFLSB2 NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1DATBUF NUM 0_,BUFFER (FILLED)_^1*_]_^1FINRT LDA* CORLSB_'CHECK IF CORE ORDINAL_^1_%SAZ GETOUT_'NO, SKIP_^1*_]_^1_%STA- I_,SET INDEX WITH CORE LOCATION_^1_%ENQ 0_,MOVE DATA TO CORE ORDINAL LOCATION_^1TOCORE LDA* TEMP,Q_^1_%STA- (ZERO),B_^1_%INQ 1_^1_%TRQ A_,CHECK IF ALL DATA BEEN MOVED_^1_%SUB* COUNT_^1_%SAZ GETOUT_'YES, DONE_€€^1_%JMP* TOCORE_'NO, TO REPEAT_^1*_]_^1GETOUT LDQ* BASE_)EXIT TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1*_]_^1_%SPC 1_^1VALUE BZS VALUE(15)_^1TEMP_!BZS TEMP(20)_$FLOATING VALUE TEMPORARY STORAGE_^1_%SPC 3_^1*_]_^1*******_%*****_#SYSTEM DIRECTORY ORDINAL CHECK_#*****_^1*_]_^1ORDCHK NOP 0_,ENTRY_^1_%STA* ORD10_(SAVE ORDINAL NO._^1_%ENQ 0_,ZERO OUT CORE ORDINAL FLAG_^1_€€%STQ* CORDIR_^1_%STQ* MSB_^1_%JMP* ORDM_^1MSB_"BZS MSB(5)_^1_%EQU LSB(MSB+1)_^1_%SPC 2_^1*_]_^1*_$-----_%FOR MM DIRECTORY PROCESSING_^1*_]_^1ORDM_!LDA- CSYLEN_'GET DIRECTORY LENGTH AND SUBTRACT CORE DIRECT._^1_%SUB- CSYDIR_+LENGTH_^1_%DVI- LPMSK+3_%CONVERT TO NO. OF MM DIRECTORY NO._^1_%SUB* ORD10_(CHECK IF OVER SYSTEM MAX._^1_%SAP ORDM2_(NO, SKIP_^1_%ENQ 11_+TO PRINT ORDINAL €€NO. ERROR (OVER MAX.)_^1_%JMP* (EXTMSG)_^1*_]_^1ORDM2 LDA* ORD10_^1_%INA -1_^1_%MUI- LPMSK+3_%*7_^1_%ADD- DIRTRY_^1_%ADD- CSYDIR_'CORE DIRECTORY OFF-SET, IF ANY_^1_%TRA Q_^1_%LDA- 6,Q_*GET LSB_^1_%STA* LSB_^1_%LDA- 5,Q_*GET AND SAVE MSB_^1_%STA* MSB_^1_%ENA 0_^1_%STA* MSB+2_^1_%JMP* (ORDCHK)_$RETURN_^1*_]_^1ORD10 NUM 0_^1CORLSB NUM 0_^1CORDIR NUM 0_^1NO96ST NUM 96_^1_%SPC €j 2_^1*_]_^1_%EQU SA60(*/96)_^1_%EQU SP60(SA60+1)_^1_%EQU DB60(SP60*96)_^1_%BSS (DB60-*)_^1_%END_]_^__jPCCCREQ CSY/ H79 P€1_%NAM CCCREQ_'DECK-ID H79 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,****************************************************_^1*_,*_Q*_^1*_,*_#THIS PROCESSOR COMPARE CORE TO CORE DATA_#*_^1*_,*_Q*_^1*_,****************************************************_^1******_,INPUT FORMAT :_^1*_]_^1*_*CCC,SC,EC,NSC(CR)_^1*_]_^1*_1WHERE SC = BE€€GINNING CORE LOCATION OF BLOCK 1 (HEX)_^1*_8EC = END CORE LOCATION OF BLOCK 1 (HEX)_^1*_8NSC = BEGINNING CORE LOCATION OF BLOCK 2 (HEX)_^1*_]_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1*_*(1) NO DISCREPANCY ENCOUNTERED_^1*_]_^1*_/'DB SEARCH FINISHED'_^1*_]_^1*_*(2) DISCREPANCY DETECTED_^1*_]_^1*_/'CELL CONTENTS'_^1*_]_^1*_0L111 (XXXX)_"L222(YYYY)_^1*_]_^1*_1WHERE L111 = B€€LOCK 1 LOCATION_^1*_8L222 = BLOCK 2 LOCATION_^1*_8XXXX = BLOCK 1 DATA_^1*_8YYYY = BLOCK 2 DATA_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT CCCREQ_^1_%SPC 1_^1*_1E X T E R N A L_^1_%EXT MSIZV4_'MAX. CORE SIZE_^1_%EXT OFF_^1_%EXT HANDLE_^1_%EXT CHRSFG_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%SPC 5_^1*_€€1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU EXTBV4($E9)_!AD€€DRESS OF EXTENDED CORE TABE_^1_%EQU ASMOD($1000) ASCII OUTPUT MODE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"€€PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1****_)*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1CCCREQ STA* BASE_^1_%STA- I_^1_%LDQ- BHAN,I_'GET "HANDLE" ADDRESS_^1_%STQ* EXTHAN_^1_%LDA€€* OOT+1_(CALCULATE "OFF" ADDRESS_^1_%SUB* OOT_^1_%AAQ A_^1_%STA* EXTOFF_^1_%LDA- MSG,I_(OBTAIN "MSG" LOCATION_^1_%STA* EXTMSG_^1_%LDA- COMOLU,I_$GET OUTPUT COMMENT LU_^1_%ADD* MODE_^1_%STA* OTLU1_^1_%STA OTLU2_^1_%ENA 0_^1_%STA* COUNT_^1_%STA* HEADIG_^1_%LDA =XMSIZV4_$SET UP MAX. CORE SIZE_^1_%STA* MAX_^1*_1GET ADDRESS_^1CCC1_!ENA GETFLD_'TO "GETFLD" TO FETCH ADD._^1_%ENQ 4_€€,SET 4 CHAR. IS MAX._^1_%RTJ* (EXTHAN)_^1_%LDA- FIELD,I_%CHECK IF EMPTY_^1_%SAZ CCC5_^1_%SUB- LPMSK+8_%IS END OF TEXT_^1_%SAN CCC2_^1_%LDA* COUNT_(MAKE SURE IS THE THIRD ONE_^1_%INA -2_^1_%SAZ CCC5_^1_%JMP* CCC3_)ERROR_^1CCC2_!ADD- LPMSK+8_^1_%INA -COMMA_'CHECK FOR COMMA_^1_%SAZ CCC5_^1*_]_^1OOT_"ADC HANDLE_'0. "HANDLE"_^1_%ADC OFF_*1. "OFF" ENTRY_^1*_]_^1CCC3_!ENQ 4_+INCO€€RRECT FORMAT_^1_%JMP* (EXTMSG)_^1*_]_^1CCC5_!ENA ASCHEX_'CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1CCCVA NUM 0_^1_%LDQ* COUNT_^1_%LDA* CCCVA_(SAVE ADDRESS ACCORDING TO COUNTER INDEX_^1_%STA* CCCLOC,Q_^1_%RTJ* CORADK_'TO CHECK IF CORE LOC. WITHIN LIMIT_^1_%JMP* CCC3_)ADDRESS ERROR, GO_^1_%RAO* COUNT_^1_%LDQ* COUNT_(CHECK IF ALL ADDRESSES ARE IN_^1_%INQ -3_+CHECK IF ALL 3 ADDRESSES BEEN€€ EXTRACTED_^1_%SQZ CCC10_(SKIP, DONE_^1_%JMP* CCC1_^1_%SPC 3_^1*_]_^1*****_-ALL ADDRESSES ARE IN, LEGALITY CHECK_^1*_]_^1CCC10 LDA- BUFEMT,I_$MAKE SURE INPUT IS EMPTY_^1_%EOR- LPMSK+16_^1_%SAZ CCC11_^1_%JMP* CCC3_)FORMAT ERROR_^1_%SPC 3_^1*_]_^1*****_-CHECK CORE ADDRESSES (32K OR 65K)_^1*_]_^1CCC11 LDQ- EXTBV4_^1_%LDA- (ZERO),Q_$GET 32K/65K FLAG_^1_%SAN CCC22_(SKIP O€€N 65K_^1CCC15 LDA* CCCLOC+1_$CALCULATE DIFFERENT OF END AND START_^1_%SUB* CCCLOC_^1_%SAM CCC19_^1CCC17 STA* DIFF_^1_%ADD* CCCLOC+2_^1_%SAM CCC19_^1_%SUB* MAX_^1_%SAZ CCC20_^1_%SAM CCC20_^1CCC19 JMP* CCC3_^1CCC20 JMP* CCC45_^1*_]_^1EXTOFF NUM 0_,"OFF" ADDRESS_^1_%SPC 1_^1*_165K OR LESS, BUT OVER 32-K_^1CCC22 LDA* CCCLOC+1_$GET END ADD._^1_%LDQ* CCCLOC_+START ADD._^1_%€€SQM CCC32_(SKIP FOR START IS 32K AND OVER_^1_%SAM CCC28_^1*_1HERE, BOTH ARE POSITIVE (32K OR LESS)_^1_%SUB* CCCLOC_^1_%SAP CCC37_(TO SAVE DIFFERENT_^1_%JMP* CCC3_)ERROR_^1*_1HERE, START = 32K OR LESS, END = OVER 32K_^1CCC28 SUB* CCCLOC_^1_%TCA A_^1_%SAP CCC37_^1_%JMP* CCC3_)ERROR_^1_%SPC 1_^1****_.START ADD. OVER 32K_^1CCC32 SAP CCC34_(ERROR, END LESS/EQUAL 32K_^1_%SUB* C€€CCLOC_^1_%SAP CCC37_^1CCC34 JMP* CCC3_^1*_]_^1CCC37 STA* DIFF_)SAVE DIFF_^1_%LDQ* CCCLOC+2_$BLOCK 2 ADD._^1_%ADD* CCCLOC+2_^1_%SQP CCC45_(SKIP IF LESS/EQUAL TO 32K_^1_%SAP CCC39_(ERROR, TOO LARGE_^1_%SUB* MAX_^1_%SAM CCC45_^1_%SAZ CCC45_^1CCC39 JMP* CCC3_)ERROR, OVER MAX._^1_%SPC 3_^1*_]_^1****_.ADDRESSES ARE OK._^1*_]_^1CCC45 LDQ* CCCLOC_'SET UP START ADDRESSES OF BLOC€€KS 1 AND 2_^1_%LDA* CCCLOC+2_^1_%STA- I_^1CCC50 LDA* DIFF_)CHECK IF DONE_^1_%SAP CCC52_^1*_1DONE_^1_%ENQ 7_,TO PRINT SEARCH DONE_^1_%JMP* (EXTMSG)_^1*_]_^1CCC52 LDA- (ZERO),Q_$CHECK IF DATA DIFFERENT_^1_%SUB- (ZERO),I_^1_%SAN CCC56_^1CCC54 LDA* DIFF_)ADJUST POINTERS_^1_%INA -1_^1_%STA* DIFF_^1_%RAO- I_^1_%INQ 1_^1_%JMP* CCC50_^1*_1ERROR_^1CCC56 LDA* HEADIG_'CHECK IF HEADIN€€G BEEN PRINTED_^1_%STQ* CURB1_(SAVE CURRENT ADDRESSES_^1_%LDQ- I_^1_%STQ* CURB2_^1_%SAZ CCC58_^1_%JMP* CCC66_^1*_1PRINT HEADING_^1CCC58 RAO* HEADIG_^1_%RTJ- (AMONI)_^1CCCWT1 ADC $500+CHRSLV_^1_%ADC CCCRT1-CCCWT1_^1_%NUM 0_^1OTLU1 NUM 0_,LU (TO BE FILLED)_^1_%ADC CCCE1-CCCHED+1_^1_%ADC CCCHED-CCCWT1_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_1STOREAGE AND/OR CONSTANTS_^1BASE_!NUM 0€€_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1COUNT NUM 0_^1HEADIG NUM 0_,MESSAGE HEADING FLAG_^1MODE_!ADC ASMOD_^1DIFF_!NUM 0_^1CCCLOC BZS CCCLOC(3)_^1MAX_"NUM 0_^1*_]_^1CCCRT1 SQP CCC66_^1CCCWE LDQ* BASE_)I/O ERROR_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 2_^1*_]_^1*****_-ASSEMBLE DATA WITH LOCATIONS AND OUTPUT_^1*_]_^1CCC66 LDA* CURB1_(TO ASSEMBLE BLOCK 1 DATA_^1_%RTJ* ASMASC€€_^1_%ADC CCCEL1-*_^1_%LDA* CURB2_4BLOCK 2 DATA_^1_%RTJ* ASMASC_^1_%ADC CCCEL2-*_^1_%RTJ- (AMONI)_^1CCCWT2 ADC $500+CHRSLV_^1_%ADC CCCRT2-CCCWT2_^1_%NUM 0_^1OTLU2 NUM 0_,LU (TO BE FILLED)_^1_%ADC CCCE2-CCCONT+1_^1_%ADC CCCONT-CCCWT2_^1_%JMP- (ADISP)_^1*_]_^1CCCRT2 SQP CCC70_^1_%JMP* CCCWE_(IO ERROR_^1CCC70 LDA CHRSFG_'CHECK FOR "DX"_^1_%SAN CCC77_(NO, SKIP_^1_%JMP* (EXT€€OFF)_$TO "OFF"_^1CCC77 LDA* CURB2_(RESTORE BLOCKS 1 AND 2 ADDRESS_^1_%STA- I_^1_%LDQ* CURB1_^1_%JMP* CCC54_(TO REPEAT_^1_%SPC 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 65K_^1_%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX €€JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR SO_^1_%SUB* MAX_^1_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1_%SPC 1_^1*_]_^1CCCHED NUM $A0D_^1_%ALF 8, CELL CONTENTS_^1CCCE1 NUM $A0D_^1*_]_^1CCCONT NUM $A0D_^1_%ALF 1,_^1CCCEL1 NUM 0€€,0_*BLOCK 1 ADDRESS_^1_%ALF 1, (_^1CCCON1 NUM 0,0_*CONTENT OF BLOCK 1_^1_%ALF 1,)_^1_%ALF 2,_^1CCCEL2 NUM 0,0_*BLOCK 2 ADDRESS_^1_%ALF 1, (_^1CCCON2 NUM 0,0_*CONTENT OF BLOCK 2_^1CCCE2 ALF 1,)_^1CURB1 NUM 0_^1CURB2 NUM 0_^1_%SPC 5_^1*_]_^1************************************************************************_^1*_]_^1_%SPC 1_^1*_]_^1******_,ASSEMBLE LOCATION AND CO€€NTENT INTO ASCII_^1*_]_^1ASMASC NOP 0_,ENTRY_^1_%STA* A0_+SAVE LOCATION_^1_%LDQ* (ASMASC)_^1_%ADQ* ASMASC_^1_%STQ* A1_+SAVE DATA CONTENT ADD._^1_%RTJ* TW_+ASSEMBLE INTO ASCII_^1_%LDA* A1_^1_%INA 3_,SET TO CONTENT LOC._^1_%STA* A1_^1_%LDA* (A0)_)GET CONTENT_^1_%RTJ* TW_+ASSEMBLE INTO ASCII_^1_%RAO* ASMASC_'SET EXIT_^1_%JMP* (ASMASC)_$EXIT_^1_%SPC 2_^1*_]_^1A0_#NUM 0_^1A1_#NUM 0€€_^1_%SPC 2_^1*_]_^1TW_#NOP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* TW1_*ZERO COUNT_^1TW0_"LLS 4_,EXTRACT 4-BIT BYTE_^1_%STA* TW2_^1_%INQ -10_*ASSEMBLE INTO ASCII ACCORDING TO NO. OR A-F_^1_%SQM TWX_^1_%INQ 7_^1TWX_"INQ $3A_^1_%LLS 16_+TO A-REG._^1_%LDQ* TW1_^1_%STA* TW3,Q_(SAVE ACCORDINGLY_^1_%INQ 1_^1_%STQ* TW1_^1_%INQ -4_^1_%SQZ TWAS_)DONE, ALL 4 BYTE BEEN PROCESSED_^1_%LDA* TW2_€€^1_%ENQ 0_^1_%JMP* TW0_^1*_]_^1TW1_"NUM 0_^1TW2_"NUM 0_^1TW3_"BZS TW3(4)_^1TWAS_!LDQ* A1_+ASSEMBLE INTO 2-WORD AND SAVE_^1_%LDA* TW3_^1_%ALS 8_^1_%ADD* TW3+1_^1_%STA- (ZERO),Q_^1_%LDA* TW3+2_^1_%ALS 8_^1_%ADD* TW3+3_^1_%INQ 1_^1_%STA- (ZERO),Q_^1_%JMP* (TW)_)RETURN_^1_%SPC 3_^1*_]_^1_%EQU SA43(*/96)_^1_%EQU SP43(SA43+1)_^1_%EQU DB43(SP43*96)_^1_%BSS (DB43-*)_^1_%END_]_^€___%ENQ 0_^1_%JMP* TWPCCMREQ CSY/ H80 P€1_%NAM CCMREQ_'DECK-ID H80 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,*******************************************************_^1*_,*_T*_^1*_,*_#THIS PROCESSOR COMPARES CORE TO MASS MEMORY_#*_^1*_,*_T*_^1*_,*******************************************************_^1*_]_^1*_]_^1******_,INPUT FORMAT :_^1*_]_^1*_8CCM,SC,EC,SSMSB,SSLSB,€€SW(CR)_^1*_]_^1*_1WHERE SC_"= STARTING CORE (HEX.)_^1*_8EC_"= ENDING CORE (HEX.)_^1*_8SSMSB = START SECTOR MSB (HEX.)_^1*_8SSLSB = START SECTOR LSB (HEX.)_^1*_8SW_"= START WORD (HEX.)_^1*_]_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1*_1MASS MEMORY DATA_^1*_]_^1*_1CCCC (XXXX)_"MMLLLL/WWWW_!(YYYY)_^1*_]_^1*_]_^1*_1WHERE CCCC = CORE ADD._^1*_8XXXX = CORE DATA_^1*_8MM_!= START €€SECTOR MSB_^1*_8LLLL = START SECTOR LSB_^1*_8WWWW = START WORD_^1*_8YYYY = MASS MEMORY DATA_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT CCMREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT MSIZV4_'MAX. CORE SIZE_^1_%EXT OFF_^1_%EXT HANDLE_^1_%EXT CHRSFG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43)€€,SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU NO96(96)_$BUFFER SIZE_^1_%EQU EXTBV4($E9)_!CORE LOCATION CONTAINS ADD. OF EXTENDED CORE_^1_€€%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU €€ BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$'FETMM' --- GET MM ADDRESS_^1_%EQU PNTMD(10)_#"PNTMD" --- PRINT BOTH CORE AND MM DATA_^1_%SPC€€ 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1CCMREQ STA* BASE_^1_%STA- I_^1_%LDQ- BHAN,I_^1_%STQ* EXTHAN_^1_%LDA* OOT+1_(CALCULATE "OFF" ADDRESS_^1_%SUB* OOT_^1_%AAQ A_^1_%STA* EXTOFF_^1_%LDA- MSG,I_^1_%STA* EXTMSG_^1_%LDA- NEWMLU,I_$GET MM LU AND SAVE_^1_%STA* OTLU_^1_%STA CCMLOC+2_^1_%ENA 0_^1_%STA* COUNT_^1_%STA* HEADIG_^1_%LDA =XMSIZV4_$GET M€€AX. CORE SIZE_^1_%STA* MAX_^1_%SPC 1_^1*_1GET STARTING AND ENDING CORE LOCATIONS_^1CCM3_!ENA GETFLD_'GET FIELD --- CORE LOC._^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1CCMCOR NUM 0_^1_%LDQ* COUNT_^1_%LDA* CCMCOR_^1_%STA* CCMLOC,Q_$SAVE CORE LOC. ACCORDINGLY_^1_%RTJ* CORADK_'TO CHECK IF CORE LOC. WITHIN LIMIT_^1_%JMP* CCM11_(ERROR, GO_^1_%LD€€Q* COUNT_^1_%SQN CCM6_)DONE, SKIP_^1_%RAO* COUNT_^1_%JMP* CCM3_^1OOT_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF" ENTRY_^1*_1MAKE SURE END LOC. IS LARGER/EQUAL TO START_^1CCM6_!LDA* CCMLOC_^1_%LDQ* CCMLOC+1_^1_%SAM CCM13_^1_%SQP CCM10_^1_%JMP* CCM20_^1CCM10 SUB* CCMLOC+1_^1_%SAM CCM20_^1CCM11 ENQ 4_,FORMAT ERROR (END LESS/EQUAL TO START)_^1_%JMP* (EXTMSG)_^1*_1ST€€ART OVER 32K, CHECK END_^1CCM13 SQP CCM15_^1_%ADQ* CCMLOC_'BOTH OVER 32K_^1_%SQM CCM20_^1CCM15 JMP* CCM11_(TO ERROR_^1_%SPC 1_^1*_1GET MM ADD._^1CCM20 ENA FETMM_^1_%ENQ 1_^1_%RTJ* (EXTHAN)_^1_%ADC CCMLOC+2-*_^1_%LDA- BUFEMT,I_$MAKE SURE FORMAT OK_^1_%EOR- LPMSK+16_^1_%SAZ CCM24_^1_%JMP* CCM11_^1_%SPC 2_^1****_.ALL INPUT IN, READ MM DATA_^1CCM24 ENA NO96_)SET UP SIZ€€E AND MM ADD._^1_%STA* CCMZ_^1_%LDA* CCMLOC+2_^1_%STA* CCMM_^1_%LDA* CCMLOC+3_^1_%STA* CCML_^1_%RTJ- (AMONI)_^1CCMCD ADC $300+CHRSLV_!READ_^1_%ADC CCMRT-CCMCD_!RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1CCMZ_!ADC NO96_)SIZE (FILLED)_^1_%ADC MMDAT-CCMCD_!BUFFER_^1CCMM_!NUM 0,0_*MSB AND LSB (FILLED)_^1_%EQU CCML(CCMM+1)_^1_%JMP- (ADISP)_^1*_]_^1CCMRT SQP C€€CM30_^1_%LDQ* BASE_^1_%LDQ- IOERR,Q_%TO "IOERR"_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_1TO COMPARE DATA_^1CCM30 LDA* CCMLOC_'SET UP CORE LOC._^1_%STA- I_^1_%ENQ 0_^1CCM31 LDA- (ZERO),I_$CORE DATA - MM DATA_^1_%SUB* MMDAT,Q_^1_%SAZ CCM32_(SKIP DATA MATCHED_^1_%JMP* CCM50_(TO PRINT_^1CCM32 RAO- I_,BUMP CORE LOC. BY 1_^1_%RAO* CCMLOC+6_^1_%LDA- I_,CHECK IF ALL DONE_^1_%SUB* CCMLOC+1_^1€€_%SAZ GONE_^1_%LDA CHRSFG_'CHECK FOR "DX"_^1_%SAN CCM34_(NO "DX" , SKIP_^1TOFF_!JMP* (EXTOFF)_$TO "OFF"_^1*_1D O N E ---- EXIT_^1GONE_!LDQ* BASE_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1EXTOFF NUM 0_,"OFF" ADDRESS (FILLED)_^1*_]_^1CCM34 INQ 1_^1_%TRQ A_,CHECK IF BUFFER EMPTY_^1_%SUB* CCMZ_^1_%SAZ CCM39_^1_%JMP* CCM31_(TO REPEAT_^1€€CCM39 LDA* CCMLOC+3_$UP DATE MSB AND LSB_^1_%ADD* CCMZ_^1_%SAP CCM42_^1_%AND- LPMSK+15_^1_%RAO* CCMLOC+2_^1CCM42 STA* CCMLOC+3_^1_%LDA- I_^1_%STA* CCMLOC_'SAVE CURRENT CORE LOCATION_^1_%JMP* CCM24_(TO REPEAT_^1_%SPC 2_^1*_1DATA UNMATCHED, SET UP TO PRINT_^1CCM50 STQ* QIND_^1_%LDA- I_^1_%STA* ICOR_^1_%LDA* HEADIG_'CHECK IF HEADING BEEN PRINTED_^1_%SAN CCM52_^1_%RAO* HEADIG_'SE€€T HEADING FLAG_^1_%ENA PNTMD_^1_%ENQ 0_,TO PRINT HEADING_^1_%RTJ* (EXTHAN)_^1CCM52 ENA PNTMD_^1_%ENQ 4_,SET CORE DATA_^1_%RTJ* (EXTHAN)_^1_%ADC ICOR-*_^1_%ENA PNTMD_^1_%ENQ 2_,TO INSERT MM DATA AND PRINT_^1_%RTJ* (EXTHAN)_^1_%ADC CCMLOC+4-*_^1_%ADC QIND-*_^1_%ADC MMDAT-*_^1_%LDA CHRSFG_'CHECK FOR "DX"_^1_%SAN CCM199_'NO, SKIP_^1_%JMP* TOFF_^1CCM199 LDA* ICOR_)RESTORE I€€ AND Q-REG._^1_%STA- I_^1_%LDQ* QIND_^1_%JMP* CCM32_^1_%SPC 1_^1*_1S T O R A G E_^1COUNT NUM 0_^1HEADIG NUM 0_^1MAX_"NUM 0_^1CCMLOC BZS CCMLOC(7)_^1QIND_!NUM 0_^1ICOR_!NUM 0_^1_%SPC 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 65K_^1_%SAM AD32EX_'ERROR, €€OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR SO_^1_%SUB* MAX_^1_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1*_]_^1MMDAT BZS MMDAT(96)_^1_%SPC 3_^1*_]_^1_%EQU SA51(*/96)_^1_%€HEQU SP51(SA51+1)_^1_%EQU DB51(SP51*96)_^1_%BSS (DB51-*)_^1_%END_]_^__HPCMMREQ CSY/ H81 P€1_%NAM CMMREQ_'DECK-ID H81 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***********************************************_^1*_,*_L*_^1*_,*_#THIS PROCESSOR COMPARES MASS MEMORY_#*_^1*_,*_L*_^1*_,***********************************************_^1*_]_^1*_]_^1******_,INPUT FORMAT :_^1*_]_^1*_*CMM,LU,SSMSB,SSLSB,SW,NW,NLU,NSMSB,NSLSB,NNW(C€€R)_^1*_]_^1*_]_^1*_1WHERE LU_"= LOGICAL UNIT OF BLOCK 1 (DECIMAL)_^1*_8SSMSB = START SECTOR OF BLOCK 1 (HEX) MSB_^1*_8SSLSB = START SECTOR OF BLOCK 1 (HEX) LSB_^1*_8SW_"= START WORD OF BLOCK 1 (HEX)_^1*_8NW_"= NO. OF WORDS FOR COMPARE (HEX)_^1*_8NLU_!= LOGICAL UNIT OF BLOCK 2 (DECIMAL)_^1*_8NSMSB = START SECTOR OF BLOCK 2 (HEX) MSB_^1*_8NSLSB = START SECTOR OF BLOCK 2 (HEX) LSB_^1€€*_8NNW_!= START WORD OF BLOCK 2 (HEX)_^1*_]_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1*_*M1LLL1/WWW1 (XXXX)_#M2LLL2/WWW2 (YYYY)_^1*_]_^1*_]_^1*_1WHERE M1_!= MSB (2 HEX. DIGITS) OF BLOCK 1_^1*_8LLL1 = LSB (4 HEX. DIGITS) OF BLOCK 1_^1*_8WWW1 = WORD OF BLOCK 1_^1*_8M2_!= SAME AS "M1" EXCEPT FOR BLOCK 2_^1*_8LLL2 = SAME AS "LLL1" EXCEPT FOR BLOCK €€2_^1*_8WWW2 = WORD OF BLOCK 2_^1*_8XXXX = BLOCK 1 DATA FOR THE ADDRESS ON LEFT_^1*_8YYYY = BLOCK 2 DATA FOR THE ADDRESS ON LEFT_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT CMMREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT LOG1A_^1_%EXT NUMLU_^1_%EXT OFF_^1_%EXT HANDLE_^1_%EXT CHRSFG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($€€12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU NO48(48)_$NO. OF WORDS TO BE READ_^1_%SPC 2_€€^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(€€11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$"FETMM" --- GET AND CHECK MM ADD._^1_%EQU PNTMD(10)_#"PNTMD" --- PRINT MM ADD/DATA_^1_%SPC 3_^1*_]_^€€1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1CMMREQ STA* BASE_^1_%STA- I_^1_%LDQ- BHAN,I_^1_%STQ* EXTHAN_^1_%LDA* OOT+1_(CALCULATE "OFF" ADDRESS_^1_%SUB* OOT_^1_%AAQ A_^1_%STA* EXTOFF_^1_%LDA- MSG,I_(FETCH "MSG" LOCATION_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENA 0_^1_%STA* CMMLOC+5_^1_%STA* HEADIG_^1*_1GET BLOCK 1 LOGICAL UNIT_^1_%RTJ LUEXTR_^1_%STA* OLDLU_^1_%€€STA* MMINP_^1_%SPC 1_^1*_1TO EXTRACT MM ADDRESSES AND CHECK_^1_%ENA FETMM_(TO EXTRACT MM ADD., CONVERT TO WORD ADDRESSING_^1_%ENQ 1_3AND CHECK_^1_%RTJ* (EXTHAN)_^1_%ADC MMINP-*_^1*_1GET NO. OF WORDS AND BLOCK 2 LU_^1_%ENA GETFLD_'GET NEXT FIELD --- NO. OF WORDS_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_^1_%RTJ* (EXTHAN)_^1NW_#NUM 0_,NO. OF WORDS FOR COMPARE_^1_%LDA* NW_+M€€AKE SURE IS NON-ZERO OR "NULL" FIELD_^1_%SAM CMM2_^1_%SAZ CMM2_^1_%LDA- BUFEMT,I_^1_%EOR- LPMSK+16_^1_%SAN CMM6_^1*_]_^1CMM2_!ENQ 4_,INCORRECT FORMAT_^1_%JMP* (EXTMSG)_^1OOT_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF"_"ENTRY_^1CMM6_!RTJ LUEXTR_'GET BLOCK 2 LU_^1_%STA* NEWLU_^1_%STA* CMMLOC+5_^1_%ENA FETMM_(FETCH BLOCK 2 MM ADD._^1_%ENQ 1_^1_%RTJ* (EXTHAN)_^1_%ADC €€ CMMLOC+5-*_^1_%SPC 3_^1*_]_^1*****_%--------------------------------------------------_^1*_]_^1*****_-ALL ADDRESSES ARE IN, DO COMPARISON OF DATA_^1*_]_^1CMM15 LDA* CMMLOC_^1_%STA* BK1M_^1_%LDA* CMMLOC+1_^1_%STA* BK1L_^1_%LDA* CMMLOC+5_^1_%STA* BK2M_^1_%LDA* CMMLOC+6_^1_%STA* BK2L_^1*_1TWO READ REQUESTS ARE USED, IT IS SIMPLE AND DOES NOT_^1*_8USE MORE CORE_^1_%RTJ- (AMON€€I)_^1BK1CD ADC $300+CHRSLV_!READ REQUEST FOR BLOCK 1 DATA_^1_%ADC BK1RT-BK1CD_!RETURN_^1_%NUM 0_,THREAD_^1OLDLU NUM 0_,LU (TO BE FILLED)_^1_%ADC NO48_)48 WORDS_^1_%ADC BLOCK1-BK1CD_^1BK1M_!NUM 0_,MSB --- WORD ADDRESSING_^1BK1L_!NUM 0_,LSB_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1HEADIG NUM 0_^1EXTOFF NUM 0_,"OFF" ADDRESS (FILLED€€)_^1*_]_^1BK1RT SQM CMMIOE_'ERROR, SKIP_^1*_]_^1_%RTJ- (AMONI)_^1BK2CD ADC $300+CHRSLV_!READ BLOCK 2 DATA_^1_%ADC BK2RT-BK2CD_^1_%NUM 0_^1NEWLU NUM 0_,LU (TO BE FILLED)_^1_%ADC NO48_^1_%ADC BLOCK2-BK2CD_^1BK2M_!NUM 0_^1BK2L_!NUM 0_^1_%JMP- (ADISP)_^1*_]_^1BK2RT SQP CMM20_^1CMMIOE LDQ* BASE_)EXIT TO "IOERR"_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 3_^1*_]_^1****_.CO€€MPARE DATA_^1*_]_^1CMM20 ENQ 0_^1_%STQ* COUNT_^1CMM21 LDA* BLOCK1,Q_^1_%SUB BLOCK2,Q_^1_%SAN CMMPT_(DATA UNMATCHED_^1_%JMP* CMM22_^1CMMPT ENA PNTMD_^1_%LDQ* HEADIG_^1_%SQN CMMC1_(SKIP IF HEADING PRINTED_^1_%RTJ* (EXTHAN)_$PRINT HEADING_^1_%RAO* HEADIG_^1CMMC1 ENA PNTMD_^1_%ENQ 1_,INSERT BLOCK 1 MM ADD. AND DATA_^1_%RTJ* (EXTHAN)_^1_%ADC CMMLOC+2-*_^1_%ADC COUNT-*_^1_%€€ADC BLOCK1-*_^1_%ENA PNTMD_^1_%ENQ 2_,INSERT BLOCK 2 DATA AND PRINT_^1_%RTJ* (EXTHAN)_^1_%ADC CMMLOC+7-*_^1_%ADC COUNT-*_^1_%ADC BLOCK2-*_^1_%LDA CHRSFG_'CHECK FOR "DX"_^1_%SAN CMM220_'NO, SKIP_^1_%JMP* (EXTOFF)_$TO "OFF"_^1CMM220 LDQ* COUNT_^1CMM22 INQ 1_^1_%STQ* COUNT_^1_%RAO* CMMLOC+4_^1_%RAO* CMMLOC+9_^1_%LDA* NW_+DECREMENT NO. OF WORD BY 1 AND EXAMINE IF ALL_^1_%INA €€ -1_0DATA BEEN COMPARED_^1_%STA* NW_^1_%SAP CMM25_^1*_1DONE --- PRINT MESSAGE_^1_%ENQ 7_^1_%JMP* (EXTMSG)_^1COUNT NUM 0_^1CMMLOC BZS CMMLOC(10)_^1_%EQU MMINP(CMMLOC)_^1*_]_^1CMM25 TRQ A_,CHECK IF BUFFER EMPTY_^1_%INA -NO48_^1_%SAP CMM30_^1CMM27 JMP* CMM21_(REPEAT_^1_%SPC 1_^1*_1UPDATE MM ADD. TO GET NEW DATA_^1CMM30 LDA* CMMLOC+1_^1_%INA NO48_^1_%SAP CMM32_^1_%RAO* C€€MMLOC_^1_%AND- LPMSK+15_^1CMM32 STA* CMMLOC+1_^1_%LDA* CMMLOC+6_^1_%INA NO48_^1_%SAP CMM34_^1_%RAO* CMMLOC+5_^1_%AND- LPMSK+15_^1CMM34 STA* CMMLOC+6_^1_%JMP* CMM15_(TO REPEAT_^1_%SPC 3_^1*_]_^1*_!******************************************************************_^1*_]_^1*_]_^1****_.EXTRACT AND CHECK LOGICAL UNIT (MM)_^1*_]_^1LUEXTR NOP 0_,ENTRY_^1_%ENA GETFLD_'GET A FIE€€LD_^1_%ENQ 2_^1_%RTJ* (EXTHAN)_$GET LU_^1_%ENA ASCDEC_'CONVERT TO BINARY_^1_%RTJ* (EXTHAN)_^1_%SAZ LUER_)LU = 0, ERROR_^1_%STA* OVLYBF_'SAVE LU_^1_%TRA Q_^1_%SUB* MAXLU_^1_%INA -1_^1_%SAP LUER_)OVER MAX._^1_%LDQ LOG1A,Q_^1_%SQZ LUER_)UNDEFINED, ERROR_^1_%LDA- 8,Q_*GET UNIT CLASS CODE_^1_%ARS 11_^1_%AND- MASK+2_^1_%INA -2_+MASS MEMORY CLASS IS 2_^1_%SAZ LUGT_^1LUER_!ENQ €j9_,ERROR, TO PRINT_^1_%JMP* (EXTMSG)_^1*_]_^1LUGT_!LDA* OVLYBF_'RECALL LU AND EXIT_^1_%JMP* (LUEXTR)_^1OVLYBF NUM 0_^1MAXLU ADC NUMLU_(MAX. NO. OF LU_^1_%SPC 1_^1*_]_^1BLOCK1 BZS BLOCK1(48)_"BLOCK 1 DATA_^1BLOCK2 BZS BLOCK2(48)_"BLOCK 2 DATA_^1_%SPC 3_^1*_]_^1_%EQU SA52(*/96)_^1_%EQU SP52(SA52+1)_^1_%EQU DB52(SP52*96)_^1_%BSS (DB52-*)_^1_%END_]_^__jPMMMREQ CSY/ H82 P€1_%NAM MMMREQ_'DECK-ID H82 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,*************************************************_^1*_,*_N*_^1*_,*_#THIS PROCESSOR MOVES MASS MEMORY DATA_#*_^1*_,*_)FROM ONE SEGMENT TO ANOTHER_)*_^1*_,*_*--- WORD ADDRESSABLE ---_+*_^1*_,*_N*_^1*_,*************************************************_^1*_]_^1*_]_^1*€€_]_^1******_,INPUT FORMAT :_^1*_]_^1*_*MMM,LU,SSMSB,SSLSB,SW,ESMSB,ESLSB,EW,NLU,NSMSB,NSLSB,NW(CR)_^1*_]_^1*_1WHERE LU_"= LU WHERE DATA TO BE MOVED FROM_^1*_8SSMSB = START SECTOR MSB_^1*_8SSLSB = START SECTOR LSB_^1*_8SW_"= START WORD_^1*_8ESMSB = END SECTOR MSB_^1*_8ESLSB = END SECTOR LSB_^1*_8EW_"= END WORD_^1*_8NLU_!= LU WHERE DATA TO BE MOVE TO_^1*_8NSMSB = NEW SECTOR MSB_^1€€*_8NSLSB = NEW SECTOR LSB_^1*_8NW_"= NEW WORD_^1*_]_^1*_1IF WORD ADDRESS IS EMPTY, ZERO IS ASSUMED_^1*_]_^1*_1(CR) = CARRAGE RETURN_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT MMMREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT LOG1A_^1_%EXT NUMLU_^1_%EXT OFF_^1_%EXT HANDLE_^1_%EXT CHRSFG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12€€),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU WDXFER(32)_"SIZE TO BE TRANSFERRED (LIMITED BY BUFFER SIZE_^€€1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQ€€U BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE ENTRY COUNT "EQU"_^1_%EQU GETFLD(2)_#"GETFLD" SUB._^1_%EQU ASCHEX(3)_#"ASCHEX" SUB._^1_%EQU ASCDEC(5)_#"ASCDEC" SUB._^1_%EQU FETMM(9)_$"FETMM"_^1_%EQU CONFM(12)_#"CONFM" -- PRINT DATA AND CONFIRM_^1_%SPC 3_€€^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1MMMREQ STA* BASE_)SAVE PARAMETER ADD._^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADDRESS_^1_%STA BUFADD_^1_%LDQ- BHAN,I_^1_%STQ* EXTHAN_^1_%LDA* OOT+1_(CALCULATE "OFF" ADDRESS_^1_%SUB* OOT_^1_%AAQ A_^1_%STA EXTOFF_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 1_^1_%ENA 0_^1_%STA* COUNT€€_^1_%STA* MMMLOC+5_^1*_1GET LU WHERE DATA TO BE MOVED_^1_%RTJ LUEXTR_'TO GET LU. AND SAVE_^1_%STA* OLDLU_^1_%STA* SIZMSB_^1_%SPC 2_^1*_]_^1MMM1_!ENA FETMM_(TO EXTRACT MM ADDRESS AND CHECK_^1_%ENQ 0_^1_%RTJ* (EXTHAN)_^1_%ADC SIZMSB-*_^1_%LDQ* COUNT_^1_%QLS 1_^1_%LDA* SIZMSB_'SAVE MM ADD. ACCORDINGLY_^1_%STA* MMMLOC,Q_^1_%LDA* SIZMSB+1_^1_%STA* MMMLOC+1,Q_^1_%LDA* OLDLU_^€€1_%STA* SIZMSB_'SET UP LOGICAL UNIT FOR MM ADDRESS CHECK_^1_%QRS 1_^1_%INQ 1_,INCREMENT COUNT BY 1 AND CHECK IF DONE_^1_%STQ* COUNT_^1_%TRQ A_^1_%INQ -3_^1_%SQZ MMM6_)SKIP, IT IS DONE_^1_%AND- ONEBIT_'CHECK IF IT IS FOR NEW ADD._^1_%SAN MMM3_)NO, SKIP_^1_%RTJ* LUEXTR_'GET NEW LU AND SAVE_^1_%STA* NEWLU_^1_%STA* SIZMSB_'SET UP LOGICAL UNIT FOR MM ADDRESS CHECK_^1MMM3_!JMP* MMM€€1_^1OOT_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF"_"ENTRY_^1_%SPC 3_^1*_]_^1******_,ALL MM ADDRESSES ARE IN, CHECK TO MAKE SURE "END"_^1******_3IS GREATER THAN "START"_^1*_]_^1MMM6_!LDA* BASE_^1_%STA- I_^1_%LDA- BUFEMT,I_$MAKE SURE BUFFER IS EMPTY_^1_%EOR- LPMSK+16_^1_%SAZ MMM16_^1MMM9_!ENQ 4_,INCORRECT FORMAT, GO_^1_%JMP* (EXTMSG)_^1*_]_^1MMM16 LDA* MMMLOC+2_$START€€ LOC. MUST BE LESS OR EQUAL TO END_^1_%SUB* MMMLOC_^1_%STA* SIZMSB_^1_%TRA Q_^1_%LDA* MMMLOC+3_^1_%SUB* MMMLOC+1_^1_%STA* SIZLSB_^1_%INA -1_^1_%SQM MMM19_^1_%SQN MMM30_(MSB IS POSITIVE AND NOT 0_^1_%SAP MMM37_^1MMM19 JMP* MMM9_^1_%SPC 3_^1*_]_^1*****_-CALCULATE SIZE TO BE MOVED, 3 CASES :_^1*****_4(1) DIFF. MSB =0,_"SIZE = DIFF. LSB_^1*_8(2) DIFF. MSB =+, AND DIFF. LSB =-€€_^1*_BSIZE = MSB-1, AND $7FFF+LSB (DIFF.)_^1*_8(3) DIFF. MSB =+, AND DIFF. LSB =+_^1*_BSIZE = MSB,_!AND LSB (DIFF.)_^1*_]_^1*_]_^1MMM30 INA 1_^1MMM32 SAZ MMM34_^1_%SAP MMM37_^1MMM34 ADD- LPMSK+15_$CALCULATE LSB SIZE_^1_%STA* SIZLSB_^1_%INQ -1_+DECREMENT DIFF. MSB BY 1_^1_%STQ* SIZMSB_^1_%SPC 2_^1*_]_^1*****_-SPECIAL READ/WRITE SEQUENCE IS USED TO ELIMINATE_^1*****_-PO€€SSIBLE DATA DESTRUCTION IF THE DIFFERENT BETWEEN_^1*****_-THE START AND NEW ADD. ARE LESS THAN THE CORE BUFFER_^1*****_-SIZE._^1*_]_^1******_,METHOD USED : BUFFER IS DIVIDED INTO 2 PARTS._^1*_?PART 1 IS THE LAST DATA SET (READY TO_^1*_?WRITE WHEN PART 2 DATA IS FILLED) FOR_^1*_?WRITE. PART 2 CONTAINS THE NEXT DATA_^1*_?SET_^1*_]_^1MMM37 ENA 0_^1_%STA* COUNT_^1_%STA* WRIT_^1_%STA*€€ DONE_^1_%STA* LUEXTR_^1_%STA* WORD1_^1_%ENA WDXFER_^1_%STA* XFSZ_^1_%LDQ* BTB_^1*_]_^1*_]_^1MMM40 LDA* OTRDWR_'READ DATA TO CORE BUFFER_^1_%RTJ* RDWT48_^1_%RTJ ENDCK_(TO CHECK IF NO MORE DATA_^1_%SAZ MMM42_(DATA EXHAUSTED, SKIP_^1_%JMP* MMM52_^1MMM42 ENA -1_^1_%STA* SIZLSB_^1*_]_^1MMM44 LDA* SIZLAT_'SET UP SIZE_^1MMM45 STA* XFSZ_^1_%LDA* WORD1_(CHECK IF CONFIRMATION BEEN R€€EQUESTED_^1_%SAN MMM47_(YES, SKIP_^1_%JMP CONFRM_'TO REQUEST CONFIRMATION_^1MMM47 ENA 0_^1_%STA* LUEXTR_'RESET WRITE FLAG_^1_%LDQ* WRIT_)SET UP BUFFER LOCATION ACCORDINGLY_^1_%TRQ A_^1_%LDQ* BTB,Q_^1_%INA 1_^1_%AND- ONEBIT_'SET UP BUFFER INDEX_^1_%STA* WRIT_^1_%LDA* OTRDWR+1_$GET WRITE CODE_^1_%RTJ* RDWT48_^1_%LDA* DONE_)IF "DONE" SET_^1_%SAZ MMM52_^1_%SPC 2_^1*_1DONE SET, €€CHECK FOR LAST_^1_%LDA* SIZLSB_^1_%SAM MMM48_^1_%JMP* MMM42_(TO PROCESS LAST BUFFER_^1_%SPC 1_^1BASE_!NUM 0_,PARAMETER ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1EXTMSG NUM 0_,"MSG" LOC._^1WORD1 NUM 0_^1_%SPC 1_^1*_1EXIT_^1MMM48 LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1_%SPC 2_^1*_]_^1***_/MORE DATA TO BE TRANSFERRED, UPDATE_^1MMM52 LDA* LUEXTR_'CHECK €€IF BOTH BUFFER BEEN READ_^1_%SAZ MMM54_^1_%ENA WDXFER_^1_%JMP* MMM45_^1MMM54 LDA* COUNT_^1_%INA 1_,SET UP BUFFER_^1_%AND- ONEBIT_^1_%STA* COUNT_^1_%RAO* LUEXTR_'SET BOTH BUFFER BEEN READ_^1_%TRA Q_^1_%LDQ* BTB,Q_^1_%JMP* MMM40_^1_%SPC 2_^1*_]_^1MMMLOC BZS MMMLOC(6)_^1OLDLU NUM 0,0_^1NEWLU EQU NEWLU(OLDLU+1)_^1COUNT NUM 0_^1MAXLU ADC NUMLU_(MAX. NO. OF LU_^1NO96_!NUM €€ 96_^1WRIT_!NUM 0_^1DONE_!NUM 0_^1SIZMSB NUM 0_^1SIZLSB NUM 0_^1SIZINT NUM 0_^1SIZLAT NUM 0_^1BTB_"ADC OVLYBU-RDWTCD_^1_%ADC OVLYBL-RDWTCD_^1OTRDWR ADC CHRSLV+$100+$200_%0. READ_^1_%ADC CHRSLV+$100+$400_%1. WRITE_^1_%SPC 3_^1*_]_^1*_!******************************************************************_^1*_]_^1*_]_^1****_.EXTRACT AND CHECK LOGICAL UNIT (MM)_^1*_]_^1L€€UEXTR NOP 0_,ENTRY_^1_%ENA GETFLD_'GET A FIELD_^1_%ENQ 2_^1_%RTJ* (EXTHAN)_$TO GET LU_^1_%ENA ASCDEC_'CONVERT TO BINARY_^1_%RTJ* (EXTHAN)_^1_%SAZ LUER_)LU = 0, ERROR_^1_%STA* OVLYBF_'SAVE LU_^1_%TRA Q_^1_%SUB* MAXLU_^1_%INA -1_^1_%SAP LUER_)OVER MAX._^1_%LDQ LOG1A,Q_^1_%SQZ LUER_)UNDEFINED, ERROR_^1_%LDA- 8,Q_*GET UNIT CLASS CODE_^1_%ARS 11_^1_%AND- MASK+2_^1_%INA -2_+M€€ASS MEMORY CLASS IS 2_^1_%SAZ LUGT_^1LUER_!ENQ 9_,ERROR, TO PRINT_^1_%JMP* (EXTMSG)_^1*_]_^1LUGT_!LDA* OVLYBF_'RECALL LU AND EXIT_^1_%JMP* (LUEXTR)_^1_%SPC 2_^1*_]_^1******_,ROUTINE TO READ OR WRITE 48 WORDS TO/FROM BUFFER_^1*_]_^1RDWT48 NOP 0_,ENTRY_^1_%STA* RDWTCD_'SAVE READ/WRITE REQUEST CODE_^1_%STQ* BU_^1_%ARS 10_+BASE ON READ/WRITE CODE,_^1_%AND- ONEBIT_/GET MM LU AND AD€€DRESS_^1_%TRA Q_^1_%STA* BYRW_^1_%LDA* OLDLU,Q_^1_%STA* XFLU_^1_%QLS 2_^1_%LDA* MMMLOC,Q_$GET MM ADDRESS (MSB AND LSB)_^1_%STA* RDWTM_^1_%LDA* MMMLOC+1,Q_^1_%STA* RDWTL_^1_%RTJ- (AMONI)_%MONITOR REQUEST_^1RDWTCD NUM 0_,REQUEST CODE (TO BE FILLED)_^1_%ADC RDWTRN-RDWTCD_^1_%NUM 0_^1XFLU_!NUM 0_,MM LU (TO BE FILLED)_^1XFSZ_!ADC WDXFER_'NO. OF WORDS TO BE TRANSFER_^1BU_#NUM 0_,€€BUFFER RELATIVE ADD. (TO BE FILLED)_^1RDWTM NUM 0_,MSB --- WORD ADDRESSING_^1RDWTL NUM 0_,LSB_^1_%JMP- (ADISP)_^1*_]_^1RDWTRN SQP RDEX_)OK, SKIP_^1XFER_!LDQ* BASE_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_]_^1RDEX_!LDQ* BYRW_)READ/WRITE CODE_^1_%QLS 2_^1_%LDA* MMMLOC+1,Q_"UP DATE MM ADDRESS (LSB)_^1_%ADD* XFSZ_^1_%SAP NOUPM_^1_%RAO* MMMLOC,Q_$BUMP MS€€B_^1_%AND- LPMSK+15_^1NOUPM STA* MMMLOC+1,Q_^1_%LDA* BASE_)RESTORE PARAMETER ADD. BASE_^1_%STA- I_^1_%JMP* (RDWT48)_$RETURN_^1BYRW_!NUM 0_^1_%SPC 3_^1*_]_^1******_,CHECK FOR SIZE TO BE TRANSFERRED,_^1*_8CONDITIONS :_^1*_8(1) MORE TO GO_^1*_8(2) DONE --- EXTACTLY "DONE" SET_^1*_8(3) DONE --- NOT EXACT "DONE" SET, SIZE ADJUST_^1*_]_^1*_8IN RETURN --- A-REGISTER = 0 (DONE)_^1*_FA-€€REGISTER = 1 OR NON-ZERO (MORE_^1*_]_^1ENDCK NOP 0_,ENTRY_^1_%LDA CHRSFG_'CHECK FOR 'DX'_^1_%SAN E0_+NO, SKIP_^1_%JMP* (EXTOFF)_$TO TURN OFF_^1E0_#LDA* SIZLSB_'ADJUST SIZE AND CHECK IF MORE DATA_^1_%SAZ E2_^1_%INA -WDXFER_^1_%STA* SIZLSB_^1_%SAZ E1_^1_%SAP E2_^1E1_#LDQ* SIZMSB_'LSB IS DONE , CHECK IF MSB IS SET_^1_%SQN E4_^1*_1NO MORE, ADJUST SIZE IS NEEDED_^1_%RAO* DONE_€€^1_%STQ* SIZLSB_^1_%INA WDXFER_'CALCULATE LAST SIZE TO BE TRANSFER_^1_%STA* SIZLAT_^1E2_#JMP* (ENDCK)_^1*_]_^1E4_#INQ -1_+UP DATE REMAINDER_^1_%STQ* SIZMSB_^1_%ADD- LPMSK+15_^1_%STA* SIZLSB_^1_%ENA 1_^1_%JMP* E2_^1_%SPC 3_^1*_]_^1*****_$----_"PRINT FIRST WORD OF BOTH NEW AND OLD ADD._^1*_]_^1CONFRM LDA* NEWLU_^1_%STA* CONLU_(SET UP LOGICAL UNIT AND READ OVER WORD 1_^1_%LDA* MMM€€LOC+4_$GET MSB AND LSB_^1_%STA* CONMSB_^1_%LDA* MMMLOC+5_^1_%STA* CONLSB_^1_%RTJ- (AMONI)_%TO READ OVER WORD 1_^1CONFCD ADC $300+CHRSLV_^1_%ADC CONFRT-CONFCD_^1_%NUM 0_^1CONLU NUM 0_,LOGICAL UNIT (FILLED)_^1_%NUM 1_,1 WORD_^1_%ADC CONBF-CONFCD BUFFER_^1CONMSB NUM 0_,MSB (FILLED)_^1CONLSB NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1*_]_^1CONFRT SQP CONFMX_'I/O OK, SKIP_^1_%JMP€€* XFER_)TO ERROR_^1CONBF NUM 0_^1BUFADD NUM 0_,"BUFFER" ADDRESS_^1EXTOFF NUM 0_,"OFF" ADDRESS (FILLED)_^1CONFMX LDA* CONBF_(MOVE DATA_^1_%STA* (BUFADD)_^1_%ENA CONFM_^1_%ENQ 1_,(1 WORD AND HEX. DATA)_^1_%RTJ (EXTHAN)_^1_%ADC OVLYBF-*_^1_%LDA* (BUFADD)_$CHECK IF CONFIRMED_^1_%SAN NOTCON_'NO, SKIP_^1_%RAO WORD1_(SET CONFIRMED_^1_%JMP MMM47_^1NOTCON JMP* (EXTOFF)_$TO "OFF"_€ώ^1_%SPC 2_^1*_1S T O R A G E_$A N D_$C O N S T A N T_^1OVLYBF BZS OVLYBF(64)_^1OVLYBU EQU OVLYBU(OVLYBF)_^1OVLYBL EQU OVLYBL(OVLYBF+32)_^1_%SPC 3_^1*_]_^1_%EQU SA44(*/96)_^1_%EQU SP44(SA44+1)_^1_%EQU DB44(SP44*96)_^1_%BSS (DB44-*)_^1_%END_]_^__ώPLICREQ CSY/ H83 P€1_%NAM LICREQ_'DECK-ID H83 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,**************************************************_^1*_,*_O*_^1*_,*_#THIS PROCESSOR MODIFIES THE CORE IMAGE_#*_^1*_,*_)DATA (DECIMAL OR ASCII)_.*_^1*_,*_O*_^1*_,**************************************************_^1*_]_^1*_]_^1******_,INPUT FORMAT :_^1*_]_^1*_8LI€€C,L,B/D,D,......._^1*_]_^1*_8LAC,L,B/AAA........_^1*_]_^1*_8LHC,L,B/H,H......._^1*_]_^1*_1WHERE L = CORE LOC. (HEX.)_^1*_8B =BASE (HEX.) (DEFAULT=0)_^1*_8D =DECIMAL DATA_^1*_8A =ASCII DATA_^1*_8H = HEX. DATA_^1*_]_^1*_]_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1*_8NEW_%OLD_"DATA_^1*_]_^1*_8XXXXXX_"YYYYYY_^1*_]_^1*_1CONFIRMATION ('OK') IS NEEDED BEFORE CHANGE_^1*_]_^1*_]_^1_%€€SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT LHCREQ_^1_%ENT LACREQ_^1_%ENT LICREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT MSIZV4_'MAX. CORE SIZE_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),TH€€REE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU MASSLU($8C2) LIB. MASS MEMORY LU_^1_%EQU EXTBV4($E9)_!CORE LOCATION CONTAINS ADD. OF EXTENDED CORE_^1_%EQU NO40(40)_$LOCAL INPUT BUFFER SIZE_^1_%EQU COMLHC(22)_"COMMAND "LHC" INDEX_^1_%EQU COMLIC(56)_"COMMA€€ND "LIC" INDEX_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10€€)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$"FETMM" --- CONVERT MM ADD. TO WORD ADDRESSING_^1_%EQU CONFM(12)_#'CONFM'€€ --- PRINT DATA AND REQUEST CONFIRM_^1_%SPC 3_^1*_]_^1*****_(******_"P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LICREQ STA* BASE_^1_%EQU LHCREQ(LICREQ)_^1_%EQU LACREQ(LICREQ)_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA BUFADD_^1_%LDA- HANDLE,I_^1_%STA* EXTHAN_^1_%LDA- MSG,I_^1_%STA* EXTMSG_^1_%LDA =XMSIZV4_$GET MAX. CORE SIZE_^1_%STA* MAX_^1_%SPC 2_^1_%ENA 0_^1_%STA* LICLOC€€+1_^1_%STA* COUNT_^1LIC1_!ENA GETFLD_'GET INPUT DATA_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_^1_%RTJ* (EXTHAN)_^1LICVAL NUM 0_^1_%LDQ* COUNT_^1_%LDA* LICVAL_^1_%STA* LICLOC,Q_^1_%RAO* COUNT_^1_%LDA- FIELD,I_^1_%INA -SLASH_^1_%SAZ LIC6_)SKIP ON SLASH('/')_^1_%INQ -1_+NOT '/', IT FORMAT OK,_^1_%SAP LIC4_)NO, ERROR_^1_%INA -COMMA+SLASH NOT '/' AND ONLY 1 ENTRY, MUST BE CO€€MMA_^1_%SAN LIC4_)NOT COMMA, ERROR_^1_%JMP* LIC1_^1LIC4_!ENQ 4_,FORMAT ERROR_^1_%JMP* (EXTMSG)_^1LIC6_!STA* COUNT_^1_%STA* ASMHIL_^1_%STA* PROTYP_^1_%STA- SLASHF,I_$RESET 'SLASH' FLAG_^1_%LDA* LICLOC_'LOCATION + BASE = ACTUAL LOCATION_^1_%ADD* LICLOC+1_^1_%STA* LICLOC_^1_%STA MSB+2_^1_%RTJ CORADK_'TO CHECK IF CORE LOC. WITHIN LIMIT_^1_%JMP* LIC4_)ERROR, GO_^1_%SPC 1_^1_%LDA- B€€UFEMT,I_$MAKE SURE THERE IS DATA_^1_%EOR- LPMSK+16_^1_%SAN LIC10_^1_%JMP* LIC4_)NO DATA, ERROR_^1_%SPC 1_^1LIC10 LDA- PROG2,I_%CHECK FOR "LHC"_^1_%INA -COMLHC_^1_%SAN LICLAC_^1_%JMP* HEXDAT_'TO PROCESSING HEX. DATA_^1LICLAC INA -COMLIC+COMLHC_"CHECK FOR "LIC"_^1_%STA* PROTYP_^1_%RAO* PROTYP_'SET UP DATA TYPE_^1_%SAN ASCDAT_'SKIP ON "LAC"_^1_%JMP* DECDAT_'FOR "LIC", GO_^1_%SP€€C 2_^1*_1FOR ASCII DATA_^1****_!*******************************************_^1_%SPC 2_^1*_.2. ASCII DATA PROCESSING_^1ASCDAT LDQ- BITFLG,I_$GET BYTE POSITION FLAG AND BUFFER POINTER_^1_%STQ* HILO_^1_%LDA- BUFCNT,I_^1_%STA- I_^1AS2_"SQZ AS4_*SKIP, NO ADVANCE CHARACTER IS NEEDED_^1_%ENQ -1_^1_%RAO- I_^1AS4_"INQ 1_^1_%LDA (BUFADD),I_"GET INPUT TEXT WORD_^1_%STQ* HILO_^1_%SQN€€ AS6_^1_%ARS 8_^1AS6_"AND- LPMSK+8_%ISOLATE CHARACTER_^1_%STA* TEMP_^1_%EOR- LPMSK+8_%CHECK FOR EOT (END OF TEXT)_^1_%SAN AS8_*NO, SKIP_^1_%JMP* AS18_^1*_]_^1AS8_"LDQ* ASMHIL_'PUT CHARACTER INTO POSITION_^1_%LDA* TEMP_^1_%SQN AS10_^1_%ALS 8_,PUT CHAR. INTO HI-8-BIT AND INSERT SPACE IN_^1_%INA $20_.LOW-8-BIT_^1_%ENQ 1_^1_%JMP* AS12_^1AS10_!LDA* CHAR_)RECALL HI-8-BIT (DELETE S€€PACE)_^1_%EOR- ONEBIT+5_^1_%EOR* TEMP_)AND INSERT CURRENT CHAR._^1_%ENQ 0_^1AS12_!STQ* ASMHIL_'SAVE CHAR. POSITION FLAG (0=HI-8)_^1_%STA* CHAR_^1AS14_!LDQ* COUNT_^1_%STA INPDAT,Q_$SAVE INPUT TEXT_^1_%LDQ* ASMHIL_'CHECK IF UP DATE STORAGE POINTER IS NEEDED_^1_%SQN AS15_)NO, SKIP_^1_%RAO* COUNT_^1AS15_!LDQ* HILO_)RECALL INPUT TEXT BYTE POSITION FLAG AND_^1_%JMP* AS2_1REPEAT_^1*_]_€€^1AS18_!LDA* ASMHIL_'UPDATE INPUT TEXT COUNT IF NEEDED_^1_%SAZ AS20_^1_%RAO* COUNT_^1AS20_!JMP* CONFRM_'TO PRINT DATA AND REQUEST CONFIRM_^1_%SPC 2_^1*_.1. DECIMAL DATA_^1DECDAT ENA GETFLD_'GET INPUT DATA_^1_%ENQ 6_^1_%RTJ* (EXTHAN)_^1_%ENA ASCDEC_'CONVERT TO DEC._^1_%RTJ* (EXTHAN)_^1_%LDQ* COUNT_^1_%STA INPDAT,Q_$SAVE INPUT DATA_^1_%RAO* COUNT_(BUMP STORAGE INDEX BY 1_^1_%L€€DQ* BASE_^1_%LDA- FIELD,Q_%CHECK IF END OF TEXT_^1_%EOR- LPMSK+8_^1_%SAN DEC3_^1_%JMP* CONFRM_'NO MORE DATA,TO PRINT_^1DEC3_!LDA- FIELD,Q_%CHECK FOR COMMA_^1_%AND- LPMSK+8_^1_%INA -COMMA_^1_%SAZ DEC7_^1DEC5_!JMP* LIC4_)FORMAT ERROR, GO_^1DEC7_!JMP* DECDAT_'TO REPEAT_^1_%SPC 1_^1*_1S T O R A G E_^1ORDINL NUM 0_,ORDINAL NO._^1ASTCH NUM 0_^1COUNT NUM 0_^1BASE_!NUM 0_^1LICLOC€€ BZS LICLOC(2)_^1_%EQU TEMP(LICLOC+1)_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1ASMHIL NUM 0_^1HILO_!NUM 0_^1CHAR_!NUM 0_^1MAX_"NUM 0_^1PROTYP NUM 0_,DATA TYPE_^1_%SPC 2_^1*_.0. HEX. DATA_^1HEXDAT ENA 0_^1_%STA* ASTCH_^1_%STA* TEMP_^1HEX2_!ENA GETFLD_'GET INPUT DATA_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1HEXNUM NUM 0_^1*_]_^1****_.TERM€€INATORS CAN BE (1) COMMA,_^1*_D(2) ASTERISK_^1*_D(3) "NULL"_^1*_]_^1_%LDA- FIELD,I_%CHECK FOR COMMA_^1_%INA -COMMA_^1_%SAZ HEX5_)YES, SKIP_^1_%JMP* HEX20_^1HEX5_!LDA* ASTCH_(IS ASTERISK SET_^1_%SAN HEX10_^1_%LDA* HEXNUM_'RECALL DATA AND SAVE_^1HEX6_!LDQ* COUNT_^1_%STA INPDAT,Q_^1_%RAO* COUNT_^1_%LDA- FIELD,I_%CHECK FOR END OF TEXT_^1_%EOR- LPMSK+8_^1_%SAN HEX8_^1_%JMP* CONFRM_€€'TO PRINT AND REQUEST FOR CONFIRMATION_^1HEX8_!JMP* HEXDAT_^1***_/ASTERISK ENCOUNTERED, 2 CASES CAN BE HAPPENED_^1*_8(1) HEX. NO. FOLLOWS ASTERISK , OR_^1*_8(2) NO., *, AND NO._^1*_]_^1HEX10 LDA* TEMP_^1_%SAN HEX12_(SKIP ON HEX. PROCEDED *_^1_%LDA* LICLOC_'FOR " * HEX" = CURRENT LOC. - HEX. DATA_^1_%ADD* COUNT_^1_%SUB* HEXNUM_^1_%JMP* HEX6_^1*_]_^1HEX12 LDA* HEXNUM_'GENERATE LA€€ST 8 BITS (ADDRESSING)_^1_%SUB* LICLOC_-HEX. NO. - CURRENT LOC_^1_%SUB* COUNT_^1_%AND- LPMSK+8_^1_%STA* HEXNUM_^1_%LDA* TEMP_)GET COMMAND AND SHIF) IT TO H-8-BIT_^1_%ALS 8_^1_%AND- NZERO+8_^1_%EOR* HEXNUM_'INSERT LOCATION_^1_%JMP* HEX6_^1*_]_^1****_.DELIMITER IS NOT COMMA_^1*_]_^1HEX20 INA -ASTRIC+COMMA CHECK FOR ASTERISK_^1_%SAN HEX28_(NOT COMMA AND ASTERISK, SKIP_^1HEX22 €€LDA* ASTCH_(MAKE SURE IT IS NOT YET ENCOUNTERED_^1_%SAN HEX29_^1HEX24 RAO* ASTCH_^1_%JMP* HEX2_^1HEX28 LDA- FIELD,I_^1_%EOR- LPMSK+8_%EOT CHECK_^1_%SAZ HEX30_^1HEX29 JMP* DEC5_)ERROR, GO_^1HEX30 JMP* HEX5_^1_%SPC 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON€€ 65K_^1_%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR SO_^1_%SUB* MAX_^1_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1_%SPC 3_^1*_]_^1******_,ALL INPUT IN, €€READ OVER OLD DATA FOR_^1*_8CONFIRMATION CHECK_^1*_]_^1*_1GET CORE IMAGE MM ADD._^1CONFRM ENQ 4_^1_%LDA- ($E9),Q_%THE FOURTH WORD OF EXTENDED CORE TABLE_^1_%STA* LSB_^1_%ENQ 0_^1_%STQ* MSB_^1_%ENA FETMM_(CONVERT TO WORD ADDRESSING_^1_%ENQ 2_^1_%RTJ* (EXTHAN)_^1_%ADC MSB-*_^1_%LDA* MSB_*SET UP MSB AND LSB, SO THAN OLD DATA IS READ_^1_%STA* LIOM_0OVER FOR CONFIRMATION_^1_%ST€€A* LIOSM_^1_%LDA* LSB_^1_%STA* LIOL_^1_%STA* LIOSL_^1_%RTJ* SELF_^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LIORT-SELF_"GENERATE RETURN ADD._^1_%STA* LIOE_^1_%RTJ- (AMONI)_^1LIOCD ADC $200+CHRSLV_!READ_^1LIOE_!NUM 0_,RETURN (FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_'LU (LIB. UNIT)_^1_%ADC NO40_)SIZE_^1BUFADD NUM 0_,BUFFER ADD. (FILLED)_^1LIOM_!NUM 0_,MSB (FILLED)_^1LIOL_!NUM 0_€€,LSB (FILLED)_^1_%JMP- (ADISP)_^1*_]_^1LIORT SQP XFOK_)NO READ ERROR, SKIP_^1XFER_!LDQ* BASE_)IOERR_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1XFOK_!LDQ* COUNT_(GET NO. OF WORDS AND INSERT DATA TYPE_^1_%STQ* LIOZ_^1_%LDA* PROTYP_^1_%ALS 8_^1_%AAQ Q_^1_%ENA CONFM_(TO PRINT DATA FOR CONFIRMATION_^1_%RTJ* (EXTHAN)_^1_%ADC INPDAT-*_^1_%LDA* (BUFADD)_$RETURN FROM CONFIRMATION CHECK_^1_%€€SAZ LIOSAV_'OK, WRITE (SAVE MM)_^1LIOEX LDQ* BASE_)TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1LIOSAV RTJ- (AMONI)_^1LIOVD ADC $500+CHRSLV_!WRITE_^1_%ADC LIOVX-LIOVD_!RETURN_^1_%NUM 0_^1_%ADC MASSLU_^1LIOZ_!NUM 0_,SIZE (FILLED)_^1_%ADC INPDAT-LIOVD_^1LIOSM NUM 0_,MSB (FILLED)_^1LIOSL NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1LIOVX SQP SAVOK_^1_%JMP* XFER_^1MSB_"BZ€€S MSB(3)_^1_%EQU LSB(MSB+1)_^1_%SPC 1_^1*_]_^1****_.SAVE DATA IN CORE ACCORDING TO ADDRESS_^1*_]_^1SAVOK LDA LICLOC_'SET UP CORE ADDRESS_^1_%STA- I_^1_%ENQ 0_,INITIALIZE INDEX_^1UPCR_!LDA* INPDAT,Q_$GET CURRENT INPUT DATA_^1_%STA- (ZERO),B_$SAVE IN CORE_^1_%INQ 1_,BUMP INDEX BY 1 AND CHECK IF DONE_^1_%TRQ A_^1_%SUB COUNT_^1_%SAZ DONE_)SKIP ON DONE_^1_%JMP* UPCR_)TO REPEAT€²_^1DONE_!JMP* LIOEX_^1_%SPC 1_^1*_]_^1INPDAT BZS INPDAT(NO40)_^1_%SPC 3_^1*_]_^1_%EQU SA56(*/96)_^1_%EQU SP56(SA56+1)_^1_%EQU DB56(SP56*96)_^1_%BSS (DB56-*)_^1_%END_]_^__²PLIOREQ CSY/ H84 P€1_%NAM LIOREQ_'DECK-ID H84 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,****************************************************_^1*_,*_Q*_^1*_,*_#THIS PROCESSOR MODIFY ORDINAL DATA WHICH_#*_^1*_,*_)IS DECIMAL OR ASCII FORMAT_-*_^1*_,*_Q*_^1*_,****************************************************_^1*_]_^1*_]_^1******_,INPUT FORMATS :_^1*€€_]_^1*_*LIO,O,L,B/D,D,D......_^1*_]_^1*_*LAO,O,L,B/AAAAA_^1*_]_^1*_*LHO,O,L,B/H,H,......._^1*_]_^1*_]_^1*_]_^1*_1WHERE O = ORDINAL NUMBER (DECIMAL)_^1*_8L = LOCATION OF PROGRAM (HEX.)_^1*_8B = BASE (HEX.) (DEFAULT = 0)_^1*_8D = DECIMAL DATA_^1*_8A = ASCII DATA_^1*_8H = HEX. DATA_^1*_]_^1*_]_^1*******_+DATA IS PRINT WITH THE OLD ONE FOR COMPARSION_^1*_8THEN CONFIRMATION IS RE€€QUIRED BY OPERATOR_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT LIOREQ_^1_%ENT LHOREQ_^1_%ENT LAOREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU €€ TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU NO40(40)_$BUFFER SIZE_^1_%EQU MASSLU($8C2) LIB. MASS MEMORY UNIT_^1_%EQU CSYLEN($E6)_!LENGTH OF SYSTEM DIRECTORY (IN THIS LOC.)_^1_%EQU CSYDIR($E7)_!INDEX OF FIRST MM DIRECTORY_^1_%EQU EXTBV4($E9)_!LOCATION CONTAINS EXTENDED CORE TABLE_^€€1_%EQU DIRTRY($EB)_!LOC. CONTAINS LIB. DIRECTORY_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU P€€ROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$'FETMM' --- GET MM ADDRESS_^1_%EQU PNT€€MD(10)_#"PNTMD" --- PRINT BOTH CORE AND MM DATA_^1_%EQU CONFM(12)_#'CONFM' -- PRINT NEW + OLD DATA FOR CONFIRM_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LIOREQ STA* BASE_^1_%EQU LHOREQ(LIOREQ)_^1_%EQU LAOREQ(LIOREQ)_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA BUFADD_^1_%LDA- HANDLE,I_^1_%STA* EXTHAN_^1_%LDA- MSG,I_^1_%STA* EXTMSG_^1_%SPC 1_^1€€*_1EXTRACT ORDINAL, LOCATION AND/OR BASE FROM_^1*_8INPUT BUFFER_^1_%ENA 0_^1_%STA* COUNT_^1_%STA* B_^1_%ENA GETFLD_'GET NEXT FIELD --- ORDINAL NO._^1_%ENQ 3_^1_%RTJ* (EXTHAN)_^1_%ENA ASCDEC_'CONVERT TO DECIAML_^1_%RTJ* (EXTHAN)_^1_%SAN LIO5_^1LIO3_!ENQ 4_,INCORRECT FORMAT_^1_%JMP* (EXTMSG)_^1LIO5_!RTJ ORDCHK_'TO CHECK IF ORDINAL IS WITHIN LIMIT_^1_%ENA GETFLD_'GET NEXT DAT€€A --- LOCATION OF PROGRAM_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1L_$NUM 0_^1_%LDA- FIELD,I_%CHECK IF BASE UNUSED_^1_%INA -SLASH_^1_%SAZ LIO10_^1_%ENA GETFLD_'GET BASE_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_^1_%RTJ* (EXTHAN)_^1B_$NUM 0_^1_%LDA- FIELD,I_^1_%INA -SLASH_^1_%SAZ LIO10_^1_%JMP* LIO3_^1_%SPC 2_^1*_]_^1*****_-ADDRESS€€ DATA IN, GET INPUT DATA ACCORDINGLY_^1*_]_^1LIO10 STA* ASTCH_^1_%STA* ASMHIL_^1_%STA- SLASHF,I_^1_%STA* COUNT_^1_%LDA* L_,ASSEMBLE ADDRESS_^1_%ADD* B_^1_%STA* LIOLOC_^1_%STA MSB+2_^1_%LDA- BUFEMT,I_$MAKE SURE THERE IS DATA_^1_%EOR- LPMSK+16_^1_%SAN LIO11_^1_%JMP* LIO3_)ERROR, NO DATA_^1LIO11 LDQ- PROG2,I_^1_%INQ -23_*CHECK FOR "LHO"_^1_%SQZ LIO12_^1_%INQ -34_^1LIO12 STQ€€* PROTYP_'SAVE REQUEST TYPE_^1_%JMP* DATPRO,Q_^1DATPRO JMP* HEXDAT_'0. HEX DATA_^1_%JMP* DECDAT_'1. DECIMAL DATA_^1_%JMP* ASCDAT_'2. ASCII DATA_^1****_!*******************************************_^1_%SPC 2_^1*_.2. ASCII DATA PROCESSING_^1ASCDAT LDQ- BITFLG,I_$GET BYTE POSITION FLAG AND BUFFER POINTER_^1_%STQ* HILO_^1_%LDA- BUFCNT,I_^1_%STA- I_^1AS2_"SQZ AS4_*SKIP, NO ADVANCE CH€€ARACTER IS NEEDED_^1_%ENQ -1_^1_%RAO- I_^1AS4_"INQ 1_^1_%LDA (BUFADD),I_"GET INPUT TEXT WORD_^1_%STQ* HILO_^1_%SQN AS6_^1_%ARS 8_^1AS6_"AND- LPMSK+8_%ISOLATE CHARACTER_^1_%STA* TEMP_^1_%EOR- LPMSK+8_%CHECK FOR EOT (END OF TEXT)_^1_%SAN AS8_*NO, SKIP_^1_%JMP* AS18_^1*_]_^1AS8_"LDQ* ASMHIL_'PUT CHARACTER INTO POSITION_^1_%LDA* TEMP_^1_%SQN AS10_^1_%ALS 8_,PUT CHAR. INTO HI-8-€€BIT AND INSERT SPACE IN_^1_%INA $20_.LOW-8-BIT_^1_%ENQ 1_^1_%JMP* AS12_^1AS10_!LDA* CHAR_)RECALL HI-8-BIT (DELETE SPACE)_^1_%EOR- ONEBIT+5_^1_%EOR* TEMP_)AND INSERT CURRENT CHAR._^1_%ENQ 0_^1AS12_!STQ* ASMHIL_'SAVE CHAR. POSITION FLAG (0=HI-8)_^1_%STA* CHAR_^1AS14_!LDQ* COUNT_^1_%STA INPDAT,Q_$SAVE INPUT TEXT_^1_%LDQ* ASMHIL_'CHECK IF UP DATE STORAGE POINTER IS NEEDED_^1_%SQN €€AS15_)NO, SKIP_^1_%RAO* COUNT_^1AS15_!LDQ* HILO_)RECALL INPUT TEXT BYTE POSITION FLAG AND_^1_%JMP* AS2_1REPEAT_^1*_]_^1AS18_!LDA* ASMHIL_'UPDATE INPUT TEXT COUNT IF NEEDED_^1_%SAZ AS20_^1_%RAO* COUNT_^1AS20_!JMP* CONFRM_'TO PRINT DATA AND REQUEST CONFIRM_^1_%SPC 2_^1*_.1. DECIMAL DATA_^1DECDAT ENA GETFLD_'GET INPUT DATA_^1_%ENQ 6_^1_%RTJ* (EXTHAN)_^1_%ENA ASCDEC_'CONVERT TO D€€EC._^1_%RTJ* (EXTHAN)_^1_%LDQ* COUNT_^1_%STA INPDAT,Q_$SAVE INPUT DATA_^1_%RAO* COUNT_(BUMP STORAGE INDEX BY 1_^1_%LDQ* BASE_^1_%LDA- FIELD,Q_%CHECK IF END OF TEXT_^1_%EOR- LPMSK+8_^1_%SAN DEC3_^1_%JMP* CONFRM_'NO MORE DATA,TO PRINT_^1DEC3_!LDA- FIELD,Q_%CHECK FOR COMMA_^1_%INA -COMMA_^1_%SAZ DEC7_^1DEC5_!JMP* LIO3_)FORMAT ERROR, GO_^1DEC7_!JMP* DECDAT_'TO REPEAT_^1_%SPC 1_^1*€€_1S T O R A G E_^1BASE_!NUM 0_^1ASTCH NUM 0_^1COUNT NUM 0_^1LIOLOC NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1PROTYP NUM 0_^1ASMHIL NUM 0_^1HILO_!NUM 0_^1TEMP_!NUM 0_^1CHAR_!NUM 0_^1_%SPC 2_^1*_.0. HEX. DATA_^1HEXDAT ENA 0_^1_%STA* ASTCH_^1_%STA* TEMP_^1HEX2_!ENA GETFLD_'GET INPUT DATA_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1HEX€€NUM NUM 0_^1*_]_^1****_.TERMINATORS CAN BE (1) COMMA,_^1*_D(2) ASTERISK_^1*_D(3) "NULL"_^1*_]_^1_%LDA- FIELD,I_%CHECK FOR COMMA_^1_%INA -COMMA_^1_%SAZ HEX5_)YES, SKIP_^1_%JMP* HEX20_^1HEX5_!LDA* ASTCH_(IS ASTERISK SET_^1_%SAN HEX10_^1_%LDA* HEXNUM_'RECALL DATA AND SAVE_^1HEX6_!LDQ* COUNT_^1_%STA INPDAT,Q_^1_%RAO* COUNT_^1_%LDA- FIELD,I_%CHECK FOR END OF TEXT_^1_%EOR- LPMSK+8_^€€1_%SAN HEX8_^1_%JMP* CONFRM_'TO PRINT AND REQUEST FOR CONFIRMATION_^1HEX8_!JMP* HEXDAT_^1***_/ASTERISK ENCOUNTERED, 2 CASES CAN BE HAPPENED_^1*_8(1) HEX. NO. FOLLOWS ASTERISK , OR_^1*_8(2) NO., *, AND NO._^1*_]_^1HEX10 LDA* TEMP_^1_%SAN HEX12_(SKIP ON HEX. PROCEDED *_^1_%LDA* LIOLOC_'FOR " * HEX" = CURRENT LOC. - HEX. DATA_^1_%ADD* COUNT_^1_%SUB* HEXNUM_^1_%JMP* HEX6_^1*_]_^1HE€€X12 LDA* HEXNUM_'GENERATE LAST 8 BITS (ADDRESSING)_^1_%SUB* LIOLOC_-HEX. NO. - CURRENT LOC_^1_%SUB* COUNT_^1_%AND- LPMSK+8_^1_%STA* HEXNUM_^1_%LDA* TEMP_)GET COMMAND AND SHIF) IT TO H-8-BIT_^1_%ALS 8_^1_%AND- NZERO+8_^1_%EOR* HEXNUM_'INSERT LOCATION_^1_%JMP* HEX6_^1*_]_^1****_.DELIMITER IS NOT COMMA_^1*_]_^1HEX20 INA -ASTRIC+COMMA CHECK FOR ASTERISK_^1_%SAN HEX28_(NOT COMMA€€ AND ASTERISK, SKIP_^1HEX22 LDA* ASTCH_(MAKE SURE IT IS NOT YET ENCOUNTERED_^1_%SAN HEX29_^1HEX24 RAO* ASTCH_^1_%JMP* HEX2_^1HEX28 LDA- FIELD,I_^1_%EOR- LPMSK+8_%EOT CHECK_^1_%SAZ HEX30_^1HEX29 JMP* DEC5_)ERROR, GO_^1HEX30 JMP* HEX5_^1_%SPC 3_^1*_]_^1******_,ALL INPUT IN, READ OVER OLD DATA FOR_^1*_8CONFIRMATION CHECK_^1*_]_^1CONFRM ENA FETMM_(CONVERT TO WORD ADDRESSING_^€€1_%ENQ 2_^1_%RTJ* (EXTHAN)_^1_%ADC MSB-*_^1_%LDA* MSB_*SET UP MSB AND LSB, SO THAN OLD DATA IS READ_^1_%STA* LIOM_0OVER FOR CONFIRMATION_^1_%STA* LIOSM_^1_%LDA* LSB_^1_%STA* LIOL_^1_%STA* LIOSL_^1_%RTJ* SELF_^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LIORT-SELF_"GENERATE RETURN ADD._^1_%STA* LIOE_^1_%RTJ- (AMONI)_^1LIOCD ADC $200+CHRSLV_!READ_^1LIOE_!NUM 0_,RETURN (FILLED)_^1_%NUM €€ 0_,THREAD_^1_%ADC MASSLU_'LU (LIB. UNIT)_^1_%ADC NO40_)SIZE_^1BUFADD NUM 0_,BUFFER ADD. (FILLED)_^1LIOM_!NUM 0_,MSB (FILLED)_^1LIOL_!NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1*_]_^1LIORT SQP XFOK_)NO READ ERROR, SKIP_^1XFER_!LDQ* BASE_)IOERR_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1XFOK_!LDQ* COUNT_(GET NO. OF WORDS AND INSERT DATA TYPE_^1_%STQ* LIOZ_^1_%LDA* PROTYP_^1_%ALS 8_^1_€€%AAQ Q_^1_%ENA CONFM_(TO PRINT DATA FOR CONFIRMATION_^1_%RTJ* (EXTHAN)_^1_%ADC INPDAT-*_^1_%LDA* (BUFADD)_$RETURN FROM CONFIRMATION CHECK_^1_%SAZ LIOSAV_'OK, WRITE (SAVE MM)_^1LIOEX LDQ* BASE_)TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1LIOSAV RTJ- (AMONI)_^1LIOVD ADC $500+CHRSLV_!WRITE_^1_%ADC LIOVX-LIOVD_!RETURN_^1_%NUM 0_^1_%ADC MASSLU_^1LIOZ_!NUM 0_,SIZE (FILLE€€D)_^1_%ADC INPDAT-LIOVD_^1LIOSM NUM 0_,MSB (FILLED)_^1LIOSL NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1LIOVX SQP SAVOK_^1_%JMP* XFER_^1SAVOK LDA* CORLSB_'CHECK IF CORE ORDINAL_^1_%SAZ GETOUT_'NO, SKIP_^1*_]_^1_%STA- I_,SET INDEX WITH CORE LOCATION_^1_%ENQ 0_,MOVE DATA TO CORE ORDINAL LOCATION_^1TOCORE LDA* INPDAT,Q_^1_%STA- (ZERO),B_^1_%INQ 1_^1_%TRQ A_,CHECK IF ALL DATA BE€€EN MOVED_^1_%SUB* COUNT_^1_%SAZ GETOUT_'YES, DONE_^1_%JMP* TOCORE_'NO, TO REPEAT_^1*_]_^1GETOUT JMP* LIOEX_(TO EXIT --- "SOMMOR"_^1_%SPC 1_^1*_]_^1MSB_"BZS MSB(3)_^1_%EQU LSB(MSB+1)_^1*_]_^1ORD10 NUM 0_^1CORLSB NUM 0_^1CORDIR NUM 0_^1NO96ST NUM 96_^1_%SPC 3_^1*_]_^1*******_%*****_#SYSTEM DIRECTORY ORDINAL CHECK_#*****_^1*_]_^1ORDCHK NOP 0_,ENTRY_^1_%EQU INPDAT(ORDCHK)_^€€1*_]_^1*_,*****_$NOTED THAT THIS SECTION OF CODE WILL_^1*_7BECOME BUFFER -- NAME "INPDAT"_^1*_]_^1_%STA* ORD10_(SAVE ORDINAL NO._^1_%ENQ 0_,ZERO OUT CORE ORDINAL FLAG_^1_%STQ* CORDIR_^1_%STQ* MSB_^1_%SPC 2_^1*_]_^1*_$-----_%FOR MM DIRECTORY PROCESSING_^1*_]_^1ORDM_!LDA- CSYLEN_'GET DIRECTORY LENGTH AND SUBTRACT CORE DIRECT._^1_%SUB- CSYDIR_+LENGTH_^1_%DVI- LPMSK+3_%CONVERT TO NO.€€ OF MM DIRECTORY NO._^1_%SUB* ORD10_(CHECK IF OVER SYSTEM MAX._^1_%SAP ORDM2_(NO, SKIP_^1_%ENQ 11_+TO PRINT ORDINAL NO. ERROR (OVER MAX.)_^1_%JMP (EXTMSG)_^1*_]_^1ORDM2 LDA* ORD10_^1_%INA -1_^1_%MUI- LPMSK+3_%*7_^1_%ADD- DIRTRY_^1_%ADD- CSYDIR_'CORE DIRECTORY OFF-SET, IF ANY_^1_%TRA Q_^1_%LDA- 6,Q_*GET LSB_^1_%STA* LSB_^1_%LDA- 5,Q_*GET AND SAVE MSB_^1_%STA* MSB_^1_%JMP* (ORD€xCHK)_$RETURN_^1_%SPC 3_^1_%EQU SA58(*/96)_^1_%EQU SP58(SA58+1)_^1_%EQU DB58(SP58*96)_^1_%BSS (DB58-*)_^1_%END_]_^__xPLAMREQ CSY/ H85 P€1_%NAM LAMREQ_'DECK-ID H85 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#THIS PROCESSOR MODIFY MASS MEMORY (ASC)_#*_^1*_,*_P*_^1*_,***************************************************_^1*_]_^1*_]_^1*****_-INPUT FORMATS :_^1*_]_^1*_1LAM,SSMSB,SSLSB,SW/AA.........._^1*€€_1LHM,SSMSB,SSLSB,SW/H,H........._^1*_1LIM,SSMSB,SSLSB,SW/D,D,......_^1*_]_^1*_1WHERE SSMSB = START SECTOR (HEX.) MSB_^1*_8SSLSB = START SECTOR (HEX.) LSB_^1*_8SW_"= START WORD (HEX.) (DEFAULT = 0)_^1*_8A_#= ASCII DATA_^1*_8H_#= HEX. DATA_^1*_8D_#= DECIMAL DATA_^1*_]_^1*_]_^1******_,OUTPUT FORMAT_^1*_]_^1*_1NEW_"OLD_$DATA_^1*_]_^1*_1XXXX_!YYYY_^1*_]_^1*****_-AFTER DATA PRINT, CON€€FIRMATION IS REQUIRED FROM_^1*_8OPERATOR_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E S_^1_%ENT LAMREQ_^1_%ENT LHMREQ_^1_%ENT LIMREQ_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ON€€E(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU MASSLU($8C2) LIB. MASS MEMORY UNIT_^1_%EQU NO40(40)_$BUFFER SIZE_^1_%EQU COMLHM(24)_"COMMAND "LHM" INDEX_^1_%EQU COMLIM(29)_"COMMAND "LIM" INDEX_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1€€)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(€€16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$'FETMM' --- GET MM ADDRESS_^1_%EQU PNTMD(10)_#"PNTMD" --- PRINT BOTH CORE AND MM DATA_^1_%EQU CONFM(12)_#'CONFM' -- PRINT NEW + OLD DATA FOR CONFIRM_^1_%SPC €€3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LAMREQ STA* BASE_^1_%EQU LHMREQ(LAMREQ)_^1_%EQU LIMREQ(LAMREQ)_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA* BUFADD_^1_%LDA- HANDLE,I_^1_%STA* EXTHAN_^1_%LDA- MSG,I_^1_%STA* EXTMSG_^1_%SPC 1_^1_%LDA- NEWMLU,I_$GET LU_^1_%STA LIOZ-1_^1_%STA* MLU_^1_%STA* MSB_*AND SET UP FOR SIZE CHECK_^1_%ENA FETMM_(GET MM ADDRE€€SS_^1_%ENQ 1_^1_%RTJ* (EXTHAN)_^1_%ADC MSB-*_^1_%LDA- FIELD,I_%CHECK FOR SLASH ('/')_^1_%INA -SLASH_^1_%SAZ LAM5_^1LA1_"ENQ 4_,FORMAT ERROR_^1_%JMP* (EXTMSG)_^1_%SPC 2_^1*_]_^1*****_-ADDRESS DATA IN, GET INPUT DATA ACCORDINGLY_^1*_]_^1LAM5_!STA* COUNT_^1_%STA* ASMHIL_^1_%STA- SLASHF,I_^1_%STA* PROTYP_^1_%LDA- PROG2,I_%CHECK FOR "LHM"_^1_%INA -COMLHM_^1_%SAN NOTLHM_'SKIP,€€ NOT "LHM"_^1_%JMP* HEXDAT_'TO HEX. DATA PROCESSING_^1NOTLHM RAO* PROTYP_'SET TO DECIMAL TYPE_^1_%INA -COMLIM+COMLHM_#CHECK FOR "LIM"_^1_%SAN LHMX_)NO, SKIP_^1_%JMP* DECDAT_'TO PROCESS DECIMAL DATA_^1****_!*******************************************_^1_%SPC 2_^1*_.2. ASCII DATA PROCESSING_^1LHMX_!RAO* PROTYP_'SET TO ASCII DATA_^1ASCDAT LDQ- BITFLG,I_$GET BYTE POSITION FLAG AND€€ BUFFER POINTER_^1_%STQ* HILO_^1_%LDA- BUFCNT,I_^1_%STA- I_^1AS2_"SQZ AS4_*SKIP, NO ADVANCE CHARACTER IS NEEDED_^1_%ENQ -1_^1_%RAO- I_^1AS4_"INQ 1_^1_%LDA* (BUFADD),I_"GET INPUT TEXT WORD_^1_%STQ* HILO_^1_%SQN AS6_^1_%ARS 8_^1AS6_"AND- LPMSK+8_%ISOLATE CHARACTER_^1_%STA* TEMP_^1_%EOR- LPMSK+8_%CHECK FOR EOT (END OF TEXT)_^1_%SAN AS8_*NO, SKIP_^1_%JMP* AS18_^1*_]_^1AS8_"LDQ* A€€SMHIL_'PUT CHARACTER INTO POSITION_^1_%LDA* TEMP_^1_%SQN AS10_^1_%ALS 8_,PUT CHAR. INTO HI-8-BIT AND INSERT SPACE IN_^1_%INA $20_.LOW-8-BIT_^1_%ENQ 1_^1_%JMP* AS12_^1AS10_!LDA* CHAR_)RECALL HI-8-BIT (DELETE SPACE)_^1_%EOR- ONEBIT+5_^1_%EOR* TEMP_)AND INSERT CURRENT CHAR._^1_%ENQ 0_^1AS12_!STQ* ASMHIL_'SAVE CHAR. POSITION FLAG (0=HI-8)_^1_%STA* CHAR_^1AS14_!LDQ* COUNT_^1_%STA €€INPDAT,Q_$SAVE INPUT TEXT_^1_%LDQ* ASMHIL_^1_%SQN AS15_)SKIP IF NO NEEDED TO ADVANCE STORAGE POINTER_^1_%RAO* COUNT_^1AS15_!LDQ* HILO_)RECALL INPUT TEXT BYTE POSITION FLAG AND_^1_%JMP* AS2_1REPEAT_^1*_]_^1AS18_!LDA* ASMHIL_'UPDATE INPUT TEXT COUNT IF NEEDED_^1_%SAZ AS20_^1_%RAO* COUNT_^1_%SPC 2_^1*_1PRINT DATA AND REQUEST FOR CONFIRMATION_^1AS20_!LDA* MSB_*SET UP MSB AND LSB, SO€€ THAN OLD DATA IS READ_^1_%EQU CONFRM(AS20)_^1_%STA* LIOM_0OVER FOR CONFIRMATION_^1_%STA LIOSM_^1_%LDA* LSB_^1_%STA* LIOL_^1_%STA* LIOSL_^1_%RTJ* SELF_^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LIORT-SELF_"GENERATE RETURN ADD._^1_%STA* LIOE_^1_%RTJ- (AMONI)_^1LIOCD ADC $200+CHRSLV_!READ_^1LIOE_!NUM 0_,RETURN (FILLED)_^1_%NUM 0_,THREAD_^1MLU_"ADC MASSLU_'LU (LIB. UNIT)_^1_%ADC NO€€40_)SIZE_^1BUFADD NUM 0_,BUFFER ADD. (FILLED)_^1LIOM_!NUM 0_,MSB (FILLED)_^1LIOL_!NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_1S T O R A G E_^1PROTYP NUM 0_^1COUNT NUM 0_^1MSB_"BZS MSB(5)_^1_%EQU LSB(MSB+1)_^1_%EQU SW(MSB+4)_^1TEMP_!NUM 0_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1ASMHIL NUM 0_^1HILO_!NUM 0_^1CHAR_!NUM 0_^1ASTCH NUM 0_^1_%SPC 2_^1*_.1.€€ DECIMAL DATA_^1DECDAT ENA GETFLD_'GET INPUT DATA_^1_%ENQ 6_^1_%RTJ* (EXTHAN)_^1_%ENA ASCDEC_'CONVERT TO DEC._^1_%RTJ* (EXTHAN)_^1_%LDQ* COUNT_^1_%STA INPDAT,Q_$SAVE INPUT DATA_^1_%RAO* COUNT_(BUMP STORAGE INDEX BY 1_^1_%LDQ* BASE_^1_%LDA- FIELD,Q_%CHECK IF END OF TEXT_^1_%EOR- LPMSK+8_^1_%SAN DEC3_^1_%JMP* CONFRM_'NO MORE DATA,TO PRINT_^1DEC3_!LDA- FIELD,Q_%CHECK FOR COMMA_^€€1_%INA -COMMA_^1_%SAZ DEC7_^1DEC5_!JMP* LA1_*FORMAT ERROR, GO_^1DEC7_!JMP* DECDAT_'TO REPEAT_^1_%SPC 2_^1*_.0. HEX. DATA_^1HEXDAT ENA 0_^1_%STA* ASTCH_^1_%STA* TEMP_^1HEX2_!ENA GETFLD_'GET INPUT DATA_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1HEXNUM NUM 0_^1*_]_^1****_.TERMINATORS CAN BE (1) COMMA,_^1*_D(2) ASTERISK_^1*_D(3) "NULL"_^1*_€€]_^1_%LDA- FIELD,I_%CHECK FOR COMMA_^1_%INA -COMMA_^1_%SAZ HEX5_)YES, SKIP_^1_%JMP* HEX20_^1HEX5_!LDA* ASTCH_(IS ASTERISK SET_^1_%SAN HEX10_^1_%LDA* HEXNUM_'RECALL DATA AND SAVE_^1HEX6_!LDQ* COUNT_^1_%STA* INPDAT,Q_^1_%RAO* COUNT_^1_%LDA- FIELD,I_%CHECK FOR END OF TEXT_^1_%EOR- LPMSK+8_^1_%SAN HEX8_^1_%JMP* CONFRM_'TO PRINT AND REQUEST FOR CONFIRMATION_^1HEX8_!JMP* HEXDAT_^1***€€_/ASTERISK ENCOUNTERED, 2 CASES CAN BE HAPPENED_^1*_8(1) HEX. NO. FOLLOWS ASTERISK , OR_^1*_8(2) NO., *, AND NO._^1*_]_^1HEX10 LDA* TEMP_^1_%SAN HEX12_(SKIP ON HEX. PROCEDED *_^1_%LDA* SW_+FOR " * HEX" = CURRENT LOC. - HEX. DATA_^1_%ADD* COUNT_^1_%SUB* HEXNUM_^1_%JMP* HEX6_^1*_]_^1HEX12 LDA* HEXNUM_'GENERATE LAST 8 BITS (ADDRESSING)_^1_%SUB* SW_1HEX. NO. - CURRENT LOC_^1_%SUB* €€COUNT_^1_%AND- LPMSK+8_^1_%STA* HEXNUM_^1_%LDA* TEMP_)GET COMMAND AND SHIF) IT TO H-8-BIT_^1_%ALS 8_^1_%AND- NZERO+8_^1_%EOR* HEXNUM_'INSERT LOCATION_^1_%JMP* HEX6_^1*_]_^1****_.DELIMITER IS NOT COMMA_^1*_]_^1HEX20 INA -ASTRIC+COMMA CHECK FOR ASTERISK_^1_%SAN HEX28_(NOT COMMA AND ASTERISK, SKIP_^1HEX22 LDA* ASTCH_(MAKE SURE IT IS NOT YET ENCOUNTERED_^1_%SAN HEX29_^1HEX24 €€RAO* ASTCH_^1_%JMP* HEX2_^1HEX28 LDA- FIELD,I_^1_%EOR- LPMSK+8_%EOT CHECK_^1_%SAZ HEX30_^1HEX29 JMP* DEC5_)ERROR, GO_^1HEX30 JMP* HEX5_^1_%SPC 1_^1*_]_^1LIORT SQP XFOK_)NO READ ERROR, SKIP_^1XFER_!LDQ* BASE_)IOERR_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1XFOK_!LDQ* COUNT_(TO PRINT DATA FOR CONFIRMATION CHECK_^1_%STQ* LIOZ_)SET UP SIZE_^1_%LDA* PROTYP_'SET UP DATA TYPE_^1_%ALS 8€€_^1_%AAQ Q_^1_%ENA CONFM_^1_%RTJ* (EXTHAN)_^1_%ADC INPDAT-*_^1_%LDA* (BUFADD)_$RETURN FROM CONFIRMATION CHECK_^1_%SAZ LIOSAV_'OK, WRITE (SAVE MM)_^1LIOEX LDQ* BASE_)TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_1SAVE DATA IN MASS MEMORY_^1LIOSAV RTJ- (AMONI)_^1LIOVD ADC $500+CHRSLV_!WRITE_^1_%ADC LIOVX-LIOVD_!RETURN_^1_%NUM 0_^1_%ADC MASSLU_^1LIOZ_!NUM 0€F_,SIZE (FILLED)_^1_%ADC INPDAT-LIOVD_^1LIOSM NUM 0_,MSB (FILLED)_^1LIOSL NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1LIOVX SQP SAVOK_^1_%JMP* XFER_^1SAVOK JMP* LIOEX_^1_%SPC 1_^1*_]_^1INPDAT BZS INPDAT(NO40)_^1_%SPC 3_^1*_]_^1_%EQU SA62(*/96)_^1_%EQU SP62(SA62+1)_^1_%EQU DB62(SP62*96)_^1_%BSS (DB62-*)_^1_%END_]_^__FPDDPREQ CSY/ H86 P€1_%NAM DDPREQ_'DECK-ID H86 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,**********************************************_^1*_,*_K*_^1*_,*_#THIS PROCESSOR DUMPS CORE VALUE IN_#*_^1*_,*_)DOUBLE PRECISION FORMAT_**_^1*_,*_K*_^1*_,**********************************************_^1*_]_^1*_]_^1*****_-INPUT FORMAT :_^1*_]_^1*_1DDP,STARTING CORE€€, END CORE,BASE_^1*_]_^1*_]_^1*****_-OUTPUT FORMAT :_^1*_]_^1*_8A TOTAL OF 2 VALUES ARE INSERTED IN A LINE_^1*_]_^1*_+LLLL +0.123456789012D+12_"-0.123456789012D-12_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT DDPREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT MMADDR_^1_%EXT MSG_^1_%EXT MSIZV4_'MAX. SIZE OF CORE OF SYSTEM_^1_%EXT DCONV_(D- OR F-FORMAT CONVERSION FOR D€€OUBLE_^1_%EXT HANDLE_^1_%EXT OFF_^1_%EXT CHRSFG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRS€€LV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU LNWD36(36)_"36WORDS/LINE_^1_%EQU ASMOD($1000) ASC OUTPUT MODE_^1_%EQU MASSLU($8C2) MASS MEMORY LU_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PACKAGE_^1_%EQU EXTBV4($E9)_^1_%EQU WRDLN(2)_$2 DATA VALUES PER LINE_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCD€€EC"_^1_%EQU KARPER($2E)_!CHARACTER = ._^1_%EQU KARE($45)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1€€_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DDPREQ STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADD._^1_%STA BUFADD_^1_%STA* D€€ATLOC_^1_%LDA- BHAN,I_'GET "HANDLE" ADDRESS_^1_%STA* EXTHAN_^1_%ADD* OTB+1_^1_%SUB* OTB_*CALCULATE "OFF" ADDRESS_^1_%STA EXTOFF_^1_%LDA- BMSG,I_'FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_^1_%ADD* MODE_^1_%STA OTLU_^1_%SPC 2_^1*_1GET ALL CORE ADDRESSES_^1_%ENA 0_^1_%STA* COUNT_^1_%LDA =XMSIZV4_$GET MAX. CORE SIZE_^1_%STA* MAX_^1DSP1_!ENA GETFLD_'GET A FIELD (COR€€E LOC.)_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%LDA- FIELD,I_%CHECK IF EMPTY_^1_%SAZ DSP5_^1_%SUB- LPMSK+8_%IS END OF TEXT_^1_%SAZ DSP5_^1_%ADD- LPMSK+8_^1_%INA -COMMA_'IS COMMA_^1_%SAZ DSP5_^1*_]_^1DSP3_!ENQ 4_,INCORRECT FORMAT,_^1_%JMP* (EXTMSG)_^1_%SPC 1_^1*_]_^1OTB_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF" ENTRY_^1MODE_!ADC ASMOD_(ASC OUTPUT MODE_^1*_]_^1DSP5_!ENA€€ ASCHEX_'CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1DSPVA NUM 0_^1_%LDQ* COUNT_^1_%LDA* DSPVA_(STORE LOCATION ACCORDINGLY_^1_%STA* DSPLOC,Q_^1_%RAO* COUNT_^1_%RTJ CORADK_'TO CHECK IF CORE LOC. WITHIN LIMIT_^1_%JMP* DSP3_)ERROR, GO_^1_%LDQ* COUNT_^1_%INQ -3_+CHECK IF DONE_^1_%SQZ DSP10_^1_%JMP* DSP1_)NO, REPEAT_^1_%SPC 1_^1*_]_^1***_/ADJUST ADDRESSES IF NEEDED_^1*_]_^1DSP10 LDA- BUF€€EMT,I_$MAKE SURE IS EMPTY_^1_%EOR- LPMSK+16_^1_%SAZ DSP11_^1_%JMP* DSP3_^1DSP11 LDA* DSPLOC+1_$MAKE SURE "END" LARGER THE "BEGIN"_^1_%SUB* DSPLOC_^1_%SAP DSP12_^1_%JMP* DSP3_^1*_]_^1DSP12 LDA* DSPLOC_^1_%ADD* DSPLOC+2_^1_%STA* DSPLOC_^1_%LDA* DSPLOC+1_^1_%ADD* DSPLOC+2_^1_%STA* DSPLOC+1_^1*_1INSERT DATA_^1DSP19 CLR A_^1_%STA* COUNT_^1_%SPC 2_^1*_1FILL LINE WITH SPACE_^1_%LD€€A =A_^1_%ENQ 35_^1DSP20 STA (BUFADD),Q_^1_%INQ -1_^1_%SQM DSP22_^1_%JMP* DSP20_^1*_1INSERT CORE LOCATION TAG_^1*_]_^1DSP22 LDA* DSPLOC_'ASSEMBLE HI-2-DIGIT OF LOC._^1_%ARS 12_^1_%RTJ* CONASC_^1_%TRA Q_^1_%QLS 8_^1_%LDA* DSPLOC_^1_%ARS 8_^1_%RTJ* CONASC_^1_%EAQ A_^1_%STA* (DATLOC)_$SAVE HI-2-DIGIT_^1_%LDA* DSPLOC_'CONVERT LO-2-DIGIT OF LOC._^1_%ARS 4_^1_%RTJ* CONASC_€€^1_%TRA Q_^1_%QLS 8_^1_%LDA* DSPLOC_^1_%RTJ* CONASC_^1_%EAQ A_^1_%ENQ 1_^1_%STA* (DATLOC),Q_^1*_8INCREMENT DATA LOC. TO VALUE_^1_%ENA 4_^1_%ADD* DATLOC_^1_%STA* DATLOC_^1_%SPC 2_^1*_]_^1****_.GET AND ASSEMBLE VALUE_^1*_]_^1DDP26 LDA* (DSPLOC)_$MOVE FLOATING POINT VALUE INTO CALLING PAR._^1_%STA* VALUE_-ARRAY_^1_%RAO* DSPLOC_^1_%LDA* (DSPLOC)_^1_%STA* VALUE+1_^1_%RAO* DSPLOC_€€^1_%LDA* (DSPLOC)_^1_%STA* VALUE+2_^1_%RAO* DSPLOC_^1_%SPC 2_^1*_]_^1*****_-REQUEST SPACE TO BRING IN FLOATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1_%SPC 3_^1*_]_^1*****_-SUBROUTINE FOR ASSEMBLE ASCII_^1*_]_^1CONASC NOP 0_,ENTRY_^1_%AND€€- MASK+3_'EXTRACT 4 BITS_^1_%INA -10_*CHECK FOR NUMBER_^1_%SAM DASNO_^1_%INA 7_,SET FOR A-F_^1DASNO INA $3A_^1_%JMP* (CONASC)_$EXIT_^1_%SPC 1_^1*_]_^1DATLOC NUM 0_^1EXTMSG NUM 0_,"MSG" ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1COUNT NUM 0_^1BASE_!NUM 0_,PARAMETER ADD._^1_%SPC 2_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* DSPEIO_'TO ERROR (I/O ERROR)_^€€1MAX_"NUM 0_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM TO BE READ_^1_%STQ* LSP31_^1_%STQ* LSP40_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-SELF_^1_%STA* LSP24_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO 'MMADDR' FOR MM ADD. CONVE€€RSION_^1_%STA* LSP26_(SAVE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP24 NUM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTAD€€D ADC DCONV_(D- OR F-FORMAT CONVERSION FOR DOUBLE_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP31 NUM 0_^1DSPEIO LDQ* BASE_)EXIT TO "IOERR"_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1DSPLOC BZS DSPLOC(3)_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1LSP35 ENQ 1_^1_%RTJ* (LSP13)_^1_%ADC €€ VALUE-*_^1LSP37 RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%JMP* DSP100_^1_%SPC 4_^1*_1STORAGE AND/OR CONSTANTS_^1VALUE BZS VALUE(24)_^1_%SPC 5_^1*_]_^1*****_-INSERT INTEGER INTO OUTPUT FORMAT_^1*_]_^1DSP100 ENQ 0_^1DSP101 LDA* VALUE+3,Q_^1_%ALS 8_^1_%ADD* VALUE+4,Q_^1_%STA* (DATLOC)_^1_%RAO* DATLOC_^1_%INQ 2_^1_%TRQ A_^1_%INA €€ -20_^1_%SAP DSP102_'DONE SKIP_^1_%JMP* DSP101_'TO REPEAT ASSEMBLE OUTPUT DATA_^1DSP102 RAO* DATLOC_^1_%RAO* DATLOC_^1_%SPC 2_^1*_1CHECK IF LINE EXHAUSTED_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%INA -WRDLN_^1_%SAZ DSP105_^1*_1CHECK IF DATA EXHAUSTED_^1_%LDA* DSPLOC+1_^1_%SUB* DSPLOC_^1_%SAM DSP105_'DATA EXHAUSTED, TO PRINT_^1_%JMP* DDP26_^1_%SPC 2_^1*_]_^1*****_-PRINT DATA_^1*_]_^1€€DSP105 LDA* SELF_^1_%INA DSPRET-SELF_^1_%STA* DSPX_^1_%RTJ- (AMONI)_%CALL MONITOR_^1_%ADC $C00+CHRSLV_^1DSPX_!NUM 0_,EXIT (TO BE FILLED)_^1_%NUM 0_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1_%ADC LNWD36_^1BUFADD NUM 0_,"BUFFER" ADD._^1_%JMP- (ADISP)_^1_%SPC 2_^1*_1RETURN FROM OUTPUT_^1DSPRET SQP DSPOK_^1_%JMP* DSPEIO_'TO "IOERR" ERROR EXIT_^1*_]_^1DSPOK LDA CHRSFG_'CHECK IF "DX"€€_^1_%SAN DSPREP_'NO, SKIP_^1_%JMP* (EXTOFF)_$EXIT TO "OFF"_^1EXTOFF NUM 0_,"OFF" ADDRESS_^1*_]_^1DSPREP LDA* DSPLOC+1_$CHECK IF ALL DATA EXHAUSTED_^1_%SUB* DSPLOC_^1_%SAM DSPDON_^1_%LDA* BUFADD_'RESTORE BUFFER ADD. AND REPEAT_^1_%STA* DATLOC_^1_%JMP DSP19_^1*_1D O N E ----- E X I T_^1DSPDON LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1_%SPC 4_^1***_/CHEC€€K ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 65K_^1_%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR SO_^1_%SUB MAX_^1_%SAM AD65EX€ή_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1_%SPC 2_^1*_]_^1_%EQU SA39(*/96)_^1_%EQU SP39(SA39+1)_^1_%EQU DB39(SP39*96)_^1_%BSS (DB39-*)_^1_%END_]_^__ήPLDPREQ CSY/ H87 P€1_%NAM LDPREQ_'DECK-ID H87 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#THIS PROCESSOR LOAD DOUBLE PRECISION_#*_^1*_,*_#VALUE(S) FROM INPUT COMMENT MEDIUM_%*_^1*_,*_/INTO CORE_3*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1******_,INP€€UT FORMAT :_^1*_]_^1*_1LDP,CORE LOC.,BASE/DATA_^1*_]_^1*_5WHERE DATA = SIGNED/UNSIGNED 12-DIGIT VALUE_^1*_BWITH/WITHOUT DECIMAL POINT_^1*_]_^1*_;COMMA IS USED TO SEPARATE 2 VALUES_^1*_]_^1*_;DATA = SIGNED FLOATING POINT VALUE_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT LDPREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT MSIZV4_^1_%EXT DCONV_(E- OR F-FORMAT CONVER€€SION FOR DOUBLE_^1_%EXT MMADDR_^1_%EXT MSG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQ€€U MASSLU($8C2)_^1_%EQU EXTBV4($E9)_^1_%SPC 2_^1*_1SUBROUTINE POINTER (FOR REQUEST)_^1_%EQU GETFLD(2)_#"GETFLD" --- GET FIELD SUBROUTINE_^1_%EQU ASCHEX(3)_#"ASCHEC" --- ASC TO HEX._^1_%EQU GETINT(8)_#"GETINT" --- GET SINGLE/DOUBLE PRECISION VALUE_^1_%EQU FLCVDB(14)_""FLCVDB" --- FOR CONFIRMATION_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PACKAGE_^1_%SPC 2_^1*_1PARAMETER L€€OCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"€€_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LDPREQ STA* BASE_^1_%STA- I_^1_%LDA- HANDLE,I_^1_%STA* EXTHAN_^1_%LDA- BMSG,I_'FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%SPC 2_^1_%ENQ 4_,SET 4 CHAR. MAX._^1_%ENA GETFLD_'GET START€€ING LOC._^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1LSPLOC NUM 0_^1*_1CHECK IF BASE ADDRESS USED._^1*_1CONTROL CHAR. = SLASH, BASE IS UNUSED_^1_%LDA- FIELD,I_%IS CONTROL CHAR. = SLASH_^1_%INA -SLASH_^1_%SAN LSP2_)NO, GET BASE_^1_%JMP* LSP10_^1*_]_^1LSP2_!ENA GETFLD_'GET BASE_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHA€€N)_^1LSPBAS NUM 0_^1_%LDA* LSPBAS_'ADDRESS = START LOC. + BASE_^1_%ADD* LSPLOC_^1_%STA* LSPLOC_^1_%SPC 1_^1*_1CHECK FOR FORMAT ---- CONTROL CHAR = SLASH_^1_%LDA* BASE_^1_%STA- I_^1_%LDA- FIELD,I_%IS CONTROL CHAR. = SLASH_^1_%INA -SLASH_^1_%SAZ LSP10_^1LER_"ENQ 4_,TO PRINT FORMAT INCORRECT MESSAGE_^1_%JMP* (EXTMSG)_^1_%SPC 2_^1*_]_^1****_.TO OBTAIN SINGLE PRECISION VALUE_^1*€€_]_^1LSP10 STA- SLASHF,I_^1_%STA* COUNT_^1_%LDA =XMSIZV4_$GET MAX. CORE SIZE_^1_%STA* MAX_^1_%LDA* LSPLOC_'TO CHECK CORE ADD._^1_%STA* CORLOC_^1_%RTJ* CORADK_'TO CHECK IF CORE LOC. WITHIN LIMIT_^1_%JMP* LER_*ERROR, GO_^1LSP11 ENQ 12_+SET 12 DIGITS ARE MAX._^1_%ENA GETINT_'GET DECODE SINGLE/DOUBLE PRECISION_^1_%RTJ* (EXTHAN)_^1_%ADC VALUE-*_^1_%SPC 2_^1*_]_^1*****_-REQUEST SP€€ACE TO BRING IN FLOATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* LSP32_(TO ERROR (I/O ERROR)_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM TO BE READ_^1_%STQ* LSP31_^1_%STQ*€€ LSP40_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-SELF_^1_%STA* LSP24_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO "MMADDR" FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SAVE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP2€€4 NUM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC DCONV_(SECTOR ADD. OF "FLOAT" PACKAGE (DOUBLE)_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TR€€ANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP31 NUM 0_^1LSP32 LDQ* BASE_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_1CONSTANTS OR STORAGE LOC._^1BASE_!NUM 0_,PARAMETER BASE ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1EXTMSG NUM 0_,"MSG" ADD._^1COUNT NUM 0_,NO. OF INPUT VALUES_^1MAX_"NUM 0_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVER€€T NO._^1*_]_^1LSP35 ENQ 0_^1_%RTJ* (LSP13)_^1_%ADC VALUE-*_^1LSP37 RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%LDQ* COUNT_^1_%LDA* VALUE+18_$SAVE FLOATING POINT VALUES IN TEMPORARY_^1_%STA* TEMP,Q_^1_%LDA* VALUE+19_^1_%STA* TEMP+1,Q_^1_%LDA* VALUE+20_^1_%STA* TEMP+2,Q_^1_%RAO* COUNT_(UPDATE STORAGE COUNT BY 3_^1_%RAO* COUNT_^1_%RAO* COUNT_€€^1*_1CHECK IF ALL INPUT TEXT BEED PROCESSED_^1_%LDA* BASE_^1_%STA- I_^1_%LDA- BUFEMT,I_^1_%SAM LSP50_(DONE, SKIP_^1_%JMP* LSP11_(TO REPEAT_^1_%SPC 2_^1*_1PRINT NEW AND OLD DATA AND REQUEST CONFIRMATION_^1LSP50 LDQ* COUNT_^1_%ENA FLCVDB_^1_%RTJ* (EXTHAN)_^1_%ADC TEMP-*_^1_%ADC CORLOC-*_^1_%SPC 3_^1*_]_^1***_/INPUT TEXT EXHAUSTED, MOVE DATA TO CORE_^1*_]_^1_%LDQ* COUNT_(SET UP€€ INDEX TO SAVE DATA_^1LSP51 INQ -1_^1_%SQP LSP55_^1LSP53 LDQ* BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1*_]_^1LSP55 LDA* TEMP,Q_^1_%STA* (CORLOC),Q_^1_%JMP* LSP51_^1CORLOC NUM 0_^1_%SPC 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 65K_^1_€€%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR SO_^1_%SUB* MAX_^1_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1_%SPC 2_^1VALUE BZS VALUE(22)_^1TEMP_!BZS TE€šMP(30)_$FLOATING VALUE TEMPORARY STORAGE_^1_%SPC 2_^1*_]_^1_%EQU SA38(*/96)_^1_%EQU SP38(SA38+1)_^1_%EQU DB38(SP38*96)_^1_%BSS (DB38-*)_^1_%END_]_^__šPLDOREQ CSY/ H88 P€1_%NAM LDOREQ_'DECK-ID H88 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#THIS PROCESSOR LOAD DOUBLE PRECISION_#*_^1*_,*_#VALUE(S) FROM INPUT COMMENT MEDIUM_%*_^1*_,*_/INTO CORE_3*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1******_,INP€€UT FORMATS :_^1*_]_^1******_,(1)_"MODIFY ORDINAL "LSO"_^1*_]_^1*_1LDO,O,L,B/DATA_^1*_]_^1******_,(2)_"MODIFY MM "LSM"_^1*_]_^1*_1LDM,SSMSB,SSLSB,SW/DATA_^1*_]_^1*_5WHERE DATA = SIGNED/UNSIGNED 7 DIGITS VALUE_^1*_BWITH/WITHOUT DECIMAL POINT_^1*_]_^1*_8O_#=ORDINAL NO. (DECIMAL)_^1*_8L_#= LOCATION IN MODULE (HEX)_^1*_8B_#= BASE (HEX) (DEFAULT = 0)_^1*_]_^1*_8SSMSB = START SECTOR€€ MSB (HEX)_^1*_8SSLSB = START SECTOR LSB (HEX)_^1*_8SW_"= START WORD (HEX)_^1*_]_^1*_;COMMA IS USED TO SEPARATE 2 VALUES_^1*_]_^1*_;DATA = SIGNED FLOATING POINT VALUE_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_%N A M E S_^1_%ENT LDOREQ_^1_%ENT LDMREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT DCONV_(D- OR F-FORMAT CONVERSION -- DOUBLE_^1_%EXT MMADDR_^1_%EXT MSG_^1_%EXT MSIZV4€€_'MAX. SIZE OF CORE OF SYSTEM_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASSLU($8C2)_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU CSY€€LEN($E6)_!LENGTH OF SYSTEM DIRECTORY (IN THIS LOC.)_^1_%EQU CSYDIR($E7)_!INDEX OF FIRST MM DIRECTORY_^1_%EQU EXTBV4($E9)_^1_%EQU DIRTRY($EB)_!SYSTEM DIRECTORY CORE LOCATION_^1_%EQU LDO(61)_%PROGRAM INDEX OF "LDO"_^1_%SPC 2_^1*_1SUBROUTINE POINTER (FOR REQUEST)_^1_%EQU GETFLD(2)_#"GETFLD" --- GET FIELD SUBROUTINE_^1_%EQU ASCHEX(3)_#"ASCHEC" --- ASC TO HEX._^1_%EQU ASCDEC(5)_€€#ASE TO DEC._^1_%EQU GETINT(8)_#"GETINT" --- GET SINGLE/DOUBLE PRECISION VALUE_^1_%EQU FETMM(9)_$FETMM --- FETCH/CONVERT MM ADD._^1_%EQU FLCVDB(14)_""FLCVDB" --- PRINT VALUE AND CONFIRM_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PACKAGE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR"€€ ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUF€€FER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LDOREQ STA* BASE_^1_%EQU LDMREQ(LDOREQ)_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA DATBUF_^1_%STA BUFADD_^1_%LDA- HANDLE,I_^1_%STA EXTHAN_^1_%LDA- BMSG,I_'FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- PROG2,I_%GET PROGRAM TYPE_^1_%INA -LDO_^1_%SAZ LSO1_)SKIP ON "LDO"_^1_%SPC 2_^1*_]_^1****_.GET€€ "LSM" DATA --- MM ADDRESSES_^1*_]_^1LSM_"ENQ 0_^1_%LDA- NEWMLU,I_$GET LU_^1_%STA MSB_/FOR MM SIZE CHECK INCONJUNCTION WITH ADD._^1_%STA COUNT-1_^1_%STA XF2WD-1_^1_%ENA FETMM_^1_%RTJ* (EXTHAN)_^1_%ADC MSB-*_^1_%JMP* LSOM_^1_%SPC 2_^1*_]_^1******_,MODIFY ORDINAL, GET (1) ORDINAL, LOC., AND BASE_^1*_]_^1LSO1_!ENA GETFLD_'GET ORDINAL_^1_%ENQ 3_^1_%RTJ* (EXTHAN)_^1_%ENA ASC€€DEC_'CONVERT TO DEC._^1_%RTJ* (EXTHAN)_^1_%SAZ LER_^1_%SAP LSO2_^1LER_"ENQ 4_,TO PRINT FORMAT ERROR_^1_%JMP* (EXTMSG)_^1*_]_^1LSO2_!RTJ ORDCHK_'TO CHECK IF ORDINAL WITHIN LIMIT/GET ADDRESS_^1_%ENQ 4_^1_%ENA GETFLD_'GET LOC._^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1LSPLOC NUM 0_^1*_1GET BASE ADDRESS_^1_%LDA- FIELD,I_^1_%INA -COMMA_'CHECK FOR COM€€MA (GET BASE)_^1_%SAN LSO5_)NO, SKIP_^1_%ENQ 4_,SET FOR 4 CHAR. MAX._^1_%ENA GETFLD_^1_%RTJ* (EXTHAN)_$GET BASE ADDRESS_^1_%ENA ASCHEX_'CONVERT TO HEX._^1_%RTJ* (EXTHAN)_^1LSOB_!NUM 0_^1_%LDA* LSOB_)ASSEMBLE ADDRESS = BASE + L_^1_%ADD* LSPLOC_^1_%STA* LSPLOC_^1_%STA MSB+2_^1LSO5_!ENA FETMM_(CONVERT TO WORD ADDRESSING_^1_%ENQ 2_^1_%RTJ* (EXTHAN)_^1_%ADC MSB-*_^1_%SPC 1_^1*€€_1CHECK FOR FORMAT ---- CONTROL CHAR = SLASH_^1LSOM_!LDA- FIELD,I_%IS CONTROL CHAR. = SLASH_^1_%INA -SLASH_^1_%SAZ LSP10_^1_%JMP* LER_*TO PRINT FORMAT ERROR_^1_%SPC 2_^1*_]_^1****_.TO OBTAIN SINGLE PRECISION VALUE_^1*_]_^1LSP10 STA- SLASHF,I_^1_%STA* COUNT_^1LSP11 ENQ 12_+MAX. 12 DIGITS_^1_%ENA GETINT_'GET DECODE SINGLE/DOUBLE PRECISION_^1_%RTJ* (EXTHAN)_^1_%ADC VALUE-*_^€€1_%SPC 2_^1*_]_^1*****_-REQUEST SPACE TO BRING IN FLOATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* LSP32_(TO ERROR (I/O ERROR)_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM€€ TO BE READ_^1_%STQ* LSP31_^1_%STQ* LSP40_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-SELF_^1_%STA* LSP24_^1_%INA XFRDRT-LSP30_^1_%STA* XFRDAD_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO "MMADDR" FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SA€€VE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP24 NUM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE DUE TO ERROR_^€€1_%NUM $1800_^1LSP31 NUM 0_,CORE ADD. TO BE FILLED_^1LSP32 LDQ* BASE_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1BASE_!NUM 0_,PARAMETER BASE ADD._^1LSP35 ENQ 0_^1_%RTJ* (LSP13)_^1_%ADC VALUE-*_^1LSP37 RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%LDQ* COUNT_^1_%LDA* VA€€LUE+18_$SAVE FLOATING VALUE IN TEMPORARY STORAGE_^1_%STA* TEMP,Q_^1_%LDA* VALUE+19_^1_%STA* TEMP+1,Q_^1_%LDA* VALUE+20_^1_%STA* TEMP+2,Q_^1_%RAO* COUNT_(UPDATE STORAGE COUNT BY 3_^1_%RAO* COUNT_^1_%RAO* COUNT_^1*_1CHECK IF ALL INPUT TEXT BEED PROCESSED_^1_%LDA* BASE_^1_%STA- I_^1_%LDA- BUFEMT,I_^1_%SAM LSO113_'DONE, SKIP_^1_%JMP* LSP11_(TO REPEAT_^1*_1CONSTANTS OR STORAGE LOC._^1E€€XTMSG NUM 0_,"MSG" ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC DCONV_(D- OR F-FORMAT CONVERSION -- DOUBLE_^1_%SPC 3_^1*_]_^1******_,GET MASS MEMORY DATA ACCORDING TO REQUEST TYPE_^1*_]_^1*_]_^1LSO113 LDA MSB_*GET WORD ADDRESSING MSB AND SET UP FOR READ/_^1_%STA* XFMSB1_+WRITE OPERATION_^1_%STA* XFMSB€€2_^1_%LDA LSB_*GET LSB_^1_%STA* XFLSB1_^1_%STA* XFLSB2_^1_%RTJ- (AMONI)_^1XFRDCD ADC $200+CHRSLV_!READ_^1XFRDAD NUM 0_,RETURN (FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1COUNT NUM 0_,NO OF WORDS_^1BUFADD NUM 0_,BUFFER ADD. (FILLED)_^1XFMSB1 NUM 0_,MSB (FILLED)_^1XFLSB1 NUM 0_,LSB_^1_%JMP- (ADISP)_^1*_]_^1XFRDRT SQP XFOR_^1_%JMP* LSP32_(TO I/O ERROR_^1_%SPC 3_^1*_]_^1**€€***_-MM DATA IN CORE, GET CONFIRMATION_^1*_]_^1XFOR_!LDQ* COUNT_^1_%STQ* XF2WD_^1_%ENA FLCVDB_'TO PRINT DATA AND REQUEST CONFIRMATION_^1_%RTJ* (EXTHAN)_^1_%ADC TEMP-*_^1_%ADC DATBUF-*_^1*_1DATA CONFIRMED, SAVE_^1_%RTJ- (AMONI)_^1XF2CD ADC $500+CHRSLV_!WRITE_^1COMBK ADC FINRT-XF2CD_!RETURN_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1XF2WD NUM 0_,NO. OF WORDS (FILLED)_^1_%AD€€C TEMP-XF2CD_"BUFFER_^1XFMSB2 NUM 0_,MSB (FILLED)_^1XFLSB2 NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1DATBUF NUM 0_,BUFFER (FILLED)_^1*_]_^1FINRT LDA* CORLSB_'CHECK IF CORE ORDINAL_^1_%SAZ GETOUT_'NO, SKIP_^1*_]_^1_%STA- I_,SET INDEX WITH CORE LOCATION_^1_%ENQ 0_,MOVE DATA TO CORE ORDINAL LOCATION_^1TOCORE LDA* TEMP,Q_^1_%STA- (ZERO),B_^1_%INQ 1_^1_%TRQ A_,CHECK IF ALL DATA BE€€EN MOVED_^1_%SUB* COUNT_^1_%SAZ GETOUT_'YES, DONE_^1_%JMP* TOCORE_'NO, TO REPEAT_^1*_]_^1GETOUT LDQ* BASE_)EXIT TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1*_]_^1_%SPC 1_^1VALUE BZS VALUE(22)_^1TEMP_!BZS TEMP(30)_$FLOATING VALUE TEMPORARY STORAGE_^1_%SPC 3_^1*_]_^1*******_%*****_#SYSTEM DIRECTORY ORDINAL CHECK_#*****_^1*_]_^1ORDCHK NOP 0_,ENTRY_^1_%STA* ORD10_(SAVE ORD€€INAL NO._^1_%ENQ 0_,ZERO OUT CORE ORDINAL FLAG_^1_%STQ* CORDIR_^1_%STQ* MSB_^1_%JMP* ORDM_^1*_]_^1ORD10 NUM 0_^1CORLSB NUM 0_^1CORDIR NUM 0_^1NO96ST NUM 96_^1_%SPC 2_^1*_]_^1*_$-----_%FOR MM DIRECTORY PROCESSING_^1*_]_^1ORDM_!LDA- CSYLEN_'GET DIRECTORY LENGTH AND SUBTRACT CORE DIRECT._^1_%SUB- CSYDIR_+LENGTH_^1_%DVI- LPMSK+3_%CONVERT TO NO. OF MM DIRECTORY NO._^1_%SUB* ORD10€€_(CHECK IF OVER SYSTEM MAX._^1_%SAP ORDM2_(NO, SKIP_^1_%ENQ 11_+TO PRINT ORDINAL NO. ERROR (OVER MAX.)_^1_%JMP (EXTMSG)_^1*_]_^1ORDM2 LDA* ORD10_^1_%INA -1_^1_%MUI- LPMSK+3_%*7_^1_%ADD- DIRTRY_^1_%ADD- CSYDIR_'CORE DIRECTORY OFF-SET, IF ANY_^1_%TRA Q_^1_%LDA- 6,Q_*GET LSB_^1_%STA* LSB_^1_%LDA- 5,Q_*GET AND SAVE MSB_^1_%STA* MSB_^1_%ENA 0_^1_%STA* MSB+2_^1_%JMP* (ORDCHK)_$RET€œURN_^1MSB_"BZS MSB(5)_^1_%EQU LSB(MSB+1)_^1_%SPC 2_^1*_]_^1_%EQU SA61(*/96)_^1_%EQU SP61(SA61+1)_^1_%EQU DB61(SP61*96)_^1_%BSS (DB61-*)_^1_%END_]_^__œPDMDREQ CSY/ H89 P€1_%NAM DMDREQ_'DECK-ID H89 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#THIS PROCESSOR DUMP MASS MEMORY DATA IN_#*_^1*_,*_)DOUBLE PRECISION FORMAT_/*_^1*_,*_P*_^1*_,***************************************************_^1*_]_^1*****_-INPUT FORMAT :_^1*_]_^1*_]_^1*_1DM€€D,SSMSB,SSLSB,SW,NW_^1*_]_^1*_1WHERE SSMSB = START SECTOR (HEX.) MSB_^1*_8SSLSB = START SECTOR (HEX.) LSB_^1*_8SW_"= START WORD (HEX.)_^1*_8NW_"= NO. OF WORDS TO BE DUMPED (HEX.)_^1*_]_^1*_]_^1*****_-OUTPUT FORMAT :_^1*_]_^1*_8A TOTAL OF 2 VALUES ARE INSERTED IN A LINE_^1*_]_^1*_-MMLLLL/WWWW +0.123456789012D+12 -0.123456789012D-12_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_€€^1_%ENT DMDREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT DCONV_(D- OR F-FORMAT CONVERSION FOR DOUBLE_^1_%EXT MMADDR_^1_%EXT MSG_^1_%EXT MSIZV4_'MAX. SIZE OF CORE OF SYSTEM_^1_%EXT CHRSFG_^1_%EXT OFF_^1_%EXT HANDLE_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_€€^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU EXTBV4($E9)_^1_%EQU LNWD36(36)_"36WORDS/LINE_^1_%EQU ASMOD($1000) ASC OUTPUT MODE_^1_%EQU MASSLU($8C2) MASS MEMORY LU_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PACKAG€€E_^1_%EQU NO40(30)_$BUFFER SIZE_^1_%EQU WRDLN(2)_$NO. OF DATA PER LINE_^1_%SPC 1_^1_%EQU KARPER($2E)_!CHARACTER = ._^1_%EQU KARE($45)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"€€COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU A€€SCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$'FETMM' --- GET MM ADD._^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DMDREQ STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADD._^1_%STA BUFADD_^1_%STA* DATLOC_^1_%LDA- BHAN,I_'GET "HANDLE" ADD._^1_%STA* EXTHAN_^1_%LDA- BMSG,I_'FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA- LISTLU,I_^1_%ADD* MODE€€_^1_%STA OTLU_^1_%LDA- NEWMLU,I_$SET UP MM LU_^1_%STA* DMSLU_^1_%STA* DMSLOC_^1_%SPC 2_^1*_1GET ALL CORE ADDRESSES_^1_%SPC 3_^1*_]_^1*****_-DUMP MASS MEMORY --- SINGLE PRECISION_^1*_]_^1DMSENT ENA FETMM_(GET MM ADD._^1_%ENQ 1_,RETURN WITH INPUT ADD. DATA_^1_%RTJ* (EXTHAN)_^1_%ADC DMSLOC-*_^1_%ENA GETFLD_'GET NEXT FIELD --- NO. OF WORDS_^1_%ENQ 4_^1_%RTJ* (EXTHAN)_^1_%EN€€A ASCHEX_'CONVERT TO HEX_^1_%RTJ* (EXTHAN)_^1NW_#NUM 0_^1_%LDA- BUFEMT,I_$MAKE SURE IS EMPTY_^1_%EOR- LPMSK+16_^1_%SAZ DMS5_^1*_]_^1DSP3_!ENQ 4_,INCORRECT FORMAT,_^1_%JMP* (EXTMSG)_^1MODE_!ADC ASMOD_(ASC OUTPUT MODE_^1*_]_^1DMS5_!STA* INDEX_^1_%LDA* DMSLOC_'SET UP MSB AND LSB_^1_%STA* DMSM_^1_%LDA* DMSLOC+1_^1DMD1R STA* DMSL_^1_%ENA NO40_)NO. OF WORDS TO BE XFER_^1_%STA* DMS€€Z_^1_%STA WDBF_^1_%RTJ- (AMONI)_%READ OVER DATA_^1DMSCD ADC $300+CHRSLV_^1_%ADC DMSRT-DMSCD_^1_%NUM 0_^1DMSLU NUM 0_,LU (FILLED)_^1DMSZ_!NUM 0_,SIZE (FILLED)_^1_%ADC DMSBUF-DMSCD_^1DMSM_!NUM 0_,MSB (FILLED)_^1DMSL_!NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1*_]_^1DMSRT SQP DMS10_^1_%JMP DSPEIO_^1*_]_^1DMS10 CLR A_^1_%STA* COUNT_^1_%SPC 2_^1*_1FILL LINE WITH SPACE_^1*_]€€_^1DMS13 LDA BUFADD_^1_%INA -1_^1_%STA- I_^1_%ENQ 0_-FILL BUFFER WITH SPACE_^1MA12_!LDA =A_^1_%STA- 1,B_^1_%INQ 1_^1_%TRQ A_^1_%INA -36_^1_%SAZ MA14_^1_%JMP* MA12_^1DMSLOC BZS DMSLOC(5)_^1*_1INSERT CORE LOCATION TAG_^1*_]_^1MA14_!LDA* DMSLOC+2_$CONVERT MSB TO ASC_^1_%RTJ* CV4A_^1_%STA- 1,I_^1_%LDA* DMSLOC+3_$GET LSB AND CONVERT TO ASC_^1_%RTJ* CV4A_^1_%STQ- 2,I_^1_%STA€€- 3,I_^1_%LDA* DMSLOC+4_$GET WORD_^1_%RTJ* CV4A_^1_%STA* CV4A_^1_%TRQ A_^1_%ENQ SLASH_(INSERT '/' BETWEEN SECTOR AND WORD_^1_%LLS 8_^1_%STQ- 4,I_^1_%LDQ* CV4A_^1_%ALS 8_^1_%LLS 24_^1_%INA $20_^1_%STA- 6,I_^1_%STQ- 5,I_^1*_]_^1*_8INCREMENT DATA LOC. TO VALUE_^1_%ENA 7_^1_%ADD* DATLOC_^1_%STA* DATLOC_^1_%SPC 2_^1*_]_^1****_.GET AND ASSEMBLE VALUE_^1*_]_^1DMS22 LDQ* INDEX_(SE€€T UP INDEX AND MOVE FLOATING POINT VALUE_^1_%LDA DMSBUF,Q_$INTO CALLING PARAMETER LOCATION_^1_%STA* VALUE_^1_%LDA DMSBUF+1,Q_^1_%STA* VALUE+1_^1_%LDA DMSBUF+2,Q_^1_%STA* VALUE+2_^1_%INQ 3_^1_%STQ* INDEX_^1_%SPC 2_^1*_]_^1*****_-REQUEST SPACE TO BRING IN FLOATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CO€€RE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1INDEX NUM 0_^1_%SPC 1_^1*_]_^1DATLOC NUM 0_^1EXTMSG NUM 0_,"MSG" ADD._^1EXTHAN NUM 0_,"HANDLE" ADD._^1COUNT NUM 0_^1BASE_!NUM 0_,PARAMETER ADD._^1_%SPC 2_^1*_]_^1*****_-ROUTINE TO CONVERT TO I-WORD ASCII_^1*_]_^1CV4A_!NOP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* CI_+SET UP INDEX_^1C1_#LLS 12_+EXTRACT 4-BIT TO A-REG._€€^1_%ALS 4_^1_%STQ* CT_+SAVE REMAINDER_^1_%INA -10_*SET UP CHAR. AS NO. OR A-F_^1_%SAM NOAF1_^1_%INA 7_^1NOAF1 INA $3A_^1_%LDQ* CI_+RECALL INDEX TO SAVE CHAR._^1_%STA* CU,Q_^1_%INQ -3_+CHECK IF DONE_^1_%SQZ CE_+SKIP WHEN DONE_^1_%RAO* CI_^1_%ENQ 0_^1_%LDA* CT_+TO PROCESS ANOTHER ONE_^1_%JMP* C1_^1*_]_^1CT_#NUM 0_^1CU_#BZS CU(4)_^1CI_#NUM 0_^1*_]_^1CE_#LDQ* CU+3_^1_%QLS €€8_,ASSEMBLE INTO 2-CHAR. WORD_^1_%ADQ* CU+2_^1_%LDA* CU+1_^1_%ALS 8_^1_%ADD* CU_^1_%JMP* (CV4A)_'RETURN_^1_%SPC 2_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* DSPEIO_'TO ERROR (I/O ERROR)_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM TO BE READ_^1_%STQ* LSP31_^1_%STQ* LSP40_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-S€€ELF_^1_%STA* LSP24_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO 'MMADDR' FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SAVE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP24 NUM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LS€€P25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC DCONV_(D- OR F-FORMAT CONVERSION FOR DOUBLE_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP31 NUM 0_^1DSPEIO LDQ*€€ BASE_)EXIT TO "IOERR"_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1LSP35 ENQ 1_^1_%RTJ* (LSP13)_^1_%ADC VALUE-*_^1LSP37 RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%JMP* DSP100_^1_%SPC 4_^1*_1STORAGE AND/OR CONSTANTS_^1VALUE BZS VALUE(24)_^1_%SPC 5_^1*_]_^1*****_-INS€€ERT INTEGER INTO OUTPUT FORMAT_^1*_]_^1DSP100 ENQ 0_^1DSP101 LDA* VALUE+3,Q_#ASSEMBLE 2-DIGIT INTO ONE WORD (INTEGER)_^1_%ALS 8_^1_%ADD* VALUE+4,Q_^1_%STA* (DATLOC)_^1_%RAO* DATLOC_^1_%INQ 2_,BUMP NO. OF INTEGER IN E-FORMAT_^1_%TRQ A_^1_%INA -20_*CHECK IF DONE_^1_%SAP DSP102_^1_%JMP* DSP101_^1DSP102 RAO* DATLOC_^1_%RAO* DATLOC_^1_%RAO* DATLOC_'BUMP POINTER TO NEXT VALUE_^€€1_%SPC 2_^1*_1CHECK IF LINE EXHAUSTED_^1_%RAO* COUNT_^1_%LDA* COUNT_^1_%INA -WRDLN_^1_%LDQ* WDBF_)CHECK IF BUFFER EMPTY_^1_%INQ -3_^1_%STQ* WDBF_^1_%SAZ DSP105_^1_%LDA NW_+CHECK IF DATA EXHAUSTED_^1_%INA -3_^1_%STA NW_^1_%SAZ DSP105_^1_%SAM DSP105_^1_%SQZ DSP105_'SKIP IF BUFFER EMPTY_^1_%JMP DMS22_^1_%SPC 2_^1*_]_^1*****_-PRINT DATA_^1*_]_^1DSP105 LDA* SELF_^1_%INA DSP€€RET-SELF_^1_%STA* DSPX_^1_%RTJ- (AMONI)_%CALL MONITOR_^1_%ADC $C00+CHRSLV_^1DSPX_!NUM 0_,EXIT (TO BE FILLED)_^1_%NUM 0_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1_%ADC LNWD36_^1BUFADD NUM 0_,"BUFFER" ADD._^1_%JMP- (ADISP)_^1_%SPC 2_^1*_1RETURN FROM OUTPUT_^1DSPRET SQP DSPOK_^1_%JMP* DSPEIO_'TO "IOERR" ERROR EXIT_^1*_]_^1DSPOK LDA CHRSFG_'CHECK IF "DX"_^1_%SAN DSPREP_'NO, SKIP_^1€€_%JMP* GONE_)YES, TO EXIT_^1DSPREP LDA NW_+CHECK IF ALL DATA EXHAUSTED_^1_%INA -3_^1_%STA NW_^1_%SAZ DSPDON_^1_%SAM DSPDON_^1_%LDA* BUFADD_'RESTORE BUFFER ADD. AND REPEAT_^1_%STA DATLOC_^1_%LDA DMSLOC+4_$UP DATA LOCATION COUNT_^1_%INA 6_^1_%STA DMSLOC+4_^1_%LDA* WDBF_)CHECK IF BUFFER EMPTY_^1_%SAN DMD70_(NO, SKIP_^1_%JMP* DMD201_'YES, TO UPDATE MM ADD. AND READ OVER DATA_€€^1DMD70 JMP DMS10_^1*_1D O N E ----- E X I T_^1DSPDON LDQ BASE_^1_%LDQ- SOMMOR,Q_$EXIT TO "SOMMOR"_^1_%JMP- (ZERO),Q_^1GONE_!LDQ BASE_^1_%LDA* OTB+1_(GENERATE "OFF" ADDRESS_^1_%SUB* OTB_^1_%ADD- BHAN,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_$TO "OFF"_^1OTB_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF" ENTRY_^1_%SPC 2_^1DMD201 STA INDEX_^1_%ENA NO40_)UPDATE MM ADD._^1_%ADD € DMSL_^1_%SAP DMD203_^1_%RAO DMSM_^1_%AND- LPMSK+15_^1DMD203 JMP DMD1R_(TO READ OVER MORE DATA_^1WDBF_!NUM 0_^1_%SPC 2_^1*_]_^1DMSBUF BZS DMSBUF(30)_^1_%SPC 3_^1*_]_^1_%EQU SA49(*/96)_^1_%EQU SP49(SA49+1)_^1_%EQU DB49(SP49*96)_^1_%BSS (DB49-*)_^1_%END_]_^__ PWDKREQ CSY/ H90 P€1_%NAM WDKREQ_'DECK-ID H90 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,****************************************************_^1*_,*_Q*_^1*_,*_#THIS PROCESSOR READ/WRITE MASS MEMORY_'*_^1*_,*_Q*_^1*_,****************************************************_^1*_]_^1*_]_^1******_,INPUT FORMATS :_^1*_]_^1*_1(1) WRITE DATA TO MM FROM CORE_^€€1*_]_^1*_8WDK,SC,EC,SSMSB,SSLSB,SW(CR)_^1*_]_^1*_1(2) READ DATA TO CORE FROM MM_^1*_]_^1*_8RDK,SC,EC,SSMSB,SSLSB,SW(CR)_^1*_]_^1*_1WHERE SSMSB = START SECTOR (HEX) MSB_^1*_8LSMSB = START SECTOR (HEX) LSB_^1*_8SW_"= START WORD (HEX) -- DEFAULT = 0_^1*_8SC_"= START CORE LOC. (HEX)_^1*_8EC_"= END CORE LOC. (HEX)_^1*_]_^1*_]_^1_%SPC 1_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1€€*_1MMLLLL/WWWW_!XXXX XXXX XXXX XXXX_^1*_]_^1*_]_^1*_1WHERE MM_!= 2-DIGIT MSB (HEX.)_^1*_8LLLL = 4-DIGIT LSB (HEX.)_^1*_8WWWW = 4-DIGIT WORD (HEX.)_^1*_8XXXX = MM DATA (8/LINE) (HEX.)_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT WDKREQ_^1_%ENT RDKREQ_^1_%SPC 1_^1*_1E X T E R N A L_^1_%EXT MSIZV4_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($€€EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%EQU EXTBV4($E9)_!LOCATION CONTAINS EXTENDED CORE TABLE_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUT€€PUT ASC MODE_^1_%EQU NO96(96)_$BUFFER SIZE_^1_%EQU WDK(40)_%"WDK" PROGRAM INDEX_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%E€€QU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5)_#"ASCDEC"_^1_%EQU FETMM(9)_$"FETMM"€€ --- GET MM ADDRESS_^1_%EQU MASOT(11)_#"MASOT"-- PRINT MM DATA WITH DIFF. FORMATS_^1_%SPC 3_^1*_]_^1******_'*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1WDKREQ STA* BASE_^1_%EQU RDKREQ(WDKREQ)_^1_%STA- I_^1_%LDA- HANDLE,I_$GET AND SAVE "HANDLG"_^1_%STA* EXTHAN_^1_%LDA- MSG,I_(FETCH AND STORE "MSG"_^1_%STA* EXTMSG_^1_%LDA- NEWMLU,I_$GET MM LU_^1_%STA* DMHLOC_^1_%STA*€€ OTLU_^1_%LDA- PROG2,I_%CALCULATE PROGRAM TYPE_^1_%INA -WDK_^1_%STA* PROTYP_^1_%SPC 2_^1***_/GET CORE ADDRESSES_^1_%ENQ 4_,GET START CORE_^1_%ENA GETFLD_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_^1_%RTJ* (EXTHAN)_^1SC_#NUM 0_^1_%ENQ 4_,GET END CORE_^1_%ENA GETFLD_^1_%RTJ* (EXTHAN)_^1_%ENA ASCHEX_^1_%RTJ* (EXTHAN)_^1EC_#NUM 0_^1_%SPC 1_^1*_1GET MM ADDRESS_^1_%ENA FETMM_(GET MM €€ADDRESS WITH INPUT MM ADD. DATA SAVE_^1_%ENQ 1_^1_%RTJ* (EXTHAN)_^1_%ADC DMHLOC-*_^1_%LDA- BUFEMT,I_$MAKE SURE NO MORE DATA_^1_%EOR- LPMSK+16_^1_%SAZ DMH6_^1*_]_^1DMH3_!ENQ 4_,FORMAT ERROR_^1_%JMP* (EXTMSG)_^1DMH6_!LDA =XMSIZV4_$GET MAX. CORE SIZE_^1_%STA MAX_^1_%LDA* SC_+MAKE SURE START/END CORE WITHIN LIMIT_^1_%RTJ CORADK_^1_%JMP* DMH3_)ERROR_^1_%LDA* EC_^1_%RTJ CORADK_^1€€_%JMP* DMH3_^1*_1MAKE SURE END CORE LARGER_^1_%LDA* SC_^1_%LDQ* EC_^1_%SAM WDK4_)START CORE IS OVER 32K_^1_%SQM WDK2_^1_%TCA A_^1_%AAQ A_^1_%SAM WDK6_)ERROR, SKIP_^1WDK2_!JMP* WDK10_(OK, GO_^1*_]_^1WDK4_!SQP WDK6_)ERROR,_^1_%AAQ A_^1_%SAP WDK10_^1WDK6_!JMP* DMH3_)TO ERROR_^1WRCD_!ADC $500+CHRSLV_!0. WRITE_^1_%ADC $300+CHRSLV_!1. READ_^1*_]_^1WDK10 LDQ* PROTYP_'SET UP€€ READ/WRITE CODE ACCORDINGLY_^1_%STQ- I_^1_%LDA* WRCD,Q_^1_%STA* DMHCD_^1_%SQN DMH9_)SKIP ON READ_^1WDK20 LDA* (SC)_)MOVE DATA TO TEMPORARY BUFFER FOR XFER_^1_%STA* MMDAT,I_^1_%RAO* SC_^1_%RAO- I_^1_%LDA* EC_+CHECK IF DONE_^1_%SUB* SC_^1_%SAM WDK22_(DONE, SKIP_^1_%LDA- I_,CHECK IF BUFFER OVER MAX._^1_%INA -NO96_^1_%SAZ WDK22_^1_%JMP* WDK20_^1WDK22 LDA- I_^1_%JMP* DMH10_^1_%SP€€C 3_^1*_]_^1******_,INPUT DATA IN, TO READ OVER MM DATA_^1*_]_^1DMH9_!ENA NO96_^1DMH10 STA* DMHZ_^1_%STA* SIZE_^1_%LDA* DMHLOC_'SET UP MM ADD._^1_%STA* DMHM_^1_%LDA* DMHLOC+1_^1_%STA* DMHL_^1_%RTJ- (AMONI)_^1DMHCD ADC $300+CHRSLV_!READ_^1_%ADC DMHRT-DMHCD_!RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1DMHZ_!ADC NO96_)NO. OF WORDS_^1_%ADC MMDAT-DMHCD_!€€BUFFER_^1DMHM_!NUM 0_,MSB (TO BE FILLED)_^1DMHL_!NUM 0_,LSB_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1DMHRT SQP DMH20_^1_%LDQ* BASE_)I/O ERROR_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_1S T O R A G E_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1PROTYP NUM 0_,PROGRAM TYPE_^1DMHLOC BZS DMHLOC(5)_^1DONE_!NUM 0_^1SIZE_!NUM 0_^1_%SPC 3_^1*_1DATA BEEN READ/WRITE, CHECK €€ TYPE AND_^1*_8CONTINUE ACCORDINGLY_^1DMH20 LDQ* PROTYP_^1_%SQN RDK3_)SKIP ON READ_^1_%LDA* EC_+CHECK IF DONE_^1_%SUB* SC_^1_%SAM GONE_)YES, SKIP_^1_%JMP* DMH33_(NO, UP DATE_^1GONE_!LDQ* BASE_)EXIT TO "SOMMOR"_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 3_^1*_1READ OPERATION, MOVE DATA_^1RDK3_!ENA 0_^1_%STA- I_,SET UP INDEXES TO MOVE DATA FROM TEMPORARY_^1RDK4_!LDA* MMDAT,I_*€€TO CORE_^1_%STA* (SC)_^1_%RAO* SC_^1_%RAO- I_^1_%LDA* EC_+CHECK IF DONE_^1_%SUB* SC_^1_%SAP RDK5_^1_%JMP* GONE_^1RDK5_!LDA- I_^1_%SUB* DMHZ_^1_%SAZ DMH33_^1_%JMP* RDK4_^1*_1UPDATE POINTERS AND REPEAT_^1DMH33 LDA* DMHLOC+1_$ADJUST MM ADD. AND REPEAT_^1_%ADD* DMHZ_^1_%SAP DMH31_^1_%AND- LPMSK+15_^1_%RAO* DMHLOC_^1DMH31 STA* DMHLOC+1_^1_%JMP* WDK10_^1MMDAT BZS MMDAT(96)_^1MAX_€€"NUM 0_^1_%SPC 4_^1***_/CHECK ADDRESSES TO BE WITHIN 32K_^1*_]_^1CORADK NOP 0_,ENTRY_^1_%LDQ- EXTBV4_'GET 32K/65K FLAG (32K=0, 65K=1)_^1_%LDQ- (ZERO),Q_^1_%SQN AD65_)SKIP ON 65K_^1_%SAM AD32EX_'ERROR, OVER 32K_^1_%SUB* MAX_^1_%SAM AD65EX_^1_%SAZ AD65EX_^1AD32EX JMP* (CORADK)_$RETURN_^1_%SPC 1_^1***_/CHECK TO BE WITHIN 65K OR LESS_^1AD65_!SAP AD65EX_'SKIP FOR 32K OR S€όO_^1_%SUB* MAX_^1_%SAM AD65EX_'OK, SKIP_^1_%JMP* AD32EX_'ERROR, GO_^1AD65EX RAO* CORADK_'SET NORMAL EXIT_^1_%JMP* (CORADK)_$NORMAL RETURN_^1_%SPC 3_^1*_]_^1_%EQU SA40(*/96)_^1_%EQU SP40(SA40+1)_^1_%EQU DB40(SP40*96)_^1_%BSS (DB40-*)_^1_%END_]_^__όPLSTREQ CSY/ H91 P€1_%NAM LSTREQ_'DECK-ID H91 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,*******************************************_^1*_,*_H*_^1*_,*_#ROUTINE TO LIST DEBUG MNEMONICS_#*_^1*_,*_H*_^1*_,*******************************************_^1*_]_^1*_]_^1*_]_^1******_,INPUT FORMAT :_^1*_]_^1*_5LST(CR)_^1*_]_^1*_1WHERE CR = CARRIAGE RETURN_^1*_]€€_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1*_8NAME_!DESCRIPTION_^1*_8NAME_!DESCRIPTION_^1*_8NAME_!DESCRIPTION_^1*_8NAME_!DESCRIPTION_^1*_8NAME_!DESCRIPTION_^1*_8NAME_!DESCRIPTION_^1*_]_^1*_]_^1_%SPC 2_^1*_1E N T R Y_$N A M E_^1_%ENT LSTREQ_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT MSG_^1_%EXT OFF_^1_%EXT MMADDR_^1_%EXT CHRSFG_^1_%EXT NAMEMS_^1_%SPC 2_^1*_1E X T E R N A€€ L S_^1_%EXT LHXREQ_'01. LOAD HEXADECIMAL_^1_%EXT DPCREQ_'02. DUMP HEXADECIMAL_^1_%EXT SCNREQ_'03. SEARCH COR_^1_%EXT SETREQ_'04. SET CORE TO PATTERN_^1_%EXT MBCREQ_'05. MOVE BLOCK OF CORE_^1_%EXT SCHREQ_'06. SCHEDULE PROGRAM_^1_%EXT SPEREQ_'07. SEARCH CORE FOR PARITY ERROR_^1_%EXT CPPREQ_'08. CLEAR PROTECT BITS_^1_%EXT SPPREQ_'09. SET PROTECT BITS_^1_%EXT ADHREQ_'10. ADD€€ HEX. NUMBER_^1_%EXT SBHREQ_'11. SUBTRACT HEX. NUMBER_^1_%EXT ALCREQ_'12. ALLOCATE CORE_^1_%EXT RELREQ_'13. RELEASE CORE_^1_%EXT DACREQ_'14. LIST ALLOCATABLE CORE MAP_^1_%EXT PTHREQ_'15. PRINT THREAD_^1_%EXT ADFREQ_'16. ADVANCE FILE_^1_%EXT BSFREQ_'17. BACKSPACE FILE_^1_%EXT ADRREQ_'18. ADVANCE RECORD_^1_%EXT BSRREQ_'19. BACKSPACE RECORD_^1_%EXT WEFREQ_'20. WRITE END OF F€€ILE_^1_%EXT REWREQ_'21. REWIND TAPE_^1_%EXT LHCREQ_'22. MODIFY CORE IMAGE --- ASCII_^1_%EXT LHOREQ_'23. MODIFY ORDINAL ---HEX_^1_%EXT LHMREQ_'24. MODIFY MASS MEMORY --- HEX_^1_%EXT DICREQ_'25. DUMP DECIMAL (INTEGER)_^1_%EXT MSDREQ_'26. LIST MASS MEMORY_^1_%EXT CLUREQ_'27. CHANGE LIST UNIT_^1_%EXT LITREQ_'28. LOAD DECIMAL (INTEGER)_^1_%EXT LIMREQ_'29. MODIFY MASS MEMORY (IN€€TEGER)_^1_%EXT WCDREQ_'30. WRITE CORE TO MM_^1_%EXT RCDREQ_'31. READ TO CORE FROM MM_^1_%EXT LASREQ_'32. LOAD ASCII_^1_%EXT DASREQ_'33. DUMP ASCII_^1_%EXT MLUREQ_'34. CHANGE MASS MEMORY UNIT_^1_%EXT DPTREQ_'35. LIST PARTITION CORE MAP_^1_%EXT LSPREQ_'36. LOAD SINGLE PRECISION_^1_%EXT DSPREQ_'37. DUMP SINGLE PRECISION_^1_%EXT LDPREQ_'38. LOAD DOUBLE PRECISION_^1_%EXT DDPRE€€Q_'39. DUMP DOUBLE PRECISION_^1_%EXT WDKREQ_'40. WRITE TO DISK FROM CORE_^1_%EXT RDKREQ_'41. READ FROM MASS MEMORY TO CORE_^1_%EXT SMPREQ_'42. SET MASS MEMORY TO PATTERN_^1_%EXT CCCREQ_'43. COMPARE CORE TO CORE_^1_%EXT MMMREQ_'44. MOVE MASS MEMORY_^1_%EXT DMHREQ_'45. DUMP MASS MEMORY_^1_%EXT DMIREQ_'46. DUMP MASS MEMORY --- DECIMAL_^1_%EXT DMAREQ_'47. DUMP MASS MEMORY (ASCI€€I)_^1_%EXT DMSREQ_'48. DUMP MASS MEMORY --- SINGLE PRECISION_^1_%EXT DMDREQ_'49. DUMP MASS MEMORY --- DOUBLE PRECISION_^1_%EXT CWAREQ_'50. CONVERT WORD ADD. TO SECTOR/WORD ADD._^1_%EXT CCMREQ_'51. COMPARE CORE TO MASS MEMORY_^1_%EXT CMMREQ_'52. COMPARE MASS MEMORY TO MM_^1_%EXT SMNREQ_'53. SEARCH MM FOR PATTERN_^1_%EXT UNLREQ_'54. UNLOAD TAPE_^1*_)REQUEST CODE 54 IS SAME AS €€CODE 55 ---- 'UNL'_^1_%EXT SLDREQ_'55. SELECT DENSITY_^1_%EXT LICREQ_'56. MODIFY CORE IMAGE (DECIMAL)_^1_%EXT LACREQ_'57. MODIFY CORE IMAGE (ASCII)_^1_%EXT LIOREQ_'58. MODIFY ORDINAL (DECIMAL)_^1_%EXT LAOREQ_'59. MODIFY ORDINAL (ASCII)_^1_%EXT LSOREQ_'60. MODIFY ORDINAL (SINGLE PRECISION)_^1_%EXT LDOREQ_'61. MODIFY ORDINAL (DOUBLE PRECISION)_^1_%EXT LAMREQ_'62. MODIFY MM (A€€SCII)_^1_%EXT LSMREQ_'63. LOAD MM SINGLE PRECISION (SAME AS 60)_^1_%EXT LDMREQ_'64. MODIFY MM (DOUBLE PRECISION)_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU €€TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU EXTBV4($E9)_^1_%EQU ASMOD($1000) ASC OUTPUT MODE_^1_%EQU MASSLU($8C2) MASS MEMORY LU_^1_%EQU MSPG(8)_%NO. OF MESSAGE IN A PAGE_^1_%EQU NO96(96)_$BUFFER SIZE_^1_%SPC 1_^1*_1SUBROUTINE "EQU" POINTERS_^1_%EQU GETFLD(2)_#"GETFLD"_^1_%EQU ASCHEX(3)_#"ASCHEX"_^1_%EQU ASCDEC(5€€)_#"ASCDEC"_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_€€""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LSTREQ STA* BASE_^1_%STA- I_^1_%LDA- LISTLU,I_$GET LIST UNIT AS OUTPUT UNIT_^1_%ADD* MODE_^1_%STA* OTLU_^1_%SPC 2_^1******_,GET COMMAND MESSA€€GE MM ADDRESS_^1_%LDA* OTB_*GENERATE "MMADDR" LOCATION_^1_%SUB* OTB+1_^1_%ADD- BMSG,I_^1_%TRA Q_^1_%LDA* OTB+2_^1_%RTJ- (ZERO),Q_$TO "MMADDR" FOR MM ADD. CONVERSION_^1_%STA* XFRLSB_'SAVE LSB AND MSB_^1_%STQ* XFRMSB_^1*_]_^1REPEAT RTJ- (AMONI)_^1XFRCD ADC $900+CHRSLV_^1_%ADC XFRET-XFRCD_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC NO96_)SIZE_^1XFBF_!ADC MES-XFRCD_#MESSAGE BUFFER€€ LOC. (FILLED)_^1XFRMSB NUM 0_,MSB (FILLED)_^1XFRLSB NUM 0_,LSB (FILLED)_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_]_^1OTB_"ADC MMADDR_'0. "MMADDR" ENTRY_^1_%ADC MSG_*1. "MSG" ENTRY_^1_%ADC NAMEMS_'2. "NAMEMS" ENTRY_^1OFTB_!ADC OFF_*3. 'OFF'_^1*_]_^1XFRET SQP REDOK_(NO ERROR ENCOUNTERED_^1_%JMP* ERIO_)TO ERROR_^1*_]_^1REDOK ENA MES-PNTCD_#SET UP BUFFER LOC._^1_%ADD* CURTPT_^1_%STA*€€ BUF_^1_%ENA NO96_)UPDATE SIZE OF MESSAGE_^1_%ADD* TOTAL_^1_%STA* TOTAL_^1_%LDQ* CURTPT_^1TERMCK LDA* MES,Q_(GET NO. OF WORDS IN MESSAGE_^1_%INA -1_^1_%STA* NOWORD_^1_%INA 2_^1_%STA* TEMP_^1_%TCA A_^1_%ADD* TOTAL_^1_%SAP CKTY_)MORE DATA IN BUFFER, SKIP_^1_%JMP* NEDROM_'MESSAGE EXHAUSTED, GO UPDATE PROPER POINTERS_^1CKTY_!STA* TOTAL_^1_%LDA* MES+1,Q_%CHECK FOR TERMINATOR_^1_%SA€€P MESTYP_'NO, SKIP_^1DONE_!LDQ* BASE_)ALL DONE, EXIT OT 'SOMMOR'_^1_%LDQ- SOMMOR,Q_^1_%JMP- (ZERO),Q_^1MESTYP SAZ NOHEAD_'SKIP ON HEADING_^1_%LDQ* COUNT_^1_%RAO* COUNT_(BUMP ENTRY COUNT BY 1_^1_%RAO* NOWORD_^1_%LDA ENTABL,Q_$GET ENTRY AND CHECK IF DEFINED IN SYSTEM._^1_%EOR- LPMSK+15_^1_%SAN ASMPNT_^1_%JMP* WRTOK_(GO, ENTRY UNUSED_^1NOHEAD RAO* BUF_*BUMP BUFFER LOC. BY 1_^1ASMP€€NT RAO* BUF_*BUMP TO MESSAGE LOCATION_^1*_]_^1_%SPC 2_^1*_1LIST ALL NMEMONICS, ONE AT A TIME, CAN BE STOPPED_^1*_8BY DX_^1_%RTJ- (AMONI)_^1PNTCD ADC $D00+CHRSLV_!F-WRITE_^1_%ADC RET-PNTCD_#RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LOGICAL UNIT (FILLED)_^1NOWORD NUM 0_,SIZE (FILLED)_^1BUF_"NUM 0_,BUFFER LOC. (FILLED)_^1_%JMP- (ADISP)_^1*_]_^1TOTAL NUM 0_^1CURTPT NUM 0_^1€€TEMP_!NUM 0_^1_%SPC 2_^1*_]_^1***_/RETURN FROM WRITE_^1*_]_^1RET_"SQP WRTOK_(OK, SKIP_^1ERIO_!LDQ* BASE_^1_%LDQ- IOERR,Q_%TO I/O ERROR_^1_%JMP- (ZERO),Q_^1*_]_^1WRTOK LDA CHRSFG_'CHECK IF NO MORE PRINTING_^1_%SAN NEXTLN_'NO, SKIP_^1_%LDA* OFTB_^1_%SUB* OTB+1_(GENERATE 'OFF' ADDRESS_^1_%LDQ* BASE_^1_%ADD- BMSG,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_$TO 'OFF'_^1_%SPC 2_^1*_]_^1*****_-€€CHECK IF ALL PRINTED_^1*_]_^1NEXTLN LDA* TOTAL_(CHECK IF BUFFER EMPTY_^1_%SAN ADJBUF_'NO, SKIP_^1_%STA* CURTPT_'RESET BUFFER POINTER_^1N1_#INA MES-XFRCD_^1_%STA* XFBF_^1_%LDA* XFRLSB_'BUMP SECTOR ADDRESS BY 1_^1_%INA 1_^1_%SAP STL_^1_%RAO* XFRMSB_^1_%AND- LPMSK+15_^1STL_"STA* XFRLSB_^1_%JMP* REPEAT_'TO GET NEXT PAGE_^1*_]_^1*_]_^1*_]_^1*****_-MORE DATA IN BUFFER, CHECK IF AL€€L MESSAGE,DATA IN_^1*****_4OR TERMINATOR_^1*_]_^1ADJBUF LDQ* CURTPT_^1_%ADQ* TEMP_^1_%STQ* CURTPT_^1_%TRQ A_^1_%INA MES-PNTCD_^1_%STA* BUF_^1_%JMP* TERMCK_^1_%SPC 1_^1*_1CONSTANT AND STORAGES_^1BASE_!NUM 0_^1COUNT NUM 0_^1MODE_!ADC ASMOD_^1_%SPC 2_^1*_]_^1*****_-MOVE UNUSED MESSAGE UPWARD AND READ OVER MORE MESSAGE_^1*_]_^1NEDROM LDQ* CURTPT_'SET UP INDEXES_^1_%LDA* TOTAL€€_^1_%STA* TEMP_^1_%ENA 0_^1_%STA- I_^1MOVDAT LDA* MES,Q_(MOVE DATA TO TOP OF MESSAGE BUFFER MAKE ROOM_^1_%STA* MES,I_-FOR NEW DATA (AT BOTTOM)_^1_%RAO- I_^1_%LDA* TEMP_)DECREMENT NO. OF WORDS REMAINED_^1_%INA -1_^1_%SAZ SETB_)SKIP WHEN DONE_^1_%STA* TEMP_)OTHERWISE BUMP POINTERS_^1_%INQ 1_^1_%JMP* MOVDAT_^1SETB_!STA* CURTPT_^1_%LDA- I_^1_%JMP* N1_^1_%SPC 2_^1*_]_^1*****_-MESSG€€AE IS LIMITED TO 20 WORDS OR LESS, THEREFORE_^1*_3BUFFER ('MES') MUST SET UP FOR ONE SECTOR + 20 WORD_^1*_]_^1MES_"BZS MES(NO96+20)_^1_%SPC 2_^1*_]_^1********_*COMMANDS ENTRY POINTERS_^1*_]_^1*********_)ENTRY POINT ASSIGNMENT MUST BE THE SAME AS THOSE_^1*_6ORDERS IN MESSAGE_^1*_]_^1_%SPC 2_^1ENTABL ADC LHXREQ_'01. LOAD HEXADECIMAL_^1_%ADC LITREQ_'28. LOAD DECIMAL (INTEGER)_^€€1_%ADC LASREQ_'32. LOAD ASCII_^1_%ADC LSPREQ_'36. LOAD SINGLE PRECISION_^1_%ADC LDPREQ_'38. LOAD DOUBLE PRECISION_^1_%ADC DPCREQ_'02. DUMP HEXADECIMAL_^1_%ADC DICREQ_'25. DUMP DECIMAL (INTEGER)_^1_%ADC DASREQ_'33. DUMP ASCII_^1_%ADC DSPREQ_'37. DUMP SINGLE PRECISION_^1_%ADC DDPREQ_'39. DUMP DOUBLE PRECISION_^1_%ADC LHMREQ_'24. MODIFY MASS MEMORY --- HEX_^1_%ADC LIMREQ_'29€€. MODIFY MASS MEMORY (INTEGER)_^1_%ADC LAMREQ_'62. MODIFY MM (ASCII)_^1_%ADC LSMREQ_'63. LOAD MM SINGLE PRECISION (SAME AS 60)_^1_%ADC LDMREQ_'64. MODIFY MM (DOUBLE PRECISION)_^1_%ADC LHCREQ_'22. MODIFY CORE IMAGE --- ASCII_^1_%ADC LICREQ_'56. MODIFY CORE IMAGE (DECIMAL)_^1_%ADC LACREQ_'57. MODIFY CORE IMAGE (ASCII)_^1_%ADC LHOREQ_'23. MODIFY ORDINAL ---HEX_^1_%ADC LIOREQ_'€€58. MODIFY ORDINAL (DECIMAL)_^1_%ADC LAOREQ_'59. MODIFY ORDINAL (ASCII)_^1_%ADC LSOREQ_'60. MODIFY ORDINAL (SINGLE PRECISION)_^1_%ADC LDOREQ_'61. MODIFY ORDINAL (DOUBLE PRECISION)_^1_%ADC DMHREQ_'45. DUMP MASS MEMORY_^1_%ADC DMIREQ_'46. DUMP MASS MEMORY --- DECIMAL_^1_%ADC DMAREQ_'47. DUMP MASS MEMORY (ASCII)_^1_%ADC DMSREQ_'48. DUMP MASS MEMORY --- SINGLE PRECISION_^1_%ADC €€ DMDREQ_'49. DUMP MASS MEMORY --- DOUBLE PRECISION_^1_%ADC MSDREQ_'26. LIST MASS MEMORY_^1_%ADC RCDREQ_'31. READ TO CORE FROM MM_^1_%ADC RDKREQ_'41. READ FROM MASS MEMORY TO CORE_^1_%ADC WCDREQ_'30. WRITE CORE TO MM_^1_%ADC WDKREQ_'40. WRITE TO DISK FROM CORE_^1_%ADC ADFREQ_'16. ADVANCE FILE_^1_%ADC BSFREQ_'17. BACKSPACE FILE_^1_%ADC ADRREQ_'18. ADVANCE RECORD_^1_%ADC BSRR€€EQ_'19. BACKSPACE RECORD_^1_%ADC WEFREQ_'20. WRITE END OF FILE_^1_%ADC REWREQ_'21. REWIND TAPE_^1_%ADC UNLREQ_'54. UNLOAD TAPE_^1_%ADC SLDREQ_'55. SELECT DENSITY_^1_%ADC SCNREQ_'03. SEARCH COR_^1_%ADC SMNREQ_'53. SEARCH MM FOR PATTERN_^1_%ADC SETREQ_'04. SET CORE TO PATTERN_^1_%ADC SMPREQ_'42. SET MASS MEMORY TO PATTERN_^1_%ADC SPEREQ_'07. SEARCH CORE FOR PARITY ERROR_^1_%€€ADC CPPREQ_'08. CLEAR PROTECT BITS_^1_%ADC SPPREQ_'09. SET PROTECT BITS_^1_%ADC SCHREQ_'06. SCHEDULE PROGRAM_^1_%ADC ALCREQ_'12. ALLOCATE CORE_^1_%ADC RELREQ_'13. RELEASE CORE_^1_%ADC PTHREQ_'15. PRINT THREAD_^1_%ADC DACREQ_'14. LIST ALLOCATABLE CORE MAP_^1_%ADC DPTREQ_'35. LIST PARTITION CORE MAP_^1_%ADC MBCREQ_'05. MOVE BLOCK OF CORE_^1_%ADC MMMREQ_'44. MOVE MASS MEMORY€€_^1_%ADC CCCREQ_'43. COMPARE CORE TO CORE_^1_%ADC CCMREQ_'51. COMPARE CORE TO MASS MEMORY_^1_%ADC CMMREQ_'52. COMPARE MASS MEMORY TO MM_^1_%ADC ADHREQ_'10. ADD HEX. NUMBER_^1_%ADC SBHREQ_'11. SUBTRACT HEX. NUMBER_^1_%ADC MLUREQ_'34. CHANGE MASS MEMORY UNIT_^1_%ADC CLUREQ_'27. CHANGE LIST UNIT_^1_%ADC CWAREQ_'50. CONVERT WORD ADD. TO SECTOR/WORD ADD._^1_%ADC LSTREQ_'65. LIS€|T COMMAND_^1_%SPC 3_^1*_]_^1_%EQU SA65(*/96)_^1_%EQU SP65(SA65+1)_^1_%EQU DB65(SP65*96)_^1_%BSS (DB65-*)_^1_%END_]_^__|PPRINT CSY/ H92 P€1_%NAM PRINT_(DECK-ID H92 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_[**MSOS4.0**_^1*********************************************************************_^1*****************************AREA 3 SUBROUTINES*****************M****_^1*********************************************************************_^1*_]_^1*_$THIS SUBROUTINE PRINTS MESSAGES. Q CO€€NTAINS_^1*_%THE MESSAGE INDEX._^1*_]_^1*_$INDEX MESSAGE_^1*_'0_!DEBUG IN_^1*_'1_!DEBUG OUT_^1*_'2_!DB I/O ERROR_^1*_'3_!NEXT_^1*_'4_!DB FORMAT INCORRECT_^1*_'5_!DB INVALID REQUEST_^1*_'6_!CELL CONTENTS_^1*_'7_!DB SEARCH FINISHED_^1*_'8_!DB NO CORE AVAILABLE_^1*_'9_!DB ILLEGAL LU_^1*_%10_!DB ILLEGAL MM ADD._^1*_%11_!DB ORDINAL OVER MAX._^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E€€_^1_%ENT PRINT_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT MSG_^1_%EXT ERROR_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_€€1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(1€€1)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICA€€L UNIT_^1_%EQU ASMOD($1000) ASCII MODE OUTPUT_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1PRINT 0_"0_^1_%STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%LDA- COMOLU,I_$GET COMMENT LOGICAL UNIT_^1_%ADD* MODE_)+ MODE (ASCII) CODE_^1_%STA* OTLU_^1_%QLS 1_,ADJUST INDEX FOR 2 WD ENTRY IN TBL._^1_%LDA* MESTBL,Q_$STORE REL. ADDRESS AND L€€ENGTH IN_^1_%STA* MESP+5_(WRITE REQUEST_^1_%LDA* MESTBL+1,Q_^1_%STA* MESP+4_^1_%RTJ- (AMONI)_%INITIATE MESSAGE_^1MESP_!ADC $500+CHRSLV_^1_%ADC MESCOM-MESP_^1_%0_"0_^1OTLU_!NUM 0_,LOGICAL UNIT (TO BO FILLED)_^1_%ADC 0,0_^1_%JMP- (ADISP)_^1MESCOM SQP MESNOE_'SKIP IF NO I/O ERROR_^1_%LDQ* BASE_)EXIT TO "ERROR"_^1_%LDA* OFTB_^1_%SUB* OFTB+1_'CALCULATE "ERROR" ADDRESS_^1_%ADD- BMSG€€,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_^1_%SPC 2_^1OFTB_!ADC ERROR_(0. "ERROR"_^1_%ADC MSG_*1. "MSG"_^1*_]_^1MESNOE JMP* (PRINT)_%RETURN TO CALLER_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1MODE_!ADC ASMOD_^1*_]_^1*_$TABLE OF RELATIVE ADDRESSES (REL. TO START OF_^1*_'WRITE REQUEST) AND LENGTHS FOR MSG. SKELETONS_^1*_]_^1MESTBL ADC MES0-MESP_#0_^1_%ADC LMES0_^1_%ADC MES1-MESP_#1_^1_%ADC LME€€S1_^1_%ADC MES2-MESP_#2_^1_%ADC LMES2_^1_%ADC MES3-MESP_#3_^1_%ADC LMES3_^1_%ADC MES4-MESP_#4_^1_%ADC LMES4_^1_%ADC MES5-MESP_#5_^1_%ADC LMES5_^1_%ADC MES6-MESP_#6_^1_%ADC LMES6_^1_%ADC MES7-MESP_#7_^1_%ADC LMES7_^1_%ADC MES8-MESP_#8_^1_%ADC LMES8_^1_%ADC MES9-MESP_#9_^1_%ADC LMES9_^1_%ADC MES10-MESP_"10_^1_%ADC LMES10_^1_%ADC MES11-MESP_"11_^1_%ADC LMES11_^1*_]€€_^1*_$MESSAGE SKELETONS_^1*_]_^1MES0_!NUM $A0D_^1_%ALF 4,DEBUG IN_^1_%NUM $A0D_^1_%EQU LMES0(*-MES0)_^1MES1_!NUM $A0D_^1_%ALF 5,DEBUG OUT_^1_%NUM $A0D_^1_%EQU LMES1(*-MES1)_^1MES2_!NUM $A0D_^1_%ALF 6,DB I/O ERROR_^1_%NUM $A0D_^1_%EQU LMES2(*-MES2)_^1MES3_!NUM $A0D_^1_%ALF 3,NEXT_^1_%NUM $A0D_^1_%EQU LMES3(*-MES3)_^1MES4_!NUM $A0D_^1_%ALF 10,DB FORMAT INCORRECT_^1_€€%NUM $A0D_^1_%EQU LMES4(*-MES4)_^1MES5_!NUM $A0D_^1_%ALF 9,DB INVALID REQUEST_^1_%NUM $A0D_^1_%EQU LMES5(*-MES5)_^1MES6_!NUM $A0D_^1*_82 CARDS DELETED_569*1567_^1_%EQU LMES6(*-MES6)_^1MES7_!NUM $A0D_^1_%ALF 9,DB SEARCH FINISHED_^1_%NUM $A0D_^1_%EQU LMES7(*-MES7)_^1MES8_!NUM $A0D_^1_%ALF 10,DB NO CORE AVAILABLE_^1_%NUM $A0D_^1_%EQU LMES8(*-MES8)_^1MES9_!NUM $A0D_^1_€`%ALF 7,DB ILLEGAL LU_^1_%NUM $A0D_^1_%EQU LMES9(*-MES9)_^1MES10 NUM $A0D_^1_%ALF 9,DB ILLEGAL MM ADD._^1_%NUM $A0D_^1_%EQU LMES10(*-MES10)_^1MES11 NUM $A0D_^1_%ALF 10,DB ORDINAL OVER MAX._^1_%NUM $A0D_^1_%EQU LMES11(*-MES11)_^1_%SPC 5_^1*_]_^1_%EQU SA19(*/96)_^1_%EQU SP19(SA19+1)_^1_%EQU DB19(SP19*96)_^1_%BSS (DB19-*)_^1_%END_]_^__`PGETFLD CSY/ H93 P€1_%NAM GETFLD_'DECK-ID H93 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_$THIS SUBROUTINE FINDS THE NEXT FIELD THAT IS_^1*_%TERMINATED BY A COMMA SLASH OR ASTERISK_^1*_%AND PLACES IT IN THE FIELD BUFFER._^1*_%IF THE BUFFER WAS EMPTY BLANKS ARE RETURNED._^1*_%IF THE SLASH FLAG IS SET BLANKS ARE RETURNED._^1*_%THE NO. OF CHARACTERS IN THE FIELD€€ ARE_^1*_'SPECIFIED IN THE Q-REGISTER. ONLY THE_^1*_'SPECIFIED NO. OF CHARACTERS PRECEDING THE_^1*_'CONTROL CHARACTER ARE SENT._^1*_%THE CONTROL CHARACTER IS ALSO SENT._^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT GETFLD_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1€€_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_€€%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1GETFLD 0_"0_,(RETURN)_^1_%ST€€A* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE BUFFER ADDRESS_^1_%STA* INBUF_^1_%SPC 1_^1_%STQ* NOCHAR_'SAVE NO. OF CHARACTERS_^1_%LDA =A00_)BACKGROUND WITH ZEROS_^1_%ENQ 3_-WITH BLANKS_^1GET001 STA- FIELD,B_^1_%INQ -1_^1_%SQZ GET002-*-1_^1_%JMP* GET001_^1GET002 LDA- SLASHF,I_$IS SLASH FLAG SET_^1_%SAZ GET003-*-1_^1_%LDA =A ,_)YES,SET CONTROL €€CHARACTER_^1_%STA- FIELD,I_'TO COMMA_^1GETXIT JMP* (GETFLD)_$RETURN TO CALLER_^1GET003 LDA- BUFEMT,I_$IS BUFFER EMPTY_^1_%SAZ GET004-*-1_^1_%ENA 0_,SET TO NO CONTROL CHAR._^1_%STA- FIELD,I_^1_%JMP* GETXIT_^1GET004 ENA 3_,SET FIELD INDEX TO 3_^1_%STA* FIELDX_^1_%ENA 0_,INITIALIZE NO. OF CHAR. IN FIELD COUNTER_^1_%STA* GETCHC_^1_%LDA- BUFCNT,I_$GET BUFFER COUNTER_^1_%LDQ- BITFLG,€€I_$IS NEXT CHAR. IN HI BITS_^1_%STA- I_^1_%STA* TEMP+1_^1GET005 SQZ GET006-*-1_^1_%CLR Q_,YES,CHANGE TO LO_^1_%RAO- I_+BUMP BUFFER INDEX_^1_%RAO* TEMP+1_^1_%JMP* GET007_^1*_]_^1INBUF NUM 0_,"BUFFER" ADDRESS (TO BE FILLED)_^1*_]_^1GET006 ENQ 1_,NO,CHANGE TO HI_^1GET007 LDA* (INBUF),I_'GET WORD_^1_%SQN GET008-*-1_^1_%ARS 8_,POSITION TO LOW BITS_^1GET008 AND- LPMSK+8_^1_%STA* T€€1_+(SAVE IT)_^1_%EOR- LPMSK+8_%IS IT END OF TEXT($FF)_^1_%SAZ GETCCH-*-1_^1_%LDA* T1_^1_%EOR* COMMAC_'IS IT COMMA_^1_%SAZ GETCCH-*-1_^1_%EOR- SIX_*IS IT ASTERISK_^1_%SAZ GETCCH-*-1_^1_%EOR- FIVE_)IS IT SLASH_^1_%SAZ GETCCH-*-1_^1_%RAO* GETCHC_'TALLY NO. OF CHAR. IN FIELD COUMTER_^1_%JMP* GET005_'NOT A CONTROL CHAR._^1*_*PUT CONTROL CHARACTER IN FIELD_^1GETCCH LDA* T1_*GET CONTR€€OL CHARACTER_^1IGOTFD STA* TEMP_*SAVE CONTROL CHAR._^1_%LDA* BASE_)RESTORE PARAMETER ADDRESS_^1_%STA- I_^1_%LDA* TEMP+1_^1_%STA- BUFCNT,I_%SAVE WORD COUNT IN BUFFER_^1_%LDA* TEMP_^1_%STA- FIELD,I_^1_%STQ- BITFLG,I_%SAVE WORD COUNT IN BUFFER_^1_%STQ* T1_^1_%LDA* GETCHC_'IS ACTUAL NO. OF CHAR. IN FIELD_^1_%SUB* NOCHAR_(LESS THAN NO. OF CHAR. DESIRED_^1_%SAP GET010-*-1_#SKIP NO_^1_%L€€DA* GETCHC_'SET DESIRED =ACTUAL_^1_%STA* NOCHAR_^1_%SAN GET010-*-1_"SKIP IF FIELD NOT BLANK_^1_%JMP* GET103_^1GET010 LDA* TEMP+1_'RESTORE WORD COUNT_^1_%INA -1_+DECREASE BUFFER COUNT BY 1_^1_%STA- I_-AND SAVE_^1_%STA* TEMP+1_^1_%SQZ GET100-*-1_"SKIP IF CONTROL CHAR. IN HI BITS_^1_%ENQ 1_^1_%LDA* (INBUF),B_^1_%LDQ* (INBUF),I_'GET WORD FROM BUFFER_^1_%LRS 8_^1_%JMP* GET101_^1GET€€100 LDA* (INBUF),I_#GET WORD FROM BUFFER_^1GET101 LDQ* BASE_)RESTORE PARAMETER BUFFER ADDRESS_^1_%STQ- I_^1_%LDQ* NOCHAR_'DECREASE NO. OF CHAR. BY 1_^1_%INQ -1_^1_%STQ* NOCHAR_^1_%SQN GET102-*-1_"SKIP IF NOT DONE_^1_%AND- LPMSK+8_%OR IN BLANK TO HI BITS_^1_%EOR* TTHOUS_'HEX 3000_^1_%LDQ* FIELDX_^1_%STA- FIELD,B_'STORE IN FIELD WORD_^1_%JMP* GET103_^1GET102 LDQ* FIELDX_'STORE IN €€FIELD WORD_^1_%STA- FIELD,B_^1_%INQ -1_+DECREASE FIELD INDEX BY 1_^1_%STQ* FIELDX_^1_%LDA* NOCHAR_'DECREASE NO. OF CHAR. BY 2_^1_%INA -1_^1_%STA* NOCHAR_^1_%SAZ GET103-*-1_"SKIP IF FILD COMPLETE_^1_%LDQ* T1_+RESTORE CHAR. POSITION_^1_%JMP* GET010_'GO TO GET ANOTHER CHAR._^1GET103 LDA- FIELD,I_%IS IT $FF CONTROL CHAR._^1_%EOR- LPMSK+8_'(EOT)_^1_%SET Q_,SET BUFFER EMPTY_^1_%SAN €€GET104-*-1_"SKIP IF EOT CHAR._^1_%STQ- BUFEMT,I_^1GET104 LDA- FIELD,I_%IS IT SLASH CONTROL CHAR._^1_%EOR* SLASHC_^1_%SAN GET105-*-1_^1_%STQ- SLASHF,I_^1GET105 JMP* GETXIT_'RETURN TO CALLER_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1NOCHAR 0_"0_,NO. OF CHARACTERS_^1GETCHC 0_"0_,NO. OF CHAR . IN FIELD COUNTER_^1T1_#0_"0_,TEMPORARY STORAGE_^1FIELDX 0_"0_,FIELD WORD INDEX_^1COMMAC NUM $2C_*AS€ΘCII FOR COMMA_^1SLASHC NUM $2F_*ASCII FOR SLASH_^1TTHOUS NUM $3000_^1TEMP_!NUM 0,0_^1_%SPC 5_^1*_]_^1_%EQU SA20(*/96)_^1_%EQU SP20(SA20+1)_^1_%EQU DB20(SP20*96)_^1_%BSS (DB20-*)_^1_%END_]_^__ΘPASHX CSY/ H94 P€1_%NAM ASHX_)DECK-ID H94 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_*ASCII TO HEX CONVERSION VALUE OF CHARACTERS IN FIELD_^1*_*ARE STORED IN WORD FOLLOWING RTJ TO ASCHEX. CONTROL IS_^1*_*RETURNED TO SECOND WORD AFTER RTJ. (NUMBERIC CONVERSIONS)_^1*_*ANY NON HEX CHARACTER CAUSES PROGRAM TO CLEAR OUT VALUE_^1*_*SO FAR ACCUMULATE IN CELL FOL€€LOWING RTJ AND CONTINUE._^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT ASCHEX_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1P€€ARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_€€""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1ASCHEX NUM 0_^1_%STA- I_^1_%LDA- MSG,I_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%CLR Q_^1_%STQ* (ASCHEX)_$INITIALIZE_^1_%STQ* LOWFLG_^1_%STQ* PASCTR_^1NXDIG1 LDA- FIELD+2,€€I_#GET "FIELD+2"_^1NEXDIG SQN LFGSET-*-1_"CHECK BIT FLAG_^1_%ARS 8_^1LFGSET AND- LPMSK+7_^1_%INA -$30_)START OF NUMBERS_^1_%SAM ASCCLR-*-1_"ILLEGAL-CLEAR VALUE_^1_%TRA Q_^1_%INA -$3A+$30_$END OF ASCII NOS._^1_%SAP CHKALF-*-1_"SEE IF ALF HEX NUMBER_^1ASCALC LDA* (ASCHEX)_^1_%ALS 4_^1_%EAQ A_^1ASCUP STA* (ASCHEX)_$UPDATE IN (ASCHEX)_^1_%LDA* PASCTR_^1_%LDQ* LOWFLG_^1_%SAZ €€WORONE-*-1_"CHECK WORD_^1_%SQZ WORONE-*-1_"SECOND WORD-CHECK BITS_^1_%RAO* ASCHEX_'DONE EXIT_^1_%JMP* (ASCHEX)_^1ASCCLR ENQ 4_^1_%JMP* (EXTMSG)_^1CHKALF INA -$41+$3A_$ASSII ALF NOS._^1_%SAP ALFOK-*-1_^1_%JMP* ASCCLR_^1ALFOK TRA Q_^1_%INA -$47+$41_^1_%SAM ALFOK1-*-1_^1_%JMP* ASCCLR_^1ALFOK1 INQ 10_+GET TO TRUE VALUE_^1_%JMP* ASCALC_^1WORONE SQZ ASCHI-*-1_#DO NEXT DIGIT_^1_€€%RAO* PASCTR_'ON TO WORD 2_^1_%CLR Q_^1_%STQ* LOWFLG_^1WORTWO LDA- FIELD+3,I_^1_%JMP* NEXDIG_^1ASCHI ENQ 1_^1_%STQ* LOWFLG_^1_%SAZ WDONE-*-1_^1_%JMP* WORTWO_^1WDONE JMP* NXDIG1_^1_%SPC 1_^1*_]_^1EXTMSG NUM 0_^1_%SPC 5_^1*_*FLAGS_^1LOWFLG NUM 0_^1PASCTR NUM 0_^1_%BZS CORRT2(5) **************************************************_^1_%SPC 5_^1*_]_^1_%EQU SA21(*/96)_^1_%EQU €D SP21(SA21+1)_^1_%EQU DB21(SP21*96)_^1_%BSS (DB21-*)_^1_%END_]_^__DPDMPBUF CSY/ H95 P€1_%NAM DMPBUF_'DECK-ID H95 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_*THIS SUBROUTINE PRINTS OUT CORE CELLS ON_^1*_*COMMENT OUTPUT DEVICE. TWO TYPES OF_^1*_*CALLS ARE SHOWN BELOW. ONLY ONE_^1*_*LINE IS OUTPUT. FOUR SPACES BETWEEN CELL_^1*_*AND FIRST CONTENTS THE TWO SPACES_^1*ABSOL RTJ DMPBUF_'Q REG HAS NO OF CELLS_^1*_$ADC STARTING €€CELL_^1*RELAT RTJ DMPBUF_'Q REG HAS NO. OF CELLS_^1*_$ADC (RELATIVE START ADDRESS OF BUFFER TO BE OUTPUT)_^1*_$ADC ADDRESS FROM WHICH DUMP COMES (FOR PRINTOUT)_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT DMPBUF_^1_%SPC 2_^1*_1E X T E R N A L S_^1_%EXT CHRSFG_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT MSG_^1_%EXT OFF_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADI€€SP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%E€€QU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC€€ 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU ASMOD($1000) ASCII MODE OUTPUT_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DMPBUF€€ NUM 0_^1_%STQ* TRAP_)SAVE Q-REGISTER_^1_%STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADDRESS_^1_%STA* BUFADD_^1_%SPC 1_^1_%CLR Q_^1_%LDA- PROG2,I_%DETERMINE LIST UNIT BY ENTRY TYPE_^1_%INA -1_^1*_/ISOLATE ENTRY WITH MASK TO DETERMINE LU_^1*_1IF NON-ZERO, LIST LU IS LIST COMMENT UNIT_^1_%DVI- ONEBIT+4_^1_%STA* OTLU_^1_%LDA- ONEBIT,Q€€_$GET BIT MASK TO ISLOATE LU_^1_%LDQ* OTLU_)RECALL LU MASK INDEX (WORD INDEX)_^1_%AND* LUMSK,Q_^1_%SAZ LUTY3_(SKIP IF IT IS FOR LIST UNIT_^1_%RAO- I_,SET FOR "COMOLU" --- COMMENT UNIT_^1LUTY3 LDA- LISTLU,I_$GET LIST UNIT ACCORDINGLY_^1_%ADD* MODE_)+ MODE (ASCII) CODE_^1_%STA* OTLU_^1_%LDQ* TRAP_)RECALL Q-REGISTER_^1_%SPC 1_^1_%ENA 0_^1_%STA- I_^1_%SPC 1_^1_%LDA* (DMPBUF)_^1_%I€€NQ -16_M**MSOS4.0**_^1_%SQM NOTREL_J**MSOS4.0**_^1_%ADD* DMPBUF_'Q GREATER THAN 16 MEANS RELATIVE_!**MSOS4.0**_^1_%STA* DMPADD_*-- USED BY MSD PROCESSOR_'**MSOS4.0**_^1_%STQ* DMPCTR_'REMOVE BIAS FROM COUNT_,**MSOS4.0**_^1_%JMP* DMP001_J**MSOS4.0**_^1NOTREL INQ 16_N**MSOS4.0**_^1_%STA* DMPADD_J**MSOS4.0**_^1_%STQ* DMPCTR_'SET UP COUNTER_^1_%SPC 3_^1_%LDA* (DMPBUF)_^1_%RTJ* PUTIN€€B_'PUT ASCII CODE IN BUFFER_^1_%LDQ* DMPCTR_^1_%SQP DMP001-*-1_"SKIP IF NOT 1 WORD PRINT-OUT_^1_%JMP* GOOUT_^1DMP001 LDA* SPACE2_^1_%STA* (BUFADD),I_^1_%RAO- I_,4 SPACES_^1DMPLOP STA* (BUFADD),I_^1_%RAO- I_^1_%LDA* (DMPADD)_$GET CELL VALUE_^1_%RTJ* PUTINB_^1_%RAO* DMPADD_^1_%LDA* DMPCTR_^1_%INA -1_^1_%SAZ GOOUT-*-1_^1_%STA* DMPCTR_^1_%LDA* SPACE2_^1_%JMP* DMPLOP_^1_%SPC 5_^1*_*€€BUFFER FULL_^1GOOUT LDA- I_,SET UP LENGTH_^1_%STA* DMPLEN_^1_%LDA CHRSFG_.CHECK IF PROGRAM TO BE TURNED OFF_^1_%LDQ* BASE_)SET UP PARAMETER ADDRESS_^1_%SAN DMPCON-*-1_^1DMPEXI LDA* OFTB_)CALCULATE "OFF" ADDRESS_^1_%SUB* OFTB+1_^1_%ADD- BMSG,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_$EXIT TO "OFF"_^1_%SPC 2_^1*_]_^1OFTB_!ADC OFF_*0. "OFF"_^1_%ADC MSG_*1. "MSG"_^1*_]_^1_%SPC 2_^1*_]_^1DMP€€CON RTJ* TRAP_)GENERATE EXIT ADDRESS_^1TRAP_!NOP 0_^1_%LDA* TRAP_^1_%INA DMPEXT-TRAP_^1_%STA* DMX_^1_%RTJ- (AMONI)_^1DMPCAL ADC $C00+CHRSLV_^1DMX_"NUM 0_,EXIT ADDRESS (TO BE FILLED)_^1_%NUM 0_^1OTLU_!NUM 0_,LOGICAL UNIT (TO BO FILLED)_^1DMPLEN NUM 0_^1BUFADD NUM 0_,"BUFFER" ADDRESS (TO BE FILLED)_^1_%JMP- (ADISP)_^1*_]_^1MODE_!ADC ASMOD_^1*_]_^1_%SPC 5_^1*_*SET UP FOR NE€€XT CELL INCASE LONG PRINTOUT_^1DMPEXT SQP DMPOK1-*-1_"CHECK FOR I/O ERROR_^1_%LDQ* BASE_)CALCULATE "IOERR" ADDRESS_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_$EXIT TO "IOERR"_^1_%SPC 2_^1DMPOK1 LDA* (DMPBUF)_^1_%INA 8_^1_%STA* (DMPBUF)_^1_%RAO* DMPBUF_^1_%JMP* (DMPBUF)_^1_%SPC 5_^1*_*FLAGS, COUNTERS ETC_^1PIBFLG NUM 0_^1DMPTMP NUM 0_^1DMPADD NUM 0_^1DMPCTR NUM 0_^1SPACE2 ALF 1,_+2€€ SPACES_^1_%SPC 5_^1*_*SUBROUTINE TO STORE VAL IN A REG INTO BUFFER_^1PUTINB 0_"0_^1_%STA* DEXHEX_'SAVE HEX NO._^1_%CLR A_^1_%STA* DEXCH_(INITIALIZE ASCII WORD TO BE MADE_^1DEX001 ENQ 1_,INITIALIZE COUNTER FOR 2 WDS._^1DEX002 STQ* DEXCNT_^1DEX003 CLR Q_,GET A HEX DIGIT_^1_%LDA* DEXHEX_^1_%LLS 4_^1_%STA* DEXHEX_^1_%TRQ A_^1_%INA -$A_^1_%SAP DEX004-*-1_"SKIP IF DIGIT A THRU F€€_^1_%INA $3A-$41_^1DEX004 INA $41_*CONVERT TO ASCII_^1_%LDQ* DEXCH_^1_%SQN DEX005-*-1_"SKIP IF NOT FIRST CHAR. FOR WORD_^1_%ALS 8_^1_%STA* DEXCH_^1_%JMP* DEX003_'GO TO GET NEXT HEX DIGIT_^1DEX005 EAQ A_,BUILD ASCII WORD_^1_%STA* (BUFADD),I_"STORE WORD IN BUFFER_^1_%RAO- I_^1_%LDQ* DEXCNT_^1_%SQZ DEX006-*-1_"SKIP IF DONE_^1_%INQ -1_^1_%STQ* DEXCH_(INITIALIZE ASCII WORD_^1_%JM€€P* DEX002_^1DEX006 JMP* (PUTINB)_$RETURN TO CALLER_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1*_$CONSTANTS_^1DEXHEX 0_"0_,HEX NUMBER_^1DEXCH 0_"0_,STORAGE FOR ASCII WORD BEING BUILT_^1DEXCNT 0_"0_,ASCII WORD COUNTER_^1_%SPC 3_^1*_]_^1*****_-LIST LOGICAL UNIT MASK_^1*_]_^1*********_)BIT ASSIGNMENT ---- WORD 1 BIT 0 IS CORRESPONDING_^1*****_ATO ENTRY 1_^1*_]_^1*********_)BIT IS RESET (=0) I€€MPLIED LOGICAL UNIT FROM 'LISTLU'_^1*******_+OTHER WISE LOGICAL UNIT IS OBTAINED FROM 'COMOLU'_^1*_]_^1*********_)FOR EXAMPLE--'DPC' IS ENTRY 2 AND ITS LOGICAL UNIT_^1*********_)IS OBTAINED FROM 'LISTLU'. ITS MASK IS IN BIT 1_^1*******_+OF WORD 1 AND IT IS RESET_^1*_]_^1LUMSK NUM $FFFD,$FCFF,$0FAE,$FFF2_^1_%SPC 1_^1_%SPC 5_^1*_]_^1_%EQU SA22(*/96)_^1_%EQU SP22(SA22+1)_^1_%EQ€0U DB22(SP22*96)_^1_%BSS (DB22-*)_^1_%END_]_^__0PASCDEC CSY/ H96 P€1_%NAM ASCDEC_'DECK-ID H96 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_$THIS SUBROUTINE CONVERTS ASCII(REPRESENTING_^1*_%A SIGNED DECIMAL NO.) TO BINARY. ASCII CHARACTERS_^1*_%ARE IN BUFFER(FIELD+1,2,3)._^1*_%RESULT IS RETURNED IN A-REG._^1*_%LEGAL CHARACTERS ARE +,-,0-9_^1*_%ILLEGAL CHAR. AND +,- ZEROS OUT ACCUMMULATION_^1*_%DECIMAL €€VALUE .GT. 2**15-1 WILL RESULT IN ERROR_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT ASCDEC_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**€€MSOS4.0**_^1_%EQU SPACE($20),PLUS($2C),NEG($2D)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PR€€OG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1ASCDEC 0_"0_^1_%STA- I_^1_%CLR A_,INITIALIZE SIGN AND_^1_%STA* DECSGN_(ACCUMMULATION_^1_%STA* DECACC_^1_%€€ENQ 2_,GET AND STORE ONE CHARACTER_^1DEC001 LDA- FIELD+1,B_#PER WORD_^1_%AND- LPMSK+8_'(GET LSD)_^1_%QLS 1_^1_%STA* DECCHR+1,Q_^1_%QRS 1_^1_%LDA- FIELD+1,B_^1_%ALS 8_^1_%AND- LPMSK+8_^1_%QLS 1_^1_%STA* DECCHR,Q_^1_%QRS 1_^1_%INQ -1_^1_%SQM DEC002-*-1_#SKIP IF DONE_^1_%JMP* DEC001_^1*_$TABLE TO HOLD CHARACTERS_^1_%BZS DECCHR(6)_^1DEC002 ENA 0_,SET INDEX FOR CONVERSION_^1_%€€STA- I_-TO DECIMAL_^1DEC010 LDA* DECCHR,I_$GET CHAR._^1_%INA -PLUS_^1_%SAZ DEC003-*-1_#SKIP IF PLUS SIGN_^1_%INA -NEG+PLUS_^1_%SAN DEC005-*-1_#SKIP IF NOT NEG. SIGN_^1_%ENA -0_,SET SIGN FLAG NEG._^1DEC003 STA* DECSGN_^1_%CLR A_,CLEAR ACCUMMULATION_^1DEC004 JMP* DEC009_^1DEC005 INA -$30+NEG_$IS CHAR. A DECIMAL DIGIT_^1_%SAP DEC006-*-1_#SKIP OK_^1DEC007 CLR A_^1_%JMP* DEC003€€_^1DEC006 INA -$3A+$30_%SKIP OK_^1_%SAM DEC008-*-1_^1_%JMP* DEC007_^1DEC008 INA $A_+CONVERT TO HEX_^1_%MUI* DECTEN,I_$CONVERT TO DECIMAL_^1_%ADD* DECACC_'ADD TO ACCUMMULATED VALUE_^1DEC009 STA* DECACC_^1_%LDA- I_,CONVERSION COMPLETE_^1_%INA -5_^1_%SAZ DEC011-*-1_#SKIP YES_^1_%RAO- I_^1_%JMP* DEC010_'GO TO CONVERT NEXT DIGIT_^1DEC011 LDA* DECACC_'IS SIGN NEG._^1_%LDQ* DECSGN_^1€€_%SQP DEC012-*-1_#SKIP NO_^1_%TCA A_-COMPLEMENT RESULT_^1DEC012 JMP* (ASCDEC)_$RETURN TO CALLER_^1DECACC 0_"0_,STORAGE FOR ACCUMMULATION_^1DECSGN 0_"0_,SIGN FLAG_^1*_$TABLE OF POWERS OF TEN_^1DECTEN NUM 0_,0_^1_%NUM 10000_(1_^1_%NUM 1000_)2_^1_%NUM 100_*3_^1_%NUM 10_+4_^1_%NUM 1_,5_^1*_]_^1_%SPC 5_^1*_]_^1_%EQU SA23(*/96)_^1_%EQU SP23(SA23+1)_^1_%EQU DB23(SP23*96)_^1_%B€SS (DB23-*)_^1_%END_]_^__PHXAS CSY/ H97 P€1_%NAM HXAS_)DECK-ID H97 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_$THIS SUBROUTINE CONVERTS HEX NUMBER TO_^1*_%TWO WORD ASCII FOR PRINTING._^1*_%Q-REG.=HEX NUMBER_^1*_%WORD FOLLOWING CALL CONTAINS RELATIVE_^1*_'INCREMENT TO WHERE ASCII IS TO BE STORED._^1*_%RETURN IS MADE TO SECOND WORD FOLLOWING CALL._^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N €€A M E_^1_%ENT HEXASC_^1_%SPC 1_^1*_1" E Q U "_$T A B L E_^1_%EQU ZERO(2),MASK(3)_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1HEXASC NOP 0_,ENTRY_^1_%STQ* HEXHEX_'SAVE HEX NO._^1_%LDA* (HEXASC)_$CALC. ABS. LOC. TO PUT_^1_%ADD* HEXASC_(ASCII CHARS._^1_%STA* HEXLAS_^1_%RAO* HEXASC_'BUMP RETURN AROUND PARAMETER_^1_%CLR A_^1_%STA* HEXCH_(INIT€€IALIZE ASC WORD TO BE MADE_^1HEX001 ENQ 1_,INITIALIZE COUNTER FOR 2 WDS._^1HEX002 STQ* HEXCNT_^1HEX003 CLR Q_,GET A HEX DIGIT_^1_%LDA* HEXHEX_^1_%LLS 4_^1_%STA* HEXHEX_^1_%TRQ A_^1_%INA -$A_^1_%SAP HEX004-*-1_"SKIP IF DIGIT A THRU F_^1_%INA $3A-$41_^1HEX004 INA $41_*CONVERT TO ASCII_^1_%LDQ* HEXCH_(GET ASC WORD_^1_%SQN HEX005-*-1_"SKIP IF THIS IS NOT FIRST CHAR. FOR WORD_^€€1_%ALS 8_^1_%STA* HEXCH_^1_%JMP* HEX003_'GO TO GET NEXT HEX DIGIT_^1HEX005 EAQ A_,BUILD ASC WORD_^1_%LDQ* HEXLAS_'STORE IT IN SPECIFIED_^1_%STA- (ZERO),Q_%LOCATION_^1_%RAO* HEXLAS_'BUMP TO NEXT LOC._^1_%LDQ* HEXCNT_^1_%SQZ HEX006-*-1_"SKIP IF DONE_^1_%INQ -1_^1_%STQ* HEXCH_(INITIALIZE ASC WORD TO BE MADE_^1_%JMP* HEX002_^1HEX006 JMP* (HEXASC)_$RETURN TO SENDER_^1*_]_^1*_$CONSTA€:NTS_^1HEXHEX 0_"0_,HEX NUMBER_^1HEXLAS 0_"0_,LOC. TO STORE ASCII_^1HEXCH 0_"0_,STORAGE FOR ASCII WORD BEING BUILT_^1HEXCNT 0_"0_,ASCII WORD COUNTER_^1*_[**MSOS4.0**_^1_%EQU SA25(*/96)_F**MSOS4.0**_^1_%EQU SP25(SA25+1)_D**MSOS4.0**_^1_%EQU DB25(SP25*96)_C**MSOS4.0**_^1_%BSS (DB25-*)_H**MSOS4.0**_^1_%END_]_^__:PDECDMP CSY/ H98 P€1_%NAM DECDMP_'DECK-ID H98 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_[**MSOS4.0**_^1*_$THIS SUBROUTINE PRINTS OUT CORE CELLS IN DECIMAL_$**MSOS4.0**_^1*_*FORMAT ON THE COMMENT OUTPUT DEVICE. THE CODE_!**MSOS4.0**_^1*_*IS VERY SIMILAR TO THE HEX FORMAT ROUTINE._%**MSOS4.0**_^1*_[**MSOS4.0**_^1*_*Q REG HAS NUMBER OF CELLS TO OUTPUT_-**MSOS4.0**_€€^1*_*Q GREATER THAN SIXTEEN INDICATES A RELATIVE CALL **MSOS4.0**_^1*_.WITH A BIAS OF SIXTEEN_6**MSOS4.0**_^1*_$NO ADDRESS TAG IS PRINTED (ROUTINE WOULD EXCEDE AREA3)**MSOS4.0**_^1*_[**MSOS4.0**_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT DECDMP_^1_%SPC 1_^1*_1E X T E R N A L_^1_%EXT CHRSFG_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT MSG_^1_%EXT OFF_^1_%SPC 5_^1*_1' E Q U '_%T A€€ B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASK(3)_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG"€€ ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_€€""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 2_^1*_1VARIABLE EQUS_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%SPC 2_^1*_1EQUS FOR LOGICAL UNITS_^1_%EQU COMOUT($8FC) TYPE OUTPUT LOGICAL UNIT_^1_%EQU COMLU($8FD)_!INPUT COMMENT LOGICAL UNIT_^1_%EQU MASSLU($8C2) MASS MEMORY LOGICAL UNIT_^1_%EQU ASMOD($1000) ASCII MODE OUTPUT_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R €€A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DECDMP NOP 0_O**MSOS4.0**_^1_%STA* BASE_)SAVE PARAMETER BUFFER ADDRESS_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADDRESS_^1_%STA* CHEAP_^1_%STA* BUFADD_^1_%INA -1_+"BUFFER"-1_^1_%STA* TEMP_^1_%INA 2_,"BUFFER"+1_^1_%STA* BUFADD+1_^1_%LDA- LISTLU,I_$GET LIST LOGICAL UNIT_^1_%ADD* MODE_)+ MODE (ASCII) CODE_^1_%STA* OTLU_^1_%LDA* (DEC€€DMP)_H**MSOS4.0**_^1_%INQ -16_M**MSOS4.0**_^1_%SQM NTREL_(SKIP IF NOT RELATIVE_.**MSOS4.0**_^1_%ADD* DECDMP_J**MSOS4.0**_^1_%AND- MASK+14_^1_%JMP* DLN301_J**MSOS4.0**_^1NTREL INQ 16_N**MSOS4.0**_^1DLN301 STA* DLNADD_J**MSOS4.0**_^1_%STQ* DLNCTR_J**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%STQ- I_O**MSOS4.0**_^1DLN006 LDA* DLNSP2_'STUF 2 SPACES_5**MSOS4.0**_^1DLN007 STA* (BUFADD),I_€€^1_%RAO- I_O**MSOS4.0**_^1_%LDA* (DLNADD)_H**MSOS4.0**_^1_%RTJ* DLNPIB_'CONVERT AND STUF A WORD_+**MSOS4.0**_^1_%RAO* DLNADD_J**MSOS4.0**_^1_%LDA* DLNCTR_J**MSOS4.0**_^1_%INA -1_N**MSOS4.0**_^1_%SAZ DLNOUT_J**MSOS4.0**_^1_%STA* DLNCTR_J**MSOS4.0**_^1_%JMP* DLN006_J**MSOS4.0**_^1_%SPC 1_^1*_[**MSOS4.0**_^1*_$BUFFER FULL_J**MSOS4.0**_^1*_[**MSOS4.0**_^1DLNOUT LDA- I_,SET UP LENGTH€€_5**MSOS4.0**_^1_%STA* DLNLEN_J**MSOS4.0**_^1_%LDA CHRSFG_'CHECK IF PROGRAM TO BE_^1_%LDQ* BASE_)RESTORE PARAMETER ADDRESS_^1_%SAN DLNCON_/TURNED OFF_0**MSOS4.0**_^1_%LDA* OFTB_)CALCULATE "OFF" ADDRESS_^1_%SUB* OFTB+1_^1_%ADD- BMSG,Q_^1_%TRA Q_^1_%JMP- (ZERO),Q_$TO "OFF", EXIT_^1_%SPC 2_^1*_]_^1OFTB_!ADC OFF_*0. "OFF"_^1_%ADC MSG_*1. "MSG"_^1*_]_^1_%SPC 2_^1DLNCON RTJ* TRAP_€€)GENERATE EXIT ADDRESS_^1TRAP_!NOP 0_^1_%LDA* TRAP_^1_%INA DLNEXT-TRAP_^1_%STA* DLX_^1_%RTJ- (AMONI)_^1DLNCAL ADC $C00+CHRSLV_^1DLX_"NUM 0_,EXIT ADDRESS (TO BE FILLED)_^1_%NUM 0_O**MSOS4.0**_^1OTLU_!NUM 0_,LOGICAL UNIT (TO BO FILLED)_^1DLNLEN NUM 0_O**MSOS4.0**_^1CHEAP NUM 0_^1_%JMP- (ADISP)_I**MSOS4.0**_^1*_]_^1MODE_!ADC ASMOD_^1TEMP_!BZS TEMP(3)_^1*_''BUFADD' CONTAIN "€€BUFFER" ADDRESS --- TO BE FILLED_^1BUFADD EQU BUFADD(TEMP+1)_^1*_]_^1_%SPC 1_^1*_]_^1BASE_!NUM 0_^1*_[**MSOS4.0**_^1*_$SET UP FOR NEXT CELL IN CASE LONG PRINTOUT_+**MSOS4.0**_^1DLNEXT SQP DLNOK_K**MSOS4.0**_^1_%LDQ* BASE_)RESTORE PARAMETER ADDRESS_^1_%LDQ- IOERR,Q_%CALCULATE "IOERR" ADDRESS_^1_%JMP- (ZERO),Q_$EXIT TO "IOERR"_^1_%SPC 2_^1DLNOK LDA* (DECDMP)_H**MSOS4.0**_^1_%IN€€A 8_O**MSOS4.0**_^1_%STA* (DECDMP)_H**MSOS4.0**_^1_%RAO* DECDMP_J**MSOS4.0**_^1_%JMP* (DECDMP)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FLAGS, COUNTERS, ETC._@**MSOS4.0**_^1DLNADD NUM 0_,WORD ADDRESS_6**MSOS4.0**_^1DLNCTR NUM 0_,WORD COUNTER_6**MSOS4.0**_^1DLNSP2 ALF 1,_+2 SPACES_:**MSOS4.0**_^1DLNTMP NUM 0_O**MSOS4.0**_^1DLNPLS NUM $2B00_(PLUS SIGN_9**MSOS4.0**_^1DLNMNS NUM $2D00€€_(MINUS SIGN_8**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$SUBROUTINE TO STORE VAL IN A REG INTO BUFFER IN_%**MSOS4.0**_^1*_*DECIMAL ASCII FORMAT_<**MSOS4.0**_^1DLNPIB NOP 0_O**MSOS4.0**_^1_%STA* DLNTMP_J**MSOS4.0**_^1_%SAP DLN009_'CHECK FOR SIGN_4**MSOS4.0**_^1_%TCA A_,MINUS_=**MSOS4.0**_^1_%STA* DLNTMP_J**MSOS4.0**_^1_%LDA* DLNMNS_J**MSOS4.0**_^1DLN010 STA* (BUFADD),I_^1_%JMP* DLN008_J**€€MSOS4.0**_^1DLN009 LDA* DLNPLS_'PLUS_>**MSOS4.0**_^1_%JMP* DLN010_J**MSOS4.0**_^1DLN008 LDA* DLNTMP_J**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_*CONVERT TO DECIMAL_0**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%RAO- I_O**MSOS4.0**_^1_%STQ* (BUFADD+1),I_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_M**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%LLS 16_N**MSOS4.0**_^1_%ALS 8_O**MSOS4.0**_^1_%€€EOR* (BUFADD+1),I_^1_%STA* (BUFADD+1),I_^1_%TRQ A_O**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_M**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%STQ* (BUFADD),I_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TEN_M**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%LLS 16_N**MSOS4.0**_^1_%ALS 8_O**MSOS4.0**_^1_%EOR* (BUFADD),I_^1_%STA* (BUFADD),I_^1_%TRQ A_O**MSOS4.0**_^1_%CLR Q_O**MSOS4.0**_^1_%DVI- TE€.N_M**MSOS4.0**_^1_%INQ $30_M**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1_%EOR* (BUFADD-1),I_^1_%STA* (BUFADD-1),I_^1_%RAO- I_O**MSOS4.0**_^1_%RAO- I_O**MSOS4.0**_^1_%JMP* (DLNPIB)_H**MSOS4.0**_^1_%SPC 3_^1*_]_^1_%EQU SU07(*/96)_^1_%EQU SB07(SU07+1)_^1_%EQU DS07(SB07*96)_^1_%BSS (DS07-*)_^1_%END_]_^__.PFETMM CSY/ H99 P€1_%NAM FETMM_(DECK-ID H99 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***********************************************_^1*_,*_L*_^1*_,*_#ROUTINE TO GET AND CHECK MM ADDRESS_#*_^1*_,*_L*_^1*_,***********************************************_^1*_]_^1*_]_^1*****_%MASS MEMORY ADDRESS INPUT FORMAT :_^1*_]_^1*_8(1) MSB SECTOR_^1*_8(2) LSB_^1€€*_8(3) WORD_^1*_]_^1*_]_^1*****_%CALLING SEQUENCE :_^1*_]_^1*_8RTJ HANDLE_^1*_8ADC BUFFER_^1*_]_^1*_8Q-REGISTER CONTAINS REQUEST CODE_^1*_C0 = RETURN WITH WORD ADDRESSING_^1*_C1 = RETURN WITH MSB, LSB AND WORD_^1*_C2 = ADDRESSING CONVERSION ONLY_^1*_]_^1*_EBUFFER CONTAINS MM LU AT ENTRY_^1*_EBUFFER CONTAINS MSB AND LSB IN_^1*_LRETURN_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M €€E_^1_%ENT FETMM_^1_%SPC 1_^1*_1E X T E R N A L_^1_%EXT LOG1A_^1_%SPC 2_^1*_1"EQU" TYPE CODE FOR MM LU._^1_%EQU DR1752(3)_#1752 DRUM_^1_%EQU DK853(5)_$1738/853 DISK_^1_%EQU DR1751(6)_#1751 DRUM_^1_%EQU DKC391(7)_#1739-1 CARTRIGE DISK_^1_%EQU DK854(8)_$1738/854 DISK_^1_%EQU DK8541(14)_"1733-1/854 DISK_^1_%EQU DK8562(15)_"1733-2/856-2 DISK_^1_%EQU DK8564(16)_"1733-2/8€€56-4 DISK_^1_%EQU DK8531(39)_"1733-1/853 DISK_^1_%SPC 2_^1*_1MAX. MSB AND LSB OF THE ABOVE_^1_%EQU R1752M(0)_^1_%EQU R1752L($3FFF)_^1_%EQU K853M(0)_^1_%EQU K853L($3E7F)_^1_%EQU R1751M(0)_^1_%EQU R1751L($1551)_^1_%EQU KC391M(0)_^1_%EQU KC391L(23541)_^1_%EQU K854M(0)_^1_%EQU K854L($7EDF)_^1_%EQU K8541M(0)_^1_%EQU K8541L($7EDF)_^1_%EQU K8562M(0)_^1_%EQU K8562L(23541)_^€€1_%EQU K8564M(1)_^1_%EQU K8564L($38D9)_^1_%EQU K8531M(0)_^1_%EQU K8531L($3E7F)_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU M€€ASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%SPC 1_^1*_1ASCII CHARACTER CODES_^1_%EQU KAR0($30)_#CHARACTER =0_^1_%EQU KAR9($39)_#CHARACTER =9_^1_%EQU KARA($41)_#CHARACTER = A_^1_%EQU KARF($46)_#CHARACTER = F_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_€€'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEM€€T(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1FETMM NOP 0_,ENTRY_^1_%STQ* REQTYP_^1_%STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE INPUT BUFFER ADD._^1_%STA* BUFADD_^1_%LDA- HANDLE,I_^1_%STA* EXTHAN_^1_%LDA- MSG,I_^1_%STA* EXTMSG_^1_%LDA* (FETMM)_%GET PARAMETER ADDRESS_^1_%ADD* FETMM_^1_%STA* €€PAR_^1_%RAO* FETMM_(SET EXIT_^1_%INQ -2_+CHECK IF FOR ADDRESSING CONVERSION_^1_%SQN FM_+NO, SKIP_^1_%JMP CONADR_^1_%SPC 1_^1*_]_^1FM_#LDQ- BITFLG,I_^1_%STQ* HILO_^1_%LDA- BUFCNT,I_^1_%STA- I_^1_%ENA 0_^1_%STA* TEMP+3_^1FMA1_!STA* TEMP_^1_%STA* TEMP+1_^1_%STA* TEMP+2_^1FMA4_!SQZ FMA10_(SKIP IF NO CHNAGE IN CHAR. POSITION_^1_%ENQ -1_^1_%RAO- I_^1FMA10 INQ 1_,UPDATE BYTE POSI€€TION FLAG AND SAVE_^1_%STQ* HILO_^1*_]_^1_%LDA* (BUFADD),I_^1_%SQN FMA12_^1_%ARS 8_^1FMA12 AND- LPMSK+8_%ISOLATE CHARACTER_^1_%STA* TEMP_^1_%EOR- LPMSK+8_%CHECK IF END OF TEXT ($FF)_^1_%SAN FMA15_^1_%JMP* FMA50_^1_%SPC 3_^1TEMP_!BZS TEMP(4)_^1HILO_!NUM 0_^1BASE_!NUM 0_^1EXTHAN NUM 0_^1EXTMSG NUM 0_^1BUFADD NUM 0_,"BUFFER" ADDRESS_^1*_]_^1FMA15 LDA* TEMP_^1_%INA -COMMA€€_'CHECK FOR COMMA_^1_%SAN FMA17_^1_%JMP* FMA53_^1FMA17 INA -SLASH+COMMA CHECK FOR SLASH_^1_%SAN FMA19_^1_%LDA* TEMP+3_'FOR SLASH, MAKE SURE ALL 3 FIELDS ARE IN_^1_%INA -2_^1_%SAN FMA20_(ERROR, SKIP_^1_%JMP* FMA53_^1FMA19 LDA* TEMP_)RECALL CHAR. AND CHECK FOR NUMBER (0-9)_^1_%INA -KAR0_^1_%SAZ FMA27_^1_%SAM FMA20_(ERROR_^1_%INA -KAR9+KAR0-1_^1_%SAM FMA23_^1*_1CHECK FOR€€ A--F_^1_%INA -KARA+KAR9+1_^1_%SAZ FMA23_^1_%SAM FMA20_^1_%INA -KARF+KARA-1_^1_%SAM FMA22_^1*_]_^1FMA20 ENQ 4_,FORMAT ERROR_^1_%JMP* (EXTMSG)_^1*_]_^1FMA22 INA 6_^1FMA23 INA 1_^1FMA25 INA 9_^1FMA27 STA* TEMP_^1_%LDA- ONEBIT+4_$CONVERT ASCII TO HEX_^1_%MUI* TEMP+1_^1_%ADD* TEMP_^1_%STA* TEMP+1_^1_%RAO* TEMP+2_'BUMP NO. OF CHAR. COUNT BY 1_^1_%LDA* TEMP+2_^1_%INA -5_^€€1_%SAM FMA32_^1_%JMP* FMA20_^1FMA32 LDQ* HILO_)RECALL BYTE POSITION_^1_%JMP* FMA4_^1_%SPC 2_^1*_]_^1****_.TERMATOR ENCOUNTERED, ---- FIELD TERMINATOR (COMMA),_^1****_JOR INPUT TERMINATOR_^1*_]_^1FMA50 LDA- LPMSK+16_^1_%LDQ* BASE_^1_%STA- BUFEMT,Q_^1_%SPC 2_^1***_0COMMA ENCOUNTERED_^1FMA53 LDQ* TEMP+3_'INCREMENT ADD. FIELD COUNT BY 1_^1_%INQ 1_^1_%STQ* TEMP+3_^1_%LDA* TEMP+€€1_'RECALL ADD. AND SAVE ACCORDINGLY_^1_%STA* MAD-1,Q_^1_%INQ -3_^1_%SQZ FMA60_(ALL 3 ADD. ARE IN, SKIP_^1_%LDA* TEMP_)MAKE SURE IS COMMA_^1_%INA -COMMA_^1_%SAZ FMA55_(YES, SKIP_^1_%JMP* FMA20_^1FMA55 LDQ* HILO_^1_%JMP* FMA1_^1PAR_"NUM 0_^1REQTYP NUM 0_^1_%SPC 2_^1*_]_^1*****_-ALL MM ADDRESS DATA ARE IN, MAKE SURE LSB LESS_^1*****_-THAN/ EQUAL TO $7FFF_^1*_]_^1FMA60 LDA* MA€€D+1_(CHECK IF LSB IS POSITIVE_^1_%SAP FMA62_(YES, SKIP_^1_%JMP* FMA20_(NO, TO PRINT FORMAT ERROR_^1FMA62 LDQ- I_^1_%LDA* BASE_^1_%STA- I_^1_%STQ- BUFCNT,I_$SAVE "BUFFER" COUNT AND BYTE FLAG_^1_%LDA* HILO_^1_%STA- BITFLG,I_^1_%LDA* TEMP_)SET NEXT FIELD ACCORDINGLY --- (COMMA OR EOT)_^1FMA65 STA- FIELD,I_^1_%SPC 2_^1*_]_^1*****_-TO CHECK FOR MAX. SECTORS (PHYSICAL LIMIT OF MM)_^1€€*_8FIRST CONVERT WORD INTO SECTOR_^1F20_"LDA* FT+2_)CONVERT WORD INTO SECTOR IF MORE THAN 96_^1_%ENQ 0_^1NO96_!DVI =N96_^1_%STQ* FT+7_^1_%STA* FT+3_^1_%LDQ* FT_+SUM UP ALL SECTORS_^1_%LDA* FT+1_^1_%ALS 1_^1_%LRS 1_^1_%ADD* FT+3_^1_%LLS 1_^1_%ALS 15_^1_%STA* FT+3_)SAVE FINAL MSB AND LSB_^1_%STQ* FT+4_^1*_]_^1_%LDQ* (PAR)_(GET LU_^1_%LDQ LOG1A,Q_^1_%LDA- 8,Q_*GET LU TYPE CODE_€€^1_%ARS 4_^1_%AND- MASK+6_^1_%STA* TYPEND+1_^1_%ENQ 0_^1F30_"SUB* TYPE,Q_^1_%SAN F31_^1_%JMP* F36_*SKIP WHEN TYPE LOCATED_^1F31_"INQ 1_^1_%TRQ A_^1_%SUB* TYPEND_^1_%SAZ F34_^1_%LDA* TYPEND+1_^1_%JMP* F30_*TO REPORT_^1_%SPC 2_^1*_1STORAGE_^1FT_#BZS FT(8)_^1_%EQU MAD(FT)_^1*_]_^1F34_"ENQ 10_+MM ADDRESS OVER MAX._^1_%JMP* (EXTMSG)_^1*_]_^1F36_"LDA* TYM,Q_(CALCULATE DIFFERENT€€ OF MSB_^1_%SUB* FT+4_^1_%STA* TYPEND+1_^1_%SAM F39_^1_%LDA* TYL,Q_(CALCULATE LSB_^1_%SUB* FT+3_^1_%INA -1_^1_%SAP F42_^1_%LDA* TYPEND+1_$LSB IS LESS, MAKE SURE MSB IS GREATER_^1_%SAN F42_^1F39_"JMP* F34_*OVER MAX. TO ERROR._^1_%SPC 2_^1*_]_^1****_.CONVERT TO WORD ADDRESSING_^1*_]_^1F42_"ENA 0_,ZERO OUT WORD ADDRESSING COUNTERS_^1_%STA* FT+5_^1_%LDA* FT+4_)CHECK IF MSB US€€ED_^1_%SAZ NOMSB_(NO, SKIP_^1_%MUI* NO96+1_'YES, CONVERT MSB INTO WORD ADDRESSING_^1_%MUI- MASK+14_)( MSB*96*32767+96 )_^1_%LLS 1_^1_%ALS 15_^1_%INA 96_^1_%SAP NOMSB-1_^1_%INQ 1_^1_%AND- MASK+14_^1_%STQ* FT+5_^1NOMSB STA* FT+6_^1_%ENA 96_+CONVERT LSB_^1_%MUI* FT+3_)LSB*96_^1_%LLS 1_^1_%ALS 15_^1_%ADQ* FT+5_^1_%STQ* FT+5_^1_%ADD* FT+6_^1_%ADD* FT+7_)+ WORD_^1_%ENQ 0_^1_%L€€LS 1_^1_%ALS 15_^1_%ADQ* FT+5_^1_%STQ* (PAR)_(SAVE MSB FOR CALLER (WORD ADDRESSING)_^1_%RAO* PAR_^1_%STA* (PAR)_(SAVE LSB FOR CALLER_^1_%LDQ* REQTYP_'CHECK FOR REQUEST TYPE_^1_%SQZ F56_^1_%INQ -2_^1_%SQZ F56_^1_%ENQ 1_,PICK UP ALL 3 ADDRESSES AS INPUT_^1F50_"LDA* FT-1,Q_^1_%STA* (PAR),Q_^1_%INQ 1_^1_%TRQ A_,CHECK IF DONE_^1_%INA -4_^1_%SAZ F56_^1_%JMP* F50_^1F56_"JMP (FE€€TMM)_%RETURN_^1_%SPC 1_^1*_$***_(FOR ADDRESSING CONVERSION ONLY_^1CONADR TRA Q_^1_%LDA- (ZERO),Q_$SET UP MSB, LSB AND WORD FOR CONVERSION_^1_%STA* FT+4_)GET AND SAVE MSB_^1_%LDA- 1,Q_*GET AND STORE LSB_^1_%STA* FT+3_^1_%LDA- 2,Q_*GET WORD_^1_%STA* FT+7_^1_%JMP* F42_^1_%SPC 1_^1*_]_^1*_$-----------------------------------------------------------------_^1*_]_^1*_1MM TYPE CODE_^1€€TYPE_!ADC DR1752_^1_%ADC DK853_^1_%ADC DR1751_^1_%ADC DKC391_^1_%ADC DK854_^1_%ADC DK8541_^1_%ADC DK8562_^1_%ADC DK8564_^1_%ADC DK8531_^1TYPEND ADC *-TYPE_^1_%NUM 0_^1_%SPC 1_^1TYM_"ADC R1752M_'MSB_^1_%ADC K853M_^1_%ADC R1751M_^1_%ADC KC391M_^1_%ADC K854M_^1_%ADC K8541M_^1_%ADC K8562M_^1_%ADC K8564M_^1_%ADC K8531M_^1TYL_"ADC R1752L_'LSB_^1_%ADC K853L_^1_%ADC €Ψ R1751L_^1_%ADC KC391L_^1_%ADC K854L_^1_%ADC K8541L_^1_%ADC K8562L_^1_%ADC K8564L_^1_%ADC K8531L_^1_%SPC 3_^1*_]_^1_%EQU SB11(*/96)_^1_%EQU SU11(SB11+1)_^1_%EQU DS11(SU11*96)_^1_%BSS (DS11-*)_^1_%END_]_^__ΨPPNTMD CSY/ I01 P€1_%NAM PNTMD_(DECK-ID I01 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,**************************************************_^1*_,*_O*_^1*_,*_#ROUTINE TO PRINT MASS MEMORY DATA WITH_#*_^1*_,*_/ITS LOCATION_3*_^1*_,*_O*_^1*_,**************************************************_^1*_]_^1*_]_^1******_,CALLING SEQUENCE :_^1*_]_^1*_8RTJ PNTMD€€_^1*_]_^1*_8ADC MMADD-*_"MM ADD. LOC._^1*_8ADC INDEX-*_"DATA INDEX LOC._^1*_8ADC DATLO-*_"DATA LOC._^1*_]_^1*_8ONLY 1 PARAMETER FOR CODE 4_^1*_1IT IS FOR CORE LOCATION_^1*_]_^1*_1Q-REGISTER CONTAINS REQUEST TYPE CODE_^1*_80 = HEADING, 1= INSERT MM LOC/DATA IN COLUMN 1_^1*_82 = INSERT MM LOC/DATA IN COLUMN 2 AND PRINT_^1*_83 = INSERT MM LOC/DATA IN COL. 1 AND PRINT_^1*_84 = INSER€€T CORE LOC/DATA IN COL. 1 AND RETURN_^1*_]_^1*_]_^1*_]_^1******_,OUTPUT FORMAT :_^1*_]_^1*_8MASS MEMORY DATA_^1*_]_^1*_8MMLLLL/WWWW (XXXX)_^1*_]_^1*_8MMLLLL/WWWW (XXXX)_!MMLLLL/WWWW (YYYY)_^1*_]_^1*_?CCCC (XXXX)_!MMLLLL/WWWW (YYYY)_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT PNTMD_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO(€€$12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HAN€€DLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SL€€ASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1PNTMD NOP 0_,ENTRY_^1_%STA* BASE_^1_%STA- I_^1_%STQ* QSAVE_(SAVE Q-REGISTER_^1_%LDA- PROG2,I_%GET PROGRAM NO. AND GENERATE MASK FOR_^1_%INA -1_^1_%ENQ 0_2OUTPUT UNIT_^1_%DVI- ONEBIT+4_$GENERATE BIT MASK INDEXES TO GET€€ OUTPUT LU_^1_%STA* OTLU_^1_%LDA- ONEBIT,Q_$GET PRINT BIT AND "AND" WITH PRINT MASK_^1_%LDQ* OTLU_)GET MASK WORD INDEX_^1_%AND* LUMSK,Q_^1_%SAZ PN5_*SKIP ON 'LISTLU'_^1_%RAO- I_,BUMP INDEX TO COMOLU_^1PN5_"LDA- LISTLU,I_$GET OUTPUT LU_^1_%ADD* MODE_)+ ASCII MODE_^1_%STA* OTLU_^1_%SPC 1_^1*_]_^1_%LDQ* QSAVE_(CHECK IF HEADING REQUEST_^1_%SQN PN10_^1_%JMP* PN30_^1PN10_!ENA 0_^1_%I€€NQ -2_+CHECK FOR REQUEST CODE 2, BUMP INDEX_^1_%SQN PN11_^1_%INA MES25-MES21_^1PN11_!STA- I_^1_%LDQ* (PNTMD)_%GET MM ADDRESS LOCATION_^1_%ADQ* PNTMD_^1_%STQ* TLO_^1_%LDA- (ZERO),Q_$GET MSB_^1_%LDQ* QSAVE_(CHECK IF CODE 4_^1_%INQ -4_^1_%SQZ PN15_^1_%RTJ* CV4A_)CONVERT TO ASCII AND SAVE_^1_%RAO* TLO_^1_%STA* MES21,I_^1_%LDA* (TLO)_(GET LSB_^1_%RTJ* CV4A_^1_%STQ* MES22,I_^1_%STA*€€ MES22+1,I_^1_%RAO* TLO_^1_%LDA* (TLO)_(GET WORD, CONVERT AND SAVE_^1PN15_!RTJ* CV4A_^1_%STA* TLO+1_^1_%TRQ A_^1_%LDQ* QSAVE_(CHECK FOR CODE 4_^1_%INQ -4_^1_%SQZ PN17_^1_%ENQ SLASH_(INSERT "/" IN CONJUNCTION WITH WORD POSITION_^1_%JMP* PN18_^1PN17_!ENQ $20_*INSERT SPACE CODE_^1PN18_!LLS 8_^1_%STQ* MES23,I_^1_%LDQ* TLO+1_^1_%ALS 8_^1_%LLS 24_^1_%INA $20_^1_%STQ* MES23+1,I_^€€1_%STA* MES23+2,I_^1*_]_^1_%RAO* PNTMD_(INCREMENT TO INDEX LOC._^1*_1FOR CODE 4, SKIP NEXT 2 PARAMETERS_^1_%LDA* QSAVE_^1_%INA -4_^1_%SAN PN21_)NOT CODE 4_^1_%LDQ* (TLO)_(GET CORE DATA_^1_%LDA- (ZERO),Q_^1_%JMP* PN23_)TO INSERT CORE DATA_^1PN21_!LDA* (PNTMD)_^1_%ADD* PNTMD_^1_%STA* TLO_^1_%RAO* PNTMD_(BUMP TO DATA LOC._^1_%LDQ* (PNTMD)_%GET DATA BASE LOC. + INDEX_^1_%ADQ* PNTMD_^€€1_%ADQ* (TLO)_^1_%LDA- (ZERO),Q_$GET DATA AND CONVERT TO ASCII AND SAVE_^1_%RAO* PNTMD_(SET EXIT_^1PN23_!RTJ* CV4A_^1_%STQ* MES24,I_^1_%STA* MES24+1,I_^1*_]_^1_%LDQ* QSAVE_(CHECK FOR REQUEST TYPE_^1_%INQ -1_^1_%SQZ PNEX_^1_%INQ -3_^1_%SQN PN30_^1PNEX_!JMP* (PNTMD)_%RETURN_^1_%SPC 1_^1*_1PICK UP MESSAGE LOC. AND SIZE_^1PN30_!LDQ* QSAVE_^1_%QLS 1_^1_%LDA* MESTBL,Q_^1_%LDQ* MEST€€BL+1,Q_^1PN31_!STA* DMPL_^1_%STQ* MPZ_^1PN32_!RTJ- (AMONI)_^1DMPCD ADC $500+CHRSLV_^1_%ADC DMPRT-DMPCD_!RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1MPZ_"NUM 0_,SIZE (TO BE FILLED)_^1DMPL_!NUM 0_,LOC. (TO BE FILLED)_^1_%JMP- (ADISP)_^1*_]_^1DMPRT SQM PN40_^1_%JMP* PNEX_^1PN40_!LDQ* BASE_)EXIT TO "IOERR"_^1_%LDQ- IOERR,Q_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_]_^1B€€ASE_!NUM 0_^1QSAVE NUM 0_^1MODE_!ADC ASMOD_^1TLO_"NUM 0,0_^1_%SPC 3_^1*_]_^1*****_-LIST LOGICAL UNIT MASK_^1*_]_^1*********_)BIT ASSIGNMENT ---- WORD 1 BIT 0 IS CORRESPONDING_^1*****_ATO ENTRY 1_^1*_]_^1*********_)BIT IS RESET (=0) IMPLIED LOGICAL UNIT FROM 'LISTLU'_^1*******_+OTHER WISE LOGICAL UNIT IS OBTAINED FROM 'COMOLU'_^1*_]_^1*********_)FOR EXAMPLE--'DPC' IS ENTRY 2 A€€ND ITS LOGICAL UNIT_^1*********_)IS OBTAINED FROM 'LISTLU'. ITS MASK IS IN BIT 1_^1*******_+OF WORD 1 AND IT IS RESET_^1*_]_^1LUMSK NUM $FFFD,$FCFF,$0FAE,$FFF2_^1_%SPC 2_^1MESTBL ADC MES1-DMPCD_^1_%ADC LMES1_^1_%ADC MES2-DMPCD_^1_%ADC LMESZ_^1_%ADC MES2-DMPCD_"MESSAGE LOC._^1_%ADC LMES2_(MESSAGE SIZE_^1_%SPC 2_^1*_]_^1*****_-ROUTINE TO CONVERT TO I-WORD ASCII_^1*_]_^1CV4€€A_!NOP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* CI_+SET UP INDEX_^1C1_#LLS 12_+EXTRACT 4-BIT TO A-REG._^1_%ALS 4_^1_%STQ* CT_+SAVE REMAINDER_^1_%INA -10_*SET UP CHAR. AS NO. OR A-F_^1_%SAM NOAF1_^1_%INA 7_^1NOAF1 INA $3A_^1_%LDQ* CI_+RECALL INDEX TO SAVE CHAR._^1_%STA* CU,Q_^1_%INQ -3_+CHECK IF DONE_^1_%SQZ CE_+SKIP WHEN DONE_^1_%RAO* CI_^1_%ENQ 0_^1_%LDA* CT_+TO PROCESS ANOTHER ONE€€_^1_%JMP* C1_^1*_]_^1CT_#NUM 0_^1CU_#BZS CU(4)_^1CI_#NUM 0_^1*_]_^1CE_#LDQ* CU+3_^1_%QLS 8_,ASSEMBLE INTO 2-CHAR. WORD_^1_%ADQ* CU+2_^1_%LDA* CU+1_^1_%ALS 8_^1_%ADD* CU_^1_%JMP* (CV4A)_'RETURN_^1_%SPC 4_^1*_1MESSAGE_^1*_]_^1MES1_!NUM $A0D_^1_%ALF 8,MASS MEMORY DATA_^1_%NUM $A0D_^1_%EQU LMES1(*-MES1)_^1*_]_^1MES2_!NUM $A0D_^1MES21 ALF 1,_+MSB OF BLOCK 1_^1MES22 ALF 2,€€_+LSB_^1MES23 ALF 3,/_*WORD_^1_%ALF 2,_!(_^1MES24 ALF 2,_+BLOCK 1 DATA_^1_%ALF 1,)_^1MESXX ALF 2,_^1MES25 ALF 1,_+MSB BLOCK 2_^1MES26 ALF 2,_+LSB_^1MES27 ALF 3,/_^1_%ALF 2,_!(_^1MES28 ALF 2,_+BLOCK 2 DATA_^1_%ALF 1,)_^1_%EQU LMES2(*-MES2)_^1_%EQU LMESZ(MESXX-MES2)_^1_%SPC 3_^1*_]_^1_%EQU SB10(*/96)_^1_%EQU SU10(SB10+1)_^1_%EQU DB10(SU10*96)_^1_%BSS (DB10-*)€"_^1_%END_]_^__ ALF 3,/_*WORD_^1_%"PMASOT CSY/ I02 P€1_%NAM MASOT_(DECK-ID I02 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#ROUTINE TO PRINT MASS MEMORY DATA WHICH_#*_^1*_,*_(IS IN CORE MEMORY_6*_^1*_,*_P*_^1*_,*_#FORMATS ARE : (1)HEX., (2)DECIMAL, AND_$*_^1*_,*_-(3) ASCII_9*_^1*_,*_P*_^1*_,***************************€€************************_^1*_]_^1*_]_^1******_-CALLING SEQUENCE :_^1*_]_^1*_8RTJ MASOT_^1*_]_^1*_8ADC MMADD-*_"MM ADD. LOC._^1*_8ADC NW-*_%NO. OF WORDS_^1*_8ADC DATLO-*_"DATA LOC._^1*_]_^1*_1Q-REGISTER CONTAINS REQUEST TYPE_^1*_]_^1*_]_^1*_80 = FOR HEX._^1*_81 = FOR DECIMAL_^1*_82 = FOR ASCII_^1*_]_^1**_]_^1******_,OUTPUT FORMATS :_^1*_]_^1*_8(1) FOR HEX._^1*_]_^1*_1MMLLLL/W€€WWW_!XXXX XXXX XXXX .............._^1*_]_^1*_8(2) FOR ASCII_^1*_]_^1*_1MMLLLL/WWWW_!AA BB CC ............._^1*_]_^1*_8(3) FOR DECIMAL_^1*_1MMLLLL/WWWW_!+DDDDD -DDDDD ............._^1*_]_^1*_]_^1*_]_^1*_1WHERE MM_!= SECTOR MSB (HEX.)_^1*_8LLLL = SECTOR LSB (HEX.)_^1*_8WWWW = WORD (HEX.)_^1*_]_^1*_88 HEX. DATA IN A LINE_^1*_816 ASCII DATA IN A LINE_^1*_88 DECIMAL DATA IN A LINE_€€^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT MASOT_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT CHRSFG_^1_%EXT OFF_^1_%EXT HANDLE_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4)€€,ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU NO39(39)_$39 WORDS/LINE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU BHAN(1)_%"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU€€(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S €€T A R T_#*****_^1*_]_^1_%SPC 2_^1MASOT NOP 0_,ENTRY_^1_%STQ* QSAVE_(SAVE REQUEST TYPE_^1_%STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE BUFFER ADD._^1_%STA BUFADD_^1_%LDA* LNSZ,Q_'GET NO. OF DATA (MAX.) PER LINE_^1_%STA* SIZLN_^1_%LDA CHRSFG_(CHECK IF "DX"_^1_%SAN MOT_+NO, ASSEMBLE DATA AND PRINT_^1GETOUT LDA* OTB+1_(CALCULATE 'OFF' ADDRESS_^1_%SUB* OTB_^1_%ADD- BHAN,I_^1€€_%TRA Q_^1_%JMP- (ZERO),Q_%EXIT TO "OFF"_^1OTB_"ADC HANDLE_'0. "HANDLE" ENTRY_^1_%ADC OFF_*1. "OFF" ENTRY_^1_%SPC 2_^1*_1GET PARAMETERS: (1) MM ADD. LOC., (2) DATA LOC._^1MOT_"LDQ* (MASOT)_^1_%ADQ* MASOT_^1_%LDA- (ZERO),Q_$GET MSB_^1_%STA* MMADD_^1_%LDA- 1,Q_*GET LSB_^1_%STA* MMADD+1_^1_%LDA- 2,Q_*GET WORD_^1_%STA* MMADD+2_^1_%RAO* MASOT_(BUMP TO NEXT PARAMETER_^1_%LDQ* (MASOT€€)_%GET NO. OF WORDS IN DATA_^1_%ADQ* MASOT_^1_%LDA- (ZERO),Q_^1_%STA* NW_^1_%RAO* MASOT_^1_%LDA* (MASOT)_^1_%ADD* MASOT_^1_%STA* DATLO_^1_%RAO* MASOT_(SET EXIT_^1*_]_^1_%LDA- PROG2,I_%GET PROGRAM NO. AND GENERATE MASK FOR_^1_%ENQ 0_1OUTPUT UNIT_^1_%INA -1_^1_%DVI- ONEBIT+4_$GENERATE BIT MASK INDEX TO GET OUTPUT LU_^1_%STA* COUNT_^1_%LDA- ONEBIT,Q_$GET BIT MASK_^1_%LDQ* COUNT_^1_%€€AND* LUMSK,Q_%AND WITH PINT LU MASK_^1_%SAZ MA5_^1_%RAO- I_,SET FOR "COMOLU"_^1MA5_"LDA- LISTLU,I_$GET LU ACCORDINGLY AN ASSEMBLE FOR ASCII MODE_^1_%ADD* MODE_^1_%STA OTLU_^1_%SPC 1_^1*_1INITIALIZE_^1MAZO_!ENA 0_^1_%STA* COUNT_^1_%SPC 1_^1MA10_!LDA* BUFADD_^1_%INA -1_^1_%STA- I_^1_%ENQ 0_-FILL BUFFER WITH SPACE_^1MA12_!LDA =A_^1_%STA- 1,B_^1_%INQ 1_^1_%TRQ A_^1_%INA -40_€€^1_%SAZ MA14_^1_%JMP* MA12_^1*_]_^1MA14_!LDA* MMADD_(CONVERT MSB TO ASC_^1_%RTJ* CV4A_^1_%STA- 1,I_^1_%LDA* MMADD+1_%GET LSB AND CONVERT TO ASC_^1_%RTJ* CV4A_^1_%STQ- 2,I_^1_%STA- 3,I_^1_%LDA* MMADD+2_%GET WORD_^1_%RTJ* CV4A_^1_%STA* CV4A_^1_%TRQ A_^1_%ENQ SLASH_(INSERT '/' BETWEEN SECTOR AND WORD_^1_%LLS 8_^1_%STQ- 4,I_^1_%LDQ* CV4A_^1_%ALS 8_^1_%LLS 24_^1_%INA $20_^1_%STA-€€ 6,I_^1_%STQ- 5,I_^1*_]_^1_%LDA- I_,UP DATE BUFFER TO DATA STORAGE LOC._^1_%INA 7_^1_%STA- I_^1*_]_^1RECALQ LDQ* QSAVE_(RECALL REQUEST TYPE AND GO TO THE PROPER_^1_%LDA* (DATLO)_%GET DATA_^1_%JMP* TYDAT,Q_-ASSEMBLE TYPE PROCESSING_^1TYDAT JMP* HEXDAT_'0. HEX. DATA_^1_%JMP* DECDAT_'1. DECIMAL DATA_^1_%JMP* ASCDAT_'2. ASCII DATA_^1_%SPC 1_^1*_1S T O R A G E_^1QSAVE NUM 0_,REQUES€€T CODE_^1BASE_!NUM 0_,PARAMETER BASE ADD._^1MODE_!ADC ASMOD_^1MMADD BZS MMADD(3)_^1DATLO NUM 0_,DATA LOC._^1SIZLN NUM 0_^1NW_#NUM 0_,NO. OF DATA WORDS_^1COUNT NUM 0_^1LNSZ_!NUM 8,8,16_'SIZES FOR NO. OF DATA/LINE_^1_%SPC 3_^1*_]_^1*****_-LIST LOGICAL UNIT MASK_^1*_]_^1*********_)BIT ASSIGNMENT ---- WORD 1 BIT 0 IS CORRESPONDING_^1*****_ATO ENTRY 1_^1*_]_^1*********_)BIT€€ IS RESET (=0) IMPLIED LOGICAL UNIT FROM 'LISTLU'_^1*******_+OTHER WISE LOGICAL UNIT IS OBTAINED FROM 'COMOLU'_^1*_]_^1*********_)FOR EXAMPLE--'DPC' IS ENTRY 2 AND ITS LOGICAL UNIT_^1*********_)IS OBTAINED FROM 'LISTLU'. ITS MASK IS IN BIT 1_^1*******_+OF WORD 1 AND IT IS RESET_^1*_]_^1LUMSK NUM $FFFD,$FCFF,$0FAE,$FFF2_^1_%SPC 2_^1*_]_^1*****_-ROUTINE TO CONVERT TO I-WORD ASCII€€_^1*_]_^1CV4A_!NOP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* CI_+SET UP INDEX_^1C1_#LLS 12_+EXTRACT 4-BIT TO A-REG._^1_%ALS 4_^1_%STQ* CT_+SAVE REMAINDER_^1_%INA -10_*SET UP CHAR. AS NO. OR A-F_^1_%SAM NOAF1_^1_%INA 7_^1NOAF1 INA $3A_^1_%LDQ* CI_+RECALL INDEX TO SAVE CHAR._^1_%STA* CU,Q_^1_%INQ -3_+CHECK IF DONE_^1_%SQZ CE_+SKIP WHEN DONE_^1_%RAO* CI_^1_%ENQ 0_^1_%LDA* CT_+TO PROCESS€€ ANOTHER ONE_^1_%JMP* C1_^1*_]_^1CT_#NUM 0_^1CU_#BZS CU(4)_^1CI_#NUM 0_^1*_]_^1CE_#LDQ* CU+3_^1_%QLS 8_,ASSEMBLE INTO 2-CHAR. WORD_^1_%ADQ* CU+2_^1_%LDA* CU+1_^1_%ALS 8_^1_%ADD* CU_^1_%JMP* (CV4A)_'RETURN_^1_%SPC 1_^1*_1ASCII DATA_^1ASCDAT TRA Q_,DATA TO Q-REG._^1_%LDA* COUNT_(CHECK IF HI-CHAR. POSITION WORD_^1_%AND- ONEBIT_^1_%SAZ ASC3_)YES, SKIP_^1_%TRQ A_,ASSEMBLE 2-SP€€ACE WITH CHAR._^1_%ENQ $20_^1_%LLS 8_^1_%INA $20_^1_%STQ- 1,I_^1_%STA- 2,I_^1_%RAO- I_^1_%JMP* ASC4_^1ASC3_!STQ- 1,I_^1ASC4_!RAO- I_,UP DATE STORAGE INDEX_^1_%RAO* DATLO_(BUMP DATA LOCATION BY 1 (ADVANCE TO NEXT DATA)_^1_%SPC 1_^1*_1DATA EXHAUST OR LINE FULL CHECK_^1_%LDA* NW_+DECREMENT NO. OF WORDS BY 1 AND CHECK IF_^1_%INA -1_0DATA EXHAUSTED_^1_%STA* NW_^1_%SAZ PNT_*DATA EX€€HAUSTED, SKIP_^1CK3_"RAO* COUNT_^1_%LDA* COUNT_^1_%SUB* SIZLN_^1_%SAZ PNT_*LINE FULL, SKIP_^1_%JMP* RECALQ_'TO REPEAT_^1_%SPC 2_^1****_.PRINT DATA_^1PNT_"RTJ* SELF_^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA PNTRT-SELF_^1_%STA* RT_^1_%RTJ- (AMONI)_^1PNTCD ADC $C00+CHRSLV_!F-WRITE_^1RT_#NUM 0_,RETURN ADD. (FILLED)_^1_%NUM 0_^1OTLU_!NUM 0_,LU (FILLED)_^1_%ADC NO39_*SIZE_^1BUFADD N€€UM 0_,BUFFER (FILLED)_^1_%JMP- (ADISP)_^1*_]_^1PNTRT LDA* BASE_^1_%STA- I_,SET UP 'BASE' ADDRESS IN I-REG._^1_%SQP PNTOK_^1_%LDQ- IOERR,I_%TO 'IOERR' (I/O ERROR EXIT)_^1_%JMP- (ZERO),Q_^1PNTOK LDA CHRSFG_'CHECK FOR 'DX' AFTER EACH LINE_^1_%SAN REPNT_(NO 'DX' GO PRINT MORE IF NEEDED_^1_%JMP GETOUT_''DX' SET, GO TO GET OUT_^1REPNT LDA* NW_+CHECK IF ALL DONE_^1_%SAZ DONE_^1_€€%LDA* MMADD+2_%UP DATE WORD ADD._^1_%ADD* SIZLN_^1_%STA* MMADD+2_^1_%JMP MAZO_)TO REPEAT_^1DONE_!JMP (MASOT)_%RETURN_^1_%SPC 1_^1*_1ASSEMBLE HEX. DATA_^1HEXDAT RTJ* CV4A_)CONVERT TO HEX. AND SAVE DATA_^1HE1_"STQ- 1,I_^1_%STA- 2,I_^1_%RAO- I_^1_%RAO- I_^1_%JMP* ASC4_^1_%SPC 1_^1*_1ASSEMBLE DECIMAL DATA_^1DECDAT LDQ- I_^1_%STQ* ISAVE_^1_%ENQ 0_^1_%STQ* SIGN_)RESET SIGN AND INI€€TIALIZE INDEX_^1_%STQ- I_^1_%SAP DE3_*SKIP IF VALUE IS POSITIVE_^1_%RAO* SIGN_)SET NEGATIVE AND SAVE VALUE W/O SIGN_^1_%TCA A_^1DE3_"DVI* FACTEN,I_$DIVIDED NO. BY TEN FACTOR_^1_%STQ* TEMP_^1_%STA* TEMP+1,I_$SAVE NO._^1_%RAO- I_^1_%LDA- I_^1_%INA -4_^1_%SAZ DE6_*SKIP WHEN DONE_^1_%LDA* TEMP_^1_%ENQ 0_^1_%JMP* DE3_^1DE6_"LDA* ISAVE_(RESTORE DATA BUFFER_^1_%STA- I_^1_%ENA $2B_*S€€ET FOR "+" (SIGN)_^1_%LDQ* SIGN_^1_%SQZ DE8_^1_%INA 2_,CHANGE TO NEGATIVE_^1DE8_"ALS 8_^1_%ADD* TEMP+1_'+ MSD_^1_%INA $30_^1_%STA- 1,I_^1_%RAO- I_^1_%LDQ* TEMP+2_'ASSEMBLE 2-3 DIGITS_^1_%LDA* TEMP+4_^1_%LLS 8_^1_%ADQ* TEMP+3_^1_%ADD* TEMP_^1_%ADQ* NOBASE_'+ $3030_^1_%ADD* NOBASE_^1_%JMP* HE1_^1TEMP_!NUM 0,0,0,0,0_^1ISAVE NUM 0_^1SIGN_!NUM 0_,SIGN_^1FACTEN NUM 10000,1000,1€Œ00,10_^1NOBASE NUM $3030_^1_%SPC 3_^1*_]_^1_%EQU SB11(*/96)_^1_%EQU SU11(SB11+1)_^1_%EQU DS11(SU11*96)_^1_%BSS (DS11-*)_^1_%END_]_^__ŒPCONFM CSY/ I03 P€1_%NAM CONFM_(DECK-ID I03 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_N*_^1*_,*_#ROUTINE TO PRINT 'NEW' AND 'OLD' DATA_#*_^1*_,*_'AND READ OPERATOR CONFIRMATIO_)*_^1*_,*_N*_^1*_,************************************************_^1*_]_^1*_]_^1*_]_^1******_,CALLING SEQUENCE_^1*_]_€€^1*_8RTJ CONFM_^1*_]_^1*_8ADC NEWDAT_'NEW DATA BUFFER_^1*_]_^1*_1"BUFFER" CONTAINS OLD DATA_^1*_1Q-REGISTER CONTAINS TYPE (BITS 15-08) AND NUMBER_^1*_8OF WORDS (BITS 07-00)_^1*_]_^1*_]_^1******_+OUTPUT FORMAT_!:_^1*_]_^1*_2NEW_#OLD_"DATA_^1*_]_^1*_1XXXX YYYY_^1*_1......._!........._^1*_1......._!........._^1*_]_^1*_1VERIFY_^1*_]_^1*_]_^1*_1IF DATA IS GOOD, OPERATOR ENTERES 'OK'€€ FOR APPROVAL_^1*_1"BUFFER" CONTAINS 0 = FOR APPROVAL_^1*_C1 = FOR DISAPPROVAL_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT CONFM_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4)€€,ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU COMLU($8FD)_!INPUT COMMENT UNIT_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%E€€QU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G€€ R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1CONFM NOP 0_,ENTRY_^1_%STA- I_^1_%STA* BASE_^1_%ADD- BUFFER,I_^1_%STA* BUFADD_^1_%LDA- COMOLU,I_^1_%ADD* MODE_^1_%STA* OTLU_^1_%ENA 0_^1_%LRS 8_,SEPERATE NO. OF WORDS AND DATA TYPE_^1_%ARS 8_^1_%STA* NW_+SAVE NO. OF WORDS AND DATA TYPE_^1_%STQ* PROTYP_^1CON2_!LDA* (CONFM)_%GET BUFFER_^1_%ADD* CONFM_^1_%STA* PAR_^1_%RAO* CONFM_(SET EX€€IT_^1_%ENA 0_^1_%STA* COUNT_^1_%LDA* MESTB_(PRINT HEADING_^1_%LDQ* MESTB+1_^1_%RTJ* WRI_^1_%LDA =A_^1_%STA* MES21+2_^1_%STA* MES22+2_^1GETDA LDQ* COUNT_(GET CURRENT DATA_^1_%LDA* (PAR),Q_^1_%LDQ* PROTYP_'INSERT ACCORDING TO TYPE_^1_%JMP* INSDA,Q_^1INSDA JMP* HEXDAT_'0. HEX._^1_%JMP* DECDAT_'1. DEC._^1_%JMP* ASCDAT_'2. ASC._^1_%SPC 2_^1*_12. ASCII DATA_^1*_]_^1*_$************€€*****************************************_^1*_$*_R*_^1*_$*_#A S C I I_#D A T A_#P R O C E S S_%*_^1*_$*_R*_^1*_$*****************************************************_^1*_]_^1ASCDAT STA* MES21+1_%STORE NEW DATA_^1_%LDA =A_^1_%STA* MES21_(INSERT SPACE_^1_%STA* MES22_^1_%LDQ* COUNT_^1_%LDA* (BUFADD),Q_"GET AND SAVE OLD DATA_^1_%STA* MES22+1_^1_%JMP* CONPT_(TO OUTPUT AND UPDATE ... ET€€C._^1_%SPC 2_^1*_10. HEX._!DATA_^1*_]_^1*_$*****************************************************_^1*_$*_R*_^1*_$*_#H E X ._$D A T A_$P R O C E S S_%*_^1*_$*_R*_^1*_$*****************************************************_^1*_]_^1HEXDAT RTJ* CV4A_)CONVERT TO HEX. AND SAVE_^1_%STQ* MES21_^1_%STA* MES21+1_^1_%LDQ* COUNT_(GET OLD DATA AND INSERT_^1_%LDA* (BUFADD),Q_^1_%RTJ* CV4A_^1_%ST€€Q* MES22_^1_%STA* MES22+1_^1_%JMP* CONPT_(TO UPDATE, OUTPUT.... ETC._^1_%SPC 2_^1*_11. DECIMAL DATA_^1*_]_^1*_$*****************************************************_^1*_$*_R*_^1*_$*_#D E C I M A L_,P R O C E S S_%*_^1*_$*_R*_^1*_$*****************************************************_^1*_]_^1DECDAT RTJ CV6D_)CONVERT AND INSERT DECIMAL DATA_^1_%ADC MES21-*_^1_%LDQ* COUNT_^1_%LDA€€* (BUFADD),Q_"GET OLD DATA_^1_%RTJ* CV6D_)CONVERT AND INSERT DECIMAL DATA_^1_%ADC MES22-*_^1_%SPC 3_^1*_]_^1****_.UPDATE AND PRINT_^1*_]_^1CONPT LDA* MESTB+2_%TO PRINT_^1_%LDQ* MESTB+3_^1_%RTJ* WRI_^1_%RAO* COUNT_(UPDATE COUNT BY 1 AND CHECK IF ALL DATA PRINT_^1_%LDA* COUNT_^1_%SUB* NW_^1_%SAZ GETWD_(TO GET CONFIRMATION --- OK._^1_%JMP* GETDA_(NO, REPEAT_^1*_]_^1GETWD LDA* M€€ESTB+4_%INSERT WORD 'VERIFY' PRIOR TO READ_^1_%LDQ* MESTB+5_^1_%RTJ* WRI_^1_%RTJ- (AMONI)_^1FRDCD ADC $900+CHRSLV_!F-READ_^1_%ADC GETRT-FRDCD_!RETURN_^1_%NUM 0_^1_%ADC COMLU_^1_%NUM 1_,1 WORD_^1_%ADC COUNT-FRDCD_^1_%JMP- (ADISP)_^1*_]_^1GETRT SQP REDOK_^1CONER LDQ* BASE_^1_%LDQ- IOERR,Q_%TO 'IOERR'_^1_%JMP- (ZERO),Q_^1REDOK LDA =AOK_)CHECK IF OK BY OPERATOR_^1_%SUB* COU€€NT_^1_%SAZ ANSW_^1_%LDA* MESTB+6_%TO PRINT REQUEST ABORTED_^1_%LDQ* MESTB+7_^1_%RTJ* WRI_^1_%ENA 1_,SET NO GOOD_^1ANSW_!STA* (BUFADD)_^1_%JMP* (CONFM)_%RETURN TO CALLER_^1_%SPC 2_^1*_]_^1*****_%********************************************_^1*_]_^1WRI_"NOP 0_,ENTRY_^1_%STA* WRB_^1_%STQ* WRZ_^1_%RTJ- (AMONI)_^1WRCD_!ADC $500+CHRSLV_!WRITE_^1_%ADC WRET-WRCD_#RETURN_^1_%NUM 0_^1€€OTLU_!NUM 0_,LU (FILLED)_^1WRZ_"NUM 0_,SIZE_^1WRB_"NUM 0_,BUFFER_^1_%JMP- (ADISP)_^1_%EQU CONCD(WRCD)_^1WRET_!SQP WREX_^1_%JMP* CONER_^1WREX_!JMP* (WRI)_(RETURN_^1_%SPC 1_^1COUNT NUM 0_^1BASE_!NUM 0_^1BUFADD NUM 0_^1MODE_!ADC ASMOD_^1NW_#NUM 0_^1PROTYP NUM 0_^1PAR_"NUM 0_^1_%SPC 2_^1*_]_^1MESTB ADC MES1-CONCD_"0._^1_%ADC LMES1_(1._^1_%ADC MES2-CONCD_"2._^1_%ADC €€LMES2_(3._^1_%ADC MES3-CONCD_"4._^1_%ADC LMES3_(5._^1_%ADC MES4-CONCD_"6._^1_%ADC LMES4_(7._^1***_/MESSAGE_^1MES1_!NUM $A0D_^1_%ALF 11, NEW_%OLD_^1_%EQU LMES1(*-MES1)_^1MES2_!NUM $A0D_^1MES21 ALF 3,_^1_%ALF 2,_^1MES22 ALF 3,_^1_%EQU LMES2(*-MES2)_^1MES3_!NUM $A0D_^1_%ALF 4,VERIFY_^1_%EQU LMES3(*-MES3)_^1MES4_!NUM $A0D_^1_%ALF 9,DB REQUEST ABORTED_^1_%EQU LMES4(*€€-MES4)_^1_%SPC 2_^1*_]_^1*****_-ROUTINE TO CONVERT TO I-WORD ASCII_^1*_]_^1CV4A_!NOP 0_,ENTRY_^1_%ENQ 0_^1_%STQ* CI_+SET UP INDEX_^1C1_#LLS 12_+EXTRACT 4-BIT TO A-REG._^1_%ALS 4_^1_%STQ* CT_+SAVE REMAINDER_^1_%INA -10_*SET UP CHAR. AS NO. OR A-F_^1_%SAM NOAF1_^1_%INA 7_^1NOAF1 INA $3A_^1_%LDQ* CI_+RECALL INDEX TO SAVE CHAR._^1_%STA* CU,Q_^1_%INQ -3_+CHECK IF DONE_^1_%SQZ€€ CE_+SKIP WHEN DONE_^1_%RAO* CI_^1_%ENQ 0_^1_%LDA* CT_+TO PROCESS ANOTHER ONE_^1_%JMP* C1_^1*_]_^1*_]_^1CE_#LDQ* CU+3_^1_%QLS 8_,ASSEMBLE INTO 2-CHAR. WORD_^1_%ADQ* CU+2_^1_%LDA* CU+1_^1_%ALS 8_^1_%ADD* CU_^1_%JMP* (CV4A)_'RETURN_^1_%SPC 1_^1*_1ASSEMBLE DECIMAL DATA_^1CV6D_!NOP 0_,ENTRY_^1_%LDQ* (CV6D)_'GET DATA BUFFER_^1_%ADQ* CV6D_^1_%STQ* ISAVE_^1_%RAO* CV6D_)SET EXIT_^1€€_%ENQ 0_^1_%STQ* SIGN_)RESET SIGN AND INITIALIZE INDEX_^1_%STQ- I_^1_%SAP DE3_*SKIP IF VALUE IS POSITIVE_^1_%RAO* SIGN_)SET NEGATIVE AND SAVE VALUE W/O SIGN_^1_%TCA A_^1DE3_"DVI* FACTEN,I_$DIVIDED NO. BY TEN FACTOR_^1_%STQ* TEMP_^1_%STA* TEMP+1,I_$SAVE NO._^1_%RAO- I_^1_%LDA- I_^1_%INA -4_^1_%SAZ DE6_*SKIP WHEN DONE_^1_%LDA* TEMP_^1_%ENQ 0_^1_%JMP* DE3_^1DE6_"LDA* ISAVE_(REST€€ORE DATA BUFFER_^1_%STA- I_^1_%ENA $2B_*SET FOR "+" (SIGN)_^1_%LDQ* SIGN_^1_%SQZ DE8_^1_%INA 2_,CHANGE TO NEGATIVE_^1DE8_"ALS 8_^1_%ADD* TEMP+1_'+ MSD_^1_%INA $30_^1_%STA- (ZERO),I_^1_%LDQ* TEMP+2_'ASSEMBLE 2-3 DIGITS_^1_%LDA* TEMP+4_^1_%LLS 8_^1_%ADQ* TEMP+3_^1_%ADD* TEMP_^1_%ADQ* NOBASE_'+ $3030_^1_%ADD* NOBASE_^1_%STQ- 1,I_^1_%STA- 2,I_^1_%JMP* (CV6D)_'RETURN_^1TEMP_!NUM € 0,0,0,0,0_^1ISAVE NUM 0_^1SIGN_!NUM 0_,SIGN_^1FACTEN NUM 10000,1000,100,10_^1_%EQU CT(ISAVE)_^1_%EQU CI(SIGN)_^1_%EQU CU(TEMP)_^1NOBASE NUM $3030_^1_%SPC 3_^1*_]_^1_%EQU SU12(*/96)_^1_%EQU SB12(SU12+1)_^1_%EQU DB12(SB12*96)_^1_%BSS (DB12-*)_^1_%END_]_^__ PGETINT CSY/ I04 P€1_%NAM GETINT_'DECK-ID I04 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#ROUTINE USES TO EXTRACT INTEGER FROM_#*_^1*_,*_,TEXT INPUT BUFFER_/*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1*****_(TEXT TERMINATORS ARE : (1) $FF, (2) COMMA_^€€1*_]_^1*_,TEXT FORMATS : (1) SIGNED NUMBER, (2) UNSIGNED NUMBER_^1*_]_^1*_,TEXT VALUE FORMATS :_^1*_]_^1*_1(1) NNNNNNN_^1*_1(2) -NNN_^1*_1(3) N.NNN_^1*_1(4) .NNNEN_$OR .NNNNDN_^1*_1(5) -.NNNE-N_"OR -.NNND-NN_^1*_]_^1*_]_^1*_,TEXT MAXIMUM SIZES : (1) FOR SINGLE PRECISION --- 7 DIGITS_^1*_A(2) DOUBLE PRECISION ---- 12 DIGITS_^1*_BSIGN AND DECIMAL POINT ARE ALLOWED_^1*_BIN CONJ€€UCTION WITH THE NUMBERS._^1*_,POSITIVE IS ASSUMED IF SIGN IS NOT PRESENT_^1_%SPC 2_^1*_]_^1*_]_^1*****_(CALLING SEQUENCE :_^1*_]_^1*_,(1) SINGLE PRECISION ----_^1*_]_^1*_0RTJ GETINT_^1*_0ADC BUFFER-*_#(POSITIVE INCREMENT)_^1*_-Q-REGISTER CONTAINS 7 (FOR MAX. DIGITS)_^1*_]_^1*_,(2) DOUBLE PRECISION -----_^1*_]_^1*_0RTJ GETINT_^1*_0ADC BUFFER-*_^1*_-Q-REGISTER CONTAINS 12 (F€€OR MAX. DIGITS)_^1*_]_^1*_*NONE OF THE REGISTERS IS RESTORED WHEN EXIT_^1*_]_^1*_]_^1*_]_^1*****_-'BUFFER' ASSIGNMENT AT RETURN :_^1*_]_^1*_3WORD 1_!NO. OF DIGITS_^1*_3WORD 2_!NO. OF INTEGERS_^1*_3WORD 3_!NO. OF FRACTIONAL NUMBERS_^1*_3WORD 4_!SIGN (0 OR 1 = +, 2 = -)_^1*_3WORD 5_!'E'/'D' '0=UNUSED, 2='E', 1='D')_^1*_3WORD 6_!EXPONENT VALUE IF E/D USED_^1*_3WORD 7_!INPUT DIGIT_^1*€€_<...._!..._^1*_<...._!..._^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT GETINT_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_€€%EQU MASK(3)_%ONE BIT MASK_^1_%SPC 1_^1*_1ASCII CHARACTER CODES_^1_%EQU KAR0($30)_#CHARACTER =0_^1_%EQU KAR9($39)_#CHARACTER =9_^1_%EQU KARE($45)_#CHARACTER =E_^1_%EQU KARD($44)_#CHARACTER =D_^1_%EQU KARPER($2E)_!CHARACTER =._^1_%EQU KARPOS($2B)_!CHARACTER =+_^1_%EQU KARNEG($2D)_!CHARACTER =-_^1_%SPC 1_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU LNWD28(28)_"MAX. NO€€. OF WORDS USED BY 1 LINE_^1_%EQU LNCH16(16)_"MAX. NO. OF DATA IN LINE_^1_%EQU ASMOD($1000) OUTPUT ASC MODE_^1_%EQU MAXE(7)_%MAX. DIGITS OF E-FORMAT_^1_%EQU MAXD(12)_$MAX. DIGITS OF D-FORMAT_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU MSG(2)_'"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU €€ LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R €€A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1GETINT NOP 0_,ENTRY_^1_%STQ* NOFDIG_'SAVE NO. OF DIGITS ALLOWED_^1_%STA* BASE_^1_%TRA Q_^1_%LDA- MSG,Q_(FETCH "MSG" ADDRESS_^1_%STA* EXTMSG_^1_%LDA* (GETINT)_$GET PARAMETER ADDRESS_^1_%ADD* GETINT_^1_%STA- I_^1_%STA* PARADD_^1_%RAO* GETINT_'SET TO EXIT ADDRESS_^1_%SPC 2_^1_%ENA 0_,INITIALIZED_^1_%STA* EDIN_^1_%STA* FRACTL_^1_%STA* SIGNIN€€_^1_%STA* SIGNIN+1_^1_%STA* EDVAL_^1_%STA* NOED_^1_%LDQ* NOFDIG_'RECALL NO. OF DIGITS_^1_%INQ 7_^1GET1_!STA- (ZERO),B_^1_%INQ -1_^1_%SQM GET3_^1_%JMP* GET1_^1_%SPC 2_^1*_]_^1GET3_!LDA* BASE_)RESTORE PARAMETER/ADDRESS_^1_%STA- I_^1_%ADD- BUFFER,I_$CALCULATE "BUFFER" ADD._^1_%STA* BUFADD_^1_%LDQ- BITFLG,I_^1_%STQ* HILO_^1_%LDA- BUFCNT,I_$SET UP BUFFER COUNT AND BYTE POSITION_^1_%€€STA- I_^1GET5_!SQZ GET10_(SKIP IF NO CHANGE IN CHAR. POSITION IS NEEDED_^1_%ENQ -1_^1_%RAO- I_^1GET10 INQ 1_^1_%STQ* HILO_)SAVE BYTE POSITION FLAG_^1_%LDA* (BUFADD),I_^1_%SQN GET12_^1_%ARS 8_^1GET12 AND- LPMSK+8_%ISOLATE CHAR._^1_%STA* TEMP_^1_%EOR- LPMSK+8_%CHECK FOR END OF TEXT ($FF)_^1_%SAN GET15_(CHECK CHAR._^1_%JMP* GETEND_'TEXT EXHAUSTED, GO_^1_%SPC 2_^1*_1CHECK AND €€ASSEMBLE DATA TEXT CHAR._^1*_1LEGAL CHARACTER (1) NUMERIC CHARACTER_^1*_C(2) DECIMAL POINT_^1*_C(3) SIGN_^1*_C(4) 'E' OR 'D'_^1*_C(5) COMMA (TERMINATOR OF FIELD)_^1*_]_^1GET15 LDA* TEMP_)RECALL INPUT TEXT CHAR._^1_%INA -COMMA_^1_%SAN GET17_(NO COMMA, SKIP_^1_%JMP* GETMA_^1GET17 INA -KAR0+COMMA_!CHECK FOR NUMERIC (0-9)_^1_%SAZ GET19_^1_%SAP GET18_^1_%JMP* GET30_(NEITHER NUM€€BER OR COMMA_^1GET18 INA -KAR9+KAR0-1_^1_%SAM GET19_(IT IS BETWEEN 0 - 9_^1_%JMP* GET30_^1*_1CHARACTER IS NUMBER,SAVE_^1GET19 LDA* EDIN_)CHECK IF VALUE FOR EXPONENT_^1_%SAZ GET20_^1_%JMP* GET100_^1GET20 LDQ* PARADD_^1_%LDA- (ZERO),Q_^1_%SUB* NOFDIG_'MAKE SURE NO. OF DIGITS IN HAS NOT OVER MAX._^1_%SAM GET25_^1GET22 ENQ 4_,FORMAT ERROR_^1_%JMP* (EXTMSG)_^1*_]_^1GET25 LDA* €€TEMP_^1_%INA -KAR0_(CONVERT NUMBER TO BINARY_^1_%ADQ- (ZERO),Q_^1_%INQ 5_,BUMP INDEX TO DIGIT STORAGE LOCATION AND_^1_%STA- 1,Q_/SAVE INPUT VALUE_^1_%RAO* (PARADD)_$BUMP NO. OF DIGIT COUNT BY 1_^1_%LDQ* FRACTL_'SET UP TO INCREMENT INTEGER/FRACTIONAL NO._^1_%INQ 1_3COUNT_^1_%RAO* (PARADD),Q_^1*_]_^1GET27 LDQ* HILO_)RECALL BYTE POSITION FLAG AND REPEAT_^1_%JMP* GET5_^1_%SPC 1_^1€€*_]_^1BASE_!NUM 0_,PARAMETER BASE ADD._^1EXTMSG NUM 0_,"MSG" LOCATION (TO BE FILLED)_^1NOFDIG NUM 0_,MAX. NO. OF DIGITS ALLOWED_^1PARADD NUM 0_^1_%SPC 1_^1*_1CHARACTER IS NEITHER NUMBER NOR COMMA_^1GET30 LDA* TEMP_^1_%ENQ 1_,SET FOR POSITIVE_^1_%INA -KARPOS_%CHECK FOR SIGN "+" OR "-"_^1_%SAZ GET31_^1_%ENQ 2_,SET FOR NEGATIVE_^1_%INA -KARNEG+KARPOS_^1_%SAN GET40_^1GET31 €€ LDA* EDIN_)CHECK IF E OR D IN_^1_%SAZ GET32_(NO, SKIP_^1_%LDA* SIGNIN+1_$CHECK IF 'E'/'D' SIGN BEEN SET_^1_%SAN GET34_^1_%STQ* SIGNIN+1_$SAVE SIGN FLAG_^1_%JMP* GET27_^1GET32 LDA* SIGNIN_'CHECK IF SIGN BEEN SET_^1_%SAZ GET36_^1GET34 JMP* GET22_(YES, ERROR, GO_^1GET36 STQ* SIGNIN_'SAVE SIGN_^1_%TRQ A_^1_%ENQ 3_^1_%STA* (PARADD),Q_"SAVE SIGN_^1_%JMP* GET27_^1*_]_^1GET40 INA€€ -KARPER+KARNEG_^1_%SAN GET47_^1_%LDA* FRACTL_'CHAR. = DECIMAL POINT, MAKE SURE IT IS FIRST_^1_%SAN GET44_(ERROR_^1GET42 LDA* EDIN_)MAKE SURE "E"/"D" NOT IN_^1_%SAZ GET45_^1GET44 JMP* GET22_(ERROR_^1GET45 RAO* FRACTL_^1_%JMP* GET27_^1_%SPC 1_^1*_]_^1*_1CHECK FOR 'E' OR 'D'_^1GET47 INA -KARD+KARPER CHECK FOR D_^1_%ENQ MAXD_)SET UP D-MASK_^1_%SAZ GET50_^1_%INA -KARE€€+KARD_"CHECK FOR E AND SET UP E-MASK_^1_%ENQ MAXE_^1_%SAN GET51_^1GET50 TRQ A_,MAKE SURE 'D'/'E' FORMAT_^1_%SUB* NOFDIG_^1_%SAN GET51_^1_%LDA* EDIN_^1_%SAZ GET53_^1GET51 JMP* GET22_^1GET53 RAO* EDIN_)SET E/D IN FLAG_^1_%TRQ A_^1_%ENQ 4_^1_%INA -MAXD_^1_%SAZ GET56_^1_%ENA 1_^1GET56 INA 1_,SET TO E/D AND SAVE_^1_%STA* (PARADD),Q_^1_%JMP* GET27_^1_%SPC 2_^1*_1CONSTANTS€€ AND STORAGE_^1EDVAL NUM 0_,EXPONENT VALUE_^1NOED_!NUM 0_,NO. OF CHAR. FOR E/D_^1EDIN_!NUM 0_,'E' OR 'D' ENCOUNTERED (=1)_^1SIGNIN NUM 0,0_^1FRACTL NUM 0_,DECIMAL POINT FLAG_^1TEMP_!NUM 0_^1HILO_!NUM 0_,HI-8-BYTE OR LO-8-BYTE_^1BUFADD NUM 0_,"BUFFER" ADD. (TO BE FILLED)_^1_%SPC 5_^1*_]_^1*****_-TEXT EXHAUSTED._^1*_]_^1GETEND ENA -0_+SET BUFFER EMPTY_^1_%ENQ BUFEMT_^1€€_%STA* (BASE),Q_^1*_1COMMON CHECKING FOR INPUT FIELD_^1*_4(1) THERE IS INPUT_^1*_4(2) DOES NOT END WITH 'E'/'D'_^1GETCOM LDA* (PARADD)_^1_%SAZ GETNUE_'ERROR_^1_%LDA* EDIN_^1_%SAZ GETOUT_^1_%LDA* NOED_^1_%SAN EXPGET_^1GETNUE JMP* GET22_(ERROR, GO_^1EXPGET LDA* EDVAL_^1_%LDQ* SIGNIN+1_$IF SIGN FOR EXPONENT IS +, DO NOTHING_^1_%SQZ EXPG1_.OTHERWISE COMPLEMENT EXPONENT VALUE_^1_%IN€€Q -1_^1_%SQZ EXPG1_^1_%TCA A_^1EXPG1 ENQ 5_^1_%STA* (PARADD),Q_"SAVE EXPONENT VALUE_^1GETOUT JMP (GETINT)_$RETURN TO SENDER_^1_%SPC 2_^1*_]_^1****_.SET UP EXPONENT VALUE_^1*_]_^1GET100 LDA* NOED_^1_%INA -2_^1_%SAM GET102_^1_%JMP* GET22_(ERROR_^1GET102 RAO* NOED_^1_%ENA 10_+CALCULAT EXPONENT VALUE_^1_%MUI* EDVAL_^1_%ADD* TEMP_^1_%INA -KAR0_^1_%STA* EDVAL_^1_%JMP* GET27_(T€€O REPEAT_^1_%SPC 5_^1*_]_^1****_.CHARACTER IS COMMA_^1*_]_^1GETMA LDQ* BASE_)RECALL PARAMETER BASE ADD._^1_%INQ FIELD_^1_%LDA* TEMP_^1_%STA- (ZERO),Q_^1_%LDA* HILO_^1_%INQ BITFLG-FIELD_^1_%STA- (ZERO),Q_$SAVE BYTE POSITION FLAG_^1_%LDA- I_^1_%INQ BUFCNT-BITFLG_^1_%STA- (ZERO),Q_$SAVE BUFFER COUNTER_^1_%JMP* GETCOM_^1_%SPC 1_^1*_]_^1_%EQU GET300(*/96)_^1_%EQU GET400(GET300€@+1)_^1_%EQU GET500(GET400*96)_^1_%BSS (GET500-*)_^1_%END_]_^__@PFLCVSG CSY/ I05 P€1_%NAM FLCVSG_'DECK-ID I05 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#ROUTINE TO CONVERT FLOATING POINT VALUE_#*_^1*_,*_#(SINGLE PRECISION) INTO E-FORMAT VALUE_#*_^1*_,*_*FOR PRINT/CONFIRMATION_/*_^1*_,*_P*_^1*_,***************************************************€€_^1*_]_^1*_]_^1******_,CALLING SEQUENCE :_^1*_]_^1*_8RTJ FLCVSG_^1*_8ADC NEWVA_#NEW VALUE IN FLOATING_^1*_8ADC OLDVA_#OLD VALUE IN FLOATING_^1*_]_^1*_1Q-REGISTER CONTAINS NO. OF WORDS IN VALUE_^1*_]_^1*****_-IN RETURN :_^1*_]_^1***_6(1) CALLER REGAINS CONTROL_^1*_8(2) "SOMMOR" GAINS CONTROL_^1*_]_^1*_]_^1****_.OUTPUT FORMATS :_^1*_]_^1*_8(1) HEADING_^1*_]_^1*_>NEW_'OLD_^1*€€_]_^1*_8(2) DATA_^1*_]_^1*_8+0.1234567E+12_"-0.1234567E-12_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT FLCVSG_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT ECONV_(E- OR F-FORMAT CONVERSION -- SINGLE_^1_%EXT MMADDR_^1_%EXT MSG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($22),ONEBIT($€€23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_H**MSOS4.0**_^1_%EQU MASSLU($8C2)_^1_%EQU INCOM($18FD) INPUT COMMENT UNIT_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU EXTBV4($E9)_^1_%SPC 2_^1*_1SUBROUTINE POINTER (FOR REQUEST)_^1_%EQU GETFLD(2)_#"GETFLD" --- GET FIELD SUBROUTINE_^1_%EQU €€ASCHEX(3)_#"ASCHEC" --- ASC TO HEX._^1_%EQU GETINT(8)_#"GETINT" --- GET SINGLE/DOUBLE PRECISION VALUE_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PACKAGE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^€€1_%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1*_]_^1_%€€SPC 2_^1FLCVSG NOP 0_,ENTRY_^1_%STQ QSAVE_^1_%STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA* BUFADD_^1_%LDA- COMOLU,I_$ASSEMBLE OUTPUT LU_^1_%ADD- ONEBIT+12_^1_%STA* OTLU_^1_%LDA- BMSG,I_^1_%STA* EXTMSG_^1_%ENA 0_^1_%STA* COUNT_^1_%SPC 2_^1*_]_^1*****_-INSERT HEADING_^1*_]_^1HED_"RTJ* FILSP_(TO FILL BUFFER WITH SPACE_^1_%EQU NOPAR(HED)_^1H1_#LDA =ANE_)INSERT 'NEW'_^1_%STA€€* BUF+3_^1_%LDA =AW_^1_%STA* BUF+4_^1_%LDA =AOL_)INSERT 'OLD'_^1_%STA* BUF+12_^1_%LDA =AD_^1_%STA* BUF+13_^1_%LDA* MESTB_(GET BUFFER LOC. AND SIZE FOR PRINT_^1_%LDQ* MESTB+1_^1JSTPNT RTJ* PNT_^1_%JMP* GETPAR_^1_%SPC 3_^1*****_]_^1PNT_"NOP 0_,ENTRY_^1_%STA* MB_^1_%STQ* SIZ_^1_%SPC 1_^1*_1OUTPUT DATA_^1OUTMES RTJ- (AMONI)_^1WRCD1 ADC $D00+CHRSLV_!F-WRITE_^1_%ADC RT1-WRCD1_€€#RETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1SIZ_"NUM 17_+SIZE_^1MB_#ADC BUF-WRCD1_#BUFFER_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_1RETURN FROM PRINT, CHECK FOR ERROR/NEXT STEP_^1RT1_"SQM BAD_^1_%JMP* (PNT)_(RETURN TO CALLER_^1BAD_"JMP* IOE_^1_%SPC 1_^1*_1CONSTANTS AND STORAGE_^1BASE_!NUM 0_^1EXTMSG NUM 0_^1*_1MESSAGE_^1BUF_"ALF 17,_^1_%EQU MES1(*-BUF)_^1ME2_"ALF €€ 4,VERIFY_^1_%EQU MES2(*-ME2)_^1ME3_"ALF 9,DB REQUEST ABORT_^1_%EQU MES3(*-ME3)_^1_%SPC 1_^1*_1FILL BUFFER WITH SPACE_^1FILSP NOP 0_,ENTRY_^1_%ENQ 16_^1_%LDA =A_+FILL BUFFER WITH SPACE_^1FIL1_!STA* BUF,Q_^1_%INQ -1_^1_%SQM FIL3_^1_%JMP* FIL1_^1FIL3_!JMP* (FILSP)_%EXIT_^1_%SPC 1_^1NEWVA NUM 0_^1OLDVA NUM 0_^1COUNT NUM 0_^1MESTB ADC BUF-WRCD1_^1_%ADC MES1_^1_%ADC €€ ME2-WRCD1_^1_%ADC MES2_^1_%ADC ME3-WRCD1_^1_%ADC MES3_^1_%SPC 3_^1*_]_^1****_.GET PARAMETERS_^1*_]_^1GETPAR LDA* (FLCVSG)_$GET NEW VALUE ADDRESS_^1_%ADD* FLCVSG_^1_%STA* NEWVA_^1_%RAO* FLCVSG_'BUMP TO NEXT PARAMETER_^1_%LDQ* (FLCVSG)_^1_%ADQ* FLCVSG_^1_%LDA- (ZERO),Q_^1_%STA* OLDVA_^1_%RAO* FLCVSG_'SET EXIT_^1_%SPC 2_^1*_]_^1*****_-REQUEST SPACE TO BRING IN FLOATING POINT PAC€€KAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* IOE_*TO ERROR (I/O ERROR)_^1BUFADD NUM 0_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM TO BE READ_^1_%STQ* LSP40_^1_%STQ* LSP31_^1_%RTJ* SELF€€_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-SELF_^1_%STA* LSP24_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO "MMADDR" FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SAVE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP24 NUM 0_,RETURN (T€€O BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1QSAVE NUM 0_^1_%EQU REQTYP(QSAVE)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC ECONV_(E- OR F-FORMAT CONVERSION -- SINGLE_^1_%SPC 1_^1*_]_^1SAVDA NO€€P 0_,ENTRY_^1_%STA- I_^1_%ENQ 0_^1SAV1_!LDA* VALUE+2,Q_^1_%ALS 8_,ASSEMBLE INTO 2-CHAR./WORD_^1_%ADD* VALUE+3,Q_^1_%STA* BUF,I_^1_%TRQ A_^1_%INA -12_*CHECK IF ALL IN_^1_%SAP SAV2_^1_%INQ 2_^1_%RAO- I_^1_%JMP* SAV1_^1SAV2_!JMP* (SAVDA)_%RETURN_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP31 NUM 0_^1IOE_"LDQ* B€€ASE_)I/O ERROR ENCOUNTERED , EXIT_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1LSP35 LDQ* COUNT_^1_%LDA* (NEWVA),Q_#GET NEW VALUE FOR CONVERSION_^1_%STA* VALUE_^1_%INQ 1_^1_%LDA* (NEWVA),Q_^1_%STA* VALUE+1_^1_%RTJ* (LSP31)_^1_%ADC VALUE-*_^1_%ENA 0_,MOVE "NEW" VALUE IN E-FORMAT INTO OUTPUT_^1_%RTJ* SAVDA_^1*_]_€€^1_%LDQ* COUNT_^1_%LDA* (OLDVA),Q_#GET OLD VALUE AND CONVERT_^1_%STA* VALUE_^1_%INQ 1_^1_%LDA* (OLDVA),Q_^1_%STA* VALUE+1_^1_%RTJ* (LSP31)_^1_%ADC VALUE-*_^1_%SPC 1_^1*_1RETURN FROM CONVERSION (FLOAT TO E-FORMAT)_^1_%ENA 9_^1_%RTJ* SAVDA_^1TOPT_!LDA* MESTB_^1_%LDQ* MESTB+1_^1_%RTJ PNT_^1_%LDA* COUNT_(UP DATE NO. BEEN CONVERTED COUNT BY 2_^1_%INA 2_^1_%STA* COUNT_^1_%SUB* QSA€€VE_^1_%SAZ ENDCON_'TO RELEASE CORE,... ETC._^1_%JMP* LSP35_(NOT DONE, TO REPEAT_^1_%SPC 2_^1*_]_^1ENDCON RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%SPC 1_^1*_1REQUEST CONFIRMATION_^1NEDCON LDA* MESTB+2_^1_%LDQ* MESTB+3_^1_%RTJ PNT_^1_%ENA 0_^1_%STA* REQTYP_^1_%RTJ- (AMONI)_^1FRDCD ADC $900+CHRSLV_!F-READ_^1_%ADC GETIN-FRDCD_^1_%NUM 0€€_^1_%ADC INCOM_^1_%NUM 1_,1 WORD_^1_%ADC REQTYP-FRDCD_^1_%JMP- (ADISP)_^1*_]_^1GETIN SQP INOK_^1_%JMP* IOE_^1INOK_!LDA =AOK_^1_%SUB* REQTYP_^1_%SAN GIVEUP_'ABORT REQUEST AFTER PRINTING MESSAGE_^1_%JMP (FLCVSG)_$RETURN_^1GIVEUP LDA* MESTB+4_%TO PRINT ABORT MESSAGE_^1_%LDQ* MESTB+5_^1_%RTJ PNT_^1_%LDQ BASE_^1_%LDQ- SOMMOR,Q_$GET "SOMMOR" ADDRESS AND EXIT_^1_%JMP- (ZERO),Q_^€š1_%SPC 1_^1*_]_^1VALUE BZS VALUE(16)_^1_%SPC 3_^1*_]_^1_%EQU SU13(*/96)_^1_%EQU SB13(SU13+1)_^1_%EQU DB13(SB13*96)_^1_%BSS (DB13-*)_^1_%END_]_^__šPFLCVDB CSY/ I06 P€1_%NAM FLCVDB_'DECK-ID I06 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#ROUTINE TO CONVERT FLOATING POINT VALUE_#*_^1*_,*_#(DOUBLE PRECISION) INTO E-FORMAT VALUE_#*_^1*_,*_*FOR PRINT/CONFIRMATION_/*_^1*_,*_P*_^1*_,***************************************************€€_^1*_]_^1*_]_^1******_,CALLING SEQUENCE :_^1*_]_^1*_8RTJ FLCVDB_^1*_8ADC NEWVA_#NEW VALUE IN FLOATING_^1*_8ADC OLDVA_#OLD VALUE IN FLOATING_^1*_]_^1*_1Q-REGISTER CONTAINS NO. OF WORDS IN VALUE_^1*_]_^1*****_-IN RETURN :_^1*_]_^1***_6(1) CALLER REGAINS CONTROL_^1*_8(2) "SOMMOR" GAINS CONTROL_^1*_]_^1*_]_^1****_.OUTPUT FORMATS :_^1*_]_^1*_8(1) HEADING_^1*_]_^1*_>NEW_'OLD_^1*€€_]_^1*_8(2) DATA_^1*_]_^1*_1+0.123456789012D+12_"-0.123456789012D-12_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT FLCVDB_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT DCONV_(D- OR F-FORMAT CONVERSION -- DOUBLE_^1_%EXT MMADDR_^1_%EXT MSG_^1_%SPC 5_^1*_1' E Q U '_%T A B L E_^1_%EQU AMONI($F4),ADISP($EA),LPMSK(2),NZERO($12),ZROBIT($33)_^1_%EQU FIVE($43),SIX($44),ZERO($2€€2),ONEBIT($23),SIXTEN($27)_^1_%EQU COMMA($2C),SLASH($2F),ASTRIC($2A)_^1_%EQU EIGHT($26),NINE($45),THREE(4),ONE(3),TWO($24)_^1_%EQU TEN($46)_^1_%EQU MASSLU($8C2)_^1_%EQU INCOM($18FD) INPUT COMMENT UNIT_^1_%EQU CHRSLV(3)_#LEVEL OF THIS PROGRAM_^1_%EQU EXTBV4($E9)_^1_%SPC 2_^1*_1SUBROUTINE POINTER (FOR REQUEST)_^1_%EQU GETFLD(2)_#"GETFLD" --- GET FIELD SUBROUTINE_^1_%EQU AS€€CHEX(3)_#"ASCHEC" --- ASC TO HEX._^1_%EQU GETINT(8)_#"GETINT" --- GET SINGLE/DOUBLE PRECISION VALUE_^1_%EQU FLOATZ(1800) SIZE OF FLOATING POINT PACKAGE_^1_%SPC 2_^1*_1PARAMETER LOCATION (OFFSET FROM BASE)_^1_%EQU HANDLE(1)_#"HANDLE"_^1_%EQU BMSG(2)_%"MSG" ENTRY_^1_%EQU SOMMOR(3)_#"SOMMOR" ENTRY_^1_%EQU IOERR(4)_$"IOERR" ENTRY_^1_%EQU LISTLU(5)_#LIST OUTPUT --- "LISTLU"_^1_€€%EQU COMOLU(6)_#"COMOLU"_^1_%EQU NEWMLU(7)_#"NEWMLU" --- NEW MM LU_^1_%EQU PROG1(8)_$"PROG1"_^1_%EQU PROG2(9)_$"PROG2"_^1_%EQU BITFLG(10)_""BITFLG"_^1_%EQU BUFCNT(11)_""BUFCNT"_^1_%EQU FIELD(12)_#"FIELD"_^1_%EQU SLASHF(16)_""SLASHF"_^1_%EQU BUFEMT(17)_""BUFEMT"_^1_%EQU BUFFER(18)_""BUFFER"_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1*_]_^1_%SP€€C 2_^1FLCVDB NOP 0_,ENTRY_^1_%STQ QSAVE_^1_%STA* BASE_^1_%STA- I_^1_%ADD- BUFFER,I_^1_%STA* BUFADD_^1_%LDA- COMOLU,I_$ASSEMBLE OUTPUT LU_^1_%ADD- ONEBIT+12_^1_%STA* OTLU_^1_%LDA- BMSG,I_^1_%STA* EXTMSG_^1_%ENA 0_^1_%STA* COUNT_^1_%SPC 2_^1*_]_^1*****_-INSERT HEADING_^1*_]_^1HED_"RTJ* FILSP_(TO FILL BUFFER WITH SPACE_^1_%EQU NOPAR(HED)_^1H1_#LDA =ANE_)INSERT 'NEW'_^1_%STA* €€BUF+4_^1_%LDA =AW_^1_%STA* BUF+5_^1_%LDA =AOL_)INSERT 'OLD'_^1_%STA* BUF+16_^1_%LDA =AD_^1_%STA* BUF+17_^1_%LDA* MESTB_(GET BUFFER LOC. AND SIZE FOR PRINT_^1_%LDQ* MESTB+1_^1JSTPNT RTJ* PNT_^1_%JMP* GETPAR_^1_%SPC 3_^1*****_]_^1PNT_"NOP 0_,ENTRY_^1_%STA* MB_^1_%STQ* SIZ_^1_%SPC 1_^1*_1OUTPUT DATA_^1OUTMES RTJ- (AMONI)_^1WRCD1 ADC $D00+CHRSLV_!F-WRITE_^1_%ADC RT1-WRCD1_#R€€ETURN_^1_%NUM 0_,THREAD_^1OTLU_!NUM 0_,LU (TO BE FILLED)_^1SIZ_"NUM 21_+SIZE_^1MB_#ADC BUF-WRCD1_#BUFFER_^1_%JMP- (ADISP)_^1_%SPC 1_^1*_1RETURN FROM PRINT, CHECK FOR ERROR/NEXT STEP_^1RT1_"SQM BAD_^1_%JMP* (PNT)_(RETURN TO CALLER_^1BAD_"JMP* IOE_^1_%SPC 1_^1*_1CONSTANTS AND STORAGE_^1BASE_!NUM 0_^1EXTMSG NUM 0_^1*_1MESSAGE_^1BUF_"ALF 17,_^1_%ALF 5,_^1_%EQU MES1(*-BUF)_^€€1ME2_"ALF 4,VERIFY_^1_%EQU MES2(*-ME2)_^1ME3_"ALF 9,DB REQUEST ABORT_^1_%EQU MES3(*-ME3)_^1_%SPC 1_^1*_1FILL BUFFER WITH SPACE_^1FILSP NOP 0_,ENTRY_^1_%ENQ 20_^1_%LDA =A_+FILL BUFFER WITH SPACE_^1FIL1_!STA* BUF,Q_^1_%INQ -1_^1_%SQM FIL3_^1_%JMP* FIL1_^1FIL3_!JMP* (FILSP)_%EXIT_^1_%SPC 1_^1NEWVA NUM 0_^1OLDVA NUM 0_^1COUNT NUM 0_^1MESTB ADC BUF-WRCD1_^1_%ADC MES€€1_^1_%ADC ME2-WRCD1_^1_%ADC MES2_^1_%ADC ME3-WRCD1_^1_%ADC MES3_^1_%SPC 3_^1*_]_^1****_.GET PARAMETERS_^1*_]_^1GETPAR LDA* (FLCVDB)_$GET NEW VALUE ADDRESS_^1_%ADD* FLCVDB_^1_%STA* NEWVA_^1_%RAO* FLCVDB_'BUMP INDEX TO NEXT PARAMETER_^1_%LDQ* (FLCVDB)_^1_%ADQ* FLCVDB_^1_%LDA- (ZERO),Q_^1_%STA* OLDVA_^1_%RAO* FLCVDB_'SET EXIT_^1_%SPC 2_^1*_]_^1*****_-REQUEST SPACE TO BRING IN FL€€OATING POINT PACKAGE_^1LSP12 RTJ- (AMONI)_^1LSPCAL ADC $1540+CHRSLV_^1_%ADC LSPACE-LSPCAL_^1_%NUM 0_^1LSP13 NUM 0_,CORE LOCATION OF REQUESTED SPACE_^1_%ADC FLOATZ_^1_%JMP- (ADISP)_^1*_]_^1LSPACE SQP LSP15_(SPACE BE GRANTED, DO SOMETHING_^1_%JMP* IOE_*TO ERROR (I/O ERROR)_^1BUFADD NUM 0_^1*_]_^1LSP15 STQ* LSP25_(SET LOC. WHERE PROGRAM TO BE READ_^1_%STQ* LSP40_^1_%STQ* LSP€€31_^1_%RTJ* SELF_)GENERATE RETURN ADD._^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA LSP30-SELF_^1_%STA* LSP24_^1_%LDA* OFTB_)GENERATE "MMADDR" LOCATION_^1_%SUB* OFTB+1_^1_%ADD* EXTMSG_^1_%TRA Q_^1_%LDA* FLTADD_'GET FLOAT PACKAGE SECTOR ADD._^1_%RTJ- (ZERO),Q_$TO "MMADDR" FOR MM ADD. CONVERSION_^1_%STA* LSP26_(SAVE LSB_^1_%STQ* LSP26-1_^1_%RTJ- (AMONI)_^1LSP20 ADC $800+CHRSLV_^1LSP24 N€€UM 0_,RETURN (TO BE FILLED)_^1_%NUM 0_,THREAD_^1_%ADC MASSLU_^1_%ADC FLOATZ_^1LSP25 NUM 0_,FLOAT PACKAGE ADD. (TO BE FILLED)_^1_%NUM 0_^1LSP26 NUM 0_,SECTOR ADD. (TO BE FILLED)_^1_%JMP- (ADISP)_^1QSAVE NUM 0_^1_%EQU REQTYP(QSAVE)_^1_%SPC 1_^1*_]_^1OFTB_!ADC MMADDR_'0. "MMADDR"_^1_%ADC MSG_*1. "MSG"_^1FLTADD ADC DCONV_(D- OR F-FORMAT CONVERSION -- DOUBLE_^1_%SPC 1_^€€1*_]_^1SAVDA NOP 0_,ENTRY_^1_%STA- I_^1_%ENQ 0_^1SAV1_!LDA* VALUE+3,Q_^1_%ALS 8_,ASSEMBLE INTO 2-CHAR./WORD_^1_%ADD* VALUE+4,Q_^1_%STA* BUF,I_^1_%INQ 2_^1_%TRQ A_^1_%INA -20_*CHECK IF ALL IN_^1_%SAP SAV2_^1_%RAO- I_^1_%JMP* SAV1_^1SAV2_!JMP* (SAVDA)_%RETURN_^1_%SPC 2_^1*_]_^1LSP30 SQP LSP35_(MM TRANSFER OK, SKIP_^1_%RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP31 NUM €€ 0_^1IOE_"LDQ* BASE_)I/O ERROR ENCOUNTERED , EXIT_^1_%LDQ- IOERR,Q_%EXIT TO "IOERR"_^1_%JMP- (ZERO),Q_^1*_]_^1*****_-FLOAT PACKAGE IS IN CORE, CONVERT NO._^1*_]_^1LSP35 LDQ* COUNT_^1_%LDA* (NEWVA),Q_#GET NEW VALUE FOR CONVERSION_^1_%STA* VALUE_^1_%INQ 1_^1_%LDA* (NEWVA),Q_^1_%STA* VALUE+1_^1_%INQ 1_^1_%LDA* (NEWVA),Q_^1_%STA* VALUE+2_^1_%RTJ* (LSP31)_^1_%ADC VALUE-*_^1_%ENA 0_€€,MOVE NEW VALUE IN D-FORMAT INTO OUTPUT_^1_%RTJ* SAVDA_^1*_]_^1_%LDQ* COUNT_^1_%LDA* (OLDVA),Q_#GET OLD VALUE AND CONVERT_^1_%STA* VALUE_^1_%INQ 1_^1_%LDA* (OLDVA),Q_^1_%STA* VALUE+1_^1_%INQ 1_^1_%LDA* (OLDVA),Q_^1_%STA* VALUE+2_^1_%RTJ* (LSP31)_^1_%ADC VALUE-*_^1_%SPC 1_^1*_1RETURN FROM CONVERSION (FLOAT TO D-FORMAT)_^1_%ENA 12_^1_%RTJ* SAVDA_^1TOPT_!LDA* MESTB_^1_%LDQ* MESTB€€+1_^1_%RTJ PNT_^1_%LDA* COUNT_(UP DATE NO. BEEN CONVERTED COUNT BY 2_^1_%INA 3_^1_%STA* COUNT_^1_%SUB* QSAVE_^1_%SAZ ENDCON_'TO RELEASE CORE,... ETC._^1_%JMP* LSP35_(NOT DONE, TO REPEAT_^1_%SPC 2_^1*_]_^1ENDCON RTJ- (AMONI)_%RELEASE CORE_^1_%NUM $1800_^1LSP40 NUM 0_,ADD. (TO BE FILLED)_^1_%SPC 1_^1*_1REQUEST CONFIRMATION_^1NEDCON LDA* MESTB+2_^1_%LDQ* MESTB+3_^1_%RTJ PNT_^€€1_%ENA 0_^1_%STA* REQTYP_^1_%RTJ- (AMONI)_^1FRDCD ADC $900+CHRSLV_!F-READ_^1_%ADC GETIN-FRDCD_^1_%NUM 0_^1_%ADC INCOM_^1_%NUM 1_,1 WORD_^1_%ADC REQTYP-FRDCD_^1_%JMP- (ADISP)_^1*_]_^1GETIN SQP INOK_^1_%JMP* IOE_^1INOK_!LDA =AOK_^1_%SUB* REQTYP_^1_%SAN GIVEUP_'ABORT REQUEST AFTER PRINTING MESSAGE_^1_%JMP (FLCVDB)_$RETURN TO CALLER_^1GIVEUP LDA MESTB+4_%TO PRINT ABORT ME€SSAGE_^1_%LDQ MESTB+5_^1_%RTJ PNT_^1_%LDQ BASE_^1_%LDQ- SOMMOR,Q_$GET "SOMMOR" ADDRESS AND EXIT_^1_%JMP- (ZERO),Q_^1_%SPC 1_^1*_]_^1VALUE BZS VALUE(24)_^1_%SPC 3_^1*_]_^1_%EQU SU14(*/96)_^1_%EQU SB14(SU14+1)_^1_%EQU DB14(SB14*96)_^1_%BSS (DB14-*)_^1_%END_]_^__PNAMEMS CSY/ I07 P€1_%NAM NAMEMS_'DECK-ID I07 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1COMAND MAC A_^1_%LOC X,N_^1'X'_"ADC 'N'_^1_%ALF .,'A'_^1_%EQU 'N'(*-'X'-1)_^1_%EMC_]_^1HEADNG MAC C_^1_%LOC Y,M_^1'Y'_"ADC 'M'_^1_%NUM 0_^1_%ALF .,'C'_^1_%EQU 'M'(*-'Y'-1)_^1_%EMC_]_^1*_]_^1*_]_^1*_,********************************************_^1*_,*_I*_^1*_,*_#ROUTIN€€E CONTAINS ALL COMMANDS OF_#*_^1*_,*_#THIS DEBUG, SOME INFORMATION IS_$*_^1*_,*_'ASSOCIATED WITH COMMAND_**_^1*_,*_I*_^1*_,********************************************_^1*_]_^1*_]_^1_%SPC 1_^1*_]_^1******_,MARCO ---- "COMAND" IS FOR DEBUG COMMAND LIST_^1*_]_^1****_9"HEADNG" IS FOR DEBUG HEADING_^1*_]_^1_%SPC 1_^1*_]_^1********_*MESSAGE FORMAT_^1*_]_^1*_2COMMAND NAME_!--- DESCR€€IPTION_^1*_]_^1******_,MESSAGE MUST BE LIMITED TO 20 WORDS MAX._^1*_]_^1_%SPC 1_^1*_1E N T R Y_%N A M E_^1_%ENT NAMEMS_^1_%SPC 5_^1*_]_^1*****_(*****_$******_(*******_%*********_^1*_]_^1*_]_^1*****_4MESSAGES_^1*_]_^1NAMEMS HEADNG ' ***** DEBUG COMMAND LIST *****.'_^1_%SPC 2_^1*_1TYPE 1 ---_"CORE DATA_^1_%HEADNG '_!$$$ CORE DATA OPERATION $$$.'_^1_%HEADNG '_#1 DATA LOA€€DING.'_^1_%COMAND ' LHX -- LOAD HEX CORE.'_^1_%COMAND ' LIT -- LOAD CORE INTEGER.'_^1_%COMAND ' LAS -- LOAD ASCII TO CORE.'_^1_%COMAND ' LSP -- LOAD CORE SINGLE PRECISION.'_^1_%COMAND ' LDP -- LOAD CORE DOUBLE.'_^1_%HEADNG '_#2 DATA DUMPING.'_^1_%COMAND ' DPC -- DUMP CORE HEX.'_^1_%COMAND ' DIC -- DUMP CORE INTEGER.'_^1_%COMAND ' DAS -- DUMP CORE ASCII.'_^1_%COMAND ' DSP €€-- DUMP CORE SINGLE.'_^1_%COMAND ' DDP -- DUMP CORE DOUBLE.'_^1_%SPC 2_^1*_1TYPE 2 ---_"MASS STORAGE DATA_^1_%HEADNG '_!$$$ MASS STORAGE OPERATIONS $$$.'_^1_%HEADNG '_#1 DATA LOADING, MASS MEMORY.'_^1_%COMAND ' LHM -- LOAD MM HEX.'_^1_%COMAND ' LIM -- LOAD MM INTEGER.'_^1_%COMAND ' LAM -- LOAD MM ASCII.'_^1_%COMAND ' LSM -- LOAD MM SINGLE.'_^1_%COMAND ' LDM -- LOAD MM €€DOUBLE.'_^1_%HEADNG '_#2 DATA LOADING, CORE IMAGE.'_^1_%COMAND ' LHC -- LOAD CORE IMAGE HEX.'_^1_%COMAND ' LIC -- LOAD CORE IMAGE INTEGER.'_^1_%COMAND ' LAC -- LOAD CORE IMAGE ASCII.'_^1_%HEADNG '_#3 DATA LOADING, ORDINAL.'_^1_%COMAND ' LHO -- LOAD ORDINAL HEX.'_^1_%COMAND ' LIO -- LOAD ORDINAL INTEGER.'_^1_%COMAND ' LAO -- LOAD ORDINAL ASCII.'_^1_%COMAND ' LSO -- LOAD ORD€€INAL SINGLE.'_^1_%COMAND ' LDO -- LOAD ORDINAL DOUBLE.'_^1_%HEADNG '_#4 DATA DUMPING, MASS MEMORY.'_^1_%COMAND ' DMH -- DUMP MM HEX.'_^1_%COMAND ' DMI -- DUMP MM INTEGER.'_^1_%COMAND ' DMA -- DUMP MM ASCII.'_^1_%COMAND ' DMS -- DUMP MM SINGLE.'_^1_%COMAND ' DMD -- DUMP MM DOUBLE.'_^1_%COMAND ' MSD -- MASS MEMORY DUMP BY SECTOR.'_^1_%HEADNG '_#5 MASS STORAGE READ/WRITE.'_^1€€_%COMAND ' RDC -- READ DISK TO CORE.'_^1_%COMAND ' RDK -- READ DISK.'_^1_%COMAND ' WCD -- WRITE CORE TO DISK.'_^1_%COMAND ' WDK -- WRITE DISK.'_^1_%SPC 2_^1*_1TYPE 3 ---_"MISCELLANOUS DATA_^1_%HEADNG '_!$$$ AUXILIARY OPERATIONS $$$.'_^1_%HEADNG '_#1 MAGNETIC TAPE STATEMENTS.'_^1_%COMAND ' ADF -- ADVANCE FILE.'_^1_%COMAND ' BSF -- BACKSPACE FILE.'_^1_%COMAND ' ADR -- AD€€VANCE RECORD.'_^1_%COMAND ' BSR -- BACKSPACE RECORD.'_^1_%COMAND ' WEF -- WRITE EOF.'_^1_%COMAND ' REW -- REWIND.'_^1_%COMAND ' UNL -- UNLOAD.'_^1_%COMAND ' SLD -- SELECT DENSITY.'_^1_%HEADNG '_#2 CORE.'_^1_%COMAND ' SCN -- SEARCH CORE FOR PATTERN.'_^1_%COMAND ' SMN -- SEARCH MM PATTERN.'_^1_%COMAND ' SET -- SET PATTERN IN CORE.'_^1_%COMAND ' SMP -- SET MM PATTERN.'_^1_%C€€OMAND ' SPE -- SEARCH PARITY.'_^1_%COMAND ' CPP -- CLEAR PROTECT BITS.'_^1_%COMAND ' SPP -- SET PROTECT BITS.'_^1_%COMAND ' SCH -- SCHEDULE PROGRAM.'_^1_%COMAND ' ALC -- ALLOCATE CORE.'_^1_%COMAND ' REL -- RELEASE CORE.'_^1_%COMAND ' PTH -- PRINT THREAD.'_^1_%COMAND ' DAC -- DUMP ALLOCATE CORE MAP.'_^1_%COMAND ' DPT -- DUMP PARTITION CORE.'_^1_%HEADNG '_#3 MOVE DATA.'_^1_€€%COMAND ' MBC -- MOVE BLOCK OF CORE.'_^1_%COMAND ' MMM -- MOVE MM TO MM.'_^1_%HEADNG '_#4 COMPARE DATA.'_^1_%COMAND ' CCC -- COMPARE CORE TO CORE.'_^1_%COMAND ' CCM -- COMPARE CORE TO MM.'_^1_%COMAND ' CMM -- COMPARE MM TO MM.'_^1_%HEADNG '_#5 OTHER.'_^1_%COMAND ' ADH -- ADD HEX NUMBERS.'_^1_%COMAND ' SBH -- SUBTRACT HEX NUMBERS.'_^1_%COMAND ' MLU -- CHANGE MM LU.'_^1_%CO€€MAND ' CLU -- CHANGE LIST UNIT.'_^1_%COMAND ' CWA -- CONVERT WORD ADDRESS TO SECTOR.'_^1_%COMAND ' LST -- LIST COMMANDS.'_^1_%HEADNG ' OFF -- EXIT DEBUG.'_^1_%HEADNG ' DX -- ABNORMAL EXIT AFTER MI.'_^1_$SPC 2_^1*_1TYPE 4 ---_"TERMINATOR_^1_%NUM 1,$FFFF_%TERMINATOR_^1_%SPC 3_^1*_]_^1_%EQU SU15(*/96)_^1_%EQU SB15(SU15+1)_^1_%EQU SX15(SB15*96)_^1_%BSS (SX15-*)_^1_%END_]_€^__ ' CLU -- CHANGE LISPDCONV CSY/ I08 P€1_%NAM DCONV_(DECK-ID I08 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#SUBROUTINE TO CONVERT VALUE TO FLOAT_#*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1*****_-CALLING SEQUENCE :_^1*_]_^1*_8RTJ DCONV_^1*_8ADC BUFFER-*_#(POSITIVE C€€OUNTS)_^1*_]_^1*_]_^1*****_,"BUFFER" ASSIGNMENT :_^1*_]_^1*_4WORD 1 NO. OF DIGITS_^1*_4WORD 2 NO. OF INTEGER_^1*_93 NO. OF FRACTIONAL NUMBERS_^1*_94 SIGN (0=+, 1=-)_^1*_95 'E'/'D' (0=UNUSED, 2='E', 1='D')_^1*_96 EXPONENT VALUE_^1*_97 INPUT DIGIT (BINARY)_^1*_98_"._"._"._#._^1*_9._"._"._"._#._^1*_>._"._"._#._^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT DCONV_(F-€€FORMAT OR D-FORMAT CONVERSION_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT* LAZY2_^1_%EXT* DFLOT,DFLT,DFIX_^1_%SPC 1_^1*_1" E Q U "_$T A B L E_^1_%EQU LPMSK(2),NO10($46)_^1_%EQU ZERO($22)_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DCONV NOP 0_,ENTRY_^1_%LDA* (DCONV)_^1_%ADD* DCONV_^1_%STA* LAZ_^1_%RAO* DCONV_(SET EXIT_^1_%SQN LAY_*SKIP ON€€ FLOAT TO INTEGER_^1_%RTJ LAZY2_^1LAZ_"NUM 0_^1LAZEXT JMP* (DCONV)_%RETURN_^1*_]_^1*_]_^1*_]_^1*_,***********************************************_^1*_,*_L*_^1*_,*_#ROUTINE TO CONVERT DOUBLE PRECISION_#*_^1*_,*_*VALUE TO D-FORMAT_0*_^1*_,*_L*_^1*_,***********************************************_^1*_]_^1*_]_^1*_]_^1******_,"LBUFER" ASSIGNMENT :_^1*_]_^1*_1WORDS 01-03 FLOATING V€€ALUE (D.P.)_^1*_804-04 SIGN_^1*_805-05 ' 0 '_^1*_806-06 ' . '_^1*_807-18 12 DIGITS OF VALUE_^1*_819-19 ' D '_^1*_820-20 SIGN_^1*_821-22 EXPONENT DIGITS_^1*_]_^1*_]_^1*_]_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_$S T A R T_#*****_^1*_]_^1_%SPC 2_^1LAY_"STQ* QSAVE_(SAVE Q-REQ._^1P1_#STA* CALPAR_^1_%STA- I_^1*_1INSERT BUFFER WITH +0.000000000000D+00_^1_%ENQ 3_^1INT1_!E€€NA $30_^1_%STA- 1,B_^1_%INQ 1_^1_%TRQ A_^1_%INA -21_^1_%SAZ INT2_^1_%JMP* INT1_^1INT2_!ENA $2B_^1_%STA- 3,I_^1_%STA- 19,I_^1_%ENA $2E_^1_%STA- 5,I_^1_%ENA $44_*INSERT 'D'_^1_%STA- 18,I_^1_%ENA $20_^1_%STA- 22,I_^1_%STA- 23,I_^1_%LDA- 1,I_^1_%STA* VALUE+1_^1_%LDA- 2,I_^1_%STA* VALUE+2_^1_%LDA- (ZERO),I_$MOVE VALUE (D.P.) TO BUFFER_^1_%STA* VALUE_^1_%SPC 3_^1*_]_^1*****_-CH€€ECK IF VALUE IS NEGATIVE_^1*_]_^1_%SAM NEGV_)NEGATIVE, SKIP_^1_%SAN CHKONE_'SKIP IF IT IS NOT ZERO ( 0 )_^1RETURN LDQ* QSAVE_(RESTORE Q-REGISTER_^1_%JMP* LAZEXT_^1*_]_^1*****_-CONVERT VALUE TO POSITIVE_^1NEGV_!INA 0_,CHECK IF IT IS $FFFF_^1_%SAZ TOSTAR_'YES, SKIP_^1_%ENA $2D_*SET NEGATIVE SIGN_^1_%STA- 3,I_^1_%RTJ DFLOT_^1_%NUM $5B7D_^1_%ADC VALUE-*_%VALUE=-VALUE_^1_€€%ADC VALUE-*_^1_%NUM $4000_^1*_1CHECK IF VALUE IS LESS THAN 1.0_^1CHKONE LDA* VALUE_^1_%SUB- LPMSK+15_$$7FFF CHECK_^1_%SAN NORMAL_^1TOSTAR JMP STAR_)TO FILL BUFFER WITH *_^1NORMAL ADD- LPMSK+15_^1_%SUB* ONE_^1_%SAP GRT1_)SKIP WHEN 1.0 OR GREATER_^1_%JMP* LESS1_(LESS THAN ONE_^1*_]_^1GRT1_!ENA 1_,INITIALIZE FOR OBTAINING 10**I_^1_%STA* J_^1_%LDA* ONE_*B=1.0_^1_%STA* B_^1_%ENA €€ 0_^1_%STA* B+1_^1_%STA* B+2_^1*_]_^1GRT3_!ENA 1_^1_%STA* INDEX_^1GRT5_!RTJ DFLOT_^1_%NUM $5B9D_(MODE, LOAD, MULTIPLY, STORE_^1_%ADC B-*_*B=B*10.0_^1_%ADC TEN-*_^1_%ADC B-*_^1_%NUM $4000_^1_%LDA* INDEX_^1_%SUB* J_^1_%SAZ GRT7_^1GRT6_!RAO* INDEX_^1_%JMP* GRT5_^1*_]_^1*****_-A=VALUE/B AND CHECK IF LESS THAN 1_^1*_]_^1GRT7_!RTJ DFLOT_^1_%NUM $5BAD_(MODE, LOAD, DIVIDE, STORE€€_^1_%ADC VALUE-*_^1_%ADC B-*_*A=VALUE/B_^1_%ADC A-*_^1_%NUM $4000_^1_%LDA* A_,CHECK IF LESS THAN 1.0_^1_%SUB* ONE_^1_%SAP YETING_^1_%JMP* SETEXP_'YSE, SKIP_^1YETING RAO* J_,OTHERWISE UPDATE INDEX AND REPEAT_^1_%JMP* GRT6_^1_%SPC 2_^1***_/CONSTANTS AND STORAGES_^1VALUE BZS VALUE(9)_^1_%EQU A(VALUE+3)_^1_%EQU B(VALUE+6)_^1ONE_"NUM $40C0,0,0_^1TEN_"NUM $4250,0,0_^1CALPAR€€ NUM 0_^1QSAVE NUM 0_^1J_$NUM 0_^1INDEX NUM 0_^1_%SPC 3_^1*_]_^1*****_%***************************************************_^1*_]_^1*_]_^1******_,CALCULATE EXPONENT VALUE_^1*_]_^1SETEXP RTJ DFLOT_^1_%NUM $5BAD_(MODE, LOAD, DIVIDE, STORE_^1_%ADC B-*_^1_%ADC TEN-*_(B=B/10.0_^1_%ADC B-*_^1_%NUM $4000_^1CONVS CLR Q_^1_%LDA* J_^1_%DVI- NO10_^1_%STQ* INDEX_^1_%INA $30_^1€€_%ENQ 20_^1_%STA* (CALPAR),Q_^1_%INQ 1_^1_%LDA* INDEX_^1_%INA $30_^1_%STA* (CALPAR),Q_^1_%SPC 2_^1*_]_^1*****_-CONVERT VALUE INTO 12-DIGIT (MAX.)_^1*_]_^1_%ENA 0_^1_%STA* J_^1DIG2_!RTJ DFLOT_^1_%NUM $5BAD_(MODE, LOAD, DIVIDE, STORE_^1_%ADC VALUE-*_^1_%ADC B-*_^1_%ADC A-*_^1_%NUM $4000_^1_%RTJ DFIX_^1_%ADC (A-*)_^1_%STA* INDEX_^1_%INA $30_*SAVE DIGIT ACCORDINGLY_^1€€_%LDQ* J_^1_%INQ 6_^1_%STA* (CALPAR),Q_^1_%RAO* J_^1_%LDA* J_,CHECK IF ALL 12 DIGITS BEEN ASSEMBLE_^1_%INA -12_^1_%SAN DIG6_)NOT DONE, REPEAT_^1_%JMP* RETURN_^1DIG6_!RTJ DFLT_)FLOAT CURRENT DIGIT_^1_%ADC (INDEX-*)_^1_%RTJ DFLOT_^1_%NUM $597E_(MODE, MULTIPLY, COMPLEMENT, ADD_^1_%ADC B-*_^1_%ADC VALUE-*_%VALUE=VALUE-INDEX*10_^1_%NUM $DBAD_(STORE, LOAD, DIVIDE, STORE_^1_%ADC€€ VALUE-*_^1_%ADC B-*_^1_%ADC TEN-*_^1_%ADC B-*_*B=B/10.0_^1_%NUM $4000_(STOP_^1_%JMP* DIG2_^1_%SPC 5_^1*_]_^1*****_%*************************************************_^1*_]_^1*_]_^1******_,FRACTIONAL VALUE PROCESSING_^1*_]_^1LESS1 ENQ 19_^1_%ENA $2D_*SET EXPONENT SIGN TO NEGATIVE_^1_%STA* (CALPAR),Q_^1_%ENA 0_^1_%STA* J_^1LES111 RTJ DFLOT_^1_%NUM $5B9D_(MODE, LOAD, MUL€€TIPLY, STORE_^1_%ADC VALUE-*_^1_%ADC TEN-*_(VALUE = VALUE * 10.0_^1_%ADC VALUE-*_^1_%NUM $4000_^1*_1CHECK IF VALUE GREATER/EQUAL TO 1.0_^1_%LDA* VALUE_^1_%SUB* ONE_^1_%SAM LESS13_'NO, SKIP_^1_%LDA* ONE_*B=1.0_^1_%STA* B_^1_%ENA 0_^1_%STA* B+1_^1_%STA* B+2_^1_%JMP* CONVS_(TO ASSEMBLE EXP. AND 12-DIGIT_^1*_]_^1LESS13 RAO* J_^1_%JMP* LES111_^1_%SPC 3_^1*_]_^1******_,FILL BUFFER€Z WITH * FOR OVER/UNDER FLOW_^1*_]_^1STAR_!LDA* CALPAR_^1_%STA- I_^1_%ENQ 2_^1STAR1 ENA $2A_*'*'_^1_%STA- 1,B_^1_%INQ 1_^1_%TRQ A_^1_%INA -21_*CHECK IF DONE_^1_%SAZ STAR3_^1_%JMP* STAR1_(TO REPEAT_^1STAR3 JMP RETURN_'TO EXIT_^1_%SPC 3_^1*_]_^1_%EQU DP01(*/96)_^1_%EQU DP02(DP01+1)_^1_%EQU DP03(DP02*96)_^1_%BSS (DP03-*)_^1_%END_]_^__ZPLAZY2 CSY/ I09 P€1_%NAM LAZY2_(DECK-ID I09 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***********************************************_^1*_,*_L*_^1*_,*_#ROUTINE TO CONVERT DOUBLE PRECISION_#*_^1*_,*_#NUMBER INTO FLOATING POINT FORMAT_%*_^1*_,*_L*_^1*_,***********************************************_^1*_]_^1*_]_^1******_,CALLING SEQUENCE %_^1*_]_^1*€€_8RTJ LAZY2_^1*_]_^1*_8ADC LBUFER_^1*_]_^1*_]_^1******_,"LBUFER" ASSIGNMENTS %_^1*_]_^1*_1WORDS 01-01 NO. OF DIGITS IN INPUT_^1*_802-02 NO. OF DIGITS FOR INTEGER PART_^1*_803-03 NO. OF DIGITS FOR FRACTIONAL PART_^1*_804-04 SIGN_^1*_805-05 1 = D, OR 0 = UNUSED_^1*_806-06 EXPONENT VALUE (BINARY)_^1*_807-18 MAX. OF 12 DIGITS OF INPUT_^1*_819-21 FLOATING POINT VALUE (RETURN)_^1*_]€€_^1*_]_^1_%SPC 2_^1*_1E N T R Y_$N A M E_^1_%ENT LAZY2_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT* DFLOT,DFLT_^1_%SPC 1_^1*_1" E Q U "_$T A B L E_^1_%EQU LPMSK(2)_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LAZY2 NOP 0_,ENTRY_^1_%STQ* QSAVE_(SAVE Q-REG._^1_%LDA* (LAZY2)_%GET PARAMETER_^1_%SAP P1_^1_%ADD* LAZY2_^1_%AND- LPMSK+15_^1P1_#ST€€A* CALPAR_^1_%RAO* LAZY2_(SET EXIT_^1_%STA- I_^1_%SPC 2_^1***_/INITIALIZED_^1_%ENQ 8_^1_%ENA 0_^1INT1_!STA* ZERO,Q_^1_%SQZ INT3_^1_%INQ -1_^1_%JMP* INT1_^1INT3_!ENA 1_^1_%STA* K_^1_%STA* INDEX_^1_%SPC 1_^1*_1CHECK IF ANY VALUE (INTEGER PART)_^1_%LDA- 1,I_^1_%SAN ING1_^1_%JMP* FRACTN_'NO, (TO FRACTIONAL PROCESSING)_^1_%SPC 2_^1*_]_^1*****_%******************************€€*************************_^1*_]_^1**_]_^1******_,PROCESSING INTEGER VALUE_^1**_]_^1*_]_^1ING1_!STA* J_^1_%SPC 2_^1***_/GET ONE DIGIT AT A TIME AND ASSEMBLE_^1ING6_!LDA* K_^1_%INA 5_,GET INPUT DIGIT_^1_%ADD* CALPAR_^1_%STA* INDGK_^1_%ENA 13_+CALCULATE 10**I INDEX FOR CURRENT INTEGER_^1_%SUB* J_^1_%MUI- LPMSK+2_%( * 3 )_^1_%STA* D10_^1_%RTJ DFLT_^1INDGK NUM 0_^1_%RTJ DFLOT_^€€1_%NUM $5F96_(MODE, INDEX, MULTIPLY, NO INDEX_^1_%ADC D10-*_^1_%ADC DNO10-3-*_^1_%NUM $ED40_(ADD, STORE, STOP_^1_%ADC A-*_^1_%ADC A-*_*(A = A + LVALUE(K))*(10**I))_^1_%RAO* K_,UPDATE POINTERS AND CHECK IF DONE_^1_%LDA* J_^1_%INA -1_^1_%STA* J_^1_%SAZ FRACTN_'YES, SKIP_^1_%JMP* ING6_)NO, REPEAT_^1D10_"NUM 0_^1_%SPC 2_^1*_]_^1*****_-CHECK IF ALL INPUT DIGITS BEEN ASSEMBL€€ED_^1*_]_^1FRACTN ENQ 2_^1_%LDA* (CALPAR),Q_^1_%SAN FR0_*SKIP, THERE IS FRACTIONAL PART_^1_%JMP* EXPCHK_'ALL DONE, GO_^1_%SPC 3_^1*_]_^1*****_%*************************************************_^1*_]_^1***_]_^1******_,PROCESSING FRACTIONAL VALUE_^1*_]_^1FR0_"STA* J_^1FR1_"LDA* K_,GET INPUT DIGIT AND FLOAT IT_^1_%INA 5_^1_%ADD* CALPAR_^1_%STA* FRV_^1_%ENA 12_+CALCULATE 10**I I€€NDEX_^1_%SUB* INDEX_^1_%MUI- LPMSK+2_^1_%STA* D10_^1_%RTJ DFLT_^1FRV_"NUM 0_^1_%RTJ DFLOT_^1_%NUM $5FA6_(MODE, INDEX, DIVIDE, NO INDEX_^1_%ADC D10-*_^1_%ADC DNO10-3-*_^1_%NUM $ED40_(ADD, STORE, STOP_^1_%ADC A-*_^1_%ADC A-*_^1*_]_^1_%LDA* J_,CHECK IF ALL FRACTIONAL DIGITS BEEN ASSEMBLED_^1_%INA -1_^1_%STA* J_^1_%SAN NOEXTY_'NO, SKIP_^1_%JMP* EXPCHK_'YES, SKIP_^1NOEXTY RA€€O* K_^1_%RAO* INDEX_^1_%JMP* FR1_^1_%SPC 2_^1*_1CONSTANTS AND STORAGES_^1ZERO_!BZS ZERO(9)_^1_%EQU A(ZERO+3)_^1_%EQU B(ZERO+6)_^1CALPAR NUM 0_^1QSAVE NUM 0_^1K_$NUM 0_^1J_$NUM 0_^1INDEX NUM 0_^1_%SPC 3_^1*_]_^1*****_%******************************************************_^1*_]_^1*_]_^1*****_-CHECK IF EXPONENT IS USED_^1*_]_^1EXPCHK ENQ 5_^1_%LDA* (CALPAR),Q_^1_%I€€NA 0_^1_%SAN EX1_*YES, USED_^1_%JMP* DONE_^1EX1_"STA* INDEX_^1_%LDQ* ONE_*B=1.0_^1_%STQ* B_^1_%ENQ 0_^1_%STQ* B+1_^1_%STQ* B+2_^1_%SAP EXP3_)SKIP ON POSITIVE_^1_%TCA A_,COMPLEMENT VALUE_^1EXP3_!STA* J_^1_%SAZ EXP5_^1*_1CALCULATE 10**I BASE ON EXPONENT VALUE_^1_%RTJ DFLOT_^1_%NUM $5B9D_^1_%ADC B-*_^1_%ADC TEN-*_(B=B*10.0_^1_%ADC B-*_^1_%NUM $4000_^1_%LDA* J_^1_%INA €€ -1_^1_%JMP* EXP3_^1_%SPC 1_^1*_]_^1EXP5_!LDA* INDEX_(CHECK IF EXPONENT VALUE IS NEGATIVE_^1_%LDQ =N$5B9D_%YES, SKIP_^1_%SAP EXP7_)SKIP ON POSITIVE EXPONENT_^1_%INQ $10_*(MODE, LOAD, DIVIDE, STORE)_^1EXP7_!STQ* EXP8_^1_%RTJ DFLOT_^1EXP8_!NUM 0_^1_%ADC A-*_^1_%ADC B-*_*A=A*B OR A=A/B_^1_%ADC A-*_^1_%NUM $4000_^1_%SPC 3_^1*_]_^1*****_-SAVE VALUE BEFORE RETURN_^1*_]_^1DO€€NE_!ENQ 3_^1_%LDA* (CALPAR),Q_"CHECK IF NEGATIVE SIGN DEFINED_^1_%INA -2_^1_%SAM D2_+NO, SKIP_^1_%RTJ DFLOT_(CONVERT VALUE TO NEGATIVE_^1_%NUM $5B7D_^1_%ADC A-*_*A=-A_^1_%ADC A-*_^1_%NUM $4000_^1D2_#ENQ 18_^1_%LDA* A_,MOVE VALUE TO CALLER BUFFER_^1_%STA* (CALPAR),Q_^1_%INQ 1_^1_%LDA* A+1_^1_%STA* (CALPAR),Q_^1_%INQ 1_^1_%LDA* A+2_^1_%STA* (CALPAR),Q_^1_%LDQ* QSAVE_(RESTO€€RE Q-REGISTER_^1_%JMP (LAZY2)_%RETURN_^1*_]_^1******_,10**11 THROUGH 10**(0)_^1*_]_^1DNO10 NUM $52DD,$21DB,$A000,$514A,$817C,$8000,$4F77,$3594,$0000_^1_%NUM $4DDF,$5E10,$0000,$4C4C,$4B40,$0000,$4A7A,$1200,$0000_^1_%NUM $48E1,$A800,$0000,$474E,$2000,$0000,$457D,$0000,$0000_^1_%NUM $43E4,$0000,$0000,$4250,$0000,$0000,$40C0,$0000,$0000_^1_%EQU TEN(DNO10+30)_^1_%EQU ONE(DNO10€v+33)_^1_%SPC 3_^1*_]_^1_%EQU DP01(*/96)_^1_%EQU DP02(DP01+1)_^1_%EQU DP03(DP02*96)_^1_%BSS (DP03-*)_^1_%END_]_^__vPODDFLT CSY/ I10 P€1_%NAM ODDFLT_'DECK-ID I10 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1***_/THIS ROUTINE RUN ANYWHERE/NON-RETRANCE_^1*****_0"DUMMY" BUFFER IS SET UP FOR MIN. CHANGE_^1****_]_^1***€€****_2DEBUG RUNS ON THE LOWER 32K, THEREFORE_^1*******_7NO 65 K ADDRESSING IS NEEDED_^1*_]_^1**********_(SPECIAL ARRANGEMENT --- DOES NOT USE LOW CORE_^1*_]_^1_%SPC 1_^1*_1E N T R Y_#N A M E S_^1_%ENT DFIX_^1_%ENT DFLT_^1_%ENT AVOLA_^1_%ENT AVOLR_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT* DFLOT_^1_%SPC 1_^1*_1" E Q U "_#T A B L E_^1_%EQU CELL2(41),CELL1(42),QS(25)_^1_%EQU €€CELL0(43)_^1_%EQU G(3),SIGN(6),ERRORS(7)_^1_%EQU ZERO($22),LPMSK(2)_^1_%SPC 2_^1*_]_^1******_'*****_#P R O G R A M_$S T A R T_#*****_^1*_]_^1_%SPC 2_^1*_]_^1DFIX_!NOP 0_,ENTRY_^1_%EQU Q8FX(DFIX)_^1_%RTJ* AVOLA_(GET BUFFER_^1_%STQ- QS,I_)SAVE Q-REG._^1_%LDA* (Q8FX)_^1_%SAP KLG65K_^1_%ADD* Q8FX_^1_%AND- LPMSK+15_^1KLG65K TRA Q_^1FX5_"LDA- (ZERO),Q_^1_%STA- CELL1,I_^1_%INQ 1_€€^1_%LDA- (ZERO),Q_^1_%STA- CELL2,I_^1_%RAO* DFIX_)SET EXIT_^1FIX_"LDA- CELL1,I_^1_%SAP FX1-*-1_^1_%TCA A_(COMPLEMENT A AND CELL2_^1_%LDQ- CELL2,I_^1_%TCQ Q_^1_%STQ- CELL2,I_^1FX1_"ENQ 0_^1_%LLS 2_^1_%SQN FX2-*-1_^1_%ENA 0_(LESS THAN UNITY, ZERO TO A_^1_%JMP* FX4_^1FX2_"ENQ 0_^1_%LLS 3_^1_%SQZ FX3-*-1_^1_%LDA- LPMSK+15_$GREATER THAN 2**16-1, $7FFF TO A_^1_%JMP* FX6_^1FX3_"€€LDQ* LLS_%CONSTRUCT A SHIFT_^1_%LLS 4_^1_%STQ* SHIFT_^1_%ENQ 0_(LOW-ORDER BITS COME FROM WORD2_^1_%LLS 7_^1_%LDA- CELL2,I_^1_%LRS 7_^1SHIFT LLS 0_(COUNT FROM EXPONENT LOW 4 BITS_^1_%TRQ A_(ANSWER TO ACC_^1FX6_"LDQ- CELL1,I_LPSR 903_^1_%SQP FX4-*-1_^1_%TCA A_(COMPLEMENT_^1FX4_"LDQ- QS,I_^1_%STA- 1,I_^1_%RTJ* AVOLR_(RELEASE BUFFER_^1_%JMP* (DFIX)_'RETURN_^1LLS_"ADC $00FE_^1€€_%SPC 2_^1*_1FIX TO FLOAT ENTRY_^1_%SPC 2_^1*_]_^1DFLT_!NOP 0_,ENTRY_^1_%EQU Q8FLOT(DFLT)_^1_%RTJ* AVOLA_(GET BUFFER_^1_%STQ- QS,I_$SAVE Q_^1_%LDA* (Q8FLOT)_^1_%SAP FL0_^1_%ADD* Q8FLOT_^1_%AND- LPMSK+15_^1FL0_"TRA Q_^1_%LDA- (ZERO),Q_^1_%STA- CELL1,I_^1_%RAO* Q8FLOT_"SKIP PARAMETER ADDRESS_^1FLT_"LDA- CELL1,I_^1_%SAP FL1-*-1_^1_%TCA A_(COMPLEMENT_^1FL1_"SAZ FL10_^1_%JMP* F€€L3_^1FL10_!STA- CELL2,I_!INPUT WAS ZERO_^1FL8_"STA- CELL1,I_^1_%LDA- CELL2,I_%GET FIRST WORD_^1_%ENQ 0_^1_%SAP SET0_)SET THIRD WORD TO 0 IF FIRST IS +_^1_%ENQ -0_^1SET0_!STQ- CELL0,I_^1_%LDA- I_^1_%INA CELL2_^1_%STA* LOCEL2_^1_%RTJ DFLOT_^1_%NUM $B400_^1LOCEL2 ADC CELL2_^1FL2_"LDQ- QS,I_^1_%RTJ* AVOLR_(RELEASE BUFFER_^1_%JMP* (Q8FLOT) RETURN_^1FL3_"LDQ =N$8F_#EXPONENT FOR €€15-BIT INPUT_^1FL4_"ALS 1_^1_%SAM FL5-*-1_^1_%INQ -1_^1_%JMP* FL4_^1FL5_"LLS 7_(MOST SIGNIFICANT 7BITS IN Q_^1_%STQ- CELL2,I_^1_%LDQ- CELL1,I_^1_%SQM FL6-*-1_^1_%JMP* FL8_^1FL6_"TCA A_(COMPLEMENT A_^1_%LDQ- CELL2,I_^1_%TCQ Q_(COMPLEMENT Q_^1_%STQ- CELL2,I_^1_%JMP* FL8_^1FL1XX NUM 0_^1_%SPC 2_^1*_]_^1*_$THIS ROUTINE IS DESIGNED TO ALLOW SIMULATED VOLATILE STORAGE_^1*_$ALLO€€CATION (TEMPORARY DATA STORAGE) USED BY SUBPROGRAM DFLOT_^1*_$WHEN RUNNING IN BACKGROUND MODE._^1*_]_^1_%SPC 2_^1*_]_^1AVOLA 0_"0_,SIMULATED VOLATILE STORAGE ALLOCATION ROUTINE_^1_%STQ* BUFADD_^1_%RTJ* SELF_^1SELF_!NOP 0_^1_%LDQ* SELF_)GENERATE BUFFER ADDRESS_^1_%INQ BUF-SELF_^1_%STQ* SELF_^1_%LDQ- I_^1_%STQ* (SELF)_'SAVE I-REG._^1_%LDQ* SELF_^1_%STQ- I_,SELF BUFFER ADDRESS TO €€I-REG._^1_%STA- 1,I_^1_%LDA* BUFADD_'SAVE Q-REG._^1_%STA- 2,I_^1_%JMP* (AVOLA)_%RETURN TO CALLING PROGRAM_^1AVOLR 0_"0_,SIMULATED VOLATILE STORAGE ALLOCATION ROUTINE_^1_%LDQ- I_,BEGINNING LOCATION OF SIM. VOLATILE STORAGE_^1_%LDA- 2,Q_^1_%STA- I_,RESTORE THE I REGISTER_^1_%LDA- 1,Q_*RESTORE THE A REGISTER_^1_%LDQ- (ZERO),Q_$RESTORE THE Q REGISTER_^1_%JMP* (AVOLR)_%RETURN TO CALLIN€’G PROGRAM_^1BUFADD ADC BUF_^1BUF_"BZS BUF(45)_^1_%SPC 3_^1*_]_^1_%EQU DP01(*/96)_^1_%EQU DP02(DP01+1)_^1_%EQU DP03(DP02*96)_^1_%BSS (DP03-*)_^1_%END_]_^__’PODDFTN CSY/ I11 P€1_%NAM ODDFTN_'DECK-ID I11 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$1700 ENCODE/DECODE ROUTINES_^1_%SPC 2_^1*_]_^1*******_%*****_"THIS PACKAGE IS FOR DEBUG ONLY_^1********_€€.IT DOES NOT USE LOW CORE LOCATION_^1*_]_^1_%SPC 1_^1***_(NON-REENTRENT/RUNANYWHERE_^1*_$REFER TO APPENDIX C OF ERS FOR C006 FOR_^1*_$DETAILS OF THIS PACKAGE._^1*_$PROGRAMMING, LSD, CDC_^1_%SPC_!2_^1*_]_^1*_;POINT PKG._^1*_$LIST OF FLOATING POINT OPERATION CODES._^1*_$0_"XXX_-(NOT USED)_^1*_$1_"XXX_*(NOT USED)_^1*_$2_"XXX_*(NOT USED)_^1*_$3_"XXX_*(NOT USED)_^1*_$4_"FEND_,END OF CA€€LLING SEQUENCE_^1*_$5_"CHMD_)CHANGE MODE REL/ABS_^1*_$6_"NIDX_)NO INDEX_^1*_$7_"FCOM_)COMPLEMENT_^1*_$8_"DFSUB_(SUBTRACT_^1*_$9_"DFMPY_(MULTIPLY_^1*_$A_"DFDIV_(DIVIDE_^1*_$B_"DFLDD_(LOAD_^1*_$C_"XXX_*(NOT USED)_^1*_$D_"DFLST_(STORE_^1*_$E_"DFADD_(ADD_^1*_$F_"INDX_)INDEX_^1*_]_^1*_$G, THE PSUEDO ACCUMULATOR IS BROKEN UP INTO_^1*_$C, CI, D, AND DELTA_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$€€N A M E_^1_%ENT DFLOT_+ENTRY POINT TO FLOATING_^1_%SPC 2_^1*_1E X T E R N A L S_^1_%EXT* AVOLA_(GET TEMPORARY STORAGE (DUMY)_^1_%EXT* AVOLR_(RELEASE TEMPORARY STORAGE (DUMMY)_^1_%SPC 1_^1*_1" E Q U "_%T A B L E_^1_%EQU G(3),SIGN(6),ERRORS(7)_^1_%EQU F(8),A(11),AI(12)_^1_%EQU B(13),BETA(14),C(15)_^1_%EQU CI(16),D(17),DELTA(18)_^1_%EQU SHIFCT(19),P(20),RELADR(21)_^1_%EQU OPC€€NT(22),INDEX(23),OPCODE(24)_^1_%EQU QS(25),TEMPQ(26),TEMGP2(27)_^1_%EQU T1(28),T2(29),T3(30),MULDIV(31)_^1_%EQU LPMSK(2),NZERO($12),ZERO($22),ONEBIT($23),ZROBIT($33)_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1DFLOT 0_"0_,ENTRY_^1_%RTJ AVOLA_(TO GET BUFFER_^1_%STQ- QS,I_)SAVE Q_^1*_]_^1_%CLR A_3CLR RELADR_^1_%STA- RELADR,I_^1_%ENA -1_^€€1_%STA- INDEX,I_^1_%ENA 0_,CLEAR_^1_%STA- MULDIV,I_$MULTIPLY/DIVIDE FLAG_^1_%LDA* DFLOT_+SAVE RETURN ADDRESS_^1STOREP STA- P,I_*INTERPRETIVE LIST_^1INTERP CLR A_^1_%STA- OPCNT,I_^1*_$LDA- (P),I_(GET OPCODE_^1_%LDQ- P,I_*GET OPCODE FROM VOLATILE STORAGE AND_^1_%LDA- (ZERO),Q_$PLACE IN A REGISTER_^1_%STA- OPCODE,I_^1_%RAO- P,I_*IF OPCNT GE. 3 GO TO INTERP_^1_%JMP* DECODE_^1*_FGET N€€EXT OPERATION CODE_^1NXTOPC LDA- OPCNT,I_4IF OPCNT .GE. 3 GO TO INTERP_^1_%INA -3_^1_%SAM A1-*-1_^1_%JMP* INTERP_^1A1_#INA 3+1_!OTHERWISE INCREMENT OPCNT_^1_%STA- OPCNT,I_^1_%EJT_]_^1*_FDECODE NEXT OPCODE_^1DECODE LDA- OPCODE,I_^1_%CLR Q_^1_%LLS 4_^1_%STA- OPCODE,I_^1*_FEXECUTE NEXT OPERATION_^1EXECUTE LDQ* FLINS,Q_$GET PROCESSOR ADD. ACCORDINGLY_^1_%JMP* FLINS,Q_^1FLINS ADC €€ FEND-FLINS_"0=END OF SEQUENCE_^1_%ADC FLIT-FLINS_"1=FIN RETURN TO USER_^1_%ADC FLIT-FLINS_"2=FIN RETURN TO USER_^1_%ADC FLIT-FLINS_"3=FIN RETURN TO USER_^1_%ADC FEND-FLINS_"4=END OF SEQUENCE_^1_%ADC CHMD-FLINS_"5=CHANGE'MODE ABS. OR REL._^1_%ADC NIDX-FLINS_"6=NO INDEX_^1_%ADC FCOM-FLINS_"7=COMPLEMENT_^1_%ADC DFSUB-FLINS_!8=SUBTRACT_^1_%ADC DFMPY-FLINS_!9=MULTIPLY_^1_%ADC €€ DFDIV-FLINS_!10=DIVIDE_^1_%ADC DFLDD-FLINS_!11=LOAD ACCUMULATOR_^1_%ADC FLIT-FLINS_"12=FIN RETURN TO USER_^1_%ADC DFLST-FLINS_!13=STORE ACCUMULATOR_^1_%ADC DFADD-FLINS_!14=ADD_^1_%ADC INDX-FLINS_"15=INDEX_^1_%SPC 5_^1*_]_^1*******_+C H A N G E_%M O D E_^1*_]_^1CHMD_!LDA- RELADR,I_$ABSOLUTE/RELATIVE SWITCH_^1_%CLR Q_:IF RELADR=0,SET TO 1. OTHERWISE_^1_%SAN A2-*-1_^1_%ENQ 1€€_^1A2_#STQ- RELADR,I_^1_%JMP* NXTOPC_^1*_*NO INDEX OPERATION CODE_^1NIDX_!ENA -1_^1_%JMP* STONDX_^1*_FINDEX_^1INDX_!ENA -1_+RESET INDEX BEFORE CALLING OPERND_^1_%STA- INDEX,I_^1_%RTJ* OPERND_(OPERND TO INDEX_^1_%LDA- 1,Q_8OPERAND TO INDEX_^1_%INA -1_^1STONDX STA- INDEX,I_^1_%JMP* NXTOPC_^1_%EJT_]_^1_%SPC 3_^1*_]_^1*******_+L O A D_^1*_]_^1DFLDD RTJ* OPERND_^1_%LDA- 3,Q_^1_%STA€€- G+2,I_^1_%LDA- 2,Q_^1_%STA- G+1,I_^1_%LDA- 1,Q_^1_%INA 0_/ELIMINATE MINUS ZERO_^1_%STA- G,I_*OPERAND TO G_^1*_*LOAD OPERAND INTO G._^1*_*UNPACK OPERAND INTO C, CI, D, AND DELTA._^1*_*SAVE SIGN IN SIGN._^1_%ENQ 1_^1_%SAP A3-*-1_^1_%ENQ -1_^1A3_#STQ- SIGN,I_^1*_*UNPACK FROM G INTO C, CI, D, AND DELTA_^1_%LDQ- G+2,I_^1_%STQ- TEMGP2,I_$G+2_^1_%LDQ- G+1,I_^1_%STQ- TEMPQ,I_%G+1_^1_€€%SAP STEP2B-*-1_^1_%TCA A_,COMPLEMENT G_^1_%LDQ- TEMGP2,I_^1_%TCQ Q_^1_%STQ- TEMGP2,I_$COMPLEMENT G+2_^1_%LDQ- TEMPQ,I_^1_%TCQ Q_^1_%STQ- TEMPQ,I_%COMPLEMENT G+1_^1STEP2B STA- C,I_^1_%SAN A4-*-1_^1_%JMP* ARG0_^1A4_#ALS 1_^1_%EOR- ONEBIT+15_#$8000_^1_%ARS 8_^1_%INA 0_^1_%STA- DELTA,I_^1_%LDA- C,I_^1_%LDQ- TEMPQ,I_^1_%LLS 8_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- C,I_^1_%LDA- TEMG€€P2,I_^1_%LDQ- TEMPQ,I_^1_%LLS 23_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- CI,I_^1_%LLS 15_^1_%AND* H7FC0_^1_%STA- D,I_^1_%JMP* NXTOPC_^1H7FC0 NUM $7FC0_^1ARG0_!CLR A_,ARGUMENT IS ZERO._^1_%STA- C,I_^1_%STA- CI,I_^1_%STA- D,I_^1_%STA- DELTA,I_^1_%ENA 1_^1_%STA- SIGN,I_^1_%JMP* NXTOPC_^1_%EJT_]_^1_%SPC 3_^1*_]_^1*******_+S T O R E_^1*_]_^1DFLST RTJ* FLTSTO_^1_%RTJ* OPERND_'GET ADDRE€€SS OF OPERAND_^1_%LDA- G,I_^1_%STA- 1,Q_^1_%LDA- G+1,I_^1_%STA- 2,Q_^1_%LDA- G+2,I_^1_%STA- 3,Q_^1ANXT_!JMP* NXTOPC_^1FEND_!RTJ* FLTSTO_'REPACK ACCUMULATOR BEFORE_^1FLIT_!LDQ- QS,I_)RESTORE Q_^1_%LDA- P,I_*GET RETURN ADDRESS_^1_%STA* DFEXIT_^1_%RTJ AVOLR_^1_%JMP* (DFEXIT)_$RETURN TO USER_^1DFEXIT NUM 0_^1FLTSTO 0_"0_^1_%LDQ- C,I_^1*_*IF C IS ZERO, THEN ACCUMULATOR IS ZERO_^1_%SQN€€ FLST1-*-1_^1_%STQ- G,I_^1_%STQ- G+1,I_^1_%STQ- G+2,I_^1_%JMP* FLSTA_^1FLST1 LDA- CI,I_^1_%ALS 1_^1_%LLS 1_^1_%AND- LPMSK+25_$$FE00_^1_%STA- G+1,I_^1_%LDA- DELTA,I_^1_%AND- LPMSK+8_%$00FF_^1_%EOR- ONEBIT+7_$$0080_^1_%ADD- G+1,I_^1_%LLS 7_^1_%STA- G,I_^1_%STQ- G+1,I_^1_%LDQ- CI,I_^1_%LDA- D,I_^1_%ALS 1_^1_%LLS 9_^1_%STQ- G+2,I_^1_%LDQ- SIGN,I_^1_%SQP FLSTA-*-1_^1_%LDA- G,I_^€€1_%TCA A_^1_%STA- G,I_*IF SIGN IS NEG._^1_%LDA- G+1,I_(COMPLEMENT G._^1_%TCA A_^1_%STA- G+1,I_^1_%LDA- G+2,I_^1_%TCA A_^1_%STA- G+2,I_^1FLSTA NOP 0_,*** REMOVE FOREGROUND***_^1_%JMP* (FLTSTO) EXIT FROM REPACK OF ACCUMULATOR_^1_%EJT_]_^1_%SPC 3_^1*_]_^1******_,C O M P L E M E N T_^1*_]_^1FCOM_!LDA- C,I_^1_%SAN ACMOK_^1_%JMP* ARG0_^1ACMOK SET A_,CHANGE SIGN_^1_%EOR- SIGN,I_€€^1_%STA- SIGN,I_^1_%JMP* ANXT_^1ALZERO NUM 0_^1*_FGET ADDRESS OF NEXT OPERAND_^1****** *** GET ADDRESS OF NEXT OPERAND_^1*_*15 BIT ADDRESSING ARTIHMETIC IS BEING USED._^1*_*REFER TO E006, APENDIX ON 15 BIT ARITHMETIC_^1OPERND 0_"0_^1_%LDQ- P,I_^1_%LDA* (ALZERO),Q_^1DIRECT STA- F,I_^1_%LDA- RELADR,I_(IF RELATIVE ADDRESS MODE._^1_%SAZ ABSDIR-*-1_%GO TO ABSOLUTE DIRECT_^1_%LDA- F,€€I_M**MSOS4.0**_^1_%ALS 1_,SIGN EXTEND RELATIVE ADDRESS_%**MSOS4.0**_^1_%ARS 1_O**MSOS4.0**_^1_%STA- F,I_M**MSOS4.0**_^1A5_#ADQ- F,I_^1_%JMP* OPADR_^1ABSDIR LDQ- F,I_^1OPADR ADQ- INDEX,I_)EFFECTIVE ADDRESS -1 IN Q_^1_%RAO- P,I_-MOVE PSEUDO PROGRAM COUNTER_^1_%JMP* (OPERND)_(RETURN EFFECTIVE ADR -1 IN Q_^1CARRY 0_"0_^1*_8THIS ROUTINE ASSUMES THAT A SUM IS CONTAINED_^1*_8WITHIN TH€€E QA REGISTER. A CHECK IS MADE FOR A_^1*_8CARRY IN THE A AND Q REGISTERS AND THE CARRY_^1*_8BITS ARE ADDED._^1_%SAP SKP-*-1_%CHECK FOR CARRY IN A REGISTER_^1_%INQ 1_,YES - ADD IN CARRY BIT_^1_%AND- LPMSK+15_$MASK OFF CARRY BIT IN A REGISTER_^1_%SQP SKP-*-1_%CHECK FOR CARRY IN Q REGISTER_^1_%RAO- G,I_*YES - ADD IN CARRY BIT_^1_%LLS 16_+EXCHANGE A AND Q REGISTERS_^1_%AND- LPMSK+1€€5_$MASK OFF CARRY BIT IN Q REGISTER_^1_%LLS 16_+RESTORE Q AND A REGISTERS_^1SKP_"JMP* (CARRY)_%NO - RETURN WITH Q AND A REGISTER IN PROPER_^1*_=FORMAT_^1_%EJT_]_^1_%SPC 3_^1*_]_^1*****_-M U L T I P L Y_^1*_]_^1*_*FLOATING POINT MULTIPLY OF F*G_^1*_]_^1DFMPY RTJ* OPERND_^1_%RTJ FLTSET_*STEPS 1,2,3 AND 4 OF MPY OR DIV_^1*_*IF F IS NEG., CHANGE SIGN._^1_%SAZ JMPOUT-*-1_^1_%SAP F€€LT1-*-1_^1_%SET A_^1_%EOR- SIGN,I_^1_%STA- SIGN,I_^1*_]_^1*_*STEP 5.A._^1FLT1_!LDA- C,I_^1_%SAN NOZERO-*-1_^1JMPOUT JMP* ARG0_^1NOZERO MUI- A,I_^1_%LLS 1_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- TEMGP2,I_$CA(LSB)_^1_%STQ- G,I_*CA(MSB)_^1_%LDA- D,I_^1_%MUI- A,I_^1_%LLS 1_^1_%SAP 1_,ROUND_^1_%INQ 1_^1_%STQ- TEMPQ,I_%DA(MSB) ROUNDED_^1_%LDA- CI,I_^1_%MUI- AI,I_^1_%LLS 1_^1_€€%SAP 1_^1_%INQ 1_,ROUND_^1_%STQ- F,I_*CI*AI(MSB) ROUNDED_^1_%LDA- CI,I_^1_%MUI- A,I_^1_%LLS 1_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- F+1,I_(CI*A (LSB)_^1_%STQ- G+1,I_(CI*A (MSB)_^1_%LDA- TEMPQ,I_%DA (MSB)_^1_%ADD- F,I_*CIAI (MSB)_^1_%RTJ* CARRY_(FORMAT QA REGISTERS_^1_%STA- F+2,I_(CIAI(MSB)+DA(MSB) IN_^1_%STQ- G+1,I_(CIA'(MSB)_^1_%LDA- C,I_^1_%MUI- B,I_^1_%LLS 1_^1_%SAP €€1_^1_%INQ 1_,ROUND_^1_%TRQ A_,CB(MSB)_^1_%LDQ- G+1,I_(CIA'(MSB)_^1_%ADD- F+2,I_(DA+CIAI+CB_^1_%RTJ* CARRY_(DA+CIAI+CB IN A + CIA'' IN Q_^1_%ADD- F+1,I_(CI*A (LSB)_^1_%RTJ* CARRY_(DA+CIAI+CB(MSB)+CIA(LSB) INA + CIA'''(MSB)IN Q_^1_%STQ- G+1,I_(CIA''' (MSB)_^1_%STA- G+2,I_(DA+CIAI+CB(MSB) + CIA(LSB)_^1_%LDA- C,I_^1_%MUI- AI,I_^1_%LLS 1_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_!CA*I IN Q€€A REGISTERS_^1_%ADD- G+2,I_^1_%RTJ* CARRY_^1_%STA- G+2,I_(LSB OF PRODUCT_^1*_8DA+CIAI+CB + CIA(LSB) + CAI(LSB)_^1_%TRQ A_,CAI' (MSB)_^1_%ADD- G+1,I_(CIA'''(MSB)_^1_%SAP SKP1-*-1_$IS THERE A CARRY_^1_%RAO- G,I_*ADD IN CARRY BIT-YES_^1_%AND- LPMSK+15_$CAI'+CIA'''_^1SKP1_!ADD- TEMGP2,I_$CAI'+CIA'''+CA(LSB)_^1_%SAP SKP2-*-1_^1_%RAO- G,I_*MSB OF PRODUCT_^1_%AND- LPMSK+15_^1SKP2_!STA-€€ G+1,I_(ISB OF PRODUCT_^1SHIFTA LDA- G+2,I_(THIS LOGIC SQUEEZES OUT_^1_%ALS 1_,THE CARRY SLOTS IN_^1_%LDQ- G+1,I_(CELLS G+1 AND G+2_^1_%LLS 1_^1_%STA- G+2,I_^1_%STQ- G+1,I_^1_%EJT_]_^1NRMLIZ ENQ 0_^1_%STQ- SHIFCT,I_^1_%LDA- G+2,I_^1_%STA- F+2,I_^1_%LDA- G+1,I_^1_%STA- F+1,I_^1_%LDQ- G,I_^1STEP6 LDA- F+1,I_^1_%LLS 1_^1_%STQ- F,I_*(MSB)_^1_%LDQ- F+1,I_^1_%LDA- F+2,I_^1_%LLS 1_^€€1_%AND- ZROBIT_'$FFFE_^1_%STQ- F+1,I_((ISB)_^1_%STA- F+2,I_((LSB)_^1_%LDQ- F,I_^1_%SQM STEP6A-*-1_^1_%RAO- SHIFCT,I_^1_%JMP* STEP6_^1H7F80 NUM $7F80_^1STEP6A LDA- F+1,I_^1_%LLS 31_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- G+1,I_(ISB_!0,15_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- G,I_*MSB_!0,15_^1_%LDQ- F+1,I_^1_%LDA- F+2,I_^1_%LRS 3_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- G+2€€,I_(LSB_!0,9_^1_%LDQ- G+1,I_^1_%INA $20_*ROUND TO 39 BITS_^1_%SAM 1_^1_%JMP* STEP6B_^1_%INQ 1_,CARRY INTO ISB_^1_%AND- LPMSK+15_$$7FFF_^1_%SQP STEP6B-*-1_^1_%RAO- G,I_*CARRY INTO MSB_^1_%LLS 16_^1_%AND- LPMSK+15_$$7FFF MASK OFF TOP BIT ISB_^1_%LLS 16_^1_%STQ- G+1,I_(SAVE ISB_^1_%STA- G+2,I_(SAVE LSB_^1_%LDA- G,I_^1_%SAP STP6-*-1_$CHECK FOR CARRY IN ISB_^1_%RAO- DELTA,I_%SHI€€FT RIGHT BY ONE_^1_%ALS 15_+NORMALIZE FOR ROUNDING OF 7FFF,7FFF,7F_!COEF._^1_%STA- G,I_^1_%LDQ- G+1,I_(RESTORE ISB_^1STP6_!LDA- G+2,I_(RESTORE LSB_^1STEP6B AND H7FC0_^1_%STQ- CI,I_)SAVE ISB IN C_^1_%STA- D,I_*SAVE LSB IN D_^1_%LDA- G,I_^1_%STA- C,I_*SAVE MSB IN C_^1_%LDA- DELTA,I_^1_%ADD- BETA,I_^1COMBIN SUB- SHIFCT,I_^1_%STA- DELTA,I_^1_%TRA Q_^1_%ARS 7_^1_%INA 0_^1_%SAZ TES€€TDV-*-1_^1_%JMP OVFUNF_^1*_FUNDERFLOW IF Q=-,A=0._^1TESTDV LDA- MULDIV,I_$MULTIPLY/DIVIDE FLAG_^1_%SUB- ONEBIT_'$0001_^1_%SAZ DIV-*-1_^1_%JMP NXTOPC_'GO GET NEXT OPCODE_^1DIV_"LDA- C,I_*PLACE_!C, CI, D, AND DELTA INTO_^1_%STA- A,I_2A, AI, B AND BETA_^1_%LDA- CI,I_^1_%STA- AI,I_^1_%LDA- D,I_^1_%STA- B,I_^1_%LDA- DELTA,I_^1_%STA- BETA,I_^1_%LDA- T1,I_)RESTORE C, CI, D, AND DELTA_€€^1_%STA- C,I_^1_%LDA- T2,I_^1_%STA- CI,I_^1_%LDA- T3,I_^1_%STA- D,I_^1_%LDA- ONEBIT_'$0001_^1_%STA- DELTA,I_%SET DELTA TO 1 FOR MULTIPLY_^1_%LDA- ZERO_)CLEAR_^1_%STA- MULDIV,I_$MULTIPLY/DIVIDE FLAG_^1_%JMP FLT1_^1_%EJT_]_^1_%SPC 3_^1*_]_^1*****_-D I V I D E_^1*_]_^1DFDIV RTJ OPERND_'GET NEXT OPERAND ADDRESS_^1_%RTJ* FLTSET_'STEPS 1, 2, 3, AND 4 OF MPY OR DIV. AND NORMAL_^1*_8SE€€T A,AI,B,BETA,F,F+1,F+2_^1_%SAN A6-*-1_^1_%JMP DIVZER_'IF F IS ZERO, GO TO DIVZER_^1A6_#SAP FLT2-*-1_^1_%SET A_^1_%EOR- SIGN,I_^1_%STA- SIGN,I_^1FLT2_!LDA- A,I_^1_%SUB- ONEBIT+14_#$4000_^1_%SAZ PLUS1-*-1_#IS FIRST WORD OF DENOMINATOR A + OR - 1_^1_%JMP* FLT3_)NO_^1PLUS1 LDA- F+1,I_(YES_^1_%SAZ PLUS12-*-1_^1_%JMP* FLT3_^1PLUS12 LDA- F+2,I_^1_%SAZ PLUS13-*-1_^1_%JMP* FLT3_^1P€€LUS13 LDA- BETA,I_^1_%SUB- ONEBIT_^1_%SAZ EXPO1-*-1_^1_%JMP* FLT3_^1EXPO1 JMP NXTOPC_'DENOMINATOR IS A +1.0--GET NEXT OPCODE_^1FLT3_!LDA- ONEBIT+13_#$2000_^1_%STA- SHIFCT,I_$TEMP STORAGE--MSB_^1_%LDA- BETA,I_^1_%TCA A_^1_%INA 1_^1_%STA- BETA,I_^1_%LDA- A,I_^1_%SAN FD2-*-1_%IF A .EQ 0_!GO TO ARG0_^1_%JMP ARG0_^1FD2_"LDA- AI,I_^1_%INA 0_^1_%MUI- AI,I_)-AI*AI IN QA REG_^1_%DVI€€- A,I_*(AI*AI)/A IN A REG. Q REG. CONTAINS REMAINDER_^1*_8NO ROUNDING IS REQUIRED ON LSB_^1_%SAM FD3-*-1_^1_%TCA A_,POS. A REG._^1_%ADD- B,I_*B-(AI*AI)/A_^1_%JMP* NORM_^1FD3_"AND- LPMSK+15_$NEG. A REG._#$7FFF_^1_%SUB- B,I_*(-B+(AI*AI)/A - $8000)_^1_%SAP FD4-*-1_^1_%ADD- ONEBIT+15_#NEG. A REG. $8000_^1_%TCA A_,B-(AI*AI)/A_^1_%JMP* NORM_^1FD4_"LDQ- AI,I_)POS. A REG._^1_%INQ €€-1_^1_%STQ- AI,I_)AI=AI-1_^1_%SAZ NORM-*-1_$A REG. = 0_^1_%TCA A_,A .NE. 0 B-(AI*AI)/A_^1NORM_!LDQ- AI,I_^1*_8FORM AI**2**-15 + (B-(AI*AI)/A)*2**-30_^1_%SAP STEP5E-*-1_"IF LOWER ACCUM IS NEGATIVE_^1_%INQ -1_+DECREMENT UPPER BY 1_^1_%ADD- ONEBIT+15_#$8000 - AND INCREMENT LOWER BY 1 TO PUT END_^1_%STA- TEMPQ,I_%AROUND BORROW INTO PROPER POSITION_^1_%SQP STEP5E-*-1_^1_%LDA- LPMS€€K+13_$DECREMENT MSB BY 1_#$1FFF_^1_%STA- SHIFCT,I_$TEMP STORAGE_^1_%LDQ- LPMSK+15_$$7FFF_^1_%LDA- TEMPQ,I_%Q-A CONTAINS AI*2**-15+(B-AI*AI/A)*2**-30_^1STEP5E ALS 1_^1_%LRS 1_^1_%DVI- A,I_^1_%INQ 0_^1_%STA- TEMPQ,I_%1/A(AI*2**-15+(B-AI*AI/A)*2**-30_)ISB_^1_%CLR A_^1_%LRS 1_^1_%DVI- A,I_^1_%LDQ- TEMPQ,I_PISB_^1_%ALS 1_^1_%LRS 2_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- TEMG€€P2,I_OLSB_^1_%TRQ A_^1_%AND- LPMSK+14_^1_%STA- TEMPQ,I_PISB_^1_%SAZ TST1-*-1_$IS ISB ZERO_^1_%JMP* CPROC_(NO_^1TST1_!LDA- TEMGP2,I_$YES_!LSB_^1_%SAZ DONE-*-1_$IS LSB ZERO_^1CPROC LDQ- SHIFCT,I_$NO_GMSB_^1_%LDA- TEMPQ,I_PISB_^1_%TCA A_^1_%INQ -1_^1_%STQ- SHIFCT,I_^1_%ADD- ONEBIT+15_#$8000_^1_%STA- TEMPQ,I_^1_%LDQ- TEMGP2,I_^1_%SQZ DONE-*-1_$IS LSB ZERO_^1_%INA -1_^1*_*Q REGI€€STER CONTAINS MSB_^1_%STA- TEMPQ,I_PISB_^1_%LDA- TEMGP2,I_^1_%TCA A_^1_%ADD- ONEBIT+15_#$8000_^1_%STA- TEMGP2,I_OLSB_^1DONE_!LDQ- SHIFCT,I_^1_%LDA- TEMPQ,I_%Q REG CONTAINS MSB_7ISB_^1_%ALS 1_^1_%LRS 1_^1_%DVI- A,I_^1_%STA- G,I_*MSB RESULT_^1_%LDA- TEMGP2,I_OLSB_^1_%ALS 1_^1_%LRS 1_^1_%DVI- A,I_^1_%STA- G+1,I_(ISB RESULT_^1_%CLR A_^1_%LRS 1_^1_%DVI- A,I_^1_%STA- G+2,I_(LSB RE€€SULT_^1_%LDA- C,I_^1_%STA- T1,I_^1_%LDA- CI,I_^1_%STA- T2,I_^1_%LDA- D,I_^1_%STA- T3,I_^1_%LDA- ONEBIT_'$0001_^1_%STA- MULDIV,I_$MULTIPLY/DIVIDE FLAG_^1_%JMP SHIFTA_'SQUEEZE OUT CARRY SLOTS IN G+1 AND G+2_^1*_*END OF FDIV_^1_%EJT_]_^1FLTSET 0_"0_^1_%LDA- 3,Q_^1_%STA- F+2,I_^1_%STA- TEMGP2,I_$F+2_^1_%LDA- 2,Q_^1_%STA- F+1,I_^1_%LDA- 1,Q_^1_%STA- F,I_^1_%LDQ- F+1,I_^1_%STQ- TEMPQ,I_€€%F+1_^1_%SAP STEP2A-*-1_^1_%LDQ- TEMGP2,I_^1_%TCQ Q_^1_%STQ- TEMGP2,I_$COMPLEMENT F+2_^1_%LDQ- TEMPQ,I_^1_%TCQ Q_^1_%STQ- TEMPQ,I_%COMPLEMENT F+1_^1_%TCA A_^1STEP2A STA- A,I_^1*_*IF F IS ZERO, GO TO ARGFO (SET BETA,A,B=0)_^1_%SAN A9-*-1_^1_%JMP* ARGF0_^1A9_#ALS 1_^1_%EOR- ONEBIT+15_#$8000_^1_%ARS 8_^1_%INA 0_^1ARGF0 STA- BETA,I_^1_%LDA- A,I_^1_%LDQ- TEMPQ,I_%F+1_^1_%LLS 8€€_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- A,I_^1_%LDA- TEMGP2,I_$F+2_^1_%LDQ- TEMPQ,I_%F+1_^1_%LLS 23_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- AI,I_^1_%LLS 15_^1_%AND* RSLTB_($7FC0_^1_%STA- B,I_^1_%LDA- F,I_^1_%JMP* (FLTSET)_^1_%EJT_]_^1*_$DIVIDE CHECK WHEN DIVIDE BY ZERO_^1DIVZER ENQ 1_^1_%JMP* SETERR_^1OVFUNF TRQ A_:OVERFLOW OR UNDERFLOW_^1*_*OVERFLOW_^1_%ENQ 0_^1_%SAP SETERR-*-1_^1*_*UN€€DERFLOW_^1_%ENQ 2_^1SETERR LDA- ERRORS,I_^1_%AND* ERASE,Q_^1_%ADD* SETBIT,Q_^1_%STA- ERRORS,I_^1_%LDA* RSLTA,Q_4SET F.P. ACCUMULATOR_^1_%STA- C,I_^1_%LDA* RSLTAI,Q_^1_%STA- CI,I_^1_%LDA* RSLTB,Q_^1_%STA- D,I_^1_%LDA* RSLTEX,Q_^1_%STA- DELTA,I_^1NXTOP3 JMP NXTOPC_^1*_*OVERFLOW, UNDERFLOW_^1RSLTB NUM $7FC0,$7FC0,$0000_^1RSLTAI NUM $7FFF,$7FFF,$0000_^1RSLTA NUM $7FFF,$7FFF,$400€€0_^1*_8EXPONENTS_^1RSLTEX NUM $7F,$7F,-$7F_^1ERASE NUM $7FFF,$BFFF,$DFFF_^1SETBIT NUM $8000,$4000,$2000_^1H807F NUM $807F_^1_%EJT_]_^1_%SPC 3_^1*_]_^1*****_-S U B T R A C T_^1*_]_^1*_*FLOATING POINT SUBTRACT G-F_^1DFSUB RTJ OPERND_*GET NEXT OPERAND ADDRESS_^1_%LDA- 3,Q_^1_%TCA A_^1_%STA- TEMGP2,I_$COMPLEMENT F+2_^1_%LDA- 1,Q_^1_%LDQ- 2,Q_^1_%TCA A_,CHANGE THE SIGN BDFORE€€_^1_%TCQ Q_,ENTERING YHE ADD ROUNTINE_^1_%JMP* FADD2_^1_%EJT_]_^1*_]_^1_%SPC 3_^1*_]_^1*****_-A D D I T I O N_^1*_]_^1*_*FLOATING POINT ADD G+F, RESULT IN G._^1DFADD RTJ OPERND_^1_%LDA- 3,Q_^1_%STA- TEMGP2,I_$F+2_^1_%LDA- 1,Q_^1_%LDQ- 2,Q_^1FADD2 STQ- F+1,I_^1_%STA- F,I_^1_%LDQ- TEMGP2,I_$F+2_^1_%STQ- F+2,I_^1_%SAP A10-*-1_^1_%TCA A_^1A10_"ALS 1_^1_%SAN 1_^1_%JMP* NXTOP3_$€€ADD 0, THUS JMP OUT_^1_%EOR- ONEBIT+15_#$8000_^1_%ARS 8_^1_%INA 0_,EXTRACT BETA_^1_%STA- BETA,I_^1_%LDA- F,I_^1_%LDQ- F+1,I_^1_%AND* H807F_(GET RID OF EXPONENT_^1_%SAP A11-*-1_^1_%ADD H7F80_($7F80-EXTEND SIGN_^1A11_"LLS 8_5STORE A AND B_^1_%STA- A,I_*A=S,15MSB_^1_%TRQ A_^1_%AND- LPMSK+8_%$00FF_^1_%STA- TEMPQ,I_%TEMPQ=0'S FOLLOWED BY 8 SIGN BITS RT JUSTIFIED_^1_%LDA- F+2,I_^1_€€%LDQ- F+1,I_^1_%LLS 8_^1_%AND- LPMSK+24_$$FF00_^1_%EOR- TEMPQ,I_^1_%STQ- AI,I_)AI=16ISB_^1_%STA- B,I_*B=8LSB,8 SIGN BITS_^1_%LDA- D,I_^1_%LDQ- CI,I_^1_%ALS 1_^1_%LLS 1_^1_%STQ- CI,I_)REMOVE BIT 15 FROM BOTH CI AND D_^1_%STA- D,I_^1_%LDQ- SIGN,I_^1_%SQP FADD21-*-1_"IF SIGN IS NEGATIVE_^1_%TCA A_,COMPLEMENT C, CI, AND D_^1_%STA- D,I_^1_%LDA- CI,I_^1_%TCA A_^1_%STA- CI,I_^1_%LDA€€- C,I_^1_%TCA A_^1_%STA- C,I_^1FADD21 LDA- C,I_^1_%SAN FA22-*-1_$IF ACCUM IS ZERO, USE SECOND VALUE AS ANSWER_^1_%LDA- BETA,I_^1_%STA- DELTA,I_^1_%LDA- B,I_^1_%STA- TEMPQ,I_^1_%LDA- AI,I_^1_%STA- CI,I_^1_%LDQ- A,I_^1_%JMP STOCD_^1FA22_!LDA- DELTA,I_%FIRST WORD IS NOT ZERO_^1_%SUB- BETA,I_^1_%STA- TEMPQ,I_%TEMPQ=DELTA-BETA_^1*_]_^1*_*IF F .GE. G_!GO TO ADD STEP3 (ADDS3)_^1*_]_^1_€€%SAM 1_^1_%JMP* ADDS3_^1*_*IF F .LT. G_!EXCHANGE EXPONENTS_^1_%LDA- DELTA,I_^1_%LDQ- BETA,I_^1_%STA- BETA,I_'BETA=DELTA_^1_%STQ- DELTA,I_%DELTA=BETA_^1*_]_^1_%LDA- A,I_^1_%LDQ- C,I_^1_%STA- C,I_*C=A_^1_%STQ- A,I_*A=C_^1_%LDA- A+1,I_^1_%LDQ- C+1,I_^1_%STA- C+1,I_(C+1=A+1_^1_%STQ- A+1,I_(A+1=C+1_^1_%LDA- A+2,I_^1_%LDQ- C+2,I_^1_%STA- C+2,I_(C+2=A+2_^1_%STQ- A+2,I_(A+2=C+2_^1*_8C, CI€€, D ARE NOW THE LARGER NUMBER_^1*_8A, AI, B ARE NOW THE SMALLER NUMBER_^1_%LDA- DELTA,I_^1_%SUB- BETA,I_^1_%STA- TEMPQ,I_%TEMPQ=DELTA-BETA_^1ADDS3 TRA Q_,Q=DELTA-BETA_^1_%INQ -45_^1*_*IF SHIFT .GE. 45_^1_%SQM AS30-*-1_^1*_*LEAVE THE LARGER NUMBER IN THE ACCUMULATOR_^1_%LDA- D,I_^1_%STA- TEMPQ,I_^1_%LDA- CI,I_^1_%LDQ- C,I_^1_%JMP STOCD_^1LRSINS LRS 0_^1H7FF0 NUM $7FF0_^1*_*S€€TEP3_^1AS30_!LDQ- CI,I_^1_%LDA- D,I_^1_%LRS 4_^1_%AND* H7FF0_($7FF0_^1_%LDQ- C,I_^1_%SQP L1-*-1_^1_%EOR- LPMSK+4_%$000F_^1L1_#STA- D,I_*D=0,11LSB,4 SIGN BITS_^1_%LDA- CI,I_^1_%LDQ- C,I_^1_%LRS 2_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- CI,I_)CI=0,15ISB_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- C,I_*C=0SS,13MSB_^1AS31_!LDQ- AI,I_^1_%LDA- B,I_^1_%LRS 2_^1_%STA- B,I_*B=10LS€€B,6SIGN BITS_^1_%LDQ- A,I_^1_%LDA- AI,I_^1_%LRS 2_^1_%STQ- A,I_*A=SSS,13MSB_^1_%STA- AI,I_)AI=16ISB_^1*_*STEP 4._^1*_*SHIFT SMALLER NUMBER RIGHT (ABS.(BETA-DELTA)),_^1*_*AND SET THE SIGN OF MSB TO POSITIVE_^1*_*SHIFT ISB RIGHT 1, AND SET THE SIGN OF ISB POSITIVE_^1*_*SHIFT LSB RIGHT 1, AND SET THE SIGN OF LSB POSITIVE._^1*_*CLEAR THE CARRY TO BIT 15 AND ADD 1 TO MSB_^1*_*POSITION €€THE SMALLER NUMBER_^1*_]_^1_%LDA- TEMPQ,I_^1_%SUB- LPMSK+4_%DELTA-BETA-15_^1_%TRA Q_^1_%ADQ* LRSINS_^1_%STQ* LRS2_^1_%SAM 1_,IF ((DELTA-BETA) .GE. 15) GO TO GE15_^1_%JMP* GE15_^1_%LDA- TEMPQ,I_^1_%ADD* LRSINS_^1_%STA* LRS1_^1_%ADD- ONEBIT_'DELTA-BETA+1_^1_%STA* LRS_^1_%LDA- B,I_*DELTA-BETA .LT. 15_^1_%LDQ- AI,I_^1LRS_"LRS 0_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- B,I_^1_%LD€€Q- A,I_^1_%LDA- AI,I_^1LRS1_!LRS 0_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- AI,I_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- A,I_^1_%JMP* STEP5_^1GE15_!LDA- AI,I_)DELTA-BETA .GE. 15_^1_%LDQ- A,I_^1LRS2_!LRS 0_^1_%ARS 1_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- B,I_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- AI,I_^1_%LDA- A,I_^1_%ARS 13_^1_%AND- LPMSK+15_$$7FFF_^1_%STA- A,I_^1*_]_€€^1*_*STEP 5_^1*_]_^1STEP5 CLR Q_^1_%LDA- D,I_^1_%ADD- B,I_^1_%STA- D,I_^1_%SAP AS6-*-1_^1_%AND- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- D,I_*D=B+D_^1*_*STEP6_^1_%ENQ 1_^1AS6_"ADQ- CI,I_^1_%STQ- CI,I_^1_%CLR A_^1_%SQP AS60-*-1_^1_%TRQ A_^1_%AND- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- CI,I_^1_%ENA 1_^1AS60_!STA- TEMPQ,I_%TEMPQ = COUNT FOR CARRYS INTO MSB_^1_%LD€€A- CI,I_^1_%ADD- AI,I_^1_%STA- CI,I_^1_%SAP AS601-*-1_^1_%AND- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- CI,I_^1_%RAO- TEMPQ,I_%TEMPQ=TEMPQ+1_^1*_*STEP7_^1AS601 LDQ- TEMPQ,I_^1_%ADQ- A,I_^1_%ADQ- C,I_^1_%SQP AS61-*-1_^1*_*SUBTRACT END AROUND CARRY-INCREASE LSB BY 1_^1_%ADQ- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%LDA- D,I_^1_%INA 1_^1_%STA- D,I_^1_%SAP AS61-*-1_^1_%AND-€€ LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- D,I_^1_%LDA- CI,I_^1_%INA 1_^1_%STA- CI,I_^1_%SAP AS61-*-1_^1_%AND- LPMSK+15_$$7FFF - CLEAR THE CARRY BIT_^1_%STA- CI,I_^1_%INQ 1_,INCREASE MSB BY 1 -_^1AS61_!STQ- C,I_*C = 0VS,13MSB_^1_%LDA- D,I_*SQUEEZE OUT LEADING ZERO BITS_^1_%LDQ- CI,I_^1_%ALS 1_^1_%LLS 1_^1_%STA- D,I_*D = 10LSB,6 SIGN BITS_^1_%STQ- CI,I_)CI = 16ISB_^1_%LDA-€€ C,I_^1_%ALS 1_O**FTN 3.1**_^1_%SAP T11-*-1_^1_%LDA- D,I_^1_%EOR- LPMSK+2_%$0003_^1_%STA- D,I_*REPLACE SIGN BITS_^1*_]_^1*_*IF RESULT IS MINUS ZERO, GO TO ARGO_^1*_*MINUS ZERO IS Q=7FFF, A=FFFE_^1*_]_^1T11_"LDQ- C,I_^1_%LDA- CI,I_^1_%ADQ- ONEBIT+15_#$8000_^1_%SQN AS62-*-1_^1_%INA 0_^1_%SAN AS62-*-1_^1_%LDA- D,I_^1_%INA 0_^1_%SAN AS62-*-1_^1_%JMP ARG0_^1*_]_^1*_*STEP 7_^1*_*€€SAVE SIGN S AND OVERFLOW V IN BITS 1 AND 0_^1*_*IF S .EQ. V , THEN V IS SIGN EXTENSION_^1*_*IF S .NE. V , THEN RESULT OVERFLOWED INTO V_^1*_]_^1AS62_!QLS 1_^1_%LRS 15_^1_%EAQ Q_,CHECK IF SIGN AND OVERFLOW EQUAL(SAME=0,DIF=1)_^1_%LDA- CI,I_^1_%SQM SHFT1-*-1_^1SHFT2 LDQ- C,I_*S=V, SIGN EXTENSION_^1_%STQ- TEMPQ,I_%TEMPORARY STORAGE FOR C_^1_%LLS 2_^1_%STQ- C,I_^1_%LDQ- CI,I_^1_%€€LDA- D,I_^1_%LLS 2_^1_%STQ- CI,I_^1_%LDQ- TEMPQ,I_^1_%LDA- D,I_^1_%LLS 2_^1_%JMP* RESUME_^1SHFT1 RAO- DELTA,I_%S=V, OVERFLOW INTO V_"DELTA=DELTA+1_^1_%LDQ- C,I_^1_%STQ- TEMPQ,I_%TEMPORARY STORAGE FOR C_^1_%LLS 1_^1_%STQ- C,I_^1_%LDQ- CI,I_^1_%LDA- D,I_^1_%LLS 1_^1_%STQ- CI,I_^1_%LDQ- TEMPQ,I_^1_%LDA- D,I_^1_%LLS 1_^1RESUME STA- TEMPQ,I_%THIRD WORD_^1_%LDA- CI,I_^1_%LDQ- C,I_^€€1*_$SAVE THE SIGN AND MAGNITUDE OF THE RESULTS_^1STOCD STQ- C,I_*C=A AND B IN A REG_^1_%SQP POS-*-1_^1_%TCA A_,COMPLEMENT AI OR CI_^1_%TCQ Q_,COMPLEMENT A OR C_^1_%STQ- C,I_^1_%STA- CI,I_)KEEP IN A REG._^1_%LDA- TEMPQ,I_%THIRD WORD_^1_%TCA A_^1_%AND- LPMSK+18_$$FFFC_^1_%STA- TEMPQ,I_%THIRD WORD_^1_%LDA- CI,I_)RELOAD A REG._^1_%ENQ -1_^1_%JMP* STOSGN_^1*_*POSITIVE, SET SIGN=+1€€_^1POS_"ENQ 1_^1STOSGN STQ- SIGN,I_^1_%ENQ 0_^1_%STQ- BETA,I_^1_%LDQ- C,I_*RESTORE Q_^1_%SQN NORMAL-*-1_^1_%SAN NORMAL-*-1_^1_%LDA- TEMPQ,I_%THIRD WORD_^1_%SAN NORMAL-*-1_^1_%JMP ARG0_)RESULT IS ZERO_^1NORMAL STQ- G,I_^1_%LDA- CI,I_^1_%STA- G+1,I_^1_%LDA- TEMPQ,I_%THIRD WORD_^1_%STA- D,I_*THIRD WORD_^1_%STA- G+2,I_^1_%JMP NRMLIZ_^1_%SPC 3_^1*_]_^1_%EQU DP01(*/96)_^1_%EQU €DDP02(DP01+1)_^1_%EQU DP03(DP02*96)_^1_%BSS (DP03-*)_^1_%END_]_^__DPECONV CSY/ I12 P€1_%NAM ECONV_(DECK-ID I12 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,************************************************_^1*_,*_M*_^1*_,*_#SUBROUTINE TO CONVERT VALUE TO FLOAT_#*_^1*_,*_M*_^1*_,************************************************_^1*_]_^1*_]_^1*****_-CALLING SEQUENCE :_^1*_]_^1*_8RTJ ECONV_^1*_8ADC BUFFER-*_#(POSITIVE C€€OUNTS)_^1*_]_^1*_]_^1*****_,"BUFFER" ASSIGNMENT :_^1*_]_^1*_4WORD 1 NO. OF DIGITS_^1*_4WORD 2 NO. OF INTEGER_^1*_93 NO. OF FRACTIONAL NUMBERS_^1*_94 SIGN (0=+, 1=-)_^1*_95 'E'/'D' (0=UNUSED, 2='E', 1='D')_^1*_96 EXPONENT VALUE_^1*_97 INPUT DIGIT (BINARY)_^1*_98_"._"._"._#._^1*_9._"._"._"._#._^1*_>._"._"._#._^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%ENT ECONV_(F-€€FORMAT OR E-FORMAT CONVERSION_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT* LAZY1_^1_%EXT* FLOT,FLOAT,Q8QFIX_^1_%SPC 1_^1*_1" E Q U "_$T A B L E_^1_%EQU LPMSK(2)_^1_%EQU ZERO($22)_^1_%EQU NO10($46)_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1ECONV NOP 0_,ENTRY_^1_%LDA* (ECONV)_^1_%ADD* ECONV_^1_%STA* LAZ_^1_%RAO* ECONV_(SET EXIT_^1_%SQN E€€TOI_)SKIP ON FLOAT TO INTEGER_^1_%RTJ LAZY1_^1LAZ_"NUM 0_^1LAZEXT JMP* (ECONV)_%RETURN_^1*_]_^1_%SPC 1_^1*_]_^1*_]_^1*_,*****************************************************_^1*_,*_R*_^1*_,*_#ROUTINE TO CONVERT SINGLE PRECISION VALUE_#*_^1*_,*_#(FLOATING POINT) INTO E-FORMAT (INTEGER)_$*_^1*_,*_R*_^1*_,*****************************************************_^1*_]_^1*_]_^1*_]_^1*_]€€_^1*_]_^1*****_-LBUFER' ASSIGNMENTS :_^1*_1WORDS 01-02 FLOATING POINT VALUE_^1*_;03 SIGN_^1*_804-05 ' 0. '_^1*_806-12 7 DIGITS_^1*_;13 ' E '_^1*_;14 SIGN_^1*_815-16 EXPONENT_^1*_]_^1*_]_^1*_]_^1*_]_^1_%SPC 1_^1*_1E N T R Y_$N A M E_^1_%SPC 3_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1ETOI_!STQ* QSAVE_(SAVE Q-REGISTER_^1P1_#STA* CALPAR_^1_%ST€€A- I_^1_%LDA* ONE_^1_%STA* B_^1_%LDA* ONE+1_^1_%STA* B+1_^1_%SPC 1_^1*****_-FILL BUFFER WITH +0.0000000E+00_^1*_]_^1_%ENQ 3_^1FILL1 ENA $30_^1_%STA- (ZERO),B_^1_%INQ 1_^1_%TRQ A_^1_%INA -16_^1_%SAZ FILSIG_^1_%JMP* FILL1_^1*_]_^1FILSIG ENA $2B_*INSERT '+'_^1_%STA- 2,I_^1_%STA- 13,I_^1_%ENA $2E_*INSERT '.'_^1_%STA- 4,I_^1_%ENA $45_*INSERT 'E'_^1_%STA- 12,I_^1_%SPC 2_^1€€*_]_^1******_,CHECK IF VALUE IS NEGATIVE_^1*_]_^1_%LDA- 1,I_^1_%STA* VALUE+1_^1_%LDA- (ZERO),I_^1_%STA* VALUE_^1_%SAM COMVAL_'TO COMPLEMENT VALUE_^1_%SAN LESS1_^1RETURN LDQ* QSAVE_(RESTORE Q-REGISTER_^1_%JMP* LAZEXT_^1_%SPC 1_^1*_]_^1QSAVE NUM 0_^1*_1COMPLEMENT VALUE_^1COMVAL INA 0_,CHECK FOR $FFFF_^1_%SAZ TOSTAR_^1_%RTJ FLOT_^1_%NUM $5B7D_(MODE, LOAD, COMPLEMENT, STORE€€_^1_%ADC VALUE-*_^1_%ADC VALUE-*_^1_%NUM $4000_(END OF SEQUENCE_^1_%ENA $2D_*INSERT '-'_^1_%ENQ 2_^1_%STA* (CALPAR),Q_^1_%SPC 1_^1****_.CHECK FI VALUE LESS THAN ONE_^1LESS1 LDA* VALUE_((ONE IN FLOATING PT. = $40C0,0000)_^1_%SUB- LPMSK+15_$CHECK FOR $7FFF_^1_%SAN NORMAL_'NO, SKIP_^1TOSTAR JMP* STAR_)TO FILL BUFFER WITH '*'_^1NORMAL ADD- LPMSK+15_^1_%SUB* ONE_^1_%SAZ EX€€T1_^1_%SAP GRT1_)GREATER THAN 1, SKIP_^1_%JMP* SMAL1_(GO, VALUE LESS THAN 1.0_^1EXT1_!LDA* VALUE+1_^1_%SAN GRT1_)GREATER THAN 1, GO_^1_%SPC 1_^1*_1FOR VALUE = 1.0_^1_%LDQ* CALPAR_^1_%ENA $31_*SET UP +0.1000000E+01_^1_%STA- 5,Q_^1_%STA- 15,Q_^1_%JMP* RETURN_'TO EXIT_^1_%SPC 3_^1*_]_^1*****_-CONSTANTS AND STORAGE LOCATIONS_^1*_]_^1ONE_"NUM $40C0,0_%ONE IN FLOATING POINT_^1€€B_$NUM 0,0_^1INDEX NUM 0_^1A_$NUM 0,0_^1_%SPC 3_^1*_]_^1******_,VALUE IS GREATER THAN ONE_^1*_]_^1*****_-CALCULATE EXPONENT VALUE SIZE) --- 10**I_^1*_]_^1GRT1_!ENA 1_^1_%STA* J_^1GRT11 LDA* TEN_*B=10.0_^1_%STA* B_^1_%LDA* TEN+1_^1_%STA* B+1_^1*_1CONVERT VALUE TO LESS THAN 1 (CAL. 10**I)_^1GRT15 RTJ FLOT_^1_%NUM $5BAD_(MODE, LOAD, DIVIDE, STORE_^1_%ADC VALUE-*_^1_%A€€DC B-*_*(A=VALUE/B)_^1_%ADC A-*_^1_%NUM $4000_(STOP_^1_%LDA* A_,CHECK IF LESS THAN 1.0_^1_%SUB* ONE_^1_%SAM EXPV_)YES, SKIP_^1_%RAO* J_,NO, BUMP EXPONENT SCALE BY 1 AND REPEAT_^1_%RTJ FLOT_^1_%NUM $5B9D_(CALCULATE B=B*10.0_^1_%ADC B-*_^1_%ADC TEN-*_^1_%ADC B-*_^1_%NUM $4000_^1_%JMP* GRT15_^1_%SPC 1_^1*_]_^1CALPAR NUM 0_,CALLING PAR. ADDRESS (FILLED)_^1VALUE NUM 0,0_^€€1_%SPC 1_^1*_]_^1TEN_"NUM $4250,0_%TEN IN FLOATING POINT_^1J_$NUM 0_^1_%SPC 3_^1*_]_^1******_,SET UP EXPONENT VALUE_^1*_]_^1EXPV_!RTJ FLOT_^1_%NUM $5BAD_^1_%ADC B-*_*(B=B/10.0)_^1_%ADC TEN-*_^1_%ADC B-*_^1_%NUM $4000_^1CONVS CLR Q_^1_%LDA* J_,SEPARATE EXPONENT INTO TENTH AND UNIT_^1_%DVI- NO10_^1_%STQ* INDEX_^1_%ENQ 14_^1_%INA $30_*CONVERT EXPONENT VALUE INTO ASCII€€ AND SAVE_^1_%STA* (CALPAR),Q_^1_%INQ 1_^1_%LDA* INDEX_^1_%INA $30_^1_%STA* (CALPAR),Q_^1_%SPC 5_^1*_]_^1*****_,------------------------------------------------_^1*_]_^1*****_-CONVERT VALUE INTO 7 DIGITS_^1*_]_^1*_]_^1DIGIT ENA 0_^1_%STA* INDEX_^1DIG7_!RTJ FLOT_^1_%NUM $5BA4_(MODE, LOAD, DIVIDE, STOP_^1_%ADC VALUE-*_^1_%ADC B-*_^1_%RTJ Q8QFIX_'J=VALUE/B_^1_%STA* J_^1_€€%INA $30_*CONVERT VALUE (DIGIT) INTO ASCII_^1_%LDQ* INDEX_(SET UP INDEX AND SAVE DIGIT_^1_%INQ 5_^1_%STA* (CALPAR),Q_^1_%RAO* INDEX_^1_%LDA* INDEX_(CHECK IF ALL 7 DIGITS BEEN CONVERTED_^1_%INA -7_^1_%SAN SEVEN_(NO, SKIP_^1EX_#JMP* RETURN_'TO EXIT_^1*_]_^1SEVEN RTJ FLOAT_(FLOAT CURRENT DIGIT_^1_%ADC (J-*)_^1_%RTJ FLOT_^1_%NUM $597E_(MODE, MULTIPLY, COMPLEMENT, ADD_^1_%ADC €€B-*_^1_%ADC VALUE-*_^1_%NUM $DBAD_(STORE, LOAD, DIVIDE, STORE_^1_%ADC VALUE-*_%(VALUE=VALUE-(FLOAT(J)*B)_^1_%ADC B-*_^1_%ADC TEN-*_(B=B/10_^1_%ADC B-*_^1_%NUM $4000_^1_%JMP* DIG7_)TO REPEAT_^1_%SPC 5_^1*_]_^1*****_)*****_$******_'*******_#********_^1*_]_^1*****_]_^1*****_-FOR VALUE LESS THAN 1.0_^1*_]_^1SMAL1 ENQ 13_+SET EXPONENT SIGN TO '-'_^1_%ENA $2D_^1_%STA* (CAL€€PAR),Q_^1*_1SEARCH FOR EXPONENT VALUE (SCALE FACTOR)_^1_%ENA 0_^1_%STA* J_^1SMAL5 RTJ FLOT_^1_%NUM $5B9D_^1_%ADC VALUE-*_^1_%ADC TEN-*_(VALUE=VALUE*10.0_^1_%ADC VALUE-*_^1_%NUM $4000_^1*_1CHECK IF VALUE EQUAL OR GREATER THAN 1.0_^1_%LDA* VALUE_^1_%SUB* ONE_^1_%SAP SMAL7_(VALUE BEEN CONVERT TO 1.0 OR GREATER, SKIP_^1_%RAO* J_,BUMP POINTER AND REPEAT_^1_%JMP* SMAL5_^1*_]€€_^1SMAL7 LDA* ONE_*B=1.0_^1_%STA* B_^1_%LDA* ONE+1_^1_%STA* B+1_^1_%JMP* CONVS_^1_%SPC 3_^1*_]_^1*******_+FILL BUFFER WITH '*' FOR VALUE IS $7FFF/$FFFF_^1*_]_^1STAR_!LDA* CALPAR_'SET UP BUFFER ADDRESS_^1_%STA- I_^1_%ENQ 1_^1STAR1 ENA $2A_*LOAD '*'_^1_%STA- 1,B_^1_%INQ 1_^1_%TRQ A_^1_%INA -15_^1_%SAZ STAR3_^1_%JMP* STAR1_^1STAR3 JMP* EX_^1_%SPC 3_^1*_]_^1_%EQU DP10(*/96)€N_^1_%EQU DP11(DP10+1)_^1_%EQU DP12(DP11*96)_^1_%BSS (DP12-*)_^1_%END_]_^__NPLAZY1 CSY/ I13 P€1_%NAM LAZY1_(DECK-ID I13 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_]_^1*_]_^1*_,***************************************************_^1*_,*_P*_^1*_,*_#ROUTINE TO CONVERT SINGLE PRECISION NO._#*_^1*_,*_,INTO FLOATING POINT_0*_^1*_,*_P*_^1*_,***************************************************_^1*_]_^1*_]_^1*_]_^1******_,CALLING SEQUENCE :_^1*_]_€€^1*_8RTJ LAZY1_^1*_]_^1*_8ADC LBUFER_^1*_]_^1*_0'LBUFER' ASSIGNMENTS :_^1*_]_^1*_1WORD 01 NO. OF DIGITS_^1*_602 NO. OF INTEGER_^1*_603 NO. OF FRACTIONAL NO._^1*_604 SIGN (0=+, =-)_^1*_605 'E'/'D' (1=D, 2=E)_^1*_606 EXPONENT VALUE_^1*_607 INPUT DIGIT (BINARY VALUE)_^1*_6._!._#._#._#._^1*_6._!._#._#._#._^1*_6._!._#._#._#._^1*_6._!._#._#._#._^1*_614 VALUE IN FLOATING POINT€€ (RETURN FILLED)_^1*_615 VALUE IN FLOATING POINT_^1_%SPC 1_^1*_1E N T R Y_%N A M E_^1_%ENT LAZY1_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT* FLOT,FLOAT_^1_%SPC 1_^1*_1" E Q U "_$T A B L E_^1_%EQU LPMSK(2)_^1_%SPC 2_^1*_]_^1*****_(*****_#P R O G R A M_#S T A R T_#*****_^1*_]_^1_%SPC 2_^1LAZY1 NOP 0_,ENTRY_^1_%STQ* QSAVE_(SAVE Q-REGISTER_^1_%LDA* (LAZY1)_^1_%SAP P1_^1_%ADD* €€LAZY1_^1_%AND- LPMSK+15_^1P1_#STA* CALPAR_'SAVE CALLING PARAMETER ADD._^1_%RAO* LAZY1_(SET EXIT_^1_%STA- I_^1_%SPC 1_^1*_1I N I T I A L I Z E_$P O I N T E R S_^1_%ENA 1_^1_%STA* K_^1_%ENA 0_^1_%STA* A_,SET 'A' TO ZERO_^1_%STA* A+1_^1_%SPC 2_^1*_]_^1***_/CHECK IF INTEGER VALUE USED_^1*_]_^1_%LDA- 1,I_^1_%SAN INTPRO_^1_%JMP* ANYEXP_'NO, GO_^1INTPRO STA* J_^1_%JMP* HUNDER_^1_€€%SPC 2_^1*_]_^1*****_-10**6 THROUGH 1_^1*_]_^1DNO10 NUM $4A7A,$1200,$48E1,$A800,$474E,$2000,$457D,$0000_^1_%NUM $43E4,$0000,$4250,$0000,$40C0,$0000_^1*_]_^1*******_+10**(-1) THROUGH 10**(-7)_^1*_]_^1FNO1_!NUM $3E66,$6666,$3CD1,$EB85,$3B41,$8937,$3968,$DB8C_^1_%NUM $37D3,$E2D6,$3643,$1BDF,$346B,$5FCA_^1_%SPC 2_^1*_]_^1TEN_"NUM $4250,0000_"10.0 (FLOATING POINT)_^1*_]_^1B_$N€€UM 0,0_^1A_$NUM 0,0_^1J_$NUM 0_^1INDEX NUM 0_^1QSAVE NUM 0_^1CALPAR NUM 0_^1K_$NUM 0_^1_%SPC 2_^1*_]_^1*****_-ASSEMBLE VALUE_^1*_]_^1HUNDER LDA* K_,A=A+FLOAT(LVALUE(K))*B_^1_%INA 5_^1_%ADD* CALPAR_^1_%STA* V_^1_%ENA 8_^1_%SUB* J_,CALCULATE 10**I INDEX_^1_%ALS 1_^1_%STA* D10_^1_%RTJ FLOAT_(FLOAT INTEGER VALUE_^1V_$NUM 0_^1_%RTJ FLOT_^1_%NUM $5F96_(MODE, INDEX, MULT€€IPLY, NO INDEX_^1_%ADC D10-*_^1_%ADC DNO10-2-*_#(A=A+FLOAT(LVALUE(K))*10**K_^1_%NUM $ED40_(ADD, STORE, STOP_^1_%ADC A-*_^1_%ADC A-*_^1*_]_^1_%RAO* K_,BUMP POINTER_^1_%LDA* J_,DECREMENT INTEGER DIGIT COUNT BY 1_^1_%INA -1_0AND CHECK IF DONE_^1_%STA* J_^1_%SAZ ANYEXP_^1_%JMP* HUNDER_'NO, REPEAT_^1D10_"NUM 0_^1_%SPC 2_^1*_]_^1******_,CHECK IF ANY FRACTIONAL VALUE_^1*_]_^1€€ANYEXP ENQ 2_,GET NO. OF FRACTIONAL DIGITS IF ANY_^1_%LDA* (CALPAR),Q_^1_%SAN CALFRA_'TO CALCULATE FRACTIONAL VALUE_^1_%JMP* IFEXP_(NO MORE INPUT DATA, GO_^1*_]_^1CALFRA STA* J_^1_%ENA 1_^1_%STA* INDEX_^1*_]_^1*****_-CALCULATE A=A+FLOAT(LVALUE(K))**10(-I)_^1*_]_^1ASMFRA LDA* K_,GET INPTU INTEGE (FRACTION)_^1_%INA 5_^1_%ADD* CALPAR_^1_%STA* V2_^1_%LDA* INDEX_^1_%ALS 1_,CALCUL€€ATE INDEX FACTOR_^1_%STA* D10_^1_%RTJ FLOAT_(CONVERT OT FLOATING POINT_^1V2_#NUM 0_^1_%RTJ FLOT_^1_%NUM $5F96_(MODE, INDEX, MULTIPLY, NO INDEX_^1_%ADC D10-*_^1_%ADC FNO1-2-*_^1_%NUM $ED40_(ADD, STORE, STOP_^1_%ADC A-*_^1_%ADC A-*_^1_%LDA* J_,CHECK IF ALL DIGITS CONVERTED_^1_%INA -1_^1_%SAZ IFEXP_(DONE, SKIP_^1_%STA* J_,SAVE COUNT AND UPDATE POINTERS, REPEAT_^1_%RAO* K_^1€€_%RAO* INDEX_^1_%JMP* ASMFRA_'TO REPEAT_^1_%SPC 3_^1*_]_^1******_,CHECK IF EXPONENT USED_^1*_]_^1IFEXP ENQ 5_,GET EXPONENT VALUE IF ANY_^1_%LDA* (CALPAR),Q_^1_%INA 0_^1_%SAN ASMEXP_^1_%JMP* ST550_(GO, VALUE IS UNNSED OR ZERO_^1ASMEXP LDQ =N$40C0_%ASSEMBLE EXPONENT_^1_%STQ* B_^1_%ENQ 0_^1_%STQ* B+1_^1_%STA* INDEX_^1*_1CHECK IF VALUE IS NEGATIVE_^1_%SAP SAVEX_(SKIP ON €€POSITIVE (+)_^1_%TCA A_,COMPLEMENT VALUE_^1SAVEX STA* J_^1_%RTJ FLOT_^1_%NUM $5B9D_^1_%ADC B-*_^1_%ADC TEN-*_((B=B*10.0)_^1_%ADC B-*_^1_%NUM $4000_^1_%LDA* J_^1_%INA -1_^1_%SAZ ST480_(SKIP ON EXP. = 0, OTHERWISE CAL. 10**I_^1_%JMP* SAVEX_(TO REPEAT_^1*_]_^1ST480 LDA* INDEX_(CHECK IF EXP. IS -, +, OR 0_^1_%SAZ ST550_(FOR EXP. = 0_^1_%LDQ =N$5BAD_^1_%SAM ST500_(FOR EXP.€€ = -_^1_%INQ -$10_)SET TO $5B9D_^1ST500 STQ* ST502_^1_%RTJ FLOT_^1ST502 NUM 0_,FILLED_^1_%ADC A-*_^1_%ADC B-*_*A=A/B OR A=A*B_^1_%ADC A-*_^1_%NUM $4000_^1_%SPC 1_^1*_]_^1*****_-CHECK FOR SIGN AND SAVE VALUE_^1*_]_^1ST550 ENQ 3_^1_%LDA* (CALPAR),Q_^1_%INA -2_^1_%SAM DONE_^1_%RTJ FLOT_)COMPLEMENT VALUE WHEN SIGN IS NEGATIVE_^1_%NUM $5B7D_^1_%ADC A-*_*A=-A_^1_%€HADC A-*_^1_%NUM $4000_^1DONE_!ENQ 13_+SAVE VALUE IN CALLER BUFFER_^1_%LDA* A_^1_%STA* (CALPAR),Q_^1_%INQ 1_^1_%LDA* A+1_^1_%STA* (CALPAR),Q_^1_%LDQ* QSAVE_(RESTORE Q-REGISTER_^1_%JMP (LAZY1)_%RETURN TO CALLER_^1_%SPC 3_^1*_]_^1_%EQU DP10(*/96)_^1_%EQU DP11(DP10+1)_^1_%EQU DP12(DP11*96)_^1_%BSS (DP12-*)_^1_%END_]_^__HPODFLOT CSY/ I14 P€1_%NAM ODFLOT_'DECK-ID I14 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1***_/THIS ROUTINE RUN ANYWHERE/NON-RETRANCE_^1*****_0"DUMMY" BUFFER IS SET UP FOR MIN. CHANGE_^1****_]_^1***€€****_2DEBUG RUNS ON THE LOWER 32K, THEREFORE_^1*******_7NO 65 K ADDRESSING IS NEEDED_^1*_]_^1**********_(SPECIAL ARRANGEMENT --- DOES NOT USE LOW CORE_^1*_]_^1_%SPC 2_^1*_$CONTROL DATA CORPORATION, LA JOLLA DIVISION_^1*_$1700 FLOATING POINT PACKAGE FOR UTILITY FORTRAN, C006_^1*_$REFER TO APPENDIX C OF ERS FOR C006 FOR_^1*_$DETAILS OF THIS PACKAGE._^1*_;POINT PKG._^1*_$LIST OF FLO€€ATING POINT OPERATION CODES._^1*_$0_"XXX_-(NOT USED)_^1*_$1_"XXX_*(NOT USED)_^1*_$2_"XXX_*(NOT USED)_^1*_$3_"XXX_*(NOT USED)_^1*_$4_"FEND_,END OF CALLING SEQUENCE_^1*_$5_"CHMD_)CHANGE MODE REL/ABS_^1*_$6_"NIDX_)NO INDEX_^1*_$7_"FCOM_)COMPLEMENT_^1*_$8_"FSUB_)SUBTRACT_^1*_$9_"FMPY_)MULTIPLY_^1*_$A_"FDIV_)DIVIDE_^1*_$B_"FLDD_)LOAD_^1*_$C_"XXX_*(NOT USED)_^1*_$D_"FLST_)STORE_@PSR 752_€€^1*_$E_"FADD_)ADD_^1*_$F_"INDX_)INDEX_^1*_]_^1*_$G, THE PSUEDO ACCUMULATOR IS BROKEN UP INTO_^1*_$C,D,AND DELTA._^1*_]_^1_%SPC 3_^1*_1E N T R Y_%N A M E_^1_%ENT FLOT_,ENTRY POINT TO FLOATING_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%SPC 1_^1_%EXT* DBU_^1_%SPC 1_^1*_1" E Q U "_#T A B L E_^1_%EQU G(3),SIGN(5),ERRORS(6),F(7)_^1_%EQU A(9),B(10),BETA(13),C(11),D(12),DELTA(14),SHIFCT(1€€5)_^1_%EQU P(16),RELADR(18),INDEX(17),OPCODE(20),QS(21)_^1_%EQU OPCNT(19)_^1*_]_^1_%EQU LPMSK(2),CPMSK($12),ZERO($22)_^1_%SPC 2_^1*_]_^1******_'*****_#P R O G R A M_$S T A R T_#*****_^1*_]_^1_%SPC 1_^1*_]_^1FLOT_!0_"0_,ENTRY_^1_%RTJ DBU_*SET UP DUMMY BUFFER_^1_%STQ- QS,I_$SAVE Q_^1*_]_^1_%CLR A_3CLR RELADR_^1_%STA- RELADR,I_^1_%ENA -1_^1_%STA- INDEX,I_^1_%LDA* FLOT_,SAVE RE€€TURN ADDRESS_^1STOREP STA- P,I_8INTERPRETIVE LIST._^1INTERP CLR A_^1_%STA- OPCNT,I_^1_%LDQ- P,I_^1_%LDA- (ZERO),Q_$GET "OP" CODE_^1_%STA- OPCODE,I_^1_%RAO- P,I_^1_%JMP* DECODE_^1*_FGET NEXT OPERATION CODE_^1NXTOPC LDA- OPCNT,I_4IF OPCNT GE. 3, GO TO INTERP_^1_%INA -3_^1_%SAM A1-*-1_^1_%JMP* INTERP_^1A1_#INA 3+1_!OTHERWISE INCREMENT OPCNT_^1_%STA- OPCNT,I_^1*_FDECODE NEXT OPCODE€€_^1DECODE LDA- OPCODE,I_^1_%CLR Q_^1_%LLS 4_^1_%STA- OPCODE,I_^1*_FEXECUTE NEXT OPERATION_^1EXECUT LDQ* FLINS,Q_%GET PROCESSING ENTRY_^1_%JMP* SELF,Q_'TO PROCESSOR_^1*_]_^1_%SPC 2_^1*****_-PROCESSING JUMP TABLE_^1*_]_^1FLINS ADC FEND-SELF_#00 = END OF SEQUENCE_^1_%ADC DONE-SELF_#01 = FIN_^1_%ADC DONE-SELF_#02 = FIN_^1_%ADC DONE-SELF_#03 = FIN_^1_%ADC FEND-SELF_#04 = END €€OF SEQUENCE_^1_%ADC CHMD-SELF_#05 = CHANGE MODE (ABS. OR REL.)_^1_%ADC NIDX-SELF_#06 = NO INDEX_^1_%ADC FCOM-SELF_#07 = COMPLEMENT_^1_%ADC FSUB-SELF_#08 = SUBTRACT_^1_%ADC FMPY-SELF_#09 = MULTIPLY_^1_%ADC FDIV-SELF_#10 = DIVIDE_^1_%ADC FLDD-SELF_#11 = LOAD ACCUMULATOR_^1_%ADC DONE-SELF_#12 = DONE_^1_%ADC FLST-SELF_#13 = STORE_^1_%ADC FADD-SELF_#14 = ADD_^1_%ADC INDX-SELF€€_#15 = INDEX_^1_%EQU SELF(FLINS)_^1_%SPC 2_^1*_]_^1*****_-CHANGE MODE (ABS. OR REL.)_^1*_]_^1CHMD_!LDA- RELADR,I_(ABSOLUTE/RELATIVE SWITCH_^1_%CLR Q_:IF RELADR=0,SET TO 1. OTHERWISE_^1_%SAN A2-*-1_^1_%ENQ 1_^1A2_#STQ- RELADR,I_^1_%JMP* NXTOPC_^1_%SPC 2_^1*_]_^1****_.NO INDEX_^1*_]_^1NIDX_!ENA -1_^1_%JMP* STONDX_^1_%SPC 2_^1*_]_^1******_,INDEX_^1*_]_^1INDX_!ENA -1_+RES€€ET INDEX BEFORE CALLING OPERND_^1_%STA- INDEX,I_^1_%RTJ* OPERND_(OPERND TO INDEX_^1_%LDA- 1,Q_8OPERAND TO INDEX_^1_%INA -1_^1STONDX STA- INDEX,I_^1_%JMP* NXTOPC_^1_%SPC 2_^1*_]_^1******_,STORE_^1*_]_^1*_FFLOATING STORE_^1FLST_!EQU FLST(*)_^1_%RTJ* FLTSTO_'REPACK ACCUMULATOR_^1_%RTJ* OPERND_'GET ADDRESS OF OPERAND_^1FOK_"LDA- G,I_8G TO OPERAND_^1_%STA- 1,Q_^1_%LDA- G+1,I_^1_%STA-€€ 2,Q_^1ANXT_!JMP* NXTOPC_^1_%SPC 2_^1*_]_^1****_.END OF SEQUENCE_^1*_]_^1FEND_!RTJ* FLTSTO_'REPACK ACCUMULATOR BEFORE_^1_%SPC 2_^1FLIT_!LDQ- P,I_^1_%STQ* FLOT_)SAVE RETURN ADDRESS_^1_%LDQ- QS,I_)RESTORE Q-REGISTER_^1DONE_!JMP* (FLOT)_'RETURN_^1*_]_^1_%SPC 2_^1*_]_^1******_,LOAD ACCUMULATOR_^1*_]_^1FLDD_!RTJ* OPERND_^1_%LDA- 2,Q_^1_%STA- G+1,I_^1_%LDA- 1,Q_^1_%INA 0_/ELIMINAT€€E MINUS ZERO_^1_%STA- G,I_*OPERAND TO G_^1*_*LOAD OPERAND INTO G._^1*_*UNPACK OPERAND INTO C,D AND DELTA._^1*_*SAVE SIGN IN SIGN._^1_%ENQ 1_^1_%SAP A3-*-1_^1_%ENQ -1_^1A3_#STQ- SIGN,I_^1*_*PACK C,D, AND DELTA INTO G._^1_%LDQ- G+1,I_^1_%SAP STEP2B-*-1_^1_%TCA A_^1_%TCQ Q_^1STEP2B STA- C,I_^1_%SAN A4-*-1_^1_%JMP* ARG0_^1A4_#ALS 1_^1_%EOR- ZERO+16_^1_%ARS 8_^1_%INA 0_^1_%STA€€- DELTA,I_^1_%LDA- C,I_^1_%LLS 8_^1_%AND- LPMSK+15_^1_%STA- C,I_^1_%LLS 15_^1_%AND* H7F80_^1_%STA- D,I_^1_%JMP* NXTOPC_^1ARG0_!CLR A_,ARGUMENT IS ZERO._^1_%STA- C,I_^1_%STA- D,I_^1_%STA- DELTA,I_^1_%ENA 1_^1_%STA- SIGN,I_^1_%JMP* NXTOPC_^1FLTSTO 0_"0_^1_%LDQ- C,I_^1*_*IF C IS ZERO, THEN ACCUMULATOR IS ZERO_^1_%SQN FLST1-*-1_^1_%STQ- G,I_^1_%STQ- G+1,I_^1_%JMP* FLSTA_^1FLST1 L€€DA- D,I_^1_%ALS 1_^1_%LLS 1_^1_%STA- G+1,I_^1_%LDA- DELTA,I_^1_%AND- LPMSK+8_^1_%EOR- ZERO+8_^1_%ADD- G+1,I_^1_%LLS 7_^1_%STA- G,I_^1_%STQ- G+1,I_^1_%LDQ- SIGN,I_^1_%SQP FLSTA-*-1_^1_%TCA A_^1_%STA- G,I_*IF SIGN IS NEG._^1_%LDA- G+1,I_6COMPLEMENT G._^1_%TCA A_^1_%STA- G+1,I_^1FLSTA JMP* (FLTSTO) EXIT FROM REPACK OF ACCUMULATOR_^1_%SPC 2_^1*_]_^1******_,COMPLEMENT_^1*_]_^1F€€COM_!LDA- C,I_^1_%SAN ACMOK_^1_%JMP* ARG0_^1ACMOK SET A_^1_%EOR- SIGN,I_^1_%STA- SIGN,I_^1_%JMP* ANXT_^1*_FGET ADDRESS OF NEXT OPERAND_^1****** *** GET ADDRESS OF NEXT OPERAND_^1*_*15 BIT ADDRESSING ARTIHMETIC IS BEING USED._^1*_*REFER TO E006, APENDIX ON 15 BIT ARITHMETIC_^1OPERND 0_"0_^1_%LDQ- P,I_^1_%LDA- (ZERO),Q_^1_%SAP DIRECT-*-1_%GO TO DIRECT_^1_%STA- F,I_-SAVE ADDRESS€€ IN F_^1_%LDA- RELADR,I_(IF RELATIVE ADDRESS MODE,_^1_%SAN RELIND-*-1_%GO TO RELATIVE INDIRECCT_^1ABSIND LDQ- F,I_-OTHERWIEE ABSOLUTE_^1_%JMP* INDIR_^1RELIND ADQ- F,I_-(USE 15 BIT ARITHMETIC_^1INDIR LDQ- (ZERO),Q_^1_%JMP* OPADR_^1DIRECT STA- F,I_^1_%LDA- RELADR,I_(IF RELATIVE ADDRESS MODE,_^1_%SAZ ABSDIR-*-1_%GO TO ABSOLUTE DIRECT_^1RELDIR SQM A5-*-1_0(USE 15 BIT ARITHMETIC)_^1€€_%ADQ- ZERO+16_^1A5_#ADQ- F,I_^1_%JMP* OPADR_^1ABSDIR LDQ- F,I_^1OPADR ADQ- INDEX,I_)EFFECTIVE ADDRESS -1 IN Q_^1_%LDA- LPMSK+15_^1_%LAQ Q_RPSR 752_^1KL65K RAO- P,I_*MOVE PSEUDO PROGRAM COUNTER_'**FTN 3.0**_^1_%JMP* (OPERND)_(RETURN EFFECTIVE ADR -1 IN Q_^1_%SPC 2_^1*_]_^1*****_-MULTIPLY_^1*_]_^1FMPY_!RTJ* OPERND_^1_%RTJ FLTSET_*STEPS 1,2,3 AND 4 OF MPY OR DIV_^1*_*IF F IS NEG€€., CHANGE SIGN._^1_%SAZ JMPOUT-*-1_^1_%SAP FLT1-*-1_^1_%SET A_^1_%EOR- SIGN,I_^1_%STA- SIGN,I_^1*_]_^1*_*STEP 5.A._^1FLT1_!LDA- C,I_^1_%SAN NOZERO-*-1_^1JMPOUT JMP* ARG0_^1NOZERO MUI- A,I_^1_%LLS 1_^1_%ARS 1_^1_%AND- LPMSK+15_^1_%STA- F+1,I_!C*A(LSB)_^1_%STQ- G,I_!C*A(MSB)_^1_%LDA- C,I_^1_%MUI- B,I_^1_%LLS 1_^1_%STQ- F,I_^1*_FSTEP 5C_^1_%LDA- A,I_^1_%MUI- D,I_^1_%LLS 1_^1_%€€TRQ A_^1_%LDQ- G,I_^1_%ADD- F,I_^1_%RTJ* TSTBOR_^1_%ADD- F+1,I_^1_%RTJ* TSTBOR_^1*_$ROUND AND TRUNCATE TO 23 BITS._^1ROUND ALS 1_^1_%LLS 16_^1_%STA- G,I_^1*_FSTEP 5E_^1NORMAL ENA 0_,NORMALIZE G AND G+1 ACCUM_^1_%STA- SHIFCT,I_3COMBINE EXPONENTS BETA AND DELTA_^1_%LDA- G,I_^1STEP6 LLS 1_^1_%SAM STEP6A-*-1_^1_%RAO- SHIFCT,I_^1_%JMP* STEP6_^1H7F80 NUM $7F80_^1STEP6A LLS 15_€€^1_%STQ- C,I_8MOST SIGNIFICANT BITS_^1_%ARS 1_^1_%AND- LPMSK+15_^1_%STA- D,I_^1*_*LEAST SIGNIFICANT BITS IN D_^1_%LDA- DELTA,I_^1_%ADD- BETA,I_^1COMBIN SUB- SHIFCT,I_^1_%STA- DELTA,I_^1_%TRA Q_^1_%ARS 7_^1_%INA 0_^1_%SAZ CO1_^1_%JMP* OVFUNF_^1CO1_"LDA- D,I_^1_%INA 64_^1_%SAM A100X_^1_%AND* H7F8_^1_%STA- D,I_^1_%JMP* FMPXIT_^1A100X ENA 0_^1_%STA- D,I_^1_%LDA- C,I_^1_%INA 1€€_^1_%SAM CO2_^1_%STA- C,I_^1_%JMP* FMPXIT_^1CO2_"LDA- ZERO+15_^1_%STA- C,I_^1_%LDA- DELTA,I_^1_%INA 1_^1_%STA- DELTA,I_^1_%SUB- ZERO+9_^1_%SAN FMPXIT-*-1_^1_%ENQ 0_^1_%JMP* OVFUNF_5OVERFLOW IF Q=+,A=0._^1*_FUNDERFLOW IF Q=-,A=0._^1FMPXIT JMP NXTOPC_^1TSTBOR 0_"0_^1_%SAP TSTB-*-1_$IF A IS NEG. CARRY INTO G_^1_%AND- LPMSK+15_^1_%INQ 1_^1_%SQP TSTB-*-1_$IF Q IS NEQ. END AROUND€€_^1_%ADQ- LPMSK+15_^1_%INA 1_^1TSTB_!JMP* (TSTBOR)_^1_%EQU_#H7F8(H7F80)_^1_%SPC 2_^1*_]_^1*****_-DIVIDE_^1*_]_^1FDIV_!RTJ OPERND_*GET NEXT 0PERAND ADDRESS_^1_%RTJ* FLTSET_5STEPS 1,2,3 AND 4 OF MPY OR DIV._^1*_FAND NORMALIZE_^1_%SAN A6-*-1_^1*_*IF F IS ZERO, GO TO DIVZER_^1_%JMP* DIVZER_^1A6_#SAP FLT2-*-1_^1_%SET A_^1_%EOR- SIGN,I_^1_%STA- SIGN,I_^1FLT2_!EQU FLT2(*)_^1_%LDQ- €€C,I_-SHIFT C,D TO 14 BITS AND 9 BITS_^1_%LDA- D,I_-TO GUARANTEE DIVISION WITH NO_^1_%ALS 1_:OVERFLOW_^1_%LRS 1_^1_%ARS 1_^1_%STQ- C,I_^1_%AND*_"RSTLA_%7FFF_^1_%STA- D,I_^1_%LDA- BETA,I_^1_%TCA A_^1_%INA 1_/-BETA + 1=BETA_^1_%STA- BETA,I_^1_%LDA- C,I_-FORM -C*B_^1*_*IF C.E.0, GO TO ARGO._^1_%SAN FD2-*-1_^1_%JMP ARG0_^1FD2_"TCA A_^1_%INA 0_^1_%MUI- B,I_--C*B_^1_%DVI- A,I_--C€€*B/A_^1_%INQ 0_^1_%LLS 16_^1_%TCA A_:(REMAINDER MUST BE NEGATIVE)_^1_%ALS 1_:IF 2*R.GE.C,DECREMENT RESULT_^1_%SUB- A,I_-BY 1_^1_'SAM A7-*-1_^1_%INQ -1_^1A7_#TRQ A_5ROUNDED_^1_%ADD- D,I_-D-(C*B/A)_^1*_;FORM C+ ABOVE*2**-15_^1_%LDQ- C,I_^1_%SAP STEP5E-*-1_^1_%INQ -1_9IF LOWER ACC IS NEG, DECREMENT_^1_%ADD* H8000_(UPPER BY 1 AND INCREMENT_^1*_FLOWER BY_^1*_F1 TO PUT THE END AR€€OUND_^1*_FBORROW INTO_^1*_FPROPER POSITION._^1STEP5E ALS 1_^1_%LRS 1_^1_%DVI- A,I_^1_%INQ 0_^1_%STA- G,I_^1_%CLR A_^1_%LRS 1_^1_%DVI- A,I_^1_%INQ 0_^1_%LLS 16_^1*_8ROUND REMAINDER IN A IF A._^1*_8GE. 1/2, ROUND Q UP BY 1._^1_%ALS 1_^1_%SUB- A,I_^1_%SAM A8-*-1_^1_%INQ 1_^1A8_#TRQ A_^1_%LDQ- G,I_-ROUND,TRUNCATE AND_^1_%JMP* ROUND_(NORMALIZE THE RESULTS_^1*_FEND OF FDIV_^1F€€LTSET 0_"0_^1_%LDA- 2,Q_^1_%STA- F+1,I_^1_%LDA- 1,Q_^1_%STA- F,I_^1_%LDQ- F+1,I_^1_%SAP STEP2A-*-1_^1_%TCA A_^1_%TCQ Q_^1STEP2A STA- A,I_^1*_*IF F IS ZERO, GO TO ARGFO (SET BETA,A,B=0)_^1_%SAN A9-*-1_^1_%JMP* ARGF0_^1A9_#ALS 1_^1_%EOR* H8000_^1_%ARS 8_^1_%INA 0_^1ARGF0 STA- BETA,I_^1_%LDA- A,I_^1_%LLS 8_^1_%AND* RSLTA_%7FFF_^1_%STA- A,I_^1_%LLS 15_^1_%AND H7F80_^1_%STA- €€B,I_^1_%LDA- F,I_^1_%JMP* (FLTSET)_^1*_$DIVIDE CHECK WHEN DIVIDE BY ZERO_^1DIVZER ENQ 1_^1_%JMP* SETERR_^1OVFUNF TRQ A_:OVERFLOW OR UNDERFLOW_^1*_*OVERFLOW_^1_%ENQ 0_^1_%SAP SETERR-*-1_^1*_*UNDERFLOW_^1_%ENQ 2_^1SETERR LDA- ERRORS,I_^1_%AND* ERASE,Q_^1_%ADD* SETBIT,Q_^1_%STA- ERRORS,I_^1_%LDA* RSLTA,Q_4SET F.P. ACCUMULATOR_^1_%STA- C,I_^1_%LDA* RSLTB,Q_^1_%STA- D,I_^1_%LDA* RS€€LTEX,Q_^1_%STA- DELTA,I_^1NXTOP3 JMP NXTOPC_^1*_*OVERFLOW, UNDERFLOW_^1RSLTB NUM $7F80,$7F80,$0000_^1RSLTA NUM $7FFF,$7FFF,$4000_^1_%EQU RSTLA(RSLTA)_^1*_8EXPONENTS_^1RSLTEX NUM $7F,$7F,-$7F_^1LRSINS LRS 0_^1ERASE NUM $7FFF,$BFFF,$DFFF_^1SETBIT NUM $8000,$4000,$2000_^1_%EQU_#H8000(SETBIT)_^1H7FE0 NUM $7FE0_^1H7F10 NUM $7F10_^1HFFC0 NUM $FFC0_^1MH7F10 NUM -$7F10_^1€€H807F NUM $807F_^1_%EQU_#MS8B(RSLTB)_^1_%SPC 2_^1*_]_^1******_,SUBTRACT_^1*_]_^1*_*FLOATING POINT SUBTRACT G-F_^1FSUB_!RTJ OPERND_*GET NEXT 0PERAND ADDRESS_^1_%LDA- 1,Q_^1_%LDQ- 2,Q_^1_%TCA A_,CHANGE THE SIGN BDFORE_^1_%TCQ Q_,ENTERING YHE ADD ROUNTINE_^1_%JMP* FADD2_^1_%SPC 2_^1*_]_^1******_,ADD_^1*_]_^1*_]_^1*_*FLOATING POINT ADD G+F, RESULT IN G._^1FADD_!RTJ OPERND_^1_%L€€DA- 1,Q_^1_%LDQ- 2,Q_^1FADD2 STQ- F+1,I_^1_%STA- F,I_^1_%SAP A10-*-1_^1_%TCA A_^1A10_"ALS 1_^1_%SAN A100_^1_%JMP* NXTOP3_$ADD 0, THUS JMP OUT_^1A100_!EOR* H8000_^1_%ARS 8_^1_%INA 0_,EXTRACT BETA_^1_%STA- BETA,I_^1_%LDA- F,I_^1_%LDQ- F+1,I_^1_%AND* H807F_^1_%SAP A11-*-1_^1_%ADD* MS8B_^1A11_"LLS 8_5STORE A AND B_^1_%STA- A,I_*A=0, 15MSB_^1_%STQ- B,I_*B=8 LSB, 8 SIGN BITS_^1_€€%LDA- D,I_^1_%ALS 1_/REMOVE BIT 15 OF A REG_^1_%LDQ- SIGN,I_'FROM D_^1_%STA- D,I_^1_%SQP FADD21-*-1_^1_%TCA A_,COMPLEMENT C AND D IF_^1_%STA- D,I_*SIGN IF NEQATIVE_^1_%LDA- C,I_^1_%TCA A_^1_%STA- C,I_^1FADD21 EQU FADD21(*)_^1*_]_^1_%LDA- C,I_%IF ACC IS ZERO( USE SECOND_^1_%SAN FA22-*-1_(VALUE AS ANSWER_^1_%LDA- BETA,I_^1_%STA- DELTA,I_^1_%LDA- B,I_^1_%LDQ- A,I_^1_%JMP* STOCD_€€^1FA22_!LDA- DELTA,I_^1_%SUB- BETA,I_^1*_]_^1*_*IF F.GE.G, GO TO ADD STEP 3 (ADDS3)._^1_%SAP ADDS3-*-1_'OTHERWISE_^1*_;EXCHANGE EXPONENTS_^1_%LDA- DELTA,I_^1_%LDQ- BETA,I_^1_%STA- BETA,I_^1_%STQ- DELTA,I_^1*_]_^1_%LDA- A,I_^1_%LDQ- C,I_^1_%STA- C,I_^1_%STQ- A,I_^1_%LDA- B,I_^1_%LDQ- D,I_^1_%STA- D,I_^1_%STQ- B,I_^1*_*C AND D ARE NOW THE LARGER NUMBER_^1*_*A AND B ARE NOW THE SAMLL€€ER NUMBER_^1_%LDA- DELTA,I_^1_%SUB- BETA,I_^1ADDS3 TRA Q_^1_%ADD* LRSINS_^1_%STA* LRS_^1_%INQ -29_^1*_*IF SHIFT .GE. 29,_^1_%SQM AS30-*-1_^1*_*LEAVE THE LARGER NUMBER IN ACCUMULATOR AND GO ON_^1_%LDA- D,I_^1_%LDQ- C,I_^1_%JMP* STOCD_^1*_*STEP 3_^1AS30_!LDQ- C,I_^1_%LDA- D,I_^1_%LRS 8_^1_%LLS 6_^1_%ARS 1_^1_%AND*_"RSTLA_%7FFF_^1_%STA- D,I_*D=0,10LSB,5 SIGN BITS_^1_%TRQ A_^1_€€%AND*_"RSTLA_%7FFF_^1_%STA- C,I_*C=0SS,13MSB_^1*_]_^1AS31_!LDQ- A,I_^1_%LDA- B,I_^1_%LRS 8_^1_%LLS 6_^1*_*STEP 4._^1*_*SHIFT SMALLER NUMBER RIGHT (ABS.(BETA-DELTA)),_^1*_*AND SET THE SIGN OF MSB TO POSITIVE_^1*_*SHIFT LSB RIGHT 1, AND SET THE SIGN OF LSB POSITIVE._^1*_*CLEAR THE CARRY TO BIT 15 AND ADD 1 TO MSB_^1*_*POSITION THE SMALLER NUMBER_^1*_]_^1LRS_"LRS 0_^1_%ARS 1_^1_%A€€ND*_"RSTLA_%7FFF_^1_%STA- B,I_^1_%TRQ A_^1_%AND*_"RSTLA_%7FFF_^1_%STA- A,I_^1_%CLR Q_:STEP 5_^1_%LDA- D,I_^1_%ADD- B,I_^1_%SAP AS6-*-1_4IF A.L.0, CARRY OCCURRED_^1_%AND*_"RSTLA_%7FFF_^1*_*STEP 6._^1_%ENQ 1_^1AS6_"ADQ- A,I_^1_%ADQ- C,I_^1_%SQP AS61-*-1_^1*_*SUBTRACT END AROUND CARRY INCREASE LSB BY 1_^1_%ADQ*_"RSTLA_%7FFF_^1_%INA 1_^1_%SAP AS61-*-1_^1_%INQ 1_^1_%AND*_"RSTLA_€€%7FFF_^1AS61_!ALS 1_^1_%STA- D,I_^1_%STQ- C,I_^1*_*IF RESULT IS MINUS ZERO, GO TO ARG0_^1*_*MINUS ZERO IS Q=7FFF, A= FFFE._^1_%ADQ*_"H8000_^1_%SQN AS62-*-1_^1_%INA 1_^1_%SAN AS62-*-1_^1_%JMP ARG0_^1*_*STEP 7._^1*_*SAVE SIGNS AND OVERFLOW V IN BITS 1 AND 0_^1*_*IF S .E. V, THEN V IS SIGN EXTENSION_^1*_*IF S.NE.V, THEN RESULT OVERFLOWED INTO V._^1AS62_!LLS 3_^1_%AND- LPMSK+2_^1€€_%TRA Q_^1_%LDA- D,I_^1_%JMP* SHFCNT,Q_^1*_]_^1*_*SV_^1*_*00_9S=V, SHIFT LEFT 2_^1SHFCNT JMP* SHFT2_^1*_*01_9S NOT = V, NO SHIFT_^1_%JMP* SHFT1_^1*_*10_9S NOT = V, NO SHIFT_^1_%JMP* SHFT1_^1*_*11_9S=V, SHIFT LEFT 2_^1_%JMP* SHFT2_6S=V, SHIFT LEFT 2_^1SHFT2 LDQ- C,I_^1_%LLS 2_^1_%JMP* STOCD_^1SHFT1 RAO- DELTA,I_)INCREMENT THE EXPONENT_^1_%LDQ- C,I_^1_%LLS 1_^1*_*SAVE THE SIGN A€€ND MAGNITUDE OF THE RESULTS._^1STOCD STQ- C,I_^1_%SQP ADDS7A-*-1_^1_%ENQ -1_+SIGN=-1_^1_%STQ- SIGN,I_^1_%LDQ- C,I_*RESTORE C_^1_%TCQ Q_^1_%TCA A_^1_%AND- CPMSK+3_%$FFF8_^1_%JMP* ADDS7_^1ADDS7A ENQ 1_^1_%STQ- SIGN,I_^1_%LDQ- C,I_^1ADDS7 SAN ADDS7B-*-1_^1_%SQN ADDS7B-*-1_^1*_8RESULT IS ZERO, GO TO ARG0_^1_%JMP ARG0_^1ADDS7B STQ- G,I_^1_%STA- G+1,I_^1_%TRA Q_^1_%ENA 0_^1_%€ŽSTA- BETA,I_^1_%JMP NORMAL_^1_%SPC 3_^1*_]_^1_%EQU DP10(*/96)_^1_%EQU DP11(DP10+1)_^1_%EQU DP12(DP11*96)_^1_%BSS (DP12-*)_^1_%END_]_^__ŽPODFXFL CSY/ I15 P€1_%NAM ODFXFL_'DECK-ID I15 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1***_/THIS ROUTINE RUN ANYWHERE/NON-RETRANCE_^1*****_0"DUMMY" BUFFER IS SET UP FOR MIN. CHANGE_^1****_]_^1***€€****_2DEBUG RUNS ON THE LOWER 32K, THEREFORE_^1*******_7NO 65 K ADDRESSING IS NEEDED_^1*_]_^1**********_(SPECIAL ARRANGEMENT --- DOES NOT USE LOW CORE_^1*_]_^1_%SPC 1_^1*_1E N T R Y_#N A M E S_^1_%ENT Q8QFIX_^1_%ENT Q8FX_^1_%ENT Q8QFLT_^1_%ENT Q8FLOT_^1_%ENT IFIX_^1_%ENT FLOAT_^1_%ENT DBU_^1_%SPC 1_^1*_1E X T E R N A L S_^1_%EXT* FLOT_^1_%SPC 1_^1*_1" E Q U "_#T A B L E_€€^1_%EQU CELL2(41),CELL1(42),QS(21)_^1_%EQU G(3),SIGN(5),ERRORS(6)_^1_%EQU ZERO($22),LPMSK(2)_^1_%SPC 2_^1*_]_^1******_'*****_#P R O G R A M_$S T A R T_#*****_^1*_]_^1_%SPC 2_^1Q8QFIX NOP_]_^1_%RTJ* DBU_^1_%STQ- QS,I_$SAVE Q_^1_%LDA- G,I_*PARAMETER IS IN PSEUDO-ACC._^1_%STA- CELL1,I_^1_%LDA- G+1,I_^1_%STA- CELL2,I_^1_%LDA* Q8QFIX_"SAVE RETURN_^1_%STA* Q8FX_^1_%JMP* FIX_^1_%SPC €€ 2_^1*_]_^1Q8FX_!NOP 0_,ENTRY_^1_%RTJ* DBU_^1_%STQ- QS,I_)SAVE Q-REG._^1_%LDA* (Q8FX)_^1_%SAP KLG65K_^1_%ADD* Q8FX_^1_%AND- LPMSK+15_^1KLG65K TRA Q_O**FTN 3.0**_^1FX5_"LDA- (ZERO),Q_^1_%STA- CELL1,I_^1_%INQ 1_^1_%LDA- (ZERO),Q_^1_%STA- CELL2,I_^1_%RAO* Q8FX_$RETURN 2 CELLS AFTER RTJ_^1FIX_"LDA- CELL1,I_^1_%SAP FX1-*-1_^1_%TCA A_(COMPLEMENT A AND CELL2_^1_%LDQ- CELL2,I_^1_%TCQ€€ Q_^1_%STQ- CELL2,I_^1FX1_"ENQ 0_^1_%LLS 2_^1_%SQN FX2-*-1_^1_%ENA 0_(LESS THAN UNITY, ZERO TO A_^1_%JMP* FX4_^1FX2_"ENQ 0_^1_%LLS 3_^1_%SQZ FX3-*-1_^1_%LDA- LPMSK+15_$GREATER THAN 2**16-1, $7FFF TO A_^1_%JMP* FX6_PPSR 903_^1FX3_"LDQ* LLS_%CONSTRUCT A SHIFT_^1_%LLS 4_^1_%STQ* SHIFT_^1_%ENQ 0_(LOW-ORDER BITS COME FROM WORD2_^1_%LLS 7_^1_%LDA- CELL2,I_^1_%LRS 7_^1SHIFT L€€LS 0_(COUNT FROM EXPONENT LOW 4 BITS_^1_%TRQ A_(ANSWER TO ACC_^1FX6_"LDQ- CELL1,I_LPSR 903_^1_%SQP FX4-*-1_^1_%TCA A_(COMPLEMENT_^1FX4_"LDQ- QS,I_^1_%JMP* (Q8FX)_"RETURN_^1LLS_"ADC $00FE_^1_%SPC 2_^1*_1FIX TO FLOAT ENTRY_^1Q8QFLT NOP_]_^1_%RTJ* DBU_^1_%STQ- QS,I_$SAVE Q_^1_%STA- CELL1,I_^1_%LDA* Q8QFLT_"SAVE RETURN_^1_%STA* Q8FLOT_^1_%JMP* FLT_^1_%SPC 2_^1*_]_^1Q8FLOT NOP 0€€_,ENTRY_^1_%RTJ* DBU_^1_%STQ- QS,I_$SAVE Q_^1_%LDA* (Q8FLOT)_^1_%SAP FL0_^1_%ADD* Q8FLOT_^1_%AND- LPMSK+15_^1FL0_"TRA Q_^1_%LDA- (ZERO),Q_^1_%STA- CELL1,I_^1_%RAO* Q8FLOT_"SKIP PARAMETER ADDRESS_^1FLT_"LDA- CELL1,I_^1_%SAP FL1-*-1_^1_%TCA A_(COMPLEMENT_^1FL1_"SAN FL3-*-1_^1_%STA- CELL2,I_!INPUT WAS ZERO_^1FL8_"STA- CELL2+1,I_^1_%LDA- I_^1_%INA CELL2_^1_%STA* LOCEL2_^1_%RTJ F€€LOT_^1_%NUM $B400_^1LOCEL2 ADC CELL2_^1FL2_"LDQ- QS,I_^1_%JMP* (Q8FLOT) RETURN_^1FL3_"LDQ =N$8F_#EXPONENT FOR 15-BIT INPUT_^1FL4_"ALS 1_^1_%SAM FL5-*-1_^1_%INQ -1_^1_%JMP* FL4_^1FL5_"LLS 7_(MOST SIGNIFICANT 7BITS IN Q_^1_%STQ- CELL2,I_^1_%LDQ- CELL1,I_^1_%SQM FL6-*-1_^1_%JMP* FL8_^1FL6_"TCA A_(COMPLEMENT A_^1_%LDQ- CELL2,I_^1_%TCQ Q_(COMPLEMENT Q_^1_%STQ- CELL2,I_^1_%JMP€€* FL8_^1_%SPC 2_^1_%EQU IFIX(Q8FX)_^1_%EQU FLOAT(Q8FLOT)_^1_%SPC 1_^1*_]_^1*_,******************************************_^1*_,*_G*_^1*_,*_#ROUTINE TO SET UP DUMMY BUFFER_#*_^1*_,*_%FOR FLOATING POINT PACKAGE_%*_^1*_,*_G*_^1*_,******************************************_^1*_]_^1*_]_^1_%SPC 2_^1*_]_^1******_'*****_#P R O G R A M_$S T A R T_#*****_^1*_]_^1_%SPC 2_^1DBU_"NOP 0_,E€^NTRY_^1_%STA* TEMP_)SAVE A-REG._^1_%RTJ* SELF_)GENERATE BUFFER ADDRESS_^1SELF_!NOP 0_^1_%LDA* SELF_^1_%INA BUFFER-SELF_^1_%STA- I_,SET IT TO I-REGISTER_^1_%LDA* TEMP_^1_%JMP* (DBU)_(RETURN_^1*_]_^1TEMP_!NUM 0_^1BUFFER BZS BUFFER(45)_^1_%SPC 3_^1*_]_^1_%EQU DP10(*/96)_^1_%EQU DP11(DP10+1)_^1_%EQU DP12(DP11*96)_^1_%BSS (DP12-*)_^1_%END_]_^__^PTDFUNC CSY/ A27 P€1_%NAM TDFUNC_'DECK-ID A27 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM TIME AND DATE FUNCTION HANDLER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1* THIS PROGRAM PERFORMS BASIC TIME AND DATE FUNCTIONS FOR **MSOS 4.1**_^1*_"MSOS. IF A HARDWARE TIMER IS PRESENT I€€N THE SYSTEM,_!**MSOS 4.1**_^1*_"THE TIME OF DAY PROGRAM, TOD SHOULD ALSO BE IN THE_#**MSOS 4.1**_^1*_"SYSTEM. OPERATION OF THIS PROGRAM IS GOVERNED BY THE **MSOS 4.1**_^1*_"CONTENTS OF THE Q-REGISTER ON ENTRY._2**MSOS 4.1**_^1*_!FOR Q = 0 , THE PROGRAM UPDATES THE CALENDAR AT THE_#**MSOS 4.1**_^1*_#START OF A NEW DAY. THE CURRENT DATE/TIME IS PRINTED **MSOS 4.1**_^1*_#ALSO. TH€€IS ENTRY IS USED FROM TOD._2**MSOS 4.1**_^1*_!FOR Q = 1 , THE PROGRAM REQUESTS A TIME ENTRY VIA THE_!**MSOS 4.1**_^1*_#SYSTEM COMMENT DEVICE AND ENTERS IT INTO THE SYSTEM. **MSOS 4.1**_^1*_#THIS ENTRY IS USED FROM SPACE AT AUTOLOAD TIME AND_"**MSOS 4.1**_^1*_#FROM MIPRO AFTER AUTOLOAD._;**MSOS 4.1**_^1*_!FOR Q = 2 , THE PROGRAM PRINTS THE CURRENT DATE AND_#**MSOS 4.1**_^1*_#TIME. €€ THIS PATH IS ALSO USED FOR Q=0 AND 1 ENTRIES. **MSOS 4.1**_^1*_#THIS ENTRY IS USED FROM MIPRO_8**MSOS 4.1**_^1_%SPC 4_N**MSOS 4.1**_^1* PROGRAM EXTERNAL POINTS_A**MSOS 4.1**_^1_%EXT YERTO_(CURRENT YEAR_5**MSOS 4.1**_^1_%EXT MONTO_(CURRENT MONTH_4**MSOS 4.1**_^1_%EXT DAYTO_(CURRENT DAY_6**MSOS 4.1**_^1_%EXT HORTO_(CURRENT HOUR_5**MSOS 4.1**_^1_%EXT MINTO_(CURRENT MINUTES_2*€€*MSOS 4.1**_^1_%EXT SECON_(CURRENT SECONDS_2**MSOS 4.1**_^1_%EXT HORMIN_'CURRENT 24 HOUR TIME_-**MSOS 4.1**_^1_%EXT TOTMIN_'CURRENT TIME IN TOTAL MINUTES_#**MSOS 4.1**_^1_%EXT AYERTO_'CURRENT YEAR (ASCII)_-**MSOS 4.1**_^1_%EXT AMONTO_'CURRENT MONTH (ASCII)_,**MSOS 4.1**_^1_%EXT ADAYTO_'CURRENT DAY (ASCII)_.**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1* PROGRAM EQUIVALENCES_D**MSO€€S 4.1**_^1_%EQU P(4)_)REQUEST/COMPLETION PRIORITY_%**MSOS 4.1**_^1_%EQU ZERO($22)_#CELL CONTAINING 0_0**MSOS 4.1**_^1_%EQU LUCMNT($FC)_!COMMENT DEVICE L. U._-**MSOS 4.1**_^1_%EQU FOUR($25)_#CELL CONTAINING 4_0**MSOS 4.1**_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_/**MSOS 4.1**_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_,**MSOS 4.1**_^1_%EQU TEN($46)_$CELL CONTAINING 10_/**MSOS 4€€.1**_^1_%EQU LPMSK(2)_$RIGHT JUSTIFIED MASKS_,**MSOS 4.1**_^1_%EJT_Q**MSOS 4.1**_^1TDFUNC NUM $C8FE_(FIND OUT PROGRAM LOCATION_(**MSOS 4.1**_^1_%STA GIVBAK_'SAVE IN RELEASE REQUEST_***MSOS 4.1**_^1_%QLS 1_,TWO WORD RELATIVE JUMPS_***MSOS 4.1**_^1_%JMP* VECTOR,Q_$GET PROGRAM SECTION ADDRESS_%**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1VECTOR JMP CALNDR_'CALENDER UPDATE_2**MSOS 4.1*€€*_^1_%JMP ENTRY_(DATE/TIME ENTRY_2**MSOS 4.1**_^1_%JMP DISPLY_'DATE/TIME DISPLAY_0**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$CALENDAR UPDATE PROCESSOR_;**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1CALN€€DR LDA (MONX)_'CHECK MONTH_6**MSOS 4.1**_^1_%INA -8_M**MSOS 4.1**_^1_%SAP X_,IS MONTH LESS THAN 8_-**MSOS 4.1**_^1_%INA 8-2_*YES_>**MSOS 4.1**_^1_%SAZ FEBCHK_'IS MONTH EQUAL TO 2 (FEB)_(**MSOS 4.1**_^1_%INA 1_N**MSOS 4.1**_^1X_$ALS 15_M**MSOS 4.1**_^1_%SAM Y_,DOES MONTH HAVE 31 DAYS_***MSOS 4.1**_^1_%ENA -31_*YES, MONTH HAS 31 DAYS_+**MSOS 4.1**_^1_%JMP* Z_N**MSOS 4.1**_^1€€Y_$ENA -30_*NO, MONTH HAS 30 DAYS_,**MSOS 4.1**_^1Z_$ADD* (DAYX)_'CHECK DAY_8**MSOS 4.1**_^1_%SAP MNTHCK_'IS THIS LAST DAY OF MONTH_(**MSOS 4.1**_^1_%RAO* (DAYX)_'NO, ADD ONE TO DAY_/**MSOS 4.1**_^1_%JMP* DOASC_J**MSOS 4.1**_^1FEBCHK ENA 3_,FEBRUARY DAY CHECK_/**MSOS 4.1**_^1_%ADD* (YEARX)_H**MSOS 4.1**_^1_%SAZ L_,IS THIS LEAP YEAR_0**MSOS 4.1**_^1_%ENA -28_*NOT LEAP YEAR_4**M€€SOS 4.1**_^1_%JMP* Z_N**MSOS 4.1**_^1L_$ENA -29_*LEAP YEAR_8**MSOS 4.1**_^1_%JMP* Z_N**MSOS 4.1**_^1MNTHCK ENA 1_,FIRST DAY OF MONTH_/**MSOS 4.1**_^1_%STA* (DAYX)_I**MSOS 4.1**_^1_%LDA* (MONX)_I**MSOS 4.1**_^1_%INA -12_L**MSOS 4.1**_^1_%SAM INCMON_'WAS THIS THE 12TH MONTH_***MSOS 4.1**_^1_%ENA 0_,YES, SET MONTH TO JANUARY_(**MSOS 4.1**_^1_%STA* (MONX)_I**MSOS 4.1**_^1_%RAO* (Y€€EARX)_%ADD ONE TO YEAR_2**MSOS 4.1**_^1INCMON RAO* (MONX)_'ADD ONE TO MONTH_1**MSOS 4.1**_^1DOASC LDA* (YEARX)_%CONVERT YEAR, MONTH, DAY TO ASCII **MSOS 4.1**_^1_%RTJ* DECASC_I**MSOS 4.1**_^1_%STA* (AYEARX)_G**MSOS 4.1**_^1_%LDA* (MONX)_I**MSOS 4.1**_^1_%RTJ* DECASC_I**MSOS 4.1**_^1_%STA* (AMONX)_H**MSOS 4.1**_^1_%LDA* (DAYX)_I**MSOS 4.1**_^1_%RTJ* DECASC_I**MSOS 4.1**_^1_%STA* (A€€DAYX)_H**MSOS 4.1**_^1_%JMP DISPLY_'GO TO PRINT NEW DATE/TIME_(**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$DATE/TIME ENTRY PROCESSOR_;**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^€€1*_Z**MSOS 4.1**_^1*_$REQUEST OPERATOR TO ENTER DATE/TIME_1**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1ENTRY FWRITE LUCMNT,DATER-*+1,MESAG1-*+5,15,A,P,P,I,R_#**MSOS 4.1**_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_.**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$READ DATE/TIME ENTRY_@**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1DATER FREAD LUCMNT,DATEOT-*+1,DATE-*+5,5,A,P,P,I,R_'**MSOS 4.1**_^1_%JMP- (ADISP)_%WAIT FO€€R COMPLETION_.**MSOS 4.1**_^1DATEOT SQP YEAR-*-1_$SKIP IF READ GOOD_0**MSOS 4.1**_^1_%JMP ERROR_J**MSOS 4.1**_^1YEAR_!LDA DATE+2_I**MSOS 4.1**_^1_%RTJ STRIP_(VALIDATE ITS A NUMBER_,**MSOS 4.1**_^1_%LDQ DATE+2_'RESTORE ASCII DATE+2 (YEAR)_%**MSOS 4.1**_^1_%STQ* (AYEARX)_$SAVE ASCII YEAR_2**MSOS 4.1**_^1_%RTJ ASCDEC_I**MSOS 4.1**_^1_%STA* (YEARX)_%SAVE INTEGER YEAR_0**MSOS 4.1*€€*_^1_%CLR Q_^1_%DVI- FOUR_^1_%STQ* LEAPYR_'SAVE LEAP YEAR INDICATOR_^1_%LDA* DATE_)MONTH_^1_%RTJ STRIP_(VALIDATE ITS A NUMBER_,**MSOS 4.1**_^1_%LDA* DATE_^1_%TRA Q_^1LMITLO SUB =N$3031_^1_%SAP MONTOK-*-1_"SKIP IF LO LIMIT OF MONTH LEGAL_^1_%JMP ERROR_J**MSOS 4.1**_^1MONTOK SUB =N$102_^1_%SAM OKMONT-*-1_"SKIP IF MONTH LEGAL_^1_%JMP ERROR_J**MSOS 4.1**_^1OKMONT STQ* (AMONX)_€€%SAVE ASCII MONTH_1**MSOS 4.1**_^1_%RTJ* ASCDEC_I**MSOS 4.1**_^1_%STA* (MONX)_'SAVE INTEGER MONTH_/**MSOS 4.1**_^1_%LDA* DATE+1_^1_%RTJ* STRIP_(VALIDATE ITS A NUMBER_^1_%LDA* DATE+1_^1_%SUB* LMITLO+1_$$3031_^1_%SAP LODAY-*-1_#SKIP IF LO LIMIT OF DAY OK_^1_%JMP ERROR_J**MSOS 4.1**_^1LODAY SUB =N$208_^1_%SAP LEPYER-*-1_"SKIP IF 29,30,31_^1_%JMP* DAYOUT_^1LEPYER LDA* DATE_^1_%SUB€€ =N$3032_^1_%SAN CK3031-*-1_"SKIP IF NOT FEBRUARY_^1_%LDQ* LEAPYR_^1_%SQZ CK29DY-*-1_"SKIP IF LEAP YEAR_^1_%JMP* ERROR_^1CK29DY LDA* DATE+1_^1_%SUB =N$3239_^1_%SAN 1_,SKIP IF MORE THAN 29_^1_%JMP* DAYOUT_^1_%JMP* ERROR_^1CK3031 LDA* DATE+1_'DAY_^1_%SUB* N3331+1_^1_%SAP CK31DY-*-1_"SKIP IF GREATER THAN 30 DAYS_^1_%JMP* DAYOUT_^1CK31DY LDA* DATE_)MONTH_^1_%TRA Q_^1_%SUB =N$30€€38_^1_%SAP EVEN-*-1_$SKIP IF GREATER THAN 7_^1_%LRS 1_^1_%SAM MAXDAY-*-1_"SKIP IF ODD MONTH_^1_%JMP* ERROR_^1EVEN_!LRS 1_^1_%SAP MAXDAY-*-1_"SKIP IF EVEN MONTH_^1_%JMP* ERROR_^1*_Z**MSOS 4.1**_^1* EXTERNAL POINTERS_G**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1MONX_!ADC MONTO_J**MSOS 4.1**_^1HRMNX ADC HORMIN_I**MSOS 4.1**_^1DAYX_!ADC DAYTO_J**MSOS 4.1**_^1AMONX ADC AMONTO_I**MSOS 4€€.1**_^1ADAYX ADC ADAYTO_I**MSOS 4.1**_^1MNX_"ADC MINTO_J**MSOS 4.1**_^1SCX_"ADC SECON_J**MSOS 4.1**_^1HRX_"ADC HORTO_J**MSOS 4.1**_^1AYEARX ADC AYERTO_I**MSOS 4.1**_^1YEARX ADC YERTO_J**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1MAXDAY LDA* DATE+1_^1N3331 SUB =N$3331_^1_%SAZ DAYOUT-*-1_"SKIP IF 31 DAYS_^1_%JMP* ERROR_^1DAYOUT LDA* DATE+1_^1_%STA* (ADAYX)_%SAVE ASCII DAY_3**MS€€OS 4.1**_^1_%TRA Q_N**MSOS 4.1**_^1_%RTJ* ASCDEC_I**MSOS 4.1**_^1_%STA* (DAYX)_'SAVE INTEGER DAY_1**MSOS 4.1**_^1_%LDA* DATE+3_'GET HOUR ENTRY_3**MSOS 4.1**_^1_%RTJ* STRIP_(VALIDATE NUMERIC_1**MSOS 4.1**_^1_%LDQ* DATE+3_'CONVERT TO INTEGER_/**MSOS 4.1**_^1_%RTJ* ASCDEC_I**MSOS 4.1**_^1_%STA* HRSAV_(SAVE NEW HOURS_3**MSOS 4.1**_^1_%INA -24_*VALID VALUE 0-23_0**MSOS 4.1**_^1_%SAM €€ HOUROK_I**MSOS 4.1**_^1_%JMP* ERROR_(INVALID VALUE_4**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1DECASC NUM 0_,DECIMAL TO ASCII SUBROUTINE_%**MSOS 4.1**_^1_%CLR Q_N**MSOS 4.1**_^1_%DVI- TEN_*UNITS TO Q, TENS TO A_,**MSOS 4.1**_^1_%INQ $30_*ADD ASCII NUMBER BASE_,**MSOS 4.1**_^1_%INA $30_L**MSOS 4.1**_^1_%ALS 8_N**MSOS 4.1**_^1_%AAQ A_,FORM ASCII EQUIVALENT_,**MSOS 4.1**_^1_%JMP* €€(DECASC)_G**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1HOUROK LDA* DATE+4_'GET MINUTE ENTRY_1**MSOS 4.1**_^1_%RTJ* STRIP_(VALIDATE NUMERIC_1**MSOS 4.1**_^1_%LDQ* DATE+4_'CONVERT TO INTEGER_/**MSOS 4.1**_^1_%RTJ* ASCDEC_I**MSOS 4.1**_^1_%STA* MINSAV_'SAVE NEW MINUTES_1**MSOS 4.1**_^1_%INA -60_*VALID VALUE 0-59_1**MSOS 4.1**_^1_%SAM MINOK_J**MSOS 4.1**_^1_%JMP* ERROR_(INVALID VALUE_4**M€€SOS 4.1**_^1MINOK LDA* HRSAV_(COMPUTE 24-HOUR TIME_-**MSOS 4.1**_^1_%MUI =N100_J**MSOS 4.1**_^1_%ADD* MINSAV_I**MSOS 4.1**_^1_%IIN 0_,LOCK OUT TOD WHILE CHANGING TIME **MSOS 4.1**_^1_%STA* (HRMNX)_%SAVE 24-HOUR TIME_0**MSOS 4.1**_^1_%LDA* HRSAV_(COMPUTE TOTAL MINUTES_,**MSOS 4.1**_^1_%STA* (HRX)_(SAVE NEW HOURS_3**MSOS 4.1**_^1_%MUI =N60_K**MSOS 4.1**_^1_%ADD* MINSAV_I**MSOS 4€€.1**_^1_%STA+ TOTMIN_'SAVE TOTAL MINUTES_/**MSOS 4.1**_^1_%LDA* MINSAV_I**MSOS 4.1**_^1_%STA* (MNX)_(SAVE MINUTES_5**MSOS 4.1**_^1_%CLR A_,ZERO SECONDS_5**MSOS 4.1**_^1_%STA* (SCX)_J**MSOS 4.1**_^1_%EIN 0_N**MSOS 4.1**_^1_%JMP* DISPLY_'GO TO PRINT DATE/TIME_,**MSOS 4.1**_^1LEAPYR NUM 0_^1*_Z**MSOS 4.1**_^1*_$RELEASE CORE AND EXIT_?**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1RLS_"RTJ- (AMON€€I)_H**MSOS 4.1**_^1_%NUM $1801_(RELEASE GETDAY,1_^1GIVBAK NUM 0_,RETURN ADDRESS_^1*_Z**MSOS 4.1**_^1*_$DATE/TIME ENTRY BUFFER_>**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1DATE_!NUM 0_,MM_^1_%NUM 0_,DD_^1_%NUM 0_,YY_^1_%NUM 0_,HH_?**MSOS 4.1**_^1_%NUM 0_,MM_?**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1HRSAV NUM 0_N**MSOS 4.1**_^1MINSAV NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1ASCDE€€C NUM 0_,ASCII-DECIMAL CONVERSION_)**MSOS 4.1**_^1_%TRQ A_N**MSOS 4.1**_^1_%AND- LPMSK+4_H**MSOS 4.1**_^1_%STA* UNIT_)SAVE UNITS COMPONENT_-**MSOS 4.1**_^1_%TRQ A_N**MSOS 4.1**_^1_%ARS 8_N**MSOS 4.1**_^1_%AND- LPMSK+4_H**MSOS 4.1**_^1_%MUI- TEN_*COMPUTE TENS COMPONENT_+**MSOS 4.1**_^1_%LDQ* UNIT_K**MSOS 4.1**_^1_%AAQ A_,DECIMAL VALUE_4**MSOS 4.1**_^1_%JMP* (ASCDEC)_G**MSOS 4.1€€**_^1UNIT_!NUM 0_N**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$DATE/TIME ENTRY NUMERIC CHECK SUBROUTINE_,**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1STRIP NOP 0_^1LOOPNO CLR Q_^1_%LLS 8_^1_%INQ -$30_^1_%SQM ERROR-*-1_#SKIP IF ERROR_^1_%INQ -10_^1_%SQP ERROR-*-1_#SKIP IF ERROR_^1_%SAZ RTN_*SKIP IF DONE_5**MSOS 4.1**_^1_%JMP* LOOPNO_^1RTN_"JMP* (STRIP)_%EXIT_=**MSOS 4.€€1**_^1*_Z**MSOS 4.1**_^1*_$DATE/TIME ENTRY ERROR MESSAGE_7**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1ERROR FWRITE LUCMNT,ENTRY-*+1,MESAG2-*+5,12,A,P,P,I,R_#**MSOS 4.1**_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_.**MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$DATE/TIME PRINTING PROCESSOR_8**MSOS 4.1**_^1*_Z€€**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1_%SPC 2_N**MSOS 4.1**_^1DISPLY LDA* (ADAYX)_%GET ASCII DATE_3**MSOS 4.1**_^1_%STA* DTBUF+3_%PUT IN MESSAGE_3**MSOS 4.1**_^1_%LDQ* (MONX)_'GET INTEGER MONTH_0**MSOS 4.1**_^1_%INQ -1_+ADJUST FOR INDEXING_.**MSOS 4.1**_^1_%QLS 1_,USE AS INDEX INTO MONTH ASCII_#**MSOS 4.1**_^1_%LDA* MONBUF,Q_G*€€*MSOS 4.1**_^1_%STA* DTBUF+4_%PUT IN MESSAGE FIRST 2 CHAR_%**MSOS 4.1**_^1_%INQ 1_N**MSOS 4.1**_^1_%LDA* MONBUF,Q_G**MSOS 4.1**_^1_%STA* DTBUF+5_%PUT IN MESSAGE 2ND 2 CHAR_(**MSOS 4.1**_^1_%LDQ =N$2020_H**MSOS 4.1**_^1_%LDA* (AYEARX)_$GET ASCII YEAR_3**MSOS 4.1**_^1_%LLS 8_N**MSOS 4.1**_^1_%STQ* DTBUF+6_%PUT IN MESSAGE_3**MSOS 4.1**_^1_%STA* DTBUF+7_H**MSOS 4.1**_^1_%LDA* (HRX)_€€(GET HOURS_8**MSOS 4.1**_^1_%RTJ* DECASC_'CONVERT TO ASCII_1**MSOS 4.1**_^1_%STA* DTBUF+12_$PUT IN MESSAGE_3**MSOS 4.1**_^1_%LDA* (MNX)_(GET MINUTES_6**MSOS 4.1**_^1_%RTJ* DECASC_'CONVERT TO ASCII_1**MSOS 4.1**_^1_%STA* DTBUF+13_$PUT IN MESSAGE_3**MSOS 4.1**_^1_%LDA* (SCX)_(GET SECONDS_6**MSOS 4.1**_^1_%RTJ* DECASC_'CONVERT TO ASCII_1**MSOS 4.1**_^1_%LDQ =N$203A_%SPACE,COLON_6**MS€€OS 4.1**_^1_%LLS 8_N**MSOS 4.1**_^1_%STQ* DTBUF+14_G**MSOS 4.1**_^1_%STA* DTBUF+15_$PUT IN MESSAGE_3**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$PRINT DATE/TIME_E**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1_%FWRITE LUCMNT,RLS-*+1,DTBUF-*+5,16,A,P,P,I,R_'**MSOS 4.1**_^1_%JMP- (ADISP)_%WAIT FOR COMPLETION_.**MSOS 4.1**_^1MESAG1 ALF 14,ENTER DATE/TIME MMDDYYHHMM_1**MSOS 4.1**_^1_%NUM $0A0D_^1MESAG2 €ALF 11,DATE/TIME ENTRY ERROR_7**MSOS 4.1**_^1_%NUM $0A0D_J**MSOS 4.1**_^1MONBUF ALF Z, JAN FEB MAR APR MAY JUN JUL AUG SEP OCTZ_#**MSOS 4.1**_^1_%ALF Z, NOV DECZ_D**MSOS 4.1**_^1DTBUF ALF Z,DATE: DD MMM YY_!TIME: HHMM:SS Z_,**MSOS 4.1**_^1_%NUM $0A0D_J**MSOS 4.1**_^1_%END_]_^__PSYSCOP CSY/ H27 P€1_%NAM SYSCOP_'DECK-ID H27 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$SYSTEM CHECKOUT PROGRAM - MAIN_^1_%EXT SYSSEG_'ORDINAL FOR CHECKOUT SEGMENTS_^1_%EXT COBOPS_'STARTING SECTOR OF IMAGE_)**MSOS 4.1**_^1_%EQU ADISP($EA),ZER€€O($22)_^1_%EQU CP(3)_(PRIORITY LEVEL OF PROGRAM_^1_%EQU BLOCK(96)_#LENGTH OF SECTOR_^1_%EQU L(1)_)NO. OF BLOCKS PER SEGMENT (SECTORS)_^1_%EQU SEGSIZ(L*BLOCK)_^1_%EQU ASEC(15)_$WORD IN AUTOLOAD SECTOR WITH IMAGE SEC._^1_%EQU LDA(1),CON(3),LST(5),WRT(7),ANS(9),ATA(11),CNS(13),GMS(15)_^1_%EQU MOP(17)_^1_%EQU CMP(19)_J**MSOS 4.0_^1_%SPC 2_^1_%EQU CKOUT(*)_$START OF THE C/O PR€€OGRAM_^1HERE_!RTJ* TRVTBC_^1_%EJT_]_^1_%EQU SEGMNT(*)_^1*_*SET UP SEGMENT- PART OF EXEC-IT IS NOT READ IN AS A SEGMENT_^1*_(AREA IS USED TO READ IN SUBSEQUENT SEGMENTS_^1_%SPC 2_^1_%SPC 2_^1SETUP NUM 0_^1_%LDQ =X(CKOUT-XFERTB) GET THE STARTING ADDRESS OF C/O PROG._^1_%ADQ- I_^1_%STQ FILE2_^1_%LDA =XCALEXT-CKOUT_^1_%AAQ A_^1_%STA CALL+2_'SET UP ABSOLUTE CALL COMPLETION_^1_€€%LDQ =XSYSSEG_$FIND SEGMENTS_^1_%ADQ- $EB_^1_%LDA- 6,Q_'LSB OF MASS SEG SECTOR_^1_%STA* LSB_^1_%STA MESSIM_'FOR MESSAGES_^1_%LDQ =X(INTMES-XFERTB)_^1_%ENA LINTMS_^1_%RTJ- LST,I_(PRINT INITIAL MESSAGE_^1*_]_^1_%LDQ- $E9_*ADDR OF EX. COMMUNICATIONS REGION_!**MSOS 4.0_^1_%LDA- 4,Q_*ADDR OF CORE IMAGE_1**MSOS 4.0_^1_%STA AUTOIM_'SAVE AUTOLOAD IMAGE SECTOR_)**MSOS 4.0_^1*_]_^1_%LDA€€ =XCOBOPS_$GET STARTING SECTOR_^1_%RTJ- CON,I_(CONVERT TO ASCII_^1_%STA* IMGSEC_^1_%STQ* IMGSEC+1_^1_%LDQ =X(LOCMES-XFERTB)_>**MSOS 4.1**_^1_%ENA LLOCMS_^1_%RTJ- LST,I_(OUTPUT LOCATION OF IMAGE_^1_%CLR A_^1_%STA* SETUP-1_$START WITH SEG ZERP_^1_%JMP* FRD1_)BY PASS INCREMENTING SEGMENT_^1SETTMP NUM 0_^1*_]_^1*_*MESSAGES_^1*_]_^1INTMES NUM 0_^1_%ALF .,SYSCOP START._%INITIAL M€€ESSAGE_^1_%EQU LINTMS(*-INTMES-1)_^1*_]_^1LOCMES NUM 0_^1_%ALF .,IMAGE START SECTOR IS._"LOCATION MESSAGE_^1IMGSEC ALF .,_"._H**MSOS 4.1**_^1_%EQU LLOCMS(*-LOCMES-1)_^1_%SPC 2_^1TRVTBC ADC 0_,ABSOLUTIZE ADDRESS FOR SEGMENTS_^1_%LDA =XXFERTB-HERE-1_^1_%ADD* TRVTBC_^1_%STA TRVTB_L**MSOS 4.0_^1_%LDA* TRVTBC_'SAVE ABS ADDRESS OF SEGMENT_(**MSOS 4.0_^1_%STA SEGADR_'USED BY CON€€VST_5**MSOS 4.0_^1ADRCAL RTJ* *+1_*CALCULATE ABS ADDR OF CP AND_'**MSOS 4.0_^1_%ADC 0_,BUFFER ADDRESS_5**MSOS 4.0_^1_%LDA* *-1_N**MSOS 4.0_^1_%INA CA1-ADRCAL-1_E**MSOS 4.0_^1_%STA* FRD1+2_'COMPLETION ADDRESS_1**MSOS 4.0_^1_%LDA* ADRCAL+1_I**MSOS 4.0_^1_%INA SEGMNT-ADRCAL-1_B**MSOS 4.0_^1_%STA* FRD1+6_'BUFFER ADDRESS_5**MSOS 4.0_^1_%JMP* CA1_^1_%SPC 2_^1_%BZS SEGFIL(SEGSIZ-*+SE€€GMNT)_'FILLER FOR REST OF SEG._^1_%SPC 5_^1*_*CELLS FOR SEGMENT COMMUNICATION --MUST FOLLOW SEGMENT AREA_^1_%SPC 2_^1SEGOP NUM 0_,MESSAGE OPTION_^1SEGIFG NUM 0_,INTIAL IMAGE FLAG_^1SEGMFG NUM 0_,MAIN MESSAGE OUT FLAG_^1SEGC1 NUM 0_^1SEGC2 NUM 0_^1SEGC3 NUM 0_^1SEGC4 NUM 0_^1_%EJT_]_^1*_*FETCH SECTOR ON WHICH THE FIRST CHECKOUT SEGMENT STARTS_^1*_*AND COMPUTE THE ADDRE€€SS OF THE SEGMENT BUFFER. IF NO_^1*_*FURTHER SEGMENTS REMAIN TO BE PROCESSED, EXIT TO THE_^1*_*DONE ROUTINE. OTHERWISE INPUT SEGMENT INTO BUFFER._^1_%SPC 2_^1FRD1_!FREAD $C2,CA1,SEGMNT,SEGSIZ,B,0,3,I,0_0**MSOS 4.0_^1MSB_"ADC 0_,SEGMENT MM ADDRESS_^1LSB_"ADC 0_^1_%JMP- ($EA)_$EXIT TO DISPATCHER_^1_%SPC 2_^1*_]_^1*_*RE-ENTER HERE ON COMPLETION OF TRANSFER_^1*_]_^1CA1_"LDQ* TRVT€€B_$FETCH ADDRESS OF TRANSFER VECTOR_^1_%STQ- I_)AND SAVE IN I_^1_%RTJ* SEGMNT_'INITIATE SEGMENT OPERATION_^1_%ADQ* SEGMNT-1_^1_%STQ* SEGMNT-1_^1_'ADQ* MESSIM_^1_%STQ* LSB_*BUMP SEGMENT TO CORRECT VALUE_^1_%JMP* FRD1_%READ IN NEXT SEGMENT_^1 EJT_]_^1*_\**MSOS 4.0_^1*_*ADDRESS COMPARE ROUTINE_:**MSOS 4.0_^1*_\**MSOS 4.0_^1*_*A.GT.Q DIFFERENCE RETURNED IN A_1**MSOS 4.0_^1*_*A.EQ.Q A€€ RETURNED ZERO_:**MSOS 4.0_^1*_*A.LT.Q A RETURNED FFFF_:**MSOS 4.0_^1*_]_^1COMPAR SAM AUPPER_'A IN UPPER BANK_4**MSOS 4.0_^1_%SQP BTHSAM_'BOTH IN LOWER BANK_1**MSOS 4.0_^1_%JMP* QBIGR_(A IN LOWER, Q IN UPPER_-**MSOS 4.0_^1AUPPER SQM BTHSAM_'BOTH IN UPPER BANK_1**MSOS 4.0_^1_%TCQ Q_,A IN UPPER BANK, Q IN LOWER_(**MSOS 4.0_^1_%AAQ A_,DIFFERENCE TO A_4**MSOS 4.0_^1_%JMP* ABIGR_L€€**MSOS 4.0_^1BTHSAM TCQ Q_P**MSOS 4.0_^1_%AAQ A_,SUBTRACT Q FROM A_2**MSOS 4.0_^1_%SAP ABIGR_L**MSOS 4.0_^1QBIGR SET A_,Q IS LARGER - A=FFFF_/**MSOS 4.0_^1ABIGR JMP (CMPENT)_$EXIT_^1 EJT_]_^1_%EJT_]_^1*_*THE LOADA ROUTINE IS ENTERED VIA THE TRANSFER VECTOR._^1*_*THIS ROUTINE FETCHES IN THE A REGISTER, THE REQUESTED_^1*_*WORD WHOSE ADDRESS IS CONTAINED IN THE A REGISTER. SIN€€CE_^1*_*THE IMAGE IS ON MASS MEMORY, THE FOLLOWING COMPUTATIONS_^1*_*ARE REQUIRED._^1*_8Q REGISTER IS SAVED_^1_%SPC 5_^1LOADA STQ* TEMP_)SAVE Q_^1_%CLR Q_,N/96 = Q + R_!(SECTOR AND WORD)_^1_%DVI* MMR1+5_'SECTOR LENGTH_^1_%STQ* WORD_^1ADDIM ADD* IMAGE_(SECTOR WHERE IMAGE STARTS_^1_%TRA Q_^1_%SUB* SECT_)IS RIGHT SECTOR HERE_^1_%SAZ LOADIT_^1_%STQ* SECT_)SAVE NEW SECTOR_^1MMR1_!€€FREAD $C2,COMP-MMR1-1,MMBUF-MMR1-1,BLOCK,B,0,3,I,M_^1_%NUM 0_)MSB_^1SECT_!NUM $7FFF_$LSB_"INITIALLY NOTHING IN BUFFER_^1_%JMP- (ADISP)_"EXIT TO DISPATCHER_^1COMP_!LDA* TRVTB_(RESTORE I_^1_%STA- I_^1LOADIT LDA =X($800+IMAGE-ADDIM)_$ADD* IMAGE INSTRUCTION_^1_%STA* ADDIM_^1_%LDQ* WORD_%FETCH WORD REQUESTED IN A_^1_%LDA MMBUF,Q_^1_%LDQ* TEMP_)RESTORE Q_^1_%JMP (LDAENT)_$RETURN TO €€USER_5**MSOS 4.0_^1*_]_^1IMAGE ADC COBOPS_'LSB OF IMAGE SECTOR_.**MSOS 4.1**_^1AUTOIM NUM 0_,LSB OF AUTOLOAD IMAGE_^1MESSIM NUM 0_,LSB OF SYSSEG_^1WORD_!ADC 0_)ADDR OF WORD IN SECTOR (0-95)_^1*_]_^1LOADA1 JMP* LOADA_^1_%SPC 10_^1*_]_^1*_*LOADA FROM THE AUTOLOAD IMAGE_^1*_]_^1AUTLDA RAO* ADDIM_(FIX IMAGE ADDRESS TO AUTOLOAD IMAGE_^1_%RTJ- LDA,I_^1_%JMP (AUTOA)_J**MSOS 4.0_^1_€€%SPC 10_^1*_]_^1*_*GET MESSAGE BLOCK INTO MMBUFF_^1*_]_^1GMESAG RAO* ADDIM_(FIX IMAGE ADDRESS TO SYSSEG_^1_%ADD SEGMNT-1_$RELATIVE SEGMENT NUM_^1_%MUI* MMR1+5_^1_%RTJ- ATA,I_^1_%JMP* (GMES)_^1_%EJT_]_^1*_*THIS CHECKS TO SEE IF MAIN MESSAGE HAS BEEN OUTPUT_^1*_*IF NOT IT IS OUTPUT. CORRECT MESSAGE BLOCK MUST BE_^1*_*IN CORE. A CONTAINS LENGTH OF MESSAGE. START IS FIRST_^1*_*WORD I€€N MMBUF._^1_%SPC 5_^1MMOP_!LDQ* SEGMFG_'CHECK MESSAGE OUT FLAG_^1_%SQN MEXT_)EXIT_^1_%ADD* SEGIFG_^1_%ENQ MMBUF-XFERTB_^1_%RTJ- LST,I_^1_%RAO* SEGMFG_^1MEXT_!JMP* (MOPT)_^1_%SPC 10_^1TRVTB NUM 0_,ABSOLUTIZE LOCATION OF XFERTB_^1_%EJT_]_^1*_*THE CONVRT ROUTINE IS ENTERED VIA THE TRANSFER VECTOR._^1*_*THIS ROUTINE CONVERTS THE HEX NUMBER CONTAINED IN THE_^1*_*A REGISTER ON ENTR€€Y TO ASCII. THE ASCII CONVERSION_^1*_*WILL BE STORED IN A AND Q ON RETURN. Q WILL CONTAIN_^1*_*THE LEAST SIGNIFICANT CHARACTERS AND A THE MOST._^1_%SPC 2_^1CONVRT RTJ* SEND_)CONVERT MSB_^1_%STQ* WLS_*SAVE MSB_^1_%RTJ* SEND_)CONVERT LSB_^1_%LDA* WLS_*GET MSB_^1_%JMP* (CONENT)_^1*_]_^1SEND_!ADC 0_)CONVERSION ROUTINE_^1_%RTJ* SEND1_^1_%QLS 8_^1_%STQ* TEMP_^1_%RTJ* SEND1_^1_%ADQ*€€ TEMP_^1_%JMP* (SEND)_^1*_]_^1SEND1 ADC 0_^1_%CLR Q_^1_%LLS 4_^1_%INQ -$A_^1_%SQP SEND1A-*-1_^1_%INQ $3A_^1_%JMP* (SEND1)_^1SEND1A INQ $41_^1SEND1B JMP* (SEND1)_^1TEMP_!ADC 0_,TEMPORARY STORAGE_^1WLS_"EQU WLS(WORD)_#LEAST SIG. CHARACTERS_^1_%EJT_]_^1*_]_^1*_*CONVERT AND STORE IN ADDRESS IN Q_^1*_*A HAS THE HEX BUFFER TO OBTAIN VALUES AND THE LOCATION_^1*_*FOLLOWINF THE CA€€LL IS THE THE NUMBER OF VALUES TO BE DONE._^1*_]_^1_%SPC 2_^1CONVST STQ* TEMP1_(RELATIVE ADDRESS OF ASCII BUFFER_^1_%ADD* SEGADR_'SAVE ABS ADDR OF HEX BUFFER_(**MSOS 4.0_^1_%STA* TEMP2_**MSOS 4.0_^1_%STA* DPC1_^1_%LDA* DP4CHR_^1_%INA -$2C_)CHECK FOR COMMA_^1_%SAN DP110_(INVA€€LID TRY AGAIN_^1*_]_^1DP42_!STA* DP4VAL_'CLEAR VALUE_^1_%RTJ* DP4GFD_^1_%LDQ* DPC4_)MODE FLAG FROM EXTENDED CORE TABLE SYSCOP 2.0_^1_%SQN 1_,SKIP IF 65K MODE_3**MSOS 4.0_^1_%SAM DP110_^1*_8A=UPPER BOUND_^1_%LDQ* DPC1_)Q=LOWER BOUND_6**MSOS 4.0_^1_%RTJ- CMP,I_(COMPARE - AA RETURNED POSITIVE OK_!**MSOS 4.0_^1_%SAP DP43_)OK_^1_%CLR A_,1 CELL ONLY_^1*_]_^1DP43_!STA* DPC2_)NUM OF CE€€LLS IS 1 MORE THAN DPC2_^1*_YSYSCOP 2.0_^1_%STA* DPC3_)INITIALIZE C3 AND C4_,SYSCOP 2.0_^1*_$STA* DPC4_(FOR NEXT SEGMENT_0SYSCOP 2.0_^1*_YSYSCOP 2.0_^1_%ENQ WDPN-DPN_^1_%JMP* (DP)_)EXIT TO DUMP_^1_%SPC 5_^1DP110 ENQ LDPA1_(NULL OUT BUFFER_^1_%SET A_^1DP111 STA- DPA1,B_^1_%INQ -1_^1_%SQZ DP112_^1_%JMP* DP111_^1DP112 JMP* DP11_)TRY AGAIN_^1_%SPC 5_^1*_8GETFIELD_^1DP4GFD NU€€M 0_^1DP4GF1 LDQ* DP4CTR_^1_%LDA- DPA1+2,B_$GET NEXT CHAR_^1_%LDQ* DP4LFG_^1_%SQN DP4GF2_^1_%RAO* DP4LFG_'LOWER NEXT TIME_^1_%ALS 8_,MOVE TO LOWER_^1_%JMP* DP4GF3_^1*_]_^1DP4GF2 CLR Q_^1_%STQ* DP4LFG_'UPPER NEXT TIME_^1_%RAO* DP4CTR_'NEXT WORD ALSO_^1*_]_^1DP4GF3 AND- $A_+SAVE LAST CHAR._^1_%STA* DP4CHR_^1_%INA -$30_)CONVERT TO HEX_^1_%SAM DP4GF6_'NOT LEGAL NUM_^1_%INA -$3A+€€$30_^1_%SAP DP4GF5_'CHECK ALPHA_^1_%INA $A_^1DP4GF4 ALS 12_^1_%LDQ* DP4VAL_'COMBINE WITH PAST VALUES_^1_%LLS 4_^1_%STQ* DP4VAL_^1_%JMP* DP4GF1_'NEXT_^1*_]_^1DP4GF5 INA -$41+$3A_$ALPHA HEX_^1_%SAM DP4GF6_'ILLEGAL_^1_%INA -$47+$41_^1_%SAP DP4GF6_'ILLEGAL_^1_%INA 16_^1_%JMP* DP4GF4_^1*_]_^1DP4GF6 LDA* DP4VAL_'EXIT END OF FIELD_^1_%JMP* (DP4GFD)_^1*_]_^1DP4CTR NUM 0_^1DP4LFG €€NUM 0_^1DP4VAL NUM 0_^1DP4CHR NUM 0_^1_%SPC 5_^1_%BZS DPFIL(SEGSIZ-*+DP)_^1_%EJT_]_^1*_]_^1*_*DUMP CORE PART W_^1*_]_^1_%STRTSG WDP_^1_%SPC 5_^1*_YSYSCOP 2.0_^1*_*WDPC3 AND WDPC4 = 0 ON ENTRY_2SYSCOP 2.0_^1*_YSYSCOP 2.0_^1*_*WDPC3 = LAST CHAR OF LAST LINE_^1*_]_^1*_*WDPC4 = -1, NOT A MATCH_^1*_30, MATCH_^1*_31, MATCH, DUP LINE ** PRINTED_^1*_]_^1DP5_"LDA* WDPC1_(GET START_^1_€€%STA* DP5BUF_^1_%CLR Q_^1DP51_!LDA* WDPC1_^1_%RAO* WDPC1_^1_%RTJ- LDA,I_(GET CELLS_^1_%STA* DP5BUF+1,Q_^1_%STA* DP80_)SAVE CURRENT WORD_^1_%LDA* WDPC4_^1_%SAM DP51B_(SKIP IF MISMATCH ALREADY FOUND_^1_%LDA* WDPC3_(CHECK WITH LAST WORD OF LINE FOR MATCH_^1_%EOR* DP80_^1_%SAZ DP51B_^1_%ENA -1_+SET FLAG FOR A MISMATCH_^1_%STA* WDPC4_^1DP51B TRQ A_^1_%SUB* WDPC2_^1_%SAP DP53_)ALL€€ DONE Q HAS NUM OF CELLS -1_^1_%INQ -7_^1_%SQN DP52_^1_%INQ 1_^1_%RAO* WDPC2_^1_%LDA* WDPC1_^1_%STA* DP5BUF+9_^1DP52_!INQ -16+7_^1_%SQP DP53_)DONE WITH BUFFER_^1_%INQ 17_+BUMP_^1_%JMP* DP51_^1DP53_!LDA* WDPC2_^1_%INA -17_^1_%STA* WDPC2_(REDUCE NUMBER TO DUMP_^1_%SAP DP54_)MORE TO DO_^1_%INQ 2_^1_%STQ* DP5NUM_^1*_]_^1DP54_!ENA DPMXN-WDPN_"GET MESSAGE BLOCK_^1_%RTJ- GMS,I_^€€1_%LDA* WDPC4_^1_%SAM DP54B_(NO MATCH, RESET FLAG AND PRINT_^1_%SAZ DP54A_(MATCH, GO PRINT **_^1_%JMP* DP57_)** ALREADY PRINTED - CONTINUE ON_^1DP54A ENA 1_,DUPLICATE LINE_^1_%ENQ DPM4_)PRINT **_^1_%RTJ- LST,I_^1_%RAO* WDPC4_(SET PRINT FLAG TO 1_^1_%JMP* DP57_)RETURN FOR NEXT LINE_^1DP54B RAO* WDPC4_(RESET FLAG TO ZERO_^1DP55_!CONSTR 18,DP5BUF,DPM2+1,WDP,1_^1_%EQU DP5NUM(DP5€€5+3)_^1_%LDQ- $FB_*SET UP OUTPUT LOGICAL UNIT_^1_%ADQ =XLOG1A_^1_%LDQ- ($22),Q_^1_%LDA- 8,Q_^1_%ARS 11_^1_%AND- 6_^1_%INA -6_^1_%SAZ DP56_)TYLETYPE DEVICE FOR LIST 8 WORDS/LINE_^1_%CLR A_^1_%STA- DPM2V2,I_$NULL OUT FOR PRINTER_^1_%STA- DPM2V2+1,I_^1_%STA- DPM2V2+2,I_^1*_]_^1DP56_!LDA* DP5NUM_'LENGTH OF MESSAGE_^1_%MUI- 4_^1_%ENQ DPM2_^1_%RTJ- LST,I_^1DP57_!LDA* DP80_^1_%STA€€* WDPC3_(UPDATE LAST WORD OF PRINT LINE_^1_%LDA* WDPC2_^1_%SAM DP6_*ALL DONE_^1_%JMP* DP5_^1*_]_^1DP6_"ENQ DPN-WDPN_^1_%JMP* (WDP)_^1_%BZS DP80(1)_%CIRRENT WORD_^1*_]_^1_%BZS DP5BUF(18)_^1_%SPC 5_^1_%BZS WDPFIL(SEGSIZ-*+WDP)_^1_%EJT_]_^1*_]_^1*_*OPTION SELECTION MESSAGES PART X_^1*_]_^1_%STRMSG OPMX_^1_%SPC 5_^1_#MESSAG OPMX,OPM1,0,'SELECT OPTION:R',0_^1_%MESSAG OPMX,OPA1,0€€,' ',0_^1_#MESSAG OPMX,OPM2,2,' A_#Q_#I REGISTER:R',1,_^1_%MESSAG 'AAAA QQQQ IIII',0_^1_%MESSAG OPMX,OPM3,0,'FINISH SYSCOP',0_^1_%BZS OPMXFL(SEGSIZ-*+OPMX)_^1_%EJT_]_^1*_]_^1*_*LOCORE MESSAGES PART X_^1*_]_^1_%STRMSG LCMX_^1_%SPC 5_^1_%MESSAG LCMX,LCM2,1,'***LOCORE CONSTANT ERROR',0_^1_%ADDMES LCM2,LCM1,' INITIALLY'_^1_%MESSAG LCMX,LCM3,1,'BIT TABLE CHECKSUM ERROR',0_^1_%ME€€SSAG LCMX,LCM4,1,'ADDRESS IN ',1,'12 WAS ',1,_^1_%MESSAG '1234 BUT SHOULD BE ',1,'1234'_^1_%MESSAG LCMX,LCM6,1,'MAX CORE WAS ',1,'1234 WITH ',1,_^1_%MESSAG '1234 TO ',1,'1234 UNPROT'_^1_%ADDMES LCM6,LCM5,' (ERROR)'_^1_%MESSAG LCMX,LCM8,1,'MAXSEC WAS ',1,'12345678',0_^1_%ADDMES LCM8,LCM7,' (ERROR)'_^1_%BZS LCMXFL(SEGSIZ-*+LCMX)_^1_%EJT_]_^1*_]_^1*_*PRIORITY LEVEL MESSAGES-PART X_^1€€*_]_^1_%STRMSG PLMX_^1_%SPC 5_^1_%MESSAG PLMX,PLM1,1,'***POSSIBLE LEVEL HANGUP',0_^1_%MESSAG PLMX,PLM3,1,'PRI LVL WAS ',1,'1234',0_^1_%ADDMES PLM3,PLM2,' (ERROR)'_^1_%BZS PLMXFL(SEGSIZ-*+PLMX)_^1_%EJT_]_^1*_]_^1*_*DUMPCORE MESSAGES PARTX_^1*_]_^1_%STRMSG DPMX_^1_%SPC 5_^1_#MESSAG DPMX,DPM1,0,'DUMP :R',0_^1_%MESSAG DPMX,DPM2,0,'1234 0234 1234 2234 3234 4234 5234',1,_^1€€_%MESSAG ' 6234 7234',1,' :R1234 8234 9234 A234 B234 ',1,_^1_%MESSAG 'C234 D234 E234 F234 '_^1_%MESSAG DPMX,DPM3,0,'FINISH SYSCOP',0_^1_%MESSAG DPMX,DPA1,0,'_:',0_^1_%NUM $FFFF_^1*_]_^1*_$DUPLICATE LINE MESSAGE_^1*_]_^1_%MESSAG DPMX,DPM4,0,'**',0_^1_%BZS DPMXFL(SEGSIZ-*+DPMX)_^1*_]_^1_%SPC 5_^1_%SPC 5_^1*_$NEXT SEGMENT_^1*_]_^1_%EQU NEXTN(*/SEGSIZ-SYSSEG/SEGSIZ)_^1_€%END_]_^__ 6234 7234',1,' :RPCO2ND CSY/ H29 P€1_%NAM CO2ND_(DECK-ID H29 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1STRTSG MAC A_^1_%EQU 'A'(*)_^1_%EQU 'A'N('A'/SEGSIZ-SYSSEG/SEGSIZ)_^1_%EQU 'A'OP('A'+SEGSIZ)_^1_%EQU 'A'IFG('A'+SEGSIZ+1)_^1_%EQU 'A'MFG('A'+SEGSIZ+2)_^1_%EQU 'A'C1(€€'A'+SEGSIZ+3)_^1_%EQU 'A'C2('A'+SEGSIZ+4)_^1_%EQU 'A'C3('A'+SEGSIZ+5)_^1_%EQU 'A'C4('A'+SEGSIZ+6)_^1_%NUM 0_^1_%EMC_]_^1STRMSG MAC A_^1_%EQU S'A'(*-SYSSEG)_^1_%EQU 'A'(*)_^1_%EQU 'A'N(*/SEGSIZ-SYSSEG/SEGSIZ)_^1_%EMC_]_^1CONSTR MAC A,B,C,D,E_^1_%ENA 'B'-'D'_^1_%ENQ 'C'_^1_%RTJ- CNS,I_^1_%NUM 'A'_^1_%ADC 'E'+1_^1_%EMC_]_^1LISTIT MAC A_^1_%ENA L'A'_^1_%ENQ 'A'_^1_%RTJ-€€ LST,I_^1_%EMC_]_^1WRITIT MAC A_^1_%ENA L'A'_^1_%ENQ 'A'_^1_%RTJ- WRT,I_^1_%EMC_]_^1ANSWER MAC A_^1_%ENA L'A'_^1_%ENQ 'A'_^1_%RTJ- ANS,I_^1_%EMC_]_^1MESSAG MAC A,B,C,D,E,F,G,H,I,J_^1_%EQU 'B'(*-'A'+SEGCOR)_^1_%EQU S'B'(*)_^1_%NUM 'C'_^1_%ALF .,'D'._^1EM_#IFC 'E',NE,0_^1_%IFC 'E',EQ,1_^1_%EQU 'B'V1(*-'A'+SEGCOR)_^1_%ALF .,'F'._^1_%EIF_]_^1EM_#IFC 'G',NE,0_^1_%IFC 'G€€',EQ,1_^1_%EQU 'B'V2(*-'A'+SEGCOR)_^1_%ALF .,'H'._^1_%EIF_]_^1EM_#IFC 'I',NE,0_^1_%IFC 'I',EQ,1_^1_%EQU 'B'V3(*-'A'+SEGCOR)_^1_%ALF .,'J'._^1_%EIF_]_^1_%EIF EM_^1_%EQU L'B'(*-S'B'-1)_^1_%EMC_]_^1ADDMES MAC A,B,C_^1_%EQU 'B'('A')_^1_%ALF .,'C'._^1_%EQU L'B'(*-S'A'-1)_^1_%EMC_]_^1DEVCAP MAC A,B,C,D,E,F,G,H_^1_%VFD X2/'A',X2/'B',X2/'C',X2/'D',X2/'E',X2/'F',X2/'G',X2/'H'_€€^1_%EMC_]_^1_%EJT_]_^1*_*SYSTEM CHECKOUT 2.0_^1*_*PROGRAM BASE - SYSTEM CHECKOUT 1.0_^1_%SPC 3_^1*_]_^1*_$SYSTEM CHECKOUT SEGMENTS - 2ND_^1*_*SYSTEM CHECKOUT PROGRAM SEGMENTS_^1_%EQU SYSSEG(*)_^1*_]_^1_%EQU SEGSIZ(96)_^1*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_^1**************************MUST AGREE WITH EQU'S IN SYSCOP**************_^1_%EQU SEGCOR(22)_G**MSOS 4.0_^1_%EQU L€€DA(1),CON(3),LST(5),ATA(11),CNS(13),GMS(15)_^1_%EQU MOP(17)_^1*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_^1_%EJT_]_^1_%EXT INVINT,FMASK,NDISP,MASKT,INTSTK_^1_%EXT LOG1A,LOG1,LOG2,ICORE,COMPRQ,FNR_^1_%EJT_]_^1*_]_^1*_*INTERRUPT TRAP ANALYSIS_^1*_]_^1_%STRTSG IT_^1_%SPC 5_^1_%LDA* ITIFG_(CHECK FAILED IMAGE FLAG_^1_%SAZ IT1_^1_%LDA =X$5100+ATA_^1_%STA* IT102_^1_%STA* IT21_^1_%S€€TA* IT22_^1_%SPC 5_^1*_"*_"*_"*_"*_"*CHECK FOR UNPATCHED RESPONCES*_"*_"*_"*_^1*_8FILL BUFFER WITH RESPONCE ADDRESSES_^1IT1_"ENQ 15*4_^1IT101 LDA =N$100_^1_%AAQ A_^1_%INA 3_^1IT102 RTJ- LDA,I_^1_%QRS 2_,DIVIDE BY 4_^1_%STA* IT1TP,Q_^1_%INQ -1_^1_%SQM IT11_)EXIT_^1_%QLS 2_,MULT BY 4_^1_%JMP* IT101_^1*_]_^1IT11_!ENQ 0_,CHECK LINES 0-F_^1IT111 STQ* IT1LN_^1_%LDA* IT1TP,Q_€€^1_%EOR- $11_^1_%SAZ IT13_^1IT12_!INQ -15_^1_%SQM IT14_^1_%JMP* IT15_)DONE_^1IT14_!INQ 16_^1_%JMP* IT111_^1IT13_!ENA ITMXN-ITN_#GET MESSAGE_^1_%RTJ- GMS,I_^1_%ENA LITM2_^1_%RTJ- MOP,I_^1_%LDA* IT1LN_^1_%RTJ- CON,I_^1_%STQ- ITM3V1,I_$DUMP MSB_^1_%LISTIT ITM3_^1_%LDQ* IT1LN_(RESTORE Q_^1_%JMP* IT12_^1IT1LN NUM 0_^1_%SPC 5_^1*_"*_"*_"*_"*_"*SET UP FOR LAST INTERRUPTS_!*_"*_"*€€_"*_^1IT15_!LDA* ITIFG_^1_%SAN IT2_*USED FAILED IMAGE ONLY_^1_%ENQ 15_^1IT18_!LDA* IT1TP,Q_^1_%EOR =XINVINT_^1_%SAZ IT17_)INVALID INTERRUPT_^1IT16_!INQ -1_^1_%SQM IT2_^1_%JMP* IT18_^1IT17_!LDA* ITC3_^1_%EOR- $23,Q_^1_%STA* ITC3_)SAVE INVALID LINES_^1_%JMP* IT16_^1_%SPC 5_^1*_"*_"*_"*_"*_"*CHECK LINE ZERO_"*_"*_"*_"*_"*_"*_^1IT2_"LDA =X$102_^1IT21_!RTJ- LDA,I_^1_%INA -$F_^1€€_%SAN IT23_)ERROR_^1_%LDA =X$101_^1IT22_!RTJ- LDA,I_^1_%SUB =N$54F8_^1_%SAZ IT19_)NO ERROR_^1IT23_!ENA ITMXN-ITN_^1_%RTJ- GMS,I_(ERROR MESSAGE_^1_%ENA LITM2_^1_%RTJ- MOP,I_^1_%LISTIT ITM4_^1_%SPC 5_^1*_]_^1IT19_!ENQ WITN-ITN_$EXIT_^1_%JMP* (IT)_^1*_]_^1IT1TP BZS IT1TP(16)_^1_%SPC 5_^1_%BZS ITFIL(SEGSIZ-*+IT)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT TRAP ANALYSIS PART W_^1*_]_^1_%€€STRTSG WIT_^1*_*WITC3 HAS INVALID LINES_^1_%SPC 5_^1*_"*_"*_"*_"*_"*CHECK LAST INTERRUPTS_!*_"*_"*_"*_"*_^1IT3_"LDA* WITIFG_^1_%SAZ IT31_^1_%JMP* IT39_)DONT DO AUTOLOAD IMAGE_^1*_]_^1IT31_!ENQ 15*4_)GET LAST INTERRUPTS_^1IT311 LDA =N$100_^1_%AAQ A_^1_%RTJ- LDA,I_^1_%QRS 2_^1_%STA* IT3TP,Q_^1_%INQ -1_^1_%SQM IT32_^1_%QLS 2_^1_%JMP* IT311_^1*_]_^1IT32_!ENA ITMXN-WITN_^1_%R€€TJ- GMS,I_^1IT321 LDQ* IT3CTR_^1_%LDA* IT3TP,Q_^1_%SAN IT34_)INTERRUPTED_^1IT33_!INQ -9_^1_%SQN IT331_^1_%LDA =N$3040_^1_%STA- ITM6V1,I_^1IT331 RAO- ITM6V1,I_$BUMP LINE NUM_^1_%INQ -6_^1_%SQM IT332_^1_%JMP* IT39_)DONE_^1IT332 RAO* IT3CTR_^1_%JMP* IT321_^1IT34_!LDQ- ($E9)_(65K SYSTEM_^1_%SQN IT341_(YUP_^1_%AND- $11_*NO, REMOVE OVERFLOW_^1IT341 RTJ- CON,I_^1_%STA- ITM6V2,I€€_^1_%STQ- ITM6V2+1,I_^1_%LDA* WITC3_^1_%LDQ* IT3CTR_^1_%AND- $23,Q_^1_%SAZ IT35_)NOT INVALID_^1_%ENA LITM2_(INVALID_^1_%RTJ- MOP,I_^1_%ENA 1_^1_%STA- ITM6,I_'ERROR MESSAGE_^1_%ENA LITM5_^1_%JMP* IT36+1_^1IT35_!ENQ 2_,SUPPORT_^1_%LDA* WITMFG_^1_%SAN IT351_^1_%INQ 1_,NOT RELATED_^1IT351 STQ- ITM6,I_^1IT36_!LISTIT ITM6_^1_%LDQ* IT3CTR_^1_%JMP* IT33_^1IT39_!ENQ XITN-WITN_#EXIT€€_^1_%JMP* (WIT)_^1*_]_^1IT3CTR NUM 0_^1_%BZS IT3TP(16)_^1_%SPC 5_^1_%BZS WITFIL(SEGSIZ-*+WIT)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT TRAP ANALYSIS PARTX_^1*_]_^1_%STRTSG XIT_^1*_$XITC3 HAS INVALID INT. LINES_^1_%SPC 5_^1_%LDA* XITIFG_^1_%SAZ IT4_^1_%LDA =X$5100+ATA_^1_%STA* IT412_^1_%STA* IT521_^1_%SPC 5_^1*_"*_"*_"*_"*_"*LINE-LEVEL PRINTOUT*_"*_"*_"*_"*_"*_^1IT4_"ENQ 15*4_)GET PR€€IORITY LEVELS_^1IT41_!LDA =N$100_^1_%AAQ A_^1_%INA 2_^1IT412 RTJ- LDA,I_^1_%QRS 2_^1_%STA* IT4TP,Q_^1_%INQ -1_^1_%SQM IT42_^1_%QLS 2_^1_%JMP* IT41_^1*_]_^1IT42_!ENA ITMYN-XITN_"GET MESSAGE BLOCK_^1_%RTJ- GMS,I_^1_%LDQ* IT4CTR_^1IT43_!LDQ* IT4TP,Q_%FILL MESSAGE_^1_%ENA $F_^1_%LAQ Q_^1_%LDA- ITM7V1,B_^1_%LDQ* IT4CTR_^1_%STA- ITM7V2,B_^1_%INQ -1_^1_%SQM IT44_)DONE_^1_%STQ€€* IT4CTR_^1_%JMP* IT43_^1IT4CTR NUM 15_^1IT44_!LDA* XITMFG_^1_%SAN IT45_^1_%RAO- ITM7,I_'NOT RELATED_^1IT45_!LISTIT ITM7_^1_%SPC 5_^1IT5_"LDA =XFMASK_%SET UP FOR CHECK OF FORTRAN LEVELS_^1_%EOR- $11_^1_%SAN IT52_^1_%ENQ ISN-XITN_$SKIP PART-Y IF NO FTN LEVELS_#*4.0*79*1932_^1_%JMP* (XIT)_I*4.0*79*1932_^1IT51_!ENQ YITN-XITN_^1_%JMP* (XIT)_^1IT52_!LDA* IT5+1_^1IT521 RTJ- LDA,I€€_(GET FMASK_^1_%STA* XITC1_(SAVE IT_^1_%SAN IT523_^1_%JMP* IT51_^1IT523 CLR A_^1_%STA* XITC2_^1_%LDQ* IT5CTR_^1IT524 LDQ* IT4TP,Q_%LEVEL_^1_%ENA $F_^1_%LAQ Q_^1_%LDA* XITC2_^1_%AND- $33,Q_^1_%EOR- $23,Q_(SET BIT IN A_^1_%STA* XITC2_(SAVE INTERRUPT LEVELS_^1_%LDQ* IT5CTR_^1_%INQ -1_^1_%SQM IT54_^1_%STQ* IT5CTR_'SAVE Q_^1_%JMP* IT524_^1IT54_!JMP* IT51_^1*_]_^1IT5CTR NUM 15_^€€1IT4TP BZS IT4TP(16)_^1_%SPC 5_^1_%BZS XITFIL(SEGSIZ-*+XIT)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT TRAP PART Y_^1*_]_^1_%STRTSG YIT_^1_%SPC 5_^1*_$YITC1 HAS FMASK_^1*_$YITC2 HAS INT. LEVELS_^1*_$YITC3 HAS INVALID INT. LINES_^1_%LDA* YITC1_(GET FMASK_^1_%SAN IT55_^1_%SPC 5_^1*_"*_"*_"*_"*_"*CHECK IF DONE WITH IT_!*_"*_"*_"*_"*_^1IT8_"CLR A_^1_%STA* YITMFG_'CLEAR DATA_^1_%LDA* YITIFG€€_^1_%SAN IT81_)DONE_^1_%ENA LITM1-LITM2_^1_%STA* YITIFG_^1_%ENQ ITN-YITN_^1_%JMP* (YIT)_(EXIT_^1*_]_^1IT81_!CLR A_^1*_*CLEAR USED STORAGE AREA (SAVE INVALID LINES)_^1*_]_^1_%STA* YITIFG_^1_%STA* YITC1_^1_%STA* YITC2_^1_%ENQ ISN-YITN_$GO ON TO INT STACK_^1_%JMP* (YIT)_^1_%SPC 5_^1*_"*_"*_"*_"*_"*INTERRUPT-FORTRAN LEVELS*_"*_"*_"*_"*_^1IT55_!ENA ITMYN-YITN_^1_%RTJ- GMS,I_^1_%L€€DA* YITC1_^1_%AND* YITC2_^1_%AND =N$7FF8_%LEVEL F AND 0-2 LATER-ILLEGAL FORTRAN LEVEL_^1_%TRA Q_,ERROR(S)_^1IT552 LRS 1_^1_%SAM IT56_)AN ERROR ISOLATED_^1IT551 SQZ IT59_)ALL DONE_^1_%RAO* IT55CT_^1_%JMP* IT552_^1IT59_!JMP* IT6_^1IT56_!STQ* IT5QSV_'SAVE Q_^1_%LDA* IT55CT_^1_%RTJ- CON,I_(GET LEVEL_^1_%STQ- ITM8V1,I_^1_%ENA LITM2_^1_%RTJ- MOP,I_^1_%LISTIT ITM8_^1_%LDQ* IT5QSV_€€^1_%JMP* IT551_^1*_]_^1IT55CT NUM 0_^1IT5QSV NUM 0_^1*_]_^1_%SPC 5_^1*_"*_"*_"*_"*_"*FORTRAN LEVELS*_"*_"*_(*_"*_"*_^1IT6_"ENA ITMZN-YITN_"GET MESSAGE BLOCK_^1_%RTJ- GMS,I_^1IT61_!LDA* YITC1_^1_%LDQ* IT6CTR_^1_%LDQ- $23,Q_^1_%LAQ Q_^1_%SQN IT63_)FORTRAN LEVEL_^1IT62_!RAO* IT6CTR_^1_%LDQ* IT6CTR_^1_%INQ -16_^1_%SQP IT65_)DONE_^1_%JMP* IT61_^1*_]_^1IT63_!LDQ* IT6CTR_^1_%LDA- €€ITM9TB,B_$GET LEVEL_^1_%LDQ* IT6CT1_^1_%STA- ITMAV1,B_$SAVE_^1_%RAO* IT6CT1_^1_%JMP* IT62_^1*_]_^1IT65_!LDA* YITC1_^1_%SAM IT66_^1_%CLR Q_^1_%LLS 13_^1_%SAZ IT67_)NO ERROR_^1IT66_!ENA LITM2_(ERROR MESSAGE_^1_%RTJ- MOP,I_^1_%ENA LITM9_^1_%JMP* IT68+1_^1IT67_!RAO- ITMA,I_'SUPPORT_^1_%LDA* YITMFG_^1_%SAN IT68_^1_%RAO- ITMA,I_'NOT RELATED_^1IT68_!LISTIT ITMA_^1_%SPC 5_^1*_"*_"*€€_"*_"*_"*NDISP CHECK_!*_"*_"*_"*_"*_"*_"*_^1_%LDA* IT6CT1_^1_%INA -1_^1_%SAM IT7_*NO CHECK_^1_%LDA =XNDISP_^1_%EOR- $11_^1_%SAZ IT7_*OK_^1_%ENA LITM2_^1_%RTJ- MOP,I_^1_%LISTIT ITMB_^1IT7_"JMP* IT8_^1*_]_^1IT6CTR NUM 0_^1IT6CT1 NUM 0_^1_%SPC 5_^1_%BZS YITFIL(SEGSIZ-*+YIT)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT STACK AND MASK TABLE ANALYSIS_^1*_]_^1_%STRTSG IS_^1*_*ISC3 HAS INVALID €€ INTERRUPT LINES_^1_%SPC 5_^1IS0_"LDA* ISIFG_^1_%SAZ IS1_^1_%LDA =X$5100+ATA_!SETUP FOR AUTOLOAD_^1_%STA* IS12_^1_%STA* IS14_^1_%JMP* IS1_^1_%EQU IS1TP(IS0+1)_^1_%BZS IS1BUF(16-*+IS0)_^1_%SPC 5_^1*_"*_"*_"*_"*_"*CHECK MASKTABLE-INTERRUPT TRAP*_!*_"*_"*_^1IS1_"ENQ 15_+GET MASK TABLE_^1IS11_!LDA =XMASKT_^1_%AAQ A_^1IS12_!RTJ- LDA,I_^1_%STA* IS1TP,Q_%SAVE IT_^1_%SQM IS13_^1_€€%INQ -1_^1_%JMP* IS11_^1IS13_!LDQ* IS1LN_(CURRENT LINE_^1IS131 QLS 2_,GET LEVELS FROM TRAP REGION_^1_%LDA =N$100_^1_%AAQ A_^1_%INA 2_^1IS14_!RTJ- LDA,I_(GET LEVEL_^1_%AND- 6_^1_%STA* IS1LV_(SAVE LVL OF LINE_^1_%TRA Q_,LVL TO Q_^1IS15_!LDA* IS1TP,Q_%GET MASK_^1IS151 ALS 0_^1_%SAP IS152_(NO ERROR_^1_%LDA =AIS_)IS ERROR Q HAS LVL WHICH IS INTERRUPTABLE_^1_%RTJ* IS1ERR_^1IS€€152 INQ -15_^1_%SQP IS16_)GO DO LOWER LEVELS_^1_%INQ 16_+BUMP UP_^1_%JMP* IS15_^1*_]_^1IS16_!LDQ* IS1LV_^1IS161 INQ -1_^1_%LDA* IS1TP,Q_^1IS162 ALS 0_^1_%SAM IS163_(NO ERROR_^1_%LDA =AUN_^1_%RTJ* IS1ERR_^1IS163 SQM IS17_)DONE WITH THIS LINE_^1_%JMP* IS161_^1*_]_^1IS17_!LDQ* IS1LN_^1_%INQ -1_^1_%STQ* IS1LN_^1_%SQM IS179_(DONE WITH ALL LINES_^1_%RAO* IS151_^1_%RAO* IS16€€2_(SET SHIFTS TO NEXT LINE_^1_%JMP* IS13_^1*_]_^1IS179 ENQ XISN-ISN_$EXIT_^1_%JMP* (IS)_^1_%SPC 5_^1*_8MESSAGE OUTPUT_^1IS1ERR NUM 0_^1_%STA* IS1ETP_'SAVE IS OR UN_^1_%STQ* IS1LV+1_%SAVE ERROR LEVEL_^1_%LDQ* IS1LN_^1_%LDA* ISC3_)CHECK IF INVALID LINE_^1_%AND- $23,Q_^1_%SAZ IS1E1_(ERROR_^1IS1EXT LDQ* IS1LV+1_%EXIT-RESTORE Q_^1_%JMP* (IS1ERR)_^1IS1ETP NUM 0_^1IS1E1 ENA ISMXN-€€ISN_^1_%RTJ- GMS,I_^1_%ENA LISM2_^1_%RTJ- MOP,I_(ERROR MESSAGE_^1_%LDA* IS1LN_^1_%RTJ- CON,I_^1_%STQ- ISM3V1,I_$SET LINE_^1_%CONSTR 2,IS1LV,ISM3V2,IS,13_^1_%LDA* IS1ETP_^1_%STA- ISM3VR,I_^1_%LISTIT ISM3_^1_%JMP* IS1EXT_^1*_]_^1_%SPC 5_^1IS1LN NUM $F_^1_%EQU IS1LV(IS1TP+16)_^1_%SPC 5_^1_%BZS ISFIL(SEGSIZ-*+IS)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT STACK ANALYIS PART X_^1*_]_^1_%STRT€€SG XIS_^1_%SPC 5_^1IS18_!LDA* XISIFG_^1_%SAZ IS2_*CHECK IF AUTOLOAD DONE_^1_%CLR A_,EXIT TO UC_^1_%STA* XISIFG_^1_%STA* XISMFG_^1_%STA* XISC3_(CLEAR USED CELL_^1_%ENQ UCN-XISN_^1_%JMP* (XIS)_^1*_]_^1_%SPC 5_^1*_"*_"*_"*_"*_"*ALTERED MASK TABLE *_(*_"*_"*_"*_^1IS2_"RTJ* IS2GT_(GET FAILED MASK TABLE_^1_%LDA =X$5100+ATA_^1_%STA* IS2GT2_^1_%LDA* IS2GT3_^1_%INA 17_^1_%STA* IS2GT3€€_^1_%RTJ* IS2GT_(GET AUTOLOAD MASK TABLE_^1IS21_!LDQ* IS2CTR_'LEVEL_^1_%LDA* IS2TB2,Q_^1_%STA* IS2CTR+1_$INITIALLY_^1_%EOR* IS2TB1,Q_$AT FAILURE_^1_%SAN IS22_)ALTERED_^1IS211 INQ -15_*NOT ALTERED_^1_%SQP IS23_)DONE_^1IS212 RAO* IS2CTR_^1_%JMP* IS21_^1IS23_!ENQ YISN-XISN_^1_%JMP* (XIS)_^1IS22_!LDA* IS2TB1,Q_$OUTPUT MESSAGE_^1_%STA* IS2CTR+2_^1_%ENA ISMXN-XISN_^1_%RTJ- GMS,I_^€€1_%LDA* XISMFG_^1_%SAN IS221_^1_%RAO- ISM4,I_'NOT RELATED_^1IS221 CONSTR 3,IS2CTR,ISM4V1,XIS,6_^1_%LISTIT ISM4_^1_%LDQ* IS2CTR_^1_%JMP* IS211_^1*_]_^1IS2GT NUM 0_,GET MASK TABLE_^1_%ENQ 15_^1IS2GT1 LDA =XMASKT_^1_%AAQ A_^1IS2GT2 RTJ- LDA,I_^1IS2GT3 STA* IS2TB1,Q_$SAVE IT_^1_%SQM IS2GT4_'DONE_^1_%INQ -1_^1_%JMP* IS2GT1_^1IS2GT4 JMP* (IS2GT)_^1*_]_^1IS2CTR BZS IS2CTR(3)_^1_€€%BZS IS2BUF(17*2)_^1IS2TB1 EQU IS2TB1(IS2BUF+1)_^1IS2TB2 EQU IS2TB2(IS2TB1+17)_^1_%SPC 5_^1_%BZS XISFIL(SEGSIZ-*+XIS)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT STACK ANALYSIS PART Y_^1*_]_^1_%STRTSG YIS_^1_%SPC 5_^1*_"*_"*_"*_"*_"*INTERRUPT STACK ENTRIES *_"*_"*_"*_"*_^1IS3_"LDA =X$B8_(TOP_^1_%RTJ- LDA,I_^1_%STA* IS3TP1_^1_%SUB* IS3TP_^1_%SAN IS311_(SOMETHING TO DO_^1_%LDA =N$EF_(CHE€€CK PRIORITY LEVEL_^1_%RTJ- LDA,I_^1_%INA 1_^1_%SAN IS31_)ERROR DUMP ALL OF TABLE_^1_%JMP* IS39_^1IS311 CLR Q_^1_%DVI- $43_*GET NUM OF ENTRIES_^1_%SAM IS31_^1_%INA -17_^1_%SAM IS32_)OK_^1IS31_!LDA* IS3TP_^1_%INA 16*5_)SET TO 16 ENTRIES_^1_%STA* IS3TP1_^1_%RAO* IS3FLG_'ERROR FLAG_^1IS32_!CLR Q_^1IS33_!LDA* IS3TP_^1_%INA 4_^1_%STA* IS3TP_^1_%RTJ- LDA,I_(GET LEVEL_^1_%ALS 1€€_,REMOVE OVERFLOW BIT_162*1323_^1_%ARS 1_Q62*1323_^1_%STA* IS3TB,Q_%SAVE_^1_%RAO* IS3TP_^1_%LDA* IS3TP_^1_%SUB* IS3TP1_^1_%SAP IS34_)DONE_^1_%INQ 1_^1_%JMP* IS33_^1*_]_^1IS34_!STQ* IS3TP1_'SAVE Q REG_^1_%ENA ISMYN-YISN_"GET MESSAGE BLOCK_^1_%RTJ- GMS,I_^1_%LDQ* IS3TP1_^1IS341 STQ* IS3TP1_^1_%LDQ* IS3TB,Q_^1_%LDA- ISM5TB,B_$GET ASCII LEVEL_^1_%LDQ* IS3TP1_^1_%STA- ISM5V1,B_^1_%€€INQ -1_^1_%SQM IS35_)DONE_^1_%JMP* IS341_^1*_]_^1IS35_!LDA* IS3FLG_^1_%SAN IS351_(ERROR_^1_%RAO- ISM5,I_^1_%LDA* YISMFG_^1_%SAN IS351_^1_%RAO- ISM5,I_'NOT RELATED_^1IS351 LISTIT ISM5_^1IS39_!CLR Q_^1_%STQ* YISMFG_^1_%ENQ LISM1-LISM2_^1_%STQ* YISIFG_^1_%ENQ ISN-YISN_^1_%JMP* (YIS)_^1IS3FLG NUM 0_^1IS3TP ADC INTSTK_^1IS3TP1 NUM 0_^1_%BZS IS3TB(16)_^1_%SPC 5_^1_%BZS YIS€€FIL(SEGSIZ-*+YIS)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT CAPABILITY_^1*_]_^1_%STRTSG UC_^1_%SPC 5_^1_%LDA* UCIFG_^1_%SAZ UC1_^1_%LDA =X$5100+ATA_!SET FOR AUTO LOAD IMAGE_^1_%STA* UC11_^1_%STA* UC12_^1_%STA* UC13_^1_%SPC 5_^1*_"*_"*_"*_"*_"*CHECK STANDARD LU CAPABILITY *_"*_"*_"*_^1UC1_"LDA =N$F9_^1_%ADD* UC1CTR_^1UC11_!RTJ- LDA,I_(GET LU NUM_^1_%ADD =XLOG1A_^1UC12_!RTJ- LDA,I_(GET€€ PHYSTB_^1_%INA 8_^1UC13_!RTJ- LDA,I_^1_%ALS 6_^1_%AND- $1C_*GET 6 BITS FOR TYPE CODE_^1_%CLR Q_^1_%LLS 3_^1_%ALS 4_,END AROUND TIMES 2_^1_%ADD =N$FC0_'FORM SHIFT_^1UC134 INA 1_^1_%STA* UC135_^1_%LDA* UC1DCT,Q_^1UC135 NUM 0_,PLUGGED SHIFT_^1_%SAP UC18_)ERROR_^1UC1351 LDQ* UC1CTR_'NO ERROR_^1_%SQN UC136_^1_%LDA* UC134_(CHANGE TO WRITE DEVICES_^1_%INA -1_^1_%STA* UC134_€€^1UC136 INQ -3_^1_%SQN UC137_^1_%RAO* UC134_(BACK TO READ_^1UC137 INQ -1_^1_%SQZ UC19_)DONE_^1_%RAO* UC1CTR_^1_%JMP* UC1_^1UC19_!ENQ WUCN-UCN_^1_%JMP* (UC)_^1*_]_^1UC18_!ENA UCMXN-UCN_#GET MESSAGE BLOCK_^1_%RTJ- GMS,I_^1_%ENA LUCM2_(ERROR MESSAGE_^1_%RTJ- MOP,I_^1_%LDQ* UC1CTR_^1_%LDA- UCM3TB,B_^1_%STA- UCM3V1,I_^1_%SQZ UC181_(READ_^1_%INQ -4_^1_%SQZ UC181_(READ_^1_%LDA€€ =AWR_)WRIT_^1_%STA- UCM3V2,I_^1_%LDA =AIT_^1_%STA- UCM3V2+1,I_^1UC181 LISTIT UCM3_^1_%JMP* UC1351_^1*_]_^1UC1CTR NUM 0_^1*_]_^1_%SPC 5_^1*_*DEVICE CAPABILITY TABLE_^1*_]_^1_%EQU R(1),W(2),B(R+W)_!READ/WRITE CAPABILITY CODES_^1*_]_^1UC1DCT DEVCAP B,R,W,B,B,B,B,B_=**MSOS 4.1**_^1_%DEVCAP B,B,W,B,B,0,B,B_=**MSOS 4.1**_^1_%DEVCAP B,W,W,W,B,B,B,R_>**MSOS 4.1**_^1_%DEVCAP B,B,B,€€W,R,R,B,B_>**MSOS 4.1**_^1_%DEVCAP B,B,W,R,B,W,W,B_=**MSOS 4.1**_^1_%DEVCAP B,R,B,B,R,0,0,0_=**MSOS 4.1**_^1_%NUM 0,0_L**MSOS 4.1**_^1_%SPC 5_^1_%BZS UCFIL(SEGSIZ-*+UC)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT CAPABILITY PART W_^1*_]_^1_%STRTSG WUC_^1_%SPC 5_^1_%LDA* WUCIFG_^1_%SAZ UC2_^1_%LDA =X$5100+ATA_^1_%STA* UC21_^1_%STA* UC23_^1_%STA* UC2G1_^1_%STA* UC2G2_^1_%SPC 5_^1*_"*_€€"*_"*_"*_"*CHECK ALTERNATE LOGICAL UNITS_^1UC2_"LDA =XLOG1A_^1UC21_!RTJ- LDA,I_^1_%STA* UC2NLU_'NUM OF LOGICAL UNITS_^1UC22_!LDA =XLOG1_^1_%ADD* UC2CTR_^1UC23_!RTJ- LDA,I_(GET LOG1 ENTRY_^1_%AND- $C_+ISOLATE ALTERNATE LU_^1_%SAN UC25_)ALTERNATE EXSISTS_^1UC231 LDA* UC2NLU_^1_%SUB* UC2CTR_'CHECK IF DONE WITH ALL LUS_^1_%SAN UC24_^1_%JMP* UC29_)DONE_^1UC24_!RAO* UC2CTR_^1_%JMP* €€UC22_^1*_]_^1UC25_!STA* UC2ALU_'GET ALTER. CAPABILITY_^1_%RTJ* UC2GCP_^1_%STA* UC2TP_(SAVE_^1_%LDA* UC2CTR_'GET LU CAPABILITY_^1_%RTJ* UC2GCP_^1_%LDQ* UC2TP_^1_%SAZ UC251_(NO POSSIBLE ERROR_^1_%SQZ UC26_)ERROR_^1_%INQ -3_^1_%SQP UC251_(NO POSSIBLE ERROR_^1_%INQ 3_^1_%EAQ A_^1_%SAN UC26_)ERROR_^1UC251 JMP* UC231_(NO ERROR_^1*_]_^1UC26_!ENA UCMXN-WUCN_^1_%RTJ- GMS,I_^1_%ENA €€ LUCM2_^1_%RTJ- MOP,I_^1_%LDA* UC2ALU_'SET UP MESSAGE_^1_%RTJ- CON,I_^1_%STQ- UCM4V1,I_^1_%LDA* UC2CTR_^1_%RTJ- CON,I_^1_%STQ- UCM4V2,I_^1_%LISTIT UCM4_^1_%JMP* UC231_^1*_*GET LU CAPABILITY_^1UC2GCP NUM 0_^1_%ADD* UC2+1_(LOG1A ENTRY_^1UC2G1 RTJ- LDA,I_^1_%INA 8_^1UC2G2 RTJ- LDA,I_^1_%ALS 6_^1_%AND- $1C_)BITS WITH TYPE CODE_^1_%CLR Q_^1_%LLS 3_^1_%ALS 4_,END AROUND_^1_%ADD €€ =N$FC2_^1_%STA* UC2SF_^1_%LDA* UC2DCT,Q_^1UC2SF NUM 0_,PLUGGED-PUT BITS IN BITS 0 AND 1_^1_%AND- 4_^1_%JMP* (UC2GCP)_$RETURN_^1*_]_^1UC2TP NUM 0_^1UC2CTR NUM 1_^1UC2NLU EQU UC2NLU(WUCC1)_^1UC2ALU NUM 0_^1_%SPC 5_^1*_*DEVICE CAPABILITY_^1*_]_^1UC2DCT DEVCAP B,R,W,B,B,B,B,B_=**MSOS 4.1**_^1_%DEVCAP B,B,W,B,B,0,B,B_=**MSOS 4.1**_^1_%DEVCAP B,W,W,W,B,B,B,R_>**MSOS 4.1**_^1_%€€DEVCAP B,B,B,W,R,R,B,B_>**MSOS 4.1**_^1_%DEVCAP B,B,W,R,B,W,W,B_=**MSOS 4.1**_^1_%DEVCAP B,R,B,B,R,0,0,0_=**MSOS 4.1**_^1_%NUM 0,0_L**MSOS 4.1**_^1_%SPC 5_^1*_8EXIT_^1UC29_!CLR A_^1_%STA* WUCMFG_^1_%LDA* WUCIFG_^1_%SAN UC299_^1_%ENA LUCM1-LUCM2_^1_%STA* WUCIFG_^1_%ENQ UCN-WUCN_^1_%JMP* (WUC)_(GO DO AUTO LOAD_^1UC299 CLR A_^1_%STA* WUCIFG_^1_%ENQ LUN-WUCN_$EXIT TO LU CHEC€€KS_^1_%JMP* (WUC)_^1_%SPC 5_^1_%BZS WUCFIL(SEGSIZ-*+WUC)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT ANALYSIS_^1*_]_^1_%STRTSG LU_^1_%SPC 5_^1_%LDA* LUIFG_^1_%SAZ LU1_^1_%LDA =X$5100+ATA_^1_%STA* LU121_^1_%STA* LU131_^1_%STA* LU21_^1_%STA* LU22_^1_%STA* LU23_^1_%STA* LU31_^1_%STA* LU331_^1_%SPC 5_^1*_"*_"*_"*_"*_"*NUM OF LOGICAL UNITS_"*_"*_"*_"*_"*_^1LU1_"LDA =XLOG1_^1LU121 RTJ- LDA€€,I_^1_%EOR* LUC1_)COMPARE_^1_%SAN LU19_)ERROR_^1_%LDA =XLOG2_^1LU131 RTJ- LDA,I_^1_%EOR* LUC1_)COMPARE_^1_%SAZ LU2_*NO ERROR_^1LU19_!RTJ* LU1ER_^1_%LDA* LUC1_^1_%INA 1_^1_%RTJ- CON,I_^1_%STQ- LUM3V1,I_$SAVE ASCII_^1_%LISTIT LUM3_^1*_]_^1_%SPC 5_^1*_"*_"*_"*_"*_"*CORE ALLOCATOR*_"*_"*_"*_"*_"*_"*_^1LU2_"LDA =XLOG1A_^1_%INA 1_^1LU21_!RTJ- LDA,I_(ADDRESS OF PHYSTB FOR LU 1_^1_€€%TRA Q_,SAVE_^1_%INA 1_^1LU22_!RTJ- LDA,I_^1_%EOR =XICORE_^1_%SAN LU28_)ERROR_^1_%TRQ A_^1_%INA 8_^1LU23_!RTJ- LDA,I_^1_%ARS 4_,CHECK TYPE CODE_^1_%AND- 8_^1_%INA -13_^1_%SAZ LU3_*NO ERROR_^1LU28_!RTJ* LU1ER_^1_%LISTIT LUM4_^1_%SPC 5_^1*_"*_"*_"*_"*_"*PHYSTB SET-UP *_"*_"*_"*_"*_"*_"*_^1LU3_"ENQ 3_^1_%LDA* LU2+1_^1_%ADD* LU3CTR_^1LU31_!RTJ- LDA,I_(PHYSTB_^1_%STA* LU3TAD_€€'SAVE ADDRESS_^1_%SAP LU33_^1LU38_!RTJ* LU1ER_(ERROR_^1_%LDA* LU3CTR_^1_%RTJ- CON,I_(LU NUM_^1_%STQ- LUM5V1,I_^1_%LISTIT LUM5_^1LU36_!LDA* LU3CTR_^1_%SUB* LUC1_^1_%SAP LU39_)DONE_^1_%RAO* LU3CTR_^1_%JMP* LU3_^1*_]_^1LU39_!ENQ WLUN-LUN_^1_%JMP* (LU)_)EXIT_^1LU33_!AAQ A_,CHECK TABLE 3 ENTRIES_^1LU331 RTJ- LDA,I_^1_%SUB- $11_^1_%SAN LU332_^1_%JMP* LU38_)ERROR_^1LU332 SQZ LU34_€€^1LU333 INQ -1_^1_%LDA* LU3TAD_^1_%JMP* LU33_^1LU34_!LDA* LU3TAD_'RESTORE I=PHYSTB_^1_%RTJ- LDA,I_^1_%ARS 8_^1_%INA -$52_)CHECK FOR PART 1 REQUEST CODE_%**MSOS 4.0_^1_%SAZ LU35_)OK_^1_%JMP* LU38_)ERROR_^1*_]_^1LU35_!JMP* LU36_)GO ON_^1*_]_^1LU3CTR NUM 2_,START WITH LOGICAL UNIT 2_^1LU3TAD NUM 0_^1*_]_^1LU1ER NUM 0_,ERROR ROUTINE_^1_%ENA LUMXN-LUN_^1_%RTJ- GMS,I_^1_%ENA L€€LUM2_^1_%RTJ- MOP,I_^1_%JMP* (LU1ER)_^1*_]_^1_%SPC 5_^1_%BZS LUFIL(SEGSIZ-*+LU)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT ANALYSIS PART W_^1*_]_^1_%STRTSG WLU_^1_%SPC 5_^1_%LDA* WLUIFG_^1_%SAZ LU4_^1_%LDA =X$5100+ATA_^1_%STA* LU51_^1_%STA* LU5M1_^1_%STA* LU5M3_^1_%JMP* LU5_*DO 4 ONLY ON FAILED IMAGE_^1_%SPC 5_^1*_"*_"*_"*_"*_"*MARKED DOWN LOGICAL UNITS_"*_"*_"*_"*_^1LU4_"LDA =XLOG1_€€^1_%ADD* LU4CTR_^1_%RTJ- LDA,I_(GET LOG1 ENTRY_^1_%ALS 2_^1_%SAM LU42_)MARKED DOWN_^1LU41_!LDA* LU4CTR_^1_%SUB* WLUC1_(DONE ALL LU_^1_%SAP LU5_*DONE_^1_%RAO* LU4CTR_^1_%JMP* LU4_^1*_]_^1LU42_!ENA LUMXN-WLUN_^1_%RTJ- GMS,I_^1_%LDA* LU4CTR_^1_%RTJ- CON,I_^1_%STQ- LUM6V1,I_^1_%LISTIT LUM6_^1_%JMP* LU41_^1*_]_^1LU4CTR NUM 1_^1_%SPC 5_^1*_"*_"*_"*_"*_"* SHARED DEVICES_"*_"*_"*_"*_€€"*_"*_^1LU5_"LDA* LU4+1_^1_%ADD* LU5CTR_^1LU51_!RTJ- LDA,I_^1_%ALS 1_^1_%SAP LU53_)NOT SHARED_^1_%RTJ* LU5MAT_'LOOK FOR MATCH_^1_%SQZ LU57_)NO MATCH ERROR_^1LU52_!LDA* LU5CTR_'MATCH-OK_^1_%SUB* WLUC1_^1_%SAP LU599_(ALL DONE_^1_%RAO* LU5CTR_^1_%JMP* LU5_^1*_]_^1LU53_!RTJ* LU5MAT_^1_%SQN LU57_)MATCH ERROR_^1_%JMP* LU52_)NO ERROR_^1*_]_^1LU599 ENQ XLUN-WLUN_#GO ON_^1_%JMP* (WLU€€)_^1LU57_!STQ* LU5LTP_'ERROR SAVE MATCH IF ANY_^1_%ENA LUMYN-WLUN_^1_%RTJ- GMS,I_^1_%ENA LLUM2_^1_%RTJ- MOP,I_^1_%LDA* LU5CTR_^1_%RTJ- CON,I_^1_%LDA* LU5LTP_^1_%SAN LU58_)NO SHARED BIT SET MESSAGE_^1_%STQ- LUM7V1,I_$NO MATCH MESSAGE_^1LU571 LISTIT LUM7_^1_%JMP* LU52_^1*_]_^1LU58_!STQ- LUM8V1,I_$OUTPUT LUM8_^1_%RTJ- CON,I_^1_%STQ- LUM8V2,I_$MATCH LU_^1_%ENA LLUM8_^1_%ENQ LUM8_€€^1_%JMP* LU571+2_^1*_]_^1_%SPC 5_^1*_8GET LOGICAL UNIT MATCH_^1LU5MAT NUM 0_^1LU5ML1 LDA =XLOG1A_^1_%ADD* LU5CTR_^1LU5M1 RTJ- LDA,I_^1_%STA* LU5LTP_'SAVE PHYSTB_^1_%LDQ* WLUC1_^1LU5M2 LDA* LU5CTR_^1_%EAQ_!A_^1_%SAZ LU5M4_^1_]_^1_%LDA* LU5ML1+1_^1_%AAQ A_^1LU5M3 RTJ- LDA,I_(GET PHYSTB_^1_%EOR* LU5LTP_^1_%SAZ LU5MEX_'EXIT FOUND - Q SET TO LU NUM._^1LU5M4 INQ -1_^1_%SQZ LU€€5MEX_'EXIT NOT FOUND Q SET TO ZERO_^1_%JMP* LU5M2_^1LU5MEX JMP* (LU5MAT)_^1*_]_^1LU5LTP NUM 0_^1LU5CTR NUM 1_,START LU 1_^1_%SPC 5_^1_%BZS WLUFIL(SEGSIZ-*+WLU)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT ANALYSIS PART X_^1*_]_^1_%STRTSG XLU_^1_%SPC 5_^1_%LDA* XLUIFG_^1_%SAZ LU6_^1_%CLR A_,ALL DONE WITH LU_^1_%STA* XLUC1_^1_%STA* XLUIFG_^1_%STA* XLUMFG_^1_%ENQ NEXTN-XLUN_^1_%JMP* (XLU€€)_^1*_"*_"*_"*_"*_"*ACTIVE DRIVERS*_"*_"*_"*_"*_"*_"*_^1LU6_"LDA =XLOG1A_^1_%ADD* LU6CTR_^1_%RTJ- LDA,I_(GET PHYSTB_^1_%STA* LU6PT_^1_%INA 5_^1_%RTJ- LDA,I_^1_%EOR* LU6CTR_^1_%SAZ LU65_)FOUND BUSY LU_^1LU61_!LDA* LU6CTR_^1_%SUB* XLUC1_^1_%SAM LU63_)CONTINUE_^1_%ENQ YLUN-XLUN_#ALL DONE_^1_%JMP* (XLU)_(EXIT_^1LU63_!RAO* LU6CTR_^1_%JMP* LU6_^1*_]_^1LU65_!LDA* LU6PT_^1_%INA 6_^1_€€%RTJ- LDA,I_(GET LIST LOCATION_^1_%STA* LU6LL_^1_%ENQ 5_^1LU651 AAQ A_^1_%RTJ- LDA,I_(GET PARAMETERS_^1_%STA* LU6LL+1,Q_^1_%SQZ LU652_(DONE_^1_%INQ -1_^1_%LDA* LU6LL_^1_%JMP* LU651_^1*_]_^1LU652 ENA LUMZN-XLUN_"OUTPUT MESSAGE_^1_%RTJ- GMS,I_^1_%LDA* LU6CTR_^1_%RTJ- CON,I_^1_%STQ- LUM9V1,I_^1_%CONSTR 7,LU6LL,LUM9V2,XLU,3_^1_%LISTIT LUM9_^1_%LISTIT LUMA_^1*_]_^1_%LDA* LU6PT_(S€€EE IF BUSY_^1_%INA 4_^1_%RTJ- LDA,I_^1_%SAM LU66_)IDLE_^1_%ENA LUMZN-XLUN_^1_%RTJ- GMS,I_^1_%LISTIT LUMB_'NOT IDLE_^1LU66_!JMP* LU61_^1*_]_^1LU6CTR NUM 1_^1LU6PT NUM 0_^1_%BZS LU6LL(7)_^1*_]_^1_%SPC 5_^1_%BZS XLUFIL(SEGSIZ-*+XLU)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT ANALYSIS PART Y_^1*_]_^1_%STRTSG YLU_^1_%SPC 5_^1*_"*_"*_"*_"*_"*LOGICAL UNIT THREADS_"*_"*_"*_"*_"*_^1LU7_"CL€€R Q_^1_%LDA =XLOG2_^1_%ADD* LU7CTR_^1LU71_!RTJ- LDA,I_(GET THREAD_^1_%STA* LU7TH,Q_%SAVE ELEMENT_^1_%SAP LU73_^1_%INA 0_^1_%SAN LU73_)NOT END_^1_%SQN LU721_(END_^1LU712 LDA* LU7CTR_'NO ENTRIES_^1_%SUB* YLUC1_^1_%SAM LU72_)CONTINUE_^1_%ENQ ZLUN-YLUN_$EXIT_^1_%JMP* (YLU)_^1*_]_^1LU72_!RAO* LU7CTR_^1_%JMP* LU7_^1LU721 INQ 1_,END FOUND_^1_%JMP* LU741_^1*_]_^1LU73_!INQ -7_^1€€_%SQP LU74_)BUFFER FULL_^1_%INQ 8_,GET NEXT ELEMENT_^1LU731 INA 2_,GET THREAD ADDRESS_^1_%JMP* LU71_^1*_]_^1LU74_!ENQ 8_^1LU741 STQ* LU7TP_(SAVE NUM OF ELEMENTS THIS TIME_^1_%ENA LUMYN-YLUN_"BUFFER OUTPUT_^1_%RTJ- GMS,I_^1_%LDA* LU7NEL_'NUM OF ELEMENT_^1_%SAN LU743_^1_%LDA* LU7CTR_'OUTPUT HEADER_^1_%RTJ- CON,I_^1_%STQ- LUMCV1,I_^1_%LISTIT LUMC_^1*_]_^1LU743 ENA LU7TH-YLU_€€#FROM_^1_%ENQ LUMD+1_^1_%RTJ- CNS,I_^1LU7TP NUM 0_,TIMES_^1_%NUM 2_,SPACES BETWEEN_^1_%LISTIT LUMD_^1*_]_^1_%LDA* LU7NEL_^1_%ADD* LU7TP_^1_%STA* LU7NEL_'TOTAL NUM OF ELEMENTS_^1_%INA -$40_^1_%SAP LU75_)TOO MANY_^1*_]_^1_%LDA* LU7TP_(CHECK IF DONE_^1_%INA -8_^1_%SAZ LU745_(NO END YET_^1LU744 CLR Q_,END FOUND_^1_%STQ* LU7NEL_'INITIALIZE_^1_%JMP* LU712_^1*_]_^1LU745 LDA* LU€€7TH+7_%GET LAST THREAD_^1_%SAP LU7451_'CHECK LAST ENTRY_456*1075_^1_%INA 0_,FOR END OF THREAD_356*1075_^1_%SAZ LU746_M56*1075_^1LU7451 CLR Q_Q56*1075_^1_%JMP* LU731_^1LU746 JMP* LU744_(LOOK FOR MORE LOGICAL UNITS_)56*1075_^1*_]_^1LU75_!ENA LLUM2_^1_%RTJ- MOP,I_^1_%ENA LUMZN-YLUN_^1_%RTJ- GMS,I_^1_%LDA* LU7CTR_'TOO MANY ON THREAD_^1_%RTJ- CON,I_^1_%STQ- LUMEV1,I_^1_%LISTIT LU€€ME_^1_%JMP* LU744_^1*_]_^1LU7CTR NUM 1_,START LU 1_^1_%BZS LU7TH(8)_^1LU7NEL NUM 0_^1_%SPC 5_^1_%BZS YLUFIL(SEGSIZ-*+YLU)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT ANALYSIS PART Z_^1*_]_^1_%STRTSG ZLU_^1_%SPC 5_^1*_"*_"*_"*_"*_"*LAST DRIVER TO USE FNR AND CMR_"*_"*_"*_^1LU8_"LDA =XCOMPRQ_^1_%RTJ- LDA,I_^1_%STA* LU8TP+1_^1_%LDA =XFNR_^1_%RTJ- LDA,I_^1_%STA* LU8TP_^1_%ENA LUMZN-ZLUN€€_"GET BLOCK_^1_%RTJ- GMS,I_^1_%LDA* LU8TP_^1_%RTJ* LU8OUT_'GO OUTPUT FNR_^1_%LDA =ACM_^1_%STA- LUMFV1,I_^1_%LDA* LU8TP+1_^1_%RTJ* LU8OUT_'GO OUTPUT CMR_^1_%ENQ LLUM1-LLUM2_^1_%STQ* ZLUIFG_^1_%CLR Q_^1_%STQ* ZLUMFG_^1_%ENQ LUN-ZLUN_^1_%JMP* (ZLU)_(GO TO DO AUTOLOAD_^1*_]_^1LU8OUT NUM 0_^1_%RTJ- CON,I_^1_%STA- LUMFV2,I_^1_%STQ- LUMFV2+1,I_^1_%LISTIT LUMF_^1_%JMP* (LU8OUT)_^1*_]_€€^1LU8TP NUM 0,0_^1*_]_^1_%SPC 5_^1_%BZS ZLUFIL(SEGSIZ-*+ZLU)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT TRAP MESSAGES PART X_^1*_]_^1_%STRMSG ITMX_^1_%SPC 5_^1_%MESSAG ITMX,ITM2,1,'***INTERRUPT TRAP ERROR',0_^1_%ADDMES ITM2,ITM1,' INITIALLY'_^1_%MESSAG ITMX,ITM3,1,'LINE ',1,'00 RESPONSE IS UNPATCHED',0_^1_%MESSAG ITMX,ITM4,1,'LINE 0 IS NOT SETUP FOR PARITY/PROTECT',0_^1_%MESSAG ITMX,ITM6,€€1,'LINE ',1,'00 LAST INTERRUPTED ',1,'1234',0_^1_%ADDMES ITM6,ITM5,' (INVALID)'_^1_%BZS ITMXFL(SEGSIZ-*+ITMX)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT TRAP MESSAGES PART Y_^1*_]_^1_%STRMSG ITMY_^1_%SPC 5_^1_%MESSAG ITMY,YITM,1,'***INTERRUPT TRAP ERROR',0_^1_%ADDMES YITM,YITO,' INITIALLY'_^1_%MESSAG ITMY,ITM7,2,'LINE ',1,_^1_%MESSAG '0 1 2 3 4 5 6 7 8 9 A B C D E F :RLEVEL ',1,_^1_%MESSAG€€ '0 1 2 3 4 5 6 7 8 9 A B C D E F',0_^1_%MESSAG ITMY,ITM8,1,'LEVEL ',1,'12 IS USED FOR INTERRUPTS AND',1,_^1_%MESSAG 'IS RESERVED FOR FORTRAN',0_^1_%BZS ITMYFL(SEGSIZ-*+ITMY)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT TRAP MESSAGES PART Z_^1*_]_^1_%STRMSG ITMZ_^1_%SPC 5_^1_%MESSAG ITMZ,ZITM,1,'***INTERRUPT TRAP ERROR',0_^1_%ADDMES ZITM,ZITO,' INITIALLY'_^1_#MESSAG ITMZ,ITMA,1,'FORTRAN LEVEL€€S :R',1,_^1_%MESSAG '_>',0_^1_%ADDMES ITMA,ITM9,'(ERROR)'_^1_%EQU ITM9TB(*-ITMZ+SEGCOR)_^1_%ALF .,0 1 2 3 4 5 6 7 8 9 A B C D E F._^1_%MESSAG ITMZ,ITMB,1,_^1_%MESSAG 'SYSTEM USING NDISP WITH REENT FORTRAN (ERROR)',0_^1_%BZS ITMZFL(SEGSIZ-*+ITMZ)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT STACK MESSAGES PART X_^1*_]_^1_%STRMSG ISMX_^1_%SPC 5_^1_%MESSAG ISMX,ISM2,1,'***MASK TABLE ERROR',0_^1€€_%ADDMES ISM2,ISM1,' INITIALLY'_^1_%MESSAG ISMX,ISM3,1,'LINE ',1,'12 IS SET FOR LVL ',1,_^1_%MESSAG '1234 BUT ISABLE TO INTERRUPT ',1,'1234'_^1_%EQU ISM3VR(ISM3V2+5)_'IS UN WORD_^1_%MESSAG ISMX,ISM4,2,'ENTRY FOR LVL ',1,'1234 INITIALLY ',1,_^1_%MESSAG '1234 CHANGED TO ',1,'1234'_^1_%BZS ISMXFL(SEGSIZ-*+ISMX)_^1_%EJT_]_^1*_]_^1*_*INTERRUPT STACK MESSAGES PART Y_^1*_]_^1_%STRMSG I€€SMY_^1_%SPC 5_^1_%MESSAG ISMY,YISM,1,'***MASK TABLE ERROR',0_^1_%ADDMES YISM,YISO,' INITIALLY'_^1_#MESSAG ISMY,ISM5,1,'INTRPT STACK LEVEL:R',1,_^1_%MESSAG '_?',0_^1_%EQU ISM5TB(*+1-ISMY+SEGCOR)_^1_%ALF .,-1 0 1 2 3 4 5 6 7 8 9 A B C D E F._^1_%BZS ISMYFL(SEGSIZ-*+ISMY)_^1_%EJT_]_^1*_]_^1*_*LU CAPABILITY MESSAGES PART X_^1*_]_^1_%STRMSG UCMX_^1_%SPC 5_^1_%MESSAG UCMX,UCM2,1,'**€€*LOGICAL UNIT CAPABILITY ERROR',0_^1_%ADDMES UCM2,UCM1,' INITIALLY'_^1_%MESSAG UCMX,UCM3,1,' S',1,'BI IS NOT A ',1,'READ DEVICE',0_^1_%EQU UCM3TB(*-UCMX+SEGCOR)_^1_%ALF .,BIBOLOCOCI._^1_%MESSAG UCMX,UCM4,1,'LU ',1,'12 IS ALTERNATE FOR ',1,_^1_%MESSAG '12, BUT HAS LESS CAPABILITY',0_^1_%BZS UCMXFL(SEGSIZ-*+UCMX)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT MESSAGES PART X_^1*_]_^1_%STRMSG L€€UMX_^1_%SPC 5_^1_%MESSAG LUMX,LUM2,1,'***LOGICAL UNIT TABLE ERROR',0_^1_%ADDMES LUM2,LUM1,' INITIALLY'_^1_%MESSAG LUMX,LUM3,1,'NUM OF LUS DO NOT AGREE, ASSUME ',1,'12',0_^1_%MESSAG LUMX,LUM4,1,'LU 1 NOT CORE ALLOCATOR',0_^1_%MESSAG LUMX,LUM5,1,'NO VALID PHYSTB FOR LU ',1,'12',0_^1_%MESSAG LUMX,LUM6,2,'LU ',1,'12 WAS MARKED DOWN',0_^1_%BZS LUMXFL(SEGSIZ-*+LUMX)_^1_%EJT_]_^1*_]_^1*€€_*LOGICAL UNIT MESSAGES PART Y_^1*_]_^1_%STRMSG LUMY_^1_%SPC 5_^1_%MESSAG LUMY,YLUM,1,'***LOGICAL UNIT TABLE ERROR',0_^1_%ADDMES YLUM,YLUO,' INITIALLY'_^1_%MESSAG LUMY,LUM7,1,'LU ',1,'12 IS SHARED BUT UNMATCHED',0_^1_%MESSAG LUMY,LUM8,1,'LU ',1,'12 AND ',1,_^1_%MESSAG '12 MATCH BUT SHARED BIT NOT SET',0_^1_%MESSAG LUMY,LUMC,2,'LU ',1,'12 THREAD',0_^1_%MESSAG LUMY,LUMD,2,_^1_%MESSA€€G '_M',0_^1_%BZS LUMYFL(SEGSIZ-*+LUMY)_^1_%EJT_]_^1*_]_^1*_*LOGICAL UNIT MESSAGES PART Z_^1*_]_^1_%STRMSG LUMZ_^1_%SPC 5_^1_%MESSAG LUMZ,LUME,1,'LU ',1,'12 THREAD MAY BE BROKEN',0_^1_%MESSAG LUMZ,LUMF,2,'RETURN FOR ',1,'FNR WAS ',1,'1234',0_^1_%MESSAG LUMZ,LUM9,2,'LU ',1,'12 CURRENT PARA LIST AT ',1,'1234',0_^1_#MESSAG LUMZ,LUMA,2,'RC ',1,'JJJJ :RC_!KKKK :RTH LLLL :R',1,_^1_#MES€ΨSAG 'LU MMMM :RN_!NNNN :RS_!OOOO',0_^1_%MESSAG LUMZ,LUMB,2,'I/O IN PROGRESS',0_^1_%BZS LUMZFL(SEGSIZ-*+LUMZ)_^1_%SPC 5_^1_%SPC 5_^1*_]_^1*_$NEXT SEGMENT_^1*_]_^1_%EQU NEXTN(*/SEGSIZ-SYSSEG/SEGSIZ)_^1_%END_]_^__ΨPCO3RD CSY/ H30 P€1_%NAM CO3RD_(DECK-ID H30 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1STRTSG MAC A_^1_%EQU 'A'(*)_^1_%EQU 'A'N('A'/SEGSIZ-SYSSEG/SEGSIZ)_^1_%EQU 'A'OP('A'+SEGSIZ)_^1_%EQU 'A'IFG('A'+SEGSIZ+1)_^1_%EQU 'A'MFG('A'+SEGSIZ+2)_^1_%EQU 'A'C1(€€'A'+SEGSIZ+3)_^1_%EQU 'A'C2('A'+SEGSIZ+4)_^1_%EQU 'A'C3('A'+SEGSIZ+5)_^1_%EQU 'A'C4('A'+SEGSIZ+6)_^1_%NUM 0_^1_%EMC_]_^1STRMSG MAC A_^1_%EQU S'A'(*-SYSSEG)_^1_%EQU 'A'(*)_^1_%EQU 'A'N(*/SEGSIZ-SYSSEG/SEGSIZ)_^1_%EMC_]_^1CONSTR MAC A,B,C,D,E_^1_%ENA 'B'-'D'_^1_%ENQ 'C'_^1_%RTJ- CNS,I_^1_%NUM 'A'_^1_%ADC 'E'+1_^1_%EMC_]_^1LISTIT MAC A_^1_%ENA L'A'_^1_%ENQ 'A'_^1_%RTJ-€€ LST,I_^1_%EMC_]_^1WRITIT MAC A_^1_%ENA L'A'_^1_%ENQ 'A'_^1_%RTJ- WRT,I_^1_%EMC_]_^1ANSWER MAC A_^1_%ENA L'A'_^1_%ENQ 'A'_^1_%RTJ- ANS,I_^1_%EMC_]_^1MESSAG MAC A,B,C,D,E,F,G,H,I,J_^1_%EQU 'B'(*-'A'+SEGCOR)_^1_%EQU S'B'(*)_^1_%NUM 'C'_^1_%ALF .,'D'._^1EM_#IFC 'E',NE,0_^1_%IFC 'E',EQ,1_^1_%EQU 'B'V1(*-'A'+SEGCOR)_^1_%ALF .,'F'._^1_%EIF_]_^1EM_#IFC 'G',NE,0_^1_%IFC 'G€€',EQ,1_^1_%EQU 'B'V2(*-'A'+SEGCOR)_^1_%ALF .,'H'._^1_%EIF_]_^1EM_#IFC 'I',NE,0_^1_%IFC 'I',EQ,1_^1_%EQU 'B'V3(*-'A'+SEGCOR)_^1_%ALF .,'J'._^1_%EIF_]_^1_%EIF EM_^1_%EQU L'B'(*-S'B'-1)_^1_%EMC_]_^1ADDMES MAC A,B,C_^1_%EQU 'B'('A')_^1_%ALF .,'C'._^1_%EQU L'B'(*-S'A'-1)_^1_%EMC_]_^1_%EJT_]_^1*_*SYSTEM CHECKOUT 2.0 - 31 DEC. 71_^1*_*PROGRAM BASE - SYSTEM CHECKOUT 1.0_^1_%SPC€€ 3_^1*_$SYSTEM CHECKOUT SEGMENTS - 3RD_^1*_*SYSTEM CHECKOUT PROGRAM SEGMENTS_^1_%EQU SYSSEG(*)_^1*_]_^1_%EQU SEGSIZ(96)_^1*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_^1**************************MUST AGREE WITH EQU'S IN SYSCOP**************_^1_%EQU SEGCOR(22)_G**MSOS 4.0_^1_%EQU LDA(1),CON(3),LST(5),WRT(7),ANS(9),ATA(11),CNS(13),GMS(15)_^1_%EQU MOP(17)_^1_%EQU CMP(19)_J**MSO€€S 4.0_^1*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_"*_^1_%EJT_]_^1_%EXT SCHLNG,SCHTOP,VOLBLK,VOLEND_^1_%EXT CALTHD,SWAPON,LVLSTR_^1*_]_^1_%EXT ODEBUG,MIPRO_^1_%EXT LOADSD,JOBENT,JOBPRO,PROTEC_6**MSOS 4.0_^1_%EXT JPLOAD,JPCHGE,JPT13,LIBEDT_^1_%EXT RESTOR,RCOVER,BRKPT_<**MSOS 4.1**_^1_%EXT JCRDV4,JLGOV4,JPFLV4,JPSTV4,NAMEV4_/**MSOS 4.0_^1_%EXT AFILV4_K**MSOS 4.0_^1_%EXT TDFUNC€€,EFLIST,EFSTOR_;**MSOS 4.1**_^1*_]_^1_%EXT MIB,MIBX,UNPIO,SPASW,FILE1,FILE2,FILE3,FILE4,UNPTIM_^1_%EXT TRANV,LOADIN,SWTCH_^1_%EXT ALCLGH_'CORE ALLOCATOR LENGTH TABLE_^1_%EJT_]_^1*_]_^1*_*SCHEDULER STACK ANALYSIS_^1*_]_^1_%STRTSG SS_^1_%SPC 5_^1*_"*_"*_"*_"*_"*STACK ERROR_!*_"*_"*_"*_"*_"*_"*_^1SS1_"LDA =X$EF_^1_%RTJ- LDA,I_^1_%STA* SS1LVL_'PRIORITY LEVEL_^1_%LDA =XSCHLNG_$LENG€€TH OF STACK_^1_%ARS 2_^1_%STA* SS1NEN_'SAVE IT_^1_%CLR Q_^1SS11_!LDA =XSCHTOP_^1SS12_!RTJ- LDA,I_^1_%INA 0_^1_%SAZ SS15_)END OF THREAD_^1_%STA* SS1ENT_^1_%RTJ- LDA,I_^1_%AND- 6_^1_%SUB* SS1LVL_'CAN NOT BE .GT. PREVIOUS LVL._^1_%SAM SS13_)OK_^1_%SAZ SS13_)OK_^1_%RTJ* SS17_)ERROR_^1_%JMP* SS131_^1SS13_!ADD* SS1LVL_'SET UP LOWER LEVEL_^1_%STA* SS1LVL_^1SS131 TRQ A_^1_%SUB* SS€€1NEN_^1_%SAM SS132_^1_%RTJ* SS17_)TOO MANY ONTHREAD ERROR_^1_%INQ 1_,MAKE 1 EXTRA TO SHOW ERROR_^1SS15_!STQ* SSC1_)OK-NUMBER ON STACK_^1_%JMP* SS2_*GO ON_^1*_]_^1SS132 INQ 1_^1_%LDA* SS1ENT_^1_%INA 2_^1_%JMP* SS12_^1SS17_!NUM 0_^1_%STQ* SSC1_)ERROR SAVE Q_^1_%LDQ* SSMFG_^1_%SQZ SS18_)ERROR NOT OUT YET_^1SS171 LDQ* SSC1_^1_%JMP* (SS17)_'GO ON_^1*_]_^1SS18_!STA* SS1TP_^1SS181€€ ENA SSMXN-SSN_^1_%RTJ- GMS,I_^1_%ENA LSSM1_^1_%RTJ- MOP,I_(OUTPUT ERROR MESSAGE_^1_%LDA* SS1TP_^1_%JMP* SS171_^1*_]_^1SS1LVL NUM 0_^1SS1ENT NUM 0_^1SS1NEN NUM 0_^1SS1TP NUM 0_^1SS1NOS NUM 0_^1*_]_^1_%SPC 5_^1*_"*_"*_"*_"*_"*NUM OF ENTRIES*_"*_"*_"*_"*_"*_"*_^1SS2_"ENA SSMXN-SSN_^1_%RTJ- GMS,I_^1_%LDA* SSMFG_^1_%SAN SS21_)NOT RELATED_^1_%RAO- SSM2,I_^1SS21_!LDA* SS1NEN_€€^1_%RTJ- CON,I_^1_%STQ- SSM2V1,I_$SAVE NUM OF ENTRIES_^1_%LDA* SSC1_^1_%RTJ- CON,I_^1_%STQ- SSM2V2,I_$OUTPUT MESSAGE_^1_%LISTIT SSM2_^1*_]_^1_%ENQ WSSN-SSN_$EXIT_^1_%JMP* (SS)_^1_%SPC 5_^1_%BZS SSFIL(SEGSIZ-*+SS)_^1_%EJT_]_^1*_]_^1*_*SCHEDULER STACK ANALYSIS PARTW_^1*_]_^1_%STRTSG WSS_^1_%SPC 5_^1*_"*_"*_"*_"*_"*STACK DUMP_"*_"*_"*_"*_"*_"*_"*_^1SS3_"LDA* WSSC1_^1_%SAN SS32_)S€€OMETHING TO DO_^1_%JMP* SS4_*DONE_^1SS32_!LISTIT SSM3_'HEADING_^1_%LDA =XSCHTOP_^1_%RTJ- LDA,I_^1SS321 RTJ* SS3GT_^1SS33_!ENA SSMXN-WSSN_"GET BLOCK FOR MESSAGES_^1_%RTJ- GMS,I_^1_%CONSTR 5,SS3TP,SSM4+1,WSS,1_^1_%LISTIT SSM4_^1_%RAO* SS3CTR_^1_%LDA* WSSC1_^1_%SUB* SS3CTR_^1_%SAN SS34_^1_%JMP* SS4_*EXIT_^1SS34_!LDA* SS3TP+3_%DO NEXT_^1_%JMP* SS321_^1*_]_^1SS3CTR NUM 0_^1_%SPC 5€€_^1*_"*_"*_"*_"*_"*LAST ENTRY TO BE SCHEDULED_!*_"*_"*_"*_^1SS4_"LDA =N$B4_^1_%RTJ- LDA,I_(GET TOP OF EMPTY_^1_%INA 0_^1_%SAZ SS5_*ALL WERE USED_^1_%RTJ* SS3GT_(GET ONE_^1_%LDA* SS3TP+2_^1_%SAZ SS5_*NOT USED_^1SS41_!ENA SSMYN-WSSN_^1_%RTJ- GMS,I_^1_%CONSTR 5,SS3TP,SSM5V1,WSS,1_^1_%LISTIT SSM5_^1*_]_^1_%SPC 5_^1*_"*_"*_"*_"*_"*VOLATILE STORAGE_!*_"*_"*_"*_"*_"*_^1SS5_"LDA =XV€€OLEND_^1_%SUB* SS5TP_^1_%STA* SS3TP_(SAVE TOTAL VOL_^1_%LDA =N$F0_^1_%RTJ- LDA,I_^1_%SUB* SS5TP_(ASSIGNED_^1_%STA* SS5TP_^1_%ENA SSMYN-WSSN_^1_%RTJ- GMS,I_^1_%CONSTR 2,SS5TP,SSM6V1,WSS,4_^1_%LDA* SS5TP_^1_%SAM SS51_)NEG VOL USED_^1_%SUB* SS3TP_^1_%SAP SS51_)ERROR VOL ALL GONE_^1_%RAO- SSM6,I_^1SS51_!LISTIT SSM6_^1*_]_^1_%SPC 5_^1*_$CLR A_,EXIT_^1_%STA* WSSC1_^1_%STA* WSSMFG_^€€1_%ENQ ACN-WSSN_^1_%JMP* (WSS)_^1*_]_^1_%SPC 5_^1*_8GET ENTRY_^1SS3GT NUM 0_^1_%STA* SS3TP_^1_%ENQ 3_^1SS3GT1 AAQ A_^1_%RTJ- LDA,I_^1_%STA* SS3TP+1,Q_#SAVE ENTRY_^1_%INQ -1_^1_%SQM SS3GT2_^1_%LDA* SS3TP_^1_%JMP* SS3GT1_^1SS3GT2 JMP* (SS3GT)_^1*_]_^1SS5TP ADC VOLBLK_^1_%BZS SS3TP(5)_^1_%SPC 5_^1_%BZS WSSFIL(SEGSIZ-*+WSS)_^1_%EJT_]_^1*_]_^1*_*ALLOCATABLE CORE ANALYSIS_^1*€€_]_^1_%STRTSG AC_^1_%SPC 5_^1*_"*_"*_"*_"*_"*ALLOCATABLE CORE MAP SET-UP_!*_!*_"*_"*_^1AC1_"ENA ACMXN-ACN_#GET MESSAGE BLOCK_^1_%RTJ- GMS,I_(OUTPUT HEADER_^1_%LISTIT ACM2_^1*_]_^1AC11_!ENA 15_+SET INDEX FOR ALCLGH_^1_%STA* ACC4_^1_%ENA 2_,SET INITIAL LENGTH FOR ALLOCATABLE_^1_%STA* ACC1_^1_%LDQ =XALCLGH_$ADDRESS OF ALLOCATABLE CORE_^1AC115 TRQ A_,LENGTH TABLE IN AUTOLOAD IMA€€GE SPACE_^1_%RTJ- ATA,I_^1_%SAZ NXTACL_'IF AREA IS ZERO GET NEXT LENGTH_^1_%INA 2_,IF NOT, ADJUST FOR LENGTH AND THREAD_^1_%ADD* ACC1_^1_%STA* ACC1_^1NXTACL LDA* ACC4_)LAST AREA_^1_%INA -1_^1_%SAZ ACLNTH_'YES_^1_%STA* ACC4_)NO, GET NEXT LENGTH_^1_%INQ 1_,ADJUST FOR NEXT TABLE ENTRY_^1_%JMP* AC115_^1ACLNTH LDQ =XCALTHD_$GET START OF ALLOCATABLE CORE_^1_%TRQ A_^1_%INA 1_^1_%R€€TJ- ATA,I_^1_%STA* ACIFG_(START OF ALLOCATABLE CORE_^1*_]_^1_%TRQ A_^1_%INA 1_^1_%RTJ- LDA,I_^1_%STA* ACC3_)TOP OF EMPTY THREAD_^1*_]_^1_%LDA =XSWAPON_^1_%RTJ- LDA,I_(GET SWAP FLAG_^1_%SAZ AC12_^1_%LDA* ACC1_)GET LENGTH OF ALLOCATABLE CORE_^1_%ADD* ACIFG_(ADD START OF ALLOCATABLE CORE_^1_%INA -1_+ADJUST FOR UNPROTECTED -1_^1_%STA* AC1TMP_'SAVE LOWEST UNPROTECTED-1_^1_%LDA =X$€€F6_(GET HIGHEST UNPROTECTED -1_^1_%RTJ- ATA,I_(GET HIGHEST+1_^1_%SUB* AC1TMP_^1_%INA -1_+GET LENGTH_^1_%ADD* ACC1_^1_%STA* ACC1_)TOTAL CORE_^1*_]_^1*_]_^1AC12_!LDA =N$E7_(GET LENGTH OF SYSTEM DIRECTORY-MM PORTION_^1_%RTJ- ATA,I_(LENGTH OF CORE S.D._^1_%STA* AC1TMP_^1_%LDA =N$E6_^1_%RTJ- ATA,I_^1_%SUB* AC1TMP_^1_%STA* ACMFG_^1*_8GET START OF SYSTEM DIRECTORY_^1_%LDA =N$EB_^1_%RT€€J- ATA,I_^1_%ADD* AC1TMP_^1_%STA* ACC2_)START OF SYS DIR_^1*_]_^1_%ENQ WACN-ACN_^1_%JMP* (AC)_^1*_]_^1AC1TMP NUM 0_^1_%SPC 5_^1_%BZS ACFIL(SEGSIZ-*+AC)_^1_%EJT_]_^1*_]_^1*_*ALLOCATABLE CORE ANALYSIS PART W_^1*_]_^1_%STRTSG WAC_^1AC2QSV EQU AC2QSV(WACC4)_DSYSCOP 2.0_^1*_8WACIFG = START OF ALLOCATABLE CORE-NEXT BLOCK_^1*_8WACMFG = LENGTH OF SYSTEM DIRECORY_^1*_8WACC1 = TOTAL AL€€LOCATABLE CORE_^1*_8WACC2 = START OF SYS DIR_^1*_8WACC3 = TOP OF EMPTY CORE THREAD_^1_%SPC 5_^1AC2SAC NOP 0_^1AC2BUF LDA* WACIFG_^1_%STA* AC2SAC_^1_%JMP* AC2_^1_%BZS AC2BU(7-*+AC2BUF)_^1*_"*_"*_"*_"*_"*ALLOCATABLE CORE MAP_"*_"*_"*_"*_"*_^1AC2_"ENQ 6_^1AC21_!LDA* AC2SAC_'GET FIRST 7 WORDS IN BLOCK_^1_%AAQ A_^1_%RTJ- LDA,I_^1_%STA* AC2BUF,Q_^1_%INQ -1_^1_%SQM AC22_^1_%JMP* €€AC21_^1*_]_^1AC22_!LDA* AC2BUF+1_$THREAD_^1_%SUB* AC2SAC_^1_%INA -2_^1_%SAZ AC225_^1_%JMP* AC25_)EMPTY BLOCK_^1*_8FULL BLOCK_^1AC225 LDQ* WACMFG_'FIND DIR. MATCH_^1_%INQ -3_^1AC2SSD LDA* WACC2_^1_%AAQ A_^1_%RTJ- LDA,I_(GET LENGTH_^1_%INA 2_^1_%EOR* AC2BUF_^1_%SAZ AC231_(FOUND_^1_%INQ -7_^1_%SQM AC23_)CANNOT FIND_^1_%JMP* AC2SSD_^1AC23_!ENA ACMXN-WACN_^1_%RTJ- GMS,I_^1_%LD€€Q =AXX_)NO MATCH_^1_%STQ- ACM3+1,I_^1_%JMP* AC232_^1*_]_^1AC231 STQ* AC2QSV_^1_%ENA ACMXN-WACN_^1_%RTJ- GMS,I_^1_%LDQ* AC2QSV_^1_%INQ 3_,CALCULATE INDEX NUM_^1_%LRS 16_^1_%DVI- 5_,GET INDEX_^1_%RTJ- CON,I_^1_%STA- ACM3+1,I_^1AC232 STQ- ACM3+2,I_^1*_]_^1AC233 CONSTR 8,AC2SAC,ACM3V1,WAC,1_^1_%LISTIT ACM3_^1_%LDA* AC2BUF_'CHECK ERRORS_^1_%INA -2_+AT LEAST 2 CELLS SHOULD BE ALO€€CATED_^1_%SAM AC270_(NEG LENGTH_^1_%LDA* AC2BUF+1_^1_%INA 0_^1_%SAM AC270_(NEG THREAD_^1_%LDA* WACC1_^1_%SUB* AC2BUF_^1_%STA* WACC1_^1AC270 SAM AC27_^1_%SAZ AC242_(DONE_^1_%LDA* AC2SAC_^1_%ADD* AC2BUF_^1_%STA* AC2SAC_'NEXT BLOCK_^1_%JMP* AC2_^1*_]_^1AC242 LDA* WACC3_(DONE_^1_%INA 0_^1_%ADD* WACC1_^1_%ADD* AC2ERR_^1_%SAZ AC243_(NO ERROR_^1AC27_!LISTIT ACM1_^1AC243 LDA =X$€€E7_(SAVE INDEX TO FIRST MM ENTRY IN SYS DIR_^1_%RTJ- LDA,I_(FOR NEXT OVERLAY_3SYSCOP 2.0_^1_%STA* WACC4_LSYSCOP 2.0_^1_%ENQ XACN-WACN_#EXIT_?SYSCOP 2.0_^1_%JMP* (WAC)_^1*_]_^1AC25_!LDA* WACC3_(EMPTY BLOCK_^1_%EOR* AC2SAC_^1_%SAZ AC251_(OK_^1_%RAO* AC2ERR_'THREAD BROKEN_^1AC251 LDA* AC2BUF+1_$THREAD_^1_%STA* WACC3_^1AC252 ENA ACMXN-WACN_^1_%RTJ- GMS,I_^1_%JMP* AC233_^1*_]_^1AC2€€ERR NUM 0_^1_%SPC 5_^1_%BZS WACFIL(SEGSIZ-*+WAC)_^1_%EJT_]_^1*_]_^1*_*ALLOCATABLE CORE ANALYSIS PART X_^1*_]_^1_%STRTSG XAC_^1*_8XACC1 = ERROR COUNT_0SYSCOP 2.0_^1*_8XACC2 = START OF MM SYSTEM DIRECTORY_^1*_8XACC2 = CURRENT INDEX_.SYSCOP 2.0_^1*_8XACC4 = INDEX TO FIRST MM ENTRY_#SYSCOP 2.0_^1*_8XACMFG = LENGTH OF SYSTEM DIRECTORY_^1_%EQU AC3ERR(XACC1)_DSYSCOP 2.0_^1_%SPC 5_^1€€*_"*_"*_"*_"*_"*SYSTEM DIRECTORY CHECKING_"*_"*_"*_"*_^1AC3_"LDA* XACC4_(A=INDEX TO FIRST MM ENTRY_*SYSCOP 2.0_^1AC31_!ADD* AC3DIX_'THIS INDEX_^1_%STA* AC3TP_(CHECK IF IN JP TABLE_^1_%ENQ AC3TBL_^1AC312 LDA* AC3JBT,Q_^1_%EOR* AC3TP_^1_%SAZ AC314_(MATCHES_^1_%INQ -1_^1_%SQM AC314_(NO MATCH, Q MINUS = NOT JP MODULE_!SYSCOP 2.0_^1_%JMP* AC312_(CONTINUE_^1*_]_^1*_]_^1AC314 LDA* X€€ACC2_(Q HAS TABLE INDEX FOR JP MODULE_^1_%ADD* AC3DIX_^1_%RTJ- LDA,I_(GET FIRST WORD_^1_%LLS 2_,TEMPORARILLY PUT D BIT IN Q_(SYSCOP 2.0_^1_%ARS 6_PSYSCOP 2.0_^1_%AND- 6_,MASK OUT REQ PRI._^1_%STA* AC3OTP+1_^1_%LRS 2_,D BIT BACK TO A_4SYSCOP 2.0_^1_%AND- $31_NSYSCOP 2.0_^1_%SAZ AC314B_KSYSCOP 2.0_^1_%JMP* AC318_(DONT CHECK IF PARTITION CORE ENTRY SYSCOP 2.0_^1AC314B LDA* AC3OTP€€+1_$GET REQUEST PRIORITY_/SYSCOP 2.0_^1_%SQP AC315_,JP MODULE_^1*_8NOT JP MODULE_^1_%INA -4_^1_%SAM AC317_(ERROR_^1_%JMP* AC318_(NO ERROR_^1AC315 INQ -AC3JT0_%JP MODULE_^1_%SQM AC316_^1_%INA -1_^1_%INQ -AC3JT1+AC3JT0_^1_%SQM AC316_^1_%INA -1_^1_%INQ -AC3JT2+AC3JT1_^1_%SQM AC316_^1_%INA -1_^1_%INQ -AC3JT3+AC3JT2_A**MSOS 4.1**_^1_%SQM AC316_J**MSOS 4.1**_^1_%INA -1_M*€€*MSOS 4.1**_^1AC316 SAN AC317_^1_%JMP* AC318_(NO ERROR-CHECK IF DONE_^1AC317 ENA ACMYN-XACN_"ERROR FOUND_^1_%RTJ- GMS,I_^1_%LDA* AC3ERR_^1_%SAN AC3171_'OUT ALL READY_^1_%RAO* AC3ERR_^1_%LISTIT ACM4_^1AC3171 LDA* AC3DIX_^1_%CLR Q_^1_%DVI- 5_^1_%INA 1_^1_%STA* AC3OTP_^1_%CONSTR 2,AC3OTP,ACM5V1,XAC,11_^1_%LISTIT ACM5_^1AC318 LDA* AC3DIX_^1_%INA 7_^1_%STA* AC3DIX_^1_%SUB* XACM€€FG_^1_%SAP AC319_^1_%JMP* AC3_NSYSCOP 2.0_^1AC319 ENQ YACN-XACN_#EXIT_?SYSCOP 2.0_^1_%JMP* (XAC)_^1*_8JOB PROCESSOR INDICES_^1AC3JBT ADC LOADSD_K**MSOS 4.0_^1_%EQU AC3JT0(*-AC3JBT)_^1_%ADC JOBENT_^1_%EQU AC3JT1(*-AC3JBT)_^1_%ADC JOBPRO,JPLOAD,JPCHGE,JPT13_^1_%ADC JCRDV4,JLGOV4,JPSTV4,RESTOR_6**MSOS 4.0_^1_%EQU AC3JT2(*-AC3JBT)_^1_%ADC PROTEC,LIBEDT,RCOVER,BRKPT_5**MSOS 4€€.1**_^1_%ADC JPFLV4,NAMEV4,AFILV4_;**MSOS 4.1**_^1_%EQU AC3JT3(*-AC3JBT)_?**MSOS 4.1**_^1_%ADC EFLIST,EFSTOR,TDFUNC,MIPRO,ODEBUG_.**MSOS 4.1**_^1_%EQU AC3TBL(*-AC3JBT-1)_^1*_]_^1_%BZS AC3OTP(2)_^1AC3DIX NUM 0_^1AC3TP NUM 0_^1_%SPC 5_^1_%BZS XACFIL(SEGSIZ-*+XAC)_^1_%EJT_]_^1*_]_^1*_*ALLOCATABLE CORE ANALYSIS PARTY_^1*_]_^1_%STRTSG YAC_^1_%SPC 5_^1AC4_"LDA* YACC2_^1_%ADD* €€AC4DIX_^1_%INA 4_^1_%RTJ- ATA,I_^1_%STA* AC4TP_(SAVE LENGTH OF THIS ENTRY_^1_%LDA* YACC2_(GET WORD ZERO_6**MSOS 4.0_^1_%ADD* AC4DIX_K**MSOS 4.0_^1_%RTJ- ATA,I_L**MSOS 4.0_^1_%AND- $31_*$4000=D BIT_8**MSOS 4.0_^1_%SAZ 1_,SKIP IF D BIT NOT SET IN DIRECTORY **MSOS 4.0_^1_%JMP* AC44_N*MSOS 4.0_^1_%LDA* YACC2_^1_%ADD* AC4DIX_'GET REQ PRIORITY_^1_%RTJ- ATA,I_^1_%ARS 4_^1_%AND- 6_^1_%€€STA* AC4OTP+1_^1AC42_!ADD =XLVLSTR_^1_%RTJ- LDA,I_(GET START FROM FAILED IMAGE_'SYSCOP 2.0_^1_%ADD* AC4TP_(START OF AREA+LENGTH OF ENTRY_^1_%INA 2_,+2_^1_%STA* AC4TP_^1_%LDA* AC42+1_^1_%INA 16_^1_%RTJ- ATA,I_)ADDRESS OF VALUE_^1_%RTJ- LDA,I_(GET AVAIL ALLOC FROM FAILED IMAGE SYS 2.0_^1_%SUB* AC4TP_^1_%SAM AC45_)ERROR_^1AC44_!LDA* AC4DIX_^1_%INA 7_^1_%STA* AC4DIX_^1_%SUB* YACM€€FG_^1_%SAP AC49_)DONE_^1_%JMP* AC4_^1*_]_^1AC49_!CLR A_,EXIT_^1_%STA* YACIFG_^1_%STA* YACMFG_^1_%STA* YACC1_^1_%STA* YACC2_^1_%STA* YACC3_^1_%ENQ JPN-YACN_^1_%JMP* (YAC)_^1*_]_^1AC45_!ENA ACMYN-YACN_"ERROR_^1_%RTJ- GMS,I_^1_%LDA* YACC1_^1_%SAN AC451_^1_%RAO* YACC1_^1_%LISTIT ACM4_^1AC451 LDA* AC4DIX_^1_%CLR Q_^1_%DVI- 5_^1_%INA 1_^1_%STA* AC4OTP_^1_%CONSTR 2,AC4OTP,ACM6V1,Y€€AC,11_^1_%LISTIT ACM6_^1_%JMP* AC44_^1*_]_^1AC4DIX NUM 0_^1AC4TP NUM 0_^1AC4OTP NUM 0,0_^1_%SPC 5_^1_%BZS YACFIL(SEGSIZ-*+YAC)_^1_%EJT_]_^1*_]_^1*_*JOB PROCESSOR ANALYSIS_^1*_]_^1_%STRTSG JP_^1_%SPC 5_^1*_8GO GET VALUES FOR CHECKING_^1JP2_"ENQ JP2ATL-1_^1JP21_!LDA* JP2AT,Q_^1_%RTJ- LDA,I_^1_%STA* JP2AT,Q_^1_%INQ -1_^1_%SQM JP220_^1_%JMP* JP21_^1JP220 ENA JPMXN-JPN_#GET €€MESSAGE BLOCK_^1_%RTJ- GMS,I_^1_%SPC 5_^1*_"*_"*_"*_"*_"*CHECK SWAP STATUS *_#*_"*_"*_"*_"*_^1JP22_!LDA* JP2SSW_'WAITING TO SWAP_^1_%SAZ JP23_)NO_^1_%LDA* JP2UPI_'YES_^1_%ADD* JP2UPT_'WAITING FOR UNP.I/O TO COMPLETE_^1_%SAZ JP221_(NO_^1*_8POSSIBLE I/O HANGUP_^1_%LISTIT JPM1_^1_%JMP* JP23_^1*_8SWAP RATE HIGH_^1JP221 LISTIT JPM2_^1*_8SWAPPED_^1JP23_!LDA* JP2SPO_'SWAPPED WITH JP I€€N_^1_%SAZ JP3_*NO_^1_%LDA* JP2FI1_^1_%SAZ JP3_*NO_^1*_]_^1_%LISTIT JPM3_^1_%JMP* JP331_^1_%SPC 5_^1*_"*_"*_"*_"*_"*SWAP STATUS_!*_"*_"*_"*_"*_"*_"*_^1JP3_"LDA* JP2SPO_^1_%SAZ JP31_)NOT SWAPPED_^1_%LISTIT JPM4_^1_%JMP* JP33_^1*_]_^1JP31_!LDA* JP2SSW_'WAITING_^1_%SAZ JP32_)NO_^1_%LISTIT JPM6_^1_%JMP* JP33_^1*_8SWAPPED NOT WAITING_^1JP32_!LISTIT JPM5_^1*_8JP IN CORE_^1*_]_^1_%SPC€€ 5_^1JP33_!LDA* JP2FI1_'JP IN CORE CHECK_^1_%SAZ JP11_^1_%LISTIT JPM8_^1JP331 ENQ WJPN-JPN_$JP IN CORE CONTINUE CHECKS_^1_%JMP* (JP)_^1_%SPC 5_^1*_"*_"*_"*_"*_"*JP NOT IN CORE CHECKS_!*_"*_"*_"*_"*_^1JP11_!LISTIT JPM7_^1_%LDA* JP2MIB_^1_%SAZ JP113_(NO INPUT PENDING_^1_%ENA JPMZN-JPN_#GET MESSAGE BLOCK_^1_%RTJ- GMS,I_^1_%LDA* JP2MIX_'SEE IF FOR JP_^1_%SAZ JP112_(FOR JP_^1*_€€8FOR MIPRO_^1_%LISTIT JPME_^1_%JMP* JP113_^1*_8FOR JP_^1JP112 LISTIT JPMD_^1*_]_^1JP113 ENQ XPRN-JPN_$CONTINUE WITH PARTITIONS_^1_%JMP* (JP)_^1_%SPC 5_^1_%EQU JP2AT(*)_$ADDRESS TABLE_^1JP2UPI ADC UNPIO_^1JP2SSW ADC SPASW_^1JP2FI1 ADC FILE1_^1JP2UPT ADC UNPTIM_^1JP2SPO ADC SWAPON_^1JP2MIB ADC MIB_^1JP2MIX ADC MIBX_^1_%EQU JP2ATL(*-JP2AT)_^1_%SPC 5_^1_%BZS JPFIL(SEGSIZ€€-*+JP)_^1_%EJT_]_^1*_]_^1*_*JOB PROCESSOR ANALYSIS PARTW_^1*_]_^1_%STRTSG WJP_^1_%SPC 5_^1*_8GET REQUIRED VALUES_^1JP4_"ENQ JP4ATL-1_^1JP41_!LDA* JP4AT,Q_^1_%RTJ- LDA,I_^1_%STA* JP4AT,Q_^1_%INQ -1_^1_%SQM JP42_^1_%JMP* JP41_^1*_]_^1JP42_!ENA JPMYN-WJPN_"GET MESSAGE BLOCK_^1_%RTJ- GMS,I_^1_%SPC 5_^1*_"*_"*_"*_"*_"*FILE LOCATIONS_#*_"*_"*_"*_"*_"*_^1_%CONSTR 6,JP4FI1,JPM9V1,WJP€€,1_^1_%LISTIT JPM9_^1_%SPC 5_^1*_*JPLOCK OUT SWITCH_^1_%LDA* JP4SWT_^1_%SAZ JP44_)NO LOCK OUT_^1_%SAP JP43_)SIGN OFF_^1*_8LOCKOUT FOR LIB_^1_%LISTIT JPMA_^1_%JMP* JP44_^1*_]_^1JP43_!LISTIT JPMB_^1*_]_^1JP44_!LDQ* JP4UPI_^1_%ADQ* JP4UPT_^1_%SQN JP45_)I/O NOT ACTIVE_^1_%JMP* JP46_^1JP45_!STQ* JP4TP_(I/O ACTIVE GET STACK ADDRESS_^1_%LDA* JP4TRV_^1_%INA 11_+STACK ADDRESS_^1_%RTJ- €€LDA,I_^1_%STA* JP4TP+1_^1JP451 ENA JPMZN-WJPN_^1_%RTJ- GMS,I_^1_%CONSTR 2,JP4TP,JPMF+1,WJP,22_^1_%LDA* JP4SWT_^1_%SAP JP452_(STACKED REQUESTS_^1_%LISTIT JPMF_^1_%JMP* JP46_^1JP452 LISTIT JPMC_^1*_8CHECK PENDING REQUESTS_^1JP46_!ENA JPMZN-WJPN_^1_%RTJ- GMS,I_^1_%LDA* JP4MIB_'PENDING REQUEST_^1_%SAZ JP47_)NO_^1_%LDA* JP4MIX_'YES_^1_%SAZ JP461_^1*_8FOR MIPRO_^1_%LISTIT JPME_^1_€€%JMP* JP47_^1JP461 LISTIT JPMD_^1*_8EXIT_^1JP47_!ENQ XPRN-WJPN_#NEXT SEGMENT_7**MSOS 4.0_^1_%JMP* (WJP)_^1_%SPC 5_^1_%EQU JP4AT(*)_^1JP4TRV ADC TRANV_^1JP4UPI ADC UNPIO_^1JP4FI1 ADC FILE1,FILE2,FILE3,FILE4,LOADIN,$F3_^1JP4SWT ADC SWTCH_^1JP4UPT ADC UNPTIM_^1JP4MIB ADC MIB_^1JP4MIX ADC MIBX_^1_%EQU JP4ATL(*-JP4AT)_^1JP4TP NUM 0,0_^1_%SPC 5_^1_%BZS WJPFIL(SEGSIZ-*+WJP€€)_^1 EJT_]_^1*_]_^1*_*PRINT PARTITION THREADS AND ADDRESSES_,**MSOS 4.0_^1*_]_^1_%STRTSG XPR_^1_%LDA =XPARTBL_$DON'T ANALYZE IF NO PARTITION CORE_^1_%EOR- $11_^1_%SAN P1_^1_%ENQ NEXTN-XPRN_^1_%JMP* (XPR)_(EXIT_^1*_8PRINT PARTITION CORE ADDRESSES_^1P1_#ENA PARXN-XPRN_"OUTPUT HEADER MESSAGE_^1_%RTJ- GMS,I_(GET MESSAGE BLOCK_^1_%LISTIT PAR1_^1_%ENQ 0_^1_%STQ* INDEX_^1P1A_"LDA €€=XPARTBL_$GET TABLE CONTENTS_^1_%AAQ A_^1P2_#RTJ- ATA,I_^1_%STQ* PARTMP_'SAVE PARTITION NUMBER_^1_%STA* PARTMP+1_^1P2A_"ENA PARXN-XPRN_"RESTORE MESSAGE BUFFER_^1_%RTJ- GMS,I_^1P2B_"CONSTR 2,PARTMP,PAR2V1,XPR,1_"BUILD OUTPUT BUFFER_^1_%LISTIT PAR2_'PRINT PARTITION ADDRESSES_^1_%LDA* NUMPAR_'NUMBER OF PARTITIONS_^1_%SUB* INDEX_^1_%SAZ P3_^1_%RAO* INDEX_^1_%LDQ* INDEX_^1_%JMP* P1A_€€^1 SPC 3_]_^1*_8PRINT HEADER FOR THREADS MESSAGE_^1P3_#LISTIT PAR3_'PRINT THREADS MESSAGE_^1P4_#ENQ 0_^1_%STQ* INDEX_^1P5_#STQ* PARTMP_'SAVE PARTITION NUMBER_^1_%LDA =XPARTBL_^1_%INA 17_^1_%STA* XPRC1_(ADDR OF THDS TABLE_^1_%INA 17_^1_%STA* XPRC2_(ADDR OF USE TABLE_^1_%LDA* XPRC1_(ADDR OF THREADS TABLE_^1_%AAQ A_,INDEX BY CORRECT PARTITION NO)_^1_%RTJ- LDA,I_(GET WORD FROM FA€€ILED IMAGE_^1_%STA* PARTMP+1_^1_%SAZ NOTHD_(PARTITION NOT USED_^1_%TCA A_^1_%SAN PTHD_)ANYTHING THREADED_^1_%JMP* NOTHD_(NOTHING THREADED , CONTINUE_^1PTHD_!CONSTR 2,PARTMP,PAR2V1,XPR,1_"BUILD OUTPUT BUFFER_^1_%LISTIT PAR2_'PRINT THREADS CONTENTS_^1NOTHD RAO* INDEX_^1_%LDA* INDEX_^1_%TRA Q_^1_%INA -16_+DONE_^1_%SAZ P6_+SKIP IF DONE_^1_%JMP* P5_^1P6_#ENQ YPRN-XPRN_#GET NEXT €€SEGMENT_^1_%JMP* (XPR)_^1NUMPAR ADC LSTPRT_^1PARTMP BZS PARTMP(2)_^1INDEX BZS INDEX(1)_^1_%BZS XPRFIL(SEGSIZ-*+XPR)_^1 EJT_]_^1*_]_^1*_/PRINT PARTITION USE BITS_4**MSOS 4.0_^1*_]_^1_%STRTSG YPR_^1*_]_^1_%ENA PARXN-YPRN_^1_%RTJ- GMS,I_(GET MESSAGE BLOCK_^1_%LISTIT PAR5_'PARTITIONS IN USE MESSAGE_^1_%ENQ 0_^1_%STQ* INDEX2_^1CNTINU LDA* YPRC2_(ADDR OF USE TABLE_^1_%AAQ A_,INDEX €€BY PARTITION NUMBER_^1_%RTJ- LDA,I_(GET WROD FROM FAILED IMAGE_^1_%SAN INUSE_^1_%JMP* NOUSE_(SKIP IF IN USE_^1INUSE STA* USETMP+1_$SAVE USE BITS_^1_%STQ* USETMP_'SAVE PARTITION NUMBERS_^1_%ENA PARXN-YPRN_^1_%RTJ- GMS,I_(GET MESSAGE BLOCK_^1_%CONSTR 2,USETMP,PAR2V1,YPR,1_"BUILD OUTPUT BUFFER_^1_%LISTIT PAR2_'PRINT USE BITS_^1NOUSE RAO* INDEX2_^1_%LDA* INDEX2_^1_%TRA Q_^1_%INA €€-16_*DONE_^1_%SAZ P7_+EXIT_^1_%JMP* CNTINU_^1P7_#ENQ PCN-YPRN_$NEXT SEGMENT_^1_%JMP* (YPR)_^1INDEX2 BZS INDEX2(1)_^1USETMP BZS USETMP(2)_^1*_]_^1_%BZS THDADR(1)_#ADDR OF THDS TABLE_^1_%BZS USEADR(1)_#ADDR OF USE TABLE_^1_%BZS YPRFIL(SEGSIZ-*+YPR)_^1 EJT_]_^1*_]_^1*_*PARTITION CORE ANALYSIS_^1*_]_^1_%STRTSG PC_^1_%EXT LSTPRT_^1_%EXT BUSY_^1_%EXT PARTBL_^1PC1_"LDA =XPARTBL_$€€CHECK PARTITION 0 GT 8000_^1_%RTJ- ATA,I_^1_%STA* CURPAR_'SAVE CURRENT PARTITION ADDRESS_^1_%INA -1_^1_%SAP PC11_)SKIP IF ADDR OK_^1_%ENA PCMN-PCN_^1_%RTJ- GMS,I_(GET MSG BLOCK_^1_%LISTIT PCM1_'ILLEGAL PARTITION 0_^1PC11_!ENQ 1_^1PC12_!STQ* PCIDX_^1_%LDA =XPARTBL_^1_%AAQ A_^1_%RTJ- ATA,I_(GET NEXT PC ADDR_^1_%LDQ* CURPAR_^1_%STA* CURPAR_'UPDATE CURRENT PARTITION ADDRESS_^1_%R€€TJ- CMP,I_)COMPARE_^1_%SAP PC15_)SKIP IF PARTITION IN ORDER_^1_%ENA PCMN-PCN_^1_%RTJ- GMS,I_(GET MSG BLOCK_^1_%LISTIT PCM2_^1_%JMP* PC16_^1PC15_!LDA* NUMPRT_'CHECK IF DONE_^1_%SUB* PCIDX_^1_%SAZ PC16_)AKIP IF ALL CHECKED_^1_%RAO* PCIDX_(UPDATE IF INDEX_^1_%LDQ* PCIDX_^1_%JMP* PC12_^1*_]_^1PC16_!LDA =XBUSY_'ADDR OF BUSY INDICATOR_^1_%RTJ- ATA,I_^1_%TRA Q_+BUSY INDICATOR TO Q_^1€€_%CLR A_^1_%SQN PC17_)Q=0, CHECK IF 16 PARTITIONS SPECIFIED_^1_%ENA 16_^1_%STA* BSYBIT_^1_%JMP* PC18_^1PC17_!LRS 1_^1_%SAM PC18_^1_%RAO* BSYBIT_'UPDATE PARTITION COUNTER_^1_%JMP* PC17_^1PC18_!LDA* NUMPRT_^1_%INA 1_^1_%SUB* BSYBIT_^1_%SAZ PC20_)SKIP IF BIT COUNT OK_^1_%ENA PCMN-PCN_^1_%RTJ- GMS,I_^1_%LISTIT PCM3_'ILLEGAL BUSY INDICATOR_^1PC20_!ENQ NEXTN-PCN_^1_%JMP* (PC)_)G€€ET NEXT SEGMENT_^1NUMPRT ADC LSTPRT_'NUMBER OF PARTITIONS-1_^1_%BZS PCIDX(1)_^1_%BZS CURPAR(1)_#CURRENT PARTITION ADDR_^1_%BZS BSYBIT(1)_^1_%BZS PCFIL(SEGSIZ-*+PC)_^1_%EJT_]_^1*_]_^1*_*SCHEDULER STACK MESSAGES PART X_^1*_]_^1_%STRMSG SSMX_^1_%SPC 5_^1_%MESSAG SSMX,SSM1,1,'*** SCHEDULER STACK ERROR',0_^1_%MESSAG SSMX,SSM2,2,'NUM OF SCHEDL STACK ENTRIES WAS ',1,_^1_%MESSAG '12 €€:RNUM OF SCHEDL CALLS STACKED WAS ',1,'12',0_^1_%MESSAG SSMX,SSM3,2,'SCHEDL STACK ENTRIES',0_^1_%MESSAG SSMX,SSM4,2,'1234/ 1234 1234 1234 1234',0_^1_%BZS SSMXFL(SEGSIZ-*+SSMX)_^1_%EJT_]_^1*_]_^1*_*SCHEDULER STACK MESSAGES PART Y_^1*_]_^1_%STRMSG SSMY_^1_%SPC 5_^1_#MESSAG SSMY,SSM5,2,'LAST ENTRY TO BE SCHECULED :R',1,_^1_%MESSAG '1234/ 1234 1234 1234 1234',0_^1_%MESSAG SSMY,€€SSM6,1,'THERE WERE ',1,'1234 OF THE ',1,_^1_%MESSAG '1234 VOLATILE WORDS ASSIGNED',0_^1_%BZS SSMYFL(SEGSIZ-*+SSMY)_^1_%EJT_]_^1*_]_^1*_*ALLOCATABLE CORE MESSAGES PART X_^1*_]_^1_%STRMSG ACMX_^1_%SPC 5_^1_%MESSAG ACMX,ACM1,1,'***ALLOCATABLE CORE ERROR',0_^1_%MESSAG ACMX,ACM2,2,_^1_%MESSAG 'ALLOCATABLE CORE MAP :RINDEX START LNGTH THRD DUMP',0_^1_%MESSAG ACMX,ACM3,2,'EMPY ',1,_^1_€€%MESSAG '1234 1234 1234 1234 1234 1234 1234 1234',0_^1_%BZS ACMXFL(SEGSIZ-*+ACMX)_^1_%EJT_]_^1*_]_^1*_*ALLOCATABLE CORE MESSAGES PART Y_^1*_]_^1_%STRMSG ACMY_^1_%SPC 5_^1_%MESSAG ACMY,ACM4,1,'***SYSTEM DIRECTORY ERROR',0_^1_%MESSAG ACMY,ACM5,1,'INDEX ',1,'1234 HAS INVALID REQ PRI ',1,_^1_%MESSAG '1234',0_^1_%MESSAG ACMY,ACM6,1,'INDEX ',1,'1234 TOO LONG FOR REQ PRI ',1,_^1€€_%MESSAG '1234',0_^1_%BZS ACMYFL(SEGSIZ-*+ACMY)_^1_%EJT_]_^1*_]_^1*_*JOB PROCESSOR MESSAGES PART X_^1*_]_^1_%STRMSG JPMX_^1_%SPC 5_^1_%MESSAG JPMX,JPM1,1,'CONSIDER UNPROTECTED I/O HANGUP',0_^1_%MESSAG JPMX,JPM2,1,'CONSIDER SWAP RATE TOO RAPID',0_^1_%MESSAG JPMX,JPM3,1,'CORE USAGE CAUSED SWAP WHILE JP IN',0_^1_%MESSAG JPMX,JPM4,2,'SYSTEM WAS SWAPPED',0_^1_%MESSAG JPMX,JPM5,2,'SYST€€EM NOT SWAPPED',0_^1_%ADDMES JPM5,JPM6,' BUT WAITING TO SWAP'_^1_%MESSAG JPMX,JPM7,2,'JP NOT IN CORE',0_^1_%MESSAG JPMX,JPM8,2,'JP WAS IN CORE',0_^1_%BZS JPMXFL(SEGSIZ-*+JPMX)_^1_%EJT_]_^1*_]_^1*_*JOB PROCESSOR MESSAGES PART Y_^1*_]_^1_%STRMSG JPMY_^1_%SPC 5_^1_#MESSAG JPMY,JPM9,2,'FILE1 FILE2 FILE3 FILE4 LOADR BP :R',1,_^1_%MESSAG '1234 1234 1234 1234 1234 1234',0_^1_%MESSA€€G JPMY,JPMA,2,'JP LOCKED OUT FOR LIBEDT OR RECOVERY',0_^1_%MESSAG JPMY,JPMB,2,'SIGN OFF REQUESTED OF LIBEDT OR RECOVERY',0_^1_%BZS JPMYFL(SEGSIZ-*+JPMY)_^1_%EJT_]_^1*_]_^1*_*JOB PROCESSOR MESSAGES PART Z_^1*_]_^1_%STRMSG JPMZ_^1_%SPC 5_^1_%MESSAG JPMZ,JPMF,2,'1234 UNPROT REQ WERE ACTIVE ',0_^1_%ADDMES JPMF,JPMC,'AND STACKED AT LOC 1234'_^1_%MESSAG JPMZ,JPMD,2,'PENDING INPUT REQU€€EST FOR JP',0_^1_%MESSAG JPMZ,JPME,2,'PENDING INPUT REQUEST FOR MIPRO',0_^1_%BZS JPMZFL(SEGSIZ-*+JPMZ)_^1*_]_^1 EJT_]_^1*_]_^1*_*PARTITION CORE MESSAGES_^1*_]_^1_%STRMSG PARX_^1_%MESSAG PARX,PAR1,3,':RPARTITION CORE ADDRESSES:R',0_^1_%MESSAG PARX,PAR2,3,'PARTITION ',1,_^1_%MESSAG '0001 1234',0_^1_%MESSAG PARX,PAR3,3,':RPARTITION THREADS:R',0_^1_%MESSAG PARX,PAR5,3,':RPARTITIONS I€€N USE :R',0_^1_%BZS PARXFL(SEGSIZ-*+PARX)_^1 EJT_]_^1*_]_^1*_*PARTITION CORE ANALYSIS_^1*_]_^1_%STRMSG PCM_^1_%MESSAG PCM,PCM1,1,'PARTITION CORE ERROR ',1,_^1_%MESSAG 'PARTITION 0 ABOVE 8000',0_^1_%MESSAG PCM,PCM2,1,'PARTITION CORE ERROR ',1,_^1_%MESSAG 'PARTITION OUT OF ORDER',0_^1_%MESSAG PCM,PCM3,1,'PARTITION CORE ERROR ',1,_^1_%MESSAG 'ILLEGAL BUSY INDICATOR',0_^1_%BZS PCMFL(€pSEGSIZ-*+PCM)_^1_%SPC 5_^1_%SPC 5_^1*_$NEXT SEGMENT_^1*_]_^1_%EQU NEXTN(*/SEGSIZ-SYSSEG/SEGSIZ)_^1_%END_]_^__pPCOLAST CSY/ H31 P€1_%NAM COLAST_'DECK-ID H31 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$SYSTEM CHECKOUT SEGMENTS - LAST_^1*_]_^1*_$LAST MODULE FOR SYSTEM CKOUT PACKAGE_^1*_]_^1_%EQU SEGSIZ(96)_^1_%SPC 5_^1COLAST NUM 0_^1_%ENQ -1_^1_%LDQ* COL€`AST,Q_^1_%TCQ Q_,BACK TO START_^1_%JMP* (COLAST)_^1_%BZS LASTFL(SEGSIZ-*+COLAST)_^1_%END_]_^__`PDEFFIL CSY/ F I L E M A N A G E R F05 P€1_%NAM DEFFIL_'DECK-ID F05 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$CALL DEFFIL(FILNUM,MAXRL,LU,REQBUF,REQIND)_^1*_]_^1*_]_^1_%EXT FSTLOC_'FIS STARTING THREAD LOC (ZERO, IF NO CORE FIS)_^1_%EXT FIDLOC_'FIS DIRECTORY LOCATIO€€N (ZERO, IF NOT IN CORE)_^1_%EXT FDTINT_'FILE/DIRECTORY TIMEOUT INTERVAL_^1_%EXT NWFISD_'NUMBER OF WORDS IN FIS DIRECTORY (N*96)_^1_%EXT NWFISB_'NUMBER OF WORDS IN A FIS BLOCK (N*96)_^1_%EXT FISLU_(FIS LOGICAL UNIT_^1_%EXT ADRFMS_'BEGINNING SECTOR OF FILE SPACE ON LIB UNIT_^1_%EXT FIDSEC_'FIS DIRECTORY,S SECTOR ADDRESS_^1_%EXT FIBLSA_'SECTOR ADDRESS OF THE LAST FIS BLOCK_^1_€€%EXT FIBNIX_'INDEX TO THE NEXT AVAILABLE LOCATION IN FIBLSA_^1_%EXT FSLIST_'START OF FILE SPACE LIST_^1_%EXT FSLMMA_'MM ADR OF FILE SPACE LIST ON AUTOLOAD IMAGE_^1_%EXT LOG1A_(MONITOR LOGICAL UNIT TABLE OF PHYSTBS_^1_%EXT FILBLK_'FILE BLOCK FOR FIS BLOCKS AND FRB BLOCKS_^1*_]_^1_%EXT ABSPAR_'ABSOLUTIZE PARAMETER_^1_%EXT CKCFIS_'CHECK IF FIS IS IN CORE_^1_%EXT CKPROT_'CHECK €€IF REQUEST IS PROTECTED_^1_%EXT GETSPC_'GET ALLOCATABLE SPACE_^1_%EXT MMREAD_'MASS MEMORY READ_^1_%EXT MMWRIT_'MASS MEMORY WRITE_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1*_]_^1_%EXT* FILSPC_'GET FILE SPACE_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_]_^1_%EQU ZERO(2)_%ZERO CONSTANT_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ZROMSK($13)_!ZERO MASK TABLE_^1_%EQU €€ONEBIT($23)_!ONE BIT TABLE_^1_%EQU ZROBIT($33)_!ZERO BIT TABLE_^1*_]_^1*_*EQUS USED TO FIND SECTOR ADDRESS OF THE CORE IMAGE_^1_%EQU ADRECT($E9)_!ADDRESS OF THE EXTENDED CORE TABLE_^1_%EQU SACIMG(4)_#INDEX INTO EXT CORE TABLE TO ADR OF CORE IMAGE_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHD€€R(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATI€€ON SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+€€02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK€€ SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1_%EJT_]_^1*€€_$CALL DEFFIL(FILNUM,MAXRL,LU,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_(REQUEST PROCESSOR LENGTH_^1_%SPC 2_^1DEFFIL 000 000_*DEFINE FILE_^1_%STQ- I_,SAVE ADDRESS OF PARAMETER LIST_^1*_]_^1_%ENQ 5_^1DF10_!INQ -1_+GET EACH PARAMETER AND STORE IT_^1_%STQ FILNUM_L71*1592_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ DF20_^1_%JMP* DF10_^1*_]_^1DF20_!STQ* NEW€€FIB_'CLEAR NEW FIS BLOCK FLAG_^1*_]_^1_%LDQ* (MAXRL)_%CHECK IF MAXIMUM RECORD LENGTH WITHIN LIMITS_^1_%SQZ DF25_^1_%INQ FRBHDR+WRDSEC-1_^1_%SQM DF30_^1*_]_^1_%LDQ* (LU)_)CHECK IF LOGICAL POSITIVE_^1DF25_!SQZ DF30_^1_%SQM DF30_^1_%TCQ A_,CHECK IF GREATER THAN MAX. NO. OF LUS_^1_%ADD* (ALOG1A)_^1_%SAM DF30_^1_%LDQ* (ALOG1A),Q_^1_%LDA- 8,Q_*CHECK IF LOGICAL UNIT IS A MASS MEMO€€RY DEVICE_^1_%ALS 5_^1_%AND- ONEMSK+2_^1_%INA -2_^1_%SAN DF30_^1*_]_^1_%LDQ* (FILNUM)_$CHECK IF FILE NUMBER POSITIVE_^1_%SQZ DF30_^1_%SQP DF40_^1*_]_^1DF30_!LDA- ONEBIT+14_#ERROR (ZERO OR NEGATIVE)_^1*_]_^1BIT15 EOR- ONEBIT+15_#ERROR EXIT (SET BIT 15)_^1_%JMP* GETOUT_^1_%EJT_]_^1*_]_^1DF40_!LDA FIDSEC_'CHECK IF FIRST ENTRY EVER INTO DEFFIL_^1_%SAN DF50_+NO_^1*_]_^1_%STA* (A€€FIBLS)_$CLEAR LAST SECTOR ADDRESS OF FIS BLOCK_^1_%RTJ INITAL_'INITIALIZE FILE MANAGER_^1*_]_^1DF50_!RTJ CKCFIS_'CHECK IF FIS IN CORE_^1_%SAP DF60_+(YES, CHECK IF RELEASED)_^1*_]_^1_%LDQ* (FILNUM)_$CHECK IF FIS EXISTS_^1_%RTJ SRHFIS_^1_%SAN NOFIS_(NO FIS FOR THIS FILE NUMBER_^1*_]_^1DF60_!LDA- FISFLG,Q_$CHECK IF FIS HAS BEEN RELEASED_^1_%SAP DF70_^1_%LDA- ONEBIT+0_$NO, FILE A€€LREADY DEFINED_^1_%JMP* BIT15_(EXIT WITH ERROR_^1*_]_^1DF70_!RTJ SETFIS_'SET UP RELEASED FIS TO BE RE-DEFINED_^1_%LDA- IDXCHG,I_$SET FIS CHANGED BIT_^1_%AND- ZROBIT_^1_%EOR- ONEBIT_^1_%STA- IDXCHG,I_^1*_]_^1OKEXIT CLR A_,NORMAL EXIT_^1*_]_^1GETOUT STA* (REQIND)_$SET REQUEST INDICATOR_^1_%JMP* (DEFFIL)_$EXIT_^1_%EJT_]_^1*_]_^1NOFIS STQ* POINTR_'SAVE FIS BLOCK POINTER IN FIS DIREC€€TORY_^1_%STA* INDEX_(SAVE SCATTER INDEX(9-15) AND FIB INDEX(0-8)_^1*_]_^1_%LDQ* (AFIBLS)_$CHECK IF NO FIS BLOCKS_^1_%SQZ SETFLG_^1_%LDA* (ANWFIB)_$CHECK IF LAST FIB BLOCK FILLED_^1_%SUB* (AFIBNX)_^1_%INA -FISSIZ-1_^1_%SAM SETFLG_^1_%LDA* (AFIBNX)_$PUT NEW FIS IN AN UNFILLED FIS BLOCK_^1_%JMP* BLDFIS_^1*_]_^1SETFLG RAO* NEWFIB_'SET NEW FIS BLOCK FLAG_^1_%LDA* AFISLU_^1_%LDQ* (ANW€€FIB)_$GET SPACE FOR NEW FIS BLOCK_^1_%RTJ FILSPC_^1_%SAZ BLDFIB_^1_%SAM FSERR_^1_%JMP* MMERR_"*****MASS MEMORY ERROR_^1*_]_^1FSERR LDA- ONEBIT+8 *****NO MORE FILE SPACE ERROR_^1_%JMP* BIT15_^1*_]_^1*_]_^1BLDFIB ENA 1_,RESET NEXT INDEX INTO FIS BLOCK_^1BLDFIS STA* FBNSAV_'SAVE FIBNIX AND FIBLSA_^1_%STQ* FBLSAV_^1*_]_^1_%ENA FH+FISSIZ_#GET SPACE FOR CORE FIS_^1_%RTJ* (AGETSP)_^€€1*_]_^1_%LDA* FBLSAV_'SET SECTOR OF FIS_^1_%STA- SECFIS,Q_^1_%LDA* FBNSAV_^1_%ALS 7_^1_%STA- IDXCHG,Q_$SET INDEX OF FIS_^1_%CLR A_^1_%STA- ADRKID,Q_$CLEAR KIS DIRECTORY ADDRESS_^1_%STA- FISCOM,Q_$CLEAR FILE COMINATION_^1_%STA- FILCLK,Q_$CLEAR CLOCK (FOR THREAD WORD OF A NEW FIB)_^1_%LDA* POINTR_^1_%STA- SANFIS,Q_$SET SECTOR OF NEXT FIS_^1_%LDA* INDEX_^1_%AND- ONEMSK+8_^1_%STA- IX€€NFIS,Q_$SET INDEX OF NEXT FIS_^1*_]_^1_%RTJ SETFIS_'SET UP REST OF FIS_^1_%EJT_]_^1*_]_^1_%LDA* FBLSAV_'STORE SECTOR/INDEX IN WRITE CALL_^1_%STA* PME_^1_%LDA* FBNSAV_^1_%SUB* NEWFIB_^1_%STA* PMD_^1*_]_^1_%LDA- I_^1_%INA FH_^1_%SUB* NEWFIB_'DECREMENT CORE ADDRESS IF NEW FIS BLOCK_^1_%STA* PMA_^1_%ENA FISSIZ_^1_%ADD* NEWFIB_'INCREMENT NUMBER OF WORDS IF NEW FIS BLOCK_^1_%STA* PMB_€€^1_%RTJ MMWRIT_'WRITE NEW FIS_771*1592_^1PMA_"NUM 0_^1PMB_"NUM 0_^1AFISLU ADC FISLU_^1PMD_"NUM 0_^1PME_"NUM 0_^1_%SQM MMERR_"*****MASS MEMORY ERROR_^1_%JMP* CKNFIB_^1_%SPC 2_^1*_***************FILE SPACE SHOULD BE RETURNED ON MM ERROR_^1MMERR LDA- ONEBIT+7_$MASS MEMORY ERROR, SET BIT 7 AND EXIT_^1_%JMP* BIT15_^1_%EJT_]_^1*_]_^1POINTR NUM 0_,FIS BLOCK POINTER_^1INDEX NUM €€ 0_,SCATTER INDEX(0-8) AND FIS BLOCK INDEX(9-15)_^1NEWFIB NUM 0_,NEW FIS BLOCK FLAG_^1FBLSAV NUM 0_,SAVE FIBLSA_^1FBNSAV NUM 0_,SAVE FIBNIX_^1*_]_^1FILNUM NUM 0_,FILE NUMBER_^1MAXRL NUM 0_,MAXIMUM RECORD LENGTH_^1LU_#NUM 0_,LOGICAL UNIT_^1REQBUF NUM 0_,REQUEST BUFFER_^1REQIND NUM 0_,REQUEST INDICATOR_^1*_]_^1AFSTLO ADC FSTLOC_^1AFIDLO ADC FIDLOC_^1AFDTIN ADC FDTINT_^1AN€€WFIB ADC NWFISB_^1AFIBLS ADC FIBLSA_^1AFIBNX ADC FIBNIX_^1ALOG1A ADC LOG1A_^1*_]_^1AGETSP ADC GETSPC_^1_%EJT_]_^1*_]_^1CKNFIB LDA* NEWFIB_'CHECK IF NEW FIS BLOCK_^1_%SAZ UPDTFD_)NO, UPDATE FIS DIRECTORY_^1*_]_^1_%LDA* (AFIBLS)_$THREAD THE NEW FIS_^1_%SAZ UPDTFD_'DONT WRITE THREAD TO MM, IF FIRST FIS BLOCK_^1_%STA* PAR5_^1_%LDQ* PMA_^1_%LDA* FBLSAV_^1_%STA- (ZERO),Q_$STORE PO€€INTER TO NEW FIS BLOCK_^1_%STQ* PAR1_)SETUP ADDRESS OF THREAD WORD_^1*_]_^1_%RTJ* (AMMWRT)_$WRITE THREAD TO NEW FIS BLOCK_^1PAR1_!NUM 0_^1PAR2_!NUM 1_^1_%ADC FISLU_^1_%NUM 0_^1PAR5_!NUM 0_^1_%SQP UPDTFD_^1_%JMP* MMER_#*****MASS MEMORY ERROR_^1*_]_^1UPDTFD IIN 0_^1_%LDA* (AFDSEC)_$SETUP FIS DIRECTORY STARTING SECTOR_^1_%STA* FDSC1_^1_%STA* FDSC2_^1_%LDA* (ANWFID)_$SETUP NUMBE€€R OF WORDS IN FIS DIRECTORY_^1_%STA* NWFD1_^1_%STA* NWFD2_^1*_]_^1_%LDQ* (AFIDLO)_$CHECK IF FIS DIRECTORY IN CORE_^1_%SQZ NOTINC_'NO_B71*1592_^1_%JMP* SETCLK_'YES_A71*1592_^1*_]71*1592_^1NOTINC RTJ* (AGETSP)_$GET SPACE FOR FIS DIRECTORY_)71*1592_^1_%STQ* P1_+SAVE ADDRESS OF FIS DIRECTORY_^1_%STQ* RELFID+2_$STORE ADDRESS FOR POSSIBLE RELEASE_!71*1592_^1_%EJT_]_^1*_]_^1_%RTJ* (AMMRE€€D)_$READ IN FIS DIRECTORY_^1P1_#NUM 0_^1NWFD1 NUM 0_^1_%ADC FISLU_^1_%NUM 0_^1FDSC1 NUM 0_^1_%SQP SETADR_^1RELFID RELEAS 0_*RELEASE SPACE USED BY FID_+71*1592_^1MMER_!JMP* MMERR_"*****MASS MEMORY ERROR_^1*_]_^1SETADR IIN 0_,SET FIS DIRECTORY ADDRESS_^1_%LDQ* P1_^1_%STQ* (AFIDLO)_^1*_]_^1SETCLK LDA* (AFDTIN)_$SET FIS DIRECTORY CLOCK_^1_%STA- 1,Q_^1_%STQ* P2_+SETUP FIS DIREC€€TORY LOCATION FOR WRITE_^1_%EIN 0_^1*_]_^1_%LDA* INDEX_(THREAD FIS INTO FIS DIRECTORY_^1_%ALS 7_^1_%AND- ONEMSK+6_^1_%AAQ Q_^1_%LDA* FBLSAV_'STORE FIBLSA INTO FIS DIRECTORY_^1_%STA- (ZERO),Q_^1_%LDA* FBNSAV_'STORE FIBNIX INTO FIS DIRECTORY_^1_%STA- 1,Q_^1*_]_^1_%LDA* (AFIBLS)_$CHECK IF FIRST FIS_^1_%SAN WRTFD_^1_%LDA* FBLSAV_'YES, SET POINTER IN FID TO FIRST FIS BLOCK_^1_%LDQ* €€(AFIDLO)_^1_%STA- (ZERO),Q_^1*_]_^1WRTFD RTJ* (AMMWRT)_$WRITE FIS DIRECTORY_^1P2_#NUM 0_^1NWFD2 NUM 0_^1_%ADC FISLU_^1_%NUM 0_^1FDSC2 NUM 0_^1_%SQP STOFIB_^1_%JMP* MMERR_"*****MASS MEMORY ERROR_^1_%EJT_]_^1*_]_^1STOFIB LDA* FBLSAV_'STORE NEW FIS BLOCK SECTOR (IF CHANGED)_^1_%STA* (AFIBLS)_^1_%LDA* FBNSAV_'INCREMENT NEXT INDEX IN FIS BLOCK_^1_%INA FISSIZ_^1_%STA* (AFIBNX)_€€^1*_]_^1_%LDQ* AFSLMA_'UPDATE FIDSEC,FIBLSA,FIBNIX ON AUTOLOAD IMAGE_^1_%LDA- 1,Q_^1_%LDQ- (ZERO),Q_$GET MM ADDRESS OF FILE SPACE LIST_^1_%INA -3_^1_%SAP COMPSI_'SUBTRACT A THREE BY DOUBLE PRECISION TO_^1_%AND- ONEBIT+15_#COMPUTE MASS MEMORY ADDRESS OF FIDSEC_^1_%INQ -1_^1*_]_^1COMPSI ALS 1_,COMPUTE SECTOR/INDEX FROM MASS MEMORY ADDRESS_^1_%LRS 1_^1_%DVI* WPS_^1_%STA* IMGSEC_^€€1_%STQ* IMGIDX_^1*_]_^1_%RTJ* (AMMWRT)_$WRITE OUT UPDATED FIDSEC, FIBLSA, FIBNIX_^1AFDSEC ADC FIDSEC_^1_%ADC 3_^1_%ADC $8C2_^1IMGIDX ADC 0_^1IMGSEC ADC 0_^1*_]_^1_%SQP SCLOCK_^1_%JMP* MMERR_"*****MASS MEMORY ERROR_^1*_]_^1SCLOCK LDQ- I_,SET FIS CLOCK_^1_%LDA* (AFDTIN)_^1_%STA- FILCLK,Q_^1*_]_^1_%IIN 0_^1_%LDA* (AFSTLO)_$PUT NEW FIS ON CORE FIS THREAD_^1_%STA- (ZERO),Q_^1_%ST€€Q* (AFSTLO)_^1_%EIN 0_^1_%JMP OKEXIT_'NORMAL EXIT_^1_%EJT_]_^1*_]_^1AMMWRT ADC MMWRIT_^1AMMRED ADC MMREAD_^1*_]_^1AFSLST ADC FSLIST_^1ANWFID ADC NWFISD_^1_%EJT_]_^1*_*SET UP FIS_^1*_]_^1SETFIS 000 000_^1_%STQ- I_,I = CORE FIS ADDRESS_^1_%CLR Q_^1_%LDA* (MAXRL)_%GET NUMBER OF SECTORS FOR FILE RECORD BLOCK_^1_%INA FRBHDR+WRDSEC-1_^1_%DVI* WPS_+FRBSIZ = (FRBHDR + MAXRL + WRDS€€EC - 1)/WRDSEC_^1_%STA- FRBSIZ,I_$STORE FRB SIZE AND CLEAR FIS INDICATORS_^1*_]_^1_%LDQ FILNUM_'SET FILE NUMBER_571*1592_^1_%LDA- (ZERO),Q_J71*1592_^1_%STA- FILENO,I_^1*_]_^1_%RTJ CKPROT_'CHECK IF REQUEST PROTECTED_^1_%SAZ SF10_+NO_^1_%LDA- ONEBIT+14_%YES, SET PROTECTED BIT_^1SF10_!LDQ LU_+PUT IN LOGICAL UNIT_171*1592_^1_%EOR- (ZERO),Q_J71*1592_^1_%EOR- ONEBIT+15_#SET THE DEFIN€€ED BIT_^1_%STA- FISFLG,I_^1*_]_^1_%CLR A_^1_%ENQ NUMFRB-FRBFSA+1_^1SF20_!INQ -1_^1_%STA- FRBFSA,B_$CLEAR FRBFSA, NRLFRB, FRBLSA,_^1_%SQZ SF30_/FRBNIX, KIDSEC, KIDSIZ, KIBSIZ,_^1_%JMP* SF20_/KEYLTH, NUMEKV, FIFORL, NUMFRB._^1*_]_^1SF30_!JMP* (SETFIS)_$RETURN_^1_%SPC 3_^1WPS_"ADC WRDSEC_'NUMBER OF WORDS PER SECTOR_^1LUELTH NUM 0_,LOGICAL UNIT ENTRY LENGTH_^1_%EJT_]_^1*_*INITIA€€LIZE FILE MANAGER_^1*_]_^1INITAL 000 000_^1*_]_^1_%ENA WRDSEC_'GET SECTOR ADDRESS OF CORE IMAGE_^1_%ENQ SACIMG_^1_%MUI- (ADRECT),Q_^1*_]_^1_%LLS 1_^1_%ALS 15_^1_%SPC 2_^1*_*SAVE FILE SPACE LIST MM ADDRESS IN CORE AND MASS MEMORY_^1*_]_^1SAVMMA STQ* FSLMSB_'SAVE MM ADDRESS OF START OF CORE IMAGE_^1_%STA* FSLLSB_^1*_]_^1_%ADD* AFSLST_'ADD FILE SPACE LIST ADDRESS_^1_%SAP STOFSL€€_^1_%INQ 1_^1_%AND- ONEMSK+14_^1STOFSL STQ* (AFSLMA)_$STORE FILE SPACE LIST MASS MEMORY ADDRESS_^1_%LDQ* AFSLMA_^1_%STA- 1,Q_^1*_]_^1_%LDQ* FSLMSB_'GET MM ADDRESS OF MSB,LSB TO WRITE FSLIST_^1_%LDA* FSLLSB_^1_%ADD* AFSLMA_^1_%SAP COMPUT_^1_%INQ 1_^1_%AND- ONEMSK+14_^1*_]_^1COMPUT ALS 1_,COMPUTE SECTOR/INDEX FROM MASS MEMORY ADDRESS_^1_%LRS 1_^1_%DVI* WPS_^1_%STA* FSLLSB_^1_%ST€€Q* FSLMSB_^1*_]_^1_%RTJ* (AMMWRT)_$WRITE MSB,LSB TO WRITE FILE SPACE LIST_^1AFSLMA ADC FSLMMA_^1_%ADC 2_^1_%ADC $8C2_^1FSLMSB ADC 0_^1FSLLSB ADC 0_^1_%SQP INIFST_^1_%JMP* MMERR1_!*****MASS MEMORY ERROR_^1*_]_^1AFBNIX ADC FIBNIX_^1_%EJT_]_^1*_*INITIALIZE FILE SPACE THREAD_^1*_]_^1INIFST LDQ* AFSLST_^1GETNLU STQ- I_,GET NEXT LOGICAL UNIT ENTRY_^1_%LDA- (ZERO),Q_^1_%INA 0_,ARE€€ THERE ANY MORE_^1_%SAN PROLUE_^1*_]_^1_%CLR A_,NO MORE, RESET FIBLSA TO ZERO_^1_%STA* (AFBNIX)_^1_%JMP* CREATE_^1*_]_^1PROLUE CLR Q_,PROCESS LOGICAL UNIT ENTRY_^1_%LLS 9_^1_%STQ* LUELTH_'SAVE LOGICAL UNIT ENTRY LENGTH_^1_%ALS 7_^1_%STA* LOGLU_(SAVE LOGICAL UNIT_^1*_]_^1_%LDQ* SECTOR_^1_%LDA ADRFMS_'SET SECTOR TO BEGINNING SECTOR LIB UNIT IF 1ST_^1_%SQZ SETSEC_^1_%LDA- 1,I_*€€SET START SECTOR TO INITIAL VALUE, IF NOT 1ST_^1SETSEC STA* SECTOR_^1_%STA- 1,I_*SETUP STARTING SECTOR OF FILE SPACE POOL_^1*_]_^1_%LDA- 3,I_*SET AVAILABLE NUMBER OF SECTORS TO TOTAL_^1_%STA- 2,I_^1_%STA* (AFBNIX)_$SETUP TO INITIALIZE THIS FILE SPACE THREAD_^1*_]_^1_%LDQ* LUELTH_^1_%INQ -4_^1_%CLR A_^1CLRSBA SQZ WRTFST_'CLEAR SECTOR BLOCK ADDRESS IN EACH THREAD_^1_%INQ -2_^1_%S€€TA- 4,B_^1_%JMP* CLRSBA_^1*_]_^1WRTFST RTJ* (AMMWRT)_$WRITE OUT FILE SPACE THREAD_^1AFIDSC ADC FIDSEC_^1_%NUM 3_^1LOGLU NUM 0_^1_%NUM 0_^1SECTOR NUM 0_^1_%SQP INCLUE_^1_%JMP* MMERR1_!*****MASS MEMORY ERROR_^1*_]_^1INCLUE LDQ- I_,INCREMENT TO NEXT LOGICAL UNIT ENTRY_^1_%ADQ* LUELTH_^1_%JMP* GETNLU_^1_%EJT_]_^1*_*CREATE FIS DIRECTORY_^1*_]_^1CREATE CLR A_^1_%LDQ* (ANWFID)_^1_€€%STQ* NWFD3_(SETUP NUMBER OF WORDS IN FIS DIRECTORY_^1*_]_^1CLRFID INQ -1_+CLEAR INITIAL FIS DIRECTORY_^1_%STA* (AFLBLK),Q_^1_%SQZ GETFID_^1_%JMP* CLRFID_^1*_]_^1GETFID LDA* FISDLU_'GET FIS DIRECTORY SPACE_^1_%LDQ* (ANWFID)_^1_%RTJ FILSPC_'ALLOCATE SPACE FOR FIS DIRECTORY_^1_%SAZ SETDS_^1_%SAP MMERR1_!*****MASS MEMORY ERROR_^1_%JMP FSERR_"*****NO MORE FILE SPACE ERROR_^1*_]_^€81SETDS STQ* (AFIDSC)_$SET FIS DIRECTORY SECTOR_^1_%STQ* FDSC3_^1_%RTJ MMWRIT_'WRITE INITIAL FIS DIRECTORY_^1AFLBLK ADC FILBLK_^1NWFD3 NUM 0_^1FISDLU ADC FISLU_^1_%NUM 0_^1FDSC3 NUM 0_^1_%SQP INIEXT_^1*_]_^1MMERR1 JMP MMERR_"*****MASS MEMORY ERROR_^1*_]_^1INIEXT JMP* (INITAL)_^1_%SPC 5_^1_%END_]_^__8PFILSPC CSY/ F06 P€1_%NAM FILSPC_'DECK-ID F06 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*I S S U E_!F I L E_!S P A C E_^1*_]_^1_%ENT FILSPC_'ISSUE FILE SPACE SUBROUTINE_^1*_]_^1_%EXT MMREAD_'MASS MEMORY READ SUBROUTINE_^1_%EXT MMWRIT_'MA€€SS MEMORY WRITE SUBROUTINE_^1_%EXT FSLIST_'FILE SPACE LIST ADDRESS_^1_%EXT FSLEND_'END OF FILE SPACE LIST_^1*_]_^1_%EQU ZERO(2)_%LOCATION CONTAINING ZERO_^1_%EQU ONEBIT($23)_!ONEBIT TABLE_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1_%SPC 2_^1*_$FORMAT OF FILE SPACE LIST_^1*_'A. THE FILE SPACE LIST HAS N LU ENTRIES, TERMINATED BY -0_^1*_31._!LOGICAL UNIT ENTRY 1_^1*_32._!€€LOGICAL UNIT ENTRY 2_^1*_3._+._^1*_3._+._^1*_3._+._^1*_3N._!LOGICAL UNIT ENTRY N_^1*_1N+1._)NUM -0 OR +0_^1*_]_^1*_]_^1*_'B. A LOGICAL UNIT ENTRY HAS M THREADS OF SECTOR BLOCKS_^1*_,WORD_"0_!LU ENTRY LENGTH (BITS 7-15), LU (BITS 0-6)_^1*_,WORD_"1_!BEGINNING SECTOR ADDRESS OF FILE SPACE POOL_^1*_,WORD_"2_!TOTAL NUMBER OF AVAILABLE SECTORS_^1*_,WORD_"3_!TOTAL NUMBER OF SECTORS IN TH€€IS FILE SPACE_^1*_,WORD_"4_!SECTOR ADDRESS(1) HAVING NUMBER OF SECTOR(1)_^1*_,WORD_"5_!NUMBER OF SECTORS(1)_^1*_,WORD_"6_!SECTOR ADDRESS(2) HAVING NUMBER OF SECTORS(2)_^1*_,WORD_"7_!NUMBER OF SECTORS(2)_^1*_3._+._^1*_3._+._^1*_3._+._^1*_,WORD 2M+1_!SECTOR ADDRESS(M) HAVING NUMBER OF SECTORS(M)_^1*_,WORD 2M+2_!NUMBER OF SECTORS(M)_^1*_]_^1*_]_^1*_'C. EACH SECTOR BLOCK(I) HAS THE FOL€€LOWING FORMAT_^1*_,WORD_"0_!SECTOR ADDRESS OF NEXT BLOCK (0=NONE)_^1*_]_^1*_]_^1*_'D. EACH SECTOR BLOCK (WHICH IS IN ASCENDING SECTOR SIZE_^1*_*ORDER) IN THE FILE SPACE POOL HAS THE FOLLOWING FORMAT_^1*_,WORD_"0_!SECTOR ADDRESS OF NEXT EQUAL BLOCK (0=NONE)_^1*_,WORD_"1_!SECTOR ADDRESS OF NEXT GREATER BLOCK (0=NONE)_^1*_,WORD_"2_!NUMBER OF SECTORS IN THE CURRENT BLOCK_^1_%EJT_]_^1*_€€*ISSUE FILE SPACE SUBROUTINE_^1*_]_^1*_]_^1FILSPC 000 000_*A = LOGICAL UNIT OF WHERE TO OBTAIN FILE SPACE_^1_%STA RLU_*Q = NUMBER OF SECTORS (B15=1) OR WORDS (B15=0)_^1_%STA WLU_*SAVE LU IN THE READ/WRITE LOGICAL UNITS_^1*_]_^1_%TRQ A_,CHECK IF NUMBER OF SECTORS OR WORDS_^1_%CLR Q_^1_%LLS 1_^1_%ALS 15_^1_%SQN STORNS_'SECTORS, STORE IT_^1*_]_^1_%INA WRDSEC-1_$WORDS, CONVERT€€ TO SECTORS_^1_%DVI =XWRDSEC_^1STORNS STA* NUMSEC_'STORE NUMBER OF SECTORS_^1_%STA* SECBLK_'SET SECBLK = NUMSEC FOR FSPOOL SUBROUTINE_^1*_]_^1*_]_^1_%LDA- I_,SAVE THE I-REGISTER_^1_%STA* ISAVE_^1_%EJT_]_^1*_*FIND LOGICAL UNIT ENTRY AND NUMBER OF SECTORS (IF ANY)_^1*_]_^1_%LDQ =XFSLIST_^1FINDLU STQ- I_,FIND GIVEN LU ON FILE SPACE LIST_^1_%LDA- (ZERO),Q_^1_%INA 0_,CHECK FOR + OR -€€ ZERO_^1_%SAN CHKLU_^1_%SET A_^1_%JMP* FSEXIT_'NO MORE LOGICAL UNITS, EXIT WITH A = -0_^1*_]_^1CHKLU ENQ 0_,SEPARATE LU ENTRY LENGTH AND LU_^1_%LLS 9_/Q = LUELTH_^1_%ALS 7_/A = LU_^1_%EOR* RLU_^1_%SAZ FINDNS_'LOGICAL UNIT FOUND, FIND GIVEN NUMSEC_^1_%ADQ- I_^1_%JMP* FINDLU_'LOGICAL UNIT NOT FOUND, CONTINUE SEARCH_^1*_]_^1*_]_^1FINDNS STQ* LUELTH_'FIND GIVEN NUMBER OF SECTORS€€ (SAVE LUELTH)_^1_%ENQ 1_^1_%STQ* RNW_*SET NUMBER OF WORDS TO READ TO ONE_^1*_]_^1_%ENQ 2_^1CHKNNS INQ 2_,CHECK WITH NEXT NUMBER OF SECTORS IN LU ENTRY_^1_%TRQ A_^1_%SUB* LUELTH_^1_%SAP GETSPC_'NO MORE, GET SPACE FROM FILE SPACE POOL OF LU_^1*_]_^1_%LDA- 1,B_*CHECK NUMBER OF SECTORS_^1_%EOR* NUMSEC_^1_%SAZ CHKNOS_'NUMBER OF SECTORS FOUND, CHECK IF NO SPACE_^1_%JMP* CHKNNS_'N€€UMBER OF SECTORS NOT FOUND, CONTINUE SEARCH_^1*_]_^1CHKNOS ADQ- I_,CHECK IF THERE IS NO SPACE FOR THIS NUMSEC_^1_%LDA- (ZERO),Q_^1_%SAZ GETSPC_'NO SPACE, GET SPACE FROM FILE SPACE POOL OF LU_^1*_]_^1_%STA* BEGSEC_'SAVE BEGINNING SECTOR ADDRESS OF ISSUED SPACE,_^1_%RTJ* READMM_'UNTHREAD ISSUED FILE SPACE AND EXIT._^1_%JMP* DCRNAS_^1_%EJT_]_^1*_*GET FILE SPACE FROM THE FILE SPACE PO€€OL_^1*_]_^1GETSPC ENA 3_,SET NUMBER OF WORDS TO READ TO THREE_^1_%STA* RNW_^1_%RTJ* FSPOOL_'SEARCH FOR A BLOCK .GE. NUMSEC_^1_%SAP TAKSPC_^1_%JMP* FSEXIT_'NO BLOCK LARGE ENOUGH, EXIT WITH A = -0_^1*_]_^1TAKSPC LDQ* CSACNS_'TAKE FILE SPACE OFF THREAD_^1_%STQ* BEGSEC_)(SAVE BEGINNING SECTOR ADDRESS OF BLOCK)_^1_%ADQ* NUMSEC_^1_%STQ* LOSSEC_'SAVE STARTING SECTOR OF LEFTOVER SECTORS_€€^1*_]_^1_%STA* SECBLK_'SAVE EXCESS (CNS-NUMSEC), IF ANY_^1_%ENQ 1_^1_%STQ* WNW_*SETUP TO STORE ONE WORD ON WORD 1 OF SECTOR_^1_%STQ* WBI_^1_%ADQ* RBL_*Q = ADDRESS OF NSAGNS_^1_%LDA* NSACNS_'CHECK IF ANY OTHER BLOCKS OF THE SAME SIZE_^1_%SAZ CHKSTR_'NO, *STORE NSAGNS_#IN SECTOR LSALNS(1)_"*_^1*_]_^1_%RAO* WNW_^1_%RTJ* WRITMM_'YES,*STORE NSAGNS/CNS IN SECTOR NSACNS(1/2) *_^1_%ENA €€ 1_,AND *STORE NSACNS_#IN SECTOR LSALNS(1)_"*_^1_%STA* WNW_^1_%LDQ* RBL_*Q = ADDRESS OF NSACNS_^1*_]_^1CHKSTR LDA* LSALNS_'CHECK IF START OF THREAD_^1_%SAN NOTSOT_^1_%LDA- (ZERO),Q_$YES, STORE IN LU ENTRY RATHER THAN MASS MEMORY_^1_%STA- 1,I_^1_%JMP* CHKEQU_^1*_]_^1NOTSOT RTJ* WRITMM_'NO, RESTORE THREAD ON MASS MEMORY_^1*_]_^1*_]_^1CHKEQU LDA* SECBLK_'CHECK IF LENGTH OF BLOCK EQUA€€LS NUMSEC_^1_%SAN SRCHLK_^1_%JMP* DCRNAS_'YES, EXIT WITH BEGINNING SECTOR ADDRESS_^1_%EJT_]_^1*_*THREAD LEFTOVER SECTORS IN FILE SPACE POOL_^1*_]_^1SRCHLK RTJ* FSPOOL_'SEARCH FOR LINK TO INSERT (THREE CASES...)_^1_%LDQ* CSACNS_%1. ALL BLOCKS LESS THAN LEFTOVER SECTORS,_^1_%STQ* NSACNS_.(0,CSACNS=0,SECBLK) INTO BUFFER._^1_%SAZ THREAD_%2. A BLOCK EQUALS THE LEFTOVER SECTORS,_^1*_?(€€CSACNS,NSAGNS,SECBLK=CNS) INTO BUFFER._^1_%STQ* NSAGNS_%3. A BLOCK IS MORE THAN THE LEFTOVER SECTORS,_^1_%LDA* SECBLK_.(0,CSACNS,SECBLK) INTO BUFFER._^1_%STA* CNS_^1_%CLR A_^1_%STA* NSACNS_^1*_]_^1THREAD STA* WBI_*THREAD LEFTOVER SECTORS ONTO FILE SPACE POOL_^1_%ENA 3_^1_%STA* WNW_^1_%LDQ* RBL_*Q = ADDRESS OF START OF BUFFER (NSACNS)_^1_%LDA* LOSSEC_'A = SECTOR LOSSEC_^1_%RTJ* WR€€ITMM_+*STORE BUFFER_#IN SECTOR LOSSEC(0/1/2)*_^1*_]_^1_%ENA 1_,SETUP TO STORE ONE WORD ON WORD 1 OF SECTOR_^1_%STA* WNW_^1_%STA* WBI_^1_%LDQ* RBL_^1_%INQ LOSSEC-NSACNS Q = ADDRESS OF LOSSEC_^1_%LDA* LSALNS_'A = SECTOR LSALNS_^1_%SAN NOTBOT_'CHECK IF BEGINNING OF THREAD_^1*_]_^1_%LDA- (ZERO),Q_$YES, STORE IN LU ENTRY RATHER THAN MASS MEMORY_^1_%STA- 1,I_+AND EXIT WITH BEGINNING S€€ECTOR ADDRESS._^1_%JMP* DCRNAS_^1*_]_^1NOTBOT RTJ* WRITMM_'NO, *STORE LOSSEC_#IN SECTOR LSALNS(1)_"*_^1*_]_^1*_]_^1DCRNAS LDA- 2,I_*DECREMENT NUMBER OF AVAILABLE SECTORS_^1_%SUB* NUMSEC_^1_%STA- 2,I_^1_%CLR A_,A = 0 (FILE SPACE ISSUED)_^1_%STA FSLEND_'SET FILE SPACE LIST CHANGE FLAG_^1*_]_^1*_]_^1FSEXIT LDQ* ISAVE_(RESTORE I-REGISTER_^1_%STQ- I_^1_%LDQ* BEGSEC_'Q = BEGINNING SEC€€TOR ADDRESS (IF A=0)_^1_%JMP* (FILSPC)_$EXIT_^1_%EJT_]_^1*_*FILE SPACE PARAMETERS_^1*_]_^1*_]_^1LSALNS NUM 0_$LAST SECTOR ADDRESS WITH A LESSER NUMBER OF SECTORS_^1*_]_^1CSACNS NUM 0_$CURRENT SECTOR ADDRESS WITH CURRENT NUMBER OF SECTORS_^1*_]_^1*_]_^1*_*NEXT THREE WORDS MUST BE IN ORDER_^1NSACNS NUM 0_!1. NEXT SECTOR ADDRESS WITH CURRENT NUMBER OF SECTORS_^1*_]_^1NSAGNS NUM 0_€€!2. NEXT SECTOR ADDRESS WITH GREATER NUMBER OF SECTORS_^1*_]_^1CNS_"NUM 0_!3. CURRENT NUMBER OF SECTORS IN FILE SPACE BLOCK_^1*_]_^1*_]_^1*_]_^1LOSSEC NUM 0_$STARTING SECTOR OF LEFTOVER SECTOR(S)_^1*_]_^1BEGSEC NUM 0_$BEGINNING SECTOR ADDRESS OF ISSUED FILE SPACE BLOCK_^1*_]_^1NUMSEC NUM 0_$NUMBER OF SECTORS_^1*_]_^1SECBLK NUM 0_$SECTOR BLOCK (ISSUED AND LEFTOVER)_^1*_]_^1ISAV€€E NUM 0_$I-REGISTER SAVE LOCATION_^1*_]_^1LUELTH NUM 0_$LOGICAL UNIT ENTRY LENGTH (BITS 7-15 OF FIRST WORD)_^1_%EJT_]_^1*_*READ/WRITE MASS MEMORY OF FILE SPACE_^1*_]_^1*_]_^1*_1READ MASS MEMORY_^1READMM 000 000_^1_%STQ* RBL_*Q = BEGINNING LOCATION FOR READ_^1_%STA* RBS_*A = BEGINNING SECTOR_!FOR READ_^1*_]_^1_%RTJ MMREAD_^1RBL_"NUM 0_,STARTING ADDRESS_^1RNW_"NUM 0_,NUMBER OF€€ WORDS_^1RLU_"NUM 0_,LOGICAL UNIT_^1_%NUM 0_^1RBS_"NUM 0_,STARTING SECTOR ADDRESS_^1*_]_^1_%SQM MMERR_"*****MASS MEMORY ERROR_^1_%JMP* (READMM)_$EXIT_^1_%SPC 3_^1*_1WRITE MASS MEMORY_^1WRITMM 000 000_^1_%STQ* WBL_*Q = BEGINNING LOCATION FOR WRITE_^1_%STA* WBS_*A = BEGINNING SECTOR_!FOR WRITE_^1*_]_^1_%RTJ MMWRIT_^1WBL_"NUM 0_,STARTING ADDRESS_^1WNW_"NUM 0_,NUMBER OF WORDS_€€^1WLU_"NUM 0_,LOGICAL UNIT_^1WBI_"NUM 0_,BEGINNING SECTOR INDEX_^1WBS_"NUM 0_,STARTING SECTOR ADDRESS_^1*_]_^1_%SQM MMERR_"*****MASS MEMORY ERROR_^1_%JMP* (WRITMM)_$EXIT_^1_%SPC 2_^1MMERR ENA +1_%*****MASS MEMORY ERROR, EXIT WITH A = +1_^1_%JMP* FSEXIT_^1_%EJT_]_^1*_*SEARCH FILE SPACE POOL_^1*_]_^1*_]_^1FSPOOL 000 000_^1_%LDA- 1,I_*INITIALIZE NSAGNS AND LSALNS_^1_%STA* NSAG€€NS_^1_%CLR A_^1*_]_^1SEARCH STA* LSALNS_'SEARCH NEXT BLOCK OF SECTORS_^1_%LDA* NSAGNS_^1_%STA* CSACNS_'CHECK IF NO MORE BLOCKS LEFT_^1_%SAZ NOFIND_(NO MORE LEFT, THUS NO BLOCK .GE. SECBLK_^1*_]_^1_%RTJ* HERE_)FIND ABSOLUTE ADDRESS OF NSACNS_^1HERE_!000 000_^1_%LDQ* HERE_^1_%INQ -HERE+NSACNS Q = ADDRESS OF NSACNS_^1*_8A = CURRENT SECTOR ADDRESS OF FILE SPACE BLOCK_^1_%RTJ* READ€vMM_+*READ SECTOR CSACNS INTO NSACNS/NSAGNS/CNS_^1*_]_^1_%LDA* CNS_*CHECK IF LENGTH OF BLOCK (CNS) .GE. SECBLK_^1_%SUB* SECBLK_^1_%SAP FSPEXT_(YES, EXIT WITH LEFTOVER SECTORS IN A_^1*_]_^1_%LDA* CSACNS_(NO, CONTINUE SEARCH_^1_%JMP* SEARCH_^1*_]_^1*_]_^1NOFIND SET A_,NO BLOCK FOUND .GE. SECBLK (EXIT WITH A = -0)_^1*_]_^1FSPEXT JMP* (FSPOOL)_$EXIT_^1_%SPC 2_^1_%END_]_^__vPRPEND CSY/ F07 PL1_%NAM RPEND_(DECK-ID F07 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1_%ENT RPEND_(REQUEST RPOCESSOR END_^1*_]_^1_%EQU RPEND(*)_$REQUEST RPOCESSOR END_^1*_]_^1_%END_]_^__LPRELFIL CSY/ F08 P€1_%NAM RELFIL_'DECK-ID F08 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_8RELEASE FILE_^1*_]_^1*_*CALL RELFIL(FILNUM,REQBUF,REQIND)_^1*_]_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU MASK($23)_#ONE€€ BIT TABLE_^1_%EQU NZERO($12)_"ZERO MASK TABLE_^1_%EQU PRI($EF)_$PRIORITY LEVEL_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU AMONI($F4)_"ADDRESS OF REQUEST ENTRY_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WOR€€DS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU€€ ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^€€1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECT€€ED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1*_1KIS DIRECTORY HEADER_^1_%EQU KIDCLK(0)_#KIS DIRECTORY CLOCK_^1_%EQU NUMKIB(1)_#€€NUMBER OF KIS BLOCKS_^1_%EQU KIBFSA(2)_#FIRST SECTOR ADDRESS OF KIS BLOCKS_^1_%EQU KIBLSA(3)_#LAST SECTOR ADDRESS OF KIS BLOCKS_^1_$EJT_]_^1*_]_^1*_*EXTERNALS_^1*_]_^1_%EXT FISLU_(FIS DIRECTORY AND BLOCK LOGICAL UNIT_^1_%EXT ABSPAR_'GETS ABSOLUTE ADDRESSES_^1_%EXT CKCFIS_'CHECKS CORE FIS_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT GETSPC_'GET SPACE_^1_%EXT MMREAD_'M€€ASS MEMORY READ_^1_%EXT MMWRIT_'MASS MEMORY WRITE_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1*_]_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1*_]_^1*_*ENTRY POINTS IN RELSPC_^1_%EXT* RELSPC_'RETURN RELEASED FILE SPACE ENTRY_^1_%EXT* STRSEC_'STARTING SECTOR OF FIRST BLOCK OF FILE SPACE_^1_%EXT* ENDSEC_'ENDING_!SECTOR OF LAST BLOCK OF FILE SPACE_^1_%EXT* NUMBLK_'NUMBER OF BLOCKS TO€€ BE RETURNED_^1_%EJT_]_^1*_*CALL RELFIL(FILNUM,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_(REQUEST PROCESSOR END_^1_%SPC 2_^1RELFIL 000 000_*RELEASE FILE_^1_%STQ- I_^1*_]_^1_%ENQ 3_^1FR010 INQ -1_^1_%STQ* FILNUM_'PICK UP ARG ADDRESSES_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ FR020_^1_%JMP* FR010_^1*_]_^1FR020 LDQ* (FILNUM)_^1_%SQZ FR030_^1_%SQP FR€€100_^1FR030 LDA- MASK+14_%ERROR FILE NO. 0 OR NEG_^1*_]_^1FR040 EOR- MASK+15_%ERROR EXIT_^1*_]_^1FR080 STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (RELFIL)_$RETURN_^1_%EJT_]_^1*_]_^1FR100 RTJ CKCFIS_'SEARCH CORE FIS_^1_%SAP FR110_^1*_]_^1_%LDQ* (FILNUM)_^1_%RTJ SRHFIS_'SEARCH MM FIS_^1_%SAN FR120_(FILE NOT DEFINED - ERROR_^1*_]_^1FR110 STQ- I_^1_%LDA- FISFLG,Q_$IS FILE RELEASED_^€€1_%SAM FR130_^1FR120 LDA- MASK+0_'FILE RELEASED (OR NOT DEFINED) - ERROR_^1_%JMP* FR040_^1*_]_^1FR130 LDA- FISCOM,Q_$Q HAS ADDRESS OF FIS IN CORE_^1_%SAZ FR140_^1_%LDA- MASK+1_'FILE LOCKED - ERROR_^1_%JMP* FR040_^1*_]_^1FR140 LDA- FISFLG,Q_$CHECK IF FILE PROTECTED_^1_%AND- MASK+14_^1_%SAZ FR150_^1_%RTJ CKPROT_'CHECK IF REQUEST IS PROTECTED_^1_%SAN FR150_^1_%LDA- MASK+13_%FI€€LE DEFINED PROTECTED_^1_%JMP* FR040_(CANT RELEASE FROM BACKGROUND_^1_%EJT_]_^1*_]_^1FR150 LDA- FISFLG,Q_$RELEASE FILE_^1_%AND- ONEMSK+14_^1_%STA- FISFLG,Q_^1*_]_^1_%LDA- IDXCHG,Q_^1_%ARS 7_^1_%AND- ONEMSK+8_^1_%STA* INDEX_(STORE MASS MEMORY INDEX_^1*_]_^1_%INQ FH_+SETUP START OF FIS BUFFER_^1_%STQ* FISB_^1*_]_^1_%LDA- SECFIS,I_$STORE MASS MEMORY SECTOR_^1_%STA* SECTOR_^1*_]_^1FR€€180 RTJ MMWRIT_'WRITE OUT RELEASED FIS_^1FISB_!NUM 0_^1_%ADC FISSIZ_^1_%ADC FISLU_^1INDEX NUM 0_^1SECTOR NUM 0_^1_%SQP FR200_^1*_]_^1FR190 LDA- MASK+7_!*****MASS MEMORY ERROR_^1_%JMP* FR040_(EXIT WITH BIT 7 SET_^1_%EJT_]_^1*_]_^1FILNUM NUM 0_^1REQBUF NUM 0_^1REQIND NUM 0_^1*_]_^1NUMB_!NUM 0_^1_%EJT_]_^1*_8RELEASE KIS DIRECTORY AND ITS KIS BLOCKS_^1*_]_^1FR200 LDA- KI€€DSEC,I_$CHECK IF INDEXED DIRECTORIES EXIST_^1_%SAN RELKIS_^1_%JMP* RELFRB_'NO, RELEASE FILE RECORD BLOCKS_^1*_]_^1RELKIS STA* KDSEC_(SAVE KEY INFO SEGMENT DIRECTORY SECTOR_^1_%LDA- FISFLG,I_^1_%ARS 7_,GET KIS LOGICAL UNIT_^1_%AND- ONEMSK+6_^1_%STA* KIDLU_^1*_]_^1_%ENA WRDSEC_'SETUP KIS DIRECTORY LENGTH_^1_%MUI- KIDSIZ,I_^1_%STA* KDLTH_^1*_]_^1_%LDQ- ADRKID,I_$CHECK IF KIS DIRECT€€ORY IN CORE_^1_%SQZ GETKID_^1_%STQ* KDLOC_^1_%JMP* RELKIB_^1_%SPC 2_^1*_8GET SPACE AND READ IN KIS DIRECTORY_^1GETKID RTJ GETSPC_^1_%STQ* KDLOC_(SET KIS DIRECTORY STARTING ADDRESS_^1_%STQ- ADRKID,I_^1*_]_^1_%RTJ MMREAD_^1KDLOC ADC 0_,STARTING LOCATION_^1KDLTH ADC 0_,LENGTH_^1KIDLU ADC 0_,LOGICAL UNIT_^1_%ADC 0_,NOT USED_^1KDSEC ADC 0_,STARTING SECTOR_^1*_]_^1_%SQP FR3€€00_^1_%JMP* FR190_"*****MASS MEMORY ERROR_^1*_]_^1FR300 LDQ* KDLOC_(Q = KIS DIRECTORY LOCATION_^1_%RAO- (ZERO),Q_$SET KIS DIRECTORY CLOCK NON-ZERO_^1_%EJT_]_^1*_8RELEASE KEY INFORMATION SEGMENT BLOCKS_^1*_]_^1RELKIB LDA- NUMKIB,Q_$NUMBER OF BLOCKS TO BE RELEASED_^1_%STA* NUMB_^1_%LDA- KIBFSA,Q_$FIRST SECTOR OF LAST BLOCK TO BE RELEASED_^1_%SAZ RELKID_)(NO KIS BLOCKS)_^1_%LDQ- KIB€€LSA,Q_$FIRST SECTOR OF FIRST BLOCK TO BE RELEASED_^1_%RTJ* PRESTR_^1_%LDQ* KIDLU_(Q = LOGICAL UNIT OF KIS_^1_%LDA- KIBSIZ,I_$A = NO. SECTORS IN EACH KIS BLOCK_^1_%RTJ RELSPC_^1_%SPC 2_^1*_8RELEASE KEY INFORMATION SEGMENT DIRECTORY_^1RELKID ENA 1_,NUMBER BLOCKS TO BE RELEASED = 1_^1_%STA* NUMB_^1_%LDA* KDSEC_(FIRST SECTOR OF LAST BLOCK TO BE RELEASED_^1_%TRA Q_,EQUALS FIRST SECT€€OR OF FIRST BLOCK_^1_%RTJ* PRESTR_^1_%LDQ* KIDLU_(Q = LOGICAL UNIT OF KIS_^1_%LDA- KIDSIZ,I_$A = NO. SECTORS IN BLOCK_^1_%RTJ RELSPC_^1_%EJT_]_^1*_*RELEASE FILE RECORD BLOCKS_^1*_]_^1RELFRB LDA- NUMFRB,I_$NUMBER OF BLOCKS TO BE RELEASED_^1_%STA* NUMB_^1_%LDA- FRBFSA,I_$FIRST SECTOR OF LAST BLOCK TO BE RELEASED_^1_%SAZ RSTFIS_)(NO FRBS)_^1_%LDQ- FRBLSA,I_$FIRST SECTOR OF FIRST BLO€€CK TO BE RELEASED_^1_%RTJ* PRESTR_^1_%LDA- FISFLG,I_^1_%AND- ONEMSK+6_^1_%TRA Q_,Q = LOGICAL UNIT OF FRBS_^1_%LDA- FRBSIZ,I_$A = NO. SECTORS IN BLOCK_^1_%AND- ONEMSK+8_^1_%RTJ RELSPC_^1_%SPC 2_^1*_*RESET FIS SO IT CAN BE RELEASED BY RACSPC PROGRAM_^1RSTFIS CLR A_^1_%STA- IDXCHG,I_$CLEAR FIS/KID CHANGE BITS AND FILE NUMBER_^1_%STA- FILENO,I_^1_%JMP FR080_(DONE_^1_%SPC 2_^1*_*P€œRESTORE SOME PARAMETERS FOR RELSPC_^1PRESTR NOP 0_^1_%STA ENDSEC_^1_%STQ STRSEC_^1_%LDA* NUMB_^1_%STA NUMBLK_^1_%JMP* (PRESTR)_^1_%SPC 5_^1_%END_]_^__œPRELSPC CSY/ F09 P€1_%NAM RELSPC_'DECK-ID F09 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*R E T U R N S P A C E F O R_!R E L E A S E_!F I L E_^1*_]_^1*_]_^1_%ENT RELSPC_'RETURN FILE SPACE SUBROUTINE_^1_%ENT STRSEC_'STARTING SECTOR ADDRES€€S OF RETURNED SPACE_^1_%ENT ENDSEC_'ENDING_!SECTOR ADDRESS OF RETURNED SPACE_^1_%ENT NUMBLK_'NUMBER OF BLOCKS TO BE RETURNED_^1*_]_^1_%EXT MMREAD_'MASS MEMORY READ_^1_%EXT MMWRIT_'MASS MEMORY WRITE_^1_%EXT FSLIST_'FILE SPACE LIST ADDRESS_^1_%EXT FSLEND_'END OF FILE SPACE LIST_^1*_]_^1_%EQU ZERO(2)_%LOCATION CONTAINING ZERO_^1_%EQU ONEBIT($23)_!ONEBIT TABLE_^1_%EQU ADISP($E€€A)_"ADDRESS OF DISPATCHER_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1_%EQU PL($EF)_%PRIORITY LEVEL_3**MSOS 4.1**_^1_%EJT_]_^1*_]_^1*_$FORMAT OF FILE SPACE LIST_^1*_'A. THE FILE SPACE LIST HAS N LU ENTRIES, TERMINATED BY -0_^1*_31._!LOGICAL UNIT ENTRY 1_^1*_32._!LOGICAL UNIT ENTRY 2_^1*_3._+._^1*_3._+._^1*_3._+._^1*_3N._!LOGICAL UNIT ENTRY N_^1*_1N+1._)NUM -0 OR +0_^1*_]_^1*_]_^1*_€€'B. A LOGICAL UNIT ENTRY HAS M THREADS OF SECTOR BLOCKS_^1*_,WORD_"0_!LU ENTRY LENGTH (BITS 7-15), LU (BITS 0-6)_^1*_,WORD_"1_!BEGINNING SECTOR ADDRESS OF FILE SPACE POOL_^1*_,WORD_"2_!TOTAL NUMBER OF AVAILABLE SECTORS_^1*_,WORD_"3_!TOTAL NUMBER OF SECTORS IN THIS FILE SPACE_^1*_,WORD_"4_!SECTOR ADDRESS(1) HAVING NUMBER OF SECTOR(1)_^1*_,WORD_"5_!NUMBER OF SECTORS(1)_^1*_,WORD_"6_!€€SECTOR ADDRESS(2) HAVING NUMBER OF SECTORS(2)_^1*_,WORD_"7_!NUMBER OF SECTORS(2)_^1*_3._+._^1*_3._+._^1*_3._+._^1*_,WORD 2M+1_!SECTOR ADDRESS(M) HAVING NUMBER OF SECTORS(M)_^1*_,WORD 2M+2_!NUMBER OF SECTORS(M)_^1*_]_^1*_]_^1*_'C. EACH SECTOR BLOCK(I) HAS THE FOLLOWING FORMAT_^1*_,WORD_"0_!SECTOR ADDRESS OF NEXT BLOCK (0=NONE)_^1*_]_^1*_]_^1*_'D. EACH SECTOR BLOCK (WHICH IS IN ASCEN€€DING SECTOR SIZE_^1*_*ORDER) IN THE FILE SPACE POOL HAS THE FOLLOWING FORMAT_^1*_,WORD_"0_!SECTOR ADDRESS OF NEXT EQUAL BLOCK (0=NONE)_^1*_,WORD_"1_!SECTOR ADDRESS OF NEXT GREATER BLOCK (0=NONE)_^1*_,WORD_"2_!NUMBER OF SECTORS IN THE CURRENT BLOCK_^1_%EJT_]_^1*_*RETURN FILE SPACE SUBROUTINE_^1*_]_^1*_]_^1RELSPC 0_"0_,STRSEC,ENDSEC AND NUMBLK SET UP BEFORE ENTRY_^1_%STQ* RLU_*Q = LO€€GICAL UNIT OF WHERE TO RETURN FILE SPACE_^1_%STQ WLU_^1_%STA* NUMSEC_'A= NUMBER OF SECTORS TO RETURN_^1*_]_^1_%LDA- I_,SAVE I REGISTER_^1_%STA* ISAVE_^1*_]_^1_%LDQ =XFSLIST_^1FINDLU STQ- I_,FIND GIVEN LU ON FILE SPACE LIST_^1_%LDA- (ZERO),Q_^1_%ENQ 0_,SEPARATE LU ENTRY LENGTH AND LU_^1_%LLS 9_/Q = LUELTH_^1_%ALS 7_/A = LU_^1_%EOR* RLU_^1_%SAZ FINDNS_'LOGICAL UNIT FOUND, FIND €€GIVEN NUMSEC_^1_%ADQ- I_^1_%JMP* FINDLU_'LOGICAL UNIT NOT FOUND, CONTINUE SEARCH_^1*_]_^1*_]_^1FINDNS STA* WBI_*CLEAR WBI_=66*1445_^1_%STQ* LUELTH_'FIND GIVEN NUMBER OF SECTORS_*66*1445_^1_%ENQ 2_^1*_]_^1CHKNNS INQ 2_,CHECK WITH NEXT NUMBER OF SECTORS IN LU ENTRY_^1_%TRQ A_^1_%SUB* LUELTH_^1_%SAP RTNFSP_'NO MORE, RETURN SPACE TO FILE SPACE POOL OF LU_^1*_]_^1_%LDA- 1,B_*CHECK N€€UMBER OF SECTORS_^1_%EOR* NUMSEC_^1_%SAZ RTNSST_'NUMSEC FOUND, RETURN SPACE TO SECTOR THREAD_^1_%JMP* CHKNNS_'NUMBER OF SECTORS NOT FOUND, CONTINUE SEARCH_^1*_]_^1*_]_^1RTNSST ADQ- I_,RETURN SPACE TO ITS SECTOR THREAD_^1_%LDA* ENDSEC_^1_%RTJ* WRITMM_-*STORE 1ST POINTER ONTO SECTOR ENDSEC_^1*_]_^1_%LDA* STRSEC_'SET FIRST SECTOR POINTER TO SECTOR STRSEC_^1_%STA* (WBL)_^1_%JMP* RSEXI€€T_'EXIT_^1_%EJT_]_^1*_*SEARCH FOR PLACE TO INSERT RETURNED SPACE_^1*_]_^1RTNFSP LDQ- I_,SAVE ADDRESS OF FILE SPACE POOL_^1_%INQ 1_^1_%STQ* FSPADR_^1_%LDA- (ZERO),Q_$SEARCH FILE SPACE POOL_^1_%STA* NSAGNS_^1_%CLR A_,INITIALIZE NSAGNS AND LSALNS_^1*_]_^1SEARCH STA* LSALNS_'SEARCH NEXT BLOCK OF SECTORS_^1_%LDA* NSAGNS_^1_%STA* CSACNS_'CHECK IF NO MORE BLOCKS LEFT_^1_%SAZ NOMORE_(NO€€ MORE LEFT, THUS NO BLOCK .GE. NUMSEC_^1*_]_^1_%RTJ* HERE_)FIND ABSOLUTE ADDRESS OF NSACNS_^1HERE_!000 000_^1_%LDQ* HERE_^1_%INQ -HERE+NSACNS Q = ADDRESS OF NSACNS_^1*_8A = CURRENT SECTOR ADDRESS OF FILE SPACE BLOCK_^1_%RTJ* READMM_+*READ SECTOR CSACNS INTO NSACNS/NSAGNS/CNS_^1*_]_^1_%LDA* CNS_*CHECK IF LENGTH OF BLOCK (CNS) .GE. NUMSEC_^1_%SUB* NUMSEC_^1_%SAP CHKEBS_'YES, CHEC€€K FOR AN EQUAL BLOCK OF SECTORS_^1*_]_^1_%LDA* CSACNS_(NO, CONTINUE SEARCH_^1_%JMP* SEARCH_^1*_]_^1NOMORE SET A_,NO BLOCK FOUND .GE. NUMSEC_^1_%EJT_]_^1*_*RETURN SPACE TO THE FILE SPACE POOL OF ITS LOGICAL UNIT_^1*_]_^1CHKEBS LDQ* CSACNS_'CHECK FOR AN EQUAL BLOCK OF SECTORS_^1_%SAZ THREAD_)A BLOCK EQUALS THE RETURNED SPACE,_^1*_?(CSACNS,NSAGNS,NUMSEC=CNS) INTO BUFFER._^1_%STQ* NS€€AGNS_)ALL BLOCKS LESS THAN THE RETURNED SPACE,_^1_%LDA* NUMSEC_.(0,CSACNS=0,NUMSEC) INTO BUFFER._^1_%STA* CNS_,A BLOCK IS MORE THAN THE THE RETURNED SPACE,_^1*_?(0,CSACNS,NUMSEC) INTO BUFFER._^1*_]_^1_%LDA* STRSEC_'CHECK IF ONE BLOCK IS BEING RETURNED_^1_%EOR* ENDSEC_^1_%SAN THRED1_^1*_]_^1_%STA* NSACNS_'YES, CLEAR NSACNS_566*1445_^1_%ENA 3_,SET NUMBER OF WORDS TO WRITE TO 3_^1_%€€CLR Q_,SET Q = ADDRESS OF NSACNS_^1_%JMP* THRED2_^1*_]_^1THREAD LDQ* RBL_Q66*1445_^1_%INQ CSACNS-NSACNS Q= ADDRESS OF CSACNS_^1_%LDA* ENDSEC_'A = SECTOR ENDSEC_^1_%RTJ* WRITMM_+*STORE CSACNS_#IN SECTOR ENDSEC(0)_"*_^1*_]_^1THRED1 ENA 1_^1_%STA* WBI_^1_%ENA 2_^1_%ENQ NSAGNS-NSACNS SET Q = ADDRESS OF NSAGNS_^1*_]_^1THRED2 STA* WNW_^1_%ADQ* RBL_^1_%LDA* STRSEC_'A = SECTOR STRSEC_€€^1_%RTJ* WRITMM_+*STORE NSAGNS/CNS IN SECTOR STRSEC(1/2) *_^1*_]_^1_%ENA 1_,SETUP TO STORE ONE WORD ON WORD 1 OF SECTOR_^1_%STA* WNW_^1_%STA* WBI_^1_%LDQ* RBL_^1_%INQ STRSEC-NSACNS Q = ADDRESS OF STRSEC_^1_%LDA* LSALNS_'A = SECTOR LSALNS_^1_%SAN NOTBOT_'CHECK IF BEGINNING OF THREAD_^1*_]_^1_%LDA- (ZERO),Q_$YES, STORE IN LU ENTRY RATHER THAN MASS MEMORY_^1_%STA* (FSPADR)_^1_%JMP€€* RSEXIT_'EXIT_^1*_]_^1NOTBOT RTJ* WRITMM_'NO, *STORE STRSEC_#IN SECTOR LSALNS(1)_"*_^1_%EJT_]_^1*_*RETURN SPACE EXIT_^1RSEXIT CLR A_,SET FILE SPACE LIST CHANGE FLAG_^1_%STA FSLEND_^1_%LDA* NUMSEC_'INCREMENT NUMBER OF AVAILABLE SECTORS_^1_%MUI* NUMBLK_^1_%ADD- 2,I_^1_%STA- 2,I_^1_%LDA* ISAVE_(RESTORE I REGISTER_^1_%STA- I_^1_%JMP* (RELSPC)_$RETURN_^1_%EJT_]_^1*_*FILE SPACE PARAME€€TERS_^1*_]_^1*_]_^1LSALNS NUM 0_$LAST SECTOR ADDRESS WITH A LESSER NUMBER OF SECTORS_^1*_]_^1CSACNS NUM 0_$CURRENT SECTOR ADDRESS WITH CURRENT NUMBER OF SECTORS_^1*_]_^1*_]_^1*_*NEXT THREE WORDS MUST BE IN ORDER_^1NSACNS NUM 0_!1. NEXT SECTOR ADDRESS WITH CURRENT NUMBER OF SECTORS_^1*_]_^1NSAGNS NUM 0_!2. NEXT SECTOR ADDRESS WITH GREATER NUMBER OF SECTORS_^1*_]_^1CNS_"NUM 0_!3€€. CURRENT NUMBER OF SECTORS IN FILE SPACE BLOCK_^1*_]_^1*_]_^1*_]_^1STRSEC NUM 0_,SECTOR ADR OF FIRST(START)BLOCK OF RTN SPACE_^1*_]_^1ENDSEC NUM 0_,SECTOR ADR OF LAST(END)BLOCK OF RTN SPACE_^1*_]_^1NUMSEC NUM 0_$NUMBER OF SECTORS PER BLOCK_^1*_]_^1NUMBLK NUM 0_$NUMBER OF BLOCKS TO BE RELEASED_^1*_]_^1LUELTH NUM 0_$LOGICAL UNIT ENTRY LENGTH (BITS 7-15 OF FIRST WORD)_^1*_]_^1FS€€PADR NUM 0_$FILE SPACE POOL ADDRESS OF LU ENTRY_^1*_]_^1ISAVE NUM 0_$SAVE FOR I REGISTER_^1_%EJT_]_^1*_*READ/WRITE MASS MEMORY OF FILE SPACE_^1*_]_^1*_]_^1*_1READ MASS MEMORY_^1READMM 000 000_^1_%STQ* RBL_*Q = BEGINNING LOCATION FOR READ_^1_%STA* RBS_*A = BEGINNING SECTOR_!FOR READ_^1*_]_^1_%RTJ MMREAD_^1RBL_"NUM 0_,STARTING LOCATION_^1_%NUM 3_,NUMBER OF WORDS_^1RLU_"NUM 0_€€,LOGICAL UNIT_^1_%NUM 0_,INDICATE SECTOR ADDRESSING_^1RBS_"NUM 0_,STARTING SECTOR_^1*_]_^1_%SQP RMMEXT_'CHECK IF MASS MEMORY ERROR_^1_%RTJ* MMERR *****MM ERROR, PRINT MESSAGE_,**MSOS 4.1**_^1RMMEXT JMP* (READMM)_$EXIT_^1_%SPC 3_^1*_1WRITE MASS MEMORY_^1WRITMM 000 000_^1_%STQ* WBL_*Q = BEGINNING LOCATION FOR WRITE_^1_%STA* WBS_*A = BEGINNING SECTOR_!FOR WRITE_^1*_]_^1_%RTJ MM€€WRIT_^1WBL_"NUM 0_,STARTING LOCATION_^1WNW_"NUM 1_,NUMBER OF WORDS_^1WLU_"NUM 0_,LOGICAL UNIT_^1WBI_"NUM 0_,BEGINNING SECTOR INDEX_^1WBS_"NUM 0_,STARTING SECTOR_^1*_]_^1WRTCMP SQP WMMEXT_'CHECK IF MASS MEMORY ERROR_^1_%RTJ* MMERR *****MM ERROR, PRINT MESSAGE_,**MSOS 4.1**_^1WMMEXT JMP* (WRITMM)_$EXIT_^1_%SPC 2_^1*_1MASS MEMORY ERROR MESSAGE_/**MSOS 4.1**_^1MMERR 000 000_L€€**MSOS 4.1**_^1_%LDA- PL_M**MSOS 4.1**_^1_%ALS 4_N**MSOS 4.1**_^1_%EOR- PL_+CONSTRUCT FWRITE REQUEST_)**MSOS 4.1**_^1_%EOR* REQCOD_I**MSOS 4.1**_^1_%STA* REQ_L**MSOS 4.1**_^1_%RTJ* ABS_L**MSOS 4.1**_^1ABS_"NOP 0_N**MSOS 4.1**_^1_%LDA* ABS_*CALCULATE THE ABSOLUTE_+**MSOS 4.1**_^1_%ADD* OFF1_)ADDRESSES FOR THE MONITOR CALL_"**MSOS 4.1**_^1_%STA* COM_L**MSOS 4.1**_^1_%ADD* OFF2_K**M€€SOS 4.1**_^1_%STA* MSG_L**MSOS 4.1**_^1_%LDA- I_N**MSOS 4.1**_^1_%STA* ISVERR_I**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1_%RTJ- (AMONI)_%PRINT ERROR MESSAGE_.**MSOS 4.1**_^1REQ_"ADC 0_N**MSOS 4.1**_^1COM_"ADC 0_N**MSOS 4.1**_^1_%ADC 0_N**MSOS 4.1**_^1_%ADC $18FC_(SYSTEM COMMENT DEVICE_,**MSOS 4.1**_^1_%ADC LMSG_K**MSOS 4.1**_^1MSG_"ADC 0_N**MSOS 4.1**_^1_%JMP- (ADISP)_H**MSOS 4.1**_^1€€*_Z**MSOS 4.1**_^1CP_#LDA* ISVERR_I**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%JMP* (MMERR)_H**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1REQCOD ADC $4C00_(FORMATTED WRITE REQUEST_***MSOS 4.1**_^1OFF1_!ADC CP-ABS_I**MSOS 4.1**_^1OFF2_!ADC ERRMSG-CP_F**MSOS 4.1**_^1ISVERR NUM 0_N**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1ERRMSG ALF $,F.M. ERROR 1$_@**MSOS 4.1**_^1_%EQU LMSG(*-ERRMSG)_A**MSOS 4.1**_^1€_%SPC 2_^1_%END_]_^__PDEFIDX CSY/ F10 P€1_%NAM DEFIDX_'DECK-ID F10 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_$CALL DEFIDX(FILNUM,NUMEKV,KEYLGH,LU,REQBUF,REQIND)_^1*_]_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ZROMSK($13)_!Z€€ERO MASK TABLE_^1_%EQU MASK($23)_#ONE BIT TABLE_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEM€€ORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_€€^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADD€€RESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE REC€€ORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1*_1KIS DIRECTORY HEADER_^1_%EQU KIDCLK(0)_#KIS DIRECTORY CLOCK_^1_%EQU NUMKIB(1)_#NUMBER OF KIS BLOCKS_^1_%EQU KIBFSA(2)_#FIRST SECTOR ADDRESS OF KIS BLOCKS_^1_%EQU KIBLSA(3)_#LAST SECTOR ADDRESS OF KI€€S BLOCKS_^1_%EJT_]_^1*_*EXTERNALS_^1*_]_^1_%EXT FDTINT_'FILE/DIRECTORY TIMEOUT INTERVAL_^1_%EXT LOG1A_(MONITOR LOGICAL UNIT TABLE OF PHYSTBS_^1*_]_^1_%EXT ABSPAR_'GETS ABSOLUTE ADDRESSES_^1_%EXT CKCFIS_'CHECKS CORE FIS_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT GETSPC_'GET CORE SPACE_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1*_]_^1_%EXT* SQRTFM_'FILE MANAGER SQU€€ARE ROOT_^1_%EXT* FILSPC_'MM SPACE ALLOCATOR_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_$CALL DEFIDX(FILNUM,NUMEKV,KEYLGH,LU,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_(REQUEST PROCESSOR LENGTH_^1_%SPC 2_^1DEFIDX 000 000_*DEFINE FILE INDEXED_^1_%STQ- I_^1*_]_^1_%ENQ 6_,PICK UP ARGUMENT ADDRESSES_^1DX010 INQ -1_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_€€^1_%STA* FILNUM,Q_^1_%SQZ DX020_^1_%JMP* DX010_^1*_]_^1DX020 LDQ* (FILNUM)_$CHECK FILE NUMBER_^1_%SQZ DX030_^1_%SQP DX100_^1DX030 LDA- MASK+14_%ILLEGAL FILE NUMBER_^1*_]_^1DX040 EOR- MASK+15_%ERROR EXIT_^1*_]_^1DX080 STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (DEFIDX)_$RETURN_^1_%SPC 3_^1DX100 RTJ CKCFIS_'CHECK FIS IN CORE_^1_%SAP DX110_^1*_]_^1_%LDQ* (FILNUM)_$NOT IN CORE_^1_%€€RTJ SRHFIS_'CHECK MM_^1_%SAN DX120_^1*_]_^1DX110 STQ- I_,I = CORE FIS ADDRESS_^1_%LDA- FISFLG,Q_$IS FILE RELEASED_^1_%SAM DX130_^1DX120 LDA- MASK+0_'RELEASED OR NO SUCH FILE - ERROR_^1_%JMP* DX040_^1_%EJT_]_^1*_]_^1DX130 LDA- KIDSEC,Q_$HAS FILE BEEN DEF INDEXED_^1_%SAN DX150_^1*_]_^1_%LDA- FISFLG,Q_$CHECK IF FILE PROTECTED_^1_%AND- MASK+14_^1_%SAZ DX140_^1_%RTJ CKPROT_'CHE€€CK IF REQUEST IS PROTECTED_^1_%SAN DX140_^1_%LDA- MASK+13_%FILE PROT - ERROR_^1_%JMP* DX040_^1*_]_^1DX140 LDA- FRBFSA,Q_$DOES FILE HAVE RECORDS_^1_%SAZ DX160_^1DX150 LDA- MASK+11_%ERROR -CANT HAVE DATA BEFORE DEFINING_^1_%JMP* DX040_^1*_]_^1DX160 LDA* (KEYLGH)_$CHECK IF KEY LENGTH NOT ZERO_^1_%LDQ- ONEMSK+5_^1_%LAQ Q_^1_%SQZ DX180_(KEY LENGTH ZERO, ERROR_^1_%ALS 1_^1_%SAP €€DX170_(NOT INDEXED/ORDERED_^1_%INQ -1_^1_%SQZ DX170_^1_%LDA- MASK+12_%KEY LENGTH NOT ONE ON INDEXED/ORDERED_^1_%JMP* DX040_^1*_]_^1DX170 ALS 1_,CHECK IF FIFO OPTION SELECTED_^1_%SAP DX175_^1_%AND- MASK+1_'YES, THEN INDEXED/LINKED MUST ALSO BE SELECTED_^1_%SAZ DX190_(ERROR, SET BIT 14_^1*_]_^1DX175 LDQ* (LU)_)CHECK IF LOGICAL UNIT POSITIVE_^1DX180 SQZ DX190_^1_%SQM DX190_^€€1_%TCQ A_,CHECK IF GREATER THAN MAX. NO. OF LUS_^1_%ADD* (ALOG1A)_^1_%SAM DX190_^1_%LDQ* (ALOG1A),Q_^1_%LDA- 8,Q_*CHECK IF LOGICAL UNIT IS A MASS MEMORY DEVICE_^1_%ALS 5_^1_%AND- ONEMSK+2_^1_%INA -2_^1_%SAN DX190_^1*_]_^1_%LDA* (NEKV)_'CHECK IF NUMBER OF EXPECTED KEY VALUES IS POS._^1_%SAZ DX190_^1_%SAP DX200_^1DX190 JMP* DX030_(ILLEGAL PARAMETER, SET BIT 14_^1_%EJT_]_^1*_€€]_^1DX200 RTJ SQRTFM_'GET SQUARE ROOT_^1_%STA* SRNEKV_'SAVE SQRT OF NUMBER OF EXPECTED KEY VALUES_^1*_]_^1_%INA KIDHDR+WRDSEC-1_^1_%CLR Q_,GET NUMBER OF SECTORS FOR KIS DIRECTORY_^1_%DVI* WPS_*KIDSIZ = (KIDHDR+SRNEKV+WRDSEC-1)/WRDSEC_^1_%STA- KIDSIZ,I_^1*_]_^1_%EOR- MASK+15_%SET SIGN BIT_^1_%TRA Q_^1_%LDA* (LU)_^1_%RTJ FILSPC_^1_%SAZ DX220_^1_%TRA Q_^1_%LDA- MASK+7_!*****MA€€SS MEMORY ERROR_^1_%SQP DX210_^1*_]_^1_%LDA- MASK+8_!*****NO MORE FILE SPACE ERROR_^1DX210 JMP* DX040_^1*_]_^1DX220 STQ- KIDSEC,I_$Q CONTAINS SECTOR NO. STORE IN FIS_^1*_]_^1_%LDA* (LU)_)STORE KIS LOGICAL UNIT IN FIS_^1_%ALS 7_^1_%EOR- FISFLG,I_^1_%STA- FISFLG,I_^1*_]_^1_%ENA WRDSEC_'COMPUTE NUMBER OF WORDS IN KIS DIRECTORY_^1_%MUI- KIDSIZ,I_^1_%STA* KIDWDS_^1*_]_^1_%RTJ GE€€TSPC_'GET SPACE FOR KIS DIRECTORY_^1_%STQ* KIDLOC_^1*_]_^1_%LDQ* KIDWDS_'CLEAR KIS DIRECTORY INITIALLY_^1_%CLR A_^1DX230 INQ -1_^1_%STA* (KIDLOC),Q_^1_%SQZ DX240_^1_%JMP* DX230_^1_%EJT_]_^1*_]_^1FILNUM NUM 0_$1_$CARDS ORDERED_^1NEKV_!NUM 0_$2_^1KEYLGH NUM 0_$3_^1LU_#NUM 0_$4_^1REQBUF NUM 0_$5_^1REQIND NUM 0_$6_^1*_]_^1SRNEKV NUM 0_^1KIDLOC NUM 0_^1KIDWDS NUM 0_^1WPS_"A€€DC WRDSEC_^1ALOG1A ADC LOG1A_^1_%EJT_]_^1*_]_^1DX240 LDA* (NEKV)_'SAVE NUMBER OF EXPECTED KEY VALUES_^1_%STA- NUMEKV,I_^1*_]_^1_%LDA* (KEYLGH)_$SAVE LINKED, ORDERED, AND FIFO INDICATORS_^1_%AND- ZROMSK+12_^1_%EOR- FRBSIZ,I_$INCLUDE FRB SIZE_^1_%STA- FISIND,I_^1_%TRA Q_^1*_]_^1_%LDA* (KEYLGH)_$SAVE KEY LENGTH_^1_%AND- ONEMSK+5_^1_%STA- KEYLTH,I_^1*_]_^1_%INA 2_,KIBSIZ = ((KIBHD€€R+(2(1+FIFO)+KEYLTH)*SRNEKV_^1_%QLS 2_7+WRDSEC-1)/WRDSEC)_^1_%SQP DX250_^1_%INA 2_,FIFO SELECTED, ADD TWO MORE POINTER WORDS_^1DX250 MUI* SRNEKV_^1_%INA KIBHDR+WRDSEC-1_^1_%DVI* WPS_^1_%STA- KIBSIZ,I_^1*_]_^1_%LDA FDTINT_'SET KIS DIRECTORY CLOCK_^1_%STA* (KIDLOC)_^1*_]_^1_%ENA -3_+SET FIS AND KIS DIRECTORY CHANGE BITS_^1_%AND- IDXCHG,I_^1_%INA 3_^1_%STA- IDXCHG,I_^1_%LDA* K€|IDLOC_'THREAD KIS DIRECTORY ONTO ITS FIS_^1_%STA- ADRKID,I_^1_%CLR A_^1_%JMP DX080_(EXIT NORMALLY_^1_%SPC 2_^1_%END_]_^__|PSQRTFM CSY/ F11 P€1_%NAM SQRTFM_'DECK-ID F11 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1_%ENT SQRTFM_'FILE MANAGER SQUARE ROOT ROUTINE_^1*_]_^1SQRTFM 000 000_^1_%STA* X_,SAVE X (INPUT NUMBER TO BE SQUARE ROOTED)_^1*_]_^1ITERAT STA* YI_+Y(0)€F = X_^1_%CLR Q_^1_%LDA* X_^1_%DVI* YI_+USE NEWTON-RHAPSON METHOD_^1_%SUB* YI_^1_%ARS 1_,Y(I+1) = Y(I) + 1/2(X/Y(I)-Y(I))_^1_%INA 0_^1_%SAZ SREXIT_^1_%ADD* YI_^1_%JMP* ITERAT_'DO NEXT ITERATION_^1*_]_^1SREXIT LDA* YI_+EXIT WITH SQUARE ROOT IN A_^1_%JMP* (SQRTFM)_^1_%SPC 2_^1X_$NUM 0_^1YI_#NUM 0_^1_%SPC 2_^1_%END_]_^__FPLOKFIL CSY/ F12 P€1_%NAM LOKFIL_'DECK-ID F12 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*CALL LOKFIL(FILNUM,FILCOM,REQBUF,REQIND)_^1*_]_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU MASK($23)_#ONE BIT TABLE_€€^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER €€SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH€€+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FI€€LE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLO€€CK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1_%EXT ABSPAR_'GETS ABSOLUTE ADDRESSES_^1_%EXT CKCFIS_'CHECKS CORE FIS_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1*_]_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_*CALL LOKFIL(FILNUM,FILCOM,REQBUF,R€€EQIND)_^1_%SPC 2_^1_%ADC* RPEND_(REQUEST PROCESSOR LENGTH_^1_%SPC 2_^1LOKFIL 000 000_*LOCK FILE_^1_%STQ- I_^1*_]_^1_%ENQ 4_,PICK UP ADDRESSES OF ARGUMENTS_^1LF010 INQ -1_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ LF020_^1_%JMP* LF010_^1*_]_^1LF020 LDQ* (FILNUM)_$CHECK FN GE 1_^1_%SQZ LF030_^1_%SQP LF100_^1LF030 LDA- MASK+14_%ILL€€EGAL FILE NUMBER_^1*_]_^1LF040 EOR- MASK+15_%ERROR EXIT_^1*_]_^1LF080 STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (LOKFIL)_^1_%EJT_]_^1*_]_^1LF100 RTJ CKCFIS_'CHECK IF FIS IS IN CORE_^1_%SAP LF110_^1*_]_^1_%LDQ* (FILNUM)_^1_%RTJ SRHFIS_'SEARCH FIS ON MM -NOT IN CORE_^1_%SAN LF120_^1*_]_^1LF110 LDA- FISFLG,Q_$CHECK IF RELEASED_^1_%SAM LF130_^1LF120 LDA- MASK+0_'RELEASED OR NOT DEF€€INED, ERROR_^1_%JMP* LF040_^1*_]_^1LF130 LDA- FISCOM,Q_$CHECK IF FILE LOCKED_^1_%SAZ LF150_^1_%SUB* (FILCOM)_$LOCKED. CHECK IF COMBINATIONS ARE_$63*1355_^1_%SAZ LF180_(IDENTICAL. SKIL TO LF180 IF YES_'63*1355_^1_%LDA- MASK+1_'ALREADY LOCKED WITH DIFFERENT COMBIN. 63*1355_^1_%JMP* LF040_^1*_]_^1LF150 RTJ CKPROT_'DONT LOCK IF REQUEST UNPROTECTED_^1_%SAN LF170_^1_%LDA- MASK+13_€€%UNPROTECTED PROGRAM CAN NOT LOCK A FILE_^1_%JMP* LF040_^1*_]_^1LF170 LDA* (FILCOM)_$STORE NEW FILE COMBINATION_^1_%AND- ONEMSK+14_^1_%SAZ LF190_(IGNORE IF COMBINATION IS ZERO_^1_%STA- FISCOM,Q_^1*_]_^1LF180 LDA- MASK+1_'SET FILE LOCKED BIT AND RETURN_(63*1355_^1LF190 JMP* LF080_^1_%SPC 2_^1FILNUM NUM 0_,1_!CARDS ORDERED_^1FILCOM NUM 0_,2_^1REQBUF NUM 0_,3_^1REQIND NUM 0_,€4_^1_%SPC 2_^1_%END_]_^__PUNLFIL CSY/ F13 P€1_%NAM UNLFIL_'DECK-ID F13 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*CALL UNLFIL(FILNUM,FILCOM,REQBUF,REQIND)_^1*_]_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU MASK($23)_#ONE BIT TABLE_€€^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER €€SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH€€+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FI€€LE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLO€€CK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1_%EXT ABSPAR_'GETS ABSOLUTE ADDRESSES_^1_%EXT CKCFIS_'CHECKS CORE FIS_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1*_]_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_*CALL UNLFIL(FILNUM,FILCOM,REQBUF,R€€EQIND)_^1_%SPC 2_^1_%ADC* RPEND_(REQUEST PROCESSOR LENGTH_^1_%SPC 2_^1UNLFIL 000 000_*UNLOCK FILE_^1_%STQ- I_^1*_]_^1_%ENQ 4_,PICK UP ADDRESSES OF ARGUMENTS_^1UN010 INQ -1_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ UN020_^1_%JMP* UN010_^1*_]_^1UN020 LDQ* (FILNUM)_$CHECK FN GE 1_^1_%SQZ UN030_^1_%SQP UN100_^1UN030 LDA- MASK+14_%I€€LLEGAL FILE NUMBER_^1*_]_^1UN040 EOR- MASK+15_%ERROR EXIT_^1*_]_^1UN080 STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (UNLFIL)_^1_%EJT_]_^1*_]_^1UN100 RTJ CKCFIS_'FIS MUST BE IN CORE_^1_%SAP UN110_^1*_]_^1_%LDQ* (FILNUM)_^1_%RTJ SRHFIS_'SEARCH FIS ON MM -NOT IN CORE_^1_%SAN UN120_^1*_]_^1UN110 LDA- FISFLG,Q_$CHECK IF RELEASED_^1_%SAM UN130_^1UN120 LDA- MASK+0_'RELEASED OR NOT DEFIN€€ED, ERROR_^1_%JMP* UN040_^1*_]_^1UN130 RTJ CKPROT_(CHECK IF REQUEST IS UNPROTECTED_^1_%SAN UN140_^1_%LDA- MASK+13_%UNPROTECTED REQUEST CAN NOT UNLOCK FILES_^1_%JMP* UN040_^1*_]_^1UN140 LDA- FISCOM,Q_$CHECK IF FILE LOCKED_^1_%SAN UN150_^1_%LDA- MASK+1_'NOT LOCKED_^1_%JMP* UN040_^1*_]_^1UN150 EOR* (FILCOM)_$FILE LOCKED - CHECK COMBINATION_^1_%AND- ONEMSK+14_^1_%SAZ UN160_^1_%LD€ήA- MASK+10_%WRONG COMBINATION -ERROR_^1_%JMP* UN040_^1*_]_^1UN160 STA- FISCOM,Q_^1_%JMP* UN080_^1_%SPC 2_^1FILNUM NUM 0_,1_!CARDS ORDERED_^1FILCOM NUM 0_,2_^1REQBUF NUM 0_,3_^1REQIND NUM 0_,4_^1_%SPC 2_^1_%END_]_^__ήPSTOSEQ CSY/ F14 P€1_%NAM STOSEQ_'DECK-ID F14 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*CALL STOSEQ(FILNUM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1*_]_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU MASK($23)_#€€ONE BIT TABLE_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER€€ OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%€€EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT IN€€DEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) F€€ILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1_%EXT ABSPAR_'ABSOLUTIZES APL_^1_%EXT CKCFIS_'CHECKS CORE FOR FISB_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT CKUADR_'CHECK LEGALITY OF UNPROTECTED ADDRESS_^1_%EXT MMWRIT_'MM WRITE SUB_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOC€€KS_^1*_]_^1_%EXT* FILSPC_'MM SPACE ALLOCATOR SUB_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_*CALL STOSEQ(FILNUM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_(LENGTH OF REQUEST PROCESSOR_^1_%SPC 2_^1STOSEQ 000 000_*STORE SEQUENTIAL_^1_%STQ- I_^1*_]_^1_%ENQ 6_,GET ABSOLUTE ADDRESSES OF ALL PARAMETERS_^1SS010 INQ -1_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ AB€€SPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ SS020_^1_%JMP* SS010_^1*_]_^1SS020 LDQ* (FILNUM)_$GET FILE NUMBER_^1_%SQZ SS030_^1_%SQP SS100_^1SS030 LDA- MASK+14_%FILE NO ERROR SET BIT 14_^1*_]_^1SS040 EOR- MASK+15_%ERROR EXIT_^1*_]_^1SS080 STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (STOSEQ)_^1_%EJT_]_^1*_]_^1SS100 RTJ CKCFIS_'CHECK IF FIS IN CORE_^1_%SAP SS110_^1*_]_^1_%LDQ* (F€€ILNUM)_$NOT IN CORE CHECK MM_^1_%RTJ SRHFIS_^1_%SAN SS120_(FILE NOT DEFINED_^1*_]_^1SS110 STQ- I_,I = FIS CORE ADDRESS_^1_%LDA- FISFLG,Q_$CHECK RELEASE STATUS_^1_%SAM SS130_^1SS120 LDA- MASK+0_'ERROR FILE NOT DEFINED_^1_%JMP* SS040_(SET BIT 0_^1*_]_^1SS130 LDA- KIDSEC,Q_$CHECK IF FILE INDEXED_^1_%SAZ SS140_^1_%LDA- MASK+11_%FILE DEFINED INDEXED CANT STORE SEQUENTIAL_^1_%JMP*€€ SS040_^1*_]_^1SS140 LDA- FISFLG,Q_$CHECK IF FILE PROTECTED_^1_%AND- MASK+14_^1_%SAZ SS150_^1_%RTJ CKPROT_'CHECK IF REQUEST PROTECTED_^1_%SAN SS150_^1_%LDA- MASK+13_%FILE PROTECTED AND UNPROTECTED STORE ATTEMPT_^1_%JMP* SS040_(REJECT CALL_^1*_]_^1SS150 LDA- FRBSIZ,Q_$GET FILE RECORD BLOCK SIZE_^1_%AND- ONEMSK+8_^1_%MUI* WPS_^1_%STA* NWFRB_^1_%INA -FRBHDR_^1_%SUB* (RECLTH)_$CH€€ECK IF MAXIMUN RECORD LENGTH EXCEEDED_^1_%SAP SS200_^1_%LDA- MASK+2_'RECORD LENGTH GREATER THAN MAXIMUM LENGTH_^1_%JMP* SS040_(SET BIT 2 OF INDICATOR WORD_^1_%EJT_]_^1*_]_^1SS200 CLR Q_,CHECK IF FIRST RECORD POINTER ADDRESS LEGAL_^1_%LDA* RECPTR_^1_%RTJ* (ACUADR)_^1_%INA 1_,CHECK IF SECOND RECORD POINTER ADDRESS LEGAL_^1_%RTJ* (ACUADR)_^1*_]_^1_%LDA* RECBUF_'CHECK IF FIRST WORD€€ OF RECORD BUFFER LEGAL_^1_%RTJ* (ACUADR)_^1*_]_^1_%LDA* (RECLTH)_$CHECK IF RECORD LENGTH POSITIVE AND NON-ZERO_^1_%SAZ SS220_^1_%SAP SS230_^1SS220 JMP* SS030_(NO, ILLEGAL PARAMETER_^1*_]_^1SS230 STA* (RECBUF)_$SET RECORD COUNT IN FIRST WORD OF BUFFER_^1_%STA* NW1_^1_%INA FRBHDR_^1_%STA* NW2_*SETUP NEW FRB CALL, IF NEEDED_^1*_]_^1_%LDA* RECBUF_'STORE BUFFER ADDRESS_^1_%STA* CA€€1_^1_%INA -FRBHDR_^1_%STA* CA2_*SETUP NEW FRB CALL, IF NEEDED_^1_%STA* CA3_^1*_]_^1_%LDA- FISFLG,I_^1_%AND- ONEMSK+6_$GET LOGICAL UNIT_^1_%STA* LU1_^1_%STA* LU2_^1_%STA* LU3_^1*_]_^1_%LDA- FRBFSA,I_$CHECK IF NEW FRB_^1_%SAZ SS240_^1_%LDA* NWFRB_^1_%SUB- FRBNIX,I_^1_%SUB* (RECLTH)_^1_%SAP SS300_^1SS240 JMP* SS400_(NEED NEW FRB BLOCK_^1_%EJT_]_^1*_]_^1FILNUM ADC 0_^1RECPTR ADC €€0_^1RECBUF ADC 0_^1RECLTH ADC 0_^1REQBUF ADC 0_^1REQIND ADC 0_^1SAVE1 NUM 0_^1SAVE2 NUM 0_^1SAVE3 NUM 0_^1NWFRB NUM 0_^1WPS_"ADC WRDSEC_^1ACUADR ADC CKUADR_^1AMMWRT ADC MMWRIT_^1_%EJT_]_^1*_*STORE RECORD IN LAST RECORD BLOCK_^1SS300 LDQ- FRBLSA,I_$ENOUGH ROOM IN THIS FRB BLOCK_^1_%LDA- FRBNIX,I_^1_%STQ* FRBSC1_'STORE SECTOR/INDEX_^1_%STA* FRBID1_^1*_]_^1_%RTJ* (AMMW€€RT)_$WRITE OUT RECORD IN CURRENT FILE RECORD BLOCK_^1CA1_"ADC 0_^1NW1_"ADC 0_^1LU1_"NUM 0_^1FRBID1 NUM 0_^1FRBSC1 NUM 0_^1_%SQP SS320_^1_%JMP* MMERR_"*****MASS MEMORY ERROR_^1*_]_^1SS320 LDA* (RECLTH)_$STORE NEW INDEX IN FRBNIX_^1_%ADD- FRBNIX,I_^1_%STA- FRBNIX,I_^1_%RAO- NRLFRB,I_$INCREMENT NUMBER RECORDS IN LAST FRB BLOCK_^1*_]_^1_%LDQ* FRBSC1_'STORE RECORD POINTER AND SET€€ CHANGE BIT_^1_%LDA* FRBID1_^1_%JMP* SS500_^1_%EJT_]_^1*_8REQUIRE NEW BLOCK_^1SS400 LDQ* NWFRB_^1_%LDA* LU1_^1_%RTJ FILSPC_'ROUTINE WILL GET MM_^1_%SAZ SS410_^1_%SAM SS405_^1_%JMP* MMERR_"*****MASS MEMORY ERROR_^1SS405 LDA- MASK+8_!*****NO MORE FILE SPACE ERROR_^1_%JMP* SS040_^1*_]_^1SS410 STQ* SA2_*HAVE MM STORE SEC ADD OF THIS BLOCK_^1_%LDQ* CA2_^1_%LDA- (ZERO),Q_^1_%STA* S€€AVE1_"SAVE USERS CORE_^1_%LDA- 1,Q_^1_%STA* SAVE2_^1_%LDA- 2,Q_^1_%STA* SAVE3_^1_%LDA- FRBLSA,I_$SET BACKWARD FRB POINTER_^1_%STA- (ZERO),Q_^1_%CLR A_,CLEAR FORWARD FRB POINTER AND_^1_%STA- 1,Q_*NUMBER OF RECORDS IN THIS FRB_^1_%STA- 2,Q_^1*_]_^1_%RTJ* (AMMWRT)_$WRITE FIRST RECORD IN NEW FILE RECORD BLOCK_^1CA2_"ADC 0_^1NW2_"ADC 0_^1LU2_"NUM 0_^1_%NUM 0_^1SA2_"ADC 0_^1_%SQP €€SS420_^1_%JMP* SS430_"*****MASS MEMORY ERROR_^1*_]_^1SS420 LDQ* CA3_*SETUP FORWARD POINTER AND NUMREC ON LAST FRB_^1_%LDA* SA2_^1_%STA- (ZERO),Q_^1_%LDA- NRLFRB,I_^1_%STA- 1,Q_^1_%LDQ- FRBLSA,I_$CHECK IF FIRST FRB_^1_%SQZ SS430_*YES, DONT WRITE FORWARD POINTER_^1_%ENA 1_^1_%STQ* FRBSC3_'STORE SECTOR/INDEX_^1_%STA* FRBID3_^1*_]_^1_%RTJ* (AMMWRT)_$WRITE THREAD FROM LAST FRB TO NEW€€ FRB_^1CA3_"ADC 0_^1_%ADC FRBHDR-1_$WRITE NUMBER RECORDS AND POINTER TO NEXT FRB_^1LU3_"NUM 0_^1FRBID3 NUM 0_^1FRBSC3 NUM 0_^1_%EJT_]_^1*_]_^1SS430 LDA* SAVE1_(RESTORE USERS CODE_^1_%STA* (CA2)_^1_%RAO* CA2_^1_%LDA* SAVE2_^1_%STA* (CA2)_^1_%RAO* CA2_^1_%LDA* SAVE3_^1_%STA* (CA2)_^1_%SQP SS450_^1*_]_^1*_***************FILE SPACE SHOULD BE RETURNED ON MM ERROR_^1MMERR LDA- MA€€SK+7_!*****MASS MEMORY ERROR_^1_%JMP SS040_^1*_]_^1SS450 LDA* NW2_*SETUP NEXT LAST FRB INDEX_^1_%STA- FRBNIX,I_^1_%ENA 1_,SETUP NUMBER OF RECORDS IN NEXT LAST FRB_^1_%STA- NRLFRB,I_^1_%LDQ* SA2_*SETUP NEW LAST FRB_^1_%STQ- FRBLSA,I_^1_%RAO- NUMFRB,I_$INCREMENT NUMBER OF FRB,S_^1*_]_^1_%LDA- FRBFSA,I_$IS IT THE FIRST RECORD IN THE FILE_^1_%SAN SS460_^1_%STQ- FRBFSA,I_$YES, MAKE €€FIRST AND LAST FRB,S EQUAL_^1*_]_^1SS460 ENA FRBHDR_'Q/A = SECTOR/INDEX_^1_%EJT_]_^1*_]_^1SS500 STQ* (RECPTR)_$STORE RECORD POINTER_^1_%LDQ* RECPTR_^1_%STA- 1,Q_^1*_]_^1_%ENA -1_+SET FIS CHANGE BIT_^1_%AND- IDXCHG,I_^1_%EOR- MASK_^1_%STA- IDXCHG,I_^1*_]_^1_%LDA- FISCOM,I_$CHECK IF FILE LOCKED_^1_%SAZ SS510_^1_%LDA- MASK+1_'FILE LOCKED_^1*_]_^1SS510 JMP SS080_(EXIT_^1_%SPC 2€"_^1_%END_]_^__ FRB,S EQUAL_^1*_]_^"PSTODIR CSY/ F15 P€1_%NAM STODIR_'DECK-ID F15 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_$CALL STODIR(FILNUM,FILCOM,RECPTR,RECBUF,REQBUF,REQIND)_^1*_]_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU MASK($23)_#€€ONE BIT TABLE_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER€€ OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%€€EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT IN€€DEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) F€€ILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1_%EJT_]_^1*_*EXTERNALS_^1_%EXT ADRFMS_'BEGINNING SECTOR OF FILE SPACE ON LIB UNIT_^1_%EXT FSLIST_'START OF FILE SPACE LIST_^1_%EXT ABSPAR_'GETS ABSOLUTE ADDRESSES_^1_%EXT CKCFIS_'CHECKS CORE FIS_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%€€EXT MMREAD_'MM READ_^1_%EXT MMWRIT_'MM WRITE_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1*_]_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_$CALL STODIR(FILNUM,FILCOM,RECPTR,RECBUF,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_(LENGTH OF REQUEST PROCESSOR_^1_%SPC 2_^1STODIR 000 000_*STORE DIRECT_^1_%STQ- I_,PICK UP ABSOLUTE ADDRESS OF ARGUMENTS_^1*_]_^1_%ENQ 6_^1DS010 INQ€€ -1_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ DS020_^1_%JMP* DS010_^1*_]_^1DS020 LDQ* (FILNUM)_$CHECK VALID FILE NO._^1_%SQZ DS030_^1_%SQP DS100_^1DS030 LDA- MASK+14_^1*_]_^1DS040 EOR- MASK+15_%ERROR EXIT_^1*_]_^1DS080 STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (STODIR)_^1_%EJT_]_^1*_]_^1DS100 RTJ CKCFIS_'CHECK FIS IN CORE_^1_%SAP DS11€€0_^1*_]_^1_%LDQ* (FILNUM)_$NOT THERE - CHECK MM_^1_%RTJ SRHFIS_^1_%SAN DS120_(FILE NOT DEFINED_^1*_]_^1DS110 STQ- I_,I = CORE FIS_^1_%LDA- FISFLG,Q_$IS FILE RELEASED_^1_%SAM DS130_^1DS120 LDA- MASK+0_'FILE RELEASED (OR NOT DEFINED)_^1_%JMP* DS040_^1*_]_^1DS130 RTJ CKPROT_'CHECK IF REQUEST PROTECTED_^1_%SAN DS140_^1_%LDA- MASK+13_%UNPROTECTED CALLER (NOT ALLOWED)_^1_%JMP* DS€€040_^1*_]_^1DS140 LDA- FISCOM,Q_$IS FILE LOCKED_^1_%SAN DS150_^1_%LDA- MASK+1_'FILE NOT LOCKED_^1_%JMP* DS040_(ERROR_^1*_]_^1DS150 LDA* (FILCOM)_$CHECK FILE COMBINATION_^1_%AND- ONEMSK+14_^1_%SAZ DS180_^1_%EOR- FISCOM,Q_^1_%SAZ DS200_^1DS180 LDA- MASK+10_%NO OR WRONG FILE COMBINATION FROM CALLER_^1_%JMP* DS040_^1_%EJT_]_^1*_]_^1DS200 LDA* RECBUF_'SET UP WRITE_^1_%STA* RECBFR€€_^1_%LDA* (RECBUF)_^1_%SAP DS201_^1_%JMP* DS030_(RECORD LENGTH IN BUFFER IS NEGATIVE_^1*_]_^1DS201 STA* RECLGH_^1_%LDA- FISFLG,Q_^1_%AND- ONEMSK+6_^1_%STA* FRBLU1_^1_%LDQ* RECPTR_'STORE MASS MEMORY ADDRESSES_^1_%LDA- 1,Q_^1_%LDQ- (ZERO),Q_^1_%STQ* FRBSC1_^1_%STA* FRBID1_^1*_]_^1_%LDA ADRFMS_'SET LOW LIMIT FOR LIBRARY UNIT_^1_%STA* LOWLMT_^1_%LDQ =XFSLIST_^1DS202 LDA- (ZERO),Q_€€$FIND RECORD,S LOGICAL UNIT ENTRY_^1_%AND- ONEMSK+6_^1_%EOR* FRBLU1_^1_%SAZ DS203_(LOGICAL UNIT ENTRY FOUND, CHECK LIMITS_^1_%ENA 1_,SET LOW LIMIT TO ONE FOR ALL OTHER LU ENTRIES_^1_%STA* LOWLMT_^1_%LDA- (ZERO),Q_$GET LU ENTRY LENGTH AND CHECK NEXT LU ENTRY_^1_%ARS 7_^1_%AND- ONEMSK+8_^1_%AAQ Q_^1_%JMP* DS202_^1*_]_^1DS203 LDA* FRBSC1_'CHECK IF OUTSIDE OF LIMITS_^1_%SAM OUTLI€€M_)(YES, ITS NEGATIVE)_^1_%SUB* LOWLMT_^1_%SAM OUTLIM_'BELOW LOW LIMIT_^1_%SUB- 3,Q_*CHECK IF WITHIN HIGH LIMIT_^1_%SAP OUTLIM_'ABOVE HIGH LIMIT_^1*_]_^1_%LDA* FRBID1_'CHECK FRB INDEX_^1_%SAM OUTLIM_'ERROR, INDEX IS NEGATIVE_^1_%ENA WRDSEC_^1_%MUI- FRBSIZ,I_$CHECK IF INDEX GREATER THAN FRB SIZE_^1_%SUB* FRBID1_^1_%SAP DS205_(RECORD POINTER IS OKAY,STORE RECORD_^1*_]_^1OUTLIM L€€DA- MASK+9_!*****RECORD POINTER OUT OF LIMITS_^1_%JMP* DS040_*SET BIT 9 AND GO TO ERROR EXIT_^1_%EJT_]_^1*_*WRITE OUT THE RECORD_^1DS205 RTJ* (AMMWRT)_$WRITE OUT RECORD_^1RECBFR NUM 0_^1RECLGH NUM 0_^1FRBLU1 NUM 0_^1FRBID1 NUM 0_^1FRBSC1 NUM 0_^1*_]_^1_%SQP DS209_^1MMERR LDA- MASK+7_!*****MASS MEMORY ERROR_^1_%JMP* DS040_^1_%SPC 2_^1*_*STORE DIRECT PARAMETERS_^1*_]_^1FILNU€\M NUM 0_^1FILCOM NUM 0_^1RECPTR NUM 0_^1RECBUF NUM 0_^1REQBUF NUM 0_^1REQIND NUM 0_^1*_]_^1LOWLMT NUM 0_^1LUELTH NUM 0_^1_%SPC 5_^1DS209 CLR A_,CHECK FILE COMBINATION FOR UNLOCK OPTION_^1_%LDQ* (FILCOM)_^1_%SQP DS220_^1_%STA- FISCOM,I_$YES, UNLOCK FILE_^1DS220 JMP* DS080_(EXIT_^1_%SPC 2_^1AMMWRT ADC MMWRIT_^1_%SPC 2_^1_%END_]_^__\PHASHCD CSY/ F17 P€1_%NAM HASHCD_'DECK-ID F17 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT HASHCD_^1_%SPC 2_^1_%EQU ONEMSK(3)_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEA€€DER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(€€1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^€€1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSI€€Z(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL U€€NITS_^1_%EJT_]_^1*_*FIND SCATTER (HASH) CODE_^1*_]_^1HASHCD 000 000_^1_%STA* KEYADR_'SAVE BASE ADDRESS OF KEY VALUE BUFFER_^1_%CLR A_^1_%LDQ- KEYLTH,I_^1*_]_^1HASHLP INQ -1_+ADD KEY VALUE WORDS TOGETHER_^1_%ADD* (KEYADR),Q_^1_%SQZ HASHEX_^1_%JMP* HASHLP_^1*_]_^1HASHEX AND- ONEMSK+14_^1_%JMP* (HASHCD)_$EXIT WITH POSITVE HASH CODE IN A_^1_%SPC 2_^1KEYADR NUM 0_^1_%SPC 2_^1_%EN€D_]_^__%EJT_]_^1*_*FIND SCAPGETKID CSY/ F18 P€1_%NAM GETKID_'DECK-ID F18 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*EQUIVALENCES_^1*_1COMMUNICATION REGION_^1_%EQU ZERO(2)_%ZERO CONSTANT_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ZROMSK($13)_!ZERO MASK TABLE_^1_%EQU€€ ONEBIT($23)_!ONE BIT TABLE_^1_%EQU ZROBIT($33)_!ZERO BIT TABLE_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF €€WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, €€FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD€€ BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) N€€UMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1_%EJT_V63*1350_^1*_*EXTERNALS_^1_%EXT FMRERR_'FILE MANAGER REQUEST ERROR ENTRY_^1_%EXT FDTINT_'TIME OUT CLOCK FOR KIS DIRECTORY_^1_%EXT GETSPC_'SPACE REQUEST PROCESSOR. NUMBER WORDS IN A_^1_%€€EXT MMREAD_'READ FROM MASS MEMORY_^1*_]_^1*_*ENTRY POINT_^1_%ENT GETKID_'GET KEY INFORMATION SYSTEM DIRECTORY_^1_%EJT_]_^1GETKID 000 000_^1_%IIN 000_*INHIBIT INTERRUPTS_463*1350_^1_%LDQ- ADRKID,I_$GET ADDRESS OF KIS DIRECTORY IN FIS_^1_%SQZ READKD_'KIS DIRECTORY NOT IN CORE--READ IT IN_^1_%JMP* GKEXIT_'RETURN WITH KIS DIRECTORY ADDRESS IN Q_^1*_]_^1READKD ENA WRDSEC_'GET SIZE€€ OF KIS DIRECTORY IN WORDS_^1_%MUI- KIDSIZ,I_^1_%STA* PAR2_)NUMBER WORDS TO BE READ--KIS DIRECTORY LENGTH_^1_%RTJ GETSPC_'REQUEST KIDSIZ * WRDSEC WORDS OF SPACE_^1_%STQ* PAR1_)STARTING ADDRESS OF BUFFER_^1_%STQ* RELKID+2_$STORE ADDRESS FOR POSSIBLE RELEASE_#69*1593_^1*_]_^1_%LDA- FISFLG,I_$GET FISFLG WORD IN CORE FIS_^1_%ARS 7_^1_%AND- ONEMSK+6_$GET L.U. IN BITS 0-6. ONEMSK+6 HO€€LDS $7F_^1_%STA* PAR3_)LOGICAL UNIT_^1*_]_^1_%LDA- KIDSEC,I_$SECTOR NUMBER OF KIS DIRECTORY_^1_%STA* PAR5_^1*_]_^1_%RTJ MMREAD_'READ IN KIS DIRECTORY FROM MASS MEMORY_^1PAR1_!NUM 0_,BUFFER BASE ADDRESS ALLOCATED BY GETSPC_^1PAR2_!NUM 0_,NUMBER OF WORDS TO READ_^1PAR3_!NUM 0_,LOGICAL UNIT_^1_%NUM 0_^1PAR5_!NUM 0_,SECTOR NUMBER OF KIS DIRECTORY_^1_%SQP KIDADR_^1RELKID RELEAS €|0_)RELEASE SPACE USED BY KID_-69*1593_^1_%LDA- ONEBIT+7 *****MASS MEMORY ERROR_^1_%JMP FMRERR_^1KIDADR LDQ* PAR1_)STARTING ADDRESS OF KIS DIRECTORY_^1_%STQ- ADRKID,I_$STARTING ADDR OF KIS DIRECTORY INTO CORE FIS_^1*_]_^1GKEXIT LDA FDTINT_'SET TIME OUT INTERVAL FOR KIS DIRECTORY_^1_%STA- (ZERO),Q_^1_%EIN 000_*ENABLE INTERRUPTS_563*1350_^1_%JMP* (GETKID)_!RETURN_^1_%END_]_^__|PRTVSEQ CSY/ F19 P€1_%NAM RTVSEQ_'DECK-ID F19 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_$CALL RTVSEQ(FILNUM,FILCOM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1*_]_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU MASK€€($23)_#ONE BIT TABLE_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_€€"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLO€€CK_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) €€NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(F€€H+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1*_2INDEXES INTO REQUEST BUFFER TABLE_^1_%EQU PREFRB(6)_#POINTER TO PREVIOUS FILE RECORD BLOCK_^1_%EQU NXTFRB(7)_#POINTER TO NEXT FILE RECORD BLOCK_^1_%EQU RECCNT(8)_$RECORD COUNT IN THIS FILE RECORD BLOCK_^1_%EQU CURFRB(9)_#POINTE€€R TO CURRENT LAST FRB_^1_%EQU CURCNT(10)_"CURRENT NUMBER OF RECORDS IN CURRENT LAST FRB_^1_%EQU LRCSIZ(11)_"LAST RECORD SIZE IN WORDS_^1_%EJT_]_^1*_2EXTERNALS_^1_%EXT ABSPAR_'GETS ABSOLUTE ADDRESSES_^1_%EXT CKCFIS_'CHECKS CORE FIS_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT CKUADR_'CHECK LEGALITY OF UNPROTECTED ADDRESS_^1_%EXT MMREAD_'MM READ_^1_%EXT MMWRIT_'MM WRITE€€_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1_%EXT FILBLK_'FILE BLOCK FOR RETRIEVING RECORD,S FRB_^1_%EXT NWFBLK_'NUMBER OF WORDS IN FILE BLOCK_^1*_]_^1_%EXT* RTNSPC_'RETURN SPACE_^1_%EXT* STRSEC_'STARTING SECTOR OF SPACE TO BE RETURNED_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_$CALL RTVSEQ(FILNUM,FILCOM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_€€(LENGTH OF REQUEST PROCESSOR_^1_%SPC 2_^1RTVSEQ 000 000_*RETRIEVE SEQUENTIAL_^1_%STQ- I_^1*_]_^1_%ENQ 7_^1T010_!INQ -1_+LOOP TO PICK UP ADDRESS OF CALL PARAMETERS_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ T020_^1_%JMP* T010_^1*_]_^1T020_!LDQ* (FILNUM)_$CHECK FOR VALID FILE NO._^1_%SQZ T030_^1_%SQP T100_^1T030_!LDA- MASK+14_^1*_]_^1T€€040_!EOR- MASK+15_%ERROR EXIT_^1*_]_^1T080_!STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (RTVSEQ)_^1_%EJT_]_^1*_]_^1T100_!RTJ CKCFIS_'SEE IF FIS IN CORE_^1_%SAP T110_^1*_]_^1_%LDQ* (FILNUM)_$NOT IN CORE CHECK MM_^1_%RTJ SRHFIS_^1_%SAN T120_^1*_]_^1T110_!STQ- I_,SAVE CORE FIS ADDRESS_^1_%LDA- FISFLG,Q_^1_%SAM T130_^1T120_!LDA- MASK+0_'RELEASED OR NOT DEFINED_^1_%JMP* T040_^1*_]_^1T130_!€€LDA* (FILCOM)_$CHECK IF REMOVING RECORD_^1_%SAM T140_^1_%JMP* T200_^1*_]_^1T140_!LDQ- FISCOM,Q_$CHECK IF FILE LOCKED_^1_%SQZ T160_^1_%AND- ONEMSK+14_#IF LOCKING AND FILE LOCKED, FILCOM = FISCOM_^1_%SAN T160_^1_%LDA- MASK+1_'ERROR TRYING TO REMOVE FROM LOCKED FILE W/0 CM_^1_%JMP* T040_^1*_]_^1T160_!LDA- KIDSEC,I_^1_%SAZ T170_^1_%LDA- MASK+11_%CANT REMOVE FROM INDEXED FILE_^1_%JM€€P* T040_)ERROR_^1*_]_^1T170_!LDA- FISFLG,I_$CHECK IF FILE PROTECTED_^1_%AND- MASK+14_^1_%SAZ T200_^1_%RTJ* (ACPROT)_$CHECK IF REQUEST PROTECTED_^1_%SAN T200_^1_%LDA- MASK+13_%UNPROT CALL CANT REMOVE FROM PROT FILE_^1_%JMP* T040_^1_%EJT_]_^1*_]_^1T200_!CLR Q_,CHECK IF FIRST RECORD POINTER ADDRESS LEGAL_^1_%LDA* RECPTR_^1_%RTJ* (ACUADR)_^1_%INA 1_,CHECK IF SECOND RECORD POINTER A€€DDRESS LEGAL_^1_%RTJ* (ACUADR)_^1*_]_^1_%LDA* (RECLTH)_$CHECK RECLTH FOR ZERO OR NEGATIVE_^1_%SAZ T210_^1_%SAP T220_^1T210_!JMP* T030_)RECORD SIZE ILLEGAL_^1*_]_^1T220_!STA RECLGH_'SETUP NUMBER OF WORDS IN RECORD LENGTH 63*1351_^1*_]_^1_%LDA* RECBUF_'CHECK LEGALITY OF UNPROTECTED (IF IT IS) ADR_^1_%STA RECBFR_N63*1351_^1_%RTJ* (ACUADR)_$OK, IF IT RETURNS_^1*_]_^1_%ADD* (RECLTH)€€_$CHECK IF THE END OF THE RECORD BUFFER OK_^1_%INA -1_^1_%RTJ* (ACUADR)_$OK, IF IT RETURNS_^1*_]_^1_%LDA- FISFLG,I_$SETUP LOGICAL UNIT_^1_%AND- ONEMSK+6_^1_%STA* LU0_^1_%STA* FRBLU1_^1_%STA FRBLU2_^1_%STA FRBLU_^1_%EJT_]_^1*_]_^1T300_!LDA* (RECPTR)_$CHECK IF FIRST SEQUENTIAL READ_^1_%SAN T320_^1_%LDQ- FRBFSA,I_$FIRST TIME, CHECK IF FILE EMPTY_^1_%SQZ T315_+EMPTY, RETURN END OF€€ FILE FLAG_^1_%TRQ A_,CHECK IF FIRST FRB EQUALS LAST FRB_^1_%EOR- FRBLSA,I_^1_%SAN T335_+NO, GET FIRST RECORD_^1_%LDA- NRLFRB,I_$CHECK IF NO RECORDS IN FIRST FRB_^1_%SAN T335_)RECORDS EXIST, GET FIRST ONE_^1T315_!JMP* T350_)FILE IS EMPTY, RETURN END-OF-FILE INDICATION_^1*_]_^1T320_!LDQ* REQBUF_'CHECK RECORD COUNT_^1_%LDA- RECCNT,Q_^1_%SAZ T330_^1_%JMP* T400_)GET NEXT RECORD FRO€€M FILE RECORD BLOCK_^1*_]_^1T330_!LDQ- NXTFRB,Q_$CHECK IF NO NEXT FILE RECORD BLOCK_^1_%SQZ T340_+NO MORE_^1T335_!ENA FRBHDR_'GET FIRST RECORD OF NEW FILE RECORD BLOCK_^1_%JMP* T405_^1*_]_^1T340_!LDQ* REQBUF_'ALL RECORDS READ, CHECK IF ANY MORE ADDED_^1_%LDA- FRBLSA,I_^1_%SUB- CURFRB,Q_^1_%SAN T360_)ONE OR MORE FILE RECORD BLOCKS HAS BEEN ADDED_^1*_]_^1_%LDA- NRLFRB,I_^1_%SUB- C€€URCNT,Q_^1_%SAM T350_^1_%SAZ T350_^1_%JMP* T390_)MORE RECORDS ADDED IN LAST FILE RECORD BLOCK_^1*_]_^1T350_!LDA- MASK+3_'ALL RECORDS READ, RETURN END-OF-FILE FLAG_^1_%JMP T720_+(DONT LOCK FILE ON EOF)_-63*1351_^1T360_!LDA- CURFRB,Q_$SET SECTOR ADDRESS OF PREVIOUS LAST FRB_^1_%STA* SA0_^1_%INQ PREFRB_'SETUP ADDRESS OF PREFRB, NXTFRB, AND RECCNT_^1_%STQ* CA0_^1*_]_^1_%RTJ MMREAD€€_'READ LAST FRB HEADER INTO PREFRB/NXTFRB/RECCNT_^1CA0_"NUM 0_^1_%ADC FRBHDR_^1LU0_"NUM 0_^1_%NUM 0_^1SA0_"NUM 0_^1_%SQP T380_^1*_]_^1MMERR LDA- MASK+7_!*****MASS MEMORY ERROR_^1_%JMP* T040_^1_%EJT_]_^1*_]_^1ACPROT ADC CKPROT_^1ACUADR ADC CKUADR_^1WPS_"ADC WRDSEC_^1ANWBLK ADC NWFBLK_N63*1351_^1*_]_^1FILNUM ADC 0_,1_#THESE CARDS MUST BE IN ORDER OF_^1FILCOM ADC 0_,2_#CA€€LLING SEQUENCE_^1RECPTR ADC 0_,3_^1RECBUF ADC 0_,4_^1RECLTH ADC 0_,5_^1REQBUF ADC 0_,6_^1REQIND ADC 0_,7_!STOP_^1_%SPC 5_^1*_*SETUP WHEN MORE RECORDS ADDED AFTER PREVIOUS LAST FRB_^1T380_!LDQ* REQBUF_'ARE THERE ANY MORE RECORDS IN THIS FRB_^1_%LDA- RECCNT,Q_^1_%SUB- CURCNT,Q_^1_%SAM T385_^1_%SAN T390_^1T385_!JMP* T330_)NO,GET THE NEXT RECORD FROM THE NEXT FRB_^1*_]_^1T390_!S€€TA- RECCNT,Q_$SET NUMBER OF RECORDS TO BE READ IN THIS FRB_^1_%ADD- CURCNT,Q_^1_%STA- CURCNT,Q_$SET CURRENT RECORD COUNT IN THIS FRB_^1_%EJT_]_^1*_*READ IN RECORD FROM FILE RECORD BLOCK_^1*_]_^1T400_!LDA- LRCSIZ,Q_$READ NEXT RECORD IN THIS FRB_^1_%LDQ* RECPTR_^1_%ADD- 1,Q_^1_%LDQ- (ZERO),Q_^1*_]_^1T405_!STA* FRBID1_'SETUP SECTOR/INDEX FOR READ AND REMOVE_^1_%STQ* FRBSC1_^1_%STQ FR€€BSC2_N63*1351_^1_%STA FRBID2_N63*1351_^1*_] 63*1351_^1_%LDA- FRBSIZ,I_$GET NUMBER OF WORDS IN FILE RECORD BLK.63*1351_^1_%AND- ONEMSK+8_L63*1351_^1_%MUI* WPS_Q63*1351_^1_%TRA Q_,CHECK IF FRB SIZE .GT. FILE BLOCK SIZE 63*1351_^1_%SUB* ANWBLK_N63*1351_^1_%SAM T408_)NO, USE FILE RECORD BLOCK SIZE_(63*1351_^1_%LDQ* ANWBLK_'YES, USE FILE BLOCK SIZE_.63*1351_^1T408_!STQ NWFB_P63*135€€1_^1_%STQ* NWFB1_O63*1351_^1*_] 63*1351_^1_%LDA* ANWBLK_'CHECK IF RECORD WILL FIT IN FILE BLOCK 63*1351_^1_%SUB* FRBID1_^1_%SUB* RECLGH_^1*_]_^1_%LDQ* FRBID1_'CHECK IF FIRST RECORD OF A FRB_^1_%INQ -FRBHDR_^1_%SQZ T410_)YES, READ IN FILE RECORD BLOCK_^1*_]_^1_%LDQ* (FILCOM)_$CHECK IF RECORD IS TO BE REMOVED_^1_%SQM T410_+YES, READ IN FILE RECORD BLOCK_^1_%SAM T415_)NO REMOVE A€€ND WONT FIT IN FILE BLOCK_^1_%EJT_V63*1351_^1T410_!STA* IFBFLG_'READ IN FILE RECORD BLOCK INTO FILE BLOCK_^1_%LDA* FRBSC1_^1_%LDQ* AMMRED_^1_%RTJ* ACCFRB_^1_%LDQ* AFLBLK_^1_%ADQ* FRBID1_^1_%LDA* IFBFLG_'CHECK IF RECORD IN FILE RECORD BLOCK_^1_%SAP T418_,YES_^1_%ADD* RECLGH_^1_%INA -1_+SET IN-FILE-BLOCK FLAG IF FIRST WORD IS IN_^1_%SAM T430_^1_%STA* IFBFLG_^1_%INA 1_^1_%SUB- (ZE€€RO),Q_$CHECK IF ACTUAL RECORD IN FILE RECORD BLOCK_^1T415_!SAM T430_,NO, READ IN RECORD BY ITSELF_^1*_]_^1T418_!STQ* IFBFLG_'RECORD IN FILE RECORD BLOCK_^1_%LDQ* RECLGH_^1T420_!INQ -1_+TRANSFER RECORD TO USER,S RECORD BUFFER_^1_%LDA* (IFBFLG),Q_^1_%STA* (RECBFR),Q_^1_%SQZ T500_^1_%JMP* T420_^1*_81 CARD DELETED_663*1351_^1*_*RETRIEVE THE RECORD BY ITSELF_^1*_]_^1T430_!RTJ* (AMMRE€€D)_$READ THE RECORD IN BY ITSELF_^1RECBFR NUM 0_^1RECLGH NUM 0_^1FRBLU1 NUM 0_^1FRBID1 NUM 0_^1FRBSC1 NUM 0_^1*_]_^1_%SQP T500_^1MMER_!JMP* MMERR_"*****MASS MEMORY ERROR_^1*_82 CARDS DELETED_563*1351_^1_%EJT_]_^1*_*SETUP RETRIEVE SEQUENTIAL PARAMETERS_^1*_]_^1T500_!LDA* FRBID1_'CHECK IF AN INITIAL READ FROM AN FRB_^1_%INA -FRBHDR_^1_%SAN T505_^1*_]_^1_%LDQ* AFLBLK_'YES, SAV€€E CONTROL WORDS_^1_%LDA- 1,Q_^1_%STA* FRBLU1_'SAVE POINTER TO NEXT FRB TEMPORARILY_^1_%LDA- 2,Q_^1_%LDQ* REQBUF_'SAVE NUMBER OF RECORDS IN THIS FRB_^1_%STA- RECCNT,Q_^1_%LDA* FRBLU1_'SAVE POINTER TO NEXT FRB_^1_%STA- NXTFRB,Q_^1_%SAN T510_)CHECK IF LAST FILE RECORD BLOCK_^1*_]_^1_%LDA- FRBLSA,I_$YES, SET CURRENT LAST FRB TO LAST FRB_^1_%STA- CURFRB,Q_^1_%LDA- NRLFRB,I_$SET CURRENT€€ COUNT IN CURRENT LAST FRB = NRLFRB_^1_%STA- CURCNT,Q_^1_%STA- RECCNT,Q_$INITIALIZE RECORD COUNT TO RECORDS IN LAST FRB_^1T505_!SAN T510_^1_%JMP* T350_)NO RECORDS IN LAST FRB, END OF FILE_^1*_]_^1T510_!LDQ* FRBSC1_'STORE RECORD POINTER_^1_%LDA* FRBID1_^1_%STQ* (RECPTR)_^1_%LDQ* RECPTR_^1_%STA- 1,Q_^1_%EJT_]_^1*_*DECREMENT RECORD COUNT AND CHECK FOR A REMOVE_^1*_]_^1_%LDQ* REQBUF_'€€SAVE RECORD SIZE_^1_%LDA* (RECBUF)_^1_%AND- ONEMSK+14_^1_%SAN T520_^1_%LDA- FIFORL,I_$RL=0, SPECIAL RECORD/ USE FIFO RECORD LENGTH_^1T520_!STA- LRCSIZ,Q_^1*_]_^1_%LDA* (RECBUF)_$CHECK IF RECORD ALREADY REMOVED_^1_%INA -1_^1_%SAM T525_)YES, SET BIT 5 AND EXIT_^1_%LDA- RECCNT,Q_^1_%INA -1_+DECREMENT RECORD COUNT_^1_%STA- RECCNT,Q_^1*_]_^1_%LDA* (FILCOM)_$CHECK IF REMOVING RECORD_€€^1_%SAP T523_+NO_^1_%LDA- CURCNT,Q_^1_%INA -1_+DECREMENT CURRENT COUNT OF NUMREC IN LAST FRB_^1_%STA- CURCNT,Q_^1*_]_^1T523_!LDA* (RECBUF)_$CHECK IF SPECIAL FIFO RECORD ($8000)_!63*1351_^1_%SAP T530_+NO, CONTINUE PROCESSING_^1*_]_^1T525_!LDA- MASK+5_'RECORD REMOVED, SET BIT 5 AND EXIT_^1T527_!JMP* T720_^1*_]_^1T530_!LDQ* (FILCOM)_$CHECK IF RECORD IS TO BE REMOVED_^1_%SQM RMVREC€€_^1_%JMP* T700_)NO, SETUP INDICATOR AND EXIT_^1*_] 63*1351_^1NWFB1 NUM 0_,NUMBER OF WORDS IN FILE BLOCK_)63*1351_^1IFBFLG NUM 0_,IN-FILE-BLOCK FLAG (POSITIVE IF IT IS) 63*1351_^1_%EJT_]_^1*_*REMOVE THE RECORD_^1*_81 CARD DELETED_663*1351_^1RMVREC LDQ* AFLBLK_'REMOVE THE RECORD_^1_%LDA- 2,Q_*CHECK IF RECORD IS IN LAST FRB_^1_%SAN T620_+NO_^1*_]_^1_%ENA -1_+RECORD IN LAST FRB_^€€1_%AND- IDXCHG,I_^1_%INA 1_,SET FIS CHANGED BIT_^1_%STA- IDXCHG,I_^1_%LDA- NRLFRB,I_$DECREMENT NUMBER OF RECORDS IN LAST FRB_^1_%INA -1_^1_%STA- NRLFRB,I_$IS THERE MORE THAN ONE RECORD IN THE LAST FRB_^1_%SAN T630_+YES, THEN JUST REMOVE THE RECORD_^1_%LDQ REQBUF_'NO MORE RECORDS IN LAST FRB_+63*1351_^1_%ENA FRBHDR_'DONT RETURN LAST FRB_^1_%STA- FRBNIX,I_'(RESET FRB INDEX TO BE€€GINNING OF LAST FRB)_^1_%SUB* FRBID1_^1_%STA- LRCSIZ,Q_$SETUP FOR REENTRY IF MORE RECORDS ADDED_^1_%JMP* T700_^1*_]_^1T620_!INA -1_+DECREMENT NUMBER OF RECORDS IN FRB_^1_%STA- 2,Q_^1_%SAN T630_^1_%LDA- 1,Q_*SETUP NEXT FRB (IF RQT THINKS THIS LAST ONE)_^1_%LDQ REQBUF_^1_%STA- NXTFRB,Q_^1_%JMP* RTNFRB_'RETURN THE FRB_^1*_]_^1T630_!LDA* (RECBFR)_$SET REMOVE BIT IN RECORD_^1_%EOR- M€€ASK+15_^1_%LDQ* IFBFLG_'CHECK IF RECORD IN FILE BLOCK_^1_%SQM T640_)NO, REMOVE RECORD BY ITSELF_^1_%LDQ* FRBID2_^1_%STA* (AFLBLK),Q_"RECORD IS IN FILE BLOCK, REMOVE IT WHEN FRB IS_^1_%JMP* T650_)WRITTEN BACK TO DECREMENT NUMBER OF RECORDS_^1*_]_^1T640_!STA* (AMMRED)_$REMOVE RECORD BY ITSELF_^1_%RTJ* (AMMWRT)_^1AMMRED ADC MMREAD_^1_%NUM 1_^1FRBLU2 NUM 0_^1FRBID2 NUM 0_^1FRBSC2 €€NUM 0_^1_%SQP T650_^1_%JMP* MMER_#*****MASS MEMORY ERROR_^1*_]_^1T650_!LDA* FRBSC2_'WRITE FRB TO DECREMENT NUMBER OF RECORDS_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1_%JMP* T700_)SET UP REQUEST INDICATOR AND EXIT_^1_%EJT_]_^1*_*ACCESS THE RECORD,S FILE RECORD BLOCK_^1*_]_^1ACCFRB 000 000_^1_%STA* FRBSEC_'A = FILE RECORD BLOCK SECTOR_^1_%STQ* RORW+1_'Q = READ OR WRITE ADDRESS_^1*_]_^1RO€€RW_!RTJ+ 0000_)READ IN FRB_^1AFLBLK ADC FILBLK_'ADDRESS OF FILE BLOCK_^1NWFB_!ADC 0_,NUMBER OF WORDS IN FILE BLOCK_)63*1351_^1FRBLU NUM 0_,LOGICAL UNIT OF FRB_^1FRBIDX NUM 0_^1FRBSEC NUM 0_,STARTING SECTOR OF FRB_^1*_]_^1_%CLR A_,RESET FRB INDEX TO ZERO_^1_%STA* FRBIDX_^1*_82 CARDS DELETED_563*1351_^1*_]_^1_%SQM MME_^1_%JMP* (ACCFRB)_$RETURN_^1*_]_^1MME_"JMP* MMER_#*****MAS€€S MEMORY ERROR_^1_%SPC 3_^1AMMWRT ADC MMWRIT_^1_%EJT_]_^1*_*RETURN THE RECORD,S FILE RECORD BLOCK_^1*_]_^1RTNFRB ENA -1_+SET F IS CHANGED BIT_^1_%AND- IDXCHG,I_^1_%INA 1_^1_%STA- IDXCHG,I_^1_%LDQ* AFLBLK_'CHECK IF THE FIRST FRB IS BEING RETURNED_^1_%STA* NWFB_)(SETUP TO WRITE ONE WORD THREADS)_$63*1351_^1_%ENA 1_S63*1351_^1_%LDA* FRBSC2_^1_%EOR- FRBFSA,I_^1_%SAN RFRB10_^1*_]_€€^1_%LDA- 1,Q_*SET NEW FIRST FRB TO NEXT FRB_^1_%STA- FRBFSA,I_^1_%JMP* RFRB20_'WRITE BACKWARD FRB THREAD ON NEW FIRST FRB_^1*_]_^1RFRB10 LDA- (ZERO),Q_$WRITE FORWARD FRB THREAD ON LAST FRB_^1_%LDQ- 1,Q_^1_%STQ* (AFLBLK)_^1_%RAO* FRBIDX_^1*_82 CARDS DELETED_563*1351_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1*_]_^1_%LDA* (AFLBLK)_$WRITE BACKWARD FRB THREAD ON NEXT FRB_^1_%LDQ* FRBSEC_^1_%STQ€€* (AFLBLK)_^1RFRB20 LDQ* AMMWRT_N63*1351_^1_%RTJ* ACCFRB_N63*1351_^1*_] 63*1351_^1*_*RESET NUMBER OF WORDS TO ACCESS IN FILE BLOCK_'63*1351_^1_%LDA* NWFB1_O63*1351_^1_%STA* NWFB_P63*1351_^1_%LDA* FRBSC2_'SET UP STARTING SECTOR OF RECORD,S FRB_^1_%STA STRSEC_^1_%LDQ* FRBLU_(Q = LOGICAL UNIT OF FRB_^1_%LDA- FRBSIZ,I_^1_%AND- ONEMSK+8_$A = NUMBER OF SECTORS IN FRB_^1_%RTJ RTNSPC_'R€€ETURN THE RECORD,S FILE RECORD BLOCK_^1*_]_^1_%LDA- NUMFRB,I_$DECREMENT NUMBER OF FILE RECORD BLOCKS_^1_%INA -1_^1_%STA- NUMFRB,I_^1_%EJT_]_^1*_*SETUP INDICATOR AND EXIT_^1*_]_^1T700_!RTJ CKPROT_'CHECK IF REQUEST PROTECTED_^1_%SAZ T710_^1_%LDA (FILCOM)_$YES, CHECK IF FILE IS TO BE LOCKED_^1_%AND- ONEMSK+14_^1_%SAZ T710_^1_%STA- FISCOM,I_$YES, LOCK FILE_^1*_]_^1T710_!LDA (RECB€FR)_$CHECK IF A SHORT READ_^1_%AND- ONEMSK+14_^1_%TCA Q_^1_%CLR A_^1_%ADQ RECLGH_^1_%SQP T720_^1_%EOR- MASK+2_'YES, SET BIT 2_^1*_]_^1T720_!LDQ- FISCOM,I_$CHECK IF LOCKED_^1_%SQZ T730_^1_%EOR- MASK+1_'YES, SET BIT 1_^1T730_!JMP T080_^1_%SPC 3_^1_%END_]_^__PRTNSPC CSY/ F20 P€1_%NAM RTNSPC_'DECK-ID F20 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*R E T U R N_!F I L E_!S P A C E_^1*_]_^1*_]_^1_%ENT RTNSPC_'RETURN FILE SPACE SUBROUTINE_^1_%ENT STRSEC_'STARTING SECTOR ADDRESS OF RETURNED SPACE_^1€€*_]_^1_%EXT MMREAD_'MASS MEMORY READ_^1_%EXT MMWRIT_'MASS MEMORY WRITE_^1_%EXT FSLIST_'FILE SPACE LIST ADDRESS_^1_%EXT FSLEND_'END OF FILE SPACE LIST_^1*_]_^1_%EQU ZERO(2)_%LOCATION CONTAINING ZERO_^1_%EQU ONEBIT($23)_!ONEBIT TABLE_^1_%EQU ADISP($EA)_"ADDRESS OF DISPATCHER_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1_%EQU PL($EF)_%PRIORITY LEVEL_3**MSOS 4.1**_^1_%EJT_]_^1*_]_€€^1*_$FORMAT OF FILE SPACE LIST_^1*_'A. THE FILE SPACE LIST HAS N LU ENTRIES, TERMINATED BY -0_^1*_31._!LOGICAL UNIT ENTRY 1_^1*_32._!LOGICAL UNIT ENTRY 2_^1*_3._+._^1*_3._+._^1*_3._+._^1*_3N._!LOGICAL UNIT ENTRY N_^1*_1N+1._)NUM -0 OR +0_^1*_]_^1*_]_^1*_'B. A LOGICAL UNIT ENTRY HAS M THREADS OF SECTOR BLOCKS_^1*_,WORD_"0_!LU ENTRY LENGTH (BITS 7-15), LU (BITS 0-6)_^1*_,WORD_"1_!BE€€GINNING SECTOR ADDRESS OF FILE SPACE POOL_^1*_,WORD_"2_!TOTAL NUMBER OF AVAILABLE SECTORS_^1*_,WORD_"3_!TOTAL NUMBER OF SECTORS IN THIS FILE SPACE_^1*_,WORD_"4_!SECTOR ADDRESS(1) HAVING NUMBER OF SECTOR(1)_^1*_,WORD_"5_!NUMBER OF SECTORS(1)_^1*_,WORD_"6_!SECTOR ADDRESS(2) HAVING NUMBER OF SECTORS(2)_^1*_,WORD_"7_!NUMBER OF SECTORS(2)_^1*_3._+._^1*_3._+._^1*_3._+._^1*_,WORD 2M+1_!SE€€CTOR ADDRESS(M) HAVING NUMBER OF SECTORS(M)_^1*_,WORD 2M+2_!NUMBER OF SECTORS(M)_^1*_]_^1*_]_^1*_'C. EACH SECTOR BLOCK(I) HAS THE FOLLOWING FORMAT_^1*_,WORD_"0_!SECTOR ADDRESS OF NEXT BLOCK (0=NONE)_^1*_]_^1*_]_^1*_'D. EACH SECTOR BLOCK (WHICH IS IN ASCENDING SECTOR SIZE_^1*_*ORDER) IN THE FILE SPACE POOL HAS THE FOLLOWING FORMAT_^1*_,WORD_"0_!SECTOR ADDRESS OF NEXT EQUAL BLOCK (0=€€NONE)_^1*_,WORD_"1_!SECTOR ADDRESS OF NEXT GREATER BLOCK (0=NONE)_^1*_,WORD_"2_!NUMBER OF SECTORS IN THE CURRENT BLOCK_^1_%EJT_]_^1*_*RETURN FILE SPACE SUBROUTINE_^1*_]_^1*_]_^1RTNSPC 000 000_*STRSEC MUST BE SETUP BEFORE ENTRY_^1_%STQ* RLU_*Q = LOGICAL UNIT OF WHERE TO RETURN FILE SPACE_^1_%STQ* WLU_^1_%STA* NUMSEC_'A= NUMBER OF SECTORS TO RETURN_^1*_]_^1_%LDA- I_,SAVE I REGISTER_€€^1_%STA* ISAVE_^1*_]_^1_%LDQ =XFSLIST_^1FINDLU STQ- I_,FIND GIVEN LU ON FILE SPACE LIST_^1_%LDA- (ZERO),Q_^1_%ENQ 0_,SEPARATE LU ENTRY LENGTH AND LU_^1_%LLS 9_/Q = LUELTH_^1_%ALS 7_/A = LU_^1_%EOR* RLU_^1_%SAZ FINDNS_'LOGICAL UNIT FOUND, FIND GIVEN NUMSEC_^1_%ADQ- I_^1_%JMP* FINDLU_'LOGICAL UNIT NOT FOUND, CONTINUE SEARCH_^1*_]_^1*_]_^1FINDNS STA* WBI_*CLEAR WBI_=66*1446_^1_%S€€TQ* LUELTH_'FIND GIVEN NUMBER OF SECTORS_*66*1446_^1_%ENQ 2_^1*_]_^1CHKNNS INQ 2_,CHECK WITH NEXT NUMBER OF SECTORS IN LU ENTRY_^1_%TRQ A_^1_%SUB* LUELTH_^1_%SAP RTNFSP_'NO MORE, RETURN SPACE TO FILE SPACE POOL OF LU_^1*_]_^1_%LDA- 1,B_*CHECK NUMBER OF SECTORS_^1_%EOR* NUMSEC_^1_%SAZ RTNSST_'NUMSEC FOUND, RETURN SPACE TO SECTOR THREAD_^1_%JMP* CHKNNS_'NUMBER OF SECTORS NOT FOU€€ND, CONTINUE SEARCH_^1*_]_^1*_]_^1RTNSST ADQ- I_,RETURN SPACE TO ITS SECTOR THREAD_^1_%LDA* STRSEC_^1_%RTJ* WRITMM_-*STORE 1ST POINTER ONTO SECTOR STRSEC*_^1*_]_^1_%LDA* STRSEC_'SET FIRST SECTOR POINTER TO SECTOR STRSEC_^1_%STA* (WBL)_^1_%JMP* RSEXIT_'EXIT_^1_%EJT_]_^1*_*SEARCH FOR PLACE TO INSERT RETURNED SPACE_^1*_]_^1RTNFSP LDQ- I_,SAVE ADDRESS OF FILE SPACE POOL_^1_%INQ 1_^1_%€€STQ* FSPADR_^1_%LDA- (ZERO),Q_$SEARCH FILE SPACE POOL_^1_%STA* NSAGNS_^1_%CLR A_,INITIALIZE NSAGNS AND LSALNS_^1*_]_^1SEARCH STA* LSALNS_'SEARCH NEXT BLOCK OF SECTORS_^1_%LDA* NSAGNS_^1_%STA* CSACNS_'CHECK IF NO MORE BLOCKS LEFT_^1_%SAZ NOMORE_(NO MORE LEFT, THUS NO BLOCK .GE. NUMSEC_^1*_]_^1_%RTJ* HERE_)FIND ABSOLUTE ADDRESS OF NSACNS_^1HERE_!000 000_^1_%LDQ* HERE_^1_%INQ -HER€€E+NSACNS Q = ADDRESS OF NSACNS_^1*_8A = CURRENT SECTOR ADDRESS OF FILE SPACE BLOCK_^1_%RTJ* READMM_+*READ SECTOR CSACNS INTO NSACNS/NSAGNS/CNS_^1*_]_^1_%LDA* CNS_*CHECK IF LENGTH OF BLOCK (CNS) .GE. NUMSEC_^1_%SUB* NUMSEC_^1_%SAP CHKEBS_'YES, CHECK FOR AN EQUAL BLOCK OF SECTORS_^1*_]_^1_%LDA* CSACNS_(NO, CONTINUE SEARCH_^1_%JMP* SEARCH_^1*_]_^1NOMORE SET A_,NO BLOCK FOUND .GE. N€€UMSEC_^1_%EJT_]_^1*_*RETURN SPACE TO THE FILE SPACE POOL OF ITS LOGICAL UNIT_^1*_]_^1CHKEBS LDQ* CSACNS_'CHECK FOR AN EQUAL BLOCK OF SECTORS_^1_%STQ* NSACNS_^1_%SAZ THREAD_)A BLOCK EQUALS THE RETURNED SPACE,_^1*_?(CSACNS,NSAGNS,NUMSEC=CNS) INTO BUFFER._^1_%STQ* NSAGNS_)ALL BLOCKS LESS THAN THE RETURNED SPACE,_^1_%LDA* NUMSEC_.(0,CSACNS=0,NUMSEC) INTO BUFFER._^1_%STA* CNS_*OR_^1_%C€€LR A_.A BLOCK IS MORE THAN THE RETURNED SPACE,_^1_%STA* NSACNS_.(0,CSACNS,NUMSEC) INTO BUFFER._^1*_]_^1THREAD ENA 3_,THREAD LEFTOVER SECTORS ONTO FILE POOL 66*1446_^1_%STA* WNW_^1_%LDQ* RBL_*Q = ADDRESS OF START OF BUFFER (NSACNS)_^1_%LDA* STRSEC_'A = SECTOR STRSEC_^1_%RTJ* WRITMM_+*STORE BUFFER_#IN SECTOR STRSEC(0/1/2)*_^1*_]_^1_%ENA 1_,SETUP TO STORE ONE WORD ON WORD 1 OF SECT€€OR_^1_%STA* WNW_^1_%STA* WBI_^1_%LDQ* RBL_^1_%INQ STRSEC-NSACNS Q = ADDRESS OF STRSEC_^1_%LDA* LSALNS_'A = SECTOR LSALNS_^1_%SAN NOTBOT_'CHECK IF BEGINNING OF THREAD_^1*_]_^1_%LDA- (ZERO),Q_$YES, STORE IN LU ENTRY RATHER THAN MASS MEMORY_^1_%STA* (FSPADR)_^1_%JMP* RSEXIT_'EXIT_^1*_]_^1NOTBOT RTJ* WRITMM_'NO, *STORE STRSEC_#IN SECTOR LSALNS(1)_"*_^1*_]_^1*_]_^1RSEXIT CLR A_,SET F€€ILE SPACE LIST CHANGE FLAG_^1_%STA FSLEND_^1_%LDA- 2,I_*INCREMENT NUMBER OF AVAILABLE SECTORS_^1_%ADD* NUMSEC_^1_%STA- 2,I_^1_%LDA* ISAVE_(RESTORE I REGISTER_^1_%STA- I_^1_%JMP* (RTNSPC)_$RETURN_^1_%EJT_]_^1*_*FILE SPACE PARAMETERS_^1*_]_^1*_]_^1LSALNS NUM 0_$LAST SECTOR ADDRESS WITH A LESSER NUMBER OF SECTORS_^1*_]_^1CSACNS NUM 0_$CURRENT SECTOR ADDRESS WITH CURRENT NUMBER OF S€€ECTORS_^1*_]_^1*_]_^1*_*NEXT THREE WORDS MUST BE IN ORDER_^1NSACNS NUM 0_!1. NEXT SECTOR ADDRESS WITH CURRENT NUMBER OF SECTORS_^1*_]_^1NSAGNS NUM 0_!2. NEXT SECTOR ADDRESS WITH GREATER NUMBER OF SECTORS_^1*_]_^1CNS_"NUM 0_!3. CURRENT NUMBER OF SECTORS IN FILE SPACE BLOCK_^1*_]_^1*_]_^1*_]_^1STRSEC NUM 0_$STARTING SECTOR ADDRESS OF RETURNED SPACE_^1*_]_^1NUMSEC NUM 0_$NUMBER O€€F SECTORS_^1*_]_^1LUELTH NUM 0_$LOGICAL UNIT ENTRY LENGTH (BITS 7-15 OF FIRST WORD)_^1*_]_^1FSPADR NUM 0_$FILE SPACE POOL ADDRESS OF LU ENTRY_^1*_]_^1ISAVE NUM 0_$SAVE FOR I REGISTER_^1_%EJT_]_^1*_*READ/WRITE MASS MEMORY OF FILE SPACE_^1*_]_^1*_]_^1*_1READ MASS MEMORY_^1READMM 000 000_^1_%STQ* RBL_*Q = BEGINNING LOCATION FOR READ_^1_%STA* RBS_*A = BEGINNING SECTOR_!FOR READ_^1€€*_]_^1_%RTJ MMREAD_^1RBL_"NUM 0_,STARTING LOCATION_^1_%NUM 3_,NUMBER OF WORDS_^1RLU_"NUM 0_,LOGICAL UNIT_^1_%NUM 0_,INDICATE SECTOR ADDRESSING_^1RBS_"NUM 0_,STARTING SECTOR_^1*_]_^1_%SQP RMMEXT_'CHECK IF MASS MEMORY ERROR_^1_%RTJ* MMERR *****MM ERROR, PRINT MESSAGE_,**MSOS 4.1**_^1RMMEXT JMP* (READMM)_$EXIT_^1_%SPC 3_^1*_1WRITE MASS MEMORY_^1WRITMM 000 000_^1_%STQ* WBL_*Q€€ = BEGINNING LOCATION FOR WRITE_^1_%STA* WBS_*A = BEGINNING SECTOR_!FOR WRITE_^1*_]_^1_%RTJ MMWRIT_^1WBL_"NUM 0_,STARTING LOCATION_^1WNW_"NUM 1_,NUMBER OF WORDS_^1WLU_"NUM 0_,LOGICAL UNIT_^1WBI_"NUM 0_,BEGINNING SECTOR INDEX_^1WBS_"NUM 0_,STARTING SECTOR_^1*_]_^1WRTCMP SQP WMMEXT_'CHECK IF MASS MEMORY ERROR_^1_%RTJ* MMERR *****MM ERROR, PRINT MESSAGE_,**MSOS 4.1**_^1WMMEXT €€JMP* (WRITMM)_$EXIT_^1_%SPC 2_^1*_1MASS MEMORY ERROR MESSAGE_/**MSOS 4.1**_^1MMERR 000 000_L**MSOS 4.1**_^1_%LDA- PL_M**MSOS 4.1**_^1_%ALS 4_N**MSOS 4.1**_^1_%EOR- PL_+CONSTRUCT FWRITE REQUEST_)**MSOS 4.1**_^1_%EOR* REQCOD_I**MSOS 4.1**_^1_%STA* REQ_L**MSOS 4.1**_^1_%RTJ* ABS_L**MSOS 4.1**_^1ABS_"NOP 0_N**MSOS 4.1**_^1_%LDA* ABS_*CALCULATE THE ABSOLUTE_+**MSOS 4.1**_^1_%ADD* O€€FF1_)ADDRESSES FOR THE MONITOR CALL_"**MSOS 4.1**_^1_%STA* COM_L**MSOS 4.1**_^1_%ADD* OFF2_K**MSOS 4.1**_^1_%STA* MSG_L**MSOS 4.1**_^1_%LDA- I_N**MSOS 4.1**_^1_%STA* ISVERR_I**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1_%RTJ- (AMONI)_%PRINT ERROR MESSAGE_.**MSOS 4.1**_^1REQ_"ADC 0_N**MSOS 4.1**_^1COM_"ADC 0_N**MSOS 4.1**_^1_%ADC 0_N**MSOS 4.1**_^1_%ADC $18FC_(SYSTEM COMMENT DEVICE_,**MSOS €€4.1**_^1_%ADC LMSG_K**MSOS 4.1**_^1MSG_"ADC 0_N**MSOS 4.1**_^1_%JMP- (ADISP)_H**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1CP_#LDA* ISVERR_I**MSOS 4.1**_^1_%STA- I_N**MSOS 4.1**_^1_%JMP* (MMERR)_H**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1REQCOD ADC $4C00_(FORMATTED WRITE REQUEST_***MSOS 4.1**_^1OFF1_!ADC CP-ABS_I**MSOS 4.1**_^1OFF2_!ADC ERRMSG-CP_F**MSOS 4.1**_^1ISVERR NUM 0_N**MSOS 4.1**_^1*_Z**€vMSOS 4.1**_^1ERRMSG ALF $,F.M. ERROR 1$_@**MSOS 4.1**_^1_%EQU LMSG(*-ERRMSG)_A**MSOS 4.1**_^1_%SPC 2_^1_%END_]_^__vPSTOIDX CSY/ F16 P€1_%NAM STOIDX_'DECK-ID F16 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_)CALL STOIDX(FILNUM,KEYVAL,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1*_*EXTERNALS_^1_%EXT ABSPAR_'ABSOLUTIZES APL_^1_%EXT CKCFIS_'CHECKS CORE F€€OR FISB_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT CKUADR_'CHECK LEGALITY OF UNPROTECTED ADDRESS_^1_%EXT GETSPC_'GET ALLOCATABLE CORE SPACE_^1_%EXT MMREAD_'MASS MEMORY READ_^1_%EXT MMWRIT_'MASS MEMORY WRITE_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1*_]_^1_%EXT* GETKID_'GET KIS DIRECTORY_^1_%EXT* HASHCD_'GENERATE HASH (SCATTER) CODE_^1_%EXT* FILSPC_'MM SPACE ALLOC€€ATOR SUB_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_*EQUIVALENCES_^1*_1COMMUNICATION REGION_^1_%EQU ZERO(2)_%ZERO CONSTANT_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ZROMSK($13)_!ZERO MASK TABLE_^1_%EQU ONEBIT($23)_!ONE BIT TABLE_^1_%EQU ZROBIT($33)_!ZERO BIT TABLE_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU €€FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU XTRHDR(1)_#NUMBER OF WORDS IN EXTRA FIFO RECORD_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^€€1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SEC€€TOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECOR€€D BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE €€(BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1*_1KIS DIRECTORY HEADER_^1_%EQU KIDCLK(0)_#KIS DIRECTORY CLOCK_^1_%EQU NUMKIB(1)_#NUMBER OF KIS BLOCKS_^1_%EQU KIBFSA(2)_#FIRST SECTOR ADDRESS OF KIS BLOCKS_^1_%EQU KIBLSA(3)_#LAST SECTOR ADDRESS OF KIS BLOCKS_^1_%EJT_]_^1*_)CALL STOIDX(FILNUM,KEYVAL,RECPTR,€€RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_(LENGTH OF REQUEST PROCESSOR_^1_%SPC 2_^1STOIDX 000 000_*STORE INDEXED_^1_%STQ- I_^1*_]_^1_%ENQ 7_,GET ABSOLUTE ADDRESSES OF ALL PARAMETERS_^1SI010 INQ -1_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ SI020_^1_%JMP* SI010_^1*_]_^1SI020 LDQ* (FILNUM)_$GET FILE NUMBER_^1_%SQZ SI030_^€€1_%SQP SI100_^1SI030 LDA- ONEBIT+14_#FILE NO ERROR SET BIT 14_^1*_]_^1SI040 EOR- ONEBIT+15_#ERROR EXIT_^1_%STA* (REQIND)_^1_%JMP* (STOIDX)_^1_%SPC 2_^1*_]_^1SI100 RTJ CKCFIS_'CHECK IF FIS IN CORE_^1_%SAP SI110_^1*_]_^1_%LDQ* (FILNUM)_$NOT IN CORE CHECK MM_^1_%RTJ SRHFIS_^1_%SAN SI120_(FILE NOT DEFINED_^1*_]_^1SI110 STQ- I_,I = FIS CORE ADDRESS_^1_%LDA- FISFLG,Q_$CHECK REL€€EASE STATUS_^1_%SAM SI130_^1SI120 LDA- ONEBIT+0_$ERROR FILE NOT DEFINED_^1_%JMP* SI040_(SET BIT 0_^1_%EJT_]_^1*_*CHECK REQUEST FOR ERRORS_^1SI130 LDA- KIDSEC,Q_$CHECK IF FILE INDEXED_^1_%SAN SI140_^1_%LDA- ONEBIT+11_#FILE NOT DEFINED AS INDEXED_^1_%JMP* SI040_^1*_]_^1SI140 LDA- FISFLG,Q_$CHECK IF FILE PROTECTED_^1_%AND- ONEBIT+14_^1_%SAZ SI150_^1_%RTJ CKPROT_'CHECK IF REQUES€€T PROTECTED_^1_%SAN SI150_^1_%LDA- ONEBIT+13_#FILE PROTECTED AND UNPROTECTED STORE ATTEMPT_^1_%JMP* SI040_(REJECT CALL_^1*_]_^1SI150 CLR Q_,CHECK PARAMETERS ADDRESSES, IF UNPROTECTED_^1_%LDA* RECPTR_^1_%RTJ* (ACUADR)_$IF CALLER UNPROTECTED, CHECK RECORD PTR ADR_^1_%INA 1_^1_%RTJ* (ACUADR)_^1*_]_^1_%LDA* RECBUF_'SAVE RECORD BUFFER ADDRESS_^1_%STA RECBFR_^1_%RTJ* (ACUADR)_$CHECK€€ FIRST WORD ADDRESS OF RECORD BUFFER_^1*_]_^1_%LDA* (RECLTH)_$CHECK IF RECORD LENGTH POSITIVE AND NON-ZERO_^1_%STA RECLGH_^1_%SAZ SI160_^1_%SAM SI160_^1_%LDQ- FISIND,I_$CHECK IF INDEXED/LINKED_^1_%SQP SI170_^1_%INA -3_+YES, RECORD MUST BE .GE. 3_^1_%SAP SI170_^1SI160 JMP* SI030_(NO, ILLEGAL PARAMETER_^1*_]_^1SI170 LDA- FISFLG,I_$SAVE KIS LOGICAL UNIT_^1_%ARS 7_^1_%AND- ONE€€MSK+6_^1_%STA* KIBLU_^1*_]_^1_%LDA- FRBSIZ,I_$GET FILE RECORD BLOCK SIZE_^1_%AND- ONEMSK+8_^1_%STA FRBSZ_(SAVE FILE RECORD BLOCK SECTOR SIZE_^1_%MUI =XWRDSEC_^1_%STA* NWFRB_(SAVE NUMBER OF WORDS IN FRB_^1_%INA -FRBHDR_^1_%SUB* (RECLTH)_$CHECK IF MAXIMUN RECORD LENGTH EXCEEDED_^1_%SAM SI215_(YES, ERROR_<63*1349_^1_%EJT_]_^1*_*GET INDICATORS AND SPACE FOR KIS BLOCK_^1*_]_^1_%LDA-€€ FISIND,I_$SETUP INDEXED INDICATORS_^1_%ALS 1_^1_%STA* IDXOFG_'SET INDEXED/ORDERED FLAG IF INDEXED/ORDERED_^1_%ALS 3_^1_%AND- ONEBIT+1_$SET FIFO FLAG IF FIRST-IN, FIRST-OUT SELECTED_^1_%STA* FIFOFG_^1_%SAZ SI230_)NOT FIFO_^1*_]_^1_%LDA- FIFORL,I_$CHECK IF FIRST INTO FIFO FILE_^1_%SAN SI210_^1_%LDA* (RECLTH)_$YES, SET FIFO RECORD LENGTH_^1_%STA- FIFORL,I_^1*_]_^1SI210 STA RECL€€GH_'RESET LENGTH FOR STORE_063*1349_^1_%SUB* (RECLTH)_$CHECK IF RECORD LENGTH .LE. FIXED LEN. 63*1349_^1SI215 SAM SI220_(NO. NOTE ERROR_763*1349_^1_%JMP* SI230_O63*1349_^1SI220 LDA- ONEBIT+2_$RECORD LENGTH TOO LONG OR DIFFERENT(IF FIFO)_^1_%JMP* SI040_^1*_]_^1SI230 ENA WRDSEC_'GET NUMBER OF WORDS IN KIS BLOCK_^1_%MUI- KIBSIZ,I_^1_%STA* NWKIB_^1_%STA NWKB_^1*_]_^1_%INA 5_,(F€€OR ORDERED FIFO KIS BLOCK OVERFLOW)_^1_%RTJ GETSPC_'GET SPACE FOR KIS BLOCK_^1_%STQ* KIBLOC_^1_%EJT_]_^1*_*FIND HASH INDEX INTO KIS DIRECTORY TO GET KIS BLOCK SECTOR_^1*_]_^1_%ENA WRDSEC_'GET NUMBER OF WORD IN KIS DIRECTORY - HEADER_^1_%MUI- KIDSIZ,I_^1_%INA -KIDHDR_^1_%STA* NWKID_^1*_]_^1_%LDA* IDXOFG_'CHECK IF INDEXED-ORDERED_^1_%SAM SI240_^1*_]_^1_%LDA* KEYVAL_'NO, GET HASH €€CODE_^1_%RTJ HASHCD_)A = KEY VALUE ADDRESS_^1_%DVI* NWKID_^1_%JMP* SI270_(SAVE KIS DIRECTORY INDEX AND CONTINUE_^1_%SPC 2_^1SI240 LDA* (KEYVAL)_$INDEXED/ORDERED, CHECK KEY VALUE_^1_%SAP SI250_^1_%CLR A_,NEGATIVE, USE INDEX ZERO_^1*_]_^1SI250 SUB- NUMEKV,I_^1_%SAM SI260_^1_%ENA -1_+TOO LARGE, USE LARGEST INDEX_^1*_]_^1SI260 ADD- NUMEKV,I_^1_%MUI* NWKID_(INDEX = (KEYVAL*NWKI€€D)/NUMEKV_^1_%DVI- NUMEKV,I_^1_%TRA Q_^1*_]_^1SI270 INQ KIDHDR_'SAVE INDEX INTO KIS DIRECTORY_^1_%STQ* KIDIDX_^1_%JMP* SRHKIS_'SEARCH FOR KIS_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_^1*_]_^1FILNUM ADC 0_,FILE NUMBER ADDRESS_^1KEYVAL ADC 0_,KEY VALUE ADDRESS_^1RECPTR ADC 0_,RECORD POINTER ADDRESS_^1RECBUF ADC 0_,RECORD BUFFER ADRESS_^1RECLTH ADC 0_,RECORD LENGTH ADDRESS_^1RE€€QBUF ADC 0_,REQUEST BUFFER ADDRESS_^1REQIND ADC 0_,REQUEST INDICATOR ADDRESS_^1*_]_^1NWFRB NUM 0_,NUMBER OF WORDS IN FILE RECORD BLOCK_^1IDXOFG NUM 0_,INDEXED/ORDERED FLAG_^1FIFOFG NUM 0_,INDEXED/LINKED FIRST-IN, FIRST-OUT FLAG_^1NWKID NUM 0_,NUMBER OF WORDS IN KIS DIRECTORY_^1KIDIDX NUM 0_,KIS DIRECTORY INDEX_^1*_]_^1ACUADR ADC CKUADR_'CHECK IF AN UNPROTECTED ADDRESS_^1_€€%EJT_]_^1*_*READ IN KIS BLOCK_^1*_]_^1REDKIB 000 000_^1_%STA* KIBSEC_'SAVE KIS BLOCK SECTOR_^1*_]_^1_%RTJ MMREAD_'READ IN NEXT KIS BLOCK_^1KIBLOC NUM 0_,KIS BLOCK ADDRESS_^1NWKIB NUM 0_,NUMBER OF WORDS IN KIS BLOCK_^1KIBLU NUM 0_,KIS LOGICAL UNIT_^1_%NUM 0_^1KIBSEC NUM 0_,KIS BLOCK SECTOR_^1*_]_^1_%SQM MMERR_"*****MASS MEMORY ERROR_^1_%JMP* (REDKIB)_$EXIT_^1_%SPC 5_^1MME€€RR LDA- ONEBIT+7 *****MASS MEMORY ERROR_^1*_]_^1RQERR EOR- ONEBIT+15_#REQUEST ERROR, SET BIT 15_^1*_]_^1RQEXIT STA* (REQIND)_$REQUEST EXIT_^1_%RTJ- (AMONI)_%SET REQUEST INDICATOR AND RELEASE KIS BLOCK_^1_%NUM $1800_^1RELKIB NUM 0_^1*_]_^1_%JMP (STOIDX)_$EXIT_^1_%EJT_]_^1*_*SEARCH FOR KIS IN KIS BLOCK(S)_^1*_]_^1SRHKIS ENA 2_,SEARCH FOR KIS ON KIS BLOCK(S)_^1_%ADD* FIFOFG_^1_%€€STA* PNTLTH_'SAVE POINTER LENGTH (2 OR 4)_^1_%STA PNTLGH_^1_%ADD- KEYLTH,I_^1_%STA* KISLTH_'SAVE KIS LENGTH_^1_%STA KISLGH_^1*_]_^1_%LDA* KIBLOC_'SAVE KIS BLOCK FOR RELEASING SPACE_^1_%STA* RELKIB_^1_%INA KIBHDR_^1_%ADD* PNTLTH_'SAVE FIRST KIS BLOCK KEY POINTER_^1_%STA* KIB1KP_^1*_]_^1_%RTJ GETKID_'GET THE KIS DIRECTORY_^1_%STQ* KIDLOC_^1_%LDA* (KIDIDX),Q_"GET AND SAVE KIS BLOC€€K POINTER_^1_%STA* KIBSEC_^1_%SAN GNXKIB_'GET KIS BLOCK (IF IT EXISTS)_^1*_]_^1_%ENQ 0_)...CASE A (NO KIS BLOCK EXISTS FOR THIS KEY)_^1_%JMP* SAVCAS_^1_%EJT_]_^1*_*SEARCH NEXT KIS BLOCK_^1*_]_^1GNXKIB RTJ* REDKIB_'GET NEXT KIS BLOCK_^1*_]_^1_%LDA* KIB1KP_'RESET KEY POINTER_^1_%STA* KEYPTR_^1_%LDQ* KIBLOC_'CHECK NEXT KIS BLOCK_^1_%LDA- 2,Q_^1_%STA* NUMKIS_'SAVE NUMBER OF KIS,S IN €€BLOCK_^1*_]_^1CNXKIS INA -1_+CHECK NEXT KIS, DECREMENT KIS COUNT_^1_%STA* KISCNT_^1_%SAM CHKOVF_'NO MORE KIS,S, CHECK IF OVERFLOW BLOCKS_^1*_]_^1_%LDQ- KEYLTH,I_^1CNXWRD INQ -1_+CHECK NEXT WORD OF KEY_^1_%LDA* (KEYVAL),Q_^1_%SUB* (KEYPTR),Q_^1_%SAM CHKORD_'KEY VALUE .LT. KIS KEY VALUE, CHECK ORDERED_^1_%SAN GNXKIS_^1_%SQZ SRHEXT_'KEY FOUND, EXIT Q = 0_^1_%JMP* CNXWRD_^1*_]_^1€€CHKORD LDQ* IDXOFG_'CHECK IF INDEXED/ORDERED_^1_%SQM SRHEXT_)YES, KEY NOT FOUND AND NOT MAX, EXIT Q .LT.0_^1*_]_^1GNXKIS LDA* KISCNT_'CHECK IF ALL KIS,S IN THIS BLOCK CHECKED_^1_%LDQ* KEYPTR_^1_%ADQ* KISLTH_'INCREMENT POINTER_^1_%STQ* KEYPTR_^1_%JMP* CNXKIS_'CONTINUE SEARCH_^1*_]_^1CHKOVF LDQ* KIBLOC_'YES, CHECK IF AN OVERFLOW KIS BLOCK EXISTS_^1_%LDA- 1,Q_^1_%SAZ SRHEXT_)NO, KI€€S NOT FOUND, EXIT Q .GT. 0_^1_%JMP* GNXKIB_)YES, GET NEXT KIS OVERFLOW BLOCK_^1_%EJT_]_^1*_*SET KIS BLOCK CASE INDEX_^1*_]_^1SRHEXT LDA* KEYPTR_'SEARCH EXIT_^1_%SUB* PNTLTH_^1_%STA* KISPTR_'SET KIS POINTER FROM ITS KEY POINTER_^1_%STA KISPNT_^1_%SQN CKFULL_'KIS NOT FOUND, CHECK IF KIS BLOCK FULL_^1*_]_^1_%ENQ 1_)...CASE B (KIS EXISTS), CHECK IF INDEXED/LINKED_^1_%LDA- FISIND,I_^€€1_%SAM SAVCAS_)YES, ITS OK_^1*_]_^1_%LDA- ONEBIT+4_'NO, ERROR (RECORD ALREADY EXISTS)_^1_%JMP* RQERR_(REQUEST ERROR_^1*_]_^1CKFULL STQ* KIBCIX_'SAVE KIS BLOCK SEARCH INDICATOR_^1_%LDA* NUMKIS_^1_%INA 1_^1_%MUI* KISLTH_'CHECK IF KIS BLOCK FULL_^1_%INA KIBHDR_^1_%TCA A_^1_%ADD* NWKIB_^1*_]_^1_%ENQ 3_^1_%SAP SAVCAS_#...CASE D (NO KIS, KIS WILL FIT IN THIS KIS BLK)_^1*_]_^1_%ENQ €€ 4_^1_%LDA* KIBCIX_#...CASE E (NO KIS, OVERFLOW, KIS TO NEW NEXT KIB)_^1_%SAP SAVCAS_^1*_]_^1_%ENQ 5_)...CASE F (NO KIS, OVERFLOW, KIS IN THIS KIS BLK)_^1*_]_^1SAVCAS LDA- ONEBIT,Q_$SAVE KIB CASE INDEX_^1_%STA* KIBCIX_'(KIB CASES A,B,C,D,E,F = 1,2,4,8,$10,$20)_^1_%STA KIBCAS_'(NOTE---NO CASE C IS NEEDED ANYMORE)_^1_%JMP* SI400_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_^1*_]_^1PNTL€€TH NUM 0_,KIS POINTER LENGTH_^1KISLTH NUM 0_,KIS LENGTH_^1KIB1KP NUM 0_,POINTER TO FIRST KIS KEY IN KIS BLOCK_^1KIDLOC NUM 0_,KIS DIRECTORY LOCATION_^1KEYPTR NUM 0_,KIS KEY POINTER_^1NUMKIS NUM 0_,NUMBER OF KIS IN KIS BLOCK_^1KISCNT NUM 0_,KIS COUNT OF KIS,S SEARCHED IN A KIS BLOCK_^1KISPTR NUM 0_,KIS POINTER_^1KIBCIX NUM 0_,KIS BLOCK CASE INDEX_^1*_]_^1RECLGH ADC 0_,RECO€€RD LENGTH_^1FRBCIX NUM 0_,FILE RECORD BLOCK CASE INDEX_^1RECBFR ADC 0_,RECORD BUFFER ADDRESS_^1_%EJT_]_^1*_*CHECK FOR WHICH FRB CASE AND SET FRB CASE INDEX_^1*_]_^1SI400 LDA- FRBFSA,I_$CHECK IF NO FILE RECORD BLOCKS_^1_%SAZ SI405_*YES_^1*_]_^1_%LDA* NWFRB_(COMPUTE A=NWFRB-FRBNIX-RECLGH_^1_%SUB- FRBNIX,I_^1SI405 SUB* RECLGH_^1*_]_^1_%LDQ* FIFOFG_'CHECK IF INDEXED/LINKED FIFO_^1€€_%SQN SI420_*YES_^1*_]_^1_%LDQ- ONEBIT+1_$CASE 1--NOT INDEXED/LINKED FIFO,_^1_%SAP SI410_.--ROOM IN LAST FRB._^1*_]_^1_%LDQ- ONEBIT+2_$CASE 2--NOT INDEXED/LINKED FIFO,_^1SI410 JMP* SI490_.--NOT ENOUGH ROOM IN LAST FRB._^1*_]_^1SI420 LDQ* KIBCIX_'CHECK IF KIS EXISTS (CASE B)_^1_%INQ -2_^1_%SQZ SI430_*YES_^1_%JMP* SI470_*NO_^1*_]_^1SI430 LDQ* KISPTR_'CHECK IF ROOM IN FRB (A.GT€€.0)_^1_%SAM SI450_*NO_^1*_]_^1_%LDA- 2,Q_^1_%SUB- FRBLSA,I_$CHECK IF LAST RECORD OF THIS KEY IS_^1_%SAN SI440_(LAST RECORD OF THE FILE_^1_%LDA- 3,Q_^1_%ADD* RECLGH_^1_%SUB- FRBNIX,I_^1*_]_^1_%LDQ- ONEBIT+3_$CASE 3--IND/LINK FIFO, KIS, ROOM IN LAST FRB,_^1_%SAZ SI445_.--LAST RECORD OF THIS KEY IS LAST RCRD._^1*_]_^1SI440 LDQ- ONEBIT+4_$CASE 4--IND/LINK FIFO, KIS, ROOM IN LAST FR€€B,_^1SI445 JMP* SI490_.--LAST RECORD OF THIS KEY NOT LAST ONE._^1_%EJT_]_^1*_*CONTINUE CHECKING FOR WHICH FRB CASE AND SET FRB CASE INDEX_^1*_]_^1SI450 LDA- 2,Q_*CHECK IF LAST RECORD OF THIS KEY IS_^1_%SUB- FRBLSA,I_$FIRST RECORD OF LAST FRB._^1_%SAN SI460_^1_%LDA- 3,Q_^1_%INA -FRBHDR_^1*_]_^1_%LDQ- ONEBIT+5_$CASE 5--IND/LINK FIFO,KIS,NO ROOM IN LAST FRB,_^1_%SAZ SI465_.--LAST€€ KEY REC=FIRST RECORD OF LAST FRB._^1*_]_^1SI460 LDQ- ONEBIT+6_$CASE 6--IND/LINK FIFO,KIS,NO ROOM IN LAST FRB,_^1SI465 JMP* SI490_.--LAST KEY REC NOT 1ST REC OF LAST FRB._^1*_]_^1SI470 SAM SI480_(CHECK IF ROOM IN FRB (A.GT.0)_^1_%SUB* RECLGH_)YES, CHECK IF ROOM FOR 2 RECORDS IN LAST FRB_^1*_]_^1_%LDQ- ONEBIT+7_$CASE 7--IND/LINK FIFO,NO KIS,ROOM IN LAST FRB,_^1_%SAP SI475_.--RO€€OM FOR BOTH RECORDS IN LAST FRB._^1*_]_^1_%LDQ- ONEBIT+8_$CASE 8--IND/LINK FIFO,NO KIS,ROOM IN LAST FRB,_^1SI475 JMP* SI490_.--NOT ROOM FOR BOTH RECORDS IN LAST FRB._^1*_]_^1SI480 ADD- FRBNIX,I_$CHECK IF ROOM FOR BOTH RECORDS IN ONE FRB_^1_%SUB* RECLGH_^1_%INA FRBHDR_^1*_]_^1_%LDQ- ONEBIT+9_$CASE 9--IND/LINK FIFO,NO KIS,NO ROOM LAST FRB,_^1_%SAP SI490_.--ROOM FOR BOTH RECORDS I€€N ONE FRB._^1*_]_^1_%LDQ- ONEBIT+10_#CASE10--IND/LINK FIFO,NO KIS,NO ROOM 74*1791_^1*_8LAST FRB,_;74*1791_^1*_>--NOT ENUF ROOM FOR BOTH RECORDS IN FRB._^1*_]_^1SI490 STQ* FRBCIX_'SAVE FILE RECORD BLOCK CASE INDEX_^1_%STQ FRBCAS_^1_%EJT_]_^1*_*SETUP MASS MEMORY PARAMETERS FOR WRITING RECORD_^1*_]_^1_%LDQ* RECBFR_'GET RECORD BUFFER ADDRESS_^1_%STQ CA4_^1_%INQ -FRBHDR+1_^1_%STQ* C€€A3_*STORE RECORD BUFFER ADDRESS - 2_^1_%INQ -1_^1_%STQ* CA2_*STORE RECORD BUFFER ADDRESS - 3_^1_%ADQ* RECLGH_^1_%STQ* CA1_*STORE EXTRA RECORD - 3_^1_%INQ FRBHDR_^1_%STQ XTRREC_'SAVE ADDRESS OF EXTRA RECORD_^1*_]_^1_%ENQ FRBHDR+XTRHDR SET 4 WORDS FOR FRB HEADER AND EXTRA RECORD_^1_%STQ* NW1_^1*_]_^1_%LDQ* RECLGH_'STORE RECORD LENGTH INTO FIRST WORD OF BUFFER_^1_%STQ* (RECBFR)_^1€€_%STQ RECLNG_'SAVE RECORD LENGTH_^1*_]_^1_%LDA* FRBCIX_^1_%AND =N$288_^1_%SAZ SI530_^1_%INQ XTRHDR_^1SI530 STQ* NW4_*SAVE RECORD LENGTH (+1 FOR CASES 3, 7, 9)_^1_%INQ FRBHDR_^1_%STQ* NW2_*SAVE RECORD LENGTH+3 (+1 FOR CASES 3, 7, 9)_^1*_]_^1_%LDA- FISFLG,I_$GET LOGICAL UNIT FOR FRB_^1_%AND- ONEMSK+6_^1_%STA* LU1_^1_%STA* LU2_^1_%STA* LU3_^1_%STA* LU4_^1_%RTJ SETUP_(SETUP FOR €€WRITING RECORD TO MASS MEMORY_^1_%EJT_]_^1*_*WRITE EXTRA FIFO RECORD (AND ITS FRB HEADER IF IT STARTS A_^1*_*NEW FRB) WHEN IT DOESNT IMMEDIATELY FOLLOW ACTUAL RECORD_^1*_]_^1_%CLR A_,CLEAR INDEXES FOR WRITES 1 AND 2_^1_%STA* FRBID1_^1_%STA* FRBID2_^1*_]_^1_%LDA* FRBCIX_'CHECK IF WRITING EXTRA RECORD FOR_^1_%AND =N$570_'CASES 4, 5, 6, 8, 10._^1_%ALS 11_^1_%SAN SI540_^1_%CLR Q_^€€1_%JMP* SI560_(NO, CONTINUE PROCESSING_^1*_]_^1SI540 LDQ NXTLSA_'CHECK IF CASE 4_^1_%SAP SI550_(NO, WRITE EXTRA RECORD PLUS NEXT LAST FRB HDR_^1*_]_^1_%ENA XTRHDR_'CASE 4, SET 1 WORD OF EXTRA RECORD_^1_%STA* NW1_^1_%LDA- ONEBIT+15_#SET FIRST WORD OF EXTRA RECORD TO $8000_^1_%STA* (CA1)_^1_%LDQ- FRBLSA,I_$GET SECTOR/INDEX TO WRITE EXTRA RECORD ONLY_^1_%LDA- FRBNIX,I_^1_%STA* FRB€€ID1_^1SI550 STQ* FRBSC1_^1*_]_^1_%RTJ (AMMWRT)_$WRITE EXTRA RECORD FOR_.74*1792_^1*_8CASES 4, 5, 6, 8, 10_074*1792_^1CA1_"NUM 0_.(WRITE ALSO NEXT LAST FRB HDR, EXCEPT CASE4)_^1NW1_"NUM 0_^1LU1_"NUM 0_^1FRBID1 NUM 0_^1FRBSC1 NUM 0_^1*_]_^1SI560 LDA TEMP1_O63*1387_^1_%STA* (CA1)_(RESTORE XTRREC-3, XTRREC-2, AND XTRREC-1_^1_%RAO* CA1_^1_%LDA TEMP2_M74*1792_^1_%STA* (CA1)_^1_€€%RAO* CA1_^1_%LDA* TEMP3_^1_%STA* (CA1)_^1*_]_^1_%SQP SI600_^1_%JMP* SI700_"*****MASS MEMORY ERROR_^1_%EJT_]_^1*_*WRITE RECORD (AND EXTRA FIFO RECORD IF IT IMMEDIATELY FOLLOW_^1*_*RECORD) AND ITS NEW FRB HEADER WHEN THEY ARE ADJACENT_^1*_]_^1SI600 LDA* FRBCAS_'CHECK FOR CASES 2, 9, 10_^1_%AND =N$604_^1_%SAN* SI610_^1_%JMP* SI640_(NO, GO TO NEXT DECISION CHECK._^1*_]_^1SI610 LLS€€ 21_+CHECK FOR CASE 10 (RECORD NEEDS ALL NEXT FRB)_^1_%LDA* NXTLSA_)CASE 2, WRITE RECORD AND NEXT LAST FRB HDR._^1_%SQP SI620_*CASE 9, WRITE BOTH RECORDS AND NEXT LAST HDR_^1_%SUB* FRBSZ_*CASE 10, WRITE REC AND NEXT PENULTIMATE HDR._^1SI620 STA* FRBSC2_^1*_]_^1_%RTJ* (AMMWRT)_$WRITE RECORD AND ITS FRB HEADR FOR 2, 9, 10_^1CA2_"NUM 0_^1NW2_"NUM 0_^1LU2_"NUM 0_^1FRBID2 NUM 0_^€€1FRBSC2 NUM 0_^1*_]_^1_%SQP SI630_^1_%JMP* SI700_"*****MASS MEMORY ERROR_^1*_]_^1SI630 LDQ* CA3_*SET RECBFR-2, RECBFR-1 TO NXTLSA, NRLFRB FOR_^1_%LDA* FRBSC2_'CASES 2/9 (TO NXTLSA-FRBSZ,NRLFRB FOR CASE 10)_^1_%STA- (ZERO),Q_$(NEXT PENULTIMATE FRB HDR FOR CASES 2/9)_^1_%LDA- NRLFRB,I_$(NEXT SECOND- FROM- LAST FRB HDR FOR CASE 10)_^1_%STA- 1,Q_^1_%EJT_]_^1*_*WRITE FRB HEADER IN LA€€ST FRB WHEN A NEW LAST FRB HAS BEEN_^1*_*ALLOCATED, AND ALSO THE RECORD IF IT IS FIRST IN LAST FRB_^1*_]_^1SI640 LDA* FRBCAS_'CHECK FOR CASES 2, 5, 6, 8, 9, 10_^1_%AND =N$764_^1_%SAZ SI647_(NO, GO TO NEXT DECISION POINT_^1*_]_^1_%ENQ 2_,SET NW3 = 2, UNLESS CASE 5_^1_%ALS 10_^1_%SAP SI645_^1_%ADQ* NW4_*CASE 5, SET NW3 = RECLTH + 2_^1SI645 STQ* NW3_^1*_]_^1_%LDA- FRBLSA,I_$CHE€€CK IF NO FILE RECORD BLOCK ASSIGNED YET_^1SI647 SAZ SI650_*NONE, DONT WRITE FRB HEADER_^1_%ENQ 1_^1_%STA* FRBSC3_^1_%STQ* FRBID3_^1*_]_^1_%RTJ* (AMMWRT)_$WRITE FRB HEADER TO LAST FRB._^1CA3_"NUM 0_^1NW3_"NUM 0_^1LU3_"NUM 0_^1FRBID3 NUM 0_^1FRBSC3 NUM 0_^1*_]_^1_%SQP SI650_^1_%JMP* SI700_"*****MASS MEMORY ERROR_^1_%EJT_]_^1*_*WRITE RECORD (AND EXTRA FIFO RECORD IF IT IMMEDI€€ATELY FOLLOW_^1*_*RECORD) WHEN IT ISNT AT START OF LAST OR NEW LAST FRB_^1*_]_^1SI650 LDA =N$182_'CHECK FOR CASES 1, 7, 8_^1_%AND* FRBCAS_^1_%SAN SI660_^1_%LDQ KISPTR_^1_%LDA- 3,Q_*NO, SECOND KIS POINTER POINTS TO RECORD_^1_%LDQ- 2,Q_^1_%JMP* SI670_^1*_]_^1SI660 LDQ- FRBLSA,I_$YES, RECORD IS NEXT RECORD IN NEXT LAST FRB_^1_%LDA- FRBNIX,I_^1_%STQ* FRBSC2_'SAVE RECORD POINTER IN€€ SECTOR/INDEX FORM_^1_%STA* FRBID2_^1*_]_^1SI670 STQ* FRBSC4_'SAVE SECTOR/INDEX IN WRITE CALL_^1_%STA* FRBID4_^1*_]_^1_%CLR Q_^1_%LDA* FRBCAS_'CHECK FOR CASES 1, 3, 4, 6, 7, 8._^1_%AND =N$1DA_^1_%SAZ SI700_(NO, RESTORE USER,S CODE_^1*_]_^1_%RTJ* (AMMWRT)_$WRITE OUT RECORD FOR CASES 1, 3, 4, 6, 7, 8._^1CA4_"NUM 0_,(PLUS EXTRA RECORD FOR CASES 3 AND 7)_^1NW4_"NUM 0_^1LU4_"NUM €€0_^1FRBID4 NUM 0_^1FRBSC4 NUM 0_^1_%EJT_]_^1*_*RESTORE USER CODE AND SET FRB VARIABLES_^1*_]_^1SI700 LDA* SAVE1_(RESTORE RECBFR-3, RECBFR-2, AND RECBFR-1_^1_%STA* (CA2)_^1_%RAO* CA2_^1_%LDA* SAVE2_^1_%STA* (CA2)_^1_%RAO* CA2_^1_%LDA* SAVE3_^1_%STA* (CA2)_^1*_]_^1_%LDA* HOLD_)RESTORE XTRREC = RECBFR + RECLGH_^1_%STA* (XTRREC)_^1_%SQP SI710_^1*_]_^1_%JMP MMERR_"*****MASS MEMORY €€ERROR_^1*_]_^1SI710 LDA* NXTNIX_'INCREMENT LAST FRB INDEX PAST RECORD_^1_%ADD* RECLNG_^1_%STA- FRBNIX,I_^1*_]_^1_%LDA* NXTNR_(INCREMENT NUMBER OF RECORDS IN LAST FRB_^1_%INA 1_^1_%STA- NRLFRB,I_^1*_]_^1_%LDA* NXTLSA_'STORE NEXT LAST FRB (IF CHANGED)_^1_%STA- FRBLSA,I_^1*_]_^1_%LDQ- FRBFSA,I_$CHECK IF FIRST FRB_^1_%SQN SI720_^1_%STA- FRBFSA,I_'YES, SET FIRST FRB_^1*_]_^1SI720 LD€€A =N$0764_%CHECK IF NEW FRB ADDED_063*1387_^1_%AND* FRBCAS_N63*1387_^1_%SAZ SI730_(SKIP IF NO_<63*1387_^1_%RAO- NUMFRB,I_L63*1387_^1_%AND- ONEBIT+10_#CHECK IF CASE 10_^1_%SAZ SI730_^1_%RAO- NUMFRB,I_$YES, INCREMENT NUMBER OF FRB,S AGAIN_^1_%LDA- FRBFSA,I_$RESET FIRST FRB TO CORRECT ADDRESS_!74*1792_^1_%SUB* FRBSZ_M74*1792_^1_%STA- FRBFSA,I_J74*1792_^1*_]_^1SI730 ENA -1_^1_%AND€€- IDXCHG,I_^1_%INA 1_,SET FIS CHANGE BIT_^1_%STA- IDXCHG,I_^1*_]_^1_%LDQ* NXTLSA_'CONTINE WITH SECTOR/INDEX_^1_%LDA* NXTNIX_^1_%JMP* SI800_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_^1*_]_^1AMMWRT ADC MMWRIT_'MASS MEMORY WRITE ADDRESS_^1*_]_^1NXTLSA NUM 0_,NEXT LAST FRB SECTOR ADDRESS_^1NXTNR NUM 0_,NEXT NUMBER OF RECORDS IN NEXT LAST FRB_^1NXTNIX NUM 0_,NEXT INDEX INTO NEXT LAS€€T FRB_^1FRBSZ NUM 0_,FILE RECORD BLOCK SIZE, IN SECTORS_^1*_]_^1SAVE1 NUM 0_,SAVE RECORD BUFFER - 3_^1SAVE2 NUM 0_,SAVE RECORD BUFFER - 2_^1SAVE3 NUM 0_,SAVE RECORD BUFFER - 1_^1TEMP1 NUM 0_,SAVE EXTRA RECORD BUFFER - 3_^1TEMP2 NUM 0_,SAVE EXTRA RECORD BUFFER - 2_^1TEMP3 NUM 0_,SAVE EXTRA RECORD BUFFER - 1_^1HOLD_!NUM 0_,SAVE EXTRA RECORD BUFFER + 0_^1*_]_^1FRBCAS NU€€M 0_,FILE RECORD BLOCK CASE INDEX_^1XTRREC NUM 0_,EXTRA RECORD ADDRESS (USED FOR FIFO FILES)_^1RECLNG NUM 0_,RECORD LENGTH_^1_%EJT_]_^1*_*SETUP FOR WRITING RECORD TO MASS MEMORY_^1*_]_^1SETUP 000 000_^1_%LDA- FRBLSA,I_$SAVE LAST SECTOR ADDRESS, NUMBER OF_^1_%STA* NXTLSA_)RECORDS, AND INDEX INTO LAST FRB._^1_%LDA- NRLFRB,I_^1_%STA* NXTNR_^1_%LDQ- FRBNIX,I_^1*_]_^1_%LDA* FRBCAS_€€'CHECK FOR CASES 2,5,6,8,9,10 WHICH NEED SPACE_^1_%AND =N$764_^1_%SAN SU010_^1_%JMP* SU050_)NO, GO TO NEXT DECISION CHECK_^1*_]_^1SU010 LDQ* FRBSZ_)YES, CHECK FOR CASE 10_^1_%AND- ONEBIT+10_^1_%SAZ SU020_^1_%QLS 1_-CASE 10, GET TWO FILE RECORD BLOCKS_^1*_]_^1SU020 ADQ- ONEBIT+15_#GET FILE SPACE FOR NEW FILE RECORD BLOCK_^1_%LDA* LU4_^1_%RTJ FSPACE_^1*_]_^1_%LDA* FRBCAS_'CHEC€€K FOR CASE 10_^1_%AND- ONEBIT+10_^1_%SAZ SU040_^1_%ADQ* FRBSZ_)CASE 10, ADJUST TO SECOND FRB_^1SU040 STQ* NXTLSA_'SET SECTOR ADDRESS OF NEXT LAST FRB_^1*_]_^1_%CLR A_,CLEAR NUMBER OF RECORDS IN NEXT LAST FRB_^1_%STA* NXTNR_^1_%ENQ FRBHDR_'SET INDEX INTO NEXT LAST FRB_^1*_]_^1SU050 LDA* FRBCAS_'CHECK FOR CASES 7 AND 9_^1_%AND =N$280_^1_%SAZ SU060_^1_%RAO* NXTNR_)YES, INCREMEN€€T NUMBER OF RECORDS AND INDEX_^1_%ADQ* RECLNG_*DUE TO A RECORD BEING STORED_^1*_]_^1SU060 STQ* NXTNIX_'SET NEXT INDEX INTO NEXT LAST FRB_^1_%EJT_]_^1*_)SETUP INDEXED/LINKED POINTER AND RETURN_^1*_]_^1_%LDA FIFOFG_'CHECK IF INDEXED/LINKED FIFO_^1_%SAN SU066_^1*_]_^1_%LDA- FISIND,I_$N/,CHECK IF INDEXED/LINKED LIFO_^1_%SAM SU062_^1_%JMP* SU070_(NO,GO TO NEXT DECISION CHECK_^1*_]_^€€1SU062 CLR Q_,INDEXED/LINKED LIFO,CHECK IF KIS EXISTS_^1_%ENA 2_^1_%AND KIBCAS_^1_%SAN SU064_(YES_^1*_]_^1_%JMP* SU068_(NO KIS EXISTS,CLEAR INDEXED/LINKED POINTER_^1*_]_^1SU064 LDQ KISPNT_'SET INDEXED/LINKED POINTER TO KIS POINTER_^1_%LDA- 1,Q_^1_%LDQ- (ZERO),Q_^1_%JMP* SU068_^1*_]_^1SU066 LDQ* NXTLSA_'INDEED/LINKED FIFO_^1_%LDA* NXTNIX_'SET INDEX/LINKED PTR TO NEXT (EXTRA)€€ RECORD_^1*_]_^1SU068 STQ* TEMP1_^1_%LDQ RECBFR_^1_%STA- 2,Q_*STORE INDEXED/LINKED POINTER INTO RECORD_^1_%LDA* TEMP1_^1_%STA- 1,Q_^1_%EJT_]_^1*_*SAVE AND SETUP BUFFER VARIABLES_^1*_81 CARD DELETED_663*1349_^1SU070 LDQ CA2_*SAVE RECBFR-3,RECBFR-2,AND RECBFR-1_^1_%LDA- (ZERO),Q_^1_%STA* SAVE1_^1_%LDA- 1,Q_^1_%STA* SAVE2_^1_%LDA- 2,Q_^1_%STA* SAVE3_^1_%LDA- FRBLSA,I_$SET RECBFR-3€€ TO FRBLSA_^1_%STA- (ZERO),Q_^1_%CLR A_,CLEAR RECBFR-2, RECBFR-1 FOR CASES 2 AND 9_^1_%STA- 2,Q_,(NEXT LAST FRB HEADER)_^1_%LDA* FRBCAS_^1_%AND =N$560_^1_%SAZ SU090_^1_%ARS 8_,SET RECBFR-2, RECBFR-1, TO NXTLSA, NRLFRB FOR_^1_%SAZ SU075_(CASES 5 AND 6 (NEXT PENULTIMATE FRB HEADER)_^1_%ARS 2_,SET RECBFR-2, RECBFR-1 TO NXTLSA,1 FOR CASE 10_^1_%SAN SU080_*(NEXT PENULTIMATE FRB H€€EADER)_^1_%ENA 1_,SET RECBFR-2, RECBFR-1 TO NXTLSA, NRLFRB+1 FOR_^1SU075 ADD- NRLFRB,I_$CASE 8 (NEXT PENULTIMATE FRB HEADER)_^1SU080 STA- 2,Q_^1_%LDA* NXTLSA_^1SU090 STA- 1,Q_^1*_]_^1_%LDQ CA1_*SAVE XTRREC-3, XTRREC-2, AND XTRREC-1_^1_%LDA- (ZERO),Q_^1_%STA* TEMP1_^1_%LDA- 1,Q_^1_%STA* TEMP2_^1_%LDA- 2,Q_^1_%STA* TEMP3_^1_%CLR A_,CLEAR FORWARD FRB POINTER AND NO. OF RECORDS_^€€1_%STA- 1,Q_^1_%STA- 2,Q_^1_%LDA- FRBLSA,I_$SETUP BACKWARD FRB POINTER TO FRBLSA_^1_%STA- (ZERO),Q_^1_%LDA* FRBCAS_'CHECK IF CASE 10_^1_%ALS 5_^1_%SAP SU095_^1_%LDA* NXTLSA_'CASE 10, SET TO NXTLSA - FRBSZ_^1_%SUB* FRBSZ_^1_%STA- (ZERO),Q_^1*_]_^1SU095 LDA* (XTRREC)_$SAVE XTRREC = RECBFR + RECLGH_^1_%STA* HOLD_^1_%LDA- ONEBIT+15_#SET XTRREC TO $8000_^1_%STA* (XTRREC)_^1_%JMP* (SE€€TUP)_%RETURN_^1_%EJT_]_^1*_*WRITE KIS BLOCK (SETUP KIS AND RECORD POINTERS)_^1*_]_^1SI800 STQ* KISSAV_'SAVE LIFO KIS POINTER TO RECORD_^1_%STA* KISSAV+1_^1_%STQ* KISSAV+2_$SAVE FIFO KIS POINTER TO EXTRA RECORD_^1_%STA* KISSAV+3_^1*_]_^1_%LDQ FIFOFG_'CHECK IF INDEXED/LINKED FIFO_^1_%SQZ SI804_*NO_^1*_]_^1_%LDA FRBID2_'INDEXED/LINKED FIFO_^1_%SAN SI802_(CHECK IF BEGINNING OF A F€€ILE RECORD BLOCK_^1_%ENA FRBHDR_)YES_^1*_]_^1SI802 LDQ FRBSC2_'SAVE FIFO KIS POINTER TO RECORD (IF 1ST TIME)P_^1_%STQ* KISSAV_^1_%STA* KISSAV+1_^1*_]_^1_%LDQ* KIBCAS_^1_%INQ -2_+CHECK IF KIS EXISTS (NOT THE 1ST TIME)_^1_%SQZ SI806_*YES_^1*_]_^1SI804 LDQ* KISSAV_'KIS DOES NOT EXIST (FIRST TIME)_^1_%JMP* SI808_^1*_]_^1SI806 LDQ* KISPNT_'KIS EXISTS_^1_%LDA- (ZERO),Q_^1_%STA* KI€€SSAV_'SAVE FIFO KIS POINTER TO FIRST RECORD_^1_%LDA- 1,Q_^1_%STA* KISSAV+1_^1_%LDA- 3,Q_^1_%LDQ- 2,Q_^1*_]_^1SI808 STQ (RECPTR)_^1_%LDQ RECPTR_'STORE RECORD POINTER INTO USER,S PARAMETER_^1_%STA- 1,Q_^1_%EJT_]_^1*_*ALLOCATE FILE SPACE FOR KIS BLOCK, IF NEEDED_^1*_]_^1_%LDA KIBLOC_'SAVE KIS BLOCK LOCATION_^1_%STA* KBLOC_^1_%STA* KBLOC2_^1*_]_^1_%LDA KIBSEC_'SAVE KIS BLOCK SECTO€€R_^1_%STA* KBSEC_^1*_]_^1_%LDA KIBLU_(SAVE KIS LOGICAL UNIT_^1_%STA* KBLU_^1_%STA* KBLU2_^1*_]_^1_%LDA KEYVAL_'SAVE KEY VALUE ADDRESS_^1_%STA* KEYSAV_^1*_]_^1SI810 ENA $11_*CHECK IF CASE A OR E_^1_%AND* KIBCAS_^1_%LDQ* NWKB_^1_%SAZ SI830_(NO, GO TO NEXT DECISION CHECK_^1*_]_^1_%LDA* KBLU_)CASE A OR E/ GET FILE SPACE_^1_%RTJ* FSPACE_^1*_]_^1_%LDA* KBSEC_(SAVE LAST KIS BLOCK SEC€€TOR_^1_%STA* SECSAV_^1_%STQ* KBSEC_(SAVE NEXT LAST KIS BLOCK SECTOR_^1*_]_^1_%LDQ KIDLOC_'SETUP KIS BLOCK HEADER_^1_%LDA- KIBLSA,Q_^1_%LDQ* KBLOC_(STORE BACKWARD KIB POINTER_^1_%STA- (ZERO),Q_^1_%CLR A_,CLEAR KIB OVERFLOW POINTER AND NO. OF KIS,S_^1_%STA- 1,Q_^1_%STA- 2,Q_^1_%INQ KIBHDR_'SET KIS POINTER TO FIRST KIS_^1_%STQ* KISPNT_^1_%EJT_]_^1*_*PUT KIS POINTER(S) AND KEY VALUE€€ INTO KIS BLOCK_^1*_]_^1SI830 LDA* KISPNT_'COMPUTE KIS KEY POINTER_^1_%ADD* PNTLGH_^1_%STA* KEYPNT_^1_%ADD- KEYLTH,I_$COMPUTE NEXT KIS POINTER_^1_%STA* KISNPR_^1*_]_^1_%LDQ* KBLOC_(COMPUTE KIS OVERFLOW POINTER_^1_%LDA- 2,Q_^1_%MUI* KISLGH_^1_%INA KIBHDR_^1_%ADD* KBLOC_^1_%STA* KISOPR_^1_%SUB* KISPNT_^1_%TRA Q_^1*_]_^1_%ENA $28_*CHECK IF CASE D OR F_^1_%AND* KIBCAS_^1_%SAZ SI85€€0_(NO, GO TO NEXT DECISION CHECK_^1*_]_^1SI840 INQ -1_+CASE D OR F_^1_%SQM SI850_^1_%LDA* (KISPNT),Q_"MOVE KIS,S DOWN WITHIN KIS BLOCK (IF NEEDED)_^1_%STA* (KISNPR),Q_^1_%JMP* SI840_^1*_]_^1SI850 ENA $19_*CHECK IF CASE A, D, OR E_^1_%AND* KIBCAS_^1_%SAZ SI860_(NO, CONTINUE_^1_%LDQ* KBLOC_^1_%RAO- 2,Q_*CASE A, D, OR E/ INCREMENT NUMBER OF KIS,S_^1*_]_^1SI860 LDQ* PNTLGH_'STOR€€E KIS POINTERS INTO KIS_^1SI870 INQ -1_^1_%LDA* KISSAV,Q_^1_%STA* (KISPNT),Q_^1_%SQZ SI880_^1_%JMP* SI870_^1*_]_^1SI880 LDQ- KEYLTH,I_$STORE KIS KEY VALUE INTO KIS_^1SI890 INQ -1_^1_%LDA* (KEYSAV),Q_^1_%STA* (KEYPNT),Q_^1_%SQZ SI900_^1_%JMP* SI890_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_^1*_]_^1KIBCAS NUM 0_,KIS BLOCK CASE INDEX_^1KISPNT NUM 0_,KIS POINTER_^1KEYSAV NUM 0_€€,KEY ADDRESS SAVE_^1PNTLGH NUM 0_,KIS POINTER LENGTH_^1KEYPNT NUM 0_,KIS KEY POINTER_^1KISNPR NUM 0_,NEXT KIS POINTER IN KIS BLOCK_^1KISLGH NUM 0_,KIS LENGTH_^1KISOPR NUM 0_,POINTER TO OVERFLOWED KIS_^1KISSAV NUM 0,0,0,0,0_#OVERFLOWED KIS SAVE (MAX/2 PTRS AND KEY VALUE)_^1_%EJT_]_^1*_*WRITE OUT KIS BLOCK AND THREAD ON LAST KIS BLOCK (IF NEEDED)_^1*_]_^1SI900 RTJ* (MMWRTA)_$W€€RITE OUT KIS BLOCK_^1KBLOC NUM 0_,KIS BLOCK LOCATION_^1NWKB_!NUM 0_,NUMBER OF WORDS IN KIS BLOCK_^1KBLU_!NUM 0_,KIS LOGICAL UNIT_^1_%NUM 0_^1KBSEC NUM 0_,KIS BLOCK SECTOR ADDRESS_^1*_]_^1_%SQM SI910_"*****MASS MEMORY ERROR_^1*_]_^1_%ENA $10_*CHECK IF CASE E_^1_%AND* KIBCAS_^1_%SAZ SI920_(NO, GO TO NEXT DECISION CHECK_^1_%SPC 3_^1_%LDA* KBSEC_(CASE E_^1_%STA* (KBLOC)_^1_%€€RTJ* (MMWRTA)_$WRITE THREAD WORD INTO LAST KIS BLOCK_^1KBLOC2 NUM 0_,KIS BLOCK LOCATION_^1_%NUM 1_,THREAD WORD TO NEXT KIS BLOCK_^1KBLU2 NUM 0_,KIS LOGICAL UNIT_^1_%NUM 1_,WORD NUMBER ONE ONE LAST KIB_^1SECSAV NUM 0_,LAST KIS BLOCK SECTOR ADDRESS_^1*_]_^1_%SQP SI920_^1*_]_^1SI910 JMP MMERR_"*****MASS MEMORY ERROR_^1_%EJT_]_^1*_*MOVE ALL KIS,S WITH LARGER KEY VALUES DOWN IN€€ KIB(IF CASE F)_^1*_]_^1SI920 ENA $20_*CHECK IF CASE F_^1_%AND* KIBCAS_^1_%SAN SI930_^1_%JMP* SI980_(NO, GO TO NEXT DECISION CHECK_^1*_]_^1SI930 LDQ* KISLGH_'CASE F_^1SI940 INQ -1_^1_%LDA* (KISOPR),Q_"STORE OVERFLOWED KIS INTO SAVE AREA_^1_%STA* KISSAV,Q_^1_%SQZ SI950_^1_%JMP* SI940_^1*_]_^1SI950 RTJ* HERE_)SETUP KEY VALUE,S ADDRESS_^1HERE_!000 000_^1_%LDA* HERE_^1_%INA K€€ISSAV-HERE_^1_%ADD* PNTLGH_^1_%STA* KEYSAV_^1_%LDA* KBLOC_(SET KEY POINTER TO FIRST KIS_^1_%INA KIBHDR_^1_%STA* KISPNT_^1*_]_^1_%LDQ* KBLOC_(CHECK IF MORE KIS OVERFLOW BLOCKS_^1_%LDA- 1,Q_^1_%ENQ $10_^1_%SAZ SI960_(NO, PROCESS AS CASE E_^1*_]_^1_%STA* KBSEC_(YES, SAVE ITS SECTOR ADDRESS_^1_%RTJ REDKIB_'READ IN NEXT KIS OVERFLOW BLOCK_^1_%LDQ* KBLOC_(CHECK IF THIS OVERFLOW BLOCK€€ IS FULL_^1_%LDA- 2,Q_^1_%INA 1_^1_%MUI* KISLGH_^1_%INA KIBHDR_^1_%TCA A_^1_%ADD* NWKB_^1_%SAM SI970_(YES, CONTINUE AS CASE F_^1_%ENQ 8_,NO, PROCESS AS CASE D_^1SI960 STQ* KIBCAS_^1*_]_^1SI970 JMP* SI810_(CONTINUE AS CASE D, E, OR F_^1_%EJT_]_^1*_*GET FILE SPACE_^1*_]_^1FSPACE 000 000_^1_%RTJ FILSPC_^1_%SAM FSERR_^1_%SAN MMER_^1_%JMP* (FSPACE)_$EXIT WITH FILE SPACE (STAR€€TING SECTOR IN Q)_^1*_]_^1FSERR LDA- ONEBIT+8 *****NO MORE FILE SPACE LEFT_^1_%JMP RQERR_^1*_]_^1MMER_!JMP* SI910_"*****MASS MEMORY ERROR_^1_%SPC 5_^1MMWRTA ADC MMWRIT_'MASS MEMORY WRITE ADDRESS_^1_%EJT_]_^1*_*SET KIS DIRECTORY AND RETURN TO CALLER_^1*_]_^1SI980 ENA $11_*CHECK IF CASE A OR E_^1_%AND* KIBCAS_^1_%SAZ SI985_(NO, RETURN_^1*_]_^1_%LDA- IDXCHG,I_$SET KIS DIIRECTOR€€Y CHANGED BIT_^1_%AND- ZROBIT+1_^1_%EOR- ONEBIT+1_^1_%STA- IDXCHG,I_^1*_]_^1_%LDQ KIDLOC_'INCREMENT NUMBER OF KIS BLOCKS_^1_%RAO- NUMKIB,Q_^1_%LDA* KBSEC_(STORE NEW LAST KIS BLOCK_^1_%STA- KIBLSA,Q_^1*_]_^1_%ENA 1_,CHECK IF CASE A_^1_%AND* KIBCAS_^1SI985 SAZ SI990_(NO, RETURN_^1*_]_^1_%LDA* KBSEC_(STORE KIB SECTOR ADDRESS IN KIS DIRECTORY_^1_%STA (KIDIDX),Q_^1_%LDA- KIBFSA,Q_$€€CHECK IF FIRST KIS BLOCK_^1_%SAN SI990_^1_%LDA* KBSEC_(YES, SAVE FIRST KIS BLOCK SECTOR ADDRESS_^1_%STA- KIBFSA,Q_^1*_]_^1SI990 LDA- FISCOM,I_$CHECK IF FILE LOCKED_^1_%SAZ SI995_^1_%LDA- ONEBIT+1_$FILE LOCKED_^1*_]_^1SI995 LDQ* KIBCAS_'CHECK IF MORE RECORDS WITH THE SAME KEY VALUE_^1_%INQ -2_^1_%SQN SI997_^1_%EOR- ONEBIT+4_'YES, SET BIT 4_^1*_]_^1SI997 JMP RQEXIT_'RETURN TO€ CALLER_^1_%SPC 2_^1_%END_]_^__ PRTVDIR CSY/ F21 P€1_%NAM RTVDIR_'DECK-ID F21 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_$CALL RTVDIR(FILNUM,FILCOM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1*_]_^1_%EQU ZERO(2)_%LOCATION OF ZERO_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU MAS€€K($23)_#ONE BIT TABLE_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)€€_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CL€€OCK_^1_%EQU SANFIX(FH+00) SECTOR ADDRESS TO NEXT FIS(SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) €€NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(F€€H+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1_%EJT_]_^1*_*EXTERNALS_^1*_]_^1_%EXT ABSPAR_'GETS ABSOLUTE ADDRESSES_^1_%EXT CKCFIS_'CHECKS CORE FIS_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT CKUADR_'CHECK LEGALITY OF UNPROTECTED ADDRESS_^1_%EXT MMREAD_'MM READ_^1_%EXT MMWR€€IT_'MM WRITE_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1_%EXT FILBLK_'FILE BLOCK FOR RETRIEVING RECORD,S FRB_^1_%EXT NWFBLK_'NUMBER OF WORDS IN FILE BLOCK_^1*_]_^1_%EXT* RTNSPC_'RETURN SPACE_^1_%EXT* STRSEC_'STARTING SECTOR OF SPACE TO BE RETURNED_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_$CALL RTVDIR(FILNUM,FILCOM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1€€_%ADC* RPEND_(LENGTH OF REQUEST PROCESSOR_^1_%SPC 2_^1RTVDIR 000 000_*RETRIEVE DIRECT_^1_%STQ- I_^1*_]_^1_%ENQ 7_,PICK UP ABSOLUTE ADDRESSES OF PARAMETERS_^1DR010 INQ -1_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ DR020_^1_%JMP* DR010_^1*_]_^1DR020 LDQ* (FILNUM)_$CHECK VALID FILE NO._^1_%SQZ DR030_^1_%SQP DR100_^1DR030 LDA- MASK+14€€_^1*_]_^1DR040 EOR- MASK+15_%ERROR EXIT_^1*_]_^1DR080 STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (RTVDIR)_^1_%EJT_]_^1*_]_^1DR100 RTJ CKCFIS_'CHECK FIS IN CORE_^1_%SAP DR110_^1*_]_^1_%LDQ* (FILNUM)_^1_%RTJ SRHFIS_'NOT IN CORE CHECK MM_^1_%SAN DR120_(FILE NOT DEFINED_^1*_]_^1DR110 STQ- I_,I = ADDRESS OF FIS IN CORE_^1_%LDA- FISFLG,Q_$CHECK FILE RELEASED_^1_%SAM DR130_^1DR120 LDA€€- MASK+0_'RELEASED OR NOT DEFINED_^1_%JMP* DR040_^1*_]_^1DR130 LDA* (FILCOM)_$IS REMOVE REQUESTED_^1_%SAM DR140_^1_%JMP* DR200_^1*_]_^1DR140 LDQ- FISCOM,Q_$REMOVE REQUESTED,IS FILE LOCKED_^1_%SQZ DR160_^1_%AND- ONEMSK+14_#FILE LOCKED, CHECK CALLER,S FILE COMBINATION_^1_%SAN DR160_(IT EXISTS, THERFORE FILCOM = FISCOM_^1_%LDA- MASK+1_'FILE LOCKED,USER TRYING TO REMOVE WO FILE CO€€M_^1_%JMP* DR040_^1*_]_^1DR160 LDA- KIDSEC,I_$IS FILE INDEXED_^1_%SAZ DR170_^1_%LDA- MASK+11_%CANT REMOVE FROM INDEXED FILE_^1_%JMP* DR040_^1*_]_^1DR170 LDA- FISFLG,I_$IS FILE DEFINED PROTECTED_^1_%AND- MASK+14_^1_%SAZ DR200_^1_%RTJ* (ACPROT)_$CHECK IF REQUEST PROTECTED_^1_%SAN DR200_^1_%LDA- MASK+13_%UNPROTECTED USER CANT REMOVE FROM PROT FILE_^1_%JMP* DR040_^1_%EJT_]_^1*_]_^€€1DR200 LDA* (RECLTH)_$CHECK LENGTH_^1_%SAZ DR210_^1_%SAP DR220_^1DR210 JMP* DR030_(ERROR_^1*_]_^1DR220 STA* RECLGH_'STORE RECORD LENGTH_^1_%LDA* RECBUF_'STORE RECORD BUFFER ADDRESS_^1_%STA* RECBFR_^1_%CLR Q_,CHECK LEGALITY OF UNPROTECTED (IF IT IS) ADR_^1_%RTJ* (ACUADR)_$OK, IF IT RETURNS_^1*_]_^1_%ADD* (RECLTH)_$CHECK END OF RECORD BUFFER_^1_%INA -1_^1_%RTJ* (ACUADR)_$OK, I€€F IT RETURNS_^1*_]_^1_%LDA* (RECPTR)_^1_%STA* FRBSC1_'SECTOR ADDRESS OF RECORD ON MASS MEMORY_^1_%STA* FRBSC2_^1_%LDQ* RECPTR_^1_%LDA- 1,Q_^1_%STA* FRBID1_'INDEX ADDRESS OF RECORD ON MASS MEMORY_^1_%STA* FRBID2_^1*_]_^1_%LDA- FISFLG,I_^1_%AND- ONEMSK+6_^1_%STA* FRBLU_^1_%STA* FRBLU1_^1_%STA* FRBLU2_^1*_] 63*1352_^1_%LDA- FRBSIZ,I_$GET NUMBER OF WORDS IN FILE RECORD BLK.63*1352_^1€€_%AND- ONEMSK+8_L63*1352_^1_%MUI* WPS_Q63*1352_^1_%TRA Q_,CHECK IF FRB SIZE .GT. FILE BLOCK SIZE 63*1352_^1_%SUB* ANWBLK_N63*1352_^1_%SAM T408_)NO, USE FILE RECORD BLOCK SIZE_(63*1352_^1_%LDQ* ANWBLK_'YES, USE FILE BLOCK SIZE_.63*1352_^1T408_!STQ* NWFB_P63*1352_^1_%STQ* NWFB1_O63*1352_^1_%EJT_V63*1352_^1*_*RETRIEVE THE RECORD_A63*1352_^1_%LDA* ANWBLK_'CHECK IF RECORD WILL FIT IN €€FILE BLOCK 63*1352_^1_%SUB* FRBID1_^1_%SUB* RECLGH_^1*_]_^1_%LDQ* (FILCOM)_$CHECK IF RECORD IS TO BE REMOVED_^1_%SQM DR310_*YES, READ IN FILE RECORD BLOCK_^1_%SAM DR315_(NO REMOVE AND WONT FIT IN FILE BLOCK_^1*_]_^1DR310 STA* IFBFLG_'READ IN FILE RECORD BLOCK INTO FILE BLOCK_^1_%LDA* FRBSC1_^1_%LDQ* AMMRED_^1_%RTJ* ACCFRB_^1_%LDQ* AFLBLK_^1_%ADQ* FRBID1_^1_%LDA* IFBFLG_'CHECK IF€€ RECORD IN FILE RECORD BLOCK_^1_%SAP DR318_+YES_^1_%ADD* RECLGH_^1_%INA -1_+SET IN-FILE-BLOCK FLAG IF FIRST WORD IS IN_^1_%SAM DR330_^1_%STA* IFBFLG_^1_%INA 1_^1_%SUB- (ZERO),Q_$CHECK IF ACTUAL RECORD IN FILE RECORD BLOCK_^1DR315 SAM DR330_+NO, READ IN RECORD BY ITSELF_^1*_]_^1DR318 STQ* IFBFLG_'RECORD IN FILE RECORD BLOCK_^1_%LDQ* RECLGH_^1DR320 INQ -1_+TRANSFER RECORD TO€€ USER,S RECORD BUFFER_^1_%LDA* (IFBFLG),Q_^1_%STA* (RECBFR),Q_^1_%SQZ DR340_^1_%JMP* DR320_^1*_]_^1DR330 RTJ* (AMMRED)_$READ THE RECORD IN BY ITSELF_^1RECBFR NUM 0_^1RECLGH NUM 0_^1FRBLU1 NUM 0_^1FRBID1 NUM 0_^1FRBSC1 NUM 0_^1DR340 SQP CHKRMV_^1*_]_^1MMERR LDA- MASK+7_!*****MASS MEMORY ERROR_^1_%JMP* DR040_^1_%EJT_]_^1*_]_^1FILNUM NUM 0_^1FILCOM NUM 0_^1RECPTR NUM 0_^1€€RECBUF NUM 0_^1RECLTH NUM 0_^1REQBUF NUM 0_^1REQIND NUM 0_^1TEMP_!NUM 0_^1FISADD NUM 0_^1AMMWRT ADC MMWRIT_^1ACPROT ADC CKPROT_^1ACUADR ADC CKUADR_^1*_]_^1IFBFLG NUM 0_,IN-FILE-BLOCK FLAG (POSITIVE IF IT IS)_^1_%EJT_]_^1*_*REMOVE THE RETRIEVED RECORD_^1*_81 CARD DELETED_663*1352_^1CHKRMV LDA* (RECBUF)_$CHECK IF RECORD HAS BEEN REMOVED_^1_%SAP CHKREM_^1_%LDA- MASK+5_'YES,€€SET BIT 5 AND EXIT_^1_%JMP* DR040_^1*_]_^1CHKREM LDA* (FILCOM)_$CHECK IF RECORD IS TO BE REMOVED_^1_%SAM RMVREC_^1_%JMP* DR500_(NO, EXIT_^1*_]_^1RMVREC LDQ* AFLBLK_'REMOVE THE RECORD_^1_%LDA- 2,Q_*CHECK IF RECORD IS IN LAST FRB_^1_%SAN DR400_*NO_^1_%ENA -1_+RECORD IN LAST FRB_^1_%AND- IDXCHG,I_^1_%INA 1_,SET FIS CHANGED BIT_^1_%STA- IDXCHG,I_^1_%LDA- NRLFRB,I_$DECREMENT NUMBER €€OF RECORDS IN LAST FRB_^1_%INA -1_^1_%STA- NRLFRB,I_$IS THERE MORE THAN ONE RECORD IN THE LAST FRB_^1_%SAN DR410_*YES, THEN JUST REMOVE THE RECORD_^1_%ENA FRBHDR_'NO MORE RECORDS IN LAST FRB,_^1_%STA- FRBNIX,I_'RESET FRB INDEX TO BEGINNING OF FRB_^1_%JMP* DR500_((DONT RETURN LAST FRB)_^1*_]_^1DR400 INA -1_+DECREMENT NUMBER OF RECORDS IN FRB_^1_%STA- 2,Q_^1_%SAN DR410_^1_%JMP*€€ RTNFRB_'NO MORE RECORDS IN FRB, RETURN FRB_^1*_]_^1DR410 LDA* (RECBFR)_$SET REMOVE BIT IN RECORD_^1_%EOR- MASK+15_^1_%LDQ* IFBFLG_'CHECK IF RECORD IN FILE BLOCK_^1_%SQM DR420_(NO, REMOVE RECORD BY ITSELF_^1_%LDQ* FRBID2_^1_%STA* (AFLBLK),Q_"RECORD IS IN FILE BLOCK, REMOVE IT WHEN FRB IS_^1_%JMP* DR430_(WRITTEN BACK TO DECREMENT NUMBER OF RECORDS_^1*_]_^1DR420 STA* (AMMRED)_$REM€€OVE RECORD BY ITSELF_^1_%RTJ* (AMMWRT)_^1AMMRED ADC MMREAD_^1_%NUM 1_^1FRBLU2 NUM 0_^1FRBID2 NUM 0_^1FRBSC2 NUM 0_^1_%SQP DR430_^1_%JMP* MMERR_"*****MASS MEMORY ERROR_^1*_]_^1DR430 LDA* FRBSC2_'WRITE FRB TO DECREMENT NUMBER OF RECORDS_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1_%JMP* DR500_(SET UP REQUEST INDICATOR AND EXIT_^1_%EJT_]_^1*_*ACCESS THE RECORD,S FILE RECORD BLOCK_^1*_]_^€€1ACCFRB 000 000_^1_%STA* FRBSEC_'A = FILE RECORD BLOCK SECTOR_^1_%STQ* RORW+1_'Q = READ OR WRITE ADDRESS_^1*_]_^1RORW_!RTJ+ 0000_)READ IN FRB_^1AFLBLK ADC FILBLK_'ADDRESS OF FILE BLOCK_^1NWFB_!ADC 0_,NUMBER OF WORDS IN FILE BLOCK_)63*1352_^1FRBLU NUM 0_,LOGICAL UNIT OF FRB_^1FRBIDX NUM 0_^1FRBSEC NUM 0_,STARTING SECTOR OF FRB_^1*_]_^1_%CLR A_,RESET FRB INDEX TO ZERO_^1_%STA€€* FRBIDX_^1*_82 CARDS DELETED_563*1352_^1*_]_^1_%SQM MMER_#*****MASS MEMORY ERROR_^1_%JMP* (ACCFRB)_$RETURN_^1*_]_^1MMER_!JMP* MMERR_^1*_] 63*1352_^1ANWBLK ADC NWFBLK_N63*1352_^1WPS_"ADC WRDSEC_N63*1352_^1NWFB1 NUM 0_,NUMBER OF WORDS IN FILE BLOCK_)63*1352_^1_%EJT_]_^1*_*RETURN THE RECORD,S FILE RECORD BLOCK_^1*_]_^1RTNFRB ENA -1_,SET FIS CHANGED BIT_^1_%AND- IDXCHG,I_^1_%INA€€ 1_^1_%STA- IDXCHG,I_^1_%LDQ* AFLBLK_'CHECK IF THE FIRST FRB IS BEING RETURNED_^1_%ENA 1_S63*1352_^1_%STA* NWFB_)(SETUP TO WRITE ONE WORD THREADS)_$63*1352_^1_%LDA* FRBSC2_^1_%EOR- FRBFSA,I_^1_%SAN RFRB10_^1*_]_^1_%LDA- 1,Q_*SET NEW FIRST FRB TO NEXT FRB_^1_%STA- FRBFSA,I_^1_%JMP* RFRB20_'WRITE BACKWARD FRB THREAD ON NEW FIRST FRB_^1*_]_^1RFRB10 LDA- (ZERO),Q_$WRITE FORWARD FRB €€THREAD ON LAST FRB_^1_%LDQ- 1,Q_^1_%STQ* (AFLBLK)_^1_%RAO* FRBIDX_^1*_82 CARDS DELETED_563*1352_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1*_]_^1_%LDA* (AFLBLK)_$WRITE BACKWARD FRB THREAD ON NEXT FRB_^1_%LDQ* FRBSEC_^1_%STQ* (AFLBLK)_^1RFRB20 LDQ* AMMWRT_N63*1352_^1_%RTJ* ACCFRB_N63*1352_^1*_] 63*1352_^1*_*RESET NUMBER OF WORDS TO ACCESS IN FILE BLOCK_'63*1352_^1_%LDA* NWFB1_O63*1352_^1_%S€€TA* NWFB_P63*1352_^1_%LDA* FRBSC2_'SET UP STARTING SECTOR OF RECORD,S FRB_^1_%STA STRSEC_^1_%LDQ* FRBLU_(Q = LOGICAL UNIT OF FRB_^1_%LDA- FRBSIZ,I_^1_%AND- ONEMSK+8_$A = NUMBER OF SECTORS IN FRB_^1_%RTJ RTNSPC_'RETURN THE RECORD,S FILE RECORD BLOCK_^1*_]_^1_%LDA- NUMFRB,I_$DECREMENT NUMBER OF FILE RECORD BLOCKS_^1_%INA -1_^1_%STA- NUMFRB,I_^1_%EJT_]_^1*_*SET INDICATOR AND EXIT_^€€1*_]_^1DR500 RTJ* (ACPROT)_$CHECK IF REQUEST PROTECTED_^1_%SAZ DR510_^1_%LDA* (FILCOM)_$IS REQUEST TO LOCK_^1_%AND- ONEMSK+14_^1_%SAZ DR510_^1_%STA- FISCOM,I_$YES, LOCK THE FILE_^1*_]_^1DR510 LDA* (RECBFR)_$CHECK IF SHORT READ_^1_%AND- ONEMSK+14_^1_%TCA Q_^1_%CLR A_^1_%ADQ RECLGH_^1_%SQP DR520_^1_%EOR- MASK+2_'YES, SET BIT 2_^1*_]_^1DR520 LDQ- FISCOM,I_$IS FILE LOCKED_^1_%€dSQZ DR530_^1_%EOR- MASK+1_'YES, SET BIT 1_^1*_]_^1DR530 JMP DR080_(EXIT_^1_%SPC 2_^1_%END_]_^__dPRTVIDX CSY/ F22 P€1_%NAM RTVIDX_'DECK-ID F22 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1* CALL RTVIDX(FILNUM,KEYVAL,FILCOM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1*_*EXTERNALS_^1_%EXT ABSPAR_'ABSOLUTIZES APL_^1_%EXT CKCFIS_'CHECKS€€ CORE FOR FISB_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT CKUADR_'CHECK LEGALITY OF UNPROTECTED ADDRESS_^1_%EXT GETSPC_'GET ALLOCATABLE CORE SPACE_^1_%EXT MMREAD_'MASS MEMORY READ_^1_%EXT MMWRIT_'MASS MEMORY WRITE_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1_%EXT FILBLK_'FILE BLOCK FOR RETRIEVING RECORD,S FRB_^1_%EXT NWFBLK_'NUMBER OF WORDS IN FILE BLOCK_^1*_]_^1€€_%EXT* RTNSPC_'RETURN SPACE_^1_%EXT* STRSEC_'STARTING SECTOR OF SPACE TO BE RETURNED_^1_%EXT* GETKID_'GET KIS DIRECTORY_^1_%EXT* HASHCD_'GENERATE HASH (SCATTER) CODE_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_*EQUIVALENCES_^1*_1COMMUNICATION REGION_^1_%EQU ZERO(2)_%ZERO CONSTANT_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ZROMSK($13)_!ZERO MASK TABLE_^1_%EQU ONEBIT($23)_€€!ONE BIT TABLE_^1_%EQU ZROBIT($33)_!ZERO BIT TABLE_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%E€€QU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#F€€ILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBL€€SA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIF€€O_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1*_1REQUEST BUFFER INDEXES_^1_%EQU NXTPT1(8)_#NEXT LINKED RECORD POINTER 1_^1_%EQU NXTPT2(9)_#NEXT LINKED RECORD POINTER 2_^1_%EQU EOLPT1(10)_"END OF LINK POINTE€€R 1_^1_%EQU EOLPT2(11)_"END OF LINK POINTER 2_^1_%EJT_]_^1* CALL RTVIDX(FILNUM,KEYVAL,FILCOM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_(LENGTH OF REQUEST PROCESSOR_^1_%SPC 2_^1RTVIDX 000 000_^1_%STQ- I_^1*_]_^1_%ENQ 8_^1T010_!INQ -1_+LOOP TO PICK UP ADDRESS OF CALL PARAMETERS_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%€€SQZ T020_^1_%JMP* T010_^1*_]_^1T020_!LDQ* (FILNUM)_$CHECK FOR VALID FILE NO._^1_%SQZ T030_^1_%SQP T100_^1T030_!LDA- ONEBIT+14_^1*_]_^1T040_!EOR- ONEBIT+15_#ERROR EXIT_^1*_]_^1T050_!STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (RTVIDX)_^1_%SPC 2_^1*_]_^1T100_!RTJ CKCFIS_'SEE IF FIS IN CORE_^1_%SAP T110_^1*_]_^1_%LDQ* (FILNUM)_$NOT IN CORE CHECK MM_^1_%RTJ SRHFIS_^1_%SAN T120_^1*_]_^1€€T110_!STQ- I_,SAVE CORE FIS ADDRESS_^1_%LDA- FISFLG,Q_^1_%SAM T130_^1T120_!LDA- ONEBIT_'RELEASED OR NOT DEFINED_^1_%JMP* T040_^1_%EJT_]_^1*_*CHECK REQUEST FOR ERRORS_^1*_]_^1T130_!LDA- KIDSEC,Q_$CHECK IF FILE IS INDEXED_^1_%SAN T140_^1_%LDA- ONEBIT+11_#ERROR, NOT AN INDEXED FILE_^1_%JMP* T040_^1*_]_^1T140_!LDA* (FILCOM)_$CHECK IF REMOVING RECORD_^1_%SAP T160_+NO_^1_%LDQ- FISCOM,€€Q_$CHECK IF FILE LOCKED_^1_%SQZ T150_^1_%AND- ONEMSK+14_#IF LOCKING AND FILE LOCKED, FILCOM = FISCOM_^1_%SAN T150_^1_%LDA- ONEBIT+1_$ERROR TRYING TO REMOVE FROM LOCKED FILE W/0 CM_^1_%JMP* T040_^1*_]_^1T150_!LDA- FISFLG,I_$CHECK IF FILE PROTECTED_^1_%AND- ONEBIT+14_^1_%SAZ T160_^1_%RTJ* (ACPROT)_$CHECK IF REQUEST PROTECTED_^1_%SAN T160_^1_%LDA- ONEBIT+13_#UNPROT CALL CANT REMOV€€E FROM PROT FILE_^1_%JMP* T040_)ERROR_^1*_]_^1T160_!LDA* (RECLTH)_$CHECK RECLTH FOR ZERO OR NEGATIVE_^1_%SAZ T170_^1_%SAM T170_^1_%LDQ- FISIND,I_$CHECK IF INDEXED/LINKED_^1_%SQP T180_+NO_^1_%INA -3_-YES, RECORD LENGTH MUST BE .GE.3_^1_%SAP T180_^1T170_!JMP* T030_)RECORD SIZE ILLEGAL_^1*_]_^1T180_!CLR Q_,CLEAR KIS BLOCK LOCATION_^1_%STQ* KIBLOC_^1_%LDA* RECPTR_'CHECK IF FIRST €€RECORD POINTER ADDRESS LEGAL_^1_%RTJ* (ACUADR)_^1_%INA 1_,CHECK IF SECOND RECORD POINTER ADDRESS LEGAL_^1_%RTJ* (ACUADR)_^1*_]_^1_%LDA* RECBUF_'CHECK LEGALITY OF UNPROTECTED (IF IT IS) ADR_^1_%RTJ* (ACUADR)_$OK, IF IT RETURNS_^1*_]_^1_%ADD* (RECLTH)_$CHECK IF THE END OF THE RECORD BUFFER OK_^1_%INA -1_^1_%RTJ* (ACUADR)_$OK, IF IT RETURNS_^1*_]_^1_%LDA- NRLFRB,I_$CHECK IF THERE AR€€E ANY RECORDS IN FILE 63*1353_^1_%SAN T200_P63*1353_^1_%LDA- FRBFSA,I_L63*1353_^1_%SUB- FRBLSA,I_L63*1353_^1_%SAN T200_^1_%JMP* NOPTR_(NO, SET BIT 5 AND EXIT_^1*_81 CARD DELETED_663*1353_^1*_*CHECK IF FIRST ENTRY, GET KIS DIRECTORY AND KIS BLOCK SPACE_^1*_]_^1T200_!LDQ- FISIND,I_$SET FIFO FLAG, IF FIRST-IN, FIRST-OUT SELECTED_^1_%LRS 28_-(IF SET, FIFOFG = 2)_^1_%AND- ONEBIT+1_^1€€_%STA* FIFOFG_^1*_]_^1_%SQP T220_)NOT INDEXED LINKED, SET FIRST TIME ENTRY_^1_%LDA* (RECPTR)_$CHECK IF FIRST TIME ENTRY FOR LINKED CALL_^1_%SAZ T220_+YES, SET FIRST TIME ENTRY_^1*_]_^1_%LDQ* REQBUF_'CHECK IF RE-ENTRY AFTER REACHING END OF LINK_^1_%LDA- EOLPT1,Q_^1_%SAP T210_^1_%JMP* NOREC_(YES, SET BIT 5 (NO MORE RECORDS ON LINK)_^1*_]_^1T210_!LDA- EOLPT2,Q_$CHECK IF REMOVE(S) M€€AKE LINKED CALL 1ST TIME_^1_%TCA A_.YES, IF (EOLPT2) IS MINUS ZERO_^1*_]_^1T220_!STA* RRLFLG_'SET REPEAT RETRIEVE LINKED FLAG (POS IF FIRST)_^1_%SAP T230_^1_%INQ NXTPT1_'REPEATED RETRIEVE LINKED CALL, GET NEXT RECORD_^1_%JMP SETRTV_N63*1353_^1*_]_^1T230_!ENA WRDSEC_'FIRST TIME ENTRY OF THIS CALL_^1_%MUI- KIDSIZ,I_^1_%INA -KIDHDR_%GET NUMBER OF WORDS IN KIS DIRECTORY - HEADER_€€^1_%STA* NWKID_^1*_]_^1_%RTJ GETKID_'GET KIS DIRECTORY_^1_%STQ* KIDLOC_'SAVE KIS DIRECTORY LOCATION_^1*_]_^1_%ENA WRDSEC_'GET NUMBER OF WORDS IN KIS BLOCK_^1_%MUI- KIBSIZ,I_^1_%STA* NWKIB_^1*_]_^1_%RTJ GETSPC_'GET SPACE FOR KIS BLOCK_^1_%STQ* KIBLOC_^1_%STQ KBLOC_(SAVE KIS BLOCK ADDRESS TO RELEASE_^1_%EJT_]_^1*_*FIND HASH INDEX INTO KIS DIRECTORY TO GET KIS BLOCK SECTOR_^1*_]_^€€1_%LDA- FISIND,I_$CHECK IF INDEXED-ORDERED_^1_%ALS 1_^1_%SAM T240_^1*_]_^1_%LDA* KEYVAL_'NO, GET HASH CODE_^1_%RTJ HASHCD_)A = KEY VALUE ADDRESS_^1_%DVI* NWKID_^1_%JMP* T270_)SAVE KIS DIRECTORY INDEX AND CONTINUE_^1_%SPC 2_^1T240_!LDA* (KEYVAL)_$INDEXED/ORDERED, CHECK KEY VALUE_^1_%SAP T250_^1_%CLR A_,NEGATIVE, USE INDEX ZERO_^1*_]_^1T250_!SUB- NUMEKV,I_^1_%SAM T260_^1_%ENA €€ -1_+TOO LARGE, USE LARGEST INDEX_^1*_]_^1T260_!ADD- NUMEKV,I_^1_%MUI* NWKID_(INDEX = (KEYVAL*NWKID)/NEKV_^1_%DVI- NUMEKV,I_^1_%TRA Q_^1*_]_^1T270_!INQ KIDHDR_'GET KIS BLOCK POINTER_^1_%LDQ* (KIDLOC),Q_^1_%SQZ NOPTR_^1_%JMP* SRHKIS_'SEARCH FOR KEY INFORMATION SEGMENT_^1*_]_^1NOPTR JMP* NOREC_(NO KIS BLOCK POINTER, SET BIT 5 AND EXIT_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_^1*_]€€_^1FILNUM ADC 0_,FILE NUMBER ADDRESS_^1KEYVAL ADC 0_,KEY VALUE ADDRESS_^1FILCOM ADC 0_,FILE COMBINATION_^1RECPTR ADC 0_,RECORD POINTER ADDRESS_^1RECBUF ADC 0_,RECORD BUFFER ADRESS_^1RECLTH ADC 0_,RECORD LENGTH ADDRESS_^1REQBUF ADC 0_,REQUEST BUFFER ADDRESS_^1REQIND ADC 0_,REQUEST INDICATOR ADDRESS_^1*_]_^1KIDLOC NUM 0_,KIS DIRECTORY LOCATION_^1FIFOFG NUM 0_,INDEXED/LINKED€€ FIRST-IN, FIRST-OUT FLAG_^1RRLFLG NUM 0_,REPEAT RETRIEVE LINK FLAG (NEG IF REPEATED)_^1NWKID NUM 0_,NUMBER OF WORDS IN KIS DIRECTORY_^1*_]_^1ACUADR ADC CKUADR_'CHECK IF AN UNPROTECTED ADDRESS_^1ACPROT ADC CKPROT_'CHECK IF REQUEST PROTECTED_^1_%SPC 5_^1*_*ACCESS (READ OR WRITE) THE KIS BLOCK_^1*_]_^1ACCKIB 000 000_^1_%STA* REDWRT+1_$SETUP READ OR WRITE REQUEST_^1*_]_^1REDWRT€€ RTJ+ 0000_)READ OR WRITE KIS BLOCK_^1KIBLOC NUM 0_,KIS BLOCK ADDRESS_^1NWKIB NUM 0_,NUMBER OF WORDS IN KIS BLOCK_^1KIBLU NUM 0_,KIS LOGICAL UNIT_^1_%NUM 0_^1KIBSEC NUM 0_,KIS BLOCK SECTOR_^1*_]_^1_%SQM MMER1_"*****MASS MEMORY ERROR_^1_%JMP* (ACCKIB)_$EXIT_^1*_]_^1MMER1 JMP MMERR_O63*1353_^1_%EJT_]_^1*_*SEARCH FOR KIS IN KIS BLOCK(S)_^1*_81 CARD DELETED_563*1353_^1SRHKIS €€ENA 2_,SEARCH FOR KIS ON KIS BLOCK(S)_^1_%ADD* FIFOFG_^1_%STA PNTLTH_'SAVE POINTER LENGTH (2 OR 4)_*63*1353_^1_%ADD- KEYLTH,I_^1_%STA KISLTH_'SAVE KIS LENGTH_763*1353_^1_%LDA* KIBLOC_^1_%INA KIBHDR_^1_%ADD* PNTLTH_'SAVE FIRST KIS BLOCK KEY POINTER_^1_%STA* KIB1KP_^1_%LDA- FISFLG,I_$SETUP KIS LOGICAL UNIT_^1_%ARS 7_^1_%AND- ONEMSK+6_^1_%STA* KIBLU_^1*_]_^1GNXKIB STQ* KIBSEC_'RE€€AD IN NEXT KIS BLOCK_^1_%LDA =XMMREAD_^1_%RTJ* ACCKIB_^1_%LDA* KIB1KP_'RESET KEY POINTER_^1_%STA* KEYPTR_^1_%LDQ* KIBLOC_'CHECK NEXT KIS BLOCK_^1_%LDA- 2,Q_^1*_]_^1CNXKIS INA -1_+CHECK NEXT KIS, DECREMENT KIS COUNT_^1_%STA* KISCNT_^1_%LDQ- KEYLTH,I_^1_%SAM CHKOVF_'NO MORE KIS,S (CHECK IF ANY OVF BLOCKS)_^1*_]_^1CNXWRD INQ -1_+CHECK NEXT WORD OF KEY_^1_%LDA* (KEYVAL),Q_^1_%SUB* €€(KEYPTR),Q_^1_%SAM CHKORD_'KEY VALUE .LT. KIS KEY VALUE, CHECK ORDERED_^1_%SAN GNXKIS_^1_%SQZ GETPTR_'KEY FOUND, GET KIS RECORD POINTER_^1_%JMP* CNXWRD_^1*_]_^1CHKORD LDQ- FISIND,I_$CHECK IF INDEXED/ORDERED_^1_%QLS 1_^1_%SQM NOREC_*YES, KEY NOT FOUND_^1*_]_^1GNXKIS LDA* KISCNT_'NOT THIS KEY VALUE, CHECK AGAINST NEXT ONE_^1_%LDQ* KEYPTR_^1_%ADQ* KISLTH_'INCREMENT KEY POINTER_^1€€_%STQ* KEYPTR_^1_%JMP* CNXKIS_'CONTINUE SEARCH_^1*_]_^1CHKOVF LDQ* KIBLOC_'YES, CHECK IF AN OVERFLOW KIS BLOCK EXISTS_^1_%LDQ- 1,Q_^1_%SQZ NOREC_*NO, KIS NOT FOUND_^1_%JMP* GNXKIB_)YES, GET NEXT KIS OVERFLOW BLOCK_^1*_81 CARD DELETED_663*1353_^1*_*NO RECORD ERROR EXIT_^1*_]_^1NOREC LDA- ONEBIT+5_$NO KIS (THUS NO RECORD), SET BIT 5 AND EXIT_^1_%JMP* RQERR_^1_%SPC 2_^1*_*GET KIS €€RECORD POINTER AND SAVE END OF LINK POINTER_^1*_]_^1GETPTR LDA* KEYPTR_'GET THE KIS RECORD POINTER_^1_%SUB* PNTLTH_^1_%STA* KISPTR_^1_%TRA Q_^1*_]_^1_%LDA* REQBUF_'SETUP TO SAVE THE END OF LINK POINTER_^1_%INA EOLPT1_^1_%STA* EOLFLG_^1_%LDA* FIFOFG_'FOR LIFO LINKED, SET END OF LINK = 0_^1_%STA* (EOLFLG)_^1_%SAZ STOEOL_^1_%LDA- 2,Q_*FOR FIFO LINKED, SET END OF LINK_^1_%STA* (EOLF€€LG)_'TO CURRENT EXTRA (LAST) RECORD_^1_%LDA- 3,Q_^1STOEOL RAO* EOLFLG_^1_%STA* (EOLFLG)_^1_%SPC 2_^1*_*SETUP TO RETRIEVE THE RECORD_^1*_]_^1SETRTV LDA* RECBUF_'SETUP RECORD BUFFER_^1_%STA RECBFR_N63*1353_^1_%INA 1_,SETUP TO LINK PREVIOUS WITH NEXT, IF A REMOVE_^1_%STA* RECBW1_^1*_]_^1_%LDA* (RECLTH)_$SETUP RECORD LENGTH_^1_%STA RECLGH_N63*1353_^1*_]_^1_%RTJ* SETUP_(SETUP AND RE€€TRIEVE THE RECORD_^1_%EJT_]_^1*_*IF END OF LINK, SET FLAG / CHECK IF RECORD IS TO BE REMOVED_^1*_]_^1_%LDA- FISIND,I_$SET END OF LINK FLAG_^1_%AND- ONEBIT+15_^1_%ALS 5_^1_%STA* EOLFLG_'SET FLAG IF INDEXED LINKED_^1_%SAZ T510_)CLEAR FLAG IF NOT INDEXED LINKED_^1*_]_^1_%LDQ* RECBW1_'CHECK NEXT POINTER AGAINST END-OF-LINK POINTER_^1_%LDA- 1,Q_^1_%LDQ* REQBUF_^1_%STA- NXTPT2,Q_$(SAVE€€ NEXT POINTER 2)_^1_%LDA* (RECBW1)_^1_%STA- NXTPT1,Q_$(SAVE NEXT POINTER 1)_^1_%EOR- EOLPT1,Q_^1_%SAN T510_)NOT END OF LINK_^1_%LDA- NXTPT2,Q_^1_%EOR- EOLPT2,Q_^1_%SAN T510_)NOT END OF LINK_^1_%STA* EOLFLG_^1_%SET A_,END OF LINKED REACHED, SET FLAGS_^1_%STA- EOLPT1,Q_^1*_]_^1T510_!LDQ* (FILCOM)_$CHECK IF RECORD IS TO BE REMOVED_^1_%SQM T530_^1_%JMP T700_)NO, REMOVE, SET INDICA€€TOR WORD AND EXIT_^1*_]_^1T530_!STQ* NUMWRD_'SET LINK EMPTY FLAG NEGATIVE_^1_%LDA* RRLFLG_'CHECK IF FIRST TIME ENTRY_^1_%SAM T540_^1_%JMP* CHKEOL_)YES_^1*_]_^1T540_!LDQ* RECPTR_'NOT FIRST TIME, REMOVE RECORD FROM LINK_^1_%LDA- 1,Q_^1_%LDQ- (ZERO),Q_^1_%INA 1_^1_%STQ* FRBSC2_^1_%STA* FRBID2_^1*_]_^1*_*CHECK IF TWO POINTER WORDS ARE IN FILE BLOCK_(63*1353_^1_%LDQ RECPTR_N63*1353_^€€1_%LDA- (ZERO),Q_L63*1353_^1_%SUB* FRBSC1_N63*1353_^1_%SAN T550_)NOT IN FILE BLOCK_563*1353_^1_%LDA NWFB_P63*1353_^1_%SUB- 1,Q_Q63*1353_^1_%INA -3_R63*1353_^1_%SAM T550_)NOT IN FILE BLOCK_563*1353_^1_%EJT_V63*1353_^1_%LDQ AFLBLK_'UNTHREAD REMOVED RECORD IN FILE BLOCK 63*1353_^1_%ADQ* FRBID2_N63*1353_^1_%LDA* (RECBW1)_L63*1353_^1_%STA- (ZERO),Q_L63*1353_^1_%RAO* RECBW1_N63*135€€3_^1_%LDA* (RECBW1)_L63*1353_^1_%STA- 1,Q_Q63*1353_^1_%JMP REMREC_N63*1353_^1*_] 63*1353_^1T550_!RTJ (AMMWRT)_$REMOVE RECORD FROM THE LINK_+63*1353_^1RECBW1 NUM 0_,POINTER TO NEXT RECORD_^1_%NUM 2_,TWO WORDS/POINTER_^1FRBLU2 NUM 0_,LU_^1FRBID2 NUM 0_^1FRBSC2 NUM 0_,LINK PONTER AREA (WORD 1/2) OF LAST RECORD_^1*_]_^1_%SQM MMERR_"*****MASS MEMORY ERROR_^1_%JMP REMREC_'REMOV€€E THE UNLINKED RECORD_,63*1353_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_<63*1353_^1*_] 63*1353_^1PNTLTH NUM 0_,KIS POINTER LENGTH (2=LIFO, 4=FIFO)_"63*1353_^1KISLTH NUM 0_,KIS LENGTH_<63*1353_^1KIB1KP NUM 0_,KIS BLOCK FIRST KEY POINTER_+63*1353_^1KEYPTR NUM 0_,CURRENT KIS BLOCK KEY POINTER_)63*1353_^1KISCNT NUM 0_,CURRENT KIS COUNT_563*1353_^1KISPTR NUM 0_,KIS POINTER_;63*135€€3_^1EOLFLG NUM 0_,END OF LINK POINTER AND INDICATOR_$63*1353_^1KISNPR NUM 0_,POINTER TO NEXT KIS_363*1353_^1NUMWRD NUM 0_,NUMBER OF WORDS TO MOVE_/63*1353_^1_%EJT_V63*1353_^1*_*REQUEST EXIT (INCLUDING ERROR EXITS)_^1_%SPC 2_^1*_*MASS MEMORY ERROR (SET BIT 7)_^1MMERR LDA- ONEBIT+7_^1_%SPC 2_^1*_*REQUEST ERROR (SET BIT 15)_^1RQERR EOR- ONEBIT+15_^1_%SPC 2_^1*_*REQUEST EXIT_^1€€RQEXIT LDQ KIBLOC_'CHECK IF KIS BLOCK ALLOCATED_*63*1353_^1_%SQZ EXIT_+NO_^1_%RTJ- (AMONI)_%RELEASE KIS BLOCK_^1_%NUM $1800_^1KBLOC NUM 0_^1*_]_^1EXIT_!JMP T050_)STORE INDICATOR AND EXIT_^1_%EJT_]_^1*_812 CARDS DELETED_463*1353_^1*_*SETUP FOR RETRIEVING THE RECORD_^1*_]_^1SETUP 000 000_^1_%LDA- FISFLG,I_$SETUP FILE RECORD BLOCK LOGICAL UNIT_^1_%AND- ONEMSK+6_^1_%STA* FRBLU_€€^1_%STA* FRBLU1_^1_%STA* FRBLU2_^1_%STA FRBLU3_^1_%LDA- 1,Q_^1_%LDQ- (ZERO),Q_$SETUP MASS MEMORY ADDRESS OF THE RECORD_^1_%STA* FRBID1_^1_%STQ* FRBSC1_^1_%STA FRBID3_^1_%STQ FRBSC3_^1*_]_^1_%LDA- FRBSIZ,I_$GET NUMBER OF WORDS IN FILE RECORD BLOCK_^1_%AND- ONEMSK+8_^1_%MUI* WPS_^1_%TRA Q_-CHECK IF FRB SIZE .GT. FILE BLOCK SIZE_^1_%SUB* ANWBLK_^1_%SAM SU05_)NO, USE FILE RECORD BL€€OCK SIZE_^1_%LDQ* ANWBLK_'YES, USE FILE BLOCK SIZE_^1SU05_!STQ* NWFB_^1_%STQ* NWFB1_^1_%EJT_]_^1*_*CHECK IF RECORD WILL FIT IN FILE RECORD BLOCK_^1*_]_^1_%LDA* ANWBLK_'CHECK IF RECORD WILL FIT IN FILE BLOCK_^1_%SUB* FRBID1_^1_%SUB* RECLGH_^1*_]_^1_%LDQ (FILCOM)_$CHECK IF RECORD IS TO BE REMOVED_^1_%SQM SU10_+YES, READ IN FILE RECORD BLOCK_^1_%SAM SU15_)NO REMOVE AND WONT FIT IN €€FILE BLOCK_^1*_]_^1SU10_!STA* IFBFLG_'READ IN FILE RECORD BLOCK INTO FILE BLOCK_^1_%LDA* FRBSC1_^1_%LDQ* AMMRED_^1_%RTJ* ACCFRB_^1_%LDQ* AFLBLK_^1_%ADQ* FRBID1_^1_%LDA* IFBFLG_'CHECK IF RECORD IN FILE RECORD BLOCK_^1_%SAP SU18_,YES_^1_%ADD* RECLGH_^1_%INA -1_+SET IN-FILE-BLOCK FLAG IF FIRST WORD IS IN_^1_%SAM SU30_^1_%STA* IFBFLG_^1_%INA 1_^1_%SUB- (ZERO),Q_$CHECK IF ACTUAL REC€€ORD IN FILE RECORD BLOCK_^1SU15_!SAM SU30_,NO, READ IN RECORD BY ITSELF_^1*_]_^1SU18_!STQ* IFBFLG_'RECORD IN FILE RECORD BLOCK_^1_%LDQ* RECLGH_^1SU20_!INQ -1_+TRANSFER RECORD TO USER,S RECORD BUFFER_^1_%LDA* (IFBFLG),Q_^1_%STA* (RECBFR),Q_^1_%SQZ SUEXIT_^1_%JMP* SU20_^1*_]_^1*_*RETRIEVE THE RECORD BY ITSELF_^1SU30_!RTJ* (AMMRED)_$READ THE RECORD IN BY ITSELF_^1RECBFR NUM 0_^1RE€€CLGH NUM 0_^1FRBLU1 NUM 0_^1FRBID1 NUM 0_^1FRBSC1 NUM 0_^1_%SQP SUEXIT_^1MMER_!JMP* MMERR_"*****MASS MEMORY ERROR_^1SUEXIT JMP* (SETUP)_%RETURN_^1_%EJT_]_^1*_*DELETE KIS FOM KIS BLOCK IF AT END OF LINK_^1*_]_^1CHKEOL LDA* EOLFLG_'CHECK IF AT THE END OF THE LINK_^1_%SAZ DELKIS_'YES, DELETE KIS_^1_%LDQ* RECBFR_^1_%LDA- 2,Q_*PUT NEXT LINKED POINTER INTO KIS_^1_%LDQ- 1,Q_^1_%STQ*€€ (KISPTR)_^1_%LDQ* KISPTR_^1_%STA- 1,Q_^1_%LDQ REQBUF_'SET FLAG TO FIRST TIME BECAUSE OF REMOVE_^1_%SET A_^1_%STA- EOLPT2,Q_^1_%JMP* WRTKIS_'WRITE OUT KIS BLOCK AND REMOVE RECORD_^1*_]_^1DELKIS LDA* KISPTR_'DELETE KIS FROM KIS BLOCK_^1_%ADD* KISLTH_^1_%STA* KISNPR_^1_%LDQ* KBLOC_(DECREMENT THE NUMBER OF KIS,S IN BLOCK_^1_%LDA- 2,Q_^1_%INA -1_^1_%STA- 2,Q_^1_%INA 1_,COMPUTE NUMB€€ER OF WORDS TO MOVE_^1_%MUI* KISLTH_^1_%INA KIBHDR_^1_%ADD* KBLOC_^1_%SUB* KISNPR_^1_%STA* NUMWRD_^1*_]_^1_%CLR Q_,DELETE KIS BY MOVING UP KIS,S_^1MOVKIS TRQ A_^1_%SUB* NUMWRD_'ALL DONE_^1_%SAP WRTKIS_)YES_^1_%LDA* (KISNPR),Q_^1_%STA* (KISPTR),Q_^1_%INQ 1_^1_%JMP* MOVKIS_^1*_]_^1WRTKIS LDA* AMMWRT_'WRITE CHANGED KIS BLOCK TO MASS MEMORY_^1_%RTJ ACCKIB_^1REMREC JMP* RMVREC_^1_€€%SPC 3_^1AMMWRT ADC MMWRIT_'ADDRESS OF MASS MEMORY WRITE ROUTINE_^1WPS_"ADC WRDSEC_'NUMBER OF WORDS PER SECTOR_^1ANWBLK ADC NWFBLK_'NUMBER OF WORDS IN FILE BLOCK_^1IFBFLG NUM 0_,IN-FILE-BLOCK FLAG (POSITIVE IF RECORD IS)_^1NWFB1 NUM 0_,NUMBER OF WORDS IN FILE BLOCK_^1_%EJT_]_^1*_*ACCESS THE RECORD,S FILE RECORD BLOCK_^1*_]_^1ACCFRB 000 000_^1_%STA* FRBSEC_'A = FILE RECORD B€€LOCK SECTOR_^1_%STQ* RORW+1_'Q = READ OR WRITE ADDRESS_^1*_]_^1RORW_!RTJ+ 0000_)READ IN FRB_^1AFLBLK ADC FILBLK_'ADDRESS OF FILE BLOCK_^1NWFB_!NUM 0_,NUMBER OF WORDS TO BE ACCESSED_^1FRBLU NUM 0_,LOGICAL UNIT OF FRB_^1FRBIDX NUM 0_^1FRBSEC NUM 0_,STARTING SECTOR OF FRB_^1*_]_^1_%CLR A_,RESET FRB INDEX TO ZERO_^1_%STA* FRBIDX_^1*_]_^1_%SQP ACCEXT_^1_%JMP* MMER_#*****MASS MEM€€ORY ERROR_^1*_]_^1ACCEXT JMP* (ACCFRB)_$RETURN_^1_%EJT_]_^1*_*REMOVE THE RETRIEVED RECORD_^1RMVREC LDA FIFOFG_'SET REMOVE FIFO RECORD FLAG TO 2, IF INDEXED/_^1_%LDQ NUMWRD_)LINKED FIFO AND CURRENT LINK EMPTY_!63*1353_^1_%SQP T620_^1*_]_^1T610_!CLR A_,CLEAR REMOVE-FIFO-RECORD FLAG_^1T620_!STA* RFRFLG_^1_%LDQ* AFLBLK_^1_%LDA- 2,Q_*CHECK IF RECORD IS IN LAST FRB_^1_%SAN T625_+NO_€€^1_%ENA -1_+RECORD IN LAST FRB_^1_%AND- IDXCHG,I_^1_%INA 1_,SET FIS CHANGED BIT_^1_%STA- IDXCHG,I_^1_%LDA- NRLFRB,I_$DECREMENT NUMBER OF RECORDS IN LAST FRB_^1_%INA -1_^1_%STA- NRLFRB,I_$IS THERE MORE THAN ONE RECORD IN THE LAST FRB_^1_%SAN T630_+YES, THEN JUST REMOVE THE RECORD_^1_%ENA FRBHDR_'NO MORE RECORDS IN LAST FRB,_^1_%STA- FRBNIX,I_'RESET FRB INDEX TO BEGINNING OF FRB€€_^1_%JMP* T700_)(DONT RETURN LAST FRB)_^1*_]_^1T625_!INA -1_+DECREMENT NUMBER OF RECORDS IN FRB_^1_%STA- 2,Q_^1_%SAN T630_^1_%JMP* RTNFRB_'NO MORE RECORDS IN FRB, RETURN FRB_^1*_]_^1T630_!LDA* (RECBFR)_$SET REMOVE BIT IN RECORD_^1_%EOR- ONEBIT+15_^1_%LDQ* IFBFLG_'CHECK IF RECORD IN FILE BLOCK_^1_%SQM T640_)NO, REMOVE RECORD BY ITSELF_^1_%LDQ* FRBID3_^1_%STA* (AFLBLK),Q_"RECORD I€€S IN FILE BLOCK, REMOVE IT WHEN FRB IS_^1_%JMP* T650_)WRITTEN BACK TO DECREMENT NUMBER OF RECORDS_^1*_]_^1T640_!STA* (AMMRED)_$REMOVE RECORD BY ITSELF_^1_%RTJ* (AMMWRT)_^1AMMRED ADC MMREAD_^1_%NUM 1_^1FRBLU3 NUM 0_^1FRBID3 NUM 0_^1FRBSC3 NUM 0_^1_%SQP T650_^1_%JMP* MMER_#*****MASS MEMORY ERROR_^1*_]_^1T650_!LDA* RFRFLG_'DOES EXTRA FIFO RECORD HAVE TO BE DELETED_^1_%SAN T660_€€^1_%LDA* FRBSC3_'NO, WRITE FRB TO DECREMENT NUMBER OF RECORDS_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1_%JMP* T700_)SET UP REQUEST INDICATOR AND EXIT_^1_%EJT_]_^1*_*SETUP TO DELETE EXTRA INDEXED/LINKED FIFO RECORD_^1*_]_^1T660_!LDQ* RECBFR_'SETUP TO DELETE EXTRA FIFO RECORD_^1_%LDA- 1,Q_^1_%STA* FRBSC3_'GET FRB SECTOR/INDEX TO EXTRA RECORD_^1_%LDA- 2,Q_^1_%STA* FRBID3_^1_%LDA* ANWBLK_^1_%€€SUB- 2,Q_*DOES (OR WILL) EXTRA RECORD FIT IN FILE BLOCK_^1_%INA -1_^1_%STA* IFBFLG_'IF IT CAN, IN-FILE-BLOCK FLAG IS POSITIVE_^1*_]_^1_%LDQ* RFRFLG_'CHECK IF RECORD,S FRB WAS RETURNED_^1_%SQM T680_+YES, DONT WRITE RECORD,S FRB_^1_%SAM T670_)IF EXTRA RECORD NOT IN BLOCK, READ IT IN_^1*_]_^1_%LDA* FRBSC3_'CHECK IF EXTRA RECORD IN SAME BLOCK AS RECORD_^1_%EOR* FRBSC1_^1_%SAZ T690_€€)YES, SKIP READING ITS FRB IN_^1*_]_^1T670_!LDA* FRBSC1_'WRITE OUT RECORD,S FRB_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1*_]_^1T680_!LDA* FRBSC3_'READ IN EXTRA RECORD,S FRB_^1_%LDQ* AMMRED_^1_%RTJ* ACCFRB_^1*_]_^1T690_!JMP* T610_)REMOVE EXTRA FIFO RECORD IN LIKE MANNER_^1_%SPC 3_^1RFRFLG NUM 0_,REMOVE-FIFO-RECORD FLAG (NON-ZERO, IF SET)_^1_%EJT_]_^1*_*RETURN THE RECORD,S FILE RECORD BLO€€CK_^1*_]_^1RTNFRB ENA -1_^1_%AND- IDXCHG,I_^1_%INA 1_^1_%STA- IDXCHG,I_^1_%LDQ* AFLBLK_^1_%ENA 1_^1_%STA* NWFB_+(SETUP TO WRITE ONE WORD THREADS)_^1_%LDA* FRBSC3_^1_%EOR- FRBFSA,I_^1_%SAN RFRB10_^1*_]_^1_%LDA- 1,Q_*SET NEW FIRST FRB TO NEXT FRB_^1_%STA- FRBFSA,I_^1_%JMP* RFRB20_'WRITE BACKWARD FRB THREAD ON NEW FIRST FRB_^1*_]_^1RFRB10 LDA- (ZERO),Q_$WRITE FORWARD FRB THREAD ON€€ LAST FRB_^1_%LDQ- 1,Q_^1_%STQ* (AFLBLK)_^1_%RAO* FRBIDX_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1*_]_^1_%LDA* (AFLBLK)_$WRITE BACKWARD FRB THREAD ON NEXT FRB_^1_%LDQ* FRBSEC_^1_%STQ* (AFLBLK)_^1RFRB20 LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1*_]_^1_%LDA* NWFB1_(RESET NUMBER OF WORDS TO ACCESS IN FILBLK_^1_%STA* NWFB_^1_%LDA* FRBSC3_'SET UP STARTING SECTOR OF RECORD,S FRB_^1_%STA STRSEC_^1_%LDQ* FR€€BLU3_'Q = LOGICAL UNIT OF FRB_^1_%LDA- FRBSIZ,I_^1_%AND- ONEMSK+8_$A = NUMBER OF SECTORS IN FRB_^1_%RTJ RTNSPC_'RETURN THE RECORD,S FILE RECORD BLOCK_^1*_]_^1_%LDA- NUMFRB,I_$DECREMENT NUMBER OF FILE RECORD BLOCKS_^1_%INA -1_^1_%STA- NUMFRB,I_^1*_]_^1_%LDA* RFRFLG_'CHECK IF EXTRA FIFO RECORD IS TO BE REMOVED_^1_%SAZ T700_+NO_^1_%SET A_.YES, SET REMOVE-FIFO-RECORD FLAG NEGATIVE_€€^1_%STA* RFRFLG_^1_%JMP* T660_)PROCESS REMOVAL OF EXTRA FIFO RECORD_^1_%EJT_]_^1*_*SETUP INDICATOR WORD AND EXIT_^1*_]_^1T700_!LDQ RECPTR_'SET RECORD POINTER INTO USER,S PARAMETER_^1_%LDA FRBSC1_^1_%STA- (ZERO),Q_^1_%LDA FRBID1_^1_%STA- 1,Q_^1*_]_^1_%RTJ CKPROT_'CHECK IF REQUEST PROTECTED_^1_%SAZ T710_^1_%LDA (FILCOM)_$YES, CHECK IF FILE IS TO BE LOCKED_^1_%AND- ONEMSK+14_^1_€€%SAZ T710_^1_%STA- FISCOM,I_$YES, LOCK FILE_^1*_]_^1T710_!LDA EOLFLG_'SET NOT END OF LINK INDICATION (BIT 4), IF SO_^1_%LDQ (RECBFR)_^1_%TCQ Q_,CHECK IF A SHORT READ_^1_%ADQ RECLGH_^1_%SQP T720_^1_%EOR- ONEBIT+2_$YES, SET BIT 2_^1*_]_^1T720_!LDQ- FISCOM,I_$CHECK IF FILE LOCKED_^1_%SQZ T730_^1_%EOR- ONEBIT+1_$YES, SET BIT 1_^1*_]_^1T730_!JMP RQEXIT_'EXIT_^1_%SPC 3_^1_%END_]€_^__ T710_^1_%STA- FISCPRTVIDO CSY/ F23 P€1_%NAM RTVIDO_'DECK-ID F23 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1* CALL RTVIDO(FILNUM,KEYVAL,FILCOM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1*_*EXTERNALS_^1_%EXT ABSPAR_'ABSOLUTIZES APL_^1_%EXT CKCFIS_'CHECKS€€ CORE FOR FISB_^1_%EXT CKPROT_'CHECK IF REQUEST PROTECTED_^1_%EXT CKUADR_'CHECK LEGALITY OF UNPROTECTED ADDRESS_^1_%EXT GETSPC_'GET ALLOCATABLE CORE SPACE_^1_%EXT MMREAD_'MASS MEMORY READ_^1_%EXT MMWRIT_'MASS MEMORY WRITE_^1_%EXT SRHFIS_'SEARCH FOR FIS IN FIS BLOCKS_^1_%EXT FILBLK_'FILE BLOCK FOR RETRIEVING RECORD,S FRB_^1_%EXT NWFBLK_'NUMBER OF WORDS IN FILE BLOCK_^1*_]_^1€€_%EXT* RTNSPC_'RETURN SPACE_^1_%EXT* STRSEC_'STARTING SECTOR OF SPACE TO BE RETURNED_^1_%EXT* GETKID_'GET KIS DIRECTORY_^1_%EXT* RPEND_(REQUEST PROCESSOR END_^1_%EJT_]_^1*_*EQUIVALENCES_^1*_1COMMUNICATION REGION_^1_%EQU ZERO(2)_%ZERO CONSTANT_^1_%EQU ONEMSK(3)_#ONE MASK TABLE_^1_%EQU ZROMSK($13)_!ZERO MASK TABLE_^1_%EQU ONEBIT($23)_!ONE BIT TABLE_^1_%EQU ZROBIT($33)_!ZERO BIT €€TABLE_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1*_]_^1*_1HEADER LENGTHS / FIS SIZE / WORDS PER SECTOR_^1_%EQU FRBHDR(3)_#NUMBER OF WORDS IN FILE RECORD BLOCK HEADER_^1_%EQU KIDHDR(4)_#NUMBER OF WORDS IN KIS DIRECTORY HEADER_^1_%EQU KIBHDR(3)_#NUMBER OF WORDS IN KIS BLOCK HEADER_^1_%EQU FH(6)_(NUMBER OF WORDS IN CORE FIS HEADER_^1_%EQU FISSIZ(16)_"NUMBER OF WORDS IN MASS MEMORY€€ FIS_^1_%EQU WRDSEC(96)_"NUMBER OF WORDS PER SECTOR_^1*_]_^1*_1CORE FILE INFORMATION SEGMENT INDEXES_^1_%EQU ANCFIS(0)_#THREAD TO NEXT CORE FIS_^1_%EQU SECFIS(1)_#FILE INFORMATION SEGMENT SECTOR_^1_%EQU IDXCHG(2)_#FIS INDEX AND FIS/KID CHANGE BITS_^1_%EQU ADRKID(3)_#KIS DIRECTORY ADDRESS (IF ZERO, NOT IN CORE)_^1_%EQU FISCOM(4)_#FILE COMBINATION (IF ZERO, FILE NOT LOCKED)_^1_€€%EQU FILCLK(5)_#FILE CLOCK_^1_%EQU SANFIS(FH+00) SECTOR ADDRESS TO NEXT FIS (SAME HASH CODE)_^1_%EQU IXNFIS(FH+01) SECTOR INDEX_!TO NEXT FIS (SAME HASH CODE)_^1_%EQU FILENO(FH+02) FILE NUMBER_^1_%EQU FRBFSA(FH+03) FIRST FILE RECORD BLOCK SECTOR ADDRESS_^1_%EQU NRLFRB(FH+04) NUMBER OF RECORDS IN LAST FILE RECORD BLOCK_^1_%EQU FRBLSA(FH+05) LAST FILE RECORD BLOCK SECTOR ADDRES€€S_^1_%EQU FRBNIX(FH+06) NEXT INDEX IN LAST FILE RECORD BLOCK_^1_%EQU KIDSEC(FH+07) KIS DIRECTORY SECTOR_^1_%EQU KIDSIZ(FH+08) KIS DIRECTORY SIZE_^1_%EQU KIBSIZ(FH+09) KIS BLOCK SIZE_^1_%EQU KEYLTH(FH+10) KEY LENGTH_^1_%EQU NUMEKV(FH+11) NUMBER OF EXPECTED KEY VALUES_^1_%EQU FIFORL(FH+12) FIXED RECORD LENGTH FOR INDEXED LINKED FIFO_^1_%EQU NUMFRB(FH+13) NUMBER OF FILE RECORD€€ BLOCKS_^1_%EQU FRBSIZ(FH+14) FILE RECORD BLOCK SIZE (BITS 0-8)_^1_%EQU FISIND(FH+14) FIS INDICATORS (BITS 13-15)_^1_%EQU FISFLG(FH+15) FIS FLAGS AND LOGICAL UNITS_^1*_]_^1*_1REQUEST BUFFER INDEXES_^1_%EQU CURIDX(6)_#CURRENT KIS DIRECTORY INDEX_^1_%EQU CURKIB(7)_#CURRENT KIS BLOCK SECTOR_^1_%EQU NXTPT1(8)_#NEXT LINKED RECORD POINTER 1_^1_%EQU NXTPT2(9)_#NEXT LINKED RECORD PO€€INTER 2_^1_%EQU EOLPT1(10)_"END OF LINK POINTER 1_^1_%EQU EOLPT2(11)_"END OF LINK POINTER 2_^1_%EJT_]_^1* CALL RTVIDO(FILNUM,KEYVAL,FILCOM,RECPTR,RECBUF,RECLTH,REQBUF,REQIND)_^1_%SPC 2_^1_%ADC* RPEND_(LENGTH OF REQUEST PROCESSOR_^1_%SPC 2_^1RTVIDO 000 000_^1_%STQ- I_^1*_]_^1_%ENQ 8_^1T010_!INQ -1_+LOOP TO PICK UP ADDRESS OF CALL PARAMETERS_^1_%STQ* FILNUM_^1_%ADQ- I_^1_%RTJ€€ ABSPAR_^1_%LDQ* FILNUM_^1_%STA* FILNUM,Q_^1_%SQZ T020_^1_%JMP* T010_^1*_]_^1T020_!LDQ* (FILNUM)_$CHECK FOR VALID FILE NO._^1_%SQZ T030_^1_%SQP T100_^1T030_!LDA- ONEBIT+14_^1*_]_^1T040_!EOR- ONEBIT+15_#ERROR EXIT_^1*_]_^1T050_!STA* (REQIND)_$NORMAL EXIT_^1_%JMP* (RTVIDO)_^1_%SPC 2_^1*_]_^1T100_!RTJ CKCFIS_'SEE IF FIS IN CORE_^1_%SAP T110_^1*_]_^1_%LDQ* (FILNUM)_$NOT IN CORE €€CHECK MM_^1_%RTJ SRHFIS_^1_%SAN T120_^1*_]_^1T110_!STQ- I_,SAVE CORE FIS ADDRESS_^1_%LDA- FISFLG,Q_^1_%SAM T130_^1T120_!LDA- ONEBIT_'RELEASED OR NOT DEFINED_^1_%JMP* T040_^1_%EJT_]_^1*_*CHECK REQUEST FOR ERRORS_^1*_]_^1T130_!LDQ- FISIND,Q_$CHECK IF FILE IS INDEXED ORDERED_^1_%QLS 1_^1_%LDA- ONEBIT+11_^1_%SQP T140_)ERROR, NOT AN INDEXED ORDERED FILE_^1*_]_^1_%LDA* (FILCOM)_$CHE€€CK IF REMOVING RECORD_^1_%SAP T160_+NO_^1_%LDQ- FISCOM,I_$CHECK IF FILE LOCKED_^1_%SQZ T150_^1_%AND- ONEMSK+14_#IF LOCKING AND FILE LOCKED, FILCOM = FISCOM_^1_%SAN T150_^1_%LDA- ONEBIT+1_$ERROR TRYING TO REMOVE FROM LOCKED FILE W/0 CM_^1T140_!JMP* T040_^1*_]_^1T150_!LDA- FISFLG,I_$CHECK IF FILE PROTECTED_^1_%AND- ONEBIT+14_^1_%SAZ T160_^1_%RTJ* (ACPROT)_$CHECK IF REQUEST PROTEC€€TED_^1_%SAN T160_^1_%LDA- ONEBIT+13_#UNPROT CALL CANT REMOVE FROM PROT FILE_^1_%JMP* T040_)ERROR_^1*_]_^1T160_!LDA* (RECLTH)_$CHECK RECLTH FOR ZERO OR NEGATIVE_^1_%SAZ T170_^1_%SAM T170_^1_%LDQ- FISIND,I_$CHECK IF INDEXED/LINKED_^1_%SQP T180_+NO_^1_%INA -3_-YES, RECORD LENGTH MUST BE .GE.3_^1_%SAP T180_^1T170_!JMP* T030_)RECORD SIZE ILLEGAL_^1*_]_^1T180_!CLR Q_,CLEAR KIS BLO€€CK LOCATION_^1_%STQ* KIBLOC_^1_%LDA* RECPTR_'CHECK IF FIRST RECORD POINTER ADDRESS LEGAL_^1_%RTJ* (ACUADR)_^1_%INA 1_,CHECK IF SECOND RECORD POINTER ADDRESS LEGAL_^1_%RTJ* (ACUADR)_^1*_]_^1_%LDA* RECBUF_'CHECK LEGALITY OF UNPROTECTED (IF IT IS) ADR_^1_%RTJ* (ACUADR)_$OK, IF IT RETURNS_^1*_]_^1_%ADD* (RECLTH)_$CHECK IF THE END OF THE RECORD BUFFER OK_^1_%INA -1_^1_%RTJ* (ACUADR)_$€€OK, IF IT RETURNS_^1*_]_^1_%LDA- NRLFRB,I_$CHECK IF THERE ARE ANY RECORDS IN FILE 63*1354_^1_%SAN T200_P63*1354_^1_%LDA- FRBFSA,I_L63*1354_^1_%SUB- FRBLSA,I_L63*1354_^1_%SAN T200_^1_%JMP* ENDFIL_'NO, END OF FILE/ SET BIT 3 AND EXIT_^1*_81 CARD DELETED_663*1354_^1*_*CHECK IF FIRST ENTRY, GET KIS DIRECTORY AND KIS BLOCK SPACE_^1*_]_^1T200_!LDA- FISIND,I_$SET FIFO FLAG, IF FIRST-IN,€€ FIRST-OUT SELECTED_^1_%ALS 4_.(IF SET, FIFOFG = 2)_^1_%AND- ONEBIT+1_^1_%STA* FIFOFG_^1*_]_^1_%LDA* (RECPTR)_$CHECK IF FIRST TIME ENTRY FOR LINKED CALL_^1_%SAZ T220_+YES, SET FIRST TIME ENTRY_^1*_]_^1_%LDQ* REQBUF_'CHECK IF NOT INDEXED-LINKED_^1_%LDA- FISIND,I_^1_%SAP T205_+YES, GET NEXT RECORD WITH NEXT HIGHER KEY_^1*_]_^1_%LDA- EOLPT1,Q_$CHECK IF RE-ENTRY AFTER REACHING END O€€F LINK_^1_%SAP T210_+NO, CONTINUE DOWN LINK_^1*_]_^1T205_!LDA- CURIDX,Q_$LAST CALL WAS AT THE END OF A LINK_^1_%STA* KIDIDX_((GET NEXT RECORD WITH NEXT HIGHER KEY)_^1_%LDA- CURKIB,Q_^1_%STA* KIBSEC_'RESTORE KID INDEX AND KIB SECTOR_^1_%ENA 1_^1_%JMP* T220_)SET RRLFLG = 1 AND CONTINUE_^1*_]_^1T210_!LDA- EOLPT2,Q_$CHECK IF REMOVE(S) MAKE LINKED CALL 1ST TIME_^1_%TCA A_.YES, IF (EO€€LPT2) IS MINUS ZERO_^1*_]_^1T220_!STA* RRLFLG_'SET REPEAT RETRIEVE LINKED FLAG (POS IF FIRST)_^1_%SAP T230_^1_%INQ NXTPT1_'REPEATED RETRIEVE LINKED CALL, GET NEXT RECORD_^1_%JMP SETRTV_N63*1354_^1*_]_^1T230_!ENA WRDSEC_'FIRST TIME ENTRY OF THIS CALL_^1_%MUI- KIDSIZ,I_^1_%INA -KIDHDR_%GET NUMBER OF WORDS IN KIS DIRECTORY - HEADER_^1_%STA* NWKID_^1*_]_^1_%ENA WRDSEC_'GET NUMBER€€ OF WORDS IN KIS BLOCK_^1_%MUI- KIBSIZ,I_^1_%STA* NWKIB_^1*_]_^1_%RTJ GETSPC_'GET SPACE FOR KIS BLOCK_^1_%STQ* KIBLOC_^1_%STQ KBLOC_(SAVE KIS BLOCK ADDRESS TO RELEASE_^1_%EJT_]_^1*_*FIND ORDERED INDEX INTO KIS DIRECTORY TO GET KIS BLOCK_^1*_]_^1_%LDA* (KEYVAL)_$INDEXED/ORDERED, CHECK KEY VALUE_^1_%SAP T250_^1_%CLR A_,NEGATIVE, USE INDEX ZERO_^1*_]_^1T250_!SUB- NUMEKV,I_^1_%SAM €€ T260_^1_%ENA -1_+TOO LARGE, USE LARGEST INDEX_^1*_]_^1T260_!ADD- NUMEKV,I_^1_%MUI* NWKID_(INDEX = (KEYVAL*NWKID)/NEKV_^1_%DVI- NUMEKV,I_^1_%TRA Q_^1_%INQ KIDHDR_^1_%LDA* RRLFLG_'CHECK IF SEARCH FOR FIRST KEY VALUE_^1_%SAN T290_+NO, START SEARCH AT LAST KIS BLOCK_^1*_]_^1T280_!STQ* KIDIDX_'SAVE KIS DIRECTORY INDEX_^1*_]_^1_%RTJ GETKID_^1*_]_^1_%LDA* (KIDIDX),Q_"GET KIS BLOCK P€€OINTER_^1_%STA* KIBSEC_^1_%SAZ GNXPTR_'NO KIS BLOCK POINTER, GET NEXT ONE_^1T290_!JMP* SRHKIS_'SEARCH FOR KIS_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_^1*_]_^1FILNUM ADC 0_,FILE NUMBER ADDRESS_^1KEYVAL ADC 0_,KEY VALUE ADDRESS_^1FILCOM ADC 0_,FILE COMBINATION_^1RECPTR ADC 0_,RECORD POINTER ADDRESS_^1RECBUF ADC 0_,RECORD BUFFER ADRESS_^1RECLTH ADC 0_,RECORD LENGTH ADDRESS_^1RE€€QBUF ADC 0_,REQUEST BUFFER ADDRESS_^1REQIND ADC 0_,REQUEST INDICATOR ADDRESS_^1*_]_^1FIFOFG NUM 0_,INDEXED/LINKED FIRST-IN, FIRST-OUT FLAG_^1RRLFLG NUM 0_,REPEAT RETRIEVE LINK FLAG (NEG IF REPEATED)_^1NWKID NUM 0_,NUMBER OF WORDS IN KIS DIRECTORY_^1KIDIDX NUM 0_,KIS DIRECTORY INDEX_^1*_]_^1ACUADR ADC CKUADR_'CHECK IF AN UNPROTECTED ADDRESS_^1ACPROT ADC CKPROT_'CHECK IF REQ€€UEST PROTECTED_^1_%SPC 2_^1*_*GET NEXT KIS BLOCK POINTER_^1GNXPTR LDQ* KIDIDX_'GET NEXT KIS BLOCK POINTER_^1_%INQ 1_^1_%TRQ A_^1_%INA -KIDHDR_^1_%EOR* NWKID_(CHECK FOR END OF BLOCK POINTERS_^1_%SAZ ENDFIL_^1_%JMP* T280_)NO, GET NEXT ONE_^1*_]_^1ENDFIL LDA- ONEBIT+3_$END OF FILE, SET BIT 3 AND EXIT_^1_%JMP RQEXIT_N63*1354_^1_%SPC 2_^1*_*ACCESS (READ OR WRITE) THE KIS BLOCK_^1€€*_]_^1ACCKIB 000 000_^1_%STA* REDWRT+1_$SETUP READ OR WRITE REQUEST_^1*_]_^1REDWRT RTJ+ 0000_)READ OR WRITE KIS BLOCK_^1KIBLOC NUM 0_,KIS BLOCK ADDRESS_^1NWKIB NUM 0_,NUMBER OF WORDS IN KIS BLOCK_^1KIBLU NUM 0_,KIS LOGICAL UNIT_^1_%NUM 0_^1KIBSEC NUM 0_,KIS BLOCK SECTOR_^1*_]_^1_%SQM MMER1_"*****MASS MEMORY ERROR_^1_%JMP* (ACCKIB)_$EXIT_^1*_]_^1MMER1 JMP MMERR_O63*1354_^€€1_%EJT_]_^1*_*SEARCH FOR KIS IN KIS BLOCK(S)_^1*_]_^1SRHKIS ENA 2_,SEARCH FOR KIS ON KIS BLOCK(S)_^1_%ADD* FIFOFG_^1_%STA PNTLTH_'SAVE POINTER LENGTH (2 OR 4)_*63*1354_^1_%ADD- KEYLTH,I_^1_%STA KISLTH_'SAVE KIS LENGTH_763*1354_^1_%LDA* KIBLOC_^1_%INA KIBHDR_^1_%ADD* PNTLTH_'SAVE FIRST KIS BLOCK KEY POINTER_^1_%STA* KIB1KP_^1_%LDA- FISFLG,I_$SETUP KIS LOGICAL UNIT_^1_%ARS 7_^1_€€%AND- ONEMSK+6_^1_%STA* KIBLU_^1*_]_^1GNXKIB LDA =XMMREAD_$READ IN NEXT KIS BLOCK_^1_%RTJ* ACCKIB_^1_%LDA* KIB1KP_'RESET KEY POINTER_^1_%STA* KEYPTR_^1_%LDQ* KIBLOC_'CHECK NEXT KIS BLOCK_^1_%LDA- 2,Q_^1*_]_^1CNXKIS INA -1_+CHECK NEXT KIS, DECREMENT KIS COUNT_^1_%STA* KISCNT_^1_%SAM CHKOVF_'NO MORE KIS,S (CHECK IF ANY OVF BLOCKS)_^1*_]_^1_%LDA* (KEYPTR)_$CHECK KEY WORD AGAINST KI€€S KEY WORD_^1_%SUB* (KEYVAL)_^1_%SUB* RRLFLG_)(GET NEXT HIGHER KEY VALUE, IF SET TO ONE)_^1_%SAP SAVIDO_'KEY FOUND, SAVE INDEXED ORDERED INFORMATION_^1*_]_^1_%LDA* KISCNT_'KIS KEY VALUE .LT. KEY VALUE, CHECK NEXT ONE_^1_%LDQ* KEYPTR_^1_%ADQ* KISLTH_'INCREMENT KEY POINTER_^1_%STQ* KEYPTR_^1_%JMP* CNXKIS_'CONTINUE SEARCH_^1*_]_^1CHKOVF LDQ* KIBLOC_'YES, CHECK IF AN OVERFLOW KIS BLOC€€K EXISTS_^1_%LDQ- 1,Q_^1_%SQZ NOMORE_)NO, KIS NOT FOUND_^1_%STQ* KIBSEC_)YES, GET NEXT KIS OVERFLOW BLOCK_^1_%JMP* GNXKIB_^1*_]_^1NOMORE JMP* GNXPTR_'NO MORE KIS,S, GET NEXT KIS BLOCK POINTER_^1_%EJT_]_^1*_*SAVE INDEXED ORDERED INFORMATION AND END OF LINK POINTER_^1*_]_^1SAVIDO LDQ* REQBUF_'SAVE KIS DIRECTORY INDEX_^1_%LDA* KIDIDX_^1_%STA- CURIDX,Q_^1_%LDA* KIBSEC_'SAVE KIS BLOCK€€ SECTOR_^1_%STA- CURKIB,Q_^1_%INQ EOLPT1_'SETUP TO SAVE THE END OF LINK POINTER_^1_%STQ* EOLFLG_^1*_]_^1_%LDA* KEYPTR_'GET THE KIS RECORD POINTER_^1_%SUB* PNTLTH_^1_%STA* KISPTR_^1_%TRA Q_^1*_]_^1_%LDA* FIFOFG_'FOR LIFO LINKED, SET END OF LINK = 0_^1_%STA* (EOLFLG)_^1_%SAZ STOEOL_^1_%LDA- 2,Q_*FOR FIFO LINKED, SET END OF LINK_^1_%STA* (EOLFLG)_'TO CURRENT EXTRA (LAST) RECORD_^1_€€%LDA- 3,Q_^1STOEOL RAO* EOLFLG_^1_%STA* (EOLFLG)_^1*_]_^1_%LDA* (KEYPTR)_$STORE KEY VALUE INTO USER,S PARAMETER_^1_%STA* (KEYVAL)_^1_%SPC 2_^1*_*SETUP TO RETRIEVE THE RECORD_^1*_]_^1SETRTV LDA* RECBUF_'SETUP RECORD BUFFER_^1_%STA RECBFR_N63*1354_^1_%INA 1_,SETUP TO LINK PREVIOUS WITH NEXT, IF A REMOVE_^1_%STA* RECBW1_^1*_]_^1_%LDA* (RECLTH)_$SETUP RECORD LENGTH_^1_%STA RECLGH_N€€63*1354_^1*_]_^1_%RTJ* SETUP_(SETUP AND RETRIEVE THE RECORD_^1_%EJT_]_^1*_*IF END OF LINK, SET FLAG / CHECK IF RECORD IS TO BE REMOVED_^1*_]_^1_%LDA- FISIND,I_$SET END OF LINK FLAG_^1_%AND- ONEBIT+15_^1_%ALS 5_^1_%STA* EOLFLG_'SET FLAG IF INDEXED LINKED_^1_%SAZ T510_)CLEAR FLAG IF NOT INDEXED LINKED_^1*_]_^1_%LDQ* RECBW1_'CHECK NEXT POINTER AGAINST END-OF-LINK POINTER_^1_%LDA- 1,€€Q_^1_%LDQ* REQBUF_^1_%STA- NXTPT2,Q_$(SAVE NEXT POINTER 2)_^1_%LDA* (RECBW1)_^1_%STA- NXTPT1,Q_$(SAVE NEXT POINTER 1)_^1_%EOR- EOLPT1,Q_^1_%SAN T510_)NOT END OF LINK_^1_%LDA- NXTPT2,Q_^1_%EOR- EOLPT2,Q_^1_%SAN T510_)NOT END OF LINK_^1_%STA* EOLFLG_^1_%SET A_,END OF LINKED REACHED, SET FLAGS_^1_%STA- EOLPT1,Q_^1*_]_^1T510_!LDQ* (FILCOM)_$CHECK IF RECORD IS TO BE REMOVED_^1_%SQM €€T530_^1_%JMP T700_)NO, REMOVE, SET INDICATOR WORD AND EXIT_^1*_]_^1T530_!STQ* NUMWRD_'SET LINK EMPTY FLAG NEGATIVE_^1_%LDA* RRLFLG_'CHECK IF FIRST TIME ENTRY_^1_%SAM T540_^1_%JMP* CHKEOL_)YES_^1*_]_^1T540_!LDQ RECPTR_'NOT FIRST TIME, REMOVE RECORD FROM LINK_!1354_^1_%LDA- 1,Q_^1_%LDQ- (ZERO),Q_^1_%INA 1_^1_%STQ* FRBSC2_^1_%STA* FRBID2_^1*_]_^1*_*CHECK IF TWO POINTER WORDS ARE I€€N FILE BLOCK_(63*1354_^1_%LDQ RECPTR_N63*1354_^1_%LDA- (ZERO),Q_L63*1354_^1_%SUB* FRBSC1_N63*1354_^1_%SAN T550_)NOT IN FILE BLOCK_563*1354_^1_%LDA NWFB_P63*1354_^1_%SUB- 1,Q_Q63*1354_^1_%INA -3_R63*1354_^1_%SAM T550_)NOT IN FILE BLOCK_563*1354_^1_%EJT_V63*1354_^1_%LDQ AFLBLK_'UNTHREAD REMOVED RECORD IN FILE BLOCK 63*1354_^1_%ADQ* FRBID2_N63*1354_^1_%LDA* (RECBW1)_L63*1354_^1€€_%STA- (ZERO),Q_L63*1354_^1_%RAO* RECBW1_N63*1354_^1_%LDA* (RECBW1)_L63*1354_^1_%STA- 1,Q_Q63*1354_^1_%JMP REMREC_N63*1354_^1*_] 63*1354_^1T550_!RTJ (AMMWRT)_$REMOVE RECORD FROM THE LINK_+63*1354_^1RECBW1 NUM 0_,POINTER TO NEXT RECORD_^1_%NUM 2_,TWO WORDS/POINTER_^1FRBLU2 NUM 0_,LU_^1FRBID2 NUM 0_^1FRBSC2 NUM 0_,LINK PONTER AREA (WORD 1/2) OF LAST RECORD_^1*_]_^1_%SQM MMER€€R_"*****MASS MEMORY ERROR_^1_%JMP* REMREC_'REMOVE THE UNLINKED RECORD_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_<63*1354_^1*_] 63*1354_^1PNTLTH NUM 0_,KIS POINTER LENGTH (2=LIFO, 4=FIFO)_"63*1354_^1KISLTH NUM 0_,KIS LENGTH_<63*1354_^1KIB1KP NUM 0_,KIS BLOCK FIRST KEY POINTER_+63*1354_^1KEYPTR NUM 0_,CURRENT KIS BLOCK KEY POINTER_)63*1354_^1KISCNT NUM 0_,CURRENT KIS COUNT_563*13€€54_^1KISPTR NUM 0_,KIS POINTER_;63*1354_^1EOLFLG NUM 0_,END OF LINK POINTER AND INDICATOR_$63*1354_^1KISNPR NUM 0_,POINTER TO NEXT KIS_363*1354_^1NUMWRD NUM 0_,NUMBER OF WORDS TO MOVE_/63*1354_^1_%EJT_V63*1354_^1*_*REQUEST EXIT (INCLUDING ERROR EXITS)_^1_%SPC 2_^1*_*MASS MEMORY ERROR (SET BIT 7)_^1MMERR LDA- ONEBIT+7_^1_%SPC 2_^1*_*REQUEST ERROR (SET BIT 15)_^1RQERR EOR- ON€€EBIT+15_^1_%SPC 2_^1*_*REQUEST EXIT_^1RQEXIT LDQ KIBLOC_'CHECK IF KIS BLOCK ALLOCATED_*63*1354_^1_%SQZ EXIT_+NO_^1_%RTJ- (AMONI)_%RELEASE KIS BLOCK_^1_%NUM $1800_^1KBLOC NUM 0_^1*_]_^1EXIT_!JMP T050_)STORE INDICATOR AND EXIT_^1_%EJT_]_^1*_*STORE INDEXED PARAMETERS_^1*_811 CARDS DELETED_463*1354_^1*_*SETUP FOR RETRIEVING THE RECORD_^1*_]_^1SETUP 000 000_^1_%LDA- FISFLG,I_$S€€ETUP FILE RECORD BLOCK LOGICAL UNIT_^1_%AND- ONEMSK+6_^1_%STA* FRBLU_^1_%STA* FRBLU1_^1_%STA* FRBLU2_^1_%STA FRBLU3_^1_%LDA- 1,Q_^1_%LDQ- (ZERO),Q_$SETUP MASS MEMORY ADDRESS OF THE RECORD_^1_%STA* FRBID1_^1_%STQ* FRBSC1_^1_%STA FRBID3_^1_%STQ FRBSC3_^1*_]_^1_%LDA- FRBSIZ,I_$GET NUMBER OF WORDS IN FILE RECORD BLOCK_^1_%AND- ONEMSK+8_^1_%MUI* WPS_^1_%TRA Q_-CHECK IF FRB SIZE .GT. €€FILE BLOCK SIZE_^1_%SUB* ANWBLK_^1_%SAM SU05_)NO, USE FILE RECORD BLOCK SIZE_^1_%LDQ* ANWBLK_'YES, USE FILE BLOCK SIZE_^1SU05_!STQ* NWFB_^1_%STQ* NWFB1_^1_%EJT_]_^1*_*CHECK IF RECORD WILL FIT IN FILE RECORD BLOCK_^1*_]_^1_%LDA* ANWBLK_'CHECK IF RECORD WILL FIT IN FILE BLOCK_^1_%SUB* FRBID1_^1_%SUB* RECLGH_^1*_]_^1_%LDQ (FILCOM)_$CHECK IF RECORD IS TO BE REMOVED_^1_%SQM SU10_+YES€€, READ IN FILE RECORD BLOCK_^1_%SAM SU15_)NO REMOVE AND WONT FIT IN FILE BLOCK_^1*_]_^1SU10_!STA* IFBFLG_'READ IN FILE RECORD BLOCK INTO FILE BLOCK_^1_%LDA* FRBSC1_^1_%LDQ* AMMRED_^1_%RTJ* ACCFRB_^1_%LDQ* AFLBLK_^1_%ADQ* FRBID1_^1_%LDA* IFBFLG_'CHECK IF RECORD IN FILE RECORD BLOCK_^1_%SAP SU18_,YES_^1_%ADD* RECLGH_^1_%INA -1_+SET IN-FILE-BLOCK FLAG IF FIRST WORD IS IN_^1_%SAM S€€U30_^1_%STA* IFBFLG_^1_%INA 1_^1_%SUB- (ZERO),Q_$CHECK IF ACTUAL RECORD IN FILE RECORD BLOCK_^1SU15_!SAM SU30_,NO, READ IN RECORD BY ITSELF_^1*_]_^1SU18_!STQ* IFBFLG_'RECORD IN FILE RECORD BLOCK_^1_%LDQ* RECLGH_^1SU20_!INQ -1_+TRANSFER RECORD TO USER,S RECORD BUFFER_^1_%LDA* (IFBFLG),Q_^1_%STA* (RECBFR),Q_^1_%SQZ SUEXIT_^1_%JMP* SU20_^1*_]_^1*_*RETRIEVE THE RECORD BY ITSELF_^1S€€U30_!RTJ* (AMMRED)_$READ THE RECORD IN BY ITSELF_^1RECBFR NUM 0_^1RECLGH NUM 0_^1FRBLU1 NUM 0_^1FRBID1 NUM 0_^1FRBSC1 NUM 0_^1_%SQP SUEXIT_^1MMER_!JMP* MMERR_"*****MASS MEMORY ERROR_^1SUEXIT JMP* (SETUP)_%RETURN_^1_%EJT_]_^1*_*DELETE KIS FOM KIS BLOCK IF AT END OF LINK_^1*_]_^1CHKEOL LDA* EOLFLG_'CHECK IF AT THE END OF THE LINK_^1_%SAZ DELKIS_'YES, DELETE KIS_^1_%LDQ* RECBFR€€_^1_%LDA- 2,Q_*PUT NEXT LINKED POINTER INTO KIS_^1_%LDQ- 1,Q_^1_%STQ* (KISPTR)_^1_%LDQ* KISPTR_^1_%STA- 1,Q_^1_%LDQ REQBUF_'SET FLAG TO FIRST TIME BECAUSE OF REMOVE_^1_%SET A_^1_%STA- EOLPT2,Q_^1_%JMP* WRTKIS_'WRITE OUT KIS BLOCK AND REMOVE RECORD_^1*_]_^1DELKIS LDA* KISPTR_'DELETE KIS FROM KIS BLOCK_^1_%ADD* KISLTH_^1_%STA* KISNPR_^1_%LDQ* KBLOC_(DECREMENT THE NUMBER OF KIS,S IN€€ BLOCK_^1_%LDA- 2,Q_^1_%INA -1_^1_%STA- 2,Q_^1_%INA 1_,COMPUTE NUMBER OF WORDS TO MOVE_^1_%MUI* KISLTH_^1_%INA KIBHDR_^1_%ADD* KBLOC_^1_%SUB* KISNPR_^1_%STA* NUMWRD_^1*_]_^1_%CLR Q_,DELETE KIS BY MOVING UP KIS,S_^1MOVKIS TRQ A_^1_%SUB* NUMWRD_'ALL DONE_^1_%SAP WRTKIS_)YES_^1_%LDA* (KISNPR),Q_^1_%STA* (KISPTR),Q_^1_%INQ 1_^1_%JMP* MOVKIS_^1*_]_^1WRTKIS LDA* AMMWRT_'WRITE CHAN€€GED KIS BLOCK TO MASS MEMORY_^1_%RTJ ACCKIB_^1REMREC JMP* RMVREC_^1_%SPC 3_^1AMMWRT ADC MMWRIT_'ADDRESS OF MASS MEMORY WRITE ROUTINE_^1WPS_"ADC WRDSEC_'NUMBER OF WORDS PER SECTOR_^1ANWBLK ADC NWFBLK_'NUMBER OF WORDS IN FILE BLOCK_^1IFBFLG NUM 0_,IN-FILE-BLOCK FLAG (POSITIVE IF RECORD IS)_^1NWFB1 NUM 0_,NUMBER OF WORDS IN FILE BLOCK_^1_%EJT_]_^1*_*ACCESS THE RECORD,S FILE RE€€CORD BLOCK_^1*_]_^1ACCFRB 000 000_^1_%STA* FRBSEC_'A = FILE RECORD BLOCK SECTOR_^1_%STQ* RORW+1_'Q = READ OR WRITE ADDRESS_^1*_]_^1RORW_!RTJ+ 0000_)READ IN FRB_^1AFLBLK ADC FILBLK_'ADDRESS OF FILE BLOCK_^1NWFB_!NUM 0_,NUMBER OF WORDS TO BE ACCESSED_^1FRBLU NUM 0_,LOGICAL UNIT OF FRB_^1FRBIDX NUM 0_^1FRBSEC NUM 0_,STARTING SECTOR OF FRB_^1*_]_^1_%CLR A_,RESET FRB INDEX TO ZE€€RO_^1_%STA* FRBIDX_^1*_]_^1_%SQP ACCEXT_^1_%JMP* MMER_#*****MASS MEMORY ERROR_^1*_]_^1ACCEXT JMP* (ACCFRB)_$RETURN_^1_%EJT_]_^1*_*REMOVE THE RETRIEVED RECORD_^1RMVREC LDA FIFOFG_'SET REMOVE FIFO RECORD FLAG TO 2, IF INDEXED/_^1_%LDQ NUMWRD_)LINKED FIFO AND CURRENT LINK EMPTY_!63*1354_^1_%SQP T620_^1*_]_^1T610_!CLR A_,CLEAR REMOVE-FIFO-RECORD FLAG_^1T620_!STA* RFRFLG_^1_%LDQ* A€€FLBLK_^1_%LDA- 2,Q_*CHECK IF RECORD IS IN LAST FRB_^1_%SAN T625_+NO_^1_%ENA -1_+RECORD IN LAST FRB_^1_%AND- IDXCHG,I_^1_%INA 1_,SET FIS CHANGED BIT_^1_%STA- IDXCHG,I_^1_%LDA- NRLFRB,I_$DECREMENT NUMBER OF RECORDS IN LAST FRB_^1_%INA -1_^1_%STA- NRLFRB,I_$IS THERE MORE THAN ONE RECORD IN THE LAST FRB_^1_%SAN T630_+YES, THEN JUST REMOVE THE RECORD_^1_%ENA FRBHDR_'NO MORE RECORD€€S IN LAST FRB,_^1_%STA- FRBNIX,I_'RESET FRB INDEX TO BEGINNING OF FRB_^1_%JMP* T700_)(DONT RETURN LAST FRB)_^1*_]_^1T625_!INA -1_+DECREMENT NUMBER OF RECORDS IN FRB_^1_%STA- 2,Q_^1_%SAN T630_^1_%JMP* RTNFRB_'NO MORE RECORDS IN FRB, RETURN FRB_^1*_]_^1T630_!LDA* (RECBFR)_$SET REMOVE BIT IN RECORD_^1_%EOR- ONEBIT+15_^1_%LDQ* IFBFLG_'CHECK IF RECORD IN FILE BLOCK_^1_%SQM T640_)NO, €€REMOVE RECORD BY ITSELF_^1_%LDQ* FRBID3_^1_%STA* (AFLBLK),Q_"RECORD IS IN FILE BLOCK, REMOVE IT WHEN FRB IS_^1_%JMP* T650_)WRITTEN BACK TO DECREMENT NUMBER OF RECORDS_^1*_]_^1T640_!STA* (AMMRED)_$REMOVE RECORD BY ITSELF_^1_%RTJ* (AMMWRT)_^1AMMRED ADC MMREAD_^1_%NUM 1_^1FRBLU3 NUM 0_^1FRBID3 NUM 0_^1FRBSC3 NUM 0_^1_%SQP T650_^1_%JMP* MMER_#*****MASS MEMORY ERROR_^1*_]_^1T650_!€€LDA* RFRFLG_'DOES EXTRA FIFO RECORD HAVE TO BE DELETED_^1_%SAN T660_^1_%LDA* FRBSC3_'NO, WRITE FRB TO DECREMENT NUMBER OF RECORDS_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1_%JMP* T700_)SET UP REQUEST INDICATOR AND EXIT_^1_%EJT_]_^1*_*SETUP TO DELETE EXTRA INDEXED/LINKED FIFO RECORD_^1*_]_^1T660_!LDQ* RECBFR_'SETUP TO DELETE EXTRA FIFO RECORD_^1_%LDA- 1,Q_^1_%STA* FRBSC3_'GET FRB SECTOR/IN€€DEX TO EXTRA RECORD_^1_%LDA- 2,Q_^1_%STA* FRBID3_^1_%LDA* ANWBLK_^1_%SUB- 2,Q_*DOES (OR WILL) EXTRA RECORD FIT IN FILE BLOCK_^1_%INA -1_^1_%STA* IFBFLG_'IF IT CAN, IN-FILE-BLOCK FLAG IS POSITIVE_^1*_]_^1_%LDQ* RFRFLG_'CHECK IF RECORD,S FRB WAS RETURNED_^1_%SQM T680_+YES, DONT WRITE RECORD,S FRB_^1_%SAM T670_)IF EXTRA RECORD NOT IN BLOCK, READ IT IN_^1*_]_^1_%LDA* FRBSC3_'CHECK I€€F EXTRA RECORD IN SAME BLOCK AS RECORD_^1_%EOR* FRBSC1_^1_%SAZ T690_)YES, SKIP READING ITS FRB IN_^1*_]_^1T670_!LDA* FRBSC1_'WRITE OUT RECORD,S FRB_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1*_]_^1T680_!LDA* FRBSC3_'READ IN EXTRA RECORD,S FRB_^1_%LDQ* AMMRED_^1_%RTJ* ACCFRB_^1*_]_^1T690_!JMP* T610_)REMOVE EXTRA FIFO RECORD IN LIKE MANNER_^1_%SPC 3_^1RFRFLG NUM 0_,REMOVE-FIFO-RECORD FLAG €€(NON-ZERO, IF SET)_^1_%EJT_]_^1*_*RETURN THE RECORD,S FILE RECORD BLOCK_^1*_]_^1RTNFRB ENA -1_,SET FIS CHANGED BIT_^1_%AND- IDXCHG,I_^1_%INA 1_^1_%STA- IDXCHG,I_^1_%LDQ* AFLBLK_'CHECK IF THE FRB IS BING RETURNED_^1_%ENA 1_^1_%STA* NWFB_+(SETUP TO WRITE ONE WORD THREADS)_^1_%LDA* FRBSC3_^1_%EOR- FRBFSA,I_^1_%SAN RFRB10_^1*_]_^1_%LDA- 1,Q_*SET NEW FIRST FRB TO NEXT FRB_^1_%STA- FR€€BFSA,I_^1_%JMP* RFRB20_'WRITE BACKWARD FRB THREAD ON NEW FIRST FRB_^1*_]_^1RFRB10 LDA- (ZERO),Q_$WRITE FORWARD FRB THREAD ON LAST FRB_^1_%LDQ- 1,Q_^1_%STQ* (AFLBLK)_^1_%RAO* FRBIDX_^1_%LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1*_]_^1_%LDA* (AFLBLK)_$WRITE BACKWARD FRB THREAD ON NEXT FRB_^1_%LDQ* FRBSEC_^1_%STQ* (AFLBLK)_^1RFRB20 LDQ* AMMWRT_^1_%RTJ* ACCFRB_^1*_]_^1_%LDA* NWFB1_(RESET NUMBER OF€€ WORDS TO ACCESS IN FILBLK_^1_%STA* NWFB_^1_%LDA* FRBSC3_'SET UP STARTING SECTOR OF RECORD,S FRB_^1_%STA STRSEC_^1_%LDQ* FRBLU3_'Q = LOGICAL UNIT OF FRB_^1_%LDA- FRBSIZ,I_^1_%AND- ONEMSK+8_$A = NUMBER OF SECTORS IN FRB_^1_%RTJ RTNSPC_'RETURN THE RECORD,S FILE RECORD BLOCK_^1*_]_^1_%LDA- NUMFRB,I_$DECREMENT NUMBER OF FILE RECORD BLOCKS_^1_%INA -1_^1_%STA- NUMFRB,I_^1*_]_^1_%LDA* €€RFRFLG_'CHECK IF EXTRA FIFO RECORD IS TO BE REMOVED_^1_%SAZ T700_+NO_^1_%SET A_.YES, SET REMOVE-FIFO-RECORD FLAG NEGATIVE_^1_%STA* RFRFLG_^1_%JMP* T660_)PROCESS REMOVAL OF EXTRA FIFO RECORD_^1_%EJT_]_^1*_*SETUP INDICATOR WORD AND EXIT_^1*_]_^1T700_!LDQ RECPTR_'SET RECORD POINTER INTO USER,S PARAMETER_^1_%LDA FRBSC1_^1_%STA- (ZERO),Q_^1_%LDA FRBID1_^1_%STA- 1,Q_^1*_]_^1_%RTJ C€€KPROT_'CHECK IF REQUEST PROTECTED_^1_%SAZ T710_^1_%LDA (FILCOM)_$YES, CHECK IF FILE IS TO BE LOCKED_^1_%AND- ONEMSK+14_^1_%SAZ T710_^1_%STA- FISCOM,I_$YES, LOCK FILE_^1*_]_^1T710_!LDA EOLFLG_'SET NOT END OF LINK INDICATION (BIT 4), IF SO_^1_%LDQ (RECBFR)_^1_%TCQ Q_,CHECK IF A SHORT READ_^1_%ADQ RECLGH_^1_%SQP T720_^1_%EOR- ONEBIT+2_$YES, SET BIT 2_^1*_]_^1T720_!LDQ- FISCOM,€€I_$CHECK IF FILE LOCKED_^1_%SQZ T730_^1_%EOR- ONEBIT+1_$YES, SET BIT 1_^1*_]_^1T730_!JMP RQEXIT_'EXIT_^1_%SPC 3_^1_%END_]_^__€PIOUP CSY/ P R O G R A M L I B R A R Y J08 P€1_%NAM IOUP_)DECK-ID J08 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT IOUP_^1IOUP_!RTJ- ($F4)_^1_%ADC $5A01_^1_%ADC COMP_^1_%NUM 0_^1QRTN_!ADC $8C2_^1_%ADC BEGIOU-IOUP+1_^1_%ADC BEGIOU_^1_%NUM 0_^1_%ADC NAME-IOUP-1_^1€†_%NUM 0,0_^1_%JMP- ($EA)_^1NAME_!ALF 3,IOUPV4_^1COMP_!LDA* QRTN_^1_%SAP 1_^1_%JMP- ($EA)_^1BEGIOU EQU BEGIOU(*)_^1_%END IOUP_^__†PIOUPV4 CSY/ J09 P€1_%NAM IOUPV4_'DECK-ID J09 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_$INPUT OUTPUT UTILITY PROGRAM_^1_%SPC 4_^1*_]_^1*******EQUATE CARDS_^1*_]_^1_%EQU THIAUC($EC)_^1_%EQU AMONI($F4)_^1_%EQU ADISP($EA)_^1_%EQU ZERO($2€€2)_^1_%EQU ONEBIT($23)_^1_%EQU LPMASK($2)_^1_%EQU NZERO($12)_^1_%EQU ZROBIT($33)_^1_%EQU V01(1)_'NUMBER OF PARAMS IN CURRENT REQUEST_^1_%EQU V02(2)_'PARAMETER 1_^1_%EQU V03(3)_'PARAMETER 2_^1_%EQU V03Q(46)_^1_%EQU V04(4)_'PARAMETER 3_^1_%EQU V04Q(47)_^1_%EQU V05(5)_'PARAMETER 4_^1_%EQU V05Q(48)_^1_%EQU V06(6)_'PARAMETER 5_^1_%EQU V06Q(49)_^1_%EQU V07(7)_'PARAMETER 6_€€^1_%EQU V07Q(50)_^1_%EQU V07A(8)_%PARAMETER 7_^1_%EQU V08Q(51)_^1_%EQU V08(41)_%CURRENT REQUEST CODE INDEX_^1_%EQU V09(9)_'CURRENT REQUEST CODE_^1_%EQU V10(10)_%CHAR1 + CHAR2 OF REQUEST_^1_%EQU V11(11)_%CHAR3 + CHAR4_"CODE/PARAMETER_^1_%EQU V12(12)_%CHAR INDEX FOR THE REQUEST BUFFER_^1_%EQU V13(13)_%NUMBER OF CHARS IN CURRENT PARAMETER_^1_%EQU V14(14)_%CURRENT WORD ADDR€€ESS FOR CHAR STORAGE._^1_%EQU V15(15)_%CURRENT CHARACTER_^1_%EQU V16(16)_%CHARACTER + TYPE_^1_%EQU V17(17)_%MULTIPLE OUTPUT COUNT_^1_%EQU V18(18)_%TEMPY STORAGE_^1_%EQU V18Q(45)_^1_%EQU V19(19)_+-_^1_%EQU V20(20)_+-_^1_%EQU V21(21)_^1_%EQU V22(22)_%PHYSICAL DEVICE TABLE_^1_%EQU V23(23)_^1_%EQU V24(24)_^1_%EQU V25(25)_^1_%EQU V26(26)_%START SCRATCH ADDRESS_^1_%EQU V27(€€27)_%MAX SIZE OF SCRATCH FOR IOUP_^1_%EQU V28(28)_%DISK ADDRESS FOR CURRENT CONTROL BUFFER_^1_%EQU V29(29)_%CURRENT SCRATCH ADDRESS FOR DATA BUFFER_^1_%EQU V30(30)_%INDEX TO CURRENT ENTRY IN CONTROL BUFFER_^1_%EQU V31(31)_%CURRENT READ MODE 1=ASCII, 0=BINARY_^1_%EQU V32(32)_%NO OF WORDS TO BE READ_^1_%EQU V33(33)_%NO OF WORDS ACTUALLY READ_^1_%EQU V34(34)_%MODE CHANGED FLAG_€€^1_%EQU V35(35)_%INDEX TO INPUT DATA BUFFER FOR READING INTO_^1_%EQU V36(36)_%CONTROL WORD FOR DATA WRITTEN/READ LAST._^1_%EQU V37(37)_%NUMBER OF RECORDS READ_^1_%EQU V38(38)_%NUMBER OF FILES READ_^1_%EQU V37Q(52)_^1_%EQU V39(39)_^1_%EQU V40(40)_%VERIFY REQUEST FLAG_^1_%EQU V42(42)_%AVAILABLE SCRATCH AREA_^1_%EQU V43(43)_%FLAG SET WHEN U1.NE.U2 OR M.NE.1._^1*_$V43 FLAG IS €€0 TO BYPASS SCRATCH._^1_%EQU V44(44)_^1_%EQU V53(53)_^1_%EQU VABUF(54)_^1_%EQU VDBL(55)_^1_%EQU VVBUF(56)_^1_%SPC 4_^1*_]_^1*******ENTRY POINTS_^1*_]_^1_%ENT IOUPV4_^1*_]_^1_%SPC 4_^1*******EXTERNALS_^1_%EXT LOG1A_^1_%EXT MAXSEC_'MAX ADDRESSABLE SECTOR ADDRESS_^1*_]_^1*_]_^1IOUPV4 JMP IO001_^1*******VARIABLES USED IN THE IOUP_^1IOV_"ADC IOVL-*-1_^1IOV01 BZS IOV01(57)_€€^1IOVL_!NUM 0_^1_%EJT_]_^1*_]_^1*_]_^1*_$VALID IOUP REQUEST CODES TABLE - IOT01_^1*_]_^1*_$DATA TRANSFER REQUESTS_^1*_]_^1IOT01 ALF 1,CC_)+0_+CARD TO CARD_^1_%ALF 1,CM_)+1_+CARD TO MAG TAPE_^1_%ALF 1,CP_)+2_+CARD TO PAPER TAPE_^1_%ALF 1,CL_)+3_+CARD TO PRINTER_^1_%ALF 1,PL_)+4_+PAPER TAPE TO PRINTER_^1_%ALF 1,PC_)+5_+PAPER TAPE TO CARD_^1_%ALF 1,PB_)+6_+PAPER TAPE TO PRINT€€ER AND CARD_^1_%ALF 1,PP_)+7_+PAPER TAPE TO PAPER TAPE_^1_%ALF 1,PM_)+8_+PAPER TAPE TO MAG TAPE_^1_%ALF 1,ML_)+9_+MAG TAPETOPRINTER_^1_%ALF 1,MC_)+10_*MAG TAPE TO CARD_^1_%ALF 1,MB_)+11_*MAG TAPE TO CARD AND PRINTER_^1_%ALF 1,MM_)+12_*MAG TAPE TO MAG TAPE_^1_%NUM $CD50_(+13_*MAG TAPE TO PAPER TAPE_^1*_]_^1*_$VERIFY REQUESTS_^1*_]_^1_%ALF 1,CC_)+14_*VERIFY CARD-CARD VCC_^1_%€€ALF 1,CP_)+15_*VERIFY CARD-PAPER TAPE VCP_^1_%ALF 1,CM_)+16_*VERIFY CARD-MAG.TAPE VCM_^1_%ALF 1,PP_)+17_*VERIFY PAPER-PAPER TAPE VPP_^1_%ALF 1,MP_)+18_*VERIFY MAG.TAPE-PAPER TAPE VMP_^1_%NUM $CD4D_(+19_*VERIFY MAG.-MAG. TAPE VMM_^1*_]_^1*_$MOTION CONTROL REQUESTS_^1*_]_^1*_$THE REQUEST CODE CONSISTS OF THREE ALPHA CHARS THE FIRST_^1*_$CHAR BEING ALWAYS T._^1*_]_^1_%ALF 1,AF_)€€+20_*ADVANCE TAPE NBR OF FILES_^1_%ALF 1,AR_)+21_*ADVANCE TAPE NBR OF RECORDS_^1_%ALF 1,BF_)+22_*BACKSPACE TAPE NBR OF FILES_^1_%ALF 1,BR_)+23_*BACKSPACE TAPE NBR OF RECORDS_^1_%ALF 1,RW_)+24_*REWIND TAPE_^1_%ALF 1,EF_)+25_*WRITE END OF FILE_^1_%ALF 1,SD_)+26_*SET TAPE DENSITY_^1_%NUM $D54C_(+27_*REWIND AND UNLOAD TAPE_^1_%SPC 4_^1*_]_^1*_$VALID NUMBER AND TYPES OF PARAMETE€€RS FOR THE IOUP REQUESTS_^1*_$TABLE IOT02_^1*_$THE INDEX TO THIS TABLE IS THE INDEX TO IOTO1 TABLE FOR_^1*_$THE VALID REQUEST CODE._^1*_$THE TABLE IS LAID OUT AS_^1*_$BIT_"*15*14-12*11*10*09*08*07*06*05--------------*_^1*_,*X *ZERO *P6*P5*P4*P3*P2*P1*NBR OF PARAMETERS_^1*_$X IS THE OPTINAL PARANETER WHICH MAY OR MAY NOT BE PRESENT_^1*_]_^1IOT02 VFD N10/$200,N6/4 0_,CC_^1_%VFD N€€10/$200,N6/4 +1_+CM_^1_%VFD N10/0,N6/3_"+2_+CP_^1_%VFD N10/$200,N6/4 +3_+CL_^1_%VFD N10/4,N6/5_"+4_+PL_^1_%VFD N10/4,N6/5_"+5_+PC_^1_%VFD N10/8,N6/6_"+6_+PB_^1_%VFD N10/0,N6/4_"+7_+PP_^1_%VFD N10/4,N6/5_"+8_+PM_^1_%VFD N10/$204,N6/6 +9_+ML_^1_%VFD N10/$204,N6/6 +10_*MC_^1_%VFD N10/$208,N6/7 +11_*MB_^1_%VFD N10/4,N6/5_"+12_*MM_^1_%VFD N10/4,N6/5_"+13_*MP_^1_%VFD N10/$20€€0,N6/3 +14_*VCC_^1_%VFD N10/0,N6/2_"+15_*VCP_^1_%VFD N10/$200,N6/4 +16_*VCM_^1_%VFD N10/0,N6/2_#+17_*VPP_^1_%VFD N10/0,N6/3_"+18_*VMP_^1_%VFD N10/0,N6/3_"+19_*VMM_^1_%VFD N10/0,N6/2_"+20_*TAF_^1_%VFD N10/0,N6/2_"+21_*TAR_^1_%VFD N10/0,N6/2_"+22_*TBF_^1_%VFD N10/0,N6/2_"+23_*TBR_^1_%VFD N10/0,N6/1_"+24_*TRW_^1_%VFD N10/0,N6/1_"+25_*TEF_^1_%VFD N10/0,N6/2_"+26_*TSD_^1_%VFD€€ N10/0,N6/1_"+27_*TUL_^1_%SPC 4_^1*_]_^1*_$INPUT AND OUTPUT PARAMETER VALIDATION ROUTINE TABLE- IOT03_^1*_]_^1*_$THE IOTO3 IS INDEXED BY THE REQUEST CODE INDEX IN V08_^1*_]_^1IOT03 ADC IOB355_'+0_+CC_^1_%ADC IOB355_'+1_+CM_^1_%ADC IOB355_'+2_+CP_^1_%ADC IOB355_'+3_+CL_^1_%ADC IOB315_'+4_+PL_^1_%ADC IOB315_'+5_+PC_^1_%ADC IOB300_'+6_+PB_^1_%ADC IOB355_'+7_+PP_^1_%ADC IOB€€315_'+8_+PM_^1_%ADC IOB315_'+9_+ML_^1_%ADC IOB315_'+10_*MC_^1_%ADC IOB300_'+11_*MB_^1_%ADC IOB315_'+12_*MM_^1_%ADC IOB315_'+13_*MP_^1*_]_^1_%ADC IOB362_'+14_*VCC_^1_%ADC IOB362_'+15_*VCM_^1_%ADC IOB360_'+16_*VCM_^1_%ADC IOB340_'+17_*VPP_^1_%ADC IOB360_'+18_*VMP_^1_%ADC IOB360_'+19_*VMM_^1*_]_^1_%ADC IOT100_'+20_*TAF_^1_%ADC IOT100_'+21_*TAR_^1_%ADC IOT100_'+22_*TBF_^1€€_%ADC IOT100_'+23_*TBR_^1_%ADC IOTREW_'+24_*TRW_^1_%ADC IOTEOF_'+25_*TEF_^1_%ADC IOT110_'+26_*TSD_^1_%ADC IOTUL_(+27_*TUL_^1*_]_^1_%SPC 4_^1*_]_^1*_*INPUT ACTION TABLE - IOT04_^1*_]_^1IOT04 ALF 1,C_*+0_+C CARD READ ROUTINE_^1_%ADC IOC_^1_%ALF 1,M_*+2_+M MAG TAPE READ ROUTINE_^1_%ADC IOM_^1_%ALF 1,P_*+4_+P PAPER TAPE READ ROUTINE_^1_%ADC IOP_^1_%NUM $8000_(END OF TAB€€LE_^1IOT04T ADC IOT_8T TAPE MOTION CONTROL_^1_%SPC 4_^1*_]_^1*_$INPUT UNIT ACTION TABLE FOR THE VXX REQUESTS - IOT05_^1*_]_^1IOT05 ALF 1,C_*+0_+C CARD READ ROUTINE_^1_%ADC IOC_^1_%ALF 1,M_*+2_+M MAG TAPE READ ROUTINE_^1_%ADC IOM_^1_%ALF 1,P_*+4_+P PAPER TAPR READ RIUTINE_^1_%ADC IOP_^1*_]_^1_%NUM $8000_(END OF IOT05_^1IOT05A ADC IOT05_^1_%SPC 4_^1*_]_^1*_]_^1*_$ACTUAL E€€NTRY TO UTILITY_^1*_]_^1*_$SET UP REMAINDER OF UNPROTECTED CORE FOR_^1*_$I/O BUFFERS_^1*_$PICK UP NEXT IOUP REQUEST FROM STANDARD INPUT_^1*_]_^1*_]_^1IO001 LDA =XIOV_^1_%STA- I_^1_%LDA- THIAUC_'TEMPORARY HIGHEST UNPROTECTED LOCATION+ 1_^1BUFST SUB =XIOS42V_^1_%INA -99_*NUMBER OF LOCATIONS AVAILABLE IN REMAINDER_^1*_8OF UNPROTECTED - ROOM FOR ONE SECTOR_^1_%LDQ* BUFST+1_^1_%INQ€€ 2_^1_%STQ- VABUF,I_%BUFFER STARTS AT END OF IOUP_^1_%ARS 1_,DIVIDE BUFFER AREA IN HALF_^1_%STA- V32,I_(THIS IS THE LENGTH OF THE I/O BUFFERS_^1_%AAQ Q_^1_%STQ- VVBUF,I_%BUFFER USED IN VERIFY REQUESTS_^1_%AAQ Q_^1_%STQ IOS25C_^1_%STQ- VDBL,I_'BUFFER USED FOR CONTROL DATA BLOCK SECTOR_^1_%LDA- $F9_*IS STD. INPUT THE SAME UNIT AS_^1_%SUB- $FC_*STD. COMMENT_^1_%SAZ IO010_^1_%JMP€€* IO150_(NO, DON'T SOLICIT REQUEST_^1IO010 RTJ- (AMONI)_^1IO100 NUM $4C00_(+0 RC FWRITE_^1_%ADC IO120_(+1 CA_^1IO105 ADC 0_,+2 THREAD_^1IO106 NUM $18FC_(+3 V,M,A,LU_^1_%NUM 6_,+4 NO OF WORDS_^1_%ADC IOMS3_(+5 START ADDRESS_^1_%JMP- (ADISP)_^1*_]_^1IO120 LDA* IO106_(CHECK ERROR_^1_%SAP IO130_(SKIP IF NO ERR_^1IO125 JMP- (ADISP)_^1*_]_^1*_$SOLICIT THE IOUP REQUEST- SEND €€OUT NEXT_^1*_]_^1IO130 CLR A_Q63*1383_^1_%STA IOS34X_L63*1383_^1_%LDA- $F9_*IS STD INP SAME UNIT AS -_+63*1383_^1_%SUB- $FC_*STD. COMMENT_^1_%SAZ IO131_^1_%JMP* IO150_(NO, DON'T SOLICIT REQUEST_^1IO131 RTJ- (AMONI)_^1_%NUM $4C00_(+0 RC FWRITE_^1_%ADC IO140_(+1 CA_^1IO135 ADC 0_,+2 THREAD_^1IO136 NUM $18FC_(+3 V,M,A,LU_^1_%NUM 5_,+4 NUMBER OF WORDS_^1_%ADC IOMS4_(+5 ST€€ART ADDRESS_^1_%JMP- (ADISP)_^1*_]_^1IO140 LDA* IO136_(CHECK ERRORS_^1_%SAP IO150_(SKIP IF NO ERROR_^1_%JMP* IO125_(ERROR_^1*_]_^1*_$GET THE OPERATOR INPUT VIA COMMENT DEVICE_^1*_]_^1*_]_^1*_$CLEAR THE IOUP REQUEST BUFFER IOBUF1 FOR READING A NEW REQUEST_^1*_]_^1IO150 ENQ 39_^1_%CLR A_^1IO151 STA IOBUF2,Q_^1_%SQZ IO152_(SKIP ALL DONE_^1_%INQ -1_^1_%JMP* IO151_^1*_]_^1IO152€€ RTJ- (AMONI)_^1_%NUM $4800_(+0 RC FREAD_^1_%ADC IO160_(+1 CA_^1IO155 ADC 0_,+2 THREAD_^1IO156 NUM $18F9_(+3 V,M,A,LU_^1_%NUM 20_++4 NUMBER OF WORDS_^1_%ADC IOBUF2_'+5 STARTING ADDRESS_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IO160 LDA* IO156_(CHECK ERRORS_^1_%SAP IO165_(SKIP IF NO ERRORS_^1_%JMP* IO125_(ERROR_^1*_]_^1IO165 LDA- $FC_*IS STD. INPUT THE SAME UNIT AS_^1_%SUB- $F9_*S€€TD. COMMENT_^1_%SAZ IO170_(YES, GO VALIDATE REQUEST_^1IO167 RTJ- (AMONI)_%COPY INPUT STATEMENT TO PRINTER_^1_%NUM $4C00_^1_%ADC IO169_^1_%ADC 0_^1IO168 NUM $18FB_^1_%NUM 20_^1_%ADC IOBUF2_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IO169 LDA* IO168_^1_%STA* IO226_^1_%STA+ IOS411_^1*_]_^1IO170 JMP* IOB00_(TO VALIDATE THE REQUEST_^1*_]_^1*_$TO SEND OUT A REJECTED REQUEST MESSAGE._^1*_]€€_^1*_$INVALID REQUEST MESSAGE_^1*_]_^1IO200 LDA* IOMS1L_^1_%JMP* IO220_^1*_]_^1*_$FORMAT INCORRECT MESSAGE_^1IO210 LDA* IOMS2L_^1*_]_^1IO220 STA* IO227_^1*_]_^1_%RTJ- (AMONI)_^1IO222 NUM $4C00_(+0 RC FWRITE_^1_%ADC IO235_(+1 CA_^1IO225 ADC 0_,+2 THREAD_^1IO226 NUM $18FC_(+3 V,M,A,LU_^1_%NUM 11_++4 NO OF WORDS_^1IO227 ADC 0_,+5 START ADDRESS_^1*_]_^1_%JMP- (ADISP)_^1*_]€€_^1IO235 LDA* IO226_(CHECK ERROR_^1_%SAP IO240_(SKIP IF NO ERROR_^1_%JMP* IO125_(ERROR_^1*_]_^1IO240 JMP* IO130_(GET NEXT REQUEST._^1*_]_^1*_$MESSAGES OUTPUT BY THE IOUP_^1*_]_^1IOMS1 ALF 10,UT INVALID REQUEST_^1_%NUM $200D_^1*_]_^1IOMS2 ALF 10,UT FORMAT INCORRECT_^1_%NUM $200D_^1*_]_^1IOMS3 ALF 5,UTILITY IN_^1_%NUM $200D_^1*_]_^1IOMS4 ALF 4,NEXT IOU_^1_%NUM $200D_^1€€*_]_^1IOMS5 ALF 2,OUT_^1_%NUM $200D_^1*_]_^1*_]_^1IOMS7 ALF 10,IN/OUT ERROR LU NNNN_^1_%NUM $200D_^1*_]_^1IOMS1L ADC IOMS1_^1IOMS2L ADC IOMS2_^1IOMS7L ADC IOMS7_^1IOMS8L ADC IOMS8_^1_%EJT_]_^1*_]_^1*_$THE REQUEST,WITH THE PARAMETERS,IS IN IOBUF1._^1*_]_^1*_$INITIALIZE THE VARIABLES USED TO VALIDATE ANY IOUP REQUEST_^1*_]_^1IOB00 LDQ IOV_*LENGTH OF THE VARIABLE FIELD TO €€BE RESET TO 0_^1_%CLR A_^1_%STA IOV01,Q_^1_%INQ -1_^1_%STA IOV01,Q_^1_%INQ -4_+DON'T CLEAR VVBUF, VABUF, OR VDBL_^1IOB02 STA IOV01,Q_^1_%INQ -32_^1_%SQN 1_^1_%INQ -1_+DON'T CLEAR V32,I EITHER_^1_%INQ 31_^1_%SQM IOB04_(ALL RESET TO ZER. SKIP_^1_%JMP* IOB02_^1*_]_^1*_$CLEAR THE IOUP CONTROL BUFFER IOBUF3 FOR THE CURRENT REQUEST_^1*_]_^1IOB04 ENQ 95_^1IOB05 STA (IOV01+€€VDBL-1),Q_^1_%SQZ IOB100_'SKIP ALL DONE_^1_%INQ -1_^1_%JMP* IOB05_(OTHERWISE LOOP_^1*_]_^1*_$GET THE NEXT PARAMETER WHICH IS THE REQUEST CODE._^1*_$THE REQUEST CODE CONSISTS OF 2 OR 3 ALPHA CHARS, AND IS_^1*_$FOLLOWED BY A COMMA. IF A 3 ALPHA CHARACTER CODE THE_^1*_$FIRST CHARACTER MUST BE A T(MOTION CONTROL REQUESTS)_^1*_$V(VERIFY) OR OUT_^1*_]_^1IOB100 LDQ =XIOV_^1_%STQ- I_^1_€€%LDQ- VABUF,I_%REQUEST BUFFER ADDRESS_^1*_]_^1_%RTJ IOS3_^1_%LDA- V13,I_(CHAR COUNT_^1_%INA -2_^1_%SAM IOB105_'REJECT IF 1 CHAR CODE_^1_%SAN IOB102_'FOR MORE THAN 2 CHARS_^1_%LDQ- V10,I_(FOR 2 CHAR CODE_^1_%STQ- V09,I_^1_%JMP* IOB122_^1IOB102 INA -2_^1_%SAM IOB110_'FOR 3 CHAR CODE_^1IOB105 JMP* IO200_(REJECT. MORE THAN 3 CHARACTER CODE_^1*_]_^1*_$CHECK 3 CHAR REQUEST TO BE E€€ITHER_^1*_$1.$OUT,VCC,VCP,VCM,VPP,VPM,VMM_^1*_*2. $TAF,TAR,TBF,TBR,TRW,TEF,TSD_^1*_]_^1IOB110 LDA- V10,I_^1_%EOR =N$4F55_^1_%SAN IOB111_'SKIP IF TWO CHARS ARE NOT OU_^1*_$CHECK THIRD CHAR TO BE T_^1_%LDA- V11,I_^1_%AND- NZERO+8_^1_%EOR =N$5400_^1_%SAN IOB112_'SKIP IF NOT T. REJECT_^1*_]_^1*_$FOR A VALIDATED OUT REQUEST RELEASE IOUP_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOB111 LDA- V10€€,I_(CHECK IF FIRST CHAR IS T_^1_%AND- NZERO+8_^1_%EOR =N$5400_%CHAR T_^1_%SAZ IOB115_'SKIP IF A T_^1_%EOR- ONEBIT+9_$CHECK FOR CHARACTER V_^1_%SAZ IOB113_'SKIP IF V_^1*_]_^1*_$OTHERWISE REJECT_^1*_]_^1IOB112 JMP* IOB105_^1*_]_^1*_$SET UP FOR VALID VXX CODE_^1*_]_^1*_]_^1*_$FOR THE CHARACTER V_^1*_]_^1IOB113 LDQ- V10,I_^1_%LDA- V11,I_^1_%LLS 8_^1_%STQ- V09,I_^1_%ENA 14_^1_%JMP*€€ IOB122_^1*_]_^1*_$RE-ARRANGE THE REMAINING TWO CHARS FOR CHECK AGAINST_^1*_$THE TABLE OF VALID REQUEST CODES._^1*_]_^1IOB115 LDQ- V10,I_(FIRST TWO CHARS_^1_%LDA- V11,I_(THIRD CHARACTER_^1_%LLS 8_,LAST 2 CHAR OF THE 3 CHAR REQ CODE TXX_^1_%STQ- V09,I_(REQ CODE FOR VERIFICATION_^1*_]_^1_%ENA 20_^1IOB122 TRA Q_^1IOB124 LDA IOT01,Q_^1_%AND- LPMASK+15_^1_%EOR- V09,I_(GIVEN REQUEST €€CODE_^1_%SAZ IOB130_'MATCH FOUND IN TABLE._^1*_]_^1*_$CHECK END OF VALID CODES_^1*_]_^1_%LDA IOT01,Q_^1_%SAP IOB125_'SKIP NO END OF TABLE_^1_%JMP* IOB105_'REJECT NO MATCH FOUND_^1*_]_^1*_$UPDATE TO NEXT ENTRY IN THE REQUEST CODE TABLE_^1*_]_^1IOB125 INQ 1_^1_%JMP* IOB124_^1*_]_^1*_$FOR A VALIDATED REQUEST CODE,SAVE THE REQ CODE INDEX_^1*_]_^1IOB130 STQ- V08,I_^1*_]_^1*_$GET THE€€ SPECIFIED NUMBER OF PARAMETERS FOR THE GIVEN REQUEST_^1*_]_^1_%LDQ- V08,I_(REQ CODE INDEX_^1_%LDA IOT02,Q_^1_%AND- LPMASK+7_^1_%STA- V21,I_(NUMBER OF PARAMETERS REQD FOR THE REQUEST._^1*_]_^1*_$COMPUTE THE SCRATCH AREA AVAILABLE FOR THE GIVEN REQUEST AND_^1*_$SAVE IT IN V42_^1*_$FOR ALL REQUESTS IT IS MAXSEC-($C1)_^1*_]_^1_%LDQ MAXSEC_'SAVE SCRATCH AREA SIZE_.61*1283_^1_%LDA- $B€€3_*CHECK SCRATCH, LIBRARY_^1_%SUB- $C2_-LU'S DIFFERENT_^1_%LLS 16_^1_%SQN 1_^1_%SUB- $C1_^1_%STA- V42,I_^1*_]_^1*_$GET THE NEXT PARAMETER_^1*_]_^1IOB200 RTJ IOS6_^1*_]_^1*_$CHECK THE LAST CHARACTER RECEIVED_^1*_]_^1IOB210 LDA- V15,I_^1_%INA -$2C_)CHECK FOR A COMMA_^1_%SAN IOB225_'NOT A COMMA_^1_%JMP* IOB260_'JUMP FOR A COMMA_^1IOB225 LDA- V15,I_^1_%SAZ IOB230_'SKIP IF END OF €€REQUEST_^1_%INA -$20_^1_%SAZ IOB230_^1_%INA $20_^1_%EOR- LPMASK+8_$CHECK FOR END OF REQUEST_^1_%SAZ IOB230_'YES_^1_%JMP* IOB270_'INVALID DELIMITER. REJECT_^1*_]_^1*_$FOR THE END OF REQUEST PARAMETER CHECK THE NUMBER OF_^1*_$PARAMETERS SAVED_^1*_]_^1IOB230 LDA- V01,I_(ACTUAL RECEIVED_^1_%SUB- V21,I_(SHOULD BE_^1_%SAZ IOB232_^1*_]_^1*_$CHECK IF THE ACTUAL PARAMETER COUNT IS LESS€€ BY 1_^1*_]_^1*_$FOR THE REQUEST CIDES WHERE PERMISSIBLE( INDICATED_^1*_$BY B15 OF IOT02 TABLE ENTRY=1)_^1*_]_^1_%INA 1_^1_%SAN IOB231_'REJECT IF NOT LESS THAN BY 1_^1*_]_^1*_$CHECK WHETHER MISSING PARAMETER LEGAL_^1*_]_^1_%LDQ- V08,I_(REQUEST CODE INDEX_^1_%LDA IOT02,Q_^1_%SAP IOB231_'REJECT IF NOT PERMISSIBLE_^1*_]_^1_%RAO- V01,I_(UPDATE NBR OF PARAMS TO MAX PERMITTED_^1*_]_^€€1_%JMP* IOB232_^1*_]_^1IOB231 JMP* IOB270_'OTHERWISE REHECT_^1*_]_^1*_$DERIVE THE FROM AND TO UTILITY ROUTINES_^1*_]_^1IOB232 LDA- V09,I_(FROM_^1_%AND- NZERO+8_^1_%STA- V19,I_^1_%ENQ 0_^1IOB235 LDA IOT04,Q_^1_%SAM IOB237_'MOTION CONTROL REQUEST_^1_%AND- NZERO+8_^1_%EOR- V19,I_^1_%SAZ IOB240_'MATCH FOUND_^1_%INQ 2_,OTHERWISE TRY NEXT ENTRY_^1_%JMP* IOB235_^1IOB237 LDQ IOT04T_'€€FOR THE MOTION CONTROL REQUEST_^1_%STQ- V23,I_^1_%JMP- (ZERO),Q_^1IOB240 INQ 1_^1_%LDA IOT04,Q_^1_%STA- V23,I_^1_%LDA- V09,I_(TO CHARACTER_^1_%AND- LPMASK+8_^1_%STA- V19,I_^1_%INA -$42_)CHECK IF OUT IS CHARACTER B - CARD+PRINT_^1_%SAN IOB250_'NOT B_^1_%ENQ 3_^1_%LDA IOV01,Q_^1_%STA- V25,I_^1_%ENQ 2_^1_%LDA IOV01,Q_^1_%STA- V24,I_^1_%JMP* IOB257_^1*_]_^1*_$SAVE SECOND UNIT A€€S THE INPUT UNIT FOR VXX REQUESTS_^1*_$FOR OTHERS DO NOT SAVE SECOND UNIT_^1*_]_^1IOB250 LDA- V08,I_(REQUEST CODE INDEX_^1_%INA -14_^1_%SAM IOB257_'NOT A VXX REQUEST_^1*_]_^1_%INA -6_^1_%SAP IOB257_'NOT A VXX REQUEST_^1*_]_^1*_$FOR VXX REQUEST CODE_^1*_$SET VERIFY REQUEST FLAG_^1*_]_^1_%ENA 1_^1_%STA- V40,I_^1*_]_^1_%LDQ IOT05A_^1IOB252 LDA- (ZERO),Q_^1_%ARS 8_^1_%EOR- V19,I€€_^1_%SAZ IOB255_'MATCH FOUND_^1_%INQ 2_,OTHERWISE TRY NEXT ENTRY_^1_%JMP* IOB252_^1IOB255 LDA- 1,Q_^1_%STA- V24,I_^1IOB257 ENQ 1_,VALIDATE PARAMETER 1 AS AN_^1_%ENA 1_^1_%RTJ IOS7_)INPUT UNIT._^1_%LDQ- V08,I_^1_%ADQ =XIOT03_^1_%LDQ- (ZERO),Q_^1_%JMP- (ZERO),Q_^1*_]_^1*_$COME HERE WITH THE CHARACTER COMMA_^1*_]_^1*_$NUMBER OF PARAMETERS SAVED IS IN V01_^1*_]_^1*_$CHECK IF THE €€NO OF SAVED PARAMS IS MAX. IF YES, REJECT_^1*_]_^1IOB260 LDA- V01,I_(ACTUAL_^1_%SUB- V21,I_(MAXIMUM_^1_%SAN IOB280_'NOT EQUAL. OK._^1IOB270 JMP IO210_(REJECT_^1*_$SET UP TO GET THE NEXT PARAMETER_^1IOB280 JMP* IOB200_^1*_]_^1_%SPC 4_^1*_]_^1*_$PARAMETER VALIDATION ROUTINES_^1*_]_^1IOB300 ENQ 6_,6TH PARAM AS A REPEAT COUNT_^1_%RTJ IOS8_^1*_]_^1_%ENQ 5_,5TH PARAMETER AS A VALID€€ NUMBER_^1_%STQ* IOB900_^1*_]_^1_%ENQ 4_,4TH PARAM AS AN ALPHA CHAR_^1_%RTJ IOS9_^1*_]_^1IOB305 ENQ 3_,3RD PARAMETER AS A PRINTER UNIT_^1_%ENA 3_^1_%RTJ IOS7_^1*_]_^1IOB310 ENQ 2_,2ND PARAM AS AN OUTPUT UNIT_^1_%ENA 2_^1_%RTJ IOS7_^1*_]_^1_%JMP* IOB370_^1*_]_^1IOB315 ENQ 5_,5TH PARAM AS REPEAT COUNT_^1_%RTJ IOS8_^1*_]_^1IOB320 ENQ 4_,4TH PARAMETER AS A VALID NUMBER_^1_%S€€TQ* IOB900_^1*_]_^1_%JMP* IOB352_^1*_]_^1IOB330 ENQ 5_,5TH PARAM AS A VALID REPEAT COUNT_^1_%RTJ IOS8_^1*_]_^1_%ENQ 4_,4TH PARAMETER AS A VALID NUMBER_^1_%STQ* IOB900_^1*_]_^1_%JMP* IOB305_^1*_]_^1IOB340 ENQ 2_,2ND PARAMETER AS A VALID NBR_^1_%STQ* IOB900_^1*_]_^1_%JMP* IOB370_^1IOB350 ENQ 5_,5TH PARAM AS A VALID NUMBER_^1_%STQ* IOB900_^1*_]_^1IOB352 ENQ 3_,3RD PARAMETER AS A€€N ALPHA CHAR_^1_%RTJ IOS9_^1_%JMP* IOB310_^1*_]_^1IOB355 ENQ 3_,3RD PARAM AS A VALID REPEAT COUNT_^1_%RTJ IOS8_^1_%ENQ -1_+NBR VALIDATION NOT APPLIVABLE_^1_%STQ* IOB900_^1_]_^1_%JMP* IOB310_^1IOB360 ENQ 3_,3RD PARAMETER AS A VALID NUMBER_^1_%STQ* IOB900_^1_%JMP* IOB365_^1*_]_^1IOB362 ENQ -1_^1_%STQ* IOB900_^1*_]_^1*_]_^1IOB365 ENQ 2_,2ND PARAM AS A VALID INPUT UNIT_^1_%ENA €€1_^1_%RTJ IOS7_^1*_]_^1*_$FOR THE DATA TRANSFER/VERIFY REQUEST CHECK WHETHER THE DATA_^1*_$HAS TO BE WRITTEN TO (AND LATER ON READ FOR OUTPUT) THE SCRATCH_^1*_$UNIT,OR NOT._^1*_]_^1*_$WHEN U1.EQ.U2 .OR. M.GT.1 THE DATA WILL BE WRITTEN TO SCRATCH._^1*_$OTHERWISE IT WILL BE ON ONE RECORD XFER/COMPARE BASIS._^1*_]_^1*_$A FLAG (V43) IS SET TO BYPASS SCRATCH._^1*_]_^1IOB370 LDA- V09,I_€€(CHECK BOTH CHARACTERS SAME_^1_%STA- V30,I_^1_%ALS 8_^1_%EOR- V30,I_^1_%SAN IOB371_'SKIP IF NOT SAME._^1_%LDA- V02,I_(IF SAME IF U1 AND U2 ARE SAME._^1_%SUB- V03,I_^1_%SAN IOB371_'SKIP IF NOT SAME LU._^1*_]_^1IOB37A CLR Q_-DO NOT SET FLAG_^1_%JMP* IOB374_^1*_]_^1*_$CHECK IF THE M PARAMETER IS GT.1.IF SO,DO NOT SET FLAG._^1*_]_^1IOB371 LDQ- V01,I_(GET NUMBER OF PARAMETERS_^1*_]_^€€1*_$IF X PARAMETER IS APPLICABLE TO A REQUEST THE M PARAMETER_^1*_$IS THE LAST BUT ONE._^1*_$IF X IS NOT APPLICABLE TO THE GIVEN REQUEST THE M PARAMETER_^1*_$IS THE LAST ONE_^1*_]_^1_%LDA- V08,I_(CHECK IF A VERIFY REQUEST_^1_%INA -14_^1_%SAM IOB377_'SKIP IF NOT A VXX_^1_%JMP* IOB374_'JUMP FOR A VXX_^1*_]_^1IOB377 LDA- V08,I_(REQUESY CODE_^1_%INA -2_^1_%SAZ IOB373_'SKIP IF X NO€€T APPLICABLE ($CP)_^1_%INA -2_^1_%SAM IOB372_'SKIP X APPLICABLE ($CC,$CM,$CL)_^1_%INA -5_^1_%SAM IOB373_'SKIP X NOT APPLICABLE ($PX)_^1_%INA -3_^1_%SAP IOB373_'SKIP IF X NOT APPLICABLE_^1*_]_^1*_$FOR REQUESTS WITH X_^1*_]_^1IOB372 INQ -1_^1*_]_^1IOB373 LDA IOV01,Q_^1_%TRA Q_^1_%INA -1_^1_%SAZ IOB374_'SKIP TO SET FLAG NOT TO WROTE SCRATCH_^1_%CLR Q_,DO NOT SET FLAG. WRIT€€E ON SCRATCH_^1*_]_^1IOB374 STQ- V43,I_^1*_]_^1_%LDQ* IOB900_^1_%SQM IOB375_'SKIP IF NBR VALIDATION NOT APPLICABLE_^1*_]_^1_%RTJ IOS10_(OTHERWISE CHECJ SCRATCJ IS AVAILABLE_^1*_]_^1IOB375 JMP IOA_^1*_]_^1IOB900 NUM 0_,TEMP_^1*_]_^1_%EJT_]_^1*_]_^1*_]_^1*_$COMMON SUBROUTINE_^1*_]_^1*_$TO GET A CHARACTER FROM A BUFFER AT ANY GIVEN ADDRESS_^1*_]_^1*_$INPUT_^1*_]_^1*_((Q)_!= BASE A€€DDRESS OF THE BUFFER_^1*_*V44=INDEX TO C_^1*_*INDEX TO CHARACTER_^1*_0UPPER CHAR(B8-15) OF BUFFER+0 = CHAR POSITION 0_^1*_0LOWER CHAR(B0-7) OF BUFFER+0 = CHAR POSITION 1_^1*_0UPPER CHAR(B8-15) OF BUFFER+1 = CHAR POSITION 2_^1*_0AND SO ON_^1*_]_^1*_$OUTPUT_^1*_((Q)_!= NOT DISTURBED_^1*_((A) BITS 00-07 = CHARACTER_^1*_)V12 = UPDATED TO REFLECT NEXT CHAR POSITION_^1*_/(B12 A-F)(B13 €€0-9)(B15 NOT A-Z,0-9)_^1*_]_^1IOS1_!ADC 0_^1IOS1A LDA- V44,I_(CHARACTER INDEX_^1_%ARS 1_^1_%AAQ Q_,Q=WORD ADDRESS_^1_%STQ* IOS1V_^1*_]_^1_%LDA- V44,I_(CHECK UPPER OR LOWER CHARACTER_^1_%AND- LPMASK+1_^1*_]_^1_%LDQ* (IOS1V)_%GET WORD_^1*_]_^1_%SAZ IOS1D_%SKIP IF UPPER CHARACTER (A=0)_^1*_]_^1_%TRQ A_,GET LOWER CHARACTER_^1_%JMP* IOS1E_^1*_]_^1IOS1D TRQ A_,GET LOWER CHARACTER€€_^1_%ALS 8_^1*_]_^1IOS1E AND- LPMASK+8_^1*_]_^1_%STA- V16,I_^1_%RAO- V12,I_(UPDATE INPUT CHAR INDEX FOR NEXT CHAR_^1_%RAO- V44,I_(UPDATE CHAR INDEX_^1*_]_^1*_$CHECK IF THE GIVEN CHAR IS AN ALPHANUMERIC CHAR OR NOT_^1*_]_^1_%INA -$30_^1_%SAM IOS14_(INVALID NUM_^1_%INA -10_^1_%SAM IOS15_(VALID NUM CHAR 0-9_^1_%LDA- V16,I_(GET CHARACTER_^1_%INA -$41_)A_^1_%SAM IOS14_(INVALID €€ALPHANUMERIC_^1_%INA -$1A_)Z+1_^1_%SAM IOS16_(VALID ALPHA CHAR A-Z_^1*_]_^1*_$INVALID ALPHANUMERIC CHARACTER_^1*_]_^1IOS14 LDA- ONEBIT+15_^1_%JMP* IOS19_^1IOS15 LDA- ONEBIT+13_#VALID NUM CHARACTER 0-9_^1_%JMP* IOS19_^1*_]_^1*_$CHECK FOR A VALID A-F HEXADECIMAL CHAR_^1*_]_^1IOS16 LDA- V16,I_^1_%INA -$47_^1_%SAM IOS17_(JUMP IF CHAR IS A-F_^1_%CLR A_,ALPHA CHAR IS NOT A-F_^1_€€%JMP* IOS18_^1IOS17 LDA- ONEBIT+12_#ALPHA CHAR IS A-F_^1_%JMP* IOS18_^1*_]_^1*_$FOR A VALID ALPHANUMERIC CHARACTER_^1*_]_^1IOS18 ADD- ONEBIT+14_^1IOS19 ADD- V16,I_^1_%STA- V16,I_^1*_]_^1*_$EXIT_^1*_]_^1_%JMP* (IOS1)_^1*_]_^1IOS1V NUM 0_,TEMP STORAGE_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO STORE ONE CHARACTER_"OF A PARAMETER_^1*_]_^1*_$INPUT_^1*_*V13,I = CHARACTERS(OF €€THIS PARAM) ALREADY SAVED_^1*_*V14,I = CURRENT STORAGE WORD ADDR. INITIALLY EQ IOV10 ADR_^1*_*V15,I = CHARACTER TO BE STORED_^1*_]_^1IOS2_!ADC 0_^1_%LDQ- V15,I_(CHARACTER TO BE STORED_^1_%LDA- V13,I_(CHECK FOR STORING CHAR IN B8-15,OR 0-7_^1_%AND- ONEBIT+0_^1_%SAN IOS2B_(SKIP FOR SAVING IN B0-7_^1_%QLS 8_,SET UP TO SAVE CHAR IN B8-15_^1IOS2B TRQ A_^1_%LDQ- V14,I_(CURRENT STORA€€GE ADDRESS_^1_%ADD- (ZERO),Q_^1_%STA- (ZERO),Q_^1_%RAO- V13,I_(BUMP COUNT OF CHARS STORED_^1_%LDA- V13,I_^1_%INA -2_^1_%SAN IOS26_^1*_]_^1*_$BUMP WORD STORAGE ADDRESS IF 2 CHARS ALREADY SAVED_^1*_]_^1_%RAO- V14,I_^1_%JMP* IOS261_^1IOS26 INA -2_+FIFTH CHARACTER CHECK_^1_%SAN IOS261_^1_%RAO- V14,I_^1IOS261 JMP* (IOS2)_'EXIT_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO COLLEC€€T 1-5 CHARACTERS OF A REQUEST_^1*_$PARAMETER._^1*_]_^1*_$INPUT_^1*_*(Q)_#= BASE ADDRESS OF REQUEST BUFFER_^1*_*V44_#=CHARACTER INDEX IN REQUEST BUFFER_^1*_]_^1*_$OUTPUT_^1*_]_^1*_$THE CHARACTERS WILL BE SAVED IN IOV10 AND IOV11.THE CHARS_^1*_$ARE IN ASCII MODE_^1*_*V10_#= THE FIRST AND SECOND CHARS_^1*_*V11_#= THE THIRD AND FOURTH CHARS_^1*_$V12_)=FIFTH CHARACTER AND ZERO_^1*_$V44_€€)=CHARACTER INDEX TO NEXT PARAMETER_^1*_*V13_#= THE NUMBER OF CHARS IN THIS PARAMETER_^1*_*V15=CHARACTER TO BE STORED_^1*_]_^1IOS3_!ADC 0_^1*_]_^1*_$INITIALIZE THE ROUTINE FOR A NEW PARAMETER_^1*_]_^1_%CLR A_^1_%STA- V10,I_(CHARACTER STORAGE_^1_%STA- V11,I_9WORDS_^1_%STA- V12,I_^1_%STA- V13,I_(NO OF CHARS IN THIS PARAMETER_^1_%STA- V16,I_(TEMP CHAR STORAGE_^1_%ENA 10_+ADDRESS FO€€R CHAR STORAGE_^1_%ADD- $FF_^1_%STA- V14,I_^1IOS3A LDQ- VABUF,I_^1_%RTJ* IOS1_^1_%AND- LPMASK+8_^1_%STA- V15,I_^1_%SAN IOS3B_(SKIP IF NOT ZERO_^1_%JMP* IOS3E_(JUMP END OF REQUEST._^1IOS3B INA -$2C_)CHECK FOR A COMMA_^1_%SAZ IOS3C_)SKIP IF A COMMA. END OF A PARAMETER_^1*_]_^1_%LDA- V15,I_^1_%INA -$20_^1_%SAZ IOS3C_^1_%INA $20_^1_%EOR- LPMASK+8_$END OF REQUEST DATA $FF_^1_%SA€€Z IOS3C_(YES. END OF THE REQUEST_^1*_]_^1_%LDA- V16,I_^1_%SAM IOS3D_(INVALID CHARACTER. NOT AN ALPHANUMERIC_^1_%LDA- V13,I_(CHECK IF 5 CHARS ALREADY STORED_^1_%INA -5_^1_%SAZ IOS3D_(REJECT-5 ALREADY SAVED._^1_%RTJ* IOS2_)SAVE THE CHARACTER_^1*_]_^1*_*LOOP TILL EITHER A COMMA OR THE PARAMETER END DENOTED_^1*_*BY $FF IS DETECTED._^1*_]_^1_%JMP* IOS3A_^1*_]_^1*_*COME HERE FOR A CO€€MMA AFTER A PARAMETER_^1*_]_^1IOS3C LDA- V13,I_(CHECK IF ANY VALID CHARACTER STORESD_^1_%SAN IOS3E_^1IOS3D JMP* IOS44_(INVALID PARAMETER. REJECT_^1*_]_^1*_*EXIT WITH THE PARAMETERS IN IOV10,IOV11,AND IOV12._^1*_*AND NO OF CHARS OF THIS PARAMETER IN IOV13._^1*_]_^1IOS3E JMP* (IOS3)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON S/R TO CONVERT 1-5 ASCII CHARS (0-99999)_^1*_$TO AN EQUIVALENT €€BINARY NUMBER_^1*_]_^1*_$INPUT_^1*_*V10_!= FIRST TWO CHARS_^1*_*V11_#=3RD AND 4TH CHARS_^1*_*V12_#=5TH CHAR (B8-15)_^1*_*V13_!= GIVEN NUMBER OF ASCII CHARS_^1*_]_^1*_$OUTPUT_^1*_*V18_!= BINARY VALUE_^1*_]_^1*_$INITIALIZE_^1*_]_^1IOS4_!ADC 0_^1_%CLR A_^1_%STA- V18,I_(TEMPORARY STORAGE FOR BINARY VALUE_^1_%STA- V18Q,I_^1_%INA 1_^1_%STA- V20,I_(NO OF CHARS PROCESSED_^1_%LDA- V10,I_€€^1_%ALS 8_^1_%AND- LPMASK+8_^1_%STA- V19,I_^1*_]_^1*_$CHECK WHETHER PARAM OF 1 OR MORE CHARACTERS_^1*_]_^1_%LDA- V13,I_^1_%INA -1_^1_%SAZ IOS41N_'SKIP IF 1 CHARACTER_^1_%JMP* IOS46_^1*_]_^1*_]_^1*_$CHECK PARAMETER NUMBER 1 OR 2_^1*_]_^1IOS41N LDQ- V01,I_^1_%INQ -3_^1_%SQM IOS41B_'1ST OR 2ND PARAMETER. SKIP_^1*_]_^1_%LDA- V09,I_(CHECK FOR MB OR PB REQUEST_^1_%AND- LPMASK+8_^1_%€€INA -$42_^1_%SAZ IOS41A_'FOR MB/PB SKIP_^1_%JMP* IOS41W_^1*_]_^1IOS41A SQZ IOS41B_'FOR PB/MB SKIP IF 3RD PARAMETER_^1_%JMP* IOS41W_^1*_]_^1IOS41B LDA- V19,I_(CHECK SINGLE CHAR IS ALPHA OR NUMERIC_^1_%INA -$41_^1_%SAP IOS41C_'IF ALPHA SKIP_^1_%JMP* IOS46_(FOR NUMERIC JUMP TO CONVERT TO BINARY_^1*_]_^1IOS41C LDA- V19,I_(CHECK CHARACTER TO BE I($49)_^1_%INA -$49_^1_%SAZ IOS41I_€€'SKIP IF I_^1*_]_^1_%INA -3_+CHECK CHARACTER TO BE L($4C)_^1_%SAZ IOS41L_'SKIP IF L_^1*_]_^1_%INA -4_+CHECK CHARACTER TO BE P($50)_^1_%SAZ IOS41P_'SKIP IF P_^1*_]_^1_%JMP* IOS44_(FOR OTHER THAN I,P,L REJECT_^1*_]_^1IOS41I LDA- $F9_*GET STANDARD INPUT LU_^1_%JMP* IOS41S_^1*_]_^1IOS41L LDA- $FB_*GET STANDARD LIST LU_^1_%JMP* IOS41S_^1*_]_^1IOS41P LDA- $FA_*GET THE STANDARD OUTPUT€€ LU_^1*_]_^1IOS41S STA- V18,I_(SAVE THE SPECIFIED LU AS THE PARAMETER._^1*_]_^1_%JMP* (IOS4)_'AND EXIT FROM THE ROUTINE_^1*_]_^1IOS41W LDQ- V01,I_(GET THE ONEBIT MASK CORRESPONDING_^1_%LDA- ONEBIT,Q_$TO THE PARAMETER NUMBER_^1_%ALS 5_^1_%LDQ- V08,I_(INDEX TO CURRENT REQUEST_^1_%AND IOT02,Q_^1_%SAN IOS43_(SKIP IF ALPHA CHAR REQD_^1_%JMP* IOS46_(OTHERWISE JUMP FOR BIN CONVERSSION_€€^1*_]_^1*_$CHECK CHAR TO BE R/F FOR MAG TAPE OR A/B FOR PARER TAPE INPUT_^1*_]_^1IOS43 LDA- V09,I_(REQUEST CODE_^1_%ALS 8_,CHECK INPUT TO BE A PAPER TAPE_^1_%AND- LPMASK+8_^1_%EOR =N$50_^1_%SAZ IOS44A_'SKIP FOR PAPER TAPE_^1_%LDA- V19,I_^1_%INA -$46_)F_^1_%SAZ IOS45_(SKIP IF F_^1_%INA -12_*R_^1_%SAZ IOS45_(SKIP IF R_^1*_]_^1IOS44 JMP IO210_(FORMAT ERROR REJECT_^1*_]_^1*_$€€CHECK A/B FOR PAPER TAPE INPUT_^1*_]_^1IOS44A LDA- V19,I_^1_%INA -$41_^1_%SAZ IOS45_(SKIP IF A_^1_%INA -1_^1_%SAZ IOS45_(SKIP IF B_^1_%JMP* IOS44_(REJECT FOR OTHER CHARACTERS_^1*_]_^1*_]_^1*_$SAVE THE R/F PARAMETER PLUS BIT 15=1_^1*_]_^1IOS45 LDA- V19,I_^1_%EOR- ONEBIT+15_^1_%STA- V18,I_^1_%JMP* (IOS4)_'EXIT_^1*_]_^1*_$COME HERE TO CONVERT THE 1-5 ASCII PARAMETER TO A BINARY_€€^1*_$VALUE_^1*_]_^1*_]_^1IOS46 RTJ* IOS5_)VALIDATE AND CONVERT TO BINARY_^1*_]_^1*_$THE BINARY RESULT IS IN REGISTER A_^1*_]_^1_%ADD- V18,I_^1_%STA- V18,I_^1*_]_^1*_$CHECK RANGE OF BINARY NUMBER_^1*_]_^1_%SAP IOS46A_'SKIP IF .LT.32768_^1_%RAO- V18Q,I_'UPDATE QUOTIENT_^1_%AND- LPMASK+15_^1_%STA- V18,I_^1*_]_^1*_$CHECK ALL CHARACTERS DONE_^1*_]_^1IOS46A LDA- V13,I_(TOTAL NBR OF CHA€€RS_^1_%SUB- V20,I_(NO OF CHARS CHECKED SO FAR_^1_%SAN IOS48_(MORE CHARACTERS TO BE DONE_^1IOS47 JMP* (IOS4)_^1*_]_^1*_$MORE CHARS TO BE DONE_^1*_]_^1IOS48 LDA- V18,I_(MULTIPLY BINARY NUMBER BY 10_^1_%MUI- $46_^1_%STA- V18,I_^1_%RAO- V20,I_(BUMP NO OF CHARS PROCESSED_^1*_]_^1*_$GET THE CORRECT CHARACTER FOR ANALYSIS_^1*_]_^1_%LDA- V20,I_^1_%INA -3_^1_%SAM IOS4A_^1_%SAZ IOS4B_(€€FOR CHAR 3 (B8-15 OF V11)_^1_%INA -2_^1_%SAP IOS4D_(SKIP IF 5TH CHAR(B8-15)_^1_%LDA- V11,I_(FOR CHAR_!4 (B0-7 OF IOV11)_^1IOS49 AND- LPMASK+8_^1_%STA- V19,I_^1_%JMP* IOS46_^1IOS4A LDA- V10,I_(CHARACTER 2_^1_%JMP* IOS49_^1IOS4B LDA- V11,I_(CHARACTER 3_^1IOS4C ALS 8_^1_%JMP* IOS49_^1*_]_^1IOS4D LDA- V12,I_(FOR CHAR 5_^1_%JMP* IOS4C_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO C€€ONVERT 1 ASCII CHARACTER (0-9) TO_^1*_$A BINARY EQUIVALENT NUMBER_^1*_]_^1*_$INPUT_^1*_*ASCII CHAR IN BITS 0-7 OF V19,I_^1*_$OUTPUT_^1*_*BINARY VALUE IN A_^1*_]_^1IOS5_!ADC 0_^1_%LDA- V19,I_^1_%AND =N$F0_^1_%INA -$30_^1_%SAN IOS59_(REJECT IF NOT 0-9_^1*_]_^1*_$FOR A NUMERIC CHARACTER_^1*_]_^1_%LDA- V19,I_^1_%AND- LPMASK+4_^1_%JMP* (IOS5)_^1*_]_^1*_]_^1*_$REJECT_^1*_]_^1IOS59 J€€MP* IOS44_(REJECT THE REQUEST_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE IOS6 TO COLLECT A PARAMETER AND VALIDATE IT_^1*_]_^1*_$INPUT_^1*_$OUTPUT_^1*_$EQUIVALENT BINARY NUMBER IN V18 AND V18Q_^1*_*PARAMETER TABLE IOV01._^1*_*IOV01 IS INCREMENTED BY 1._^1*_]_^1IOS6_!ADC 0_^1_%LDQ- VABUF,I_%REQUEST DATA BUFFER_^1_%RAO- V01,I_(SET UP FOR PARAMETER STORAGE._^1_%RTJ IOS3_^1*_]_^1*_€€]_^1*_$CONVERT THE GIVEN PARAMETER TO BINARY AND SAVE_^1*_]_^1_%RTJ IOS4_^1_%LDQ- V01,I_^1_%LDA- V18,I_^1_%STA IOV01,Q_^1_%INQ 43_^1_%LDA- V18Q,I_'SAVE QUOTIENT_^1_%STA IOV01,Q_^1*_]_^1*_$UPDATE THE ACTUAL NUMBER OF REQUEST PARAMETERS_^1*_]_^1_%JMP* (IOS6)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE IOS7 TO VALIDATE A GIVEN PARAMETER AS A_^1*_$VALID INPUT/OUTPUT LU NUMBER AS €€PER THE REQUEST CODE_^1*_]_^1*_$INPUT_^1*_*Q = 1_!CHECK UNIT TO BE AS IN INPUT UNIT_^1*_*Q = 2_!CHECK UNIT TO BE AS AN OUTPUT UNIT_^1*_*Q=3_$CHECK UNIT TO BE A VALID PRINTER UNIT_^1*_$V09= CURRENT 2 CHARACTER REQUEST CODE_^1*_*IF OUTPUT CHARACYER IN REQUEST CODE IS B AND Q=2_^1*_$THEN VALIDATE NUMBER AS A CARD PUNCH UNIT_^1*_]_^1IOS7_!ADC 0_^1_%STA- V12,I_^1_%STQ- V19,I_(SAVE INPU€€T PARAMETER IDENTIFIER_^1_%LDA IOV01,Q_^1_%TRA Q_^1*_]_^1*_$CHECK IT TO BE NOT GREATER THAN THE MAX._!LEGAL LU_!- LOG1A_^1*_]_^1_%SUB (ALOG1A)_$MAX LEGAL NUMBER_^1_%SAZ IOS71_(LU.MAX OK_^1_%SAM IOS71_(LU.LT.MAX OK_^1_%JMP* IOS78_(INVALID LU REJECT_^1IOS71 LDQ* (ALOG1A),Q_"PHYSICAL DEVICE TABLE_^1_%LDA- 8,Q_*EREQST WORD 8 OF THE PHY DEVICE TABLE_^1_%ARS 11_+GET THE EQUIPMENT €€CLASS._^1_%AND- LPMASK+3_^1_%AND- LPMASK+7_^1_%STA- V20,I_(SAVE THE EQUIPMENT CLASS._^1*_]_^1*_$CHECK A TAPE MOYION REQUEST_^1*_]_^1_%LDA- V08,I_(REQUEST INDEX_^1_%INA -20_^1_%SAM IOS71A_'NOT A MOYION CONTROL REQUEST_^1_%JMP* IOS79_(EXIT FOR A MOTION CONTROL REQUEST_^1*_]_^1*_$CHECK A VXX REQYEST_^1*_]_^1IOS71A LDA- V40,I_^1_%SAN IOS71B_'SKIP IF A VXX REQUEST_^1_%JMP* IOS72_(NOT€€ A VXX REQUEST_^1*_]_^1*_]_^1*_$CHECK UNIT 1 OR 2_^1*_]_^1IOS71B LDA- V19,I_^1_%INA -1_^1_%SAZ IOS71D_'SKIP IF UNIT 1_^1*_]_^1*_$GET THE SECOND CHARACTET_^1*_]_^1IOS71C LDA- V09,I_^1_%JMP* IOS71E_^1*_]_^1*_$CHOSE THE FIRST CHARACTER OF THE REQUEST_^1*_]_^1IOS71D LDA- V09,I_^1_%ALS 8_^1IOS71E AND- LPMASK+8_^1_%JMP* IOS74_^1*_]_^1*_$FOR A NON VXX REQUEST_^1*_]_^1IOS72 LDA- V19,I_€€^1_%INA -2_^1_%SAP IOS72A_'CHECK FOR OUTPUT_^1*_$SET FOR THE INPUT TYPE SEARCH_^1_%JMP* IOS71D_'GET FIRST CHARACTER_^1*_]_^1*_]_^1*_$CHECK UP UNIT 2 OR 3_^1*_]_^1IOS72A SAZ IOS73_(SKIP IF UNIT 2_^1*_]_^1*_$THE 3RD UNIT MUST BE A PRINTER_^1*_]_^1_%ENA $4C_*CHARACTER L_^1_%JMP* IOS74_^1*_]_^1*_$CHECK IF CHARACYER B_^1*_]_^1IOS73 LDA- V09,I_^1_%AND- LPMASK+8_^1_%INA -$42_^1_%SAN€€ IOS73A_'NOT A B. CHECK AS PER SECOND CHARACTER_^1*_]_^1_%ENA $43_*UNIT 2 FOR B MUST BE A CARD PUNCH UNIT_^1_%JMP* IOS74_^1*_]_^1IOS73A JMP* IOS71C_'GET THE SECOND CHARACTER_^1IOS74 LDQ- V20,I_^1_%INA -$43_)IS CARD SPECIFIED_^1_%SAZ IOS74C_'YES_^1_%INA $43-$4D_%NO,IS MAG TAPE SPECIFIED_^1_%SAZ IOS74M_'YES_^1_%INA $4D-$50_%NO,IS PAPER TAPE SPECIFIED_^1_%SAZ IOS74P_'YES_^1_%€€INA $50-$4C_%NO,IS LINE PRINTER SPEC._^1_%SAN IOS78_^1IOS74L INQ -1_^1IOS74P INQ -1_^1IOS74C INQ -2_^1IOS74M INQ -1_^1_%SQZ IOS79_(CLASS OK_^1*_]_^1IOS78 JMP IO210_(REJECT_^1*_]_^1IOS79 JMP* (IOS7)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE IOS8 TO VALIDATE A PARAMETER AS A_^1*_$VALID REPEAT COUNT (1-10)_^1*_]_^1IOS8_!ADC 0_^1_%LDA IOV01,Q_%INDEX TO THE PARAMETER IN€€ IOV05 TABLE_^1*_]_^1_%SAM IOS85_(INVALID ALPHA R/F_^1_%SAZ IOS85_(INVALID ZERO_^1_%INA -11_^1_%SAM IOS89_(VALID 1-10_^1*_]_^1IOS85 JMP* IOS78_6INVALID REJECT_^1IOS89 JMP* (IOS8)_'VALID EXIT_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO IDENTIFY A GIVEN PARAMETER_^1*_$AS AN ALPHA CHARACTER_^1*_]_^1IOS9_!ADC 0_^1_%LDA IOV01,Q_^1_%SAM IOS99_(VALID R/F CHAR_^1_%JMP* IOS€€78_(INVALID CHARACTER REJECT_^1IOS99 JMP* (IOS9)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO VALIDATE A PARAMETER AS A VALID 1-99999_^1*_$THE 1-99999 IS IN TWO WORDS OF THE PARAMETER LIST_^1*_$THE TWO WORDS ARE AS FOLLOWS_^1*_$TOTAL NBR OF RECS DIVIDED NY 32768_^1*_$ONE WORD HAS THE QUOTIENT(0-3) AND REMAINDER (0-1698)_^1*_]_^1*_$IF THE INPUT DATA IS WRITTEN TO SCRATCH V43.EQ€€.ZERO_^1*_$CHECK THE GIVEN NUMBER OF RECORDS DO NOT EXCEED THE AVLE SCRATCH_^1*_]_^1IOS10 ADC 0_^1_%STQ* IOS10V_'SAVE PARAMETER LOCATION_^1_%LDA- V43,I_(CHECK DATA TO BE WRITTEN TO SCRATCH_^1_%SAN IOS106_'SKIP IF NOT TOBE WRITTEN_^1*_]_^1_%INQ 43_+GET THE QUOTIENT_^1_%LDQ IOV01,Q_^1_%LDA- V42,I_(AVLE SCRAYCH_^1IOS102 SQZ IOS104_'SKIP IF QUOTIENT ZERO_^1*_]_^1_%INA -1_^1_%SUB€€- LPMASK+15_#SKIP IF AVLE SCTATCH .GT.32768_^1_%SAM IOS107_'REJECT IF LESS_^1*_]_^1_%JMP* IOS102_^1*_]_^1*_$COME HERE WITH QUOTIENT ZERO_^1*_$COMPARE THE AVLE SCRATCH ( IN A) AND THE PARAMETER VALUE_^1*_]_^1IOS104 LDQ* IOS10V_^1_%SUB IOV01,Q_^1_%SAM IOS107_'REJECT IF SXRATCH. LT. GINEN NBR_^1IOS106 JMP* (IOS10)_%EXIT_^1*_]_^1IOS10V NUM 0_,TEMP STORAGE_^1*_]_^1*_$SET UP FOR REJE€€CT MESSAGE AND PRINT AVLE AREA_^1IOS107 ENA -1_^1_%LDQ* IOMSDL_^1_%RTJ IOS40_^1*_]_^1_%JMP IO130_(EXIT TO GET NEXT IOUP REQU+S0_^1*_]_^1*_$IOMS13 REQUEST REJECTED BECAUSE DATA SPECIFIED IN REQUEST_^1*_-EXCEED THE AVLE SCRATCH AREA_^1*_]_^1IOMS13 ALF 15,REJ EXCEEDED MAX LIMIT_!NNNNN_^1_%NUM $200D_^1*_]_^1IOMSDL ADC IOMS13_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO GET TH€€E PHYSICAL DEVICE TABLE ADDRESS_^1*_]_^1*_$INPUT_^1*_*(Q)= INDEX TO THE REQUEST PARAMETER LIST_^1*_]_^1IOS12 ADC 0_^1_%LDQ IOV01,Q_%GET THE GIVEN LU NUMBER_^1_%LDQ* (ALOG1A),Q_"GET THE PHYSICAL DEVICE TABLE ADDRESS_^1_%STQ- V22,I_^1*_]_^1_%JMP* (IOS12)_^1*_]_^1ALOG1A ADC LOG1A_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO CHECK FILE RECORD XFER_^1*_]_^1IOSA_!ADC 0_^1*_]_^1*€€_$CHECK WHETHER R/F IS APPLICABLE TO CURRENT REQUEST_^1_%LDA- V08,I_^1_%INA -9_^1_%ENQ 3_^1_%SAM IOSA02_'SKIP NOT APPLICABLE_^1_%INA -6_^1_%SAM IOSA03_'APPLICABLE_^1*_*R/F IS NOT APPLICABLE_^1IOSA02 JMP* IOSA05_^1*_$FOR R/F APPLICABLE REQYESTS_^1IOSA03 LDA- V08,I_(REQUEST INDEX_^1_%INA -11_*FOR MB R/F IS THE 4TH PARAMETER_^1_%SAN IOSA01_'NOT MB_^1*_]_^1_%INQ 1_^1*_]_^1IOSA0€€1 LDA IOV01,Q_^1_%AND- LPMASK+8_^1_%INQ 1_,UPDATE Q TO NUMBER_^1_%INA -$46_^1_%SAZ IOSA04_'SKIP IF FILES BEING TRANSFERRED_^1*_]_^1IOSA05 RAO* IOSA_)UPDATE RETURN_^1*_]_^1*_$EXIT_^1*_]_^1IOSA04 JMP* (IOSA)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON S/R TO UPDATE THE NBR OF RECORDS READ_^1*_]_^1IOSB_!ADC 0_^1_%RAO- V37,I_^1*_]_^1_%LDA- V43,I_^1_%SAZ IOSB05_'SKIP IF SCRATCH IS USED_^1*€€_]_^1_%LDA- V37,I_^1_%SAP IOSB05_(SKIP IF .LT.32768_^1*_]_^1_%RAO- V37Q,I_'BUMP QUOTIENT_^1*_]_^1_%AND- LPMASK+15_^1_%STA- V37,I_^1*_]_^1IOSB05 JMP* (IOSB)_^1*_]_^1_%EJT_]_^1*_]_^1*_$COME HERE AFTER THE IOUP REQUEST HAS BEEN VALIDATED_^1*_]_^1*_$CHECK IF THE OUTPUT IS TO PRINTER_^1*_]_^1*_$IF YES SET THE FLAG V39,I_^1*_]_^1IOA_"ENQ 0_,INITIALIZE FOR THE TABLE SEARCH_^1*_]_^1IOA05€€ LDA* IOAT,Q_^1_%SAM IOA15_(NO MATCH FOUND SKIP_^1_%SUB- V08,I_^1_%SAZ IOA10_(MATCH FOUND_^1*_]_^1_%INQ 2_,OTHERWISE SET TO NEXT TEBLE ENTRY_^1_%JMP* IOA05_^1*_]_^1IOA10 INQ 1_,GET THE PARAMETER ADDRESS_^1_%LDQ* IOAT,Q_^1_%LDA IOV01,Q_%X PARAMETER_^1_%STA- V39,I_^1*_]_^1*_]_^1*_]_^1*_$COME HERE TO INITIALIZE THE READING OF THE INPUT DEVICE_^1*_]_^1IOA15 CLR A_^1_%STA- V30,I€€_(INDEX TO CONTROL BUFFER CURRENT ENTRY_^1_%STA- V31,I_(CLEAR CURRENT READ MODE_^1_%STA- V34,I_(CLEAR READ MODE CHANGE FLAG_^1_%STA- V35,I_(INDEX TO INPUT DATA_^1_%STA- V36,I_(CLEAR CONTROL WORD_^1_%STA- V37,I_(CLEAR NUMBER OF RECORDS READ_^1_%STA- V37Q,I_'QUOTIENT_^1_%STA- V38,I_(CLEAR NUMBER OF FILES READ_^1IOA20 INA 1_,INITIAL SCRACH ADDRESS_^1_%STA- V26,I_^1_%STA- V28,I_(SCRA€€TCH ADDRESS FOR CURRENT CONTROL BUFFER_^1_%INA 1_^1_%STA- V29,I_(SCRATCH ADDRESS FOR NEXT DATA BUFFER_^1_%LDA- VABUF,I_^1_%STA IOS20K+1_^1*_]_^1*_$GET PHYSICAL DEVICE TABLE ADDRESS FOR INPUT UNIT_^1*_]_^1_%ENQ 1_^1_%RTJ IOS12_^1*_]_^1*_$AND EXIT TO THE APPROPRIATE INPUT ROUTINE_^1*_]_^1_%LDQ- V23,I_^1_%JMP- (ZERO),Q_^1*_]_^1_%SPC 4_^1*_]_^1IOAT_!NUM 3_,+03_*CL_^1_%NUM 4_,4TH€€ PARAMETER_^1_%NUM 9_,+09_*ML_^1_%NUM 6_,6TH PARAMETER_^1_%NUM 11_++11_*MB_^1_%NUM 7_,7TH PARAMETER_^1_%NUM $8000_(END OF TABLE_^1*_]_^1_%EJT_]_^1*_]_^1*_]_^1*_$READ THE CARDS_^1*_]_^1IOC_"LDA- V32,I_(RECORD SIZE_^1_%STA- V33,I_^1*_]_^1_%CLR A_^1_%RTJ IOS38_(GET THE READ REQUEST CODE_^1_%STA* IOC50_^1*_]_^1_%LDQ- V02,I_(INPUT LU_^1_%RTJ IOS20_(READ A CARD_^1IOC50 NUM 0_,R€€EQUEST CODE_^1IOC100 JMP* IOC180_'ERROR RETURN_^1*_$NO ERROR RETURN_^1IOC110 RTJ* IOSB_)UPDATE NBR OF RECS_^1*_]_^1_%ENQ 1_,CHECK CHANGE IN READ MODE_^1*_]_^1IOC115 RTJ IOS23_^1_%JMP* IOC140_'NO CHANGE OF READ MODE_^1*_]_^1*_$FOR THE CHANGE OF MODE_^1*_]_^1_%LDA- ONEBIT+12_^1_%STA- V34,I_(SET THE READ MODE CHANGED FLAG_^1_%EOR- V31,I_(REVERSE THE READ MODE_^1_%STA- V31,I_^1_%JMP*€€ IOC150_^1*_]_^1*_$FOR NO CHANGE IN READ MODE RESET THE V34 FLAG_^1*_]_^1IOC140 CLR A_^1_%STA- V34,I_^1*_$UPDATE NO OF WORDS READ AND INDEX INTO IBUF2_^1*_]_^1IOC150 LDA- V35,I_(INDEX_^1_%ADD- V33,I_(ACTUAL NO OF WORDS READ_^1_%STA- V36,I_(CONTROL WORD_^1*_]_^1*_]_^1*_$CHECK WHETHER DATA IS TO BE WRITTEN ON INTERMEDIATE STORAGE,_^1*_$OR NOT_^1*_$V43 =0 WRITE_$V43.NE.0 DO NOT WRIT€€E_^1*_]_^1_%LDA- V43,I_^1_%SAN 2_Q63*1385_^1_%RTJ* IOC160_'CHECK IF SCRATCH IS AVAILABLE_^1_%JMP* IOC175_^1*_]_^1*_$OTHERWISE EXIT TO OUTPUT/COMPARE_^1*_]_^1_%RTJ IORTJ_^1_%JMP* IOC177_^1*_]_^1*_$BEFORE WRITING CHECK MORE SCRATCH AVLE FOR THIS WRITE._^1*_]_^1IOC160 NUM 0_^1_%CLR Q_^1_%LDA- V33,I_^1_%DVI =N96_^1_%SQZ 1_^1_%INA 1_^1_%SUB- V42,I_^1_%ADD- V37,I_^1_%SAP 1_^1_%JM€€P* (IOC160)_$OK -- SCRATCH AVAILABLE_^1_%JMP IOS107_'OTHERWISE REJECT AND PRINT DIAGNOSTIV_^1*_]_^1IOC175 RTJ IOS24_(WRITE DATA ON INTERMEDIATE STORAGE_^1IOC177 CLR A_^1_%STA- V35,I_^1_%STA- V36,I_^1*_]_^1*_$READ NEXT CARD_^1*_]_^1*_]_^1*_$CLEAR THE READ BUFFER IOBUF2 BEFORE READING NEW DATA_^1_%RTJ IOS39_^1*_]_^1*_]_^1*_$FOR THE VCM REQUEST(CODE=16) CHECK IF SPECIFIED N NBR OF€€_^1*_$CARDS READ NOW_^1*_]_^1_%LDA- V08,I_(REQUEST CODE_^1_%INA -16_^1_%SAN IOC179_'SKIP IF NOT A VCM REQUEST_^1*_]_^1*_$FOR THE VCM REQUEST_^1*_]_^1_%LDA- V43,I_^1_%SAZ IOC178_'SKIP IF SCRATCH USED_^1*_]_^1_%LDA- V04Q,I_'OTHERWISE CHECK 10**4 VALUE_^1_%SUB- V37Q,I_^1_%SAN IOC179_'SKIP IF NOT DONE_^1*_]_^1IOC178 LDA- V04,I_^1_%SUB- V37,I_(NBR OF RECORDS READ SO FAR_^1_%SAZ IOC€€190_'SKIP IF THE NBRS ARE EQUAL_^1*_]_^1IOC179 JMP* IOC_^1*_]_^1*_$CHECK ALL CARDS READ. GET STATUS OF THE DEVICE_^1*_]_^1IOC180 LDA- V02,I_(INPUT LU_^1*_]_^1*_$CHECK END OF INPUT DATA ON CARD READER_^1*_]_^1_%RTJ IOS33_^1*_]_^1_%JMP* IOC190_'END OF DATA_^1*_$FOR ERRORS_^1_%LDA- V02,I_(LU_^1_%JMP IOR072_'I/O ERROR MESSAGE_^1*_]_^1IOC190 RAO- V53,I_(SET END OF DATA FLAG (ALL DEVICE€€S_"63*1385_^1_%LDA- V43,I_(CHECK IF DATA ON SCRATCH_,63*1385_^1_%SAZ IOC195_'SKIP IF WRITTEN_^1_%JMP IOR131_'OTHERWISE EXIT_^1*_]_^1*_$SET THE END DATA FLAG IN THE CONTROL BLOCK AFTER LAST ENTRY_^1*_]_^1IOC195 LDA =N$5555_^1_%LDQ- V30,I_(ENTRY IN CONTROL BUFFER_^1_%ADQ- VDBL,I_^1_%STA- (ZERO),Q_^1_%RTJ IOS25_(WRITE THE CONTROL BUFFER_^1_%JMP IOR_*EXIT TO OUTPUT THE DATA_^1*_]_€€^1_%EJT_]_^1*_]_^1*_]_^1*_$COME HERE TO READ MAGNETIC TAPE_^1*_]_^1*_]_^1IOM_"LDA- ONEBIT+12_^1_%STA- V31,I_^1*_]_^1*_$INITIALIZE TO READ MAX RECORD SIZE (ASSY PARAMETER) IN IOBUF2_^1*_]_^1IOM10 LDA- V32,I_(NUMBER TO BE READ_^1_%STA- V33,I_(NUMBER ACTUALLR READ_^1_%RTJ IOS39_(CLEAR THE IOBUF2 FOR NEXT DATA_^1_%ENA 0_^1_%RTJ IOS38_(GET THE REQUEST CODE_^1_%STA* IOM12_^1_%LDQ- V0€€2,I_(INPUT LU_^1*_]_^1*_$READ MAGNETIC TAPE_^1*_]_^1_%RTJ IOS20_^1IOM12 NUM 0_,REQUEST CODE_^1_%JMP* IOM175_'ERROR IN READ_^1*_]_^1*_$NO READ ERROR RETURN_^1*_]_^1_%CLR A_,RESET READ MODE CHANGE FLAG._^1_%STA- V34,I_^1*_]_^1*_$UPDATE THE NO OF RECORDS READ_^1*_]_^1*_$UPDATE THE NUMBER OF WORDS READ_^1*_]_^1_%LDA- V33,I_^1_%STA- V36,I_^1*_]_^1_%RTJ IOSB_)UPDATE NBR OF RECS_^1*_€€]_^1*_$CHECK WHETHER THE SCRATCH IS TO BE USED OR NOT_^1*_$V43=0 USE SCRATCH V43.NE.0 DO NOT USE SCRATCH._^1*_]_^1IOM15 LDA- V43,I_(SKIP TO USE SCRATCH_^1_%SAZ IOM16_(SKIP TO USE SCRATCH_^1*_]_^1_%RTJ IORTJ_(OTHERWISE STAGE 2_^1_%JMP* IOM140_^1*_]_^1*_$WRITE THE DATA READ ONTO SCRATCH AREA OF THE_^1*_$LIBRARY UNIT_^1*_]_^1IOM16 RTJ* IOC160_^1*_]_^1IOM17 RTJ IOS24_(WRITE ON S€€CRATCH_^1*_]_^1*_$FOR VMM REQUEST CHECK SPECIFIED NUMBER OF RECS CHECKED._^1*_]_^1IOM140 LDA- V40,I_(FOR VMX REQUEST CHECK SPECIFIED NUMBER OF_^1*_8RECORDS STORED_^1*_]_^1_%SAZ IOM147_'NOT A VMX REQUEST_^1_%LDA- V43,I_^1_%SAZ IOM142_'SKIP IF SCRATCH ISED_^1*_]_^1_%LDA- V04Q,I_'CHECK QUOTIENTS_^1_%SUB- V37Q,I_^1_%SAN IOM145_'SKIP IF NOR DONE_^1*_]_^1IOM142 LDA- V04,I_^1_%SUB- V37€€,I_^1_%SAN IOM145_'SKIP IF NOT DONE_^1*_]_^1_%JMP* IOC190_'ALL DONE_^1*_]_^1IOM145 JMP* IOM10_^1*_]_^1*_$CHECK RECORDS/FILES BEING TRANSFERRED_^1*_]_^1*_]_^1IOM147 RTJ IOSA_^1*_]_^1_%JMP* IOM10_^1*_]_^1IOM148 LDA- V43,I_^1_%SAZ IOM150_'SKIP IF USED_^1_%INQ 43_^1_%LDA IOV01,Q_%GET QUOTIENT_^1*_]_^1_%SUB- V37Q,I_^1_%INQ -43_^1_%SAN IOM155_'SKIP IF NOT ALL DONE_^1*_]_^1IOM150 L€€DA IOV01,Q_^1_%SUB- V37,I_^1_%SAZ IOM173_'SKIP IF ALL DONE_^1*_]_^1IOM155 JMP* IOM10_(OTHERWISE GET NEXT RECORD IF ANY_^1*_]_^1IOM173 JMP* IOC190_^1*_]_^1*_$COME HERE FOR A READ ERROR._^1*_]_^1IOM175 LDA- V02,I_(INPUT LU_<63*1384_^1_%RTJ IOS33_(CHECK STATUS_863*1384_^1_%JMP* IOM176_'EOF_^1_%JMP* IOM183_'OTHER ERRORS_^1_%JMP* IOM181_'PARITY ERROR_^1*_]_^1*_$FOR THE END OF FILE_^1€€*_]_^1IOM176 RAO- V38,I_(BU8P NBR OF FILES_^1_%RAO- V53,I_(SET EOF ON INPUT UNIT_^1_%RTJ IOSB_)BUMP NBR OF RECS_^1*_]_^1_%LDA- V02,I_(PRINT EOF ON LU MESSAGW_^1_%LDQ* IOMS6L_^1_%RTJ IOS35_^1*_]_^1_%LDA- V43,I_(CHECK SCRATCH USED OR NOT_^1_%SAZ IOM177_'SKIP IF USED_^1*_]_^1_%RTJ IORTJ_(OTHERWISE OUTPUT EOF_^1_%JMP* IOM178_^1*_]_^1IOM177 RTJ* IOM190_'WRITE EOF FLAG $5554_^1*_]_^1€€IOM178 RTJ IOSA_)CHECK R/F TRANSFER_^1_%JMP* IOM179_'FOR FILES_^1*_]_^1_%JMP* IOM148_'FOR RECS_^1*_]_^1IOM179 LDA- V38,I_(CHECK ALL FILES DONE_^1_%SUB IOV01,Q_^1_%SAN IOM17A_'SKIP IF NOT_^1*_]_^1_%JMP* IOM173_'OTHERWISE EXIT_^1*_]_^1IOM17A JMP* IOM10_(GET NEXT DATA_^1*_]_^1*_$FOR PARITY ERROR CHECK IF ANY CHANGE OF MODE DETECTED_^1*_]_^1IOM181 LDA- V34,I_^1_%SAZ IOM184_'FOR NO €€CHANGE OF MODE._^1IOM182 LDA- V02,I_(LU REJECT IF MODE CHANGED_^1_%JMP IOR072_^1*_]_^1IOM183 LDA- 12,Q_)CHECK END OF TAPE_^1_%AND- ONEBIT+9_^1_%SAN IOM18A_'SKIP IF END OF TAPE_^1_%JMP* IOM182_'OTHERWISE REJECT_^1*_]_^1IOM18A JMP* IOM173_'JMP IF END OF TAPE_^1*_]_^1*_$TRY A READ WITH THE REVERSED MODE_^1*_]_^1IOM184 LDA- V31,I_^1_%EOR- ONEBIT+12_^1_%STA- V31,I_^1*_]_^1*_$SET MODE €€CHANGED FLAG_^1*_]_^1_%ENA 1_^1_%STA- V34,I_^1*_]_^1*_$READ AGAIN_^1*_]_^1*_$BACKSPACE ONE RECORD IN CASE OF PARITY ERROR_^1*_]_^1_%LDA- V02,I_(LU_^1_%STA* IOM185_^1*_]_^1_%RTJ- (AMONI)_^1_%NUM $5C00_(+0 RC TAPE MOTION REQUEST_^1_%ADC IOM188_'+1 CA_^1IOM186 ADC 0_,+2 T_^1IOM185 NUM 0_,+3 V,M,A,LU_^1_%NUM $1000_(+4 BACKSPACE A RECORD_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOM188 LDA €€=XIOV_(RESTORE I_^1_%STA- I_^1*_]_^1_%LDA* IOM185_'CHECK ANY ERROR_^1_%SAP IOM189_^1_%JMP* IOM182_^1*_]_^1IOM189 JMP* IOM10_(NO ERROR_<63*1385_^1*_]_^1*_]_^1*_$S/R TO ENTER $5554 AS EOF INDICATOR IN THE CONTROL BUFFER_^1*_]_^1IOM190 ADC 0_^1_%LDA =N$5554_^1_%LDQ- V30,I_(INDEX TO CONTROL BUFFER ENTRY_^1_%STA (IOV01+VDBL-1),Q_^1_%INQ -95_^1_%SQN IOM195_'NOT THE END OF CONTROL B€€UFFER_^1_%RTJ IOS25_(OTHERWISE WRITE CONTROL BUFFER_^1*_]_^1IOM195 RAO- V30,I_(UPDATE INDEX TO CONTRIL BUFFER ENTRY_^1*_]_^1*_$EXIT_^1*_]_^1_%JMP* (IOM190)_^1*_]_^1_%SPC 4_^1*_]_^1*_$EOF FOUND MESSAGE_^1*_]_^1IOMS6 ALF 10,EOF ON INPUT LU NNNN_^1_%NUM $200D_^1*_]_^1IOMS6L ADC IOMS6_^1*_]_^1_%EJT_]_^1*_]_^1*_]_^1*_$COME HERE TO READ THE PAPER TAPE_^1*_]_^1*_$SET UP TO READ THE €€PAPER TAPE_^1*_]_^1*_]_^1*_]_^1*_$GET THE REQUESTED MODE OF READ_^1*_]_^1IOP_"LDA- V09,I_(CHECK FOR $PP/$VPP REQUESTS. FOR THESE_^1_%SUB =N$5050_^1_%SAN IOP10_(NOT A $PP/$VPP REQUEST SKIP_^1_%JMP* IOP40_(SET UP FOR BINARY READ_^1*_]_^1IOP10 LDA- V08,I_^1_%ENQ 3_^1_%INA -6_^1_%SAN IOP20_(SKIP IF NOT A PB_^1_%INQ 1_,FOR PB_^1IOP20 LDA IOV01,Q_^1_%EOR- ONEBIT+15_^1_%INA -$41€€_^1_%SAZ IOP30_(SKIP IF ASCII MODE_^1_%CLR A_,SET FOR BINARY MODE_^1_%JMP* IOP40_^1*_]_^1IOP30 LDA- ONEBIT+12_^1IOP40 STA- V31,I_^1*_]_^1IOP50 RTJ IOS39_(CLEAR IOBUF2 FOR NEXT DATA_^1*_]_^1*_]_^1_%ENA 0_,GET READ MODE AS PER REQUEST CODE_^1_%RTJ IOS38_^1_%STA* IOP55_^1*_]_^1_%LDA- V32,I_^1_%STA- V33,I_^1_%LDQ- V02,I_(INPUT LU_^1_%RTJ IOS20_(READ THE INPUT DEVICE_^1IOP55 N€€UM 0_,READ(0200)/ FREAD (0800)_^1_%JMP* IOP150_'FOR ERROR ANALYSIS_^1*_]_^1_%LDA- V31,I_(READ MODE_^1_%SAZ IOP100_'SKIP IF BINARY_^1_%LDA- ONEBIT+15_^1IOP100 EOR- V33,I_(NO OF WORDS ACTUALLY READ_^1_%LDQ- V30,I_(INDEX TO CURRENT ENTRY IN CONTROL BUFFER_^1_%ADQ- VDBL,I_^1_%STA- (ZERO),Q_^1*_]_^1*_$GET THE NUMBER OF WORDS TO BE WRITTEN_^1*_]_^1_%LDA- V33,I_^1_%SUB- V35,I_^1_%STA- V€€36,I_^1*_]_^1_%LDA- V43,I_(CHECK WHETHER SCRATCH TO BE USED_^1_%SAN IOP107_'SKIP IF SCRATCH NOY USED_^1*_]_^1_%RTJ IOC160_'CHECK IF SCRATCH IS AVAILABLE_^1*_]_^1*_$WRITE TO SCRATCH AREA_^1*_]_^1IOP105 RTJ IOS24_^1_%JMP* IOP110_^1*_]_^1IOP107 RTJ IORTJ_(OUTPUT RECORD_^1*_]_^1*_$UPDATE THE NUMBER OF RECORDS READ_^1*_]_^1IOP110 RTJ IOSB_)UPDATE NBR OD RECS_^1*_]_^1*_$CHECK GIVEN €€NUMBER OF RECORDS READ_^1*_]_^1IOP115 ENQ 2_^1_%LDA- V08,I_(INDEX TO CURRENT REQYEST CODE_^1_%INA -6_^1_%SAM IOP124_'FOR PL,PC_"=4_^1_%SAZ IOP120_'FOR PB =5_^1_%INA -1_^1_%SAZ IOP128_'FOR $PP = 3_^1_%INA -10_^1_%SAN IOP124_^1_%JMP* IOP50_($VPP REQUEST_^1IOP120 INQ 1_^1IOP124 INQ 1_^1IOP128 INQ 1_^1*_]_^1IOP130 LDA- V43,I_^1_%SAZ IOP132_'SKIP IF SCRATCH ISED_^1*_]_^1_%INQ €€ 43_^1_%LDA IOV01,Q_%CHECK QUOTIENTS_^1_%INQ -43_^1_%SUB- V37Q,I_^1_%SAN IOP135_'SKIP IF NOT DONE_^1*_]_^1IOP132 LDA IOV01,Q_^1_%SUB- V37,I_^1_%SAZ IOP140_'ALL DONE SKIP_^1*_]_^1IOP135 JMP* IOP50_(READ NEXT DATA_^1*_$ALL INPUT IN_^1IOP140 JMP* IOP160_^1*_]_^1*_]_^1*_$FOR AN ERROR IN READ_^1*_$CHECK FOR A MOTION FAILURE_^1*_]_^1IOP150 LDA- V02,I_(FIRST INPUT LU_663*1384_^1_%RTJ€€ IOS33_(CHECK STATUS_863*1384_^1_%JMP* IOP155_'END OF DATA_963*1384_^1*_]63*1384_^1*_8ERROR RETURN_863*1384_^1*_]63*1384_^1_%LDA- V02,I_^1_%JMP IOR072_^1*_]_^1IOP155 LDA IOS2E_^1_%AND- ONEBIT+14_#CHECK SHORT READ_^1_%SAZ IOP157_'SKIP IF NO SHORT READ_^1*_]_^1_%LDQ IOS2G_(FOR SHORT READ GET ACTUAL NBR OF WORDS_^1_%ADQ IOS2F_^1_%INQ -1_^1_%LDA- (ZERO),Q_^1_%SUB IOS2G_^1_%STA-€€ V33,I_^1*_]_^1_%SAN IOP157_^1_%JMP* IOP160_^1IOP157 LDA- V31,I_(WRITE THE DATA READ SO FAR_^1_%EOR- V33,I_(NBR OF WORDS READ_^1_%LDQ- V30,I_(INDEX TO CURRENT ENTRY IN CONTROL BUFFER_^1_%ADQ- VDBL,I_^1_%STA- (ZERO),Q_^1*_]_^1_%LDA- V33,I_(NBR OF WORDS TO BE WRITTEN_^1_%STA- V36,I_^1_%LDA- V43,I_^1_%SAN IOP15A_'SKIP IF SCRATCH NOT USED_^1*_]_^1_%RTJ IOC160_'CHECK IF SCRATCH IS AV€€AILABLE_^1*_]_^1IOP15A RTJ IORTJ_(OUTPUT ONE RECORD_^1_%JMP* IOP15B_^1*_]_^1IOP159 RTJ IOS24_(WRITE DATA TO SCRATCH_^1IOP15B RTJ IOSB_)UPDATE NBR OF RECORDS_^1*_]_^1IOP160 JMP IOC190_'SET END OF DATA FLAG AND WRITE CONTROL_^1*_]_^1_%SPC 4_^1_%EJT_]_^1*_]_^1*_$COME HERE FOR MOTION CONTROL REQUESTS_^1*_]_^1IOT_"ENQ 1_,GET PHYSICAL DEVICE TABLE ADDRESS_^1_%RTJ IOS12_^1_%CLR A_€€,CLEAR REQUEST CODE WORD_^1_%STA IOT311_^1_%STA IOT408_^1_%LDQ- V08,I_(GET REQUEST INDEX_^1_%ADQ =XIOT03_^1_%LDQ- (ZERO),Q_$SELECT PARAMETER VALIDATION ROUTINE_^1_%JMP- (ZERO),Q_$AS PER THE REQUEST_^1_%SPC 4_^1*_]_^1*_$FOR THE TAF, TAR, TBF, AND TBR_^1*_]_^1*_$CHECK THE PARAMETER TO BE 1-4095 FOR FIL/REC SKIP/BACK SPACING_^1*_]_^1*_]_^1IOT100 LDQ- V03,I_(2ND PARAMETER_^1_%SQZ €€IOT105_'ZERO IS INVALID_^1_%TRQ A_^1_%SUB- ONEBIT+12_#LESS THAN 4096_^1_%SAM IOT106_^1*_]_^1IOT105 JMP IO210_(FORMAT ERROR MESSAGE_^1IOT106 LDA- V09,I_^1_%ARS 8_^1_%AND- LPMASK+8_^1_%INA -$41_^1_%SAZ IOT107_^1_%JMP IOTBFR_'FOR BACKSPACING_^1IOT107 JMP* IOTAFR_'FOR ADVANCING_^1_%SPC 4_^1*_$FOR TSD_^1*_]_^1*_$THE SECOND PARAMETER SHOULD BE 0,2,5 OR 8._^1*_]_^1IOT110 LDQ- V03,€€I_(2ND PARAMETER_^1_%SQZ IOT115_'SKIP IF 0. OK._^1*_]_^1_%INQ -2_^1_%SQZ IOT115_'SKIP IF 2. O.K._^1*_]_^1_%INQ -3_^1*_]_^1_%SQZ IOT115_'SKIP IF 5. O.K_^1*_]_^1_%INQ -3_^1*_]_^1_%SQZ IOT115_'SKIP IF 8. O.K._^1*_]_^1_%JMP* IOT105_'OTHERWISE REJECT._^1*_]_^1IOT115 LDA- V03,I_^1_%AND- LPMASK+2_^1_%INA 1_^1_%STA- V39,I_(SAVE IT TEMPORARILY_^1_%JMP IOTSD_^1*_]_^1_%SPC 4_^1*_]_^€€1*_$COME HERE FOR SKIPPING FORWARD RECORDS/FILES ON A MAG.TAPE_^1*_]_^1*_$INITIALIZE_^1*_*V37=NUMBER OF RECORDS SKIPPED_^1*_*V38=NUMBER OF FILES SKIPPED_^1*_]_^1IOTAFR CLR A_^1_%STA- V37,I_(NUMBER OF RECORDS SKIPPED_^1_%STA- V38,I_(NUMBER OF FILES SKIPPED_^1_%STA- V31,I_(BINARY READ MODE_^1*_]_^1*_]_^1IOT150 LDA- V02,I_(LU_^1_%STA* IOT162_^1*_]_^1*_$CHECK FILE/RECORD TO BE SKIPPED€€_^1*_]_^1_%LDA- V09,I_^1_%AND- LPMASK+8_^1_%INA -$46_^1_%SAN IOT154_'SKIP FOR RECORDS_^1*_$FOR FILE_^1_%ENA 5_,SKIP ONE FILE FORWARD_^1_%JMP* IOT156_^1*_$FOR RECORDS_^1IOT154 ENA 7_^1*_]_^1IOT156 ALS 12_^1_%STA* IOT163_^1*_]_^1*_*CHECK TAPE AT END OF TAPE_^1IOT158 LDA- V02,I_^1_%RTJ IOS22_^1_%AND- ONEBIT+9_^1_%SAZ IOT160_'NOT THE EOT_^1_%JMP* IOT175_^1IOT160 RTJ- (AMONI)_^1_€€%NUM $5C00_(TAPE MOTION REQUEST_^1_%ADC IOT167_'+1 CA_^1IOT161 ADC 0_,+2 T_^1IOT162 NUM 0_,+3 V,M,A,LU_^1IOT163 NUM 0_,+4 TAPE MOTION_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOT167 LDA =XIOV_(RESTORE I_^1_%STA- I_^1_%LDQ- V22,I_(PHYS TABLE ADDRESS_^1_%LDA- 12,Q_)STATUS_>61*1299_^1_%STA- V36,I_(SAVE STATUS TEMPORARILY_^1*_]_^1_%LDA* IOT162_'CHECK ANY ERROR_^1_%SAP IOT170_'NO ERROR_^1_€€%LDA- V36,I_^1_%AND- ONEBIT+9_$CHECK ANY EOT_^1_%SAN IOT175_'SKIP IF THE EOT IS FOUND_^1_%LDA* IOT162_^1IOT169 JMP IOR072_'I/O ERROR_^1*_]_^1IOT170 RTJ IOS30_(CHECK ALL TAPE MOTION DOBE_^1_%JMP* IOT175_'ALL DONE_^1_%JMP* IOT158_^1*_]_^1IOT175 JMP* IOT230_^1*_]_^1*_$COME HERE TO TYPE OUT A MESSAGE INDICATING NUMBER OF_^1*_$FILES/RECORDS ADVANCED_^1*_]_^1IOT230 LDA =A S_^1_%STA* €€IOMS8+2_^1_%LDA =AKI_^1_%STA* IOMS8+3_^1_%LDA =APD_^1_%STA* IOMS8+4_^1*_]_^1*_$ENTER FILE/RECORDS AS PER REQUEST_^1*_]_^1IOT235 LDA- V09,I_^1_%AND- LPMASK+8_^1_%INA -$46_^1_%SAZ IOT240_'SKIP IF FILES_^1*_]_^1_%LDA =A R_^1_%STA* IOMS8+5_^1_%LDA =AEC_^1_%STA* IOMS8+6_^1_%LDA =AS_^1_%JMP* IOT245_^1*_*FOR FILES_^1IOT240 LDA =A F_^1_%STA* IOMS8+5_^1_%LDA =AIL_^1_%STA* IOMS8+6_€€^1_%LDA =AE_^1IOT245 STA* IOMS8+7_^1*_]_^1_%LDA- V33,I_(NUMBER TO BE INSERTED_^1_%LDQ IOMS8L_^1_%RTJ IOS35_^1_%JMP IO130_^1*_]_^1*_$ADVANCED/BACKSPACED NNN FILES/RECORDS MESSAGE_^1*_]_^1IOMS8 ALF 10,UNIT AAAAA BBBB NNNN_^1_%NUM $200D_^1*_]_^1*_*AAAA=SKIPD/BACKD_^1*_*BBBB = RECS/FILE_^1*_*NNNN =NUMBER_^1*_]_^1_%SPC 4_^1*_]_^1*_$COME HERE FOR THE TBF,TBR_^1*_]_^1IOTBFR CLR A€€_^1_%STA- V37,I_(NUMBER OF RECORDS BACKSPACED_^1_%STA- V38,I_(NUMBER OF FILES BACKSPACED_^1*_]_^1*_$CHECK FOR FILE OR RECORD BACKING_^1IOT302 LDA- V09,I_^1_%AND- LPMASK+8_^1_%INA -$46_^1_%SAN IOT304_'SKIP FOR RECORDS_^1*_]_^1_%ENA 6_,FOR FILES_^1_%JMP* IOT306_^1*_]_^1*_$FOR RECORDS_^1*_]_^1IOT304 ENA 1_,FOR RECORDS_^1*_]_^1IOT306 ALS 12_^1_%STA* IOT311_^1*_]_^1_%LDA- V02,I_^1_€€%STA* IOT310_^1*_]_^1*_]_^1*_$CHECK TAPE AT LOAD POINT_^1*_]_^1IOT307 LDA- V02,I_(LU_^1_%RTJ IOS22_(GET STATUS OF THE TAPE UNIT_^1*_]_^1_%AND- ONEBIT+10_#CHECK TAPE AT LOAD POINT_^1_%SAZ IOT308_'NOT THE LOAD POINT_^1_%JMP* IOT320_'ALL DONE_^1IOT308 RTJ- (AMONI)_^1_%NUM $5C00_(+0 RC TAPE MOTION CONTROL REQUEST_^1_%ADC IOT316_'+1 CA_^1IOT309 ADC 0_,+2 T_^1IOT310 NUM 0_,+3 V,M,A€€,LU_^1IOT311 NUM 0_,+4 MOTION REQUEST_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOT316 LDA =XIOV_(RESTORE I_^1_%STA- I_^1*_]_^1_%LDQ- V22,I_^1_%LDA- 12,Q_^1_%STA- V36,I_(SAVE STATUS_^1*_]_^1_%LDA* IOT310_'CHECK ERRORS_^1_%SAP IOT318_^1_%LDA- V36,I_^1_%AND- ONEBIT+10_^1_%SAN IOT320_^1*_]_^1_%LDA* IOT310_^1_%JMP IOT169_^1IOT318 RTJ IOS30_(CHECK ALL MOTION DONE_^1*_]_^1_%JMP* IOT320_'ALL D€€ONE_^1_%JMP* IOT307_'NOT DONE. LOOP_^1*_]_^1*_]_^1*_]_^1*_$FORMAT THE BACKED TAPE MESSAGE_^1*_]_^1IOT320 LDA =A B_^1_%STA* IOMS8+2_^1_%LDA =AAC_^1_%STA* IOMS8+3_^1_%LDA =AKD_^1_%STA* IOMS8+4_^1_%JMP IOT235_^1*_]_^1_%SPC 4_^1*_]_^1*_$FOR TAPE UNLOAD_^1*_*608,609 -WILL BE UNLOADED_^1*_*601-_"-WILL BE REWOUND AND POSITIONED AT LOADING POINT_^1*_]_^1IOTUL ENA 4_,REWIND AND UNLOA€€D TAPE REQUEST_^1_%JMP* IOT400_^1_%SPC 4_^1*_]_^1*_$FOR TAPE REWIND_^1*_*TAPE WILL BE AT LOADING POINT AFTER EXECUTION_^1*_]_^1IOTREW ENA 3_^1_%JMP* IOT400_^1*_]_^1_%SPC 4_^1*_]_^1*_$FOR WRITE END OF FILE_^1*_]_^1IOTEOF ENA 2_^1_%JMP* IOT400_^1*_]_^1_%SPC 4_^1*_]_^1*_$FOR SET DENSITY_^1*_]_^1IOTSD LDA- V39,I_(GET SET DENSITY CODE_^1_%STA* IOT408_^1_%CLR A_^1*_]_^1*_$SET UP M€€OTION REQUEST WORD_^1*_]_^1IOT400 ALS 12_^1_%EOR* IOT408_^1_%STA* IOT408_^1_%LDA- V02,I_^1_%STA* IOT406_^1*_]_^1_%RTJ- (AMONI)_^1_%NUM $5C00_(+0 RC TAPE MOTION REQ_^1_%ADC IOT415_'+1 CA_^1IOT405 ADC 0_,+2 T_^1IOT406 NUM 0_,+3 V,M,A,LU_^1IOT408 NUM 0_,+4 MOTION REQUEST_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOT415 LDA* IOT406_^1_%SAP IOT416_'SKIP OF NO ERROR_^1*_]_^1_%JMP* IOR072_'RE€€JECT IF IN ERROR_^1*_]_^1IOT416 JMP IO130_(OTHERWISE EXIT_^1*_]_^1*_]_^1*_]_^1_%EJT_]_^1*_]_^1*_]_^1*_$ENTRY AT IORTJ WHEN THE DATA READ FROM U1 WAS NOT WRITTEN_^1*_$TO THE SCRATCH AREA._^1*_]_^1IORTJ ADC 0_^1*_]_^1*_$INITIALIZE FOR OUTPUT_^1*_$GET THE OUTPUT DEVICE LU_^1*_]_^1*_]_^1*_$GET THE LU OF THE SPECIFIED OUTPUT DEVICE. 2ND PARAMETER OF_^1*_$THE REQUEST_^1*_]_^1IOR_"LDA-€€ V40,I_M63*1383_^1_%SAN IORX_)SKIP IF VERIFY_663*1383_^1_%LDA IOS34X_L63*1383_^1_%SAN IORX_)CHECK MADE ONCE_563*1383_^1_%RAO IOS34X_'FIRST TIME_:63*1383_^1_%RTJ IOS34_(CHECK FOR SAME UNITS_063*1383_^1IORX_!LDA- V03,I_(SECOND UNIT_963*1383_^1_%STA- V12,I_(SAVE IT TEMPORARILI_^1_%LDA- V09,I_^1_%AND- LPMASK+8_^1_%INA -$42_^1_%SAN IOR01A_'SKIP NOT A B REQUEST_^1_%LDA- V12,I_^1_%€€LDQ- V25,I_^1_%STQ- V12,I_(SET TO PRINT THEN PUNCH_^1_%STA- V25,I_^1*_]_^1*_$CHECK WHETHER THE DATA WAS WRITTEN ON SCRATCH_^1*_]_^1IOR01A LDA- V43,I_^1_%SAZ IOR010_'SKIP IF DATA WAS WRITTEN_^1_%JMP* IOR74A_'OTHERWISE JUMP_^1*_]_^1*_]_^1*_$RESET THE NUMBER OF RECORDS READ SO FAR_^1IOR010 CLR A_^1_%STA- V37,I_^1_%STA- V38,I_(CLEAR THE FILES COUNT_^1_%STA- V37Q,I_^1_%STA- V53,I_^1*_$€€INITIALIZE TO READ THE DATA STORED IN THE SCRATCH AREA OF_^1*_$THE SCRATCH UNIT ($B3= ADDRESS OF THE SCRATCH UNIT)_^1*_$EACH BLOCK OF DATA IS PRECEDED BY A CONTROL BUFFER BLOCK_^1*_$OF 96 WORD SUCH THAT EACH WORD OF THE CONTROL BUFFER IDICATES_^1*_$THE MODE, NUMBER OF WORDS IN THE DATA BLOCK CORRESPONDING TO_^1*_$THIS WORD._^1*_$THE END OF THE INPUT DATA IS INDICATED BY THE WORD $5€€555 IN_^1*_$THE WORD FOLLOWING THE LAST DATA WORD IN THE CONTROL BUFFER._^1*_$THIS END MARKER COULD BE ALSO THE FIRST WORD IF THE PRECEDING_^1*_$CONTROL BUFFER WAS FULL._^1*_]_^1*_$SET UP TO GET THE FIRST CONTROL BUFFER._^1*_]_^1_%LDA- VDBL,I_^1_%STA* IORI_^1_%LDA- V26,I_(START SCRATCH ADDRESS_^1_%STA- V28,I_(SCRATCH ADDRESS FOR CURRENT CONTROL BUFFER_^1IOR015 STA* IORD_^1*_]_^1*_$€€READ THE CONTROL BUFFER INTO IOBUF3_^1*_]_^1IOR020 RTJ- (AMONI)_^1_%NUM $4800_(+0 FREAD_^1_%ADC IOR030_'+1 CA_^1IORB_!ADC 0_,+2 THREAD_^1IORC_!NUM $08B3_(+3 V,M,A,LU_^1_%NUM 96_++4 NO OF WORDS TO BE READ_^1IORI_!ADC 0_,+5 START ADDRESS_^1_%NUM 0_,+6 MSB_^1IORD_!NUM 0_,+7 LSB_^1*_]_^1_%JMP- (ADISP)_^1*_$ABORT IF ANY READ ERROR_^1*_]_^1IOR030 LDA* IORC_^1_%SAP IOR035_'SKIP N€€O READ ERROR_^1_%LDA- $B3_*LU_^1_%JMP* IOR072_^1IOR035 LDA =XIOV_(RESTORE I_^1_%STA- I_^1_%CLR Q_,RESET INDEX TO CONTROL WORD =0_^1_%STQ- V30,I_^1*_]_^1*_$CHECK IF ALL DATA ALREADY WAS OUTPUT_^1*_]_^1_%LDA* (IORI)_^1*_]_^1*_$GET THE CONTROL WORD ASSOCIATED WITH THE DATA BLOCK_^1*_$INDEX TO CURRENT ENTRY = V30_^1*_]_^1_%STA- V36,I_^1_%EOR =N$5554_%CHECK EOF_^1_%SAZ IOR35A_'SKIP €€IF EOF_^1_%JMP* IOR036_'NO EOF_^1*_]_^1IOR35A LDA- V40,I_^1_%SAZ IOR35B_'SKIP IF NOT A VERIFY REQUEST_^1_%RAO- V53,I_(SET EOF FLAG ON FIRST INPUT_)63*1385_^1_%JMP IOR200_^1IOR35B CLR A_,RESET EOF FLAG_^1_%STA- V53,I_^1_%RTJ IOS42_^1*_]_^1_%RAO- V38,I_(BUMP NBR OF FILES_^1*_]_^1_%RTJ IOSB_)BUMP NBR OF RECS_^1*_]_^1_%JMP IOR120_^1*_]_^1IOR036 INA -1_+CHECK END OD INPUT DATA =N€€$5555_^1_%SAN IOR040_'NOT THE END OF DATA_^1_%RAO- V53,I_(SET EOF FLAG ON FIRST INPUT (VXX)_"63*1385_^1_%JMP IOR131_'YES_^1*_]_^1*_]_^1*_$INITIALIZE TO READ THE DATA CORRESPONDING TO THE ENTRY_^1*_$WORD IN THE CONTROL BUFFER_^1*_]_^1IOR040 RAO- V28,I_(BUMP SCRATCH ADDRESS FOR DATA_^1IOR042 LDA- V28,I_^1_%STA* IORH_)LSB ADDRESS FOR DATA READ_^1*_]_^1*_$GET THE MODE AND NUMBER OF W€€ORDS FOR THE CURRENT DATA BLOCK_^1*_]_^1_%LDA- V36,I_^1_%ENQ 0_^1_%SAP IOR050_'BINARY MODE_^1_%LDQ- ONEBIT+12_#ASCII MODE_^1IOR050 STQ- V31,I_^1_%AND- LPMASK+15_#(A) = CONTROL WORD_^1_%STA* IORG_)NO OF WORDS TO BE READ_^1_%STA- V33,I_M63*1385_^1*_]_^1*_$READ THE DATA BLOCK_^1*_]_^1IOR060 RTJ- (AMONI)_^1_%NUM $4800_(+0 FREAD_^1_%ADC IOR070_'+1 CA_^1IORE_!ADC 0_,+2 THREAD_^1IORF€€_!NUM $08B3_(+3 V,M,A,LU_^1IORG_!NUM 0_,+4 NO OF WORDS TO BE READ_^1_%ADC IOBUF2_'+5 START ADDRESS_^1_%NUM 0_,+6 MSB_^1IORH_!ADC 0_,+7 LSB_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOR070 LDA =XIOV_(RESTORE I_^1_%STA- I_^1*_]_^1*_$CHECK ANY ERRORS_^1*_]_^1_%LDA* IORF_^1_%SAP IOR074_'NO ERROR_^1*_$SEND THE I/O ERROR MESSAHE_^1_%LDA- $B3_*LU_^1IOR072 AND- LPMASK+11_^1_%LDQ IOMS7L_^1_%RT€€J IOS35_^1*_$CHECK PROCESSING A VXX RREQUEST_^1_%LDA- V40,I_^1_%SAZ IOR073_'NOT A VXX REQUEST_^1_%JMP IOR225_^1*_]_^1IOR073 JMP IO130_(SOLICIT NEXT IOUP REQUEST_^1*_]_^1*_]_^1IOR074 RTJ IOSB_)BUMP NBR OF RECS_^1*_]_^1*_$CHECK WHETHER PROCESSINF A VXX REQUEST_^1*_]_^1IOR74A LDA- V40,I_^1_%SAZ IOR075_'NOT A VXX REQUEST_^1_%JMP IOR200_'PROCESS THE VXX REQUEST_^1*_$SET UP TO OUT€€PUT THE DATA OF IOBUF2 TO THE SPECIFIED DEVICE._^1*_]_^1IOR075 LDA- V53,I_^1_%SAZ IOR75A_'SKIP IF NO EOF ON INPUT_^1*_]_^1_%CLR A_,RESET EOF FLAG_^1_%STA- V53,I_^1_%RTJ IOS42_(OTHERWISE WRIT EOF_^1*_]_^1_%JMP* IOR120_^1*_]_^1IOR75A LDA- V12,I_(LU_^1*_]_^1_%EOR- V31,I_(PLUS THE MODE OF DATA_^1_%STA* IORK_^1_%LDA- VABUF,I_^1_%STA* IORM_^1_%LDA- V43,I_(CHECK DATA WAS WRITTEN TO SCR€€ATCH_^1_%SAZ IOR076_'SKIP IF WRITTEN_^1_%LDA- V33,I_(NBR OF WORDS TO BE OUTPUT_^1_%STA* IORL_^1_%STA* IORG_^1_%JMP* IOR76_^1*_]_^1IOR076 LDA* IORG_)NBR OF WORDS READ EARLIER_^1_%STA* IORL_^1_%CLR Q_,BUMP SCRATCH ADDRESS_^1_%DVI* IORC+1_'FOR NEXT WRITE_^1_%SQZ 1_^1_%INA 1_^1_%ADD- V28,I_^1_%STA- V28,I_^1*_]_^1*_$CHECK IF OUTPUT TO CARD PUNCH_^1*_]_^1IOR76 LDA- V09,I_(REQUEST CO€€DE_^1_%AND- LPMASK+8_^1_%INA -$43_^1_%SAN IOR77_(SKIP IF NOT A CARD PUNCH_^1IOR76A RTJ IOS27_^1_%JMP* IOR120_^1*_]_^1*_$CHECK OUTPUT TO PRINTER( CHARCTER B V25 NZERO_^1*_]_^1IOR77 LDA- V25,I_^1_%SAN IOR77B_'SKIP IF B CHARACTER_^1*_]_^1IOR77A LDA- V09,I_^1_%AND- LPMASK+8_^1_%INA -$4C_^1_%SAZ IOR77B_'FOR PRINTER L_^1_%JMP* IOR77E_^1IOR77B LDA* IORG_^1_%STA- V16,I_^1*_]_^1*_$CH€€ECK FOR FORTRAN LINE PRINTER_^1*_]_^1_%LDQ- V12,I_(PICK UP PHYSTB_^1_%LDQ (ALOG1A),Q_"ADDR OF LINE PRINTER_^1_%LDA- 19,Q_)FORTRAN L.P. LU_^1_%SUB- V12,I_(IS THIS A FORTRAN PRINTER_^1_%SAZ 1_,YES_^1_%STA- V39,I_(NO, DONT ADD WORD FOR CARRIAGE CONTROL_^1*_]_^1*_$CHECK FOR 1ST CHARACTER TO BE CARRIAGE CONTROL FUNCTION_^1*_]_^1_%LDA- V39,I_^1_%SAN IOR77M_'SKIP FOR CARRIAGE CONTROL_^€€1_%LDA* IORM_^1_%INA -1_^1_%STA* IORM_)START ADDERSS_^1*_]_^1IOR77M LDA* IORG_^1_%INA -52_^1_%SAP IOR77C_^1_%LDA- V16,I_^1_%STA* IORL_^1_%JMP* IOR77D_^1IOR77C ENA 52_^1_%LDQ- V39,I_^1_%SQN IOR77P_'SKIP FOR CARRIAGE CONTROL_^1_%INA 1_^1IOR77P STA* IORL_^1IOR77D LDA- V16,I_^1_%INA -52_^1_%STA- V16,I_^1IOR77E ENA 1_,GET REQUEST CODE_^1_%RTJ IOS38_^1_%STA* IOR78_^1*_]_^1_%RTJ-€€ (AMONI)_^1IOR78 NUM 0_,+0 RC REQUEST CODE_^1_%ADC IOR090_'+1 CA_^1IORJ_!ADC 0_,+2 THREAD_^1IORK_!NUM 0_,+3 V,M,A,LU_^1IORL_!NUM 0_,+4 NO OF WORDS_^1IORM_!ADC IOBUF2_'+5 START ADDRESS_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1*_$CHECK ANY WRITE ERRORS_^1*_]_^1IOR090 LDA* IORK_^1_%SAP IOR095_'NO ERROR SKIP_^1_%JMP* IOR072_'READ ERROR REJECT_^1IOR095 LDA =XIOV_(RESTORE I_^1_%STA- I_^1*€€_]_^1*_]_^1_%LDA- V09,I_(CHECK OUTPUT TO PRINTER_^1_%AND- LPMASK+8_^1_%INA -$42_^1_%SAN IOR096_'NOT A B_^1_%JMP* IOR097_^1IOR096 LDA- V09,I_^1_%AND- LPMASK+8_^1_%INA -$4C_^1_%SAZ IOR097_'FOR PRINTER_^1_%JMP* IOR99A_^1*_]_^1IOR097 LDA* IORM_)FOR PRINTER OUTPUT_^1_%INA 52_^1_%STA* IORM_^1_%LDA- V39,I_(CHECK FOR CARRIAGE CONTROL_^1_%SAN IOR97C_'SKIP IF YES_^1_%LDA =N$2020_^1_%S€€TA* (IORM)_^1IOR97C LDA- V16,I_^1_%SAZ IOR97A_^1_%SAP IOR098_^1IOR97A JMP* IOR99A_^1IOR098 LDA- V16,I_^1_%INA -52_^1_%SAP IOR099_^1_%LDA- V16,I_^1_%STA* IORL_^1_%JMP* IOR77D_^1IOR099 JMP* IOR77C_^1*_$CHECK IF OUTPUT IS REQUIRED FOR A 2ND LU (REQ CODE MB/PB)_^1*_]_^1IOR99A LDA- V25,I_^1_%SAN IOR100_'SKIP IF CHAR B. V25=LU FOR PUNCH_^1_%JMP* IOR120_^1*_]_^1*_$SET UP TO OUTPUT T€€O ANOTHER UNIT(LU IS 3RD PARAMETER)_^1*_]_^1IOR100 EOR- V31,I_(MODE_^1_%STA* IORK_^1_%JMP* IOR76A_'TO PUNCH CARDS (U3=)_^1*_]_^1*_]_^1IOR120 LDA =XIOV_(RESTORE I_^1_%STA- I_^1*_]_^1_%LDA- V43,I_(CHECK IF SCRATCH WAS USED FOR DATA XFER_^1_%SAZ IOR122_'SKIP IF SCRATCH USED_^1*_$RESTORE READ BUFFER ADDRESS TO IOBUF2_^1*_]_^1_%LDA- VABUF,I_^1_%STA IOS20K+1_^1_%JMP (IORTJ)_%OTHERWIS€€E EXIT TO READ NEXT DATA._^1*_$BUMP TO NEXT ENTRY IN CONTROL BUFFER._^1*_]_^1IOR122 RAO- V30,I_^1_%LDQ- V30,I_(CHECK FOR END OF CONTROL BUFFER DATA_^1_%INQ -96_^1_%SQZ BMPSCT_^1_%INQ 96_^1_%ADQ- VDBL,I_^1_%LDA- (ZERO),Q_^1_%STA- V36,I_(SAVE CONTROL WORD_^1*_]_^1*_$CHECK IF THE END OF FILE ON THE INPUT DATA_^1*_]_^1IOR125 EOR =N$5554_^1_%SAZ IOR13X_'SKIP IF EOF_963*1385_^1*_]_^€€1_%INA -1_+CHECK END OF DATA =N$5555_^1_%SAZ IOR13X_'SKIP IF END OF DATA_163*1385_^1*_]_^1_%INQ -96_^1_%SQN IOR130_'SKIP IF NOT END OF CONTROL BLOCK_^1BMPSCT CLR A_,SET UP TO READ NEXT CONTROL BUFFER_^1_%STA- V30,I_(INDEX TO CONTROL BUFFER_^1_%LDA- V28,I_^1_%JMP IOR015_^1*_]_^1*_$OTHERWISE JUMP TO READ THE NEXT DATA BUFFER._^1*_]_^1IOR130 JMP IOR042_^1*_Y*_!63*1385_^1*_8SET €€V53 FLAG FOR END OF INPUT_'63*1385_^1*_Y*_!63*1385_^1IOR13X RAO- V53,I_(END OF INPUT_863*1385_^1*_]_^1*_$CHECK FOR VXX REQUEST_^1*_]_^1IOR131 LDA- V40,I_^1_%SAZ IOR133_'NOT A VXX REQIEST_^1_%JMP IOR200_'PROCESS VERIFY REQUEST_.63*1385_^1*_$CHECK OUTPUT TO MAGTAPE,PAPER TAPE, OR PRINTER_^1*_]_^1IOR133 LDA- V09,I_^1_%AND- LPMASK+8_^1*_]_^1_%INA -$4C_^1_%SAZ IOR132_L63*1383_^1_%IN€€A -1_^1_%SAZ IOR132_'MAG TAPE_^1_%INA -3_^1_%SAN IOR135_'NONE OF THESE_^1*_82 CARDS DELETED_563*1383_^1IOR132 JMP* IOR170_'JUMP FOR MAG TAPE_^1*_]_^1*_$CHECK ALL DATA (ALL RECORDS/FILES) HAVE BEEN TRANSFERRED_^1*_$BEFORE CHECKING THE REPEAT COUNT, IF ANY_^1*_]_^1*_$CHECK IF R/F IS APPLICABLE_^1*_]_^1IOR135 LDA- V43,I_^1_%SAN IOR140_'SKIP ID SCRATCH NOT USED_^1*_]_^1_%LDA- V36,€€I_(CHECK ANY EOF_^1_%EOR =N$5554_%EOF MARKER_^1_%SAN IOR140_'NOT THE EOF_^1*_$FOR THE EOF_^1_%RTJ IOSA_)CHECK R/F_^1_%JMP* IOR136_'FILE TRANSFER_^1_%JMP* IOR140_'RECORDS TRANSFER_^1*_]_^1IOR136 RAO- V38,I_(BUMP NBR OF FILES READ SO FAR_^1*_$CHECK ALL FILES TRANSFERRED_^1_%LDA IOV01,Q_^1_%SUB- V38,I_^1_%SAZ IOR140_'ALL FILES TRANSFERRED_^1*_$SET UP TO READ THE NEXT FILE_^1_%JMP€€* IOR122_^1*_$CHECK REPEAT COUNT WHERE APPLICABLE_^1*_]_^1IOR140 LDA- V43,I_(CHECK WHETHER SCRATCH USED FOR DATA XFER_^1_%SAN IOR141_'SKIP IF NOT USED_^1_%LDQ- V08,I_^1_%INQ -14_*CHECK IF REPEAT COUNT APPLICABLE_^1_%SQM IOR145_'APPLICABLE.SKIP_^1IOR141 JMP* IOR190_'EXIT._^1*_]_^1*_$CHECK WHETHER THE REPEAT COUNT IS SATISFIED_^1*_]_^1IOR145 RAO- V17,I_(UPDATE THE REPEAT COUNT_^1*€€_]_^1*_$DETERMINE THE REPEAT NUMBER IN THE REQUEST_^1*_]_^1_%LDQ- V08,I_(REQUEST INDEX_^1_%LDA IOT02,Q_%GET NBR OF PARAMETERS IN TEQUEST_^1_%AND- LPMASK+7_^1*_]_^1_%LDQ IOT02,Q_^1_%SQP IOR146_'SKIP IF OPTIONAL PARAMETER NOT APPLICABLE_^1_%INA -1_+OTHERWISE DECREMENT_^1*_]_^1IOR146 TRA Q_^1_%LDA IOV01,Q_%REPEAT COUNT_^1_%EOR- V17,I_^1_%SAZ IOR190_'ALL OUTPUT DONE. EXIT_^1*_]_€€^1*_$OTHERWISE BRANCH TO READ THE INPUT DATA ONCE AGAIN_^1*_]_^1_%JMP IOR010_^1*_$EXIT_^1*_]_^1*_$TO OUTPUT THE FILE/REC COPIED MESSAFE_^1*_]_^1IOR190 RTJ IOSA_)CHECK R/F APPLICABLE_^1_%JMP* IOR194_'FOR MAG.TAPE FILES TRANSFER_^1*_]_^1IOR193 ENA -1_+FOR RECS_^1_%LDQ IOMSCL_^1_%JMP* IOR195_^1IOR194 CLR A_,FOR FILES_^1_%LDQ IOMSBL_^1*_]_^1IOR195 RTJ IOS40_(SEND MESSAGE_^1_%JMP€€ IO130_(SOLICIT THE NEXT IOUP REQUEST_^1*_]_^1IOMS11 ALF 15,NUMBER OF FILES COPIED_!NNNNN_^1_%NUM $200D_^1*_]_^1IOMS12 ALF 15,NBR RECS COPIED NN*32768+NNNNN_^1_%NUM $200D_^1IOMSBL ADC IOMS11_^1IOMSCL ADC IOMS12_^1*_]_^1*_]_^1*_]_^1*_]_^1*_$COMMON ROUTINE TO PAG EJT/ PUN LEADER/ WEOF_,63*1383_^1*_]_^1IOR170 LDA IORK_^1_%AND- LPMASK+10_^1_%STA* IOR172_^1*_]_^1_%RTJ- (AMONI)_^€€1_%NUM $5C00_(+0 RC TAPE MOTION REQ_^1_%ADC IOR175_'+1 CA_^1IOR171 ADC 0_,+2 T_^1IOR172 NUM 0_,+3_^1_%NUM $2000_(+4 WEF_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOR175 LDA =XIOV_(RESTORE I_^1_%STA- I_^1*_]_^1_%LDA* IOR172_'CHECK ERRORS_^1_%SAP IOR176_^1_%JMP IOR072_^1*_]_^1IOR176 JMP IOR135_'DONE_^1*_]_^1_%EJT_]_^1*_8CHECK FOR UNIT 1 = UNIT 2_+63*1383_^1*_*IF SAME UNITS, OUTPUT MESS€€AGE AND CONTINUE ON CR_!63*1383_^1*_]63*1383_^1IOS34 NOP 0_Q63*1383_^1_%LDA- V02,I_(FIRST INPUT_963*1383_^1_%SUB- V03,I_(SECOND INPUT OR OUTPUT_.63*1383_^1_%SAN IOS341_'SKIP IF NOT SAME_463*1383_^1_%RTJ IOS344_'OUTPUT MESSAGE FOR SAME UNITS_'63*1383_^1_%RTJ- (AMONI)_K63*1383_^1_%NUM $4800_(FREAD_?63*1383_^1_%ADC IOS341_'COMP_@63*1383_^1_%ADC 0_Q63*1383_^1_%NUM $18FD_(STANDA€€RD COMM DEV_363*1383_^1_%NUM 1_Q63*1383_^1_%ADC IOS342_L63*1383_^1_%JMP- (ADISP)_K63*1383_^1IOS341 LDQ =XIOV_M63*1383_^1_%STQ- I_,RESTORE 'I'_963*1383_^1_%JMP* (IOS34)_%CONTINUE_<63*1383_^1_%BZS IOS342(2)_I63*1383_^1IOS343 ADC IOS34M_'MESSAGE ADDRESS_563*1383_^1IOS34X NUM 0_Q63*1383_^1_%EJT_T63*1383_^1*_]_^1*_$COME HERE TO PROCESS A VERIFY REQUEST_^1*_]_^1*_$THE DATA TO BE CO€€MPARED WITN IS IN IOBUF2_^1*_$THE NUMBER OF WORDS IN THIS BUFFER IS IN IORG_^1*_$THE MODE OF DATA IN THIS BIFFER IS B15 OF V36_^1*_]_^1*_$SET UP TO READ THE SECOND DATA_^1*_]_^1IOR200 LDA* IOS34X_L63*1383_^1_%SAN IOR201_'CHECK MADE ONCE_563*1383_^1_%RAO* IOS34X_'FIRST TIME_:63*1383_^1_%RTJ* IOS34_(CHECK FOR SAME UNITS_063*1383_^1IOR201 LDA- V43,I_(CHECK IF SCRATCH USED_/63*1383_^1€€_%SAZ IOR202_'SKIP IF USED_^1*_$IF NOT USED,INITIALIZE FOR READ OF 2ND INPUT_^1*_]_^1*_]_^1_%LDA- V33,I_(SAVE NBR OF WORDS READ FROM FIRST INPUT_^1_%STA IORG_^1*_]_^1_%LDA- V32,I_^1_%STA- V33,I_^1_%JMP* IOR206_^1*_]_^1IOR202 LDA- V32,I_^1_%STA- V33,I_^1_%LDA- V36,I_(MODE OF READ_^1_%ENQ 0_^1_%STQ- V35,I_(START BUFFER ADDRESS_^1_%SAP IOR205_'SKIP IF BINARY MODE_^1_%LDQ- ONEBIT+1€€2_#FOR ASCII MODE_^1IOR205 STQ- V31,I_^1*_]_^1IOR206 LDA- VVBUF,I_^1_%STA IOS20K+1_^1_%ENA 0_,GET THE REQUEST CODE FOR INPUT_^1_%RTJ IOS38_^1_%STA* IOR212_^1*_]_^1_%LDQ- V03,I_(2ND INPUT LU_^1*_]_^1*_$READ THE INPUT DEVICE_^1*_]_^1IOR210 RTJ IOS20_^1IOR212 NUM 0_,+0 REQUEST CODE_^1*_]_^1_%JMP* IOR215_'FOR ERROR RETURN_^1*_]_^1_%JMP* IOR250_'FOR NO ERROR RETURN_^1*_]_^1IOR215 L€€DA- V03,I_(SECOND INPUT UNIT_363*1384_^1_%RTJ IOS33_(CHECK STATUS_863*1384_^1_%JMP* IOR216_'EOF_^1_%JMP* IOR218_'OTHERS_^1_%JMP* IOR218_'PARITY_^1*_]_^1IOR216 LDA- V53,I_(CHECK EOF ON INPUT UNIT_^1_%SAZ IOR218_'SKIP TO REJECT_^1*_]_^1_%JMP* IOR225_L63*1385_^1*_]_^1*_$TYPE OUT I/O ERROR MESSAGE_^1*_]_^1IOR218 LDQ IOMS7L_'MESSAGE ADDRESS_^1_%LDA IOS2E_^1_%AND- LPMASK+11_#LU_^1_%R€€TJ IOS35_^1_%LDA- V37,I_(UPDATE NBR OF RECORDS CJECKED SO FAR_^1_%INA -1_^1_%STA- V37,I_^1*_]_^1IOR225 RTJ IOS37_(CLEAR IOBUF4_^1*_]_^1*_*TYPE TOTAL RECORDS VERIFIED MESSAGE_^1*_]_^1_%ENA -1_^1_%LDQ* IOMSAL_^1_%RTJ IOS40_^1*_]_^1*_$SOLICIT NEXT REQUEST_^1*_]_^1_%JMP IO130_^1*_]_^1*_$VERIFIED RECORDS MESSAGE_^1*_]_^1IOMSAL ADC IOMS10_^1*_]_^1IOMS10 ALF 15,CHECKED RECORDS NN*€€32768+NNNNN_^1_%NUM $200D_^1*_]_^1*_$COME HERE TO COMPARE THE DATA OF IOBUF2 AND IOBUF4_^1*_]_^1*_$FOR ANY MISMATCH OF A WORD OR A DIFFERENT NUMBER OF WORDS_^1*_$OF DATA IN BOTH BUFFERS TYPE OUT ERROR MESSAGE_^1*_$AND CHECK NEXT RECORD IF ANY_^1*_]_^1IOR250 LDA IORG_)NO OF WORDS IN IOBUF2_^1_%SUB- V33,I_(NO OF WORDS IN IOBUF4_^1_%SAZ IOR255_'EQUAL NUMBER. PROCEED_^1*_]_^1*_$OTHE€€RWISE ERROR_^1*_]_^1_%JMP* IOR262_^1*_]_^1*_$INITIALIZE FOR WORD BY WORD COMPARISON_^1*_]_^1IOR255 LDQ- V33,I_(INDEX_^1_%INQ -1_^1*_]_^1IOR260 LDA (IOV01+VABUF-1),Q_^1_%SUB (IOV01+VVBUF-1),Q_^1*_]_^1_%SAZ IOR265_'OK SKIP_^1*_]_^1*_$OTHERWISE TYPE OUT ERROR MESSAGE_^1*_]_^1IOR262 LDQ* IOMS9L_^1_%ENA -1_^1_%RTJ IOS40_^1*_]_^1_%JMP* IOR270_^1*_]_^1*_$UPDATE THE INDEX_^1*_]_^1IOR€€265 INQ -1_^1*_]_^1*_$CHECK BUFFER EXHAUSTED_^1*_]_^1_%SQM IOR270_'YES. SKIP_^1_%JMP* IOR260_'OTHERWISE COMPARE NEXT WORD_^1*_]_^1*_$BRANCH TO READ NEXT RECORD IF ANY_^1*_]_^1IOR270 RTJ IOS37_(CLEAR THE IOBUF4_^1*_]_^1_%LDA- 43,I_)CHECK IF SCRATCH USED_^1_%SAN IOR275_'SKIP IF NOT USED._^1_%CLR Q_^1_%LDA IORG_^1_%DVI IORC+1_^1_%SQZ 1_^1_%INA 1_^1_%ADD- V28,I_^1_%STA- V28,I_€€^1IOR275 JMP IOR120_'READ NEXT DATA_^1*_]_^1*_]_^1*_$ERROR IN RECORD MESSAGE_^1*_]_^1IOMS9 ALF 15,MISMATCH RECORD NN*32768+NNNNN_^1_%NUM $200D_^1*_]_^1IOMS9L ADC IOMS9_^1*_]_^1_%EJT_]_^1*_]_^1*_]_^1*_$COMMON SUBROUTINE TO READ THE SPECIFIED INPUT DEVICE- IOS20_^1*_]_^1*_$INPUT_^1*_*(Q)=INPUT LOGICAL UNIT NUMBER_^1*_*PARAMETER LIST+0 = REQUEST CODE_^1*_*V31,I=MODE OF READ 0=BI€€NARY 1=ASCII_^1*_*V32,I=NO OF WORDS TO BE READ_^1*_*V35,I=INDEX TO START DATA ADDRESS IN IOBUF2_^1*_]_^1*_$OUTPUT_^1*_*V33,I = NO OF WORDS ACTUALLY READ_^1*_]_^1IOS20 ADC 0_^1_%LDA* (IOS20)_%REQUEST CODE_^1_%STA* IOS2BA_^1_%LDA- V31,I_(MODE_^1_%EAQ A_^1_%STA* IOS2E_(+LU_^1_%LDA- V32,I_(NUMBER OF WORDS TO READ_^1_%STA* IOS2F_^1IOS20K LDA =N0_^1_%STA* IOS2G_^1_%RAO* IOS20_(RETUR€€N ADDRESS_^1*_]_^1*_$READ REQUEST_^1*_]_^1IOS2A RTJ- (AMONI)_^1IOS2BA NUM 0_,+0 RC_^1_%ADC IOS206_'+1 CA_^1IOS2D NUM 0_,+2 THREAD_^1IOS2E NUM 0_,+3 V(3)+M(1)+A(2)+ LU(10)_^1IOS2F NUM 0_,+4 NUMBER OF WORDS_^1IOS2G ADC 0_,+5 START ADDRESS_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1*_$CHECK FOR ANY READ ERROR_^1*_]_^1IOS206 LDA =XIOV_(RESTORE I_^1_%STA- I_^1_%LDA* IOS2E_^1_%SAP I€€OS207_'NO ERROR_^1_%JMP* (IOS20)_%ERROR RETURN._^1*_]_^1*_$CHECK FOR A SHORT READ.IF YES,SAVE NUMBER OF WORDS ACTUALLY READ._^1*_]_^1IOS207 AND- ONEBIT+14_^1_%SAZ IOS209_'NO SHORT READ_^1_%LDQ* IOS2G_((S+N-1) = LAST LOCATION FILLED + 1_^1_%ADQ* IOS2F_^1_%INQ -1_^1_%LDA- (ZERO),Q_^1_%SUB* IOS2G_^1_%STA- V33,I_(NO OF WORDS ACTUALLY READ._^1IOS209 RAO* IOS20_(ERROR FREE EXIT._^1_%JM€€P* (IOS20)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO STATUS A DEVICE_^1*_]_^1*_$THE L.U. OF THE DEVICE IS IN REGISTER A_^1*_]_^1IOS22 ADC 0_^1_%STA* IOS22A_^1*_]_^1_%RTJ- (AMONI)_^1_%NUM $4600_(+0 RC FOR STATUS REQ =3_^1IOS22A NUM 0_^1_%ADC 0_^1*_]_^1*_$OUTPUT_^1*_*(A) = HARDWARE STATUS_^1*_*(Q) = WORD 8 OF PHYSICAL DEVICE TABLE_^1*_*(I) = LAST CORE ADDRESS STORED ON A €€DATA TRANSMISSION._^1*_]_^1*_$RESTORE REGISTER I_^1*_]_^1_%LDQ =XIOV_^1_%STQ- I_^1_%JMP* (IOS22)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO DETERMINE THE CHANGE IN MODE OF_^1*_$READING THE INPUT DEVICE._^1*_]_^1IOS23 ADC 0_^1_%LDQ- V22,I_(PHYSICAL DEVICE TABLE_^1_%LDA- 9,Q_*STATUS WORD 1_^1_%AND- ONEBIT+3_$ACTUAL READ MODE_^1_%ALS 9_^1_%EOR- V31,I_(REQUESTED READ MODE._^1€€_%SAZ IOS239_'EXIT. NO CHANGE OF MODE_^1_%RAO* IOS23_(CHANGE OF MODE EXIT_^1IOS239 JMP* (IOS23)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO WRITE DATA(OF INBUF2) TO INTERMEDIATE_^1*_$STORAGE AT THE CURRENT SCRATCH ADDRESS_^1*_]_^1IOS24 ADC 0_^1_%LDA- V36,I_(NO OF WORDS TO BE WRITTEN_^1_%STA* IOS24C_^1_%LDA- V35,I_^1_%ADD- VABUF,I_^1_%STA* IOS24D_^1_%LDA- V29,I_^1_%STA* IOS2€€4F_'LSB_^1*_]_^1*_$I/O REQUEST TO WRITE DATA ON THE SCRATCH AREA OF THE LIBRARY_^1*_$UNIT_^1*_]_^1_%RTJ- (AMONI)_^1_%NUM $4C00_(+0 RC FWRITE_^1_%ADC IOS242_'+1 CA_^1IOS24A ADC 0_,+2 THREAD_^1IOS24B NUM $08B3_(+3 V(3),M(1),A(2),LU_^1IOS24C NUM 0_,+4 NUMBER OF WORDS_^1IOS24D ADC 0_,+5 STARTING ADDRESS_^1IOS24E NUM 0_,+6 MSB_^1IOS24F NUM 0_,+7 LSB_^1*_]_^1_%JMP- (ADISP)_^€€1*_]_^1IOS242 LDA =XIOV_(RESTORE I_^1_%STA- I_^1_%LDA* IOS24B_^1_%SAP IOS243_'NO ERROR SKIP_^1_%LDA- $B3_*LU_^1_%JMP* IOS254_'REJECT._^1*_]_^1IOS243 CLR A_,RESET INDEX TO DATA BUFFER_^1_%STA- V35,I_^1*_$UPDATE SCRATCH ADDRESS FOR NEXT NEW DATA_^1_%CLR Q_,CALCULATE NO. SECTORS WRITTEN_^1_%LDA* IOS24C_^1_%DVI* IOS24H+1_^1_%SQZ 1_^1_%INA 1_^1_%ADD- V29,I_(UPDATE POINTER TO NEXT €€SECTOR_^1_%STA- V29,I_(TO BE WRITTEN_^1*_]_^1*_$UPDATE THE CONTROL BUFFER WORD - MODE AND NO OF WORDS WRITTEN_^1*_]_^1*_]_^1IOS24K LDQ- V30,I_(INDEX TO CURRENT ENTRY IN CONTROL BUFFER_^1_%LDA- V31,I_(MODE_^1_%ALS 3_^1_%ADD* IOS24C_'NUMBER OF WORDS_^1_%ADQ- VDBL,I_^1_%STA- (ZERO),Q_^1_%TRQ A_^1_%SUB- VDBL,I_^1_%INA -95_*CHECK CONTROL BUFFER IS FULL_^1_%SAN IOS244_^1_%RTJ* IOS25_€€^1_%JMP* (IOS24)_^1IOS244 RAO- V30,I_^1_%JMP* (IOS24)_%CONTROL BUFFER,AND EXIT._^1_%SPC 4_^1*_]_^1*_$COME HERE TO WRITE THE FULL CONTROL BUFFER, AND THEN_^1*_$RESET POINTERS TO THE START FOR THE NEW CONTROL BUFFER_^1*_]_^1IOS25 ADC 0_^1_%LDA- VDBL,I_^1_%STA* IOS25C_^1*_]_^1_%LDA- V28,I_(LSB_^1_%STA* IOS25B_^1*_]_^1_%RTJ- (AMONI)_^1_%NUM $4C00_(+0 RC FWRITE_^1IOS25A ADC IOS252_€€'+1 CA_^1IOS24G ADC 0_,+2 THREAD_^1IOS24H NUM $08B3_(+3 V,M,A,LU_^1_%NUM 96_++4 NUMBER OF WORDS_^1IOS25C ADC 0_,+5 STARTING ADDRESS_^1_%NUM 0_,+6 MSB_^1IOS25B NUM 0_,+ LSB_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1*_$CHECK ANY ERROR IN WRITING.IF AN ERROR, REJECT_^1*_]_^1IOS252 LDA =XIOV_(RESTORE I_^1_%STA- I_^1*_]_^1_%LDA* IOS24H_'CHECK ERRORS_^1_%SAP IOS255_(NO ERROR_^1_%LDA- $B3_€€*LU_^1IOS254 JMP IOR072_^1*_]_^1*_$CHECK ANY MODE CHANGED FOR THE INPUT DATA READ_^1*_]_^1IOS255 LDA- V34,I_(CHECK READ MODE CHANGED FLAG_^1_%SAN IOS256_'SKIP IF MODE CHANGED_^1_%LDA- V36,I_(OTHERWISE CLEAR NO OF WORDS IN CONTROL WORD_^1_%AND- ONEBIT+15_#AND RETAIN THE PREV READ MODE IDENTIFIER_^1_%STA- V36,I_^1*_]_^1IOS256 CLR A_-INDEX TO CURRENT CONROL BUFFER WORD_^1_%STA- V30,€€I_^1*_]_^1*_$UPDATE SCRATCH ADDRESS FOR CONTROL BUFFER_^1*_]_^1_%LDA- V29,I_^1_%STA- V28,I_^1*_]_^1*_$BUMP SCRATCH ADDRESS FOR NEXT DATA BUFFER_^1*_]_^1_%RAO- V29,I_^1*_]_^1*_$AND EXIT TO CALLER_^1*_]_^1_%JMP* (IOS25)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO PUNCH CARDS_^1*_]_^1IOS27 ADC 0_^1_%LDA- V33,I_(NUMBER OF WORDS TO PUNCH_,63*1385_^1_%STA* IOS27G_^1_%LDA IORK_^1_€€%STA* IOS27B_^1*_]_^1*_*GET THE WRITE REQUEST CODE_^1_%ENA 1_^1_%RTJ IOS38_^1_%LDQ- V31,I_^1_%SQZ IOS279_^1_%AND- ZROBIT+11_^1IOS279 STA* IOS27R_^1*_]_^1_%RTJ- (AMONI)_^1IOS27R NUM 0_,+0 RC_^1_%ADC IOS272_'+1 CA_^1IOS27A ADC 0_,+2 T_^1IOS27B ADC 0_,+3 V,MA,LU_^1IOS27G NUM 0_,+4 NUMBER_^1IOS27C ADC IOBUF2_'+5 STARING ADDRESS_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOS272 LDA =XIOV_€€(RESTORE I_^1_%STA- I_^1*_]_^1_%LDA* IOS27B_'CHECK ERRORS_^1_%SAP IOS277_'NO ERROR_^1_%JMP* IOS254_'ERROR REJECT_^1*_]_^1*_]_^1*_$EXIT_^1*_]_^1IOS277 JMP* (IOS27)_^1*_]_^1_%SPC 4_^1*_]_^1*_*COMMON SUBROUTINE TO CHECK ALL TAPE MOTION DONE_^1*_]_^1IOS30 ADC 0_^1*_]_^1_%RAO- V37,I_(BUMP OF RECORDS READ_^1*_]_^1_%LDA- V09,I_(CHECK FILE OR RECORD SKIP_^1_%AND- LPMASK+8_^1_%INA -$4€€6_^1_%SAN IOS305_'SKIP IF RECORDS_^1*_$FOR FILES_^1_%LDA- V36,I_(CHECK FILE MARK IS SENSED._^1_%AND- ONEBIT+11_^1_%SAZ IOS308_'NO END OF FILE_^1*_]_^1_%RAO- V38,I_(BUMP NBR OF FILES READ_^1*_$CHECK MOTION COMPLETED_^1_%LDA- V38,I_^1_%JMP* IOS306_^1IOS305 LDA- V37,I_^1IOS306 STA- V33,I_^1_%SUB- V03,I_^1_%SAZ IOS309_'SKIP ALL DONE_^1*_]_^1*_]_^1IOS308 LDA- V36,I_(CHECK END OF TAPE€€_^1_%AND- ONEBIT+9_^1_%SAN IOS309_'SKIP IF YES_^1*_]_^1_%RAO* IOS30_^1IOS309 JMP* (IOS30)_%EXIT_^1*_]_^1_%SPC 4_^1*_]_^1*_8COMMON ROUTINE TO DETERMINE STATUS_!63*1384_^1*_8'A' = LOGICAL UNIT NUMBER OF DEVICE 63*1384_^1*_]63*1384_^1IOS33 NOP 0_Q63*1384_^1_%TRA Q_,LU IN 'Q'_;63*1384_^1_%LDQ (ALOG1A),Q_"GET PHYSTAB ADDRESS_163*1384_^1_%LDA- 8,Q_*GET DEVICE TYPE IN 'A'_.63*1384_€€^1_%ALS 5_Q63*1384_^1_%AND- $5_P63*1384_^1_%INA -1_+MAG TAPE_<63*1384_^1_%SAZ IOS33M_'SKIP IF MAG TAPE_463*1384_^1_%INA -2_+CARD READER_963*1384_^1_%SAZ IOS33C_'SKIP IF CARD_863*1384_^1_%INA -1_+PAPER TAPE_:63*1384_^1_%SAZ IOS33P_'SKIP IF PAPER TAPE_263*1384_^1*_8IF NONE - CALL IT MAG TAPE_*63*1384_^1*_]63*1384_^1IOS33M LDA- 12,Q_)GET STATUS WORD_563*1384_^1_%ALS 4_,BIT 11_€€>63*1384_^1_%SAM IOS335_'SKIP IF EOF_963*1384_^1_%ALS 3_,BIT 8_?63*1384_^1_%SAM IOS332_'SKIP IF PARITY ERROR_063*1384_^1_%JMP* IOS333_'SOME OTHER ERROR_463*1384_^1*_]63*1384_^1IOS33C LDA- 12,Q_)GET STATUS WORD_563*1384_^1_%ALS 4_,BIT 11_>63*1384_^1_%SAM IOS335_'SKIP IF EOF_963*1384_^1_%AND- $27_*MUST CALL NOT READY EOF_-63*1384_^1_%SAZ IOS335_'SKIP IF NOT READY (EOF)_-63*1384€€_^1_%JMP* IOS333_'SOME OTHER ERROR_463*1384_^1*_]63*1384_^1IOS33P LDA- 12,Q_)GET STATUS WORD_563*1384_^1_%AND- ONEBIT+9_$MUST CALL MOTION FAIL EOF_+63*1384_^1_%SAN IOS335_'SKIP IF MOTION FAIL (EOF)_+63*1384_^1_%JMP* IOS333_'SOME OTHER ERROR_463*1384_^1*_]63*1384_^1IOS332 RAO* IOS33_(PARITY ERROR MAG TAPE_/63*1384_^1IOS333 RAO* IOS33_(SOME OTHER ERROR ALL_063*1384_^1IOS335 JMP* (IO€€S33)_%RETURN WITH 'Q' = PHYSTAB ADR_'63*1384_^1*_]_^1IOS32A NUM 0_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO SEND OUT A MESSAGE_^1*_]_^1IOS35 ADC 0_^1_%STQ* IOS32A_'SAVE MESSAGE ADDRESS_^1_%RTJ* IOS36_(BINARY TO ASCII_^1IOS351 NUM 0_,10**4 VALUE IF APPLICABLE_^1_%STQ- I_^1_%LDQ* IOS32A_^1_%STA- 9,Q_^1_%LDA- I_^1_%STA- 8,Q_^1*_]_^1_%ENA 11_^1*_]_^1_%RTJ IOS41_^1*_]_^1_%JMP* (I€€OS35)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO CONVERT A BINARY NUMBER TO ASCII_^1*_$5 DIGIT (0-99999)_^1*_]_^1IOS36 ADC 0_^1_%ENQ 0_^1_%DVI =N10000_^1_%INA $30_^1_%STA* (IOS36)_^1_%RAO* IOS36_^1_%LRS 16_^1*_]_^1_%DVI =N1000_^1_%INA $30_^1_%ALS 8_^1_%STA* IOS36A_^1_%LRS 16_^1_%DVI =N100_^1_%INA $30_^1_%EOR* IOS36A_^1_%STA* IOS36A_^1*_]_^1_%LRS 16_^1_%DVI =N10_€€^1_%INA $30_^1_%ALS 8_^1_%EAQ A_^1_%INA $30_*A=LSB_^1_%LDQ* IOS36A_'Q= MSB_^1_%JMP* (IOS36)_%EXIT_^1*_]_^1IOS36A NUM 0_,TEMPY STORAGE_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO CLEAR IOBUF4_^1*_]_^1IOS37 ADC 0_^1_%LDQ =N191_^1_%CLR A_^1IOS375 STA (IOV01+VVBUF-1),Q_^1_%INQ -1_^1_%SQM IOS379_'DONE_^1_%JMP* IOS375_'LOOP_^1IOS379 JMP* (IOS37)_%EXIT_^1*_]_^1_%SPC 4_^1*_€€]_^1*_$COMMON SUBROUTINE TO DETERMINE THE REQUEST CODE_^1*_$FOR THE READ/WRITE_^1*_]_^1*_$INPUT_^1*_*V08,I=REQUEST INDEX_^1*_*A=0 FOR READ_^1*_*A=1 FOR WRITE_^1*_]_^1*_$OUTPUT_^1*_]_^1*_$FOR READ_^1*_*OF THE CC,CM,MC,VCC,VCM_^1*_,IF X=0 OR IS MISSING- FREAD (A)=$0800_^1*_*IF X.EQ.0 OR IS MISSING FREAD_*(A)=$4800_^1*_-IF X.NE.0 UNFORMATTED READ (A)=$0200_^1*_,IF X.NE.0 UNFORMATTED€€ READ_+(A)=$4200_^1*_*FOR ALL OTHER REQUESTS FREAD (A)=$0800_^1*_*FOR ALL OTHER REQUESTS FREAD_+(A)=4800_^1*_]_^1*_$FOR WRITE_^1*_*OF THE CC,CM,MC,VCC,VCM_^1*_,IF X=0 OR IS MISSING--FWRITE (A)=$0C00_^1*_,IF X.EQ.0 OR IS MISSING FWRITE_'(A)=$4C00_^1*_,IF X.NE.0 UNFORMATTED WRITE (A)=$0400_^1*_,IF X.NE.0 UNFORMATTED WRITE_*(A)=$4400_^1*_$FOR ALL OTHER REQUESTS FWRITE (A)=$0C00_^1€€*_*FOR ALL OTHER REQUESTS FWRITE_*(A)=$4C00_^1*_]_^1IOS38 ADC 0_^1*_]_^1_%STA- V15,I_(SAVE THE REQUEST INDICATOR_^1*_]_^1_%ENQ 0_,INITIALIZE FOR THE TABLE SEARCH_^1*_]_^1IOS381 LDA* IOS38T,Q_$GWT THE TABLE ENTRY_^1_%SAM IOS38A_'SKIP IF END OF TABLE_^1_%EOR- V08,I_(CHECK CURRENT REQUEST CODE_^1_%SAN IOS38B_'NO MATCH SKIP_^1_%JMP* IOS384_'MATCH IS FOUND_^1*_]_^1IOS38B INQ 2_,GE€€T NEXT ENTRY_^1*_]_^1_%JMP* IOS381_^1*_]_^1IOS38A LDA- V09,I_^1_%EOR =APP_)CHECK WHETHER A PP/VPP REQUEST_^1_%SAN IOS382_'SKIP IF NOT A PP/VPP_^1*_]_^1_%LDA- ONEBIT+9_$A=0200 READ_^1_%LDQ- V15,I_^1_%SQZ IOS383_'SKIP IF UNPUT_^1*_]_^1_%LDA- ONEBIT+10_#A=$0400 WRITE_^1_%JMP* IOS383_^1*_$FOR ALL REQUESTS NOT IN TAVLE SET UP FOR FORMATTED READ/WRITE_^1*_]_^1IOS382 LDA- ONEBIT+11_#A=€€$0800_^1_%LDQ- V15,I_^1_%SQZ IOS383_'SKIP IF INPUT READ_^1_%EOR- ONEBIT+10_#FOR OUTPUT A=$0C00_^1*_]_^1IOS383 EOR- ONEBIT+14_^1_%JMP* (IOS38)_^1*_]_^1*_$FOR A MATCH OF THE REQUEST DETERMINE THE VALUE OF PARAMETER_^1*_]_^1*_$IF X=0 THEN THE INPUT/OUTPUT WILL BE FORMATTED TYPE_^1*_$OTHERWISE FOR X.NE.0 IT WILL BE UNFORMATTED TYPE_^1*_]_^1*_$THE POSITION OF THE X PARAMETER IN THE REQ€€UEST IS INDICATED_^1*_$IN THE NEXT WORD OF THE MATCHING TABLE ENTRY_^1*_$ADDRESS OF THE ENTRY IS IN Q_^1*_]_^1IOS384 INQ 1_,GET THE X PARAMETER_^1_%LDQ* IOS38T,Q_^1_%LDA IOV01,Q_^1_%SAN IOS385_'SKIP IF NZERO_^1_%JMP* IOS382_'JUMP IF X IS MISSING OR ZERO_^1*_]_^1*_]_^1*_$GET THE NUMBER OF WORDS FOR READ/WRITE_^1*_]_^1IOS385 ENA 60_^1_%STA- V32,I_^1_%STA- V33,I_^1*_]_^1*_$CHECK F€€OR INPUT/OUTPUT_^1*_]_^1_%LDA- ONEBIT+9_$A=$0200_^1_%LDQ- V15,I_^1_%SQZ IOS386_'SKIP IF INPUT_^1_%ALS 1_,A=$0400 FOR OUTPUT_^1*_]_^1IOS386 JMP* IOS383_'EXIT_^1*_]_^1_%SPC 4_^1*_]_^1*_$TABLE FOR VALIDATION OF REQUESTS USED IN IOS38 ROUTINE_^1*_]_^1*_$FOR X PARAMETER NZERO THE READ/WRITE IS ALWAYS FORMATED_^1*_]_^1*_$1ST WORD OF ENTRY=REQUEST CODE INDEX_^1*_$2ND WORD OF ENTRY= POS€€ITION OF X PARAMETER IN REQUEST_^1*_]_^1IOS38T NUM 0_,+00 CC_^1_%NUM 4_,4TH PARAMETER_^1_%NUM 1_,+01 CM_^1_%NUM 4_,4TH PARAMETER_^1_%NUM 10_++10 MC_^1_%NUM 6_,6TH PARAMETER_^1_%NUM 14_++14 VCC_^1_%NUM 3_,3RD PARAMETER_^1_%NUM 16_++16 VCM_^1_%NUM 4_,4TH PARAMETER_^1_%NUM $8000_(END OF TABLE_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON SUBROUTINE TO CLEAR IOBUF2_^1*_]_^1IOS39 ADC €€0_^1_%CLR A_^1_%LDQ =N191_^1IOS395 STA IOBUF2,Q_^1_%SQZ IOS399_'ALL DONE_^1_%INQ -1_+LOOP_^1_%JMP* IOS395_^1*_$EXIT_^1IOS399 JMP* (IOS39)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON S/R TO GENERATE A MESSAGE OF 30 CHARACYERS_^1*_]_^1*_$INPUT_^1*_*A=0_*V38 (FILES)_^1*_*A=-1_)V37 AND V37Q(FOR RECORDS)_^1*_*A=1_*V42(AVLE SCRATCH)_^1*_*Q= MESSAGE BUFFER ADDRESS_^1*_]_^1IOS40 ADC 0_^1_%S€€TQ* IOS40Q_'SAVE Q_^1_%STA* IOS40A_'SAVW A_^1*_]_^1_%SAZ IOS401_'SKIP IF FILES_^1*_]_^1_%SAP IOS402_'SKIP IF SCRATCH_^1*_]_^1_%LDA- V37,I_(FOR RECORDS_^1_%JMP* IOS403_^1*_]_^1IOS401 LDA- V38,I_(GET FILES_^1_%JMP* IOS403_^1*_]_^1IOS402 LDA- V42,I_(AVLE SCRATCH_^1*_]_^1IOS403 RTJ IOS36_(BIN-ASCII_^1IOS404 NUM 0_,10**4 VALUE_^1*_]_^1*_$FORMAT THE NNNNN MESAGE_^1*_]_^1_%STQ* IOS36A€€_^1_%LDQ* IOS40Q_^1_%STA- 14,Q_)LSB_^1*_]_^1_%LDA* IOS36A_^1_%STA- 13,Q_)MSB_^1_%LDA- 12,Q_^1_%AND- NZERO+8_^1_%ADD* IOS404_'10**4 VALUE_^1_%STA- 12,Q_^1*_]_^1_%LDA* IOS40A_'CHECK RECORDS_^1_%SAM IOS405_'SKIP IF YES_^1_%JMP* IOS407_'OTHERWISE OUTPUT MESSAGE_^1*_]_^1*_$CHECK QUOTIENT_^1*_]_^1IOS405 LDA- V37Q,I_^1_%SAZ IOS406_'SKIP IF ZERO_^1*_]_^1_%RTJ IOS36_^1_%NUM 0_^1*_]_^1_%€€LDQ* IOS40Q_'MESSAGE BUFFER ADDRESS_^1*_]_^1_%STA- 8,Q_*SAVE NN_^1*_]_^1_%JMP* IOS407_^1*_]_^1IOS406 LDA =N$2020_%BLANK THE NN*32768 AREA_^1_%STA- 8,Q_^1_%STA- 9,Q_^1_%STA- 10,Q_^1_%STA- 11,Q_^1*_]_^1_%LDA- 12,Q_^1_%AND- LPMASK+8_^1_%ADD- ONEBIT+13_#BLAND $2000_^1_%STA- 12,Q_^1*_]_^1*_$SET UP TO OUTPUT NESSAGE_^1*_]_^1*_*Q=MESSAGE BUFFER ADDRESS_^1*_*A=NBR OF WORDS_^1*_]_^1IOS407 €€ENA 16_^1_%RTJ* IOS41_(OUTPUT MESSAGE_^1*_]_^1*_$RESET THE NN*32768 AREAS_^1*_]_^1_%LDA* IOS40A_^1_%LDQ* IOS40Q_'MESSAGE BUFFER ADDRESS_^1_%SAP IOS408_'SKIP IF NOT APPLICABLE_^1*_]_^1_%LDA =N$4E4E_%NN_^1_%STA- 8,Q_^1_%LDA =N$2A33_%*3_^1_%STA- 9,Q_^1_%LDA =N$3237_%27_^1_%STA- 10,Q_^1_%LDA =N$3638_%68_^1_%STA- 11,Q_^1_%LDA =N$2B4E_%+N_^1_%STA- 12,Q_^1*_]_^1IOS408 JMP* (IOS40)_€€%EXIT_^1*_]_^1IOS40A NUM 0_,TEMP_^1IOS40Q NUM 0_^1_%SPC 4_^1*_$COMMON S/R TO OUTPUT A MESSAGE_^1*_]_^1*_$INPUT_^1*_*A=NBR OF WORDS TO BE OUTPUT_^1*_*Q=ADDRESS OF MESSAGE BUFFER_^1*_]_^1IOS41 ADC 0_^1*_]_^1_%STA* IOS412_'SAVE NBR OF WORDS_^1_%STQ* IOS413_'SAVE MSG ADDRESS_^1*_]_^1_%RTJ- (AMONI)_^1_%NUM $4C00_(+0 RC FWRITE_^1_%ADC IOS414_'+1 CA_^1_%ADC 0_,+2 T_^1IOS411 NUM $€€18FC_(+3 V,M,A,LU_^1IOS412 NUM 0_,+4 NBR OF WORDS_^1IOS413 ADC 0_,+5 START ADDRESS_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOS414 LDA* IOS411_'CHECK ANY ERRORS_^1_%SAP IOS419_'SKIP IF NO ERROR_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOS419 LDA =XIOV_(RESTORE I_^1_%STA- I_^1*_]_^1_%JMP* (IOS41)_^1*_]_^1_%SPC 4_^1*_]_^1*_$COMMON S/R TO WITE THE END OF FILE_^1*_$MAY BE ONE OR TWO OUYPUT UNIRS_^1*_€€]_^1IOS42 ADC 0_^1*_]_^1_%LDA- V25,I_(SET FLAG FOR 1 OR 2 UNITS V25=0 IF 1_^1_%STA* IOS42V_^1*_]_^1_%LDA- V03,I_(GET FIRST OUTPUT UNIT_^1IOS421 STA* IOS422_^1*_]_^1_%RTJ- (AMONI)_^1_%NUM $5C00_(+0 RC TAPE MOYION REQUEST_^1_%ADC IOS424_'+1 CA_^1_%ADC 0_,+2 T_^1IOS422 NUM 0_,+3 V,M,A,LU_^1_%NUM $2000_(+4 WEF_^1*_]_^1_%JMP- (ADISP)_^1*_]_^1IOS424 LDA =XIOV_(RESTORE I_^1_%STA- €€I_^1*_]_^1_%LDA* IOS422_'CHECK ANY ERRORS_^1_%SAP IOS425_'NO ERROR_^1_%JMP IOR072_'OTHERWISE REHRCT_^1*_]_^1IOS425 LDA* IOS42V_'CHECK MORE EOF_^1_%SAZ IOS429_'SKIP IF NO MORE_^1*_]_^1_%EOR- V25,I_(OTHERWISE RESET FLAG_^1_%STA* IOS42V_^1*_]_^1_%LDA- V04,I_(2ND LU_^1_%JMP* IOS421_^1*_]_^1_%STA- V53,I_(CLEAR EOF FLAG_^1IOS429 JMP* (IOS42)_^1IOS344 NOP 0_Q63*1383_^1_%RTJ- (AMONI)_K€€63*1383_^1_%NUM $4C00_(FWRITE_>63*1383_^1_%ADC IOS3V4_'COMP_@63*1383_^1_%ADC 0_,THRD_@63*1383_^1_%NUM $18FC_(ASCII STD OUT COMM_263*1383_^1_%NUM 16_+NUM OF WORDS_863*1383_^1_%ADC IOS34M_'MESSAGE ADR_963*1383_^1_%JMP- (ADISP)_K63*1383_^1IOS3V4 JMP* (IOS344)_$RETURN_>63*1383_^1IOS34M ALF 16,UNIT1 = UNIT2, READY FOR UNIT2 -_/63*1383_^1_%EJT_T63*1383_^1****_'NO CODE MAY BE ADDED€  AFTER THIS POINT_'**** 63*1383_^1*_]_^1IOS42V NUM 0_^1*_]_^1_%NUM $2020_^1IOBUF2 EQU IOBUF2(*)_#START OF IO BUFFER AREA_^1************_^1_%END IOUPV4_^__ PCYFT CSY/ J07 P€1_%NAM CYFT_)DECK-ID J07 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT CYFT_^1*_]_^1CYFT_!NOP_]_^1GO_#RTJ READ_^1ZZ_#LDA =A N_)SET UP PARAMETER TO CAL LOOK_^1_%STA PARA1+1_%FOR NAM CARD_^1_%LDA =ANA_^1_%STA PARA2+1_^1_%LDA€€ =AM_^1_%STA PARA3+1_^1_%LDA =AAM_^1_%STA PARA4+1_^1_%RTJ LOOK_)Q RETURNS WITH NUMBER OF_^1_%JMP* MOVE_)WORDS SEARCHED BEFORE A FIND_^1_%JMP* GO_^1_%JMP* GO_+RETURNS AT P WITH FIND,_^1*_CP+1 WITH NO FIND_^1*_CP+2 WITH BLANK FIND_^1*_]_^1MOVE_!LDA CRDIN,Q_^1_%SUB =A_+CHECK FOR TWO BLANKS_^1_%SAN LL_^1BMPQ_!INQ 1_^1_%JMP* MOVE_^1LL_#LDA CRDIN,Q_^1_%AND =N$FF00_^1_%SUB =N$€€2000_%CHECK FOR BLANK/X_^1_%SAN MM_^1_%JMP* ODD_*YES, BLANK X_^1MM_#LDA CRDIN,Q_^1_%SUB =AM_*CHECK FOR M/BLANK_^1_%SAN NN_^1_%JMP* BMPQ_^1NN_#LDA CRDIN,Q_%EVEN MOVE TREE WORDS_^1_%STA* DCK_*TO DCK/ AND HOL/_^1_%STA* HOL_*CARDS_^1_%INQ 1_^1_%LDA CRDIN,Q_^1_%STA* DCK+1_^1_%STA* HOL+1_^1_%INQ 1_^1_%LDA CRDIN,Q_^1_%STA* DCK+2_^1_%STA* HOL+2_^1_%JMP* INSERT_^1DCK_"ALF 20,XXXX€€XX DCK/ I,C_^1_%ALF 20,_^1HOL_"ALF 20,XXXXXX HOL/_^1_%ALF 20,_^1ODD_"STQ- I_^1_%LDA* CRDIN,I_%2031 XXXX_^1_%RAO- I_^1_%LDQ* CRDIN,I_%2031 3233_^1_%LLS 8_,3132 33XX_^1_%STA* HOL_*SAVE WORD ONE_^1_%STA* DCK_^1_%LLS 8_,3233 XXXX_^1_%RAO- I_^1_%LDQ* CRDIN,I_$2333 3435_^1_%LLS 8_,3334 35XX_^1_%STA* HOL+1_(SAVE WORD TWO_^1_%STA* DCK+1_^1_%LLS 8_,3435 XXXX_^1_%RAO- I_^1_%LDQ€€* CRDIN,I_%3435 3620_^1_%LLS 8_,3536 20XX_^1_%STA* HOL+2_(SAVE WORD THREE_^1_%STA* DCK+2_^1INSERT NOP 0_^1_%RTJ* WRDCK_(INSERT DCK/ CARD_^1_%RTJ* WRHOL_(INSERT HOL/ CARD_^1_%RTJ* WRITE_'COPY NAM CARD_^1_%RTJ* LSDCK_(LIST CURRENT DCK/ CARD_^1_%JMP ENDLK_(GO LOOK FOR END CARD_^1*_]_^1READ_!NOP 0_^1_%FREAD $F9,YY,CRDIN,40,A,,,I,,1 READ A CARD_+**MSOS 4.0_^1_%EXIT_^1YY_#LDA* REA€€D+5_^1_%SAP YZ_$BIT 15 SYA ERROR_^1_%ALS 1_%YES_^1_%SAP YZ_#BIT 14 SAY FEWER WORDS_^1*_+YES_^1*_$ERROR + FEWER WORDS = END OF FILE_^1*_]_^1_%RTJ* WREND_$WRITE FINAL END/_^1_%EXIT_^1YZ_#JMP* (READ)_^1*_]_^1WRITE NOP 0_,COPY CARD_^1_%FWRITE $FA,WW,CRDIN,40,A,,,I,,1_7**MSOS 4.0_^1_%EXIT_^1WW_#JMP* (WRITE)_^1*_]_^1WRHOL NOP 0_,INSERT HOL/ CARD_^1_%FWRITE $FA,VV,HOL,40,A,,,I,,1€€_8**MSOS 4.0_^1_%EXIT_^1VV_#JMP* (WRHOL)_^1*_]_^1WRDCK NOP 0_,INSERT DCK/ CARD_^1_%FWRITE $FA,UU,DCK,40,A,,,I,,1_9**MSOS 4.0_^1_%EXIT_^1UU_#JMP* (WRDCK)_^1*_]_^1LSDCK NOP 0_,LIST DCK/ CARD INSERTED_^1_%FWRITE $FB,TT,DCK,13,A,,,I,,1_9**MSOS 4.0_^1_%EXIT_^1TT_#JMP* (LSDCK)_^1*_]_^1WREND NOP 0_,WRITE END/ CARD_^1_%FWRITE $FA,SS,END,40,A,,,I,,1_8**MSOS 4.0_^1_%EXIT_^1SS_#JMP* (W€€REND)_^1_%BZS CRDIN(80)_^1*_]_^1LOOK_!NOP 0_^1_%CLR Q_^1_%LDA* CRDIN,Q_^1_%AND =N$FF00_^1_%SUB =N$2000_%CHECK FIRST COLUMN_^1_%SAZ TEST_^1_%JMP* CPYOUT_^1TEST_!LDA* CRDIN,Q_^1PARA1 SUB =A N_)CHECK FOR N/ E_^1_%SAN AA_^1_%JMP* XX_+NAM/ END TEST_^1AA_#LDA* CRDIN,Q_%NAM /END TEST_^1_%SUB =N$2020_%CHECK FOR SPACE*SPACE_^1_%SAZ BB_^1_%JMP* CPYOUT_^1BB_#TRQ A_^1_%INA -32_*CH€€ECK FOR BLANK CARD_^1_%SAN CC_^1_%RAO* LOOK_)BLANK FIND_^1_%RAO* LOOK_^1_%JMP* (LOOK)_^1CC_#INQ 1_^1_%LDA* CRDIN,Q_^1PARA2 SUB =ANA_)CHECK FOR NA/EN_^1_%SAZ DD_^1_%JMP* TEST_)TEST LOOP_^1DD_#INQ 1_^1_%LDA* CRDIN,Q_^1PARA3 SUB =AM_*M /D TEST_^1_%SAZ EE_^1_%JMP* CPYOUT_^1XX_#INQ 1_^1_%LDA* CRDIN,Q_^1PARA4 SUB =AAM_)AM/ND TEST_^1_%SAZ FF_^1_%JMP* CPYOUT_^1FF_#INQ 1_^1_%L€€DA* CRDIN,Q_^1_%AND =N$FF00_^1_%SUB =N$2000_%TEST FOR TRAILING BLANK_^1_%SAZ EE_^1_%JMP* CPYOUT_^1EE_#JMP* (LOOK)_'FIND_^1CPYOUT RAO* LOOK_^1_%JMP* (LOOK)_^1*_]_^1ENDLK NOP 0_^1_%RTJ READ_^1_%LDA =A E_)SET UP PARAMETER TO_^1_%STA* PARA1+1_)LOOK FOR END CARD_^1_%LDA =AEN_)CARD_^1_%STA* PARA2+1_^1_%LDA =AD_^1_%STA* PARA3+1_^1_%LDA =AND_^1_%STA* PARA4+1_^1_%RTJ* LOOK_^1_%JMP€* TRY2_)FIND_(P_^1_%JMP* TRY1_)NO FIND_$P+1_^1_%JMP* ENDLK_(BLANK FIND_!P+2_^1TRY1_!RTJ WRITE_^1_%JMP* ENDLK_^1TRY2_!RTJ WRITE_'COPY END CARD_^1_%RTJ WREND_'WRITE END/ CARD_^1_%JMP GO_+GO LOOK FOR NAM CARD AGAIN_^1*_]_^1END_"ALF 20,_%END/_^1_%ALF 20,_^1_%END CYFT_^__PLCOSY CSY/ J06 P€1_%NAM LCOSY_(DECK-ID J06 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT LCOSY_^1_%BSS INBUF(193),OUTBUF(6)_^1CMATCH ALF 3, CSY/_^1EOL_"ALF 3, END/_^1ENDMSG ALF 12,_#END OF COSY LIBRARY_^1LCOSY NOP 0_^1_%RTJ* TYPEIT_^1_%LD€€Q =N192_^1CLEAR ENA 0_^1_%STA INBUF,Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* CLEAR_^1_%FREAD $F9,0,INBUF,193,A,0,0,I,0,1_5**MSOS 4.0_^1_%LDA* *-4_^1_%SAZ 1_^1_%JMP* *-2_^1_%LDA INBUF+3_^1_%SUB* EOL_^1_%SAZ 1_^1_%JMP* CCK_^1_%LDA INBUF+4_^1_%SUB* EOL+1_^1_%SAZ 1_^1_%JMP* CCK_^1_%LDA INBUF+5_^1_%SUB* EOL+2_^1_%SAZ 1_^1_%JMP* CCK_^1_%FWRITE $FB,0,ENDMSG,12,A,0,0,I,0,1_4**MSOS 4.0_€€^1_%EXIT_^1CCK_"LDA INBUF+3_^1_%SUB* CMATCH_^1_%SAZ 1_^1_%JMP* CLEAR-2_^1_%LDA INBUF+4_^1_%SUB* CMATCH+1_^1_%SAZ 1_^1_%JMP* CLEAR-2_^1_%LDA INBUF+5_^1_%SUB* CMATCH+2_^1_%SAZ 1_^1_%JMP* CLEAR-2_^1_%ENQ 5_^1MOVE_!LDA INBUF,Q_^1_%STA* OUTBUF,Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* MOVE_^1_%FWRITE $FB,0,OUTBUF,6,A,0,0,I,0,1_5**MSOS 4.0_^1_%RTJ PUNIT_!SEE IF WE PUNCH DCK CARDS_^1_%LD€€A* *-6_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* CLEAR-2_^1TYPOUT ALF 10, :R DCK/ I ,H ,C_^1TYPEIT NOP_]_^1_(FWRITE_!$FC,0,TYPOUT,10,A,0,0,I,0,1_0**MSOS 4.0_^1_%FREAD $FD,0,TYBUFF,8,A,0,0,I,0,1_5**MSOS 4.0_^1_%LDA* *-4 PICKUP THREAD WORD_^1_%SAZ 1_^1_%JMP* *-2 LOOP ON BUSY_^1_%LDA* TYBUFF_^1_%TRA Q_^1_%AND* NUMCK_($1010_^1_%EOR* NUMCK_^1_%SAZ NUM010_^1_%ENA 0_^1_%LLS 8_^1_%INA -$€€2F_^1_%SAZ 1_^1_%JMP* TYPEIT+1 ERROR OUTPUT AGAIN_^1_%STA* DCKFLG_'CLR FLAG_^1TYPE10 JMP* (TYPEIT)_^1_%EJT_]_^1*_]_^1*_$THIS PART OF THE PROGRAM LOOKS FOR A SLASH_^1*_]_^1*_]_^1NUM010 STQ* DCKFLG_^1_%STQ* BUILD_(STORE I PARAMETERS_^1_%LDQ* TYBUFF+1_^1_%LLS 8_^1_%STQ* HOLD1_(CHAR1 OF H PARAMETER_^1_%INA -$2C_)CHECK FOR COMMA_^1_%SAZ 1_,COMMA_^1_%JMP* TYPEIT+1_$ERROR_^1_%LDQ* H€€OLD1_^1_%QLS 8_^1_%LDA* TYBUFF+2_^1_%LLS 8_^1_%TRQ A_,Q= H PARAMETER_^1_%AND* NUMCK_^1_%EOR* NUMCK_^1_%SAZ 3_^1_%ENA -0_^1_%STA* BUILD+1_^1_%JMP* NUM030 THIS SHOULD BE RIGHT_^1_%JMP* NUM020_^1_%BZS TYBUFF(9)_^1DCKFLG NUM 0_^1_%BZS BUILD(3)_^1HOLD1 NUM 0_^1CONTRL ALF 1,I=_^1_%ALF 1,H=_^1_%ALF 1,C=_^1NUMCK NUM $1010_^1*_]_^1*_]_^1*_]_^1*_]_^1NUM020 STQ* BUILD+1_%THIS €€IS FOR XX,XX,XX_^1_%LDQ* TYBUFF+3_$PICKUP C= PARAMETERS_^1_%TRQ A_^1_%AND* NUMCK_^1_%EOR* NUMCK_^1_%SAZ NUM025_'IS IT A NUMBER_^1_%ENA 0_^1_%LLS 8_^1_%INA -$2F_^1_%SAZ 1 CHECK FOR SLASH IF NOT ERROR_^1_%JMP* TYPEIT+1_^1_%ENQ -0_$NO,_!FLAG WITH NEG ZERO,_^1NUM025 STQ* BUILD+2 YES IA FOR XX,/,XX_^1_%JMP* NUM050 BUILD CARD_^1NUM030 LDQ* TYBUFF+2_^1_%ENA 0_^1_%LLS 8_^1_%INA€€ -$2C_^1_%SAZ 1_^1_%JMP* TYPEIT+1_^1_%LDA* TYBUFF+2_$BUILD C PARAMETER_^1_%LDQ* TYBUFF+3_^1_%LLS 8_^1_%TRA Q_^1_%AND* NUMCK_(IS IT NUMERIC_^1_%EOR* NUMCK_^1_%SAZ 1_^1_%JMP* TYPEIT+1_$ERROR_^1_%STQ* BUILD+2_%YES ITS A NUMBER_^1_%EJT_]_^1*_]_^1*_$THIS PART OF THE PROGRAM PICKS UP THE LU_^1*_$AND ORS THEM WITH THE RIGHT PARAMETER AND STICKS IT IN_^1*_$THE CARD FEILD_^1NUM050 ENQ €€ 0_^1_%STQ- I_,ZERO I_^1_%LDA* BUILD,I_^1_%SAM NUM055_^1_%LDQ* COMMA_^1_%SQZ 2_^1_%JMP* NUM070_^1NUM055 JMP* NUM060_^1_%LDQ* CONTRL,I_^1_%STA* FEILD+1_^1_%STQ* FEILD_^1_%STQ* COMMA_^1NUM060 RAO- I_^1_%JMP* NUM050+2_^1CARD_!ALF 3,_^1DCKK_!ALF 3, DCK/_^1FEILD ALF 10,_^1_%ALF 5,_^1_%ALF 5,_^1_%ALF 5,_^1_%ALF 5,_^1_%ALF 4,_^1COMMA NUM 0_^1NUM070 ENA $2C_*,_^1_%LDQ* CONTRL,I_$Z€€=_^1_%LLS 8_,,Z_^1_%STA* FEILD+2_^1_%CLR A_,ZERO A_^1_%LLS 8_,=_^1_%LDQ* BUILD,I_%XX_^1_%LLS 8_,*_^1_%STA* FEILD+3_%=X_^1*_$Q NOWS HAS LAST CHAR_^1*_]_^1_%LDA- I_^1_%INA -2_^1_%SAM NUM080_^1_%INQ $20_^1_%STQ* FEILD+4_^1NUM075 JMP (TYPEIT)_^1NUM080 INQ $2C_^1_%STQ FEILD+4_^1_%RAO- I_^1_%LDA* BUILD,I_^1_%INA_!0_^1_%SAZ NUM090_!SLASH IN C PARA_^1_%LDQ CONTRL,I_!FEILD SHOUL€€D EQUAL_^1_%STQ* FEILD+5_^1_%STA* FEILD+6_%I=XX,H=XX,C=XX_^1_%JMP* NUM075_^1NUM090 INQ -$C_!SET COMMA BACK TO BLANK_^1_%STQ FEILD+4_^1_%JMP* NUM075_^1PUNIT NOP_]_^1_%LDA* DCKFLG_^1_%SAN 1_^1_%JMP* (PUNIT)_^1_%ENQ 2_^1PUT020 LDA OUTBUF,Q_!MOVE THE NAME TO PUNCH BUFFER_^1_%STA CARD,Q_^1_%SQZ 2_^1_%INQ -1_^1_%JMP* PUT020_^1_%FWRITE $FA,0,CARD,40,A,0,0,I,0,1_6**MSOS 4.0_^1_%LDA€V* *-4_^1_%SAZ 1_#SKIP IF POSTIVE ZERO_^1_%JMP* *-2_^1_%JMP* (PUNIT)_^1_%END LCOSY_^__VPLISTR CSY/ J02 P€1_%NAM LISTR_(DECK-ID J02 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_]_^1*_'THIS PROGRAM WILL LIST RELOCATABLE_^1*_'NAME BLOCKS AND CONTROL STATEMENTS_^1*_'FROM THE STANDARD INPUT DEVICE ON_^1*_'THE STANDARD LIST DEVICE._^1€€*_]_^1*_]_^1_(ENT_%LISTR_^1LISTR_"NOP_^1_%FWRITE $FB,LISTR1,TOP,1,A,0,0,I,,1_4**MSOS 4.0_^1_%JMP- ($EA)_^1LISTR1 NOP_]_^1_(RTJ_%INP_0INPUT_^1_(SAZ_%ERR_00 ERROR MESSAGE_^1_(SAP_%PLUS_/+1 NAME BLOCK_^1_(SAM_%INDR+2_--1 * BLOCK_^1ERR_$RTJ_%ERRA_^1_(RTJ*_$DUMP_^1_(RTJ_%INP_^1_(SAZ_%INDR+1_-OUT OF ORDER INPUT B_^1_(SAP_%INDR_/NAME BLOCK_^1_(SAM_%INDR+2_-* BLOCK_^1INDR_#JMP*_$PLUS_^1_(€€JMP*_%ERR_^1_(JMP_%MINUS_^1*_]_^1*_]_^1*_'THIS IS THE PLUS ROUTINE_^1*_'IT IS USED WHEN A NAME_^1*_'BLOCK IS FOUND ON THE RELO. INPUT_^1*_]_^1*_]_^1PLUS_#NOP_^1_(LDA_%=N$2020_,BLANK THREE WORDS_^1_(STA_%BUFR_^1_(STA_%BUFR+1_^1_(STA_%BUFR+2_^1_(STA_%BUFR+3_^1_(STA_%BUFR+7_^1_(STA_%BUFR+8_^1_(STA_%BUFR+9_^1_(STA_%BUFR+10_^1_(STA_%BUFR+11_^1_(STA_%BUFR+12_^1_(STA_%BUFR+13_^1_(RTJ_%BLK€€OUT_^1_(RTJ_%MOVE_^1_(LDQ*_$ARCNT_^1_(RTJ*_$INCR_^1_(LDQ*_$ATRCNT_^1_(RTJ*_$INCR_^1CHKTR_"RTJ_%INP_^1_(SAZ_%YES_0NOT NAME OR * BLOCK_^1_(RTJ*_$ERRA_^1_(RTJ*_$DUMP_^1_(JMP*_$LISTR_^1YES_$LDA_%BUFR_^1_(SUB_%=N$C050_,TRA BLOCK MASK_^1_(SAZ_%TRA_0SKIP IF TRA BLOCK_^1_(LDQ*_$ARCNT_^1_(RTJ*_$INCR_^1_(LDQ*_$ATRCNT_^1_(RTJ*_$INCR_^1_(JMP*_$CHKTR_^1TRA_$LDQ*_$ARCNT_^1_(RTJ*_$INCR_^1_(LDQ*_$€€ATRCNT_^1_(RTJ*_$INCR_^1_(LDQ*_$ALCNT_^1_(RTJ*_$INCR_^1_(RTJ*_$DUMP_^1_%JMP* LISTR1_^1ALCNT_"ADC_%LCNT+1_^1ARCNT_#ADC_$RCNT+1_^1ATRCNT_!ADC_%TRCNT+1_^1*_]_^1*_]_^1*_'THIS IS THE DUMP SUBROUTINE_^1*_'IT DUMPS A RECORD TO THE STD. LIST OUT_^1*_'IT ALSO CLEARS THE RECORD COUNT_^1*_'REGISTER AND HAS A SEL. STOP LOC._^1*_]_^1*_]_^1DUMP_#NOP_^1_%FWRITE $FB,BB,RECORD,41,B,,,I,,1_6**MSOS 4€€.0_^1_(EXIT_^1BB_%LDA_%=N$2B20_^1_(STA_%REC2_/STORE PLUS SIGN_^1_%FWRITE $FB,ZZ,REC2,41,B,,,I,,1 STANDARD LIST OUT_$**MSOS 4.0_^1_(EXIT_^1ZZ_%LDA_%=N$2020_^1_(STA_%REC2_/REMOVE PLUS SIGN_^1_(LDA_%=N$3030_,ZERO CODE_^1_(STA_%RCNT_^1_(STA_%RCNT+1_^1_(SLS_%0_^1_(JMP*_$(DUMP)_^1*_]_^1*_]_^1*_'THIS IS THE ASCII INCREMENT SUBROUTINE_^1*_'IT COLLECTS AN ADDRESS PARAMETER_^1*_'PASSED IN Q€€ AND UPDATES_^1*_'THE TWO WORD REGISTER BY 1 ASCII_^1*_]_^1*_]_^1_(BZS_%PASS(1)_^1_(BZS_%SAVA(1)_^1INCR_#NOP_^1_(ENA_%+1_^1_(STA*_$PASS_/STORE PASS GOUNT_^1PASS2_"NOP_%0_3PASS TWO ENTRY POINT_^1_(STQ*_$ADRA+1_-STORE COUNTER ADR._^1_(STQ*_$ADRB+1_-STORE COUNTER ADDRESS_^1_(STQ*_$ADRC+1_-STORE COUNTER ADDRESS_^1_(STQ*_$ADRD+1_-STORE COUNTER ADDRESS_^1_(STQ*_$ADRE+1_-STORE COUNTER AD€€DRESS_^1ADRA_#RAO+_'$7FFF_/A_$Q INCR COUNTER_^1_(CLR_%A_30000_!3X3X_^1ADRB_#LDQ+_'$7FFF_.CHECK COUNTER_^1_(LLS_%16_23X3X_!0000_^1_(LLS_%12_2X000_!03X3_^1_(STA*_$SAVA_^1_(SUB_%=N$A000_-XXXX_!03X3_^1_(SAN_%IND_0SKIP,NO CARRY_^1*_EIF A=0,CARRY_^1*_HA_$Q_^1_(LDA*_$SAVA_0X000_"03X3_^1_(LLS_%12_2003X_"3X00_^1_(LDQ_%=N$3000_^1_(INA_%+1_2003X_!3X00_^1_(STA*_$SAVA_/SAVE IN CASE OF NO CARRY€€_^1*_GA_$Q_^1_(SUB_%=N$003A_-XXXX_!3X00_^1_(SAN_%IND+1_.SKIP NO CARRY_^1_(ENA_%$30_0CARRY A=0_^1*_GA_$Q_^1*_F0030_!3000_^1_(LLS_%8_33030_!0000_^1_(JMP*_$ADRC_^1IND_$JMP*_$JPA_^1_(JMP*_$JPB_^1ADRC_#STA+_'$7FFF_-SET COUNER_^1_(LDA*_$PASS_/CHECK PASS COUNT_^1_(SAZ_%DONE_/SKIP,END SECOND PASS_^1_(CLR_%A_^1_(STA*_$PASS_/SIGNAL END OF FIRST PASS_^1_(LDQ*_$ADRA+1_-COLLECT REGISTER ADR._^1€€_(INQ_%-1_1UPDATE COUNTER ADDRESS_^1_(JMP*_$PASS2_.PASS 2 ENTRY_^1*_GA_$Q_^1JPA_$LDA*_$SAVA_0X000_!0303_^1_(LLS_%16_20303_!X000_^1_(LLS_%4_3303X_!0000_^1ADRD_#STA+_'$7FFF_,SET COUNTER_^1DONE_#JMP*_$(INCR)_-RETURN_^1*_HA_"Q_^1JPB_$LDA*_$SAVA_000OX_!3000_^1_(LLS_%8_33X30_!0000_^1ADRE_#STA_($7FFF_,SET COUNTER_^1_(JMP*_$(INCR)_-RETURN_^1*_]_^1*_]_^1*_'THIS IS THE ERROR SUBROUTINE_^1*_'€€IT IS USED WHEN A BLOCK IS FOUND_^1*_'THAT IS OUT OF LOGICAL ORDER_^1*_'A NOTE IS ENTERED IN THE RECORD DUMP_^1*_]_^1*_]_^1ERRA_#NOP_^1_(ENQ_%14_1MOVE EMSG TO NME_^1AGO_$LDA*_$EMSG,Q_^1_(STA_%NME,Q_^1_(SQZ_%GON_0CHECK COUNT_^1_(INQ_%-1_^1_(JMP*_$AGO_0LOOP_^1GON_$LDQ*_$ALCNT_.PASS PARA IN Q_^1_(RTJ*_$INCR_/GO TO INCREMENTOR_^1_(LDQ*_$ARCNT_^1_(RTJ*_$INCR_^1_(LDQ*_$ATRCNT_^1_(RTJ*_$I€€NCR_^1_(JMP*_$(ERRA)_^1*_]_^1*_]_^1*_'THIS IS THE MINUS SUBROUTINE_^1*_'IT IS USED WHEN A * BLOCK_^1*_'(CONTROL STATEMENT) IS FOUND_^1*_'ON THE RELOCATABLE INPUT._^1*_]_^1*_]_^1MINUS_"NOP_^1_(RTJ*_$BLKOUT_^1_(RTJ*_$MOVE_^1_(LDQ*_$ALCNT_^1_(RTJ*_$INCR_^1_(LDQ*_$ARCNT_^1_(RTJ_%INCR_^1_(LDQ*_$ATRCNT_^1_(RTJ_%INCR_^1_(RTJ*_$DUMP_^1_(RTJ*_$INP_^1_(SAZ_%IDR_^1_(SAP_%INDR1_^1_(SAM_%INDR2€€_^1IDR_$JMP_%ERR_^1INDR1_"JMP_%PLUS_^1INDR2_"JMP*_$MINUS_^1*_]_^1*_]_^1*_'THIS IS THE INPUT SUBROUTINE_^1*_'FIRST IT CLEARS THE BUFR THEN_^1*_'IT DOES AN INPUT AND CHECKS THE_^1*_'TYPE OF RECORD READ._^1*_'PARAMETERS ARE PASSED IN A_^1*_'-1 INDICATES A * BLOCK_^1*_'+1 INDICATES A NAME BLOCK_^1*_'0 INDICATES ALL OTHERS_^1*_]_^1*_]_^1INP_$NOP_^1_(LDA_%=N$2020_^1_(ENQ_%+14_^1DOIT_#STA€€_%BUFR,Q_-BLANK BUFR AREA_^1_(INQ_%-1_^1_(SQZ_%1_^1_(JMP*_$DOIT_^1_%FREAD $F9,AA,BUFR,15,B,,,I,,1 STD INPUT DEVICE_%**MSOS 4.0_^1_(EXIT_^1AA_#SQP AB-*-1_^1_%EXIT 0_+EXIT IF ERROR OR EOF_^1AB_#LLS 16_+STATUS TO A_^1_(AND_%=N$4000_,BIT 14 SHORT READ MASK_^1_(SAN_%XX_1SKIP IF SHORT READ_^1_(LDA*_$BUFRAD_^1_(INA_%+13_0CALCULATE FAKE WORD COUNT_^1_(STA_%BUFR+14_,STORE FAKE WORD COU€€NT_^1XX_%LDA_%BUFR_^1_(ARS_%8_2DROP LOWER CHARACTER_^1_(SUB_%=N$002A_,MASK*_^1_(SAZ_%PARA1_.SKIP IF *_^1_(LDA_%BUFR_^1_(SUB_%=N$2050_,MASK FOR NAME BLOCK_^1_(SAZ_%PARA2_.SKIP IF NAME BLOCK_^1_(ENA_%0_2CLEAR A_^1_(STA*_$FLAG_/NOT NAME OR * BLOCK_^1_(JMP*_$(INP)_.RETURN_^1PARA1_"ENA_%-1_1* BLOCK FLAG_^1_(STA*_$FLAG_^1_(JMP*_$(INP)_.RETURN_^1PARA2_"ENA_%1_2NAME BLOCK FLAG_^1_(STA*_$FL€€AG_^1_(JMP*_$(INP)_.RETURN_^1_(BZS_%FLAG(1)_^1BUFRAD_!ADC_%BUFR_^1*_]_^1*_]_^1*_'THIS IS THE BLANK OUT SUBROUTINE_^1*_'IT STORES BLANKS IN THE_^1*_'OUTPUT RECORD AREA_^1*_]_^1*_]_^1BLKOUT_!NOP_^1_(LDA_%=N$2020_,BLANKS_^1_(ENQ_%14_1LOOP COUNT_^1SPIN_#STA*_$NME,Q_.FILL_^1_(INQ_%-1_^1_(SQZ_%GO_1CHECK SPIN COUNT_^1_(JMP*_$SPIN_/LOOP AGAIN_^1GO_%JMP*_$(BLKOUT)_+RETURN_^1*_]_^1*_]_^1*_'T€€HIS IS THE MOVE SUBROUTINE_^1*_'IT MOVES THE INPUT BUFFER AREA_^1*_'TO THE RECORD OUTPUT AREA_^1*_'IT ALSO CHECKS FOR $FF IN_^1*_'THE LAST CHARACTER AND THROWS_^1*_'IT OUT IF FOUND._^1*_]_^1*_]_^1MOVE_#NOP_^1_(LDA_%BUFR+14_^1_(SUB*_$BUFRAD_-CALCULATE WORD COUNT_^1_(LLS_%16_1WORD COUNT TO Q_^1_(LDA_%BUFR,Q_^1_(AND_%=N$00FF_^1_(SUB_%=N$00FF_^1_(SAN_%AGAIN_^1_(LDA_%BUFR,Q_^1_(AND_%=N$€€FF00_^1_(JMP*_$AGAIN1_^1AGAIN_"LDA*_$BUFR,Q_^1AGAIN1_!STA*_$NME,Q_.MOVE THE DATA_^1_(SQZ_%RET_0SKIP WHEN DONE_^1_(INQ_%-1_1DECREMENT THE MODIFIER_^1_(JMP*_$AGAIN_.LOOP_^1RET_$JMP*_$(MOVE)_-RETUNN_^1*_]_^1*_'INPUT AND OUTPUT BUFFER AREA_^1*_]_^1EMSG_#ALF_%15,OUT OF ORDER INPUT BLOCK_^1RECORD_!ALF_%1,+_^1LCNT_#NUM_%$3030,$3030_^1_(NUM_%$2020_^1NME_$ALF_%15,_^1_(NUM_%$2020,$2020_^1REC€β2_#ALF_%21,_^1RCNT_#NUM_%$3030,$3030_^1_(NUM_%$2020_^1_(ALF_%4,RECORDS_^1_(NUM_%$2020,$2020_^1TRCNT_"NUM_%$3030,$3030_^1_(NUM_%$2020_^1_(ALF_%7,TOTAL RECORDS._^1_(NUM_%$2E03_^1_(BZS_%BUFR(20)_^1TOP_"ALF 1,1_^1_(END_%LISTR_^__βPLULIST CSY/ J01 P€1_%NAM LULIST_'DECK-ID J01 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$IDENTIFIES EQUIPMENTS FOR SYSTEM LOGICAL UNITS FOR MSOS 4.1_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA €€JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_*THIS PROGRAM MUST BE RUN AS A JOB OR_^1*_*ADDED TO THE PROGRAM LIBRARY._^1*_*IT OPERATES BY MAKING A STATUS REQUEST FOR EACH LU_^1_%SPC 2_^1_%EQU TEN($46),SEVEN($5),FIVE($43),SIX($44)_^1_%EXT SYSMON,SYSDAY,SYSYER,SYSID_^1_%EQU LPMASK(2)_^1_%EQU AMONI($F4)_^1_%EXT LOG1A_^1_%ENT LULIST_^1_%EQU LULI€€ST(*)_^1_%ENQ 15_+MOVE SYSTEM ID_^1MOVID LDA+ SYSID,Q_%FROM SYSDAT INTO_^1_%STA MSGID2,Q_$MESSAGE BUFFER_^1_%INQ -1_^1_%SQM IDMOVD_^1_%JMP* MOVID_^1IDMOVD LDA =XSYSMON_$MOVE SYSTEM DATE_^1_%STA MSGID3+1_$INTO MESSAGE BUFFER_^1_%LDA =XSYSYER_^1_%STA MSGID3+4_^1_%LDQ =N$2F2F_^1_%LDA =XSYSDAY_^1_%LLS 8_^1_%STA MSGID3+3_^1_%STQ MSGID3+2_^1_%RTJ- (AMONI)_%FWRITE HEADING PA€€RT 1_^1_%NUM $4C00_^1_%NUM 0_^1_%NUM 0_^1_%NUM $18FB_^1_%NUM 39_^1_%ADC MSGIDO_^1_%RTJ- (AMONI)_^1_%NUM $4C00_(FWRITE HEADING PART 2_^1T0_#ADC 0,0,$18FB_^1_%ADC LL,M1_^1L0_#LDA* T0+1_)LOOP ON THREAD_^1_%SAZ A_^1_%JMP* L0_^1A_$LDA* B_^1_%INA 1_,ADD 1 TO LU IN REQUEST_^1_%STA* B_^1_%SUB LOG1A_(IS IT LAST LU_^1_%SAZ ZZ_^1_%SAP EXIT_^1ZZ_#RTJ- (AMONI)_^1_%NUM $600_)STATU€€S REQUEST_^1B_$NUM 0_,LOGICAL UNIT_^1_%NUM 0_^1_%STA* XA_+SAVE REPLY_^1_%STQ* XQ_^1_%JMP* D_,GO TO PRINT SECTION_^1_%SPC 2_^1XA_#NUM 0_^1XQ_#NUM 0_^1EXIT_!EXIT_^1_%SPC 1_^1D_$LDA* XQ_+STATUS WORD_^1_%AND =N$07F0_%GET TYPE CODE_^1_%ARS 4_^1_%INA -44_^1_%SAM TYPE_)IF ABOVE 44_^1_%ENA 0_,SET TYPE = 44_^1TYPE_!INA 44_^1_%ALS 4_,MULTIPLY BY 16_^1_%ADD =XALF_^1_%STA* E_,STA€€RT OF EQUIP TYPE MSG_^1_%LDA* B_,COVERT LU TO ASCII_^1_%RTJ* CONVRT_^1_%STA* M1_^1_%ENQ 16_^1_%RTJ* MOVE_^1E_$ADC ALF_^1_%ADC M1B_^1_%SPC 2_^1_%LDA* XQ_+STATUS WORD_^1_%AND- SIX_*GET R/W CODE_^1_%ARS 1_^1_%MUI- FIVE_^1_%ADD =XARF_^1_%STA* F_,START OF R/W MSG_^1_%ENQ 5_^1_%RTJ* MOVE_^1F_$ADC ARF_^1_%ADC M1A_^1_%SPC 2_^1_%LDA* XQ_^1_%ARS 11_^1_%AND- SEVEN_(A = CLASS CODE_^€€1_%MUI- SEVEN_^1_%ADD =XARL_^1_%STA* F2_^1_%ENQ 7_^1_%RTJ* MOVE_)MOVE CLASS CODE MESSAGE TO OUT BUFFER_^1F2_#ADC ARL_^1_%ADC M1F_^1_%SPC 2_^1_%LDQ* B_^1_%LDQ+ LOG1A,Q_^1_%LDA- 7,Q_^1_%ARS 7_^1_%AND- LPMASK+4_^1_%RTJ* CONVRT_'CONVERT TO ASCII_^1_%STA* M1G+2_(STORE IT IN OUTPUT LINE_^1*_]_^1_%RTJ- (AMONI)_^1_%NUM $4C00_(FWRITE REQUEST_^1T1_#ADC 0,0,$18FB_^1_%ADC LL,M1_^1L1_#L€€DA* T1+1_)WAIT_^1_%SAZ GOBCK_^1_%JMP* L1_^1GOBCK JMP A_,RETURN TO START_^1_%SPC 3_^1MOVE_!NUM 0_,SUBROUTINE TO MOVE BLOCK OF CORE_^1_%LDA* MOVE_^1_%STA- I_^1_%LDA- (I)_^1_%STA* MOVL+1_^1_%LDA- 1,I_^1_%STA* MOVL1+1_^1MOVC_!INQ -1_^1_%SQP MOVL-*-1_^1_%RAO* MOVE_^1_%RAO* MOVE_^1_%JMP* (MOVE)_^1MOVL_!LDA+ MOVE,Q_^1MOVL1 STA+ MOVE,Q_^1_%JMP* MOVC_^1_%SPC 1_^1*_*HEX TO ASCII CONV€€ERSION_^1*_*A-REG = $00 TO $63 ON ENTRY_^1*_*ROUTINE CONVERTS TO DECIMAL_^1*_*AND RETURNS WITH ASCII CHARS IN A_^1_%SPC 1_^1CONVRT NUM 0_,HEX TO ASC CONVERSION_^1_%ENQ 0_^1_%DVI- TEN_*MSB IN A, LSB IN Q_^1_%ALS 8_^1_%AAQ A_^1_%ADD =N$3030_%TWO ASCII CHARS IN A-REG_^1_%JMP* (CONVRT)_^1_%SPC 2_^1M1_#ALF 2,LU._^1M1B_"ALF 17,EQUIPMENT DESCRIPTION_^1M1A_"ALF 06,READ/WRITE_^1M1€€F_"ALF 08,CLASS CODE_^1M1G_"ALF 03, EQ NO_^1LL_#EQU LL(*-M1)_^1MSGIDO NUM $0C0D_(TOP OF FORM_^1MSGID1 ALF 17,MSOS 4.1 LOGICAL UNIT LISTING FOR_^1MSGID2 ALF 16,_^1MSGID3 ALF 5, MM/DD/YY_^1_%SPC 3_^1ARF_"EQU ARF(*)_^1_%ALF 05,RFIELD = 0_^1_%ALF 05,READ ONLY_^1_%ALF 05,WRITE ONLY_^1_%ALF 05,READ/WRITE_^1ALF_"EQU ALF(*)_^1_%ALF 16,1711 TELETYPEWRITER_^1_%ALF 16,1721/1€€722 PAPER TAPE READER_)1_^1_%ALF 16,1723/1724 PAPER TAPE PUNCH_*2_^1_%ALF 16,1752_$DRUM UNIT_13_^1_%ALF 16,713,10/711-100/713-120 CRT_)4_^1_%ALF 16,1738/853 DISK UNIT (1.5M)_*5_^1_%ALF 16,1751 DRUM_^1_%ALF 16,1739-1_"CARTRIDGE DISK UNIT_'7_^1_%ALF 16,1738/854 DISK UNIT (3.1M)_^1_%ALF 16,1731/601 MAGNETIC TAPE_^1_%ALF 16,SOFTWARE BUFFERING DEVICE_*10_^1_'ALF 16,COSY UNI€€T_;11_^1_%ALF 16,1728/430 CARD READER/PUNCH_)12_^1_%ALF 16,SOFTWARE CORE ALLOCATOR_,13_^1_%ALF 16,1733-1/854 DISK UNIT (3.1M)_)14_^1_%ALF 16,1733-2/856-2 DISK UNIT (2.2M)_'16_^1_%ALF 16,1733-2/856-4 DISK UNIT (4.5M)_'15_^1_%ALF 16,1742-30 LINE PRINTER_017_^1_%ALF 16,1742-120 LINE PRINTER_/18_^1_%ALF 16,1740/501 LINE PRINTER_.19_^1_%ALF 16,1732-1/1706/608 BUFR MAG TAPE_%€€22_^1_%ALF 16,1732-2/615-93 MAG TAPE UNIT_^1_%ALF 16,1732-1/1706/608 BUFR MAG TAPE UNIT_!22_^1_%ALF 16,1726/405 CARD READER_/23_^1_%ALF 16,1732-1/608 MAG TAPE UNIT_,24_^1_%ALF 16,1732-1/609 MAG TAPE UNIT_,25_^1_%ALF 16,1713_$TELETYPE KEYBOARD_)26_^1_%ALF 16,1713_$TTY PAPER TAPE PUNCH_%27_^1_%ALF 16,1713_$TTY PAPER TAPE READER_$28_^1_%ALF 16,1729-2_"CARD READER_/29_^1_%ALF€€ 16,1732-1/1706/609 BUFR MAG TAPE_%30_^1_%ALF 16,SOFTWARE DUMMY ALTERNATE DEVICE_#31_^1_%ALF 16,364-4/361-1 HDX COMM DEVICE_^1_%ALF 16,364-4/361-4 FDX COMM DEVICE_^1_%ALF 16,1742-1 LINE PRINTER_134_^1_%ALF 16,1777 PAPER TAPE READER_.36_^1_%ALF 16,PSEUDO TAPE UNIT_435_^1_%ALF 16,1777 PAPER TAPE PUNCH_/37_^1_%ALF 16,1729-3 CARD READER_26_^1_%ALF 16,1733-1/853 DISK UNIT (1.€€5M)_)9_^1_%ALF 16,1731/1706/601 BUF MAG TAPE_^1_%ALF 16,1726/1706/405 BUF CARD READER_^1_%ALF 16,1747 DATA SET INTERFACE_^1_%ALF 16,1744/274 DIGIGRAPHIC CONSOLE_^1_%ALF 16,1536 LOW LEVEL ANALOG INPUT_^1_%ALF 16,1501 HIGH LEVEL ANALOG INPUT_^1_%ALF 16,UNDEFINED UNIT TYPE_138_^1_%SPC 2_^1ARL_"ALF 07,NO CLASS CODE_^1_%ALF 07,MAGNETIC TAPE_^1_%ALF 07,MASS STORAGE_^1_%ALF 07€†,CARD RDR/PUNCH_^1_%ALF 07,PAPER TAPE I/O_^1_%ALF 07,LINE PRINTER_^1_%ALF 07,TELETYPE_^1_%ALF 07,UD CLASS CODE_^1_%END LULIST_^__†POPSORT CSY/ J03 P€1_%NAM OPSORT_'DECK-ID J03 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$1700 OPERAND SORT FOR MSOS JULY 1969_^1_%SPC 1_^1_%ENT OPSORT_^1_%ENT BGNRD_^1_%EQU STDINP($F9)_^1_%EQU STDSCR($B3)_!STANDARD SCRATCH_^1_%EQU STDOUT($€€FB)_^1_%EQU STDOCD($FC)_^1_%EQU DISP($EA)_^1BIT2_!EQU BIT2($24)_^1_%EQU BIT6($28)_^1_%EQU BIT14($30)_^1HFF00 EQU HFF00($1A)_^1H00FF EQU H00FF($A)_^1H000F EQU H000F($6)_^1H7FFF EQU H7FFF($42)_^1HFFFF EQU HFFFF($12)_^1HF000 EQU HF000($1E)_^1A_$EQU A($46)_^1BGNRD ENA 1_^1_%STA PRGNAM_^1_%ENA 0_^1_%STA OPFLG_^1_%FREAD STDINP,NUMCK,BUFF,50,A,0,1,I,,1_0**MSOS 4.0_€€^1_%JMP- (DISP)_^1NUMCK LDA BUFF+1_^1_%SUB BLANKS_'LOCATION FIELD BLANK_^1_%SAN 1_^1_%JMP* BGNRD+6_%YES,READ NEXT RECORD_^1_%LDA BUFF_^1_%SUB ASTKS_(ERRORS ON LIST OUTPUT PRIOR_^1_%SAN 1_,TO NAM CARD_^1_%JMP* BGNRD+6_%YES,READ NEXT RECORD_^1_%LDA BUFF+1_^1_%LDQ PRGNAM_^1_%SQZ NUMCK1_'HAS THE NAM CARD BEEN READ_^1_%ARS 8_,NO,CONTINUE SEARCH_^1_%AND- H00FF_^1_%INA -$40_^1€€_%SAM 1_,MEMORY MAP_^1_%JMP* BGNRD+6_^1NUMCK1 LDA BUFF+1_^1_%ARS 8_^1_%EOR- BIT14_(NO,OUTPUT A BLANK PLUS_^1_%STA CHRBF+2_%ONE CHAR. OF LOC. FLD._^1_%LDA BUFF+1_^1_%ALS 8_^1_%AND- HFF00_^1_%STA CHRBF+3_%OUTPUT 2ND CHAR OF LOC. FLD._^1_%LDA BUFF+2_^1_%ALS 8_^1_%AND- HFF00_^1_%STA BUFF_^1_%LDA CHRBF+4_^1_%AND- HFF00_^1_%SUB BUFF_)IS THIS RECORD WITHIN A_^1_%SAN 1_,MACRO_€€^1_%JMP* BGNRD+6_%YES,READ NEXT RECORD_^1_%LDA BUFF+2_^1_%ARS 8_^1_%EOR* CHRBF+3_J**MSOS 4.0_^1_%STA* CHRBF+3_%OUTPUT 3RD CHAR. OF LOC._+**MSOS 4.0_^1_%LDA BUFF+2_^1_%ALS 8_^1_%AND- HFF00_^1_%INA $20_^1_%STA* CHRBF+4_%OUTPUT LAST CHAR OF LOC._^1_%ENQ 10_^1_%STQ- I_^1_%LDA* BUFF,I_'LOCATE TO THE FIRST WORD_+**MSOS 4.0_^1_%AND- HFF00_(OF LABEL FLD._^1_%EOR =N$2A00_%CHECK FOR A€€N ASTERIK_^1_%SAN 1_^1_%JMP* BGNRD+3_%COMMENT CARD GET NEXT REC._^1NXTWRD LDA* BUFF,I_^1_%AND- HFF00_(CHECK FOR A BLANK CHAR._^1_%EOR- BIT14_(TERMINATING A FIELD_^1_%SAN 3_^1_%ENA 1_,SWITCH CHAR.FLAG_^1_%STA* CHRFLG_^1_%JMP* OPCDSR_^1_%LDA* BUFF,I_^1_%AND- H00FF_^1_%INA -$20_^1_%SAN 3_^1_%ENA 0_^1_%STA* CHRFLG_'SWITCH CHAR. FLAG_^1_%JMP* OPCDSR_^1_%RAO- I_^1_%JMP* NXTWRD_^1OP€€CDSR LDQ* CHRFLG_'BEGIN CHECK FOR NON-BLANK_^1_%SQZ CNTSR_(CHAR.- 1ST WRD. OF OPCODE_^1_%LDA* BUFF,I_^1_%AND- H00FF_^1_%EOR- BIT6_^1_%SAN FLDCK_^1_%CLR A_^1_%STA* CHRFLG_'SWITCH CHAR. FLAG_^1CNTSR RAO- I_^1_%LDA* BUFF,I_^1_%AND- HFF00_^1_%EOR- BIT14_^1_%SAN FLDCK_^1_%ENQ 1_^1_%STQ* CHRFLG_'SWITCH CHAR FLAG_^1_%JMP* OPCDSR+2_^1FLDCK LDQ* OPFLG_(SEARCHING FOR OPERAND OR_^1_%SQ€€Z 1_,OPCODE_^1_%JMP OPRND_(OPERAND_^1ENDCD LDA- I_^1_%STA* OPFLG_^1_%LDA* CHRFLG_'END CARD CHECK_^1_%SAZ 1_^1_%JMP* CNTSR1_^1_%LDA* BUFF,I_^1_%SUB* EN_^1_%SAN 3_^1_%LDA* BUFF+1,I_^1_%SUB* DBLK_^1_%SAZ COMP_^1_%LDA* BUFF,I_^1_%STA* CHRBF_(OUTPUT OPCODE_^1_%RAO- I_^1_%JMP* COMP1_^1COMP_!ENA 1_,END CARD FOUND, WRITE ALL_^1_%STA LSTRD_(PARTIALLY FILLED BUFFERS_^1_%ENA 0_,ON MA€€SS STORAGE_^1_%STA SECAD2_^1_%LDA BFTAB_^1_%STA SECAD_^1_%JMP WRTSC5_^1COMP1 LDA* BUFF,I_'OPCODE NOT END CARD_^1_%STA* CHRBF+1_^1COMP2 RTJ* MCROCK_'CHECK RECORD FOR MACRO_^1_%ENA 1_^1_%STA* OPFLG_(NOT A MACRO_^1_%JMP* OPCDSR_'GO CHECK FOR 1ST OPERAND_^1CNTSR1 CLR A_^1_%STA* CHRFLG_^1_%LDA* BUFF,I_^1_%ENQ 0_^1_%LLS 8_,HALF WORD SEARCH_^1_%STA* CHRBF_^1_%RAO- I_^1_%LDA* BUF€€F,I_^1_%ARS 8_^1_%EOR* CHRBF_^1_%STA* CHRBF_^1_%SUB* EN_^1_%SAN 4_^1_%LDA* BUFF,I_'END CARD RECORD_^1_%SUB* ND_^1_%SAN 1_^1_%JMP* COMP_^1_%LDA* BUFF,I_'NO, OUTPUT ONE WORD_^1_%ENQ 0_^1_%LLS 8_^1_%STA* CHRBF+1_^1_%RAO- I_^1_%LDA* BUFF,I_'OUTPUT THE 2ND WORD_^1_%ARS 8_^1_%EOR* CHRBF+1_^1_%STA* CHRBF+1_^1_%ENA 1_^1_%STA* CHRFLG_'SWITCH CHAR. FLAG_^1_%JMP* COMP2_(CHECK FOR MACRO€€_^1EN_#NUM $454E_^1ND_#NUM $4E44_^1DBLK_!NUM $4420_^1BLANKS NUM $2020_^1ASTKS NUM $2A2A_^1CHRFLG NUM 0_^1OPFLG NUM 0_^1COUNT NUM 0_^1CHRBF BSS CHRBF(10)_^1BUFF_!BSS BUFF(50)_^1MCROCK 0_"0_^1_%LDA* CHRBF+1_^1_%ARS 4_^1_%AND- H000F_^1_%EOR- BIT2_^1_%SAN 1_,IS THIS RECORD A MACRO_^1_%JMP* (MCROCK)_^1_%ENQ 0_,YES_^1_%LDA* BUFF+1_^1_%STA TITLE,Q_^1_%INQ 1_^1_%LDA* BUF€€F+2_'PICK UP THE LOCATION OF_^1_%STA TITLE,Q_%THIS MACRO_^1_%INQ 2_^1_%LDA* OPFLG_^1_%STA- I_^1_%JMP DONE1-1_^1OPRND LDQ* CHRFLG_^1_%SQZ LFTPN-*-1_^1_%AND- H00FF_(CHECK FIRST OPERAND WORD_^1_%INA -$28_)FOR A LEFT PAREN._^1_%SAN 1_^1_%JMP* OPRND2_^1_%JMP* OPRND4_^1LFTPN LDA* BUFF,I_^1_%AND- HFF00_^1_%EOR =N$2800_^1_%SAZ LFTPN1_^1_%JMP* OPRND1_^1LFTPN1 JMP* OPRND4_^1OPRND1 €€ENQ -5_+OUTPUT COMPLETE WORDS_^1_%LDA* BUFF,I_^1_%STA* CHRBF+10,Q_^1_%RAO- I_^1_%INQ 1_^1_%SQP 1_,CHAR. BUFFER FILLED_^1_%JMP* OPRND1+1_^1_%JMP* BUFAD_(YES,_^1OPRND2 RAO- I_^1_%JMP* OPRND1_^1OPRND4 ENA 0_^1_%STA* COUNT_^1OPRND5 LDQ* BUFF,I_'OUTPUT HALF WORDS_^1_%RAO- I_^1_%LDA* BUFF,I_^1_%LRS 8_^1_%LDQ* COUNT_^1_%STA* CHRBF+5,Q_^1_%RAO* COUNT_^1_%INQ -4_+BUFFER FILLED_^1_%SQZ€€ 1_^1_%JMP* OPRND5_'NO,_^1BUFAD ENQ 0_,SELECT PROPER OPERAND_^1_%STQ* BFADD_(BUFFER_^1_%STQ* BFADD1_^1_%LDA* CHRBF+5_^1_%ALS 1_^1_%SAM 1_^1_%JMP* BUFAD2_^1_%ALS 1_^1_%SAP 1_^1_%JMP* PRNOUT_'ILLEGAL CHAR. IN OPERAND_^1_%ALS 1_,FLD. PRINT ERROR MESSAGE_^1_%SAP BUFAD1-*-1_^1_%ARS 11_^1_%AND- H000F_^1_%INA -$B_^1_%SAM 1_^1_%JMP* BUFAD4_^1_%ENQ 2_,SET INDEX FOR CHAR. P-Z_^1€€_%JMP* BUFAD3_^1BUFAD1 ENQ 1_,SET INDEX FOR CHAR. A-O_^1_%ENA -1_^1_%STA* BFADD1_'ELIMINATE / CHAR._^1_%JMP* BUFAD3_^1BUFAD2 ALS 1_^1_%SAM 1_^1_%JMP* PRNOUT_'ILLEGAL CHAR._^1_%ALS 1_^1_%SAM 1_^1_%JMP* BUFAD5_^1_%ARS 11_^1_%AND- H000F_^1_%INA -10_^1_%SAP 5_^1_%ENQ 0_,SET INDEX FOR CHAR. 0-9_^1BUFAD3 LDA CHRBF+5_^1_%ALS 4_^1_%JMP* BFCNT_^1_%INA -3_^1_%SAZ 3_^1BUFAD4 ENQ€€ 7_,SET INDEX FOR ODD CHARS._^1_%ENA 0_^1_%JMP* BFCNT_^1_%ENQ 3_^1_%JMP* *-3_^1BUFAD5 ARS 11_^1_%AND- H000F_^1_%INA -10_^1_%SAP 1_^1_%JMP* BUFAD4_^1_%SAN 3_^1_%ENQ 4_,SET INDEX FOR CHAR. *_^1_%ENA 0_^1_%JMP* BFCNT_^1_%INA -1_^1_%SAP 2_^1_%ENQ 5_,SET INDEX FOR CHAR. +_^1_%JMP* *-5_^1_%INA -2_^1_%SAN 3_^1_%ENQ 6_,SET INDEX FOR CHAR. -_^1_%ENA 0_^1_%JMP* BFCNT_^1_%JMP*€€ BUFAD4_^1PRNOUT FWRITE STDOCD,PNOUT1,ERRMGE,20,A,0,1,I,,1_-**MSOS 4.0_^1_%JMP- (DISP)_^1PNOUT1 JMP- (DISP)_^1ERRMGE ALF 20, ILLEGAL CHARACTER WAS DETECTED_^1BFADD ADC 0_^1BFADD1 ADC 0_^1BFADD5 NUM 0_^1PRGNAM NUM 0_^1BFTAB ADC OUTBF_(STARTING BUFFER ADDRESS'S_^1_%ADC OUTBF1_^1_%ADC OUTBF2_^1_%ADC OUTBF3_^1_%ADC OUTBF4_^1_%ADC OUTBF5_^1_%ADC OUTBF6_^1_%ADC OUTBF7_^1B€€FCNT LDQ* BFTAB,Q_^1_%STQ* BFADD_^1_%ARS 12_^1_%AND- H000F_^1_%ADD* BFADD1_^1_%LLS 16_^1BFADD2 SQZ BFADD3-*-1_"CYCLE THROUGH TO THE_^1_%ENA 91_^1_%STA* BFADD5_^1_%ADD* BFADD_(DESIRED BUFFER_^1_%STA* BFADD_^1_%INQ -1_^1_%JMP* BFADD2_^1BFADD3 STA SECAD_^1_%INA 90_,CHECK THE 91ST WORD OF THE_^1_%STA* BFADD1_'DESIRED BUFFER FOR NEXT_^1_%ENA 10_+AVAILABLE STORAGE LOCATION_^1_%MU€€I* (BFADD1)_I**MSOS 4.0_^1_%ADD* BFADD_^1_%STA* BFADD_^1_%ENQ 9_^1BFADD4 LDA CHRBF,Q_^1_%STA* (BFADD),Q_#+ OPERAND TO THE PROPER_^1_%INQ -1_^1_%SQM DONE_)BUFFER_^1_%JMP* BFADD4_^1DONE_!RAO* (BFADD1)_^1_%LDA* (BFADD1)_$BUFFER FULL_^1_%INA -9_^1_%SAM 2_^1_%JMP WRTSC_(YES,OUTPUT BUFFER TO MS._^1_%LDA* PRGNAM_'NO,IS THIS THE FIRST LEGAL_^1_%SAN 1_,RECORD_^1_%JMP* DONE2+2_^1_%EN€€A 10_^1_%STA- I_^1_%ENQ 0_,YES, OUTPUT THE NAM CARD_^1_%STQ* PRGNAM_^1DONE1 LDA BUFF,I_^1_%LDQ* PRGNAM_^1_%STA* TITLE,Q_^1_%INQ -25_^1_%SQZ 3_^1_%RAO- I_^1_%RAO* PRGNAM_^1_%JMP* DONE1_^1_%FWRITE STDOUT,DONE2,TITLE,25,A,0,1,I,,1_/**MSOS 4.0_^1_%JMP- (DISP)_^1DONE2 ENA 0_^1_%STA* PRGNAM_^1_%JMP BGNRD+3_^1TITLE ALF 25,_^1OUTBF BZS OUTBF(910)_^1OUTBF1 BZS OUTBF1(1365)_^1O€€UTBF2 BZS OUTBF2(1001)_^1OUTBF3 BZS OUTBF3(91)_^1OUTBF4 BZS OUTBF4(91)_^1OUTBF5 BZS OUTBF5(91)_^1OUTBF6 BZS OUTBF6(91)_^1OUTBF7 BZS OUTBF7(91)_^1SAT_"BZS SAT(41)_J**MSOS 4.0_^1SECAD ADC 0_^1_%NUM 0_^1SECAD1 ADC 0_^1SECAD2 NUM 0_^1LSTRD NUM 0_^1WRTSC2 NUM 1_P**MSOS 4.0_^1WRTSC LDA BFADD_^1_%INA -80_^1_%SUB BFTAB_^1_%ENQ 0_^1_%DVI BFADD5_^1_%TRA Q_,STORE CONTENT€€S OF SAT FOR_^1_%LDA* SAT,Q_(THIS CHAR. IN WRD.90 OF BF_^1_%STA (BFADD1)_^1_%LDA* WRTSC2_'UPDATE THE SAT TABLE_^1_%STA* SAT,Q_^1WRTSC1 LDA* SECAD_K**MSOS 4.0_^1_%STA* WRIT1+6_I**MSOS 4.0_^1_%LDA* SECAD+1_J**MSOS 4.0_^1_%STA* WRIT1+7_I**MSOS 4.0_^1_%LDA* WRTSC2_K**MSOS 4.0_^1_%STA* WRIT1+8_I**MSOS 4.0_^1WRIT1 FWRITE STDSCR,WRTSC3,,91,A,0,0,I,,1_2**MSOS 4.0_^1_%ADC 0_P**MSOS €€4.0_^1_%ADC 0_P**MSOS 4.0_^1_%JMP- (DISP)_^1WRTSC3 RAO* WRTSC2_'UPDATE SECTOR ADDRESS_^1_%LDA* LSTRD_(HAS ENDCARD BEEN READ_^1_%SAN 5_^1_%ENA 0_,CLEAR WORD 90 OF THE WRITTEN BUFFER_^1_%STA (BFADD1)_^1_%JMP BGNRD+3_^1WRTSC4 RAO* SECAD2_'UPDATE THE SECTOR COUNT_^1_%LDA* SECAD2_^1_%INA -41_^1_%SAM 1_^1_%JMP* BGSRT_^1_%ENA 91_^1_%ADD* SECAD_^1_%STA* SECAD_^1WRTSC5 ENA 90_^1_%A€€DD* SECAD_^1_%STA* SECAD1_^1_%LDA* (SECAD1)_$DOES THIS BUFFER CONTAIN_^1_%SAN 1_,CURRENT DATA_^1_%JMP* WRTSC4_'NO,_^1_%MUI- A_^1_%TRA Q_^1_%LDA- H7FFF_(MARK END OF CURRENT DATA_^1_%STA* (SECAD),Q_#IN THIS BUFFER_^1_%LDQ* SECAD2_^1_%LDA* SAT,Q_(UPDATE THE SECTOR TABLE_^1_%STA* (SECAD1)_^1_%LDA* WRTSC2_^1_%STA* SAT,Q_(ENTRY FOR THIS CHAR._^1_%JMP* WRTSC1_^1BGSRT ENQ 0_^1_%STQ_!ST€€CNT_K**MSOS 4.0_^1BGSRT1 LDA_!STPRG_K**MSOS 4.0_^1_%STA* STADD_^1_%LDA =XSRTLG_J**MSOS 4.0_^1_%STA* STADD2_K**MSOS 4.0_^1_%LDQ* STCNT_(BEGIN RELOAD OF EACH OPER-_^1_%LDA* SAT,Q_(AND TYPE FOR SORTING_^1_%SAZ 2_^1_%STA* STADD1_^1_%JMP* DSKRD_^1BGSRTA RAO* STCNT_L**MSOS 4.0_^1_%LDA* STCNT_^1_%INA -41_*HAVE ALL CHAR.TYPES BEEN_^1_%SAM BGSRT2_^1_%ENA 1_^1_%STA* LSTRD_^1_%LDA* LIST€€_^1_%JMP SORT4D+3_^1BGSRT2 JMP* BGSRT1_'NO_^1DSKRD LDA* STADD_K**MSOS 4.0_^1_%STA* DSKRED+6_H**MSOS 4.0_^1_%LDA* STADD+1_I**MSOS 4.0_^1_%STA* DSKRED+7_H**MSOS 4.0_^1_%LDA* STADD1_J**MSOS 4.0_^1_%STA* DSKRED+8_H**MSOS 4.0_^1DSKRED_!FREAD STDSCR,DSKRD1,,91,A,0,0,I,,1_1**MSOS 4.0_^1_%ADC 0_P**MSOS 4.0_^1_%ADC 0_P**MSOS 4.0_^1_%JMP- (DISP)_^1DSKRD1 LDA LSTRD_(LAST SECTOR WR€€ITTEN FOR_,**MSOS 4.0_^1_%SAN 1_,THIS CHAR._^1_%JMP* DSKRD2_'NO_^1_%ENQ 0_^1DSKRD3 LDA OUTBF,Q_%CHECK FOR LAST USEFUL_.**MSOS 4.0_^1_%EOR- H7FFF_(RECORD TO BE SORTED_^1_%SAZ DSKRD4_^1_%INQ 1_^1_%TRQ A_^1_%INA -81_^1_%SAN 2_,DID LAST SECTOR CONTAIN_^1_%INQ 9_,EXACTLY 90 WORDS_^1_%JMP* DSKRD4_'YES_^1_%JMP* DSKRD3_^1DSKRD4 ADQ* STPRG_^1_%STQ* STADD_^1_%ENA 0_^1_%STA LSTRD_(€€CLEAR LAST SECTOR FLAG_^1_%LDA OUTBF+90_$GET NEXT SECTOR NUMBER_-**MSOS 4.0_^1_%SAN 1_,NEXT SECTOR = ZERO_^1_%JMP* SORT_^1_%STA* STADD1_'NO_^1_%JMP* DSKRD_^1DSKRD2 ENA 90_^1_%ADD* STADD_^1_%STA* STADD_^1_%LDA* (STADD)_%LAST SECTOR WRITTEN FOR_^1_%SAN 1_,THIS CHAR_^1_%JMP* SORT_^1_%STA* STADD1_^1_%LDA* STADD_^1_%SUB* STPRG_(ONE PASS SORT CAPACITY_^1_%SUB* STADD2_'REACHED_^1_%SAM€€ DSKRD5_^1_%LDA* (STADD)_%YES,SETUP FOR MULTI-PASS_^1_%LDQ* STCNT_(SORT_^1_%STA SAT,Q_^1_%INQ -1_^1_%STQ* STCNT_^1_%JMP* SORT_^1DSKRD5 JMP* DSKRD_(NO,GET NEXT SECTOR_^1SORT_!ENQ 0_^1_%STQ- I_^1_%ENA 90_^1_%STA* BFFL1_^1_%LDA* STADD_(DETERMINE NUMBER OF WORDS_^1_%INA 5_^1_%SUB* STPRG_^1_%STA* SRTAD_^1_%DVI- A_,TO BE SORTED_^1_%STA* SRTAD1_^1_%ENQ 0_^1_%INQ 5_^1SORT1 LDA OU€€TBF,Q_%PICK UP FIRST SORT ENTRY_+**MSOS 4.0_^1_%SAP SORT2_(PREVIOUS WINNER GET NEXT_^1_%INQ 10_+RECORD_^1_%TRQ A_^1_%SUB* SRTAD_^1_%SAN 1_^1_%JMP* SORT4_^1_%JMP* SORT1_^1SORT2 STQ* SAVE_)SAVE ADDRESS OF THE WINNER_^1_%STA* SAVE1_(SAVE THE WINNER_^1SORT3 INQ 10_^1_%TRQ A_^1_%STA* SAVE3_(SAVE ADDRESS OF OPONENT_^1_%SUB* SRTAD_^1_%SAN 1_^1_%JMP* SORT4_^1_%LDA OUTBF,Q_J**MSOS€€ 4.0_^1_%SAP 1_,OPONENT A PREVIOUS WINNER_^1_%JMP* SORT3_(YES GET NEXT OPONENT_^1_%SUB* SAVE1_(COMPARE THE TWO VALUES_^1_%SAP 3_^1_%LDA OUTBF,Q_J**MSOS 4.0_^1_%JMP* SORT2_^1_%SAN 1_^1_%JMP* CMPR_)= VALUES CONT. THE COMPARE_^1_%JMP* SORT3_(WINNER CONTINUES_^1_%EQU SRTLG(OUTBF7-OUTBF+91)_<**MSOS 4._^1STADD1 NUM 1_P**MSOS 4.0_^1STPRG ADC OUTBF_L**MSOS 4.0_^1STADD ADC 0_^1_%N€€UM 0_^1STADD2 NUM 0_P**MSOS 4.0_^1STCNT NUM 0_^1BFFL_!NUM 0_^1BFFL1 NUM 0_^1BFFL2 NUM 0_^1SRTAD NUM 0_^1SRTAD1 NUM 0_^1SAVE_!NUM 0_^1SAVE1 NUM 0_^1SAVE3 NUM 0_^1SAVEA NUM 0_^1SAVE3A NUM 0_^1SAVE3B NUM 0_^1LIST_!ADC OUTBF7_^1ENDBF7 ADC OUTBF7_^1CMPR_!LDA* SAVE_)COMPARE THE LAST FOUR_^1_%STA* SAVEA_(WORDS OF THE OPERAND TO_^1_%LDA* SAVE3_(DETERMINE A WINNER_^1_€€%STA* SAVE3A_^1_%INA 4_^1_%STA* SAVE3B_^1CMPR1 LDQ* SAVEA_^1_%INQ 1_^1_%STQ* SAVEA_^1_%LDA OUTBF,Q_J**MSOS 4.0_^1_%LDQ* SAVE3A_^1_%INQ 1_^1_%STQ* SAVE3A_^1_%SUB OUTBF,Q_J**MSOS 4.0_^1_%SAP 2_^1_%LDQ* SAVE3_(WINNER CONTINUES_^1_%JMP* SORT3_^1_%SAZ 4_^1_%LDQ* SAVE3_^1_%LDA OUTBF,Q_%OPONENT CONTINUES_2**MSOS 4.0_^1_%JMP* SORT2_^1_%TRQ A_^1_%SUB* SAVE3B_'HAVE ALL THE OPERAND €€WORDS_^1_%SAZ 1_,BEEN COMPARED_^1_%JMP* CMPR1_^1_%LDQ* SAVE3_(BOTH VALUES ARE EQUAL SAVE_^1_%JMP* SORT3_(THE WINNER + CONT. SEARCH_^1SORT4 ENA 10_^1_%ADD- I_^1_%STA* BFFL2_^1_%SUB* BFFL1_(OUTPUT BUFFER FULL_^1_%SAN 2_^1_%ENA 1_,YES_^1_%STA* BFFL_^1_%LDQ* SAVE_^1_%INQ -5_^1SORT4A LDA OUTBF,Q_J**MSOS 4.0_^1_%STA OUTBF7,I_^1_%RAO- I_^1_%LDA- I_^1_%SUB* BFFL2_^1_%SAN 1_^1_%JMP€€* SORT4B_^1_%INQ 1_^1_%JMP* SORT4A_^1SORT4B LDQ* SAVE_^1_%LDA- HFFFF_(SET WINNER NEGATIVE_^1_%STA OUTBF,Q_J**MSOS 4.0_^1_%LDA* BFFL_^1_%SAN SORT4C_^1_%INA -1_^1_%ADD* SRTAD1_'HAVE ALL OPERANDS OF THIS_^1_%STA* SRTAD1_'CHAR. TYPE BEEN SORTED_^1_%SAN 1_^1_%JMP* SORT4C_^1_%JMP* SORT1-2_^1SORT4C LDA* LIST_L**MSOS 4.0_^1_%STA* SRT4C+6_I**MSOS 4.0_^1SRT4C FWRITE STDOUT,SORT4D,,10€€,A,0,0,I,,1_3**MSOS 4.0_^1_%JMP- (DISP)_^1SORT4D LDA- A_^1_%ADD* LIST_)OUTPUT SORTED OPERANDS TO_^1_%STA* LIST_)THE PRINTER_^1_%SUB* ENDBF7_^1_%SUB* BFFL2_^1_%SAZ 1_^1_%JMP* SORT4F_^1_%LDA* ENDBF7_^1_%STA* LIST_^1_%LDA LSTRD_(HAVE ALL OPERAND TYPES_^1_%SAZ 1_,BEEN SORTED AND OUTPUT_^1_%JMP* ENDSRT_^1_%ENA 0_,NO_^1_%STA- I_^1_%STA* BFFL_^1_%STA* BFFL2_^1_%LDA* SRTAD1_^1_%SAZ SO€€RT4E_'SORT OF 90 WORDS OR LESS_^1_%ENA -1_^1_%ADD* SRTAD1_'ALL OPERANDS OF THIS CHAR._^1_%SAZ SORT4E_'TYPE SORTED_945*780_^1_%STA* SRTAD1_^1_%JMP SORT1-2_^1SORT4E ENA 1_^1_%STA LSTRD_^1_%JMP_!BGSRTA_J**MSOS 4.0_^1SORT4F JMP* SORT4C_^1ENDSRT SWN 1 SWITCH SET EXIT IF NOT CONTINUE_^1_%JMP- (DISP) END OF SORT_^1*ZERO OUT BUFFERS AND SAT TABLE_>**MSOS 4.0_^1_%LDQ =N3776_K**MSOS €€4.0_^1_%ENA 0_P**MSOS 4.0_^1ZBUFF STA_!OUTBF,Q_I**MSOS 4.0_^1_%SQZ 2_^1_%INQ -1_O**MSOS 4.0_^1_%JMP* ZBUFF_L**MSOS 4.0_^1_%ENQ 14_O**MSOS 4.0_^1ZBUFF1 STA_!STADD,Q_I**MSOS 4.0_^1_%SQZ 2_^1_%INQ -1_O**MSOS 4.0_^1_%JMP* ZBUFF1_K**MSOS 4.0_^1_%STA CHRFLG_K**MSOS 4.0_^1_%STA COUNT_L**MSOS 4.0_^1_%STA BFADD_L**MSOS 4.0_^1_%STA BFADD1_K**MSOS 4.0_^1_%STA BFADD5_K**MSOS 4.0_^1€†_%ENA 1_^1_%STA STADD1_K**MSOS 4.0_^1_%STA WRTSC2_K**MSOS 4.0_^1_%JMP_!BGNRD_K**MSOS 4.0_^1_%EQU OPSORT(BGNRD)_^1_%END BGNRD_^__†PDTLP CSY/ J10 P€1_%NAM DTLP_)DECK-ID J10 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_$THIS PROGRAM LOADS THE UTILITY PROGRAM_^1*_]_^1*_$DSKTAP INTO CORE AND EXECUTES IT_^1_%ENT DTLP_^1DTLP_!JMP* START_M67*1465_^1GETFIL GTFILE G1,NAME-GETFIL€€-1,FWA,,,,0,1,1_367*1465_^1_%NUM 0,0_O67*1465_^1_%JMP- ($EA)_M67*1465_^1G1_#RTJ- ($F4)_M67*1465_^1_%NUM $4C00_(FWRITE_>67*1465_^1_%ADC COMP,0_L67*1465_^1_%NUM $18FC_M67*1465_^1LENM1 ADC MSEND1-MESS1_F67*1465_^1_%ADC MESS1_M67*1465_^1_%JMP- ($EA)_M67*1465_^1MESS1 ALF *,TURN OFF PROTEC SWITCH,TYPE CARRIAGE RETURN*_#67*1465_^1MSEND1 EQU MSEND1(*)_I67*1465_^1COMP_!RTJ- ($F4)_€€M67*1465_^1_%NUM $4800_(FREAD_?67*1465_^1_%ADC COMP1,0_K67*1465_^1_%NUM $18FD,1_K67*1465_^1_%ADC MESS1_M67*1465_^1_%JMP- ($EA)_M67*1465_^1COMP1 IIN 0_,INHIBIT INTERRUPTS_267*1465_^1FWA_"EQU FWA(*)_L67*1465_^1NAME_!ALF 3,DSKTAP_J67*1465_^1START LDA* LDADR_(STARTING ADDRESS OF DSKTAP_*67*1465_^1_%CLR Q_Q67*1465_^1_%STQ- I_,CONVERT STARTING ADDRESS_,67*1465_^1M1_#LLS 4_,TO €€ASCII_<67*1465_^1_%INQ -10_O67*1465_^1_%SQM M2_P67*1465_^1_%INQ 7_Q67*1465_^1M2_#INQ $3A_O67*1465_^1_%STQ* M4,I_N67*1465_^1_%RAO- I_Q67*1465_^1_%LDQ- I_Q67*1465_^1_%INQ -4_P67*1465_^1_%SQZ M3_P67*1465_^1_%CLR Q_Q67*1465_^1_%JMP* M1_P67*1465_^1M3_#LDA* M4_P67*1465_^1_%ALS 8_Q67*1465_^1_%ADD* M4+1_N67*1465_^1_%STA* ADR_O67*1465_^1_%LDA* M4+2_N67*1465_^1_%ALS 8_Q67*1465_^1_%A€€DD* M4+3_N67*1465_^1_%STA* ADR+1_M67*1465_^1_%RTJ- ($F4)_M67*1465_^1_%NUM $4C00_M67*1465_^1_%ADC GETFIL_L67*1465_^1_%NUM 0,$18FC_K67*1465_^1LENM_!ADC MSEND-MESS_H67*1465_^1_%ADC MESS_N67*1465_^1_%JMP- ($EA)_M67*1465_^1M4_#BZS M4(4)_M67*1465_^1MESS_!ALF *,DTLP FIRST WORD ADDRESS WILL BE *_/67*1465_^1ADR_"ALF 2,_P67*1465_^1_%NUM $0A0A_M67*1465_^1MSEND EQU MSEND(*)_J67*1465€,_^1LDADR ADC FWA_O67*1465_^1_%END DTLP_^__,PDSKTAP CSY/ J11 P€1_%NAM DSKTAP_'DECK-ID J11 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_(ENT_%DSKTAP_^1_%ENT FST_L**MSOS 4.1**_^1_(EXT*_$ENCDHX,DCODHX_^1_(EXT*_$EQCODE_^1_(EXT*_$CDRIVE_^1_(EXT*_$MDRIVE_^1_(EXT*_$MGDRIV_^1_(EXT*_$MGREAD_^1_%SPC 3_€€^1*_*THIS PROGRAM REQUIRES THAT ONLY_0**MSOS 4.1**_^1*_*ONE OF THE MASS MEMORY DRIVERS $_/**MSOS 4.1**_^1*_+MDRIV4_%1739_=**MSOS 4.1**_^1*_+MDRV56_%856_>**MSOS 4.1**_^1*_+MDR52_'1752_=**MSOS 4.1**_^1*_+DSKMMD_$1733-1/1738_7**MSOS 4.1**_^1*_*BE LINKED_F**MSOS 4.1**_^1_%SPC 3_^1RECLEG EQU RECLEG(3072) MAXIMUM NUMBER OF WORDS PER RECORD_!67*1466_^1SECTRK EQU SECTRK(32)_"MAXIMUM NU€€MBER OF SECTORS PER RECORD 67*1466_^1BUF1_!EQU BUF1($100)_"STARTING ADDRESS OF BUFFER 1_(67*1466_^1B2_#EQU B2(BUF1+RECLEG+5) STARTING ADDR OF VERIFY BUFFER_!67*1466_^1_(EQU_%DSKTAP(*)_^1START_"RTJ*_$*+1_^1_(NUM_%0_^1_(LDA*_$*-1_^1_(INA_%-1_,SET UP ABSOLUTE_^1_(RTJ_%SETUP_*ADDRESSES_^1_(RTJ_%EQCODE_"GET EQUIPMENT CODES FOR MAG TAPE **MSOS 4.0_^1_%LDA- $C1_*GET LSB SCRATCH_2**MSOS €€4.1**_^1_%INA 4_,CONVERT SYSTEM SEC TO ABSOLUTE_"**MSOS 4.1**_^1_%RTJ ENCDHX_'ENCODE IN ASCII_2**MSOS 4.1**_^1_%STQ SCRATH_I**MSOS 4.1**_^1_%STA SCRATH+1_G**MSOS 4.1**_^1_%ENQ LMSG0_J**MSOS 4.1**_^1_%LDA AMSG0_J**MSOS 4.1**_^1_%RTJ CDRIVE_'WRITE NO. SECTORS TO SCRATCH_$**MSOS 4.1**_^1*_;AND DISK_8**MSOS 4.0_^1RESTRT_!LDA_%AMSG1_^1_(ENQ_%LMSG1_^1_(RTJ_%CDRIVE_^1_(RTJ_%BKGND_^€€1_%LDA =XBUF1_'INPUT BUFFER ADDRESS_067*1466_^1_(ENQ_%0_^1_(RTJ_%CDRIVE_^1_(ENQ_%0_^1SRCH1_"LDA*_$TABL1,Q_^1_(SAP_%SRCH10-*-1_^1_(JMP_%ENDING_(NOT IN TABLE_^1SRCH10_!EOR_%BUF1_^1_(SAN_%SRCH12-*-1_^1_(LDA*_$TABL1+1,Q_^1_(EOR_%BUF1+1_^1_(SAZ_'2_,SKIP IF FOUND_^1SRCH12_!INQ_%4_^1_(JMP*_$SRCH1_^1_(JMP*_$TABL1+2,Q_^1_(SPC_%2_^1TABL1_"ALF_%2,SAVE_^1_(JMP_%SAVSYS_^1_(ALF_%2,LOAD_^1_(JMP_€€%LODISK_^1_(NUM_%-0_,END OF TABLE_^1********************************************************************_^1*_'SAVE OPTION_^1********************************************************************_^1LAST_#NUM_%0_^1SAVSYS_!ENA_%0_-DISK TO TAPE_^1_(STA*_$LAST_^1_(LDA_%AMSG2_)SAVE INFO_^1_%ENQ LMSG2_(OUTPUT TAPE ON UNIT 0_^1*_;NUMBER OF SECTORS TO SAVE_^1_(RTJ_%CDRIVE_^1_(RTJ_%BKGND_^1_%€€LDA =XBUF1_'INPUT BUFFER ADDRESS_067*1466_^1_(ENQ_%0_^1_(RTJ_%CDRIVE_"NUMBER OF SECTORS TO SAVE_'**MSOS 4.0_^1_(LDQ_%BUF1_^1_(LDA_%BUF1+1_^1_(RTJ_%DCODHX_"CONVERT NUMBER OF SECTORS FROM_!**MSOS 4.0_^1*_;ASCII TO HEXADECIMAL_,**MSOS 4.0_^1_(JMP*_$SAVSYS_^1_(SAM_%1_^1_(SAN_%1_^1_(JMP*_$SAVSYS_^1_(STA*_$LAST_$SET LAST EQUAL TO LAST SECTOR_^1*_;TO SAVE_^1_(EJT_^1_(RTJ_%DSKCHK_"READ IN€€ BAD SECTOR DIRECTORY_#**MSOS 4.0_^1_%ENA SECTRK_'SECTORS PER RECORD_267*1466_^1_%STA* TRKSEC_'SET NO OF SECTORS TO READ_^1READ1 RTJ* DSKRD_(READ DISK_^1_%RTJ* WRTMGT_'WRITE MAG TAPE_^1_(RTJ*_$INCSEC_"DONE YET_8**MSOS 4.0_^1_(JMP*_$READ1_E**MSOS 4.0_^1INCSEC_!NOP_%0_I**MSOS 4.0_^1_(LDA-_$I_I**MSOS 4.0_^1_%ADD* TRKSEC_^1_(STA-_$I_I**MSOS 4.0_^1_(SUB*_$LAST_$CHECK TO SEE IF DONE_,*€€*MSOS 4.0_^1_%SAM 1_^1_%JMP* DSKOFF_^1_(JMP*_$(INCSEC)_B**MSOS 4.0_^1_(EJT_^1DSKCHK_!NUM_%0_^1_(ENA_%0_(INITIALIZE SECTOR HOLDER_^1_(STA-_$I_(SAVE IN I_7**MSOS 4.0_^1_(STA_%FST_^1_%LDA =XBUF1_L67*1466_^1_(STA*_$ABUFF_^1CD110_"JMP*_$(DSKCHK) EXIT FROM DSKCHK_^1FST_"NUM 0_,FIRST TIME FLAG_2**MSOS 4.1**_^1_(EJT_^1WRTMGT_!NOP_%0_(WRITE MAG TAPE ROUTINE_^1CD130 LDA =XBUF1_'SET UP €€A AND Q TO WRITE_-67*1466_^1*_;MAG TAPE_8**MSOS 4.0_^1RECORD_!LDQ_%=XRECLEG LENGTH OF BUFFER_0**MSOS 4.0_^1_(RTJ_%MGDRIV_"WRITE MAG TAPE_^1_(SAN_%CD155_#ANY ERRORS_^1_(JMP_%MTERR1_"YES_=**MSOS 4.0_^1CD155_"JMP*_$(WRTMGT)_^1_(SPC_%5_^1DSKRD_"NOP_%0_(READ FROM DISK_^1_(LDA*_$ABUFF_#GET ADDRESS TO READ INTO_^1_%LDQ =XRECLEG_$READ REC LENGTH_2**MSOS 4.1**_^1_(RTJ_%MDRIVE_"READ FROM D€€ISK_^1ERRCK_"SAN_%DSKEXT_"ANY ERRORS_6**_^1_(JMP_%DSKERR_"YES_=**MSOS 4.0_^1DSKEXT_!JMP*_$(DSKRD)_!EXIT FROM DSKRD_^1_(SPC_%5_^1SECOND_!NUM_%0_^1ABUFF_"NUM_%0_(CURRENT BUFFER ADDRESS_^1SAVEI_"NUM_%0_^1TRKSEC_!NUM_%0_(SECTOR COUNTER_^1ISAV_#NUM_%0_(TEMPORARY STORAGE FOR I_)**MSOS 4.0_^1_(EJT_^1************************************************************_^1*_$WRITE END OF FILE MARK._€€^1************************************************************_^1DSKOFF_!ENA_%0_^1_(RTJ_%MGDRIV_^1ENDING_!LDA_%AMSG3_#END MESSAGE V FOR VERIFY_^1*_;A FOR AUTOLOAD_^1_(ENQ_%LMSG3_^1_(RTJ_%CDRIVE_^1_(RTJ_%BKGND_^1_(ENQ_%0_^1_%LDA =XBUF1_L67*1466_^1_(RTJ_%CDRIVE_^1_(LDA_%BUF1_^1_(ARS_%8_^1_(INA_%-$41_^1_(SAN_%1_-SKIP IF NOT A_^1_(JMP*_$AUTLOD_^1_(INA_%$41-$56_^1_(SAN_%1_-SKIP IF NOT €€V_^1_(JMP*_$VERIFY_(JUMP TO VERIFY_^1_(JMP_%RESTRT_^1*******************************************************************_^1AUTLOD_!ENQ_%0_-AUTOLOAD SIMULATE_^1_(STQ-_$I_^1_%STQ* ABUFF_J**MSOS 4.1**_^1_%RTJ* DSKRD_J**MSOS 4.1**_^1DOLOAD_!JMP+_$0_^1*_;JMP TO LOCATION ZERO TO_^1*_;SIMULATE AUTOLOAD_^1_(EJT_^1*******************************************************************_^1*_'VERI€€FY-COMPARE TAPE TO DISK_^1*******************************************************************_^1VERIFY_!LDA_%AMSG4_^1_(ENQ_%LMSG4_^1_(RTJ_%CDRIVE_"VERIFY TAPE ON UNIT 0_^1_(ENA_%-0_^1_(STA_%BUF1_^1_%LDA =XBUF1_'BUFFER ADDRESS_667*1466_^1_(ENQ_%0_^1_(RTJ_%CDRIVE_"READ CARRIAGE RETURN_^1_(LDA_%BUF1_^1_(SAM_%1_^1_(JMP*_$VERIFY_^1_(EJT_^1_%RTJ* DSKCHK_^1_%ENA SECTRK_'NUMBER OF SECTOR€€S_367*1466_^1_%STA* TRKSEC_^1VFYLOP EQU VFYLOP(*)_^1_(RTJ*_$MAGTRD_^1_%RTJ* DSKRD_^1VFY200_!LDQ_%=XRECLEG-1_@**MSOS 4.0_^1VFY210_!LDA_%BUF1,Q_^1_(EOR_%B2,Q_^1_(SAZ_%VFY230_^1_%JMP* VFYERR_^1VFY230_!INQ_%-1_^1_(SQM_%1_^1_(JMP*_$VFY210_^1BMPSEC EQU BMPSEC(*)_F**MSOS 4.1**_^1_(LDA-_$I_^1_%ADD* TRKSEC_^1_(STA-_$I_^1_%JMP* VFYLOP_^1_(EJT_^1MAGTRD_!NOP_%0_^1_%LDA =XB2_)BUFFER ADDRESS €€(VERIFY)_-67*1466_^1_(ENQ_%0_^1_(RTJ_%MGREAD_^1_(SAN_%VFY140_^1_(SQN_%VFY120_^1_%JMP* VFYEND_^1VFY120_!JMP_%MTERR1_^1VFY140_!JMP*_$(MAGTRD)_^1_(EJT_^1VFYERR LRS 16_+Q TO A - CLEAR Q_1MSOS 4.1**_^1_%DVI =N96_)COMPUTE SECTORS_2**MSOS 4.1**_^1_%STQ* VFYWRD_I**MSOS 4.1**_^1_%ADD- I_,ADD CURRENT BASE SECTOR_***MSOS 4.1**_^1_(RTJ_%ENCDHX_^1_%STQ MSEC_)STORE ASCII OF SECTOR_,**MSOS 4.1€€**_^1_%STA MSEC+1_I**MSOS 4.1**_^1VER120_!LDA_%=N0_^1VFYWRD EQU VFYWRD(*-1)_D**MSOS 4.1**_^1_(RTJ_%ENCDHX_^1_%STQ WADR_)STORE ASCII WORD ADDRESS_)**MSOS 4.1**_^1_%STA WADR+1_I**MSOS 4.1**_^1_(LDA_%AMSG5_^1_(ENQ_%LMSG5_^1_(RTJ_%CDRIVE_^1_(ENA_%-0_^1_(STA_%BUF1_^1_%LDA =XBUF1_'BUFFER ADDRESS_667*1466_^1_(ENQ_%0_^1_(RTJ_%CDRIVE_^1_(LDA_%BUF1_^1_%SAM 1_,DO NOT CONTINUE_2**MSOS 4.€€1**_^1_%JMP* BMPSEC_'CONTINUE WITH VERIFY_-**MSOS 4.1**_^1VFYEND_!LDA-_$I_-ALL RECORDS CHECK_^1_(RTJ_%ENCDHX_^1_(STQ_%MSG6_^1_(STA_%MSG6+1_^1_%LDA* AMSG6_^1_(ENQ_%LMSG6_^1_(RTJ_%CDRIVE_^1_%ENA 0_,REWIND TAPE_^1_(RTJ_%MGREAD_^1_(JMP_%ENDING_^1************************************************************_^1*_'LOAD THE DISK_^1**********************************************************€€**_^1_(SPC_%2_^1LODISK LDA* AMSG7_(COPY TAPE TO DISK_^1_(ENQ_%LMSG7_^1_(RTJ_%CDRIVE_"INPUT TAPE ON UNIT 0_^1_%RTJ* BKGND_^1_%LDA =XBUF1_L67*1466_^1_(ENQ_%0_^1_(RTJ_%CDRIVE_^1_(EJT_^1_(RTJ_%DSKCHK_^1_%ENA SECTRK_L67*1466_^1_(STA_%TRKSEC_D**MSOS 4.0_^1WRITE1_!RTJ*_$RDTAPE_"READ MAG TAPE_3**MSOS 4.0_^1_(RTJ*_$DISKWR_"WRITE DISK_6**MSOS 4.0_^1_(LDA-_$I_I**MSOS 4.0_^1_(ADD_%TRKSEC_"IN€€CREASE SECTOR COUNT_+**MSOS 4.0_^1_(STA-_$I_I**MSOS 4.0_^1_(JMP*_$WRITE1_D**MSOS 4.0_^1RDTAPE_!NOP_%0_I**MSOS 4.0_^1_%LDA =XBUF1_L67*1466_^1_(ENQ_%0_I**MSOS 4.0_^1_(RTJ_%MGREAD_D**MSOS 4.0_^1_(SAN_%LOD140_D**MSOS 4.0_^1_(SQN_%LOD120_D**MSOS 4.0_^1_%JMP* LODEND_^1LOD120 JMP* MTERR1_^1LOD140_!JMP*_$(RDTAPE)_B**MSOS 4.0_^1DISKWR_!NOP_%0_I**MSOS 4.0_^1_(LDA_%ABUFF_E**MSOS 4.0_^1_%LDQ €€ =X(-RECLEG)_!WRITE - REC LENGTH_/**MSOS 4.1**_^1_(RTJ_%MDRIVE_D**MSOS 4.0_^1ERRCHK_!SAN_%LOD10_E**MSOS 4.0_^1_%JMP* DSKERR_^1LOD10_"JMP*_$(DISKWR)_B**MSOS 4.0_^1_(SPC_%5_^1LODEND_!LDA-_$I_^1_(RTJ_%ENCDHX_^1_(STQ_%MSG8_^1_(STA_%MSG8+1_^1_(LDA*_$AMSG8_^1_(ENQ_%LMSG8_)PRINT SECTOR COUNT_^1_(RTJ_%CDRIVE_^1_(ENA_%0_^1*_;REWIND MAG TAPE_^1_(RTJ_%MGREAD_^1_(JMP_%ENDING_^1_(SPC_%2_^1DSKER€€R_!LDA*_$AMSG90_^1_(ENQ_%LMSG90_^1_(RTJ_%CDRIVE_^1_(JMP_%RESTRT_^1_(SPC_%2_^1MTERR1_!LDA*_$AMSG91_^1_(ENQ_%LMSG91_^1_(RTJ_%CDRIVE_^1_(JMP_%RESTRT_^1BKGND_"ADC_%-0_,BACKGROUND BUF1 TO_^1BGBUF LDQ =XRECLEG-1_H67*1466_^1_(ENA_%-0_^1BKG100_!STA_%BUF1,Q_^1_(INQ_%-1_^1_(SQM_%1_^1_(JMP*_$BKG100_^1_(JMP*_$(BKGND)_^1ADLST1_!EQU_%ADLST1(*)_^1AMSG0 BSS AMSG0_J**MSOS 4.1**_^1_(BSS_%AMSG1,A€€MSG2,AMSG3,AMSG4,AMSG5_^1_(BSS_%AMSG6,AMSG7,AMSG8_^1_%BSS AMSG90,AMSG91_^1ADLST2 EQU ADLST2(*)_^1_%ADC MSG0-START_E**MSOS 4.1**_^1_(ADC_%MSG1-START_^1_(ADC_%MSG2-START_^1_(ADC_%MSG3-START_^1_(ADC_%MSG4-START_^1_(ADC_%MSG5-START_^1_(ADC_%MSG6-START_^1_(ADC_%MSG7-START_^1_(ADC_%MSG8-START_^1_(ADC_%MSG90-START_^1_(ADC_%MSG91-START_^1_(NUM_!-0_(* END OF TABLE_5**MSOS 4.0_^1BASE_#NUM€€_%0_^1SETUP_"ADC_%-0_^1_(STA*_$BASE_^1_(ENQ_%0_^1SET100_!LDA*_$ADLST2,Q_^1_(SAP_%1_^1_(JMP*_$(SETUP)_^1_(ADD*_$BASE_^1_(STA*_$ADLST1,Q_^1_(INQ_%1_^1_(JMP*_$SET100_^1MSG0_!ALF *,SCRATCH SECTOR IN $C1 IS --*_1**MSOS 4.1**_^1SCRATH BZS SCRATH(2)_F**MSOS 4.1**_^1_%EQU LMSG0(*-MSG0)_B**MSOS 4.1**_^1MSG1_#ALF_%14,TYPE LOAD FOR TAPE-TO-DISK,_^1_(ALF_%11,SAVE FOR DISK-TO-TAPE_^1_%NUM $€€0D0A_(CARRIAGE RETURN LINE FEED_(**MSOS 4.1**_^1_%ALF *,OR A CARRIAGE RETURN*_8**MSOS 4.1**_^1_%NUM $0707_(DOUBLE BELL_6**MSOS 4.1**_^1_(EQU_%LMSG1(*-MSG1)_^1MSG2_!ALF 12,OUTPUT TAPE ON UNIT 0._^1_(ALF_%8,HOW MANY SECTORS_^1_(NUM_%$3F20_^1_%NUM $0707_(DOUBLE BELL_6**MSOS 4.1**_^1_(EQU_%LMSG2(*-MSG2)_^1MSG3_#ALF_%12,TYPE V FOR VERIFY, A FOR_^1_(ALF_%5, AUTOLOAD._^1_%NUM $0D0A_(€€CARRIAGE RETURN LINE FEED_(**MSOS 4.1**_^1_%ALF *, OR A CARRIAGE RETURN*_7**MSOS 4.1**_^1_%ALF $, TO RESTART$_@**MSOS 4.1**_^1_%NUM $0707_(DOUBLE BELL_6**MSOS 4.1**_^1_(EQU_%LMSG3(*-MSG3)_^1MSG4_#ALF_%12,VERIFY TAPE ON UNIT 0._^1_(ALF_%2,READY_^1_(NUM_%$593F_^1_%NUM $0707_(DOUBLE BELL_6**MSOS 4.1**_^1_(EQU_%LMSG4(*-MSG4)_^1MSG5_!ALF $, SECTOR $_D**MSOS 4.1**_^1MSEC_!BZS MSEC€€(2)_H**MSOS 4.1**_^1_%ALF $, WORD -- $_C**MSOS 4.1**_^1WADR_!BZS WADR(2)_H**MSOS 4.1**_^1_%ALF $, -- DOES NOT COMPARE.$_7**MSOS 4.1**_^1_%NUM $0D0A_(CARRIAGE RETURN LINE FEED_(**MSOS 4.1**_^1_(ALF_'$, TYPE C TO CONTINUE.$_^1_%ALF $,OR A CARRIAGE RETURN TO ABORT. $_-**MSOS 4.1**_^1_%NUM $0707_(DOUBLE BELL_6**MSOS 4.1**_^1_(EQU_%LMSG5(*-MSG5)_^1MSG6_#ALF_%$,XXXX SECTORS VERIFI€pED, $_^1_(EQU_%LMSG6(*-MSG6)_^1MSG7_#ALF_%$,INPUT TAPE ON UNIT 0. $_^1_(ALF_%2,READY_^1_(NUM_%$593F_^1_%NUM $0707_(DOUBLE BELL_6**MSOS 4.1**_^1_(EQU_%LMSG7(*-MSG7)_^1MSG8_#ALF_%$,XXXX SECTORS LOADED $_^1_(EQU_%LMSG8(*-MSG8)_^1MSG90_"ALF_%$,TROUBLE WITH DISK. $_^1_(EQU_%LMSG90(*-MSG90)_^1MSG91_"ALF_%$,CHECK TAPE UNIT. $_^1_(EQU_%LMSG91(*-MSG91)_^1_)END_"DSKTAP_^__pPDSKEQC CSY/ J12 P€1_%NAM DSKEQC_'DECK-ID J12 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_(ENT_%EQCODE_^1_(EXT*_$EWES_+MGREAD (MAG. TAPE DRIVER)_^1_(EXT*_$EWES1_*MGDRIVE (MAG. TAPE DRIVER)_^1_(EXT*_$GENFC_*MDRIVE (DISK DRIVER)_^1_(EXT*_$CDRIVE_)COMM.€€ DRIVER - TTY -_^1_%EXT* DCODHX_I**MSOS 4.1**_^1EQCODE_!NOP_%0_^1_%RTJ* FSTPAS_(CHECK FOR FIRST PASS_^1_(RTJ*_$ABAD_^1ABAD_#NOP_%0_3BASE+1_^1_(LDA*_$ABAD_^1_%INA_#-3_^1_(STA*_$ABAD_^1_%ENQ NMSG_)NO OF MSGS_7**MSOS 4.1**_^1QN_#INQ -1_M**MSOS 4.1**_^1_%SQM QZ_+ALL ABSOLUTIZED_2**MSOS 4.1**_^1_%LDA* ABAD_K**MSOS 4.1**_^1_(ADD_%ADR,Q_/ABSO. ADD. OF FIRST MESS._^1_(STA*_$ADR,Q_^1_(JM€€P*_$QN_^1FSTPAS NOP_!0_^1_%LDA* PAS1_^1_%SAM_!QZ_+SKIP IF SECOND PASS_^1_%JMP* (FSTPAS)_^1QZ_%LDA*_$ADR_1ADD. OF MESS. 1_^1_%ENQ LMTMES_'WORD COUNT 1_5**MSOS 4.1**_^1_(RTJ_%CDRIVE_.OUTPUT MESS. 1_^1_(LDA*_$ADR+2_/ADD.OF BUFF. 1_^1_(ENQ_%0_^1_(RTJ_%CDRIVE_.INPUT_!1_^1_(LDA*_$ADR+1_/ADD. OF MESS._!2_^1_%ENQ LDKMES_'WORD COUNT 2_5**MSOS 4.1**_^1_(RTJ_%CDRIVE_.OUTPUT MESS. 2_^1_(LDA€€*_$ADR+3_/ADD. OF BUFF. 2_^1_(ENQ_%0_^1_(RTJ_%CDRIVE_.INPUT 2_^1_%LDQ* MTBUF_(GET ASCII OF_5**MSOS 4.1**_^1_%LDA* MTBUF+1_%MT EQUIP CODE_4**MSOS 4.1**_^1_%RTJ DCODHX_'CONVERT T6 HEX_3**MSOS 4.1**_^1_%JMP* ERREQP_'INPUT ERROR_6**MSOS 4.1**_^1_%STA EWES_)STORE HEX_8**MSOS 4.1**_^1_%STA EWES1_(STORE HEX_8**MSOS 4.1**_^1_%LDQ* DKBUF_(GET ASCII OF_5**MSOS 4.1**_^1_%LDA* DKBUF+1_%DI€€SK EQUIP CODE_2**MSOS 4.1**_^1_%RTJ DCODHX_'CONVERT TO HEX_3**MSOS 4.1**_^1_%JMP* ERREQP_'INPUT ERROR_6**MSOS 4.1**_^1_%STA GENFC_(DISK/DRUM_8**MSOS 4.1**_^1_'SET A_^1_%STA* PAS1_^1_(JMP*_$(EQCODE)_^1ERREQP LDA* AERREQ_'GET ADDRESS OF MSG_/**MSOS 4.1**_^1_%ENQ LERREQ_'GET LENGTH_7**MSOS 4.1**_^1_%RTJ CDRIVE_'COMMENT DRIVER_3**MSOS 4.1**_^1_%JMP* QZ_+RE-ENTER PARAMETERS_.**MSOS €€4.1**_^1PAS1_!NUM 0_^1ADR_$ADC_%MTMES-EQCODE_^1_(ADC_%DSKMES-EQCODE_^1_(ADC_%MTBUF-EQCODE_^1_(ADC_%DKBUF-EQCODE_^1AERREQ ADC ERRMSG-EQCODE_B**MSOS 4.1**_^1_%EQU NMSG(*-ADR)_D**MSOS 4.1**_^1_(BZS_%MTBUF(4),DKBUF(4)_^1MTMES_"ALF_%11,4 DIG. EQ. CODE FOR .._^1_(NUM_%$0A0D_^1_(ALF_%6, MAG. TAPE_^1_%NUM $0707_(BELL_=**MSOS 4.1**_^1LMTMES EQU LMTMES(*-MTMES)_@**MSOS 4.1**_^1DSKMES_!€ALF_%11,4 DIG. EQ. CODE FOR .._^1_(NUM_%$0A0D_^1_%ALF *, MASS MEMORY*_?**MSOS 4.1**_^1_%NUM $0707_(BELL_=**MSOS 4.1**_^1LDKMES EQU LDKMES(*-DSKMES)_?**MSOS 4.1**_^1ERRMSG ALF *,ILLEGAL PARAMETERS SPECIFIED*_0**MSOS 4.1**_^1_%EQU LERREQ(*-ERRMSG)_?**MSOS 4.1**_^1_(END_^__PDSKMTI CSY/ J15 P€1_%NAM DSKMTI_'DECK-ID J15 MSOS 4.1_-SUMMARY-079_^1*_$SMALL COMPUTER DEVELOPEMENT DIVESION_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1972_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.0_^1*_$PROGRAM BASE-1700 MSOS 3.0_<**MSOS 4.0_^1**_)COSY DECK NAME ** DSKMTI **_^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_%UNLCOD($C*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 AD€€RS._^1_%SAN 2_^1_%JMP WRAPUP_^1****************************************_^1_%ENA 0_^1_%STA RTRYKT_^1_%JMP* RESTRT_^1********************_^1REJ1_!SLS 1_^1_%SLS 2_^1_%ENA 0_^1_%JMP* (MGREAD)_^1********************_^1RESTRT LDQ EWES_^1_%LDA UNISEL_'UNIT 0,BINARY_^1_%INQ 1_^1_%OUT REJ1-*_^1********************_^1_%LDA =XBEGINP_$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_)MASK 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 EN€€D 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 =XEOPBIT_^1_%SAN 2_,SKIP IF END OF OP._^1_%INQ -1_+REST€€ORE '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 I€€NPUT 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_+RESTORE 'Q'_^1_%JMP* R8_+TRY INPUT AGAIN_^1_%JMP* ENDIN€€G_'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_^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_^1PARERR NUM -0_^1_%LDA* RTRYKT_^1_%INA -MAXTRY_^1_%SAM 1_^1_%JMP* (PARERR)_$CAN'T RECOVER_^1_%RAO* RTRYKT_^1_%LDQ* EWES_^1_%LDA =XBSPCOD_^1_%OUT -1_+BACK SPACE 1 RECORD_^1_%JMP RESTRT_^1****************************************_^1EWES_!ADC BDCNR*W+CNTLR*E+1_+EQ. CODE - DIR. BIT = 1_^1UNISEL €ADC SELECT+MTNR*E+4 UNIT SELECT BINARY_,**MSOS 4.1**_^1RTRYKT NUM 0_^1****************************************_^1WRAPUP LDQ* EWES_^1_%INQ 1_^1_%LDA* UNISEL_^1_%OUT -1_^1_%LDA =XUNLCOD_^1_%INQ -1_^1_%NOP 0_^1_%OUT -1_^1_%JMP (MGREAD)_$REWIND TAPE_^1_%END_]_^__PDSKMTO CSY/ J16 P€1_%NAM DSKMTO_'DECK-ID J16 MSOS 4.1_-SUMMARY-079_^1*_$SMALL COMPUTER DEVELOPEMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1972_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.0_^1*_$PROGRAM BASE-1700 MSOS 3.0_<**MSOS 4.0_^1**_)COSY DECK NAME ** DSKMTO **_^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 E€€OPBIT($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_%UNLCOD($C*E)_^1_(EQU_%BDCNR(2)_^1_%EQU MTOUT(0)_^1_(EQU_%CTLRNR(3)_^1MGDRIV_!ADC_%-0_^1_(NOP_%-0_^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_(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_(LD€€Q*_$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 $404+MTOUT*E UNIT 0 SELECT BINARY_^1BCDSEL ADC $402+MTOUT*E UNIT 0 SELECT BCD_^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 =XLDBIT_%CHECK FOR LOST DATA_^1_%SAN ERR120_'SKIP IF LOST DATA_^1_%ENA€€ 0_,ALARM NOT LOST DATA EXIT_^1_%JMP (MGDRIV)_^1********************_^1ERR120_!LDA_%=XBSPCOD_^1_(OUT_%-1_^1_(LDA_%=XEOFCOD_^1_(OUT_%-1_^1_(LDA_%=XBSPCOD_^1_(OUT_%-1_^1_(JMP_%RERITE_^1WRAPUP_!LDQ_%EWES1_^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_%=XUNLCOD_^1_(OUT_%-1€*_^1_(ENA_%-0_^1_(JMP_%(MGDRIV)_^1_(END_^__*PDSKDHX CSY/ J13 P€1_%NAM DSKDHX_'DECK-ID J13 MSOS 4.1_-SUMMARY-079_^1*_$ARDEN HILLS DEVELOPMENT DIVISION_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1972_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.0_^1*_$PROGRAM BASE-1700 MSOS 3.0_<**MSOS 4.0_^1*_(COSY DECK NAME ** DSKDHX **_^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_(ST€€Q*_$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_^1DDC21€€0_!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_(SA€€P_%DDC250-*-1_^1_(JMP*_$DDC210_^1DDC250_!LDA*_$VAL_^1_(RAO*_$DCODEC_^1_(JMP*_$(DCODEC)_^1_(BSS_%CH1,CH2,CH3,CH4_^1_(BSS_%VAL,DKT_^1_(ENT_%ENCDEC_^1ENCDEC_!ADC_%-0_^1_(SAM_%EDCERR-*-1_^1_(STA*_$VAL_^1_(SUB*_$MAXDEC_^1_(SAM_%EDC200-*-1_^1EDCERR_!LDA_%=A**_^1_(TRA_%Q_^1_(JMP*_$(ENCDEC)_^1EDC200_!LDA_%=A00_^1_(STA*_$CH1_^1_(STA*_$CH2_^1_(LDA*_$VAL_^1_(ENQ_%0_^1_(DVI*_$TEN_^1_(ADQ*_$CH2€ά_^1_(STQ*_$CH2_^1_(ENQ_%0_^1_(DVI*_$TEN_^1_(QLS_%8_^1_(ADQ*_$CH2_^1_(STQ*_$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_^__άPDSKCDR CSY/ J14 P€1_%NAM DSKCDR_'DECK-ID J14 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROGRAM BASE-1700 MSOS 3.0_<**MSOS 4.0_^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 WRD 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_#96 0Y75W99T59 95PU0_^1_%STA* MODSET_%1. SET MODSET TO $200_^1_%LDA* RDSET_^1_%STA* IOSW+1_^1_%JMP* LIGHT_$TURN O€€N BREAKSWITCH LIGHT_^1SETWR LDQ* QCI_^1_%LDA* WRMODE_^1_%OUT -1_(SET TYPEWRITER TO WRITE MODE_^1RUNCHK LDQ* QCI_^1_%INP -1_(TAKE INITIAL STATUS_^1_%ALS 5_^1_%SAM START-*-1 SKIP IF MOTOR RUNNING_^1_%ENA $7F_^1_%LDQ* QCD_^1_%OUT -1_(SEND CANCEL CHARACTER_^1_%JMP* RUNCHK_^1START LDQ* QCD_^1_%ENA $D_(SEND CARRIAGE RETURN AND_^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._^1RESTRT 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 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 TRA€€NSFERRED_^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 AND XFER IF_^1_%JMP* DELETE_%CHARACTER IS DELETE_^1_%LDQ* WRDCNT_%ADDRESS OF BUFFER_^1_%LD€€A* 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_"AD€€C_%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_(EN€D_^__D-IOSW-1_^1WRSET_"ADPDSKMMD CSY/ J18 P€1_%NAM DSKMMD_'DECK-ID J18 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1**_)COSY DECK NAME ** DSKMMD **_^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*_]_^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 FUNC€€TION (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 ENQ -1_^1_%LDA* FWD_'ADDR OF FIRST WORD OF BUFFER_^1_%SAN MDR70-*-1 ZERO IMPLIES SPECIAL CASE_^1_%LDA* AHILOC_#ADDR OF LOC PRECEDING LOC 0_^1_%STA* FWD_)TO FWD AS FIRST WD -1_^1_%CLR Q_)ZERO TO Q_^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_%INA €€-1_*MINUS 1_^1MDR80 STA* P_)ADDR -1 OF BUFFER_^1_%STQ* Q_)SAVE Q TILL EXIT TIME_^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_$GEN€€ERATING 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),Q_"CONTENTS OF FIRST WORD -1_^1_%STA* T_+TO LOCATION T_^1_%LDA* LWD_'ADDRESS OF LAST WD OF BUFFER_^1_%STA* (FWD),Q_$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_%LDQ* Q_)RESTORE Q_^1_%STA* (FWD),Q_#(FWD) - 1_^1*_!********************************************************************_^1*_#ERROR EXIT_^1*_!********************************************************************_^1FAIL_!CLR Q_)ZERO TO Q_^1_%CLR A_^1EXI_$JMP*_$(MDRIVE)_^1*_]_^1MDR125 LDA* M_^1_%ST€€A* 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*_#PARAMETERS AND CONSTANTS_^1*_!********************************************************************_^1AHILOC ADC HILOC_$ADDR OF LOC PRECEDING LOC ZERO*_^€€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_(CONNECT 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_$GE€€NERATING 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_%LDQ* Q_)RES€€TORE Q_^1_%STA* (FWD),Q_^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_#SAVE 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_)DIRECT€POR STATUS_^1B_$NUM $B_(000B MASK_^1MASK1_"NUM_%1_^1BIT10_"NUM_%$400_^1_(END_^__PPMDRIV4 CSY/ J19 P€1_%NAM MDRIV4_'DECK-ID J19 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROGRAM BASE-1700 MSOS 4.0_<**MSOS 4.0_^1*_\**MSOS 4.0_^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*_;PLUS MEANS READ_/**MSOS 4.1**_^1*_;MINUS MEANS WRITE_-**MSOS 4.1**_^1*_\**MSOS 4.0_^1*_;THE FOLLOWING PARAMETERS MUST_"**MSOS 4.0_^1*_;BE SUPPLIED_5**MSOS 4.0_^1_(EQU_%DEVN($D) PHYSICAL DEVICE NUMBER_***MSOS 4.0_^1*_\**MSOS 4.0_^1****************************************************************MSOS 4.0€€_^1*_\**MSOS 4.0_^1_%EXT* FST_L**MSOS 4.1**_^1_%ENT GENFC_J**MSOS 4.1**_^1_%ENT MDRIVE_I**MSOS 4.1**_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1MDRIV4_!ADC_%0_I**MSOS 4.0_^1MDRIVE EQU MDRIVE(MDRIV4)_A**MSOS 4.1**_^1_(STA*_$FWD_%SAVE FIRST WORD ADDRESS_)**MSOS 4.0_^1_(ENA_%10_'SET COUNTERS TO TRY TEN TIMES_"**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1_(STA*_$TENC_F**MSOS 4.0_^1_%ENA 3_,READ C€€ODE_8**MSOS 4.1**_^1_%SQP MDR20_(+ FOR READ, - WRITE_.**MSOS 4.1**_^1_%ENA 2_,WRITE CODE_7**MSOS 4.1**_^1_%TCQ Q_N**MSOS 4.1**_^1MDR20_"STA*_$K_(K IS ADDED TO FUNCTION TO_'**MSOS 4.0_^1_%STQ* BUFLEN+1_G**MSOS 4.1**_^1*_;GENERATE READ OR WRITE FUNCTION **MSOS 4.0_^1_%LDA FST_*CHECK FIRST TIME THROUGH_)**MSOS 4.1**_^1_(SAZ_%1_(CLEAR CONTROLLER IF EQUAL TO ZERO**MSOS 4.0_^1_(JMP*€€_$FUNCTS_D**MSOS 4.0_^1_%RAO FST_*SET FIRST TIME FLAG_.**MSOS 4.1**_^1****************************************************************MSOS 4.0_^1*_;CLEAR THE CONTROLLER_,**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1CLRCON_!CLR_%A_I**MSOS 4.0_^1_(LDQ*_$GENFV4_"GENERATING FUNCTION_-**MSOS 4.0_^1_%INQ -1_+CLEAR CONTROLLER_1*€€*MSOS 4.1**_^1_(INP_%-1_'SEND FUNCTION TO DISK_+**MSOS 4.0_^1MSTAT_"RTJ_%STACON_"CHECK STATUS AFTER CLEAR_(**MSOS 4.0_^1*_;CONTROLLER_6**MSOS 4.0_^1_(LLS_%15_'CHECK READY_5**MSOS 4.0_^1_(SAM_%1_(MINUS MEANS READY_/**MSOS 4.0_^1_(JMP*_$MDR110_"NOT READY-FATAL ERROR_+**MSOS 4.0_^1_(LRS_%15_H**MSOS 4.0_^1_%AND* BIT3_)CHECK FOR OFF CYLINDER_.72*1701_^1_(SAZ_%1_(ZERO MEANS OFF CYLINDER_€€)**MSOS 4.0_^1_(JMP*_$MSTAT_#REPEAT REQUEST IF NOT_+**MSOS 4.0_^1*_;OFF CYLINDER_4**MSOS 4.0_^1M1STAT_!RTJ_%STACON_"CHECK STATUS AFTER CLEAR_(**MSOS 4.0_^1_%AND* BIT3_N72*1701_^1_(SAN_%1_(NON ZERO MEANS ON CYLINDER_%**MSOS 4.0_^1_(JMP*_$M1STAT_"REPEAT REQUEST IF NOT ON CYLINDER**MSOS 4.0_^1*_\**MSOS 4.0_^1FUNCTS_!RTJ*_$FNDSEC_"GET READY FOR DATA TRANSFER_$**MSOS 4.0_^1_(JMP*_$MDR10€€0_"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_"GENERATING 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 ADDRESS WORD_'**MSOS 4.€€0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1_(CLR_%Q_I**MSOS 4.0_^1_(LDA-_$I_(MASS STORAGE SECTOR NUMBER_%**MSOS 4.0_^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**_^1*_;A EQUAL 1 MEANS DISK1_+**MSOS 4.0_^1*_;A EQUAL 0 MEANS 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 SECTOR 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_%ALS 8_,SHIFT TO BITS 1€€5-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*_$M€€DR90_#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_^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 ADDRESS_.**MSOS 4.0_^1K_'ADC_%0_(READ OR WRITE CODE_.**€€MSOS 4.0_^1NR_%ADC_%0_(SEEK ADDRESS_4**MSOS 4.0_^1GENFV4_!ADC_%DEVN*128 GENERATING FUNCTION_-**MSOS 4.0_^1GENFC EQU GENFC(GENFV4)_B**MSOS 4.1**_^1CYLNUM_!ADC_%0_(CYLINDER AFTER REGISTER STATUS_!**MSOS 4.0_^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_^1MDR100_!ENA_%10_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1MDR101_!LDA*_$FWD_%FIRST WORD 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_!CLR_%Q_^1_(CLR_%A_^1EXI_$J€€MP_%(MDRIV4)_B**MSOS 4.0_^1****************************************************************MSOS 4.0_^1MDR125_!RTJ*_$STATUS_"CHECK STATUS AFTER DATA TRANSFER **MSOS 4.0_^1_(SAZ_%1_(ANY ERRORS_6**MSOS 4.0_^1_(JMP*_$MDR110_"YES_=**MSOS 4.0_^1_(RTJ*_$FNDSEC_"GET READY FOR COMPARE FUNCTION_!**MSOS 4.0_^1_(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*_$MDR€€110_D**MSOS 4.0_^1_(ENA_%$40_%CHECK FOR NO COMPARE_,**MSOS 4.0_^1_(AND*_$DIRSTA_D**MSOS 4.0_^1_(SAN_%1_I**MSOS 4.0_^1_(JMP*_$MDR200_"TAKE NORMAL EXIT_0**MSOS 4.0_^1_(LDA*_$TENC_$NO COMPARE_6**MSOS 4.0_^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*_;ROUTIN€€E 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_^1ST€VAEXI_!JMP*_$(STATUS) FATAL ERROR EXIT_^1DIRSTA_!ADC_%0_(DIRECTOR STATUS_^1_%END_]_^__VPMDR52 CSY/ J20 P€1_%NAM MDR52_(DECK-ID J20 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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_%JMP* (MDRIVE)_^1FWD_"NUM 0_,FWD OF B€€UFFER_^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* STGENF_^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 RE€€J3-*_'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* 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_]_^__θPMDRV56 CSY/ J17 P€1_%NAM MDRV56_'DECK-ID J17 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$PROGRAM BASE-1700 MSOS 4.0_<**MSOS 4.0_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_]_^1*_$€€856 CARTRIDGE DISK DRIVER FOR DSKTAP_0**MSOS 4.1**_^1*_]_^1*_]_^1*****************************ENTRANCE PARAMETERS ARE************MSOS 4.0_^1*_\**MSOS 4.0_^1*_;A REGISTER CONTAINS FIRST WORD_!**MSOS 4.0_^1*_;ADDRESS OF THE READ/WRITE BUFFER.**MSOS 4.0_^1*_\**MSOS 4.0_^1*_;I CONTAINS THE FIRST SECTOR TO_!**MSOS 4.0_^1*_;READ/WRITE_6**MSOS 4.0_^1*_\**MSOS 4.0_^1*_;Q CONTAINS THE READ/€€WRITE CODE_!**MSOS 4.0_^1*_;PLUS MEANS READ_/**MSOS 4.1**_^1*_;MINUS MEANS WRITE_-**MSOS 4.1**_^1*_\**MSOS 4.0_^1*_;THE FOLLOWING PARAMETERS MUST_"**MSOS 4.0_^1*_;BE SUPPLIED_5**MSOS 4.0_^1_%EQU SECTOR(11774)_B**MSOS 4.1**_^1_(EQU_%DEVN($D) PHYSICAL DEVICE NUMBER_***MSOS 4.0_^1*_\**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0€€_^1_%EXT* FST_L**MSOS 4.1**_^1_%ENT GENFC_J**MSOS 4.1**_^1_%ENT MDRIVE_I**MSOS 4.1**_^1*_\**MSOS 4.0_^1*_\**MSOS 4.0_^1MDRIV4_!ADC_%0_I**MSOS 4.0_^1MDRIVE EQU MDRIVE(MDRIV4)_A**MSOS 4.1**_^1_(STA*_$FWD_%SAVE FIRST WORD ADDRESS_)**MSOS 4.0_^1_(ENA_%10_'SET COUNTERS TO TRY TEN TIMES_"**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1_(STA*_$TENC_F**MSOS 4.0_^1_%ENA 3_,READ CODE_8**MSOS 4.1*€€*_^1_%SQP MDR20_(+ FOR READ, - WRITE_.**MSOS 4.1**_^1_%ENA 2_,WRITE CODE_7**MSOS 4.1**_^1_%TCQ Q_N**MSOS 4.1**_^1MDR20_"STA*_$K_(K IS ADDED TO FUNCTION TO_'**MSOS 4.0_^1_%STQ* BUFLEN+1_G**MSOS 4.1**_^1*_;GENERATE READ OR WRITE FUNCTION **MSOS 4.0_^1_%LDA FST_*CHECK FIRST TIME THROUGH_)**MSOS 4.1**_^1_(SAZ_%1_(CLEAR CONTROLLER IF EQUAL TO ZERO**MSOS 4.0_^1_(JMP*_$FUNCTS_D**MSOS€€ 4.0_^1_%RAO FST_*SET FIRST TIME FLAG_.**MSOS 4.1**_^1****************************************************************MSOS 4.0_^1*_;CLEAR THE CONTROLLER_,**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1CLRCON_!CLR_%A_I**MSOS 4.0_^1_(LDQ*_$GENFV4_"GENERATING FUNCTION_-**MSOS 4.0_^1_%LDA =N$100_I**MSOS 4.1**_^1_%OUT -1_+CONNE€€CT TO UNIT 0_0**MSOS 4.1**_^1_%INQ -1_+CLEAR CONTROLLER_1**MSOS 4.1**_^1_(INP_%-1_'SEND FUNCTION TO DISK_+**MSOS 4.0_^1MSTAT_"RTJ_%STACON_"CHECK STATUS AFTER CLEAR_(**MSOS 4.0_^1*_;CONTROLLER_6**MSOS 4.0_^1_(LLS_%15_'CHECK READY_5**MSOS 4.0_^1_(SAM_%1_(MINUS MEANS READY_/**MSOS 4.0_^1_(JMP*_$MDR110_"NOT READY-FATAL ERROR_+**MSOS 4.0_^1_(LRS_%15_H**MSOS 4.0_^1_%AND* BIT3_)CHECK FOR€€ OFF CYLINDER_.72*1701_^1_(SAZ_%1_(ZERO MEANS OFF CYLINDER_)**MSOS 4.0_^1_(JMP*_$MSTAT_#REPEAT REQUEST IF NOT_+**MSOS 4.0_^1*_;OFF CYLINDER_4**MSOS 4.0_^1M1STAT_!RTJ_%STACON_"CHECK STATUS AFTER CLEAR_(**MSOS 4.0_^1_%AND* BIT3_N72*1701_^1_(SAN_%1_(NON ZERO MEANS ON CYLINDER_%**MSOS 4.0_^1_(JMP*_$M1STAT_"REPEAT REQUEST IF NOT ON CYLINDER**MSOS 4.0_^1*_\**MSOS 4.0_^1FUNCTS_!RTJ*_$FNDS€€EC_"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_"GENERATING FUNCTION_-**MSOS 4.0_^1_(INP_%-1_'SEND FUNCTION TO DISK_+**MSOS 4.0_^1_%AND =N$1000_%BIT 12 SET_7**MSOS 4.1**_^1_%ARS 12_+FOR 856-4,_7**MSOS 4.1**_^1_%TRA Q_,RESET FOR 856-2_2**MSOS 4.1**_^1_%LDA* SECTAB,Q_G**MSOS 4.1**_^1_%STA* SIZSEC_'SAVE DIVISOR_5**MSOS 4.1**_^1*_\**MSOS 4.0_^1********************************************************€€********MSOS 4.0_^1*_;COMPUTE FILE ADDRESS WORD_'**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1_(CLR_%Q_I**MSOS 4.0_^1_(LDA-_$I_(MASS STORAGE SECTOR NUMBER_%**MSOS 4.0_^1_(SAN_%1_(CHECK FOR SECTOR ZERO_+**MSOS 4.0_^1_(JMP*_$SETNR_E**MSOS 4.0_^1_(DVI_%=N11774_!DIVIDE BY LARGEST PHYSICAL SECTOR**MSOS 4.0_^1SIZSEC EQU SIZSEC(*€€-1)_D**MSOS 4.1**_^1*_;A EQUAL 1 MEANS DISK1_+**MSOS 4.0_^1*_;A EQUAL 0 MEANS DISK 0_***MSOS 4.0_^1_%ALS 5_,B+T 5 DISK INDICATOR_-**MSOS 4.1**_^1_(STA*_$Q1_'SAVE DISK INDICATOR_-**MSOS 4.0_^1TRQA_#TRQ_%A_I**MSOS 4.0_^1DV1_$CLR_%Q_(CLEAR Q FOR DIVISION_,**MSOS 4.0_^1_(DVI_%=N29_$DIVIDE BY NUMBER OF SECTORS PER **MSOS 4.0_^1*_;TRACK_;**MSOS 4.0_^1_(STQ*_$R2_'SAVE SECTOR NUMBER IN T€€RACK_$**MSOS 4.0_^1_(CLR_%Q_(CLEAR Q FOR DIVISION_,**MSOS 4.0_^1_%DVI* TWO_*CALCULATE CYLINDER AND TRACK_(72*1701_^1_%ALS 7_,CYL IN BITS 7-15_1**MSOS 4.1**_^1_(ADD*_$R2_'PUT SECTOR NUMBER IN BITS 0-4_"**MSOS 4.0_^1_(ADD*_$Q1_'ADD DISK INDICATOR(BIT6)_(**MSOS 4.0_^1_%QLS 6_,TRACK INDICATOR IN BIT 6_)**MSOS 4.1**_^1_(AAQ_%A_I**MSOS 4.0_^1SETNR STA* NR_+SAVE ADDRESS TO SEEK_^1*_\**€€MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;INITIATE SEEK ADDRESS FUNCTION_!**MSOS 4.0_^1****************************************************************MSOS 4.0_^1MDR90_"LDA*_$NR_'FILE ADDRESS_4**MSOS 4.0_^1_(LDQ*_$GENFV4_"GENERATING FUNCTION_-**MSOS 4.0_^1_%INQ 1_,LOAD ADDRESS_5**MSOS 4.1**_^1_(OUT_%2_(SEND FUNCTION TO DISK_+**MSOS 4.€€0_^1_(JMP*_$MDR130_"DEVICE REPLY_4**MSOS 4.0_^1_(JMP*_$MDR90_#DEVICE REJECT(INTERNAL)_)**MSOS 4.0_^1_(LDA*_$TEN_%EXTERNAL REJECT_1**MSOS 4.0_^1_(SAN_%1_I**MSOS 4.0_^1_(JMP*_$MDR110_"EXTERNAL REJECT 10 TIMES_(**MSOS 4.0_^1_(INA_%-1_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1_(JMP*_$MDR90_#TRY AGAIN_7**MSOS 4.0_^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_^1SECTAB NUM 23663_(856-4_<**MSOS 4.1**_^1_%NUM 11773_(856-2_<**MSOS 4.1**_^1TEN_$NUM_%0_I**MSOS 4.0_^1TENC_#NUM_%0_I**MSOS 4.0_^1Q1_%NUM_%0_(DISK INDICATOR_2**MSOS 4.0€€_^1R2_%NUM_%0_(HOLDER FOR SECTOR NUMBER_(**MSOS 4.0_^1FWD_$ADC_%0_(FIRST WORD ADDRESS_.**MSOS 4.0_^1K_'ADC_%0_(READ OR WRITE CODE_.**MSOS 4.0_^1NR_%ADC_%0_(SEEK ADDRESS_4**MSOS 4.0_^1GENFV4_!ADC_%DEVN*128 GENERATING FUNCTION_-**MSOS 4.0_^1GENFC EQU GENFC(GENFV4)_B**MSOS 4.1**_^1CYLNUM_!ADC_%0_(CYLINDER AFTER REGISTER STATUS_!**MSOS 4.0_^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_^1MDR100_!ENA_%10_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1MDR101_!LDA*_$FWD_%FIRST WORD ADDRESS_.**MSOS 4.0_^1_(LDQ*_$GENFV4_"GENERATING FUNC€€TION_-**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_!CLR_%Q_^1_(CLR_%A_^1EXI_$JMP_%(MDRIV4)_B**MSOS 4.0_^1****************************************************************MSOS 4.0_^1MDR125_!RTJ*_$STATUS_"CHECK STATUS AFTER DATA TRANSFER **MSOS 4.0_^1_(SAZ_%1_(ANY ERRORS_6**MSOS 4.0_^1_(JMP*_$MDR110_"YES_=**MSOS 4.0_^1_(RTJ*_$FNDS€€EC_"GET READY FOR COMPARE FUNCTION_!**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;INITIATE COMPARE FUNCTION_'**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_\**MSOS 4.0_^1MDR180_!ENA_%10_H**MSOS 4.0_^1_(STA*_$TEN_G**MSOS 4.0_^1MDR181_!LDA*_$FWD_%ADDRESS OF BUFFER_/**MSOS 4.0_^1_(LDQ*_$GENFV4_"GEN€€ERATING 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**M€€SOS 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_%1_I**MSOS 4.0_^1_(JMP*_$MDR200_"TAKE NORMAL EXIT_0**MSOS 4.0_^1_(LDA*_$TENC_$NO COMPARE_6**MSOS 4.0_^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) RE€€PLY RETURN FROM STATUS CHECK_!**MSOS 4.0_^1_(JMP*_$STREPL_"DEVICE REJECT(INTERNAL)_)**MSOS 4.0_^1_(JMP*_$MDR110_"DEVICE REJECT(EXTERNAL)_)**MSOS 4.0_^1****************************************************************MSOS 4.0_^1*_;ROUTINE FOR TESTING STATUS_%**MSOS 4.0_^1****************************************************************MSOS 4.0_^1STATUS_!ADC_%0_I**MSOS 4.0_^1STA5_#RTJ*€€_$STACON_"ISSUE STATUS FUNCTION_+**MSOS 4.0_^1_(STA*_$DIRSTA_"SAVE DIRECTOR STATUS_,**MSOS 4.0_^1_(TRA_%Q_I**MSOS 4.0_^1_(LRS_%1_(CHECK FOR READY_1**MSOS 4.0_^1_(SAM_%1_I**MSOS 4.0_^1_(JMP*_$STAERR_"EXIT IF NOT READY_/**MSOS 4.0_^1_%LRS 1_,BUSY BIT TO A15_2**MSOS 4.1**_^1_%SAP 1_,NOT BUSY_9**MSOS 4.1**_^1_(JMP*_$STA5_$REPEAT STATUS_3**MSOS 4.0_^1_(LRS_%4_(IF NOT BUSY CHECK FOR AL€ΞARM_$**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_]_^__ΞPSPCALL CSY/ J21 P€1_%NAM SPCALL_'DECK-ID J21 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT SETPV4_^1SETPV4 GTFILE COMP,NAME-SETPV4-1,FWA,FWA-SETPV4+1,0,,0,1,1_^1_%ADC 0_^1_%ADC 0_^1_%NUM $14EA_(JUMP TO DISPATCHER_^1NAME_!ALF 3,STP1V4_^1COMP€,_!JMP* FWA_^1FWA_"RTJ+ 0_^1_%END SETPV4_^__,PSPOLY1 CSY/ J22 P€1_%NAM SPOLY1_'DECK-ID J22 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_'1700 MSOS VERSION 4.0 SETUP UTILITY_^1_%ENT SETPV4_^1_%ENT SUP_^1_%EXT STPV4_^1SETPV4 GTFILE COMP,NAME-SETPV4-1,FWA,FWA-SETPV4+1,0,,0,1,1_^1_%ADC 0_^1_%A€2DC 0_^1_%NUM $14EA_(JUMP TO DISPATCHER_^1NAME_!ALF 3,STP1V4_^1COMP_!JMP* FWA_^1FWA_"RTJ+ STPV4_^1SUP_"NUM 0_^1_%ENA 0_QMSOS4.1_^1_%STA* SETPV4+7_$CLEAR W2__]_^1_%RTJ- ($F4)_^1REQST NUM 0_,REQUEST CODE_^1_%NUM 0_,COMP ADR_^1THRD_!NUM 0_^1_%NUM $08B3_(MODE L.U._^1_%NUM 96_+LENGTH_^1ADR_"NUM 0_,STARTING ADR_^1_%NUM 0_^1LSB_"NUM 0_,DISK SECTOR ADR_^1CHKTHR LDA* THRD_^1_%SAZ 1_^1_%JMP* CHKTHR_^1_%LDQ* QSAVE_(RESTORE Q_^1_%JMP* (DISKW)_^1QSAVE NUM 0_^1_%END_]_^__>PSPOLY2 CSY/ J35 P€1_%NAM SPOLY2_'DECK-ID J35 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT SETPV4_^1_%EXT SUP_^1SETPV4 GTFILE COMP,NAME-SETPV4-1,FWA,FWA-SETPV4+1,0,,0,1,1_^1_%ADC 0_^1_%ADC 0_^1_%NUM $14EA_(JUMP TO DISPATCHER_^1NAME_!ALF 3,€DSTP1V4_^1COMP_!JMP* FWA_^1FWA_"RTJ+ SUP_^1_%END SETPV4_^1 MON_]_^__DPSUP CSY/ FTN J36 P€1_$SUBROUTINE SUP_^1_#1_2/DECK-ID J36 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_$COMMON IRDFLG,IMODE,IUNIT,IOBUF(97),IOCTR_^1_$COMMON ISODEV,IMCX,IMASC(96),ITMASC(4),IERR_^1_$COMMON IMVA,IMVB,IMVC,IMVD,ISCR,ISECT,IPB,IPM,IFATAL_^1_$COMMON IC€€PMC,IBUNIT,IMUNIT,INUNIT,IFILE,IDCTR_^1_$COMMON IBTM,IBF(1500),IMF(1500),IFX,IPASS_^1_$DIMENSION M(7)_^1_$DIMENSION N(9)_^1_$DIMENSION ITT(4)_^1_$DATA M(1),M(2),M(3),M(4),M(5),M(6),M(7) /_^1_#*$0D0A,$4D4F,$554E,$5420,$4D20,$5441,$5045/_^1_$DATA N(1),N(2),N(3),N(4),N(5),N(6),N(7),N(8),N(9) /_^1_#*$0D0A,$4341,$5441,$4C4F,$4720,$4649,$4E49,$5348,$4544 /_^1_$IF(IFATAL .EQ.0) GO TO 12_^€€1_$ASSEM $54F4,$4A00_^1 12_!IPB=1_^1_$IPM=1_^1_$ISFLAG=0_^1_$ISTAR=0_^1_$JUNITS=4_^1_$IFEX=0_^1_$IMCX=1_^1 10_!CALL REDCON_^1_$IF(ITMASC(1).EQ.1) GO TO 15_^1_$IF(ITMASC(1).EQ.8) GO TO 11_^1_$IF(ITMASC(1).EQ.6) GO TO 13_^1_$IF(ITMASC(1).EQ.2.AND.ITMASC(3).LT.0.OR.ITMASC(1).EQ.4.AND._^1_#*ITMASC(3).LT.0) GO TO 14_^1_$GO TO 10_^1 13_!ISFLAG=1_^1_$GO TO 10_^1 14_!ISTAR=1_^1_$GO TO 10_^€€1 15_!IBUNIT=ITMASC(2)_^1_$IMUNIT=ITMASC(3)_^1_$INUNIT=ITMASC(4)_^1_$IF(IBUNIT.EQ.IMUNIT) JUNITS=JUNITS-1_^1_$IF(IMUNIT.EQ.INUNIT) JUNITS=JUNITS-1_^1_$IF(IBUNIT.EQ.INUNIT) JUNITS=JUNITS-1_^1_$JUNITS=JUNITS-1_^1_$IF(JUNITS.EQ.0) JUNITS=1_^1_$GO TO 10_^1C_]_^1C_$BUFFER IN AS INDICATED BY CONTROL STMTS AND UNIT SELECTIONS_^1C_]_^1 11_!IF(JUNITS.EQ.1.OR.ISFLAG.EQ.1) GO TO 16_^1 17_!IF(€€JUNITS.LE.2.OR.ISTAR.NE.0.OR.ISFLAG.NE.0) GO TO 18_^1_$GO TO 19_^1C_]_^1C_$BUFFER IN M TAPE IF NECESSARY_^1 16_!DO 21 I=1,7_^1 21_!IOBUF(I)=M(I)_^1_$IOCTR=7_^1_$ISODEV=$08FC_^1_$CALL ASCOUT_^1_$IUNIT=$08FD_^1_$IMODE=$1000_^1_$CALL IREAD_^1_$IDCTR=1_^1_$CALL BUFIN_^1_$GO TO 17_^1C_]_^1C_$BUFFER IN B TAPE IF NECESSARY_^1 18_!DO 22 I=1,7_^1 22_!IOBUF(I)=M(I)_^1_$IOBUF(5)=$4220_^1_$IOC€€TR=7_^1_$ISODEV=$08FC_^1_$CALL ASCOUT_^1_$IUNIT=$08FD_^1_$IMODE=$1000_^1_$CALL IREAD_^1_$IDCTR=0_^1_$CALL BUFIN_^1_$GO TO 19_^1C_]_^1C_$PICK UP NEXT CONTROL CARD_^1C_]_^1 19_!IF(JUNITS.GT.2) GO TO 83_^1_$DO 82 I=1,7_^1 82_!IOBUF(I)=M(I)_^1_$IOBUF(5)=$4E20_^1_$IOCTR=7_^1_$ISODEV=$08FC_^1_$CALL ASCOUT_^1_$IUNIT=$08FD_^1_$IMODE=$1000_^1_$CALL IREAD_^1 83_!ISODEV=$08FB_^1_$IMCX=1_^1 20€€_!CALL REDCON_^1 30_!IT=ITMASC(1)_^1_$GO TO (1,4,4,4,2,4,4,3) , IT_^1C_,L I D R C S O E_^1C_]_^1C_$*L ALREADY PROCESSED_^1C_]_^1 1_"GO TO 20_^1C_]_^1C_$*C PROCESSOR_^1C_]_^1 2_"IF(IFEX.EQ.0) GO TO 6_^1_$IERR=4_^1_$CALL IERROR_^1C_$ERROR ONLY 1 CATALOG ALLOWED /RUN , ERROR IF FATAL_^1 6_"DO 81 I=1,7_^1 81_!IOBUF(I)=M(I)_^1_$IOCTR=7_^1_$ISODEV=$08FC_^1_$CALL ASCOUT_^1_$IUNIT=$08FD_^€€1_$IMODE=$1000_^1_$CALL IREAD_^1_$CALL ICAT_^1_$DO 80 I=1,9_^1 80_!IOBUF(I)=N(I)_^1_$IOCTR=9_^1_$ISODEV=$08FC_^1_$CALL ASCOUT_^1_$IUNIT=$08FD_^1_$IMODE=$1000_^1_$CALL IREAD_^1_$ISODEV=$08FB_^1_$GO TO 20_^1C_]_^1C_$*E PROCESSOR_^1C_]_^1 3_"IF(IFEX.EQ.0) GO TO 89_^1_$CALL WREOF_^189_"ASSEM $54F4,$4A00_^1C_]_^1C_$*O,*I,*R,*D,*S PREPROCESSORS_^1C_]_^1 4_"ITMCX=IMCX_^1_$DO 84 I=1,4_^1 8€€4_!ITT(I)=ITMASC(I)_^1_$IFEX=1_^1_$IF(IT.EQ.7) GO TO 28_^1 24_!CALL REDCON_^1_$IF(ITMASC(1).NE.8) GO TO 25_^1_$IERR=9_^1_$CALL IERROR_^1C_$ERROR IF *E CARD FOUND BEFORE *O CARD_^1 25_!IF(ITMASC(1).NE.7) GO TO 24_^1 28_!IF(ISFLAG.NE.0.OR.JUNITS.EQ.1) GO TO 26_^1_$IF(ITMASC(2).GE.IPM) GO TO 27_^1_$IERR=4_^1_$CALL IERROR_^1C_$ERROR IF TRYING TO OUTPUT FROM LESS THAN CURRENT POSITION_^€€1C_]_^1C_$MOVE M UNIT TO FIRST OUTPUT POSITION_^1 27_!IF(IPM.EQ.ITMASC(2)) GO TO 26_^1_$IMVC=ITMASC(2)-IPM_^1_$IMVA=IMUNIT_^1_$IMVB=0_^1_$IMVD=0_^1_$IMODE=0_^1_$CALL MOVE_^1 26_!IMCX=ITMCX_^1_$IPM=ITMASC(2)_^1_$DO 85 I=1,4_^1 85_!ITMASC(I)=ITT(I)_^1_$GO TO 86_^1 29_!CALL REDCON_^1 86_!CONTINUE_^1_$GO TO (1,31,31,31,2,70,90,3) ,ITMASC(1)_^1 31_!IF(IPM.GE.ITMASC(2)) GO TO 32_^1_$IMVC€€=ITMASC(2)-IPM_^1_$IF(ISFLAG.NE.0.OR.JUNITS.EQ.1) GO TO 88_^1_$IMVA=IMUNIT_^1_$IMVB=INUNIT_^1_$IMVD=0_^1_$CALL MOVE_^1_$GO TO 32_^1 88_!IMVA=1_^1_$IMVB=INUNIT_^1_$IMVD=IPM_^1_$CALL MOVE_^1 32_!IF(ITMASC(1).EQ.3.AND.ITMASC(3).NE.0) GO TO 34_^1_$IPM=ITMASC(2)+1_^1_$GO TO 33_^1 34_!IPM=ITMASC(3)+1_^1 33_!GO TO (1,50,40,60,2,70,90,3),ITMASC(1)_^1C_]_^1C_$*D PROCESSOR_^1C_]_^1 40_!IF(JU€€NITS.EQ.1) GO TO 29_^1_$IMVC=0_^1_$IF(ITMASC(3).EQ.0) GO TO 42_^1_$IMVC=ITMASC(3)-ITMASC(2)_^1 42_!IMVC=IMVC+1_^1_$IMVA=IMUNIT_^1_$IMVB=0_^1_$IMVD=0_^1_$CALL MOVE_^1_$GO TO 29_^1C_]_^1C_$*I PROCESSOR_^1C_]_^1 50_!IF(JUNITS.EQ.1) GO TO 51_^1C_#MOVE BINARY TO BE INSERTED AFTER TO N UNIT_^1_$IMVA=IMUNIT_^1_$IMVB=INUNIT_^1_$IMVC=1_^1_$IMVD=0_^1_$CALL MOVE_^1_$GO TO 52_^1 51_!IMVA=1_^1_€€$IMVB=INUNIT_^1_$IMVC=1_^1_$IMVD=ITMASC(2)_^1_$CALL MOVE_^1 52_!IF(ISTAR.NE.0.OR.JUNITS.LE.2) GO TO 53_^1C_$MOVE IS FROM REAL B UNIT_^1_$IMVA=IBUNIT_^1_$IMVB=INUNIT_^1_$IMVC=1_^1_$IMVD=0_^1_$CALL MOVE_^1_$GO TO 29_^1C_$MOVE IS FROM BUFIN OF B UNIT_^1 53_!IMVA=0_^1_$IMVB=INUNIT_^1_$IMVC=1_^1_$IF(ITMASC(3))54,55,55_^1 54_!IMVD=-ITMASC(3)_^1_$GO TO 56_^1 55_!IMVD=ITMASC(3)_^1 56_!CALL€€ MOVE_^1_$GO TO 29_^1C_]_^1C_$*R PROCESSOR_^1C_]_^1 60_!IF(JUNITS.EQ.1) GO TO 61_^1C_$MUST MOVE 1 BINARY FROM REAL M TO DUMMY_^1_$IMVA=IMUNIT_^1_$IMVB=0_^1_$IMVD=0_^1_$IMVC=1_^1_$CALL MOVE_^1 61_!IF(ISTAR.NE.0.OR.JUNITS.LE.2) GO TO 62_^1C_$MOVE 1 BINARY FROM REAL B UNIT_^1_$IMVA=IBUNIT_^1_$IMVB=INUNIT_^1_$IMVC=1_^1_$IMVD=0_^1_$CALL MOVE_^1_$GO TO 29_^1C_#MOVE 1 BINARY FROM BUFIN OF€€ B UNIT_^1 62_!IMVA=0_^1_$IMVB=INUNIT_^1_$IMVC=1_^1_$IF(ITMASC(3)) 63,64,64_^1 63_!IMVD=-ITMASC(3)_^1_$GO TO 65_^1 64_!IMVD=ITMASC(3)_^1 65_!CALL MOVE_^1_$GO TO 29_^1C_]_^1C_$*S PROCESSOR_^1C_]_^1 70_!IMVC=0_^1_$IMVA=ITMASC(2)-1_^1_$IMVB=INUNIT_^1_$IF(ITMASC(4).EQ.0) GO TO 71_^1_$IMVC=ITMASC(4)-ITMASC(3)_^1 71_!IMVC=IMVC+1_^1_$IMVD=ITMASC(3)_^1_$CALL MOVE_^1_$GO TO 29_^1C_]_^1C_$*O€P SUM UP PROCESSOR_^1C_]_^1 90_!IF(ISFLAG.NE.0) GO TO 20_^1_$IF(ITMASC(3).EQ.0) GO TO 20_^1_$IMVC=ITMASC(3)-IPM+1_^1_$IF(JUNITS.EQ.1) GO TO 91_^1_$IMVA=IMUNIT_^1_$IMVB=INUNIT_^1_$IMVD=0_^1_$CALL MOVE_^1_$IPM=ITMASC(3)+1_^1_$GO TO 20_^1 91_!IMVA=1_^1_$IMVB=INUNIT_^1_$IMVD=IPM_^1_$CALL MOVE_^1_$IPM=ITMASC(3)+1_^1_$GO TO 20_^1_$END_]_^__PPBTOA CSY/ FTN J37 P€1_$SUBROUTINE BTOA_^1_#1_2/DECK-ID J37 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_$CONVERTS BINARY TO ASCII PLACES IT IN IOBUF(2,3,4)_^1C_$INPUT PARAMETER IDCTR_^1C_]_^1_$COMMON IRDFLG,IMODE,IUNIT,IOBUF(97),IOCTR_^1_$COMMON ISODEV,IMCX€€,IMASC(96),ITMASC(4),IERR_^1_$COMMON IMVA,IMVB,IMVC,IMVD,ISCR,ISECT,IPB,IPM,IFATAL_^1_$COMMON ICPMC,IBUNIT,IMUNIT,INUNIT,IFILE,IDCTR_^1_$COMMON IBTM,IBF(1500),IMF(1500),IFX,IPASS_^1_$M=IDCTR_^1_$DO 10 I=1,3_^1_$N=M-(M/10)*10_^1_$M=M/10_^1_$N=N+$100*(M-(M/10)*10)+$3030_^1_$M=M/10_^1_$L=5-I_^1 10_!IOBUF(L)=N_^1_$DO 20 I=2,4_^1_$IF(AND(IOBUF(I),$FF00).NE.$3000) GO TO 30_^1_$IOBUF(I)=A€†ND(IOBUF(I),$FF)+$2000_^1_$IF(AND(IOBUF(I),$FF).NE.$30) GO TO 30_^1 20_!IOBUF(I)=$2020_^1 30_!IOBUF(1)=$2020_^1_$RETURN_^1_$END_]_^__†PISTAT CSY/ FTN J38 P€1_$SUBROUTINE ISTAT_^1_#1_2/DECK-ID J38 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_$PARAMETERS_^1C_%IN-IFILE UNIT TO TAKE STATUS ON_^1C_%OUT-NON ZERO IF FILE MARK UP_^1C_$STATUS TAKEN ON MAG TAPE DEVICES ONLY_^1_$COMMON IRDFLG,IMODE,IU€€NIT,IOBUF(97),IOCTR_^1_$COMMON ISODEV,IMCX,IMASC(96),ITMASC(4),IERR_^1_$COMMON IMVA,IMVB,IMVC,IMVD,ISCR,ISECT,IPB,IPM,IFATAL_^1_$COMMON ICPMC,IBUNIT,IMUNIT,INUNIT,IFILE,IDCTR_^1_$COMMON IBTM,IBF(1500),IMF(1500),IFX,IPASS_^1C_$MONITOR STATUS REQUEST_^1_$ASSEM $C400,+IFILE,$6803_^1_$ASSEM $54F4,$4600,$0,$0_^1_$ASSEM $6800,JSTAT_^1C_$SAVE STATUS_^1_$ASSEM $4800,JPTAB_^1C_$SAVE TYPE OF€  UNIT_^1_$IFILE=0_^1_$IMTD=AND(JPTAB,$3800)_^1C_#CHECK IF MAG TAPE_^1_$IF(IMTD.NE.$0800.AND.IMTD.NE.$1800) GO TO 10_^1_$IMTD=AND(JSTAT,$0800)_^1 20_!IF(IMTD.NE.0) IFILE=1_^1_$RETURN_^1 10_!IF(IMTD.NE.$2000) RETURN_^1_$IMTD=AND(JSTAT,$0200)_^1_$GO TO 20_^1_$END_]_^__ PSCIO CSY/ FTN J39 P€1_$SUBROUTINE SCIO_^1_#1_2/DECK-ID J39 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_$COMMON IRDFLG,IMODE,IUNIT,IOBUF(97),IOCTR_^1_$COMMON ISODEV,IMCX,IMASC(96),ITMASC(4),IERR_^1_$COMMON IMVA,IMVB,IMVC,IMVD,ISCR,ISECT,IPB,IPM,IFATAL_^1_$COMMON I€΄CPMC,IBUNIT,IMUNIT,INUNIT,IFILE,IDCTR_^1_$COMMON IBTM,IBF(1500),IMF(1500),IFX,IPASS_^1C_$COMPUTE SECTOR TO WRITE_^1_$ISECT=ISCR_^1_$CALL DISKW(ISECT,IOBUF)_^1_$RETURN_^1_$END_]_^__΄PSCRD CSY/ FTN J40 P€1_$SUBROUTINE SCRD_^1_#1_2/DECK-ID J40 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_$COMMON IRDFLG,IMODE,IUNIT,IOBUF(97),IOCTR_^1_$COMMON ISODEV,IMCX,IMASC(96),ITMASC(4),IERR_^1_$COMMON IMVA,IMVB,IMVC,IMVD,ISCR,ISECT,IPB,IPM,IFATAL_^1_$COMMON I€΄CPMC,IBUNIT,IMUNIT,INUNIT,IFILE,IDCTR_^1_$COMMON IBTM,IBF(1500),IMF(1500),IFX,IPASS_^1C_$COMPUTE SECTOR TO READ_^1_$ISECT=ISCR_^1_$CALL DISKR(ISECT,IOBUF)_^1_$RETURN_^1_$END_]_^__΄PICAT CSY/ FTN J41 P€1_$SUBROUTINE ICAT_^1_#1_2/DECK-ID J41 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_'** **_!**_^1_$COMMON IRDFLG,IMODE,IUNIT,IOBUF(97),IOCTR_^1_$COMMON ISODEV,IMCX,IMASC(96),ITMASC(4),IERR_^1_$COMMON IMVA,IMVB,IMVC,IMVD,ISCR,ISECT,IPB,IPM,IFA€€TAL_^1_$COMMON ICPMC,IBUNIT,IMUNIT,INUNIT,IFILE,IDCTR_^1_$COMMON IBTM,IBF(1500),IMF(1500),IFX,IPASS_^1_$DIMENSION IBN(5),IRB(5),IUD(5),IAS(5)_^1_$DATA IBN(1),IBN(2),IBN(3),IBN(4),IBN(5)/_^1_#*$2042,$494E,$2043,$4F4E,$2020/_^1_$DATA IRB(1),IRB(2),IRB(3),IRB(4),IRB(5)/_^1_#*$2052,$454C,$4F20,$4249,$4E20/_^1_$DATA IUD(1),IUD(2),IUD(3),IUD(4),IUD(5)/_^1_#*$2055,$4420,$4249,$4E41,$5259/€€_^1_$DATA IAS(1),IAS(2),IAS(3),IAS(4),IAS(5)/_^1_#*$2041,$5343,$4949,$2020,$2020/_^1_$IOBUF(1)=$3120_^1_$IOCTR=1_^1_$ISODEV=$08FB_^1_$CALL ASCOUT_^1_$IA=0_]_^1C_$HOLDER FOR MODE CHANGE_^1_$IFILE=0_^1_$IDCTR=1_^1_$IUNIT=IMUNIT_^1C_$DO READ IN BIN MODE IREAD WILL CHANGE THE MODE AS NECESSARY_^1_$IMODE=0_^1_$IPRINT=0_^1 61_!ICMOD=IMODE_^1_$CALL IREAD_^1 60_!IF(ICMOD.NE.IMODE) GO TO 20€€_^1C_$TAKE STATUS FOR FILE MARK_^1 50_!IFILE=IUNIT_^1_$CALL ISTAT_^1_$IF(IFILE.EQ.0) GO TO 21_^1_$RETURN_^1C_]_^1C_$ASTERISK BINARY CONTROL STATEMENT_^1C_]_^1 21_!IF(AND(IOBUF(1),$7F00)-$2A00) 22,23,22_^1 23_!IPRINT=0_^1_$DO 24 I=59,1,-1_^1 24_!IOBUF(I+9)=IOBUF(I)_^1_$DO 25 I=1,5_^1 25_!IOBUF(I+4)=IBN(I)_^1 31_!CALL BTOA_^1_$IOCTR=IOCTR+9_^1_$ISODEV=$08FB_^1_$CALL ASCOUT_^1_$IDCTR=€€IDCTR+1_^1C_$HAS MODE BEEN CHANGED_^1_$IF(ICMOD.NE.IMODE) GO TO 20_^1_$GO TO 61_^1C_]_^1C_$RELOCATABLE BINARY DATA AREA_^1C_]_^1 22_!IF(IOBUF(1).NE.$2050) GO TO 40_^1_$DO 26 I=7,5,-1_^1 26_!IOBUF(I+7)=IOBUF(I)_^1_$DO 27 I=1,5_^1 27_!IOBUF(I+4)=IRB(I)_^1_$CALL BTOA_^1_$IOBUF(10)=$2020_^1_$IOBUF(11)=$2020_^1_$IOCTR=14_^1_$ISODEV=$08FB_^1_$CALL ASCOUT_^1_$IDCTR=IDCTR+1_^1 32_!CALL IRE€€AD_^1_$IF(IOBUF(1).NE.$C050) GO TO 32_^1_$IPRINT=0_^1_$GO TO 61_^1C_]_^1C_$UNDEFINED BINARY BLOCK AREA_^1C_]_^1 40_!IF(IPRINT.NE.0) GO TO 61_^1_$IPRINT=1_^1_$DO 33 I=1,5_^1 33_!IOBUF(I+4)=IUD(I)_^1_$CALL BTOA_^1_$IOCTR=9_^1_$ISODEV=$08FB_^1_$CALL ASCOUT_^1_$IDCTR=IDCTR+1_^1_$GO TO 61_^1C_]_^1C_$ASCII RECORD AREA_^1C_]_^1 20_!IPRINT=0_^1_$IFILE=IUNIT_^1_$CALL ISTAT_^1_$IF(IFILE.EQ.0€€) GO TO 41_^1_$RETURN_^1 41_!ICMOD=IMODE_^1_$DO 43 I=IOCTR,1,-1_^1 43_!IOBUF(I+10)=IOBUF(I)_^1_$DO 42 I=1,5_^1 42_!IOBUF(I+4)=IAS(I)_^1_$IOBUF(10)=$2020_^1_$CALL BTOA_^1C**********************************************************************7_^1_%IOCTR=IOCTR+10_^1C**********************************************************************7_^1_$ISODEV=$08FB_^1_$CALL ASCOUT_^1_$IDCTR=IDCTR€¦+1_^1_$CALL IREAD_^1_$IFILE=IUNIT_^1_$CALL ISTAT_^1_$IF( IFILE.EQ.0) GO TO 44_^1_$RETURN_^1 44_!IF(ICMOD.EQ.IMODE) GO TO 41_^1_$ICMOD=IMODE_^1_$GO TO 60_^1_$END_]_^__¦PBUFIN CSY/ FTN J42 P€1_$SUBROUTINE BUFIN_^1_#1_2/DECK-ID J42 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_'** **_!**_^1_$COMMON IRDFLG,IMODE,IUNIT,IOBUF(97),IOCTR_^1_$COMMON ISODEV,IMCX,IMASC(96),ITMASC(4),IERR_^1_$COMMON IMVA,IMVB,IMVC,IMVD,ISCR,ISECT,IPB,IPM,IF€€ATAL_^1_$COMMON ICPMC,IBUNIT,IMUNIT,INUNIT,IFILE,IDCTR_^1_$COMMON IBTM,IBF(1500),IMF(1500),IFX,IPASS_^1C_$ROUTINE TO STORE B OR M UNIT ON MASS STORAGE_^1C_$IDCTR IS INPUT PARAMETER_^1C_%IDCTR=0 B UNIT TO BE STORED_^1C_%IDCTR=+ OR - M UNIT TO BE STORED_^1C_]_^1C_]_^1C_$VARIABLES--_^1C_%ISCR SCRATCH SECTOR INDICATOR_^1C_$IBX B UNIT MASS STORAGE INDEX_^1C_$IMX M UNIT MASS STORAGE IN€€DEX_^1C_]_^1C_]_^1_$IMODE=0_^1_$IF(IDCTR)10,11,10_^1 10_!IUNIT=IMUNIT_^1_$IMX=0_^1_$GO TO 12_^1 11_!IUNIT=IBUNIT_^1_$IBX=0_^1 500 CONTINUE_^1 12_!CALL IREAD_^1_$IFILE=IUNIT_^1_$CALL ISTAT_^1_$IF(IFILE)13,13,20_^1C_$GO TO 20 TO WRITE LAST ENTRY IN INDEX TABLE AND EXIT_^1 13_!ISAVE=IOBUF(96)_^1_$IOBUF(96)=IOCTR_^1C_$SET LENGTH OF RECORD IN LAST WORD_^1_$L=AND(IOBUF(1),$7F00)_^1_$IF(€€IMODE.EQ.$1000.OR.L.EQ.$2A00) GO TO 100_^1_$IF(IOBUF(1).EQ.$2050) GO TO 200_^1_$GO TO 300_^1C_]_^1C_$* BINARY CONTROL AND ASCII RECORD PROCESSOR_^1C_]_^1 100 IF(IMODE.NE.$1000) GO TO 110_^1_$IOBUF(96)=-IOBUF(96)_^1C_$COMPLEMENT LENGTH IF ASCII RECORD_^1 110 ISCR=ISCR+1_^1_$CALL SCIO_^1_$ASSIGN 114 TO IRTURN_^1_$GO TO 240_^1 114 GO TO 500_^1C_]_^1C_$PARTII RBD PROCESSOR_^1C_]_^1 €€200 ISCR=ISCR+1_^1_$ASSIGN 201 TO IRTURN_^1_$GO TO 240_^1 201 CALL SCIO_^1 220 CALL IREAD_^1_$IFILE=IUNIT_^1_$CALL ISTAT_^1_$IF(IFILE.NE.0) GO TO 20_^1_$IOBUF(96)=IOCTR_^1_$IF(IOBUF(1).EQ.$C050) GO TO 230_^1_$ISCR=ISCR+1_^1_$CALL SCIO_^1_$GO TO 220_^1 230 ISCR=ISCR+1_^1_$CALL SCIO_^1_$GO TO 500_^1 240 IF(IDCTR.NE.0) GO TO 241_^1_$IBX=IBX+1_^1_$IF(IBX.LE.1500) GO TO 401_^1_$ASS€€EM $54F4,$4A00_^1401_!CONTINUE_^1_$IBF(IBX)=ISCR_^1_$GO TO IRTURN_^1 241 IMX=IMX+1_^1_$IF(IMX.LE.1500) GO TO 402_^1_$ASSEM $54F4,$4A00_^1402_!CONTINUE_^1_$IMF(IMX)=ISCR_^1_$GO TO IRTURN_^1C_]_^1C_$PART III ABSOLUTIZED 96 OR LESS BLOCKS_^1C_]_^1 300 ISCR=ISCR+1_^1_$ASSIGN 301 TO IRTURN_^1_$GO TO 240_^1 301 CALL SCIO_^1_$IF(IOCTR.NE.96) GO TO 310_^1_$DO 302 I=2,96_^1 302 IOBUF(I)€€=0_^1_$IOBUF(1)=ISAVE_^1_$ISCR=ISCR+1_^1_$CALL SCIO_^1 310 CALL IREAD_^1_$ISAVE=IOBUF(96)_^1_$IOBUF(96)=IOCTR_^1_$IFILE=IUNIT_^1_$CALL ISTAT_^1_$IF(IFILE.NE.0) GO TO 20_^1C_$FINISH UP IF END OF READ IN_^1_$L=AND(IOBUF(1),$7F00)_^1_$IF(L.EQ.$2A00.OR.L.EQ.$2050.OR.IMODE.EQ.$1000) GO TO 13_^1_$ISCR=ISCR+1_^1_$GO TO 301_^1C_]_^1C_$SUM UP AREA FORCE OUT LAST IBF OR IMF ENTRY TO COMPUTE€v LENGTH_^1C_$OF LAST ENTRY_^1C_]_^1 20_!ISCR=ISCR+1_^1_$ASSIGN 21 TO IRTURN_^1_$GO TO 240_^1 21_!RETURN_^1_$END_]_^__vPMOVE CSY/ FTN J43 P€1_$SUBROUTINE MOVE_^1_#1_2/DECK-ID J43 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_$COMMON IRDFLG,IMODE,IUNIT,IOBUF(97),IOCTR_^1_$COMMON ISODEV,IMCX,IMASC(96),ITMASC(4),IERR_^1_$COMMON IMVA,IMVB,IMVC,IMVD,ISCR,ISECT,IPB,IPM,IFATAL_^1_$COMMON I€€CPMC,IBUNIT,IMUNIT,INUNIT,IFILE,IDCTR_^1_$COMMON IBTM,IBF(1500),IMF(1500),IFX,IPASS_^1C_$PARAMETERS_^1C_$IMVA-MOVE FROM TO PRAM_^1C_$IMVB-MOVE TO PARAM_^1C_$IMVC-NUMBER OF UNITS TO MOVE_^1C_$IMVD-POSITION NUMBER IF ON DISK_^1C_]_^1_$DIMENSION ITIOB(96)_^1_$J=IMVD_^1_$IF(J.LE.1500) GO TO 401_^1_$ASSEM $54F4,$4A00_^1401_!CONTINUE_^1_$K=IMVC_^1 10_!IF(IMVD.NE.0) GO TO 200_^1 14_!IF(K)€€ 11,11,12_^1 11_!RETURN_^1 12_!IUNIT=IMVA_^1_$IF(IMVD.NE.0) GO TO 15_^1_$CALL IREAD_^1_$GO TO 16_^1 15_!ASSIGN 16 TO IRET_^1C_]_^1C_]_^1 20_!CALL SCRD_^1_$IF(IOBUF(96)) 70,71,71_^1 70_!IMODE=$1000_^1_$GO TO 73_^1 71_!IMODE=0_^1 73_!CONTINUE_^1_$IOCTR=IOBUF(96)_^1_$IF(IOCTR.NE.96) GO TO 19_^1_$DO 13 I=1,95_^1 13_!ITIOB(I)=IOBUF(I)_^1_$ISCR=ISCR+1_^1_$CALL SCRD_^1_$IOBUF(96)=IOBUF(1)€€_^1_$DO 18 I=1,95_^1 18_!IOBUF(I)=ITIOB(I)_^1_$IOCTR=96_^1 19_!GO TO IRET_^1C_]_^1 16_!IF(IOCTR)40,30,30_^1C_]_^1C_$ASCII AND BINARY CONTROL STMT AREA_^1C_]_^1 40_!IOCTR=-IOCTR_^1 41_!IF(IMVB.EQ.0) GO TO 45_^1_$IUNIT=IMVB_^1_$CALL IWRITE_^1 45_!K=K-1_^1_$IF(IMVD.NE.0) GO TO 49_^1_$GO TO 10_^1 49_!J=J+1_^1_$GO TO 10_^1C_]_^1C_]_^1 30_!L=AND(IOBUF(1),$7F00)_^1_$IF(IMODE.EQ.$1000) GO €€TO 41_^1_$IF(L.EQ.$2A00) GO TO 41_^1_$IF( IOBUF(1).NE.$2050) GO TO 50_^1C_]_^1C_$RBD BLOCK PROCESSING AREA_^1C_]_^1_$IF(IMVB.EQ.0) GO TO 35_^1_$IUNIT=IMVB_^1_$CALL IWRITE_^1 35_!IUNIT=IMVA_^1_$IF(IMVD.EQ.0) GO TO 36_^1_$ISCR=ISCR+1_^1_$ASSIGN 37 TO IRET_^1_$GO TO 20_^1 36_!CALL IREAD_^1 37_!IF(IMVB.EQ.0) GO TO 38_^1_$IUNIT=IMVB_^1_$CALL IWRITE_^1 38_!IF(IOBUF(1).NE.$C050) GO TO 35_€€^1_$GO TO 45_^1C_]_^1C_$UNDEFINED BINARY BLOCK AREA_^1C_]_^1 50_!IF(IMVB.EQ.0) GO TO 56_^1_$IUNIT=IMVB_^1_$CALL IWRITE_^1 56_!IF(IMVD.EQ.0) GO TO 55_^1_$ISCR=ISCR+1_^1_$ASSIGN 51 TO IRET_^1_$GO TO 20_^1 55_!IUNIT=IMVA_^1_$CALL IREAD_^1_$IFILE=IUNIT_^1_$CALL ISTAT_^1_$IF(IFILE.EQ.0) GO TO 51_^1_$K=K-1_^1_$IF(K.EQ.0) RETURN_^1_$IERR=8_^1_$CALL IERROR_^1 51_!L=AND(IOBUF(1),$7F00)_^1_$€DIF(IOCTR_".LT.0.OR.L.EQ.$2A00.OR.IOBUF(1).EQ.$2050) GO TO 52_^1_$IF(IMVB.EQ.0) GO TO 56_^1_$IUNIT=IMVB_^1_$CALL IWRITE_^1_$GO TO 56_^1 52_!IRDFLG=1_^1_$GO TO 45_^1C_]_^1C_$DISK ADDRESS COMPUTATION AREA_^1C_]_^1 200 IF(IMVA.NE.0) GO TO 201_^1_$ISCR=IBF(J)_^1_$GO TO 14_^1 201 ISCR=IMF(J)_^1_$GO TO 14_^1_$END_]_^1 MON_]_^__DPSILP CSY/ B25 P€1_%NAM SILP_)DECK-ID B25 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_8THIS PROGRAM IS USED TO BRING IN_"**MSOS 4.0_^1*_8THE SYSTEM INITIALIZER._,**MSOS 4.0_^1*_\**MSOS 4.0_^1*_8SINCE THE SYSTEM INITIALIZER ONLY_!**MSOS 4.0_^1*_8RU€€NS IN THE LOWER 32K THIS PROGRAM **MSOS 4.0_^1*_8MUST BRING IN THE SYSTEM INIALIALIZER*MSOS 4.0_^1*_8AND CHECK TO SEE WHAT THE START OF **MSOS 4.0_^1*_8UNPROTECTED IS._4**MSOS 4.0_^1*_\**MSOS 4.0_^1*_*SILP READS THE INITIALIZER FILE INTO UNPROTECTED_!68*1537_^1*_*CORE, MOVES THE FILE TO HIGHEST LOCATION_*68*1537_^1*_*AVAILABLE IN BANK 0, INHIBITS INTERRUPTS,_)68*1537_^1*_*AND EXE€€CUTES THE INITIALIZER._568*1537_^1*_]68*1537_^1*_*MESSAGES FROM SILP SPECIFY WHAT THE STARTING_%68*1537_^1*_*ADDRESS OF SI WILL BE, AND INSTRUCT THE OPERATOR_!68*1537_^1*_*TO TURN OFF PROTEC SWITCH._868*1537_^1_%SPC 1_^1_%ENT SILP_^1_%SPC 2_Q68*1537_^1**_#'LENGTH' MUST BE EQU TO NO LESS THAN INITIALIZER LENGTH 68*1537_^1_%SPC 2_Q68*1537_^1**************************_D68*1537_^1L€€ENGTH EQU LENGTH($2300)_E68*1537_^1**************************_D68*1537_^1_%SPC 2_Q68*1537_^1SILP_!JMP* S1_+PRINT OUT FWA MESSAGE_/68*1537_^1GETFIL GTFILE G1,NAME-GETFIL-1,FWA,,,,0,1,1_368*1537_^1_%NUM 0,0_O68*1537_^1_%JMP- ($EA)_M68*1537_^1G1_#RTJ- ($F4)_M68*1537_^1_%NUM $4C00_(FWRITE_>68*1537_^1_%ADC COMP_N68*1537_^1_%NUM 0_Q68*1537_^1_%NUM $18FC_M68*1537_^1LENMES ADC MESE€€ND-MESS2_F68*1537_^1_%ADC MESS2_M68*1537_^1_%JMP- ($EA)_M68*1537_^1MESS2 ALF *,TURN OFF PROTEC SWITCH AND TYPE CARRIAGE RETURN* 68*1537_^1MESEND EQU MESEND(*)_I68*1537_^1COMP_!RTJ- ($F4)_M68*1537_^1_%NUM $4800_(FREAD_?68*1537_^1_%ADC COMP1_M68*1537_^1_%NUM 0,$18FD_K68*1537_^1_%NUM 1_Q68*1537_^1_%ADC MESS2_M68*1537_^1_%JMP- ($EA)_M68*1537_^1COMP1 IIN 0_,INHIBIT INTERRUPTS€€_268*1537_^1_%LDA* WORDB1_'GET FIRST WORD ADDRESS OF SI_(68*1537_^1_%ADD =XLENGTH_J68*1537_^1_%CLR Q_Q68*1537_^1_%SAP BANK0_(SKIP IF FILE IS ALL IN BANK 0_'68*1537_^1*_]68*1537_^1*_*PART OR ALL IN BANK 1 - START MOVE FROM FWA_'68*1537_^1*_]68*1537_^1BANK1 LDA- $11_*7FFF_@68*1537_^1_%SUB =XLENGTH_$FORM NEW FWA_868*1537_^1_%STA- I_,NEW FWA IN 'I'_668*1537_^1MOVEDN LDA* (WORDB1)_€€$MOVE FROM BANK 1 TO BANK 0_*68*1537_^1_%STA- ($22),B_%START MOVE FROM FIRST WORD OF SI_#68*1537_^1_%LDA =XLENGTH_J68*1537_^1_%EAQ A_Q68*1537_^1_%SAZ DONEDN_L68*1537_^1_%INQ 1_,INCREMENT 'Q' AND_368*1537_^1_%RAO WORDB1_'CURRENT WORD ADDRESS_068*1537_^1_%JMP* MOVEDN_L68*1537_^1DONEDN JMP- ($22),I_%EXECUTE SI AT NEW FWA_/68*1537_^1*_]68*1537_^1*_*ALL IN BANK 0 - START MOVE FROM €€LWA_/68*1537_^1*_]68*1537_^1BANK0 LDA- $F5_*TOP OF CORE_968*1537_^1_%SAP 1_,SKIP IF 32K OR LESS_168*1537_^1_%LDA- $11_*7FFF_@68*1537_^1_%STA- I_,NEW LWA IN 'I'_668*1537_^1MOVEUP LDA* (WORDB0)_$MOVE FROM BANK 0 TO TOP OF BANK 0_"68*1537_^1_%STA- ($22),B_%START MOVE FROM LAST WORD OF SI_$68*1537_^1_%LDA =XLENGTH_J68*1537_^1_%AAQ A_Q68*1537_^1_%SAZ DONEUP_L68*1537_^1_%INQ -1_+DE€€CREMENT 'Q' AND_368*1537_^1_%LDA* WORDB0_'CURRENT WORD ADDRESS_068*1537_^1_%INA -1_P68*1537_^1_%STA* WORDB0_L68*1537_^1_%JMP* MOVEUP_L68*1537_^1DONEUP JMP- ($22),B_K68*1537_^1*_]68*1537_^1WORDB0 ADC FWA+LENGTH_"LAST WORD ADDRESS OF SI FILE_(68*1537_^1WORDB1 ADC FWA_*FIRST WORD ADDRESS OF SI FILE_'68*1537_^1FWA_"EQU FWA(*)_L68*1537_^1NAME_!ALF 3,SI_)FILE INITIALLY LOADED HERE_*€€68*1537_^1S1_#LDA- $F5_*TOP OF CORE_968*1537_^1_%SAP S2_P68*1537_^1_%LDA- $11_O68*1537_^1S2_#SUB =XLENGTH_J68*1537_^1_%CLR Q_,STARTING ADDRESS IN 'A'_-68*1537_^1_%STQ- I_Q68*1537_^1M1_#LLS 4_,CONVERT START ADDRESS_/68*1537_^1_%INQ -10_*TO ASCII CODE_768*1537_^1_%SQM M2_+AND STUFF INTO MESSAGE_.68*1537_^1_%INQ 7_Q68*1537_^1M2_#INQ $3A_O68*1537_^1_%STQ* M4,I_N68*1537_^1_%RAO-€€ I_Q68*1537_^1_%LDQ- I_Q68*1537_^1_%INQ -4_P68*1537_^1_%SQZ M3_P68*1537_^1_%CLR Q_Q68*1537_^1_%JMP* M1_P68*1537_^1M3_#LDA* M4_P68*1537_^1_%ALS 8_Q68*1537_^1_%ADD* M4+1_N68*1537_^1_%STA* ADR_O68*1537_^1_%LDA* M4+2_N68*1537_^1_%ALS 8_Q68*1537_^1_%ADD* M4+3_N68*1537_^1_%STA* ADR+1_M68*1537_^1_%RTJ- ($F4)_(PRINT ADDRESS MESSAGE_/68*1537_^1_%NUM $4C00_(FWRITE_>68*1537_^1_%ADC GET€€FIL_'COMP, GET SI FILE_368*1537_^1_%NUM 0_Q68*1537_^1_%NUM $18FC_M68*1537_^1MESLEN ADC ENDMES-MESS1_F68*1537_^1_%ADC MESS1_M68*1537_^1_%JMP- ($EA)_M68*1537_^1M4_#BZS M4(4)_M68*1537_^1MESS1 ALF *,THE INITIALIZER WILL BE MOVED TO LOCATION *_$68*1537_^1ADR_"ALF 2,_P68*1537_^1_%ALF *, AND EXECUTED*_B68*1537_^1_%NUM $0A0D_M68*1537_^1ENDMES EQU ENDMES(*)_I68*1537_^1_%END_#SILP€$_J**MSOS 4.0_^__I FILE_368*1537_^1_%$PCONTRL CSY/ B26 P€1_%NAM CONTRL_'DECK-ID B26 MSOS 4.1_-SUMMARY-079_^1*_$CONTROL STATEMENT PROCESSOR FOR SYSTEM INITIALIZER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%SPC 8_^1*_$E N T R Y_"P O I N T_"T A B L E_^1_%SPC 3_^1_%ENT RSTART_'STARTING ADDRESS OF SYSTEM INI€€TIALIZER_^1_%ENT TCODE_(FLAG FOR SYSTEM DIRECTORY CORE OR MASS LOAD_^1_%ENT IN_+INPUT LOGICAL UNIT_^1_%ENT OU_+MASS STORAGE LOGICAL UNIT_^1_%ENT CO_+COMMENT DEVICE LOGICAL UNIT_^1_%ENT COMMA_(ENTRY TO TEST FOR COMMA AS FIELD DEVIMETER_^1_%ENT VALID_(ENTRY TO TEST FOR A VALID FIELD DELIMETER_^1_%ENT CM45_)ENTRY TO READ IN NEXT CONTROL STATEMENT_^1_%ENT CM65_)ROUTINE TO PROCE€€SS NEXT CONTROL STATEMENT_^1_%ENT BACKGR_'ROUTINE TO BACKROUND INPUT BUFFER TO ALL ONES_^1_%ENT LSSECT_'NEXT AVAILABLE MASS STORAGE SECTOR_^1_%ENT TYPEQ_(ROUTINE TO GET NEXT CONTROL STATEMENT_^1*_8FROM COMMENT DEVICE_^1_%ENT QTYPE_(ROUTINE TO LOG ERRORS ON TTY_^1_%ENT ERFLAG_'FLAG INDICATING IF ANY LOADER ERRORS OCCURED_^1_%EJT 1_^1*_$E X T E R N A L_"T A B L E_^1_%SPC 5_^1_€€%EXT* I1_+ROUTINE TO BUILD SYSTEM DIRECTORY_^1_%EXT* I2_+CONTROL MODULE FOR MASS STORAGE DRIVERS_^1_%EXT* ISAV_)STARTING ADDRESS OF LOADER TABLE_^1_%EXT* CONENT_'ROUTINE TO INITIALIZE LOADER TABLE_^1_%EXT* CONMAS_'ROUTINE TO INITIALIZE MASS STORAGE CONSTANTS_^1_%EXT* CONMS1_'ROUTINE TO BUILD PAGE FLAGS IN LDRTBL_^1_%EXT* CONMS_^1_%EXT* ILOAD_(START OF LOADER FUNCTION_^1_%EXT* TABLE€€_(TABLE OF LOGICAL UNITS IN IDRIV_^1_%EXT* IDRIV_(CONTROL MODULE FOR INPUT DEVICE DRIVERS_^1_%EXT* OETERM_'ROUTINE TO TEST FOR FIELD TERMINATORS - IN I2_^1_%EXT* MDRIV_(MASS STORAGE DRIVER ENTRY_^1_%EXT* QCOM_)COMMENT DRIVER ENTRY_^1_%EXT* TELOUT_'ENTRY FOR TELETYPE OUTPUT - NOT COMMENT OUTPUT_^1_%EXT* IDRIV_(INPUT DRIVER ENTRY_^1_%EXT* FORMFD_'TOP OF FORM FUNCTION IN LPRINT_^1_%EX€€T* SIB_*STANDARD BINARY INPUT LOGICAL UNIT - IN IDRIV_^1_%EXT* MASS_)MASS STORAGE DEVICE LOGICAL UNIT - IN IDRIV_^1_%EXT* COLU_)COMMENT DEVICE LOGICAL UNIT - IN IDRIV_^1_%EXT* EPTAPE_'EQUIPMENT CODE FOR PAPER TAPE_#**MSOS 4.1**_^1_%EXT* ECARD_(EQUIPMENT CODE FOR CARD READER_"**MSOS 4.1**_^1_%EXT* EMTAPE_'EQUIPMENT CODE FOR MAG TAPE_%**MSOS 4.1**_^1_%EXT* EDISK_(EQUIPMENT CODE FOR D€€ISK_***MSOS 4.1**_^1_%EXT* EDRUM_(EQUIPMENT CODE FOR DRUM_***MSOS 4.1**_^1_%EXT* ECOM_)EQUIPMENT CODE FOR COMMENT_'**MSOS 4.1**_^1_%EXT* EPRINT_'EQUIPMENT CODE FOR PRINTER_'**MSOS 4.1**_^1_%EXT* ENTSTR_'ROUTINE TO STORE NEW ENTRY POINTS IN ILOAD_^1_%EXT* WRTOUT_'ROUTINE TO WRITE OUT ALL PAGES THAT HAVE_^1*_8BEEN MODIFIED_^1_%EXT* HEADR1_(DATE BUFFER IN LPRINT_^1_%EXT* FNDSEC_'ROUTI€€NE TO CONVERT PAGE NUMBER TO SECTOR_^1_%EXT* LENSDT_'NUMBER OF CORE RESIDENT PAGES_'66*1455_^1_%EXT* PART1L_'MODIFIED LENGTH OF PART1_^1_%EXT* PART1A_'MODIFIED ADDRESS OF PART1_^1_%EXT* PART1C_'STARTING SECTOR OF PART1 IMAGE_^1_%EXT* QDISK_(DISK DRIVER ENTRY_^1_%EJT 1_^1*_$LOADER TABLE ENTRIES_^1_%EQU PGENUM(1)_#CELL FOR PAGE NUMBER IN FLAG TABLE ENTRY_^1_%EQU REFER(2)_$NUMBER O€€F TIMES A PAGE HAS BEEN MODIFIED_^1_%EQU MODIFY(3)_#FLAG SAYING THAT THIS PAGE HAS BEEN MODIFIED_^1_%SPC 3_^1_%EQU COMBAS(1)_#RELOCATION BASE FOR COMMON STORAGE_^1_%EQU DATBAS(2)_#RELOCATION BASE FOR DATA STORAGE_^1_%EQU PROBAS(3)_#RELOCATION BASE FOR PROGRAM BEING LOADED_^1_%EQU COMLIM(4)_#HIGHEST ADDRESS OF COMMON STORAGE +1_^1_%EQU DATLIM(5)_#HIGHEST ADDRESS OF DATA STORA€€GE +1_^1_%EQU CSQLIM(6)_#HIGHEST ADDRESS OF COMMAND SEQUENCE STORAGE +1_^1_%EQU EXTCTR(7)_#NEXT AVAILABLE LOCATION IN EXTERNAL TABLE_^1_%EQU ENDSW(8)_$=1 IF LAST BYTE IN RBD OR BZS BLOCK_^1_%EQU ABRLSW(9)_#0 IF ABSOLUTE EXTERNAL, 1 IF RELATIVE EXTERNAL_^1_%EQU INPWRD(10)_"END OF COMMAND SEQUENCE STORAGE_^1_%EQU INPREL(11)_"CONTAINS RELATIVE FLAG FOR WORD OF COMMAND_^1*_8SEQUE€€NCE IN RBD OR BZS BLOCK_^1_%EQU CSQNUM(12)_"NUMBER OF SECTORS RESERVED BEFORE START_^1*_8OF COMMAND SEQUENCE STORAGE_^1_%EQU ENTPNT(13)_"CONTAINS THE ADDRESS ASSOCIATED WITH THE_^1*_8NAME IN A ENTRY OR EXTERNAL BLOCK_^1_%EQU LINK(14)_$CONTAINS ADDRESS ASSOCIATED WITH NAME_^1*_8IN LOADER TABLE_^1_%EQU INPCTR(15)_"USED TO ADDRESS CORE LOCATION OF COMMAND_^1*_8SEQUENCE STORAGE AT €€LOAD TIME_^1*_8USED TO HOLD ADDRESS OF ENTRY FOR TABLE_^1*_8SEARCH AND TABLE STORE ROUTINES_^1_%EQU NOTLNK(16)_"FLAG =1 IF UNPATCHED EXTERNALS EXIST_^1_%EQU ENDINP(17)_"LAST STORAGE ADDRESS +1 AT END OF_^1*_8RELOCATABLE BINARY LOAD_^1_%EQU BLANKS(18)_"ASCII CODE FOR TWO SPACES_^1_%EQU SYMSTR(19)_"SET TO THE ASCII CODE FOR THE CHARACTERS IN_^1*_$EQU SYMSTR+1(20) THE FIELD BEIN€€G PROCESSED BY SCAN. IF FIELD_^1*_$EQU SYMSTR+2(21) IS NUMERIC SYMSTR=0._^1_%EQU SCANSW(22)_"IF BIT ZERO =0 AND FIELD BEING PROCESSED IS_^1*_8NUMERIC, THE NUMBER WILL BE PROCESSED AS_^1*_8DECIMAL UNLESS PRECEEDED BY $_^1*_8IF BIT ZERO =1 AND FIELD BEING PROCESSED IS_^1*_8NUMERIC, THE NUMBER WILL BE PROCESSED AS_^1*_8HEXIDECIMAL REGARDLESS OF OCCURENCE OF $_^1_%EQU BASE(23)_$BAS€€E OF SYSTEM INITIALIZER_^1_%EQU WRDCNT(24)_"CHARACTER REFERENCE COUNTER - SET TO STORAGE_^1*_8ADDRESS OF THE FIRST CHARACTER OF A FIELD_^1*_8TO BE PROCESSED. BIT ZERO IS R/L INDICATER_^1*_80 = FIRST CHARACTER IN LEFT HALF OF WORD_^1*_81 = FIRST CHARACTER IN RIGHT HALF OF WORD_^1_%EQU COUNT1(25)_"CHARACTER COUNTER- SET TO COMPLEMENT OF_^1*_8MAXIMUM NUMBER OF CHARACTERS A FIELD MAY€€ HAVE_^1_%EQU BZSSW(26)_#USED BY SUBROUTINES COMMON TO RBDPRO AND_^1*_8BZSPRO TO DETERMINE BLOCK TYPE._^1*_80= RBD BLOCK_"-1= BZS BLOCK_^1_%EQU COUNT2(27)_"COUNTER USED BY SCAN_^1_%EQU BLKCNT(27)_"BLOCK COUNTER CONTAINS WORD COUNT FOR_^1*_8NUMBER OF SEQUENTIAL LOCATIONS TO BE SET_^1*_8TO ZERO IN A BZS BLOCK ENTRY_^1_%EQU SW6(28)_%FLAGWORD FOR LOADER TABLE SEARCH ROUTINE_^1*_8=0€€ MATCH HAS BEEN FOUND IN TABLE_^1*_8=- (NEGATIVE) MATCHING NAME NOT FOUND_^1_%EQU ASAV(29)_$TEMPORY STORAGE FOR A-REQISTER_^1_%EQU QSAV(30)_$TEMPORY STORAGE FOR Q-REQISTER_^1*_$EQU ISAV(31)_$TEMPORY STORAGE FOR I-REQISTER_^1_%EQU XFRNAM(32)_"STORAGE OF SIX CHARACTER TRANSFER ADDRESS_^1_%EQU NAME(35)_$ASCII CODED INFORMATION_^1_%EQU SCHXIT(39)_"EXIT FROM TABLE SEARCH ROUTINE_^€€1_%EQU TABSCH(40)_"ENTRY ADDRESS FOR RTJ TO ROUTINE FOR_^1*_8SEARCHING LOADER TABLE FOR ENTRIES OR EXTERNAL_^1_%EQU CENTAD(43)_"ADDRESS OF ENTRY BEING CURRENTLY EXAMINED_^1*_8IN ENTRY POINT TABLE_^1_%EQU MAXENT(44)_"LARGEST ADDRESS BEING USED IN ENTRY POINT TBL_^1_%EQU TEMP(45)_$TABLE OF TEMPORY LOCATIONS USED BY HASH_^1_%EQU FLGLGN(50)_"NUMBER OF CORE FLAGS PER PAGE_^1_%EQU €€BINASC(51)_"STORAGE OF ASCII CODE FOR NUMBER CONVERSION_^1_%EQU PRINT3(54)_"ENTRY TO ERROR OUTPUT ROUTINE_^1_%EQU INPXC0(57)_"CONTAINS ADDRESS CONSTANT INPUT_^1_%EQU INPADR(57)_"SAME AS INPXCO - ADDRESS OF INPUT BUFFER_^1_%EQU INPXC1(58)_"CONTAINS ADDRESS CONSTANT INPUT + 1_^1_%EQU PRINT2(59)_"ENTRY TO FATAL ERROR OUTPUT ROUTINE_^1_%EQU INPXCC(62)_"CONTAINS ADDRESS CONSTANT I€€NPUT - 3_^1_%EQU NXTINP(63)_"JMP INSTRUCTION TO READ NEXT BLOCK_^1_%EQU M7FFF(65)_#MASK OF $7FFF_^1_%EQU M8000(66)_#MASK OF $8000_^1_%EQU MFF00(68)_#MASK OF $FF00_^1_%EQU M00FF(69)_#MASK OF $00FF_^1_%EQU ASKII(70)_#ASCII MODE SWITCH FOR 405 AND MAG TAPE_^1_%EQU NEGSW(71)_#SET BY SCAN TO VALUE OF LEGAL ALGEBRAIC SIGN_^1_%EQU SCNTRM(72)_"SET BY SCAN TO ASCII CODE FOR FIELD TE€€RMINATOR_^1_%EQU SCNINP(73)_"SET BY SCAN TO THE BINARY VALUE OF A NUMERIC_^1*_8OPERAND AFTER ITS CONVERSION FROM ASCII_^1_%EQU SCNXIT(74)_"EXIT FROM SCAN ROUTINE_^1_%EQU SCAN(75)_$ENTRY TO SCAN ROUTINE_^1_%EQU CSNAME(78)_"CODE FOR CONTROL STATEMENT BEING PROCESSED_^1*_==1_%*Y STATEMENT_^1*_==2_%*YM STATEMENT_^1*_==3_%*L STATEMENT_^1*_==4_%*LP STATEMENT_^1*_==5_%*M STATEMENT_€€^1*_==6_%*MP STATEMENT_^1_%EQU XCSNAM(79)_"CODE FOR LAST CONTROL STATEMENT PROCESSED_^1_%EQU INMED(80)_#INPUT MEDIUM SWITCH_^1*_80 = USE COMMENT DEVICE_^1*_81 = USE STANDARD BINARY INPUT DEVICE_^1_%EQU ADJOVF(82)_"ENTRY CELL FOR ADDRESS ARITHMETIC SUBROUTINE_^1_%EQU EXTPCH(85)_"FLAG - NEGATIVE IF EXTERNAL NOT PATCHED_^1_%EQU NGRLSW(86)_"FLAG - 0= POSITIVE RELOCATION_^1*_?1= NE€€GATIVE ADDRESS RELOCATION_^1_%EQU ARIT15(87)_"0 = USE 15 BIT ARITHMETIC_^1*_81 = USE 16 BIT ARITHMETIC_^1_%EQU PRESET(88)_"USED TO HOLD CONTENTS OF A WORD READ INTO CORE_^1*_8BY THE PAGING ROUTINE DURING A TABLE SEARCH_^1_%EQU CONVRT(90)_"ENTRY FOR BINARY TO ASCII CONVERSION ROUTINE_^1_%EQU AINPUT(101)_!A-REGISTER CONTENTS UPON ENTRY TO LOADER_^1_%EQU SYSPGE(102)_!NUMBER OF SY€€STEM PAGES_^1_%EQU LINK1(104)_"ENTRY FOR LINK ROUTINE_^1_%EQU ENTPGS(107)_!STARTING ADDRESS OF ENTRY POINT TABLE *EXTRA*_^1_%EQU TOP(108)_$HIGHEST CORE LOCATION AVAILABLE FOR THIS LOAD_^1_%EQU PGEWRT(109)_!FLAG =1 IF ANY PAGE WRITTEN TO MASS STORAGE_^1_%EQU LGEPGE(110)_!LARGEST COMMAND SEQUENCE PAGE USED_^1_%EQU IGNORE(111)_!FLAG SAYING TO IGNORE DUPLICATE ENTRY POINTS_^1*_8W€€HEN LINKING *M OR *MP TO CREP OR CREP1_^1_%EQU LNKSTR(112)_!ADDRESS OF LINK TABLE_^1_%EQU LNKCTR(113)_!NEXT AVAILABLE LOCATION IN LINK TABLE_^1_%EQU LNKEND(114)_!LAST ADDRESS +1 IN LINK TABLE_^1_%EQU ENTST0(115)_!STARTING ADDRESS OF PART 0 ENTRY POINTS_^1_%EQU ENTST1(116)_!STARTING ADDRESS OF PART 1 ENTRY POINTS_^1_%EQU EXTSTR(118)_!WORD ADDRESS OF START OF EXTERNAL TABLE_^1_€€%EQU CORADR(119)_!LOWEST LOCATION AVAILABLE FOR USE BY LOADER_^1_%EQU PRODAT(120)_!FLAG - NON-ZERO IF PROTECTED DATA IS DECLARED_^1_%EQU PROCOM(121)_!FLAG - NON-ZERO IF PROTECTED COMMON DECLARED_^1_%EQU PAGE(122)_#LENGTH OF PAGE FOR MASS MEMORY - MUST BE_^1*_8A MULTIPLE OF 96_^1_%EQU CSQCTR(123)_!LAST ADDRESS OF PROGRAM COMMAND SEQUENCE_^1*_8STORAGE +1_^1_%EQU CEXTAD(124)_!AD€€DRESS OF EXTERNAL BEING CURRENTLY PROCESSED_^1*_8FROM EXTERNAL TABLE_^1_%EQU MINEXT(125)_!FIRST WORD ADDRESS OF SYSTEM EXTERNAL TABLE_^1_%EQU MAXEXT(126)_!LAST WORD ADDRESS OF SYSTEM EXTERNAL TABLE_^1_%EQU ENTSEC(127)_!STARTING SECTOR OF ENTRY/EXTERNAL TABLES_^1_%EQU CSQSEC(128)_!STARTING SECTOR OF COMMAND SEQUENCE IMAGE_^1_%EQU MAXPGE(129)_!MAXIMUM PAGE NUMBER THAT CAN BE USE€€D ON DISK_^1_%EQU NOPAGE(130)_!NUMBER OF PAGES IN CORE_^1_%EQU PARBAS(131)_!ADDRESS OF STARTING PARTITION_^1_%EQU PARLIM(132)_!LAST WORD ADDRESS +1 OF LAST PARTITION_^1_%EQU STRSEC(133)_!STARTING SECTOR OF IMAGE ON MASS MEMORY_^1_%EQU MSDWCT(134)_!NUMBER OF WORDS STORED ON MASS MEMORY_^1_%EQU XFRADR(135)_!TRANSFER ADDRESS OF NAME FROM XFR BLOCK_^1_%EQU AHOLD(136)_"TEMPORY_^1€€_%EQU QHOLD(137)_"TEMPORY_^1_%EQU SECTOR(138)_!NUMBER OF WORDS IN A SECTOR_^1_%EQU ECREP(139)_"END ADDRESS OF CREP TABLE_^1_%EQU ECREP1(140)_!END ADDRESS OF CREP1 TABLE_^1_%EQU EXTSWT(141)_!FLAG - NON-ZERO IF PROCESSING EXTERNAL BLOCK_^1_%EQU SAVEA(142)_"TEMPORARY_^1_%EQU JUMP(143)_#JUMP FLAG FOR I1_^1_%EQU TEMP3(144)_"TEMPORARY_^1_%EQU FLGBSE(145)_!BASE ADDRESS OF CORE FL€€AGS TABLE_^1_%EQU PROGCT(146)_!LENGTH OF PROGRAM FROM NAM CARD_^1_%EQU ONTAB(147)_"*Y ORDINAL COUNTER FOR I1_^1_%EQU MONTAB(148)_!*YM COUNTER FOR I1_^1_%EQU FLGBS1(149)_!INITIAL ADDRESS OF SYSTEM FLAG TABLE_^1_%EQU INPUT(150)_"INPUT BUFFER_^1_%EJT 1_^1*_(OPERATING SYSTEM INITIALIZER_^1*_-ERROR CODES_^1*_]_^1* 1_"ASTERISK INITIATOR MISSING_^1* 2_"NUMBER APPEARS IN NAME FIELD_^€€1* 3_"ILLEGAL CONTROL STATEMENT NAME_^1* 4_"INPUT MODE ILLEGAL_^1* 5_"STATEMENT OTHER THAN *Y OR *YM PREVIOUSLY ENTERED_^1* 7_"*Y NOT ENTERED PRIOR TO FIRST *L STATEMENT_^1* 6_"STATEMENT OTHER THAN *Y PREVIOUSLY ENTERED_^1* 8_"NAME APPEARS IN NUMBER FIELD_^1* 9_"ILLEGAL HEX CORE RELOCATION FIELD_^1* A_"ILLEGAL MASS STORAGE SECTOR NUMBER_^1* B_"NO DATA RETURN FROM LOADER_^1* C_"UNPA€€TCHED EXTERNAL AT CONCLUSION OF SYS DIR LOAD_^1* D_"UNPATCHED EXTERNAL AT CONCLUSION OF *L LOAD_^1* E_"FIELD TERMINATOR INVALID_^1* F_"MORE THAN 120 CHARACTERS IN CONTROL STATEMENT_^1*10_"ORDINAL NAME WITHOUT ORDINAL NUMBER_^1*11_"NAME APPEARED PREVIOUSLY IN LOADER TABLE_^1*12_"INVALID ORDINAL NUMBER_^1*13_"LOADER CONTROL STATEMENT OUT OF ORDER. CORRECT ORDER = L,LP,M,MP_^1*14_"DAT€€A DECLARED DURING *M LOAD BUT NOT BY FIRST_^1*_(SEGMENT. INITIALIZATION RESTARTED._^1*15_"ATTEMPT MADE TO ENTER DATA INTO LOCATION 0 OR_^1*_(ABOVE LOCATION $FE. INITIALIZATION RESTARTED._^1*16_"UNRECOVERABLE MASS STORAGE I/O ERROR_^1*17_"LOADER SLEWING ALL BLOCKS UNTIL NEXT NAM BLOCK._^1*18_"FIRST STATEMENT INPUT TO INITIALIZER DID NOT DEFINE_^1*_$THE MASS STORAGE DEVICE._^1*19€€_"UNABLE TO READ IN BAD SECTOR DIRECTORY_^1*20_"*S,END0V4,HHHH NOT DEFINED BEFORE FIRST *L CONTROL STATEMENT_^1*21_"*S,MSIZV4,HHHH NOT DEFINED BEFORE FIRST *LP CONTROL STATEMENT_^1*22_"ATTEMPT TO LOAD PART 1 CORE RESIDENT INTO UNAVAILABLE MEMORY_^1*23_"THE NAME USED IN THE SECOND FIELD OF A *M CONTROL STATEMENT_^1*_$WAS NOT PREVIOUSLY DEFINED AS AN ENTRY POINT_^1*24_"THE ENTRY PO€€INT SECTOR WAS NOT DEFINED AT THE START OF_^1*_$INITIALIZATION AND IS NOT AVAILABLE TO THE INITIALIZER_^1*25_"ILLEGAL PARTITION NUMBER IN FIRST FIELD OF *MP STATEMENT_^1*_$OR ILLEGAL NUMBER OF PARTITIONS IN SECOND FIELD OF STATEMENT_^1*26_"AN ATTEMPT WAS MADE TO LOAD *MP PROGRAMS WHEN NO PARTITIONED_^1*_$CORE TABLE EXISTS IN SYSDAT_^1*_!*********************************************€€***********************_^1_%EJT 1_^1RSTART RTJ CONENT_'INITIALIZE LOADER TABLE_^1_%ENA 1_^1_%STA LSSECT_^1_%LDA COLU_)INITIALIZE COMMENT DEVICE LOGICAL UNIT_^1_%STA CO_^1_%LDA SIB_*INITIALIZE STANDARD BINARY INPUT LOGICAL UNIT_^1_%STA IN_^1_%LDA MASS_)INITIALIZE MASS STORAGE UNIT_$**MSOS 4.1**_^1_%STA OU_M**MSOS 4.1**_^1_%LDA CONENT_'PICKUP STARTING ADDRESS OF CONTROL_^1€€_%INA -2_^1_%RTJ- CONVRT,I_$CONVERT TO ASCII_^1_%LDA- BINASC,I_$PICKUP FIRST WORD OF ADDRESS_^1_%STA* SI+23_(STORE IN OUTPUT BUFFER_+**MSOS 4.1**_^1_%LDA- BINASC+1,I_"PICKUP SECOND WORD OF ADDRESS_^1_%STA* SI+24_(STORE IN OUTPUT BUFFER_+**MSOS 4.1**_^1_%RTJ* CNTR1_(GENERATE BUFFER ADDRESS_^1SI_#ALF 14,MSOS 4.1 SYSTEM INITIALIZER_1**MSOS 4.1**_^1_%NUM $0D0A_(CARRIAGE RETURN - LIN€€E FEED_^1_%ALF *,FWA OF CONTRL = *_^1_%NUM 0,0_*RESERVED FOR ADDRESS OF CONTROL_^1_%NUM $0D0A_(CARRIAGE RETURN - LINE FEED_^1CNTR1 NOP 0_,STORAGE FOR RUN-TIME BUFFER ADDRESS_^1_%LDA* CNTR1_(PICKUP BUFFER ADDRESS_^1CNTR2 ENQ 26_+PICKUP WORD COUNT_0**MSOS 4.1**_^1_%RTJ TELOUT_'OUTPUT MESSAGE TO TELETYPE_^1CNTR3 RTJ BACKGR_'BACKROUND INPUT BUFFER TO ALL ONES_^1_%CLR A_N**MS€€OS 4.1**_^1_%RTJ I2_+INITIALIZE FOR AUTOLOAD_***MSOS 4.1**_^1_%RTJ* CNTR9_(JUMP AROUND BUFFER_^1_%NUM $0D0A_(CARRIAGE RETURN - LINE FEED_^1DATE1 ALF 7,DATE MM/DD/YY_^1CNTR9 NOP 0_,RUN TIME BUFFER ADDRESS_^1_%ENQ 8_,SETUP WORD COUNT_^1_%LDA* CNTR9_(PICKUP BUFFER ADDRESS_^1_%RTJ TELOUT_'OUTPUT MESSAGE TO TELETYPE_^1_%CLR Q_,SET FLAG FOR COMMENT INPUT_^1_%LDA- INPADR,I_$SETUP€€ POINTER TO BUFFER_^1_%RTJ QCOM_)READ IN DATE_^1_%SPC 2_^1_%ENQ 3_,MOVE DATE TO BUFFER IN LPRINT_^1CNTR10 LDA- INPUT,B_^1_%INA 0_^1_%STA HEADR1,Q_^1_%INQ -1_^1_%SQM CNTR11-*-1_"SKIP OUT IF ENTIRE DATE MOVED_^1_%JMP* CNTR10_'MOVE NEXT WORD OF DATE_^1CNTR11 RTJ CONMAS_'INITIALIZE MASS STORAGE CONSTANTS_^1_%CLR A_,ZERO THE FOLLOWING LOCATIONS_^1_%STA FORMFD_^1_%STA YORDNL_'€€CLEAR CORE RESIDENT ORDINAL COUNTER_^1_%STA I1CALL_^1_%STA ERFLAG_^1_%STA PART1C_^1_%STA PART1L_^1_%STA PART1A_^1_%STA FRSTLP_^1_%STA PARDEF_^1_%STA CRPFLG_^1_%STA YPOINT_^1_%STA END0V4_^1_%STA PARTBL_^1_%STA LSTLOC_^1_%STA MSIZV4_^1_%STA MAXSEC_^1_%STA YCNTER_^1_%STA ENTTMP_^1_%STA STRTEX_^1_%STA TEMPEX_^1_%STA ENDEXT_^1_%STA YMCNTR_^1_%STA YMORDN_^1_%STA PP_€€^1_%STA NN_^1_%STA SECVAL_^1_%STA BLDADD_^1_%STA PCOUNT_^1_%STA PAGADD_^1_%STA TMPSEC_^1_%STA LENDC_^1_%STA LPENDC_^1_%LDA =N$7FFF_^1_%STA (MSIZV4)_^1_%JMP* CM20_)GET NEXT CONTROL STATEMENT_^1CMASKT NUM $002A_(MASK FOR ASTERISK_^1_%EJT 1_^1*_!********************************************************************_^1*_#BACKGROUND BUFFER TO ALL ONES_^1*_#SETUP CALL TO COMME€€NT OR INPUT MEDIUM DRIVER_^1*_!********************************************************************_^1CM20_!RTJ BACKGR_#BACKGROUND INPUT BUFFER_^1*_]_^1CM40_!LDA- INPADR,I_!ADDRESS OF INPUT BUFFER TO A_^1_%LDQ- INMED,I_"FETCH INPUT MEDIUM SWITCH_^1_%SQZ CM44-*-1_^1_%JMP* CM50_^1CM44_!ENQ 1_)NO ERROR IF Q = 1_^1_%RTJ TYPEQ_$TYPE Q_^1CM45_!CLR Q_)Q ZERO FOR INPUT OPERATION_^1_%R€€TJ QCOM_)CALL COMMENT MEDIUM DRIVER_^1CM45A SAN CM65_K**MSOS 4.1**_^1_%JMP* CM44_%TYPE Q, INTERROGATE COMM MEDIUM_$**MSOS 4.1**_^1CM50_!ENQ 96_+SETUP WORD COUNT FOR READ_^1_%TCA A_,A-= BINARY MODE FOR CARD READER_^1_%RTJ IDRIV_$CALL INPUT MEDIUM DRIVER_^1CM60_!SAN CM65-*-1_!NO DATA RETURN IF ZERO_^1_%JMP* CM44_%TYPE Q, INTERROGATE COMM MED_^1CM65_!LDA- INPADR,I_!ADDR OF INPU€€T BUFFER_^1_%ENQ 30_(PRINT 30 WORDS_^1_%RTJ QCOM_)CALL COMMENT DRIVER_^1_%EJT 1_^1*_]_^1*_$TEST FIRST CHARACTER IN INPUT BUFFER FOR AN ASTERISK_^1*_]_^1_%LDQ- INPADR,I_$PICKUP ADDRESS OF INPUT BUFFER_"**MSOS 4.1**_^1_%LDA- CSNAME,I_!CURRENT CONT STMNT NAME CODE_^1_%STA- XCSNAM,I_#TO PREVIOUS_^1_%INQ -1_,Q = ADDR OF INPUT BUFFER - 1_^1_%LDA- 1,Q_'FETCH FIRST WORD OF INPUT BUFFER€€_^1_%ARS 8_)SHIFT OFF RIGHT HAND HALF_^1_%EOR* CMASKT_'TEST FOR AN ASTERISK_!(*)_^1_%SAZ CM80-*-1_!ZERO IMPLIES CHAR IS ASTERISK_^1_%ENA 1_)ASTERISK INITIATOR MISSING_^1_%JMP* CM195X+1_!TYPE Q AND INTERROGATE COM MED_^1CM80_!LDA- INPADR,I_!ADDRESS OF INPUT BUFFER_^1_%ALS 1_)TO BITS (15 - 1)_^1_%INA 1_)SET RIGHT HALF WORD SWITCH TO ON_^1_%STA- WRDCNT,I_!PLACE IN SCAN CONTROL WO€€RD_^1_%ENA $8_(LEADING + OR - ILLEG, NAME OR_^1_%STA- SCANSW,I_!DEC NBR OK. TO SCAN CONTROL WD_^1_%CLR A_)CLEAR A PRIOR TO CALLING SCAN_^1_%RTJ- SCAN,I_#FETCH A CONTROL STATEMENT CODE_^1_%LDA- SYMSTR,I_!ZERO IMPLIES A NUMBER_^1_%SUB- 18,I_%TWO BLANKS 2020_^1_%SAN CM90-*-1_!ZERO IMPLIES NO FIELD PRESENT_^1_%JMP* CM190_$TEST FOR *CR_^1_%EJT 1_^1*_$C O N T R O L_"S T A T E M E €€N T_"R E C O G N I Z E R_^1_%SPC 1_^1CM90_!CLR Q_,CLEAR TABLE INDEX_^1CM72_!LDA* STTYP1,Q_$PICKUP TABLE ENTRY_^1_%SAN CM74-*-1_$GO ON IF NOT AT END OF TABLE_^1_%JMP* CM195X_'END OF TABLE - ERROR_^1CM74_!EOR- SYMSTR,I_$COMPARE TABLE ENTRY TO INPUT_^1_%SAZ CM76-*-1_$ENTRY COMPARES CHECK SECOND WORD_^1_%INQ 1_,NO COMPARE, CHECK NEXT TABLE ENTRY_^1_%JMP* CM72_^1CM76_!LDA- BLANKS,I€€_$MAKE SURE THAT SECOND WORD OF_^1_%EOR- SYMSTR+1,I_"CONTROL STATEMENT IS BLANKS_^1_%SAZ CM78-*-1_^1_%JMP* CM195X_'ERROR UNRECOGNIZEABLE CONTROL STATEMENT_^1CM78_!LDA- CSNAME,I_$PICKUP CODE OF LAST CONTROL STATEMENT_^1_%QLS 1_,MULTIPLY TABLE INDEX BY TWO_^1_%JMP* STTYP3,Q_$GO TO PROCESS CONTROL STATEMENT_^1CM190 LDA- INPREL,I_!TEST FOR CARRIAGE RETURN_^1_%LDQ- CSNAME,I_!CONTROL €€STATEMENT NAME_^1CM195 SQN CM196-*-1 NON-ZERO IMPLIES_"*CR_^1CM195X ENA 3_)ILLEGAL CONTROL STMNT NAME_^1HOP2_!JMP* YM2_*ZERO IMPLIES ILLEGAL STATEMENT, OUTPUT ERROR_^1CM196 JMP* CM20_(HANDLE ASTERISK FOLLOWED BY BLANK_^1*_8AS COMMENT CARD. COMMENT CARDS MUST BE_^1*_8FOLLOWED BY ANOTHER COMMENT CARD OR_^1*_8BY A CONTROL STATEMENT. THEY ARE NOT_^1*_8ALLOWED BETWEEN TWO PROGRAMS€€ OR_^1*_8IMMEDIATELY PRECEEDING A PROGRAM._^1_%SPC 2_^1STTYP1 ALF 1,L_**L CORE RESIDENT PART 0_^1_%ALF 1,LP_)*LP CORE RESIDENT PART 1_^1_%ALF 1,M_**M MASS RESIDENT PART 0_^1_%ALF 1,MP_)*MP MASS RESIDENT PART 1_^1_%ALF 1,S_**S DEFINE ENTRY POINT_^1_%ALF 1,Y_**Y DEFINE CORE RESIDENT DIRECTORY ENTRY_^1_%ALF 1,YM_)*YM DEFINE MASS RESIDENT DIRECTORY ENTRY_^1_%ALF 1,V_**V C€€ONTROL TO STANDARD BINARY INPUT_^1_%ALF 1,U_**U CONTROL TO STANDARD COMENT DEVICE_^1_%ALF 1,I_**I ASSIGN STANDARD BINARY INPUT DEVICE_^1_%ALF 1,O_**O ASSIGN STANDARD LIBRARY DEVICE_^1_%ALF 1,C_**C ASSIGN STANDARD LIST DEVICE_^1_%ALF 1,T_**T END OF BINARY INPUT_^1_%ALF 1,D_**D DEFINE DATA_^1_%ALF 1,G_**G WRITE DISK ADDRESS TAGS_^1_%ALF 1,H_**H PERFORM DISK SURFACE TES€€T_^1_%NUM 0_,*** END OF TABLE ***_^1STTYP3 JMP STARL_(*L_^1_%JMP STARLP_'*LP_^1_%JMP STARM_(*M_^1_%JMP STARMP_'*MP_^1_%JMP STARS_(*S_^1_%JMP STARY_(*Y_^1_%JMP STARYM_'*YM_^1_%JMP STARV_(*V_^1_%JMP STARU_(*U_^1_%JMP STARI_(*I_^1_%JMP STARO_(*O_^1_%JMP STARC_(*C_^1_%JMP START_(*T_^1_%JMP STARD_(*D_^1_%JMP STARG_(*G_^1_%JMP STARH_(*H_^1_%EJT 1_^1*_$R O U T I N E_"T€€ O_"G E T_"A_"H E X I D E C I M A L_^1*_]_^1*_$V A L U E_"F R O M_"A_"F I E L D_"O F_"A_^1*_]_^1*_$C O N T R O L_"S T A T E M E N T_"A N D_"R E T U R N_^1*_]_^1*_$I T S_"B I N A R Y_"V A L U E_"I N_"' A '_^1_%SPC 3_^1GETHEX NOP 0_,ENTRY LOCATION FOR STORAGE OF RETURN ADDRESS_^1_%ENA 9_,SET BIT 0 OF SCANSW SAYING GET HEX FIELD_^1_%STA- SCANSW,I_$SET BIT 3 OF SCANSW SAYING SAVE AS€€CII CODES_^1_%CLR A_^1_%RTJ- SCAN,I_'CHECK INPUT FIELD_^1_%JMP* (GETHEX)_$RETURN TO CALLER WITH BINARY VALUE IN SCNINP_^1_%SPC 8_^1*_#R O U T I N E_"T O_"C H E C K_"F O R_"C O M M A_^1_%SPC 3_^1*_#C A L L I N G_"S E Q U E N C E_^1_%SPC 3_^1*_$RTJ* COMMA_(CALL ROUTINE_^1*_$XXX_/P+1 - ERROR RETURN, NO COMMA_^1*_$XXX_/P+2 - NORMAL RETURN, COMMA DELIMETER FOUND_^1_%SPC 2_^1COMMA €€NOP 0_,ENTRY LOCATION FOR STORAGE OF RETURN ADDRESS_^1_%RTJ OETERM_'GO TO I1 TO FIND TERMINATOR TYPE_^1_%INQ -2_+OETERM RETURNS 2 IN Q-REGISTER IF COMMA FOUND_^1_%SQN 1_,SKIP IF NOT COMMA_^1_%RAO* COMMA_(UPDATE RETURN ADDRESS, COMMA FOUND_^1_%JMP* (COMMA)_%RETURN TO CALLER_^1_%EJT 1_^1*_$R O U T I N E_"T O_"P R O C E S S_"* Y_"O R_"* Y M_^1_%SPC 3_^1STARYM INA -3_+MAKE SURE €€CSNAME IS LESS THAN TWO MEANING_^1_%SAM YM1-*-1_%THAT STATEMENTS ARE IN ORDER_^1_%ENA 5_,ERROR 5, STATEMENT OTHER THAN *Y OR *YM_^1YM2_"JMP* LSTM4_(PREVIOUSLY ENTERED_^1YM1_"ENA 2_,SET UP CONTROL STATEMENT NAME CODE_^1_%JMP* Y0_+GO TO PROCESS ORDINAL_^1STARY INA -2_+MAKE SURE THAT CSNAME IS LESS THAN OR EQUAL_^1_%SAM Y1-*-1_'TO ONE MEANING THAT ONLY *Y'S HAVE BEEN INPUT_^1_%E€€NA 6_,ERROR 6, STATEMENT OTHER THAN_^1_%JMP* YM2_**Y PREVIOUSLY DEFINED_^1Y1_#ENA 1_,SETUP CONTROL STATEMENT NAME CODE_^1Y0_#STA- CSNAME,I_$SAVE CODE FOR STATEMENT TYPE_^1_%LDQ- INPXC0,I_$LOAD Q WITH THE ADDRESS OF THE INPUT BUFFER_^1_%RTJ I1_+CALL I1 TO BUILD SYSTEM DIRECTORY_^1_%JMP CM20_)READ NEXT CONTROL STATEMENT_%**MSOS 4.1**_^1I1CALL NUM 0_,ZERO IF MODULE I1 NOT CALLED_€€^1_%EJT 1_^1*_#R O U T I N E_"T O_"P R O C E S S_"* L_"S T A T E M E N T_^1_%SPC 3_^1STARL SAN LSTM1-*-1_#HAS I1 ALREADY RUN_^1_%ENA 7_,ERROR 7, NO SYSTEM DIRECTORY BUILT_^1_%JMP* LSTM4_(BEFORE PROGRAM LOAD_^1LSTM1 INA -3_^1_%SAM LSTM3A-*-1_"LAST STATEMENT WAS *Y OR *YM_^1_%SAZ LSTM3D-*-1_"LAST STATEMENT WAS *L_^1LSTM2 ENA $13_*STATEMENT IS OUT OF ORDER_^1_%JMP* LSTM4_^1€€LSTM3A RTJ* LSTM3B_'PICKUP RUN-TIME ADDRESS OF ENTRY POINT NAME_^1_%ALF 3,END0V4_$NAME FOR END ADDRESS OF PART 0_^1LSTM3B NOP 0_,ENTRY POINT ADDRESS_^1_%LDA* LSTM3B_^1_%STA- INPCTR,I_$MAKE SURE THAT END OF PART 0 WAS DEFINED_^1_%RTJ- TABSCH,I_$BEFORE BEGINNING *L LOAD_^1_%LDQ- SW6,I_(HAS THIS NAME BEEN DEFINED_^1_%SQM LSTM3C-*-1_"NO, PRINT ERROR_^1_%STA- COMLIM,I_$YES, SAVE AS U€€PPER BOUND FOR LOAD_^1_%STA- TOP,I_(SAVE AS END OF PART 0_^1_%STA* END0V4_'SAVE END ADDRESS OF PART 0_^1LSTM3D JMP* LSTM4A_'GO TO EXIMINE *L CONTROL STATEMENT_^1LSTM3C ENA $20_*ERROR 20, *S,END0V4,HHHH NOT ENTERED_^1_%JMP* LSTM4_(BEFORE THE FIRST *L CONTROL STATEMENT_^1LSTM4A ENA 3_,SET CSNAME=3, SAYING *L IS BEING PROCESSED_^1_%STA- CSNAME,I_^1LSTM40 RTJ* COMMA_(IS FIELD DELIMET€€ER A COMMA_^1_%JMP* LSTM41_'NO, CHECK FOR END OF STATEMENT_^1_%RTJ* GETHEX_'YES, PICKUP THE LOAD ADDRESS_^1_%LDA- SYMSTR,I_$MAKE SURE THAT THE FIELD IS NUMERIC_^1_%SAZ LSTM5-*-1_#GO TO CHECK THAT THE NUMERIC FIELD IS VALID_^1_%SUB- BLANKS,I_$IS THE FIELD EMPTY_^1_%SAZ LSTM43-*-1_"YES GO ON TO LOAD STAGE_^1_%ENA 8_,ERROR 8, NAME APPEARS IN NUMBER FIELD_^1LSTM4 JMP QTYPE_^1LSTM4€€1 RTJ VALID_(TEST FOR CARRIAGE RETURN OR BLANK DELIMETER_^1_%SQN LSTM42-*-1_"SKIP IF TERMINATOR IS INVALID_^1LSTM43 JMP* LSTM8_(GO TO LOAD PROGRAM STARTING AT PROBAS_^1LSTM42 ENA $E_+ERROR E, ILLEGAL FIELD TERMINATOR_^1_%JMP* LSTM4_^1LSTM5 LDA- PROBAS,I_$CHECK FOR A VALID LOAD ADDRESS_^1_%SAZ LSTM6-*-1_#SKIP IF LOADER PROGRAM BASE IS ZERO_^1_%SUB- $EB_*DOES THIS *L IMMEDIATELY€€ FOLLOW THE SYSDAT_^1_%SAN LSTM6-*-1_#NO, COMPARE THE LOAD ADDRESS TO PROBAS_^1_%LDA- $EB_*YES, INCREASE PROBAS PAST THE SYSTEM_^1_%ADD- $E6_*DIRECTORY AND THEN COMPARE THE LOAD ADDRESS_^1_%STA- PROBAS,I_$TO PROBAS_^1LSTM6 LDA- PROBAS,I_$LOAD PROGRAM BASE_^1_%LDQ- SCNINP,I_$PICKUP THE HEX LOAD ADDRESS_^1_%TCQ Q_^1_%AAQ Q_,COMPARE IT TO THE CURRENT PROGRAM BASE_^1_%SQM LSTM7-*-€€1_#SKIP IF NEW BASE IS GREATER THAN PROBAS_^1_%ENA 9_,ILLEGAL PROGRAM RELOCATION BASE_^1_%JMP* LSTM4_^1LSTM3 JMP* LSTM4A_'PROCESS ANOTHER *L STATEMENT_^1LSTM7 LDQ- COMLIM,I_$IS THE SPECIFIED RELOCATION BASE BELOW_^1_%TCQ Q_,THE BEGINNING OF SYSTEM COMMON WHICH MUST_^1_%AAQ Q_,ALSO RESIDE IN PART 0_^1_%SQM LSTM7A-*-1_"YES, GO TO CONTINUE *L_^1_%JMP* LSTM6A_'NO, ERROR 9, ILLEGA€€L RELOCATION ERROR_^1LSTM7A LDQ- SCNINP,I_$UPDATE PROBAS TO THE NEW LOAD ADDRESS MAKING_^1_%STQ- PROBAS,I_$THE AREA BETWEEN THE OLD AND NEW ADDRESSES_^1_%STQ- CSQCTR,I_$UNAVAILABLE FOR LOADING_^1_%RTJ VALID_(TEST FOR CARRIAGE RETURN OR BLANK DELIMETER_^1_%SQZ LSTM8-*-1_#SKIP IF TERMINATOR IS VALID_^1_%JMP* LSTM42_'ERROR E, ILLEGAL FIELD TERMINATOR_^1LSTM6A ENA 9_,ILLEGAL PROGRAM€€ RELOCATION BASE_^1_%JMP* LSTM4_(OUTPUT THE ERROR_^1LSTM8 RAO* YORDNL_'INCREMENT THE ORDINAL COUNTER_^1_%LDQ- ONTAB,I_%PICKUP THE NEXT ADDRESS TO CHECK IN THE_^1*_8*Y ORDINAL TABLE_^1_%SQZ LSTM9-*-1_#SKIP IF THERE WERE NO *Y STATEMENTS_^1_%LDA* YORDNL_'PICKUP THE ORDINAL OF THIS *L STATEMENT_^1_%SUB- 1,Q_*COMPARE IT TO THE NEXT ENTRY IN THE_^1*_8*Y ORDINAL TABLE_^1_%SAZ LSTM8A-*€€-1_"SKIP IF THIS ORDINAL IS IN THE TABLE_^1LSTM9 JMP* LSTM9A_^1YORDNL NUM 0_,ORDINAL OF CURRENT *L STATEMENT_^1LSTM8A RAO- ONTAB,I_%INCREMENT POINTER FOR ORDINAL TABLE_^1_%RAO* YCNTER_'INCREMENT COUNTER OF CORE RESIDENT ORDINALS_^1_%ENA 4_,LENGTH OF SYSTEM DIRECTORY ENTRY TIMES_^1_%MUI* YCNTER_'COUNTER OF CORE RESIDENT ORDINALS EQUALS_^1_%TRA Q_,THE INDEX TO THE SYSTEM DIRECTOR€€Y ENTRY_^1_%INQ -3_+DECREMENT INDEX TO WORDQ OF ENTRY_^1_%LDA- PROBAS,I_$PICKUP RELOCATION BASE FOR PROGRAM BEING_^1_%STA- ($EB),Q_%LOADED AND STORE IN WORD 2 OF THE SYSTEM_^1*_8DIRECTORY ENTRY_^1_%STQ* YPOINT_^1_%LDA- CSNAME,I_$CHECK FOR *L OR *LP TO DETERMINE_^1_%INA -3_+REQUEST CODE FOR SYSTEM DIRECTORY ENTRY_^1_%SAZ LSTM8B-*-1_"*L_^1_%LDA =N$4200_%*LP REQUEST CODE NEEDS D-€€BIT SET = 4200_^1_%JMP* LSTM8C_^1LSTM8B LDA =N$200_'*L_!REQUEST CODE = 0200_^1LSTM8C INQ -1_+DECREMENT POINTER TO START OF ENTRY_^1_%STA- ($EB),Q_%STORE REQUEST CODE IN WORD 0 OF ENTRY_^1LSTM9A LDA- CSNAME,I_^1_%INA -4_+IS THIS A *LP STATEMENT_^1_%SAN LSTM9B-*-1_"NO,_^1_%LDA* FRSTLP_'YES, IS THIS THE FIRST *LP_^1_%SAN LSTM9B-*-1_"NO, GO TO LOAD_^1_%RTJ* LPBNDY_'YES, GO TO SETU€€P AUTOLOAD PARAMETERS_^1LSTM9B CLR A,Q_*SETUP A RELOCATABLE LOAD FUNCTION_^1_%RTJ ILOAD_(LOAD THE PROGRAM_^1_%LDQ* YPOINT_'PICKUP THE INDEX FOR THIS SYSTEM DIRECTORY_^1*_8ENTRY_^1_%LDA- ($EB),Q_%FETCH THE INITIAL EXECUTION ADDRESS FOR THIS_^1_%SUB- DATBAS,I_$BLOCK OF PROGRAMS AND COMPARE IT TO THE_^1_%SAN LSTM9D-*-1_"RELOCATION BASE FOR DATA STORAGE_^1_%LDA- DATLIM,I_$IF THEY AR€€E EQUAL RESET THE FIRST EXECUTABLE_^1_%STA- ($EB),Q_%ADDRESS TO THE END OF THE DATA BLOCK_^1LSTM9D LDA- CSNAME,I_^1_%INA -4_+IS THIS A *LP_^1_%SAN LSTM9E-*-1_"NO, GO TO GET NEXT STATEMENT_^1_%RAO* FRSTLP_'YES, SET FLAG SAYING LP PROCESSED_^1LSTM9E JMP CM65_)GO TO PROCESS THE NEXT CONTROL STATEMENT_^1PARDEF NUM 0_,FLAG SAYING IF PARTITIONS WERE DEFINED_^1CRPFLG NUM 0_,FLAG INDI€€CATING IF CREP1 OR CREP IS USED_^1YPOINT NUM 0_,TEMPOTARY HOLDER FOR ORDINAL_^1END0V4 NUM 0_,ENDING ADDRESS OF PART 0_^1YCNTER NUM 0_,COUNTER OF ORDINAL PROGRAMS_^1FRSTLP NUM 0_,FLAG INDICATING IF LP HAS BEEN PROCESSED_^1_%SPC 1_^1LPBNDY NOP 0_^1_%LDA- PROBAS,I_$PICKUP PROGRAM BASE FOR FIRST LP_^1_%CLR Q_^1_%DVI =N96_)DEVIDE BY SECTOR LENGTH_^1_%ADD LSSECT_'ADD STARTING SE€€CTOR OF CORE IMAGE_^1_%STA PART1C_'SAVE STARTING SECTOR OF PART1 CORE IMAGE_^1_%STQ PART1L_'SAVE INCREMENTAL PART OF PART 1 IMAGE_^1_%TCQ Q_^1_%ADQ- PROBAS,I_^1_%STQ PART1A_'SAVE MODIFIED CORE ADDRESS OF PART1_^1_%JMP* (LPBNDY)_^1_%EJT 1_^1* R O U T I N E_"T O_"P R O C E S S_"* L P_"S T A T E M E N T_^1_%SPC 5_^1STARLP INA -3_+WAS THE LAST STATEMENT *L_^1_%SAZ LP2-*-1_%YES_€€^1_%INA -1_+NO, WAS THE LAST STATEMENT *LP_^1_%SAZ LP1-*-1_%YES, GO TO PROCESS THIS *LP_^1_%ENA $13_*NO, ERROR 13 CONTROL STATEMENT OUT OF ORDER_^1LP0_"JMP* LSTM4_(OUTPUT THE ERROR_^1LP1_"JMP* LSTM40_^1LP2_"CLR Q_,ISSUE A PATCH ENTRY POINTS FUNCTION TO_^1_%ENA 1_,LINK TOGETHER THE PART 0 ENTRY POINTS_^1_%RTJ ILOAD_^1_%RTJ WRTOUT_'WRITE OUT ALL PAGES THAT HAVE BEEN USED_^1_%L€€DA- CSQCTR,I_$SAVE THE LENGTH OF PART O FOR USE AS A_^1_%STA LENDC_(BOUND OF UNPROTECTED_^1_%LDA- COMLIM,I_$SAVE THE TOP OF SYSTEM COMMON AS BOUND_^1_%STA COMM0_(OF UNPROTECTED_^1_%RTJ* LP3_*FIND THE STARTING ADDRESS OF THE PARTITIONED_^1_%ALF 3,PARTBL_$CORE TABLE_^1LP3_"NOP 0_^1_%LDA* LP3_*PUT ADDRESS OF THE ENTRY POINT NAME_^1_%STA- INPCTR,I_$INTO THE POINTER FOR THE ENTRY SE€€ARCH ROUTINE_^1_%RTJ- TABSCH,I_$SEARCH FOR THE NAME_^1_%LDQ- SW6,I_(IS PARTBL DEFINED_^1_%SQP LP4-*-1_%YES, GO GET THE ADDRESS OF THE FIRST PARTITION_^1_%JMP* LP6_*NO, IS LSTLOC DEFINED_^1LP4_"STA* PARTBL_'SAVE THE STARTING ADDRESS OF THE TABLE_^1_%INA -1_^1_%TRA Q_,PICKUP THE FIRST WORD OF THE_^1_%LDA- 1,Q_*PARTITIONED CORE TABLE_^1_%SAP LP5-*-1_%SKIP IF ADDRESS LESS THAN $800€€0_^1_%INA 0_^1_%SAN LP5-*-1_%SKIP IF ADDRESS NOT EQUAL $FFFF_^1_%ENA 0_,CLEAR THE PARTITIONED CORE FLAG INDICATING_^1_%STA* PARDEF_'NO PARTITIONS_^1_%JMP* LP6_^1LP5_"ENA 1_,SET THE PARDEF FLAG SAYING THAT PARTITIONED_^1_%STA* PARDEF_'CORE EXISTS IN THIS SYSTEM_^1LP6_"RTJ* LP7_*FIND THE LAST LOCATION OF PARTITIONED CORE +1_^1_%ALF 3,LSTLOC_^1LP7_"NOP 0_^1_%LDA* LP7_*STORE RUN €€TIME ADDRESS OF ENTRY POINT NAME_^1_%STA- INPCTR,I_$INTO POINTER FOR ENTRY SEARCH ROUTINE_^1_%RTJ- TABSCH,I_$SEARCH FOR NAME_^1_%LDQ- SW6,I_(IS LSTLOC DEFINED_^1_%SQP LP8-*-1_%YES, CHECK IT FOR USE AS THE START OF *LP LOAD_^1_%LDA* END0V4_'NO, USE END0V4 FOR *LP RELOCATION BASE_^1_%JMP* LP9_^1LP8_"STA* LSTLOC_'SAVE THE ADDRESS OF LSTLOC_^1_%INA -1_^1_%TRA Q_,PICKUP LSTLOC TO SEE€€ WHERE TO BEGIN_^1_%LDA- 1,Q_*THE *LP LOADING_^1_%SAP LP9-*-1_%SKIP IF LSTLOC LESS THAN $8000_^1_%INA 0_^1_%SAZ LP10-*-1_$SKIP IF LSTLOC =$FFFF_^1LP9_"STA- PROBAS,I_$USE LSTLOC AS THE PART 1 RELOCATION BASE_^1_%JMP* LP12A_(GO TO PROCESS THE CONTROL STATEMENT_^1LP10_!LDA* PARDEF_'IS LSTLOC = $FFFF AND DO PARTITIONS EXIST_^1_%SAZ LP11-*-1_^1_%ENA $22_*ERROR 22, ATTEMPT TO LOAD P€€ART 1 CORE_^1_%JMP* LP0_*RESIDENT INTO NON-EXISTANT MEMORY_^1LP11_!LDA- COMLIM,I_$IF THERE ARE NO PARTITIONS AND LSTLOC = FFFF_^1_%INA 1_,THEN USE END0V4+1 AS RELOCATION BASE FOR_^1_%STA- PROBAS,I_$PART 1 CORE RESIDENT_^1LP12A RTJ* LP11A_^1_%JMP* LP14A_^1LP11A NOP 0_^1LP12_!RTJ* LP13_)TEST TO DETERMINE IF MSIZV4 IS DEFINED_^1_%ALF 3,MSIZV4_^1LP13_!NOP 0_^1_%LDA* LP13_)PICKUP €€THE RUN-TIME ADDRESS OF THE NAME_^1_%STA- INPCTR,I_^1_%RTJ- TABSCH,I_$SEARCH FOR THE NAME MSIZV4_^1_%LDQ- SW6,I_(IS MSIZV4 DEFINED_^1_%SQP LP14-*-1_$YES, SETUP NEW TOP OF CORE_^1_%ENA $21_*NO, ERROR 21 MSIZV4 NOT DEFINED_^1_%JMP QTYPE_^1LP14_!JMP* (LP11A)_^1LP14A STA* MSIZV4_'SAVE THE TOP OF CORE_^1_%STA- TOP,I_(SETUP THE NEW TOP OF CORE FOR THE LOADER_^1_%ENA 0_^1_%STA- CSQC€€TR,I_$CLEAR LENGTH OF PART1 CORE RESIDENT TO ZERO_^1_%ENA 1_^1_%STA* CRPFLG_'SET FLAG SAYING USE PART1 ENTRY POINT TABLE_^1_%STA- ARIT15,I_$SET THE ARITHMETIC TYPE FLAG TO 16 BIT_^1_%ENA 4_,SET CSNAME = 4 SAYING THAT A *LP IS_^1_%STA- CSNAME,I_$BEING PROCESSED_^1_%LDA- PROBAS,I_$SAVE PROGRAM RELOCATION BASE_^1_%STA LPENDC_^1_%RTJ* LP15_)GO TO END CREP TABLE_^1_%JMP LSTM40_'GO T€€O PROCESS THE CONTROL STATEMENT_^1LP15_!NOP 0_,END THE CREP TABLE_^1_%LDA- MAXENT,I_$SAVE THE ENDING ADDRESS OF THE CREP TABLE_^1_%STA- ECREP,I_%FOR LATER USE IN PATCHING EXTERNALS_^1_%CLR Q_,COMPUTE THE STARTING ADDRESS FOR THE_^1_%DVI- SECTOR,I_$CREP1 TABLE SO THAT THE TABLE BEGINS_^1_%INA 10_+ON A SECTOR BOUNDARY WHILE STILL LEAVING_^1_%MUI- SECTOR,I_$ROOM FOR FURTHER CREP EN€€TRIES_^1_%STA- ENTST1,I_$SAVE THE STARTING ADDRESS OF CREP1_^1_%STA- ENTPGS,I_$SETUP THE NEW STARTING SECTOR OF ENTRY TABLE_^1_%STA- MAXENT,I_$SETUP THE NEW MAXIMUM VALUE IN ENTRY TABLE_^1_%JMP* (LP15)_^1PARTBL NUM 0_,ADDRESS OF PARTITIONED CORE TABLE_^1LSTLOC NUM 0_,ADDRESS OF WORD CONTAINING LWA+1 OF PARTITIONS_^1MSIZV4 NUM 0_,LAST WORD ADDRESS OF MEMORY_^1_%EJT 1_^1* R O U €€T I N E_"T O_"P R O C E S S_"* M_"S T A T E M E N T S_^1_%SPC 3_^1STARM INA -3_+WAS THE LAST STATEMENT *L_^1_%SAZ M0-*-1_'YES, COMPLETE IT_^1_%JMP* M2_+NO, TEST FOR *LP AS LAST ENTRY_^1M0_#CLR Q_,THE ENTRY POINTERS POINT TO THE CREP_^1_%ENA 1_,TABLE SO ISSUE A PATCH EXTERNAL FUNCTION TO_^1_%RTJ ILOAD_(LINK ALL OF CORE RESIDENT_^1_%LDA- CSQCTR,I_$SAVE THE LENGTH OF PART O FOR€€ USE AS A_^1_%STA LENDC_(BOUND OF UNPROTECTED_^1_%LDA- COMLIM,I_$SAVE THE TOP OF SYSTEM COMMON AS BOUND_^1_%STA COMM0_(OF UNPROTECTED_^1_%RTJ FMXSEC_'MAKE SURE ENTRY SECTOR IS DEFINED_^1_%RTJ* LP15_)GO TO END THE CREP TABLE_^1_%RTJ* ENDET1_'SETUP VALUES FOR TEMPORARY ENT/EXT TABLES_^1M1_#RTJ CONMS_(GO TO SETUP THE NEW PAGES_^1_%JMP* M7_+GO TO PROCESS THE *M_^1M2_#INA -1_+WAS T€€HE LAST STATEMENT *LP_^1_%SAZ M3-*-1_'YES,COMPLETE *LP PROCESSING_^1_%JMP* M5_+NO, GO TO CHECK FOR *M AS LAST STATEMENT_^1M3_#LDA PART1L_'UPDATE THE LENGTH OF PART 1_^1_%ADD- CSQCTR,I_$IN THE AUTOLOAD PROGRAM_^1_%STA PART1L_^1_%LDA- CSQCTR,I_$SAVE THE LENGTH OF PART1 FOR USE AS THE_^1_%ADD LPENDC_'LOWER BOUND OF UNPROTECTED CORE_^1_%STA LPENDC_^1_%STA- CSQCTR,I_$UPDATE CSQCTR €€SO THE *M SECTORS ARE CORRECT_^1_%RTJ* ENDET1_'CLOSE OFF CREP1 TABLE AND SAVE ITS ADDRESS_^1_%RTJ LCREP_(SETUP POUNTERS TO CREP TABLE_^1_%RTJ FMXSEC_'MAKE SURE ENTRY SECTOR IS DEFINED_^1_%RTJ LCREP1_'RESET POINTERS BACK TO CREP1 TABLE_^1_%JMP* M3A_*CONTINUE FINISHING *LP_^1ENDET1 NOP 0_,ROUTINE TO FIND BOUNDS FOR TEMPORARY ENT/EXT_^1_%LDA- ENTPGS,I_$TABLES USED FOR *M AND *MP P€€ROCESSING_^1_%STA- ENTST1,I_$SAVE THE STARTING ADDRESS OF THE ENTRY TABLE_^1_%LDA- MAXENT,I_^1_%STA- ECREP1,I_$SAVE THE ENDING ADDRESS OF THE CREP OR CREP1_^1_%CLR Q_,TABLE FOR LATER USE_^1_%DVI- SECTOR,I_$COMPUTE THE STARTING VALUE FOR THE_^1_%INA 1_,TEMPORARY ENTRY POINT TABLE SO THAT THE_^1_%MUI- SECTOR,I_$TABLE BEGINS ON A SECTOR BOUNDARY._^1_%STA* ENTTMP_'SAVE THIS STARTING €€VALUE_^1_%STA- ENTPGS,I_$SETUP THE NEW STARTING SECTOR OF ENTRY TABLE_^1_%STA- MAXENT,I_$SETUP THE NEW MAXIMUM VALUE OF ENTRY TABLE_^1_%LDA- EXTSTR,I_$PICKUP THE START OF THE SYSTEM EXTERNAL_^1_%STA* STRTEX_'TABLE AND SAVE IT LOCALLY_^1_%LDA- EXTCTR,I_$PICKUP THE END OF THE SYSTEM EXTERNAL_^1_%STA* ENDEXT_'TABLE AND SAVE IT LOCALLY_^1_%CLR Q_^1_%DVI- SECTOR,I_$COMPUTE THE STARTING€€ VALUE FOR THE TEMPORARY_^1_%INA 1_,EXTERNAL TABLE SO THAT THE TABLE BEGINS_^1_%MUI- SECTOR,I_$ON A NEW PAGE._^1_%STA* TEMPEX_'SAVE THIS VALUE FOR SETTING UP THE_^1_%JMP* (ENDET1)_$EXTERNAL TABLE BEFORE BEGINNING LOADING_^1ENTTMP NUM 0_,STARTING VALUE OF TEMPORARY ENTRY POINT TABLE_^1STRTEX NUM 0_,STARTING ADDRESS OF SYSTEM EXTERNAL TABLE_^1TEMPEX NUM 0_,STARTING ADDRESS OF TEM€€PORARY EXTERNAL TABLE_^1ENDEXT NUM 0_,END ADDRESS OF SYSTEM EXTERNAL TABLE_^1M3A_"CLR Q_,ISSUE A PATCH EXTERNALS FUNCTION TO LINK_^1_%ENA 1_,THE PART 1 CORE RESIDENT_^1_%RTJ ILOAD_^1_%SQZ M4-*-1_'SKIP IF NO UNPATCHED EXTERNALS EXIST_^1_%RTJ LCREP_(SWAP THE TABLE POINTERS FOR LINKING PART 1_^1_%CLR Q_,CORE RESIDENT TO CREP TABLE_^1_%ENA 1_,ISSUE PATCH EXTERNAL FUNCTION TO LI€€NK_^1_%RTJ ILOAD_(PART1 TO PART0_^1M4_#LDA END0V4_'RESTORE THE UPPER BOUND OF THE LOAD_^1_%STA- TOP,I_(AREA TO THE TOP OF BANK 0_^1_%JMP* M1_+GO TO PROCESS THE *M_^1M5_#INA -1_+WAS THE LAST STATEMENT *M_^1_%SAZ M6A-*-1_%YES, HANDLE THIS *M_^1_%ENA $13_*ERROR 13, OUT OF ORDER CONTROL STATEMENT_^1M6_#JMP QTYPE_(OUTPUT THE ERROR_^1M6A_"RTJ WRTOUT_'OUTPUT THE *M OR *MP PROGRAMS €€AND ENTRIES_^1M7_#RTJ* M7A_*UPDATE LSSECT AND PAGES_^1_%JMP* M10A_^1M7A_"NOP 0_^1_%LDA- CSQCTR,I_$UPDATE LSSECT SO THAT THE NEXT *M OR *MP_^1_%RTJ NXTSEC_'LOAD WILL BEGIN ON A NEW SECTOR_^1_%LDA- NOPAGE,I_$PICKUP THE NUMBER OF PAGES IN CORE_^1_%STA- COUNT1,I_$SETUP THE COUNTER FOR THE PAGE BUILD ROUTINE_^1_%RTJ CONMS1_'GO TO RESET THE PAGE FLAGS_^1_%LDQ- CORADR,I_$PICKUP THE STA€€RTING ADDRESS OF THE PAGING_^1M9_#CLR A_,AREA IN CORE_^1_%STA- 1,Q_*CLEAR A WORD OF THE PAGING AREA_^1_%INQ 1_^1_%TRQ A_,HAS THE ENTIRE PAGING AREA BEEN CLEARED_^1_%SUB- FLGBSE,I_^1_%SAZ M10-*-1_%YES, CONTINUE *M PROCESSING_^1_%JMP* M9_+NO, GO BACK TO CLEAR THE NEXT WORD_^1M10_"STA- CSQCTR,I_$CLEAR PROGRAM LENGTH TO ZERO_^1_%JMP* (M7A)_^1M10A_!ENA 5_,SET CSNAME = 5 TO SAY THA€€T A *M IS_^1_%STA- CSNAME,I_$CURRENTLY BEING PROCESSED_^1_%RTJ COMMA_(IS FIELD TERMINATOR A COMMA_^1_%JMP* M11_*NO, CHECK FOR END OF STATEMENT_^1_%JMP* M13_*YES, PICKUP NEXT FIELD_^1M11_"RTJ VALID_(IS FIELD TERMINATOR BLANK OR CARRIAGE RETURN_^1_%SQZ M12-*-1_%YES, FINISH PROCESSING STATEMENT_^1MTRMER JMP LSTM42_'NO, ERROR E - INVALID FIELD TERMINATOR_^1M12_"STQ- PROBAS,I_$ABSOL€€UTIZE THE PROGRAM TO LOCATION 0_^1_%JMP* M20A_)GO TO LOAD THE PROGRAMS_^1M13_"ENA 8_,SET BIT 3 OF SCAN SWITCH SAYING PICKUP AN_^1_%STA- SCANSW,I_$ASCII FIELD. SAVE THE ASCII CHARACTER CODES_^1_%CLR A_,IN THE SYMSTR BLOCK AND IF THE FIELD IS_^1_%RTJ- SCAN,I_'NUMERIC, CONVERT THE NUMBER TO BINARY._^1_%LDA- SYMSTR,I_$IS THE FIELD NUMERIC_^1_%SAN M15-*-1_%NO, DETERMINE THE SECTOR AD€€DRESS_^1_%LDA END0V4_'YES, IS IT A VALID PROGRAM BASE_^1_%SUB- SCNINP,I_^1_%SAP M14-*-1_%PROGRAM BASE IS LESS THAN ENDOV4_^1_%ENA 9_,ERROR 9, ILLEGAL HEX CORE RELOCATION BASE_^1MERROR JMP QTYPE_(OUTPUT ERROR MESSAGE_^1M14_"LDA- SCNINP,I_$UPDATE THE PROGRAM RELOCATION BASE TO THE_^1_%STA- PROBAS,I_$VALUE SPECIFIED ON THE CONTROL STATEMENT_^1_%JMP* M19_*GO TO CHECK IF A SECTOR AD€€DRESS IS SPECIFIED_^1M15_"LDA- SYMSTR,I_$PICKUP THE FIELD TO SEE IF IT IS EMPTY_^1_%SUB- BLANKS,I_^1_%SAN M15A-*-1_$SKIP IF FIELD IS NOT EMPTY_^1_%STA- PROBAS,I_$FIELD IS EMPTY - ABSOLUTIZE PROGRAM TO ZERO_^1_%JMP* M19_*CHECK NEXT FIELD_^1M15A_!LDA- SCNTRM,I_$IS THE ENTRY POINT NAME FOLLOWED_^1_%AND =N$7F_(BY A PLUS SIGN (ASCII CODE = $2B)_^1_%INA -$2B_^1_%SAZ M16-*-1_%YES, FI€€ND THE SECTOR VALUE_^1_%JMP* MTRMER_'NO, ERROR 14 ILLEGAL FIELD TERMINATOR_^1M16_"LDA- I_^1_%INA SYMSTR_^1_%STA- INPCTR,I_$SETUP THE POINTER FOR THE LOADER TO SEARCH_^1_%RTJ- TABSCH,I_$FOR THE NAME ON THE CONTROL STATEMENT._^1_%LDQ- SW6,I_(IS THE NAME DEFINED_^1_%SQP M17-*-1_%YES, COMPUTE THE SECTOR ADDRESS_^1_%ENA $23_*ERROR 23, NAME USED IN *M CONTROL STATEMENT_^1_%JMP* MERROR€€_'IS NOT A DEFINED ENTRY POINT_^1M17_"RTJ GETHEX_'GET THE SPECIFIED SECTOR INCREMENT_^1_%LDA- SYMSTR,I_$IS THE FIELD NUMERIC_^1_%SAZ M18-*-1_%YES, CONTINUE PROCESSING_^1M17A_!ENA 8_,NO, ERROR 8 NAME APPEARS IN NUMBER FIELD_^1_%JMP* MERROR_^1M18_"LDA- ENTPNT,I_$PICKUP THE ENTRY POINT VALUE_^1_%ADD- SCNINP,I_$ADD THE SPECIFIED INCREMENT_^1_%STA SECVAL_'SAVE THE SECTOR VALUE TEMP€€ORARILY_^1_%RTJ CHKSEC_'GO TO VERIFY THAT THE SECTOR IS VALID_^1_%LDA SECVAL_'UPDATE LSSECT TO THE NEW SECTOR VALUE_^1_%STA LSSECT_'GIVEN ON THE CONTROL STATEMENT_^1_%ENA 0_^1_%STA- PROBAS,I_$RESET THE PROGRAM BASE TO ZERO_^1_%JMP* M19A_)GO TO LOAD THE PROGRAM_^1M19_"RTJ COMMA_(IS THE FIELD DELIMETER A COMMA_^1_%JMP* M19A_)NO, TEST FOR END OF STATEMENT_^1_%RTJ GETHEX_'YES, GO€€ TO PICKUP THE SECTOR VALUE_^1_%LDA- SYMSTR,I_$IS THE FIELD NUMERIC_^1_%SAZ M20-*-1_%YES, CHECK ITS VALIDITY_^1_%SUB- BLANKS,I_$IS THE FIELD EMPTY_^1_%SAZ M20A-*-1_$YES, GO TO LOAD PROGRAMS_^1_%JMP* M17A_)NO, ERROR - NAME APPEARS IN NUMBER FIELD_^1M19A_!RTJ VALID_(IS TERMINATOR BLANK OR CARRIAGE RETURN_^1_%SQZ M20A-*-1_$YES, GO TO PERFORM LOAD_^1_%JMP* MTRMER_'NO, ERROR E - ILL€€EGAL TERMINATOR_^1M20_"LDA- SCNINP,I_$PICKUP THE VALUE GIVEN FOR THE PROGRAM_^1_%STA SECVAL_'ADDRESS ON MASS STORAGE._^1_%RTJ CHKSEC_'CHECK IF THE VALUE IS LEGAL_^1_%LDA SECVAL_'UPDATE LSSECT TO THE VALUE GIVEN ON_^1_%STA LSSECT_'THE CONTROL STATEMENT_^1M20A_!LDA ENTTMP_'PICKUP THE ADDRESS OF THE TEMPORARY ENTRY_^1_%STA- ENTPGS,I_$POINT TABLE AND USE IT AS THE START AND_^1_%ST€€A- MAXENT,I_$END OF THE LOADER ENTRY POINT TABLE._^1_%LDA TEMPEX_'PICKUP THE ADDRESS OF THE TEMPORARY EXTERNAL_^1_%STA- EXTSTR,I_$TABLE AND USE IT AS THE START AND END OF_^1_%STA- EXTCTR,I_$THE LOADER EXTERNAL TABLE._^1M20B_!CLR A,Q_*SETUP THE ADDRESS ARITHMETIC FLAG TO TELL_^1_%STA- ARIT15,I_$THE LOADER TO USE 15 BIT ARITHMETIC._^1_%RTJ ILOAD_(ISSUE RBD LOAD FUNCTION_^1_%ENA 1€€_,SETUP AND ISSUE A PATCH EXTERNALS FUNCTION_^1_%RTJ ILOAD_(TO LINK ALL THE *M PROGRAMS_^1_%SQZ M21-*-1_%SKIP IF ALL EXTERNALS HAVE BEEN PATCHED_^1_%RTJ LCREP_(SETUP ENTRY POINTERS TO LINK TO CREP_^1_%ENA 1_^1_%RTJ ILOAD_(ISSUE A PATCH TO CREP FUNCTION_^1M21_"SQZ M22-*-1_%SKIP IF ALL EXTERNALS HAVE BEEN PATCHED_^1_%RTJ LCREP1_'SETUP POINTERS FOR A LINK TO CREP1_^1_%ENA 1_^1€€_%RTJ ILOAD_(ISSUE A PATCH TO CREP1 FUNCTION_^1M22_"SQZ M23-*-1_%SKIP IF ALL EXTERNALS HAVE BEEN PATCHED_^1_%ENA 2_^1_%RTJ ILOAD_(ISSUE PRINT UNPATCHED EXTERNAL FUNCTION_^1M23_"RAO* YMORDN_'INCREMENT THE *Y/*YM PROGRAM COUNTER_^1_%LDQ- MONTAB,I_$WERE THERE ANY *YM STATEMENTS_^1_%SQN M23A-*-1_$YES, MAKE DIRECTORY ENTRY_^1_%JMP* M26_*NO, SKIP DIRECTORY BUILD_^1M23A_!LDA* YMORDN_€€'IS THIS LOAD TO BE PUT IN DIRECTORY_^1_%SUB- 1,Q_*SUBTRACT THE YM ORDINAL IN MONTAB_^1_%SAZ M25-*-1_%SKIP IF DIRECTORY ENTRY TO BE MADE_^1M24_"JMP* M26_*GO TO GET NEXT CONTROL STATEMENT_^1M25_"RAO- MONTAB,I_$BUMP COUNTER FOR MASS STORAGE ORDINAL TABLE_^1_%RAO* YMCNTR_'BUMP THE ORDINAL COUNTER_^1_%ENA 7_^1_%MUI* YMCNTR_'COMPUTE AN INDEX TO THE SYSTEM DIRECTORY_^1_%ADD- $E7_*TO US€€E FOR BUILDING THIS ENTRY._^1_%INA -1_^1_%TRA Q_^1_%LDA LSSECT_'STORE THE PROGRAM SECTOR ADDRESS IN_^1_%STA- ($EB),Q_%WORD SEVEN OF THE DIRECTORY ENTRY_^1_%INQ -2_^1_%LDA- CSQCTR,I_$STORE THE PROGRAM LENGTH OF THE LOAD_^1_%STA- ($EB),Q_%IN WORD FIVE OF THE DIRECTORY ENTRY_^1_%LDA- CSNAME,I_^1_%INA -5_+IS THIS A *M LOAD_^1_%SAZ M26-*-1_%YES, GO TO GET NEXT STATEMENT PROCESSED_€€^1_%INQ -3_+NO, PUT PROGRAM BASE IN WORD 2 OF DIRECTORY_^1_%LDA- PROBAS,I_^1_%STA- ($EB),Q_^1*_8SETUP THE POINTERS SO THE NEXT ENTRY POINT_^1M26_"RTJ LCREP_(PROCESSED GOES INTO CREP IN CASE A *S FOLLOWS_^1_%JMP CM65_^1YMCNTR NUM 0_,YM ORDINAL COUNTER_^1YMORDN NUM 0_,M/MP PROGRAM COUNTER_^1_%EJT 1_^1* R O U T I N E_"T O_"P R O C E S S_"* M P_"S T A T E M E N T S_^1_%SPC 5_^1S€€TARMP INA -3_+WAS THE LAST STATEMENT *L_^1_%SAZ MP0-*-1_%YES, COMPLETE IT_^1_%JMP* MP2_*NO, CONTINUE CHECKING_^1MP0_"CLR Q_,ISSUE A PATCH EXTERNAL FUNCTION TO LINK_^1_%ENA 1_,TOGETHER ALL OF CORE RESIDENT. ( IF *L WAS_^1_%RTJ ILOAD_(LAST THEN CORE RESIDENT IS PART 0 ONLY)_^1_%LDA- CSQCTR,I_$SAVE THE LENGTH OF PART 1 FOR USE AS A_^1_%STA LENDC_(BOUND OF UNPROTECTED_^1_%LDA- CO€€MLIM,I_$SAVE THE TOP OF SYSTEM COMMON AS BOUND_^1_%STA COMM0_(OF UNPROTECTED_^1_%RTJ FMXSEC_'MAKE SURE ENTRY SECTOR IS DEFINED_^1MP1_"RTJ ENDET1_'COMPUTE START VALUES FOR TEMP ENT/EXT TABLES_^1_%RTJ CONMS_(REALLOCATE CORE FOR NEW PAGES_^1_%JMP* MP4_*GO TO PROCESS THE *MP CONTROL STATEMENT_^1MP2_"INA -1_+WAS THE LAST STATEMENT *LP_^1_%SAZ MP2A-*-1_$YES, COMPLETE THE *LP_^1_%JM€€P* MP3A_)NO, COMPLETE THE *M OR *MP_^1MP2A_!RTJ FMXSEC_'MAKE SURE ENTRY_^1_%LDA- CSQCTR,I_$SAVE THE LENGTH OF PART 1 FOR USE AS A_^1_%STA LPENDC_'BOUND OF UNPROTECTED_^1_%CLR Q_,YES, ISSUE A PATCH EXTERNALS FUNCTION_^1_%ENA 1_,TO LINK TOGETHER THE PART1 CORE RESIDENT_^1_%RTJ ILOAD_^1_%SQZ MP3-*-1_%SKIP IF NO UNPATCHED EXTERNALS_^1_%RTJ LCREP_(SWAP TABLE POINTERS FOR A LINK T€€O CREP_^1_%ENA 1_,ISSUE A PATCH EXTERNALS FUNCTION TO LINK PART1_^1_%RTJ ILOAD_(CORE RESIDENT TO PART 0 ENTRIES_^1MP3_"JMP* MP1_*GO TO PROCESS THIS *MP_^1_%SPC 2_^1*_$COME HERE AFTER COMPLETING *L OR *LP_^1*_$FALL THROUGH TO HERE IF THE LAST STATEMENT WAS *M OR *MP_^1MP3A_!RTJ WRTOUT_'OUTPUT THE *M OR *MP PROGRAMS AND ENTRIES_^1MP4_"RTJ M7A_*GO TO ALLOCATE TEMPORARY PAGES_^1_%€€RTJ GETHEX_'PICKUP THE STARTING PARTITION NUMBER_^1_%LDA- SYMSTR,I_$IS THE FIELD NUMERIC_^1_%SAZ MP5-*-1_%YES, ANALYZE THE PARAMETER_^1MP4A_!ENA 8_,ERROR 8, NAME APPEARS IN NUMBER FIELD_^1MPERR JMP QTYPE_^1MP5_"LDA- SCNINP,I_$SAVE THE STARTING PARTITION NUMBER_^1_%STA* PP_^1_%SAM MP6-*-1_%SKIP IF PARTITION NUMBER IS NEGATIVE - ILLEGAL_^1_%INA -16_*IS THE PARTITION NUMBER LES€€S THAN 16_^1_%SAM MP7-*-1_%YES, THE NUMBER IS VALID (0-15)_^1MP6_"ENA $25_*NO, ILLEGAL PARTITION NUMBER_^1_%JMP* MPERR_(OUTPUT ERROR 9_^1MP7_"RTJ COMMA_(IS THE FIELD TERMINATOR A COMMA_^1_%JMP* MPTERM_'NO, OUTPUT ERROR E_^1_%RTJ GETHEX_'YES, GET THE NEXT PARAMETER_^1_%LDA- SYMSTR,I_$IS THE FIELD NUMERIC_^1_%SAZ MP8-*-1_%YES, CHECK THE PARAMETER_^1_%JMP* MP4A_)NO, ERROR 8 - NA€€ME APPEARS IN NUMBER FIELD_^1MP8_"LDA- SCNINP,I_$SAVE THE NUMBER OF PARTITIONS_^1_%STA* NN_^1_%SAM MP9-*-1_%SKIP IF NUMBER IS NEGATIVE - ILLEGAL_^1_%ADD* PP_+ADD THE STARTING PARTITION TO NUMBER OF_^1_%INA -17_*PARTITIONS AND CHECK FOR PARTITION OVERFLOW_^1_%SAM MP10-*-1_$SKIP IF NUMBER IS VALID_^1MP9_"JMP* MP6_*ERROR 25, ILLEGAL PARTITION NUMBER_^1MP10_!RTJ COMMA_(IS THE TERMI€€NATOR A COMMA_^1_%JMP* MP12_)NO, CHECK FOR BLANK OR CARRIAGE RETURN_^1_%RTJ GETHEX_'YES, PICKUP THE SECTOR NUMBER_^1_%LDA- SYMSTR,I_$IS THE FIELD NUMERIC_^1_%SAZ MP11-*-1_$YES, CHECK IT FOR VALIDITY_^1_%JMP* MP4A_)NO, ERROR 8 - NAME APPEARS IN NUMBER FIELD_^1MP11_!LDA- SCNINP,I_$PICKUP THE SECTOR NUMBER FROM THE CONTROL_^1_%STA* SECVAL_'STATEMENT AND SAVE IT_^1_%RTJ* CHKSEC_'MAKE€€ SURE THAT THE SECTOR NUMBER IS LEGAL_^1_%LDA* SECVAL_^1_%STA LSSECT_^1MP12_!RTJ VALID_(IS TERMINATOR BLANK OR CARRIAGE RETURN_^1_%SQZ MP13-*-1_$YES, CONTINUE PROCESSING THE *MP_^1MPTERM ENA $E_+NO, ERROR E - INVALID FIELD TERMINATOR_^1_%JMP* MPERR_^1MP13_!LDA PARTBL_'HAS PARTBL BEEN DEFINED FOR THE INITIALIZER_^1_%SAN MP15A-*-1_#YES, FIND THE BOUNDS FOR THIS LOAD_^1_%RTJ* MP€€14_)NO, SEE IF PARTBL IS DEFINED AS AN_^1_%ALF 3,PARTBL_$ENTRY POINT IN SYSDAT_^1MP14_!NOP 0_^1_%LDA* MP14_)PICKUP RUNTIME ADDRESS OF ENTRY POINT NAME_^1_%STA- INPCTR,I_$FOR TABLE SEARCH POINTER_^1_%RTJ* LCREP_(SETUP THE POINTERS TO USE THE CREP TABLE_^1_%RTJ- TABSCH,I_$SEARCH CREP FOR PARTBL_^1_%LDQ- SW6,I_(WAS IT DEFINED_^1_%SQP MP15-*-1_$YES, SAVE ITS VALUE_^1_%ENA $26_*NO, €€OUTPUT ERROR $26 - NO PARTBL IN SYSDAT_^1_%JMP* MPERR_^1MP15_!STA PARTBL_'SAVE THE ADDRESS OF THE PARTITIONED CORE TABLE_^1MP15A LDQ* PP_+PICKUP THE STARTING ADDRESS FOR THE LOAD_^1_%LDA (PARTBL),Q_^1_%STA- PROBAS,I_$SAVE THE PROGRAM RELOCATION BASE FOR THIS LOAD_^1_%ADQ* NN_^1_%LDA (PARTBL),Q_"PICKUP THE UPPER BOUND FOR THE LOAD_^1_%STA- TOP,I_(AND SAVE IT IN LOCATION TOP_^1_%€€STA- COMLIM,I_$SETUP UPPER BOUND OF COMMON FOR PARTITION_^1_%ENA 6_,SETUP CSNAME = 6_!SAYING THAT A_^1_%STA- CSNAME,I_$*MP IS BEING PROCESSED_^1_%LDA ENTTMP_'PICKUP THE STARTING ADDRESS FOR THE TEMPORARY_^1_%STA- ENTPGS,I_$ENTRY POINT TABLE AND SAVE AS THE START AND_^1_%STA- MAXENT,I_$END OF THE TABLE FOR THIS LOAD._^1_%LDA STRTEX_'PICKUP THE START OF THE TEMPORARY EXTERNAL_^1_%€€STA- EXTSTR,I_$TABLE AND USE AS THE START AND END OF THE_^1_%STA- EXTCTR,I_$EXTERNAL TABLE FOR THIS LOAD_^1_%ENA 1_,SETUP THE ADDRESS ARITHMETIC FLAG TO TELL_^1_%STA- ARIT15,I_$THE LOADER TO USE 16 BIT ARITHMETIC_^1_%CLR A,Q_^1MP16_!RTJ ILOAD_(ISSUE RBD LOAD FUNCTION_^1_%ENA 1_,ISSUE PATCH EXTERNAL FUNCTION TO LINK THE_^1_%RTJ ILOAD_(PROGRAMS OF THIS LOAD TOGETHER_^1_%SQZ MP1€€7-*-1_$SKIP IF NO UNPATCHED EXTERNALS EXIST_^1_%RTJ* LCREP1_'RESET ENTRY POINTERS FOR LINK TO CREP1_^1_%ENA 1_,ISSUE PATCH EXTERNAL FUNCTION TO LINK THE_^1_%RTJ ILOAD_(PROGRAMS OF THIS LOAD TO CREP1_^1MP17_!SQZ MP18-*-1_$SKIP IF NO UNPATCHED EXTERNALS EXIST_^1_%RTJ* LCREP_(RESET ENTRY POINTERS FOR LINK TO CREP_^1_%ENA 1_,ISSUE PATCH EXTERNAL FUNCTION TO LINK THE_^1_%RTJ ILOAD_€€(PROGRAMS OF THIS LOAD TO CREP_^1MP18_!SQZ MP19-*-1_$SKIP IF NO UNPATCHED EXTERNALS EXIST_^1_%ENA 2_,ISSUE PRINT UNPATCHED EXTERNALS FUNCTION_^1_%RTJ ILOAD_(BEFORE COMPLETING LOAD_^1MP19_!JMP M23_*GO TO TERMINATE THIS LOAD_^1PP_#NUM 0_,STARTING PARTITION NUMBER_^1NN_#NUM 0_,NUMBER OF PARTITIONS TO USE_^1_%EJT 1_^1*_$R O U T I N E_"T O_"V E R I F Y_"T H A T_"A_^1_%SPC 1_^1*_€€$G I V E N_"V A L U E_"I S_"G R E A T E R_"T H A N_^1_%SPC 1_^1*_$L S S E C T_"A N D_"L E S S_"T H A N_"T H E_^1_%SPC 1_^1*_$V A L U E_"O F_"E N T R Y_"P O I N T_"S E C T O R ._^1_%SPC 8_^1FMXSEC NOP 0_^1_%LDQ* MAXSEC_'HAS SECTOR BEEN DEFINED IN CONTRL_^1_%SQZ CKSEC1_'NO, SEE IF IT HAS BEEN OPERATOR DEFINED_^1_%JMP* (FMXSEC)_$YES, RETURN TO CALLER_^1CKSEC1 RTJ* CKSEC2_^1_%ALF €€ 3,SECTOR_^1CKSEC2 NOP 0_^1_%LDA* CKSEC2_'PICKUP THE RUN TIME ADDRESS OF THE ENTRY_^1_%STA- INPCTR,I_$POINT NAME FOR THE TABLE SEARCH ROUTINE_^1_%RTJ- TABSCH,I_$SEARCH TO SEE IF SECTOR HAS BEEN DEFINED_^1_%LDQ- SW6,I_(IS SECTOR DEFINED_^1_%SQP CKSEC3-*-1_"YES, SAVE ITS VALUE_^1_%ENA $24_*NO, ERROR SECTOR IS NOT DEFINED_^1CKSERR JMP* QTYPE_^1CKSEC3 STA* MAXSEC_'SAVE THE VALUE OF €€SECTOR_^1_%JMP* (FMXSEC)_^1CHKSEC NOP 0_^1CKSEC LDA* SECVAL_'IS THE NEW SECTOR VALUE GREATER THAN OR_^1_%SUB LSSECT_'EQUAL TO THE CURRENT VALUE OF LSSECT_^1_%SAP CKSEC5-*-1_"YES, CHECK FOR MASS STORAGE OVERFLOW_^1CKSEC4 ENA $A_+ERROR A, ILLEGAL SECTOR SPECIFIED ON_^1_%JMP* CKSERR_'INITIALIZER CONTROL STATEMENT_^1CKSEC5 LDA* MAXSEC_'IS THE NEW SECTOR VALUE LESS THAN OR_^1_%SUB*€€ SECVAL_'EQUAL TO THE MAXIMUM SECTOR ALLOWABLE_^1_%SAP CKSEC6-*-1_"YES, RETURN TO CALLER_^1_%JMP* CKSEC4_'NO, OUTPUT THE ERROR TO THE USER_^1CKSEC6 JMP* (CHKSEC)_$RETURN TO CALLER_^1MAXSEC NUM 0_,MAXIMUM SYSTEM SECTOR SPECIFIED BY THE USER_^1SECVAL NUM 0_,SECTOR VALUE SPECIFIED ON *M OR *MP_^1*_8CONTROL STATEMENT_^1_%EJT 1_^1*_!**************************************************€€******************_^1*_$ROUTINE TO SETUP POINTERS FOR A LINK TO THE CREP TABLE_^1*_!********************************************************************_^1_%SPC 1_^1LCREP NOP 0_^1_%LDA- ENTST0,I_$SET THE START OF THE ENTRY POINT TABLE_^1_%STA- ENTPGS,I_$TO POINT TO THE START OF THE CREP TABLE._^1_%LDA- ECREP,I_%SET THE END OF THE ENTRY POINT TABLE_^1_%STA- MAXENT,I_$TO POINT TO €€THE END OF THE CREP TABLE_^1_%JMP* (LCREP)_^1_%SPC 10_^1*_!********************************************************************_^1*_$ROUTINE TO SETUP POINTERS FOR A LINK TO THE CREP1 TABLE_^1*_!********************************************************************_^1_%SPC 1_^1LCREP1 NOP 0_^1_%LDA- ENTST1,I_$SET THE START OF THE ENTRY POINT TABLE TO_^1_%STA- ENTPGS,I_$POINT TO THE €€START OF THE CREP1 TABLE._^1_%LDA- ECREP1,I_$SET THE END OF THE ENTRY POINT TABLE TO_^1_%STA- MAXENT,I_$POINT TO THE END OF THE CREP1 TABLE._^1_%JMP* (LCREP1)_^1_%EJT 1_^1*_!********************************************************************_^1*_*ROUTINE FOR BACKGROUNDING INPUT BUFFER_^1*_!********************************************************************_^1BACKGR ADC 0_)ADDR €€FROM WHENCE WE CAME_^1_%LDQ ISAV_)RESTORE INDEX I_^1_%LDA- INPADR,Q_!ADDR OF INPUT BUFFER_^1_%INA -1_^1_%STA- I_)TO INDEX I_^1_%ENQ 59_^1_%SET A_)SET A TO ALL ONES_^1BG10_!STA- 1,B_'ALL ONES TO INPUT BUFFER_^1_%INQ -1_^1_%SQM BG20-*-1_!MINUS IMPLIES BUFFER BACKGROUNDED_^1_%JMP* BG10_^1BG20_!LDA ISAV_)RESTORE INDEX I_^1_%STA- I_,ONE OF CONTAB_^1_%JMP* (BACKGR)_!RETURN_^1_%EJT€€ 1_^1*_!********************************************************************_^1*_$ROUTINE FOR OUTPUTTING THE MESSAGE_^1*_?ERROR XX_^1*_!********************************************************************_^1TYPEQ ADC 0_)A = ERROR NBR ON ENTRY_^1_%JMP* TYPEQ9_#Q = 0 IF ERROR, 1 OTHERWISE_^1TYPEQ1 ADC 0_^1_%SQZ QERR-*-1_^1_%JMP* QOUT_^1QERR_!LDQ ISAV_)RESTORE INDEX I_^1_%STQ- €€I_^1_%RTJ- CONVRT,I_!CONVERT NBR IN A REG_^1_%LDQ- INPADR,I_!ADDR OF INPUT BUFFER_^1_%LDA- BINASC+1,I_"CONVERSION RESULTANT_^1_%ARS 8_)TEST LEFT HALF CHARACTER_^1_%INA -$30_)FOR A ZERO_^1_%SAN TYPEQ2-*-1_!NON-ZERO IF NUMBER_^1_%LDA- BINASC+1,I_"CHANGE ZERO TO A BLANK_^1_%SUB =N$1000_^1_%JMP* TYPEQ3_^1TYPEQ2 LDA- BINASC+1,I_"CONVERSION RESULTANT_^1TYPEQ3 STA* ERNBR_$STORE IN OUT€€PUT BUFFER_^1_%LDA* TYPEQ1_#ADDRESS OF QBUFR_^1_%INA 1_)ADDRESS OF EBUFR_^1_%ENQ 5_)5 WORDS OUT_^1_%RTJ TELOUT_'OUTPUT MESSAGE TO TELETYPE_^1_%SPC 5_^1*_!********************************************************************_^1*_$ROUTINE FOR OUTPUTTING Q TO THE COMMENT DEVICE_^1*_]_^1*_!********************************************************************_^1QOUT_!LDA* TYPEQ1_#ADDR€€ESS OF QBUFR_^1_%LDQ ISAV_)RESTORE INDEX I_^1_%STQ- I_^1_%ENQ 1_^1_%RTJ TELOUT_'OUTPUT MESSAGE TO TELETYPE_^1_%RTJ* BACKGR_^1_%LDA- INPADR,I_!ADDR OF INPUT BUFFER_^1_%JMP CM45_^1TYPEQ9 RTJ* TYPEQ1_^1QBUFR NUM $0A51_$LINE FEED AND CHARACTER Q_^1EBUFR NUM $0A45_$LINE FEED AND CHAR_!E_^1_%ALF 3,RROR_%ERROR MESSAGE_^1ERNBR ADC 0_)ASCII ERROR NBR_^1QTYPE CLR Q_)ERROR IF Q =€€ 0_^1_%RTJ TYPEQ_$TYPE ERROR AND Q, COMM MED_^1_%EJT 1_^1*_!********************************************************************_^1*_$PROCESS *I, *O, AND *C CONTROL STATEMENTS_^1*_]_^1*_1ACCEPTABLE LU ASSIGNMENTS_^1*_1INPUT................LU_^1*_1PAPER TAPE_*1_^1*_1CARD_12_1**MSOS 4.1**_^1*_1MAG TAPE_,3_2**MSOS 4.1**_^1*_]_^1*_1OUTPUT...............LU_^1*_1DISK_04_^1*_1DRUM_05_^1€€*_]_^1*_1LIST.................LU_^1*_1TELETYPE_,6_^1*_1PRINTER_-7_^1*_1DUMMY_/8_^1*_!********************************************************************_^1_%SPC 2_^1STARI ENA 0_,PROCESS STATEMENT OF FORM *I,LU,EQUIP_^1_%JMP* SETIO_^1_%SPC 2_^1STARO ENA 1_,PROCESS STATEMENT OF FORM *O,LU,EQUIP_^1_%JMP* SETIO_^1_%SPC 2_^1STARC ENA 2_,PROCESS STATEMENT OF FORM *C,LU,EQUIP_^1€€_%SPC 2_^1SETIO STA* SWTHIO_'0=INPUT, 1=OUTPUT, 2=LIST_^1_%RTJ COMMA_(IS DELIMETER A COMMA_^1_%JMP* ILDEL_(NO, TYPE ERROR E, Q_^1_%ENA 8_,YES, PICKUP LOGICAL UNIT NUMBER_^1_%STA- SCANSW,I_$SETTING BIT 3 OF SCANSW SAYS FETCH A NAME_^1_%CLR A_,OR DECIMAL NUMBER_^1_%RTJ- SCAN,I_^1_%LDA- SYMSTR,I_$IF SYMSTR EQUALS ZERO THE FIELD WAS NUMERIC_^1_%SAZ OKNB-*-1_^1NOKNB ENA 8_,NAME €€APPEARS IN NUMBER FIELD_^1_%JMP* QTYPEX_'TYPE ERROR 8, Q_^1OKNB_!LDQ- SCNINP,I_$PICKUP BINARY VALUE OF NUMBER_^1_%ADQ TABLE_(IS THE NUMBER VALID (TABLE= -MAXLU-1 )_^1_%SQM LUOK-*-1_$YES_^1STIOER ENA $12_*NO, TYPE ERROR 12, Q_^1QTYPEX JMP QTYPE_^1LUOK_!LDQ SCNINP,I_^1_%RTJ* ABS_*CALCULATE THE ABSOLUTE ADDRESS_"**MSOS 4.1**_^1ABS_"NUM 0_,OF THE L. U. TABLE_/**MSOS 4.1**_^1_%LDA€€* ABS_L**MSOS 4.1**_^1_%ADD* REL_L**MSOS 4.1**_^1_%ADD* ATABLE_I**MSOS 4.1**_^1_%AAQ A_,ADDRESS OF THIS L.U. ENTRY_'**MSOS 4.1**_^1_%LDQ TABLE,Q_%REL. ADDRESS OF THIS L.U. DRIVER **MSOS 4.1**_^1_%AAQ Q_N**MSOS 4.1**_^1_%LDA* (ZERO),Q_$IS THE REQUIRED MODULE LOADED_#**MSOS 4.1**_^1_%SAZ DEVDEF_'YES_>**MSOS 4.1**_^1_%INA 0_N**MSOS 4.1**_^1_%SAN DEVDEF-*-1_"YES_^1_%JMP* STIOER_€€'NO, OUTPUT ERROR 12, Q_^1ATABLE ADC TABLE_J**MSOS 4.1**_^1REL_"ADC ATABLE-ABS_E**MSOS 4.1**_^1ZERO_!NUM 0_N**MSOS 4.1**_^1DEVDEF LDA SCNINP,I_G**MSOS 4.1**_^1_%LDQ SWTHIO_^1_%STA* IN,Q_)STORE ADDRESS OF DRIVER IN UNIT WORD_^1_%RTJ* VALID_(IS DELIMITER BLANK OR CARRIAGE RETURN_^1_%SQN OKNB1-*-1_#NO, CHECK FOR COMMA_^1_%JMP* CM44EX_'YES, TYPE Q AND INTERROGATE COMMENT MEDIUM_^€€1OKNB1 RTJ COMMA_(IS DELIMETER A COMMA_^1_%JMP* ILDEL_(NO, OUTPUT ERROR E, Q_^1_%RTJ GETHEX_'YES, GET EQUIPMENT CODE_^1_%LDA- SYMSTR,I_$IS FIELD NUMERIC_^1_%SAZ OKNB2-*-1_#YES_^1_%JMP* NOKNB_(NO,OUTPUT ERROR 8, Q_^1OKNB2 RTJ* VALID_(IS DELIMETER BLANK OR CARRIAGE RETURN_^1_%SQZ OKNB3-*-1_#YES_^1_%JMP* ILDEL_(NO, OUTPUT ERROR E, Q_^1OKNB3 LDA- SCNINP,I_$PICKUP FOUR DIGIT EQUI€€PMENT CODE_^1_%LDQ* SWTHIO_'PICKUP INDEX TO CONTROL STATEMENT TYPE_^1_%LDQ* IN,Q_)PICKUP LOGICAL UNIT BEING SETUP BY STATEMENT_^1_%STQ* SWTHIO_'SAVE LOGICAL UNIT_^1_%QLS 1_,MULTIPLY LOGICAL UNIT BY THREE TO_^1_%ADQ* SWTHIO_'FORM INDEX TO UNIT TABLE_^1_%JMP* IN,Q_)STORE EQUIP CODE THEN GET NEXT STATEMENT_^1DUMMY NUM 0_,SLOT FOR DUMMY DEVICES_^1ILDEL ENA 14_+ERROR E, ILLEGAL FIE€€LD DELIMETER_^1TYPIO JMP* QTYPE_(OUTPUT ERROR XX, Q_^1SWTHIO NUM 0_,SWITCH DEFINING I/O DEVICE TYPE_^1IN_#NUM 0_,INPUT UNIT_^1OU_#NUM 0_,OUTPUT UNIT_^1CO_#NUM 0_,COMMENT UNIT_^1_%STA EPTAPE_'SAVE EQUIPMENT FOR PAPER TAPE_#**MSOS 4.1**_^1_%JMP* CM44EX_^1_%STA ECARD_(SAVE EQUIPMENT FOR CARD READER_"**MSOS 4.1**_^1_%JMP* CM44EX_^1_%STA EMTAPE_'SAVE EQUIPMENT FOR MAG TAPE_%**MS€€OS 4.1**_^1_%JMP* CM44EX_^1_%STA EDISK_(SAVE EQUIPMENT FOR DISK_***MSOS 4.1**_^1_%JMP* CM44EX_^1_%STA EDRUM_(SAVE EQUIPMENT FOR DRUM_***MSOS 4.1**_^1_%JMP* CM44EX_^1_%STA ECOM_)SAVE EQUIPMENT FOR COMMENT_'**MSOS 4.1**_^1_%JMP* CM44EX_^1_%STA EPRINT_'SAVE EQUIPMENT FOR PRINTER_'**MSOS 4.1**_^1_%JMP* CM44EX_^1_%STA DUMMY_(SLOT FOR DUMMY DEVICE_/L.U. 8_^1CM44EX JMP CM44_)NO, PRO€€CESS NEXT CONTROL STATEMENT**MSOS 4.1**_^1_%EJT 1_^1*_!********************************************************************_^1*_#TEST FOR BLANK OR CARRIAGE RETURN AS FIELD TERM_^1*_!********************************************************************_^1VALID ADC 0_)TEST FOR BLANK OR CARR RET_^1_%RTJ OETERM_#FETCH TERMINATOR_^1_%INQ -1_(TEST CONST FOR CARR RETURN_^1_%SQN VAL10€€-*-1_^1_%JMP* (VALID)_"CARRIAGE RETURN_^1VAL10 INQ -2_(TEST CONST FOR BLANK_^1_%JMP* (VALID)_"RETURN_^1_%SPC 5_^1*_!********************************************************************_^1*_#COMPUTE NEXT MASS STORAGE SECTOR NUMBER_^1*_!********************************************************************_^1NXTSEC ADC 0_^1_%CLR Q_^1_%DVI =N96_%96 WORDS PER SECTOR_^1_%SQZ NXT10-€€*-1 ZERO IMPLIES NO REMAINDER_^1_%INA 1_^1NXT10 ADD LSSECT_#LSB OF MASS STG SECT NBR_^1_%STA LSSECT_#LSB OF MASS STG SECT NBR_^1_%JMP* (NXTSEC)_^1_%EJT 1_^1*_#R O U T I N E_"T O_"P R O C E S S_"* S , N A M E , H H H H_^1_%SPC 1_^1*_#C O N T R O L_"S T A T E M E N T_^1_%SPC 5_^1*_$STATEMENT_!*S,NAME,H H H H_!WHERE NAME IS A ONE TO SIX_^1*_$CHARACTER NAME THAT WILL BE ENTERED€€ INTO THE LOADER TABLE_^1*_$WITH A VALUE OF H H H H. IF THE *S STATEMENT IS ENTERED BEFORE_^1*_$THE FIRST *LP STATEMENT, THEN THE NAME AND ENTRY POINT WILL_^1*_$RESIDE IN THE CREP TABLE AT TERMINATION OF INITIALIZATION._^1*_$IF THE *S STATEMENT FOLLOWS THE FIRST *LP STATEMENT, THEN_^1*_$THE NAME AND VALUE WILL RESIDE IN THE CREP1 TABLE AFTER_^1*_$INITIALIZATION IS COMPLETED._^1*_]_€€^1STARS RTJ COMMA_(IS DELIMETER COMMA_^1SERR1 JMP* ILDEL_(NO, TYPE ERROR E, Q_^1_%ENA 8_,SET BIT 3 OF SCAN SWITCH SAYING PICKUP AN_^1_%STA- SCANSW,I_$ASCII FIELD, SAVE THE ASCII CHARACTER CODES_^1_%CLR A_,IN THE SYMSTR BLOCK, AND IF THE FIELD IS_^1_%RTJ- SCAN,I_'NUMERIC CONVERT THE NUMBER TO BINARY._^1_%RTJ COMMA_(IS FIELD DELIMETER A COMMA_^1_%JMP* SERR1_(NO, TYPE ERROR E, Q€€_^1_%LDA- SYMSTR,I_$YES, CHECK FOR NAME AND SAVE IT_^1_%SAZ SERR2-*-1_#SYMSTR=0 IF A NUMERIC OPERAND WAS PROCESSED_^1_%SUB- BLANKS,I_$CHECK TO SEE IF NAME FIELD WAS BLANK_^1_%SAN SOK1-*-1_$NOT BLANK_^1SERR2 ENA 2_,OUTPUT ERROR 2 - NUMBER APPEARS IN NAME FIELD_^1_%JMP* TYPIO_(OR NAME FIELD IS BLANK_^1SOK1_!LDA- SYMSTR,I_$NAME OCCURRED SO SAVE IT_^1_%STA* ENTRY_^1_%LDA- SYMSTR+1,€€I_^1_%STA* ENTRY+1_^1_%LDA- SYMSTR+2,I_^1_%STA* ENTRY+2_^1_%RTJ* LOCENT_'RETURN JUMP TO THE NEXT EXECUTABLE STATEMENT_^1_%BZS ENTRY(3)_$SO THE ADDRESS OF THE CODES FOR THIS NAME_^1VALUE ADC 0_,CAN BE PASSED TO THE LOADER_^1LOCENT NOP 0_,ADDRESS OF ENTRY NAME IS STORED HERE BY RTJ_^1_%RTJ GETHEX_'PICKUP HEX FIELD_^1_%RTJ* VALID_(WAS DELIMETER CARRIAGE RETURN OR BLANK_^1_%SQZ S€€OK2-*-1_$YES_^1_%JMP* ILDEL_(NO, OUTPUT ERROR E, Q_^1SOK2_!LDA- SYMSTR,I_$WAS FIELD NUMERIC_^1_%SAN TESTAL-*-1_"NO_^1_%LDA- SCNINP,I_$YES, PICKUP THE VALUE_^1VALU_!STA* VALUE_(AND SAVE IT_^1_%JMP* LDRTAB_'MAKE ENTRY TO LOADER TABLE_^1TESTAL ARS 8_,COME HERE IF FIELD 2 IS NOT NUMERIC_^1_%INA -$50_)IS THE FIELD P_^1_%SAN NOTP-*-1_$NO_^1_%LDA- PROBAS,I_$IF FIELD CONTAINED P AS FIR€€ST CHARACTER, THEN_^1_%JMP* VALU_)SET THE ENTRY POINT TO THE PROGRAM BASE_^1NOTP_!INA -3_+IS THE FIELD S_^1_%SAZ SOK3-*-1_$NO,_^1_%JMP* SERR2_(ILLEGAL STATEMENT FORMAT_^1SOK3_!LDA LSSECT_'YES, PICKUP THE LSB OF CURRENT MASS STORAGE_^1_%JMP* VALU_)SECTOR AS VALUE FOR ENTRY POINT_^1LDRTAB STA- ENTPNT,I_$VALUE ASSOCIATED WITH ENTRY POINT NAME_^1_%LDA* LOCENT_^1_%STA- INPCTR,I_$ADDR€€ESS OF ENTRY POINT NAME_^1_%RTJ- TABSCH,I_$IS THIS NAME ALREADY IN THE LOADER TABLE_^1_%LDQ- SW6,I_^1_%SQM NIN-*-1_%NO, GO DOWN AND PUT IT INTO THE TABLE_^1_%JMP* CM20EX_'YES, IGNORE THIS *S STATEMENT_^1NIN_"ENA 4_^1_%SUB- CSNAME,I_$IS THIS AN *M OR *MP LOAD_^1_%SAP NIN1-*-1_$NO, STORE ENTRY_^1_%LDA- ECREP,I_%YES, BUMP END OF CREP TABLE_^1_%INA 4_^1_%STA- ECREP,I_^1NIN1_!RTJ E€€NTSTR_'PUT NEW ENTRY POINT INTO TABLE_^1CM20EX JMP CM20_)GET NEXT CONTROL STATEMENT_^1LSSECT NUM 0_,STARTING COMMAND SEQUENCE SECTOR_^1_%EJT 1_^1_%SPC 5_^1*_]_^1* *********************************************************************_^1*_]_^1*_1PROCESS *U STATEMENT_^1*_]_^1* *********************************************************************_^1STARU RTJ* VALID_(IS DELIMET€€ER CR OR BLANK_^1_%SQN ILDEL2-*-1_^1_%CLR A_)YES, SET FOR INITIALIZER TO INTERROGATE_^1_%STA- INMED,I_"COMMENT MEDIUM._^1_%JMP CM44_%*U..TYPE Q, INTERROGATE COMMENT MEDIUM_^1*_]_^1* *********************************************************************_^1*_]_^1*_1PROCESS *V STATEMENT_^1*_]_^1* *********************************************************************_^1STARV RTJ*€€ VALID_(IS DELIMETER CR OR BLANK_^1_%SQN ILDEL2-*-1_^1_%ENA 1_)YES, SET FOR INITIALIZER TO INTERROGATE_^1_%STA- INMED,I_"INPUT MEDIUM._^1_%LDA- INPADR,I_!*V..FETCH NEXT INPUT FROM SIB_^1_%JMP CM50_^1ILDEL2 JMP* SERR1_(TYPE ERROR E, Q_^1*_]_^1***************************************************************_^1*_\*_^1*_.PROCESS *D STATEMENT_9*_^1*_\*_^1******************************€€*********************************_^1*_]_^1STARD RTJ* VALID_(IS DELIMITER CARRIAGE RETURN_^1*_8OR A BLANK_^1_%SQZ CONT_^1_%JMP* ILDEL2_^1CONT_!ENA 0_,ZERO TO RELOCATION_^1_%STA- DATBAS,I_$BASE FOR DATA STORAGE_^1_%STA- DATLIM,I_$HIGHEST ADDR.DATA STG+1_^1_%CLR A,Q_^1_%RTJ ILOAD_(LOAD THE PROGRAM_^1_%JMP CM65_)GO PROCESS NEXT CONTROL STATEMENT_^1_%EJT_]_^1**********************€€**************************************************_^1*_]_'*_^1*_8PROCESS *G STATEMENT_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1STARG RTJ* VALID_(CHECK VALID DELIMITER_^1_%SQZ VALOK_^1_%JMP* ILDEL2_'ERROR * AND REQUEST WITH Q_^1VALOK LDQ_!EDISK_(GET DISK STATUS ADDRESS_^1_%INP ERDISK-*_$TAKE STATUS TO DETERMINE ACTIVE DIS€€K_^1_%RTJ* WAT_*GET ADDRESS_^1_%ALF 15,ENABLE ADDRESS WRITE--THEN CR_^1_%NUM $0D0A_(CR,LF_^1WAT_"NUM 0_^1_%ENQ 16_,WRITE 16 WORDS_^1_%LDA* WAT_*OUTPUT BUFFER ADDRESS_^1_%RTJ TELOUT_'WRITE MESSAGE_^1_%CLR Q_,READ CR ENTRY_^1_%LDA- INPADR,I_^1_%RTJ QCOM_^1_%SET A_,SET FLAG FOR ADDRESS WRITE_^1_%RTJ QDISK_(WRITE TAGS_^1_%SAZ DKERR_((A)=0 INDICATES ERROR_^1_%JMP CM65_)NO ERRO€€R -- PRINT Q_^1DKERR RTJ* DSKER_(PRINT ERROR_^1_%ALF 06,DISK ERROR_^1_%NUM $0D0A_^1DSKER NUM 0_^1_%ENQ 7_,PRINT ERROR MESSAGE_^1_%LDA* DSKER_^1_%RTJ TELOUT_^1_%JMP CM65_)GO TO PRINT Q_^1ERDISK NOP 0_,REJECT PATH_^1_%RTJ* DISKER_^1_%ALF 6,DISK REJECT_^1_%NUM $0D0A_^1DISKER NUM 0_^1_%ENQ 7_,PRINT REJECT MESSAGE_^1_%LDA* DISKER_^1_%RTJ TELOUT_^1_%JMP CM65_)GO TO PRINT Q€€_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8PROCESS *H STATEMENT_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1STARH RTJ COMMA_(IS DELIMITER A COMMA_^1_%JMP* ILDEL2_'NO, ERROR E_^1_%RTJ GETHEX_'GET STOP SECTOR_^1_%LDA- SYMSTR,I_$CHECK NUMERIC FIELD_^1_%SAZ OKNH_^1_%JMP €€ NOKNB_(NO, ERROR 8_^1OKNH_!LDA- SCNINP,I_$SAVE STOP SECTOR NUMBER_^1_%STA TSECT_^1_%RTJ VALID_(CHECK FOR CR OR BLANK_^1_%SQZ TERMH_^1_%JMP* ILDEL2_'NO, ERROR E_^1TERMH SET A_,FIRST PATTERN - ALL ONES_^1_%STA* PTN_^1_%LDA- I_^1_%STA* PTNI_)SAVE TABLE POINTER_^1_%RTJ* SETPTN_^1_%SET A_^1_%STA* PTN1_^1_%RTJ* WPTN_^1_%RTJ* RPTN_^1_%LDA =N$5555_%PATTERN $5555_^1_%STA* PTN_^1_%CL€€R A_^1_%STA* PTN1_^1_%RTJ* SETPTN_^1_%RTJ* WPTN_^1_%RTJ* RPTN_^1_%LDA =N$AAAA_%PATTERN $AAAA_^1_%STA* PTN_^1_%RTJ* SETPTN_^1_%RTJ* WPTN_^1_%RTJ* RPTN_^1_%CLR A_,PATTERN 0_^1_%STA* PTN_^1_%RTJ* SETPTN_^1_%RTJ* WPTN_^1_%RTJ* RPTN_^1_%JMP CM65_)COMPLETED_^1_%SPC 4_^1SETPTN NUM 0_,SET BUFFER TO PATTERN_^1_%ENQ 95_^1PTNSET STA PTNBUF,Q_^1_%INQ -1_^1_%SQM RTNPTN_^1_%JMP* PTNSET€€_^1RTNPTN JMP* (SETPTN)_^1PTN_"NUM 0_^1_%SPC 4_^1WPTN_!NUM 0_,WRITE DATA_^1_%ENQ -4_^1_%STQ CURSCT_^1LWPTN STQ- I_^1_%RTJ* FWA_^1FWA_"NUM 0_^1_%LDA* FWA_*COMPUTE BUFFER ADDRESS_^1_%ADD =XPTNBUF-FWA_^1_%ENQ -96_^1_%RTJ QDISK_(WRITE SECTOR_^1_%SAM GODY_)SKIP, NO ERROR_^1_%TRQ A_^1_%INA -7_^1_%SAN BADERR_'SKIP NO COMPARE ERROR_^1_%LDA* PTN1_^1_%SAM GODY_)FIRST WRITE--CO€€MPARE OK_^1BADERR JMP* PTNERR_'PRINT ERROR_^1GODY_!RAO- I_,CHECK LIMITS_^1_%LDA- I_^1_%INA 4_^1_%SUB TSECT_^1_%SAZ WDONE_(SKIP IF ALL WRITTEN_^1_%JMP* LWPTN_(DO MORE_^1WDONE JMP* (WPTN)_^1PTN1_!NUM 0_^1PTNI_!NUM 0_^1TBECT NUM 0_^1_%SPC 4_^1RPTN_!NUM 0_,READ DATA_^1_%ENQ -4_^1_%STQ CURSCT_^1LRPTN STQ- I_^1_%RTJ* RFWA_^1RFWA_!NUM 0_,READ DATA SUBROUTINE_^1_%LDA* RFWA_^1€€_%ADD =XPTNBUF-FWA COMPUTE BUFFER ADDRESS_^1_%ENQ 96_^1_%RTJ QDISK_(READ SECTOR OF DATA_^1_%SAM RGODY_^1_%JMP* PTNERR_'DISK ERROR - PRINT MESSAGE AND EXIT_^1RGODY ENQ 95_+LOOP TO CHECK PATTERN_^1RGODYA LDA* PTNBUF,Q_^1_%EOR* PTN_^1_%SAN NOMTCH_'ZERO INDICATES GOOD MATCH_^1_%INQ -1_+SEE IF SECTOR DONE_^1_%SQM SECNXT_^1_%JMP* RGODYA_'MORE THIS SECTOR_^1SECNXT JMP* BMPSCT_'G€€O TO NEXT SECTOR_^1NOMTCH LDA- I_,ERROR -- FORMAT AND PRINT ERROR INFO_^1_%STA CURSCT_^1_%LDQ* PTNI_)FAILED SECTOR_^1_%STA- I_^1_%LDA CURSCT_^1_%RTJ- CONVRT,I_$CONVERT TO ASCII_^1_%LDA- BINASC,I_$STORE IN MESSAGE BUFFER_^1_%STA* COMBUF+13_^1_%LDA- BINASC+1,I_^1_%STA* COMBUF+14_^1_%TRQ A_,FAILED WORD_^1_%RTJ- CONVRT,I_^1_%LDA- BINASC,I_^1_%STA* COMBUF+18_^1_%LDA- BINASC+1,I_^1_%S€€TA* COMBUF+19_^1_%LDA* PTNBUF,Q_$BAD PATTERN READ_^1_%RTJ- CONVRT,I_^1_%LDA- BINASC,I_^1_%STA* COMBUF+22_^1_%LDA- BINASC+1,I_^1_%STA* COMBUF+23_^1_%LDA* PTN_*EXPECTED PATTERN_^1_%RTJ- CONVRT,I_^1_%LDA- BINASC,I_^1_%STA* COMBUF+26_^1_%LDA- BINASCP1,I_^1_%STA* COMBUF+27_^1_%RTJ* COMMSG_'PRINT MESSAGE_^1COMBUF ALF 28,DISK COMPARE ERROR_!SECT XXXX WORD XXXX IS XXXX SB XXXX_^1_%NUM $0€€D0A_^1COMMSG NUM 0_^1_%LDA* COMMSG_^1_%ENQ 29_^1_%RTJ TELOUT_^1BMPSCT LDA CURSCT_'LOOK AT NEXT SECTOR- ONE ERROR PR SECTOR_^1_%INQ 1_,HAVE ALL SECTORS BEEN READ_^1_%TRQ A_^1_%INA 4_^1_%SUB* TSECT_^1_%SAZ RDONE_(ZERO INDICATES ALL DONE_^1_%JMP* LRPTN_(GO TO NEXT SECTOR_^1RDONE JMP* (RPTN)_'RETURN - ALL READS DONE_^1_%SPC 4_^1PTNERR LDA* PTNI_)DISK FAILURE ERROR_^1_%STA- I_€€^1_%TRQ A_^1_%RTJ- CONVRT,I_$CONVERT ERROR TO ASCII_^1_%LDA- BINASC,I_$STORE IN MESSAGE_^1_%STA* DFAIL+7_^1_%LDA- BINASC+1,I_^1_%STA* DFAIL+8_^1_%RTJ* FALMSG_'PRINT MESSAGE_^1DFAIL ALF 09,DISK FAILURE XXXX_^1_%NUM $0D0A_^1FALMSG NUM 0_^1_%LDA* FALMSG_^1_%ENQ 10_^1_%RTJ TELOUT_^1_%JMP CM65_)FATAL ERROR -- EXIT FOR NEXT OPR INPUT_^1PTNBUF BZS PTNBUF(96)_^1TSECT NUM 0_^1CU€€RSCT NUM 0_^1_%EJT 1_^1*_$R O U T I N E_"T O_"P R O C E S S_"* T_^1_%SPC 5_^1START RTJ WRTOUT_'WRITE OUT THE RESULT OF THE LAST *M OR *MP_^1_%ENA 0_^1_%STA- CORADR,I_$RESET THE START OF THE PAGING AREA TO ZERO_^1_%LDA- FLGBS1,I_$RESET THE BASE OF THE FLAG TABLE TO_^1_%STA- FLGBSE,I_$THE FLAGS FOR SYSTEM PAGES_^1_%LDA- SYSPGE,I_$REBUILD THOSE PAGES WRITTEN OUT TO_^1_%STA- NOPA€€GE,I_$MAKE ROOM FOR *M AND *MP LOADS_^1_%LDA LENSDT_'SETUP COUNTER EQUAL TO THE COMPLIMENT66*1455_^1_%TCA A_,OF THE NUMBER OF PAGES (LENSDT)_^1_%STA* PCOUNT_^1_%LDQ- FLGBSE,I_$PICKUP THE START OF THE FLAG TABLE_^1T0_#ENA 1_^1_%STA- MODIFY,Q_$SET THE MODIFIED FLAG FOR THIS PAGE_^1_%RAO* PCOUNT_'INCREMENT THE PAGE COUNTER_^1_%LDA* PCOUNT_'HAS THE FLAG BEEN SET FOR ALL LENSDT PAGES€€_^1_%SAZ T0A-*-1_%YES_^1_%INQ 3_,NO,INCREMENT POINTER TO THE NEXT SET OF FLAGS_^1_%JMP* T0_+LOOP BACK TO SET NEXT FLAG_^1T0A_"LDA LSSECT_'TEMPORARILY SAVE LSSECT_^1_%STA* TMPSEC_^1_%ENA 1_,RESTORE LSSECT SO THAT IT WILL POINT TO_^1_%STA LSSECT_'THE START OF CORE IMAGE_^1_%LDA LENSDT_'NUMBER OF CORE RESIDENT PAGES_'66*1455_^1_%MUI- FLGLGN,I_$MULTIPLY BY THE NUMBER OF FLAGS/PA€€GE AND_^1_%ADD- FLGBSE,I_$ADD ON THE BASE OF THE FLAG TABLE TO_^1_%STA* BLDADD_'FIND THE START OF THE PAGES TO REBUILD_^1_%LDA LENSDT_'NUMBER OF CORE RESIDENT PAGES_'66*1455_^1_%SUB- NOPAGE,I_$COMPUTE A COUNTER FOR THE PAGES TO BE_^1_%STA* PCOUNT_'READ IN FROM MASS STORAGE_^1_%LDA LENSDT_'COMPUTE ADDRESS OF THE PAGE TO -_#66*1455_^1_%MUI- PAGE,I_'BE READ IN_^1_%STA* PAGADD_^1T1_#€€LDQ* BLDADD_'PICKUP THE BASE FLAG ADDRESS FOR REBUILD_^1_%LDA- PGENUM,Q_$READ THE PAGE BACK INTO CORE_^1_%RTJ FNDSEC_'CONVERT PAGE NUMBER TO SECTOR ADDRESS_^1_%LDA* PAGADD_'PICKUP ADDRESS TO READ INTO_^1_%RTJ MDRIV_(READ THE PAGE INTO CORE_^1_%LDQ ISAV_^1_%STQ- I_,RESTORE THE I-REGISTER_^1_%SAN T2-*-1_'SKIP IF NO ERROR_^1_%JMP* T21_*IRRECOVERABLE MASS STORAGE ERROR_^1T2_#RAO* P€€COUNT_'INCREMENT THE PAGE COUNTER_^1_%LDA* PCOUNT_'HAVE ALL PAGES BEEN READ BACK IN_^1_%SAZ T2A-*-1_%YES, GO ON TO LINK STAGE_^1_%LDQ* BLDADD_'UPDATE THE POINTER TO THE FLAGS FOR THE_^1_%INQ 3_,NEXT PAGE TO REBUILD_^1_%STQ* BLDADD_^1_%LDA* PAGADD_'INCREMENT THE ADDRESS COUNTER TO THE_^1_%ADD- PAGE,I_'CORE ADDRESS FOR THE NEXT PAGE_^1_%STA* PAGADD_^1_%JMP* T1_+GO TO GET NEXT PAGE_€€^1T2A_"LDA STRTEX_'RESTORE THE EXTERNAL POINTER TO THE START_^1_%STA- EXTSTR,I_$OF THE SYSTEM EXTERNAL TABLE_^1_%LDA ENDEXT_'RESTORE THE EXTERNAL POINTER TO THE END_^1_%STA- EXTCTR,I_$OF THE SYSTEM EXTERNAL TABLE_^1_%RTJ LCREP_(SETUP POINTERS FOR A LINK TO CREP_^1_%RTJ* T20_^1_%ALF 3,STMSV4_^1T20_"NOP 0_^1_%LDA* T20_^1_%STA- INPCTR,I_^1_%RTJ- TABSCH,I_$FIND THE ENTRY POINT STM€€SV4_^1_%LDQ- SW6,I_^1_%SQM T21-*-1_%SKIP IF STMSV4 NOT DEFINED_^1_%RTJ I2_+WRITE OUT THE AUTOLOAD SECTOR_^1_%LDQ ISAV_^1_%STQ- I_,RESTORE THE I-REGISTER_^1_%SAZ T21-*-1_%SKIP IF ERROR_^1_%JMP* T3_^1T21_"ENA $16_*IRRECOVERABLE MASS STORAGE ERROR_^1_%JMP QTYPE_^1T3_#LDA- COMBAS,I_$SET START OF SYSTEM COMMON_^1_%ENQ 16_+INTO THE EXTENDED CORE TABLE._^1_%STA- ($E9),Q_^1_%ENQ 10€€_+PICK UP UNPROTECTED FLAG FROM WORD_^1_%LDQ- ($E9),Q_%10 OF EXTENDED CORE TABLE_^1_%SQN T3A-*-1_%SKIP IF UNPROTECTED IN PART1_^1_%JMP* T10_*GO TO HANDLE UNPROTECTED IN PART 0_^1T3A_"LDA MSIZV4_^1_%SAZ T5-*-1_'SKIP IF MSIZV4 HAS NOT BEEN USED BY SI_^1T4_#STA- $F6_*SET F6 TO MSIZV4 (END OF PART1)_^1_%JMP* T6_^1T5_#RTJ LP11A_(GO TO GET MSIZV4_^1_%JMP* T4_^1T6_#LDA LPENDC_'WERE €€THERE ANY *LP LOADS_^1_%SAZ T8-*-1_'NO, USE LSTLOC FOR END OF PART1_^1T7_#STA- $F7_*YES, USE END OF *LP LOADS FOR END OF PART1_^1_%JMP* T11_^1BLDADD NUM 0_^1PCOUNT NUM 0_^1PAGADD NUM 0_^1TMPSEC NUM 0_^1T8_#LDA LSTLOC_'HAS LSTLOC BEEN DEFINED_^1_%SAZ T8A-*-1_%NO, SEE IF IT EXISTS_^1_%JMP* T7_+YES, USE LSTLOC FOR F7_^1T8A_"RTJ LCREP_(POINT TO CREP TO FIND LSTLOC_^1_%RTJ* T8B_€€^1_%ALF 3,LSTLOC_^1T8B_"NOP 0_^1_%LDA* T8B_^1_%STA- INPCTR,I_^1_%RTJ- TABSCH,I_^1_%LDQ- SW6,I_(IS LSTLOC DEFINED_^1_%SQP T8C-*-1_%YES, USE IT AS THE START OF UNPROTECTED_^1_%JMP* T9_+NO, USE END0V4 AS THE START OF UNPROTECTED_^1T8C_"INA -1_^1_%TRA Q_^1_%LDA- 1,Q_*PICKUP THE VALUE OF LSTLOC_^1_%INA -1_+DECREMENT TO THE END OF PROTECTED_^1_%JMP* T7_^1T9_#LDA END0V4_'USE END0V4€€ FOR F7_^1_%JMP* T7_^1T10_"LDA- COMBAS,I_$SET F6 = START OF SYSTEM COMMON_$61*1287_^1_%SAN 2_Q61*1287_^1_%LDA COMM0_M61*1287_^1_%STA- $F6_^1_%LDA LENDC_(SET F7 = END OF ALLOCATABLE_^1_%STA- $F7_^1T11_"LDA- $F6_*SETUP THE TEMPORARY BOUNDS OF UNPROTECTED_^1_%STA- $EC_^1_%LDA- $F7_^1_%STA- $ED_^1_%RTJ* T13_^1_%BZS OHS(96)_^1T13_"NOP 0_,ADDRESS OF 96 WORD BUFFER FOR I/O USE_^1_%LD€€A TMPSEC_^1_%STA LSSECT_'RESTORE NEXT AVAILABLE SECTOR_^1_%LDA- CSQCTR,I_$PICKUP LENGTH OF THE LAST LOAD_^1_%RTJ NXTSEC_'FIND THE NEXT EMPTY SECTOR AFTER THE SYSTEM_^1_%LDA LSSECT_'PICKUP FIRST PROGRAM LIBRARY DIRECTORY SECTOR_^1_%STA- $C4_^1_%ENQ -96_^1_%STQ* T13A_^1_%LDQ* T13_*PICKUP ADDRESS OF 96 WORD BUFFER_^1_%INQ 94_^1T13C_!CLR A_^1_%STA- 1,Q_*CLEAR A WORD OF THE BUFFE€€R_^1_%RAO* T13A_^1_%INQ -1_^1_%LDA* T13A_^1_%SAZ T13B-*-1_^1_%JMP* T13C_^1T13A_!NUM 0_^1T13B_!LDA* T13_^1_%LDQ LSSECT_^1_%STQ- I_^1_%ENQ -96_*WRITE THE FIRST SECTOR OF PROGRAM LIBRARY_^1_%RTJ MDRIV_(DIRECTORY FOR LIBEDT_^1_%SAN T13D-*-1_$SKIP IF NO ERROR_^1_%JMP T21_*IRRECOVERABLE MASS STORAGE ERROR_^1T13D_!LDA ISAV_^1_%STA- I_,RESTORE THE I-REGISTER_^1_%RTJ* T14A_^1_%ALF €€ 3,DATBAS_^1T14_"NUM 0_,ADDRESS OF SYSTEM DATA_^1T14A_!NOP 0_^1_%LDA- DATBAS,I_^1_%STA* T14_^1_%STA- ENTPNT,I_$SAVE THE ADDRESS ASSOCIATED WITH THE NAME_^1_%LDA* T14A_^1_%STA- INPCTR,I_^1_%RTJ ENTSTR_'SAVE DATBAS IN THE CREP TABLE_^1_%RAO LSSECT_'INCREMENT SECTOR COUNTER PAST LIBRARY DIRECT._^1_%LDA LSSECT_^1_%STA* SWAPSC_'SAVE STARTING SECTOR OF SWAP AREA_^1_%RTJ* T12_^1_%ALF€€ 3,SWAPAR_^1SWAPSC NUM 0_^1T12_"NOP 0_^1_%LDA* SWAPSC_^1_%STA- ENTPNT,I_$SAVE THE ADDRESS ASSOCIATED WITH THE NAME_^1_%LDA* T12_^1_%STA- INPCTR,I_$STUFF SWAPAR INTO CREP_^1_%RTJ ENTSTR_^1_%LDA- ECREP,I_%BUMP THE END OF THE CREP TABLE TO_^1_%INA 8_,INCLUDE THE TWO NEW ENTRIES_^1_%STA- ECREP,I_^1_%LDA- $F6_^1_%SUB- $F7_^1_%RTJ NXTSEC_'FIND STARTING SECTOR FOR CREP_^1_%LDA LSSE€€CT_^1_%ENQ 6_,PUT THE STARTING SECTOR OF THE CREP TABLE_^1_%STA- ($E9),Q_%INTO WORD 6 OF THE EXTENDED CORE TABLE_^1_%RTJ LCREP_(PICKUP THE MOST RECENT LENGTH OF THE CREP_^1_%LDA- ENTSEC,I_$PICKUP STARTING SECTOR OF CREP_^1_%RTJ* MOVDSK_'MOVE THE CREP TABLE UP ON THE DISK_^1_%LDA- MAXENT,I_^1_%SUB- ENTPGS,I_^1_%RTJ NXTSEC_'COMPUTE SECTOR FOR THE CREP1 TABLE_^1_%RTJ LCREP1_'SETUP€€ POINTERS FOR THE CREP1 TABLE_^1_%LDA- MAXENT,I_^1_%SUB- ENTPGS,I_$IS THERE A CREP1 TABLE_^1_%SAZ T12AA-*-1_#NO_^1_%SAP T12A-*-1_$YES,MOVE IT UP ON THE DISK_^1T12AA ENQ 7_,NO, STORE A ZERO IN WORD 7 OF THE_^1_%STA- ($E9),Q_%EXTENDED CORE TABLE AND GO ON TO SAT_^1_%JMP* T12B_^1T12A_!LDA LSSECT_^1_%ENQ 7_,PUT THE STARTING SECTOR OF THE CREP1_^1_%STA- ($E9),Q_%TABLE IN WORD 7 OF€€ EXTENDED CORE TABLE_^1_%LDA- ENTST1,I_$COMPUTE THE STARTING SECTOR OF CREP1_^1_%CLR Q_^1_%DVI- SECTOR,I_^1_%ADD- ENTSEC,I_^1_%RTJ* MOVDSK_'MOVE THE CREP1 TABLE UP ON THE DISK_^1_%LDA- MAXENT,I_^1_%SUB- ENTPGS,I_^1_%RTJ NXTSEC_^1T12B_!LDA LSSECT_^1_%ENQ 20_+PUT START OF EF DATA IN WORD 20_!**MSOS 4.1**_^1_%STA- ($E9),Q_(OF EXT. CORE TABLE_-**MSOS 4.1**_^1_%STA* EFSECT_'SAVE STA€€RTING SECTOR OF EF DATA_!**MSOS 4.1**_^1_%INA 99_+99 SECTORS OF EF DATA_,**MSOS 4.1**_^1_%ENQ 5_,PUT STARTING SECTOR OF SAT IN WORD 5_^1_%STA- ($E9),Q_%OF EXTENDED CORE TABLE_^1_%STA TMPSEC_'SAVE STARTING SECTOR OF SAT_^1_%INA 30_M**MSOS 4.1**_^1_%STA- $C1_*PUT START OF SCRATCH IN C1_^1_%STA* ENDBSY_^1_%ENA 1_^1_%ENQ 4_,PUT THE STARTING SECTOR OF THE CORE IMAGE_^1_%STA- ($E9)€€,Q_%INTO WORD 4 OF THE EXTENDED CORE TABLE_^1_%LDA LPENDC_'IS THERE A PART1 CORE RESIDENT_^1_%SAZ T22A-*-1_$NO, USE 15 BIT ARITHMETIC FOR PATCHING_^1_%ENA 1_,YES, USE 16 BIT ARITHMETIC FOR PATCHING_^1T22A_!STA- ARIT15,I_^1_%STQ- ARIT15,I_$SETUP FOR 15 BIT ARITHMETIC_^1_%RTJ LCREP_(PICKUP CREP POINTERS_^1_%ENA 1_^1_%STA LSSECT_'SETUP LSSECT TO POINT TO CORE IMAGE_^1_%RTJ ILOA€€D_(PATCH TO CREP USING 15 BIT ARITHMETIC_^1_%SQZ T30-*-1_%SKIP IF NO UNPATCHED EXTERNALS_^1_%RTJ LCREP1_'SWAP POINTERS TO LINK TO CREP1_^1_%ENA 1_^1_%STA- ARIT15,I_$ISSUE PATCH TO CREP1 USING 16-BIT ARITHMETIC_^1_%RTJ ILOAD_^1_%SQZ T30-*-1_%SKIP IF NO UNPATCHED EXTERNALS_^1_%RTJ ILOAD_(PRINT UNPATCHED EXTERNALS_^1T30_"ENA 1_^1_%RTJ WRTOUT_'WRITE CORE IMAGE AND CREP/CREP1 TA€€BLES_^1_%LDA TMPSEC_^1_%STA LSSECT_'RESTORE STARTING SECTOR OF SAT_^1_%JMP* BLDSAT_'GO TO BUILD SAT_^1COMM0 NUM 0_^1LENDC NUM 0_,LENGTH OF PART 0_^1LPENDC NUM 0_,LENGTH OF PART 1_^1MOVDSK NOP 0_^1_%STA* MOVE1_(SAVE SECTOR TO MOVE FROM_^1_%LDA- MAXENT,I_^1_%SUB- ENTPGS,I_$COMPUTE WORD LENGTH OF TABLE_^1_%CLR Q_^1_%DVI- SECTOR,I_$CONVERT WORD LENGTH TO SECTOR LENGTH_^1_%SQZ €€ MOV1-*-1_^1_%INA 1_^1MOV1_!TCA A_^1_%STA* MOVE2_^1_%LDA LSSECT_^1_%STA* MOVE3_^1MOV2_!LDA T13_*PICKUP ADDRESS OF 96 WORD BUFFER_^1_%LDQ* MOVE1_(PICKUP SECTOR ADDRESS FOR READ_^1_%STQ- I_^1_%ENQ 96_+SETUP WORD COUNT OF 96_^1_%RTJ MDRIV_(READ IN SECTOR_^1_%LDQ* MOVE3_(PICKUP SECTOR TO WRITE ON_^1_%STQ- I_^1_%ENQ -96_*COMPLEMENT WORD COUNT TO SIGNAL WRITE_^1_%LDA T13_*PICKUP €€BUFFER ADDRESS_^1_%RTJ MDRIV_(WRITE OUT THE SECTOR_^1_%RAO* MOVE1_(INCREMENT SECTOR TO READ_^1_%RAO* MOVE2_(INCREMENT SECTOR TO WRITE_^1_%RAO* MOVE3_(INCREMENT COMPLEMENT OF COUNT_^1_%LDA* MOVE2_(HAVE ALL SECTORS BEEN MOVED_^1_%SAZ MOV3-*-1_$YES - EXIT_^1_%JMP* MOV2_)NO, LOOP BACK FOR NEXT SECTOR_^1MOV3_!LDA ISAV_^1_%STA- I_,RESTORE THE I-REGISTER_^1_%JMP* (MOVDSK)_^1MOVE1 NUM €€ 0_,SECTOR TO BE READ_^1MOVE2 NUM 0_,COMPLEMENT OF NUMBER OF SECTORS TO MOVE_^1MOVE3 NUM 0_,SECTOR TO BE WRITTEN_^1_%EJT 1_^1* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ******_^1*_]_"*****_^1*_$THIS ROUTINE WILL WRITE THE SECTOR AVAILABILITY_,*****_^1*_$TABLE (SAT). THIS IS A 30-SECTOR TABLE CONTAINING A PICTURE*****_^1*_$OF ALL THE SECTORS ON THE DISK. €€ ONE BIT REPRESENTS EACH_"*****_^1*_$SECTOR. IF THE BIT IS ON--THIS SECTOR IS AVAILABLE FOR_"*****_^1*_$STORAGE OF THE PROGRAM LIBRARY AND DIRECTORY._.*****_^1*_$IF THE BIT IS ZERO, THIS SECTOR IS USED, EITHER BY SWAP AREA*****_^1*_$SYSTEM LIBRARY, OR PROGRAM LIBRARY AND DIRECTORY._******_^1*_$THE TABLE IS UPDATED BY LIBEDT, AND IS USED TO FIND HOLES_!*****_^1*_$FOR PROGRAMS IN T€€HE PROGRAM LIBRARY._7*****_^1*_]_"*****_^1* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ******_^1*_]_"*****_^1SATGO NUM 256_*STARTING WORD OF SAT (LATER LAST BUSY SECTOR )_^1SATCUR NUM 255_*CURRENT WORD BEING OPERATED ON_^1EFSECT NUM 0_N**MSOS 4.1**_^1ENDBSY NUM 0_,LAST SECTOR BUSY IN SAT_^1BSYWRD NUM 0_,LAST WORD BUSY IN SAT_^1SIXTEN NUM 16_^1ENDSAT NUM €€ 0_^1BLDSAT LDA =N$100_'SETUP STARTING WORD OF SAT_^1_%STA* SATGO_^1_%LDQ- BASE,I_^1_%INQ -10_^1_%CLR A_^1SAT0_!STA- 1,Q_*CLEAR ALL OF CORE BELOW THE INITIALIZER_^1_%INQ -1_+TO ZEROS_^1_%SQZ SAT1-*-1_^1_%JMP* SAT0_^1SAT1_!LDA =N$100_'MOVE EF DATA BLOCK OF ZEROS_%**MSOS 4.1**_^1_%LDQ* EFSECT_'POINTS TO EF BLOCK_/**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%LDQ =N-9504_%WRITE 99 €€SECTORS_1**MSOS 4.1**_^1_%RTJ MDRIV_J**MSOS 4.1**_^1_%LDA* ENDBSY_'COMPUTE THE BIT ADDRESS OF THE LAS**MSOS 4.1**_^1_%DVI* SIXTEN_'SECTOR TO SET BUSY_^1_%ADD* SATGO_^1_%INA 1_^1_%STA* SATGO_(SAVE LAST BUSY SECTOR_^1_%ENA 1_^1_%TCQ Q_^1SAT2_!INQ 1_,SET THE BITS FOR THE FIRST AVAILABLE SECTOR_^1_%SQZ SAT3-*-1_^1_%ALS 1_^1_%INA 1_,SKIP IF DONE WITH FIRST WORD_^1_%JMP* SAT2_)SE€€T THE NEXT SECTOR AVAILABLE_^1SAT3_!STA* (SATGO)_%SETUP THE FIRST WORD WITH AVAILABLE SECTORS_^1_%RAO* SATGO_^1_%LDA MAXSEC_^1_%CLR Q_^1_%DVI* SIXTEN_'FIND THE LAST WORD WITH AVAILABLE SECTORS_^1_%ADD* BLDSAT+1_$OFFSET LAST AVAILABLE WORD_^1_%INA 1_^1_%STA* ENDSAT_^1_%CLR A_^1_%SQZ SAT5-*-1_^1_%LDA =N$8000_^1SAT4_!INQ -1_+SETUP LAST WORD WITH AVAILABLE SECTORS_^1_%SQZ SAT5-€€*-1_^1_%ARS 1_^1_%JMP* SAT4_^1SAT5_!STA* (ENDSAT)_^1_%SET A_,PICKUP FIRST WORD TO BE SET FOR_^1SAT6_!STA* (SATGO)_^1_%RAO* SATGO_(INCREMENT STORAGE ADDRESS_^1_%LDQ* SATGO_^1_%TCQ Q_^1_%ADQ* ENDSAT_^1_%SQZ SATDON-*-1_^1_%JMP* SAT6_^1SATDON LDQ LSSECT_^1_%STQ- I_^1_%LDA =N$100_^1_%LDQ =N-2880_%SETUP WRITE OF 30 SECTORS_(**MSOS 4.1**_^1_%RTJ MDRIV_(WRITE SAT TABLE_^1_%LDA* ERF€€LAG_'WERE THERE ANY ERRORS_^1_%SAZ SAT9-*-1_$NO, PRINT AUTOLOAD MESSAGE_^1_%JMP* SAT10_(YES, PRINT AUTOLOAD ERROR MESSAGE_^1SAT9_!RTJ* SAT7_^1SAT8_!ALF 22,INITIALIZATION COMPLETED - YOU MAY AUTOLOAD_^1SAT7_!NOP 0_^1_%LDA* SAT7_)PICKUP BUFFER ADDRESS_^1_%ENQ SAT7-SAT8_^1_%RTJ TELOUT_^1_%NUM $18FF_^1SAT10 RTJ* SAT11_^1_%ALF *,ERRORS OCCURED - YOU MAY ATTEMPT TO AUTOLOAD*_^1SA€~T11 NOP 0_^1_%LDA* SAT11_^1_%ENQ SAT11-SAT10-1_^1_%RTJ TELOUT_^1_%NUM $18FF_^1ERFLAG NUM 0_^1TCODE NUM 0_^1_%END_]_^__~PILOAD CSY/ B27 P€1_%NAM ILOAD_(DECK-ID B27 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT ILOAD_^1_%ENT WRTOUT_^1_%ENT LENSDT_^1_%ENT DISKWR_^1_%ENT FNDSEC_^1_%EXT* ERFLAG_^1_%EXT* LSSECT_'NEXT AVAILABLE SECTOR FROM CONTRL_^1_%EXT* STRTBL_'€€BIT TABLE SAYING WHICH ENT/EXT PAGES ARE USED._^1_%EXT* ISAV_)STARTING ADDRESS OF LOADER TABLE_^1_%EXT* WRDADR_^1_%EXT* MDRIV_(MASS STORAGE DRIVER_^1_%EXT* QCOM_)INITIALIZER COMMENT DEVICE DRIVER **MSOS 4.1**_^1_%EXT* TELOUT_^1_%EXT* IDRIV_(STANDARD BINARY INPUT DRIVER_^1_%EXT* BACKGR_^1_%EXT* QTYPE_^1_%EXT* CM65_^1_%ENT PRNT3_^1_%ENT PRNT4_^1_%ENT PRNT5_^1_%ENT ADJOV1_^1_%ENT €€ CNVERT_^1_%ENT LINK11_^1_%ENT ENTSTR_'ROUTINE TO STORE AN ENTRY POINT IN LDR TABLE_^1_%ENT FLGADR_^1_%ENT ISCAN_^1_%ENT SCHTBL_^1_%ENT RWFLAG_^1_%ENT PGEFLG_^1_%ENT SA_^1_%ENT SQ_^1_%ENT VALUE_^1_%ENT WORD_^1_%ENT PAGENO_^1_%ENT LSTPGE_^1_%ENT MINREF_^1_%ENT MAXREF_^1_%ENT MINBAS_^1_%ENT ADPAGE_^1_%ENT FLGADR_^1_%ENT MINFLG_^1_%ENT NXTBLK_^1_%EJT 1_^1_%EQU Z€€ERO($22)_^1_%EQU PGENUM(1)_#CELL FOR PAGE NUMBER - IN FLAG TABLE ENTRY_^1_%EQU REFER(2)_$CLLL FOR NUMBER OF TIMES A PAGE HAS BEEN_^1*_8REFERENCED - IN FLAG TABLE ENTRY_^1_%EQU MODIFY(3)_#CELL TO INDICATE IF A PAGE HAS BEEN MODIFIED_^1*_8WHILE IN CORE. - IN FLAG TABLE ENTRY_^1*_80 = NOT MODIFIED, 1 = MODIFIED_^1_%EQU NUMSEC(1)_#NUMBER OF SECTORS PER PAGE_^1*_86 CARDS DELETED_56€€6*1455_^1*_$LOADER TABLE ENTRIES_^1_%EQU COMBAS(1)_#RELOCATION BASE FOR COMMON STORAGE_^1_%EQU DATBAS(2)_#RELOCATION BASE FOR DATA STORAGE_^1_%EQU PROBAS(3)_#RELOCATION BASE FOR PROGRAM BEING LOADED_^1_%EQU COMLIM(4)_#HIGHEST ADDRESS OF COMMON STORAGE +1_^1_%EQU DATLIM(5)_#HIGHEST ADDRESS OF DATA STORAGE +1_^1_%EQU CSQLIM(6)_#HIGHEST ADDRESS OF COMMAND SEQUENCE STORAGE +1_^1_€€%EQU EXTCTR(7)_#NEXT AVAILABLE LOCATION IN EXTERNAL TABLE_^1_%EQU ENDSW(8)_$=1 IF LAST BYTE IN RBD OR BZS BLOCK_^1_%EQU ABRLSW(9)_#0 IF ABSOLUTE EXTERNAL, 1 IF RELATIVE EXTERNAL_^1_%EQU BGRLSW(9)_#SWITCH TO INDICATE IF BACKWARD RELOCATION_^1*_8IS SPECIFIED WITH 16-BIT ARITHMETIC 1=YES,0=NO_^1_%EQU INPWRD(10)_"END OF COMMAND SEQUENCE STORAGE_^1_%EQU INPREL(11)_"CONTAINS RELATI€€VE FLAG FOR WORD OF COMMAND_^1*_8SEQUENCE IN RBD OR BZS BLOCK_^1_%EQU CSQNUM(12)_"NUMBER OF SECTORS RESERVED BEFORE START_^1*_8OF COMMAND SEQUENCE STORAGE_^1_%EQU ENTPNT(13)_"CONTAINS THE ADDRESS ASSOCIATED WITH THE_^1*_8NAME IN A ENTRY OR EXTERNAL BLOCK_^1_%EQU LINK(14)_$CONTAINS ADDRESS ASSOCIATED WITH NAME_^1*_8IN LOADER TABLE_^1_%EQU INPCTR(15)_"USED TO ADDRESS CORE LOCATIO€€N OF COMMAND_^1*_8SEQUENCE STORAGE AT LOAD TIME_^1*_8USED TO HOLD ADDRESS OF ENTRY FOR TABLE_^1*_8SEARCH AND TABLE STORE ROUTINES_^1_%EQU NOTLNK(16)_"FLAG =1 IF UNPATCHED EXTERNALS EXIST_^1_%EQU ENDINP(17)_"LAST STORAGE ADDRESS +1 AT END OF_^1*_8RELOCATABLE BINARY LOAD_^1_%EQU BLANKS(18)_"ASCII CODE FOR TWO SPACES_^1_%EQU SYMSTR(19)_"SET TO THE ASCII CODE FOR THE CHARACTERS IN_€€^1*_$EQU SYMSTR+1(20) THE FIELD BEING PROCESSED BY SCAN. IF FIELD_^1*_$EQU SYMSTR+2(21) IS NUMERIC SYMSTR=0._^1_%EQU SCANSW(22)_"IF BIT ZERO =0 AND FIELD BEING PROCESSED IS_^1*_8NUMERIC, THE NUMBER WILL BE PROCESSED AS_^1*_8DECIMAL UNLESS PRECEEDED BY $_^1*_8IF BIT ZERO =1 AND FIELD BEING PROCESSED IS_^1*_8NUMERIC, THE NUMBER WILL BE PROCESSED AS_^1*_8HEXIDECIMAL REGARDLESS OF€€ OCCURENCE OF $_^1_%EQU BASE(23)_$BASE OF SYSTEM INITIALIZER_^1_%EQU WRDCNT(24)_"CHARACTER REFERENCE COUNTER - SET TO STORAGE_^1*_8ADDRESS OF THE FIRST CHARACTER OF A FIELD_^1*_8TO BE PROCESSED. BIT ZERO IS R/L INDICATER_^1*_80 = FIRST CHARACTER IN LEFT HALF OF WORD_^1*_81 = FIRST CHARACTER IN RIGHT HALF OF WORD_^1_%EQU COUNT1(25)_"CHARACTER COUNTER- SET TO COMPLEMENT OF_^1*_8MA€€XIMUM NUMBER OF CHARACTERS A FIELD MAY HAVE_^1_%EQU BZSSW(26)_#USED BY SUBROUTINES COMMON TO RBDPRO AND_^1*_8BZSPRO TO DETERMINE BLOCK TYPE._^1*_80= RBD BLOCK_"-1= BZS BLOCK_^1_%EQU COUNT2(27)_"COUNTER USED BY SCAN_^1_%EQU BLKCNT(27)_"BLOCK COUNTER CONTAINS WORD COUNT FOR_^1*_8NUMBER OF SEQUENTIAL LOCATIONS TO BE SET_^1*_8TO ZERO IN A BZS BLOCK ENTRY_^1_%EQU SW6(28)_%FLAGWORD F€€OR LOADER TABLE SEARCH ROUTINE_^1*_8=0 MATCH HAS BEEN FOUND IN TABLE_^1*_8=- (NEGATIVE) MATCHING NAME NOT FOUND_^1_%EQU ASAV(29)_$TEMPORY STORAGE FOR A-REQISTER_^1_%EQU QSAV(30)_$TEMPORY STORAGE FOR Q-REQISTER_^1*_$EQU ISAV(31)_$TEMPORY STORAGE FOR I-REQISTER_^1_%EQU XFRNAM(32)_"STORAGE OF SIX CHARACTER TRANSFER ADDRESS_^1_%EQU NAME(35)_$ASCII CODED INFORMATION_^1_%EQU SCHXIT€€(39)_"EXIT FROM TABLE SEARCH ROUTINE_^1_%EQU TABSCH(40)_"ENTRY ADDRESS FOR RTJ TO ROUTINE FOR_^1*_8SEARCHING LOADER TABLE FOR ENTRIES OR EXTERNAL_^1_%EQU CENTAD(43)_"ADDRESS OF ENTRY BEING CURRENTLY EXAMINED_^1*_8IN ENTRY POINT TABLE_^1_%EQU MAXENT(44)_"LARGEST ADDRESS BEING USED IN ENTRY POINT TBL_^1_%EQU TEMP(45)_$TEMPORARY COUNTER_^1_%EQU TEMP1(46)_#TEMPORARY COUNTER_^1_%EQ€€U WMXSEC(47)_"WORD ADDRESS OF MAXSEC IN ENT/EXT TABLE_^1_%EQU NOTRAN(48)_"FLAG = 0 IF TRANSFER ADDRESS IS NEEDED_^1_%EQU NOJUMP(49)_"FLAG = 0 IF NO JUMP INSTRUCTION IS NEEDED TO_^1*_8JUMP AROUND DATA OR COMMON_^1_%EQU FLGLGN(50)_"NUMBER OF CORE FLAGS PER PAGE_^1_%EQU BINASC(51)_"STORAGE OF ASCII CODE FOR NUMBER CONVERSION_^1_%EQU PR3XIT(53)_^1_%EQU PRINT3(54)_"ENTRY TO ERROR€€ OUTPUT ROUTINE_^1_%EQU INPXC0(57)_"CONTAINS ADDRESS CONSTANT INPUT_^1_%EQU INPXC1(58)_"CONTAINS ADDRESS CONSTANT INPUT + 1_^1_%EQU PRINT2(59)_"ENTRY TO FATAL ERROR OUTPUT ROUTINE_^1_%EQU INPXCC(62)_"CONTAINS ADDRESS CONSTANT INPUT - 3_^1_%EQU NXTINP(63)_"JMP INSTRUCTION TO READ NEXT BLOCK_^1_%EQU M7FFF(65)_#MASK OF $7FFF_^1_%EQU M8000(66)_#MASK OF $8000_^1_%EQU MFFFF(67)_#€€MASK = $FFFF_^1_%EQU MFF00(68)_#MASK OF $FF00_^1_%EQU M00FF(69)_#MASK OF $00FF_^1_%EQU ASKII(70)_#ASCII MODE SWITCH FOR 4O5 AND MAG TAPE_^1_%EQU NEGSW(71)_#SET BY SCAN TO VALUE OF LEGAL ALGEBRAIC SIGN_^1_%EQU SCNTRM(72)_"SET BY SCAN TO ASCII CODE FOR FIELD TERMINATOR_^1_%EQU SCNINP(73)_"SET BY SCAN TO BINARY VALUE OF A NUMERIC_^1*_8OPERAND AFTER ITS CONVERSION FROM ASCII_^1_%€€EQU SCNXIT(74)_"EXIT FROM SCAN ROUTINE_^1_%EQU SCAN(75)_$ENTRY TO THE SCAN ROUTINE_^1_%EQU CSNAME(78)_"CODE FOR CONTROL STATEMENT BEING PROCESSED_^1_%EQU XCSNAM(79)_"CODE FOR LAST CONTROL STATEMENT PROCESSED_^1_%EQU INMED(80)_#INPUT MEDIUM SWITCH_^1*_80 = COMMENT DEVICE_^1*_81 = BINARY INPUT DEVICE_^1_%EQU ADJXIT(81)_"EXIT FROM ADDRESS ARITHMETIC ROUTINE_^1_%EQU ADJOVF(82)_"€€ENTRY CELL FOR ADDRESS ARITHMETIC SUBROUTINE_^1_%EQU EXTPCH(85)_"FLAG - NEGATIVE IF EXTERNAL NOT PATCHED_^1_%EQU NGRLSW(86)_"FLAG - 0= POSITIVE RELOCATION_^1*_?1= NEGATIVE ADDRESS RELOCATION_^1_%EQU ARIT15(87)_"0 = USE 15 BIT ARITHMETIC_^1*_81 = USE 16 BIT ARITHMETIC_^1_%EQU PRESET(88)_"USED TO HOLD CONTENTS OF A WORD READ INTO CORE_^1*_8BY THE PAGING ROUTINE DURING A TABLE SEA€€RCH_^1_%EQU CNVXIT(89)_"EXIT FROM CONVERT ROUTINE_^1_%EQU CONVRT(90)_"ENTRY FOR BINARY TO ASCII CONVERSION ROUTINE_^1_%EQU PR4XIT(93)_"EXIT FROM PRINTING PROGRAM NAME_^1_%EQU PRINT4(94)_"ENTRY TO PRINT PROGRAM NAME_^1_%EQU PR5XIT(97)_^1_%EQU PRINT5(98)_"ROUTINE TO PRINT OUT ENTRY POINT NAMES_^1_%EQU AINPUT(101)_!A-REGISTER CONTENTS UPON ENTRY TO LOADER_^1_%EQU LK1XIT(103)_!€€EXIT FROM LINK ROUTINE_^1_%EQU LINK1(104)_"ENTRY FOR LINK ROUTINE_^1_%EQU ENTPGS(107)_!STARTING ADDRESS OF ENTRY POINT TABLE *EXTRA*_^1_%EQU TOP(108)_$HIGHEST CORE LOCATION AVAILABLE FOR THIS LOAD_^1_%EQU PGEWRT(109)_!FLAG =1 IF ANY PAGE WRITTEN TO MASS STORAGE_^1_%EQU LGEPGE(110)_!LARGEST COMMAND SEQUENCE PAGE USED_^1_%EQU IGNORE(111)_!FLAG SAYING TO IGNORE DUPLICATE ENTRY P€€OINTS_^1*_8WHEN LINKING *M OR *MP TO CREP OR CREP1_^1_%EQU LNKSTR(112)_!ADDRESS OF LINK TABLE_^1_%EQU LNKCTR(113)_!NEXT AVAILABLE LOCATION IN LINK TABLE_^1_%EQU LNKEND(114)_!LAST ADDRESS +1 IN LINK TABLE_^1_%EQU ENTST0(115)_!STARTING ADDRESS OF PART0 ENTRY POINTS_^1_%EQU ENTST1(116)_!STARTING ADDRESS OF PART1 ENTRY POINTS_^1_%EQU ADDR(117)_#TEMPORARY USED BY PAGE_^1_%EQU EXT€€STR(118)_!WORD ADDRESS OF START OF EXTERNAL TABLE_^1_%EQU CORADR(119)_!LOWEST LOCATION AVAILABLE FOR USE BY LOADER_^1_%EQU PRODAT(120)_!FLAG - NON-ZERO IF PROTECTED DATA IS DECLARED_^1_%EQU PROCOM(121)_!FLAG - NON-ZERO IF PROTECTED COMMON DECLARED_^1_%EQU PAGE(122)_#LENGTH OF PAGE FOR MASS MEMORY - MUST BE_^1*_8A MULTIPLE OF 96_^1_%EQU CSQCTR(123)_!LAST ADDRESS OF PROGRAM COMM€€AND SEQUENCE_^1*_8STORAGE +1_^1_%EQU CEXTAD(124)_!ADDRESS OF EXTERNAL BEING CURRENTLY PROCESSED_^1*_8FROM EXTERNAL TABLE_^1_%EQU EXTADR(124)_!SAME AS CEXTAD_^1_%EQU MINEXT(125)_!FIRST WORD ADDRESS OF SYSTEM EXTERNAL TABLE_^1_%EQU MAXEXT(126)_!LAST WORD ADDRESS OF SYSTEM EXTERNAL TABLE_^1_%EQU ENTSEC(127)_!STARTING SECTOR OF ENTRY/EXTERNAL TABLES_^1_%EQU CSQSEC(128)_!STARTING €€SECTOR OF COMMAND SEQUENCE IMAGE_^1_%EQU MAXPGE(129)_!MAXIMUM PAGE NUMBER THAT CAN BE USED ON DISK_^1_%EQU NOPAGE(130)_!NUMBER OF PAGES IN CORE_^1_%EQU PARBAS(131)_!ADDRESS OF STARTING PARTITION_^1_%EQU PARLIM(132)_!LAST WORD ADDRESS +1 OF LAST PARTITION_^1_%EQU STRSEC(133)_!STARTING SECTOR OF IMAGE ON MASS MEMORY_^1_%EQU MSDWCT(134)_!NUMBER OF WORDS STORED ON MASS MEMORY_^1_€€%EQU XFRADR(135)_!TRANSFER ADDRESS OF NAME FROM XFR BLOCK_^1_%EQU AHOLD(136)_"TEMPORY_^1_%EQU QHOLD(137)_"TEMPORY_^1_%EQU SECTOR(138)_!NUMBER OF WORDS IN A SECTOR_^1_%EQU CMNXIT(139)_!COMMON EXIT ROUTINE ENTRY_^1_%EQU EXTSWT(141)_!FLAG - NON-ZERO IF PROCESSING EXTERNAL BLOCK_^1_%EQU SAVEA(142)_"TEMPORARY_^1_%EQU JUMP(143)_#JUMP FLAG FOR I1_^1_%EQU TEMP3(144)_"TEMPORARY_^1_€€%EQU FLGBSE(145)_!BASE ADDRESS OF CORE FLAGS TABLE_^1_%EQU PROGCT(146)_!LENGTH OF PROGRAM FROM NAM CARD_^1_%EQU ONTAB(147)_"*Y ORDINAL COUNTER FOR I1_^1_%EQU MONTAB(148)_!*YM COUNTER FOR I1_^1_%EQU FLGBS1(149)_!INITIAL ADDRESS OF SYSTEM FLAG TABLE_^1_%EQU INPUT(150)_"INPUT BUFFER_^1LENSDT BZS LENSDT(1)_#NUMBER OF PAGES USED FOR SYSDAT -_$66*1455_^1**_7AND DIRECTORY (CORE RES€€IDENT PAGES)_"66*1455_^1**_7SET UP AFTER AFTER SYSDAT IS LOADED_"66*1455_^1_%EJT 1_^1ILOAD NOP 0_,RETURN ADDRESS OF CALLER_^1_%STA- AINPUT,I_$SAVE A-REGISTER PARAMETER_^1_%ENQ $F_+MASK OFF THE LOADER FUNCTION CODE_^1_%LAQ Q,A_*AND SAVE IT IN BOTH REGISTERS_^1_%LLS 1_,MULTIPLY FUNCTION CODE BY TWO TO COMPENSATE_^1_%INA TYPELD-LASTFC FOR TWO WORD JUMPS IN TABLE_^1_%SAP ILOAD1€€-*-1_"SKIP IF FUNCTION CODE IS INVALID_^1_%JMP* TYPELD,Q_$VALID FUNCTION, GO TO PROCESS_^1ILOAD1 LDA =A14_)INVALID LOADER FUNCTION, INFORM OPERATOR_^1_%JMP- PRINT2,I_$AND ABORT INITIALIZATION_^1_%SPC 3_^1TYPELD JMP LOADER_'0 = RELOCATABLE BINARY LOAD_^1_%JMP LNKENT_'1 = LINK PROGRAM ENTRY POINTS_^1_%JMP PRNEXT_'2 = PRINT UNPATCHED EXTERNALS_^1_%EQU LASTFC(*)_#E N D_"O F_"F U €€N C T I O N_"T A B L E_^1_%EJT 1_^1*_$B E G I N_"R E L O C A T A B L E_"B I N A R Y_"L O A D_^1_%SPC 2_^1*_$COME HERE TO CHECK FOR NAME BLOCK_^1_%SPC 1_^1LOADER LDA =XSW1A-SW1-1 SETUP THE JUMP INSTRUCTION SO THAT ONLY_^1_%STA* SW1+1_(A NAME BLOCK IS LEGAL_^1NXTBLK RTJ BACKGR_'BACKROUND INPUT BUFFER TO ALL ONES_^1_%RTJ* NXTBIN_'READ IN THE NEXT RECORD_^1SW1_"JMP SW1_*JUMP TO €€PROCESS THE BLOCK_^1NXTBIN NOP 0_^1_%ENQ 0_,SET I/O MODE TO READ_^1_%LDA- INPXC0,I_$PICKUP STARTING BUFFER ADDRESS_^1_%RTJ IDRIV_(READ IN A BINARY RECORD_^1_%SAZ LOAD12-*-1_"SKIP IF ERROR_^1_%JMP* (NXTBIN)_^1LOAD12 ENA $31_*ERROR 1, UNRECOGNIZEABLE INPUT_^1_%JMP- PRINT2,I_^1SW1A_!LDA- INPUT,I_%TEST FOR THIS RECORD BEING A NAME BLOCK_^1_%SUB =N$2050_^1_%SAZ 1_,SKIP IF NAME BL€€OCK_466*1455_^1_%JMP* LOAD14_N66*1455_^1_%LDA- CSNAME,I_$TEST FOR *L LOAD_^1_%INA -3_^1_%SAN LOAD13-*-1_"SKIP IF NOT *L_^1_%LDA- PROBAS,I_^1_%SAZ LOAD13-*-1_"SKIP IF LOADING SYSDAT_^1_%SUB- $EB_*CHECK FOR PROBAS= START OF SYSTEM DIRECTORY_^1_%SAN LOAD13-*-1_"SKIP IF NOT START OF DIRECTORY_^1_%LDA- $EB_*UPDADE PROBAS TO LOAD AROUND DIRECTORY_^1_%ADD- $E6_^1_%STA- PROBAS,I_^1_%CL€€R Q_S66*1455_^1_%DVI =N$60_(COMPUTE NUM OF PAGES USED FOR_)66*1455_^1_%SQZ EVNP_)SYSDAT AND DIRECTORY_266*1455_^1_%INA 1_S66*1455_^1EVNP_!STA* LENSDT_'NUMBER OF CORE RESIDENT PAGES_)66*1455_^1LOAD13 LDA =XSW1B-SW1-1 SET JUMP INSTRUCTION FOR RBD,BZS, OR ENT_^1_%STA* SW1+1_^1_%JMP* NAMPRO_'GO TO PROCESS NAME BLOCK_^1LOAD14 LDA- INPUT,I_%CHECK FOR CONTROL STATEMENT_^1_%ARS 8_^1€€_%AND =N$7F_^1_%INA -$2A_)IS THE FIRST CHARACTER AN ASTERISK_^1_%SAZ LOAD16-*-1_"YES, SKIP_^1LOAD15 ENA $33_*ERROR 3, OUT OF ORDER INPUT BLOCK_^1_%JMP- PRINT2,I_^1LOAD16 LDA- INPXC0,I_^1_%SET Q_^1_%JMP (ILOAD)_%RETURN TO CONTROL_^1_%SPC 2_^1*_$COME HERE TO CHECK FOR BZS, RBD, OR ENT_^1_%SPC 1_^1SW1B_!LDA- INPUT,I_^1_%CLR Q_^1_%LLS 3_^1_%ARS 11_^1_%SQZ LOAD17-*-1_^1_%SA€€Z LOAD18-*-1_^1LOAD17 JMP* LOAD15_'OUT OF ORDER INPUT BLOCK_^1LOAD18 ENA -2_^1_%AAQ A,Q_^1_%INA -3_^1_%SAP SW1BJ1-*-1_"SKIP IF NOT RBD, BZS, OR ENT_^1_%QLS 1_^1_%JMP* LOAD19,Q_^1LOAD19 JMP RBDPRO_'JUMP TO PROCESS RBD BLOCK_^1_%JMP BZSPRO_'JUMP TO PROCESS BZS BLOCK_^1_%JMP ENTPRO_'JUMP TO PROCESS ENT BLOCK_^1SW1BJ1 LDA =XSW1C-SW1-1 SETUP JUMP FOR EXT OR XFR BLOCKS_^1_%STA€€* SW1+1_^1SW1C_!LDA- INPUT,I_^1_%CLR Q_^1_%LLS 3_^1_%ARS 11_^1_%SAZ LOAD20-*-1_"SKIP IF BITS 0-12 ARE ZERO_^1_%JMP* LOAD15_'OUT OF ORDER INPUT BLOCK_^1LOAD20 INQ -5_+IS THIS AN EXT BLOCK_^1_%SQN LOAD21-*-1_"NO, SKIP_^1_%JMP EXTPRO_'YES, PROCESS EXTERNAL BLOCK_^1LOAD21 INQ -1_+IS THIS A XFR BLOCK_^1_%SQZ LOAD22-*-1_"YES_^1_%JMP* LOAD15_'NO, OUT OF ORDER INPUT BLOCK_^1LOAD22€€ LDA =XSW1A-SW1-1 SETUP JUMP TO PROCESS NAME BLOCK_^1_%STA* SW1+1_^1_%JMP XFRPRO_'JUMP TO PROCESS XFR BLOCK_^1_%EJT 1_^1* T H I S_"I S_"T H E_"N A M E_"B L O C K_"P R O C E S S O R_^1_%SPC 3_^1NAMPRO LDA- INPUT+1,I_#PICKUP THE NUMBER OF WORDS OF COMMON_^1_%SAN NAMP1-*-1_#SKIP IF COMMON IS REQUESTED_^1_%JMP* NAMP7_(NO COMMON, GO TO CHECK FOR DATA_^1NAMP1 SAP NAMP2-*-1_#IS CO€€MMON DECLARATION .LT. $7FFF_^1_%JMP* COMERR_'NO, PRINT PROGRAM NAME AND TAKE ERROR EXIT_^1NAMP2 LDA- COMBAS,I_$HAS COMMON BEEN PREVIOUSLY DECLARED_^1_%SAN NAMP3-*-1_#YES, MAKE SURE THAT THIS BLOCK IS LEGAL_^1_%JMP* NAMP4_(NO, GO DOWN AND RESERVE THIS BLOCK_^1NAMP3 LDA- COMLIM,I_$PICKUP THE ADDRESS OF THE TOP OF COMMON_^1_%LDQ- COMBAS,I_$PICKUP THE ADDRESS OF THE BOTTOM OF COMMON€€_^1_%ADQ- INPUT+1,I_#ADD THE SIZE OF THE NEW COMMON DECLARATION_^1_%STQ- QSAV,I_'TEMPORARILY SAVE Q_^1_%RTJ SIGNCK_'TEST TO SEE IF NEW COMMON DECLARATION_^1*_8IS SMALLER THAN THE PREVIOUS DECLARATION_^1_%SAM FUDGE_(A.GE.Q VALID COMMON DECLARATION_^1_%JMP* NAMP7_^1FUDGE JMP* COMERR_'ERROR,COMMON DECLARATION TOO BIG_^1_%SPC 2_^1*_$COME HERE FOR THE FIRST PROGRAM OF THE LOAD TO DE€€CLARE COMMON_^1_%SPC 1_^1NAMP4 LDA- COMLIM,I_$PICKUP THE UPPER BOUND OF COMMON_^1_%SUB- INPUT+1,I_#SUBTRACT THE LENGTH OF THE COMMON BLOCK BEING_^1_%STA- COMBAS,I_$DECLARED AND USE THE RESULT AS THE BASE FOR_^1*_8ANY AND ALL COMMON DECLARED IN THIS LOAD_^1*_8MAKE SURE THAT THERE IS ROOM FOR BOTH THIS_^1_%LDQ- CSQLIM,I_$COMMON BLOCK AND THE PROGRAM COMMAND SEQUENCE_^1_%RTJ SIGNCK€€_'IN CORE SIMULTANEOUSLY_^1_%SAP NAMP6-*-1_#SKIP IF THERE IS ROOM FOR BOTH_^1_%JMP* COROVF_'NOT ENOUGH ROOM, SET CORE OVERFLOW SWITCH_^1NAMP6 SAN NAMP6A-*-1_"GO TO CHECK DATA DECLARATION IF THERE IS_^1*_8ROOM FOR COMMAND SEQUENCE STORAGE_^1_%LDA- INPUT+3,I_#THERE IS NO ROOM FOR COMMAND SEQUENCE_^1_%SAZ NAMP6A-*-1_"SKIP IF PROGRAM LENGTH IS ZERO_^1_%JMP* COROVF_'NOT ENOUGH ROOM,€€ TAKE CORE OVERFLOW EXIT_^1NAMP6A LDQ- INPUT+1,I_#THE COMMON DECLARATION IS LEGAL SO_^1_%ADQ- CSQCTR,I_$INCREASE THE LENGTH OF COMMAND SEQUENCE_^1_%STQ- CSQCTR,I_$TO INCLUDE COMMON._^1_%LDA =ACS_^1_%STA* BUFFER_'STORE CS IN BUFFER_^1_%RTJ CSDIST_^1CSDIST NOP 0_,CALCULATE ABSOLUTE ADDRESS_^1_%LDA* CSDIST_^1_%LDQ =XBUFFER-CSDIST_^1_%AAQ Q_^1_%LDA- COMBAS,I_$LOAD COMMON BASE ADDR€€ESS_^1_%RTJ* PRNTIT_^1_%SPC 2_^1*_$COME HERE TO BEGIN PROCESSING DATA DECLARATION_^1_%SPC 1_^1NAMP7 LDA- INPUT+2,I_#PICKUP THE SIZE OF THE DATA DECLARATION_^1_%SAN NAMP8-*-1_#SKIP IF DATA DECLARATION EXISTS_^1_%JMP* NAMP9_(NO DATA, JUMP DOWN TO CHECK PROGRAM LENGTH_^1NAMP8 SAP NAMP11-*-1_"MAKE SURE SIZE OF DATA BLOCK .LT. 7FFF_^1_%JMP* DATERR_'ILLEGAL DATA DECLARATION_^1NAMP1€€1 LDA- DATBAS,I_$HAS DATA BEEN PREVIOUSLY DECLARED_^1_%SAN NAMP12-*-1_"YES, MAKE SURE THIS DECLARATION IS LEGAL_^1_%JMP* NAMP13_'NO, GO DOWN TO SETUP THIS DECLARATION_^1NAMP12 LDA- DATLIM,I_$PICKUP THE MAXIMUM ADDRESS AVAILABLE FOR DATA_^1_%LDQ- DATBAS,I_$PICKUP THE STARTING ADDRESS OF DATA_^1_%ADQ- INPUT+2,I_#ADD THE SIZE OF THIS DATA DECLARATION_^1_%RTJ* SIGNCK_'MAKE SURE THE NE€€W DATA BLOCK IS SMALLER THAN_^1_%SAM INTRMD_'THE PREVIOUSLY DECLARED DATA BLOCK_^1_%JMP* NAMP16_'BLOCK OK SO FAR,CONTINUE CHECKING_^1INTRMD JMP* NAMP14_^1PRNTIT NUM 0_^1_%STQ* SVQ_^1_%RTJ- CONVRT,I_^1_%LDA- BINASC,I_^1_%STA* BUFFER+1_^1_%LDA- BINASC+1,I_^1_%STA* BUFFER+2_^1_%LDA* SVQ_^1_%ENQ 3_^1_%RTJ QCOM_K**MSOS 4.1**_^1_%LDA- BLANKS,I_^1_%STA* BUFFER_^1_%STA* BUFFER+1_^1_%ST€€A* BUFFER+2_^1_%JMP* (PRNTIT)_^1SVQ_"NUM 0_^1_%JMP* NAMP16_'BLOCK OK SO FAR, CONTINUE CHECKING_^1_%SPC 5_^1***** N O T I C E_"-_!B U R I E D_"E Q U A T E_"C A R D S_!****_^1_%SPC 1_^1COMERR EQU COMERR(*)_#THIS IS THE ROUTINE USED TO LIST ILLEGAL_^1DATERR EQU DATERR(*)_#DATA OR COMMON DECLARATIONS_^1NAMP14 RTJ* PRNNAM_'PRINT NAME OF PROGRAM_^1_%ENA $34_*CODE FOR LOADER ERROR €€4_^1_%RTJ- PRINT3,I_$PRINT OUT LOADER ERROR_^1_%JMP* NAMP9_(GO DOWN TO CHECK PROGRAM LENGTH_^1_%SPC 2_^1*_$COME HERE TO SETUP THE FIRST DATA BLOCK OF THE LOAD_^1_%SPC 2_^1NAMP13 LDQ- PROBAS,I_$PICKUP THE CURRENT PROGRAM BASE_^1_%STQ- DATBAS,I_$USE THAT VALUE FOR THE NEW DATA BASE_^1_%ADQ- INPUT+2,I_#ADD THE LENGTH OF THE DATA BLOCK_^1_%STQ- DATLIM,I_$SAVE THE TOP OF THE DATA BLOC€€K AS NEW LIMIT_^1_%STQ- PROBAS,I_$AND NEW PROGRAM BASE_^1_%STQ- CSQLIM,I_$AND NEW UPPER BOUND OF COMMAND SEQUENCE_^1_%LDA- TOP,I_(PICKUP THE UPPER LIMIT OF DATA FROM TOP_^1*_8FOR *L_#TOP=END0V4_^1*_8FOR *LP_"TOP=MSIZV4_^1*_8FOR *M_#TOP=END0V4_^1*_8FOR *MP_"TOP=END OF SPECIFIED PARTITIONS_^1_%RTJ* SIGNCK_'CHECK FOR LEGAL DATA DECLARATION_^1_%SAP PRTOUT_'SKIP IF BLOCK SIZE OKAY_€€^1_%JMP* COROVF_'PRINT ERROR, CORE OVERFLOW_^1PRTOUT LDA =ADS_^1_%STA* BUFFER_'STORE DS IN INPUT_^1_%RTJ DSDIST_^1DSDIST NOP 0_,CALCULATE ABSOLUTE ADDRESS_^1_%LDA* DSDIST_^1_%LDQ =XBUFFER-DSDIST_^1_%AAQ Q_^1_%LDA- DATBAS,I_$LOAD DATA BASE ADDRESS_^1_%RTJ PRNTIT_^1NAMP15 LDQ- INPUT+2,I_#THE DATA DECLARATION IS LEGAL SO_^1_%ADQ- CSQCTR,I_$INCREASE THE LENGTH OF COMMAND SEQUENCE€€_^1_%STQ- CSQCTR,I_$TO INCLUDE THE DATA BLOCK_^1NAMP16 SAN NAMP17-*-1_"SKIP IF ROOM EXISTS FOR COMMAND SEQUENCE_^1_%LDA- INPUT+3,I_#CHECK FOR PROGRAM LENGTH OF ZERO_^1_%SAZ NAMP17-*-1_"SKIP IF PROGRAM LENGTH IS ZERO_^1_%JMP* COROVF_'CORE OVERFLOW ERROR_^1BUFFER NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%SPC 2_^1*_$COME HERE TO CHECK PROGRAM LENGTH_^1_%SPC 1_^1NAMP9 LDA- INPUT+3,I_#PICKU€€P THE LENGTH OF THIS PROGRAM_^1NAMP17 STA- PROGCT,I_$SAVE IN PROGRAM COUNT_^1_%SAN NAMP18-*-1_"SKIP IF LENGTH IS NON-ZERO_^1_%JMP* NAMP19_'GO TO PRINT OUT PROGRAM NAME_^1NAMP18 LDQ- PROBAS,I_$PICKUP PROGRAM BASE FOR THIS LOAD_^1_%ADQ- INPUT+3,I_#ADD ON THE LENGTH OF THIS PROGRAM_^1_%STQ- CSQLIM,I_$SETUP THE NEW VALUE OF COMMAND SEQUENCE LIMIT_^1_%LDA- CSNAME,I_$PICKUP TYPE OF CONT€€ROL STATEMENT BEING PROCESS_^1_%INA -3_+TEST FOR *L LOAD_^1_%SAN NAMP20-*-1_"SKIP IF NOT *L_^1_%LDA- COMBAS,I_$IF COMMON IS DEFINED, PICKUP BASE OF COMMON_^1_%SAZ NAMP20-*-1_"FOR UPPER CORE LIMIT, OTHERWISE SKIP_^1_%JMP* NAMP21_'TEST FOR CORE OVERFLOW_^1NAMP20 LDA- TOP,I_(PICKUP UPPER CORE LIMIT_^1NAMP21 RTJ* SIGNCK_'TEST FOR CORE OVERFLOW_^1_%SAP NAMP22-*-1_"PROGRAM FITS INTO €€CORE_^1_%INA 0_^1_%SAN NAMP22-*-1_"SKIP IF PROGRAM FITS INTO CORE_^1_%JMP* COROVF_'ABORT JOB, CORE OVERFLOW_^1NAMP22 LDQ- INPUT+3,I_#ADD THE LENGTH OF THIS PROGRAM_^1_%ADQ- CSQCTR,I_$TO THE LENGTH OF COMMAND SEQUENCE_^1_%STQ- CSQCTR,I_^1_%SPC 2_^1*_$COME HERE TO PRINT OUT THE PROGRAM NAME AND HEADER_^1_%SPC 1_^1NAMP19 RTJ* PRNNAM_'PRINT OUT THE PROGRAM NAME AND ADDRESS_^1_%JMP€€- NXTINP,I_$GET THE NEXT INPUT BLOCK_^1_%SPC 2_^1*_$THIS IS THE CORE OVERFLOW EXIT_^1_%SPC 1_^1COROVF ENA $35_*ERROR CODE 5, CATISTROPHIC CORE OVERFLOW_^1_%JMP- PRINT2,I_$PRINT MESSAGE AND ABORT_^1_%SPC 2_^1*_$COME HERE TO PRINT PROGRAM NAME, HEADER, AND ADDRESS_^1_%SPC 1_^1PRNNAM NOP 0_,RETURN ADDRESS OF CALLER_^1_%ENQ 47_^1PRNM1 LDA- INPUT+10,B_"MOVE THE COMMENT FIELD TO €€MAKE ROOM FOR_^1_%STA- INPUT+13,B_"THE LOAD ADDRESS_^1_%SQZ PRNNM2-*-1_^1_%INQ -1_^1_%JMP* PRNM1_^1PRNNM2 LDA- BLANKS,I_$INSERT BLANKS INTO THE FORMAT_^1_%STA- INPUT+2,I_^1_%STA- INPUT+3,I_^1_%STA- INPUT+7,I_^1_%STA- INPUT+8,I_^1_%STA- INPUT+11,I_^1_%STA- INPUT+12,I_^1_%LDQ =XINPUT+2,I_!PICKUP BUFFER ADDRESS FOR PRINT ROUTINE_^1_%LDA- CSNAME,I_$PICKUP TYPE OF LOAD BEING PROCESSE€€D_^1_%INA -5_^1_%SAM NAMP24-*-1_^1_%LDA- PROBAS,I_$LOAD PROGRAM REL.BASE IF.GT.0_^1_%SAZ NAMP26_'LOAD SECTOR ADDRESS IF.EQ.0_^1_%JMP* NAMP24_^1NAMP26 LDA LSSECT_^1_%JMP* NAMP25_^1NAMP24 LDA- PROBAS,I_$PICKUP PROGRAM RELOCATION BASE AS LOAD ADDRESS_^1NAMP25 RTJ- PRINT4,I_$PRINT NAME AND ADDRESS_^1_%JMP* (PRNNAM)_$RETURN TO CALLER_^1_%SPC 3_^1*_$COME HERE TO MAGNITUDE CHECK TWO €€NUMBERS_^1_%SPC 1_^1*_$IF A.GT.Q_!THEN_!DIFFERENCE RETURNED IN A-REGISTER_^1*_$IF A.EQ.Q_!THEN_!ZERO IS RETURNED IN A-REGISTER_^1*_$IF A.LT.Q_!THEN_!MINUS ZERO IS RETURNED IN A-REGISTER_^1_%SPC 3_^1SIGNCK NOP 0_^1_%SAM AUPPER-*-1_"A IS IN BANK 1_^1_%SQP BTHSAM-*-1_"BOTH ARE IN LOWER BANK_^1_%JMP* QBIGER_'A IN LOWER BANK, Q IN UPPER BANK_^1AUPPER SQM BTHSAM-*-1_"BOTH IN UPPER €€BANK_^1_%TCQ Q_,A IN UPPER BANK, Q IN LOWER BANK_^1_%AAQ A_,RETURN DIFFERENCE IN A-REGISTER_^1_%JMP* ABIGER_^1BTHSAM TCQ Q_,BOTH IN BANK 1 FIND THE BIGGER ONE_^1_%AAQ A_^1_%SAP ABIGER-*-1_"A.GT.Q RETURN DIFFERENCE IN A-REGISTER_^1QBIGER SET A_,Q.GT.A RETURN MINUS ZERO IN A-REGISTER_^1ABIGER JMP* (SIGNCK)_^1_%EJT 1_^1*_1R O U T I N E_"T O_"P R O C E S S_^1_%SPC 1_^1*_1R B €€D_"O R_"B Z S_"B L O C K S_^1_%SPC 3_^1BZSPRO ENA -1_+SET BZSSW TO MINUS ONE IF A BZS BLOCK_^1_%STA- BZSSW,I_%IS BEING PROCESSED_^1_%ENA 0_^1_%JMP* RBBZ1_(GO TO INITIALIZE OTHER PARAMETERS_^1_%SPC 3_^1RBDPRO ENA 0_,SET BZSSW TO ZERO IF A RBD BLOCK_^1_%STA- BZSSW,I_%IS BEING PROCESSED_^1_%SPC 1_^1RBBZ1 STA- COUNT1,I_$CLEAR THE BYTE COUNTER TO ZERO_^1_%LDA- INPXC0,I_$PICKUP TH€€E STARTING ADDRESS OF THE INPUT BUF._^1_%STA- WRDCNT,I_$SAVE ADDRESS IN LOCATION WRDCNT_^1_%STA- BGRLSW,I_$SET BACKWORD RELOCATION SWITCH TO NON-ZERO_^1BZSPR1 LDA =X(SW2A-SW2-1)_"MAKE SW2 = JMP SW2A (TWO WORD JUMP)_^1_%STA SW2+1_^1_%LDA =X(SW3A-SW3-1)_"MAKE SW3 = JMP SW3A (TWO WORD JUMP)_^1_%STA SW3+1_^1_%RTJ* NXTWRD_'PICKUP THE NEXT ENTRY IN THIS BLOCK_^1_%LDA- INPREL,I_$P€€ICKUP THE TYPE OF RELOCATION SPECIFIED_^1_%INA -1_+DECREMENT RELOCATION TYPE BY ONE_^1_%STA- SW6,I_(AND SAVE IN SW6_^1_%SAN RBBZ2-*-1_#SKIP IF PROGRAM RELOCATION WAS NOT SPECIFIED_^1_%JMP* RBBZ3_(GO TO PROCESS PROGRAM RELOCATION_^1RBBZ2 SAP RBBZ4-*-1_#SKIP IF DATA OR COMMON RELOCATABLE_^1_%LDA =X(SW2C-SW2-1) NO RELOCATION_!SW2 = JMP SW2C_^1_%LDQ =X(SW3C-SW3-1)_1SW3 = JMP S€€W3C_^1_%JMP* RBBZ5_(SETUP THE JUMP INSTRUCTIONS_^1RBBZ4 LDA =X(SW2B-SW2-1) DATA OR COMMON RELOCATION_!SW2= JMP SW2B_^1_%LDQ =X(SW3B-SW3-1)_ENTRY PARAMETERS_6*_^1*_@(A) =€€ 0 - INITIALIZE DRIVER_)*_^1*_@(A) = ADDRESS OF STMSV4 IN MSOS SPACE*_^1************************************************************************_^1_%SPC 1_^1_%ENT I2_^1_%ENT I2RETN_^1_%ENT PART1A,PART1L,PART1C_^1_%EXT* OU_^1_%EXT* DISK_)IN DISK DRIVER_3**MSOS 4.1**_^1_%EXT* DRUM_)IN DRUM DRIVER_^1_%EXT* MDRIV_(IN MDRIV_^1*_]_^1I2_#NOP 0_^1_%SAZ FIRST-*-1_#SKIP IF DRIVER INITI€€ALIZATION_^1_%JMP* IOTYPE_^1FIRST STA* PART1C_'CLEAR PART 1 CORE IMAGE SECTOR NO._^1_%LDQ OU_+LOOK AT LU 4=DISK, 5=DRUM_(**MSOS 4.1**_^1_%INQ -5_+CHECK IF DRUM_4**MSOS 4.1**_^1_%SQZ DRUMLU_I**MSOS 4.1**_^1_%JMP DISK_)GO TO DISK DRIVER_0**MSOS 4.1**_^1DRUMLU JMP DRUM_)GO TO DRUM DRIVER_0**MSOS 4.1**_^1I2RETN NOP 0_,ADDRESS OF THE AUTOLOAD PROGRAM_^1_%STQ* LENGTH_'LENGTH OF TH€€E AUTOLOAD PROGRAM_^1_%ADD* I2RETN_^1_%STA* PUTTER_'TABLE ADDRESS IN THE AUTOLOAD PROGRAM_^1_%JMP* (I2)_)EXIT_^1IOTYPE STA* STMSV4_^1_%ENQ 3_^1LOOPDT LDA* PART1C,Q_$MOVE THE TABLE TO_^1_%STA* (PUTTER),Q_"THE AUTOLOAD PROGRAM_^1_%SQZ GOON-*-1_$SKIP WHEN ALL MOVED_^1_%INQ -1_^1_%JMP* LOOPDT_^1GOON_!ENQ -4_+BIAS DOWN AUTOLOAD_/**MSOS 4.1**_^1_%STQ- I_^1_%LDQ* LENGTH_'LENGTH OF AUT€€OLOAD PROGRAM_*68*1529_^1_%TCQ Q_^1_%LDA* I2RETN_'FWAB_^1_%RTJ MDRIV_(WRITE OUT AUTOLOAD PGM SECTS 0-4 **MSOS 4.1**_^1_%JMP* (I2)_)EXIT_^1LENGTH NUM 0_,LENGTH OF AUTOLOAD PROGRAM_^1PUTTER NUM 0_^1PART1C NUM 0_,STARTING SECTOR ADDRESS OF PART 1 IMAGE_^1PART1L NUM 0_,MODIFIED LENGTH OF PART 1_^1PART1A NUM 0_,MODIFIED CORE ADDRESS OF PART 1_^1STMSV4 NUM 0_,ADDRESS IN SPACE WH€&ERE TO MOVE THE AUTOLOAD_^1_%END_]_^__&PMDRIV CSY/ B42 P€1_%NAM MDRIV_(DECK-ID B42 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$MASS STORAGE DRIVER CONTROLLER FOR SYS INITIALIZER_^1_%SPC 1_^1_%ENT MDRIV_^1_%EXT* OU,QSAVEQ,PROCES_^1*_]_^1MDRIV ADC 0_)MASS STORAGE OUTPUT PROCESSOR_^1€x_%STQ QSAVEQ_^1_%LDQ OU_(OUTPUT LOGICAL UNIT_^1_%RTJ PROCES_#PROCESS THE READ REQUEST_^1_%JMP* (MDRIV)_^1_%END_]_^__xPIDRIV CSY/ B35 P€1_%NAM IDRIV_(DECK-ID B35 MSOS 4.1_-SUMMARY-079_^1*_$INPUT DRIVER CONTROLLER FOR SYSTEM INITIALIZER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%SPC 1_^1*_]_^1*_$PROCEDURE FOR INSERTING AN ADDITIONAL INPUT OR MASS_^1*_$STORAGE DRIVER INTO THE SYSTEM I€€NITIALIZER._^1*_]_^1*_'1. PLACE AN ADDRESS CONSTANT IN .TABLE. FOR THE DRIVER._^1*_'2. PROVIDE AN EXT* BY THE SAME NAME._^1*_'3. MODIFY THE .MAXLU. PARAMETER IF THE SIZE OF .TABLE._^1*_+CHANGES._^1*_]_^1*_]_^1**************************************************************MSOS 4.1**_^1*_Z**MSOS 4.1**_^1*_$ERROR MESSAGE FORMAT IS_=**MSOS 4.1**_^1*_.L,XX FAILED YY (ZZZZ)_6**MS€€OS 4.1**_^1*_.ACTION_E**MSOS 4.1**_^1*_(WHERE_L**MSOS 4.1**_^1*_*XX = LOGICAL UNIT_>**MSOS 4.1**_^1*_*YY = ERROR CODE (AS DEFINED FOR MSOS DRIVERS)_!**MSOS 4.1**_^1*_*ZZZZ = LAST HARDWARE STATUS_4**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1_%ENT IDRIV,QSAVEQ,PROCES_^1_%ENT SIB,MASS_^1_%ENT COLU_^1_%ENT TABLE_$LOGIC€€AL UNIT TABLE_^1_%ENT MESG_^1_%EQU CONVRT(90)_"BINARY/ASCII CONVERSION_***MSOS 4.1**_^1_%EQU BINASC(51)_"STORAGE OF ASCII CODE FROM CONV. **MSOS 4.1**_^1_%EXT* IN,QPTAPE,QCARD,QMTAPE,QDISK,QDRUM_-**MSOS 4.1**_^1_%EXT* TTYOUT,QPRINT,QCOM_=**MSOS 4.1**_^1_%EXT* TELOUT_(ENTRY TO TELETYPE DRIVER_^1_%EXT* ISAV_^1**************************************************************MSOS 4.1*€€*_^1*_Z**MSOS 4.1**_^1*_$DRIVER ERROR RETURN_A**MSOS 4.1**_^1*_*(A) = 0_H**MSOS 4.1**_^1*_*(Q) = ERROR CODE_?**MSOS 4.1**_^1*_*(I) = LAST HARDWARE STATUS_5**MSOS 4.1**_^1*_Z**MSOS 4.1**_^1**************************************************************MSOS 4.1**_^1*_$NOTE..THE FOLLOWING PARAMETERS DETERMINE WHAT IS CONSIDERED_^1*_,STANDARD FOR THE INITIALIZER_^1*_]_^1_%EQU ILU(3)_'S€€TANDARD INPUT (MAG TAPE)_(**MSOS 4.1**_^1_%EQU MSLU(4)_%STANDARD MASS STORAGE (DISK)_$**MSOS 4.1**_^1_%EQU CLU(6)_'STANDARD COMMENT (TELETYPE)_%**MSOS 4.1**_^1_%EQU MAXLU(8)_$MAXIMUM QUANTITY LOG. UNITS_%**MSOS 4.1**_^1*_]_^1SIB_"ADC ILU_'INPUT LOGICAL UNIT (STANDARD)_^1MASS_!ADC MSLU_%OUTPUT LOGICAL UNIT (STANDARD)_^1COLU_!ADC CLU_*COMMENT OUTPUT L.V. (STANDARD)_"**MSOS 4.1€€**_^1IDRIV ADC 0_)INPUT REQUEST PROCESSOR_^1_%STQ* QSAVEQ_#SAVE Q REGISTER_^1_%LDQ IN_(INPUT LOGICAL UNIT_^1_%RTJ* PROCES_#READ A RECORD_^1_%JMP* (IDRIV)_"RETURN TO USER_^1*_]_^1PROCES ADC 0_)COMMON I/O PROCESSOR_^1_%STQ* LU_(SAVE LOGICAL UNIT NUMBER_^1_%STA* ASAVEA_#SAVE A REGISTER_^1_%LDA- I_^1_%STA* ISAVEI_^1_%ADQ* TABLE,Q_"DELTA FOR DRIVER FROM TABLE_^1_%ADQ =XTABLE-RTJ-1_€€^1_%STQ* RTJ+1_^1_%LDQ* LU_^1_%LDA* TABLE,Q_"TEST FOR DRIVER NOT PRESENT_^1_%SUB =N$7FFF_^1_%SAZ ERRO-*-1_^1RRPP_!LDA* ISAVEI_^1_%STA- I_^1_%LDA* ASAVEA_^1_%LDQ* QSAVEQ_^1RTJ_"RTJ ERR_^1_%SAZ ERRO-*-1_^1_%JMP* (PROCES)_^1*_]_^1ERR_"ADC 0_^1ERRO_!TRQ A_,ERROR CODE TO A_2**MSOS 4.1**_^1_%RTJ* BA_+BINARY/ASCII CONVERSION_***MSOS 4.1**_^1_%STA* ERNUM_(PUT ASCII ERROR CODE IN MESSA€€GE_!**MSOS 4.1**_^1_%LDA* LU_+LOGICAL UNIT_5**MSOS 4.1**_^1_%RTJ* BA_+BIN/ASCII CONV._2**MSOS 4.1**_^1_%STA* ERLU_)PUT ASCII L.U. IN MESSAGE_(**MSOS 4.1**_^1_%LDA- I_N**MSOS 4.1**_^1_%LDQ ISAV_)RESTORE POINTER TO LOADER TABLE_!**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%RTJ- CONVRT,I_$CONVERT STATUS TO ASCII_***MSOS 4.1**_^1_%LDA- BINASC,I_G**MSOS 4.1**_^1_%STA* DVSTTS_'SAVE STATUS €€IN MESSAGE_+**MSOS 4.1**_^1_%LDA- BINASC+1,I_E**MSOS 4.1**_^1_%STA* DVSTTS+1_G**MSOS 4.1**_^1_%RTJ* MESG_%OUTPUT_^1_%ALF 1,L,_)L, XX FAILED YY (ZZZZ)_+**MSOS 4.1**_^1ERLU_!ADC 0_)ACTION_^1_%ALF 4, FAILED_^1ERNUM NUM 0_N**MSOS 4.1**_^1_%NUM $2028_(SPACE,(_:**MSOS 4.1**_^1DVSTTS NUM 0,0_L**MSOS 4.1**_^1_%NUM $2920_(),SPACE_:**MSOS 4.1**_^1_%NUM $0D00_^1_%ALF 3,ACTION_^1MESG€€_!ADC 0_^1_%LDA* MESG_^1_%ENQ 11_+OUTPUT 11 WORDS_2**MSOS 4.1**_^1_%RTJ TELOUT_'LOG ERROR ON TELETYPE_^1ACTION LDA* MESG_^1_%INA 11_M**MSOS 4.1**_^1_%ENQ 4_^1_%RTJ TELOUT_'LOG ERROR ON TELETYPE_^1_%LDA* MESG_%WAIT FOR INPUT OF CU OR RP_^1_%INA 1_^1_%CLR Q_^1_%RTJ QCOM_K**MSOS 4.1**_^1_%LDA* ERLU_^1_%SUB* RPMASK_#WAS IT RP_^1_%SAN NOTRP-*-1_^1_%JMP* RRPP_%YES_^1NOTRP LDA*€€ ERLU_%NO, WAS IT CU_^1_%SUB* CUMASK_^1_%SAZ CU-*-1_^1_%JMP* ACTION_#NO_^1CU_#CLR A_)YES_^1_%JMP* (PROCES)_!RETURN ERROR FLAG TO USER_^1*_]_^1ASAVEA ADC 0_^1QSAVEQ ADC 0_^1ISAVEI ADC 0_^1LU_#ADC 0_^1RPMASK ALF 1,RP_^1CUMASK ALF 1,CU_^1*_]_^1*_]_^1DUMMY ADC 0_)DUMMY DRIVER ENTRY FOR LIST OUTPUT_^1_%ENA 1_^1_%JMP* (DUMMY)_"EXIT DUMMY DRIVER_^1*_]_^1TABLE ADC (-MAXLU-1) €€TEST CONST CELL_^1_%ADC QPTAPE_'PAPER TAPE READER_0**MSOS 4.1**_^1_%ADC QCARD_(CARD READER_6**MSOS 4.1**_^1_%ADC QMTAPE_'MAGNETIC TAPE_4**MSOS 4.1**_^1_%ADC QDISK_(DISK_=**MSOS 4.1**_^1_%ADC QDRUM_(DRUM_=**MSOS 4.1**_^1_%ADC TTYOUT_#LIST ON TELETYPE_^1_%ADC QPRINT_'LINE PRINTER_5**MSOS 4.1**_^1_%ADC (DUMMY-*)_!DUMMY DRIVER FOR LIST OUTPUT_^1_%SPC 2_N**MSOS 4.1**_^1BA_#NUM €0_,BINARY TO ASCII NUMERIC_***MSOS 4.1**_^1_%CLR Q_N**MSOS 4.1**_^1_%DVI =N10_)TENS IN A, UNITS IN Q_,**MSOS 4.1**_^1_%ALS 8_N**MSOS 4.1**_^1_%AAQ A_,COMBINE_:**MSOS 4.1**_^1_%ADD =N$3030_%ADD ASCII NUMERIC BASE_+**MSOS 4.1**_^1_%JMP* (BA)_)RETURN_;**MSOS 4.1**_^1_%END_]_^__PQ1711 CSY/ B31 P€1_%NAM Q1711_(DECK-ID B31 MSOS 4.1_-SUMMARY-079_^1*_$1711/1713 TELETYPE KEYBOARD INITIALIZER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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_%EQU MFF00(68)_#MASK OF $FF00_^1_%EQU M00FF(69)_#MASK OF $00FF_^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 HARDWAR€€E 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 CO_^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 ENTRIES 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. SE€€T IOSW TO 'READ'_^1*_$WANT TO SET BREAK LIGHT_^1_%LDA* WRMODE_#TYPEWRITER 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*1€€337_^1_%SAM BCKGND_'SKIP IF BACK GROUNDED_/62*1337_^1_%SUB =N$2020_K62*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_%INP -1_(TAKE INITIAL STATUS_^1_%STA* STATUS_'SAVE STATUS_6**MSOS 4.1**_^1_%ALS 5_^1_%SAM START-*-1 SKIP IF MOTOR RUNNING_^1_%LDQ* ECOM_K**MSOS 4.1**_^1_%INQ -1_^1_%ENA $7F_^1_%OUT -1_(SEND CANCEL CHARACTER_^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_%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 CHARACTE€€R 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_%LDQ* ECOM_K**MSOS 4.1**_^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**_^1COMERR ENQ 3_,PARITY ERROR_5**MSOS 4.1**_^1_%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 (QCOM)_%EXIT ADDRESS_^1READ_!LDQ* ECO€€M_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_%JMP* 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_%INQ -1_^1_%SAP LFTCHR-*-1 SKIP IF LEFT CHARACTER_^1_%LDA- 11,I_%STORE RIGHT CHARACTER_^1_%EOR- MFF00,I_%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- M00FF,I_%SET BITS 0-7 OF DATA WORD_^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_%RTJ BACKGR_'BACKROUND BUFFER TO ALL ONES_^1_%JMP* RESTRT_#XFER TO REPEAT OPERATION_^1_%END_]_^__ΈPQ1751 CSY/ B47 P€1_%NAM Q1751_(DECK-ID B47 MSOS 4.1_-SUMMARY-079_^1*_$1751 DRUM INITIALIZER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_*THIS MODULE IS ONLY USED BY MDRIV CONTROLLER MODULE._^1*_]_^1***************************************************************€€*********_^1*_@ENTRY PARAMETERS_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 QDRUM_(BASIC DRUM DRIVER ENTRY_***MSOS 4.1**_^1_%ENT EDRUM_(DRUM W,E,S FUNCTION CODE_)**MSOS 4.1**_^1_%SPC 2_^1_%ENT DRUM_^1_%EXT* I2RETN_'IN I2_^1DRUM_!LDQ =XTEMPD-START1+1_"AUTLOAD PROGRAM LENGTH_%**MSOS 4.1*_^1_%LDA =XPART00-START1+1_#DI€€STANCE 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_!LDA* PART00_'PART 0 CORE IMAFE SECTOR ADDRESS_^1_%STA- I_^1_%ENA 1_,CORE ADDRESS_^1_%LDQ* STMSV4_'MODIFIED LENGTH OF PART 0_^1_%INQ -1_^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_'MODIFIE€€D 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 A€€DDRESS OF PART 1_^1STMSV4 NUM 0_,ADDRESS IN SPACE WHERE TO MOVE THE AUTOLOAD_^1*_]_'*_^1QDRUM NUM 0_,BASIC ENTRY_^1_%STA* FWD_^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* FWD_^1_%INQ -1_^1_%STQ* LWD_^1*_8FINAL CORE ADDRESS_^1_%LDA- I_^1_%INA 4_,BIAS OVER AUTOLOAD AREA_^1_%STA* ITEM_^1*_8SE€€CTOR NUMBER_^1_%MUI =N96_)TO DRUM TRACK_^1_%LLS 1_^1_%ALS 15_^1_%ADQ* BIAS_^1_%STA* LSB_^1*_8(SECTOR NUMBER)*(96)_^1_%STQ* MSB_^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--ER€€ROR_^1M300_!LDQ* ITEM_)RESTORE INDEX_^1_%STQ- I_^1M320_!JMP* (QDRUM)_^1FWD1_!RTJ* M150_^1_%ADC 0_^1FWD_"ADC 0_^1*_8START CORE_^1LWD_"ADC 0_^1*_8END CORE_^1MSB_"ADC 0_^1*_8MSB DRUM_^1LSB_"ADC 0_^1*_8LSB DRUM_^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**_^1BIAS_!ADC 0_,BIAS FOR DRUM TRACK NO. TO BE ABL€€E TO_^1*_8USE ANY DRUM WITHOUT FURTHER ADIEU_^1EDRUM ADC DEVICE*128+1_C**MSOS 4.1**_^1RDWRDM 0_"0_^1_%LDA* READC,Q_%PICK UP RD/ WR INDICATOR_^1_%STA* RWCTRL_'STORE ON OUTPUT LIST TO DRM CONTROLLER_^1_%LDA- 1,I_^1_%STA* SCORE_(STARTING CORE_^1_%LDA- 2,I_^1_%STA* ECORE_(END CORE_^1_%LDA- 4,I_^1_%STA* SECTOR_'SECTOR OF DRUM_^1_%LDQ- 3,I_^1_%LDA* SECTOR_^1_%ALS 1_^1_%LLS 4_,PUT ALL€€ TRACK INQ_^1_%ALS 11_+LEFT AJUST SECTOR IN A_^1_%STA* SECTOR_'SAVE SECTOR_^1_%STQ* TRACK_(SAVE TRACK_^1_%RTJ* STATUS_'CHECK STATUS_^1_%ENQ 0_^1RW1_"STQ* TEMPD_(INDEX TO INPUT LIST TO DRUM CONTROLLER_^1_%LDQ* LIST+1,Q_^1_%SQM RWXIT-*-1_#DONE GO TO RWXIT_^1_%ADQ* EDRUM_J**MSOS 4.1**_^1_%INQ -1_+SET UP PROPER I/O OPERATION_^1_%LDA* LIST,Q_'SET UP A DRUM COMMAND_^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 SECTOR_^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 STATU€€S OK,TRY AGAIN_^1DOKAY JMP* (DSTAT)_%RETURN_^1STATUS 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)_^1IRE€δJ_!ENQ 5_,INTERNAL REJECT ERROR_,**MSOS 4.1**_^1_%JMP* 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/ B46 P€1_%NAM Q1752_(DECK-ID B46 MSOS 4.1_-SUMMARY-079_^1*_$1752 DRUM INITIALIZER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_*THIS MODULE IS ONLY USED BY MDRIV CONTROLLER MODULE_^1_%SPC 1_^1*_!*********************************************************€€***********_^1*_#THE FOLLOWING PARAMETERS MUST BE SUPPLIED._^1_%EQU DEVN(2)_"PHYSICAL DEVICE NUMBER_^1*_!********************************************************************_^1_%ENT EDRUM_(EQUIPMENT CODE (NES CODE)_^1_%ENT QDRUM_(DRIVER ENTRY_^1**************************************************************MSOS 4.1**_^1*_$ERROR EXIT CONDITIONS...._;**MSOS 4.1**_^1*_+(A) = 0_G**MS€€OS 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 DRUM_^1_%EXT* I2RETN_'IN I2_^1DRUM_!LDQ =XTEMPD-START1+1_"AUTLOAD PROGRAM LENGTH_%**MSOS 4.1*_^€€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 1752 DRUM *********MSOS 4.1**_^1************************************************************************_^1START1 IIN 0_^1_%LDQ =XTEMPD-LOOP_!LEN€€GTH 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_!LDA* PART00_'PART 0 CORE IMAFE SECTOR ADDRESS_^1_%STA- I_^1_%ENA 1_,CORE ADDRESS_^1_%LDQ* STMSV4_'MODIFIED LENGTH OF PART 0_^1_%INQ -1_^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_%ST€€A- 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_^1P€€ART1A NUM 0_,MODIFIED CORE ADDRESS OF PART 1_^1STMSV4 NUM 0_,ADDRESS IN SPACE WHERE TO MOVE THE AUTOLOAD_^1*_]_'*_^1QDRUM ADC 0_^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_+PLUS 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_%INA 4_,SKIP OVER AUTOLOAD_^1_%STA* ITEM_)SAVE MASS STG SECTOR_^1_%AND =N$1F_(SE€€CTOR 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 -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 TI€€MES_^1_%SOV MDR210-*-1_^1_%JMP* MDR90_^1MDR200 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_^1EDRUM ADC DEVN*128+1_^1RDWRDM ADC 0_^1_%LDQ* EDRUM_^1_%ENA 2_^1_%OUT REJ-*_(ENABLE EOP, ALARM_^1_%LDA* NR_^1_%INQ 7_^1_%OUT R€€EJ-*_(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_,E€0NTERNAL REJECT_^1TEMPD JMP* DRERR_^1_%END_]_^__0PQDK85X CSY/ B44 P€1_%NAM QDK85X_'DECK-ID B44 MSOS 4.1_-SUMMARY-079_^1*_$1738/853/854 AND 1733-1/853/854 DISK INITIALIZER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 ALW€€AYS + *_^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*_,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 DISK_)ENTRY FOR I2_5**M€€SOS 4.1**_^1_%ENT QDISK_(BASIC DRIVER ENTRY_/**MSOS 4.1**_^1_%ENT EDISK_(BASCI W,E,S FUNCTION CODE_(**MSOS 4.1**_^1_%EXT* I2RETN_I**MSOS 4.1**_^1DISK_!LDQ =XDSKEND-START1+2_!AUTOLOAD PROGRAM LENGTH_#**MSOS 4.1**_^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 1_,SYSTEM SECTOR 1_2**MSOS 4.1**_^1_%STA- I_^1_%CLR A_,BFWA_^1_%LDQ* STMSV4_'MODIFIED LENGTH OF PART 0_^1_%RTJ* QDISK_(R€€EAD 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_!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* LOOP-2_'TO MSOS SPACE 'RESTRT'_^1PART01 NUM 0_,PART 1 CORE IMAGE SECTOR ADDRESS_^1LPART1 NUM 0_,MODIFIED LENGTH OF PART 1_^1PART1A NUM 0_,MODIFIED CORE ADDRESS OF PART 1_^1STMSV4 NUM 0_,ADDRESS IN SPACE WHERE TO MOVE THE AUTOLOAD_^1*********************************************************€€***************_^1*_]_'*_^1QDISK NUM 0_,BASIC DRIVER ENTRY_/**MSOS 4.1**_^1_%STA* AINITL_'BUFFER FWA TO READ OR WRITE_^1_%STQ* RDWEFG_'+(READ) / -(WRITE) FLAG_^1_%SQP SETWC-*-1_#SKIP IF READ REQUEST_^1_%TCQ Q_^1SETWC STQ* QINITL_'WORDS TO I/O_^1_%LDQ- I_,STARTING SECTOR ADDRESS_^1_%INQ 4_,SKIP OVER AUTOLOAD_/**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%CLR A_^1BIGLOP STA* EXCES€€S_^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 INDICATOR_^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 LOC. 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* F€€WAM1_^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 CMPTIM-*-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_%ENQ 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_%SET A_,-0 = REQ. OK_^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* M€€SDERR_'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_%J€€MP* 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 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 CODE_4*_^1*_]_'*_^1*_>EXITS_A*_^1*_?REPLY - P+1_:*_^1*_?EXT.REJ. - MSDERR (DRIVER ERROR EXIT) *_^1************************************************************************_^1OUTPUT NUM 0_^1_%ADQ- 0_,2 WORD INSTRUCTION_^1EDISK ADC DEVICE*128+1 W,E,S FUNCTION CODE_.**MSOS 4.1**_^1_%INQ -1_^1_%OUT OREJ-*_^1_%JMP* (OUTPUT)_$DEVICE REPLY_^1OREJ_!JMP*€€ IREJ_)INTERNAL REJECT_2**MSOS 4.1**_^1_%JMP* EREJ_)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_€02**MSOS 4.1**_^1_%JMP* MSDERR_I**MSOS 4.1**_^1EREJ_!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)_^1DSKEND JMP (QDISK)_$EXIT_>**MSOS 4.1**_^1_%NOP 0_,MUST REMAIN INCASE LWA-1_^1_%END_]_^__0PQ17391 CSY/ B45 P€1_%NAM Q17391_'DECK-ID B45 MSOS 4.1_-SUMMARY-079_^1*_$1739-1 DISK INITIALIZER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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*_$ERRO€€R 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*_*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 DISK_)ENTRY FOR I2_5**MSOS 4.1**_^1_%ENT QDI€€SK_(ENTRY TO DRIVER_2**MSOS 4.1**_^1_%ENT EDISK_(W,E,S FUNCTION CODE_.**MSOS 4.1**_^1_%EXT* I2RETN_I**MSOS 4.1**_^1DISK_!LDQ =XDSKEND-START1+2_"AUTOLOAD PROGRAM LENGTH_"**MSOS 4.1**_^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 1_,SYSTEM SECTOR 1_2**MSOS 4.1**_^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_!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_)K€€EEP TRYING_^1ONGO_!EIN 0_,ENABLE INTERRUPT SYSTEM_^1_%JMP* LOOP-2_'TO MSOS SPACE 'RESTRT'_^1PART01 NUM 0_,PART 1 CORE IMAGE SECTOR ADDRESS_^1LPART1 NUM 0_,MODIFIED LENGTH OF PART 1_^1PART1A NUM 0_,MODIFIED CORE ADDRESS OF PART 1_^1STMSV4 NUM 0_,ADDRESS IN SPACE WHERE TO MOVE THE AUTOLOAD_^1************************************************************************_^1*_]_'*_^1QDIS€€K NUM 0_,DISK DRIVER ENTRY_0**MSOS 4.1**_^1_%STA* AINITL_'BUFFER FWA TO READ OR WRITE_^1_%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_I**MSOS 4.1**_^1_%INQ 4_,SKIP OVER AUTOLOAD AREA_***MSOS 4.1**_^1_%STQ- I_,PHYSICAL SECTOR NUMBER FOR I/O_"**MSOS €€4.1**_^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 O€€N DISK 0_%**MSOS 4.1**_^1_%MUI =N96_)WORDS/SECTOR_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_%AL€€S 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* GOF€€RD+1_^1GOFRD TCA A_^1_%ALS 8_,POSITION TO DIFFERENCE 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 A€€ND =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_(STARTING ADDRESS_^1_%STA AINITL_'FWA OF I/O_^1_%LDQ EXCESS_^1_%STQ QINITL_'WORDS TO I/O_^1_%CLR A_^1_%JMP BIGLOP_^1ERROR2 ENQ 16_+SEEK ERROR_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* ER€€RCNT_^1_%CLR Q_^1_%TRQ M_^1_%LDQ* ERRCNT_^1ERROR3 INQ -10_*NO. OF RETRYS_^1_%SQN NOTDON-*-1_"SKIP IF NOT DONE TRYING_^1_%JMP* XOREJ_(ERROR EXIT_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 ERROR_+**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 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* 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 CODE_4*_^1*_]_'*_^1*_>EXITS_A*_^1*_?REPLY - P+1_:*_^1*_?EXT.REJ. - CARERR (DEVICE ERROR EXIT) *_^1************************************************************************_^1OUTPUT NUM 0_^1_%ADQ- 0_,2 WORD INSTRUCTION_^1EDISK ADC DEVICE*128+1 W,E,S FUNCTION CODE_.**MSOS 4.1**_^1_%INQ -1_^1_%OUT OREJ-*_^1_%JMP* (OUTPUT)_$DEVICE REPL€€Y_^1OREJ_!JMP* IREJ_)INTERNAL REJECT_2**MSOS 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**_^1€ΖXOREJ LDQ* CODERR_'10 TRIES FAILED_2**MSOS 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_%END_]_^__ΖPQ17332 CSY/ B43 P€1_%NAM Q17332_'DECK-ID B43 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM INITIALIZER DRIVER FOR 1733-2/856 DISK_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT, CONTROL DATA CORPORATION 1973_^1_%SPC 3_^1************************************************************************_^1*_=ENTRY PARAMETERS (ANY COMBINAT€€ION)_$*_^1*_>+(A) = FWA OF BUFFER(FWAB)_,*_^1*_>-(A) = WRITE ADDRESS TAGS_^1*_>+(Q) = NO. OF WORDS TO READ_+*_^1*_>-(Q) = COMPLEMENT OF WORDS TO WRITE_"*_^1*_@(I) = STARTING SECTOR ADDRESS_^1*_F(WILL BE BIASED BY 4)_^1*_]_'*_^1*_=EXIT PARAMETERS - OK_3*_^1*_?(A) =-0 REQUEST OK_3*_^1*_?(Q) = 0_>*_^1*_?(I) = SAME AS UPON ENTRY BUT ALWAYS + *_^1*_]_'*_^1*_=EXIT PARAMETERS - ERROR_0*_^€€1*_?(A) = 0_>*_^1*_?(Q) = 0_>*_^1*_?(I) = UNDETERMINED_3*_^1************************************************************************_^1************* THE FOLLOWING PARAMETERS MUST BE SUPPLIED **************_^1DEVICE EQU DEVICE(3)_#EQUIPMENT NUMBER_^1SECTOR EQU SECTOR(29)_"SECTORS/TRACK_^1WORDS EQU WORDS(96)_#WORDS/SECTOR_^1AUTLOD EQU AUTLOD(4)_$BIAS FOR AUTOLOAD AREA_^1D18562 €€EQU D18562(11773) SECTOR 0, DISK 1, 856-2_^1D18564 EQU D18564(23663) SECTOR 0, DISK 1, 856-4_^1************************************************************************_^1_%ENT DISK_)ENTRY FOR I2_^1_%ENT QDISK_(ENTRY TO DRIVER_^1_%ENT EDISK_(EQUIPMENT NUMBER + D1_^1_%EXT* I2RETN_'IN I2_^1_%SPC 2_^1DISK_!LDQ =XDSKEND-START1+2 AUTOLOAD PROGRAM LENGTH_^1_%LDA =XPART01-START1 €€DISTANCE TO AUTOLOAD TABLE_^1_%RTJ I2RETN_'RETURN TO I2 WITH ADDRESS OF THE AUTOLOAD PROG_^1************************************************************************_^1********************* AUTOLOAD PROGRAM FOR 1733-2 ********************_^1************************************************************************_^1START1 IIN 0_^1_%LDQ =XDSKEND-LOOP+1_%LENGTH TO BE MOVED_^1LOOP0€€1 LDA* LOOP,Q_^1_%STA* (STMSV4),Q_^1_%SQZ_!CONT1_^1_%INQ -1_^1_%JMP* LOOP01_^1CONT1 JMP* (STMSV4)_$GO TO LOOP AFTER IT HAS BEEN MOVED_^1************************************************************************_^1*************** FWA OF CODE MOVED TO 'STMSV4' IN SPACE ***************_^1************************************************************************_^1LOOP_!ENA 1_,SYSTEM €€SECTOR 1_^1_%STA- I_^1_%CLR A_,BFWA_^1_%LDQ* STMSV4_'MODIFIED LENGTH OF PART 0_^1_%RTJ* QDISK_(READ IN PART 0_^1_%SAN GOON-*-1_$SKIP IF NO DISK ERROR_^1_%JMP* LOOP_)KEEP TRYING_^1GOON_!LDA* PART01_'PART 1 CORE IMAGE SECTOR ADDRESS_^1_%SAZ ONGO-*-1_$SKIP IF NOT PART 1 TO LOAD_^1_%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_^1_%SAN ONGO-*-1_$SKIP IF NO DISK ERROR_^1_%JMP* GOON_)KEEP TRYING_^1ONGO_!EIN 0_,ENABLE INTERRUPT SYSTEM_^1_%JMP* LOOP-2_'TO MSOS SPACE 'RESTRT'_^1PART01 NUM 0_,PART 1 CORE IMAGE SECTOR ADDRESS_^1LPART1 NUM 0_,MODIFIED LENGTH OF PART 1_^1PART1A NUM 0_,MODIFIED CORE ADDRESS OF PART 1_^1STMSV4 NUM 0_,ADDRESS IN SPACE WHERE TO MOVE THE AUTOLOAD_^1**€€**********************************************************************_^1*_]_'*_^1QDISK NOP 0_,1733-2 DRIVER ENTRY_^1QDISK1 STA* AINITL_'BUFFER FWA TO READ OR WRITE_^1_%STQ* RDWEFG_'+(READ) / -(WRITE) FLAG_^1_%SQP SETWC-*-1_#SKIP IF READ (Q)WORDS_^1_%TCQ Q_^1SETWC STQ* QINITL_'WORDS TO I/O_^1_%LDA =N$100_'CONNECT CODE FOR UNIT 0_^1_%ENQ 1_^1_%RTJ OUTPUT_'CONNECT_^1_%LDA* AI€€NITL_^1_%SAP SETWCA_^1_%JMP WRATAG_'GOTTO WRITE TAGS_^1SETWCA ENQ 1_^1_%RTJ STATUS_'GET STATUS_^1_%NOP 0_^1_%ALS 3_,DISK TYPE BIT TO BIT 15_^1_%SAM SETWC1_'SKIP IF 856-2_^1_%LDA =XD18564_$SECTOR 0, DISK 1, 856-4_^1_%JMP* SETWC2_^1SETWC1 LDA =XD18562_$SECTOR 0, DISK 1, 856-2_^1SETWC2 STA* NOTE9+1_%SET FIRST SECTOR OF DISK 1_^1_%LDQ- I_,STARTING SECTOR ADDRESS_^1_%STQ* XINIT€€L_^1_%INQ AUTLOD_'BIAS OVER AUTOLOAD AREA_^1_%STQ- I_^1_%CLR A_^1BIGLOP STA* EXCESS_^1_%TRA M_,CLEAR MASK REGISTER (COMPARE FLAG)_^1_%STA* ERRCTN_'CLEAR ERROR COUNTER NO.1_^1_%STA* ERRCNT_'CLEAR ERROR COUNTER NO.2_^1_%STA* ENDDSK_'ACROSS DISK FLAG_^1_%JMP* NOTNER_'CHECK FOR TRANSFER ACROSS DISKS_^1AINITL NUM 0_,STARTING ADDRESS OF BUFFER_^1QINITL NUM 0_,WORDS TO TRANSFER_^1EXC€€ESS NUM 0_,NO. OF WORDS FOR NEXT I/O_^1TEMP2 NUM 0_,NEXT PART OF REQ.'S STARTING ADDRESS_^1TEMP3 NUM 0_^1XINITL NUM 0_,STARTING SECTOR OF I/O_^1RDWEFG NUM 0_,READ,WRITE INDICATOR_^1ENDDSK NUM 0_,ACROSS DISK FLAG_^1_%SPC 2_^1*_$DETERMINE IF REQUEST WILL FIT_^1ENDLNG NOP 0_^1_%MUI =XWORDS_^1_%DVI* QINITL_'REQUEST LENGTH_^1_%SAZ 1_,SKIP IF AN ALTERNATE NEEDED OR END OF THE€€ DISK_^1_%JMP* GETHED_^1_%TRQ A_^1_%SUB* QINITL_'REQUEST_^1_%STQ* QINITL_'WORDS THIS I/O_^1_%TCA A_^1_%STA* EXCESS_'WORDS NEXT I/O_^1_%ADQ* AINITL_^1_%STQ* TEMP2_(FWA OF NEXT I/O_^1_%JMP* (ENDLNG)_^1_%SPC 2_^1NOTNER LDA- I_^1_%SUB* NOTE9+1_^1_%SAM DISEND-*-1_"SKIP IF DISK 0_^1_%JMP* GETHED_^1DISEND LDA* NOTE9+1_%SECTOR 0, DISK 1_^1_%SUB- I_^1_%RTJ* ENDLNG_'FIND DISTANCE TO END €€OF DISK 0_^1_%ENA 1_^1_%STA* ENDDSK_'SET ACROSS DISK FLAG_^1GETHED LDA- I_^1_%CLR Q_^1NOTE9 DVI =N0_*SECTOR 0, DISK 1_^1_%ALS 5_,POSITION DISK INDICATOR_^1_%STA* TEMP3_^1_%TRQ A_^1_%CLR Q_^1_%DVI =XSECTOR_$SECTORS/TRACK_^1_%QLS 10_+Q = SECTOR_^1_%LLS 6_,A = CYL., TRACK AND SECTOR_^1_%ADD* TEMP3_(ADD IN DISK INDICATOR_^1_%STA* TEMP3_(SAVE COMPLETE FILE ADDRESS_^1HEDLOP LDA€€* TEMP3_(PICK UP LAST FILE ADDRESS_^1_%ENQ 2_,LOAD ADDRESS SEEK_^1_%RTJ* OUTPUT_^1_%ENQ 1_,DEVICE STATUS_^1_%RTJ* STATUS_^1_%JMP* ERROR2_^1_%CLR A_^1_%STA* ERRCTN_^1_%LDA* QINITL_'WORDS TO I/O_^1_%CLR Q_^1_%RTJ* OUTPUT_'LOAD BUFFER_^1_%TRM Q_-COMPARE FLAG_^1_%SQN CMPTIM-*-1_"SKIP IF COMPARE, Q = 1_^1_%CLR Q_^1_%LDA* RDWEFG_'READ / WRITE FLAG_^1_%SAP CMPTIM-*-1_"SKIP IF A RE€€AD 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* ERROR1_^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_%JMP* E€€RROR1_^1COMPOK LDQ* EXCESS_'NEXT REQ.WORDS TO I/O IF NON ZERO_^1_%SQN SETWC4_^1_%LDQ* XINITL_^1_%STQ- I_,RESET SECTOR NO._^1_%SET A_,-0 = REQ.OK_^1_%JMP* WAYOUT_^1SETWC4 LDA* NOTE9+1_%SECTOR 0, DISK 1_^1_%STA- I_,SET STARTING SECTOR_^1_%LDA* TEMP2_(STARTING ADDRESS_^1_%STA* AINITL_'FWA OF I/O_^1_%LDQ* EXCESS_^1_%STQ* QINITL_'WORDS TO I/O_^1_%CLR A_^1_%JMP* BIGLOP_^1ERROR2 RAO* E€€RRCTN_^1_%LDQ* ERRCTN_^1_%JMP* ERROR3_^1ERROR1 RAO* ERRCNT_^1_%CLR Q_^1_%TRQ M_^1_%LDQ* ERRCNT_^1ERROR3 INQ -10_*NO. OF RETRYS_^1_%SQN NOTDON-*-1_"SKIP IF NOT DONE TRYING_^1_%JMP* OREJ_)ERROR EXIT_^1NOTDON SAM DRIVSK-*-1_"SKIP IF DRIVE SEEK ERROR_^1_%JMP* HEDLOP_'TRY AGAIN_^1DRIVSK ENQ 0_,CLEAR CONTROLLER FUNCTION_^1_%RTJ* OUTPUT_^1_%ENQ 1_,STATUS_^1_%RTJ* STATUS_^1_%JMP* OR€€EJ_)CLEAR CONTROLLER ERROR_^1_%JMP* HEDLOP_'TRY AGAIN_^1ERRCTN NUM 0_,ERROR COUNTER NO. 1_^1ERRCNT NUM 0_,ERRCOUNTER NO. 2_^1************************************************************************_^1*************************** STATUS ROUTINE ***************************_^1************************************************************************_^1*_>ENTRY PARAMETERS_6*_^1*_?Q = €€FUNCTION CODE_4*_^1*_]_'*_^1*_>EXITS_A*_^1*_?A = STATUS TAKEN_5*_^1*_?P+1 - ERROR EXIT_5*_^1*_?EXT.REJ.,NOT READY - ERROR EXIT_%*_^1*_?P+2 - A = STATS OR CYLINDER REG.STATUS*_^1************************************************************************_^1STATUS NUM 0_^1_%INQ -1_^1_%STQ* FUNSAV_^1_%CLR A_^1STLOP LDQ* EDISK_(EQUIP. CODE_^1_%ADQ* FUNSAV_^1_%INP OREJ-*_^1_%STA* SAVST€€S_^1_%TRQ A_^1_%AND =N7_^1_%INA -1_^1_%SAZ STSTIM-*-1_"SKIP IF STATUS REQUEST_^1_%JMP* GOODEX_^1STSTIM LDQ* SAVSTS_^1_%LRS 1_^1_%SAM ITRDY-*-1_#SKIP IF READY_^1_%JMP* OREJ_^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 ALAR€€M ERROR_^1GOODEX RAO* STATUS_^1BADEXT LDA* SAVSTS_^1_%JMP* (STATUS)_^1FUNSAV NUM 0_^1SAVSTS NUM 0_^1************************************************************************_^1*************************** OUTPUT ROUTINE ***************************_^1************************************************************************_^1*_>ENTRY PARAMETERS_6*_^1*_?Q = FUNCTION CODE_4*_^1*_]_'*€€_^1*_>EXITS_A*_^1*_?REPLY - P+1_:*_^1*_?EXT.REJ. - CARERR (DEVICE ERROR EXIT) *_^1************************************************************************_^1OUTPUT NUM 0_^1_%ADQ- 0_,2 WORD INSTRUCTION_^1EDISK ADC DEVICE*128+1 EQUIPMENT NUMBER + D1_^1_%INQ -1_^1_%OUT OREJ-*_^1_%JMP* (OUTPUT)_$DEVICE REPLY_^1OREJ_!NOP 0_,INTERNAL REJECT_^1_%CLR A_,ERROR_^1WAYOUT LDA =N$80_(D€€ESELECT CODE_^1_%ENQ 1_^1_%RTJ* OUTPUT_'DISCONNECT FROM DISK_^1_%CLR Q_^1_%TRQ M_,CLEAR MASK REGISTER (COMPARE FLAG)_^1DSKEND JMP (QDISK)_%EXIT_^1WRATAG ENQ 1_,WRITE ADDRESS TAGS_^1_%RTJ* STATUS_'GET STATUS 1_^1_%NOP 0_^1_%ALS 3_,TYPE BIT TO A15_^1_%SAM TAGS1_^1_%LDA =N$CB00_%MAXCYL FOR AN 856-4_^1_%JMP TAGS2_^1TAGS1 LDA =N$6580_%MAXCYL FOR AN 856-2_^1TAGS2 STA* MAXCYL€€_^1_%ENA 0_^1_%STA* ADDRES_'RESET CURRENT ADDRESS_^1LODADR ENQ 2_^1_%RTJ* OUTPUT_'LOAD ADDRESS_^1_%RTJ* STATUS_'WAIT FOR NOT BUSY/ON CYLINDER_^1_%NOP 0_^1_%ENQ 7_^1_%RTJ* OUTPUT_'WRITE TAGS_^1_%RTJ* STATUS_'WAIT FOR NOT BUSY/ON CYLINDER_^1_%NOP 0_^1_%LDA* ADDRES_^1_%INA $20_^1_%STA* ADDRESS_^1_%SUB* MAXCYL_'SEE IF DONE_^1_%SAN TAGSX_^1_%LDA* ADDRES_^1_%JMP* LODADR_^1TAGSX J€lMP* WAYOUT_'EXIT FROM WRITE TAGS ROUTINE_^1_%SPC 3_^1ADDRES NUM 0_^1MAXCYL NUM 0_^1_%SPC 3_^1_%END_]_^__lPQPTAPE CSY/ B41 P€1_%NAM QPTAPE_'DECK-ID B41 MSOS 4.1_-SUMMARY-079_^1*_$IDRIV FOR PAPER TAPE, USED WITH SYS INITIALIZER IDRIV CONTROLLER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 1_^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 VA€€LUE FOR_^1_%STA- 24,I_(ADDRESS COUNT IF BINARY READ_^1SET1_!STQ* MODSET_^1_%LDA- 24,I_%WORD COUNT_^1_%ALS 1_^1_%STA- 24,I_%CHARACTER COUNT_^1_%LDA* LEDSET_#SET READSW TO SLEW PAST LEADER_^1_%STA* READSW+1_^1_%LDA* START_^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 1_)TEST FOR AND XFER IF_^1_%ENQ 3_,PARITY ERROR_5**MSOS 4.1**_^1_%JMP* INPERR_I**MSOS 4.1**_^1_%ENA $7F_^1_%AND- 11,I_%STRIP PARITY BIT FROM CHARACTER_^1_%STA- 11,I_^1_%INA -$A_^1_%SAN 1_)T€€EST 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 RIG€€HT 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 (C€€OUNT1) + 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 1_)TEST FOR AND XFER IF_^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-READSW-1_^1BINSET_!ADC_%€€BINMOD-READSW-1_^1MODSET ADC ($7FFF)_^1CHCKSM NUM $FFFF_^1FSTWRD NUM $FFFF_^1LSTWRD NUM $FFFF_^1MWPR_!ADC WPR+1_$WRDS PER RECORD + 1_^1BINARY LDA* LEADER_^1_%SAN LDRTST-*-1 SKIP IF LEADER SWITCH ON_^1_%LDA- 25,I_^1_%LDQ =N$5500_"IF RECORD LENGTH IN EXCESS OF_^1_%AAQ Q_+$54FF, AMOUNT IS BIASED BY_^1_%SQP 2_++$100. REDUCE 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 READ OPERATION_^1_%LDA* €€ASCSET_#SET READ SWITCH TO POSITION_^1_%STA* READSW+1_#FOR ASCII INPUT AND JUMP TO_^1_%JMP* ASCII_'PROCESS FIRST INPUT CHAR._^1CHRTST LDA- 11,I_^1_%SUB =N$AA_$TEST FOR AND SKIP IF 1ST CHR_^1_%SAN LDRPRO-*-1_!OF INPUT NOT AN ASTERISK_^1_%STA* LEADER_#TURN OFF LEADER SWITCH_^1_%LDA =N$2AFF_^1_%LDQ- 24,I_^1_%QLS 15_^1_%INQ -1_^1_%STA- 1,Q_^1_%LDA* ASCSET_^1_%STA* READSW+1_!SET RE€€ADSW 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* INPERR+1_G**MSOS 4.1**_^1€€RDSTAT 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_^1PTSTA€~T NUM $0160_(BIT 9 PAPER MOTION FAILURE_^1*_8BIT 6 LOST DATA_^1*_8BIT 5 ALARM_^1STATUS NUM 0_N**MSOS 4.1**_^1_%END_]_^__~PQMT7TK CSY/ B36 P€1_%NAM QMT7TK_'DECK-ID B36 MSOS 4.1_-SUMMARY-079_^1*_$1731/601, 1732-1/608, 1732-2/615-73 MAG TAPE INITIALIZER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$IDRIV FOR MAG TAPE, USED WITH SYS INITIALIZER IDRIV CONTROLLER_^1_%SPC 1_^1*_$PACKING I€€S 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 B€€FWA 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* H0405_M68*1551_^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* TEMP_^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_^1MRD4_!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_%STA* 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 NUM 0_,-WORDS TO TRANSFER_^1EMTAPE ADC DEVICE*128+1 BASIC W,E,S FUNCTION_-**MSOS 4.1**_^1H0405 NUM $405_N68*1551_^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* REJA_)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_^1PARITY SAM SNRNO€€T-*-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 ER€€ROR_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 €2(QMTAPE)_$DRIVER EXIT_6**MSOS 4.1**_^1_%END_]_^__2PQMT9TK CSY/ B37 P€1_%NAM QMT9TK_'DECK-ID B37 MSOS 4.1_-SUMMARY-079_^1*_$1732-1/609 AND 1732-2/615-93 MAG TAPE INITIALIZER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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) = BUF€€FER 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 = ALARM 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 SW€€ITCH 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 CO€€NTROLLER_^1_%INQ 1_^1_%LDA =N$440_'SELECT UNIT 0, ASSEMBLY MODE_^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_^1NOCOMP 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_%AND =N$0160_%PARITY ERROR,LOST DATA + ALARM_^1_%TRA Q_^1_%L€€DA* 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**MS€€OS 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 EXIT_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 TRANSFER_^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_]_^__άPQ42312 CSY/ B32 P€1_%NAM Q42312_'DECK-ID B32 MSOS 4.1_-SUMMARY-079_^1*_$INITIALIZER LINE PRINTER DRIVER FOR 1742-30 1742-120_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION. LA JOLLA , CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 5_^1*_]_^1*_$IF THE 1742-120 IS USED, A TRAIN IMAGE TABLE MUST BE LOADED._^1*_]_^1_%ENT QPRINT_^1_%ENT €€ EPRINT_^1_(ENT_$FORMFD_^1_(ENT_$HEADR1,HEADR2,HEADR3,HEADR4_^1_%EXT* TRAIN_(PRINTER TRAIN IMAGE_^1_%SPC 3_^1DEVICE EQU DEVICE(4)_^1_%EQU FORMAT($40)_"TOP OF FORM CONTROL_^1PAGE_!EQU PAGE(57)_^1_%SPC 3_^1QPRINT NOP 0_-ENTRY TO DRIVER_^1_(STA*_#START_^1_(STQ*_#NCHAR_^1_%LDQ* EPRINT_'GET PRINTER STATUS_^1_%INP -1_^1_%AND =N$100_'LOOK TO SEE IF TRAIN LOADING IS REQUIRED_^1_%SA€€Z NTRAIN_'SKIP IF NOT_^1_%CLR Q_,INITIALIZE TRAIN COUNTER - OUTPUT 144 WORDS_^1_%STQ* TCOUNT_^1LTRAIN LDA TRAIN,Q_%GET TRAIN DATA_^1_%RTJ* DATA_)OUTPUT TO LOAD TRAIN_^1_%RAO* TCOUNT_'INCREMENT POINTER_^1_%LDA* TCOUNT_'HAS ALL OF TRAIN IMAGE BEEN SENT_^1_%SUB =N144_^1_%SAZ NTRAIN_'SKIP IF ALL OUT_^1_%LDQ* TCOUNT_^1_%JMP* LTRAIN_'CONTINUE OUTPUT_^1NTRAIN ENA 0_^1_(STA*_#CC_^1_(€€LDA*_#FORMFD_^1_%SAZ PAGEFD_'SKIP IF TIME FOR FORM FEED_^1_(JMP*_#COUNTL_^1PAGEFD_!STA*_#LINES_^1_(STA*_#COUNTW HEADER PRINT COUNTER_^1_%ENA FORMAT_(TOP OF FORM_^1_(ENQ_$-1_^1_(RTJ*_#OUTPUT_+TOP OF FORM_^1_(STA*_#FORMFD_^1_%SPC 2_^1LOOPER_!LDQ*_#COUNTW_^1_(LDA*_#HEADER,Q_^1_(SAZ_$HPRINT-*-1_'SKIP IF PRINT HEADER TIME_^1_(RTJ*_#DATA_-SEND TO BUFFER_^1_(RAO*_#COUNTW_^1_(JMP*_#LOO€€PER_^1HPRINT_!RTJ*_#PRINT_,PRINT THE HEADER_^1COUNTL_!LDA*_#LINES_^1_%INA -PAGE_^1_(SAN_$GOON-*-1_^1_(STA*_#FORMFD_+FORMFD=0_^1_(JMP*_#PAGEFD_^1GOON_#LDA*_#HEADCT_+CONTROL AND SPACE FOR EACH LINE_^1_%ENQ -1_^1_%ENA 1_,LINE UP_^1_%RTJ* OUTPUT_^1PLOOP_"LDQ*_#CC_^1_(LDA*_#(START),Q_(GET 2 CHARACTERS_^1BLANK RTJ* DATA_^1_(RAO*_#CC_^1_(LDA*_#CC_^1_(SUB*_#NCHAR_^1_(SAP_$PRINT1_+SKIP €€IF BUFFER NOW OUTPUT_^1_(JMP*_#PLOOP_,LOOP BACK FOR NEXT WORD_^1PRINT1_!RTJ*_#PRINT_^1_(JMP*_#(QPRINT)_)EXIT_^1PRINT_"NOP_$0_^1_(CLR_$Q_^1_(ENA_$$20_^1_(RTJ*_#OUTPUT_+PRINT THE LINE_^1_(RAO*_#LINES_^1_(JMP*_#(PRINT)_^1_%EJT_]_^1OUTPUT_!NOP_$0_^1_%STA* SAVDAT_'SAVE DATA_^1_%STQ* SAVQ_)SAVE Q INCREMENT_^1LOOPX LDQ* EPRINT_^1_%INP -1_+STATUS_^1_%AND =N$B_(MASK STATUS_^1_%INA -9_+C€€HECK READY AND DATA_^1_%SAZ OK_+OK_^1_%JMP* LOOPX_(LOOP FOR READY AND DATA_^1OK_#LDQ =N0_^1SAVQ_!EQU SAVQ(*-1)_^1_%LDA =N0_^1SAVDAT EQU SAVDAT(*-1)_^1_%ADQ* EPRINT_^1_(NOP_$0_^1_(OUT_$-1_^1_(JMP*_#(OUTPUT)_)EXIT_^1_%SPC 5_^1DATA_#NOP_$0_^1_(ENQ_$-1_^1_(ALS_$8_^1_%RTJ* CHECK_^1_(ALS_$8_^1_$ENQ -1_^1_%RTJ* CHECK_^1_(JMP*_#(DATA)_+EXIT_^1CHECK NUM 0_^1_%STA* SAVDA2_'SAVE DATA€€_^1_%AND =N$7F_(MASK 7 LSB_^1_%INA -$20_^1_%SAP OK1_*GREATER THAN SPACE_^1_%CLR A_,MAKE IT A SPACE_^1OK1_"INA -$5F_^1_%SAM OK2_*LESS THAN A NULL_^1_%ENA -$5F_)MAKE IT A SPACE_^1OK2_"INA $7F_*RESTORE TO ORIGINAL DATA_^1_%RTJ* OUTPUT_'GO OUT DATA_^1_%LDA =N0_*RESTORE DATA TO -A-_^1SAVDA2 EQU SAVDA2(*-1)_^1_%JMP* (CHECK)_%RETURN TO CALLER_^1_%SPC 5_^1TCOUNT NUM 0_^1START_"€€NUM_$0_^1NCHAR_"NUM_$0_^1CC_%NUM_$0_^1FORMFD_!NUM_$0_^1COUNTW_!NUM_$0_^1H2020 NUM $2020_^1HC0C0 NUM $C0C0_^1EPRINT ADC DEVICE*128+1_^1HEADCT_!NUM_$$0120_,SINGLE SPACE,SPACE_^1HEADER_!ALF_$4, DATE_^1HEADR1_!ALF_$1,_/MM_^1HEADR2_!ALF_$1,_//D_^1HEADR3_!ALF_$1,_/D/_^1HEADR4_!ALF_$1,_^1*_$ADDITIONAL HEADER INFO. MAY BE OUTPUT BUT IT MUST BE PLACED HERE*_^1LINES NUM 0_,LINE COUNT€0 - MUST FOLLOW LAST WORD OF HEADER_^1_%END_]_^__0PQ40421 CSY/ B34 P€1_%NAM Q40421_'DECK-ID B34 MSOS 4.1_-SUMMARY-079_^1*_$INITIALIZER FOR 1740/501 AND 1742-1 LINE PRINTERS_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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_'HEADE€€R 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 / PAGE_^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 NEXT 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 €nOUTPUT BUT IT MUST BE PLACED HERE*_^1LINES NUM 0_,LINE COUNT - MUST FOLLOW LAST WORD OF HEADER_^1_%END_]_^__nPQCARD CSY/ B38 P€1_%NAM QCARD_(DECK-ID B38 MSOS 4.1_-SUMMARY-079_^1*_$1726/405, 1728/430, 1729-2, 1729-3 INITIALIZER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_$SPC_!2_^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 - HOLLERITH_:**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_(**MSOS 4.1**_^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 MOTION, 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 $81_L**MSO€€S 4.1**_^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**MSO€€S 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_-**MSOS 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_%LDA* 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_(C€€URRENT SEQ NO TO PREVIOUS_^1_(ARS_%8_^1_%STA* CHKIT_^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_%LDA* LAST_(PRO€€CESSING WORD COUNT_^1_%SAZ 1_^1_%JMP* NXTWD_^1_%SQM ISCOMP-*-1_^1_%ENQ 10_+NON-NEGATIVE RECORD 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*_]_^1ISLAST 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 , CL€€EAR 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 QCOUNT-*-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* CHKS€€UM_%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 ST€€ATUS_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_(JM€€P*_$(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 REQ€€UEST 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_%$1€€8_1ROW 8_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$79_1ROW 9_^1_(AND_%=N$FF8F_-CLEAR CARRY FORCING BITS 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_%E€€NQ 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 CORE 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 STAT€€US_6**MSOS 4.1**_^1_%ALS 15_+GET READY_8**MSOS 4.1**_^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**_^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_,1€€ST 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_]_^__„PBOOTC1 CSY/ B58 P€1_%NAM BOOTC1_'DECK-ID B58 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1START STA* STRADR_^1_%STA* JMPOUT+1_^1CARDLP LDQ =N$5A1_^1_%LDA* FUNCT_^1_%OUT -1_^1_%ENA -40_^1_%STA* WORDCT_^1_%INQ -1_^1_%NOP 0_^1WORDLP INP -1_^1_%AND€€* MASK_^1_%ALS 8_^1_%STA* (STRADR)_^1_%INP -1_^1_%AND* MASK_^1_%EOR* (STRADR)_^1_%STA* (STRADR)_^1_%ADD* CHEKSM_^1_%STA* CHEKSM_^1_%RAO* STRADR_^1_%RAO* WORDCT_^1_%LDA* WORDCT_^1_%SAP 1_^1_%JMP* WORDLP_^1_%LDA* CHEKSM_^1_%EOR* EOF_^1_%SAN 2_^1JMPOUT JMP+ 0_^1_%ENA 0_^1_%STA* CHEKSM_^1_%JMP* CARDLP_^1MASK_!NUM $00FF_^1EOF_"NUM $0F00_^1FUNCT NUM $81_^1STRADR NUM 0_^1CHEKSM €$NUM 0_^1WORDCT NUM 0_^1_%END_]_^__$PBOOTC2 CSY/ B59 P€1_%NAM BOOTC2_'DECK-ID B59 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1START STA* STRADR_^1_%STA* JMPOUT+1_^1_%LDQ =N$581_'IF BUFFERED IS $1581_^1_%LDA* FUNT1_^1_%OUT -1_^1_%INQ -1_^1LOOP_!INP STATUS-*_^1_%AND* MASK_^1_%ALS 8_€@^1_%STA* TEMP_^1_%ENA 0_^1_%INP -1_^1_%AND* MASK_^1_%EOR* TEMP_^1_%STA* (STRADR)_^1STATUS JMP* LOOP_^1_%INQ 1_^1_%NOP 0_^1_%INP -1_^1_%AND =N$4000_%WAS A END-OF-FILE ENCOUNTERED_^1_%SAN CONT_^1JMPOUT JMP+ 0_,YES_^1CONT_!JMP* LOOP_^1MASK_!NUM $00FF_^1FUNT1 NUM $401_^1STRADR NUM 0_^1TEMP_!NUM 0_^1_%END_]_^__@PBOOTP CSY/ B60 P€1_%NAM BOOTP_(DECK-ID B60 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%STA* STRADR_^1_%STA* JMPOUT+1_^1_%LDQ* FUNT1_^1_%INQ 1_^1_%ENA 32_^1_%OUT -1_^1_%INQ -1_^1LOOPRY NOP 0_^1_%INP -1_^1_%SAN CONT0_^1_%JMP* LOOPRY_^1_%NOP €:0_^1LOOP_!INP -1_^1CONT0 ALS 8_^1_%NOP 0_^1_%INP -1_^1_%LDQ* LIMIT_^1_%SQN CONT1_^1_%INA -2_^1_%STA* LIMIT_^1_%JMP* CONT2_^1CONT1 STA* (STRADR)_^1_%RAO* STRADR_^1_%RAO* LIMIT_^1_%SOV JMPOUT_^1_%LDQ* FUNT1_^1CONT2 JMP* LOOP_^1JMPOUT JMP+ 0_^1FUNT1 NUM $00A0_^1STRADR NUM 0_^1LIMIT NUM 0_^1_%END_]_^__:PBOOTM1 CSY/ B61 P€1_%NAM BOOTM1_'DECK-ID B61 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1START IIN 0_^1_%STA* STRADR_^1_%STA* JMPOUT+1_^1_%LDQ =N$382_'IF BUFFERED IS $1382_^1_%LDA* FUNT1_^1_%OUT -1_^1_%INQ -1_^1LOOP0 LDA* FUNT2_^1_%OUT -1_^1LO€€OP1 INQ -1_^1LOOP2 INP STATUS-*_^1_%ALS 10_^1_%TRA M_^1_%ENA 0_^1_%INP -1_^1_%ALS 4_^1_%EAM M_,ADD TO PREVIOUS_^1_%ENA 0_^1_%INP -1_^1_%ARS 2_^1_%EAM A_^1_%STA- (0)_^1STRADR NUM 0_^1_%RAO* STRADR_^1STATUS JMP* LOOP2_^1_%INQ 1_^1_%NOP 0_^1_%INP -1_^1_%STA* HOLD+1_^1_%AND =N$0010_%END OF OPERATION_^1_%SAN HOLD_^1_%JMP* LOOP1_^1HOLD_!LDA =N0_^1_%AND =N$0800_%WAS €A END-OF-FILE ENCOUNTERED_^1_%SAZ NOTEOF_^1_%EIN_]_^1JMPOUT JMP+ 0_,YES_^1NOTEOF JMP* LOOP0_(DO A MOTION FUNCTION REQUEST_^1FUNT1 NUM $414_^1FUNT2 NUM $100_^1_%END_]_^__PBOOTM2 CSY/ B62 P€1_%NAM BOOTM2_'DECK-ID B62 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1START STA* STRADR_^1_%STA* JMPOUT+1_^1_%LDQ =N$382_'IF BUFFERED IS $1382_^1_%LDA* FUNT1_^1_%OUT -1_^1_%INQ -1_^1LOOP0 LDA* FUNT2_^1_%OUT -1_^1LOOP1 INQ -€|1_^1LOOP_!INP STATUS-*_^1_%STA* (STRADR)_^1_%RAO* STRADR_^1STATUS JMP* LOOP_^1_%INQ 1_^1_%NOP 0_^1_%INP -1_^1_%STA* HOLD+1_^1_%AND =N$0010_%END OF OPERATION_^1_%SAN HOLD_^1_%JMP* LOOP1_^1HOLD_!LDA =N0_^1_%AND =N$0800_%WAS A END-OF-FILE ENCOUNTERED_^1_%SAZ NOTEOF_^1JMPOUT JMP+ 0_,YES_^1NOTEOF JMP* LOOP0_^1STRADR NUM 0_^1FUNT1 NUM $44C_^1FUNT2 NUM $100_^1_%END_]_^__|PSMM1 CSY/ B54 P€1_%NAM SMM1_)DECK-ID B54 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$TO USE TYPE *SMM7T_^1*_]_^1*_]_^1*_*SET THE STOP AND SKIP SWITCHES_^1*_]_^1*_*CLEAR THE PROG PROTECT SWITCH._^1*_]_^1*_*Q WILL CONTAIN THE EQUIP ADDRESS (LOAD F€€ROM_^1*_*THIS CAN BE CHANGED AT THIS TIME)._^1*_]_^1*_*RUN_^1*_]_^1_%ENT SMM7T_^1SMM7T SWS 1_^1_%JMP* SMM7T_(WAIT FOR SKIP SWITCH_^1_%IIN 0_^1_%LDQ* EQUIP_^1_%SLS 0_^1_%STQ* EQUIP_^1_%ENQ ENDBT-MOVEAD+1_^1MOVE1 LDA* MOVEAD,Q_$MOVE BOOTSTRAP_^1_%STA* (MOVEAD),Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* MOVE1_^1_%CLR A_^1_%JMP- (0)_*GO TO BOOTSTRAP_^1MOVEAD NUM $7FE0_^1MTBOOT STA* *-1€€_^1_%LDQ- 0_^1EQUIP NUM $382_)EQUIP ADDRESS_^1_%LDA =N$405_'SEL UNIT 0 + BINARY + CHAR MODE_^1_%OUT -1_^1_%INA $401-$405_#CLR CONT + REWIND_^1_%INQ -1_^1_%OUT -1_^1_%ARS 2_,START READ MOTION_^1_%OUT -1_^1_%INQ -1_^1_%ENA 0_^1_%JMP* MT2_^1MT1_"INP -1_+INP BYTES_^1_%ALS 6_,SHIFT INTO POSN._^1_%EOR* (MTBOOT-1)_^1_%SAZ ENDBT-*-1_$SKIP IF FRAME IS ZERO_^1_%SPA* (MTBOOT-1)_€^1_%RAO* MTBOOT-1_$BUMP ADRS + 1_^1MT2_"INP -1_+INP DATA BYTE 1_^1_%SPA* (MTBOOT-1)_^1_%INP -1_+INP DATA BYTE 2_^1_%ALS 10_+SHIFT INTO POSN_^1_%EOR* (MTBOOT-1)_"MERGE WITH BYTE 1_^1_%SPA* (MTBOOT-1)_"STORE_^1_%JMP* MT1_^1ENDBT JMP- 7_^1_%END SMM7T_^__PSMM2 CSY/ B55 P€1_%NAM SMM2_)DECK-ID B55 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$TO USE TYPE *SMM9T_^1*_]_^1*_]_^1*_*SET THE STOP AND SKIP SWITCHES_^1*_]_^1*_*CLEAR THE PROG PROTECT SWITCH._^1*_]_^1*_*Q WILL CONTAIN THE EQUIP ADDRESS (LOAD F€€ROM_^1*_*THIS CAN BE CHANGED AT THIS TIME)._^1*_]_^1*_*RUN_^1*_]_^1_%ENT SMM9T_^1SMM9T SWS 1_^1_%JMP* SMM9T_^1_%IIN 0_^1_%LDQ* EQUIP_^1_%SLS 0_^1_%STQ* EQUIP_^1_%ENQ ENDBT-MOVEAD+1_^1MOVE1 LDA* MOVEAD,Q_^1_%STA* (MOVEAD),Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* MOVE1_^1_%CLR A_^1_%JMP- (0)_^1MOVEAD NUM $7FE0_^1MTBOOT STA* MTBOOT-1_^1_%LDQ- 0_^1EQUIP NUM $382_^1_%LDA =N$44C_'SE€L UNIT 0 + ASSY/DISASY + 800 BPI + BINARY_^1_%OUT -1_^1_%INA $400-$44C_!REWIND_^1_%INQ -1_^1_%OUT -1_^1_%ARS 2_,START READ MOTION_^1_%OUT -1_^1_%INQ -1_^1MT91_!INP -1_+DATA_^1_%STA* (MTBOOT-1)_^1_%SAZ ENDBT-*-1_^1_%RAO* MTBOOT-1_^1_%JMP* MT91_^1ENDBT JMP- 7_^1_%END SMM9T_^__PSMM3 CSY/ B56 P€1_%NAM SMM3_)DECK-ID B56 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$TO USE TYPE *SMMPT_^1*_]_^1*_]_^1*_*SET THE STOP AND SKIP SWITCHES_^1*_]_^1*_*CLEAR THE PROG PROTECT SWITCH._^1*_]_^1*_*Q WILL CONTAIN THE EQUIP ADDRESS (LOAD F€€ROM_^1*_*THIS CAN BE CHANGED AT THIS TIME)._^1*_]_^1*_*RUN_^1*_]_^1_%ENT SMMPT_^1SMMPT SWS 1_^1_%JMP* SMMPT_^1_%IIN 0_^1_%LDQ* EQUIP_^1_%SLS 0_^1_%STQ* EQUIP_^1_%ENQ ENDBT-MOVEAD+1_^1MOVE1 LDA* MOVEAD,Q_^1_%STA* (MOVEAD),Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* MOVE1_^1_%CLR A_^1_%JMP- (0)_^1MOVEAD NUM $7FE0_^1PTBOOT STA* PTBOOT-1_^1_%LDQ- 0_^1EQUIP NUM $A1_^1_%ENA $20_*START €ΤMOTION_^1_%OUT -1_^1_%INQ -1_^1PT1_"INP -1_^1_%SAN PT2+1_^1_%JMP* PT1_^1PT2_"INP -1_^1_%ALS 8_^1_%INP -1_^1_%STA* (PTBOOT-1)_^1_%SAZ ENDBT_^1_%RAO* PTBOOT-1_^1_%JMP* PT2_^1ENDBT JMP- 7_^1_%END SMMPT_^__ΤPSMM4 CSY/ B57 P€1_%NAM SMM4_)DECK-ID B57 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$TO USE TYPE *SMM430_^1*_]_^1*_]_^1*_*SET THE STOP AND SKIP SWITCHES_^1*_]_^1*_*CLEAR THE PROG PROTECT SWITCH._^1*_]_^1*_*Q WILL CONTAIN THE EQUIP ADDRESS (LOAD €€FROM_^1*_*THIS CAN BE CHANGED AT THIS TIME)._^1*_]_^1*_*RUN_^1*_]_^1_%ENT SMM430_^1SMM430 SWS 1_^1_%JMP* SMM430_^1_%IIN 0_^1_%LDQ* EQUIP_^1_%SLS 0_^1_%STQ* EQUIP_^1_%ENQ ENDBT-MOVEAD+1_^1MOVE1 LDA MOVEAD,Q_^1_%STA* (MOVEAD),Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* MOVE1_^1_%CLR A_^1_%JMP- (0)_^1MOVEAD NUM $7FE0_^1BOT430 ENA -1_^1_%STA* BOT430-1_^1_%LDQ- 0_^1EQUIP NUM $5A1_^1_%€vLDA* FCN430_^1_%OUT -1_^1BOOT1 INQ -1_^1_%INP INTREJ-*_^1_%ALS 8_^1_%RAO* BOT430-1_^1_%STA* (BOT430-1)_^1_%INP -1_^1_%EOR* (BOT430-1)_^1INTREJ STA* (BOT430-1)_^1EXTREJ LDQ* EQUIP_^1_%INP -1_^1_%ALS 11_^1_%SAM 1_^1_%JMP* BOOT1_^1_%LDA* (BOT430-1)_^1_%SAZ 2_^1_%JMP* EQUIP+1_%(JMP* BOOT1 FOR 405)_^1FCN430 NUM $81_*($401 FOR 405)_^1ENDBT JMP- 7_^1_%END SMM430_^__vPVERFY1 CSY/ A30 P€1_%NAM VERIFY_'DECK-ID A30 MSOS 4.2_-SUMMARY-090_^1*_$MSOS VERIFICATION TEST CONTROL PROGRAM_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1_%SPC 2_^1*_$THIS IS THE INITIAL CONTROL PROGRAM FOR THE MSOS VERIFICATION_^1*_$TESTS._!IT PERFORMS THE NECESSARY INITIALIZATI€€ON FUNCTIONS_^1*_$FOR THE REMAINDER OF THE TESTS AND DETERMINES THAT THE VERIFI-_^1*_$CATION MATERIALS ARE CONTAINED ON THE INSTALLATION LOGICAL_^1*_$UNIT._!IT IS ALSO USED TO RESTART THE TESTS IN THE EVENT OF_^1*_$ABNORMAL TERMINATION._^1_%SPC 2_^1*_$E N T R Y_!P O I N T S_!A N D_!E X T E R N A L S_^1_%SPC 2_^1_%ENT VERFY1_^1_%EXT VERIFY_'VERIFICATION TEST ORDINAL NAME_^1_%EXT€€ LOG1A_(PHYSICAL DEVICE TABLE ADDRESS TABLE_^1_%EXT MAXSEC_'MAXIMUM SECTOR OF SYSTEM SCRATCH_^1_%EXT JOBSTR_'BATCH PROCESSING ENTRY IN MINT_^1_%EXT INSTLU_'SYSTEM INSTALLATION LOGICAL UNIT_^1_%EXT INPTV4_'STANDARD INPUT LU FOR JOB PROCESSOR_^1_%SPC 2_^1*_$E Q U I V A L E N C E S_^1_%SPC 2_^1_%EQU LSIZE(600)_"NUMBER OF SECTORS RESERVED FOR PSEUDO LISTING_^1_%EQU AFNR($B5)_#€€DRIVER FIND-NEXT-REQUEST ROUTINE_^1_%EQU ACMPR($B6)_"DRIVER COMPLETE REQUEST ROUTINE_^1_%EQU ADISP($EA)_"SYSTEM DISPATCHER_^1_%EQU AMONI($F4)_"MONITOR REQUEST ENTRY_^1_%EQU LPMASK(2)_#BIT MASK TABLE_^1_%EQU ZERO($22)_#LOCATION CONTAINING ZERO_^1_%EQU ONEBIT($23)_!SINGLE BIT TABLE_^1_%EQU ZROBIT($33)_!ZERO BIT MASK TABLE_^1_%EQU TEN($46)_$LOCATION CONTAINING TEN_^1_%EQU ELU€€(5)_'P. D. T. ENTRY FOR LOGICAL UNIT_^1_%EQU ESTAT1(9)_#P. D. T. ENTRY FOR DRIVER STATUS_^1_%EQU ECCOR(10)_#P. D. T. ENTRY FOR CURRENT DATA LOCATION_^1_%EQU ELSTWD(11)_"P. D. T. ENTRY FOR LAST DATA LOCATION_^1_%EQU ESTAT2(12)_"P. D. T. ENTRY FOR REQUEST STATUS_^1_%EQU TERMIN(7)_#TERMINATION INDICATOR IN THE PSEUDO P.D.T._^1_%EJT_]_^1*_8LOCORE AREA ($47 - $B2) USED BY THE TESTS€€_^1_%SPC 1_^1_%EQU COMPAR($47)_!STARTING ADDRESS OF THE MESSAGE COMPARE_^1_%EQU BASE($57)_#STARTING ADDRESS OF THE PSEUDO DRIVER_^1_%EQU INDEX($A6)_"TEST INDEX_^1_%EQU VMAXSC($A7)_!NORMAL VALUE OF MAXSEC_^1_%EQU ASECT($A8)_"ADDRESS OF THE CURRENT PSEUDO LISTING_^1_%EQU EXIT($A9)_#TEST EXIT INDICATOR_^1_%EQU CONTLU($A9)_!ASCII VALUE OF THE LIBILD CONTROL L.U._^1_%EQU COMPDT€€($AA)_!PSEUDO COMMENT DEVICE P.D.T._^1_%EQU INPPDT($AB)_!NORMAL SYSTEM INPUT DEVICE P.D.T._^1_%EQU TTYPDT($AC)_!NORMAL COMMENT DEVICE P.D.T._^1_%EQU PTRPDT($AD)_!NORMAL SYSTEM LIST DEVICE P.D.T._^1_%EQU VEXIT($AE)_"TEST RETURN ROUTINE_^1_%EQU VBASE($AE)_"TEST RETURN ROUTINE BASE ADDRESS_^1_%SPC 2_^1VERFY1 ADC 0_^1_%LDA- EXIT_^1_%SUB =N$1414_%IS THIS THE FINAL ENTRY_^1_%SAZ €€ V0_+YES_^1_%JMP* V5_+NO_^1_%SPC 2_^1*_$TEST EXIT - RESTORE THE SYSTEM TO NORMAL CONDITION_^1_%SPC 1_^1V0_#LDA- INDEX_^1_%STA* ERFLAG_'SAVE FOR LATER CHECKING_^1_%SPC 1_^1_%LDQ* LLOG1A_^1_%LDA- INPPDT_^1_%STA- 10,Q_)RESTORE THE STANDARD INPUT P.D.T._^1_%LDA- TTYPDT_^1_%STA- 4,Q_*RESTORE THE SYSTEM COMMENT P.D.T._^1_%LDA- PTRPDT_^1_%STA- 9,Q_*RESTORE THE SYSTEM LIST P.D.T._^1_%ST€€A- 12,Q_)ALSO THE FORTRAN LIST DEVICE_^1_%SPC 1_^1_%LDA+ INPTV4_'RESTORE ASCII BIT TO JOB PROCESSOR INPUT LU_^1_%AND- ZROBIT+12_^1_%EOR- ONEBIT+12_^1_%STA+ INPTV4_^1_%SPC 1_^1_%LDA- VMAXSC_^1_%STA+ MAXSEC_'RESTORE THE NORMAL VALUE OF MAXSEC_^1_%EJT_]_^1_%LDQ- $E9_^1_%ENA 96_+CALCULATE THE CORE IMAGE SECTOR_^1_%MUI- 4,Q_*IN WORD ADDRESS MODE_^1_%LLS 1_^1_%ALS 15_^1_%INA $47_*C€€ALCULATE THE TEST AREA IMAGE ADDRESS_^1_%SAP V1_^1_%AND- LPMASK+15_^1_%INQ 1_^1V1_#STQ* MSB_^1_%STA* LSB_^1_%SPC 1_^1_%RTJ* ABSADD_'CALCULATE THE ABSOLUTE COMPLETION_^1ABSADD NUM 0_^1_%LDA* ABSADD_^1_%ADD* OFFSET_^1_%STA* CMP_^1_%SPC 1_^1_%RTJ- (AMONI)_%RESTORE THE TEST AREA IN LOCORE_^1_%ADC $4244_^1CMP_"ADC 0_^1_%ADC 0_^1_%ADC $08C2_^1_%ADC $B2-$47+1_^1_%ADC $47_^1MSB_€€"ADC 0_^1LSB_"ADC 0_^1_%JMP- (ADISP)_^1_%SPC 1_^1V2_#LDA* ERFLAG_'IS THIS AN ERROR EXIT_^1_%SAN V3_+NO_^1_%JMP* V15_*YES, RETURN TO VERFY2_^1_%SPC 1_^1V3_#ENQ 0_,PRINT THE FINAL TEST MESSAGE_^1_%RTJ* MESSAG_^1_%SPC 1_^1V4_#RTJ- (AMONI)_%RELEASE AND EXIT_^1P5_#ADC $1901_^1_%ADC (VERFY1-P5)_^1_%EJT_]_^1*_$INITIAL ENTRY - ASSURE THAT THE VERIFICATION MATERIALS ARE_^1*_5PROPER€€LY LOADED ON THE INSTALLATION DEVICE_^1_%SPC 2_^1V5_#LDA =XINSTLU_$OBTAIN THE INSTALLATION LOGICAL UNIT_^1_%STA* ILU_^1_%ADD- ONEBIT+12_#ADD THE ASCII MODE_^1_%STA RLU_^1_%SPC 1_^1_%RTJ READLU_'READ A RECORD FROM THE INSTALL DEVICE_^1_%SPC 1_^1_%LDQ* LLOG1A_^1_%ADQ* ILU_^1_%LDQ- (ZERO),Q_^1_%LDA- ESTAT2,Q_^1_%ALS 4_,WAS THE RECORD A FILE MARK_^1_%SAP V6_+NO_^1_%SPC 1_^1_%R€€TJ* READLU_'YES, READ ANOTHER RECORD_^1_%SPC 1_^1V6_#ENQ 2_^1_%LDA IBUF,Q_^1_%SUB* KEY,Q_(ARE THE VERIFICATION MATERIALS LOADED_^1_%SAN V7_+NO_^1_%INQ -1_^1_%SQM V8_+YES_^1_%JMP* V6+1_^1_%SPC 1_^1V7_#ENQ 1_,PRINT 'MATERIALS NOT LOADED' MESSAGE_^1_%RTJ* MESSAG_^1_%JMP* V4_+RELEASE AND EXIT_^1_%SPC 2_^1ERFLAG ADC 1_^1ILU_"ADC 0_^1OFFSET ADC V2-ABSADD_^1LLOG1A ADC LOG1A_^€€1KEY_"ALF $,VERIFY$_^1_%EJT_]_^1V8_#LDA* IBUF+5_'OBTAIN THE PSR LEVEL_^1_%STA MESS2+19_$AND PLACE IN THE MESSAGE_^1_%SPC 1_^1_%ENQ 2_,PRINT INITIAL TEST MESSAGE_^1_%RTJ* MESSAG_^1_%SPC 1_^1_%LDA+ MAXSEC_^1_%STA- VMAXSC_'SAVE THE NORMAL VALUE OF MAXSEC_^1_%SUB =XLSIZE_%RESERVE AN AREA FOR THE VERIFICATION LISTING_^1_%STA+ MAXSEC_^1_%STA SECT_)SET UP THE PSEUDO LISTING DRIVER_€€^1_%LDA =XSECT-COMDVR+BASE_^1_%STA- ASECT_(SAVE THE ADDRESS OF SECT_^1_%SPC 1_^1_%ENQ CDRSIZ_^1V9_#LDA COMDVR,Q_$TRANSFER THE PSEUDO COMMENT DRIVER_^1_%STA- BASE,Q_'TO LOCORE_^1_%INQ -1_^1_%SQM V10_^1_%JMP* V9_^1_%SPC 1_^1V10_"ENQ VXTSIZ_^1_%LDA VXXIT,Q_%TRANSFER THE VERIFICATION EXIT ROUTINE_^1_%STA- VBASE,Q_%TO LOCORE_^1_%INQ -1_^1_%SQM V11_^1_%JMP* V10+1_^1_%SPC 1_^1€€V11_"ENQ CDMSIZ_^1_%LDA CMPDMY,Q_$TRANSFER THE DUMMY MESSAGE COMPARE ROUTINE_^1_%STA- COMPAR,Q_$TO LOCORE_^1_%INQ -1_^1_%SQM V12_^1_%JMP* V11+1_^1_%SPC 1_^1V12_"SWN V13_^1_%ENQ 3_,INDICATE THAT ERROR MODE IS SELECTED_^1_%RTJ* MESSAG_^1_%EJT_]_^1V13_"LDA* LLOG1A_^1_%STA- I_^1_%LDA- 9,I_^1_%STA- PTRPDT_'SAVE THE NORMAL PRINTER P.D.T._^1_%SPC 1_^1_%LDA- 4,I_^1_%STA- TTYPDT_'SA€€VE THE NORMAL COMMENT DEVICE P.D.T._^1_%SPC 1_^1_%LDA- 10,I_^1_%STA- INPPDT_'SAVE THE NORMAL SYSTEM INPUT P.D.T_^1_%SPC 1_^1_%LDA =XPCOMNT-COMDVR+BASE_^1_%STA- COMPDT_^1_%STA- 4,I_*SET UP THE PSEUDO COMMENT DRIVER P.D.T._^1_%SPC 1_^1_%SWS V14_*ERROR MODE_^1_%LDA- 2,I_^1_%STA- 9,I_*SET THE STANDARD LIST DEVICE TO THE DUMMY_^1_%SPC 1_^1V14_"LDQ* ILU_^1_%LDA- (I),Q_^1_%STA- 10,I€€_)SET THE STANDARD INPUT TO THE INSTALL DEVICE_^1_%SPC 1_^1_%LDA* ILU_^1_%CLR Q_^1_%DVI- TEN_^1_%QLS 8_^1_%LLS 8_,CONVERT THE VERIFICATION LU TO ASCII_^1_%ADD =A00_^1_%STA- CONTLU_'AND SAVE_^1_%SPC 1_^1_%RAO- INDEX_(INCREMENT THE TEST INDEX_^1_%SPC 1_^1_%LDA+ INPTV4_'SET JOB PROCESSOR LU TO BINARY MODE_^1_%AND- ZROBIT+12_^1_%STA+ INPTV4_^1_%SPC 1_^1_%RTJ- (AMONI)_%SCHEDULE €€THE BATCH PROCESSING ADDRESS_^1_%ADC $5203_^1_%ADC JOBSTR_'IN PROGRAM MINT_^1_%SPC 1_^1V15_"LDQ VERFY1_'WAS THE PROGRAM ENTERED FROM VERFY2_^1_%SQZ V16_*NO_^1_%JMP- (ZERO),Q_$YES, RETURN_^1V16_"JMP* V4_+RELEASE AND EXIT_^1_%EJT_]_^1*_$MESSAGE SUBROUTINE_^1*_]_^1*_$ENTRY CONDITIONS - Q REGISTER = MESSAGE INDEX_^1_%SPC 2_^1MESSAG NOP 0_^1_%LDA* MESSAD,Q_$SET UP MESSAGE ADDRESS€€_^1_%STA* MES_^1_%LDA* MESLEN,Q_$SET UP MESSAGE LENGTH_^1_%STA* LEN_^1_%SPC 1_^1_%RTJ- (AMONI)_%PRINT THE MESSAGE_^1PM1_"ADC $0D44_^1_%ADC M1-PM1_^1_%ADC 0_^1_%ADC $18FC_^1LEN_"ADC 0_^1MES_"ADC 0_^1_%JMP- (ADISP)_^1_%SPC 1_^1M1_#JMP* (MESSAG)_$RETURN_^1_%SPC 2_^1MESSAD ADC MESS0-PM1_#MESSAGE INDEX 0_^1_%ADC MESS1-PM1_31_^1_%ADC MESS2-PM1_32_^1_%ADC MESS3-PM1_33_^1_%SP€€C 1_^1MESLEN ADC LMES0_(MESSAGE LENGTH 0_^1_%ADC LMES1_71_^1_%ADC LMES2_72_^1_%ADC LMES3_73_^1_%SPC 2_^1READLU NOP 0_^1_%RTJ- (AMONI)_%READ ONE RECORD_^1PR1_"ADC $0944_^1_%ADC R1-PR1_^1_%ADC 0_^1RLU_"ADC 0_^1_%ADC 40_^1_%ADC IBUF-PR1_^1_%JMP- (ADISP)_^1_%SPC 1_^1R1_#JMP* (READLU)_^1_%SPC 2_^1IBUF_!NUM $FFFF_^1_%BZS BUF(39)_^1_%EJT_]_^1*_$PSEUDO DEVICE DRIVER_^1*_]_€€^1*_$THIS DRIVER TRAPS REQUESTS TO THE SYSTEM COMMENT AND LIST_^1*_$DEVICES._!COMMENT DEVICE REQUESTS ARE VERIFIED BY USE OF_^1*_$THE OPTIONAL SUBROUTINE 'COMPARE', AND LIST DEVICE REQUESTS_^1*_$ARE WRITTEN TO A RESERVED AREA OF THE MASS STORAGE DEVICE_^1*_$FOR LATER VERIFICATION._^1_%SPC 2_^1COMDVR STQ- I_^1_%SPC 1_^1NEXT_!RTJ- (AFNR)_'GET THE NEXT ACTIVE REQUEST_^1_%JMP- (ADISP€€)_%NO REQUESTS, EXIT_^1_%SPC 1_^1_%LDQ- ECCOR,I_%OBTAIN THE BUFFER ADDRESS_^1_%LDA- ESTAT1,I_$IS THIS A WRITE REQUEST_^1_%AND- ONEBIT_^1_%SAN WRITE_(YES_^1_%SPC 1_^1_%LDA- ESTAT2,I_^1_%STA- (ZERO),Q_$PROVIDE THE REQUIRED REPLY_^1_%SPC 1_^1_%LDA- TERMIN,I_$IS THIS THE FINAL ENTRY_^1_%SAN COMP_)NO_^1_%STQ- TERMIN,I_$YES, RESET THE INDICATOR_^1_%RTJ- (ACMPR)_%COMPLETE THE REQUEST€€_^1_%RTJ- (AFNR)_^1_%JMP- VEXIT_(RETURN TO THE TEST EXECUTIVE_^1_%JMP- VEXIT_^1_%SPC 1_^1COMP_!RTJ- (ACMPR)_%COMPLETE THE REQUEST_^1_%JMP* NEXT_)EXIT_^1_%SPC 1_^1WRITE LDA- ELU,I_^1_%INA -4_+IS THIS A REQUEST TO THE COMMENT DEVICE_^1_%SAZ COMMNT_'YES_^1_%SPC 1_^1_%RAO* SECT_)LISTING REQUEST_^1_%LDA- $B3_*SET UP THE LOGICAL UNIT_^1_%JMP* IORQST_'WRITE THE DATA TO THE SCRATCH D€€EVICE_^1_%EJT_]_^1COMMNT LDA- (ZERO),Q_^1_%LDQ* STARZ_^1_%SUB* J_,IS THE MESSAGE A 'J'_^1_%SAN NOTJ_)NO_^1_%STA- TERMIN,I_$INDICATE A TERMINATION_^1_%SPC 1_^1SAVE_!STQ- ESTAT2,I_$SAVE THE REPLY_^1_%JMP* COMP_)COMPLETE THE REQUEST_^1_%SPC 1_^1NOTJ_!RTJ- COMPAR_'CHECK FOR OTHER MESSAGES_^1_%JMP* SAVE_)A MESSAGE WAS RECOGNIZED_^1_%SPC 1_^1_%LDQ* ALOG1A_'NO RECOGNIZED MESSAGES_^1_%€€LDA- COMPDT_'SET UP THE STD. INPUT DEVICE_^1_%STA- 10,Q_)IN CASE OF JOB ABORT_^1_%LDA- TTYPDT_^1_%STA- 4,Q_*RESTORE THE NORMAL COMMENT DEVICE P.D.T._^1_%ENA 4_,SET UP THE LOGICAL UNIT_^1_%LDQ- ECCOR,I_^1_%SPC 1_^1IORQST STA* REQLU_^1_%STQ* BUFAD_(SAVE THE DATA BUFFER ADDRESS_^1_%TCQ A_^1_%ADD- ELSTWD,I_$CALCULATE THE REQUEST LENGTH_^1_%STA* BUFLN_(AND SAVE_^1_%SPC 1_^1_%RTJ- (A€€MONI)_%PERFORM AN INDIRECT MONITOR REQUEST_^1_%ADC $6000_^1_%ADC REQUST-COMDVR+BASE_^1_%JMP- (ADISP)_%EXIT_^1_%SPC 1_^1RQCOMP LDA- COMPDT_^1_%STA- I_,RESTORE THE P. D. T. ADDRESS_^1_%JMP* COMP_)COMPLETE THE REQUEST_^1_%SPC 1_^1REQUST ADC $4CAA_^1_%ADC RQCOMP-COMDVR+BASE_^1_%ADC 0_^1REQLU ADC 0_^1BUFLN ADC 0_^1BUFAD ADC 0_^1_%ADC 0_^1SECT_!ADC $7FFF_^1_%EJT_]_^1*_$PSE€€UDO DRIVER PHYSICAL DEVICE TABLE_^1_%SPC 2_^1PCOMNT ADC $520E_(00 SCHEDULER CALL_^1_%ADC BASE_)01 INITIATOR ADDRESS_^1ALOG1A ADC LOG1A_(02 ** LOG1A ADDRESS_^1STARZ ALF 1,*Z_)03 ** CONSTANT_^1_%NUM -1_+04 DIAGNOSTIC CLOCK_^1_%NUM 0_,05 LOGICAL UNIT_^1_%NUM 0_,06 PARAMETER LOCATION_^1_%NUM -1_+07 ** TERMINATION INDICATOR_^1_%ADC $3006_(08 REQUEST STATUS_^1_%NUM 0€€_,09 DRIVER STATUS_^1_%NUM 0_,10 CURRENT LOCATION_^1_%NUM 0_,11 LAST LOCATION PLUS ONE_^1_%NUM 0_,12 DEVICE STATUS_^1_%ADC 0_,13 ** SPARE_^1J_$ALF 1,J_*14 ** CONSTANT_^1_%NUM 0_,15 RESERVED FOR FNR AND CMR_^1_%SPC 1_^1_%EQU CDRSIZ(*-COMDVR-1)_^1_%SPC 4_^1VXXIT RTJ- (AMONI)_%RESCHEDULE THE VERIFICATION ORDINAL_^1_%ADC $1014_^1_%ADC (VERIFY)_^1_%ADC 5_,AFTER 0.5 S€€ECONDS_^1_%JMP- (ADISP)_^1_%SPC 1_^1_%EQU VXTSIZ(*-VXXIT-1)_^1_%SPC 2_^1CMPDMY NOP 0_,DUMMY MESSAGE COMPARISON_^1_%RAO* CMPDMY_'INDICATE NO COMPARISON_^1_%JMP* (CMPDMY)_$AND RETURN_^1_%SPC 1_^1_%EQU CDMSIZ(*-CMPDMY-1)_^1_%EJT_]_^1MESS0 ADC $200D_^1_%ALF $,MSOS VERIFICATION TESTS COMPLETE.$_^1_%EQU LMES0(*-MESS0)_^1MESS1 ALF $,TEST MATERIALS NOT LOADED$_^1_%EQU LMES1(*-€΄MESS1)_^1MESS2 ALF $,MSOS 4 VERIFICATION TESTS--PSR LEVEL XX$_^1_%EQU LMES2(*-MESS2)_^1MESS3 ADC $200D_^1_%ALF $,_"ERROR MODE SELECTED$_^1_%EQU LMES3(*-MESS3)_^1_%END_]_^__΄PSBCONV CSY/ B63 P€1_%NAM SBCONV_'DECK-ID B63 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT SBCONV_^1_'EXT* LQZWT9_^1SBCONV NUM 0_^1STOR1 ENA 1_^1_%STA- I_^1STOR2 RTJ* STOR2W_'STORE 2 WRDS IN 3 WRDS_^1_%LDA- I_^1_%INA 2_^1_%STA- I_^1_%INA €€ -41_+WHOLE CARD FULL_^1_%SAZ 1_,YES_^1_%JMP* STOR2_^1_%RTJ* PUNCH_(PUNCH 1 CARD_^1_%LDA* COUNT_^1_%INA -40_^1_%STA* COUNT_^1_%SAM 1_^1_%JMP* STOR1_^1_%RTJ- ($F4)_%EXIT_^1_%NUM $A00_^1*_]_^1STOR2W NUM 0_,PACKING SUBPROGRAM_^1_%LDA* (LABELS)_^1_%CLR Q_^1_%LLS 8_^1_%QLS 4_^1_%STQ* (BFRADR)_^1_%RAO* BFRADR_^1_%CLR Q_^1_%LLS 12_^1_%RAO* LABELS_^1_%LDA* (LABELS)_^1_%RAO* LA€€BELS_^1_%LLS 4_^1_%STQ* (BFRADR)_^1_%RAO* BFRADR_^1_%CLR Q_^1_%LLS 4_^1_%QLS 4_^1_%LLS 8_^1_%STQ* (BFRADR)_^1_%RAO* BFRADR_^1_%JMP* (STOR2W)_^1LABELS ADC LABEL1+1_^1BFRADR ADC BFR_^1CRDCNT NUM 0_^1KLAD NUM 0_^1*_]_^1PUNCH NUM 0_^1_(ENQ 15_^1_(RAO* CRDCNT_^1_'LDA* CRDCNT_^1NR_$ALS_!1_^1_'SAP_!REPA-*-1_^1_%STA* KLAD_^1_%LDA* (BFRS),Q_^1_%INA 8_^1_%STA* (BFRS),Q_^1€z_%LDA* KLAD_^1REPA AND =N$7FFF_^1_'INQ_!3_^1_'SAZ 1_^1_%JMP*_!NR_^1_%RTJ- ($F4)_^1_%NUM $400_)UNFORMAT BIN WRITE_^1_%NUM 0_^1THREAD NUM 0_^1_%NUM $8FA_^1_%NUM 60_^1BFRS ADC BFR_^1WAIT_!LDA* THREAD_^1_%SAZ 1_^1_%JMP* WAIT_^1_%LDA* BFRS_^1_%STA* BFRADR_^1_%JMP* (PUNCH)_^1*_]_^1_%BSS BFR(60)_'OUTPUT BUFFER_^1LABEL1 ADC LQZWT9_^1_%EQU COUNT(LABEL1)_^1_%END_]_^__zPSBCCON CSY/ B64 PP1_%NAM SBCCON_'DECK-ID B64 MSOS 4.1_-SUMMARY-079_^1*_$DEFINE LAST ADDRESS FOR ABSOLUTIZING 8-BIT CARD OUTPUT_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT LQZWT9_^1_%BSS LQZWT9(1)_^1_%END SBCCON_^__PPFMDUMY CSY/ F04 P€1_%NAM FMDUMY_'DECK-ID F04 MSOS 4.1_-SUMMARY-079_^1*_$FILE MANAGER MASS RESIDENT DUMMY_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1_%SPC 2_^1*_$THIS PROGRAM IS USED TO ALLOW THE SECTOR POINTER TO BE_^1*_$CORRECTLY SPECIFIED FOR THE FILE MANAGER REQUEST PROCESSORS_€,^1_%SPC 2_^1_%BSS DUMMY(96)_^1_%END_]_^__,PQCDDMY CSY/ B50 P€1_%NAM QCDDMY_'DECK-ID B50 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM INITIALIZER DUMMY CARD READER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT QCARD_^1_%ENT ECARD_^1QCARD NUM $FFFF_(DUMMY ENTRY_^1ECARD NUM 0_,DUMMY EQUIPMENT CODE_^1_%END_]_^__€PQMTDMY CSY/ B49 P€1_%NAM QMTDMY_'DECK-ID B49 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM INITIALIZER DUMMY MAG TAPE DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT QMTAPE_^1_%ENT EMTAPE_^1QMTAPE NUM $FFFF_(DUMMY ENTRY_^1EMTAPE NUM 0_,DUMMY EQUIPMENT CODE_^1_%END_]_^__€PQPRDMY CSY/ B48 P€1_%NAM QPRDMY_'DECK-ID B48 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM INITIALIZER DUMMY LINE PRINTER DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT QPRINT_^1_%ENT EPRINT_^1QPRINT NUM $FFFF_(DUMMY ENTRY_^1EPRINT NUM 0_,DUMMY EQUIPMENT CODE_^1_%END_]_€^__AM QPRDMY_'DECK-ID PQDKDMY CSY/ B52 P€1_%NAM QDKDMY_'DECK-ID B52 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM INITIALIZER DUMMY DISK DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT QDISK_^1_%ENT EDISK_^1_%ENT DISK_^1QDISK NUM $FFFF_(DUMMY ENTRY_^1EDISK NUM 0_,DUMMY EQUIPMENT CODE_^1_%EQ€U DISK(QDISK)_^1_%END_]_^__PQDMDMY CSY/ B53 P€1_%NAM QDMDMY_'DECK-ID B53 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM INITIALIZER DUMMY DRUM DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT QDRUM_^1_%ENT EDRUM_^1_%ENT DRUM_^1QDRUM NUM $FFFF_(DUMMY ENTRY_^1EDRUM NUM 0_,DUMMY EQUIPMENT CODE_^1_%EQ€U DRUM(QDRUM)_^1_%END_]_^__PQPTDMY CSY/ B51 P€1_%NAM QPTDMY_'DECK-ID B51 MSOS 4.1_-SUMMARY-079_^1*_$SYSTEM INITIALIZER DUMMY PAPER TAPE DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%ENT QPTAPE_^1_%ENT EPTAPE_^1QPTAPE NUM $FFFF_(DUMMY ENTRY_^1EPTAPE NUM 0_,DUMMY EQUIPMENT CODE_^1_%END_]_^_€_%NAM QPTDMY_'DECK-IPCOSY CSY/ J05 P€1_%NAM COSY_)DECK-ID J05 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_*COSY (COMPRESSED SYMBOLIC) VERSION 2.0._)**MSOS4.0**_^1_%ENT COSY_^1*_]_^1*_*THE FOLLOWING INSTRUCTIONS ASSIGN LABELS TO ALL LOCATIONS_^1*_,IN THE COMMUNICATI€€ONS REGION THAT ARE REFERENCED BY COSY._^1*_*ALL REFERENCES TO THE COMMUNICATIONS REGION ARE MADE USING_^1*_,THESE LABELS._^1*_]_^1LPMASK EQU LPMASK($2)_^1NZERO EQU NZERO($12)_^1ZERO_!EQU ZERO($22)_^1ONEBIT EQU ONEBIT($23)_^1MODBIT EQU MODBIT($2F)_!ASCII MODE BIT._3**MSOS4.0**_^1CLRMOD EQU CLRMOD($3F)_!CLEAR ASCII MODE BIT._-**MSOS4.0**_^1TEN_"EQU TEN($46)_^1STDSCR EQU STD€€SCR($B3)_^1DISP_!EQU DISP($EA)_^1REQPRO EQU REQPRO($F4)_^1STDINP EQU STDINP($F9)_^1STDTBL EQU STDTBL($E9)_E**MSOS4.0**_^1STDOCD EQU STDOCD($FC)_^1STDICD EQU STDICD($FD)_^1_%SPC 5_O**MSOS4.0**_^1*_$THE FOLLOWING VALUES ARE SEQUENTIALLY ADDED TO_'**MSOS4.0**_^1*_$THE ADDRESS CONTAINED AT $E9(EXTRV4) TO GET THE_%**MSOS4.0**_^1*_$COSY STANDARD LOGICAL UNITS._9**MSOS4.0**_^1_%SPC€€ 2_O**MSOS4.0**_^1CSYINP EQU CSYINP(1)_%COSY STANDARD INPUT DEVICE._%**MSOS4.0**_^1CSYOUT EQU CSYOUT(1)_%COSY STANDARD OUTPUT DEVICE._$**MSOS4.0**_^1CSYPRT EQU CSYPRT(1)_%COSY STANDARD PRINT DEVICE._%**MSOS4.0**_^1_%EJT_]_^1*_1COSY STANDARD LOGICAL UNIT ADDRESS TABLE **MSOS4.0**_^1*_]_^1CSTDIN NUM 0_,ADDRESS OF COSY STD INPUT LUN._#**MSOS4.0**_^1CSTDOT NUM 0_,ADDRESS OF COSY ST€€D OUTPUT LUN._"**MSOS4.0**_^1CSTDPT NUM 0_,ADDRESS OF COSY STD PRINT LUN._#**MSOS4.0**_^1_%SPC 4_O**MSOS4.0**_^1*_8COSY INITIALIZATION ROUTINE_^1*_]_^1COSY_!RTJ* COSY1_^1_%ADC ADDRES-COSY-1_-ADRADR_^1_%ADC TABLE-ADDRES_.TABADR_^1_%ADC REVBUF-TABLE_.ADDRES_^1_%ADC HOL-COSY-1_0ADRDCK_^1COSY1 0_"0_^1_%LDA- STDTBL_(FWA OF LOGICAL UNIT AREA._(**MSOS4.0**_^1_%INA CSYINP_J**MSOS4.€€0**_^1_%STA* CSTDIN_(COSY STANDARD INPUT DEVICE._%**MSOS4.0**_^1_%INA CSYOUT_J**MSOS4.0**_^1_%STA* CSTDOT_(COSY STANDARD OUTPUT DEVICE._$**MSOS4.0**_^1_%INA CSYPRT_J**MSOS4.0**_^1_%STA* CSTDPT_(COSY STANDARD PRINT DEVICE._%**MSOS4.0**_^1_%LDA- STDSCR_'SET SYSTEM STANDARD UNITS USED_#**MSOS4.0**_^1_%ADD- MODBIT_'BY COSY. SET ASCII MODE._***MSOS4.0**_^1_%STA UPD175_.*_:**MSOS4.0**€€_^1_%STA CPY020_J**MSOS4.0**_^1_%LDA- STDOCD_.*_:**MSOS4.0**_^1_%ADD- MODBIT_.*_:**MSOS4.0**_^1_%STA CSH065_.*_:**MSOS4.0**_^1_%LDA- STDICD_.*_:**MSOS4.0**_^1_%ADD- MODBIT_.*_:**MSOS4.0**_^1_%STA CSH075_.*_:**MSOS4.0**_^1_%LDA* COSY1_(FORM ALL ABSOLUTE ADDRESSES._^1_%ADD* COSY+1_^1_%STA ADRADR_^1_%ADD* COSY+2_^1_%STA TABADR_^1_%ADD* COSY+3_^1_%STA ADDRES_^1_%ENQ 8_O**MSOS4.0€€**_^1_%LDA* COSY1_(GET ADDRESSES OF DCK, MRG, CPY, END**MSOS4.0**_^1_%ADD* COSY+4_', DEL, INS, REM, CSY AND HOL._$**MSOS4.0**_^1COSY11 STA ADRDCK,Q_^1_%INA -2_^1_%INQ -1_^1_%SQM 1_^1_%JMP* COSY11_^1*_]_^1_%ENA 0_^1_%STA CPYID_(CLEAR COPY IDENTIFIER._,**MSOS4.0**_^1_%STA ERRCNT_'CLEAR TOTAL ERROR COUNT AND OUTPUT TABLE._^1_%LDQ TABSIZ_^1COSY15 STA TABLE-1,Q_^1_%INQ -1_^1_%€€SQZ 1_^1_%JMP* COSY15_^1*_]_^1*_*READ A REVISION CARD FROM THE STANDARD INPUT UNIT._^1*_'JUMP TO UPDATE ROUTINE, MERGE ROUTINE, COPY ROUTINE **MSOS4.0**_^1*_'OR THE DISP._G**MSOS4.0**_^1*_]_^1COSY2 ENA 0_^1_%STA E01MRK_^1_%ENA 1_^1_%STA SECNUM_^1_%LDA- STDINP_^1_%ADD- MODBIT_'SET ASCII MODE._3**MSOS4.0**_^1_%STA REVLUN_^1_%LDA* (CSTDPT)_$USE COSY STANDARD LIST DEVICE FOR **€€MSOS4.0**_^1_%EOR- MODBIT_'ANY ERROR OCCURRING ON THE FIRST_!**MSOS4.0**_^1_%STA LOUTER_'CONTROL CARD._5**MSOS4.0**_^1_%STA LOUTRV_J**MSOS4.0**_^1COSY21 RTJ DMECHK_'READ CARD AND CHECK FOR DCK/, MRG/,**MSOS4.0**_^1*_8CPY/ AND END/._4**MSOS4.0**_^1_%JMP UPDATE_)DCK/. START UPDATE._^1_%JMP MERGE_*MRG/. START MERGE._^1_%JMP COPY_+CPY/, START COPY._/**MSOS4.0**_^1COSY5 ENA 0_€€.END/. END OF COSY._^1_%STA ERRMRK_^1_%RTJ PRINTR_'OUTPUT THE END/ CARD._^1COSY6 LDA ERRCNT_'OUTPUT THE TOTAL ERROR COUNT._^1_%SAZ COSY65_'NO ERRORS._^1_%RTJ HEXDEC_^1_%STA* TEMESS+1_^1_%LDA LOUTER_J**MSOS4.0**_^1_%STA* COSY64_'SET THE LOGICAL UNIT._-**MSOS4.0**_^1_%RTJ- (REQPRO)_^1*_]_^1*_$FWRITE LOUTER,COSY65,TEMESS,6,A,0,1,0,0,D_+**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/€€6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC COSY65_J**MSOS4.0**_^1_%NUM 0_^1COSY64 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 6_^1_%ADC TEMESS_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1COSY65 LDA* TABADR_^1_%ADD* TABSIZ_^1_%STA ADDRES_'ADDRESS OF THE END OF THE OUTPUT TABLE +1._^1COSY7 LDA* (TABADR)_$GET AN ENTRY FROM THE TABLE._^1_%SAZ COSY7A_'CHECK IF LIBRARY IS ON CARDS._$€€**MSOS4.0**_^1_%JMP* COSY7G_J**MSOS4.0**_^1COSY7A LDA =XADINPB_$SET THE WORKING BUFFER_,**MSOS4.0**_^1_%STA WORKUN_J**MSOS4.0**_^1_%LDA INPLU_(CHECK THE LOGICAL UNIT FOR COSY_"**MSOS4.0**_^1_%AND- CLRMOD_(INPUT DEVICE._4**MSOS4.0**_^1_%STA* COSY7D_^1_%LDQ* SLEWMK_'CHECK TO SEE IF INPUT HOPPER SHOULD**MSOS4.0**_^1_%SQM 1_,BE CLEARED OF COSY CARD LIBRARY._!**MSOS4.0**_^1_%JMP* CO€€SY7E+1_$HOLLERITH TO COSY DO NOT SLEW._#**MSOS4.0**_^1_%RTJ CSYLUN_J**MSOS4.0**_^1_%SQN COSY7C_^1_%JMP- (DISP)_(INPUT DEVICE._4**MSOS4.0**_^1COSY7C RTJ- (REQPRO)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1*_'SLEW THE BALANCE OF CARD LIBRARY OUT OF INPUT HOPPER**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FREAD INPLU,COSY7F,INPBUF,40,B,0,1,0,0,D_,**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/4,N1/€€0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC COSY7F_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1COSY7D VFD N3/0,N1/0,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_N**MSOS4.0**_^1COSY7E ADC INPBUF_J**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1COSY7F RTJ* CHKEND_'CHECK FOR END/ CARD._.**MSOS4.0**_^1_%JMP* COSY7C_'NOT A END/ CARD._2**MSOS4.0**_^1_%JMP- (DISP)_'END/ CARD, ALL CARDS SLEWED._%**MSOS4.0**_^1COSY7G€€ SAP 1_O**MSOS4.0**_^1_%JMP* COSY9_(MINUS ENTRY INDICATING A COSY OUTPUT UNIT._^1_%STA TABLU_^1_%STA* COSY76_'SET HOLLERITH OUTPUT LUN_***MSOS4.0**_^1_%SUB LOUT_)DO NOT WRITE MON CARD_-**MSOS4.0**_^1_%SAZ COSY8_(TO LIST DEVICE._3**MSOS4.0**_^1_%RTJ- (REQPRO)_$OUTPUT A MON CARD ON THE HOLLERITH UNIT._^1*_]_^1*_$FWRITE HOUT,COSY8,MON,3,A,0,1,0,0,D_2**MSOS4.0**_^1*_]_^1COSY75 VFD €€ N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC COSY8_K**MSOS4.0**_^1_%NUM 0_^1COSY76 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 3_^1_%ADC MON_M**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1COSY8 RTJ WEOF_)WRITE END OF FILE ON OUTPUT UNIT. **MSOS4.0**_^1_%LDA* MONWRT_J**MSOS4.0**_^1COSY81 RTJ MTSTAT_'CHECK STATUS. REWIND IF MAG. TAPE. **MSOS4.0**_^1_%NOP 0_,NO P+1 RETU€€RN WHEN CHECKED HERE._!**MSOS4.0**_^1_%RAO* TABADR_'INCREMENT TO NEXT TABLE ENTRY._^1_%LDA* TABADR_^1_%SUB ADDRES_J**MSOS4.0**_^1_%SAZ 1_,END OF TABLE._^1_%JMP* COSY7_^1_%JMP- (DISP)_^1*_]_^1COSY9 AND- LPMASK+15_^1_%STA TABLU_^1_%RTJ CSYLUN_^1_%LDA TABLU_^1_%EOR MODTAB,Q_^1_%STA* COSY96_^1_%RTJ- (REQPRO)_$OUTPUT AN END/ CARD ON THE COSY UNIT._^1*_]_^1*_$FWRITE COUT,COSY10,E€€NDCD,6,AORB,0,1,0,0,D_+**MSOS4.0**_^1*_]_^1COSY95 VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC COSY10_J**MSOS4.0**_^1_%NUM 0_^1COSY96 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 6_^1_%ADC ENDCD_K**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1COSY10 RTJ WEOF_)WRITE EOF ON THE OUTPUT UNIT._$**MSOS4.0**_^1_%LDA* ENDWRT_J**MSOS4.0**_^1_%JMP* COSY81_J**MSOS4.0**_^1*_]_^1TE€€MESS ALF 6, 00 ERRORS._^1*_]_^1**************************_^1*_]_^1ADRADR ADC ADDRES_'ABSOLUTE ADDRESS OF ADDRES._'**MSOS4.0**_^1TABADR ADC TABLE_(ABSOLUTE ADDRESS OF TABLE._(**MSOS4.0**_^1REVLUN NUM 0_^1E01MRK BSS E01MRK(1)_#FIRST TIME SWITCH FOR E01 MESSAGE._^1TABSIZ NUM 8_,SIZE OF THE OUTPUT TABLE._^1MONWRT ADC COSY75_J**MSOS4.0**_^1ENDWRT ADC COSY95_J**MSOS4.0**_^1SLEWM€€K NUM 0_,MARKER= + SLEW IS NOT PEROFRMED_"**MSOS4.0**_^1*_8MARKER= - SLEW IS PERFORMED._%**MSOS4.0**_^1MON_"ALF 3, MON_^1ENDCD ALF 6,_%END/_^1_%EJT_]_^1*_8CHKXXX SUBROUTINES_^1*_]_^1*_*THESE SUBROUTINES CHECK THE WORKING BUFFER FOR THE_^1*_,CONTROL CARD XXX/._^1*_*THEY EXIT TO THE RETURN ADDRESS IF THE CONTROL CARD IS NOT_^1*_,FOUND OR TO THE RETURN ADDRESS +1 IF THE CONTROL CA€€RD IS_^1*_,FOUND._^1*_*Q WILL CONTAIN THE ADDRESS OF THE WORKING BUFFER._^1*_*I WILL CONTAIN THE ADDRESS OF THE WORKING UNITS PARAMETER_^1*_,STRING._^1_%SPC 4_^1*_8CHKDCK SUBROUTINE_^1*_]_^1*_*CHECKS FOR A DCK/ CONTROL CARD._^1*_]_^1CHKDCK 0_"0_^1_%LDA* ADRDCK_'ADDRESS OF ASCII CHARACTERS FOR DCK/._^1_%LDQ* CHKDCK_'RETURN ADDRESS._^1_%JMP* CHKCRD+1_^1_%SPC 4_^1*_8CHKMRG SUBROUTIN€€E_^1*_]_^1*_*CHECKS FOR A MRG/ CONTROL CARD._^1*_]_^1CHKMRG 0_"0_^1_%LDA* ADRMRG_'ADDRESS OF ASCII CHARACTERS FOR MRG/._^1_%LDQ* CHKMRG_'RETURN ADDRESS._^1_%JMP* CHKCRD+1_^1_%SPC 4_^1*_8CHKDEL SUBROUTINE_^1*_]_^1*_*CHECKS FOR A DEL/ CONTROL CARD._^1*_]_^1CHKDEL 0_"0_^1_%LDA* ADRDEL_'ADDRESS OF ASCII CHARACTERS FOR DEL/._^1_%LDQ* CHKDEL_'RETURN ADDRESS._^1_%JMP* CHKCRD+1_^1_%SPC 4€€_^1*_8CHKINS SUBROUTINE_^1*_]_^1*_*CHECKS FOR A INS/ CONTROL CARD._^1*_]_^1CHKINS 0_"0_^1_%LDA* ADRINS_'ADDRESS OF ASCII CHARACTERS FOR INS/._^1_%LDQ* CHKINS_'RETURN ADDRESS._^1_%JMP* CHKCRD+1_^1_%SPC 4_^1*_8CHKREM SUBROUTINE_^1*_]_^1*_*CHECKS FOR A REM/ CONTROL CARD._^1*_]_^1CHKREM 0_"0_^1_%LDA* ADRREM_'ADDRESS OF ASCII CHARACTERS FOR REM/._^1_%LDQ* CHKREM_'RETURN ADDRESS._^1_%JM€€P* CHKCRD+1_^1_%SPC 4_^1*_8CHKEND SUBROUTINE_1**MSOS4.0**_^1*_[**MSOS4.0**_^1*_*CHECKS FO A END/ CONTROL CARD._2**MSOS4.0**_^1*_[**MSOS4.0**_^1CHKEND 0_"0_O**MSOS4.0**_^1_%LDA* ADREND_)ADDRESS OF ASCII CHARACTERS END/.**MSOS4.0**_^1_%LDQ* CHKEND_'RETURN ADDRESS._3**MSOS4.0**_^1_%JMP* CHKCRD+1_H**MSOS4.0**_^1_%SPC 4_O**MSOS4.0**_^1*_8CHKCPY SUBROUTINE_1**MSOS4.0**_^1*_[**MSOS4.0**€€_^1*_*CHECKS FOR A CPY/ CONTROL CARD._1**MSOS4.0**_^1*_[**MSOS4.0**_^1CHKCPY NOP 0_O**MSOS4.0**_^1_%LDA* ADRCPY_'ADDRESS OF ASCII IMAGE OF CPY/._"**MSOS4.0**_^1_%LDQ* CHKCPY_'RETURN ADDRESS._3**MSOS4.0**_^1_%JMP* CHKCRD+1_H**MSOS4.0**_^1_%SPC 4_^1*_8CHKCSY SUBROUTINE_^1*_]_^1*_*CHECKS FOR A CSY/ CONTROL CARD._^1*_]_^1CHKCSY 0_"0_^1_%LDA* ADRCSY_^1_%LDQ* CHKCSY_^1_%JMP* CHKCRD+1_^€€1_%SPC 4_^1*_8CHKHOL SUBROUTINE_^1*_]_^1*_*CHECKS FOR A HOL/ CONTROL CARD._^1*_]_^1CHKHOL 0_"0_^1_%LDA* ADRHOL_^1_%LDQ* CHKHOL_^1_%JMP* CHKCRD+1_^1_%SPC 4_^1*_*THIS ROUTINE DOES THE ACTUAL CONTROL CARD CHECKING._^1*_]_^1CHKCRD 0_"0_^1_%STA- I_^1_%STQ* CHKCRD_'SET RETURN ADDRESS._^1_%LDA* DME4_)CHECK FOR SHORT READ_067*1495_^1_%ALS 1_Q67*1495_^1_%SAP CKSLH_(POS. NOT A SHORT READ€€_/67*1495_^1_%LDQ REVBUF+39_#PICK UP LAST WORD OF BUFFER_)67*1495_^1_%INQ -1_P67*1495_^1_%LDA- (ZERO),Q_$IF SHORT READ REPLACE $FF_+67*1495_^1_%ALS 8_,WITH $20_<67*1495_^1_%SAP BLKNXT_'IF POS. BLANK OUT NEXT WORD OF BUFFER67*1495_^1_%ALS 8_Q67*1495_^1_%AND =N$FF20_K67*1495_^1_%STA- (ZERO),Q_$STORE LAST WORD READ_067*1495_^1_%JMP* CKSLH_M67*1495_^1BLKNXT INQ 1_Q67*1495_^1_%LD€€A* ENDCD_(WORD OF BLANKS_667*1495_^1_%STA- (ZERO),Q_$STORE AFTER LAST WORD READ_*67*1495_^1CKSLH LDQ* (WORKUN)_$ADDRESS OF THE WORKING BUFFER_'67*1495_^1_%LDA- 5,Q_^1_%SUB* SLASH_^1_%SAN CHKBAD_^1_%LDA- 4,Q_^1_%SUB- 1,I_^1_%SAN CHKBAD_^1_%LDA- 3,Q_^1_%SUB- (ZERO),I_^1_%SAN CHKBAD_^1_%RAO* CHKCRD_'FOUND THE CONTROL CARD. INCREMENT RETURN_^1*_:ADDRESS._^1CHKBAD LDA* WORKUN_^1_%S€€TA- I_,ADDRESS OF THE WORKING PARAMETER STRING._^1_%JMP* (CHKCRD)_^1*_]_^1**************************_^1*_]_^1ADRDCK ADC DCK_*ABSOLUTE ADDRESS OF DCK._^1ADRMRG ADC MRG_*ABSOLUTE ADDRESS OF MRG._^1ADRCPY ADC CPY_*ABSOLUTE ADDRESS OF CPY._***MSOS4.0**_^1ADREND ADC END_*ABSOLUTE ADDRESS OF END._^1ADRDEL ADC DEL_*ABSOLUTE ADDRESS OF DEL._^1ADRINS ADC INS_*ABSOLUTE ADDRESS OF INS._€€^1ADRREM ADC REM_*ABSOLUTE ADDRESS OF REM._^1ADRCSY ADC CSY_*ABSOLUTE ADDRESS OF CSY._^1ADRHOL ADC HOL_*ABSOLUTE ADDRESS OF HOL._^1*_]_^1DCK_"ALF 2, DCK_^1MRG_"ALF 2, MRG_^1CPY_"ALF 2, CPY_J**MSOS4.0**_^1END_"ALF 2, END_^1DEL_"ALF 2, DEL_^1INS_"ALF 2, INS_^1REM_"ALF 2, REM_^1CSY_"ALF 2, CSY_^1HOL_"ALF 2, HOL_^1*_]_^1SLASH ALF 1,/_^1*_]_^1**************************_^1*€€_]_^1WORKUN ADC ADDRES_'ADDRESS OF THE WORKING UNITS PARAMETER STRING._^1ADDRES ADC REVBUF_'ABSOLUTE ADDRESS OF REVBUF._^1ERRCNT NUM 0_,TOTAL ERROR COUNT._^1*_]_^1E01_"LDA* E01MRK_^1_%SAN E0105_(NZ IF A MESSAGE WAS ALREADY OUTPUT._^1_%RAO* E01MRK_^1_%ENA 1_,**COSY E01**** THE FIRST CARD OF REVISIONS_^1_%RTJ ERRPRO_)DECK WAS NOT A DCK/, MRG/, OR END/._^1E0105 RTJ PRINTR_'PR€€INT THE BAD CARD._^1_%JMP* DMECHK+1_^1_%EJT_]_^1*_8DMECHK SUBROUTINE_^1*_]_^1*_*READS A CARD INTO REVBUF AND CHECKS FOR A DCK/, MRG/, OR_^1*_,END/ CONTROL CARD._^1*_*EXITS THRU THE RETURN ADDRESS ON A DCK/ CARD._^1*_*EXITS THRU THE RETURN ADDRESS +2 ON A MRG/ CARD._^1*_*EXITS THRU THE RETURN ADDRESS +4 ON AN END/ CARD._^1*_]_^1DMECHK 0_"0_^1_%LDA ADRADR_L67*1495_^1_%STA* WORKUN_'S€€ET WORKING UNIT._^1_%RTJ* BLKREV_^1_%LDA REVLUN_'PICK UP LOGICAL UNIT NO.._)**MSOS4.0**_^1_%STA* DME4_)PUT INTO REQUESTS._0**MSOS4.0**_^1_%STA* DME5_L**MSOS4.0**_^1_%AND- CLRMOD_'CLEAR MODE BIT FOR STATUS REQUEST. **MSOS4.0**_^1_%RTJ CKDEV_(CHECK TYPE OF DEVICE_.**MSOS4.0**_^1_%JMP* DME3_)MASS STORAGE DEVICE._.**MSOS4.0**_^1DME1_!RTJ- (REQPRO)_$NON MASS STORAGE DEVICE._***MSOS4.0€€**_^1*_]_^1*_$FREAD REVLUN,DMECK2,REVBUF,40,A,0,1,0,0,D_+**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC DMEC22_J**MSOS4.0**_^1_%NUM 0_^1DME4_!VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%ADC REVBUF_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_[**MSOS4.0**_^1DME3_!RTJ- (REQPRO)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FREAD REVLUN,DMECK2,REVBUF,40,A€€,0,1,0,0,D_+**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC DMECK2_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1DME5_!VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_N**MSOS4.0**_^1_%ADC REVBUF_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1SECNUM NUM 1_O**MSOS4.0**_^1*_[**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1*_]_^1DMECK2 RAO* SECNUM_^1DMEC22 RT€€J CHKDCK_'CHECK FOR DCK/ CONTROL CARD_)67*1495_^1_%JMP* DMECK3_^1_%LDA CPYID_K**MSOS4.0**_^1_%SAN DMEC21_'HAS THE COPY ROUTINE BEEN ENTERED. **MSOS4.0**_^1_%JMP* (DMECHK)_$FOUND DCK/. EXIT THRU RETURN ADDRESS._^1DMEC21 JMP* C23_*YES._>**MSOS4.0**_^1DMECK3 RTJ CHKMRG_'CHECK FOR MRG/ CONTROL CARD_)67*1495_^1_%JMP* DMCK31_J**MSOS4.0**_^1_%LDA CPYID_K**MSOS4.0**_^1_%SAN C23_*HAS€€ THE COPY ROUTINE BEEN ENTERED. **MSOS4.0**_^1_%ENA 2_O**MSOS4.0**_^1_%JMP* DMEC41_J**MSOS4.0**_^1DMCK31 RTJ CHKCPY_'CHECK FOR CPY/ CONTROL CARD_)67*1495_^1_%JMP* DMECK4_J**MSOS4.0**_^1_%ENA 4_,FOUND CPY/. EXIT RETURN ADDRESS+4. **MSOS4.0**_^1_%JMP* DMEC41_J**MSOS4.0**_^1DMECK4 RTJ CHKEND_'CHECK FOR END/ CONTROL CARD_)67*1495_^1_%JMP* E01_^1_%ENA 6_,FOUND END/. EXIT RETURN ADD€€RESS+6. **MSOS4.0**_^1DMEC41 ADD* DMECHK_J**MSOS4.0**_^1_%STA* DMECHK_^1_%JMP* (DMECHK)_^1*_[**MSOS4.0**_^1C23_"ENA 23_+****COSY 23**** CPY/ CARD MUST BE **MSOS4.0**_^1_%JMP E09+1_(FOLLOWED BY A CPY/ OR END/ CARD._!**MSOS4.0**_^1_%EJT_]_^1*_8BLKREV SUBROUTINE_^1*_]_^1*_*FILLS REVBUF WITH BLANKS TO ALLOW SHORT TELETYPE RECORDS._^1*_]_^1BLKREV 0_"0_^1_%ENQ 39_^1_%LDA ENDCD_)2 BL€€ANKS._8**MSOS4.0**_^1BLKRV1 STA REVBUF,Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* BLKRV1_^1_%JMP* (BLKREV)_^1_%EJT_]_^1*_8MTSTAT SUBROUTINE_^1*_]_^1*_*CHECK STATUS OF UNIT IN TABLU. IF UNIT IS MAGNETIC TAPE,_^1*_,REWIND AND EXIT THROUGH THE RETURN ADDRESS. IF NOT MAG_^1*_,TAPE, EXIT THROUGH THE RETURN ADDRESS +1._^1*_*ON ENTRY A CONTAINS THE ABSOLUTE ADDRESS COSY75 **MSOS4.0**_^1*_,OR C€€OSY95._D**MSOS4.0**_^1*_]_^1MTSTAT 0_"0_^1_%STA* MTST2_^1_%LDA* TABLU_K**MSOS4.0**_^1_%AND- CLRMOD_J**MSOS4.0**_^1_%STA* MTST11_J**MSOS4.0**_^1_%STA* MTST34_J**MSOS4.0**_^1_%RTJ- (REQPRO)_^1*_]_^1*_$STATUS TABLU,,0,D_D**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/3,N1/0,N4/0,N4/0_3**MSOS4.0**_^1MTST11 VFD N4/0,N2/0,N10/0_A**MSOS4.0**_^1MTST2 NUM 0_^1*_]_^1_%LLS 5_^1_%AND- LPMASK+3_H*€€*MSOS4.0**_^1_%INA -1_^1_%SAN MTST4_(NOT MAGNETIC TAPE UNIT._^1_%RTJ- (REQPRO)_^1*_]_^1*_$REWIND THE MAGNETIC TAPE._^1*_]_^1_%VFD N1/0,N1/1,N5/14,N1/0,N4/0,N4/1_2**MSOS4.0**_^1_%ADC MTST4+1_I**MSOS4.0**_^1_%NUM 0_^1MTST34 NUM 0_O**MSOS4.0**_^1_%VFD N1/0,N3/3,N12/0_^1*_]_^1_%JMP- (DISP)_^1*_]_^1MTST4 RAO* MTSTAT_^1_%JMP* (MTSTAT)_^1_%EJT_]_^1*_8HEXDEC SUBROUTINE_^1*_]_^1*_*C€€ONVERTS THE HEXIDECIMAL NUMBER IN A INTO TWO DECIMAL,_^1*_,ASCII CHARACTERS AND STORES THEM IN A._^1*_]_^1HEXDEC 0_"0_^1_%ENQ 0_^1_%DVI- TEN_^1_%INA $30_^1_%INQ $30_^1_%ALS 8_^1_%AAQ A_^1_%JMP* (HEXDEC)_^1_%EJT_]_^1*_8WEOF SUBROUTINE_3**MSOS4.0**_^1*_[**MSOS4.0**_^1*_*WRITES AN END OF FILE MARK TO OUTPUT DEVICES._"**MSOS4.0**_^1*_,WHEN MAGNETIC TAPE, AN EOF IS WRITTEN._(**MSOS€€4.0**_^1*_,WHEN PAPER TAPE PUNCH, TRAILER IS OUTPUT._$**MSOS4.0**_^1*_,WHEN CARD PUNCH, AN EOF CARD IS PUNCHED._%**MSOS4.0**_^1*_[**MSOS4.0**_^1WEOF_!NOP 0_O**MSOS4.0**_^1_%RTJ- (REQPRO)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$WRITE AN END OF FILE MARK TO OUPUT UNIT._-**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/14,N1/0,N4/0,N4/1_2**MSOS4.0**_^1_%ADC WEOF5_K**MSOS4.0**_^1_%NUM €€0_O**MSOS4.0**_^1TABLU NUM 0_O**MSOS4.0**_^1_%VFD N1/0,N3/2,N12/0_A**MSOS4.0**_^1*_[**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1*_[**MSOS4.0**_^1WEOF5 JMP* (WEOF)_J**MSOS4.0**_^1_%EJT_]_^1*_8GETMN SUBROUTINE_^1*_]_^1*_*THIS SUBROUTINE PICKS UP THE VALUES OF M AND N FROM THE_^1*_,DEL/, INS/, OR REM/ CARD IN THE WORKING BUFFER AND UPDATES_^1*_,THE PARAMETER STRING._^1*_*EXIT THRU €€THE RETURN ADDRESS IF COSY E05, E06, OR E07 IS_^1*_,DETECTED. IF NO ERRORS ARE FOUND, EXIT THRU THE RETURN_^1*_,ADDRESS +2._^1*_]_^1GETMN 0_"0_^1_%LDQ* WORKUN_J**MSOS4.0**_^1_%LDA- 1,Q_*SAVE THE CURRENT VALUES OF M AND N._^1_%STA- 3,Q_^1_%LDA- 2,Q_^1_%STA- 4,Q_^1_%LDA- (ZERO),Q_^1_%STA- I_,ADDRESS OF THE BUFFER._^1_%ENA 0_^1_%STA* MNCCNT_'COMMA COUNTER_^1_%STA* VAL1_^1GETMN1 LDA€€- 6,I_^1_%ALS 8_^1_%RTJ* GETMN2_'EXAMINE THE LEFT CHARACTER._^1_%LDA- 6,I_^1_%RTJ* GETMN2_'EXAMINE THE RIGHT CHARACTER._^1_%RAO- I_,INCREMENT TO THE NEXT WORD._^1_%JMP* GETMN1_^1*_]_^1**************************_^1*_]_^1GETMN2 0_"0_^1_%AND- LPMASK+8_$00FF. MASK TO GET THE CHARACTER._^1_%SUB- ONEBIT+5_$0020. ASCII BLANK._^1_%SAN 1_^1_%JMP* GETMN5_'FOUND A BLANK. END OF CARD INFO€€RMATION._^1_%INA -$C_^1_%SAN GETMN3_^1_%LDA* MNCCNT_'FOUND A COMMA. TEST FOR TWO COMMAS._^1_%SAZ 1_^1_%JMP* E05_*MORE THAN ONE COMMA ON A DEL/, INS/, OR REM/._^1*_]_^1_%RAO* MNCCNT_^1_%LDA* VAL1_^1_%STA* VAL2_)SAVE VALUE OF M._^1_%ENA 0_^1_%STA* VAL1_^1_%JMP* (GETMN2)_^1*_]_^1GETMN3 INA -4_^1_%SAM E05_*ILLEGAL CHARACTER IN M / N FIELD._^1_%INA -10_^1_%SAP E05_^1*_]_^1GETMN€€4 INA 10_+A CONTAINS THE NEW DIGIT (0 TO 9)._^1_%STA* MNDIG_(SAVE DIGIT_^1_%LDA* VAL1_^1_%MUI- TEN_*000A. CONVERT DECIMAL TO BINARY._^1_%ADD* MNDIG_^1_%STA* VAL1_^1_%JMP* (GETMN2)_^1*_]_^1**************************_^1*_]_^1GETMN5 LDA* MNCCNT_'COMMA COUNTER._^1_%SAN GETMN9_^1_%LDA* VAL1_)ONLY ONE VALUE SO SET VAL2 = VAL1._^1_%STA* VAL2_^1_%SAN GETMN6_^1*_]_^1E05_"ENA 5_,M IS EQ€€UAL TO ZERO._^1_%JMP* (GETMN)_^1*_]_^1GETMN9 RTJ CHKINS_'FOUND VALUE FOR M AND N. CHECK FOR AN INS/._^1_%JMP* GETMN8_^1*_]_^1E07_"ENA 7_,VALUES FOR M AND N ON AN INS/ CARD._^1_%JMP* (GETMN)_^1*_]_^1GETMN8 LDA* VAL1_)N._^1_%SUB* VAL2_)M._^1_%SAM E06_*N IS LESS THAN M._^1GETMN6 LDA WORKUN_'ADDRESS OF WORKING PARAMETER STRING._^1_%STA- I_^1_%LDA- 4,I_^1_%SUB* VAL2_)M._^1_%SAM GE€€TMN7_^1*_]_^1E06_"ENA 6_,THE SEQUENCE NUMBERS ARE OUT OF ORDER._^1_%JMP* (GETMN)_^1*_]_^1GETMN7 LDA* VAL1_)SET VALUES OF M AND N IN PARAMETER STRING._^1_%STA- 2,I_^1_%LDA* VAL2_^1_%STA- 1,I_^1_%RAO* GETMN_(EXIT THROUGH THE RETURN ADDRESS +2._^1_%RAO* GETMN_^1_%JMP* (GETMN)_^1*_]_^1**************************_^1*_]_^1MNCCNT BSS MNCCNT(1)_#TEMPORARY. M/N COMMA COUNTER._^1VAL1_!BSS €€ VAL1(1)_%TEMPORARY STORAGE USED BY GETMN._^1VAL2_!BSS VAL2(1)_%TEMPORARY STORAGE USED BY GETMN._^1MNDIG BSS MNDIG(1)_$TEMPORARY STORAGE USED BY GETMN._^1_%SPC 4_O**MSOS4.0**_^1*_8PRINTR SUBROUTINE_^1*_]_^1*_*PRINTS THE REVISION CARD CONTAINED IN REVBUF._^1*_]_^1PRINTR 0_"0_^1_%LDA* ASTKS_^1_%LDQ* ERRMRK_^1_%SQN 1_^1_%LDA* BLNKS_(NO ERROR._^1_%STA* REVBUF-2_$STORE BLANKS OR AS€€TERISKS IN PRINT BUFFER._^1_%STA* REVBUF-1_^1_%LDA* LOUTRV_'IF THE LOGICAL UNIT EQUALS ZERO_"**MSOS4.0**_^1_%STA* PRNT11_'SET THE LOGICAL UNIT._^1_%AND- LPMASK+10_^1_%SAZ PRINT2_'NO REVISION LIST IS PRODUCED._$**MSOS4.0**_^1_%RTJ- (REQPRO)_^1*_]_^1*_$FWRITE LOUTRV,PRINT2,REVBUF,43,A,0,1,0,0,D_***MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC PRINT2_J€€**MSOS4.0**_^1_%NUM 0_^1PRNT11 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 43_^1_%ADC REVBUF-3_H**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1PRINT2 JMP* (PRINTR)_^1_%EJT_]_^1*_8ERRPRO SUBROUTINE_^1*_]_^1*_*ENTER WITH THE HEXIDECIMAL ERROR CODE IN THE ACCUMULATOR._^1*_,THE ROUTINE WILL CONVERT THE ERROR CODE TO DECIMAL,_^1*_*STORE IT IN THE MESSAGE, AND PRINT THE MESSAGE._^1*_]_^€€1ERRPRO 0_"0_^1_%LDQ- I_^1_%STQ* ERRMRK_'SET THE ERROR MARKER AND INCREMENT THE TOTAL_^1_%RAO ERRCNT_)ERROR COUNT._^1_%RTJ* HEXDEC_'CONVERT THE ERROR CODE TO DECIMAL. **MSOS4.0**_^1_%STA* ERRMES+6_^1_%LDA* LOUTER_J**MSOS4.0**_^1_%STA* ERRP01_'SET THE LOGICAL UNIT._-**MSOS4.0**_^1_%RTJ- (REQPRO)_^1*_]_^1*_$FWRITE LOUTER,ERRPR1,ERRMES,9,A,0,1,0,0,D_+**MSOS4.0**_^1*_]_^1_%VFD N1/0,€€N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC ERRPR1_J**MSOS4.0**_^1_%NUM 0_^1ERRP01 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 9_^1_%ADC ERRMES_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1ERRPR1 LDA* ERRMRK_^1_%STA- I_,RESET I._^1_%JMP* (ERRPRO)_^1*_]_^1ERRMES ALF 9, ****COSY C00****_<**MSOS4.0**_^1*_]_^1**************************_^1*_]_^1ERRMRK NUM 0_,ERROR MARKER._^1AS€€TKS ALF 1,**_^1BLNKS ALF 1,_^1LOUTER NUM 0_,ERROR MESSAGE LOGICAL UNIT._'**MSOS4.0**_^1LOUTRV NUM 0_,REVISION OUTPUT LOGICAL UNIT._$**MSOS4.0**_^1_%EJT_]_^1TABLE BZS TABLE(8)_$OUTPUT UNIT TABLE._0**MSOS4.0**_^1_%ALF 3,_^1REVBUF BSS REVBUF(40)_"REVISIONS CARD BUFFER. CALLED REVBUF IN_^1BUF1_!EQU BUF1(REVBUF)_"UPDATE AND BUF1 IN MERGE PORTIONS OF COSY._^1_%EJT_]_^1*_8UPDA€€TE INITIALIZATION ROUTINE_^1*_]_^1UPDATE RTJ* UPD00_^1_%ADC ADREVB-UPDATE-1_+ADRINP_^1_%ADC INPLU-ADREVB_.ADINLU_^1_%ADC HOUT-INPLU_0ADHOUT_^1_%ADC COUT-HOUT_1ADCOUT_^1_%ADC LOUT-COUT_1ADLOUT_/**MSOS4.0**_^1_%ADC ADHOLB-LOUT_/ADINPT_/**MSOS4.0**_^1_%ADC HOLBUF-ADHOLB_-ADHOLB_^1_%ADC INPBUF-HOLBUF_-ADINPB_^1_%ADC CSYBUF-INPBUF_-ADCSYB_^1UPD00 0_"0_^1_%LDA* UPD00_(FORM ALL €€ABSOLUTE ADDRESSES._^1_%ADD* UPDATE+1_^1_%STA ADRINP_^1_%ADD* UPDATE+2_^1_%STA ADINLU_^1_%ADD* UPDATE+3_^1_%STA ADHOUT_^1_%ADD* UPDATE+4_^1_%STA ADCOUT_^1_%ADD* UPDATE+5_H**MSOS4.0**_^1_%STA ADLOUT_J**MSOS4.0**_^1_%ADD* UPDATE+6_H**MSOS4.0**_^1_%STA ADINPT_^1_%ADD* UPDATE+7_H**MSOS4.0**_^1_%STA ADHOLB_^1_%ADD* UPDATE+8_H**MSOS4.0**_^1_%STA ADINPB_^1_%ADD* UPDATE+9_H**MSOS4.€€0**_^1_%STA ADCSYB_^1_%LDA REVLUN_'INITIALIZE POINTERS, L/R MARKERS, ETC._^1_%STA REVLU_^1_%LDA ADDRES_^1_%STA ADREVB_^1_%LDA SECNUM_^1_%STA SECTOR_^1UPD005 ENA 40_^1_%STA BUFSIZ_^1_%LDA ADCSYB_^1_%STA CSYPTR_^1_%LDA LRSET_^1_%STA CSYLR_^1_%STA REVLR_K**MSOS4.0**_^1_%ENA 0_^1_%STA* ERRMRK_J**MSOS4.0**_^1_%STA NEWID_^1_%STA DECK1_^1_%STA ENDDCK_^1_%STA HOUT_^1_%ST€€A COUT_^1_%STA LOUT_L**MSOS4.0**_^1_%STA* M_^1_%STA* N_^1_%STA INPLU_K**MSOS4.0**_^1_%STA* DCKNAM_^1_%LDA* ADREVB_^1_%STA- I_,ADDRESS OF THE REVISIONS BUFFER._^1_%LDA (CSTDPT)_$RESET REVISION LOGICAL UNIT_'**MSOS4.0**_^1_%EOR- MODBIT_'TO PROCESS NEXT CONTROL CARD._$**MSOS4.0**_^1_%STA LOUTRV_J**MSOS4.0**_^1_%EJT_]_^1*_8DCK/ CARD PROCESSOR_^1*_]_^1*_*THIS ROUTINE PROCESSES THE €€DCK/ CARD FOUND IN REVBUF._^1*_]_^1PRODCK RTJ GETCHR_'GET A CHARACTER FROM REVBUF._^1_%INA -$49_^1_%SAN PRD01_^1_%LDQ* ADINLU_'FOUND AN I. INITIAL UNIT WILL BE STANDARD_^1_%LDA (CSTDIN)_%COSY INPUT._6**MSOS4.0**_^1_%JMP* PRD03+2_I**MSOS4.0**_^1PRD01 INA 1_^1_%SAN PRD02_^1_%LDQ* ADHOUT_'FOUND AN H._^1_%JMP* PRD03_^1PRD02 INA -4_N**MSOS4.0**_^1_%SAN PRD025_J**MSOS4.0**_^1_€€%LDQ* ADLOUT_'FOUND AN L._7**MSOS4.0**_^1_%LDA (CSTDPT)_H**MSOS4.0**_^1_%JMP* PRD03+2_I**MSOS4.0**_^1PRD025 INA 9_O**MSOS4.0**_^1_%SAZ 2_^1_%JMP PRD17_^1_%LDQ* ADCOUT_'FOUND A C._^1PRD03 LDA (CSTDOT)_%INITIAL UNIT WILL BE COSY STD OUTP**MSOS4.0**_^1_%STA* LOGUN_^1_%STQ* ADRLU_(ADDRESS OF LOGICAL UNIT FOR THE PARAMETER._^1_%LDA* (ADRLU)_^1_%SAZ PRD04_^1*_]_^1E15A_!ENA 15_+**€€**COSY E15**** PARAMETER HAS BEEN USED._^1_%RTJ ERRPRO_^1_%ENA 0_^1_%STA* (ADRLU)_%CLEAR THE PARAMETER AND THE ERROR MARKER._^1_%STA ERRMRK_^1*_]_^1PRD04 RTJ GETCHR_'GET A CHARACTER FROM REVBUF._^1_%INA -$3D_^1_%SAN PRD05_^1_%JMP PRD14_(FOUND AN EQUAL SIGN._^1PRD05 LDA* REVCHR_^1_%INA -$2C_^1_%SAN PRD06_^1_%LDA* LOGUN_(FOUND A COMMA._^1_%SAZ 1_,DO NOT SET MODE BIT IF U€€NIT N/ASGND**MSOS4.0**_^1_%EOR- MODBIT_'SET ASCII MODE BIT ON TABLE LUNS. **MSOS4.0**_^1_%STA* (ADRLU)_%SET THE LOGICAL UNIT NUMBER FOR THE PARAMETER._^1_%JMP* PRODCK_^1PRD06 INA $C_^1_%SAZ 2_^1_%JMP E14_*ILLEGAL CHARACTER._^1_%LDA* LOGUN_(FOUND A BLANK. SET THE LOGICAL UNIT NUMBER_^1_%SAZ 1_,DO NOT SET MODE BIT IF UNIT N/ASGND**MSOS4.0**_^1_%EOR- MODBIT_'SET ASCII MODE BIT €€ON TABLE LUNS. **MSOS4.0**_^1_%STA* (ADRLU)_(FOR THE PARAMETER._^1PRD07 LDA HOUT_^1_%SAZ PRD072_'NO H OUTPUT REQUESTED._,**MSOS4.0**_^1_%SUB COUT_L**MSOS4.0**_^1_%SAN PRD071_J**MSOS4.0**_^1_%LDQ* ADCOUT_'GET ADDRESS OF COUT._.**MSOS4.0**_^1_%RTJ* E16_M**MSOS4.0**_^1PRD071 LDA HOUT_L**MSOS4.0**_^1_%SUB LOUT_L**MSOS4.0**_^1_%SAN PRD072_J**MSOS4.0**_^1_%LDQ* ADLOUT_J**MSOS4.0€€**_^1_%RTJ* E16_M**MSOS4.0**_^1PRD072 LDA COUT_L**MSOS4.0**_^1_%SAZ PRD073_'NO C OUTPUT REQUESTED._,**MSOS4.0**_^1_%SUB LOUT_L**MSOS4.0**_^1_%SAN PRD073_J**MSOS4.0**_^1*_[**MSOS4.0**_^1E21_"ENA 21_+****COSY E21**** C AND L OUTPUT_"**MSOS4.0**_^1_%RTJ ERRPRO_'ON THE SAME UNIT._1**MSOS4.0**_^1_%ENA 0_O**MSOS4.0**_^1_%STA ERRMRK_'CLEAR THE ERROR MARKER AND CANCEL **MSOS4.0**_€€^1_%STA LOUT_)THE REQUEST FOR LIST OUTPUT._%**MSOS4.0**_^1PRD073 JMP* PRD075_J**MSOS4.0**_^1*_]_^1_%EJT_]_^1**************************_B**MSOS4.0**_^1ADRINP ADC ADREVB_'ABSOLUTE ADDRESS OF ADREVB._'**MSOS4.0**_^1ADREVB ADC REVBUF_'ABSOLUTE ADDRESS OF REVBUF._'**MSOS4.0**_^1M_$NUM 0_,CURRENT VALUE OF M._/**MSOS4.0**_^1N_$NUM 0_,CURRENT VALUE OF N._/**MSOS4.0**_^1LASTM NUM 0_,€€LAST VALUE OF M._2**MSOS4.0**_^1LASTN NUM 0_,LAST VALUE OF N._2**MSOS4.0**_^1ADRLU NUM 0_,TEMPORARY. ADDRESS OF INPLU, HOUT, **MSOS4.0**_^1*_8COUT OR LOUT._5**MSOS4.0**_^1ADINLU ADC INPLU_(ABSOLUTE ADDRESS OF INPLU._(**MSOS4.0**_^1ADCOUT ADC COUT_)ABSOLUTE ADDRESS OF COUT._)**MSOS4.0**_^1ADHOUT ADC HOUT_)ABSOLUTE ADDRESS OF HOUT._)**MSOS4.0**_^1ADLOUT ADC LOUT_)ABSOLUTE ADD€€RESS OF LOUT._)**MSOS4.0**_^1LOGUN NUM 0_,TEMPORARY. LOGICAL UNIT NUMBER._"**MSOS4.0**_^1DCKNAM NUM 0_,DECKNAME OF THE DECK BEING OUTPUT. **MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%EJT_R**MSOS4.0**_^1E16_"NOP 0_O**MSOS4.0**_^1_%STQ* EQULUN_'SET ADDRESS OF LUN TO BE CLEARED. **MSOS4.0**_^1_%ENA 16_+****COSY E16**** C AND H OUTPUT_"**MSOS4.0**_^1_%RTJ ERRP€€RO_'ON THE SAME UNIT._1**MSOS4.0**_^1_%ENA 0_^1_%STA ERRMRK_'CLEAR THE ERROR MARKER AND CANCEL THE REQUEST_^1_%STA* (EQULUN)_H**MSOS4.0**_^1_%JMP* (E16)_K**MSOS4.0**_^1*_[**MSOS4.0**_^1EQULUN NUM 0_O**MSOS4.0**_^1*_]_^1PRD075 LDA* DCKNAM_^1_%SAN PRD08_^1_%LDA REVBUF_'THE D PARAMETER WAS NOT USED. SAVE THE_^1_%STA* DCKNAM_)DECKNAME._^1_%LDA REVBUF+1_^1_%STA* DCKNAM+1_^1_%LDA €€ REVBUF+2_^1_%STA* DCKNAM+2_^1PRD08 LDA* INPLU_^1_%SAN PRD081_J**MSOS4.0**_^1_%LDA (CSTDIN)_%THE I PARAMETER WAS NOT USED._#**MSOS4.0**_^1_%EOR- MODBIT_'SET ASCII MODE BIT ON INPUT LUN_"**MSOS4.0**_^1PRD081 STA* INPLU_K**MSOS4.0**_^1_%RTJ SEARCH_'SEARCH OUTPUT TABLE FOR INPUT UNIT.**MSOS4.0**_^1_%JMP* E17_*UNIT IS IN THE TABLE._^1_%NOP 0_,FOUND AN EMPTY SLOT._^1_%LDA HOUT_)TA€€BLE WAS FULL._3**MSOS4.0**_^1_%SAN 1_^1_%JMP* PRD11_^1_%SUB REVLU_^1_%SAZ E20A_)REQUESTED H OUTPUT ON REVISIONS UNIT._^1_%LDA HOUT_L**MSOS4.0**_^1_%SUB* INPLU_^1_%SAN PRD085_^1E20A_!STA HOUT_)REQUESTED H OUTPUT ON INPUT UNIT. **MSOS4.0**_^1_%ENA 20_^1_%RTJ ERRPRO_'****COSY E20**** OUTPUTTING ON AN INPUT UNIT._^1_%ENA 0_^1_%STA ERRMRK_^1_%JMP* PRD11_^1PRD085 LDA HOUT_L*€€*MSOS4.0**_^1_%RTJ* SEARCH_'SEARCH OUTPUT TABLE FOR HOLLERITH OUTPUT UNIT._^1_%JMP* PRD09_(FOUND UNIT IN TABLE._^1_%JMP* PRD10_(FOUND EMPTY SLOT._^1*_]_^1E19A_!STA HOUT_)TABLE WAS FULL. CLEAR H OUTPUT_#**MSOS4.0**_^1_%ENA 19_+****COSY E19**** OUTPUT TABLE FULL._^1_%JMP* E19C_^1*_]_^1**************************_^1*_]_^1REVLR NUM $5555_(REVISIONS BUFFER L/R MARKER._%**MSOS4.0**_^€€1LUDIG NUM 0_,TEMPORARY._8**MSOS4.0**_^1INPLU NUM 0_,LOGICAL UNIT NUMBER._.**MSOS4.0**_^1REVCHR NUM 0_,TEMPORARY. CHARACTER WORKING ON_"**MSOS4.0**_^1*_8FROM BUFFER._6**MSOS4.0**_^1_%EJT_]_^1E17_"ENA 17_+****COSY E17**** INPUT UNIT ALREADY USED AS_^1_%JMP E1014_*AN OUTPUT UNIT._^1*_]_^1PRD09 SAP PRD11_^1*_]_^1E18A_!ENA 0_,UNIT PREVIOUSLY USED FOR C OUTPUT. CLEAR_^1_%STA€€ HOUT_)H OUTPUT._9**MSOS4.0**_^1_%ENA 18_+****COSY E18**** ATTEMPTED TO USE UNIT FOR_^1E19C_!RTJ ERRPRO_)BOTH C AND H OUTPUT._^1_%ENA 0_^1_%STA ERRMRK_'CLEAR THE ERROR MARKER._^1_%JMP* PRD11_^1*_]_^1PRD10 STA- (ZERO),Q_$STORE LOGICAL UNIT IN OUTPUT TABLE._^1PRD11 LDA* LOUT_L**MSOS4.0**_^1_%SAN PRD11A_J**MSOS4.0**_^1_%JMP* PRD115_J**MSOS4.0**_^1PRD11A SUB REVLU_K**MSOS4.0*€€*_^1_%SAN 1_O**MSOS4.0**_^1_%JMP* E20B_)REQUESTED L OUTPUT ON_-**MSOS4.0**_^1*_8REVISIONS UNIT._3**MSOS4.0**_^1_%LDA* LOUT_L**MSOS4.0**_^1_%SUB* INPLU_K**MSOS4.0**_^1_%SAN PRD110_J**MSOS4.0**_^1E20B_!STA* LOUT_)REQUESTED L OUTPUT ON INPUT UNIT. **MSOS4.0**_^1_%ENA 20_N**MSOS4.0**_^1_%RTJ ERRPRO_'****COSY E20**** OUTPUTTING ON AN **MSOS4.0**_^1_%ENA 0_,INPUT UNIT._7**MSOS4.0*€€*_^1_%STA ERRMRK_J**MSOS4.0**_^1_%JMP* PRD115_J**MSOS4.0**_^1PRD110 LDA* LOUT_L**MSOS4.0**_^1_%RTJ* SEARCH_'SEARCH TABLE FOR COSY OUTPUT UNIT. **MSOS4.0**_^1_%JMP* PRD111_'FOUND UNIT IN TABLE._.**MSOS4.0**_^1_%JMP* PRD113_'FOUND AN EMPTY SLOT._.**MSOS4.0**_^1E19B_!STA* LOUT_)TABLE WAS FULL. CLEAR L OUTPUT._"**MSOS4.0**_^1_%ENA 19_+****COSY E19**** OUTPUT TABLE FULL.**MSOS4.0**_^1€€_%JMP* E19E_L**MSOS4.0**_^1PRD111 SAP PRD115_J**MSOS4.0**_^1*_[**MSOS4.0**_^1E18B_!ENA 0_,UNIT PREVIOUSLY USED FOR C OUTPUT. **MSOS4.0**_^1_%STA* LOUT_)CLEAR L OUTPUT UNIT._.**MSOS4.0**_^1_%ENA 18_+****COSY E18**** ATTEMPT TO USE_"**MSOS4.0**_^1E19E_!RTJ ERRPRO_'UNIT FOR L AND C OUTPUT._***MSOS4.0**_^1_%ENA 0_O**MSOS4.0**_^1_%STA ERRMRK_'CLEAR ERROR MARKER._/**MSOS4.0**_^1_%J€€MP* PRD115_J**MSOS4.0**_^1PRD113 STA- (ZERO),Q_$STORE LOGICAL UNIT IN OUTPUT TABLE.**MSOS4.0**_^1_%STA LOUTER_'SET ERROR MESSAGE LOGICAL UNIT._"**MSOS4.0**_^1PRD115 LDA* COUT_L**MSOS4.0**_^1_%SAN 2_O**MSOS4.0**_^1_%JMP PRD22+1_^1_%SUB REVLU_^1_%SAZ E20C_)REQUESTED C OUTPUT ON REVISION UNIT**MSOS4.0**_^1_%LDA* COUT_^1_%SUB* INPLU_^1_%SAN PRD116_J**MSOS4.0**_^1E20C_!STA* COUT_)€€REQUESTED C OUTPUT ON INPUT UNIT. **MSOS4.0**_^1_%ENA 20_^1_%RTJ ERRPRO_'****COSY E20**** OUTPUTTING ON AN INPUT UNIT._^1_%ENA 0_^1_%STA ERRMRK_^1_%JMP PRD22+1_I**MSOS4.0**_^1PRD116 LDA* COUT_L**MSOS4.0**_^1_%RTJ* SEARCH_'SEARCH OUTPUT TABLE FOR THE COSY OUTPUT UNIT._^1_%JMP* DMJMP1_J**MSOS4.0**_^1_%JMP* DMJMP2_J**MSOS4.0**_^1*_]_^1_%STA* COUT_)TABLE WAS FULL. CLEAR C OUTPUT€€._"**MSOS4.0**_^1_%ENA 19_+****COSY E19**** OUTPUT TABLE FULL._^1_%JMP E19D_L**MSOS4.0**_^1_%EJT_]_^1*_8GETCHR AND SEARCH SUBROUTINES_^1*_8(USED BY DCK/ CARD PROCESSOR)_^1*_]_^1GETCHR 0_"0_^1_%STQ* GETCH2_^1_%LDA- 6,I_*GET A WORD FROM REVBUF._^1_%LDQ* REVLR_(SWITCH REVISIONS BUFFER L/R MARKER._^1_%QLS 1_^1_%STQ* REVLR_^1_%SQM GETCH1_^1_%RAO- I_,WAS RIGHT CHARACTER. INCREMENT €€TO NEXT WORD._^1_%JMP* GETCH1+1_^1GETCH1 ALS 8_,SHIFT TO GET THE LEFT CHARACTER._^1_%AND- LPMASK+8_^1_%STA* REVCHR_'SAVE THE CHARACTER._^1_%LDQ* GETCH2_^1_%JMP* (GETCHR)_^1*_]_^1GETCH2 NUM 0_^1_%SPC 4_^1SEARCH 0_"0_^1_%STA* LUDIG_(LOGICAL UNIT NUMBER BEING SEARCHED FOR._^1_%LDQ TABADR_^1SRCH1 LDA- (ZERO),Q_$GET TABLE ENTRY._^1_%SAN SRCH2_^1SRCH15 LDA* LUDIG_(FOUND A BLANK - E€€MPTY SLOT._^1_%RAO* SEARCH_'EXIT TO RETURN ADDRESS +1._^1_%JMP* (SEARCH)_^1SRCH2 AND- LPMASK+15_#=7FFF_^1_%SUB* LUDIG_^1_%SAN SRCH3_^1_%LDA- (ZERO),Q_$FOUND THE UNIT IN THE TABLE._^1_%JMP* (SEARCH)_$EXIT THRU THE RETURN ADDRESS._^1SRCH3 INQ 1_,INCREMENT TO THE NEXT ENTRY._^1_%TRQ A_^1_%SUB TABADR_^1_%SUB TABSIZ_^1_%SAZ 1_,END OF TABLE._^1_%JMP* SRCH1_^1_%RAO* SEARCH_'EXIT T€€O RETURN ADDRESS +2._^1_%JMP* SRCH15_^1*_]_^1**************************_^1*_]_^1HOUT_!NUM 0_,UNIT TO RECEIVE HOLLERITH OUTPUT._^1COUT_!NUM 0_,UNIT TO RECEIVE COSY OUTPUT._^1LOUT_!NUM 0_,UNIT TO RECEIVE LIST OUTPUT._%**MSOS4.0**_^1_%SPC 5_O**MSOS4.0**_^1CSYLUN NOP 0_O**MSOS4.0**_^1_%STA* CLUN_*SET LOGICAL UNIT TO STATUS_'**MSOS4.0**_^1_%RTJ- (REQPRO)_%REQUEST STATUS_3**MSOS4.0*€€*_^1*_[**MSOS4.0**_^1*_$STATUS (A),0,0,D_D**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/3,N1/0,N8/0_8**MSOS4.0**_^1CLUN_!NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%LLS 5_O**MSOS4.0**_^1_%AND- LPMASK+3_%SAVE UPPER 4 OF WORD8 OF PHYSTB_!**MSOS4.0**_^1_%INA -1_O**MSOS4.0**_^1_%SAZ CLUN2_)SKIP IF MAG TAPE_1**MSOS4.0**_^1_%INA -2_N**MSOS4.0**_^1_%SAZ CLUN1_)SKIP IF CARD P€€UNCH_/**MSOS4.0**_^1_%INA -1_N**MSOS4.0**_^1_%SAZ CLUN2_)SKIP IF PAPER TAPE_/**MSOS4.0**_^1CLUN1 ENA 1_-SET BUFFER INDEX TO 40 WORDS_$**MSOS4.0**_^1CLUN2 TRA Q_O**MSOS4.0**_^1_%JMP* (CSYLUN)_H**MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1CKDEV NOP 0_O**MSOS4.0**_^1_%STA* CKDEV1_'SET LOGICAL UNIT FOR STATUS REQ._!**MSOS4.0**_^1_%SPC 1_O**MSOS4.0**_^1_%RTJ- (REQPRO)_H**MSOS4.0**_^1*€€_[**MSOS4.0**_^1*_$STATUS (A),0,0,D_D**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/3,N1/0,N8/0_8**MSOS4.0**_^1CKDEV1 NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%LLS 5_O**MSOS4.0**_^1_%AND- LPMASK+3_H**MSOS4.0**_^1_%INA -2_+CHECK FOR MASS STORAGE DEVICE._#**MSOS4.0**_^1_%SAZ CKDEV2_'P+1 RETURN FOR MASS STORAGE._%**MSOS4.0**_^1_%RAO* CKDEV_(P+2 RETURN FOR NON MASS STORAG€€E._!**MSOS4.0**_^1CKDEV2 JMP* (CKDEV)_I**MSOS4.0**_^1_%SPC 4_^1*_[**MSOS4.0**_^1********_T**MSOS4.0**_^1*_[**MSOS4.0**_^1DMJMP1 JMP* PRD20_(MUST USE TO AVOID TWO WORD JUMPS_!**MSOS4,0**_^1DMJMP2 JMP* PRD21_)FOLLOWING RETURN FROM SEARCH._#**MSOS4.0**_^1_%EJT_]_^1PRD14 RTJ* GETCHR_'GET A CHARACTER FROM THE REVISIONS BUFFER._^1_%INA -$30_^1_%SAM E14_*CHARACTER IS NOT NUMERIC_^1_%I€€NA -10_^1_%SAM PRD15_^1*_]_^1E14_"ENA 14_+****COSY E14**** ILLEGAL PARAMETER ON_^1_%JMP E1014_*DCK/ CARD._^1*_]_^1PRD15 INA 10_+CHARACTER IS NUMERIC (0 - 9)._^1_%STA LOGUN_K**MSOS4.0**_^1_%RTJ* GETCHR_'GET A CHARACTER FROM THE REVISIONS BUFFER._^1_%INA -$30_^1_%SAM PRD16_(NON-NUMERIC CHARACTER._^1_%INA -10_^1_%SAP PRD16_(NON NUMERIC._^1_%STA LUDIG_K**MSOS4.0**_^1_%LDA €€ LOGUN_K**MSOS4.0**_^1_%MUI- TEN_^1_%ADD LUDIG_K**MSOS4.0**_^1_%JMP* PRD15_^1PRD16 JMP PRD05_^1PRD17 INA -1_^1_%SAZ 1_^1_%JMP* E14_*CHARACTER WAS NOT AN I, C, H, OR D._^1_%LDA DCKNAM_(FOUND A D._7**MSOS4.0**_^1_%SAZ PRD18_^1*_]_^1E15B_!ENA 15_+****COSY E15**** PARAMETER HAS BEEN USED._^1_%RTJ ERRPRO_^1_%ENA 0_^1_%STA ERRMRK_'CLEAR THE ERROR MARKER._^1*_]_^1PRD18 RTJ* €€GETCHR_'GET A CHARACTER FROM THE REVISIONS BUFFER._^1_%INA -$3D_^1_%SAZ 1_^1_%JMP* E14_*CHARACTER WAS NOT AN EQUAL SIGN._^1_%ENQ 0_^1PRD19 RTJ* GETCHR_'STORE SIX CHARACTERS FOLLOWING THE = INTO_^1_%ALS 8_.THE NEW DECKNAME._^1_%STA DCKNAM,Q_H**MSOS4.0**_^1_%RTJ* GETCHR_^1_%ADD DCKNAM,Q_H**MSOS4.0**_^1_%STA DCKNAM,Q_H**MSOS4.0**_^1_%INQ -2_^1_%SQP 2_^1_%INQ 3_^1_%JMP* PRD1€€9_^1_%RTJ GETCHR_(GET CHAR. FROM REVISIONS BUFFER. **MSOS4.0**_^1_%INA -$20_^1_%SAN 1_^1_%JMP PRD07_(FOUND A BLANK._^1_%INA -$C_^1_%SAZ 1_9FOUND A COMMA_^1_%JMP* E14_*THE CHARACTER WAS NOT A COMMA OR A BLANK._^1_%JMP PRODCK_^1*_]_^1PRD20 SAM PRD22_^1*_]_^1E18C_!ENA 0_,UNIT PREVIOUSLY USED FOR H OUTPUT. **MSOS4.0**_^1_%STA* COUT_)CLEAR C OUTPUT._3**MSOS4.0**_^1_%ENA 18_+€€****COSY E18**** ATTEMPTED TO USE UNIT FOR_^1E19D_!RTJ ERRPRO_)BOTH C AND H OUTPUT._^1_%ENA 0_^1_%STA ERRMRK_'CLEAR THE ERROR MARKER._^1_%JMP* PRD22_^1*_]_^1PRD21 ADD- ONEBIT+15_#STORE UNIT IN LU TABLE. P15 = 1 TO INDICATE_^1_%STA- (ZERO),Q_'C OUTPUT._^1*_]_^1PRD22 LDA* COUT_^1_%STA COUTLU_^1_%SAN 1_O**MSOS4.0**_^1_%JMP* PRD221_'DO NOT STATUS IF ZERO._,**MSOS4.0**_^1_%AND-€€ CLRMOD_'CLEAR MODE BIT BEFORE CHECK._%**MSOS4.0**_^1_%RTJ* CSYLUN_(CHECK FOR COSY OUTPUT DEVICE TYPE.**MSOS4.0**_^1_%STQ CBFIDX_(FLAG LAST WRITE BUFFER SIZE._$**MSOS4.0**_^1_%LDA COUT_)SET THE MODE BIT TO ASCII FOR_$**MSOS4.0**_^1_%EOR MODTAB,Q_$TAPE, BINARY FOR CARDS._+**MSOS4.0**_^1_%STA PAK085_'SET INTO THE REQUESTS._,**MSOS4.0**_^1_%STA CLER15_J**MSOS4.0**_^1_%STA NEWD35€€_J**MSOS4.0**_^1_%STA CPY057_J**MSOS4.0**_^1_%ENA 0_^1PRD221 STA FSTRD_K**MSOS4.0**_^1_%STA CSHOMK_^1_%STA DECK1_^1_%LDQ LOUT_)CLEAR THE LOGICAL UNIT USED FOR_"**MSOS4.0**_^1_%SQZ UPD01_(REVISIONS WHEN USING THE LIST_$**MSOS4.0**_^1_%STA LOUTRV_'OPTION._;**MSOS4.0**_^1_%EJT_]_^1*_8START OF UPDATE_^1*_]_^1UPD01 LDA INPLU_^1_%AND- CLRMOD_'CLEAR MODE BIT BEFORE CHECK._%**MSO€€S4.0**_^1_%RTJ CSYLUN_)CHECK COSY INPUT DEVICE TYPE._#**MSOS4.0**_^1_%LDA INPLU_(SET THE MODE BIT TO ASCII FOR_$**MSOS4.0**_^1_%EOR MODTAB,Q_$TAPE, BINARY FOR CARDS._+**MSOS4.0**_^1_%STA RDI065_'SET INTO REQUEST._1**MSOS4.0**_^1_%STA RDI015_J**MSOS4.0**_^1_%LDA CPYID_K**MSOS4.0**_^1_%SAZ 2_,CPY/ CARD BEING PROCESSED._(**MSOS4.0**_^1_%JMP CPY005_'YES._>**MSOS4.0**_^1UPD02 LD€€A INPLU_)COSY INPUT LUN_3**MSOS4.0**_^1_%AND- CLRMOD_'CLEAR MODE BIT BEFORE CHECK._%**MSOS4.0**_^1_%SUB- STDINP_'IS THE COSY LIBRARY ON STDINP._#**MSOS4.0**_^1_%SAN 2_-SKIP IF NOT ON STDINP._+**MSOS4.0**_^1_%JMP UPD13_(INPUT FROM THE STANDARD INPUT UNIT.**MSOS4.0**_^1UPD021 RTJ CSYHOL_'READ I AND CHECK FOR CSY/ OR HOL/. **MSOS4.0**_^1_%JMP* UPD085_'NOT CSY/ OR HOL/._^1UPD03 RA€€O FSTRD_^1_%RTJ CHKNAM_'DO DECKNAMES MATCH._^1_%JMP* *+2_^1_%JMP* UPD021_'NO._?**MSOS4.0**_^1_%RTJ NEWDCK_'PROCESS THE DCK/ CARD._^1_%RTJ REVPRO_'PROCESS REVISIONS._^1_%JMP* UPD07_^1*_]_^1E12_"ENA 12_+****COSY E12**** A DCK/ CARD WAS NOT_^1_%RTJ ERRPRO_)FOLLOWED BY A CONTROL CARD._^1_%RTJ REVPRO_'PROCESS REVISIONS UNTIL FIND A CONTROL CARD._^1*_:NOTE - SINCE ERRMRK IS SET, €€THERE IS NO -_^1*_:NOT A CONTROL CARD - RETURN._^1UPD07 RTJ GETMN_^1_%JMP E0765_(GETMN ERROR RETURN._^1UPD08 RTJ READI_(READ FROM THE INPUT UNIT._^1_%LDA ENDDCK_^1_%SAN 1_^1_%JMP* UPD09_^1*_]_^1E13_"ENA 13_+****COSY E13**** FOUND END OF INPUT DECK_^1_%RTJ ERRPRO_)BEFORE END OF REVISIONS._^1_%LDA SEQNUM_^1_%INA -1_^1_%SUB M_^1_%SAP 2_,WAS M SEQUENCE NUMBER WITHIN BOUND€€S_^1_%JMP* ERRS_L**MSOS4.0**_^1_%ENA 0_,YES. DELETE FROM M TO END OF INPUT DECK._^1_%STA ERRMRK_^1_%JMP* UPD12_^1*_]_^1UPD085 LDA FSTRD_^1_%SAZ 1_^1_%JMP* UPD021_J**MSOS4.0**_^1_%JMP E09_^1*_]_^1UPD09 LDA SEQNUM_^1_%SUB M_^1_%SAP UPD10_(INPUT SEQ NUMBER G.E. REVISIONS SEQ NUMBER._^1_%RTJ WRITEI_'OUTPUT HOLBUF._^1_%JMP* UPD08_^1*_]_^1UPD10 LDA ADRINP_^1_%STA WORKUN_^1_€€%RTJ CHKDEL_'CHECK THE REVISIONS BUFFER FOR A DEL/ CARD._^1_%JMP* UPD11_^1_%LDA SEQNUM_'FOUND DEL/. GO TO UPD08 UNTIL INPUT SEQUENCE_^1_%SUB N_.NUMBER EQUALS SECOND REVISIONS SEQENCE NO._^1_%SAZ UPD12_^1_%JMP* UPD08_^1UPD11 RTJ WRITEI_'OUTPUT HOLBUF._^1UPD12 STA PRGID_K**MSOS4.0**_^1_%ENQ 0_O**MSOS4.0**_^1_%LDA REVBUF+32_#SAVE PROGRAMMER INFORMATION._%**MSOS4.0**_^1_%AND€€- NZERO-8_%CLEAR OFF COMMENT CHARACTER._%**MSOS4.0**_^1_%INA -$20_L**MSOS4.0**_^1_%SAN UPD112_'FIRST CHARACTER OF PROG INFO. BLNK.**MSOS4.0**_^1_%LDA* UPD12A+1_$YES._>**MSOS4.0**_^1_%JMP* UPD122_J**MSOS4.0**_^1UPD112 LDA REVBUF+32_#NO._?**MSOS4.0**_^1_%AND- NZERO-8_I**MSOS4.0**_^1_%ADD- $30_*$2000_=**MSOS4.0**_^1_%ENQ 0_,USE Q AS AN INDEX._0**MSOS4.0**_^1_%JMP* UPD122_J**MSOS4.€€0**_^1UPD121 LDA REVBUF+32,Q_E**MSOS4.0**_^1UPD122 STA PRGINF,Q_H**MSOS4.0**_^1UPD12A SUB =N$2020_%CHECK IF PROGRAMMER AREA IS BLANK. **MSOS4.0*_^1_%SAZ UPD123_J**MSOS4.0**_^1_%RAO PRGID_K**MSOS4.0**_^1UPD123 INQ -3_N**MSOS4.0**_^1_%SQZ UPD124_'EXIT WHEN COMPLETE._/**MSOS4.0**_^1_%INQ 4_O**MSOS4.0**_^1_%JMP* UPD121_'CONTINUE MOVING INFORMATION._%**MSOS4.0**_^1UPD124 LDA PR€€GID_K**MSOS4.0**_^1_%SAZ UPD12B_J**MSOS4.0**_^1_%LDA PRGINF_J**MSOS4.0**_^1_%ADD =N$0A00_I**MSOS4.0**_^1_%STA PRGINF_J**MSOS4.0**_^1UPD12B RTJ PRINTR_J**MSOS4.0**_^1UPD125 RTJ REVPRO_'READ FROM R UNIT._^1_%JMP* UPD127_'FOUND DEL/, INS/, OR REM/._^1_%RTJ PRINTR_'NOT A CONTROL CARD._^1_%RTJ WRITER_'OUTPUT REVBUF._^1_%JMP* UPD125_^1*_]_^1UPD127 ENA 0_,CLEAR PROGRAMMER INFORMA€€TION MARK. **MSOS4.0**_^1_%STA* PRGID_K**MSOS4.0**_^1_%LDA ENDDCK_J**MSOS4.0**_^1_%SAN 1_^1_%JMP* UPD07_^1_%LDA- LPMASK+15_^1_%STA M_-SET M TO MAX VALUE_^1_%JMP* E13_*END OF INPUT DECK._^1*_]_^1E1014 RTJ ERRPRO_'PRINTS COSY E10, E14, AND E17._^1ERRS_!RTJ PRINTR_'PRINTS BAD CARD._^1_%RAO E01MRK_'PROHIBIT E01._^1_%RTJ DMECHK_'READ CARD AND CHECK FOR DCK/, MRG/, OR END/._^1_%J€€MP UPD005_)DCK/. START A NEW UPDATE._^1E04A_!ENA 4_,****COSY E04**** MRG/ CARD WITHIN A REVISIONS_^1_%JMP* E09+1_*DECK._^1_%NOP 0_,POSITION END/ RETURN FROM DMECHK. **MSOS4.0**_^1_%NOP 0_O**MSOS4.0**_^1_%JMP COSY5_*END/. END OF COSY._^1UPD13 RTJ* CSYHOL_'CHECK FOR A CSY/ OR HOL/ CARD._^1_%JMP* UPD15_^1_%LDA* REVLU_(FOUND CSY/ OR HOL/._^1_%AND- CLRMOD_'CLEAR THE ASCII MODE€€ BIT._)**MSOS4.0**_^1_%SUB- STDSCR_^1_%SAN 2_,REVISIONS ON STDINP. MUST BE_%**MSOS4.0**_^1_%JMP UPD03_(NEW DECK._9**MSOS4.0**_^1_%RTJ CHKNAM_'DO DECKNAMES MATCH._^1_%JMP* UPD14_(YES_^1*_]_^1E11_"ENA 11_+****COSY E11**** ADDING A NEW DECK AND THE_^1_%JMP* E09+1_*DECKNAMES DO NOT MATCH._^1*_]_^1UPD14 RTJ NEWDCK_'PROCESS THE DCK/ CARD._^1_%RTJ GETEND_'PROCESS UNTIL THE END OF €€THE INPUT DECK._^1_%JMP COSY2_^1*_]_^1UPD15 LDA* REVLU_^1_%SUB INPLU_K**MSOS4.0**_^1_%SAZ UPD155_(REVISIONS ARE ON COSY STD INPUT. **MSOS4.0**_^1*_]_^1_%JMP* UPD13+2_^1*_]_^1UPD155 LDA ADINPT_'SET WORKING UNIT TO HOLBUF._^1_%STA WORKUN_^1_%ENA 1_^1_%STA* UPD165_'INITIALIZE MASS STORAGE SECTOR NUMBERS._^1_%STA SECTOR_^1_%STA SECNUM_^1_%RTJ- (REQPRO)_$OUTPUT REVISIONS ON MA€€SS STORAGE SCRATCH._^1*_]_^1*_$FWRITE STDSCR,UPD17,HOLBUF,40,A,0,1,0,0,D_,**MSOS4.0**_^1*_]_^1UPD16 VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC UPD17_K**MSOS4.0**_^1_%NUM 0_^1UPD175 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%ADC HOLBUF_J**MSOS4.0**_^1_%NUM 0_^1UPD165 NUM 1_,SECTOR NUMBER._^1*_]_^1_%JMP- (DISP)_^1*_]_^1UPD17 RTJ CHKEND_'CHECK FOR AN E€€ND/ CARD IN HOLBUF._^1_%JMP* UPD18_^1_%LDA- STDSCR_'FOUND END/. SET REVISIONS UNIT TO MASS_^1_%EOR- MODBIT_'SET ASCII MODE._3**MSOS4.0**_^1_%STA REVLUN_^1_%STA* REVLU_*STORAGE SCRATCH._^1_%RTJ* CSYHOL_(READ I AND CHECK FOR CSY/ OR HOL/._^1_%JMP* E09_+NOT CSY/ OR HOL/._^1_%JMP UPD03_^1*_]_^1UPD18 RTJ READI_(READ REVISION INTO HOLBUF._^1_%RAO* UPD165_'INCREMENT SECTOR NUMBER._^1€€_%JMP* UPD16-1_^1*_]_^1E0765 RTJ ERRPRO_'****COSY E05, E06, OR E07****._^1_%LDA LASTM_^1_%STA M_,RESET M AND N._^1_%LDA LASTN_^1_%STA N_^1E07655 RTJ PRINTR_^1_%RTJ REVPRO_'READ REVISIONS UNTIL GET A CONTROL CARD._^1_%JMP UPD07_(FOUND DEL/ OR INS/._^1_%JMP* E07655_'NOT A CONTROL CARD._^1*_]_^1E09_"ENA 9_,****COSY E09**** NOT A CSY/ OR HOL/ CARD._^1_%RTJ ERRPRO_^1_%RTJ P€€RINTR_^1_%JMP COSY6_^1*_]_^1**************************_^1*_]_^1REVLU NUM 0_,UNIT THAT REVISION CARDS ARE READ FROM._^1FSTRD NUM 0_,FIRST READ ON INPUT LIBRARY MARKER._^1_%SPC 2_O**MSOS4.0**_^1*_[**MSOS4.0**_^1PRGID NUM 0_,PROGRAMMER ID USED FOR DEL/_'**MSOS4.0**_^1*_8AND INS/ CARDS._3**MSOS4.0**_^1_%EJT_]_^1*_8CSYHOL SUBROUTINE_^1*_]_^1*_*READ A 40 WORD RECORD FROM THE INPU€€T UNIT AND CHECK FOR A_^1*_,CSY/, HOL/, OR END/ CONTROL CARD._^1*_*IF A CSY/ CARD IS FOUND, SET THE INPUT BUFFER SIZE TO 192_^1*_,WORDS AND EXIT THRU THE RETURN ADDRESS +1._^1*_*IF A HOL/ CARD IS FOUND, SET THE INPUT BUFFER SIZE TO 40_^1*_,WORDS AND EXIT THRU THE RETURN ADDRESS +1._^1*_*IF AN END/ CARD IS FOUND, REWIND THE INPUT UNIT AND READ._^1*_*IF THE CARD IS NOT A CSY/, HOL/, €€OR END/ CARD, EXIT THRU_^1*_,THE RETURN ADDRESS._^1*_]_^1CSYHOL 0_"0_^1_%ENA 40_^1_%STA BUFSIZ_^1_%LDA* ADINPT_^1_%STA WORKUN_^1CSH00 RTJ READI_(READ 40 WORDS FROM THE INPUT UNIT INTO HOLBUF._^1_%RTJ CHKCSY_'CHECK HOLBUF FOR A CSY/ CONTROL CARD._^1_%JMP* CSH01_^1_%ENA -1_+FOUND A CSY/ CONTROL CARD._^1_%STA SLEWMK_'SET SLEW MARKER TO SLEW COSY LIBRARY*MSOS4.0**_^1_%JMP* CSH0€€2_^1CSH01 RTJ CHKHOL_'CHECK HOLBUF FOR A HOL/ CONTROL CARD._^1_%JMP* CSH04_^1_%ENA 1_,FOUND A HOL/ CONTROL CARD._^1_%STA SLEWMK_'SET SLEW MARKER NOT TO SLEW CARDS. **MSOS4.0**_^1CSH02 STA* CSHOMK_'SET MARKER. + = HOL/. - = CSY/._^1_%ENA 0_^1_%STA* SEQNUM_'CLEAR SEQUENCE NUMBER._^1_%LDA* CSHOMK_^1_%SAP CSH03_(HOLLERITH LIBRARY._^1_%LDA* SIZBUF_^1_%STA BUFSIZ_'SET BUFFER SI€€ZE TO 192 WORDS._^1_%ADD ADINPB_^1_%STA INPPTR_'SET INPUT BUFFER POINTER TO END OF BUFFER._^1CSH03 RAO* CSYHOL_^1_%JMP* (CSYHOL)_$EXIT TO RETURN ADDRESS +1._^1CSH04 LDA* CSHOMK_^1_%SAZ 1_,0 = FIRST TIME._^1_%JMP* CSH08_^1_%RTJ CHKEND_'CHECK HOLBUF FOR AN END/ CONTROL CARD._^1_%JMP* (CSYHOL)_$NOT CSY/ HOL/ OR END/._^1CSH05 LDA INPLU_^1_%STA TABLU_(SET LOGICAL UNIT._^1_%SUB*€€ REVLU_K**MSOS4.0**_^1_%SAN 1_.IGNORE THE END/. IT INDICATES THE END OF_^1_%JMP* (CSYHOL)_'THE REVISIONS DECK._^1_%LDA* CSHRET_'SET CSYHOL COMPLETION ADDRESS._#**MSOS4.0**_^1_%JMP* CSH054+1_$CROSS COPY ENTRY LOCATION._(**MSOS4.0**_^1CSH054 NOP 0_O**MSOS4.0**_^1_%STA* CSH071_'(A( EQUQLS COMPLETION ADDRESS._#**MSOS4.0**_^1_%LDA* INPWRT_'ABSOLUTE ADDRESS OF DRI01._(**MSOS4.0**_^1_%€€RTJ MTSTAT_'CHECK STATUS. REWIND IF MAGNETIC TAPE._^1_%JMP* (CSH071)_$EXIT THROUGH COMPLETION ADDRESS._!**MSOS4.0**_^1CSH06 LDA INPLU_(NOT MAG TAPE. PRINT REWIND MESSAGE._^1_%AND- CLRMOD_'CLEAR THE MODE BIT._/**MSOS4.0**_^1_%RTJ HEXDEC_^1_%STA* REWMES+6_H**MSOS4.0**_^1_%RTJ- (REQPRO)_^1*_]_^1*_$FWRITE STDOCD,CHS07,REWMS,7,A,0,1,0,0,D_-**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/€€6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC CSH07_K**MSOS4.0**_^1_%NUM 0_^1CSH065 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 7_^1_%ADC REWMES_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1*_*OPERATOR MUST INPUT FROM THE COMMENT DEVICE WHEN THE INPUT_^1*_,UNIT IS REWOUND_^1*_]_^1CSH07 RTJ- (REQPRO)_^1*_]_^1*_$FREAD STDICD,CSH00,INPBUF,1,A,0,1,0,0,D_-**MSOS4.0**_^1*_[**MSOS4.0**_^1_€€%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1CSH071 ADC 0_,COMPLETION ADDRESS SET ON ENTRY._!**MSOS4.0**_^1_%NUM 0_^1CSH075 VFD N3/0,N1/1,N2/0,N10/0_^1_%NUM 1_^1_%ADC INPBUF_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1CSH08 RTJ CHKEND_'CHECK HOLBUF FOR AN END/ CONTROL CARD._^1_%JMP* CSH00_(NOT AN END/ CARD._^1_%LDA* CSHOMK_^1_%SAP 1_^1_%JMP* CSH05_(CSY/ LIBRARY. REWIND._^1_€€%INA -1_^1_%SAZ 1_^1_%JMP* CSH05_(TWO END/ CARDS. REWIND THE HOL/ LIBRARY._^1_%RAO* CSHOMK_^1_%JMP* CSH00_^1*_]_^1***************************_^1*_]_^1REWMES ALF 7, REWIND LU 00_^1INPWRT ADC RDI01_(ABSOLUTE ADDRESS OF RDI01._(**MSOS4.0**_^1CSHOMK NUM 0_,CSY/ OR HOL/ LIBRARY MARKER._^1ADINPT ADC ADHOLB_'ABSOLUTE ADDRESS OF HOLBUF._^1CSHRET ADC CSH00_(CSYHOL COMPLETION ADDRES€€S._(**MSOS4.0**_^1SIZBUF NUM 192_*SIZE OF CSYBUF AND INPBUF. MUST BE G.T. 40._^1SEQNUM NUM 0_,INPUT RECORD COUNT._^1*_[**MSOS4.0**_^1MODTAB VFD N3/0,N1/0,N2/0,N10/0_,ASCII MODE._#**MSOS4.0**_^1_%VFD N3/0,N1/1,N2/0,N10/0_,BINARY MODE._"**MSOS4.0**_^1_%EJT_]_^1*_8WRITER SUBROUTINE_^1*_]_^1*_*OUTPUTS THE CARD IN THE REVISIONS BUFFER._^1*_]_^1WRITER 0_"0_^1_%LDQ* ASTRKS_'STORE AST€€ERISKS IN THE SEQUENCE_^1_%STQ REVBUF+39_%NUMBER FIELD (COLUMNS 76-80)._^1_%STQ REVBUF+38_^1_%LDA REVBUF+37_^1_%ALS 8_^1_%LLS 8_^1_%STA REVBUF+37_^1_%ENA 0_^1_%STA* IDOUT_(SET MARKER TO NO I.D. ON CARD._^1_%STA IDINP_^1_%LDQ ADREVB_'OUTPUT REVISIONS BUFFER ON THE_#**MSOS4.0**_^1_%RTJ* WRITE_(COSY AND HOLLERITH OUTPUT UNITS._!**MSOS4.0**_^1_%JMP* (WRITER)_^1_%EJT_]_^1*_8WRI€€TEI SUBROUTINE_^1*_]_^1*_*OUTPUTS THE CARD IN THE HOLLERITH INPUT BUFFER._^1*_]_^1WRITEI 0_"0_^1_%LDA* SEQNUM_'CONVERT INPUT RECORD COUNT TO DECIMAL. STORE_^1_%RTJ* WRITI1_)IN SEQUENCE NUMBER FIELD (COLUMNS 76-80)._^1_%STQ HOLBUF+39_^1_%RTJ* WRITI1_^1_%STQ HOLBUF+38_^1_%ENQ 0_^1_%DVI- TEN_^1_%INQ $30_^1_%STQ* WRTMP1_^1_%LDA HOLBUF+37_^1_%AND- NZERO+8_^1_%ADD* WRTMP1_^1_%STA €€HOLBUF+37_^1_%STA* IDOUT_(SET NON-ZERO FOR I.D. ON CARD._^1_%LDQ* ADHOLB_'OUTPUT THE HOLLERITH INPUT BUFFER **MSOS4.0**_^1_%RTJ* WRITE_(ON THE COSY AND HOLLERITH UNITS._!**MSOS4.0**_^1_%JMP* (WRITEI)_^1*_]_^1WRITI1 0_"0_^1_%ENQ 0_,CONVERT HEXIDECIMAL VALUE IN A TO A DECIMAL_^1_%DVI- TEN_,WORD (TWO CHARACTERS)._^1_%INQ $30_^1_%STQ* WRTMP_^1_%ENQ 0_^1_%DVI- TEN_^1_%INQ $30_^1_%Q€€LS 8_^1_%ADQ* WRTMP_^1_%JMP* (WRITI1)_^1*_]_^1**************************_^1*_]_^1ASTRKS ALF 1,**_^1WRTMP NUM 0_,TEMPORARY STORAGE USED BY WRITEI AND WRITE._^1WRTMP1 NUM 0_,TEMPORARY STORAGE USED BY WRITEI_^1IDOUT NUM 0_,ID OUTPUT MARKER. NZ = PUT ID ON COSY OUTPUT._^1_%EJT_]_^1*_8WRITE SUBROUTINE_^1*_]_^1*_*OUTPUTS CARDS FROM THE REVISIONS BUFFER OR THE HOLLERITH_^1*_,INPUT€€ BUFFER ON THE COSY AND/OR HOLLERITH OUTPUT UNITS._^1*_*ON ENTRY, Q CONTAINS THE ABSOLUTE ADDRESS OF THE BUFFER TO_^1*_6BE OUTPUT._^1*_]_^1WRITE 0_"0_^1_%STQ* WRTMP1_^1_%STQ* WRITE5_J**MSOS4.0**_^1_%LDA COUT_)COSY OUTPUT MARKER._^1_%SAZ 1_^1_%JMP* WRITEC_'COSY OUTPUT WAS REQUESTED._^1WRITE1 LDA HOUT_)HOLLERITH OUTPUT MARKER._^1_%SAN WRIT11_'IS H OUTPUT REQUESTED._,**MSOS4.0**_€€^1_%JMP* WRITE6_'NO. CHECK FOR L OUTPUT._+**MSOS4.0**_^1WRIT11 STA* WRIT45_'SET LOGICAL UNIT._1**MSOS4.0**_^1_%LDA PRGID_K**MSOS4.0**_^1_%SAZ WRIT13_'PROGRAMMER INFORMATION PRESENT._"**MSOS4.0**_^1_%ENQ 0_,YES._>**MSOS4.0**_^1WRIT12 LDA* PRGINF,Q_$PUT PROG INFO ON UPDATE CARDS._#**MSOS4.0**_^1_%INQ 36_N**MSOS4.0**_^1_%STA* (WRITE5),Q_F**MSOS4.0**_^1_%INQ -39_M**MSOS4.0**_^1_%S€€QN 1_O**MSOS4.0**_^1_%JMP* WRIT31_J**MSOS4.0**_^1_%INQ 4_,INCREASE INDEX BY ONE._,**MSOS4.0**_^1_%JMP* WRIT12_J**MSOS4.0**_^1WRIT13 LDQ* WRTMP1_'ADDRESS OF THE BUFFER._,**MSOS4.0**_^1_%LDA IDINP_(ID INPUT MARKER. IF ZERO, THE CARD DID NOT_^1_%SAN WRITE2_)HAVE AN ID WHEN INPUT._^1_%LDA* ASTRKS_'USE ASTERISKS FOR DECK IDENTIFIER._^1_%AND- NZERO+8_^1_%STA* WRTMP_^1_%LDA* ASTRKS_^€€1_%JMP* WRITE3_^1WRITE2 LDA* NEWID+1_^1_%STA* WRTMP_(USE ID FOR DECK IDENTIFIER._^1_%LDA* NEWID_^1WRITE3 STA- 36,Q_)STORE IN ID FIELD (COLUMNS 73-75)._^1_%LDA- 37,Q_^1_%AND- LPMASK+8_^1_%ADD* WRTMP_^1_%STA- 37,Q_^1WRIT31 RTJ- (REQPRO) OUTPUT CARD TP THE HOLLERITH UNIT._$**MSOS4.0**_^1*_]_^1*_$FWRITE HOUT,WRITE6,,40,A,0,1,0,0,D_2**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N€€4/1_3**MSOS4.0**_^1_%ADC WRITE6_J**MSOS4.0**_^1_%NUM 0_^1WRIT45 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1WRITE5 NUM 0_^1*_]_^1_%JMP- (DISP)_^1*_]_^1WRITE6 LDA* LMRKR_K**MSOS4.0**_^1_%SAN WRIT61-1_$L OUTPUT BEEN PROCESSED._***MSOS4.0**_^1_%LDA LOUT_)NO._?**MSOS4.0**_^1_%SAZ WRIT61_'L OUTPUT REQUESTED._/**MSOS4.0**_^1_%RAO* LMRKR_(YES. SET L MARKER._0**MSOS4.0**_^1_€€%JMP* WRIT11_J**MSOS4.0**_^1_%ENA 0_O**MSOS4.0**_^1WRIT61 STA* LMRKR_(CLEAR L OUTPUT MARKER._,**MSOS4.0**_^1_%JMP* (WRITE)_I**MSOS4.0**_^1*_]_^1WRITEC LDA* IDOUT_(I.D. OUTPUT MARKER. IF ZERO, THE CARD DOES_^1_%SAZ 1_.NOT HAVE AN I.D._^1_%ENA 1_^1_%INA $30_^1_%RTJ* PACK_)PACK THE ID MARKER IN CSYBUF._^1WRITE7 LDA- (ZERO),Q_$GET THE HOLLERITH WORD._^1_%ALS 8_^1_%RTJ* PACK_)PACK€€ LEFT CHARACTER IN CSYBUF._^1_%LDA- (ZERO),Q_^1_%RTJ* PACK_)PACK RIGHT CHARACTER IN CSYBUF._^1_%INQ 1_^1_%TRQ A_^1_%SUB* WRTMP1_^1_%INA -36_^1_%SAZ 1_,DONE WHEN 36 WORDS HAVE BEEN OUTPUT._^1_%JMP* WRITE7_^1_%STA* BLKCTR_'CLEAR BLANK CHARACTER COUNTER._^1_%ENA $5F_^1_%RTJ* PAK06_(OUTPUT END OF CARD CHARACTERS ($5F5E)._^1_%ENA $5E_^1_%RTJ* PAK06_^1_%JMP* WRITE1_^1*_]_^1********€€******************_^1*_]_^1NEWID NUM 0_,DECK IDENTIFIER CHARACTERS._^1_%NUM 0_^1ADHOLB ADC HOLBUF_'ABSOLUTE ADDRESS OF HOLBUF._^1LMRKR NUM 0_,L OUTPUT MARKER._2**MSOS4.0**_^1_%SPC 2_O**MSOS4.0**_^1*_1THIS AREA IS USED TO SAVE PROGRAMMER_$**MSOS4.0**_^1*_1INFORMATION TAKEN FROM COLUMNS 66 THRU_"**MSOS4.0**_^1*_172 OF ALL DEL/ AND INS/ CARDS._+**MSOS4.0**_^1*_[**MSOS4.0**_^1PR€€GINF NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1_%EJT_]_^1*_8PACK SUBROUTINE_^1*_]_^1*_*PACKS CHARACTERS INTO THE COSY OUTPUT BUFFER AND WRITES_^1*_,THE BUFFER WHEN IT IS FULL._^1*_*ENTER WITH THE CHARACTER TO BE PACKED IN THE ACCUMULATOR._^1*_*Q IS RESTORED BEFORE EXITING THE ROUTINE._^1*_]_^1PACK_!0_"0_^1_%STQ* SAVEQ_^1_%AND- LPM€€ASK+8_^1_%STA* CHAR_)SAVE THE CHARACTER TO BE PACKED._^1_%INA -$20_^1_%SAN PAK01_(NOT A BLANK._^1_%RAO* BLKCTR_'INCREMENT BLANK COUNTER._^1_%LDA* BLKCTR_^1_%INA -62_^1_%SAP PAK00_^1_%JMP* (PACK)_^1PAK00 ENA $5F_*62 BLANKS OR END OF DECK OR END OF LIBRARY._^1_%RTJ* PAK06_(OUTPUT $5F._^1_%LDA* BLKCTR_^1_%INA $1F_^1_%RTJ* PAK06_(OUTPUT $5D OR $5E OR $5F._^1_%JMP* PAK05_^1PAK01 €€ LDA* BLKCTR_^1_%SAN 1_^1_%JMP* PAK03_(NO MORE BLANKS. OUTPUT CHARACTER._^1_%INA -3_^1_%SAP PAK02_(OVER 2 BLANKS._^1_%INA 2_^1_%STA* BLKCTR_'DECREMENTS BLANK COUNTER BY ONE._^1_%ENA $20_^1_%RTJ* PAK06_(OUTPUT A BLANK._^1_%JMP* PAK01_^1PAK02 ENA $5F_^1_%RTJ* PAK06_(OUTPUT $5F._^1_%LDA* BLKCTR_^1_%INA -8_^1_%SAM 1_^1_%INA 1_^1_%INA $26_^1_%RTJ* PAK06_(OUTPUT NUMBER OF BLA€€NKS ($21 - $5C (NOT $26))_^1PAK03 LDA* CHAR_)GET THE CHARACTER TO BE PACKED._^1_%INA -$5F_^1_%SAN PAK04_^1_%ENA 1_,TRUE $5F. SET TO OUTPUT $5F THEN $20._^1_%STA* BLKCTR_^1_%JMP* PAK00_^1PAK04 LDA* CHAR_^1_%RTJ* PAK06_(OUTPUT THE CHARACTER._^1PAK05 ENA 0_^1_%STA* BLKCTR_'CLEAR THE BLANK COUNTER._^1_%LDQ* SAVEQ_^1_%JMP* (PACK)_^1*_]_^1PAK06 0_"0_^1_%LDQ* CSYLR_(SWITCH COSY L€€/R MARKER._^1_%QLS 1_^1_%STQ* CSYLR_^1_%SQP PAK07_(+ MEANS FILL RIGHT CHARACTER._^1_%ALS 8_^1_%STA* (CSYPTR)_$STORE THE LEFT CHARACTER IN THE BUFFER._^1_%JMP* (PAK06)_^1PAK07 ADD* (CSYPTR)_^1_%STA* (CSYPTR)_$STORE THE RIGHT CHARACTER IN THE BUFFER._^1_%RAO* CSYPTR_'INCREMENT THE BUFFER POINTER AND SEE IF THE_^1_%LDA* CSYPTR_)BUFFER IS FULL._^1_%SUB SIZBUF_^1_%SUB* ADCSYB_^1_%S€€AN PAK09_^1_%LDA* ADCSYB_'BUFFER IS FULL. RESET THE BUFFER POINTER_^1_%STA* CSYPTR_)AND WRITE THE BUFFER._^1_%RTJ- (REQPRO)_^1*_]_^1*_$FWRITE COUT,PAK09,CSYBUF,192,AORB,0,1,0,0,D_)**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC PAK09_K**MSOS4.0**_^1_%NUM 0_^1PAK085 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 192_M**MSOS4.0**_^1_%ADC CSYBUF_J*€€*MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1PAK09 JMP* (PAK06)_^1*_]_^1**************************_^1*_]_^1BLKCTR NUM 0_,BLANK CHARACTER COUNTER FOR PACK SUBROUTINE._^1CSYPTR ADC CSYBUF_'POINTS TO THE NEXT AVAILABLE WORD IN CSYBUF._^1CSYLR NUM $5555_(LEFT (+) OR RIGHT (-) CHARACTER IN CSYBUF._^1IDINP NUM 0_,NZ IF THE CARD HAD AN ID WHEN INPUT._^1BUFSIZ NUM 192_*INPUT BUFFER SIZ€€E._^1SAVEQ NUM 0_,VALUE OF Q WHEN PACK SUBROUTINE WAS ENTERED._^1ADCSYB ADC CSYBUF_'ABSOLUTE ADDRESS OF CSYBUF._^1CHAR_!NUM 0_,THE CHARACTER TO BE PACKED OR UNPACKED._^1CBFIDX NUM 0_,TEMPORARY FOR TAPE OR CARD._'**MSOS4.0**_^1_%EJT_]_^1*_8CLEARI SUBROUTINE_^1*_]_^1*_*PACKS END-OF-LIBRARY CHARACTERS INTO THE COSY OUTPUT BUFFER_^1*_,AND WRITES THE BUFFER._^1*_]_^1CLEARI 0_"0_^1_€€%ENA $5F_^1_%RTJ* PAK06_^1_%ENA $5F_*OUTPUT END OF LIBRARY MARKER._^1_%RTJ* PAK06_^1_%LDA* CBFIDX_J**MSOS4.0**_^1_%SAZ CLEAR5_(SKIP IF TAPE TO CALCULATE BUFFER. **MSOS4.0**_^1_%LDA SIZBUF_'SET BUFFER TO MAXIMUM SIZE SO_$**MSOS4.0**_^1*_8ALL BUFFERS ARE SAME SIZE FOR CARDS**MSOS4.0**_^1_%JMP* CLEAR3_(PUT BUFFER SIZE INTO REQUEST._#**MSOS4.0**_^1CLEAR5 LDA* CSYPTR_(CALCULATE THE €€NUMBER OF WORDS_#**MSOS4.0**_^1*_8THAT WERE USED_4**MSOS4.0**_^1_%SUB* ADCSYB_)IN THE BUFFER._^1_%LDQ* CSYLR_^1_%SQP 1_^1_%INA 1_,IF RIGHT, INCREMENT NUMBER OF WORDS BY 1._^1CLEAR3 STA* CLEAR4_(SET REQST TO DESIGNATE BUFFER SIZE**MSOS4.0**_^1_%SAZ CLEAR2_J**MSOS4.0**_^1_%INA -10_*ALLOW A MINIMUN RECORD OF 10_%**MOSO4.0**_^1_%SAP CLER31_'WORDS FOR TAPE DRIVER NOISE LENGTH.**MOS€€O4.0**_^1_%INA 20_N**MOSO4.0**_^1_%STA* CLEAR4_J**MOSO4.0**_^1CLER31 RTJ- (REQPRO)_H**MOSO4.0**_^1*_]_^1*_$FWRITE COUT,CLEAR2,CSYBUF,192,AORB,0,1,0,0,D_(**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC CLEAR2_J**MSOS4.0**_^1_%NUM 0_^1CLER15 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1CLEAR4 NUM 0_^1_%ADC CSYBUF_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_€€]_^1CLEAR2 LDA* ADCSYB_^1_%STA* CSYPTR_'RESET THE COSY BUFFER POINTER AND THE_^1_%LDA LRSET_*LEFT/RIGHT CHARACTER POINTER._^1_%STA* CSYLR_^1_%JMP* (CLEARI)_^1_%EJT_]_^1*_8READI SUBROUTINE_^1*_]_^1*_*INPUTS CARDS INTO THE HOLLERITH INPUT BUFFER. IF HOLLERITH_^1*_,INPUT, CARDS ARE READ DIRECTLY INTO HOLBUF. IF COSY_^1*_,INPUT, CARDS ARE UNPACKED FROM INPBUF INTO HOLBUF. A NEW_^1*€€_,COSY BLOCK IS READ INTO INPBUF WHEN REQUIRED._^1*_]_^1READI 0_"0_^1_%ENA 1_^1_%STA* IDINP_(SET MARKER TO ID ON INPUT._^1_%RAO SEQNUM_'INCREMENT INPUT RECORD COUNT._^1_%LDA* BUFSIZ_^1_%INA -40_^1_%SAZ 1_^1_%JMP* RDI03_(READING COSY INPUT._^1_%STA ENDDCK_'CLEAR END OF DECK MARKER._^1_%ENQ 39_^1_%LDA* BLANK_^1RDI00 STA HOLBUF,Q_$STORE BLANKS IN HOLBUF TO ALLOW SHORT_^1_%INQ€€ -1_-TELETYPE RECORDS._^1_%SQM 1_^1_%JMP* RDI00_^1_%RTJ- (REQPRO)_$READ A CARD INTO HOLBUF._^1*_]_^1*_$FREAD INPLU,RDI135,HOLBUF,40,AORB,0,1,0,0,D_)**MSOS4.0**_^1*_]_^1RDI01 VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC RDI135_J**MSOS4.0**_^1_%NUM 0_^1RDI015 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%ADC HOLBUF_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*****€€*********************_^1*_]_^1RDI03 LDA ADHOLB_^1_%STA* HOLPTR_^1_%ENQ 39_^1_%LDA* BLANK_^1RDI04 STA* (HOLPTR),Q_"STORE 40 WORDS OF BLANKS IN HOLBUF._^1_%INQ -1_^1_%SQM 1_^1_%JMP* RDI04_^1_%ENA 0_^1_%STA* ENDDCK_'CLEAR THE END OF DECK MARKER AND SET THE_^1_%STA* FSTCHR_)FIRST CHARACTER MARKER._^1_%LDA* LRSET_^1_%STA* HOLLR_(SET HOLLERITH BUFFER L/R MARKER TO LEFT._^1RDI05 L€€DA* INPPTR_^1_%SUB* BUFSIZ_'TEST FOR INPUT BUFFER EMPTY._^1_%SUB* ADINPB_^1_%SAN RDI07_^1_%LDA* ADINPB_'BUFFER EMPTY. RESET THE BUFFER POINTER TO_^1_%STA* INPPTR_)THE START OF THE BUFFER._^1_%LDA* LRSET_^1_%STA* INPLR_(SET INPUT BUFFER L/R MARKER TO LEFT._^1_%RTJ- (REQPRO)_$READ 192 WORD COSY INPUT BLOCK INTO INPBUF._^1*_]_^1*_$FREAD INPLU,RDI07,INPBUF,192,AORB,0,1,0,0,D_)**MSOS€€4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC RDI07_K**MSOS4.0**_^1_%NUM 0_^1RDI065 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 192_M**MSOS4.0**_^1_%ADC INPBUF_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1*_*UNPACKING ROUTINE_^1*_]_^1RDI07 LDA* (INPPTR)_^1_%LDQ* INPLR_(SWITCH INPUT L/R MARKER._^1_%QLS 1_^1_%STQ* INPLR_^1_%SQM 2_^1_%RAO* INPPTR_'RIG€€HT CHARACTER. INCREMENT BUFFER POINTER._^1_%JMP* *+2_^1_%ARS 8_,LEFT CHARACTER. SHIFT TO RIGHT HALF._^1_%AND- LPMASK+8_^1_%LDQ* FSTCHR_^1_%SQN RDI08_^1_%INA -$30_)FIRST CHARACTER IS THE ID CHARACTER._^1_%STA* IDINP_*DECREMENT TO GET A 0 OR A 1._^1_%RAO* FSTCHR_^1_%INA -$2F_)IF CHARACTER WAS $5F, HANDLE SPECIAL. SHOULD_^1_%SAZ 1_.BE AN END-OF-DECK CHARACTER._^1_%JMP* RDI05_^€€1_%ENA $5F_^1RDI08 STA* CHAR_)SAVE THE CHARACTER BEING UNPACKED._^1_%LDA* PCN5F_^1_%SAN 1_,THE PREVIOUS CHARACTER WAS NOT $5F._^1_%JMP* RDI11_^1_%LDA* CHAR_^1_%INA -$5F_^1_%SAN RDI09_(THIS CHARACTER NOT $5F._^1_%STA* PCN5F_(SET PREVIOUS CHARACTER = $5F._^1_%JMP* RDI05_^1RDI09 LDA* CHAR_^1_%LDQ* HOLLR_(SWITCH HOLLERITH BUFFER L/R MARKER._^1_%QLS 1_^1_%STQ* HOLLR_^1_%SQP RDI1€€0_^1_%ALS 8_,STORE THE CHARACTER IN THE LEFT HALF OF THE_^1_%INA $20_,WORD WITH A BLANK IN THE RIGHT HALF._^1_%STA* (HOLPTR)_^1_%JMP* RDI05_^1RDI10 ADD* (HOLPTR)_$STORE THE CHARACTER IN THE RIGHT HALF OF THE_^1_%INA -$20_+WORD (REMOVING THE BLANK)._^1_%STA* (HOLPTR)_^1_%RAO* HOLPTR_'INCREMENT HOLBUF POINTER._^1_%JMP* RDI05_^1RDI11 LDA CHAR_^1_%STA* PCN5F_(SET PREVIOUS CHARACT€€ER NOT $5F._^1_%INA -$20_^1_%SAN 2_^1_%ENA $5F_*HAD $5F20, A TRUE $5F CHARACTER._^1_%JMP* RDI09+1_^1_%INA -$3E_^1_%SAZ 2_,HAD $5F5E - END OF CARD._^1_%SAM RDI12_(HAD $5FXX, A STRING OF BLANKS._^1_%RAO* ENDDCK_'HAD $5F5F. SET END OF DECK MARKER._^1_%JMP* (READI)_^1RDI12 INA $38_^1_%SAM 1_^1_%INA -1_+CHARACTER WAS 26 OR GREATER. DECREMENT BY 1._^1_%INA 8_,NUMBER OF BLANK€€S = CHARACTER - $20 + 2._^1_%ENQ 0_^1_%LLS 15_^1_%ADQ* HOLPTR_'INCREMENT HOLLERITH POINTER BY_^1_%STQ* HOLPTR_)HALF THE NUMBER OF BLANKS._^1_%SAP RDI13_(HAD AN EVEN NUMBER OF BLANKS._^1_%LDA* HOLLR_^1_%SAP 1_^1_%RAO* HOLPTR_'WAS A RIGHT CHARACTER. INCREMENT POINTER._^1_%ALS 1_,SWITCH THE HOLLERITH L/R MARKER._^1_%STA* HOLLR_^1RDI13 JMP* RDI05_^1*_]_^1RDI135 LDA ADINPT_^1_%S€€TA WORKUN_^1_%RTJ CHKEND_'CHECK FOR AN END/ CARD._^1_%JMP* *+2_^1_%RAO* ENDDCK_'FOUND END/. SET THE END OF DECK MARKER._^1_%JMP (READI)_^1*_]_^1*_]_^1**************************_^1*_]_^1BLANK ALF 1,_^1LRSET NUM $5555_^1ADINPB ADC INPBUF_'ABSOLUTE ADDRESS OF INPBUF._^1HOLPTR ADC HOLBUF_'POINTS TO NEXT AVAILABLE WORD IN HOLBUF._^1HOLLR NUM $5555_(LEFT (+) OR RIGHT (-) CHAR€€ACTER IN HOLBUF._^1INPPTR ADC INPBUF_'POINTS TO NEXT AVAILABLE WORD IN INPBUF._^1INPLR NUM $5555_(LEFT (+) OR RIGHT (-) CHARACTER IN INPBUF._^1PCN5F NUM 1_,NZ IF PREVIOUS CHARACTER WAS NOT $5F._^1FSTCHR NUM 0_,0 = FIRST CHARACTER OF COMPRESSED CARD._^1ENDDCK NUM 0_,END OF DECK MARKER. NZ MEANS END OF DECK._^1_%EJT_]_^1*_8GETEND SUBROUTINE_^1*_]_^1*_*READS CARDS FROM THE INP€€UT UNIT AND OUTPUTS THEM ON THE_^1*_,COSY AND/OR HOLLERITH OUTPUT UNITS UNTIL AN END OF DECK_^1*_,INDICATOR IS FOUND._^1*_]_^1GETEND 0_"0_^1_%LDA* ENDDCK_^1_%SAN GETED1_'ALREADY AT END OF INPUT DECK._^1_%STA PRGID_(CLEAR PROGRAMMER INFORMATION MARK. **MSOS4.0**_^1_%RTJ READI_(READ FROM THE INPUT UNIT._^1_%LDA* ENDDCK_^1_%SAN GETED1_'FOUND THE END OF DECK._^1_%RTJ WRITEI_'OUTPU€€T FROM THE INPUT BUFFER._^1_%JMP* GETEND+1_^1GETED1 LDA CPYID_(IS COPY ROUTINE IN PROCESS._'**MSOS4.0**_^1_%SAZ GETED2_J**MSOS4.0**_^1_%JMP* (GETEND)_$YES._>**MSOS4.0**_^1GETED2 LDA COUT_)NO._?**MSOS4.0**_^1_%SAZ 2_^1_%RTJ CLEARI_'CLEAR THE COSY OUTPUT BUFFER._^1_%LDA ADRINP_^1_%STA WORKUN_'SET WORKING UNIT TO REVBUF._^1_%JMP* (GETEND)_^1_%EJT_]_^1*_8REVPRO SUBROUTINE_^1*_]_€€^1*_*READS CARDS INTO THE REVISIONS BUFFER AND CHECKS FOR A_^1*_,CONTROL CARD._^1*_*A DCK/ CARD WILL START A NEW UPDATE._^1*_*A MRG/ CARD WILL START A MERGE._^1*_*AN END/ CARD TERMINATES COSY._^1*_*A REM/ CARD IS PRINTED WITH ASTERISKS AND ANOTHER CARD IS_^1*_,READ._^1*_*A DEL/ OR INS/ CARD CLEARS THE ERROR MARKER AND EXITS THRU_^1*_,THE RETURN ADDRESS._^1*_*IF THE ERROR MARKER IS €€SET, CARDS ARE READ AND LISTED WITH_^1*_,ASTERISKS UNTIL A CONTROL CARD IS FOUND._^1*_*IF THE ERROR MARKER IS NOT SET, THE ROUTINE EXITS THRU THE_^1*_,RETURN ADDRESS +1 WHEN THE CARD IS NOT A CONTROL CARD._^1*_]_^1REVPRO 0_"0_^1_%RTJ BLKREV_^1_%LDA REVLUN_J**MSOS4.0**_^1_%STA* REVP02_'SET REVISION LUN INTO READ REQS._!**MSOS4.0**_^1_%STA* REVP04_J**MSOS4.0**_^1_%AND- CLRMOD_'CLEA€€R ASCII BIT TO CHECK DEVICE._!**MSOS4.0**_^1_%RTJ CKDEV_K**MSOS4.0**_^1_%JMP* REVP03_'MASS STORAGE DEVICE._.**MSOS4.0**_^1REVP01 RTJ- (REQPRO)_H**MSOS4.0**_^1*_]_^1*_$FREAD REVLU,REVPR2,REVBUF,40,A,0,1,0,0,D_-**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC REVPR2_J**MSOS4.0**_^1_%NUM 0_^1REVP02 VFD N3/0,N1/0,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%€€ADC REVBUF_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_[**MSOS4.0**_^1REVP03 RTJ- (REQPRO)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FREAD REVLU,REVPR2,REVBUF,40,A,0,1,0,0,D_,**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC REVPR2_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1REVP04 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_N**MSOS4.0**_^1_%ADC REV€€BUF_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1SECTOR NUM 1_O**MSOS4.0**_^1*_[**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1*_]_^1REVPR2 RAO* SECTOR_^1_%RAO SECNUM_^1_%LDA ADRINP_^1_%STA WORKUN_^1_%RTJ CHKDCK_^1_%JMP* REVPR3_'NOT A DCK/ CONTROL CARD._^1_%RTJ* GETEND_'PROCESS TO THE END OF THE INPUT DECK._^1_%JMP UPD005_^1REVPR3 RTJ CHKMRG_^1_%JMP* REVPR4_'NOT A MRG/ CONTROL CARD._^€€1_%RTJ* GETEND_'PROCESS TO THE END OF THE INPUT DECK._^1_%JMP E04A_^1REVPR4 RTJ CHKEND_^1_%JMP* REVPR5_'NOT AN END/ CONTROL CARD._^1_%RTJ* GETEND_'PROCESS TO THE END OF THE INPUT DECK._^1_%ENA 0_^1_%STA ERRMRK_'CLEAR THE ERROR MARKER._^1_%RTJ PRINTR_'PRINT THE END/ CARD._^1_%JMP COSY6_(END OF COSY._^1REVPR5 RTJ CHKDEL_^1_%JMP* REVPR6_'NOT A DEL/ CONTROL CARD._^1_%JMP* REVPR7€€_^1REVPR6 RTJ CHKINS_^1_%JMP* REVPR8_'NOT AN INS/ CONTROL CARD._^1REVPR7 ENA 0_^1_%STA ERRMRK_'CLEAR THE ERROR MARKER AND EXIT THRU THE_^1_%JMP* (REVPRO)_'RETURN ADDRESS._^1REVPR8 RTJ CHKREM_^1_%JMP* REVPR9_'NOT A REM/ CONTROL CARD._^1_%RAO ERRMRK_'SET THE ERROR MARKER._^1_%JMP* REVPRA_^1REVPR9 RTJ CHKCPY_'CHECK IF CPY/ CARD FOLLOWS DCK/._!**MSOS4.0**_^1_%JMP* *+2_*NO._?**MSO€€S4.0**_^1_%JMP* REVPRB_'YES. ILLEGAL POSITION IN DECK._#**MSOS4.0**_^1_%LDA ERRMRK_'NOT CONTROL CARD IF ERROR MRKR NOT **MSOS4.0**_^1_%SAN REVPRA_)SET, EXIT THRU THE RETURN ADDRESS +1._^1_%RAO* REVPRO_^1_%JMP* (REVPRO)_^1REVPRA RTJ PRINTR_'PRINT THE CARD AND GO READ AGAIN._^1_%JMP* REVPRO+1_^1*_[**MSOS4.0**_^1REVPRB ENA 22_+****COSY 22**** CPY/ CARD NOT_$**MSOS4.0**_^1_%RTJ ER€€RPRO_'FIRST CONTROL CARD IN REV. DECK._!**MSOS4.0**_^1_%RTJ PRINTR_J**MSOS4.0**_^1_%JMP* REVPRO+1_$GO READ NEXT CARD._0**MSOS4.0**_^1_%EJT_]_^1*_8CHKNAM SUBROUTINE_^1*_]_^1*_*COMPARES THE DECKNAME IN HOLBUF WITH THE DECKNAME IN REVBUF._^1*_*EXIT TO THE RETURN ADDRESS IF THE DECKNAMES MATCH OR TO THE_^1*_,RETURN ADDRESS +1 IF THEY DO NOT MATCH._^1*_]_^1CHKNAM 0_"0_^1_%LDA REVBUF_^€€1_%SUB* HOLBUF_^1_%SAN CHKNM1_^1_%LDA REVBUF+1_^1_%SUB* HOLBUF+1_^1_%SAN CHKNM1_^1_%LDA REVBUF+2_^1_%SUB* HOLBUF+2_^1_%SAN CHKNM1_^1_%JMP* (CHKNAM)_$DECKNAMES MATCHED._^1CHKNM1 LDA* DECK1_(FIRST DECK CHECKED MARKER._^1_%SAZ 1_^1_%JMP* CHKNM2_^1_%LDA* HOLBUF_J**MSOS4.0**_^1_%STA* DECK1_^1_%LDA* HOLBUF+1_H**MSOS4.0**_^1_%STA* DECK1+1_^1_%LDA* HOLBUF+2_H**MSOS4.0**_^1_%STA* DECK€€1+2_^1_%RAO* CHKNAM_'NAMES DO NOT MATCH._^1_%JMP* (CHKNAM)_^1CHKNM2 LDA* HOLBUF_J**MSOS4.0**_^1_%SUB* DECK1_(SEE IF ENTIRE LIBRARY WAS CHECKED._^1_%SAN CHKNM3_^1_%LDA* HOLBUF+1_H**MSOS4.0**_^1_%SUB* DECK1+1_^1_%SAN CHKNM3_^1_%LDA* HOLBUF+2_H**MSOS4.0**_^1_%SUB* DECK1+2_^1_%SAZ E10_^1CHKNM3 RAO* CHKNAM_'DECKNAMES DO NOT MATCH._^1_%JMP* (CHKNAM)_^1*_]_^1E10_"RTJ READI_(READ FROM €€INPUT UNIT UNTIL END OF DECK._^1_%LDA ENDDCK_^1_%SAN 1_^1_%JMP* E10_^1_%ENA 10_+****COSY E10**** NO SUCH DECK ON THE_^1_%JMP E1014_*INPUT LIBRARY._^1*_]_^1********************_^1*_]_^1DECK1 NUM 0_,DECKNAME OF THE FIRST DECK CHECKED ON THE_^1_%NUM 0_.INPUT LIBRARY._^1_%NUM 0_^1_%EJT_]_^1*_8NEWDCK SUBROUTINE_^1*_]_^1*_*PRINTS THE DCK/ CARD IN REVBUF, PLACES THE PROPER DECK_^€€1*_,IDENTIFIER IN NEWID, AND (IF COSY OUTPUT WAS REQUESTED)_^1*_,OUTPUTS A CSY/ CARD ON THE COSY OUTPUT UNIT._^1*_]_^1NEWDCK 0_"0_^1_%RTJ PRINTR_'PRINT THE DCK/ CONTROL CARD._^1_%LDA REVBUF+36_^1_%SUB BLANK_^1_%SAN NEWD1_^1_%LDA REVBUF+37_^1_%AND- NZERO+8_^1_%SUB- ONEBIT+13_^1_%SAZ NEWD2_^1NEWD1 LDA REVBUF+36_#HAVE A NEW I.D. SAVE IT ON THE CSY/ OR HOL/_^1_%STA* HOLBUF+36_€€%CARD._^1_%LDA REVBUF+37_^1_%AND- NZERO+8_^1_%INA $20_^1_%STA* HOLBUF+37_^1NEWD2 LDA* HOLBUF+36_#GET THE I.D. AND SAVE IN NEWID._^1_%STA NEWID_^1_%LDA* HOLBUF+37_^1_%AND- NZERO+8_^1_%STA NEWID+1_^1_%LDA COUT_^1_%SAN 1_,IF COSY OUTPUT, OUTPUT A CSY/ CARD._^1_%JMP* (NEWDCK)_^1_%LDA DCKNAM_'PLACE THE DECKNAME ON THE CSY/ CARD._^1_%STA* HOLBUF_^1_%LDA DCKNAM+1_^1_%STA* HOLBUF+€€1_^1_%LDA DCKNAM+2_^1_%STA* HOLBUF+2_^1_%LDA CSY_*PLACE THE CHARACTERS CSY/ ON THE CSY/ CARD._^1_%STA* HOLBUF+3_^1_%LDA CSY+1_^1_%STA* HOLBUF+4_^1_%LDA SLASH_^1_%STA* HOLBUF+5_^1_%RTJ- (REQPRO)_$WRITE THE CSY/ CARD ON THE COSY OUTPUT UNIT._^1*_]_^1*_$FWRITE COUT,NEWD4,HOLBUF,40,AORB,0,1,0,0,D_***MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC NEWD4€€_K**MSOS4.0**_^1_%NUM 0_^1NEWD35 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%ADC HOLBUF_J**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1NEWD4 JMP* (NEWDCK)_^1*_]_^1**************************_^1*_]_^1COUTLU NUM 0_,LOGICAL UNIT FOR COSY OUTPUT. SAME AS COUT._^1_%EJT_]_^1HOLBUF BSS HOLBUF(40)_"HOLLERITH INPUT BUFFER._^1INPBUF BSS INPBUF(192)_!COSY INPUT BUFFER._^1CSYBUF B€€SS CSYBUF(192)_!COSY OUTPUT BUFFER._^1_%EJT_]_^1*_[**MSOS4.0**_^1*_8COPY ROUTINE_6**MSOS4.0**_^1*_[**MSOS4.0**_^1COPY_!RAO* CPYID_(SET MARKER TO ALLOW DCK/ PROCESSOR **MSOS4.0**_^1_%JMP UPDATE_'TO PROCESS CPY/ CARD._-**MSOS4.0**_^1*_[**MSOS4.0**_^1*_[**MSOS4.0**_^1*_8START COPY_8**MSOS4.0**_^1*_[**MSOS4.0**_^1CPY005 ENA -1_*SET THE SLEW SWITCH._/**MSOS4.0**_^1_%STA SLEWMK_J**MS€€OS4.0**_^1_%LDA REVLUN_'CHECK IF REVISIONS ALREADY ON_$**MSOS4.0**_^1_%AND- CLRMOD_'STANDARD SCRATCH._1**MSOS4.0**_^1_%SUB- STDSCR_J**MSOS4.0**_^1_%SAN CPY010_J**MSOS4.0**_^1_%JMP* CPY036_'YES THEY ARE ON SCRATCH._***MSOS4.0**_^1CPY010 LDA INPLU_(COSY INPUT AND_4**MSOS4.0**_^1_%SUB REVLUN_'REVISIONS ON SAME LOGICAL UNIT._"**MSOS4.0**_^1_%SAZ CPY015_J**MSOS4.0**_^1_%JMP* CPY036€€_'NO._?**MSOS4.0**_^1CPY015 ENA 1_O**MSOS4.0**_^1_%STA* CPY025_'SET SECTOR NUMBER._0**MSOS4.0**_^1CPY016 RTJ READI_(READ REVISIONS._3**MSOS4.0**_^1_%RTJ- (REQPRO)_$WRITE REVISIONS TO SCATCH._(**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FWRITE STDSCR,CPY030,HOLBUF,40,A,0,1,0,0,D_+**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC CPY030_J**MSOS4.0**_^1€€_%NUM 0_O**MSOS4.0**_^1CPY020 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_N**MSOS4.0**_^1_%ADC HOLBUF_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1CPY025 NUM 1_,SECTOR NUMBER._4**MSOS4.0**_^1*_[**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1*_[**MSOS4.0**_^1CPY030 LDA ENDDCK_J**MSOS4.0**_^1_%SAN CPY035_'END/ FOUND._7**MSOS4.0**_^1_%RAO* CPY025_'UPDATE SECTOR NUMBER._-**MSOS4.0**_€€^1_%JMP* CPY016_J**MSOS4.0**_^1*_[**MSOS4.0**_^1**************************_B**MSOS4.0**_^1*_[**MSOS4.0**_^1_%SPC 4_O**MSOS4.0**_^1*_*TEMPORARY WORDS AND MARKERS USED BY COPY._'**MSOS4.0**_^1*_[**MSOS4.0**_^1FSREAD NUM 0_,FIRST READ MARKER._0**MSOS4.0**_^1CPYID NUM 0_,COPY OPERATION MARKER._,**MSOS4.0**_^1LSTDCK NUM 0_,LAST DECK TO COPY MARKER._)**MSOS4.0**_^1CPYRET ADC CPY055€€_'COPY REWIND REQUEST COMP. ADDRESS. **MSOS4.0**_^1*_[**MSOS4.0**_^1_%SPC 4_^1CPY035 LDA* CPY020_'SET REVLUN TO STDSCR._-**MSOS4.0**_^1_%STA REVLUN_J**MSOS4.0**_^1CPY036 ENA 40_+SET BUFFER TO HOLLERITH SIZE._$**MSOS4.0**_^1_%STA BUFSIZ_J**MSOS4.0**_^1_%RTJ READI_(READ CSY/ CARD._3**MSOS4.0**_^1_%RTJ CHKCSY_'CSY/ FOUND._7**MSOS4.0**_^1_%JMP* CPY040_'NO._?**MSOS4.0**_^1_%RAO* F€€SREAD_'SET THE FIRST READ MARKER._(**MSOS4.0**_^1_%JMP* CPY056_'YES._>**MSOS4.0**_^1CPY040 LDA* FSREAD_J**MSOS4.0**_^1_%SAN CPY045_'FIRST READ._7**MSOS4.0**_^1_%JMP E09_*YES. CSY/ NOT FIRST COSY INPUT._!**MSOS4.0**_^1CPY045 LDA REVBUF_'NO. CHECK IF DECK NAME IS ON THE_!**MSOS4.0**_^1_%SUB =N$2020_%CPY/ CARD._8**MSOS4.0**_^1_%SAN CPY050_J**MSOS4.0**_^1_%JMP* CPY080_J**MSOS4.0*€€*_^1CPY050 LDA INPLU_K**MSOS4.0**_^1_%STA TABLU_(SET LOGICAL UNIT._1**MSOS4.0**_^1_%LDA* CPYRET_'SET REQUEST COMPLETION TO COPY._"**MSOS4.0**_^1_%RTJ CSH054_'CHECK UNIT AND REWIND._,**MSOS4.0**_^1CPY055 JMP* CPY036_'DO NEXT READ._5**MSOS4.0**_^1CPY056 RTJ CHKNAM_'CHECK DECK NAMES._1**MSOS4.0**_^1_%RAO* LSTDCK_'DECKNAMES MATCH. SET LAST DECK MKR.**MSOS4.0**_^1_%LDA COUT_)DECKNA€€MES DO NOT MATCH_,**MSOS4.0**_^1_%SAZ CPY060_'COSY OUTPUT SPECIFIED._,**MSOS4.0**_^1_%RTJ- (REQPRO)_$WRITE CSY/ CARD TO COUT._***MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FWRITE COUT,CPY060,HOLBUF,40,AORB,0,1,0,0,D_)**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC CPY060_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1CPY057 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS€€4.0**_^1_%NUM 40_N**MSOS4.0**_^1_%ADC HOLBUF_J**MSOS4.0**_^1*_[**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1*_[**MSOS4.0**_^1CPY060 LDA COUT_L**MSOS4.0**_^1_%SAN CPY062_'DECK BEING COPIED._0**MSOS4.0**_^1_%JMP* CPY063_'NO._?**MSOS4.0**_^1CPY062 ENQ 0_,YES._>**MSOS4.0**_^1_%LDA* COPIED,Q_$PUT THE COPIED IDENTIFIER INTO_#**MSOS4.0**_^1_%INQ 10_+THE DECKNAME OUTPUT BUFFER._'**MSOS€€4.0**_^1_%STA HOLBUF,Q_H**MSOS4.0**_^1_%INQ -13_M**MSOS4.0**_^1_%SQN 1_O**MSOS4.0**_^1_%JMP* CPY063_'YES, MOVE COMPLETE._/**MSOS4.0**_^1_%INQ 4_,NO._?**MSOS4.0**_^1_%JMP* CPY062+1_$CONTINUE MOVE._4**MSOS4.0**_^1CPY063 LDA LOUTRV_'DECKNAMES TO BE LISTED._+**MSOS4.0**_^1_%SAZ CPY065_J**MSOS4.0**_^1_%STA* CPY061_'YES. SET LOGICAL UNIT._,**MSOS4.0**_^1_%RTJ- (REQPRO)_H**MSOS4.0**€€_^1*_[**MSOS4.0**_^1*_$FWRITE LOUTRV,CPY065,HOLBUF,40,A,0,1,0,0,D_***MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC CPY065_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1CPY061 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_N**MSOS4.0**_^1_%ADC HOLBUF_J**MSOS4.0**_^1*_[**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1*_[**MSOS4.0**_^1CPY065 LDA SIZ€€BUF_'SET BUFFER SIZE TO COSY INPUT._#**MSOS4.0**_^1_%STA BUFSIZ_J**MSOS4.0**_^1_%ADD ADINPB_J**MSOS4.0**_^1_%STA INPPTR_'SET POINTER TO END OF INPUT BUFFER.**MSOS4.0**_^1CPY066 RTJ GETEND_'COPY TO THE END OF THE DECK._%**MSOS4.0**_^1CPY070 LDA COUT_L**MSOS4.0**_^1_%SAZ CPY075_'COSY OUTPUT REQUESTED._,**MSOS4.0**_^1_%RTJ CLEARI_'YES. WRITE LAST BUFFER._+**MSOS4.0**_^1CPY075 L€€DA* LSTDCK_'THIS THE LAST DECK TO COPY._'**MSOS4.0**_^1_%SAN CPY080_'THIS LAST DECK TO COPY._+**MSOS4.0**_^1_%JMP* CPY036_'NO._?**MSOS4.0**_^1CPY080 ENA 0_,YES. CLEAR LAST DECK MARKER._%**MSOS4.0**_^1_%STA* LSTDCK_J**MSOS4.0**_^1_%STA DECK1_(FIRST DECKNAME WORD._.**MSOS4.0**_^1_%JMP COSY21_'CHECK FOR NEXT CONTROL CARD._%**MSOS4.0**_^1COPIED ALF 4,*COPIED*_F**MSOS4.0**_^1_%EJT_€€]_^1*_8MERGE INITIALIZATION ROUTINE_^1*_]_^1MERGE RTJ* MRG00_^1_%ADC ADBUF1-MERGE-1_,ADRIU1_^1_%ADC ADBUF2-ADBUF1+1_+ADRIU2_^1_%ADC BUF2-ADBUF2_/ADBUF2_^1MRG00 0_"0_^1_%LDA* MRG00_(FORM ALL ABSOLUTE ADDRESSES._^1_%ADD* MERGE+1_^1_%STA ADRIU1_^1_%STA WORKUN_^1_%INA -1_^1_%STA ALTUN_(ABSOLUTE ADDRESS OF MRGIU1._^1_%ADD* MERGE+2_^1_%STA ADRIU2_^1_%ADD* MERGE+3_^1_%STA ADBUF€€2_^1_%LDA ADDRES_'INITIALIZE POINTERS AND MARKERS._^1_%STA ADBUF1_^1_%LDA (CSTDPT)_$USE COSY STANDARD PRINT LUN._%**MSOS4.0**_^1_%EOR- MODBIT_'SET ASCII MODE BIT._/**MSOS4.0**_^1_%STA MRGT15_.*_:**MSOS4.0**_^1_%LDA- STDSCR_'SET STANDARD SCRATCH LOGICAL UNIT **MSOS4.0**_^1_%ADD- MODBIT_'SET ASCII BIT._4**MSOS4.0**_^1_%STA XFER17_.*_:**MSOS4.0**_^1_%ENA 0_^1_%STA SLEWMK_'SLEW€€MK CLEARED SO SLEW IS NOT DONE **MSOS4.0**_^1_%STA- I_^1_%STA ERRMRK_^1_%STA REMMRK_^1_%STA* COMCNT_^1_%STA* E03MRK_^1_%STA ENDCNT_^1_%STA PEMARK_^1_%STA MRGIU1_^1_%STA M2_^1_%STA N2_^1_%STA M1_^1_%STA N1_^1_%EJT_]_^1*_*PICK UP MERGE LOGICAL UNIT NUMBERS AND STORE IN MRGIU1,_^1*_,MRGIU2, AND MRGOU._^1*_]_^1MRG01 LDA BUF1+6,I_^1_%ALS 8_^1_%RTJ* MRG02_^1_%LDA BUF1+6,I_^1€€_%RTJ* MRG02_^1_%RAO- I_^1_%JMP* MRG01_^1*_]_^1MRG02 0_"0_^1_%AND- LPMASK+8_$MASK WITH 00FF TO GET A CHARACTER._^1_%SUB- ONEBIT+5_$0020. ASCII BLANK._^1_%SAN 1_^1_%JMP* MRG04_(FOUND BLANK. END OF CARD INFORMATION._^1_%INA -$C_^1_%SAN MRG03_^1_%LDA* COMCNT_'FOUND A COMMA. TEST FOR 3 COMMAS._^1_%INA -2_^1_%SAZ MRG035_'ZERO IF TOO MANY COMMAS._^1_%RAO* COMCNT_'INCREMENT COMMA€€ COUNTER._^1_%ENA 9_^1_%ADD* ALTUN_(INCREMENT TO THE NEXT PARAMETER STRING._^1_%STA* ALTUN_^1_%ENA 0_^1_%STA* (ALTUN)_%ZERO THE LOGICAL UNIT NUMBER._^1_%JMP* (MRG02)_^1*_]_^1MRG03 INA -4_^1_%SAM MRG035_'ILLEGAL CHARACTER ON MRG/ CARD._^1_%INA -10_^1_%SAM 1_^1MRG035 JMP* E02_*ILLEGAL PARAMETER ON MRG/ CARD._^1_%INA 10_^1_%STA* DIGIT_(SAVE THE CHARACTER (0 THRU 9)._^1_%LDA* (€€ALTUN)_^1_%MUI- TEN_*000A. CONVERT DIGITS FROM DECIMAL TO BINARY._^1_%ADD* DIGIT_^1_%STA* (ALTUN)_^1_%JMP* (MRG02)_^1*_]_^1**************************_^1*_]_^1E03MRK BSS E03MRK(1)_#FIRST TIME MARKER FOR COSY E03._^1DIGIT BSS DIGIT(1)_$TEMPORARY._^1COMCNT BSS COMCNT(1)_#COMMA COUNTER._^1_%EJT_]_^1*_*CHECK FOR VALID MERGE UNITS._^1*_]_^1MRG04 LDQ (CSTDOT)_%IF OUTPUT UNIT NOT SE€€T, SET IT_"**MSOS4.0**_^1_%LDA* MRGOU_)TO COSY STANDARD OUTPUT._)**MSOS4.0**_^1_%SAN MRG045_J**MSOS4.0**_^1_%TRQ A_O**MSOS4.0**_^1MRG045 ADD- MODBIT_'SET ASCII MODE BIT._/**MSOS4.0**_^1_%STA* MRGOU_K**MSOS4.0**_^1_%LDQ (CSTDIN)_%IF INPUT UNIT WAS NOT SET, SET_"**MSOS4.0**_^1_%LDA* MRGIU1_(IT TO COSY STANDARD INPUT._'**MSOS4.0**_^1_%SAN MRG046_J**MSOS4.0**_^1_%TRQ A_O**MSOS4.0*€€*_^1MRG046 ADD- MODBIT_'SET ASCII MODE BIT._/**MSOS4.0**_^1_%STA* MRGIU1_J**MSOS4.0**_^1_%TRA Q_,SAVE INPUT ONE LOGICAL UNIT NBR.. **MSOS4.0**_^1_%LDA* MRGIU2_^1_%SAZ MRG047_J**MSOS4.0**_^1_%ADD- MODBIT_'SET ASCII MODE BIT._/**MSOS4.0**_^1_%TRA Q_O**MSOS4.0**_^1MRG047 STQ* MRGIU2_J**MSOS4.0**_^1_%LDA* COMCNT_'THE COMMA COUNTER MUST EQUAL 2._^1_%INA -2_^1_%SAN E02_*NOT THREE M€€ERGE UNITS._^1_%LDA* MRGOU_^1_%SUB* MRGIU1_^1_%SAZ E02_*INPUT UNIT SAME AS OUTPUT UNIT._^1_%LDA* MRGOU_^1_%SUB* MRGIU2_^1_%SAN MRG05_^1*_]_^1E02_"ENA 2_,****COSY E02**** ILLEGAL PARAMETER ON_^1_%JMP E0402_*A MRG/ CARD._^1*_]_^1MRG05 RTJ PRINTR_'PRINT THE MRG/ CARD._^1_%LDA* MRGIU1_^1_%SUB* MRGIU2_^1_%SAN MRG06_^1_%JMP XFER_)BOTH REVISION DECKS FROM SAME INPUT UNIT._^1_%EJT€€_]_^1*_*READ FROM BOTH REVISION SETS AND CHECK FOR DCK/ CARDS._^1*_]_^1MRG06 RTJ MRGINP_'READ FROM INPUT UNIT 1._^1_%RTJ* DCKCHK_^1_%RTJ* SETIU2_'SET WORKING UNIT TO INPUT UNIT 2._^1MRG07 RTJ MRGINP_'READ FROM INPUT UNIT 2._^1_%RTJ* DCKCHK_^1_%JMP* MRG08_^1*_]_^1DCKCHK 0_"0_^1DCKCK1 RTJ CHKDCK_'CHECK FOR A DCK/ CARD._^1_%JMP* E03_^1_%ENA 0_,FOUND DCK/ CARD. CLEAR ANY ERROR M€€ARKERS._^1_%STA ERRMRK_^1_%STA* E03MRK_^1_%LDA WORKUN_^1_%STA- I_,ADDRESS OF THE WORKING UNITS PARAMETER STRING._^1_%LDQ (WORKUN)_$ADDRESS OF THE WORKING BUFFER._^1_%LDA- (ZERO),Q_$SAVE DECKNAME IN THE PARAMETER STRING._^1_%STA- 5,I_^1_%LDA- 1,Q_^1_%STA- 6,I_^1_%LDA- 2,Q_^1_%STA- 7,I_^1_%JMP* (DCKCHK)_^1*_]_^1E03_"LDA* E03MRK_^1_%SAN E0305_(NON-ZERO IF MESSAGE HAS BEEN OUTPUT._€€^1_%ENA 3_,****COSY E03**** THE FIRST CARD OF A MERGE_^1_%RTJ ERRPRO_)INPUT DECK WAS NOT A DCK/ CARD._^1_%RAO* E03MRK_^1E0305 RTJ MRGOUT_'OUTPUT THE BAD CARD._^1_%RTJ CHKEND_'CHECK FOR AN END/ CARD._^1_%JMP* E0307_^1_%LDA WORKUN_'FOUND AN END/ CARD._^1_%SUB* ADRIU1_^1_%SAN E0306_(BAD DCK/ CARD WAS ON INPUT UNIT 2._^1_%RTJ* SETIU2_^1_%RTJ MRGINP_'READ FROM INPUT UNIT 2._^1_€€%RTJ* SETIU1_^1E0306 JMP GETC32_^1E0307 RTJ MRGINP_'READ NEXT CARD._^1_%JMP* DCKCK1_^1_%EJT_]_^1PEMARK BSS PEMARK(1)_#POSSIBLE ERROR MARKER._^1ALTUN BSS ALTUN(1)_$ADDRESS OF ALTERNATE UNIT PARAMETER STRING._^1*_]_^1ADRIU1 ADC ADBUF1_'ABSOLUTE ADDRESS OF ADBUF1._^1ADRIU2 ADC ADBUF2_'ABSOLUTE ADDRESS OF ADBUF2._^1*_]_^1*_*MERGE INPUT UNIT 1 PARAMETER STRING._^1*_]_^1MRGIU1 B€€SS MRGIU1(1)_#LOGICAL UNIT NUMBER._^1ADBUF1 ADC BUF1_)ABSOLUTE ADDRESS OF BUF1._^1M1_#BSS M1(1)_(CURRENT VALUE OF 1ST SEQUENCE NUMBER._^1N1_#BSS N1(1)_(CURRENT VALUE OF 2ND SEQUENCE NUMBER._^1LASTM1 BSS LASTM1(1)_#PREVIOUS VALUE OF 1ST SEQUENCE NUMBER._^1LASTN1 BSS LASTN1(1)_#PREVIOUS VALUE OF 2ND SEQUENCE NUMBER._^1NAME1 BSS NAME1(3)_$CURRENT DECKNAME._^1*_]_^1*_*MERGE INP€€UT UNIT 2 PARAMETER STRING._^1*_]_^1MRGIU2 BSS MRGIU2(1)_#LOGICAL UNIT NUMBER._^1ADBUF2 ADC BUF2_)ABSOLUTE ADDRESS OF BUF2._^1M2_#BSS M2(1)_(CURRENT VALUE OF 1ST SEQUENCE NUMBER._^1N2_#BSS N2(1)_(CURRENT VALUE OF 2ND SEQUENCE NUMBER._^1LASTM2 BSS LASTM2(1)_#PREVIOUS VALUE OF 1ST SEQUENCE NUMBER._^1LASTN2 BSS LASTN2(1)_#PREVIOUS VALUE OF 2ND SEQUENCE NUMBER._^1NAME2 BSS NAME€€2(3)_$CURRENT DECKNAME._^1*_]_^1MRGOU BSS MRGOU(1)_$LOGICAL UNIT NUMBER OF MERGE OUTPUT UNIT._^1*_]_^1AGREE NUM 0_,ZERO WHEN DECKNAMES AGREE._^1CKMNMK NUM 0_,NZ WHEN M AND N VALUES HAVE NOT BEEN CHECKED._^1_%EJT_]_^1*_8SETIU1 SUBROUTINE_^1*_]_^1*_*SET WORKING UNIT AND I TO INPUT UNIT 1 PARAMETER STRING._^1*_*SET ALTERNATE UNIT AND Q TO INPUT UNIT 2 PARAMETER STRING._^1*_]_^1SE€€TIU1 0_"0_^1_%LDA* ADRIU1_^1_%STA WORKUN_^1_%STA- I_^1_%LDQ* ADRIU2_^1_%STQ* ALTUN_^1_%JMP* (SETIU1)_^1_%SPC 3_^1*_8SETIU2 SUBROUTINE_^1*_]_^1*_*SET WORKING UNIT AND I TO INPUT UNIT 2 PARAMETER STRING._^1*_*SET ALTERNATE UNIT AND Q TO INPUT UNIT 1 PARAMETER STRING._^1*_]_^1SETIU2 0_"0_^1_%LDA* ADRIU2_^1_%STA WORKUN_^1_%STA- I_^1_%LDQ* ADRIU1_^1_%STQ* ALTUN_^1_%JMP* (SETIU2)_^1_%€€SPC 3_^1*_8SWITCH SUBROUTINE_^1*_]_^1*_*SWITCH THE ALTERNATE UNIT WITH THE WORKING UNIT._^1*_]_^1SWITCH 0_"0_^1_%LDA WORKUN_^1_%LDQ* ALTUN_^1_%STA* ALTUN_^1_%STQ WORKUN_^1_%JMP* (SWITCH)_^1*_]_^1E08_"0_"0_^1_%ENA 8_,****COSY E08**** DECKNAMES MATCH WHEN MERGING_^1_%RTJ ERRPRO_^1_%RTJ* REVIS_(OUTPUT THE REVISION._^1_%JMP* (E08)_^1_%EJT_]_^1*_8START OF MERGE_^1*_]_^1MRG08 RTJ*€€ SETIU2_'SET WORKING UNIT TO INPUT UNIT 2._^1_%LDA- 5,Q_^1_%SUB- 5,I_*CHECK FOR IDENTICAL DECKNAMES._^1_%SAN MRG09_^1_%LDA- 6,Q_^1_%SUB- 6,I_^1_%SAN MRG09_^1_%LDA- 7,Q_^1_%SUB- 7,I_^1_%SAN MRG09_^1_%JMP* MRG10_^1*_]_^1MRG09 RAO* AGREE_(DECKNAMES DISAGREE. SET MARKER NON-ZERO._^1_%LDA* CKMNMK_'WAS GETMN CALLED FOR THE LAST DEL/, INS/, REM/_^1_%SAZ MRG095_^1_%ENA 0_,NO. CALL €€GETMN._^1_%STA* CKMNMK_^1_%RTJ GETMN_^1_%JMP E0567_(GETMN ERROR RETURN._^1MRG095 RTJ* REVIS_(OUTPUT REVISIONS UNTIL FIND A CONTROL CARD._^1_%RTJ GETMN_(DEL/, INS/, REM/ RETURN. CHECK SEQUENCE._^1_%JMP E0567_(GETMN ERROR RETURN._^1_%JMP* MRG09+1_(SEE GETCC FOR DCK/, END/, AND MRG/ RETURNS._^1*_]_^1MRG10 STA* AGREE_(DECKNAMES AGREE. SET MARKER TO ZERO._^1_%RTJ MRGINP_'READ FR€€OM INPUT UNIT 2._^1_%RTJ* GETCC_(LOOK FOR A CONTROL CARD IN BUF2._^1_%RTJ* E08_*DCK/ CARD NOT FOLLOWED BY A CONTROL CARD._^1_%RTJ GETMN_(DEL/, INS/, REM/ RETURN. CHECK SEQUENCE._^1_%JMP E0567_(GETMN ERROR RETURN._^1_%RTJ* SETIU1_'SET WORKING UNIT TO INPUT UNIT 1._^1_%RTJ MRGOUT_'OUTPUT DCK/ CARD._^1MRG11 RTJ MRGINP_'READ FROM INPUT UNIT 1._^1*_]_^1MRG13 RTJ* GETCC_(LOOK FOR €€A CONTROL CARD IN BUF1._^1_%RTJ* E08_*DCK/ CARD NOT FOLLOWED BY A CONTROL CARD._^1_%RTJ GETMN_(DEL/, INS/, REM/ RETURN. CHECK SEQUENCE._^1_%JMP E0567_(GETMN ERROR RETURN._^1_%RTJ* SETIU2_'SET WORKING UNIT TO INPUT UNIT 2._^1MRG14 LDA* M2_^1_%SUB* M1_^1_%SAP 1_^1_%JMP* MRG16_(M FROM UNIT 2 IS LESS THAN M FROM UNIT 1._^1_%SAZ 1_^1_%JMP* MRG17_(M FROM UNIT 1 IS LESS THAN M FROM €€UNIT 2._^1_%LDA* N2_^1_%SUB* N1_^1_%SAZ 1_^1_%JMP* MRG20_(M VALUES ARE EQUAL BUT N VALUES DISAGREE._^1*_]_^1*_*M AND N VALUES FOR BOTH UNITS ARE EQUAL._^1*_]_^1_%RTJ* SETIU2_^1_%RTJ CHKREM_'CHECK FOR A REM/ CONTROL CARD ON UNIT 2._^1_%JMP* MRG145_^1_%JMP* MRG15_^1*_]_^1*_*M FROM UNIT 2 LESS THAN M FROM UNIT 1._^1*_]_^1MRG16 LDA* N2_^1_%SUB* M1_^1_%SAM 1_^1_%JMP* MRG20_(M FROM U€€NIT 1 IS GREATER THAN M FROM UNIT 2_^1*_:BUT NOT GREATER THAN N FROM UNIT 2._^1_%RTJ* SETIU2_^1_%JMP* MRG21_^1*_]_^1*_*M FROM UNIT 1 LESS THAN M FROM UNIT 2._^1*_]_^1MRG17 LDA* N1_^1_%SUB* M2_^1_%SAM 1_^1_%JMP* MRG20_^1*_:BUT NOT GREATER THAN N FROM UNIT 1._^1MRG18 RTJ* SETIU1_^1*_]_^1*_*M AND N FROM WORKING UNIT LESS THAN M FROM ALTERNATE UNIT._^1*_]_^1_%JMP* MRG21_^1*_]_^1*_*M€€ FROM ONE UNIT FALLS BETWEEN M AND N OF THE OTHER UNIT._^1*_]_^1MRG20 RAO PEMARK_'SET POSSIBLE ERROR MARKER._^1_%RTJ* SETIU2_^1_%LDA* LASTM2_'RESET THE VALUES OF M AND N._^1_%STA* M2_^1_%LDA* LASTN2_^1_%STA* N2_^1*_]_^1MRG21 RTJ* REVIS_(OUTPUT THE REVISION._^1_%JMP* MRG155_^1*_]_^1MRG145 RTJ* SETIU1_^1_%RTJ CHKREM_'CHECK FOR A REM/ CONTROL CARD ON UNIT 1._^1_%JMP* MRG20_^1*_]_^€€1MRG15 RAO PEMARK_^1_%RAO REMMRK_^1_%RTJ* REVIS_(OUTPUT THE REM/ CARD._^1_%RTJ* SWITCH_^1_%RAO* CKMNMK_'SET MARKER TO CHECK M AND N VALUES LATER._^1_%RTJ* REVIS_(OUTPUT THE REMOVED REVISION._^1_%RTJ GETMN_(GET M AND N AND CHECK SEQUENCE._^1_%JMP E0567_(GETMN ERROR RETURN._^1_%RTJ* SWITCH_^1_%ENA 0_,CLEAR MARKER AND CHECK M AND N FOR SEQUENCE_^1_%STA CKMNMK_)ERRORS._^1MRG155 €€RTJ GETMN_^1_%JMP E0567_(GETMN ERROR RETURN._^1_%JMP* MRG14_^1_%EJT_]_^1*_8REVIS SUBROUTINE_^1*_]_^1*_*THIS SUBROUTINE OUTPUTS THE CARD CONTAINED IN THE WORKING_^1*_,BUFFER, THEN READS AND OUTPUTS REVISIONS FROM THE WORKING_^1*_,UNIT UNTIL A CONTROL CARD IS FOUND._^1*_*ENTER WITH A CARD IMAGE IN THE WORKING BUFFER (GENERALLY A_^1*_,CONTROL CARD)._^1*_*EXIT WITH THE NEXT CONTROL C€€ARD TO BE READ FROM THE WORKING_^1*_,UNIT IN THE BUFFER._^1*_*EXIT TO THE RETURN ADDRESS IF THE NEW CONTROL CARD IS A_^1*_,DEL/, INS/, OR REM/ CARD._^1*_*SEE GETCC SUBROUTINE FOR DCK/, MRG/, AND END/ CARD EXITS._^1*_]_^1REVIS 0_"0_^1_%RTJ* MRGOUT_^1_%RTJ MRGINP_^1_%RTJ* GETCC_^1_%JMP* REVIS+1_^1_%LDA* REMMRK_^1_%SAN REVIS1_^1_%STA PEMARK_^1_%STA ERRMRK_^1REVIS1 ENA 0_^1_%STA*€€ REMMRK_^1_%JMP* (REVIS)_^1_%EJT_]_^1*_8GETCC SUBROUTINE_^1*_]_^1*_*DETERMINE THE TYPE OF CARD THAT WAS READ FROM THE WORKING_^1*_,UNIT._^1*_*EXIT TO THE RETURN ADDRESS IF THE CARD IS NOT A CONTROL_^1*_,CARD OR TO THE RETURN ADDRESS +1 IF THE CARD IS A DEL/,_^1*_,INS/, OR REM/ CONTROL CARD._^1*_*A MRG/ CONTROL CARD IS ILLEGAL AND TERMINATES THE JOB._^1*_*IF A DCK/ CONTROL CARD IS F€€OUND, GETCC CHECKS FOR AN END/_^1*_,CARD IN THE ALTERNATE UNITS BUFFER. IF AN END/ IS FOUND,_^1*_,GETCC EXITS TO MRG09. IF NO END/, THE EXIT IS TO MRG08._^1*_*IF AN END/ CONTROL CARD IS FOUND, GETCC CHECKS FOR AN END/_^1*_,CARD IN THE ALTERNATE UNITS BUFFER. IF AN END/ IS FOUND,_^1*_,THE MERGE IS COMPLETE AND GETCC EXITS TO COSY2. IF NO_^1*_,END/, THE EXIT IS TO MRG09._^1*_]_^1€€GETCC 0_"0_^1_%LDQ WORKUN_^1_%STQ- I_,ADDRESS OF WORKING UNITS PARAMETER STRING._^1_%LDQ- (ZERO),Q_^1_%LDA- 5,Q_^1_%SUB SLASH_^1_%SAZ 1_^1_%JMP* (GETCC)_%NOT A CONTROL CARD._^1_%RTJ CHKDEL_'CHECK FOR A DEL/ CONTROL CARD._^1_%JMP* *+2_^1_%JMP* GETCC1_'FOUND A DEL/._^1_%RTJ CHKINS_'CHECK FOR AN INS/ CONTROL CARD._^1_%JMP* *+2_^1_%JMP* GETCC1_'FOUND AN INS/._^1_%RTJ CHKREM_'CHE€€CK FOR A REM/ CONTROL CARD._^1_%JMP* GETCC2_^1*_]_^1GETCC1 RAO* GETCC_(FOUND DEL/, INS/, OR REM/._^1_%JMP* (GETCC)_^1*_]_^1GETCC2 RTJ CHKDCK_'CHECK FOR A DCK/ CARD._^1_%JMP* GETCC3_^1*_]_^1_%LDA* REMMRK_^1_%SAN 4_^1_%STA PEMARK_^1_%STA ERRMRK_^1_%ENA 0_^1_%STA* REMMRK_^1_%STA- 1,I_^1_%STA- 2,I_^1_%LDA- (ZERO),Q_^1_%STA- 5,I_^1_%LDA- 1,Q_^1_%STA- 6,I_^1_%LDA- 2,Q_^1_%STA- 7,I_^€€1*_]_^1_%LDA AGREE_^1_%SAN 1_^1_%JMP* GETCC4_'LAST DECKNAMES MATCHED._^1_%LDA* ENDCNT_'WILL BE NON-ZERO IF AN END/ HAS BEEN_^1_%SAN 2_.DETECTED ON THE OTHER INPUT UNIT._^1_%JMP MRG08_(NO END/._^1_%JMP MRG09_^1*_]_^1GETCC3 RTJ CHKEND_'CHECK FOR AN END/ CARD._^1_%JMP* GETCC5_^1*_]_^1GETC32 LDA* REMMRK_^1_%SAN 4_^1_%STA PEMARK_^1_%STA ERRMRK_^1_%ENA 0_^1_%STA* REMMRK_^1_%STA€€- 1,I_^1_%STA- 2,I_^1_%LDA* ENDCNT_'ENDCNT WILL BE NON-ZERO IF AN END/ HAS BEEN_^1_%SAZ GETC35_)DETECTED ON OTHER UNIT._^1_%RTJ* MRGOUT_'OUTPUT AN END/ CARD._^1_%LDA MRGOU_^1_%STA TABLU_^1_%RTJ WEOF_)IF MAG TAPE WRITE AN EOF, NOT MAG **MSOS4.0**_^1*_9TAPE OUTPUT BLANK LEADER OR WRITE **MSOS4.0**_^1*_9END OF FILE CARD._0**MSOS4.0**_^1_%LDA* ENDOUT_'IF MAG TAPE, REWIND._^1_%RTJ €€ MTSTAT_J**MSOS4.0**_^1_%NOP 0_,NO P+1 RETURN NEEDED._-**MSOS4.0**_^1_%JMP COSY2_(END OF MERGE._^1*_]_^1GETC35 STA- 5,I_^1_%STA- 6,I_^1_%STA- 7,I_^1_%RAO* ENDCNT_^1GETCC4 RTJ SWITCH_^1_%JMP MRG09_^1*_]_^1GETCC5 RTJ CHKMRG_'CHECK FOR A MRG/ CARD._^1_%JMP* (GETCC)_%NOT A CONTROL CARD._^1*_]_^1E04_"LDA MRGOU_(SET THE LOGICAL UNIT NUMBER AND ASCII BIT IN_^1_%STA* E0407_^1_%RTJ- (€€REQPRO)_$OUTPUT AN END/ CARD ON THE MRG OUTPUT UNIT._^1*_]_^1*_$FWRITE MRGOU,E0408,ENDCD,6,A,0,1,0,0,D_/**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC E0408_K**MSOS4.0**_^1_%NUM 0_^1E0407 NUM 0_^1_%NUM 6_^1_%ADC ENDCD_K**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1E0408 ENA 4_,****COSY E04**** FOUND A MRG/ CARD WITHIN_^1E0402 RTJ ERRPRO_)A REVI€€SIONS DECK._^1_%RTJ* MRGOUT_'OUTPUT THE MRG/ CARD._^1_%JMP COSY6_^1*_]_^1**************************_^1*_]_^1REMMRK BSS REMMRK(1)_^1ENDCNT BSS ENDCNT(1)_#END/ CARD COUNTER._^1ENDOUT ADC MRGWRT+1_H**MSOS4.0**_^1_%EJT_]_^1*_8MRGOUT SUBROUTINE_^1*_]_^1*_*WRITE A REVISION FROM THE WORKING BUFFER ON THE MERGE_^1*_,OUTPUT UNIT AND STDPRT._^1*_]_^1MRGOUT 0_"0_^1_%LDQ =XBUF2_J**MSOS4.0€€**_^1_%LDA WORKUN_^1_%SUB ADRIU1_^1_%SAN 2_^1_%LDQ =XBUF1_J**MSOS4.0**_^1_%STQ* MRGWRT+6_H**MSOS4.0**_^1_%INQ -3_N**MSOS4.0**_^1_%STQ* MRGLST+6_^1_%LDA ERRMRK_^1_%SAN 3_^1_%LDA PEMARK_^1_%SAZ 1_^1_%JMP* MRGOT1_^1_%LDQ (WORKUN)_^1_%INQ -3_^1_%LDA* BLANKS_^1_%STA- 1,Q_^1_%STA- 2,Q_^1_%LDA MRGOU_K**MSOS4.0**_^1_%STA* MRGOT0_J**MSOS4.0**_^1*_]_^1*_*WRITE REVISION ON MERGE O€€UTPUT UNIT._^1*_]_^1MRGWRT RTJ- (REQPRO)_^1*_]_^1*_$FWRITE MRGOU,MRGLST,BUF1 OR BUF2,40,A,0,1,0,0,D_$**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC MRGLST_J**MSOS4.0**_^1_%NUM 0_^1MRGOT0 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%0_"0_^1*_]_^1_%JMP- (DISP)_^1*_]_^1MRGOT1 LDQ (WORKUN)_^1_%INQ -3_^1_%LDA* STARS_^1_%STA- 1,Q_,PRINTER BUF€€FER._^1_%STA- 2,Q_^1MRGLST RTJ- (REQPRO)_^1*_]_^1*_$FWRITE CSTDPT,MRGOT2,BUF1ORBUF2,40,A,0,1,0,0,D_%**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC MRGOT2_J**MSOS4.0**_^1_%NUM 0_^1MRGT15 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 43_^1_%0_"0_^1*_]_^1_%JMP- (DISP)_^1*_]_^1MRGOT2 JMP* (MRGOUT)_^1*_]_^1BLANKS ALF 1,_^1STARS ALF 1,**_^1_%EJT_]_^€€1*_8MRGINP SUBROUTINE_^1*_]_^1*_*READ A REVISION FROM THE WORKING UNIT INTO THE WORKING BUF._^1*_]_^1MRGINP 0_"0_^1_%LDA WORKUN_^1_%SUB ADRIU1_^1_%SAZ MRGI01_J**MSOS4.0**_^1_%JMP* MRGIN3_J**MSOS4.0**_^1MRGI01 RAO* MSADDR_^1_%RTJ BLKREV_^1_%LDA MRGIU1_J**MSOS4.0**_^1_%STA* MRGIN2_J**MSOS4.0**_^1_%STA* MRGI26_J**MSOS4.0**_^1_%AND- CLRMOD_'CLEAR MODE BIT FOR STATUS REQUEST. **MSO€€S4.0**_^1_%RTJ CKDEV_(CHECK TYPE OF DEVICE._-**MSOS4.0**_^1_%JMP* MRGI25_'MASS STORAGE DEVICE._.**MSOS4.0**_^1_%RTJ- (REQPRO)_$NON MASS STORAGE DEVICE._***MSOS4.0**_^1*_]_^1*_$FREAD MRGIU1,MRGIN5,BUF1,40,A,0,1,0,0,D_-**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC MRGIN5_J**MSOS4.0**_^1_%NUM 0_^1MRGIN2 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM€€ 40_^1_%ADC BUF1_L**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_[**MSOS4.0**_^1MRGI25 RTJ- (REQPRO)_H**MSOS4.0**_^1*_[**MSOS4.0**_^1*_$FREAD MRGIU1,MRGIN5,BUF1,40,A,0,1,0,0,D_-**MSOS4.0**_^1*_[**MSOS4.0**_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC MRGIN5_J**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1MRGI26 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_N**MSOS4.0**_^1_%AD€€C BUF1_L**MSOS4.0**_^1_%NUM 0_O**MSOS4.0**_^1MSADDR NUM 0_O**MSOS4.0**_^1*_[**MSOS4.0**_^1_%JMP- (DISP)_J**MSOS4.0**_^1*_]_^1MRGIN3 ENQ 39_^1_%LDA* BLANKS_^1MRGI35 STA* BUF2,Q_'STORE BLANKS IN BUF2 TO ALLOW SHORT_^1_%INQ -1_-TELETYPE RECORDS._^1_%SQM 1_^1_%JMP* MRGI35_^1_%LDA MRGIU2_J**MSOS4.0**_^1_%STA* MRGIN4_J**MSOS4.0**_^1MRGI37 RTJ- (REQPRO)_^1*_]_^1*_$FREAD MRGIN2,MRG€€IN5,BUF2,40,A,0,1,0,0,D_-**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC MRGIN5_J**MSOS4.0**_^1_%NUM 0_^1MRGIN4 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%ADC BUF2_L**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1MRGIN5 JMP* (MRGINP)_^1_%EJT_]_^1*_8XFER ROUTINE_^1*_]_^1*_*THIS SUBROUTINE READS CARD IMAGES FROM INPUT UNIT 1 AND_^1*_,WRITES THEM€€ ON MASS STORAGE SCRATCH. THE TRANSFER IS_^1*_,COMPLETE WHEN AND END/ CARD IS READ AND WRITTEN._^1*_]_^1XFER_!STA* MSADDR_^1_%STA* SECTNO_^1XFER1 RAO* SECTNO_'INCREMENT THE MASS STORAGE SECTOR NUMBER._^1_%RTJ BLKREV_^1_%LDA MRGIU1_J**MSOS4.0**_^1_%STA* XFER16_J**MSOS4.0**_^1XFER15 RTJ- (REQPRO)_^1*_]_^1*_$FREAD MRGIU1,XFER2,BUF1,40,A,0,1,0,0,D_.**MSOS4.0**_^1*_]_^1_%VFD N1/0,€€N1/1,N5/4,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC XFER2_K**MSOS4.0**_^1_%NUM 0_^1XFER16 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%ADC BUF1_L**MSOS4.0**_^1*_]_^1_%JMP- (DISP)_^1*_]_^1XFER2 RTJ- (REQPRO)_^1*_]_^1*_$FWRITE STDSCR,XFER3,BUF1,40,A,0,1,0,0,D_-**MSOS4.0**_^1*_]_^1_%VFD N1/0,N1/1,N5/6,N1/0,N4/0,N4/1_3**MSOS4.0**_^1_%ADC XFER3_K**MSOS4.0**_^1_%NUM 0_^1XFER1€€7 VFD N3/0,N1/1,N2/0,N10/0_<**MSOS4.0**_^1_%NUM 40_^1_%ADC BUF1_L**MSOS4.0**_^1_%NUM 0_^1SECTNO NUM 0_^1*_]_^1_%JMP- (DISP)_^1*_]_^1XFER3 RTJ CHKEND_^1_%JMP* XFER1_^1_%LDA* XFER17_J**MSOS4.0**_^1_%STA MRGIU1_^1_%JMP MRG06_^1_%EJT_]_^1E0567 RTJ ERRPRO_'****COSY E05, E06, OR E07****_^1_%LDQ WORKUN_^1_%LDA- 3,Q_^1_%STA- 1,Q_*RESET VALUES OF M AND N._^1_%LDA- 4,Q_^1_%STA- 2€œ,Q_^1_%RTJ REVIS_(OUTPUT BAD REVISION._^1_%JMP GETMN+1_^1_%EJT_]_^1_%ALF 3,_^1BUF2_!BSS BUF2(40)_$INPUT BUFFER FOR MERGE INPUT UNIT 2._^1_%END COSY_^__œPEESORT CSY/ J04 P€1_%NAM EESORT_'DECK-ID J04 MSOS 4.1_-SUMMARY-079_^1*_$RELOCATABLE OBJECT CODE LISTING AND CROSS-REFERENCE PROGRAM_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1************************************************************************_^1*_$THIS PROGRAM RUNS €€AS A BACKGROUND JOB. IT WILL LIST NAM, ENT,_!*_^1*_$AND EXT DATA AND OPTIONALLY SORT ENTRY POINT/EXTERNALS TO_%*_^1*_$INDICATE INCIDENCE OF EXTERNAL REFERENCES TO ENTRY POINTS BY_"*_^1*_$PROGRAM NAMES._Q*_^1*_$IF OPTION LIST IS USED, ALL DATA FROM NAM, ENT, EXT BLOCKS IS_!*_^1*_$PRINTED ON THE STANDARD LIST DEVICE. IF OPTION SORT IS USED,_!*_^1*_$ALL FUNCTIONS ARE PERFORMED. OPTI€€ONS ARE SPECIFIED VIA_(*_^1*_$STANDARD COMMENT UNIT. SORTING IS DONE IN UNPROTECTED MEMORY_!*_^1*_$AND IF INSUFFICIENT AREA EXISTS ONLY LIST FUNCTION WILL BE_$*_^1*_$DONE. ERROR IS--MEMORY OVERFLOW - NO SORT--_3*_^1*_$NORMAL INPUT IS FROM STANDARD BINARY INPUT UNIT OF INSTALLATION *_^1*_$FILE TERMINATED BY *T._I*_^1*_$*S DEFINED ENTRY POINTS ARE NOT RELATED TO EXTERNALS_+*_^1****€€********************************************************************_^1_%SPC 3_^1*_$PROGRAM ENTRY POINT_^1_%ENT EESORT_^1_%SPC 2_^1*_$PROGRAM EQUIVALENCES_^1_%EQU MONI($F4)_#ADDRESS OF MONITOR_^1_%SPC 2_^1_%EJT_]_^1IMSG_!ALF 24,ENTER LIST FOR LIST ONLY, SORT FOR LIST AND SORT_^1*_]_^1*_$REQUEST PROGRAM EXECUTION OPTION_^1EESORT FWRITE $FC,0,IMSG,24,A,0,1,I,0,1_^1EESC_!LDA* E€€ESORT+3_$LOOP ON THREAD_^1_%SAZ ICOMP_^1_%JMP* EESC_^1_%EJT_]_^1*_$READ OPERATOR REPLY_^1ICOMP FREAD_!$FC,0,JBUF,1,A,0,1,I,0,1_^1CICOMP LDA* ICOMP+3_%LOOP ON THREAD_^1_%SAZ JCOMP_^1_%JMP* CICOMP_^1JCOMP LDA* ICOMP+4_%LOOK FOR ERROR_^1_%SAP CHECK_(SKIP IF NO ERROR_^1_%JMP* EESORT_'TRY INPUT SEQUENCE AGAIN_^1JBUF_!NUM 0_,OPTION ENTRY BUFFER_^1_%EJT_]_^1CHECK LDA* JBUF_)LOOK AT€€ ENTERED DATA_^1_%SUB =N$4C49_'LOOK AT -LI-_^1_%SAZ LIST_)SKIP ON LI FOUND = LIST INPUT_^1_%LDA* JBUF_^1_%SUB =N$534F_%LOOK AT -SO-_^1_%SAZ SORT_)SKIP ON SO FOUND = SORT INPUT_^1_%JMP* EESORT_'BAD INPUT - TRY AGAIN_^1LIST_!SET A_^1_%STA SLFLAG_'LIST ONLY SET FLAG MINUS_^1SORT_!CLR A_^1_%STA NAMDES_^1_%STA NENPTS_^1_%LDA- $F6_'HIGHEST UNPROTECTED +1_^1_%INA -5_^1_%STA F6_^€€1_%STA FF6_^1_%LDA =XENDPTR_$GET ADDRESS OF PROGRAM END MINUS 1_^1_%INA 1_,POINTS TO START OF AVAILABLE UNPROTECTED_^1_%STA F7_^1_%STA FF7_^1_%RTJ* FIRSTH_#PRINT HEADER MESSAGE_^1CRTOF NUM $0D0C_(CR,TOF_^1_!ALF 27,LISTING OF PROGRAM NAMES, ENTRY POINTS AND EXTERNALS_^1_%NUM $0D0D_^1FIRSTH ADC 0_^1_%ENQ 29_^1_%LDA* FIRSTH_#ADDR OF MESSAGE_^1_%RTJ FWRITE_^1START1 CLR A_)B€€ACKGROUND INPUT BUFFER TO ZERO._^1_%ENQ -59_^1ZRO_"STA BUFF+59,Q_^1_%INQ 1_^1_%SQZ DONQ-*-1_^1_%JMP* ZRO_^1DONQ_!RTJ- (MONI)_#READ REQUEST_^1_%NUM $4801_^1_%NUM 0_)COMPLETION ADDR_^1THRD1 NUM 0_)THREAD_^1LU1_"NUM $08F9_$STD INPUT BIN_^1_%NUM 60_^1_%ADC BUFF_^1*_]_^1LOP_"LDA* THRD1_^1_%SAZ 1_^1_%JMP* LOP_^1_%LDA* LU1_^1_%SAP SCAN-*-1_^1_%JMP EXITX_(TERMINATE ON ERROR_^€€1*_]_^1_%EJT_]_^1SCAN_!NOP 0_^1BFR_"LDQ =XBUFF_#ADDRESS OF INPUT BUFFER_^1_%INQ -1_^1_%STQ- I_^1_%LDA- 1,I_'ASTERISK *_^1_%ARS 8_^1_%INA -$2A_^1_%SAN 1_^1_%JMP* AST_'YES_^1_%LDA- 1,I_'FIRST WORD OF BUFFER_^1_%ARS 12_^1_%AND =N$F_%MASK ALL BUT RB TYPE FIELD_^1_%INA -2_(NAME BLOCK_^1_%SAN 1_^1_%JMP* NAM_'YES_^1_%INA -6_(ENTRY POINT BLOCK_^1_%SAN 2_^1_%JMP ENT_*YES_^1_%I€€NA -2_(EXTERNAL BLOCK_^1_%SAN 2_^1_%JMP EXT_*YES_^1_%JMP* START1_^1_%EJT_]_^1*_]_^1NAM_"NOP 0_)NAME BLOCK PROCESSOR_^1_%CLR A_,INITIALIZE ENT/EXT BLOCK HEADING FLAGS_^1_%STA* ENTFG_^1_%STA* EXTFG_^1STARTA LDA* NAMFG_(FLAG TO TELL IF A PREVIOUS NAM BLK WAS INPUTED_^1_%SAZ STARTB_'NO PREV NAME BLOCK_^1_%LDA =XCRTOF_^1_%ENQ 1_^1_%RTJ FWRITE_^1STARTB LDA =XNAMBUF_^1_%ENQ 1_^€€1_%RTJ FWRITE_'WRITE OUT ROW OF BLANKS_^1_%RAO* NAMFG_^1_%LDA =XNAMH1_%PRINT FIRST LINE OF HEADER_^1_%ENQ 22_^1_%RTJ FWRITE_^1_%LDA =XNAMH2_%PRINT SECOND LINE OF HEADER_^1_%ENQ 23_^1_%RTJ FWRITE_^1_%LDA- 4,I_'PROGRAM LENGTH_^1_%RTJ HEXASC_#CONVERT FROM HEX TO ASCII_^1_%STA* NAMBUF+6_$SAVE ASCII PROGRAM LENGTH_^1_%STQ* NAMBUF+7_^1_%LDA- 5,I_^1_%STA* NAMBUF+1_$SAVE ASCII PROG€€RAM NAME_^1_%LDA- 6,I_^1_%STA* NAMBUF+2_^1_%LDA- 7,I_^1_%STA* NAMBUF+3_^1_%LDA- 3,I_*DATA SIZE_^1_%RTJ HEXASC_'CONVERT HEX TO ASCII_^1_%STA* NAMBUF+14_#SAVE ASCII DATA BLOCK SIXE_^1_%STQ* NAMBUF+15_^1_%LDA- 2,I_*COMMON SIZE_^1_%RTJ HEXASC_'CONVERT HEX TO ASCII_^1_%STA* NAMBUF+10_#SAVE ASCII COMMON BLOCK SIZE_^1_%STQ* NAMBUF+11_^1_%ENQ 18_^1MLOOP LDA- 10,B_)MOVE MOST OF NAM BLOC€€K COMMENT_^1_%STA* NAMBUF+17,Q_^1_%INQ -1_+DECREMENT INDEX_^1_%SQM PTNAM_(SKIP IF LOOP DONE_^1_%JMP* MLOOP_^1PTNAM ENQ 36_+PRINT NAM CARD INFO_^1_%LDA =XNAMBUF_^1_%RTJ* FWRITE_^1_%RTJ NAMBLK_^1_%JMP* START1_^1_%SPC 2_^1NAMH1 ALF 22, PROGRAM PROGRAM COMMON_!DATA NAME CARD_^1NAMH2 ALF 22,_"NAME_"LENGTH_!SIZE_"SIZE COMMENTS_^1_%NUM $0D_^1*_]_^1AST_"RTJ LENGTH_'ON RET€€URN Q=LENGHT OF INPUT RECORD_^1_%LDA BFR+1_$BUFFER ADDRESS_^1_%RTJ* FWRITE_^1_%LDA- 1,I_'GET FIRST TWO CHARACTERS_^1_%SUB =N$2A54_"IS THIS WORD AN ASCII_!*T_^1_%SAZ 1_)YES - SKIP TO GO TO CROSS REFERENCE_^1_%JMP START1_^1_%JMP DONE_^1_%EJT_]_^1NAMFG NUM 0_,NAME BLOCK FLAG_^1ENTFG NUM 0_^1EXTFG NUM 0_^1NAMBUF ALF 20,_^1_%ALF 16,_^1*_]_^1FWRITE ADC 0_)OUTPUT FORMAT RECO€€RD_^1_%STA* OUTADR_#BUFFER ADDRESS_^1_%STQ* N_)NBR OF WORDS_^1_%LDA- I_^1_%STA* SAVII_^1FW1_"RTJ- (MONI)_^1_%NUM $4C01_(FWRITE_^1_%NUM 0_)COMPLETION ADDR_^1THRD2 NUM 0_)THREAD_^1LU2_"NUM $18FB_$LIST OUTPUT_^1N_$NUM 0_^1OUTADR ADC 0_)BUFFER ADDRESS_^1*_]_^1LOP1_!LDA* THRD2_^1_%SAZ 1_^1_%JMP* LOP1_^1_%LDA* LU2_^1_%SAP 1_^1_%JMP* FW1_^1_%LDA* SAVII_^1_%STA- I_^1_%NOP 0_^1_%J€€MP* (FWRITE)_^1SAVII ADC 0_^1_%EJT_]_^1*_]_^1ENT_"NOP 0_)ENTRY POINT BLOCK PROCESSOR_^1_%ENA 0_^1_%STA MODE_^1_%RTJ* BLK_^1_%LDA* ENTFG_(LOOK AT ENTRY HEA4ER FLAG_^1_%SAN NOEHDR_'SKIP IF NO HEADER_^1_%RAO* ENTFG_(PRINT HEADER ONCE PER PROGRAM_^1_%ENQ 13_^1_%LDA =XENTRY_^1_%RTJ* FWRITE_#OUTPUT .ENTRY POINTS. HEADER_^1NOEHDR RTJ* LENGTH_'ON RETURN (Q)=LENGTH OF INPUT RECORD_^€€1_%LDA BFR+1_(ADDR OF BUFF_^1_%RTJ* FWRITE_#OUTPUT ENTRY POINT NAMES_^1_%CLR A_^1_%RTJ EXTRAC_^1_%JMP START1_'READ NEXT BLOCK_^1ENTRY NUM $0D0D_^1_%ALF 11, PROGRAM ENTRY POINTS_^1_%NUM $0D_^1_%EJT_]_^1*_]_^1EXT_"NOP 0_)EXTERNAL BLOCK PROCESSOR_^1_%ENA 1_^1_%STA MODE_^1_%RTJ* BLK_^1_%LDA* EXTFG_(LOOK AT EXTERNAL HEADER FLAG_^1_%SAN NOXHDR_'SKIP IF NO HEADER_^1_%RAO* EX€€TFG_(PRINT HEADER ONCE PER PROGRAM_^1_%ENQ 12_^1_%LDA =XEXTER_^1_%RTJ* FWRITE_#OUTPUT .EXTERNALS. HEADER_^1NOXHDR RTJ* LENGTH_'ON RETURN (Q)=LENGTH OF INPUT RECORD_^1_%LDA BFR+1_^1_%RTJ* FWRITE_#OUTPUT EXTERNAL NAMES_^1_%ENA 1_^1_%RTJ EXTRAC_^1_%JMP START1_^1EXTER NUM $0D0D_^1_%ALF 10, PROGRAM EXTERNALS_^1_%NUM $0D_^1_%EJT_]_^1BLK_"ADC 0_^1_%ENQ -57_^1GOA_"LDA- 57,B_%M€€ASK OFF HIGH ORDER BIT_^1_%AND =N$7FFF_^1_%STA- 57,B_^1_%INQ 1_^1_%SQZ 1_^1_%JMP* GOA_^1_%NOP 0_^1_%ENQ -56_^1_%LDA NAMBUF_^1BLANK1 STA- 57,B_%WORD 1,5,9..._^1_%SQZ LASENT-*-1_^1_%INQ 4_^1_%JMP* BLANK1_^1LASENT LDA =N$0DFF_"CARRIAGE RETURN AND NULL_^1_%STA- 29,I_^1_%SET A_^1_%STA- 1,I_^1_%JMP* (BLK)_^1*_]_^1LENGTH ADC 0_)COMPUTE LENGTH OF INPUT RECORD_^1_%LDA* BUFF+59_"L€€AST CELL OF BUFFER WHICH WAS STORED INTO_^1_%SUB BFR+1_$FWA OF BUFFER_^1_%TRA Q_)Q= LENGTH OF TRANSFER_^1_%JMP* (LENGTH)_^1BUFF_!BZS BUFF(60)_^1HEXASC ADC 0_)HEX TO ASCII CONVERTER_^1_%TRA Q_^1_%NOP 0_^1_%RTJ* SEND_^1_%STA* PACK1_^1_%RTJ* SEND_^1_%ALS 8_^1_%EOR* PACK1_^1_%STA* PACK1_^1_%RTJ* SEND_^1_%STA* PACK2_^1_%RTJ* SEND_^1_%ALS 8_^1_%EOR* PACK2_^1_%STA* PACK2_^1_%LDQ* €€PACK1_^1_%JMP* (HEXASC)_^1PACK1 ADC 0_^1PACK2 ADC 0_^1SEND_!ADC 0_^1_%CLR A_^1_%LRS 4_^1_%ALS 4_^1_%INA -$A_^1_%SAP ABOV9-*-1_^1_%INA $3A_'30,31,...,39_^1_%JMP* EXIT_^1ABOV9 INA $41_'41,42,...,46_^1EXIT_!JMP* (SEND)_^1*_]_^1EXITX NOP 0_^1_%RTJ- ($F4)_$EXIT REQUEST_^1_%NUM $A00_^1*_]_^1MODE_!ADC 0_)ENT =0, EXT =1._^1F6_#ADC 0_)TEMP HOLDER FOR F6_^1FF6_"ADC 0_^1F€€FF6_!ADC 0_^1BLKCT ADC 0_)EXT AND ENT ENTRY COUNT_^1COUNT ADC 0_)COUNT DOWN CELL FOR 6 CHAR_^1NENPTS ADC 0_)NBR OF ENTRY POINTS PICKED UP_^1NAMDES ADC 0_)INDEX ASSIGNED TO A PROGRAM_^1F7_#ADC 0_^1FF7_"ADC 0_^1EXTIND ADC 0_)NAME ASSOCIATED WITH PROGRAM_^1_%EJT_]_^1*_]_^1*_"PUT ENT AND EXT NAMES IN CORE STARTING AT HIGH END OF PROTECTED COR_^1*_]_^1*_]_^1EXTRAC ADC 0_)EXTR€€ACT ENTRY POINTS AND EXTERNALS_^1_%LDA* ERRFG_(LOOK AT MEMORY BUFFER OVERFLOW FLAG_^1_%SAP OKNERR_'SKIP IF NO OVERFLOW_^1_%JMP* LAST_)OVERFLOW - DO NOT SAVE_^1OKNERR LDQ* F6_^1_%ENA -14_'MAX NBR OF ENTRIES PER BLOCK_^1_%STA* BLKCT_^1EXT1_!ENA -3_(MAX NBR OF WORDS IN NAME._^1_%STA* COUNT_^1EXTT_!LDA- 2,I_'WORD FROM INPUT BLOCK._^1_%AND =N$7FFF_"MASK HIGH ORDER BIT_^1_%SAN EXT1A€€-*-1 ANY MORE ENTRIES IN BLOCK_^1_%JMP* LAST_%NO_^1EXT1A STA- 1,Q_'YES, MOVE TO TABLE_^1_%RAO* COUNT_^1_%RAO- I_)UPDATE POINTERS INTO BLOCK_^1_%INQ 1_^1_%LDA* COUNT_$MOVED ALL THREE WORDS OF NAME YET_^1_%SAZ EXT2-*-1_^1_%LDA* BLKCT_^1_%SAZ LASTA_^1_%JMP* EXTT_^1LASTA JMP* LAST_^1EXT2_!LDA* NAMDES_#PLACE PROGRAM DESIGNATOR WITH ENT OR EXT_^1_%STA- 1,Q_^1_%RAO* BLKCT_$NO, PROCE€€SSED LAST ENTRY OF BLOCK_^1_%LDA* MODE_^1_%SAZ EXT3-*-1_!IS IT ENT OR EXT_^1_%LDA- 1,Q_'EXT_^1_%TCA A_^1_%STA- 1,Q_^1_%JMP* EXT4_^1EXT3_!RAO* NENPTS_^1EXT4_!INQ -7_^1_%STQ* F6_^1_%LDA* F7_+SEE IF NAME STORAGE WORKING FROM LOW UNPROT_^1_%TCA A_,UP AND ENT/EXT STORAGE WORKING FROM HI_^1_%AAQ A_,UNPROT DOWN HAVE CROSSED. IF SO, NOT ENOUGH_^1_%SAP OKGO_)MEMORY FOR SORT SO DO LIST€€ ONLY_^1_%SET A_^1_%STA* SLFLAG_^1_%STA* ERRFG_^1MSGZ_!FWRITE $FC,0,MEOV,13,A,0,1,I,0,1_^1CMSGZ LDA* MSGZ+3_'LOOP ON THREAD_^1_%SAZ LAST_^1_%JMP* CMSGZ_^1OKGO_!RAO- I_^1_%JMP* EXT1_^1LAST_!NOP 0_^1_%JMP* (EXTRAC)_!RETURN, ENT OR EXT HAS BEEN SAVED_^1*_]_^1*_]_^1*_]_^1*_!LOAD NAME INTO CORE BEHINE PROGRAM AND CHECK FOR MEMORY OVERFLOW_^1*_]_^1*_]_^1NAMBLK ADC 0_)PLACE NAME BLO€€CK IN TABLE AND UP INDEX_^1_%LDA* ERRFG_(HAS MEMORY OVERFLOWED_^1_%SAP NOERR_(SKIP IF NOT_^1_%JMP* NOOFL_(IGNORE DATA_^1NOERR LDQ* F7_^1_%ENA -3_^1_%STA* COUNT_^1_%RAO* NAMDES_#UP NAME BLOCK DESIGNATOR_^1NBL1_!LDA- 5,I_'WORD FROM INPUT NAME BLOCK._^1_%STA- 1,Q_^1_%RAO* COUNT_^1_%RAO- I_)UPDATE POINTERS INTO BLOCK_^1_%INQ 1_^1_%LDA* COUNT_^1_%SAZ NBL2-*-1_^1_%JMP* NBL1_^1NBL2_!€€NOP 0_^1_%LDA* F7_^1_%INA 3_,MOVE NAME BLOCK POINTER DOWN 3 WORDS_^1_%STA* F7_^1_%SUB* F6_+CHECK FOR UNPROT MEMORY OVERFLOW_^1_%SAM NOOFL_^1_%SET A_^1_%STA* SLFLAG_^1_%STA* ERRFG_^1MSGX_!FWRITE $FC,0,MEOV,13,A,0,1,I,1_^1CMSGX LDA* MSGX+3_'LOOP ON THREAD_^1_%SAZ NOOFL_^1_%JMP* CMSGX_^1NOOFL JMP* (NAMBLK)_$RETURN - NAME NOW IN TABLE_^1SLFLAG NUM 0_^1ERRFG NUM 0_^1MEOV_!ALF€€ 13,MEMORY OVERLFOW - NO SORT_^1*_]_^1*_]_^1DONE_!NOP 0_)MATCH ENTRY POINTS TO PROGRAM NAMES_^1_%LDA* SLFLAG_'IS SORT REQUESTED_^1_%SAZ SORTIT_'SKIP TO SORT_^1_%JMP* EXITX_(TERMINATE_^1SORTIT JMP MESGXX_^1RTNMSG NOP 0_^1_%RTJ* ORDER_$ORDER THE ENT EXT TABLE ALPHABETICALLY_^1ENPT3 LDQ* FF6_^1EXTNL LDA* NENPTS_#PROCESSED LAST ENTRY POINT_^1_%SAN EXTNLA-*-1_^1_%JMP EXITX_(YE€€S_^1EXTNLA LDA- 4,Q_'VALUE OF ..NAMEXX.._^1_%SAP ENPT-*-1_^1_%INQ -4_^1_%STQ FF6_^1_%JMP* EXTNL_^1ENPT_!LDA NENPTS_'REDUCE ENTRY POINT BLOCK COUNT_^1_%INA -1_^1_%STA NENPTS_^1_%TRQ A_)ADDRESS OF ENTRY POINT NAME -1_^1_%INA 1_^1_%STQ- I_)POINTER TO ENT PT NAME_^1_%ENQ 3_^1_%RTJ FWRITE_^1_%LDQ FF6_^1_%INQ -4_^1_%STQ FF6_^1_%LDQ- $F6_'HIGHEST UNPROTECTED +1_^1_%INQ -5_^1€€_%STQ FFF6_^1ENQT0 LDQ FFF6_^1ENPT1 LDA- 4,Q_'VALUE OF ..NAMEXX.._^1_%SAM ENPT2-*-1_^1_%JMP* LOOP_^1ENPT2 TCA A_^1_%STA EXTIND_^1_%LDA- 1,Q_'NA_^1_%SUB- 1,I_'I= ADDR OF ENTRY POINT NAME -1_^1_%SAN LOOP-*-1_^1_%LDA- 2,Q_'ME_^1_%SUB- 2,I_^1_%SAN LOOP-*-1_^1_%LDA- 3,Q_'XX_^1_%SUB- 3,I_^1_%SAN LOOP-*-1_^1_%JMP* MATCH_^1LOOP_!INQ -4_^1_%STQ FFF6_^1_%TCQ A_^1_%ADD F6_^1_%S€€AM LOOP1-*-1_^1_%JMP* ENPT3_^1LOOP1 JMP* ENPT1_^1*_]_^1MATCH LDA EXTIND_^1_%INA -1_^1_%INQ -4_^1_%STQ FFF6_)TEMP HOLDER FOR Q_^1_%MUI =N3_^1_%TRA Q_^1_%LDA FF7_^1_%AAQ Q_^1_%LDA- 1,Q_^1_%STA* HOLD+2_^1_%LDA- 2,Q_^1_%STA* HOLD+3_^1_%LDA- 3,Q_^1_%STA* HOLD+4_^1_%LDA =A_^1_%STA* HOLD_^1_%STA* HOLD+1_^1_%LDA =XHOLD_^1_%ENQ 5_^1_%RTJ FWRITE_^1_%JMP* ENQT0_^1_%BZS HOLD(5)€€_^1F66_"ADC 0_)TEMP HOLDER FOR BOTTON OF EXT ENT TABLE_^1*_$SORT ENT AND EXT IN ALPHABETICAL ORDER_^1*_]_^1*_]_^1ORDER ADC 0_^1_%LDQ F6_(BOTTOM OF ENT EXT TABLE_^1ORDERT STQ* F66_^1_%LDQ FF6_'TOP OF ENT EXT TABLE_^1_%CLR A_^1_%STA* HOLD_^1ORDER1 TRQ A_^1_%INA -4_(ADDR OF 2ND ENTRY IN TABLE_^1_%STA- I_)TO I._^1_%LDA- 1,I_'WORD ONE OF ENTRY 2_^1_%SUB- 1,Q_'WORD ONE OF ENTRY 1€€_^1_%SAN ORDTST-*-1_^1_%LDA- 2,I_^1_%SUB- 2,Q_^1_%SAN ORDTST-*-1_^1_%LDA- 3,I_^1_%SUB- 3,Q_^1_%SAZ OROK-*-1_^1ORDTST SAM ORDSWT-*-1_!IS ORDER OK_^1OROK_!JMP* ORDOK_$YES_^1ORDSWT LDA- 1,I_'NO, MOVE ENTRY 2 TO HOLD BUFFER_^1_%STA* HOLD_^1_%LDA- 2,I_^1_%STA* HOLD+1_^1_%LDA- 3,I_^1_%STA* HOLD+2_^1_%LDA- 4,I_^1_%STA* HOLD+3_^1_%LDA- 1,Q_'MOVE ENTRY 1 TO ENTRY 2 POSITION_^1_%STA- 1,I€€_^1_%LDA- 2,Q_^1_%STA- 2,I_^1_%LDA- 3,Q_^1_%STA- 3,I_^1_%LDA- 4,Q_^1_%STA- 4,I_^1_%LDA* HOLD_%MOVE ENTRY 2 TO ENTRY 1 POSITION_^1_%STA- 1,Q_^1_%LDA* HOLD+1_^1_%STA- 2,Q_^1_%LDA* HOLD+2_^1_%STA- 3,Q_^1_%LDA* HOLD+3_^1_%STA- 4,Q_^1ORDOK LDA- I_)ALL NECESSARY ORDERING COMPLETE_^1_%INA -4_^1_%TCA A_^1_%ADD* F66_^1_%SAM ORDROK-*-1_^1_%LDA* HOLD_%COMPLETE PASS THRU TABLE WITH NO REOR€€DERS_^1_%SAZ ORDEXT-*-1_^1_%LDQ* F66_'NO, MOVE BOTTOM OF TABLE UP ONE ENTRY._^1_%INQ 4_^1_%JMP* ORDERT_^1ORDEXT JMP* (ORDER)_"YES RETURN_^1ORDROK INQ -4_^1_%JMP* ORDER1_#PROCEED THROUGH REMAINDER OF TABLE_^1MESGXX NOP 0_^1_%RTJ* SECH_^1_%NUM $0CFF_^1_%ALF 27,ALPHABETIZED ENTRY POINT LIST WITH PROGRAM REFERENCES_^1_%NUM $0D0D_^1SECH_!ADC 0_^1_%ENQ 1_^1_%LDA* SECH_^1_%RTJ F€†WRITE_^1_%ENQ 28_^1_%RAO* SECH_^1_%LDA* SECH_^1_%RTJ FWRITE_^1_%JMP RTNMSG_^1ENDPTR NUM 0_,PROGRAM END LOCATOR_^1_%END EESORT_^__†PLIBILD CSY/ B01 P€1_%NAM LIBILD_'DECK-ID B01 MSOS 4.1_-SUMMARY-079_^1*_$CALLED BY JOB PROCESSER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_]_^1*_$THIS IS THE 'ROOT' FOR SUBSEQUENT GTFILE REQUESTS. THIS COPY_^1*_$READS THE CONVERSATIONAL OVERLAY._^1*_]_^1_%ENT LI€€BILD_^1LIBILD RTJ- ($F4)_^1LIST_!NUM $5A00_(GTFILE RQST; D = 1, X = 0_^1_%NUM 0_,COMPLETION_^1THREAD NUM 0_^1_%NUM $08C2_(LU_^1_%NUM 0_,W1_^1_%ADC LIBILD_'STARTING ADDR._^1_%NUM 0_,W2_^1_%ADC NAME-LIST_#INCREMENT TO FILE NAME_^1_%NUM 0_,MSB_^1_%NUM 0_,LSB_^1LOOP_!LDA* THREAD_'HANG ON THREAD_^1_%SAZ 1_,EXECUTION WILL PICK UP HERE_^1_%JMP* LOOP_)IN THE OVERLAYING FILE._^1_€P%JMP- ($22)_(SHOULD NOT GET HERE EVER_^1NAME_!ALF 3,LIBIDO_^1_%END LIBILD_^__PPLIBIDO CSY/ B02 P€1_%NAM LIBIDO_'DECK-ID B02 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*LIBRARY BUILDER OVERLAY_^1*_]_^1*_$CALLED BY PROGRAM LIBRARY ROUTINE 'LIBILD' VIA GTFILE REQUEST_^1*_]_^1*_]_^1*_$THIS PORTION IS THE EXECUTIVE AND DOES€€ THESE TASKS:_^1*_]_^1*_(1. CALLS THE CONVERSATIONAL PROCESSOR SUBROUTINE_^1*_(2. CALLS THE ACTUAL LIBRARY PROCESSOR VIA GTFILE_^1*_(3. EXITS IF A FATAL CONVRS ERROR OCCURS_^1*_]_^1*_]_^1_%EXT CONVRS_^1ENTRY BSS ENTRY(0)_^1_%RTJ- ($F4)_^1LIST_!NUM $5A00_(GTFILE RQST ; D BIT = 1, X = 0_^1_%NUM 0_,COMPLETION_^1THREAD NUM $FFFF_(THREAD_^1_%NUM $08C2_(LU_^1W1_#NUM 0_^1_%ADC EN€€TRY_(STARTING ADDR._^1W2_#NUM 0_^1_%ADC NAME-LIST_#INCREMENT TO FILE NAME_^1MSB_"NUM 0_^1LSB_"NUM 0_^1LOOP_!LDA* THREAD_'THIS IS WHERE EXECUTION 'REALLY' BEGINS_^1_%SAZ GOON_)IF REQUEST COMPLETE_^1_%JMP* LOOP_)IF NOT_^1*_]_^1GOON_!BSS GOON(0)_^1_%RTJ+ CONVRS_'CALL CONVERSATIONAL ROUTINE_^1_%NUM 0_'DUMMY ARGUMENT_^1_%SAP DOMORE_'IF NO FATAL ERRORS_^1_%RTJ- ($F4)_^1_%NUM $0A0€θ0_(EXIT REQUEST_^1*_]_^1DOMORE BSS DOMORE(0)_^1*_]_^1*_%CLEAR THE PARAMETERS THAT WERE SET BY THE PREVIOUS GTFILE REQ._^1_%ENA 0_^1_%STA* W1_^1_%STA* W2_^1_%STA* MSB_^1_%STA* LSB_^1_%JMP* ENTRY_^1NAME_!ALF 3,HELPER_^1_%END_]_^__θPMESSY CSY/ B04 P€1_%NAM MESSY_(DECK-ID B04 MSOS 4.1_-SUMMARY-079_^1*_8BACKGROUND MESSAGE MOVER_^1*_*CALLING SEQUENCE: LENGTH = MESSY(NUMBER,BUFFER)_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_,DEFINITIONS:_^1*_]_^1*_/NUMBER - MESSAGE NUMBER: 1,2,..._^1*_/BUFFER €€- FWA OF ARRAY TO WHICH MESSAGE IS MOVED_^1*_/LENGTH - RETURED TO CALLING PROGRAM:_^1*_8GREATER THAN ZERO - NUMBER OF WORDS MOVED_^1*_8LESS THAN ZERO - INVALID MESSAGE_^1*_]_^1*_]_^1_%ENT MESSY_^1M1_#ALF Z,CONTROL LU = Z_^1M2_#ALF Z,DEFS LU_#= Z_^1M3_#ALF Z,INSTALL LU = Z_^1M4_#ALF Z,NEWLIB LU_!= Z_^1M5_#ALF Z,SPARE Z_^1M6_#ALF Z,LIB 00 LU_!= Z_^1M7_#ALF Z,SKELETON LU = Z€€_^1M8_#ALF Z,INVALID LUZ_^1M9_#ALF Z,INVALID CLASS CODEZ_^1LAST_!BSS LAST(0)_%LAST SYMBOL IN MESSAGE TABLE_^1INDEX ADC M1,M2,M3,M4,M5,M6,M7,M8,M9_^1_%ADC LAST_^1MAXMES EQU MAXMES(*-INDEX-1) NUMBER OF MESSAGES_^1SAVEQ NUM 0_^1FWA_"NUM 0_,FWA OF MESSAGE BUFFER_^1MESNUM NUM 0_,MESSAGE NUMBER_^1LENGTH NUM 0_^1MAXP1 EQU MAXP1(MAXMES+1)_^1MESSY NUM 0_,ENTRY POINT_^1_%STQ*€€ SAVEQ_^1*_]_^1_%LDQ* (MESSY)_%FETCH ADDRESS OF MESSAGE NUMBER_^1_%LDA- ($22),Q_%FETCH VALUE OF MESSAGE NUMBER_^1_%STA* MESNUM_^1_%RAO* MESSY_^1*_]_^1_%LDQ* (MESSY)_%FETCH FWA OF DESTINATION BUFFER_^1_%RAO* MESSY_^1_%STQ* FWA_^1*_]_^1_%LDQ* MESNUM_'CHECK FOR VALID MESSAGE_^1_%SQP CKMORE_^1NOGOOD ENA -1_+BAD NUMBER_^1_%JMP* PICKQ_^1CKMORE SQN GOODUN_^1_%JMP* NOGOOD_'NUMBER IS ZER€€O_^1*_]_^1GOODUN INQ -MAXP1_'CHECK UPPER LIMIT_^1_%SQM VERYGD_^1_%JMP* NOGOOD_^1*_]_^1VERYGD LDQ* MESNUM_^1_%LDA* INDEX,Q_^1_%SUB* INDEX-1,Q_#COMPUTE MESSAGE LENGTH_^1_%STA* LENGTH_^1_%LDA* INDEX-1,Q_^1_%STA* LWA+1_^1_%LDQ* LENGTH_^1LOOP_!INQ -1_+MOVE MESSAGE IN REVERSE ORDER_^1_%SQM ALDONE_^1LWA_"LDA+ 0,Q_^1_%STA* (FWA),Q_^1_%JMP* LOOP_^1*_]_^1ALDONE LDA* LENGTH_'RETURN NUMBER€H OF WORDS IN MESSAGE_^1PICKQ LDQ* SAVEQ_^1_%JMP* (MESSY)_^1_%END_]_^__HPMOVECH CSY/ B06 P€1_%NAM MOVECH_'DECK-ID B06 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_]_^1*_*MOVE CHARACTER PACKAGE_^1*_]_^1*_)NON-REENTRANT_^1*_]_^1_%EXT PARTBL_^1_%ENT NEXTCH,STORCH_^1_%EQU SFF00($1A),S00FF($A),S7FFF($11)_^1*_8FETCH NEXT CH€€ARACTER_^1*_$CALLING SEQUENCE: KAR = NEXTCH(FWA,IBYTE)_^1*_:FWA - FIRST WORD ADDRESS OF CHAR. BUFFER_^1*_:IBYTE - CHAR. INDEX, BUMPED BEFORE RETURN_^1*_BTO CALLER_^1*_:KAR - CHARACTER RETURNED IN A REG._^1*_@RIGHT JUSTIFIED, ZERO FILL._^1*_%Q REGISTER IS SAVED AND RESTORED._^1*_]_^1NEXTCH NUM 0_^1_%LDA* NEXTCH_^1_%RTJ* PREPAR_'SET UP ABSOLUTIZING ROUTINE_^1_%RTJ* ABSOLU_'FETCH AB€€SOLUTE ADDRESS OF 'FWA'_^1_%STA* FWA_^1_%RTJ* ABSOLU_'FETCH ADDRESS OF 'IBYTE'_^1_%STA* IBYTE_^1*_]_^1*_]_^1_%LDQ- S00FF_(SET MASK FOR LOWER CHARACTER (INDEX EVEN)_^1_%ENA 1_^1_%AND* (IBYTE)_^1_%SAZ 1_,IF EVEN_^1_%QLS 8_,SET MASK FOR UPPER CHAR._^1_%STQ* MASK_^1*_]_^1*_]_^1_%LDQ* (IBYTE)_%COMPUTE FORTRAN INDEX MINUS ONE_^1_%INQ 1_-OF WORD THAT CONTAINS_^1_%QRS 1_-THE CHARACTER€€._^1_%INQ -1_,(MACHINE INDEX)_^1_%LDA* (FWA),Q_%FETCH THAT WORD_^1_%LDQ* MASK_^1_%LAQ A_,AND WITH MASK (EITHER $FF00 OR $00FF)_^1_%SQP 1_,IF CHARACTER ALREADY RIGHT-JUSTIFIED_^1_%ALS 8_,IF NOT_^1_%RAO* (IBYTE)_%BUMP CHARACTER INDEX_^1SAVEQ LDQ =N$0_^1*_]_^1*_$RETURN TO CALLER THROUGH COMMON EXIT_^1EXIT_!JMP* (BACK)_^1BACK_!NUM 0_^1*_]_^1*_*STORE CHARACTER CALLING SEQUENCE:_^€€1*_8CALL STORCH(FWA,IBYTE,KAR)_^1*_:FWA - FIRST WORD ADDRESS OF CHAR.BUFFER_^1*_:IBYTE - CHAR.INDEX OF CHAR.TO BE STORED_^1*_B(NOT CHANGED BY THIS ROUTINE)_^1*_:KAR - THE LOWER 8 BITS OF THIS WORD WILL_^1*_@BE STORED IN THE DESIGNATED SLOT._^1*_$Q REGISTER IS SAVED AND RESTORED_^1STORCH NUM 0_^1_%LDA* STORCH_^1_%RTJ* PREPAR_'SET UP ABSOLUTIZING ROUTINE_^1_%RTJ* ABSOLU_'FETCH ADDRE€€SS OF 'FWA'_^1_%STA* FWA_^1_%RTJ* ABSOLU_'FETCH ADDRESS OF 'IBYTE'_^1_%STA* IBYTE_^1_%RTJ* ABSOLU_'SAME FOR 'KAR'_^1_%STA* KAR_^1*_]_^1*_]_^1_%LDQ- SFF00_(SET MASK FOR LOWER CHAR._^1_%ENA 1_^1_%AND* (IBYTE)_^1_%SAZ 1_,IF EVEN_^1_%QLS 8_,SET UP FOR UPPER CHAR._^1_%STQ* MASK_^1*_]_^1*_]_^1_%LDQ* (IBYTE)_%COMPUTE MACHINE INDEX OF DESTINATION WORD_^1_%INQ 1_^1_%QRS 1_^1_%INQ -1_^€€1_%ADQ* FWA_*COMPUTE ABS.ADR. OF DEST. WORD_^1_%STQ* FWA_^1*_]_^1_%LDQ* MASK_)EITHER $FF00(LOWER) OR $00FF(UPPER)_^1_%LDA* (KAR)_^1_%AND- S00FF_^1_%SQM 1_,IF LOWER CHAR. IS TO BE OVERWRITTEN_^1_%ALS 8_,IF UPPER_^1_%LDQ* (FWA)_(FETCH DESTINATION WORD_^1_%LLS 16_+INTERCHANGE A AND Q_^1_%AND* MASK_)REMOVE OLD CHARACTER_^1_%AAQ A_,MERGE IN NEW CHAR._^1_%STA* (FWA)_(REPLACE UPDATED €€WORD_^1_%JMP* SAVEQ_(ALL DONE_^1*_]_^1*_$INITIALIZE STARTING ADDRESS OF ARGUMENT LIST_^1*_]_^1*_$IF ''PARTBL'' IS $7FFF THERE IS NO PARTITION CORE._^1*_$ELSE, (PARTBL) = FWA OF PARTITION 1._^1*_$IF NO PARTITION CORE, THE CALLERS ADDRESSES MUST BE IN PART0._^1*_]_^1PREPAR NUM 0_^1_%STQ* SAVEQ+1_^1_%STA* BACK_)(A) = FWA OF LIST; RETURN ADDRESS EVENTUALLY_^1_$LDQ =XPARTBL_^1_$INQ €€ 1_-TEST FOR $7FFF_^1_%SQP PICKUP_'IF FALSE_^1_%ENA -1_+NO PARTITIONS_^1_%JMP* STAPAR_^1PICKUP INQ -2_+(Q) NOW = PARTBL - 1_^1_%SUB- 1,Q_^1STAPAR STA* PARTY_(NEG/POS = PARTO/PART1_^1_%JMP* (PREPAR)_^1*_]_^1*_$FETCH ARGUMENT ADDRESS,ABSOLUTIZE,BUMP RETURN ADDRESS_^1*_]_^1ABSOLU NUM 0_^1_%LDQ* PARTY_(PART 0/1 FLAG_^1_%LDA* (BACK)_'(A) = ARGUMENT ADDRESS FROM CALLING SEQUENCE_^1_%€€SQP ABS_*IF PART1 CALLER_^1_%SAP ABS_*IF ABSOLUTE PARTO ADDRESS_^1_%ADD* BACK_)IF RELATIVE PARTO ADDRESS_^1_%AND- S7FFF_^1ABS_"RAO* BACK_)BUMP ARGUMENT LIST ADDRESS_^1_%JMP* (ABSOLU)_$*_^1*_]_^1*_]_^1FWA_"NUM 0_,FIRST-WORD-ADDRESS OF CHARACTER BUFFER_^1IBYTE NUM 0_,ADDRESS OF CHARACTER INDEX_^1KAR_"NUM 0_,ADDRESS OF CHARACTER(USED ONLY BY STORCH)_^1MASK_!NUM 0_^1PARTY NUM €"0_,PARTO/PART1 FLAG_^1_%END_]_^__"PPICKUP CSY/ B07 P€1_%NAM PICKUP_'DECK-ID B07 MSOS 4.1_-SUMMARY-079_^1*_$LIBRARY BUILDER PARAMETER PICKUP SUBROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1_%SPC 2_^1*_]_^1*_9PICKUP IS A SUBROUTINE TO PICKUP_^1*_9AND COMPUTE PARAMETERS TO A FORTRAN_^1*_9GENERATED SUBROUTINE, F€€UNCTION SUB-_^1*_9PROGRAM OR STATEMENT FUNCTION._^1*_]_^1_%ENT Q8PREP_^1_%ENT Q8PKUP_^1*_]_^1_%EQU LPMSK(2),NZERO($12),ZERO($22),ONEBIT($23),ZROBIT($33)_^1_%EQU ENTAD($DC)_^1_%EQU PAD($DD)_^1*_]_^1*_]_^1*_]_^1*_]_^1Q8PREP NUM 0_-ENTRY POINT_^1*_9Q8PREP IS THE INITIALIZATION ENTRY_^1*_9OF PARAMS. THE CALL TO THIS ENTRY POIN0_^1*_9OCCURS ONCE FOR EACH PROCESSING OF A_^1*_9PARAM€€ETER LIST. THE ADDRESS OF THE_^1*_9ENTRY POINT IS PASSED AS A PARAMETER_^1*_9WHERE IT IS PICKED UP AND STORED AWAY_^1*_9FOR LATER USE._^1*_]_^1_%LDA* (Q8PREP)_%LOAD PARAMETER(WHICH IS THE SELF-REL-_^1*_9ATIVE ADDRESS OF THE ENTRY POINT OF_^1*_9THE CALLING ROUTINE._^1_%ADD* Q8PREP_(COMPUTE ADDRESS_^1_%STQ* QSV4_^1_%LDQ- $F6_*CHECK IF UNPROTECTED IN UPPER BANK_^1_%SQM 1_^1_%AND- LPM€€SK+15_$$7FFF_^1_%STA- ENTAD_^1_%RAO* Q8PREP_(COMPUTE RETURN ADDRESS_^1_%LDQ* QSV4_)RESTORE Q_^1_%JMP* (Q8PREP)_%EXIT_^1QSV4_!NUM 0_^1*_]_^1*_]_^1*_]_^1*_]_^1Q8PKUP NUM 0_-ENTRY POINT_^1*_9Q8PKUP IS ENTERED ONCE FOR EACH_^1*_9CONSECUTIVE PARAMETER. THE ADDRESS_^1*_9OF THE PARAMETER IS COMPUTED AND_^1*_9PASSED BACK THROUGH THE ACCUMULATOR_^1*_9AND THE RETURN ADDRESS IS INCREMENTED€_^1*_9BY 1._^1*_]_^1_%LDA- (ENTAD)_'PICKUP PARAMETER_^1_%STA- PAD_^1_%LDA- (PAD)_^1_%STQ* QSV4_^1_%LDQ- $F6_*CHECK IF UNP IN UPPER BANK_^1_%SQM 3_^1_%SAP 2_^1_%ADD- (ENTAD)_^1_%AND- LPMSK+15_$$7FFF_^1_%RAO- (ENTAD)_^1_%LDQ* QSV4_)RESTORE Q_^1_%JMP* (Q8PKUP)_%RETURN_^1_%END_]_^__PIOSUB CSY/ B08 P€1_%NAM IOSUB_(DECK-ID B08 MSOS 4.1_-SUMMARY-079_^1*_$LIBRARY BUILDER INTEGER FUNCTION FOR CHARACTER I/O_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1_%SPC 2_^1************************************************************************_^1*_$PROGRAM IS CALLABLE AS AN I€€NTEGER FUNCTION FOR PERFORMING_%*_^1*_$FREADS AND FWRITES IN THE BACKGROUND._:*_^1*_'FREAD -- IF(RIOSUB(LU,BUF,NWORDS).LT.0) GO TO 10_-*_^1*_'FWRITE -- IF(WIOSUB(LU,BUF,NWORDS).LT.0) GO TO 10_,*_^1*_$WHERE----_V*_^1*_+LU = LOGICAL UNIT FOR I/O_@*_^1*_+BUF = I/O BUFFER_I*_^1*_+NWORDS = I/O WORD COUNT_B*_^1*_'STATEMENT 10 IS EXECUTED ON I/O ERROR_8*_^1********************************€€****************************************_^1_%SPC 2_^1*_$ENTRY POINTS_^1_%ENT RIOSUB_'FREAD ENTRY_^1_%ENT WIOSUB_'FWRITE ENTRY_^1_%SPC 2_^1*_$EQUIVALENCES_^1_%EQU AMONI($F4)_"ADDRESS OF MONITOR_^1_%EQU ZERO($22)_#CELL CONTAINING ZERO_^1_%SPC 2_^1RIOSUB NUM 0_,FREAD ENTRY_^1_%LDA* RIOSUB_'PUT RETURN ADDRESS IN FWRITE SECTION_^1_%STA* WIOSUB_^1_%LDA =N$4800_%SET UP FREAD REQU€€EST CODE + D BIT_^1_%JMP* COMMON_'GO TO COMMON SECTION_^1_%SPC 2_^1WIOSUB NUM 0_,FWRITE ENTRY_^1_%LDA =N$4C00_%SET UP FWRITE REQUEST CODE + D BIT_^1COMMON STA* RQCODE_'STORE REQUEST CODE IN REQUEST SKELETON_^1_%STQ* SAVEQ_(SAVE Q-REGISTER_^1_%LDQ* (WIOSUB)_$GET LU_^1_%LDA- (ZERO),Q_^1_%STA* LU_^1_%RAO* WIOSUB_^1_%LDA* (WIOSUB)_$GET BUFFER ADDRESS_^1_%STA* BUF_^1_%RAO* WIOSUB_^1_€€%LDQ* (WIOSUB)_$GET NO. OF WORDS_^1_%LDA- (ZERO),Q_^1_%STA* NWORDS_^1_%RAO* WIOSUB_^1_%RTJ- (AMONI)_%MAKE I/O REQUEST_^1RQCODE NUM 0_,REQUEST CODE_^1_%NUM 0_,COMPLETION_^1THREAD NUM 0_,THREAD_^1LU_#NUM 0_,LU_^1NWORDS NUM 0_,NO. WORDS_^1BUF_"NUM 0_,BUFFER_^1HANG_!LDA* THREAD_'HANG ON THREAD_^1_%SAZ CKEROR_^1_%JMP* HANG_^1CKEROR LDA* LU_+PICK UP ERROR WORD_^1_%LDQ* SAVEQ_(REST€PORE Q-REGISTER_^1_%JMP* (WIOSUB)_$RETURN TO CALLER_^1SAVEQ NUM 0_^1_%END_]_^__PPHELPER CSY/ B09 P€1_%NAM HELPER_'DECK-ID B09 MSOS 4.1_-SUMMARY-079_^1*_$MISCELLANEOUS SUBROUTINES FOR LIBRARY BUILDER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%COM LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN_^1_%COM MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IO€€IDX,LENGTH,INUM,ICHR_^1_%COM IANY,IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60)_^1_%COM INDTBL(60),IPRINT(40),INPBUF(97),IOBUFF(96),NAMPTR(512)_^1_%COM IDENT(25),NAME(3),IVALS(33),ISHORT(6)_^1_%SPC 2_^1_%EXT HELP0_^1_%ENT HELPER_^1PAD_"NUM 0,0,0_^1MYTHRD NUM $FFFF_^1PAD1_!BZS PAD1(7)_^1MYLOOP LDA* MYTHRD_'THIS IS WHERE EXECUTION 'REALLY' BEGINS._^1_%SAZ HELPER_'IF G€€TFILE REQUEST COMPLETE_^1_%JMP* MYLOOP_'IF NOT_^1HELPER RTJ HELP0_(EXECUTE MAIN CONTROL SUBROUTINE_^1KILL_!RTJ- ($F4)_(EXECUTE AN EXIT REQUEST_^1_%NUM $0A00_^1_%EJT_]_^1*_$THE FOLLOWING SET OF SUBROUTINES ARE INCLUDED IN HELPER._^1*_'NAME_"FUNCTION_^1*_%GETREC_!GET AN INPUT RECORD_^1*_%PRINT_"PRINT A RECORD_^1*_%OUTBIN_!OUTPUT A BINARY RECORD_^1*_%DISKIO_!READ OR WRITE A RECORD O€€N MASS MEMORY._^1*_%INIT_#PERFORM NEEDED INITIALIZATION_^1*_%MOVE_#MOVE DATA FROM ONE PLACE TO ANOTHER (USUALLY FORMAT ST)_^1*_%BINDEC_!EXECUTE HELP1_^1*_%INCIDX_!EXECUTE HELP1_^1*_%GETCHR_!EXECUTE HELP2_^1*_%STOREC_!EXECUTE HELP2_^1*_%CLEAR_"EXECUTE HELP3_^1*_%UNICHK_!EXECUTE HELP3_^1*_%STODEK_!EXECUTE HELP4_^1*_%STODEF_!EXECUTE HELP5_^1*_%MAKLIB_!EXECUTE HELP8_^1*_%DEFINE_!EXECUT€€E HELP9_^1*_%GETITM_!EXECUTE HELP10_^1*_%HASH_#EXECUTE HELP11_^1*_%GETPGM_!EXECUTE HELP12_^1*_%GETBIN_!EXECUTE HELP13_^1*_%ERROR1_!NOTE ERROR AND KILL_^1*_%ERROR2_!NOTE ERROR AND OPTIONS, GET RESPONSE._^1*_%ERROR3_!NOTE ERROR AND OPTIONS, GET RESPONSE._^1*_%ERROR4_!NOTE ERROR AND KILL_^1*_%ERROR5_!NOTE ERROR AND KILL_^1*_%ERROR6_!NOTE ERROR AND KILL_^1*_%ERROR7_!NOTE ERROR AND KILL€€_^1*_%GNSCHR_!GET NEXT NON-SPACE CHARACTER FROM INPUT BUFFER_^1*_%COMMNT_!OUTPUT MESSAGE TO TTY, INPUT OPERATORS RESPONSE._^1*_%RESTAR_!PRINT RESTART MSG FOR HELP0, GET RESPONSE._^1*_%KILJOB_!TERMINATE EXECUTION_^1*_%WEF_$WRITE END FILE_^1_%EJT_]_^1_%ENT KILJOB_'KILLS RUN_^1KILJOB NUM 0_^1_%JMP* KILL_)KILL JOB_^1_%EJT_]_^1*_$THIS SECTION EXECUTES THE APPROPRIATE HELPN ROUTINE IN €€RESPONSE_^1*_$TO A CALL USING ANOTHER NAME_^1_%SPC 2_^1_%EXT HELP1,HELP2,HELP3,HELP4,HELP5,HELP8,HELP9,HELP10_^1_%EXT HELP11,HELP12,HELP13_^1_%ENT BINDEC,INCIDX,GETCHR,STOREC,CLEAR,STODEK_^1_%ENT UNICHK,MAKLIB,DEFINE,GETITM,HASH,GETPGM,GETBIN_^1_%ENT STODEF_^1_%SPC 2_^1BINDEC NUM 0_^1_%ENA 2_^1_%STA ISELEC_^1_%RTJ HELP1_^1_%JMP* (BINDEC)_^1_%SPC 1_^1INCIDX NUM 0_^1_%EN€€A 3_^1_%STA ISELEC_^1_%RTJ HELP1_^1_%JMP* (INCIDX)_^1_%SPC 1_^1GETCHR NUM 0_^1_%ENA 1_^1_%STA ISELEC_^1_%RTJ HELP2_(EXECUTE HELP2_^1_%JMP* (GETCHR)_$RETURN_^1*_]_^1STOREC NUM 0_^1_%ENA 2_^1_%STA ISELEC_^1_%RTJ HELP2_^1_%JMP* (STOREC)_^1*_]_^1CLEAR NUM_!0_^1_%ENA 2_^1_%STA ISELEC_^1_%RTJ HELP3_^1_%JMP* (CLEAR)_^1*_]_^1*_]_^1UNICHK NUM 0_^1_%ENA 3_^1_%STA ISELEC_^1_€€%RTJ HELP3_^1_%JMP* (UNICHK)_^1STODEK NUM 0_^1_%RTJ HELP4_^1_%JMP* (STODEK)_^1_%SPC 1_^1STODEF NUM 0_^1_%RTJ HELP5_^1_%JMP* (STODEF)_^1_%SPC 1_^1MAKLIB NUM 0_^1_%RTJ HELP8_^1_%JMP* (MAKLIB)_^1_%SPC 1_^1DEFINE NUM 0_^1_%RTJ HELP9_^1_%JMP* (DEFINE)_^1_%SPC 1_^1GETITM NUM 0_^1_%RTJ HELP10_^1_%JMP* (GETITM)_^1_%SPC 1_^1HASH_!NUM 0_^1_%RTJ HELP11_^1_%JMP* (HASH)_^1_%SP€€C 1_^1GETPGM NUM 0_^1_%RTJ HELP12_^1_%JMP* (GETPGM)_^1_%SPC 1_^1GETBIN NUM 0_^1_%RTJ HELP13_^1_%JMP* (GETBIN)_^1_%EJT_]_^1*_$PRINT RESTART MSG FOR HELP0_^1_%ENT RESTAR_^1RESTAR NUM 0_,ENTRY_^1_%RTJ COMMNT_(PRINT MSG ON TTY_^1_%ADC MESRES_^1_%ADC MSLEN_^1_%JMP* (RESTAR)_^1_%SPC 2_^1MESRES NUM $0D00_^1_%ALF Z,LIBRARY BUILD COMPLETEZ_^1_%NUM $0D00_^1_%ALF Q,TYPE *Z TO €€TERMINATE ORQ_^1_%NUM $0D00_^1_%ALF Z,TYPE C TO CONTINUE WITH CURRENT SKELETON AND/OR_^1_%NUM $0D00_^1_%ALF Z,OUTPUT LIBRARY LU'SZ_^1MSLEN ADC MSLEN-MESRES_^1_%EJT_]_^1*_$NOTE ERROR FOUND BY HELP4--STODEK_^1_%ENT ERROR2_^1ERROR2 NUM 0_,ENTRY_^1_%RTJ COMMNT_'PRINT MSG ON TTY_^1_%ADC MES2_^1_%ADC LEN2_^1_%JMP* (ERROR2)_$RETURN TO CALLER_^1_%SPC 1_^1MES2_!NUM $0D00_^1_%AL€€F 17,NAM RECORD NOT 1ST RECORD OF DECK._^1_%NUM $0D00_^1_%ALF 17,TYPE 1, CR TO TERMINATE EXECUTION._^1_%NUM $0D00_^1_%ALF 28,TYPE 2, CR TO PROCEED TO SUBSEQUENT LIBRARY OR SKELETON._^1_%NUM $0D00_^1_%ALF 24,TYPE 3, CR TO CONTINUE ON WITH CURRENT LIBRARY._^1_%NUM $0D00_^1LEN2_!NUM 91_^1_%EJT_]_^1*_$NOTE ERROR FOUND BY HELP4--STODEK_^1_%ENT ERROR3_^1ERROR3 NUM 0_^1_%RTJ C€€OMMNT_'PRINT MSG ON TTY_^1_%ADC MES3_^1_%ADC LEN3_^1_%JMP* (ERROR3)_^1_%SPC 1_^1MES3_!NUM $0D00_^1_%ALF 27,XFR RECORD MISSING FOR LAST PGM LISTED. PGM DELETED._^1_%NUM $0D00_^1_%ALF 17,TYPE 1, CR TO TERMINATE EXECUTION._^1_%NUM $0D00_^1_%ALF 28,TYPE 2, CR TO PROCEED TO SUBSEQUENT LIBRARY OR SKELETON._^1_%NUM $0D00_^1_%ALF 24,TYPE 3, CR TO CONTINUE ON WITH CURRENT LIBRAR€€Y_^1_%NUM $0D00_^1LEN3_!NUM 101_^1_%EJT_]_^1*_$NOTE ERROR FOUND BY HELP10--GETITM_^1_%ENT ERROR4_^1ERROR4 NUM 0_^1_%RTJ CLEAR_^1_%RTJ MOVE_^1_%ADC MES4A_^1_%ADC N29_^1_%ADC IPRINT+1_^1_%RTJ PRINT_^1_%JMP KILL_^1_%SPC 1_^1MES4A ADC MES4_^1MES4_!ALF 28,TOO MANY BINARY DECKS LOADED. CHANGE LIMIT AND RECOMPIL_^1_%ALF 1,E._^1N29_"NUM 29_^1_%EJT_]_^1*_$NOTE ERROR FOUND €€BY HELP12--GETPGM_^1_%ENT ERROR5_^1ERROR5 NUM 0_^1_%RTJ CLEAR_^1_%RTJ MOVE_^1_%ADC MES5A_^1_%ADC N16_^1_%ADC IPRINT+1_^1_%RTJ PRINT_^1_%JMP KILL_^1_%SPC 1_^1MES5A ADC MES5_^1MES5_!ALF 16,FATAL PROGRAM ERROR. RUN KILLED._^1N16_"NUM 16_^1_%EJT_]_^1_%EJT_]_^1*_$DISKIO IS THE DISK INPUT/OUTPUT ROUTINE FOR HELPER._^1*_$THE CALL SEQUENCE IS CALL DISKIO (CODE,ADR,IDX)_^1*_]_€€^1*_%WHERE CODE MAY HAVE THE FOLLOWING VALUES. 1, 2._^1*_]_^1*_$IF CODE=1, FBCORE READS 96 WORDS FROM SCRATCH MASS MEMORY_^1*_$USING IDX AS THE MM ADDRESS AND ADR AS A BUFFER ADDRESS._^1*_]_^1*_$IF CODE=2, FBCORE WRITES 96 WORDS ONTO SCRATCH MASS MEMORY_^1*_$USING IDX AS THE MM ADDRESS AND ADR AS A BUFFER ADDRESS._^1*_]_^1*_$IF CODE NOT 1, 2 IS ASSUMED._^1*_]_^1*_]_^1_%ENT DISKIO_€€^1*_]_^1DISKIO NUM 0_^1_%STQ* QREG_^1_%SPC 2_^1_%RTJ* PKUP_)GET FIRST PARAM ADDRESS_^1_%STA* CODE_)STORE IN CODE_^1_%SPC 2_^1_%RTJ* PKUP_)GET ADR ADDRESS_^1_%STA* ADR_*STORE IN ADR_^1_%SPC 2_^1_%RTJ* PKUP_)GET IDX ADDRESS_^1_%TRA Q_^1_%LDA- (ZERO),Q_^1_%STA* IDXX_)STORE IN IDXX_^1_%SPC 2_^1_%LDA* (CODE)_'LOAD CODE_^1_%INA -1_,SUBTRACT 1_^1_%SAN CONT1_(SKIP TO CONT1 IF NOT 0€€ (CODE =2)_^1_%SPC 2_^1_%LDA =N$4801_%LOAD A WITH READ REQUEST CODE_^1_%JMP* MMIO_)JUMP TO MMIO_^1CONT1 LDA =N$4C01_%LOAD A WITH WRITE REQUEST CODE_^1_%EJT_]_^1MMIO_!STA* REQEST_'STORE REQUEST WORD_^1_%RTJ- ($F4)_(EXECUTE I/O REQUEST_^1REQEST NUM 0_,I/O REQUEST FOR DISK READ OR WRITE_^1_%NUM 0_,COMPL ADR_^1THREAD NUM 0_,THREAD_^1_%NUM $8B3_)LOG UNIT AND MODE_^1_%NUM 96_+€€LENGTH OF I/O BUFFER_^1ADR_"NUM 0_,START OF I/O_^1_%NUM 0_,MOST SIG BITS OF ADR_^1IDXX_!NUM 0_,LEAST SIG BITS OF ADR_^1_%SPC 2_^1CHKTHD LDA* THREAD_'CHECK THREAD UNTIL NOT BUSY_^1_%SAZ 1_^1_%JMP* CHKTHD_^1_%LDQ* QREG_^1_%JMP* (DISKIO)_^1_%EQU ZERO($22)_^1_%SPC 2_^1*_8PKUP PICKS UP THE ADDRESS OF A PARAMETER FOR_^1*_8DISKIO AND PASSES IT BACK THROUGH THE A-REG._^1PKUP_!NUM 0€€_^1_%LDA* (DISKIO)_^1OK_#RAO* DISKIO_'BUMP RETURN ADDRESS_^1_%JMP* (PKUP)_^1CODE_!NUM 0_^1_%EJT_]_^1_%ENT MOVE_^1* MOVE DATA FROM A FORMAT STATEMENT TO A PRINT BUFFER_^1* CALLING SEQUENCE FROM FORTRAN_^1*_]_^1*_4100 FORMAT(XXHABCD...._^1*_8ASSIGN 100 TO IADR_^1*_8IADR = IADR + 2_^1*_8CALL MOVE(IADR,NUM,PRNBUF)_^1*_*IADR = ADDRESS OF FORMAT STATEMENT_^1*_*NUM = NUMBER OF WORDS TO€€ MOVE_^1*_*PRNBUF = PRINT BUFFER_^1MOVE_!NUM 0_^1_%STQ* QREG_^1_%RTJ* PARA_)GET ADDRESS OF WORD WHICH CONTAINS ADDRESS OF_^1*_8THE FORMAT STATEMENT_^1_%STA* ADFMT_(SAVE ADDRESS OF FORMAT STATEMENT_^1_%RTJ* PARA_)GET ADDRESS OF NUMBER OF WORDS TO MOVE_^1_%TCA A_^1_%STA* NUM_*SAVE COMPLEMENT OF LENGTH_^1_%RTJ* PARA_)GET ADDRESS OF PRINT BUFFER_^1_%STQ- I_,SAVE ADDRESS_^1_%ENQ 0_^1€€_%STQ* IDX_*INITIALIZE INDEX_^1LOOP_!LDA* (ADFMT)_%GET WORD FROM FORMAT STATEMENT_^1_%RAO* ADFMT_(BUMP ADDRESS_^1_%LDQ* IDX_^1_%STA- ($22),B_%STORE WORD INTO PRINT BUFFER_^1_%INQ 1_^1_%STQ* IDX_*BUMP INDEX_^1_%ADQ* NUM_^1_%SQZ DONE_^1_%LDQ* IDX_*PICK UP INDEX_^1_%JMP* LOOP_)GET AND STORE NEXT WORD_^1DONE_!LDQ* QREG_^1_%JMP* (MOVE)_^1PARA_!0_"0_^1_%LDA* (MOVE)_'PICK UP ADDRESS OF €€PARAMETER_^1OKGO_!TRA Q_,RETURN ADDRESS IN Q_^1_%RAO* MOVE_^1_%LDA- ($22),Q_%PICK UP CONTENTS OF ADDRESS_^1_%JMP* (PARA)_^1ADFMT NUM 0_,ADDRESS OF FORMAT STATEMENT_^1NUM_"NUM 0_,COMPLEMENT OF NUMBER OF WORDS TO TRANSFER_^1IDX_"NUM 0_,INDEX_^1_%EJT_]_^1*_$GET A RECORD_^1_%ENT GETREC_^1GETREC NUM 0_^1_%STQ* QREG_^1_%RTJ- ($F4)_^1_%NUM $4801_(FREAD, CP=D=1, RP=X=0_^1_%NUM 0_,€€COMP ADR_^1THRED1 NUM 0_^1LUINP NUM $18F9_(LOGICAL UNIT AND MODE (WILL BE RESET)_^1_%NUM 97_+LENGTH OF BUFFER_^1START ADC INPBUF_'START OF BUFFER_^1_%SPC 1_^1CHECK1 LDA* THRED1_'CHECK THREAD TILL FREE_^1_%SAZ 1_^1_%JMP* CHECK1_^1_%SPC 1_^1_%LDA+ INPBUF+96_#SET LENGTH TO NUMBER OF WORDS INPUT._^1_%SUB* START_^1_%STA+ LENGTH_^1*_]_^1*_+CHECK FOR END-OF-FILE OR ERROR_^1_%LDQ*€€ LUINP_(FETCH V-FIELD_^1_%SQM CHECK4_'IF TRUE_^1_%JMP* OOPSY_(IF FALSE_^1*_]_^1*_$EITHER EOF OR ERROR HAS OCCURRED - DEFAULT A *END RECORD_^1CHECK4 ENQ 96_^1_%LDA =N$2020_(FIRST BLANK THE BUFFER_^1SLOOP INQ -1_^1_%SQZ MORTST_^1STAINP STA INPBUF,Q_^1_%JMP* SLOOP_^1*_]_^1*_$SET *END CHARACTERS_^1MORTST LDA =N$2A45_%*E_^1_%STA* (STAINP+1)_^1_%LDA =N$4E44_%ND_^1_%STA INPBUF+1€€_^1_$ENA 40_^1_%STA LENGTH_'SET DEFAULT RECORD LENGTH_^1OOPSY BSS OOPSY(0)_^1_%SPC 1_^1_%LDQ* QREG_^1_%JMP* (GETREC)_$RETURN_^1_%EJT_]_^1_%ENT PRINT_^1*_$PRINT A RECORD ON THE PRINT DEVICE_^1PRINT NUM 0_^1_%STQ* QREG_^1_%RTJ- ($F4)_^1_%NUM $4C01_(FWRITE, CP=D=1, X=RP=0_^1_%NUM 0_,COMP ADR_^1THRED2 NUM 0_,THREAD_^1_%NUM $18FB_(LOGICAL UNIT--STANDARD PRINT_^1_%NUM 40_+LE€€NGTH OF BUFFER_^1_%ADC IPRINT_'START OF BUFFER_^1_%SPC 1_^1CHECK2 LDA* THRED2_'CHECK THREAD TILL FREE_^1_%SAZ 1_^1_%JMP* CHECK2_^1_%SPC_]_^1_%LDQ* QREG_^1_%JMP* (PRINT)_%RETURN_^1*_]_^1QREG_!NUM 0_^1_%EJT_]_^1*_$OUTPUT A BINARY RECORD_^1_%ENT OUTBIN_^1OUTBIN NUM 0_^1_%STQ* QREG_^1_%LDA* ITYPE_(CHECK ITYPE. IF IT IS 0, CHECK THE OUTPUT_^1_%SAN DOIT_)RECORD TO DETERMINE IF IT€€ IS AN ASCII RECORD._^1_%LDQ* (ADDRES)_$IF ITYPE=0 AND THE RECORD IS ASCII, OUTPUT IT_^1_%QRS 8_,IN ASCII._^1_%INQ -$2A_^1_%SQN DOIT_)GO TO DOIT IF NOT ASCII_^1_%LDA* LUSAVE_^1_%ADD =N$1000_%ADD THE ASCII BIT_^1_%STA* LUOUTB_^1_%SPC 2_^1DOIT_!LDA LENGTH_'PUT LENGTH OF BUFFER IN BLEN_^1_%STA* BLEN_^1_%RTJ- ($F4)_(OUTPUT VIA REQUEST TO MONITOR._^1REQUST NUM $4C01_^1_%NUM 0_,C€€OMP ADR_^1THRED3 NUM 0_^1LUOUTB NUM 0_^1BLEN_!NUM 0_^1ADDRES ADC INPBUF_^1_%SPC_]_^1CHECK3 LDA* THRED3_'CHECK THREAD TILL FREE_^1_%SAZ 1_^1_%JMP* CHECK3_^1_%SPC 1_^1_%LDA* LUSAVE_'ASSURE LUOUTB IS READY FOR NEXT USE_^1_%STA* LUOUTB_^1_%LDQ* QREG_^1_%JMP* (OUTBIN)_$RETURN_^1_%EJT_]_^1*_$INIT DOES THE FOLLOWING_^1*_$1. INITIALIZES ALL LOGICAL UNIT WORDS FOR I/O REQUESTS_^1*_$2€€. SETS ITYPE=0 IF THE BINARY OUTPUT UNIT IS A CARD DEVICE,_^1*_)SETS ITYPE NOT 0 IF IT IS NOT A CARD DEVICE_^1_%SPC 2_^1_%EXT HELP14_^1_%ENT INIT_^1INIT_!NUM 0_^1_%STQ* QREG_^1_%LDA LUIN_)SET LUINP TO LUIN_^1_%STA* LUINP_^1_%LDA LUBOUT_'SET LUOUTB TO LUBOUT_^1_%STA* LUOUTB_^1_%STA* LUWEF_(ALSO STORE IN LUWEF_^1_%STA* LUSAVE_'AND LUSAVE_^1_%SPC 2_^1_%STA* LOGU_)STORE LUBOUT €€IN LOGU AND DO STATUS REQUEST_^1_%SAZ NOSTAT_'LOGICAL UNIT ZERO, DO NOT STATUS_^1_%RTJ- ($F4)_^1_%NUM $600_^1LOGU_!NUM 0_^1_%ADC REQUST_^1_%SPC 1_^1_%LDA =N$3800_%LOAD EQUIPMENT CLASS CODE MASK IN A_^1_%LAQ A_,LP OF A AND Q INTO A_^1_%SUB =N$1800_%CHECK IF CARD DEVICE_^1_%STA* ITYPE_(STORE RESULT IN ITYPE (WILL BE SET AS NEEDED)_^1NOSTAT LDQ* QREG_^1_%JMP* (INIT)_'RETURN_^1€€_%SPC 2_^1ITYPE NUM 0_^1LUSAVE NUM 0_^1_%EJT_]_^1*_$WEF WRITES END OF FILE MARK ON LUOUTB_^1_%ENT WEF_^1WEF_"NUM 0_^1_%STQ* QREG_^1_%RTJ- ($F4)_(WRITE END FILE VIA MONITOR_^1_%NUM $5C00_(REQUEST CODE FOR TAPE MOTION_^1_%NUM 0_,COMP ADDR_^1THRWEF NUM 0_,THREAD_^1LUWEF NUM 0_^1_%NUM $2000_^1CHKWEF LDA* THRWEF_'CHECK THREAD TILL FREE_^1_%SAZ 1_^1_%JMP* CHKWEF_^1_%LDQ* QRE€€G_^1_%JMP* (WEF)_^1_%EJT_]_^1*_]_^1*_*THIS SUBROUTINE PRINTS A MESSAGE ON THE STANDARD COMMENT_^1*_*DEVICE AND INPUTS THE USERS RESPONSE. THE RESPONSE MAY BE_^1*_*UP TO 10 CHARACTERS._^1*_]_^1_%ENT COMMNT_^1COMMNT NUM 0_,ENTRY_^1_%STQ* QREG_^1_%RTJ* GETIT_(GET FIRST PARAM ADDRESS_^1_%STA* RECADR_'STORE IN RECADR_^1_%RTJ* GETIT_(GET NEXT PARAM ADDRESS_^1_%TRA Q_,GET THE CONTENTS€€_^1_%LDA- (ZERO),Q_^1_%STA* COUNT_(STORE IN COUNT_^1REPEAT RTJ- ($F4)_^1_%NUM $4C01_(FWRITE, CP=D=1, X=RP=0_^1_%NUM 0_,COMPLETION ADDRESS_^1THRD_!NUM 0_,THREAD_^1_%NUM $18FC_(ASCII--INDIR LOG UNIT NO. IN $FC_^1COUNT NUM 0_,LENGTH OF PRINT BUFFER_^1RECADR NUM 0_,ADDRESS OF PRINT BUFFER_^1*_]_^1CHKTH3 LDA* THRD_)CHECK THREAD TILL NOT BUSY_^1_%SAZ 1_^1_%JMP* CHKTH3_^1_%RTJ- ($€€F4)_^1_%NUM $4801_(FREAD, CP=D=1, X=RP=0_^1_%NUM 0_,COMPLETION ADDRESS_^1THRED4 NUM 0_,THREAD_^1_%NUM $18FD_(ASCII--LOG UNIT NO. IN ($FD)_^1_%NUM 6_,NUMBER OF WORDS_^1_%ADC ISHORT_^1*_]_^1CHKTH4 LDA* THRED4_'CHECK THREAD TILL NOT BUSY_^1_%SAZ 1_^1_%JMP* CHKTH4_^1_%LDQ* THRED4+1_^1_%SQP 1_^1_%JMP* REPEAT_'REPEAT REQUEST_^1_%LDQ* QREG_^1_%JMP* (COMMNT)_^1*_]_^1*_8GETIT PICKS€€ UP THE ADDRESS OF A PARAMETER FOR_^1*_8COMMNT AND PASSES IT BACK THROUGH THE A-REG_^1GETIT NUM 0_^1_%LDA* (COMMNT)_^1GETON RAO* COMMNT_'BUMP RETURN ADDRESS_^1_%JMP* (GETIT)_^1_%EJT_]_^1*_$GET NEXT NON-SPACE CHARACTER FROM INPUT BUFFER_^1_%ENT GNSCHR_^1GNSCHR NUM 0_^1OVER_!RTJ GETCHR_^1_%LDA ICHR_^1_%INA -$20_^1_%SAN 1_^1_%JMP* OVER_^1_%JMP* (GNSCHR)_$RETURN WHEN NOT A SPA€€CE CODE_^1_%EJT_]_^1*_$GET NEXT INPUT RECORD, BUMP RECORD NUMBER (IRECNO) AND PRINT_^1*_$RECORD_^1_%ENT NXTREC_^1NXTREC NUM 0_^1_%RTJ GETREC_^1_%RTJ CLEAR_(CLEAR PRINT BUFFER_^1_%RAO IRECNO_'BUMP RECORD NO._^1_%LDA IRECNO_^1_%STA INUM_)STORE IT IN INUM_^1_%ENA 2_^1_%STA PRNIDX_'SET PRINT BUFFER INDEX_^1_%RTJ BINDEC_'PUT ASCII RECORD NO. IN PRINT BUFFER_^1*_]_^1_%ENQ 36_€Τ^1TRNREC INQ -1_+TRANSFER INPUT RECORD TO PRINT BUFFER_^1_%SQM ENDTRN_^1_%LDA INPBUF,Q_^1_%STA IPRINT+4,Q_^1_%JMP* TRNREC_^1*_]_^1ENDTRN RTJ PRINT_(PRINT RECORD_^1_%JMP* (NXTREC)_$RETURN_^1_%END HELPER_^__ΤPHELP14 CSY/ B22 P€1_%NAM HELP14_'DECK-ID B22 MSOS 4.1_-SUMMARY-079_^1*_$SET UP THE VIRTUAL MEMORY SPACE LIMIT_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1_%COM DUM(11),LIMSPC_^1_%ENT HELP14_^1HELP14 NUM 0_^1_%RTJ* NEXT_^1NEXT_!NUM 0_^1_%LDA- $F6_*PICKUP HIGHEST UNPROT€ΜECTED + 1_^1_%SUB =N967_(SUBTRACT LENGTH OF PROGRAM COMMON + 10_^1_%SUB* NEXT_)SUBTRACT ADDRESS IN NEXT_^1_%TCA A_,COMPLEMENT AND STORE IN LIMSPC_^1_%STA LIMSPC_^1_%JMP* (HELP14)_^1_%END_]_^1 MON_]_^__ΜPLJA2B CSY/ FTN B05 P€1_$FUNCTION LJA2B(FWA,IBYTE,DELIM)_^1_#1_2/DECK-ID B05 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_$INTEGER FWA(2),DELIM_^1C--- LEFT JUSTIFIED ASCII TO BINARY CONVERTER;_^1C_'SINGLE PRECISION POSITIVE INTEGER RETURNED IF NO ERRORS;_^1C_'MINUS€€ ONE ERROR RETURN FLAG_^1C_]_^1C_#DEFINITIONS%_^1C_(FWA - FIRST WORD ADDRESS OF BUFFER CONTAINING ASCII NUMERIC_^1C_.STRING_^1C_(IBYTE - STARTING CHARACTER POSITION RELATIVE TO 'FWA'_^1C_0BUMPED ONE FOR EACH CHARACTER_^1C_(DELIM - SEARCH DELIMITTER; IF NOT A BLANK THEN LEADING,_^1C_0EMBEDDED, AND TRAILING BLANKS ARE IGNORED. IF A_^1C_0CARRIAGE RETURN($FF) IS DETECTED, OVERRIDE 'D€€ELIM'._^1C_]_^1C--- CLEAR ACCUMULATION_^1_$I = 0_^1C_]_^1C--- FETCH NEXT CHARACTER_^1_"1 K = NEXTCH(FWA,IBYTE)_^1_$IF(K.EQ.DELIM) GO TO 100_^1_$IF(K.EQ.$20) GO TO 1_^1_$IF(K.NE.$FF) GO TO 5_^1C_]_^1C--- SET SIGN BIT OF CHAR. INDEX TO DESIGNATED CAR.RET._^1_$IBYTE = IBYTE + $8000_^1_$GO TO 100_^1C_]_^1C--- CHECK FOR LEGAL DIGIT_^1_"5 CONTINUE_^1_$K = K - $30_^1_$IF(K.LT.0.OR.K.G€<T.9) GO TO 99_^1C_]_^1C--- CLEAR OVERFLOW AND ADD THIS CHAR. TO ACCUMULATION_^1_$ASSEM $01A0,$0B00_^1_$ASSEM $0A0A,$2800,I,$8800,K_^1C--- CHECK FOR OVERFLOW_^1_$ASSEM $01B2,$1800,99_^1_$ASSEM $0142,$1800,99_^1_$ASSEM $6800,I_^1_$GO TO 1_^1C_]_^1C--- ERROR_^1_!99 I = - 1_^1 100 LJA2B = I_^1_$RETURN_^1_$END_]_^__<PCONVRS CSY/ FTN B03 P€1_$INTEGER FUNCTION CONVRS(IDUMMY)_^1_#1_2/DECK-ID B03 MSOS 4.1_-SUMMARY-079_^1C_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C---_$LIBRARY BUILDER CONVERSATIONAL OVERLAY_^1C_]_^1C_]_^1C_]_^1_$COMMON//LUIN(2)_",LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 M€€MADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),MUFBUF(97),IOBUFF(96),NAMPTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1_$INTEGER SKELLU,PRNIDX_^1_$INTEGER STDCMO,STDCMI_^1_$INTEGER RIOSUB,WIOSUB_^1_$INTEGER FBUF(41)_^1_$INTEGER MESBUF(40),TEMP(8),CONTRL,PRINTU,CC(7),INPB€€UF(41),ME(3)_^1_#1 ,ROW(3),COL(3),TEE,HEE,STDCMI,STDCMO_^1_$EXTERNAL LOG1A_^1_$EQUIVALENCE (INPBUF,FBUF(2))_^1C--- CLASS CODE MASK TABLE - ONE WORD PER QUESTION_^1C_]_^1C_]_^1C_!BITS 0 TO 5 - FOR EACH LEGAL CLASS CODE RELATIVE TO THE QUESTION,_^1C_2ONE OF THESE BITS IS SET: BIT 0 - CC 1_^1C_MBIT 1 - CC 2 , ETC._^1_$DATA CC/$2D,$2D,$D,$D,0,$D,$2D/_^1_$DATA IER/0/_^1_$DATA FBUF(1)/€€$2020/_^1_$DATA STDCMO/$18FC/_^1_$DATA STDCMI/$18FD/_^1_$DATA ME/2,3,4/_^1_$DATA JUSTCR/$20/_^1C--- ROW INDICIES FOR DEFS,INSTALL, AND NEWLIB LU'S_^1_$DATA ROW/1,1,2/_^1C--- COLUMN INDICIES_^1_$DATA COL/1,3,1/_^1C--- CLEAR THREAD WORD OF MONITOR REQUEST BUFFER_^1_$DATA TEMP(3)/0/_^1_$DATA ISIZE/40/_^1C_]_^1C---_!CLEAR ALL MY COMMON_^1C_]_^1_$ASSEM $C000,+ISHORT,$0906,$9000,+LUIN€€,$6800,I_^1_$DO 5 J = 1,I_^1_"5 LUIN(J) = 0_^1C_]_^1C--- DEFAULT CONTROL LU TO COMMENT INPUT_^1_$CONTRL = STDCMI_^1_$IVALS(3,2) = CONTRL_^1C--- DEFAULT CONTROL MESSAGE OUTPUT LU TO COMMENT OUTPUT_^1_$PRINTU = STDCMO_^1_$IVALS(3,3) = PRINTU_^1C_]_^1C--- REQUEST CONTROL STATEMENT INPUT LU._^1_!40 ASSIGN 100 TO IGOTO_^1_$MESSAG = 1_^1_$GO TO 9000_^1C_]_^1C---_"READ OPERATOR RESPO€€NSE_^1 100 CONTINUE_^1_$ASSIGN 110 TO JGOTO_^1_$GO TO 9100_^1 110 CONTINUE_^1C--- DECODE RESPONSE_^1_$LU= LJA2B(INPBUF,NC,JUSTCR)_^1_$IF(LU.GT.0) GO TO 120_^1_$IF(LU.EQ.0) GO TO 140_^1_$IF(NC.LT.0) GO TO 140_^1C--- CONVERSION ERROR OR ZERO_^1_$ASSIGN 40 TO IGOTO_^1 115 MESSAG = 8_^1_$IER = 1_^1_$GO TO 9000_^1C_]_^1C--- CHECK CLASS CODE_^1 120 CONTINUE_^1_$ASSIGN 130 TO KGOTO€€_^1_$GO TO 9200_^1C_]_^1C--- GOOD CLASS CODE# SAVE LOGICAL UNIT DESIGNATOR_^1 130 CONTINUE_^1_$IVALS(3,2) = LU + $1000_^1C_]_^1C_]_^1C--- IF CONTROL STATEMENT INPUT NOT COMMENT INPUT,_^1C_#SET PRINT OUTPUT TO STD.LIST DEVICE LU._^1_$ASSEM $C0FD,$9800,LU,$0112,$1800,140,$C000,$18FB,$6800,PRINTU_^1_$CONTRL = LU + $1000_^1C_]_^1C--- SAVE PRINT LU_^1 140 CONTINUE_^1_$IVALS(3,3) = €€PRINTU_^1_$DO 450 I = 1,3_^1C--- REQUEST DEFINITIONS,INSTALL,AND NEWLIB LU'S._^1 200 CONTINUE_^1_$ASSIGN 210 TO IGOTO_^1_$MESSAG = ME(I)_^1_$GO TO 9000_^1C_]_^1C--- READ RESPONSE_^1 210 CONTINUE_^1_$ASSIGN 220 TO JGOTO_^1_$GO TO 9100_^1C_]_^1C--- DECODE RESPONSE_^1 220 CONTINUE_^1_$LU = LJA2B(INPBUF,NC,JUSTCR)_^1_$IF(LU.GT.0) GO TO 230_^1_$IF(LU.EQ.0) GO TO 250_^1C_]_^1C---€€ CONVERSION ERROR_^1_$ASSIGN 200 TO IGOTO_^1_$GO TO 115_^1C_]_^1C--- CHECK CLASS CODE_^1 230 ASSIGN 250 TO KGOTO_^1_$GO TO 9200_^1C_]_^1C--- PICK UP INDICIES FOR THIS QUESTION_^1 250 TEE = ROW(I)_^1_$HEE = COL(I)_^1_$IVALS(TEE,HEE) = LU_^1 450 CONTINUE_^1C_]_^1 500 CONTINUE_^1_$GO TO 600_^1C_]_^1C--- READ RESPONSE_^1 510 CONTINUE_^1_$ASSIGN 520 TO JGOTO_^1_$GO TO 9100_^1C_€€]_^1C--- BLANK OR CAR.RET. MEANS NO.- ALL OTHER SYMBOLS MEAN YES._^1 520 CONTINUE_^1_$I = 0_^1_$IF(INPBUF.NE.$2020) I = 1_^1_$IVALS(2,3) = I_^1C_]_^1C--- REQUEST UP TO 9 LIBRARY LU'S._^1 600 CONTINUE_^1_$DO 660 I = 1,9_^1 610 CONTINUE_^1_$MESSAG = 6_^1_$LENGTH = MESSY(6,MESBUF)_^1C_]_^1C--- INSERT LIBRARY NUMBER INTO MESSAGE_^1_$MESBUF(3) = MESBUF(3) + I_^1_$ASSIGN 620 TO I€€GOTO_^1_$GO TO 9050_^1C_]_^1C--- READ RESPONSE_^1 620 ASSIGN 630 TO JGOTO_^1_$GO TO 9100_^1C_]_^1C--- DECODE RESPONSE_^1 630 CONTINUE_^1_$LU = LJA2B(INPBUF,NC,JUSTCR)_^1_$IF(LU.GT.0) GO TO 640_^1_$IF(LU.EQ.0) GO TO 665_^1C_]_^1C--- CONVERSION ERROR_^1_$ASSIGN 610 TO IGOTO_^1_$IER = 1_^1_$GO TO 115_^1C_]_^1C--- CHECK CLASS CODE_^1 640 CONTINUE_^1_$ASSIGN 645 TO KGOTO_^1_$GO T€€O 9200_^1C_]_^1C--- SAVE LU DESIGNATOR_^1 645 CONTINUE_^1_$IVALS(I+2,1) = LU_^1C_]_^1C--- END OF LOOP_^1 660 CONTINUE_^1_$GO TO 670_^1C_]_^1C--- SET LU SLOT ZERO_^1 665 CONTINUE_^1_$IVALS(I+2,1) = 0_^1C_]_^1C--- REQUEST SKELETON LU_^1 670 CONTINUE_^1_$ASSIGN 700 TO IGOTO_^1_$MESSAG = 7_^1_$GO TO 9000_^1C_]_^1C--- READ RESPONSE_^1 700 CONTINUE_^1_$ASSIGN 710 TO JGOTO_^1_$G€€O TO 9100_^1C_]_^1C--- DECODE RESPONSE_^1 710 CONTINUE_^1_$LU = LJA2B(INPBUF,NC,JUSTCR)_^1_$IF(LU.GT.0) GO TO 730_^1_$IF(LU.EQ.0) GO TO 740_^1C_]_^1C--- CONVERSION ERROR_^1_$ASSIGN 670 TO IGOTO_^1_$GO TO 115_^1C_]_^1C--- CHECK CLASS CODE_^1 730 ASSIGN 740 TO KGOTO_^1_$GO TO 9200_^1C_]_^1C_]_^1C--- SAVE SKEL. LU_^1 740 CONTINUE_^1_$IVALS(1,2) = LU_^1C_]_^1C--- RETURN TO CALL€€ING PROGRAM- NO ERRORS_^1C_]_^1 8000 CONTINUE_^1_$CONVRS = 0_^1_$RETURN_^1C_]_^1C--- RETURN WITH FATAL ERROR_^1 8100 CONVRS = -1_^1_$RETURN_^1C_]_^1C--- RETURN AND TERMINATE_^1 8200 CONVRS = -2_^1_$RETURN_^1C_]_^1C--- PSEUDO-SUBROUTINE: MESSAG CONTAINS MESSAGE NUMBER_^1C_8IGOTO CONTAINS RETURN ADDRESS_^1C_]_^1 9000 CONTINUE_^1_$LENGTH = MESSY(MESSAG,MESBUF)_^1C_]_^1C--- CHECK €€FOR ERROR_^1_$IF(LENGTH.LE.0) GO TO 8100_^1 9050 CONTINUE_^1C_]_^1C_#PRINT MESSAGE (FWRITE)_^1C_#IF ERROR GO TO 8100_^1_$IF(WIOSUB(PRINTU,MESBUF,LENGTH) .LT. 0) GO TO 8100_^1C_]_^1C--- SEE IF THIS WAS AN ERROR MESSAGE_^1_$IF(IER.EQ.0) GO TO IGOTO_^1_$IER = 0_^1C--- YES; EXIT IF CONTROL LU NOT STD.COMMENT INPUT_^1_$IF(CONTRL.NE.STDCMI) GO TO 8100_^1_$GO TO IGOTO_^1C_]_^1C--- PSEU€€DO SUBROUTINE : READ CONTROL STATEMENT DEVICE_^1C_]_^1 9100 CONTINUE_^1C_]_^1C---_!BACKGROUND INPUT BUFFER WITH BLANKS_^1_$DO 9102 L = 1,40_^1 9102 INPBUF(L) = $2020_^1_$NC = 1_^1C_#READ INPUT (FREAD)_^1C_#IF ERROR GO TO 8100_^1_$IF(RIOSUB(CONTRL,INPBUF,40) .LT. 0) GO TO 8100_^1C_]_^1C--- CHECK FOR *Z_^1_$IF(INPBUF.EQ.$2A5A) GO TO 8200_^1C_]_^1C--- PRINT RESPONSE ON STD.LIST I€€F CONTROL LU NOT STD. COMMENT INPUT_^1_$IF(CONTRL.EQ.STDCMI) GO TO JGOTO_^1C_]_^1C_#PRINT RESPONSE (FWRITE)_^1C_#IF ERROR GO TO 8100_^1_$IF(WIOSUB($18FB,FBUF,ISIZE+1) .LT. 0) GO TO 8100_^1_$GO TO JGOTO_^1C_]_^1C---_$PSEUDO-SUBROUTINE: CHECK CLASS CODE OF DESIGNATED LU_^1C_2LU CONTAINS LOGICAL UNIT NUMBER_^1C_2KGOTO CONTAINS RETURN ADDRESS_^1C_2MESSAG CONTAINS INDEX OF CLASS CODE MA€€SK TABLE_^1C_2IF AN ERROR IS DETECTED AN ERROR_^1C_2MESSAGE IS PRINTED AND AN EXIT IS_^1C_2TAKEN VAI A COMPUTED 'GO TO' BASED_^1C_2ON THE MESSAGE NUMBER._^1 9200 CONTINUE_^1C_]_^1C--- SAVE MESSAGE NUMBER_^1_$MYMESS = MESSAG_^1C_]_^1C--- FETCH NUMBER OF LOGICAL UNITS_^1_$ASSEM $C400,+LOG1A,$6800,NUMLUS_^1_$IF(LU.GT.0.AND.LU.LE.NUMLUS) GO TO 9220_^1C_]_^1C--- INVALID LU_^1_$ASSIGN€€ 9290 TO IGOTO_^1_$MESSAG = 8_^1_$IER = 1_^1_$GO TO 9000_^1C_]_^1C--- FETCH WORD 8 OF PHYSTB FOR THIS LU AND CONVERT TO A MASK_^1 9220 CONTINUE_^1_$ASSEM $E800,LU,$E600,+LOG1A,$E208,$0F2B,$0A07,$08B2_^1_$ASSEM $C222,$6800,KLASS_^1_$IF(AND(KLASS,CC(MESSAG)).NE.0) GO TO KGOTO_^1C_]_^1C--- PRINT CLASS CODE ERROR MESSAGE_^1_$ASSIGN 9290 TO IGOTO_^1_$MESSAG = 9_^1_$IER = 1_^1_$GO TO 9€ˆ000_^1C_]_^1C--- RESTORE MESSAGE NUMBER AND BRANCH_^1 9290 MESSAG = MYMESS_^1_$GO TO(40,200,200,200,8100,610,670), MESSAG_^1_$END_]_^__ˆPHELP0 CSY/ FTN B10 P€1_$SUBROUTINE HELP0_^1_#1_2/DECK-ID B10 MSOS 4.1_-SUMMARY-079_^1C_#MAIN CONTROL SUBROUTINE FOR THE LIBRARY BUILDER_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SEQUENCE NAME IS H€€ELP0_+*_^1C_(*_O*_^1C_(**************************************************_^1C_]_^1C_(****_$COMMON DECLARATIONS_$****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOB€€UFF(96),NAMPTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1C_]_^1_#1 NAMTB5(1),NAMTB6(1)_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1_$INTEGER VALI(33),VALSAV(33)_^1_$EQUIVALENCE (VALI,IVALS(1,1)€€)_^1C_#NOTE - THE FOLLOWING VALUE MUST BE EQUAL TO THE AMOUNT OF_^1C_+COMMON SPECIFIED BY THE LIBRARY BUILDER_^1_$DATA MAX/957/_^1C_]_^1_$DATA LUNIDX/0/_^1_$DIMENSION LUN(21)_^1_"1 FORMAT (46H*** ILLEGAL CHARACTER STARTS IDENT FIELD. ***)_^1_"2 FORMAT (48H*** ILLEGAL IDENT FIELD. RECORD IGNORED. *** )_^1_"4 FORMAT (46H*** ILLEGAL *B RECORD. RECORD IGNORED. *** )_^1_"3 FOR€€MAT(30H*** END FILE MARK WRITTEN. ***)_^1_"5 FORMAT (46H*** NULL PROGRAM NAME. RECORD IGNORED. *** )_^1_"6 FORMAT (48H*** PROGRAM NAME TOO LONG. RECORD IGNORED. ***)_^1_"7 FORMAT(54H LOAD LIBRARY INPUT_$ON LU_$. CR WHEN READY. )_^1_"8 FORMAT(32HLOAD SKEL/INSTAL, CR WHEN READY_*)_^1_"9 FORMAT(38H LOAD OUTPUT LIBRARY. CR WHEN READY. )_^1_!10 FORMAT(52H*** NO DEFINITIONS ARE S€€TORED. RECORD IGNORED. ***)_^1_!11 FORMAT(60H*** INVALID *USE RECORD. IDENT FIELD. RECORD IGNORED._^1_#1 ***)_^1_!12 FORMAT(72H*** INVALID *USE RECORD. MAX IMBEDDED LEVEL IS 6. REC_^1_#1ORD IGNORED. ***)_^1_!13 FORMAT(72H*** INVALID *USE RECORD. REQUESTED SET IS IN USE. REC_^1_#1ORD IGNORED. ***)_^1_!14 FORMAT (26HLOAD DEFS, CR WHEN READY_))_^1C_]_^1C_!DEFINE LENGTH OF V.€€M. CORE SPACE_^1_$CALL HELP14_^1C_!SAVE LIMSPC_^1_$INDEX = LIMSPC_^1C_]_^1C--- SAVE LU DESIGNATORS_^1_$DO 22 I = 1,33_^1_!22 VALSAV(I) = VALI(I)_^1C_]_^1C_!ZERO OUT ALL OF COMMON AND V.M. CORE SPACE_^1_$DO 100 I= MAX,INDEX,-1_^1 100 NAMTBL(I) = 0_^1C_]_^1C_!RESTORE LIMSPC_^1_$LIMSPC = INDEX_^1C_]_^1C--- RESTORE LU'S_^1_$DO 33 I = 1,33_^1_!33 VALI(I) = VALSAV(I)_^1C_]_^1C_!EJ€€ECT PRINTER PAGE_^1_$CALL CLEAR_^1_$IPRINT(1) = $0C00_^1_$CALL PRINT_^1C_]_^1C_!SET UP FOR INPUT OF 1ST LIBRARY_^1_$LUNIDX = 3_^1_$LUIN_!= IVALS(3,1)_^1_$SKELLU = IVALS(3,2)_^1_$IDFLEN = IVALS(3,3)_^1_$LUDSAV = IVALS(1,1)_^1_$LUISAV = IVALS(1,2)_^1_$LUOSAV = IVALS(1,3)_^1_$LSTOUT = IVALS(2,3)_^1C_]_^1C_!SET LUBOUT TO LIBOUT LU FOR INIT_^1_$LUBOUT = IVALS(2,1)_^1C_!PERFORM NEEDED I/€€O RELATED INITIALIZATION_^1_$CALL INIT_^1C_]_^1C_]_^1C_!SET MASS MEMORY ADDRESS WORD TO 65 AND NEXT AVAILABLE ITEM TO 1_^1_$MMADR = 65_^1_$NXTITM = 1_^1C_]_^1C_!INITIALIZE THE VIRTUAL MEMORY TABLE AREA FOR USE BY GETITM_^1_$L= -97_^1_$DO 120 I = L,LIMSPC,-98_^1 120 NAMTBL(I) = $FFFE_^1C_]_^1C_]_^1C_(**************************************************_^1C_]_^1C_2INPUT A LIBRARY_^1C_€€]_^1C_!GET NEXT INPUT RECORD--CHECK IF IT IS ASCII. IF SO GO TO 140._^1C_!IF NOT CALL STODEK TO STORE THE DECK AND DECK NAME._^1 130 CALL GETREC_^1 131 III = INPBUF(1)/$100_^1_$IF (III.EQ.$2A) GO TO 140_^1C_]_^1C_!PROCESS THE PROGRAM NAME AND STORE THE DECK._^1_$CALL STODEK_^1C_]_^1C_!CONTINUE ON BASIS OF INUM_^1_$IF(INUM) 150,130,131_^1C_]_^1C_!NUMBER RECORD--MOVE INPUT RECORD €€TO PRINT BUFFER AND PRINT IT_^1 140 CALL CLEAR_^1_$IRECNO = IRECNO + 1_^1_$PRNIDX = 2_^1_$INUM = IRECNO_^1_$CALL BINDEC_^1_$DO 145 I = 1,36_^1 145 IPRINT(I+4) = INPBUF(I)_^1_$CALL PRINT_^1C_]_^1C_]_^1C--- SEE IF THIS IS A '*N,NAME,,,B' RECORD_^1_$NAMBLK = 0_^1_$IF(INPBUF.NE.$2A4E) GO TO 148_^1C_]_^1C--- TRUE; SAVE FIRST 10 CHARACTERS OF THE RECORD FOR USE BY HELP4_^1_$DO 146 €€I = 1,5_^1 146 NAMBLK(I) = INPBUF(I)_^1C_]_^1C_]_^1C_!IF THIS IS NOT THE *END RECORD, GO BACK TO 130_^1 148 IF (INPBUF(1).EQ.$2A45 .AND. INPBUF(2).EQ.$4E44) GO TO 150_^1_$GO TO 130_^1C_]_^1C_!CLEAR BUFFER, PUT EJECT CODE IN WORD 1, PRINT TO CAUSE EJECT_^1 150 CALL CLEAR_^1_$IPRINT(1) = $0C00_^1_$CALL PRINT_^1C_]_^1C_!CLEAR RECORD NUMBER_^1_$IRECNO = 0_^1C_]_^1C_!BUMP LUNIDX AND €€CHECK IF MORE LIBRARY LUS EXIST. IF NOT GO TO 160_^1_$LUNIDX = LUNIDX + 1_^1_$IF (IVALS(LUNIDX,1).EQ.0) GO TO 160_^1C_]_^1C_!CLEAR PRINT BUFFER, TRANSFER FORMAT 7 TO BUFFER, ADD CR CODES,_^1C_!INSERT LIBRARY NO. AND LU NUMBER AND CALL COMMNT TO PRINT THE BUFFER_^1_$CALL CLEAR_^1_$ASSIGN 7 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,27,IPRINT(2))_^1_$IPRINT(1) = $0D00_^1_$IPRINT€€(29)= $0D00_^1_$PRNIDX = 22_^1_$INUM = LUNIDX - 2_^1_$CALL BINDEC_^1_$PRNIDX = 34_^1_$LUIN = IVALS(LUNIDX,1)_^1_$INUM = LUIN_^1_$CALL BINDEC_^1C_!BLANK OUT 1ST 2 CHARS OF LIBRARY NUMBER AND LU NUMBER_^1_$IPRINT(12) = $2020_^1_$IPRINT(18) = $2020_^1C_]_^1C_!USE COMMNT TO PRINT THE PACKED MSG ON THE TTY AND WAIT ON CR_^1_$CALL COMMNT (IPRINT,29)_^1C_]_^1C_!SET UP IDFLEN AND SKELLU FO€€R NEXT LIBRARY_^1_$IDFLEN = IVALS(LUNIDX,3)_^1_$SKELLU = IVALS(LUNIDX,2)_^1C_]_^1C_!REINITIALIZE I/O REQUESTS_^1_$CALL INIT_^1C_]_^1C_!CONTINUE AT 130_^1_$GO TO 130_^1C_]_^1C_]_^1C_'***************************************************_^1C_]_^1C_(ALL INPUT LIBRARIES ARE IN AND STORED._^1C_]_^1C_!SET MMASAV TO CURRENT VALUE OF MMADR_^1 160 MMASAV = MMADR_^1C_]_^1C_!IF LISTING OF STOR€€ED PROGRAMS OR OUTPUT LIBRARY IS WANTED, CALL_^1C_!SORT AND MAKLIB._^1_$IF (LSTOUT.EQ.0 .AND. IVALS(2,1).EQ.0) GO TO 165_^1C_]_^1C_!SET UP LIBOUT AND IDFLEN FOR OUTPUT LIBRARY_^1_$LIBOUT = IVALS(2,1)_^1_$IDFLEN = IVALS(2,2)_^1C_]_^1C_!REINITIALIZE I/O REQUESTS (NEEDED FOR SKEL LU)_^1_$CALL INIT_^1C_]_^1C_!IF OUTPUT LIBRARY IS NEEDED, WARN USER._^1_$IF (LIBOUT.EQ.0) GO TO 163_^1C_]€€_^1C_!CLEAR PRINT BUFFER. MOVER FORMAT 9 INTO BUFFER. ADD CR CODES._^1C_!USE COMMNT TO PRINT THE PACKED MSG ON THE TTY AND WAIT ON CR_^1_$CALL CLEAR_^1_$ASSIGN 9 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,19,IPRINT(2))_^1_$IPRINT(1) = $0D00_^1_$IPRINT(21)= $0D00_^1_$CALL COMMNT (IPRINT,21)_^1C_]_^1 163 CALL MAKLIB_^1C_]_^1C_!DO ANOTHER PAGE EJECT_^1 165 CALL CLEAR_^1_$IPRI€€NT(1) = $0C00_^1_$CALL PRINT_^1C_]_^1C_"CHECK SKELETON IN L.U. IF 0, TERMINATE JOB VIA RETURN_^1_$IF (LUISAV.EQ.0) RETURN_^1C_]_^1C_!SET NUMDEK TO 0 (NO. OF DEFS STORED)_^1_$NUMDEK = 0_^1C_]_^1C_!SET IDEPTH = 0 (NOT PROCESSING A STORED DEF)_^1_$IDEPTH = 0_^1C_]_^1 170 CONTINUE_^1C_]_^1C_!RESET MMADR TO MMASAV_^1_$MMADR = MMASAV_^1C_]_^1C_!REINITIALIZE I/O REQUESTS FOR DEFINITIO€€NS INPUT_^1_$LUIN = LUDSAV_^1_$LUBOUT = LUOSAV_^1_$CALL INIT_^1C_]_^1C_!IF LUDSAV NOT 0, INPUT DEFINITIONS VIA STODEF_^1_$IF (LUDSAV .EQ. 0) GO TO 180_^1C_]_^1C---_!REQUEST OPERATOR TO LOAD DEFINITIONS_^1_$CALL CLEAR_^1_$ASSIGN 14 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE(IADR,13,IPRINT(2))_^1_$IPRINT(1) = $0D00_^1_$IPRINT(15) = $0D00_^1_$CALL COMMNT(IPRINT,15)_^1_$CALL STODEF_^1C_€€]_^1C_!DO ANOTHER PAGE EJECT_^1_$CALL CLEAR_^1_$IPRINT(1) = $0C00_^1_$CALL PRINT_^1C_]_^1C_!REINITIALIZE I/O REQUESTS FOR SKELETON INPUT_^1 180 LUIN = LUISAV_^1_$CALL INIT_^1C_]_^1C---_!REQUEST OPERATOR TO LOAD SKELETON AND MOUNT INSTALL TAPE_^1_$CALL CLEAR_^1_$ASSIGN 8 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE(IADR,16,IPRINT(2))_^1_$IPRINT(1) = $0D00_^1_$IPRINT(18) = $0D00_^1_$CA€€LL COMMNT(IPRINT,18)_^1C_]_^1C_!CLEAR RECORD NO. COUNTER AND IDEPTH_^1_$IRECNO = 0_^1_$IDEPTH = 0_^1C_]_^1C_(**************************************************_^1C_]_^1C_!INPUT LIBRARIES ARE ALL PROCESSED AND THE OUTPUT LIBRARY (LISTING,_^1C_!SKELETON OR FULL LIBRARY) HAS BEEN PROCESSED. NEXT PROCESS A_^1C_!SKELETON FOR AN OUTPUT SYSTEM._^1C_]_^1C_!GET A RECORD. IF IDEPTH.EQ.0, G€€ET RECORD VIA GETREC._!IF IDEPTH_^1C_!.GT.0, GET RECORD VIA GETBIN_^1 200 IF (IDEPTH.GT.0) GO TO 202_^1 201 CALL GETREC_^1_$GO TO 205_^1C_]_^1C_!SET UP TO GET NEXT RECORD FROM MM_^1 202 MMADR = MMSAVE_^1_$IOIDX = IOSAVE_^1C_]_^1C_!READ BUFFER IN CASE IT WAS OVERWRITTEN_^1_$CALL DISKIO (1,IOBUFF,MMADR)_^1_$CALL GETBIN_^1C_]_^1C_!CHECK IF A RECORD WAS OBTAINED_^1_$IF (LENGTH.NE.0)€€ GO TO 203_^1C_]_^1C_!NO RECORD, CURRENT SET IS TERMINATED. CHECK IF PREVIOUS SET WAS_^1C_!INTERRUPTED._^1_$IDEPTH = IDEPTH - 1_^1_$IF (IDEPTH.EQ.0) GO TO 201_^1C_]_^1C_!PREVIOUS SET WAS INTERRUPTED. RESUME PREVIOUS SET._^1_$INDEX = 3*(IDEPTH-1) + 42_^1_$MMSAVE = INDTBL(INDEX)_^1_$IOSAVE = INDTBL(INDEX+1)_^1_$GO TO 202_^1C_]_^1C_!SAVE CURRENT VALUE OF MMADR AND IOIDX_^1 203 MMSA€€VE = MMADR_^1_$IOSAVE = IOIDX_^1C_]_^1C_!RECORD IS IN INPBUF. CHECK IF ASCII--IF SO GO TO 250_^1 205 IF (AND(INPBUF(1),$FF00).EQ.$2A00) GO TO 250_^1C_]_^1C_!NOT AN ASCII RECORD--OUTPUT THE RECORD THEN CHECK IF IT_^1C_!IS A NAME BLOCK. IF NOT A NAME BLOCK, CONTINUE AT 200._^1_$CALL OUTBIN_^1_$IF(INPBUF(1).NE.$2050) GO TO 200_^1C_]_^1C_]_^1C_]_^1C_!NAME BLOCK READ. PRINT THE NAME €€AND ANY COMMENT INFO. THEN GO GET_^1C_#NEXT RECORD_^1C_]_^1C_!CLEAR BUFFER AND PUT IN RECORD COUNTER_^1_$CALL CLEAR_^1_$IRECNO = IRECNO + 1_^1_$PRNIDX = 2_^1_$INUM = IRECNO_^1_$CALL BINDEC_^1C_]_^1C_!PUT PGM NAME IN BUFFER_^1_$IPRINT(6) = INPBUF(5)_^1_$IPRINT(7) = INPBUF(6)_^1_$IPRINT(8) = INPBUF(7)_^1C_]_^1C_!CHECK IF COMMENT INFO EXISTS. GO TO 220 IF NOT_^1_$IF (LENGTH.EQ.7) GO €€TO 220_^1C_]_^1C_!TRANSFER COMMENT INFO TO PRINT BUFFER_^1_$DO 210 I =11,LENGTH_^1 210 IPRINT(I) = INPBUF(I)_^1C_]_^1C_!PRINT RECORD THEN CONTINUE AT 200_^1 220 CALL PRINT_^1_$GO TO 200_^1C_]_^1C_(**************************************************_^1C_]_^1C_!RECORD WAS ASCII--IF AN *B RECORD GO TO 300_^1 250 IF (INPBUF(1).EQ.$2A42) GO TO 300_^1C_]_^1C_!CHECK FOR *USE RECORD. IF€€ FOUND, GO TO 2800_^1_$IF (INPBUF(1).EQ.$2A55 .AND. INPBUF(2).EQ.$5345) GO TO 2800_^1C_]_^1C_!CHECK FOR *WEF. IF SO, WRITE END OF FILE MARK_^1C_]_^1_$IF(INPBUF(1).EQ.$2A57 .AND. INPBUF(2).EQ.$4546)GO TO 270_^1C_]_^1C_!NUMBER RECORD--MOVE INPUT RECORD TO PRINT BUFFER AND PRINT IT_^1_$CALL CLEAR_^1_$IRECNO = IRECNO + 1_^1_$PRNIDX = 2_^1_$INUM = IRECNO_^1_$CALL BINDEC_^1_$DO 255 I = €€1,36_^1 255 IPRINT (I+4) = INPBUF(I)_^1_$CALL PRINT_^1C_]_^1C_!OUTPUT THE RECORD_^1_$CALL OUTBIN_^1C_]_^1C_!CHECK IF IT WAS AN *END RECORD. IF SO, DO A PAGE EJECT._^1C_]_^1_$IF (INPBUF(1).EQ.$2A45 .AND. INPBUF(2).EQ.$4E44)GO TO 260_^1_$GO TO 200_^1 260 CONTINUE_^1C_]_^1_$IPRINT(1) = $0C00_^1_$CALL PRINT_^1C_]_^1C_!CALL RESTAR TO PRINT RESTART MSG AND GET RESPONSE_^1_$CALL RESTAR€€_^1C_]_^1C_!TRANSFER RESPONSE TO INPBUF AND PUT * IN 9TH CHAR_^1_$DO 265 I=1,4_^1 265 INPBUF(I) = ISHORT(I)_^1_$INPBUF(6)=$2A00_^1C_]_^1C_!GET 1ST NON-SPACE CHAR AND CHECK IF *_^1_$INPIDX = 0_^1_$CALL GNSCHR_^1_$IF (ICHR.EQ.$2A) RETURN_^1C_]_^1C_]_^1C---_!GO REQUEST SKEL/INSTALL_^1_$GO TO 180_^1C_]_^1C_#WRITE END OF FILE_^1C_]_^1270_!CALL WEF_^1C_]_^1C_#PRINT OUT MESSAGE REGARDIN€€G FILE MARK_^1C_]_^1_$CALL CLEAR_^1_$ASSIGN 3 TO IADR_^1_$IADR = IADR+2_^1_$CALL MOVE(IADR,15,IPRINT(2))_^1_$CALL PRINT_^1_$GO TO 200_^1C_(**************************************************_^1C_]_^1C_!*USE RECORD NOTED_^1C_]_^1C_!CHECK--1. ARE DEFS DEFINED_^1C_)2. IS A VALID DESIGNATOR ON *DEF RECORD_^1C_)3. IS THIS A VALID LEVEL (MAY BE IMBEDDED 6 DEEP)_^1C_)4. IS THE CURRENT SET €€ALREADY IN USE_^1C_!FIRST, PRINT RECORD_^1 2800 CALL CLEAR_^1_$DO 2805 I = 1,36_^1 2805 IPRINT (I+4) = INPBUF(I)_^1_$CALL PRINT_^1_$CALL CLEAR_^1C_]_^1C_!PERFORM CHECK NO. 1_^1_$IF (NUMDEK.NE.0) GO TO 2810_^1C_]_^1C_!PRINT OUT MESSAGE REGARDING INVALID *USE_^1_$ASSIGN 10 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,26,IPRINT(2))_^1 2808 CALL PRINT_^1_$GO TO 200_^1C_]_^1C_!PERF€€ORM CHECK NO. 2_^1 2810 INPIDX = 4_^1_$CALL GNSCHR_^1_$IF (INPIDX.LE.80) GO TO 2820_^1C_]_^1C_!NOTE BAD RECORD_^1 2815 ASSIGN 11 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,30,IPRINT(2))_^1_$GO TO 2808_^1C_]_^1C_!CHECK IF THIS DESIGNATOR IS DEFINED_^1 2820 DO 2825 I= 1,NUMDEK_^1_$JNDEX = 2*(I-1) + 1_^1_$IF (ICHR.EQ.INDTBL(JNDEX)) GO TO 2830_^1 2825 CONTINUE_^1_$GO TO 2815_^1C_]€€_^1C_!PERFORM CHECK NO. 3_^1C_]_^1 2830 IF (IDEPTH.LT.6) GO TO 2835_^1C_]_^1C_!NOTE IMPROPER LEVEL OF IMBEDDING USE SETS_^1_$ASSIGN 12 TO IADR_^1 2832 IADR = IADR + 2_^1_$CALL MOVE (IADR,36,IPRINT(2))_^1_$GO TO 2808_^1C_]_^1C_!PERFORM CHECK NO. 4_^1 2835 IF (IDEPTH.EQ.0) GO TO 2850_^1_$DO 2840_!I = 1,IDEPTH_^1_$INDEX = 3*(I-1) + 41_^1_$IF (INDTBL(INDEX) .EQ. ICHR) GO TO 2860_^1 284€€0 CONTINUE_^1C_]_^1C_!SET WAS NOT IN USE. SAVE INFO ON PREVIOUS SET (WHEN INTERRUPTED)_^1C_!SAVE CURRENT VALUE OF MMSAVE_^1_$INDTBL(INDEX+1) = MMSAVE_^1C_!SAVE CURRENT VALUE OF IOSAVE_^1_$INDTBL(INDEX+2) = IOSAVE_^1C_]_^1C_!BUMP IDEPTH BY 1 AND SET UP FOR USE OF CURRENT DEF SET_^1 2850 IDEPTH = IDEPTH + 1_^1_$INDEX = 3*(IDEPTH-1) + 101_^1_$INDTBL(INDEX) = ICHR_^1_$MMSAVE = INDTBL(€€JNDEX+1) - 1_^1_$IOSAVE = 97_^1C_]_^1C_!ALL READY--GO GET 1ST RECORD OF SET_^1_$GO TO 200_^1C_]_^1C_!NOTE THAT SET WAS ALREADY IN USE_^1 2860 ASSIGN 13 TO IADR_^1_$GO TO 2832_^1C_]_^1C_(**************************************************_^1C_]_^1C_]_^1C_!*B RECORD READ, GET PROGRAM NAME FROM IT_^1C_]_^1C_!FIRST, GET THE LEADING SINGLE QUOTE_^1 300 INPIDX=2_^1_$CALL GNSCHR_^1_$IF (I€€CHR .NE.$27 .OR. INPIDX.GT.72) GO TO 500_^1C_]_^1C_!FILL NAME ARRAY WITH BLANKS_^1_$NAME(1) = $2020_^1_$NAME(2) = $2020_^1_$NAME(3) = $2020_^1C_]_^1C_!GET UP TO 6 CHARACTERS_^1_$DO 310 I=1,6_^1_$CALL GNSCHR_^1C_!CHECK IF GNSCHR WENT BEYOND THE END OF THE RECORD_^1_$IF (INPIDX.GT. 72) GO TO 500_^1C_!CHECK IF SINGLE QUOTE_^1_$IF (ICHR.EQ.$27) GO TO 320_^1_$INDEX = (I+1)/2_^1_$IF (AND€€(I,1).EQ.1) GO TO 305_^1C_]_^1C_!STORE IN LOWER HALF WORD_^1_$NAME(INDEX) = AND(NAME(INDEX),$FF00) + ICHR_^1_$GO TO 310_^1C_!STORE IN UPPER HALF WORD_^1 305 NAME(INDEX) = AND(NAME(INDEX),$FF) + ICHR * $100_^1 310 CONTINUE_^1C_]_^1C_!ASSURE AT LEAST 1 CHAR OBTAINED_^1 320 IF (I.EQ.1) GO TO 510_^1C_]_^1C_!ASSURE NAME NOT TOO LONG_^1_$IF (I.LE.6) GO TO 330_^1_$CALL GNSCHR_^1C_]_^1C€€_!CHECK IF GNSCHR WENT BEYOND THE END OF THE RECORD_^1_$IF (INPIDX.GT. 72) GO TO 500_^1_$IF (ICHR.NE.$27) GO TO 515_^1C_]_^1C_!NAME OK, NOW CHECK IF IDENT INFO FIELD EXISTS. IF SO GO TO 340._^1 330 CALL GNSCHR_^1_$IF( INPIDX.LT. 73) GO TO 340_^1C_]_^1C_!SET IANY TO 0 AND CALL GETPGM TO GET THE PROGRAM._^1 335 IANY = 0_^1_$CALL GETPGM_^1_$GO TO 200_^1C_]_^1C_!ASSURE FIELD BEGINS €€WITH A QUOTE MARK_^1 340 IF (ICHR.EQ.$27) GO TO 350_^1C_]_^1C_!ERROR--PRINT WARNING THEN PRINT RECORD AND CONTINUE AT 200_^1_$CALL CLEAR_^1_$ASSIGN 1 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,23,IPRINT(2))_^1 345 CALL PRINT_^1_$CALL CLEAR_^1_$DO 347 I = 1,36_^1 347 IPRINT(I+4) = INPBUF(I)_^1_$CALL PRINT_^1_$GO TO 200_^1C_]_^1C_!PICKUP THE CHARACTER STRING FIELD WHICH GIVES€€ PROGRAM ID INFO._^1C_]_^1C_!SKIP OVER LEADING BLANKS IN IDENT FIELD_^1 350 DO 355 I=1,49_^1_$CALL GETCHR_^1C_]_^1C_!CHECK IF BLANK_^1_$IF (ICHR.NE.$20) GO TO 356_^1 355 CONTINUE_^1C_]_^1C_!IF BLANKS ONLY IN IDENT FIELD, IGNORE IT_^1 356 IF(ICHR.EQ.$27 .AND. INPIDX.LT.73) GO TO 335_^1_$INPIDX = INPIDX -1_^1C_]_^1C_!GET UP TO 48 CHARS--STOP WHEN SINGLE QUOTE IS NOTED._^1_$DO 365 €€I = 1,49_^1_$CALL GETCHR_^1C_]_^1C_!CHECK IF QUOTE MARK_^1_$IF (ICHR.EQ.$27) GO TO 370_^1_$INDEX = (I+1)/2_^1_$IF (AND(I,1).EQ.1) GO TO 360_^1C_]_^1C_!STORE IN LOWER HALF WORD_^1_$IDENT (INDEX) = AND(IDENT (INDEX),$FF00) + ICHR_^1_$GO TO 365_^1C_]_^1C_!STORE IF UPPER HALF WORD_^1 360 IDENT(INDEX) = AND(IDENT(INDEX),$FF) + ICHR * $100_^1 365 CONTINUE_^1C_]_^1C_]_^1C_!ASSURE PICKUP€€ WAS VALID_^1 370 IF (I.GT.1 .AND. I.LT.49 .AND. INPIDX.LE. 72) GO TO 390_^1C_]_^1C_!ERROR--MOVE WARNING INTO IPRINT THEN CONTINUE AT 345_^1_$ASSIGN 2 TO IADR_^1_$CALL CLEAR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,24,IPRINT(2))_^1_$GO TO 345_^1C_]_^1C_!SET IDLEN TO NO. OF IDENT CHARS_^1 390 IDLEN = I-1_^1C_]_^1C_!SET IANY=1 SIGNALLING IDENT SPECIFIED AND CALL GETPGM TO GET THE_^1€€C_!PROGRAM_^1_$IANY = 1_^1_$CALL GETPGM_^1_$GO TO 200_^1C_]_^1C_!NOTE ERROR--NO LEADING SINGLE QUOTE_^1 500 CALL CLEAR_^1_$ASSIGN 4 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,23,IPRINT(2))_^1 505 CALL PRINT_^1C_]_^1C_!PRINT INPUT RECORD (WILL BE IGNORED)_^1_$CALL CLEAR_^1_$DO 507 I = 1,36_^1 507 IPRINT(I+4) = INPBUF(I)_^1_$CALL PRINT_^1_$GO TO 200_^1C_]_^1C_!NOTE ERROR--NUL€L NAME_^1 510 CALL CLEAR_^1_$ASSIGN 5 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,23,IPRINT(2))_^1_$GO TO 505_^1C_]_^1C_!NOTE ERROR--NAME TOO LONG_^1 515 CALL CLEAR_^1_$ASSIGN 6 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,24,IPRINT(2))_^1_$GO TO 505_^1_$END_]_^__PHELP1 CSY/ FTN B11 P€1_$SUBROUTINE HELP1_^1_#1_2/DECK-ID B11 MSOS 4.1_-SUMMARY-079_^1C_#COMPOSITE SUBROUTINE PROGRAM - I_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_!COMPOSITE SUBROUTINE--BINDEC, INCIDX_(€€*_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOBUFF(96),NAMP€€TR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1C_!ISELEC SPECIFIES WHICH LOGIC IS TO BE EXECUTED._^1C---ISELC = 1 NOT US€€ED_^1C_!ISELEC = 2 SELECTS BINDEC LOGIC_^1C_!ISELEC = 3 SELECTS INCIDX LOGIC_^1C_]_^1_$DIMENSION IDIG(4)_^1_$GO TO (100,200,300), ISELEC_^1 100 CONTINUE_^1_$ASSEM $0A00,$6422,$18FF_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(SUBROUTINE BINDEC LOGIC_/*_^1C_(*_O*_^1C_(**************************************************_^1C_#CONVERT A BINARY NUMBER TO A D€€ECIMAL ASCII NUMBER AND STORE IT IN_^1C_#PRINT BUFFER. NUMBER IS IN INUM. IPRIDX IS INDEX TO PRINT BUFFER_^1C_]_^1C_!CONVERT NUMBER TO 4 DIGITS_^1 200 NUM = INUM_^1_$DO 210 I = 4,1,-1_^1_$IDIG(I) = NUM - NUM/10*10 + $30_^1 210 NUM = NUM/10_^1C_]_^1C_!STORE NUMBER IN PRINT BUFFER_^1_$DO 220 I = 1,4_^1_$ICHR = IDIG(I)_^1 220 CALL STOREC_^1_$RETURN_^1C_(**************************€€************************_^1C_(*_O*_^1C_(*_(SUBROUTINE INCIDX LOGIC_/*_^1C_(*_O*_^1C_(**************************************************_^1C_#INCREMENT IOBUFF INDEX AND WRITE BUFFER IF APPROPRIATE_^1C_]_^1C_!BUMP IOIDX AND CHECK IF BUFFER FULL_^1 300 IOIDX = IOIDX + 1_^1_$IF (IOIDX.LE.96) RETURN_^1C_]_^1C_!WRITE BUFFER, RESET IOIDX AND BUMP MM ADDRESS_^1_$CALL DISKIO (2,IOBUFF,MMAD€4R)_^1_$MMADR = MMADR + 1_^1_$IOIDX = 1_^1_$END_]_^__4PHELP2 CSY/ FTN B12 P€1_$SUBROUTINE HELP2_^1_#1_2/DECK-ID B12 MSOS 4.1_-SUMMARY-079_^1C_#COMPOSITE SUBROUTINE PROGRAM - II_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_!COMPOSITE SUBROUTINE--GETCHR, STOREC_€€(*_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOBUFF(96),NAM€€PTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1C_!ISELEC SPECIFIES WHICH LOGIC IS TO BE EXECUTED._^1C_!ISELEC = 1 SELECT€€S GETCHR LOGIC_^1C_!ISELEC = 2 SELECTS STOREC LOGIC_^1C_]_^1_$GO TO (100,200), ISELEC_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(SUBROUTINE GETCHR LOGIC_/*_^1C_(*_O*_^1C_(**************************************************_^1C_#GET NEXT CHARACTER FROM INPUT BUFFER VIA INPUT INDEX_^1C_]_^1C_!GET NEXT CHARACTER FROM PACKED INPBUF AND STORE IN ICHR_^1 10€€0 INPIDX = INPIDX + 1_^1_$INDEX = (INPIDX+1)/2_^1_$ICHR = INPBUF(INDEX)_^1_$IF (AND(INPIDX,1) .EQ. 1) ICHR = ICHR/$100_^1_$ICHR = AND(ICHR,$FF)_^1_$RETURN_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(SUBROUTINE STOREC LOGIC_/*_^1C_(*_O*_^1C_(**************************************************_^1C_!STORE NEXT CHARACTER IN PRINT BUFFER VIA BUFFER INDEX. C€BHARACTER_^1C_!IS IN LOWER HALF OF ICHR_^1C_]_^1 200 PRNIDX = PRNIDX + 1_^1_$INDEX = (PRNIDX+1)/2_^1_$IF (AND(PRNIDX,1).EQ.1) GO TO 210_^1C_!STORE IN LOWER HALF_^1_$IPRINT(INDEX) = AND(IPRINT(INDEX),$FF00) + ICHR_^1_$RETURN_^1C_!STORE IN UPPER HALF_^1 210 IPRINT(INDEX) = AND(IPRINT(INDEX),$FF) + ICHR*$100_^1_$END_]_^__BPHELP3 CSY/ FTN B13 P€1_$SUBROUTINE HELP3_^1_#1_2/DECK-ID B13 MSOS 4.1_-SUMMARY-079_^1C_#COMPOSITE SUBROUTINE PROGRAM - III_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_!COMPOSITE SUBROUTINE--CLEAR, UNICHK_€€)*_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOBUFF(96),NAM€€PTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1C_!ISELEC SPECIFIES WHICH LOGIC IS TO BE EXECUTED._^1C---ISELC = 1 NOT U€€SED_^1C_!ISELEC = 2 SELECTS CLEAR LOGIC_^1C_!ISELEC = 3 SELECTS UNICHK LOGIC_^1C_]_^1_$GO TO (100,200,300), ISELEC_^1 100 CONTINUE_^1_$ASSEM $0A00,$6422,$18FF_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(SUBROUTINE CLEAR LOGIC_0*_^1C_(*_O*_^1C_(**************************************************_^1C_#CLEAR THE PRINT BUFFER_^1 200 DO 210 I=1,40_^1 210 €€IPRINT(I) = $2020_^1_$RETURN_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(SUBROUTINE UNICHK LOGIC_/*_^1C_(*_O*_^1C_(**************************************************_^1C_]_^1C_#CHECK IF CURRENT PROGRAM HAS UNIQUE NAME/IDENT_^1C_!THE NAM BLOCK RECORD OF THE CURRENT PROGRAM IS IN THE NAMBLK ARRAY._^1C_!THE LENGTH OF THE RECORD IS DEFINED BY ILEN._^1C_!TH€€E NAM BLOCK RECORD OF THE PREVIOUSLY STORED PROGRAM IS IN THE_^1C_!INPBUF ARRAY. THE LENGTH OF THE RECORD IS DEFINED BY LENGTH._^1C_]_^1C_!IF THE TWO PROGRAMS HAVE IDENTICAL IDENT FIELDS, THEY ARE CONSIDERED_^1C_!TO BE DUPLICATES. IF DUPLICATES ARE NOTED, ICHECK SHOULD BE INCRE-_^1C_!MENTED PRIOR TO RETURNING TO DEFINE_^1C_]_^1 300 CONTINUE_^1C_]_^1C_!NOW, CHECK IF IDENT FIELDS €€ARE IDENTICAL. IF NOT, RETURN._^1C_]_^1C---_!THE ASSEMBLER AND COMPILER BOTH PRODUCE NAM BLOCKS_^1C_+AT LEAST 68 CHARACTERS LONG._^1C_]_^1C---_!CHECK NUMBER OF CHARACTERS BASED ON SHORTEST NAM RECORD_^1C_]_^1 310 CONTINUE_^1_$LONG = ILEN_^1_$IF(ILEN.GT.LENGTH) LONG = LENGTH_^1_$DO 320 I = 11,LONG_^1_$IF (INPBUF(I).NE.NAMBLK(I)) RETURN_^1 320 CONTINUE_^1C_]_^1C_!IDENTS ARE ID€FENTICAL. BUMP ICHECK AND RETURN_^1_$ICHECK = ICHECK + 1_^1_$END_]_^__FPHELP4 CSY/ FTN B14 P€1_$SUBROUTINE HELP4_^1_#1_2/DECK-ID B14 MSOS 4.1_-SUMMARY-079_^1C_#DEFINE A RELOCATABLE BINARY PROGRAM ON MASS MEMEORY AND IN V.M._^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SE€€QUENCE NAME IS STODEK_**_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INP€€BUF(97),IOBUFF(96),NAMPTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$INTEGER PSUNAM(33),SAVREC(97)_^1_$DATA (PSUNAM(I),I=1,33)/$2050,$ABBA,$DABA,0,3*$2020,3*0,_^1_#1_"' ** ABSOLUTE FILE ** ',12*$2020/_^1_$DATA LENPSU/33/_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2€€),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1 1000 FORMAT(48H*** LAST DECK REJECTED - NO XFR RECORD_()_^1 1001 FORMAT(46H*** LAST DECK REJECTED - NOT UNIQUE_1)_^1C_]_^1C_!THE FIRST RECORD IS ALREADY IN INPBUF. FIRST, ASSURE IT IS A NAME_^1C_!BLOCK._]_^1_$IZORK = 0_^1C---_!SET *N MODE FALSE_^1_$NSTAR = 0_^1_$IF(INPBUF.EQ€€.$2050) GO TO 5_^1C_]_^1C--- NOT A NAM BLOCK, SEE IF ABSOLUTE FILE (PREV.RECORD WAS *N,...)_^1_$IF(NAMBLK.NE.$2A4E) GO TO 60_^1C_]_^1C--- TRUE; SAVE THIS RECORD AND CREATE PSEUDO-NAM-BLOCK_^1_$IZORK = 1_^1_$DO 2 I = 1,96_^1_"2 SAVREC(I) = INPBUF(I)_^1_$SAVREC(97) = LENGTH_^1_$DO 3 I = 1,LENPSU_^1_"3 INPBUF(I) = PSUNAM(I)_^1_$LENGTH = LENPSU_^1C---_!SET *N MODE TRUE_^1_$NSTAR =€€ 1_^1C_]_^1C--- MOVE NAME ON *N RECORD TO PSEUDO NAM BLOCK_^1_$NC = 4_^1_$DO 4 I = 1,6_^1_$K = NEXTCH(NAMBLK,NC)_^1C_]_^1C--- SEE IF FILE NAME TERMINATOR (COMMA)_^1_$IF(K.EQ.$2C) GO TO 5_^1C_]_^1C--- NO, STORE THE CHARACTER_^1_$CALL STORCH(INPBUF(5),I,K)_^1_"4 CONTINUE_^1_"5 CONTINUE_^1C_]_^1C---_!SEE IF NAM BLOCK WAS A PSEUDO(ALREADY PART OF INPUT LIBRARY)_^1_$IF(INPBUF(2).EQ€€.PSUNAM(2).AND.INPBUF(3).EQ.PSUNAM(3)) NSTAR = 1_^1C_]_^1C_!SAVE STARTING MM STORAGE ADDRESS_^1_$ISAVE = MMADR_^1C_]_^1C_!CLEAR PRINT BUFFER, BUMP RECORD COUNTER, CONVERT RECORD COUNTER TO_^1C_!BINARY AND PUT IN BUFFER_^1_$CALL CLEAR_^1_$IRECNO = IRECNO + 1_^1_$PRNIDX = 2_^1_$INUM = IRECNO_^1_$CALL BINDEC_^1C_]_^1C_!PUT PROGRAM NAME IN PRINT BUFFER_^1_$IPRINT(6) = INPBUF(5)_^1_$IPR€€INT(7) = INPBUF(6)_^1_$IPRINT(8) = INPBUF(7)_^1C_]_^1C_!CHECK IF COMMENT INFORMATION EXISTS. GO TO 20 IF NOT._^1_$IF (LENGTH.LT.11) GO TO 20_^1C_]_^1C_!TRANSFER COMMENT INFO TO PRINT BUFFER (ONLY THRU WORD 40)_^1_$LEN = LENGTH_^1_$IF (LEN.GT.40) LEN=40_^1_$DO 10 I = 11,LEN_^1_!10 IPRINT(I) = INPBUF(I)_^1C_]_^1C_!PRINT BUFFER_^1_!20 CALL PRINT_^1C_]_^1C_]_^1C_!SET IOBUFF INDEX TO 1€€_^1_$IOIDX =1_^1C_]_^1C_!PUT LENGTH IN IOBUFF AND BUMP INDEX AND WRITE BUFFER IF NEEDED_^1_!30 IOBUFF(IOIDX) = LENGTH_^1_$CALL INCIDX_^1C_!CLEAR CHECKSUM WORD_^1_$ICHECK = 0_^1C_]_^1C_!TRANSFER INPUT RECORD TO IOBUFF AND ACCUMULATE CHECKSUM_^1_$DO 40 I=1,LENGTH_^1_$IOBUFF(IOIDX) = INPBUF(I)_^1_$ICHECK = IOBUFF(IOIDX) + ICHECK_^1C_]_^1C_!BUMP INDEX AND UNLOAD IF NEEDED_^1_$CALL INCI€€DX_^1_!40 CONTINUE_^1C_]_^1C_!TRANSFER CHECKSUM TO IOBUFF, BUMP INDEX AND UNLOAD IF NEEDED_^1_$IOBUFF(IOIDX) = ICHECK_^1_$CALL INCIDX_^1C_]_^1C--- SEE IF PROCESSING ABS.FILE_^1_$IF(NSTAR.EQ.0) GO TO 43_^1C_]_^1C--- YES; SEE IF PSEUDO NAM BLOCK WAS JUST CREATED_^1_$IF(IZORK.EQ.0) GO TO 47_^1C_]_^1C--- YES; RESTORE FIRST RECORD AND PROCESS AS THOUGH IT WAS JUST READ._^1_$LENGTH €€= SAVREC(97)_^1_$DO 42 I = 1,LENGTH_^1_!42 INPBUF(I) = SAVREC(I)_^1_$IZORK = 0_^1_$GO TO 30_^1C_]_^1C_!CHECK IF RECORD WAS A XFR RECORD. IF SO, GO TO 50_^1_!43 CONTINUE_^1_$IF (INPBUF(1).EQ.$C050) GO TO 50_^1C_]_^1C_!GET NEXT RECORD_^1_!47 CONTINUE_^1_$CALL GETREC_^1C_]_^1C_]_^1C_]_^1C--- SEE IF PROCESSING ABS.FILE_^1_$IF(NSTAR.EQ.0) GO TO 48_^1C_]_^1C--- YES; CHECK FOR TERMIN€€ATOR (ASTERISK)_^1_$IF(AND(INPBUF,$FF00).EQ.$2A00) GO TO 50_^1C_]_^1C--- NO TERMINATOR YET - CONTINUE_^1_$GO TO 30_^1C IF RECORD IS ASCII OR A NAM BLOCK RECORD GO TO 100_^1_!48 CONTINUE_^1_$IF (INPBUF(1).EQ.$2050 .OR. (INPBUF(1)/$100).EQ.$2A) GO TO 100_^1C_]_^1C_!STORE THE RECORD_^1_$GO TO 30_^1C_]_^1C_!XFR BLOCK READ, STORE 0 FOR NUMBER OF WORDS, WRITE BLOCK, BUMP_^1C_#MM ADDRES€€S._^1_!50 IOBUFF(IOIDX) = 0_^1_$CALL DISKIO (2,IOBUFF,MMADR)_^1_$MMADR = MMADR + 1_^1C_]_^1C_!CALL DEFINE TO CHECK IF THIS PROGRAM IS A DUPLICATE OF ONE ALREADY_^1C_!STORED. IF A DUPLICATE, ICHECK WILL BE EQUAL TO 1 AND THE MASS_^1C_!MEMORY SPACE SHOULD BE REUSED. IF NOT A DUPLICATE, IT WILL BE_^1C_!DEFINED IN THE DIRECTORY AND ICHECK WILL EQUAL 0._^1_!51 CONTINUE_^1_$IOIDX = 1_^€€1C_]_^1C---_!SAVE THIS RECORD - OTHERWISE IT WILLL BE WIPED OUT BY 'DEFINE'._^1_$DO 52 JSTAR = 1,96_^1_!52 SAVREC(JSTAR) = INPBUF(JSTAR)_^1_$SAVREC(97) = LENGTH_^1_!53 CONTINUE_^1_$I = MMADR_^1_$MMADR = ISAVE-1_^1_$ICHECK = 0_^1_$CALL DEFINE_^1C_]_^1_$INUM = NSTAR_^1C_]_^1C---_!RESTORE INPBUF JUST IN CASE IN *N MODE_^1_$DO 54 JSTAR = 1,96_^1_!54 INPBUF(JSTAR) = SAVREC(JSTAR)_^1€€_$LENGTH = SAVREC(97)_^1C_]_^1C_!CHECK IF PROGRAM WAS A DUPLICATE. IF SO, GO TO 55_^1_$IF (ICHECK .EQ. 1) GO TO 55_^1C_]_^1C_!SET MM ADDRESS TO NEXT FREE SPACE._^1_$MMADR = I_^1_$RETURN_^1C_]_^1C_!PRINT NOTE THAT PROGRAM WAS NOT STORED AND RESET MMADR_^1_!55 CALL CLEAR_^1_$ASSIGN 1001 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,23,IPRINT(2))_^1_$CALL PRINT_^1_$MMADR = ISAVE_^1€€_$RETURN_^1C_]_^1C_!FIRST RECORD IS NOT NAM BLOCK. CALL ERROR2 TO NOTE ERROR AND INPUT_^1C_!OPERATORS RESPONSE_^1_!60 CALL ERROR2_^1_$IGO =1_^1C_]_^1C_!PICK UP 1ST NON SPACE CHAR FROM RESPONSE_^1_!65 DO 70 I = 1,8_^1_$INDEX = (I+1)/2_^1_$IICHR = ISHORT(INDEX)/$100_^1_$IF (AND(I,1).EQ.0) IICHR = AND(ISHORT(INDEX),$FF)_^1_$IF (IICHR.EQ.$20) GO TO 70_^1_$IF (IICHR.LT.$31 .OR. IICHR€€.GT.$33) GO TO 75_^1_$ICHOIC = IICHR - $30_^1_$GO TO 80_^1_!70 CONTINUE_^1C_]_^1C_!PROPER RESPONSE NOT FOUND. REPEAT OUTPUT_^1_!75 GO TO (60,100),IGO_^1C_]_^1C_!GOOD RESPONSE. PROCEED ON BASIS OF IGO_^1_!80 GO TO (90,110),IGO_^1C_]_^1C_!PROCEED ON BASIS OF ICHOIC_^1_!90 GO TO (91,92,93), ICHOIC_^1C_]_^1C_!TERMINATE RUN_^1_!91 CALL KILJOB_^1C_]_^1C_!PROCEED TO SUBSEQUENT LIBRARY O€€R SKELETON. SET INUM =-1 AND RETURN_^1_!92 INUM = - 1_^1_$RETURN_^1C_]_^1C_!SKIP OVER RECORDS TILL NAM BLOCK OR ASCII RECORD FOUND._^1_!93 CALL GETREC_^1_$IF (INPBUF(1).NE.$2050.AND. (INPBUF(1)/$100).NE.$2A) GO TO 93_^1_$INUM = 1_^1_$RETURN_^1C_]_^1C_]_^1C_!XFR RECORD NOT FOUND. CALL ERROR3 TO NOTE ERROR AND INPUT_^1C_!OPERATORS RESPONSE. THEN SET IGO = 2 AND CONTINUE AT 65_^1 €D100 CALL ERROR3_^1_$IGO = 2_^1_$GO TO 65_^1C_]_^1C_!PROCEED ON BASIS OF ICHOIC_^1 110 GO TO (91,92,111),ICHOIC_^1C_]_^1C_!PRINT WARNING THAT PGM DELETED AND DECREMENT IRECNO_^1 111 CALL CLEAR_^1_$ASSIGN 1000 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,24,IPRINT(2))_^1_$CALL PRINT_^1_$INUM = 0_^1_$RETURN_^1_$END_]_^__DPHELP5 CSY/ FTN B15 P€1_$SUBROUTINE HELP5_^1_#1_2/DECK-ID B15 MSOS 4.1_-SUMMARY-079_^1C_#INPUT AND STORE A SET OF DEFINITIONS_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SEQUENCE NAME IS STODEF_**_^1€€C_(*_O*_^1C_(**************************************************_^1C_]_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOBUFF(96),NA€€MPTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1C_]_^1_"1 FORMAT (44H*** INVALID DEFINITION RECORD. IGNORED. ***)_^1_"€€2 FORMAT (50H*** NO DEFINITIONS WERE SUCCESSFULLY LOADED. M** )_^1_"3 FORMAT (44H*** TOO MANY DEFINITION SETS. IGNORED. ***)_^1_"4 FORMAT (46H*** BAD *DEF RECORD. NO IDENT CHARACTER. ***)_^1_"5 FORMAT (60H*** BAD *DEF RECORD. IDENT CHAR ALREADY USED. IGNORE_^1_#1D. ***)_^1C_]_^1C_]_^1C_!USE NUMDEK TO COUNT NO. OF DEFINITIONS ENTERED._^1_$IRECNO = 0_^1C_]_^1C_]_^1C_!GET N€€EXT INPUT RECORD_^1C_!CHECK FOR AN *DEF RECORD. IF NOT AN *DEF CHECK FOR *END_^1 100 CALL NXTREC_^1C_7* D_5E F_^1_$IF (INPBUF(1).EQ.$2A44 .AND. INPBUF(2).EQ.$4546) GO TO 140_^1C_]_^1C_!CHECK FOR AN *END RECORD_^1C_7* E_5N D_^1_$IF (INPBUF(1).EQ.$2A45 .AND. INPBUF(2).EQ.$4E44) GO TO 120_^1C_]_^1C_!NOTE INVALID RECORD_^1_$CALL CLEAR_^1_$ASSIGN 1 TO IADR_^1_$IADR = IADR + 2_^1C_]_^1€€_$CALL MOVE (IADR,22,IPRINT(2))_^1_$CALL PRINT_^1C_]_^1C_!PASS RECORDS TILL *END OR *DEF NOTED_^1C_!GET NEXT RECORD AND PRINT IT_^1 110 CALL NXTREC_^1C_!NOW CHECK FOR *DEF_^1C_7* D_5E F_^1_$IF (INPBUF(1).EQ.$2A44 .AND. INPBUF(2).EQ.$4546) GO TO 140_^1C_!CHECK FOR *END_^1C_7* E_5N D_^1_$IF (INPBUF(1).EQ.$2A45 .AND. INPBUF(2).EQ.$4E44) GO TO 120_^1C_!GET NEXT RECORD_^1_$GO TO 110_^1€€C_]_^1C_!CHECK IF ANY DEFS WERE LOADED, NOTE IT IF NOT._^1 120 IF (NUMDEK .NE. 0) GO TO 130_^1_$CALL CLEAR_^1_$ASSIGN 2 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,25,IPRINT(2))_^1_$CALL PRINT_^1C_]_^1C_!DO A PAGE EJECT AND RETURN_^1 130 CALL CLEAR_^1_$IPRINT(1) = $0C00_^1_$CALL PRINT_^1_$RETURN_^1C_]_^1C_]_^1C_(**************************************************_^1C_]_^1C_!A€€ *DEF RECORD WAS NOTED. TRY TO INPUT AND STORE A GROUP._^1C_!FIRST, BUMP NUMDEK AND CHECK IF MAX EXCEEDED_^1 140 NUMDEK = NUMDEK + 1_^1_$IF (NUMDEK .LE. 20) GO TO 160_^1C_]_^1C_!RESET NUMDEK TO 20_^1_$NUMDEK = 20_^1C_]_^1C_!NOTE ERROR AND PASS RECORDS TILL *END NOTED_^1_$CALL CLEAR_^1_$ASSIGN 3 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,22,IPRINT(2))_^1_$CALL PRINT_^1C_]_^1C€€_!GET AND PRINT RECORD. CHECK FOR *END_^1 150 CALL NXTREC_^1_$IF (INPBUF(1).EQ.$2A45 .AND. INPBUF(2).EQ.$4E44) GO TO 130_^1_$GO TO 150_^1C_]_^1C_!SET UP INDEX FOR REFERENCING INDTBL_^1 160 INDEX = 2 *(NUMDEK-1) + 1_^1C_]_^1C_!GET IDENT CHARACTER OF GROUP_^1_$INPIDX = 4_^1_$CALL GNSCHR_^1C_]_^1C_!ASSURE CHAR WAS IN RECORD_^1_$IF (INPIDX.LE.80) GO TO 165_^1C_]_^1C_!NOTE BAD RECORD€€ AND GO TO 110_^1_$CALL CLEAR_^1_$ASSIGN 4 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,23,IPRINT(2))_^1C_]_^1C_!DECREMENT NUMDEK AS NOT STORED_^1_$NUMDEK = NUMDEK - 1_^1_$CALL PRINT_^1_$GO TO 110_^1C_]_^1C_]_^1C_!CHECK IF DESIGNATOR ALREADY USED_^1 165 IJ = NUMDEK - 1_^1_$IF (IJ.EQ.0) GO TO 169_^1_$DO 166 I = 1,IJ_^1_$JNDEX = 2 * (I-1) + 1_^1_$IF (ICHR.EQ.INDTBL(JNDEX)) GO T€€O 168_^1 166 CONTINUE_^1_$GO TO 169_^1C_]_^1C_!NOTE THAT DESIGNATOR ALREADY USED_^1 168 CALL CLEAR_^1_$ASSIGN 5 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,30,IPRINT(2))_^1_$CALL PRINT_^1_$GO TO 110_^1 169 INDTBL(INDEX) = ICHR_^1_$INDTBL(INDEX+1)=MMADR_^1C_]_^1C_!READ AND STORE RECORDS UNTIL AN *TER RECORD IS NOTED_^1C_!SET IOBUFF INDEX TO 1_^1_$IOIDX = 1_^1C_]_^1C_!GET RECO€€RD AND CHECK FOR *TER_^1 170 CALL NXTREC_^1C_7* T_5E R_^1_$IF (INPBUF(1).EQ.$2A54 .AND. INPBUF(2).EQ.$4552) GO TO 190_^1C_]_^1C_!PUT LENGTH IN IOBUFF AND BUMP INDEX AND WRITE BUFFER IF NEEDED_^1_$IOBUFF (IOIDX) = 40_^1_$CALL INCIDX_^1C_]_^1C_!CLEAR CHECKSUM WORD_^1_$ICHECK = 0_^1C_]_^1C_!TRANSFER INPUT RECORD TO IOBUFF AND ACCUMULATE CHECKSUM_^1_$DO 180 I =1,40_^1_$IOBUFF(IOIDX) €€= INPBUF(I)_^1_$ICHECK = IOBUFF(IOIDX) + ICHECK_^1C_]_^1C_!BUMP INDEX AND UNLOAD IF NEEDED_^1_$CALL INCIDX_^1 180 CONTINUE_^1C_]_^1C_!TRANSFER CHECKSUM TO IOBUFF, BUMP INDEX AND UNLOAD IF NEEDED_^1_$IOBUFF(IOIDX) = ICHECK_^1_$CALL INCIDX_^1C_]_^1C_!GO GET NEXT RECORD_^1_$GO TO 170_^1C_]_^1C_!*TER READ, STORE 0 FOR NO. OF WORDS, WRITE BLOCK, BUMP MM ADDRESS_^1 190 IOBUFF(IOIDX) = €p0_^1_$CALL DISKIO (2,IOBUFF,MMADR)_^1_$MMADR = MMADR + 1_^1C_]_^1C_!CONTINUE AT 100_^1_$GO TO 100_^1_$END_]_^__pPHELP8 CSY/ FTN B16 P€1_$SUBROUTINE HELP8_^1_#1_2/DECK-ID B16 MSOS 4.1_-SUMMARY-079_^1C_#GENERATE LISTING AND NEW OUTPUT LIBRARY_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SEQUENCE NAME IS MAKLIB_**€€_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOBUFF(96),NAMPT€€R(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1C_]_^1C_!THERE ARE NUMDEK PROGRAMS STORED. EXECUTE OUTER DO LOOP NUMDEK_^1€€C_!TIMES._]_^1C_!IF LSTOUT OR LIBOUT NOT 0, LIST LIBRARY._^1C_!IF LIBOUT NOT 0, OUTPUT LIBRARY ON LU SPECIFIED BY LIBOUT._^1C_]_^1_"1 FORMAT (48H*** CHECKSUM ERROR NOTED IN LAST PROGRAM. *** )_^1C_]_^1C_!PRESET ICOUNT TO 0_^1_$ICOUNT = 0_^1C_]_^1C_!IF LSTOUT OR LIBOUT NOT 0, EJECT PAGE._^1_$IF (LSTOUT. EQ.0 .AND. LIBOUT.EQ.0) GO TO 100_^1C_]_^1C_!CLEAR BUFFER, PUT EJECT CODE IN €€WORD 1, PRINT TO CAUSE EJECT_^1_$CALL CLEAR_^1_$IPRINT(1) = $0C00_^1_$CALL PRINT_^1C_]_^1C_!EXECUTE OUTTER LOOP NUMDEK TIMES._^1 100 DO 150 I = 1,NUMDEK_^1C_]_^1C_!SET ITMPTR TO INDTBL(I). GET THE ITEM THEN GET THE PROGRAMS FIRST_^1C_!RECORD._^1_$ITMPTR = I_^1_$CALL GETITM_^1C_]_^1C_!SET MMADR TO ADDRESS-1 OF PGM, SET IOIDX TO 97 TO FORCE READ OF 1ST_^1C_!BLOCK OF STORED PROGRAM€€. CALL GETBIN TO GET RECORD (NAM BLOCK)_^1C_!SET MM ERROR FLAG TO 0_^1_$MMADR = NAMTB6(ITMIDX) -1_^1_$IOIDX = 97_^1_$MMERR = 0_^1_$CALL GETBIN_^1C_]_^1C_!BUMP ICOUNT_^1_$ICOUNT = ICOUNT + 1_^1C_!CLEAR PRINT BUFFER, CONVERT ICOUNT TO DECIMAL AND PUT IN BUFFER_^1_$CALL CLEAR_^1_$PRNIDX = 2_^1_$INUM = ICOUNT_^1_$CALL BINDEC_^1C_]_^1C---_!SAVE POSSIBLE ABSOLUTE FILE INDICATION_^1_$IAB€€BA = INPBUF(2)_^1_$IDABA = INPBUF(3)_^1C_]_^1C_!PUT PROGRAM NAME IN BUFFER_^1_$IPRINT(6) = INPBUF(5)_^1_$IPRINT(7) = INPBUF(6)_^1_$IPRINT(8) = INPBUF(7)_^1C_]_^1C_!CHECK IF COMMENT INFO EXISTS--MOVE IT INTO BUFFER IF SO_^1_$IF (LENGTH.LT.11) GO TO 130_^1_$IL = LENGTH_^1_$IF (IL.GT.40) IL = 40_^1_$DO 120 J = 11,IL_^1 120 IPRINT(J) = INPBUF(J)_^1 130 CALL PRINT_^1C_]_^1C_!IF OUTPUT€€ LIBRARY NOT WANTED, GO TO 150_^1 140 IF (LIBOUT .EQ. 0) GO TO 150_^1C_]_^1C_]_^1C_!OUTPUT BINARY RECORDS TILL DONE. THEN CHECK IF ERROR NOTED._^1 145 CALL OUTBIN_^1_$CALL GETBIN_^1_$IF (LENGTH .NE. 0) GO TO 145_^1_$IF(MMERR.NE.0) GO TO 148_^1C_]_^1C---_!SEE IF PROCESSING ABSOLUTE FILE_^1_$IF(IABBA.NE.$ABBA.OR.IDABA.NE.$DABA) GO TO 150_^1C_]_^1C---_!TRUE - INSERT DELIMITTER RECO€€RD - *(BLANKS)_^1_$DO 146 II = 1,36_^1 146 INPBUF(II) = $2020_^1_$INPBUF(1) = $2A20_^1_$LENGTH = 36_^1_$CALL OUTBIN_^1_$GO TO 150_^1C_]_^1C_!ERROR NOTED. WARN USER._^1 148 CONTINUE_^1_$CALL CLEAR_^1_$ASSIGN 1 TO IADR_^1_$IADR = IADR+ 2_^1_$CALL MOVE (IADR,24,IPRINT(2))_^1_$CALL PRINT_^1 150 CONTINUE_^1C_]_^1C_!IF OUTPUT LIST WANTED, MAKE *END RECORD. SKIP TO 160 IF NOT._^1_$IF€€ (LSTOUT.EQ.0) GO TO 160_^1_$CALL CLEAR_^1_$PRNIDX = 2_^1_$INUM = NUMDEK + 1_^1_$CALL BINDEC_^1_$IPRINT(6) = $2A45_^1_$IPRINT(7) = $4E44_^1_$CALL PRINT_^1C_]_^1C_!IF LIBOUT EQUAL 0, RETURN_^1 160 IF (LIBOUT.EQ.0) RETURN_^1C_]_^1C_!MAKE *END RECORD FOR OUTPUT_^1_$DO 165 I=3,36_^1 165 INPBUF(I) = $2020_^1_$INPBUF(1) = $2A45_^1_$INPBUF(2) = $4E44_^1_$LENGTH = 36_^1_$CALL OUTBIN_^1_€$END_]_^__Q.0) GO TO 160_^1_$CPHELP9 CSY/ FTN B17 P€1_$SUBROUTINE HELP9_^1_#1_2/DECK-ID B17 MSOS 4.1_-SUMMARY-079_^1C_#DEFINE A PROGRAM IN THE DIRECTORY IF IT IS UNIQUE._^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SEQUENCE NAME I€€S DEFINE_**_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOBUF€€F(96),NAMPTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_!SAVE MMADR IN MMASAV_^1_$MMASAV = MMADR+1_^1C_]_^1C_]_^1C_!GET NAM €€BLOCK RECORD OF STORED PROGRAM AND STORE IN NAMBLK ARRAY._^1C_]_^1C_!SET IOIDX TO 97 TO FORCE READ OF 1ST MM BLOCK. GET NAM RECORD._^1_$IOIDX = 97_^1_$CALL GETBIN_^1C_]_^1C_!ASSURE LENGTH NOT 0. ERROR IF SO (NO RETURN FROM ERROR5)_^1_$IF (LENGTH .EQ. 0) CALL ERROR5_^1_$ILEN = LENGTH_^1_$DO 10 I = 1,ILEN_^1_!10 NAMBLK(I) = INPBUF(I)_^1C_]_^1_$NUMDEK = NUMDEK + 1_^1C_]_^1C_!PUT NAM€€E IN NAME ARRAY FOR HASH_^1_$NAME(1) = NAMBLK(5)_^1_$NAME(2) = NAMBLK(6)_^1_$NAME(3) = NAMBLK(7)_^1C_]_^1C_!CALL HASH TO COMPUTE HASH CODE OF NAME_^1_$CALL HASH_^1_$INDEX = ITMIDX_^1C_]_^1C_!CHECK NAME POINTER TABLE TO DETERMINE IF INDEX IS UNIQUE THUS FAR_^1C_!IF NOT UNIQUE, GO TO 30_^1_$ITMPTR = NAMPTR(INDEX)_^1_$IF (ITMPTR.NE.0) GO TO 30_^1C_]_^1C_!SCATTER INDEX IS THUS FAR UNIQ€€UE. PUT THE POINTER TO THE NEXT_^1C_!AVAILABLE V.M. ITEM IN THE NAME POINTER TABLE._^1_$NAMPTR(INDEX) = NXTITM_^1C_]_^1C_!GENERATE V.M. TABLE ITEM FOR THIS PROGRAM. PUT IN 2 ZERO POINTERS_^1C_!AND NAME. BUMP POINTER TO NEXT AVAILABLE ITEM._^1_!20 ITMPTR = NXTITM_^1_$CALL GETITM_^1_$NAMTB1(ITMIDX) = 0_^1_$NAMTB2(ITMIDX) = 0_^1_$NAMTB3(ITMIDX) = NAMBLK(5)_^1_$NAMTB4(ITMIDX) = NAMB€€LK(6)_^1_$NAMTB5(ITMIDX) = NAMBLK(7)_^1_$NAMTB6(ITMIDX) = MMADR_^1_$NXTITM = NXTITM + 1_^1_$RETURN_^1C_]_^1C_]_^1C_!GET V.M. ITEM SPECIFIED BY ITMPTR (INDEX WAS NOT UNIQUE)_^1_!30 CALL GETITM_^1_$ITEMP1 = ITMIDX + 1_^1C_]_^1C_!CHECK IF NAME IN NAM BLOCK IS SAME AS IN THIS V.M. ITEM_^1_$DO 40 I = 5,7,1_^1_$ITEMP1 = ITEMP1 + 1_^1_$IF (NAMBLK(I) .NE. NAMTBL(ITEMP1)) GO TO 80_^1_!40 CO€€NTINUE_^1C_]_^1C_!NAME WAS THE SAME, GET NAME BLOCK OF PREVIOUSLY STORED PROGRAM._^1C_!CALL UNICHK TO DETERMINE IF PROGRAMS ARE IDENTICAL. ICHECK=0 ON_^1C_!RETURN IF PROGRAMS ARE UNIQUE. IF NOT UNIQUE, RETURN IMMEDIATELY,_^1C_!AFTER DECREMENTING NUMDEK._^1C_!SET UP FOR READ OF NAM BLOCK RECORD_^1_!45 MMADR = NAMTB6(ITMIDX)-1_^1_$MMERR = 0_^1_$IOIDX = 97_^1_$CALL GETBIN_^1_$IF (LE€€NGTH .EQ. 0) CALL ERROR5_^1_$ICHECK = 0_^1_$CALL UNICHK_^1_$IF (ICHECK.EQ.0) GO TO 50_^1_$NUMDEK = NUMDEK - 1_^1_$RETURN_^1C_]_^1C_!THE CURRENT PROGRAM IS THUS FAR UNIQUE. CHECK IF 1ST WORD OF ITEM_^1C_!POINTS TO ANOTHER ITEM (PGM WITH SAME NAME). IF SO, GO TO 70_^1_!50 IF (NAMTB1(ITMIDX).NE.0) GO TO 70_^1C_]_^1C_!THE CURRENT PROGRAM IS UNIQUE. THERE ARE NO MORE LINKED PROGRAMS_€€^1C_!WITH SAME NAME._^1C_!SET 1ST WORD OF CURRENT ITEM TO NEXT AVAILABLE ITEM POINTER, THEN_^1C_!GET NEXT AVAILABLE ITEM. STORE NEEDED INFO INTO IT AND BUMP POINTER_^1C_!TO NEXT AVAILABLE ITEM._^1_$NAMTB1(ITMIDX) = NXTITM_^1_$ITMPTR = NXTITM_^1_$CALL GETITM_^1_$DO 60 I=1,5_^1_$INDEX =ITMIDX + I -1_^1_!60 NAMTBL(INDEX) = 0_^1_$NAMTB6(ITMIDX) = MMASAV_^1_$NXTITM = NXTITM + 1_^1_$RET€€URN_^1C_]_^1C_]_^1C_!ANOTHER STORED PROGRAM HAS SAME NAME. GET THE DIRECTORY ITEM FOR_^1C_!THAT PROGRAM THEN CHECK IF IT IS A DUPLICATE. (GO TO 45 TO CHECK)_^1_!70 ITMPTR = NAMTB1(ITMIDX)_^1_$CALL GETITM_^1_$GO TO 45_^1C_]_^1C_]_^1C_!NAME IN NAM BLOCK WAS NOT THE SAME AS IN A V.M. ITEM. CHECK 2ND_^1C_!WORD OF ITEM. IF IT IS 0, NO OTHER NAME EXISTS WITH SAME SCATTER_^1C_!INDEX. €€ IF NOT 0, GO TO 90._^1_!80 IF (NAMTB2(ITMIDX).NE.0) GO TO 90_^1C_]_^1C_!PUT IN POINTER TO NEXT AVAILABLE ITEM AND GO TO 20 TO MAKE ITEM FOR_^1C_!THIS PROGRAM._^1_$NAMTB2(ITMIDX) = NXTITM_^1_$GO TO 20_^1C_]_^1C_!SET ITMPTR TO 2ND WORD OF ITEM (POINTS TO V.M. ITEM WITH DIFFERENT_^1C_!NAME.) THEN GO TO 30 TO CHECK IF NAMES ARE IDENTICAL._^1_!90 ITMPTR = NAMTB2(ITMIDX)_^1_$GO TO 30_^€ 1_$END_]_^__O TO 90._^1_!80 IF ( PHELP10 CSY/ FTN B18 P€1_$SUBROUTINE HELP10_^1_#1_2/DECK-ID B18 MSOS 4.1_-SUMMARY-079_^1C_#OBTAIN A V.M. ITEM, AND CALCULATE ITS INDEX_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SEQUENCE NAME IS GETI€€TM_**_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOBUFF(96),€€NAMPTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1C_]_^1C_!ASSURE ITMPTR IS IN RANGE_^1_$IF(ITMPTR.LT.1 .OR. ITMPTR.GT.1€€024) CALL ERROR4_^1C_]_^1C_!CALCULATE BLOCK NUMBER_^1_$INDEX = (ITMPTR+15)/16_^1C_]_^1C_!CHECK IF BLOCK ALREADY IN CORE_^1_$L=-97_^1_$DO 10 I = L,LIMSPC,-98_^1C_!JUMP TO 40 IF IN CORE_^1_$IF (INDEX.EQ.NAMTBL(I)) GO TO 40_^1_!10 CONTINUE_^1C_]_^1C_!FIND EMPTY CORE SPACE OR LEAST USED BLOCK_^1_$MINUSE = $7FFF_^1_$DO 20 I=L,LIMSPC,-98_^1C_!GO TO 30 IF FREE SPACE FOUND_^1_$IF (NAMTBL€€(I).EQ.$FFFE) GO TO 30_^1_$IF (NAMTBL(I+1).GE.MINUSE) GO TO 20_^1_$MINUSE = NAMTBL(I+1)_^1_$IDXSAV = I_^1_!20 NAMTBL(I+1) = 0_^1C_]_^1C_!RESTORE INDEX OF BLOCK USED THE MINIMUM_^1_$I = IDXSAV_^1C_]_^1C_!WRITE OUT BLOCK TO MM_^1_$CALL DISKIO (2,NAMTBL(I+2),NAMTBL(I))_^1C_]_^1C_!READ IN THE REQUIRED BLOCK_^1_$CALL DISKIO (1,NAMTBL(I+2),INDEX)_^1C_]_^1C_!DEFINE CORE SPACE AS CURRENT B€κLOCK_^1_!30 NAMTBL(I) = INDEX_^1_$NAMTBL(I+1)=1_^1_$GO TO 50_^1C_]_^1C_!INCREMENT USAGE WORD OF DATA BLOCK_^1_!40 NAMTBL(I+1) = NAMTBL(I+1) + 1_^1C_]_^1C_!CALCULATE ITMIDX_^1_!50 ITMIDX= I+2 + 6*((ITMPTR-(INDEX-1)*16)-1)_^1_$END_]_^__κPHELP11 CSY/ FTN B19 P€1_$SUBROUTINE HELP11_^1_#1_2/DECK-ID B19 MSOS 4.1_-SUMMARY-079_^1C_#COMPUTE HASH CODE INDEX FOR PROGRAM NAME_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SEQUENCE NAME IS HASH_,*€€_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IOBUFF(96),NAMPT€€R(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1_$DIMENSION I(6)_^1C_]_^1C_!CONVERT ASCII CODES TO A NEW SET OF CODES WHERE€€ SPACE=0, A=1, B=2,_^1C_!Z=$1A,0=$1B,1=$1C,9=$24,ETC._^1C_!FIRST GET EACH ASCII CHARACTER AND PUT IN THE I ARRAY_^1_$I(1) = NAME(1)/ $100_^1_$I(2)= AND(NAME(1),$FF)_^1_$I(3)= NAME(2)/$100_^1_$I(4)= AND(NAME(2),$FF)_^1_$I(5)= NAME(3)/$100_^1_$I(6)= AND(NAME(3),$FF)_^1_$DO 10 J=1,6_^1C_]_^1C_!CHANGE SPACE CODES TO $3F_^1_$IF(I(J).EQ.$20) I(J)=$3F_^1C_]_^1C_!CHANGE ASCII CODES FOR €Δ0-9 TO $5B-$64_^1_$IF(I(J).LT.$3F) I(J)=$5A+I(J)-$2F_^1C_!SUBTRACT $3F FROM EACH CODE_^1_!10 I(J)=I(J)-$3F_^1_$INDEX=I(1)+I(2)+2*(I(3)+I(4))+4*(I(5)+I(6))_^1_$ITMIDX=AND(INDEX,511)+1_^1_$END_]_^__ΔPHELP12 CSY/ FTN B20 P€1_$SUBROUTINE HELP12_^1_#1_2/DECK-ID B20 MSOS 4.1_-SUMMARY-079_^1C_#OBTAIN PROGRAM FROM MASS MEMORY AND PLACE ON OUTPUT FILE_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SEQUENCE€€ NAME IS GETPGM_**_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97€€),IOBUFF(96),NAMPTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1_$DIMENSION ISAVE(38)_^1_"1 FORMAT (52H*** PROGRAM SPEC€€IFIED BY THIS RECORD NOT FOUND. ***)_^1_"2 FORMAT (48H*** CHECKSUM ERROR NOTED IN LAST PROGRAM. *** )_^1_"3 FORMAT (48H*** PROGRAM HAVING THIS ID INFO NOT FOUND. *** )_^1_"4 FORMAT (54H*** MORE THAN ONE PGM HAS THIS NAME (NO ID INFO.) ***_^1_#1)_]_^1C_]_^1C_]_^1C_!THE PROGRAM NAME IS DEFINED IN THE NAME ARRAY._^1C_!IANY INDICATES THE USE OF IDENTIFICATION INFORMATION_^1C_#IA€€NY=0 IMPLIES DO NOT CHECK ID_^1C_#IANY=1 IMPLIES DO CHECK ID. THE ID INFO WILL BE IN THE IDENT_^1C_$ARRAY. IDLEN SPECIFIES THE NUMBER OF CHARS IN IDENT._^1C_]_^1C_!SAVE 1ST 38 WORDS OF CURRENT INPUT RECORD FOR POSSIBLE USE LATER_^1_$DO 100 I=1,38_^1 100 ISAVE(I) = INPBUF(I)_^1C_]_^1C_!CALL HASH TO COMPUTE HASH CODE INDEX_^1_$CALL HASH_^1_$INDEX = ITMIDX_^1C_]_^1C_!CHECK NAME PO€€INTER TO DETERMINE IF INDEX HAS BEEN USED._^1_$ITMPTR = NAMPTR(INDEX)_^1_$IF (ITMPTR.NE.0) GO TO 130_^1C_]_^1C_!ERROR--NAME NOT DEFINED--GIVE WARNING, PRINT CONTROL RECORD AND_^1C_!RETURN_]_^1 115 CALL CLEAR_^1_$ASSIGN 1 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,26,IPRINT(2))_^1 120 CALL PRINT_^1_$CALL CLEAR_^1_$DO 125 I=1,36_^1 125 IPRINT(I+4) = ISAVE(I)_^1_$CALL PRINT_^1€€_$RETURN_^1C_]_^1C_!GET SPECIFIED ITEM AND SAVE 1ST TWO WORDS. THEN CHECK IF THE NAMES_^1C_!ARE THE SAME. IF NOT, GO TO 260_^1 130 CALL GETITM_^1_$ITEM1=NAMTB1(ITMIDX)_^1_$ITEM2=NAMTB2(ITMIDX)_^1_$IF (NAME(1).NE.NAMTB3(ITMIDX) .OR. NAME(2).NE.NAMTB4(ITMIDX) .OR._^1_#1 NAME(3).NE.NAMTB5(ITMIDX)) GO TO 260_^1C_]_^1C_!NAME WAS THE SAME. SET MM ADDRESS TO ADDRESS-1 OF PROGRAM, SET_€€^1C_!IOIDX TO 97 TO FORCE READ OF 1ST BLOCK OF STORED PROGRAM. SET MM_^1C_!ERROR FLAG TO 0 AND CALL GETBIN TO GET RECORD._^1 135 MMADR = NAMTB6(ITMIDX) - 1_^1_$IOIDX = 97_^1_$MMERR = 0_^1_$CALL GETBIN_^1C_]_^1C_!ASSURE NON-ZERO LENGTH--ERROR IF 0 (NO RETURN)_^1_$IF (LENGTH .EQ. 0) CALL ERROR5_^1C_]_^1C_!CHECK IANY. IF IANY=0, NO IDENT INFO CHECK IS NEEDED._^1_$IF (IANY .EQ. 0) G€€O TO 250_^1C_!CHECK IS NEEDED._^1C_]_^1C_!SKIP OVER LEADING SPACES IN IDENT FIELD OF NAM BLOCK_^1_$INPIDX = 20_^1 140 CALL GETCHR_^1C_]_^1C_!IF THIS CHAR IS A SPACE, GET NEXT_^1_$IF (ICHR.EQ.$20) GO TO 140_^1C_]_^1C_!ASSURE THAT NAM BLOCK IS LONG ENOUGH_^1_$ITEST = (INPIDX+IDLEN)/2_^1_$IF (ITEST.LE.LENGTH) GO TO 150_^1C_]_^1C_!CHARACTERS ARE NOT THE SAME. CHECK ITEM1 TO DETERMINE€€ IF MORE PGMS_^1C_!HAVE THE SAME NAME._^1 145 IF (ITEM1 .EQ. 0) GO TO 147_^1C_]_^1C_!MORE PROGRAMS EXIST. SET ITMPTR TO ITEM1, GET THE V.M. ITEM, RESET_^1C_!ITEM1 AND ITEM2 AND CONTINUE AT 135._^1_$ITMPTR = ITEM1_^1_$CALL GETITM_^1_$ITEM1=NAMTB1(ITMIDX)_^1_$ITEM2=NAMTB2(ITMIDX)_^1_$GO TO 135_^1C_]_^1C_!NO MORE EXIST WITH THIS NAME--PUT WARNING IN IPRINT AND CONTINUE_^1C_!AT 120_]€€_^1 147 CALL CLEAR_^1_$ASSIGN 3 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,24,IPRINT(2))_^1_$GO TO 120_^1C_]_^1C_!NAM BLOCK IS LONG ENOUGH. CHECK IF IDENTS MATCH._^1C_!CHECK IDLEN CHARACTERS._^1 150 INPIDX = INPIDX -1_^1_$DO 160 I = 1,IDLEN_^1_$CALL GETCHR_^1_$INDEX = (I+1)/2_^1_$IICHR = IDENT(INDEX)/$100_^1_$IF (AND(I,1).EQ.0) IICHR = AND(IDENT(INDEX),$00FF)_^1_$IF (ICHR.N€€E.IICHR) GO TO 145_^1 160 CONTINUE_^1C_]_^1C_!THIS DECK IS THE NEEDED DECK. PRINT AN APPROPRIATE LINE FOR IT THEN_^1C_!OUTPUT THE PROGRAM_^1 170 CALL CLEAR_^1_$IRECNO = IRECNO + 1_^1_$PRNIDX = 2_^1_$INUM = IRECNO_^1_$CALL BINDEC_^1C_]_^1C_!PUT PGM NAME IN BUFFER_^1_$IPRINT(6) = INPBUF(5)_^1_$IPRINT(7) = INPBUF(6)_^1_$IPRINT(8) = INPBUF(7)_^1C_]_^1C_!CHECK IF COMMENT INFO EXISTS,€€ GO TO 190 IF NOT_^1_$IF (LENGTH.LT.11)GO TO 190_^1C_]_^1C_!TRANSFER ID INFO TO PRINT BUFFER_^1_$LEN = LENGTH_^1_$IF(LEN.GT.40) LEN = 40_^1_$DO 180 I = 11, LEN_^1 180 IPRINT(I) = INPBUF(I)_^1C_]_^1C_!PRINT RECORD_^1 190 CALL PRINT_^1C_]_^1C--- SEE IF PSEUDO NAM BLOCK_^1_$IF(INPBUF(2).EQ.$ABBA.AND.INPBUF(3).EQ.$DABA) GO TO 205_^1C_]_^1C_!OUTPUT BINARY RECORDS TILL DONE. THEN CH€€ECK IF MM ERROR NOTED._^1 200 CALL OUTBIN_^1 205 CONTINUE_^1_$CALL GETBIN_^1_$IF (LENGTH .NE. 0) GO TO 200_^1C_]_^1C_!IF NO MM ERROR, RETURN_^1_$IF (MMERR.EQ.0) RETURN_^1C_]_^1C_!ERROR NOTED. WARN USER. PRINT WARNING,THEN RETURN_^1_$CALL CLEAR_^1_$ASSIGN 2 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,24,IPRINT(2))_^1_$CALL PRINT_^1_$RETURN_^1C_]_^1C_!ID CHECK NOT SPECIFIED--€€CHECK IF MORE PGMS HAVE SAME NAME--PRINT_^1C_!WARNING IF SO. IF NOT, GO TO 170_^1 250 IF (ITEM1.EQ.0) GO TO 170_^1C_]_^1C_!PRINT WARNING_^1_$CALL CLEAR_^1_$ASSIGN 4 TO IADR_^1_$IADR = IADR + 2_^1_$CALL MOVE (IADR,27,IPRINT(2))_^1_$CALL PRINT_^1C_!GO TO 170 TO OUTPUT PROGRAM_^1_$GO TO 170_^1C_]_^1C_!THE PROGRAM NAME DID NOT MATCH THE SPECIFIED NAME._^1C_!CHECK ITEM2 TO DETERMINE I€ΖF THERE ARE OTHER NAMES WITH SAME SCATTER_^1C_!INDEX. IF NOT, GO TO 115. IF SO, SET ITMPTR TO ITEM2 AND GO TO 130_^1 260 IF (ITEM2 .EQ. 0) GO TO 115_^1_$ITMPTR = ITEM2_^1_$GO TO 130_^1_$END_]_^__ΖPHELP13 CSY/ FTN B21 P€1_$SUBROUTINE HELP13_^1_#1_2/DECK-ID B21 MSOS 4.1_-SUMMARY-079_^1C_#OBTAIN A BINARY RECORD FROM A PROGRAM ON MASS MEMORY_^1C_#1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1C_#SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1C_#COPYRIGHT CONTROL DATA CORPORATION 1973_^1C_]_^1C_]_^1C_(**************************************************_^1C_(*_O*_^1C_(*_(CALL SEQUENCE NAM€€E IS GETBIN_**_^1C_(*_O*_^1C_(**************************************************_^1C_(****_$COMMON DECLARATIONS_%****_^1_$INTEGER PRNIDX,SKELLU_^1_$COMMON//LUIN,LSTOUT,LUBOUT,SKELLU,IDFLEN,LIBOUT,MMERR,ICHECK,ILEN,_^1_#1 MMADR,ISELEC,LIMSPC,PRNIDX,INPIDX,IOIDX,LENGTH,INUM,ICHR,IANY,_^1_#1 IDLEN,ITMPTR,ITMIDX,IRECNO,NXTITM,NUMDEK,NAMBLK(60),INDTBL(60),_^1_#1 IPRINT(40),INPBUF(97),IO€€BUFF(96),NAMPTR(512),IDENT(25),NAME(3),_^1_#1 IVALS(11,3),ISHORT(6)_^1C_]_^1_$DIMENSION NAMTBL(6),NAMTB1(1),NAMTB2(1),NAMTB3(1),NAMTB4(1),_^1_#1 NAMTB5(1),NAMTB6(1)_^1C_]_^1_$EQUIVALENCE (LUIN,NAMTBL,NAMTB1),(NAMTBL(2),NAMTB2),_^1_#1(NAMTBL(3),NAMTB3),(NAMTBL(4),NAMTB4),(NAMTBL(5),NAMTB5),_^1_#1(NAMTBL(6),NAMTB6)_^1C_]_^1C_]_^1C_!INPUT THE NEXT SECTOR IF ALL OF PREVIOUS BLOCK IS US€€ED._^1_$IF (IOIDX .NE. 97) GO TO 10_^1_$MMADR = MMADR + 1_^1_$CALL DISKIO (1,IOBUFF,MMADR)_^1_$IOIDX = 1_^1C_]_^1C_!SET LENGTH TO NUMBER OF WORDS IN CURRENT RECORD. IF ZERO, RETURN_^1_!10 LENGTH = IOBUFF(IOIDX)_^1_$NUMREM = LENGTH_^1_$IF (NUMREM .EQ. 0) RETURN_^1C_]_^1C_!CLEAR CHECKSUM WORD_^1_$ICHECK = 0_^1C_]_^1C_!SET INDICES, IF ALL PREVIOUS WORDS USED, GET NEXT BLOCK_^1_$IOIDX€€ = IOIDX + 1_^1_$IOUT = 1_^1_$IF (IOIDX .NE. 97) GO TO 30_^1_!20 MMADR = MMADR + 1_^1_$CALL DISKIO (1,IOBUFF,MMADR)_^1_$IOIDX = 1_^1C_]_^1C_!SET NUMBER OF WORDS TO TRANSFER TO INPUT BUFFER_^1_!30 NWORDS = 97 - IOIDX_^1_$IF (NWORDS .GT. NUMREM) NWORDS = NUMREM_^1C_]_^1C_!TRANSFER THE WORDS TO INPBUF_^1_$DO 40 J = 1, NWORDS_^1_$INPBUF(IOUT) = IOBUFF(IOIDX)_^1C_]_^1C_!ACCUMULATE CHEC€€KSUM_^1_$ICHECK = INPBUF(IOUT) + ICHECK_^1_$IOUT = IOUT +1_^1_!40 IOIDX = IOIDX + 1_^1C_]_^1C_!COMPUTE NUMBER OF REMAINING WORDS, IF NON-ZERO, CONTINUE_^1_$NUMREM = NUMREM - NWORDS_^1_$IF (NUMREM .NE. 0) GO TO 20_^1C_]_^1C_!GET NEXT BLOCK IF CHECKSUM NOT IN CURRENT_^1_$IF (IOIDX .NE.97) GO TO 50_^1_$MMADR = MMADR + 1_^1_$CALL DISKIO (1,IOBUFF,MMADR)_^1_$IOIDX = 1_^1C_]_^1C_!CHECK I€ F TWO CHECKSUMS AGREE, BUMP MMERR IF NOT_^1_!50 IF (ICHECK.NE.IOBUFF(IOIDX)) MMERR = MMERR+1_^1C_]_^1C_!BUMP IOIDX_^1_$IOIDX = IOIDX + 1_^1_$END_]_^1 MON_]_^__ PSKED CSY/ B23 P€1_%NAM SKED_)DECK-ID B23 MSOS 4.1_-SUMMARY-079_^1_%ENT SKED_^1************************************************************************_^1* PROGRAM TO LOAD THE SKELETON EDITOR PROGRAM._^1* MAKE A GTFILE REQUEST FOR SKFILE, WHICH IS LOADED OVER SKED_^1* STARTING AT THE SAME LOACATION AS SKED (THE BEGINNING OF UNPROTECTED_^1* CORE). CONTROL IS PICKED UP BY SKFILE IN THE THREAD WOR€€D CHECK LOOP_^1* BUSYCK. WHEN THE TRANSFER IS COMPLETE AND NO ERRORS HAVE OCCURRED,_^1* THE SKELETON EDITOR BEGINS EXECUTING AT SKSTRT._^1************************************************************************_^1_%EQU ADISP($EA),AMONI($F4)_^1SKED_!RTJ- (AMONI)_%GTFILE REQUEST_^1P_$ADC $5A01_^1_%ADC 0_^1SKDTHD ADC 0_^1SKDSTA ADC $8C2_^1_%ADC 0_^1_%ADC SKED_^1_%ADC 0_^1_%AD€XC SNAME-P_^1_%ADC 0_^1_%ADC 0_^1_%SPC 1_^1BUSYCK LDA* SKDTHD_'WAIT FOR TRANSFER COMPLETE_^1_%SAZ 1_^1_%JMP* BUSYCK_^1_%LDA* SKDSTA_'CHECK FOR READ ERROR_^1_%SAP SKSTRT_'NO ERROR - BEGIN PROGRAM_^1_%JMP- (ADISP)_%ERROR - EXIT_^1SNAME ALF 3,SKFILE_^1SKSTRT NOP_]_^1_%JMP- (ADISP)_%ERROR IF PROGRAM TRIES TO EXECUTE THIS_^1_%END SKED_^__XPSKFILE CSY/ B24 P€1_%NAM SKFILE_'DECK-ID B24 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1* THIS PROGRAM EDITS THE SKELETON FILE FOR USE BY THE SYSTEM BUILDER._^1* IT €€CAN BUILD THE SKELETON FILE FROM THE INSTALLATION FILE OR LOAD_^1* AN EXISTING SKELETON FILE FROM VARIOUS SPECIFIED DEVICES. IT CAN_^1* THEN DUMP THE EDITED SKELETON FILE ONTO A SPECIFIED DEVICE. THE_^1* AVAILABLE COMMANDS ARE_^1*_]_^1* LIST_-LIST THE COMMANDS AVAILABLE_^1* COMAND,LU_(SET THE COMMAND INPUT TO DEVICE LU (INITIALLY THE_^1*_2CONSOLE)_^1* BUILD,LU_)READ THE INSTALLAT€€ION FILE FROM DEVICE LU AND BUILD_^1*_2THE SKELETON FILE IN THE SCRATCH AREA_^1* LOAD,LU_*READ THE SKELETON FILE FROM DEVICE LU INTO THE_^1*_2SCRATCH AREA_^1* CATLOG,N1,N2_$LIST RECORDS NUMBERED N1 THROUGH N2 OF THE SKELETON._^1*_2IF N1 ONLY IS REQUESTED, ONE RECORD WILL BE LISTED._^1*_2IF NO RECORD NUMBERS ARE INCLUDED, THE ENTIRE_^1*_2SKELETON FILE IS LISTED AND RESEQUENCED._^1* €€DELETE,N1,N2_$DELETE RECORD NUMBERS N1 THROUGH N2 INCLUSIVELY_^1* INSERT,N,LU_%READ NEW RECORDS FROM DEVICE LU AND INSERT THEM_^1*_2AFTER RECORD NUMBER N_^1* CHANGE,ILU1,LU2_!CHANGE ALL *K,ILU1 CONTROL STATEMENTS TO LU2_^1* DUMP,LU_*WRITE SKELETON ONTO DEVICE LU_^1* REW,LU_+REWIND DEVICE LU (LU=SK FOR S2ELETON)_^1* UNL,LU_+UNLOAD DEVICE LU_^1* ADF,LU,N_)ADVANCE N FILES ON LU_^1* BS€€F,LU,N_)BACKUP N FILES ON LU_^1* ADR,LU,N_)ADVANCE N RECORDS ON LU/SK_^1* BSR,LU,N_)BACKUP N RECORDS ON LU/SK_^1* WEF,LU,N_)WRITE N FILE MARKS ON LU_^1* EXIT_-RETURN TO MONITOR_^1*_]_^1* TO RUN SKED, THE USER MUST TYPE *SKED TO THE JOB PROCESSOR._^1* WHEN SKED IS LOADED, IT WILL PRINT OUT 'SKED IN' FOLLOWED BY 'NEXT'._^1* WHENEVER THE PROGRAM IS READY FOR A NEW COMMAND, IT PRINTS '€€NEXT'._^1* ALL COMMANDS MUST BE FOLLOWED BY A CARRIAGE RETURN IF ENTRY IS DONE_^1* VIA THE CONSOLE. COMMAS ARE REQUIRED AS SHOWN AND NO SPACES ALLOWED._^1* ABBREVIATION OF THE COMMAND NAME IS ALLOWED AS LONG AS ENOUGH CHARAC-_^1* TERS HAVE BEEN ENTERED TO SPECIFY A UNIQUE NAME._^1* APPROPRIATE ERROR MESSAGES WILL BE OUTPUT IDENTIFYING VARIOUS ERROR_^1* CONDITIONS._^1* EACH RECORD €€IN THE SKELETON FILE POINTS TO THE RECORD PRECEDING IT_^1* AND THE RECORD FOLLOWING IT. THIS FACILITATES INSERTING AND DELETING_^1* RECORDS BY CHANGING THESE POINTERS. INSERTED RECORDS ARE PHYSICALLY_^1* ADDED TO THE END OF THE FILE._^1* RECORD NUMBERS REFER TO THE STATE OF THE FILE WHEN IT WAS LAST_^1* RESEQUENCED AND WOULD NOT TAKE INTO ACCOUNT ANY INHERENT RESEQUENCING_^1* NECES€€SARY DUE TO INSERTED OR DELETED RECORDS._^1* A COMPLETE RESEQUENCING OF RECORD NUMBERS TAKES PLACE ONLY ON THE_^1* DUMP COMMAND AND ON A CATLOG COMMAND WITHOUT ARGUMENTS._^1* IN THE SKELETON FILE, TWO RECORDS ARE WRITTEN IN EACH SECTOR. THE_^1* POSITION OF A RECORD IN A SECTOR IS 0 IF IT OCCUPIES THE FIRST HALF_^1* OF THAT SECTOR AND 1 IF IT OCCUPIES THE LAST HALF._^1*_]_'*_^1*****€€*******************************************************************_^1_%SPC 2_^1_%ENT SKFILE_^1_%EXT LOG1A_^1_%EQU OUTCOM($FC),INCOM($FD),OUTLST($FB),BLANK($28)_^1_%EQU CRLF($0D0A)_^1_%EQU EOL($A)_^1*_$THESE POINT TO THE FIRST 6 WORDS OF THE INFO BLOCK_^1_%EQU NSECT(40)_#SECTOR OF NEXT RECORD_^1_%EQU NPOST(41)_#POSITION OF NEXT RECORD_^1_%EQU PSECT(42)_#SECTOR OF PREVIOUS €€RECORD_^1_%EQU PPOST(43)_#POSITION OF PREVIOUS RECORD_^1_%EQU FMPONT(44)_"FILE MARK_^1_%EQU RNPONT(45)_"RECORD NUMBER_^1*_]_^1_%EQU IGNORE($21),LPMASK(2)_^1_%EQU AMONI($F4),ONEBIT($23),ADISP($EA),NZERO($12),ZERO($22)_^1_%EQU SCRDEV($B3)_^1_%EQU EYE($49)_^1_%EQU ACON($46)_^1_%EQU DELSIZ(501)_!SIZE OF DELETE TABLE (DELTAB)_^1_%EJT_]_^1****************************************€€********************************_^1*_]_'*_^1* PROGRAM LOAD, ENTRY AND INITIALIZATION SECTION_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1SKFILE RTJ- (AMONI)_%GTFILE REQUEST_^1P_$ADC $5A01_^1_%ADC 0_^1SKDTHD NUM $FFFF_^1SKDSTA ADC $8C2_^1_%ADC 0_^1_%ADC SKFILE_^1_%ADC 0_^1_%ADC SNAME-P_^1_%ADC 0_^1_%ADC 0_^1_%SPC 1_^1B€€USYCK LDA* SKDTHD_'WAIT FOR TRANSFER COMPLETE_^1_%SAZ 1_^1_%JMP* BUSYCK_^1_%LDA* SKDSTA_'CHECK FOR READ ERROR_^1_%SAP SKSTRT_'NO ERROR - BEGIN PROGRAM_^1_%JMP- (ADISP)_%ERROR - EXIT_^1SNAME ALF 3,SKFILE_^1_%SPC 2_^1SKSTRT CLR A_,INITIALIZATION_^1_%STA* COMANF_'CLEAR COMAND FLAG_^1_%STA LOADED_'CLEAR SKEL FILE LOADED FLAG_^1_%STA* ENDFIL_'ZERO END OF FILE LOCATION_^1_%STA EN€€UFLG_^1_%LDA- NZERO_^1_%STA DELTAB_'END OF DELETE TABLE INDICATOR_^1_%RAO OUTSW_^1_%RTJ MESAGE_'PRINT SKED IN_^1_%ADC MSG1B_^1_%ADC MSG1E-MSG1B_^1_%CLR A_^1_%STA OUTSW_^1_%STA RETFLG_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1* ENTRY POINT TO COMMAND PROCESSOR FOR NEXT COMMAND_2*_^1* CLEAR COMMAND INPUT BUFFER AND FLAGS€€. PRINT 'NEXT', READ COMMAND_!*_^1* AND GO TO TSTCMD TO LOOK UP THE COMMAND. ENTRY IS AT COMWAT._%*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1COMWAT LDA* COMANF_'CHECK WHERE GETTING COMMANDS_^1_%SAZ STDIO-*-1_#CONSOLE_^1_%JMP* NOTSTD_^1STDIO LDA- INCOM_(SET UP REQUEST CALLS WITH STD DEVICE LU,S_^1_%EOR ONEBIT+12_#SET FOR €€ASCII_^1_%STA INDEV_^1_%LDA- OUTCOM_^1_%JMP* OUTNEX_^1NOTSTD STA INDEV_(LU OF INPUT_^1_%LDA- OUTLST_'OUTPUT ON SLD_^1OUTNEX EOR- ONEBIT+12_^1_%STA OUTDEV_^1_%RTJ CLRBFI_'CLEAR INPUT BUFF (FILL WITH F'S)_^1_%CLR A_^1_%STA* EXPCOM_'ZERO EXPECTING-COMMA FLAG_^1_%STA COMMAF_'ZERO COMMA FLAG_^1_%STA ALWAYS_'ZERO ALWAYS-READ FLAG_^1_%STA STREND_'ZERO *END FLAG_^1_%STA SECTOR_'ZE€€RO LAST-SECTOR-READ-INDICATOR_^1_%STA EOLFLG_'ZERO EOL INDICATOR_^1_%STA SKFLAG_^1_%STA RESEQF_'CLEAR RESEQUENCE FLAG_^1_%STA PGLNCT_^1_%STA MTFLAG_^1NEXMSG RTJ MESAGE_'PRINT 'NEXT'_^1_%ADC MSG2B_^1_%ADC MSG2E-MSG2B_^1_%RTJ GETCOM_'INPUT COMMAND_^1_%JMP NEXMSG_'TIMEOUT - ASK FOR 'NEXT' AGAIN_^1_%RTJ GETCHR_'TEST 1ST CHAR FOR BLANK_^1_%JMP ALDONE_'END OF LINE_^1TRYBLN SU€€B- BLANK_^1_%SAZ ALDONE-*-1_"YES_^1_%JMP TSTCMD_'NO - GO LOOK UP COMMAND_^1ALDONE EXIT_^1COMANF NUM 0_,COMAND FLAG =0 IF USING SICD AND SOCD_^1*_D=LU OF INPUT DEVICE OTHERWISE_^1ENDFIL NUM 0_,END OF FILE LOCATION_^1EXPCOM NUM 0_,EXPECTING-COMMA FLAG_^1_%EJT_]_^1_%SPC 2_^1************************************************************************_^1*_$THIS SUBPROGRAM TESTS THE IN€€PUT COMMAND BY SEARCHING A TABLE OF_^1*_"LEGAL EDITOR COMMANDS. THE INPUT CAN BE ANY LENGTH (UP TO SIX_^1*_"CHARACTERS). IF THE INPUT IS OVER SIX CHARACTERS AND DOES NOT MATCH_^1*_"THE TABLE OR MATCHES MORE THAN ONE ENTRY, THE COMMAND IS CONSIDERED_^1*_"ILLEGAL AND A MESSAGE IS PRINTED._^1*_$THE SEARCH IS PERFORMED BY SCANNING COLUMNS IN THE TABLE_^1*_"UNTIL A MATCH IS FOUND OR THE€€ COMMAND IS CONSIDERED ILLEGAL._^1*_!ENTRY IS AT TSTCMD._^1************************************************************************_^1_%SPC 2_^1_%EQU ETX($FF)_^1_%EQU COM($2C)_^1_%EQU THREE($4)_^1_%SPC 1_^1COUNT NUM 0_,COUNT OF MATCHES IN THIS COLUMN_^1Y_$NUM 0_,CHARACTER IN COMMAND TABLE ($8000=RT)_^1XWORD NUM 0_,WORD POS OF COMMAND TABLE_^1XCHAR NUM 0_,INPUT CHARACTER€€_^1MATCHX NUM 0_,MATCH INDEX_^1_%SPC 2_^1*_$ENTRY FROM COMMAND PROCESSOR_^1_%SPC 2_^1TSTCMD RTJ TPLFCR_'OUTPUT LINE FEED, CARRIAGE RETURN_^1_%ENQ 0_,CLEAR Q REGISTER (LOC POINTER OF INPUT COMD)_^1_%STQ- I_,CLEAR I REGISTER (POINTER FOR COMMAND JMP)_^1_%STQ* Y_,INITIALIZE THE FOLLOWING_^1_%STQ CCOUNT_'CLEAR INPUT CHAR POINTER_^1_%STQ* XWORD_^1_%STQ* COUNT_^1_%RTJ CLRMTC_'CLEA€€R MATCH TABLE_^1_%SPC 2_^1XYZ_"RTJ GETCHR_'GET CHARACTER_^1_%JMP COMEND_'END OF LINE_^1_%STA* XCHAR_(STORE IT_^1_%SUB- BLANK_(IS IT A BLANK_^1_%SAN XYZTST_'NO_^1_%JMP COMEND_'YES - ASSUME END OF INPUT_^1XYZTST ADD- BLANK_^1_%RTJ* FLAG_)IS THIS THE END OF THE INPUT_^1*_8END OF LINE OR COMMA--IF COMMA SET FLAG_^1_%SAN XGET0_(NO_^1_%JMP* COMEND_^1XGET0 ENQ 0_^1_%STQ COUNT_^1_€€%STQ I_^1_%LDA EXPCOM_'SHOULD IT BE THE END_^1_%SAN XGETOO_^1_%JMP* XGET_)NO_^1XGETOO JMP FORMER_^1_%JMP FORMER_'YES-FORMAT ERROR_^1_%SPC 2_^1COMEND LDA COUNT_(GET NUMBER OF MATCHES_^1_%SAN AMATCH_^1_%JMP INVCMD_'NO MATCHES - INVALID COMMAND_^1AMATCH INA -1_^1_%SAN NONUNQ_'IS THE MATCH UNIQUE_^1_%JMP* XEND5_(YES - OK_^1NONUNQ ENQ 8_,NO_^1_%JMP ERMSG_(ERROR_^1_%SPC 2_^€€1XEND5 LDQ MATCHX_'GET THE INDEX TO DISPATCH TABLE_^1_%LDQ DISTAB,Q_$GET DISPATCH ADDR_^1_%JMP- (ZERO),Q_$GO THERE_^1_%EJT_]_^1*_$SEARCH THIS COLUMN FOR A MATCH CONTINUE ON DOWN LIST UNTIL THE_^1*_"END OF THE LIST IS REACHED._^1_%SPC 2_^1XGET_!LDQ* XWORD_(LOAD WORD POINTER FOR TABLE_^1_%RTJ* GTCHR_(GET CHAR FROM COMMAND TABLE_^1_%EOR* XCHAR_(IS THERE A MATCH_^1_%SAN NOTFD_(NO_€€^1_%LDA MATCH,I_%YES, WAS THERE A PRIOR MATCH_^1_%SAN NOTFD_(NO_^1_%LDA- I_,YES - SAVE THE INDEX_^1_%STA MATCHX_^1_%CLR A_^1_%RAO* COUNT_^1NOTFD STA* MATCH,I_^1_%INQ 3_,INCREMENT TO NEXT CHAR IN COLM OF TABLE_^1_%TRQ A_^1_%INA -LISTLN_%IS THIS COLUMN COMPLETE_^1_%SAP XEND_)YES_^1_%RAO- I_,NO, CONTINUE_^1_%JMP* XGET+1_^1_%EJT_]_^1*_$SEE IF THE NUMBER OF MATCHES IS GREATER T€€HAN 1. IF GREATER, RESET_^1*_"AND GO TO THE NEXT COLUMN. IF ZERO, AN INVALID COMMAND WAS INPUT._^1_%SPC 2_^1XEND_!LDA* COUNT_(WERE THERE ANY MATCHES_^1_%SAN CONSRH_'YES_^1_%JMP INVCMD_'NO-ERROR_^1CONSRH LDA CCOUNT_'CONTINUE SEARCHING_^1_%INA -7_+HAS ENTIRE INPUT COMMAND BEEN SEARCHED_^1_%SAM XEND2_(NO_^1_%RAO EXPCOM_'YES- EXPECTING COMMA OR BLANK_^1XEND2 LDA* Y_,SET UP TO G€€ET THE OTHER CHARACTER OF WORD_^1_%EOR- ONEBIT+15_#REVERSE THE VALUE OF Y_^1_%STA* Y_^1_%SAM X1_+DO THE RIGHT CHARACTER_^1_%RAO* XWORD_(MOVE WORD COUNTER DOWN LIST AND DO LEFT CH_^1X1_#JMP* XYZ_^1_%EJT_]_^1*_$SCAN FOR A (CR) OR A COMMA._!IF FOUND, THE A-REGISTER WILL_^1*_"BE RETURNED AS ZERO._!IF NOT FOUND, A-REGISTER WILL BE NON-_^1*_"ZERO._]_^1_%SPC 2_^1FLAG_!NOP 0_^1_%INA -C€€OM_^1_%SAN NOTCOM_'NOT A COMMA_^1_%RAO COMMAF_'SET COMMA FLAG_^1_%JMP* XFLAG_^1NOTCOM SUB ETX-COM_^1XFLAG JMP* (FLAG)_^1_%SPC 2_^1*_$THIS ROUTINE GETS ONE CHAR FROM THE COMMAND TABLE AND RIGHT_^1*_"JUSTIFIES IT IN THE A-REGISTER._^1_%SPC 2_^1SAVEQ NUM 0_^1_%SPC 1_^1GTCHR NOP 0_^1_%STQ* SAVEQ_^1_%LDQ* COMNDS,Q_^1_%LDA* Y_^1_%SAZ GT2_^1_%QLS 8_^1GT2_"LLS 8_^1_%LDQ* SAVE€€Q_^1_%JMP* (GTCHR)_^1_%SPC 2_^1CLRMTC 0_"0_,CLEAR MATCH TABLE_^1_%ENA LISTLN_^1_%DVI- THREE_^1_%TRA Q_^1_%CLR A_^1CLRCEL STA MATCH-1,Q_^1_%INQ -1_^1_%SQZ CLDUN_^1_%JMP* CLRCEL_^1CLDUN JMP* (CLRMTC)_^1_%SPC 2_^1TPLFCR 0_"0_,OUTPUT A LINE FEED, CARRIAGE RETURN_^1_%RTJ MESAGE_^1_%ADC MLFCR_^1_%NUM 1_^1_%JMP* (TPLFCR)_^1MLFCR ADC CRLF_^1_%EJT_]_^1*_$LIST OF POSSIBLE COMMA€€NDS_^1_%SPC 1_^1COMNDS ALF 3,LIST_^1_%ALF 3,BUILD_^1_%ALF 3,LOAD_^1_%ALF 3,CATLOG_^1_%ALF 3,DELETE_^1_%ALF 3,INSERT_^1_%ALF 3,DUMP_^1_%ALF 3,COMAND_^1_%ALF 3,CHANGE_^1_%ALF 3,EXIT_^1_%EQU STPLAC(*-COMNDS)_$MAG TAPE COMMANDS START HERE_^1_%ALF 3,REW_^1_%ALF 3,ADR_^1_%ALF 3,BSR_^1_%ALF 3,ADF_^1_%ALF 3,BSF_^1_%ALF 3,WEF_^1_%ALF 3,UNL_^1_%EQU LISTLN(*-COMNDS)_^1_%SP€€C 1_^1MATCH BZS MATCH(LISTLN/3) TABLE OF PRIOR MATCHES (0=MATCH)_^1_%SPC 3_^1*_$DISPATCH TABLE_^1DISTAB ADC LIST_^1_%ADC BUILD_^1_%ADC LOAD_^1_%ADC CATLOG_^1_%ADC DELETE_^1_%ADC INSERT_^1_%ADC DUMP_^1_%ADC COMAND_^1_%ADC CHANGE_^1_%ADC ALDONE_^1_%ADC MGTAPE_^1_%ADC MGTAPE_^1_%ADC MGTAPE_^1_%ADC MGTAPE_^1_%ADC MGTAPE_^1_%ADC MGTAPE_^1_%ADC MGTAPE_^1_%SPC 2_^1*€€_$TABLE OF FUNCTION CODES FOR TAPE OPERATION_^1MGFUNC NUM $3000_(REWIND_^1_%NUM $7000_(ADVANCE RECORD_^1_%NUM $1000_(BACKSPACE RECORD_^1_%NUM $5000_(ADVANCE FILE_^1_%NUM $6000_(BACKSPACE FILE_^1MGWEF NUM $2000_(WRITE FILE MARK_^1_%NUM $4000_(UNLOAD_^1_%EJT_]_^1************************************************************************_^1*_$PRINT OUT A LIST OF POSSIBLE COMMANDS€€_^1************************************************************************_^1_%SPC 2_^1LIST_!RAO OUTSW_^1_%RTJ MESAGE_^1_%ADC MSG0B_^1_%ADC MSG0E-MSG0B_^1_%CLR A_^1_%STA OUTSW_^1_%JMP COMWAT_^1_%EJT_]_^1************************************************************************_^1*_]_^1* THIS SECTION ALLOWS YOU TO CHANGE THE COMMAND INPUT DEVICE. IF INPUT_^1* IS FROM A DEVIC€€E OTHER THAN THE STANDARD INPUT COMMENT DEVICE, THE_^1* MESSAGES AND COMMENTS WILL BE PRINTED ON THE STANDARD LIST DEVICE._^1* LU OF NEW INPUT DEVICE IS SAVED AT COMANF, WHICH IS 0 IF THE DEVICE_^1* IS THE SICM._^1*_]_^1************************************************************************_^1_%SPC 2_^1COMAND LDA COMMAF_'WAS THERE A COMMA_^1_%SAN COMLU-*-1_#YES_^1FORMER ENQ 1_€€,NO-ERROR IN COMMAND FORMAT_^1_%JMP ERMSG_^1COMLU RTJ GETLU_(GET THE LU_^1_%JMP LUERR_(ERROR_^1_%RTJ ITYPE_(GET LU TYPE_^1_%RTJ CHKPHY_'CHECK PHYSTAB TABLE FOR VALIDITY_^1_%ADC V1346_(VALID CLASS CODE LIST (1,3,4,6)_^1_%JMP LUERR_(ERROR_^1_%LDA LUTYPE_'IF ITS THE TTY, ZERO THE FLAG_^1_%SUB TTYTYP_^1_%SAZ STORLU_^1_%LDA LU_^1_%EOR- ONEBIT+12_^1STORLU STA COMANF_'SAVE TH€€E LU_^1_%JMP COMWAT_'RETURN TO COMMAND PROCESSOR_^1LUERR ENQ 2_,LU NOT LEGAL_^1_%JMP ERMSG_^1_%EJT_]_^1************************************************************************_^1*_]_^1* THIS SECTION DELETES RECORDS FROM THE SKELETON FILE, ACCOMPLISHED BY_^1* CHANGING THE RECORD POINTERS OF THE LAST RECORD BEFORE THE DELETED_^1* RECORDS AND THE FIRST RECORD FOLLOWING THE DELETED€€ RECORDS TO POINT_^1* TO EACH OTHER. ENTRY POINTS ARE DELETE FOR THE DELETE COMMAND AND_^1* DELET1 FOR THE INSERT COMMAND._^1*_]_^1************************************************************************_^1_%SPC 2_^1DELETE CLR A_^1_%STA LASDEL_^1DELET1 STA INSFLG_^1_%LDA LOADED_'HAS SKELETON BEEN LOADED_^1_%SAN DELSIN-*-1_"YES_^1NOTLER ENQ 3_,NO-ERROR_^1_%JMP ERMSG_^1DELSI€€N LDA COMMAF_'WAS THERE A COMMA_^1_%SAN DELNIN-*-1_"YES_^1_%JMP* FORMER_'NO-ERROR_^1DELNIN LDA ARNOLN_^1_%RTJ GETNUM_'GET LOWER RECORD NO._^1_%JMP NUMERR_'ERROR_^1_%SAN DEL1-*-1_^1RECNER ENQ 4_,ERROR - NUMBER IS 0_^1_%JMP ERMSG_^1DEL1_!STA FIRST_^1_%LDA INSFLG_'DETERMINE WHICH FUNCTION WERE DOING_^1_%SAZ NOTINS-*-1_"DELETE_^1_%JMP YESINS_'INSERT_^1NOTINS LDA COMMAF_'IS€€ THERE ANOTHER NUMBER_^1_%SAN NMNUMS_'YES_^1_%JMP* SET2E1_^1NMNUMS LDA ARNOLN_^1_%RTJ GETNUM_'GET UPPER RECORD NUMBER_^1_%JMP NUMERR_^1_%SAN DEL2-*-1_^1_%JMP* RECNER_'2ND NUMBER WAS 0 OR EXTRANEOUS COMMA_^1DEL2_!STA SECOND_^1_%SUB FIRST_(CHECK SECOND GE FIRST_^1_%SAP DELCON_'OK_^1INVNER ENQ 6_,NG - INVALID RECORD NUMBER_^1_%JMP ERMSG_^1SET2E1 LDA FIRST_(SET SECOND EQ FIR€€ST_^1_%STA SECOND_^1DELCON LDA SECOND_'ARE NUMBERS LT MAX RECORD NO._^1_%SUB LOADED_^1_%SAM DELOK-*-1_#YES_^1_%JMP* INVNER_'NO-ERROR_^1DELOK RTJ CHEKDT_'CHECK DELETE TABLE FOR RANGE OF RECORD NUMBERS_^1_%RTJ FRECRD_'SET UP STARTING LOCATION OF SCRATCH_^1READNX STA PRESEC_'SAVE WHERE CURRENTLY READING_^1READN1 RTJ READIT_'READ RECORD_^1_%JMP COMWAT_'ERROR-RETURN TO COMMAND€€ PROCESSOR_^1_%RTJ NRECAD_'GET LOCATION OF NEXT RECORD_^1_%ENQ RNPONT_'MAKE SURE THE FIRST RECORDS ARENT DELETED_^1_%LDA RECBUF,B_^1_%SAP ISTHIS_'OK_^1_%JMP* NOTYET_'IT HAS BEEN, IGNORE IT_^1ISTHIS SUB FIRST_(IS THIS THE 1ST NUMBER TO DELETE_^1_%SAN NOTYT1_'NO_^1_%JMP* RIDIT_(YES- GO START DOING IT_^1NOTYT1 ADD FIRST_^1NOTYET STA* LASDEL_'SAVE RECORD NUMBER_^1_%RTJ NRECRD_'€€SET UP TO READ NEXT REC_^1_%JMP* READNX_^1RIDIT LDA FIRST_(IS REC NO.1 THE FIRST TO BE DELETED_^1_%INA -1_^1_%SAN RIDIT1_'NO_^1_%JMP* ISFST_(YES_^1RIDIT1 LDA* LASDEL_'HAVE ALL RECORDS PREVIOUS TO THIS BEEN DELETED_^1_%SAP NOTFST_'NO_^1_%JMP* ISFST_(YES_^1NOTFST ENQ PSECT_^1_%LDA RECBUF,B_$GET LOCATION OF PREVIOUS RECORD_^1_%STA PREVSC_^1_%STA SECNUM_^1_%INQ 1_^1_%LDA REC€€BUF,B_^1_%STA PREVPS_^1_%STA RPOSIT_^1_%RTJ READIT_'READ PREVIOUS RECORD_^1_%JMP COMWAT_'ERROR_^1_%ENQ NSECT_^1_%LDA NEXTSC_'SAVE POINTERS TO NEW NEXT RECORD_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA NEXTPS_^1_%STA RECBUF,B_^1_%RTJ WRITIT_'WRITE PREVIOUS RECORD_^1_%JMP COMWAT_'ERROR_^1NOWNEX RTJ NRECRD_'SET TO READ THE NEXT RECORD_^1_%RTJ READIT_^1_%JMP COMWAT_^1_%RTJ NREC€€AD_'SAVE LOCATION OF THE RECORD FOLLOWING IT_^1_%ENQ PSECT_^1_%LDA PREVSC_'SAVE POINTERS TO NEW PREVIOUS RECORD_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA PREVPS_^1_%STA RECBUF,B_^1_%INQ 2_^1_%LDA RECBUF,B_$ARE WE DONE DELETING_^1_%SUB SECOND_^1_%SAP MAYBE-*-1_^1_%JMP* RIDIT_(NO_^1MAYBE SAN DONDEL-*-1_"YES_^1_%JMP* RIDIT_(NO_^1DONDEL RTJ WRITIT_'WRITE OUT THE FINAL 'NEXT RECOR€€D'_^1_%NOP_]_^1_%NOP_]_^1_%JMP COMWAT_'RETURN TO COMMAND PROCESSOR_^1ISFST ENQ NSECT_(MUST MAKE THE NEXT RECORD A 'FIRST RECORD'_^1_%LDA RECBUF,B_$ITS 'PREVIOUS' POINTERS MUST POINT TO ITSELF_^1_%STA PREVSC_^1_%INQ 1_^1_%LDA RECBUF,B_^1_%STA PREVPS_^1_%INQ 4_^1_%LDA- IGNORE_'SET REC NO.=$8000 TO IGNORE IT_^1_%STA RECBUF,B_^1_%RTJ WRITIT_'WRITE IT BACK OUT_^1_%JMP COMWAT€€_^1_%JMP* NOWNEX_'GO READ NEXT RECORD_^1_%SPC 1_^1LASDEL NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_^1* THIS SECTION INSERTS NEW RECORDS INTO THE SKELETON FILE. THIS IS_^1* DONE BY ADDING THE NEW RECORDS AT THE FIRST FREE LOCATION AT THE END_^1* OF THE FILE IN THE SCRATCH AREA (THIS LOCATION IS POINTED TO BY WORDS_^1* ENDSEC, €€CONTAINING THE FIRST FREE SECTOR NUMBER, AND ENDPOS,_^1* CONTAINING THE POSITION WITHIN THAT SECTOR). THE POINTERS OF THE_^1* RECORDS IMMEDIATELY PRECEDING AND FOLLOWING THE INSERTED RECORDS ARE_^1* CHANGED TO POINT TO THE NEW RECORDS. ENTRY POINT IS INSERT. ROUTINE_^1* IS REENTERED AT YESINS AFTER THE COMMON CODE FROM DELETE IS USED._^1*_]_^1***************************************€€*********************************_^1_%SPC 2_^1INSERT CLR A_,SET FIRST PASS FLAG_^1_%STA PASS_^1_%INA 1_^1_%JMP DELET1_'USE SOME CODE FROM DELETE, RETURN TO YESINS_^1_%SPC 2_^1YESINS LDA COMMAF_'IS THERE A SECOND NUMBER_^1_%SAN INS2-*-1_$YES_^1_%ENQ 1_,NO - ERROR_^1_%JMP ERMSG_^1INS2_!RTJ GETLU_(GET THE LU_^1_%JMP LUERR_^1_%RTJ ITYPE_(GET ITS TYPE_^1_%RTJ CHKPHY_'CHECK€€ IF VALID_^1_%ADC V1346_^1_%JMP LUERR_(NO GOOD_^1_%STA BLDLU_^1_%LDA FIRST_(IS REC NUM LESS THAN MAX_^1_%SUB LOADED_^1_%SAM INSOK-*-1_#YES_^1_%JMP INVNER_'NO-ERROR_^1INSOK RTJ CHKDT1_'CHECK DELETE TABLE FOR THIS RECORD_^1_%RTJ FRECRD_'SET UP STARTING LOCATION IN SCRATCH FILE_^1READMX STA PRESEC_^1READM1 RTJ READIT_'READ RECORD_^1_%JMP COMWAT_^1_%RTJ NRECAD_'GET ADDR O€€F NEXT REC_^1_%ENQ RNPONT_^1_%LDA RECBUF,B_$GET RECORD NUM_^1_%SUB FIRST_(IS THIS THE ONE_^1_%SAN NOPE-*-1_$NO_^1_%JMP* YESMAM_'YES_^1NOPE_!RTJ NRECRD_'SET TO READ NEXT RECORD_^1_%JMP* READMX_^1YESMAM RTJ GETBLD_'GET INSERTION RECORD_^1_%JMP NORECI_'ERROR - NO RECORDS TO INSERT_^1YESSIR LDA ENDSEC_^1_%STA NEWSEC_'GET LOCATION TO INSERT RECORD,SAVE IN PREV REC_^1_%ENQ NSEC€€T_^1_%STA RECBUF,B_^1_%LDA ENDPOS_^1_%STA NEWPOS_^1_%INQ 1_^1_%STA RECBUF,B_^1_%SAZ FLIPOS-*-1_"CALC NEW END OF FILE_^1_%RAO ENDSEC_'BUMP SECTOR POINTER IF NEXT SECTOR_^1FLIPOS EOR- LPMASK+1_$FLIP POSITION POINTER_^1_%STA ENDPOS_^1_%RTJ WRITIT_'WRITE PREVIOUS RECORD_^1_%JMP COMWAT_^1_%LDA PASS_)READ NEXT RECORD IF 1ST PASS_^1_%SAZ FIRP1-*-1_^1_%JMP* GTLAST_^1FIRP1 LDA €€ NEXTSC_'1ST PASS_^1_%STA SECNUM_^1_%STA SAVNXS_^1_%LDA NEXTPS_^1_%STA RPOSIT_^1_%STA SAVNXP_^1_%RTJ READIT_^1_%JMP COMWAT_^1_%RAO PASS_^1_%RAO ALWAYS_'SET TO DO PHYSICAL READS EVERY TIME_^1_%ENQ PSECT_(GET LOCATION OF PREVIOUS RECORD_^1_%LDA RECBUF,B_^1_%STA PREVSC_^1_%INQ 1_^1_%LDA RECBUF,B_^1_%STA PREVPS_^1GTLAST LDA NEWSEC_^1_%STA SECNUM_^1_%LDA NEWPOS_^1_%STA€€ RPOSIT_^1_%RTJ READIT_'READ INSERTION SECTOR_^1_%JMP COMWAT_^1_%RTJ REPLAC_'FORMAT INSERTION RECORD AND PLACE IN_^1*_8CORRECT POSITION IN RECBUF_^1_%ENQ PSECT_(SET POINTERS TO_^1_%LDA PREVSC_'PREVIOUS RECORD_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA PREVPS_^1_%STA RECBUF,B_^1_%RTJ GETBLD_'READ NEXT INSERTION RECORD_^1_%JMP NOMOR_(NO MORE_^1YESMOR LDA NEWSEC_'SAVE LOCATION OF€€ INSERTION JUST DONE_^1_%STA PREVSC_^1_%LDA NEWPOS_^1_%STA PREVPS_^1_%JMP* YESSIR_'GO DO NEXT INSERTION_^1NOMOR ENQ NSECT_(CHANGE POINTER TO NEXT RECORD TO POINT TO_^1*_8RECORD FOLLOWING INSERTIONS_^1_%LDA SAVNXS_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA SAVNXP_^1_%STA RECBUF,B_^1_%RTJ WRITIT_'WRITE OUT NEW RECORD_^1_%JMP COMWAT_^1_%SPC 1_^1*_$RETRIEVE THE ORIGINAL NEXT RECOR€€D TO CHANGE ITS 'PREVIOUS'_^1*_$POINTER_^1_%SPC 1_^1_%LDA SAVNXS_'GET ITS LOCATION_^1_%STA SECNUM_^1_%LDA SAVNXP_^1_%STA RPOSIT_^1_%RTJ READIT_^1_%JMP COMWAT_^1_%ENQ PSECT_(POINT BACK TO LAST INSERTION RECORD_^1_%LDA NEWSEC_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA NEWPOS_^1_%STA RECBUF,B_^1_%RTJ WRITIT_'WRITE IT BACK OUT_^1_%NOP_]_^1_%NOP_]_^1_%JMP COMWAT_^1NORECI ENQ 10_€€+NO INSERTION RECORD FOUND_^1_%JMP ERMSG_^1_%EJT_]_^1************************************************************************_^1*_]_^1* THIS SECTION READS THE INSTALLATION FILE FROM THE SPECIFIED DEVICE_^1* AND BUILDS THE SKELETON FILE IN THE SCRATCH AREA. WHEN THROUGH_^1* LOADING, THE CATLOG ROUTINE IS DISPATCHED TO FOR A COMPLETE LISTING_^1* OF THE SKELETON FILE._^1*_]_^1*******€€*****************************************************************_^1_%SPC 2_^1BUILD LDA COMMAF_'WAS THERE A COMMA_^1_%SAN BULU-*-1_$YES_^1_%JMP FORMER_'NO_^1BULU_!RTJ BUNI_)INITIALIZE COUNTERS AND POINTERS_^1_%JMP LUNVA1_'ERROR IN LU_^1MORINP RTJ ITYPE_(GET LU TYPE_^1_%RTJ CHKPHY_'CHECK IF VALID_^1_%ADC V134_)CODE LIST_^1_%JMP LUNVA1_'LU NOT VALID_^1_%STA BLDLU_^1_%CLR €€ A_^1_%STA STARNF_'ZERO *N-TYPE FLAG_^1_%STA NONSTD_'ZERO NON-STANDARD-RECORD-TYPE COUNTER_^1_%LDA RPOSIT_'DO NOT CLEAR OUTPUT BUFF IF IT CONTAINS A REC_^1_%SAN BUNEX1_^1BUNEXT RTJ BLNBFI_'INIT OUTPUT BUFFER_^1BUNEX1 RTJ GETBLD_'READ NEXT RECORD_^1_%JMP EOFILE_'EOF - SEE IF MORE INPUT_^1_%RTJ GETCHR_'1ST CHAR_^1_%JMP EOFILE_'END OF LINE_^1_%STA FIRST_^1_%CLR Q_^1_%SUB- B€€LANK_(IS IT A $20_^1_%SAZ EOFNAM_'YES, EITHER NAM OR NON-STANDARD_^1_%JMP* TRYSTR_'NO_^1EOFNAM RTJ GETCHR_'2ND CHAR_^1_%JMP NONSTN_'NON-STANDARD IF EOF_^1_%STA SECOND_^1_%SUB BLANK_^1_%SAN MAYNAM-*-1_"NOT EOF_^1_%JMP* NONSTN_^1MAYNAM SUB =N$30_^1_%SAZ NAMBLC-*-1_"ITS A NAM BLOCK_^1_%JMP* NONSTN_'ITS NON-STANDARD_^1NAMBLC LDA STARB_^1_%STA RECBUF,I_$PUT *B INTO OUTPUT_^1_%€€RTJ CLRSTR_^1_%ENQ 4_,APOSTRAPHE BEFORE NAME STARTS IN COL 5_^1_%ENA 8_,CHAR POSITION 9 FOR NAME_^1_%STA CCOUNT_^1_%ENA -6_+MAX OF 6 CHARS_^1_%RTJ TRNCHB_'TRANSFER NAME_^1_%ENA 20_^1_%STA CCOUNT_^1_%LDA INSRBF+10_#IF THE FIRST 4 CHARS OF THE INFO FIELD ARE_^1_%SUB BLNBLN_'BLANKS, DO NOT PUT OUT THE INFO_^1_%SAZ 1_^1_%JMP* DOINFO_'NOT BLANK_^1_%LDA INSRBF+11_^1_%SUB BLN€€BLN_^1_%SAN DOINFO_'NOT BLANK_^1_%LDA INSRBF+12_^1_%SUB BLNBLN_^1_%SAN DOINFO_'NOT BLANK_^1_%LDA INSRBF+13_^1_%SUB BLNBLN_^1_%SAN DOINFO_'NOT BLANK_^1_%JMP* INFODN_'BLANK_^1DOINFO ENQ 14_^1_%LDA INFFLN_'GET NO. OF CHARS TO TRANSFER_^1_%RTJ TRNCHR_'TRANSFER ID INFO_^1INFODN RTJ CLRSTR_^1_%JMP* ZERNON_^1EOFILE RTJ EOF_*FIND OUT IF ANY MORE INPUT_^1_%JMP* MORINP_'YES_^1_%J€€MP* BUMPCT_'NO_^1NONSTN LDA NONSTD_'IS IT THE 1ST NON-STD IN THIS GROUP OF RECORDS_^1_%SAZ YES1ST-*-1_"YES_^1_%JMP* SKPNTD_'NO-SKIP IT_^1YES1ST LDA STARNF_'WAS PREV RECORD THE *N_^1_%SAN SPCASE-*-1_"YES-SPECIAL CASE_^1_%JMP* SKPNTD_'NO-SKIP IT_^1SPCASE LDA STARB_(CREATE A *B RECORD_^1_%STA RECBUF,I_^1_%ENQ 6_^1_%ENA -6_^1_%RTJ TRNCHB_'TRANSFER NAME FROM THE *N_^1_%RAO NON€€STD_'BUMP NON-STD COUNTER_^1_%RTJ CLRSTR_'CLEAR *N FLAG_^1_%JMP* BUMPCT_^1SKPNTD RAO NONSTD_'BUMP NON-STD COUNTER_^1_%JMP* BUNEX1_'GO READ NEXT RECORD_^1TRYSTR LDA FIRST_^1_%SUB STAR_^1_%SAZ YESTAR-*-1_"IS 1ST CHAR A *_^1_%JMP* NONSTN_'NO, ITS NON-STANDARD_^1YESTAR RTJ GETCHR_'ITS A *, SEE IF *N_^1_%JMP NOTN1_^1_%SUB N_^1_%SAN NOTN2_(NO_^1_%RTJ BRAKN_(YES-SEE IF PROPER TY€€PE,SAVE NAME IN FLAG_^1_%JMP* NOTN_^1NOTN2 INA 9_,IS IT E_^1_%SAZ 1_^1_%JMP* NOTN1_(NO_^1_%RTJ GETCHR_'YES - IS NEXT CHAR N_^1_%JMP NOTN1_(NO_^1_%SUB N_^1_%SAZ 1_,YES_^1_%JMP* NOTN1_(NO_^1_%RTJ GETCHR_'IS THE NEXT CHARACTER D_^1_%JMP NOTN1_^1_%SUB =N$44_^1_%SAZ 1_,YES_^1_%JMP* NOTN1_(NO_^1_%RTJ GETCHR_'IS IT REALLY *END_^1_%JMP ITSEND_'YES_^1_%SUB- BLANK_^1_%SAZ ITSEN€€D_'YES_^1_%JMP* NOTN1_(NO_^1ITSEND RTJ GETBLD_'LOOK FOR EOF_^1_%JMP EOFILE_'OK_^1_%LDA STARE_(NONE - CLOSE FILE_^1_%STA RECBUF,I_$SET UP *END_^1_%LDA ENDE_^1_%STA RECBUF+1,I_^1_%RAO STREND_^1_%JMP* BUMPCT_^1NOTN1 RTJ CLRSTR_'CLEAR *N FLAGS_^1NOTN_!RTJ MOVSTR_'MOVE RECORD TO OUTPUT BUFF_^1ZERNON CLR A_^1_%STA NONSTD_'ZERO NON-STD REC COUNTER_^1BUMPCT RTJ* SETREC_'BUMP RE€€CORD COUNTER_^1_%JMP BUNEX1_'GO DO NEXT_^1_%JMP BUNEXT_'RECORD_^1INVCMD CLR Q_,INVALID COMMAND MESSAGE_^1_%JMP ERMSG_^1_%EJT_]_^1SETREC 0_"0_^1_%RAO RECNT_(BUMP REC COUNTER_^1_%ENQ NSECT_(SET UP INFO BLOCK_^1_%LDA NEXTSC_'NEXT RECORD_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA NEXTPS_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA PREVSC_'PREVIOUS RECORD_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA€€ PREVPS_^1_%STA RECBUF,B_^1_%INQ 1_^1_%CLR A_^1_%STA RECBUF,B_$SET FILE MARK TO ZERO_^1_%INQ 1_^1_%LDA RECNT_(RECORD NUMBER_^1_%STA RECBUF,B_^1_%LDA STREND_'IS RECORD A *END_^1_%SAZ WHHALF_'NO_^1_%JMP* ALMOST_'YES_^1WHHALF LDA RPOSIT_'WHICH HALF OF SECTOR ARE WE IN_^1_%SAZ FIRHLF-*-1_"FIRST HALF_^1_%JMP* SECHLF_'SECOND HALF_^1FIRHLF ENA 48_^1_%STA- I_^1UPDATE LDA SECN€€UM_'UPDATE POINTERS_^1_%STA PREVSC_'PRESENT BECOMES PREVIOUS_^1_%LDA RPOSIT_^1_%STA PREVPS_^1_%LDA NEXTSC_'NEXT BECOMES PRESENT_^1_%STA SECNUM_^1_%LDA NEXTPS_^1_%STA RPOSIT_^1_%SAZ NUNEXT-*-1_"CALCULATE NEW NEXT_^1_%RAO NEXTSC_^1NUNEXT EOR- LPMASK+1_^1_%STA NEXTPS_^1_%LDA RPOSIT_^1_%SAZ BOTHBF_^1_%JMP* (SETREC)_$RETURN1 (SAME SECTOR)_^1BOTHBF RAO* SETREC_'RETURN2 (STA€€RTING NEW SECTOR)_^1_%JMP* (SETREC)_^1ALMOST LDA NEXTSC_'SAVE LOCATION OF END OF FILE FOR INSERT_^1_%STA ENDSEC_^1_%LDA NEXTPS_^1_%STA ENDPOS_^1_%ENQ NSECT_(LAST RECORDS 'NEXT' POINTS TO ITSELF_^1_%LDA SECNUM_^1_%STA RECBUF,B_^1_%INQ 1_^1_%LDA RPOSIT_^1_%STA RECBUF,B_^1_%ENQ FMPONT_'SET FILE MARK_^1_%SET A_^1_%STA RECBUF,B_^1SECHLF RTJ WRITIT_'WRITE OUT TWO RECORDS_^1€€_%JMP COMWAT_^1_%LDA STREND_'WAS THER A *END_^1_%SAN BUFINI-*-1_"YES_^1_%JMP* UPDATE_'NO_^1BUFINI LDA RECNT_^1_%STA LOADED_'SET LOADED FLAG = NO. OF RECORDS_^1_%JMP COMWAT_'DONE_^1_%SPC 3_^1BUNI_!0_"0_,INITIALIZE AND GET POINTERS AND LU FOR BUILD_^1_%CLR A_^1_%STA RECNT_(CLEAR RECORD COUNTER_^1_%STA RPOSIT_^1_%STA PREVPS_^1_%STA STREND_'*END FLAG_^1_%STA LOADED_^1_%STA€€- I_^1_%INA 1_^1_%STA NEXTPS_'NEXT POSITION IN SECTOR IS 2ND HALF_^1_%LDA SCAREA_'SET STARTING SECTOR OF SCRATCH_^1_%STA SECNUM_^1_%STA PREVSC_'PREV RECORD IS SAME FOR 1ST RECORD_^1_%STA NEXTSC_'NEXT RECORD IS IN SAME SECTOR_^1_%RTJ GETLU_(GET LU_^1_%JMP BUNERR_'ERROR_^1_%RAO* BUNI_^1_%RAO* BUNI_^1BUNERR JMP* (BUNI)_^1_%SPC 3_^1EOF_"0_"0_,FIND OUT IF ANY MORE INPUT_^1_%RAO€€ OUTSW_(OUTPUT ON COMMENT DEVICE_^1_%RTJ MESAGE_'ASK IF ANY MORE INPUT_^1_%ADC MSG3B_^1_%ADC MSG3E-MSG3B_^1_%RTJ REPLY_(GET REPLY_^1_%JMP (EOF)_(YES-RETURN1_^1_%LDA STARE_(NO_^1_%STA RECBUF,I_$PUT OUT *END_^1_%LDA ENDE_^1_%STA RECBUF+1,I_^1_%RAO STREND_'SET *END FLAG_^1_%RAO* EOF_^1_%JMP* (EOF)_(RETURN2_^1_%SPC 1_^1LUNVA1 ENQ 2_,LU WAS NOT VALID_^1_%RTJ ERMSGR_^1_%JMP€€ EOFILE_'GIVE HIM ANOTHER CHANCE TO GET IT RIGHT_^1_%EJT_]_^1************************************************************************_^1*_]_^1* THIS SECTION READS THE SKELETON FILE FROM THE SPECIFIED DEVICE INTO_^1* THE SCRATCH AREA. THE PROGRAM DISPATCHES TO CATLOG TO DO A COMPLETE_^1* LISTING OF THE SKELETON FILE._^1**************************************************************€€**********_^1_%SPC 2_^1LOAD_!LDA COMMAF_'WAS THERE A COMMA_^1_%SAN LOLU-*-1_^1_%JMP FORMER_'NO-ERROR_^1LOLU_!RTJ BUNI_)INITIALIZE COUNTERS,POINTERS,GET LU_^1_%JMP LUNVA2_'ERROR IN LU_^1MORLOD RTJ ITYPE_(GET TYPE_^1_%RTJ CHKPHY_'CHECK IF VALID_^1_%ADC V134_^1_%JMP LUNVA2_'LU NOT VALID_^1_%EOR- ONEBIT+12_^1_%STA BLDLU_(SET INTO LOAD'S I/O PARAM LIST_^1_%LDA RPOSIT_'DONT C€€LEAR OUTPUT BUFF IF REC ALREADY THERE_^1_%SAN LONEX1_^1LONEXT RTJ BLNBFI_'BLANK RECBUF_^1LONEX1 RTJ GETBLD_'READ A RECORD_^1_%JMP EOFLOD_'SEE IF MORE INPUT_^1_%RTJ GETCHR_'SEE IF RECORD IS A *END_^1_%JMP EOFLOD_'NO MORE CHARS_^1_%SUB STAR_^1_%SAZ FNSTAR-*-1_"YES_^1_%JMP* REGLAR_'NO_^1FNSTAR RTJ GETCHR_^1_%JMP REGLAR_^1_%SUB =N$45_(STILL CHECKING FOR *END_^1_%SAZ FNEEEE-€€*-1_^1_%JMP* REGLAR_'NO_^1FNEEEE RTJ GETCHR_^1_%JMP REGLAR_^1_%SUB =N$4E_^1_%SAZ FNNNNN-*-1_^1_%JMP* REGLAR_'NO_^1FNNNNN RTJ GETCHR_^1_%JMP REGLAR_^1_%SUB =N$44_^1_%SAZ 1_^1_%JMP* REGLAR_^1_%RTJ GETCHR_'IS IT REALLY *END_^1_%JMP FONDST_'YES_^1_%SUB- BLANK_^1_%SAZ FONDST_'YES_^1_%JMP* REGLAR_'NO_^1FONDST RTJ GETBLD_'*END FOUND - READ THE EOF_^1_%JMP EOFLOD_^1_%LDA STAR€€E_(NO EOF - CLOSE FILE_^1_%STA RECBUF,I_^1_%LDA ENDE_^1_%STA RECBUF+1,I_^1_%RAO STREND_^1_%JMP REGLR1_^1EOFLOD RTJ EOF_*ASK IF ANY MORE INPUT_^1_%JMP* MORLOD_'YES - GO CHECK IT_^1_%JMP* REGLR1_'NO_^1REGLAR RTJ MOVSTR_'TRANSFER CHARS TO RECBUF_^1REGLR1 RTJ SETREC_'SET UP RECORD_^1_%JMP* LONEX1_'NEXT RECORD GOES IN SAME SECTOR_^1_%JMP* LONEXT_'NEXT RECORD IS IN NEXT SECTOR_^1€€LUNVA2 ENQ 2_^1_%RTJ ERMSGR_^1_%JMP* EOFLOD_^1_%EJT_]_^1************************************************************************_^1* THIS SECTION WRITES THE SKELETON FILE ONTO THE SPECIFIED LU. PROGRAM_^1* DISPATCH IS TO CATLOG TO RESEQUENCE AND LIST THE FILE._^1************************************************************************_^1_%SPC 2_^1DUMP_!LDA LOADED_'IS SKEL LOADED€€_^1_%SAN DUMOK1_^1_%JMP NOTLER_'NO_^1DUMOK1 LDA COMMAF_^1_%SAN DUMOK2_^1_%JMP FORMER_'FORMAT ERROR - NO COMMA_^1DUMOK2 RTJ GETLU_(GET LU_^1_%JMP LUERR_^1_%RTJ ITYPE_(GET TYPE_^1_%RTJ CHKPHY_^1_%ADC V134_^1_%JMP LUERR_(LU TYPE ERROR_^1_%EOR- ONEBIT+12_^1_%STA DMPDEV_^1_%STA MTDEV_(FOR WRITING FILE MARK WHEN DONE_^1_%LDA COMMAF_'WAS THERE MORE COMMAND INPUT_^1_%SAZ DUM€€OK3_'NO_^1_%JMP FORMER_'YES-ERROR_^1DUMOK3 RTJ FRECRD_'SET UP START-READ-ADDRESS OF SCRATCH_^1DMPRED RTJ READIT_'READ NEXT RECORD_^1_%JMP COMWAT_^1_%ENQ RNPONT_'DO WE IGNORE THE FIRST RECORDS_^1_%LDA RECBUF,B_^1_%SAP DMPDIT_'NO_^1_%JMP* DMPLAS_'YES_^1DMPDIT RTJ MOVDMP_'MOVE RECORD TO INSRBF_^1_%RTJ DUMPIT_'WRITE IT TO LU_^1_%JMP COMWAT_^1DMPLAS ENQ FMPONT_^1_%LDA RECBUF€€,B_$IS IT THE LAST RECORD_^1_%SAM DMPEND_'YES_^1_%RTJ NRECAD_'NO- GET ADDR OF NEXT RECORD_^1_%RTJ NRECRD_^1_%JMP* DMPRED_'GO READ IT_^1DMPEND LDA RECBUF,I_$WAS THE LAST RECORD A *END_^1_%SUB STARE_^1_%SAZ STRTHT_^1_%JMP* APPEND_'NO_^1STRTHT LDA RECBUF+1,I_^1_%SUB ENDE_^1_%SAN APPEND_'NO_^1_%JMP* ZERLOD_'YES_^1_%SPC 2_^1*_$APPEND A *END RECORD TO SKEL_^1_%SPC 1_^1APPEND €€RTJ BLINSB_'BLANK INSRBF_^1_%LDA STARE_^1_%STA INSRBF_^1_%LDA ENDE_^1_%STA INSRBF+1_^1_%RTJ DUMPIT_^1_%JMP COMWAT_^1ZERLOD LDA MGWEF_(WRITE FILE MARK_^1_%STA MTFUNC_^1_%RTJ DOMAG_^1_%JMP COMWAT_^1_%JMP RECATS_'GO TO CATLOG_^1_%SPC 2_^1BLINSB 0_"0_,BLANK BUFFER INSBRF_^1_%ENQ 39_^1_%LDA BLNBLN_^1BLINCL STA INSRBF,Q_^1_%INQ -1_^1_%SQM BLNOME_^1_%JMP* BLINCL_^1BLNOME€€ JMP* (BLINSB)_^1_%SPC 2_^1MOVDMP 0_"0_,MOVE REC FROM RECBUF TO INSRBF_^1_%ENQ 39_^1MDNEXT LDA RECBUF,B_^1_%STA INSRBF,Q_^1_%INQ -1_^1_%SQM MDDONE_^1_%JMP* MDNEXT_^1MDDONE JMP* (MOVDMP)_^1_%SPC 2_^1DUMPIT 0_"0_,WRITE REC TO LU_^1_%LDA =XDMPIO_^1_%STA PARLST_^1_%RTJ DOIO_^1_%JMP (DUMPIT)_$ERROR_^1_%RAO* DUMPIT_^1_%RAO* DUMPIT_^1_%JMP* (DUMPIT)_^1_%SPC 2_^1*_$PARAMETER LI€€ST FOR DUMP_^1_%SPC 1_^1DMPIO VFD N2/1,N5/6,N1/0,N8/1_^1_%ADC COMPL_^1_%NUM 0_^1DMPDEV NUM $1000_^1_%NUM 40_^1_%ADC INSRBF_^1_%EJT_]_^1************************************************************************_^1* THIS SECTION HANDLES THE MOTION OF THE MAG TAPE DEVICES AND THE_^1* PSEUDO MOTION OF THE SKELETON FILE. ENTRY POINT IS MGTAPE._^1***********************************€€*************************************_^1_%SPC 2_^1MGTAPE LDA COMMAF_^1_%SAN MTOK1_(IS THERE A COMMA_^1_%JMP FORMER_'NO-ERROR_^1MTOK1 RTJ GETCHR_'CHECK FOR LU='SK'_^1_%JMP FORMER_^1_%SUB =N$53_^1_%SAZ ESSIN_^1_%ENA -1_^1_%JMP* NOTSK_(NOT SK_^1ESSIN RTJ GETCHR_^1_%JMP FORMER_^1_%SUB =N$4B_^1_%SAZ ESSKAY_^1_%ENA -2_^1_%JMP* NOTSK_(NOT SK_^1ESSKAY LDA LOADED_'SK - WAS €€SKEL FILE LOADED_^1_%SAN SKOK_^1_%JMP NOTLER_'NO-ERROR_^1SKOK_!STA SKFLAG_'YES- SET FLAG THAT LU IS SK_^1_%CLR A_^1_%STA COMMAF_^1_%RTJ GETCHR_^1_%JMP HOWMNY_^1_%SUB COMMA_(MAKE SURE A COMMA FOLLOWS_^1_%SAN MTOK2_^1_%RAO COMMAF_^1MTOK2 JMP* HOWMNY_^1NOTSK ADD CCOUNT_^1_%STA CCOUNT_^1_%RTJ GETLU_(GET THE LU_^1_%JMP LUERR_^1_%RTJ ITYPE_(GET TYPE_^1_%SUB V1_+IS IT TA€€PE_^1_%SAN NTMT_)NO_^1_%RAO* MTFLAG_'SET TAPE FLAG_^1NTMT_!LDA LU_^1_%EOR- ONEBIT+12_^1_%STA MTDEV_^1HOWMNY LDA MATCHX_'GET INDEX_^1_%INA -STPLAC/3_^1_%STA* MAGOPP_^1_%SAN MAYUNL_^1_%JMP* MAYP1_(REWIND IS DONE ONCE_^1MAYUNL INA -6_^1_%SAN MAYMOR_^1MAYP1 ENA 1_^1_%JMP* MTOK3A_'UNLOAD IS DONE ONCE_^1MAYMOR LDA COMMAF_^1_%SAN MTOK3_^1_%JMP FORMER_'ERROR- COMMA MISSING_^1M€€TOK3 LDA ARNOLN_^1_%RTJ GETNUM_'GET NUMBER ARGUMENT_^1_%JMP NUMERR_'BAD CHARACTER IN NUMBER_^1MTOK3A STA PASS_)SET COUNTER ( =1 FOR UNLOAD,REWIND)_^1_%LDA COMMAF_^1_%SAZ MTOK4_^1_%JMP FORMER_^1MTOK4 LDA SKFLAG_'IS OPERATION ON SKEL FILE_^1_%SAZ NOTSKL_^1_%JMP* DOSKEL_'YES_^1NOTSKL LDQ* MAGOPP_'NO_^1_%LDA MGFUNC,Q_$GET FUNCTION CODE_^1_%STA* MTFUNC_^1MTAGIN RTJ DOMAG_(D€€O THE FUNCTION_^1_%JMP COMWAT_^1EOFHAP LDA PASS_)BUMP COUNTER_^1_%INA -1_^1_%STA PASS_^1_%SAN MTDUNE_'ARE WE DONE_^1_%JMP COMWAT_'YES_^1MTDUNE JMP* MTAGIN_'NO- DO IT AGIN_^1MAGOPP NUM 0_,SAVE RELATIVE MATCH INDEX_^1SKFLAG NUM 0_,LU IS DEVICE 'SK'_^1EOFLAG NUM 0_,SET IF EOF ENCOUNTERED ON MAG TAPE OPERATION_^1MTFLAG NUM 0_,MAG TAPE FLAG_^1_%SPC 2_^1DOMAG 0_"0_,SET UP MAG€€ TAPE REQUEST_^1_%CLR A_^1_%STA EOFLAG_^1_%LDA =XMAGIO_^1_%STA PARLST_^1_%RTJ DOIO_^1_%JMP ISTEOF_'ERROR OR EOF_^1_%JMP* DOMAGG_'GOOD RETURN_^1ISTEOF RTJ* ISTREO_'CHECK PHYSTAB FOR STATUS_^1_%SAZ ERRET_(ERROR_^1_%RAO* EOFLAG_'EOF_^1DOMAGG RAO* DOMAG_^1_%RAO* DOMAG_^1ERRET JMP* (DOMAG)_^1_%SPC 2_^1ISTREO 0_"0_,CHECK FOR EOF_^1_%LDQ LU_^1_%LDQ+ LOG1A,Q_^1_%LDA- 12,Q_^1_%ARS€€ 11_^1_%AND- LPMASK+1_^1_%JMP* (ISTREO)_^1_%SPC 2_^1*_$PARAMETER LIST FOR MAG TP OPERATION_^1MAGIO NUM $5C01_^1_%ADC COMPL_^1_%NUM 0_^1MTDEV NUM $1000_^1MTFUNC NUM 0_^1_%EJT_]_^1* OPERATION REQUESTED WAS ON THE SKELETON FILE._^1_%SPC 1_^1DOSKEL LDA* MAGOPP_'GET RELATIVE INDEX_^1_%SAN NOTREW_'IS OPERATION REWIND_^1_%RTJ FRECRD_'YES- POINT TO BEGINNING OF FILE_^1_%JMP CO€€MWAT_^1NOTREW INA -3_+IS IT A FILE ORIENTED OPERATION_^1_%SAM ADVBCK_'NO_^1_%JMP COMWAT_'YES - DO NOTHING_^1ADVBCK INA 1_,WHICH DIRECTION TO SPACE RECORDS_^1ADVBK1 SAN FORWAR_'FORWARD_^1_%JMP* BAKWAR_'BACKWARD_^1FORWAR LDA RPOSIT_'CALCULATE POSITION NOW POINTED TO_^1_%SAZ NUMBUM_'NEXT RECORD IS IN THIS SECTOR_^1_%RAO SECNUM_'NEXT RECORD IS IN NEXT SECTOR_^1NUMBUM EOR- ONEBI€€T_'COMPLEMENT POSITION WITHIN SECTOR_^1_%STA RPOSIT_^1_%LDA PASS_^1_%INA -1_^1_%STA PASS_^1_%SAN ADVDUN_^1_%JMP COMWAT_'DONE_^1ADVDUN LDA* MAGOPP_^1_%INA -2_^1_%JMP* ADVBK1_'DO IT AGAIN_^1BAKWAR LDA SCAREA_'CHECK IF BACK TO GEGINNING OF FILE_^1_%SUB SECNUM_^1_%SAN BAKWA1_'NO_^1_%LDA RPOSIT_'WERE IN THE FIRST SECTOR_^1_%SAN BAKWA1_'2ND RECORD_^1_%JMP COMWAT_'DONT BACK U€€P BEYOND THE GEGINNING_^1BAKWA1 LDA SECNUM_'POINT TO RECORD TWO POSITIONS BACK_^1_%INA -1_^1_%STA SECNUM_^1_%JMP* FORWAR_^1_%EJT_]_^1************************************************************************_^1* THIS SECTION LISTS RECORDS BETWEEN TWO RECORD NUMBERS. ONE RECORD_^1* IS LISTED IF ONE RECORD NUMBER IS GIVEN. THE ENTIRE FILE IS_^1* RESEQUENCED AND LISTED IF NO ARGUMENT€€S ARE INCLUDED IN THE CATLOG_^1* COMMAND. ENTRY POINTS ARE_^1* CATLOG - WHEN THE CATLOG FUNCTION IS REQUESTED_^1* RECATN - ENTRY FROM BUILD AND LOAD FUNCTIONS_^1* RECATS - ENTRY FROM DUMP_^1************************************************************************_^1_%SPC 2_^1CATLOG LDA LOADED_'IS SKELETON LOADED_^1_%SAN CATOKG_'YES_^1_%JMP NOTLER_'NO-ERROR_^1CATOKG CLR A_^1_%ST€€A* RESEQF_'ZERO RESEQUENCE FLAG_^1_%LDA COMMAF_'WAS THERE A COMMA_^1_%SAN NOTFUL_'YES_^1_%JMP* RECATS_'NO-FULL CATLOG REQUESTED_^1NOTFUL LDA ARNOLN_^1_%RTJ GETNUM_'GET 1ST RECORD NUMBER_^1_%JMP NUMERR_^1_%SAN CATNZ_^1_%JMP RECNER_'ERROR-NUMBER IS ZERO_^1CATNZ STA FIRST_^1_%LDA COMMAF_'IS THERE ANOTHER NUMBER_^1_%SAN CAT2ND_'YES_^1_%LDA FIRST_(NO - SET 2ND NUMBER = 1ST_^€€1_%JMP* CATSND_^1CAT2ND LDA ARNOLN_^1_%RTJ GETNUM_'GET 2ND NUMBER_^1_%JMP NUMERR_^1CATSND SUB FIRST_(IS SECOND GREATER OR EQUAL FIRST_^1_%SAP C2GE1_(YES_^1_%JMP INVNER_'NO-ERROR_^1C2GE1 ADD FIRST_^1_%STA SECOND_^1_%LDA COMMAF_'DID THEY TRY TO ENTER ANOTHER_^1_%SAZ CATOK1_'NO_^1_%JMP FORMER_'YES-ERROR_^1CATOK1 LDA SECOND_'ARE THE RECORD NUMBERS WITHIN LIMITS_^1_%SUB LO€€ADED_^1_%SAM CATOK2_'YES_^1_%SAZ CATOK2_'YES_^1_%JMP INVNER_'NO-ERROR_^1CATOK2 CLR A_^1_%STA INSFLG_^1_%STA RPOSIT_'SET UP STARTING ADDR OF SCRATCH AREA_^1_%LDA SCAREA_^1_%STA SECNUM_^1CATRED RTJ READIT_'READ THE NEXT RECORD_^1_%JMP COMWAT_'ERROR_^1_%RTJ NRECAD_'GET LOCATION OF NEXT RECORD_^1_%ENQ RNPONT_'DO WE WANT THIS RECORD_^1_%LDA RECBUF,B_^1_%SAP CATRD1_^1_%JMP*€€ CHKEOF_'NO - RECORD WAS DELETED_^1CATRD1 SUB FIRST_^1_%SAN NOTONE_'NO_^1_%JMP* CTSAVB_'YES_^1NOTONE SAM CHKEOF_'RECORD READ IS LESS THAN THE ONE WE WANT_^1_%ADD FIRST_(WERE BEYOND THE FIRST_^1_%SUB SECOND_^1_%SAN NOTON1_^1_%JMP* CTSAVB_'WERE AT THE SECOND_^1NOTON1 SAP RECNFD_'WERE BEYOND THE SECOND_^1_%JMP* CTSAVB_'WERE WITHIN RANGE_^1CHKEOF ENQ FMPONT_'CHECK FOR END OF FI€€LE_^1_%LDA RECBUF,B_^1_%SAP CATOK3_'NOT EOF_^1RECNFD ENQ 9_,RECORD NOT FOUND -- ERROR_^1_%JMP ERMSG_^1CATOK3 RTJ NRECRD_'SET TO READ NEXT RECORD_^1_%JMP* CATRED_'GO DO IT_^1RESEQF NUM 0_,RESEQUENCE FLAG_!(1=RESEQUENCE)_^1_%EJT_]_^1*_$ENTRY POINT FROM DUMP_^1RECATS ENA 1_,FULL CATLOG_^1_%JMP* SETREQ_^1_%SPC 2_^1*_$ENTRY POINT FROM BUILD, LOAD_^1RECATN CLR A_,FULL CATLOG BUT€€ NO RESEQUENCING_^1SETREQ STA* RESEQF_'SET RESEQUENCE FLAG ACCORDINGLY_^1_%CLR A_,SET UP START READ LOCATION_^1_%STA RPOSIT_^1_%STA SECOND_'FLAG FOR FULL CATLOG_^1_%STA PGLNCT_'ZERO PAGE LINE COUNT_^1_%LDA SCAREA_^1_%STA SECNUM_^1_%ENA 1_^1_%STA RECNT_(INIT RECORD NUMBER COUNTER_^1FULRED RTJ READIT_'READ NEXT RECORD_^1_%JMP COMWAT_^1_%RTJ NRECAD_'GET ADDR OF NEXT RECORD_€€^1CTSAVB ENQ RNPONT_^1_%LDA RECBUF,B_$GET RECORD NUMBER_^1_%STA RECNO_^1_%SAP CTGOOD_'HAS IT BEEN DELETED (E.G. 1ST REC IN FILE)_^1_%JMP* CHKFIN_'YES_^1CTGOOD LDA RESEQF_'NO- ARE WE SUPPOSED TO RESEQUENCE_^1_%SAZ NONSEQ_'NO_^1_%LDA RECNT_(YES-RESET REC NUMBER_^1_%STA RECNO_^1_%STA RECBUF,B_^1_%RTJ WRITIT_'WRITE IT BACK OUT_^1_%JMP COMWAT_^1_%RAO RECNT_(BUMP COUNTER_^1NO€€NSEQ RTJ PRITIT_'PRINT IT OUT_^1CHKFIN LDA SECOND_'IS THIS A FULL CATLOG_^1_%SAN CHKEND_'NO_^1_%JMP* FULEOF_'YES_^1CHKEND SUB RECNO_(CHECK IF HI LIMIT HAS BEEN REACHED_^1_%SAZ REACHD_'YES_^1_%SAP FULEOF_'NO_^1REACHD JMP COMWAT_'YES - RETURN TO COMMAND PROCESSOR_^1FULEOF ENQ FMPONT_'CHECK FOR FILE MARK_^1_%LDA RECBUF,B_^1_%SAM CATEOF_'YES-END OF FILE_^1_%RTJ NRECRD_'NO-KE€€EEP GOING, SET UP FOR NEXT READ_^1_%JMP* FULRED_^1CATEOF LDA RECNO_(SAVE NO. OF RECORDS_^1_%STA LOADED_^1_%LDA RESEQF_^1_%SAZ DONCLR_^1_%SET A_,IF FILE WAS RESEQUENCED, CLEAR DELETION TABLE_^1_%STA DELTAB_^1_%CLR A_^1_%STA ENUFLG_^1DONCLR JMP COMWAT_^1RECNO NUM 0_,RECORD NO. OF CURRENT RECORD_^1PGLNCT NUM 0_,PAGE LINE COUNTER_^1_%EJT_]_^1********************************€€****************************************_^1* THIS SECTION ENABLES YOU TO CHANGE THE INPUT DEVICE ON *K CONTROL_^1* STATEMENTS. ENTRY IS AT CHANGE._^1************************************************************************_^1_%SPC 2_^1CHANGE LDA LOADED_'IS SKELETON LOADED_^1_%SAN CHLOAD_^1_%JMP NOTLER_'NO_^1CHLOAD LDA COMMAF_'WAS THERE A COMMA_^1_%SAN CHCOMM_^1_%JMP FORMER_'N€€O_^1CHCOMM RTJ GETCHR_^1_%JMP FORMER_^1_%INA -EYE_)IS THE NEXT CHARACTER 'I'_^1_%SAZ CHEYE_^1_%JMP FORMER_'NO_^1CHEYE CLR A_,ZERO LUS_^1_%STA LU1_^1_%STA LU1+1_^1_%STA LU2_^1_%STA LU2+1_^1_%RTJ GETCHR_'GET FIRST LU_^1_%JMP FORMER_^1_%STA LU1_^1_%RTJ GETCHR_^1_%JMP FORMER_^1_%STA LU1+1_^1_%SUB COMMA_(IF COMMA, ONLY 1 CHAR FOR 1ST LU_^1_%SAN GTCOMA_'NO_^1_%STA LU1€€+1_(YES_^1_%JMP* GTLU2_^1GTCOMA RTJ GETCHR_^1_%JMP FORMER_^1_%SUB COMMA_(THIS BETTER BE A COMMA_^1_%SAZ GTLU2_(OK_^1_%JMP FORMER_'ERROR, NO COMMA_^1GTLU2 RTJ GETCHR_'GET SECOND LU_^1_%JMP FORMER_^1_%STA LU2_^1_%RTJ GETCHR_^1_%JMP STSCAT_'2ND LU HAD ONLY 1 CHAR_^1_%STA LU2+1_^1_%SUB- BLANK_^1_%SAN LUMCOM_^1_%STA LU2+1_(2ND CHAR WAS A BLANK - IGNORE IT_^1_%JMP* STSCAT_^€€1LUMCOM SUB CONC_^1_%SAN LUMCM1_^1_%JMP FORMER_'ERROR - COMMA AT END OF STATEMENT_^1LUMCM1 RTJ GETCHR_'CHECK FOR TOO MANY CHARS_^1_%JMP STSCAT_'END OF LINE_^1_%SUB- BLANK_^1_%SAZ STSCAT_'BLANK_^1_%JMP FORMER_^1STSCAT RTJ FRECRD_'GET START OF SCRATCH AREA_^1CHREAD RTJ READIT_'READ NEXT RECORD_^1_%JMP COMWAT_^1_%LDA RECBUF,I_^1_%SUB STARK_(IS IT A *K RECORD_^1_%SAN CHNOT€€_(NO_^1_%JMP* CHFOND_'YES_^1CHNOT ENQ FMPONT_'WE DONT WANT THIS RECORD_^1_%LDA RECBUF,B_$IS IT THE END OF FILE_^1_%SAP CHNEXT_^1_%JMP COMWAT - DONE_^1CHNEXT RTJ NRECAD_'NO - GET LOCATION OF NEXT REC_^1_%RTJ NRECRD_^1_%JMP* CHREAD_'GO DO IT_^1CHFOND ENA 3_,*K FOUND - LOOK FOR ILU_^1_%STA CCOUNT_^1CHONEX RTJ GETCHO_'GET NEXT CHAR FROM RECBUF_^1_%JMP CHNOT_^1_%SUB- BLANK_(I€€S THE CHAR A BLANK_^1_%SAN NTBLNK_^1_%JMP* CHNOT_(YES - NOT THE RIGHT RECORD_^1NTBLNK SUB =N$29_(NOT BLANK, IS IT 'I'_^1_%SAZ FOUNDI_'YES_^1_%JMP* CHONEX_'NO - KEEP LOOKING FOR I_^1FOUNDI LDA CCOUNT_'SAVE POSITION OF LU CHARS_^1_%STA PCOUNT_^1_%RTJ GETCHO_'GET 1ST CHAR OF LU_^1_%JMP CHNOT_^1_%SUB LU1_*COMARE_^1_%SAZ LU1OK_^1_%JMP* CHNOT_(NOT THE RIGHT ONE_^1LU1OK LDA LU1€€+1_(ARE THERE 2 CHARS FOR THE LU_^1_%SAN LU2CHR_'YES_^1_%JMP* LUGOOD_'NO_^1LU2CHR RTJ GETCHO_'SHOULD BE 2 CHARS, CHECK 2ND_^1_%JMP CHNOT_^1_%SUB LU1+1_^1_%SAZ LUGOOD_'OK_^1_%JMP* CHNOT_(NO GOOD_^1LUGOOD LDA LU2_*REPLACE CHARACTER(S)_^1_%RTJ PUTCHR_^1_%LDA LU1+1_(HOW MANY CHARS ORIGINALLY_^1_%SAZ ORIG1_(1_^1_%JMP* ORIG2_(2_^1ORIG1 LDA LU2+1_(HOW MANY REPLACES THEM_^1_%SAN€€ NOW2_)2_^1_%JMP* ALLREP_'1 - NO FURTHER WORK ON IT_^1NOW2_!STA* PREVCH_'THIS IS THE CHAR TO PUT OUT NEXT_^1_%RTJ GETCHO_'GET THE NEXT ONE IN THE RECORD_^1_%JMP WERDON_'DONE_^1_%STA* SAVECH_'SAVE IT, IT GOES OUT AFTER THE ONE IN PREVCH_^1_%SUB BLANK_^1_%SAN DOOPRV_^1WERDON LDA* PREVCH_^1_%RTJ PUTCHR_'LAST CHAR_^1_%JMP* ALLREP_^1DOOPRV LDA* PREVCH_'PUT OUT PREVIOUS CHAR_^1_%RT€€J PUTCHR_^1_%LDA* SAVECH_'THIS IS THE NEW 'PREVIOUS'_^1_%JMP* NOW2_^1ORIG2 LDA LU2+1_(HOW MANY CHARS REPLACE THE 2 ORIGINAL_^1_%SAZ NOW1_)1_^1_%RTJ PUTCHR_'2 - PUT OUT THE SECOND ONE_^1_%JMP* ALLREP_^1NOW1_!LDA- BLANK_^1_%RTJ PUTCHR_'BLANK THE CHAR IN CASE NO MORE ON LINE_^1_%LDA PCOUNT_^1_%INA -1_^1_%STA PCOUNT_^1_%RTJ GETCHO_'TRANSFER ANY REMAINING CHARS_^1_%JMP ALLREP€€_^1_%SUB BLANK_^1_%SAZ ALLREP_^1_%ADD BLANK_^1_%RTJ PUTCHR_^1ALLREP RTJ WRITIT_'WRITE RECORD BACK OUT_^1_%JMP COMWAT_^1_%JMP* CHNOT_(GO LOOK FOR ANOTHER_^1_%SPC 1_^1PREVCH NUM 0_^1SAVECH NUM 0_^1_%BSS LU1(2),LU2(2)_^1_%EJT_]_^1************************************************************************_^1*_$SUBROUTINES_^1*******************************************************€€*****************_^1_%SPC 2_^1************************************************************************_^1* ROUTINE TO OUTPUT MESSAGES TO DEVICE BEING USED AS THE OUTPUT DEVICE._^1* CALLING SEQUENCE_(RTJ MESAGE_^1*_9ARGUMENT 1_'ADDRESS OF MESSAGE_^1*_9ARGUMENT 2_'NUMBER OF WORDS OF MESSAGE_^1*_9RETURN_^1************************************************************************_^1_%S€€PC 2_^1MESAGE 0_"0_,OUTPUT MESSAGES_^1_%LDA* (MESAGE)_$ADDRESS OF MESSAGE_^1_%STA* MSBUFF_^1_%RAO* MESAGE_^1_%LDA* (MESAGE)_^1_%STA* OUTWDS_'NUMBER OF WORDS_^1_%RAO* MESAGE_^1_%LDA OUTSW_(DO WE USE OUTPUT COMMENT DEVICE FOR MESSAGE_^1_%SAZ NORDEV-*-1_"NO_^1_%LDA- OUTCOM_'YES_^1_%EOR- ONEBIT+12_^1_%JMP* STRDEV_^1NORDEV LDA OUTDEV_^1STRDEV STA* OUTDVM_'SAVE DEVICE NO._^1_%LDA =X€€MSIO_^1_%STA PARLST_'ADDR OF PARAM LIST_^1_%RTJ DOIO_^1_%JMP COMWAT_'ERROR_^1_%JMP* (MESAGE)_^1_%SPC 2_^1*_$PARAM LIST FOR WRITING MESSAGES_^1_%SPC 2_^1MSIO_!VFD N2/1,N5/2,N1/0,N8/1_'WRITE_^1_%ADC COMPL_^1_%NUM 0_^1OUTDVM NUM $1000_^1OUTWDS NUM 0_^1MSBUFF ADC 0_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO CLEAR OUT I€€NPUT-READ BUFFER. SETS 40 WORDS AT INSRBF TO -0_^1************************************************************************_^1_%SPC 2_^1CLRBFI 0_"0_^1_%STQ* QH2_^1_%ENQ 39_^1_%LDA- NZERO_^1CLRZAP STA INSRBF,Q_^1_%SQZ CLRKEP-*-1_^1_%INQ -1_^1_%JMP* CLRZAP_^1CLRKEP CLR A_^1_%STA CCOUNT_'CLEAR CHAR POINTER_^1CLRDON LDQ* QH2_^1_%JMP* (CLRBFI)_^1QH2_"NUM 0_^1_%EJT_]_^1***********€€*************************************************************_^1* ROUTINE TO READ THE NEXT COMMAND INTO THE 40-WORD BUFFER INSRBF._^1************************************************************************_^1_%SPC 2_^1GETCOM 0_"0_,GET COMMAND_^1_%LDA OUTSW_(DO WE LOOK FOR INPUT ON COMMENT DEVICE_^1_%SAZ NORIND-*-1_"NO_^1_%LDA- INCOM_(YES_^1_%EOR- ONEBIT+12_^1_%JMP* STRIND_^1NORI€€ND LDA INDEV_^1STRIND STA INDEVC_'SAVE DEVICE_^1_%LDA =XRDCMIO_$ADDR OF PARAM LIST_^1_%STA PARLST_^1_%RTJ DOIO_)INPUT COMMAND_^1_%JMP GOBAK_(TIMEOUT - RETURN1_^1_%LDA STATUS_^1_%ALS 1_^1_%SAM SHREAD-*-1_"SHORT READ_^1_%LDA* COMWDS_^1_%JMP* GTNUMB_^1SHREAD LDA INSRBF+39_#CALC NUMBER OF WORDS INPUT_^1_%SUB =XINSRBF_^1GTNUMB ALS 1_,SAVE NO. OF CHARS INPUT_^1_%STA* INCNT_^1€€_%CLR A_^1_%STA OUTSW_^1_%RAO* GETCOM_^1_%RAO* GETCOM_^1GOBAK JMP* (GETCOM)_^1INCNT NUM 0_,INPUT CHAR COUNTER_^1_%SPC 2_^1*_$PARAM LIST FOR READING COMMANDS_^1_%SPC 2_^1RDCMIO VFD N2/1,N5/4,N1/0,N8/1_'FREAD_^1_%ADC COMPL_^1_%NUM 0_^1INDEVC NUM $1000_^1COMWDS NUM 40_^1_%ADC INSRBF_^1_%EJT_]_^1************************************************************************_^1* R€€OUTINES TO GET THE NEXT CHARACTER IN A STRING FROM A BUFFER._^1* USE GETCHO TO GET CHARACTERS FROM THE SKELETON FILE BUFFER (RECBUF)_^1* USE GETCHR TO GET CHARACTERS FROM EITHER THE COMMAND STATEMENT OR_^1* FROM A RECORD THAT IS BEING ENTERED INTO THE SKELETON FILE VIA BUILD_^1* OR INSERT (BUFFER INSRBF)_^1* CCOUNT POINTS TO THE CHARACTER THAT IS TO BE PICKED UP AND IS_^1* UPDATED €€BY 1 EACH TIME THE ROUTINE IS CALLED._^1* WHEN THE END OF LINE HAS BEEN REACHED, RETURN1 IS TAKEN, OTHERWISE_^1* RETURN2 IS TAKEN WITH THE REQUESTED CHARACTER IN THE A REGISTER._^1* CALLING SEQUENCE_(RTJ GETCHR (RTJ GETCHO)_^1*_9RETURN1_#(EOL)_^1*_9RETURN2_#(A REG CONTAINS CHARACTER)_^1* NOTE -- THE INSTRUCTION TO BE EXECUTED AT RETURN1 MUST BE A 2-WORD_^1* INSTRUCTION._^1******€€******************************************************************_^1_%SPC 1_^1*_$ROUTINE TO GET CHARACTERS FROM SKELETON FILE VIA RECBUF_^1_%SPC 1_^1GETCHO 0_"0_^1_%LDA* GETCHO_^1_%STA* GETCHR_^1_%ENA 1_^1_%JMP* GETENT_^1_%SPC 2_^1*_$ROUTINE TO GET CHARS FROM INSRBF_^1GETCHR 0_"0_^1_%CLR A_^1GETENT STQ* GETHQ_^1_%LDQ* CCOUNT_'GET WORD POINTER_^1_%QRS 1_,CALC WORD THAT CHAR €€IS IN_^1_%SAZ GETRBF_'GET WORD FROM INSRBF_^1_%LDQ RECBUF,B_$GET WORD FROM RECBUF (SKEL FILE)_^1_%JMP* GETON_^1GETRBF LDQ INSRBF,Q_^1GETON LDA* CCOUNT_^1_%AND- LPMASK+1_$SEE IF ODD OR EVEN POSITION CHAR_^1_%LLS 16_^1_%SQN ODDCHR-*-1_"ODD - GET LOW-ORDER CHAR_^1_%ARS 8_,EVEN - GET HIGH ORDER CHAR_^1ODDCHR AND- LPMASK+8_^1_%LDQ* GETHQ_^1_%RAO* CCOUNT_'BUMP CHAR POINTER_^1_%SU€€B- EOL_*IS IT THE END OF THE LINE_^1_%SAZ EOLCHR-*-1_"YES_^1_%RAO* GETCHR_'NO_^1_%RAO* GETCHR_^1EOLCHR ADD- EOL_^1_%JMP* (GETCHR)_^1GETHQ NUM 0_^1CCOUNT NUM 0_,INPUT CHAR COUNTER (POINTER)_^1_%EJT_]_^1************************************************************************_^1* ERROR MESSAGE ROUTINES._^1* ERMSG IS ENTERED VIA A JMP. RETURN IS TO THE COMMAND PROCESSOR AFTER_^1* M€€ESSAGE IS OUTPUT._^1* ERMSGR IS ENTERED VIA A RTJ. RETURN IS TO THE INSTRUCTION FOLLOWING_^1* THE CALL._^1* IN EITHER CASE, Q EQUALS THE ERROR MESSAGE NUMBER (SEE ERMTAB)._^1************************************************************************_^1_%SPC 2_^1ERMSGR 0_"0_^1_%RAO* RETFLG_^1ERMSG QLS 1_^1_%LDA ERMTAB,Q_$GET ENTRIES FROM TABLE_^1_%STA* ERRADR_^1_%LDA ERMTAB+1,Q_^1€€_%STA* ERRLEN_^1_%LDA- OUTCOM_'RESET OUTPUT DEVICE TO CONSOLE_^1_%EOR- ONEBIT+12_^1_%STA OUTDEV_^1_%RTJ MESAGE_^1ERRADR ADC 0_^1ERRLEN NUM 0_^1_%LDA COMANF_'IS INPUT OTHER THAN CONSOLE_^1_%SAZ WHERET_'NO_^1_%RTJ MESAGE_'YES - ASK FOR COMMANDS ON CONSOLE_^1_%ADC MSG4B_^1_%ADC MSG4E-MSG4B_^1_%CLR A_^1_%STA COMANF_^1WHERET LDQ* RETFLG_'WHERE D6 WE RETURN_^1_%SQZ JUSTRT_^1_€€%STA* RETFLG_'T6 THE CALLING ROUTINE_^1_%JMP* (ERMSGR)_^1JUSTRT JMP COMWAT_'RETURN TO COMMAND PROCESSOR_^1RETFLG NUM 0_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO GET THE DEVICE NUMBER ASSOCIATED WITH A PARTICULAR COMMAND_^1* EXIT ROUTINE WITH DEVICE NUMBER STORED AT LU IN HEX._^1*********************************************€€***************************_^1_%SPC 2_^1GETLU 0_"0_,GET LOGICAL UNIT NUMBER FROM COMMAND_^1_%CLR A_^1_%STA LU_^1_%ENA -2_^1_%RTJ GETNUM_'GET THE NUMBER_^1_%JMP LUDONE_'ERROR, RETURN1_^1_%STA LU_^1_%RAO* GETLU_^1_%RAO* GETLU_^1LUDONE JMP* (GETLU)_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO INPUT A DECIMAL NUMBER. ONLY D€€ECIMAL DIGITS (FOLLOWED BY_^1* A COMMA WHERE NECESSARY) ARE VALID. THE NUMBER IS CONVERTED TO HEX_^1* NOTATION AND RETURNED IN THE A REGISTER._^1************************************************************************_^1_%SPC 2_^1GETNUM 0_"0_,INPUT A DECIMAL NUMBER_^1_%STQ QH1_^1_%STA QCOUNT_^1_%CLR A_^1_%STA TEMPB_^1DIGNEX RTJ GETCHR_'GET CHAR_^1_%JMP NUMDON_'END OF LINE_^1€€_%SUB COMMA_(IS IT A COMMA_^1_%SAN ANONUM-*-1_"NO_^1_%LDA COMMAF_'YES - WAS COMMA THE PREVIOUS CHAR_^1_%SAZ NOTACM_'NO_^1_%JMP NUMERC_'YES-ERROR_^1NOTACM JMP* NUMDOC_^1ANONUM ADD CONC_)IS IT A BLANK_^1_%SAN MORNUM-*-1_"NO_^1_%LDA TEMPB_(YES- WAS THE NUMBER ALREADY ENTERED_^1_%SAZ NONUMY_'NO-ERROR_^1_%JMP* NUMDON_'YES - RETURN_^1NONUMY JMP* NUMERC_^1MORNUM SUB- ONEBIT+4_$IS€€ IT A DECIMAL DIGIT CHAR_^1_%SAP OK1NUM_^1_%JMP* NUMERC_'NO, LESS THAN $30_^1OK1NUM STA TEMPA_^1_%SUB- ACON_^1_%SAM OK2NUM_^1_%JMP* NUMERC_'NO, GREATER THAN $39_^1OK2NUM LDA QCOUNT_^1_%SAN KEEGO1_^1_%JMP* NUMERC_'ERROR - TOO MANY CHARACTERS_^1KEEGO1 INA 1_^1_%STA QCOUNT_^1_%LDA TEMPB_(MULT PREVIOUS PART BY 10 DECIMAL_^1_%CLR Q_^1_%MUI- ACON_^1_%ADD TEMPA_^1_%STA TEMPB_^1€€_%CLR A_^1_%STA COMMAF_^1_%JMP* DIGNEX_^1NUMDOC RAO COMMAF_'SET COMMA FLAG_^1NUMDON RAO* GETNUM_'RETURN2_^1_%RAO* GETNUM_^1_%LDA TEMPB_(RETURN WITH THE NUMBER_^1NUMERC LDQ* QH1_*COME IN HERE WHEN ERROR FOR RETURN1_^1_%JMP* (GETNUM)_^1QH1_"NUM 0_^1QCOUNT NUM 0_^1_%SPC 2_^1NUMERR ENQ 5_,INVALID CHAR IN RECORD NO. MESSAGE_^1_%JMP ERMSG_^1_%EJT_]_^1****************************€€********************************************_^1*_$CONVERT HEX NUMBER IN RECNO TO 6 CHAR DECIMAL DIGIT STARTING_^1*_$IN PRIDUM_^1************************************************************************_^1_%SPC 2_^1HEXDEC 0_"0_^1_%LDA- I_^1_%STA HOLEYE_^1_%ENQ 5_^1_%STQ- I_^1_%LDA- BLANK_^1BLNWRK STA CHRARE,Q_$BLANK WORK AREA_^1_%INQ -1_^1_%SQM SETDIV_^1_%JMP* BLNWRK_^1SETDIV L€€DA RECNO_(SET UP DIVIDEND_^1DIVI_!CLR Q_^1_%DVI- ACON_)DIVIDE BY 10 DECIMAL_^1_%ADQ =N$30_(CONVERT REMAINDER TO ASCII_^1_%STQ CHRARE,I_$SAVE IN WORK AREA_^1_%SAZ DONDIV_'DONE WHEN QUOTIENT WAS 0_^1_%LDQ- I_^1_%INQ -1_^1_%STQ- I_^1_%JMP* DIVI_^1DONDIV LDA CHRARE_^1_%ALS 8_^1_%ADD CHRARE+1_^1_%STA PRIDUM_^1_%LDA CHRARE+2_^1_%ALS 8_^1_%ADD CHRARE+3_^1_%STA PRIBUF_^1_%LDA€€ CHRARE+4_^1_%ALS 8_^1_%ADD CHRARE+5_^1_%STA PRIBUF+1_^1_%LDA HOLEYE_^1_%STA- I_^1_%JMP* (HEXDEC)_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO CHECK THE DELETION TABLE (DELTAB) FOR A RANGE OF RECORD_^1* NUMBERS BETWEEN THE VALUES STORED AT 'FIRST' AND 'SECOND',INCLUSIVELY_^1* IF ONE OF THE NUMBERS IN THE RANGE IS ALREADY I€€N THE TABLE, IT HAS_^1* BEEN PREVIOUSLY DELETED AND THE COMMAND STATEMENT THAT REFERRED TO_^1* IT IS IN ERROR. ERROR MESSAGE 7 IS DISPATCHED TO. IF THE NUMBERS ARE_^1* NOT IN THE TABLE AND THE FUNCTION THAT CALLED THIS ROUTINE WAS INSERT,_^1* A RETURN IS DONE AT THIS POINT. IF THE FUNCTION WAS DELETE, THE_^1* ENTIRE RANGE OF NUMBERS IS ADDED TO DELTAB BEFORE A RETURN IS DONE._^1* M€€AXIMUM NUMBER OF DELETIONS ALLOWED BEFORE RESEQUENCING THE FILE IS_^1* EQUATED TO DELSIZ. IF THIS MAXIMUM IS VIOLATED, AN ERROR MESSAGE IS_^1* PRINTED AND THE PRESENT DELETE COMMAND IS IGNORED._^1************************************************************************_^1_%SPC 2_^1CHEKDT 0_"0_,CHECK DELETION TABLE FOR RECORDS IN THE RANGE_^1_%STQ HOLQUE_^1_%LDA FIRST_^1_%STA TEM€€PA_^1_%LDA* ENUFLG_'SAVE POSITION OF END OF DELTAB_^1_%STA* ENUSAV_^1TABBEG CLR Q_,POINT TO BEGINNING OF TABLE_^1ENTNEX LDA DELTAB,Q_$GET NEXT ENTRY_^1_%EOR- NZERO_^1_%SAZ ENDTAB-*-1_"END OF TABLE_^1_%EOR- NZERO_^1_%SUB TEMPA_(IS THIS NUMBER IN THE TABLE_^1_%SAZ NERROR-*-1_"YES_^1_%INQ 1_,NO_^1_%JMP* ENTNEX_^1NERROR ENQ 7_^1_%JMP ERMSG_^1ENDTAB LDA TEMPA_(TRY NEXT NUMBER_^€€1_%SUB SECOND_'IS THE WHOLE RANGE CHECKED_^1_%SAP DONCHK-*-1_"YES_^1_%RAO TEMPA_^1_%JMP* TABBEG_'NO-CHECK NEXT RECORD NUMBER_^1DONCHK LDA INSFLG_'INSERT OR DELETE_^1_%SAZ KEEPDL-*-1_"DELETE_^1_%JMP* (CHEKDT)_$INSERT - DONE_^1KEEPDL LDA FIRST_^1_%STA TEMPA_^1KEEPD1 LDA* ENUFLG_'MAKE SURE THERES ROOM IN THE DELETE TABLE_^1_%SUB =XDELSIZ_^1_%INA 1_^1_%SAM KEEPD2_'OK_^1_%LDQ*€€ ENUSAV_'NO GOOD, RESTORE END OF TABLE INDICATOR_^1_%STQ* ENUFLG_^1_%SET A_^1_%STA DELTAB,Q_^1_%ENQ 11_^1_%JMP ERMSG_^1KEEPD2 LDA TEMPA_^1_%STA DELTAB,Q_$PUT THE RANGE OF NUMBERS INTO THE TABLE_^1_%RAO* ENUFLG_^1_%INQ 1_^1_%SUB SECOND_(ARE WE DONE_^1_%SAP DNADED-*-1_"YES_^1_%RAO TEMPA_(NO - DO THE NEXT NUMBER_^1_%JMP* KEEPD1_^1DNADED SET A_^1_%STA DELTAB,Q_$NEW POSITION€€ OF END-OF-TABLE_^1_%JMP* (CHEKDT)_^1ENUSAV NUM 0_^1ENUFLG NUM 0_^1_%SPC 2_^1CHKDT1 0_"0_,CHECK THIS NUMBER ONLY AGAINST DELETION TABLE_^1_%LDA FIRST_^1_%STA SECOND_^1_%RTJ* CHEKDT_^1_%JMP* (CHKDT1)_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO READ A RECORD FROM THE SKELETON FILE (SCRATCH AREA) INTO_^1* RECBUF. IF THE SECT€€OR TO BE READ WAS PHYSICALLY READ ON THE PREVIOUS_^1* CALL TO READIT, NO PHYSICAL READ IS DONE THIS TIME. THE SECTOR_^1* CONTAINING THE RECORD YOU WANT IS IN SECNUM AND THE POSITION OF THE_^1* RECORD IN THE SECTOR IS SPECIFIED BY RPOSIT(FIRST HALF=0, SECOND_^1* HALF=1). IF THE FLAG 'ALWAYS'=1, THE PHYSICAL READ IS ALWAYS DONE._^1* UPON EXITING, I=0 FOR RECORD IN THE FIRST HALF OF €€A SECTOR, OR I=48_^1* FOR A RECORD IN THE SECOND HALF._^1* ENTRY POINTS ARE READIT FOR THE READ FUNCTION AND IOSET FOR THE WRITE_^1* FUNCTION. AN I/O ERROR CAUSES A RETURN TO RETURN1, WHICH MUST BE A_^1* TWO-WORD INSTRUCTION._^1************************************************************************_^1_%SPC 2_^1READIT 0_"0_,READ FROM SCRATCH AREA INTO RECBUF_^1_%CLR A_,SET FOR RE€€AD_^1_%STA WRITFL_^1_%LDA FREAD_(FUNCTION IS FREAD_^1_%STA* LOADIO_^1_%LDA ALWAYS_'SHOULD THE READ ALWAYS BE DONE_^1_%SAN IOSET-*-1_#YES_^1_%LDA* SECTOR_'NO- SHOULD WE DO IT NOW_^1_%SUB SECNUM_^1_%SAN IOSET-*-1_#YES_^1_%JMP* SETPOS_'NO-WEVE ALREADY READ IN THIS SECTOR_^1IOSET LDA- SCRDEV_'SET UP PARAMETERS_^1_%EOR- ONEBIT+12_^1_%STA* INDEVL_'DEVICE LU_^1_%LDA SECNUM_^1_%STA€€* SECTOR_'SECTOR NUMBER_^1_%LDA =XLOADIO_^1_%STA* PARLST_'ADDR OF PARAMETER LIST_^1_%RTJ* DOIO_^1_%JMP INOROT_'ERROR RETURN_^1_%LDA* WRITFL_'GOOD RETURN - READ OR WRITE_^1_%SAZ SETPOS-*-1_"READ_^1_%JMP* SOTPOS_'WRITE_^1SETPOS CLR A_^1_%LDQ RPOSIT_'WHICH HALF OF THE SECTOR ARE WE IN_^1_%SQZ BEGSEC-*-1_"1ST HALF I=0_^1_%INA 48_+2ND HALF -- I=48_^1BEGSEC STA- I_^1_%CLR A,Q_^€€1_%RAO* READIT_^1_%RAO* READIT_^1_%JMP* (READIT)_$GOOD RETURN_^1_%SPC 1_^1INOROT LDA* WRITFL_'DETERMINE WHICH FUNCTION HAD THE ERROR_^1_%SAZ REDRET-*-1_^1_%JMP* (WRITIT)_$WRITE_^1REDRET JMP* (READIT)_$READ_^1WRITFL NUM 0_,READ/WRITE FLAG_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO WRITE BUFFER RECBUF TO SKELETON FILE. USES€€ CODE FROM_^1* READIT._]_^1************************************************************************_^1_%SPC 2_^1WRITIT 0_"0_,WRITE RECORDS TO SCRATCH AREA_^1_%ENA 1_^1_%STA* WRITFL_'SET FLAG_^1_%LDA FRITE_^1_%STA* LOADIO_'FUNCTION IS FWRITE_^1_%JMP* IOSET_(USE CODE FROM READIT_^1_%SPC 1_^1SOTPOS CLR A,Q_^1_%RAO* WRITIT_^1_%RAO* WRITIT_^1_%JMP* (WRITIT)_$GOOD RETURN FROM WRITIT€€_^1_%SPC 2_^1*_$PARAM LIST FOR READIT AND WRITIT_^1_%SPC 2_^1LOADIO ADC 0_,FUNCTION_^1_%ADC COMPL_^1_%NUM 0_^1INDEVL NUM 0_^1_%NUM 96_^1_%ADC RECBUF_^1_%NUM 0_^1SECTOR NUM 0_,SECTOR NUMBER_^1_%EJT_]_^1************************************************************************_^1* GENERAL I/O REQUEST ROUTINE. PARLST MUST CONTAIN THE PARAMETER_^1* LIST ADDRESS._^1************€€************************************************************_^1_%SPC 2_^1DOIO_!0_"0_,ROUTINE TO MAKE THE I/O REQUEST_^1_%LDA- I_^1_%STA* IOISAV_^1_%RTJ- (AMONI)_^1_%NUM $2000_^1PARLST ADC 0_,ADDR OF PARAM LIST_^1_%EXIT_^1COMPL STQ* STATUS_'COMPLETION ADDR -- SAVE STATUS_^1_%SQM IOERR-*-1_#ERROR - RETURN 1_^1_%RAO* DOIO_)OK - RETURN2_^1_%RAO* DOIO_^1IOERR LDA* IOISAV_^1_%STA- €€I_^1_%CLR A_^1_%JMP* (DOIO)_^1IOISAV NUM 0_^1STATUS NUM 0_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO TRANSFER CHARS FROM INSRBF TO RECBUF UNTIL $FF FOUND._^1************************************************************************_^1_%SPC 2_^1MOVSTR 0_"0_^1_%STQ* HOLQUE_^1_%CLR Q_^1_%ENA -40_^1_%STA TEMPA_^1STRLOP LDA €€INSRBF,Q_$GET WORD_^1_%STA TEMPB_^1_%AND- LPMASK+8_$ISOLATE LO ORDER CHAR_^1_%EOR- LPMASK+8_$IS IT $FF_^1_%SAZ LOWISF-*-1_"YES_^1_%LDA TEMPB_(NO-TRANSFER WORD (BOTH CHARS ARE GOOD)_^1_%STA RECBUF,B_^1_%LDA TEMPA_^1_%INA 1_^1_%SAZ STRDUN-*-1_"DONE_^1_%STA TEMPA_(NOT DONE- BUMP COUNTER_^1_%INQ 1_^1_%JMP* STRLOP_^1STRDUN LDQ HOLQUE_^1_%JMP* (MOVSTR)_$RETURN_^1LOWISF LDA TEM€€PB_(ISOLATE HI ORDER CHAR_^1_%AND- NZERO+8_^1_%EOR- NZERO+8_^1_%SAZ STRNOR-*-1_"ITS FF TOO - DONT TRANSFER WORD_^1_%EOR- NZERO+8_%HI ORDER CHAR IS GOOD_^1_%STA RECBUF,B_^1STRNOR JMP* STRDUN_'DONE_^1HOLQUE NUM 0_,TEMP STORAGE OF Q_^1HOLEYE NUM 0_,TEMP STORAGE OF I_^1_%EJT_]_^1************************************************************************_^1* CLEARING, INITIALIZING ROUT€€INES_^1************************************************************************_^1_%SPC 2_^1CLRSTR 0_"0_,SET UP WORDS AT STARNF (CLEAR 1, BLANK 5)_^1_%CLR A_^1_%STA STARNF_^1_%LDA- BLANK_^1_%STA STARNF+1_^1_%STA STARNF+2_^1_%STA STARNF+3_^1_%STA STARNF+4_^1_%STA STARNF+5_^1_%JMP* (CLRSTR)_^1_%SPC 2_^1BLNBFI 0_"0_,BLANK OUT RECBUF_^1_%STQ HOLQUE_^1_%LDQ =N95_^1_%LDA BLNB€€LN_^1BLBLBL STA RECBUF,Q_$BLANK RECBUF_^1_%INQ -1_^1_%SQM BLNBFD-*-1_^1_%JMP* BLBLBL_^1BLNBFD LDQ HOLQUE_^1_%CLR A_^1_%STA- I_^1_%JMP* (BLNBFI)_^1_%SPC 2_^1BRAKN 0_"0_,SAVE THE NAME FROM A *N STATEMENT_^1_%RAO CCOUNT_^1_%STQ HOLQUE_^1_%ENQ -6_^1BRKNEX RTJ GETCHR_^1_%JMP BRDUN_(NO MORE CHARS_^1_%SUB COMMA_^1_%SAN USEC_^1_%JMP* BRDUN_(STOP WHEN COMMA FOUND_^1USEC_!ADD €€COMMA_^1_%STA STARNF+6,Q_"SAVE A CHAR IN STARNF AREA_^1_%INQ 1_^1_%SQP BRDUN-*-1_#6 CHARS_^1_%JMP* BRKNEX_^1BRDUN LDQ HOLQUE_^1_%JMP* (BRAKN)_^1_%SPC 3_^1REPLAC 0_"0_,SET UP THE INSERTED RECORD IN THE SECTOR_^1_%ENQ 47_^1_%CLR A_^1NEWZER STA RECBUF,B_$ZERO HALF OF SECTOR INTO WHICH IT WILL GO_^1_%INQ -1_^1_%SQM GTNEWD-*-1_"DONE_^1_%JMP* NEWZER_^1GTNEWD RTJ MOVSTR_'TRANS€€FER NEW RECORD TO THAT SECTOR HALF_^1_%JMP* (REPLAC)_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO READ NEW RECORD FOR BUILD,LOAD,INSERT_^1************************************************************************_^1_%SPC 2_^1GETBLD 0_"0_,READ NEXT RECORD FOR BUILD,LOAD,INSERT_^1_%RTJ CLRBFI_'INIT INPUT BUFFER_^1_%LDA =XBLDIO_^€€1_%STA PARLST_'ADDR OF PARAM LIST_^1_%RTJ DOIO_)REQUEST THE IO_^1_%JMP NOINPU_'ERROR RETURN_^1_%LDA INSRBF_'CHECK FOR EMPTY BUFFER_^1_%SUB- NZERO_^1_%SAZ ENDSIN_'EMPTY-RETURN1_^1_%RAO* GETBLD_'GOOD RECORD READ IN - RETURN2_^1_%RAO* GETBLD_^1ENDSIN CLR A_^1_%JMP* (GETBLD)_^1_%SPC 2_^1NOINPU RTJ ISTREO_'CHECK FOR EOF_^1_%SAZ NOINP1_^1_%JMP* ENDSIN_'EOF_^1NOINP1 LDA LUTYPE_'€€INPUT ERROR - IS THE DEVICE THE CONSOLE_^1_%SUB* TTYTYP_'TYPE CODE FOR CONSOLE_^1_%SAN CONEND_^1_%JMP* GETBLD+1_$YES-ASSUME TIME OUT -- REQUEST I/O AGAIN_^1CONEND JMP* ENDSIN_'NO-ASSUME END OF INPUT - RETURN1_^1TTYTYP NUM 6_,TYPE CODE FOR TTY_^1_%SPC 2_^1*_$PARAMETER LIST FOR BUILD_^1_%SPC 2_^1BLDIO VFD N2/1,N5/4,N1/0,N8/1_'FREAD_^1_%ADC COMPL_^1_%NUM 0_^1BLDLU NUM 0_,DEV€€ICE_^1_%NUM 40_+WORDS_^1_%ADC INSRBF_'BUFFER_^1_%EJT_]_^1************************************************************************_^1*_$TRANSFER INFO FROM INSTALLATION REC TO SKEL REC_^1************************************************************************_^1_%SPC 2_^1* ENTER HERE TO STOP ON FIRST BLANK OR WHEN N CHARS TRANSFERRED_^1_%SPC 1_^1TRNCHB 0_"0_^1_%STA* BCHARS_^1_%L€€DA* TRNCHB_^1_%STA* TRNCHR_^1_%ENA 1_^1_%JMP* RPOINT_'SET FLAG AND GO TO ROUTINE_^1_%SPC 2_^1* ENTER HERE TO TRANSFER N CHARS OR WHEN 4 CONSEC BLANKS ENCOUNTERED_^1_%SPC 1_^1TRNCHR 0_"0_^1_%STA* BCHARS_'A CONTAINS NO. OF CHARACTERS_^1_%CLR A_,ZERO FLAG_^1_%STA* BLPOSP_'ZERO BLANK-POSITION-POINTER_^1_%STA* BLNKCT_'AND BLANK COUNTER_^1RPOINT STA* BFLAG_(FLAG_^1_%STQ PCOUNT_'PUT€€CHR POINTER_^1_%ENA $27_*ASCII CODE FOR APOSTRAPHE_^1_%RTJ PUTCHR_'PUT OUT '_^1TRNLOP LDA STARNF_^1_%SAZ FROMIN-*-1_"TAKE CHARS FROM INSRBF IF STARNF =0_^1_%JMP* FROMST_'TAKE CHARS FROM STARNF IF NE 0_^1FROMIN RTJ GETCHR_'GET CHAR_^1_%JMP ENDPUT_'END OF LINE_^1_%JMP* CHBFLG_^1FROMST LDQ BCHARS_'GET CHARACTER_^1_%INQ 6_,1 OF THE 6 CHARS IN STARNF_^1_%LDA STARNF,Q_^1CHBFLG S€€TA TEMPA_(SAVE CHAR_^1_%SUB- BLANK_(IS THE CHARACTER A BLANK_^1_%SAZ YSBLNK_'YES_^1_%JMP* ZBPP_)NO_^1YSBLNK LDQ BFLAG_(SHOULD WE STOP AT A BLANK_^1_%SQZ ISITFR_'NO_^1_%JMP* ENDPUT_'YES_^1ISITFR LDA* BLNKCT_'IS IT THE FIRST BLANK OF A GROUP_^1_%SAN NOTFIR_'NO_^1_%LDA PCOUNT_'YES- SAVE POSITION OF 1ST BLANK_^1_%STA BLPOSP_^1NOTFIR LDA BLNKCT_'BUMP COUNTER_^1_%INA 1_^1_%STA €€BLNKCT_^1_%INA -4_+IS THIS THE 4TH BLANK_^1_%SAZ IDDONE_'YES- END OF ID INFO_^1_%JMP* NOBEE_(NO_^1IDDONE JMP* ALDPUT_^1ZBPP_!CLR A_^1_%STA* BLPOSP_'ZERO BLANK-POSIT-POINTER_^1_%STA* BLNKCT_'AND BLANK COUNTER_^1NOBEE LDA TEMPA_^1_%RTJ PUTCHR_'PUT OUT CHAR_^1_%LDA BCHARS_^1_%INA 1_^1_%SAZ ALDPUT_'DONE_^1_%STA BCHARS_^1_%JMP* TRNLOP_'NOT DONE - DO NEXT CHAR_^1ALDPUT LDA* BLP€€OSP_'GET POSITION OF WHERE TO PUT THE APOSTROPHE_^1_%SAN PUTAPS_^1_%JMP* ENDPUT_'WE ALREADY HAVE TH+ POSITION_^1PUTAPS STA PCOUNT_^1ENDPUT ENA $27_^1_%RTJ PUTCHR_'PUT OUT ANOTHER '_^1_%CLR A_^1_%STA BFLAG_(CLEAR FLAG_^1_%JMP* (TRNCHR)_^1BFLAG NUM 0_^1BCHARS NUM 0_^1BLPOSP NUM 0_,BLANK-POSITION-POINTER_^1BLNKCT NUM 0_,BLANK COUNTER_^1_%EJT_]_^1****************************€€********************************************_^1* ROUTINE TO PUT A CHAR INTO RECBUF. ENTER WITH CHAR IN A REG AND THE_^1* CHARACTER POSITION IN PCOUNT_^1************************************************************************_^1_%SPC 2_^1PUTCHR 0_"0_,PUT CHARACTER INTO RECBUF_^1_%STA TEMPA_(SAVE CHAR_^1_%STQ PUTQUE_^1_%LDQ* PCOUNT_'DETERMINE WORD FROM CHAR POSITION_^1_%QRS 1_^1_€€%LDA RECBUF,B_$GET THAT WORD_^1_%STA TEMPB_^1_%LDA PCOUNT_^1_%AND- ONEBIT_'DETERMINE POSITION CHAR IS TO GO INTO_^1_%SAZ PUTHI_(HI ORDER_^1_%JMP* PUTLO_(LO ORDER_^1PUTHI LDA TEMPB_^1_%AND- LPMASK+8_$GET RID OF THE OLD CHAR THERE_^1_%STA TEMPB_^1_%LDA TEMPA_^1_%ALS 8_,SHIFT NEW CHAR TO PROPER POSITION_^1_%EOR TEMPB_(COMBINE THEM_^1PUTIT STA RECBUF,B_$SAVE THEM_^1_%RAO P€€COUNT_'BUMP POINTER_^1_%LDQ PUTQUE_^1_%JMP* (PUTCHR)_$RETURN_^1PUTLO LDA TEMPB_^1_%AND- NZERO+8_%SAVE HI ORDER CHAR_^1_%EOR TEMPA_(INSERT NEW LO ORDER CHAR_^1_%JMP* PUTIT_^1PUTQUE NUM 0_^1PCOUNT NUM 0_,OUTPUT CHAR POINTER_^1_%EJT_]_^1************************************************************************_^1* ROUTINE TO PRINT A RECORD ON THE PRINTER_^1************************€€************************************************_^1_%SPC 2_^1PRITIT 0_"0_^1_%RTJ* BLNPRB_'BLANK OUT PRINTER BUFFER_^1_%RTJ HEXDEC_'CONVERT RECORD NO. TO ASCII_^1_%RTJ* MOVPRI_'MOVE INFO TO PRINT BUFFER_^1_%LDA =XPRTIO_%ADDR OF PARAM LIST_^1_%STA PARLST_^1_%RTJ DOIO_^1_%JMP COMWAT_^1_%JMP* (PRITIT)_^1_%SPC 2_^1MOVPRI 0_"0_,MOVE 33 WORDS FROM RECBUF TO PRIBUF_^1*_8(STARTING AT€€ PRIBUF+3)_^1_%ENQ 32_^1PRIMOV LDA RECBUF,B_^1_%STA PRIBUF+3,Q_"MOVE ONE WORD_^1_%INQ -1_^1_%SQM LFCRTM_^1_%JMP* PRIMOV_^1LFCRTM LDA* MCRNLF_^1_%STA PRIBUF+36_^1_%JMP* (MOVPRI)_^1MCRNLF NUM $0D00_^1_%SPC 2_^1*_$ROUTINE TO BLANK PRINTER BUFFER_^1BLNPRB 0_"0_^1_%ENQ 35_^1_%LDA BLNBLN_^1BLNKIT STA PRIBUF,Q_^1_%INQ -1_^1_%SQM BLNKDN_^1_%JMP* BLNKIT_^1BLNKDN JMP* (BLNPRB)_^€€1_%EJT_]_^1*_$PRINTER PARAMETER LIST_^1_%SPC 1_^1PRTIO NUM $4C01_^1_%ADC COMPL_^1_%NUM 0_^1_%VFD N4/1,N2/2,N10/$FB_^1_%NUM 36_^1_%ADC PRIBUF_^1_%SPC 2_^1BUMPLN 0_"0_,BUMP PAGE LINE COUNT_^1_%LDA PGLNCT_^1_%INA 1_^1_%STA PGLNCT_^1_%INA -60_^1_%SAZ ENDPAG_^1_%JMP* (BUMPLN)_$NOT AT END OF PAGE_^1ENDPAG RTJ BLNPRB_'60 LINES, BLANK OUT THE BUFFER_^1_%LDA =XPRTIO_^1_%STA €€ PARLST_^1_%ENQ -6_^1_%STQ PGLNCT_^1SPACLN RTJ DOIO_)SKIP LINE_^1_%JMP COMWAT_^1_%LDQ PGLNCT_^1_%INQ 1_^1_%STQ PGLNCT_^1_%SQZ NEWPAG_'SKIP 6 LINES IN ALL_^1_%JMP* SPACLN_^1NEWPAG JMP* (BUMPLN)_$RESET LINE COUNT AND RETURN_^1_%EJT_]_^1************************************************************************_^1* MISCELLANEOUS ROUTINES_^1****************************************€€********************************_^1_%SPC 2_^1* ROUTINE TO SET UP THE STARTING LOCATION OF THE SCRATCH AREA AS THE_^1* FIRST RECORD TO READ._^1_%SPC 1_^1FRECRD 0_"0_,SETS UP STARTING LOCATION OF SCRATCH FOR READ_^1_%CLR A_^1_%STA RPOSIT_'SET UP STARTING POSITION IN SECTOR_^1_%LDA SCAREA_'GET STARTING SECTOR OF SCRATCH AREA_^1_%STA SECNUM_^1_%JMP* (FRECRD)_^1_%SPC 2_^1* ROUTIN€€E TO GET THE LOCATION OF THE NEXT RECORD IN THE SKELETON FILE_^1* FROM THE FIRST TWO WORDS OF THE INFO BLOCK._^1_%SPC 1_^1NRECAD 0_"0_,GETS LOCATION OF NEXT RECORD FROM INFO BLOCK_^1_%ENQ NSECT_^1_%LDA RECBUF,B_$GET LOCATION OF NEXT RECORD_^1_%STA NEXTSC_^1_%INQ 1_^1_%LDA RECBUF,B_^1_%STA NEXTPS_^1_%JMP* (NRECAD)_^1_%SPC 2_^1* ROUTINE TO SET UP TO READ THE NEXT RECORD IN TH€€E SKELETON ( USES THE_^1* INFO OBTAINED BY NRECAD)._^1_%SPC 1_^1NRECRD 0 0_.SET UP TO READ THE NEXT RECORD_^1_%LDA NEXTPS_^1_%STA RPOSIT_^1_%LDA NEXTSC_^1_%STA SECNUM_^1_%JMP* (NRECRD)_^1_%EJT_]_^1REPLY 0_"0_,GET REPLY TO 'ANY MORE INPUT' QUESTION_^1REPLY1 RTJ CLRBFI_'CLEAR BUFFER_^1_%RTJ GETCOM_'GET INPUT_^1_%JMP REPMSG_'TIMEOUT - ASK AGAIN_^1_%RTJ GETLU_(TREAT IT AS A €€LU_^1_%JMP LUNVAA_'BAD CHARACTER_^1_%LDA LU_^1_%SAN RETREP-*-1_"IF ANY MORE,RETURN1_^1_%RAO* REPLY_(NO MORE INPUT-RETURN2_^1_%RAO* REPLY_^1RETREP JMP* (REPLY)_^1LUNVAA ENQ 12_+TELL HIM ABOUT THE BAD CHARS_^1_%RTJ ERMSGR_^1REPMSG RAO OUTSW_^1_%RTJ MESAGE_'ASK FOR INPUT AGAIN_^1_%ADC MSG3B_^1_%ADC MSG3E-MSG3B_^1_%JMP* REPLY1_^1*_]_^1_%SPC 2_^1CHKPHY 0_"0_,CHECK IF LU IS VAL€€ID FOR THIS OPERATION_^1_%STA* LUTYPE_'SAVE TYPE_^1_%LDQ* (CHKPHY)_$GET ADDR OF TABLE_^1_%RAO* CHKPHY_^1NEXTYP LDA- (ZERO),Q_$NEXT ENTRY_^1_%SAM GOHOME_'ERROR-END OF TABLE_^1_%SUB* LUTYPE_'COMPARE ENTRY TO TYPE_^1_%SAZ GOODTP_'MATCH_^1_%INQ 1_,TRY NEXT ENTRY_^1_%JMP* NEXTYP_^1GOODTP RAO* CHKPHY_^1_%RAO* CHKPHY_^1_%LDA LU_^1GOHOME JMP* (CHKPHY)_^1LUTYPE NUM 0_^1_%SPC 2_^1*_$VA€€LIDITY TABLES_^1V134_!NUM 1,3,4,$FFFF_^1V1346 NUM 1,3,4,6,$FFFF_^1V1_#NUM 1,$FFFF_^1_%EJT_]_^1ITYPE 0_"0_,GET THE TYPE CODE FOR LU_^1_%STQ QH1_^1_%LDQ LU_^1_%LDQ+ LOG1A,Q_%ADDRESS OF PHYSTAB TABLE FOR LU_^1_%LDA- 8,Q_^1_%ARS 11_+ISOLATE TYPE CODE_^1_%AND- LPMASK+3_^1_%LDQ QH1_^1_%JMP* (ITYPE)_^1_%EJT_]_^1*********************************************************************€€***_^1*_$TABLES AND BUFFERS_^1************************************************************************_^1_%SPC 2_^1_%BZS DELTAB(DELSIZ),STARNF(6)_^1_%BSS COMBUF(40),RECBUF(96),NEXTBF(96)_^1_%BZS INSRBF(40)_^1_%BSS PRIDUM(1),PRIBUF(37)_^1_%BSS HEXARE(3),CHRARE(6)_^1_%SPC 3_^1************************************************************************_^1*_$ERROR MESSAGE PARAMETERS€€ IN PAIRS_^1************************************************************************_^1_%SPC 2_^1ERMTAB ADC ERMG0B_^1_%ADC ERMG0E-ERMG0B_^1_%ADC ERMG1B_^1_%ADC ERMG1E-ERMG1B_^1_%ADC ERMG2B_^1_%ADC ERMG2E-ERMG2B_^1_%ADC ERMG3B_^1_%ADC ERMG3E-ERMG3B_^1_%ADC ERMG4B_^1_%ADC ERMG4E-ERMG4B_^1_%ADC ERMG5B_^1_%ADC ERMG5E-ERMG5B_^1_%ADC ERMG6B_^1_%ADC ERMG6E-ERMG6B_^1_%ADC E€€RMG7B_^1_%ADC ERMG7E-ERMG7B_^1_%ADC ERMG8B_^1_%ADC ERMG8E-ERMG8B_^1_%ADC ERMG9B_^1_%ADC ERMG9E-ERMG9B_^1_%ADC ERG10B_^1_%ADC ERG10E-ERG10B_^1_%ADC ERG11B_^1_%ADC ERG11E-ERG11B_^1_%ADC ERG12B_^1_%ADC ERG12E-ERG12B_^1_%EJT_]_^1*_$CONSTANTS_^1ARNOLN NUM -4_+NEGATIVE OF MAX NO. OF DIGS IN RECORD NUM_^1*_$INFFLN IS THE NEG OF THE NUMBER OF CHARS IN INFO FIELD OF NAMBLK_^1INF€€FLN NUM -46_*INFO IS IN WDS 11-33 OF NAM BLOCK_^1SCAREA NUM 1_,STARTING SECTOR SECTOR OF SCRATCH (RELATIVE)_^1STAR_!NUM $2A_^1N_$NUM $4E_^1STARK NUM $2A4B_^1STARB NUM $2A42_^1STARE NUM $2A45_^1ENDE_!NUM $4E44_^1COMMA NUM $2C_^1CONC_!NUM $C_^1BLNBLN NUM $2020_^1ZERZER NUM $3030_^1ZERHI NUM $3000_^1FREAD VFD N2/1,N5/4,N1/0,N8/1_^1FRITE VFD N2/1,N5/6,N1/0,N8/1_^1€€_%SPC 2_^1*_$FLAGS_^1LOADED NUM 0_,NOT EQUAL 0 IF SKEL HAS BEEN LOADED (=MAX REC)_^1OUTDEV NUM 0_,LU OF OUTPUT_^1INDEV NUM 0_,LU OF INPUT_^1LU_#NUM 0_,HOLDS LU FOR VALIDITY CHECK_^1COMMAF NUM 0_,COMMA-RECEIVED FLAG_^1FIRST NUM 0_,LOWER LIMIT FOR DELETE OR INSERT_^1SECOND NUM 0_,UPPER LIMIT_^1RPOSIT NUM 0_,POSITION OF RECORD IN SECTOR (1 = 2ND HALF)_^1SECNUM NUM 0_,SECTO€€R NO. OF RECORD TO BE READ_^1NEXTSC NUM 0_,SECTOR OF NEXT RECORD_^1NEXTPS NUM 0_,POSITION OF NEXT RECORD_^1PREVSC NUM 0_,SECTOR OF PREVIOUS RECORD_^1PREVPS NUM 0_,POSITION OF PREVIOUS RECORD_^1PRESEC NUM 0_,CURRENT RECORD'S SECTOR_^1INSFLG NUM 0_,=1 FOR INSERT, 0 FOR DELETE_^1ENDSEC NUM 0_,CONTAINS ADDR OF 1ST FREE SECTOR IN SKEL_^1ENDPOS NUM 0_,POSITION OF THE RECORD AREA €€IN THAT SECTOR_^1ALWAYS NUM 0_,=1 IF YOU WANT TO PHYSICALLY READ EVERY TIME_^1NEWPOS NUM 0_,POSITION OF WHERE TO INSERT NEXT RECORD_^1NEWSEC NUM 0_,SECTOR OF WHERE TO INSERT NEW RECORD_^1PASS_!NUM 0_,FIRST PASS FLAG (GENERAL USE)_^1NOMORF NUM 0_,=1 IF NO MORE RECORDS TO INSERT_^1SAVNXS NUM 0_,SAVES LOCATION OF RECORD FOLLOWING INSERTIONS_^1SAVNXP NUM 0_,SAVES POSITION OF REC€€ORD IN SAVNXS_^1RECNT NUM 0_,RECORD COUNTER FOR SKELETON FILE_^1NONSTD NUM 0_,NON-STANDARD RECORD COUNTER_^1STREND NUM 0_,=1 WHEN TIME TO PUT OUT THE *END RECORD_^1TEMPA NUM 0_,TEMP STORAGE_^1TEMPB NUM 0_,TEMP STORAGE_^1OUTSW NUM 0_,SET IF USING COMMENT DEVICE TEMP FOR MESSAGE_^1EOLFLG NUM 0_,EOL ENCOUNTERED FLAG_^1_%EJT_]_^1**********************************************€€**************************_^1*_$MESSAGES_^1************************************************************************_^1_%SPC 2_^1MSG0B ALF ',POSSIBLE COMMANDS'_^1_%ADC CRLF_^1_%ALF ',COMAND,LU_'SET COMMAND INPUT TO LU'_^1_%ADC CRLF_^1_%ALF ',BUILD,LU_(READ INSTALL FILE FROM LU, BUILD'_^1_%ALF ',SKELETON FILE'_^1_%ADC CRLF_^1_%ALF ',LOAD,LU_)READ SKELETON FILE FROM LU'_^1_%€€ADC CRLF_^1_%ALF ',CATLOG,N1,N2_#LIST RECORD N1 THROUGH N2 FROM'_^1_%ALF ',SKELETON FILE'_^1_%ADC CRLF_^1_%ALF ',DELETE,N1,N2_#DELETE RECORDS N1 THROUGH N2'_^1_%ADC CRLF_^1_%ALF ',INSERT,N,LU_$READ RECORDS FROM LU, INSERT AFTER'_^1_%ALF ',RECORD N'_^1_%ADC CRLF_^1_%ALF ',DUMP,LU_)WRITE SKELETON FILE ONTO DEVICE LU'_^1_%ADC CRLF_^1_%ALF ',CHANGE,ILU1,LU2 CHANGE LU1 TO L€€U2 ON *K RECORDS'_^1_%ADC CRLF_^1_%ALF ',REW,LU_*REWIND LU/SK (LU=SK FOR SKELETON)'_^1_%ADC CRLF_^1_%ALF ',UNL,LU_*UNLOAD LU'_^1_%ADC CRLF_^1_%ALF ',ADF,LU,N_(ADVANCE N FILES ON LU'_^1_%ADC CRLF_^1_%ALF ',BSF,LU,N_(BACKUP N FILES ON LU'_^1_%ADC CRLF_^1_%ALF ',ADR,LU,N_(ADVANCE N RECORDS ON LU/SK'_^1_%ADC CRLF_^1_%ALF ',BSR,LU,N_(BACKUP N RECORDS ON LU/SK'_^1_%ADC CRLF_€€^1_%ALF ',WEF,LU,N_(WRITE N FILE MARKS ON LU'_^1_%ADC CRLF_^1_%ALF ',EXIT_,EXIT FROM SKED'_^1_%ADC CRLF_^1_%EQU MSG0E(*)_^1MSG1B ADC CRLF_^1_%ALF 4,SKED IN_^1_%ADC CRLF_^1_%EQU MSG1E(*)_^1MSG2B ADC CRLF_^1_%ALF 2,NEXT_^1_%ADC CRLF_^1_%EQU MSG2E(*)_^1MSG3B ADC CRLF_^1_%ALF 12,ANY MORE INPUT. ENTER LU_^1_%ADC CRLF_^1_%EQU MSG3E(*)_^1MSG4B ADC CRLF_^1_%ALF 19,EN€€TER COMMANDS ON INPUT COMMENT DEVICE_^1_%EQU MSG4E(*)_^1ERMG0B ALF 8,INVALID COMMAND_^1_%EQU ERMG0E(*)_^1ERMG1B ALF 12,ERROR IN COMMAND FORMAT_^1_%EQU ERMG1E(*)_^1ERMG2B ADC CRLF_^1_%ALF 13,LU NOT LEGAL FOR COMMANDS_^1_%EQU ERMG2E(*)_^1ERMG3B ALF 10,SKELETON NOT LOADED_^1_%EQU ERMG3E(*)_^1ERMG4B ALF 11,RECORD NUMBER IS ZERO_^1_%EQU ERMG4E(*)_^1ERMG5B ALF /,INVALID CHAR€€ACTER IN NUMBER/_^1_%EQU ERMG5E(*)_^1ERMG6B ALF 11,INVALID RECORD NUMBER_^1_%EQU ERMG6E(*)_^1ERMG7B ALF 22,RANGE CONTAINS RECORD NUMBER ALREADY DELETED_^1_%EQU ERMG7E(*)_^1ERMG8B ALF 12,COMMAND NAME NOT UNIQUE_^1_%EQU ERMG8E(*)_^1ERMG9B ALF /,RECORDS HAVE PREVIOUSLY BEEN DELETED/_^1_%EQU ERMG9E(*)_^1ERG10B ALF 21,NO INSERTION RECORDS FOUND AT SPECIFIED LU_^1_%EQU ERG10E(€κ*)_^1ERG11B ADC CRLF_^1_%ALF /,RECORDS NOT DELETED/_^1_%ADC CRLF_^1_%ALF /,PLEASE RESEQUENCE SKELETON/_^1_%EQU ERG11E(*)_^1ERG12B ADC CRLF_^1_%ALF /,RESPONSE MUST BE LU(CR) OR (CR)/_^1_%EQU ERG12E(*)_^1*_]_^1_%END SKFILE_^__κPTRACE CSY/ H32 P€1_%NAM TRACE_(DECK-ID H32 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^1*_$WHERE_"SSSS IS ADDRESS TO START TRACE_^1*_.LLLL IS ADDRESS TO START LISTING_^1*_.EEEE IS ADDRESS TO END TRACE_^1*_.AAAA IS VALUE TO PUT IN A_^1*_.QQQQ IS VALUE€€ TO PUT IN Q_^1*_.IIII IS VALUE TO PUT IN I_^1*_.X CAUSES LOOP SUPPRESSION IF L_^1*_.Y CAUSES SUBROUTINE SUPPRESSION IF S_^1_%SPC 1_^1*_*ALL VALUES MUST BE IN HEX AND CONSIST OF 4 DIGITS_^1_%SPC 1_^1BUF_"EQU BUF(500)_$SIZE OF LOOP SUPPRESSION BUFFER_^1_%EQU AMONI($F4)_^1_%EQU ADISP($EA)_^1_%EQU N0($22),N1($23),N2($24),N8($26)_^1_%EXT LOG1A_^1_%ENT RTRTJ_^1_%ENT TRACE1,TRAC€€E2,TRACE3_^1_%SPC 2_^1TRACE3 NOP 0_^1_%RTJ- ($F4)_^1_%NUM $4C00_(FWRITE_^1_%ADC CONT3_(COMPLETION ADR_^1_%NUM 0_,THREAD_^1_%NUM $18FC_(LU - V FIELD_^1TRA5_!NUM 30_+NO. OF WORDS_^1TRA6_!ADC REQBUF_'OUTPUT BUFFER_^1_%JMP- (ADISP)_^1*_]_^1CONT3 SQP CONT4_(WRITE WAS OK_^1_%JMP* TRACE3_'TRY AGAIN_^1CONT4 ENQ 39_^1_%ENA -1_^1CONTIX STA* ANSBUF,Q_^1_%INQ -1_^1_%SQM 1_^1_%JM€€P* CONTIX_^1ASK_"RTJ- (AMONI)_%READ INPUT_^1_%NUM $4800_(FREAD_^1_%ADC CONT5_(COMPLETION ADR_^1_%NUM 0_,THREAD_^1LU_#NUM $18FD_(LU - V FIELD_^1_%NUM 40_-OF WORDS_^1_%ADC ANSBUF_'INPUT BUFFER_^1_%JMP- (ADISP)_^1*_]_^1REQBUF NUM $0D,$0A_^1_%ALF 26, SPECIFY PARMS (SSSS,LLLL,EEEE,AAAA,QQQQ,IIII,X,Y)_^1ERRBUF NUM $0D,$0A_^1_%ALF 17,P REGISTER = 0, *C ILLEGAL REQUEST_^1T2MSG N€€UM $0D,$0A_^1_%ALF $,SPECIFY PARMS (AAAA,QQQQ,IIII,X,Y)$_^1_%NUM $0D,$0A_^1ANSBUF BZS ANSBUF(50)_^1CONT5 SQP CONT6_^1_%JMP ASK_*REREAD INPUT DATA_^1CONT6 LDA* ANSBUF_'CHECK FOR *C_^1_%SUB =N$2A43_^1_%SAZ 1_^1_%JMP* CONT8_(NOT EQUAL TO *C_^1_%LDA* (CON+1)_%CHECK FOR P = 0_#PREG_^1_%SAN CONT7_^1CONT6A RTJ- ($F4)_^1_%NUM $4C00_(REQ CODE_^1_%ADC CONT6B_'COMPL ADR_^1_%NUM €€0_,THREAD_^1_%NUM $18FC_(LU_^1_%NUM 21_+NO OF WORDS_^1_%ADC ERRBUF_'OUTPUT BUFFER_^1_%JMP- (ADISP)_^1*_]_^1CONT6B SQP 1_^1_%JMP* CONT6A_^1_%JMP TRACE3_'TRY TO START OVER_^1CONT7 LDA ISAVE_(RESTORE I_^1_%STA- I_^1_%LDA AREG_)RESTORE A_^1_%LDQ QREG_)RESTORE Q_^1_%JMP (PREG)_'LET PROGRAM CONTINUE WITHOUT TRACE_^1*_]_^1CALC_!NOP 0_,CALC ADR ROUTINE_^1_%SUB- $F7_*ADR OF UNPRO€€TECTED - 1_^1_%SAP CALC1_^1_%INA 1_^1_%ADD- $F7_^1CALC1 ADD- $F7_^1_%JMP* (CALC)_^1*_]_^1*_]_^1CONT8 INA -$17_)CHECK FOR *Z_^1_%SAN CONT9_(NOT *Z_^1_%ENA 26_^1_%STA KAPUT0_'SETUP TO OUTPUT ONLY END TRACE_^1_%LDA =XKAPUT2_$SETUP OUTPUT BUFFER ADR_^1_%STA KAPUT0+1_^1_%ENA 0_^1_%STA KAPUT+2_%SET COMPLETION ADR TO ZERO_"NO RETURN_^1_%JMP KAPUT_(DO OUTPUT_^1CONT9 LDQ =XAN€€SBUF_^1_%STQ INPUT_^1_%LDA* TR2FLG_^1_%SAZ CONT9A_'SEE IF THERE WAS A JMP TO TRACE2 FROM USER_^1_%LDA* TR2HLD_^1_%STA TRA6_)REPLACE WITH ORIGNAL CONTENTS_^1_%LDA* TR2HLD+1_^1_%STA TRA5_)RESTORE NUMBER OF WORDS_^1_%ENA 0_^1_%STA* TR2FLG_^1_%JMP AAAA_)GO TO PICK UP A REG_^1_%SPC 2_^1TR2FLG NUM 0_,TRACE2 ENTRY FLAG_^1TR2HLD NUM 0,30_^1_%SPC 2_^1CONT9A ENA 0_^1_%STA DOIT+1_€€^1_%STA HEAD_)CLEAR HEADING FLAG_^1_%LDA- $6_+$F IN LOCORE_^1_%STA LUPTST+1_^1_%STA SRLOOP+1_^1_%LDA =N$2020_^1_%STA OPT_^1_%RTJ* TWO_*PICKUP SSSS_^1_%RTJ* CALC_)DETERMINE P ADR OR ACTUAL ADR_^1CON_"STA+ PREG_)INITIALIZE P REGISTER_^1_%STA LISTCK+1_$STORE IT FOR 54F4 FIRST INSTRUCTION_^1CONW_!RTJ+ WORD_)CONVERT TO ASCII ACTUAL ADR_^1_%STQ FROM+3_'ACTUAL ADR_^1_%STA FROM+4_'€€ACTUAL ADR_^1_%LDA QSAVE+1_^1_%STA FROM_^1_%LDA ASAVE+1_^1_%STA FROM+1_^1_%RTJ* THREE_(PICKUP LLLL_^1_%RTJ* CALC_)DETERMINE P ADR OR ACTUAL ADR_^1_%STA LISTAD+1_$STORE IN MESSAGE OUTPUT ROUTINE_^1_%RTJ* (CONW+1)_$CONVERT TO ASCII ACTUAL ADR_^1_%STQ TYPE+3_'ACTUAL ADR_^1_%STA TYPE+4_'ACTUAL ADR_^1_%LDA QSAVE+1_^1_%STA TYPE_^1_%LDA ASAVE+1_^1_%STA TYPE+1_^1_%RTJ* TWO_*PICK€€UP EEEE_^1_%RTJ* CALC_)DETERMINE P ADR OR ACTUAL ADR_^1_%STA EXIT2+1_%STORE IN FINISHED CHECK ROUTINE_^1_%RTJ* (CONW+1)_$CONVERT TO ASCII ACTUAL ADR_^1_%STQ TO+3_)ACTUAL ADR_^1_%STA TO+4_)ACTUAL ADR_^1_%LDA QSAVE+1_^1_%STA TO_^1_%LDA ASAVE+1_^1_%STA TO+1_^1_%RTJ* THREE_(PICKUP AAAA_^1_%STA AREG_)INITIALIZE A REGISTER_^1_%JMP* QQQQ_^1AAAA_!RTJ* TWO_^1_%STA AREG_^1QQQQ_!RTJ*€€ TWO_*PICKUP QQQQ_^1_%STA QREG_)INITIALIZE Q REGISTER_^1_%RTJ* THREE_(PICKUP IIII_^1_%STA- I_,INITIALIZE INDEX REGISTER_^1_%LDA* (INPUT)_^1_%AND- $1A_*$FF00 IN LOCORE_^1_%SAM BY1-*-1_%SKIP IF NOTHING ENTERED PAST THIS POINT_^1_%STA OPT_^1_%SUB =N$4C00_%L SUPPRESSES LOOP LISTING_^1_%STA LUPTST+1_^1_%RAO* INPUT_^1_%LDA* (INPUT)_^1_%AND- $1A_*$FF00 IN LOCORE_^1BY1_"SAM BY2-*-1_%€€SKIP IF NOTHING ENTERED PAST THIS POINT_^1_%ALS 8_^1_%ADD OPT_^1_%STA OPT_^1_%AND- $A_+$FF IN LOCORE_!SAVE POSSIBLE S_^1_%INA -$53_)S SUPPRESSES SUBROUTINE LISTING_^1_%STA SRLOOP+1_^1BY2_"ENA 0_,CLEAR OUT LOOP SUPPRESSION BUFFER_^1_%LDQ =XBUF+1_^1KLEER STA BUFFER-1,Q_^1_%INQ -1_^1_%SQZ 1_^1_%JMP* KLEER_^1_%JMP* BEGIN_^1_%SPC 1_^1TWO_"0_"0_^1_%LDQ* (INPUT)_%2 MS DIGITS T€€O Q_^1_%RAO* INPUT_^1_%LDA* (INPUT)_%2 LS DIGITS TO A_^1_%RAO* INPUT_^1_%RTJ* ASHEX_(CONVERT TO HEX_^1_%JMP* (TWO)_^1_%SPC 1_^1THREE 0_"0_^1_%LDA* (INPUT)_%MS DIGIT_^1_%AND- $A_+$FF IN LOCORE_!REMOVE COMMA_^1_%TRA Q_^1_%RAO* INPUT_^1_%LDA* (INPUT)_%MIDDLE TWO DIGITS_^1_%LLS 8_,2 MS DIGITS TO Q_^1_%STA* TEMP+1_'SAVE THIRD DIGIT_^1_%RAO* INPUT_^1_%LDA* (INPUT)_%LS DIGIT_^1_%RAO* €€INPUT_^1_%AND- $1A_*$FF00 IN LOCORE REMOVE COMMA_^1_%ALS 8_,RIGHT JUSTIFY_^1TEMP_!ADD =N0_*LS DIGITS TO A_^1_%RTJ* ASHEX_(CONVERT TO HEX_^1_%JMP* (THREE)_^1_%SPC 1_^1_%SPC 1_^1INPUT 0_"0_^1ASHEX 0_"0_,ENTRY WITH 4 ASCII DIGITS IN Q AND A_^1_%STQ* QSAVE+1_^1_%STA* ASAVE+1_^1_%TRQ A_^1_%AND- $1A_*$FF00 IN LOCORE EXTRACT MS DIGIT_^1_%ALS 8_,RIGHT JUSTIFY_^1_%RTJ* CONVT_(CONVER€€T TO HEX_^1_%ALS 4_^1_%STA* HEX_^1QSAVE LDA =N0_^1_%AND- $A_+$FF IN LOCORE_!EXTRACT 2ND MS DIGIT_^1_%RTJ* CONVT_(CONVERT TO HEX_^1_%ADD* HEX_*COMBINE FIRST 2 DIGITS_^1_%ALS 4_^1_%STA* HEX_^1_%LDA* ASAVE+1_^1_%AND- $1A_*$FF00 IN LOCORE EXTRACT 2ND LS DIGIT_^1_%ALS 8_,RIGHT JUSTIFY_^1_%RTJ* CONVT_(CONVERT TO HEX_^1_%ADD* HEX_*COMBINE 3 DIGITS_^1_%ALS 4_^1_%STA* HEX_^1ASAVE LDA€€ =N0_^1_%AND- $A_+$FF IN LOCORE_!EXTRACT LS DIGIT_^1_%RTJ* CONVT_(CONVERT TO HEX_^1_%ADD* HEX_^1_%JMP* (ASHEX)_%RETURN WITH 4 HEX DIGITS IN A_^1_%BZS PREG(1)_^1HEX_"0_"0_^1CONVT 0_"0_^1_%SUB =N$40_(SEE IF 0-9 OR A-F_^1_%SAM 1_,0-9 IF MINUS_^1_%INA -7_+TO SUBTRACT $37_^1_%INA $10_*TO SUBTRACT $30_^1_%JMP* (CONVT)_^1_%SPC 5_^1BEGIN LDA* (PREG)_'PICKUP NEXT INSTRUCTION_^1_%SL€€S 0_^1_%STA* INSAVE_'SAVE INSTRUCTION_^1_%SUB =N$FFFF_^1_%SAN BEGIN1_^1_%ENA 59_^1_%STA KAPUT0_^1_%RTJ FINI_^1_%RAO* PREG_^1_%JMP* (PREG)_^1BEGIN1 LDA* INSAVE_^1_%ENQ 0_^1_%LLS 4_,F FIELD INTO Q_^1_%STA* INSSAX+1_^1_%STQ* INSSAV+1_$STORE POINTER IN HOKD AREA_^1_%LDQ EXTIME,Q_$PICK UP EXECUTION TIME FOR THIS INSTRUCTION_^1_%RTJ INSTIM_'GO CAL TIME_^1INSSAV LDQ =N0_^1INSSA€€X LDA =N0_*RESTORE REG A WITH INS SHIFTED 4 TO LEFT_^1_%JMP* VEKTER,Q_^1_%SPC 1_^1_%BZS ISAVE(1)_^1_%BZS INSAVE(1)_^1_%SPC 1_^1VEKTER JMP* NULL_)F=0_^1_%JMP* JMP_*F=1_^1_%JMP* MUI_*F=2_^1_%JMP* DVI_*F=3_^1_%JMP* STQ_*F=4_^1_%JMP* RTJ_*F=5_^1_%JMP* STA_*F=6_^1_%JMP* SPA_*F=7_^1_%JMP* ADD_*F=8_^1_%JMP* SUB_*F=9_^1_%JMP* AND_*F=A_^1_%JMP* EOR_*F=B_^1_%JMP* LDA_*F=C_^1_%JMP* RAO_*€€F=D_^1_%JMP* LDQ_*F=E_^1_%JMP* ADQ_*F=F_^1_%SPC 1_^1SUB_"JMP SUBX_^1RAO_"JMP RAOX_^1LDA_"JMP LDAX_^1AND_"JMP ANDX_^1EOR_"JMP EORX_^1ADQ_"JMP ADQX_^1NULL_!JMP NULLX_^1LDQ_"JMP LDQX_^1_%SPC 1_^1STA_"JMP STAX_^1*_]_^1PCHECK NOP 0_,ROUTINE TO SEE IF THERE IS A PROTECT VIOL_^1_%STQ* RTN+1_(SAVE RETURN POINTER_^1_%LDA* ASAVEA_'LOAD INSTRUCTION SHIFTED RIGHT 4_^1_%RTJ ADDR_)F€€IND ACTUAL EFFECTIVE ADR_^1_%STA* RTN1+1_'SAVE ADDRESS_^1_%SAM T65T_)IS ADR IN UPPER BANK_^1CHECK0 TCQ Q_,NO_^1_%AAQ A_^1_%SAP 1_^1_%JMP MONIT0_'PROTECT VIOLATION_^1_%JMP* RTN_^1T65T_!SQP 1_,UNPROTECTED IN LOWER BANK_^1_%JMP* CHECK0_'BOTH IN UPPER BANK_^1RTN_"LDQ =N0_*POINTER TO JMP OR RTJ_^1RTN1_!LDA =N0_^1_%SQZ 1_^1_%JMP RTJ01_(RETURN TO RTJ INSTRUCTION PROCESS_^1_%JMP€€* JMP00_(RETURN TO JMP INSTRUCTION PROCESS_^1*_]_^1_%SPC 2_^1_%BZS ASAVEA(1),SSAVE(1)_^1JMP_"STA* ASAVEA_'SAVE A_^1_%SUB =N$4EA0_%CHECK FOR 14EA_^1_%SAZ JMPA_^1_%LDQ =N$1211_%LOAD REG WITH EXC. TIME FOR A JMP_^1_%RTJ INSTIM_(GO CAL TIME_^1_%LDA* INSAVE_'INSTRUCTION_^1_%AND- $A_+PICK UP DELTA FIELD_!MASK $FF_^1_%SAN JMP0_)CONTINUE REGULAR PROCESSING_^1_%ENQ 0_^1_%RTJ* PCHECK€€_^1JMPA_!JMP MONIT0_'DO ERROR MONITOR OR EQUIVALENT FOUND_^1JMP0_!LDA* ASAVEA_^1_%RTJ ADDR_)FIND ACTUAL EFFECTIVE ADR_^1JMP00 STA* JMP1+1_'SAVE ADDRESS_^1_%ENQ 2_,INDEX TO MESSAGE_^1_%RTJ MESIGE_^1JMP1_!LDA =N0_^1_%STA* PREG_)STORE AS NEXT VALUE OF P REGISTER_^1_%JMP EXIT2_(EXIT W/O BUMPING P-REG_^1_%SPC 1_^1*_]_^1SPA_"JMP* SPAX_^1ADD_"JMP* ADDX_^1*_]_^1MUI_"RTJ ADDR_)GET €€ADDRESS_^1_%STA* MUI1+1_^1_%LDQ QREG_)RESTORE A AND Q_^1_%LDA AREG_^1MUI1_!MUI+ 0_,DO MULTIPLICATION_^1_%STQ QREG_)STORE A AND Q_^1_%STA AREG_^1_%ENQ 4_,MESSAGE INDEX_^1_%LDA* MUI1+1_^1MUI2_!JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1DVI_"RTJ ADDR_)GET ADDRESS_^1_%STA* DVI1+1_^1_%LDQ QREG_)RESTORE A AND Q_^1_%LDA AREG_^1DVI1_!DVI+ 0_,DO DIVISION_^1_%STQ QREG_)STORE A AND Q_^€€1_%STA AREG_^1_%ENQ 6_,MESSAGE INDEX_^1_%LDA* DVI1+1_^1_%JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1STQ_"RTJ ADDR_)GET ADDRESS_^1_%STA* STQ1+1_^1_%LDQ QREG_)PICKUP Q_^1STQ1_!STQ+ 0_,STORE Q_^1_%ENQ 8_,MESSAGE INDEX_^1_%JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1RTJ_"STA* ASAVEA_'SAVE A_^1_%SUB =N$4F40_^1_%SAN RTJ00_^1_%JMP RTJMON_^1RTJ00 LDQ =N$2421_%LOAD REG WITH EXC. TIME F€€OR A RTJ_^1_%RTJ INSTIM_'GO CAL TIME_^1_%LDA INSAVE_^1_%AND- $A_+PICK UP DELTA FIELD_^1_%SAN RTJ0_)CONTINUE REGULAR PROCESSING_^1_%ENQ 1_^1_%RTJ PCHECK_^1RTJ0_!LDA* ASAVEA_^1_%RTJ ADDR_)FIND ACTUAL EFFECTIVE ADR_^1RTJ01 STA* RTJ1+1_'SAVE ADDRESS_^1_%LDA PREG_^1_%INA 1_^1_%LDQ WORD2_(TWO WORD INSTRUCTION FLAG_^1_%SQZ 1_,SKIP IF ONE WORD INSTRUCTION_^1_%INA 1_^1RTJ1_!STA+€€ 0_,STORE RETURN ADDRESS IN BRANCH TO CELL_^1_%LDA* RTJ1+1_'GET BRANCH TO ADDRESS_^1_%ENQ 10_+MESSAGE INDEX_^1_%RTJ MESIGE_^1_%LDA* (RTJ1+1)_$PICKUP RETURN TO ADDRESS_^1_%LDQ SRLINK+1_^1_%SQN 2_+DO NOT STORE IF WITHIN A SUBROUTINE NOW_^1_%STA SRLINK+1_$STORE IN MESSAGE ROUTINE FOR SR SUPPRESSION_^1_%LDA* RTJ1+1_'PICKUP BRANCH TO ADDRESS_^1_%INA 1_^1_%STA PREG_)STORE AS P-REG€€_^1_%JMP EXIT2_(EXIT W/O BUMPING P_^1_%SPC 1_^1STAX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* STA1+1_^1_%LDQ AREG_)PICKUP A_^1STA1_!STQ+ 0_,STORE A_^1_%ENQ 12_+MESSAGE INDEX_^1_%JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1SPAX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* SPA1+1_^1_%LDA AREG_)PICKUP A_^1SPA1_!SPA+ 0_,STORE A_^1_%STA AREG_)STORE A-REG_^1_%LDA* SPA1+1_^1_%ENQ 14_+MESSAGE INDEX_^1_%JMP€€ EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1ADDX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* ADD1+1_^1_%LDQ AREG_)PICKUP A_^1ADD1_!ADQ+ 0_,ADD_^1_%STQ AREG_)STORE NEW A-REG_^1_%ENQ 16_+MESSAGE INDEX_^1_%JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1SUBX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* SUB1+1_^1_%LDA AREG_)PICKUP A_^1SUB1_!SUB+ 0_,SUBTRACT_^1_%STA AREG_)STORE NEW A REG_^1_%LDA* SUB1+1_^1_%ENQ 18_+€€MESSAGE INDEX_^1_%JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1ANDX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* AND1+1_^1_%LDA AREG_)PICKUP A_^1AND1_!AND+ 0_,AND WITH A_^1_%STA AREG_)STORE NEW A_^1_%LDA* AND1+1_^1_%ENQ 20_+MESSAGE INDEX_^1_%JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1EORX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* EOR1+1_^1_%LDA AREG_)PICKUP A_^1EOR1_!EOR+ 0_,EOR WITH A_^1_%STA AREG_)STO€€RE NEW A_^1_%LDA* EOR1+1_^1_%ENQ 22_+MESSAGE INDEX_^1_%JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1LDAX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* LDA1+1_^1_%NOP 0_^1LDA1_!LDQ+ 0_,PICKUP NEW A_^1_%STQ AREG_)STORE NEW A_^1_%ENQ 24_+MESSAGE INDEX_^1_%JMP EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1RAOX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* RAO1+1_^1_%NOP 0_^1RAO1_!RAO+ 0_^1_%ENQ 26_+MESSAGE INDEX_^1_%J€€MP EXIT1_^1_%SPC 1_^1LDQX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* LDQ1+1_^1_%NOP 0_^1LDQ1_!LDQ+ 0_,PICKUP NEW Q_^1_%STQ QREG_)STORE NEW Q_^1_%ENQ 28_+MESSAGE INDEX_^1_%JMP EXIT1_^1_%SPC 1_^1ADQX_!RTJ* ADDR_)GET ADDRESS_^1_%STA* ADQ1+1_^1_%LDQ QREG_)PICKUP Q_^1ADQ1_!ADQ+ 0_,ADD TO Q_^1_%STQ QREG_)STORE NEW Q_^1_%ENQ 30_+MESSAGE INDEX_^1_%JMP* EXIT1_(BUMP P AND EXIT_^1_%SPC 1_^1*€€_$THIS ROUTINE CALCULATES THE EFFECTIVE ADDRESS FOR ADDRESSABLE_^1*_$INSTRUCTIONS AND RETURNS IT IN A_^1_%SPC 2_^1DELT_!0_"0_^1ADDR_!0_"0_^1_%ENQ 0_^1_%LLS 4_,ADDRESS MODE TO Q_^1_%ALS 8_,RIGHT JUSTIFY DELTA FIELD IN A_^1_%STA* DELT_)SAVE DELTA FIELD_^1_%ENA 0_^1_%LRS 3_^1_%STQ* REL+1_(SAVE RELATIVE BIT_^1_%ENQ 0_^1_%LLS 1_^1_%STQ* INDIR+1_%SAVE INDIRECT BIT_^1_%ENQ 0_^1_%€€LLS 2_^1_%STQ* INDEX+1_%SAVE INDEX FLAGS_^1REL_"LDA =N0_*RELATIVE FLAG_^1_%SAZ NONREL-*-1_"SKIP IF NOT RELATIVE_^1_%JMP* RELATV_^1_%SPC 1_^1*_$DO THE 4 NON RELATIVE CASES_^1_%SPC 1_^1NONREL RTJ DFIELD_'GET THE DELTA FIELD_^1INDIR LDQ =N0_*INDIRECT FLAG_^1_%SQZ NONIND-*-1_"SKIP IF NOT INDIRECT_^1_%JMP* INDIR1_^1_%SPC 1_^1*_$DO THE 2 NON RELATIVE NON INDIRECT CASES_^1_%SPC €€ 1_^1NONIND SAN PAGE0-*-1_#SKIP IF ADDRESSING PAGE 0_^1_%SPC 1_^1*_$=X OR =N CASE_^1_%SPC 1_^1_%LDA PREG_^1_%INA 1_,EFFECTIVE ADDRESS IS P+1_^1_%STA* WORD2_(STORE 2 WORD INSTRUCTION FLAG_^1_%STA* OPR1+1_^1_%STA* OPR2+1_^1OPR1_!LDA+ 0_^1_%RTJ* INDEXS_^1OPR2_!STA+ 0_^1_%LDA* WORD2_^1_%JMP* (ADDR)_'RETURN_^1_%SPC 1_^1*_$ADDRESSING PAGE 0 DIRECTLY_^1_%SPC 1_^1PAGE0 AND- $A_+8 B€€IT ADDRESS_,MASK $FF_^1_%RTJ* INDEXS_'ADD IN INDICES IF USED_^1_%ENQ 0_^1_%STQ* WORD2_(SET 1 WORD INSTRUCTION FLAG_^1_%JMP* (ADDR)_'RETURN_^1_%SPC 1_^1*_$DO THE 2 NON RELATIVE INDIRECT CASES_^1_%SPC 1_^1INDIR1 SAN PAGE0A-*-1_"SKIP IF ADDRESSING PAGE 0_^1_%SPC 1_^1*_$2 WORDS DIRECT CASE_^1_%SPC 1_^1_%ENQ 1_^1_%LDA (PREG),Q_$ADDRESS IS IN P+1_^1_%RTJ* INDEXS_'ADD INDEXES_^1_%€€RAO* WORD2_(SET 2 WORD INSTRUCTION FLAG_^1_%JMP* (ADDR)_^1_%SPC 1_^1*_$PAGE 0 INDIRECT_^1_%SPC 1_^1PAGE0A AND- $A_+8 BIT ADDRESS_*MASK $FF_^1_%RTJ* THREAD_'FOLLOW INDIRECT THREAD TO END_^1_%RTJ* INDEXS_'ADD INDEXES_^1_%ENQ 0_^1_%STQ* WORD2_(SET ONE WORD INSTRUCTION FLAG_^1_%JMP* (ADDR)_^1_%SPC 1_^1*_$DO THE 4 RELATIVE CASES_^1_%SPC 1_^1RELATV RTJ DFIELD_'GET THE DELTA FIELD_^€€1_%SPC 1_^1_%SAN RELTV1-*-1_"SKIP IF 1 WORD RELATIVE_^1_%JMP* RELTV2_^1_%SPC 1_^1*_$DO THE 2 ONE WORD RELATIVE CASES_^1_%SPC 1_^1RELTV1 ENQ 0_^1_%STQ* WORD2_^1RELCOM ADD PREG_)ADDRESS = P + DELTA_^1_%LDQ* INDIR+1_%INDIRECT FLAG_^1_%SQZ 1_,SKIP IF NOT INDIRECT_^1_%RTJ* THREAD_'FOLLOW INDIRECT THREAD_^1_%RTJ* INDEXS_'ADD INDEXES_^1_%JMP* (ADDR)_^1WORD2 0_"0_^1_%SPC 1_^1*_$DO€€ THE 2 TWO WORD RELATIVE CASES_^1_%SPC 1_^1RELTV2 ENQ 1_^1_%STQ* WORD2_(SET TWO WORD INSTRUCTION FLAG_^1_%LDA (PREG),Q_$DELTA FIELD IN P + 1_^1_%INA 1_+RELATIVE TO P+1_^1_%JMP* RELCOM_'USE BALANCE OF ONE WORD PATH_^1_%SPC 1_^1*_$THIS ROUTINE ADDS INDEX VALUES TO THE ADDRESS IN A_^1_%SPC 1_^1INDEXS 0_"0_^1INDEX LDQ =N0_*INDEX FLAG_^1_%QLS 14_^1_%SQP IN1_^1_%ADD QREG_)ADD €€Q TO ADDRESS_^1_%RTJ* BUMPTI_^1IN1_"QLS 1_^1_%SQP IN2_^1_%ADD- I_,ADD INDEX TO ADDRESS_^1_%RTJ* BUMPTI_^1IN2_"JMP* (INDEXS)_^1_%SPC 1_^1*_$THIS ROUTINE FOLLOWS AN INDIRECT THREAD TO ITS END_^1_%SPC 1_^1THREAD 0_"0_^1TLOOP STA* TPIKUP+1_$STORE ADDRESS FOR USE_^1TPIKUP LDA+ 0_,PICKUP THREAD_^1_%RTJ* BUMPTI_^1_%JMP* (THREAD)_$RETURN WITH FINAL EFFECTIVE ADDRESS IN A_^1BUMPTI NOP €€ 0_^1_%RAO* TIME_^1_%RAO* TIME+1_^1_%RAO* TIME+2_^1_%RAO* TIME+3_^1_%JMP* (BUMPTI)_^1_%SPC 1_^1EXIT1 RTJ MESIGE_'OUTPUT MESSAGE_^1EXIT1A LDA PREG_^1_%INA 1_^1_%LDQ* WORD2_(TWO WORD INSTRUCTION FLAG_^1_%SQZ 1_,SKIP IF ONE WORD INSTRUCTION_^1_%INA 1_^1_%STA PREG_)STORE NEW P REG_^1EXIT2 SUB =N0_*CHECK IF FINISHED_^1_%SAZ DOFINI_'SKIP IF AT END ADDRESS_^1_%JMP BEGIN_(DO AN€€OTHER LINE_^1_%SPC 1_^1*_$TRACE COMPLETE - EXIT_^1_%SPC 1_^1DOFINI ENA 83_^1_%STA* KAPUT0_'NO OF WORDS TO OUTPUT_^1_%RTJ* FINI_^1_%JMP- (ADISP)_^1_%SPC 1_^1INSTIM NOP 0_^1XXTIM ENA 0_^1_%LLS 4_,PICK UP FIRST TIME_^1_%STQ* TIMHLD+1_^1_%LDQ* TINDEX_^1_%STA* XYTIM+1_^1_%SUB- $6_+000F LOW CORE_^1_%SAN XYTIM_(IS IT A MUI OR DVI_^1_%JMP* MUIDVI_(YES_^1XYTIM LDA =N0_^1_%ADD* TI€€ME,Q_'NO_^1_%STA* TIME,Q_^1_%INQ 1_^1_%STQ* TINDEX_^1_%INQ -4_^1_%SQM 1_,ARE WE DONE_^1_%JMP* RTTIME_^1TIMHLD LDQ =N0_*LOAD Q WITH REMAINDING TIMES_^1_%SPC 2_^1_%JMP* XXTIM_^1RTTIME ENA 0_^1_%STA* TINDEX_^1_%STA* COUNTR_^1_%JMP* (INSTIM)_^1_%SPC 2_^1MUIDVI ENQ 0_^1_%LDA INSSAV+1_$GET INSTRUCTION IDENTIFIER_^1_%INA -3_+IS IT A DVI_^1_%SAN TTTOL_(NO_^1_%ENQ 1_^1TTTOL STQ€€* EXTHLD+1_^1_%LDA MUDVHD,Q_$GET EXECUTION TIME_^1_%LDQ* COUNTR_^1_%ADD* TIME,Q_'ADD AND_^1_%STA* TIME,Q_(STORE TOTAL_^1_%RAO* COUNTR_^1_%LDA* COUNTR_'ARE_^1_%INA -4_,WE DONE_^1_%SAM EXTHLD_)NO_^1_%ENA 0_^1_%STA* COUNTR_^1_%JMP* TIMHLD_^1EXTHLD LDQ =N0_^1_%INQ 2_^1_%JMP* TTTOL_^1_%SPC 2_^1_%SPC 2_^1SHFTIM NOP 0_^1_%INQ -5_^1_%SQM 1_^1_%INA 1_^1_%STA* SHFHLD+1_^1_%ENQ 0€€_^1SHFL0 ADD* TIME,Q_^1_%STA* TIME,Q_^1_%INQ 1_^1_%STQ* SHFL1+1_^1_%INQ -4_^1_%SQM 1_^1RTSHF JMP* (SHFTIM)_^1SHFL1 LDQ =N0_^1SHFHLD LDA =N0_^1_%JMP* SHFL0_^1_%SPC 2_^1_%SPC 2_^1TINDEX NUM 0_^1COUNTR NUM 0_^1TIME_!NUM 0,0,0,0_^1MUDVHD NUM 17,17,20,30,7,9,12,12_^1EXTPOT NUM 3_^1XXHOLD NUM 0_^1_%SPC 2_^1FINI_!NOP 0_^1_%ENQ 0_^1FINI1 LDA* TIME,Q_^1_%RTJ WORD_^1_%ST€€Q* XXHOLD_^1_%LDQ* EXTPOT_^1_%STA* CTIME,Q_%STORE LS WORD_^1_%LDA* XXHOLD_^1_%INQ -1_^1_%STA* CTIME,Q_%STORE MS WORD_^1_%RAO* COUNTR_^1_%INQ 4_^1_%STQ* EXTPOT_^1_%INQ -13_^1_%SQM FINI2_^1_%JMP* KAP0_^1FINI2 LDQ* COUNTR_^1_%JMP* FINI1_^1KAP0_!ENA 3_^1_%STA* EXTPOT_^1_%ENA 0_^1_%STA* COUNTR_^1_%STA* TIME_^1_%STA* TIME+1_^1_%STA* TIME+2_^1_%STA* TIME+3_^1_%SPC 2_^1*_]_^1KAPUT €€ RTJ- (AMONI)_^1_%NUM $4C00_(REQ PRIORITY_^1_%ADC KAPUT1_'COMPL ADR_^1_%NUM 0_,THREAD_^1_%NUM $18FB_(LU - V FIELD_^1KAPUT0 NUM 81_+NO OF WORDS_^1_%ADC MFINI_(BUFFER_^1_%JMP- (ADISP)_^1*_]_^1*_]_^1KAPUT1 JMP* (FINI)_'EXIT_^1_%SPC 2_^1MFINI NUM $0D,$0A_^1_%ALF 23, EXECUTION TIME DURING THIS PART OF EXECUTION_^1_%NUM $0D,$0A_^1XTIME ALF 14, 1784-1**1774**1704**1784-2_^1_€€%NUM $0D,$0A_^1CTIME ALF 14,_^1KAPUT2 NUM $0D,$0A_^1_%ALF 22,* * *_!T R A C E_!C O M P L E T E_!* * *_^1_%NUM $0D,$0A_^1_%SPC 1_^1_%BZS AREG(1)_^1_%BZS QREG(1)_^1DELTA 0_"0_^1_%RTJ* DFIELD_'GET DELTA FIELD_^1_%RTJ MESIGE_^1_%JMP (DELTA)_^1EXIT3 ENA 0_^1_%STA WORD2_(MAKE ONE WORD INSTRUCTION_^1_%JMP EXIT1A_^1NULLX LLS 4_,INSTRUCTION INDEX TO Q_^1_%STQ* NULSAV+1_$SA€€VE IT_^1_%LDQ NULTIM,Q_$PICKUP EXECUTION TIME FROM TABLE_^1_%RTJ INSTIM_'GO CAL TIME_^1NULSAV LDQ =N0_*RESTORE INDEX_^1_%JMP* NULLS,Q_^1_%SPC 1_^1NULLS JMP* SLS_*F1=0_^1_%JMP* SKIPS_(F1=1_^1_%JMP* INP_*F1=2_^1_%JMP* OUT_*F1=3_^1_%JMP* EIN_*F1=4_^1_%JMP* IIN_*F1=5_^1_%JMP* SPB_*F1=6_^1_%JMP* CPB_*F1=7_^1_%JMP* INREG_(F1=8_^1_%JMP* INA_*F1=9_^1_%JMP* ENA_*F1=A_^1_%JMP* NOP_*F1=B€€_^1_%JMP* ENQ_*F1=C_^1_%JMP* INQ_*F1=D_^1_%JMP* EXI_*F1=E_^1_%JMP* SHIFTS_'F1=F_^1_%SPC 1_^1INREG JMP INREGX_^1SKIPS JMP SKIPSX_^1SLS_"ENQ 32_+MESSAGE INDEX_^1_%RTJ* DELTA_(PRINT MESSAGE_^1_%SLS 0_^1_%JMP* EXIT3_^1_%SPC 1_^1INP_"LDA* AREG_^1_%LDQ* QREG_^1_%INP INP1-*_^1_%JMP* INP2_^1INP1_!JMP* INP1X_^1_%ENA 1_,EXTERNAL REJECT_^1_%STA* INP3+1_^1_%JMP* INP3X_^1INP1X ENA 0€€_^1_%STA* INP3+1_^1INP3X ENQ 34_^1_%RTJ* DELTA_(PRINT MESSAGE_^1INP3_!LDQ =N0_^1INP4_!RTJ* DFIELD_'GET DELTA FIELD_^1_%AAQ A_,ADD OFFSET_^1_%ADD PREG_)ADJUST P_^1_%STA PREG_)STORE NEW P_^1_%JMP EXIT2_^1INP2_!STA* AREG_)STORE NEW A_^1_%ENQ 34_+MESSAGE INDEX_^1_%RTJ* DELTA_(PRINT MESSAGE_^1_%JMP* EXIT3_^1_%SPC 1_^1OUT_"ENQ 36_+MESSAGE INDEX_^1_%RTJ* DELTA_(PRINT MESSAGE_^1_€€%LDA* AREG_^1_%LDQ* QREG_^1_%OUT OUT1-*_^1_%JMP* EXIT3_^1OUT1_!JMP* OUT2_^1_%ENQ 1_^1_%JMP* INP4_)USE INP PATH FOR BALANCE_^1OUT2_!ENQ 0_^1_%JMP* INP4_^1_%SPC 1_^1EIN_"ENQ 38_+MESSAGE INDEX_^1_%RTJ* DELTA_(PRINT MESSAGE_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%JMP* EXIT3_^1_%SPC 1_^1IIN_"ENQ 40_+MESSAGE INDEX_^1_%RTJ* DELTA_(PRINT MESSAGE_^1_%IIN 0_,INHIBIT INTERRUPTS_^1_%JMP* EXI€€T3_^1_%SPC 1_^1SPB_"ENQ 42_^1_%RTJ* DELTA_^1_%LDA* AREG_^1_%LDQ* QREG_^1_%SPB 0_,SET PROTECT BIT_^1_%JMP* EXIT3_^1_%SPC 1_^1CPB_"ENQ 44_^1_%RTJ* DELTA_^1_%LDA* AREG_^1_%LDQ* QREG_^1_%CPB 0_,CLEAR PROTECT BIT_^1_%JMP* EXIT3_^1_%SPC 1_^1INA_"ENQ 46_^1_%RTJ* DFIELD_'GET DELTA FIELD_^1_%ADD* AREG_)INCREASE A_^1_%STA* AREG_^1_%RTJ* DELTA_^1_%JMP* EXIT3_^1_%SPC 1_^1DFIELD 0_"0_^€€1_%LDA (PREG)_^1_%AND- $A_+MASK $FF_^1_%ALS 8_,EXTEND BIT 7 AS SIGN_^1_%ARS 8_^1_%JMP (DFIELD)_^1_%SPC 1_^1ENA_"ENQ 48_^1_%RTJ* DFIELD_'GET DELTA FIELD_^1_%STA* AREG_)STORE NEW A_^1_%RTJ* DELTA_^1_%JMP* EXIT3_^1_%SPC 1_^1NOP_"ENQ 50_^1_%RTJ* DELTA_^1_%JMP* EXIT3_^1_%SPC 1_^1ENQ_"ENQ 52_^1_%RTJ* DFIELD_'GET DELTA FIELD_^1_%STA QREG_^1_%RTJ DELTA_^1_%JMP* EXIT3_^1_%SPC 1€€_^1INQ_"ENQ 54_^1_%RTJ* DFIELD_^1_%ADD QREG_)INCREASE Q_^1_%STA QREG_)STORE NEW Q_^1_%RTJ DELTA_^1_%JMP EXIT3_^1_%SPC 1_^1EXI_"ENQ 56_^1_%RTJ DELTA_(PRINT MESSAGE_^1_%RTJ* DFIELD_'GET DELTA FIELD_^1_%ADD- $2B_*BASE OF 100 FOR INTERRUPT RETURN_^1_%STA PREG_)STORE NEW P_^1_%JMP EXIT2_^1_%SPC 1_^1SHIFTS LDA (PREG)_'PICKUP SHIFT INSTRUCTION_^1_%STA* SHIFT_(STORE FOR EXECUTI€€ON_^1_%LDA AREG_^1_%LDQ QREG_^1SHIFT NOP 0_,EXECUTE SHIFT_^1_%STA AREG_)STORE NEW A AND Q_^1_%STQ QREG_^1_%LDA (PREG)_'GET INSTRUCTION_^1_%AND- $7_+SAVE SHIFT COUNT_+MASK $1F_^1_%ENQ 0_^1_%DVI- $46_*DIV BY 10_^1_%RTJ SHFTIM_'GO CAL SHIFT TIME_^1_%LDA (PREG)_'PICKUP INSTRUCTION_^1_%AND =N$E0_(SAVE SHIFT DESIGNATION_^1_%ALS 9_,A/Q FLAGS TO BITS 14/15 LEFT/RIGHT TO BIT 0_€€^1_%ENQ 0_^1_%LLS 2_,A/Q FLAGS TO Q_^1_%STQ* DOUBLE+1_^1_%NOP 0_^1DOUBLE ADQ =N0_*DOUBLE THE INDEX_^1_%ADQ =N94_)BASIC SHIFT INDEX_^1_%SAN 1_,SKIP IF LEFT SHIFT_^1_%INQ 8_,TO RIGHT SHIFT MESSAGES_^1_%LDA (PREG)_^1_%AND- $F_+SAVE SHIFT COUNT MASK $1F_^1_%RTJ MESIGE_^1_%JMP EXIT3_^1_%SPC 1_^1INREGX LDA (PREG)_'PICKUP INSTRUCTION_^1_%AND- $33_*M AS DESTINATION ILLEGAL_%MA€€SK $FFFE_^1_%STA* INREG1_'STORE FOR EXECUTION_^1_%LDA AREG_^1_%LDQ QREG_^1INREG1 NOP 0_,DO INTERREGISTER TRANSFER_^1_%STA AREG_^1_%STQ QREG_^1_%RTJ DOREG_(INTERREGISTER MESSAGE ROUTINE_^1_%JMP EXIT3_^1_%SPC 1_^1SKIPSX LDA (PREG)_'PICKUP INSTRUCTION_^1_%AND- $A_+SAVE SKIP INDEX AND COUNT_'MASK $FF_^1_%ENQ 0_^1_%LLS 12_+SKIP INDEX INTO Q_^1_%ALS 4_,WRAPAROUND SKIP COUNT_^€€1_%STQ* DUBBLE+1_^1_%NOP 0_^1DUBBLE ADQ =N0_*DOUBLE INDEX_^1_%ADQ =N62_)BASIC SKIP MESSAGE INDEX_^1_%STQ* SKIPPR_^1_%STA* SKIPWR_^1_%LDA PREG_^1_%STA* PREGTM_^1_%ENQ 0_^1_%LDA (PREG)_^1_%LLS 12_^1_%LDA =N$1000_^1_%LLS 4_,FORM SKIP 1 INSTRUCTION IN Q_^1_%STQ* SKIP1_(STORE FOR EXECUTION_^1_%LDA AREG_^1_%LDQ QREG_^1SKIP1 NOP 0_,EXECUTE SKIP_^1_%JMP* SKIP2_(DID NOT SKIP_^1€€_%LDA (PREG)_^1_%AND =N$F_)GET ACTUAL SKIP COUNT_^1_%ADD PREG_)BUMP P BY SKIP COUNT_^1_%STA* PREGTM_^1SKIP2 LDA* SKIPWR_^1_%LDQ* SKIPPR_^1_%RTJ* MESIGE_^1_%LDA* PREGTM_^1_%STA PREG_^1_%JMP EXIT3_^1SKIPPR NUM 0_^1SKIPWR NUM 0_^1PREGTM NUM 0_^1_%SPC 3_^1_%SPC 1_^1*_$THIS ROUTINE FORMS AND REQUESTS THE LINE OF DATA_^1_%SPC 1_^1MESIGE 0_"0_^1_%STA* ADRESS+1_$SAVE THE ADDRES€€S PASSED IN A_^1_%SLS 0_^1DOIT_!LDA =N0_*PICKUP LIST/NOLIST FLAG_^1_%SAN LUPTST-*-1_"SKIP IF LISTING_^1_%LDA PREG_)SEE IF TIME TO LIST_^1LISTAD SUB =N0_^1_%SAZ RAOO_)SKIP IF TIME TO START LISTING_^1LISTCK LDA =N0_*WHERE TRACE WAS STARTED_^1_%SUB* LISTAD+1_$WHERE LISTING STARTS_^1_%SAZ 1_^1RA0_"JMP* (MESIGE)_$RETURN WITH NO LISTING_^1RAOO_!RAO* DOIT+1_'SET LIST FLAG_^1LUPTST€€ LDA =N$F_)CHECK IF LOOP SUPPRESSING_^1_%SAZ 1_,SKIP IF LOOP SUPPRESSING_^1_%JMP* SRLOOP_'TO SUBROUTINE SUPPRESSINO TEST_^1_%STQ* MINDEX+1_$SAVE MESSAGE INDEX_^1_%LDQ =XBUF+1_^1BLUPE LDA BUFFER-1,Q_"PICKUP AN ADDRESS FROM THE BUFFER_^1_%SAZ STORIT-*-1_"SKIP IF FIRST UNUSED BUFFER CELL_^1_%SUB PREG_)COMPARE TO P THIS TIME_^1_%SAN 1_,SKIP IF NOT A MATCH_^1_%JMP* (MESIGE)_$IN €€A LOOP PREVIOUSLY LISTED,DO NOT LIST_^1_%INQ -1_^1_%SQZ MINDEX-*-1_"SKIP IF COMPLETE BUFFER CHECKED_^1_%JMP* BLUPE_(TRY ANOTHER CELL_^1STORIT LDA PREG_^1_%STA BUFFER-1,Q_$PUT THIS ADDRESS ON THE LIST_^1MINDEX LDQ =N0_*MESSAGE INDEX_^1SRLOOP LDA =N$F_)SUPPRESSION FLAG_^1_%SAN LIST-*-1_$SKIP IF NOT SUPPRESSING SUBROUTINES_^1SRLINK LDA =N0_*STORED INTO BY RTJ INSTRUCTION PATH_€€^1_%SAZ LIST-*-1_$SKIP IF NOT IN A SUBROUTINE_^1_%SUB PREG_^1_%SAZ 1_,SKIP IF BACK FROM SUBROUTINE_^1_%JMP* (MESIGE)_$RETURN WITHOUT LISTING_^1_%STA* SRLINK+1_$STOP SUPPRESSION_^1_%SPC 1_^1*_$BEGIN FORMING DATA LINE TO LIST_^1_%SPC 1_^1LIST_!TRQ A_^1_%INA -60_^1_%SAN 1_^1_%JMP* BYREG_(SKIP OP AND ADDRESS IF INTERREGISTER_^1_%LDA INST,Q_'PICKUP 2 CHARACTERS OF INSTRUCTION_^€€1_%STA* INSTMD_'STORE MSD OF INSTRUCTION_^1_%LDA INST+1,Q_$NEXT 2 CHARACTERS_^1_%STA* INSTLD_'LSD OF INSTRUCTION_^1ADRESS LDA =N0_*EFFECTIVE ADDRESS_^1_%RTJ WORD_)FORM 4 ASCII DIGITS_^1_%STQ* ADDMSD_'STORE EFFECTIVE ADDRESS_^1_%STA* ADDLSD_^1BYREG LDA+ PREG_^1_%RTJ WORD_)FORM 4 ASCII DIGITS_^1_%STQ* PMSD_)STORE P REGISTER_^1_%STA* PLSD_^1_%LDA* (BYREG+1)_#PREG_^1_%SUB- $F7_*BE€€GIN ADR OF PROGRAM_^1_%INA -1_^1_%RTJ WORD_)FORM 4 ASCII DIGITS_^1_%STQ* RELAD1_'SAVE MSB_^1_%STA* RELAD2_'SAVE LSB_^1_%LDA (PREG)_^1_%RTJ* WORD_^1_%STQ* CODMSD_'STORE ACTUAL INSTRUCTION CODE_^1_%STA* CODLSD_^1_%LDA AREG_^1_%RTJ* WORD_^1_%STQ* AMSD_)STORE A REGISTER_^1_%STA* ALSD_^1_%LDA QREG_^1_%RTJ* WORD_^1_%STQ* QMSD_)STORE Q REGISTER_^1_%STA* QLSD_^1_%LDA- I_^1_%STA ISAVE€€_(SAVE I FOR COMPLEATION_^1_%RTJ* WORD_^1_%STQ* IMSD_)STORE I REGISTER_^1_%STA* ILSD_^1_%LDQ* (BYREG+1)_#PREG_^1_%INQ 1_^1_%LDA- ($22),Q_%CONTENTS OF P+1_^1_%RTJ* WORD_)CONVERT P+1_^1_%STQ* PAND1A_'SAVE MSB OF P+1_^1_%STA* PAND1B_'SAVE LSB OF P+1_^1_%LDQ* (BYREG+1)_#PREG_^1_%INQ 2_^1_%LDA- ($22),Q_%CONTENTS OF P+2_^1_%RTJ* WORD_)CONVERT P+2_^1_%STQ* PAND2A_'SAVE MSB OF P+2_^1_%ST€€A* PAND2B_'SAVE LSB OF P+2_^1_%LDA (PREG)_'CONTENTS ON P REG_^1_%ARS 12_^1_%INA -1_+CHECK FOR JMP_^1_%SAZ YESJMP_^1_%LDA =N$2020_^1_%TRA Q_^1_%JMP* CONTXX_^1YESJMP LDA* (ADRESS+1)_"GET CONTENTS OF JUMP TO ADR_^1_%RTJ* WORD_^1CONTXX STQ* JMPRTJ_^1_%STA RTJJMP_^1_%LDA* HEAD_^1_%SAZ TRY_*FIRST TIME TRU_^1_%SAP TRYIT_(HEADING ALREADY DONE_^1_%ENA 42_^1_%STA* NUMWRD_'SETUP FOR€€ RESTART HEADER_^1_%LDA =XLINEP_^1_%STA* NUMWRD+1_^1TRY_"RTJ- (AMONI)_%FWRITE_^1_%NUM $4C00_(REQ CODE_^1_%ADC TRYIT_(COMPL ADR_^1_%NUM 0_,THREAD_^1_%NUM $18FB_(LU - V FIELD_^1NUMWRD NUM 130_*NUM OF WORDS_^1_%ADC HEDING_'HEADING BUFFER_^1_%JMP- (ADISP)_^1TRYIT RTJ- (AMONI)_%OUTPUT TRACE LINE_^1_%NUM $4C00_(REQ CODE_^1_%ADC CONT20_'COMPL ADR_^1_%NUM 0_,THREAD_^1_%NUM $18F€€B_(LU- V FIELD_^1_%NUM 37_+NUM OF WORD_^1_%ADC PMSD_)BUF ADR_^1_%JMP- (ADISP)_^1*_]_^1_%BZS HEAD(1)_%HEADING INDICATOR_^1*_]_^1CONT20 SQP CONT21_^1_%JMP* TRYIT_^1CONT21 LDA ISAVE_^1_%STA- I_^1_%RAO* HEAD_^1_%JMP (MESIGE)_^1_%SPC 3_^1PMSD_!0_"0_^1PLSD_!0_"0_^1_%ALF 1,_^1RELAD1 0_"0_^1RELAD2 0_"0_^1_%ALF 1,_^1CODMSD 0_"0_^1CODLSD 0_"0_^1_%ALF 2,_^1INSTMD 0_"0_^1INSTLD 0_"0_€€^1_%ALF 1,_^1ADDMSD 0_"0_^1ADDLSD 0_"0_^1_%ALF 2,_^1QMSD_!0_"0_^1QLSD_!0_"0_^1_%ALF 1,_^1AMSD_!0_"0_^1ALSD_!0_"0_^1_%ALF 1,_^1IMSD_!0_"0_^1ILSD_!0_"0_^1_%ALF 2,_^1PAND1A 0_"0_^1PAND1B 0_"0_^1_%ALF 2,_^1PAND2A 0_"0_^1PAND2B 0_"0_^1_%ALF 2,_^1JMPRTJ 0_"0_^1RTJJMP 0_"0_^1_%SPC 3_^1*_$THIS ROUTINE FORM 4 ASCII NUMBERALS FROM 4 HEX NUMERALS_^1_%SPC 1_^1WORD_!0_"0_^1_%ENQ 0_^1_€€%LLS 4_^1_%STQ* DIG1_^1_%ENQ 0_^1_%LLS 4_^1_%STQ* DIG2_^1_%ENQ 0_^1_%LLS 4_^1_%STQ* DIG3_^1_%ENQ 0_^1_%LLS 4_^1_%TRQ A_^1_%RTJ* FORM_^1_%LDQ* DIG3_^1_%STA* DIG3_^1_%TRQ A_^1_%RTJ* FORM_^1_%ALS 8_^1_%ADD* DIG3_^1_%STA* DIG3_)STORE 2 LSD AS ASCII_^1_%LDA* DIG2_^1_%RTJ* FORM_^1_%STA* DIG2_^1_%LDA* DIG1_^1_%RTJ* FORM_^1_%ALS 8_^1_%ADD* DIG2_^1_%TRA Q_,2 MSD IN ASCII TO Q_^1€€_%LDA* DIG3_)2 LSD IN ASCII TO A_^1_%JMP* (WORD)_^1_%SPC 1_^1FORM_!0_"0_^1_%SUB =N$A_^1_%SAM BYPAS2-*-1_"SKIP IF 0 THROUGH 9_^1_%ADD =N$41_(REFERENCE TO $41_^1_%JMP* BYPAS3_^1BYPAS2 ADD =N$3A_(REFERENCE TO $30_^1BYPAS3 JMP* (FORM)_^1DIG1_!0_"0_^1DIG2_!0_"0_^1DIG3_!0_"0_^1_%SPC 3_^1*_$THESE ARE THE CANNED INSTRUCTION CODE MESSAGES_^1_%SPC 2_^1INST_!ALF 2,_+INDEX 00_^1_%ALF €€ 2,JMP_(INDEX 02_^1_%ALF 2,MUI_(INDEX 04_^1_%ALF 2,DVI_(INDEX 06_^1_%ALF 2,STQ_(INDEX 08_^1_%ALF 2,RTJ_(INDEX 10_^1_%ALF 2,STA_(INDEX 12_^1_%ALF 2,SPA_(INDEX 14_^1_%ALF 2,ADD_(INDEX 16_^1_%ALF 2,SUB_(INDEX 18_^1_%ALF 2,AND_(INDEX 20_^1_%ALF 2,EOR_(INDEX 22_^1_%ALF 2,LDA_(INDEX 24_^1_%ALF 2,RAO_(INDEX 26_^1_%ALF 2,LDQ_(INDEX 28_^1_%ALF 2,ADQ_(INDEX 30_^1€€_%ALF 2,SLS_(INDEX 32_^1_%ALF 2,INP_(INDEX 34_^1_%ALF 2,OUT_(INDEX 36_^1_%ALF 2,EIN_(INDEX 38_^1_%ALF 2,IIN_(INDEX 40_^1_%ALF 2,SPB_(INDEX 42_^1_%ALF 2,CPB_(INDEX 44_^1_%ALF 2,INA_(INDEX 46_^1_%ALF 2,ENA_(INDEX 48_^1_%ALF 2,NOP_(INDEX 50_^1_%ALF 2,ENQ_(INDEX 52_^1_%ALF 2,INQ_(INDEX 54_^1_%ALF 2,EXI_(INDEX 56_^1_%ALF 2,SHFT_'INDEX 58_^1_%ALF 2,XREG_'INDE€€X 60_^1_%ALF 2,SAZ_(INDEX 62_^1_%ALF 2,SAN_(INDEX 64_^1_%ALF 2,SAP_(INDEX 66_^1_%ALF 2,SAM_(INDEX 68_^1_%ALF 2,SQZ_(INDEX 70_^1_%ALF 2,SQN_(INDEX 72_^1_%ALF 2,SQP_(INDEX 74_^1_%ALF 2,SQM_(INDEX 76_^1_%ALF 2,SWS_(INDEX 78_^1_%ALF 2,SWN_(INDEX 80_^1_%ALF 2,SOV_(INDEX 82_^1_%ALF 2,SNO_(INDEX 84_^1_%ALF 2,SPE_(INDEX 86_^1_%ALF 2,SNP_(INDEX 88_^1_%ALF 2,SPF€€_(INDEX 90_^1_%ALF 2,SNF_(INDEX 92_^1_%ALF 2,BAD_(INDEX 94_!ILLEGAL_^1_%ALF 2,QLS_(INDEX 96_^1_%ALF 2,ALS_(INDEX 98_^1_%ALF 2,LLS_(INDEX 100_^1_%ALF 2,BAD_(INDEX 102 ILLEGAL_^1_%ALF 2,QRS_(INDEX 104_^1_%ALF 2,ARS_(INDEX 106_^1_%ALF 2,LRS_(INDEX 108_^1_%SPC 5_^1*_*THIS IS A SPECIAL ROUTINE WITH TABLES TO FORM THE_^1*_*INSTRUCTION AND ADDRESS OF INTERREGISTER INS€€TRUCTIONS_^1_%SPC 5_^1DOREG 0_"0_^1_%LDA (PREG)_'PICKUP INSTRUCTION_^1_%AND- $A_+$FF MASK_^1_%ENQ 0_^1_%LLS 13_+OPERATION INDEX TO Q_^1_%STQ* OP+1_)SAVE OP INDEX_^1_%ENQ 0_^1_%LLS 3_,DESTINATION REGISTER BITS TO Q_^1_%LDA* DESTA,Q_%PICKUP HALF OF DESTINATION MESSAGE_^1_%STA ADDMSD_'STORE IN MESSAGE_^1_%LDA* DESTB,Q_%PICKUP OTHER HALF OF DESTINATION MESSAGE_^1_%STA ADDLSD_'€€STORE IN MESSAGE_^1OP_#LDQ =N0_^1_%LDA* ORIGA,Q_%LOAD FIRST TWO CHARACTERS OF OPERATION_^1_%STA INSTMD_'STORE IN MESSAGE_^1_%LDA* ORIGB,Q_%SECOND TWO CHARACTERS OF OPERATION_^1_%STA INSTLD_'STORE IN MESSAGE_^1_%ENQ 60_+INTERREGISTER MESSAGE INDEX_^1_%RTJ MESIGE_^1_%JMP* (DOREG)_^1_%SPC 3_^1*_*DESTINATION REGISTER MESSAGES - FIRST 2 CHARACTERS_^1_%SPC 3_^1DESTA ALF 1,NO_)0_€€!NONE_^1_%ALF 1,M_*1_!M_^1_%ALF 1,Q_*2_!Q_^1_%ALF 1,MQ_)3_!MQ_^1_%ALF 1,A_*4_!A_^1_%ALF 1,MA_)5_!MA_^1_%ALF 1,QA_)6_!QA_^1_%ALF 1,MQ_)7_!MQA_^1_%SPC 3_^1*_*DESTINATION REGISTER MESSAGES - SECOND 2 CHARACTERS_^1_%SPC 3_^1DESTB ALF 1,NE_)0_!NONE_^1_%ALF 1,_+1_!M_^1_%ALF 1,_+2_!Q_^1_%ALF 1,_+3_!MQ_^1_%ALF 1,_+4_!A_^1_%ALF 1,_+5_!MA_^1_%ALF 1,_+6_!QA_^1_%ALF 1,A_*7_!M€€QA_^1_%SPC 3_^1*_*OPERATION MESSAGES - FIRST HALF_^1_%SPC 3_^1ORIGA ALF 1,SE_)0_"SET_^1_%ALF 1,TR_)1_"TRM_^1_%ALF 1,TR_)2_"TRQ_^1_%ALF 1,TR_)3_"TRB_^1_%ALF 1,TR_)4_"TRA_^1_%ALF 1,AA_)5_"AAM_^1_%ALF 1,AA_)6_"AAQ_^1_%ALF 1,AA_)7_"AAB_^1_%ALF 1,CL_)8_"CLR_^1_%ALF 1,TC_)9_"TCM_^1_%ALF 1,TC_)A_"TCQ_^1_%ALF 1,TC_)B_"TCB_^1_%ALF 1,TC_)C_"TCA_^1_%ALF 1,EA_)D_"EAM_^1_%ALF €€1,EA_)E_"EAQ_^1_%ALF 1,EA_)F_"EAB_^1_%ALF 1, B_)10_!BAD_^1_%ALF 1, B_)11_!BAD_^1_%ALF 1, B_)12_!BAD_^1_%ALF 1, B_)13_!BAD_^1_%ALF 1, B_)14_!BAD_^1_%ALF 1,LA_)15_!LAM_^1_%ALF 1,LA_)16_!LAQ_^1_%ALF 1,LA_)17_!LAB_^1_%ALF 1, B_)18_!BAD_^1_%ALF 1, B_)19_!BAD_^1_%ALF 1, B_)1A_!BAD_^1_%ALF 1, B_)1B_!BAD_^1_%ALF 1, B_)1C_!BAD_^1_%ALF 1,CA_)1D_!CAM_^1_%ALF 1,CA_)1E_!CAQ_^1_%€€ALF 1,CA_)1F_!CAB_^1_%SPC 3_^1*_*OPERATION MESSAGES - SECOND HALF_^1_%SPC 3_^1ORIGB ALF 1,T_*0_^1_%ALF 1,M_*1_^1_%ALF 1,Q_*2_^1_%ALF 1,B_*3_^1_%ALF 1,A_*4_^1_%ALF 1,M_*5_^1_%ALF 1,Q_*6_^1_%ALF 1,B_*7_^1_%ALF 1,R_*8_^1_%ALF 1,M_*9_^1_%ALF 1,Q_*A_^1_%ALF 1,B_*B_^1_%ALF 1,A_*C_^1_%ALF 1,M_*D_^1_%ALF 1,Q_*E_^1_%ALF 1,B_*F_^1_%ALF 1,AD_)10_^1_%ALF 1,AD_)11_^1_%ALF €€ 1,AD_)12_^1_%ALF 1,AD_)13_^1_%ALF 1,AD_)14_^1_%ALF 1,M_*15_^1_%ALF 1,Q_*16_^1_%ALF 1,B_*17_^1_%ALF 1,AD_)18_^1_%ALF 1,AD_)19_^1_%ALF 1,AD_)1A_^1_%ALF 1,AD_)1B_^1_%ALF 1,AD_)1C_^1_%ALF 1,M_*1D_^1_%ALF 1,Q_*1E_^1_%ALF 1,B_*1F_^1_%SPC 3_^1HEDING ALF 19,* * *_!B E G I N_!T R A C E_!* * *_^1_%NUM $0D,$0A,$0A_^1_%ALF 12,_#START TRACING AT_^1FROM_!NUM $3030,$3030,$2020,€€$2020,$2020,$0D,$0A_^1_%ALF 12,_#START LISTING AT_^1TYPE_!NUM $3030,$3030,$2020,$2020,$2020,$0D,$0A_^1_%ALF 12,_#STOP TRACING AT_^1TO_#NUM $3030,$3030,$2020,$2020,$2020,$0D,$0A_^1_%ALF 8,_#OPTIONS_^1OPT_"ALF 1,_^1LINEP NUM $0D,$0A,$0A_^1_%ALF 25, P_"RELA CODE_"INST_!ADD_#Q_#A_#I_^1_%ALF 12,_"P+1_#P+2_#CONT_^1_%NUM $0D,$0A_^1_%SPC 3_^1*_*EXECUTION TIME TABLE - ADDRESSA€€BLE INSTRUCTIONS_^1_%SPC 3_^1EXTIME NUM $0000_(UNUSED_^1_%NUM 0_,JMP_^1_%NUM $FFFF_(MUI_^1_%NUM $FFFF_(DVI_^1_%NUM $2321_(STQ_^1_%NUM 0_,RTJ_^1_%NUM $2321_(STA_^1_%NUM $2321_(SPA_^1_%NUM $2321_(ADD_^1_%NUM $2321_(SUB_^1_%NUM $2321_(AND_^1_%NUM $2321_(EOR_^1_%NUM $2321_(LDA_^1_%NUM $3532_(RAO_^1_%NUM $2321_(LDQ_^1_%NUM $2321_(ADQ_^1_%SPC 3_^1*_*EXECUTION TIME TABLE€€ - NON ADDRESSABLE INSTRUCTIONS_^1_%SPC 3_^1NULTIM NUM $1211_(SLS_^1_%NUM $1211_(SKIPS_^1_%NUM $3543_(INP_^1_%NUM $3543_(OUT_^1_%NUM $1221_(EIN_^1_%NUM $1221_(IIN_^1_%NUM $3322_(SPB_^1_%NUM $3322_(CPB_^1_%NUM $1211_(INTER-REGISTER_^1_%NUM $1211_(INA_^1_%NUM $1211_(ENA_^1_%NUM $1211_(NOP_^1_%NUM $1211_(ENQ_^1_%NUM $1211_(INQ_^1_%NUM $2422_(EXI_^1_%NUM $1311_(SHIFTS_€€^1_%SPC 1_^1BUFFER BZS BUFFER(BUF+1) LOOP SUPPRESSION BUFFER_^1_%EQU SIZE(*)_^1*_]_^1*_$TRACE ENTRY IS FOR INTERNAL PROGRAM CALLING TRACE_^1*_*TRACE BEGINS AT ENTRY_^1*_*AND ENDS AT MONITOR CALLS (EXCLUDING READING AND WRITING)_^1*_*AND JMPS TO DISP, OR JMP/RTJ TO PROTECTED CORE_^1*_]_^1TRACE1 NOP 0_,ADR OF CALLING PROGRAM_^1_%LDA* TRACE1_^1_%STA PREG_)SAVE NEW P_^1_%JMP BEGI€€N_(RETURN TO NORMAL PROCESSING_^1*_]_^1_%SPC 2_^1TRACE2 NOP 0_^1_%LDA* TRACE2_^1_%STA PREG_^1_%LDA TRA6_)PICK UP OUTPUT BUFFER ADDRESS_^1_%STA TR2HLD_'SAVE IT_^1_%LDA =XT2MSG_%GET THE ADDRESS OF TRACE 2 MSG_^1_%STA TRA6_)PUT ITS ADDRESS IN THE WRITE REQUEST_^1_%ENA 21_^1_%STA TRA5_)PUT NUMBER OF WORDS IN REQUEST_^1_%RAO TR2FLG_^1_%JMP TRACE3_^1*_]_^1_%SPC 2_^1*_$THIS SE€€CTION PRINTS EXECUTION TIME AND TELLS WHY THE STOP IN TRC_^1*_]_^1MONIT0 ENA 59_^1_%STA KAPUT0_'LENGTH OF END COMMENT_^1_%LDA- I_^1_%STA ISAVE_^1_%RTJ FINI_)PRINT EXECUTION TIME_^1_%ENA -0_^1_%STA HEAD_)HEADER BIT_^1_%LDA INSAVE_'FIND WHICH ERROR_^1_%SUB =N$14EA_%CHECK FOR DISP_^1_%ENQ 4_^1_%SAN MONIT1_^1MONITA LDA* D,Q_^1_%STA* OUTHRE,Q_^1_%INQ -1_^1_%SQM MONITB_^1_%JM€€P* MONITA_^1MONITB JMP* MONIT3_^1MONIT1 SUB =N$400A_%CHECK FOR MONITOR 54F4_^1_%SAZ MONITC_^1_%JMP* MONITE_'MUST BE PROTECT VIOLATION_^1MONITC LDA* M,Q_^1_%STA* OUTHRE,Q_^1_%INQ -1_^1_%SQZ MONITD_^1_%JMP* MONITC_^1MONITD LDQ PREG_^1_%INQ 1_,GET REQUEST CODE FROM MONITOR CALL_^1_%LDA- ($22),Q_^1_%ARS 9_^1_%AND- $7_+MASK OF $1F_^1_%RTJ WORD_)CONVERT OT ASCII_^1_%STA* OUTHRE_€€^1_%JMP* MONIT3_^1MONITE LDA* P,Q_^1_%STA* OUTHRE,Q_^1_%INQ -1_^1_%SQM MONIT3_^1_%JMP* MONITE_^1MONIT3 RTJ- (AMONI)_^1_%NUM $4C00_(REQ CODE_^1_%ADC MONIT4_'COMPL ADR_^1_%NUM 0_,THREAD_^1_%NUM $18FD_(LU_^1_%NUM 50_+NO OF WORDS_^1_%ADC OUTHRE-2_$BUF_^1_%JMP- (ADISP)_^1*_]_^1MONIT4 SAP MONIT5_^1_%JMP* MONIT3_^1MONIT5 JMP ASK_^1M_$ALF 5,_!REQCDE_^1D_$ALF 5,DISP CALL_^1P_$AL€€F 5,PROT VIOL_^1_%NUM $0D,$0A_^1OUTHRE ALF 5,_^1_%ALF 8,WAS ENCOUNTERED_^1_%NUM $0D,$0A_^1_%ALF 17,INPUT *C TO CONTINUE WITHOUT TRACE_^1_%NUM $0D,$0A_^1_%ALF 12,INPUT *Z TO DISCONTINUE_^1_%NUM $0D,$0A_^1VFDCNT NUM 0_,HOLD ADDRESS OF VFD WHICH HAS REQUEST CODE_^1PRTJ_!NUM 0_,PSUDEO P-COUNTER_^1_%SPC 2_^1RTJMON LDA PREG_^1_%INA 1_^1_%STA* PRTJ_^1_%STA* VFDCNT_^1_%ENQ 0€€_^1_%LDA (PRTJ)_'GET PARM FOLLOWING RTJ_^1_%SAP VFD1_)IS IT A INDIRECT PARM LIST_^1_%JMP* IND32K_'YES_^1VFD1_!SUB =N$2000_%IS IT A 65K INDIRECT PARM LIST_^1_%SAN TEST_)NO_^1_%JMP* IND65K_'YES_^1TEST_!LDA (PRTJ)_'GET THE VFD PARM_^1_%STA* YES+1_^1_%ARS 9_,GET REQUEST CODE_^1_%AND- $7_+LOCORE $0007_^1_%INA -1_+READ_^1_%SAZ YES_^1_%INA -1_+WRITE_^1_%SAZ YES_^1_%INA -2_+FREA€€D_^1_%SAZ YES_^1_%INA -2_+FWRITE_^1_%SAZ YES_^1_%JMP MONIT0_'NONE OF THE ABOVE_^1_%SPC 2_^1YES_"LDA =N0_^1_%AND =N$0100_^1_%SAZ YES1_)ABS_^1_%INQ 1_-REL_^1YES1_!RAO* PRTJ_)GET COMPLETION ADDRESS_^1_%LDA (PRTJ)_^1_%SAP YES2_)NON-INDIRECT COMPLETION ADDRESS_^1_%JMP MONIT0_'STOP TRACE( INDIRECT COMPLETION ADDRESS_^1YES2_!SAN YES3_^1_%JMP* ZEROCP_'NO COMPLETION ADDRESS_^1Y€€ES3_!SQZ YES4_^1_%LDA* VFDCNT_^1_%ADD (PRTJ)_'ADD RELATIVE DISTANCE TO GET COMP ADDRESS_^1YES4_!TRA Q_,PUT ADDRESS OF COMPLETION IN REG Q_^1_%LDA- (N0),Q_'GET INSTRUCTION AT COMPLETION ADDRESS_^1_%STA* CPADD1+1_$STORE IN HOLD AREA_^1_%LDA =N$5400_%STORE A RTJ_^1_%STA- (N0),Q_'AT COMPLETION ADDRESS OF REQUEST_^1_%LDA- (N1),Q_'GET INSTRUCTION AT COMP+1_^1_%STA* CPADD2+1_^1_%LDA €€=XRTRTJ_%GET ADDRESS FOR RETURN JMP_^1_%STA- (N1),Q_'STORE ADD FOR RETURN JMP BACK TO TRACE_^1_%JMP (PREG)_'JMP BACK TO MONITOR REQUEST_^1_%SPC 2_^1_%SPC 2_^1RTRTJ NOP 0_^1_%STA AREG_^1_%STQ QREG_^1_%LDQ* RTRTJ_^1_%INQ -2_^1CPADD2 LDA =N0_*REPLACE INSTRUCTION 2_^1_%STA- (N1),Q_'REPLACE SECOND INSTRUCTION_^1CPADD1 LDA =N0_*REPLACE INSTRUCTION 1_^1_%STA- (N0),Q_'REPLACE FIR€€ST INSTRUCTION_^1_%STQ PREG_)RESET P REGISTER FOR TRACE_^1_%JMP BEGIN_^1_%SPC 2_^1ZEROCP LDQ* PRTJ_*PRTJ NOW HAS THE ADDRESS OF RTJ+2_^1_%LDA- (N2),Q_(PICK UP PARM WITH LOGICAL UNIT_^1_%AND- $D_+GET LU AND ADDRESS INDICATOR_^1_%ENQ 0_^1_%LLS 6_,PUT ADDRESS INDICATOR IN Q_^1_%ARS 6_,LU IN REG A_^1_%SQN CONT_)NOT THE LOGICAL UNIT_^1_%JMP* FOUND_^1CONT_!INQ -1_+IS IT A SIGNED €€INCREMENT TO LU_^1_%SAN CONT2_(NO_^1_%ADD* VFDCNT_(YES_^1_%TRA Q_^1_%LDA- (N0),Q_'PICK UP THE LOGICAL UNIT_^1_%JMP* FOUND_^1CONT2 TRA Q_^1_%LDA- (N0),Q_'PICK UP LU FROM CORE LOCATION_^1FOUND TRA Q_^1_%LDQ+ LOG1A,Q_%PICK UP PHYSTAB ADDRESS_^1_%LDA- (N8),Q_'GET EIGHT WORD OF PHYSTAB_^1_%ARS 11_+GET EQUIPPMENT CLASS_^1_%AND- $5_+LOCORE $0007_^1_%INA -2_+IS IT A MASS STORAGE DE€€VICE_^1_%SAZ MASS_^1_%ENA 6_^1ADDER ADD* VFDCNT_^1_%TRA Q_^1_%LDA- (N0),Q_^1_%SUB =N$14EA_'IS THERE A DISP CALL AT THIS ADDRESS_^1_%SAN ADDER1_'NO_^1_%INQ 1_,YES, BUMB BY ONE TO PICK UP NEXT INSTRUCTION_^1ADDER1 TRQ A_-THIS IS THE COMPLETION ADDRESS_^1_%JMP* YES4_^1MASS_!ENA 8_^1_%JMP* ADDER_^1_%SPC 2_^1IND32K AND- $11_*LOCORE 7FFF, AND OFF PARTH._^1_%JMP* I65K_^1_%SPC 2€ή_^1IND65K RAO* PRTJ_)THIS ADDRESS HAS THE ABS ADD OF THE PARM LIST_^1_%LDA (PRTJ)_'GET THE ADDRESS_^1I65K_!STA* PRTJ_)STORE IT IN PSEDUO COUNTER_^1_%STA* VFDCNT_(STORE IN RTJ+1 HOLD AREA_^1_%JMP* TEST_^1_%END TRACE3_^__ήPSCMEXC CSY/ E01 P€1_%NAM SCMEXC_'DECK-ID E01 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_$ON-LINE DIAGNOSTIC SUPERVISOR_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 BUT NOT RELOCATABLE_^1_%SPC 2_€€^1************************************************************************_^1*_]_'*_^1*_8MONITOR DESCRIPTION_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_$SCMEXC IS THE DIAGNOSTIC EXECUTIVE ROUTINE FOR THE MASS_^1*_$MEMORY RESIDENT VERSION OF SCMM. THE MONITOR LOADS AND_^1*_$SCHEDULES TESTS. IT ALSO SENDS COMMUNICATION FLAGS €€TO TESTS_^1*_$THAT ARE CURRENTLY EXECUTING. SCMEXC ALSO CONTAINS SEVEN_^1*_$SUBROUTINES AS FOLLOWS_^1*_*INFOIN -- INPUTS FROM SICM A STRING OF 40 ASCII CHAR-_^1*_4ACTERS CONTAINING TEST PARAMETERS._^1*_*GETFLD -- SEPARATES CHARACTER FIELD INPUT BY INFOIN_^1*_4INTO FIEDS OF HEXADECIMAL NUMBERS._^1*_*RHXASC -- CONVERTS ONE HEXADECIMAL WORD INTO ASCII_^1*_*ROCDEC -- CONVERTS ONE HEXA€€DECIMAL WORD INTO DECIMAL_^1*_*RDECHX -- CONVERTS ONE DECIMAL WORD INTO HEXADECIMAL_^1*_*CLRSTK -- CLEARS TEST NAME FROM PROGRAM STACK - USED_^1*_*CLRSTK -- CLEARS TEST NAME FROM PROGRAM OLVS - USED_^1*_*MESAGE -- OUTPUTS TEST MESSAGES_^1*_$NOTE: INFOIN AND GETFLD ARE NOT RE-ENTRANT ROUTINES_^1*_]_^1*_$SCMEXC HAS EIGHT CONTROL WORDS AS FOLLOWS_^1*_*SRT -- LOADS AND SCHEDULES EXECUT€€ION OF SPECIFIED_^1*_1DIAGNOSTIC_^1*_*PRM -- TERMINATES EXECUTION OF SPECIFIED DIAGNOSTIC_^1*_1WITH RETURN TO PARAMETER ENTRY SEQUENCE_^1*_*PRT -- CLEARS NO ERROR PRINTOUT FLAG OF SPECIFIED_^1*_1DIAGNOSTIC_^1*_*NPT -- SETS NO ERROR PRINTOUT FLAG FOR SPECIFIED_^1*_1DIAGNOSTIC_^1*_*STP -- TERMINATES EXECUTION OF SPECIFIED_^1*_1DIAGNOSTIC_^1*_1MEMORY LIBRARY ON THE STANDARD LIST DEVIC€€E_^1_%EJT_"0_^1*_*XIT -- TERMINATES EXECUTION OF ALL DIAGNOSTICS AND THE_^1*_1DIAGNOSTIC MONITOR_^1*_,(CORE FOR SCMEXC WILL BE RELEASED)_^1*_$CLR -- TERMINATE OPERATOR/SCMEXC COMMUNICATIONS WITHOUT_^1*_,TERMINATING TESTS THAT ARE IN EXECUTION_^1*_$LIST-- PROVIDES A PRINTOUT ON THE STANDARD LIST DEVICE OF_^1*_,ALL THE ROUTINES IN THE SCMM LIBRARY WITH MNEMONIC_^1*_,NAMES, DISK SECTO€€R ADDRESS, PROGRAM LENGTH AND CORE_^1*_,ADDRESS IF PRESENTLY EXECUTING_^1*_$THE FIRST FIVE CONTROL WORDS MUST BE FOLLOWED BY A DIAGNOSTIC_^1*_$NAME. THE ROUTINES THEN PERFORM THE CONTROL OPERATION AS_^1*_$INPUT. IF AN ERROR CONDITION EXISTS, THE MONITOR WILL OUTPUT_^1*_$A MESSAGE TO INFORM THE USER (IE. STARTING A DIAGNOSTIC_^1*_$ALREADY IN EXECUTION MONITOR OUTPUTS "PROGRAM SCHED€€ULED"._^1*_$EACH DIANOSTIC HAS A FLAG WORD WHICH IS CHECKED WHEN APPRO-_^1*_$PREATE. THE DEFINITION OF THE FLAG BITS IS AS FOLLOWS:_^1*_*BIT 00 -- TERMINATE EXECUTION BIT_^1*_*BIT 07 -- STOP ERROR PRINTOUTS_^1*_$NOTE: BITS 01 THRU 05 ARE RESERVED FOR CORE RESIDENT MONITOR_^1*_$BIT 15 IS USED BY CORE RESIDENT MONITOR AS A BUSY FLAG._^1_%SPC 2_^1*************************************€€***********************************_^1*_]_'*_^1*_8MONITOR EQUIVALENCES_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%ENT SYSCHK_'ENTRY TO DIAGNOSTIC EXECUTIVE ROUTINE_^1*_]_^1_%EQU AVOLR($BA)_"LOCORE LOCATION OF ADDR. OF RELEASE VOLATILE_^1_%EQU AVOLA($BB)_"LOCORE LOCATION OF ADDR. OF REQUEST VOLATILE_^1_%EQU ADISP($EA)_"L€€OCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%EQU ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU ZROBIT($33)_!START OF ZERO BIT TABLE_^1_%EQU LSTDEV($FB)_!LOCATION OF L.U. FOR STD LIST DEVICE_^1_%EQU€€ OUTCOM($FC)_!LOCATION OF L.U. FOR OUTPUT COMMENT DEVICE_^1_%EQU INCOM($FD)_"LOCATION OF L.U. FOR INPUT COMMENT DEVICE_^1_%EQU FM($1000)_#LOGICAL UNIT 'M' BIT LOCATOR_^1_%EQU FA($400)_$LOGICAL UNIT 'A' BITS LOCATOR_^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 VRA(1)_'VOLATILE STORAGE INDEX ('A' REG. STOR. LOC.)_^1_%EQU VR(3)_(VOLATILE STORAGE INDEX_^1_%EQU VTEMP(4)_$VOLATILE STORAGE INDEX_^1_%EQU VPARA(5)_$VOLATILE STORAGE INDEX_^1_%EQU VCNT(6)_%VOLATILE STORAGE INDEX_^1_%EQU VCHSAV(7)_#VOLATILE STORAGE INDEX_^1_%EQU COMMA($2C)_"ASCII CODE FOR COMMA_^1_%EQU SLASH($2€€F)_"ASCII CODE FOR SLASH_^1_%EQU PRGLIB($C4)_!STARTING SECTOR ADDRESS OF PROGRAM LIBRARY_^1_%EQU RUBOUT($3F)_!ASCII CODE FOR QUESTION MARK (RUBOUT CHAR)_^1*_]_^1_%EXT SCMMLC_'ON-LINE MAINTAINENCE MONITOR BUSY FLAG_^1_%EXT ADAYTO,AMONTO,AYERTO,HORMIN_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3MONITOR INITIALIZATION ROUTINE_€€3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1SYSCHK LDA* FLAG1_(CK FOR FIRST ENTRY TO_^1_%SAZ SYSA-*-1_'ROUTINE._^1_%JMP* SYS1_^1SYSA_!RAO* FLAG1_(SET FLAG._^1_%RTJ* HERE_^1HERE_!NUM 0_^1_%LDA* HERE_)COMPUTE ADDRESS OF_^1_%ADD =X(SYSCHK-HERE) ENTRY POINT TO SYSCHK._^1FLGADD STA SCMMLC_^1_%LDA+ AMONTO_^1_%STA DTIN_)MM IN ME€€SSAGE_^1_%ENQ $2F_^1_%LDA+ ADAYTO_^1_%LLS 8_^1_%STQ DTIN+1_'/D IN MESSAGE_^1_%ADD =N$2F_^1_%STA DTIN+2_'D/ IN MESSAGE_^1_%LDA+ AYERTO_^1_%STA DTIN+3_'YY IN MESSAGE_^1_%LDA+ HORMIN_^1_%RTJ ROCDEC_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%RTJ RHXASC_^1_%ADC (TMIN-*)_^1_%RTJ MSGOUT_'YES, OUTPUT TITLE MESSAGE_^1_%ADC MSG1E-MSG1B_^1_%ADC MSG1B-MSGREF_^1*_]_^1_%LDQ* FLGADD+1_$CHEC€€K IF ADDRESS OF SCMEXC LIBRARY LINKED_^1_%INQ +1_^1_%LDA- (ZERO),Q_$LOAD ADDRESS_^1_%STA* SECSAV_^1_%EOR- LPMSK+15_^1_%SAZ ERROR-*-1_#WAS ADDRESS SET AT SYSTEM INITIALIZATION_^1_%JMP* SYSB_^1ERROR RTJ MSGOUT_'SECTOR ADDRESS NOT LINKED_^1_%ADC MSG4E-MSG4B_^1_%ADC MSG4B-MSGREF_^1_%JMP EXIT2_^1_%EJT_]_^1FLAG1 NUM 0_^1*_]_^1ADRTAB BZS ADRTAB(7)_^1*_]_^1SYSB_!LDA* HERE_^1_%ADD€€ =XINFOIN-HERE_!COMPUTE ADDRESS OF INFOIN ROUTINE_^1_%STA* ADRTAB_^1_%LDA* HERE_^1_%ADD =XGETFLD-HERE_!COMPUTE ADDRESS OF GETFLD ROUTINE_^1_%STA* ADRTAB+1_^1_%LDA* HERE_^1_%ADD =XRHXASC-HERE_!COMPUTE ADDRESS OF RHXASC ROUTINE_^1_%STA* ADRTAB+2_^1_%LDA* HERE_^1_%ADD =XROCDEC-HERE_!COMPUTE ADDRESS OF ROCDEC ROUTINE_^1_%STA* ADRTAB+3_^1_%LDA* HERE_^1_%ADD =XRDECHX-HERE_!COMPUTE A€€DDRESS OF RDECHX ROUTINE_^1_%STA* ADRTAB+4_^1_%LDA* HERE_^1_%ADD =XCLRSTK-HERE_!COMPUTE ADDRESS OF CLRSTK ROUTINE_^1_%STA* ADRTAB+5_^1_%LDA* HERE_^1_%ADD =XMESAGE-HERE COMPUTE ADDRESS OF MESAGE ROUTINE_^1_%STA* ADRTAB+6_^1_%JMP* SYS1_^1*_]_^1SECSAV NUM 0_^1ACTIVE NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_:CONTROL WOR€€D TABLE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1_%EQU CONTAB(*),X(*)_^1*_]_^1_%ALF $, SRT$_%START CONTROL WORD_^1_%ADC START-X_^1_%ALF $, PRM$_%PARAMETER CONTROL WORD_^1_%ADC PARAM-X_^1_%ALF $, PRT$_%PRINT START CONTROL WORD_^1_%ADC PRTSET-X_^1_%ALF $, NPT$_%PRINT STOP CONTROL WORD_^1_%ADC PRTSTP-X_^1_%ALF $, STP€€$_%STOP CONTROL WORD_^1_%ADC STOP-X_^1_%ALF $, CLR$_%CLEAR CONTROL WORD_^1_%ADC CLEAR-X_^1_%ALF $, XIT$_%EXIT CONTROL WORD_^1_%ADC EXIT-X_^1_%ALF $, LST$_%LIST CONTROL WORD_^1_%ADC INDEX-X_^1ENDCON NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2REQUEST AND INPUT CONTROL WORDS_3*_^1*_]_'*_^1***************************€€*********************************************_^1_%SPC 2_^1SYS1_!LDA* ACTIVE_^1_%SAZ SYS2-*-1_$CHECK IF MONITOR CURRENTLY BUSY_^1_%JMP- (ADISP)_^1SYS2_!RAO* ACTIVE_'NO, SET BUSY FLAG_^1SYS3_!RTJ MSGOUT_^1_%ADC MSG2E-MSG2B_^1_%ADC MSG2B-MSGREF_^1_%RTJ INFO_)GET CONTROL WORDS._^1_%LDA* HERE_)COMPUTE ADDR. OF CONTAB._^1_%ADD =XCONTAB-HERE_^1_%STA* TEMP_^1_%INA 1_^1_%STA* TEMP+1€€_^1_%INA 1_^1_%STA* TEMP+2_^1_%RTJ* CNT1_^1_%JMP* CNT2_^1*_]_^1*_$ROUTINE GETS LAST THREE CHARACTERS BEFORE SLASH_^1*_]_^1CNT1_!0_"0_^1_%LDA =A_^1_%TRA Q_^1CNT1A STQ* CNTA_^1_%STA* CNTB_^1_%RTJ RDASC_(GET A CHAR. FROM INBUFF_^1_%STA* CHAR_+IN A-REG._^1_%INA -SLASH_'CHECK FOR A SLASH_^1_%SAZ CNT1B-*-1_^1_%INA -COMMA+SLASH CHECK FOR A COMMA_^1_%SAZ CNT1B-*-1_^1_%LDA* CHAR_^€€1_%ALS 8_,CHECK FOR A CARRIAGE RETURN_^1_%SAM CNT1B-*-1_^1_%LDA* CNTB_^1_%ENQ $20_*SPACE IN LAST CHAR._^1_%LLS 8_^1_%EOR* CHAR_^1_%JMP* CNT1A_(PACKED INTO CNTA,CNTB._^1CNT1B LDA* CNTA_^1_%LDQ* CNTB_^1_%JMP* (CNT1)_^1*_]_^1SC_#NUM $5343_^1M_$NUM $4D00_^1CNTA_!NUM 0_^1CNTB_!NUM 0_^1CHAR_!NUM 0_^1TEMP_!NUM 0,0,0_^1CNTPTR NUM 0_^1_%SPC 2_^1*********************************€€***************************************_^1*_]_'*_^1*_4LOCATE CONTROL WORD ROUTINE_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CNT2_!ENQ 0_^1CNT3_!LDA* (TEMP),Q_$GET A CODE FROM LIST._^1_%SAZ CNT4-*-1_$ZERO MEANS END OF TABLE._^1_%SUB* CNTA_)CK FIRST CHAR._^1_%SAN NEXT-*-1_^1_%LDA* (TEMP+1),Q_^1_%SUB* CNTB_)CK NEXT TWO CHARS€€._^1_%SAZ FOUND-*-1_^1NEXT_!INQ 3_^1_%JMP* CNT3_^1CNT4_!RTJ MSGOUT_'CONTROL WORD ERROR_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG5B-MSGREF_^1_%JMP* SYS3_^1FOUND LDA HERE_)COMPUT ADDR. OF REQ_^1_%ADD =XX-HERE_'OPERATION SUBR._^1_%ADD* (TEMP+2),Q_^1_%STA* CNTPTR_^1_%JMP* (CNTPTR)_^1*_]_^1*_$THIS ROUTINE CHECKS IF A PROGRAM IS IN THE PROGRAM STACK_^1*_$OR IF THERE IS AN AVAILABLE POSITIO€€N IN THE STACK(IE._^1*_$CONTENTS OF THE RETURN ADDRESS NON-ZERO). ON RETURN 'Q'_^1*_$REGISTER POINTS TO THE POSITION IN THE STACK OF THE DESIRED_^1*_$CONDITION. IF THE SEARCH DOES NOT FIND THE CONDITION DE-_^1*_$SIRED, RETURN IS TO ADDRESS + 1._^1*_]_^1CKSTK 0_"0_^1_%IIN 0_^1_%RTJ- (AVOLA)_%REQUEST STORAGE_^1_%NUM 8_^1_%LDQ* CKSTK_^1_%STQ- VR,I_)SAVE RETURN ADDRESS_^1_%STQ- VPAR€€A,I_^1_%EIN 0_^1_%RAO- VR,I_^1_%CLR Q_^1CKSTK1 LDA STACK,Q_^1_%SAZ CKSTK2-*-1_^1_%SAP CKSTK3-*-1_^1_%RAO- VR,I_)END OF STACK_^1_%JMP* CKSTK5_^1CKSTK2 STQ- VTEMP,I_^1_%LDQ- VPARA,I_^1_%LDA- (ZERO),Q_^1_%LDQ- VTEMP,I_^1_%SAN CKSTK5-*-1_^1CSTK2A INQ +3_^1_%JMP* CKSTK1_^1CKSTK3 SUB- VRA,I_^1_%SAZ CKSTK4-*-1_"FIRST CHARACTERS AGREE_^1_%JMP* CSTK2A_^1CKSTK4 INQ +1_^1_%LDA STACK€€,Q_^1_%INQ -1_^1_%SUB- (ZERO),I_^1_%SAZ CKSTK5-*-1_"SECOND AND THIRD CHARACTERS AGREE_^1_%JMP* CSTK2A_^1CKSTK5 STQ- (ZERO),I_^1_%IIN 0_^1_%LDA- VR,I_)RESTORE RETURN ADDRESS_^1_%STA* CKSTK_^1_%RTJ- (AVOLR)_^1_%EIN 0_^1_%JMP* (CKSTK)_^1*_]_^1_%SPC 5_^1*_]_^1*_8THIS ROUTINE SEARCHES THE PROGRAM_^1*_9LIBRARY DIRECTORY FOR A REQUESTED TEST_^1*_]_^1CKLIB NUM 0_^1_%LDA* CNTA_)SET U€€P TEST NAME_^1_%AND- LPMSK+8_^1_%ADD* M_-FOR PROGRAM LIBRARY_^1_%STA* CNTA_+SEARCH_^1_%LDA- PRGLIB_'GET THE START OF PROGRAM LIBRARY DIRECTORY_^1CKLIB1 RTJ* GET_*GO GET FIRST SECTOR_^1_%ENQ 85_+SEARCH_^1CKLIB2 LDA* BUFF,Q_(CURRENT_^1_%SUB* SC_-SECTOR_^1_%SAN CKLIB3_*FOR_^1_%LDA* BUFF+1,Q_)REQUESTED_^1_%SUB* CNTA_.TEST_^1_%SAN CKLIB3_-LOCATION_^1_%LDA* BUFF+2,Q_^1_%SUB* CNTB_^1CK€€LIB3 SAN CKLIB4_^1_%LDA* BUFF+3,Q_$REQUESTED TEST FOUND_^1_%SAP CKLIB4_(VERIFY THAT THE ENTRY IS A FILE_^1_%TCA A_,YES_^1_%LDQ* BUFF+4,Q_$SAVE THE_^1_%STQ BLOCK+2_'PROGRAM SECTOR LOCATION_^1_%MUI =N$60_^1_%STA PGMLEN_'SAVE THE_^1_%STA BUFSIZ_(PROGRAM LENGTH_^1_%JMP* (CKLIB)_%RETURN_^1CKLIB4 INQ -5_+BUMP INDEX TO NEXT PROGRAM ID_^1_%SQM CKLIB5_'END OF THIS SECTOR_^1_%JMP* C€€KLIB2_'NO_^1CKLIB5 LDA* BUFF+95_%YES - GET ADDRESS OF NEXT SECTOR_^1_%INA 0_^1_%SAZ CKLIB6_'END OF PROGRAM LIBRARY DIRECTORY_^1_%JMP* CKLIB1_'NO_^1CKLIB6 RAO* CKLIB_(YES -_^1_%JMP* (CKLIB)_^1_%SPC 5_^1*_]_^1*_8THIS ROUTINE RETRIEVES A SECTOR FROM_^1*_9THE SYSTEM DISK - ON ENTRY THE A REG._^1*_:CONTAINS THE SECTOR NO._^1*_]_^1GET_"NUM 0_^1_%STA* PRGSEC_'SECTOR NO._^1_%RTJ- (AMON€€I)_^1REQ_"NUM $944_)FREAD_^1_%ADC RCMP-REQ_$COMPL. ADDRESS_^1_%NUM 0_,THREAD_^1_%NUM $8C2_)SYSTEM LOGICAL UNIT_^1_%NUM 96_+NO. OF WORDS_^1_%ADC BUFF-REQ_$BUFF ADDRESS_^1_%NUM 0_,MSB_^1PRGSEC NUM 0_,LSB_^1_%JMP- (ADISP)_^1RCMP_!SQM ER_+CHECK FOR I/O ERROR_^1_%JMP* (GET)_^1ER_#JMP SYS3_^1BUFF_!BZS BUFF(97)_^1*_]_^1DKERR 0_"0_^1_%LDA- 0_^1DKERR1 ADC FM+2*FA+OUTCOM_^1_%STA* €€SETMSG_^1_%RTJ* MSGOUT_^1_%ADC MSG8E-MSG8B_^1_%ADC MSG8B-MSGREF_^1_%JMP* (DKERR)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_-COMMON WRITE ROUTINE FOR MONITOR MESSAGES_.*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGOUT 0_"0_^1_%LDA* (MSGOUT)_^1_%STA* LENGTH_^1_%RAO* MSGO€€UT_^1_%LDA* (MSGOUT)_^1_%STA* MSGLOC_^1_%RTJ- (AMONI)_^1MSGREF ADC 6*FRC+FX+5*FRP+5*FCP_^1_%ADC MSG1-MSGREF_^1_%ADC 0_^1SETMSG ADC FM+2*FA+OUTCOM_^1LENGTH ADC 0_^1MSGLOC ADC 0_^1_%JMP- (ADISP)_^1MSG1_!RAO* MSGOUT_^1_%JMP* (MSGOUT)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5START CONTROL WORD ROUTINE_5*_^1*_]_'*_^1******€€******************************************************************_^1_%SPC 2_^1*_**** NOTE: ROUTINE WILL HANG ON SPACE REQUEST ***_^1_%SPC 2_^1START RTJ CNT1_)GET NAME OF TEST_^1_%RTJ CKSTK_(CK IF TEST IS ALREADY SCHEDULED_^1_%NUM 0_^1_%JMP* PGMON_^1_%RTJ CKLIB_(CHECK IF TEST IS IN LIBRARY_^1_%JMP* START1_^1_%RTJ* MSGOUT_'TEST NOT IN LIBRARY_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG€€6B-MSGREF_^1_%JMP SYS3_^1PGMON RTJ* MSGOUT_'PGM ALREADY SCHEDULED_^1_%ADC MSG3E-MSG3B_^1_%ADC MSG3B-MSGREF_^1_%JMP SYS3_^1START1 RTJ CKSTK_(CK IF SPACE AVAILABLE IN PGM STACK_^1_%NUM $FFFF_^1_%JMP* START2_^1_%RTJ* MSGOUT_'NO, OUTPUT MESSAGE_^1_%ADC MSG9E-MSG9B_^1_%ADC MSG9B-MSGREF_^1_%JMP SYS3_^1START2 STQ* STKPTR_^1_%RTJ- (AMONI)_%SPACE REQUEST_^1SPCREQ ADC 10*FRC+FX+5*€€FRP+5*FCP_^1_%ADC SCMPL-SPCREQ_^1_%NUM 0_^1PGMLOC NUM 0_^1PGMLEN NUM 0_^1_%JMP- (ADISP)_^1SCMPL SQP GOTSPC_^1_%LDA* DKERR1_'SPACE_^1_%STA* SETMSG_)ALLOCATION_^1_%RTJ* MSGOUT_+ERROR_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG14B-MSGREF_^1_%JMP SYS3_^1GOTSPC LDA* PGMLOC_^1_%STA* BLOCK_(SET UP DISK READ REQUEST TO READ_^1_%LDA HERE_)THIS MONITOR CALL USES ABSOLUTE ADDRESSES_^1_%ADD =€€XPCMPL-HERE_^1_%STA* PREAD+1_^1_%LDA HERE_^1_%ADD =XBLOCK-HERE_^1_%EOR- ONEBIT+15_^1_%STA* BLKADR_^1_%RTJ- (AMONI)_%READ TEST FROM DISK_^1PREAD ADC 4*FRC+5*FRP+5*FCP_^1_%NUM 0,0,$8C2_^1BUFSIZ NUM 0_^1BLKADR NUM 0_^1_%JMP- (ADISP)_^1PCMPL SQP START3-*-1_^1_%RTJ* DKERR_^1_%LDA* BLKADR_^1_%STA* BLKREL_^1_%RTJ- (AMONI)_%RELEASE CORE FOR TEST NOT READ IN_^1_%ADC 12*FRC_^1BLKRE€€L NUM 0_^1_%JMP SYS3_^1START3 LDQ* STKPTR_'ENTER TEST ON PGM STACK_^1_%LDA CNTA_^1_%AND- LPMSK+8_^1_%ADD- ONEBIT+13_^1_%STA STACK,Q_^1_%INQ +1_^1_%LDA CNTB_^1_%STA STACK,Q_^1_%INQ +1_^1_%LDA* PGMLOC_^1_%STA STACK,Q_^1_%ENQ +6_^1_%STQ- I_^1_%CLR Q_^1START4 LDA ADRTAB,Q_$SET UP JUMP ADDRESSES IN TEST_^1_%STA* (PGMLOC),B_^1_%INQ -6_^1_%SQZ START5-*-1_^1_%INQ +7_^1_%JMP*€€ START4_^1START5 LDA* PGMLOC_^1_%INA +13_^1_%STA* PGMADR_^1_%RTJ- (AMONI)_%SCHEDULE PROGRAM_^1_%ADC 9*FRC+4*FCP_^1PGMADR NUM 0_^1_%JMP* GODISP_^1BLOCK NUM 0,0,0_^1STKPTR NUM 0_^1_%EJT_]_^1*****************************************************************M******_^1*_]_'*_^1*_+THESE CONTROL WORDS SET BITS IN TEST FLAG WORD_+*_^1*_]_'*_^1*******************************************€€*****************************_^1_%SPC 2_^1*_]_^1*_$THIS ROUTINE EXECUTED FOR PARAM CONTROL WORD_^1*_]_^1PARAM ENA $41_^1_%TCA Q_^1_%JMP* SETFLG_^1*_]_^1*_$THIS ROUTINE EXECUTED FOR PRTSET CONTROL WORD_^1*_]_^1PRTSET CLR A_^1_%LDQ- ZROBIT+7_^1_%JMP* SETFLG_^1*_]_^1*_$THIS ROUTINE EXECUTED FOR PRTSTP CONTROL WORD_^1*_]_^1PRTSTP LDA- ONEBIT+7_^1_%TCA Q_^1_%JMP* SETFLG_^1*_]_^1*_€€$THIS ROUTINE EXECUTED FOR STOP CONTROL WORD_^1*_]_^1STOP_!ENA 1_^1_%TCA Q_^1_%JMP* SETFLG_^1*_]_^1*_$THIS ROUTINE SETS FLAG BITS IN A PROGRAM IF SCHEDULED_^1*_]_^1SETFLG STA* CTLFLG_^1_%STQ* CTLMSK_^1_%RTJ CNT1_)GET NAME OF TEST_^1_%RTJ CKSTK_(CHECK IF TEST ALREADY SCHEDULED_^1_%NUM 0_^1_%JMP* SET1_^1_%RTJ MSGOUT_'ERROR PROGRAM NOT SCHEDULED_^1_%ADC MSG7E-MSG7B_^1_%ADC MSG€€7B-MSGREF_^1_%JMP SYS3_^1SET1_!INQ +2_^1_%LDQ STACK,Q_%GET ADDRESS OF FLAG WORD_^1_%INQ +5_^1_%LDA- (ZERO),Q_$MAKE CHANGES TO FLAG WORD_^1_%AND* CTLMSK_^1_%EOR* CTLFLG_^1_%STA- (ZERO),Q_^1CLEAR ENQ 0_^1_%RTJ* STKZRO_'ARE THERE ANY TESTS EXECUTING_^1_%JMP* EXIT2_(NO TESTS RUNNING, GO TO EXIT ROUTINE_^1GODISP CLR A_^1_%STA ACTIVE_'CLEAR BUSY FLAG_^1_%JMP- (ADISP)_^1*_]_^1CTLF€€LG NUM 0_^1CTLMSK NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5EXIT CONTROL WORD ROUTINE_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1EXIT_!CLR Q_^1_%RTJ* STKZRO_'ARE THRE ANY TESTS RUNNING_^1_%JMP* EXIT2_^1EXIT1 INQ +3_^1_%STQ* CTLFLG_^1_%INQ -1_^1_%LDQ STACK,€€Q_%GET ADDRESS OF EXECUTING TEST_^1_%INQ +5_+LOCATION OF THE TEST FLAG WORD_^1_%LDA- (ZERO),Q_^1_%AND- NZERO+1_^1_%EOR- ONEBIT_'SET STOP FLAG IN EXECUTING TEST_^1_%STA- (ZERO),Q_^1_%LDQ* CTLFLG_^1_%RTJ* STKZRO_'FIND NEXT TEST STILL EXECUTING_^1_%JMP* GODISP_^1_%JMP* EXIT1_^1EXIT2 LDA+ AMONTO_^1_%STA DTOUT_(MM IN MESSAGE_^1_%ENQ $2F_^1_%LDA+ ADAYTO_^1_%LLS 8_^1_%STQ DTOUT+1_%/€€D IN MESSAGE_^1_%ADD =N$2F_^1_%STA DTOUT+2_^1_%LDA+ AYERTO_^1_%STA DTOUT+3_%YY IN MESSAGE_^1_%LDA+ HORMIN_^1_%RTJ ROCDEC_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%RTJ RHXASC_^1_%ADC (TMOUT-*)_^1_%RTJ MSGOUT_^1_%ADC MSG10E-MSG10B_^1_%ADC MSG10B-MSGREF_^1_%CLR A_^1_%STA SCMMLC_^1_%RTJ- (AMONI)_%RELEASE CORE ALLOCATED TO RTMS_^1PARAMX ADC 12*FRC+FX+FCP_^1_%ADC (SYSCHK-PARAMX)_€€^1*_]_^1*_$ROUTINE CHECKS FOR ALL ZEROS IN PROGRAM STACK. IF IT FINDS_^1*_$A PROGRAM ON THE STACK, THE RETURN IS TO THE RETURN ADDRESS_^1*_$PLUS ONE. Q REGISTER ON ENTRY IS THE STARTING INDEX OF THE_^1*_$PROGRAM STACK_^1*_]_^1STKZRO 0_"0_^1_%LDA* STKZRO_^1_%STA- I_,SAVE RETURN ADDRESS IN 'I' REGISTER_^1STK1_!LDA STACK,Q_^1_%SAM STK3-*-1_$END OF PROGRAM STACK_^1_%SAN STK2-*-1_$FO€€UND A PROGRAM_^1_%INQ +3_^1_%JMP* STK1_^1STK2_!RAO- I_,INCREMENT RETURN ADDRESS_^1STK3_!JMP- (ZERO),I_$RETURN_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5INDEX CONTROL WORD ROUTINE_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INDEX ENQ +3_+RESET BUFFER OF FETCH ROUTINE_€€^1_%SET A_^1INDEX1 STA BUFF,Q_^1_%SQZ INDEX2-*-1_^1_%INQ -1_^1_%JMP* INDEX1_^1INDEX2 LDA- 0_,SET PRINTOUT TO STD LIST DEVICE_^1_%ADC FM+2*FA+LSTDEV_^1_%STA SETMSG_^1_%RTJ MSGOUT_'PRINT HEADER_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG11B-MSGREF_^1_%LDA- PRGLIB_'GET SECTOR NO. OF 1ST SECTOR OF PROG. LIBRARY_^1FETCH1 RTJ GET_*GO GET A SECTOR OF PROGRAM ID_^1_%ENQ 85_^1FETCH2 LDA B€€UFF,Q_'SEARCH_^1_%SUB SC_,SECTOR_^1_%SAZ FETCH3_)FOR_^1_%JMP* INDX8A_*PROGRAMS_^1FETCH3 LDA BUFF+1,Q_)THAT_^1_%AND- NZERO+8_+BEGIN_^1_%SUB M_^1_%SAZ FETCH4_.SCM_^1_%JMP* INDX8A_^1FETCH4 LDA BUFF+3,Q_$CHECK IF_^1_%SAM FETCH5_(PROGRAM IS A FILE_^1_%JMP* INDX8A_'NO_^1FETCH5 LDA BUFF+4,Q_$YES - STORE PROG. SECTOR NO._^1_%STA* SECT_*IN FREAD REQUEST_^1_%STQ* QSAVE_(SAVE INDEX TO€€ PROG. ID_^1_%RTJ- (AMONI)_%FREAD_^1REQ1_!NUM $955_*REQUEST_^1_%ADC COMPL1-REQ1_#TO_^1_%NUM 0_/READ_^1_%NUM $8C2_-1ST_^1_%NUM 5_15 WORDS_^1_%ADC BUF-REQ1_+OF THE_^1_%NUM 0_3TEST_^1SECT_!NUM 0_^1_%JMP- (ADISP)_^1*_]_^1BUF_"BZS BUF(5)_^1*_]_^1QSAVE NUM 0_^1*_]_^1TS_#NUM $5453_^1T_$NUM $5400_^1*_]_^1_%SPC 3_^1COMPL1 LDQ* QSAVE_^1_%LDA* BUF_*CHECK_^1_%SUB* TS_,IF 1ST_^1_%€€SAZ FETCH6_)3 WORDS_^1_%JMP* INDEX8_*OF PROGRAM_^1FETCH6 LDA BUFF+1,Q_)PROGRAM_^1_%AND- LPMSK+8_+MATCH_^1_%ADD* T_2PROGRAM_^1_%SUB* BUF+1_/ID_^1_%SAZ FETCH7_^1_%JMP* INDEX8_^1FETCH7 LDA* BUF+2_^1_%SUB BUFF+2,Q_^1_%SAZ INDEX4_^1_%JMP* INDEX8_^1_%SAZ INDEX4_^1_%JMP* INDEX8_'NO_^1INDEX4 ENQ 2_,PICK UP FULL NAME OF TEST ROUTINE_^1_%LDA* BUF,Q_^1_%STA MSG12B,Q_^1_%SQZ INDEX5-*-€€1_^1_%INQ -1_^1_%JMP* INDEX4+1_^1INDEX5 LDA* SECT_)GET SECTOR ADDRESS_^1_%RTJ RHXASC_^1_%ADC (SECTOR-*)_^1_%LDA* BUF+3_(PICK UP LENGTH OF TEST_^1_%RTJ RHXASC_^1_%ADC (SIZE-*)_^1_%LDA* BUF+1_(CHK IF TEST PRESENTLY IN CORE_^1_%AND- LPMSK+8_^1_%ADD- ONEBIT+13_^1_%LDQ* BUF+2_^1_%RTJ CKSTK_^1_%NUM 0_^1_%JMP* INDEX6_^1_%CLR A_^1_%JMP* INDEX7_^1INDEX6 INQ +2_^1_%LDA STACK,Q_^1IN€€DEX7 RTJ RHXASC_^1_%ADC (CORLOC-*)_^1_%LDA BUF+4_(CONVERT_^1_%CLR Q_^1_%LLS 4_.PSR_^1_%ADQ* H30_^1_%QLS 4_0NUMBER_^1_%QLS 4_^1_%LLS 4_2TO_^1_]_^1_%ADQ* H30_^1_%STQ PSRL_1ASCII_^1_%CLR Q_^1_%LLS 4_^1_%ADQ* H30_^1_%QLS 4_^1_%LLS 4_^1_%ADQ* H30_^1_%STQ PSRL+1_^1_%RTJ MSGOUT_'OUTPUT TEST INFORMATION_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG12B-MSGREF_^1INDEX8 LDQ* QSAVE_(BUMP €€PROGRAM_^1INDX8A INQ -5_,ID INDEX_^1_%SQM INDEX9_'FINISHED SEARCHING THIS SECTOR OF PROG. IDS_^1_%JMP* FETCH2_'NO_^1INDEX9 LDA BUFF+95_%YES - GET SECTOR NO._^1_%INA 0_-OF NEXT BLOCK OF IDS_^1_%SAZ INDEXA_'END OF PROGRAM LIBRARY DIRECTOR_^1_%JMP* FETCH1_'NO_^1INDEXA LDA- 0_,YES - SET UP_^1_%ADC FM+2*FA+OUTCOM TO PRINT_^1_%STA SETMSG_*CONTRL, TEST ID_^1_%JMP SYS3_-MSG._^1*_]€€_^1H30_"NUM $30_^1*_]_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5INTERNAL MONITOR ROUTINES_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1RDASC 0_"0_,LOAD A-REG. WITH_^1_%LDA* STEP1_*SUCCESSIVE ASCII_^1_%AND- ONEBIT_)CHARACTERS FROM_^1_%SAZ RDASC2-*-1_$CONTROL_^1_%LDQ* S€€TEP2_^1_%LDA* INBUFF,Q_'WORD_^1_%AND- LPMSK+8_(BUFFER._^1_%RAO* STEP1_^1_%RAO* STEP2_^1_%LDQ* STEP2_^1_%INQ -15_^1_%SQM RDASC1-*-1_^1_%JMP SYS3_^1RDASC1 JMP* (RDASC)_^1RDASC2 LDQ* STEP2_^1_%LDA* INBUFF,Q_^1_%ALS 8_^1_%AND- LPMSK+8_^1_%RAO* STEP1_^1_%JMP* (RDASC)_^1STEP1 NUM 0_^1STEP2 NUM 0_^1_%SPC 2_^1INFO_!0_"0_^1_%CLR A_,CLEAR FLAGS_^1_%STA* STEP1_^1_%STA* STEP2_^1_%SET€€ A_,BACKGROUND BUFFER WUTH ONES_^1_%ENQ 14_^1ZRO_"STA* INBUFF,Q_^1_%INQ -1_^1_%SQM ZRO1-*-1_^1_%JMP* ZRO_^1ZRO1_!RTJ- (AMONI)_%INPUT TEST INFO. BY_^1REF2_!ADC 4*FRC+FX+5*FCP+5*FRP_"MONITOR REQUEST._^1_%ADC COMP2-REF2_^1_%ADC 0_^1_%ADC FM+2*FA+INCOM_^1_%NUM 15_^1_%ADC INBUFF-REF2_^1_%JMP- (ADISP)_^1_%BZS INBUFF(15)_^1COMP2 SQM 1_^1_%JMP* (INFO)_^1_%JMP CLEAR_(TTY ERROR€€ FOUND GO TO EXIT CHECK_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_3COMMON ROUTINES USED BY TESTS_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_]_^1*_$MESSAGE INPUT SUBROUTINES_^1*_*FUNCTION OF THE PROGRAMS..._^1*_]_^1*_*INFOIN-- INPUTS A MAXIMUM OF 40 CHARS._^1*_,ON INPU€€T COMMENT MEDIUM TO INTERNAL_^1*_,TABLE._^1*_*GETFLD-- RETURNS SUCCESSIVE 4 HEX DIGIT_^1*_,FIELDS FROM TABLE. A FIELD IS DEFINED_^1*_,BY A COMMA, SLASH, OR CARRIAGE RETURN._^1*_,THE LAST 4 HEX DIGITS INPUT ARE RETURNED_^1*_,IN A-REG. Q-REG. CONTAINS NUMBER OF_^1*_,FIELD RETURNED IN A-REG._^1*_]_^1INFOIN 0_"0_^1_%SQN NOCR-*-1_^1_%RTJ MSGOUT_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG13B-€€MSGREF_^1NOCR_!CLR A_,CLEAR FLAGS_^1_%STA* STEP1X_^1_%STA* STEP2X_^1_%STA* NUMFLD_^1_%SET A_,BACKGROUND BUFFER WUTH ONES_^1_%ENQ 19_^1ZROX_!STA* INBUFX,Q_^1_%INQ -1_^1_%SQM ZRO1X-*-1_^1_%JMP* ZROX_^1ZRO1X RTJ- (AMONI)_%INPUT TEST INFO. BY_^1REF2X ADC 4*FRC+FX+4*FCP+4*FRP_^1_%ADC COMP2X-REF2X_^1_%ADC 0_^1_%ADC FM+2*FA+INCOM_^1_%NUM 20_^1_%ADC INBUFX-REF2X_^1_%JMP- (ADIS€€P)_^1_%BZS INBUFX(20)_^1COMP2X JMP* (INFOIN)_^1*_]_^1GETFLD 0_"0_^1_%CLR A_,ZERO NUM_^1_%STA* NUM_^1DEC1_!JMP* RDASCX_'GET A CHAR IN A-REG._^1_%STA* CHARX_+AND SAVE._^1_%SUB* ASCZRO_'CK FOR HEX NUMBER._^1_%SAP DC1-*-1_^1_%JMP* RNFEOF_'CHAR IS NOT A HEX NUMBER_^1DC1_"TRA Q_^1_%INA -23_*23 ENTRIES IN ASCII TABLE._^1_%SAM DC2-*-1_^1_%JMP* RNFEOF_'CHAR IS NOT A HEX NUMBER._^1DC2_€€"LDA* ASCTAB,Q_^1_%SAP DC3-*-1_^1_%JMP* RNFEOF_'ILLEGAL CODES ARE NEGATIVE._^1DC3_"LDQ* NUM_*GET PREVIOUSLY DECODED CHAR_^1_%ALS 12_+LEFT JUSTIFY_^1_%LLS 4_.AND_^1_%STQ* NUM_,STORE._^1_%JMP* DEC1_)REPEAT DECODE._^1RNFEOF LDA* CHARX_^1_%TRA Q_^1_%INA -RUBOUT_%CHECK FOR RUBOUT CHARACTER_^1_%SAN DC3A_^1_%ENQ -1_+SET Q NEGATIVE AND RETURN_^1_%JMP* (GETFLD)_^1DC3A_!INA -SLASH+RU€€BOUT CHECK FOR A SLASH_^1_%SAZ DC4-*-1_^1_%INA -COMMA+SLASH CHECK FOR A COMMA_^1_%SAZ DC4-*-1_^1_%QLS 8_,CHECK FOR A CARRIAGE RETURN_^1_%SQM DC4-*-1_^1_%JMP* DEC1_)IGNORE NON CONTROL CHAR._^1DC4_"RAO* NUMFLD_^1_%LDA* NUM_^1_%LDQ* NUMFLD_^1_%JMP* (GETFLD)_^1NUM_"NUM 0_^1CHARX NUM 0_^1STEP1X NUM 0_^1STEP2X NUM 0_^1NUMFLD 0_"0_^1ASCZRO NUM $30_^1ASCTAB NUM 0,1,2,3,4,5,6,7€€,8,9,-1,-1,-1,-1,-1,-1,-1_^1_%NUM 10,11,12,13,14,15_^1*_]_^1*_8LOAD A-REG. WITH_^1RDASCX LDA* STEP1X_)SUCCESSIVE ASCII_^1_%AND- ONEBIT_)CHARACTERS FROM_^1_%SAZ RDAS2-*-1_'CONTROL_^1_%LDQ* STEP2X_^1_%LDA* INBUFX,Q_(WORD._^1_%AND- LPMSK+8_(BUFFER._^1_%RAO* STEP1X_^1_%RAO* STEP2X_^1_%LDQ* STEP2X_'CK FOR END_^1_%INQ -20_,OF BUFFER._^1_%SQM RDAS1-*-1_^1_%ENA $2F_*END OF BUFFER CHAR€€ = SLASH_^1RDAS1 JMP* DEC1+1_^1RDAS2 LDQ* STEP2X_^1_%LDA* INBUFX,Q_^1_%ALS 8_^1_%AND- LPMSK+8_^1_%RAO* STEP1X_^1_%JMP* DEC1+1_^1_%EJT_]_^1*_]_^1*_$HEXIDECIMAL TO ASC II CONVERSION_^1*_]_^1*_$THE USER SENDS THE WORD CONTAINING THE HEX CHARACTERS_^1*_$TO BE CONVERTED IN THE A REGISTER. THE A REGISTER WILL_^1*_$COME BACK ZERO AND THE CONVERTED CHARACTERS IN THE BUF. SPECIFIED_^1*_]€€_^1RHXASC 0_"0_^1_%IIN 0_^1_%RTJ- (AVOLA)_%REQUEST VOLATILE STORAGE_^1_%NUM 8_^1_%LDQ* RHXASC_^1_%STQ- VR,I_)RETURN ADDRESS_^1_%STQ- VPARA,I_%POINTER TO PARAMETER_^1_%EIN 0_,ENABLE INTERRUPTS_^1_%LDA- (ZERO),Q_^1_%SAP A1-*-1_^1_%ADD- VR,I_^1_%AND- LPMSK+15_^1A1_#STA- VPARA,I_%NEW POINTER_^1_%RAO- VR,I_)UPDATE RETURN ADDRESS_^1_%CLR A_^1_%STA- VCHSAV,I_^1_%ENQ 1_^1A3_#STQ- VCN€€T,I_^1A7_#CLR Q_^1_%LDA- VRA,I_(HEX CHARACTERS TO BE CONVERTED_^1_%LLS 4_,SELECT ONE CHARACTER_^1_%STA- VRA,I_(SAVE REMAINING CHARACTERS_^1_%TRQ A_^1_%INA -$A_^1_%SAP A4-*-1_'NUMBER OR LETTER_^1_%INA $3A-$41_%NUMBER_^1A4_#INA $41_*ALPHA_^1_%LDQ- VCHSAV,I_^1_%SQN A6-*-1_^1_%ALS 8_^1_%STA- VCHSAV,I_^1_%JMP* A7_^1A6_#EAQ A_^1_%LDQ- VPARA,I_^1_%STA- (ZERO),Q_^1_%RAO- VPARA,I_€€%UPDATE POINTER_^1_%LDQ- VCNT,I_^1_%SQZ A5-*-1_'FINISHED_^1_%INQ -1_+NO,GET NEXT HEX NUMBER_^1_%STQ- VCHSAV,I_^1_%JMP* A3_^1A5_#IIN 0_,INHIBIT INTERRUPT_^1_%LDA- VR,I_)GET RETURN ADDRESS_^1_%STA* RHXASC_^1_%RTJ- (AVOLR)_%RELEASE VOLATILE_^1_%EIN 0_,ENABLE INTERRUPT_^1_%JMP* (RHXASC)_$RETURN_^1*_]_^1*_*1700 BINARY TO DECIMAL CONVERSION SUBROUTINE, SPEC. NO._^1*_F38841500_^1*_]_^€€1*_*FUNCTION OF THE PROGRAM. THIS PROGRAM CONVERTS BINARY VALUES_^1*_*TO DECIMAL VALUES. CALLING SEQUENCE FOR THIS PROGRAM_^1*_*IS AS FOLLOWS. THE NUMBER TO BE CONVERTED IS IN A_^1*_$RTJ ROCDEC_^1*_$0_"0_:DATA STORAGE FOR SUBROUTINE_^1*_$0_"0_:DATA STORAGE FOR SUBROUTINE_^1*_$0_"0_:DATA STORAGE FOR SUBROUTINE_^1*_]_^1*_*EQUAL CARDS REQUIRED BY THIS PROGRAM FOLLOW_^1*_]_^1_%EQU €€TEN($46)_^1*_]_^1ROCDEC 0_"0_^1_%IIN 0_:INHIBIT INTERRUPTS_^1_%EIN 0_:WHILE SETTING UP THE_^1_%LDQ* ROCDEC_5SCRATCH PAD_^1_%STQ- I_^1_%LDQ* INUSMA+1_^1_%STQ- 2,I_8SET THE VARIABLE SHIFT_^1_%SAP AOCDEC-*-1_1IF MINUS_^1_%LDQ* INUSMA_5COMPLEMENT THE_^1_%TCA A_:NUMBER_^1_%JMP* BOCDEC_5AND SET_^1AOCDEC CLR Q_:THE MINUS_^1BOCDEC STQ- 1,I_8SIGN_^1_%CLR Q_:CLEAR Q_^1_%STQ- (I)_8AND S€€ET (I)_^1COCDEC DVI- TEN_8DIVIDE BY TEN_^1_%SAZ EOCDEC-*-1_1ZERO MEANS ALL THRU_^1_%ADQ- (I)_8ADD PREVIOUS TO PRESENT_^1_%QLS 12_9SHIFT IT AROUND_^1_%STQ- (I)_8RESTORE IT_^1_%ENQ -4_9DECREMENT_^1_%ADQ- 2,I_8THE_^1_%STQ- 2,I_8VARIABLE_^1_%CLR Q_:SHIFT_^1_%JMP* COCDEC_5LOOP BACK_^1EOCDEC LDA- 2,I_8PICK UP THE VARIABLE SHIFT_^1_%IIN 0_:INHIBIT INTERRUPTS_^1_%STA* ZOCDEC_5SET THE €€VARIABLE SHIFT_^1_%LDA- (I)_8PICK UP THE REST_^1_%EIN 0_:ENABLE INTERRUPTS_^1ZOCDEC 0_"0_:SHIFT IT ALL_^1_%ADQ- 1,I_8SET THE SIGN_^1_%JMP- 3,I_8RETURN TO SENDER_^1INUSMA NUM $00D0_6MINUS SIGN_^1_%LRS 16_9VARIABLE SHIFT STARTER_^1****_]_^1*_]_^1*_$THIS ROUTINE CLEARS A PROGRAM FROM THE STACK. IT IS CALLED_^1*_$BY THE TEST ROUTINE BEFORE RELEASING CORE_^1*_]_^1CLRSTK 0_"0_^1_%IIN €€ 0_^1_%RTJ- (AVOLA)_%REQUEST STORAGE_^1_%NUM 8_^1_%LDQ* CLRSTK_^1_%STQ- VR,I_^1_%EIN 0_^1_%LDQ- (ZERO),I_^1_%AND- LPMSK+8_^1_%ADD- ONEBIT+13_^1_%RAO ACTIVE_'INHIBIT ENTRY TO MONITOR_^1_%RTJ CKSTK_(FIND LOCATION OF TEST NAME IN PGM STACK_^1_%NUM 0_^1_%JMP* CLR1_^1_%JMP* CLR2_)NAME NOT FOUND_^1CLR1_!CLR A_^1_%STA STACK,Q_^1_%INQ +1_^1_%STA STACK,Q_^1_%INQ +1_^1_%STA STACK,€€Q_^1CLR2_!LDQ- VR,I_^1_%LDA- (ZERO),Q_$CALCULATE BEGINNING ADDRESS OF TEST ROUTINE_^1_%AAQ A_^1_%STA* CLR3_^1_%RTJ- (AMONI)_%RELEASE CORE AREA OF TEST_^1_%ADC 12*FRC_^1CLR3_!NUM 0_^1_%IIN 0_^1_%RTJ- (AVOLR)_^1_%LDA ACTIVE_^1_%INA -1_^1_%STA ACTIVE_^1_%SAZ CLR4-*-1_^1_%EIN 0_^1_%JMP- (ADISP)_^1CLR4_!EIN 0_^1_%ENQ 0_^1_%RTJ STKZRO_^1_%JMP* CLR5_^1_%JMP- (ADISP)_^1CLR5_!JM€€P EXIT2_(NO TESTS EXECUTING GO TO EXIT ROUTINE_^1*_]_^1*_$DECIMAL TO HEX CONVERSION ROUTINE_^1*_]_^1RDECHX 0_"0_^1_%IIN 0_^1_%RTJ- (AVOLA)_%REQUEST STORAGE_^1_%NUM 8_^1_%LDQ* RDECHX_^1_%STQ- VR,I_^1_%EIN 0_^1_%TRA Q_^1_%CLR A_^1_%LLS 4_^1_%STQ- VTEMP,I_^1_%ENQ +3_^1DECHX1 STQ- VCNT,I_^1_%CLR Q_^1_%MUI- TEN_^1_%STA- VPARA,I_^1_%CLR A_^1_%LDQ- VTEMP,I_^1_%LLS 4_^1_%STQ- VT€€EMP,I_^1_%ADD- VPARA,I_^1_%LDQ- VCNT,I_^1_%INQ -1_^1_%SQZ 1_^1_%JMP* DECHX1_^1_%STA- VRA,I_^1_%IIN 0_^1_%LDA- VR,I_^1_%STA* RDECHX_^1_%RTJ- (AVOLR)_^1_%EIN 0_^1_%JMP* (RDECHX)_^1*_]_^1*_$THE FOLLOWING ROUTINE IS USED BY ALL TESTS FOR OUTPUTTING_^1*_$MESSAGES. THE MESSAGE CAN BE IN SEVERAL PARTS, SEE SAMPLE_^1*_$CALL. A FORMATTED WRITE REQUEST, SCHEDULE REQUEST TO_^1*_$CONTINUE €€THE TEST, RELEASE REQUEST AND ALL MESSAGE PARTS_^1*_$ARE MOVED TO ALLOCATABLE CORE. THE ADDRESS OF THIS ROUTINE_^1*_$IS PATCHED INTO THE ELEVENTH WORD OF EACH TEST WHEN LOADED_^1*_$INTO CORE. THE ROUTINE IS CALLED BY THE TESTS AS FOLLOWS:_^1*_]_^1*_,RTJ (MESAGE)_^1*_$REF_"ADC CTLWRD_((CONTROL WORD SEE BELOW)_^1*_,ADC PART1B-REF_^1*_,ADC PART1E-PART1B_^1*_,ADC PART2B-REF_^1*_,A€€DC PART2E-PART2B_^1*_-._$._$._^1*_-._$._$._^1*_-._$._$._^1*_,ADC PARTNB-REF_^1*_,ADC PARTNE-PARTNB_^1*_]_^1*_$WHERE THE CONTROL WORD IS DEFINED AS FOLLOWS:_^1*_]_^1*_*BITS 00 - 03 COMPLETION PRIORITY_^1*_*BITS 04 - 07 REQUEST PRIORITY_^1*_*BITS 08 - 11 NUMBER OF MESSAGE PARTS_^1*_*BITS 12 - 14 NOT USED_^1*_*BIT 15 = 0_!REQUEST FOR STD LIST DEVICE_^1*_*BIT 15 = 1_!REQUEST F€€OR STD COMMENT DEVICE_^1*_]_^1MESAGE 0_"0_^1_%IIN 0_^1_%LDQ* MESAGE_'GET PARAMETER LOCATION_^1_%EIN 0_^1_%RTJ- (AMONI)_%SCHEDULE UP TO LEVEL 5_^1_%ADC 9*FRC+FX+5*FCP_^1_%NUM 3_^1_%JMP- (ADISP)_^1_%STQ* POINTR_^1_%LDA* (POINTR)_^1_%AND =N$F00_'GET NUMBER OF MSG PARTS_^1_%ARS 7_^1_%TRA Q_^1_%STA* COUNT_^1_%CLR A_^1_%STA* MSGSIZ_^1FNDSIZ LDA* (POINTR),Q_"CALCULATE LENGTH OF ME€€SSAGE_^1_%ADD* MSGSIZ_^1_%STA* MSGSIZ_^1_%INQ -2_^1_%SQZ GOTSIZ-*-1_^1_%JMP* FNDSIZ_^1GOTSIZ INA +14_*CALCULATE TOTAL CORE REQUIRED_^1_%STA* SIZCOR_^1AGAIN RTJ- (AMONI)_%REQUEST REQUIRED CORE_^1CORREF ADC 10*FRC+FX+5*FRP+5*FCP_^1_%ADC CCOMPL-CORREF_^1_%NUM 0_^1LOCCOR NUM 0_^1SIZCOR NUM 0_^1_%JMP- (ADISP)_^1CCOMPL SQP GOTCOR-*-1_^1_%JMP* AGAIN_^1GOTCOR LDA* (POINTR)_$GET R€€EQUEST AND COMPLETION PRIORITIES_^1_%AND- LPMSK+8_^1_%ADD- 0_^1_%ADC 6*FRC+FX_^1_%STA* MSGREQ_$WRITE REQUEST WORD_^1_%AND- LPMSK+4_^1_%ADD- 0_^1_%ADC 9*FRC_^1_%STA* SCHRTN_'SCHEDULE REQUEST WORD_^1_%STA* SCHMSG_^1_%LDA* POINTR_^1_%ADD* COUNT_^1_%INA +1_^1_%STA* RTNADD_'TEST RETURN ADDRESS_^1_%LDQ* (POINTR)_^1_%LDA- 0_^1_%ADC FM+2*FA+LSTDEV_^1_%SQP 1_,CK FOR COMMENT DEVICE REQU€€ESTED_^1_%INA +1_^1_%STA* MSGLU_^1_%LDA* LOCCOR_^1_%STA* AINDEX_^1_%CLR Q_^1LDPGM LDA* REQEST,Q_$MOVE PROGRAM TO ALLOCATABLE CORE_^1_%STA* (AINDEX)_^1_%RAO* AINDEX_^1_%INQ -13_^1_%SQZ GETMSG-*-1_^1_%INQ +14_^1_%JMP* LDPGM_^1GETMSG CLR A_^1_%STA* INCRE_^1MOVMSG RAO* INCRE_(MOVE ALL MSG PARTS TO ALLOCATABLE CORE_^1_%LDQ* POINTR_^1_%ADQ* INCRE_^1_%LDA- (ZERO),Q_^1_%ADD* POINTR_€€^1_%STA- I_,STARTING ADDRESS OF MESSAGE PART_^1_%RAO* INCRE_^1_%INQ +1_^1_%LDA- (ZERO),Q_$GET LENGTH OF MESSAGE PART_^1_%SAZ CKEND-*-1_#LENGTH OF MESSAGE PART = ZERO_^1_%STA* BINDEX_^1_%CLR Q_^1LDMSG LDA- (ZERO),B_^1_%STA* (AINDEX)_^1_%RAO* AINDEX_^1_%INQ +1_^1_%TRQ A_^1_%SUB* BINDEX_^1_%SAZ CKEND-*-1_^1_%JMP* LDMSG_^1CKEND LDA* INCRE_(CK FOR ALL MSG PARTS MOVED_^1_%SUB* CO€€UNT_^1_%SAZ SCHPGM-*-1_^1_%JMP* MOVMSG_^1SCHPGM LDA* LOCCOR_^1_%STA* SCHLOC_^1_%RTJ- (AMONI)_%SCHEDULE PROGRAM IN ALLOCATABLE CORE_^1SCHMSG ADC 0_^1SCHLOC NUM 0_^1_%JMP- (ADISP)_^1*_]_^1POINTR NUM 0_^1COUNT NUM 0_^1AINDEX NUM 0_^1BINDEX NUM 0_^1INCRE NUM 0_^1*_]_^1*_$THIS CODING IS MOVED TO ALLOCATABLE CORE FOR EACH MSG OUTPUT_^1*_]_^1REQEST RTJ- (AMONI)_%FORMAT WRITE REQ€€UEST_^1MSGREQ ADC 0_^1_%ADC MSGCPL-MSGREQ_^1_%ADC 0_^1MSGLU ADC 0_^1MSGSIZ ADC 0_^1_%ADC MSGSTR-MSGREQ_^1_%JMP- (ADISP)_^1MSGCPL RTJ- (AMONI)_%RESCHEDULE TEST_^1SCHRTN ADC 0_^1RTNADD NUM 0_^1_%RTJ- (AMONI)_%RELEASE ALLOCATABLE CORE_^1RELREQ ADC 12*FRC+FX+FCP_^1_%ADC (REQEST-RELREQ)_^1_%EQU MSGSTR(*)_^1_%SPC 2_^1**********************************************************€€**************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,SCMM IN $_^1_%NUM $D00_^1DTIN_!NUM 0,0,0,0,$2020_^1TMIN_!NUM 0,0_^1_%EQU MSG1E(*)_^1MSG2B ALF $,CONTROL, TEST ID$_^1_%NUM $D00_^1_%EQU MSG2E(*)_^1MSG3B ALF 9,PROGRAM SCHEDULED_^1_%EQU MSG3E(*)_^1MSG4B ALF 13,LIBR€€ARY ADDRESS NOT LINKED_^1_%EQU MSG4E(*)_^1MSG5B ALF $,CONTROL ERROR$_^1_%EQU MSG5E(*)_^1MSG6B ALF 7,NOT IN LIBRARY_^1_%EQU MSG6E(*)_^1MSG7B ALF 11,PROGRAM NOT SCHEDULED_^1_%EQU MSG7E(*)_^1MSG8B ALF 5,DISK ERROR_^1_%EQU MSG8E(*)_^1MSG9B ALF 7,PGM STACK FULL_^1_%EQU MSG9E(*)_^1MSG10B ALF $,SCMM OUT $_^1_%NUM $D00_^1DTOUT NUM 0,0,0,0,$2020_^1TMOUT NUM 0,0_^1_%EQU€€ MSG10E(*)_^1MSG11B ALF $,TEST_"SECTOR LENGTH CORE ADD PSR LEVEL$_^1_%EQU MSG11E(*)_^1MSG12B NUM 0,0,0_^1_%ALF 2,_^1SECTOR NUM 0,0_^1_%ALF 2,_^1SIZE_!NUM 0,0_^1_%ALF 2,_^1CORLOC NUM 0,0_^1_%ALF 2,_^1PSRL_!NUM 0_^1_%NUM 0_^1_%EQU MSG12E(*)_^1MSG13B NUM $FFFF_(THIS JUST CAUSES AN UPSPACE_^1_%EQU MSG13E(*)_^1MSG14B ALF $,SPACE ALLOCATION ERROR$_^1_%EQU MSG14E(*)_^€41STACK BZS STACK($30)_^1_%NUM $FFFF_^1_%END_]_^__4PSCMPRT CSY/ E11 P€1_%NAM SCMPRT_'DECK-ID E15 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_$1740/501 - 1742 - 1742/30 - 1742/120 ON-LINE DIAGOSTIC_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 RELOCA€€TABLE_^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 MS€€OS 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 PARAME€€TERS. 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_!VARIA€€BLE BUFFER TEST_^1*_*SECTION 2_!RIPPLE 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 THE DRIVER DETECTED AN ERROR (IE._^1*_$'Q' NEGATIVE AT I/€€O COMPLETION) THE TEST WILL USE THE STATUS_^1*_$IN THE PHYSICAL DEVICE TABLE, WORD 12, TO DETERMINE THE ERROR._^1*_$ALL ERRORS EXCEPT ALARM - CONTROLLER READY AND REJECT WILL_^1*_$CAUSE THE TEST TO TERMINATE. AT THE END OF EACH 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. T€€HE STOP FLAG IS ALSO CHECKED AND IF SET, THE TEST_^1*_$IS TERMINATED. IF $8000 IS ENTERED FOR THE NUMBER OF EXECU-_^1*_$TIONS, THE TEST SEQUENCE WILL BE EXECUTED INDEFINITELY._^1*_]_^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*_9T€€EST 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 BI€€T 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_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATIONS REGION_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF $,TSTPRT$_^1_%ADC END-START_^1*_]_^1_%NUM $3739_(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$3800_^1_%SUB =N$2800_%CHECK FOR PRINTER CLASS CODE_^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 FINISH_^1_%TRQ A_^1_%INA -32_^1_%SAN RES2-*-1_^1_%CLR Q_^1RES2_!JMP* RE€€S1_^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 SNU€€M_^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 INCREASE 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_^1TST22 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 NU€€M 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 REQUES€€TED_^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_%IN€€Q -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 HAM€€MER 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_'COUNT 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 TES€€T 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* NUMINC_^1_%JMP* TST61_^1TST62 STA* NUMINC_^1_%ENQ 3_,SET 8 LINES PER INCH_€€^1_%RTJ* TOPAGE_^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 ENQ 4_,RESTORE 6 LINES PER INCH_^1_%RTJ* TOPAGE_^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_%NUM $1B3F_(ESCAPE CODE PLUS SET 8 LINES PER INCH_^1_%NUM $1B40_(ESCAPE CODE PLUS RESTORE 6 LINES PER INCH_^1_%S€€PC 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 1_^1_%JMP END1A_^1_%LDA* (OUTCHR)_^1_%STA* SIZE_^1_%RAO* OUTCHR_^1_%L€€DA* (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 CH€€RBUF(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 NUMBER COUNTER_^1HAM1_!LDA* ISTNUM_^1_%STA* CURNUM_^1H€€AM2_!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_^1C€€URNUM NUM 0_^1ISTNUM NUM $2E2F_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_5CHECK FOR HARDWARE ERRORS_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCHK SQM ERRCK1-*-1_^1RETURN JMP* (OUTCHR)_^1ERRCK1 LDA FLAG_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAZ ERRCK2-*-€€1_^1_%JMP* RETURN_^1ERRCK2 LDQ PHYLOC_^1_%LDA- ESTAT2,Q_$GET HARDWARE STATUS_^1_%STA* STATUS_^1_%LDA- ERCODE,Q_$GET ALTDEV ERROR CODE_^1_%AND- LPMSK+6_^1_%ENQ 4_^1_%SAZ OK-*-1_^1_%INA -3_^1_%SAP OK-*-1_^1_%CLR A_^1_%CLR Q_^1OK_#ALS 2_,MUI BY 4_^1_%STQ* ERRMSG+1_^1_%LDQ =XMSG5B-MES3_^1_%AAQ Q_^1_%STQ* ERRMSG_^1_%ENQ MSG6E-MSG6B_^1_%LDA* STATUS_'CK FOR ALARM STATUS_^1_%AND€€- ONEBIT+5_^1_%SAN ALARM-*-1_^1_%CLR Q_^1ALARM STQ* ALRMSG+1_^1_%LDA* STATUS_'CK FOR READY STATUS_^1_%AND- ONEBIT_^1_%LDQ =XMSG7B-MES3_^1_%SAZ NOTRDY-*-1_^1_%LDQ =XMSG8B-MES3_^1NOTRDY STQ* RDYMSG_^1_%RTJ (MESAGE)_$OUTPUT ERROR MSG_^1MES3_!NUM $8544_^1_%ADC (START-MES3)_^1_%NUM 3_^1_%ADC MSG2B-MES3_^1_%ADC MSG2E-MSG2B_^1ERRMSG ADC 0_^1_%NUM 0_^1ALRMSG ADC MSG6B-MES3_^€€1_%NUM 0_^1RDYMSG ADC 0_^1_%NUM 8_^1_%JMP* RETURN_^1STATUS NUM 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_%L€€DA 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_%LD€€A 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-*)_^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 $,SEC. $_^1SNUM_!NUM 0,$2020_^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(*)_^1MSG5B ALF 4,TIME OUT_^1_%ALF 4,BUFF OV_^1_%ALF 4,INT REJ_^1_%ALF 4,EXT REJ_^1MSG6B ALF 3,ALARM_^1_%EQU MSG6E(*)_^1MSG7B ALF 8,CNTRL NOT READY_^1MSG8B ALF 8,CNTRL READY_^1MSG10B ALF 8,END PRINTER TEST_^1_%EQ€€U MSG10E(*)_^1MSG11B ALF *, DLU ERROR*_^1_%EQU MSG11E(*)_^1MSG12B ALF 6,6 LINES/INCH_^1_%EQU MSG12E(*)_^1MSG13B ALF 6,8 LINES/INCH_^1_%EQU MSG13E(*)_^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,ABCDEF€xGHIJKL_^1_%ALF 6,MNOPQRSTUVWX_^1_%ALF 1,YZ_^1_%NUM $5B5C_^1_%NUM $5D5E_^1_%NUM $5F20_^1_%EQU END(*)_^1_$END_]_^__xPSCM405 CSY/ E04 P€1_%NAM SCM405_'DECK-ID E04 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_$1726/405 CARD READER TEST_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 EXECUTION 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 29, 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 SEQ€€UENCE WILL_^1*_$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_%E€€QU ERCODE(25)_"PHYTAB ALTDEV ERROR CODE STORAGE_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU TEN($46)_$LOCATION CONTAINING TEN_^1_%EQU FRC($200)_#REQUEST WORD 'R€€EQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WORD 'F' BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD 'REQUEST PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LOCATOR_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1_%EXT LOG1_)LINK TO ALTERNATE LOGICAL UNIT TABLE_^1_%EXT DUMALT_'LOGICAL UNIT OF DUMMY DRIVER_^1_%EJT_]_^1***************************************€€*********************************_^1*_]_'*_^1*_7COMMUNICATIONS REGIONS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF $,TST405$_#TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $3739_(PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATIONS WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER - FILLED IN A€€T 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* (MESA€€GE)_$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-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_!LDQ RPLU_^1_%LDA LOG1,Q_^1_%STA* SVLOG1_^1_%LDA =XDUMALT_$SWITCH ALTERNATE DEVICE TO DUMMY_^1_%STA LOG1,Q_^1_%CLR A_^1_%STA REPEAT_^1_%STA ERRCTR_^1_%JMP* B€€EGIN_^1INPERR NUM 0_^1PHYLOC NUM 0_^1SVLOG1 NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_+SECTION 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_%J€€MP* 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_'SET 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 TYPE 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-REF€€1_^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_^1SPCPAT 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 SNUM_)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 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 R€€TJ 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_%ENQ 8_^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_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2HARDWARE STAUS CHECKING ROUTINE_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ESTAT 0_"0_^1_%STA* STATUS_^1_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDA* BITTAB,Q_^1_%EOR- NZERO_(CHECK IF END OF TABLE_^1_%SAN EST2-*-1_^1_%JMP* (ES€€TAT)_^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 MESSAGE_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG34B-MES8_^1_%ADC MSG34E-MSG34B_^1MSGPTR ADC 0_^1_%ADC 0_^1EST6_!RAO* BITPTR_^1_%JMP* EST1_^1BITPTR NUM 0_^1STATUS NUM 0_^1*_]_^1CKFLAG 0_"0_,CK FOR STOP FLAG AND IF MESSAGES ARE INHIBITED_€€^1_%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_%STA* TEMP+2_'SAVE DATA TO BE CONVERTED_^1_%SUB =N$270F_%CHECK IF VALUE .GT. 9999_^1_%SAP HXASC_(YES - JUST CONVERT TO ASCII_^1_%LDA* TEMP+2_'NO - CONVERT_^1_%RTJ (ROCDEC)_+DATA_^1TE€€MP_!NUM 0_3VALUE_^1_%NUM 0_4TO_^1_%NUM 0_5DECIMAL_^1HXASC LDA* TEMP+2_'GET VALUE TO BE CONVERTED TO ASCII_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1_%JMP* (CKFLAG)_^1ERRCTR 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_(NO INTERRUPT_^1_%NUM 4_,CKSUM ERROR_^1_%NUM $8005_(INTERNAL REJECT_^1_%NUM $8006_(EXTERNAL REJECT_^1_%NUM 8_,NO 7-9 PUNCH (HOLLERITH ERROR)_^1_%NUM 10_+NON-NEGATIVE RECORD LENGTH_^1_%NUM $8020_(1706 ADDRESS ERROR_^1_%NUM $FFFF_(END OF TABLE_^1_%SPC 2_^1*_6***_!LEVEL 1 STATUS_!***_€€^1_%SPC 2_^1_%NUM $8001_(NOT READY_^1_%NUM $8002_(BUSY_^1_%NUM $8100_(PRE-READ ERROR_^1_%NUM $8800_(FEED FAIL_^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_!NO INTERRUPT_^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 MSG15B-MES8_!NON-NEGATIVE R€€ECORD LENGTH_^1_%ADC MSG15E-MSG15B_^1_%ADC MSG16B-MES8_!1706 ADDRESS ERROR_^1_%ADC MSG16E-MSG16B_^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 MSG17B-MES8_!PRE-READ ERROR_^1_%ADC MSG17E-MSG17B_^1_%ADC MSG20B-MES8_^1_%ADC MSG20E-MSG20B_^1_%ADC MSG21B-MES8_!STACKER FULL/JAM_^1_%ADC MSG21€€E-MSG21B_^1_%ADC MSG22B-MES8_!INPUT HOPPER EMPTY_^1_%ADC MSG22E-MSG22B_^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_%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* WORD€€2_^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 TS€€T6B-*-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_%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_%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_%AL€€S 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 COLUM€€N 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 NUMBER_^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 DECIMA€€L_^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 MESSAG€€ES 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_^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 REQUE€€STED,COMPLETED_^1ENDCK1 JMP* (ENDCK)_^1*_]_^1ENDMSG LDA* REPEAT_^1_%RTJ (RHXASC)_^1_%STA* TEMP1+2_'SAVE DATA TO BE CONVERTED_^1_%SUB =N$270F_%CHECK IF VALUE .GT. 9999_^1_%SAP HXASC1_'YES - JUST CONVERT TO ASCII_^1_%LDA* TEMP1+2_'NO - CONVERT_^1_%RTJ (ROCDEC)_+DATA_^1TEMP1 NUM 0_3VALUE_^1_%NUM 0_4TO_^1_%NUM 0_5DECIMAL_^1HXASC1 LDA* TEMP1+2_'GET VALUE TO BE CONVERTED TO ASCII€€_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%STA* TEMP2+2_'SAVE DATA TO BE CONVERTED_^1_%SUB =N$270F_%CHECK IF VALUE .GT. 9999_^1_%SAP HXASC2_'YES - JUST CONVERT TO ASCII_^1_%LDA* TEMP2+2_'NO - CONVERT_^1_%RTJ (ROCDEC)_+DATA_^1TEMP2 NUM 0_3VALUE_^1_%NUM 0_4TO_^1_%NUM 0_5DECIMAL_^1HXASC2 LDA* TEMP2+2_'GET VALUE TO BE CONVERTED TO ASCII_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%RT€€J (MESAGE)_$OUTPUT END MESSAGE_^1MES10 NUM $8144_^1_%ADC MSG3B-MES10_^1_%ADC MSG3E-MSG3B_^1_%LDQ RPLU_^1_%LDA SVLOG1_^1_%STA LOG1,Q_'RESTORE ALTERNATE DEVICE_^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 $,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 11,END CARD READER TEST,_^1RUNASC NUM 0,0_^1_%ALF $, CARDS $_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG3E(*)_^1MSG9B ALF 15,SPECIAL PATTERN FOR SECTION 3_^1_%EQU MSG9E(*)_^1MSG10B ALF 6,NO INTERRUPT_^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 9,1706 ADDRESS ERROR_^1_%EQU MSG16E(*)_^1MSG17B ALF 7,PRE-READ ERROR_^1_%EQU MSG17E(*)_^1MSG18B ALF 9,READER NOT READY_^1_%EQU MSG18E(*)_^1MSG19B ALF 6,READER BUSY_^1_%EQU MSG19E(*)_^1MSG20B ALF 5,FEED FAIL_^1_%EQU MSG20E(*)_^1MSG21B€| ALF 8,STACKER FULL/JAM_^1_%EQU MSG21E(*)_^1MSG22B ALF 9,INPUT HOPPER EMPTY_^1_%EQU MSG22E(*)_^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_^__|PSCMTTY CSY/ E02 P€1_%NAM SCMTTY_'DECK-ID E02 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_*ON-LINE TELETYPEWRITER TEST_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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*_$AND 1711/1713 TELETYPEWRITER. IT OPERATES UNDER THE CONTROL_^1*_$OF THE DIAGNOSTIC EXECUTIVE SCMEXC AND USES THE M.S.O.S._^1*_$DRI€€VERS 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. SCMT€€TY 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 DETEC€€TED 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*_$EXECUTED, A PASS COUN€€TER 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 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 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_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATION REGION_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF $,TSTTTY$_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $3739_(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_^1EN€€TER CLR A_^1_%STA* INPERR_^1ENTER1 RTJ* (MESAGE)_$OUTPUT INITIAL MSG_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET 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 TELETYPEWRITE€€R ($31A)_^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 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1INI3_!CLR A_^1_%CLR A_^1_%STA* REPEAT_^1_%JMP* BEGIN_^1*_]_^1*_$TES€€T PARAMETERS_^1*_]_^1LU_#NUM 0_^1TEST_!NUM 0_^1LINES NUM 0_^1PHYLOC NUM 0_^1INPERR NUM 0_^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- ONEBI€€T+1_^1_%SAN TEST1-*-1_^1_%JMP* T2CK_^1TEST1 RTJ SETBUF_'PUT CHARACTER SET IN BUFFER_^1_%RTJ* DOIO_)OUTPUT CHARACTER BUFFER_^1_%RTJ* ENDTST_^1_%JMP* TEST1_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7SECTION 2_!ECHO TEST_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!€€LDA* TEST_)CK IF TEST 2 REQUESTED_^1_%AND- ONEBIT+2_^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 RTJ* INPMSG_^1_%RTJ* DOIO_)OUTPUT CHARACTER BUFFER_^1_%RTJ* ENDTST_^1_%JMP* TEST2_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_,SECTION 3_!SELECTABLE OUTPUT CHARACTER TEST_,*_^1*_]_'*_^1***************************************************€€*********************_^1_%SPC 2_^1T3CK_!LDA* TEST_)CK IF TEST3 REQUESTED_^1_%AND- ONEBIT+3_^1_%SAN TEST3-*-1_^1_%JMP* ENDMSG_^1TEST3 RTJ* INPMSG_^1_%RTJ* DOIO_)OUTPUT CHARACTER BUFFER_^1_%RTJ* ENDTST_^1_%JMP* TEST3+1_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_1REQUEST AND INPUT CHARACTER STRING_1*_^1*_]_'*_^1***************€€*********************************************************_^1_%SPC 2_^1INPMSG 0_"0_^1_%LDA- 0_^1_%ADC MSG3E-MSG3B_^1_%STA* SIZE_^1_%LDA- 0_^1_%ADC MSG3B-REF1_^1_%STA* ADDRES_^1_%RTJ* DOIO_)OUTPUT USER DIRECTIONS_^1_%ENA 37_^1_%STA* SIZE_^1_%LDA- 0_^1_%ADC CHAR1A-REF1_^1_%STA* ADDRES_^1_%ENQ 36_+ZERO_^1_%ENA 0_-OUT_^1S00A1 STA CHAR1A,Q_'THE_^1_%INQ -1_/INPUT_^1_%SQZ 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_,MESSAGE 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 SQP RETURN-*-1_^1_%LDQ* PHYLOC_^1_%LDA- ERCODE,Q_$PICK UP ALTDEV ERROR CODE_^1_%AND- LPMSK+4_^1_%TRA Q_^1_%INQ -7_^1_%SQM 1_^1RETURN JMP* FORM5_^1_%SAZ OK-*-1_^1_%INQ 2_^1_%SQM 1_^1_%INA -1_^1_%INA -1_^1_%ALS 2_,MUI BY 4_^1OK_#LDQ =XMSG6B-MES3_^1_%AAQ Q_^1_%STQ* MSGPTR_^1_%LDA FLAG_)CK FOR NO €€PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAN FORM5-*-1_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES3_!NUM $8344_^1_%ADC (START-MES3)_^1_%NUM 3_^1_%ADC MSG5B-MES3_^1_%ADC MSG5E-MSG5B_^1MSGPTR ADC MSG6B-MES3_^1_%ADC MSG6E-MSG6B_^1FORM5 LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ FORM6-*-1_^1_%JMP* ENDMSG_^1FORM6 JMP* (DOIO)_^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 RTJ (MESAGE)_$OUTPUT END MESSAGE_^1MES4_!NUM $8144_^1_%ADC MSG2B-MES4_^1_%ADC MSG2E-MSG2B_^1_%LDA FLAG_)CK FOR STOP TO RE-ENTER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END2-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!LDA START+1_%CLEAR TEST NAME FROM PROGRAM STACK_^1_€€%LDQ START+2_^1_%RTJ (CLRSTK)_$CLEAR TEST NAME FROM PGM STACK, RELEASE CORE_^1_%ADC (START-*)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7RESET CHARACTER BUFFER_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1SETBUF NUM 0_^1_%RAO* CHAR1_(INCREMENT STARTING CHARACTER_^1_%L€€DA* CHAR1_(CHECK IF CHARACTER_^1_%SUB* SIXTY_)IS ILLEGAL_^1_%SAM S0001_(NO - GO FILL BUFFER_^1_%ENA $20_*YES - RESET STARTING_^1_%STA* CHAR1_)CHARACTER_^1S0001 LDA* CHAR1_(SET UP_^1_%STA* CHAR_*TO FILL BUFFER_^1_%CLR Q_.WITH LEGAL CHARACTERS_^1S0002 LDA* CHAR_)GET UPPER_^1_%ALS 8_-8 BITS_^1_%STA- I_.SAVE TEMPORARILY_^1_%LDA* CHAR_)CHECK IF NEXT_^1_%SUB =N$5F_)NEXT CHARACTER_€€^1_%SAM S0003_*WILL BE LEGAL_^1_%ENA $1F_*NO - RESET_^1_%STA* CHAR_*CHARACTER_^1S0003 LDA- I_^1_%ADD* CHAR_)COMBINE LOWER_^1_%INA 1_-8 BITS - INCREASE BY 1_^1_%STA* CHAR1A,Q_'AND STORE IN BUFFER_^1_%INQ 1_,INCREMENT BUFFER INDEX_^1_%TRQ A_,CHECK IF_^1_%SUB =N36_*BUFFER IS FULL_^1_%SAZ FINISH_'YES - GO PRINT BUFFER_^1_%LDA* CHAR_)SET UP_^1_%INA 2_-NEXT_^1_%STA* CHAR_+CHARAC€€TER_^1_%SUB* SIXTY_(CHECK IF_^1_%SAM S0004_)IT IS LEGAL_^1_%ENA $20_*NO - RESTORE_^1_%STA* CHAR_*CHARACTER_^1S0004 JMP* S0002_(GO FILL NEXT WORD_^1FINISH LDA =N$D00_'STORE CARRIAGE RETURN_^1_%STA* CHAR1A,Q_%IN OUTPUT BUFFER_^1_%STQ* SIZE_)STORE NO. OF WORDS IN I/O REQUEST_^1_%JMP* (SETBUF)_$GO PRINT BUFFER_^1CHAR1 NUM $1F_^1CHAR_!NUM $1F_^1SIXTY NUM $60_^1_%SPC 2_^1*****€€*******************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,BEGIN TTY TEST$_^1_%NUM $D00_^1_%ALF *,DLU,SECTIONS,LINES*_^1_%EQU MSG1E(*)_^1MSG2B ALF $,END TTY TEST $_^1_%EQU MSG2E(*)_^1MSG3B NUM $1200_^1_%ALF 11,INPUT CHARAC€€TER STRING_^1_%NUM $D0A_^1_%EQU MSG3E(*)_^1MSG4B ALF *, DLU ERROR*_^1_%EQU MSG4E(*)_^1MSG5B ALF 1,_^1_%EQU MSG5E(*)_^1MSG6B ALF 4,TIME OUT_^1_%EQU MSG6E(*)_^1_%ALF 4,ALARM_^1_%ALF 4,PARITY_^1_%ALF 4,INT REJ_^1_%ALF 4,EXT REJ_^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_]_^__ͺPSCMDK1 CSY/ E08 P€1_%NAM SCMDK1_'DECK-ID E08 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_$(1738/853-854) (1733-1/853-854) DISK TEST_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 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. MMTDK1 IS DIVIDED INTO SIX SECTIONS (TESTS) AS FOLLOWS:_^1*_$AREA. SCMDK1 IS DIVIDED INTO SIX SECTIONS AS FOLLOWS_^1*_*SECTION 2_!ALL ONES TEST_^1*_*SECTION 3_!RANDOM DATA TEST_^1*_*SEC€€TION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_^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 TERMINATED. 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 ERE€€QST(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 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***********************************************€€*************************_^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 $3739_(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- $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_%AD€€C 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_^1TT4A_!LDA* READ_)RESET BLKT€€RN._^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* BLKTRN_^1_%JMP* RN5_*TO H€€ERE 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 PATTER€€NS._^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 GOG€€O_)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*F€€CP_^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 TES€€T_^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_^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_^1T5CK_!LDA BUFF_)CK FOR TEST 5 REQUEST€€ED_^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 SECTO€€R 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 GOI€€NG._^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_%L€€DA 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_%SAZ CK1-*-1_^1_%RTJ* CMPE€€RR_'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 NU€€MBER_^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 C€€URRENT BLOCK._^1_%SAM CMP3-*-1_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA OLDLSB_'COMPUTE LOCATION OF_^1_%INA 4_,ACCOUNT FOR MSOS SYSTEM BIAS_^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_'CONVERT DATA ADDRESS IN SECTOR TO DEC._^1_%RTJ (RHXASC)_^1_%ADC (CELADD-*)_^1_%CLR Q_^1_%LDA SEC€€TOR_^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_%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- O€€NEBIT_'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_%INA 4_,ACCOUNT FOR MSOS SYSTEM BIAS_^1_%ALS 1_^1_%LRS 1_^1_%DVI =N96_^1_%TRQ A_^1_%RTJ (RHXASC)_^1_%ADC (SECT€€OR-*)_^1_%TRQ A_^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_%JMP* (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 ERRO€€R_^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* CON€€VRT_^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 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 3, RUN_^1NUMPAS NUM 0,0_^1_%€€EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1_%ALF $, SECTOR $_^1SECTOR NUM 0,0_^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 5,LOST DATA_^1_%EQU MSG12E(*)_^1MSG13B ALF 5, SEEK ERR_^1_%EQU MSG13E(*)_^1MSG14B ALF 4, ADR ERR_^1_%EQU MSG14E(*)_^1MSG15B ALF 4,DEF TRK_^1_%EQU MSG15E(*)_^1MSG16B ALF 4,PARITY_^1_%EQU MSG16E(*)_^1MSG17B ALF 6, PROTECT ERR_^1_%EQU MSG17E(*)_^1MSG18B ALF 5, D-C XFE€HR_^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_]_^__HPSCMDK2 CSY/ E10 P€1_%NAM SCMDK2_'DECK-ID E10 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_$(1738/853-854) (1733-1/853-854) DISK TEST_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 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. MMTDK2 IS DIVIDED INTO SIX SECTIONS (TESTS) AS FOLLOWS:_^1*_$AREA. SCMDK2 IS DIVIDED INTO SIX SECTIONS AS FOLLOWS_^1*_*SECTION 2_!ALL ONES TEST_^1*_*SECTION 3_!RANDOM DATA TEST_^1*_*SEC€€TION 4_!RANDOM DATA, RANDOM BLOCK LENGTH TEST_^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 TERMINATED. 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 ERE€€QST(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 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***********************************************€€*************************_^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 $3739_(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- $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_%AD€€C 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_^1TT4A_!LDA* READ_)RESET BLKT€€RN._^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* BLKTRN_^1_%JMP* RN5_*TO H€€ERE 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 PATTER€€NS._^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 GOG€€O_)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*F€€CP_^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 TES€€T_^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_^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_^1T5CK_!LDA BUFF_)CK FOR TEST 5 REQUEST€€ED_^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 SECTO€€R 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 GOI€€NG._^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_%L€€DA 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_%SAZ CK1-*-1_^1_%RTJ* CMPE€€RR_'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 NU€€MBER_^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 C€€URRENT BLOCK._^1_%SAM CMP3-*-1_^1_%JMP* CMP3A_^1CMP3_!RAO* COUNT_^1_%LDA OLDLSB_'COMPUTE LOCATION OF_^1_%INA 4_,ACCOUNT FOR MSOS SYSTEM BIAS_^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_'CONVERT DATA ADDRESS IN SECTOR TO DEC._^1_%RTJ (RHXASC)_^1_%ADC (CELADD-*)_^1_%CLR Q_^1_%LDA SEC€€TOR_^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_%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- O€€NEBIT_'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_%INA 4_,ACCOUNT FOR MSOS SYSTEM BIAS_^1_%ALS 1_^1_%LRS 1_^1_%DVI =N96_^1_%TRQ A_^1_%RTJ (RHXASC)_^1_%ADC (SECT€€OR-*)_^1_%TRQ A_^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_%JMP* (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 ERRO€€R_^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* CON€€VRT_^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 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 3, RUN_^1NUMPAS NUM 0,0_^1_%€€EQU MSG5E(*)_^1MSG6B ALF 5, COMP ERR_^1_%ALF $, SECTOR $_^1SECTOR NUM 0,0_^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 5,LOST DATA_^1_%EQU MSG12E(*)_^1MSG13B ALF 5, SEEK ERR_^1_%EQU MSG13E(*)_^1MSG14B ALF 4, ADR ERR_^1_%EQU MSG14E(*)_^1MSG15B ALF 4,DEF TRK_^1_%EQU MSG15E(*)_^1MSG16B ALF 4,PARITY_^1_%EQU MSG16E(*)_^1MSG17B ALF 6, PROTECT ERR_^1_%EQU MSG17E(*)_^1MSG18B ALF 5, D-C XFE€HR_^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_]_^__HPSCMCRD CSY/ E03 P€1_%NAM SCMCRD_'DECK-ID E03 MSOS 4.1_-SUMMARY-079_^1*_$1728/430 CARD READER/PUNCH TEST_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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*_$SCMCRD IS A DIAGNOSTIC EXERCISER FOR THE 1728/430, 1729-2, AND_^1*_$1729-3 CARD READERS. IT OPERATES UNDER CONTROL OF THE DIAGNOSTIC_^1*_$SUPERVISOR SCMEXC AND USES THE MSOS DRIVERS FOR ALL_^1*€€_$COMMUNICATION WITH THE HARDWARE. BEFORE TEST EXECUTION IS_^1*_$STARTED, THE USER IS REQUESTED TO INPUT THE TEST PARAMETERS --_^1*_$LOGICAL UNIT, TEST SECTION TO BE EXECUTED AND THE NUMBER OF TIMES_^1*_$VALIDITY AND IF INVALID, THE USER IS REQUESTED TO RE-ENTER THE_^1*_$TEST PARAMETERS. THE DIAGNOSTIC IS DIVIDED INTO EIGHT SECTIONS_^1*_$AS FOLLOWS:_^1*_*SECTION 1_#PUNCH RANDOM DAT€€A, 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*_$ON COMPLETION OF EACH I/O REQUEST, A CHECK IS MADE FOR DRIVER_^1*_$DETECT€€ED ERRORS. IF AN ERROR WAS DETECTED, THE TEST WILL USE_^1*_$THE ERROR CODE IN THE PHYSICAL DEVICE TABLE (WORD 26) AND THE_^1*_$HARDWARE STATUS (BOTH LEVEL 1 AND LEVEL 2) TO DETERMINE THE_^1*_$ERROR TYPE. 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. IF $8000 IS €€ENTERED_^1*_$FOR THE NUMBER OF EXECUTIONS, THE TEST SEQUENCE WILL EXECUTE_^1*_$INDIFINITELY._^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_%EQ€€U 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 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 ONEB€€IT($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_%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 $3739_(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--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 CARD€€S_^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$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_%J€€MP* 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_%JMP* BEGIN_^1INPE€€RR NUM 0_^1PHYLOC NUM 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_^1T1T€€5A INA -2_^1_%LDQ =A1_^1_%SAZ T1T5A1-*-1_^1_%LDQ =A5_^1T1T5A1 STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* FWRITE_^1_%SAZ T1T5A2-*-1_^1_%LDQ* FREAD_^1T1T5A2 STQ REF1_)SET TYPE OF I/O_^1_%ENA 57_^1_%STA NUMWDS_'SET BUFFER LENGTH_^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_^1T1T5B LDA REF1_)CHECK IF DOING A WRITE_^1_%AND- ONEBIT+10_^1_%SAZ T1T5D-*-1_^1_%CLR A_,YES, 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* T1T5€€B_^1FREAD ADC 4*FRC+FX+4*FRP+4*FCP FORMAT READ REQUEST_^1FWRITE 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* T3T7CK_^1T2T6A INA -4_^1_%LDQ =A2_^1_%SAZ T2T6A1-*-1_^1_%LDQ =A6_^1T2T6A1 STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* WRITE_^1_%SAZ T2T6A2-*-1_^1_%LDQ* READ_^1T2T6A2 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_%RTJ ENDCK_(CHECK IF TEST COMPLETE_^1_%JMP* T2T6F_^1PATTRN NUM $AAA5_^1_%NUM $55AA_^1_%NUM $A555_^1LU_#NUM 0_^1TES€€T_!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 =A3_^1_%SAZ T3T7A1-*-1_^1_%LDQ =A7_^1T3T7A1 STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* WRITE_^1_%SAZ T3T7A2-*-1_^1_%LDQ* READ_^1T3T7A2 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 =A4_^1_%SAZ T4T8A1-*-1_^1_%LDQ =A8_^1T4T8A1 STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* WRITE_^1_%SAZ T4T8A2-*-1_^1_%LDQ* READ_^1T4T8A2 STQ* REF1_)SET TYPE 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_%STA* BUF€€FER+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 STOP 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_"ADC BUFF€€ER-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 MO€€DE 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 ERRORS_^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 STAUS CHEC€€KING 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_%J€€MP* 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. STATUS, BY€€PASS 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_%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 MSG€€34B-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 A€€SCII_^1_%RTJ CONVRT_'CONVERT NO. OF CARDS TO DEC._^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1_%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_,NO INTERRUPT_^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 STATUS_!***_^1_%SPC 2_^1_%NUM $800€€1_(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 $8800_(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 $8008_(READER AREA JAM_^1_%NUM $8010_€€(PUNCH AREA JAM_^1_%NUM $8020_(STACKER AREA JAM_^1_%NUM $8040_(PRE-READ 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_!NO INTERRUPT_^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 MSG15B-MES8_!NON-NEGATIVE RECORD LENGTH_^1_%ADC M€€SG15E-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-MSG20B_^1_%ADC MSG30B-MES8_!PUNCH ERROR_^1_%ADC €€MSG30E-MSG30B_^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-M€€SG26B_^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 MSG31B-MES8_!MANUAL_^1_%ADC MSG31E-MSG31B_^1_%ADC MSG32B-MES8_!INHIBIT SW SET_^1_%ADC MSG32E-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 S€€TA* 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_%IN€€A -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 DOIN€€G 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_%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_%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_%A€€ND- 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 NUMBER_^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 ME€€SSAGE_^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_%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_^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 CONV€€ERT TO DEC._^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*_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_'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 N€€UM 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,E€€ND CARD R/P TEST,_^1RUNASC NUM 0,0_^1_%ALF $, CARDS $_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG3E(*)_^1MSG9B ALF 13,SPECIAL PATTERN FOR TEST 3_^1_%EQU MSG9E(*)_^1MSG10B ALF 6,NO INTERRUPT_^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 P€€UNCH_^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 $,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, EX€PPECTED_^1EXPCTD NUM 0,0_^1_%EQU MSG35E(*)_^1_%EQU END(*)_^1*_]_^1_%END 0_^__PPSCMMTT CSY/ E12 P€1_%NAM SCMMTT_'DECK-ID E12 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_$1732/608-609 MAG TAPE TEST_^1*_$1731/601 MAG TAPE TEST_^1*_]_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 RELOC€€ATABLE_^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 CONTROL OF THE_^1*_$DIAGNOSTIC SUPERV€€ISOR 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-ENT€€ER_^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 TERMINATED. THE STOP FLAG IS ALSO C€€HECKED 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)_#REQ€€UEST 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 UNTSEL(16)_"LOCATION IN PHYTAB FOR UNIT SELECT CODE_^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_%NUM $3739_(PSR LEVEL_^1*_]_^1FLAG_!NUM 0_,COMMUNICATIONS WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER -- FILLED IN AT EXECUTION TIME_^1GE€€TFLD 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 MS€€G1B-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 ENTERED--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 CONT€€INOUS 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 MSG2E-MSG2B_^1INI22 ENA 0_^1_%STA INPERR_^1INI22A ENQ 0_^1_%RTJ* (INFOIN)_$GET LU/DENSITY/_^1INI23 RTJ* (GETFLD)_^1_%SQP FLDOK2_^1_%JMP ENDMSG_'RUBOUT ENTE€€RED--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_%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_%JMP* INI23_(YES, GO GET DENSITY FIELD_^1INI24B INA -$10_)CHECK FOR 615-93_"($950)_^1_%SAN INI241_^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 INI243_^1_%JMP* INI23_^1INI243 €€INA -$10_)CHECK FOR 609_%($990)_^1_%SAN INI244_^1_%JMP* INI26E_'DENSITY IS FIXED_^1INI244 INA -$50_)CHECK FOR 1706/609 ($9E0)_^1_%SAN INI24C_^1_%JMP* INI26E_'DENSITY IS FIXED_^1INI24C 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 MESSAGE_^1€€MES3_!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 IN€€I26A_(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* INI22_^1INI27 LDA NUMUNT_'CK FOR ZERO U€€NITS 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 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 CHECK€€S_^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 NW€€ORDS_^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* PHASE2_^1_%SAN TST3G-*-1_^1_%LDA* WSPAT3_'WRITE 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_%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 =N300_€€^1_%RTJ* COUNTD_^1_%SPC 2_^1_%LDA =N$F001_%ADVANCE 99 RECORDS_^1_%STA* INSTR_^1_%LDA =N63_^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_^1€€CTLOOP 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 ENDPAS_^1TEST4 LDA =A4_*BEGIN TEST 4_^1_%STA SNUM_^1_%CLR A_^1_%STA* PHASE2_^1TST4_!STA* TIMES_^1_%LDA WSPAT1_^1_%LDQ =N€€96_^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 TST4D-*-1_^1_%JMP* TST4C_^1TST4D LDA* PHASE2_^1_%SAZ TST4D1-*-1_^1_%JMP* TST4G_^1€€TST4D1 LDA WSPAT3_'WRITE SPECIAL BLOCK_^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_%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 FI€€LES_^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 99 FILES_^1_%STA* INSTR_^1_%LDA =N63_^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 ENDPAS_^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* PHA€€SE_^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_^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)_^1€€WRITE 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* REF1_)CKECK 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* PATTRN€€_^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_!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 CEL€€L_^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 CK2-*-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_^1*_]_^1CMP3_!0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CELERR_'COMPARE ERROR€€S 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 ERROR_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 INIMS€€G_^1_%JMP* CMP6_^1_%LDA* TEMPX_^1_%RTJ (RHXASC)_^1_%ADC (WRDCEL-*)_^1_%LDA* ORIG_^1_%RTJ (RHXASC)_^1_%ADC (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 MASKS 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 $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-MSG1€€5B_^1_%ADC MSG16B-MES8_$NO WRITE RING_^1_%ADC MSG16E-MSG16B_^1_%ADC MSG17B-MES8_$END OF TAPE_^1_%ADC MSG17E-MSG17B_^1_%ADC MSG18B-MES8_!SHORT TRANSFER_^1_%ADC MSG18E-MSG18B_^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_%LDA FLAG_)CHECK FOR_^1_%AND- ONEBIT+7_%NO ERROR_^1_%SAZ ESTAT1_)PRINTOUT_^1_%JMP BLK7_,DONT PRINT_^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 E€€ND OF TAPE_^1_%SAZ EST1-*-1_^1_%ENQ 4_^1_%RTJ* ERRMSG_^1EST1_!LDA* DSTAT_^1_%AND- NZERO+13_$CK FOR DRIVER DETECTED ERRORS_^1_%SAN EST2-*-1_^1_%JMP* (ESTAT)_^1EST2_!AND- ONEBIT+14_#CK FOR SHORT TRANSFER_^1_%SAZ EST3-*-1_^1_%ENQ 5_^1_%RTJ* ERRMSG_^1EST3_!CLR Q_^1_%STQ* BITPTR_^1_%LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST4-*-1_$CK FOR END OF TABLE_^1_%JMP* (ESTAT)_^1EST4_!LDA* €€HSTAT_^1_%AND- ONEBIT,Q_$CK FOR ERROR STATUS BIT SET_^1_%SAZ EST5-*-1_^1_%LDQ* BITPTR_^1_%RTJ* ERRMSG_^1EST5_!RAO* BITPTR_^1_%JMP* EST3+2_^1DSTAT NUM 0_^1HSTAT NUM 0_^1BITPTR NUM 0_^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 E€€RROR 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*_3INITIALIZE 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_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA COUNTR_'GET CURRENT RECORD NUMBER_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%A€€DC (RCDCEL-*)_^1INIMS1 JMP* (INIMSG)_^1_%SPC 2_^1FNDUNT 0_"0_^1_%LDQ LU,Q_)'Q' REGISTER HAS POINTER TO L.U. TABLE_^1_%LDQ+ LOG1A,Q_^1_%LDA- UNTSEL,Q_$GET UNIT SELECT CODE FROM PHYSTAB_^1_%AND =N$380_^1_%ARS 7_^1_%ADD =A 0_^1_%STA 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*_]_'*_^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_%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 JMP* (MOTION)_^1MCTR_!NUM 0_^1_%SPC 2_^1***************€€*********************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDPAS CLR Q_,CK IF ALL UNITS HAVE BEEN MARKED DOWN_^1_%STQ* ENDCTR_^1ENDPS1 LDA DENSTY,Q_^1_%SAP ENDPS2-*-1_^1_%RAO* ENDCTR_^1ENDPS2 TRQ A_^1_%SUB NUMUNT_^1_%SAZ ENDPS3-*-1_^1_%INQ +1€€_^1_%JMP* ENDPS1_^1ENDPS3 LDA* ENDCTR_^1_%INA -1_^1_%SUB NUMUNT_^1_%SAN ENDTST-*-1_^1_%JMP* ENDMSG_^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 ERRCTR,Q_^1_%RTJ* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%LDQ DENSTY,Q_$CK FOR NON RECOVERABLE ERROR_^1_%LDA =XMSG20E-MSG20B_^1_%SAP END3-*-1_^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_^1EN€€DPTR ADC 0_^1_%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_%LDQ 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 5, TAPE UNIT_^1UNTNUM NUM 0_^1_%EQU MSG5E(*)_^1_%EQU MSG6E(*)_^1MSG7B ALF 13, INT/EXT REJ OR NOT RDY_^1_%EQU 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_%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_%EQ€€U 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(*)_^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_^__PSCMCD1 CSY/ E05 P€1_%NAM SCMCD1_'DECK-ID E05 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_$1739-1 CARTRIAGE DISK DRIVE AND CONTROLLER TEST ROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 RELOC€€ATABLE_^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*_$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 PARAM€€ETER 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_!RAND€€OM DATA, RANDOM BLOCK LENGTH TEST_^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, T€€HE 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 TERMINATED. 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)_#PHYT€€AB 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 FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WOR€€D '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_%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 $3739_(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- $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+1_'CHECK_>12-10-7€€3_^1_%LDQ BUFF+2_(STARTING SECTOR_212-10-73_^1_%RTJ+ COMPV4_)LESS THAN_^1_%SAM INI3_,BEGINNING SECTOR_^1_%JMP* INI7_^1INI3_!LDA* BUFF+3_(CONVERT NUMBER_^1_%SAM INI31A_4(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_%OF RUNS_^1INI31A 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_%LD€€A- 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 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_%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_^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* INI9G_^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 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 SEQ--_^1_%AND- ONEBI€€T+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_(W€€ORST 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_^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 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_)CH€€ECK 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_%J€€MP 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* LSB_,TRACK_^1_%ST€€Q* 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_(IN€€ITIALIZE 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_%S€€PC 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+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 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 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_%LDA LSB_*CHECK IF_^1€€_%CLR Q_-RANDOM_^1_%LLS 1_.ADDRESS_^1_%ADQ MSB_-IS ABOVE_^1_%LRS 1_0SYSTEM_^1_%DVI N96_.AREA_^1_%TRA Q_^1_%LDA- MAXSEC_^1_%RTJ+ COMPV4_^1_%SAM T63A_)YES - PROCEED_^1_%JMP* T63_*NO - RETRY_^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 BO€€UNDS_^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_'THI€€S 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-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*_]_^1CMP4_!0_"0_,ENTRY TO OUTPUT NUMBER_^1_%LDA* CMP1_)COMPARE ERRORS THIS TRANSFER_^1_%RTJ* CONVRT_'CONVERT VALUE TO DECIMAL_^1_%RTJ (RHXAS€€C)_^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_%JMP* SFB€€_*NO_^1SF1_"STA* TEMSEC_'YES - SAVE FIXED DISK SECTOR_^1_%ENA $40_*1739 FIXED DISK FLAG_^1_%SQZ 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_%S€€TQ* 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_%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_+BEGI€€N 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_^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_%L€€DA 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_%AD€€C 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 NO€€T 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 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 MSG4€€E-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 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 5,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 4,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/ E07 P€1_%NAM SCMCD2_'DECK-ID E07 MSOS 4.1_-SUMMARY-079_^1*_]_^1*_$1739-1 CARTRIAGE DISK DRIVE AND CONTROLLER TEST ROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 RELOC€€ATABLE_^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*_$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 PARAM€€ETER 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_!RAND€€OM DATA, RANDOM BLOCK LENGTH TEST_^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, T€€HE 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 TERMINATED. 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)_#PHYT€€AB 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 FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST WOR€€D '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_%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 $3739_(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- $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+1_'CHECK_>12-10-7€€3_^1_%LDQ BUFF+2_(STARTING SECTOR_212-10-73_^1_%RTJ+ COMPV4_)LESS THAN_^1_%SAM INI3_,BEGINNING SECTOR_^1_%JMP* INI7_^1INI3_!LDA* BUFF+3_(CONVERT NUMBER_^1_%SAM INI31A_4(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_%OF RUNS_^1INI31A 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_%LD€€A- 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 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_%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_^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* INI9G_^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 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 SEQ--_^1_%AND- ONEBI€€T+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_(W€€ORST 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_^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 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_)CH€€ECK 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_%J€€MP 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* LSB_,TRACK_^1_%ST€€Q* 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_(IN€€ITIALIZE 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_%S€€PC 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+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 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 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_%LDA LSB_*CHECK IF_^1€€_%CLR Q_-RANDOM_^1_%LLS 1_.ADDRESS_^1_%ADQ MSB_-IS ABOVE_^1_%LRS 1_0SYSTEM_^1_%DVI N96_.AREA_^1_%TRA Q_^1_%LDA- MAXSEC_^1_%RTJ+ COMPV4_^1_%SAM T63A_)YES - PROCEED_^1_%JMP* T63_*NO - RETRY_^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 BO€€UNDS_^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_'THI€€S 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)_^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_%R€€AO* 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-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_%JMP* SFB_*NO_^1SF1_"€€STA* TEMSEC_'YES - SAVE FIXED DISK SECTOR_^1_%ENA $40_*1739 FIXED DISK FLAG_^1_%SQZ 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_,SHI€€FT 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 V€€ALUE 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 PASS€€ES_^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 CHE€€CK._^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_^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-MS€€G18B_^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 MSG€€16E-MSG16B_^1_%ADC MSG17B-MES6_^1_%ADC MSG17E-MSG17B_^1_%ADC MSG15B-MES6_^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- ONEBI€€T_^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 BU€€FFERS_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 A€€LF $,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 5,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 4,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_]_^__ PSCMDRM CSY/ E13 P€1_%NAM SCMDRM_'DECK-ID E13 MSOS 4.1_-SUMMARY-079_^1*_$1752 TEST ROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 D€€RUM 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 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 ONES 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 CHECK€€ED 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_]_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PH€€YTAB 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 FRC($200)_#REQUEST WORD 'REQUEST CODE' LOCATOR_^1_%EQU FX($100)_$REQUEST W€€ORD '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*********************************************************€€***************_^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 $3739_(PSR LEVEL_^1*_]_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER -- FILLED IN AT EXECUTION TIME_^1GE€€TFLD 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 $814€€4_^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* LU_^1_%RTJ* (RDECHX)_$CONV€€ERT LU TO HEX_^1_%STA DSKLU_^1_%LDA* BUFF+3_'CONVERT_^1_%SAM INI3A_5(CHECK FOR CONTINOUS EXECUTION)_^1_%RTJ* (RDECHX)_%NO OF RUNS_^1INI3A STA* BUFF+3_)TO DECIMAL_^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* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES€€2_!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_%A€€DC 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 MS€€B_^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* COUNT€€1_^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_^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 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* NW€€ORDS_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 WHE€€N 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 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_-DRUM_^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 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* T€€RYAGN_^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 TES€€T 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*_4COMPUT€€E 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* LS€€BTMP_^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_%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_%ST€€A 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_*GE€€NERATE 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_%A€€ND- 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 BUFF_)CK FOR TEST 5 REQUESTED_^1_%AND- O€€NEBIT+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 TES€€T_/*_^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_)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_%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_(N€€O_^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 WRI€€TE 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_%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 N€€UM -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_%JMP* T7DONE_(ALL DONE_^1_%JMP* CHRSEC_^1_%LDA* ISAVE_^1_%STA- I_^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_)P€€RINTOUT_^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_%J€€MP* (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_^1_%RTJ (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_$OUTPUT NUMB€€ER 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_%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 (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_%NU€€M 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 FLAG_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAN INIMS1-*-1_^1_%RAO* INIMSG_^1_%LDA PASSES_^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_^1E€€ST1_!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 WR€€ITE 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* 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_-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 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 MSG14B-MES6_^1_%ADC MSG1€€4E-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_^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 8,BEGIN DRUM TEST_^1_%NUM $D00_^1_%ALF $,DLU,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,_^1P€€ASSES 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(*)_^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_%SP€HC 2_^1BLK2K BZS BLK2K(2048)_^1_%SPC 2_^1_%EQU END(*)_^1_%END_]_^__HPSCMDM1 CSY/ E14 P€1_%NAM SCMDM1_'DECK-ID E14 MSOS 4.1_-SUMMARY-079_^1*_$1751 TEST ROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 T€€HE 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 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_!Z€€EROS 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. 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 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 O€€F 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($10€€0)_$REQUEST WORD 'F' BIT 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*_]_^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 $3739_(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_%EJT 0_^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 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 GREATER 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* INPER€€R_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_^1INI5_!LDA* BUFF+2_'CK FOR EXCESSIVE SECTOR ADDRESS_^1_%SUB =N32767_'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_%INA -1_^1_%SUB- MAXSEC_^1_%SAP INI9-*-1_^1_%JMP* INI7_^1INI9_!LDA* BUFF+1_'CONVERT BEGINNING TRACK_^1_%CLR Q_,TO MSB/LSB_^1_%LLS 12_^1_%ALS 15_^1_%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_%LLS 12_^1_%ALS 15_^€€1_%EOR- LPMSK+11_^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_^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 NUM $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 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* LS€€B_^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_!RANDO€€M 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_*GENE€€RATE 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 DRUM AND CORE_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BLKTRN 0_"0_^1_%LDA* TRYAGN_'CK FOR PREVI€€OUS 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- (AMON€€I)_%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-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 €€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_"L€€DA 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 OLD 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- LPM€€SK+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 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 MAX€€MSB_^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_%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_%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 NW€€ORDS_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_%JM€€P* RF12_)TO HERE FOR NEXT CELL._^1RF14_!NUM $21_^1RF14A NUM $21_^1_%EJT 0_^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_€€^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_#$80€€0_^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 HE€€RE, 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_%JMP* T7CK_^1T66_"JMP* TEST6_(KEEP GOING._^1T6CTR NUM 0_^1RNWRKG NUM $41_^1_%EJT 0_^1€€************************************************************************_^1*_]_'*_^1*_2SECTION 7_!TRACK SWITCHING TEST_2*_^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- 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_%CLR 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 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_%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 (RHXASC)_^1_%ADC (CMP5-*)_^1_%RTJ* INIMSG_^1_%JMP* CMP4A_^1_%RTJ (MESAGE)_$OUT€€PUT 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 ERRO€€R_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_%LLS 4_^1_%ALS €€11_^1_%RTJ (RHXASC)_^1_%ADC (CELADD-*)_^1_%TRQ A_^1_%RTJ (RHXASC)_^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-MES€€5_^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_%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_%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_%J€€MP* (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 TRANSFER_^1_%AND- ONEBIT+10_#CK FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES6_^1_%SAN EST€€4-*-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_%LLS 4_^1_%TRQ 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 M€€SG18E-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 RE€€ADY_^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 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 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 INFINI€€TE REPEATS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA COUNT_^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 0_^1************************************************************************_^1*_]_'*_^1*_4MESSAGE BUFFERS_A*_^1*_]_'*_^1*****************************************************************€€*******_^1_%SPC 2_^1MSG1B ALF 8,BEGIN DRUM TEST_^1_%NUM $D00_^1_%ALF *,DLU,SECTIONS,BEG TRK,END TRK,RUNS*_^1_%EQU MSG1E(*)_^1MSG2B ALF *, DLU ERROR*_^1_%EQU MSG2E(*)_^1MSG3B ALF 7, TRACK 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 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_%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(*)_^1MSG18B ALF 5, D-C X€\FER_^1_%EQU MSG18E(*)_^1MSG19B ALF 5, C-D XFER_^1_%EQU MSG19E(*)_^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_]_^__\PSCMPTR CSY/ E15 P€1_%NAM SCMPTR_'DECK-ID E15 MSOS 4.1_-SUMMARY-079_^1*_$1777 PAPER TAPE READER TEST_^1*_$1721/1722 PAPER TAPE READER TEST_^1*_$1713 TELETYPEWRITER PAPER TAPE READER TEST_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 REENTE€€R 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)_"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_%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 $3739_(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_)CO€€NVERT 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 11721/1722_^1_%SAN INI2A_(NO_^1_%JMP* INI4_)Y€€ES_^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_%JMP* BEGIN_^1INPERR NUM 0_^1PHYLOC NUM 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- 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 =N$232F_^1_%STA GNATOR_'INITIALIZE RANDOM NUMBER GENERATOR_^1_%CLR A_^1_%STA* CKTYP_(SET TYPE OF DATA COMPARE_^1T1T5D RTJ DOIO_)DO TEST I/O_^1_%RTJ ENDCK_(CHECK IF TE€€ST COMPLETE_^1_%RTJ SPACE_(READ BLANK TAPE BEFORE NEXT RECORD_^1_%JMP* T1T5D_^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 AND 7_!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_%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_^1_%ENA 2_,TYPE OF DATA COMPARE_^1FT2468 STA* CKTYP_(SET TYPE OF DATA COMPARE_^1T3T7E RTJ* DOIO_)DO TEST I/O_^1_%RTJ ENDCK_(CHECK IF TEST C€€OMPLETE_^1_%RTJ SPACE_(READ BLANK TAPE_^1_%JMP* T3T7E_^1READ_!ADC 1*FRC+FX+4*FRP+4*FCP READ REQUEST_^1SPCPAT NUM 0_^1CKTYP NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_/SECTION 4 AND 8_!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 ENDMSG_^1T4T8A LDQ =A4_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%LDQ* READ_^1_%STQ* REF1_)SET TYPE OF I/O_^1_%ENA 3_,TYPE OF DATA COMPARE_^1_%JMP* FT2468_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_6COMMON DATA I/O ROUTINE_7*_^1*_]_€€'*_^1************************************************************************_^1_%SPC 2_^1DOIO_!0_"0_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ DOIO1-*-1_^1_%JMP ENDMSG_^1DOIO1 ENQ 39_+CLEAR I/O BUFFER FOR THE READ_^1_%CLR A_^1DOIOA STA* BUFFER,Q_^1_%SQZ DOIOB-*-1_^1_%INQ -1_^1_%JMP* DOIOA_^1DOIOB 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*_]_^1_%BZS BUFFER(40)_^1*_]_^1CMPL1 SQP CMPL1B-*-1_"CHECK IF DRIVER DETECTED AN ERROR_^1_%RTJ* ERRCHK_^1_%RTJ CKDATA_'VERIFY DATA FROM THE READ_^1CMPL1B JMP* (DOIO)_^1SPACE 0_"0_,READ 5 WORDS OF ZEROES_^1_%RTJ- (AMONI)_^1REF2_!ADC 1*FRC+FX+4*FRP+€€4*FCP_#READ_^1_%ADC CMPL2-REF2_^1_%ADC 0_^1RPLUA NUM 0_^1_%NUM 5_^1_%ADC ZERBUF-REF2_^1_%JMP- (ADISP)_^1*_]_^1_%BZS ZERBUF(5)_^1CMPL2 SQP CMPL2B-*-1_^1_%RTJ* ERRCHK_^1CMPL2B JMP* (SPACE)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_5CHECK FOR HARDWARE ERRORS_6*_^1*_]_'*_^1************************************************€€************************_^1_%SPC 2_^1ERRCHK 0_"0_^1_%LDQ PHYLOC_^1_%LDA- ERCODE,Q_$GET ALTERNATE DEVICE ERROR CODE_^1_%AND- LPMSK+6_^1_%STA* ALTERR_^1_%LDA- ESTAT2,Q_$GET HARDWARE STATUS FROM PHYSTB_^1_%EOR- ONEBIT_'COMPLEMENT READY STATUS_^1_%STA* LEV1ST_^1_%CLR A_^1_%STA* FATLER_'CLEAR FATAL ERROR FLAG_^1_%LDQ- 0_^1_%ADC ($1800+STATUS-CKFNC1)_$SET 'SUB' FUNCTION_^1_%STQ* CKFN€€C1_^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 4_^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_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDA* BITTAB,Q_^1_%EOR- NZERO_(CHECK IF END OF TABLE_^1_%SAN EST2-*-1_^1_%JMP* (ESTAT)_^1EST2_!LDA* BITTAB,Q_^1_%AND- LPMSK+15_^1CKFNC1 SUB* STATUS_^1CKFNC2 SAZ EST3-*-1_$CHECK FOR ERROR CONDITION_^1_%JMP* EST6_^1EST3_!LDA* BITTAB,Q_$CHECK IF FATAL ERROR_^1_%SAP EST4_^1_%RAO* FATLER_'YES - SET FATAL ERROR FLAG_^1EST4_!RTJ* CKFLA€€G_'CHECK IF ERROR PRINTOUT IS INHIBITED_^1_%JMP* EST6_)YES - DON'T PRINT_^1_%LDQ* BITPTR_'GENERATE ERROR_^1_%QLS 1_-MESSAGE INDEX_^1_%LDA* MSGTAB,Q_$PICK UP MESSAGE PART POINTER_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA* BITTAB,Q_$CHECK IF RECOVERABLE ERROR_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC €€ MSG34B-MES8_^1_%ADC MSG34E-MSG34B_^1MSGPTR ADC 0_^1_%ADC 0_^1EST6_!RAO* BITPTR_^1_%JMP* EST1_^1BITPTR NUM 0_^1STATUS NUM 0_^1*_]_^1CKFLAG 0_"0_,CK FOR STOP FLAG AND IF MESSAGES ARE INHIBITED_^1_%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 ERRO€€R MESSAGES FLAG SET_^1_%SAN CKFLG2-*-1_^1_%RAO* CKFLAG_^1_%LDA REPEAT_'CONVERT PASSES COMPLETED TO ASCII_^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_^1_%NUM $8001_(NOT READY_^1_%NUM $8002_(BUSY_^1_%NUM $804€€0_(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 MSG12B-MES8_!PARITY ERROR_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES8_^1_%ADC MSG13E-MSG13B_^1_%ADC MSG14B-MES8_^1_%ADC MSG14E-MSG14B_^1_%ADC MSG15B-MES8_^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-MSG1€€9B_^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_%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 CONSIDER€€ATION_^1TST5A RTJ* RANDOM_'GET A RANDOM NUMBER_^1_%STA* WORD1_^1_%RTJ* CHKERR_'CHECK FOR DATA ERRORS_^1_%LDA* GRPIND_^1_%INA -40_^1_%SAZ TST5B-*-1_#DONE_^1_%JMP* TST5A_^1TST5B JMP* (CKDATA)_^1*_8$AA, $55 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 COMPLE€€TE_^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 SE€€T, 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 E€€RRORS_^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* WOR€€D1_^1_%AND- LPMSK+8_^1_%STA* WAS_^1_%EOR* IS_^1_%SAZ CHK2-*-1_$CHECK COLUMN N+2_^1_%ENQ 2_^1_%RTJ* DATERR_'DATA ERROR COLUMN N+2_^1CHK2_!RAO* GRPIND_'INCREMENT WORD COUNTER_^1_%JMP* (CHKERR)_^1*_]_^1DATERR 0_"0_,FORM DATA ERROR MESSAGE_^1_%LDA* GRPIND_'CALCULATE FRAME NUMBER_^1_%ADD* FADD1_(EXTRA WORD IF FORMATTED I/O_^1_%ALS 1_,MULT BY 2_^1_%AAQ A_^1_%CLR Q_^1_%DVI- TEN_*CONV€€ERT 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_%RTJ* CONVRT_^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* CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (EXPCTD-*)_^1_%LDA EXPCTD+1_^1_%AND- NZERO+8_^1_%EOR- ONEB€€IT+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_^1ISA€€VE 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 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 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 FOR SECTION 3$_^1_%EQU MSG9E(*)_^1MSG10B ALF 4,TIME OUT_^1_%EQU MSG10E(*)_^1MSG11B ALF 3,ALARM_^1_%EQU €€MSG11E(*)_^1MSG12B ALF 6,PARITY ERROR_^1_%EQU MSG12E(*)_^1MSG13B ALF $,CHECKSUM ERROR$_^1_%EQU MSG13E(*)_^1MSG14B ALF $,INTERNAL REJECT$_^1_%EQU MSG14E(*)_^1MSG15B ALF $,EXTERNAL REJECT$_^1_%EQU MSG15E(*)_^1MSG18B ALF 4,NOT RDY_^1_%EQU MSG18E(*)_^1MSG19B ALF 2,BUSY_^1_%EQU MSG19E(*)_^1MSG20B ALF 5,LOST DATA_^1_%EQU MSG20E(*)_^1MSG21B ALF 7,MOTION FAILURE_^1_%EQU MSG€€21E(*)_^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_^_€_E(*)_^1MSG22B ALF 7PSCMPTP CSY/ E16 P€1_%NAM SCMPTP_'DECK-ID E16 MSOS 4.1_-SUMMARY-079_^1*_$1777 PAPER TAPE PUNCH TEST_^1*_$1723/1724 PAPER TAPE PUNCH TEST_^1*_$1713 TELETYPEWRITER PAPER TAPE PUNCH TEST_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 EXE€€CUTIVE SCMEXC AND_^1* USES 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 TH€€E 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. 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 EA€€CH TEST, A 60 WORD BUFFER IS LOADED WITH THE_^1* APPROPRIATE DATA PATTERN AND THEN PUNCHED ONTO A TAPE. AT THE END_^1* OF EACH PASS, A COUNTER IS UPDATED AND COMPARED AGAINST THE NUMBER_^1* OF TIMES REQUESTED BY THE USER. IF EQUAL, THE TEST IS TERMINATED._^1* IF $8000 IS ENTERED FOR THE NUMBER OF EXECUTIONS THE TEST WILL BE_^1* EXECUTED INDEFINITELY. THE TAPES PRODUCED BY THIS R€€OUTINE 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)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU ERCODE(19)_"PHYTAB ALTDEV ERROR CODE STORAGE_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ONEBIT($23)_!START OF ONE BIT TABLE_^1_%EQU FRC($200)_#REQ€€UEST 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_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7COMMUNICATIONS REGIONS_7*_^1*_]_'*_^1*€€***********************************************************************_^1_%SPC 2_^1START ALF 3,TSTPTP_$TEST MNEMONIC_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $3739_(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_^1CLRS€€TK 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 LOGI€€CAL 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_%RAO* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1_%SUB =N$F60_'CHECK FOR€€ 1713_#($31B0)_^1INI2B SAZ INI4_^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_%JMP* BEGIN_^1INPERR NUM 0_^1PHYLOC NUM 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- 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 ME€€SSAGE_^1_%LDQ* FWRITE_^1_%STQ REF1_)SET TYPE OF I/O_^1_%LDA =N$232F_^1_%STA GNATOR_'INITIALIZE RANDOM NUMBER GENERATOR_^1_%CLR A_^1_%STA* CKTYP_(SET TYPE OF DATA COMPARE_^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* T1T5€€C_^1T1T5D RTJ DOIO_)DO TEST I/O_^1_%RTJ ENDCK_(CHECK IF TEST COMPLETE_^1_%JMP* T1T5B_^1FWRITE ADC 6*FRC+FX+4*FRP+4*FCP FORMAT WRITE REQUEST_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_*SECTION 2_!$AA, $55 PATTERN TEST_9*_^1*_]_'*_^1***********************************************************************_^1_%SPC 2_^1T2T6CK €€LDA* TEST_^1_%AND- ONEBIT+2_$CHECK IF TEST 2 REQUESTED_^1_%SAN T2T6A-*-1_^1_%JMP* T3T7CK_^1T2T6A LDQ =A2_^1_%STQ SNUM_)SET SECTION NUMBER IN ERROR MESSAGE_^1_%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_#NU€€M 0_^1TEST_!NUM 0_^1RECS_!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- 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_%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_^1_%ENQ 39_^1T3T7C STA* B€€UFFER,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_%RTJ ENDCK_(CHECK IF TEST COMPLETE_^1_%JMP* T3T7E_^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- ONEBIT+4_$CHECK IF TEST 4 IS REQUESTED_^1_%SAN T4T8A-*-1_^1_%JMP ENDMSG_^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_,TY€€PE 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_,WRIT€€E OUT 5 WORDS OF ZEROES_^1_%RTJ- (AMONI)_^1REF2_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC CMPL2-REF2_^1_%ADC 0_^1RPLUA NUM 0_^1_%NUM 5_^1_%ADC ZERBUF-REF2_^1_%JMP- (ADISP)_^1*_]_^1_%BZS ZERBUF(5)_^1CMPL2 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_%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 4_^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_%STQ* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDA* BITTAB,Q_^1_%EOR- NZERO_(CHECK IF END OF TABLE_^1_%SAN EST2-*-1_^1_%JMP* (ESTAT)_^1EST2_!LDA* BITTAB,Q_^1_%AND- LPMSK+15_^1CKFNC1 SUB* STATUS_^1CKFNC2 SAZ EST3-*-1_$CHECK FOR ERROR CONDITION_^1_%JMP* EST6_^1EST3_!LDA* BITTAB,Q_$CHECK IF FATAL ERROR_^1_%SAP EST4_€€^1_%RAO* FATLER_'YES - SET FLAG_^1EST4_!RTJ* CKFLAG_'CHECK IF ERROR PRINTOUT INHIBITED_^1_%JMP* EST6_)YES - DONT PRINT_^1_%LDQ* BITPTR_'GENERATE ERROR_^1_%QLS 1_,MESSAGE INDEX_^1_%LDA* MSGTAB,Q_$PICK UP MESSAGE PART POINTER_^1_%STA* MSGPTR_^1_%LDA* MSGTAB+1,Q_^1_%STA* MSGPTR+1_^1_%LDA* BITTAB,Q_$CHECK IF RECOVERABLE ERROR_^1_%RTJ (MESAGE)_$OUTPUT DIAGNOSTIC MESSAGE_^1MES8_!NUM $€€0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG34B-MES8_^1_%ADC MSG34E-MSG34B_^1MSGPTR ADC 0_^1_%ADC 0_^1EST6_!RAO* BITPTR_^1_%JMP* EST1_^1BITPTR NUM 0_^1STATUS NUM 0_^1*_]_^1CKFLAG 0_"0_,CK FOR STOP FLAG AND IF MESSAGES ARE INHIBITED_^1_%RAO* ERRCTR_'INCREMENT ERROR COUNTER_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ CKFLG1-*-1_^1_%JMP ENDMSG_^1CKFLG1 LDA €€ FLAG_^1_%AND- ONEBIT+7_$CHECK IF INHIBIT ERROR MESSAGES FLAG SET_^1_%SAN CKFLG2-*-1_^1_%RAO* CKFLAG_^1_%LDA REPEAT_'CONVERT PASSES COMPLETED TO ASCII_^1_%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* (RANDO€€M)_^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 ERR€€OR_^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_^1_%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 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_!PARITY ERROR_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG13B-MES8_!INTERNAL REJECT_^1_%ADC MSG1€€3E-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_%A€€DC 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 RE€€QUESTED_^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 MSG€€3B-MES10_^1_%ADC MSG3E-MSG3B_^1_%LDA FLAG_^1_%AND- ONEBIT+6_#CHECK FOR STOP TO RE-ENTER PARAMETERS_^1_%SAZ END1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END1_!LDA START+1_%CLEAR TEST NAME FROM PGM STACK,RELEASE CORE_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_^1_%ADC (START-*)_^1REPEAT NUM 0_^1_%SPC 5_^1CONVRT NUM 0_,CONVERT A REGISTER TO DECIMAL_^1_%TRA Q_^1_%SUB =N$270F_%CHECK €€IF VALUE .GT. 9999_^1_%SAP GOWAY_(YES - LEAVE IN HEX FORM_^1_%TRQ A_,NO - GO CONVERT_^1_%RTJ (ROCDEC)_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%JMP* (CONVRT)_^1GOWAY TRQ A_^1_%JMP* (CONVRT)_^1_%SPC 3_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1*****************************************************€€*******************_^1_%SPC 2_^1MSG1B ALF 14,BEGIN PAPER TAPE PUNCH TEST_^1_%NUM $D00_^1_%ALF *,DLU,SECTIONS,RECDS*_^1_%EQU MSG1E(*)_^1MSG2B ALF *, DLU ERROR*_^1_%EQU MSG2E(*)_^1MSG3B ALF 13,END PAPER TAPE PUNCH TEST,_^1RUNASC NUM 0,0_^1_%ALF 3, RECS_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG3E(*)_^1MSG9B ALF $,SPECIAL PATTERN FOR SECTION 3$_^1_%EQU MSG9E(*)_€€^1MSG10B ALF 4,TIME OUT_^1_%EQU MSG10E(*)_^1MSG11B ALF 3,ALARM_^1_%EQU MSG11E(*)_^1MSG12B ALF 6,PARITY ERROR_^1_%EQU MSG12E(*)_^1MSG13B ALF $,INTERNAL REJECT$_^1_%EQU MSG13E(*)_^1MSG14B ALF $,EXTERNAL REJECT$_^1_%EQU MSG14E(*)_^1MSG15B ALF $,VALIDATION ERROR$_^1_%EQU MSG15E(*)_^1MSG18B ALF 4,NOT RDY_^1_%EQU MSG18E(*)_^1MSG19B ALF 2,BUSY_^1_%EQU MSG19E(*)_^1MSG21B AL€F 7,POWER FAILURE_^1_%EQU MSG21E(*)_^1MSG22B ALF 8,TAPE SUPPLY LOW_^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(*)_^1_%EQU END(*)_^1*_]_^1_%END 0_^__PSCMDVP CSY/ E09 P€1_%NAM SCMDVP_'DECK-ID E09 MSOS 4.1_-SUMMARY-079_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 2_^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 RELOCA€€TABLE_^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 US€€ES THE M.S.O.S DRIVERS FOR 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 ON€€LY, WRITE/READ, WRITE ONLY)_^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 TEST_^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 EXECUT€€ES 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 COMP€€ARED 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 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 MAXS€€EC($C1)_!LOCATION OF HIGHEST SEC ADD USED BY SYSTEM_^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 $3739_(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_^1FLD€€OK1 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_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP E€€NDMSG_^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 CYLI€€NDERS_^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. ERROR_^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 TEST_^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*_$TES€€T 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* SETBUF_'SET UP BUFFER_^1_%RTJ* POSITN_'DO VARIA€€BLE 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_%RTJ* 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_^1DSKLU NUM 8_^1_%NUM 96_^1_%ADC BLK96-REF1_^1€€MSB_"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)_*D€€ONT 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)_^1MES7_!NUM $0244_^1_%ADC (START-MES7)_^1_%NU€€M 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 (C€€ELADD-*)_^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 MSG€€6B-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_%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* BITPTR_^1EST1_!LDQ* BITPTR_^1_%LDQ* BITTAB,Q_^1_%SQP EST€€2-*-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_#CK FOR WRITE COMMAND_^1_%LDQ =XMSG19B-MES9_^1_%SAN EST€€4-*-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_^1MSG€€PTR 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_%AD€€C 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 CONVRT_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESA€€GE)_$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 STACK, 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 AVAILABLE 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, CHK€€WRD ERR_^1_%EQU MSG11E(*)_^1MSG12B ALF 5,LOST DATA_^1_%EQU MSG12E(*)_^1MSG13B ALF 5, SEEK ERR_^1_%EQU MSG13E(*)_^1MSG14B ALF 4, ADR ERR_^1_%EQU MSG14E(*)_^1MSG15B ALF 4,DEF TRK_^1_%EQU MSG15E(*)_^1MSG16B ALF 4,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************************************************************************_^1_%SPC 2_^1BLK96 BZS BLK96(96)_^1_%SPC 2_^1_%EQU END(€$*)_^1_%END_]_^__MSG20E(*)_^1MSG21B A$PSCMSTU CSY/ E17 P€1_%NAM SCMSTU_'DECK-ID E17 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_]_^1*_*C O R E_!R E S I D E N T_^1*_]_^1*_$PROGRAM IS RUN ANYWHERE RELOCATABLE_^1_%SPC 2_^1*******€€*****************************************************************_^1*_]_'*_^1*_:TEST DESCRIPTION_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_$CRTSTU IS A DIAGNOSTIC FOR THE 1572-1 IOM SAMPLE TIMING UNIT._^1*_$THIS TEST IS INTENDED TO BE RUN WITHOUT OTHER TESTS EXECUTING._^1*_$THE TEST WILL MONOPOLIZE ALL EXECUTION TIME AT PR€€IORITY LEVEL_^1*_$FOUR EXCEPT DURING ERROR MESSAGE SCHEDULING. THE TEST RUNS_^1*_$UNDER THE CONTROL OF DIAGNOSTIC SUPERVISOR -SCMEXC-. THE USER_^1*_$IS REQUESTED TO INPUT THE TEST PARAMETERS -- TEST SECTIONS TO_^1*_$BE EXECUTED, NUMBER OF TIMES TO EXECUTE THE TEST SEQUENCE,_^1*_$AS FOLLOWS:_^1*_*SECTION 1_!ENABLE/DISABLE TEST_^1*_*SECTION 2_!SAMPLE RATE GENERATOR TEST_^1*_*SECTION €€3_!TIME BASE COMPARISON TEST_^1*_*SECTION 4_!TIME BASE COMPARISON TEST, OPERATOR CONTROLLED_^1*_$AT COMPLETION OF TEST SECTION AND AT EACH ERROR, A CHECK IS_^1*_$MADE FOR STOP FLAG AND IF SET TEST IS TERMINATED. AT THE END_^1*_$OF EACH TEST SEQUENCE, A PASS COUNTER IS UPDATED AND COMPARED_^1*_$AGAINST THE NUMBER OF TIMES REQUESTED BY THE USER. IF EQUAL,_^1*_$THE TEST IS TERMINATED.€€ THE STOP FLAG IS ALSO CHECKED. IF_^1*_$$8000 IS ENTERED FOR THE NUMBER OF EXECUTIONS, THE TEST_^1*_$SEQUENCE WILL BE EXECUTED INDEFINITELY UNTILL HALTED BY A_^1*_$STOP COMMAND_^1_%EJT_]_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*******_"OPERATING INSTRUCTIONS_"********_^1*_]_^1*_]_^1**********************************************€€**************************_^1*_]_^1*_$TESTS DESIRED TESTS SECTIONS_^1*_$RUNS NUMBER OF RUNS_^1*_$INTERRUPT LINE INTERRUPT LINE THAT TIMER IS ON_^1*_$WMES 0-3 STATION ADDRESS_^1*_+4-6 MODULE NO._^1*_+8-10 EQUIPMENT NO._^1*_%11-15 W-FIELD(=0)_^1*_$COMPUTER TYPE 0 - 1784-2_^1*_41 - 1784-1_^1*_42 - 1704014_^1*_43 - 1774_^1*_$LST INT CNT NUMBER OF LST INTERRUPTS_^1*_$MULT A V€€ALUE THATS LOADED INTO THE MULTPLIER REGISTER OF THE SRG_^1*_$SYNC 1 - ENABLE SYNC_^1*_+0 - DISABLE SYNC_^1*_]_^1_%EJT_]_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_]_^1*********_"ERROR MESSAGES_"*********_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_$NO INT RCVD_#NO INTERRUPT €€RECEIVED FROM THE LST OR THE SRG_^1*_$ILLEGAL INT_#RECEIVED A INT FROM THE WRONG PART OF TIMER_^1*_$INT REJECT_#REVEIVED A INT REJECT FROM TIMER_^1*_$EXT REJECT_$RECEIVED A EXT REJECT FROM TIMER_^1*_$VALUE OF SRG MULT NOT EQUAL TO SRG COUNTER_^1*_$INCORRECT TIMER FOR TEST_^1*_]_^1*_]_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_:€€EQUIVALENCES_>*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1_%EQU LPMSK(2)_$START OF LOWER BIT MASKS_^1_%EQU NZERO($12)_"LOCATION OF NEG ZERO + START OF UPPER BIT MSK_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%EQU ONEBIT($23)_!START OF ONE BIT MASKS_^1_%EQU ZROBIT($33)_!START OF ZERO BIT MASKS_^1_%EQU TEN($46)_$LOCATION CONTAI€€NING TEN_^1_%EQU ADISP($EA)_"LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU AMONI($F4)_"LOCATION OF ADDRESS OF MONITOR_^1_%EQU CPUTYP($F6)_!LOCATION OF THE CPU TYPE FLAG_^1_%EQU FRC($200)_#REQUEST WORD "REQUEST CODE" LOCATOR_^1_%EQU FX($100)_$REQUEST WORD "F" BIT LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD "REQUEST PRIORITY" LOCATOR_^1_%EQU FCP($1)_%REQUEST WORD "COMPLETION PRIORITY" €€LOCATOR_^1_%EXT TMRTYP_'TYPE OF TIME IN SYSDAT_^1_%EXT DTIMER_^1_%EXT UPTOD_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATIONS REGION_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTSTU_$TEST MNEMONIC_^1_%ADC END-START_^1_%NUM $3836_(PSR LEVEL_^1*€€_]_^1FLAG_!NUM 0_,COMMUNICATIONS WORD WITH MONITOR_^1*_]_^1*_]_^1INFOIN NUM 0_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1*_]_^1************************************************************************_^1*_]_^1*_]_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7INPUT TEST PARA€€METERS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_$SEE IF CORECT TYPE FOR TEST_^1*_]_^1*_*3= 1572 LST_^1*_*4= 1572 SRG_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1ENTER LDA TMRTYP€€_'GET TYPE OF TIMER_^1_%INA -3_+IS IT A 1572 LST_^1_%SAZ OK_^1_%INA -1_^1_%SAZ OK_+SRG TIMER_^1_%RTJ* (MESAGE)_$INCORRECT TYPE OF TIMER_^1MES2_!NUM $8244_^1_%ADC START-MES2_^1_%NUM 3_^1_%ADC MSG13E-MES2_^1_%ADC MSG13E-MSG13B_^1_%JMP END2_)EXIT TEST_^1OK_#CLR A_,CLEAR COUNTERS AND FLAGS_^1_%STA ERRCTR_^1_%STA* INPERR_^1_%STA* INPCNT_^1_%ENA 1_^1_%STA REPEAT_^1INI1_!RTJ€€* (MESAGE)_$OUTPUT INITIAL MESSAGE_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG2E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$INPUT REQUEST PARAMETERS_^1_%SQP INI2_)TTY ERRORS_^1_%RAO* INPCNT_^1_%LDA* INPCNT_'HAS THER BEEN THREE INPUT ERRORS_^1_%INA -3_^1_%SAP GTOUT_^1_%JMP* INI1_)YES TRY AGAIN_^1GTOUT JMP END3_^1INI2_!RTJ* (GETFLD)_^1_%STA* TESTS_^1_%RTJ (GETFLD)_^1_%RTJ* (RD€€ECHX)_^1_%STA* RUNS_^1*_]_^1************************************************************************_^1*_]_^1*_$ENTER INTERRUPT LINE, WMES CODE, COMPUTER TYPE_^1*_]_^1************************************************************************_^1*_]_^1INI2A RTJ* (MESAGE)_^1MES3_!NUM $8144_^1_%ADC MSG14B-MES3_^1_%ADC MSG14E-MSG14B_^1*_]_^1_%ENQ 0_^1_%RTJ* (INFOIN)_^1_%SQP INI2B_(T€€TY ERRORS_^1_%JMP* INI2A_(YES_^1*_]_^1INI2B RTJ* (GETFLD)_^1_%INQ -1_^1_%STA INTLNE,Q_^1_%INQ -2_^1_%SAZ INI4_^1_%JMP* INI2B_^1*_]_^1*_]_^1INTLNE NUM 0_,INTERRUPT LINE_^1WEMS_!NUM 0_,WEMS WORD OF TIMER_^1TYPE_!NUM 0_,COMPUTER TYPE FOR DELAY ROUTINE_^1TRPSAV NUM 0_,TEMP HOLD FOR ORGINAL TRAP ADDRESS_^1INPCNT NUM 0_,COUNTER FOR INPUT ERRORS_^1*_]_^1*_]_^1INI4_!LDA* WEMS_)SE€€T UP PROPER EQUIPMENT ADDRESSES_^1_%AND- ZROBIT+7_^1_%STA DADR_)DATA WMES_^1_%EOR- ONEBIT+7_^1_%STA FADR_)FUNCTION/STATUS WMES_^1INI5_!RTJ* HERE_^1HERE_!NUM 0_^1_%LDQ* INTLNE_'SET INT LINE NO. IN ALL SEL AND REL REQUESTS_^1************************************************************************_^1_%QLS 2_,MULT BY 4 GET TO TRAP AREA FOR TIMER_^1_%LDQ+ $103,Q_'LOAD WITH INTERRUPT€€ RESPONSE ROUTINE ADDRESS_^1_%STQ* TRPSAV_'SAVE ORGINAL INTERRUPT RESPONSE ADDRESS_^1************************************************************************_^1_%LDQ FADR_^1_%ENA 9_,ACKNOWLEDGE INTERRUPTS AND DISABLE_^1_%RTJ OUTPUT_^1_%JMP* BEGIN_^1*_]_^1************************************************************************_^1*_]_^1*_$SELECT NEW LINE FOR TEST 1 AND 2 ONLY_^1*_€€]_^1************************************************************************_^1*_]_^1SEXLIN NUM 0_^1_%LDA =XINTN1-HERE INTERRUPT RESPONSE ROUTINE FOR TEST 1 AND 2_^1_%ADD* HERE_^1_%STA* INTLOC+1_^1_%IIN 0_^1_%LDQ INTLNE_'LOAD INTERRUPT LINE_^1_%QLS 2_^1INTLOC LDA =N0_^1_%STA+ $103,Q_^1_%JMP* (SEXLIN)_^1*_]_^1TESTS NUM 0_^1RUNS_!NUM 0_^1*_]_^1LSTINT NUM 0_^1MULT_!NUM 0_^€€1SYNC_!NUM 0_^1*_]_^1INPERR NUM 0_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_$REQUEST PARAMETERS FOR TEST 3 AND 4_^1*_]_^1************************************************************************_^1*_]_^1PARAM NUM 0_^1PARAM2 RTJ* (MESAGE)_^1MES4_!NUM $8144_^1_%ADC MSG4B-MES4_^1_%ADC MSG4E-MSG4B_^1_%ENQ 0_^1_%RTJ* (INFOIN)€€_^1_%SQP PRM2A_(TTY ERRORS_^1_%JMP* PARAM2_'YES_^1PRM2A RTJ* (GETFLD)_$GET LST INT CNT,MULT,SYNC_^1_%INQ -1_^1_%STA* LSTINT,Q_^1_%INQ -2_^1_%SQZ PRM2B-*-1_^1_%JMP* PRM2A_^1PRM2B LDA* LSTINT_'CONVERT NO. OF INTERRUPTS TO HEX_^1_%RTJ (RDECHX)_^1_%STA* LSTINT_^1_%JMP* (PARAM)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_1SECT€€ION 1 -- ENABLE/DISABLE TEST_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TESTS_^1_%AND- ONEBIT+1_$IS TEST ONE REQUESTED_^1_%SAN TEST1-*-1_^1_%JMP T2CHK_^1TEST1 LDA =A1_*YES, DO IT_^1_%STA TNUM_)TEST NUMBER_^1_%RTJ SEXLIN_'SELECT INTERRUPT RESPONSE ROUTINE FOR 1 AND 2_^1_%CLR A_^1_%STA INTST_(CLEAR INTERRUPT€€ FLAG_^1_%LDQ DADR_^1_%ENA 1_^1_%RTJ OUTPUT_'LOAD MULTIPLIER WITH ONE_^1_%LDQ FADR_^1_%ENA 2_^1_%RTJ OUTPUT_'ENABLE LST INTERRUPT_^1_%RTJ DELAY_^1_%SQN T1CN1_(IS H/W STATUS IN Q_^1_%ENQ 0_^1_%RTJ NINMSG_'NO INTERRUPT RECEIVED_^1_%NUM 2_^1_%JMP* T1CN2_^1T1CN1 SQP T1CN2_(LST Q=+, SRG Q=-_^1_%ENQ 2_^1_%RTJ IINMSG_'INTERRUPT FROM WRONG DEVICE_^1_%NUM 2_^1T1CN2 CLR A€€_^1_%STA INTST_^1_%RTJ DELAY_^1_%SQZ T1CN3-*-1_#CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 9_^1T1CN3 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA 4_^1_%RTJ OUTPUT_'ENABLE LST SYNC_^1_%RTJ* DELAY_^1_%SQZ T1CN4-*-1_#CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTE€€RRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 4_^1T1CN4 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA 6_^1_%RTJ OUTPUT_'ENABLE LST INTERRUPT AND SYNC_^1_%RTJ* DELAY_^1_%SQN T1CN5-*-1_^1_%ENQ 0_^1_%RTJ NINMSG_'NO INTERRUPT RECEIVED_^1_%NUM 6_^1_%JMP* T1CN6_^1T1CN5 SQP T1CN6-*-1_^1_%ENQ 2_^1_%RTJ IINMSG_'INTERRUPT €€FROM WRONG DEVICE_^1_%NUM 6_^1T1CN6 CLR A_^1_%STA* INTST_^1_%RTJ* DELAY_^1_%SQZ T1CN7-*-1_#CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ* IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 9_^1T1CN7 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA $10_^1_%RTJ OUTPUT_'ENABLE SRG INTERRUPT_^1_%RTJ* DELAY_^1_%SQN T1CN8-*-1_€€^1_%ENQ 2_^1_%RTJ* NINMSG_'NO INTERRUPTS RECEIVED_^1_%NUM $10_^1_%JMP* T1CN9_^1T1CN8 SQM T1CN9-*-1_^1_%ENQ 0_^1_%RTJ* IINMSG_'INTERRUPT FROM WRONG DEVICE_^1_%NUM $10_^1T1CN9 CLR A_^1_%STA* INTST_^1_%RTJ* DELAY_^1_%SQZ T1CN10-*-1_"CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ* IINMSG_'OUTPUT ERROR MESSA€€GE_^1_%NUM 9_^1T1CN10 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA $20_^1_%RTJ OUTPUT_'ENABLE SRG SYNC_^1_%RTJ* DELAY_^1_%SQZ T1CN11-*-1_"CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE_^1_%INA -2_^1_%TRA Q_^1_%RTJ* IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM $20_^1T1CN11 CLR A_^1_%STA* INTST_^1_%LDQ* FADR_^1_%ENA $30_^1_%RTJ OUTPUT_'ENABLE €€SRG INTERRUPT AND SYNC_^1_%RTJ* DELAY_^1_%SQN T1CN12-*-1_^1_%ENQ 2_^1_%RTJ* NINMSG_'NO INTERRUPT RECEIVED_^1_%NUM $30_^1_%JMP* T1CN13_^1T1CN12 SQM T1CN13-*-1_^1_%ENQ 0_^1_%RTJ* IINMSG_'INTERRUPT FROM WRONG DEVICE_^1_%NUM $30_^1T1CN13 CLR A_^1_%STA* INTST_^1_%RTJ* DELAY_^1_%SQZ T1CN14-*-1_"CHECK FOR NO INTERRUPT_^1_%ENA 2_^1_%SQM 1_,INTERRUPT WHEN NOT EXPECTED, FIND DEVICE€€_^1_%INA -2_^1_%TRA Q_^1_%RTJ* IINMSG_'OUTPUT ERROR MESSAGE_^1_%NUM 9_^1T1CN14 LDQ* FADR_^1_%ENA 9_^1_%RTJ OUTPUT_'ACKNOWLEDGE AND DISABLE INTERRUPTS_^1_%RTJ STOPCK_^1_%JMP* T2CHK_^1*_]_^1FADR_!NUM 0_,FUNCTION/STATUS WMES WORD_^1DADR_!NUM 0_,DATA WMES WORD_^1INTST NUM 0_,FLAG TO DETERMINE IF THERE WAS AN INTERRUPT_^1*_]_^1**************************************************€€**********************_^1*_]_^1*_$DELAY ROUTINE_#16.7 MILL SEC MAX FOR INTERRUPT_^1*_]_^1************************************************************************_^1*_]_^1DELAY NUM 0_^1_%LDQ TYPE_)LOAD WITH COMPUTER TYPE_^1_%LDA COMTYP,Q_$PICK UP DELAY TIME_^1_%STA* DLYCNT_^1CKLST LDQ* INTST_^1_%SQN DLEXIT-*-1_"HAS INTERRUPT OCCURRED_^1_%RAO* DLYCNT_'NO_^1_%LDA* DLYCNT_'HAS TI€€ME EXPIRED_^1_%SAM DLEXIT-*-1_^1_%JMP* CKLST_(NO_^1DLEXIT JMP* (DELAY)_%YES_^1*_]_^1DLYCNT NUM 0_^1*_]_^1*_$DELAY TABLE FOR DIFFEREENT TYPES OF COMPUTERS_^1*_]_^1*_$DELAY = $8000-(1704/14 DELAY)*ONE PASS OF LOOP FOR 1704/14_^1*_]_^1*_$DELAY TIME= $8000- (DELAY/ ONE PASS BY EACH COMPUTER TYPE)_^1*_]_^1COMTYP NUM $5F72_(1784-2 COMPUTER_^1_%NUM $6A46_(1784-1 COMPUTER_^1_%NUM $6€€E3E_(1704/14 COMPUTER_^1_%NUM $771F_(1774 SC COMPUTER_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_6INTERRUPT ERROR ROUTINES_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1NINMSG 0_"0_,NO INTERRUPT RECEIVED_^1_%LDA* LST,Q_(SET DEVICE NAME_^1_%STA HTYPE1_^1_%LDA* LST+1,Q_^1_%€€STA HTYPE1+1_^1_%LDA =XMSG6B-MES5 SET TYPE OF MESSAGE_^1FRMIIN STA* INTERR_^1_%RTJ CHKFLG_'CHECK STOP AND NO PRINTOUT FLAGS_^1_%JMP* NIN1_^1_%LDA* (NINMSG)_$GET FUNCTION_^1_%RTJ (RHXASC)_^1_%ADC (FNCASC-*)_^1_%RTJ (MESAGE)_^1MES5_!NUM $0444_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1INTERR ADC MSG6B-MES5_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG8B-€€MES5_^1_%ADC MSG8E-MSG8B_^1NIN1_!RAO* NINMSG_^1_%JMP* (NINMSG)_^1*_]_^1IINMSG 0_"0_,ILLEGAL INTERRUPT RECEIVED_^1_%LDA* LST,Q_(SET DEVICE NAME_^1_%STA HTYPE2_^1_%LDA* LST+1,Q_^1_%STA HTYPE2+1_^1_%LDA* IINMSG_^1_%STA* NINMSG_^1_%LDA =XMSG7B-MES5 SET TYPE OF MESSAGE_^1_%JMP* FRMIIN_^1LST_"ALF 2, LST_^1_%ALF 2, SRG_^1_%EJT_]_^1***************************************************€€*********************_^1*_]_'*_^1*_.SECTION 2 -- SAMPLE RATE GENERATOR TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CHK LDA TESTS_^1_%AND- ONEBIT+2_$IS TEST TWO REQUESTED_^1_%SAN TEST2-*-1_^1_%JMP T3CHK_^1TEST2 LDA =A2_*YES, DO IT_^1_%STA TNUM_^1_%RTJ SEXLIN_'SELECT INTERRUPT RESPONSE ROUTINE FOR 1 AND 2_^1_%LDQ*€€ DADR_)DATA ADDRESS_^1_%ENA 0_^1_%RTJ OUTPUT_'ZERO MULTIPLIER_^1_%RTJ INPUT_(INPUT COUNTER CONTENTS_^1_%SAZ T2CN1-*-1_#CHECK FOR DATA ERROR_^1_%STA* DATA1_^1_%ENQ 1_^1_%RTJ* DERMSG_'OUTPUT DATA ERROR MESSAGE_^1_%NUM 0_^1DATA1 NUM 0_^1T2CN1 LDQ* DADR_^1_%SET A_^1_%RTJ OUTPUT_'OUTPUT $FFFF TO MULTIPLIER_^1_%RTJ INPUT_(INPUT COUNTER CONTENTS_^1_%EOR- NZERO_^1_%SAZ T2CN2-*€€-1_#CHECK FOR DATA ERROR_^1_%STA* DATA2_^1_%INA -8_^1_%SAM T2CN2-*-1_#IS DIFFERENCE LESS THAN 8_^1_%ENQ 1_^1_%RTJ* DERMSG_'OUTPUT DATA ERROR MESSAGE_^1_%NUM $FFFF_^1DATA2 NUM 0_^1T2CN2 ENA 2_^1T2CN2A STA* DATA3A_'CHECK SRG COUNTER/INTERRUPT_^1_%CLR Q_^1_%STQ* INTST_^1_%LDQ* DADR_^1_%RTJ OUTPUT_'SET MULTIPLIER_^1_%LDQ* FADR_^1_%ENA $10_^1_%RTJ* OUTPUT_'ENABLE SRG INTERRUP€€T_^1_%RTJ* DELAY_^1_%SQN T2CN3-*-1_#CHECK FOR INTERRUPT RECEIVED_^1_%ENQ 2_^1_%RTJ* NINMSG_'NO INTERRUPT RECEIVED_^1_%NUM $10_^1_%ENQ 0_^1_%RTJ* DERMSG_'MULTIPLIER VALUE_^1DATA3A NUM 0_^1_%NUM 0_^1_%JMP* T2CN4_^1T2CN3 SQM T2CN4-*-1_^1_%ENQ 0_^1_%RTJ* IINMSG_'INTERRUPT FROM WRONG DEVICE_^1_%NUM $10_^1T2CN4 LDA* DATA3A_^1_%INA -8_^1_%SAP T2CN5-*-1_^1_%LDA* DATA3A_^1_%ALS€€ 1_^1_%JMP* T2CN2A_^1T2CN5 ENA $10_*CHECK COUNTER INCREMENTING_^1T2CN5A STA* DATA4A_^1_%LDQ =N$6C77_^1_%STQ* DLPS_^1_%LDQ DADR_^1_%RTJ* OUTPUT_'OUTPUT MULTIPLIER VALUE_^1INLP_!RTJ* INPUT_(INPUT COUNTER VALUE_^1_%STA* DATA4B_^1_%SUB* DATA4A_^1_%SAM T2CN6-*-1_^1_%RAO* DLPS_)INCREMENT DELAY LOOP_^1_%LDA* DLPS_^1_%SAM T2CN7-*-1_#DELAY COMPLETED, ERROR_^1_%JMP* INLP_^1T2CN6 INA €€ 8_,IS DIFFERENCE GT 8_^1_%SAP T2CN8-*-1_^1T2CN7 ENQ 1_,YES_^1_%RTJ* DERMSG_'DATA ERROR MESSAGE_^1DATA4A NUM 0_^1DATA4B NUM 0_^1T2CN8 LDA* DATA4A_'CHECK FOR ALL BITS DONE_^1_%SAM T2CN9-*-1_^1_%ALS 1_^1_%JMP* T2CN5A_^1T2CN9 LDQ FADR_)DISABLE INTERRUPT_^1_%ENA 9_^1_%RTJ* OUTPUT_^1_%JMP T3CHK_^1DLPS_!NUM 0_^1_%EJT_]_^1******************************************************€€******************_^1*_]_'*_^1*_5DATA ERROR OUTPUT ROUTINE_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1DERMSG 0_"0_^1_%LDA =XMSG9EE-MSG9B_^1_%SQZ DER1-*-1_$CHECK FOR SHORT MSG_^1_%LDA =XMSG9E-MSG9B_^1DER1_!STA* MSGLNG_^1_%LDA* (DERMSG)_$MULTIPLIER VALUE_^1_%RAO* DERMSG_^1_%RTJ (RHXASC)_^1_%ADC (DOUT-*)_^1_%RTJ* CHKFLG_'CH€€ECK FOR STOP OR NO PRINTOUT FLAGS_^1_%JMP* DER2_^1_%LDA* (DERMSG)_$COUNTER VALUE_^1_%RTJ (RHXASC)_^1_%ADC (DIN-*)_^1_%RTJ (MESAGE)_^1MES6_!NUM $0344_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG5B-MES6_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG9B-MES6_^1MSGLNG ADC MSG9E-MSG9B_^1DER2_!RAO* DERMSG_^1_%JMP* (DERMSG)_^1_%SPC 2_^1************************************************************€€************_^1*_]_'*_^1*_/INTERRUPT RESPONSE FOR TESTS 1 AND 2_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INTN1 LDQ FADR_^1_%RTJ* INPUT_^1_%STA INTST_(GET H/W STATUS_^1_%ENA 9_^1_%RTJ* OUTPUT_'ACKNOWLEDGE AND DISABLE INTERRUPT_^1_%JMP- (ADISP)_^1_%EJT_]_^1******************************************************************€€******_^1*_]_'*_^1*_2CHECK STOP AND NO PRINTOUT FLAGS_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CHKFLG 0_"0_^1_%RAO* ERRCTR_^1_%LDA FLAG_)CHECK STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ CHKF1-*-1_^1_%JMP ENDMSG_^1CHKF1 LDA FLAG_^1_%AND- ONEBIT+7_$CHECK NO PRINTOUT FLAG_^1_%SAN CHKF2-*-1_^1_%RAO* CHKFLG_^1_%LDA REPEAT_'CONVERT€€ CURRENT PASS TO ASCII_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1CHKF2 JMP* (CHKFLG)_^1_%SPC 2_^1STOPCK 0_"0_,CHECK STOP FLAG ONLY_^1_%LDA FLAG_^1_%AND- ONEBIT_^1_%SAZ STOPC1-*-1_^1_%JMP ENDMSG_^1STOPC1 JMP* (STOPCK)_^1*_]_^1ERRCTR NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_4COMMON INP€€UT/OUTPUT ROUTINES_4*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1OUTPUT 0_"0_^1_%IIN 0_^1_%OUT 3_^1_%EIN 0_^1_%JMP* (OUTPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXTREJ_^1*_]_^1INPUT 0_"0_^1_%IIN 0_^1_%CLR A_^1_%INP 3_^1_%EIN 0_^1_%JMP* (INPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXTREJ_^1*_]_^1INTREJ 0_"0_,PROCESS REJECTS_^1_%STA* ASAVE_^1_%S€€TQ* QSAVE_^1_%ENQ -4_^1_%LDA* (INTREJ),Q_"GET I/O INSTRUCTION_^1_%LDQ =AIN_^1_%JMP* FRMINT_^1EXTREJ 0_"0_,EXTERNAL REJECT ENTRY_^1_%STA* ASAVE_^1_%STQ* QSAVE_^1_%ENQ -5_^1_%LDA* (EXTREJ),Q_"GET I/O INSTRUCTION_^1_%LDQ =AEX_^1FRMINT STQ REJTYP_^1_%RTJ (RHXASC)_^1_%ADC (XREG-*)_^1_%RTJ- (AMONI)_%SCHEDULE DOWN TO LEVEL 4 IN CASE REJECT_^1SCHREF ADC 9*FRC+FX+4*FCP_"DURING INTER€€RUPT RESPONSE_^1_%ADC FRMSCH-SCHREF_^1_%JMP- (ADISP)_^1FRMSCH LDA* ASAVE_^1_%RTJ (RHXASC)_^1_%ADC (AREG-*)_^1_%LDA* QSAVE_^1_%RTJ (RHXASC)_^1_%ADC (QREG-*)_^1_%LDA TNUM_)IS TEST NUM = 0_^1_%SAN 1_^1_%JMP* RJEXIT_'YES DONT PRINT MESSAGE_^1_%RTJ* CHKFLG_'CHECK STOP AND NO PRINTOUT FLAGS_^1_%JMP* RJEXIT_^1_%RTJ (MESAGE)_^1MES7_!NUM $0344_^1_%ADC (START-MES7)_^1_%NUM 3_^1_%A€€DC MSG5B-MES7_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG10B-MES7_^1_%ADC MSG10E-MSG10B_^1RJEXIT JMP ENDTST_^1ASAVE NUM 0_^1QSAVE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/SECTION 3 -- TIME BASE COMPARISON TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CHK LDA €€TESTS_^1_%AND- ONEBIT+3_$IS TEST THREE REQUESTED_^1_%SAN TEST3-*-1_^1_%JMP* T4CHK_^1TEST3 LDA =A3_*YES, DO IT_^1_%STA TNUM_^1_%LDA REPT_)LOAD WITH TEST 3 REPEAT FLAG_^1_%SAN TEST3A_'SEE IF SECOND RUN IF SO DONT ASK FOR PARMS_^1_%RAO* REPT_)SET TEST 3 ONE TIME THROUGH FLAG_^1T3_#RTJ PARAM_(INPUT SECOND SET OF PARM FOR TEST 3 AND 4_^1TEST3A RTJ* TBASE_(GO TO TIME BASE ROUTINE_€€^1_%LDA SYNC_^1_%SAM TEST3B-*-1_"IF SYNC IS NEGATIVE DO NOT PRINT RESULTS_^1_%RTJ* PRESLT_^1TEST3B JMP* T4CHK_^1*_]_^1*_]_^1REPT_!NUM 0_,SECOND RUN FLAG FOR TEST 3_^1*_]_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_#SECTION 4 -- TIME BASE COMPARISON TEST, OPERATOR CONTROLLED_$*_^1*_]_'*_^1**************************************€€**********************************_^1_%SPC 2_^1T4CHK LDA TESTS_^1_%AND- ONEBIT+4_$IS TEST FOUR REQUESTED_^1_%SAN TEST4-*-1_^1_%JMP ENDTST_^1TEST4 LDA =A4_*YES, DO IT_^1_%STA TNUM_^1_%RTJ PARAM_(INPUT SECOND SET OF PARM FOR TEST 3 AND 4_^1_%RTJ* TBASE_(GO TO TIME BASE ROUTINE_^1_%LDA SYNC_^1_%SAM TEST4B_'IF SYNC IS NEG DONT PRINT RESULTS_^1_%RTJ* PRESLT_^1TEST4B JMP ENDT€€ST_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0PRINT TEST RESULTS FOR TESTS 3 AND 4_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1PRESLT 0_"0_^1_%LDA* LSTCNT_'LST NUMBER OF INTERRUPTS_^1_%SAZ PRES1-*-1_^1_%INA -1_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1PRES1 RTJ (RHXASC)_^1_€€%ADC (LSTASC-*)_^1_%LDA* SRGCNT_'SRG NUMBER OF INTERRUPTS_^1_%SAZ PRES2-*-1_^1_%INA -1_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1PRES2 RTJ (RHXASC)_^1_%ADC (SRGASC-*)_^1_%LDA REPEAT_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1_%RTJ (MESAGE)_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG5B-MES8_^1_%ADC MSG5E-MSG5B_^1_%ADC MSG11B-MES8€€_^1_%ADC MSG11E-MSG11B_^1_%JMP* (PRESLT)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:TIME BASE ROUTINE_9*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TBASE 0_"0_^1_%IIN_]_^1_%LDA =XINTN3-HERE SET INT RESPONSE FOR TIME BASE ROUTINE_^1_%ADD HERE_^1_%LDQ INTLNE_'LOAD WITH€€ INTERRUPT LINE_^1_%QLS 2_,MULT BY 4_^1_%STA+ $103,Q_'SELECT INTERRUPT RESPONSE FOR TEST 3 AND 4_^1_%CLR A_^1_%STA* LSTCNT_'CLEAR INTERRUPT COUNTERS_^1_%STA* SRGCNT_^1_%STA* OLVAL_^1_%LDQ SYNC_^1_%QLS 13_^1_%SQP TB1-*-1_^1_%INA $20_*ENABLE SRG SYNC_^1TB1_"QLS 1_^1_%SQP TB2-*-1_^1_%INA 4_,ENABLE LST SYNC_^1TB2_"INA $12_*ENABLE SYNC AND INTERRUPTS_^1_%STA* SYNCEN_^1_%LDQ D€€ADR_^1_%LDA MULT_^1_%RTJ OUTPUT_'SET MULTIPLIER CONTENTS_^1TB3_"LDQ FADR_^1_%ENA 2_^1_%RTJ OUTPUT_'ENABLE LST INTERRUPT_^1TB4_"LDQ TYPE_)LOAD WITH COMPUTER TYPE_^1_%LDA DALTIM,Q_$LOAD WITH DELAAY TIME COUNTS_^1_%STA* DLYINT_^1TB5_"LDA* OLVAL_^1_%SUB* LSTCNT_'HAS THERE BEEN A CHANGE_^1_%SAP TB6-*-1_^1_%LDA* LSTCNT_^1_%STA* OLVAL_(SAVE CURRENT COUNT_^1_%JMP* TB4_*RESET DELAY_€€^1TB6_"SNO TB6A-*-1_$CLEAR OVERFLO CONDITION_^1TB6A_!RAO* DLYINT_'IF THIS INST. CAUSES AN OVERFLO DELAY HAS EXP._^1_%SNO TB7-*-1_%HAS DELAY EXPIRED_^1_%JMP* (TBASE)_%YES, RETURN TO CALLER_^1TB7_"JMP* TB5_*NO, CONTINUE DELAY_^1*_]_^1LSTCNT NUM 0_^1SRGCNT NUM 0_^1OLVAL NUM 0_^1DLYINT NUM 0_^1SYNCEN NUM 0_^1ACKN_!NUM 0_^1*_]_^1*_]_^1*_$DELAY TIMES FOR TESTS 3 AND 4_^1*_]_^1*€€_]_^1DALTIM NUM $5668_(1784-2 COMPUTER_^1_%NUM $68EA_(1784-1 COMPUTER_^1_%NUM $6C77_(1704/14 COMPUTER_^1_%NUM $77D7_(1774 SC COMPUTER_^1*_]_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_/INTERRUPT RESPONSE FOR TESTS 3 AND 4_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1I€€NTN3 LDQ FADR_)INTERRUPT ENTRY_^1_%RTJ INPUT_(INPUT STU STATUS_^1INTN31 SAP INTN32-*-1_"IS SRG INT SET_^1_%RAO* SRGCNT_'YES, UPDATE COUNTER_^1_%INA 8_,ADD BIT TO ACKN SRG_^1INTN32 ALS 1_^1_%SAP INTN33-*-1_"IS LST INT SET_^1_%RAO* LSTCNT_'YES UPDATE COUNTER_^1_%INA 2_,ADD BIT TO ACKN LST_^1INTN33 ALS 1_,CLEAR STATUS BITS_^1_%ARS 2_,CORRECT BIT POSITIONS_^1_%EOR* SYNCEN_'AD€€D ENABLE BITS_^1_%STA* ACKN_^1_%LDA LSTINT_'HAS NUMBER OF INTERRUPTS REQUESTED OCCURRED_^1_%SUB* LSTCNT_^1_%SAP INTN34-*-1_^1_%ENA 9_,YES, ACKN AND DISABLE LST INT_^1_%JMP* INTN35_^1INTN34 LDA* ACKN_)NO, ACKN AND ENABLE_^1INTN35 LDQ FADR_^1_%RTJ OUTPUT_'OUTPUT FUNCTION SELECTED_^1_%JMP- (ADISP)_^1_%SPC 2_^1**********************************************************************€€**_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST LDA FLAG_)CHECK STOP FLAG_^1_%AND- ONEBIT_^1_%SAZ END0_^1_%JMP* ENDMSG_^1END0_!LDA RUNS_^1_%SAZ ENDMSG-*-1_"CHECK FOR ZERO RUNS REQUESTED_^1_%SAM END1-*-1_$CHECK FOR INFINITE RUNS REQUESTED_^1_%SUB* REPEAT_^1_%SAZ ENDMSG_'CHECK FOR N€€UM RUNS REQUESTED COMPLETED_^1END1_!RAO* REPEAT_^1_%JMP BEGIN_^1_%LDQ INTLNE_^1_%QLS 2_^1_%LDA TRPSAV_'LOAD ORGINAL TRAP ADDRESS_^1_%IIN_]_^1_%STA+ $103,Q_^1_%EIN_]_^1*_]_^1************************************************************************_^1*_]_^1*_$ENABLE LST AND SRG_^1*_]_^1************************************************************************_^1*_]_^1ENDMSG LDQ FAD€€R_^1_%LDA =N$0012_%ENABLE LST,SRG_^1_%OUT 1_,ENABLE TIMER_^1_%NOP 0_^1*_]_^1*_$RESTART THE DIAGNOSTIC TIMER AND TIME-OF-DAY PROGRAM_^1*_]_^1_%LDA* RSTRTA_^1_%EOR- LPMSK+15_^1_%SAN 1_^1_%JMP* STOD_)SKIP IF DTIMER NOT PRESENT_^1_%RTJ- ($F4)_^1_%NUM $5206_^1RSTRTA ADC DTIMER_^1*_]_^1STOD_!LDA* TTRSTR_'START TIME-OF-DAY PROGRAM_^1_%EOR- LPMSK+15_^1_%SAN 1_^1_%JMP* END2_)NOT PRE€€SENT_^1_%RTJ- ($F4)_^1_%NUM $5206_^1TTRSTR ADC UPTOD_^1*_]_^1END2_!LDA* REPEAT_^1_%RTJ (ROCDEC)_^1_%NUM 0_^1_%NUM 0_^1_%NUM 0_^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%RTJ (MESAGE)_^1MES9_!NUM $8244_^1_%ADC MSG12B-MES9_^1_%ADC MSG12E-MSG12B_^1_%ADC MSG3B-MES9_^1_%ADC MSG3E-MSG3B_^1_%L€€DA FLAG_^1_%AND- ONEBIT+6_$CHECK FOR STOP TO RE-ENTER PARAMETERS_^1_%SAZ END3-*-1_^1_%LDA- ONEBIT+15_#YES, RESET FLAGS EXCEPT BUSY_^1_%STA FLAG_^1_%JMP ENTER_^1END3_!STA FLAG_^1_%LDA START+1_%CLEAR TEST NAME FROM PGM STACK_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_$RELEASE CORE_^1_%ADC (START-*)_^1REPEAT NUM 0_^1_%SPC 2_^1**********************************************************€€**************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF $,BEGIN 1572-1 STU ** OFF-LINE ** TEST$_^1_%NUM $D00_^1_%EQU MSG1E(*)_^1MSG2B ALF 5,TESTS,RUNS_^1_%EQU MSG2E(*)_^1MSG3B ALF $,_!AUTOLOAD SYSTEM TO ASSURE CORRECT OPERATION$_^1_%EQU MSG3E(*)_^1MSG4B ALF 11,LST INT CN€€T,MULT,SYNC_^1_%EQU MSG4E(*)_^1MSG5B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 2,RUN_^1ERRPAS NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 9,_#NO INT RCVD,_^1_%EQU MSG6E(*)_^1_%EQU HTYPE1(MSG6B)_^1MSG7B ALF 9,_#ILLEGAL INT,_^1_%EQU MSG7E(*)_^1_%EQU HTYPE2(MSG7B)_^1MSG8B ALF 6, FUNCTION =_^1FNCASC NUM 0,0_^1_%EQU MSG8E(*)_^1MSG9B ALF 8, DATA TO MULT =_^1DOUT_!NUM 0,0_^1_%EQU €€MSG9EE(*)_^1_%ALF 9, DATA FROM CNTR =_^1DIN_"NUM 0,0_^1_%EQU MSG9E(*)_^1MSG10B ALF $,_"TERNAL REJECT$_^1_%EQU REJTYP(MSG10B+1)_^1_%ALF 3, Q =_^1QREG_!NUM 0,0_^1_%ALF 3, A =_^1AREG_!NUM 0,0_^1_%ALF 3, X =_^1XREG_!NUM 0,0_^1_%EQU MSG10E(*)_^1MSG11B ALF 11, TIME BASE COMP RSLTS_^1LSTASC NUM 0,0_^1_%ALF 5, LST INTS_^1SRGASC NUM 0,0_^1_%ALF 5, SRG INTS_^1_%EQU MSG11€LE(*)_^1MSG12B ALF 11,END 1572-1 STU TEST,_^1RUNASC NUM 0,0_^1_%ALF 3, RUNS_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%NUM $D00_^1_%EQU MSG12E(*)_^1*_]_^1MSG13B ALF $, INCORRECT TIMER FOR TEST$_^1_%EQU MSG13E(*)_^1MSG14B ALF $,INTERRUPT LINE, WEMS CODE FOR TIMER,COMPUTER TYPE$_^1_%EQU MSG14E(*)_^1_%EQU END(*)_^1_%END 0_^__LPSCMLLV CSY/ E18 P€1_%NAM SCMLLV_'DECK-ID E18 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^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*_$MMTREG IS A DIAGNOSTIC EXERCISER FOR THE 1553/1544 DIGITAL_^1*_$I/O SUBSYSTEM. IT OPERATES UNDER THE CONTROL OF THE DIAG-_^1*_$NOSTIC SUPERVISOR "SCMEXC". BEFORE TEST EXEC€€UTION IS STARTED, THE_^1*_$USER IS REQUESTED TO INPUT THE TEST PARAMETERS -- LOGICAL UNIT OF_^1*_$THE 1553, LOGICAL UNIT OF THE 1544, TEST SECTIONS TO BE EXECUTED_^1*_$AND THE NUMBER OF TIMES THE TEST SEQUENCE IS TO BE EXECUTED._^1*_$LOGICAL UNIT 0 IS USED IF THIS IS A LOCAL TEST. LOGICAL_^1*_$UNIT NON 0 INDICATES TO THE TEST THIS IS A REMOTE TEST._^1*_RTHE LOGICAL UNIT IS_^1*_$CHE€€CKED FOR ITS VALIDITY. IF IVALID, THE USER IS REQUESTED_^1*_$TO RE-ENTER THE TEST PARAMETERS. IF THE LOGICAL UNIT IS_^1*_$ENTERED INCORRECTLY THREE TIMES, THE TEST IS TERMINATED._^1*_$NEXT THE USER IS REQUESTED TO INPUT THE CABLING INFORMATION._^1*_$(IE. WHICH 1553 CHNLS ARE CABLED TO WHICH 1544 CHNLS) IF NO_^1*_$CHANNEL INFORMATION IS ENTERED, THE REQUEST IS REPEATED._^1*_$ONLY 16€€ SETS OF CHANNELS CAN BE TESTED AT ONE TIME. MMTREG_^1*_$IS DIVIDED INTO FIVE TEST SECTIONS (TESTS) AS FOLLOWS:_^1*_*SECTION 1_!$FFFF ON ONE CHANNEL, ALL OTHERS $0000_^1*_*SECTION 2_!$0000 ONE ONE CHANNEL, ALL OTHERS $FFFF_^1*_*SECTION 3_!USER INPUT ON ONE CHANNEL, ALL OTHERS $0000_^1*_*SECTION 4_!LEFT SHIFTING ONE BIT ON ONE CHANNEL,_^1*_6ALL OTHERS $0000_^1*_*SECTION 5_!LEFT SHIF€€TING ZERO BIT ON ONE CHANNEL,_^1*_6ALL OTHERS $FFFF_^1*_$THE SECTION NUMBER IS EQUIVALENT TO THE BIT NUMBER,_^1*_1BIT 1 = 1 DO SECTION 1_^1*_1BIT 2 = 1 DO SECTION 2_^1*_1BIT 3 = 1 DO SECTION 3_^1*_1BIT 4 = 1 DO SECTION 4_^1*_1BIT 5 = 1 DO SECTION 5_^1*_$IF SECTION THREE IS REQUESTED, THE USER IS REQUESTED TO_^1*_$INPUT THE SPECIAL PATTERN TO BE USED WHEN THAT SECTION IS_^1*_$EXECUT€€ED. AFTER EACH I/O OPERATION THE HARDWARE IS CHECKED_^1*_$FOR ERRORS. IF ERRORS OCCURRED, A MESSAGE IS OUTPUT. AFTER_^1*_$THE COMPLETION OF THE INPUT OPERATION, A DATA COMPARE CHECK_^1*_$IS DONE IF NO HARDWARE ERRORS OCCURRED. A MESSAGE IS OUTPUT_^1*_$FOR EACH DATA ERROR. AT THE END OF EACH TEST SEQUENCE, A_^1*_$PASS COUNTER IS UPDATED AND COMPARED AGAINST THE NUMBER OF_^1*_$TIMES €€REQUESTED BY THE USER. IF EQUAL, THE TEST IS TERM-_^1*_$INATED. THE STOP FLAG IS ALSO CHECKED AND IF SET THE TEST_^1*_$IS TERMINATED. IF $8000 IS ENTERED FOR THE NUMBER OF EXECU-_^1*_$TIONS, THE TEST SEQUENCE WILL BE EXECUTED INDEFINITELY._^1*_$AN ERROR DETECTED BY THE DRIVER PRODUCES THE FOLLOWING MESSAGE_^1*_]_^1*_$SCMLLV TEST (1) RUN(2) 15XX CHL (3) STATUS ERROR (4)_^1*_]_^1*_$W€€HEREAS A DATA ERROR PRODUCES THE FOLLOWING MESSAGE_^1*_]_^1*_%SCMLLV TEST (1) RUN(2) OUT CHNL (5) IS (6) IN CHNL (7) IS (8)_^1*_]_^1*_$WHERE ,_^1*_]_^1*_$(1) DECIMAL NUMBER OF TEST CURRENTLY BEING EXECUTED._^1*_$(2) HEXADECIMAL NUMBER OF CURRENT PASS._^1*_$(3) CHANNEL INDEX IF LOCAL, OR CHANNEL ADDRESS IF REMOTE._^1*_$(4) PRINTOUT OF STATUS (EXPLAINED BELOW)_^1*_$(5) 1553 CHAN€€NEL INDEX IF LOCAL, OR CHANNEL ADDRESS IF REMOTE._^1*_$(6) IMAGE OUTPUT._^1*_$(7) 1544 CHANNEL INDEX IF LOCAL , OR CHANNEL ADDRESS IF REMOTE._^1*_$(8) DIGITAL INPUT._^1*_$XX_!44 OR 53 TO DESIGNATE EQUIPMENT._^1*_]_^1*_$THE STATUS (4) HAS THE FOLLOWING MEANINGS_^1*_]_^1*_$DIRECT IOM SYSTEM_^1*_,8001 = INTERNAL OR EXTERNAL REJECT_^1*_]_^1*_$REMOTE IOM SYSTEM_^1*_,7FFF = EXTERNAL O€€R INTERNAL REJECT ON LOCAL UNIT._^1*_,BIT 13 = RECEIVE ERROR ON LOCAL CONTROL UNIT._^1*_,BIT 12 = RECEIVE ERROR ON REMOTE CONTROL INPUT UNIT._^1*_,BIT 10 = INTERNAL REJECT ON REMOTE CONTROL UNIT._^1*_,BIT 9 = EXTERNAL REJECT ON REMOTE CONTROL UNIT._^1************************************************************************_^1*_]_^1*_$TEST SET UP WILL BE AS FOLLOWS_!***********_^1*_€€$SCMM FILE FOR 1553/1544_^1*_]_^1*_]_^1*_$SCMM LLV TEST_^1*_$1553 DRIVER_^1*_$1544 DRIVER_^1*_$CONTROL TABLE_^1*_]_^1*_]_^1*_$DONE TO ALLOW EASIER OPERATION OF THE TEST BY THE OPERATOR_^1*_]_^1************************************************************************_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALENCES_€€:*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1_%EQU EREQST(8)_#PHYTAB DRIVER REQUEST STATUS LOCATION_^1_%EQU ESTAT2(12)_"PHYTAB HARDWARE STATUS LOCATION_^1_%EQU AMONI($F4)_"LOCORE LOCATION OF ADDRESS OF MONITOR_^1_%EQU ADISP($EA)_"LOCORE LOCATION OF ADDRESS OF DISPATCHER_^1_%EQU LPMSK($2)_#START OT LOWER BIT MASKS_^1_%EQU €€NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%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 PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LOCATO€€R_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1_%EXT* DISB_)DIGITAL INPUT DRIVER_^1_%EXT* DOSB_)DIGITAL OUTPUT DRIVER_^1_%EXT* INILZ_^1*_]_^1_%EQU DIAGLU(25)_"LOCATION IN PHYTAB OF DIAGNOSTIC L.U._^1_%EQU ERCODE(26)_"LOCATION IN PHYTAB FOR ALTDEV ERROR CODE_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATION REGIO€€N_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTLLV_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $3930_(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_^1CL€€RSTK NUM 0_^1MESAGE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_:INPUT PARAMETERS_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1*_#GO INITIALIZE CONTROL TABLE WHICH IS IN THIS FILE_^1*_]_^1_%RTJ INILZ_(GO INITILIZE CONTROL TABLE_^1*_]€€_^1ENTER1 RTJ* (MESAGE)_$OUTPUT INITIAL MSG_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET FIRST SET OF PARAMETERS_^1INI11 RTJ* (GETFLD)_^1_%INQ -1_^1_%STA LU,Q_)SAVE CONTROL WORDS_^1_%INQ -4_^1_%SQZ INI12-*-1_^1_%JMP* INI11_^1INI12 LDA RUNS_^1_%SAM 1_,IF 8000 SKIP CONVERT_^1_%RTJ* (RDECHX)_^1_%STA RUNS_^1_%LDA LU2_^1_%RTJ* (€€RDECHX)_$CONVERT LU TO HEX_^1_%STA LU1544_^1_%LDA LU_+CONVERT LU IN_^1_%RTJ* (RDECHX)_^1_%STA LU1553_^1_%SAZ INI20_(SEE IF REMOTE OR LOCAL UNIT_^1_%LDA LU1544_'THIS UNIT HAS TO BE REMOTE_^1_%SAN INI121_'BOTH LU'S ARE REMOTE_^1_%JMP* INI14_(NOT THE SAME ONE REMOTE, ONE LOCAL_^1INI20 LDA LU1544_^1_%SAZ INI120_'BOTH LU'S ARE LOCAL_^1_%JMP* INI14_(NOT THE SAME ONE REMOTE, ONE €€LOCAL_^1INI120 JMP* INI15_(LOCALS DON'T HAVE A PHYSTAB_^1INI121 TRA Q_^1_%LDQ+ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$2F0_'TYPE CODE FOR 1544_^1_%SAZ INI13_^1_%JMP* INI14_^1INI13 LDQ LU1553_'PICK UP LU NUMBER_^1_%LDQ+ LOG1A,Q_%PICKUP PHYSTAB ADDRESS_^1_%STQ* PHYLO2_'SAVE PHYSTAB ADDRESS_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$300_'TYPE COD€€E FOR A 1553_^1_%SAN 1_^1_%JMP* INI15_^1INI14 RAO* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG10B-MES2_^1_%ADC MSG10E-MSG10B_^1_%LDA* INPERR_%IS THIS THE THIRD L.U. ERROR_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1PHYLOC NUM 0_^1INPERR NUM 0_^1PHYLO2 NUM 0_,TEMP HOLD FOR PHYST€€AB ADDRESS_^1*_]_^1INI15 CLR A_^1_%STA NUMCHN_^1_%RTJ* (MESAGE)_^1MES3_!NUM $8144_^1_%ADC MSG2B-MES3_^1_%ADC MSG2E-MSG2B_^1INI21 ENQ 0_^1_%RTJ* (INFOIN)_$GET CHNL INFORMATION_^1_%SQP INI22-*-1_^1_%JMP* INI15_^1INI22 RTJ* (GETFLD)_^1_%INQ -2_+CK FOR SECOND FIELD._^1_%SQZ INI23-*-1_^1_%SAP ANDOFF_^1_%JMP* INI24_)RECEIVED A FFFF MEANING NO MORE CHANLS_^1ANDOFF AND =N$00F€€F_%SAVE ONLY THE STATION AND MODULE_^1_%LDQ NUMCHN_^1_%STA OUTCHN,Q_'CHANNEL NUMBER._^1_%JMP* INI22_^1INI23 LDQ NUMCHN_'TO HERE IF SECOND FIELD_^1_%STA INCHN,Q_%STORE INPUT CHNL NUM._^1_%RAO NUMCHN_^1_%INQ -15_*CK FOR 16 CHANNELS._^1_%SQZ INI24-*-1_^1_%JMP* INI21_^1INI24 LDA NUMCHN_'CK FOR NO CHNLS SPECIFIED._^1_%INA -1_^1_%STA NUMCHN_^1_%SAP INCNR1_^1_%JMP ENDMSG_'NO€€ CHANNELS SPECIFIED EXIT_^1INCNR1 TRA Q_,Q=NUM OF CHANNELS_^1_%LDA LU1544_^1_%SAN INI31_(REMOTE UNITS DON'T DO ANYTHING TO MODULE_^1INI30 LDA OUTCHN,Q_^1_%INA 1_,INCREASE STATION BY 1_^1_%STA OUTCHN,Q_^1_%LDA INCHN,Q_^1_%INA 1_,INCREASE STATION BY 1_^1_%STA INCHN,Q_^1_%INQ -1_^1_%SQM INI31_^1_%JMP* INI30_(NOT DONE_^1INI31 LDA* TESTS_(IF TEST 3 IS REQUESTED GET SPECIAL €€PATTERN_^1_%AND- ONEBIT+3_^1_%SAZ INI32-*-1_^1_%RTJ (MESAGE)_$INPUT SPECIAL PATTERN_^1MES4_!NUM $8144_^1_%ADC MSG7B-MES4_^1_%ADC MSG7E-MSG7B_^1_%ENQ 0_^1_%RTJ (INFOIN)_^1_%RTJ (GETFLD)_$INPUT SPECIAL PATTERN_^1_%STA* SPCPAT_^1INI32 CLR A_^1_%STA PASSES_^1_%STA ERRCTR_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_)SECT€€ION 1_!$FFFF ON ONE CHANNEL, ALL OTHERS $0000_)*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TESTS_(IS TEST 1 REQUESTED_^1_%AND- ONEBIT+1_^1_%SAZ T2CK-*-1_^1TEST1 LDA =N$2031_%BEGIN TEST 1_^1_%STA TNUM_^1_%CLR A_^1_%RTJ* FXIMAG_'SET ALL REGISTERS TO ZERO._^1_%SET A_,FIX IMAGE PARAMETERS_^1_%STA PATT1_^1_%CLR A€€_.SAMPAT._^1_%STA PATT2_^1_%RTJ SAMPAT_^1************************************************************************_^1*_]_'*_^1*_)SECTION 2_!$0000 ON ONE CHANNEL, ALL OTHERS $FFFF_)*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CK_!LDA* TESTS_(IS TEST 2 REQUESTED_^1_%AND- ONEBIT+2_^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =€€N$2032_%BEGIN TEST 2_^1_%STA TNUM_^1_%SET A_,SET ALL REGISTERS_^1_%RTJ* FXIMAG_)TO FFFF._^1_%CLR A_,FIX IMAGE_^1_%STA* PATT1_*PARAMETERS_^1_%SET A_.FOR SAMPAT._^1_%STA* PATT2_^1_%RTJ SAMPAT_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_!SECTION 3_!USER INPUT PATTERN ON ONE CHANNEL, ALL OTHERS $0000_"*_^1*_]_'*_^1************€€************************************************************_^1_%SPC 2_^1T3CK_!LDA* TESTS_(IS TEST3 REQUESTED_^1_%AND- ONEBIT+3_^1_%SAN TEST3_^1_%JMP* T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA TNUM_^1_%CLR A_^1_%RTJ* FXIMAG_^1_%LDA* SPCPAT_^1_%STA* PATT1_(FIX IMAGE PARAMETERS FOR_^1_%CLR A_.SAMPAT._^1_%STA* PATT2_^1_%RTJ SAMPAT_^1_%EJT_]_^1*****************************€€*******************************************_^1*_]_'*_^1* SECTION 4_!LEFT SHIFTING ONE BIT ON ONE CHANNEL, ALL OTHERS $0000 *_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA* TESTS_(IS TEST 4 REQUESTED_^1_%AND- ONEBIT+4_^1_%SAN TEST4-*-1_^1_%JMP* T5CK_^1*_]_^1TEST4 LDA =N$2034_%BEGIN TST 4_^1_%STA TNUM_^1_%CLR A_,SET €€ALL REGISTERS_^1_%RTJ* FXIMAG_)TO ZERO._^1_%LDA- ONEBIT+15_#GET FIRST IMAGE, $8000._^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%SET A_^1_%RTJ* FXIMAG_^1_%LDA- ZROBIT+15_#GET SECOND IMAGE, $7FFF._^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1* SECTION 5_!LEFT SHIFTING ZERO BIT ON ONE CHANNEL, ALL OTHERS $FFF€€F *_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA* TESTS_(IS TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAN TEST5-*-1_^1_%JMP ENDTST_^1TEST5 LDA =N$2035_%BEGIN TEST 5_^1_%STA TNUM_^1_%SET A_^1_%RTJ* FXIMAG_^1_%LDA- ZROBIT+15_#GET FIRST IMAGE, $7FFF_^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%CLR A_^1_%RTJ* FXIMAG_^1_%LDA- ON€€EBIT+15_#GET SECOND IMAGE, $8000_^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%JMP ENDTST_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1LU2_"NUM 0_,INPUT LU._^1TESTS NUM 0_^1RUNS_!NUM 0_^1SWITCH NUM 0_,1=CLOSED CONTACTS_"0= OPEN CONTACTS_^1SPCPAT NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_2SET ALL CHNLS TO DESIRED PATTER€€N_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1FXIMAG 0_"0_^1_%LDQ* NUMCHN_'FILL TABLE OF OUTPUT_^1FX1_"STA PATOUT,Q_'IMAGES WITH PATTERN_^1_%INQ -1_-IN A-REG._^1_%SQM FX2-*-1_^1_%JMP* FX1_^1FX2_"CLR Q_,SET ALL REGISTERS_^1_%TCQ A_^1_%RTJ* DIGIO_^1_%JMP* (FXIMAG)_^1_%SPC 2_^1_%SPC 2_^1************************************€€************************************_^1*_]_'*_^1*_.COMMOM ROUTINE FOR SHIFTING PATTERN I/O_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CRCBIT 0_"0_^1CIRC1 RTJ* POUTLD_'SET UP PATOUT._^1_%LDQ* BEGCHN_^1_%LDA TNUM_)SET-UP PARAMETERS FOR_^1_%AND- ONEBIT_)REG. I/O._^1_%SAZ CIRC2-*-1_^1_%TRQ A_,FOR TEST 5._^1_%INA -1_^1_%JMP* €€CIRC3_^1CIRC2 TRQ A_^1CIRC3 RTJ* DIGIO_^1_%RTJ CHKREG_^1_%LDA* BITCTR_'CK FOR LAST BIT POSITION._^1_%INA -16_^1_%SAZ CIRC4-*-1_^1_%JMP* CIRC1_^1CIRC4 STA* BITCTR_^1_%LDQ* BEGCHN_'REINITIALIZE CURRENT_^1_%LDA* IMAGE1_)CHANNEL IMAGE._^1_%AND- LPMSK+15_^1_%SAZ CIRC5-*-1_^1_%SET A_^1CIRC5 STA PATOUT,Q_^1_%TRQ A_^1_%RTJ* DIGIO_^1_%LDA* BEGCHN_'CK FOR LAST CHANNEL_^1_%SUB* NU€€MCHN_^1_%SAZ CIRC6-*-1_#NO, INCREMENT_^1_%RAO* BEGCHN_)COUNTER_^1_%JMP* CIRC1_^1CIRC6 STA* BEGCHN_'YES, ZERO COUNTER._^1_%JMP* (CRCBIT)_^1*_]_^1PATT1 NUM 0_^1PATT2 NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_+SHIFT DATA PATERN AND STORE IN OUTPUT TABLE_.*_^1*_]_'*_^1**************************************************€€**********************_^1_%SPC 2_^1POUTLD 0_"0_^1_%LDA* IMAGE1_'GET OLD IMAGE_^1_%ALS 1_.AND SHIFT LEFT._^1_%STA* IMAGE1_^1_%LDQ* BEGCHN_'GET COUNTER._^1_%STA* PATOUT,Q_$STORE CURRENT IMAGE FOR_^1_%RAO* BITCTR_'INCREMENT BIT COUNTER_^1_%JMP* (POUTLD)_^1*_]_^1_%BZS OUTCHN(16)_^1_%BZS INCHN(16)_^1*_]_^1NUMCHN NUM 0_^1BEGCHN NUM 0_^1CURCHN NUM 0_^1ENDCHN NUM 0_^1BITCTR NUM 0_^€€1IMAGE1 NUM 0_^1************************************************************************_^1*_]_'*_^1*_0COMMON I/O ROUTINE FOR ALL SECTIONS_1*_^1*_]_'*_^1************************************************************************_^1************************************************************************_^1*_#RELAYS ARE SET UP IN FXIMAG THEN ONE CHANL AT A TIME THE DESIRED_^1*_"PATTER€€N IS OUTPUTTED THEN ALL THE CHANNELS ARE READ IN. SO FOR_^1*_"EXP. CHANLS 1 THROUGH 3 ARE SET TO ZERO BY FXIMAG THEN WHEN THIS_^1*_!ROUTINE (DIGIO) IS ENTERD AGAIN BY SAMPAT OR CRCBIT ONE CHANL IS SET_^1*_"TO A DESIRED PATTERN . SO NOW ONE CHANL IS SET TO THE DESIRED_^1*_"PATTERN AND ALL THE OTHERS ARE STILL SET TO ZERO OR WHATEVER FIXMAG_^1*_"SET THEM TOO. THE CHANL_^1*_"THAT WAS €€SET TO THE SPECIAL PATTERN IS RESET THEN THE TEST_^1*_"GOES TO THE NEXT CHANL AND SO ON UNTILL ALL THE CHANLS ARE DONE._^1_%SPC 2_^1DIGIO 0_"0_^1_%STQ* CURCHN_'Q-REG. HAS BEG. CHANNEL._^1_%SAP DIO1A-*-1_^1_%LDA* NUMCHN_^1DIO1A STA* ENDCHN_'A-REG. HAS LAST CHANNEL._^1DIO1_!LDQ* CURCHN_'GET CHANNEL INDEX._^1_%LDA* PATOUT,Q_$GET IMAGE FOR OUTPUT._^1_%STA* IMAGE_^1_%LDA* OUTCHN,Q_€€^1_%AND- LPMSK+15_^1_%STA* OUTCHN,Q_$CLEAR ERROR FLAG_^1_%STA* DATABL_^1_%LDA* LU1553_'LU OF DIGITAL OUT._^1_%SAN RIOMO_(SKIP IF LU NOT 0 (REMOTE)._^1_%LDQ* DATABL_'LOCAL._^1_%LDA* IMAGE_^1_%RTJ DOSB_)DIGITAL OUT SUBR._^1_%JMP* COMPL_^1RIOMO RTJ- (AMONI)_%OUTPUT._^1REF1_!ADC 2*FRC+FX+3*FRP+3*FCP_^1_%ADC COMPL-REF1_"TO SPECIFIED REGISTER._^1_%ADC 0_^1LU1553 NUM 0_^1_%NUM 1_^€€1_%ADC DATABL-REF1_^1_%JMP- (ADISP)_^1DATABL NUM 0_^1IMAGE NUM 0_,REGISTER BIT IMAGE._^1COMPL RTJ ERRCK1_'CK FOR ERROR ON OUTPUT._^1_%LDA* CURCHN_'CK FOR LAST CHANNEL._^1_%SUB* ENDCHN_^1_%SAN DIO2-*-1_^1_%STA* CURCHN_'ZERO CURCHN ON COMPLETION_^1_%JMP* DIO4_+OUTPUT._^1DIO2_!LDA* CURCHN_'CK FO LAST CHANNEL_^1_%SUB* NUMCHN_)ADDR._^1_%SAN DIO3-*-1_^1_%STA* CURCHN_'ZERO CURCHN €€AND CONTINUE_^1_%JMP* DIO1_+OUTPUT._^1DIO3_!RAO* CURCHN_'INCREMENT CHANNEL_^1_%JMP* DIO1_+COUNTER AND CONTINUE._^1DIO4_!LDQ* CURCHN_^1_%LDA* INCHN,Q_%GET CHANNEL ADDRESS._^1_%AND- LPMSK+15_^1_%STA* INCHN,Q_^1_%STA* TABL2_^1TIMCAL TIMER COMTIM-TIMCAL-1,4,R,2,0_^1_%JMP- (ADISP)_^1COMTIM LDA* LU1544_^1_%SAN RIOMI_(SKIP IF LU NOT 0._^1_%LDQ* TABL2_^1_%RTJ DISB_)DIGITAL IN SUBR._^1_%J€€MP* COMP3_^1RIOMI RTJ- (AMONI)_%INPUT._^1REF2_!ADC 1*FRC+FX+3*FRP+3*FCP_^1_%ADC COMP2-REF2_^1_%ADC 0_^1LU1544 NUM 0_^1_%NUM 1_^1_%ADC TABL2-REF2_^1_%JMP- (ADISP)_^1TABL2 NUM 0_,WES OR INDEX._^1DATAIN NUM 0_,DIGITAL VALUE RETURNED._^1COMP2 LDA* DATAIN_^1COMP3 STQ* SAVEQ_(SAVE ERROR IF ANY._^1_%LDQ* CURCHN_^1_%STA* PATIN,Q_%STORE DIGITAL INPUT._^1_%LDQ* SAVEQ_^1_%RTJ ERR€€CK2_'CK FOR ERROR ON INPUT._^1_%LDA* CURCHN_'CK FOR LAST CHANNEL._^1_%SUB* NUMCHN_^1_%SAZ DIO5-*-1_^1_%RAO* CURCHN_'INCREMENT COUNTER._^1_%JMP* DIO4_^1DIO5_!JMP* (DIGIO)_'RETURN._^1SAVEQ NUM 0_^1*_]_^1_%BZS PATOUT(16)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_,COMMOM ROUTINE FOR NON-SHIFTING PATTERN I/O_-*_^1*_]_'*_^1****€€********************************************************************_^1_%SPC 2_^1SAMPAT 0_"0_^1SAM1_!LDQ* SAMCHN_'SET CHANNEL IMAGE._^1_%LDA PATT1_^1_%STA* PATOUT,Q_^1_%TRQ A_,OUTPUT CURRENT_^1_%RTJ* DIGIO_*CHANNEL._^1_%RTJ* CHKREG_^1_%LDQ* SAMCHN_'GET CURRENT CHNL IMAGE._^1_%LDA PATT2_^1_%STA* PATOUT,Q_^1_%TRQ A_^1_%RTJ* DIGIO_^1_%LDA* SAMCHN_'CK FOR LAST CHANNEL._^1_%SUB* NU€€MCHN_^1_%SAZ SAM2-*-1_^1_%RAO* SAMCHN_^1_%JMP* SAM1_^1SAM2_!STA* SAMCHN_^1_%JMP* (SAMPAT)_^1SAMCHN NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_7CHECK DATA FOR ERRORS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CHKREG 0_"0_^1_%LDQ* CHNCTR_^1_%LDA OUTCHN,Q_$NO DATA C€€K IF CHL REJECT_^1_%SAM CHK1-*-1_^1_%LDA INCHN,Q_%NO DATA CK IF CHL REJECT_^1_%SAM CHK1_^1_%LDA* PATIN,Q_%GET IMAGE IN_^1_%STQ* QHOLD+1_%SAVE Q_^1_%LDQ SWITCH_'OPEN OR CLOSED CONTACTS_^1_%SQZ QHOLD_(OPEN_^1_%TCA A_,CLOSED_^1QHOLD LDQ =N0_^1_%STA* PATIN,Q_%SAVE COMPLEMENTED OR NORMAL FOR ERROR MSG_^1_%EOR* PATOUT,Q_$COMPARE WITH IMAGE OUT_^1_%SAZ CHK1-*-1_^1_%RTJ* CMPERR_^1€€CHK1_!LDA* CHNCTR_'CK FOR LAST CHANNEL._^1_%SUB NUMCHN_^1_%SAZ CHK2-*-1_^1_%RAO* CHNCTR_'INCREMENT COUNTER_^1_%JMP* CHKREG+1_^1CHK2_!STA* CHNCTR_'ZERO COUNTER._^1_%JMP* (CHKREG)_$RETURN._^1CHNCTR NUM 0_^1*_]_^1_%BZS PATIN(16)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_5OUTPUT DATA ERROR MESSAGE_6*_^1*_]_'*_^1***************€€*********************************************************_^1_%SPC 2_^1CMPERR 0_"0_^1_%LDA* PATOUT,Q_$GET AND CONVERT_^1_%RTJ (RHXASC)_^1_%ADC (OLDPAT-*)_^1_%LDQ* CHNCTR_'GET AND CONVERT_^1_%LDA* PATIN,Q_(INPUT VALUE._^1_%RTJ (RHXASC)_^1_%ADC (NEWPAT-*)_^1_%LDQ* CHNCTR_^1_%LDA OUTCHN,Q_^1_%LDQ LU1553_'IS IT LOCAL_^1_%SQN 1_^1_%INA -1_+SUB 1 BECAUSE ADDED 1 TO MAKE LOCAL SUB€€T CALL_^1_%RTJ (RHXASC)_^1_%ADC (CHAN1-*)_^1_%LDQ* CHNCTR_^1_%LDA INCHN,Q_^1_%LDQ LU1553_'IS IT LOCAL_^1_%SQN 1_^1_%INA -1_+SUB 1 BECAUSE ADDED 1 TO MAKE LOCAL SUBT CALL_^1_%RTJ (RHXASC)_^1_%ADC (CHAN2-*)_^1_%RTJ* INIMSG_^1_%JMP* (CMPERR)_^1_%RTJ (MESAGE)_$OUTPUT COMPARE ERROR MSG_^1MES5_!NUM $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG11B-MES5_^1_%ADC MSG11E-MSG1€€1B_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1CMP1_!JMP* (CMPERR)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3CHECK FOR 1553 HARDWARE ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCK1 0_"0_^1_%LDA LU1553_^1_%SAN RIOM1_(SKIP IF REMOTE._^1_%JMP* LOCL1_^1RIOM1 LDQ €€ PHYLO2_'PHYSTAB ADDRESS_^1_%LDA- ESTAT2,Q_$HARDWARE STATUS._^1_%STA* ERRBIT_^1_%AND =N$3600_%LOOK ONLY AT PERTIENT BITS._^1_%SUB =N$0600_^1_%SAN FLG1_)SKIP IF ERROR._^1_%JMP* ERR11_^1LOCL1 SQM 1_,SKIP IF ERROR._^1_%JMP* ERR11_^1_%STQ* ERRBIT_^1FLG1_!LDQ CURCHN_^1_%LDA OUTCHN,Q_^1_%EOR- NZERO+15_$SET BIT 15 FOR ERROR FLAG_^1_%STA OUTCHN,Q_^1_%RTJ* INIMSG_^1_%JMP* ERR11_^1_%€€LDA DATABL_^1_%LDQ LU1553_^1_%SQN 1_^1_%INA -1_^1_%RTJ* CHLMSG_^1_%RTJ (MESAGE)_$OUTPUT MESSAGE_^1MES6_!NUM $0444_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG4B-MES6_^1_%ADC MSG4E-MSG4B_^1_%ADC MSG8B-MES6_^1_%ADC MSG8E-MSG8B_^1ERR11 RTJ* ENDCK_^1_%JMP* (ERRCK1)_^1_%EJT_]_^1*******************************************************€€*****************_^1*_]_'*_^1*_3CHECK FOR 1544 HARDWARE ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCK2 0_"0_^1_%LDA LU1544_^1_%SAN RIOM2_(SKIP IF REMOTE._^1_%JMP* LOCL2_^1RIOM2 LDQ PHYLOC_'PHYS TAB ADDRESS._^1_%LDA- ESTAT2,Q_$HARDWARE STATUS._^1_%STA* ERRBIT_^1_%AND =N$3600_%LOOK ONLY AT PERTIENT BITS._^1_%SUB €€ =N$0600_^1_%SAN FLG2_)SKIP IF ERROR._^1_%JMP* ERR22_^1LOCL2 SQM 1_,SKIP IF ERROR._^1_%JMP* ERR22_^1_%STQ* ERRBIT_^1FLG2_!LDQ CURCHN_^1_%LDA INCHN,Q_^1_%EOR- NZERO+15_$SET ERROR BIT_^1_%STA INCHN,Q_^1_%RTJ* INIMSG_^1_%JMP* ERR22_^1_%LDA TABL2_^1_%LDQ LU1544_^1_%SQN 1_^1_%INA -1_^1_%RTJ* CHLMSG_^1_%RTJ (MESAGE)_$OUTPUT MESSAGE_^1MES7_!NUM $0444_^1_%ADC (START-MES7)_^1_%€€NUM 3_^1_%ADC MSG11B-MES7_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG6B-MES7_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG8B-MES7_^1_%ADC MSG8E-MSG8B_^1ERR22 RTJ* ENDCK_^1_%JMP* (ERRCK2)_^1*_]_^1*_]_^1ENDCK 0_"0_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN 1_^1_%JMP* (ENDCK)_^1_%JMP* ENDMSG_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^€€1*_1OUTPUT CHANNEL PLUS HARDWARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_]_^1CHLMSG 0_"0_^1_%RTJ (RHXASC)_^1_%ADC (REJCHL-*)_^1_%LDA* ERRBIT_^1_%RTJ (RHXASC)_$INSTALL STATUS IN MESSAGE._^1_%ADC (STATUS-*)_^1_%JMP* (CHLMSG)_^1ERRBIT NUM 0_^1_%SPC 2_^1************************************************************€€************_^1*_]_'*_^1*_1OUTPUT CURRENT TEST AND PASS NUMBER_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INIMSG 0_"0_^1_%RAO* ERRCTR_^1_%LDA FLAG_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAN INIMS1-*-1_^1_%RAO* INIMSG_^1_%LDA PASSES_^1_%INA 1_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (NUMPAS-*)_^1€€INIMS1 JMP* (INIMSG)_^1ERRCTR NUM 0_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)CK FOR STOP FLAG SET._^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA RUNS_^1_%SAZ ENDMSG-*-1_^1_%SAM EN€€D1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_'OUTPUT END MESSAGE_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA* ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_$OUTPUT END MESSAGE_^1MES8_!NUM $8144_^1_%ADC MSG3B-MES8_^1_%ADC MSG3E-MSG3B_^1_%LDA FLAG_)CK FOR STO€€P TO RE-ENTER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END2-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!LDA START+1_%CLEAR TEST NAME FROM PGM STACK_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_$CLEAR TEST NAME FROM PGM STACK, RELEASE CORE_^1_%ADC (START-*)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_;MESSAGE BUFFERS_:*_^1*_]_'*_^1*€€***********************************************************************_^1_%SPC 2_^1MSG1B ALF 10,BEGIN 1553/1544 TEST_^1_%NUM $D00_^1_%ALF $,OUT LU,IN LU,TESTS,RUNS,SWITCH$_^1_%EQU MSG1E(*)_^1MSG2B ALF $,OUT CHANL MOD-STAT, IN CHANL MOD-STAT$_^1_%NUM $D00_^1_%EQU MSG2E(*)_^1MSG3B ALF 10,END 1553/1544 TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF €€4, ERRORS._^1_%EQU MSG3E(*)_^1MSG4B ALF 3, 1553_^1_%EQU MSG4E(*)_^1MSG5B ALF 5, OUT CHNL_^1CHAN1 NUM 0,0_^1_%ALF 2, IS_^1OLDPAT NUM 0,0_^1_%ALF 5, IN CHNL_^1CHAN2 NUM 0,0_^1_%ALF 2, IS_^1NEWPAT NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 3, 1544_^1_%EQU MSG6E(*)_^1MSG7B ALF 13,SPECIAL PATTERN FOR TEST 3_^1_%EQU MSG7E(*)_^1MSG8B ALF 2,CHL_^1REJCHL NUM 0,0_^1_%ALF €Ψ7, STATUS ERROR_^1STATUS NUM 0,0_^1_%EQU MSG8E(*)_^1MSG10B ALF 5, LU ERROR_^1_%EQU MSG10E(*)_^1MSG11B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG11E(*)_^1_%EQU END(*)_^1_%END_]_^__ΨPSCMRLY CSY/ E19 P€1_%NAM SCMRLY_'DECK-ID E19 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^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*_$MMTEXT IS A DIAGNOSTIC EXERCISER FOR THE 1555 REGISTER_^1*_$RELAYS AND/OR 1555 POWER DRIVER OUTPUTS AND THE 1544 DIGITAL_^1*_$INPUT SUBSYSTEMS. IT OPERATES UNDER THE CONTR€€OL OF THE DIAG-_^1*_$NOSTIC SUPERVISOR "SCMEXC". BEFORE TEST EXECUTION IS_^1*_$STARTED, THE USER IS REQUESTED TO INPUT THE TEST PARAMETERS_^1*_$-- LU OF THE 1555, LU OF THE 1544, TEST SECTIONS TO RUN,_^1*_$SWITCH (0 = NORMAL, 1 = REVERSE),_^1*_$NUMBER OF TIMES THE TEST SEQUENCE IS_^1*_$TO BE EXECUTED. THE LOGICAL UNIT IS CHECK FOR ITS VALIDITY_^1*_$AND IF INVALID THE REQUEST IS REP€€EATED. IF THE LOGICAL UNIT IS_^1*_$ENTERED INCORRECTLY THREE TIMES, THE TEST IS TERMINATED._^1*_$LOGICAL UNIT 0 IS USED IF THIS IS A LOCAL TEST. LOGICAL_^1*_$UNIT NON 0 INDICATES TO THE TEST THIS IS A REMOTE TEST._^1*_$NEXT THE USER IS REQUESTED TO INPUT THE CABLING INFORMATION._^1*_$(IE. WHICH 1555 CHNLS ARE CABLED TO WHICH 1544 CHNLS) IF NO_^1*_$CHANNEL INFORMATION IS ENTERED, TH€€E REQUEST IS REPEATED._^1*_$ONLY 16 SETS OF CHANNELS CAN BE TESTED AT ONE TIME. MMTEXT_^1*_$IS DIVIDED INTO FIVE TEST SECTIONS (TESTS) AS FOLLOWS:_^1*_$SECTION 1_)$FF ON ONE CHANNEL, ALL OTHERS $00_^1*_$SECTION 2_)$00 ON ONE CHANNEL, ALL OTHERS $FF_^1*_*SECTION 3_!USER INPUT ON ONE CHANNEL, ALL OTHERS $0000_^1*_*SECTION 4_!LEFT SHIFTING ONE BIT ON ONE CHANNEL,_^1*_8ALL OTHERS $00_^€€1*_*SECTION 5_!LEFT SHIFTING ZERO BIT ON ONE CHANNEL,_^1*_8ALL OTHERS $FF_^1*_$THE SECTION NUMBER IS EQUIVALENT TO THE BIT NUMBER,_^1*_1BIT 1 = 1 DO SECTION 1_^1*_1BIT 2 = 1 DO SECTION 2_^1*_1BIT 3 = 1 DO SECTION 3_^1*_1BIT 4 = 1 DO SECTION 4_^1*_1BIT 5 = 1 DO SECTION 5_^1*_$IF SECTION THREE IS REQUESTED, THE USER IS REQUESTED TO_^1*_$INPUT THE SPECIAL PATTERN TO BE USED WHEN THAT €€SECTION IS_^1*_$EXECUTED. AFTER EACH I/O OPERATION THE HARDWARE IS CHECKED_^1*_$FOR ERRORS. IF ERRORS OCCURRED, A MESSAGE IS OUTPUT. AFTER_^1*_$THE COMPLETION OF THE INPUT OPERATION, A DATA COMPARE CHECK_^1*_$IS DONE IF NO HARDWARE ERRORS OCCURRED. A MESSAGE IS OUTPUT_^1*_$FOR EACH DATA ERROR. AT THE END OF EACH TEST SEQUENCE, A_^1*_$PASS COUNTER IS UPDATED AND COMPARED AGAINST THE€€ NUMBER OF_^1*_$TIMES REQUESTED BY THE USER. IF EQUAL, THE TEST IS TERM-_^1*_$INATED. THE STOP FLAG IS ALSO CHECKED AND IF SET THE TEST_^1*_$IS TERMINATED. IF $8000 IS ENTERED FOR THE NUMBER OF EXECU-_^1*_$TIONS, THE TEST SEQUENCE WILL BE EXECUTED INDEFINITELY._^1*_$AN ERROR DETECTED BY THE DRIVER PRODUCES THE FOLLOWING MESSAGE_^1*_]_^1*_$SCMRLY TEST (1) RUN (2) 15XX CHL (3) STATUS€€ ERROR (4)_^1*_]_^1*_$WHEREAS A DATA ERROR PRODUCES THE FOLLOWING MESSAGE_^1*_]_^1*_$SCMRLY TEST (1) RUN (2) OUT CHNL (5) IS (6) IN CHNL (7) IS (8)_^1*_]_^1*_$WHERE ,_^1*_]_^1*_$(1) DECIMAL NUMBER OF TEST CURRENTLY BEING EXECUTED._^1*_$(2)_$DECIMAL NUMBER OF CURRENT PASS._^1*_$(3) CHANNEL INDEX IF LOCAL, OR CHANNEL ADDRESS IF REMOTE._^1*_$(4) PRINTOUT OF STATUS (EXPLAINED BELOW)€€_^1*_$(5) 1555 CHANNEL INDEX IF LOCAL, OR CHANNEL ADDRESS IF REMOTE._^1*_$(6) IMAGE OUTPUT._^1*_$(7) 1544 CHANNEL INDEX IF LOCAL , OR CHANNEL ADDRESS IF REMOTE._^1*_$(8) DIGITAL INPUT._^1*_$XX_!44 OR 55 TO DESIGNATE EQUIPMENT._^1*_]_^1*_$THE STATUS (4) HAS THE FOLLOWING MEANINGS_^1*_]_^1*_$DIRECT IOM SYSTEM_^1*_,8001 = INTERNAL OR EXTERNAL REJECT_^1*_]_^1*_$REMOTE IOM SYSTEM_^1€€*_,7FFF = EXTERNAL OR INTERNAL REJECT ON LOCAL UNIT._^1*_,BIT 13 = RECEIVE ERROR ON LOCAL CONTROL UNIT._^1*_,BIT 12 = RECEIVE ERROR ON REMOTE CONTROL INPUT UNIT._^1*_,BIT 10 = INTERNAL REJECT ON REMOTE CONTROL UNIT._^1*_,BIT 9 = EXTERNAL REJECT ON REMOTE CONTROL UNIT._^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_9TEST EQUIVALEN€€CES_:*_^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_%E€€QU NZERO($12)_"START OF UPPER BIT MASKS_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^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 PRIORTY' LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD 'COMPLETION PRIORTY' LO€€CATOR_^1*_]_^1_%EXT LOG1A_(LINK TO LOGICAL UNIT TABLE_^1*_]_^1_%EQU DIAGLU(25)_"LOCATION IN PHYTAB OF DIAGNOSTIC L.U._^1_%EQU ERCODE(26)_"LOCATION IN PHYTAB FOR ALTDEV ERROR CODE_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATION REGION_8*_^1*_]_'*_^1********************************************************************€€****_^1_%SPC 2_^1START ALF 3,TSTRLY_^1_%ADC END-START_#LENGTH OF PROGRAM_^1*_]_^1_%NUM $5153_(REVISION DATE_^1*_]_^1FLAG_!NUM 0_,COMMUNICATION WORD WITH MONITOR_^1*_]_^1INFOIN NUM 0_,ADDRESS BUFFER -- FILLED IN AT EXECUTION TIME_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NUM 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1_%SPC 2_^1***************************************€€*********************************_^1*_]_'*_^1*_:INPUT PARAMETERS_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_^1_%STA* INPERR_^1ENTER1 RTJ* (MESAGE)_$OUTPUT INITIAL MSG_^1MES1_!NUM $8144_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET FIRST SET OF PARAMETERS_^1INI11 RTJ* (GETFLD)_^1_%I€€NQ -1_^1_%STA LU,Q_)SAVE CONTROL WORDS_^1_%INQ -4_^1_%SQZ INI12-*-1_^1_%JMP* INI11_^1INI12 LDA RUNS_^1_%SAM 1_,IF 8000 SKIP CONVERT_^1_%RTJ* (RDECHX)_^1_%STA RUNS_^1_%LDA LU2_^1_%RTJ* (RDECHX)_$CONVERT LU TO HEX_^1_%STA LU1544_^1_%LDA LU_+CONVERT LU IN_^1_%RTJ* (RDECHX)_^1_%STA LU1555_^1_%SAZ INI20_(SEE IF REMOTE OR LOCAL UNIT_^1_%LDA LU1544_'THIS LU HAS TO BE REMOTE_€€^1_%SAN INI121_'BOTH LU'S ARE REMOTE_^1_%JMP* INI14_(NOT THE SAME ONE REMOTE, ONE LOCAL_^1INI20 LDA LU1544_^1_%SAZ INI120_'BOTH LU'S ARE LOCAL_^1_%JMP* INI14_(NOT THE SAME ONE REMOTE, ONE LOCAL_^1INI120 JMP* INI15_(LOCALS DON'T HAVE A PHYSTAB_^1INI121 TRA Q_^1_%LDQ+ LOG1A,Q_^1_%STQ* PHYLOC_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$2F0_'TUPE CODE FOR 1544_^1_%SAZ INI13_^1€€_%JMP* INI14_^1INI13 LDQ LU1555_'PICK UP LU NUMBER_^1_%LDQ+ LOG1A,Q_%PICKUP PHYSTAB ADDRESS_^1_%STQ* PHYLO2_'SAVE PHYSTAB ADDRESS_^1_%LDA- EREQST,Q_^1_%AND =N$3FF0_^1_%SUB =N$310_(TYPE CODE FOR 1555_^1_%SAN 1_^1_%JMP* INI15_^1INI14 RAO* INPERR_^1_%RTJ* (MESAGE)_$LOGICAL UNIT ERROR_^1MES2_!NUM $8244_^1_%ADC (START-MES2)_^1_%NUM 3_^1_%ADC MSG10B-MES2_^1_%ADC MSG10E-MSG10B_€€^1_%LDA* INPERR_%IS THIS THE THIRD L.U. ERROR_^1_%INA -3_^1_%SAZ 1_^1_%JMP* ENTER1_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1PHYLOC NUM 0_^1PHYLO2 NUM 0_,TEMP HOLD FOR PHYSTAB ADDRESS_^1INPERR NUM 0_^1*_]_^1INI15 CLR A_^1_%STA NUMCHN_^1_%RTJ* (MESAGE)_^1MES3_!NUM $8144_^1_%ADC MSG2B-MES3_^1_%ADC MSG2E-MSG2B_^1INI21 ENQ 0_^1_%RTJ* (INFOIN)_$GET CHNL INFORMATION_^1_%SQP IN€€I22-*-1_#CK FOR TTY ERROR_^1_%JMP* INI15_^1INI22 RTJ* (GETFLD)_^1_%SAP NFFFF_)NOT FFFF_^1_%JMP* INI24_(ITS A FFF NO MORE CHANLS_^1NFFFF STQ- I_,SAVE Q_^1_%LDQ LU_+SEE IF LOCAL_^1_%SQN 3_-REMOTE_^1_%AND =N$0FFF_%WANT EQUIP-MOD-SLOT **LOCAL**_^1_%JMP* CK2_^1_%AND =N$00FF_%REMOTE ONLY WANT MOD-SLOT_^1CK2_"LDQ- I_,RESTORE Q_^1_%INQ -2_+CK FOR SECOND FIELD_^1_%SQZ INI23-*-1_^1€€_%SAM INI24-*-1_^1_%LDQ NUMCHN_^1_%STA OUTCHN,Q_'CHANNEL NUMBER._^1_%JMP* INI22_^1INI23 LDQ NUMCHN_'TO HERE IF SECOND FIELD_^1_%STA INCHN,Q_%STORE INPUT CHNL NUM._^1_%RAO NUMCHN_^1_%INQ -15_*CK FOR 16 CHANNELS._^1_%SQZ INI24-*-1_^1_%JMP* INI21_^1INI24 LDA NUMCHN_'CK FOR NO CHNLS SPECIFIED._^1_%INA -1_^1_%STA NUMCHN_^1_%SAP INI31_^1_%JMP ENDMSG_'NO CHANNELS SPECIFIED €€EXIT_^1INI31 LDA* TESTS_(IF TEST 3 IS REQUESTED GET SPECIAL PATTERN_^1_%AND- ONEBIT+3_^1_%SAZ INI32-*-1_^1_%RTJ (MESAGE)_$INPUT SPECIAL PATTERN_^1MES4_!NUM $8144_^1_%ADC MSG7B-MES4_^1_%ADC MSG7E-MSG7B_^1_%ENQ 0_^1_%RTJ (INFOIN)_^1_%RTJ (GETFLD)_%INPUT SPECIAL PATTERN_^1_%AND =N$00FF_%AND OFF UPPER BITS ONLY WANT 0 THROUGH 7_^1_%STA* SPCPAT_^1INI32 CLR A_^1_%STA PASSES_€€^1_%STA ERRCTR_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_$SECTION 1_"$FF ON ONE CHANNEL, ALL OTHERS $0000_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1BEGIN LDA* TESTS_(IS TEST 1 REQUESTED_^1_%AND- ONEBIT+1_^1_%SAZ T2CK-*-1_^1TEST1 LDA =N$2031_%BEGIN TEST 1_^1_%STA TN€€UM_^1_%CLR A_^1_%RTJ* FXIMAG_'SET ALL REGISTERS TO ZERO._^1_%LDA =N$00FF_^1_%STA PATT1_^1_%CLR A_.SAMPAT._^1_%STA PATT2_^1_%RTJ SAMPAT_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_$SECTION 2 $0000 ON ONE CHANNEL, ALL OTHERS $FF_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^€€1T2CK_!LDA* TESTS_(IS TEST 2 REQUESTED_^1_%AND- ONEBIT+2_^1_%SAN TEST2-*-1_^1_%JMP* T3CK_^1TEST2 LDA =N$2032_%BEGIN TEST 2_^1_%STA TNUM_^1_%SET A_,SET ALL REGISTERS_^1_%RTJ* FXIMAG_)TO FFFF._^1_%CLR A_,FIX IMAGE_^1_%STA* PATT1_*PARAMETERS_^1_%LDA =N$00FF_^1_%STA* PATT2_^1_%RTJ SAMPAT_^1_%SPC 2_^1************************************************************************_^1*_]€€_'*_^1*_!SECTION 3_!USER INPUT PATTERN ON ONE CHANNEL, ALL OTHERS $0000_"*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T3CK_!LDA* TESTS_(IS TEST3 REQUESTED_^1_%AND- ONEBIT+3_^1_%SAN TEST3_^1_%JMP* T4CK_^1TEST3 LDA =N$2033_%BEGIN TEST 3_^1_%STA TNUM_^1_%CLR A_^1_%RTJ* FXIMAG_^1_%LDA* SPCPAT_'8 BIT PATTERN_^1_%STA* PATT1_(FIX €€IMAGE PARAMETERS FOR_^1_%CLR A_.SAMPAT._^1_%STA* PATT2_^1_%RTJ SAMPAT_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1* SECTION 4_!LEFT SHIFTING ONE BIT ON ONE CHANNEL, ALL OTHERS $0000 *_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T4CK_!LDA* TESTS_(IS TEST 4 REQUESTED_^1_%AND- €€ONEBIT+4_^1_%SAN TEST4-*-1_^1_%JMP* T5CK_^1*_]_^1TEST4 LDA =N$2034_%BEGIN TST 4_^1_%STA TNUM_^1_%CLR A_,SET ALL REGISTERS_^1_%RTJ* FXIMAG_)TO ZERO._^1_%LDA- ONEBIT+15_#GET FIRST IMAGE, $8000._^1_%STA IMAGE1_^1_%RTJ* CRCBIT_^1_%SET A_^1_%RTJ* FXIMAG_^1_%LDA- ZROBIT+15_#GET SECOND IMAGE, $7FFF._^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%SPC 2_^1**************************************€€**********************************_^1*_]_'*_^1* SECTION 5_!LEFT SHIFTING ZERO BIT ON ONE CHANNEL, ALL OTHERS $FFFF *_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T5CK_!LDA* TESTS_(IS TEST 5 REQUESTED_^1_%AND- ONEBIT+5_^1_%SAN TEST5-*-1_^1_%JMP ENDTST_^1TEST5 LDA =N$2035_%BEGIN TEST 5_^1_%STA TNUM_^1_%SET A_^1_%RTJ* FXIMAG_^€€1_%LDA- ZROBIT+15_#GET FIRST IMAGE, $7FFF_^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%CLR A_^1_%RTJ* FXIMAG_^1_%LDA- ONEBIT+15_#GET SECOND IMAGE, $8000_^1_%STA* IMAGE1_^1_%RTJ* CRCBIT_^1_%JMP ENDTST_^1*_]_^1*_$TEST PARAMETERS_^1*_]_^1LU_#NUM 0_^1LU2_"NUM 0_^1TESTS NUM 0_^1SWITCH NUM 0_^1RUNS_!NUM 0_^1SPCPAT NUM 0_^1_%SPC 2_^1******************************************************€€******************_^1*_]_'*_^1*_2SET ALL CHNLS TO DESIRED PATTERN_2*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1FXIMAG 0_"0_^1_%LDQ* NUMCHN_'FILL TABLE OF OUTPUT_^1FX1_"STA PATOUT,Q_'IMAGES WITH PATTERN_^1_%INQ -1_-IN A-REG._^1_%SQM FX2-*-1_^1_%JMP* FX1_^1FX2_"CLR Q_,SET ALL REGISTERS_^1_%TCQ A_^1_%RTJ* DIGIO_^1_%JMP* (FXIM€€AG)_^1_%SPC 2_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_.COMMOM ROUTINE FOR SHIFTING PATTERN I/O_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CRCBIT 0_"0_^1CIRC1 RTJ* POUTLD_'SET UP PATOUT._^1_%LDQ* BEGCHN_^1_%LDA TNUM_)SET-UP PARAMETERS FOR_^1_%AND- ONEBIT_)REG. I/O._€€^1_%SAZ CIRC2-*-1_^1_%TRQ A_,FOR TEST 5._^1_%INA -1_^1_%JMP* CIRC3_^1CIRC2 TRQ A_^1CIRC3 RTJ* DIGIO_^1_%RTJ CHKREG_^1_%LDA* BITCTR_'CK FOR LAST BIT POSITION._^1_%INA -8_+HAVE WE REACHED THE 8 BIT POSITION_^1_%SAZ CIRC4-*-1_^1_%JMP* CIRC1_^1CIRC4 STA* BITCTR_^1_%LDQ* BEGCHN_'REINITIALIZE CURRENT_^1_%LDA* IMAGE1_)CHANNEL IMAGE._^1_%AND- LPMSK+7_^1_%SAZ CIRC5-*-1_^1_%LDA =€€N$00FF_%SA_^1CIRC5 STA PATOUT,Q_^1_%TRQ A_^1_%RTJ* DIGIO_^1_%LDA* BEGCHN_'CK FOR LAST CHANNEL_^1_%SUB* NUMCHN_^1_%SAZ CIRC6-*-1_#NO, INCREMENT_^1_%RAO* BEGCHN_)COUNTER_^1_%JMP* CIRC1_^1CIRC6 STA* BEGCHN_'YES, ZERO COUNTER._^1_%JMP* (CRCBIT)_^1*_]_^1PATT1 NUM 0_^1PATT2 NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_+€€SHIFT DATA PATERN AND STORE IN OUTPUT TABLE_.*_^1*_]_'*_^1_%SPC 2_^1POUTLD 0_"0_^1_%LDA* IMAGE1_'GET OLD IMAGE_^1_%ALS 1_.AND SHIFT LEFT._^1_%STA* IMAGE1_^1_%LDQ* BEGCHN_'GET COUNTER._^1_%AND =N$00FF_%SAVE ONLY THE LOWEER 8 BITS_^1_%STA PATOUT,Q_$STORE CURRENT IMAGE FOR_^1_%RAO* BITCTR_'INCREMENT BIT COUNTER_^1_%JMP* (POUTLD)_^1*_]_^1_%BZS OUTCHN(16)_^1_%BZS INCHN(16)_^1*_]_^€€1NUMCHN NUM 0_^1BEGCHN NUM 0_^1CURCHN NUM 0_^1ENDCHN NUM 0_^1BITCTR NUM 0_^1IMAGE1 NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_0COMMON I/O ROUTINE FOR ALL SECTIONS_1*_^1*_]_'*_^1************************************************************************_^1*****************************************************************€€*******_^1*_#RELAYS ARE SET UP IN FXIMAG THEN ONE CHANL AT A TIME THE DESIRED_^1*_"PATTERN IS OUTPUTTED THEN ALL THE CHANNELS ARE READ IN. SO FOR_^1*_"EXP. CHANLS 1 THROUGH 3 ARE SET TO ZERO BY FXIMAG THEN WHEN THIS_^1*_!ROUTINE (DIGIO) IS ENTERD AGAIN BY SAMPAT OR CRCBIT ONE CHANL IS SET_^1*_"TO A DESIRED PATTERN . SO NOW ONE CHANL IS SET TO THE DESIRED_^1*_"PATTERN AND ALL THE O€€THERS ARE STILL SET TO ZERO OR WHATEVER FIXMAG_^1*_"SET THEM TOO. THE CHANL_^1*_"THAT WAS SET TO THE SPECIAL PATTERN IS RESET THEN THE TEST_^1*_"GOES TO THE NEXT CHANL AND SO ON UNTILL ALL THE CHANLS ARE DONE._^1************************************************************************_^1_%SPC 2_^1DIGIO 0_"0_^1_%STQ* CURCHN_'Q-REG. HAS BEG. CHANNEL._^1_%SAP DIO1A-*-1_^1_%LDA* NUM€€CHN_^1DIO1A STA* ENDCHN_'A-REG. HAS LAST CHANNEL._^1DIO1_!LDQ* CURCHN_'GET CHANNEL INDEX._^1_%LDA* PATOUT,Q_$GET IMAGE FOR OUTPUT._^1_%STA* IMAGE_^1_%LDA* OUTCHN,Q_^1_%AND- LPMSK+15_^1_%STA* OUTCHN,Q_$CLEAR ERROR FLAG_^1_%STA* DATABL_^1_%LDA* LU1555_^1_%SAN RIOMO_(SKIP IF REMOTE._^1_%LDQ* DATABL_^1_%LDA* IMAGE_^1*_]_^1_%OUT REJECT-*_^1_%JMP* COMPL_(NO ERRORS LOOK ANYWAY_^1REJECT€€ NOP 0_^1_%LDQ =N$8001_%SET AN INT OR EXT ERROR FLAG INDICATION_^1_%JMP* COMPL_(GO PROCESS ERROR_^1*_]_^1RIOMO RTJ- (AMONI)_^1REF1_!ADC 2*FRC+FX+4*FRP+4*FCP_^1_%ADC COMPL-REF1_"TO SPECIFIED REGISTER._^1_%ADC 0_^1LU1555 NUM 0_,LOGICAL UNIT HERE._^1_%NUM 1_^1_%ADC DATABL-REF1_^1_%JMP- (ADISP)_^1DATABL NUM 0_^1IMAGE NUM 0_,REGISTER BIT IMAGE._^1COMPL RTJ ERRCK1_'CK FOR E€€RROR ON OUTPUT._^1OK_#LDA* CURCHN_'CK FOR LAST CHANNEL_^1_%SUB* ENDCHN_^1_%SAN DIO2-*-1_^1_%STA* CURCHN_'ZERO CURCHN ON COMPLETION_^1_%JMP* DIO4_+OUTPUT._^1DIO2_!LDA* CURCHN_'CK FO LAST CHANNEL_^1_%SUB* NUMCHN_)ADDR._^1_%SAN DIO3-*-1_^1_%STA* CURCHN_'ZERO CURCHN AND CONTINUE_^1_%JMP* DIO1_+OUTPUT._^1DIO3_!RAO* CURCHN_'INCREMENT CHANNEL_^1_%JMP* DIO1_+COUNTER AND CONTINUE._^1*_]_^€€1*_%MAKE A TIMER CALL FOR RELAY TO SET UP_^1*_]_^1DIO4_!RTJ- (AMONI)_%MAKE A TIMER CALL FOR RELAYS TO SET UP_^1TIME_!NUM $1104_^1_%ADC CNTINU-TIME_^1_%NUM 2_^1_%JMP- ($EA)_^1*_]_^1*_]_^1CNTINU LDQ* CURCHN_^1_%LDA* INCHN,Q_%GET CHANNEL ADDRESS._^1_%AND- LPMSK+15_^1_%STA* INCHN,Q_^1_%STA* TABL2_^1_%LDA* LU1544_^1_%SAN RIOMI_(SKIP IF REMOTE_^1_%LDQ* TABL2_^1*_]_^1_%INP REJCT2-*_^€€1_%JMP* COMP3_^1REJCT2 NOP 0_^1_%LDQ =N$8001_%STUFF AN INT OR EXT REJECT INDICATION_^1_%JMP* COMP3_^1*_]_^1RIOMI RTJ- (AMONI)_%CALL FOR REMOTE DIGITAL INPUT._^1REF2_!ADC 1*FRC+FX+4*FRP+4*FCP_^1_%ADC COMP2-REF2_^1_%ADC 0_^1LU1544 NUM 0_^1_%NUM 1_^1_%ADC TABL2-REF2_^1_%JMP- (ADISP)_^1TABL2 NUM 0_,INDEX OR W E S._^1DATAIN NUM 0_,DIGITAL INPUT WORD._^1COMP2 LDA* DATAIN_^1€€COMP3 STQ* SAVEQ_^1_%LDQ SWITCH_'STORE COMPLEMENT OF_^1_%SQZ DIO4A-*-1_%DIGITAL INPUT_^1_%TCA A_.IF SWITCH IS ON._^1DIO4A LDQ* CURCHN_^1_%STA* PATIN,Q_%STORE DIGITAL INPUT._^1_%LDQ* SAVEQ_^1_%RTJ ERRCK2_'CK FOR ERROR ON INPUT._^1_%LDA* CURCHN_'CK FOR LAST CHANNEL._^1_%SUB* NUMCHN_^1_%SAZ DIO5-*-1_^1_%RAO* CURCHN_'INCREMENT COUNTER._^1_%JMP* CNTINU_^1DIO5_!JMP* (DIGIO)_'RETUR€€N._^1SAVEQ NUM 0_^1*_]_^1_%BZS PATOUT(16)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_,COMMOM ROUTINE FOR NON-SHIFTING PATTERN I/O_-*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1SAMPAT 0_"0_^1SAM1_!LDQ* SAMCHN_'SET CHANNEL IMAGE._^1_%LDA PATT1_^1_%STA* PATOUT,Q_^1_%TRQ A€€_,OUTPUT CURRENT_^1_%RTJ* DIGIO_*CHANNEL._^1_%RTJ* CHKREG_^1_%LDQ* SAMCHN_'GET CURRENT CHNL IMAGE._^1_%LDA PATT2_^1_%STA* PATOUT,Q_^1_%TRQ A_^1_%RTJ* DIGIO_^1_%LDA* SAMCHN_'CK FOR LAST CHANNEL._^1_%SUB NUMCHN_^1_%SAZ SAM2-*-1_^1_%RAO* SAMCHN_^1_%JMP* SAM1_^1SAM2_!STA* SAMCHN_^1_%JMP* (SAMPAT)_^1SAMCHN NUM 0_^1_%SPC 2_^1*********************************************************€€***************_^1*_]_'*_^1*_7CHECK DATA FOR ERRORS_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1CHKREG 0_"0_^1_%LDQ* CHNCTR_^1_%LDA OUTCHN,Q_$NO DATA CK IF CHL REJECT_^1_%SAP 1_^1_%JMP* CHK1_^1_%LDA INCHN,Q_%NO DATA CK IF CHL REJECT_^1_%SAP 1_^1_%JMP* CHK1_^1_%LDA* PATOUT,Q_$GET IMAGE OUT_^1_%STA* PAOUT_(STORE IN HOLD_^1_%€€LDA* PATIN,Q_%GET PATTERN IN_^1_%LDQ =N$00FF_%USED TO HELP SET UP UPPER HALF OF PATTERN_^1_%LLS 8_,GET UPPER HALD OF PATTERN IN IN Q_^1_%TCQ Q_,COMPLEMENT Q BECAUSE TEST LEAD JUMPERS COMP_^1*_8LEMENTS THE UPPER HALF.AFTER COMPLEMENTING_^1*_8Q AND A SHOULD BE EQUAL IF NOT AN ERROR._^1*_]_^1_%ALS 8_^1_%STA* PAIN_)STORE PATTERN IN 8 BITS SAME AS PATTERN OUT_^1_%EAQ A_^1_%SAZ CM€€POK_(COMPLEMENT IS OK_^1_%LDQ* CHNCTR_'THEY WERE NOT EQUAL_^1_%JMP* ERROR_^1CMPOK LDA* PAOUT_^1_%EOR* PAIN_)DOES PATTERN OUT = PATTERN IN_^1_%SAZ CHK1_)THEY EQUAL_^1_%LDQ* CHNCTR_'THEY DONT EQUAL ERROR CONDITION_^1ERROR RTJ* CMPERR_'COMPARE ERROR_^1CHK1_!LDA* CHNCTR_'CK FOR LAST CHANNEL._^1_%SUB NUMCHN_^1_%SAZ CHK2-*-1_^1_%RAO* CHNCTR_'INCREMENT COUNTER_^1_%JMP* CHKREG+1_^1CHK€€2_!STA* CHNCTR_'ZERO COUNTER._^1_%JMP* (CHKREG)_$RETURN._^1CHNCTR NUM 0_^1*_]_^1_%BZS PATIN(16)_^1PAOUT NUM 0_,HOLD FOR PATTERN OUT_^1PAIN_!NUM 0_,HOLD FOR PATTERN IN_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_5OUTPUT DATA ERROR MESSAGE_6*_^1*_]_'*_^1************************************************************************_€€^1_%SPC 2_^1CMPERR 0_"0_^1_%LDA* PATOUT,Q_$GET AND CONVERT_^1_%RTJ (RHXASC)_^1_%ADC (OLDPAT-*)_^1_%LDQ* CHNCTR_'GET AND CONVERT_^1_%LDA* PATIN,Q_(INPUT VALUE._^1_%RTJ (RHXASC)_^1_%ADC (NEWPAT-*)_^1_%LDQ* CHNCTR_^1_%LDA OUTCHN,Q_^1_%RTJ (RHXASC)_^1_%ADC (CHAN1-*)_^1_%LDQ* CHNCTR_^1_%LDA INCHN,Q_^1_%RTJ (RHXASC)_^1_%ADC (CHAN2-*)_^1_%RTJ* INIMSG_^1_%JMP* (CMPERR)_^1_%RTJ €€(MESAGE)_$OUTPUT COMPARE ERROR MSG_^1MES5_!NUM $0344_^1_%ADC (START-MES5)_^1_%NUM 3_^1_%ADC MSG11B-MES5_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG5B-MES5_^1_%ADC MSG5E-MSG5B_^1CMP1_!JMP* (CMPERR)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3CHECK FOR 1555 HARDWARE ERRORS_3*_^1*_]_'*_^1**********************************************€€**************************_^1_%SPC 2_^1ERRCK1 0_"0_^1_%LDA LU1555_^1_%SAN RIOM1_(SKIP IF REMOTE._^1_%JMP* LOCL1_^1RIOM1 LDQ PHYLO2_'PHYSTAB ADDRESS_^1_%LDA- ESTAT2,Q_$HARDWARE STATUS_^1_%STA* ERRBIT_^1_%AND =N$3600_%LOOK ONLY AT PERTIENT BITS._^1_%SUB =N$0600_^1_%SAN FLG1_)SKIP IF ERROR._^1_%JMP* ERR11_^1LOCL1 SQM 1_,SKIP IF ERROR._^1_%JMP* ERR11_^1_%STQ* ERRBIT_^1FLG1_!L€€DQ CURCHN_^1_%LDA OUTCHN,Q_^1_%EOR- NZERO+15_$SET BIT 15 FOR ERROR FLAG_^1_%STA OUTCHN,Q_^1_%RTJ* INIMSG_^1_%JMP* ERR11_^1_%LDA DATABL_^1_%RTJ* CHLMSG_^1_%RTJ (MESAGE)_$OUTPUT MESSAGE_^1MES6_!NUM $0444_^1_%ADC (START-MES6)_^1_%NUM 3_^1_%ADC MSG11B-MES6_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG4B-MES6_^1_%ADC MSG4E-MSG4B_^1_%ADC MSG8B-MES6_^1_%ADC MSG8E-MSG8B_^1ERR11 RTJ* END€€CK_^1_%JMP* (ERRCK1)_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_3CHECK FOR 1544 HARDWARE ERRORS_3*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ERRCK2 0_"0_^1_%LDA LU1544_^1_%SAN RIOM2_(SKIP IF REMOTE._^1_%JMP* LOCL2_^1RIOM2 LDQ PHYLOC_'PHYS TAB ADDRESS._^1_%LDA- ESTAT2,Q_€€$HARDWARE STATUS._^1_%STA* ERRBIT_^1_%AND =N$3600_%LOOK ONLY AT PERTIENT BITS._^1_%SUB =N$0600_^1_%SAN FLG2_)SKIP IF ERROR_^1_%JMP* ERR22_^1LOCL2 SQM 1_,SKIP IF ERROR._^1_%JMP* ERR22_^1_%STQ* ERRBIT_^1FLG2_!LDQ CURCHN_'CURRENT CHANNEL INDEX._^1_%LDA INCHN,Q_^1_%EOR- NZERO+15_$SET ERROR BIT._^1_%STA INCHN,Q_^1_%RTJ* INIMSG_^1_%JMP* ERR22_^1_%LDA TABL2_^1_%RTJ* CHLMSG_^1_%RT€€J (MESAGE)_$OUTPUT MESSAGE_^1MES7_!NUM $0444_^1_%ADC (START-MES7)_^1_%NUM 3_^1_%ADC MSG11B-MES7_^1_%ADC MSG11E-MSG11B_^1_%ADC MSG6B-MES7_^1_%ADC MSG6E-MSG6B_^1_%ADC MSG8B-MES7_^1_%ADC MSG8E-MSG8B_^1ERR22 RTJ* ENDCK_^1_%JMP* (ERRCK2)_^1*_]_^1*_]_^1ENDCK 0_"0_^1_%LDA FLAG_)CK FOR STOP FLAG_^1_%AND- ONEBIT_^1_%SAN 1_^1_%JMP* (ENDCK)_^1_%JMP* ENDMSG_^1_%EJT_]_^1**********€€**************************************************************_^1*_]_'*_^1*_1OUTPUT CHANNEL PLUS HARDWARE ERROR_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1*_]_^1CHLMSG 0_"0_^1_%RTJ (RHXASC)_^1_%ADC (REJCHL-*)_^1_%LDA* ERRBIT_^1_%RTJ (RHXASC)_$INSTALL STATUS IN MESSAGE._^1_%ADC (STATUS-*)_^1_%JMP* (CHLMSG)_^1ERRBIT NUM 0_€€^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_1OUTPUT CURRENT TEST AND PASS NUMBER_0*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INIMSG 0_"0_^1_%RAO* ERRCTR_^1_%LDA FLAG_)CK FOR NO PRINTOUT FLAG_^1_%AND- ONEBIT+7_^1_%SAN INIMS1-*-1_^1_%RAO* INIMSG_^1_%LDA PASSES_^1_%INA 1_-€€PASSES HASNT BEEN UPDATED YET_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (NUMPAS-*)_^1INIMS1 JMP* (INIMSG)_^1ERRCTR NUM 0_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENDTST RAO* PASSES_^1_%LDA FLAG_)€€CK FOR STOP FLAG SET._^1_%AND- ONEBIT_^1_%SAN ENDMSG-*-1_^1_%LDA RUNS_^1_%SAZ ENDMSG-*-1_^1_%SAM END1-*-1_^1_%SUB* PASSES_^1_%SAZ ENDMSG-*-1_^1END1_!JMP BEGIN_^1ENDMSG LDA* PASSES_'OUTPUT END MESSAGE_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (PASSES-*)_^1_%LDA* ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRCNT-*)_^1_%RTJ (MESAGE)_$O€€UTPUT END MESSAGE_^1MES8_!NUM $8144_^1_%ADC MSG3B-MES8_^1_%ADC MSG3E-MSG3B_^1_%LDA FLAG_)CK FOR STOP TO RE-ENTER PARAMETERS_^1_%AND- ONEBIT+6_^1_%SAZ END2-*-1_^1_%CLR A_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!LDA START+1_%CLEAR TEST NAME FROM PGM STACK_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_$CLEAR TEST NAME FROM PGM STACK, RELEASE CORE_^1_%ADC (START-*)_^1_%EJT_]_^1***************€€*********************************************************_^1*_]_'*_^1*_;MESSAGE BUFFERS_:*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSG1B ALF 10,BEGIN 1555/1544 TEST_^1_%NUM $D00_^1_%ALF 18,OUT LU,IN LU,TESTS,SWITCH,RUNS_^1_%EQU MSG1E(*)_^1MSG2B ALF $,OUT CHANL EQUIP-MOD-SLOT, IN CHANL EQUIP-MOD-SLOT$_^1_%NUM $D00_^1_€€%EQU MSG2E(*)_^1MSG3B ALF 10,END 1555/1544 TEST,_^1PASSES NUM 0,0_^1_%ALF 4, RUNS,_^1ERRCNT NUM 0,0_^1_%ALF 4, ERRORS._^1_%EQU MSG3E(*)_^1MSG4B ALF 3, 1555_^1_%EQU MSG4E(*)_^1MSG5B ALF 5, OUT CHNL_^1CHAN1 NUM 0,0_^1_%ALF 2, IS_^1OLDPAT NUM 0,0_^1_%ALF 5, IN CHNL_^1CHAN2 NUM 0,0_^1_%ALF 2, IS_^1NEWPAT NUM 0,0_^1_%EQU MSG5E(*)_^1MSG6B ALF 3, 1544_^1_%EQU MSG€L6E(*)_^1MSG7B ALF 13,SPECIAL PATTERN FOR TEST 3_^1_%EQU MSG7E(*)_^1MSG8B ALF 2,CHL_^1REJCHL NUM 0,0_^1_%ALF 7, STATUS ERROR_^1STATUS NUM 0,0_^1_%EQU MSG8E(*)_^1MSG10B ALF 5, LU ERROR_^1_%EQU MSG10E(*)_^1MSG11B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 3, RUN_^1NUMPAS NUM 0,0_^1_%EQU MSG11E(*)_^1_%EQU END(*)_^1_%END_]_^__LPSCMAD1 CSY/ E20 P€1_%NAM SCMAD1_'DECK-ID E20 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_+1536 LOW SPEED TEST ROUTINE_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION INCREMENTAL-RELEASE 1_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^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*_]_^1*_]_^1*_$THIS ROUTINE TESTS THE PERFORMANCE OF THE 1536 LOW SPEED ANALOG_^1* INPUT CONTROLLER. GENERALLY, THE ROUTINE OBTAINS INPUTS FROM A_^1* €€ SEQUENCE OF 1 TO 8 CHANNELS (BEGADR MINUS ENDADR CAN BE GREATER THAN_^1* 8 BUT THE TEST DOES ITS TESTING IN GROUPS OF 8, THEN INCREMENTS ITS_^1* COUNTERS IF YOU SPECIFIED MORE THAN 8 AND DOES THE NEXT GROUP OF_^1* POINTS WHICH CAN BE FROM 1 TO 8),_^1*_5REPEATS A SPECIFIED NUMBER OF TIMES, COMPARES THE_^1* ACTUAL TO THE EXPECTED COUNTS, AND GENERATES A DOUBLE PRECISION_^1* HI€€STOGRAM WHICH ALLOWS A MAXIMUM COUNT OF 9,999,999 FOR EACH ERROR_^1* COUNTER._^1*_$IN ORDER TO CONDUCT THE TEST, THE USER MUST PROVIDE THE EXPECTED_^1* FULL-SCALE VALUE FOR EACH CHANNEL BEING TESTED. THIS IS MOST_^1* CONVENIENTLY ACCOMPLISHED USING THE ANALOG INPUT TEST BOX. WITH THE_^1* TEST BOX, THE USER CAN APPLY THE DESIRED VOLTAGE TO EACH OF THE_^1* CHANNELS. THEN, WHEN€€ REQUESTED BY THE SCMM AD1 TEST ROUTINE, HE CAN_^1* ENTER THE EXPECTED PERCENT OF FULL SCALE FOR EACH CHANNEL. THIS_^1* INFORMATION IS CONVERTED BY THE PROGRAM TO EXPECTED COUNTS. THE_^1* EXPECTED COUNTS ARE COMPARED TO ACTUAL COUNTS TO PRODUCE A HISTOGRAM_^1* OF ERRORS. AFTER EACH INPUT, CHECKS ARE MADE FOR ANY ERROR_^1* INDICATIONS RETURNED BY THE DRIVER. ANY ERRORS INDI€€CATED RESULT IN_^1* THE OUTPUT OF DIAGNOSTIC MESSAGES._^1**_]_^1**_]_^1_%EJT_]_^1*_]_^1************************************************************************_^1*_]_^1*****_#OPERATING INSTRUCTIONS ***********_^1*_]_^1*_]_^1*_$LU_"LOGICAL UNIT OF DEVICE IN DECIMAL_^1*_$BEG ADR_!STARTING CHANNEL IN DECIMAL_^1*_$END ADR_!ENDING CHANNEL, MUST BE GREATER OR EQUAL TO BGN ADR_^1*_$RUN€€S_!NUMBER OF RUNS IN DECIMAL_^1*_$NUM OF HISTOGRAMS_$NUM OF HISTOGRAMS TO BE PRINTED_^1*_*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1_%EQU LPMSK(2)_$START OF LOWER BIT MASKS_^1_%EQU NZERO($12)_"START OF UPPER BIT MASKS + LOC. OF NEG. ZERO_^1_%EQU ZERO($22)_#LOCATION OF ZERO_^1_%EQU ONEBIT($23)_!START OF ONE BIT MASKS_^1_%EQU ZROBIT($33)_!START OF ZERO BIT MASKS_^1_%EQU ADISP($EA)_"LOCATION OF AD€€DRESS OF DISPATCHER_^1_%EQU AMONI($F4)_"LOCATION OF ADDRESS OF MONITOR_^1_%EQU FRC($200)_#REQUEST WORD "REQUEST CODE" LOCATOR_^1_%EQU FX($100)_$REQUEST WORD "F BIT" LOCATOR_^1_%EQU FRP($10)_$REQUEST WORD "REQUEST PRIORITY" LOCATOR_^1_%EQU FCP(1)_'REQUEST WORD "COMPLETION PRIORITY" LOCATOR_^1*_]_^1_%EXT TMRTYP_(TIMER TYPE IN SYSDAT_^1_%EXT E15721_'TIMER WEMS IN SYSDAT_^1_%EJT_€€]_^1************************************************************************_^1*_]_'*_^1*_8COMMUNICATIONS REGION_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1START ALF 3,TSTCTR_$TEST MNEMONIC_^1_%ADC END-START_^1_%NUM $90_*PSR LEVEL_^1*_]_^1*_]_^1FLAG_!NUM 0_^1*_]_^1INFOIN NUM 0_^1GETFLD NUM 0_^1RHXASC NUM 0_^1ROCDEC NU€€M 0_^1RDECHX NUM 0_^1CLRSTK NUM 0_^1MESAGE NUM 0_^1************************************************************************_^1*_]_'*_^1*_8INPUT TEST PARAMETERS_7*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ENTER CLR A_,CLEAR COUNTERS AND FLAGS_^1_%STA INPERR_^1_%STA REPEAT_^1_%STA ERRCTR_^1_%STA TMRMSG_^1MES0_!RTJ* (ME€€SAGE)_$OUTPUT TITLE MESSAGE_^1MES1_!NUM $8244_^1_%ADC MSG1B-MES1_^1_%ADC MSG1E-MSG1B_^1_%ADC MSG2B-MES1_^1_%ADC MSG2E-MSG2B_^1_%ENQ 0_^1_%RTJ* (INFOIN)_$GET PARAMETERS_^1INI12 RTJ* (GETFLD)_^1_%SQP INI12A_'TTY ERROR_^1_%RTJ* ERRCK_(YES, TTY ERROR_^1_%JMP* MES0_^1INI12A INQ -1_^1_%STA* TESTS,Q_^1_%INQ -3_^1_%SQZ INI13-*-1_^1_%JMP* INI12_^1INI13 LDA* CMPUTR_(CONVERT COMPU€€TER TYPE_^1_%RTJ* (RDECHX)_^1_%STA* CMPUTR_^1_%LDA* RUNS_^1_%SAM RN8000_'IS IT AN 8000_^1_%RTJ* (RDECHX)_$NO, CONVERT_^1RN8000 STA* RUNS_^1_%LDA* INTLNE_^1_%SAN 1_,INT LINE NOT ZERO CHECK_^1_%JMP* INI21_)ITS ZERO, PROGRAM WILL CATCH IT_^1_%RTJ* (RDECHX)_$CONVERT TO HEX_^1_%STA* INTLNE_^1_%TRA Q_^1_%INA -2_+CHECK FOR CORRECT RANGE (2 TO 15)_^1_%SAM INI14-*-1_^1_%INA -14_^1_%SA€€P INI14-*-1_^1_%JMP* INI21_^1INI14 RTJ* (MESAGE)_$INTERRUPT ASSIGNMENT ERROR_^1MES3_!NUM $8244_^1_%ADC (START-MES3)_^1_%NUM 3_^1_%ADC MSG9B-MES3_^1_%ADC MSG9E-MSG9B_^1_%SPC 2_^1INI21 RTJ* (MESAGE)_$REQUEST TEST CONFIGURATION INFO_^1MES4_!NUM $8144_^1_%ADC MSG3B-MES4_^1_%ADC MSG3E-MSG3B_^1_%CLR A_^1_%STA* NUMCTR_^1_%LDA =A00_^1_%STA MSG4B+1_^1INI22 RAO MSG4B+1_^1INI€€22A RTJ* (MESAGE)_^1MES5_!NUM $8144_^1_%ADC MSG4B-MES5_^1_%ADC MSG4E-MSG4B_^1_%ENQ +1_^1_%RTJ* (INFOIN)_$GET TEST CONFIGURATION INFO_^1_%LDA* NUMCTR_^1_%STA- I_^1_%SPC 2_^1INI23 RTJ* (GETFLD)_^1_%SQP M5_+TTY ERROR_^1_%RTJ* ERRCK_(YES_^1_%JMP* INI22A_^1M5_#INQ -1_^1_%JMP* *+1,Q_(JMP TO APPORIATE FIELD PROCESSOR_^1_%JMP* FIELD1_^1_%JMP* FIELD2_^1_%JMP* FIELD3_^1_%JMP* FIELD4_€€^1_%SPC 2_^1FIELD5 STA TYPE,I_'PROCESS OUTPUT TYPE, CK FOR PROPER RANGE_^1_%INA -1_^1_%SAM TYPERR-*-1_^1_%INA -10_^1_%SAP TYPERR-*-1_^1_%RAO* NUMCTR_^1_%LDA* NUMCTR_^1_%INA -4_^1_%SAZ F5EXIT-*-1_^1_%JMP* INI22_^1F5EXIT JMP* INI31_^1*_]_^1TYPERR RTJ* (MESAGE)_$NOT IN RANGE 1 TO 10_^1MES6_!NUM $8144_^1_%ADC MSG10B-MES6_^1_%ADC MSG10E-MSG10B_^1_%JMP* INI22A_^1*_]_^1*_]_^1FI€€ELD4 AND- ZROBIT+7_$PROCESS OUTPUT WEMS CODE_^1_%STA OUWEMS,I_^1_%JMP* INI23_^1*_]_^1*_]_^1FIELD3 STA JUMPER,I_$STORE JUMPER CONFIGURATION_^1_%JMP* INI23_^1*_]_^1*_]_^1FIELD2 STA DASHNO,I_$PROCESS DASH NUMBER, CHECK FOR ERROR_^1_%INA -1_^1_%SAM DSHERR-*-1_^1_%INA -2_^1_%SAP DSHERR-*-1_^1_%JMP* INI23_^1DSHERR RTJ* (MESAGE)_$1547 DASH NUMBER ERROR - NOT 1 OR 2_^1MES7_!NUM $81€€44_^1_%ADC MSG11B-MES7_^1_%ADC MSG11E-MSG11B_^1_%RTJ* ERRCK_(SEE IF 3 ERRORS_^1_%JMP* INI22A_^1*_]_^1*_]_^1FIELD1 SAM INI31-*-1_#PROCESS 1547 WEMS CODE_^1_%AND- ZROBIT+7_^1_%STA CTWEMS,I_^1_%JMP* INI23_^1INI31 LDA* NUMCTR_^1_%INA -1_+CHECK FOR NO INFO ENTERED_^1_%STA* NUMCTR_^1_%SAP INI32-*-1_^1_%JMP* INI21_^1INI32 RTJ* HERE_^1HERE_!NUM 0_^1_%LDQ* CMPUTR_^1_%LDA* DLYCNT,Q_€€^1_%STA DELAY+1_^1_%JMP* BEGIN_^1*_]_^1_%SPC 2_^1ERRCK NUM 0_,ROUTINE TO CK IF 3 TTY ERRORS_^1_%RAO* INPERR_^1_%LDA* INPERR_'IS THIS THE THIRD ERROR_^1_%INA -3_^1_%SAM NOT3_^1_%JMP ENDMSG_'YES, TERMINATE TEST_^1NOT3_!JMP* (ERRCK)_^1_%SPC 2_^1INPERR NUM 0_^1TESTS NUM 0_^1RUNS_!NUM 0_^1INTLNE NUM 0_^1CMPUTR NUM 0_,COMPUTER TYPE_^1NUMCTR NUM 0_^1_%SPC 2_^1DLYCNT NUM 1€€125_)1784-2_^1_%NUM 740_*1784-1_^1_%NUM 960_*1704,1714_^1_%NUM 500_*1774_^1_%NUM 740_*MP17 (ASSUMES AVERAGE CYCLE TIME OF 0.9 U SEC)_^1*_]_^1HSTRY BZS HSTRY(4)_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_7INITIALIZE OUTPUT UNIT_7*_^1*_]_'*_^1************************************************************************_^1_%SPC €€ 2_^1BEGIN LDA =A0_^1_%STA TNUM_^1_%CLR A_^1_%STA- I_^1BEG1_!CLR A_^1_%STA* HSTRY,I_^1_%LDA TYPE,I_^1_%INA -7_^1_%CLR Q_^1_%SAP BEG2-*-1_$SKIP IF RELAY TYPE_^1_%INA +7_^1_%AND- ONEBIT_^1_%SAN BEG2-*-1_^1_%SET Q_^1BEG2_!STQ* HSTRY,I_^1_%LDQ JUMPER,I_^1_%QLS 9_,CHECK INVERSION OF LOWER COUNTER B SIGNAL_^1_%SQP BEG3-*-1_^1_%LDA- ONEBIT+5_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,€€I_^1BEG3_!QLS 1_,CHECK INVERSION OF LOWER COUNTER A SIGNAL_^1_%SQP BEG4-*-1_^1_%LDA- ONEBIT+4_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1BEG4_!QLS 4_,CHECK INVERSION OF UPPER COUNTER B SIGNAL_^1_%SQP BEG5-*-1_^1_%LDA- ONEBIT+3_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1BEG5_!QLS 1_,CHECK INVERSION OF UPPER COUNTER A SIGNAL_^1_%SQP BEG6-*-1_^1_%LDA- ONEBIT+2_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,€€I_^1BEG6_!QLS 6_,CHECK INVERSION OF EXTERNAL SYNC SIGNAL_^1_%SQP BEG7-*-1_^1_%LDA- ONEBIT_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1BEG7_!ENA $15_*CLEAR THE SET BITS_^1_%EOR* HSTRY,I_^1_%STA* HSTRY,I_^1_%RTJ DIGRLY_^1_%LDA- I_^1_%RAO- I_^1_%SUB* NUMCTR_^1_%SAZ TSTSEQ-*-1_^1_%JMP* BEG1_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_€€5SECTION 1_!INTERFACE TEST_5*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1TSTSEQ LDA* TESTS_^1_%AND- ONEBIT+1_$IS TEST ONE REQUESTED_^1_%SAN TEST1-*-1_^1_%JMP T2CHK_^1TEST1 LDA =A1_*YES_^1_%STA TNUM_^1_%CLR A_^1_%STA- I_^1T11_"LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%ENA 1_^1_%RTJ OUTPUT_'OUTPUT CLEAR CARD_^1_%RTJ INPUT_(INPU€€T OVERFLOW STATUS_^1_%SAZ T12-*-1_^1_%ENQ 0_^1_%RTJ ACTEXP_'STATUS ERROR_^1_%ADC MSG5B-MES10_^1_%ADC MSG5E-MSG5B_^1T12_"LDQ CTWEMS,I_^1_%RTJ INPUT_(INPUT COUNTER STATUS_^1_%SAZ T13-*-1_^1_%ENQ 0_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T13_"LDQ CTWEMS,I_^1_%LDA- LPMSK+8_^1_%RTJ OUTPUT_'OUTPUT LOAD LOWER COUNTER_^1_%RTJ INPUT_(CHECK COUNTER STATUS_^1_%€€LDQ- LPMSK+8_^1_%EAQ Q_^1_%SQZ T14-*-1_^1_%LDQ- LPMSK+8_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T14_"LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%ENA 1_^1_%RTJ OUTPUT_'CLEAR CARD_^1_%LDQ CTWEMS,I_^1_%LDA =N$80FF_^1_%RTJ OUTPUT_'OUTPUT LOAD UPPER COUNTER_^1_%RTJ INPUT_(CHECK COUNTER STATUS_^1_%LDQ- NZERO+8_^1_%EAQ Q_^1_%SQZ T15-*-1_^1_%LDQ- NZERO+8_^1_%RTJ ACTE€€XP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T15_"LDQ CTWEMS,I_^1_%LDA- LPMSK+8_^1_%RTJ OUTPUT_'SET BOTH COUNTERS_^1_%ADD- ONEBIT+15_^1_%RTJ OUTPUT_^1_%RTJ INPUT_(CHECK STATUS_^1_%SET Q_^1_%EAQ Q_^1_%SQZ T16-*-1_^1_%SET Q_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T16_"LDQ* CTWEMS,I_^1_%CLR A_^1_%RTJ OUTPUT_'ZERO BOTH COUNTERS_^1_%LDA- ONEBIT+15_^1_%RTJ€€ OUTPUT_^1_%RTJ INPUT_(CHECK STATUS_^1_%CLR Q_^1_%EAQ Q_^1_%SQZ T17-*-1_^1_%CLR Q_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T17_"LDQ* CTWEMS,I_$CHECK CLEAR ON READ_^1_%LDA- LPMSK+8_^1_%RTJ OUTPUT_'SET COUNTERS_^1_%ADD- ONEBIT+15_^1_%RTJ OUTPUT_^1_%RTJ* INPUT_(READ COUNTER_^1_%RTJ* INPUT_(READ COUNTER AGAIN AND CHECK FOR PROPER CLEAR_^1_%LDQ* JUMPER,I_^1_%S€€QM T18-*-1_^1_%SAZ T19-*-1_^1_%RTJ MSGOUT_'ERROR NO READ CLEAR WHEN EXPECTED_^1_%ADC MSG7B-MES9_^1_%ADC MSG7E-MSG7B_^1_%JMP* T19_^1T18_"SAN T19-*-1_^1_%RTJ MSGOUT_'ERROR READ CLEAR WHEN NOT EXPECTED_^1_%ADC MSG8B-MES9_^1_%ADC MSG8E-MSG8B_^1T19_"LDA* JUMPER,I_^1_%AND* H0108_^1_%SAZ T1A-*-1_^1_%EOR* H0108_^1_%SAN T1A-*-1_^1_%JMP* T1END_(BOTH COUNTERS ARE IN EPUT MODE_^1T1A€€_"LDA* JUMPER,I_^1_%AND =N$C_^1_%SAZ T1A1-*-1_^1_%JMP* T1B_^1T1A1_!LDA- LPMSK+8_^1_%LDQ* CTWEMS,I_^1_%RTJ* OUTPUT_^1_%EOR- ONEBIT+15_^1_%RTJ* OUTPUT_^1_%ENQ 1_^1_%RTJ PULSE_(PULSE UPPER_^1_%LDQ* CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%RTJ* INPUT_^1_%STA* OFSTAT_^1_%ENQ 0_^1_%LDA* JUMPER,I_^1_%ALS 1_^1_%SAM 1_^1_%ADQ- ONEBIT+15_#IF 8 BIT, UPPER OVERFLOW STATUS WILL BE SET_^1_%LDA* OFS€€TAT_^1_%EAQ A_^1_%SAZ T1B-*-1_^1_%LDA* OFSTAT_^1_%RTJ ACTEXP_^1_%ADC MSG5B-MES10_^1_%ADC MSG5E-MSG5B_^1T1B_"LDA* JUMPER,I_^1_%AND =N$180_^1_%SAZ T1B1-*-1_^1_%JMP* T1END_^1T1B1_!LDA- LPMSK+8_^1_%LDQ* CTWEMS,I_^1_%RTJ* OUTPUT_^1_%EOR- ONEBIT+15_^1_%RTJ* OUTPUT_^1_%ENQ 0_^1_%RTJ PULSE_(PULSE LOWER_^1_%LDQ* CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%RTJ* INPUT_^1_%STA* OFSTAT_^1_%LDQ- ONE€€BIT+14_#CHECK FOR OVERFLOW STATUS_^1_%LDA* JUMPER,I_^1_%ALS 1_^1_%SAP 1_^1_%ADQ- ONEBIT+15_#UPPER OVERFLOW_^1_%LDA* OFSTAT_^1_%EAQ A_^1_%SAZ T1END-*-1_^1_%LDA* OFSTAT_^1_%RTJ ACTEXP_^1_%ADC MSG5B-MES10_^1_%ADC MSG5E-MSG5B_^1T1END LDQ* CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%ENA 1_^1_%RTJ* OUTPUT_'CLEAR CARD_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAZ T1END1-*-1_^1_%€€JMP ENDMSG_^1T1END1 LDA- I_^1_%SUB NUMCTR_^1_%SAZ T1END2-*-1_^1_%RAO- I_^1_%JMP T11_^1T1END2 JMP T2CHK_(CHECK FOR TEST 2_^1*_]_^1OFSTAT NUM 0_^1CTWEMS BZS CTWEMS(4)_^1DASHNO BZS DASHNO(4)_^1JUMPER BZS JUMPER(4)_^1OUWEMS BZS OUWEMS(4)_^1TYPE_!BZS TYPE(4)_^1H0108 NUM $0108_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_2€€INPUT, OUTPUT AND REJECT ROUTINES_1*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1INPUT 0_"0_^1_%IIN 0_^1_%INP 3_^1_%EIN 0_^1_%JMP* (INPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXTREJ_^1_%JMP* (INPUT)_^1*_]_^1OUTPUT 0_"0_^1_%IIN 0_^1_%OUT 3_^1_%EIN 0_^1_%JMP* (OUTPUT)_^1_%RTJ* INTREJ_^1_%RTJ* EXTREJ_^1_%JMP* (OUTPUT)_^1*_]_^1INTREJ 0_"€€0_^1_%STQ* QSAVE_^1_%LDQ* INTREJ_^1_%INQ +1_^1_%STQ* EXTREJ_^1_%EIN 0_^1_%ENQ 0_^1_%JMP* FRMINT_^1*_]_^1EXTREJ 0_"0_^1_%STQ* QSAVE_^1_%EIN 0_^1_%ENQ 1_^1FRMINT STA* ASAVE_^1_%RTJ (RHXASC)_^1_%ADC (AREG-*)_^1_%LDA* REJTAB,Q_^1_%STA REJTYP_^1_%LDA* REJTAB+2,Q_^1_%STA REJTYP+1_^1_%LDA* QSAVE_^1_%RTJ (RHXASC)_^1_%ADC (QREG-*)_^1_%ENQ -5_^1_%LDA* (EXTREJ),Q_^1_%RTJ (RHXASC)€€_^1_%ADC (XREG-*)_^1_%LDA- I_^1_%STA* RISAVE_^1_%RTJ* INIMSG_^1_%JMP* RJEXIT_^1_%RTJ (MESAGE)_$OUTPUT REJECT MESSAGE_^1MES8_!NUM $0344_^1_%ADC (START-MES8)_^1_%NUM 3_^1_%ADC MSG13B-MES8_^1_%ADC MSG13F-MSG13B_^1_%ADC REJTYP-MES8_^1_%ADC MSG14E-REJTYP_^1RJEXIT LDA* RISAVE_^1_%STA- I_^1_%LDA* ASAVE_^1_%LDQ* QSAVE_^1_%JMP* (EXTREJ)_^1REJTAB ALF 4, I ENTXT_^1QSAVE NUM 0_^1AS€€AVE NUM 0_^1RISAVE NUM 0_^1TRPSAV NUM 0_,HOLD FOR ORGINAL TRAP ADDRESS 1547_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8MESSAGE OUTPUT ROUTINE_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1MSGOUT 0_"0_^1_%LDA- I_^1_%STA* MISAVE_^1_%LDA* (MSGOUT)_^1_%STA* MSGPTR_^1_%RAO*€€ MSGOUT_^1_%LDA* (MSGOUT)_^1_%STA* MSGPTR+1_^1_%LDA* CTWEMS,I_^1_%RTJ (RHXASC)_^1_%ADC (CTRASC-*)_^1_%RAO* MSGOUT_^1_%RTJ* INIMSG_^1_%JMP* (MSGOUT)_^1_%RTJ (MESAGE)_$OUTPUT ERROR MESSAGE_^1MES9_!NUM $0444_^1_%ADC (START-MES9)_^1_%NUM 3_^1_%ADC MSG13B-MES9_^1_%ADC MSG13F-MSG13B_^1_%ADC M15BB-MES9_^1_%ADC MSG15E-M15BB_^1MSGPTR ADC 0_^1_%ADC 0_^1_%LDA* MISAVE_^1_%STA- I_^1€€_%JMP* (MSGOUT)_^1*_]_^1INIMSG 0_"0_^1_%RAO* ERRCTR_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAN INIMS0_(CHK FOR PREVIOUS INTERRUPTS_^1_%JMP* INIMS1_^1INIMS0 LDA TNUM_^1_%SUB =A2_^1_%SAN NOTT2-*-1_^1_%LDA TRPSAV_'LOAD WITH ORGINAL TRAP ADDRESS_^1_%LDQ INTLNE_'GET INTERRUPT LINE_^1_%QLS 2_,MULT BY 4_^1_%SQZ NOTT2_(ZERO INTERRUPT LINE, BYPASS_^1_%IIN_]_^1_%STA+ €€$103,Q_^1_%EIN_]_^1*_]_^1NOTT2 JMP ENDMSG_^1INIMS1 LDA FLAG_^1_%AND- ONEBIT+7_$CHECK FOR NO PRINTOUT FLAG_^1_%SAN INIMS2-*-1_^1_%RAO* INIMSG_^1_%LDA REPEAT_^1_%INA 1_-RUNS HASN T BEEN UPDATED YET_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRPAS-*)_^1INIMS2 JMP* (INIMSG)_^1*_]_^1ERRCTR NUM 0_^1MISAVE NUM 0_^1_%SPC 2_^1**************************************€€**********************************_^1*_]_'*_^1*_,ROUTINE TO OUTPUT ACTUAL AND EXPECTED VALUES_,*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1ACTEXP 0_"0_^1_%RTJ (RHXASC)_^1_%ADC (ACTUAL-*)_^1_%TRQ A_^1_%RTJ (RHXASC)_^1_%ADC (EXPCTD-*)_^1_%LDA* (ACTEXP)_^1_%STA* MSGLOC_^1_%RAO* ACTEXP_^1_%LDA* (ACTEXP)_^1_%STA* MSGLOC+1_^1_%L€€DA CTWEMS,I_^1_%RTJ (RHXASC)_^1_%ADC (CTRASC-*)_^1_%RAO* ACTEXP_^1_%LDA- I_^1_%STA* MISAVE_^1_%RTJ* INIMSG_^1_%JMP* (ACTEXP)_^1_%RTJ (MESAGE)_$OUTPUT MESSAGE_^1MES10 NUM $0444_^1_%ADC (START-MES10)_^1_%NUM 3_^1_%ADC MSG13B-MES10_^1_%ADC MSG13F-MSG13B_^1MSGLOC ADC 0_^1_%ADC 0_^1_%ADC MSG15B-MES10_^1_%ADC MSG15E-MSG15B_^1_%LDA* MISAVE_^1_%STA- I_^1_%JMP* (ACTEXP)_^1_%SP€€C 2_^1************************************************************************_^1*_]_'*_^1*_5OUTPUT TO 1553/1555 UNITS_6*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1DIGRLY 0_"0_^1_%STA* IMAGE_^1_%LDA- I_^1_%STA* ISAVE_^1_%LDQ OUWEMS,I_^1*_]_^1_%LDA* IMAGE_(GET PATTERN_^1_%RTJ OUTPUT_^1DIG2_!RTJ- (AMONI)_%SCH TO LEVEL 3 TO LET€€ OTHERS RUN_^1_%ADC 9*FRC+FX+3*FCP_^1_%ADC 3_^1_%DISP_^1_%LDQ* ISAVE_^1_%LDA DASHNO,Q_^1_%INA -2_^1_%SAZ DELAY-*-1_#DELAY IF 1547-2_^1_%LDA TYPE,Q_^1_%INA -7_^1_%SAP DELAY-*-1_#DELAY IF 1555-X_^1_%JMP* DLFINI_^1DELAY LDA =N800_(DELAY FOR 4 MILLISEC (1704)_^1DELAY1 INA -1_^1_%QLS 6_^1_%SAZ DLFINI-*-1_^1_%JMP* DELAY1_^1DLFINI RTJ- (AMONI)_%SCH BACK UP TO SCMM LEVEL_^1_%A€€DC 9*FRC+FX+4*FCP_^1_%ADC 3_^1_%DISP_^1GETOUT LDA* ISAVE_^1_%STA- I_^1_%JMP* (DIGRLY)_^1ISAVE NUM 0_^1IMAGE NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*_^1*_8PULSE 1547 INPUTS_;*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1PULSE 0_"0_^1_%STQ* PULSPT_^1_%LDA* PATTRN,Q_€€^1_%EOR HSTRY,I_^1_%STA HSTRY,I_^1_%RTJ* DIGRLY_'CLEAR RESET SIGNAL,ACTIVATE SET SIGNAL_^1_%LDQ* PULSPT_^1_%LDA* PATTRN,Q_^1_%EOR HSTRY,I_^1_%STA HSTRY,I_^1_%RTJ* DIGRLY_'CLEAR SET SIGNAL,ACTIVATE RESET SIGNAL_^1_%JMP* (PULSE)_^1PATTRN NUM $30,$C,$3C,1_^1PULSPT NUM 0_^1INTLOC NUM 0_^1_%SPC 2_^1************************************************************************_^1*_]_'*€€_^1*_.SECTION 2_!COUNT, INTERRUPT, SYNC TEST_/*_^1*_]_'*_^1************************************************************************_^1_%SPC 2_^1T2CHK LDA TESTS_^1_%AND- ONEBIT+2_$IS TEST 2 REQUESTED_^1_%SAN TEST2-*-1_^1_%JMP ENDTST_^1TEST2 LDA =A2_^1_%STA TNUM_^1_%LDA =XINTRES-HERE_^1_%ADD HERE_^1_%STA* INTLOC_^1_%LDQ INTLNE_^1_%QLS 2_,MULT BY 4_^1_%SQZ T2A1_^1_%IIN_]_€€^1_%LDA+ $103,Q_^1_%STA TRPSAV_^1_%LDA* INTLOC_^1_%STA+ $103,Q_^1_%EIN_]_^1_%JMP* T2A1_^1*_]_^1*_]_^1TMRMSG NUM 0_^1T2ISAV NUM 0_^1TIMEMS NUM 0_-1572-1 TIMER WEMS CODE_^1TIMLNE NUM 0_,1572-1 INTERRUPT LINE_^1*_]_^1T2A1_!CLR A_^1_%STA- I_^1*_]_^1_%LDA TMRTYP_D***********_^1_%INA -3_+CHECK IF 1572-1 IS THE SYSTEM TIMER_^1_%SAN T2A2-*-1_^1_%JMP* T2A5_^1T2A2_!LDA* TMRMSG_^1_%S€€AN T2A3-*-1_^1_%RTJ (MESAGE)_$NO TIMER MESSAGE_^1MES13 NUM $8244_^1_%ADC (START-MES13)_^1_%NUM 3_^1_%ADC MSG17B-MES13_^1_%ADC MSG17E-MSG17B_^1T2A3_!LDA TESTS_(CHECK IF TEST 2 ONLY TEST REQUESTED_^1_%AND- ZROBIT+2_^1_%SAN T2A4-*-1_^1_%LDA FLAG_^1_%AND- NZERO+1_^1_%EOR- ONEBIT_'SET STOP FLAG_^1T2A4_!JMP T2END1_^1T2A5_!LDA+ E15721_^1_%STA* TIMEMS_^1_%LDA+ $120_^1_%SAN T2A€€5A-*-1_^1_%JMP* T2A2_^1T2A5A LDQ- I_^1_%STQ* T2ISAV_^1_%LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%ENA 1_^1_%RTJ OUTPUT_'CLEAR CARD_^1T2A7B ENA $3B_*ENABLE LST TO SYNC LINE 2, ACKNOWLEDGE_^1_%LDQ* TIMEMS_'TIMER WMES_^1_%RTJ OUTPUT_'ENABLE SRG INTERRUPT AND SYNC_^1_%TRQ A_^1_%AND- ZROBIT+7_^1_%TRA Q_^1_%ENA 1_^1_%RTJ OUTPUT_'LOAD SRG_^1_%IIN_]_^1_%RTJ- (AMONI)_%TIMER REQUEST - WA€€IT FOR NEXT CLOCK PULSE_^1_%ADC 8*FRC+FX+4*FCP_^1_%ADC T2A5B-*+1_^1_%NUM 1_^1_%JMP- (ADISP)_^1T2A5B LDQ* T2ISAV_^1_%STQ- I_^1_%ENQ 3_^1_%RTJ* PULSE_(SET EXTERNAL SYNC INPUT_^1_%ENA $A_+ENABLE BOTH COUNTER INTERRUPTS_^1_%LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%RTJ OUTPUT_'ENABLE INTERRUPT_^1_%CLR A_^1_%STA* ISTAT,I_^1_%STA* INTRCV,I_^1_%STA* PULSCT_^1T2A8_!ENQ 2_^1_%RTJ PULSE_€€(COUNT BOTH COUNTERS AS 8 BIT_^1_%LDA JUMPER,I_^1_%AND =N$84_^1_%SAZ NOSYC1_^1_%IIN_]_^1_%LDQ* TIMEMS_^1_%ENA 7_,ENABLE LST SYNC,INT_^1_%RTJ OUTPUT_^1_%RTJ- ($F4)_^1_%NUM $1104_^1_%ADC NOSYC1-*+1_^1_%NUM 1_^1_%JMP- ($EA)_^1*_]_^1NOSYC1 LDA* T2ISAV_^1_%STA- I_^1_%LDA* PULSCT_'COUNT TO 256 TO CAUSE OVERFLOW_^1_%SUB- LPMSK+8_^1_%SAZ T2A10_^1_%RAO* PULSCT_^1_%JMP* T2A8_^1T2A10€€ LDA INTLNE_'GET 1547 INTERUPT LINE_^1_%SAZ T2A13_^1_%LDA* INTRCV,I_$CHECK FOR INTERRUPT RECEIVED_^1_%SAZ T2A12_^1_%JMP* T2A13_^1T2A12 LDA JUMPER,I_^1_%AND* H0210_^1_%SAZ NOINT-*-1_^1_%EOR* H0210_^1_%SAZ T2A13_^1NOINT RTJ MSGOUT_'NO INTERRUPT_^1_%ADC MSG16B-MES9_^1_%ADC MSG16E-MSG16B_^1T2A13 LDQ CTWEMS,I_^1_%ADQ- ONEBIT+7_^1_%RTJ INPUT_(GET OVERFLOW STATUS_^1_%STA* I€€STAT,I_^1_%LDA JUMPER,I_^1_%ALS 1_^1_%LDQ- ONEBIT+14_#IF 16 BIT, LOW OVER FLOW STATUS WILL BE SET_^1_%SAM 1_^1_%ADQ- ONEBIT+15_#IF 8 BIT, BOTH COUNTERS WILL OVER FLOW_^1_%LDA* ISTAT,I_^1_%EAQ A_^1_%SAZ T2A14_^1_%LDA* ISTAT,I_^1_%RTJ ACTEXP_^1_%ADC MSG5B-MES10_^1_%ADC MSG5E-MSG5B_^1T2A14 LDQ CTWEMS,I_^1_%RTJ INPUT_(GET COUNTER STATUS_^1_%STA* CSTAT_^1_%ENQ 0_^1_%LDA JUM€€PER,I_^1_%ALS 1_^1_%SAP 1_,IS IT A 16 BIT_^1_%LDQ- ONEBIT+8_^1_%LDA* CSTAT_^1_%EAQ A_^1_%SAZ T2A16_^1_%LDA* CSTAT_^1_%RTJ ACTEXP_^1_%ADC MSG6B-MES10_^1_%ADC MSG6E-MSG6B_^1T2A16 JMP T2END_^1*_]_^1H0210 NUM $0210_^1PULSCT NUM 0_^1INTRCV BZS INTRCV(4)_^1ISTAT BZS ISTAT(4)_^1H0084 NUM $0084_^1CSTAT NUM 0_^1*_]_^1T2END LDA- I_^1_%SUB NUMCTR_^1_%SAZ T2END1-*-1_^1_%R€€AO- I_^1_%JMP T2A5A_S***_^1T2END1 LDQ INTLNE_^1_%QLS 2_^1_%SQZ T2END2_'IF ZERO , BYPASS_^1_%LDA TRPSAV_^1_%IIN_]_^1_%STA+ $103,Q_^1_%EIN_]_^1T2END2 JMP* ENDTST_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_6INTERRUPT RESPONSE ROUTINE_4*_^1*_]_'*_^1************************************************************************_^1_%SP€€C 2_^1INTRES CLR A_^1_%STA* INTIND_^1INTR1 LDQ* INTIND_^1_%LDA CTWEMS,Q_^1_%CLR Q_^1_%LLS 12_^1_%QLS 4_^1_%ALS 4_^1_%STA- I_^1_%ADQ- ONEBIT+7_^1_%INP 1_^1_%NOP 0_,GET MODULE STATUS_^1_%AND- ONEBIT,I_^1_%SAZ INTR2-*-1_^1_%ADQ- I_,FOUND INTERRUPT FLAG_^1_%INP 1_,GET CARD STATUS_^1_%NOP 0_^1_%LDQ* INTIND_^1_%STA ISTAT,Q_^1_%RAO INTRCV,Q_^1_%SAN INTR2-*-1_#CHECK IF ANY €€INTERRUPT STATUS_^1_%LDQ CTWEMS,Q_$NO, MUST BE A ERS INTERRUPT - READ DATA_^1_%INP 1_/TO RESET INTERRUPT_^1_%NOP 0_^1INTR2 LDA* INTIND_^1_%SAZ INTR3-*-1_^1_%RAO* INTIND_^1_%JMP* INTR1_^1INTR3 JMP- (ADISP)_^1*_]_^1INTIND NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_8TERMINATION SEQUENCE_8*_^1*_]_'*_^1*****************€€*******************************************************_^1_%SPC 2_^1ENDTST RAO* REPEAT_^1_%LDA FLAG_^1_%AND- ONEBIT_'CHECK FOR STOP FLAG_^1_%SAN ENDMSG-*-1_^1_%LDA* REPEAT_^1_%SAM END1-*-1_$CHECK FOR INFINITE RUNS REQUESTED_^1_%SAZ ENDMSG-*-1_"CHECK FOR ZERO RUNS REQUESTED_^1_%SUB RUNS_^1_%SAZ ENDMSG-*-1_"CHECK FOR NUMBER OF RUNS REQUESTED, COMPLETED_^1END1_!JMP TSTSEQ_^1EN€€DMSG LDA* REPEAT_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (RUNASC-*)_^1_%LDA ERRCTR_^1_%RTJ (ROCDEC)_^1_%NUM 0,0,0_^1_%RTJ (RHXASC)_^1_%ADC (ERRASC-*)_^1_%RTJ (MESAGE)_$OUTPUT END MESAGE_^1MES12 NUM $8144_^1_%ADC MSG12B-MES12_^1_%ADC MSG12E-MSG12B_^1_%LDA FLAG_^1_%AND- ONEBIT+6_$CHECK FOR STOP TO RE-ENTER PARAMETERS_^1_%SAZ END2-*-1_^1_%LDA- ONEBIT+15€€_^1_%STA FLAG_^1_%JMP ENTER_^1END2_!STA FLAG_^1_%LDA START+1_^1_%LDQ START+2_^1_%RTJ (CLRSTK)_^1_%ADC (START-*)_^1REPEAT NUM 0_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_:MESSAGE BUFFERS_;*_^1*_]_'*_^1_%SPC 2_^1MSG1B ALF $,BEGIN IOM 1547-1/2 OFF LINE TEST$_^1_%NUM $D00_^1_%EQU MSG1E(*)_^1MSG2B ALF $,TESTS,RUNS,15€€47 INT LINE,COMPUTER TYPE$_^1_%EQU MSG2E(*)_^1MSG3B ALF 18,ENTER - H/W TEST CONFIGURATION INFO._^1_%NUM $D00_^1_%ALF 23,_)1547 EVENT COUNTER_$OUTPUT UNIT_^1_%NUM $D00_^1_%ALF $, 1547-WEMS, DASH-NO, JUMPER, D/OUT WEMS, TYPE D/OUT$_^1_%EQU MSG3E(*)_^1MSG4B ALF 3, #01_^1_%EQU MSG4E(*)_^1MSG5B ALF 5, STATUS ER_^1_%EQU MSG5E(*)_^1MSG6B ALF 5, COUNT ERR_^1_%EQU MSG6E(*)€€_^1MSG7B ALF 7, NO READ CLEAR_^1_%EQU MSG7E(*)_^1MSG8B ALF 6, READ CLEAR_^1_%EQU MSG8E(*)_^1MSG9B ALF 14, INTERRUPT ASSIGNMENT ERROR_^1_%EQU MSG9E(*)_^1MSG10B ALF 9,OUTPUT TYPE ERROR_^1_%EQU MSG10E(*)_^1MSG11B ALF 7,DASH NO. ERROR_^1_%EQU MSG11E(*)_^1************************************************************************_^1MSG12B ALF 10,END IOM 1547 TEST,_^1RUNASC NU€€M 0,0_^1_%ALF 3, RUNS_^1ERRASC NUM 0,0_^1_%ALF 4, ERRORS_^1_%EQU MSG12E(*)_^1MSG13B ALF 3, TEST_^1TNUM_!NUM 0_^1_%ALF 2,RUN_^1ERRPAS NUM 0,0,$2020_^1_%EQU MSG13F(*)_^1REJTYP ALF 6, INT REJECT_^1_%ALF 2,Q =_^1QREG_!NUM 0,0_^1_%ALF 3, A =_^1AREG_!NUM 0,0_^1_%ALF 3, X =_^1XREG_!NUM 0,0_^1_%EQU MSG14E(*)_^1MSG15B ALF $,_!ACTUAL $_^1ACTUAL NUM 0,0_^1_%ALF $, EXPE€CTED $_^1EXPCTD NUM 0,0_^1M15BB ALF $, CTR WEMS $_^1CTRASC NUM 0,0_^1_%NUM $2020,$2020_^1_%EQU MSG15E(*)_^1MSG16B ALF 7, NO INTERRUPT_^1_%EQU MSG16E(*)_^1MSG17B ALF 14, 1572-1 STU NOT SYSTEM TIMER_^1_%EQU MSG17E(*)_^1_%EQU END(*)_^1_%END_]_^__PCNTTBL CSY/ E23 P€1_%NAM CNTTBL_'DECK-ID E23 MSOS 4.2_-SUMMARY-090_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.2_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1974_^1*_*I O M_"C O N T R O L_"T A B L E S_^1_%SPC 2_^1_%SPC 2_^1*_$THIS PROGRAM FUNCTION IS LIMITED TO THE PIGGY BACK CONCEPT OF_^1*_"IOM DIAGNOSTICS. THE DIAGNOSTIC TEST, DR€€IVER AND THIS PROGRAM ARE_^1*_"LOADED AS A FILE. THIS CONTROL TABLE USED BY THE DRIVER LOADED_^1*_#WITHIN THE FILE. THIS CONTROL TABLE IS NOT ENTENDED TO FUNCTION_^1*_%EXACTLY AS THE ONE IN SYSDAT._^1_%SPC 2_^1_%ENT DICRS_^1_%ENT DOCRS_^1_%ENT CTCRS_^1_%ENT ROCRS_^1_%ENT AICRS_^1_%ENT AOCRS_^1_%ENT DICR_^1_%ENT DOCR_^1_%ENT CTCR_^1_%ENT ROCR_^1_%ENT AOCR_^1_%ENT AICR_^€€1_%ENT IOMBUF_^1_%ENT DIBUF_^1_%ENT DOBUF_^1_%ENT CTBUF_^1_%ENT ROBUF_^1_%ENT AIBUF_^1_%ENT AOBUF_^1_%ENT CTUNIT_^1_%ENT CTDELY_^1_%ENT CTMULT_^1_%ENT INILZ_^1_%SPC 2_^1INILZ NOP 0_,ABSOLUTIZE POINTERS TO CONTROL TABLES_^1_%LDA* BASE_^1_%SAN EXIT_)BASE AND POINTERS HAVE ALREADY BEEN SET UP_^1_%RTJ* BASE_^1BASE_!ADC 0_^1_%ENQ 6_^1LOOP_!LDA* IOMCNT,Q_^1_%ADD* BASE_^1€€_%STA* IOMCNT,Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* LOOP_^1EXIT_!JMP* (INILZ)_^1_%SPC 4_^1*_$IOM CONTROL RECORD LOCATION TABLE_^1*_]_^1IOMCNT ADC 0_,DUMMY LOCATION_^1DICRS ADC DICR-BASE_^1DOCRS ADC DOCR-BASE_^1CTCRS ADC CTCR-BASE_^1ROCRS ADC ROCR-BASE_^1AICRS ADC AICR-BASE_^1AOCRS ADC AOCR-BASE_^1_%SPC 4_^1*_*DIGITAL INPUTS_^1_%EQU NL1A(128)_%DI LOCAL GROUP 1 NBR OF €€STATIONS_^1_%EQU MSL1A($600)_!-_#-_$-_!- FIRST STATION ADDRESS_^1*_*DIGITAL OUTPUTS_^1_%EQU NL2A(128)_%DO LOCAL GROUP 1 NBR OF STATIONS_^1_%EQU MSL2A($600)_!-_#-_$-_!- FIRST STATION ADDRESS_^1*_*COUNTERS_^1_%EQU NL3A(128)_%CNT LOCAL GROUP 1 NBR OF STATIONS_^1_%EQU MSL3A($600)_!-_#-_$-_!- FIRST STATION ADDRESS_^1*_*RELAY OUTPUTS_^1_%EQU NL4A(128)_%RO LOCAL GROUP 1 N€€BR OF STATIONS_^1_%EQU MSL4A($600)_!-_#-_$-_!- FIRST STATION ADDRESS_^1*_*ANALOG INPUTS_^1_%EQU NL6A(1)_%AI LOCAL GROUP 1 NBR OF MUX STATIONS_^1_%EQU MSL6AX($602) -_#-_$-_!- ADC STATION ADDRESS_^1_%EQU MSL6AY($600) -_#-_$-_!- FIRST MUX STATION ADDRESS_^1*_*ANALOG OUTPUTS_^1_%EQU NL8A(128)_%AO LOCAL GROUP 1 NUMBER OF STATIONS_^1_%EQU MSL8A($600)_!-_#-_$-_!- FIRST S€€TATION ADDRESS_^1_%SPC 2_^1_%EQU B01(NL6A)_^1_%EQU B66(NL8A)_^1_%EQU F53(NL2A)_^1_%EQU F55(NL4A)_^1_%EQU F66(NL8A)_^1_%SPC 4_^1_%SPC 4_^1*_$IOM DATA BUFFER LOCATION TABLE_^1*_*INDEXED BU IOM DEVICE TYPE_^1IOMBUF ADC 0_,00_^1DIBUF ADC 0_,01_^1DOBUF ADC 0_,02_^1CTBUF ADC 0_,03_^1ROBUF ADC 0_,04_^1_%ADC 0_,05_^1AIBUF ADC 0_,06_^1_%ADC 0_,07_^1AOBUF ADC 0_,08_^1_€€%SPC 4_^1_%EJT_]_^1**************************************************_^1*_$D1544A CONTROL TABLE_5*_^1**************************************************_^1DICR_!NUM -0_+THREAD_^1_%ADC NL1A_)NUMBER OF STATIONS_^1_%NUM $100_)DEVICE TYPE_^1_%ADC MSL1A_(FIRST STATION ADDRESS W-E-M-S_^1_%SPC 4_^1**************************************************_^1*_$D1553A CONTROL TABLE_5*_^1****€€**********************************************_^1DOCR_!NUM -0_+THREAD_^1_%ADC NL2A_)NUMBER OF STATIONS_^1_%NUM $200_)DEVICE TYPE_^1_%ADC MSL2A_(FIRST STATION ADDRESS W-E-M-S_^1_%SPC 4_^1**************************************************_^1*_$D1547A CONTROL TABLE_5*_^1**************************************************_^1CTCR_!NUM -0_+THREAD_^1_%ADC NL3A_)NUMBER OF STATIONS_^€€1_%NUM $300_)DEVICE TYPE_^1_%ADC MSL3A_(FIRST STATION ADDRESS W-E-M-S_^1_%SPC 2_^1CTUNIT NUM 2_,D1547 SCAN DELAY UNITS_^1CTDELY NUM 3_,D1547 SCAN DELAY VALUE_^1CTMULT NUM 1000_)1573 MULTIPLIER FOR COUNTER GATE_^1_%SPC 4_^1**************************************************_^1*_$D1555A CONTROL TABLE_5*_^1**************************************************_^1ROCR_!NUM -0_+THRE€€AD_^1_%ADC NL4A_)NUMBER OF STATIONS_^1_%NUM $400_)DEVICE TYPE_^1_%ADC MSL4A_(FIRST STATION ADDRESS W-E-M-S_^1_%SPC 4_^1**************************************************_^1*_$D1501A CONTROL TABLE_5*_^1**************************************************_^1AICR_!NUM -0_+THREAD_^1_%ADC NL6A_)NUMBER OF STATIONS 16 CHANNELS PER_^1_%NUM $600_)DEVICE TYPE_^1_%ADC MSL6AX_'W-E-M-S €€ADC_^1_%ADC MSL6AY_'W-E-M-S FIRST MUX STATION_^1_%SPC 4_^1**************************************************_^1*_$D1566A CONTROL TABLE_5*_^1**************************************************_^1AOCR_!NUM -0_+THREAD_^1_%ADC NL8A_)NUMBER OF STATIONS 4 CHANNELS PER_^1_%NUM $800_)DEVICE TYPE_^1_%ADC MSL8A_(FIRST STATION ADDRESS_^1**************************************************€*_^1_%END_]_^1_'END/_^1ASSEM DCK/ I=6,C=18_^1PASS1 DCK/ I=6,C=18_^1PA1PR2 DCK/ I=6,C=18_^1PASS2 DCK/ I=6,C=18_^1PA2PR2 DCK/ I=6,C=18_^1PASS3 DCK/ I=6,C=18_^1PA3PR2 DCK/ I=6,C=18_^1PA3PR3 DCK/ I=6,C=18_^1TABLST DCK/ I=6,C=18_^1LIBMAC DCK/ I=6,C=18_^1XREF_!DCK/ I=6,C=18_^1MACROS DCK/ I=6,C=18_^__*PASSEM CSY/ G02 P€1_%NAM ASSEM_(DECK-ID G02 MSOS 4.1_-SUMMARY-079_^1*_'ARDEN HILLS DEVELOPMENT DIVISION_4**MSOS 4.0_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1972_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.0_^1*_'PROGRAM BASE-MACRO ASSEMBLER 2.0_4**MSOS 4.0_^1_(ENT_%ASSEM_^1_%COM FST,L,P,X,C,MM,ILSECT,SRSCT,ILSCND_0MSOS4.1_^1_%COM ERC_OMSOS4.1_^1_%COM LGSECT_^1_%COM SYRFTS(96)_"SECTOR REF€€.TABLE SYMBOLS_,MSOS4.1_^1_%COM SYCADM_'ADDR TO SECT.REF.TABLE SYMBOLS_%MSOS4.1_^1_%COM SYEXT_MMSOS4.1_^1_%COM SYINDM_LMSOS4.1_^1_%COM SYTRFM_'ENTRY ADDR.REF.TABLE SYMBOLS_(MSOS4.1_^1_%COM SYTRFD_'1ST ADDR REF.TABLE SYMBOLS-DISK_$MSOS4.1_^1_%COM APASS1,APASS2,APASS3,ATBLST,AXREF,PAGE_,MSOS4.1_^1_%COM PS1W2,PS2W2,PS3W2,PS4W2,PS5W2_5MSOS4.1_^1DISP_!EQU DISP($EA)_^1PS_#EQU PS€€(-0)_'TO READ IN PASS 1._^1REQPRO EQU REQPRO($F4)_^1STDOCD EQU STDOCD($FC)_^1ASSEM_"ENQ_!PS_^1_(SQP_!MA1-*-1_^1_(ENA_!0_^1_(STA_!FST_^1_%ENQ 4_QMSOS4.1_^1_%STA APASS1,Q_JMSOS4.1_^1_%STA PS1W2,Q_KMSOS4.1_^1_%SQZ 2_QMSOS4.1_^1_%INQ -1_PMSOS4.1_^1_%JMP* *-6_OMSOS4.1_^1MA1_$LDA_%=XPS1ALF-FILE-1_;**MSOS 4.0_^1_(JMP* *+1,Q_^1_(INA_!-3_^1_(INA_!-3_^1_(INA_!-3_^1_%INA -3_PMSOS4.1_€€^1_%INA 12_PMSOS4.1_^1GETFIL_!STA* FILE+8_^1_(ENA_!0_^1_(STA* FILE1_^1*_81 CARD DELETED_6MSOS4.1_^1_(STA* CSWW_^1_%ENQ PS_PMSOS4.1_^1_%LDA APASS1_LMSOS4.1_^1_%STA* FILE2_MMSOS4.1_^1_%LDA PS1W2_MMSOS4.1_^1_%STA* FILE+7_LMSOS4.1_^1FILE_!RTJ- (REQPRO)_$GTFILE REQUEST._^1_(NUM_%$5A00_E**MSOS 4.0_^1_(ADC_!COO_^1_(ADC_!0_^1_(ADC_!$8C2_^1_(ADC_!0_^1_(ADC_!ASSEM_^1_(ADC_!0_^1_(ADC_!€€0_^1FILE1_"ADC_!0_^1FILE2_"ADC_!0_^1_(LDA* CSWW_^1_(SAN_!1_^1_(JMP* *-2_^1_%ENQ 0_QMSOS4.1_^1_%LDA* FILE2_MMSOS4.1_^1_%STA APASS1-1,Q_HMSOS4.1_^1_%LDA* FILE+7_LMSOS4.1_^1_%STA PS1W2-1,Q_IMSOS4.1_^1_(RTJ* *+1_^1ASSEM1_!ADC_!0_^1_(LDA* ASSEM1_^1_(SUB* ASMADC_^1_(SAN_!1_^1_(JMP* ENDASB_^1_%LDA* ASSEM1_'SET STARTING ADDRESS IN REQUEST_'68*1500_^1_%INA APUNT1_'ABSOLUTE ADDRESS€€ OF PUNT1_-68*1500_^1_%STA* APUNT_O68*1500_^1_%RTJ- (REQPRO)_$FWRITE REQUEST._^1_(ADC_%$4C00_E**MSOS 4.0_^1_(ADC_!0_^1_(ADC_!0_^1_%VFD N3/0,N1/1,N2/2,X10/STDOCD_^1_(ADC_!6_^1APUNT ADC_#0_P68*1500_^1_%JMP- (DISP)_'EXIT_^1PUNT1_"ALF_!6,ABS BASE ERR_^1APUNT1 EQU APUNT1(PUNT1-ASSEM1)_@68*1500_^1ASMADC_!ADC_!ASSEM1_^1_(BZS_!CSWW_^1COO_$ENA_!1_^1_(STA* CSWW_^1_%JMP- (DISP)_'EXIT_^1PS€Ί1ALF_!ALF_!3,PASS1_^1PS2ALF_!ALF_!3,PASS2_^1PS3ALF_!ALF_!3,PASS3_^1PS4ALF_!ALF_%3,TABLST_B**MSOS 4.0_^1PS5ALF ALF 3,XREF_LMSOS4.1_^1MA5_$ADC_!0_^1_(EQU_!ENDASB(MA5+1)_^1_(END_!ASSEM_^__ΊPPASS1 CSY/ G03 P€1_%NAM PASS1_(DECK-ID G03 MSOS 4.1_-SUMMARY-079_^1*_'ARDEN HILLS DEVELOPMENT DIVISION_4**MSOS 4.0_^1*_$COPYRIGHT CONTROL DATA CORP. 1972_5**MSOS 4.0_^1*_$1700 MSOS VERSION 4.0-1 JAN 72_8**MSOS 4.0_^1*_'PROGRAM BASE-MACRO ASSEMBLER 2.0_4**MSOS 4.0_^1_(ENT_%PASS1_^1PS_#EQU PS(1)_(TO READ IN PASS 2._^1REQPRO EQU REQPRO($F4)_^1STDINP EQU STDINP($F9)_^1STDPRT EQU STDPRT($FB)_^1STD€€OCD EQU STDOCD($FC)_^1DISP_!EQU DISP($EA)_^1ASSEM_"ENQ_%PS_^1_(SQP_%MA1-*-1_^1_(ENA_%0_^1_(STA_%FST_^1_%ENQ 4_QMSOS4.1_^1_%STA APASS1,Q_JMSOS4.1_^1_%STA PS1W2,Q_KMSOS4.1_^1_%SQZ 2_QMSOS4.1_^1_%INQ -1_PMSOS4.1_^1_%JMP* *-6_OMSOS4.1_^1MA1_$LDA_!=XPS1ALF-FILE-1_?**MSOS 4.0_^1_(JMP*_$*+1,Q_^1_(INA_%-3_^1_(INA_%-3_^1_(INA_%-3_^1_%INA -3_PMSOS4.1_^1_%INA 12_PMSOS4.1_^1GETFIL_!ST€€A*_$FILE+8_^1_(ENA_%0_^1_(STA*_$FILE1_^1_%STA* CSWW_NMSOS4.1_^1_%ENQ PS_PMSOS4.1_^1_%LDA APASS1,Q_JMSOS4.1_^1_(STA*_$FILE2_^1_%LDA PS1W2,Q_KMSOS4.1_^1_%STA* FILE+7_LMSOS4.1_^1FILE_!RTJ- (REQPRO)_$GTFILE REQUEST._^1_(NUM_!$5A00_I**MSOS 4.0_^1_(ADC_%COO_^1_(ADC_%0_^1_(ADC_%$8C2_^1_(ADC_%0_^1_(ADC_%ASSEM_^1_(ADC_%0_^1_(ADC_%0_^1FILE1_"ADC_%0_^1FILE2_"ADC_%0_^1_(LDA*_$CSWW_^1_(SAN_%€€1_^1_(JMP*_$*-2_^1_%ENQ PS_PMSOS4.1_^1_%LDA* FILE2_MMSOS4.1_^1_%STA APASS1-1,Q_HMSOS4.1_^1_%LDA* FILE+7_LMSOS4.1_^1_%STA PS1W2-1,Q_IMSOS4.1_^1_(RTJ*_$*+1_^1ASSEM1_!ADC_%0_^1_(LDA*_$ASSEM1_^1_(SUB*_$ASMADC_^1_(SAN_%1_^1_(JMP*_$ENDASB_^1_%LDA* ASSEM1_'SET STARTING ADDRESS IN REQUEST_'68*1500_^1_%INA APUNT1_'ABSOLUTE ADDRESS OF PUNT1_-68*1500_^1_%STA* APUNT_O68*1500_^1_%RTJ- (REQP€€RO)_$FWRITE REQUEST._^1_(ADC_!$4C00_I**MSOS 4.0_^1_(ADC_%0_^1_(ADC_%0_^1_%VFD N3/0,N1/1,N2/2,X10/STDOCD_^1_(ADC_%6_^1APUNT ADC_#0_P68*1500_^1_%JMP- (DISP)_'EXIT_^1PUNT1_"ALF_%6,ABS BASE ERR_^1APUNT1 EQU APUNT1(PUNT1-ASSEM1)_@68*1500_^1ASMADC_!ADC_%ASSEM1_^1_(BZS_%CSWW_^1COO_$ENA_%1_^1_(STA*_$CSWW_^1_%JMP- (DISP)_'EXIT_^1PS1ALF_!ALF_%3,PASS1_^1PS2ALF_!ALF_%3,PASS2_^1PS3ALF_!ALF_%€€3,PASS3_^1PS4ALF_!ALF 3,TABLST_G**MSOS 4.0_^1PS5ALF ALF 3,XREF_LMSOS4.1_^1MA5_$ADC_%0_^1_(EQU_%ENDASB(MA5+1)_^1_(COM_%DIRBUF(96),INBUF(96),SKLBUF(96)_^1_(COM_%PTBL(96),INSKBF(96)_^1_(COM_%INBUF1(41)_^1_(EQU_%ACTBL(SKLBUF),ACTBL2(PTBL)_^1_(EQU_%INPADR(1),SKLADR(INPADR+1)_^1_(EQU_%CRPADR(SKLADR+1),ACADR(CRPADR+1)_^1_(EQU_%BUFFSW(ACADR+1),SKBFSW(BUFFSW+1)_^1_(EQU_%CS(SKBFSW+1),IG(CS€€+1),NOPG(IG+1)_^1_(EQU_%MSW1(NOPG+1),MSW2(MSW1+1)_^1_(EQU_%CT(MSW2+1),LOCSW(CT+1),NU(LOCSW+1)_^1_(EQU_%NC(NU+1),PM(NC+1),NL(PM+1)_^1_(EQU_%AF(NL+1),CHST(AF+1),LOCTOT(CHST+1)_^1_(EQU_%LN(LOCTOT+1),CSW(LN+1),DC(CSW+1)_^1_%EQU SKELOC(DC+1),DIRINX(SKELOC+1)_545*776_^1_(EQU_%FPRINX(DIRINX+1)_^1_(EQU_%CM(FPRINX+1),CM1(CM+1),AP(CM1+1)_^1_(EQU_%PGSECT(AP+1),PGSCST(PGSECT+1)_^1_(EQU_%ILSEC€€T(PGSCST+1),SKSCST(ILSECT+1)_^1_(EQU_%ACSECT(SKSCST+1)_^1_(EQU_%SY(ACSECT+1),XMOD(SY+4)_^1_%EQU T1(XMOD+1),TP1(T1+6)_^1_(EQU_%SQ(TP1+3)_#5 LONG_^1_(EQU_%NULSW(SQ+5)_^1_(EQU_%ACC(NULSW+1)_^1_(EQU_%FSTM(ACC+1)_^1_(EQU_%RCS(FSTM+1)_!MUST BE LAST_^1_(COM_%CONS(RCS+1)_^1_%COM FST,L,P,X,C,MM,ILSEC1,SRSCST,ILSCND_/MSOS4.1_^1_(COM_%ERC_^1_%COM LGSECT_^1_%COM SYRFTS(96)_"SECTOR.REF.TABL€€E SYMBOLS_,MSOS4.1_^1_%COM SYCADM_'ADDR.TO SECT.REF.TABLE SYMBOLS_%MSOS4.1_^1_%COM SYEXT_MMSOS4.1_^1_%COM SYINDM_LMSOS4.1_^1_%COM SYTRFM_'ENTRY ADDR.REF.TBL.SYMBOLS_*MSOS4.1_^1_%COM SYTRFD_'1ST ADDR.REF.TBL.SYMBOLS-DISK_'MSOS4.1_^1_%COM APASS1,APASS2,APASS3,ATBLST,AXREF,PAGE_,MSOS4.1_^1_%COM PS1W2,PS2W2,PS3W2,PS4W2,PS5W2_5MSOS4.1_^1_%EXT MAXSEC_LMSOS4.1_^1_(EXT_%GTFIL,GFL1,€€DOUT,OPT,MACDEF,MACGET,MACCON_^1_(EXT_%ENDMAC,DIN,MACCAL,RCO,CO,MC5,SLMC,DIRSCH_^1_(EXT_!DISKW5,MCNAM,MCCON,MC7A_7**MSOS 4.0_^1_%EXT_!MACROS,GFILE_^1_(EQU_%NF(LOCSW)_^1_(ENT_%MCHPR,JJAN12,PIL,READIM,GETOP,RECV_^1_(ENT_%MER,MDEX,CHPU,CONAC,MACER,PUNT,RIMSB_^1_%ENT P1D,SKLOUT,CONAB_B75*1837_^1_%ENT P1A_OMSOS4.1_^1PASS1 ENA 0_QMSOS4.1_^1_%STA PAGE_NMSOS4.1_^1_%STA SYINDM_LMSOS4.€€1_^1_%LDA FST_OMSOS4.1_^1_(SAZ_%1_^1_(JMP*_$ST1_^1_%LDA MAXSEC_LMSOS4.1_^1STILSC STA+ LGSECT_^1_(LDA-_$$B3_^1_(SUB-_$$C2_^1_(SAN_%4_^1_(LDA*_$(STILSC+1)_*SCRATCH ON LIBRARY UNIT_^1_(SUB-_$$C1_^1_(INA_%-2_^1_(STA*_$(STILSC+1)_^1_(LDA_%=N751_/ROOM FOR LOAD AND GO_^1_%STA SYTRFD_'1ST SECTOR ADDR._4MSOS4.1_^1_%STA SYCADM_'CURRENT SECT.ADDR._2MSOS4.1_^1_%ADD =N160_(LENGTH OF SCRATC€€H TABLE_-MSOS4.1_^1_(STA*_$(ST2+1) SRSCST_^1_%SUB* (STILSC+1) LGSECT_^1_(SAM_%2_^1_(JMP_%PUNT_0NO ROOM FOR IL_^1ST1_"LDA SYTRFD_LMSOS4.1_^1_%STA SYCADM_LMSOS4.1_^1_%LDA =XCONS_LMSOS4.1_^1_(STA-_$I_^1_(LDQ_%=XCONS+RCS-DIRBUF_^1_(ENA_%0_^1ST1A_!STA+ DIRBUF,Q_^1_(INQ_%-1_^1_(SQM_%1_^1_(JMP*_$ST1A_0ZERO OUT DIRBUF_^1_(STA_%ERC_^1ST2_$LDA+_$SRSCST_^1_(STA-_$PGSECT,I_^1_)STA-_$PGSCST€€,I_$PROG MAC DIR START_^1_%INA 20_+LEAVE ROOM FOR IL SECTORS._^1_(STA-_$SKSCST,I_,SKEL SECT START_^1_%LDA* (ST2+1) SRSCST_^1_%INA 1_^1_%STA+ ILSEC1_^1_(STA-_$ILSECT,I_^1STIL1_"ENA_%-1_^1_(STA-_$DIRINX,I_,INIT DIR INDEX_^1_(LDA_%=N$5555_^1_(STA-_$BUFFSW,I_^1_(STA-_$SKBFSW,I_^1_(LDA_%=XACTBL_^1_(STA-_$ACADR,I_^1_(STA_!MCCON_I**MSOS 4.0_^1_(LDA- INPADR,I_F**MSOS 4.0_^1_(STA* P1J_€€K**MSOS 4.0_^1_(STA_!P1K_K**MSOS 4.0_^1_(STA_!INCON_I**MSOS 4.0_^1_(STA_!MC7A_J**MSOS 4.0_^1_(RTJ_%MINZRO_^1_(ENA_%$30_^1_(ENQ_%4_^1_(STA-_$SQ,B_^1_(INQ_%-1_^1_(SQM_%1_^1_(JMP*_$*-3_^1P1D_$RTJ*_$(CONAB-1) READIM GET FIRST IMAGE_^1_(RTJ+_$GETOP_^1_(SAM_%P1A-*-1_-ASTERISK_^1_(SUB_%=N$35EE_-MON IMG_^1_(SAN_%P1B-*-1_^1_%JMP- (DISP)_'EXIT_^1P1B_$LDA-_$NU,I_^1_(SUB_%=N$3E14_-OPT OPCODE_^€€1_(SAN_%2_^1_(JMP_%OPT_^1P1A_$LDA+_$FST_^1_(SAN_%P1C-*-1_^1_(STA_%MM_^1_(RAO*_$(P1A+1) FST_^1_%ENQ 3_,STD OPTIONS=LPCX_3*MSOS4.1_^1_(ENA_%1_^1P1AB_#STA_%L,Q_^1_(INQ_%-1_^1_(SQM_%1_^1_(JMP*_$P1AB_^1P1C_$LDA-_$NU,I_^1_(SUB_%=N$382D_-NAM OPCODE_^1_(SAZ_%1_^1_(JMP*_$MDEX2_^1_(ENA_%-1_2SET NAM INDEX_^1_(ENQ_%45_^1_(STA* (P1J),Q_"INPADR_=**MSOS 4.0_^1_(ENQ_%43_^1_(STA* (P1J),Q_"INPADR€€_=**MSOS 4.0_^1_(RTJ*_$(P1F+1) IL_^1_(JMP*_$MDEX+2_^1MDEX_#RTJ_%PIL_^1_(RTJ*_$(CONAB-1) READIM_^1_(RTJ*_$(P1D+2) GETOP_^1_%SAM MDEX4_^1_(SUB_%=N$3423_-MAC OPCODE_^1_%SAN MDEX3_^1_(JMP_%MACDEF_^1MDEX4 JMP* MDEX_^1MDEX3_"LDA-_$NOPG,I_^1_(SAN_%1_^1_(JMP*_$MDEX2_^1_(LDQ-_$DIRINX,I_^1_(INQ_%-5_^1MDEX3A_!LDA+_$DIRBUF,Q_,FLAG LAST DIR_^1_(TCA_%A_3ENTRY_^1_(STA*_$(MDEX3A+1),Q DIRBUF_^1_€€(LDQ-_$PGSECT,I_,OUTPUT CURRENT DIR_^1_(LDA*_$MDEX3A+1_,ADDR OF DIRBUF_^1_(RTJ_%DOUT_^1MDEX2 LDA- SKELOC,I_(PICK UP RELATIVE SECTOR ADDR._#45*776_^1_(ADD- SKSCST,I_^1MDEX1_"STA- ACSECT,I_^1_(ENA_!0_^1_(STA- DC,I_^1_(LDA- NU,I_^1_(JMP* CONAB+1_^1CONA_#LDA- MSW1,I_^1_(SAZ_!2_^1_(JMP_!MACGET_^1_(RTJ+ READIM_^1CONAB_"RTJ* (P1D+2) GETOP_^1_(LDQ- MSW2,I_'CONTINUATION SW SET_^1_€€(SQZ_!2_,NO_^1_(JMP_!MACCON_^1_(SAP_!1_^1_(JMP* CONAC_)ASTERISK_^1_(SUB_!=N$15A3_*EMC OPCODE_^1_(SAN_!CONAB1_H**MSOS 4.0_^1_(ENA_!-3_+SET CLASS + INDEX_^1_(ENQ_!43_+FOR EMC_^1_(STA* (P1J),Q_"INPADR_=**MSOS 4.0_^1_(ENA_!17_^1_(ENQ_!45_^1_(STA* (P1J),Q_"INPADR_=**MSOS 4.0_^1_(JMP_!ENDMAC_^1P1J_$NUM_!0_)ADDR. OF INPUT BUFFER_.**MSOS 4.0_^1CONAB1_!LDA- NU,I_J**MSOS 4.0_^1_(SUB_!=N$1€€5C4_*END OPCODE_^1_(SAZ_!1_^1_(JMP* P1EE_^1_(ENA_!-3_^1_(ENQ_%43 STORE CLASS + INX FOR END_^1_(STA* (P1J),Q_G**MSOS 4.0_^1_(ENA_!7_^1_(ENQ_!45_^1_(STA* (P1J),Q_G**MSOS 4.0_^1_(LDA- BUFFSW,I_^1_(SAP_!2_,BE SURE LAST IL SECT_^1_(ALS_!1_,GETS OUT_^1_(STA- BUFFSW,I_^1P1F_$RTJ+ IL_^1_(STA_!ILSCND_^1_(JMP_!ASSEM_^1P1EE_#ENQ_!0_^1_(STQ- T1,I_^1P1E_$LDA_!OPTB,Q_^1_(SAP_!2_^1_(RAO- €€ T1,I_^1_(TCA_!A_^1_(SUB- NU,I_^1_(SAZ_!CONACC-*-1_"OPCODE FOUND_^1_(INQ_!-ENDOP+OPTB_!ALL OPCODES SEARCHED_^1_(SQN_!1_^1_(JMP* P1G_^1_(INQ_!ENDOP-OPTB+1_^1_(JMP* P1E_^1CONACC_!LDA- T1,I_^1_(INA_!-7_^1_(SAM_!CONC-*-1_$MACINE OPCODE_^1_(INA_!1_,PSEUDO OPCODE_^1_(TCA_!A_,SET NEGATIVE CLASS CODE_^1_(STA- T1,I_)FOR PSEUDO OPCODE_^1_(INQ_!-OP5+OPTB_^1_(TRQ_!A_^1_(ENQ_!45_^1_(STA* €€(P1J),Q_G**MSOS 4.0_^1_(LDA- T1,I_^1_(ENQ_!43_^1_(STA* (P1J),Q_G**MSOS 4.0_^1_(JMP* CONAC_^1CONC_#INA_!1_^1_(SAN_!COND-*-1_$CLASS 1-5_^1_(INQ_!-OPC6+OPTB_^1_(LDA_!OP3,Q_(GET HEX CODE FOR INTER-REG_^1CONG_#ENQ_!44_^1_%STA* (P1J),Q_#CONS+INPADR STORE HEX CODE_***MSOS 4.0_^1_(LDA- T1,I_)STORE CLASS CODE_^1_(ENQ_!43_^1_(STA* (P1J),Q_G**MSOS 4.0_^1_(JMP* CONAC_^1COND_#ENA_!0_,CLA€€SS 1-5_^1_(LRS_!2_,DIV BY 4 BECAUSE 4 ENTRIES_^1_(ALS_!2_,FOR EACH HEX TBL WORD_^1_(STA- T1+2,I_^1_(LDA_!OP2,Q_(PICK UP HEX TBL ENTRY_^1_(LDQ- T1+2,I_'REMAINDER_^1CONF_#ALS_!4_,SHIFT UNTIL VALUE WANTED IS_^1_(INQ_!-1_+IN LOWER 4 BITS_^1_(SQM_!1_^1_(JMP* CONF_^1_(ENQ_!$F_^1_(LAQ_!A_,PUT 4 BIT HEX VALUE IN A_^1_(LDQ- T1,I_^1_(INQ_!-3_^1_(SQP_!2_,CLASS 3-5_^1_(ALS_!12_+CLASS 1-2_^€€1_(JMP* CONG_^1_(SQN_!2_^1_(ALS_!8_,CLASS 3-SHIFT HEX VALUE_^1_(JMP* CONG_^1_(INQ_!-1_^1_(SQN_!5_^1_(ENQ_!$F_+CLASS 4_^1_(ALS_!5_^1CONE_#QLS_!8_^1_(AAQ_!A_^1_(JMP* CONG_^1_(ALS_!4_,CLASS 5-Q HAS 1 HERE_^1_(JMP* CONE_^1CONAC_"RTJ* (P1F+1) IL_^1_(JMP* CONA_^1P1G_$RTJ_!RECV_^1_(LDA- PGSCST,I_^1_(STA- PGSECT,I_^1P1GG_#LDA- NOPG,I_^1_(SAN_!1_^1_(JMP* P1H_*NO PROG MACS_^1_%ENQ_€€#2_^1_%LDA-_"DC,I_^1_%SAN_#P1GH_^1P1GG1 LDA-_"SY,B_^1_%STA*_"(P1GH+1),Q_^1_%INQ_#-1_^1_%SQM_#1_^1_%JMP*_"P1GG1_^1_%JMP*_"P1GI_^1P1GH_!LDA_#MCNAM,Q_%SELF CALL IN MACRO_^1_%SUB-_"SY,B_^1_%SAN_#P1GI_)NO_^1_%INQ_#-1_^1_%SQM_#1_^1_%JMP*_"P1GH_^1_%LDA-_"DC,I_)YES_^1_%INA_#-10_*LEVEL GREATER THAN 10_^1_%SAM_#P1GI_)NO_^1_%JMP CONAC_+AND IGNORE CALL_^1P1GI_!LDA_#=XDIRBUF_^1_(LDQ- PGSECT,€€I_^1_(RAO- PGSECT,I_^1_%RAO- PGSECT,I_^1_(RTJ_!DIN_*BRING IN PROG DIR_^1_(RTJ+_$DIRSCH_'SEARCH DIRECTORY_^1_(SQN_!1_^1_(JMP* P1GG_)GET NEXT DIR_^1_(INQ 0_N**MSOS 4.0_^1_(SQZ P1H-*-1_#NOT FOUND_:**MSOS 4.0_^1_(ENA_%1_^1_(STA-_$PM,I_/SET PROG MAC SW_^1P1I_$LDA- 1,Q_^1_(STA- NF,I_^1_(LDA- 2,Q_^1_(STA- NL,I_^1_(INQ_!2_^1_(STQ- DIRINX,I_)ADDR-1 OF SKL PTR_^1_(JMP_!MACCAL_^1P1H_€€$ENA_!1_^1_(STA- XMOD,I_^1P1HH_#LDQ- XMOD,I_^1_(LDA =XMACROS_G**MSOS 4.0_^1_(SUB =XGFILE_H**MSOS 4.0_^1_(RTJ_!GTFIL_(BRING IN SYS MAC DIR_^1_(ADC_!DIRBUF_^1_(LDA- XMOD,I_^1_(INA_!96_^1_(STA- XMOD,I_^1_(RTJ+_$DIRSCH_'SEARCH DIRECTORY_^1_(SQN_!1_^1_(JMP* P1HH_)NOT IN THIS DIRECTORY_^1_(INQ 0_N**MSOS 4.0_^1_(SQZ 3_N**MSOS 4.0_^1_(ENA_!0_,FOUND_^1_(STA- PM,I_^1_(JMP* P1I_^1_€€(JMP* CONAC_^1GETOP_"ADC_!0_^1_(ENA_!0_^1_(STA- IG,I_^1_(ENA_!-1_^1_(STA- CT,I_^1_(RTJ* CHPU_-GET 1ST CHAR_^1_(SAZ_!G1-*-1_'NO LABEL_^1_(INA_!-$A_*ASTERISK_^1_(SAN_!2_,NO_^1_(ENA_!-1_^1_(JMP* G2+1_^1_(RTJ* MCHPR_^1G1_%RAO- IG,I_^1_(RTJ* MCHPR_,GET OPCODE_^1_(SAZ_!G2-*-1_'SY PRESENT_^1_(ENA_!$3F_^1_(AND- SY+1,I_^1_(SAZ_!4_^1G2_%ENA_!0_^1_(STA- NU,I_^1_(RAO- IG,I_)SET TO S€€KIP LEADING BLN_^1_(JMP* (GETOP)_^1_(LDQ- SY,I_^1_(LRS_!6_^1_(ALS_!6_^1_(QLS_!10_^1_(INA_!-$20_^1_(SAM_!G3-*-1_^1_(ALS_!5_^1_(AAQ_!A_^1_(LDQ- SY+1,I_^1_(QRS_!8_^1_(INQ_!-$20_^1_(SQP_!1_^1G3_%JMP* G2_^1_(AAQ_!A_^1_(JMP* G2+1_^1CHPU_#ADC_!0_^1_(LDA- INPADR,I_F**MSOS 4.0_^1_(STA P1K_L**MSOS 4.0_^1_(RAO- CT,I_)INCREMENT CHAR CTR_^1_(ENA_!0_^1_(LDQ- CT,I_^1_(INQ_!-72_^1_(SQM_!5€€_^1_(LDA- AF,I_^1_(SAN_!1_^1_(JMP* C1+1_)TOO MANY CHARS_^1_(ENQ_!-0_^1_(JMP* (CHPU)_^1_(INQ_!72_^1_(LRS_!1_^1_(LDQ (P1K),Q_H**MSOS 4.0_^1_(SAZ_!1_^1_(QLS_!8_^1_(QRS_!8_,Q CONTAINS 7 BIT CHAR_^1_(LDA- AF,I_^1_(SAZ_!1_^1_(JMP* (CHPU)_^1_(SQZ_!C3+1-*-1_$NULL IGNORE IT_^1_(SQM_!C3+1-*-1_$NULL-IGNORE IT_^1_(INQ_!-$9_*TAB-IS END OF FIELD_^1_(SQZ_!C3-*-1_'YES-A IS ZERO SO WILL EXIT_€€^1_(LDA- IG,I_^1_(INQ_!-$4_*CARRIAGE RETURN_^1_(SQN_!3_,NO_^1_(ENA_!71_+SET CTR FOR_^1_(STA- CT,I_^1_(JMP* CHPU+1_^1_(INQ_!-$13_)BLANK_^1_(SQM_!C1-*-1_'CHAR ILLEG_^1_(SQN_!2_^1C3_%SAZ_!C1+1-*-1_$CHAR BLNK-IG NOT SET_^1_(JMP* CHPU+1_'GO BACK FOR NEXT CHR_^1_(INQ_!-$40_)UPPERBOUND FOR LEGAL_^1_(SQM_!C2-*-1_'IS LEGAL_^1C1_%ENA_!$3C_^1_(STA- CS,I_^1_(ENQ_!0_^1_(STQ- IG,I_^1_(JMP*€€ (CHPU)_^1C2_%INQ_!$40_*6 BIT CHAR FOR OUTPUT_^1_(TRQ_!A_^1_(JMP* C1+1_^1XC_%NUM_!0,$C,$B BLANK,COMMA,PLUS_^1_(NUM_!$D,$A MINUS,ASTERISK_^1MCHPR_"ADC_!0_^1_(ENA_!0_^1_(ENQ_!4_^1MCHPR1_!STA-_$SY,B_"ZERO SY,XMOD_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP*_$MCHPR1_^1XLOP_#RTJ* CHPU_^1_(ENQ_!4_^1X1_%LDA- CS,I_^1_(SUB* XC,Q_)SEARCH SPECIALS_^1_(SAZ_!XLO1-*-1_$FOUND_^1_(INQ_!-1_^1_%SQP 1_Q75*1€€764_^1_%JMP* X5_P75*1764_^1_(JMP* X1_^1XLO1_!INQ -4_P75*1764_^1_%SQM XLO11_(NOT *_?75*1764_^1_%LDA- SY,I_)PROCESSING SYMBOLS_275*1764_^1_%SAN XLO11_(YES,LEAVE TEST_675*1764_^1_%LDA* FLIP_N75*1764_^1_%ALS 1_Q75*1764_^1_%STA* FLIP_N75*1764_^1_%SAP BEFORE_L75*1764_^1_%ENQ 3_Q75*1764_^1_%RTJ MER_*LOG ERROR AS OPCODE INCORRECT_'75*1764_^1BEFORE JMP* XX_+COMPLETE THE CHARACTER RE€€Q._)75*1764_^1FLIP_!NUM $5555_M75*1764_^1XLO11 INQ 4_Q75*1764_^1_%STQ- CS,I_N75*1764_^1_(SQZ_!2_^1_(INQ_!-1_^1_(SQN_!1_^1_(JMP* XB_+COMMA BLANK_^1_(JMP* XP_+PLUS,MINUS,ASTERISK_^1X5_%LDQ- XMOD,I_^1_(INA_!-$10_^1_(SAM_!XA-1-*-1_$ERR-BELOW LOWER BOUND_^1_(INA_!-$A_^1_(SAP_!2_,NOT NUMERIC_^1_(SQZ_!XA-1-*-1_$NUMERIC INITIAL MODE_^1_(JMP* XALF_^1_(INA_!-7_^1_(SAM_!XA-1-*-1_$NOT A€€LPHA ERROR_^1_(INA_!-$1B_^1_(SAM_!1_,NOT ALPHA ERROR_^1_(JMP* XR_^1XA_%SQN_!XALF-*-1_^1_(RAO- XMOD,I_^1_(ENQ_!0_^1_(INA_!$1C_*CONVERT TO 5 BIT VALUE_^1_(ALS_!6_^1_(JMP*_$XALF2_^1XALF_#LDQ- SY+3,I_^1_(INQ_!-6_^1_(SQZ_!XB-1-*-1_$6 CHARS EIXT_^1_(INQ_!6_^1_(ENA_!0_^1_(LRS_!1_^1_(SAN_!3_^1_(LDA- CS,I_^1_(ALS_!8_^1_(JMP*_$XALF1_^1_(LDA- CS,I_^1XALF1_"ADD-_$SY,B_^1XALF2_"STA-_$SY,B_€€^1_(RAO- SY+3,I_^1_(JMP* XLOP_^1XB_%LDQ- XMOD,I_^1_(SQN_!1_^1_(RAO- SY+1,I_^1XB2_$LDQ- SY+3,I_^1_(SQZ_!3_^1_(INQ_!-1_^1_(QRS_!1_^1_(STQ- SY+3,I_^1XX_%LDA- SY,I_^1_(JMP* (MCHPR)_^1XP_%LDQ- XMOD,I_^1_(SQZ_!1_^1_(JMP* XB2_^1XR_#RTJ CHPU_N75*1764_^1_(SAZ_!XR1-*-1_^1_(ENQ_!1_^1_(STQ- CS,I_^1_(INA_!-$C_^1_(SAZ_!XR1-*-1_^1_(JMP* XR_^1XR1_$ENA_!0_^1_(ENQ_!3_^1XR1A_#STA-_$SY,B_€€^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP*_$XR1A_^1_(JMP* XX_^1P1K_$NUM_!0_M**MSOS 4.0_^1RIMSB_"ADC_!0_^1_(LDA- BUFFSW,I_^1_(TRA_!Q_^1_(QLS_!1_^1_(STQ- BUFFSW,I_^1_(SAM_!3_^1RIM1_#LDA_!=XINBUF_^1_(JMP* *+3_^1_(LDA_!=XINBUF+48_^1_(STA- INPADR,I_^1_(STA* P1K_K**MSOS 4.0_^1_%STA INCON_L**MSOS 4.0_^1_(STA_!P1J_K**MSOS 4.0_^1_(STA_!MC7A_J**MSOS 4.0_^1_(ENA_!-0_^1_(ENQ_!40_^1_(STA* (P1K),Q_€€G**MSOS 4.0_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-3_^1_(ENQ_!41_^1_(ENA_!0_^1RIM2_#STA* (P1K),Q_G**MSOS 4.0_^1_(INQ_!-45_^1_(SQZ_!2_^1_(INQ_!46_^1_(JMP* RIM2_^1_(JMP* (RIMSB)_^1READIM_!ADC_!0_^1_(LDA- FSTM,I_'FIRST TIME SW SET_^1_(RAO- LN,I_^1_(SAN_!RB1-*-1_^1_(RAO- FSTM,I_^1_(RTJ* READ_^1RB1_$RTJ* RIMSB_^1_(LDA- RCS,I_^1_(SAN_!1_^1_(JMP* *-2_^1_%SAP 1_^1_%JMP- (DISP)_^1_(E€€NQ_!40_^1_(LDA* (READ1),Q_#MOVE IMAGE TO INPADR_^1_(STA* (P1K),Q_G**MSOS 4.0_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-4_^1_(ENQ_!0_^1_(LDA* (P1K),Q_G**MSOS 4.0_^1_(SAM_!2_^1_(INQ_!1_^1_(JMP* *-3_^1_%INQ -1_P59*1186_^1_%LDA* (P1K),Q_%PICK UP LAST WORD_2**MSOS 4.0_^1_%ALS 8_Q59*1186_^1_%SAP 4_Q59*1186_^1_%AND =N$20FF_K59*1186_^1_%ALS 8_Q59*1186_^1_%STA* (P1K),Q_J**MSOS 4.0_^1_%INQ€€ 1_Q59*1186_^1_(LDA_!=N$D00_^1_(STA* (P1K),Q_G**MSOS 4.0_^1_(LDA- LN,I_^1_(ENQ_!41_^1_(STA* (P1K),Q_G**MSOS 4.0_^1_(RTJ_!GETOP_^1_(ENA_!0_^1_(STA- IG,I_^1_(ENQ_!2_^1_(LDA- NU,I_^1_(SUB* SMOP,Q_^1_(SAZ_!3_^1_(INQ_!-1_^1_(SQM_!3_^1_(JMP* *-5_^1_(STA- FSTM,I_^1_(JMP* (READIM)_^1_(LDA- RCS,I_^1_(STA- T1,I_^1_(RTJ* READ_^1_(LDA- T1,I_)40 WDS TRANSFERRED_^1_%ALS_#1_^1_(SAM_€€!RB2A-*-1_$NO_^1_(ENA_!$7F_^1_(ENQ_!39_^1_(AND* (P1K),Q_G**MSOS 4.0_^1_(INA_!-$7F_^1_(SAN_!1_^1RB2A_#JMP* (READIM)_^1_(ENQ_!37_^1_(ENA_!$7F_^1_(AND* (P1K),Q_G**MSOS 4.0_^1_(STA- T1,I_^1_(INQ_!1_^1_(LDA* (P1K),Q_G**MSOS 4.0_^1_(ENQ_!0_^1_(LLS_!8_^1_(STQ- T1+1,I_^1_(ALS_!8_^1_(STA- T1+2,I_^1_(ENQ_!39_^1_(LDA* (INCON),Q_^1_(ENQ_!0_^1_(LLS_!8_^1_(STQ- T1+3,I_^1_(ALS_!8_^1_(STA€€- T1+4,I_^1_(ENQ_!0_^1SQ2_$LDA- T1,B_^1_(INA_!-$20_^1_(SAN_!1_^1_(INA_!$10_^1_(INA_!$20_^1_(STA- T1,B_^1_(SUB- SQ,B_^1_(SAN_%SQ2A-*-1_^1_(INQ_!-4_+EVEN-GO ON_^1_(SQZ_!SQ3-*-1_%DONE_^1_(INQ_!5_^1_(JMP* SQ2_^1SQ2A_#SAP_%SQ3-*-1_^1SQ3A_!ENQ 36_+CHECK FOR AN * IN COL.73_,76*1859_^1_%LDA* (INCON),Q_#PICKUP COLUMNS 73 AND 74_,76*1859_^1_%ARS 8_,COLUMN 73 ONLY_676*1859_^1_(INA_%-$2€€A_$IS IT A VALID SEQUENCE ERROR_#**MSOS 4.0_^1_(SAZ_%SQ3_G**MSOS 4.0_^1VLIDER ENQ 0_,SEQUENCE NUMBER IS VALID_+**MSOS 4.0_^1_(RTJ* MER_^1SQ3_$ENQ_!4_^1_(LDA- T1,B_^1_(INA_!-$20_^1_(SAN_!1_^1_(INA_!$10_^1_(INA_!$20_^1_(STA- SQ,B_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* SQ3+1_^1_(JMP* (READIM)_^1INCON_"ADC_%0_I**MSOS 4.0_^1_%ENT_#READI_^1READ_#ADC_!0_^1_(ENA_!-0_^1_(ENQ_!40_^1_(STA* (R€€EAD1),Q_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-3_^1_(ENA_!0_^1_(STA- RCS,I_^1_%RTJ- (REQPRO)_$FREAD REQUEST._^1_(ADC_!$4800_I**MSOS 4.0_^1_(ADC_!RCO_^1_(ADC_!0_^1READI VFD_#N3/0,N1/1,N2/2,X10/STDINP_^1_(ADC_!40_^1READ1_"ADC_!INBUF1_^1_(JMP* (READ)_^1SMOP_#NUM_!$35EE,$3E14,$15C4_^1PIL_$ADC_!0_^1_(LDA_!=N$1000_^1_(ENQ_!42_^1_(ADD* (INCON),Q_^1_(STA* (INCON),Q INPADR_^1_(RTJ* IL_^1_€€(JMP* (PIL)_^1IL_%ADC_!0_^1_(LDA- BUFFSW,I_^1_(SAP_!1_^1_(JMP* (IL)_^1_(RTJ* ILOVFL_^1_(LDQ- ILSECT,I_^1_(LDA_!=XINBUF_^1IL1_$RTJ+ DOUT_)DISKOUT RTN_^1_(LDA- ILSECT,I_^1_%INA 2_^1_(STA- ILSECT,I_^1_(JMP* (IL)_^1SKLOUT_!ADC_!0_^1_(LDA- SKBFSW,I_^1_(TRA_!Q_^1_(QLS_!1_^1_(STQ- SKBFSW,I_^1_(SAM_!SK2-*-1_^1_(ENA_!48_^1_(JMP* SK3_^1SK2_$RTJ* ILOVFL_^1_%LDA- SKELOC,I_(PICK U€€P RELATIVE SECTOR ADDR._#45*776_^1_(ADD- SKSCST,I_^1_(TRA_!Q_^1SK4_$LDA_!=XSKLBUF_$ADDR_^1_(RTJ* (IL1+1)_^1_%RAO- SKELOC,I_(BUMP RELATIVE SECTOR ADDR._'45*776_^1_%RAO- SKELOC,I_J45*776_^1_(RTJ* MINZRO_^1SK3_$ADD* SK4+1_^1_(STA- SKLADR,I_^1_(JMP* (SKLOUT)_^1ILOVFL_!ADC_!0_^1_%LDA- SKELOC,I_(PICK UP RELATIVE SECTOR ADDR._#45*776_^1_(ADD- SKSCST,I_^1_(STA- XMOD,I_^1_%LDA+ LGSE€€CT_^1_(SUB- XMOD,I_^1_(SAZ_!2_^1_(INA_!-1_^1_(SAN_!1_^1_%JMP* SK12_N49*825_^1_%LDA+ LGSECT_L49*825_^1_%SUB- ILSECT,I_I49*825_^1_%SAP 1_Q49*825_^1SK12_!JMP PUNT_N75*1764_^1_(JMP* (ILOVFL)_^1MER_$ADC_!0_^1_(LDA* ERT,Q_^1_(STA* PB+3_^1_(SQZ_!MER2-*-1_^1_(LDA_!=N$2000_^1_(ENQ_!42_^1_(ADD* (INCON),Q INPADR_!SET ERROR CHR_^1_(STA* (INCON),Q INPADR_^1MER2_#ENQ_!41_^1_(LDA- LN,I_^€€1_(RTJ* DECV_^1_(STQ* PB_^1_(STA* PB+1_^1_(LDA_!L_^1_(SAN_!2_^1_%LDA- STDOCD_^1_(JMP* *+2_^1_%LDA- STDPRT_^1_(ADD* PIL+2_^1_(STA* MER1_^1_(ENA_!0_^1_(STA- CSW,I_^1_%RTJ- (REQPRO)_$FWRITE REQUEST._^1_(NUM_!$4C00_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC_!0_^1MER1_#ADC_!0_^1_(ADC_%10_^1_(ADC_%JJ9_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1_(JMP* (MER)_^1ERT_$ALF_!1,SQ_^1_(ALF_!1,MC_^1_€€(ALF_!1,MD_^1_%ALF 1,OP_N75*1764_^1JJ9_$NUM_%$2A2A_^1_(BSS_!PB(2)_^1_(ALF_!7,** **********_^1ASDEC1 NUM 0 FOR CONVERSION ROUTINE TEMP STORAGE_^1DECV_#ADC_!0_^1_(ENQ_!0_,THIS ROUTINE CONVERTS_^1_(STQ- T1,I_)THE A REGISTER_^1*_;TO ASCII DECIMAL_^1*_;OUTPUT IS 3 DIGITS IN_^1*_;QA WITH A TRAILING BLANK_^1_(ENQ_%4_^1DC1_$INA_!-10_^1_(SAM_!2_^1_(RAO- T1,I_^1_(JMP* *-3_^1_(INA_!58_+€€ADD BACK 10 PLUS HEX 30_^1_(STA- T1,B_)TO MAKE ASCII CHAR_^1_(LDA- T1,I_^1_%STA- T1+5,I_^1_(ENA_!0_^1_(STA- T1,I_^1_%LDA- T1+5,I_^1_(INQ_!-1_^1_(SQZ_!1_^1_(JMP* DC1_^1_(LDQ- T1+1,I_^1_(QLS_!8_^1_(ADQ- T1+2,I_^1_(LDA- T1+3,I_^1_(ALS_!8_^1_(ADD-_$T1+4,I_^1_(JMP* (DECV)_^1MACER_"ENQ_!1_^1_(RTJ* MER_*PRINT ERROR_^1_(LDA- NF,I_^1_(SAN_!1_^1_(RAO- NF,I_^1_(JMP_!MC5_^1MINZRO_!A€€DC_!0_,BACKGROUND_^1_(ENQ_!40_+SKEL INPUT AREA_^1_(ENA_!-0_^1_(STA_!SKLBUF,Q_^1_(STA_!SKLBUF+48,Q_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-6_^1_(JMP* (MINZRO)_^1RECV_#ADC_!0_^1_(LDA_!=N$2020_^1_(STA- T1+1,I_^1_(STA- T1+2,I_^1_(LDA_!=N$7C0_^1_(AND- SY,I_^1_(ARS_!6_^1_(SAZ_!1_^1_(INA_!$20_^1_(INA_!$20_^1_(ALS_!8_^1_(STA- T1,I_^1_(ENA_!$3F_^1_(AND- SY,I_^1_(INA_!$20_^1_(ADD- T1,I_^1_€€(STA- T1,I_^1_(ENQ_!-2_^1RR_%LDA- SY+3,B_^1_(ADD* RECV+2_^1_(STA- T1+3,B_^1_(INQ_!1_^1_(SQZ_!1_^1_(JMP* RR_^1_(ENQ_!2_^1RR1A_#LDA-_$T1,B_^1_(STA- SY,B_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP*_$RR1A_^1_(JMP* (RECV)_^1PUNT_!RTJ- (REQPRO)_$FWRITE REQUEST._^1_(ADC_!$4C00_I**MSOS 4.0_^1_(ADC_!0_^1_(ADC_!0_^1_%VFD N3/0,N1/1,N2/2,X10/STDOCD_^1_(ADC_#11_J**MSOS 4.0_^1_(ADC_!PNTMSG_^1_%JMP- €€(DISP)_'EXIT_^1PNTMSG_!ALF_#11,MASS STORAGE OVERFLOW_4**MSOS 4.0_^1JJAN12_!ADC_%0_/THIS ROUTINE TESTS MACRO NAME_^1*_BTO MAKE SURE IT IS NOT THE SAME_^1*_BAS AN OP-CODE OR PSUEDO OP_^1_(LDA-_$SY+1,I_*PICK UP 3RD AND 4TH CHAR._^1_(SAZ_%3_/SKIP IF LESS THAN 3 CHARS._^1_(ENQ_%$3F_^1_(LAQ_%A_^1_(SAZ_%1_/SKIP IF EXACTLY 3 CHAR._^1_(JMP*_$(JJAN12)_(RETURN IF NO CHANCE OF BEING OP-CODE_^1€€_(LDQ-_$SY,I_,PICK UP 1ST AND 2ND CHAR._^1_(LRS_%6_/2ND_!CHAR. IN RIGHT 6 BITS_^1_(ALS_%6_/OF A_^1_(QLS_%10_.1ST IN BITS 14-10 OF Q_^1_(INA_%-$20_,CHANGE FROM 6 BIT TO 5 BIT CHAR_^1_(SAM_%GJJ3-*-1_(SKIP IF 2ND CHAR NON-ALPHA_^1_(ALS_%5_/PACK 1ST AND 2ND CHARS INTO_^1_(AAQ_%A_/BITS 14-5 OF A_^1_(LDQ-_$SY+1,I_*PICK OF 3RD CHAR._^1_(QRS_%8_/SHIFT TO BITS 5-0 OF Q_^1_(INQ_%-$20_,CHANGE€€ FROM 6 BIT TO 5 BIT CHAR_^1_(SQP_%1_/SKIP IF ALPHA_^1GJJ3_#JMP*_$(JJAN12)_(EXIT IF NO CHANCE OF BEING OP-CODE_^1_(AAQ_%A_/PACK CHAR INTO LAST 5 BITS OF A_^1_(STA-_$NU,I_,STORE 15 BIT MAC NAME IN NU_^1_(ENQ_%0_^1JP1E_#LDA*_$OPTB,Q_*PICK UP OP-CODE_^1_(SAP_%1_/SKIP IF NOT FIRST OF CLASS_^1_(TCA_%A_/COMPLEMENT OP-CODE_^1_(SUB-_$NU,I_,SUB MACRO NAME_^1_(SAN_%2_/SKIP IF NO MATCH_^1_(JM€€P_%SLMC_,ERROR MACRO NAME SAME AS OP-CODE_^1_(INQ_%-ENDOP+OPTB_^1_(SQN_%1_/SKIP IF MORE TO SEARCH_^1_(JMP*_$(JJAN12)_(EXIT NOT FOUND_^1_(INQ_%ENDOP-OPTB+1_#INCREASE Q FOR NEXT OP-CODE_^1_(JMP*_$JP1E_^1OPTB_#NUM_!$CF7E_(LDA CLASS 1 COMPLEMENT_^1_(NUM_!$3091_^1_(NUM_!$0484_^1_(NUM_!$0491_^1_(NUM_!$4EA2_^1_(NUM_!$05C4_^1_(NUM_!$15F2_^1_(NUM_!$36A9_^1_(NUM_!$12C9_^1_(NUM_!$B17E_(STA €€CLASS 2 COMPLEMENT_^1_(NUM_!$4E91_^1_(NUM_!$29B0_^1_(NUM_!$4A8A_^1_(NUM_!$482F_^1_(NUM_!$4E01_^1_(NUM_!$B26C_(SLS CLASS 3 COMPLEMENT_^1_(NUM_!$25D0_^1_(NUM_!$3EB4_^1_(NUM_!$39F0_^1_(NUM_!$15C1_^1_(NUM_!$15D1_^1_(NUM_!$25C1_^1_(NUM_!$25D1_^1_(NUM_!$152E_^1_(NUM_!$252E_^1_(NUM_!$1709_^1_(NUM_!$4E02_^1_(NUM_!$0E02_^1_(NUM_!$B9AC_(QRS CLASS 4 COMPLEMENT_^1_(NUM_!$0653_^1_(NUM_!$3253_€€^1_(NUM_!$4593_^1_(NUM_!$0593_^1_(NUM_!$3193_^1_(NUM_!$B3C5_(SAZ CLASS 5 COMPLEMENT_^1_(NUM_!$4C2E_^1_(NUM_!$4C30_^1_(NUM_!$4C2D_^1_(NUM_!$4E3A_^1_(NUM_!$4E2E_^1_(NUM_!$4E30_^1_(NUM_!$4E2D_^1_(NUM_!$4EF3_^1_(NUM_!$4EEE_^1_(NUM_!$4DF6_^1_(NUM_!$4DCF_^1_(NUM_!$4E05_^1_(NUM_!$4DD0_^1_(NUM_!$4E06_^1_(NUM_!$4DC6_^1OPC6_#NUM_!$B34B_(SET CLASS 6 COMPLEMENT_^1_(NUM_!$0D92_^1_(NUM_!$5241_€€^1_(NUM_!$524D_^1_(NUM_!$5251_^1_(NUM_!$5242_^1_(NUM_!$5061_^1_(NUM_!$506D_^1_(NUM_!$5071_^1_(NUM_!$5062_^1_(NUM_!$042D_^1_(NUM_!$0431_^1_(NUM_!$0422_^1_(NUM_!$142D_^1_(NUM_!$1431_^1_(NUM_!$1422_^1_(NUM_!$302D_^1_(NUM_!$3031_^1_(NUM_!$3022_^1_(NUM_!$0C2D_^1_(NUM_!$0C31_^1_(NUM_!$0C22_^1OP5_$NUM_!$FB7C_(ADC CLASS 1 PSEUDO COMPLEMENT_^1_(NUM_!$C1B8_(ORG CLASS 2 PSEUDO COMPLEMENT_^1€€_(NUM_!$1635_(EQU_^1_(NUM_!$0DED_(COM_^1_(NUM_!$1034_(DAT_^1_(NUM_!$0A73_(BSS_^1_(NUM_!$0B53_(BZS_^1_(NUM_!$EA3B_(END CLASS 3 PSEUDO COMPLEMENT_^1_(NUM_!$15D4_(ENT_^1_(NUM_!$1714_(EXT_^1_(NUM_!$0586_(ALF_^1_(NUM_!$3AAD_(NUM_^1_(NUM_!$10A3_(DEC_^1_(NUM_!$58C4_(VFD_^1_(NUM_!$24C1_(IFA_^1_(NUM_!$24C3_(IFC_^1_(NUM_!$1526_(EIF_^1_(NUM_!$15A3_(EMC_^1_(NUM_!$3274_(LST_^1_(NUM_!$3993_(NLS€€_^1_(NUM_!$4E03_(SPC_^1ENDOP_"NUM_!$1554_(EJT_^1OP2_$NUM_!$CE8F_(LDA,LDQ,ADD,ADQ_^1_(NUM_!$9AB2_(SUB,AND,EOR,MUI_^1_(NUM_!$3641_(DVI,STA,STQ,JMP_^1_(NUM_!$5D70_(RTJ,RAO,SPA,SLS_^1_(NUM_!$23BA_(INP,OUT,NOP,ENA_^1_(NUM_!$C9D4_(ENQ,INA,INQ,EIN_^1_(NUM_!$5E67_(IIN,EXI,SPB,CPB_^1_(NUM_!$1235_(QRS,ARS,LRS,QLS_^1_(NUM_!$6701_(ALS,LLS,SAZ,SAN_^1_(NUM_!$2345_(SAP,SAM,SQZ,SQN_^1_(NUM_!$6789_€`(SQP,SQM,SWS,SWN_^1_(NUM_!$ABCD_(SOV,SNO,SPE,SNP_^1_(NUM_!$EF00_(SPF,SNF_^1OP3_$NUM_!$800,$840,$820,$808 SET,CLR,TRA,TRM_^1_(NUM_!$810,$818,$860,$848 TRQ,TRB,TCA,TCM_^1_(NUM_!$850,$858,$828,$830 TCQ,TCB,AAM,AAQ_^1_(NUM_!$838,$868,$870,$878 AAB,EAM,EAQ,EAB_^1_(NUM_!$8A8,$8B0,$8B8,$8E8 LAM,LAQ,LAB,CAM_^1_(NUM_!$8F0,$8F8_#CAQ,CAB_^1_(END_%PASS1_^__`PPA1PR2 CSY/ G04 P€1_%NAM PA1PR2_'DECK-ID G04 MSOS 4.1_-SUMMARY-079_^1*_'ARDEN HILLS DEVELOPMENT DIVISION_4**MSOS 4.0_^1*_$COPYRIGHT CONTROL DATA CORP. 1972_5**MSOS 4.0_^1*_$1700 MSOS VERSION 4.0-1 JAN 72_8**MSOS 4.0_^1*_'PROGRAM BASE-MACRO ASSEMBLER 2.0_4**MSOS 4.0_^1_(COM_!DIRBUF(96),INBUF(96),SKLBUF(96)_^1_(COM_!PTBL(96),INSKBF(96)_^1_(COM_!INBUF1(41)_^1_(EQU_!ACTBL(SKLBUF),ACTBL2(PTBL)_^1DISP_!€€EQU DISP($EA)_^1STDSCR EQU STDSCR($B3)_^1REQPRO EQU REQPRO($F4)_^1STDOCD EQU STDOCD($FC)_^1STDICD EQU STDICD($FD)_^1_(EQU_!INPADR(1),SKLADR(INPADR+1)_^1_(EQU_!CRPADR(SKLADR+1),ACADR(CRPADR+1)_^1_(EQU_!BUFFSW(ACADR+1),SKBFSW(BUFFSW+1)_^1_(EQU_!CS(SKBFSW+1),IG(CS+1),NOPG(IG+1)_^1_(EQU_!MSW1(NOPG+1),MSW2(MSW1+1)_^1_(EQU_!CT(MSW2+1),LOCSW(CT+1),NU(LOCSW+1)_^1_(EQU_!NC(NU+1),PM(NC+€€1),NL(PM+1)_^1_(EQU_!AF(NL+1),CHST(AF+1),LOCTOT(CHST+1)_^1_(EQU_!LN(LOCTOT+1),CSW(LN+1),DC(CSW+1)_^1_%EQU SKELOC(DC+1),DIRINX(SKELOC+1)_545*776_^1_(EQU_!FPRINX(DIRINX+1)_^1_(EQU_!CM(FPRINX+1),CM1(CM+1),AP(CM1+1)_^1_(EQU_!PGSECT(AP+1),PGSCST(PGSECT+1)_^1_(EQU_!ILSECT(PGSCST+1),SKSCST(ILSECT+1)_^1_(EQU_!ACSECT(SKSCST+1)_^1_(EQU_!SY(ACSECT+1),XMOD(SY+4)_^1_%EQU T1(XMOD+1),TP1(T1+6)_€€^1_(EQU_!SQ(TP1+3)_#5 LONG_^1_(EQU_!NULSW(SQ+5)_^1_(EQU_!ACC(NULSW+1)_^1_(EQU_!FSTM(ACC+1)_^1_(EQU_!RCS(FSTM+1)_!MUST BE LAST_^1_(COM_!CONS(RCS+1)_^1_%COM FST,L,P,X,C,MM,ILSEC1,SRSCST,ILSCND_/MSOS4.1_^1_(COM_!ERC_^1_%COM LGSECT_^1_%COM SYRFTS(96)_"SECT.REF.TAB.SYMBOLS_0MSOS4.1_^1_%COM SYCADM_'ADDR.SECT.REF.TBL.SYMBOL_,MSOS4.1_^1_%COM SYEXT_MMSOS4.1_^1_%COM SYINDM_LMSOS4.1_^1_€€%COM SYTRFM_'ENTRY ADDR.REF.TBL.SYMBOLS_*MSOS4.1_^1_%COM SYTRFD_'1ST ADDR.REF.TBL.SYMBOLS-DISK_'MSOS4.1_^1_%COM APASS1,APASS2,APASS3,ATBLST,AXREF,PAGE_,MSOS4.1_^1_%COM PS1W2,PS2W2,PS3W2,PS4W2,PS5W2_5MSOS4.1_^1_(ENT_!GTFIL,GFL1,DOUT,OPT,MACDEF,MACGET,MACCON_^1_(ENT_!ENDMAC,DIN,MACCAL,RCO,CO,MC5,SLMC,DIRSCH_^1_%ENT_"MACROS,GFILE_C**MSOS 4.0_^1_(ENT_!DISKW5,MCCON,MC7A_=**MSOS 4.0_€€^1_(EXT_!MCHPR,JJAN12,PIL,READIM,GETOP,RECV_^1_(EXT_!MER,MDEX,CHPU,CONAC,MACER,PUNT,RIMSB_^1_%EXT P1D,SKLOUT,CONAB,READI_<75*1837_^1_%EXT P1A_OMSOS4.1_^1DIRSCH_!ADC_!0_^1_(LDA- I_^1_(STA- T1,I_^1_(ENQ_!0_^1_(STQ- T2,I_)ZERO SW_^1DS1_$STQ- I_^1_(ENQ_!0_^1DS1A_!LDA* (DS2-1),I DIRBUF_^1_%SAP T2A-*-1_^1DS4_$RAO+ CONS+T2_^1T2_%EQU_!T2(T1+1)_^1_(TCA_!A_^1T2A_"SUB CONS+SY,Q_^1_(S€€AN_!DS3-*-1_^1_(INQ_!-2_^1_(SQZ_!3_^1_(INQ_!3_^1_(RAO- I_^1_%JMP* DS1A_^1_(LDQ_!=XDIRBUF,I_^1DS2_$LDA_!CONS+T1_^1_(STA- I_^1_(JMP* (DIRSCH)_^1DS3_"LDA* (DS4+1) CONS + T2_^1_(SAN_!DS5-*-1_^1_(ENA_!6_^1_(TCQ_!Q_^1_(AAQ_!Q_^1_(ADQ- I_^1_(INQ_!-96_^1_(SQZ_!DS5+1-*-1_^1_(INQ_!96_^1_(JMP* DS1_^1DS5_$ENQ -0_M**MSOS 4.0_^1_(JMP* DS2_^1MACDEF_!RAO- NOPG,I_'SET SWITCH FOR PROG MACS_€€^1_(LDA_!=XSKLBUF_$SET SKEL ADDR FOR_^1_(STA- SKLADR,I_^1_(LDA- CS,I_)TERMIN BLANK_^1_%SAN MD3A-*-1_^1_(ENA_!-1_+INITIALIZE CHR CTR_^1_(STA- CT,I_^1MD3_$RTJ+_$MCHPR_^1_%SAZ MD3A-*-1_^1_(LDA- CS,I_)TERMIN BLANK_^1_(SAZ_!1_^1MD3A_!JMP* MD14 SLMC_^1_(RTJ_%JJAN12_^1_(RTJ* (MCON+3) RECV CONVERT NAME TO 7 BITS_^1_(RAO- DIRINX,I_^1_(LDA- DIRINX,I_^1_(INA_!-96_*THIS DIR FULL_^1_%S€€AN MD3B-*-1_$NO_^1_(STA- DIRINX,I_^1_(LDQ- PGSECT,I_$YES-OUTPUT IT_^1_(RAO- PGSECT,I_^1_%RAO- PGSECT,I_^1_(LDA* MD1+1_^1_(RTJ_!DOUT_^1MD3B_!LDQ- DIRINX,I_$PUT AWAY MACRO NAME_^1_(LDA- SY,I_^1MD1_$STA+ DIRBUF,Q_^1_(INQ_!1_^1_(LDA- SY+1,I_^1_%STA* (MD1+1),Q DIRBUF_^1_(INQ_!1_^1_(LDA- SY+2,I_^1_%STA* (MD1+1),Q DIRBUF_^1_(INQ_!1_^1_(STQ- DIRINX,I_^1_(LDA_!=N$2E20_%PUT PERIOD €€AS_^1_(STA* (MCON+4) PTBL 1ST FORMAL PARAM_^1_(ENA_!1_^1_(STA- FPRINX,I_$SET FORMAL PARAM INX_^1_(RAO- IG,I_^1_(RTJ+_$MCHPR_^1_(RAO- IG,I_^1_(RTJ* MDSB1_^1_(LDA- FPRINX,I_$NUMB FORMALS_^1_(LDQ- DIRINX,I_$TO DIRECTORY_^1_%STA* (MD1+1),Q DIRBUF_^1_(INQ_!2_^1_%LDA- SKELOC,I_$SKELETON POINTER_445*776_^1_(STA* (MD1+1),Q_#TO DIRECTORY_^1_(STQ- DIRINX,I_^1_(RAO- LOCSW,I_%SET LOC€€AL SWITCH_^1_(ENA_%0_^1_(STA*_$JJ69_^1GETSKL_!RTJ* (MCON) PIL_"OUTPUT PRINT ONLY IL_^1_(RTJ* (MCON+1) READIM GET NEXT IMAGE_^1_(RTJ* (MCON+2) GETOP GET OPCODE_^1_(LDQ- INPADR,I_^1_(STQ- CRPADR,I_$SET TO GET SKEL_^1_(LDQ- LOCSW,I_^1_(SQZ_!MD5-*-1_%LOC PROC DONE_^1_(SAP_!1_,NOT ASTERISK_^1_(JMP* MD16_^1_(SUB_!=N$31E3_%LOC IMAGE_^1_(SAN_%2_^1_(JMP* LOCP_^1JJ69_#NUM_%0_^1MD16_#€€LDA*_$JJ69_^1_(RTJ* LOCRTN_^1_(LDA- NU,I_^1MD5_$SAP_!MD9-*-1_^1_(RTJ_!MOVIMG_'ASTERISK-MOVE IMAGE_^1_(JMP* GETSKL_'AS IT STANDS_^1MD9_$LDA- NU,I_.CONVERTED OPCODE_^1_(SUB_!=N$15A3_*IS IT EMC_^1_(SAN_!1_0NO_^1_(JMP* MD10_-YES-PROCESS IT_^1_(ENA_!-1_^1_(STA- CT,I_^1_(STA- NC,I_)NEW COUNT_^1MD11_#RTJ+ CHRPIC_^1_(SAM_!MD12-*-1_$END OF INP IMAGE_^1_(RTJ+ NEWPUT_^1_%SAP MD12A-*-€€1_^1MD12_#RTJ_!CRPUT_(PUT CR IN NEW IMG_^1_(RTJ* (MCON+5) SKLOUT OUTPUT THIS SKELETON_^1_(JMP* GETSKL_'GET NEXT SKEL_^1MD12A INA -$27_!APOSTROPHE_^1_(SAZ_!1_,YES_^1_(JMP* MD11_)NO-GET NEXT CHAR_^1_(RTJ* (MD11+1) CHRPIC_^1_(SAM_!3_,ERROR_^1_(ALS_!8_^1_(STA- T1,I_)1ST CHAR_^1_(RTJ* (MD11+1) CHRPIC_^1_(SAM_!10_+ERROR_^1_(INA_!-$27_)APOSTROPHE_^1_(SAN_!1_,NO_^1_(INA_!-7_+YES-MA€€KE 2ND CHAR BLANK_^1_(INA_!$27_^1_(ADD- T1,I_^1_(STA- T1,I_^1_(LDA- CS,I_^1_(INA_!-$27_^1_(SAZ_!MD13-1-*-1_^1_(RTJ* (MD11+1) CHRPIC_^1_(SAM_!MD14-*-1_^1_(INA_!-$27_)APOSTROPHE_^1_(SAN_!MD14-*-1 SLMC_^1_(LDQ- FPRINX,I_^1MD13_#LDA- T1,I_^1_(SUB* (MCON+4),Q PTBL_^1_(SAZ_!4_,FOUND_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* MD13_^1MD14_#JMP* SLMC_^1_(TRQ_!A_^1_(INA_!1_^1_(RTJ* (MD11+4) N€€EWPUT_^1_(SAM_!LOCP+2-*-1 SLMC_^1_(JMP* MD11_^1MCON_#ADC_!PIL,READIM,GETOP_^1_(ADC_!RECV_^1_(ADC_!PTBL_^1_(ADC_!SKLOUT_^1LOCP_#LDA- CS,I_^1_(SAZ_!1_^1_(JMP* SLMC_^1_(LDA- FPRINX,I_^1_(STA- TP1,I_^1_(RTJ* MDSB1_^1_(LDA- FPRINX,I_^1_(SUB- TP1,I_^1_(ADD*_$JJ69_^1_(STA*_$JJ69_^1_%JMP* GETSKL_^1LOCRTN_!ADC_!0_^1_(LDQ- DIRINX,I_^1_(INQ_!-1_^1_%STA* (MD1+1),Q DIRBUF SET NUMB OF €€LOCS_^1_(ENA_!0_^1_(STA- LOCSW,I_%ZERO LOCSW_^1_(LDQ- FPRINX,I_^1_(INQ_!-1_^1_(STQ- FPRINX,I_^1_(JMP* (LOCRTN)_^1MDSB1_"ADC_!0_^1MD2_$RTJ+ MCHPR_(GET PARAM_^1_(SAN_!8_^1_(LDA- SY+1,I_'NULL FIELD_^1_(SAZ_!8_,NO-ERROR_^1_(LDA- CS,I_^1_(SAN_!1_^1_(JMP* (MDSB1)_%TERMIN BLANK EXIT_^1_(INA_!-1_^1_(SAN_!3_,ERROR_^1_(JMP* MD2_^1_(LDA- SY+1,I_^1_(SAZ_!1_^1_(JMP* MD4_*SLMC MORE TH€€AN TWO CHAR_^1_(RTJ* (MCON+3) RECV CONVERT PARAM TO 7 BITS_^1_(LDQ- FPRINX,I_^1_(INQ_!-1_^1_(LDA* (MCON+4),Q PTBL_^1_(SUB- SY,I_^1_(SAZ_!MD4-*-1_%ERROR-DUPLICATE PARAM_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-5_^1_(LDA- CS,I_^1_(INA_!-2_^1_(SAM_!1_^1MD4_$JMP* SLMC_^1_(LDA- SY,I_^1_(LDQ- FPRINX,I_$PUT PARAM ASAY_^1_(STA* (MCON+4),Q PTBL_^1_(RAO- FPRINX,I_^1_(LDA- CS,I_^1_(SAZ_!€€1_^1_(JMP* MD2_^1_(JMP* (MDSB1)_^1MD10_#RTJ* MOVIMG_'MOVE IMAGE TO NEW BUFF_^1_(LDA- SKBFSW,I_^1_(SAP_!1_^1_(RTJ* (MCON+5) SKLOUT OUTPUT THIS BUFF_^1_(JMP* MOVIMG-2 MDEX_^1SLMC_#ENQ_!2_^1_(RTJ_!MER_^1SLMCA ENQ 0_^1_(LDA- DIRINX,I_^1_(DVI_!=N6_*ERASE THIS ENT_^1_(LDA- DIRINX,I_^1_(INA_!-1_^1_(STA- DIRINX,I_^1_(SQZ_!1_^1_%JMP* SLMCA_^1_(LDA- NOPG,I_^1_(INA_!-1_^1_(STA- N€€OPG,I_^1SL1_$RTJ* (MCON) PIL_^1_(RTJ* (MCON+1) READIM_^1_(RTJ* (MCON+2) GETOP_^1_(SAM_!3_^1_(SUB_!=N$15A3_%EMC OPCODE_^1_(SAZ_!1_^1_(JMP* SL1_^1_(JMP_!MDEX_^1MOVIMG_!ADC_!0_^1_(ENA_!-1_^1_(STA- CT,I_^1_(STA- NC,I_^1_(RTJ* MV1_^1_(RTJ* (MCON+5) SKLOUT_^1_(JMP* (MOVIMG)_^1MV1_$ADC_!0_^1_(RTJ* CHRPIC_^1_(SAM_!1_^1_(RTJ* NEWPUT_^1_(SAM_!1_^1_(JMP* MV1+1_^1_(RTJ* CRPUT_^1_(€€JMP* (MV1)_^1NEWPUT_!ADC_!0_^1_(STA- CHST,I_^1_(LDA- SKLADR,I_F**MSOS 4.0_^1_(STA* N1A_K**MSOS 4.0_^1_(RAO- NC,I_^1_(LDQ- NC,I_^1_(INQ_!-72_^1_(SQN_!2_,BUFFER FULL_^1_(ENA_!-1_^1_(JMP* (NEWPUT)_^1_(INQ_!72_^1_(ENA_!0_^1_(LRS_!1_^1_(SAN_!N2-*-1_^1_(LDA- CHST,I_^1_(ALS_!8_^1_(ADD_!=N$FF_^1_(JMP* N1+1_J**MSOS 4.0_^1N2_%LDA- CHST,I_^1_(EOR_!=N$FF00_^1N1_%AND* (N1A),Q_G**MSOS€€ 4.0_^1_(STA* (N1A),Q_G**MSOS 4.0_^1_(LDA- CHST,I_^1_(JMP* (NEWPUT)_^1N1A_$NUM_"0_L**MSOS 4.0_^1CHRPIC_!ADC_!0_^1_(LDA- INPADR,I_$SAVE INPUT ADDR_^1_(STA- CHST,I_^1_(LDA- CRPADR,I_^1_(STA- INPADR,I_^1_(RAO- AF,I_^1CHRPID RTJ+ CHPU_^1_(ENA_!0_^1_(STA- AF,I_^1_(LDA- CHST,I_^1_(STA- INPADR,I_$RESTORE INPUT ADR_^1_(SQM_!4_^1_(TRQ_!A_^1_(STA- CS,I_^1_(INQ_!-$D_^1_(SQN_!1_^1_€€(ENA_!-1_/SET A NEG FOR CR_^1_(JMP* (CHRPIC)_^1CRPUT_"ADC_!0_^1_(LDQ- SKLADR,I_F**MSOS 4.0_^1_(STQ* N1A_K**MSOS 4.0_^1_(LDQ- NC,I_^1_(INQ_!-72_^1_(SQN_!5_^1_(ENQ_!36_^1CR1_$LDA_!=N$D00_^1_(STA* (N1A),Q_G**MSOS 4.0_^1_(JMP* (CRPUT)_^1_(INQ_!72_^1_(ENA_!0_^1_(LRS_!1_^1_(INQ_!1_^1_(JMP* CR1_^1MACCAL_!LDA- CS,I_^1_(SAZ_!MCC3-*-1_$TERMIN BLANK_^1_(STA- T1,I_)SAVE TERMIN_^1_(ENA€€_!0_^1_(STA- IG,I_^1_%RTJ*_"(CHRPID+1) CHPU_^1_(RAO- IG,I_^1_(LDQ- T1,I_^1_(SAZ_!1_,BLANK_^1_(ENQ_!1_,MAKE CS COMMA FOR ERROR_^1_(STQ- CS,I_^1MCC3_#LDA- INPADR,I_^1_(STA- CRPADR,I_^1_(LDA- ACADR,I_G**MSOS 4.0_^1_(STA* MCCON_I**MSOS 4.0_^1_(LDA- DC,I_)DEPTH COUNT_^1_(RAO- DC,I_^1_%SAZ MCC3A-*-1_^1_(LDA_!=XACTBL2_^1_(STA- ACADR,I_^1_(STA* MCCON_I**MSOS 4.0_^1_(ENA_!0_0Z€€ERO OUT ACTUAL_^1MCC3A ENQ 95_+TABLE_^1_(STA* (MCCON),Q ACADR_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-3_^1_(STA- NULSW,I_^1_(STA- CM1,I_^1_(LDA- PM,I_-PROG MACRO SW_^1_(STA* (MCCON) ACADR SET SW IN 1ST WD OF ACTBL_^1_(LDQ- DIRINX,I_)ADDR-1 OF SKEL PTR_^1_(LDA- 1,Q_^1_(ENQ_!1_0PUT SKEL PTR IN 2ND WD_^1_(STA* (MCCON),Q ACADR OF ACTBL_^1_(ENA_!3_0SET ACTBL INDEX_^1_(STA- AC,I_€€^1AC_%EQU_!AC(FPRINX)_^1NF_%EQU_!NF(LOCSW)_^1_(ENA_!$7F_*BEGIN CHAR_^1MCC2_#RTJ+ ACTPUT_^1_(ENA_!0_^1_(LDQ- CS,I_-CHECK CALL TERM_^1_(JMP* *+1,Q_,AND CHNG TO 7 BIT ASCII_^1_(INA_!$25_.BLANK_^1_(INA_!-$30_-COMMA_^1_(INA_!-2_/PLUS_^1_(INA_!3_0MINUS_^1_(INA_!$2A_.ASTERISK_^1_(SAP_!1_^1_(JMP* (MCCON+1) MACER COMMA_^1_(RTJ* (MCC2+1) ACTPUT_^1_(RAO- IG,I_)SLEW LEADING BLANKS_^1_(RT€€J* (MCCON+2) CHPU_^1_(SAN_!1_^1_(JMP* BLNCHR_'NO PARAMETERS ON THIS CALL_^1_(LDA- CT,I_)BACK UP CTR AND PRETEND_^1_(INA_!-1_+COMMA WAS PRESENT_^1_(STA- CT,I_^1_(JMP* MC4_^1SETBGN_!ENA_!$7F_^1_(RTJ* (MCC2+1) ACTPUT_^1GETCH_"RTJ* CHRPIC_^1_(LDQ- AP,I_^1_(SAP_!2_^1_(SQN_!MC1-3-*-1 ERR-AP SET AT END OF IMG_^1_(JMP* BLNCHR_^1_(SAN_!2_^1_(RAO- NULSW,I_%ZERO-IS NULL_^1_(JMP* GE€€TCH_^1_(INA_!-$27_-APOSTROPHE_^1_(SAN_!MC1-*-1_*NO_^1_(SQZ_!1_0APOS SW SET_^1_(JMP* ENDAPS_+YES_^1_(LDA- CM,I_-COMMA SW SET_^1_(SAN_!1_^1_(JMP* (MCCON+1) MACER_^1_(RAO- AP,I_-SET APOS SW_^1_(JMP* GETCH_^1MC1_$INA_!-5_/COMMA_^1_(SAN_!MC2-*-1_*NO_^1_(SQN_!MC3-*-1_*APOS SWSET_^1_(STA- NULSW,I_%ZERO NULL SW_^1MC4_$LDA- NF,I_-NO_^1_(INA_!-1_^1_(STA- NF,I_^1_(SAN_!1_^1_(JMP* (MC€€CON+1) MACER_^1_(RAO- CM,I_-SET COMMA SW_^1_(RAO- CM1,I_^1*_;CM SW USED SO APOS_^1*_;AS FIRST CHAR IS_^1*_;LEGAL-CM1 IS USED TO_^1*_;TELL CONTINUATION IMAGE_^1_(JMP* SETBGN_^1MC2_$INA_!$C_/BLANK_^1_(SAZ_!2_0YES_^1_(INA_!$17_.TAB_^1_(SAN_!MC3-*-1_*NO_^1_(SQN_!MC3-*-1_*APOS SW SET_^1_(JMP* BLNCHR_+NO_^1MC3_$LDA- CS,I_^1_(RTJ* (MCC2+1) ACTPUT_^1_(ENA_!0_^1_(STA- CM,I_^1_(STA- €€CM1,I_^1_(STA- NULSW,I_^1_(JMP* GETCH_^1ENDAPS_!STA- AP,I_^1_(RTJ_!CHRPIC_^1_(SAM_!BLNCHR-*-1_'END OF INPUT IMG_^1_(INA_!-$2C_-COMMA_^1_(SAN_!1_0NO_^1_(JMP* MC4_^1_(INA_!$C_/BLANK_^1_(SAZ_!3_0YES_^1_(INA_!$17_.TAB_^1_(SAZ_!1_0YES_^1_(JMP* (MCCON+1) MACER_^1BLNCHR_!LDA- CM1,I_^1_(ENQ_!0_^1_(STQ- CM1,I_^1_(SAZ_!2_^1_(LDA- NULSW,I_^1_(SAZ_!1_^1_(JMP* MC5_*NULL PARAM LAST-NOT C€€ONT_^1_(RAO- MSW2,I_+CONTINUATION IMAGE_^1MC7_$LDA_!=N$8000_^1_(ENQ_!42_/SET MACRO CALL BIT_^1_(ADD* (MC7A),Q_!IN IL_>**MSOS 4.0_^1_%STA*_"(MC7A),Q_F**MSOS 4.0_^1_(ENQ_!2_0SAVE MACRO NAEM_^1MC7B_!LDA- SY,B_^1_(STA- TP1,B_^1_(INQ_!-1_^1_(SQM_!1_^1_%JMP* MC7B_^1MC7C_#JMP+ CONAC_I**MSOS 4.0_^1MC7A_#NUM_!0_M**MSOS 4.0_^1MCCON_"ADC_%0,MACER_C**MSOS 4.0_^1_(ADC_!CHPU_^1MC5_$ENA_!$7F_€€^1_(RTJ* ACTPUT_^1_(LDA- NF,I_^1_(INA_!-1_^1_(STA- NF,I_^1_(SAZ_!1_^1_(JMP* MC5_^1LOCPRC_!LDA- NL,I_^1_(SAZ_!1_^1_(JMP* MC6_^1_(LDA* MC7+1_^1_%ENQ 42_8SET BIT IN IL FOR_^1_(ADD* (MC7A),Q_!INPADR_=**MSOS 4.0_^1_(STA* (MC7A),Q_!INPADR_=**MSOS 4.0_^1_(RAO- MSW1,I_^1_(LDA- DC,I_^1_(INA_!-1_^1_(SAN_!1_^1_(JMP* MC8_^1_(LDQ- ACSECT,I_$ACTUAL SECTOR NO_^1_(LDA* MACGET+1_^1_(€€RTJ_!DOUT_^1_(RAO- ACSECT,I_$INCREMENT ACSECT NO_^1_%RAO- ACSECT,I_^1_(ENQ_!95_/MOVE ACTBL2 TO ACTBL_^1_(LDA_!ACTBL2,Q_^1_(STA* (MACGET+1),Q ACTBL_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-5_^1_(LDA* MACGET+1_^1_(STA- ACADR,I_%RESTORE ACADR_^1_(STA* MCCON_I**MSOS 4.0_^1MC8_$JMP* MC7C_J**MSOS 4.0_^1MC6_$ENA_!$5B_.LEFT BRACKET_^1_(RTJ* ACTPUT_'TO ACTBL_^1_(LDA- LOCTOT,I_)TOTAL NUMB €€LOC LABELS_^1_(LDA-_$LOCTOT,I_^1_(ENQ_%0_^1_(STQ_%T1,I_^1_(ENQ_%2_^1JJHEX1_!INA_%-16_^1_(SAM_%2_^1_(RAO-_$T1,I_^1_(JMP*_$*-3_^1_(INA_%6_^1_(SAM_%2_^1_(INA_%65_^1_(JMP*_$*+2_^1_(INA_%58_^1_(STA-_$T1,B_^1_(LDA-_$T1,I_^1_(STA-_$T1+3,I_^1_(ENA_%0_^1_(STA-_$T1,I_^1_(LDA-_$T1+3,I_^1_(INQ_%-1_^1_(SQZ_%1_^1_(JMP*_$JJHEX1_^1_(LDA-_$T1+2,I_^1_(STA-_$T1,I_^1_(LDA-_$T1+1,I_^1_(RTJ* ACTPUT_^1_€€(LDA- T1,I_^1_(RTJ* ACTPUT_^1_(ENA_!$7F_^1_(RTJ* ACTPUT_^1_(RAO- LOCTOT,I_^1_(LDA- NL,I_^1_(INA_!-1_^1_(STA- NL,I_^1_(JMP* LOCPRC_^1MACCON_!STA- T1,I_)SAVE A REG_^1_(LDA_!=N$4000_%PUT CONTINUATION_^1_(ENQ_!42_+BIT IN IL_^1_(ADD* (MC7A),Q_!INPADR_=**MSOS 4.0_^1_(STA* (MC7A),Q_!INPADR_=**MSOS 4.0_^1_(ENA_!0_^1_(STA- MSW2,I_^1_(LDA- T1,I_^1_(SAM_!MCN1-*-1_^1_(RTJ_!RECV_^1_€€(ENQ_!2_^1_(LDA- SY,B_^1_(SUB- TP1,B_^1_(SAN_!MCN1-*-1_)ERROR-NAMES DONT MATCH_^1_(INQ_!-1_^1_(SQM_!2_^1_(JMP* *-5_^1MCN1_#JMP* (MCCON+1) MACER_^1_(LDA- INPADR,I_^1_(STA- CRPADR,I_^1_(RAO- IG,I_)SLEW LEADING BLANKS_^1_(RTJ* (MCCON+2) CHPU_^1_(SAN_!1_^1_(JMP* BLNCHR_^1_(LDA- CT,I_^1_(INA_!-1_^1_(STA- CT,I_^1_(JMP_!GETCH_^1ACTPUT_!ADC_!0_^1_(STA- CHST,I_^1_(RAO- AC,I_^1_€€(LDQ- AC,I_^1_(ENA_!0_^1_(LRS_!1_^1_(INQ_!-95_^1_(SQN_!2_^1_(JMP_!PUNT_^1_(INQ_!95_^1_(SAN_!3_^1_(LDA- CHST,I_^1_(ALS_!8_^1_(JMP* *+3_^1_(LDA- CHST,I_^1_(ADD* (MCCON),Q ACADR_^1_(STA* (MCCON),Q ACADR_^1_(JMP* (ACTPUT)_^1MACGET_!LDA+ ACTBL_^1_(ENQ_!0_^1_(LLS_!8_^1_(SQZ_!MG4-*-1_^1MG14_#LDA_!=XINSKBF_$SKEL IN CORE_^1_(INA_!48_^1_(STA- CRPADR,I_$SET INPUT ADDR_^1*_?FOR CHRPIC€€_^1_(JMP* MG1_^1MG4_$RTJ* SKLGET_^1_(LDA* MACGET+6_)SET INPUT ADDR_^1_(STA- CRPADR,I_$FOR CHRPIC_^1MG1_$LDA* (MACGET+1) ACTBL_^1_(EOR_!=N$100_^1_(STA* (MACGET+1)_^1_(RTJ_!RIMSB_^1_(LDA- INPADR,I_$SET ADDR FOR_^1_(STA- SKLADR,I_$NEWPUT_^1_(ENA_!-1_/INITIALIZE CTRS FOR_^1_(STA- CT,I_*CHRPIC AND NEWPUT_^1_(STA- NC,I_^1_(RTJ* (MG7+1) CHRPIC_^1_(SAP_!1_^1_(JMP* MG2A_-END OF IN€€PUT IMAGE_^1_(LDQ- PM,I_)PROG MACRO_^1_(SQN_!3_,YES_^1_(INA_!-$21_-NO-IS THIS EXCLAM PT_^1_(SAN_!2_0NO_^1_(JMP* *+3_^1_(INA_!-$2A_-ASTERISK_^1_(SAN_!MG5-*-1_*NO_^1_(ENA_!$2A_^1_(RTJ* (MG6+1) NEWPUT_^1_(RTJ_!MV1_*MOVE WHOLE IMAGE_^1_(JMP* MG2A+2_^1MG5_$LDA- CS,I_^1_(INA_!-$27_-APOS_^1_(SAZ_!MG8-*-1_*YES_^1_(LDA- CS,I_-NO_^1MG6_$RTJ+ NEWPUT_^1_%SAM MG7A-*-1_^1MG7_$RTJ+ CHRPI€€C_^1_(SAM_!1_^1_(JMP* MG5_^1MG7A_!JMP* MG2A_^1MG8_$RTJ* (MG7+1) CHRPIC_^1_(ENA_!3_^1_(STA- ACC,I_^1MG9_$RTJ* ACTPIC_+FIND ACTUAL START_^1_(INA_!-$7F_^1_(SAZ_!1_^1_(JMP* MG9_^1_(LDA- CS,I_^1_(INA_!-1_^1_(STA- CS,I_^1_(SAZ_!1_^1_(JMP* MG9_^1_(STA- NULSW,I_^1MG10_#RTJ* ACTPIC_^1_(LDQ- NULSW,I_^1_(INA_!-$7F_^1_(SAN_!4_^1_(SQN_!2_^1_(RTJ* (MG6+1) NEWPUT PUT ZERO FOR NULL PARA€€M_^1_(SAM_!6_,ERROR_^1_(JMP* MG7_^1_(RAO- NULSW,I_^1_(INA_!$7F_^1_(RTJ* (MG6+1) NEWPUT_^1_(SAM_!1_^1_(JMP* MG10_^1_(ENQ_!1_^1_(RTJ_!MER_^1MG2A_#RTJ_!CRPUT_^1_(JMP_!CONAB_^1ACTPIC_!ADC_!0_^1_(RAO- ACC,I_^1_(ENA_!0_^1_(LDQ- ACC,I_^1_(LRS_!1_^1_(LDQ* (MACGET+1),Q ACTBL_^1_(SAZ_!1_^1_(QLS_!8_^1_(QRS_!8_^1_(TRQ_!A_^1_(JMP* (ACTPIC)_^1SKLGET_!ADC_!0_^1_(LDQ+ ACTBL+1_%GET SKL PTR€€_^1_(SAZ_!SKLG2-*-1_#SYS MACRO_^1_(TRQ_!A_^1_(ADD- SKSCST,I_^1_(TRA_!Q_^1_(LDA* MG14+1 INSKBF_^1_(RTJ* (E2+3) DIN_^1_%RAO* (SKLGET+2)_%BUMP SKELETON POINTER_,45*776_^1_%RAO* (SKLGET+2)_H45*776_^1_(JMP* SKLG1_^1SKLG2_"INQ_!1_^1_%LDA_!=XMCSKAL-GFILE_B**MSOS 4.0_^1_(RTJ_!GTFIL_^1_(ADC_!INSKBF_^1_%ENA 96_P45*776_^1_(ADD* (SKLGET+2)_"UP SKEL PTR_^1_(STA* (SKLGET+2)_"FOR NEXT SKEL€€_^1SKLG1 JMP* (SKLGET)_J45*776_^1_%ENT_#MCNAM_^1MCNAM NUM_#0,0,0_^1MN_#NOP_#0_^1_%ENQ_#2_^1MN1_"STA*_"MCNAM_^1_%INQ_#-1_^1_%SQM_#1_^1_%JMP*_"MN1_^1_%JMP*_"(MN)_^1ENDMAC_!LDA- DC,I_^1_%SAZ_#E3_^1_(INA_!-1_^1_(STA- DC,I_^1_(STA- MSW1,I_^1_(SAN_!E1-*-1_^1E3_#RTJ*_"MN_^1_(JMP+ CONAC_^1E1_%LDQ- ACSECT,I_$BRING IN ACTBL FROM MS_^1_%INQ -2_^1_(STQ- ACSECT,I_^1E2_%LDA_!=XACTBL_^1_€€(RTJ+ DIN_^1_(LDA* (E2+1) ACTBL_^1_(ENQ_!0_^1_(LLS_!8_^1_(ARS_!8_^1_(STA- PM,I_^1_%SQZ GFL1-*-2_J45*776_^1_(LDQ* (SKLGET+2)_^1_%SAN 1_Q45*776_^1_%INQ -94_O45*776_^1_%INQ -2_P45*776_^1_(STQ* (SKLGET+2)_^1_(RTJ* SKLGET_^1_(JMP* E1-2_^1GFL1_#ADC_!0_^1GTFIL_"ADC_!0_^1_(STQ* GFILE+5_%STARTING WORD_^1_(INQ_!95_^1_(STQ* GFILE+7_%ENDING WORD_^1_(INA_!-1_^1_(STA* GFILE+8_%NAME€€ OF FILE PTR_^1_(LDA* (GTFIL)_%BUFFER ADDR_^1_(RAO* GTFIL_^1_(STA* GFILE+6_^1_(ENA_!0_^1_(STA- CSW,I_^1_(STA* GFILE+9_^1_(STA* GFILE+10_^1GFILE RTJ- (REQPRO)_$GTFILE REQUEST._^1_(NUM_!$5A00_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC_!0_^1_(ADC_!$8C2_^1_(ADC_!0_^1_(ADC_!0_^1_(ADC_!0_^1_(ADC_!0_^1_(ADC_!0_^1_(ADC_!0_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1_(JMP* (GTFIL)_^1MCSKAL_!ALF€€_!3,MACSKL_^1MACROS ALF_!3,MACROS_H**MSOS 4.0_^1DOUT_#ADC_!0_^1_(STA* DISKWR+6_^1_(STQ* DISKWR+8_^1_(ENA_!0_^1_(STA- CSW,I_^1DISKWR RTJ- (REQPRO)_$FWRITE REQUEST._^1_(ADC_!$4C00_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC_!0_^1_%VFD N3/0,N1/0,N2/2,X10/STDSCR_^1DISKW5_!NUM_%96_^1_(ADC_!0_^1_(ADC_!0_^1_(ADC_!0_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1_(ENA_!96_^1_(STA* DISKWR+5_^1_(JMP* €€(DOUT)_^1DIN_$ADC_!0_^1_(STA* DISKRD+6_^1_(STQ* DISKRD+8_^1_(ENA_!0_^1_(STA- CSW,I_^1DISKRD RTJ- (REQPRO)_$FREAD REQUEST._^1_(ADC_!$4800_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC_!0_^1_%VFD N3/0,N1/0,N2/2,X10/STDSCR_^1_(NUM_!96_^1_(ADC_!0_^1_(ADC_!0_^1_(ADC_!0_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1_(JMP* (DIN)_^1DEVSW NUM 0_,IF=0,OPT CARD PRESENT_/MSOS4.1_^1OPT_"STA* DEVSW_MMSOS4€€.1_^1_%ENA 0_QMSOS4.1_^1_%ENQ 4_QMSOS4.1_^1_(STA_!L,Q_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-4_^1_%ENQ 95_PMSOS4.1_^1BACK_!LDA* (O22),Q_KMSOS4.1_^1_%STA TMPBUF,Q_JMSOS4.1_^1_%INQ -1_PMSOS4.1_^1_%SQM 1_QMSOS4.1_^1_%JMP* BACK_NMSOS4.1_^1_%LDA* DEVSW_(OPT READ_**MSOS 4.0_^1_(LDA- SY,I_^1_(SAN_!1_^1_(JMP* MDX2-2_^1_(SUB_!=N$16E_^1_(SAN_!MDX1-*-1_^1_(LDA- SY+1,I_^1_(SUB_!=N$242D_^1_(SAN_!MDX1-*-1_^1_(LDA- SY+2,I_^1_(SUB_!=N$2123_^1_(SAZ_!M€€DX2-*-1_^1MDX1_#RTJ* GETOP_^1_(SUB_!=N$3423_%MAC OPCODE_^1_(SAN_!1_^1_(JMP- (MCDEF)_"MACDEF_=**MSOS 4.0_^1_(RTJ- (MERROR)_!MER_@**MSOS 4.0_^1MDX2_#LDQ- DIRINX,I_^1_(INQ_!-5_^1_(LDA_!DIRBUF,Q_$FLAG LAST DIR_^1_(TCA_!A_,ENTRY_^1_(STA* (*-2),Q_^1_(LDQ- DIRSEC,I_^1_(LDA_!=XDIRBUF_^1_(RTJ- (DKOUT)_"DOUT_?**MSOS 4.0_^1_(LDA- SKWDCT,I_^1_(ENQ_!0_^1_(DVI_!=N96_^1_(ADD- SKSCST,I_^1€€_(INA_!-1_^1_(STA- T1,I_^1MDX3_#LDQ- SKSCST,I_^1_(LDA_!=XINBUF_^1_(RTJ- (DINPUT)_!DIN_@**MSOS 4.0_^1_(ENQ_!48_^1_(LDA* (MDX3+2),Q_^1_(SAM_!2_,Q CONTAINS NUMB_^1_(INQ_!1_,WDS TO OUTPUT_^1_(JMP* *-3_^1_(RTJ* OUTBIN_^1_(LDA- SKSCST,I_^1_(SUB- T1,I_^1_(SAZ_!2_^1_(RAO- SKSCST,I_^1_(JMP* MDX3_^1_%RTJ- (REQPRO)_$FWRITE REQUEST._^1_(NUM_!$4C00_I**MSOS 4.0_^1_(ADC_!0_^1_(ADC_!0_^1€€_%VFD N3/0,N1/1,N2/2,X10/STDOCD_^1_(ADC_!5_^1_(ADC_!MSSG_^1_(ENA_!0_^1_(STA- CSW,I_^1_%RTJ- (REQPRO)_$FREAD REQUEST._^1_(NUM_!$4800_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC_!0_^1_%VFD N3/0,N1/1,N2/2,X10/STDICD_^1_(ADC_!10_^1_(ADC_!INBUF_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1_(RTJ- (WREOF)_"WRITE END OF FILE_2**MSOS 4.0_^1MDX4_#LDQ- DRSCST,I_^1_(LDA* MDX3+2_'INBUF_^1_(RTJ- (DINPU€€T)_!DIN_@**MSOS 4.0_^1_(ENQ_!96_^1_%RTJ* OUTBIN_^1_)LDA- DRSCST,I_^1_(SUB- DIRSEC,I_^1_(SAZ_!2_^1_(RAO- DRSCST,I_^1_(JMP* MDX4_^1_(RTJ- (WREOF)_"WRITE END OF FILE_2**MSOS 4.0_^1ENDEXT_!RTJ- (REQPRO)_!EXIT REQUEST_7**MSOS 4.0_^1_(NUM_!$A00_^1OUTBIN_!ADC_!0_^1_(STQ* OB1_^1_(ENA_!0_^1_(STA- CSW,I_^1_%RTJ- (REQPRO)_$FWRITE REQUEST._^1_(NUM_!$4C00_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC€€_!0_^1_%VFD N3/0,N1/0,N2/2,X10/STDOUT_^1OB1_$ADC_!0_^1_(ADC_!INBUF_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1_(JMP* (OUTBIN)_^1GETOP_"ADC_!0_^1_(ENA_!0_^1_(STA- IG,I_^1_(ENA_!-1_^1_(STA- CT,I_^1_(RTJ* CHPU_-GET 1ST CHAR_^1_(SAZ_!G1-*-1_'NO LABEL_^1_(INA_!-$A_*ASTERISK_^1_(SAN_!2_,NO_^1_(ENA_!-1_^1_(JMP* (GETOP)_^1_(RTJ- (MCHPKR)_!MCHPR_>**MSOS 4.0_^1G1_%RAO- IG,I_^1_(RTJ- €€ (MCHPKR)_!MCHPR_>**MSOS 4.0_^1_(SAZ_!G2-*-1_'SY PRESENT_^1_(ENA_!$3F_^1_(AND- SY+1,I_^1_(SAZ_!4_^1G2_%ENA_!0_^1_(STA- NU,I_^1_(RAO- IG,I_)SET TO SKIP LEADING BLN_^1_(JMP* (GETOP)_^1_(LDQ- SY,I_^1_(LRS_!6_^1_(ALS_!6_^1_(QLS_!10_^1_(INA_!-$20_^1_(SAM_!G3-*-1_^1_(ALS_!5_^1_(AAQ_!A_^1_(LDQ- SY+1,I_^1_(QRS_!8_^1_(INQ_!-$20_^1_(SQP_!1_^1G3_%JMP* G2_^1_(AAQ_!A_^1_(JMP* G2+1_^1CHP€€U_#ADC_!0_^1_(RAO- CT,I_)INCREMENT CHAR CTR_^1_(ENA_!0_^1_(LDQ- CT,I_^1_(INQ_!-72_^1_(SQM_!5_^1_(LDA- AF,I_^1_(SAN_!1_^1_(JMP* C1+1_^1_(ENQ_!-0_^1_(JMP* (CHPU)_^1_(INQ_!72_^1_(LRS_!1_^1_(ADQ- INPADR,I_F**MSOS 4.0_^1_(LDQ- ($22),Q_G**MSOS 4.0_^1_(SAZ_!1_^1_(QLS_!8_^1_(QRS_!8_,Q CONTAINS 7 BIT CHAR_^1_(LDA- AF,I_^1_(SAZ_!1_^1_(JMP* (CHPU)_^1_(SQM_!C3+1-*-1_$NULL-IGNORE IT_^1€€_(INQ_!-$9_*TAB-IS END OF FIELD_^1_(SQZ_!C3-*-1_'YES-A IS ZERO SO WILL EXIT_^1_(LDA- IG,I_^1_(INQ_!-$4_*CARRIAGE RETURN_^1_(SQN_!3_,NO_^1_(ENA_!71_+SET CTR FOR_^1_(STA- CT,I_^1_(JMP* CHPU+1_^1_(INQ_!-$13_)BLANK_^1_(SQM_!C1-*-1_'CHAR ILLEG_^1_(SQN_!2_^1C3_%SAZ_!C1+1-*-1_$CHAR BLNK-IG NOT SET_^1_(JMP* CHPU+1_'GO BACK FOR NEXT CHR_^1_(INQ_!-$40_)UPPERBOUND FOR LEGAL_^1_(SQM_!C2-*-€€1_'IS LEGAL_^1C1_%ENA_!$3C_^1_(STA- CS,I_^1_(ENQ_!0_^1_(STQ- IG,I_^1_(JMP* (CHPU)_^1C2_%INQ_!$40_*6 BIT CHAR FOR OUTPUT_^1_(TRQ_!A_^1_(JMP* C1+1_^1MSSG_#ALF_!5,MACSKL END_^1_(ORG_!$C9_^1_(ADC_!MCHPR,MACDEF $C9,$CA_^1_(ORG*_^1XC_%NUM_!0,$C,$B BLANK,COMMA,PLUS_^1_(NUM_!$D,$A MINUS,ASTERISK_^1MCHPR_"ADC_!0_^1_(ENA_!0_^1_(ENQ_!4_^1_(STA- SY,B_)ZERO SY,XMOD_^1_(INQ_!-1_^1_(SQM_!1_€€^1_(JMP* *-3_^1XLOP_#RTJ- (CHPKUP)_!CHPU_?**MSOS 4.0_^1_(ENQ_!4_^1X1_%LDA- CS,I_^1_(SUB* XC,Q_)SEARCH SPECIALS_^1_(SAZ_!XLO1-*-1_$FOUND_^1_(INQ_!-1_^1_(SQM_!X5-*-1_'NOT FOUND_^1_(JMP* X1_^1XLO1_#STQ- CS,I_)SET CS INDICATOR_^1_(SQZ_!2_^1_(INQ_!-1_^1_(SQN_!1_^1_(JMP* XB_+COMMA BLANK_^1_(JMP* XP_+PLUS,MINUS,ASTERISK_^1X5_%LDQ- XMOD,I_^1_(INA_!-$10_^1_(SAM_!XA-1-*-1_$ERR-BELOW€€ LOWER BOUND_^1_(INA_!-$A_^1_(SAP_!2_,NOT NUMERIC_^1_(SQZ_!XA-1-*-1_$NUMERIC INITIAL MODE_^1_(JMP* XALF_^1_(INA_!-7_^1_(SAM_!XA-1-*-1_$NOT ALPHA ERROR_^1_(INA_!-$1B_^1_(SAM_!1_,NOT ALPHA ERROR_^1_(JMP* XR_^1XA_%SQN_!XALF-*-1_^1_(RAO- XMOD,I_^1_(ENQ_!0_^1_(INA_!$1C_*CONVERT TO 5 BIT VALUE_^1_(ALS_!6_^1_(JMP* XB-3_^1XALF_#LDQ- SY+3,I_^1_(INQ_!-6_^1_(SQZ_!XB-1-*-1_$6 CHARS EIXT_^€€1_(INQ_!6_^1_(ENA_!0_^1_(LRS_!1_^1_(SAN_!3_^1_(LDA- CS,I_^1_(ALS_!8_^1_(JMP* *+2_^1_(LDA- CS,I_^1_(ADD- SY,B_^1_(STA- SY,B_^1_(RAO- SY+3,I_^1_(JMP* XLOP_^1XB_%LDQ- XMOD,I_^1_(SQN_!1_^1_(RAO- SY+1,I_^1XB2_$LDQ- SY+3,I_^1_(SQZ_!3_^1_(INQ_!-1_^1_(QRS_!1_^1_(STQ- SY+3,I_^1XX_%LDA- SY,I_^1_(JMP* (MCHPR)_^1XP_%LDQ- XMOD,I_^1_(SQZ_!1_^1_(JMP* XB2_^1XR_%RTJ- (CHPKUP)_!CHPU_€€?**MSOS 4.0_^1_(SAZ_!XR1-*-1_^1_(ENQ_!1_^1_(STQ- CS,I_^1_(INA_!-$C_^1_(SAZ_!XR1-*-1_^1_(JMP* XR_^1XR1_$ENA_!0_^1_(ENQ_!3_^1_(STA- SY,B_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-3_^1_(JMP* XX_^1MACDEF_!LDA_!=XSKLBUF_$SET SKEL ADDR_^1_(STA- SKLADR,I_^1_(LDA- CS,I_)TERMIN BLANK_^1_(SAN_!6_,NO_^1_(ENA_!-1_+INITIALIZE CHR CTR_^1_(STA- CT,I_^1MD3_$RTJ* MCHPR_,GET MACRO NAME_^1_(SAZ_!2_,€€NO NAME_^1_(LDA- CS,I_)TERMIN BLANK_^1_(SAZ_!1_^1_(JMP* MD14 SLMC_^1_(RTJ- (RECV1)_"CONVERT NAME TO 7 BITS--RECV_'**MSOS 4.0_^1_(RAO- DIRINX,I_^1_(LDA- DIRINX,I_^1_(INA_!-96_*THIS DIR FULL_^1_(SAN_!5_,NO_^1_(STA- DIRINX,I_^1_(LDQ- DIRSEC,I_$YES-OUTPUT IT_^1_(RAO- DIRSEC,I_^1_(LDA* MD1+1_^1_(RTJ- (DKOUT)_"DOUT_?**MSOS 4.0_^1_(LDQ- DIRINX,I_$PUT AWAY MACRO NAME_^1_(LDA- S€€Y,I_^1MD1_$STA+ DIRBUF,Q_^1_(INQ_!1_^1_(LDA- SY+1,I_^1_(STA* (MD1+1),Q_^1_(INQ_!1_^1_(LDA- SY+2,I_^1_(STA* (MD1+1),Q_^1_(INQ_!1_^1_(STQ- DIRINX,I_^1_(LDA_!=N$2E20_%PUT PERIOD AS_^1_(STA* (MCON+4) PTBL 1ST FORMAL PARAM_^1_(ENA_!1_^1_(STA- FPRINX,I_$SET FORMAL PARAM INX_^1_(RAO- IG,I_^1_(RTJ* MCHPR_(SLEW OPCODE_^1_(RAO- IG,I_^1_(RTJ* MDSB1_^1_(LDA- FPRINX,I_$NUMB FORMALS€€_^1_(LDQ- DIRINX,I_$TO DIRECTORY_^1_(STA* (MD1+1),Q_^1_(INQ_!2_^1_(LDA- SKWDCT,I_)SKELETON PTR_^1_(STA* (MD1+1),Q_#TO DIRECTORY_^1_(STQ- DIRINX,I_^1_(RAO- LOCSW,I_%SET LOCAL SWITCH_^1GETSKL_!RTJ- (RDIMAG)_!GET NEXT IMAGE_!READIM_,**MSOS 4.0_^1_(RTJ- (GETTOP)_!GET OP CODE GETOP_1**MSOS 4.0_^1_(LDQ- INPADR,I_^1_(STQ- CRPADR,I_$SET TO GET SKEL_^1_(LDQ- LOCSW,I_^1_(SQZ_!MD5€€-*-1_%LOC PROC DONE_^1_(SAP_!2_^1_(STA- NU,I_)ASTERISK_^1_(JMP* MD16_^1_(SUB_!=N$31E3_%LOC IMAGE_^1_(SAN_!1_,NO_^1_(JMP* LOCP_^1MD16_#ENA_!0_^1_(RTJ* LOCRTN_^1_(LDA- NU,I_^1MD5_$SAP_!MD9-*-1_^1_(ENA_!$21_*CHANGE ASTERISK_^1_(RTJ- (NEWPT)_"TO EXCLAIM POINT NEWPUT_+**MSOS 4.0_^1_(ENA_!0_^1_(STA- CT,I_^1_(STA- NC,I_^1_(RTJ- (MV11)_#OUTPUT REST_!MV1_2**MSOS 4.0_^1_(RTJ- (SKE€€LOT)_!OF IMAGE_#SKLOUT_0**MSOS 4.0_^1_(JMP* GETSKL_'AS IT STANDS_^1MD9_$LDA- NU,I_.CONVERTED OPCODE_^1_(SUB_!=N$15A3_*IS IT EMC_^1_(SAN_!1_0NO_^1_(JMP* MD10_-YES-PROCESS IT_^1_(ENA_!-1_^1_(STA- CT,I_^1_(STA- NC,I_)NEW COUNT_^1MD11_#RTJ-_!(CHRPC)_"CHRPIC_<**MSOS 4.0_^1_(SAM_!MD12-*-1_$END OF INP IMAGE_^1_(RTJ- (NEWPT)_"NEWPUT_=**MSOS 4.0_^1_(SAP_!3_^1MD12_#RTJ- (CRPUT1)_!PUT C€€R IN NEW IMAGE_!CROUT_(**MSOS 4.0_^1_(RTJ- (SKELOT)_!SKLOUT_=**MSOS 4.0_^1_(JMP* GETSKL_'GET NEXT SKEL_^1_(INA_!-$27_)APOSTROPHE_^1_(SAZ_!1_,YES_^1_(JMP* MD11_)NO-GET NEXT CHAR_^1_(RTJ- (CHRPC)_"CHRPIC_=**MSOS 4.0_^1_(SAM_!3_,ERROR_^1_(ALS_!8_^1_(STA- T1,I_)1ST CHAR_^1_(RTJ- (CHRPC)_"CHRPIC_=**MSOS 4.0_^1_(SAM_!10_+ERROR_^1_(INA_!-$27_)APOSTROPHE_^1_(SAN_!1_,NO_^1_(INA_!-7_+Y€€ES-MAKE 2ND CHAR BLANK_^1_(INA_!$27_^1_(ADD- T1,I_^1_(STA- T1,I_^1_(LDA- CS,I_^1_(INA_!-$27_^1_(SAZ_!MD13-1-*-1_^1_(RTJ- (CHRPC)_"CHRPIC_=**MSOS 4.0_^1_(SAM_!MD14-*-1_^1_(INA_!-$27_)APOSTROPHE_^1_(SAN_!MD14-*-1 SLMC_^1_(LDQ- FPRINX,I_^1MD13_#LDA- T1,I_^1_(SUB* (MCON+4),Q PTBL_^1_(SAZ_!4_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* MD13_^1MD14_#JMP- (SLMC1)_"SLMC_?**MSOS 4.0_^1_(TRQ_!A_€€^1_(INA_!1_^1_(RTJ- (NEWPT)_"NEWPUT_=**MSOS 4.0_^1_(SAM_!LOCP+2-*-1 SLMC_^1_(JMP* MD11_^1MCON_#ADC_!0,0,0,0_^1_(ADC_!PTBL_^1LOCP_#LDA- CS,I_^1_(SAZ_!1_^1_(JMP- (SLMC1)_"SLMC_?**MSOS 4.0_^1_(LDA- FPRINX,I_^1_(STA- TP1,I_^1_(RTJ* MDSB1_^1_(LDA- FPRINX,I_^1_(SUB- TP1,I_^1_(RTJ* LOCRTN_^1_(JMP* GETSKL_^1LOCRTN_!ADC_!0_^1_(LDQ- DIRINX,I_^1_(INQ_!-1_^1_(STA* (MD1+1),Q_#SET N€€UMB OF LOCS_^1_(ENA_!0_^1_(STA- LOCSW,I_%ZERO LOCSW_^1_(LDQ- FPRINX,I_^1_(INQ_!-1_^1_(STQ- FPRINX,I_^1_(JMP* (LOCRTN)_^1MDSB1_"ADC_!0_^1MD2_$RTJ+ MCHPR_(GET PARAM_^1_(SAN_!8_^1_(LDA- SY+1,I_'NULL FIELD_^1_(SAZ_!8_,NO-ERROR_^1_(LDA- CS,I_^1_(SAN_!1_^1_(JMP* (MDSB1)_%TERMIN BLANK EXIT_^1_(INA_!-1_^1_(SAN_!3_,ERROR_^1_(JMP* MD2_^1_(LDA- SY+1,I_^1_(SAZ_!1_^1_(JMP* MD4_*SLMC €€MORE THAN TWO CHAR_^1_(RTJ- (RECV1)_"CONVERT PARAM TO 7 BITS_!RECV_$**MSOS 4.0_^1_(LDQ- FPRINX,I_^1_(INQ_!-1_^1_(LDA* (MCON+4),Q PTBL_^1_(SUB- SY,I_^1_(SAZ_!MD4-*-1_%ERROR-DUPLICATE PARAM_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-5_^1_(LDA- CS,I_^1_(INA_!-2_^1_(SAM_!1_^1MD4_$JMP- (SLMC1)_"SLMC_?**MSOS 4.0_^1_(LDA- SY,I_^1_(LDQ- FPRINX,I_$PUT PARAM ASAY_^1_(STA* (MCON+4),Q PTBL_^1€€_(RAO- FPRINX,I_^1_(LDA- CS,I_^1_(SAZ_!1_^1_(JMP* MD2_^1_(JMP* (MDSB1)_^1MD10_#RTJ- (MVIMG)_"MOVE IMAGE TO NEW BUFFER MOVIMG_"**MSOS 4.0_^1_(LDA- SKBFSW,I_^1_(SAP_!1_^1_(RTJ- (SKELOT)_!OUTPUT THIS BUFF_%SKLOUT_%**MSOS 4.0_^1_(JMP- (MDEX1)_"MDEX_?**MSOS 4.0_^1STDSCR EQU STDSCR($B3)_^1STDINP EQU STDINP($F9)_^1_(ORG_!$C7_^1_(ADC_!MINZRO,READIM $C7,$C8_^1_(ORG_!$CB_^1_(ADC_!€€MER,DOUT,DIN $CB,$CC,$CD_^1_(ORG_!$D1_^1_(ADC_!SLMC,MOVIMG,SKLOUT $D1,$D2,$D3_^1_(ADC_!CHRPIC,NEWPUT,CRPUT $D4,$D5,$D6_^1_(ADC_!RECV,MV1 $D7,$D8_^1_(ADC_!EOF_K**MSOS 4.0_^1_(ORG*_^1MCON1_"ADC_!READIM_H**MSOS 4.0_^1MCON2_"ADC_!SKLOUT_H**MSOS 4.0_^1SLMC_#ENQ_!2_^1_(RTJ_!MER_^1_(ENQ_!0_^1_(LDA- DIRINX,I_^1_(DVI_!=N6_*ERASE THIS ENT_^1_(LDA- DIRINX,I_^1_(INA_!-1_^1_(STA- DIRINX,I_€€^1_(SQZ_!1_^1_(JMP* *-8_^1SL1_$RTJ* (MCON1)_"READIM_=**MSOS 4.0_^1_(RTJ- (GETTOP)_!GETOP_>**MSOS 4.0_^1_(SAM_!3_^1_(SUB_!=N$15A3_%EMC OPCODE_^1_(SAZ_!1_^1_(JMP* SL1_^1_(JMP- (MDEX1)_"MDEX_?**MSOS 4.0_^1MOVIMG_!ADC_!0_^1_(ENA_!-1_^1_(STA- CT,I_^1_(STA- NC,I_^1_(RTJ* MV1_^1_(RTJ* (MCON2)_"SKLOUT_=**MSOS 4.0_^1_(JMP* (MOVIMG)_^1MV1_$ADC_!0_^1_(RTJ* CHRPIC_^1_(SAM_!1_^1_(RTJ€€* NEWPUT_^1_(SAM_!1_^1_(JMP* MV1+1_^1_(RTJ* CRPUT_^1_(JMP* (MV1)_^1NEWPUT_!ADC_!0_^1_(STA- CHST,I_^1_(RAO- NC,I_^1_(LDQ- NC,I_^1_(INQ_!-72_^1_(SQN_!2_,BUFFER FULL_^1_(ENA_!-1_^1_(JMP* (NEWPUT)_^1_(INQ_!72_^1_(ENA_!0_^1_(LRS_!1_^1_(SAN_!N2-*-1_^1_(LDA- CHST,I_^1_(ALS_!8_^1_(ADD_!=N$FF_^1_(ADQ- SKLADR,I_F**MSOS 4.0_^1_(JMP* *+5_K**MSOS 4.0_^1N2_%LDA- CHST,I_^1_(EOR_!=N$FF€€00_^1_(ADQ- SKLADR,I_F**MOS 4.0_^1N1_%AND- ($22),Q_G**MOS 4.0_^1_(STA- ($22),Q_G**MOS 4.0_^1_(LDA- CHST,I_^1_(JMP* (NEWPUT)_^1CHRPIC_!ADC_!0_^1_(LDA- INPADR,I_$SAVE INPUT ADDR_^1_(STA- CHST,I_^1_(LDA- CRPADR,I_^1_(STA- INPADR,I_^1_(RAO- AF,I_^1_(RTJ- (CHPKUP)_!CHPU_?**MSOS 4.0_^1_(ENA_!0_^1_(STA- AF,I_^1_(LDA- CHST,I_^1_(STA- INPADR,I_$RESTORE INPUT ADR_^1_(SQM_!5_^1_€€(SQZ_!4_^1_(TRQ_!A_^1_(STA- CS,I_^1_(INQ_!-$D_^1_(SQN_!1_^1_(ENA_!-1_/SET A NEG FOR CR_^1_(JMP* (CHRPIC)_^1CRPUT_"ADC_!0_^1_(LDQ- NC,I_^1_(INQ_!-72_^1_(SQN_!5_^1_(ENQ_!36_^1CR1_$LDA_!=N$D00_^1_(ADQ- SKLADR,I_F**MSOS 4.0_^1_(STA- ($22),Q_G**MSOS 4.0_^1_(JMP* (CRPUT)_^1_(INQ_!72_^1_(ENA_!0_^1_(LRS_!1_^1_(INQ_!1_^1_(JMP* CR1_^1READIM_!ADC_!0_^1_(RTJ* RIMSB_^1RD3_$LDA- INPADR,€€I_^1_(STA* RD1_^1_(ENA_!0_^1_(STA- CSW,I_^1_%RTJ- (REQPRO)_$FREAD REQUEST._^1_(NUM_!$4800_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC_!0_^1_%VFD N3/0,N1/1,N2/2,X10/STDINP_^1_(ADC_!40_^1RD1_$ADC_!0_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1RD2_$ENQ_!0_^1_(LDA* (RD1),Q_G**MSOS 4.0_^1_(SAM_!2_^1_(INQ_!1_^1_(JMP* RD2+1_^1_(LDA_!=N$D00_+PUT CR INTO BUFF_^1_(STA* (RD1),Q_G**MSOS 4.0_^1_(JMP* €€ (READIM)_^1RIMSB_"ADC_!0_^1_(LDA- BUFFSW,I_^1_(TRA_!Q_^1_(QLS_!1_^1_(STQ- BUFFSW,I_^1_(SAM_!3_^1RIM1_#LDA_!=XINBUF_^1_(JMP* *+3_^1_(LDA_!=XINBUF+48_^1_(STA- INPADR,I_^1_(STA* RIM2_J**MSOS 4.0_^1_(ENA_!-0_^1_(ENQ_!40_^1_(STA+ 0,Q_K**MSOS 4.0_^1RIM2_#EQU_!RIM2(*-1)_E**MSOS 4.0_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-4_K**MSOS 4.0_^1_(JMP* (RIMSB)_^1RECV_#ADC_!0_^1_(LDA_!=N$2020_^1€€_(STA- T1+1,I_^1_(STA- T1+2,I_^1_(LDA_!=N$7C0_^1_(AND- SY,I_^1_(ARS_!6_^1_(SAZ_!1_^1_(INA_!$20_^1_(INA_!$20_^1_(ALS_!8_^1_(STA- T1,I_^1_(ENA_!$3F_^1_(AND- SY,I_^1_(INA_!$20_^1_(ADD- T1,I_^1_(STA- T1,I_^1_(ENQ_!-2_^1RR_%LDA- SY+3,B_^1_(ADD* RECV+2_^1_(STA- T1+3,B_^1_(INQ_!1_^1_(SQZ_!1_^1_(JMP* RR_^1_(ENQ_!2_^1_(LDA- T1,B_^1_(STA- SY,B_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-€€4_^1_(JMP* (RECV)_^1CO_%ENQ_!1_^1_(STQ_!CONS+CSW_^1_%RTJ- (REQPRO)_$EXIT REQUEST._^1_(NUM_!$A00_^1SKLOUT_!ADC_!0_^1_(LDA- SKBFSW,I_^1_(TRA_!Q_^1_(QLS_!1_^1_(STQ- SKBFSW,I_^1_(SAM_!SK2-*-1_^1_(ENA_!48_^1_(JMP* SK3_^1SK2_$ENQ_!0_^1_(LDA- SKWDCT,I_$GET SECTOR NO_^1_(DVI_!=N96_^1_(ADD- SKSCST,I_^1_(TRA_!Q_^1SK4_$LDA_!=XSKLBUF_$ADDR_^1_(RTJ_!DOUT_^1_(SOV_!0_^1_(LDA- SKWDCT,I_^1_(€€INA_!96_^1_(SOV_!OVFLOW_^1_(LDQ* OVIND_$CHECK OVERFLOW INDICATOR_^1_%SQZ_#NOOV_^1_(SAM_!NOOV_^1_(JMP* OVERR_^1NOOV_#STA- SKWDCT,I_^1_(RTJ* MINZRO_^1SK3_$ADD* SK4+1_^1_(STA- SKLADR,I_^1_(JMP* (SKLOUT)_^1OVFLOW_!RAO* OVIND_$SET OVERFLOW INDICATOR_^1_(JMP* NOOV_^1OVIND_"NUM_!0_^1OVERR RTJ- (REQPRO)_^1_%NUM $4C00_^1_%ADC ENDEXT_^1_%ADC 0_^1_%VFD N3/0,N1/1,N2/2,X10/STDOCD_€€^1_(ADC_!ERRLNG_^1_(ADC_!OVEROR_^1_%JMP- ($EA)_^1OVEROR ALF *,OVERFLOW,TO MANY MACRO DEFINITIONS*_^1_(EQU_!ERRLNG(*-OVEROR)_^1MINZRO_!ADC_!0_^1_(ENQ_!40_^1_(ENA_!-0_^1_(STA_!SKLBUF,Q_^1_(STA_!SKLBUF+48,Q_^1_(INQ_!-1_^1_(SQM_!1_^1_(JMP* *-6_^1_(JMP* (MINZRO)_^1MER_$ADC_!0_^1_(ENQ_!5_^1_(LDA_!=XERMSG_^1_(RTJ* TYPE_^1_(ENQ_!0_^1_(LDA- INPADR,I_F**MSOS 4.0_^1_(STA* MER1+1_H**MSOS€€ 4.0_^1MER1_#LDA+ 0,Q_K**MSOS 4.0_^1_(SUB_!=N$D00_^1_(SAZ_!2_^1_(INQ_!1_^1_(JMP* *-6_^1_(LDA- INPADR,I_^1_(RTJ* TYPE_^1_%RTJ- (REQPRO)_$EXIT REQUEST._^1_(ADC_!$A00_^1TYPE_#ADC_!0_^1_(STA* TYP3_^1_(STQ* TYP2_^1_%RTJ- (REQPRO)_$FWRITE REQUEST._^1_(NUM_!$4C00_I**MSOS 4.0_^1_(ADC_!0_^1_(ADC_!0_^1_%VFD N3/0,N1/1,N2/2,X10/STDOCD_^1TYP2_#ADC_!0_^1TYP3_#ADC_!0_^1_(JMP* (TYPE)_^1ERM€€SG_"ALF_!5,*****ERROR_^1DOUT_#ADC_!0_^1_(STA* DISKWR+6_^1_(STQ* DISKWR+8_^1_(ENA_!0_^1_(STA- CSW,I_^1DISKWR RTJ- (REQPRO)_$FWRITE REQUEST._^1_(NUM_!$4C00_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC_!0_^1_%VFD N3/0,N1/0,N2/2,X10/STDSCR_^1_(NUM_!96_^1_(ADC_!0_^1_(ADC_!0_^1_(ADC_!0_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1_(JMP* (DOUT)_^1DIN_$ADC_!0_^1_(STA* DISKRD+6_^1_(STQ* DISKRD+8_^1€€_(ENA_!0_^1_(STA- CSW,I_^1DISKRD RTJ- (REQPRO)_$FREAD REQUEST._^1_(NUM_!$4800_I**MSOS 4.0_^1_(ADC_!CO_^1_(ADC_!0_^1_%VFD N3/0,N1/0,N2/2,X10/STDSCR_^1_(NUM_!96_^1_(ADC_!0_^1_(ADC_!0_^1_(ADC_!0_^1_(LDA- CSW,I_^1_(SAN_!1_^1_(JMP* *-2_^1_(JMP* (DIN)_^1EOF_$ADC_!0_M**MSOS 4.0_^1_(ENA_!0_M**MSOS 4.0_^1_(STA- CSW,I_I**MSOS 4.0_^1WRTEOF_!RTJ- (REQPRO)_!MOTION REQUEST TO WRITE E-O-F_€%**MSOS 4.0_^1_(NUM_!$5C00_I**MSOS 4.0_^1_(ADC_!CO_L**MSOS 4.0_^1_(NUM_!0_M**MSOS 4.0_^1_(VFD_!N4/0,N2/2,X10/STDOUT_:**MSOS 4.0_^1_(NUM_!$2000_I**MSOS 4.0_^1_(LDA- CSW,I_I**MSOS 4.0_^1_(SAN_!1_M**MSOS 4.0_^1_(JMP* *-2_K**MSOS 4.0_^1_(JMP* (EOF)_I**MSOS 4.0_^1_(END_!LIBMAC_^__PXREF CSY/ G11 P€1_%NAM XREF_)DECK-ID G11 MSOS 4.1_-SUMMARY-079_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION - LA JOLLA_(*MSOS4.1_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1PS_#EQU PS(0)_MMSOS4.1_^1STDSCR EQU STDSCR($B3)_GMSOS4.1_^1STDLGO EQU STDLGO($E4)_GMSOS4.1_^1REQPRO EQU REQPRO($F4)_GMSOS4.1_^1STDOUT EQU STDOUT($FA)_GMSOS4.1_^1STDPRT EQU STDPRT($FB)_GMSOS4.1_^1STDOCD EQU STDOCD($FC)_G€€MSOS4.1_^1DISP_!EQU DISP($EA)_IMSOS4.1_^1_%EQU ST(1),ET(ST+1),PSW(ET+1),PB(PSW+1)_0MSOS4.1_^1_%EQU DSW(PB+49),DSWW(DSW+1)_MSOS4.1_^1ASMADC ADC ASSEM1_LMSOS4.1_^1CSWW_!BZS CSWW_NMSOS4.1_^1COO_"ENA 1_QMSOS4.1_^1_%STA* CSWW_NMSOS€€4.1_^1_%JMP- (DISP)_LMSOS4.1_^1PS1ALF ALF 3,PASS1_KMSOS4.1_^1PS2ALF ALF 3,PASS2_KMSOS4.1_^1PS3ALF ALF 3,PASS3_KMSOS4.1_^1PS4ALF ALF 3,TABLST_JMSOS4.1_^1PS5ALF ALF 3,XREF_LMSOS4.1_^1MA5_"ADC 0_QMSOS4.1_^1_%EQU ENDASB(MA5+1)_EMSOS4.1_^1_%EJT_]_^1************************************************************************_^1* THE CONTENTS OF SYTRFM IN XREF HAVE TWO SIGNIFICANCES_^1€€*_$1- SECTOR NUMBER DEFINED IN PASS2_^1*_-2- INDEX SYINDM AT THIS TIME_^1*_'15_,8 7_,0_^1*_(******************************_^1*_(*_!INDEX_$* SECT. NB. *_^1*_(*_-*_,*_^1*_(******************************_^1*_]_^1* XREF_]_^1* -----_]_^1*_]_^1*_]_^1* GIVES LIST OF SYMBOLS BY EQUIVALENCES_^1*_9SYMBOLS_^1*_9EXTERNALS,_^1*_%AND ALPHABETICAL LIST OF SYMBOLS._^1*_]_^1* PASS2 GIVES DEFINIT€€ION OF SYMBOLS IN TWO WORDS_^1*_-1- COMPLEMENT DEFINED LINE NUMBER_^1*_-2- SYMBOL ADDRESS TO SYMBOL TABLE OR EXTERNAL TABLE_^1* PASS3 SAME THING WHICH PASS2, BUT BY REFERENCE._^1************************************************************************_^1XREF_!RTJ- ($F4)_(STATUS STD.PRINT DEVICE_-MSOS4.1_^1_%NUM $0600_MMSOS4.1_^1_%VFD N3/0,N1/0,N2/2,X10/STDPRT_9MSOS4.1_^1_%NUM 0_Q€€MSOS4.1_^1_%SQP TAG100_LMSOS4.1_^1_%JMP* XREF_NMSOS4.1_^1TAG100 TRQ A_QMSOS4.1_^1_%AND* TYPECD_'MASK OUT TYPE CODE_2MSOS4.1_^1_%ALS 5_QMSOS4.1_^1_%INA -1_PMSOS4.1_^1_%SAZ MAGTAP_'STD.PRINT IS MAG.TAPE_/MSOS4.1_^1_%INA -4_PMSOS4.1_^1_%SAN TAG101_LMSOS4.1_^1_%JMP* XREF1_(STD.PRINT IS PRINTER_0MSOS4.1_^1TAG101 LDA =N$2020_KMSOS4.1_^1_%STA CARCON_LMSOS4.1_^1_%JMP* XREF1_MMSOS4€€.1_^1MAGTAP LDA =N$3120_KMSOS4.1_^1_%STA CARCON_LMSOS4.1_^1_%JMP* XREF1_MMSOS4.1_^1TYPECD NUM $3800_(TYPE CODE MASK_6MSOS4.1_^1STOKQ BSS STOKQ_MMSOS4.1_^1STOKA BSS STOKA_MMSOS4.1_^1SAVEI BSS SAVEI_MMSOS4.1_^1SAVEA BSS SAVEA_MMSOS4.1_^1SAVEQ BSS SAVEQ_MMSOS4.1_^1ENDTSR BSS ENDTSR_'END SYM.TBL.REF.ADDR._/MSOS4.1_^1ENDTSD BSS ENDTSD_'END SYM.TBL.DEF.ADDR._/MSOS4.1_^1_%E€€JT_]_^1************************************************************************_^1*_]_^1* CORE ALLOCATION_^1* ---------------_^1*_]_^1*_,*********************************************_^1*_,*_J*_^1*_,*_(PROTECTED CORE_3*_^1*_,*_J*_^1*_,**********************************************_^1*_,*_K*_^1*_,*_(ASSEMBLER(XREF)_3*_^1*_,*_K*_^1*_,**********************************************_^1*_€€,*_K*_^1*_,*_(SYMBOL TABLE_6*_^1*_,*_6**********************_^1*_,*************************SYTRFM_-*_^1*_,*_K*_^1*_,*_(SYMBOL TABLE DEFINITION_+*_^1*_,*_K*_^1*_,*_:ENDTSD************_^1*_,***********************************_)*_^1*_,*_K*_^1*_,*_(SYMBOL TABLE REFERENCE_,*_^1*_,*_K*_^1*_,*_K*_^1*_,*_"ENDSTR***********************************_^1*_,************_@*_^1*_,*_K*_^1*_,*******€€***************************************_^1*_,*_K*_^1*_,*_(EXTERNAL TABLE_4*_^1*_,*_K*_^1*_,**********************************************_^1*_,*_K*_^1*_,*_(COMMON_<*_^1*_,*_K*_^1*_,**********************************************_^1*_]_^1************************************************************************_^1_%EJT_]_^1XREF1 LDA =XCONS_LMSOS4.1_^1_%STA- I_QMSOS4.1_^1_%ENA 0_QMSO€€S4.1_^1_%STA- LN,I_NMSOS4.1_^1_%RAO L_QMSOS4.1_^1_%LDA SYTRFM_'END ADDR.OF SYM.TBL.IN PASS2_(MSOS4.1_^1_%AND- $A_PMSOS4.1_^1_%MUI =N96_NMSOS4.1_^1_%STA* ENDTSD_'NO.OF WRS.ON THE DISK_/MSOS4.1_^1_%LDA SYTRFM_LMSOS4.1_^1_%AND- $1A_OMSOS4.1_^1_%ARS 8_QMSOS4.1_^1_%ADD* ENDTSD_LMSOS4.1_^1_%STA* ENDTSD_LMSOS4.1_^1_%ENQ 1_QMSOS4.1_^1_%LDA- ST,I_)START ADDR.SYM.TBL._1MSOS4.1_^1_%INA €€ -1_PMSOS4.1_^1_%STA- I_QMSOS4.1_^1SYLGTB LDA- 1,I_*1ST WRD.OF SYM.TBL._1MSOS4.1_^1_%SAZ SY1_*CHECK IF END OF TBL._0MSOS4.1_^1_%RAO- I_,INCREASE ADRESS_5MSOS4.1_^1_%INQ 1_,INCREASE LENGTH COUNT_/MSOS4.1_^1_%JMP* SYLGTB_'FOR THE NEXT WORD_3MSOS4.1_^1SY1_"STQ* STOKQ_(LENGTH OF THE SYM.TBL._.MSOS4.1_^1_%LDA SYCADM_'CURRENT SECT.ADDR._2MSOS4.1_^1_%SUB SYTRFD_'NO. OF UTILITY SECTORS€€_.MSOS4.1_^1_%MUI =N96_)NO. OF WORDS_8MSOS4.1_^1_%ADD SYINDM_'NO. OF WORDS IN CORE_0MSOS4.1_^1_%STA* ENDTSR_'END OF S.R.T._7MSOS4.1_^1_%ADD* STOKQ_(NO.WRDS IN SYM.TBL AND SYM.REF.TBL. MSOS4.1_^1_%LDQ =XCONS_'COMMON ADRESS_7MSOS4.1_^1_%STQ- I_,RESTORE CONS_8MSOS4.1_^1_%ADD- ST,I_)ADDRESS WHICH GIVES SYM TAB + S.R.T. MSOS4.1_^1_%SUB SYEXT_(CAN EXT,SYM.TBL,SYM.REF.TBL.GET IN COMS€€OS4.1_^1*_8CAN I MAKE SYM REF TABL + SYM TABL + EXTERNAL_^1*_8CAN I MAKE S.R.T. + S.T. + E.T. IN CORE_^1_%SAM SY2_*YES_AMSOS4.1_^1_%LDA SYEXT_MMSOS4.1_^1_%SAZ SY2_OMSOS4.1_^1_%ENA 1_,LISTING SWITCH_6MSOS4.1_^1_%STA L_QMSOS4.1_^1_%STA C_P*MSOS4.1_^1_%JMP ASSEM_MMSOS4.1_^1* O.K. NOW MOVE SYMBOL REF TABLE AFTER SYMBOL TABLE_^1*_$TWO POSITIONS_^1*_)1- SYM REF TBL IS ONLY IN CORE€€_^1*_)2- SYM REF TBL IS IN CORE AND MASS STORAGE_^1*_]_^1SY2_"LDA- ST,I_)START SYM.TBL._6MSOS4.1_^1_%ADD* STOKQ_(LENGTH S.T._9MSOS4.1_^1_%INA 1_,FOR TEST END-FILE OF THIS TABLE_$MSOS4.1_^1_%STA SYTRFM_'START ADDR SYM.REF.TBL._-MSOS4.1_^1_%STA* STOKA_(ADDRESS TO WRITE SYM REF TABLE_%MSOS4.1_^1_%ADD* ENDTSD_'END ADDRESS OF SYM REF TABLE_(MSOS4.1_^1_%STA* ENDTSD_LMSOS4.1_^1_%ADD* EN€€DTSR_LMSOS4.1_^1_%STA* ENDTSR_'END ADDR.S.R.T._5MSOS4.1_^1_%LDA- DSWW,I_'REQUEST, IS IT FREE_1MSOS4.1_^1_%SAN 1_,O.K. I CAN WAIT TO CALL_-MSOS4.1_^1_%JMP* *-2_*WAIT_@MSOS4.1_^1_%LDA SYCADM_'LAST CURRENT SECTOR ON DISK_)MSOS4.1_^1_%SUB SYTRFD_'NO. OF SECTORS_6MSOS4.1_^1_%SAN 1_QMSOS4.1_^1_%JMP* SYNTRF_'NO SECTORS ON DISK_2MSOS4.1_^1_%MUI =N96_)NO. OF WORDS TO BE TRANSFERRED_%MS€€OS4.1_^1_%STA DISKRD+5_$TRANSFER LENGTH FOR REQUEST_)MSOS4.1_^1_%STA* STOKA_MMSOS4.1_^1_%LDQ SYTRFD_'START ADDRESS ON DISK_/MSOS4.1_^1_%LDA SYTRFM_'START ADDRESS IN CORE_/MSOS4.1_^1_%RTJ DIN_*XFER DISK-CORE_6MSOS4.1_^1_%LDA SYTRFM_LMSOS4.1_^1_%ADD* STOKA_(FOR TRANSLAT S.R.T. WHICH IS IN CORE MSOS4.1_^1_%STA* STOKA_MMSOS4.1_^1SYNTRF LDQ* STOKA_(CONTINUATION ADDRESS_0MSOS4.1_^1_€€%INQ -1_PMSOS4.1_^1_%ENA 1_QMSOS4.1_^1_%STA- I_QMSOS4.1_^1SYTFST LDA SYRFTS-1,I_"ADDR.OF START_7MSOS4.1_^1_%STA- 1,Q_OMSOS4.1_^1_%LDA SYINDM_LMSOS4.1_^1_%SUB- I_,END OF TRANSFER_5MSOS4.1_^1_%RAO- I_,INCREASE FOR NEW LOOP_/MSOS4.1_^1_%SAZ 2_,END LOOP_MSOS4.1_^1_%INA -1_+REFERENCE AT LINE NUMBER_,MSOS4.1_^1_%STA- I_QMSOS4.1_^1_%LDA- 1,I_*VALUE_?MSOS4.1_^1_%TC€€A A_QMSOS4.1_^1_%LDQ =XCONS_'COMMON ADDRESS_6MSOS4.1_^1_%STQ- I_QMSOS4.1_^1_%ENQ 1_,PARA. FOR DECV_6MSOS4.1_^1_%STA- W2,I_NMSOS4.1_^1_%RTJ DECV_)RETURN IN SY W2 NUMBER_.MSOS4.1_^1_%LDA =N$2C20_%FOR ,_?MSOS4.1_^1_%LDQ* INFOUT_LMSOS4.1_^1_%STA SYRFTS,Q_$TO OUTPUT_;MSOS4.1_^1_%LDA- SY,I_)STORE TO OUTPUT BUFFER_.MSOS4.1_^1_%STA SYRFTS+1,Q_HMSOS4.1_^1_%LDA- SY+1,I_LMSOS4.1_^1_%ST€€A SYRFTS+2,Q_HMSOS4.1_^1_%INQ 3_,INCREASE INDEX_6MSOS4.1_^1_%STQ* INFOUT_LMSOS4.1_^1_%LDA* INFOUT_LMSOS4.1_^1_%SUB =N36_)TEST FOR NEXT LINE_1*MSOS4.1_^1_%SAP 2_,O.K. NO PRINT_7MSOS4.1_^1_%LDA* IRLN_)CONTINUATION ADDRESS_0MSOS4.1_^1_%JMP* CCRF_)TO CONTINUE REFERENCE RESEARCH_%MSOS4.1_^1_%LDA =XCONS_'COMMON ADDRESS_6MSOS4.1_^1_%STA I_QMSOS4.1_^1_%ENQ 40_+LENGTH PRINT_7*MSOS4.1€€_^1_%LDA =XSYRFTS_$START ADDRESS OF PRINT BUFFER_'MSOS4.1_^1_%RTJ SYWRT_(TO PRINT_ LOW BLOCK_^1*_)PASS 5_$LOW BLOCK ----> HIGH BLOCK_^1*_)PASS 4_$HIGH BLOCK ----> LOW BLOCK_^1*_).... ._$.... ..... ..... ... ....._^1*_).... ._$.... ..... ..... ... ....._^1*_)PASS 1_$LOW BLOCK€€ ----> HIGH BLOCK (FINAL RESULT)_^1_'BSS HADR_(HIGH ADDRESS BLOCK_2MSOS4.1_^1_'BSS LADR_)LOW ADDRESS BLOCK_3MSOS4.1_^1_'BSS TRADST_'START ADDRESS FOR RESEARCH_*MSOS4.1_^1*_:PASS, 6, 4, 2, = HADR_^1*_:PASS, 5, 3, 1, = LADR_^1_%BZS LFORRT_'FLAG, 1= HALF LEFT WORD_-MSOS4.1_^1*_>0= HALF RIGHT WORD_^1_%BSS PASSNB_'PASS NUMBER_9MSOS4.1_^1_%BSS LS_+LENGTH SYMBOL_7MSOS4.1_^1_%BZS FLGA€€DR_'TRANSFER DIRECTION_2MSOS4.1_^1_%BSS WDTS_)TEST WORD, POSITION OF WORD IN SYMBOLMSOS4.1_^1*_:FLGADR= 0, HADR TO LADR_^1*_@= 1, LADR TO HADR_^1*_]_^1************************************************************************_^1_%EJT_]_^1SORT_!LDA- ST,I_)START ADDRESS FOR BEGINING_)*MSOS4.1_^1_%INA -1_PMSOS4.1_^1_%STA* HADR_)INITIALISATION FOR PASS6_,MSOS4.1_^1_%STA* TRADST_'START €€ADDRESS FOR CHECKING_*MSOS4.1_^1_%ENA 6_,NUMBER OF PASS_6MSOS4.1_^1_%STA* PASSNB_LMSOS4.1_^1_%ENA 3_,NUMBER OF WORDS_5MSOS4.1_^1_%STA* WDTS_NMSOS4.1_^1NEXTST RTJ RAZ_*0 IN SYRFTS VECTOR_2MSOS4.1_^1_%ENA 0_QMSOS4.1_^1_%STA* LS_+LENGTH OF SYMBOL_4MSOS4.1_^1_%LDA* TRADST_'CHECK ADDRESS START (HADR OR LADR)_!MSOS4.1_^1_%STA- I_QMSOS4.1_^1SOR1_!LDA- 1,I_*FIRST WORD_:MSOS4.1_^1_%RAO*€€ LS_+LENGTH OF SYMBOL_4MSOS4.1_^1_%SAN 1_,TEST NEGATIVE VALUE_1MSOS4.1_^1_%JMP* SOR2_)AND END OF VALUE_4MSOS4.1_^1_%SAM 2_,RESEARCH_