PSYSDAT CSY/ P€1_%NAM SYSDAT_'CYBERDATA SUMMARY REL 3.0_,04/28/76_^1*_$SYSTEM DATA PROGRAM - MSOS 4.3_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.3_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%SPC 10_^1*_*C O M M U N I C A T I O N_!R E G I O N_^1*_]_^1*_]_^1_%EXT FNR_*FIND NEXT REQUEST_^1_%EXT COMPRQ_'COMPLETE REQUEST_^1€€_%EXT REQXT_(REQUEST EXIT_^1_%EXT VOLR_)VOLATILE RELEASE_^1_%EXT VOLA_)VOLATILE ASSIGNMENT_^1_%EXT LUABS_(LOGICAL UNIT ABSOLUTIZING_^1_%EXT SABS_)STARTING ADDRESS ABSOLUTIZING_^1_%EXT CABS_)COMPLETION ADDRESS ABSOLUTIZING_^1_%EXT NABS_)NUMBER OF WORDS ABSOLUTIZING_^1_%EXT DISPXX_'DISPATCHER_^1_%EXT MONI_)MONITOR_^1_%EXT MSIZV4_'HIGHEST CORE LOCATION USED BY SYSTEM_^1_%EXT€€ IPROC_(INTERNAL INTERRUPT PROCESSOR_^1_%EXT ALLIN_(COMMON INTERRUPT HANDLER_^1_%EXT VLINT_(CYBERDATA COM SET_^1_%EXT EST_*EXTENDED STATUS TABLE_^1_%EXT MASKT_(INTERRUPT MASK TABLE IN SYSDT2_^1_%EXT LSTDEV_'STANDARD LIST UNIT (SYSDT2)_^1_%EJT_]_^1*_*C O M M U N I C A T I O N_!R E G I O N_^1*_]_^1_%ENT SYSDAT_^1_%EQU SYSDAT(0)_^1_%ORG 1_,LOCATION 0 SET TO $18FF BY SYSTEM I€€NITIALIZER_^1_%JMP- 1_^1*_]_^1LPMSK NUM 0_,LOGICAL PRODUCT MASK TABLE OF ONES_^1ONE_"NUM 1_/ONE_^1THREE NUM 3_/THREE_^1SEVEN NUM 7_/SEVEN_^1_%NUM $F_^1_%NUM $1F_^1_%NUM $3F_^1_%NUM $7F_^1_%NUM $FF_^1_%NUM $1FF_^1_%NUM $3FF_^1_%NUM $7FF_^1_%NUM $FFF_^1_%NUM $1FFF_^1_%NUM $3FFF_^1_%NUM $7FFF_^1*_]_^1NZERO NUM $FFFF_(LOGICAL PRODUCT MASK TABLE OF ZEROS (NEG ZERO)_€€^1_%NUM $FFFE_^1_%NUM $FFFC_^1_%NUM $FFF8_^1_%NUM $FFF0_^1_%NUM $FFE0_^1_%NUM $FFC0_^1_%NUM $FF80_^1_%NUM $FF00_^1_%NUM $FE00_^1_%NUM $FC00_^1_%NUM $F800_^1_%NUM $F000_^1_%NUM $E000_^1_%NUM $C000_^1_%NUM $8000_^1_%EJT_]_^1*_*C O M M U N I C A T I O N_!R E G I O N_^1*_]_^1ZERO_!NUM 0_/ZERO_^1*_]_^1ONEBIT NUM 1_,ONE BIT TABLE_^1TWO_"NUM 2_/TWO_^1FOUR_!NUM 4_/FOUR_^€€1EIGHT NUM 8_/EIGHT_^1_%NUM $10_^1_%NUM $20_^1_%NUM $40_^1_%NUM $80_^1_%NUM $100_^1_%NUM $200_^1_%NUM $400_^1_%NUM $800_^1_%NUM $1000_^1_%NUM $2000_^1_%NUM $4000_^1_%NUM $8000_^1*_]_^1ZROBIT NUM $FFFE_(ZERO BIT TABLE_^1_%NUM $FFFD_^1_%NUM $FFFB_^1_%NUM $FFF7_^1_%NUM $FFEF_^1_%NUM $FFDF_^1_%NUM $FFBF_^1_%NUM $FF7F_^1_%NUM $FEFF_^1_%NUM $FDFF_^1_%NUM $FBFF_^1€€_%NUM $F7FF_^1_%NUM $EFFF_^1_%NUM $DFFF_^1_%NUM $BFFF_^1_%NUM $7FFF_^1*_]_^1FIVE_!NUM 5_/FIVE_^1SIX_"NUM 6_/SIX_^1NINE_!NUM 9_/NINE_^1TEN_"NUM 10_.TEN_^1_%EJT_]_^1*_*C O M M U N I C A T I O N_!R E G I O N_^1*_]_^1*_1PROCESS REGION (LOCATIONS $47 THRU $B2 INCLUSIVE)_^1*_$CYBERDATA SYSTEM STATUS TABLE_^1*_]_^1_%ORG $47_^1_%EXT TIMEF,INPBL,ATTL_^1EXTSST ADC EST_4EXTEND STA€€TUS TABLE_^1SLOCK ADC 0_6SYSTEM LOCKS_^1TMFCT ADC TIMEF_2TIME IN CORE MULTIPLICATION FACTOR_^1PRDA_!ADC 0_6PROGRAM DIRECTORY (CORE)_^1TOPCRT NUM $FFFF_2TOP OF THREAD FOR CRT_^1TOPSCN NUM $FFFF_2TOP OF THREAD FOR SELF SCAN_^1FRPLL ADC 0_6DYNAMIC_1: LOWER_^1FRPUL ADC 0_9FORMAT,RECORD,PROGRAMS: UPPER_^1FRPP_!ADC 0_BISYNC+6+2*PRNTBUF)_^1_%NLS_]_^1_%EIF_]_^1_%IFA MIPRO,GT,BSCC6_^1_%IFA MIPRO,LT,BS6PRB_^1_%IFA BSCC6,LT,CMBPRB_^1_%LST_]_^1LFTOVR ADC PRBF+MIPRO+CMSIZ+10_!(BISYNC+6MIPRO>CMBF+2*PRNTBUF)_€€^1LFTOVR ADC BISYNC/2+3+MIPRO+CMSIZ+10_^1_%NLS_]_^1_%EIF_]_^1_%IFA MIPRO,GT,CMBF_^1_%IFA MIPRO,LT,CMBPRB_^1_%LST_]_^1*_8(BISYNC+6+2*PRNTBUF>MIPRO>CMBF+2*PRNTBUF)_^1LFTOVR ADC CMBF+PRBF+MIPRO+CMSIZ+10_^1_%NLS_]_^1_%EIF_]_^1_%IFA CMBF,GT,MIPRO_^1_%LST_]_^1LFTOVR ADC BISYNC+6+MIPRO+CMSIZ+10_$(CMBF>MIPRO)_^1_%NLS_]_^1_%EIF_]_^1_%LST_]_^1*_]_^1_(ENT_$BGCORE_^1BGCORE NUM $F00_)AMO€€UNT OF CORE REQUESTED_^1*_8FOR BACKGROUND OPERATION_^1*_8MODIFIED BY BGOP_^1*_8'XXXX'_^1*_]_^1_%ENT VLBCKG_^1VLBCKG NUM_!-1_*CYBERDATA/BACKGROUND FLAG_!DEFAULT-NONE_^1*_8VLCBKG.LT.0 = NO BACK GROUND.(I.E ALL_^1*_FAVAILABLE CORE WILL BE TAKEN_^1*_FFOR CYBERDATA_^1*_D'XXXX,NONE'_^1*_8VLBCKG.EQ.0 = BACK GROUND OPERATION IF_^1*_FPOSSIBLE.(I.E. AREA LEFT BY_^1*_FCYBERDATA WILL BE SET F€€OR_^1*_FBACKGROUND)_^1*_D'XXXX,RQST'_^1*_8VLBCKG.GT.0 =BACKGROUND OPERATION IS A_^1*_FMUST.(I.E. CYBERDATA OPERATION_^1*_FWILL NOT START IF AVAILABLE_^1*_FCORE UNDER JP AREA 3 IS NOT_^1*_FSUFFICIENT)_^1*_D'XXXX,MUST'_^1_%EJT_]_^1_%ENT TOTAVL_^1TOTAVL BZS TOTAVL_'TOTAL AVAILABLE CORE FOR CYBERDATA_^1*_8TOTAVL = ALL CORE FOR ALL LEVELS_^1*_8BELOW CYBERDATA LEVEL. (INCLUDING UNPRO€€TECTED_^1*_8NOTE:1. VALUE SET BY RESTART_^1*_=AN AREA IS ALWAYS LEFT OVER_^1*_@FOR DEBUG OR SYSCOP USE._^1*_]_^1_(ENT_$VLA5S_^1_%EXT VLASTD_^1VLA5S ADC VLASTD_'AMOUNT OF MEMORY FOR AREA 5, WHEN 06*C1320_^1*_8CYBERDATA STANDARD OPTION IS_$06*C1320_^1*_8SELECTED_906*C1320_^1*_$NOTE:_!VLASTD MUST BE SET AT INSTALLATION TIME_$06*C1320_^1*_]_^1_(ENT_$VLA5_^1VLA5_#NUM_$0_0CURRENT LENG€LTH OF AREA 5 AS SELECTED_^1*_BBY START UP PROCEDURE (RESTART)_^1_%END_]_^__LPBOOT CSY/ [ZP€1_%NAM BOOT_*VERSION 2.00_95/15/75_^1MESS_!MAC Y,Z,X1,X2,X3,X4,X5,X6,X7,X8_^1_%NLS_]_^1*_8X IS A STRING OF ALPHANUM CHARS_^1*_8Y IS * FOR ONE WORD RELATIVE RTJ_^1*_8Z=0 FOR NORMAL MESSAGE_^1*_8Z=1 FOR NO MESSAGE TERMINATOR_^1*_8Z=2 FOR MESSAGE + TERMINATOR ONLY_^1_%LST_]_^1_%IFC 'Z',NE,2_^1_%RTJ'Y' OUTMSG_^1_%ALF *,:R:L:R:B*_^1_%EIF_]_^1_%ALF *,'X1' 'X2' 'X3' 'X4' 'X5' 'X6' 'X€€7' 'X8'*_^1_%IFC 'Z',NE,1_^1_%NUM 0_,MSG TERMINATOR_^1_%EIF_]_^1_%EMC_]_^1_%EJT_]_^1_%ENT BOOT_^1BOOT_!RTJ- ($F4)_^1_%ADC $C00,0,0,$1004,LMSG,MSG_^1_%RTJ* WAIT_^1REDPRM RTJ- ($F4)_(FREAD 1 WORD (CR OR 'P')_^1_%ADC $801,0,0,$1004,1,CR_^1_%RTJ* WAIT_^1_%LDA- 0_^1CR_#NUM 0_,INPUT CR OR 'P'_^1_%EOR =N$50FF_%TEST FOR POSSIBLE 'P'_^1_%SAN 2_^1_%RTJ CHNGPU_^1_%LDQ* N382_^1_%LDA€€ USEL7_^1_%OUT ERROR-*_^1_%ENA 0_^1_%INP ERROR-*_%INPUT DIRECTOR STATUS 2_^1_%SAN 1_^1_%JMP* ERROR_(NO STATUS RECEIVED._^1_%ALS 12_+7T BIT TO BIT 15_^1_%SAP LOAD9_^1LOAD7 ENA $37_*7 TRACK MESSAGE_^1_%RTJ TRKMSG_^1_%ENQ LBOOT7-1_$LENGTH OF BOOT7_^1MOVE7 LDA* BOOT7,Q_%GET FIRST/NEXT BOOT7 WORD_^1_%INQ -1_^1_%STA- 1,Q_*MOVE BOOT7 WORD_^1_%SQM DONE_^1_%JMP* MOVE7_(RETURN €€TO MOVE NEXT WORD_^1LOAD9 ENA $39_*9 TRACK MESSAGE_^1_%RTJ TRKMSG_^1_%ENQ LBOOT9-1_$LENGTH OF BOOT9_^1MOVE9 LDA* BOOT9,Q_%GET FIRST/NEXT BOOT9 WORD_^1_%INQ -1_^1_%STA- 1,Q_*MOVE BOOT9 WORD_^1_%SQM DONE_^1_%JMP* MOVE9_(RETURN TO MOVE NEXT WORD_^1_%EJT_]_^1_%SPC 1_^1DONE_!RTJ OUTMSG_^1_%ALF *, IS LOADED*_^1_%ALF *,:R:LMOUNT TAPE ON UNIT ZERO*_^1_%ALF *,:R:LCHANGE DISK PAC€€S IF NECESSARY:R:L*_^1_%MESS ,2,TYPE,CR,TO,EXECUTE,BOOTSTRAP_^1Z1_#EQU Z1(*-1)_^1_%RTJ INPMSG_^1_%JMP* (Z1)_)EXECUTE BOOTSTRAP_^1_%EJT_]_^1BOOT9 EQU BOOT9(*)_^1START9 LDA* N44C_^1_%LDQ* N382_^1_%OUT -1_+CONNECT TO TAPE UNIT_^1_%INQ 1_^1_%ENA FWAM1-BOOT9_!ADDRESS OF FWA-1 OF BUFFER_^1_%OUT -1_^1_%INQ -2_^1_%LDA* N100_)READ MOTION_^1_%OUT -1_^1STATUS ENA 0_^1_%INP -1_+INPU€€T STATUS_^1_%ALS 11_+EOP (BIT 4) TO BIT 15_^1_%SAM BUFF_)IS IT EOP-_^1_%JMP* STATUS_'NO, WAIT._^1N100_!NUM $100_)READ MOTION_^1N382_!NUM $382_)EQUIPMENT CODE_^1N44C_!NUM $44C_)UNIT SELECT, 800 BPI, ASSY/D-ASSY, BINARY_^1FWAM1 ADC LWA+1_(FWA-1 OF BUFFER - CONTAINS LWA+1 OF BUFFER_^1BUFF_!EQU BUFF(*)_%BUFFER START_^1_%SPC 1_^1_%EQU LWA(BUFF+95-BOOT9) BUFFER END_^1_%SPC 1_^€€1LBOOT9 EQU LBOOT9(*-BOOT9)_^1_%EJT_]_^1WAIT NOP_]_^1_%ENQ -5_^1_%LDA* (WAIT),Q_$THREAD WORD_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* (WAIT)_^1_%SPC 1_^1ERROR NOP 0_^1_%RTJ- ($F4)_(FWRITE UNIT WON'T CONNECT_^1_%ADC $C00,0,0,$1004,LMSG2,MSG2_^1_%RTJ* WAIT_^1_%JMP REDPRM_^1_%EJT_]_^1BOOT7 EQU BOOT7(*)_^1_%LDA* USEL7_^1_%LDQ* EQUIP7_^1_%OUT -1_+SELECT UNIT 0, 800 BPI, BINARY_^1_%€€INQ -1_^1LOOPM7 LDA* RMOTN7_^1_%OUT -1_+START READ MOTION_^1_%INQ -1_^1_%CLR A_^1LOOP7 INP REJ1-*_'INPUT FRAME (6 BITS)_^1_%RTJ* ROUT1_^1_%ALS 4_^1_%SPA* (HOLD7)_^1_%INP -1_,INPUT FRAME (6 BITS)_^1_%TRA M_,SAVE IT_^1_%ARS 2_^1_%EOR* (HOLD7)_^1_%SPA* (HOLD7)_%1ST WORD 6,6,4_^1_%RAO* HOLD7_^1_%ENA 3_^1_%LAM A_,RECOVER LAST 2 BITS (FOR 15,14)_^1_%RTJ* ROUT1_^1_%RTJ* ROUT1_^€€1_%ALS 2_^1_%SPA* (HOLD7)_^1_%INP -1_+INPUT FRAME (6 BITS)_^1_%TRA M_,SAVE IT_^1_%ARS 4_-GET FIRST 2 BITS (FOR 1,0)_^1_%EOR* (HOLD7)_^1_%SPA* (HOLD7)_%2ND WORD 2,6,6,2_^1_%RAO* HOLD7_^1_%ENA $F_^1_%LAM A_,GET LAST 4 BITS (FOR 15-12)_^1_%RTJ* ROUT1_^1_%RTJ* ROUT1_^1_%SPA* (HOLD7)_%3RD WORD 4,6,6_^1_%RAO* HOLD7_^1_%JMP* LOOP7-1_%RETURN FOR NEXT 8 FRAMES_^1ROUT1 NOP 0_^1_%ALS €€6_^1_%SPA* (HOLD7)_^1LOOP1 INP -1_+INPUT FRAME_^1_%EOR* (HOLD7)_^1_%JMP* (ROUT1)_^1_%EJT_]_^1REJ1_!NOP_]_^1_%INQ 1_^1_%INP -1_+GET DIRECTOR STATUS 1_^1_%ALS 11_+EOP TO BIT 15_^1_%SAM BUFF7_(END OF OPERATION?_^1_%JMP* LOOP7-2_%NOT EOP_^1_%SPC 2_^1USEL7 NUM $40C_)UNIT 0, 800BPI, BINARY_^1RMOTN7 NUM $100_)READ MOTION_^1EQUIP7 NUM $382_)EQUIP NO. + D2_^1HOLD7 ADC BUFF7-BOO€€T7_!POINTER TO BUFFER AREA_^1_%SPC 2_^1_%EQU BUFF7(*)_$BUFFER START_^1_%SPC 2_^1LBOOT7 EQU LBOOT7(*-BOOT7)_^1_%EJT_]_^1TRKMSG NOP_]_^1_%IIN 0_,STOP_^1_%CLR M_0INTERRUPTS_^1_%ALS 8_^1_%INA $20_^1_%STA* TMSG_^1TMSG_!EQU TMSG(*+4)_^1_%MESS ,,,,,TRACK,,BOOTSTRAP_^1_%LDQ- $2F_*$1000_^1_%ENA 0_^1ZERLOW INQ -1_^1_%STA- 1,Q_*ZERO CORE TO $1000_^1_%SQM 1_^1_%JMP* ZERLOW_^1_%JMP*€€ (TRKMSG)_^1_%EJT_]_^1WAIT1 ADC WAIT_^1_%SPC 5_^1CHNGPU NOP 0_,CHANGE PHYSICAL UNIT_^1P_$RTJ- ($F4)_(WHICH PHYSICAL UNIT?_^1_%ADC $C00,0,0,$1004,LMSG10,MSG10_^1_%RTJ* (WAIT1)_^1_%RTJ INPMSG_^1_%INA -$30_^1_%SAP 1_^1_%JMP* P_^1_%INA -4_^1_%SAM 1_^1_%JMP* P_^1_%INA 4_,0 - 3_^1_%ALS 7_,TO BITS 7,8_^1_%ADD =X$40C_^1_%STA* USEL7_(7 TRACK_^1_%INA $40_^1_%STA N44C_)9 TRACK_€€^1_%JMP* (CHNGPU)_$RETURN_^1_%EJT_]_^1_%EJT_]_^1OUTMSG NOP_]_^1_%RTJ* CONECT_^1_%NUM $102_(WRITE REQUEST_^1OUTLOP LDA* (OUTMSG)_^1_%RAO* OUTMSG_^1_%SAZ XOUT_^1_%ALS 8_^1_%NOP_]_^1_%OUT -1_+LEFT BYTE_^1_%ALS 8_^1_%NOP_]_^1_%OUT -1_+RIGHT BYTE_^1_%JMP* OUTLOP_^1XOUT_!JMP* (OUTMSG)_^1_%SPC 5_^1CONECT NUM 0_^1_%LDQ =N$91_(EQPT CODE, DIR FCTN_^1_%INP -1_^1_%ALS 14_^1_%SAP 1_€€^1_%JMP* *-3_^1_%LDA* (CONECT)_$102 OR 202_^1_%OUT -1_^1_%INQ -1_+SET Q FOR I/O_^1_%RAO* CONECT_^1_%JMP* (CONECT)_^1_%SPC 10_^1INPMSG NOP_]_^1_%RTJ* CONECT_^1_%NUM $203_)READ_^1_%ENA 0_^1_%INP -1_^1_%AND* MASK7F_^1_%JMP* (INPMSG)_^1MASK7F NUM $7F_^1_%EJT_]_^1MSG_"ALF *,BOOT VERSION 2:R*_^1_%ALF *,:RA ROUTINE TO LOAD A BOOTSTRAP INTO CORE *_^1_%ALF *,AT LOCATION ZERO.:R*€_^1_%ALF *,:RTURN OFF PROGRAM PROTECT, TYPE CR.:R*_^1_%EQU LMSG(*-MSG)_^1MSG10 ALF *,WHICH PHYSICAL UNIT?*_^1_%EQU LMSG10(*-MSG10)_^1MSG2_!ALF *,UNIT WON'T CONNECT.*_^1_%ALF *,:RTYPE CR TO START OVER.*_^1_%EQU LMSG2(*-MSG2)_^1_%SPC 2_^1_%END BOOT_^__PPIC CSY/ P€1_%NAM PIC_+VERSION 2.00_:5/5/75_^1_%ENT_!PIC_^1_%SPC 5_^1_%SPC_!2_^1NEW_"ALF_!=,EN*Z*E*R*U*D*I*C=_^1_%ALF =,*L*K=_^1_%ALF ',*X*B'_^1_%EQU NBR(*-NEW)_^1_%SPC_!2_^1CBUF_!BZS CBUF(6)_^1_%SPC_!3_^1WORK_!ALF 6,_%DCK/_^1_%SPC 2_^1STAR_!ADC ENDCRD_'Q=0 EN_^1_%ADC DISP_)Q=1 *Z_^1_%ADC TAPMO_(Q=2 *E_^1_%ADC TAPMO_(Q=3 *R_^1_%ADC TAPMO_(Q=4 *U_^1_%ADC DRCTNS_'Q=5 *D_^1_%ADC IN€€SERT_'Q=6 *I_^1_%ADC CPY_*Q=7 *C_^1_%ADC KWKLST_'Q=8 *L_^1_%ADC CHNGIO_'Q=9 *K_^1_%ADC FINISH_'Q=10 *X_^1_%ADC BSIO_)Q=11 *B_^1_%EJT_]_^1PIC_"RTJ- ($F4)_(FWRITE 'PIC VERSION .. DIRECTIONS'_^1_%ADC $C01,0,0,$1004,EMSG3,MESS3_^1_%RTJ* WAIT_^1_%RTJ- ($F4)_(PAGE EJECT_^1_%ADC $5C00,0,0_^1LSTOT3 NUM $8FB,$A001_^1PICC_!RTJ- ($F4)_(FWRITE 'MODULE NAME'_^1_%ADC $C01,0,0,$1004,LMSG€€1,MESS1_^1_%RTJ* WAIT_^1READ8 LDA* NEW+1_4*Z_!DEFAULT_^1_%STA* CBUF_^1_%SET A_^1_%STA* CBUF+1_^1_%STA* CBUF+2_^1_%STA* CBUF+3_^1_%RTJ- ($F4)_(READ MODULE NAME_^1_%ADC $801,0,0,$1004,4,CBUF_^1_%RTJ* WAIT_^1_%EJT_]_^1_%ENQ NBR-1_^1CONTRL LDA* CBUF_^1_%EOR* NEW,Q_^1_%SAZ_!GOTCHA_^1_%INQ_!-1_^1_%SQM ANYSTR_^1_%JMP* CONTRL_^1GOTCHA LDA* STAR,Q_^1_%STA- I_^1_%JMP- (I)_^1ANYSTR€€ LDA* CBUF_^1_%ARS 8_^1_%INA -$2A_^1_%SAN NEXT_)SKIP IF NOT '*'_^1_%RTJ- ($F4)_(FWRITE 'UNRECOGNIZED INSTRUCTION'_^1_%ADC $C01,0,0,$1004,LMSG7,MSG7_^1_%JMP* PICC_^1_%EJT_]_^1ENDCRD LDA* CBUF+1_^1_%EOR_!=AD/_^1_%SAN_!NEXT_^1_%JMP* EN_^1NEXT_!ENQ_!2_^1_%LDA* CBUF,Q_^1_%SAP TESTRT_'SKIP IF FIRST CHAR IS OK_^1_%AND* M20FF_(MAKE FIRST CHAR A SPACE_^1TESTRT ALS 8_,REVERSE BYTES_€€^1_%SAP OK_+SKIP IF 2ND CHAR IS OK_^1_%AND- 0_,MAKE SECOND CHAR A SPACE_^1M20FF NUM $20FF_(MASK_^1OK_#ALS 8_,UN-REVERSE BYTES_^1_%STA* WORK,Q_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* NEXT+1_^1_%LDA* FLAG_^1_%SAN ON1_^1_%RTJ TREAD_^1_%RAO* FLAG_^1ON1_"LDA* CPYFLG_^1_%SAZ_!THRU_)SKIP IF *COPY THRU_^1_%RTJ* COMPAR_^1_%JMP* COPY_.MATCH_^1_%RTJ* TREAD_-NO MATCH_^1_%JMP* ON1_^1_%SPC €€1_^1COPY_!RTJ_!TWRITE_^1_%RTJ* TREAD_^1THRU_!RTJ* DOMPAR_^1_%JMP* COPY_.NO DCK/ CARD_^1DCKCRD LDA* CPYFLG_^1_%SAN_!NORMAL_^1_%RTJ* COMPAR_^1_%RAO* CPYFLG_+MATCH_^1_%JMP* COPY_-NO MATCH_^1NORMAL JMP* PICC_^1_%SPC 2_^1CPY_"ENA 0_^1_%STA* CPYFLG_'SET TO 0 FOR COPY-THRU_^1_%RTJ- ($F4)_(FWRITE '*COPY THRU ...'_^1_%ADC $C01,0,0,$1004,LMSG6,MSG6_^1_%JMP* READ8_^1_%EJT_]_^1DOMPAR N€€UM 0_^1_%ENQ_!2_^1_%LDA_!BUFF+3,Q_^1_%EOR* WORK+3,Q_^1_%SAN_!NODCK_^1_%INQ_!-1_^1_%SQM_!DCK_^1_%JMP* DOMPAR+2_^1DCK_"RAO* DOMPAR_^1NODCK JMP* (DOMPAR)_^1_%SPC 1_^1COMPAR NUM 0_^1CET_"ENQ 5_^1_%LDA BUFF,Q_^1_%EOR WORK,Q_^1_%SAN NOMAT_^1_%INQ -1_^1_%SQM MAT_^1_%JMP* CET+1_^1NOMAT RAO* COMPAR_^1MAT_"JMP* (COMPAR)_^1_%SPC 1_^1CPYFLG NUM 1_,0 IS *COPY THRU_^1FLAG_!NUM 0_€€^1_%SPC 1_^1WAIT_!NOP 0_,MUST BE CALLED WITH 1-WORD INSTRUCTION_^1_%ENQ -5_+LOOP ON_^1_%LDA* (WAIT),Q_$THREAD WORD_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* (WAIT)_^1_%SPC 1_^1EN_#ENQ_!39_^1_%LDA_!ENBUF,Q_^1_%STA_!BUFF,Q_^1_%INQ_!-1_^1_%SQM_!1_^1_%JMP* EN+1_^1_%RTJ TWRITE_^1_%LDA* FLAG_^1_%SAZ_!XEN_^1_%RTJ_!BSRINP_^1XEN_"JMP PICC_^1_%EJT_]_^1INSERT RTJ- ($F4)_(FWRITE 'INSERT 80 CHAR€€ RESORDS'_^1_%ADC $C01,0,0,$1004,LMSG4,MSG4_^1READ_!SET_!A_^1_%STA BUFF_^1_%LDA =A_^1_%ENQ 38_^1RDLOOP STA BUFF+1,Q_$FILL BUFFER WITH BLANKS_^1_%INQ -1_^1_%SQM 1_^1_%JMP* RDLOOP_^1_%RTJ- ($F4)_(FREAD 80 CHARS TO BUFF_^1_%ADC $801,0,0,$1004,41,BUFF_^1_%RTJ* WAIT_^1_%LDA* FLAG_^1_%SAZ_!1_^1_%RTJ BSRINP_^1_%LDA BUFF_^1_%SAP_!INS_^1_%JMP_!PICC_^1INS_"RTJ TWRITE_^1_%RTJ- ($€€F4)_(FWRITE 'BELLS'_^1_%ADC $C01,0,0,$1004,1,MSG5_^1_%JMP* READ_^1_%EJT_]_^1TREAD NUM 0_^1_%LDA* WRTFLG_^1_%SAZ_!1_^1_%JMP* *-2_,WAIT FOR BUFFER TO BE PRINTED._^1_%RTJ- ($F4)_(FREAD TAPE RECORD INTO BUFFER_^1_%ADC $801,0,0_^1TAPIN1 ADC $18F9,100,BUFF_^1_%RTJ* WAIT_^1_%SPC_#2_^1NRDD_!ENQ_!2_^1_%LDA BUFF+3,Q_^1_%EOR_!ENBUF+3,Q_^1_%SAN_!NOEND_^1_%INQ_!-1_^1_%SQM_!EOF_^1_%JMP€€* NRDD+1_^1NOEND JMP* (TREAD)_^1EOF_"RTJ- ($F4)_(FWRITE 'END/ CARD FOUND, TYPE CR/*R'_^1_%ADC $C01,0,0,$1004,LMESS2,MESS2_^1_%RTJ* WAIT_^1_%SET A_^1_%STA* CNT_^1_%RTJ- ($F4)_(FREAD FROM TTY 'CR' OR '*R'_^1_%ADC $801,0,0,$1004,2,CNT_^1_%RTJ* WAIT_^1_%LDA* CNT_^1_%SAP R_^1_%JMP* (TREAD)_^1CNT_"NUM 0,0_*CR/*R BUFFER_^1R_$SUB =A*R_^1_%SAZ 1_^1_%JMP* EOF_*ERROR_^1_%STA* FLAG_^1€€_%RAO CPYFLG_'END $COPY OPTION IF REWIND_^1_%RTJ- ($F4)_(MOTION - REWIND INPUT TAPE_^1_%ADC $1C00,0,0_^1TAPIN2 ADC $18F9_^1MOTIN1 ADC $3000_^1_*JMP PICC_^1_%SPC_!5_^1WRTFLG NUM_!0_^1_%SPC_!1_^1COMP2 CLR_!A_^1_%STA* WRTFLG_)ALLOW TAPE READ_^1DISP_!JMP- ($EA)_^1_%SPC 10_^1DRCTNS RTJ- ($F4)_(FWRITE 'DIRECTIONS'_^1_%ADC $C01,0,0,$18FB,LDIR,DIR_^1_%RTJ* (WAIT1)_^1_%JMP PICC_^1€€_%SPC 5_^1TAPMO QLS 12_^1_%STQ* MOTN_^1_%RTJ- ($F4)_(OUTPUT TAPE MOTION_^1_%ADC $1C00,0,0_^1TAPOT1 NUM $18FA_^1MOTN_!NUM $8000_^1_%JMP PICC_^1_%EJT_]_^1_%EJT_]_^1CHNGIO RTJ- ($F4)_(FWRITE 'INP UNIT'_^1_%ADC $C01,0,0,$1004,LCHNG1,CHNG1_^1_%RTJ* (WAIT1)_^1_%RTJ* INPAB_^1_%SAM COUT_^1_%RTJ* LUTST_^1_%ADD- $2F_*+$1000_^1_%STA* TAPIN1_^1_%STA* TAPIN2_^1_%STA* TAPIN3_^1COUT_!RTJ€€- ($F4)_(FWRITE 'OUT UNIT'_^1_%ADC $C01,0,0,$1004,LCHNG2,CHNG2_^1_%RTJ* (WAIT1)_^1_%RTJ* INPAB_^1_%SAM CLST_^1_%RTJ* LUTST_^1_%ADD- $2F_*+$1000_^1_%STA TAPOT1_^1_%STA* TAPOT2_^1CLST_!RTJ- ($F4)_(FWRITE 'LST DEV'_^1_%ADC $C01,0,0,$1004,LCHNG3,CHNG3_^1_%RTJ* (WAIT1)_^1_%RTJ* INPAB_^1_%SAM CEND_^1_%RTJ* LUTST_^1_%ADD- $2F_^1_%STA* LSTOT_^1_%STA LSTOT2_^1_%STA LSTOT3_^1_%STA LS€€TOT4_^1CEND_!JMP PICC_^1_%EJT_]_^1INPAB NOP 0_,INP TTY, OUT BINARY IN A_^1_%ENA -0_^1_%STA* INPBF_^1_%RTJ- ($F4)_(FREAD 2 CHAR_^1_%ADC $801,0,0,$1004,2,INPBF_^1_%RTJ* (WAIT1)_^1_%ENA 0_^1_%STA* INPBF+1_^1_%LDA* INPBF_^1_%SAP 1_^1_%JMP* (INPAB)_%CR_^1_%ALS 8_^1_%SAM ONECHR_^1_%RTJ* ASCBIN_^1_%MUI- $46_*X 10_^1_%STA* INPBF+1_^1_%LDA* INPBF_^1ONECHR RTJ* ASCBIN_^1_%ADD* INPBF€€+1_^1_%JMP* (INPAB)_^1INPBF NUM 0,0_^1_%SPC 3_^1LUTST NOP 0_^1_%INA -20_^1_%SAP ERRBIN_'SKIP IF .GT. 20_^1_%INA 20_^1_%JMP* (LUTST)_^1ERRBIN RTJ- ($F4)_(FWRITE 'ILLEGAL LU'_^1_%ADC $C01,0,0,$1004,LMSG8,MSG8_^1_%ENQ -11_^1_%JMP* (LUTST),Q_^1_%SPC 2_^1ASCBIN NOP 0_,ASCII INPUT IN A, BINARY OUT IN A_^1_%AND- $9_^1_%INA -$3A_^1_%SAM 1_^1_%INA $3A-$41_^1_%INA 10_^1_%JMP*€€ (ASCBIN)_^1_%EJT_]_^1WAIT1 ADC WAIT_^1_%SPC 5_^1TWRITE NUM 0_^1_%RAO* WRTFLG_)STOP NEXT TAPE READ._^1_%RTJ- ($F4)_(FWRITE BUFFER TO LIST DEVICE_^1_%ADC $C01,COMP2,0_^1LSTOT ADC $18FB,40,BUFF_^1_%RTJ- ($F4)_(FWRITE BUFFER TO OUTPUT TAPE_^1_%ADC $C01,0,0_^1TAPOT2 ADC $18FA,40,BUFF_^1_%RTJ* (WAIT1)_^1NWTT_!JMP* (TWRITE)_^1_%SPC_!5_^1BSRINP NUM_!0_^1_%CLR_!A_^1_%STA_!FLAG_^€€1_%RTJ- ($F4)_(BCKSPC INPUT TAPE 1 RECORD_^1_%ADC $1C00,0,0_^1TAPIN3 ADC $18F9,$1000_^1_%JMP* (BSRINP)_^1_%SPC_!5_^1BUFF_!BZS_!BUFF(100)_^1_%EJT_]_^1FINISH LDA =XFINRET-XEN-1_^1_%STA XEN+1_(SET UP RETURN_^1_%JMP EN_^1_%SPC 1_^1FINRET RTJ- ($F4)_'PAGE EJECT_^1_%ADC $5C00,0,0_^1LSTOT4 NUM $8FB,$A001_^1_%LDA =N$4000_%*UNL INP TAPE_^1_%STA* TAPIN3+1_^1_%RTJ* BSRINP_^1_%LDQ =€€N$4002_%SET UP *EOF, *UNL ON OUTPUT TAPE_^1_%LDA =N$14EA_^1_%STA MOTN+1_^1_%JMP TAPMO_(*EOF, *UNL OUTPUT UNIT_^1_%SPC 5_^1WAIT2 ADC WAIT_^1INPAB1 ADC INPAB_^1PICC1 ADC PICC_^1_%EJT_]_^1BSIO_!RTJ- ($F4)_(FWRITE 'LU='_^1_%ADC $C01,0,0,$1004,LMSG9,MSG9_^1_%RTJ* (WAIT2)_^1_%RTJ* (INPAB1)_^1_%SAP BSIO1_^1_%JMP* (PICC1)_^1BSIO1 ADD- $2F_*+$1000_^1_%STA* BSLU_)LOGICAL UNIT_^1_€€%RTJ- ($F4)_(FWRITE 'NBR FILES BACK'_^1_%ADC $C01,0,0,$1004,LMSG10,MSG10_^1_%RTJ* (WAIT2)_^1_%RTJ* (INPAB1)_^1_%SAM NOFILE_^1_%SAZ NOFILE_'NO FILES_^1_%STA* BSCNT_(COUNT OF FILES_^1_%ENQ 6+8_*SKIP FILE BACKWARDS_^1_%JMP* BSOUT_^1NOFILE RTJ- ($F4)_(FWRITE 'NBR RECORDS BACK'_^1_%ADC $C01,0,0,$1004,LMSG11,MSG11_^1_%RTJ* (WAIT2)_^1_%RTJ* (INPAB1)_^1_%SAP BSIO2_^1_%SAZ BSIO2_^1_%€€JMP* BSIO_)NO FILES OR RECORDS, RESTART._^1BSIO2 STA* BSCNT_^1_%ENQ 1+8_^1BSOUT QLS 12_^1_%EOR* BSCNT_^1_%STQ* BSCNT_^1_%RTJ- ($F4)_(TAPE MOTION REQUEST_^1_%ADC $1C00,0,0_^1BSLU_!NUM 0_^1BSCNT NUM 0_^1_%JMP* BSIO_)FINISHED, SO RESTART._^1_%EJT_]_^1KWKLST FWRITE 4,0,MSG1,LMS1,A,0,1,,0,0_^1_%LDQ* N382_)UNIT SELECT_^1_%LDA* N44C_^1_%OUT -1_^1_%RTJ* STAT_^1_%SAM_!RDY_^1MSG_"F€€WRITE $FC,0,MSG4X,LMS4,A,0,1,I,0_^1_%RTJ* STAT_^1_%SAM RDY_^1_%JMP* *-2_^1RDY_"RTJ- ($F4)_(FWRITE 'PAGE CTRL CHAR'_^1_%ADC $C01,0,0,$1004,LMSG12,MSG12_^1_%RTJ* (WAIT2)_^1_%RTJ- ($F4)_(FREAD YES OR NO_^1_%ADC $801,P3,0,$1004,1,YN_^1_%RTJ* (WAIT2)_^1_%LDA- 0_^1YN_#NUM 0_,Y OR N_^1_%ARS 8_,1ST CHAR IN LOWER A_^1_%INA -$59_)YES-_^1_%SAN NOTY_^1YES_"STA* MOTCTL_^1_%JMP* TSTFLG_^€€1NOTY_!INA $59-$4E_%NO-_^1_%SAZ NO_^1NOTN_!JMP* (PICC1)_^1NO_#RAO* MOTCTL_^1_%JMP* TSTFLG_^1_%EJT_]_^1STAT_!NOP 0_,STATUS OF PHYSICAL TAPE UNIT 0_^1_%LDQ* N381_^1_%INP -1_^1_%ALS 15_+READY BIT TO BIT 15_^1_%JMP* (STAT)_^1N381_!NUM $381_^1_%SPC 3_^1MOTION NOP 0_^1_%LDA* MOTCTL_^1_%SAZ 1_^1_%JMP* (MOTION)_$NO MOTION_^1_%ENQ 6_^1_%LDQ* (MOTION),Q_"GET BUFFER ADDRESS IN Q_^1€€_%LDA- ($22),Q_%GET FIRST WORD OF BUFFER_^1_%ARS 8_,1ST CHAR OF BUFFER_^1_%INA -$31_^1_%SAZ PAGE_^1_%JMP* (MOTION)_$NO PAGE EJT CHAR_^1PAGE_!ENQ 2_^1_%LDA* (MOTION),Q_"GET COMPLETION ADDRESS_^1_%STA* CMPEJT_^1_%RTJ- ($F4)_(PAGE EJT_^1_%NUM $1C00_^1CMPEJT NUM 0,0_^1LSTOT2 NUM $18FB,$2000_^1_%ENQ 7_^1_%JMP* (MOTION),Q_^1_%SPC 1_^1MOTCTL NUM 0_,0 FOR PAGE EJCT CONTROL CHAR_^€€1_%SPC_!3_^1TAPDRV NOP_!0_^1_%STA* AFWA_^1_%LDQ* N382_^1_%LDA* N44C_^1_%OUT_!-1_^1_%INQ_!1_^1_%LDA* AFWA_^1_%OUT_!-1_^1_%INQ_!-2_^1_%LDA* N100_^1_%OUT_!-1_^1_%JMP* (TAPDRV)_^1_%SPC_!1_^1AFWA_!NUM_!0_^1N100_!NUM_!$100_^1N382_!NUM_!$382_^1N44C_!NUM_!$44C_^1_%EJT_]_^1TSTFLG LDA* FLAG1_^1_%SAN_!1_^1_%JMP* TSTFLG_)BUFF1 FULL_^1_%CLR_!A_.BUFF1 EMPTY_^1_%STA* FLAG1_^1START LDA* €€ POINT1_^1_%RTJ* TAPDRV_^1TEST1 RTJ* STATUS_^1_%JMP* START_*ERROR RETURN_^1_%JMP* TEST1_*BUSY RETURN_^1_%RTJ* MOTION_^1PRINT1 FWRITE $FB,P3,BUFF1,49,A,0,1,I,0_^1_%LDA* FLAG2_^1_%SAN_!1_^1_%JMP* *-2_,BUFF2 FULL_^1_%CLR_!A_.BUFF2 EMPTY_^1_%STA* FLAG2_^1START2 LDA* POINT2_^1_%RTJ* TAPDRV_^1TEST2 RTJ* STATUS_^1_%JMP* START2_)ERROR RETURN_^1_%JMP* TEST2_*BUSY RETURN_^1_%R€€TJ* MOTION_^1PRINT2 FWRITE $FB,P4,BUFF2,49,A,0,1,I,0_^1_%JMP* TSTFLG_^1_%SPC_!3_^1P3_#RAO* FLAG1_*SET BUFF1 EMPTY_^1_%JMP- ($EA)_^1_%SPC_!3_^1P4_#RAO*_!FLAG2_)SET BUFF2 EMPTY_^1_%JMP- ($EA)_^1_%EJT_]_^1FLAG1 NUM_!0_^1FLAG2 NUM 1_,1 FOR BUFFER EMPTY_^1_%SPC_!3_^1POINT1 ADC_!FWA1-1_^1POINT2 ADC_!FWA2-1_^1_%SPC_!3_^1STATUS NOP_!0_^1_%LDQ_!=N$381_^1_%CLR_!A_^1_%INP_!-1_-DIRECTO€€R STATUS 1_^1_%ALS_!4_.FM_^1_%SAP_!NOTEOF_^1_%FWRITE 4,0,MSG2,LMSG2,A,0,1,,0,0_(FILE MARK_^1KWK_"JMP KWKLST_^1NOTEOF ALS_!2_.EOT_^1_%SAP_!NOTEOT_^1EOT_"FWRITE 4,0,MSG3,LMSG3,A,0,1,,0,0_(END OF TAPE_^1_%JMP* KWK_^1NOTEOT_!ALS_!1_,PARITY_^1_%SAM_!RETRY_^1_%ALS_!4_.EOP_^1_%SAP_!BUSY_^1EOP_"RAO* STATUS_)NORMAL EXIT_^1BUSY_!RAO* STATUS_)BUSY EXIT_^1_%JMP* (STATUS)_^1RETRY MOTION€€ $F9,0,1,0,0,0,0,0,I_#BKSPC 1 RECORD_^1_%JMP* (STATUS)_^1_%EJT_]_^1_%ADC_!LWA1+1_^1_%BZS_!FWA1(49)_^1_%EQU_!LWA1(*-1)_^1_%SPC_!2_^1_%ADC_!LWA2+1_^1_%BZS_!FWA2(49)_^1_%EQU_!LWA2(*-1)_^1_%EQU_!BUFF1(FWA1),BUFF2(FWA2)_^1_%EJT_]_^1MSG1_!ALF *,KWKLST WILL COPY PHYSICAL UNIT ZERO *_^1_%ALF *,(STD BIN INP) ONTO LIST UNIT.*_^1_%EQU LMS1(*-MSG1)_^1MSG12 EQU MSG12(*)_^1_%ALF *,:RDO Y€€OU HAVE PAGE CONTROL CHARACTERS ON THE TAPE-*_^1_%ALF *,:RYES/NO RESPONSE WILL START LIST.*_^1_%EQU LMSG12(*-MSG12)_^1_%SPC_!2_^1MSG2_!ALF_!*,FILE MARK :R:B*_^1_%EQU_!LMSG2(*-MSG2)_^1_%SPC_!2_^1MSG3_!ALF_!*,END OF TAPE:R:B*_^1_%EQU_!LMSG3(*-MSG3)_^1MSG4X ALF_!*,:R:BTAPE UNIT NOT READY:B:B*_^1_%EQU LMS4(*-MSG4X)_^1CHNG1 ALF *,INPUT LOGICAL UNIT =*_^1_%EQU LCHNG1(*-CHNG1)_^1CH€€NG2 ALF *,OUTPUT LOGICAL UNIT =*_^1_%EQU LCHNG2(*-CHNG2)_^1CHNG3 ALF *,LIST DEVICE =*_^1_%EQU LCHNG3(*-CHNG3)_^1_%EJT_]_^1ENBUF ALF_!24,_%END/_^1_%ALF_!16,_^1_%EJT_]_^1MESS3 ALF_!=,PIC_*VERSION =_^1_%ALF *,5/5/75*_^1_%ALF_!=,:R:R=_^1_%ALF_!=,FOR DIRECTIONS, TYPE *D:B=_^1_%EQU_!EMSG3(*-MESS3)_^1DIR_"ALF *,:RPIC WILL PICK SELECTED COSY UPDATE MODULES*_^1_%ALF *,:RFROM INPUT€€ TAPE, AND PUNCH THEM ON OUTPUT TAPE,*_^1_%ALF *,:RA LIST OF SELECTED MODULES WILL GO TO STANDARD LIST*_^1_%ALF *, DEVICE.*_^1_%ALF *,:R END/_"WRITES 80 CHAR END/ CARD*_^1_%ALF *, ON OUTPUT TAPE*_^1_%ALF =,:R *EOF_"WRITES A FILE MARK=_^1_%ALF *, ON OUTPUT TAPE*_^1_%ALF =,:R *REW_"REWIND OUTPUT TAPE=_^1_%ALF =,:R *UNL_"UNLOADS OUTPUT TAPE=_^1_%ALF =,:R *INS_"INSERT REC€€ORDS FROM TTY (UNTIL CR)=_^1_%ALF =,:R *COPY_!COPIES MODULES FROM HERE THRU A MODULE NAME=_^1_%ALF =,:R *Z_$TERMINATE PROGRAM (ALSO CR)=_^1_%ALF =,:R *K_$RE-SELECTS TAPE UNITS FROM SYSTEM STANDARD=_^1_%ALF =,:R *LIST_!LISTS INPUT TAPE ON STD LIST DEVICE=_^1_%ALF =,:R *BSR_"BACKSPACE TAPE (INP OR OUT)=_^1_%ALF =,:R *X_$END/, *EOF, *UNL OUT-TAPE, *UNL INP-TAPE=_^1_%ALF =€€,:R XXXXXX 1 TO 6 CHAR MODULE NAME TO 'PICK'=_^1_%ALF *,:R:B*_^1_%EQU_!LDIR(*-DIR)_^1MSG4_!ALF_!=,80 CHAR RECORDS TO BE INSERTED::R:B:R=_^1_%EQU_!LMSG4(*-MSG4)_^1MSG5_!ALF_!=,:B:B=_^1MESS1 ALF *,NEXT:*_^1_%EQU_!LMSG1(*-MESS1)_^1MESS2 ALF *,END/ CARD WAS FOUND.*_^1_%ALF =,:RTYPE *R TO REWIND TAPE.=_^1_%ALF *,:RTYPE CAR-RET TO CONTINUE SEARCH/COPY.*_^1_%EQU LMESS2(*-MESS2)_€€^1MSG6_!ALF *,COPY FROM HERE THRU MODULE NAME:B:*_^1_%EQU_!LMSG6(*-MSG6)_^1MSG7_!ALF *,UNRECOGNIZED INSTRUCTION IGNORED.*_^1_%EQU LMSG7(*-MSG7)_^1MSG8_!ALF *,ILLEGAL LOGICAL UNIT.*_^1_%EQU LMSG8(*-MSG8)_^1MSG9_!ALF *,LOGICAL UNIT =*_^1_%EQU LMSG9(*-MSG9)_^1MSG10 ALF *,NUMBER FILE MARKS BACK =*_^1_%EQU LMSG10(*-MSG10)_^1MSG11 ALF *,NUMBER RECORDS BACK =*_^1_%EQU LMSG11(€*-MSG11)_^1_%END PIC_^__PPAULA CSY/ P€1_%NAM PAULA_^1_%ENT PAULA_^1*_$L,X ALL NAM BLOCKS AND *STATEMENTS INCLUDING X ARE_^1*_*PRINTED ON THE TTY_^1*_]_^1*_$S,X ALL NAM BLOCKS AND *STATEMENTS WILL BE SKIPPED_^1*_*INCLUDING X. ONLY X IS PRINTED OUT_^1*_$T,X TRANSFERS ALL NAM-BLOCKS AND *STATEMENTS TO THE DISK_^1*_]_^1*_$E,X ALL NAM BLOCKS AND *STATEMENTS ARE TRANSFERRED FROM_^1*_*DISK TO OUTPUT-UNIT. THE TRANSFER I€€S FINISHED IF_^1*_*EITHER X OR ALL SECTORS CONTAINING NAM BLOCKS AND_^1*_**STATEMENTS ARE TRANSFERED._^1*_]_^1*_$D,Z SELECT THE START-SECTOR Z= ABSOLUTE SECTOR NUMBER_^1*_]_^1*_$M,YZ TAPE MOTION REQUEST_^1*_*Y = LOGICAL UNIT NUMBER_^1*_*Z = 1 BACKSPACE_^1*_.2 WRITE FILE MARK_^1*_.3 REWIND_^1*_.4 REWIND AND UNLOAD_^1*_.5 SKIP ONE FILE FORWARD ONLY FOR 608/609_^1*_.6 SKIP ONE FILE B€€ACKWARD ONLY FOR 608/609_^1*_]_^1*_$C,XY CHANGE LOGICAL UNIT NUMBER_^1*_*X = I INPUT UNIT_^1*_.P OUTPUT-UNIT_^1*_*Y = UNIT NUMBER_^1*_]_^1*_$I,_!INSERT ONE *STATEMENT (*K,I8)_^1*_]_^1*_$A,_!JUMP TO JOBPROCESSOR_^1*_]_^1*_$SI_!READ THE SYSTEM INITIALIZER IN_^1*_*THE SI MUST BE ABS ON DISK WITH LIB =*N,SYSINT,,,B_^1*_*THE SI MUST BE ABS ON DISK WITH LIB =*N,SYSINT,,,B_^1*_]_^1*_$R,_!€€REPEAT E_^1*_]_^1*_$W,_!REPLACE ONE PROGRAM_^1*_$THE DEVICE WHICH CONTAINS THE OLD INST. SYSTEM IS SPEC. WITH *K,P_^1*_$THE DEVICE WHICH CONTAINS THE NEW PROGRAM IS SPEC. BY *K,IX_^1*_$THIS ROUTINE ALLOWS CHAINING OF PROGRAM NAMES WHICH ARE SEPARATED_^1*_$THROUGH COMMAS._^1*_$OTHERPROGRAMS AS SPECIFIED WILL BE IGNORED WITHOUT COMMENT_^1*_$IF THE INPUT NAME DOES NOT EXIST IN THE SYS€€TEM THE TAPE SEARCHES_^1*_$ENDTAP (LAST PROGRAM NAME IN THE SYSTEM) AND REWINDS._^1*_$AN ERROR MESSAGE IS TYPED OUT , THE TAPE SKIPS TO THE LAST CORREC_^1*_$PROGRAM_^1OMES1 ALF 3,PAULA_^1_%ALF 10,FIRST SECTOR IS_^1OMES2 ALF 2,-IN-_^1OMES3 ALF 12,ILLEGAL INPUT STATEMENT_^1OMES4 NUM $0D0A_^1_%ALF 10, OUTPUT UNIT IS_^1_%NUM $0D0A_^1OMES5 ALF 10,TYPE IN OK OR PX X=_^1_%AL€€F 6,NEW LU NUMBER_^1OMES6 ALF 11,DISK TO TAPE IS FINI_^1OMES7 ALF 11,ERROR ON INPUT DEVICE_^1OMES8 ALF 9,ILLEGAL M, STATEMENT_^1OMES9 ALF 10,ILLEGAL D, STATEMENT_^1OMESA ALF 13,LAST DISK SECTOR WAS_^1OMESB ALF 15,OUTPUT STARTS FROM SECTOR_^1_%BSS BLOCK(96),NAMBL,ASTBL,XFRBL_^1_%BSS INBLK(61),IMES1(5)_^1_%NUM 0_^1SFLAG NUM 0_^1MERKI NUM 0_^1EFLAG NUM 0_^1XFLAG €€ NUM 0_^1ASTER NUM 0_^1SHIFT NUM 0_^1_%BSS LUINP,LUOUT_^1_%EQU PAULA(*)_^1_%ENQ $55_^1_%STQ TRSEC+1_^1_%STQ ANFGAD_^1_%RTJ ADRES_^1_%LDA ERGU_^1_%STA OMES1+11_^1_%LDA ERGL_^1_%STA OMES1+12_^1_%LDA- $FA_^1_%STA* LUOUT_^1_%LDA- $F9_^1_%STA* LUINP_^1OUTM1 RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 13_^1_%ADC OMES1_^1OUTM1B ENQ PAULA-IMES1-3_^1OUTM1A ENA 0_^1_%STA* €€IMES1,Q_^1_%SQZ OUTM2_^1_%INQ -1_^1_%JMP* OUTM1A_^1OUTM2 RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 2_^1_%ADC OMES2_^1_%LDA* OUTM2+3_^1_%SAZ 1_^1_%JMP* *-2_^1_%LDA- 0_^1BLANK NUM $2020_^1_%STA SPRUNG_^1_%ENQ 60_^1LOOP1 INQ -1_^1_%STA* INBLK,Q_^1_%SQZ 1_^1_%JMP* LOOP1_^1INPM1 RTJ- ($F4)_^1_%NUM $800,0,0,$1004_^1_%NUM 61_^1_%ADC INBLK_^1_%LDQ* INPM1+3_^1_%SQZ 1_^1_%€€JMP* *-2_^1_%LDA INBLK_^1_%STA* IMES1_^1OBEN_!CLR A_^1_%STA* SHIFT_^1_%LDA* BLANK_^1_%STA* IMES1+2_^1_%STA* IMES1+3_^1_%STA* IMES1+4_^1_%LDQ* MERKI_^1_%STQ- I_^1_%ENQ -3_^1INPM5 LDA INBLK+4,B_^1_%STA* IMES1+4,Q_^1_%ALS 8_^1_%SAP 4_^1_%ALS 8_^1_%EOR =N$DF_^1_%JMP* INPM5+2_^1_%RTJ* UPROG_^1_%SAZ AUS4_^1INP5_!LDA INBLK+4,B_^1_%RTJ* UPROG_^1_%SAZ AUS2_^1_%SQM 2_^1_%SQZ 1_€€^1_%JMP* INPM3_^1_%INQ 1_^1_%JMP* INPM5_^1AUS4_!INQ 3_^1_%SQN FERTIG_^1_%ENQ -2_^1_%ENA 1_^1_%STA* SHIFT_^1_%JMP* INPM5_^1_%EQU FERTIG(*)_^1_%LDA* BLANK_^1_%STA* IMES1+1,Q_^1_%JMP* UNTEN_^1AUS2_!LDA* IMES1+4,Q_^1_%EOR =N$C_^1_%STA* IMES1+4,Q_^1_%INQ 4_^1_%EQU UNTEN(*)_^1_%ADQ* MERKI_^1_%STQ* MERKI_^1_%INQ -60_^1_%SQM 1_^1_%JMP* OUTM1B_^1_%EQU VERSEZ(*)_^1_%LDA* SHIFT_^1€€_%SAZ SPRING_^1_%ENQ -3_^1_%STQ- I_^1SCHIEB LDQ* IMES1+4,I_^1_%LDA* IMES1+5,I_^1_%LLS 8_^1_%STQ IMES1+4,I_^1_%LDQ- I_^1_%INQ 1_^1_%STQ- I_^1_%SQZ 1_^1_%JMP* SCHIEB_^1_%EQU SPRING(*)_^1_%CLR A_^1_%ENQ -3_^1LOOP3 INQ 1_^1_%ADD IMES1+3,Q_^1_%SQZ 2_^1_%ALS 2_^1_%JMP* LOOP3_^1_%STA NAMFLG_^1_%RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 4_^1_%ADC IMES1_^1_%LDA* *-4_^1_%SA€€Z 1_^1_%JMP* *-2_^1_%ENQ 0_^1INPM2 LDA* TABLE,Q_^1_%SAZ INPM3_^1_%SUB IMES1_^1_%SAN 1_^1_%JMP* INPM4_^1_%INQ 1_^1_%JMP* INPM2_^1INPM3 RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 12_^1_%ADC OMES3_^1_%LDA* INPM3+3_^1_%SAZ 1_^1_%JMP* *-2_^1_%LDA =X(OUTM1B-JUMP-1)_^1_%STA JUMP+1_^1_%JMP PROGU_^1INPM4 LDQ* PROGR,Q_^1_%JMP- (2),Q_^1TABLE ALF 7,S,L,I,T,E,A,C,_^1_%ALF 2,M,€€D,_^1_%ALF 1,SI_^1_%ALF 1,R,_^1_%ALF 1,W,_^1_%ALF 1,V,_^1_%ALF 1,U,_^1_%NUM 0_^1PROGR ADC SPROG_^1_%ADC LPROG_^1_%ADC IPROG_^1_%ADC TPROG_^1_%ADC EPROG_^1_%ADC APROG_^1_%ADC CPROG_^1_%ADC MPROG_^1_%ADC DPROG_^1_%ADC SIPROG_^1_%ADC REPROG_^1_%ADC WEPROG_^1_%ADC VPROG_^1_%ADC PROGU_^1UPROG NOP 0_^1_%AND- $A_^1_%SAZ 2_^1_%INA -$20_^1_%SAN 2_^1_%STA* SPRUNG_^1€€_%JMP* VERSEZ_^1_%INA -$C_^1_%JMP* (UPROG)_^1*_]_^1*_*CHANGE COMMENTS INPUT UNIT_!V,X X=LU_^1*_]_^1VPROG EQU VPROG(*)_^1_%LDA INBLK+1_^1_%ARS 8_^1_%AND =N$F_^1_%EOR =N$1000_^1_%STA INPM1+4_^1_%STA JPROG1+4_^1_%JMP OUTM1B_^1*_]_^1*_*RESET COMMENTS INPUT DEVICE_^1*_]_^1PROGU EQU PROGU(*)_^1_%LDA- $FD_^1_%EOR =N$1000_^1_%STA INPM1+4_^1_%STA JPROG1+4_^1_%JMP OUTM1B_^1S€€PRUNG NUM 0_^1READ_!NOP 0_^1_%LDA EFLAG_^1_%SAZ 1_^1_%JMP* READF_^1_%LDA LUINP_^1_%STA* READB+4_^1_%ENQ 98_^1READA ENA 0_^1_%STA BLOCK,Q_^1_%SQZ READB_^1_%INQ -1_^1_%JMP* READA_^1READB RTJ- ($F4)_^1_%NUM $800,0,0,2_^1_%NUM 96_^1_%ADC BLOCK_^1_%LDA* READB+3_^1_%SAZ 1_^1_%JMP* *-2_^1_%LDA* READB+4_^1_%AND =N$A000_^1_%SAZ 2_^1_%JMP READI_^1READF LDA BLOCK_^1_%SUB €€ =N$2050_^1_%SAN READC_^1_%ENA 1_^1_%STA NAMBL_^1_%JMP* (READ)_^1READC LDA BLOCK_^1_%AND =N$7F00_^1_%SUB =N$2A00_^1_%SAN READD_^1_%ENA 1_^1_%STA ASTBL_^1_%JMP* (READ)_^1READD LDA BLOCK_^1_%SUB =N$C050_^1_%SAN READE_^1_%ENA 1_^1_%STA XFRBL_^1READE JMP* (READ)_^1READI RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 11_^1_%ADC OMES7_^1_%JMP PROGU_^1_%EQU LPROG(*)_^1_%€€RTJ PRIN_^1_%RTJ* READ_^1_%RTJ SNAM_^1_%RTJ LIST_^1_%RTJ* SXFR_^1_%JMP* LPROG+1_^1_%EQU TPROG(*)_^1_%RTJ PRIN_^1TPROGA RTJ* READ_^1TPROGB RTJ- ($F4)_^1_%NUM $C00,0,0,$8B3_^1_%NUM 96_^1_%ADC BLOCK_^1TRSEC NUM 0,100_^1_%LDA* TPROGB+3_^1_%SAZ 1_^1_%JMP* *-2_^1_%RAO* TRSEC+1_^1_%RTJ SNAM_^1_%RTJ LIST_^1_%RTJ* SXFR_^1_%JMP* TPROGA_^1SXFR_!NOP 0_^1_%RTJ* DISKTP_^1_%RTJ* INP€€ERR_^1_%LDA* WFLAG_^1_%SAZ 1_^1_%RTJ* MISTAK_^1_%LDA ASTBL_^1_%SAN SXFRA_^1_%LDA XFRBL_^1_%SAZ SXFRB_^1SXFRA LDA XFLAG_^1_%SAN 1_^1SXFRB JMP* (SXFR)_^1_%LDA* TRSEC+1_^1_%STA* MERSEC_^1_%CLR A_^1_%STA ASTER_^1_%STA* PTFLAG_^1_%STA XFLAG_^1JUMP_!JMP OUTM1B_^1_%EQU MISTAK(*)_^1_%NOP 0_^1_%LDA XFRBL_^1_%SAN 1_^1_%JMP* (MISTAK)_^1_%ENQ 3_^1LOOP2 INQ -1_^1_%LDA IMES1€€+1,Q_^1_%STA* MESS1+2,Q_^1_%SQZ 1_^1_%JMP* LOOP2_^1_%STQ* WFLAG_^1_%STQ* TRANSF_^1_%RTJ- ($F4)_^1_%NUM $C00,0,0,$1004,10_^1_%ADC MESS1_^1_%LDA* *-4_^1_%SAZ 1_^1_%JMP* *-2_^1_%LDA =AM,_^1_%STA IMES1_^1_%LDA LUINP_^1_%INA $30_^1_%ALS 8_^1_%INA $33_^1_%STA IMES1+1_^1_%LDA =A_^1_%STA IMES1+2_^1_%LDA =X(OUTM1B-JUMP-1)_^1_%STA* JUMP+1_^1_%LDA =XBRANCH-RETURN-1_^1_%STA RET€€URN+1_^1_%JMP SPRING_^1MESS1 ALF 10,NAM NOT FOUND_^1WFLAG NUM 0_^1PTFLAG NUM 0_^1INPERR NOP 0_^1_%LDA* PTFLAG_^1_%SAN 1_^1_%JMP* (INPERR)_^1_%LDA XFRBL_^1_%SAN 1_^1_%JMP* (INPERR)_^1_%LDA XFLAG_^1_%SAZ 1_^1_%JMP* (INPERR)_^1_%JMP WEITER_^1DISKTP NOP 0_^1_%LDA* TRANSF_^1_%SAN 1_^1_%JMP* (DISKTP)_^1_%LDA XFRBL_^1_%SAN 1_^1_%JMP* (DISKTP)_^1_%LDA XFRBL_^1_%SAN 1_^1_€€%JMP* (DISKTP)_^1_%JMP REWIND_^1TRANSF NUM 0_^1MERSEC NUM 0_^1PRIN_!NOP 0_^1_%LDA IMES1+1_^1_%AND =N$7F00_^1_%SUB =N$2A00_^1_%SAZ 1_^1_%ENA 1_^1_%STA ASTER_^1_%JMP* (PRIN)_^1_%EQU SPROG(*)_^1_%ENA 1_^1_%STA SFLAG_^1_%RTJ* PRIN_^1SPROGA RTJ READ_^1_%RTJ* SNAM_^1_%RTJ SXFR_^1_%RTJ* LIST_^1_%JMP* SPROGA_^1SNAM_!NOP 0_^1_%LDA ASTER_^1_%SAN 1_^1_%JMP* SAST_^1_%LDA NAM€€BL_^1_%SAN SNAMA_^1_%JMP* (SNAM)_^1_%EQU SNAMA(*)_^1SNAMB LDA BLOCK+4_^1_%ALS 2_^1_%ADD BLOCK+5_^1_%ALS 2_^1_%ADD BLOCK+6_^1_%STA* BLKFLG_^1_%SUB* NAMFLG_^1SOB_"SAN SNAMC_^1_%RAO XFLAG_^1_%LDA EFLAG_^1_%SAN SNAMC_^1_%LDA TRSEC+1_^1_%INA -1_^1_%STA INSEC+1_^1SNAMC LDA* BLKFLG_^1_%SUB =N$A785_^1_%SAN 5_^1_%RAO* TRANSF_^1_%LDA XFLAG_^1_%SAN 1_^1_%RAO* WFLAG_^1_%JMP€€* (SNAM)_^1SAST_!NOP 0_^1_%LDA BLOCK_^1_%SUB IMES1+1_^1_%JMP* SOB_^1NAMFLG NUM 0_^1BLKFLG NUM 0_^1LIST_!NOP 0_^1_%SWN 1_^1_%JMP* (LIST)_^1_%LDA SFLAG_^1_%SAN LISTC_^1_%LDA ASTBL_^1_%SAZ LISTA_^1_%JMP* LISTG_^1LISTA LDA NAMBL_^1_%SAZ LISTB_^1_%JMP* LISTF_^1LISTB JMP* (LIST)_^1LISTC LDA XFLAG_^1_%SAN 1_^1_%JMP* (LIST)_^1_%LDA ASTER_^1_%SAZ LISTG_^1_%JMP* LISTA_^1L€€ISTF RTJ- ($F4)_^1_%NUM $C00,0,0,$18FB_^1_%NUM 3_^1_%ADC BLOCK+4_^1_%LDA* LISTF+3_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* (LIST)_^1LISTG RTJ- ($F4)_^1_%NUM $C00,0,0,$18FB_^1_%NUM 10_^1_%ADC BLOCK_^1_%LDA* LISTG+3_^1_%SAZ 1_^1_%JMP* *-2_^1_%JMP* (LIST)_^1*_]_^1CPROG EQU CPROG(*)_^1_%ENA 1_^1_%ENQ 2_^1_%RTJ DEXEIN_^1_%INQ $49_^1_%SQZ ZZZI_^1_%INQ $7_^1_%SQZ ZZZP_^1_%JMP I€€NPM3_^1ZZZI_!ENA 2_^1_%ENQ 3_^1_%RTJ DEXEIN_^1_%STA LUINP_^1_%JMP OUTM1B_^1ZZZP_!ENA 2_^1_%ENQ 3_^1_%RTJ DEXEIN_^1_%STA LUOUT_^1_%JMP OUTM1B_^1*_]_^1_%JMP OUTM1B_^1_%EQU IPROG(*)_^1_%RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 1_^1_%ADC OMES4_^1JPROG1 RTJ- ($F4)_^1_%NUM $800,0,0,$1004_^1_%NUM 96_^1_%ADC BLOCK_^1_%LDA* JPROG1+3_^1_%SAZ 1_^1_%JMP* *-2_^1_%RTJ- ($F4)_€€^1_%ADC (TPROGB+1)_^1_%LDA TPROGB+3_^1_%SAZ 1_^1_%JMP* *-3_^1_%RAO TRSEC+1_^1_%JMP OUTM1B_^1LSEC_!NUM 0_^1IMES2 NUM_]_^1_%EQU EPROG(*)_^1_%LDA TRSEC+1_^1FS1_"STA* LSEC_^1_%ENA 1_^1_%STA EFLAG_^1_%LDA LUOUT_^1_%EOR =N$2030_^1_%STA OMES5-2_^1OUTM4 RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 27_^1_%ADC OMES4_^1_%LDA* OUTM4+3_^1_%SAZ 1_^1_%JMP* *-2_^1OUTM5 RTJ- ($F4)_€€^1_%NUM $800,0,0,$1004,1_^1_%ADC IMES2_^1_%LDQ* OUTM5+3_^1_%SQZ 1_^1_%JMP* *-2_^1_%LDA* IMES2_^1_%AND =N$7F7F_^1_%LLS 24_^1_%INA -$50_^1_%SAZ 1_^1_%JMP* OUTM6_^1_%LLS 8_^1_%INA -$39_^1_%SAM OUTM7_^1_%JMP INPM3_^1OUTM7 INA 9_^1_%STA LUOUT_^1_%JMP* OUTM8_^1OUTM6 LDA IMES2_^1_%SUB =AOK_^1_%SAZ 1_^1_%JMP* OUTM4_^1OUTM8 LDA LUOUT_^1_%STA* PUNCH1+4_^1_%LDQ* ANFGAD_^1_€€%STQ* INSEC+1_^1_%RTJ ADRES_^1_%LDA ERGU_^1_%STA OMESB+13_^1_%LDA ERGL_^1_%STA OMESB+14_^1_%RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 15_^1_%ADC OMESB_^1_%RTJ PRIN_^1IDISK RTJ- ($F4)_^1_%NUM $800,0,0,$8B3_^1_%NUM 96_^1_%ADC BLOCK_^1INSEC NUM 0,1_^1_%LDQ* IDISK+3_^1_%SQZ 1_^1_%JMP* *-2_^1_%ENA 0_^1_%STA NAMBL_^1_%STA XFRBL_^1_%STA ASTBL_^1_%RTJ READ_^1_%RTJ LIS€€T_^1_%RTJ SNAM_^1_%LDA ASTBL_^1_%SAN IDISKA_^1_%LDA BLOCK_^1_%AND- $F_^1_%INA -$50_^1_%SAZ IDISKA_^1_%ENA 96_^1_%JMP IDISKB_^1IDISKA LDA BLOCK+95_^1_%SUB =XBLOCK_^1IDISKB STA PUNCH1+5_^1PUNCH NOP_]_^1_%LDA LUOUT_^1_%STA* PUNCH1+4_^1PUNCH1 RTJ- ($F4)_^1_%NUM $0C00_)FWRITE_^1_%NUM 0_)C_^1_%NUM 0_)TH_^1_%NUM 3_)PUNCH_^1_%NUM 96_)N_^1_%ADC BLOCK_^1_%LDA* PUNCH1+3_^1_€€%SAZ 1_^1_%JMP* *-2_^1_%RTJ SXFR_^1_%LDA* INSEC+1_^1_%SUB LSEC_^1_%SAZ ENDE_^1_%RAO* INSEC+1_^1_%JMP* IDISK_^1ENDE_!RTJ- ($F4)_^1_%NUM $0C00_)FWRITE_^1_%NUM 0_)C_^1_%NUM 0_)TH_^1_%NUM $1004_)TTY_^1_%NUM 11_)N_^1_%ADC OMES6_^1_%JMP OUTM1B_^1ANFGAD NUM 0_^1APROG NOP_]_^1_%LDQ INSEC+1_^1_%RTJ ADRES_^1_%LDA ERGU_^1_%STA OMESA+11_^1_%LDA ERGL_^1_%STA OMESA+12_^1_%RTJ-€€ ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 13_^1_%ADC OMESA_^1_%RTJ- ($F4)_^1_%NUM $A00_^1MPROG NOP_]_^1MPROGC LDA IMES1+1_^1_%AND =N$F_^1_%ALS 12_^1_%STA* MPROGE_^1_%LDA IMES1+1_^1_%AND =N$0F00_^1_%ALS 8_^1_%STA* MPROGE-1_^1MPROGD NUM $54F4_^1_%NUM $1C00_^1_%NUM 0,0_^1_%NUM 6_^1MPROGE NUM 0_^1_%LDA* MPROGD+3_^1_%SAZ 1_^1_%JMP* *-2_^1RETURN JMP OUTM1B_^1MPROGF RTJ- ($F€€4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 9_^1_%ADC OMESB_^1_%JMP* MPROGF-2_^1DPROG NOP_]_^1_%LDQ IMES1+1_^1_%LLS 8_^1_%RTJ CONV_^1_%ALS 4_^1_%STA TRSEC+1_^1_%LLS 8_^1_%RTJ CONV_^1_%EOR TRSEC+1_^1_%ALS 4_^1_%STA TRSEC+1_^1_%LDQ IMES1+2_^1_%LLS 8_^1_%RTJ CONV_^1_%EOR TRSEC+1_^1_%ALS 4_^1_%STA TRSEC+1_^1_%LLS 8_^1_%RTJ CONV_^1_%EOR TRSEC+1_^1_%SUB- $C1_^1_%INA 1_^1_%S€€TA TRSEC+1_^1_%STA* ANFGAD_^1_%JMP OUTM1B_^1CONV_!NOP_]_^1_%AND- 9_^1_%INA -$30_^1_%SAM CONVC_^1_%INA -$17_^1_%SAP CONVC_^1_%INA $47_^1_%AND =N$4F_^1_%ALS 9_^1_%ARS 9_^1_%SAP 1_^1_%INA 9_^1_%AND- $6_^1_%JMP* (CONV)_^1CONVC RTJ- ($F4)_^1_%NUM $C00,0,0,$1004_^1_%NUM 10_^1_%ADC OMES9_^1_%JMP PROGU_^1ADRES NOP_]_^1_%ADQ- $C1_^1_%INQ -1_^1_%ENA 0_^1_%STA* ERGU_^1_%ST€€A* ERGL_^1_%RTJ* ADRESA_^1_%EOR* ERGU_^1_%ALS 8_^1_%STA* ERGU_^1_%RTJ* ADRESA_^1_%EOR* ERGU_^1_%STA* ERGU_^1_%RTJ* ADRESA_^1_%EOR* ERGL_^1_%ALS 8_^1_%STA* ERGL_^1_%RTJ* ADRESA_^1_%EOR* ERGL_^1_%STA* ERGL_^1_%JMP* (ADRES)_^1ADRESA NOP_]_^1_%LLS 4_^1_%AND =N$F_^1_%INA -$A_^1_%SAM 2_^1_%INA $41_^1_%JMP* (ADRESA)_^1_%INA $3A_^1_%JMP* (ADRESA)_^1_%BSS ERGU,ERGL_^1*_]_^1_%EQU S€€IPROG(*)_^1_%LDA- $F6_^1_%SUB =N$17E0_^1_%STA* LISTGF+5_^1_%STA* JUMPSI+1_^1_%RTJ- ($F4)_^1LISTGF NUM $1A01,0,0,$8C2,0,0,0_^1_%ADC NAME-LISTGF,0,0_^1_%LDA* LISTGF+2_^1_%SAZ 1_^1_%JMP* *-2_^1MESWR RTJ- ($F4)_^1_%NUM $C00,0,0_^1_%NUM $1004_^1_%NUM 15_^1_%ADC OUTMES_^1_%LDA* MESWR+3_^1_%SAZ 1_^1_%JMP* *-2_^1SWITCH SWS 1_^1_%JMP* SWITCH_^1_%CLR A_^1_%TRA M_^1JUMPSI JMP+ 0_€€^1NAME_!ALF 3,SYSINT_^1OUTMES ALF 14,RESET PP AND SET SKIP SWITCH_^1_%NUM $0D0A_^1REPROG LDA =N$3CFE_^1_%JMP FS1_^1WEPROG LDA- $FA_^1_%STA LUINP_^1_%LDA =XWEITER-JUMP-1_^1_%STA JUMP+1_^1_%JMP TPROG_^1WEITER LDA SPRUNG_^1_%SAZ 2_^1_%LDA =XOBEN-OUTM1B_^1_%ADD =X(OUTM1B-JUMP-1)_^1_%STA PTFLAG_^1_%STA JUMP+1_^1_%LDA- $F9_^1_%STA LUINP_^1_%LDA INSEC+1_^1_%STA TRSEC+1_^€€1_%JMP TPROG_^1BRANCH LDA =X(OUTM1B-RETURN-1)_^1_%STA RETURN+1_^1_%LDA NAMFLG_^1_%SUB =N$A2A2_^1_%SAN 1_^1_%JMP* UNIT2+2_^1_%LDA MERSEC_^1_%STA TRSEC+1_^1_%LDA =AS,_^1_%STA IMES1_^1_%RTJ- ($F4)_^1_%ADC (IDISK+1)_^1_%LDA IDISK+3_^1_%SAZ 1_^1_%JMP* *-3_^1_%ENA BLOCK+3-INBLK_^1_%STA MERKI_^1_%JMP OBEN_^1REWIND CLR A_^1_%STA XFLAG_^1_%STA TRANSF_^1_%STA WFLAG_^1_%ST€€A PTFLAG_^1_%LDA EFLAG_^1_%SAN 2_^1_%LDA- $FA_^1_%JMP* *+3_^1_%LDA LUOUT_^1_%STA* UNIT1_^1_%STA* UNIT2_^1_%LDA EFLAG_^1_%SAZ TAPMO_^1_%RTJ- ($F4)_^1_%NUM $1C00,0,0_^1UNIT1 NUM 0_^1_%NUM $2000_^1_%LDA* *-3_^1_%SAZ 1_^1_%JMP* *-2_^1TAPMO RTJ- ($F4)_^1_%NUM $1C00,0,0_^1UNIT2 NUM 0_^1_%NUM $3000_^1_%LDA EFLAG_^1_%SAZ 2_^1_%JMP OUTM1B_^1_%LDA =AE,_^1_%STA IMES1_^1_%€€LDA =AEN_^1_%STA INBLK+1_^1_%LDA =ADT_^1_%STA INBLK+2_^1_%LDA =AAP_^1_%STA INBLK+3_^1_%CLR A_^1_%STA MERKI_^1_%JMP OBEN_^1*_]_^1*_$A = ZDER ZEICHEN,_^1DEXEIN 0_"0_)HEX / DEZ IN BINAER_^1_%STA* PARAH_)- = HEX / + = DEZ_^1_%SAM 1_^1_%TCA A_^1_%STA* ZELR1_^1_%STQ* ADI_^1_%ENA 0_^1_%STA* LEWE1_^1ZW31_!LDQ* ADI_^1_%QRS 1_^1_%LDQ IMES1,Q_^1_%ENA 1_^1_%AND* ADI_^1_%RAO* ADI€€_^1_%SAN 1_^1_%QLS 8_^1_%ENA $7F_^1_%LAQ A_^1_%STA* LEZE_^1_%INA -$30_^1_%STA* HZ11_^1_%SAP 1_^1_%JMP* IRR11_^1_%INA -10_^1_%LDQ* PARAH_^1_%SQM WHW2_^1_%SAP ZIR12_^1_%ENA 10_^1_%MUI* LEWE1_^1_%ADD* HZ11_^1_%JMP* ZRHX_^1WHW2_!SAM WEHEX_^1_%INA 3_^1_%STA* HZ11_^1_%INA -16_^1ZIR12 SAP IRR11_^1WEHEX LDA* LEWE1_^1_%ALS 4_)$ 16_^1_%EOR* HZ11_^1ZRHX_!STA* LEWE1_^1_%RAO* Z€ζELR1_^1_%LDQ* ZELR1_^1_%SQZ ZR3_^1_%JMP* ZW31_^1IRR11 LDQ* LEZE_^1_%TCQ Q_^1_%LDA* LEWE1_^1ZR3_"JMP* (DEXEIN)_^1ZELR1 NUM 0_^1LEWE1 NUM 0_^1HZ11_!NUM 0_^1ADI_"NUM 0_^1LEZE_!NUM 0_^1PARAH NUM 0_^1*_]_^1_%END PAULA_^__ζPSYSSPR CSY/ P1_%NAM_!SYSSPR_%NEXT AVAILABLE LOCATION_^1_%SPC_!5_^1_%ENT_!SYSSPR_^1_%SPC_!5_^1SYSSPR BZS SYSSPR(256)_!SYSTEM PATCH AREA_^1_%BZS (16)_)SPARE PATCH AREA_^1_%BZS (16)_)SPARE PATCH AREA_^1_%BZS (16)_)SPARE PATCH AREA_^1_%BZS (16)_)SPARE PATCH AREA_^1_%SPC_!5_^1_%END_]_^__PENDCOR CSY/ PZ1_%NAM ENDCOR_'LAST LOCATION OF CORE_^1_%NUM $FFFF_(LAST LOCATION OF CORE_^1_%END_]_^__ZPTAGDAT CSY/ P€1_%NAM TAGDAT_'CYBERDATA 2.2 DISK INITIALIZER_'04/08/76_^1*_$TAGDAT IS BROKEN INTO 3 MAIN BLOCKS. A SIMPLE BOOTSTRAP IS_^1*_$REQUIRED TO READ IN AND EXECUTE THE FIRST RECORD._^1*_]_^1*_$1._!'FIRST RECORD' 96 WORDS LONG, LOADED ANYWHERE EXCEPT_^1*_*FROM $FC TO $400._^1*_*A) PRESETS SOME VALUES_^1*_*B) INPUTS TAPE STATUS 2, TEST FOR 7 OR 9 TRACK TAPE_^1*_*C) READS TAPE (7 OR 9€€ TR) UNTIL MINI-OP-SYSTEM_^1*_.IS IN CORE STARTING AT $100._^1*_*D) SETS UP LOCATION $0 FOR POSSIBLE MASTER CLEAR - GO._^1*_*E) JUMPS TO MINI-OP-SYSTEM AT $100 (POINTER AT $FE)._^1*_]_^1*_$2. MINI-OP-SYSTEM_!-_!LOADED AT $100. POINTER AT $FE._^1*_)SET SELECTIVE STOP SWITCH IF BUFFER LOAD LOCATION_^1*_)IS TO BE CHANGED FROM $4000. ENTER NEW VALUE IN A._^1*_*A) IF Q NOT ZERO, TH€€EN:_^1*_.1) ZERO FROM END OF MINI-OP-SYSTEM TO END OF 24K._^1*_.2) INPUT TAPE STATUS 2, TEST FOR 7 OR 9 TRACK TAPE._^1*_.3) READ (7 OR 9 TRACK) TO FILE MARK, STORE AT $4000._^1*_2SUCCESSFUL READ - GO TO 'TAPOK'._^1*_2ERRORS_*- GO TO 'TAPER'._^1*_.4) TAPOK - PRINT OUT PROGRAM LOAD START AND ENDING_^1*_2ADDRESSES. GO TO 2-A-6._^1*_.5) TAPER - PRINT OUT ERROR MESSAGE AND LA€€ST TAPE STAT_^1*_.6) MESSAGE - TYPE E TO EXECUTE PROGRAM_^1*_*B) MESSAGE - TYPE A TO ADVANCE FILE, R TO READ NEXT FILE_^1*_.D FOR MINI-DEBUG, P FOR CHANGE TAPE PHYSICAL UNIT._^1*_*C) INPUT CHARACTER, TEST FOR A/D/E/P/R_^1*_/IF A THEN ADVANCE FILE, RETURN TO 2-B._^1*_/IF D GO TO DEBUG, THEN RETURN TO 2-B._^1*_/IF E GO TO PROGRAM LOADED._^1*_/IF P THEN CHANGE PHYSICAL UNITS FOR€€ TAPE LOADING_^1*_4RETURN TO 2-B._^1*_/IF R READ NEXT FILE, GO TO 2-B._^1*_/ELSE -- TYPE ERROR MESSAGE, GO TO 2-B._^1*_*D) ADF - ADVANCE FILE ON TAPE UNIT._^1*_*E) CHNGTP - CHANGE TAPE PHYSICAL UNIT._^1*_*F) OUTMSG - INPMSG_#TTY I/O DRIVERS._^1*_*G) MINI-DEBUG_!YOU TYPE A START ADDRESS, SYSTEM LISTS_^1*_.CONTENTS, YOU MAY CHANGE THAT LOCATION IF DESIRED._^1*_]_^1*_$3. DISK INIT€€IALIZER 'TAGDAT', LOADED AT 'STRTLD' ($4000)._^1*_*A) GIVES DIRECTIONS:_^1*_/- WHICH DISK (1,2,3,4)_^1*_/- REMOVABLE/ENTIRE DISK_^1*_/- TAGS ONLY/TAGS + DATA_^1*_*B) TESTS IF DISK IS READY._^1*_*C) EXECUTES APPROPRIATE (TAGS/TAGS+DATA) PROGRAM._^1*_*D) GIVES COMPLETION MESSAGE._^1*_*E) ASKS IF ANOTHER DISK IS TO BE INITIALIZED._^1*_/IF YES, GO TO 3-A, IF NO, GO TO 2 WITH Q€€ = 0._^1_%EJT_]_^1_%EQU ZERO($FD)_^1_%EQU TTYIN($FB)_^1_%EQU TTYOUT($FC)_^1_%SPC 1_^1REC1_!LDQ =N$381_^1_%ENA 0_^1_%STA- ZERO_)VALUE ZERO SET UP_^1_%INP -1_+DIRECTOR STATUS 1_^1_%ALS 10_+ALARM_^1_%SAP 1_^1_%NUM $18FF_(ALARM --- HANG._^1_%LDA- 0_,(2 WORD INSTRUCTION)_^1N100_!NUM $100_^1_%STA- $FE_*ADDRESS OF MINI-MON_^1_%STA- I_,LOADER POINTER_^1_%OUT -1_+READ MOTION A=€€100, Q=381_^1_%INQ 1_,Q=382_^1_%ENA 0_^1_%INP -1_+DIR STATUS 2 TO A_^1_%ALS 12_+7 OR 9 TRACK-_^1_%SAM BT7_*SKIP IF 7 TRACK_^1_%SPC 1_^1BT9_"RTJ* READFR_'INPUT A WORD_^1_%RTJ* SAVWRD_'SAVE A WORD_^1_%JMP* BT9_*LOOP._^1_%SPC 1_^1BT7_"RTJ* READFR_'INPUT A FRAME_^1_%RTJ* ROUT1_^1_%ALS 4_^1_%STA- (I)_^1_%RTJ* READFR_'INPUT A FRAME_^1_%TRA M_^1_%ARS 2_^1_%EOR- (I)_^1_%RTJ* SAVW€€RD_'1ST WORD 6,6,4_^1_%ENA 3_^1_%LAM A_^1_%RTJ* ROUT1_^1_%RTJ* ROUT1_^1_%ALS 2_^1_%STA- (I)_^1_%RTJ* READFR_'INPUT A FRAME_^1_%TRA M_^1_%ARS 4_^1_%EOR- (I)_^1_%RTJ* SAVWRD_'2ND WORD 2,6,6,2_^1_%ENA $F_^1_%LAM A_^1_%RTJ* ROUT1_^1_%RTJ* ROUT1_^1_%RTJ* SAVWRD_'3RD WORD 4,6,6_^1_%JMP* BT7_*RETURN FOR NEXT 8 FRAMES_^1ROUT1 NOP 0_^1_%ALS 6_^1_%STA- (I)_^1_%RTJ* READFR_'READ €€A FRAME_^1_%EOR- (I)_^1_%JMP* (ROUT1)_^1SAVWRD NUM 0_^1_%STA- (I)_*SAVE A REGISTER_^1_%RAO- I_,BUMP POINTER_^1_%JMP* (SAVWRD)_^1_%SPC 1_^1READFR NUM 0_^1LOOPFR LDQ =N$380_'(Q = 380)_^1_%ENA 0_,CLEAR A_^1_%INP REJECT-*_$READ A FRAME_^1_%JMP* (READFR)_$RETURN_^1_%SPC 1_^1REJECT NUM $18FF_(EXTERNAL REJECT._^1_%INQ 1_,INTERNAL REJECT_^1_%ENA 0_,TEST STATUS FOR EOP (Q = 381)_€€^1_%INP -1_+DIRECTOR STATUS 1_^1_%ALS 10_+ALARM BIT_^1_%SAP NOALRM_'SKIP IF NO ALARM_^1ALARM ALS 6_,STATUS IN 'A'_^1_%LDQ- I_,'LAST LOCATION LOADED' +1 IN 'Q'_^1_%SLS 0_,STOP! ALARM CONDITION._^1_%JMP* *-1_*HANG, ALARM CONDITION._^1NOALRM ALS 1_,EOP BIT_^1_%SAM NEXT_)SKIP IF 'END OF OPERATION'_^1_%JMP* LOOPFR_'TRY AGAIN._^1NEXT_!LDA* RECCNT_'EOP._^1_%INA -1_.MORE_^1_%STA*€€ RECCNT_*RECORDS --_^1_%SAP MORE_)SKIP IF MORE RECORDS_^1_%LDA* ZINS_)NO_^1_%STA- (ZERO)_'SET UP LOCATION ZERO_^1_%LDA- 0_^1_%ADC OUTMSG-PGM+$100_^1_%STA- TTYOUT_^1_%INA INPMSG-OUTMSG_^1_%STA- TTYIN_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:B/_^1_%ALF /,:L:L/_^1_%NUM 0_^1ZINS_!JMP- ($FE)_(GO TO MINI - MON_^1RECCNT ADC LPGM/96_%NUMBER RECORDS IN MINI-MON._^1MORE_!LDA- $FE_*(A=100, Q=381)€€_^1_%OUT -1_+READ MOTION_^1_%JMP* LOOPFR_^1_%BZS (96-*+REC1)_!DUMMY BUFFER FILL._^1_%EJT_]_^1PGM_"EQU X1($100)_$***CORE LOCATION***_^1PGM_"IIN 0_^1_%LDA* STRTLD_^1_%SLS 0_,A IS READ BUFFER, Q NE 0 IS READ TAPE 2 EOF._^1_%STA* STRTLD_'RESET STARTING BUFFER._^1_%STA* ENDLD_^1_%SQN 2_^1_%JMP QZERO_^1_%LDQ =N$6FFF_%28 K SYSTEM MINIMUM._^1_%ADQ =X(-$100-LPGM)_^1_%ENA 0_^1ZCOR€€E STA ENDLOC,Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* ZCORE_^1CONRET LDQ =N$381_'Q=381_^1_%LDA- $FE_*A=100_^1_%OUT RECON-*_%READ MOTION_^1_%INQ 1_,Q=382_^1_%ENA 0_^1_%INP -1_+DIRECTOR STATUS 2_^1_%ALS 12_+7T BIT_^1_%SAP READ9_^1_%JMP* READ7_^1RECON JMP* EXTREJ_'EXTERNAL REJECT_^1_%RTJ CONTAP_^1_%JMP* CONRET_^1_%SPC 2_^1READ9 RTJ* READBT_'READ A WORD_^1_%RTJ* SAVBT_(STORE A WO€€RD, BUMP COUNTER._^1_%JMP* READ9_(LOOP UNTIL FILE MARK._^1_%SPC 2_^1USEL9 NUM $44C_^1USEL7 NUM $40C_)UNIT 0, 800 BPI, BINARY_^1STRTLD NUM $4000_^1ENDLD NUM 0_^1_%EJT_]_^1READ7 RTJ* READBT_'READ 6 BITS_^1_%RTJ* ROUT_^1_%ALS 4_^1_%SPA* (ENDLD)_^1_%RTJ* READBT_'READ 6 BITS_^1_%TRA M_^1_%ARS 2_^1_%EOR* (ENDLD)_^1_%RTJ* SAVBT_(1ST WORD 6,6,4_^1_%ENA 3_^1_%LAM A_^1_%RTJ* RO€€UT_^1_%RTJ* ROUT_^1_%ALS 2_^1_%SPA* (ENDLD)_^1_%RTJ* READBT_'READ 6 BITS_^1_%TRA M_^1_%ARS 4_^1_%EOR* (ENDLD)_^1_%RTJ* SAVBT_(2ND WORD 2,6,6,2_^1_%ENA $F_^1_%LAM A_^1_%RTJ* ROUT_^1_%RTJ* ROUT_^1_%RTJ* SAVBT_(3RD WORD 4,6,6_^1_%JMP* READ7_(RETURN FOR NEXT 8 FRAMES_^1ROUT_!NOP 0_^1_%ALS 6_^1_%SPA* (ENDLD)_^1_%RTJ* READBT_'READ 6 BITS_^1_%EOR* (ENDLD)_^1_%JMP* (ROUT)_^1_%SPC €€ 2_^1SAVBT NUM 0_^1_%STA* (ENDLD)_^1_%RAO* ENDLD_^1_%JMP* (SAVBT)_^1_%SPC 2_^1READBT NUM 0_^1LOOPBT LDQ =N$380_^1_%ENA 0_^1_%INP REJCT-*_^1_%JMP* (READBT)_^1_%SPC 1_^1REJCT JMP* EXTREJ_'EXTERNAL REJECT_^1_%INQ 1_^1_%ENA 0_^1_%INP -1_+GET DIRECTOR STATUS 1_^1_%ALS 10_+'ALARM' TO BIT 15_^1_%SAP EOPTST_'SKIP IF NO ALARM_^1EOPWAT INP -1_+WAIT FOR EOP_^1_%TRA M_,SAVE ST€€ATUS_^1_%ALS 11_+'EOP' TO BIT 15_^1_%SAM EOFCHK_'SKIP IF EOP AFTER ALARM_^1_%JMP* EOPWAT_^1EOFCHK TRM A_,LOAD STATUS_^1_%ALS 4_,'FM' TO BIT 15_^1_%SAP 2_^1_%JMP TAPOK_(FILE MARK._^1_%ALS 6_,'ALARM' TO BIT 15 FOR ERROR MESSAGE._^1_%JMP TAPER_(ERROR_^1EOPTST ALS 1_^1_%SAM 1_,SKIP IF EOP_^1_%JMP* LOOPBT_'NOT EOP, NOT ALARM; TRY AGAIN!_^1_%ALS 5+4_*EOP. IS IT FM?_^1_%SAP 2€€_^1_%JMP TAPOK_(FILE MARK_^1_%LDA- $FE_*NO FM. A = 100_^1_%OUT -1_+READ ANOTHER RECORD_^1_%JMP* LOOPBT_^1_%SPC 5_^1EXTREJ RTJ- (TTYOUT)_$EXTERNAL REJECT_^1_%ALF /,:R:L:LEXTERNAL REJECT ON TAPE UNIT./_^1_%NUM 0_^1_%JMP RCVRY1_^1_%EJT_]_^1LOOPMS EQU X2($100+*-PGM)_!***CORE LOCATION***_^1LOOPMS LDA* READEX_'TEST READ/EXECUTE FLAG_^1_%SAN TYPEMS_'SKIP IF NOT SET_^1_%RAO* READE€€X_'MAKE IT NON-ZERO._^1_%JMP SWSET_(GO EXECUTE IT AS IF 'E' WERE ENTERED._^1READEX NUM 1_,READ/EXECUTE FLAG 0=R/E, 1=NOT 'X'_^1TYPEMS RTJ- (TTYOUT)_^1_%ALF /,:R:L:LTYPE/_^1_%ALF /,:R:L_!E/_^1_%NUM 0_^1_%SWS QZERO_(SKIP IF SWITCH IS SET (SHORT MESSAGE)_^1_%RTJ- (TTYOUT)_^1_%ALF /, TO EXECUTE FILE LOADED/_^1_%NUM 0_^1QZERO RTJ- (TTYOUT)_^1_%ALF /,:R:L_!A/_^1_%NUM 0_^1_%€€SWN 1_^1_%JMP* QZ1_*JUMP IF SKIP SWITCH IS SET_^1_%RTJ- (TTYOUT)_^1_%ALF /, TO ADVANCE TAPE 1 FILE MARK/_^1_%NUM 0_^1QZ1_"RTJ- (TTYOUT)_^1_%ALF /,:R:L_!R/_^1_%NUM 0_^1_%SWS QZ2_*SKIP IF SHORT MESSAGES REQUESTED_^1_%RTJ- (TTYOUT)_^1_%ALF /, TO READ NEXT FILE/_^1_%NUM 0_^1QZ2_"RTJ- (TTYOUT)_^1_%ALF /,:R:L_!X/_^1_%NUM 0_^1_%SWN 1_^1_%JMP* QZ3_*JUMP IF SKIP SWITCH IS SET_^€€1_%RTJ- (TTYOUT)_^1_%ALF /, TO READ & EXECUTE NEXT FILE/_^1_%NUM 0_^1QZ3_"RTJ- (TTYOUT)_^1_%ALF /,:R:L_!D/_^1_%NUM 0_^1_%SWN 1_^1_%JMP* QZ44_)JUMP IF SKIP SWITCH IS SET_^1_%RTJ- (TTYOUT)_^1_%ALF /, TO EXECUTE MINI-DEBUG/_^1_%NUM 0_^1QZ44_!RTJ- (TTYOUT)_^1_%ALF *,:R:L*_^1_%NUM 0_^1QZ4_"RTJ- (TTYIN)_^1_%AND =N$5F_(INSURE CAPITAL LETTERS_^1_%INA -$41_)IS IT 'A' -_^1_%SAN €€ 1_^1_%JMP* ADF_*YES - 'A'._^1_%INA $41-$44_%IS IT 'D' -_^1_%SAN 2_^1_%JMP DEBUG_(YES - 'D'._^1_%INA $44-$45_%IS IT 'E' -_^1_%SAZ SWSET_^1_%JMP* TRYP_^1SWSET LDA ENDLD_0YES - 'E' IS IT TAGDAT?_^1_%SUB STRTLD_'SIZE OF PGM LOADED._^1_%SUB =XSZTAGS+1_"SIZE OF TAGDAT_^1_%SAN QZ5_2SKIP IF NOT TAGDAT_^1_%RTJ- (TTYOUT)_$YES - TAGDAT._^1_%ALF /,:R:L/_^1_%NUM 0_^1_%JMP* ISE2_€€1GO EXECUTE TAGDAT_^1*_*NOT TAGDAT, SO TEST SWITCHES._^1QZ5_"SWS 1_^1_%JMP* ISE_^1_%RTJ- (TTYOUT)_$SWITCH IS SET. TELL 'EM._^1_%ALF /,:R:LRESET SKIP SWITCH/_^1_%NUM 0_^1_%SWN 1_,TEST -_^1_%JMP* *-1_*STILL SET. TRY AGAIN (WAIT)_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LTHANK YOU:R:L/_^1_%NUM 0_^1ISE_"LDA (I1)_)TEST MODE SWITCH._^1_%EOR I3_+A = 0 FOR 32K MODE_^1_%SAN 1_,SKIP IF 65K€€ MODE_^1ISE2_!JMP (STRTLD)_$- YES - 'E'_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LWARNING-- YOU ARE IN 65K MODE:R:L:L:B:B:B/_^1_%NUM 0_^1_%JMP* ISE2_^1TRYP_!INA $45-$50_%IS IT 'P' - (CHANGE PHYSICAL UNIT)_^1_%SAN 2_^1_%JMP CHNGTP_'YES - P._^1_%INA $50-$52_%IS IT 'R' -_^1_%SAN NOTR_^1_%RTJ- (TTYOUT)_^1_%ALF /,EAD FILE/_^1_%NUM 0_^1_%JMP- ($FE)_0YES - 'R'_^1NOTR_!INA $52-$58_%IS IT€€ 'X' -_^1_%SAN BAD_^1_%STA READEX_'YES - 'X'_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LREAD & EX/_^1_%NUM 0_^1_%JMP- ($FE)_0GO READ, THEN EXECUTE._^1BAD_"RTJ- (TTYOUT)_^1_%ALF /,:R:LILLEGAL/_^1_%NUM 0_^1_%SWS BAD2_^1_%RTJ- (TTYOUT)_^1_%ALF /,RESPONSE, TRY AGAIN!/_^1_%NUM 0_^1BAD2_!JMP* LOOPM_^1_%EJT_]_^1ADVFIL NUM $303_^1ADFREJ JMP* GOEXRJ_'EXTERNAL REJECT_^1_%RTJ* CONTAP_^1_%SPC €€ 5_^1ADF_"EQU X3($100+*-PGM)_!***CORE LOCATION***_^1ADF_"LDQ* N381_^1_%LDA* ADVFIL_'ADVANCE FILE_^1_%OUT ADFREJ-*_%ADVANCE FILE_^1_%RTJ- (TTYOUT)_^1_%ALF /,DV FILE:R:L/_^1_%NUM 0_^1_%LDQ* N381_^1INSTAT INP -1_+INPUT STATUS_^1_%STA TSTAT_^1_%ALS 11_+EOP TO BIT 15_^1_%SAM 1_,SKIP IF EOP_^1_%JMP* INSTAT_^1_%ALS 9_,FM BIT TO BIT 15_^1_%SAM FM_^1_%JMP* ERRFM_^1N381_!NUM $381_€€)UNIT SELECT_^1FM_#SWS FM2_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LONE FILE HAS BEEN/_^1_%NUM 0_^1FM2_"RTJ- (TTYOUT)_^1_%ALF /,ADVANCED./_^1_%NUM 0_^1LOOPM JMP LOOPMS_^1_%EJT_]_^1ERRFM RTJ- (TTYOUT)_^1_%ALF /,:R:LERROR DURING FILE ADVANCE/_^1_%NUM 0_^1_%RTJ* TPSTAT_^1_%JMP* LOOPM_^1_%SPC 2_^1GOEXRJ JMP EXTREJ_^1_%EJT_]_^1CHNGTP EQU X4($100+*-PGM)_!***CORE LOCATION***_^1CHNGTP €€RTJ- (TTYOUT)_^1_%ALF /,:R:LWHICH PHYSICAL UNIT (0,1,2,3)?/_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%RTJ- (TTYIN)_^1_%INA -$30_^1_%SAP 1_^1_%JMP* CHNGTP_'ERROR - LESS THAN $30_^1_%INA -4_^1_%SAM 1_^1_%JMP* CHNGTP_'ERROR - ONLY 0 TO 3 ALLOWED._^1_%INA 4_,0 - 3_^1_%ALS 7_,TO BITS 7,8_^1_%ADD =X$40C_^1_%STA USEL7_(7 TRACK_^1_%INA $40_^1_%STA USEL9_(9 TRACK_^1_%RTJ* CONTAP_^1_%JMP* L€€OOPM_^1_%EJT_]_^1CONTAP NUM 0_,CONNECT TO 7/9T TAPE_^1_%LDQ =N$382_'Q=382_^1_%LDA USEL7_(A=40C FOR 7T_^1_%OUT REJCON-*_$CONNECT_^1CNSTAT INP REJCON-*_$STATUS_^1_%ALS 12_+7T BIT_^1_%SAM 3_^1_%LDA USEL9_(RECONNECT_^1_%OUT REJCON-*_$RE-CONNECT IF 9 TRACK._^1_%JMP* (CONTAP)_^1_%SPC 5_^1REJCON JMP* GOEXRJ_'EXTERNAL REJECT_^1_%RTJ* BYSTAT_^1_%JMP* CNSTAT_'TRY STATUS_^1_%RTJ- (T€€TYOUT)_$NOT-READY RETURN_^1_%ALF /,:R:LTAPE NOT READY/_^1_%NUM 0_^1_%RTJ* BYSTAT_^1_%JMP* CNSTAT_^1_%JMP* *-2_*NOT-READY RETURN_^1_%SPC 2_^1BYSTAT NUM 0_^1_%ENA 0_^1_%INP -1_+STATUS_^1_%ALS 15_+RRDY BIT TO 15_^1_%SAM 1_,SKIP IF READY_^1_%RAO* BYSTAT_'NOT READY, RETURN TO 2ND LOCN._^1_%JMP* (BYSTAT)_^1_%EJT_]_^1TAPER EQU X5($100+*-PGM)_!**MCORE LOCATION***_^1TAPER ALS 6_^€€1_%STA* TSTAT_(SAVE STATUS_^1_%RAO READEX_'STOP EXECUTION IN CASE 'X'_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:L:LERROR DURING READ./_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%RTJ* TPSTAT_^1RESTRT ENQ 0_^1_%JMP* LOOPM_^1_%SPC 2_^1TPSTAT NOP_]_^1_%LDA- 0_^1TSTAT NUM 0_,CURRENT TAPE STATUS_^1_%RTJ* BINASC_^1_%STA* TSTX_^1_%STQ* TSTX+1_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LTAPE STATUS IS:/_^1TSTX_!NUM €€0,0,0_^1_%LDA* TSTAT_^1_%RTJ RCVRY2_^1_%JMP* (TPSTAT)_^1_%EJT_]_^1TAPOK EQU X6($100+*-PGM)_!***CORE LOCATION***_^1TAPOK LDA STRTLD_'STARTING LOC_^1_%RTJ* BINASC_^1_%STA* LODLOC_^1_%STQ* LODLOC+1_^1_%LDA ENDLD_(END OF PROGRAM LOAD_^1_%INA -1_^1_%RTJ* BINASC_^1_%STA* ENDLOD_^1_%STQ* ENDLOD+1_^1TRYAGN RTJ- (TTYOUT)_^1_%ALF /,:R:LFILE IS LOADED AT $/_^1LODLOC NUM 0,0_^1_%ALF €€*, TO $*_^1ENDLOD NUM 0,0_^1_%NUM 0_^1_%JMP LOOPMS_^1_%EJT_]_^1OUTMSG EQU X7($100+*-PGM)_!***CORE LOCATION***_^1OUTMSG NOP_]_^1_%RTJ* CONECT_^1_%NUM $102_(WRITE REQUEST_^1OUTLOP LDA* (OUTMSG)_^1_%RAO* OUTMSG_^1_%SAZ XOUT_^1_%ALS 8_^1_%NOP_]_^1_%OUT -1_+LEFT BYTE_^1_%ALS 8_^1_%NOP_]_^1_%OUT -1_+RIGHT BYTE_^1_%JMP* OUTLOP_^1XOUT_!JMP* (OUTMSG)_^1_%SPC 5_^1CONECT NUM 0_^1_€€%LDQ =N$91_(EQPT CODE, DIR FCTN_^1CON2_!ENA 0_^1_%INP -1_^1_%ALS 14_^1_%SAP 1_^1_%JMP* CON2_^1_%LDA* (CONECT)_$102 OR 202_^1_%OUT -1_^1_%INQ -1_+SET Q FOR I/O_^1_%RAO* CONECT_^1_%JMP* (CONECT)_^1_%SPC 10_^1INPMSG NOP_]_^1_%RTJ* CONECT_^1_%NUM $203_)READ_^1_%ENA 0_^1_%INP -1_^1_%AND =N$7F_^1_%JMP* (INPMSG)_^1_%EJT_]_^1BINASC NOP_]_^1_%STA* SAVADR_^1_%RTJ* BUILD_^1_%RTJ* €€BUILD_^1_%STQ* SAVEA_^1_%RTJ* BUILD_^1_%RTJ* BUILD_^1_%LDA* SAVEA_^1_%JMP* (BINASC)_^1_%SPC 5_^1BUILD NOP_]_^1_%LDA* SAVADR_^1_%ALS 4_^1_%STA* SAVADR_^1_%AND* MASK_^1_%INA -10_^1_%SAM 1_^1_%INA 7_^1_%INA 10+$30_^1_%ALS 8_^1_%LLS 8_^1_%JMP* (BUILD)_^1_%SPC 5_^1MASK_!NUM $F_^1SAVADR NUM 0_^1SAVEA NUM 0_^1_%SPC 5_^1_%EJT_]_^1DEBUG EQU X8($100+*-PGM)_!***CORE LOCATION*€€**_^1DEBUG RTJ- (TTYOUT)_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%SWS DIR2_^1_%RTJ- (TTYOUT)_^1_%ALF /,MINI-DEBUG:R:LDO YOU WANT/_^1_%NUM 0_^1DIR2_!RTJ- (TTYOUT)_^1_%ALF *,DIRECTIONS (Y/N)?*_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%RTJ- (TTYIN)_^1_%AND =N$5F_^1_%INA -$50_^1_%SAP MINIDB_^1_%JMP* ENTDB_^1MINIDB RTJ- (TTYOUT)_^1_%ALF /,:R:L:LMINI - DEBUG:L/_^1_%ALF /,:R:LTYPE HEX ADDRESS:/_^1€€_%ALF *,:R:L WILL PRINT VALUE AT THAT ADDRESS*_^1_%ALF *,:R:L MODIFY BY TYPING NEW HEX VALUE*_^1_%ALF *,:R:L SPACE BAR FOR NEXT LOCATION*_^1_%ALF *,:R:L COMMA FOR PREVIOUS LOCATION*_^1_%ALF *,:R:L N TO ENTER A NEW ADDRESS*_^1_%ALF /,:R:L S TO SEARCH CORE/_^1_%ALF *,:R:L*_^1_%ALF /, Z TO TERMINATE MINI-DEBUG:R:L/_^1_%NUM 0_^1ENTDB LDQ =N$7FFF_%SET MAXCOR FOR 32K MODE_^1_€€%STQ* MAXCOR_^1_%LDA* (I1)_)TEST 32/65K MODE SWITCH_^1_%EOR* I3_^1_%SAZ 2_,SKIP IF 32K MODE_^1_%SET A_,RESET MAXCOR IF 65K MODE_^1_%STA* MAXCOR_^1_%JMP* NN_^1I1_#ADC ($100+I2-PGM)_$INDIRECT I2_^1I2_#ADC $100+I3-PGM_(DIRECT I3_^1I3_#NUM $7F9C_^1MLOOP RTJ- (TTYIN)_^1_%INA -$D_*CR?_^1_%SAZ 1_^1_%JMP* SP_+NO._^1_%LDQ* ADRFLG_'YES_^1_%LDA* REGSTR_^1_%SQZ VALUE_^1ADDR STA* POIN€€TER_^1_%SAP ADROK_(ADDRESS OK IF .LE. $7FFF_^1_%LDA- 0_,ANY ADDRESS OK IF 65K MODE_^1MAXCOR NUM $7FFF_^1_%SAM ADROK_^1_%JMP* NN_+GREATER THAN MSIZV4_^1ADROK ENA 0_^1_%STA* REGSTR_^1_%STA* ADRFLG_^1_%JMP* NXTWRD_^1VALUE STA* (POINTER)_^1_%STQ* REGSTR_^1_%JMP* SP+2_^1SP_"INA $D-$20_(SPACE?_^1_%SAN COMMA_(NO_^1_%LDA* POINTER_^1_%EOR* MAXCOR_^1_%SAZ 1_,SKIP IF AT UPPER LIMIT (M€€SIZV4)._^1_%RAO* POINTER_%YES_^1_%JMP* NXTWRD_^1COMMA INA $20-$2C_'COMMA?_^1_%SAN N_,NO_^1_%LDA* POINTER_%YES_^1_%SAZ 2_,SKIP IF AT LOWER LIMIT (0)._^1_%INA -1_^1_%STA* POINTER_^1_%JMP* NXTWRD_^1N_#INA $2C-$4E_'BIG N_^1_%SAZ NN_+NO_^1_%INA $4E-$6E_%SMALL N_^1_%SAZ 1_^1_%JMP* Z_^1NN_#RTJ- (TTYOUT)_^1_%ALF /,:R:L:LHEX ADDRESS: /_^1_%NUM 0_^1_%ENA 0_^1_%STA* POINTER_^1_%STA€€* REGSTR_^1_%STQ* ADRFLG_'(Q NOT ZERO)_^1_%JMP* MLOOP_^1Z_$INA $6E-$5A_^1_%SAZ ZZ_^1_%INA $5A-$7A_^1_%SAZ ZZ_^1S_$INA $7A-$53_%'S'?_^1_%SAZ SS_^1_%INA $53-$73_%'S'?_^1_%SAN NBRS_^1SS_#JMP* SEARCH_^1ZZ_#JMP LOOPMS_'EXIT DEBUG_^1NBRS_!INA $73-$30_^1_%LDQ* REGSTR_^1_%RTJ* CALCNB_^1_%STQ* REGSTR_'OK RETURN._^1_%JMP* MLOOP_(ERROR RETURN._^1_%SPC 5_^1CALCNB NUM 0_^1_%SAP 2_^€€1ERRCLC RAO* CALCNB_^1_%JMP* (CALCNB)_^1_%INA -10_^1_%SAP 2_^1_%INA -6_^1_%JMP* GOTCHA_^1_%INA 10+$30_'RESTORE ASCII CODE._^1_%AND =N$5F_(REMOVE SMALL CHARACTERS._^1_%INA -$41_^1_%SAP 1_^1_%JMP* ERRCLC_'GT $41_^1_%INA -6_^1_%SAM 1_^1_%JMP* ERRCLC_'NOT HEX_^1GOTCHA INA 6+10_)BINARY IN A._^1_%ALS 12_+BINARY IN UPPER 4 BITS OF A_^1_%LLS 4_,NEW BINARY IN Q_^1_%JMP* (CALCNB)€€_$EXIT._^1_%SPC 3_^1ADRFLG NUM_!0_^1REGSTR NUM 0_^1POINTER NUM 0_^1_%SPC 2_^1NXTWRD LDA* POINTER_^1_%RTJ BINASC_^1_%STA* WD1_^1_%STQ* WD2_^1_%LDA* (POINTER)_^1_%RTJ BINASC_^1_%STA* WD3_^1_%STQ* WD4_^1_%RTJ- (TTYOUT)_^1_%ALF *,:R:L *_^1WD1_"NUM 0_^1WD2_"ALF 2,_^1WD3_"NUM 0_^1WD4_"ALF 2,_^1_%NUM 0_^1_%JMP* MLOOP_^1_%EJT_]_^1SEARCH RTJ- (TTYOUT)_^1_%ALF /,:R:LSTART,STOP€€,VALUE,MASK/_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%ENA -3_+4 ENTRIES_^1_%STA- I_^1_%ENA 0_^1_%STA* SSTRT_(PARM 0_^1_%STA* SSTOP_(PARM 1_^1_%STA* SVALUE_'PARM 2_^1_%SET A_^1_%STA* SMASK_(PARAM 3_^1GTPRM RTJ- (TTYIN)_^1_%INA -$D_*CR?_^1_%SAZ SRCH1_(IF CR, GO TO SRCH2._^1_%INA $D-$7F_'DELETE?_^1_%SAN 1_^1_%JMP* SEARCH_'IT WAS A DELETE. START OVER._^1_%INA $7F-$2C_%COMMA?_^1_%SAZ C€€OMMA1_'SKIP IF COMMA._^1_%INA $2C-$30_%MAKE BINARY_^1_%LDQ* LSTPRM,I_$PARAMETER STORAGE_^1_%RTJ* CALCNB_'MASK & GET BINARY NIBBLE_^1_%STQ* LSTPRM,I_$OK RETURN._^1_%JMP* GTPRM_(ERROR RETURN._^1COMMA1 LDA- I_,TEST POINTER_^1_%SAZ SRCH1_(GO SEARCH IF DONE WITH INPUT._^1_%RAO- I_,BUMP INDEX TO PARMATERS_^1_%JMP* GTPRM_(GO GET NEXT PARAMETER._^1SRCH1 LDA MAXCOR_^1_%SAP 1_^1_%JMP* S€€RCH2_^1_%LDA* SSTRT_^1_%SAM ADRERR_^1_%LDA* SSTOP_^1_%SAP SRCH2_^1ADRERR RTJ- (TTYOUT)_^1_%ALF /,:R:LILLEGAL ADDRESS/_^1_%NUM 0_^1_%JMP* SEARCH_^1_%SPC 2_^1SRCH2 LDA* (SSTRT)_%GET VALUE FROM CORE LOCATION_^1_%EOR* SVALUE_^1_%AND* SMASK_(MASK FOR WANTED BITS_^1_%SAZ MATCH_(SKIP IF MATCH_^1_%LDA* SSTRT_^1_%EOR* SSTOP_(FINISHED?_^1_%SAN 1_,SKIP IF MORE._^1_%JMP* NNEND_(FINISHE€€D. EXIT BACK TO DEBUG._^1_%RAO* SSTRT_(MORE, BUMP ADDRESS POINTER_^1_%JMP* SRCH2_(TRY NEXT ADDRESS._^1_%SPC 1_^1MATCH LDA* SSTRT_(GET ADDRESS_^1_%RTJ BINASC_^1_%STA* MAT1_^1_%STQ* MAT1+1_^1_%LDA* (SSTRT)_%GET CONTENTS_^1_%RTJ BINASC_^1_%STA* MAT2_^1_%STQ* MAT2+1_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:L /_^1MAT1_!ALF 3,_^1MAT2_!ALF 3,_^1_%NUM 0_^1_%RAO* SSTRT_^1_%JMP* SRCH2_(TRY FO€€R MORE._^1_%SPC 1_^1NNEND RTJ- (TTYOUT)_^1_%ALF /,:R:LEND OF SEARCH./_^1_%NUM 0_^1_%JMP NN_+BACK TO DEBUG._^1_%SPC 5_^1SSTRT NUM 0_,START ADDRESS FOR SEARCH_^1SSTOP NUM 0_,STOP ADDRESS FOR SEARCH_^1SVALUE NUM 0_,VALUE TO SEARCH CORE FOR_^1SMASK NUM $FFFF_(MASK OF WANTED BITS DURING SEARCH._^1LSTPRM EQU LSTPRM(*-1)_^1_%EJT_]_^1*_*R E C O V E R Y_!F R O M_!T A P E_!E R€€ R O R S_^1_%SPC 2_^1RCVRY1 RTJ- (TTYOUT)_^1_%ALF /,:R:L:LRECOVERY NOT ATTEMPTED/_^1_%NUM 0_^1_%ENQ 0_^1_%JMP- ($FE)_(RETURN TO 'PGM', QZERO._^1_%SPC 5_^1RCVRY2 NUM 0_,PRINT STATUS IN REGISTER A_^1_%STA* SVSTAT_^1_%SAP BIT14_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LPROTECT FAULT/_^1_%NUM 0_^1BIT14 RTJ* TSTBIT_^1_%JMP* BIT13_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LSTOR. PAR. ERROR/_^1_%NU€€M 0_^1BIT13 RTJ* TSTBIT_^1_%NOP 0_^1BIT12 RTJ* TSTBIT_^1_%JMP* BIT11_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LCONTROLLER ACTIVE/_^1_%NUM 0_^1BIT11 RTJ* TSTBIT_^1_%JMP* BIT10_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LFILE MARK/_^1_%NUM 0_^1BIT10_!RTJ* TSTBIT_^1_%JMP* BIT9_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LLOAD POINT/_^1_%NUM 0_^1BIT9_!RTJ* TSTBIT_^1_%JMP* BIT8_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:L€€END OF TAPE/_^1_%NUM 0_^1BIT8_!RTJ* TSTBIT_^1_%JMP* BIT7_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LPARITY ERROR/_^1_%NUM 0_^1BIT7_!RTJ* TSTBIT_^1_%JMP* BIT6_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LPROTECTED/_^1_%NUM 0_^1_%JMP* BIT6_^1_%SPC 1_^1TSTBIT NUM 0_^1_%LDA* SVSTAT_^1_%ALS 1_^1_%STA* SVSTAT_^1_%SAP NOTSET_^1_%RAO* TSTBIT_'RETURN IF BIT SET TO 2ND WORD._^1NOTSET JMP* (TSTBIT)_^1SVSTAT€€ NUM 0_^1_%SPC 1_^1BIT6_!RTJ* TSTBIT_^1_%JMP* BIT5_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LLOST DATA/_^1_%NUM 0_^1BIT5_!RTJ* TSTBIT_^1_%JMP* BIT4_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LALARM/_^1_%NUM 0_^1BIT4_!RTJ* TSTBIT_^1_%JMP* BIT3_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LEND OF OPERATION/_^1_%NUM 0_^1BIT3_!RTJ* TSTBIT_^1_%JMP* BIT2_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LDATA/_^1_%NUM 0_^1BIT2_!RTJ€€* TSTBIT_^1_%JMP* BIT1_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LINTERRUPT/_^1_%NUM 0_^1BIT1_!RTJ* TSTBIT_^1_%JMP* BIT0_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LBUSY/_^1_%NUM 0_^1BIT0_!RTJ* TSTBIT_^1_%JMP* BT0OFF_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LREADY/ N_^1_%NUM 0_^1NOMORE RTJ- (TTYOUT)_^1_%ALF /,:R:L:L:LNO RECOVERY ATTEMPTED.:R:L:L:L:B:B:B/_^1_%NUM 0_^1_%JMP (RCVRY2)_$EXIT._^1_%SPC 3_^1BT0€€OFF RTJ- (TTYOUT)_^1_%ALF /,:R:L**NOT READY**/_^1_%NUM 0_^1_%JMP* NOMORE_^1_%SPC 2_^1ENDLOC EQU X9($100+*-PGM)_!***CORE LOCATION***_^1_%SPC 4_^1ENDLOC EQU ENDLOC(*)_^1LPGM_!EQU LPGM(*-PGM)_^1_%BZS (96+LPGM/96*96-LPGM)_!DUMMY FILL TO END OF RECORD_^1_%EJT_]_^1* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *_^1*_!THIS PROGRAM WRITES ADDRESS TAGS OR TAGS PLUS DA€€TA ON THE *_^1*_!ENTIRE DISK OR ON ONLY THE REMOVABLE PART OF THE DISK._"*_^1* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *_^1_%SPC 1_^1START EQU X10($4000)_%***CORE LOCATION***_^1START SWN 1_^1_%JMP* S2_+SKIP FOR SHORT MESSAGE_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:L:LCYBERDATA DISK INITIALIZER, VERSION 3:R:L/_^1_%NUM 0_^1S2_#SWS S3_+SKIP FOR SHORT MESSAGE_^1_%RTJ€€- (TTYOUT)_^1_%ALF /,:R:LWHICH DISK NOW? /_^1_%NUM 0_^1S3_#RTJ- (TTYOUT)_^1_%ALF /,(1,2,3, OR 4) :R:L/_^1_%NUM 0_^1_%RTJ- (TTYIN)_^1_%INA -$35_^1_%SAM 1_^1_%JMP* S2_+ERROR - .GT. 4 ($34)_^1_%INA 4_^1_%SAP 1_^1_%JMP* S2_+ERROR - .LT. 0 ($30)_^1_%ALS 9_,UNIT NUMBER TO BITS 9,10_^1_%ADD =N$100_'UNIT 0 SELECT_^1_%STA USEL_^1TAGDAT RTJ- (TTYOUT)_^1_%ALF /,:R:LTYPE R OR E/_€€^1_%NUM 0_^1_%SWN 1_^1_%JMP* TG1_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:L R TO INITIALIZE 'REMOVABLE' CARTRIDGE/_^1_%ALF /,:R:L E TO INITIALIZE 'ENTIRE' DISK/_^1_%NUM 0_^1TG1_"RTJ- (TTYOUT)_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%RTJ- (TTYIN)_^1_%AND =N$5F_^1_%INA -$45_)TEST FOR E_^1_%SAZ ENTIRE_^1_%INA $45-$52_%TEST FOR R_^1_%SAZ REMOV_^1_%JMP* TAGDAT_'ILLEGAL RESPONSE, TRY AGAIN._^1_€€%SPC 1_^1ENTIRE RTJ- (TTYOUT)_^1_%ALF /,:R:L:RENTIRE/_^1_%NUM 0_^1_%LDA- 0_,LDA W/ NEXT WORD_^1_%INA $20_*REMOVABLE + FIXED_^1_%JMP* RE_^1REMOV RTJ- (TTYOUT)_^1_%ALF /,:R:LREMOVABLE/_^1_%NUM 0_^1_%LDA- 0_,LDA W/ NEXT WORD_^1_%INA $40_*REMOVABLE_^1RE_#STA SET_*CHANGE LOCATION 'SET'_^1_%SWS OPT22_^1_%RTJ- (TTYOUT)_^1_%ALF /, DISK WILL BE INITIALIZED/_^1_%NUM 0_^1OPT22 RT€€J- (TTYOUT)_^1_%ALF /,:R:L:LTYPE: T OR D/_^1_%NUM 0_^1_%SWN 1_^1_%JMP* TG2_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:L T TO WRITE JUST ADDRESS TAGS/_^1_%ALF /,:R:L D TO WRITE ADDRESS TAGS AND SCRATCH 'DATA'/_^1_%NUM 0_^1TG2_"RTJ- (TTYOUT)_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%RTJ- (TTYIN)_^1_%AND =N$5F_^1_%INA -$44_)TEST FOR D_^1_%SAZ DATA_^1_%INA $44-$54_%TEST FOR T_^1_%SAN 1_^1_%JMP*€€ TAG_^1_%JMP TAGDAT_^1DATA_!RTJ- (TTYOUT)_^1_%ALF /,:R:LDATA AND TAGS /_^1_%NUM 0_^1_%LDA- 0_,NOP THE JMP INSTRUCTION SO DATA IS WRITTEN_^1NOP_"NOP 0_,(PART OF 2 WORD INSTRUCTION)_^1_%JMP* TD_^1TAG_"RTJ- (TTYOUT)_^1_%ALF /,:R:LTAGS ONLY /_^1_%NUM 0_^1_%LDA- 0_^1JMP_"JMP* *+BUMPAD-DSWTCH_^1TD_#STA DSWTCH_^1_%SWN 1_^1_%JMP* GODOIT_'SKIP FOR SHORT MESSAGE_^1_%RTJ- (TTYOUT)_^1_€€%ALF /,WILL BE WRITTEN./_^1_%ALF /,:R:L:LCHANGE DISK PACK IF NECESSARY:B:B:L:L/_^1_%NUM 0_^1_%LDA DSWTCH_^1_%SUB* NOP_^1_%SAZ 1_^1_%JMP* GODOIT_^1_%RTJ- (TTYOUT)_^1_%ALF *,:R:L/////WARNING/////:R:LANY DATA ON DISK WILL BE LOST.*_^1_%NUM 0_^1GODOIT EQU X11($4000+*-START)_"***CORE LOCATION***_^1GODOIT RTJ- (TTYOUT)_^1_%ALF /,:R:LTYPE 'I'/_^1_%NUM 0_^1_%SWN 1_^1_%JMP* GD1_€€^1_%RTJ- (TTYOUT)_^1_%ALF /, TO INITIALIZE DISK/_^1_%ALF /,:R:LCR TO ABORT./_^1_%NUM 0_^1GD1_"RTJ- (TTYOUT)_^1_%NUM $D0A,0_^1_%RTJ- (TTYIN)_^1_%AND =N$5F_^1_%INA -$49_^1_%SAZ CONDSK_^1_%JMP S2_^1CONDSK RTJ- (TTYOUT)_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%LDQ* EWES_^1_%LDA* USEL_^1_%OUT DSKREJ-*_^1_%INP DSKREJ-*_^1_%ALS 12_^1_%SAM 1_^1_%JMP* DSKREJ_^1_%ALS 3_^1_%SAM 1_,SKIP I€€F READY_^1_%JMP* DSKREJ_'NOT ON CYL, AND NOT READY_^1_%SWS GD2_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LDISK IS/_^1_%NUM 0_^1GD2_"RTJ- (TTYOUT)_^1_%ALF /,BEING INITIALIZED:R:L/_^1_%NUM 0_^1_%RTJ* TAGS_^1_%SWS GD3_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LDISK HAS /_^1_%NUM 0_^1GD3_"RTJ- (TTYOUT)_^1_%ALF /,BEEN INITIALIZED.:R:L/_^1_%NUM 0_^1_%SWN 1_^1_%JMP* GD4_*SKIP FOR SHORT MESSAGE_^1_%R€€TJ- (TTYOUT)_^1_%ALF /,:R:LDO YOU WANT TO INITIALIZE/_^1_%NUM 0_^1GD4_"RTJ- (TTYOUT)_^1_%ALF_!*,ANOTHER DISK? (Y/N):R:L*_^1_%NUM 0_^1_%RTJ- (TTYIN)_^1_%AND =N$5F_^1_%ENQ 0_^1_%INA -$50_^1_%SAM GD5_*'YES'_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:L/_^1_%NUM 0_^1_%JMP S2_^1GD5_"RTJ- (TTYOUT)_$'NO'_^1_%ALF /,:R:L:LTYPE:/_^1_%NUM 0_^1_%ENQ 0_^1_%JMP- ($FE)_(RETURN TO MINI - OP - SYS€€TEM._^1_%SPC 1_^1DSKREJ NOP 0_^1_%RTJ- (TTYOUT)_^1_%ALF /,:R:LDISK ISN'T READY:R:L/_^1_%NUM 0_^1_%JMP GODOIT_^1_%EJT_]_^1EWES_!NUM $181_^1USEL_!NUM $100_^1_%SPC 5_^1TAGS_!EQU X13($4000+*-START)_"***CORE LOCATION***_^1TAGS_!NOP_]_^1WRTTAG LDQ* EWES_^1_%LDA* USEL_)UNIT SELECT_^1_%OUT -1_^1_%INQ -1_^1_%NOP 0_,CLEAR CONTROLLER_^1_%INP -1_^1_%RTJ* STATUS_'RETURNS WITH Q SET€€ TO EWES_^1_%ENA 0_,INITIALIZE ADDRESS NUMBER_^1LOOP_!STA* ADDRES_^1_%INQ 1_^1_%NOP 0_,LOAD ADDRESS_^1_%OUT -1_^1_%RTJ* STATUS_^1_%INQ 6_^1_%NOP 0_,WRITE ADDRESS_^1_%OUT -1_^1_%RTJ* STATUS_^1DSWTCH JMP* BUMPAD_'JUMP FOR TAGS ONLY_^1_%LDA* ADDRES_^1_%INQ 1_^1_%NOP 0_,LOAD ADDRESS_^1_%OUT -1_^1_%RTJ* STATUS_^1_%LDA =N$AE0_^1_%INQ -1_^1_%NOP 0_,LOAD BUFFER LENGTH_^1_%OUT €€ -1_^1_%INQ 3_^1_%ENA 0_,WRITE DATA_^1_%OUT -1_^1_%RTJ* STATUS_^1BUMPAD LDA* ADDRES_^1SET_"INA $20_*INIT CART + FIXED ($40 FOR CART ONLY)_^1_%JMP* LOOP_^1_%EJT_]_^1STATUS NOP 0_^1_%LDQ* EWES_)GET EQUIP CODE_^1STATS1 INP -1_+GET DIRECTOR STATUS_^1_%STA* TMP_^1_%AND =N$8400_^1_%SAZ MORCHK_'SKIP IF NO ADDRESS ERROR_^1_%LDQ* EWES_^1_%INQ -1_^1_%NOP 0_,CLEAR CONTROLLER_^1_%INP€€ -1_^1_%JMP* (TAGS)_'PROGRAM EXIT_^1MORCHK LDA* TMP_^1_%AND =N$1B_(GET EOP + ON CYL + BUSY + READY BITS_^1_%SUB =N$19_^1_%SAZ XIT_*SKIP IF EOP, ON CYL, READY + NOT BUSY_^1_%JMP* STATS1_^1XIT_"JMP* (STATUS)_^1_%SPC 1_^1TMP_"NUM 0_,TEMPORARY DIRECTOR STATUS_^1ADDRES NUM 0_^1_%SPC 10_^1_%EQU SIZTAG(*-START)_^1SIZTAG EQU X15($4000+SIZTAG)_#***CORE LOCATION***_^1_%BZS (96+SIZ€”TAG/96*96-SIZTAG) DUMMY FILL TO END OF RECORD_^1_%EQU SZTAGS(*-START)_^1END_"EQU X16($4000+SZTAGS)ENDING CORE LOCATION * * * *_^1_%END START_^__”PSUPLP CSY/ Pβ1_%NAM SUPLP_(SUP 1.0+CYB_^1_%ENT SUPLP_^1SUPLP NOP 0_^1GETIT GTFILE 0,NME-GETIT-1,STRT,20,0_^1_%NUM 0,0_^1_%LDA* GETIT+3_^1_%SAZ IN-*-1_^1_%JMP* *-2_^1NME_"ALF 3,SUPFIL_^1IN_#NOP 0_^1_%EQU STRT(*)_^1_%END SUPLP_^__βPTAPUTL CSY/ P€1_%NAM TAPUTL_'SUP 1.0+CYB_^1_%ENT_"WTOR_^1_%ENT_"TAPUTL_^1_%ENT_"MESAGE_^1_%ENT_"RMESS_^1_%EXT_"GETLOC_^1_%EXT_"FNN_^1_%ENT_"INBUF2_^1_%ENT_"SCCB_^1_%ENT_"RESTRT_^1_%ENT_"SCCBM1_^1_%ENT_"TTYDMB,TTYDM1_^1_%ENT_"STATIS,SYSERR_^1_%EXT_"PRINT_^1_%ENT_"LBYTE2_^1_%EXT_"LBYTE_^1_%ENT_"COUNT1,COUNT2_^1_%EXT_"DMBTM1,RELBUF_^1_%SPC_"4_^1TAPUTL EQU_"TAPUTL(*)_^1_%ENA_"4_^1_%RTJ_"SETCNT_^1CN€€TRST NUM_"0_^1_%LDA_"=XDMBTM1_^1_%STA-_!$FF_^1TAPRST EQU_"TAPRST(*)_^1_%LDQ-_!1,I_^1_%INQ_"-1 CLEAR DMBS ON INITIAL ENTRY AND RESTART AFTER ERROR_^1_%CLR_"A_^1_%EQU_"IOBFLG(1)_^1_%EQU_"ABUFFP(6)_^1_%STA-_!IOBFLG,Q_!CLEAR IOBFLG_^1_%LDA-_!ABUFFP,Q_!RELEASE BUFFER IF NECESSARY_^1_%SAZ_"TAPR2_"IF ZERO NOTHING TO RELEASE_^1_%RTJ_"RELBUF_^1TAPR2 EQU_"TAPR2(*)_^1_%RAO-_!$FF INC INDEX €€TO DMB TABLE_^1_%RAO*_!CNTRST DONE?_^1_%SOV_"1_^1_%JMP*_!TAPRST_!KEEP CLEARING_^1_%RTJ*_!FMTMSG WRITE SIGN ON_^1_%ADC_"MESS1_^1RESTRT EQU_"RESTRT(*)_%RENTRY POINT_^1_%RTJ*_!WTOR_'TYPE NEXT AND GET RESPONSE_^1_%ADC_"MESS2_^1_%RTJ_"FNN_^1_%STA*_!FNCALL_#FUNCTION ROUTINE ADDRESS IN A_^1_%SAM_"INVAL_'IF INVALID FUNCTION_^1_%RTJ*_!(FNCALL)_#CALL THE FUNCTION IF A IS NOT NEGATIVE_^1INV€€AL EQU_"INVAL(*)_^1_%JMP*_!RESTRT_^1FNCALL NUM_"0_!HOLD ADDRESS FOR FUNCTION CALL_^1_%SPC_"4_^1**** SCAN CONTROL BLOCK ****_^1SCCB_!ADC_"INPBUF_#ADDRESS OF INPUT BUFFER_^1_%ADC_"IMAXLN_'WORD SIZE OF INPUT BUFFER_^1_%NUM_"0_-SNCA - CHAR. ADDRS. - NEXT IN BUFFER_^1_%NUM_"0_-SCPHR - CHAR. ADDRESS OF CUR. PHRASE_^1_%NUM_"0_-SCPHL - LENGTH OF CURRENT PHRASE_^1_%NUM_"0_,SCFLG - FIRST €€PHRASE CHECK_^1_%NUM_"0_,SCNUM - HEX. NO. ASSOC. WITH CURR. PHRASE_^1_%NUM_"0_-EOS - ADDRS OF END OF SCAN PROCESSING_^1SCCBM1 EQU_"SCCBM1(SCCB-1)_^1_%EQU_"IMAXLN(40)_^1_%EQU_"SAINP(1)_^1_%EQU_"SINPLN(SAINP+1)_^1_%EQU_"SNCA(SINPLN+1)_^1_%EQU_"SCPHR(SNCA+1)_^1_%EQU_"SCPHL(SCPHR+1)_^1_%EQU_"SCFLG(SCPHL+1)_^1_%EQU_"SCNUM(SCFLG+1)_^1_%EQU_"EOS(SCNUM+1)_^1_%SPC_"4_^1****** COMMUNICATION€€ ROUTINES ****_^1_%SPC_"4_^1************************************************_^1* RMESS- READ A MESSAGE FROM THE TTY_)*_^1* CALLING SEQUENCE: RTJ* RMESS_-*_^1*_4ADC_!SCCB-1_,*_^1* SCCB IS THE ADDRESS OF A PARAMETER LIST_#*_^1* CONTAINING POINTERS TO INPUT BUFFERS ETC._!*_^1******************************************_^1CIN_"NUM_"$8FD_^1COUT_!NUM_"$8FC_^1RMESS NOP_]_^1_%LDA*_!C€€IN_+READ REQUEST_^1_%STA*_!TTRCOD_^1_%LDQ*_!(RMESS)_)GET ADDR OF SCAN CONTROL BLOCK_^1_%LDA-_!SAINP,Q_)GET ADDR TO PUT RECORD_^1_%STA*_!ABLOK_^1_%STA*_!AREC_^1_%LDQ*_!ATYDM1_^1_%RTJ_"GETLOC_,READ RECORD_^1_%LDQ*_!LREC_-COMPUTE LAST WORD ADDRESS_^1_%QRS_"1_^1_%ADQ*_!AREC_^1_%INQ_"-1_^1_%SET_"A_2STORE END OF SCAN MARKER_^1_%STA-_!1,Q_^1_%LDQ*_!(RMESS)_^1_%LDA*_!AREC_^1_%ALS_"1_^1_%ST€€A-_!SNCA,Q_#PUT ADDR OF RECORD IN SCCB_^1_%LDA*_!TTYBF_)RESTORE TTYDMB_^1_%STA*_!ABLOK_^1_%STA*_!AREC_^1_%CLR_"A_^1_%STA*_!LBLOK_^1_%LDA*_!COUT_^1_%STA*_!TTRCOD_^1_%RAO*_!RMESS_^1_%JMP*_!(RMESS)_)RETURN_^1TTYDMB NUM_"$C000,0,0,0_^1TTRCOD NUM_"$8FC_^1TTYBF ADC_"TTYBUF_^1_%NUM_"0,72,72_^1ABLOK ADC_"TTYBUF_^1LBLOK NUM_"$0_^1AREC_!ADC_"TTYBUF_^1LREC_!NUM_"0,0,0,0,0,0,0_^1TTYBUF BZS_€€"TTYBUF(8)_^1INBUF2 BZS_"INBUF2(6)_,FOR RETYPING OF PARAMETERS_^1INPBUF BZS_"INPBUF(36)_*MAIN BUFFER FOR ENTRY OF PARAMETERS_^1TTYDM1 EQU_"TTYDM1(TTYDMB-1)_^1*****************************_^1_%EQU_"ABUFF(1)_^1_%EQU_"LENGTH(2)_^1_%EQU_"MLN(2)_^1_%EQU_"RLN(3)_^1_%SPC_"4_^1*******************************************_^1* FMTMSG- FORMATS MESSGE TO TTY USING_"*_^1*_*PRINT ROUTINE_0*_^1**€€*****************************************_^1_%SPC_"4_^1_%ENT_"FMTMSG_^1FMTMSG NOP_"0_%ENTRY_^1_%STA*_!DTLSTA_$USE A AS DATA LIST POINTER IF USED_^1_%LDA*_!(FMTMSG)_#RETRIEVE FORMAT ADDRESS_^1_%STA*_!FMTADR_^1_%SPC_"2_^1*_!CALL PRINT_^1_%SPC_"2_^1_%RTJ*_!(XPRINT)_^1FMTADR NUM_"0_^1DTLSTA NUM_"0_^1ATYDM1 ADC_"TTYDM1_^1_%RAO*_!FMTMSG_!INCREMENT FOR RETURN_^1_%JMP*_!(FMTMSG)_"RETURN_^1€€_%SPC_"4_^1************************************************_^1*_M*_^1* WTOR - WRITES MESSAGE TO OPERATOR AND_%*_^1*_)ACCEPTS RESPONSE._2*_^1*_#CALL - RTJ WTOR_^1*_*(P+1) = SCCB-1_4*_^1*_M*_^1************************************************_^1_%SPC_"4_^1WTOR_!NOP_]_^1_%LDQ*_!(WTOR)_(GET ADDR OF MESSAGE_^1_%STQ*_!WTMSG_^1_%RTJ*_!FMTMSG_#WRITE MASSAGE_^1WTMSG ADC_"$0_^1_%RTJ*_!RMESS€€_'READ RESPONSE_^1_%ADC_"SCCB-1_^1_%LDQ*_!*-1_^1_%STQ-_!$FF_^1_%RTJ_"SCAN_(SCAN RESPONSE_^1_%RAO*_!WTOR_^1_%JMP*_!(WTOR)_%RETURN_^1_%SPC_"4_^1*************************************************_^1*_P*_^1* MESAGE - WRITE FILE(S) NOT OPEN ON TTY_%*_^1*************************************************_^1_%SPC_"4_^1MESAGE RTJ*_!FMTMSG_'WRITE MESSAGE_^1_%ADC_"MESG1_^1_%JMP_"RESTRT_^1*****€€*******************_^1* SYSTEM ERROR ROUTINE *_^1************************_^1_%SPC_"4_^1SYSERR NOP_"$0_^1_%CLR_"Q_^1_%LLS_"11_$W,C,OR S?_^1_%STQ*_!WTOR_$USE IT AS TEMP STORAGE_^1_%ALS_"5_%ERROR NUMBER_^1_%STA*_!ERNUM_^1_%LDA*_!CODLST,Q_^1_%STA*_!CODE_^1_%RTJ*_!(XPRINT)_^1_%ADC_"FORSMT_^1_%ADC_"ERDATA_^1_%ADC_"TTYDM1_^1_%LDQ*_!WTOR_^1_%JMP*_!RETAB,Q_^1RETAB EQU_"RETAB(*)_^1_%JMP*_!(€€SYSERR)_%RETN TO CALLER_^1_%JMP*_!TSCOPE_^1_%JMP*_!TAPUT_^1TSCOPE RTJ-_!($F4)_#CALL TAPE SCOPE_^1_%ADC_"$A00_^1TAPUT JMP_"RESTRT_^1ERDATA EQU_"ERDATA(*)_^1_%ALF_"2,****_^1CODE_!NUM_"$0_*W,C,OR S_^1ERNUM NUM_"$0_)ERROR NUMBER_^1CODLST EQU_"CODLST(*)_^1_%NUM_"$5700_^1_%NUM_"$4300_^1_%NUM_"$5300_^1FORSMT ALF_"7,4A1X1A3D4-4A;_^1XPRINT ADC_"PRINT_^1*********************************_^1€€* STATISTICS PRINTING ROUTINE_!*_^1*********************************_^1_%SPC_"4_^1_%EXT_"INPUT_^1_%EXT_"OUTPUT_^1_%EXT_"PRNDMB_^1_%EXT_"PRNM1_^1TTYM1 ADC_"TTYDM1_^1INP_"ADC_"INPUT_^1OUT_"ADC_"OUTPUT_^1PRT_"ADC_"PRNDMB_^1PRTM1 ADC_"PRNM1_^1_%SPC_"4_^1STATIS NOP_]_^1_%LDA*_!TTYM1_^1_%STA*_!OUTDMB_^1_%LDA*_!(PRT)_^1_%SAP_"NEXT1_^1_%LDA*_!PRTM1_^1_%STA*_!OUTDMB_^1_%LDA*_!STFOLS_^1_%L€€DQ*_!PRT_^1_%RTJ*_!PRNT_^1NEXT1 LDA*_!(INP)_^1_%SAP_"NEXT2_^1_%LDA*_!STFOLS+1_^1_%LDQ*_!INP_^1_%RTJ*_!PRNT_^1NEXT2 LDA*_!(OUT)_^1_%SAP_"NEXT3_^1_%LDA*_!STFOLS+2_^1_%LDQ*_!OUT_^1_%RTJ*_!PRNT_^1_%LDA*_!(PRT)_^1_%SAP_"NXTNXT_^1_%LDA*_!STFOLS+3_^1_%RTJ*_!PRNT_%ISSUE PAGE EJECT IF PRINT FILE OPEN_^1NXTNXT CLR_"A_^1_%LDQ*_!PRT_^1_%STA-_!13,Q_^1NEXT3 JMP*_!(STATIS)_^1PRNT_!NOP_"$0_^1_%€€STA*_!STFOST_^1_%INQ_"13_^1_%STQ*_!STDATA_^1_%RTJ*_!(XPRINT)_^1STFOST ADC_"$0_^1STDATA ADC_"$0_^1OUTDMB ADC_"$0_^1_%JMP*_!(PRNT)_^1STFOLS ADC_"STFOR1_^1_%ADC_"STFOR2_^1_%ADC_"STFOR3_^1_%ADC_"STFOR4_^1STFOR1 ALF_"11,E5D14C LINES PRINTED;_^1STFOR2 ALF_"20,5D13C INPUT BLOCKS/5D14C INPUT RECORDS;_^1STFOR3 ALF_"21,5D14C OUTPUT BLOCKS/5D15C OUTPUT RECORDS;_^1STFOR4 ALF_"1,E*_^1MESS1 ALF€€_"10,16C**TAPE UTILITY**;_^1MESS2 ALF_"6,8C*NEXT: ;_^1MESG1 ALF_"10,16CFILE(S) NOT OPEN;_^1_%SPC_"4_^1_%ENT_"SBYTE,SETCNT_^1_%ENT_"SETCT2_^1_%SPC_"4_^1***********************************_^1* SBYTE - STORE A BYTE IN BUFFER *_^1***********************************_^1_%SPC_"4_^1SBYTE NOP_"0_"ENTRY (Q) = CHARACTER ADDRESS_^1_%QLS_"15_/(A) = CHARACTER RIGHT JUSTIFIED_^1_%INQ_"-1_^1€€_%STA*_!TEMPX_^1_%STQ*_!QPCK1+1_K**65K**_^1_%SQP_"1_Q**65K**_^1_%ADQ-_!$11_O**65K**_^1_%LDA-_!1,Q_$GET WORD_^1QPCK1 LDQ_"=N0_O**65K**_^1_%SQM_"SBYTE1_^1_%ALS_"8_^1SBYTE1 AND_"=N$FF00_^1_%EOR*_!TEMPX_^1_%SQM_"SBYTE2_^1_%ALS_"8_^1SBYTE2 STQ*_!QPCK2+1_K**65K**_^1_%SQP_"1_Q**65K**_^1_%ADQ-_!$11_O**65K**_^1_%STA-_!1,Q_O**65K**_^1QPCK2 LDQ_"=N0_O**65K**_^1_%QLS_"1_%RETURN Q TO ORIGINAL€€ STATE_^1_%INQ_"3_^1_%JMP*_!(SBYTE)_!RETURN WITH Q = TO NEXT STORE ADDRESS_^1TEMPX NUM_"0_^1_%SPC_"4_^1********************************_^1* SETCNT - ROUTINE TO COUNT_!*_^1*_*USING THE OVFL IND *_^1* CALLING SEQUENCE_+*_^1*_$RTJ SETCNT_-*_^1*_$NUM 0 WORD TO USE FOR *_^1*_,COUNTING BY RAO* *_^1*_#(A) = MAXIMUM COUNT_$*_^1********************************_^1_%SPC_"4_^1SETCNT NOP_"€€0_!ENTRY_^1SETCT2 EQU_"SETCT2(SETCNT)_^1_%EOR_"=N$7FFF_$COMPUTE INVERSE COUNT AS OVERFLOW INDICATOR_^1_%INA_"1_^1_%STA*_!(SETCNT)_^1_%SOV_"0_"CLEAR THE OVERFLOW INDICATOR_^1_%RAO*_!SETCNT_^1_%JMP*_!(SETCNT) RETURN_^1_%ENT_"CLRRGN_^1_%SPC_"4_^1******************************_^1* CLRRGN - CLEARS CORE_%*_^1*_"CALLING SEQUENCE_'*_^1*_"(Q) = FWA - 1_**_^1*_"(A) = NUMBER OF WORDS_!*_^1*_#€€RTJ CLRRGN_^1******************************_^1_%SPC_"4_^1CLRRGN NOP_"0_#ENTRY_^1_%RTJ*_!SETCNT_^1CLRCNT NUM_"0_^1_%STQ*_!SETCNT_#SAVE ORIGINAL VALUE OF Q_^1_%CLR_"A_^1CLRLOP EQU_"CLRLOP(*)_^1_%STA-_!1,Q_^1_%INQ_"1_^1_%RAO*_!CLRCNT_^1_%SOV_"CLREXT_^1_%JMP*_!CLRLOP_^1CLREXT EQU_"CLREXT(*)_^1_%LDQ*_!SETCNT_#RESTORE Q_^1_%JMP*_!(CLRRGN)_!RETURN_^1_%SPC_"4_^1*** THIS ROUTINE IS CALLED €€BY THE FUNCTION ROUTINE ***_^1*** TO CONTINUE THE SCAN OF THE FUNCTION STATEMENT ***_^1*** AND TO SET UP STANDARD PARAMETERS_-***_^1_%ENT_"SPARM,SCFNT,SRCNT_^1_%EXT_"PSRCH,SCAN_^1_%ENT_"STNDMP_^1_%EXT_"INPM1,OUTM1,FPARM_^1W1_#EQU_"W1(1)_^1W2_#EQU_"W2(2)_^1_%EQU_"DEQU5(6)_^1_%EQU_"DEQU6(DEQU5+1)_^1_%EQU_"DEQU7(DEQU6+1)_^1_%ENT_"FCOUNT,RCOUNT_^1_%SPC_"4_^1_%EXT_"RETYPE_^1SPARM NOP€€_"0_-ENTRY_^1_%LDA*_!(SPARM) SET I REGISTER EQUAL TO SCCB-1_^1_%INA_"-1_^1_%STA-_!$FF_^1_%RAO*_!SPARM SET UP FOR NEXT PARAMETER_^1SPARM1 RTJ_"SCAN_)SCAN A PHRASE_^1_%SAP_"SPCON_.CONTINUE- NOT END OF SCAN_^1SPARM2 EQU_"SPARM2(*)_^1_%RAO*_!SPARM_-INCREMENT RETURN ADDRESS_^1_%JMP*_!(SPARM)_+EXIT TO END OF PARAM. ROUTINE_^1SPCON EQU_"SPCON(*)_^1_%LDA*_!(SPARM)_^1_%STA*_!SPARM3_^1_%RT€€J_"PSRCH_^1SPARM3 NUM_"0_"ARS. OF TBL TO SEARCH_^1_%STA*_!SPRTN+1_+SAVE ADDR IF PRESENT_^1_%SAP_"SPRTNX_!CALL PROPER ROUTINE_^1_%RTJ_"RETYPE_^1_%SAP_"RTSP1_^1_%JMP*_!SPARM1_"NEGATED PARM_^1RTSP1 EQU_"RTSP1(*)_^1_%JMP*_!SPCON_^1SPRTNX EQU_"SPRTNX(*)_^1_%LDQ*_!IDMBM1_^1SPRTN RTJ+_!0_!*MODIFIED ADDRESS FOR ROUTINE PROCESSING_^1_%JMP*_!SPARM1_+GO PROCESS NEXT PARAM._^1**************€€***************************************_^1*****************************************************_^1SCFNT NOP_"0_$ENTRY_^1_%LDA-_!DEQU5,I_"IS SCFLG=0_^1_%SAN_"SCFER1_!NO SKIP (ERROR)_^1_%LDA-_!DEQU6,I_"SCNUM=0_^1_%SAN_"SCF1_'OK - SKIP_^1SCFER1 ENA_"W1_^1_%RTJ_"SYSERR_^1_%JMP*_!SCF2_^1SCF1_!STA*_!FCOUNT_^1SCF2_!JMP*_!(SCFNT)_'ECIT_^1***************************************************€€**_^1FCOUNT NUM_"0_^1RCOUNT NUM_"0_^1*********************************************************_^1SRCNT NOP_"0_$ENTRY_^1_%LDA-_!DEQU5,I_"IS SCFLG = 0_^1_%SAN_"SRCER1_^1_%LDA-_!DEQU6,I_"SCNUM=0_^1_%SAN_"SRC1_'OK - SKIP_^1SRCER1 ENA_"W2_^1_%RTJ_"SYSERR_^1_%JMP*_!SRC2_%EXIT_^1SRC1_!STA*_!RCOUNT_^1SRC2_!JMP*_!(SRCNT)_'EXIT_^1*******************************************************_^1IDM€€BX ADC_"INPM1_^1IDMBM1 ADC_"INPM1_^1ODMBM1 ADC_"OUTM1_^1_%SPC_"4_^1********************************************_^1*_I*_^1* COUNT1 - COUNT NUMER OF RECORDS TO_$*_^1*_*PROCESS._6*_^1********************************************_^1_%SPC_"2_^1COUNT1 NOP_"$0_^1_%LDA*_!RCOUNT_^1_%SAZ_"COUT1X_"RCOUNT=0_^1_%SAM_"COUT1X_#RCOUNT=NEGATIVE_^1_%INA_"-1_^1_%STA*_!RCOUNT_^1COUT1X JMP*_!(COUNT1)_€€^1_%SPC_"4_^1*********************************************_^1*_J*_^1* COUNT2 - COUNT NUMBE OF FILES TO PROCESS *_^1*********************************************_^1_%SPC_"2_^1COUNT2 NOP_"$0_^1_%LDA*_!FCOUNT_^1_%SAZ_"COUT2X_^1_%INA_"-1_^1_%STA*_!FCOUNT_^1COUT2X JMP*_!(COUNT2)_^1_%SPC_"4_^1***********************************************_^1*_L*_^1* LBYTE2 - CAALS LBYTE TO STORE CHARA€€CTER_"*_^1*N_)AND INCREMENTS BUFFER POINTER_#*_^1***********************************************_^1_%SPC_"2_^1LBYTE2 NOP_"$0_^1_%LDQ*_!(LBYTE2)_^1_%RTJ_"LBYTE_^1_%STQ*_!(LBYTE2)_^1_%RAO*_!LBYTE2_^1_%JMP*_!(LBYTE2)_^1_%SPC_"4_^1***********************************_^1* ROUTINE TO SET UP STANDARD PARMS*_^1***********************************_^1_%SPC_"4_^1_%EXT_"DUIND_^1STNDMP NOP_"0_!EN€€TRY TO STNDMP_^1_%LDA*_!XDUIND_^1_%INA_"1_^1_%CLR_"A_^1_%SOV_"1_%IF DUMP NOT PRESENT_^1_%STA*_!(XDUIND)_'CLEAR DUMP INDEX_^1_%STA*_!FCOUNT_^1_%LDQ*_!IDMBM1_^1_%LDA-_!RECCNT,Q_"GET NO. OF RECORDS PROCESSED_^1_%SAZ_"NOCLEAR_!FILE JUST OPENED DONT CLEAR SELECTION_^1_%CLR_"A_^1_%STA-_!ASLCT1,Q_^1_%STA-_!ASLCT2,Q_^1_%STA-_!ASLCT3,Q_^1NOCLEA EQU_"NOCLEAR(*)_^1_%SET_"A_^1_%STA*_!RCOUNT_^1€€_%RTJ*_!SPARM_^1_%ADC_"SCCB_^1_%ADC_"FPARM_^1_%NOP_"0_^1_%LDA*_!IDMBM1_^1_%STA-_!$FF_!SET I TO POINT TO INPUT DMB_^1_%LDQ*_!ODMBM1_^1_%LDA-_!ASLCT1,I_^1_%STA-_!ASLCT1,Q_^1_%LDA-_!ASLCT2,I_^1_%STA-_!ASLCT2,Q_^1_%LDA-_!ASLCT3,I_^1_%STA-_!ASLCT3,Q_^1_%JMP*_!(STNDMP)_!RETRN_^1XDUIND ADC_"DUIND_^1ASLCT1 EQU_"ASLCT1($14)_^1ASLCT2 EQU_"ASLCT2(ASLCT1+1)_^1ASLCT3 EQU_"ASLCT3(ASLCT2+1)_^1REC€(CNT EQU_"RECCNT(15)_^1_%END_"TAPUTL_^__(PFNN CSY/ P€1_%NAM FNN_*SUP 1.0+CYB_^1*** PURPOSE OF ROUTINE: TO PROCESS FIRST CHAR. ***_^1*** PHRASE OF A CONTROL STATEMENT; TO DETERMINE***_^1*** THE FUNCTION; AND TO SET THE NECESSARY_#***_^1*** CONTROL BLOCK PARAMETERS._2***_^1_%ENT_"FNN,LBYTE,LWORD_^1_%ENT_"OPADR1_^1_%ENT_"PSRCH_^1_%ENT_"FNTAB,FPARM,OPTAB,FNADR,FPADR,OPADR_^1_%EXT_"DUMP,COPY,VERIFY,INIT,EXIT,PRINTI_^1_%EXT_"FMDMP,€€SUDMP,FTN1_^1_%EXT_"PNAM,TNAM,SNAM,ONAM_^1_%EXT_"REWND,UNLOD,LEAVE,EOV_^1_%EXT_"SETNL,SETVBR,SETVR,SEFBR,SETFR,SETUR,SETBR_^1_%EXT_"RETYPE_^1_%EXT_"SCAN,SETSF,SETRL,SETB,SETE,SETA_^1_%EXT_"OPENIO,CLOSIO,SETBLK_^1_%EXT_"SHDMP,SCDMP,SRCNT,SCFNT,LNC,SETSL,SETBL_^1_%EXT_"BSPACE_^1_%EXT_"SDATE_^1_%EXT_"EDATE_^1FNN_"NOP_"$0_^1_%SAM_"FNERR IF END OF SCAN ERROR_^1FNN2_!RTJ*_!PSRCH_)SEARCH €€TABLES_^1_%ADC_"FNTAB_^1_%SAP_"FEX1_.VALUE IS A FUNCTION ROUTINE_^1FNERR EQU_"FNERR(*)_^1_%RTJ_"RETYPE_^1_%SAM_"FEX1_^1_%JMP*_!FNN2_^1FEX1_!JMP*_!(FNN)_*EXIT_^1_%EQU_"FNEQ4(4)_^1_%EQU_"FNEQ5(5)_^1_%EQU_"FNEQ6(6)_^1_%EQU_"FNEQ8(8)_^1_%SPC_"$4_^1*******************************************************_^1*** LBYTE LOADS THE A-REGISTER WITH AN 8-BIT BYTE ****_^1***********************€€********************************_^1LBYTE NOP_"0_'ENTRY_^1_%QLS_"15_,DIVIDE CHAR ADDR BY 2_^1_%INQ_"-1_,DECREMENT FOR INDEXING_^1_%STQ*_!QPCK1+1_K**65K**_^1_%SQP_"1_Q**65K**_^1_%ADQ-_!$11_O**65K**_^1_%LDA-_!1,Q_*GET FIRST WORD_^1QPCK1 LDQ_"=N0_O**65K**_^1_%SQM_"LOWER_)FIRST CHAR. IS IN LOWER 8-BITS_^1_%ARS_"8_-GET TO 8-BITS(FIRST CHAR.)_^1LOWER AND*_!FMASK_"MASK OFF TOP 8-BITS_^1€€_%QLS_"1_-RESET CHAR. ADDRESS_^1_%INQ_"3_^1_%JMP*_!(LBYTE)_%EXIT- A REG. HAS CHAR._^1_%SPC_"4_^1**************************************************_^1*** LWORD LOADS THE A-REGISTER WITH TWO 8-BIT BYTES ***_^1*******************************************************_^1LWORD NOP_"0_(ENTRY_^1_%RTJ*_!LBYTE_)GET A CHAR_^1_%ALS_"8_/MOVE TO UPPER 8-BITS AND SAVE_^1_%STA*_!LW1_^1_%RTJ*_!LBYT€€E_*GET ANOTHER_^1_%EOR*_!LW1_,COMBINE TWO CHARS_^1_%JMP*_!(LWORD)_^1LW1_"NUM_"0_^1***********************************************_^1*** PSRCH SEARCHS A PARAMETER TABLE FOR A ****_^1*** MATCHING ENTRY AND RETURNS THE ADDRS. ****_^1*** OF THE PARAMETER ROUTINE TO PROCESS_"****_^1PSRCH NOP_"0_,ENTRY_^1_%LDA*_!(PSRCH)_^1_%STA*_!PSRCH1_^1_%LDQ-_!FNEQ4,I_*GET CHAR ADDR OF CURRENT PHRA€€SE_^1_%RTJ*_!LBYTE_,GET A CHARACTER_^1_%STA*_!CHAR_-SAVE IT_^1_%ENQ_"1_!SET Q TO BYPASS ADDRESS TABLE POINTER_^1PCHK_!LDA*_!CHAR_)RELOAD CHAR._^1_%EOR*_!(PSRCH1),Q_^1_%SAM_"PEXIT2_"IF DONE GET OUT WITH A SET TO IMPLY NOT FOUND_^1_%SAN_"PCON_.NO MATCH-CONTINUE CHECKING_^1PEXIT EQU_"PEXIT(*)_^1_%STQ*_!PQHOLD_!SAVE INDEX_^1_%ADQ*_!(PSRCH1) COMPUTE TABLE ADDRESS OF ROUTINE ADDRESS_^1_€€%LDA-_!1,Q_"OBTAIN FUNCTION ROUTINE ADDRSS IN A_^1_%LDQ*_!PQHOLD_!RESTORE INDEX_^1PEXIT2 RAO*_!PSRCH_%INCREMENT RETURN ADDR BY 1_^1_%JMP*_!(PSRCH)_*EXIT TO CALLER_^1PCON_!AND*_!FMASK_(MASK OFF TOP 8 BITS_^1_%SAN_"PCON1 CHECK FOR POSIBLE 2 CHARACTER CODE_^1_%LDA-_!FNEQ5,I_*CHECK SCAN LENGTH_^1_%INA_"-1_0FOR GREATER THAN ZERO_^1_%SAN_"PCON2_-NO-SKIP_^1PCON1 INQ_"1_!INCREMENT INDEX €€FOR NEXT CHAR_^1_%JMP*_!PCHK_-GO TRY AGAIN_^1PCON2 STQ*_!PQHOLD_%SAVE Q-REG._^1_%LDQ-_!FNEQ4,I_(GET CHAR ADDRS OF PHRASE_^1_%RTJ*_!LWORD_+GET TWO CHARS._^1_%ALS_"8_1SHIFT CHARS_^1_%LDQ*_!PQHOLD_+RELOAD INDEX_^1_%SUB*_!(PSRCH1),Q_!CHAR MATCH_^1_%SAN_"PCON4_-NO-SKIP_^1_%JMP*_!PEXIT_,YES-GO GET ADDR._^1PCON4 EQU_"PCON4(*)_^1_%JMP*_!PCON1_!NO MATCH_^1PQHOLD NUM_"0_^1CHAR_!NUM_"0_^1PS€€RCH1 NUM_"0_^1FMASK NUM_"$FF_*MASK_^1_%SPC_"4_^1FNTAB EQU_"FNTAB(*)_^1_%ADC_"FNADR-2_"ADDRESS OF ASSOCIATED POINTER TABLE_^1_%NUM_"$5544_(*DU*_!DUMP ROUTINE CHARACTERS_^1_%NUM_"$4F43_'*CO*_^1_%NUM_"$4556_'*VE*_^1_%NUM_"$4E49_'*IN*_^1_%NUM_"$5845_'*EX*_^1_%NUM_"$5250_'*PR*_^1_%NUM_"$504F_#OP_^1_%NUM_"$4C43_":CL*_^1_%ALF_"1,SB_'*BS*_^1_%ALF_"1,DS_(SET SYSTEM DATE_^1_%ALF_"1,DE_(SET€€ LABEL EXPIRATION DATE_^1_%NUM_"$FFFF_-*END********************_^1_%SPC_"4_^1FPARM EQU_"FPARM(*)_^1_%ADC_"FPADR-2_"ADDRESS OF ASSOCIATED POINTER TABLE_^1_%ALF_"1,SU_'USASCI CONTROL CHARACTERS FOR PRINTI_^1_%ALF_"1,ST_'PRINTI TAPE SCOPE LISTABLES_^1_%NUM_"$4D46_-*MF*_^1_%NUM_"$4655_5*FU*_^1_%NUM_"$0048_-* H*_^1_%NUM_"$0043_-* C*_^1_%NUM_"$4352_(*RC*_^1_%NUM_"$4346_+*CF*_^1_%NUM_"$0€€052_7* R*_^1_%NUM_"$4E55_6*UN*_^1_%NUM_"$004C_8* L*_^1_%NUM_"$4F45_8*EO*_^1_%ALF_"1,NP_$PNAM_^1_%ALF_"1,NT_$TNAM_^1_%ALF_"1,NS_$SNAM_^1_%ALF_"1,AN_$NAM_^1_%NUM_"$FFFF_-*END***********************_^1_%SPC_"4_^1OPTAB EQU_"OPTAB(*)_^1_%ADC_"OPADR-2_!ADDRESS OF ASSOCIATED POINTER TABLES_^1_%NUM_"$4C53_,*LS*_^1_%NUM_"$4C42_-*LB*_^1_%NUM_"$4C4E_-*LN*_^1_%NUM_"$4256_-*BV*_^1_%NUM_"$0056_€€-* V*_^1_%NUM_"$4246_-*BF*_^1_%NUM_"$0046_-* F*_^1_%NUM_"$0055_-* U*_^1_%NUM_"$5242_-*RB*_^1_%NUM_"$4653_-*FS*_^1_%NUM_"$424C_,*BL*_^1_%NUM_"$524C_,*RL*_^1_%NUM_"$434C_$*LC*_!SET LINE COUNT FOR PRINT_^1_%NUM_"$534C_$*LS*_!SET LINE SIZE FOR PRINT_^1_%NUM_"$0042_-* B*_^1_%NUM_"$0045_,* E*_^1_%NUM_"$0041_-*A*_^1_%ALF_"1,NP_'PNAM_^1_%ALF_"1,NT_'TNAM_^1_%ALF_"1,NS_'SNAM_^1_%ALF_"1,AN_'O€€NAM_^1_%NUM_"$FFFF_-*END***************************_^1***********************************************************_^1FNADR ADC_"DUMP_)****************************_^1_%ADC_"COPY_^1_%ADC_"VERIFY_,*** FUNCTION(FNN) ***_^1_%ADC_"INIT_.*** ROUTINE_'***_^1_%ADC_"EXIT_+*** ADDRESSES ****_^1_%ADC_"PRINTI_^1_%ADC_"OPENIO_^1_%ADC_"CLOSIO_^1_%ADC_"BSPACE_^1_%ADC_"SDATE_'SET SYSTEM DATE_^1_%A€€DC_"EDATE_'SET LABEL EXPIRATION DATE_^1***********************************************************_^1FPADR EQU_"FPADR(*)_^1_%ADC_"FTN1_%USASCI CONTROL_^1_%ADC_"REWND_#TAPE SCOEP NOP CALL_^1_%ADC_"FMDMP_-*** SPARM_(****_^1_%ADC_"SUDMP_-*** ROUTINE_%****_^1_%ADC_"SHDMP_-*** ADDRESSES_#****_^1_%ADC_"SCDMP_^1_%ADC_"SRCNT_^1_%ADC_"SCFNT_^1_%ADC_"REWND_^1_%ADC_"UNLOD_^1_%ADC_"LEAVE_^€€1_%ADC_"EOV_^1_%ADC_"PNAM_^1_%ADC_"TNAM_^1_%ADC_"SNAM_^1_%ADC_"ONAM_^1OPADR EQU_"OPADR(*)_^1OPADR1 EQU_"OPADR1(*)_^1_%ADC_"SETSL_,*** ROUTINE_(***_^1_%ADC_"SETBL_-*** ADDRESSES_%***_^1_%ADC_"SETNL_^1_%ADC_"SETVBR_^1_%ADC_"SETVR_^1_%ADC_"SEFBR_^1_%ADC_"SETFR_^1_%ADC_"SETUR_^1_%ADC_"SETBR_^1_%ADC_"SETSF_^1_%ADC_"SETBLK_^1_%ADC_"SETRL_^1_%ADC_"LNC_!SET LINE COUNT_^1_%ADC_"SETRL SET L€xINE SIZE_^1_%ADC_"SETB_^1_%ADC_"SETE_^1_%ADC_"SETA_^1_%ADC_"PNAM_^1_%ADC_"TNAM_^1_%ADC_"SNAM_^1_%ADC_"ONAM_^1_%END_]_^__xPSCAN CSY/ P€1_%NAM SCAN_)SUP 1.0+CYB_^1*** THE PURPOSE OF THIS ROUTINE IS TO ISOLATE CHARACTER ***_^1*** PHRASES; CONVERT ASCII DECIMAL/ASCII HEX DATA TO_"***_^1*** INTERNAL BINARY; TO PRESET POINTERS IN THE SCCB;_"***_^1*** AND TO PROVIDE ON-LINE SELECTIVE CORRECTION OF_$***_^1*** ERRORS._K***_^1_%SPC_"1_^1_%ENT_"SCAN,RETYPE,SCAN2,SEARCH_^1_%ENT_"SET,ALPHA,HEXBIN,DECBIN_^1_%EXT_"LBYTE,L€€WORD_^1_%EXT_"RMESS_^1_%EXT_"FMTMSG_^1_%EXT_"INBUF2_^1SCAN_!NOP_"0_+ENTRY_^1_%RTJ*_!SCAN2_*SCAN STATEMENT_^1_%LDQ*_!ERRFLG_)ANY ERRORS_^1_%SQZ_"SCA1_,NO-SKIP_^1_%RTJ*_!RETYPE_)CORRECT ERROR_^1_%SAP_"SCA1_,END?_^1_%JMP*_!SCAN+1_)GO TO SCAN A STATEMENT_^1SCA1_!EQU_"SCA1(*)_^1SCAEX JMP*_!(SCAN)_#EXIT_^1***************************************************_^1***_!ACTUAL SCAN ROUTINE_6**€€*_^1***************************************************_^1SCAN2 NOP_"0_*ENTRYPOINT_^1_%CLR_"A_/CLEAR ERROR FLAG_^1_%STA*_!ERRFLG_^1_%STA-_!SEQU7,I_^1_%STA-_!SEQU5,I_(SET LENGTH OF CURR. PHRASE TO ZERO_^1_%STA-_!SEQU8,I_!CLEAR TOTAL LENGTH COUNTER_^1_%LDA-_!SEQU3,I_(PICK UP ASDRS. OF NEXT CHAR IN BUFF_^1_%STA-_!SEQU4,I_(AND STORE AS CHAR ADDR OF CURR PHRASE_^1_%SET_"A_^1_%STA-_!SEQ€€U6,I_(SET SCFLG TO $FFFF_^1_%RTJ*_!SEARCH_^1_%LDQ*_!TABSC,Q_!GET ADDRESS OF ROUTINE_^1_%RTJ-_!1,Q_$GO TO ROUTINE_^1_%LDQ*_!ERRFLG_!CHECK FOR ANY ERRORS ON RETURN_^1_%SQN_"SCAN27_"IF ERRORS SKIP TO NEXT COMMA_^1_%JMP*_!(SCAN2)_^1SCAN27 RTJ*_!SEARCH_^1_%RAO-_!SEQU5,I_^1_%SQZ_"SCAN28_"AFTER ERROR FOUND COMMA_^1_%INQ_"-7_.IS CHAR A $FF/_^1_%SUB*_!SCOFF CHECK FOR END OF LINE_^1_%SAZ_"S€€CAN28 LEGAL END OF SENTENCE EXIT_^1_%JMP*_!SCAN27_)GET ANOTHER CHAR._^1SCAN28 CLR_"A_!FOUND OF PHRASE_^1_%JMP*_!(SCAN2)_^1_%SPC_"4_^1TABSC EQU_"TABSC(*)_^1_%ADC_"COMMA-1_!PROCESS COMMA_^1_%ADC_"ALPHA-1_!PROCESS ALPHA CHARACTER_^1_%ADC_"ALPHA-1_!PROCESS ALPHA CHAACTER_^1_%ADC_"DECBIN-1 PROCESS DECIMAL DIGITS_^1_%ADC_"HEXBIN-1 PROCESS HEX DIGITS_^1_%ADC_"ERROR-1_!ERROR EXIT_^1_%A€€DC_"ERROR-1_!ERROR_^1_%ADC_"ERROR-1_!ERROR_^1_%SPC_"4_^1COMMA EQU_"COMMA(*)_^1_%NOP_"0_^1_%JMP*_!SCAN2+1_!GET NEXT PHRASE FOUND A COMMA_^1_%SPC_"2_^1ERROR EQU_"ERROR(*)_^1_%NOP_"0_"POSSIBLE END OF SENTENCE OR ERROR_^1_%SUB*_!SCOFF_!CHECK FOR END OF SENTECE CHARACTER_^1_%SAZ_"EXIT_^1_%RAO*_!ERRFLG_!OTHERWISE SET ERROR FLAG AND EXIT_^1_%CLR_"A_^1_%JMP*_!(ERROR) RETURN TO PROCESSING€€_^1EXIT_!EQU_"EXIT(*)_^1_%SET_"A_!SET END OF SCAN CHARACTER IN A_^1_%JMP*_!(SCAN2)_"RETURN TO INITIAL CALLER_^1_%SPC_"4_^1*** THE PURPOSE OF SEARCH IS TO IDENTIFY A GIVEN **_^1*** ASCII CHARACTER TYPE AND ASSIGN A SPECIFIC_!**_^1*** INDEX CODE FOR IT._:**_^1SEARCH NOP_"0_)ENTRY_^1SRCH1 LDQ-_!SEQU3,I_"GET ADDRS OF NEXT CHAR IN BUFFER._^1_%RTJ*_!(SRADC1)_'GET A CHAR._^1_%STQ-_!SE€€QU3,I_(STORE INCRE. ADDRS BACK IN SNCA_^1_%RAO-_!SEQU8,I_!INCREMENT FOR EACH CHARACTER OF PHRASE_^1_%ENQ_"-1 SET UP INDEX AS MINUS 1 SO COMMA IS 0_^1_%STQ*_!INDEX_"INITIALIZE INDEX_^1_%STA*_!CHAR_+SAVE CHAR._^1_%LDQ_"=XRNGCHT_(SET UP CHAR ADDRS. FOR INDEXING_^1_%QLS_"1_/THROUGH CHAR TABLE_^1SRC1_!EQU_"SRC1(*)_^1_%RAO*_!INDEX_!COUNT_^1_%RTJ*_!(SRADC1)_'GET A CHAR._^1_%SUB*_!CHAR_+C€€OMPARE CHARS._^1_%SAP_"SCON1_+SKIP-NO COMPARE_^1_%INQ_"1_0INCR. CHAR ADDRESS BY 1_^1_%JMP*_!SRC1_+GET ANOTHER CHAR._^1SCON1 RTJ*_!(SRADC1)_!GET A CHARACTER_^1_%SUB*_!SCOFF_*IS THERE A CHAR._^1_%SAZ_"SCON3_-NO-SKIP_^1_%ADD*_!SCOFF_*RESTORE CHAR._^1_%SUB*_!CHAR_^1_%INA_"-1_^1_%SAM_"SCON3_^1_%JMP*_!SRC1_^1SCON3 EQU_"SCON3(*)_^1_%LDQ*_!INDEX_^1_%LDA*_!CHAR_^1_%JMP*_!(SEARCH)_^1SCOFF €€ NUM_"$FF_^1SRADC1 ADC_"LBYTE_^1CHAR_!NUM_"0_^1INDEX NUM_"0_!USE FOR INDEX TO CHARACTER TABLE_^1RNGCHT NUM_"$2C2C_$* COMMA*_(INDEX CODE = 1_^1_%NUM_"$5A47_+* G - Z *_52_^1_%NUM_"$4641_** A - F *_53_^1_%NUM_"$3930_+* 1 - 9 *_54_^1_%NUM_"$2424_+*_!$_!*_55_^1_%NUM_"$3D3D_(*_!=_!*_*6_^1_%NUM_"$2727_+*_!'_!*_57_^1_%NUM_"$FFFF_+* $FF *_58_^1ERRFLG NUM_"0_^1_%EQU_"SEQU1(1)_^1_%EQU_"SEQ€€U2(SEQU1+1)_^1_%EQU_"SEQU3(SEQU2+1)_^1_%EQU_"SEQU4(SEQU3+1)_^1_%EQU_"SEQU5(SEQU4+1)_^1_%EQU_"SEQU6(SEQU5+1)_^1_%EQU_"SEQU7(SEQU6+1)_^1_%EQU_"SEQU8(SEQU7+1)_^1*** THE RETYPE ROUTINE IS CALLED TO DISPLAY AN ***_^1*** ERROR MESSAGE INDICATING AN INVALID PARAMETER ***_^1*** AND TO ACCEPT THE CORRECT PARAMETER_****_^1******************************************************_^1RETYPE NOP€€_"0_^1_%LDQ-_!$FF_.SAVE I-REGISTER_^1_%STQ*_!ISAVE_^1RET1_!EQU_"RET1(*)_^1_%LDA-_!SEQU4,I_^1_%ALS_"15_"CONVERT TO WORD ADDRESS_^1_%STA*_!TEMP2_!SAVE SEMI WORD ADDRESS_^1_%LDA-_!SEQU8,I_!GET LENGTH OF PHRASE IN ERROR_^1_%STA*_!DAT1_#USE IN DATA LIST FOR RMT MSG_^1_%LDA_"=XDAT1_"ADDRESS OF DATA LIST_^1_%RTJ_"FMTMSG_!CALL FORMATED MESSAGE ROUTINE_^1_%ADC_"RMESS1_^1_%RTJ_"RMESS_!CALL R€€EAD STATEMENT_^1_%ADC_"SCCB2-1_^1_%LDQ*_!*-1_^1_%STQ-_!$FF_^1_%RTJ*_!SCAN2_^1_%LDQ*_!ERRFLG_^1_%SQZ_"RET4 NO ERRORS EXIT_^1_%JMP*_!RET1_!REDO_^1RET4_!EQU_"RET4(*)_^1_%LDQ*_!ISAVE_^1_%SAM_"RETEXT_^1_%LDA-_!SEQU4,I_^1_%STA-_!SEQU4,Q_^1_%LDA-_!SEQU5,I_^1_%STA-_!SEQU5,Q_^1_%LDA-_!SEQU6,I_^1_%STA-_!SEQU6,Q_^1_%LDA-_!SEQU7,I_^1_%STA-_!SEQU7,Q_^1_%LDA-_!SEQU8,I_!GET PHRASE LENGTH_^1_%STA-€€_!SEQU8,Q_^1RETEXT EQU_"RETEXT(*)_^1_%STQ-_!$FF_^1_%JMP*_!(RETYPE)_!EXIT_^1ISAVE NUM_"0_,I-REG HOLD_^1_%EQU_"MAXLIN(5)_^1DAT1_!NUM_"0_^1TEMP2 NUM_"0_^1_%SPC_"4_^1*********************************************_^1****_"ISOLATE AN ALPHA PHRASE_)****_^1*********************************************_^1ALPHA NOP_"0_*ENTRY_^1_%ENA_"1_.SET LENGTH OF PHRASE = 1_^1_%STA-_!SEQU5,I_((SCPHL)_^€€1ALPHA1 EQU_"ALPHA1(*)_^1_%RTJ+_!SEARCH_^1_%SQZ_"ALPX SKIP TO END IF COMMA_^1_%LDQ*_!ALPHT2,Q_"GET ADDRESS OF ROUTINE_^1_%RTJ-_!1,Q_(GO TO ROUTINE_^1ALPX_!EQU_"ALPX(*)_^1_%JMP*_!(ALPHA)_!RETURN_^1_%SPC_"4_^1CALP_!NOP_"0 PROCESS ALPHA CHARACTERS_^1_%RAO-_!SEQU5,I INCREASE LENGTH BY ONE_^1_%JMP*_!ALPHA1 GET NEXT CHARACTER_^1_%SPC_"4_^1ALERR NOP_"0_"ERROR ROUTINE COMMON FOR ALPHA€€ OTHERS_^1_%SUB*_!SCOFF_!CHECK FOR VALID END OF LINE CHARACTER_^1_%SAZ_"ALERR2 IF ZERO OK_^1_%CLR_"A_^1_%RAO*_!ERRFLG SET ERROR_^1ALERR2 EQU_"ALERR2(*)_^1_%JMP*_!(ALERR)_!RETURN_^1_%SPC_"4_^1*********************************************_^1*** DECIMAL TO BINARY CONVERSION ROUTINE ***_^1*********************************************_^1DECBIN NOP_"0_^1_%INA_"-$30_,CONVERT CHAR_^1_%C€€LR_"Q_!SET SCFLG_^1_%STQ-_!SEQU6,I_^1DEC1_!EQU_"DEC1(*)_^1_%STA-_!SEQU7,I STORE DECIMAL CONVERTED RESULT_^1_%RTJ*_!(ALPHA1+1)_!CALL SEARCH_^1_%SQZ_"DECEX_!COMMA FOUND YOU ARE FINISHED_^1_%INQ_"-3_#CHECK FOR NUMERIC_^1_%SQZ_"DEC4_!PROCESS DECIMAL CHARACTER_^1_%RTJ*_!ALERR_!CHECK IF ERROR OF END OF SENTENCE THEN EXIT_^1DECEX EQU_"DECEX(*)_^1_%JMP*_!(DECBIN) EXIT_^1DEC4_!INA_"-$30_€€^1_%STA*_!TEMP2_^1_%ENA_"$A_!SET UP FOR MULTIPLY_^1_%MUI-_!SEQU7,I_^1_%ADD*_!TEMP2_^1_%JMP*_!DEC1_^1***********************************************_^1*** HEX TO BINARY CONVERSION ROUTINE_$****_^1***********************************************_^1HEXBIN NOP_"0_)ENTRY_^1_%CLR_"Q_!CLEAR NUMERIC ENTRY AND SET NUMERIC FLAG_^1_%STQ-_!SEQU6,I_^1HEX1_!EQU_"HEX1(*)_^1_%STQ-_!SEQU7,I_^1_%RTJ€€*_!(ALPHA1+1)_!CALL SEARCH_^1_%SQZ_"HEXIT_!COMMA SO EXIT_^1_%INQ_"-2 ALPHA HEX DIGIT_^1_%SQN_"HEX2_!NO_^1_%INA_"-$37_!CONVERT TO HEX DIGIT_^1_%JMP*_!STHEX_^1HEX2_!EQU_"HEX2(*)_^1_%INQ_"-1_!DEC DIGIT_^1_%SQN_"HERR_!NO MUST BE ERROR_^1_%INA_"-$30_^1STHEX EQU_"STHEX(*)_!CONVERT TOTAL_^1_%LDQ-_!SEQU7,I_^1_%ALS_"12 SHIFT TO UPPER DIGIT_^1_%LLS_"4 PLACE IN Q_^1_%JMP*_!HEX1 GO STORE R€€ESULT AND CONTINUE_^1HERR_!EQU_"HERR(*)_^1_%RTJ*_!ALERR_!CHECK IF ERROR OR END_^1HEXIT EQU_"HEXIT(*)_^1_%JMP*_!(HEXBIN)_^1_%SPC_"4_^1*********************************_^1*** SET UP A COMPONENT_'***_^1*********************************_^1_%SPC_"4_^1SET_"NOP_"0_^1_%RTJ*_!(ALPHA1+1)_!CALL SEARCH_^1_%LDQ*_!SETTB1,Q_^1_%RTJ-_!1,Q_^1SETEXT EQU_"SETEXT(*)_^1_%JMP*_!(SET)_!RETURN_^1_%SPC_"4€€_^1SALPQ NOP_"0_^1_%LDA-_!SEQU3,I_"GET ADDRESS OF COMPONENT_^1_%STA-_!SEQU7,I_!SAVE IN PINTER WORD_^1SALPNX EQU_"SALPNX(*)_^1_%RTJ*_!(ALPHA1+1)_!CALL SEARCH_^1_%INQ_"-6_!CHECK IF QUOATE FOUND YEST_^1_%SQZ_"SALPEX YES EXIT_^1_%SUB_"SCOFF IS THE CHARACTER AN EOL CHAR_^1_%SAZ_"SALPEX_!YES_^1_%RAO-_!SEQU6,I COUNT LENGTH OF PHRASE_^1_%JMP*_!SALPNX CONTINUE WIH NEXT CHARACTER_^1SALPEX €€EQU_"SALPEX(*)_^1_%JMP*_!(SALPQ)_!RETURN_^1_%SPC_"4_^1* TABLE FOR SET FOLLOWS_^1SETTB1 EQU_"SETTB1(*)_^1_%ADC_"ALERR-1_!COMMA - EORROR_^1_%ADC_"ALERR-1_!ALPHA - ERROR_^1_%ADC_"ALERR-1_!ALPHA - ERROR_^1_%ADC_"DECBIN-1 DECIMAL DIGIT_^1_%ADC_"HEXBIN-1 HEX DIGIT_^1_%ADC_"ALERR-1_!EQUAL SIGN ERROR_^1_%ADC_"SALPQ-1_!QUOTE POCESSING_^1_%ADC_"SETER-1 ANYTHING ELSE IS AN ERROR_^1SETER €€NOP_"0_^1_%ENA_"1_!PUT GARABAGE IN A_^1_%RTJ*_!ALERR_^1_%JMP*_!(SETER)_^1_%SPC_"4_^1* ALPHA BRANCH TABLE FOLLOWS_^1_%SPC_"4_^1ALPHT2 EQU_"ALPHT2(*-1)_^1_%ADC_"CALP-1_!ALPHA CHAR_^1_%ADC_"CALP-1_!ALPHA CHAR_^1_%ADC_"DECBIN-1 DECIMAL DIGIT_^1_%ADC_"HEXBIN-1 HEX DIGIT_^1_%ADC_"SET-1_"COMPONENT PHRASE_^1_%ADC_"ALERR-1 ERROR_^1_%ADC_"ALERR-1 ERROR OR END OF SCAN_^1_%SPC_"4_^1* MESSAG€°ES AND BUFFERS_^1SCCB2 ADC_"INBUF2_!SECONDARY SCAN CONTROL BLOC_^1_%ADC_"MAXLIN_^1_%NUM_"0,0,0,0,0,0_^1RMESS1 ALF_"21,14CINVALID PARM='.%A%1C'/12CRETYPE PARM:;;_^1_%END_]_^__°POPENIO CSY/ P€1_%NAM OPENIO_'SUP 1.0+CYB_^1*** OPENIO PROCESSES THE OPEN STATEMENT ***_^1_%ENT_"OPENIO_^1_%EXT_"RMESS,SCAN,PSRCH_^1_%EXT_"CLRRGN,OPTAB,RETYPE_^1_%EXT_"PUTIT_^1_%EXT_"RESTRT_^1_%EXT_"RELLAB_^1_%EXT_"RELBUF,WRITE_^1_%ENT_"MOTION_^1_%ENT_"INPUT,OUTPUT_^1_%ENT_"INPM1,OUTM1,PRNM1_^1_%ENT_"PRNDMB_^1_%ENT_"OPN27_^1_%ENT_"DMBTM1_^1_%EXT_"SETCNT_^1_%EXT_"CLSLAB_^1_%EXT_"STNLAB_^1_%EXT_"€€FMTMSG_^1W0_#EQU_"W0(0)_^1S0_#EQU_"S0(64)_^1S1_#EQU_"S1(65)_^1S4_#EQU_"S4(68)_^1S014_!EQU_"S014(78)_^1S015_!EQU_"S015(79)_^1LOGTAB EQU_"LOGTAB(*)_^1_%NUM_"$8F9_^1_%NUM_"$8FA_^1_%NUM_"$8FA_^1_%NUM_"$8FB_^1FLG_"EQU_"FLG(*)_^1_%NUM_"0_^1_%NUM_"$4000_^1_%NUM_"0_^1_%NUM_"$4000_^1_%SPC_"4_^1OPENIO NOP_"0_^1_%RTJ*_!ASGIO_"ASSIGN I/O DEVICES_^1_%SAM_"OPERRX_!IF OPEN OR NO DEVISE ASSIGNED E€€RROR_^1OPN05 EQU_"OPN05(*)_^1_%STA*_!CURDMB_^1_%LDA*_!(CURDMB)_^1_%SAP_"OPN10_#FILE OPEN_^1OPERRX EQU_"OPERRX(*)_^1_%RTJ_"FMTMSG_"CALL MSGOUT ROUTINE_^1_%ADC_"OCERR_^1_%JMP_"RESTRT_^1OPN10 EQU_"OPN10(*)_^1_%LDA*_!FLG,Q_"SET IOBFLG_^1_%STA*_!(CURDMB)_^1_%LDA-_!SCFLG,I IS THERE A NEW LOGICAL UNIT_^1_%SAN_"OPN15_#NO_^1_%LDA-_!SCNUM,I_!GET UNIT NUMBER_^1_%JMP*_!OPN16_^1OPN15 EQU_"O€€PN15(*)_^1_%LDA*_!LOGTAB,Q GET STANDARD DEVICE ASSIGNED_^1OPN16 EQU_"OPN16(*)_^1_%LDQ*_!CURDMB_^1_%INQ_"-1_^1_%STQ*_!CURDMB_!SET DMB-1 ADDRESS_^1_%STA-_!DEQU4,Q_!STORE LOGICAL UNIT_^1_%INQ_"5_(CLEAR DMB WORDS 5 - 21_^1_%ENA_"17_^1_%RTJ_"CLRRGN_^1_%LDQ*_!CURDMB_!GET DMB ADDRESS_^1_%ENA_"56_$SET MAXIMUM LINES PER PAGE_^1_%STA-_!DEQU6,Q_^1* BASIC DMB INITIALIZATION COMPLETE_^1OPN20 €€EQU_"OPN20(*)_^1_%RTJ*_!(SCANX)_"CALL SCAN ROUTINE_^1_%SAM_"OPN40_#DONE_^1OPN25 EQU_"OPN25(*)_^1_%RTJ*_!(PSRCHX)_!CALL PARM SEARCH_^1_%ADC_"OPTAB_#ADDRESS_^1_%SAP_"OPN35_^1OPN27 EQU_"OPN27(*)_^1_%RTJ*_!(XRETYP)_^1_%SAP_"OPN30_^1_%JMP*_!OPN20_"TYPED CARRIAGE RETURN CONTINUE SCAN_^1OPN30 EQU_"OPN30(*)_^1_%JMP*_!OPN25_^1OPN35 EQU_"OPN35(*)_^1_%STA*_!OPCALL_^1_%LDQ*_!CURDMB_^1_%RTJ€€*_!(OPCALL) CALL PARM MODULE_^1_%JMP*_!OPN20_"GET NEXT PARM_^1OPN40 EQU_"OPN40(*)_^1* ALL PARMS PROCESSED CHECK FOR ERRORS BEFORE OPEN CALL_^1_%LDQ*_!CURDMB_!DONE WITH SCAN_^1_%STQ-_!$FF_$USE I FOR DMB POINTER_^1_%LDA-_!DEQU8,I RECSIZ IN A_^1_%LDQ-_!DEQU7,I BLKSIZ IN Q_^1_%SQN_"OPN60_#BLKSIZ ZERO?_^1_%SAN_"OPN50_#YES= RECSIZ ZERO_^1_%LDA_"=N136_^1_%STA-_!DEQU8,I_^1OPN50 EQU_"OP€€N50(*)_^1_%STA-_!DEQU7,I_^1OPN60 EQU_"OPN60(*)_^1_%SAN_"OPN65_^1_%STQ-_!DEQU8,I_^1OPN65 EQU_"OPN65(*)_^1_%LDA-_!DEQU7,I IS BLOCK SIZE LESS THAN RCORD SIZE_^1_%SUB-_!DEQU8,I SUB RECORD SIZE_^1_%SAP_"OPN70_!NO - SKIP IF OK OTHERWISE ISSUE ERROR_^1_%ENA_"S4_^1_%RTJ*_!(SERR)_^1OPN70 EQU_"OPN70(*)_^1_%LDQ-_!DEQU0,I_!BLOCKING ???_^1_%QLS_"2 PLACE BLOCKING BIT IN BIT 15_^1_%SQP_"OPN75€€_"NO BLOCKING SKIP_^1_%SAN_"OPN79_"BLOCK > REC SKIP IF YES_^1_%SET_"A_"NO ISSUE WARNING MESSAGE_^1OPN75 EQU_"OPN75(*)_^1_%SAZ_"OPN79_!NO BLOCKING REQUIRE BLOCK=REC OTHERWISE WARN USER_^1_%ENA_"W0_$NO WRONG BLOCK SPECIFICATION_^1_%RTJ*_!(SERR)_!ISSUE WARNING ERRRR MESSAGE AND RETURN_^1OPN79 EQU_"OPN79(*)_^1_%LDA-_!DEQU0,I_^1_%CLR_"Q_^1_%ALS_"2_^1_%LLS_"1_!CHECK VARAIBEL_^1_%SAP_"O€€PN80_^1_%QLS_"2_^1_%ADQ-_!DEQU7,I_^1_%INQ_"4_^1_%STQ-_!DEQU7,I_^1_%LDA-_!DEQU8,I_^1_%INA_"4_4INCREASE RECORD SIZE_^1_%STA-_!DEQU8,I_^1OPN80 EQU_"OPN80(*)_^1_%LDQ*_!CURDMB_^1_%LDA-_!DEQU6,I GET LINE COUNT_^1_%RTJ*_!(SETIT)_^1_%NOP_"0_#SAVE FOR COUNT_^1_%STA-_!DEQU18,Q_"ACONV IS NOW A LINE COUNTER_^1_%CLR_"A_%CLEAR END-OF-FILE ADDRESS_^1_%STA-_!DEQU2,Q_^1_%RTJ*_!OPEN_^1_%JMP*_!(OPE€€NIO)_^1OPCALL NUM_"0_^1CURDMB NUM_"0_^1_%SPC_"4_^1****************************************_^1* ASGIO - DETERMINE IO DEVICE ASSIGNED*_^1*_)BY: I,O,VF,OR PR TYPEIN_#*_^1*_!CALL:_"RTJ ASGIO_0*_^1*_+(A) = DMB ADDRESS OR NEG *_^1*_+(Q) = INDEX TO DMB_'*_^1*_E*_^1*_$IF A IS NEGATIVE PARAMETER NOT *_^1*_$FOUND_:*_^1*_$INDEX_!I = 0_2*_^1*_-O = 1_2*_^1*_,VF = 2_2*_^1*_,PR = 3_2*_^1******€€**********************************_^1_%SPC_"4_^1_%ENT_"ASGIO_^1ASGIO NOP_"0_"ENTRY_^1_%RTJ*_!(SCANX)_^1_%SAM_"ASGEXT_"END OF SCAN = ERROR_^1_%RTJ*_!(PSRCHX)_!CALL PARM SEARCH_^1_%ADC_"DEVICE_"PARM TABLE POINTER_^1_%INQ_"-1_^1ASGEXT EQU_"ASGEXT(*)_^1_%JMP*_!(ASGIO) RETURN_^1_%SPC_"4_^1_%SPC_"4_^1DMBTAB EQU_"DMBTAB(*) ADDRESS TABLE OF DMB_^1DMBTM1 EQU_"DMBTM1(DMBTAB-1)_^1DMBI_!ADC€€_"INPUT_^1DMBO_!ADC_"OUTPUT_^1DMBVF ADC_"OUTPUT_^1DMBP_!ADC_"PRNDMB_^1_%SPC_"4_^1_%ENT_"SETSL,SETBL,SETNL,SETVBR,SETVR,SEFBR_^1_%ENT_"SETBLK_^1_%ENT_"SETFR,SETUR,SETBR,SETSF,SETBL,SETBL1,SETRL_^1_%ENT_"SETB,SETA,SETE_^1_%SPC_"4_^1******************************************_^1*_"EQUATES FOR IOBFLG % MASKS_(*_^1******************************************_^1*_"MASKS_]_^1_%SPC_"4_^1MRDW€€RF EQU_"MRDWRF($4000)_^1MBLOCK EQU_"MBLOCK($2000)_^1MRECFM EQU_"MRECFM($1800)_^1MLABEL EQU_"MLABEL($600)_^1MEOVF EQU_"MEOVF($100)_^1MEOFF EQU_"MEOFF($80)_^1MRESRV EQU_"MRESRV($10)_^1MCONVF EQU_"MCONVF($60)_^1MSELTF EQU_"MSELTF($C)_^1MCLOSF EQU_"MCLOSF($3)_^1_%SPC_"4_^1*IOBFLG_]_^1_%SPC_"4_^1RDWRF EQU_"RDWRF(MRDWRF)_^1BLOCKF EQU_"BLOCKF(MBLOCK)_^1UNDREC EQU_"UNDREC(0)_^1FIXREC EQ€€U_"FIXREC($800)_^1VARREC EQU_"VARREC($1000)_^1NOLBL EQU_"NOLBL(0)_^1STNDLB EQU_"STNDLB($200)_^1BYPSLB EQU_"BYPSLB($400)_^1EOVF_!EQU_"EOVF(MEOVF)_^1EOFF_!EQU_"EOFF(MEOFF)_^1NOCONV EQU_"NOCONV(0)_^1ETOASC EQU_"ETOASC($20)_^1BTOASC EQU_"BTOASC($40)_^1CLREW EQU_"CLREW(0)_^1CLUNL EQU_"CLUNL($1)_^1CLLEAV EQU_"CLLEAV($2)_^1CLEAOV EQU_"CLEOV($3)_^1_%SPC_"4_^1ASGNUM NOP_"0_^1_%LDA-_!SCFL€€G,I_^1_%SAN_"ASGNER_^1_%LDA-_!SCNUM,I_^1_%JMP*_!(ASGNUM)_^1ASGNER JMP*_!OPN27_^1_%SPC_"4_^1********************************************************_^1*** THE FOLLOWING SUBROUTINES SET PARAMETER VALUES ****_^1*** IN ONE OF THE DATA MANAGEMENT BLOCKS_+****_^1*********************************************************_^1SETSL NOP_"0_)ENTRY_^1_%RTJ*_!SETNL_^1_%ADD_"=XSTNDLB_^1_%STA-_€€!DEQU0,Q_^1_%JMP*_!(SETSL)_(EXIT_^1*********************************************************_^1SETBL NOP_"0_*ENTRY_^1_%RTJ*_!SETNL_^1_%ADD_"=XBYPSLB_^1_%STA-_!DEQU0,Q_^1_%JMP*_!(SETBL)_(EXIT_^1*********************************************************_^1SETNL NOP_"0_*ENTRY_^1_%LDA-_!DEQU0,Q_^1_%AND*_!MLBLM_^1_%STA-_!DEQU0,Q_^1_%JMP*_!(SETNL)_(EXIT_^1*******************************€€**************************_^1_%SPC_"4_^1MLBLM ADC_"(-MLABEL)_^1PSRCHX ADC_"PSRCH_^1SCANX ADC_"SCAN_^1SERR_!ADC_"SYSERR_^1SETIT ADC_"SETCNT_^1XRETYP ADC_"RETYPE_^1_%SPC_"4_^1*********************************************************_^1SETVBR NOP_"0_)ENTRY_^1_%RTJ*_!SETUR_^1_%ADD_"=XVARREC+BLOCKF_^1_%STA-_!DEQU0,Q_^1_%JMP*_!(SETVBR)_'EXIT_^1*****************************************€€****************_^1SETVR NOP_"0_*ENTRY_^1_%RTJ*_!SETUR_^1_%ADD_"=XVARREC_^1MODEBT EQU_"MODEBT(*-1)_"USE FOR MODE SETTING_^1_%STA-_!DEQU0,Q_^1_%JMP*_!(SETVR)_(EXIT_^1*********************************************************_^1SEFBR NOP_"0_*ENTRY_^1_%RTJ*_!SETUR_^1_%ADD_"=XFIXREC+BLOCKF_^1_%STA-_!DEQU0,Q_^1_%JMP*_!(SEFBR)_(EXIT_^1****************************************************€€*****_^1SETFR NOP_"0_*ENTRY_^1_%RTJ*_!SETUR_^1_%ADD_"=XFIXREC_^1_%STA-_!DEQU0,Q_^1_%JMP*_!(SETFR)_(EXIT_^1*********************************************************_^1SETUR NOP_"0_*ENTRY_^1_%LDA-_!DEQU0,Q GET IOBFLG_^1_%AND*_!RECFM_"CLEAR RECORD TYPE FLAG BITS_^1_%JMP*_!(SETUR)_^1RECFM ADC_"(-MRECFM-BLOCKF)_^1*********************************************************_^1SETBR NOP€€_"0_*ENTRY_^1_%LDA-_!DEQU6,I_(PICK UP SCNUM(HEX NO. CONTAINED_^1_%STA-_!DEQU17,Q_'IN CURRENT PHRASE) AND STORE IN_^1_%JMP*_!(SETBR)_(RECORD OF DMB._^1*********************************************************_^1SETSF NOP_"0_*ENTRY_^1_%LDA-_!DEQU6,I_(PICK UP SCNUM(HEX NO. CONTAINED_^1_%STA-_!DEQU16,Q_!IN CURRENT PHRASE) AND STORE IN FORD_^1_%JMP*_!(SETSF)_(RECORD OF DMB_^1**********€€***********************************************_^1SETBLK NOP_"0_^1_%RTJ*_!ASGNUM_^1_%STA-_!DEQU7,Q_^1SETBL1 JMP*_!(SETBLK)_"EXIT_^1*********************************************************_^1SETRL NOP_"0_*ENTRY_^1_%RTJ*_!ASGNUM_^1_%STA-_!DEQU8,Q_^1SETRL1 JMP*_!(SETRL)_!EXIT_^1*********************************************************_^1LNC_"NOP_"0_^1_%RTJ*_!ASGNUM_^1_%STA-_!DEQU6,Q€€_^1_%JMP*_!(LNC)_^1_%ENT_"LNC_^1SETB_!NOP_"0_+ENTRY_^1_%LDA-_!DEQU4,Q_#GET LOG1 WORD AND SET MODE BIT ON_^1_%ADD*_!MODEBT_^1_%STA-_!DEQU4,Q_#BCD CONVERSION NOW SET_^1_%JMP*_!(SETB)_^1*********************************************************_^1SETE_!NOP_"0_+ENTRY_^1_%LDA-_!DEQU0,Q_!GET IOBFLG_^1_%INA_"ETOASC_^1_%STA-_!DEQU0,Q_"IOBFLG NOW SET FOR EBDIC CONVERSION_^1_%JMP*_!(SETE)_)EX€€IT_^1*********************************************************_^1SETA_!NOP_"0_+ENTRY_^1_%JMP*_!(SETA)_)EXIT_^1REWND EQU_"REWND(SETA)_^1*********************************************************_^1****************************************************_^1_%SPC_"4_^1_%SPC_"4_^1SCFLG EQU_"SCFLG(6)_^1SCNUM EQU_"SCNUM(SCFLG+1)_^1_%SPC_"4_^1*** THE FOLLOWING EQU STATEMENTS ARE USED TO_"**€€**_^1*** REFERENCE THE DATA MANAGEMENT BOLCK (DMB) ****_^1****************************************************_^1_%EQU_"DEQU0(1)_*IOBFLG -_#DEVICE DEPENDENT INFO_^1_%EQU_"DEQU1(DEQU0+1)_#RESERVED_^1_%EQU_"DEQU2(DEQU1+1)_"EOFADR -_#ADDR. - USER EOF ROUTINE_^1_%EQU_"DEQU3(DEQU2+1)_#ERREXT -_#ADDR. - USER ERROR PROC._^1_%EQU_"DEQU4(DEQU3+1)_"LOG1 -_%LOGICAL UNIT NO._^1_%EQU_"DEQU5(DE€€QU4+1)_"ABUFFP =_#ADDR. - USER BUFFER POOL_^1_%EQU_"DEQU6(DEQU5+1)_"LBUFFP -_#LENGTH OF BUFFER POOL_^1_%EQU_"DEQU7(DEQU6+1)_#MAXBLK -_#MAXI. BLOCKSIZE TO RD/WR_^1_%EQU_"DEQU8(DEQU7+1)_#RECSIZ -_#MAXI. SIZE -LOGICAL RECORD_^1_%EQU_"DEQU9(DEQU8+1)_#ABLK -_%ADDR. - CURRENT BLOCK_^1_%EQU_"DEQU10(DEQU9+1)_"LBLK -_%LENGTH OF CURRENT BLOCK_^1_%EQU_"DEQU11(DEQU10+1)_!ARECL -_$ADDR.-CURRENT€€ LOG. RECORD_^1_%EQU_"DEQU12(DEQU11+1)_!LRECL -_$LENGTH OF CURRENT LOG REC_^1_%EQU_"DEQU13(DEQU12+1)_!BLKCNT -_#NO. OF BLOCKS PROCESSED_^1_%EQU_"DEQU14(DEQU13+1)_!RECCNT_%NO. OF RECORDS PROCESSED_^1_%EQU_"DEQU15(DEQU14+1)_!ALABEL -_#ADDR.-LABEL PROCESSOR_^1_%EQU_"DEQU16(DEQU15+1)_!FORD -_%FILE ORDINAL_^1_%EQU_"DEQU17(DEQU16+1)_!RECORD -_#RECORD ORDINAL_^1_%EQU_"DEQU18(DEQU17+1)_!AC€€ONV -_$ADDR.-CONVERSION ROUTINE_^1_%EQU_"DEQU19(DEQU18+1)_!ASLCT1 -_#ADDR.-SELECTION ROUTINE 1_^1_%EQU_"DEQU20(DEQU19+1)_!ASLCT2 -_#ADDR.-SELECTION ROUTINE 2_^1_%EQU_"DEQU21(DEQU20+1)_!ASLCT3 -_#ADDR.-SELECTION ROUTINE 3_^1_%SPC_"4_^1_%EXT_"GETBUF_^1_%ENT_"OPEN,INITBF,SKIP_^1_%ENT_"NOLABL_^1*************************************************_^1*** THE OPEN ROUTINE ALLOWS A FILE TO BE€€ PROCESSED ***_^1*** BY SETTING THE DMB PARAMETERS ACCORDING_'***_^1OPEN_!NOP_"0_-ENTRYPOINT_^1_%STQ-_!$FF_!SET THE I REGISTER TO POINT TO DMB BEING OPENED_^1_%LDA-_!DEQU0,Q_*GET FIRST WORD OF DMB_^1_%SAP_"OPEN1_-FILE IS NOT YET OPEN_^1OPEN1A EQU_"OPEN1A(*)_^1_%ENA_"S0_(FILE ALREADY OPEDN_^1_%RTJ*_!(SERR)_^1OPEN1 EQU_"OPEN1(*)_^1OPEN3 CLR_"A_^1_%STA-_!DEQU13,Q_^1_%STA-_!DEQU14,Q_€€^1_%LDQ-_!DEQU0,Q_^1_%QRS_"9_^1_%ENA_"3_^1_%LAQ_"Q_^1_%LDA*_!OPENLT,Q_(FIND LABEL PROCESSING ROUTINE_^1_%STA*_!OPEN4+1_^1OPEN4 RTJ+_!0_+CALL LABEL PROCESSOR_^1_%LDA-_!DEQU5,I ABUFFP = 0 ?_^1_%SAN_"OPEN5_-NO-SKIP_^1_%RTJ*_!INITBF CALL INITIALIZE ROUTINE_^1OPEN5 LDA-_!DEQU0,I GET IOBFLG_^1_%ADD*_!OPFLAG SET OPEN BIT_^1_%STA-_!DEQU0,I OPEN PROCESSING COMPLETE_^1_%JMP*_!(OPEN)_+EXI€€T_^1OPENQ NUM_"0_^1OPENLT ADC_"NOLABL_^1_%ADC_"STNLAB_^1_%ADC_"BSTLBL_^1_%SPC_"4_^1BSTLBL NOP_"0_"BYPASS ANY LABELS_^1_%ENA_"3_^1_%CLR_"Q_^1_%MUI-_!DEQU16,I_#SKIP 3 FILES FOR EACH ONE SPECIFIED_^1_%INA_"1_^1_%STA-_!DEQU16,I_$SKIP COUNT NOW READY FOR NO LABEL_^1_%RTJ*_!NOLABL_^1_%JMP*_!(BSTLBL)_^1*** INITIALIZE BUFFERS AND POINTERS FOR A READ ***_^1INITBF NOP_"0_^1_%LDA-_!DEQU7,I_*€€IS MAXBLK = 0_^1_%SAN_"INIT1_-NO-SKIP_^1_%ENA_"S014_"ZERO LENGTH BLOCKSIZE_^1_%RTJ*_!(SERR)_!ISSUE THE ERROR_^1INIT1 EQU_"INIT1(*)_^1_%ALS_"15_#CHECK FOR ODD LENGTH RECORD_^1_%SAP_"INIT1A_!EVEN IS OK_^1_%ENA_"S015_#ODD LENGTH REQUEST ISSUE ERROR_^1_%RTJ*_!(SERR)_^1INIT1A EQU_"INIT1A(*)_^1_%INA_"1_%ALWAYS GET ONE EXTRA CORE LOCATION FOR BUFFER_^1_%RTJ_"GETBUF_^1_%SQN_"INIT2_-Q=NOT€€ ZERO_^1_%JMP*_!OPEN1A_^1INIT2 STQ-_!DEQU5,I_^1_%STQ-_!DEQU9,I_^1_%STQ-_!DEQU11,I_^1_%CLR_"A_^1_%STA-_!DEQU10,I_^1_%STA-_!DEQU12,I_^1_%RTJ_"PUTIT_^1_%JMP*_!(INITBF)_^1OPFLAG NUM_"$8000 OPEN FLAG BIT POSITION 15_^1_%EXT_"GETLOC_^1_%SPC_"4_^1**** THIS ROUTINE PROCESSES NON-LABEL RECORDS **_^1NOLABL NOP_"0_+ENTRY_^1_%LDA-_!DEQU16,I_^1_%SAZ_"NOLA1_^1_%ENA_"REWIND REWIND TAPE IF POSITI€€ON TO FILE IS REQUIRED_^1_%RTJ*_!MOTION CALL MOTION SUBROUTINE_^1NOLADN LDA-_!DEQU16,I_!CHECK FILE ORDINAL_^1_%RTJ*_!SKIP_,POSITION TAPE FORWARD_^1_%STA-_!DEQU16,I_!CLEAR THE FILE ORDINAL NOTE SKIP RETURNS A ZERO_^1NOLA1 LDA-_!DEQU17,I RECORD = 0_^1_%SAN_"NOLA2_-NO-SKIP_^1_%JMP*_!(NOLABL)_^1NOLA2 LDA-_!DEQU0,I_^1_%ADD*_!OPFLAG_^1_%STA-_!DEQU0,I_^1_%RTJ*_!INITBF_^1NOLA3 LDQ-_!$FF€€ GET DMB POINTER_^1_%RTJ_"GETLOC READ A RECORD_^1_%LDA-_!DEQU17,I RECORD ORDINAL_^1_%INA_"-1_^1_%STA-_!DEQU17,I_!RESTORE_^1_%SAZ_"NOLA4_-RECORD = 0_^1_%JMP*_!NOLA3_^1NOLA4 LDA-_!DEQU0,I_^1_%SUB*_!OPFLAG_^1_%STA-_!DEQU0,I_^1_%JMP*_!(NOLABL)_!RETURN_^1_%SPC_"4_^1SKIP_!NOP_"0_^1_%STA*_!SKP1_,SAVE FILE ORDINAL_^1SKPR_!ENA_"SFILEM SET UP FOR SKIP FILE_^1_%RTJ*_!MOTION CALL THE MOTIO€€N ROUTINE_^1SKPTD LDA*_!SKP1_^1_%INA_"-1_^1_%STA*_!SKP1_^1_%SAZ_"SKIPDN_,YES - SKIP_^1_%JMP*_!SKPR_-REPEAT REQUEST_^1SKIPDN JMP*_!(SKIP)_$EXIT_^1SKP1_!NUM_"0_^1******************************************************_^1******************************************************_^1*** THE CLOSIO ROUTINE PROCESSES THE CLOSE_(***_^1*** DECLARITIVE STATEMENT. IT SETS UP CLSDMB_#***_^1*** AN€€D ASSOCIATED DMB FLAG AS FOLLOWS:_+***_^1***_)IOBFLG_(BITS= 1 0_,***_^1***_)REWIND_"=_*0 0_****_^1***_)UNLOAD_"=_*0 1_,***_^1***_)LEAVE_#=_*1 0_,***_^1***_)EOV_%=_*1 1_,***_^1******************************************************_^1_%ENT_"CLOSE_^1_%ENT_"CLOSIO,REWND,UNLOD,LEAVE,EOV_^1_%ENT_"CLSDMB_^1_%EXT_"SPARM,FPARM_^1_%EXT_"SCCB_^1_%EXT_"STATIS_^1CLOSIO NOP_"0_'ENTRY_^1_%RTJ*_!€€(XASGIO)_^1_%SAM_"CLOSER_^1_%INA_"-1_^1_%STA*_!CLSDMB_^1_%TRA_"Q_^1_%ENA_"-3_^1_%AND-_!1,Q_^1_%SAP_"CLOSER_^1_%STA-_!1,Q_^1_%RTJ_"SPARM_^1_%ADC_"SCCB_^1_%ADC_"FPARM_^1_%JMP*_!CI01_)JMP TO END OF SCAN_^1CLOSER RTJ_"FMTMSG_^1_%ADC_"OCERR_^1_%JMP_"RESTRT_^1CI01_!LDQ*_!CLSDMB_"DMB ADDRS. -1_^1_%RTJ*_!CLOSE_!CLOSE THE FILE_^1_%JMP*_!(CLOSIO)_$EXIT_^1CLSDMB NUM_"0_^1XASGIO ADC_"ASGIO_^1*€€******************************************************_^1***_)CLOSIO SUBROUTINES_4***_^1*******************************************************_^1_%SPC_"4_^1UNLOD NOP_"0_(UNLOAD PARAMETER_^1_%LDQ*_!CLSDMB_"GET DMB ADDRESS_^1UNLGD1 EQU_"UNLGD1(*)_^1_%RAO-_!DEQU0,Q_%INCREMENT IOBFLG_^1_%JMP*_!(UNLOD)_%EXIT_^1***********************************************_^1LEAVE NOP_"0_(LEAVE PARA€€METER_^1_%RTJ*_!UNLOD_"BASIC INITIALIZATION_^1_%RAO-_!DEQU0,Q_^1_%JMP*_!(LEAVE)_%EXIT_^1**********************************************_^1EOV_"NOP_"0_*END OF VOLUME PARAMETER_^1_%RTJ*_!LEAVE_"SEMI BASIC INITIALIZATION_^1_%RAO-_!DEQU0,Q_^1_%JMP*_!(EOV)_$EXIT_^1**********************************************_^1_%ENT_"BSPACE_^1_%EXT_"MESAGE_^1******************************************_^€€1*_!BSPACE - BACKSPACES SPECIFIED NUMBER*_^1*_,OF PHYSICAL RECORDS._%*_^1******************************************_^1_%SPC_"4_^1BSPACE NOP_"$0_^1BEGIN RTJ*_!(XASGIO)_1GET LOGICAL UNIT AND DMB_^1_%SAP_"PARMOK_^1_%RTJ*_!(RETYP)_(BAD PARM - GET RETYPE OF PARM_^1_%JMP*_!BEGIN_9TRY AGAIN_^1PARMOK EQU_"PARMOK(*)_^1_%TRA_"Q_^1_%INQ_"-1_^1_%LDA-_!1,Q_;CHECK IF FILE OPEN_^1_%SAM_"ITISOP_9€€YES_^1_%JMP_"MESAGE_9NO,LEAVE_^1ITISOP EQU_"ITISOP(*)_^1_%STQ*_!CLSDMB_7SAVE DMB ADDR._^1SCANIT EQU_"SCANIT(*)_^1_%RTJ_"SCAN_^1_%SAP_"GTONE_:NO. OF RECORDS SPECIFIED_^1_%ENA_"1_^1_%JMP*_!LTONE_^1GTONE EQU_"GTONE(*)_^1_%LDA-_!SCFLG,I_3CHECK IF NUMERIC_^1_%SAZ_"GETNUM_^1_%RTJ*_!(RETYP)_^1_%JMP*_!SCANIT_5TRY AGAIN_^1GETNUM EQU_"GETNUM(*)_^1_%LDA-_!SCNUM,I_4GET NO. OF RECORDS_^1LTONE €€ EQU_"LTONE(*)_^1_%RTJ_"SETCNT_^1REPCT NUM_"$0_^1REPEAT EQU_"REPEAT(*)_^1_%LDQ*_!CLSDMB_^1_%STQ-_!$FF_^1_%ENA_"BACKSP_5REQUEST CODE_^1_%RTJ*_!MOTION_5GACKSPACE ONE RECORD_^1_%RAO*_!REPCT_6INCREMENT COUNTER_^1_%SOV_"ENOUGH_5DONE_^1_%JMP*_!REPEAT_4DO IT AGAIN,BABY_^1ENOUGH EQU_"ENOUGH(*)_^1_%JMP*_!(BSPACE)_2EXIT_^1RETYP ADC_"RETYPE_^1_%SPC_"4_^1*************************************€€******_^1*_I*_^1*_!MOTION - USED TO PERFORM TAPE MOTION_!Z_^1*_+FUNCTIONS USING THE DMB_%*_^1*_I*_^1* CALLING SEQUENCE: ENA FUNCTION_(*_^1*_4RTJ MOTION_**_^1*_I*_^1********************************************_^1_%SPC_"4_^1_%EXT_"STATUS_^1MOTION NOP_"0_!ENTRY_^1_%ALS_"12_$PLACE FUNCTION CODE IN UPPER BITS_^1_%STA*_!MOTREQ SAVE IN REQUEST_^1_%LDA-_!DEQU4,I GET LOGICAL UNIT CODE_^1€€_%STA*_!LOGUNT_!SAVE IN REQUEST_^1MTTREQ EQU_"MTTREQ(*)_^1_%RTJ-_!($F4)_#MOTION REQUEST_^1_%NUM_"$1C00_^1_%NUM_"0_^1THRD_!NUM_"0_^1LOGUNT NUM_"0_^1MOTREQ NUM_"0_^1_%RTJ_"STATUS_^1_%ADC_"MTTREQ_^1_%SPC_"2_^1_%JMP*_!(MOTION) RETURN WITH FUNCTION STILL GOING ON_^1_%SPC_"4_^1*** FUNCTION EQUATES FOR CALLING MOTION ***_^1_%SPC_"4_^1REWIND EQU_"REWIND(3)_^1SFILEM EQU_"SFILEM(5)_^1UNLOAD €€EQU_"UNLOAD(4)_^1WFILEM EQU_"WFILEM(2)_^1SFILEB EQU_"SFILEB(6)_^1BACKSP EQU_"BACKSP(1)_^1_%SPC_"4_^1_%EXT_"SYSERR_^1_%SPC_"4_^1*************************************************_^1*_N*_^1*CLOSE ROUTINE - TERMINATES FILE PROCESSING_#*_^1*CALLING SEQUENCE: (Q) = DMB-1_/*_^1*_2RTJ CLOSE_2*_^1*_N*_^1*NOTE: THE DMB FLAG MUST BE SET TO THE_(*_^1*_%REQUIRED OPTION_8*_^1*_N*_^1***********€€**************************************_^1_%SPC_"4_^1CLOSE NOP_"0_+ENTRY_^1_%LDA-_!DEQU0,Q_^1_%SAM_"CLS010_+OPEN?_^1_%ENA_"S1_)FILE ALREADY CLOSED_^1_%RTJ_"SYSERR_^1CLS010 EQU_"CLS010(*)_!FILE OPEN_^1_%STQ-_!$FF_^1_%ALS_"1_^1_%SAM_"CLSWR1_+SKIP IF WRITE FILE_^1_%JMP*_!CLSRD1_*PROCESS READ FILE_^1CLSWR1 EQU_"CLSWR1(*)_^1_%ENA_"$10_!CHCK FOR UNWRITTEN RECORD_^1_%AND-_!DEQU0,I_^1_%SAZ€€_"CLS020 SKIP IF NO UNWRITTEN RECORDS_^1_%RTJ_"WRITE_,WRITE LAST BLOCK_^1CLS020 EQU_"CLS020(*)_^1_%ENA_"WFILEM_^1_%RTJ*_!MOTION_*WRITE A FILE MARK_^1_%RTJ_"STATIS_!PRINT STATISTICS AFTER EACH CLOSE OF A WRITE FILE_^1_%LDA-_!DEQU0,I_^1_%ALS_"6_0STANDARD LABEL PROCESSING?_^1_%SAP_"CLS030_+SKIP IF NO_^1_%RTJ_"CLSLAB_^1CLS030 EQU_"CLS030(*)_^1_%ENA_"3_^1_%AND-_!DEQU0,I_)EQV FLAG?_^1_%€€INA_"-3_^1_%SAN_"CLSRD1_^1_%ENA_"WFILEM_^1_%RTJ*_!MOTION_*WRITE SECOND FILE MARK_^1CLSRD1 EQU_"CLSRD1(*)_^1_%ENA_"3_^1_%AND-_!DEQU0,I_)LEAVE OPTION?_^1_%INA_"-2_^1_%SAN_"CLSRD2_+SKIP IF NO_^1_%LDA-_!DEQU1,I_^1_%JMP*_!CLSLV_"CHECK FOR LEAVE OPTIONS_^1CLSRD2 EQU_"CLSRD2(*)_^1_%ENA_"1_0CHECK FOR UNLOAD_^1_%AND-_!DEQU0,I_^1_%ENQ_"REWIND_^1_%SAZ_"CLS040_^1_%ENQ_"UNLOAD_^1CLS040 EQU_"CLS€€040(*)_^1_%TRQ_"A_0ISSUE REWIND OR UNLAOD FUNCTION_^1_%RTJ*_!MOTION_^1_%LDA-_!DEQU0,I_^1_%ALS_"6_^1_%SAP_"CLSRD4_^1_%RTJ_"RELLAB_+LABEL RELEASE_^1CLSRD4 EQU_"CLSRD4(*)_!FINAL PROCESSING_^1_%LDA-_!DEQU5,I_"RELEASE DATA BUFFERS_^1_%RTJ_"RELBUF_^1_%CLR_"A_^1_%STA-_!DEQU5,I_"CLEAR POINTER TO BUFFER_^1_%LDA-_!DEQU0,I_^1_%AND_"=N$7E7C_^1_%STA-_!DEQU0,I_^1_%JMP*_!(CLOSE)_^1_%SPC_"3_^1CLSL€€V EQU_"CLSLV(*)_!PROCESSES COMPLEX LABELED AND UNLABELD_^1_%LDQ-_!DEQU0,I_'LEAVE OPTIONS_^1_%ALS_"4_.CHECK FOR FILEMARK_^1_%SAP_"CLSRD5_)NO FILEMARK SIMPLY SKIP TO NEXT_^1_%QLS_"1_.YES CHECK FOR WRITE FILE_^1_%SQP_"CLSRD7_)NOT WRITE_^1_%JMP*_!CLSRD3_(ON WRITE NO PROCESSING_^1CLSRD7 EQU_"CLSRD7(*)_^1_%QLS_"5_$CHECK FOR LABELS_^1_%SQP_"CLSRD3_)NO LABELS DO NOTHING SINCE POS IS FM_^1€€_%LDQ-_!DEQU15,I_%GET ADDRESS OF DMB EXTENT_^1_%LDA-_!3,Q_+RESET FILE SEQUENCE NUMBER BY -1_^1_%INA_"-1_^1_%STA-_!3,Q_^1_%ENA_"$66_,NOW SKIP BACK TWO FILES- AND FINALLY ONE F_^1_%JMP*_!CLSRD6_^1CLSRD5 EQU_"CLSRD5(*)_^1_%ENA_"SFILEM_)NO FILE MAKR AND NO LABELS_^1CLSRD6 EQU_"CLSRD6(*)_^1_%RTJ*_!MOTION_(ISSUE MOTION OPTION_^1_%LDA-_!DEQU0,I_'IS FILE LABELED?_^1_%AND_"=XMLABEL_^1_%SAZ_€€"CLSRD3_)NO IT IS NOT_^1_%ENA_"SFILEM_)SKIP TO HDRS OR BYPASS THEM_^1_%RTJ*_!MOTION_^1CLSRD3 EQU_"CLSRD3(*)_^1_%JMP*_!CLSRD4_(BYPASS LABEL BUFFER RELEASE SEGMENT_^1_%SPC_"4_^1*_!DEVICE CODE ASSOCIATION TABLE_^1_%SPC_"2_^1DEVICE EQU_"DEVICE(*)_^1_%ADC_"DMBTAB-2_^1IN_#NUM_"$0049_^1OUT_"NUM_"$004F_^1VF_#NUM_"$4656_^1PR_#NUM_"$5250_^1_%NUM_"$FFFF_!EBD OF TABLE_^1_%SPC_"4_^1***********€F*******************_^1* DATA MANAGEMENT BLOCKS_#*_^1******************************_^1_%SPC_"4_^1INPUT BZS_"INPUT(22)_^1OUTPUT BZS_"OUTPUT(22)_^1PRNDMB BZS_"PRNDMB(22)_^1_%SPC_"4_^1OUTM1 EQU_"OUTM1(OUTPUT-1)_^1PRNM1 EQU_"PRNM1(PRNDMB-1)_^1INPM1 EQU_"INPM1(INPUT-1)_^1OCERR ALF_"14,23C*INVALID OPEN OR CLOSE*;_^1_%END_]_^__FPRDWTR CSY/ P€1_%NAM RDWTR_(SUP 1.0+CYB_^1*******************************************_^1*** THE READ ROUTINE READS ONE PHYSICAL RECORD ***_^1*** FROM A FILE - THE I-REG MUST BE SET TO THE ***_^1*** ADDRESS OF THE DMB BLOCK BEFORE CALLING READ***_^1*******************************************_^1_%ENT_"READ,WRITE,RDWT_^1S2_#EQU_"S2(66)_^1_%EXT_"EOFSL_^1_%EXT_"MOTION_^1_%EXT_"MESAGE_^1_%EXT_"S€€YSERR_^1_%EXT_"AVSEOT_^1S010_!EQU_"S010(74)_^1S011_!EQU_"S011(75)_^1READ_!NOP_"0_%ENTRY POINT_^1_%LDA-_!DEQU0,I_^1_%SAM_"READOK_$OPEN FLAG SET - CONTINUE_^1_%JMP_"MESAGE_^1READOK EQU_"READOK(*)_^1_%LDA-_!DEQU7,I_^1_%STA-_!DEQU10,I_^1_%LDQ*_!RDUNF_^1READ1 EQU_"READ1(*)_^1_%RTJ*_!RDWT_%GO READ_^1_%ALS_"4_#END OF FILE?_^1_%SAP_"RC1A1 SKIP IF NOT END OF FILE_^1_%JMP*_!RC3 GO TO END O€€F EFILE PROCESOR_^1RC1A1 EQU_"RC1A1(*)_^1_%LDA-_!DEQU0,I GET FLAG WOD_^1_%AND_"=X(-MEOFF) CLEAR ANY END OF FILE CONDITION_^1_%STA-_!DEQU0,I IF A SUCCESSFUL READ AFTER FIRST EOF_^1RC2_"EQU_"RC2(*)_^1_%LDA*_!STLOGU_$COMPTE LENGTH OF PHYSICAL RECORD_^1_%SUB*_!BUFFX_%STLOGU IS SET TO READ LENGTH AFTER STATUS_^1_%INA_"1_-ADD INCREMENT TO GET ACTUAL LENGTH_^1_%ALS_"1_^1_%STA-_!DEQU10€€,I_!STORE LENGTH IN LBLK_^1REC4_!RAO-_!DEQU13,I INCREMENT NO. OF BLANKS PROCESSED_^1_%JMP*_!(READ)_#EXIT_^1_%SPC_"4_^1RC3_"EQU_"RC3(*)_^1_%CLR_"A_"CLEAR BLOCK LENGTH_^1_%STA-_!DEQU10,I_!TO INDICATE A FORCED READ IF PROCESSING CONTINU_^1_%LDA-_!DEQU0,I_^1MEOFFL AND_"=XMEOFF_!CHECK FOR A PRIOR EOF_^1_%SAZ_"FEOF NO THIS IS THE FIRST_^1_%ENA_"S011_+END OF VOLUME_^1_%JMP*_!IOERR2_^1FEO€€F_!EQU_"FEOF(*)_^1_%LDA-_!DEQU0,I_"CHECK FOR LABEL PROCESSING_^1_%ALS_"5_^1_%SAP_"EOFSLP_$CHECK FOR BYPASS LABELS_^1_%LDA_"=N$5005_^1_%RTJ_"MOTION_"SKIP EOF AND HEADR LABELS_^1_%JMP*_!EOFNL_$FINISH PROCESSING_^1EOFSLP EQU_"EOFSLP(*)_^1_%ALS_"1_+CHECK FOR STANDARD LABELS_^1_%SAP_"EOFNL_%NO LABELS_^1_%RTJ_"EOFSL_%PROCESS STANDARD EOF LABELS_^1EOFNL EQU_"EOFNL(*)_^1_%LDA*_!MEOFFL+1_!€€SET EOF1 FLAG_^1_%ADD-_!DEQU0,I_^1_%STA-_!DEQU0,I_^1_%LDQ-_!DEQU2,I_^1_%SQN_"SEOFE_^1_%RTJ*_!IOERR_^1SEOFE EQU_"SEOFE(*)_^1_%INQ_"-1_^1_%JMP-_!1,Q_)TAKE END OF FILE EXIT_^1RLWA_!NUM_"0_^1RDUNF NUM_"$800_#FORMATTED READ REQUEST CODE_^1****************************************************_^1*** THE FOLLOWING EQU STATEMENTS ARE USED TO_"****_^1*** REFERENCE THE DATA MANAGEMENT BOLCK €€(DMB) ****_^1****************************************************_^1_%EQU_"DEQU0(1)_*IOBFLG -_#DEVICE DEPENDENT INFO_^1_%EQU_"DEQU1(DEQU0+1)_#RESERVED_^1_%EQU_"DEQU2(DEQU1+1)_"EOFADR -_#ADDR. - USER EOF ROUTINE_^1_%EQU_"DEQU3(DEQU2+1)_#ERREXT -_#ADDR. - USER ERROR PROC._^1_%EQU_"DEQU4(DEQU3+1)_"LOG1 -_%LOGICAL UNIT NO._^1_%EQU_"DEQU5(DEQU4+1)_"ABUFFP =_#ADDR. - USER BUFFER POOL_^1€€_%EQU_"DEQU6(DEQU5+1)_"LBUFFP -_#LENGTH OF BUFFER POOL_^1_%EQU_"DEQU7(DEQU6+1)_#MAXBLK -_#MAXI. BLOCKSIZE TO RD/WR_^1_%EQU_"DEQU8(DEQU7+1)_#RECSIZ -_#MAXI. SIZE -LOGICAL RECORD_^1_%EQU_"DEQU9(DEQU8+1)_#ABLK -_%ADDR. - CURRENT BLOCK_^1_%EQU_"DEQU10(DEQU9+1)_"LBLK -_%LENGTH OF CURRENT BLOCK_^1_%EQU_"DEQU11(DEQU10+1)_!ARECL -_$ADDR.-CURRENT LOG. RECORD_^1_%EQU_"DEQU12(DEQU11+1)_!LRECL€€ -_$LENGTH OF CURRENT LOG REC_^1_%EQU_"DEQU13(DEQU12+1)_!BLKCNT -_#NO. OF BLOCKS PROCESSED_^1_%EQU_"DEQU14(DEQU13+1)_!RECCNT_%NO. OF RECORDS PROCESSED_^1_%EQU_"DEQU15(DEQU14+1)_!ALABEL -_#ADDR.-LABEL PROCESSOR_^1_%EQU_"DEQU16(DEQU15+1)_!FORD -_%FILE ORDINAL_^1_%EQU_"DEQU17(DEQU16+1)_!RECORD -_#RECORD ORDINAL_^1_%EQU_"DEQU18(DEQU17+1)_!ACONV -_$ADDR.-CONVERSION ROUTINE_^1_%EQU_"DEQU€€19(DEQU18+1)_!ASLCT1 -_#ADDR.-SELECTION ROUTINE 1_^1_%EQU_"DEQU20(DEQU19+1)_!ASLCT2 -_#ADDR.-SELECTION ROUTINE 2_^1_%EQU_"DEQU21(DEQU20+1)_!ASLCT3 -_#ADDR.-SELECTION ROUTINE 3_^1******************************************_^1*_"EQUATES FOR IOBFLG % MASKS_(*_^1******************************************_^1*_"MASKS_]_^1_%SPC_"4_^1MRDWRF EQU_"MRDWRF($4000)_^1MBLOCK EQU_"MBLOCK($2000)_^1M€€RECFM EQU_"MRECFM($1800)_^1MLABEL EQU_"MLABEL($600)_^1MEOVF EQU_"MEOVF($100)_^1MEOFF EQU_"MEOFF($80)_^1MRESRV EQU_"MRESRV($10)_^1MCONVF EQU_"MCONVF($60)_^1MSELTF EQU_"MSELTF($C)_^1MCLOSF EQU_"MCLOSF($3)_^1_%SPC_"4_^1*IOBFLG_]_^1_%SPC_"4_^1RDWRF EQU_"RDWRF(MRDWRF)_^1BLOCKF EQU_"BLOCKF(MBLOCK)_^1UNDREC EQU_"UNDREC(0)_^1FIXREC EQU_"FIXREC($800)_^1VARREC EQU_"VARREC($1000)_^1NOLBL €€EQU_"NOLBL(0)_^1STNDLB EQU_"STNDLB($200)_^1BYPSLB EQU_"BYPSLB($400)_^1EOVF_!EQU_"EOVF(MEOVF)_^1EOFF_!EQU_"EOFF(MEOFF)_^1NOCONV EQU_"NOCONV(0)_^1ETOASC EQU_"ETOASC($20)_^1BTOASC EQU_"BTOASC($40)_^1CLREW EQU_"CLREW(0)_^1CLUNL EQU_"CLUNL($1)_^1CLLEAV EQU_"CLLEAV($2)_^1CLEAOV EQU_"CLEOV($3)_^1_%SPC_"4_^1************************************************_^1*** THIS IS THE ROUTINE THAT €€OUTPUTS THE **_^1*** READ OR WRITE FUNCTION_2**_^1RDWT_!NOP_"0_$READ/WRITE REQUEST_^1_%STQ*_!REQCD_^1_%LDA-_!DEQU4,I_^1_%STA*_!RDLUN_^1_%LDA-_!DEQU9,I_^1_%STA*_!BUFFX_^1_%LDQ-_!DEQU10,I_^1_%LRS_"1_^1_%SAP_"RDWT05_^1_%INQ_"1_^1RDWT05 EQU_"RDWT05(*)_^1_%STQ*_!BUFFL_^1_%SPC_"4_^1_%RTJ-_!($F4)_$ISSUE REQUEST_^1REQCD NUM_"0_$REQUEST CODE_^1_%NUM_"0_^1RDTHD NUM_"0_#THREAD_^1RDLUN NUM€€_"0_#LOGICAL UNIT NUMBER_^1BUFFL NUM_"0_$BUFFER LENGTH_^1BUFFX NUM_"0_$BUFFER ADDRESS_^1_%SPC_"4_^1_%RTJ*_!STATUS_^1_%ADC_"REQCD-1_^1RDONE1 JMP*_!(RDWT)_!EXIT_^1******************************************_^1*** THIS ROUTINE WRITES A RECORD ON THE **_^1*** SPECIFIED FILE_6**_^1********************************************_^1WRITE NOP_"0_$ENTRY_^1_%LDA-_!DEQU0,I_"OPEN FLAG MUST BE€€ SET_^1_%SAM_"OPENX_^1_%JMP_"MESAGE_^1OPENX ALS_"1_^1_%SAM_"WRIF2_%OK - CONTINUE WITH WRITE_^1WRIF1 EQU_"WRIF1(*)_^1_%RTJ*_!IOERR_^1WRIF2 EQU_"WRIF2(*)_^1_%LDQ*_!WTUNF_^1WRITE1 EQU_"WRITE1(*)_^1_%RTJ*_!RDWT_%GO WRITE_^1_%RAO-_!DEQU13,I_!COUNT THE NUMBER OF BLOCKS_^1_%LDQ-_!DEQU0,I_!GET IOBFLG_^1_%LLS_"3 CHECK IF TAPE DRIVE_^1_%SAP_"NEOT NO_^1_%LLS_"3 CHECK IF END-OF-TAPE_^1_%€€SAP_"NEOT_%STATUS SAYS NOT EOT_^1_%SQM_"LABELE_#IOBFLG INDICATES LABELED SO PROCESS EOV LABELS_^1_%QLS_"3_)IOBFLG INDICATES IGNORE EOT_^1_%SQM_"NEOT_^1_%ENA_"S010_%ISSUE SYSTEM ERROR MESSAGE_^1_%JMP*_!IOERR2_^1LABELE EQU_"LABELE(*)_^1_%RTJ_"AVSEOT_#GO TO AUTOMATIC VOLUME SEQUENCE OPERATION_^1NEOT_!EQU_"NEOT(*)_^1_%JMP*_!(WRITE)_"BLOCKS PROCESSED_^1WTUNF NUM_"$C00_"FORMATTED WRITE €€REQUEST CODE_^1_%SPC_"4_^1*********************************************************_^1*IOERR - CHECKS FOR DMB ERROR EXIT_5*_^1*AND ISSUES ERROR_F*_^1*********************************************************_^1_%SPC_"4_^1IOERR NOP_"0_^1_%ENA_"S2_^1IOERR2 EQU_"IOERR2(*)_^1_%RTJ_"SYSERR_^1_%SPC_"4_^1******************************************************_^1*STATUS ROUTINE - SET DMB WO€€RD 2 TO CURRENT_)*_^1*DEVICE STATUS_F*_^1******************************************************_^1_%SPC_"4_^1_%ENT_"IOERR,STATUS_^1STATUS NOP_"0_^1_%LDQ*_!(STATUS)_^1_%LDA-_!3,Q_6WAIT FOR COMPLETION_^1_%SAZ_"ST010_^1_%JMP*_!*-2_^1ST010 EQU_"ST010(*)_^1_%LDA-_!$FF_6SAVE I REG_^1_%STA*_!IOERR_^1_%LDA-_!DEQU4,I_^1_%STA*_!STLOGU_3SET LOGICAL UNIT_^1_%SPC_"4_^1_%RTJ-_!($F4)_^1_%NUM_"$6€€00_^1STLOGU NUM_"0,0_^1_%LDQ-_!$FF_#GET LWA OF RECORD AND SAVE_^1_%STQ*_!STLOGU_!USE AS TEMPORARY LOCATION SEE READ_^1_%SPC_"4_^1_%LDQ*_!IOERR_4RESET I_^1_%STQ-_!$FF_^1_%STA-_!DEQU1,I_2SAVE STATUS_^1_%LDQ*_!(STATUS)_^1_%LDQ-_!4,Q_5CHECK V FIELD_^1_%SQP_"ST020_^1_%ALS_"4_^1_%SAM_"ST019_^1_%RTJ*_!IOERR_^1ST019 EQU_"ST019(*)_^1_%ALS_"12_^1ST020 EQU_"ST020(*)_^1_%RAO*_!STATUS_^1_%JM€P*_!(STATUS)_^1_%END_]_^__PLIOC CSY/ P€1_%NAM LIOC_)SUP 1.0+CYB_^1_%ENT_"GETMOV,GETLOC,MOVE,PUTMOV,PUTLOC_^1_%EXT_"READ,WRITE,RDWT,LBYTE,SBYTE_^1_%ENT_"PUTIT_^1_%ENT_"GETFF_^1_%EXT_"SYSERR_^1_%EXT_"SELECT_^1S3_#EQU_"S3(67)_^1S5_#EQU_"S5(69)_^1S6_#EQU_"S6(70)_^1*** THIS ROUTINE MOVES THE RECORD TO A SPECIFIED AREA ***_^1GETMOV NOP_"0_*ENTRY_^1_%LDA*_!(GETMOV)_!GET MOVE ADDRESS_^1_%ALS_"1_"CONVERT TO CHARACTER ADDRESS_^€€1_%STA*_!MOVADR_$STORE AS THE TO ADDRESS_^1_%RTJ*_!GETLOC_$GET A RECORD_^1_%INQ_"-1_!SET TO DMB -1_^1_%LDA-_!DEQU12,Q_"GET THE RECORD LENGTH FOR MOVE_^1_%LDQ-_!DEQU11,Q_"GET THE RECORD ADDRESS FROM DMB_^1_%QLS_"1_^1_%RTJ*_!MOVE_'MOVE THE RECORD TO USER AREA_^1MOVADR NUM_"0_$CHARACTER ADDRESS OF WHRE TO MOVE RECORD_^1_%LDQ*_!GTLOCQ_$RESET Q TO DMB ADDRESS_^1_%RAO*_!GETMOV_^1_%JMP*_!€€(GETMOV)_"RETURN TO CALLER_^1_%SPC_"4_^1******************************************_^1*_G*_^1* MOVE ROUTINE - MOVE A BLOCK OF DATA_!*_^1* FROM ONE CORE LOCATION TO ANOTHER_#*_^1*_G*_^1* CALLING SEQUENCE: RTJ MOVE_**_^1*_4ADC ADDRESS TO_#*_^1*_!(A) = NUMBER OF CHARACTERS TO MOVE_!*_^1*_!(Q) = CHARACTER ADDRESS OF FROM LOC *_^1*_G*_^1******************************************_^1_€€%SPC_"4_^1MOVE_!NOP_"0_!ENTRY TO MOVE_^1_%STQ*_!FROM_!FROM ADDRESS IN Q_^1_%LDQ*_!(MOVE) GET TO ADDRESS_^1_%STQ*_!TO_^1_%RTJ_"SETCNT_!SET OVERFLOW COUNTER BASED ON (A)_^1COUNT NUM_"0_!MOVE COUNTER_^1_%EXT_"SETCNT_^1NEXT_!LDQ*_!FROM_^1_%RTJ_"LBYTE_#GET A CHARACTER_^1_%STQ*_!FROM_^1_%LDQ*_!TO_^1_%RTJ_"SBYTE_^1_%STQ*_!TO_^1_%RAO*_!COUNT_^1_%SOV_"DONE_"CHECK LAST CHARACTER OF MOVE_^1€€_%JMP*_!NEXT CONTINUR MOVE_^1DONE_!RAO*_!MOVE_^1_%JMP*_!(MOVE) RETURN TO CALLER_^1FROM_!NUM_"0_^1TO_#NUM_"0_^1_%SPC_"4_^1**************************************************_^1***************************************************_^1*** GETLOC SETS A POINTER TO THE NEXT LOGICAL RECORD **_^1***************************************************_^1GETLOC NOP_"0_#ENTRY_^1_%LDA-_!$FF_^1_%STA*€€_!GETFF_^1_%STQ-_!$FF_^1GETNXT EQU_"GETNXT(*) RE-ENTRY FOR NEQ SELECTION_^1_%LDA-_!DEQU12,I COMPUTE NEXT RECORD ADDRESS - ARECL = ARECL+LRECL_^1_%ARS_"1_$LRECL/2_^1_%ADD-_!DEQU11,I_$RESULT_^1_%STA-_!DEQU11,I_!RESET ARECL_^1_%LDA-_!DEQU10,I_"COMPUTE LWA OF BUFFER - ABLK+LBLK/2_^1_%ARS_"1_#LBLK/2_^1_%ADD-_!DEQU9,I_!LWA - NOW CHECK IF ANY ROOM IS LEFT IN BUFFER_^1_%SUB-_!DEQU11,I_^1_€€%SAM_"GETL4_%THERE IS A COMPLETE RECORD - SKIP_^1_%SAZ_"GETL4_%YES-SKIP_^1GETL1 LDA-_!DEQU0,I IS THE RECORD VARIABLE LENGTH_^1_%AND*_!N1800 MASK OUT ALL BITS BUT 11 AND 12_^1_%ARS_"11_^1_%SAN_"GETL2_^1_%LDA-_!DEQU10,I_!RECORD IS UNDEFINED_^1_%STA-_!DEQU12,I_^1_%JMP*_!GETLC_$GO CHECK FOR CONVERT_^1GETL4 JMP*_!GETL4A_^1GETL2 INA_"-2_#IS RECORD VARIABLE LENGTH_^1_%SAZ_"GETL2A_#YE€€S-SKIP_^1_%LDA-_!DEQU8,I_!NO-SET LRECL - RECSIZ_^1_%STA-_!DEQU12,I_^1_%JMP*_!GETLC_^1GETL2A LDA-_!DEQU11,I_^1*_.PICK UP RDW TO CHECK LENGTH FOR READ_^1_%STA*_!GETLH_^1_%LDA*_!(GETLH)_^1_%SUB-_!DEQU8,I_*IS IT GREATER THEN MAX. ALLOWED_^1_%SAM_"GET3_-NO-SKIP_^1_%SAZ_"GET3_%ZERO OK_^1VERR1 EQU_"VERR1(*)_^1_%ENA_"S3_^1SERR_!EQU_"SERR(*)_^1_%RTJ_"SYSERR_#GO TO ERROR ROUITNE_^1GET3_!LD€€A*_!(GETLH)_%RECORD LENGTH_^1_%INA_"-4_0STORE IT IN CURRENT LOG. REC. LENGTH_^1_%STA-_!DEQU12,I_^1_%RAO-_!DEQU11,I_)INCREMENT ADDRS OF CURRENT_^1_%RAO-_!DEQU11,I_)LOG. REC BY TWO_^1GETLC EQU_"GETLC(*)_^1_%ENA_"$20_^1_%AND-_!DEQU0,I_"IF SET CALL ECONV OTHERWISE SKIP AROUND_^1_%SAZ_"GETL5_^1_%SET_"Q_!SET CONVERSION TO EBDIC TO ASCII_^1_%RTJ*_!ECONV_!CONVERT_^1GETL5 LDA-_!DEQU0,I_$W€€AS A SELECTION OPTION MADE_^1GETLCF EQU_"GETLCF(*)_^1_%ALS_"12_"IS SELECTION BEING USED_^1_%SAP_"GETLCE_"NO SKIP_^1_%RTJ_"SELECT_!CALL SELECTION_^1_%SAM_"GETLCE_!IF TRUE RECORD IS SELECTED_^1_%JMP*_!GETNXT_!NOT SELECTED TRY NEXT RECORD_^1GETLCE RAO-_!DEQU14,I_^1_%LDQ-_!$FF_^1_%LDA*_!GETFF_^1_%STA-_!$FF_^1_%SNO_"0_,CLEAR OVER FLOW_^1_%JMP*_!(GETLOC)_^1GTLOCQ NUM_"0_^1GETL4A RTJ_"REA€€D_"GO-READ_^1_%LDA-_!DEQU9,I_!STORE ADDR OF CURR BLOCK AS_^1_%STA-_!DEQU11,I_!ADDRS OF CURRENT LOGICAL RECORD_^1_%LDA-_!DEQU0,I_"IS RECORD VARIABLE LENGTH AND_^1_%CLR_"Q_"CHECK FOR VARIABLE BLOCKED RECORDS_^1_%LLS_"4_!OPEN,READ,BLOCK AND VARIABLE BITS IN Q - EXPECTED - 10_^1_%INQ_"-$B_^1_%SQZ_"GETL7_"IF ZERO VARIABLE BLOCKED_^1_%JMP*_!GETL1_!NOT VARIABLE BLOCKED TRY VARIABLE NEXT_^€€1GETL7 EQU_"GETL7(*)_^1_%LDQ-_!DEQU9,I_!ADDRESS OF BLOCK_^1_%INQ_"-1_^1_%LDA-_!1,Q_%OBTAIN BDW FROM FIRST WORD OF BLOCK_^1_%SUB-_!DEQU10,I COMPARE TO ACTUAL LENGTH READ_^1_%SAZ_"GETL8_#IF ZERO OK_^1_%JMP*_!VERR1_#NOT ZERO MUST HAVE READ ERROR_^1GETL8 EQU_"GETL8(*)_^1_%INQ_"3_!RESET RECORD POINTER TO BEYOND BDW_^1_%STQ-_!DEQU11,I_!NOW PROCESS AS VARIABEL_^1_%JMP*_!GETL2A_^1GETLH €€ NUM_"0_#RDW OF RECORD BLOCK_^1GETFF NUM_"0_$I-SAVE_^1****************************************************_^1*** THE FOLLOWING EQU STATEMENTS ARE USED TO_"****_^1*** REFERENCE THE DATA MANAGEMENT BOLCK (DMB) ****_^1****************************************************_^1_%EQU_"DEQU0(1)_*IOBFLG -_#DEVICE DEPENDENT INFO_^1_%EQU_"DEQU1(DEQU0+1)_#RESERVED_^1_%EQU_"DEQU2(DEQU1+1)_"EOFA€€DR -_#ADDR. - USER EOF ROUTINE_^1_%EQU_"DEQU3(DEQU2+1)_#ERREXT -_#ADDR. - USER ERROR PROC._^1_%EQU_"DEQU4(DEQU3+1)_"LOG1 -_%LOGICAL UNIT NO._^1_%EQU_"DEQU5(DEQU4+1)_"ABUFFP =_#ADDR. - USER BUFFER POOL_^1_%EQU_"DEQU6(DEQU5+1)_"LBUFFP -_#LENGTH OF BUFFER POOL_^1_%EQU_"DEQU7(DEQU6+1)_#MAXBLK -_#MAXI. BLOCKSIZE TO RD/WR_^1_%EQU_"DEQU8(DEQU7+1)_#RECSIZ -_#MAXI. SIZE -LOGICAL RECORD_^1_%€€EQU_"DEQU9(DEQU8+1)_#ABLK -_%ADDR. - CURRENT BLOCK_^1_%EQU_"DEQU10(DEQU9+1)_"LBLK -_%LENGTH OF CURRENT BLOCK_^1_%EQU_"DEQU11(DEQU10+1)_!ARECL -_$ADDR.-CURRENT LOG. RECORD_^1_%EQU_"DEQU12(DEQU11+1)_!LRECL -_$LENGTH OF CURRENT LOG REC_^1_%EQU_"DEQU13(DEQU12+1)_!BLKCNT -_#NO. OF BLOCKS PROCESSED_^1_%EQU_"DEQU14(DEQU13+1)_!RECCNT_%NO. OF RECORDS PROCESSED_^1_%EQU_"DEQU15(DEQU14+1)_!ALA€€BEL -_#ADDR.-LABEL PROCESSOR_^1_%EQU_"DEQU16(DEQU15+1)_!FORD -_%FILE ORDINAL_^1_%EQU_"DEQU17(DEQU16+1)_!RECORD -_#RECORD ORDINAL_^1_%EQU_"DEQU18(DEQU17+1)_!ACONV -_$ADDR.-CONVERSION ROUTINE_^1_%EQU_"DEQU19(DEQU18+1)_!ASLCT1 -_#ADDR.-SELECTION ROUTINE 1_^1_%EQU_"DEQU20(DEQU19+1)_!ASLCT2 -_#ADDR.-SELECTION ROUTINE 2_^1_%EQU_"DEQU21(DEQU20+1)_!ASLCT3 -_#ADDR.-SELECTION ROUTINE 3_^1***€€**************************************_^1_%SPC_"4_^1*****************************************_^1* ECONV - CONVERT FROM ASCII TO EBDIC *_^1*_)IF Q = FFFF OTHERWISE FROM_!*_^1*_)EBDIC TO ASCII._-*_^1*****************************************_^1_%SPC_"4_^1ECONV NOP_"0_"ENTRY_^1_%LDA-_!DEQU12,I_"GET RECORD LENGTH_^1_%RTJ MSOSMD_'DELETE CONVERSION REQUEST_^1_%JMP*_!(ECONV)_!RETURN WI€€TH CONVERTED RECORD_^1*_F*_^1*_!PUTMOVE ROUTINE TO PLACE A RECORD_!*_^1*_*INTO THE BUFFFER._**_^1* CALLING SEQUENCE: RTJ PUTMOV_'*_^1*_4ADC OF RECORD_#*_^1*_-(Q) - DMB ADDRESS-1_$*_^1*_-LRECL - LENGTH OF RECORD *_^1*_F*_^1*****************************************_^1_%SPC_"4_^1PUTMOV NOP_"0_!ENTRY_^1_%STQ*_!PTMV1_^1_%LDA-_!DEQU11,Q_!GET "TO" ADDRESS_^1_%ALS_"1_^1_%STA*_!MOVAD2_^1_€€%LDA-_!DEQU12,Q_!GET LENGTH_^1_%LDQ*_!(PUTMOV) GET FROM ADDRESS IN Q_^1_%QLS_"1_^1_%RTJ_"MOVE_"MOVE THE RECORD INTO THE BUFFER_^1MOVAD2 NUM_"0_^1_%RAO*_!PUTMOV_^1_%LDQ*_!PTMV1_^1_%RTJ*_!PUTLOC_!WRITE_^1_%JMP*_!(PUTMOV)_^1_%SPC_"4_^1**************************************************_^1*** PUTLOC SETS A POINTER TO THE NEXT AVAILABLE AREA **_^1*** FOR A LOGICAL RECORD_;**_^1PUTLOC €€NOP_"0_#ENTRY_^1_%LDA-_!$FF_^1_%STA*_!GETFF_^1_%STQ-_!$FF_^1_%ENA_"-$10_^1_%AND-_!DEQU0,I_"IS A CONVERSION NECESSARY_^1_%STA-_!DEQU0,I_^1_%ALS_"10_^1_%SAP_"PUT1_^1_%CLR_"Q SET CONVERSION FLAG FOR ASCII TO EBDIC_^1_%RTJ*_!ECONV_!CALL CONVERSION_^1PUT1_!LDA-_!DEQU10,I_^1_%ADD-_!DEQU12,I_!INCREMENT BLOCK SIZE_^1_%STA-_!DEQU10,I_^1_%LDA-_!DEQU0,I_"IS RECORD FORMAT OF UNDEFINED LENGTH_^€€1_%CLR_"Q_^1_%LLS_"5_%COMPUTE TYPE OF RECORD_^1_%INQ_"-$18_!GET RID OF UNWANTED BITS_^1_%JMP*_!TYPE,Q_!USE BRANCH TABLE_^1_%SPC_"3_^1TYPE_!EQU_"TYPE(*)_^1_%JMP*_!PUTBLK_!UNDEFINED WRITE RECORD_^1_%JMP*_!FIXED_^1_%JMP*_!VARREC_!VARIABLE UNBLOCKED RECORD_^1N1800 NUM_"$1800_!NOT POSIBLE SO USE AS CONSTANT_^1PTMV1 NUM_"0_%NOT POSSIBLE SO USE IN PUT MOV_^1_%JMP*_!FIXED_#FIXED BLOCK RE€€QUIRES NO SPECIAL PROCESSING_^1VARBLK EQU_"VARBLK(*) ENTER FOR VARIABLE BLOCKED RECORDS_^1_%SPC_"2_^1_%LDA-_!DEQU10,I_!COMPUTE BDW EACH TIME_^1_%INA_"4_)DO NOT RESET LBLK AT THIS TIME_^1_%LDQ-_!DEQU9,I_"GET ADDRESS OF ABLK_^1_%INQ_"-1_^1_%STA-_!1,Q_'SET UPPER BDW TO LENGTH_^1_%CLR_"A_^1_%STA-_!2,Q_'SET LOWER BDW_^1VARREC EQU_"VARREC(*)_^1_%LDA-_!DEQU10,I_"SET LBLK UP BY 4_^1_%INA_€€"4_^1_%STA-_!DEQU10,I_^1_%LDA-_!DEQU12,I_!COMPUTE LRELC AND RDW_^1_%INA_"4_^1_%STA-_!DEQU12,I_^1_%LDQ-_!DEQU11,I_!LOCATE RDW ADDRESS_^1_%INQ_"-3_^1_%STA-_!1,Q_'SET UPPER RDW_^1_%SUB-_!DEQU8,I_"CHECK FOR PROPER SIZE OF RECORD_^1_%SAZ_"VAROK_^1_%SAM_"VAROK_^1_%ENA_"S5_(VARIABLE SIZE ERROR_^1SERR2 JMP*_!SERR_(SERIOUS ERROR_^1VAROK EQU_"VAROK(*)_^1_%CLR_"A_*SET LOWER RDW IF OK_^1_%ST€€A-_!2,Q_^1_%SPC_"2_^1BLKCHK EQU_"BLKCHK(*)_^1_%LDA-_!DEQU7,I_"CHECK FOR ROOM IN BLOCK_^1_%SUB-_!DEQU8,I_^1_%SUB-_!DEQU10,I_!(A) = MAXBLK - MAXREC - LBLK_^1*_!(A) = + ROOM LEFT IN BLOCK_^1*_!(A) = - MUST WRITE_^1_%SAM_"PUTBLK_^1_%LDA-_!DEQU12,I_^1_%ARS_"1_^1_%ADD-_!DEQU11,I_^1_%STA-_!DEQU11,I_!AREC + LRECL_^1_%LDA-_!DEQU0,I_"SET UNWRITTEN BLOCK FLG_^1_%INA_"$10_^1_%STA-_!DEQU0,I_^1€€_%SPC_"4_^1PUTEX EQU_"PUTEX(*)_^1_%LDA*_!GETFF_!RESET FOR RETURN_^1_%LDQ-_!$FF_#RESET Q_^1_%STA-_!$FF_"RESET I_^1_%RAO-_!DEQU14,Q_!UP RECORD COUNT_^1_%LDA-_!DEQU11,Q (A) ARECL_^1_%SNO_"0_+CLEAR OVERFLOW_^1_%JMP*_!(PUTLOC)_!RETURN_^1_%SPC_"4_^1PUTBLK EQU_"PUTBLK(*)_^1_%RTJ_"WRITE_#WRITE THE RECORD_^1_%LDA-_!DEQU9,I_^1_%STA-_!DEQU11,I_!RESET AREC TO ABLK_^1_%CLR_"Q_^1_%STQ-_!DEQU10€€,I_!CLEAR LBLK_^1_%RTJ*_!PUTIT_$INITIALIZE FOR NEXT BLOCK_^1_%JMP*_!PUTEX_#EXIT_^1_%SPC_"3_^1FIXED EQU_"FIXED(*)_^1_%LDA-_!DEQU12,I_^1_%SUB-_!DEQU8,I_+LRECL = MAXREC_^1_%SAZ_"FIXOK_"NOT EQUAL N_^1_%ENA_"S6_(IT IS AN ERROR_^1_%JMP*_!SERR2_^1FIXOK JMP*_!BLKCHK_+CONTINUE_^1_%SPC_"4_^1PUTIT NOP_"0_^1_%LDA-_!DEQU0,I RECORD VARIABLE LENGTH_^1_%ALS_"1_^1_%SAP_"PUT10_!IF READ FILE - EX€€IT_^1_%ARS_"13_!PLACE WRITE, BLK, REC_^1*_+FLAGS IN BITS 2,1,0_^1_%ENQ_"7_^1_%LAQ_"A_^1_%ENQ_"2_^1_%INA_"-5_!VARIABLE_^1_%SAZ_"PUTVAR SKIP IF VAR_^1_%INA_"-2_"VAR BLOCKED_^1_%SAM_"PUT10_!SKIP IF NOT - EXIT_^1_%ENA_"4_^1_%ADD-_!DEQU10,I_!INCREMENT LBLK_^1_%STA-_!DEQU10,I_!BY 4 TO ACCOUNT FOR BDW_^1_%ENQ_"4_^1PUTVAR ADQ-_!DEQU11,I_!SET AREC TO BY PASS_^1_%STQ-_!DEQU11,I_!BDW AND R€€DW_^1PUT10 JMP*_!(PUTIT) EXIT_^1MSOSMD NOP 0_^1_%STA* DRRCL_(RECORD LENGTH_^1_%LDA- DEQU11,I_$RECORD ADDRESS_^1_%STA* DRADR_^1_%LDA- I_,SAVE REGISTER_^1_%STA* SVIREG_^1_%QLS 15_+CHECK BIT 0 OF Q_^1_%SQM PSQ_^1_%LDA =AE_*E FOR CONV TO EVCDIC_^1_%JMP* GOCON_^1PSQ_"LDA =AA_^1GOCON STA* CVPM_)PUT IN DRAFT DATA SPEC._^1_%RTJ CONVRT_^1_%EXT CONVRT_^1_%ADC DRDTA1_^1_%ADC DRDTA€ζ2_^1_%LDA* SVIREG_'RESTORE I REG._^1_%STA- I_^1_%JMP* (MSOSMD)_$RETURN_^1SVIREG NUM 0_^1CVPM_!NUM 0_^1DRDTA1 NUM $2010_(DRAFT DATA TABLE_^1DRADR ADC 0_^1DRRCL NUM 0_^1DRDTA2 NUM $2010_^1_%ADC CVPM_^1_%ADC 2_^1_%END_]_^__ζPCOPY CSY/ P€1_%NAM COPY_)SUP 1.0+CYB_^1***********************************************************_^1*** THE COPY MODULE PERFORMS THE BASIC UTILITY FUNCTION ***_^1*** OF COPYING MAGNETIC TAPE FILES_5***_^1************************************************************_^1_%ENT_"COPY_^1_%EXT_"COUNT1,COUNT2_^1_%EXT_"INPM1_^1_%EXT_"SYSERR_^1_%EXT_"INPUT,OUTPUT_^1_%EXT_"RCOUNT,FCOUNT,SPARM_^1_%EXT_€€"SCCB,GETLOC,PUTMOV_^1_%EXT_"FPARM,CLOSE,OPEN_^1_%EQU_"DEQU11(12)_^1_%EQU_"DEQU12(DEQU11+1)_^1W3_#EQU_"W3(3)_^1_%EXT_"MESAGE_^1_%EXT_"STNDMP_^1_%EXT_"STATIS_^1_%SPC_"4_^1DEQU0 EQU_"DEQU0(1)_^1COPY_!NOP_"0_%ENTRY_^1_%LDA*_!(COPYI)_"IS INPUT DMB OPEN_^1_%SAP_"COPYE1_$NO-SKIP(ERROR)_^1_%LDA*_!(COPYO)_"IS OUTPUT DMB OPEN_^1_%SAM_"COPY1_%YES-SKIP_^1COPYE1 JMP_"MESAGE_^1_%JMP*_!(COPY)_^€€1COPY1 EQU_"COPY1(*)_^1_%ENQ_"8_^1_%LDA*_!(COPYI),Q GET LENGTH OF CURRENT RECORD_^1_%STA*_!CLRECL_#FROM INPUT DMB AND SAVE_^1_%LDA*_!(COPYO),Q GET LENGTH OF CURRENT RECORD_^1_%SUB*_!CLRECL_#FROM OUTPUT DMB AND COMPARE_^1_%SAZ_"COPY2_%THE TWO FOR EQUAL VALUES_^1_%ENA_"W3_^1_%RTJ_"SYSERR_^1COPY2 EQU_"COPY2(*)_^1_%RTJ_"STNDMP INITIALIZE FOR STANDARD PARAMETERS_^1COPY3 LDQ*_!COPIM€€1_!GET ADDR. OF INPUT DMB-1_^1_%LDA_"=XCOPEOF_!END OF FILE ADDRS PROCESSOR_^1_%STA-_!DEQU2,Q_"STORE ADDR IN INPUT DMB EORADR_^1_%RTJ_"GETLOC_^1_%LDQ*_!COPIM1 GET ADDR, OF INPUT DMB-1_^1_%LDA-_!DEQU11,Q_!GET ADDRS. OF CURRENT RECORD FOR PUTMOV_^1_%STA*_!COPY3A_^1_%LDA-_!DEQU12,Q_!STORE LENGTH OF RECORD IN OUTPUT DMB_^1_%LDQ*_!COPYO_^1_%INQ_"-1_^1_%STA-_!DEQU12,Q_^1_%RTJ_"PUTMOV_^1C€€OPY3A NUM_"0_^1_%RTJ_"COUNT1_^1_%SAZ_"COPY5_^1_%JMP*_!COPY3_^1COPY5 EQU_"COPY5(*)_^1_%JMP*_!(COPY)_#EXIT_^1**** END OF FILE ROUTINE **********_^1COPEOF RTJ_"COUNT2_^1_%SAN_"COPY6_^1_%JMP*_!COPY5_^1COPY6 EQU_"COPY6(*)_^1_%LDQ*_!COPYO_^1_%INQ_"-1_^1_%ENA_"-3_^1_%AND-_!DEQU0,Q_^1_%INA_"2_^1_%STA-_!DEQU0,Q_^1_%RTJ_"CLOSE_^1_%LDQ-_!$FF_^1_%RTJ_"OPEN_^1_%JMP*_!COPY3_^1CLRECL NUM_"0_^€\1COPYI ADC_"INPUT_^1COPYO ADC_"OUTPUT_^1COPIM1 ADC_"INPM1_^1_%EQU_"DEQU2(3)_^1_%END_]_^__\PEXIT CSY/ P€1_%NAM EXIT_)SUP 1.0+CYB_^1***THIS FUNCTION CLOSES THE DATA MANAGE-**_^1***MENT BLOCKS AND EXITS TO SYSTEM READY**_^1_%ENT_"EXIT_^1_%EXT_"INPM1,OUTM1,PRNM1,CLOSE,UNLOD,CLSDMB_^1_%EXT_"FMTMSG_^1EXIT_!NOP_"0_8ENTRY_^1_%ENQ_"1_^1_%LDA*_!(EXCI),Q_3IS INPUT DMB OPEN_^1_%LDQ*_!EXCI_^1_%RTJ*_!EXCL_8CLOSE INPUT DMB_^1EX1_"LDA*_!(EXCO),Q_1IS OUTPUT DMB OPEN_^1_%LDQ*_!EXCO_^1_%RTJ*_!EXCL_8C€€LOSE OUTPUT DMB_^1EX2_"LDA*_!(EXPR),Q_1IS PRINT DMB OPEN_^1_%LDQ*_!EXPR_^1_%RTJ*_!EXCL_8CLOSE PRINT DMB_^1EX3_"RTJ_"FMTMSG_^1_%ADC_"EXED_^1_%RTJ-_!($F4)_2EXIT TO TAPE SCOPE_^1_%ADC_"$0A00_^1EXCL_!NOP_"0_3ENTRY_^1_%SAP_"EXCX_^1_%STQ_"CLSDMB_^1_%RTJ_"UNLOD_2SET UNLOAD BIT IN DMBFLAG_^1_%RTJ_"CLOSE_^1EXCX_!ENQ_"1_^1_%JMP*_!(EXCL)_^1EXCI_!ADC_"INPM1_^1EXCO_!ADC_"OUTM1_^1EXPR_!ADC_"PRNM€41_^1EXED_!ALF_"10,16CEND TAPE UTILITY;_^1_%END_]_^__4PPRINT CSY/ P€1_%NAM PRINT_(SUP 1.0+CYB_^1*_#10-25-74_$CCN1700PRI10-001_^1************************************************************_^1*_#TABLE OF FORMAT CHARACTERS USED BY PROCESSOR_(*_^1************************************************************_^1PRTLST NUM_"$0_*GARBAGE - IGNOR_^1_%NUM_"$25_+% IS THE SAME AS AMPER._!CCN1700PRI10-001_^1_%NUM_"$26_/% SET OR CLEAR INDIRECT_^1_%NUM_"$28_/( LE€€FT PAREN INITIATE REPEAT PROCESS_^1_%NUM_"$29_/) RIGHT PAREN - END REPEAT PROCESS_^1_%NUM_"$2A_.* END OF FORMAT CODE_^1_%NUM_"$2B_9+ SET FORWARD DATA LIST POINT_^1_%NUM_"$2D_9- SET BACK DATA LIST POINTER_^1_%NUM_"$2E_9. VARIABLE FORMAT PARAMETER_^1_%NUM_"$2F_./ END OF LINE - UPSPCE ONE LINE_^1_%NUM_"$3B_+; EDN OF RECORD ; END OF FORMAT CODE_^1_%NUM_"$41_/A START ASCII INSERTION_^1_€€%NUM_"$43_/C START CHARACTER SUBSTITUTION_^1_%NUM_"$44_/D START DECIMAL CONVERSION 1 WORD_^1_%NUM_"$45_9E TOP OF FORM INDICATOR_^1_%NUM_"$48_/H START HEX TO ASCII CONVERSION_^1_%NUM_"$4B_9K INDEX INCREMENT_^1_%NUM_"$50_/P START BYTE DECIMAL CONVERSION_^1_%NUM_"$53_/S SKIP DATA PROCESSOR_^1_%NUM_"$58_/X INSERT BLANKS_^1_%SPC_"4_^1*****************************************************€€*******_^1*_"TABLE OF FORMAT FORTRAN PROCESSOR ROUTINES_+*_^1************************************************************_^1_%SPC_"4_^1PRTTAB ADC_"PRT003_%ROUTINE TO SKIP GARBAGE FORMAT CHARACERS_^1_%ADC_"PRT220_(% IS THE SAME AS AMPER._!CCN1700PRI10-001_^1_%ADC_"PRT220_,% SET OR CLEAR INDIRECT INDICATOR_^1_%ADC_"PRT190_,( START REPEAT PROCESS_^1_%ADC_"PRT200_,) END OF REPEATED CHA€€RACTERS COUNT - 1_^1_%ADC_"PRT185_)* END OF FORMAT-EXIT_^1_%ADC_"PRT245_6+ SET FORWARD DATA LIST POINT_^1_%ADC_"PRT240_5- SET BACK DATA LIST POINTER N_^1_%ADC_"PRT230_6. VARIABLE FORMAT PARAMETER_^1_%ADC_"PRT160_,/ END OF LINE INDICATOR_^1_%ADC_"PRT180_(; END OF RECORD;END OF FORMAT_^1_%ADC_"PRT150_,A START ASCII INSERTION_^1_%ADC_"PRT130_,C START CHARACTER INSERTION_^1_%ADC_"PRT12€€0_,D START ONE WORD DECIMAL CONVERSION_^1_%ADC_"PRT330_6E TOP OF FORM INDICATOR_^1_%ADC_"PRT110_,H START HEX TO ASCII CONVERSION_^1_%ADC_"PRT250_6K INDEX INCREMENT_^1_%ADC_"PRT140_,P START BYTE DECIMAL CONVERSION_^1_%ADC_"PRT105_,S SKIP N WORDS OF DATA_^1_%ADC_"PRT100_,X INSERT N BLANK CHARACTERS_^1_%SPC_"4_^1_%ENT_"PRINT_^1**********************************************************€€**_^1*_Y*_^1* PRINT - SUBROUTINE TO PROCESS FORTRAN LIKE FORMAT_%*_^1*_)STATEMENTS FOR PRINTING._6*_^1*_Y*_^1* CALLING SEQUENCE - RTJ PRINT_:*_^1*_4ADC FORMAT_:*_^1*_4ADC DATLST_:*_^1*_4ADC BUFFER_:*_^1*_4NUM BUFFLNG_9*_^1*_X*_^1* AUTHOR - FODOR_I*_^1* DATE_!- NOVEMBER 20, 1972_=*_^1* EXTERNAL SUBROUTINES USED- SBYTE, LBYTE_0*_^1*_Y*_^1*****************************************€€*******************_^1_%SPC_"4_^1_%EXT_"SBYTE,LBYTE,MOTION_^1_%EXT_"PUTLOC_^1_%EXT_"SYSERR_^1_%EXT_"MESAGE_^1WFILEM EQU_"WFILEM(3)_^1_%SPC_"4_^1************************************_^1* EQUATES USED TO REFERENCE PRTDMB *_^1************************************_^1_%SPC_"4_^1IOBFLG EQU_"IOBFLG(1)_^1IOBFL2 EQU_"IOBFL2(IOBFLG+1)_^1EOFADR EQU_"EOFADR(IOBFL2+1)_^1ERREXT EQU_"ERREXT(EOFADR+€€1)_^1LOG1_!EQU_"LOG1(ERREXT+1)_^1ABUFFP EQU_"ABUFFP(LOG1+1)_^1LBUFFP EQU_"LBUFFP(ABUFFP+1)_^1MAXBLK EQU_"MAXBLK(LBUFFP+1)_^1RECSIZ EQU_"RECSIZ(MAXBLK+1)_^1ABLK_!EQU_"ABLK(RECSIZ+1)_^1LBLK_!EQU_"LBLK(ABLK+1)_^1ARECL EQU_"ARECL(LBLK+1)_^1LRECL EQU_"LRECL(ARECL+1)_^1BLKCNT EQU_"BLKCNT(LRECL+1)_^1RECCNT EQU_"RECCNT(BLKCNT+1)_^1ALABEL EQU_"ALABEL(RECCNT+1)_^1FORD_!EQU_"FORD(ALABEL+1)_€€^1RECORD EQU_"RECORD(FORD+1)_^1ACONV EQU_"ACONV(RECORD+1)_^1ASLCT1 EQU_"ASLCT1(ACONV+1)_^1ASLCT2 EQU_"ASLCT2(ASLCT1+1)_^1ASLCT3 EQU_"ASLCT3(ASLCT2+1)_^1_%SPC_"4_^1_%SPC_"4_^1PRINT NOP_"0_,MAIN ENTRY TO PROCESSOR_^1_%LDA*_!(PRINT)_*GET FORMAT ADDRESS_^1_%ALS_"1_1MULTIPLY BY TWO TO GET CHARACTER ADDRES_^1_%STA*_!FMTADR_+SAVE AS POINTER TO FORMAT STATEMENT_^1_%RAO*_!PRINT_,INCREMENT€€ ADDRESS TO NEXT PARM_^1_%LDA*_!(PRINT)_*GET DATA LIST ADDRESS_^1_%ALS_"1_1CONVERT TO CHARACTER ADDRESS_^1_%STA*_!(ADTLST)_1SAVE IT_^1_%LDA*_!ADTLST_^1_%STA_"DATPTR_^1_%RAO*_!PRINT_,INCREMENT ADDRESS TO NEXT PARM_^1_%LDA_"=N$AAAA_^1_%STA_"IFLG_^1_%LDQ*_!(PRINT)_^1_%LDA-_!IOBFLG,Q_^1_%SAM_"GOOD_^1_%JMP_"MESAGE_^1GOOD_!LDA-_!$FF_^1_%STA*_!STOREI_^1_%STQ-_!$FF_^1_%CLR_"A_^1_%STA_"EOLF€€LG_^1_%RTJ_"PRESET_^1_%SPC_"6_^1PRT003 LDA*_!CHRCNT_"SAVE CHRCNT_^1_%STA_"OLDCNT_^1PRT005 CLR_"A_^1_%STA*_!TEMP05_^1PRT006 RTJ*_!GETFMT_'GET A FORMAT CHARACTER_^1_%STA*_!TCHAR SAVE THE CHARACTER_^1_%INA_"-$3A_.CHECK FOR DECIMAL NUMERIC_^1_%SAP_"PRT010_,NOT DECIMAL QUIT_^1_%INA_"$A_^1_%SAM_"PRT010_,NOT DECIMAL QUIT_^1_%STA*_!TCHAR_^1_%ENA_"$A_^1_%MUI*_!TEMP05_^1_%ADD*_!TCHAR_^1_%STA€€*_!TEMP05_^1_%JMP*_!PRT006_^1TEMP05 NUM_"$0_^1_%SPC_"4_^1************************************************************_^1* CHECK TO SEE IF NEXT CHARACTER IS IN TABLE AND JMP TO_!*_^1* FORMAT CHARACTER PROCESSOR_=*_^1************************************************************_^1_%SPC_"4_^1PRT010 LDA*_!TEMP05_^1_%SAZ_"1_^1_%STA*_!CHRCNT_^1_%ENQ_"19_,SET TABLE INDEX CCN1700PRI10-001€€_^1PRT012 LDA*_!TCHAR SET CHARACTER IN A_^1_%SUB*_!PRTLST,Q_)COMPARE TO TABLE CHARACTER_^1_%SAZ_"PRT015_,IF ZERO COMPARISON IS EQUAL_^1_%SAM_"PRT014_,IF LESS THAN ZERO EXIT SEARCH_^1_%ENQ_"1 SET UP FOR GARBAGE H CHARACTER EXIT_^1PRT014 INQ_"-1_*DECREMT INDEX_^1_%SQZ_"PRT015_,CHECK FOR END OF LIST AND EXIT IF TRUE_^1_%JMP*_!PRT012_+CONTINUE SCAN OF LIST_^1_%SPC_"4_^1*_!CALL PROCESSO€€R ROUTINE - ON COMPLETION REENTER AT PRT003*_^1PRT015 LDQ*_!PRTTAB,Q_"GET PROCESSOR ADDRESS_^1_%INQ_"-1 SET UP FOR ABSOLUTE INDEXING_^1_%JMP-_!1,Q_.GO TO PROCESSOR_^1TCHAR NUM_"0 HOLD AREA FOR CHARACTER_^1_%SPC_"4_^1************************************************************_^1* GETFMT - RETIEVE THE NEXT FORMAT CHARACTER FROM THE_#*_^1*_*BUFFER OF THE FORMAT STRING._2*_^1*******€€*****************************************************_^1_%SPC_"4_^1GETFMT NOP_"0_+ENTRY GETFMT_^1_%LDQ*_!FMTADR_+GET ADDRESS OF STRING_^1_%RTJ*_!(LBYTE1)_^1_%STQ*_!FMTADR_+SAVE Q ON RETURN AS NEXT FORMAT CHARACTE_^1_%JMP*_!(GETFMT)_)RETURN WITH (A) SET TO CHARACTER_^1_%SPC_"4_^1FMTADR ADC_"$0_*CHARACTER ADDRESS OF FORMAT STRING_^1_%SPC_"4_^1*****************************************€€**_^1*_"SETCNT - SET UP A COUNTER TO USE THE *_^1*_,OVERFLOW INDICATOR._(*_^1*******************************************_^1_%SPC_"4_^1SETCNT NOP_"0_^1_%LDA*_!CHRCNT_!GET CHARACTER COUNT AND CONVERT TO OVFL CNTR_^1_%RTJ_"SETCT2_"CALL EXTD SETCNT_^1_%EXT_"SETCT2_^1STCNT NUM_"0_^1_%JMP*_!(SETCNT)_^1CHRCNT NUM_"0_^1_%SPC_"4_^1_%SPC_"4_^1************************************************€€************_^1* PRT100 INSERT N BLANKS IN THE OUTPUT BUFFER. CHRCNT_"*_^1*_(CONTAINS THE NUMBER OF BLANKS TO INSERT._(*_^1************************************************************_^1_%SPC_"4_^1PRT100 RTJ*_!SETCNT_$SET UP FOR COUNTING_^1PRT102 ENA_"$20_)BALNK IN A_^1_%RTJ*_!STBUFF_+STORE CHARACTER IN BUFFER_^1_%RAO*_!STCNT_,COUNT UP_^1_%SOV_"PRT104_,DONE - EXIT_^1_%JMP*_!PRT10€€2_+KEEP STORING BLANKS_^1PRT104 JMP*_!PRT003_$EXIT TO FORMAT PROCESSOR_^1STOREI NUM_"$0_^1_%SPC_"4_^1*************************_^1* SKIP N WORDS OF DATA *_^1*************************_^1PRT105 RTJ*_!(PRT111+1) USE GETWRD TO FORCE PRINTER ALIGNMENT_^1_%LDA*_!CHRCNT_+GET NUMBER OF WORDS TO SKIP_^1_%INA_"1_^1_%ALS_"1_1MULTIPLY BY TWO_^1_%ADD*_!(ADTLST)_^1_%STA*_!(ADTLST)_1RESET DATA P€€OINTER_^1_%JMP*_!PRT003 EXIT_^1ADTLST ADC_"DTLSTC_^1_%SPC_"4_^1************************************************************_^1* H - CONVERT N WORDS OF HEX DATA TO ASCII PRINTER CHARS *_^1************************************************************_^1_%SPC_"4_^1PRT110 RTJ*_!SETCNT_^1PRT111 RTJ*_!(XGETWD)_#GET A WORD OF DATA_^1_%STA*_!(ATEMP)_^1PRT112 CLR_"Q_^1_%LDA*_!(ATEMP)_,GET €€SAVED WORD_^1_%LLS_"4_1CONVERT ONE HEX DIGIT NOW IN Q_^1_%STA*_!(ATEMP)_,STORE REMAINING DIGITS_^1_%TRQ_"A PROCESS THE MOST SIGNIFICANT 4 BITS_^1_%INA_"-$A_^1_%SAM_"PRT114_^1_%INA_"$7_^1PRT114 INA_"$3A_^1_%RTJ*_!STBUFF_+STORE THE RESULT IN THE BUFFER_^1_%RAO*_!STCNT_,COUNT DOWN THE CHRCNT_^1_%SOV_"PRT115_,DONE SKIP AND EXIT_^1_%JMP*_!PRT112_+KEEP PROCESSING_^1PRT115 JMP*_!PRT003_#E€€XIT_^1ATEMP ADC_"TEMP0_^1_%SPC_"4_^1*************************_^1*PROCESS DECIMAL WORD_!*_^1*************************_^1_%SPC_"4_^1PRT120 RTJ*_!(XGETWD)_#GET A DATA WORD_^1PRT125 RTJ*_!HDECAC_#CONVERT TO DECIMAL_^1_%JMP*_!PRT003_+EXIT_^1XGETWD ADC_"GETWRD_^1_%SPC_"4_^1*************************_^1*PROCESS A DECIMAL BYTE *_^1*************************_^1_%SPC_"4_^1PRT140 RTJ+_!GETCHR_€€!GET A DECIMAL BYTE OF DATA_^1_%JMP*_!PRT125_+USE COMMON CODE TO PROCESS DECIMAL DATA_^1_%SPC_"4_^1*************************_^1* PROCESS CHARACTERS_"*_^1* FROM FORMAT STATEMENT *_^1*************************_^1_%SPC_"4_^1PRT130 RTJ*_!SETCNT_"SET UP CHARACTER COUNT_^1PRT132 RTJ*_!GETFMT_$GET A CHARACTER FROM THE FORMAT BUFFER_^1_%RTJ*_!STBUFF_^1_%RAO*_!STCNT_^1_%SOV_"PRT133_,DONE THE€€N EXIT_^1_%JMP*_!PRT132_+KEEP PROCESSING CHARACTERS_^1PRT133 JMP*_!PRT003 EXIG_^1_%SPC_"4_^1*************************_^1* PROCESS ASCII CHARACTERS*_^1* FORM DATA BUFFER._#*_^1_%SPC_"4_^1PRT150 RTJ*_!SETCNT_^1PRT155 RTJ*_!GETCHR_^1_%TRA_"Q CHECK FOR PRINTABLE ASCII DATA_^1_%INQ_"-$20 RANGE MUST BE $20 TO $5F_^1_%SQM_"PRT156 UNPRINTABLE CHARACTER_^1_%INQ_"-$40_^1_%SQM_"PRT156+1 PRINT€€ABLE CHARACTER_^1PRT156 ENA_"$2E SUBSTITUTE A PERIOD FOR UNPRINTABLE CHARACTER_^1_%RTJ*_!STBUFF_+STORE ONE CHARACTER_^1_%RAO*_!STCNT_^1_%SOV_"PRT158_^1_%JMP*_!PRT155_^1PRT158 JMP*_!PRT003_^1LBYTE1 ADC_"LBYTE EXTERNAL SUBROUTINE_^1_%SPC_"4_^1*************************_^1* PRINT ONE LINE_'*_^1*************************_^1_%SPC_"4_^1PRT160 RTJ*_!EOL_^1_%JMP*_!PRT003_^1_%SPC_"4_^1*******€€******************_^1* EXIT ROUTINE *_'*_^1*************************_^1_%SPC_"4_^1PRT180 RTJ*_!EOL_^1PRT185 RAO_"PRINT_#INCREMENT RETURN ADDRESS_^1_%LDA*_!STOREI_^1_%STA-_!$FF_^1_%JMP_"(PRINT)_.FORMAT PROCESS COMPLETE RETURN_^1_%SPC_"4_^1*************************_^1* LEFT PAREN - SET REPEAT*_^1* COUNT AND SAVE PARMS *_^1*************************_^1_%SPC_"4_^1N_$EQU_"N(5)_*NUMBER O€€F LEVELS OF NESTED PARENS_^1PRT190 LDA*_!CHRCNT_^1_%SAZ_"1_^1_%JMP*_!PRT195_^1_%ENA_"-1_:INCREMENT LEFT PAREN; COUNTER_^1_%STA*_!CNTER_^1FMTSKP RTJ+_!GETFMT_$START SKIPPING FORMAT CHARACTERS_^1_%INA_"-$29_)LOOK FOR RIGHT PAREN._^1_%SAN_"LEFT_^1_%RAO*_!CNTER_6FOUND MATE FOR A LEFT PAREN_^1_%LDQ*_!CNTER_^1_%SQZ_"1_^1_%JMP*_!AGAIN IF NOT MATE FOR ORIGINAL LEFT PAREN._^1_%JMP*_!PRT158€€_'IF RIGHT PAREN. INDIRECT RETURN_^1LEFT_!INA_"$1_6CHECK FOR LEFT PAREN,_^1_%SAZ_"1_^1_%JMP*_!AGAIN_!NOT A LEFT PAREN._^1_%ENQ_"-1_:ONE MORE LEFT PAREN._^1_%ADQ*_!CNTER_^1_%STQ*_!CNTER_^1AGAIN JMP*_!FMTSKP_0GET NEXT FORMAT CHARACTER_^1PRT195 TCA_"A_^1_%RAO*_!LEVLNO_/ONE MORE LEVEL OF PARENS._^1_%LDQ*_!LEVLNO_^1_%STA*_!RPCNT,Q_'SAVE REPEAT COUNT_^1_%LDA*_!FMTADR_(SAVE REPEAT ADDRES€€S OF FORMAT_^1_%STA*_!RPADR,Q_^1_%JMP*_!PRT158_(INDIRECT RETURN_^1LEVLNO NUM_"-1_'HOLDS NO. OF PAIRS OF EMBEDDED PARENS_^1CNTER NUM_"$0_5COUNT OF UNPAIRED LEFT PARENS,_^1RPCNT BSS_"RPCNT(N)_%HOLDS REPETITION COUNTS_^1_%SPC_"4_^1_%SPC_"4_^1*******************************_^1* RIGHT PAREN - RESET FOR_#*_^1* REPEAT OF LAST NESTED SET_!*_^1*******************************_^1_%SPC_"4_^1€€PRT200 LDQ*_!LEVLNO_^1_%RAO*_!RPCNT,Q_(INCREMENT REPEAT COUNT FOR THIS LEVEL OF N_^1_%LDA*_!RPCNT,Q_^1_%SAP_"PRT205_*REPEAT PROCESS COMPLETE_^1_%LDA*_!RPADR,Q_(OTHERWISE GET OLD FORMAT ADDR. AND RESET F_^1_%STA*_!FMTADR_^1_%JMP*_!PRT158_+INDIRECT RETURN_^1PRT205 INQ_"-1_(PASS BACK THRU ONE LEVEL_^1_%STQ*_!LEVLNO_^1_%JMP*_!PRT158_)INDIRECT RETURN_^1_%BSS_"RPADR(5)_(HOLDS FORMAT ADDR€€. TO RESET_^1_%SPC_"4_^1*******************************_^1* STBUFF - SUBROUTINE TO STORE*_^1*_)ONE CHARACTER IN THE*_^1*_)OUTPUT BUFFER._#*_^1********************************_^1_%SPC_"4_^1STBUFF NOP_"0_+STORE BUFFER CHARACTER_^1_%RTJ*_!STBUFX_"STORE THE CHARACTER_^1_%CLR_"A_^1_%STA*_!EOLFLG_^1_%LDA-_!LRECL,I_^1_%SUB-_!RECSIZ,I_^1_%SAM_"NOFLOW_^1_%RTJ*_!PRINTR_^1_%RAO*_!EOLFLG_^1NOF€€LOW EQU_"NOFLOW(*)_^1_%JMP*_!(STBUFF)_^1ABUFF NUM_"$0_^1SBYTE1 ADC_"SBYTE_^1_%SPC_"4_^1*******************************************_^1* EOL - IF JUST PRINTED BUFFER BECAUSE OF*_^1*_'FULL BUFFER DONT PRINT IT AGAIN *_^1********************************************_^1_%SPC_"2_^1EOL_"NOP_"$0_^1_%LDA*_!EOLFLG_^1_%SAN_"1_^1_%RTJ*_!PRINTR_^1_%CLR_"A_^1_%STA*_!EOLFLG_^1_%JMP*_!(EOL)_^1EO€€LFLG NUM_"$0_^1_%SPC_"4_^1**********************************_^1* HEX TO DECIMAL TO ASCII ROUTINE*_^1**********************************_^1_%SPC_"4_^1HDECAC NOP_"0_+CONVERT (A) TO PRINTABLE DECIMAL NUMBER_^1_%STA*_!TEMP0_^1_%LDA*_!ABUFF_^1_%ADD*_!(PCARCT)_^1_%STA*_!TEMP1_^1_%INA_"-1 REDUCE BUFFER POINTER TO LAST CHARACTER POSITION_^1_%STA*_!ABUFF RESET BUFFER POINTER TO HANDLE EACH D€€IGIT_^1_%LDA-_!LRECL,I_^1_%ADD*_!(PCARCT)_^1_%STA*_!TEMP2_^1_%RTJ+_!SETCNT_^1DEC10 CLR_"Q_^1_%LDA*_!TEMP0_^1_%DVI_"=N10 CONVERT TO DECIMAL_^1_%STA*_!TEMP0 PROCESS REMAINDER_^1_%INQ_"$30_^1_%TRQ_"A_^1_%RTJ*_!STBUFF_+STORE LEAST SIGNIFICANT REMAINING DIGIT_^1_%RAO+_!STCNT_^1_%SOV_"DEXT_^1_%LDA*_!ABUFF_^1_%INA_"-2_^1_%STA*_!ABUFF_^1_%JMP*_!DEC10_^1DEXT_!LDA*_!TEMP1_^1_%STA*_!ABUFF_^1€€_%LDA*_!TEMP2_^1_%STA-_!LRECL,I_^1_%JMP*_!(HDECAC)_)RETURN_^1TEMP0 NUM_"$0_^1TEMP1 NUM_"$0_^1TEMP2 NUM_"$0_^1_%SPC_"4_^1*************************_^1* GET A DATA CHARACTER *_^1*************************_^1_%SPC_"4_^1GETCHR NOP_"0_^1_%LDQ*_!DTLSTC_+ADDRESS OF DATA CHARACTER_^1_%RTJ*_!(LBYTE1)_^1_%STQ*_!DTLSTC_+UPDATE CHARACTER DATA POINTER_^1_%JMP*_!(GETCHR)_)RETURN_^1_%SPC_"4_^1*€€************************_^1* RETREIVE NEXT FULL WORD*_^1**************************_^1_%SPC_"4_^1GETWRD NOP_"0_+ENTRY GET WORD_^1_%CLR_"Q_^1_%LDA*_!DTLSTC_^1_%LLS_"15_^1_%SAM_"GETWD5 CHCK WHCIH HALF OF WORD_^1_%INQ_"-1_^1GETWD5 LDA-_!1,Q_'GET DATA WORD_^1_%INQ_"2_^1_%QLS_"1_^1_%STQ*_!DTLSTC_*Q POINTS TO NEXT WORD_^1_%JMP*_!(GETWRD)_)RETURN_^1DTLSTC NUM_"$0_*POINTER TO DATA CHARACTER€€_^1_%SPC_"4_^1**************************************_^1* SBUFX SOTRE CHARACTER_,*_^1**************************************_^1_%SPC_"2_^1STBUFX NOP_"0_^1_%LDQ*_!ABUFF_!GET NEXT STORE ADDRESS_^1_%RTJ*_!(SBYTE1)_!SO STORE IT_^1_%STQ*_!ABUFF_"UPDATE NEXT ADDRESS_^1_%RAO-_!LRECL,I_!UPDATE RECORC LENGTH_^1_%JMP*_!(STBUFX)_!RETURN_^1_%SPC_"4_^1**********************************_^1* SET O€€R CLEAR INDIRECT FLAG_#*_^1**********************************_^1_%SPC_"4_^1PRT220 LDA*_!IFLG_"IF IFLG = $AAAA NOT INDIRECT_^1_%ALS_"1_1RESET TO NEXT VALUE_^1_%STA*_!IFLG_^1_%SAM_"PRT225_,IF RESULT = $AAAA CLEAR INDIRECT AND SK_^1_%RTJ*_!GETWRD GET INDIRECT POINTER IN A_^1_%STQ*_!DTSVE_'HOLD NEXT DIRECT REFERENCE_^1_%ALS_"1 CONVERT TO CHARACTER ADDRESS[_^1_%STA*_!DTLSTC AND RESET DT€€LSTC FOR INDEIRECT_^1_%LDA_"=XDTSVE_^1_%STA*_!DATPTR_)SET INDIRECT POINTER_^1_%JMP*_!(RET003)_#INDIRECT RETURN_^1_%SPC_"2_^1PRT225 LDA*_!DTSVE RESET DIRECT POINTER_^1_%STA*_!DTLSTC_^1_%LDA_"=XDTLSTC_,SET INDIRECT POINTER_^1_%STA*_!DATPTR_^1_%JMP*_!(RET003)_#INDIRECT RETURN_^1DTSVE NUM_"$0 HOLD AREA FOR DIRECT POINTER_^1IFLG_!NUM_"$AAAA_^1DATPTR ADC_"DTLSTC_(INDIRECT PTR. TO ORIGIN€€AL DATA LIST_^1_%SPC_"4_^1********************************_^1* ISSUE PAGE EJECT_,*_^1********************************_^1_%SPC_"4_^1PRT330 RTJ*_!PAGEJT_!GIVE PAGE EJECT_^1_%RTJ*_!PRINTR_^1_%JMP*_!(RET003)_%RETURN_^1_%SPC_"2_^1PAGEJT NOP_"0_^1_%LDA-_!LBUFFP,I_!GET LINE COUNT_^1_%RTJ_"SETCT2_"CONVERT TO OVERFLOW COUNTER_^1_%NOP_"0_!GARBAGE WORD_^1_%STA-_!ACONV,I_!RESET COUNTER_^1_%ENA€€_"$0C_)SCIP CHANNEL 1_^1_%RTJ*_!STBUFX_!USE SECONDARY STORE ROUTINE TO BYPASS COUNT CHECK_^1_%JMP*_!(PAGEJT)_^1PCARCT ADC_"CHRCNT_^1_%SPC_"4_^1************************************************************_^1* PRINTR - PRINT THE CONTENTS OF THE BUFFER SPECIFIED_$*_^1************************************************************_^1_%SPC_"4_^1PRINTR NOP_"0_*PRINT SUBROUTINE_^1_%RAO-_!AC€€ONV,I_)CHECK FOR LINE OFLOW_^1_%SNO_"PRT309_.IF NO OFLOW SKIP_^1_%RTJ*_!PAGEJT_+SET UP FOR PAGE EJECT_^1PRT309 EQU_"PRT309(*)_^1_%LDA-_!LRECL,I_%CHECK FOR ZERO LENGTH BUFFER_^1_%SAN_"PRT305 NOT ZERO_^1_%ENA_"$20 PLACE ONE SPACE IN BUFFER_^1_%RTJ*_!STBUFX_!USE SEC. STORE ROUTINE TO IGNORE COUNT CHECK_^1PRT305 LDQ*_!ABUFF CHECK FOR ODD CHARACTER LENGTH_^1_%LRS_"1_^1_%SAP_"PRT310 NOT €€ODD LENGTH_^1_%JMP*_!PRT305-2 GO TO STORE ROUTINE_^1PRT310 EQU_"PRT310(*)_^1_%LDQ-_!$FF_^1_%RTJ_"PUTLOC_^1_%RTJ*_!PRESET_^1_%JMP*_!(PRINTR)_)RETURN_^1_%SPC_"4_^1******************************************_^1* PRESET - PRESET OR RESET BUFFER_%*_^1*_*POINTER AND LENGTH_**_^1******************************************_^1_%SPC_"2_^1PRESET NOP_"$0_^1_%LDA-_!ABLK,I_^1_%ALS_"1_^1_%STA*_!AB€€UFF_^1_%CLR_"A_^1_%STA-_!LRECL,I_^1_%JMP*_!(PRESET)_^1_%SPC_"4_^1_%SPC_"4_^1************************************_^1* USE GETWRD ON ORIGINAL DATA LIST *_^1************************************_^1_%SPC_"4_^1PRT235 NOP_]_^1_%LDA*_!DTLSTC_-SAVE POINTER TO CURRENT DATA_^1_%STA*_!TSAVER_^1_%LDA*_!(DATPTR)_+GET POINTER TO ORIG. DATA LIST_^1_%STA*_!DTLSTC_-STORE FOR USE BY GETWRD_^1_%RTJ*_!€€GETWRD_,GET WORD FROM ORIG. DATA LIST_^1_%JMP*_!(PRT235)_+RETURN TO CALLING ROUTINE_^1TSAVER NUM_"$0_^1_%SPC_"4_^1******************************_^1*VARIABLE FORMAT PARAMETER_!*_^1******************************_^1_%SPC_"4_^1PRT230 RTJ*_!PRT235_'GET NEXT WORD FROM ORIG. DATA LIST_^1_%STA*_!(PCARCT)_+STORE IT IN CHRCNT_^1RETXXX LDA*_!TSAVER_-RESTORE POINTER TO CURRENT DATA_^1_%STA*_!D€€TLSTC_^1_%STQ*_!(DATPTR)_+POINT TO NEXT WORD IN ORIG. DATA LIST_^1_%JMP*_!(RET003)_"CONTINUE PROCESSING FORMAT CHARS._^1RET005 ADC_"PRT005_^1_%SPC_"4_^1****************************************************_^1*MOVE PRIMARY DATA LIST POINTER_3*_^1****************************************************_^1_%SPC_"4_^1PRT240 LDA*_!(PCARCT)_+WILL MOVE IT BACK_^1_%TCA_"A_^1_%STA*_!(PCARCT)_^1P€€RT245 RTJ*_!PRT235_-USE GETWRD TO FORCE WORD ALIGNMENT_^1_%ENA_"-1_^1_%ADD*_!(PCARCT)_^1_%ALS_"1_^1_%AAQ_"Q_.GET NEW POINTER_^1_%LDA*_!OLDCNT_(RESTORE CHARACTER COUNT_^1_%STA*_!(PCARCT)_^1_%JMP*_!RETXXX_(RETURN_^1OLDCNT NUM_"$0_^1RET003 ADC_"PRT003_^1_%SPC_"4_^1_%SPC_"4_^1********************_^1*INDEX INCREMENT_!*_^1********************_^1_%SPC_"4_^1PRT250 RTJ*_!PRT235_'GET NEXT WO€ςRD OF ORIG. DATA LIST_^1_%ADD*_!(PCARCT)_+ADD INCREMENT_^1_%QRS_"1_3STORE BACK INCREMENTED ADDRESS_^1_%SQP_"1_Q**65K**_^1_%ADQ-_!$11_O**65K**_^1_%INQ_"-2_^1_%STA-_!1,Q_^1_%LDA*_!TSAVER_^1_%STA*_!DTLSTC_^1_%JMP*_!(RET003)_1RETURN_^1_%END_]_^__ςPVERIFY CSY/ P€1_%NAM VERIFY_'SUP 1.0+CYB_^1*******************************************************_^1** THE VERIFY MODULE PERFORMS THE BASIC UTILITY_#**_^1** FUNCTION OF VERIFYING MAGNETIC TAPE FILES_'**_^1*******************************************************_^1_%ENT_"VERIFY_^1_%EXT_"RCOUNT,FCOUNT,SCCB,FPARM,SETCNT,RMESS_^1_%EXT_"LBYTE,INPUT,OUTPUT,PRNDMB,MESAGE_^1_%EXT_"STNDMP,COUNT1,COUNT€€2,STATIS_^1_%EXT_"DUMP,HDFLAG_^1_%EXT_"WTOR_^1_%EXT_"FMTMSG_^1_%EXT_"SCCBM1_^1_%EXT_"TTYDM1_^1_%EXT_"LBYTE2_^1_%EXT_"DUIND_^1_%SPC_"2_^1VERIFY NOP_"0 ENTRY POINT_^1_%LDA*_!(VERI)_'IS INIUT DMB OPEN_^1_%AND*_!(VERO)_!CHECK ALL DMBS FOR OPEN_^1_%SAM_"VERF2 YES CONTINUE ALL DMBS OK_^1VERE1 JMP*_!(IMESG)_^1VERF2 EQU_"VERF2(*)_^1_%LDA*_!PNM1_^1_%STA*_!(XXDM1)_*SET UP FOR PRINTER_^1_%€€STA*_!(XXDM2)_^1_%STA*_!(XXDM3)_^1_%LDA*_!(VERP)_(CHECK IF PRINTER OPEN_^1_%SAM_"PROPN_^1_%LDA*_!TYDM1_+USE TTY_^1_%STA*_!(XXDM1)_^1_%STA*_!(XXDM2)_^1_%STA*_!(XXDM3)_^1PROPN EQU_"PROPN(*)_^1_%RTJ_"STNDMP_^1_%ENA_"8 CHECK IF SELECTION REQUIRED_^1_%AND*_!(VERI) USE INPUT FLAG_^1_%SAZ_"VERNSL IF NO SKIP THE FOLLOWING_^1_%ENA_"-8_!CLEAR AND SET VERIFY SELECTION FLAG_^1_%AND*_!(VERO)€€_^1_%INA_"8_^1_%STA*_!(VERO)_!FLAG NOW SET_^1VERNSL EQU_"VERNSL(*)_^1_%CLR_"A_^1_%STA*_!RECER_(CLEAR RECORDS IN ERROR_^1_%STA*_!TOCHER_!CLEAR TOTAL CHARACTERS IN ERROR_^1_%ENQ_"2_^1_%LDA_"=XINPEOF_^1_%STA*_!(VERI),Q_!STORE INPT END OF FILE ADDRESS_^1_%LDA_"=XOUTEOF_^1_%STA*_!(VERO),Q_!STORE OUTPUT END OF FILE ADDRESS_^1_%JMP*_!VERF3A_^1VERF3 EQU_"VERF3(*)_^1_%RTJ_"COUNT1_^1_%SAN_"€€1_^1_%JMP*_!VERF14_^1VERF3A EQU_"VERF3A(*)_^1_%CLR_"A_^1_%STA*_!VPOS_)TOTAL CHARS IN RECORD_^1_%STA*_!CHARER_'SET CHAR MATCH ERROR = 0_^1_%STA*_!FRSTAD_'SET FIRST CHAR ERROR ADDRS = 0_^1_%LDQ*_!VERI_)Q = INPUT DMB-1_^1_%INQ_"-1_^1VERF4 RTJ+_!GETLOC_!READ A RECORD FROM THE INPUT TAPE_^1OUTEOF LDQ*_!VERO_^1_%INQ_"-1_^1_%RTJ*_!(VERF4+1)_#READ A RECORD FROM THE OUTPUT TAPE_^1_%RTJ*_!L€€ENGTH_'CHECK FOR MISMATCH IN RECORD LENGTH_^1_%LDA*_!VLRECL_'A = LRECL FOR CHK ON RECD COMPLETE_^1_%RTJ_"SETCNT_^1VPOS_!NUM_"0_)OVERFLOW CNTR._^1VERF5 ENQ_"11_^1_%LDA*_!(VERI),Q_$STORE ADDRS OF CURRENT LOGICAL INPUT_^1_%ALS_"1_-RECORD IN CHAR MODE IN THE LBYTE2_^1_%STA*_!LBYT2A_%CALLING SEQUENCE._^1_%STA*_!FRSTAD_^1_%LDA*_!(VERO),Q_$DO SAME FOR OUTPUT TAPE_^1_%ALS_"1_^1_%STA*_!LB€€YT2B_^1VERF6 RTJ*_!(LB2) GET A CHAR FROM INPUT BUFFER_^1LBYT2A NUM_"0_'CHAR ADDRS._^1_%STA*_!DIGIT_(SAVE RETURNED CHAR._^1_%RTJ*_!(LB2)_$GET A CHA R FROM VERIFY BUFFER_^1LBYT2B NUM_"0_%CHAR ADDRS._^1_%EOR*_!DIGIT_(DO CHARS MATCH_^1_%SAZ_"VERF8_)YES-SKIP_^1_%LDA*_!CHARER_'NO MATCH-IS THIS FIRST ERROR_^1_%SAN_"VERF7_)IN RECORD-NO-SKIP_^1_%LDA*_!LBYT2A_^1_%SUB*_!FRSTAD_^1_%INA_"-1_^€€1_%STA*_!FRSTAD_^1_%RAO*_!RECER_(INCREMENT RECORD IN ERROR CNTR._^1VERF7 RAO*_!CHARER_!INCREMENT CHARS IN ERROR_^1VERF8 RAO*_!VPOS_#DONE WITH RECORD_^1_%SOV_"VDON_*DONE-SKIP_^1_%JMP*_!VERF6_(GO GET ANOTHER CHAR_^1VDON_!LDA*_!CHARER_"ERR IN THIS RECORD_^1_%SAN_"VERF8A_^1_%JMP*_!VERF3_^1VERF8A EQU_"VERF8A(*)_^1_%ENT_"VPOS_^1_%LDA*_!IHDFLG IS DUMP MODULE PROVIDED_^1_%INA_"1_^1_%SNO_€€"PR1_'IT IS_^1_%CLR_"Q_^1_%RTJ*_!HEADNG_^1_%LDQ*_!VERI_%IT IS NOT_^1_%INQ_"-1_^1_%RTJ*_!VNF_#PRINT INPUT RECORD_^1_%ENQ_"1_^1_%RTJ*_!HEADNG_^1_%LDQ*_!VERO_$PRINT OUTPUT RECORD_^1_%INQ_"-1_^1_%RTJ*_!VNF_^1_%JMP*_!VERF8B_#CONTINUE_^1PR1_"EQU_"PR1(*)_^1_%CLR_"Q_^1_%RTJ*_!HEADNG_3PRINT HEADINGZ_^1_%LDQ*_!VERI_^1_%INQ_"-1_^1_%STQ*_!(IHDFLG)_^1_%RTJ*_!(IDUMP)_^1_%ENQ_"1_^1_%STQ*_!(IHDFLG€€)_^1_%RTJ*_!HEADNG_^1_%LDQ*_!VERO_^1_%INQ_"-1_^1_%RTJ*_!(IDUMP)_^1VERF8B EQU_"VERF8B(*)_^1_%LDA*_!TOCHER_4TOTAL NO. CHARS IN ERROR_^1_%ADD*_!CHARER_^1_%STA*_!TOCHER_^1VERF9 LDA*_!RECER_"10 RECORDS IN ERROR_^1_%INA_"-10_^1_%SAN_"VERF12_(NO-CONTINUE_^1PR2_"RTJ_"WTOR_^1_%ADC_"MSGX_^1_%SAP_"VERF12 CONTINUE PROCESSING_^1_%JMP*_!VERF14_!EXIT_^1VERF12 EQU_"VERF12(*)_^1_%JMP*_!VERF3_^1VE€€RF14 EQU_"VERF14(*)_^1_%RTJ*_!EOF_^1_%RTJ_"STATIS_^1RETURN JMP*_!(VERIFY) EXIT_^1_%SPC_"2_^1VERI_!ADC_"INPUT_^1VERO_!ADC_"OUTPUT_^1VERP_!ADC_"PRNDMB_^1IMESG ADC_"MESAGE_^1TYDM1 ADC_"TTYDM1_^1PNM1_!ADC_"PRNM1_^1XXDM1 ADC_"XDM1_^1XXDM2 ADC_"XDM2_^1LB2_"ADC_"LBYTE2_^1XXDM3 ADC_"XDM3_^1IDUMP ADC_"DUMP_^1IPRINT ADC_"PRINT_^1IHDFLG ADC_"HDFLAG_^1_%SPC_"2_^1INPEOF EQU_"INPEOF(*)_^1_€€%RTJ_"COUNT2_^1_%SAN_"1_^1_%JMP*_!VERF14_^1_%JMP*_!VERF3_^1VLRECL NUM_"0_^1***********THE FOLLOWING IS USED AS A DATA LIST BE WARE***********_^1TOCHER NUM_"$0_^1RECER NUM_"$0_^1FRSTAD NUM_"0_^1CHARER NUM_"$0_^1_%EXT_"GETLOC,PRINT,PRNM1_^1DIGIT NUM_"0_(CHAR HOLD_^1***************************************************_^1LENGTH NOP_"0_'ENTRY_^1_%ENQ_"12_,GET LENGTH OF RECORD_^1_%LDA*_€€!(VERI),Q_$FROM INPUT DMB (LRECL) AND SAVE_^1_%STA*_!VLRECL_^1_%LDA*_!(VERO),Q_$COMPARE WITH LENGTH OF_^1_%SUB*_!VLRECL_'RECORD IN OUTPUT DMB (LRECL)_^1_%SAZ_"LENG1_^1_%RTJ*_!(IPRINT)_^1_%ADC_"FORLEN_^1SAVXX NUM_"$0_^1XDM1_!ADC_"$0_^1LENG1 EQU_"LENG1(*)_^1_%JMP*_!(LENGTH)_^1************************************************************_^1VNF_"NOP_"$0_^1_%LDA-_!ARECL,Q_%GET RECORD A€€DDR._^1_%STA*_!DATA1_^1_%LDA-_!LRECL,Q_)GET RECORD LENGTH_^1_%STA*_!DATA2_^1_%RTJ*_!(IPRINT)_^1_%ADC_"FORXXX_^1_%ADC_"DATA1_^1XDM3_!ADC_"$0_^1_%JMP*_!(VNF)_^1DATA1 ADC_"$0_^1DATA2 NUM_"$0_^1FORXXX ALF_"2,%.A;_^1ARECL EQU_"ARECL(12)_^1LRECL EQU_"LRECL(13)_^1_%SPC_"4_^1********************************_^1* PRINT TOTAL NUMBER CHARS. AND*_^1* RECORDS IN ERROR_,*_^1******************€€**************_^1_%SPC_"4_^1EOF_"NOP_]_^1_%RTJ*_!(IPRINT)_^1_%ADC_"FOREOF_^1_%ADC_"TOCHER_^1XDM2_!ADC_"$0_^1_%JMP*_!(EOF)_^1FOREOF ALF_"25,//18CTOTAL CHAR ERRORS 5D5X5D17C RECORDS IN ERROR;_^1_%SPC_"4_^1**************************************_^1* PRINT HEADINGS FOR RECORD DUMP_#*_^1**************************************_^1HEADNG NOP_"$0_^1_%LDA*_!FORLIS,Q_^1_%STA*_!FORSMT_^1_%RTJ*_!€N(IPRINT)_^1FORSMT ADC_"$0_^1_%ADC_"FRSTAD_^1_%ADC_"PRNM1_^1_%JMP*_!(HEADNG)_^1FORLIS ADC_"FORHDG_^1_%ADC_"FOR2_^1FORHDG ALF_"23,/60(1C*)//25C*VER ERR: FIRST ERR CHAR 5D,5X5D1_^1_%ALF_"13,0C CHAR ERRS/9CINPUT REC;_^1FOR2_!ALF_"8,/10CVERIFY REC;_^1MSGX_!ALF_"13,9C10 ERRORS/10C*CONTINUE:;_^1FORLEN ALF_"8,12CLENGTH ERROR;_^1_%END_]_^__NPSELECT CSY/ P€1_%NAM SELECT_'SUP 1.0+CYB_^1_%SPC_"4_^1*************************************_^1*_C*_^1* SELECT - MAIN SELECTION ROUTINE *_^1*_!CALL - (I) = DMB-1_+*_^1*_+RTJ SELECT_,*_^1*_!ON RETURN - (A)= ZERO(FALSE)_"*_^1*_+OR (A)= $FFFF(TRUE)_"*_^1*_C*_^1*************************************_^1_%SPC_"4_^1_%EXT_"LBYTE,SETCNT_^1_%ENT_"SELECT_^1_%ENT_"SSEL,TSEL_^1_%ENT_"PNAM,TNAM,SNAM,ONAM_^€€1_%EXT_"MOVE,SBYTE,OPN27_^1_%ENT_"ETAB,EFTB,ELTB_^1_%EXT_"LBYTE2_^1_%SPC_"4_^1************************************_^1* EQUATES USED TO REFERENCE_"DMB *_^1************************************_^1_%SPC_"4_^1IOBFLG EQU_"IOBFLG(1)_^1IOBFL2 EQU_"IOBFL2(IOBFLG+1)_^1EOFADR EQU_"EOFADR(IOBFL2+1)_^1ERREXT EQU_"ERREXT(EOFADR+1)_^1LOG1_!EQU_"LOG1(ERREXT+1)_^1ABUFFP EQU_"ABUFFP(LOG1+1)_^1LBUFFP€€ EQU_"LBUFFP(ABUFFP+1)_^1MAXBLK EQU_"MAXBLK(LBUFFP+1)_^1RECSIZ EQU_"RECSIZ(MAXBLK+1)_^1ABLK_!EQU_"ABLK(RECSIZ+1)_^1LBLK_!EQU_"LBLK(ABLK+1)_^1ARECL EQU_"ARECL(LBLK+1)_^1LRECL EQU_"LRECL(ARECL+1)_^1BLKCNT EQU_"BLKCNT(LRECL+1)_^1RECCNT EQU_"RECCNT(BLKCNT+1)_^1ALABEL EQU_"ALABEL(RECCNT+1)_^1FORD_!EQU_"FORD(ALABEL+1)_^1RECORD EQU_"RECORD(FORD+1)_^1ACONV EQU_"ACONV(RECORD+1)_^1ASLCT1 €€EQU_"ASLCT1(ACONV+1)_^1ASLCT2 EQU_"ASLCT2(ASLCT1+1)_^1ASLCT3 EQU_"ASLCT3(ASLCT2+1)_^1_%SPC_"4_^1SELECT NOP_]_^1_%SET_"A_(SET RETURN CODE = TRUE_^1_%LDQ-_!ASLCT1,I ADDRESS OF FIRST SELECTION INDICATOR_^1_%SQM_"NEXT1_#OPTION HAS NOT BEEN SELECTED_^1_%SQZ_"NEXT1_#DITTO_^1_%RTJ*_!TLPR_#CALL TEST LIST PROCESSOR_^1_%SAP_"OVER1_#RETURN CODE = FLASE_^1_%LDQ-_!ASLCT1,I MARK IT NEGATIVE_^1_%€€TCQ_"Q_^1_%STQ-_!ASLCT1,I_^1OVER1 JMP*_!(SELECT)_'RETURN_^1NEXT1 LDQ-_!ASLCT2,I_'ADDRESS OF SECOND SELECTION INDICATOR_^1_%SQM_"NEXT2X_"OPTION HAS NOT BEEN SELECTED_^1_%SQZ_"NEXT2X_"DITTO_^1_%RTJ*_!TLPR_#CALL TEST LIST PROCESSOR_^1_%SAM_"THREE_#TERMINATE SELECTION_^1_%SET_"A_(SET RETURN CODE = TRUE_^1NEXT2X JMP*_!NEXT2_^1THREE LDQ-_!ASLCT1,I_!ADDR. OF FIRST SELECT INDICATOR_^1_%€€TCQ_"Q_(COMPLEMENT IT_^1_%STQ-_!ASLCT1,I_^1_%CLR_"A_%SET RETURN CODE = FALSE_^1_%LDQ-_!EOFADR,I_#GO TO USER EOF ADDR._^1_%INQ_"-1_^1_%JMP-_!1,Q_^1NEXT2 LDQ-_!ASLCT3,I_'ADDR. OF THIRD SELECTION INDICATOR_^1_%SQM_"RETN_$OPTION NOT SELECTED_^1_%SQZ_"RETN_$DITTO_^1_%RTJ*_!TLPR_#CALL TEST LIST PROCESSOR_^1RETN_!JMP*_!(SELECT)_(RETURN_^1_%SPC_"4_^1ITAB_!ADC_"ITTAB_^1ETAB_!ADC_"$0_^1_%SP€€C_"4_^1***************************************_^1* TLPR - TEST LIST PROCESSOR_(*_^1*_"CALL - (Q) ADDR. OF TEST LIST_!*_^1*_+RTJ TLPR_0*_^1*_$ON RETURN = (A) = TRUTH VALUE *_^1***************************************_^1_%SPC_"4_^1TINDX NUM_"$0_^1TLPR_!NOP_"$0_^1_%SET_"A_(SET TRUTH VALUE = TRUE_^1_%STA*_!TVAL_^1_%ENA_"1_^1_%STA*_!LOGOP_"SET LOGICAL OPERATOR = AND_^1_%QLS_"1_^1NXTI€€ND RTJ_"LBYTE GET TEST TABLE INDEX FROM TEST BLOCK_^1_%STQ*_!TINDX_"SAVE INDEX TO TEST BLOCK_^1_%TRA_"Q_(DETERMINE TO USE EITHER_^1_%RTJ*_!FIND_"DETERMINE IF INT OR EXT TABLE_^1_%SAM_"INTERN_"INTERNAL_^1_%LDQ*_!(ETAB),Q_$GET PTR. TO TEST TABLE_^1_%JMP*_!GOTIT_^1INTERN LDQ*_!(ITAB),Q_#GET PTR, TO INTERNAL TES TABLE_^1GOTIT EQU_"GOTIT(*)_^1_%LDA*_!TVAL_^1_%SQM_"TLPDON_"INDEX NO GOO€€D_^1_%SQZ_"TLPDON_"DITTO_^1_%RTJ*_!TEVAL_"CALL TEST EVALUATOR_^1_%RTJ*_!(XLEXP)_#CALL LOGICAL EXPRESSION EVALUATOR_^1LOGOP NUM_"$0_^1TVAL_!NUM_"$0_^1_%LDQ*_!TINDX_^1_%RTJ*_!(NXTIND+1)_"CALL LBYTE - GET NEXT LOG. OP._^1_%STQ*_!TINDX_"SAVE INDEX TO TEST BLOCK_^1_%STA*_!LOGOP_"SAVE LOGICAL OPERATOR_^1_%LDQ*_!TVAL_^1_%INA_"-3_'SEE IF LOG OP IS NOT OR END_^1_%SAM_"NOTDON_^1_%SAN_"NOTEN€€D_^1_%TCQ_"Q_^1NOTEND TRQ_"A_^1TLPDON JMP*_!(TLPR)_^1NOTDON LDQ*_!TINDX_^1_%JMP*_!NXTIND_^1XLEXP ADC_"LEXP_^1_%SPC_"4_^1*******************************************_^1*_H*_^1* TEVAL - EVALUATES EACH TEST_+*_^1*_#CALL - (Q) = POINTER TO TEST TABLE *_^1*_+RTJ TEVAL_3*_^1*_%ON RETURN - (A) = TRUTH VALUE_#*_^1*_H*_^1*******************************************_^1_%SPC_"4_^1TEMPO NUM_€€"$0_^1SAVEQ NUM_"$0_^1TEVAL NOP_]_^1_%STQ*_!SAVEQ_"SAVE INDEX TO TEST TABLE_^1_%SET_"A_(SET TRUTH VALUE = TRUE_^1_%STA*_!TVALA_^1_%ENA_"1_(SET LOGICAL OPERATOR = AND_^1_%STA*_!LOP_^1AGAIN LDQ*_!SAVEQ GET LENGTH AND LOCATION OF THE_^1_%RTJ*_!FNDOP_"FIELDS OR LITERALS_^1_%RTJ*_!CLC_$CALL FIELD COMPARISON ROUTINE_^1LENA_!NUM_"$0_^1LOCA_!NUM_"$0_^1_%RTJ*_!SETPTR_!INCREMENT INDEX TO€€ TEST TABLE AND GET REL OP_^1_%QRS_"8_(GET REL. EXP_^1_%JMP*_!TABLE,Q TO GET TRUTH VALUE_^1TRUSET RTJ_"LEXP_$GET NEW TRUTH VALUE_^1LOP_"NUM_"$0_^1TVALA NUM_"$0_^1_%LDA*_!TEMPO_!GET NEW LOG. OP._^1_%AND_"=N$7_^1_%STA*_!LOP_^1_%INA_"-4_'IS LOP = END_^1_%SAZ_"FINISH_"YES, DONE_^1_%JMP*_!AGAIN_"EVALUATE NEXT TEST_^1FINISH LDA*_!TVALA GET FINAL TRUTH VALUE_^1_%JMP*_!(TEVAL) RETURN_^1€€TABLE EQU_"TABLE(*)_(TABLE OF RELATIONS_^1_%SAP_"FALSE_#LT_^1_%SAM_"TRUE_$LE_^1_%SAN_"FALSE_#EQ_^1_%SAP_"TRUE_$GE_^1_%SAM_"FALSE_#GT_^1_%SAZ_"FALSE_#NE_^1TRUE_!EQU_"TRUE(*)_^1_%SET_"A_^1_%JMP*_!TRUSET_^1FALSE EQU_"FALSE(*)_^1_%CLR_"A_^1_%JMP*_!TRUSET_^1_%SPC_"3_^1********************************************_^1*_!INCREEMENT POINTERS TO TEST TABLE AND *_^1*_!LOAD Q WITH RELATIONAL€€ OEPERATOR AND_!*_^1*_!LOGICAL OPERATOR. SEE BELOW FOR_%*_^1*_!REASON THIS IS A SUBROUTINE_+*_^1********************************************_^1_%SPC_"3_^1SETPTR NOP_"0_^1_%RAO*_!SAVEQ_!INCREMENT PINTER_^1_%LDQ*_!(SAVEQ) GET RELATIONAL OP AND LOP_^1_%RAO*_!SAVEQ_"INCREMENT AROUND OPERATORS_^1_%STQ*_!TEMPO_!SAVE IT_^1_%JMP*_!(SETPTR)_^1_%SPC_"3_^1_%SPC_"4_^1************************€€*******************_^1*_H*_^1* FNDOP - FINDS LOCATION AND LENGTH OF A *_^1*_(FIELD OR LITERAL._.*_^1*_!CALL - (Q) = POINTER TO FIELD OR_$*_^1*_/LITERAL INDEX._**_^1*_)RTJ FNDOP_5*_^1*_H*_^1*_"ON RETUTN - (Q) = CHARACTER ADDRESS *_^1*_5OF DATA_+*_^1*_/(A) = LENGTH OF DATA OR *_^1*_5NEGATIVE_**_^1*_H*_^1*******************************************_^1_%SPC_"4_^1NIFTB EQU_"NIFTB(25)€€_^1NEFTB EQU_"NEFTB(50)_^1NILTB EQU_"NILTB(75)_^1NELTB EQU_"NELTB(100)_^1MNIFTB EQU_"MNIFTB(-25)_^1MNILTB EQU_"MNILTB(-75)_^1EFTB_!ADC_"$0_^1ELTB_!ADC_"$0_^1IFTB_!ADC_"ITFTB_^1ILTB_!ADC_"ITLTB_^1LEN_"NUM_"$0_^1LOC_"NUM_"$0_^1LINDEX NUM_"$0_^1FNDOP NOP_"$0_^1_%INQ_"-1_^1_%LDA-_!1,Q_2GET BOTH INDEXES_^1_%CLR_"Q_^1_%LLS_"8_^1FINTOP EQU_"FINTOP(*)_^1_%STA*_!LINDEX_/SAVE SECOND INDE€€X_^1_%RTJ*_!FIND_1GET TABLE AND RELATIVE INDEX_^1_%SQP_"1_^1_%JMP*_!LIT_^1_%QLS_"1_5TWO ENTRIES PER INDEX VALUE_^1_%SAM_"INTFLD_^1_%ADQ*_!EFTB_^1_%JMP*_!OVERIT_^1INTFLD ADQ*_!IFTB_^1OVERIT EQU_"OVERIT(*)_^1_%INQ_"-1_^1_%LDA-_!1,Q_'GET LENGTH_^1_%LDQ-_!2,Q_*GET PSITION_^1_%STA*_!LEN_^1_%AAQ_"A_5SUM POS AND LEN_^1_%SUB-_!LRECL,I_.SUB RECORD LENGTH_^1_%INA_"-1_^1_%SAM_"GOOD_^1_%RTJ*_!€€SETPTR_"ABNORMAL EXIT SO INCREMNT TEST AND_^1*_4TAKE FUNNY EXIT BEWARE!!!!!!!!_^1_%JMP*_!FALSE_0FIELD TOO LONG_^1GOOD_!EQU_"GOOD(*)_^1_%LDA-_!ARECL,I_.GET FIELD ADDRESS_^1_%ALS_"1_^1_%AAQ_"Q_^1CKIFDN LDA*_!LINDEX_^1_%SAZ_"FINDON_0BOTH INDEXES USED_^1_%STQ*_!LOCA_1SET UP CALL TO LEXP_^1_%LDQ*_!LEN_^1_%STQ*_!LENA_1DITTO_^1_%CLR_"Q_^1_%LLS_"8_5GET NEXT INDEX_^1_%JMP*_!FINTOP_.PROCESS €€NEXT INDEX_^1FINDON LDA*_!LEN_^1_%JMP*_!(FNDOP)_.RETURN_^1LIT_"TCQ_"Q_^1_%SAM_"INTLIT_0INTERNAL LITERAL_^1_%LDQ*_!(ELTB),Q_#GET LOC. OF EXTERNAL LITERAL_^1_%JMP*_!GOTLOC_^1INTLIT LDQ*_!(ILTB),Q_"GET LOC. OF INTERNAL LITERAL_^1GOTLOC EQU_"GOTLOC(*)_^1_%INQ_"-1_^1_%LDA-_!1,Q_2GET LENGTH_^1_%INQ_"2_^1_%QLS_"1_^1_%STA*_!LEN_2STORE LENGTH_^1_%JMP*_!CKIFDN_^1_%SPC_"4_^1******************€€**********************_^1*_F*_^1* FIND - INTERPRETS INDEX CODE_%*_^1*_"CALL - (Q) = INDEX_/*_^1*_$RTJ FIND_6*_^1*_!ON RETURN - (A) = - IF INTERNAL_"*_^1*_4+ IF EXTERNAL_"*_^1*_.(Q) = RELATIVE INDEX_!*_^1*_2= - IF LITERAL_#*_^1*_2= + IF FIELD_%*_^1*_E*_^1****************************************_^1_%SPC_"4_^1FIND_!NOP_]_^1_%CLR_"A_^1_%INQ_"MNILTB_^1_%SQP_"EXTLIT_^1_%INQ_"NIFTB_^1_%€€SQP_"INTLT_^1_%INQ_"NIFTB_^1_%SQP_"EXTFL_^1_%INQ_"NIFTB_^1_%TCQ_"Q_^1INTLT SET_"A_^1EXTLIT TCQ_"Q_^1EXTFL JMP*_!(FIND)_^1_%SPC_"4_^1**********************************************_^1*_K*_^1* CLC - COMPARES TWO FIELDS_0*_^1*_"CALL - (Q) = PTR. TO B FIELD(CHAR.)_#*_^1*_*(A) = LENGTH OF B FIELD_)*_^1*_*RTJ CLC_9*_^1*_$P+1 LENGTH OF A FIELD_/*_^1*_$P+2 POINTER TO A FIELD(CHAR.)_)*_€€^1* ON RETURN - (A) = RESULT OF COMPARISON_"*_^1*_1= + A B_2*_^1*_1= O A=B_2*_^1*_1= - A B_2*_^1*_$(Q) = RELATIVE POSITION OF_"*_^1*_,LAST CHARS. COMPARED_"*_^1*_K*_^1**********************************************_^1_%SPC_"4_^1BCHAR NUM_"$0_^1POSCNT NUM_"$0_^1CLC_"NOP_"$0_^1_%SUB*_!(CLC)_*BLEN - ALEN_^1_%STQ*_!BADR_+SAVE POINTER TO B FIELD_^1_%SAM_"USEB_^1_%CLR_"A_^1USEB_!ADD*_!(€€CLC)_^1_%RAO*_!CLC_^1_%STA*_!POSCNT_%CLEAR IF ZERO LENGTH_^1_%SAN_"1_^1_%JMP*_!CLCDON_2ONE OF FIELDS ZERO LENGTH_^1_%RTJ_"SETCNT_^1LENGTH NUM_"$0_^1_%LDQ*_!(CLC)_*GET POINTER TO A FIELD_^1_%STQ*_!AADR_^1_%CLR_"A_^1_%STA*_!POSCNT_)POSITION OF CURRENT CHARACTERS_^1NXTCHR RTJ*_!(XLBYTE)_^1BADR_!ADC_"$0_^1_%STA*_!BCHAR_*SAVE B FIELD CHAR._^1_%RTJ*_!(XLBYTE)_!GET A FIELD CHAR._^1AADR_!A€€DC_"$0_^1_%SUB*_!BCHAR_*COMPARE CHARS._^1_%SAN_"CLCDON_*CHARS. NOT SAME_^1_%RAO*_!LENGTH_^1_%SOV_"CLCDON_*FIELD EXHAUSTED_^1_%RAO*_!POSCNT_)CHAR. POS. FROM START OF FIELD_^1_%JMP*_!NXTCHR_^1CLCDON EQU_"CLCDON(*)_^1_%RAO*_!CLC_5INCREMENT RETURN ADDR;_^1_%LDQ*_!POSCNT_1GET POS. OF LAST COMPARISON_^1_%JMP*_!(CLC)_^1XLBYTE ADC_"LBYTE2_^1_%SPC_"4_^1**************************************€€**_^1*_F*_^1* LEXP - EVALUATE LOGICAL EXPRESSION *_^1*_!CALL - (A) = CURRENT TRUTH VALUE *_^1*_+RTJ LEXP_1*_^1*_%P+1 LOGICAL OPERATOR INDEX_!*_^1*_%P+2 LAST TRUTH VALUE - RESULT *_^1*_E*_^1****************************************_^1_%SPC_"4_^1_%ENT_"LEXP_^1LEXP_!NOP_"$0_(MAIN ENTRY_^1_%LDQ*_!(LEXP)_(OPTAIN OPERATOR CODE_^1_%QLS_"1_-DOUBLE IT FOR USE AS INDEX_^1_%RAO*_!LEXP_+P€€OINT TO RESULT VALUE_^1_%JMP*_!LEVAL,Q_(BRANCH TO OPERATOR CODE_^1LEVAL EQU_"LEVAL(*)_^1_%EOR*_!(LEXP)_)CODE = 0_!EOR_^1_%JMP*_!LEXIT_^1_%AND*_!(LEXP)_)CODE = 1_!AND_^1_%JMP*_!LEXIT_^1_%EOR*_!(LEXP)_)CODE = 2 OR_^1_%SAZ_"LEXIT+1_^1LEXIT EQU_"LEXIT(*)_^1_%STA*_!(LEXP)_(STORE RESULTING TRUTH VALUE_^1_%RAO*_!LEXP_^1_%JMP*_!(LEXP)_^1_%SPC_"4_^1************************************_^1€€* FOLLOWING ARE THE BASIC TABLES_!*_^1************************************_^1_%SPC_"4_^1*SSELECT AND TSELECT TABLES*_^1_%SPC_"2_^1SSEL_!NUM_"$0001,$0104_(TEST0 AND TEST1 END_^1TSEL_!NUM_"$0001,$0204_$TEST 0 AND TEST 2 END_^1_%SPC_"2_^1*INTERNAL TEST BLOCK*_^1_%SPC_"2_^1ITTAB ADC_"T0_2TEST0_^1_%ADC_"T1_7TEST1_^1_%ADC_"T2_1TEST 2_^1_%SPC_"2_^1*INTERNAL TEST DEFINITION TABLES*_^1_%SP€€C_"2_^1*TEST 0 - F0 EQ L0,ORF1 EQ L0,OR,F2 EQ L0,F3 EQ L1*_^1T0_#NUM_"$0032_.FLD 0,LIT 0_^1_%NUM_"$0202_/EQ,OR_^1_%NUM_"$0132_/FLD 1,LIT 0_^1_%NUM_"$0202_/EQ,OR_^1_%NUM_"$0232_/FLD 2,LIT 0_^1_%NUM_"$0202_/EQ,OR_^1_%NUM_"$0333_/FLD 3,LIT 1_^1_%NUM_"$0204_/EQ,END_^1*TEST 1 - F4 EQ L2,OR,F5 EQ L2,OR,F6 EQ L2,OR,F7 EQ L2*_^1T1_#NUM_"$0434_.FLD 4,LIT 2_^1_%NUM_"$0202_/EQ,OR_^1_%NUM_"$05€€34_/FLD 5,LIT 2_^1_%NUM_"$0202_/EQ,OR_^1_%NUM_"$0634_/FLD 6,LIT 2_^1_%NUM_"$0202_0EQ,OR_^1_%NUM_"$0734_/FLD 7,LIT 2_^1_%NUM_"$0204_/EQ,OR_^1*TEST 2 - F4 EQ L3,OR,F5 EQ L3,OR,F6 EQ L3,OR,F7 EQ L3*_^1T2_#NUM_"$0435_/FLD 4,LIT 3_^1_%NUM_"$0202_/EQ,OR_^1_%NUM_"$0535_/FLD 5,LIT 3_^1_%NUM_"$0202_0EQ,OR_^1_%NUM_"$0635_/FLD 6,LIT 3_^1_%NUM_"$0202_/EQ,OR_^1_%NUM_"$0735_/FLD 7,LIT 3_^1_%NUM_€€"$0204_/EQ,END_^1_%SPC_"2_^1*INTERNAL FIELD DEFINITION TABLE*_^1_%SPC_"2_^1ITFTB EQU_"ITFTB(*)_^1F0_#NUM_"7,5_!LEN=7,POS=5 - SOURCE - ' NAM '_^1F1_#NUM_"7,23 LEN=7,POS=23 - T.S. LIST - ' NAM '_^1F2_#NUM_"7,25 LEN=7,POS=25 - MSOS LIST - ' NAM '_^1F3_#NUM_"2,0_/LEN=2,POS=O -RELOCATABLE_^1_%SPC_"1_^1*ABOVE ARE FIELDS WITH "NAM"*_^1*BELOW ARE FIELDS WITH ACTUAL NAME*_^1_%SPC_"€€1_^1F4_#NUM_"7,14_!LENGTH = 7,POS=14 - SOURCE- ACTUAL NAME_^1F5_#NUM_"7,32_!LEN=7,PS=32- T.S. LIST ACTUAL NAME_^1F6_#NUM_"7,34_!LEN=7,POS=34 - MSOS LIST ACTUAL NAME_^1F7_#NUM_"6,8_"LEN=6,PS=8 - RELOCATABLE ACTUL NAME_^1_%SPC_"2_^1*INTERNAL LITERAL TABLE*_^1_%SPC_"2_^1ITLTB ADC_"L0_^1_%ADC_"L1_^1_%ADC_"L2_^1_%ADC_"L3_^1_%SPC_"2_^1*INTERNAL LITERALS*_^1_%SPC_"2_^1L0_#NUM_"7 LENGTH €€OF LITERAL_^1_%ALF_"4, NAM_^1L1_#NUM_"2_^1_%NUM_"$2050_4RELOCATABLE NAM_^1L2_#NUM_"$0_*ACTUAL NAME SPECIFIED BY USER_^1_%NUM_"$2000_^1_%BZS_"(3)_^1L3_#NUM_"$0_+DITTO_^1_%NUM_"$2000_^1_%BZS_"(3)_^1_%SPC_"4_^1*******************************_^1* ROUTINES WHICH INITIALIZE_!*_^1* THE DMB FOR SELECTION_%*_^1*******************************_^1_%SPC_"4_^1***********************************€€*********_^1* PNAM - POSITION TO A (GIVEN) "NAM" STMT. *_^1*_'BEFORE PROCESSING_0*_^1********************************************_^1_%SPC_"1_^1PNAM_!NOP_"$0_^1_%LDA*_!ASSEL_3SSELECT OPTION_^1_%STA-_!ASLCT1,Q_^1_%LDA*_!XL2_^1_%RTJ*_!INITSL_1PERFORM STANDARD INITIALIZATION_^1_%JMP*_!(PNAM)_1RETURN_^1ASSEL ADC_"SSEL_/SSELECT TEST BLOCK_^1*******************************************_^1€€* TNAN - TERMINATE PROCESSING ON (GIVEN) *_^1*_'"NAM" STATEMENT._1*_^1*******************************************_^1_%SPC_"1_^1TNAM_!NOP_"$0_^1_%LDA*_!ATSEL_3SSELECT OPTION_^1_%STA-_!ASLCT2,Q_^1_%LDA*_!XL3_^1_%RTJ*_!INITSL_2STANDARD INITIALIZATION_^1_%JMP*_!(TNAM)_2RETURN_^1ATSEL ADC_"TSEL_1TSELECT TEST BLOCK_^1_%SPC_"2_^1*********************************************_^1* ONAM - P€€ROCESS ONLY RECORDS WHICH CONTAIN*_^1*_'A (GIVEN) "NAM" STATEMENT_)*_^1*********************************************_^1_%SPC_"1_^1ONAM_!NOP_"$0_^1_%LDA*_!ASSEL_4USS SSELECT TEST BLOCK_^1_%STA-_!ASLCT3,Q_^1_%LDA*_!XL2_^1_%RTJ*_!INITSL_3STANDARD INITIALIZATION_^1_%JMP*_!(ONAM)_5RETURN_^1_%SPC_"2_^1****************************************_^1* SNAM - START PROCESSING AT A (GIVEN) *_^1*€€_'"NAM" STATEMENT AND STOP AT_!*_^1*_'NEXT "NAM" STATEMENT_)*_^1****************************************_^1_%SPC_"1_^1SNAM_!NOP_"$0_^1_%LDA*_!ATSEL_^1_%STA-_!ASLCT2,Q_^1_%RTJ*_!PNAM_/SSELECT_^1_%CLR_"A_^1_%STA*_!L3_^1_%JMP*_!(SNAM)_^1_%SPC_"2_^1*********************************************_^1* INTSEL - PERFORMS STANDARD INITIALIZATION*_^1********************************************€€**_^1_%SPC_"1_^1_%EQU_"SCPHR(7)_-EQUATES USED TO REFERENCE_^1_%EQU_"SCNUM(5)_3SCAN CONTROL BLOCK_^1SCFLG EQU_"SCFLG(6)_^1INITSL NOP_"$0_^1_%STA*_!TOLIT_0WHICH LITERAL_^1_%ENA_"-$8_^1_%AND-_!IOBFLG,Q_^1_%INA_"$8_^1_%STA-_!IOBFLG,Q_^1_%LDA-_!SCFLG,I_^1_%SAN_"OK_5NAME IS NOT A NUMBER_^1_%JMP_"OPN27_2REQUEST RETYPE_^1OK_#SAP_"PROCED_.IF A NAME IS SPECIFIED_^1_%CLR_"A_5OTHERWISE MAKE L€~ITERAL ZERO LENGTH_^1_%STA*_!(TOLIT)_^1_%JMP*_!(INITSL)_*RETURN_^1PROCED STA*_!(TOLIT)_^1_%RAO*_!(TOLIT)_^1_%LDQ*_!TOLIT_^1_%QLS_"1_^1_%INQ_"2_^1_%STQ*_!TOLIT_*WHERE TO PUT LITERAL_^1_%LDQ-_!SCPHR,I_'PUT NAME IN LITERAL AREA_^1_%RTJ_"MOVE_^1TOLIT ADC_"$0_^1_%ENA_"$20_3LAST CHAR. MUST BE A BLANK_^1_%RTJ_"SBYTE_^1_%JMP*_!(INITSL)_*RETURN_^1XL2_"ADC_"L2_^1XL3_"ADC_"L3_^1_%END_]_^__~PPRINTI CSY/ P€1_%NAM PRINTI_'SUP 1.0+CYB_^1_%ENT_"PRINTI_^1_%EXT_"PRINT,LBYTE,STNDMP_^1_%EXT_"GETLOC,SYSERR,COUNT1,COUNT2_^1_%EXT_"INPUT,INPM1_^1_%EXT_"PRNDMB,PRNM1_^1_%EXT_"WTOR_^1_%EXT_"STATIS_^1_%EXT_"MESAGE_^1_%SPC_"4_^1*********************************************_^1* PRINTI- PRINTS LISTABLE DATA TAPES_$*_^1*********************************************_^1_%SPC_"4_^1PRINTI NOP_"0_2ENTRY_^1€€_%ENA_"1_^1_%STA*_!FIRST_^1_%LDA*_!(PRDMB)_#BOTH INPUT AND OUTPUT OPEN_^1_%AND*_!(IDMB)_^1_%SAM_"PRT005_2YES - SKIP_^1_%JMP_"MESAGE_%EXIT-_^1PRT005 EQU_"PRT005(*)_^1_%SET_"A_^1_%STA*_!LSTFLG_-INITIALIZE LSTFLG_^1_%RTJ_"STNDMP_.INITIALIZE PARMS_^1_%LDA_"=XGETEOF_^1_%ENQ_"2_^1_%STA*_!(IDMB),Q_*SET EOF EXIT_^1_%SPC_"2_^1PRTNXT EQU_"PRTNXT(*)_^1_%LDQ*_!IDMB_^1_%INQ_"-1_^1_%RTJ_"GETLOC_€€.READ_^1PRT009 EQU_"PRT009(*)_^1_%LDA-_!LRECL,Q_^1_%INA_"-1_^1_%STA*_!DAT3_^1_%LDQ-_!ARECL,Q_^1_%LDA*_!LSTFLG_^1_%SAZ_"CCONT_^1_%STQ*_!DAT4_"LISTABLE ASSEMBLER_^1_%RAO*_!DAT3_^1_%LDA-_!12,Q_^1_%EOR_"=N$204E_/NAM STATEMENT_^1_%SAN_"PRTS_2NO_^1_%LDA-_!13,Q_^1_%EOR_"=N$414D_^1_%SAN_"PRTS_3NO_^1_%ENQ_"1_6PAGE EJECT_^1_%JMP*_!PRT060_^1PRTS_!EQU_"PRTS(*)_^1_%CLR_"Q_^1_%JMP*_!PRT060_^1_%S€€PC_"4_^1CCONT EQU_"CCONT(*)_^1_%QLS_"1_^1_%RTJ_"LBYTE_2GET CONTROL CHAR_^1_%QLS_"15_5SET DATA ADDRESS_^1_%STQ*_!DAT4_^1CHECK ENQ_"0_^1_%INA_"-$31_3CHECK FOR PAGE EJECT_^1_%SAN_"PRT050_0NO_^1_%ENQ_"1_5YES_^1_%JMP*_!PRTLN_^1PRT050 EQU_"PRT050(*)_^1_%INA_"1_8CHECK FOR DOUBLE SPACE_^1_%SAN_"PRT055_2SKIP NO_^1_%ENA_"1_^1_%JMP*_!PRTLN_^1PRT055 EQU_"PRT055(*)_^1_%INA_"3_8CHECK FOR TRIPL€€E_^1_%SAN_"PRT060_^1_%ENA_"2_7YES_^1_%JMP*_!PRTLN_^1PRT060 EQU_"PRT060(*)_^1_%ENA_"0_8SINGLE SPACE_^1PRTLN EQU_"PRTLN(*)_^1_%STA*_!DAT2_3SET LINE SPACE_^1_%STQ*_!DAT1_4SET EJECT_^1AGAIN RTJ_"PRINT_^1_%ADC_"FMT1_^1_%ADC_"DAT1_^1_%ADC_"PRNM1_^1_%LDA*_!FIRST_'MUST FORMS ALIGNMENT BE CHECKED_^1_%SAZ_"NFRST2_(NO_^1_%RTJ_"WTOR_)ASK OPERATOR IF FORMS ALIGNED_^1_%ADC_"FOMESG_^1_%SAM_"1_,€€ITS OK_^1_%JMP*_!AGAIN_%TRY AGAIN_^1_%CLR_"A_*NO LONGER NESS TO CHECK_^1_%STA*_!FIRST_^1_%JMP*_!AGAIN_)CONTINUE PROCESSING_^1NFRST2 EQU_"NFRST2(*)_^1_%RTJ_"COUNT1_^1_%SAZ_"PRTEXT_^1_%JMP*_!PRTNXT_^1GETEOF RTJ_"COUNT2_^1_%SAZ_"PRTEXT_^1_%JMP*_!PRTNXT_^1_%SPC_"4_^1PRTEXT EQU_"PRTEXT(*)_^1_%RTJ_"STATIS_4PRINT STATISTICS_^1_%JMP*_!(PRINTI)_0RETURN_^1_%SPC_"2_^1PRDMB ADC_"PRNDMB_^1IDMB€4_!ADC_"INPUT_^1LSTFLG NUM_"0_^1DAT1_!NUM_"0_^1DAT2_!NUM_"0_^1DAT3_!NUM_"0_^1DAT4_!NUM_"0_^1FIRST NUM_"$0_^1FMT1_!ALF_"9, .(E).(/).%A/.(E)*_^1FOMESG ALF_"10,/14CFORMS ALIGNED?;_^1ARECL EQU_"ARECL(12)_^1_%EQU_"LRECL(13)_^1_%ENT_"FTN1_^1FTN1_!NOP_"0_^1_%CLR_"A_^1_%STA*_!LSTFLG_^1_%JMP*_!(FTN1)_^1_%END_]_^__4PDUMP CSY/ P€1_%NAM DUMP_)SUP 1.0+CYB_^1*_.11-30-73_0CCN1700DUM10-001_^1_%EXT_"PRINT_^1_%EXT_"MESAGE_^1_%EXT_"COUNT1,FCOUNT_^1_%EXT_"COUNT2,RCOUNT,SCCB_^1_%EXT_"GETLOC,SPARM,FPARM_^1_%ENT_"DUMP_^1_%ENT_"SCDMP_^1_%ENT_"FMDMP_^1_%ENT_"SUDMP_^1_%ENT_"SHDMP_^1_%EXT_"INPUT,INPM1_^1_%EXT_"PRNDMB,PRNM1_^1_%ENT_"HDFLAG_^1_%EXT_"STATIS_^1_%EXT_"STNDMP_^1_%ENT_"DUIND_^1_%SPC_"4_^1***********************€€*********************_^1*_I*_^1*_!EQUATES USED TO REFERENCE DMB_)*_^1*_I*_^1********************************************_^1_%SPC_"4_^1IOBFLG EQU_"IOBFLG(1)_^1IOBFL2 EQU_"IOBFL2(IOBFLG+1)_^1EOFADR EQU_"EOFADR(IOBFL2+1)_^1ERREXT EQU_"ERREXT(EOFADR+1)_^1LOG1_!EQU_"LOG1(ERREXT+1)_^1ABUFFP EQU_"ABUFFP(LOG1+1)_^1LBUFFP EQU_"LBUFFP(ABUFFP+1)_^1MAXBLK EQU_"MAXBLK(LBUFFP+1)_^1RECSIZ EQU_"RE€€CSIZ(MAXBLK+1)_^1ABLK_!EQU_"ABLK(RECSIZ+1)_^1LBLK_!EQU_"LBLK(ABLK+1)_^1ARECL EQU_"ARECL(LBLK+1)_^1LRECL EQU_"LRECL(ARECL+1)_^1BLKCNT EQU_"BLKCNT(LRECL+1)_^1RECCNT EQU_"RECCNT(BLKCNT+1)_^1ALABEL EQU_"ALABEL(RECCNT+1)_^1FORD_!EQU_"FORD(ALABEL+1)_^1RECORD EQU_"RECORD(FORD+1)_^1ACONV EQU_"ACONV(RECORD+1)_^1ASLCT1 EQU_"ASLCT1(ACONV+1)_^1ASLCT2 EQU_"ASLCT2(ASLCT1+1)_^1ASLCT3 EQU_"ASLC€€T3(ASLCT2+1)_^1_%SPC_"4_^1DUMP_!NOP_"$0_^1_%LDA*_!HDFLAG_)CHECK FOR NON-STANDARD DUMP_^1_%SAN_"NOTSTN_^1_%LDA*_!(DMPI)_$CHECK IF IMPUT OPEN_^1_%SAM_"DMP05_^1NOTOPN JMP_"MESAGE_'EXIT_^1DMP05 LDA*_!(PDMPI)_^1_%SAM_"1_^1_%JMP*_!NOTOPN_^1_%RTJ_"STNDMP_^1_%LDQ*_!DMPM1_^1_%LDA_"=XDMPEOF_^1_%STA-_!EOFADR,Q_^1NOTSTN STQ-_!$FF_^1_%LDQ_"=XPRNM1_^1_%LDA-_!LBUFFP,Q_^1_%INA_"-4_^1_%STA_"LINPER€€_^1_%LDA-_!MAXBLK,Q_^1_%STA_"CHRLIN_^1_%RTJ_"SETUP1_^1_%LDA*_!HDFLAG_^1_%SAZ_"NEXTRC_^1_%RTJ_"OUTPUT_^1_%JMP*_!RETXXX_^1NEXTRC LDQ-_!$FF_^1_%RTJ_"GETLOC_^1_%RTJ_"OUTPUT_^1_%RTJ_"COUNT1_^1_%SAZ_"RETXXX_^1_%JMP*_!NEXTRC_^1RETXXX EQU_"RETXXX(*)_^1_%LDA*_!HDFLAG_^1_%SAN_"RETBYP_^1_%RTJ_"STATIS_^1RETBYP EQU_"RETBYP(*)_^1_%CLR_"A_^1_%STA*_!HDFLAG_^1_%JMP*_!(DUMP)_^1DMPEOF RTJ_"COUNT2_^1_€€%SAN_"NEXTX_^1_%JMP*_!RETXXX_!PRINT STATISTICS_^1NEXTX JMP*_!NEXTRC_^1FMDMP NOP_]_^1_%JMP*_!(FMDMP)_^1SUDMP NOP_]_^1_%RAO*_!INDEX_^1_%RAO*_!INDEX_^1_%JMP*_!(SUDMP)_^1SHDMP NOP_]_^1_%RAO*_!INDEX_^1_%JMP*_!(SHDMP)_^1SCDMP EQU_"SCDMP(FMDMP)_^1PDMPI ADC_"PRNDMB_^1DMPI_!ADC_"INPUT_^1DMPM1 ADC_"INPM1_^1_%SPC_"4_^1**********************_^1* PRINT PAGE HEADING *_^1******************€€****_^1_%SPC_"4_^1HDFLAG NUM_"$0_^1PAGHDG NOP_]_^1_%LDQ*_!HDFLAG_-DON'T PRINT HEADING IF FLAG SET_^1_%SQN_"IRETN_^1_%RTJ*_!FMTCHK_-PRINT HEADING ONLY WITH CERTAIN FORMAT_^1IRETN EQU_"IRETN(*)_^1_%JMP*_!PARETN_^1_%RAO*_!PAGNO_.INCREMENT PAGE COUNTER_^1_%LDA*_!LINCT_.INCREMENT LINES-ON-PAGE COUNTER_^1_%INA_"2_^1_%STA*_!LINCT_^1_%RTJ*_!(PRINTX)_+CALL PRINT ROUTINE_^1PGFOST EQU_"PGFOS€€T(*)_^1_%ADC_"$0_^1_%ADC_"PAGNO_^1_%ADC_"PRNM1_^1PARETN EQU_"PARETN(*)_^1_%JMP*_!(PAGHDG)_+RETURN_^1PAGNO NUM_"$0_%PAGE COUNT_^1INDEX NUM_"$0_^1DUIND EQU_"DUIND(INDEX)_^1_%SPC_"4_^1**************************_^1* PRINT RECORD HEADINGS *_^1**************************_^1_%SPC_"4_^1HEADNG NOP_]_^1_%RTJ*_!FMTCHK_-PRINT HEADINGS ONLY WITH CERTAIN FORMA_^1_%JMP*_!HDRETN_^1_%ENA_"4_3INCR€€EMENT LINES-ON-PAGE COUNTER_^1_%TCQ_"Q_^1_%AAQ_"A_^1_%ADD*_!LINCT_^1_%STA*_!LINCT_^1_%LDA*_!(XOCRLN)_^1_%CLR_"Q_^1_%DVI_"=N5_^1_%STA*_!HDCHLN_^1_%LDA*_!(XOCRLN)_^1_%STA*_!(PLDAT)_^1_%ARS_"1_^1_%STA_"PLDATA+1_^1_%STA*_!HDWDLN_^1_%LDA*_!(XOCRLN)_^1_%INA_"-1_^1_%STA*_!HDLAST_^1_%ENA_"-5_^1_%STA*_!CHINDX_^1_%ENA_"-2_^1_%STA*_!WDINDX_^1_%RTJ*_!HEADER_-PRINT FIRST PART OF HEADING_^1_%RTJ€€*_!(PRINTX)_+CALL PRINT ROUTINE_^1HDFOST EQU_"HDFOST(*)_^1_%ADC_"$0_^1_%ADC_"HDCHLN_^1_%ADC_"PRNM1_^1_%RTJ*_!PRLIN_.PRINT LINE ACROSS TOP_^1HDRETN EQU_"HDRETN(*)_^1_%JMP*_!(HEADNG)_^1HDCHLN NUM_"$0_,DATA LIST_^1CHINDX NUM_"$0_^1HDLAST NUM_"$0_^1HDWDLN NUM_"$0_^1WDINDX NUM_"$0_^1PLDAT ADC_"PLDATA_^1_%SPC_"4_^1**********************_^1* PRINT BLOCK NUMBER *_^1* AND RECORD NUMBER *_€€^1**********************_^1_%SPC_"4_^1HEADER NOP_]_^1_%RTJ*_!(PRINTX)_+CALL PRINT ROUTINE_^1_%ADC_"FOBOTH_^1_%ADC_"HDATA_^1_%ADC_"PRNM1_^1_%JMP*_!(HEADER)_^1_%SPC_"4_^1************************_^1* PRINT LINE AT TOP OR *_^1* BOTTOM OF RECORD_#*_^1************************_^1_%SPC_"4_^1PRLIN NOP_]_^1_%RTJ*_!FMTCHK_,PRINT HEADINGS ONLY WITH CERTAIN FORMAT_^1_%JMP*_!PLRETN_^1_%RAO*_!LI€€NCT_^1_%RTJ*_!(PRINTX)_^1PLFOST EQU_"PLFOST(*)_^1_%ADC_"$0_^1_%ADC_"PLDATA_^1_%ADC_"PRNM1_^1PLRETN JMP*_!(PRLIN)_^1_%SPC_"4_^1**************************************_^1* GET NUMBER OF LINES WHICH COULD BE *_^1* PRINTED ON REMAINDER OF PAGE_%*_^1**************************************_^1_%SPC_"4_^1LINCT NUM_"$0_^1LINCTR NOP_]_^1_%LDA*_!LINES_.# FULL LINES LEFT IN BUFFER_^1_%SUB_"OLIN€€ES_#^ LINES PRINTED LAST TIME_^1_%STA*_!LINES_.UPDATED COUNT_^1_%LDQ*_!LINCT_%LINES PRINTED THIS PAGE INC. HEADINGS_^1_%ADQ_"OLINES_^1_%STQ*_!LINCT_'UPDATED COUNT_^1_%CLR_"Q_^1_%LDA*_!INDEX_.LEAVE ROOM FOR HEADING?_^1_%INA_"-2_^1_%SAP_"LIN001_.IF NO HEADING_^1_%ENA_"5_'GET NO. LINES FOR HEADING_^1_%SUB*_!INDEX_^1_%TCA_"Q_^1LIN001 EQU_"LIN001(*)_^1_%LDA*_!LINPER_-GET NO. OF LINES CA€€N BE PRINTED PER PA_^1_%AAQ_"A_2GET NUMBER CAN PRINT ON REST OF PAGE_^1_%SUB*_!LINCT_^1_%SAN_"CTDONE_^1_%ENA_"1_^1CTDONE EQU_"CTDONE(*)_^1_%JMP*_!(LINCTR)_^1XOCRLN ADC_"OCRLIN_^1_%SPC_"4_^1*************************************_^1* CHECK IF FORMATED DUMP AND IF NOT *_^1* INCREMENT RETURN POINTER BY ONE_!*_^1*************************************_^1_%SPC_"4_^1FMTCHK NOP_]_^1_%LDQ*_!IN€€DEX_^1_%INQ_"-2_^1_%SQP_"CHKOUT_.NO HEADING_^1_%INQ_"+2_^1_%RAO*_!FMTCHK_-RETURN 2 INSTRUCTIONS PAST CALL_^1CHKOUT EQU_"CHKOUT(*)_^1_%JMP*_!(FMTCHK)_^1_%SPC_"4_^1**********************************************_^1* INITIALIZATION DONE UPON EACH CALL TO DUMP *_^1**********************************************_^1_%SPC_"4_^1LINPER NUM_"$0_,NO. LINES TO PRINT PER PAGE_^1LINES NUM_"$0_-NO€€. FULL LINES LEFT TO PRINTE_^1CHARS NUM_"$0_-NO. CHARACTERS LEFT OVER_^1CHRLIN NUM_"$0,$64,$14,$84 STANDARD FORMS WIDTHS_^1_%NUM_"$32,$A,$3C_^1PRINTX ADC_"PRINT_8CCN1700DUM10-001_^1_%SPC_"2_^1SETUP1 NOP_]_^1_%LDA*_!LINPER_-HAS FORMS LENGTH BEEN SPECIFIED?_^1_%SAN_"NOTSTA_.IF SO_^1_%ENA_"52_2USE STANDARD FORMS LENGTH_^1_%STA*_!LINPER_^1NOTSTA EQU_"NOTSTA(*)_^1_%LDQ*_!INDEX_^1_%LDA*€€_!CHRLIN+6_'GET 60 IN A_^1_%SUB*_!CHRLIN_^1_%SAM_"1_.IF PRINTER FORM_^1_%INQ_"3_/TTY FORM_^1_%LDA*_!CHRLIN+1,Q_#USE STNDARD FORMS WIDTH_^1_%STA*_!CHRLIN_^1NOTSTD EQU_"NOTSTD(*)_^1_%LDQ*_!INDEX_^1_%CLR_"A_^1_%STA*_!PAGNO_.INITIALIZE PAGE COUNTER_^1_%LDA*_!OUTFOR,Q_+SET UP FORMAT ADDRESS_^1_%STA*_!NEWFLG_%MAKE IT NON-ZERO_^1_%STA*_!OTFOST_^1_%RTJ*_!FMTCHK_^1_%JMP*_!(SETUP1)_+IF NO HE€€ADINGS DONE_^1_%LDA*_!HDFOLS,Q_+SET UP FORMAT ADDRESS_^1_%STA*_!HDFOST_^1_%LDA*_!PGFOLS,Q_+DITTO_^1_%STA_"PGFOST_^1_%LDA*_!PLFOLS,Q_+DITTO_^1_%STA*_!PLFOST_^1_%JMP*_!(SETUP1)_^1_%SPC_"4_^1**********************************************_^1* GET NUMBER OF FULL LINES AND EXTRA_(*_^1* CHARACTERS IN INPUT BUFFER FOR EACH RECORD *_^1**********************************************_^1_%SPC_"€€4_^1SETUP2 NOP_"0_^1_%LDA-_!BLKCNT,I_^1_%STA*_!BLOCNO_^1_%LDA-_!RECCNT,I_^1_%STA*_!RECNO_^1_%LDA-_!LBLK,I_^1_%STA*_!BLEN_^1_%LDA-_!LRECL,I_^1_%STA*_!RLEN_^1_%CLR_"Q_^1_%STQ*_!OLINES_^1_%DVI*_!CHRLIN_-GET NO. OF FULL LINES_^1_%STA*_!LINES_^1_%STQ*_!CHARS_.NO. OF CHARACTERS LEFT OVER_^1_%LDA*_!CHRLIN_-SET UP OUTPUT DATA LIST_^1_%STA*_!OCRLIN_^1_%TCA_"Q_^1_%STQ*_!OINDEX_-DITTO_^1_%ARS€€_"1_^1_%STA*_!OWDLIN_^1_%LDA-_!ARECL,I_^1_%STA*_!OINBUF_^1_%ENA_"10_ACCN1700DUM10-001_^1_%STA*_!OLASTC_*_^1*_R*_^1* USE OF OPENSL:_B*_^1*_$OPENSL €€IS CALLED BY OPEN IF THE IOBFLG_%*_^1*_$INDICATES STANDARD LABELS. THE FIRST OPEN_!*_^1*_$ALLOCATES A DMB EXTENSION AND INITIALIZES_"*_^1*_$THE VOLUME SEQUENCE NUMBER TO 1. PROCESSING *_^1*_$INVOLVES VERFICATION, AND WRITING OF ALL_#*_^1*_$STANDARD LABELS. OPENSL MAY BE CALLED_%*_^1*_$DURING FUNCTIONAL PROCESSING TO HANDLE_%*_^1*_$ANY SPECIAL CONDITIONS_6*_^1*_R*_^1*************€€****************************************_^1***********************************_^1*_!ENTRY POINTS WITHIN STNLAB_"*_^1***********************************_^1_%SPC_"2_^1_%ENT_"STNLAB_^1_%ENT_"SDATE_^1_%ENT_"EDATE_^1_%ENT_"CLSLAB_^1_%ENT_"RLLAB_^1_%ENT_"RELLAB_^1_%ENT_"EOFSL_^1_%ENT_"AVSEOT_^1_%SPC_"4_^1_%SPC_"4_^1****************************************_^1*_!EXTERNAL SUBROUTINES AND DA€€TA_$*_^1****************************************_^1_%SPC_"2_^1_%EXT_"NOLABL_^1_%EXT_"INPM1_^1_%EXT_"TTYDM1_^1_%EXT_"GETBUF_^1_%EXT_"SYSERR_^1_%EXT_"WTOR_^1_%EXT_"CLRRGN_^1_%EXT_"PRINT_^1_%EXT_"RELBUF_^1_%EXT_"MOTION_^1_%EXT_"GETLOC_^1_%EXT_"GETFF_^1_%EXT_"READ_^1_%EXT_"PUTLOC_^1_%EXT_"PUTMOV_^1_%EXT_"WRITE_^1_%EXT_"SBYTE_^1_%EXT_"SCAN_^1_%EXT_"INITBF_^1_%EXT_"SETCNT_^1_%EXT_"MOVE_^€€1_%EXT_"SCCBM1_^1_%EXT_"FMTMSG_^1_%EXT_"LBYTE,LBYTE2_^1_%SPC_"2_^1_%SPC_"4_^1***********************************_^1*_@*_^1* EQUATES USED TO REFERENCE THE *_^1* DATA MANAGEMENT BLOCKS.THEY *_^1* ARE USED IN CONJUNCTION WITH_!*_^1* AN INDEX REGISTERSET TO THE_!*_^1* ADDRESS OF THE DMB-1._)*_^1*_@*_^1***********************************_^1_%SPC_"4_^1IOBFLG EQU_"IOBFLG(1)_^1IOBFL2€€ EQU_"IOBFL2(IOBFLG+1)_^1EOFADR EQU_"EOFADR(IOBFL2+1)_^1ERREXT EQU_"ERREXT(EOFADR+1)_^1LOG1_!EQU_"LOG1(ERREXT+1)_^1ABUFFP EQU_"ABUFFP(LOG1+1)_^1LBUFFP EQU_"LBUFFP(ABUFFP+1)_^1MAXBLK EQU_"MAXBLK(LBUFFP+1)_^1RECSIZ EQU_"RECSIZ(MAXBLK+1)_^1ABLK_!EQU_"ABLK(RECSIZ+1)_^1LBLK_!EQU_"LBLK(ABLK+1)_^1ARECL EQU_"ARECL(LBLK+1)_^1LRECL EQU_"LRECL(ARECL+1)_^1BLKCNT EQU_"BLKCNT(LRECL+1)_^1RECCNT€€ EQU_"RECCNT(BLKCNT+1)_^1EXTPTR EQU_"EXTPTR(RECCNT+1)_^1FORD_!EQU_"FORD(EXTPTR+1)_^1RECORD EQU_"RECORD(FORD+1)_^1ACONV EQU_"ACONV(RECORD+1)_^1ASLCT1 EQU_"ASLCT1(ACONV+1)_^1ASLCT2 EQU_"ASLCT2(ASLCT1+1)_^1ASLCT3 EQU_"ASLCT3(ASLCT2+1)_^1_%SPC_"4_^1*********************************************_^1*_J*_^1* EQUATES USED TO REFERENCT THE_+*_^1* EXTENTION OF THE DATA MANAGEMENT_(*_^1* B€€LOCKS REQUIRED FOR LABEL PROCESSING._"*_^1*_J*_^1*********************************************_^1_%SPC_"4_^1EXTDMB EQU_"EXTDMB(1)_^1DMBPTR EQU_"DMBPTR(EXTDMB)_^1ISECTN EQU_"ISECTN(DMBPTR+1)_^1ISEQN EQU_"ISEQN(ISECTN+1)_^1LABADR EQU_"LABADR(ISEQN+1)_^1LABID EQU_"LABID(LABADR+1)_^1FILEID EQU_"FILEID(LABID+1)_^1FSECTN EQU_"FSECTN(FILEID+9)_^1FSEQN EQU_"FSEQN(FSECTN+1)_^1FCRDTE EQU_€€"FCRDTE(FSEQN+1)_^1FEXDTE EQU_"FEXDTE(FCRDTE+3)_^1FBLK_!EQU_"FBLK(FEXDTE+3)_^1HDRTP EQU_"HDRTP(FBLK+1)_^1FRECFM EQU_"FRECFM(HDRTP+1)_^1FBLKS EQU_"FBLKS(FRECFM+1)_^1FRECS EQU_"FRECS(FBLKS+1)_^1LEXTD EQU_"LEXTD(FRECS)_^1_%SPC_"4_^1LABELX EQU_"LABELX(0)_^1LABNUM EQU_"LABNUM(LABELX+3)_^1VOLSR EQU_"VOLSR(LABNUM+1)_^1ACCESS EQU_"ACCESS(VOLSR+6)_^1RESVD1 EQU_"RESVD1(ACCESS+1)_^1RESVD€€2 EQU_"RESVD2(RESVD1+20)_^1OWNID EQU_"OWNID(RESVD2+6)_^1RESSTD EQU_"RESSTD(OWNID+14)_^1LSL_"EQU_"LSL(RESSTD+28)_^1_%SPC_"2_^1HFILID EQU_"HFILID(LABNUM+1)_^1HSETID EQU_"HSETID(HFILID+17)_^1HFSECN EQU_"HFSECN(HSETID+6)_^1HFSEQN EQU_"HFSEQN(HFSECN+4)_^1HGENO EQU_"HGENO(HFSEQN+4)_^1HGENVR EQU_"HGENVR(HGENO+4)_^1HCRDT EQU_"HCRDT(HGENVR+2)_^1HEXDT EQU_"HEXDT(HCRDT+6)_^1HACESS EQU_"HA€€CESS(HEXDT+6)_^1HBLCT EQU_"HBLCT(HACESS+1)_^1HSYSCD EQU_"HSYSCD(HBLCT+6)_^1HRESVO EQU_"HRESVO(HSYSCD+13)_^1RECFMT EQU_"RECFMT(LABNUM+1)_^1VBLEN EQU_"VBLEN(RECFMT+1)_^1VRLEN EQU_"VRLEN(VBLEN+5)_^1VRESV EQU_"VRESV(VRLEN+5)_^1BUFOFF EQU_"BUFOFF(VRESV+35)_^1VRESTD EQU_"VRESTD(BUFOFF+2)_^1_%SPC_"4_^1_%SPC_"4_^1****************************************_^1*_$NOTION EQUATES_1*_^1*******€€*********************************_^1_%SPC_"2_^1REWIND EQU_"REWIND(3)_^1SFILEM EQU_"SFILEM(5)_^1UNLOAD EQU_"UNLOAD(4)_^1SFILEB EQU_"SFILEB(6)_^1BACKSP EQU_"BACKSP(1)_^1WFILEM EQU_"WFILEM(2)_^1_%SPC_"2_^1_%SPC_"4_^1****************************************_^1*_!SCAN CONTROL BLOCK EQUATES_'*_^1****************************************_^1_%SPC_"2_^1SAINP EQU_"SAINP(1)_^1SINPLN EQU_"SINP€€LN(SAINP+1)_^1SNCA_!EQU_"SNCA(SINPLN+1)_^1SCPHR EQU_"SCPHR(SNCA+1)_^1SCPHL EQU_"SCPHL(SCPHR+1)_^1SCFLG EQU_"SCFLG(SCPHL+1)_^1SCNUM EQU_"SCNUM(SCFLG+1)_^1EOS_"EQU_"EOS(SCNUM+1)_^1_%SPC_"4_^1***********************************_^1* ERROR EQUATES_1*_^1***********************************_^1_%SPC_"2_^1S000_!EQU_"S000(64)_^1S007_!EQU_"S007(71)_^1S009_!EQU_"S009(73)_^1S013_!EQU_"S013(€€77)_^1S012_!EQU_"S012(76)_^1_%SPC_"4_^1MOTN3 ADC_"MOTION_^1STNLAB NOP_"0_^1_%LDQ-_!EXTPTR,I_#CHECK IF DMB EXTENT EXISTS_^1_%SQN_"SL0020_%YES_^1_%RTJ*_!GETEXT_$NO ALLOCATE A DMB EXTENT_^1SL0020 EQU_"SL0020(*)_^1_%LDA-_!ISEQN,Q_(FILE ORDINAL = 0_^1_%SAN_"SL0030_*NO_^1_%RTJ*_!(IRDVOL)_"PROCESS VOL1 HEADER_^1_%ENA_"1_^1_%STA-_!ISECTN,Q_#SET VOLUME SEQUENCE TO ONE_^1_%STA-_!ISEQN,Q_"U€€PDATE FILE SEQUENCE NUMBER_^1SL0030 EQU_"SL0030(*)_^1_%LDA-_!FORD,I_)POSITIONING REQUIRED_^1_%SAN_"SL0031_+SKIP FILES_^1_%JMP*_!SL0040_^1SL0031 EQU_"SL0031(*)_^1_%RTJ_"SETCNT_^1COUNT NUM_"$0_^1_%CLR_"A_^1_%STA-_!FORD,I_^1SL0032 EQU_"SL0032(*)_^1_%RTJ*_!(XRD12)_"READ HEADER LABELS_^1_%SAM_"SKPERR_,BAD LABEL OF NO LABEL_^1SL0035 EQU_"SL0035(*)_^1_%ENA_"SFILEM_(POSITION PAST DATA_^1_€€%RTJ*_!(MOTN3)_^1_%RTJ_"RDHDR_-READ TRAILER LABEL_^1_%SAZ_"SKPERR_+IF NO TRAILER LABEL_^1_%SAM_"SKPERR_,IF BAD TRAILER LABEL_^1_%INA_"-4_0IS IT EOV_^1_%SAN_"SLCNT_.NO ITS EOF_^1_%RTJ_"AVSEOV_.GET NEXT VOLUME_^1_%JMP*_!SL0035_^1SKPERR EQU_"SKPERR(*)_^1_%ENA_"S009_^1_%JMP*_!SL0098_^1SL0040 EQU_"SL0040(*)_^1_%LDA-_!IOBFLG,I_'CHECK IF OUTPUT_^1_%ALS_"1_^1_%SAP_"SL0050_*POSITIVE IMPLIES€€ INPUT_^1_%JMP*_!SL0101_)PROCESS OUTPUT_^1SLCNT EQU_"SLCNT(*)_^1_%RAO-_!ISEQN,Q_^1_%ENA_"SFILEM_^1_%RTJ*_!(MOTN3)_^1_%RAO*_!COUNT_^1_%SNO_"1_^1_%JMP*_!SL0040_^1_%JMP*_!SL0032_^1_%SPC_"2_^1***************************_^1* INPUT LABEL PROCESSING *_^1***************************_^1_%SPC_"2_^1XRD12 ADC_"RDHD12_!ADDRESS OF READ HEARDER ROUTINE_^1SL0050 EQU_"SL0050(*)_^1_%RTJ*_!(XRD12)_€€!READ HEADER ONE ADN TWO_^1_%SAZ_"SL0100_"READ BOTH HEADERS OK_^1_%SAP_"SL0098_"ERROR_^1_%ENA_"S007_$FILE MARK CANNOT CONTINUE_^1SL0098 EQU_"SL0098(*)_^1_%RTJ_"LABERR_^1SL0100 EQU_"SL0100(*)_^1_%RTJ_"NOLABL_*COMPLETE OPEN PROCESSING_^1_%JMP*_!(STNLAB)_^1_%SPC_"4_^1****************************************_^1*_!OUTPUT LABEL PROCESSING_+*_^1****************************************_^1_€€%SPC_"4_^1SL0101 EQU_"SL0101(*)_^1_%RTJ*_!CHKHDR_!READ HEADER AND VERIFY VOLUME EXPIRATION_^1SL0130 EQU_"SL0130(*)_^1_%LDQ_"=XINPM1_"USE LABELS FROM INPUT DMB_^1_%LDA-_!IOBFLG,Q_^1_%SAP_"NTOPN_+NO_^1_%ALS_"6_^1_%SAP_"NTOPN_+NO_^1_%ENA_"FILEID_*COMPUTE ADDRESS OF DSN_^1_%ADD-_!EXTPTR,Q_^1_%ALS_"1_^1_%STA*_!DSNPTR_^1_%INA_"FEXDTE+FEXDTE-FILEID-FILEID_^1_%STA*_!EXPDT1_^1_%ENA_"17_^1_%€€JMP*_!SL0140_^1NTOPN EQU_"NTOPN(*)_^1_%RTJ*_!GETDSN_"OBTAIN DATE AND DSN FROM OPERATOR_^1_%STQ*_!DSNPTR_^1_%LDQ_"EXPDTE_^1_%QLS_"1_^1_%STQ*_!EXPDT1_^1SL0140 EQU_"SL0140(*)_^1_%LDQ_"SYSDAT_*GET CURRENT DATE % USE AS_^1_%QLS_"1_/CREATION DATE_^1_%STQ*_!CRDT1_^1_%RTJ*_!DSNBLD_#SET EXTENT LABEL INFO_^1DSNPTR NUM_"0_^1CRDT1 NUM_"0_^1EXPDT1 NUM_"0_^1_%LDQ-_!EXTPTR,I_'OBTAIN EXTENT POIN€€TER_^1_%LDA-_!MAXBLK,I_'SET HDR2_^1_%STA-_!FBLKS,Q_(BLOCK SIZE_^1_%LDA-_!RECSIZ,I_^1_%STA-_!FRECS,Q_(AND RECORD SIZE_^1_%LDA-_!IOBFLG,I_"CHECK FORMAT_^1_%ALS_"3_^1_%SAP_"SL0150_^1_%ENA_"$56_-VARIABLE_^1_%JMP*_!SL0160_^1SL0150 EQU_"SL0150(*)_^1_%ALS_"1_^1_%SAP_"SLUNDF_^1_%ENA_"$46_-FIXED_^1_%JMP*_!SL0160_^1SLUNDF EQU_"SLUNDF(*)_^1_%CLR_"A_/UNDEFINED SO CLEAR RECORD SIZE_^1_%STA-_!FR€€ECS,Q_^1_%ENA_"$55_^1SL0160 EQU_"SL0160(*)_^1_%ALS_"8_/SET FORMAT CODE_^1_%STA-_!FRECFM,Q_^1_%RTJ*_!WHD12_^1_%JMP*_!(STNLAB)_^1_%SPC_"4_^1****************************************_^1*_$GETEXT - ALLOCATE DMB EXTENT_"*_^1*_.(I) = DMB_-*_^1****************************************_^1_%SPC_"2_^1GETEXT NOP_"0_^1_%ENA_"LEXTD_+LENGTH OF EXTENT_^1_%RTJ_"GETBUF_^1_%SQN_"SL0010_#SPACE NOT FOUN€€D IF Q IS ZERO_^1_%ENA_"S000_,NO SPACE - ERROR_^1_%RTJ_"SYSERR_^1SL0010 EQU_"SL0010(*)_^1_%INQ_"-1_^1_%ENA_"LEXTD_+CLEAR EXTENT_^1_%RTJ_"CLRRGN_^1_%STQ-_!EXTPTR,I_'CHAIN EXTENT TO DMB AND_^1_%LDA-_!$FF_+DMB TO EXTENT_^1_%STA-_!EXTDMB,Q_^1_%JMP*_!(GETEXT)_'RETURN_^1IRDVOL ADC_"RDVOL1_^1_%SPC_"4_^1_%SPC_"4_^1****************************************_^1*_!WRITE OUTPUT HEADER 1 AND 2_'*€€_^1****************************************_^1WHD12 NOP_"0_^1_%ENA_"0_^1_%RTJ_"WRHDR_*WRITE HEADER 1 AND 2_^1_%ENA_"WFILEM_^1_%RTJ*_!(MOTN)_)WRITE A FILEMARK_^1_%JMP*_!(WHD12)_(RETURN_^1_%SPC_"4_^1***********************************************_^1*_"CHKHDR VERIFIES HEADER 1 ON AN OUTPUT_!*_^1*_+FILE. MAKES SURE VOLUME IS AVAIL-*_^1*_+ABLE. REQUESTS NEW VOLUME IF IT *_^1*_+IS NOT€€ AVAILABLE. ON RETURN_#*_^1*_+THERE IS A VOLUME MOUNTED WHICH *_^1*_+CAN BE USED._4*_^1***********************************************_^1_%SPC_"4_^1CHKHDR NOP_"0_^1_%RTJ*_!RDHDR_$GET HEADER IF IT EXISTS_^1_%SAN_"SL0107_*FILEMARK?_^1_%ENA_"SFILEB_*YES SKIP BACKWARDS_^1SL0105 EQU_"SL0105(*)_^1_%RTJ*_!(MOTN)_^1_%JMP*_!(CHKHDR)_%RETURN_^1SL0107 INA_"-2_(HDR1?_^1_%SAZ_"SL0110_*YES_^1S€€L0109 ENA_"BACKSP_#NO BACKSPACE OVER IT_^1_%JMP*_!SL0105_^1SL0110 EQU_"SL0110(*)_^1_%RTJ_"LABDTE_*HDR1 CHECK EXPIRATION DATE_^1_%SAP_"SL0120_^1_%RTJ*_!(IRDVOL)_"GET NEXT VOLUME FOR PROCESSING_^1_%JMP*_!CHKHDR+1_'RETRY NEXT VOLUME_^1SL0120 EQU_"SL0120(*)_^1_%JMP*_!SL0109_)BACKSPACE OVER HEADER_^1_%SPC_"4_^1_%ENT_"GETDSN_^1GETDSN NOP_"0_^1_%RTJ_"SVENT_!SAVE CONSTNATS_^1RETRY1 RTJ_"W€€TOR_%OBTAIN DSN_^1_%ADC_"DSNMSG_^1_%LDA-_!SCFLG,I_!USE Q AS PONTER TO CSSCCB_^1_%SAZ_"DSNERR_*CHECK FOR CHARS_^1_%INA_"-18_^1_%SAM_"DSNOK_+LESS THAN 18 CHARS_^1DSNERR EQU_"DSNERR(*)_^1_%JMP*_!RETRY1_)ERROR - TRY AGAIN_^1DSNOK INA_"18_^1_%LDQ-_!SCNUM,I_^1_%STQ*_!GETI_^1_%RTJ_"RSEXT_!RESET PARMS_^1_%LDQ*_!GETI_^1_%JMP*_!(GETDSN)_^1GETI_!NUM_"0_^1_%SPC_"4_^1**************************€€***************_^1*_%DSNBLD- MOVE DSN TO EXTENDED_!*_^1*_/DMB, ALSO MOVE DATES_!*_^1*_%CALLING SEQUENCE_/*_^1*_+(A)= LENGTH OF DSN IN CHARS*_^1*_+(Q)= ADDRESS OF DMB EXTENT *_^1*_*RTJ_!DSNBLD_.*_^1*_+ADC_!DSN_"CHARACTER ADC *_^1*_+ADC_!CRDTE CHARACTER ADC *_^1*_+ADC_!EXDTE CHARACTER ADC *_^1*_+RETURN I % Q UNCHANGED_#*_^1*****************************************_^1_%SPC_"4_^1DSNB€€LD NOP_"0_^1_%STA*_!LDSN_+SAVE NUMBER OF CHARS TO XFER_^1_%TCA_"A_/COMPUTE TRAILING BLANKS_^1_%INA_"22_"STORE BLANKS IN REMAINDER OF DSN AND FSECTN AND FSEA_^1_%STA*_!LBFILL_^1_%RTJ*_!PARM_+GET DSN_^1_%STA*_!DSN_^1_%RTJ*_!PARM_+GET CREATION DATE_^1_%STA*_!CRDTE_^1_%RTJ*_!PARM_+GET EXPIRATION DATE_^1_%STA*_!EXDTE_^1_%ENA_"FILEID_^1_%ADD-_!EXTPTR,I_^1_%LDQ*_!TTDMB_*USE TTYDMB TO XFER€€ DATA VIA FORMAT RTN_^1_%STA-_!ARECL,Q_(SET RECORD ADDRESS_^1_%STA-_!ABLK,Q_)AND BLOCK ADDRESS_^1_%RTJ_"PRINT_+CALL PRINT TO XFER DATA TO EXTENT BLOCK_^1_%ADC_"FMT_^1_%ADC_"DTLST_^1TTDMB ADC_"TTYDM1_^1_%LDQ*_!TTDMB_^1_%LDA-_!ABUFFP,Q_#RESET THE TTYDMB_^1_%STA-_!ABLK,Q_^1_%STA-_!ARECL,Q_^1_%LDQ-_!EXTPTR,I_/RESET Q_^1_%JMP*_!(DSNBLD)_^1_%SPC_"2_^1PARM_!NOP_"0_^1_%LDA*_!(DSNBLD)_'GET€€ PARAMETER_^1_%ALS_"15_6CONVERT TO WORD ADDRESS_^1_%RAO*_!DSNBLD_^1_%JMP*_!(PARM)_#RETURN_^1DTLST EQU_"DTLST(*)_^1DSN_"NUM_"0_^1LDSN_!NUM_"0_^1LBFILL NUM_"0_^1CRDTE NUM_"0_^1EXDTE NUM_"0_^1MOTN_!ADC_"MOTION ADDRESS OF MOTION SUBROUTINE_^1_%SPC_"2_^1****************************************_^1*_!READ HEADER ONE AND TWO_+*_^1*_!CALLING SEQUENCE_2*_^1*_*(I) = DMB-1_.*_^1*_*RTJ RDHD€€12_0*_^1*_*(A) = FFFF ON RETURN = FM_!*_^1*_*(A) = + ON RET = ERROR CODE *_^1*_*(I) = DMB-1_/*_^1****************************************_^1_%SPC_"4_^1RDHD12 NOP_"0_)ENTRY_^1_%RTJ*_!RDHDR_*READ HEADER ONE_^1_%INA_"-2_^1_%SAZ_"SL0060_*FILE MARK_^1_%SET_"A_#NOT A VALID LABEL OR A FILEMARK_^1_%JMP*_!(RDHD12)_'RETURN P+1_^1SL0060 EQU_"SL0060(*)_^1_%LDA-_!ISEQN,Q_%OW CHECK FILE SEQUENCE€€ NUMBER_^1_%SUB-_!FSEQN,Q_^1_%SAZ_"SL0065_*OK CONTINUE_^1SL0064 ENA_"S007_%NOT OK_^1_%JMP*_!(RDHD12)_!RETURN ERROR FILE SEQUNCE INCORR_^1SL0065 EQU_"SL0065(*)_^1_%LDA-_!ISECTN,Q_!CHECK VOLUME NUMBERS_^1_%SUB-_!FSECTN,Q_^1_%SAZ_"SL0070_^1_%ENA_"S013_(VOLUME SEQUENCE NUMBERS WRONG_^1_%JMP*_!(RDHD12)_^1SL0070 EQU_"SL0070(*)_^1_%RTJ*_!RDHDR_#GET HEADER 2_^1_%SAZ_"SL0080_"FILE MARK - NO€€ HEARDER TWO_^1_%ENA_"SFILEM_^1_%RTJ*_!(MOTN)_^1SL0080 EQU_"SL0080(*)_^1_%CLR_"A_"NO ERROR_^1_%JMP*_!(RDHD12)_#RETURN TO P+2_^1_%SPC_"4_^1*************************************_^1* RDHDR - READ A TAPE LABEL AND_"*_^1*_)INITIALIZE THE DMB_%*_^1*_)EXTENTION ACCORDING TO_!*_^1*_)THE TYPE OF LABEL._%*_^1*_!CALL - RTJ RDHDR_^1*_)(I)=DMB-1_^1*_!RETURN -(I)=DMB-1_-*_^1*_)- (Q)=PTR. TO DMB€€_'*_^1*_.EXTENTION_)*_^1*************************************_^1_%SPC_"4_^1S8_#EQU_"S8(72)_^1RDHDR NOP_"$0_^1_%RTJ_"RLABEL_=READ THE LABEL_^1_%LDQ-_!$FF_?SAVE I_^1_%STQ*_!SAVIT_^1_%LDQ-_!EXTPTR,I_^1_%STA-_!HDRTP,Q_!SAVE HEADER TYPE IN EXTENT_^1_%LDQ-_!LABADR,Q_^1_%QLS_"1_$CONVERT TO CHARACTER ADDRESS_^1_%STQ*_!RECADR_*_^1* WRHDR - WRITE TAPE LABELS_"*_^1*_!CALL - RTJ WRHDR_+*_^1*_)(I)= DMB-1_**_^1*_)(A)= 0,HDR1 AND HDR2 *_^1*_,= 1,EOF1 AND EOF2 *_^1*_.2,EOV1 AND EOV2 *_^1*_!RETURN - (I)= DMB-€€1_(*_^1*_+(Q)= DMB EXTENTION *_^1*_>*_^1*********************************_^1_%SPC_"4_^1WRHDR NOP_"$0_^1_%STA*_!SAVTP_:SAVE TYPE CODE_^1_%LDQ-_!EXTPTR,I_7GET EXTENTION ADDR._^1_%ALS_"2_?GET INDEX INTO ALF TABLE_^1_%INA_"2_^1_%ADD*_!XTAB_;ADD ADDR. OF ALF TABLE_^1_%STA-_!LABID,Q_8SET UP DATA LIST IN THE_^1_%INA_"2_0EXTENDED DMB_^1_%STA-_!HDRTP,Q_^1_%LDA*_!SAVTP_^1_%SAN_"1_^1_%JMP*_!€€WHDR_,HEADER LABELS_^1_%JMP*_!WEO_,TRAILER LABELS_^1RETN_!EQU_"RETN(*)_^1_%ENA_"LABID_+SET UP CALLING SEQUENCE_^1_%ADD-_!EXTPTR,I_(FOR PRINT_^1_%STA*_!DATWRH_^1_%LDQ*_!LABDM1_%CHECK FOR CONVER SION_^1_%ENA_"$20_^1_%AND-_!IOBFLG,I_^1_%ADD_"=N$C040_^1_%STA-_!IOBFLG,Q_^1_%RTJ*_!SVENT_^1_%RTJ*_!ALCLAB_#ALLOCATE THE LABEL BUFFER_^1_%RTJ_"PRINT_^1_%ADC_"FORWRH_^1DATWRH ADC_"$0_^1LABDM1 A€€DC_"LABDMB-1_^1_%RTJ*_!RSEXT_^1_%RTJ*_!RLLAB_^1_%JMP*_!(WRHDR)_(RETURN_^1WHDR_!LDA-_!ISECTN,Q_!SET UP DATA LIST_^1_%STA-_!FSECTN,Q_^1_%LDA-_!ISEQN,Q_^1_%STA-_!FSEQN,Q_^1_%CLR_"A_^1_%STA-_!FBLK,Q_^1_%JMP*_!RETN_^1WEO_"LDA-_!BLKCNT,I_+SET UP DATALIST_^1_%STA-_!FBLK,Q_^1_%JMP*_!RETN_^1SAVTP NUM_"$0_^1XPUTL ADC_"PUTLOC_^1XWRITE ADC_"WRITE_^1_%SPC_"4_^1_%SPC_"4_^1*********************€€*******************_^1*_E*_^1*_!EOFLAB PROCESS EOF AND EOV LABELS *_^1*_$CALLED BY READ_1*_^1*_E*_^1****************************************_^1_%SPC_"4_^1EOFSL NOP_"0_!ENTRY TO END OF FILE PROCESSING_^1_%RTJ_"RDHDR_BREAD HEADER 1_^1_%SAN_"NFM001_^1EOFERR EQU_"EOFERR(*)_^1_%ENA_"S009_^1_%JMP*_!SERRX1_#ISSUE AN ERROR_^1NFM001 EQU_"NFM001(*)_^1_%LDA-_!BLKCNT,I_>BLK COUNT MATCH_^1_%S€€UB-_!FBLK,Q_^1_%SAZ_"BLKOK_AYES_^1_%JMP*_!EOFERR_^1BLKOK EQU_"BLKOK(*)_^1_%STA-_!BLKCNT,I_!CLEAR THE BLOCK COUNT_^1_%LDA-_!HDRTP,Q_^1_%INA_"-6_!CHECK TYPE_^1_%SAZ_"EOFLB1_1EOF TYPE_^1_%INA_"2_^1_%SAZ_"EOVLAB_0EQU TYPE_^1_%JMP*_!EOFERR_^1EOVLAB EQU_"EOVLAB(*)_^1_%RTJ_"AVSEOV_"SEQUENCE TO NEXT VOLUME_^1_%LDQ*_!XREAD_"RE-ENTER READ TO CONTINUE PROCESSSING_^1_%JMP-_!1,Q_^1EOFLB1 EQU_"€€EOFLB1(*)_^1_%ENA_"SFILEM_1SKIP OTHER EOF LABELS_^1_%RTJ*_!(MOTN2)_%CALL MOTION PROCESSOR_^1_%LDQ-_!EXTPTR,I_!GET EXTENT POINTER_^1_%RAO-_!ISEQN,Q_"INCREMENT FILE NUMBER_^1_%RTJ*_!(IHD12)_!READ NEXT SET OF HEADERS_^1_%SAM_"EOFFIN_^1_%SAZ_"EOFLB2_^1_%JMP*_!EOFERR_^1EOFLB2 EQU_"EOFLB2(*)_^1_%LDA-_!ABUFFP,I_"RELEASE BUFFER FOR LABEL_^1_%RTJ*_!(IRLALL) RESET NEW BUFFERS_^1_%RTJ*_!(GTB€€FL) GET THE NEW BUFFERS_^1_%JMP*_!(EOFSL)_^1EOFFIN EQU_"EOFFIN(*)_^1_%ENA_"SFILEB_^1_%RTJ*_!(MOTN2)_^1_%JMP*_!(EOFSL)_^1_%SPC_"4_^1****************************************_^1*_E*_^1*_!DATE ROUTINES_4*_^1*_!SDATE - SET SYSTEM DATE_+*_^1*_!EDATE - SET EXPIRATION DATE_'*_^1****************************************_^1_%SPC_"2_^1_%ENT_"SDATE,EDATE,SYSDAT,EXPDTE_^1_%SPC_"2_^1SDATE NOP_"€€0_=SET SYSTEM DATE_^1_%LDQ*_!SYSDAT_^1_%RTJ*_!DATE_^1_%JMP*_!(SDATE)_^1SDTE_!ALF_"3, 99999_^1EDTE_!ALF_"3, 99999_^1_%SPC_"2_^1EDATE NOP_"0__^1_%NUM_"$3B6F_#;_#?_^1_%NUM_"$5F3F_)REJECT_^1_%NUM_"$2DC1_#-_#A_^1_%NUM_"$2FC2_#/_#B_^1_%NUM_"$7FC3_#INVALID_#C_^1_%NUM_"$7FC4_#INVALID_#D_^1_%NUM_"$7FC5_#INVALID_#E_^1_%NUM_"$7FC6_#INVALID_#F_^1_%NUM_"$7FC7_#INVALID_#G_^1_%NUM_"$7FC8_#INVALID_#H_^1_%NUM_"$7FC9_#INVALID_#I_^1_%NUM_"$7FD1_#INVALID_#J_^1_%NUM_"€€$7CD2_#NO CODE_#K_^1_%NUM_"$2CD3_#"_#L_^1_%NUM_"$25D4_#%_#M_^1_%NUM_"$5ED5_^1_%NUM_"$7FD6_#INVALID_#O_^1_%NUM_"$3FD7_#?_#P_^1_%NUM_"$7FD8_#INVALID_#Q_^1_%NUM_"$7FD9_#INVALID_#R_^1_%NUM_"$7FE2_#INVALID_#S_^1_%NUM_"$7FE3_#INVALID_#T_^1_%NUM_"$7FE4_#INVALID_#U_^1_%NUM_"$7FE5_#INVALID_#V_^1_%NUM_"$7FE6_#INVALID_#W_^1_%NUM_"$7FE7_#INVALID_#X_^1_%NUM_"$7FE8_#INVALID_#Y_^1_%NUM_"$60E9_#NO€€ CODE_#Z_^1_%NUM_"$3A4A_)CENT SIGN_@C_^1_%NUM_"$23FA_##_#FIELD SEPARATOR_^1_%NUM_"$7FCC_#INVALID_#]_^1_%NUM_"$276D_^1_%NUM_"$3D5F_#=_^1_%NUM_"$2279_#"_^1***_#THE FOLLOWING ARE LOWER CASE_#***_^1_%NUM_"$7F81_*A_^1_%NUM_"$6182_#A_#B_^1_%NUM_"$6283_"B_#C_^1_%NUM_"$6384_"C_#D_^1_%NUM_"$6485_"D_#E_^1_%NUM_"$6586_"E_#F_^1_%NUM_"$6687_"F_#G_^1_%NUM_"$6788_"G_#H_^1_%NUM_"$6889_"H_#I_^1_%NU€€M_"$6991_"I_#J_^1_%NUM_"$7F92_"INVALID_#K_^1_%NUM_"$7F93_"INVALID_#L_^1_%NUM_"$7F94_"INVALID_#M_^1_%NUM_"$7F95_"INVALID_#N_^1_%NUM_"$7F96_"INVALID_#O_^1_%NUM_"$7F97_"INVALID_#P_^1_%NUM_"$7F98_"INVALID_#G_^1_%NUM_"$6A99_"J_#R_^1_%NUM_"$6BA2_"K_#S_^1_%NUM_"$6CA3_"1_#T_^1_%NUM_"$6DA4_"M_#U_^1_%NUM_"$6EA5_"N_#V_^1_%NUM_"$6FA6_"O_#W_^1_%NUM_"$70A7_"P_#X_^1_%NUM_"$71A8_"Q_#Y_^1_%NUM_"$72€€A9_"R_#Z_^1_%NUM_"$7FC0_"INVALID_#(_^1_%NUM_"$7F6A_"INVALID_^1_%NUM_"$7FD0_"INVALID_#)_^1_%NUM_"$7FA1_"INVALID_^1_%NUM_"$7F3E_"INVALID_#INVALID_^1_%NUM_"$7F3E_"INVALID_#INVALID_^1_%NUM_"$7F3E_"INVALID_#INVALID_^1_%NUM_"$7E3E_"NO CODE_#INVALID_^1_%NUM_"$733E_"S_#INVALID_^1_%NUM_"$743E_"T_#INVALID_^1_%NUM_"$753E_"U_#INVALID_^1_%NUM_"$763E_"V_^1_%NUM_"$773E_"W_^1_%NUM_"$783E_"X_^1_%NU€€M_"$793E_"Y_^1_%NUM_"$7A3E_"Z_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_"INVALID CODES_^1_%NUM_"$7F3E_#INVALID €€CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7F3E_#INVALID CODES_^1_%NUM_"$7B3E_#NO CODE_#INVALID_^1_%NUM_"$413E_#A_#INVALID_^1_%NUM_"$423E_#B_€€$INVALID_^1_%NUM_"$433E_#C_#INVALID_^1_%NUM_"$443E_#D_#INVALID_^1_%NUM_"$453E_#E_#INVALID_^1_%NUM_"$463E_#F_#INVALID_^1_%NUM_"$473E_#G_#INVALID_^1_%NUM_"$483E_#H_#INVALID_^1_%NUM_"$493E_#I_#INVALID_^1_%NUM_"$7F3E_#INVALID_#INVALID_^1_%NUM_"$7F3E_#]_#INVALID_^1_%NUM_"$5D3E_#]_#INVALID_^1_%NUM_"$7F3E_#INVALID_#INVALID_^1_%NUM_"$3C3E_#END OF LINE_#INVALID_^1_%NUM_"$7F3E_#INVALID_#INVA€€LID_^1_%NUM_"$7D3E_0INVALID_^1_%NUM_"$4A3E_#J_$INVALID_^1_%NUM_"$4B3E_#K_#INVALID_^1_%NUM_"$4C3E_#L_#INVALID_^1_%NUM_"$4D3E_#M_#INVALID_^1_%NUM_"$4E3E_#N_#INVALID_^1_%NUM_"$4F3E_#O_#INVALID_^1_%NUM_"$503E_#P_#INVALID_^1_%NUM_"$513E_#Q_#INVALID_^1_%NUM_"$523E_#R_#INVALID_^1_%NUM_"$7F3E_%INVALID CODE_^1_%NUM_"$7F3E_%INVALID CODE_^1_%NUM_"$7F3E_%INVALID CODE_^1_%NUM_"$7F3E_%INVALID CO€€DE_^1_%NUM_"$7F3E_%INVALID CODE_^1_%NUM_"$7F3E_%INVALID CODE_^1_%NUM_"$7F3E_%INVALID CODE_^1_%NUM_"$7F3E_%INVALID CODE_^1_%NUM_"$533E_#S_#INVALID_^1_%NUM_"$543E_#T_#INVALID_^1_%NUM_"$553E_#U_#INVALID_^1_%NUM_"$563E_#V_#INVALID_^1_%NUM_"$573E_#W_#INVALID_^1_%NUM_"$583E_#X_#INVALID_^1_%NUM_"$593E_#Y_#INVALID_^1_%NUM_"$5A3E_#Z_#INVALID_^1_%NUM_"$7F3E_#INVALID_#INVALID_^1_%NUM_"$7F3E_#€€]_#INVALID_^1_%NUM_"$3E3E_#>_#INVALID_^1_%NUM_"$7F3E_#INVALID_#INVALID_^1_%NUM_"$7F3E_#INVALID_#INVALID_^1_%NUM_"$7F3E_#INVALID_#INVALID_^1_%NUM_"$303E_#0_#INVALID_^1_%NUM_"$313E_#1_#INVALID_^1_%NUM_"$323E_#2_#INVALID_^1_%NUM_"$333E_#3_#INVALID_^1_%NUM_"$343E_#4_#INVALID_^1_%NUM_"$353E_#5_#INVALID_^1_%NUM_"$363E_#6_#INVALID_^1_%NUM_"$373E_#7_#INVALID_^1_%NUM_"$383E_#8_#INVALID_^1_%€PNUM_"$393E_#9_#INVALID_^1_%NUM_"$5C3E_#FIELD SEPARATOR_#INVALID_^1_%END_"DZ_^__PPALCBUF CSY/ P€1_%NAM ALCBUF_'SUP 1.0+CYB_^1*****************************************************_^1*_R*_^1*_!ALCBUF - CONTAINS TWO SUBROUTINES TO ALLOCATE_!*_^1*_+AND RELEASE CORE FROM THE END OF THIS *_^1*_+SEGMENT TO THE HIGHEST UNUSED AREA OF *_^1*_+CORE/_A*_^1*_R*_^1*_!CALLING SEQUENCES:_=*_^1*_"GETBUF - (A) = NUMBER OF WORDS REQUIRED_'*_^1*_,RTJ GETBUF_:*_^1*_,(Q) = ADDRESS OF FIRST WOR€€D IF_'*_^1*_,(A) = POSITIVE. IF (A) = NEGATIVE_"*_^1*_2THEN THE REQUEST COULD NOT BE_!*_^1*_2FULFILLED_6*_^1*_R*_^1*_"RELBUF - (A) = THE ADDRESS OF THE AREA OBTAINED*_^1*_2BY A GETBUF CALL. NOTE - THIS *_^1*_2MUST BE THE EXACT SAME ADDRESS *_^1*_2RETURNED IN Q BY A RJT GETBUF. *_^1*_,RTJ RELBUF_:*_^1*_R*_^1*_!USE OF ALCBUF:_A*_^1*_"ALCBUF MUST BE THE LAST MODULE LOADED IF IT €€IS *_^1*_"TO FUNCTION PROPERLY. NOTE THAT A REQUEST FOR *_^1*_"SPACE MAY NOT BE SATISFIED AND THAT TO RELEASE *_^1*_"CORE IS A MUST IF THE MODULE IS TO FUNCTION_"*_^1*_"EFFICIETLY._C*_^1*_R*_^1*_!VERSION: PRELIMINARY_;*_^1*_!DATE: DEC 13, 1972_=*_^1*_!AUTHOR: FODOR_A*_^1*_!SYSTEM: 1700SC TAPE SCOPE OR MSOS_-*_^1*_R*_^1*****************************************************_^1_%SPC€€_"4_^1_%EXT_"SYSERR_^1C0_#EQU_"C0(32)_^1RELBUF NOP_"0 ENTRY TO RELEASE BUFFER_^1_%INA_"-4 REDUCE ADDRESS TO OBTAIN PROPER POINTERS_^1REL000 EQU_"REL000(*)_!REENTRY FOR COMBINING FREE AREAS_^1_%STA*_!REQLN_!SAVE THE POINTER TO THE BLOCK TO RELEASE_^1_%TRA_"Q_^1_%LDQ-_!ASON,Q GET ADDRESS OF SON IN Q_^1_%SUB-_!AFATHR,Q CHECK IF PROPER FATHER - MUST EQUAL (A)_^1_%SAZ_"REL050_^1_%ENA_"€€C0_^1_%RTJ_"SYSERR_^1REL050 EQU_"REL050(*)_^1_%LDA-_!ASELF,Q IS SON FREE?_^1_%SAP_"REL060 YES CONCATONATE FREE AREAS_^1_%JMP*_!REL100 NO SON IS BUSY IGNORE_^1REL060 EQU_"REL060(*) COMBINE AREAS_^1_%LDA-_!ASON,Q GET SON'S SON_^1_%SAZ_"REL100 DOES SON HAVE A SON_^1_%LDQ*_!REQLN YES SO GET RID OF SON AND GIVE HIM A NEW FATHER_^1_%STA-_!ASON,Q_^1_%EAQ_"A_^1_%EAQ_"Q_^1_%EAQ_"A SWAP A AN€€D Q_^1_%STA-_!AFATHR,Q SON ADOPTED AND OLD SON DESTROYED_^1* FORWARD CHAIN IS NOW RESET_^1_%SPC_"4_^1REL100 EQU_"REL100(*)_^1_%LDQ*_!REQLN CHECK BACK CHAIN FOR PREVIOUS FREE AREA_^1_%STQ-_!ASELF,Q CLEAR ACTIVE FLAG AS REQUESTED_^1_%RAO-_!ASELF,Q SET LOCATION TO ITSELF_^1_%LDQ-_!AFATHR,Q CHECK FATHER_^1_%SQZ_"REL110 SKIP IF NO FATHER - IE START OF TREE_^1_%LDA-_!ASELF,Q IS FATHER FR€€EE_^1_%SAM_"REL110 NO CORE IS NOW RELEASED AND COMBINED INTO MAJOR REG_^1_%INA_"-1 SET LOCATION VALUE TO ITSELF -1_^1_%JMP*_!REL000 PROCESS FATHER LIKE SON TO DELETE SON_^1REL110 EQU_"REL110(*) FINISHED_^1_%JMP*_!(RELBUF)_^1************************************_^1*_!DATA AREAS AND CONSTANTS FOR_!*_^1*_!RELBUF AND GETBUF_-*_^1************************************_^1_%SPC_"4_^1CHAINA €€ADC_"FIRST-1 POINTER TO FIRST AVAILABLE LOCATION_^1CHAINB NUM_"0 POINTER SET ON INITIALIZATION TO CHAINA+INDBIT_^1CHAIN NUM_"0 USED TO LOCATE AN ENTRY_^1REQLN NUM_"0 PARAMETER HOLD WORD FOR RELBUFF AND GETBUF_^1FATHER NUM_"0 POINTER TO FATHER_^1INDBIT NUM_"$8001_^1_%SPC_"4_^1* EQUATES USED IN ALCBUF_^1_%EQU_"ASELF(1)_^1_%EQU_"ASON(ASELF+1)_^1_%EQU_"AFATHR(ASON+1)_^1*************€€*************************_^1*_!GETBUF ROUTINE_2*_^1**************************************_^1GETBUF NOP_"0 ENTRY GETBUF_^1_%INA_"3 RESET WORD COUNT TO INCLUDE POINTER WORDS_^1_%STA*_!REQLN SAVE_^1GET040 EQU_"GET040(*) REENTER HERE AFTER INITIALIZATION_^1_%LDA*_!CHAINB_!GET POINTER TO FIRST FATHER_^1_%STA*_!CHAIN_^1_%SAN_"GET050 IS THIS THE FIRST REQUEST_^1_%JMP*_!GETINT YES INITIALI€€ZE CORE_^1GET050 EQU_"GET050(*) SEARCH FAMILY TREE FOR UNUSED BLOCK_^1_%LDQ*_!CHAIN_M**65K**_^1QLOP_!SQP_"OTT_O**65K**_^1_%ADQ-_!$11_O**65K**_^1_%LDQ-_!($22),Q_K**65K**_^1_%JMP*_!QLOP_N**65K**_^1OTT_"LDQ-_!($22),Q_K**65K**_^1_%INQ_"-1_^1_%LDA-_!ASON,Q FIND END OF BLOCK_^1_%SUB-_!ASELF,Q COMPUTE NUMBER OF WORDS IN BLOCK_^1_%INA_"1_^1_%SAM_"GET070 IS THERE ANY ROOM ?_^1GET060 EQU_"GE€€T060(*) YES THER IS_^1_%SUB*_!REQLN IS BLOCK LARGE ENGOUGH TO FULFILL REQUEST?_^1_%SAP_"GET080 SKIP IF YES_^1_%LDA-_!ASON,Q NO RESTART CHIN TO FIND NEXT AVAILABLE BLOCK_^1_%SAZ_"GET070 IS THIS THE END OF CORE?_^1_%ADD*_!INDBIT NO SET NEW CHAIN_^1_%STA*_!CHAIN_^1_%JMP*_!GET050 NOW TRY AGAIN_^1_%SPC_"4_^1GET070 EQU_"GET070(*)_^1_%ENQ_"0 NO MORE SPACE_^1_%ENA_"-1 SET A MINUS TO INDIC€€ATE REQUEST NOT FULFFILLED_^1_%JMP*_!(GETBUF)_^1_%SPC_"4_^1GET080 EQU_"GET080(*)_^1_%INA_"-10 IF BLOCK LENGTH EXCEEDS REQUEST SIZE BY LESS_^1_%SAP_"GET090 THAN 10 WORDS USE ENTIRE BLOCK_^1_%JMP*_!GET100_^1GET090 EQU_"GET090(*) CREATE AND ADOPTED SON AND RETHREAD ORIGINAL_^1_%LDA-_!ASON,Q SON TO ADOPTED SON (A POINTS TO ORIG SON)_^1_%STQ*_!FATHER SAVE TEMPORTARILY_^1_%ADQ*_!REQLN AD€€OPT SON (Q POINTES TO ADOPTED SON -1)_^1_%STQ-_!ASELF,Q RETHREAD ADOPTED SON TO SELF_^1_%RAO-_!ASELF,Q_^1_%STA-_!ASON,Q RETRHEAD ADOPTED SON TO BE FATHER OF ORIG SON_^1_%EAQ_"Q_^1_%EAQ_"A SWAP A AND Q_^1_%EAQ_"Q_^1_%STA-_!AFATHR,Q THREAD SON TO ADOPTED SON_^1* FORWARD CHAIN NOW SET_^1_%LDQ*_!FATHER RESET POINTER TO ORIGINAL_^1_%STA-_!ASON,Q THREAD FATHER TO ADOPTED SON_^1_%TRA_"Q Q€€ POINTES TO ADOPTED SON_^1_%LDA*_!FATHER_^1_%STA-_!AFATHR,Q THREAD ADOPTD SO TO FATHER_^1_%TRA_"Q REST Q TO FATHER_^1GET100 EQU_"GET100(*)_^1_%LDA-_!ASON,Q THREAD FATHER TO SON AND SET_^1_%ADD*_!INDBIT BLOCK IN USE FLAG (IE SET FOR MULTIPLE INDIRECT)_^1_%STA-_!ASELF,Q STORAGE NOW ACTIVATED AND ASSIGNED_^1* (Q) = ADDRESS OF BLOCK -4 A = POSITIE_^1_%INQ_"4 COMPUTE USER ADDRESS_^1_%JM€€P*_!(GETBUF)_^1GETINT EQU_"GETINT(*) INITIALIZE GETBUF ROUTINE_^1_%LDQ*_!CHAINA GET ADDRESS OF FIRST BLOCK -1_^1_%LDA-_!$F6 GET HIGHEST UNPROTECTED LOCATION + 1_^1_%INA_"-4_^1_%STA-_!ASON,Q SET POINTERFROM FIRST TO SON_^1_%TRA_"Q SWAP REGISTERS_^1_%LDA*_!CHAINA_^1_%STQ-_!ASELF,Q SET LAST BLOCK_^1_%RAO-_!ASELF,Q_^1_%STA-_!AFATHR,Q SET FATHER THREAD_^1_%ENA_"0_^1_%STA-_!ASON,Q SET EN€€D OF FAMILY TREE_^1_%LDQ*_!CHAINA_^1_%STA-_!AFATHR,Q SET BEGINNE OF FAMILY TREE_^1_%STQ-_!ASELF,Q_^1_%RAO-_!ASELF,Q_^1_%ADQ*_!INDBIT_^1_%STQ*_!CHAINB SET CHAIN POINTERS_^1_%JMP*_!GET040 INITIALIZATION COMPLETE_^1_%SPC_"4_^1*****************************************_^1* FIRST AVAILABLE CORE BLOCK STARTS_#*_^1* HERE........................._(*_^1***************************************€^**_^1_%SPC_"2_^1FIRST ADC_"FIRST-1_^1_%NUM_"0_^1_%NUM_"0_^1_%ENT_"RELBUF,GETBUF_^1_%END_]_^__^PTP CSY/ P€1_%NAM TP_^1*_]_^1*_$LOAD TAPE-TO-PRINT INTO ALLOCATABLE_^1*_$IF NOT ALREADY IN CORE_^1*_]_^1SLDIRY EQU SLDIRY($EB)_!ADDRESS OF SYSTEM DIRECTORY_^1CORED EQU CORED($E7)_"LENGTH OF CORE RESIDENT DIRECTORY_^1DIRSIZ EQU DIRSIZ($E6)_!SIZE OF SYSTEM DIRECTORY_^1CORESZ EQU CORESZ(4100) CORE SIZE OF TAPE-TO-PRINT_^1DFLTBF EQU DFLTBF(100)_!DEFAULT BUFFER SIZE (200 BYTES)_^1LPMASK EQ€€U LPMASK($2)_^1START EQU START(*)_^1*_]_^1*_$SEARCH SYSTEM DIRECTORY FOR TAPE-TO-PRINT_^1*_]_^1_%STQ* PARADR_'SAVE ADDRESS OF PARAMETER STRING_^1_%RTJ* ABS_^1ABS_"NUM 0_^1_%LDA* ABS_^1_%INA -2_^1_%STA* ABS_*SET ABSOLUTE ADDRESS OF *TP_^1_%LDA- SLDIRY_'GET START OF DIRECTORY_^1_%ADD- CORED_(POINT TO START OF MASS FILE DIRECTORY_^1_%STA* DIRADR_^1_%LDA- DIRSIZ_^1_%SUB- CORED_^1_€€%INA -6_^1_%TRA Q_^1SCRBK LDA* (DIRADR),Q_"GET CORE_!ADDRESS_^1_%EOR* ABS_^1_%SAZ SCR02_(IS IT *TP_^1_%INQ -7_+NO, TRY AGAIN_^1_%SQM SCR01_(IS IT END OF TABLE_^1_%JMP* SCRBK_(NO, GET NEXT ENTRY_^1SCR01 JMP* EXT05_(YES, ERROR_^1SCR02 STA* (DIRADR),Q_"FOUND, CLEAR *TP ADDRESS FROM SYSDIR_^1_%INQ 7_^1_%LDA* (DIRADR),Q_"LOAD CORE ADDRESS OF T-T-P_^1_%SAZ SCR03_(IS IT IN CORE_€€^1_%TRA Q_,YES_^1_%INQ 15_+VARIES WITH MODMOD PRECODE_^1_%LDA- 4,Q_*GET CONSOLE ACTIVE FLAG_^1_%SAN SCR10_(IS IT ACTIVE_^1_%JMP* SCR13_(YES, GO TO SLEEP_^1SCR10 CLR A_^1_%STA- 4,Q_*CLEAR CONSOLE FLAG_^1_%INQ 2_^1_%STQ* SCR12+2_%SET SCHDLE ADDRESS_^1SCR12 SCHDLE SCR12,3_"SCHEDULE CONSOLE RESTART_^1_%JMP* SCR13_(FREE *TP_^1SCR03 EQU SCR03(*)_$NOT IN CORE_^1_%INQ 3_,POINT T€€O LENGTH_^1_%LDA* PARADR_'GET PARAMETER ADDRESS_^1_%SAN SCR15_(IS IT ZERO_^1_%LDA* DFALT_(YES, SET DEFAULT_^1_%STA* EXTC2_^1_%JMP* SCR16_^1SCR15 RTJ* EXTRA_(NO, EXTRACT BUFFER SIZE_^1SCR16 ADD* SIZE_^1_%STA* (DIRADR),Q_"SET SIZE_^1_%INQ -4_+CALCULATE ORDINAL_^1_%STQ* SHD+2_^1_%LDA* EXTC2_^1_%INQ 10_^1_%STA* (DIRADR),Q_^1_%INQ -10_^1SHD_"SYSCHD 0,3_^1SCR13 LDA* ABS_^1_%STA* R€€ELAD_^1_%RTJ- ($F4)_^1_%NUM $1801_(RELEAS_^1RELAD NUM 0_^1SIZE_!ADC CORESZ_'SIZE OF CORE RESIDENT TAPE TO PRINT_^1DIRADR NUM 0_,ADDRESS OF SYSTEM DIRECTORY_^1PARADR NUM 0_,PARAMETER INPUT STRING_^1DFALT ADC DFLTBF_^1QSAVE NUM 0_^1CHARFG NUM 0_,HIGH/LOW BYTE FLAG_^1EXTC1 NUM 0_^1EXTC2 NUM 0_^1ERRMES ALF 4,MI ERROR_^1*_]_^1*_$EXTRACT BUFFER SIZE_^1*_]_^1EXTRA NUM 0_€€^1_%STQ* QSAVE_^1EXTBK LDQ* PARADR_^1_%LDA* CHARFG_'EXTRACT DECIMAL NUMBER_^1_%SAN EXT01_^1_%RAO* CHARFG_'HIGH ORDER BYTE_^1_%LDA- 2,Q_^1_%ARS 8_^1_%AND- LPMASK+8_^1_%JMP* EXT02_^1EXT01 EQU EXT01(*)_$LOW ORDER BYTE_^1_%CLR A_^1_%STA* CHARFG_^1_%LDA- 2,Q_^1_%RAO* PARADR_^1_%AND- LPMASK+8_^1EXT02 INA -$40_^1_%SAM EXT03_^1_%JMP* EXTND_(END OF INPUT_^1EXT03 INA $10_^1_%SAP €€EXT04_^1_%JMP* EXTND2_'END OF INPUT_^1EXT04 CLR Q_^1_%STA* EXTC1_^1_%ENA 10_^1_%MUI EXTC2_^1_%ADD* EXTC1_^1_%STA* EXTC2_^1_%JMP* EXTBK_^1EXTND2 INA -$10_^1EXTND ADD =N$FF40_^1_%SAN EXT05_^1_%LDA* EXTC2_^1_%SUB* DFALT_^1_%SAP EXT06_^1_%JMP* EXT05_^1EXT06 ADD* DFALT_^1_%INA 1_^1_%ARS 1_^1_%STA* EXTC2_(CONVERT BYTE COUNT TO WORD COUNT_^1_%LDQ* QSAVE_^1_%JMP* (EXTRA)_^1EXT0€R5 FWRITE $FD,0,ERRMES-*+5,4,A,0,3,I,X_^1_%JMP* SCR13_(RELEASE CORE_^1_%END_]_^__RPMODMOD CSY/ P€1_%NAM MODMOD_^1*_]_^1*_$P R O G R A M_!M O D M O D_^1*_]_^1*_$TAPE-TO-PRINT MODFICATION MODE_^1*_]_^1START EQU START(*)_^1_%JMP* INIT_^1_%JMP* RCOMST+2_$RESTART CONSOLE_^1*_]_^1*_$LOAD RUN-MODE PROGRAM_^1*_]_^1RCOMIO FREAD $C2,RCOMST-*+1,RCOMST-*+5,4050,B,0,3,I,X_^1_%NUM 0_^1RCOMSE NUM 0_^1_%JMP- (ADISP)_^1MODORD NUM 0_,ORDINAL OF MODMOD_^1RUNLIB NUM 0_,SECTOR FOR RUNMOD_^1€€TABLIB NUM 0_,SECTOR NUMBER OF LIBRARY_^1RCOMST EQU RCOMST(*)_#STADT OF RUNMOD_^1RCOM_!LDQ* MODORD_^1_%ADQ- $EB_^1_%INQ 7_^1_%JMP* RCOMA_^1_%NUM 0_,DUMMY CONSOLE FLAG_^1RCOMA LDA- 6,Q_^1_%STA* RCOMSE_'SECT SECTOR ADDRESS FOR RUNMOD_^1_%JMP* RCOMIO_'READ RUNMOD INTO CORE_^1INIT_!EQU INIT(*)_^1_%STQ* MODORD_'SAVE ORDINAL OF CURRENT MODULE_^1_%LDA* MODORD_^1_%ADD- $EB_^1_%TRA Q€€_^1_%LDA- 6,Q_^1_%STA* LIBSEC_^1_%LDA =XENDMOD-START+1_+RESET SIZE IN SYSDIR_^1_%STA- 4,Q_^1_%LDA* MODORD_^1_%INA 14_^1_%ADD- $EB_^1_%TRA Q_^1_%LDA- 6,Q_*LOAD SECTOR NUMBER OF LIBRARY_^1_%STA* TABLIB_^1_%INQ -7_^1_%LDA- 6,Q_^1_%STA* RUNLIB_^1LTA06 EQU LTA06(*)_^1*_]_^1*_$ABSOLUTIZE INDIRECTS_^1*_]_^1_%RTJ* ABS_^1ABS_"NUM 0_^1_%LDA* ABS_^1_%SUB =XABS-START_^1_%STA* ABS_^1_%E€€NQ 12_^1ABSB_!LDA ITRUE,Q_^1_%ADD* ABS_^1_%STA ITRUE,Q_^1_%INQ -1_^1_%SQM ABSO_^1_%JMP* ABSB_^1ABSO_!EQU ABSO(*)_^1_%JMP MAIN_)EXECUTE MODIFICATION MODE_^1LIBSEC NUM 0_^1*_]_^1*_$PUT JOB DISCRIPTION IN LIBRARY_^1*_]_^1CJD_"EQU CJD(*)_^1_%LDA TABNAM_^1_%STA* CJD01_^1_%LDA TABNAM+1_^1_%STA* CJD01+1_^1_%RTJ SRJB_^1CJD01 NUM 0,0_^1_%SQM CJD02_^1_%JMP* CJD21_(JOB NAME FOU€€ND_^1CJD02 ENQ JBSZ_)JOB NAME NOT FOUND_^1CJD09 LDA* CJDBF,Q_%LOOK FOR EMPTY SLOT_^1_%SAZ CJD10_(IS THIS SLOT EMPTY_^1_%INQ -2_+NO, LOOK AGAIN_^1_%SQM CJD11_(IS IT END OF DIRECTORY_^1_%JMP* CJD09_(NO_^1CJD10 EQU CJD10(*)_$EMPTY SLOT_^1_%JMP* CJD21_^1CJD11 RTJ RECUR_(NO ROOM IN TABLE_^1_%VFD N1/0,N7/14,X8/ERROR5-ERROR5/96*96_^1_%JMP RET_^1CJD21 EQU CJD21(*)_$ADD JOB TO€€ LIBRARY_^1_%LDA TABNAM_^1_%STA* CJDBF,Q_%PUT NEW NAME IN DIRECTORY_^1_%LDA TABNAM+1_^1_%STA* CJDBF+1,Q_^1_%QRS 1_^1_%STQ* CJDBB_(SAVE JOB ORDINAL_^1_%LDA* CJDBA_^1_%RTJ STAB_)COPY DIRECTORY TO DISK_^1_%ALF 2,JB01_^1_%LDA* CJDBB_(GET JOB ORDINAL_^1_%INA -7_^1_%SAM CJD24_(IS JOB IN FIRST BLOCK_^1_%JMP* CJD30_(NO_^1CJD24 INA 7_,YES_^1_%MUI =N9_^1_%INA JBS*2_(POINT PAST DIR€€ECTORY_^1_%ADD* CJDBA_(ORDINAL PLUS BUFFER ADDRESS_^1_%STA* CJDBB_^1_%LDA =N$3031_%SET TABLE SAVE FOR BLOCK 1_^1_%STA* CJD27+1_^1CJD23 ENQ 8_,MOVE ENTRY INTO BLOCK_^1CJD25 LDA TABNAM+2,Q_^1_%STA* (CJDBB),Q_^1_%INQ -1_^1_%SQM CJD26_^1_%JMP* CJD25_^1CJD26 LDA* CJDBA_^1_%RTJ STAB_^1CJD27 ALF 2,JB01_^1_%JMP RET_^1CJD30 LDA* CJDBA_(JOB IS IN SECOND BLOCK_^1_%RTJ LTAB_)LOAD€€ IT_^1_%ALF 2,JB02_^1_%LDA* CJDBB_(GET JOB ORDINAL_^1_%INA -7_^1_%MUI =N9_^1_%ADD* CJDBA_^1_%STA* CJDBB_(ABSOLUTE ADDRESS FOR ENTRY_^1_%LDA =N$3032_^1_%STA* CJD27+1_%SET TO WRITE BLOCK 2_^1_%JMP* CJD23_(MOVE ENTRY INTO BLOCK AND WRITE TO DISK_^1CJDBA NUM 0_,BUFFER ADDRESS (ABSOLUTE)_^1CJDBB NUM 0_^1CJDBF BZS CJDBF(96)_^1JBS_"EQU JBS(16)_^1JBSZ_!EQU JBSZ(JBS*2-2)_^1*_]_^€€1*_$CHECK FOR INVALID TABLE TO LIST_^1*_]_^1INVTAB EQU INVTAB(*)_^1_%LDA TABSIZ_'GET TABLE SIZE_^1_%SAZ INVT2_^1_%JMP FALSE_(IF VALID TABLE, RETURN FALSE_^1INVT2 JMP RET_*IF INVALID, RETURN TRUE_^1*_]_^1*_$CHECK FOR TRAIN IMAGE IN CORE_^1*_]_^1CLPT_!LDA TRAN_^1_%EOR- LPMASK+15_^1_%SAZ CLPT2_^1_%JMP FALSE_(RETURN FALSE IF LINKED_^1CLPT2 JMP RET_*RETURN TRUE IF NOT LINKED_€€^1*_]_^1*_$MOVE TRAIN IMAGE INTO DRIVERS BUFFER_^1*_]_^1_%EXT TRAIN_^1ELPT_!EQU ELPT(*)_^1_%LDA* TRAN_)GET TRAIN ADDRESS_^1_%STA* ELPTC3_^1_%LDA TPST_)SET UP TABLE NAME_^1_%STA* ELPT01_^1_%LDA TPST+1_^1_%STA* ELPT01+1_^1_%LDA ABS_^1_%ADD =XCJDBF-START_^1_%STA* ELPTC1_'SAVE BUFFER ABSOLUTE ADDRESS_^1_%RTJ LTAB_)LOAD FIRST BLOCK OF PRINT TRAIN IMAGE_^1ELPT01 NUM 0_^1_%NUM 0_€€^1_%CLR A_^1_%SUB CJDBF_(LOAD NEGATIVE BYTE COUNT_^1_%SAN ELPT09_%CHECK FOR EMPTY TABLE_^1_%JMP FALSE_^1ELPT09 EQU ELPT09(*)_^1_%ARS 1_^1_%STA* ELPTC2_'SAVE AS WORD COUNT_^1_%RAO* ELPTC1_'POINT AT FIRST DATA WORD_^1_%RAO* ELPTC1_^1_%ENQ 94_^1ELPT02 LDA* (ELPTC1),Q_"MOVE FIRST BLOCK INTO TRAIN_^1_%STA* (ELPTC3),Q_^1_%RAO* ELPTC2_^1_%INQ -1_^1_%SQM ELPT03_'END OF FIRST BLOCK€€ YET_^1_%JMP* ELPT02_'NO_^1ELPT03 LDA* ELPT01+1_$YES, SET UP NAME OF SECOND BLOCK_^1_%STA* ELPT04_^1_%LDA* ELPTC1_^1_%INA -2_^1_%STA* ELPTC1_^1_%RTJ LTAB_)LOAD SECOND BLOCK_^1_%ALF 1,XX_^1ELPT04 NUM 0_^1_%ENQ 94_+MOVE SECOND BLOCK INTO TRAIN_^1ELPT05 LDA* (ELPTC1)_^1_%STA* (ELPTC3),Q_^1_%INQ 1_^1_%RAO* ELPTC1_^1_%LDA* ELPTC2_^1_%SAZ ELPT06_'IS IT END OF BLOCK_^1_%RAO* ELPTC2€€_'NO, MOVE ANOTHER WORD_^1_%JMP* ELPT05_^1ELPT06 JMP RET_*YES, GO HOME_^1ELPTC1 NUM 0_^1ELPTC2 NUM 0_^1ELPTC3 NUM 0_^1TRAN_!ADC TRAIN_^1*_]_^1*_$DUMMY WRITE TO PRINTER_^1*_]_^1DWRT_!LDA VAL_^1_%AND- LPMASK+9_^1_%STA VAL_^1_%LDA* DWR+4_^1_%AND- NZERO+9_^1_%EOR VAL_^1_%STA* DWR+4_^1DWR_"WRITE 0,DWRCOM-*+1,DBUF-*+5,2,B,0,3,A,X_^1_%JMP- ($EA)_^1DBUF_!NUM $1B00_^1_%NUM $1B40_^€€1DWRCOM JMP RET_^1*_]_^1*_$SEARCH DIRECTORY FOR JOB NAME_^1*_]_^1*_*Q MINUS MEANS NOT FOUND_^1*_*Q POSITIVE MEANS Q = JOB INDEX_^1*_]_^1SRJB_!NUM 0_^1_%RTJ* SR01_)ABSOLUTIZE BUFFER ADDRESS_^1SR01_!NUM 0_^1_%LDA* (SRJB)_^1_%STA* SRT01_^1_%RAO* SRJB_^1_%LDA* SR01_^1_%SUB =XSR01-CJDBF_^1_%STA* SR01_^1_%STA CJDBA_(SAVE BASE ADDRESS_^1_%RTJ LTAB_)LOAD JOB DIRECTORY_^1_%ALF 2,JB01€€_^1_%ENQ JBSZ_^1SR02_!LDA CJDBF,Q_%SEARCH FOR JOB NAME_^1_%EOR* SRT01_^1_%SAZ SR03_^1_%JMP* SR04_)NOT A MATCH ON FIRST WORD_^1SR03_!LDA CJDBF+1,Q_^1_%EOR* (SRJB)_^1_%SAZ SR05_^1SR04_!INQ -2_+NOT A MATCH ON EITHER WORD_^1_%SAM SR08_)IS IT END OF DIRECTORY_^1_%JMP* SR02_)NO, CHECK NEXT ENTRY_^1SR05_!RAO* SRJB_)JOB NAME FOUND_^1_%JMP* (SRJB)_^1SR08_!ENQ -1_+JOB NAME NOT FOUND_€€^1_%JMP* SR05_^1SRT01 NUM 0_^1*_]_^1*_%LIST JOB DIRECTORY_^1*_]_^1LJD_#EQU LJD(*)_^1_'RTJ SRJB_)LOAD DIRECTORY_^1_'ALF 2,XXXX_^1_'ENQ JBSZ_^1LJDB_"LDA CJDBF,Q_^1_'SAN LJD02_^1LJDAG_!INQ -2_^1_'SQM LJD01_^1_%JMP* LJDB_^1LJD01 JMP RET_^1LJD02 STA OS_+JOB ENTRY_^1_%LDA CJDBF+1,Q_^1_%STA OS+1_^1_%ENA 4_^1_%STA OSIZ_^1_%STQ* LJDC1_^1_%RTJ RECUR_^1_%VFD N1/1,X15/PUT-*_^1_%LDQ€€* LJDC1_^1_%JMP* LJDAG_^1LJDC1 NUM 0_^1*_]_^1*_$DELETE JOB DEFINITION_^1*_]_^1DJD_"EQU DJD(*)_^1_%LDA LIL_^1_%INA -5_^1_%SAM DJD1_^1DJDEX JMP RET_^1DJD1_!LDA LI_^1_%STA* DJD2_^1_%LDA LI+1_^1_%STA* DJD2+1_^1_%RTJ SRJB_^1DJD2_!NUM 0,0_^1_%SQP DJD3_^1_%JMP* DJDEX_(NAME NOT FOUND_^1DJD3_!CLR A_,NAME FOUND_^1_%STA CJDBF,Q_%CLEAR NAME_^1_%LDA SR01_^1_%RTJ STAB_)SAVE DIRE€€CTORY_^1_%ALF 2,JB01_^1_%JMP* DJDEX_^1*_]_^1*_$SET JOB DISCRIPTION FOR DUMP_^1*_]_^1DUMP_!EQU DUMP(*)_^1_%LDA =N$2020_^1_%STA JCCNM_^1_%STA JCCNM+1_^1_%ENA 32_^1_%STA JTRCS_(SET RECORD SIZE TO 32_^1_%LDA =N1024_^1_%STA JTBLS_(SET BLOCK SIZE TO 1024_^1_%LDA =N$C180_^1_%STA JSTAT_(SET DUMP, AND FIXED BITS_^1_%JMP RET_^1*_]_^1*_]_^1*_$STORE TABLE_^1*_]_^1STB_"LDA TPST_^1_€€%STA* STB1_^1_%LDA TPST+1_^1_%STA* STB1+1_^1_%RTJ* STB2_^1STB2_!NUM 0_^1_%LDA* STB2_^1_%ADD =XTABSIZ-STB2_^1_%RTJ STAB_)STORE TABLE_^1STB1_!NUM 0_^1_%NUM 0_^1_%SAN STB3_^1_%RTJ RECUR_^1_%VFD N1/0,N7/9,X8/ERROR1-ERROR1/96*96_^1_%JMP FALSE_^1STB3_!LDA TABTYP_^1_%INA -3_^1_%SAZ STB31_^1STBEX JMP RET_^1STB31 LDA* STB1+1_'LAST HALF OF NAME_^1_%STA* STPT_^1_%LDA* STB2_^1_€€%ADD =XTABSIZ-STB2+96_^1_%RTJ STAB_)STORE SECOND BLOCK OF PRINT TRAIN_^1_%NUM $5858_(XX_^1STPT_!NUM 0_^1_%JMP* STBEX_^1*_]_^1*_$OUTPUT A AS TWO CHAR DECIMAL NUMBER_^1*_]_^1NMCHAR NUM 0_^1_%ENQ 1_^1_%STQ OFLAG_(SET OUTPUT FLAG FOR SLI_^1_%CLR Q_^1_%DVI =N10_^1_%STQ* NMCTP_^1_%EOR =N$30_^1_%RTJ SLI_*OUTPUT FIRST DIGIT_^1_%LDA* NMCTP_^1_%EOR =N$30_^1_%RTJ SLI_*OUTPUT SECO€€ND DIGIT_^1_%CLR A_^1_%STA OFLAG_^1_%JMP* (NMCHAR)_^1NMCTP NUM 0_^1*_$PUT TRAIN OFFSET IN PRINT BUFFER_^1*_]_^1NMTR_!LDA TCOF_^1_%ENQ 1_^1_%STQ OFLAG_^1_%CLR Q_^1_%DVI =N100_^1_%STQ* NMTRC_(LOW TWO DIGITS_^1_%EOR =X$30_^1_%RTJ SLI_^1_%LDA* NMTRC_^1_%RTJ* NMCHAR_^1_%JMP RET_^1NMTRC NUM 0_^1HXCC_!LDQ TCOF_)OUTPUT HEX CARRIAGE CONTROL_^1_%QLS 1_^1_%LDA TABBAS,Q_^1_%RT€€J HXCHAR_^1_%JMP RET_^1CTLF_!LDQ* TCOF_)OUTPUT CONTROL DISCRIPTION_^1_%QLS 1_^1_%ENA 1_^1_%STA OFLAG_^1_%LDA TABBAS+1,Q_^1_%STA* CTLC_^1CTLF1 CLR Q_^1_%LDA* CTLC_^1_%LLS 4_^1_%STA* CTLC_^1_%RTJ* CTLRT_^1_%JMP* CTLF1_^1_%CLR A_^1_%STA OFLAG_^1_%RAO* TCOF_^1_%JMP RET_^1CTLC_!NUM 0_^1TERM_!EQU TERM(*)_^1_%LDA ABS_^1_%STA* RELS_^1_%LDQ MODORD_^1_%ADQ- $EB_^1_%CLR A_^1_€€%STA- 1,Q_*CLEAR ADDRESS IN SYSDIR_^1_%RTJ- ($F4)_^1_%NUM $1801_(RELEAS_^1RELS_!NUM 0_^1CTLRT NUM 0_,OUTPUT CTL FUNCTIIN_^1_%SQN CTLRT1_'LAST FUNCTION_^1_%RAO* CTLRT_(YES_^1_%JMP* (CTLRT)_%RETURN_^1CTLRT1 ENA $20_*OUTPUT PRECEEDING BLANK_^1_%STQ* TQS_^1_%RTJ SLI_^1_%LDQ* TQS_^1_%INQ -1_^1_%SQN CTLRT2_^1_%ENA $50_*OUTPUT P_^1_%JMP* CTLREX_^1CTLRT2 INQ -1_^1_%SQN CTLRT3_€€'IS IT SKIP FUNCTION_^1_%ENA $53_*OUTPUT S_^1_%RTJ SLI_^1_%ENA $31_*OUTPUT 1_^1_%JMP* CTLREX_^1CTLRT3 INQ -1_^1_%SQN CTLRT4_'IS IT DOUBLE SKIP_^1_%ENA $53_*OUTPUT S_^1_%RTJ SLI_^1_%ENA $32_*OUTPUT 2_^1_%JMP* CTLREX_^1CTLRT4 STQ* CLRT_^1_%ENA $43_*OUTPUT C_^1_%RTJ SLI_^1_%LDA* CLRT_^1_%RTJ* NMCHAR_'OUTPUT NUMERIC PART OF CHAN_^1_%ENA 1_^1_%STA OFLAG_^1_%JMP* (CTLRT)_^1CT€€LREX RTJ SLI_^1_%JMP* (CTLRT)_^1TQS_"NUM 0_^1CLRT_!NUM 0_^1TYP1_!ENA 1_,CHECK FOR TABLE TYPE 1_^1_%JMP* TYPC_^1TYP2_!ENA 2_,CHECK FOR TABLE TYPE 2_^1_%JMP* TYPC_^1TYP4_!ENA 3_,CHECK FOR TABLE TYPE 4_^1TYPC_!SUB TABTYP_^1_%SAZ TYPT_)IS THIS THE TYPE_^1_%JMP FALSE_(NO_^1TYPT_!JMP RET_*YES_^1HXTC_!LDA* TCOF_)OUTPUT HEX TAPE CODE_^1_%ADD TABBAS_^1HXXT_!RTJ* HXCHAR_^1_%JMP R€€ET_^1HXPC_!LDQ* TCOF_)OUTPUT PRINTER HEX CODE_^1_%CLR A_^1_%LRS 1_^1_%SAN HXPC1_^1_%LDA* TAB,Q_(LEFT BYTE_^1_%ARS 8_^1_%JMP* HXPC2_^1HXPC1 LDA* TAB,Q_(RIGHT BYTE_^1HXPC2 RAO* TCOF_^1_%AND- LPMASK+8_^1_%JMP* HXXT_^1TCOF_!NUM 0_^1ETB_"LDA* TABSIZ_'CHECK FOR END OF T12L5_^1_%SUB* TCOF_^1_%SAZ ETB01_^1_%JMP RET_^1ETB01 ENA 0_,END OF TABLE_^1_%STA* TCOF_)RESET TABLE OFFSET_^1€€_%JMP FALSE_^1*_]_^1*_$PUT TWO HEX CHARACTERS IN OUTPUT BUFFER_^1*_*INPUT - HEX VALUE IN A_^1*_]_^1HXCHAR NUM 0_^1_%STA* HXTP_^1_%ENQ 1_^1_%STQ OFLAG_(SET OUTPUT FLAG_^1_%ARS 4_,GET FIRST FOUR BITS_^1_%AND- LPMASK+4_^1_%SUB =N10_^1_%SAP HXC1_^1_%ADD =N$3A_^1_%RTJ SLI_*OUTPUT CHARACTER_^1_%JMP* HXC2_^1HXC1_!ADD =N$41_^1_%RTJ SLI_^1HXC2_!LDA* HXTP_^1_%AND- LPMASK+4_^1_%SUB€€ =N10_^1_%SAP HXC3_^1_%ADD =N$3A_^1_%RTJ SLI_^1_%JMP* HXC4_^1HXC3_!ADD =N$41_^1_%RTJ SLI_^1HXC4_!CLR A_^1_%STA OFLAG_^1_%JMP* (HXCHAR)_^1HXTP_!NUM 0_^1*_]_^1*_$LOAD TABLE_^1*_]_^1LTB_"LDA TPST_^1_%STA* LTB1_^1_%LDA TPST+1_^1_%STA* LTB1+1_^1_%RTJ* LTB2_^1LTB2_!NUM 0_^1_%LDA* LTB2_^1_%ADD =XTABSIZ-LTB2_^1_%RTJ_!LTAB_^1LTB1_!NUM 0_^1_%NUM 0_^1GETCOM SAP GETOK_^1_%RTJ €€RECUR_(FILE NOT FOUND_^1_%VFD N1/0,N7/9,X8/ERROR1-ERROR1/96*96_^1_%JMP FALSE_^1GETOK LDA TPST+1_^1_%STA TABNAM+1_^1_%ENQ 1_^1_%LDA TPST_^1_%STA* TABNAM_^1_%STA* GETCST_^1_%EOR =N$4343_^1_%SAN NOTCC_^1GETEX STQ* TABTYP_^1_%JMP RET_^1NOTCC INQ 1_^1_%LDA*_!GETCST_^1_%EOR =N$5443_^1_%SAN NOTTC_^1_%JMP* GETEX_^1NOTTC INQ 1_,PRINT TRAIN_^1_%STQ* TABTYP_'SET TABLE TYPE_^1€€_%LDA* LTB1+1_'LAST HALF OF NAME_^1_%STA* PTNA_^1_%LDA* LTB2_^1_%ADD =XTABSIZ-LTB2+96_!ABSOLUTE BUFFER ADDRESS_^1_%RTJ LTAB_)LOAD BLOCK_^1_%NUM $5858_(XX_^1PTNA_!NUM 0_^1_%JMP RET_^1GETCST NUM 0_^1*_]_^1*_$TABLE BEING MODIFIED_^1*_]_^1TABTYP NUM 0_,TABLE TYPE_^1TABNAM ALF 2,_+TABLE NAME_^1TABSIZ EQU TABSIZ(*)_^1TABECT EQU TABECT(*)_#TABLE ENTRY COUNT_^1JPLU_!NUM 0_,PRINT€€ER LU_^1TABBAS EQU TABBAS(*)_#TABLE BASE_^1JTLU_!NUM 0_,TAPE LU_^1TAB_"EQU TAB(*)_^1JTBLS NUM 0_,TAPE BLOCK SIZE_^1JTRCS NUM 0_,TAPE RECORD SIZE_^1JSTAT NUM 0_,JOB STATUS FLAGS_^1JCCNM ALF 2,_+CARRIAGE CONTROL TABLE NAME_^1JTCNM ALF 2,_+TAPE CONVERSION TABLE NAME_^1REST_!BZS REST(192)_^1SLU_"EQU SLU(*)_^1_%LDA VAL_^1_%STA OTLU_^1_%JMP RET_^1LISTLU NUM 4_^1*_]_^1*€€_$SAVE JOB NAME_^1*_]_^1SNAM_!ENA 0_^1_%STA TABTYP_^1_%LDA LI_^1_%STA TABNAM_^1_%LDA LI+1_^1_%STA TABNAM+1_^1_%LDA =N$4080_^1_%STA JSTAT_^1_%JMP RET_^1*_]_^1*_$SET RECORD SIZE TO BLOCKSIZE FOR VARIABLE_^1*_]_^1BLKREC EQU BLKREC(*)_^1_%LDA JTBLS_^1_%STA JTRCS_^1_%JMP RET_^1*_]_^1*_$SAVE TAPE CONVERSION TABLE NAME_^1*_]_^1STP_"LDA TPST_^1_%STA JTCNM_^1_%LDA TPST+1_^1_€€%STA JTCNM+1_^1_%JMP RET_^1*_]_^1*_$SAVE CARRIAGE CONTROL TABLE NAME_^1*_]_^1SCC_"LDA TPST_^1_%STA JCCNM_^1_%LDA TPST+1_^1_%STA JCCNM+1_^1_%JMP RET_^1*_]_^1*_$DEFAULT TABLE NAME_^1*_]_^1DFLT_!RTJ CLI_^1_%NUM 1_^1_%NUM $FFFF_^1_%RTJ RECUR_^1_%VFD N1/1,X15/CST-*_^1_%LDA TRUE_^1_%SAN DFLT1_^1_%JMP RET_^1DFLT1 LDA =N$2020_^1_%STA TPST_^1_%STA TPST+1_^1_%JMP RET_^1*_€€]_^1*_$SAVE BLOCK SIZE_^1*_]_^1SBKKSZ LDA VAL_^1_%STA JTBLS_^1_%JMP RET_^1*_]_^1*_$SAVE RECORD SIZE_^1*_]_^1SRECSZ LDA VAL_^1_%STA JTRCS_^1_%JMP RET_^1*_]_^1*_$SET FIXED OR VARIABLE FLAG_^1*_]_^1SRM_"LDA TPST_^1_%AND- NZERO+8_^1_%EOR =X$4600_^1_%SAN SRMST_(IS IT F_^1_%LDA JSTAT_(YES_^1_%AND- ZROBIT+15_#7FFF_^1_%EOR- ONEBIT+15_#8000_^1_%JMP* SRMEX_^1SRMST LDA JSTAT_^1_%A€€ND- ZROBIT+15_#7FFF_^1SRMEX STA JSTAT_^1_%JMP RET_^1*_]_^1*_$SAVE TAPE LU OR PRINTER LU_^1STLU_!LDA VAL_^1_%STA JTLU_^1_%JMP* SPLUEX_^1SPLU_!LDA VAL_^1_%STA JPLU_^1SPLUEX JMP RET_^1*_]_^1*_$TEMPORARY STORAGE_^1*_]_^1CHX1_!NUM 0_^1CHX2_!NUM 0_^1CNM1 NUM 0_]_^1CNM2 NUM 0_]_^1*_]_^1*_$SAVE TEMPORARY VALUES_^1*_]_^1HX1_"LDA VAL_^1_%STA* CHX1_^1_%JMP* SEXIT_^1HX2_"LDA VAL_^1€€_%STA* CHX2_^1_%JMP* SEXIT_^1NM1_"LDA VAL_^1_%STA* CNM1_^1_%JMP* SEXIT_^1NM2_"LDA VAL_^1_%STA* CNM2_^1SEXIT JMP RET_^1*_]_^1*_$MODIFY TAPE CONVERSION TABLE_^1*_]_^1MTC_"LDA TABTYP_^1_%INA -2_^1_%SAZ MTCOK_^1_%RTJ RECUR_^1_%VFD N1/0,N7/9,X8/ERROR4-ERROR4/96*96_^1MTCOK LDA* CHX2_^1_%AND- LPMASK+8_^1_%STA* CHX2_^1_%LDA* CHX1_^1_%SUB TABBAS_^1_%SUB =N380_^1_%SAM MTCON_^1_%€€JMP FALSE_^1MTCON ADD =N380_^1_%TRA Q_^1_%CLR A_^1_%LRS 1_^1_%SAM MTLO_^1_%LDA* CHX2_)HIGH BYTE_^1_%ALS 8_^1_%STA* CHX2_^1_%LDA TAB,Q_^1_%AND- LPMASK+8_^1_%JMP* MTDIT_^1MTLO_!LDA TAB,Q_^1_%AND- NZERO+8_^1MTDIT EOR* CHX2_^1_%STA TAB,Q_^1_%JMP RET_^1*_]_^1*_$MODIFY PRINT TRAIN_^1*_]_^1MPT_"LDA TABTYP_^1_%INA -3_^1_%SAZ MPTOK_^1_%RTJ RECUR_^1_%VFD N1/0,N7/9,X8/ERROR4-€€ERROR4/96*96_^1MPTOK LDA* CNM1_^1_%STA* CHX1_^1_%JMP* MTCOK_^1*_]_^1*_$CARRIAGE CONTROL CONSTANTS_^1*_]_^1CCTT_!NUM 0_,NUMBER OF FUNCTIONS_^1CCCST NUM 0_,CTL ACCUMULATION_^1SSKP_!LDA VAL_*SET SKIP COUNT_^1_%SAZ SSER_^1_%INA -3_^1_'SAM SSOK_^1SSER_!ENA 0_,ILLEGAL NUMBER OF LINES FOR SKIP_^1_%STA* CCCST_^1_%JMP FALSE_^1SSOK_!LDA* CCCST_(ADD CTL FUNCTION TO ACCUMULATION_^1_%€€RAO* CCTT_^1_%ALS 4_^1_%AND- NZERO+4_^1_%STA* CCCST_^1_%LDA VAL_^1_'INA 1_^1_%EOR* CCCST_^1_%STA* CCCST_^1_%JMP RET_^1SPRT_!ENA 0_,ADD PRINT FUNCTION TO ACCUMULATION_^1_%STA VAL_^1_%JMP* SSOK_^1SCHAN LDA VAL_*ADD CHANNEL SKIP TO ACCUMULATION_^1_%SAZ CHER_^1_%INA -13_^1_%SAM CHOK_^1CHER_!ENA 0_,ILLEGAL CHANNEL NUMBER_^1_%STA* CCCST_^1_%JMP FALSE_^1CHOK_!INA 15_^1_%STA €€VAL_^1_%JMP* SSOK_^1MCC_#LDQ TABECT_'ADD OR CHANGE CARRIAGE CONTROL CODE_^1_%INQ -1_^1_%QLS 1_^1MCCLA LDA TABBAS,Q_$SEARCH FOR CARRIAGE CONTROL_^1_%EOR CHX1_^1_%SAZ MCCF_^1_%INQ -2_^1_%SQM MCC01_^1_%JMP* MCCLA_^1MCC01 JMP* MCCNF_^1MCCF_!ENA 4_^1_%SUB* CCTT_^1_%STQ* CCTT_^1_%LDQ* CCCST_^1MCBK_!SAZ MCON_^1_%QLS 4_^1_%INA -1_^1_%JMP* MCBK_^1MCON_!TRQ A_^1_%LDQ* CCTT_^1_%€€STA TABBAS+1,Q_^1_%ENA 0_^1_%STA* CCCST_^1_%STA* CCTT_^1_%JMP RET_^1MCCNF_!LDA TABECT_'NOT FOUND - ADD NEW CARRIAGE CONTROL_^1_%INA -45_^1_'SAM MNFOK_^1_'ENA 0_^1_%STA* CCCST_^1_%JMP FALSE_^1MNFOK_!INA 46_^1_%STA TABECT_^1_%TRA Q_^1_%INQ -1_^1_%QLS 1_^1_%LDA CHX1_^1_%STA TABBAS,Q_^1_%JMP* MCCF_^1TEMPSV NUM 0_,DUMMY_^1HILIM NUM 50_^1LOLIM NUM 50_^1_%EJT_]_^1*_]_^1*_€€$S T A B - STORE TABLE_^1*_]_^1STAB_!NUM 0_^1_%STQ* LBTQ_^1_%ENQ 1_^1_%STQ* TABFG_(SET TABLE FLAG TO WRITE_^1_%LDQ* STAB_^1_%STQ* LTAB_^1_%JMP* LTABE_^1TABFG NUM 0_^1*_]_^1*_$L T A B - LOAD TABLE_^1*_]_^1*_*A = BUFFER ADDRESS_^1*_]_^1LTAB_"NUM 0_^1_%STQ* LBTQ_^1_%ENQ 0_^1_%STQ* TABFG_^1LTABE STA* LTAIO+6_%SAVE BUFFER ADDRESS_^1_%LDQ- I_:SAVE I_^1_%STQ* LBTISV_^1_%LDA* (LTAB)_€€^1_%STA* LTC2_)SAVE FIRST TWO BYTES_^1_%ENQ TABSI_^1_%RAO* LTAB_^1LTABB LDA* LTC2_^1_%EOR* CTAB,Q_^1_%SAZ LTA01_^1LTA11 INQ -2_^1_%SQM LTA02_^1_%JMP* LTABB_^1LTA02 ENA 0_^1LTAX_!RAO* LTAB_)EXIT_^1_%LDQ* LBTISV_5RESTORE I_^1_%STQ- I_^1_%LDQ* LBTQ_7RESTORE Q_^1_%JMP* (LTAB)_^1LBTISV NUM_!0_:SAVE 2_^1LBTQ_!NUM 0_^1LTA01 LDA* (LTAB)_^1_%EOR* CTAB+1,Q_^1_%SAZ LTA03_^1_%JMP* L€€TA11_^1LTA03 QRS 1_^1_%TRQ A_^1_%ADD TABLIB_^1_%STA* LTASEC_^1_%RTJ* LTACG_^1LTACG NUM 0_^1_%LDA* LTACG_^1_%ADD =XLTACOM-LTACG_^1_%STA* LTAIO+2_%SET ABSOLUTE COMPLETION ADDRESS_^1_%LDA* TABFG_^1_%SAZ TA01_^1_%LDA =N$0C03_%WRITE_^1_%JMP* TA02_^1TA01_!LDA =N$0803_%READ_^1TA02_!STA* LTAIO+1_^1LTAIO FREAD $C2,0,0,96,B,0,3,I,0_^1_%NUM 0_^1LTASEC NUM 0_^1_%JMP- (ADISP)_^1LTA€€COM ENA 1_^1_%JMP* LTAX_^1LTC2_!NUM 0_^1SFFF_!NUM $7FFF_^1*_]_^1*_$CONVERSION TABLES_^1*_]_^1CTAB_!EQU CTAB(*)_%TABLE DIRECTORY_^1_%ALF 2,JB01_^1_%ALF 2,JB02_^1_%ALF 2,TCAA_^1_%ALF 2,TCAE_^1_%ALF 2,TCEA_^1_%ALF 2,TC01_^1_%ALF 2,TC02_^1_%ALF 2,TC03_^1_%ALF 2,CCAS_^1_%ALF 2,CCML_^1_%ALF 2,CCCD_^1_%ALF 2,CC01_^1_%ALF 2,CC02_^1_%ALF 2,CC03_^1_%ALF 2,PTFO_^1_%ALF 2,X€€XFO_^1_%ALF 2,PTAS_^1_%ALF 2,XXAS_^1_%ALF 2,PTAN_^1_%ALF 2,XXAN_^1_%ALF 2,PTHN_^1_%ALF 2,XXHN_^1_%ALF 2,PT01_^1_%ALF 2,XX01_^1_%ALF 2,PT02_^1_%ALF 2,XX02_^1_%ALF 2,PT03_^1_%ALF 2,XX03_^1ENDTAB EQU ENDTAB(*)_^1TABSI EQU TABSI(ENDTAB-CTAB-2) OFFSET TO LAST TABLE ENTRY_^1ADISP EQU ADISP($EA)_^1LPMASK EQU LPMASK($2)_^1NZERO EQU NZERO($12)_^1ZERO_!EQU ZERO($22)_^1O€€NEBIT EQU ONEBIT($23)_^1ZROBIT EQU ZROBIT($33)_^1OBUF_!EQU OBUF(80)_"OUTPUT BUFFER SIZE_^1TMSIZ EQU TMSIZ(40)_"TEMP BUFFER SIZE_^1LISIZ EQU LISIZ(40)_^1VAL_"NUM 0_^1_%EJT_]_^1*_]_^1*_'SUBROUTINE BYTE - NON-RECURSIVE_^1*_]_^1*_'RETURNS NEXT INPUT BYTE IN A_^1*_'MAINTAINS CURRENT CHARACTER OFFSET (IN). BUMPED ON EACH CALL._^1*_'MAINTAINS CURRENT RECORD OFFSET (RBASE). UPDATED€€ WHEN A NEW_^1*_-RECORD IS READ._^1*_'SHIFTS CURRENT RECORD INTO BACKBUF AND READS NEW RECORD INTO_^1*_-INBUF WHEN CURRENT CHARACTER IS IN A NEW RECORD._^1*_'ON NEW RECORD READ, RECORD IN WRITTEN TO THE LIST DEVICE._^1*_'IF A COMMENT RECORD HAS BEEN READ, IT IS ALSO WRITTEN TO THE_^1*_-PUNCH DEVICE AND REPLACED WITH THE NEXT RECORD_^1*_'USES FREAD AND FWRITE MACROS._^1*_]_^1*_]_^1*€€_$GET BYTE FROM INPUT STREAM_^1*_]_^1BYTE_!NUM 0_^1_%RAO IN_^1_%LDA IN_^1_%SUB RBASE_^1_%SUB =N73_^1_%SAP GETREC_^1_%JMP* INREC_^1GETREC ENQ 39_^1_%LDA- NZERO_(FFFF_^1ZF1_#STA INBUF,Q_^1_%INQ -1_^1_%SQM REED1_^1_%JMP* ZF1_^1REED1 LDA- I_^1_%STA IISAV_^1REED_!FREAD $FD,GCMP-*+1,INBUF-*+5,40,A,0,3,I,X_^1_%JMP- (ADISP)_^1GCMP_!LDA RBASE_^1_%ADD =N72_^1_'STA RBASE_^1_%LDA €€ IISAV_^1_%STA- I_^1INREC_!LDA IN_^1_'SUB RBASE_^1_%TRA Q_^1_%CLR A_^1_%LRS 1_^1_'SAZ LOWB_^1_'LDA INBUF,Q_^1_%ARS 8_^1_%JMP* BYOT_^1LOWB_!LDA INBUF-1,Q_^1BYOT_!AND- LPMASK+8_^1_%JMP* (BYTE)_^1RBASE NUM -72_^1INBUF BZS INBUF(40)_^1LUP_"EQU LUP(*)_^1_%LDA- $FA_^1_%JMP* LUOT_^1LU4_"EQU LU4(*)_^1_%ENA 4_^1LUOT_!STA OTLU_^1_%JMP RET_^1*_]_^1*_-LOAD OVERLAY_^1*_]_^1LOVER€€ NUM 0_^1_%SAN LOV1_^1_%JMP* ELOVA_^1LOV1_!EQU LOV1(*)_^1_%EOR OLAY_^1_%SAN LOV2_^1_%JMP* ELOVA_^1LOV2_!EOR OLAY_^1_%STA OLAY_^1_%LDA =XBASE-START_^1_%CLR Q_^1_%DVI =N96_^1_%ADD LIBSEC_^1_%ADD* OLAY_^1_%INA -1_^1_%STA* DSEC_^1_%LDA- I_^1_%STA IISAV_^1LOVD_!FREAD $C2,ELOV-*+1,BASE-*+5,96,B,0,3,I,X_^1_%NUM 0_^1DSEC_!NUM 0_^1_%JMP- (ADISP)_^1ELOV_!LDA IISAV_^1_%STA- I_€€^1ELOVA JMP* (LOVER)_^1OLAY_!NUM 0_^1TOLAY NUM 0_^1*_]_^1*_$PROCESS OR_^1*_]_^1DOOR_!NUM 0_^1_%LDA TRUE_^1_%SAZ 2_^1_%JMP RET_^1_%RAO TRUE_^1_%JMP (DOOR)_^1*_]_^1*_$EOL_]_^1*_]_^1EOL_"RTJ BYTE_^1_%EOR LPMASK+8_-00FF_^1_%SAZ ZEOL_^1_%ENA 0_^1_%STA TRUE_^1ZEOL_!JMP RET_^1*_]_^1*_'SUBROUTINE FALSE - RECURSIVE_^1*_]_^1*_'CLEARS TRUE (FORCES FALSE)_^1*_]_^1FALSE EQU FA€€LSE(*)_^1_%ENA 0_^1_%STA TRUE_^1_%JMP RET_^1*_]_^1*_'SUBROUTINE HX - RECURSIVE_^1*_]_^1*_'EXTRACT HEXIDECIMAL INPUT FROM INPUT BUFFER_^1*_'IGNORE LEADING, EMBEDDED, TRAILING BLANKS_^1*_'IF NEXT CHARACTER IS NON-HEX, RETURN FALSE_^1*_'SCAN UP TO 1ST NON-HEX_^1*_-PLACE CHARACTERS INTO LI OR OS_^1*_-ACCUMULATE BINARY EQUIVALENT IN A AND VAL_^1*_-DO NOT RESET FALSE FROM SLI_^1*_'CAL€€LS CLEAR BYTE AND SLI_^1*_]_^1HX_#EQU HX(*)_^1_%RTJ CLEAR CLEAR LI_^1_%ENA 0_^1_%STA* ZHXF CLEAR FLAG_^1_%STA* ZHXAC_^1ZHX5_!RTJ BYTE_^1_%STA* ZHXSV_^1_%SUB =N$20_^1_%SAN ZHX1_^1_%JMP* ZHX5_^1ZHX1_!SUB =N$10_^1_%SAP ZHX3_^1_%JMP* ZHXEX_^1ZHX3_!SUB =N$A_^1_%SAP ZHX2_^1_%JMP* ZHX_^1ZHX2_!SUB =N$7_^1_%SAP ZHX4_^1_%JMP* ZHXEX_^1ZHX4_!SUB =N$6_^1_%SAP ZHXEX_^1_%JM€€P* ZHX_^1ZHXEX LDA* ZHXF_^1_%SAN ZHX6_^1_%STA TRUE_^1_%JMP RET_^1ZHX6_!LDA* ZHXAC_^1_%STA VAL_^1_%JMP* ZBACK_^1ZHX_"LDA* ZHXAC_^1_%ALS 4_^1_%STA* ZHXAC_^1_%LDA* ZHXSV_^1_%RTJ SLI_^1_%LDA* ZHXSV_^1_%SUB =N$3A_^1_%SAP ZHAN_^1_%INA $A_^1_%JMP* ZHALL_^1ZHAN_!INA 3_^1ZHALL EOR* ZHXAC_^1_%STA* ZHXAC_^1_%RAO* ZHXF_^1_%JMP* ZHX5_^1ZHXF_!NUM 0_^1ZHXAC NUM 0_^1ZHXS€€V NUM 0_^1*_]_^1*_'SUBROUTINE NM - RECURSIVE_^1*_]_^1*_'EXTRACT DECIMAL NUMBER FROM INPUT_^1*_'RETURN FALSE IF NEXT CHAR NON-BLANK, NON-NUMERIC_^1*_'IGNORE LEADING,EMBEDDED,TRAILING BLANKS_^1*_'SCAN UP TO NEXT NON-NUMERIC CHARACTER_^1*_-PUT CHARACTERS INTO LI OREOS AND BINARY INTO A AND VAL_^1*_-DO NOT RESET FALSE FROM SLI_^1*_'CALLS CLEAR BYTE AND SLI_^1*_]_^1NM_!EQU NM(*)_^1_€€%RTJ CLEAR CLEAR LI_^1_%ENA 0_^1_%STA* ZNMF CLEAR FLAG_^1_%STA* ZNMT CLEAR ACC_^1ZNM5_!RTJ BYTE_^1_%STA* ZNM4_^1_%SUB =N$20_^1_%SAN ZNM1_!IS IT BLANK_^1_%JMP* ZNM5 YES, TRY AGAIN_^1ZNM1_!SUB =N$10_^1_%SAM ZNMEX NON-NUMERIC_^1_%SUB =N$A_^1_%SAP_!ZNMEX_^1_%JMP* ZNM2_^1ZNMEX LDA* ZNMF_^1_%SAN ZNM3_!FIRST CHAR_^1_%STA TRUE_!YES, SET FALSE_^1_%JMP RET_^1ZNM3_!LDA*€€ ZNMT NO, TERMINATE INPUT_^1_%STA VAL_"SET VALUE_^1ZBACK LDA IN_^1_%INA -1_^1_%STA IN_^1_%JMP RET_^1ZNM2_!LDA* ZNMT_^1_%MUI =N10_^1_%STA* ZNMT_^1_%LDA* ZNM4_^1_%RTJ SLI_^1_%LDA* ZNM4_^1_%AND- LPMASK+4_^1_%ADD* ZNMT_^1_%STA* ZNMT_^1_%RAO* ZNMF_^1_%JMP* ZNM5_^1ZNM4_!NUM 0_^1ZNMF_!NUM 0_^1ZNMT_!NUM 0_^1*_]_^1*_'SUBROUTINE CSTBY - RECURSIVE_^1*_]_^1*_'GETS A BYTE €€FROM TPST_^1*_'ON ENTRY - A IS BYTE OFFSET_^1*_'ON EXIT - A CONTAINS THE BYTE_^1*_]_^1CSTBY NUM 0_^1_%TRA Q_^1_%CLR A_^1_%LRS 1_^1_%SAZ ZCS1_^1_%LDA TPST,Q_^1_%ARS 8_^1ZCEX_!AND- LPMASK+8_^1_%JMP* (CSTBY)_^1ZCS1_!LDA TPST-1,Q_^1_%JMP* ZCEX_^1TRUE_!NUM 1_^1LI_!ALF 20,_^1IN_#NUM 0_^1LIL_"NUM 0_^1OS_#ALF 20,_^1_%ALF 20,_^1OSIZ_!NUM 0_^1*_]_^1*_'SUBROUTINE SLI - NON€€-RECURSIVE_^1*_]_^1*_'STORE BYTE IN A INTO LI OR OS (DEPENDING ON OUTPUT FLAG)_^1*_'EXITS TO FALSE IF LI OR OS EXCEED THEIR CAPACITIES_^1*_'MAINTAIN OUTPUT CHARACTER OFFSET (LIL OR OSIZ)_^1*_'ON ENTRY, A CONTAINS THE BYTE TO BE STORED_^1*_]_^1SLI_"NUM 0_^1_%AND- LPMASK+8_"00FF_^1_%STA SLIT_^1_%LDA OFLAG_^1_%SAN ZSL_^1_%JMP* NOO_^1ZSL_"RAO OSIZ_^1_%LDA OSIZ_^1_%SUB =XOBUF+1_^1€€_%SAM SLOK_^1_%JMP FALSE_^1SLOK_!LDA =XOS-LI_^1_%ALS 1_^1_%ADD OSIZ_^1_%TRA Q_^1_%JMP* SLON_^1NOO_"RAO_!LIL_^1_%LDA LIL_^1_%SUB =XLISIZ+1_^1_%SAM LIOK_^1_%JMP FALSE_^1LIOK_!LDQ_!LIL_^1SLON_!CLR A_^1_%LRS 1_^1_%SAZ SILB_^1_%LDA SLIT_!HIGH BYTE_^1_%ALS 8_^1_%STA SLIT_^1_%LDA LI,Q_^1_%AND- LPMASK+8_^1_%EOR SLIT_^1_%STA LI,Q_^1_%JMP* (SLI)_^1SILB_!LDA LI-1,Q_^1_%AND- NZE€€RO+8_^1_%EOR SLIT_^1_%STA LI-1,Q_^1_%JMP* (SLI)_^1SLIT_!NUM 0_^1*_]_^1*_'SUBROUTINE CST - RECURSIVE_^1*_]_^1*_'COMPARE A STRING OF INPUT CHARACTERS WITH THE STRING IN_^1*_-THE TEMPORARY BUFFER(TPST)._^1*_'RETURN FALSE IF NOT EQUAL, BYTE FOR BYTE._^1*_'LEADING BLANKS IN THE INPUT ARE IGNORED_^1*_'COMPARISON IS DONE FOR THE NUMBER OF BYTES IN TPST_^1*_'CALLS BYTE._^1*_]_^1_%EQU C€€ST(*)_^1_%ENA 1_^1_%STA* CSTC2_^1CSTB_!RTJ BYTE_^1_%SUB =N$20_^1_%SAN CSTON_^1_%JMP* CSTB_^1CSTON ADD =N$20_^1CSTON2 STA* CSTC1_^1_%LDA* CSTC2_^1_%RTJ CSTBY_^1CSTT_!EOR* CSTC1_^1_%SAZ MATCH_^1_%CLR A_!ERROR_^1_%STA TRUE_^1_%JMP RET_^1MATCH RAO* CSTC2_^1_%LDA TPSTN_^1_%SUB* CSTC2_^1_%SAM GEND_^1_%RTJ BYTE_^1_%JMP* CSTON2_^1GEND_!JMP RET_^1CSTC1 NUM 0_^1CSTC2 NUM 0_^1*_]_^1€€*_'SUBROUTINE ST - RECURSIVE_^1*_]_^1*_'PLACE STRING OF CHARS BETWEEN PRIMES (') IN LI OR OS_^1*_'RETURN FALSE IF NEXT NON-BLANK CHARACTER IN INPUT IS NOT PRIME_^1*_'SCANS UNTILL CLOSING PRIME IS ENCOUNTERED_^1*_'DOES NOT RESET FALSE FROM SLI_^1*_'CALLS CLEAR, BYTE AND SLI._^1*_]_^1_%EQU ST(*)_^1_%RTJ CLEAR_^1_%RTJ BYTE_^1_%SUB =N$20_^1_%SAN STPR_^1_%JMP* ST_^1STPR_!SUB =N$07_^1_€€%SAZ STOK_^1_%CLR A_^1_%STA TRUE_^1_%JMP RET_^1STOK_!RTJ BYTE_^1_%SUB =N$27_^1_%SAZ STND_^1_%ADD =N$27_^1_%RTJ SLI_^1_%JMP* STOK_^1STND_!JMP RET_^1*_]_^1*_'SUBROUTINE CLI - NON-RECURSIVE_^1*_]_^1*_$MOVE LENGTH IN BYTES (INLINE) TO TPSTN_^1*_$MOVE N BYTES INLINE TO TPST_^1*_-ODD, BLANK PAD LAST WORD._^1*_'RETURN TO NEXT INSTRUCTION AFTER THE DATA_^1*_]_^1CLI_"NUM 0_^1_%LDQ* (CLI)€€_^1_%STQ TPSTN_^1_%INQ 1_^1_%CLR A_^1_%LRS 1_^1_%RAO* CLI_^1_%INQ -1_^1CLIB_!LDA (CLI),Q_^1_%STA TPST,Q_^1_%INQ -1_^1_%SQM CLION_^1_%JMP* CLIB_^1CLION LDQ TPSTN_^1_%CLR A_^1_%LRS 1_^1_%SAN CLIM_^1CLIOUT LDA TPSTN_^1_%INA 1_^1_%ARS 1_^1_%ADD CLI_^1_%STA* CLI_^1_%JMP* (CLI)_^1CLIM_!LDA (CLI),Q_^1_%AND- NZERO+8_^1_%EOR =N$20_^1_%STA TPST,Q_^1_%JMP* CLIOUT_^1TPST_!€€ALF 20,_^1TPSTN NUM 0_^1*_]_^1*_'SUBROUTINE ID - RECURSIVE_^1*_]_^1*_'MOVE STRING OF ALPHA-NUMERIC CHARACTERS INTO LI OR OS FROM_^1*_-THE INPUT BUFFER_^1*_'IGNORE LEADING BLANKS._^1*_'RETURN FALSE IF 1ST NON-BLANK ISN'T ALPHA NUMERIC._^1*_'TERMINATE ON NON-ALPHA NUMERIC CHARACTER._^1*_'DOES NOT RESET FALSE FROM SLI._^1*_'CALLS CLEAR,BYTE AND SLI._^1*_]_^1_%EQU ID(*)_^1_%RTJ CL€€EAR_^1_%CLR A_^1_%STA* IDFG_^1_%STA LIL_^1IDBK_!RTJ BYTE_^1_%STA* IDT_^1_%SUB =N$20_^1_%SAN NBLK_^1_%JMP* IDBK_^1NBLK_!LDA* IDT_^1_%SUB =N$30_^1_%SAM IDER_^1_%SUB =N$A_^1_%SAM IDOK_^1_%SUB =N$7_^1_%SAM IDER_^1_%SUB =N$1A_^1_%SAM IDOK_^1IDER_!LDQ IDFG_^1_%SQN IDEX_^1_%CLR A_^1_%STA TRUE_^1_%JMP* IDEX_^1IDOK_!RAO* IDFG_^1_%LDA* IDT_^1_%RTJ SLI_^1_%RTJ BYTE_^1_%ST€€A* IDT_^1_%SUB =N$20_^1_%JMP* NBLK_^1IDEX_!LDA IN_^1_%INA -1_^1_%STA IN_^1_%JMP RET_^1IDFG_!NUM 0_^1IDT_"NUM 0_^1*_]_^1*_'ROUTINE RECUR_^1*_]_^1*_'MAKES RECURSIVE CALLS (SEE RET)_^1*_'OTHERWISE SAVE CALLER'S ADDRESS AND CURRENT INPUT POINTER ON_^1*_-STACK AND JUMP TO ROUTINE WHOSE ADDRESS WAS PASSED_^1*_-IN THE CALLING SEQUENCE_^1*_'IF CURRENT STATE IS FALSE, RETURN DIRECTLY€€ TO CALLING_^1*_-ROUTINE (DO NOT MAKE RECURSIVE CALL)._^1*_]_^1RECUR NUM 0_^1_%RTJ* REC01_^1REC01_!NUM 0_^1_%LDA* (RECUR)_^1_%SAP REC02_%IS IT A ROOT REFERENCE_^1_%ALS 1_^1_%ARS 1_'EXTEND SIGN BIT_^1_%ADD* RECUR_^1_%STA EXIT_^1_%ENA 0_^1_%STA TOLAY_^1_%JMP* REC03_^1REC02 ALS 8_)OVERLAY REFERENCE_^1_%ARS 8_)EXTEND SIGN BIT_^1_%ADD* REC01_^1_%ADD =XBASE-REC01_^1_%STA EX€€IT_^1_%LDA* (RECUR)_^1_%ARS 8_^1_%AND- LPMASK+7_^1_%STA* RECT_)ADJUST OVERLAY NUMBER_^1_%SUB LOLIM_(ACCORDING TO LOLIM AND HILIM_^1_%INA -1_^1_%SAP REC04_^1_%LDA* RECT_^1_%JMP* REC05_^1REC04 LDA* RECT_^1_%SUB HILIM_^1_%ADD LOLIM_^1_%INA 1_^1REC05 EQU REC05(*)_^1_%STA TOLAY_^1REC03 RAO* RECUR_^1_%LDA TRUE_^1_%SAN PUSH_^1_%JMP* (RECUR)_^1PUSH_!LDA IN_^1_%LDQ STACKP_^1€€_%STA* STACK,Q_^1_%LDA* RECUR_^1_%STA* STACK+1,Q_^1_%LDA OLAY_^1_%STA* STACK+2,Q_^1_%LDA TOLAY_^1_%RTJ LOVER_%OVERLAY LOAD_^1_%RAO* STACKP_^1_%RAO* STACKP_^1_%RAO* STACKP_^1_%JMP (EXIT)_^1RECT_!NUM 0_^1STACK BZS STACK(100)_^1STACKP NUM 0_^1*_]_^1*_'ROUTINE RET_^1*_]_^1*_'EXIT POINT FOR RECURSIVELY CALLED ROUTINES (SEE RECUR)_^1*_'IF STACK IS EMPTY, EXIT TO DISPATCHER_^1*_'€€OTHERWISE BACK STACK POINTER UP 2_^1*_'IF CURRENT STATE IS FALSE, RESET INPUT POINTER TO VALUE SAVED_^1*_-ON STACK_^1*_'EXIT TO SAVED RETURN ADDRESS._^1*_]_^1RET_"LDQ* STACKP_^1_%SQZ DONE_^1_%JMP* RETOK_^1DONE_!JMP- (ADISP)_^1RETOK INQ -3_^1_%STQ* STACKP_^1_%LDA TRUE_^1_%SAN NOTT_^1_%LDA STACK,Q_^1_%STA IN_^1NOTT_!LDA STACK+1,Q_^1_%STA* EXIT_^1_%LDA* STACK+2,Q_^1_%RTJ L€€OVER_%LOADOVERLAY_^1_%JMP* (EXIT)_^1EXIT_!NUM 0_^1*_]_^1*_'SUBROUTINE CLEAR - NON-RECURSIVE_^1*_]_^1*_'CLEAR LINE BUFFER_^1*_'SET LIL TO 0 AND STORE BLANKS INTO LI_^1*_]_^1CLEAR NUM 0_^1_%ENQ 0_^1_%STQ LIL_^1_$ENQ 19_^1_%LDA =N$2020_^1AGN_"STA LI,Q_^1_%INQ -1_^1_%SQM CLX_^1_%JMP* AGN_^1CLX_"JMP* (CLEAR)_^1*_]_^1*_'SUBROUTINE PLI - RECURSIVE_^1*_]_^1*_'SET UP TO OUTPUT CO€€NTENTS OF LI_^1*_'MOVE CONTENTS OF LI TO TPST_^1*_'MOVE 20 WORDS FROM LI TO TPST AND SET TPSTN = LENGTH OF LI_^1*_'GO TO ZMVP_^1PLI_"EQU_!PLI(*)_^1_$ENQ 19_^1ZOS1_!LDA LI,Q_^1_%STA TPST,Q_^1_%INQ -1_^1_%SQM ZOS2_^1_%JMP* ZOS1_^1ZOS2_!LDA LIL_^1_%STA TPSTN_^1*_]_^1*_]_^1*_'SUBROUTINE ZMVP - RECURSIVE_^1*_]_^1*_'SET UP TO OUTPUT CONTENTS OF TPST_^1*_'MOVE CONTENTS OF TPST INT€€O OS BUFFER AND RESET OFLAG SO_^1*_-ANY MORE STORES GO INTO LI._^1*_'CALLS CSTBY AND SLI_^1*_]_^1ZMVP_!EQU ZMVP(*)_^1_%ENQ 1_^1_%STQ OFLAG_^1_%ENQ 0_^1_%STQ ZM1_^1ZMBK_!LDA* ZM1_^1_%INA 1_^1_%RTJ CSTBY_^1_%RTJ SLI_^1_%RAO* ZM1_^1_%LDA TPSTN_^1_%SUB* ZM1_^1_%SAZ ZMA2_^1_%JMP* ZMBK_^1ZMA2_!STA OFLAG_^1_%JMP RET_^1ZM1_"NUM 0_^1OFLAG NUM 0_^1*_]_^1*_'SUBROUTINE OUTPU€€T - RECURSIVE_^1*_]_^1*_'OUTPUTS THE CONTENTS OF OS_^1*_'SETS OS TO ALL BLANKS_^1*_'CLEARS OSIZE_^1*_'USES FWRITE MACRO_^1*_]_^1OUTPUT EQU OUTPUT(*)_^1_%ENA 1_^1_%STA OFLAG_^1_%ENA 13_^1_%RTJ SLI_^1_%ENA 10_^1_%RTJ SLI_^1_%ENA 0_^1_%STA OFLAG_^1PUT_"EQU PUT(*)_^1_%LDA OSIZ_^1_%INA 1_^1_%ARS 1_^1_%STA* OUTPT+5_^1_%LDA- I_^1_%STA IISAV_^1OUTPT FWRITE OTLU-*+3,OUTCOM-*€€+1,OS-*+5,40,A,0,3,R,X_^1_%JMP- (ADISP)_^1OUTCOM ENQ 39_^1_%LDA IISAV_^1_%STA- I_^1_%LDA =N$2020_^1OUTBK STA OS,Q_^1_%INQ -1_^1_%SQM OUTEX_^1_%JMP* OUTBK_^1OUTEX ENA 0_^1_%STA OSIZ_^1_%JMP RET_^1OTLU_!NUM 4_^1*_]_^1*_'SUBROUTINE PLIL - RECURSIVE_^1*_]_^1*_'SUBROUTINE NXTREC - RECURSIVE_^1*_]_^1*_'RESETS INPUT POINTERS TO NEW LOGICAL RECORD_^1*_'CLEARS CURRENT CHARACTE€€R POINTER (IN=0) SO NEXT CHARACTER IS_^1*_-1ST CHAR IN INBUF_^1*_'RBASE IS SET TO -72 TO FORCE A READ WHEN THE NEXT INPUT_^1*_-CHARACTER IS RETRIEVED_^1*_]_^1NXTREC EQU NXTREC(*)_^1_%LDA =N-72_^1_%STA RBASE_^1_%ENA 0_^1_%STA IN_^1_%JMP RET_^1*_]_^1*_$IS NEXT CHATACTER A COMMA_^1*_]_^1COMMA RTJ BYTE_^1_%EOR- ONEBIT+5_$IS IT BLANK_^1_%SAN COMMN_^1_%JMP* COMMA_^1COMMN EOR- O€€NEBIT+5_^1_%EOR =N$2C_^1_%SAN NCOM_^1_%JMP RET_^1NCOM_!JMP FALSE_^1*_]_^1*_$GO TO_^1*_]_^1GO_#NUM 0_^1_%LDA* (GO)_^1_%STA* GOTT_^1_%RAO* GO_^1_%LDQ TRUE_^1_%SQN GO1_^1_%JMP* (GO)_$CONDITION FALSE_^1GO1_"SAP GO2_+IS IT A ROOT MODULE_^1_%ALS 1_,YES_^1_%ARS 1_)EXTEND SIGN BIT_^1_%ADD* GO_^1_%INA -1_+ABSOLUTIZE IT_^1_%STA* GOTT_^1_%JMP* (GOTT)_^1GO2_"ARS 8_,OVERLAY MODULE_^€€1_%AND- LPMASK+7_^1_%STA* GOTT1_(SAVE OVERLAY NUMBER_^1_%LDA* GOTT_^1_%ALS 8_^1_%ARS 8_,EXTEND SIGN BIT_^1_%ADD REC01_^1_%ADD =XBASE-REC01_^1_%STA* GOTT_^1_%LDA* GOTT1_^1_%SUB LOLIM_^1_%INA -1_^1_%SAP GOT4_^1_%LDA* GOTT1_^1_%JMP* GOT5_^1GOT4_!LDA* GOTT1_^1_%SUB HILIM_^1_%ADD LOLIM_^1_%INA 1_^1GOT5_!EQU GOT5(*)_^1_%RTJ LOVER_^1_%JMP* (GOTT)_^1GOTT_!NUM 0_^1GOTT1 NUM 0€€_^1IISAV NUM 0_^1_%EQU BAS1(*+13)_^1_%EQU BAS2(BAS1/96)_^1_%EQU BAS3(BAS2+1)_^1_%EQU BAS4(BAS3*96)_^1_%EQU BAS5(BAS4-*)_^1_%EQU BAS6(BAS5-13)_^1_%BZS (BAS6)_^1ITRUE ADC TRUE_^1IRET_!ADC RET_^1IRECUR ADC RECUR_^1IDOOR ADC DOOR_^1ICLI_!ADC CLI_^1IGO_"ADC GO_^1IBYTE ADC BYTE_^1IVAL_!ADC VAL_^1ITMPSV ADC TEMPSV_^1ILIL_!ADC LIL_^1ITPSTN ADC TPSTN_^1ICLEAR ADC CLE€€AR_^1ISLI_!ADC SLI_^1BASE_!EQU BASE(*)_^1BS01_!EQU BS01(0)_^1*_]_^1*_$INITIAL MESSAGE_^1*_]_^1MAIN_#EQU MAIN(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS01_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 16_^1_%ALF 08,TAPE-TO-PRINT IN_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS01_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1€€,X15/OUTPUT-*-BS01_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/01,X8/COM-COM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS01_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$MAIN CONTROL FOR MODIFICATION COMMANDS_^1*_]_^1COM_#EQU COM(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS01_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,-TP-_^1_%VFD N8€€/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS01_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS01_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS01_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/01,X8/MCOM-MCOM/96*96 OVERLAY€€ REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS01_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/01,X8/COM-COM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS01_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$SEARCH FOR COMMAND ENTERED_^1*_]_^1MCOM_#EQU MCOM(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/16,X8/LPT-LPT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDO€€OR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/2,X8/DTERM-DTERM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/2,X8/XLTB-XLTB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$€€5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/2,X8/XSTB-XSTB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/2,X8/DLST-DLST/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_€€%VFD N1/0,N7/3,X8/XMCC-XMCC/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/3,X8/XMTC-XMTC/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/3,X8/XMPT-XMPT/96*96 OVERLAY REFER€€ENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/3,X8/XCJD-XCJD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/2,X8/DRCOM-DRCOM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=X€€IDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/4,X8/XDJD-XDJD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS01_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/5,X8/XLJD-XLJD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS01_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS01_!RTJ*€€ (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/14,X8/ERROR6-ERROR6/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS01_"JMP* (IRET-*-BSXX)_^1*_]_^1_%EJT_]_^1_%EQU OVN02(*-1)_^1_%EQU OVA02(OVN02/96)_^1_%EQU OVB02(OVA02+1)_^1_%EQU OVC02(OVB02*96)_^1_%BSS (OVC02-*)_^1_%EQU BS02(BASE-*)_^1*_]_^1*_$TERMINATE COMMAND_^1*_]_^1DTERM_#EQU DTERM(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS0€€2_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,TERM_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS02_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/14,X8/TTOT-TTOT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS0€€2_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/TERM-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$LOAD TABLE COMMAND_^1*_]_^1XLTB_#EQU XLTB(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS02_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,LTB_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS02_^1_%VFD N8/$5C,X8/I€€RECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/02,X8/DLTB-DLTB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_^1DLTB_#EQU DLTB(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/8,X8/TNA-TNA/96*96 OV€€ERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/LTB-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS02_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$STORE TABLE COMMAND_^1*_]_^1XSTB_#EQU XSTB(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS02_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,STB_^1_€€%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS02_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/02,X8/DSTB-DSTB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_^1DSTB_#EQU DSTB(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/02,X8/STBPAR-STBPAR/96*9€€6 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS02_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/STB-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS02_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_€€^1*_]_^1*_$PROCESS PARAMETERS FOR STB_^1*_]_^1STBPAR_#EQU STBPAR(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/8,X8/TNU-TNU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/STB-*-BS€€02_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$LIST TABLE COMMAND_^1*_]_^1DLST_#EQU DLST(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS02_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,LIST_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS02_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N€€7/02,X8/LPAR-LPAR/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_^1LPAR_#EQU LPAR(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/10,X8/LST-LST/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS02_!RTJ* €€ (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SLU-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%V€€FD N1/0,N7/10,X8/LST-LST/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS02_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR3-ERROR3/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_^1DRCOM_#EQU DRCOM(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS02_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%€€ALF 02,RMOD_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS02_^1_%VFD N8/$5C,X8/IRECUR-*-BS02_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/RCOM-*-BS02_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS02_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN03(*-1)_^1_%EQU OVA03(OVN03/96)_^1_%EQU OVB03(OVA03+1)_^1_%EQU OVC03(OVB03*96)_^1_%BSS (OVC03-*)_^1_%EQU B€€S03(BASE-*)_^1*_]_^1*_$MODIFY CARRIAGE CONTROL TABLE COMMAND_^1*_]_^1XMCC_#EQU XMCC(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS03_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,MCC_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS03_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/03,X8/DMCC-DMCC/96*96 OVERLAY REFEREN€€CE_^1_%VFD N8/$1C,X8/IRET-*-BS03_"JMP* (IRET-*-BSXX)_^1DMCC_#EQU DMCC(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HX-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HX1-*-BS03_!R€€OOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/13,X8/CTL-CTL/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/MCC-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS03_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR2-ERROR2/96*96 OVE€€RLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS03_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$MODIFY TAPE CONVERSION TABLE COMMAND_^1*_]_^1XMTC_#EQU XMTC(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS03_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,MTC_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS03_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^€€1_%VFD N1/0,N7/03,X8/DMTC-DMTC/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS03_"JMP* (IRET-*-BSXX)_^1DMTC_#EQU DMTC(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HX-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!R€€TJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HX1-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HX-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HX2-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5€€C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/MTC-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS03_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR2-ERROR2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS03_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$MODIFY PRINT TRAIN COMMAND_^1*_]_^1XMPT_#EQU XMPT(*)_!RECURSI€€VE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS03_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,MPT_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS03_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/03,X8/DMPT-DMPT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS03_"JMP* (IRET-*-BSXX)_^1DMPT_#EQU DMPT(*)_!RECURSIVE ROUTINE_^1€€_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM1-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-€€BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HX-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HX2-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/MPT-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS03_!RTJ* (=XIDOOR-*-BSXX)_^1_%VF€€D N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR2-ERROR2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS03_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CREATE JOB DISCRIPTION_^1*_]_^1XCJD_#EQU XCJD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS03_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,CJD_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%€€VFD N1/1,X15/CST-*-BS03_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/03,X8/DCJD-DCJD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS03_"JMP* (IRET-*-BSXX)_^1DCJD_#EQU DCJD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-B€€SXX)_^1_%VFD N1/1,X15/ID-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SNAM-*-BS03_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS03_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/15,X8/ZCJD-ZCJD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS03_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN04(*-1)_^1_%EQU OVA04(OVN04/96)_^1_%EQU OVB04€€(OVA04+1)_^1_%EQU OVC04(OVB04*96)_^1_%BSS (OVC04-*)_^1_%EQU BS04(BASE-*)_^1*_]_^1*_$EXTRACT OPERANDS FOR CJD COMMAND_^1*_]_^1PCJD_#EQU PCJD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/04,X8/CCL-CCL/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/04,X8/TPCON-TPCON/96*96 OVERLAY €€REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/5,X8/BLKSIZ-BLKSIZ/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/5,X8/FORV-FORV/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/6,X8/TAPLU-TAPLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS€€04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/6,X8/PRTLU-PRTLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CJD-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS04_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$GET CARRIAGE CONTROL TABLE NAME_^1*_]_^1CCL_#EQU CCL(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS04_!RTJ* (=XICLI-*-BSXX)_^1_%NU€€M 17_^1_%ALF 09,CARRIAGE CONTROL?_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS04_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_€€^1_%VFD N1/0,N7/6,X8/CCTABD-CCTABD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SCC-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS04_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR1-ERROR1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS04_!RTJ* (=XIGO-*-BSXX)_^€€1_%VFD N1/0,N7/04,X8/CCL-CCL/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS04_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$GET TAPE CONVERSION TABLE NAME_^1*_]_^1TPCON_#EQU TPCON(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS04_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 16_^1_%ALF 08,TAPE CONVERSION?_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS04_^1_%VFD N€€8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/6,X8/TCTABD-TCTABD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X€€15/STP-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS04_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR1-ERROR1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS04_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/04,X8/TPCON-TPCON/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS04_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$DELETE JOB €€DEFINITION_^1*_]_^1XDJD_#EQU XDJD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS04_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,DJD_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS04_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/4,X8/DDJD-DDJD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS04_"JMP* (IRET-*-BSX€€X)_^1DDJD_#EQU DDJD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ID-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/DJD-*-BS04_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS04_!RTJ* €€ (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS04_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR2-ERROR2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS04_"JMP* (IRET-*-BSXX)_^1*_]_^1_%EJT_]_^1_%EQU OVN05(*-1)_^1_%EQU OVA05(OVN05/96)_^1_%EQU OVB05(OVA05+1)_^1_%EQU OVC05(OVB05*96)_^1_%BSS (OVC05-*)_^1_%EQU BS05(BASE-*)_^1*_$LIST JOB DIRECTORY_^1*_]_^1XLJD_#EQU XLJD€€(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS05_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,LJD_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS05_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/LJD-*-BS05_!ROOT REF€€ERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS05_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$GET BLOCKSIZE_^1*_]_^1BLKSIZ_#EQU BLKSIZ(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS05_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 10_^1_%ALF 05,BLOCKSIZE?_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1€€_%VFD N1/1,X15/ZMVP-*-BS05_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-B€€SXX)_^1_%VFD N1/1,X15/SBKKSZ-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS05_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR2-ERROR2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS05_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/05,X8/BLKSIZ-BLKSIZ/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS05_"JMP* (IRET-*-BSXX€€)_^1*_]_^1*_$FIXED OR VARIABLE FORMAT_^1*_]_^1FORV_#EQU FORV(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS05_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 18_^1_%ALF 09,FIXED OR VARIABLE?_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS05_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8€€/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/05,X8/FV-FV/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS05_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR2-ERROR2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,€€X8/IGO-*-BS05_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/05,X8/FORV-FORV/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS05_"JMP* (IRET-*-BSXX)_^1FV_#EQU FV(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS05_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,F_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS05_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=€€XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SRM-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/06,X8/RECSIZ-RECSIZ/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS05_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS05_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,V_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X1€€5/CST-*-BS05_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/BLKREC-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS05_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SRM-*-BS05_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS05_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN06(*-1)_^1_%EQU OVA06(OVN06/96)_^1_%EQU OVB06(OVA06+1)_^1_%EQU OVC06(OVB06*96)_^1_%BSS (O€€VC06-*)_^1_%EQU BS06(BASE-*)_^1*_]_^1*_$GET RECORD SIZE_^1*_]_^1RECSIZ_#EQU RECSIZ(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS06_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 12_^1_%ALF 06,RECORD SIZE?_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS06_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS06_!ROOT REFERENCE_€€^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SRECSZ-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS06_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRE€€CUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR2-ERROR2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS06_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/06,X8/RECSIZ-RECSIZ/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS06_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$GET TAPE LU_^1*_]_^1TAPLU_#EQU TAPLU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS06_!RTJ* (=XICLI-*-BSXX)_^1€€_%NUM 08_^1_%ALF 04,TAPE LU?_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS06_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%V€€FD N1/1,X15/NM-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/STLU-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS06_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR3-ERROR3/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS06_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/06,X8/€€TAPLU-TAPLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS06_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$GET PRINTER LU_^1*_]_^1PRTLU_#EQU PRTLU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS06_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 11_^1_%ALF 06,PRINTER LU?_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS06_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECU€€R-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SPLU-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-€€*-BS06_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR3-ERROR3/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS06_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/06,X8/PRTLU-PRTLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS06_"JMP* (IRET-*-BSXX)_^1CCTABD_#EQU CCTABD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_€€!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/06,X8/CCTAB-CCTAB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS06_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/DFLT-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS06_"JMP* (IRET-*-BSXX)_^1TCTABD_#EQU TCTABD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR€€-*-BSXX)_^1_%VFD N1/0,N7/7,X8/TCTAB-TCTAB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS06_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/DFLT-*-BS06_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS06_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL CARRIAGE CONTROL TABLE NAME_^1*_]_^1CCTAB_#EQU CCTAB(*)_!RECURSIVE ROUTINE_^1_%VF€€D N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/7,X8/CCTABP-CCTABP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS06_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS06_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/7,X8/CCTABU-CCTABU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS06_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN07(*-1)_^1_%EQU OVA07(OVN07€€/96)_^1_%EQU OVB07(OVA07+1)_^1_%EQU OVC07(OVB07*96)_^1_%BSS (OVC07-*)_^1_%EQU BS07(BASE-*)_^1*_]_^1*_$CHECK FOR LEGAL PROTECTED CARRIAGE CONTROL TABLE NAME_^1*_]_^1CCTABP_#EQU CCTABP(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,CCAS_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD€€ N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,CCML_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,CCCD_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_€€!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$1C,X8/IRET-*-BS07_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL UNPROTECTED CARRIAGE CONTROL TABLE NAME_^1*_]_^1CCTABU_#EQU CCTABU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,CC01_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-B€€S07_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,CC02_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,CC03_^1_%VFD N8/$5C,X8/IRE€€CUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$1C,X8/IRET-*-BS07_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL TAPE CONVERSION TABLE NAME_^1*_]_^1TCTAB_#EQU TCTAB(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/TCTABP-TCTABP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-€€BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/TCTABU-TCTABU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS07_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL PROTECTED TAPE CONVERSION TABLE NAME_^1*_]_^1TCTABP_#EQU TCTABP(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,TCAA_^1_%VFD N8/$5€€C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,TCEA_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ*€€ (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,TCAE_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$1C,X8/IRET-*-BS07_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL UNPROTECTED TAPE CONVERSION TABLE NAME_^1*_]_^1TCTABU_#EQU TCTABU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,TC01_^1_€€%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,TC02_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-€€BS07_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,TC03_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS07_^1_%VFD N8/$1C,X8/IRET-*-BS07_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL PRINT TRAIN NAME_^1*_]_^1PTTAB_#EQU PTTAB(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/8,X8/PTTABP-PTTABP/96*96 €€OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS07_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS07_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/8,X8/PTTABU-PTTABU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS07_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN08(*-1)_^1_%EQU OVA08(OVN08/96)_^1_%EQU OVB08(OVA08+1)_^1_%EQU OVC08(OVB08*96)_^1_%BSS (OVC08-*)_^1_%EQU BS08(BASE-*€€)_^1*_]_^1*_$CHECK FOR LEGAL PROTECTED PRINT TRAIN NAME_^1*_]_^1PTTABP_#EQU PTTABP(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS08_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,PTFO_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS08_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS08_!RTJ* (=XICLI-*-BSXX)_^1_€€%NUM 04_^1_%ALF 02,PTAS_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS08_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS08_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,PTAN_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS08_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BS€€XX)_^1_%VFD N8/$5C,X8/ICLI-*-BS08_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,PTHN_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS08_^1_%VFD N8/$1C,X8/IRET-*-BS08_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL UNPROTECTED PRINT TRAIN NAME_^1*_]_^1PTTABU_#EQU PTTABU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS08_!RTJ* (=XICLI-*-BSXX)_^1_€€%NUM 04_^1_%ALF 02,PT01_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS08_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS08_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,PT02_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS08_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BS€€XX)_^1_%VFD N8/$5C,X8/ICLI-*-BS08_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,PT03_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS08_^1_%VFD N8/$1C,X8/IRET-*-BS08_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL TABLE NAME_^1*_]_^1TNA_#EQU TNA(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/6,X8/CC€€TAB-CCTAB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/7,X8/TCTAB-TCTAB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/7,X8/PTTAB-PTTAB/96*96 OVERLAY REFERENCE_^1_%VFD N€€8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR1-ERROR1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/FALSE-*-BS08_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS08_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR LEGAL UNPROTECTED TABLE_^1*_]_^1TNU_#EQU TNU(€€*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/7,X8/CCTABU-CCTABU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/7,X8/TCTABU-TCTABU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/€€IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/8,X8/PTTABU-PTTABU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS08_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR1-ERROR1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS08_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/FALSE-*-BS08_!ROOT REFERENCE_^1_%VFD N8€€/$1C,X8/IRET-*-BS08_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN09(*-1)_^1_%EQU OVA09(OVN09/96)_^1_%EQU OVB09(OVA09+1)_^1_%EQU OVC09(OVB09*96)_^1_%BSS (OVC09-*)_^1_%EQU BS09(BASE-*)_^1ERROR1_#EQU ERROR1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS09_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 18_^1_%ALF 09,INVALID TABLE NAME_^1_%VFD N8/$5C,X8/IRECUR-*-BS09_!RTJ* (=XIRECUR-*-BSXX)_^€€1_%VFD N1/1,X15/ZMVP-*-BS09_^1_%VFD N8/$5C,X8/IRECUR-*-BS09_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS09_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS09_"JMP* (IRET-*-BSXX)_^1ERROR2_#EQU ERROR2(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS09_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 15_^1_%ALF 08,INVALID OPERAND_^1_%VFD N8/$5C,X8/IRECUR-*-BS09_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD€€ N1/1,X15/ZMVP-*-BS09_^1_%VFD N8/$5C,X8/IRECUR-*-BS09_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS09_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS09_"JMP* (IRET-*-BSXX)_^1ERROR3_#EQU ERROR3(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS09_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 10_^1_%ALF 05,ILLEGAL LU_^1_%VFD N8/$5C,X8/IRECUR-*-BS09_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/Z€€MVP-*-BS09_^1_%VFD N8/$5C,X8/IRECUR-*-BS09_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS09_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS09_"JMP* (IRET-*-BSXX)_^1ERROR4_#EQU ERROR4(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS09_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 15_^1_%ALF 08,INVALID COMMAND_^1_%VFD N8/$5C,X8/IRECUR-*-BS09_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-€€BS09_^1_%VFD N8/$5C,X8/IRECUR-*-BS09_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS09_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS09_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN10(*-1)_^1_%EQU OVA10(OVN10/96)_^1_%EQU OVB10(OVA10+1)_^1_%EQU OVC10(OVB10*96)_^1_%BSS (OVC10-*)_^1_%EQU BS10(BASE-*)_^1LST_#EQU LST(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=€€XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/INVTAB-*-BS10_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS10_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/10,X8/TTAB-TTAB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS10_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/12,X8/CTAL-CTAL/96*96 O€€VERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS10_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/11,X8/TPTAB-TPTAB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS10_"JMP* (IRET-*-BSXX)_^1TTAB_#EQU TTAB(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/TYP2-*-BS10_!ROOT REFERENCE_^1_€€%VFD N8/$5C,X8/ICLI-*-BS10_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 21_^1_%ALF 11,TAPE CONVERSION TABLE_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS10_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS10_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS10_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 18_^1_%ALF 09, TAPE_$PRINTER_^1_%VF€€D N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS10_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS10_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS10_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 18_^1_%ALF 09,HEX CODE HEX CODE_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS10_^1_%VFD N8/$5C,X8/IRE€€CUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS10_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/10,X8/TCLIN-TCLIN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/LU4-*-BS10_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS10_"JMP* (IRET-*-BSXX)_^1TCLIN_#EQU TCLIN(*)_!RECURSIVE RO€€UTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HXTC-*-BS10_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS10_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 08_^1_%ALF 04,_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS10_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HXPC-*-BS10_!ROOT REFERENCE_^1_%VFD N8€€/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS10_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS10_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ETB-*-BS10_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS10_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/10,X8/TCLIN-TCLIN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS10_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS1€€0_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN11(*-1)_^1_%EQU OVA11(OVN11/96)_^1_%EQU OVB11(OVA11+1)_^1_%EQU OVC11(OVB11*96)_^1_%BSS (OVC11-*)_^1_%EQU BS11(BASE-*)_^1TPTAB_#EQU TPTAB(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/TYP4-*-BS11_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS11_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 17_^1_%ALF€€ 09,PRINT TRAIN TABLE_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS11_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS11_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS11_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 19_^1_%ALF 10,POSITION HEX VALUE_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/€€ZMVP-*-BS11_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS11_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/11,X8/PTLIN-PTLIN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/LU4-*-BS11_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS11_"JMP* (IRET-*-BSXX)_^1P€€TLIN_#EQU PTLIN(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NMTR-*-BS11_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS11_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 07_^1_%ALF 04,_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS11_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HXPC-€€*-BS11_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS11_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS11_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ETB-*-BS11_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS11_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/11,X8/PTLIN-PTLIN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS11_!RTJ* (=XIDOOR-*-B€€SXX)_^1_%VFD N8/$1C,X8/IRET-*-BS11_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN12(*-1)_^1_%EQU OVA12(OVN12/96)_^1_%EQU OVB12(OVA12+1)_^1_%EQU OVC12(OVB12*96)_^1_%BSS (OVC12-*)_^1_%EQU BS12(BASE-*)_^1CTAL_#EQU CTAL(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/TYP1-*-BS12_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS12_!RTJ* (=XI€€CLI-*-BSXX)_^1_%NUM 17_^1_%ALF 09,CARRIAGE CONTROL_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS12_^1_%VFD N8/$5C,X8/ICLI-*-BS12_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 05_^1_%ALF 03,TABLE_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS12_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OU€€TPUT-*-BS12_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS12_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 18_^1_%ALF 09,HEX CODE FUNCTION_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS12_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS12_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/€€12,X8/CCLIN-CCLIN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/LU4-*-BS12_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS12_"JMP* (IRET-*-BSXX)_^1CCLIN_#EQU CCLIN(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/HXCC-*-BS12_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS12_!RTJ* (=XICLI-€€*-BSXX)_^1_%NUM 08_^1_%ALF 04,_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS12_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CTLF-*-BS12_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS12_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS12_!RTJ* (=XIRECUR-*-BSXX)_^1_%V€€FD N1/1,X15/ETB-*-BS12_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS12_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/12,X8/CCLIN-CCLIN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS12_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS12_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN13(*-1)_^1_%EQU OVA13(OVN13/96)_^1_%EQU OVB13(OVA13+1)_^1_%EQU OVC13(OVB13*96)_^1_%BSS (OVC13-*)_^1_%EQU€€ BS13(BASE-*)_^1*_]_^1*_$EXTRACT CTL OPERAND_^1*_]_^1CTL_#EQU CTL(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS13_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS13_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS13_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RT€€J* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/13,X8/GCTL-GCTL/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/13,X8/CTL-CTL/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS13_"JMP* (IRET-*-BSXX)_^1GCTL_#EQU GCTL(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/13,X8/SKP-SKP/96*96 OVERLAY €€REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS13_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/13,X8/CHAN-CHAN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS13_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/13,X8/PRT-PRT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS13_!RTJ* €€(=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/13,X8/NOP-NOP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS13_"JMP* (IRET-*-BSXX)_^1SKP_#EQU SKP(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS13_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,S_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS13_^1€€_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS13_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SSKP-*-BS13_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS13_"JMP* (IRET-*-BSXX)_^1CHAN_#EQU CHAN(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS13_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,C_^1_%VFD N8/$5C€€,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS13_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS13_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SCHAN-*-BS13_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS13_"JMP* (IRET-*-BSXX)_^1PRT_#EQU PRT(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICL€€I-*-BS13_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,P_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS13_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/SPRT-*-BS13_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS13_"JMP* (IRET-*-BSXX)_^1NOP_#EQU NOP(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS13_!RTJ* (=XICLI-*-BSX€€X)_^1_%NUM 01_^1_%ALF 01,N_^1_%VFD N8/$5C,X8/IRECUR-*-BS13_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS13_^1_%VFD N8/$1C,X8/IRET-*-BS13_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN14(*-1)_^1_%EQU OVA14(OVN14/96)_^1_%EQU OVB14(OVA14+1)_^1_%EQU OVC14(OVB14*96)_^1_%BSS (OVC14-*)_^1_%EQU BS14(BASE-*)_^1ERROR5_#EQU ERROR5(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS14_€€!RTJ* (=XICLI-*-BSXX)_^1_%NUM 16_^1_%ALF 08,JOB LIBRARY FULL_^1_%VFD N8/$5C,X8/IRECUR-*-BS14_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS14_^1_%VFD N8/$5C,X8/IRECUR-*-BS14_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS14_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS14_"JMP* (IRET-*-BSXX)_^1ERROR6_#EQU ERROR6(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS14_!RTJ*€€ (=XICLI-*-BSXX)_^1_%NUM 17_^1_%ALF 09,UNDEFINED COMMAND_^1_%VFD N8/$5C,X8/IRECUR-*-BS14_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS14_^1_%VFD N8/$5C,X8/IRECUR-*-BS14_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS14_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS14_"JMP* (IRET-*-BSXX)_^1ERROR7_#EQU ERROR7(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS14_!RTJ* (=€€XICLI-*-BSXX)_^1_%NUM 15_^1_%ALF 08,NOT IMPLEMENTED_^1_%VFD N8/$5C,X8/IRECUR-*-BS14_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS14_^1_%VFD N8/$5C,X8/IRECUR-*-BS14_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS14_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS14_"JMP* (IRET-*-BSXX)_^1TTOT_#EQU TTOT(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS14_!RTJ* (=XICLI-*-BS€€XX)_^1_%NUM 17_^1_%ALF 09,TAPE-TO-PRINT OUT_^1_%VFD N8/$5C,X8/IRECUR-*-BS14_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS14_^1_%VFD N8/$5C,X8/IRECUR-*-BS14_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS14_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS14_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN15(*-1)_^1_%EQU OVA15(OVN15/96)_^1_%EQU OVB15(OVA15+1)_^1_%EQU OVC15(OVB€€15*96)_^1_%BSS (OVC15-*)_^1_%EQU BS15(BASE-*)_^1ZCJD_#EQU ZCJD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS15_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 14_^1_%ALF 07,STANDARD MODE?_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS15_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS15_!ROOT REFERENCE_^1_%VFD N8/$5C,X8€€/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS15_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS15_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,Y_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS15_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/04,X8/PCJD-PCJD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/I€€DOOR-*-BS15_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS15_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,N_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS15_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/15,X8/DMODE-DMODE/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS15_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5€€C,X8/IGO-*-BS15_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/15,X8/ZCJD-ZCJD/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS15_"JMP* (IRET-*-BSXX)_^1DMODE_#EQU DMODE(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/04,X8/TPCON-TPCON/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/6,X8/TAP€€LU-TAPLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/6,X8/PRTLU-PRTLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/DUMP-*-BS15_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS15_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CJD-*-BS15_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS15_"J€€MP* (IRET-*-BSXX)_^1_%EJT_]_^1_%EQU OVN16(*-1)_^1_%EQU OVA16(OVN16/96)_^1_%EQU OVB16(OVA16+1)_^1_%EQU OVC16(OVB16*96)_^1_%BSS (OVC16-*)_^1_%EQU BS16(BASE-*)_^1*_]_^1*_$LOAD PRINT TRAIN_^1*_]_^1LPT_#EQU LPT(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS16_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,LPT_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1€€/1,X15/CST-*-BS16_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/16,X8/ALPT-ALPT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS16_"JMP* (IRET-*-BSXX)_^1ALPT_#EQU ALPT(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/16,X8/NLPT-NLPT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS16_!RTJ* (=XIDOOR-€€*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/7,X8/PTTAB-PTTAB/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX€€)_^1_%VFD N1/1,X15/NM-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ELPT-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/ICLI-*-BS16_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 28_^1_%ALF 14,PRESS LOAD IMAGE ON PRINTER,_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS16_^1_%VFD N8/$5C,X8/ICLI-*-BS16_!RTJ* (=XICLI-€€*-BSXX)_^1_%NUM 27_^1_%ALF 14, THEN PRESS CARRIAGE RETURN_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS16_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/PUT-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NXTREC-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!€€RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/DWRT-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS16_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/9,X8/ERROR2-ERROR2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS16_"JMP* (IRET€€-*-BSXX)_^1NLPT_#EQU NLPT(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CLPT-*-BS16_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS16_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/14,X8/ERROR7-ERROR7/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS16_"JMP* (IRET-*-BSXX)_^1ENDMOD_#EQU ENDMOD(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$1C,X8/IR€2ET-*-BS16_"JMP* (IRET-*-BSXX)_^1_%END MODMOD_^__2PTTPIO CSY/ P€1_%NAM TTPIO_^1*_]_^1*_$JOB TABLE FORMAT EQUATES_^1*_]_^1JJBNM EQU JJBNM(0)_3WORD 0 = JOBNAME-4 CHARS_^1JPRLU EQU JPRLU(JJBNM+2)_-WORD 2 = PRINT LOGICAL UNIT_^1JTPLU EQU JTPLU(JPRLU+1)_-WORD 3 = TAPE LOGICAL UNIT_^1JBLKSZ EQU JBLKSZ(JTPLU+1)_,WORD 4 = TAPE BLOCK SIZE_^1JRECSZ EQU JRECSZ(JBLKSZ+1)_+WORD 5 = TAPE RECORD SIZE_^1JFLAGS EQU JFLAGS(JRECSZ+1)_+WORD 6 = FLA€€GS_^1*_HBIT 15 = FIXED(1)/VARIABLE(0)_^1*_HBIT 14 = SUSPENDED(1)/RUNNING_^1*_HBIT 13 = START FIELD_^1*_HBIT 12 = STOP FIELD_^1*_HBIT 11 = PART PRINT_^1*_HBIT 10 = PRE-SUSPEND_^1*_HBIT 9 = ACTIVATE_^1*_HBIT 8 = DUMP_^1*_HBIT 7 = ASSIGNED(SELECTED)_^1*_HBIT 6 = I/O IN PROCESS_^1*_HBIT 5 = TEMP SUSPEND_^1*_HBIT 4 = HEADER OUTPUT_^1*_HBITS 3-0 = UNUSED_^1JCCTAB EQU JCCTAB(JFLAGS€€+1)_+WORD 7 = CCTAB ADDR_^1JTCTAB EQU JTCTAB(JCCTAB+1)_+WORD 8 = TCTAB ADDR_^1JCOFF EQU JCOFF(JTCTAB+1)_,WORD 9 = CURRENT OFFSET_^1JPOFF EQU JPOFF(JCOFF+1)_-WORD 10 = PARTIAL OFFSET_^1JPLEN EQU JPLEN(JPOFF+1)_-WORD 11 = PARTIAL LENGTH_^1JSTOFF EQU JSTOFF(JPLEN+1)_,WORD 12 = START OFFSET_^1JSTLEN EQU JSTLEN(JSTOFF+1)_+WORD 13 = .START LENGTH_^1JSPOFF EQU JSPOFF(JSTLEN+1€€)_+WORD 14 = .STOP OFFSET_^1JSPLEN EQU JSPLEN(JSPOFF+1)_+WORD 15 = STOP LENGTH_^1*_GWORDS 18-23 = I/O PKT_^1JLGSV1 EQU JLGSV1(JSPLEN+1)_+LOG1 SAVE FOR PRINTER_^1JLGSV2 EQU JLGSV2(JLGSV1+1)_+LOG 1 SAVE FOR TAPE_^1JIOPKT EQU JIOPKT(JLGSV2+1)_+I/O PKT FOR DS_^1JIOCOM EQU JIOCOM(JIOPKT+1)_^1JIOTRD EQU JIOTRD(JIOCOM+1)_,THREAD WORD_^1JIOLU_!EQU JIOLU(JIOTRD+1)_,LOGICAL UNIT NUMBER€€_^1JIOSIZ EQU JIOSIZ(JIOLU+1)_,REC SIZE_^1JIOBUF EQU JIOBUF(JIOSIZ+1)_+BUFFER ADDRESS_^1JSTART EQU JSTART(JIOBUF+1)_+WORDS 24-39 = START MASK_^1JSTOP EQU JSTOP(JSTART+16)_+WORDS 40-53 = STOP MASK-32 CHARS_^1JLEN_!EQU JLEN(JSTOP+16)_^1JROFF EQU JROFF(JSTART) OFFSET IN BLOCK (DUMP MODE)_^1JBLOCC EQU JBLOCC(JROFF+1) BLOCK COUNT (DUMP MODE)_^1*_]_^1*_$EQUATES FOR JOB TABLE ON€€ DISK_^1*_]_^1JDPRLU EQU_!JDPRLU(0)_1PRINTER LU_^1JDTPLU EQU_!JDTPLU(JDPRLU+1)_+TAPE LU NBR_^1JDBKSZ EQU JDBKSZ(JDTPLU+1)_,BLOCK SIZE_^1JDRCSZ EQU JDRCSZ(JDBKSZ+1)_,RECORD SIZE_^1JDFLGS EQU JDFLGS(JDRCSZ+1)_,FLAGS_^1JDCCTB EQU_!JDCCTB(JDFLGS+1)_+CCTAB NAME ( 4 CHARS)_^1JDTCTB EQU JDTCTB(JDCCTB+2)_,TCTAB NAME ( 4 CHARS)_^1JBDLEN EQU_!JBDLEN(JDTCTB+2)_*LENGTH_^1*_]_^1*_$FOR DISK €€RECORD FORMATS_^1*_]_^1DRECLN EQU DRECLN(96)_1LEN DISK RECORD_^1*_]_^1*_$MORE JOB TABLE RECORD STUFF_^1*_]_^1JNMLEN EQU JNMLEN(2)_2LEN OF A JOB NAME_^1JBNNUM EQU JBNNUM(16)_1NBR JOBS IN DISK TABLE_^1JBNLEN EQU JBNLEN(JBNNUM*JNMLEN)_%LEN OF NAMES AREA_^1DRSTLN EQU DRSTLN(DRECLN-JBNLEN)_'SPACE IN SECT 1 AFTRR NAMES_^1JBNUM1 EQU JBNUM1(DRSTLN/JBDLEN)_'NBR JOBS IN SECTOR 1_^1_%EJ€€T_]_^1*_]_^1*_$PRE-CODE_^1*_]_^1SLDIRY EQU SLDIRY($EB)_!ADDRESS OF SYSTEM DIRECTORY_^1CORED EQU CORED($E7)_"LENGTH OF CORE RES DIRECTORY_^1_%ENT RLSFLG_^1_%ENT ABS_^1_%ENT BUFSIZ_^1_%EXT* BUFFER_^1_%EXT* AJOB_^1BASS_!JMP MOVSEC_^1_%JMP TABLIB+2_^1RLSFLG NUM 0_,CONSOLE ACTIVE FLAG_^1MOVSEC ENQ -3_^1_%LDA* BASS,Q_^1_%STA MODORD_^1_%INQ 1_^1_%LDA* BASS,Q_^1_%INA ROU7_^1_%€€STA RUNLIB_^1_%INQ 1_^1_%LDA* BASS,Q_^1_%STA TABLIB_^1_%RTJ* ABS_^1ABS_"NUM 0_^1_%LDA* ABS_^1_%SUB =XABS-BASS_^1_%STA* ABS_^1_%LDQ- SLDIRY_'GET SYSDIR ADDR_^1_%ADQ- CORED_(BUMP PAST CORE DIR (IF ANY)_^1_%INQ 10_+POINT TO BUFFER SIZE_^1_%LDA (MODORD),Q_^1_%STA BUFSIZ_'SET BUFFER SIZE_^1_%JMP TABLIB+1_^1_%EJT_]_^1**************************************************_^1*_$TRACE €€ROUTINE - DEBUD ONLU_^1*********************R****************************_^1TRACE NUM 0_^1_%STQ* STOREQ_^1_%STA* STOREA_^1_%LDA* TOFF_^1_%INA 2_^1_%EOR* LISTL_^1_%SAN TRA01_^1_%ENA 0_^1_%JMP* TRA02_^1TRA01 EOR* LISTL_^1TRA02 TRA Q_^1_%STA* TOFF_^1_%RAO* TRCT_^1_%LDA* TRCT_^1_%STA* LIST,Q_^1_%LDA* TRACE_^1_%SUB ABS_^1_%STA* LIST+1,Q_^1_%LDA* STOREA_^1_%LDQ* STOREQ_^1_%JMP* €€(TRACE)_^1LISTL NUM 200_^1TOFF_!NUM 0_^1TRCT_!NUM 0_^1STOREQ NUM 0_^1STOREA NUM 0_^1LIST_!BZS LIST(400)_^1_%EXT LOG1A_^1_%EJT_]_^1_%EQU RMBASE(*)_^1_%EQU ADISP($EA)_^1_%EQU ONEBIT($23)_^1_%EQU ZROBIT($33)_^1_%EQU NZERO($12)_^1_%EQU LPMASK($2)_^1_%EQU ZERO($22)_^1*_]_^1*_$TAPE READER_^1*_]_^1_%ENT TP01_^1TP01_!EQU TP01(*)_^1_%RTJ TRACE_(****************DEBUG ONLY**€€****************_^1_%LDA TPFLAG_^1_%SAZ TP011_^1_%JMP- (ADISP)_%TAPE BUFFER BUSY_^1TP011 EQU TP011(*)_^1_%STA PFLAG_(CLEAR PROCESS FLAG_^1_%STA TPCUR_(SET TO START OF JOB TABLE_^1TP02_!EQU TP02(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%LDQ TPCUR_(GET JOB TABLE OFFSET_^1_%INQ -4_^1_%SQM TP04_)IS IT END OF TABLE_^1TP03_!EQU TP03(*)_^1_%LDA PFLAG_€€(YES,CHECK PROCESS FLAG_^1_%SAZ TPLB01_'IS ANYTHING ACTIVE_^1_%JMP* TP01_)YES,MAKE ANOTHER PASS_^1TPLB01 JMP- (ADISP)_%NO,EXIT TO DISPATCHER_^1TP04_!EQU TP04(*)_^1_%INQ 4_^1_%LDA AJOB,Q_'GET ADDRESS OF JOB DISCRIPTION_^1_%SAN TPLB02_'IS IT IN USE_^1TP022 RAO TPCUR_^1_%JMP* TP02_^1TPLB02 STA- I_,SET I WITH JOB DISCRIPTION ADDRESS_^1_%LDA- JFLAGS,I_$GET JOB STATUS_^1_%AND- ONE€€BIT+14_#CHECK SUSPEND BIT_^1_%SAZ TP05_)IS JOB SUSPENDED_^1_%JMP* TP022_(YES,GET NEXT JOB_^1TP05_!EQU TP05(*)_^1_%LDA- JFLAGS,I_$GET JOB STATUS_^1_%AND- ONEBIT+10_^1_%SAZ TP055_^1_%JMP* TP13_(PRESUSPEND BIT IS SET_^1TP055 LDA- JFLAGS,I_^1_%AND- ONEBIT+5_$IS PRINT BUFFER AVAILABLE_^1_%SAZ TP16_^1_%JMP* TP022_(NO,GET NEXT JOB_^1TP16_!EQU TP16(*)_^1_%LDA- JTPLU,I_'GET TAPE LU_^1€€_%RTJ_!DSTAT_(CHECK STATUS_^1_%SAN TP16A_(IS IT UP_^1_%JMP* TP022_(NO, TRY AGAIN_^1TP16A EQU TP16A(*)_$YES_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%RAO PFLAG_(SET PROCESS FLAG_^1_%LDA- JFLAGS,I_$GET JOB STATUS_^1_%AND- ONEBIT+9_$IS ACT BIT SET_^1_%SAZ TP06_)NO_^1TP07_!EQU TP07(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%EOR- JFL€€AGS,I_$YES,CLEAR IT_^1_%STA- JFLAGS,I_^1_%RAO_!TPNUM_'BUMP ACTIVE DS COUNT_^1_%RAO PFLAG_^1_%JMP* TP022_(GET NEXT JOB_^1TP06_!EQU TP06(*)_^1_%LDA- JCOFF,I_%GET CURRENT OFFSET_^1_%SUB- JBLKSZ,I_$SUBTRACT BLOCK SIZE_^1_%SAP TP13_)IS IT END OF BLOCK_^1_%JMP* TP08_)NO_^1TP13_!EQU TP13(*)_%YES, CHECK PRESUS_^1_%LDA- JFLAGS,I_^1_%AND- ONEBIT+10_^1_%SAN TP15_)IS IT SET_^1_%JMP* TP14_€€)NO_^1TP15_!EQU TP15(*)_^1_%EOR- JFLAGS,I_$YES, CLEAR IT_^1_%AND- ZROBIT+14_^1_%EOR- ONEBIT+14_#SET SUSPEND_^1_%STA- JFLAGS,I_^1_%LDA TPNUM_^1_%INA -1_+DECREMENT DS COUNT_^1_%STA TPNUM_^1_%RAO PFLAG_^1_%ENA 0_^1_%STA- JCOFF,I_^1_%LDA TPBUF_^1_%EOR TPCUR_^1_%SAN TP151_^1_%ENA -1_^1_%STA TPBUF_^1TP151 JMP TC099_(RESTART CONSOLE IF ASLEEP_^1TP08_!EQU TP08(*)_^1_%RTJ TRA€€CE_(****************DEBUG ONLY******************_^1_%LDA TPBUF_(IS CURRENT JOBS BLOCK IN CORE_^1_%EOR TPCUR_^1_%SAN TP44_)NO, READ IT_^1_%JMP* TP09_)YES, DON'T READ IT_^1TP44_!JMP* TP13_^1TP14_!EQU TP14(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%LDA- JFLAGS,I_^1_%AND- ONEBIT+4_$CHECK HEADER BIT_^1_%SAZ TP141_^1_%JMP TC01M_(DON'T READ TAPE_^1TP141 EQU€€ TP141(*)_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%LDA* TPLU_)READ A BLOCK OF TAPE_^1_%AND- NZERO+8_^1_%EOR- JTPLU,I_^1_%STA* TPLU_)SET LU_^1_%LDA- JFLAGS,I_^1_%AND- ONEBIT+8_^1_%SAZ TP14Z_^1_%LDA BUFSIZ_^1_%JMP* TP14X_^1TP14Z EQU TP14Z(*)_^1_%LDA- JBLKSZ,I_^1_%INA 1_^1_%ARS 1_^1TP14X EQU TP14X(*)_^1_%SUB BUFSIZ_'IS IT OVERSIZE_^1_%SAM GBUFF_^1_%SAZ €€GBUFF_^1_%LDA BUFSIZ_'YES, TRUNCATE_^1_%JMP* GBUFF2_^1GBUFF ADD BUFSIZ_'NO, RESTORE IT_^1GBUFF2 EQU GBUFF2(*)_^1_%STA* TPBS_)SET BLOCK SIZE_^1_%LDA* TPCUR_^1_%STA* TPBUF_(IDENTIFY THE BUFFER_^1_%LDA- I_^1_%STA_!ISAVE_^1_%LDA- JTPLU,I_^1_%RTJ DVDN_)MARK TAPE BUSY_^1_%RAO TPFLAG_'SET TAPE BUFFER BUSY FLAG_^1_%LDA* TPREL_^1_%INA 7_^1_%STA* TPREL2_^1_%RTJ- ($F4)_(READ TAPE_^1_%€€NUM $0903_(READ, CP=3, RP=0_^1_%ADC TPCOM-*+1_^1TPTR_!NUM 0_,THREAD_^1TPLU_!NUM 0_,LU_^1TPBS_!NUM 0_,BLOCK SIZE IN WORDS_^1TPREL2 NUM 0_,TAPE BUFFER ADDRESS_^1_%JMP- (ADISP)_^1TPREL ADC* BUFFER_^1TP09_!EQU TP09(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%LDA* TPNUM_(GET NUMBER OF ACTIVE DS_^1_%INA -1_+IS IT ONE_^1_%SAN TP10_)NO_^1_%JMP TC01M_(YES,€€ DON'T BACKSPACE_^1TP10_!EQU TP10(*)_^1_%LDA- JFLAGS,I_$GET JOB STATUS_^1_%SAM TPL03_(IS IT FIXED BLOCKING_^1_%JMP* TPL08_(NO_^1TPL03 EQU TPL03(*)_^1_%LDA- JRECSZ,I_$YES_^1_%CLR Q_,GET RECORD SIZE_^1_%MUI =XMAXREC_^1_%SUB- JBLKSZ,I_$MINUS BLOCK SIZE_^1_%ADD- JCOFF,I_%PLUS CURRENT OFFSET_^1_%SAP TPL04_^1_%JMP* TP11_)DO A BACKSPACE_^1TPL04 JMP TC01M_(DON'T BACKSPACE_^1TPL08 €€ EQU TPL08(*)_$VARIABLE BLOCKING_^1_%ENA 0_^1_%SUB =XMAXREC_^1_%STA* TPC01_(NEGATIVE RECORD COUNT_^1_%LDA- JCOFF,I_^1_%STA* TPC02_(TEMPORARY SAVE OF CURRENT OFFSET_^1TPL06 EQU TPL06(*)_$LOCATE NEXT VARIABLE RECORD_^1_%RTJ GBYTE_^1_%ALS 8_^1_%STA* TPC03_(SAVE HIGH BYTE OF RECORD SIZE_^1_%RAO- JCOFF,I_^1_%RTJ GBYTE_^1_%EOR* TPC03_(FOR COMPLETE RECORD SIZE_^1_%ADD- JCOFF,I_%PO€€INT TO NEXT RECORD_^1_%INA -1_^1_%STA- JCOFF,I_^1_%SUB- JBLKSZ,I_$IS BUFFER EXHAUSTED_^1_%SAM TPL09_(NO_^1_%JMP* TPL05_(YES_^1TPL09 EQU TPL09(*)_^1_%RAO* TPC01_(BUMP RECORD COUNT_^1_%LDA* TPC01_^1_%SAZ TPL07_(IS IT LAST RECORD_^1_%JMP* TPL06_(NO, DO NEXT RECORD_^1TPL07 LDA* TPC02_(YES, BUFFER NOT EXHAUSTED_^1_%STA- JCOFF,I_%RESTORE CURRENT OFFSET_^1_%JMP* TP11_)GO TO BACKSPAC€€E_^1TPL05 EQU TPL05(*)_$BUFFER EXHAUSTED_^1_%LDA* TPC02_^1_%STA- JCOFF,I_%RESTORE CURRENT OFFSET_^1_%JMP TC01M_(CONVERT AND MOVE_^1TP11_!EQU TP11(*)_%INITIATE BACKSPACE_^1_%LDA- JTPLU,I_%GET LU_^1_%STA* BKSP+4_^1_%LDA- I_^1_%STA* ISAVE_^1BKSP_!MOTION 0,0,1,,,0,4,3,0,0,0,A_^1_%LDA* ISAVE_^1_%STA- I_^1_%JMP TC01M_^1TPC01 NUM 0_,NEGATIVE MAXREC_^1TPC02 NUM 0_,TEMPORARY S€€AVE OF CURRENT OFFSET_^1TPC03 NUM 0_,HIGH BYTE OF RECORD SIZE_^1_%EJT_]_^1*_]_^1*_$TAPE READER DATA_^1*_]_^1ISAVE NUM 0_^1PFLAG NUM 0_,PROCESS FLAG_^1QHEAD NUM -1_+HEAD OF PRINTER QUE_^1TPCUR NUM 0_,OFFSET OF CURRENT DATA STREAM_^1TPNUM NUM 0_,COUNT OF ACTIVE DATA STREAMS_^1TPBUF NUM 99_+DATA STREAM = OF TAPE BLOCK IN BUFFER_^1RECCT NUM 0_,RECORD NUMBER IN BLOCK_^1T€€PFLAG_!NUM 0_*TAPE BUFFER BUSY FLAG_^1MAXREC EQU MAXREC(4)_#RECORDS PER READ TO BE DECODED_^1EOROFF NUM 0_,END-OF-RECORD OFFSET_^1BYTC_!NUM 0_,BYTE NUMBER IN CURRENT RECORD_^1DUMPSZ EQU DUMPSZ(32)_"BYTES PER LINE OF DUMP_^1MESS1 ALF 1,*_^1CPBUF NUM 0_,LOCATION OF CURRENT PRINT BUFFER_^1TBAS_!EQU TBAS(1)_%TABLE BASE VALUE_^1TSTA_!EQU TSTA(2)_%START OF TABLE DATA_^1POSTB €€EQU POSTB(70)_#CONTROL CHARACTERS AT END OF BUFFER_^1PBSZ_!EQU PBSZ(75)_$PRINT BUFFER SIZE_^1BUFSIZ NUM 0_,MAX SIZE OF TAPE BUFFER_^1_%EJT_]_^1*_]_^1*_$CONVERT BINARY NUMBER TO TWO DIGIT DECIMAL_^1*_]_^1LUOUT NUM 0_^1_%CLR Q_^1_%DVI =N10_^1_%ALS 8_^1_%EAQ A_^1_%EOR* F0F0_^1_%JMP* (LUOUT)_^1F0F0_!NUM $3030_^1MESS2 ALF 13,DEVICE NOT READY UNIT_^1MESS3 ALF 13,PARITY ERRO€€R UNIT_^1MESS4 ALF 13,I/O ERROR_"ON UNIT_^1MESS5 ALF 13, SHORT READ ON LU_^1*_]_^1*_$CONSOLE INTERFACE FOR I/O ERRORS_^1*_]_^1EIO_"NUM 0_^1_%LDA* EIO_*ABSOLUTIZE PARAMETER ADDRESS_^1_%ADD* (EIO)_^1_%STA* EIOP+6_^1_%LDA- I_^1_%STA* EIOI_)SAVE I_^1EIOP_!FWRITE $FD,0,0,13,A,0,3,I,0_^1_%FREAD $FD,EIOC-*+1,EIOB-*+5,1,A,0,3,I,X_^1_%JMP- (ADISP)_^1EIOC_!EQU EIOC(*)_%CONSOLE I/O COMP€€LETION_^1_%LDA* EIOI_^1_%STA- I_,RESTORE I_^1_%LDA* EIOB_^1_%ARS 8_^1_%AND- LPMASK+8_^1_%INA -$43_)IS REPLY C_^1_%SAN EIO1_^1_%JMP* EIOX_)EXIT_^1EIO1_!INA -$F_*IS IT R_^1_%SAN EIO2_^1_%ENA -1_+YES, RETURN -1_^1_%JMP* EIOX_^1EIO2_!INA -1_+IS IT S_^1_%SAZ EIO3_^1_%JMP* EIOP_)NO, TRY AGAIN_^1EIO3_!ENA 1_,YES, RETURN 1_^1EIOX_!RAO* EIO_*EXIT_^1_%JMP* (EIO)_^1EIOB_!NUM 0_^1EIO€€I_!NUM 0_,TEMP SAVE OF I_^1_%EJT_]_^1*_]_^1*_$CONVERT AND MOVE FOUR RECORDS (OR MAX RECORDS LEFT IN BUFFER)_^1*_]_^1TC01M EQU TC01M(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%LDA RECCT_(GET RECORD COUNT_^1_%SUB =XMAXREC_$IS IT MAXIMUM FOR THE BLOCK_^1_%SAM TC02M_^1TC03M EQU TC03M(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1TC03€€3 EQU TC033(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%ENA 0_^1_%STA RECCT_(RESET IT_^1_%JMP TP022_(DONE_^1TC02M EQU TC02M(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%LDA- JFLAGS,I_^1_%AND- ONEBIT+15_#IS BLOCK VARIABLE_^1_%SAN TC028_^1_%LDA- JCOFF,I_%YES_^1_%SUB BUFFER_^1_%JMP* TC029_^1TC028 LDA- JCOFF,I_%GET CURRENT OFFSET€€_^1_%SUB- JBLKSZ,I_$SUBTRACT BLOCK SIZE_^1TC029 SAP TC021_^1_%JMP* TC04_^1TC021 ENA 99_^1_%STA TPBUF_(SET FOR NEXT BLOCK_^1_%LDA- JFLAGS,I_$YES_^1_%AND- ONEBIT+8_$IS IT DUMP MODE_^1_%SAN TC023_^1_%ENA 0_^1_%STA- JCOFF,I_%RESET CURRENT OFFSET_^1_%JMP* TC022_^1TC023 ENA 0_,YES,_^1_%STA- JROFF,I_%CLEAR RECORD OFFSET (DUMP MODE)_^1_%LDA- JFLAGS,I_$SET HEADER BIT_^1_%AND- ZROBI€€T+4_^1_%EOR- ONEBIT+4_^1_%STA- JFLAGS,I_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%LDA- JFLAGS,I_^1_%AND- ONEBIT+5_$IS PRINT BUFFER AVAILABLE_^1_%SAZ TC024_(NO, CYCLE AGAIN_^1_%JMP* TC04_^1TC024 LDA- JFLAGS,I_$CLEAR HEADER BIT_^1_%AND- ZROBIT+4_^1_%STA- JFLAGS,I_^1_%ENA 0_^1_%STA- JCOFF,I_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%RTJ GETPB_(€€GET BUFFER_^1_%TRA Q_^1_%STQ CPBUF_^1_%INQ 2_^1_%LDA =N$2045_%PUT EOR IN BUFFER_^1_%STA- 2,Q_^1_%LDA =N$4F52_^1_%STA- 3,Q_^1_%LDA =N$2052_%REC =_^1_%STA- 5,Q_^1_%LDA =N$4543_^1_%STA- 6,Q_^1_%LDA =N$233D_^1_%STA- 7,Q_^1_%RAO- JBLOCC,I_$BUMP RECORD NUMBER_^1_%LDA- JBLOCC,I_^1_%RTJ* LDEC_)CONVERT RECORD NUMBER TO ASCII_^1_%NUM 8_^1_%LDA =N$2053_^1_%STA- 10,Q_^1_%LDA =N$495A€€_^1_%STA- 11,Q_^1_%LDA =N$453D_^1_%STA- 12,Q_^1_%LDA- JBLKSZ,I_^1_%RTJ* LDEC_)CONVERT RECORD SIZE TO ASCII_^1_%NUM 13_^1_%ENQ PBSZ-2_^1_%LDA =N$1B31_^1_%STA (CPBUF),Q_#SET CARRIAGE CONTROL_^1_%RTJ QUEP_)PRINT IT_^1TC022 JMP* TC03M_^1*_$LONG BINARY CONVERSION_^1LDEC_!NUM 0_^1_%STQ* LDECQ_(SAVE Q_^1_%CLR Q_^1_%DVI* LD10_^1_%STQ* LDCT2_^1_%CLR Q_^1_%DVI* LD10_^1_%QLS 8_^1_%€€LLS 16_^1_%EOR* LDCT2_^1_%EOR* LDFF_^1_%STA* LDCT2_^1_%TRQ A_^1_%CLR Q_^1_%DVI* LD10_^1_%STQ* LDCT3_^1_%CLR Q_^1_%DVI* LD10_^1_%QLS 8_^1_%LLS 16_^1_%EOR* LDCT3_^1_%EOR* LDFF_^1_%LDQ* LDECQ_^1_%ADQ* (LDEC)_^1_%STA- (ZERO),Q_^1_%LDA* LDCT2_^1_%STA- 1,Q_^1_%RAO* LDEC_^1_%LDQ* LDECQ_^1_%JMP* (LDEC)_^1LDECQ NUM 0_^1LD10_!NUM 10_^1LDCT2 NUM 0_^1LDCT3 NUM 0_^1LDFF_!NUM $3030_€€^1TC04_!LDA- JFLAGS,I_$GET DS STATUS_^1_%AND- ONEBIT+5_$IS PRINT BUFFER AVAILABLE_^1_%SAZ TC16_)YES, GO GET IT_^1_%JMP TC03M_(NO, CYCLE AGAIN_^1TC16_!EQU TC16(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%RTJ GETPB_(GET PRINT BUFFER_^1_%STA CPBUF_^1_%LDA- JFLAGS,I_$GET STATUS FLAGS_^1_%AND- ONEBIT+8_^1_%SAZ LAB01_(IS IT DUMP MODE_^1_%JMP TC07_)YES,PROCE€€SS DUMP MODE_^1LAB01 LDA- JFLAGS,I_$GET STATUS FLAGS_^1_%AND- ONEBIT+15_^1_%SAZ TC06_)WHAT MODE_^1_%JMP* TC05_)FIXED_^1*_]_^1*_$PROCESS VARIABLE RECORD_^1*_]_^1TC06_!EQU TC06(*)_^1_%LDQ- JCOFF,I_^1_%SQN TC061_(IS IT START OF BLOCK_^1_%INQ 4_,YES, BUMP PAST BLOCK SIZE FIELE_^1_%STQ- JCOFF,I_^1TC061 RTJ GBYTE_^1_%ALS 8_^1_%STA* TC06C_^1_%RAO- JCOFF,I_^1_%RTJ GBYTE_^1_%EOR* T€€C06C_^1_%ADD- JCOFF,I_^1_%INA -1_^1_%STA EOROFF_'SET END OF RECORD_^1_%LDA- JCOFF,I_^1_%INA 3_^1_%STA- JCOFF,I_^1_%JMP* TC08_^1TC06C NUM 0_^1*_]_^1*_$PROCESS FIXED RECORD_^1*_]_^1TC05_!EQU TC05(*)_^1_%LDA- JCOFF,I_%GET CURRENT OFFSET_^1_%ADD- JRECSZ,I_^1_%STA EOROFF_'SET END-OF-RECORD OFFSET_^1*_]_^1*_$COMMON CODE FOR FIXED AND VARIABLE RECORDS_^1*_]_^1TC08_!EQU TC08(*)_^1_€€%ENA 0_^1_%STA BYTC_)CLEAR BYTE COUNT_^1_%STA STARTF_^1_%STA STOPF_^1_%INA 8_^1_%STA POFF_)CLEAR PRINTER BUFFER OFFSET_^1_%RTJ GBYTE_(GET BYTE FROM BUFFER_^1_%RTJ SETCC_(SET CARRIAGE CONTROL_^1TC12_!EQU TC12(*)_^1_%RAO- JCOFF,I_%BUMP CURRENT OFFSET_^1_%RAO BYTC_)BUMP BYTE COUNT_^1_%LDA- JCOFF,I_^1_%SUB EOROFF_'CHECK FOR END-OF-RECORD_^1_%SAZ TC09_^1_%JMP* TC10_)NOT EOR_€€^1TC09_!EQU TC09(*)_^1_%RAO RECCT_(BUMP RECORD COUNT_^1_%LDA STARTF_^1_%SAN TC091_(IS IT OK TO START_^1_%LDA- JFLAGS,I_$YES, CLEAR START BIT_^1_%AND- ZROBIT+13_^1_%STA- JFLAGS,I_^1_%RTJ QUEP_)PRINT LINE_^1_%JMP* TC092_^1TC091 EQU TC091(*)_^1_%LDA CPBUF_^1_%INA 2_^1_%STA- JIOBUF,I_^1_%RTJ FREEPB_'FREE BUFFER WITHOUT PRINTING_^1_%JMP* TC093_(DON'T CHECK STOP MODE_^1TC092 E€€QU TC092(*)_^1_%LDA- JFLAGS,I_^1_%AND- ONEBIT+12_^1_%SAN TC096_^1_%JMP* TC093_^1TC096 EQU TC096(*)_^1_%LDA STOPF_(CHECK STOP MODE_^1_%SAZ TC82_^1_%JMP* TC093_^1TC82_!EQU TC82(*)_^1*_]_^1*_$STOP DATA STREAM_^1*_]_^1_%LDA- JFLAGS,I_$STOP_^1_%AND- ZROBIT+12_#CLEAR STOP BIT_^1_%EOR- ONEBIT+14_#SET SUSPEND_^1_%STA- JFLAGS,I_^1_%ENA -1_^1_%STA TPBUF_(CLEAR TPBUF_^1_%LDA TPNUM_(€€GET COUNT OF ACTIVE DS_^1_%INA -1_^1_%STA TPNUM_^1_%SAN TC099_(ARE THERE ANY STILL ACTIVE_^1_%LDA- JTPLU,I_%NO, BACKSPACE_^1_%STA* BKSP2+4_%SET LU_^1_%RTJ LUCL_)RESTORE ALT DEVICE NUMBER_^1BKSP2 MOTION 0,0,1,,,0,4,3,0,0,0,A_^1TC099 EQU TC099(*)_^1_%LDA RLSFLG_'CHECK FOR ACTIVE CONSOLE_^1_%SAZ TC81_)IS IT ACTIVE_^1_%SCHDLE TABLIB+3-*,3,X_'NO, FIRE IT UP_^1_%CLR A_,CLEAR €€CONSOLE FLAG_^1_%STA RLSFLG_^1TC81_!JMP TP022_^1TC093 EQU TC093(*)_^1_%JMP TC01M_^1TC10_!EQU TC10(*)_^1_%RTJ GBYTE_(GET BYTE FROM BUFFER_^1_%RTJ SSF_*PUT BYTE IN BUFFER (IF APPROPRIATE)_^1_%JMP* TC12_)GET ANOTHER BYTE_^1*_]_^1*_$S S F - PUT BYTE IN BUFFER AND CHECK START, STOP, AND PART_^1*_]_^1SSF_"NUM 0_^1_%RTJ CONVRT_'CONVERT IT_^1_%STA CRBYT_(SAVE IT_^1*_]_^1*_$PROC€€ESS START AND STOP FLAGS_^1*_]_^1_%LDA- JFLAGS,I_^1_%AND- ONEBIT+13_#CHECK FOR START MODE_^1_%SAZ TC101_^1_%ENQ JSTOFF_'START MODE SET_^1_%ENA JSTART_^1_%RTJ MODCHK_^1_%ADD STARTF_'A=0 MEANS BYTES MATCH OR NOT IN START FIELD_^1_%STA STARTF_'A NON- ZERO, NOT A MATCH_^1TC101 LDA- JFLAGS,I_^1_%AND- ONEBIT+12_#CHECK FOR STOP FIELD_^1_%SAZ TC102_^1_%ENQ JSPOFF_'STOP MODE SET_^1€€_%ENA JSTOP_^1_%RTJ MODCHK_^1_%ADD STOPF_^1_%STA STOPF_^1TC102 EQU TC102(*)_^1_%LDA- JFLAGS,I_$NOT END-OF-RECORD_^1_%AND- ONEBIT+11_#CHECK FOR PARTIAL PRINT_^1_%SAZ TC11_^1_%LDA BYTC_)IS IT IN PRINT RANGE_^1_%SUB- JPOFF,I_^1_%SAP LAB02_^1_%JMP* SSFX_)OUT OF RANGE, LOW_^1LAB02 SUB- JPLEN,I_^1_%SAM TC11_^1_%JMP* SSFX_)OUT OF RANGE, HIGH_^1TC11_!EQU TC11(*)_^1_%LDA CRBYT_€€(GET CURRENT BYTE_^1_%RTJ PBYTE_(PUT IT IN BUFFER_^1POFF_!NUM 0_,OFFSET IN PRINT BUFFER_^1_%RAO* POFF_)BUMP PRINTER OFFSET_^1SSFX_!JMP* (SSF)_(EXIT_^1*_]_^1*_$COMPARE BYTES FOR START AND STOP FUNCTIONS_^1*_]_^1*_*Q=OFFSET IN JOB DISC OF FIELD OFFSET_^1*_*A=OFFSET IN JOB DISC OF MASK_^1*_]_^1MODCHK NUM 0_^1_%ADD- I_^1_%STA* MODMSK_'ADDRESS OF MASK_^1_%LDA- (ZERO),B_^1_%STA* MODOF€€F_'OFFSET IN BUFFER_^1_%LDA- 1,B_^1_%STA* MODLEN_'LENGTH OF FIELD_^1_%LDA BYTC_)CURRENT BYTE NUMBER_^1_%SUB* MODOFF_^1_%SAP MOD01_^1MOD02 ENA 0_,OUT OF RANGE_^1_%JMP* (MODCHK)_^1MOD01 LDA BYTC_^1_%SUB* MODLEN_^1_%SUB* MODOFF_^1_%SAM MOD03_^1_%JMP* MOD02_(OUT OF RANGE_^1MOD03 LDA BYTC_)CALCULATE OFFSET IN MASK_^1_%SUB* MODOFF_^1_%TRA Q_^1_%CLR A_^1_%LRS 1_^1_%LDQ* (MODMS€€K),Q_^1_%SAM MOD04_^1_%QRS 8_^1MOD04 TRQ A_^1_%EOR* CRBYT_^1_%AND- LPMASK+8_^1_%SAZ MOD05_^1_%ENA 1_^1MOD05 JMP* (MODCHK)_^1CRBYT NUM 0_,CURRENT BYTE_^1MODMSK NUM 0_,MASK ADDRESS_^1MODOFF NUM 0_,OFFSET IN FIELD_^1MODLEN NUM 0_,LENGTH OF FIELD_^1STARTF NUM 0_^1STOPF NUM 0_^1*_]_^1*_$PROCESS RECORD FOR DUMP FORMAT_^1*_]_^1TC07_!EQU TC07(*)_^1_%LDA- JCOFF,I_%GET CURRENT €€OFFSET_^1_%INA DUMPSZ_'ADD SIZE OF DUMP RECORD_^1_%STA EOROFF_'SET END-OF-RECORD OFFSET_^1_%LDA MESS1_(*_^1_%ENQ 47_+OFFSET OF FIRST *_^1_%STA (CPBUF),Q_#PUT IT IN PRINT BUFFER_^1_%ALS 8_^1_%INQ 16_+BUMP TO NEXT *_^1_%STA (CPBUF),Q_#PUT IT IN BUFFER_^1_%ENQ PBSZ-2_^1_%LDA =N$1B31_^1_%STA (CPBUF),Q_#SET CARRIAGE CONTROL_^1*_]_^1*_$MOVE RECORD OFFSET TO PRINT BUFFER_^1*_]_€€^1_%LDA =N95_^1_%STA* TMP04_^1_%LDA- JROFF,I_%GET PRINT BUFFER OFFSET_^1_%RTJ PHEX_)PUT IT IN PRINT BUFFER_^1_%NUM 9_^1_%ENA DUMPSZ_^1_%ADD- JROFF,I_^1_%STA- JROFF,I_^1_%ENA 14_^1_%STA* TMP02_^1TC13_!EQU TC13(*)_^1_%RTJ GBYTE_(GET TWO BYTES FROM BUFFER_^1_%RTJ PCHAR_^1_%ALS 8_^1_%STA* TMP03_^1_%RAO- JCOFF,I_%BUMP CURRENT OFF SET_^1_%RTJ GBYTE_^1_%RTJ PCHAR_^1_%EOR* TMP03€€_^1_%RTJ PHEX_)DISPLAY THEM IN PRINT BUFFER_^1TMP02 NUM 0_^1_%LDA* TMP02_(BUMP BUFFER OFFSET_^1_%INA 5_^1_%STA* TMP02_^1_%RAO- JCOFF,I_%BUMP TO NEXT BYTE_^1_%LDA- JCOFF,I_^1_%SUB EOROFF_'CHECK FOR END-OF-RECORD_^1_%SAZ TC14_^1_%LDA- JCOFF,I_%NOT EOR_^1_%SUB- JBLKSZ,I_$IS IT EOB_^1_%SAP TC14_)YES_^1_%JMP* TC13_)NO, GET NEXT CHAR_^1TC14_!EQU TC14(*)_^1_%RTJ QUEP_)EOR, QUE TH€€E PRINT BUFFER_^1_%RAO RECCT_(BUMP RECORD COUNT_^1_%JMP TC01M_(GET NEXT RECORD_^1PCHAR NUM 0_,PUT ALPHA CHAR IN LINE OF DUMP_^1_%STA* TMP05_^1_%RTJ CONVRT_^1_%RTJ PBYTE_^1TMP04 NUM 0_^1_%RAO* TMP04_^1_%LDA* TMP05_^1_%JMP* (PCHAR)_^1TMP05 NUM 0_^1TMP03 NUM 0_,TEMPORARY STORAGE_^1_%EJT_]_^1*_]_^1*_$G B Y T E - GET BYTE FROM INPUT BUFFER_^1*_]_^1GBYTE NUM 0_^1_%CLR A_^€€1_%LDQ- JCOFF,I_%GET CURRENT OFFSET_^1_%LRS 1_^1_%SAM GBY01_^1_%LDA BUFFER,Q_$EVEN BYTE_^1_%ARS 8_^1_%JMP* GBY02_^1GBY01 LDA BUFFER,Q_$ODD BYTE_^1GBY02 AND- LPMASK+8_^1_%JMP* (GBYTE)_^1*_]_^1*_$P B Y T E - PUT BYTE IN PRINT BUFFER_^1*_]_^1PBYTE NUM 0_^1_%AND- LPMASK+8_^1_%STA* PBY01_(SAVE INPUT BYTE_^1_%LDA* (PBYTE)_^1_%SUB =N140_^1_%SAM PBY05_^1_%RAO* PBYTE_(BYTE OUT O€€F RANGE OF BUFFER_^1_%JMP* (PBYTE)_^1PBY05 EQU PBY05(*)_^1_%LDQ* (PBYTE)_%GET OFFSET_^1_%RAO* PBYTE_(SET EXIT_^1_%CLR A_^1_%LRS 1_^1_%SAM PBY04_^1_%LDA* PBY01_(EVEN OFFSET_^1_%ALS 8_^1_%STA* PBY01_^1_%LDA- LPMASK+8_^1_%JMP* PBY03_^1PBY04 LDA- NZERO+8_%ODD OFFSET_^1PBY03 AND (CPBUF),Q_^1_%EOR* PBY01_^1_%STA (CPBUF),Q_^1_%JMP* (PBYTE)_^1PBY01 NUM 0_^1_%EJT_]_^1*_]_^1*_$P €€H E X - CONVERT BINARY WORD TO HEX AND PUT IN PRINT BUFFER_^1*_]_^1PHEX_!NUM 0_^1_%STA* PH01_)SAVE BINARY WORD_^1_%LDA* (PHEX)_^1_%STA* PH02_)SAVE OFFSET AS PARAMETER_^1_%RAO* PHEX_)SET EXIT_^1_%ENA -4_+SET CHARACTER COUNT_^1_%STA* PH03_^1PHBK_!LDA* PH01_^1_%CLR Q_^1_%LLS 4_^1_%STA* PH01_^1_%RAO* PH03_^1_%INQ -10_^1_%SQP PH04_^1_%INQ $3A_*NUMERIC CHARACTER_^1_%JMP* PHPT_^1P€€H04_!INQ $41_*ALPHA CHARACTER_^1PHPT_!TRQ A_^1_%RTJ PBYTE_(PUT BYTE IN BUFFER_^1PH02_!NUM 0_^1_%RAO* PH02_^1_%LDA* PH03_^1_%SAZ PH05_)ARE WE DONE_^1_%JMP* PHBK_)NO, GET NEXTNYBLE_^1PH05_!JMP* (PHEX)_'YES, EXIT_^1PH01_!NUM 0_^1PH03_!NUM 0_^1_%EJT_]_^1*_]_^1*_$C O N V R T - CONVERT BYTE ACCORDING TO TC TABLE FOR JOB_^1*_]_^1CONVRT NUM 0_^1_%LDQ- JTCTAB,I_$GET TC TABLE ADDR€€ESS_^1_%SQN CON01_^1_%STA* CONCC_(DEFAULT - MAKE LEGAL CHARACTER_^1_%INA -32_*HEX 20_^1_%SAM CON011_^1_%INA -65_*HEX 40_^1_%SAP CON011_^1_%LDA* CONCC_(LEGAL CHARACTER_^1_%JMP* (CONVRT)_^1CON011 ENA $2E_*ILLEGAL CHARACTER_^1_%JMP* (CONVRT)_$MAKE IT LEGAL (PERIOD)_^1CON01 SUB- TBAS,Q_'SUBTRACT BASE_^1_%SUB- (ZERO),Q_$CHECK RANGE_^1_%SAM CON2_^1CON33 LDA- TBAS,Q_'MAKE IT BLAN€€K_^1_%JMP* (CONVRT)_$EXIT_^1CON2_!ADD- (ZERO),Q_^1_%SAP CON22_^1_%JMP* CON33_^1CON22 EQU CON22(*)_^1_%TRA Q_^1_%CLR A_^1_%LRS 1_^1_%ADQ- JTCTAB,I_$ADD OFFSET TO ADDRESS OF TABLE_^1_%SAM CON4_^1_%LDA- 2,Q_*EVEN BYTE_^1_%ARS 8_^1CON3_!AND- LPMASK+8_^1_%JMP* (CONVRT)_$EXIT_^1CON4_!LDA- 2,Q_^1_%JMP* (CONVRT)_^1CONCC NUM 0_^1_%EJT_]_^1*_]_^1*_$F R E E P B - FREE PRINTER BUFFE€€R_^1*_]_^1FREEPB NUM 0_^1_%STQ* FRSV_^1_%LDQ- JIOBUF,I_^1_%INQ -2_+CALCULATE BUFFER ADDRESS_^1_%STQ* FRC1_)SAVE ADDR OF BUFFER TO FREE_^1_%RTJ FRCG_^1FRCG_!NUM 0_^1_%LDA* FRCG_^1_%SUB =XFRCG-QHEAD ABSOLUTIZE ADDR OF QHEAD_^1_%STA* FRC2_^1FR03_!LDA* (FRC2)_'GET ADDR OF NEXT BUFFER IN CHAIN_^1_%EOR* FRC1_)IS IT THE ONE WE WANT_^1_%SAZ FR04_^1_%EOR* FRC1_)NO, POINT TO NEXT BUFF€€ER_^1_%STA* FRC2_^1_%SAP FR031_^1_%JMP* FR041_(NOT ON QUE, FREE ANYWAY_^1FR031 EQU FR031(*)_^1_%JMP* FR03_^1FR04_!LDA* (FRC1)_'YES, CHANGE LINK THAT POINTS TO IT_^1_%STA* (FRC2)_^1FR041 LDQ* FRC1_)ADDRESS OF BUFFER TO BE FREED_^1_%ENA 0_^1_%STA- (ZERO),Q_$MARK BUFFER FREE_^1_%STA- JIOBUF,I_^1_%LDA- JFLAGS,I_^1_%EOR- ONEBIT+5_$WAS TAPE READER ASLEEP_^1_%SAZ FR05_^1_%LDA TPTR_€€)IS TAPE I/O IN PROCESS_^1_%SAN FR05_)IF SO, DON'T SCHDLE TAPE READER_^1_%LDA- I_,YES, WAKE IT UP_^1_%STA* FRC3_^1_%SCHDLE TP01-*+1,3,X_^1_%LDA* FRC3_^1_%STA- I_^1FR05_!LDA- JFLAGS,I_^1_%AND- ZROBIT+5_^1_%STA- JFLAGS,I_$SET BUFFER AVAILABLE_^1_%LDQ* FRSV_^1_%JMP* (FREEPB)_^1FRSV_!NUM 0_,Q SAVED_^1FRC1_!NUM 0_^1FRC2_!NUM 0_^1FRC3_!NUM 0_^1_%EJT_]_^1*_]_^1*_$PRINTER CONTROL_^1*€€_]_^1PRINT EQU PRINT(*)_^1_%RTJ TRACE_(****************DEBUG ONLY******************_^1_%RTJ* PRB_^1PRB_"NUM 0_^1_%LDA* PRB_^1_%SUB =XPRB-QHEAD_!DAMN 15 BIT ARITHMETIC_^1_%STA* NMINUS_^1_%LDQ QHEAD_^1PRBK_!SQP PR01_^1_%JMP- (ADISP)_^1PR01_!LDA- 1,Q_*GET JOB DISC ADDRESS_^1_%STA- I_,PUT IT IN I_^1_%LDA- JIOTRD,I_$GET PACKET THREAD_^1_%SAZ PR02_)IS PRINTER BUSY_^1PR01A STQ* N€€MINUS_'YES, TRY NEXT ITEM_^1_%LDQ- (ZERO),Q_$POINT TO NEXT PRINT BUFFER_^1_%JMP* PRBK_^1PR02_!EQU PR02(*)_%PRINTER NOT BUSY_^1_%LDA- JPRLU,I_^1_%STQ* PQSV_^1_%RTJ DSTAT_(GET PRINTER STATUS_^1_%LDQ* PQSV_^1_%SAN PR02A_(IS IT UP_^1_%JMP* PR01A_(NO, TRY AGAIN_^1PR02A LDA- (ZERO),Q_$PRINTER AVAILABLE_^1_%STA* (NMINUS)_$RE-THREAD_^1_%INQ 2_^1_%STQ- JIOBUF,I_$SET BUFFER ADDRESS_^1_%€€LDA- JIOLU,I_^1_%AND- NZERO+8_^1_%EOR- JPRLU,I_^1_%STA- JIOLU,I_%SET LOGICAL UNIT FOR PRINTER_^1_%LDA- I_^1_%INA JIOPKT_^1_%AND- LPMASK+15_^1_%EOR- ONEBIT+15_^1_%STA* IND_*SET INDIRECT BIT_^1_%LDA =XPCOM-PRB_^1_%ADD* PRB_^1_%STA- JIOCOM,I_$SET COMPLETION ADDRESS_^1_%LDA- JPRLU,I_%GET PRINTER LU_^1_%RTJ DVDN_)MARK IT DOWN_^1_%RTJ- ($F4)_(INDIRECT WRITE_^1IND_"NUM 0_^1_%JMP* PRIN€€T_(TRY ANOTHER ONE_^1NMINUS NUM 0_^1PQSV_!NUM 0_^1_%EJT_]_^1*_]_^1*_$R E C O V P - PUT I/O ERROR ON ERROR RECOVERY QUE_^1*_*INPUT - A= I/O PARAMETER ADDRESS_^1*_]_^1RECOVP NUM 0_^1_%RTJ TRACE_#***************DEBUG ONLY******************_^1_%ENQ 7_,SEARCH FOR ENTRY SLOT IN LIST_^1_%STA* RECT_^1RECB_!LDA* ERQUE,Q_^1_%SAZ RECP01_^1_%INQ -1_^1_%SQM RECP02_^1_%JMP* RECB_^1RECP0€€2 JMP- (ADISP)_%TABLE FULL ******ERROR******_^1RECP01 LDA* RECT_)PUT ADDRESS IN EMPTY SLOT_^1_%STA* ERQUE,Q_^1_%LDA- I_^1_%STA* RECT2_^1_%SCHDLE RECOV-*+1,3,X_^1_%LDA* RECT2_^1_%STA- I_^1_%JMP* (RECOVP)_^1RECT_!NUM 0_^1RECT2 NUM 0_^1ERQUE BZS ERQUE(8)_^1_%EJT_]_^1*_]_^1*_$R E C O V_"- I/O ERROR RECOVERY_^1*_]_^1RECOV EQU RECOV(*)_^1_%RTJ TRACE_#***************DEBUG ONLY***€€***************_^1_%LDA* BUSY_^1_%SAZ NOTBZY_^1_%JMP- ($EA)_(ERROR RECOVERY ALREADY IN PROCESS_^1NOTBZY EQU NOTBZY(*)_^1_%ENQ 7_^1ER01_!LDA* ERQUE,Q_%FIND NEXT I/O PACKET ADDRESS_^1_%SAN ER03_^1_%INQ -1_^1_%SQM ER02_^1_%JMP* ER01_^1ER02_!JMP- (ADISP)_%QUE EMPTY_^1ER03_!EQU ER03(*)_^1_%RTJ TRACE_#***************DEBUG ONLY******************_^1_%STA ERADR_^1_%RAO* BUSY_^1_%EN€€A 0_^1_%STA* ERQUE,Q_%REMOVE FROM QUE_^1_%LDQ ERADR_^1_%LDA- (ZERO),Q_^1_%ARS 9_^1_%AND- LPMASK+5_^1_%STA ERFCT_(SAVE FUNCTION CODE_^1_%LDA- 3,Q_^1_%AND- LPMASK+8_^1_%STA ERLU_)SAVE LU_^1_%LDA ERFCT_(GET FUNCTION CODE_^1_%INA -2_+IS IT A WRITE_^1_%SAZ ER04_^1_%INA -4_^1_%SAZ ER04_)IS IT A FWRITE_^1_%JMP* ER08_)NO_^1*_]_^1*_$PRINTER ERROR_^1*_]_^1ER04_!EQU ER04(*)_^1_%RTJ€€ TRACE_#***************DEBUG ONLY******************_^1_%LDA ERADR_^1_%INA -JIOPKT_^1_%STA- I_^1_%LDA ERLU_^1_%RTJ LUOUT_^1_%STA MESS2+11_^1_%RTJ EIO_*SEND NOT READY MESSAGE_^1_%ADC* MESS2_^1_%ENQ 0_^1_%STQ* BUSY_^1_%SAP ER36_^1_%LDA ERADR_(RETRY_^1_%EOR- ONEBIT+15_^1_%STA* ERT2_^1_%RTJ- ($F4)_(RETRY PRINT_^1ERT2_!NUM 0_^1_%JMP RECOV_^1ER36_!EQU ER36(*)_^1_%SAN ER27_^1€€ER161 EQU ER161(*)_^1_%LDA ERLU_)CONTINUE_^1_%RTJ DVUP_)MARK DEVICE UP_^1_%CLR Q_^1_%LDA ERADR_^1_%JMP PCOM_^1*_]_^1*_$SUSPEND PRINT_^1*_]_^1ER27_!EQU ER27(*)_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%LDA ERLU_^1_%RTJ DVUP_^1_%RTJ* ERPR_^1ERPR_!NUM 0_^1_%LDA* ERPR_^1_%SUB =XERPR-QHEAD_^1_%STA* ERMIN_^1_%LDQ QHEAD_^1ERBK_!EQU ERBK(*)_^1_%SQP ERP01_^€€1_%STQ* (ERMIN)_^1_%JMP* ERPRX_(NOTHING ON QUEUE_^1ERP01 EQU ERP01(*)_^1_%LDA- 1,Q_*GET JOB DISCRIPTION_^1_%EOR- I_,IS IT ONE TO BE SUSPENDED_^1_%SAZ ERP02_^1_%STQ* ERMIN_(NO, GET NEXT ONE_^1_%LDQ- (ZERO),Q_^1_%JMP* ERBK_^1ERMIN NUM 0_^1BUSY_!NUM 0_+ERROR RECOVERY BUSY FLAG_^1ERP02 EQU ERP02(*)_^1_%LDA- (ZERO),Q_$DELETE FROM QUEUE_^1_%STA* (ERMIN)_^1_%CLR A_^1_%STA- (ZERO)€€,Q_$CLEAR THREAD_^1_%LDQ* ERMIN_^1_%JMP* ERBK_^1ERPRX EQU ERPRX(*)_^1_%LDA- JFLAGS,I_^1_%AND- ZROBIT+10_^1_%EOR- ONEBIT+10_#SET PRESUSPEND_^1_%AND- ZROBIT+5_^1_%STA- JFLAGS,I_^1_%LDQ- JIOBUF,Q_^1_%INQ -2_^1_%CLR A_^1_%STA- (ZERO),Q_$FREE CURRENT BUFFER_^1_%SCHDLE TP01-*+1,3,X_^1_%JMP* RECOV_^1ER08_!EQU ER08(*)_%TAPE I/O ERROR_^1_%RTJ TRACE_#***************DEBUG ONLY**********€€********_^1_%LDA TPCQ_)* TEMPORARY FOR ONE DATA STREAM_^1_%AND- ONEBIT+14_#* TEMPORARY FOR ONE DATA STREAM_^1_%SAZ ER088_'-* TEMPORARY FOR ONE DATA STREAM_^1SHORTE EQU SHORTE(*)_#SHORT READ ERROR_^1_%LDA ERLU_^1_%RTJ LUOUT_^1_%STA MESS5+9_^1_%RTJ EIO_^1_%ADC* MESS5_^1_%JMP* ERCOM_^1ER088 EQU ER088(*)_^1_%LDQ ERLU_^1_%LDQ+ LOG1A,Q_%GET PDT ADDRESS_^1_%LDA- 18,Q_)GET ERROR €€CODE_^1_%INA -3_^1_%SAN ER09_)IS IT A PARITY ERROR_^1_%LDA ERLU_)YES_^1_%RTJ LUOUT_^1_%STA MESS3+9_^1_%RTJ EIO_*PUT MESSAGE ON THE CONSOLE_^1_%ADC* MESS3_^1_%JMP* ERCOM_(PROCESS COMPLETION_^1ER09_!EQU ER09(*)_%IS DEVICE NOT READY_^1_%INA -11_^1_%SAN ER10_^1_%LDA* ERLU_)YES_^1_%RTJ LUOUT_^1_%STA MESS2+11_^1_%RTJ EIO_*PUT MESSAGE ON CONSOLE_^1_%ADC* MESS2_^1_%JMP* ERCOM_(€€PROCESS COMPLETION_^1ER10_!EQU ER10(*)_%GENERAL I/O ERROR_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%INA 14_^1_%RTJ LUOUT_^1_%STA MESS4+5_^1_%LDA* ERLU_^1_%RTJ LUOUT_^1_%STA MESS4+11_^1_%RTJ EIO_^1_%ADC* MESS4_^1ERCOM EQU ERCOM(*)_$ERROR COMPLETION_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%STA* ERET_)SAVE ERROR RETURN_^1_%ENA 0_^1_%STA€€* BUSY_)CLEAR BUSY FLAG_^1_%LDA* ERFCT_(GET FUNCTION CODE_^1_%INA -1_^1_%SAN ER11_^1_%JMP* ER12_)READ FUNCTION_^1ER11_!INA -3_^1_%SAZ ER12_^1_%JMP* ER15_)BACKSPACE OR PRINT FUNCTION_^1ER12_!EQU ER12(*)_%TAPE READ_^1_%RTJ TRACE_#***************DEBUG ONLY******************_^1_%LDA* ERET_^1_%SAP ER13_^1_%JMP* ERETRY_'RETRY_^1ER13_!SAN ER14_^1_%JMP* ECONT_(CONTINUE_^1ER14_!EQU €€ ER14(*)_%SUSPEND_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%LDA ISAVE_^1_%STA- I_^1_%LDA- JFLAGS,I_^1_%AND- ZROBIT+10_^1_%EOR- ONEBIT+10_#SET PRE-SUSPEND BIT_^1_%STA- JFLAGS,I_^1_%LDA- JTPLU,I_^1_%RTJ DVUP_)MARK TAPE AVAILABLE_^1_%ENA 0_^1_%STA TPFLAG_'CLEAR TAPE BUFFER BUSY FLAG_^1_%SCHDLE RECOV-*+1,3,X_^1_%RAO PFLAG_^1_%JMP TP022_^1ECONT EQU ECONT(*)_$C€€ONTINUE_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%LDA* ERLU_^1_%RTJ DVUP_)MARK TAPE UP_^1_%ENA 0_^1_%STA TPFLAG_'CLEAR TAPE BUFFER BUSY FLAG_^1_%SCHDLE RECOV-*+1,3,X_^1_%LDA ISAVE_^1_%STA- I_^1_%JMP TP09_^1ERETRY EQU ERETRY(*)_#RETRY_^1_%RTJ TRACE_(*****************DEBUG ONLY*************_^1_%ENA -1_^1_%STA TPBUF_^1_%LDA* ERLU_^1_%STA* BKS2+4_^1BKS2_!BSR€€* 0,,,BKSCOM,3_^1_%SCHDLE TP01-*+1,3,X_^1_%JMP RECOV_^1ER15_!EQU ER15(*)_%COMPLETION FOR_)BACKSPACE_^1_%RTJ TRACE_#***************DEBUG ONLY******************_^1_%LDA* ERET_^1_%SAP ER16_^1_%LDA* ERADR_(RETRY_^1_%EOR- ONEBIT+15_^1_%STA* ERT_^1_%RTJ- ($F4)_(RETRY I/O_^1ERT_"NUM 0_^1_%JMP RECOV_^1ER16_!SAN ER17_^1_%LDA* ERLU_)CONTINUE_^1_%RTJ DVUP_)MARK DEVICE UP_^1_%JMP RECO€€V_^1*_]_^1*_$SUSPEND JOB FOR PRINT ERROR_^1*_$CONTROL COMES HERE FOR BACKSPACE ERROR ******TEMPORARY**_^1*_]_^1*_]_^1*_$BACKSPACE SUSPEND_^1*_]_^1ER17_!EQU ER17(*)_^1_%JMP RECOV_(***TENPORARY FOR ONE DS_^1ERADR NUM 0_,I/O PACKET ADDRESS_^1ERLU_!NUM 0_,LU OF DEVICE IN ERROR_^1ERFCT NUM 0_,FUNCTION CODE_^1ERET_!NUM 0_,STATUS RETURNED FROM CONSOLE_^1_%EJT_]_^1*_]_^1*_$T P C O €€M - TAPE READ COMPLETION_^1*_]_^1TPCOM EQU TPCOM(*)_^1_%RTJ TRACE_#***************DEBUG ONLY******************_^1_%STA* TPCC1_(SAVE PARAMETER ADDRESS_^1_%ENA 0_^1_%STA TPFLAG_'CLEAR TAPE BUFFER BUSY FLAG_^1_%LDA ISAVE_^1_%STA- I_^1_%LDA* TPCC1_^1_%STQ* TPCQ_)SAVE Q_^1_%SQP TPP02_(WAS THERE AN ERROR_^1_%JMP* TPERR_(YES_^1TPP02 EQU TPP02(*)_$NO_^1_%LDA* TPCQ_^1_%AND- ONEBIT€€+14_^1_%SAZ TPP01_(WAS IT SHORT READ_^1_%JMP* TPSR_)YES_^1TPP01 EQU TPP01(*)_$NO ERROR_^1_%LDA- JTPLU,I_^1_%RTJ DVUP_)MARK TAPE UP_^1_%JMP TP09_^1TPSR_!EQU TPSR(*)_%SHORT READ_^1_%LDA- JFLAGS,I_^1_%AND- ONEBIT+8_^1_%SAN TPSSZ_(IS IT DUMP MODE_^1_%JMP* TPSR1_(NO_^1TPSSZ EQU TPSSZ(*)_$YES, CALCULATE TAPE BLOCK SIZE_^1_%RTJ TPSK_^1TPSK_!NUM 0_^1_%LDA* TPSK_^1_%ADD* TPSK01_^€€1_%ADD =XTPSK01-TPSK_^1_%LDQ BUFSIZ_^1_%INQ -1_^1_%SUB BUFFER,Q_^1_%TCA A_,COMPLEMENT BLOCK SIZE_^1_%ALS 1_^1_%STA- JBLKSZ,I_$SET BLOCK SIZE_^1_%JMP* TPP01_(CONTINUE PROCESSING_^1TPSK01 ADC* BUFFER_^1TPSR1 EQU TPSR1(*)_^1_%LDA- JFLAGS,I_$SHORT READ, NOT DUMP MODE_^1_%AND- ONEBIT+15_^1_%SAN TPERR_(IS IT VARIABLE MODE_^1_%JMP* TPP01_(YES, DON'T DO NOTHIN_^1TPERR EQU TPERR(€€*)_$TAPE READ ERROR_^1_%RTJ TRACE_#***************DEBUG ONLY******************_^1_%LDQ- JTPLU,I_%GET LU_^1_%LDQ+ LOG1A,Q_%GET PDT ADDRESS_^1_%LDA- 12,Q_)LOAD ESTAT2_^1_%AND- ONEBIT+11_^1_%SAN TPP03_(IS IT EOF_^1_%JMP* TPC04_(NO_^1TPP03 LDA- JFLAGS,I_$YES, SET PRE-SUS_^1_%AND- ZROBIT+10_^1_%EOR- ONEBIT+10_^1_%STA- JFLAGS,I_^1_%ENA -1_^1_%STA TPBUF_(CLEAR TPBUF_^1_%ENA 0_^1_%ST€€A- JCOFF,I_%RESET CURRENT OFFSET_^1_%LDA- JTPLU,I_^1_%RTJ DVUP_)FREE THE TAPE_^1_%RTJ LUCL_)RESTORE ALT DEVICE NUMBER_^1_%LDA RLSFLG_'SEE IF CONSOLE IS ACTIVE_^1_%SAZ TPP033_^1_%SCHDLE TABLIB+3-*,3,X_^1_%CLR A_^1_%STA RLSFLG_^1TPP033 EQU TPP033(*)_^1_%JMP TP022_^1TPC04 EQU TPC04(*)_^1_%LDA- 12,Q_)LOAD ESTAT2_^1_%AND- ONEBIT+9_^1_%SAZ TPC05_(IS IT EOT_^1_%JMP* TPP03_(YES€€, TREAT AS EOF_^1TPC05 EQU TPC05(*)_$REAL TAPE ERROR_^1_%LDA* TPCC1_(GET PARAMETER ADDRESS_^1_%RTJ RECOVP_'QUE IT_^1_%JMP TP022_^1TPCC1 NUM 0_^1TPCQ_!NUM 0_^1_%EJT_]_^1*_]_^1*_$P C O M - PRINTER COMPLETION_^1*_]_^1PCOM_!EQU PCOM(*)_^1_%RTJ TRACE_#***************DEBUG ONLY******************_^1_%SQP PC01_)WAS THERE AN ERROR_^1_%JMP* PC02_^1PC01_!EQU PC01(*)_%NO_^1_%TRA Q_€€^1_%LDA- 3,Q_*GET LU_^1_%AND- LPMASK+8_^1_%RTJ DVUP_)MARK PRINTER UP_^1_%INQ -JIOPKT_%POINT TO JOB DISCRIPTION_^1_%STQ- I_^1_%RTJ FREEPB_^1PC011 SCHDLE PRINT-*+1,3,X_^1_%JMP- (ADISP)_^1PC02_!EQU PC02(*)_%PRINTER ERROR_^1_%RTJ RECOVP_'PROCESS ERROR_^1_%JMP* PC011_^1*_]_^1*_$B K S C O M - BACKSPACE COMPLETION_^1*_]_^1BKSCOM EQU BKSCOM(*)_^1_%RTJ TRACE_#***************DEBUG ON€€LY******************_^1_%SQM BKS01_(ANY ERROR_^1_%TRA Q_,NO_^1_%LDA- 3,Q_^1_%AND- LPMASK+8_^1_%RTJ DVUP_)MARK PRINTER UP_^1_%SCHDLE TP01-*+1,3,X_^1_%JMP- (ADISP)_^1BKS01 EQU BKS01(*)_$TAPE ERROR_^1_%RTJ TRACE_#***************DEBUG ONLY******************_^1_%RTJ RECOVP_^1_%JMP- (ADISP)_^1_%EJT_]_^1*_]_^1*_$G E T P B - GET PRINTER BUFFER_^1*_]_^1GETPB NUM 0_^1_%RTJ* GTB33_€€^1GTB33 NUM 0_^1_%LDQ* GTB33_^1_%ADQ =XPBUFS-GTB33_^1GT03_!LDA- (ZERO),Q_^1_%SAP GTB01_^1_%INA 2_^1GETHNG SAN GTB011_%**********TEMPORARY***************_^1_%RTJ RERROR_'NO PRINT BUFFER AVAILABLE_^1_%JMP* GTB011_^1GTB01 SAZ GTB02_(IS BUFFER FREE_^1GTB011 INQ PBSZ_)NO, TRY AGAIN_^1_%JMP* GT03_^1GTB02 STQ* GTC01_(FREE BUFFER_^1GTB07 INQ PBSZ_)TRY FOR ANOTHER ONE_^1_%LDA- €€(ZERO),Q_^1_%SAP GTB04_^1_%INA 2_^1_%SAZ GTB071_^1_%JMP* GTB07_^1GTB071 LDA- JFLAGS,I_$NO MORE BUFFERS AVAILABLE_^1_%AND- ZROBIT+5_^1_%EOR- ONEBIT+5_$MARK BUFFER OUT STATUS_^1_%STA- JFLAGS,I_^1GTB05 JMP* GTB08_(INITIALIZE BUFFER_^1GTB04 SAN GTB06_^1_%JMP* GTB05_^1GTB06 JMP* GTB07_^1GTB08 LDQ* GTC01_^1_%ENA 1_^1_%STA- (ZERO),Q_$MARK AS USED_^1_%LDA- I_^1_%STA- 1,Q_*PLUG IN €€JOB DISCRIPTION ADDRESS_^1_%ENA 7-PBSZ_^1_%STA* GTC02_(SAVE COUNT FOR BLANKS_^1GTB09 LDA =N$2020_^1_%STA- 4,Q_*FILL BUFFER WITH BLANKS_^1_%INQ 1_^1_%RAO* GTC02_^1_%LDA* GTC02_^1_%SAZ GTB10_^1_%JMP* GTB09_^1GTB10 LDA =N$1B40_%INITIALIZE CARRIAGE CONTROL_^1_%STA- 6,Q_^1_%INA -$40_^1_%STA- 5,Q_^1_%STA- 4,Q_^1_%LDQ* GTC01_^1_%STA- 2,Q_^1_%STA- 3,Q_^1_%LDA* GTC01_^1_%JMP* (GETPB€€)_^1GTC02 NUM 0_^1GTC01 NUM 0_^1PBUFS NUM 0_,BUFFER 1_^1_%NUM 0_,JOB DISCRIPTION ADDRESS_^1_%NUM $1B00_^1_%NUM $1B00_^1_%BSS (68)_^1_%NUM $1B00_^1_%NUM $1B00_^1_%NUM $1B40_^1_%NUM 0_,BUFFER 2_^1_%NUM 0_^1_%NUM $1B00_^1_%NUM $1B00_^1_%BSS (68)_^1_%NUM $1B00_^1_%NUM $1B00_^1_%NUM $1B40_^1_%NUM 0_,BUFFER 3_^1_%NUM 0_^1_%NUM $1B00_^1_%NUM $1B00_^1_%BSS (68)_^1€€_%NUM $1B00_^1_%NUM $1B00_^1_%NUM $1B40_^1_%NUM 0_,BUFFER 4_^1_%NUM 0_^1_%NUM $1B00_^1_%NUM $1B00_^1_%BSS (68)_^1_%NUM $1B00_^1_%NUM $1B00_^1_%NUM $1B40_^1_%NUM -2_+END OF TABLE_^1_%EJT_]_^1*_]_^1*_$S E T C C - SET UP CARRIAGE CONTROL_^1*_]_^1SETCC NUM 0_^1_%STA* SE01_)SAVE CC BYTE_^1_%ENA 2_,SET BUFFER OFFSET FOR CONTROL BYTES_^1_%STA* SEC03_^1_%LDQ- JCCTAB,I_$GET€€ CC TABLE ADDRESS_^1_%SQN SE02_)IS IT DEFAULT_^1_%LDA =N$1B31_%YES, DEFAULT IS S1 P_^1_%ENQ POSTB+3_^1_%STA (CPBUF),Q_^1_%JMP* SE04_^1SE02_!LDA- (ZERO),Q_$GET TABLE SIZE_^1_%STA* SEC01_(SAVE IT_^1_%ALS 1_^1_%AAQ Q_^1_%INQ -1_^1SEBK_!LDA- (ZERO),Q_$SEARCH CC TABLE_^1_%EOR* SE01_^1_%SAZ SE03_^1_%INQ -2_+NOT A MATCH_^1_%LDA* SEC01_^1_%INA -1_^1_%STA* SEC01_^1_%SAZ SE22_^1_%€€JMP* SEBK_^1SE22_!LDA =N$1B31_^1_%ENQ POSTB+3_^1_%STA (CPBUF),Q_^1_%JMP* SE13_^1SE03_!LDA- 1,Q_*MATCH, GET DATA_^1_%STA* SEC01_(SAVE CONTROL_^1SE23_!CLR Q_^1_%LLS 4_^1_%STA* SEC01_^1_%SQN SE10_^1_%JMP* SE13_)END OF CONTROL_^1SE10_!TRQ A_^1_%INA -1_^1_%SAN SE61_^1_%ENA POSTB+1_^1_%STA* SEC03_^1_%INA 1_^1_%TRA Q_^1_%LDA* CTLS_^1_%JMP* SE62_^1SE61_!EQU SE61(*)_^1_%ADD* CT€€LS_^1_%LDQ* SEC03_^1SE62_!STA (CPBUF),Q_#PUT CONTROL IN BUFFER_^1_%RAO* SEC03_^1_%LDA* SEC01_^1_%JMP* SE23_^1SE04_!EQU SE04(*)_^1_%LDA* SE01_)GET BYTE_^1_%RTJ SSF_*PUT BYTE IN BUFFER_^1_%RAO BYTC_)BUMP BYTE COUNT_^1SE13_!JMP* (SETCC)_%EXIT_^1CTLS_!NUM $1B30_^1SE01_!NUM 0_^1SEC01 NUM 0_^1SEC03 NUM 0_^1*_]_^1*_$Q U E P - PUT BUFFER ON PRINT QUE_^1*_]_^1QUEP_!NUM 0_^1_%LDQ€€ QHEAD_^1_%SQP Q01_*IS QUE EMPTY_^1_%ENA -1_+YES, ADD BUFFER_^1_%LDQ CPBUF_^1_%STA- (ZERO),Q_$MARK THREAD AS END OF QUE_^1_%STQ QHEAD_(PUT BUFFER ADDRESS IN QUE HEAD_^1_%JMP* QUEX_)EXIT_^1Q01_"STQ* QTP_*QUE NOT EMPTY_^1_%LDA- (ZERO),Q_^1_%SAM Q02_^1_%TRA Q_^1_%JMP* Q01_^1Q02_"LDQ CPBUF_(END OF THREAD_^1_%ENA -1_^1_%STA- (ZERO),Q_$SET END OF THREAD_^1_%STQ* (QTP)_(SET LINK €€TO LAST THREAD_^1QUEX_!LDA- I_^1_%STA ISAVE_^1_%SCHDLE PRINT-*+1,3,X_^1_%LDA ISAVE_^1_%STA- I_^1_%JMP* (QUEP)_'EXIT_^1QTP_"NUM 0_^1*_]_^1*_$RESET ALTERNATE DEVICE NUMBER_^1*_]_^1_%EXT LOG1_^1LUCL_!NUM 0_^1_%LDQ- JPRLU,I_%GET PRINTER LU_^1_%LDA+ LOG1,Q_'GET LOG1 FOR PRINTER_^1_%AND- NZERO+12_$CLEAR ALT LU_^1_%EOR- JLGSV1,I_$ADD SAVED VALUE_^1_%STA+ LOG1,Q_'PUT IT BACK_^1_%LDQ-€€ JTPLU,I_^1_%LDA+ LOG1,Q_^1_%AND- NZERO+12_^1_%EOR- JLGSV2,I_^1_%STA+ LOG1,Q_^1_%JMP* (LUCL)_^1*_]_^1*_$D S T A T - DEVICE STATUS_^1*_*INPUT - A=LU_^1*_*OUTPUT- A=1 DEVICE UP_^1*_2A=0 DEVICE DOWN_^1*_]_^1DSTAT NUM 0_^1_%ENQ 7_^1DSTB_!EOR* LLIST,Q_%SEARCH FOR LOGICAL UNIT IN TABLE_^1_%SAZ DST01_(IS THIS IT_^1_%EOR* LLIST,Q_%RECOVER A_^1_%INQ -1_+NO_^1_%SQM DST02_(IS THIS END O€€F LIST_^1_%JMP* DSTB_)NO, LOOK AGAIN_^1DST01 JMP* (DSTAT)_%DEVICE IS DOWN_^1DST02 ENA 1_^1_%JMP* (DSTAT)_%DEVICE IS UP_^1*_]_^1*_$D V U P - MARK DEVICE UP_^1*_]_^1DVUP_!NUM 0_^1_%STQ* DVUQ_^1_%STA* DVC_^1_%RTJ* DSTAT_(GET DEVICE STATUS_^1_%SAN DV01_)IS DEVICE ALREADY UP_^1_%STA* LLIST,Q_%NO, MARK IT UP_^1DV01_!EQU DV01(*)_^1_%LDQ* DVUQ_^1_%JMP* (DVUP)_'EXIT_^1DVUQ_!NUM 0_^1D€€VC_"NUM 0_^1LLIST BZS LLIST(8)_$DEVICE DOWN LIST_^1*_]_^1*_$D V D N - MARK DEVICE DOWN_^1*_]_^1DVDN_!NUM 0_^1_%STQ* DVDQ_^1_%STA* DVDC_^1_%RTJ* DSTAT_(GET DEVICE STATUS_^1_%SAN DVD1_)IS IT ALREADY DOWN_^1_%JMP* DVDX_)YES, EXIT_^1DVD1_!ENQ 7_,NO, FIND EMPTY SLOT_^1DVD2_!LDA* LLIST,Q_^1_%SAN DVD3_)IS THIS SLOT EMPTY_^1_%LDA* DVDC_)YES, USE IT_^1_%STA* LLIST,Q_%MARK DEVICE DOWN€€_^1DVDX_!LDQ* DVDQ_^1_%JMP* (DVDN)_'EXIT_^1DVD3_!INQ -1_^1_%SQM DVD4_)IS IT END OF LIST_^1_%JMP* DVD2_)NO, TRY AGAIN_^1DVD4_!RTJ* RERROR_'DEVICE TABLE FULL_^1DVDC_!NUM 0_^1DVDQ_!NUM 0_^1*_]_^1*_$R E R R O R - REALTIME ERROR_^1*_]_^1RERROR NUM 0_^1_%JMP- (ADISP)_^1_%EQU ROU1(*+3)_^1_%EQU ROU2(ROU1/96)_^1_%EQU ROU3(ROU2+1)_^1_%EQU ROU4(ROU3*96)_^1_%EQU ROU5(ROU4-*)_^1_%EQU €² ROU6(ROU5-3)_^1_%EQU ROU7(ROU3-BASS)_^1_%BZS_!(ROU6)_%ROUND UP TO SECTOR BOUNDARY_^1MODORD NUM 0_,SYSDIR INDEX OF CURRENT MODULE_^1RUNLIB NUM 0_^1TABLIB NUM 0_^1_%END_]_^__²PTTPLIB CSY/ P€1_%NAM TTPLIB_^1*_]_^1*_$T A B L E_!L I B R A R Y_^1*_]_^1*_]_^1SLUG00 MAC_]_^1_%ALF 2,1230_51230_^1_%EMC_]_^1SLUG01 MAC_]_^1_%ALF 2,0123_^1_%EMC_]_^1SLUG02 MAC_]_^1_%ALF 2,4567_^1_%EMC_]_^1SLUG03 MAC_]_^1_%ALF 2,89.-_589.-_^1_%EMC_]_^1SLUG04 MAC_]_^1_%ALF 2,ABCZ_5ABCZ_^1_%EMC_]_^1SLUG05 MAC_]_^1_%ALF 2,DUST_^1_%EMC_]_^1SLUG06 MAC_]_^1_%ALF 2,MNOP_^1_%EMC_]_^1SLUG07 MAC_]_^€€1_%ALF 2,RIFL_^1_%EMC_]_^1SLUG08 MAC_]_^1_%ALF 2,VWXY_^1_%EMC_]_^1SLUG09 MAC_]_^1_%ALF 2,JKQ*_^1_%EMC_]_^1SLUG0A MAC_]_^1_%ALF 2,GHE/_^1_%EMC_]_^1SLUG0B MAC_]_^1_%ALF 02,)#@%_4RT PARA,POUND,AT,PERCENT_^1_%EMC_]_^1SLUG0C MAC_]_^1_%ALF 02,,&+$_4COMMA,AMPHER,PLUS,DOLLAR_^1_%EMC_]_^1SLUG0D MAC_]_^1_%ALF 2,BZ,/_^1_%EMC_]_^1SLUG0E MAC_]_^1_%ALF 2,89AC_^1_%EMC_]_^1SLUG0F MAC_]_^1_€€%ALF 2,(GH)_^1_%EMC_]_^1SLUG11 MAC_]_^1_%ALF 2,+-.E_^1_%EMC_]_^1SLUG1C MAC_]_^1_%ALF 02,[%^]_4RT BKT,PCNT,UP ARROW,LFT BKT_^1_%EMC_]_^1SLUG1D MAC_]_^1_%ALF 02,$_ "=_4DOLLAR,LFT ARROW,QUOTE,EQUAL_^1_%EMC_]_^1SLUG1E MAC_]_^1_%NUM $273F,$2621_1PRIME,QMARK,AMPHER,EXCLAM_^1_%EMC_]_^1SLUG1F MAC_]_^1_%ALF 02,@\<>_4AT,BK SLASH,LT,GT_^1_%EMC_]_^1SLUG20 MAC_]_^1_%ALF 02,:;#=_4COLON,SE€€MICOLON,POUND,EQUAL_^1_%EMC_]_^1SLUG21 MAC_]_^1_%ALF 2,/STU_^1_%EMC_]_^1SLUG22 MAC_]_^1_%ALF 2,ABCD_^1_%EMC_]_^1SLUG23 MAC_]_^1_%ALF 02,$&,Z_4DOLLAR,AMPHER,COMMA,Z_^1_%EMC_]_^1SLUG24 MAC_]_^1_%NUM $283D,$2729_0(,=,PRIME,)_^1_%EMC_]_^1SLUG25 MAC_]_^1_%ALF 02,[%"]_4L.BKT,PCNT,QUOTE,R.BKT_^1_%EMC_]_^1SLUG3A MAC_]_^1_%NUM $2440,$273D_0DOLLAR,AT,PRIMT,EQUAL_^1_%EMC_]_^1SLUG3B MAC_€€]_^1_%ALF 02,#\^!_4POUND,BACK SLASH,CIRFLX,EXCLAM_^1_%EMC_]_^1SLUG3C MAC_]_^1_%ALF 02,&?<>_4AMPHER,QUESTION,LT,GT_^1_%EMC_]_^1SLUG3D MAC_]_^1_%ALF 02,:;?=_4COLON,SEMICOLON,QUESTION,EQUAL_^1_%EMC_]_^1SLUG54 MAC_]_^1_%ALF 2,89GH_^1_%EMC_]_^1SLUG58 MAC_]_^1_%ALF 02,[\/]_4LFT BKT,BK SLASH,SLASH,RT BKT_^1_%EMC_]_^1SLUG59 MAC_]_^1_%ALF 02,;?":_4SEMICOLON,QMARK,QUOTE,COLON_^1_%EMC_]€€_^1SLUG5A MAC_]_^1_%NUM $2829,$2721_0(,),PRIME,EXCLAMA_^1_%EMC_]_^1SLUG5B MAC_]_^1_%ALF 02,_ ><=_4LFT ARROW,GT,LT,EQUAL_^1_%EMC_]_^1SLUG5C MAC_]_^1_%ALF 02,^#@%_4UP ARROW,POUND,AT,PERCEMT_^1_%EMC_]_^1START EQU START(*)_^1JB01_!EQU JB01(*-START)_^1_%BZS (96)_^1JB02_!EQU JB02(*-START)_^1_%BZS (96)_^1*_]_^1*_$ASCII TO ASCII_^1*_]_^1TCAA_!EQU TCAA(*-START)_^1_%NUM 64_+SIZE_^€€1_%NUM $20_*BASE_^1_%NUM $2021_^1_%NUM $2223_^1_%NUM $2425_^1_%NUM $2627_^1_%NUM $2829_^1_%NUM $2A2B_^1_%NUM $2C2D_^1_%NUM $2E2F_^1_%NUM $3031_^1_%NUM $3233_^1_%NUM $3435_^1_%NUM $3637_^1_%NUM $3839_^1_%NUM $3A3B_^1_%NUM $3C3D_^1_%NUM $3E3F_^1_%NUM $4041_^1_%NUM $4243_^1_%NUM $4445_^1_%NUM $4647_^1_%NUM $4849_^1_%NUM $4A4B_^1_%NUM $4C4D_^1_%NUM $4E4F_^1_%NU€€M $5051_^1_%NUM $5253_^1_%NUM $5455_^1_%NUM $5657_^1_%NUM $5859_^1_%NUM $5A5B_^1_%NUM $5C5D_^1_%NUM $5E5F_^1_%BZS (62)_^1TCAE_!EQU TCAE(*-START)_^1*_]_^1*_$ASCII TO EBCDIC TAPE CONVERSION_^1*_]_^1SIZ_"NUM 64_+TABLE SIZE_^1BAS_"NUM $20_*BASE_^1_%NUM $405A_^1_%NUM $7F7B_^1_%NUM $5B6C_^1_%NUM $507D_^1_%NUM $4D5D_^1_%NUM $5C4E_^1_%NUM $6B60_^1_%NUM $4B61_^1_%NUM $F€€0F1_^1_%NUM $F2F3_^1_%NUM $F4F5_^1_%NUM $F6F7_^1_%NUM $F8F9_^1_%NUM $7A5E_^1_%NUM $4C7E_^1_%NUM $6E6F_^1_%NUM $7CC1_^1_%NUM $C2C3_^1_%NUM $C4C5_^1_%NUM $C6C7_^1_%NUM $C8C9_^1_%NUM $D1D2_^1_%NUM $D3D4_^1_%NUM $D5D6_^1_%NUM $D7D8_^1_%NUM $D9E2_^1_%NUM $E3EA_^1_%NUM $E5E6_^1_%NUM $E7E8_^1_%NUM $E9AD_^1_%NUM $E0BD_^1_%NUM $5F5E_^1_%BZS (62)_^1TCEA_!EQU TCEA(STA€€RT-*)_^1*_]_^1*_$EBCDIC TO ASCII_^1*_]_^1_%NUM 186_*TABLE SIZE_^1_%NUM $40_*BASE_^1_%NUM $202E_(SPACE_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2D2E_^1_%NUM $3C28_^1_%NUM $2B20_^1_%NUM $262E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2124_^1_%NUM $2A29_^1_%NUM $3B20_^1_%NUM $2D2F_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM €€$2E2E_^1_%NUM $2E2E_^1_%NUM $2E2C_^1_%NUM $255F_^1_%NUM $3E3F_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $3A23_^1_%NUM $4027_^1_%NUM $3D22_^1_%NUM $2E41_^1_%NUM $4243_^1_%NUM $4445_^1_%NUM $4647_^1_%NUM $4849_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E4A_^1_%NUM $4B4C_^1_%NUM $4D4E_^1_%NUM $4F50_^1_%NUM $5152_^1_€€%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $5354_^1_%NUM $5556_^1_%NUM $5758_^1_%NUM $595A_^1_%NUM $2E2E_^1_%NUM $2E5B_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E5D_^1_%NUM $2E5F_^1_%NUM $2E41_^1_%NUM $4243_^1_%NUM $4445_^1_%NUM $4647_^1_%NUM $4849_^1_%NUM $2E2E_^1_%NUM $2E€€2E_^1_%NUM $2E2E_^1_%NUM $2E4A_^1_%NUM $4B4C_^1_%NUM $4D4E_^1_%NUM $4F50_^1_%NUM $5152_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $5C2E_^1_%NUM $5354_^1_%NUM $5556_^1_%NUM $5758_^1_%NUM $595A_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $2E2E_^1_%NUM $3031_^1_%NUM $3233_^1_%NUM $3435_^1_%NUM $3637_^1_%NUM $3839_^1_%NUM 0_^1*_]_^1*_$USER TABLES_^1*_]_^1TC01_!EQU€€ TC01(*-START)_^1_%BZS (96)_^1TC02_!EQU TC02(*-START)_^1_%BZS (96)_^1TC03_!EQU TC03(*-START)_^1_%BZS (96)_^1CCAS_!EQU CCAS(*-START)_^1_%NUM 16_^1_%NUM $40,$2100_#S1 P_^1_%NUM $F0,$3100_#S2 P_^1_%NUM $60,$3210_#S2 S1 P_^1_%NUM $4E,$1000_$P_^1_%NUM $F1,$4100_#C1 P_^1_%NUM $F2,$5100_#C2 P_^1_%NUM $F3,$6100_#C3 P_^1_%NUM $F4,$7100_#C4 P_^1_%NUM $F5,$8100_$C5_^1_%NUM $€€F6,$9100_#C6 P_^1_%NUM $F7,$A100_#C7 P_^1_%NUM $F8,$B100_#C8 P_^1_%NUM $F9,$C100_#C9 P_^1_%NUM $C1,$D100_#C10 P_^1_%NUM $C2,$E100_#C11 P_^1_%NUM $C3,$F100_#C12 P_^1_%BZS (63)_^1*_]_^1*_$360 MACHINE LANGUAGE CARRIAGE CONTROL_^1*_]_^1CCML_!EQU CCML(*-START)_^1_%NUM 32_+SIZE_^1_%NUM $01,$1000_#P_^1_%NUM $09,$1200_#P S1_^1_%NUM $11,$1300_#P S2_^1_%NUM $19,$1320_#P S2 S1_^1€€_%NUM $89,$1400_#P C1_^1_%NUM $91,$1500_#P C2_^1_%NUM $99,$1600_#P C3_^1_%NUM $A1,$1700_#P C4_^1_%NUM $A9,$1800_#P C5_^1_%NUM $B1,$1900_#P C6_^1_%NUM $B9,$1A00_#P C7_^1_%NUM $C1,$1B00_#P C8_^1_%NUM $C9,$1C00_#P C9_^1_%NUM $D1,$1D00_#P C10_^1_%NUM $D9,$1E00_#P C11_^1_%NUM $E1,$1F00_#P C12_^1_%NUM $0B,$2000_#S1_^1_%NUM $13,$3000_#S2_^1_%NUM $1B,$3200_#S2 S1_^1_%NUM $8€€B,$4000_#C1_^1_%NUM $93,$5000_#C2_^1_%NUM $9B,$6000_#C3_^1_%NUM $A3,$7000_#C4_^1_%NUM $AB,$8000_#C5_^1_%NUM $B3,$9000_#C6_^1_%NUM $BB,$A000_#C7_^1_%NUM $C3,$B000_#C8_^1_%NUM $CB,$C000_#C9_^1_%NUM $D3,$D000_#C10_^1_%NUM $DB,$E000_#C11_^1_%NUM $E3,$F000_#C12_^1_%NUM $03,$0000_#N_^1_%BZS (31)_^1*_]_^1*_$C.D.C. 1700 FORTRAN CARRIAGE CONTROL_^1*_]_^1CCCD_!EQU CCCD(*-STA€€RT)_^1_%NUM 3_,SIZE_^1_%NUM $30,$3100_#S2 P_^1_%NUM $31,$4100_#C1 P_^1_%BZS (91)_^1CC01_!EQU CC01(*-START)_^1_%BZS (96)_^1CC02_!EQU CC02(*-START)_^1_%BZS (96)_^1CC03_!EQU CC03(*-START)_^1_%BZS (96)_^1TP1630 EQU TP1630(*)_^1_%NUM 288_*TRAIN SIZE_^1_%NUM 0_^1_%SLUG01_^1_%SLUG02_^1_%SLUG0D_^1_%SLUG0E_^1_%SLUG0F_^1_%SLUG07_^1_%SLUG06_^1_%SLUG1C_^1_%SLUG05_^1_%SLUG08_^1_%SL€€UG11_^1_%SLUG09_^1_%SLUG01_^1_%SLUG02_^1_%SLUG1D_^1_%SLUG0E_^1_%SLUG0D_^1_%SLUG07_^1_%SLUG06_^1_%SLUG0F_^1_%SLUG05_^1_%SLUG1E_^1_%SLUG11_^1_%SLUG08_^1_%SLUG01_^1_%SLUG02_^1_%SLUG09_^1_%SLUG0E_^1_%SLUG1F_^1_%SLUG07_^1_%SLUG06_^1_%SLUG0D_^1_%SLUG05_^1_%SLUG0F_^1_%SLUG11_^1_%SLUG20_^1_%SLUG01_^1_%SLUG02_^1_%SLUG08_^1_%SLUG0E_^1_%SLUG09_^1_%SLUG07_^1_%SLUG06_^1_%SLUG1C_^1_%SLUG05_^1_%S€€LUG0D_^1_%SLUG11_^1_%SLUG0F_^1_%SLUG01_^1_%SLUG02_^1_%SLUG1D_^1_%SLUG0E_^1_%SLUG08_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG05_^1_%SLUG1E_^1_%SLUG11_^1_%SLUG0D_^1_%SLUG01_^1_%SLUG02_^1_%SLUG0F_^1_%SLUG0E_^1_%SLUG1F_^1_%SLUG07_^1_%SLUG06_^1_%SLUG08_^1_%SLUG05_^1_%SLUG09_^1_%SLUG11_^1_%SLUG20_^1_%BZS (46)_^1*_]_^1PT01_!EQU PT01(*)_^1_%NUM 200_^1_%NUM 0_^1_%SLUG01_^1_%SLUG02_^1_%S€€LUG0D_^1_%SLUG0E_^1_%SLUG0F_^1_%SLUG07_^1_%SLUG06_^1_%SLUG25_^1_%SLUG05_^1_%SLUG08_^1_%SLUG11_^1_%SLUG09_^1_%SLUG01_^1_%SLUG02_^1_%SLUG3A_^1_%SLUG0E_^1_%SLUG0D_^1_%SLUG07_^1_%SLUG06_^1_%SLUG0F_^1_%SLUG05_^1_%SLUG3B_^1_%SLUG11_^1_%SLUG08_^1_%SLUG01_^1_%SLUG02_^1_%SLUG09_^1_%SLUG0E_^1_%SLUG3C_^1_%SLUG07_^1_%SLUG06_^1_%SLUG0D_^1_%SLUG05_^1_%SLUG0F_^1_%SLUG11_^1_%SLUG3D_^1_%SLUG01_^1_%€€SLUG02_^1_%SLUG08_^1_%SLUG0E_^1_%SLUG09_^1_%SLUG07_^1_%SLUG06_^1_%SLUG25_^1_%SLUG05_^1_%SLUG0D_^1_%SLUG11_^1_%SLUG0F_^1_%SLUG01_^1_%SLUG02_^1_%SLUG3A_^1_%SLUG0E_^1_%SLUG08_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG05_^1_%SLUG3B_^1_%SLUG11_^1_%SLUG0D_^1_%SLUG01_^1_%SLUG02_^1_%SLUG0F_^1_%SLUG0E_^1_%SLUG3C_^1_%SLUG07_^1_%SLUG06_^1_%SLUG08_^1_%SLUG05_^1_%SLUG09_^1_%SLUG11_^1_%SLUG3D_^1_€€%BZS (46)_^1*_]_^1*_$TPAN_^1*_]_^1TPAN_!EQU TPAN(*)_^1_%NUM 288_*TRAIN SIZE_^1_%NUM 0_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG0B_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG0B_^1_%SLUG01_^1_%SLUG02_^1_%SLUG€€54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG0B_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG0B_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG0B_^1_%SLUG01_^1_%SLU€€G02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG0B_^1_%BZS (46)_^1TPHN_!EQU TPHN(*)_^1_%NUM 288_*TRAIN SIZE_^1_%NUM 0_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG24_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^€€1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG24_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG24_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG24_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_€€^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG24_^1_%SLUG01_^1_%SLUG02_^1_%SLUG54_^1_%SLUG11_^1_%SLUG22_^1_%SLUG07_^1_%SLUG06_^1_%SLUG09_^1_%SLUG21_^1_%SLUG08_^1_%SLUG23_^1_%SLUG24_^1_%BZS (46)_^1*_$TELEX 63 CHARACTER TRAIN IMAGE_^1*_]_^1TLX63 EQU TLX63(*)_^1_%NUM 288_*TRAIN SIZE_^1_%NUM 0_^1_%SLUG00_^1_%SLUG02_^1_%SLUG03_^1_%SLUG58_^1_%SLUG0C_^1_%S€€LUG59_^1_%SLUG04_^1_%SLUG05_^1_%SLUG06_^1_%SLUG07_^1_%SLUG08_^1_%SLUG09_^1_%SLUG0A_^1_%SLUG00_^1_%SLUG02_^1_%SLUG03_^1_%SLUG5A_^1_%SLUG5B_^1_%SLUG5C_^1_%SLUG04_^1_%SLUG06_^1_%SLUG05_^1_%SLUG0C_^1_%SLUG59_^1_%SLUG07_^1_%SLUG08_^1_%SLUG09_^1_%SLUG0A_^1_%SLUG00_^1_%SLUG02_^1_%SLUG03_^1_%SLUG04_^1_%SLUG05_^1_%SLUG06_^1_%SLUG5A_^1_%SLUG5B_^1_%SLUG5C_^1_%SLUG07_^1_%SLUG08_^1_%SLUG09_^1_%€€SLUG0A_^1_%SLUG58_^1_%SLUG0C_^1_%SLUG59_^1_%SLUG00_^1_%SLUG02_^1_%SLUG03_^1_%SLUG04_^1_%SLUG05_^1_%SLUG06_^1_%SLUG07_^1_%SLUG08_^1_%SLUG5A_^1_%SLUG5B_^1_%SLUG5C_^1_%SLUG09_^1_%SLUG0A_^1_%SLUG00_^1_%SLUG02_^1_%SLUG03_^1_%SLUG0C_^1_%SLUG59_^1_%SLUG04_^1_%SLUG05_^1_%SLUG06_^1_%SLUG07_^1_%SLUG08_^1_%SLUG09_^1_%SLUG0A_^1_%SLUG5A_^1_%SLUG5B_^1_%SLUG5C_^1_%BZS (46)_^1PT02_!BZS (192)_^1P€T03_!BZS (192)_^1_%END_]_^__PRUNMOD CSY/ P€1_%NAM RUNMOD_^1*_]_^1*_$OVERLAY...TYPE.....ROUTINE.......RECURSIVE/_^1*_$NUMBER ASM/BNF_"NAMES_(NON-RECURSIVE R/N_^1*_]_^1*_$.................................._^1*_$ROOT_$ASM_$DOOR (IDOOR) N_^1*_8RET (IRET)_!N/A_^1*_8EOL_*R_^1*_8FALSE_(R_^1*_8HX_+R_^1*_8NM_+R_^1*_8CSTBY_(R_^1*_8SLI_*N_^1*_8CST_*R_^1*_8ST_+R_^1*_8CLI (ICLI)_"N_^1*_8ID_+R_^1*_8RECUR (IRECUR)N/A_^1*_8CLEAR_(N_^1€€*_8PLI_*R_^1*_8ZMVP_)R_^1*_8OUTPUT_'R_^1*_8PLIL_)R_^1*_8NXTREC_'R_^1*_8BYTE_)N_^1*_8CKEOL_(R_^1*_8REL_*R_^1*_8COMMA_(R_^1*_8COMMM_(R_^1*_$.................................._^1*_$01_'ASM_$DSEL1_(R_^1*_8JOBNAM_'R_^1*_$.................................._^1*_$02_'ASM_$SEL_*R_^1*_$.................................._^1*_$03_'ASM_$SEL PT 2_$R_^1*_$.................................._^1*_$0€€4_'ASM_$SEL PT 3_$R_^1*_$.................................._^1*_$05_'ASM_$TPLU_)R_^1*_8PRLU_)R_^1*_8DSTRNG_'R_^1*_$.................................._^1*_$06_'ASM_$RUNSTR_'R_^1*_8RUNCOM_'R_^1*_8CLRTMP_'R_^1*_$.................................._^1*_$07_'ASM_$DATSTM_'R_^1*_8DATSAV_'R_^1*_8DATRUN_'R_^1*_8DATRNX_'R_^1*_8DATASM_'R_^1*_8DATSTR_'R_^1*_8DATSTS_'R_^1*_8DATSTT_'R_^1*_$......€€............................_^1*_$08_'ASM_$BADSTZ_'R_^1*_8LUBUSY_'R_^1*_$.................................._^1*_$09_'ASM_$CHRNMS_'R_^1*_8CHRNMX_'R_^1*_8NMSAV_(R_^1*_$.................................._^1*_$10_'ASM_$START_(R_^1*_8PART_)R_^1*_8CHRSTR_'N_^1*_8CHRSTX_'N_^1*_$.................................._^1*_$11_'ASM_$STOP_)R_^1*_8ASGN_)R_^1*_8CHRSTT_'N_^1*_8CHRSTP_'N_^1*_$.......€€..........................._^1*_$12_'ASM_$SUSP_)R_^1*_8FREE_)R_^1*_8TERM_)R_^1*_$.................................._^1*_$13_'ASM_$RUN_*R_^1*_$.................................._^1*_$14_'ASM_$REW_*R_^1*_8ADF_*R_^1*_8ADR_*R_^1*_8BSF_*R_^1*_8BSR_*R_^1*_$................................._^1*_$15_'ASM_$SKIP_)R_^1*_$.................................._^1*_$88_'BNF_$DRUN1_(R_^1*_8DRUN2_(R_€€^1*_8DSUSP1_'R_^1*_8DSUSP2_'R_^1*_8DFREE1_'R_^1*_8DFREE2_'R_^1*_$.................................._^1*_$89_'BNF_^1*_$.................................._^1*_$90_'BNF_$DSKIP1_'R_^1*_$.................................._^1*_$91_'BNF_$DREW1_(R_^1*_8DADF1_(R_^1*_8DADR1_(R_^1*_8DBSF1_(R_^1*_8DBSR1_(R_^1*_$.................................._^1*_$92_'BNF_$DASGN1_'R_^1*_8DASGN2_'R_^1*_8DASG€€N3_'R_^1*_8DASGN4_'R_^1*_8ASGNLU_'R_^1*_8ASGNTU_'R_^1*_8ASGNPU_'R_^1*_8OPTDSA_'R_^1*_$.................................._^1*_$93_'BNF_$DSTRT1_'R_^1*_8DSTOP1_'R_^1*_8DPART1_'R_^1*_8OPTDSN_'R_^1*_8DATSTT_'R_^1*_8CHRNUM_'R_^1*_8CHRNME_'R_^1*_$.................................._^1*_$94_'BNF_$BADPRX_'R_^1*_8BADPRM_'R_^1*_8BADSTM_'R_^1*_$.................................._^1*_$95_'BNF_$D€€SEL2_(R_^1*_8SELLU_(R_^1*_8SELTU_(R_^1*_8SELPU_(R_^1*_$.................................._^1*_$96_'BNF_$RNCMD3_'R_^1*_$.................................._^1*_$97_'BNF_$RNCMD2_'R_^1*_$.................................._^1*_$98_'BNF_$RNCMD1_'R_^1*_$.................................._^1*_$99_'BNF_$DUMMY_(R_^1*_$.................................._^1*_]_^1*_]_^1*_$MACROS_^1*_]_^1*_$HEAD€€ER - CREATE OVERLAY HEADER_^1*_$RTRT_!- RECURSIVE CALL FROM ROOT TO ROOT MODULE_^1*_$RTOV_!- RECURSIVE CALL FROM ROOT TO OVERLAY MODULE_^1*_$OVRTR - RECURSIVE CALL FROM OVERLAY TO ROOT MODULE_^1*_$OVRTG - DIRECT GO TO FROM OVERLAY TO ROOT MODULE_^1*_$OVOVR - RECURSIVE CALL FROM OVERLAY TO OVERLAY MODULE_^1*_$OVOVG - DIRECT GO TO FROM OVERLAY TO OVERLAY MODULE_^1*_$OVRTJ - RTJ €€TO ROOT MODULE IND (FOR IDOOR,ICLI)_^1*_$OVRET - EXIT VIA RET FROM OVERLAY_^1*_$OVLDA - 1 WORD REL LDA FROM OV TO ROOT INDIRECT_^1*_$OVSTA - 1 WORD REL STA FROM OV TO ROOT INDIRECT_^1*_$OVLDQ - 1 WORD REL LDQ FROM OV TO ROOT INDIRECT_^1*_$OVSTQ - 1 WORD REL STQ FROM OV TO ROOT INDIRECT_^1*_$OVRAO - 1 WORD REL RAO FROM OV TO ROOT INDIRECT_^1*_$OVADD - 1 WORD REL ADD FROM OV TO ROOT€€ INDIRECT_^1*_$OVSUB - 1 WORD REL SUB FROM OV TO ROOT INDIRECT_^1*_$OVADQ - 1 WORD REL ADQ FROM OV TO ROOT INDIRECT_^1*_$ADDR_!- MODIFY 2ND WORD OF 2 WORD REL ADDR FROM OVERLAY TO ROOT_^1*_]_^1*_]_^1*_$MACRO HEADER_^1*_]_^1*_$P1 - OVERLAY NUMBER (2 DIGITS)_^1*_]_^1HEADER MAC P1_^1_%EQU OVN'P1'(*-1)_^1_%EQU OVA'P1'(OVN'P1'/96)_^1_%EQU OVB'P1'(OVA'P1'+1)_^1_%EQU OVC'P1'(OVB'P1'*€€96)_^1_%BSS (OVC'P1'-*)_^1_%EQU BS'P1'(BASE-*)_^1_%EMC_]_^1*_]_^1*_$MACRO RTRT_(ROOT TO ROOT_^1*_]_^1*_$P1 - MODULE NAME_^1*_]_^1RTRT_!MAC P1_^1_(RTJ RECUR_4CALL 'P1'_^1_(VFD N1/1,X15/'P1'-*_^1_%EMC_]_^1*_]_^1*_$MACRO RTOV_(ROOT TO OVERLAY_^1*_]_^1*_$P1 - OVERLAY NUMBER OF ROUTINE (2 DIGITS)_^1*_$P2 - ROUTINE NAME_^1*_]_^1RTOV_!MAC P1,P2_^1_(RTJ RECUR_4CALL 'P2' IN 'P1'_^1_(€€VFD N1/0,N7/'P1',X8/'P2'-'P2'/96*96_^1_%EMC_]_^1*_]_^1*_$MACRO OVRTR_'OVERLAY TO ROOT RECURSIVE_^1*_]_^1*_$P2 - CURRENT OVERLAY NUMBER (2 DIGITS)_^1*_$P1 - ROUTINE NAME_^1*_]_^1OVRTR MAC P1,P2_^1_(VFD N8/$5C,X8/IRECUR-*-BS'P2' CALL 'P1' IN ROOT_^1_(VFD N1/1,X15/'P1'-*-BS'P2'_^1_%EMC_]_^1*_]_^1*_$MACRO OVRTG_'OVERLAY TO ROOT DIRECT_^1*_]_^1*_$P1 - ROUTINE NAME_^1*_$P2 - CURRENT€€ OVERLAY NUMBER (2 DIGITS)_^1*_]_^1OVRTG MAC P1,P2_^1_(VFD N8/$5C,X8/IGO-*-BS'P2'_"GO TO 'P1' IN ROOT_^1_(VFD N1/1,X15/'P1'-*-BS'P2'_^1_%EMC_]_^1*_]_^1*_$MACRO OVOVR_'OVERLAY TO OVERLAY RECURSIVE_^1*_]_^1*_$P1 - OVERLAY NUMBER OF ROUTINE (2 DIGITS)_^1*_$P2 - ROUTINE NAME_^1*_$P3 - CURRENT OVERLAY NUMBER (2 DIGITS)_^1*_]_^1OVOVR MAC P1,P2,P3_^1_(VFD N8/$5C,X8/IRECUR-*-BS'P3' €€CALL 'P2' IN 'P1' FROM 'P3'_^1_(VFD N1/0,N7/'P1',X8/'P2'-'P2'/96*96_^1_%EMC_]_^1*_]_^1*_$OVOVG_-OVERLAY TO OVERLAY DIRECT_^1*_]_^1*_$P1 - OVERLAY NUMBER OF ROUTINE (2 DIGITS)_^1*_$P2 - ROUTINE NAME_^1*_$P3 - CURRENT OVERLAY NUMBER_^1*_]_^1OVOVG MAC P1,P2,P3_^1_(VFD N8/$5C,X8/IGO-*-BS'P3'_"GO TO 'P2' IN 'P1' FROM 'P3'_^1_(VFD N1/0,N7/'P1',X8/'P2'-'P2'/96*96_^1_%EMC_]_^1*_]_^1*_€€$MACRO OVRTJ_'RTJ TO MODULE IN ROOT (ONE WORD RELATIVE IND)_^1*_]_^1*_$P2 - CURRENT OVERLAY NUMBER (2 DIGITS)_^1*_$P1 - ROUTINE NAME_^1*_]_^1OVRTJ MAC P1,P2_^1_(VFD N8/$5C,X8/'P1'-*-BS'P2'_!RTJ* 'P1' FROM 'P2'_^1_%EMC_]_^1*_]_^1*_$MACRO OVRET_'OVERLAY RETURN_^1*_]_^1*_$P1 - CURRENT OVERLAY NUMBER (2 DIGITS)_^1*_]_^1OVRET MAC P1_^1_(VFD N8/$1C,X8/IRET-*-BS'P1'_!RETURN FROM 'P1€€'_^1_%EMC_]_^1*_]_^1*_$MACRO ADDR_^1*_]_^1*_$P1 = NAME OF ROUTINE/DATA CELL IN ROOT_^1*_$P2 = CURRENT OVERLAY NUMBER (2 DIGITS)_^1*_]_^1*_$USED TO GENERATE 2ND WORD OF A 2 WORD RELATIVE REFERENCE TO A_^1*_$ROOT ROUTINE/DATA CELL._^1*_$BACKS PROGRAM COUNTER UP 1 WORD, GENERATES RELATIVE ADDRESS_^1*_]_^1*_$***** IF YOU'RE NOT SURE WHAT'S GOING ON----DON'T WORRY. YOU'RE_^1*_$*****NOT €€ALONE._^1*_]_^1ADDR_!MAC P1,P2_6RELATIVE 'P1'/ROOT FROM 'P2'_^1_(ORG *-1_^1_(VFD X16/'P1'-*-BS'P2'_(REF 'P1' FROM 'P2'_^1_%EMC_]_^1*_]_^1*_$MACROS TO GENERATE 1 WORD RELATIVE INDIRECT INSTS IN OVERLAYS_^1*_]_^1*_$OVLDA_-LDA_^1*_$OVSTA_-STA_^1*_$OVRAO_-RAO_^1*_$OVSTQ_-STQ_^1*_$OVLDQ_-LDQ_^1*_$OVADD_-ADD_^1*_$OVSUB_-SUB_^1*_$OVADQ_-ADQ_^1*_]_^1*_$GENERATE 1 WORD RELATIVE INDIRECT €€INST USING OVERLAY_^1*_$BASE TO CORRECT OFFSET_^1*_]_^1*_]_^1*_$P1 = ROOT CELL CONTAINING ADDRESS OF ACTUAL DATA_^1*_*E.G. ITRUE_^1*_$P2 = CURRENT OVERLAY NUMBER (2WORDS)_^1*_]_^1OVLDA MAC P1,P2_^1_(VFD N8/$CC,X8/'P1'-*-BS'P2'_!LDA 'P1' FROM 'P2'_^1_%EMC_]_^1OVSTA MAC P1,P2_^1_(VFD N8/$6C,X8/'P1'-*-BS'P2'_!STA 'P1' FROM 'P2'_^1_%EMC_]_^1OVLDQ MAC P1,P2_^1_(VFD N8/$EC,X8/'P€€1'-*-BS'P2'_!LDQ 'P1' FROM 'P2'_^1_%EMC_]_^1OVSTQ MAC P1,P2_^1_(VFD N8/$4C,X8/'P1'-*-BS'P2'_!STQ 'P1' FROM 'P2'_^1_%EMC_]_^1OVRAO MAC P1,P2_^1_(VFD N8/$DC,X8/'P1'-*-BS'P2'_!RAO 'P1' FROM 'P2'_^1_%EMC_]_^1OVADD MAC P1,P2_^1_(VFD N8/$8C,X8/'P1'-*-BS'P2'_!ADD 'P1' FROM 'P2'_^1_%EMC_]_^1OVSUB MAC P1,P2_^1_(VFD N8/$9C,X8/'P1'-*-BS'P2'_!SUB 'P1' FROM 'P2'_^1_%EMC_]_^1OVADQ M€€AC P1,P2_^1_(VFD N8/$FC,X8/'P1'-*-'P2'_$ADQ 'P1' FROM 'P2'_^1_%EMC_]_^1_%EJT_]_^1*_]_^1*_$RUNMOD PRECODE FUNCTIONS_^1*_]_^1START EQU START(*)_^1_%JMP* INIT_^1_%JMP RUNMDX_5GO REENTRY_^1INIT_!EQU INIT(*)_^1*_]_^1*_$ABSOLUTIZE INIIRECTS LIST_^1*_]_^1_'EXT* ABS_^1_'LDA ABS_9GET ABS PRM START_^1_'STA* ABSAV_6SABE FOR OVERLAYS_^1_%ENQ 12_^1ABSB_!EQU ABSB(*)_^1_%LDA ITRUE,Q_^1_'A€€DD ABS_9ADD STRT PROG (ABS)_^1_%STA ITRUE,Q_^1_%INQ -1_^1_%SQM ABS0_^1_%JMP* ABSB_^1ABS0_!EQU ABS0(*)_^1*_]_^1*_$SET SECTOR ADDRESS OF TA LE LIBRARY_^1*_]_^1_%ENQ -1_^1_%LDA* START,Q_^1_%STA* TABLIB_^1_%INQ -1_^1_%LDA* START,Q_^1_%STA* LIBSEC_5SAVE LIBSEC_^1_%JMP RUNMOD_5GO STARTUP ROUTINE_^1LIBSEC NUM 0_^1TABLIB NUM 0_^1ABSAV_!NUM 0_^1_%EJT_]_^1*_]_^1*_$JOB TABLE FORMAT E€€QUATES_^1*_]_^1JJBNM EQU JJBNM(0)_3WORD 0 = JOBNAME-4 CHARS_^1JPRLU EQU JPRLU(JJBNM+2)_-WORD 2 = PRINT LOGICAL UNIT_^1JTPLU EQU JTPLU(JPRLU+1)_-WORD 3 = TAPE LOGICAL UNIT_^1JBLKSZ EQU JBLKSZ(JTPLU+1)_,WORD 4 = TAPE BLOCK SIZE_^1JRECSZ EQU JRECSZ(JBLKSZ+1)_+WORD 5 = TAPE RECORD SIZE_^1JFLAGS EQU JFLAGS(JRECSZ+1)_+WORD 6 = FLAGS_^1*_HBIT 15 = FIXED(1)/VARIABLE(0)_^1*_H€€BIT 14 = SUSPENDED(1)/RUNNING_^1*_HBIT 13 = START FIELD_^1*_HBIT 12 = STOP FIELD_^1*_HBIT 11 = PART PRINT_^1*_HBIT 10 = PRE-SUSPEND_^1*_HBIT 9 = ACTIVATE_^1*_HBIT 8 = DUMP_^1*_HBIT 7 = ASSIGNED(SELECTED)_^1*_HBIT 6 = I/O IN PROCESS_^1*_HBIT 5 = TEMP SUSPEND_^1*_HBIT 4 = HEADER OUTPUT_^1*_HBITS 3-0 = UNUSED_^1JCCTAB EQU JCCTAB(JFLAGS+1)_+WORD 7 = CCTAB ADDR_^1JTCTAB EQU JTC€€TAB(JCCTAB+1)_+WORD 8 = TCTAB ADDR_^1JCOFF EQU JCOFF(JTCTAB+1)_,WORD 9 = CURRENT OFFSET_^1JPOFF EQU JPOFF(JCOFF+1)_-WORD 10 = PARTIAL OFFSET_^1JPLEN EQU JPLEN(JPOFF+1)_-WORD 11 = PARTIAL LENGTH_^1JSTOFF EQU JSTOFF(JPLEN+1)_,WORD 12 = START OFFSET_^1JSTLEN EQU JSTLEN(JSTOFF+1)_+WORD 13 = .START LENGTH_^1JSPOFF EQU JSPOFF(JSTLEN+1)_+WORD 14 = .STOP OFFSET_^1JSPLEN EQU JSP€€LEN(JSPOFF+1)_+WORD 15 = STOP LENGTH_^1*_GWORDS 18-23 = I/O PKT_^1JLGSV1 EQU JLGSV1(JSPLEN+1)_+LOG1 SAVE FOR PRINTER_^1JLGSV2 EQU JLGSV2(JLGSV1+1)_+LOG 1 SAVE FOR TAPE_^1JIOPKT EQU JIOPKT(JLGSV2+1)_+I/O PKT FOR DS_^1JIOCOM EQU JIOCOM(JIOPKT+1)_^1JIOTRD EQU JIOTRD(JIOCOM+1)_,THREAD WORD_^1JIOLU_!EQU JIOLU(JIOTRD+1)_,LOGICAL UNIT NUMBER_^1JIOSIZ EQU JIOSIZ(JIOLU+1)_,REC SIZE_^1€€JIOBUF EQU JIOBUF(JIOSIZ+1)_+BUFFER ADDRESS_^1JSTART EQU JSTART(JIOBUF+1)_+WORDS 24-39 = START MASK_^1JSTOP EQU JSTOP(JSTART+16)_+WORDS 40-53 = STOP MASK-32 CHARS_^1JLEN_!EQU JLEN(JSTOP+16)_^1JROFF EQU JROFF(JSTART) OFFSET IN BLOCK (DUMP MODE)_^1JBLOCC EQU JBLOCC(JROFF+1) BLOCK COUNT (DUMP MODE)_^1*_]_^1*_$EQUATES FOR JOB TABLE ON DISK_^1*_]_^1JDPRLU EQU_!JDPRLU(0)_1PRINTE€€R LU_^1JDTPLU EQU_!JDTPLU(JDPRLU+1)_+TAPE LU NBR_^1JDBKSZ EQU JDBKSZ(JDTPLU+1)_,BLOCK SIZE_^1JDRCSZ EQU JDRCSZ(JDBKSZ+1)_,RECORD SIZE_^1JDFLGS EQU JDFLGS(JDRCSZ+1)_,FLAGS_^1JDCCTB EQU_!JDCCTB(JDFLGS+1)_+CCTAB NAME ( 4 CHARS)_^1JDTCTB EQU JDTCTB(JDCCTB+2)_,TCTAB NAME ( 4 CHARS)_^1JBDLEN EQU_!JBDLEN(JDTCTB+2)_*LENGTH_^1*_]_^1*_$FOR DISK RECORD FORMATS_^1*_]_^1DRECLN EQU DRECLN(9€€6)_1LEN DISK RECORD_^1*_]_^1*_$MORE JOB TABLE RECORD STUFF_^1*_]_^1JNMLEN EQU JNMLEN(2)_2LEN OF A JOB NAME_^1JBNNUM EQU JBNNUM(16)_1NBR JOBS IN DISK TABLE_^1JBNLEN EQU JBNLEN(JBNNUM*JNMLEN)_%LEN OF NAMES AREA_^1DRSTLN EQU DRSTLN(DRECLN-JBNLEN)_'SPACE IN SECT 1 AFTRR NAMES_^1JBNUM1 EQU JBNUM1(DRSTLN/JBDLEN)_'NBR JOBS IN SECTOR 1_^1_%EJT_]_^1*_]_^1*_$COMMON DATA AREA_^1*_]_^1*_]€€_^1*_$JOB TABLE ADDRESSES FOR EACH DATA STREAM_^1*_]_^1NBRDS EQU NBRDS(1)_31 DATA STREAM_^1_%ENT AJOB_^1AJOB_!ADC JOB1_^1_%NUM_!0_:DS 2-4 DUMMY_^1_'NUM 0_^1_'NUM 0_^1*_]_^1*_$JOB TABLES_^1*_]_^1JOB1_!BZS JOB1(JFLAGS)_^1_%NUM $4000_4INITIALLY SUSPENDED_^1_'BZS (JIOPKT-JFLAGS-1)_^1_'NUM $0403_7WRITE RP=0,CP=3_^1_'BZS (JIOSIZ-JIOPKT-1)_^1_'NUM 73_9SIZE_^1_'BZS (JLEN-JIOSIZ-1)_^1€€_%EJT_]_^1_%EXT* RLSFLG_^1_%EXT* TP01_^1LOLIM NUM 15_^1HILIM NUM 88_^1_'EJT_^1*_]_^1*_%DISK BUFFERS FOR JOBS,TCTABSZ,CCTABS_^1*_]_^1AJBNAM ADC JBNAMS_^1JBNAMS BZS JBNAMS(DRECLN)_-JOB NAME BFR_^1ACCTAB ADC_!CCTAB_5ADDR CCTAB BFR_^1CCTAB_!BZS CCTAB(DRECLN)_/CCTAB BFR_^1ATCTAB ADC TCTAB_6ADDR TCTAB BFR_^1TCTAB_!BZS TCTAB(DRECLN)_.TCCTAB BFR_^1_%EJT_]_^1*_]_^1*_$TEMP SAVE AREA F€€OR RUNMODE COMMANDS_^1*_]_^1* WORD 0_]_^1*_]_^1*_$FOR ALL COMMANDS EXCEPT DEVICE MANIPULATION&_^1*_*WORD 0 = DATA STREAM NUMBER_^1*_$FOR DEVICE MANIPULATION(REW,BSF,ADF,ETC)&_^1*_*WORD 0 = NUMBER_^1*_$FOR OTHER COMMANDS (LPT,TERM)_^1*_*WORD 0 = UNUSED_^1*_]_^1*_]_^1* WORD 1_]_^1*_]_^1*_$FOR SEL,ASGN,_"DEVICE MANIPULATION (REW,ETC)_^1*_*WORD 1 = TAPE UNIT NUMBER_^1*_$FOR START,STOP,€€PART_^1*_*WORD 1 = STARTING CHARACTER POSITION_^1*_]_^1* WORDS 2-33_^1*_]_^1*_$FOR SEL,ASGN,LPT AND DEVICE MANIPULATION_^1*_*WORD 2 = PRINTER UNIT NUMBER_^1*_$FOR START,STOP_^1*_*WORD 2 = LENGTH OF MASK/END POSITION OF MASK_^1*_$FOR PART_^1*_*WORD 2 = ENDING CHARACTER POSITION_^1*_$FOR SEL_^1*_*WORDS 3,4 = JOBNAME_^1*_$FOR LPT_^1*_*WORDS 3,4 = PRINT TRAIN NAME_^1*_$FOR START,STOP_^€€1*_*WORDS 3-33 = MASK_^1*_]_^1ATEMP ADC TEMPSV_^1TEMPSV BZS TEMPSV(34)_^1*_]_^1*_$RUNMOD - INITIAL ENTRY FOR RUN MODE PROCESSING_^1*_]_^1RUNMOD EQU RUNMOD(*)_^1_%RTOV 06,RUNSTR_^1RUNMDX EQU RUNMDX(*)_^1RNNEXT EQU RNNEXT(*)_^1_%RTOV 06,RUNCOM_^1_%RTOV 98,RNCMD1_^1_%LDA RLSFLG_5CHECK FOR RELEASE_^1_%SAZ RNNXT1_5SKIP IF NO_^1_%JMP- (ADISP)_4YES - EXIT DISP_^1RNNXT1 EQU RNNXT1€€(*)_^1_%JMP* RNNEXT_^1_%EJT_]_^1*_]_^1*_$CKEOL,COMMA AND COMMM - RECURSIVE - ROOT_^1*_]_^1*_$CKEOL_^1*_]_^1*_$IF NEXT CHAR IS EOL, EXIT TRUE_^1*_$OTHERWISE CALL BADPRX IN 94_^1*_]_^1CKEOL EQU CKEOL(*)_^1_%RTRT EOL_^1_%RTJ DOOR_^1_%RTOV 94,BADPRX_^1_%JMP RET_^1*_]_^1*_$COMMA_^1*_]_^1*_$EXIT FALSE IF NEXT CHAR NOT COMMA_^1*_]_^1_%RTJ CLI_^1_%NUM 01_^1_%ALF 01,,_^1_%RTRT CST_^1€€_%JMP RET_^1*_]_^1*_$COMMM_^1*_]_^1*_$IF NEXT NOT COMMA, CALL BADPRX IN 94_^1*_]_^1COMMM EQU COMMM(*)_^1_%RTRT COMMA_^1_%RTJ DOOR_^1_%RTOV 94,BADPRX_^1_%JMP RET_^1*_]_^1*_$REL - RECURSIVE - REL PROCESSOR_^1*_]_^1REL_"EQU REL(*)_^1_%RAO RLSFLG_5SET RELEASE FLAG_^1_%JMP RET_^1_%EJT_]_^1*_]_^1*_$S T A B - STORE TABLE_^1*_]_^1STAB_!NUM 0_^1_%STQ* LBTQ_^1_%ENQ 1_^1_%STQ* TABF€€G_(SET TABLE FLAG TO WRITE_^1_%LDQ* STAB_^1_%STQ* LTAB_^1_%JMP* LTABE_^1TABFG NUM 0_^1*_]_^1*_$L T A B - LOAD TABLE_^1*_]_^1*_*A = BUFFER ADDRESS_^1*_]_^1LTAB_"NUM 0_^1_%STQ* LBTQ_^1_%ENQ 0_^1_%STQ* TABFG_^1LTABE STA* LTAIO+6_%SAVE BUFFER ADDRESS_^1_%LDQ- I_:SAVE I_^1_%STQ* LBTISV_^1_%LDA* (LTAB)_^1_%STA* LTC2_)SAVE FIRST TWO BYTES_^1_%ENQ TABSI_^1_%RAO* LTAB_^1LTABB LDA* LTC€€2_^1_%EOR* CTAB,Q_^1_%SAZ LTA01_^1LTA11 INQ -2_^1_%SQM LTA02_^1_%JMP* LTABB_^1LTA02 ENA 0_^1LTAX_!RAO* LTAB_)EXIT_^1_%LDQ* LBTISV_5RESTORE I_^1_%STQ- I_^1_%LDQ* LBTQ_7RESTORE Q_^1_%JMP* (LTAB)_^1LBTISV NUM_!0_:SAVE 2_^1LBTQ_!NUM 0_^1LTA01 LDA* (LTAB)_^1_%EOR* CTAB+1,Q_^1_%SAZ LTA03_^1_%JMP* LTA11_^1LTA03 QRS 1_^1_%TRQ A_^1_%ADD TABLIB_^1_%STA* LTASEC_^1_%RTJ* LTACG_^1L€€TACG NUM 0_^1_%LDA* LTACG_^1_%ADD =XLTACOM-LTACG_^1_%STA* LTAIO+2_%SET ABSOLUTE COMPLETION ADDRESS_^1_%LDA* TABFG_^1_%SAZ TA01_^1_%LDA =N$0C03_%WRITE_^1_%JMP* TA02_^1TA01_!LDA =N$0803_%READ_^1TA02_!STA* LTAIO+1_^1LTAIO FREAD $C2,0,0,96,B,0,3,I,0_^1_%NUM 0_^1LTASEC NUM 0_^1_%JMP- (ADISP)_^1LTACOM ENA 1_^1_%JMP* LTAX_^1LTC2_!NUM 0_^1SFFF_!NUM $7FFF_^1*_]_^1*_$CONVERSION T€€ABLES_^1*_]_^1CTAB_!EQU CTAB(*)_%TABLE DIRECTORY_^1_%ALF 2,JB01_^1_%ALF 2,JB02_^1_%ALF 2,TCAA_^1_%ALF 2,TCAE_^1_%ALF 2,TCEA_^1_%ALF 2,TC01_^1_%ALF 2,TC02_^1_%ALF 2,TC03_^1_%ALF 2,CCAS_^1_%ALF 2,CCML_^1_%ALF 2,CCCD_^1_%ALF 2,CC01_^1_%ALF 2,CC02_^1_%ALF 2,CC03_^1_%ALF 2,PTFO_^1_%ALF 2,XXFO_^1_%ALF 2,PTAS_^1_%ALF 2,XXAS_^1_%ALF 2,PTAN_^1_%ALF 2,XXAN_^1_%ALF 2,PTH€€N_^1_%ALF 2,XXHN_^1_%ALF 2,PT01_^1_%ALF 2,XX01_^1_%ALF 2,PT02_^1_%ALF 2,XX02_^1_%ALF 2,PT03_^1_%ALF 2,XX03_^1ENDTAB EQU ENDTAB(*)_^1TABSI EQU TABSI(ENDTAB-CTAB-2) OFFSET TO LAST TABLE ENTRY_^1ADISP EQU ADISP($EA)_^1LPMASK EQU LPMASK($2)_^1NZERO EQU NZERO($12)_^1ZERO_!EQU ZERO($22)_^1ONEBIT EQU ONEBIT($23)_^1ZROBIT EQU ZROBIT($33)_^1OBUF_!EQU OBUF(80)_"OUTPUT BUF€€FER SIZE_^1TMSIZ EQU TMSIZ(40)_"TEMP BUFFER SIZE_^1LISIZ EQU LISIZ(40)_^1VAL_"NUM 0_^1_%EJT_]_^1*_]_^1*_'SUBROUTINE BYTE - NON-RECURSIVE_^1*_]_^1*_'RETURNS NEXT INPUT BYTE IN A_^1*_'MAINTAINS CURRENT CHARACTER OFFSET (IN). BUMPED ON EACH CALL._^1*_'MAINTAINS CURRENT RECORD OFFSET (RBASE). UPDATED WHEN A NEW_^1*_-RECORD IS READ._^1*_'SHIFTS CURRENT RECORD INTO BACKBUF AND READS€€ NEW RECORD INTO_^1*_-INBUF WHEN CURRENT CHARACTER IS IN A NEW RECORD._^1*_'ON NEW RECORD READ, RECORD IN WRITTEN TO THE LIST DEVICE._^1*_'IF A COMMENT RECORD HAS BEEN READ, IT IS ALSO WRITTEN TO THE_^1*_-PUNCH DEVICE AND REPLACED WITH THE NEXT RECORD_^1*_'USES FREAD AND FWRITE MACROS._^1*_]_^1*_]_^1*_$GET BYTE FROM INPUT STREAM_^1*_]_^1BYTE_!NUM 0_^1_%RAO IN_^1_%LDA IN_^1_%SUB €€ RBASE_^1_%SUB =N73_^1_%SAP GETREC_^1_%JMP* INREC_^1GETREC ENQ 39_^1_%LDA- NZERO_(FFFF_^1ZF1_#STA INBUF,Q_^1_%INQ -1_^1_%SQM REED1_^1_%JMP* ZF1_^1REED1 LDA- I_^1_%STA IISAV_^1REED_!FREAD $FD,GCMP-*+1,INBUF-*+5,40,A,0,3,I,X_^1_%JMP- (ADISP)_^1GCMP_!LDA RBASE_^1_%ADD =N72_^1_'STA RBASE_^1_%LDA IISAV_^1_%STA- I_^1INREC_!LDA IN_^1_'SUB RBASE_^1_%TRA Q_^1_%CLR A_^1_%LRS 1_^€€1_'SAZ LOWB_^1_'LDA INBUF,Q_^1_%ARS 8_^1_%JMP* BYOT_^1LOWB_!LDA INBUF-1,Q_^1BYOT_!AND- LPMASK+8_^1_%JMP* (BYTE)_^1RBASE NUM -72_^1INBUF BZS INBUF(40)_^1LUP_"EQU LUP(*)_^1_%LDA- $FA_^1_%JMP* LUOT_^1LU4_"EQU LU4(*)_^1_%ENA 4_^1LUOT_!STA OTLU_^1_%JMP RET_^1*_]_^1*_-LOAD OVERLAY_^1*_]_^1LOVER NUM 0_^1_%SAN LOV1_^1_%JMP* ELOVA_^1LOV1_!EQU LOV1(*)_^1_%EOR OLAY_^1_%SAN LO€€V2_^1_%JMP* ELOVA_^1LOV2_!EOR OLAY_^1_%STA OLAY_^1_%LDA =XBASE-START_^1_%CLR Q_^1_%DVI =N96_^1_%ADD LIBSEC_^1_%ADD* OLAY_^1_%INA -1_^1_%STA* DSEC_^1_%LDA- I_^1_%STA IISAV_^1LOVD_!FREAD $C2,ELOV-*+1,BASE-*+5,96,B,0,3,I,X_^1_%NUM 0_^1DSEC_!NUM 0_^1_%JMP- (ADISP)_^1ELOV_!LDA IISAV_^1_%STA- I_^1ELOVA JMP* (LOVER)_^1OLAY_!NUM 0_^1TOLAY NUM 0_^1*_]_^1*_$PROCESS OR_^1*_]_^€€1DOOR_!NUM 0_^1_%LDA TRUE_^1_%SAZ 2_^1_%JMP RET_^1_%RAO TRUE_^1_%JMP (DOOR)_^1*_]_^1*_$EOL_]_^1*_]_^1EOL_"RTJ BYTE_^1_%EOR LPMASK+8_-00FF_^1_%SAZ ZEOL_^1_%ENA 0_^1_%STA TRUE_^1ZEOL_!JMP RET_^1*_]_^1*_'SUBROUTINE FALSE - RECURSIVE_^1*_]_^1*_'CLEARS TRUE (FORCES FALSE)_^1*_]_^1FALSE EQU FALSE(*)_^1_%ENA 0_^1_%STA TRUE_^1_%JMP RET_^1*_]_^1*_'SUBROUTINE HX - RECURSIVE_€€^1*_]_^1*_'EXTRACT HEXIDECIMAL INPUT FROM INPUT BUFFER_^1*_'IGNORE LEADING, EMBEDDED, TRAILING BLANKS_^1*_'IF NEXT CHARACTER IS NON-HEX, RETURN FALSE_^1*_'SCAN UP TO 1ST NON-HEX_^1*_-PLACE CHARACTERS INTO LI OR OS_^1*_-ACCUMULATE BINARY EQUIVALENT IN A AND VAL_^1*_-DO NOT RESET FALSE FROM SLI_^1*_'CALLS CLEAR BYTE AND SLI_^1*_]_^1HX_#EQU HX(*)_^1_%RTJ CLEAR CLEAR LI_^1_%ENA 0_^€€1_%STA* ZHXF CLEAR FLAG_^1_%STA* ZHXAC_^1ZHX5_!RTJ BYTE_^1_%STA* ZHXSV_^1_%SUB =N$20_^1_%SAN ZHX1_^1_%JMP* ZHX5_^1ZHX1_!SUB =N$10_^1_%SAP ZHX3_^1_%JMP* ZHXEX_^1ZHX3_!SUB =N$A_^1_%SAP ZHX2_^1_%JMP* ZHX_^1ZHX2_!SUB =N$7_^1_%SAP ZHX4_^1_%JMP* ZHXEX_^1ZHX4_!SUB =N$6_^1_%SAP ZHXEX_^1_%JMP* ZHX_^1ZHXEX LDA* ZHXF_^1_%SAN ZHX6_^1_%STA TRUE_^1_%JMP RET_^1ZHX6_!LDA* €€ZHXAC_^1_%STA VAL_^1_%JMP* ZBACK_^1ZHX_"LDA* ZHXAC_^1_%ALS 4_^1_%STA* ZHXAC_^1_%LDA* ZHXSV_^1_%RTJ SLI_^1_%LDA* ZHXSV_^1_%SUB =N$3A_^1_%SAP ZHAN_^1_%INA $A_^1_%JMP* ZHALL_^1ZHAN_!INA 3_^1ZHALL EOR* ZHXAC_^1_%STA* ZHXAC_^1_%RAO* ZHXF_^1_%JMP* ZHX5_^1ZHXF_!NUM 0_^1ZHXAC NUM 0_^1ZHXSV NUM 0_^1*_]_^1*_'SUBROUTINE NM - RECURSIVE_^1*_]_^1*_'EXTRACT DECIMAL NUMBER F€€ROM INPUT_^1*_'RETURN FALSE IF NEXT CHAR NON-BLANK, NON-NUMERIC_^1*_'IGNORE LEADING,EMBEDDED,TRAILING BLANKS_^1*_'SCAN UP TO NEXT NON-NUMERIC CHARACTER_^1*_-PUT CHARACTERS INTO LI OREOS AND BINARY INTO A AND VAL_^1*_-DO NOT RESET FALSE FROM SLI_^1*_'CALLS CLEAR BYTE AND SLI_^1*_]_^1NM_!EQU NM(*)_^1_%RTJ CLEAR CLEAR LI_^1_%ENA 0_^1_%STA* ZNMF CLEAR FLAG_^1_%STA* ZNMT CLEAR €€ACC_^1ZNM5_!RTJ BYTE_^1_%STA* ZNM4_^1_%SUB =N$20_^1_%SAN ZNM1_!IS IT BLANK_^1_%JMP* ZNM5 YES, TRY AGAIN_^1ZNM1_!SUB =N$10_^1_%SAM ZNMEX NON-NUMERIC_^1_%SUB =N$A_^1_%SAP_!ZNMEX_^1_%JMP* ZNM2_^1ZNMEX LDA* ZNMF_^1_%SAN ZNM3_!FIRST CHAR_^1_%STA TRUE_!YES, SET FALSE_^1_%JMP RET_^1ZNM3_!LDA* ZNMT NO, TERMINATE INPUT_^1_%STA VAL_"SET VALUE_^1ZBACK LDA IN_^1_%INA -1_^€€1_%STA IN_^1_%JMP RET_^1ZNM2_!LDA* ZNMT_^1_%MUI =N10_^1_%STA* ZNMT_^1_%LDA* ZNM4_^1_%RTJ SLI_^1_%LDA* ZNM4_^1_%AND- LPMASK+4_^1_%ADD* ZNMT_^1_%STA* ZNMT_^1_%RAO* ZNMF_^1_%JMP* ZNM5_^1ZNM4_!NUM 0_^1ZNMF_!NUM 0_^1ZNMT_!NUM 0_^1*_]_^1*_'SUBROUTINE CSTBY - RECURSIVE_^1*_]_^1*_'GETS A BYTE FROM TPST_^1*_'ON ENTRY - A IS BYTE OFFSET_^1*_'ON EXIT - A CONTAINS THE BYTE_^1*_€€]_^1CSTBY NUM 0_^1_%TRA Q_^1_%CLR A_^1_%LRS 1_^1_%SAZ ZCS1_^1_%LDA TPST,Q_^1_%ARS 8_^1ZCEX_!AND- LPMASK+8_^1_%JMP* (CSTBY)_^1ZCS1_!LDA TPST-1,Q_^1_%JMP* ZCEX_^1TRUE_!NUM 1_^1LI_!ALF 20,_^1IN_#NUM 0_^1LIL_"NUM 0_^1OS_#ALF 20,_^1_%ALF 20,_^1OSIZ_!NUM 0_^1*_]_^1*_'SUBROUTINE SLI - NON-RECURSIVE_^1*_]_^1*_'STORE BYTE IN A INTO LI OR OS (DEPENDING ON OUTPUT FLAG)_^1*€€_'EXITS TO FALSE IF LI OR OS EXCEED THEIR CAPACITIES_^1*_'MAINTAIN OUTPUT CHARACTER OFFSET (LIL OR OSIZ)_^1*_'ON ENTRY, A CONTAINS THE BYTE TO BE STORED_^1*_]_^1SLI_"NUM 0_^1_%AND- LPMASK+8_"00FF_^1_%STA SLIT_^1_%LDA OFLAG_^1_%SAN ZSL_^1_%JMP* NOO_^1ZSL_"RAO OSIZ_^1_%LDA OSIZ_^1_%SUB =XOBUF+1_^1_%SAM SLOK_^1_%JMP FALSE_^1SLOK_!LDA =XOS-LI_^1_%ALS 1_^1_%ADD OSIZ_^1_%TRA €€Q_^1_%JMP* SLON_^1NOO_"RAO_!LIL_^1_%LDA LIL_^1_%SUB =XLISIZ+1_^1_%SAM LIOK_^1_%JMP FALSE_^1LIOK_!LDQ_!LIL_^1SLON_!CLR A_^1_%LRS 1_^1_%SAZ SILB_^1_%LDA SLIT_!HIGH BYTE_^1_%ALS 8_^1_%STA SLIT_^1_%LDA LI,Q_^1_%AND- LPMASK+8_^1_%EOR SLIT_^1_%STA LI,Q_^1_%JMP* (SLI)_^1SILB_!LDA LI-1,Q_^1_%AND- NZERO+8_^1_%EOR SLIT_^1_%STA LI-1,Q_^1_%JMP* (SLI)_^1SLIT_!NUM 0_^1*_]_^1*_'SUBRO€€UTINE CST - RECURSIVE_^1*_]_^1*_'COMPARE A STRING OF INPUT CHARACTERS WITH THE STRING IN_^1*_-THE TEMPORARY BUFFER(TPST)._^1*_'RETURN FALSE IF NOT EQUAL, BYTE FOR BYTE._^1*_'LEADING BLANKS IN THE INPUT ARE IGNORED_^1*_'COMPARISON IS DONE FOR THE NUMBER OF BYTES IN TPST_^1*_'CALLS BYTE._^1*_]_^1_%EQU CST(*)_^1_%ENA 1_^1_%STA* CSTC2_^1CSTB_!RTJ BYTE_^1_%SUB =N$20_^1_%SAN CSTON_^1_%J€€MP* CSTB_^1CSTON ADD =N$20_^1CSTON2 STA* CSTC1_^1_%LDA* CSTC2_^1_%RTJ CSTBY_^1CSTT_!EOR* CSTC1_^1_%SAZ MATCH_^1_%CLR A_!ERROR_^1_%STA TRUE_^1_%JMP RET_^1MATCH RAO* CSTC2_^1_%LDA TPSTN_^1_%SUB* CSTC2_^1_%SAM GEND_^1_%RTJ BYTE_^1_%JMP* CSTON2_^1GEND_!JMP RET_^1CSTC1 NUM 0_^1CSTC2 NUM 0_^1*_]_^1*_'SUBROUTINE ST - RECURSIVE_^1*_]_^1*_'PLACE STRING OF CHARS BETWEEN PRIMES (') I€€N LI OR OS_^1*_'RETURN FALSE IF NEXT NON-BLANK CHARACTER IN INPUT IS NOT PRIME_^1*_'SCANS UNTILL CLOSING PRIME IS ENCOUNTERED_^1*_'DOES NOT RESET FALSE FROM SLI_^1*_'CALLS CLEAR, BYTE AND SLI._^1*_]_^1_%EQU ST(*)_^1_%RTJ CLEAR_^1_%RTJ BYTE_^1_%SUB =N$20_^1_%SAN STPR_^1_%JMP* ST_^1STPR_!SUB =N$07_^1_%SAZ STOK_^1_%CLR A_^1_%STA TRUE_^1_%JMP RET_^1STOK_!RTJ BYTE_^1_%SUB =N$27_^1_%S€€AZ STND_^1_%ADD =N$27_^1_%RTJ SLI_^1_%JMP* STOK_^1STND_!JMP RET_^1*_]_^1*_'SUBROUTINE CLI - NON-RECURSIVE_^1*_]_^1*_$MOVE LENGTH IN BYTES (INLINE) TO TPSTN_^1*_$MOVE N BYTES INLINE TO TPST_^1*_-ODD, BLANK PAD LAST WORD._^1*_'RETURN TO NEXT INSTRUCTION AFTER THE DATA_^1*_]_^1CLI_"NUM 0_^1_%LDQ* (CLI)_^1_%STQ TPSTN_^1_%INQ 1_^1_%CLR A_^1_%LRS 1_^1_%RAO* CLI_^1_%INQ -1_^1CLIB_!€€LDA (CLI),Q_^1_%STA TPST,Q_^1_%INQ -1_^1_%SQM CLION_^1_%JMP* CLIB_^1CLION LDQ TPSTN_^1_%CLR A_^1_%LRS 1_^1_%SAN CLIM_^1CLIOUT LDA TPSTN_^1_%INA 1_^1_%ARS 1_^1_%ADD CLI_^1_%STA* CLI_^1_%JMP* (CLI)_^1CLIM_!LDA (CLI),Q_^1_%AND- NZERO+8_^1_%EOR =N$20_^1_%STA TPST,Q_^1_%JMP* CLIOUT_^1TPST_!ALF 20,_^1TPSTN NUM 0_^1*_]_^1*_'SUBROUTINE ID - RECURSIVE_^1*_]_^1*_'MOVE STRI€€NG OF ALPHA-NUMERIC CHARACTERS INTO LI OR OS FROM_^1*_-THE INPUT BUFFER_^1*_'IGNORE LEADING BLANKS._^1*_'RETURN FALSE IF 1ST NON-BLANK ISN'T ALPHA NUMERIC._^1*_'TERMINATE ON NON-ALPHA NUMERIC CHARACTER._^1*_'DOES NOT RESET FALSE FROM SLI._^1*_'CALLS CLEAR,BYTE AND SLI._^1*_]_^1_%EQU ID(*)_^1_%RTJ CLEAR_^1_%CLR A_^1_%STA* IDFG_^1_%STA LIL_^1IDBK_!RTJ BYTE_^1_%STA* IDT_^1_%SUB €€ =N$20_^1_%SAN NBLK_^1_%JMP* IDBK_^1NBLK_!LDA* IDT_^1_%SUB =N$30_^1_%SAM IDER_^1_%SUB =N$A_^1_%SAM IDOK_^1_%SUB =N$7_^1_%SAM IDER_^1_%SUB =N$1A_^1_%SAM IDOK_^1IDER_!LDQ IDFG_^1_%SQN IDEX_^1_%CLR A_^1_%STA TRUE_^1_%JMP* IDEX_^1IDOK_!RAO* IDFG_^1_%LDA* IDT_^1_%RTJ SLI_^1_%RTJ BYTE_^1_%STA* IDT_^1_%SUB =N$20_^1_%JMP* NBLK_^1IDEX_!LDA IN_^1_%INA -1_^1_%STA IN_^1_%JM€€P RET_^1IDFG_!NUM 0_^1IDT_"NUM 0_^1*_]_^1*_'ROUTINE RECUR_^1*_]_^1*_'MAKES RECURSIVE CALLS (SEE RET)_^1*_'OTHERWISE SAVE CALLER'S ADDRESS AND CURRENT INPUT POINTER ON_^1*_-STACK AND JUMP TO ROUTINE WHOSE ADDRESS WAS PASSED_^1*_-IN THE CALLING SEQUENCE_^1*_'IF CURRENT STATE IS FALSE, RETURN DIRECTLY TO CALLING_^1*_-ROUTINE (DO NOT MAKE RECURSIVE CALL)._^1*_]_^1RECUR NUM 0_^1_%R€€TJ* REC01_^1REC01_!NUM 0_^1_%LDA* (RECUR)_^1_%SAP REC02_%IS IT A ROOT REFERENCE_^1_%ALS 1_^1_%ARS 1_'EXTEND SIGN BIT_^1_%ADD* RECUR_^1_%STA EXIT_^1_%ENA 0_^1_%STA TOLAY_^1_%JMP* REC03_^1REC02 ALS 8_)OVERLAY REFERENCE_^1_%ARS 8_)EXTEND SIGN BIT_^1_%ADD* REC01_^1_%ADD =XBASE-REC01_^1_%STA EXIT_^1_%LDA* (RECUR)_^1_%ARS 8_^1_%AND- LPMASK+7_^1_%STA* RECT_)ADJUST OVERLAY NUM€€BER_^1_%SUB LOLIM_(ACCORDING TO LOLIM AND HILIM_^1_%INA -1_^1_%SAP REC04_^1_%LDA* RECT_^1_%JMP* REC05_^1REC04 LDA* RECT_^1_%SUB HILIM_^1_%ADD LOLIM_^1_%INA 1_^1REC05 EQU REC05(*)_^1_%STA TOLAY_^1REC03 RAO* RECUR_^1_%LDA TRUE_^1_%SAN PUSH_^1_%JMP* (RECUR)_^1PUSH_!LDA IN_^1_%LDQ STACKP_^1_%STA* STACK,Q_^1_%LDA* RECUR_^1_%STA* STACK+1,Q_^1_%LDA OLAY_^1_%STA* STACK+2,Q_€€^1_%LDA TOLAY_^1_%RTJ LOVER_%OVERLAY LOAD_^1_%RAO* STACKP_^1_%RAO* STACKP_^1_%RAO* STACKP_^1_%JMP (EXIT)_^1RECT_!NUM 0_^1STACK BZS STACK(100)_^1STACKP NUM 0_^1*_]_^1*_'ROUTINE RET_^1*_]_^1*_'EXIT POINT FOR RECURSIVELY CALLED ROUTINES (SEE RECUR)_^1*_'IF STACK IS EMPTY, EXIT TO DISPATCHER_^1*_'OTHERWISE BACK STACK POINTER UP 2_^1*_'IF CURRENT STATE IS FALSE, RESET INPUT POIN€€TER TO VALUE SAVED_^1*_-ON STACK_^1*_'EXIT TO SAVED RETURN ADDRESS._^1*_]_^1RET_"LDQ* STACKP_^1_%SQZ DONE_^1_%JMP* RETOK_^1DONE_!JMP- (ADISP)_^1RETOK INQ -3_^1_%STQ* STACKP_^1_%LDA TRUE_^1_%SAN NOTT_^1_%LDA STACK,Q_^1_%STA IN_^1NOTT_!LDA STACK+1,Q_^1_%STA* EXIT_^1_%LDA* STACK+2,Q_^1_%RTJ LOVER_%LOADOVERLAY_^1_%JMP* (EXIT)_^1EXIT_!NUM 0_^1*_]_^1*_'SUBROUTINE CLEAR - NON€€-RECURSIVE_^1*_]_^1*_'CLEAR LINE BUFFER_^1*_'SET LIL TO 0 AND STORE BLANKS INTO LI_^1*_]_^1CLEAR NUM 0_^1_%ENQ 0_^1_%STQ LIL_^1_$ENQ 19_^1_%LDA =N$2020_^1AGN_"STA LI,Q_^1_%INQ -1_^1_%SQM CLX_^1_%JMP* AGN_^1CLX_"JMP* (CLEAR)_^1*_]_^1*_'SUBROUTINE PLI - RECURSIVE_^1*_]_^1*_'SET UP TO OUTPUT CONTENTS OF LI_^1*_'MOVE CONTENTS OF LI TO TPST_^1*_'MOVE 20 WORDS FROM LI TO TPST A€€ND SET TPSTN = LENGTH OF LI_^1*_'GO TO ZMVP_^1PLI_"EQU_!PLI(*)_^1_$ENQ 19_^1ZOS1_!LDA LI,Q_^1_%STA TPST,Q_^1_%INQ -1_^1_%SQM ZOS2_^1_%JMP* ZOS1_^1ZOS2_!LDA LIL_^1_%STA TPSTN_^1*_]_^1*_]_^1*_'SUBROUTINE ZMVP - RECURSIVE_^1*_]_^1*_'SET UP TO OUTPUT CONTENTS OF TPST_^1*_'MOVE CONTENTS OF TPST INTO OS BUFFER AND RESET OFLAG SO_^1*_-ANY MORE STORES GO INTO LI._^1*_'CALLS CSTBY A€€ND SLI_^1*_]_^1ZMVP_!EQU ZMVP(*)_^1_%ENQ 1_^1_%STQ OFLAG_^1_%ENQ 0_^1_%STQ ZM1_^1ZMBK_!LDA* ZM1_^1_%INA 1_^1_%RTJ CSTBY_^1_%RTJ SLI_^1_%RAO* ZM1_^1_%LDA TPSTN_^1_%SUB* ZM1_^1_%SAZ ZMA2_^1_%JMP* ZMBK_^1ZMA2_!STA OFLAG_^1_%JMP RET_^1ZM1_"NUM 0_^1OFLAG NUM 0_^1*_]_^1*_'SUBROUTINE OUTPUT - RECURSIVE_^1*_]_^1*_'OUTPUTS THE CONTENTS OF OS_^1*_'SETS OS TO ALL BLANKS_^1*€€_'CLEARS OSIZE_^1*_'USES FWRITE MACRO_^1*_]_^1OUTPUT EQU OUTPUT(*)_^1_%ENA 1_^1_%STA OFLAG_^1_%ENA 13_^1_%RTJ SLI_^1_%ENA 10_^1_%RTJ SLI_^1_%ENA 0_^1_%STA OFLAG_^1PUT_"EQU PUT(*)_^1_%LDA OSIZ_^1_%INA 1_^1_%ARS 1_^1_%STA* OUTPT+5_^1_%LDA- I_^1_%STA IISAV_^1OUTPT FWRITE OTLU-*+3,OUTCOM-*+1,OS-*+5,40,A,0,3,R,X_^1_%JMP- (ADISP)_^1OUTCOM ENQ 39_^1_%LDA IISAV_^1_%STA- €€I_^1_%LDA =N$2020_^1OUTBK STA OS,Q_^1_%INQ -1_^1_%SQM OUTEX_^1_%JMP* OUTBK_^1OUTEX ENA 0_^1_%STA OSIZ_^1_%JMP RET_^1OTLU_!NUM 4_^1*_]_^1*_'SUBROUTINE PLIL - RECURSIVE_^1*_]_^1*_'SUBROUTINE NXTREC - RECURSIVE_^1*_]_^1*_'RESETS INPUT POINTERS TO NEW LOGICAL RECORD_^1*_'CLEARS CURRENT CHARACTER POINTER (IN=0) SO NEXT CHARACTER IS_^1*_-1ST CHAR IN INBUF_^1*_'RBASE IS SET TO €€-72 TO FORCE A READ WHEN THE NEXT INPUT_^1*_-CHARACTER IS RETRIEVED_^1*_]_^1NXTREC EQU NXTREC(*)_^1_%LDA =N-72_^1_%STA RBASE_^1_%ENA 0_^1_%STA IN_^1_%JMP RET_^1*_]_^1*_$IS NEXT CHATACTER A COMMA_^1*_]_^1COMMA RTJ BYTE_^1_%EOR- ONEBIT+5_$IS IT BLANK_^1_%SAN COMMN_^1_%JMP* COMMA_^1COMMN EOR- ONEBIT+5_^1_%EOR =N$2C_^1_%SAN NCOM_^1_%JMP RET_^1NCOM_!JMP FALSE_^1*_]_^1*_$GO€€ TO_^1*_]_^1GO_#NUM 0_^1_%LDA* (GO)_^1_%STA* GOTT_^1_%RAO* GO_^1_%LDQ TRUE_^1_%SQN GO1_^1_%JMP* (GO)_$CONDITION FALSE_^1GO1_"SAP GO2_+IS IT A ROOT MODULE_^1_%ALS 1_,YES_^1_%ARS 1_)EXTEND SIGN BIT_^1_%ADD* GO_^1_%INA -1_+ABSOLUTIZE IT_^1_%STA* GOTT_^1_%JMP* (GOTT)_^1GO2_"ARS 8_,OVERLAY MODULE_^1_%AND- LPMASK+7_^1_%STA* GOTT1_(SAVE OVERLAY NUMBER_^1_%LDA* GOTT_^1_%ALS 8_^1_%€€ARS 8_,EXTEND SIGN BIT_^1_%ADD REC01_^1_%ADD =XBASE-REC01_^1_%STA* GOTT_^1_%LDA* GOTT1_^1_%SUB LOLIM_^1_%INA -1_^1_%SAP GOT4_^1_%LDA* GOTT1_^1_%JMP* GOT5_^1GOT4_!LDA* GOTT1_^1_%SUB HILIM_^1_%ADD LOLIM_^1_%INA 1_^1GOT5_!EQU GOT5(*)_^1_%RTJ LOVER_^1_%JMP* (GOTT)_^1GOTT_!NUM 0_^1GOTT1 NUM 0_^1IISAV NUM 0_^1_%EQU BAS1(*+13)_^1_%EQU BAS2(BAS1/96)_^1_%EQU BAS3(BAS2+1)_€€^1_%EQU BAS4(BAS3*96)_^1_%EQU BAS5(BAS4-*)_^1_%EQU BAS6(BAS5-13)_^1_%BZS (BAS6)_^1ITRUE ADC TRUE_^1IRET_!ADC RET_^1IRECUR ADC RECUR_^1IDOOR ADC DOOR_^1ICLI_!ADC CLI_^1IGO_"ADC GO_^1IBYTE ADC BYTE_^1IVAL_!ADC VAL_^1ITMPSV ADC TEMPSV_^1ILIL_!ADC LIL_^1ITPSTN ADC TPSTN_^1ICLEAR ADC CLEAR_^1ISLI_!ADC SLI_^1BASE_!EQU BASE(*)_^1BS01_!EQU BS01(0)_^1_%EJT_]_^1*_]_^1*_€€$TAPE BUFFER GOES AT END OF OVERLAY AREA_^1*_]_^1_%ENT BUFFER_^1BUFFER EQU BUFFER(BASE+96)_^1_%EJT_]_^1*_]_^1*_$OVERLAYS 1-4_%SELECT PROCESSING_^1*_]_^1*_$CHECKS FOR VALID JOBNAME ON SEL COMMAND_^1*_]_^1*_*IF YES, EXIT DIRECTLY TO DSEL2 IN 95_^1*_*IF INVALID, OUTPUT BAD JOBNAME MESSAGE AND RETURN_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*DSEL1_(01_^1*_*JOBNAM_'01_^1*_]_^€€1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*CLI_*ROOT VIA ICLI_^1*_*ID_+ROOT_^1*_*DOOR_)ROOT VIA IDOOR_^1*_]_^1*_$EXITS DIRECTLY TO&_^1*_]_^1*_*DSEL2_(95_^1*_*BADBKX_'94_^1*_]_^1_%EJT_]_^1*_]_^1* CHECK FOR VALID ALPHA NUMERIC STRING. FALSE IF NO._^1* CALL ROUTINE TO GET JOB. FALSE IF NO SUCH JOB._^1* IF NOT VALID JOBNAME, OUTPUT ERROR MESSAGE._^1*_]_^1DSEL1 EQU DSEL1(*)_^1_%OVR€€TR ID,01_^1_%OVOVR 01,JOBNAM,01_^1_%OVOVG 95,DSEL2,01_^1_%OVRTJ IDOOR,01_^1_%OVRTJ ICLI,01_^1_%NUM 15_^1_%ALF 08,INVALID JOBNAME_^1_%OVRTR ZMVP,01_^1_%OVRTR OUTPUT,01_^1_%OVRET 01_^1*_]_^1*_$JOBNAM - RECURSIVE_^1*_]_^1*_$VERIFY JOBNAME NON 0 , LESS THAN 4 CHARS_^1*_$EXIT FALSE IF NOT VALID LENGTH_^1*_$MOVE JOBNAME TO TEMP SAVE AREA (WORDS 3,4)_^1*_$RETRUN TRUE_^1*_]_^1JOBNAM EQ€€U JOBNAM(*)_^1_%OVLDA ILIL,01_3GET NBR CHARS_^1_%SAZ JOBN05_6SKIP IF 0_^1_%INA -5_9CHECK FOR MAX JBNAM LEN (4)_^1_%SAM_!JOBN10_5SKIP IF LEGAL_^1JOBN05 EQU JOBN05(*)_^1_%OVRTG FALSE,01_^1JOBN10 EQU JOBN10(*)_^1_%LDA LI_9GET 1ST 2 CHARS_^1_%ADDR LI,01_^1_%STA TEMPSV+3_4STORE INTO TEMPSV_^1_%ADDR TEMPSV+3,01_^1_%LDA LI+1_8NEXT 2_^1_%ADDR LI+1,01_^1_%STA TEMPSV+4_4STORE IN TEN€€PSV_^1_%ADDR TEMPSV+4,01_^1_%OVRET 01_^1_%EJT_]_^1*_]_^1*_$OVERLAY 02_(SEL COMMAND PROCESSOR, ALWAYS TRUE_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*SEL_*02_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*CLI_*ROOT VIA ICLI_^1*_*ZMZP_)ROOT_^1*_*OUTPUT_'ROOT_^1*_]_^1*_$EXITS&_^1*_]_^1*_*DIRECTLY TO SEL19 IN OVERLAY 3_^1*_*VIA RET_^1*_]_^1_%HEADER 02_^1_%EJT_]_^1*_]_^1*_$SEL €€- RECURSIVE_^1*_]_^1*_$ROUTINE TO PROCESS SEL COMMAND_^1*_$ON ENTRY, TEMPSV CONTAINS_^1*_]_^1*_*WORD 1_'TAPE UNIT OR 0_^1*_*WORD 2_'PRINTER UNIT OR 0_^1*_*WORDS 3,4_#JOBNAME_^1*_]_^1*_$DATA STREAM SELECTION_^1*_$JOBNAME VERIFICATION AND PROCESSING_^1*_$DATA STREAM SETUP_^1*_$CONVERSION TABLE SETUP_^1*_$SELECTION MESSAGE OUTPUT_^1*_*JOBNAME ERROR_^1*_*DATA STREAM ERROR_^1*_]_^1SEL_"€€EQU SEL(*)_^1*_]_^1*_$DATA STREAM SELECTION_^1*_]_^1*_$SELECT LOWEST NON-ASSIGNED DATA STREAM AND SAVE NUMBER_^1*_$IF NONE AVAILABLE, ISSUE ERROR MESSAGE AND EXIT_^1*_]_^1_%ENQ 1_:START AT 1_^1SEL02 EQU SEL02(*)_^1_%OVSTQ ITMPSV,02_1SAVE_^1_%LDQ AJOB-1,Q_^1_%ADDR AJOB-1,02_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND- ONEBIT+7_3CHECK ASSIGNED BIT_^1_%SAN SEL03_6SKIP IF NOT AVAILABLE_€€^1_%JMP* SEL10_7GO ON IF AVAILZBLE_^1SEL03 EQU SEL03(*)_^1_%OVLDQ ITMPSV,02_1GET D.S. NBR_^1_%TRQ A_^1_%INA -NBRDS_5CHECK FOR MAX_^1_%SAP SEL04_6OVER MAX, SKIP_^1_%INQ 1_:ELSE INCREMENT_^1_%JMP* SEL02_6AND LOOP_^1SEL04 EQU SEL04(*)_^1_%OVRTJ ICLI,02_^1_%NUM 24_^1_%ALF 12,NO AVAILABLE DATA STREAM_^1_%JMP* SELEX_6EXIT_^1*_]_^1*_$READ JOB NAME TABLE RECORD_^1*_$SEARCH FOR MA€€TCH ON JOB NAME_^1*_*NO FIND, ERROR MESSAGE AND EXIT_^1*_$SAVE ORDINAL, CONVERT TO OFFSET, SAVE OFFSET_^1*_*IF IN NEXT RECORD, READ NEXT RECORD_^1*_$LOCATE JOB ENTRY_^1*_]_^1SEL10 EQU SEL10(*)_^1_'LDA AJBNAM_6GET JOB NAME BFR ADDR_^1_'ADDR AJBNAM,02_^1_'RTJ LTAB_8READ 1ST SECTOR_^1_%ADDR LTAB,02_^1_%ALF 02,JB01_4JOB TABLE 1ST SECTOR_^1_%LDQ AJBNAM_5GET ADDR JOB TABLE BFR_^1_%AD€€DR AJBNAM,02_^1_%STQ- $FF_8I = TABLE POINTER_^1_%LDQ =XJBNNUM_4A = NAME COUNT_^1SEL12 EQU SEL12(*)_^1_%LDA- (ZERO),I_3COMPARE 2 CHARS_^1_%SUB TEMPSV+3_^1_%ADDR TEMPSV+3,02_^1_%SAN SEL14_6SKIP NOT EQUAL_^1_%LDA- 1,I_8COMPARE 2 CHARS_^1_%SUB TEMPSV+4_^1_%ADDR TEMPSV+4,02_^1_%SAN SEL14_7SKIP IF NOT EQUAL_^1_%JMP* SEL18_7SKIP ON EQUAL NAMES_^1SEL14 EQU SEL14(*)_^1_%INQ -1_9DE€€CR COUNT, GO NEXT_^1_%SQZ SEL16_6GO ERROR IF END_^1_%RAO- $FF_8BUMP PTR_^1_%RAO- $FF_^1_%JMP* SEL12_6LOOP_^1SEL16 EQU SEL16(*)_^1_%OVRTJ ICLI,02_^1_%NUM 15_^1_%ALF 08,INVALID JOBNAME_^1SELEX EQU SELEX(*)_^1_%OVRTR ZMVP,02_^1_%OVRTR OUTPUT,02_^1_%OVRET 02_^1SEL18 EQU SEL18(*)_^1_%TCQ A_^1_%INA JBNNUM_^1_%INA -JBNUM1_4CHECK FOR MAX 1ST SECTOR_^1_'SAP SEL19_7SKIP IF 2ND SE€€CTOR_^1*_]_^1*_%SECTOR 1 -- CALC OFFSET AND SAVE_^1*_]_^1_%INA JBNUM1_5RESTORE INDEX_^1_'MUI =XJBDLEN_4A=NBR*LEN=OFFSET_^1_%INA JBNLEN_6ADD LEN FOR NAMES LIST_^1_'STA TEMPSV+6_4SABE OFFSET_^1_%ADDR TEMPSV+6,02_^1_'OVOVG 03,SEL22,02_/GO TO NEXT OVERLAY_^1*_]_^1*_%SECTOR 2_^1*_]_^1SEL19_!EQU SEL19(*)_^1_'STA TEMPSV+6_4SAVE INDEX FOR NEXT_^1_%ADDR TEMPSV+6,02_^1_'OVOVG 03,SEL20,02_€€^1*_]_^1*_$OVERLAY 03_(CONTINUE SEL PROCESSING_^1*_]_^1_%HEADER 03_^1*_]_^1*_%ENTRY FOR SECTOR 2_^1*_]_^1SEL20 EQU SEL20(*)_^1_'LDA AJBNAM_6GET BFR ADDR_^1_%ADDR AJBNAM,03_^1_'RTJ LTAB_8READ 2ND SECTOR_^1_'ADDR LTAB,03_^1_%ALF 02,JB02_4JOB TABLE 2ND SECTOR_^1_'LDA TEMPSV+6_4GET SAVED INDEX_^1_'ADDR TEMPSV+6,03_^1_'MUI =XJBDLEN_4A=INDEX*OFFSET_^1_%JMP* SEL23_7BUPASS SECTOR 1 ENTR€€Y_^1*_]_^1*_%SECTOR 1 ENTRU_^1*_]_^1SEL22 EQU SEL22(*)_^1_'LDA TEMPSV+6_3GET SAVED OFFSET_^1_'ADDR TEMPSV+6,03_^1SEL23_!EQU SEL23(*)_^1_%ADD AJBNAM_5ADD DISK BFR ADDR TO OFFSET_^1_%ADDR AJBNAM,03_^1_%STA TEMPSV+6_3SAVE DISK ADDR_^1_%ADDR TEMPSV+6,03_^1*_]_^1*_$MOVE DATA FROM JOB TABLE TO JOB ENTRY_^1*_$SET ASSIGNED BIT_^1*_$OVERRIDE TAPE/PRINTER UNIT NBRS_^1*_]_^1_%OVLDQ ITMPSV€€,03_^1_%LDQ AJOB-1,Q_4GET ADD JOB TA LE FOR DS_^1_%ADDR AJOB-1,03_^1_%LDA TEMPSV+3_3MOVE JOBNAM TO JOB TAB ENT_^1_%ADDR TEMPSV+3,03_^1_%STA- (ZERO),Q_^1_%LDA TEMPSV+4_^1_%ADDR TEMPSV+4,03_^1_%STA- 1,Q_^1_%INQ 2_^1_%STQ- $FF_8I = JOB ENTRY IN MEMORY_^1_%LDQ TEMPSV+6_3Q = ADDR JOB ENTRY FROM DISK_^1_%ADDR TEMPSV+6,03_^1_%TRQ A_:A = DISK ADDRESS_^1_%ADD =XSEL2A_4CALC END ADDR_^1€€SEL2A EQU SEL2A(JFLAGS+1-2)_*NBR WORDS TO MOVE_^1_'STA TEMPSV+7_4SAVE END ADDR_^1_'ADDR TEMPSV+7,03_^1SEL24 EQU SEL24(*)_^1_%LDA- (ZERO),Q_^1_%STA- ($FF)_0STORE_^1_%INQ 1_:BUMP_^1_%RAO- $FF_8POINTERS_^1_%TRQ A_:CHECK FOR END_^1_'SUB TEMPSV+7_4CHECK FOR END_^1_'ADDR TEMPSV+7,03_^1_%SAZ SEL26_6SKIP IF END_^1_%JMP* SEL24_6ELSE LOOP_^1SEL26 EQU SEL26(*)_^1_%OVLDQ ITMPSV,03_1RE€€STORE JOB TABLE ADDRESS_^1_%LDQ AJOB-1,Q_4FROM DS NBR AND ADDR TABLE_^1_%ADDR AJOB-1,03_^1_%STQ- $FF_8I = JOB TABLE POINTER_^1_%LDA TEMPSV+1_3TAPE NBR FROM SEL COMMAND_^1_%ADDR TEMPSV+1,03_^1_%SAZ SEL28_7SKIP IF 0_^1_%STA- JTPLU,I_4OVERRIDE_^1SEL28 EQU SEL28(*)_^1_%LDA TEMPSV+2_3PRINTER UNIT_^1_%ADDR TEMPSV+2,03_^1_%SAZ SEL30_6SKIP IF 0_^1_%STA- JPRLU,I_4OVERRIDE_^1SEL30 EQ€€U SEL30(*)_^1_%LDA- JFLAGS,I_-GET FLAGSPP_^1_%AND- ONEBIT+8_-CHECK FOR DUMP MODE_^1_%SAZ SEL3E_0SKIP IF NOT_^1_%JMP* SEL3F_(IF YEZ, BUPASS CHECK_^1SEL3E EQU SEL3E(*)_^1*_+NEXT INST ASSUMES A = 0_^1_%SUB =XBS03_5CORRECD BFR SIZE FOR OVERLAY_^1_%EOR- ONEBIT+15_2OFFSET, MAKE 15 BIT NBR_^1_%ADD* BFSZRL_^1_%STA* BFSZRL_^1BFSZRL EQU BFSZRL(*+1)_^1_%LDA BUFSIZ_/GET BUFFRR SIZE_^1_%LD€€Q- JBLKSZ,I_3GET BLKSIZE_^1_%QRS 1_:CNVRT TO WORDS_^1_%TCQ Q_:A = BUFFER SIZE - BLKSIZE_^1_%AAQ A_^1_%SAP SEL3F_0SKIP IF BFR.GE.BLKSIZ_^1_%LDA- JFLAGS,I_3CLEAR ASSIGNED BIT_^1_%AND- ZROBIT+7_^1_%STA- JFLAGS,I_^1_%OVOVG 94,BADBKX,03_.GO PUT OUT BAD BLOCKSIZ MSG_^1SEL3F EQU SEL3F(*)_^1_%LDA- $FF_8GET I TO SABE_^1_'STA TEMPSV+7_3SAVE I_^1_'ADDR TEMPSV+7,03_^1_%OVOVG 04,SEL32,03_^1€€_%EXT* BUFSIZ_^1*_]_^1*_$OVERLAY 04_(MORE SEL PROCESSING_^1*_]_^1_%HEADER 04_^1*_]_^1*_$SET UP TAPE + CARRIAGE CONTROL TABLE ADDRESSES_^1*_*IF IN MEMORY, BUMP USE COUNT_^1*_*OTHERWISE, LOAD AND BUMP USE COUNT_^1*_$CLEAR REMAINING FIELDS_^1*_$CONVERT DATA STREAM NBR TO ASCII_^1*_$SET UP MESSAGE AND OUTPUT_^1*_$EXIT_^1*_]_^1SEL32 EQU SEL32(*)_^1_'LDA TEMPSV+7_3RESTORE I_^1_'ADDR TE€€MPSV+7,04_^1_%STA- $FF_^1_%ENA 0_^1_%STA- JCOFF,I_^1_%STA- JPOFF,I_^1_%STA- JPLEN,I_^1_%STA- JSTOFF,I_^1_%STA- JSTLEN,I_^1_%STA- JSPOFF,I_^1_%STA- JSPLEN,I_^1*_]_^1*_%LOAD CONVERSION TABLES_^1*_]_^1_'LDQ TEMPSV+6_4GET DISK BFR ADDR_^1_%ADDR TEMPSV+6,04_^1_%LDA- JDCCTB,Q_3GET CCTAB NAME (4CHARS)_^1_%STA* SEL35_^1_'SUB =N$2020_5CHECK FOR BLANKS_^1_'SAN SEL3A_7GO ON IF NOT_^1_'ENA 0€€_;IF YES, CLEAR CCTA ADDR_^1_%STA- JCCTAB,I_^1_%JMP* SEL3B_7BYPASS READ_^1SEL3A_!EQU SEL3A(*)_^1_%LDA- JDCCTB+1,Q_^1_%STA* SEL35+1_^1_%LDA ACCTAB_6SET UP BFR ADDR_^1_%ADDR ACCTAB,04_^1_%STA- JCCTAB,I_^1_'RTJ LTAB_7LOAD CCTAB_^1_%ADDR LTAB,04_^1SEL35_!EQU SEL35(*)_^1_'ALF 02,_^1SEL3B_!EQU SEL3B(*)_^1_%LDA- JDTCTB,Q_3GET TCTAB NAME (4CHARS)_^1_%STA* SEL37_^1_'SUB =N$2020_5CHECK FOR€€ BLANKS_^1_'SAN SEL3C_7GO ON IF NOT_^1_'ENA 0_;IF YES, CLEAR TCTA ADDR_^1_%STA- JTCTAB,I_^1_%JMP* SEL3D_7BYPASS READ_^1SEL3C_!EQU SEL3C(*)_^1_%LDA- JDTCTB+1,Q_^1_%STA* SEL37+1_^1_%LDA ATCTAB_6SET UP BFR ADDR_^1_%ADDR ATCTAB,04_^1_%STA- JTCTAB,I_^1_'RTJ LTAB_7LOAD CCTAB_^1_%ADDR LTAB,04_^1SEL37_!EQU SEL37(*)_^1_'ALF 02,_^1SEL3D EQU_!SEL3D(*)_^1_%OVLDA ITMPSV,04_1GET D.S. NBR_^1_%€€ADD =X$2030_4CONVERT TO ASCII_^1_%STA* SEL41_6STORE IN MSG_^1_%LDA- (ZERO),I_3MOVE JOBNAME_^1_%STA* SEL40_6TO MSG_^1_%LDA- 1,I_^1_%STA* SEL40+1_^1_%OVRTJ ICLI,04_^1_%NUM 28_^1SEL40 EQU SEL40(*)_^1_%ALF 13,_#ASSIGNED DATA STREAM_^1SEL41 EQU SEL41(*)_^1_%ALF 01,_^1_%OVRTR ZMVP,04_^1_%OVRTG OUTPUT,04_^1_%EJT_]_^1*_]_^1*_$OVERLAY 05_(TPLU,PRLU,DSTRNG_^1*_]_^1*_$CONTAINS RECURSI€€VE ROUTINES &_^1*_]_^1*_*TPLU_)05_^1*_*PRLU_)05_^1*_*DSTRNG_'05_^1*_]_^1*_$CONTAINS NON RECUSIVE ROUTINES_^1*_]_^1*_*DCKEOL_'05_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*EOL_*ROOT_^1*_]_^1*_$EXITS DIRECTLY TO &_^1*_]_^1*_*RET_*ROOT_^1*_*FALSE_(ROOT_^1*_*BADPRX_'94_^1*_]_^1*_$CALLS NON-RECURSIVE ROUTINES_^1*_]_^1*_*BYTE_)ROOT_^1*_*CLEAR_(ROOT_^1*_*SLI_*ROOT_^1*_]_^1_%HEADER 0€€5_^1_%EJT_]_^1*_]_^1*_$SUBROUTINES TPLU AND PRLU - RECURSIVE_^1*_]_^1*_$TPLU - VERIFY TAPE LOGICAL UNIT NUMBER AND SAVE_^1*_$PRLU - VERIFY PRINTER LOGICAL UNIT NUMBER AND SAVE_^1*_$BOTH - EXIT FALSE IF NUMBER IN VAL IS VALID DEVICE_^1*_]_^1_%EXT LOG1A_^1TPLU_!EQU TPLU(*)_^1_%LDA =N$0800_4MASK FOR TAPE_^1_%ENQ 1_:STORE OFFSET FOR TAPE_^1_%JMP* LUNIT_^1PRLU_!EQU PRLU(*)_^1_%LDA €€ =N$2800_4MASK FOR PRINTER_^1_%ENQ 2_:STORE OFFSET FOR PRINTER_^1LUNIT EQU LUNIT(*)_^1_%STA* LUNT25+1_3SET UP MASK INST_^1_%STQ* LUNT35+1_3SET UP SAVE INST_^1_%OVLDA IVAL,05_3GET LUNBR_^1_%SAN LUNT10_5GO ON IF NOT 0_^1_%JMP* LUNTER_5GO ERROR EXIT_^1*_]_^1*_$LOCATE LOG1A TABLE_^1*_$CHECK NBR AGAINST MAX_^1*_$PICK UP PDT ADDRESS_^1*_]_^1LUNT10 EQU LUNT10(*)_^1_%LDQ =XLOG1A_4GET€€ LOG1A PTR_^1_%LDA- (ZERO),Q_3GET MAX_^1_%OVSUB IVAL,05_^1_%SAM LUNTER_5ERROR IF NBR .GT. MAX_^1_%JMP* LUNT20_5ELSE CONTINUE_^1LUNTER EQU LUNTER(*)_^1_%OVRTG FALSE,05_^1*_]_^1*_$CHECK PDT EQUIP TYPE - ERROR IF WRONG_^1*_$IF OK, SAVE LU NBR AND EXIT TRUE_^1*_]_^1LUNT20 EQU LUNT20(*)_^1_%LDQ (VAL),Q_4GET PDT ADDR_^1_%ADDR VAL,05_^1_%LDA- 8,Q_8GET PDT EQUIP TYPE_^1_%AND =N$3800_4€€MASK OFF REST_^1LUNT25 EQU LUNT25(*)_^1_%SUB =N$0800_4CHECK TYPE_^1_%SAZ LUNT30_5SKIP IF OK_^1_%JMP* LUNTER_5ELSE ERROR_^1LUNT30 EQU LUNT30(*)_^1_%OVLDA IVAL,05_^1_%LDQ ATEMP_6GET TEMP AREA ADDR_^1_%ADDR ATEMP,05_^1*_]_^1*********THID MUST BE A 2 WORD INSTRUCTION_^1*_]_^1LUNT35 EQU LUNT35(*)_^1_%STA+ 1,Q_8SAVE IN TEMP_^1_%OVRET 05_^1_%EJT_]_^1*_]_^1*_$DSTRNG - RECURSIVE_^1*_]€€_^1*_$EXTRACT AND SAVE DELIMITER_^1*_*IF EOL, EXIT TO BAD PARAMETER/FALSE ROUTINE_^1*_$COLLECT CHARACTERS UP TO EOL,DELIMITER OR LIMIT_^1*_*IF EOL, EXIT TO BADPARAMETER/FALSE ROUTINE_^1*_*IF LIMIT, EXIT TO BADPARAMETER/FALSE ROUTINE_^1*_*IF DELIMITER, EXIT VIA RET (TRUE)_^1*_]_^1DSTRNG EQU DSTRNG(*)_^1_%RTJ* DCKEOL_5EXIT IF EOL NEXT_^1_%OVRTJ IBYTE,05_2NOT EOL, GET CHAR_^1_%OVSTA €€IVAL,05_3SAVE DELIMITER_^1DSTR05 EQU DSTR05(*)_^1*_]_^1* STRING EXTRACTOR_^1* COLLECT CHARS UP TO DELIMITER OR LIMIT_^1* FALSE IF LIMIT BEFORE DELIMITER_^1*_]_^1DSTRNX EQU DSTRNX(*)_^1_%ENA 0_:CLEAR CHAR COUNT_^1_%STA TEMPSV+2_^1_%ADDR TEMPSV+2,05_^1DSTRNZ EQU DSTRNZ(*)_^1_%RTJ* DCKEOL_5EXIT IF EOL NEXT_^1_%OVRTJ IBYTE,05_2GET NEXT CHAR_^1_%STA- $FF_8SAVE CHAR IN I_^1_%OVSU€€B IVAL,05_3CHECK FOR DELIMITER_^1_%SAN DSTR30_5CONTINUE IF NO_^1_%LDA TEMPSV+2_3GET NBR CHARS_^1_%ADDR TEMPSV+2,05_^1_%SAZ DSTERR_5SKIP TO ERROR IF 0_^1_%JMP* DSTR50_5ELSE EXIT NORMAL_^1DSTERR EQU DSTERR(*)_^1_%OVOVG 94,BADPRX,05_^1DSTR30 EQU DSTR30(*)_^1_%RAO TEMPSV+2_4INCR CHAR COUNT_^1_%ADDR TEMPSV+2,05_^1_%LDA TEMPSV+2_3GET CHAR COUNT FOR MAX CHECK_^1_%ADDR TEMPSV+2,05_^€€1_%SUB =N33_8CHECK AGAINST MAX_^1_%SAM DSTR35_6SKIP IF OK_^1_%JMP* DSTERR_5IF OVER MAX, GO ERROR MSG_^1DSTR35 EQU DSTR35(*)_^1_%LDQ TEMPSV+2_3GET CHAR PRSITION_^1_%ADDR TEMPSV+2,05_^1_%CLR A_:CHECK FOR LOW/HIGH BYTE_^1_%LRS 1_^1_%SAZ DSTLOW_5SKIP IF LOW BYTE_^1_%LDA- $FF_8HIGH, GET CHAR_^1_'ALS 8_:SHIFT UP_^1_%STA- $FF_8SAVE CHAR_^1_%LDA TEMPSV+3,Q_1GET WORD TO PUT IN_^1_%A€€DDR TEMPSV+3,05_^1_%AND- LPMASK+8_3CLEAR UPPER BYTE_^1_%EOR- $FF_8ADD NEW CHAR_^1_%STA TEMPSV+3,Q_1STORE WORD_^1_%ADDR TEMPSV+3,05_^1_%JMP* DSTRNZ_5GO GET NEXT_^1DSTLOW EQU DSTLOW(*)_^1_%LDA TEMPSV+2,Q_1GET WORD TO PUT IN_^1_%ADDR TEMPSV+2,05_^1_%AND- NZERO+8_4CLEAR LOWER PART_^1_%EOR- $FF_8ADD NEW CHAR_^1_%STA TEMPSV+2,Q_1STORE WORD_^1_%ADDR TEMPSV+2,05_^1_%JMP* DSTRNZ_5GO DO €€NEXT_^1DSTR50 EQU DSTR50(*)_^1_%OVRET_#05_^1*_]_^1*_$DCKEOL - NON RECURSIVE_^1*_]_^1*_$CHECK FOR EOL_^1*_%IF YES, EXIT TO BADPARAM ROUTINE DIRECTLU_^1*_]_^1DCKEOL EQU DCKEOL(*)_^1_%NUM 0_^1_%OVRTR EOL,05_^1_%OVLDA ITRUE,05_^1_%OVRAO ITRUE,05_^1_%SAZ DCKE10_5SKIP IF FALSE_^1_%JMP* DSTERR_5GO ERROR EXIT_^1DCKE10 EQU DCKE10(*)_^1_%JMP* (DCKEOL)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 06_(RU€€NMODE INITIALIZER, CLRTMP_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_*RUNSTR_'06_^1*_*CLRTMP_'06_^1*_]_^1*_$CALLS NO RECURSIVE ROUTINES_^1*_]_^1*_$EXITS DIRECTLY TO RET_^1*_]_^1_%HEADER 06_^1_'EJT_^1*_]_^1*_$RUNCOM - RECURSIVE_.06_^1*_]_^1*_$CLEAR OUT TEMPSV_^1*_$CALL COMMAND PROCESSING COMPLEX - RNCMD1 IN 95_^1*_$OUTPUT -TP- IDENTIFIER_^1*_$READ NEXT RECORD_^1*_$REPEAT_^1*_]_^1RU€€NCOM EQU RUNCOM(*)_^1_%OVOVR 06,CLRTMP,06_^1_%OVRTJ_#ICLI,06_^1_%NUM 04_^1_%ALF 02,-TP-_^1_%OVRTR ZMVP,06_^1_%OVRTR PUT,06_^1_%OVRTR NXTREC,06_^1_%OVRET 06_^1*_]_^1*_$RUNSTR - RECURSIVE - ALWAYS TRUE_^1*_]_^1*_$RUN MODE INITIALIZER_^1*_$ABSOLUTIZE TEMP SAVE ADDR_^1*_$ABSOLUTIZE JOB ADDR TABLE (FOR NOW)_^1*_]_^1RUNSTR EQU RUNSTR(*)_^1_'LDQ ABSAV_7GET PGM ABS START_^1_'ADDR ABSAV€€,06_^1*_]_^1************ FOR 1 DS ONLY_^1*_]_^1_'LDA ACCTAB_6ABS CCTAB ADDR_^1_%ADDR ACCTAB,06_^1_'AAQ A_^1_'STA ACCTAB_^1_%ADDR ACCTAB,06_^1_'LDA ATCTAB_6ABS TCTAB ADDR_^1_%ADDR ATCTAB,06_^1_'AAQ A_^1_'STA ATCTAB_^1_%ADDR ATCTAB,06_^1_%LDA ATEMP_6GET OFFSET FROM BASE_^1_%ADDR ATEMP,06_^1_%AAQ A_:ADD ABSOLUTE FOR BASE_^1_%STA ATEMP_6STORE ABSOLUTE ADDR_^1_%ADDR ATEMP,06_^1_%LDA €€ AJBNAM_^1_%ADDR AJBNAM,06_^1_%AAQ A_^1_%STA AJBNAM_^1_%ADDR AJBNAM,06_^1_%LDA AJOB_7GET OFFSET FROM BASE_^1_%ADDR AJOB,06_^1_%AAQ A_:ADD ABSOLUTE FOR BASE_^1_%STA AJOB_7STORE ABSOLUTE ADDR_^1_%ADDR AJOB,06_^1_%ENA NBRDS-1_4CHECK FOR 1 DS_^1_%SAZ RUNSTX_5IF YES, BYPASS REST_^1_%LDA AJOB+1_5GET OFFSET FROM BASE_^1_%ADDR AJOB+1,06_^1_%AAQ A_:ADD ABSOLUTE FOR BASE_^1_%STA AJ€€OB+1_5STORE ABSOLUTE ADDR_^1_%ADDR AJOB+1,06_^1_%LDA AJOB+2_5GET OFFSET FROM BASE_^1_%ADDR AJOB+2,06_^1_%AAQ A_:ADD ABSOLUTE FOR BASE_^1_%STA AJOB+2_5STORE ABSOLUTE ADDR_^1_%ADDR AJOB+2,06_^1_%LDA AJOB+3_5GET OFFSET FROM BASE_^1_%ADDR AJOB+3,06_^1_%AAQ A_:ADD ABSOLUTE FOR BASE_^1_%STA AJOB+3_5STORE IBS ADDR_^1_%ADDR AJOB+3,06_^1RUNSTX EQU RUNSTX(*)_^1_%OVRET 06_^1*_]_^1*_%SU€€BROUTINE CLRTMP - RECURSIVE_^1*_]_^1*_%CLEARS OUT THE TEMPORARY SAVE AREA_^1*_]_^1*_]_^1CLRTMP EQU_!CLRTMP(*)_^1_'ENA 0_;VALUE_^1_'LDQ =N33_8CPUNT_^1CLRTM2 EQU CLRTM2(*)_^1_%STA TEMPSV,Q_^1_%ADDR TEMPSV,06_^1_'INQ -1_:DECR COUNT_^1_'SQM CLRTM4_5EXIT IF DONE_^1_'JMP* CLRTM2_5LOOP IF MORE_^1CLRTM4 EQU CLRTM4(*)_^1_%OVRET 06_^1_%EJT_]_^1*_]_^1*_$OVERLAY 07_(DATA STREAM NUMBER PROCE€€SSING_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*DATSTM_'07_^1*_*DATSAV_'07_^1*_*DATRUN_'07_^1*_*DATRNX_'07_^1*_*DATASM_'07_^1*_*DATSTS_'07_^1*_*DATSTR_'07_^1*_*DATSTS_'07_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*NONE_^1*_]_^1*_$CALLS NON- RECURSIVE ROUTINES&_^1*_]_^1*_*IDOOR_(ROOT_^1*_]_^1*_$EXITS DIRECTLY TO &_^1*_]_^1*_*FALSE_(ROOT_^1*_*RET_*ROOT_^1*_*BADSTX_'94_^€€1*_]_^1_%HEADER 07_^1_%EJT_]_^1*_]_^1*_$SUBROUTINE DATSAV - RECURSIVE_^1*_]_^1*_$SAVE DATA STREAM NBR IN TEMPSV_^1*_$ALWAYS RETURNS TRUE_^1*_]_^1DATSAV EQU DATSAV(*)_^1_%OVLDA IVAL,07_3GET DS NBR_^1_%OVSTA ITMPSV,07_1SAVE_^1_%OVRET 07_^1*_]_^1*_$SUBROUTINE DATSTM - RECURSIVE_^1*_]_^1*_$ASSIGN DAFAULT DATASTREAM IF 0 (=1)_^1*_$VALIDATE DATASTREAM_^1*_$MUST BE .LE. 4_^1*_$MUST BE A€€TTACHED TO ACTIVE JOB TABLE_^1*_$EXIT FALSE IF NOT_^1*_]_^1DATSTM EQU DATSTM(*)_^1_%OVLDA ITMPSV,07_1GET DS NBR_^1_%SAN DATS05_5GO ON IF NOT 0_^1_%ENA 1_:0, CHANGE TO 1_^1_%OVSTA ITMPSV,07_1SAVE CORRECT VALUE_^1DATS05 EQU DATS05(*)_^1_%INA -NBRDS-1_3LEGAL DS NBR ;_^1_%SAM DATS20_5SKIP IF YES_^1DATS10 EQU DATS10(*)_^1_%OVRTG FALSE,07_2ERROR, GO FALSE_^1DATS20 EQU DATS20(*)_^€€1_%OVLDQ ITMPSV,07_1GET DS NBR_^1_%INQ -1_9SUB 1_^1_%LDQ AJOB,Q_5GET JOB TABLE ADDR._^1_%ADDR AJOB,07_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND- ONEBIT+7_3CHECK ACTIVE FLAG_^1_%SAZ DATS25_5SKIP IF NOT ACTIVE_^1DATS15 EQU DATS15(*)_^1_%OVRET 07_^1DATS25 EQU DATS25(*)_^1_%JMP* DATS10_5NO, GO EXIT FALSE_^1*_]_^1*_$SUBROUTINE DATRUN - RECURSIVE_^1*_]_^1*_$RETURN TRUE IF DATA STREAM (NB€€R IN TEMPSU) IS NOT RUNNING_^1*_]_^1DATRUN EQU DATRUN(*)_^1_%OVLDQ ITMPSV,07_1GET DS NBR_^1_%INQ -1_9CREAT INDEX_^1_%LDQ AJOB,Q_5GET JOB TABLE ADDR_^1_%ADDR AJOB,07_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND- ONEBIT+14_,SEE IF ALREADY RUNNING_^1_%SAN DATR10_/SKIP IF SUSPENDED (SET)_^1_%OVRTG FALSE,07_^1DATR10 EQU DATR10(*)_^1_%OVRET 07_^1*_]_^1*_$DATSTR - DATA STREAM VERIFICATION_^1€€*_]_^1*_$ASSIGN DEFAULT OF 1 IF ZERO_^1*_$VERIFY ASSIGNED AND RUNNING_^1*_]_^1DATSTR EQU DATSTR(*)_^1_%OVOVR 07,DATSTM,07_^1_%OVOVG 07,DATRNX,07_^1_%OVRET 07_^1*_]_^1*_$VERIFY DATA STREAM VALID NUMERIC FIELD AND SVAE_^1*_]_^1DATASM EQU DATASM(*)_^1_%OVRTR NM,07_^1_%OVOVG 07,DATSAV,07_^1_%OVRET 07_^1*_]_^1*_$DATSTS - DATA STREAM VEIIFICATION_^1*_]_^1*_$ASSIGN DEFAULT OF 1 IF ZERO_€€^1*_$VERIFY ASSIGNED AND SUSPENDED_^1*_]_^1DATSTS EQU DATSTS(*)_^1_%OVOVR 07,DATSTM,07_^1_%OVOVG 07,DATRUN,07_^1_%OVRET 07_^1*_]_^1*_$DATRNX - VERIFY DATA STREAM IS SUSPENDED_^1*_]_^1DATRNX EQU DATRNX(*)_^1_%OVOVR 07,DATRUN,07_^1_%OVRTG FALSE,07_^1_%OVRTJ IDOOR,07_^1_%OVRET 07_^1*_]_^1*_$DATSTT - VERIFY DATA STREAM (DEFAULT) VALID,SUSPENDED_^1*_$ERROR MSG AND FALSE IF NOT_^1*_]_^€€1DATSTT EQU DATSTT(*)_^1_%OVOVR 07,DATSTS,07_^1_%OVRTJ IDOOR,07_^1_%OVOVG 94,BADSTX,07_^1_%EJT_]_^1*_]_^1*_$OVERLAY 08_(BADSTZ_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*BADSTZ_'08_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*ZMPV_)ROOT_^1*_*OUTPUT_'ROOT_^1*_]_^1*_$CALLS NON-RECURSIVE ROUTINES_^1*_]_^1*_*ICLI_)ROOT_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*RET_^1*_]_^1_%H€€EADER 08_^1_%EJT_]_^1*_]_^1*_$OVERLAY 08_^1*_]_^1*_$CONTAINS RECUSSIVE ROUTINES_^1*_]_^1*_*BADSTZ_'08_^1*_*LUBUSY_'08_^1*_]_^1*_$CALLS RECURSIVE ROUTINES_^1*_]_^1*_*ZMVP_)ROOT_^1*_]_^1*_$CALLS NON - RECURSIAVE ROUTINES_^1*_]_^1*_*CLI_*ROOT_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*OUTPUT_'ROOT_^1*_]_^1*_]_^1*_$BADSTZ - RECURSIVE_^1*_]_^1*_$OUTPUT 'DATA STREAM X STILL ACTIVE'_^1*_$D.S€€. NUMBER IN TEMPSV_^1*_$RETURN TRUE_^1*_]_^1BADSTZ EQU BADSTZ(*)_^1_%OVLDA ITMPSV,08_1GET DS NBR_^1_%ADD =N$2030_4MAKE ASCII_^1_%STA* BADS05_5STORE IN MSG_^1_%OVRTJ ICLI,08_^1_%NUM 27_^1_%ALF 06, DATA STREAM_^1BADS05 NUM 0_^1_%ALF 07, STILL ACTIVE_^1_%OVRTR ZMVP,08_^1_%OVRTG OUTPUT,08_^1*_]_^1*_$LUBUSY - RECURSIVE_^1*_$OUTPUT LU NN IN USE MSG_^1*_]_^1LUBUSY EQU LUBUSY(*)_^1_€€%OVLDA ITMPSV,08_1GET SAVED LU NBR_^1_%INA -10_8CHECK FOR .GT.9_^1_%SAP LUB20_6SKIP IF GT 9_^1_%INA 10_+RESTORE VALUE_^1_%ADD =N$2030_4CNVRT 1 DIGIT TO ASCII_^1_%JMP* LUB30_6AND CONTINUE_^1LUB20 EQU LUB20(*)_^1_%INA 10_^1_%ENQ 0_:SET UP FOR DIV_^1_%DVI =N10_7Q=TEN'S,A=UNITS_^1_%ALS 8_;SHIFT UP TENS_^1_%AAQ A_,COMBINE_^1_%ADD =N$3030_4CNVRT 2 DIGITS TO ASCII_^1LUB30 EQU€€ LUB30(*)_^1_%STA* LUB10_6STORE IN MSG_^1_%OVRTJ ICLI,08_^1_%NUM 23_^1_%ALF 07, LOGICAL UNIT_^1LUB10 NUM 0_^1_%ALF 04, IN USE_^1_%OVRTR ZMVP,08_^1_%OVRTG OUTPUT,08_^1_%EJT_]_^1*_]_^1*_$OVERLAY 09_(CHRNMS,CHRNMX_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES_^1*_]_^1*_*CHRNMS_'09_^1*_*CHRNMX_'09_^1*_*NMSAV_(9_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*FALSE_(ROOT_^1*_*RET_*ROOT_^1*_]_^1_€€%HEADER 09_^1_%EJT_]_^1*_]_^1*_$CHRNMS - RECURSIVE_^1*_]_^1*_$SAVE STARTING POSITION IN TEMP_^1*_]_^1CHRNMS EQU CHRNMS(*)_^1_%OVLDA IVAL,09_3GET CHAR POS_^1_%STA TEMPSV+1_3SAVE IN TEMP_^1_%ADDR TEMPSV+1,09_^1*_$RETURN FALSE IF 0_^1_%SAZ CHRSER_5BAD IF 0_^1_%OVRET 09_^1CHRSER EQU CHRSER(*)_^1_%OVRTG FALSE,09_^1*_]_^1*_$CHRNMX - RECURSIVE_^1*_]_^1*_$SAVE ENDING CHAR POSITION IN T€€EMP_^1*_]_^1CHRNMX EQU CHRNMX(*)_^1_%OVLDA IVAL,09_3GET END POS_^1_%STA TEMPSV+2_3SAVE_^1_%ADDR TEMPSV+2,09_^1*_$RETURN FALSE IF 0_^1_%SAZ CHRXER_5BAD IF 0_^1_%OVRET 09_^1CHRXER EQU CHRXER(*)_^1_%JMP* CHRSER_5GO ERROR EXIT_^1*_]_^1*_$NMSAV - RECURSIVE_^1*_]_^1*_$SAVE NUMBER PARAMETER_^1*_]_^1NMSAV EQU NMSAV(*)_^1_%LDA VAL_^1_%ADDR VAL,09_^1_%OVSTA ITMPSV,09_^1_%OVRET 09_^1_%€€EJT_]_^1*_]_^1*_$OVERLAY 10_(START,PART AND SUPPORT_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES_^1*_]_^1*_*STRT_)10_^1*_*PART_)10_^1*_]_^1*_$CONTAINS NON RECURSIVE ROUTINES_^1*_]_^1*_*CHRSTR_^1*_*CHRSTX_^1*_]_^1*_$CALLS RECURSIVE ROUTINES_^1*_]_^1*_*NONE_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*BADPRM_'94_^1*_*RET_*ROOT_^1*_]_^1_%HEADER 10_^1_%EJT_]_^1*_]_^1*_$STRT - RECURSIVE_^1*_]_^1*_€€$PROCESS START COMMAND_^1*_$VERIFY THAT CHAR POSITION IS VALID FOR RECSIZ OR EXIT_^1*_$CALCULATE END OF MASK, PUT IN TEMPSV_^1*_$VERIFY THAT END OF START FIELD IS VALID FOR RECSIZ OR EXIT_^1*_$SET FLAG FOR START_^1*_$SAVE START OFFSET,LENGTH AND MASK IN JOB TABLE FOR DS_^1*_$EXIT TRUE_^1*_]_^1*_$CALLS ROUTINES CHRSTR,CHRSTP_^1*_]_^1STRT_!EQU STRT(*)_^1_%RTJ* CHRSTR_5VERIFY START_^€€1_%LDA TEMPSV+1_3CALCULATE + SAVE END_^1_%ADDR TEMPSV+1,10_^1_%ADD TEMPSV+2_^1_%ADDR TEMPSV+2,10_^1_%STA TEMPSV+2_^1_%ADDR TEMPSV+2,10_^1_%RTJ* CHRSTX_5VERIFY END_^1_%OVLDQ ITMPSV,10_1GET DS NBR_^1_%LDQ AJOB-1,Q_3GET JOBTAB ADDR_^1_%ADDR AJOB-1,10_^1_%STQ- $FF_8I= ADDR JOBTABLE_^1_%LDA- JFLAGS,I_3SET START FLAG_^1_%AND- ZROBIT+13_^1_%EOR- ONEBIT+13_^1_%STA- JFLAGS,I_^1_%LDA TE€€MPSV+1_3SAVE STARTING POSITION_^1_%ADDR TEMPSV+1,10_^1_%STA- JSTOFF,I_^1_%LDA TEMPSV+2_3CALCULATE + SAVE LENGTH_^1_%ADDR TEMPSV+2,10_^1_%SUB TEMPSV+1_^1_%ADDR TEMPSV+1,10_^1_%STA- JSTLEN,I_^1_%INA 1_:CONVERT TO WORDS FOR MOVE_^1_%ARS 1_^1_%TRA Q_:Q=WORD COUNT (COUNT DOWN)_^1STRT10 EQU STRT10(*)_^1_%LDA TEMPSV+3,Q_1GET NEXT WORD OF MASK_^1_%ADDR TEMPSV+3,10_^1_%STA- JSTART,B_€€3STORE INTO JOBTABLE AREA_^1_%SQZ STRT20_5EXIT IF DONE_^1_%INQ -1_9DECR COUNT_^1_%JMP* STRT10_5ELSE LOOP_^1STRT20 EQU STRT20(*)_^1_%OVRET 10_^1_%EJT_]_^1*_]_^1*_$PART - RECURSIVE_^1*_]_^1*_$VERIFY START (EXIT)_^1*_$VERIFY END (EXIT)_^1*_$CALCULATE AND SAVE PARTIAL OFFSET AND LENGTH_^1*_$SET FLAG FOR PARTIAL_^1*_$EXIT TRUE_^1*_$VERIFY THAT END .GT. START_^1*_*IF NO, PRINT OUT ERR€€OR MESSAGE_^1*_]_^1*_$CALLS ROUTINES CHRSTR,CHRSTP,BADPRM_^1*_]_^1PART_!EQU PART(*)_^1_%RTJ* CHRSTR_5VERIFY START_^1_%RTJ* CHRSTX_5VERIFY END_^1_%OVLDQ ITMPSV,10_1GET DS NBR_^1_%LDQ AJOB-1,Q_3GET JOB TAB ADDR_^1_%ADDR AJOB-1,10_^1_%STQ- $FF_8SET I = JOB TAB_^1_%LDQ TEMPSV+1_3GET START_^1_%ADDR TEMPSV+1,10_^1_%TCQ A_4A = -START, Q = START_^1_%ADD TEMPSV+2_-A = STOP-START = LEN_€€^1_%ADDR TEMPSV+2,10_^1_%INA 1_4CORRECT TO INCLUSIVE LENGTH_^1_%SAZ PART15_50 NOT LEGAL, SKIP_^1_%SAP PART20_5SKIP IF LEGAL_^1PART15 EQU PART15(*)_^1_%OVOVG 94,BADPRM,10_^1_%JMP* PART50_^1PART20 EQU PART20(*)_^1_%STQ- JPOFF,I_^1_%STA- JPLEN,I_4STORE LENGTH IN JOBTAB_^1_%LDA- JFLAGS,I_3SET PART FLAG_^1_%AND- ZROBIT+11_^1_%EOR- ONEBIT+11_^1_%STA- JFLAGS,I_^1PART50 EQU PART50(*€€)_^1_%OVRET 10_^1_%EJT_]_^1*_]_^1*_$CHRSTR - NON-RECURSIVE_^1*_]_^1*_$VERIFY THAT STARTING CHARACTER POSITION IS WITHIN RECORD_^1*_$AS NBR IS IN TEMPSV_^1*_$IF POSITION GT RECSIZ, OUTPUT INVALID OPERAND MSG AND EXIT_^1*_*FROM COMMAND PROCESSING_^1*_$ELSE RETURN TO CALLER_^1*_$START CHAR IS IN TEMPSV+1_^1*_$RECORD LENGTH IS IN JOB TABLE_^1*_]_^1CHRSTR EQU CHRSTR(*)_^1_%NUM 0_^1_%O€€VLDQ ITMPSV,10_1GET DS NBR_^1_%LDQ AJOB-1,Q_3GET JOB TABLE ADDR_^1_%ADDR AJOB-1,10_^1_%LDA- JRECSZ,Q_3GET RECORD SIZE_^1_%SUB TEMPSV+1_3GET REC SIZE - START POSITION_^1_%ADDR TEMPSV+1,10_^1_%SAM CHRS05_5SKIP IF START GT MAX_^1_%JMP* (CHRSTR)_3RETURN OK_^1CHRS05 EQU CHRS05(*)_^1_%OVOVG 94,BADPRM,10_^1*_]_^1*_$CHRSTX - NON-RECURSIVE_^1*_]_^1*_$VERIFY THAT ENDING CHAR POSITION IS €€WITHIN RECORD_^1*_$IF NOT, ISSUE BAD PARAMETER MESSAGE AND EXIT FROM_^1*_*COMMAND PROCESSING_^1*_$ELSE RETURN TO CALLER_^1*_$DS NBR IN TEMPSV_^1*_$STOP POSITION IN TEMPSV+2_^1*_$RECORD LENGTH IN JOBTABLE_^1*_]_^1CHRSTX EQU CHRSTX(*)_^1_%NUM 0_^1_%OVLDQ ITMPSV,10_1GET DS NBR_^1_%LDQ AJOB-1,Q_3GET JOB TAB ADDR_^1_%ADDR AJOB-1,10_^1_%LDA- JRECSZ,Q_3GET REC SZ_^1_%SUB TEMPSV+2_3CHE€€CK AGAINST STOP POSITION_^1_%ADDR TEMPSV+2,10_^1_%SAM CHRS20_5SKIP IF POS.GT.SIZE_^1_%JMP* (CHRSTX)_^1CHRS20 EQU CHRS20(*)_^1_%OVOVG 94,BADPRM,10_^1_%EJT_]_^1*_]_^1*_$OVERLAY 11_(STOP,ASGN_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*STOP_)11_^1*_*ASGN_)11_^1*_]_^1*_$CONTAINS NON-RECURSIVE ROUTINES&_^1*_]_^1*_*CHRSTT_^1*_*CHRSTP_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1€€*_*NONE_^1*_]_^1*_$EXITS DIRECTLY TO&_^1*_]_^1*_*RET_*ROOT VIA IRET_^1*_*BADPRM_'94_^1*_]_^1_%HEADER 11_^1_%EJT_]_^1*_]_^1*_$STOP - RECURSIVE_^1*_]_^1*_$PROCESS STOP COMMAND_^1*_$VERIFY CHAR POSITION (EXIT)_^1*_$CALCULATE END POSITION_^1*_$VERIFY END POSITION (EXIT)_^1*_$SET FLAG FOR STOP_^1*_$SAVE START POSITION,LENGTH,MASK IN JOBTABLE FOR DS_^1*_$EXIT TRUE_^1*_]_^1*_$CALLS CHRSTT€€,CHRSTP_^1*_]_^1STOP_!EQU STOP(*)_^1_%RTJ* CHRSTT_5VERIFY START_^1_%LDA TEMPSV+1_3CALC END_^1_%ADDR TEMPSV+1,11_^1_%ADD TEMPSV+2_^1_%ADDR TEMPSV+2,11_^1_%STA TEMPSV+2_^1_%ADDR TEMPSV+2,11_^1_%RTJ* CHRSTP_5VERIFY END_^1_%OVLDQ ITMPSV,11_1GET DS NBR_^1_%LDQ AJOB-1,Q_3GET JOBTABLE ADDR_^1_%ADDR AJOB-1,11_^1_%STQ- $FF_8I = JOBTAB ADDR_^1_%LDA- JFLAGS,I_3SET STOP FLAG_^1_%AND- ZRO€€BIT+12_^1_%EOR- ONEBIT+12_^1_%STA- JFLAGS,I_^1_%LDA TEMPSV+1_3SAVE STOP START POSITION_^1_%ADDR TEMPSV+1,11_^1_%STA- JSPOFF,I_^1_%LDA TEMPSV+2_3CALCULATE AND SAVE LENGTH_^1_%ADDR TEMPSV+2,11_^1_%SUB TEMPSV+1_^1_%ADDR TEMPSV+1,11_^1_%STA- JSPLEN,I_^1_%INA 1_:CONVERT TO NBR WORDS_^1_%ARS 1_^1_%TRA Q_:Q = LEN (WORDS) TO XFER_^1STOP10 EQU STOP10(*)_^1_%LDA TEMPSV+3,Q_1GET WORD €€OF MASK_^1_%ADDR TEMPSV+3,11_^1_%STA- JSTOP,B_4SAVE IN JOBTAB_^1_%SQZ STOP20_5SKIP IF DONE_^1_%INQ -1_9DECR COUNT_^1_%JMP* STOP10_5ELSE LOOP_^1STOP20 EQU STOP20(*)_^1_%OVRET 11_^1_%EJT_]_^1*_]_^1*_$ASGN - RECURSIVE_^1*_]_^1*_$PROCESS ASSIGN COMMAND_^1*_$MOVE TAPE AND/OR PRINTER LU NBR INTO JOBTAB_^1*_$EXIT TRUE_^1*_]_^1ASGN_!EQU ASGN(*)_^1_%OVLDQ ITMPSV,11_1GET DS NBR_^1_%LDQ €€AJOB-1,Q_3GET JOB TAB ADDR_^1_%ADDR AJOB-1,11_^1_%LDA TEMPSV+1_3GET TAPE LU_^1_%ADDR TEMPSV+1,11_^1_%SAZ ASGN10_5SKIP IF NONE_^1_%STA- JTPLU,Q_4STORE TAPE LU IN JOBTAB_^1ASGN10 EQU ASGN10(*)_^1_%LDA TEMPSV+2_3GET PRINTER LU_^1_%ADDR TEMPSV+2,11_^1_%SAZ ASGN20_5SKIP IF NONE_^1_%STA- JPRLU,Q_4STORE IN JOB TAB_^1ASGN20 EQU ASGN20(*)_^1_%OVRET 11_^1*_]_^1*_$CHRSTT - NON-RECURSIVE€€_^1*_]_^1*_$VERIFY THAT STARTING CHARACTER POSITION IS WITHIN RECORD_^1*_$AS NBR IS IN TEMPSV_^1*_$IF POSITION GT RECSIZ, OUTPUT INVALID OPERAND MSG AND EXIT_^1*_*FROM COMMAND PROCESSING_^1*_$ELSE RETURN TO CALLER_^1*_$START CHAR IS IN TEMPSV+1_^1*_$RECORD LENGTH IS IN JOB TABLE_^1*_]_^1CHRSTT EQU CHRSTT(*)_^1_%NUM 0_^1_%OVLDQ ITMPSV,11_1GET DS NBR_^1_%LDQ AJOB-1,Q_^1_%ADDR AJOB€€-1,11_^1_%LDA- JRECSZ,Q_3GET RECORD SIZE_^1_%SUB TEMPSV+1_3GET REC SIZE - START POSITION_^1_%ADDR TEMPSV+1,11_^1_%SAM CHRS10_^1_%JMP* (CHRSTT)_^1CHRS10 EQU CHRS10(*)_^1_%OVOVG 94,BADPRM,11_^1*_]_^1*_]_^1*_$VERIFY THAT ENDING CHAR POSITION IS WITHIN RECORD_^1*_$IF NOT, ISSUE BAD PARAMETER MESSAGE AND EXIT FROM_^1*_*COMMAND PROCESSING_^1*_$ELSE RETURN TO CALLER_^1*_$DS NBR IN TEMP€€SV_^1*_$STOP POSITION IN TEMPSV+2_^1*_$RECORD LENGTH IN JOBTABLE_^1*_]_^1CHRSTP EQU CHRSTP(*)_^1_%NUM 0_^1_%OVLDQ ITMPSV,11_1GET DS MBR_^1_%LDQ AJOB-1,Q_^1_%ADDR AJOB-1,11_^1_%LDA- JRECSZ,Q_^1_%SUB TEMPSV+2_^1_%ADDR TEMPSV+2,11_^1_%SAM CHRS30_5SKIP IF BAD_^1_%JMP* (CHRSTP)_3RETURN_^1CHRS30 EQU CHRS30(*)_^1_%OVOVG 94,BADPRM,11_^1_%EJT_]_^1*_]_^1*_$OVERLAY 12_(SUSP,FREE,TERM_^1€€*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*SUSP_)12_^1*_*FREE_)12_^1*_*TERM_)12_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*DATRUN_'7_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*RET_*ROOT VIA IRET_^1*_*BADSTZ_'94_^1*_]_^1_%HEADER 12_^1_%EJT_]_^1*_]_^1*_$SUSP - RECURSIVE_^1*_]_^1*_$PROCESS SUSPEND COMMAND_^1*_$D.S. NBR IS IN TEMPSV - SET PRE-SUSPEND BIT-EXIT TRUE_^1*_]_^1SUSP_€€!EQU SUSP(*)_^1_%OVLDQ ITMPSV,12_1GET DS NBR_^1_%LDQ AJOB-1,Q_3GET ADDR THAT JOB TABLE_^1_%ADDR AJOB-1,12_^1_%STQ- $FF_8I = JOBTABLE ADDR_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND- ZROBIT+10_2SET PRE-SUSPEND BIT_^1_%EOR- ONEBIT+10_^1_%STA- JFLAGS,Q_^1_%LDQ- JPRLU,I_4GET PRINTER LU_^1_%LDA+ LOG1,Q_5GET LOG 1 ENTRY_^1_%AND- NZERO+12_3CLEAR LOWER BITS_^1_%EOR- JLGSV1,I_3OR IN SAVED LOWER€€_^1_%STA+ LOG1,Q_5RESTORE_^1_%LDQ- JTPLU,I_4GET TAPE LU_^1_%LDA+ LOG1,Q_5GET LOG 1 ENTRY_^1_%AND- NZERO+12_3CLEAR LOWER BITS_^1_%EOR- JLGSV2,I_3OR IN SAVED LOWER_^1_%STA+ LOG1,Q_5RESTORE_^1_%OVRET 12_^1_%EJT_]_^1*_]_^1*_$FREE - RECURSIVE_^1*_]_^1*_$PROCESS FREE COMMAND_^1*_$CLEAR ASSIGNED BIT OF DATA STREAM WHOSE NBR IS IN TEMPSV_^1*_$EXIT TRUE_^1*_]_^1FREE_!EQU FREE(*)_^1_%OVLDQ €€ITMPSV,12_1GET DS NBR_^1_%LDQ AJOB-1,Q_3GET JOB TAB ADDR_^1_%ADDR AJOB-1,12_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND- ZROBIT+7_3CLEAR ASSIGNED_^1_%STA- JFLAGS,Q_3STORE FLAGS_^1_%OVRET 12_^1_%EJT_]_^1*_]_^1*_$TERM - RECURSIVE_^1*_]_^1*_$PROCESS TERM COMMAND_^1*_$SCAN EACH DATA STREAM - MUST ALL BE SUSPENDED_^1*_*IF NOT, OUTPUT ERROR MESSAGE AND EXIT TRUE_^1*_$EXIT TO DISPATCHER_^1*_$US€€ES RECURSIVE ROUTINES_^1*_*DATRUN_^1*_*BADSTX_^1*_]_^1TERM_!EQU TERM(*)_^1_%ENA 1_^1_%OVSTA ITMPSV,12_1START AT DS NBR 1_^1TERM05 EQU TERM05(*)_^1_%OVOVR 07,DATRUN,12_^1_%ADC* DATRUN_5CHECK FOR SUSPENDED_^1_%OVLDA ITRUE,12_^1_%SAN TERM10_5SKIP IF SUSPENDED_^1_%JMP* TERM20_5GO ERROR EXIT IF NOT_^1TERM10 EQU TERM10(*)_^1_%OVRAO ITMPSV,12_1BUMP TO NEXT DS_^1_%OVLDA ITMPSV,12_1CHE€€CK FOR MAX_^1_%INA -NBRDS-1_^1_%SAZ TERM12_5SKIP IF DONE_^1_%JMP* TERM15_5JMP IF MORE TO CHECK_^1TERM12 EQU TERM12(*)_^1_%OVRTJ ICLI,12_^1_%NUM 17_^1_%ALF 09,TAPE-TO-PRINT OUT_^1_%OVRTR ZMVP,12_^1_%OVRTR OUTPUT,12_^1_%ENQ -3_^1_%LDQ START,Q_4GET SYS DIR INDEX_^1_%ADDR START,12_^1_%ADQ- $EB_8ADD DIR BASE ADDR_^1_%LDA- 1,Q_8GET STARTING ADDR_^1_%STA* RELES_^1_%CLR A_^1_%STA- €€1,Q_8CLEAR DIR ENTRY_^1_%RTJ- ($F4)_^1_%NUM $1801_6RELEASE REQUEST_^1RELES NUM 0_^1TERM15 EQU TERM15(*)_^1_%JMP* TERM05_5GO CHECK NEXT_^1TERM20 EQU TERM20(*)_^1_%OVRAO ITRUE,12_^1_%OVOVG 08,BADSTZ,12_^1_%OVRET 12_^1_%EJT_]_^1*_]_^1*_$OVERLAY 13_(RUN_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*RUN_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_]_^1*_$CALLS NON-RECURSIVE €€ROUTINES&_^1*_]_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*RET_*ROOT VIA IRET_^1*_*LUBUSY_'08_^1*_]_^1_%HEADER 13_^1_%EJT_]_^1*_]_^1*_$RUN - RECURSIVE_^1*_]_^1*_$PROCESS RUN COMMAND_^1*_$DS NBR IS IN TEMPSV_^1*_$VERIFY TAPE,PRINTER UNITS NOT IN USE BY ANOTHER_^1*_*BUSY, PRINT OUT LU IN USE MESSAGE, EXIT TRUE_^1*_$LOAD TABLES OR INCREMENT USE COUNT_^1*_$CLEAR SUSPENDED BIT, SET ACTIVAT€€E BIT_^1*_]_^1_%EXT LOG1_^1RUN_"EQU RUN(*)_^1_%OVLDQ ITMPSV,13_1GET DS NBR_^1_%LDQ AJOB-1,Q_3JOB ADDR_^1_%ADDR AJOB-1,13_^1_%STQ- $FF_8I=JOB ADDR FOR ONE TO RUN_^1_%ENA 1_:START CHECK AT DS 1_^1_%STA TEMPSV+1_3SAVE WORKING DS NBR_^1_%ADDR TEMPSV+1,13_^1RUN05 EQU RUN05(*)_^1_%INA -NBRDS-1_3CHECK AGAINST MAX_^1_%SAM RUN10_6SKIP IF NOT_^1_%JMP* RUN50_6BEYOND MAX-OK TO CONTINU€€E_^1RUN10 EQU RUN10(*)_^1_%INA NBRDS+1_4RESTORE DS NBR_^1_%OVSUB ITMPSV,13_1SAME AS ONE TO BE RUN_^1_%SAN RUN20_6IF NO, CONTINUE CHECK_^1RUN15 EQU RUN15(*)_^1_%RAO TEMPSV+1_3BUMP WORKING DSN TO NEXT_^1_%ADDR TEMPSV+1,13_^1_%LDA TEMPSV+1_^1_%ADDR TEMPSV+1,13_^1_%JMP* RUN05_^1RUN20 EQU RUN20(*)_^1_%LDQ TEMPSV+1_4GET DS NBR TO CHECK_^1_'ADDR TEMPSV+1,13_^1_%LDQ AJOB-1,Q_3G€€ET JOBTAB ADDR TO Q_^1_%ADDR AJOB-1,13_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND- ONEBIT+7_3CHECK FOR SELECTED_^1_%SAZ RUN22_6SKIP IF NOT (BYPASS)_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND- ONEBIT+14_2CHECK FOR WUSPENDED_^1_%SAZ RUN23_6SKIP IF RUNNING (NOT SUSP)_^1RUN22 EQU RUN22(*)_^1_%JMP* RUN15_6BYPASS CHECKOUT_^1RUN23 EQU RUN23(*)_^1_%LDA- JTPLU,Q_4GET TAPE LU_^1_%SUB- JTPLU,I_4COM€€PARE_^1_%SAN RUN25_6SKIP IF NO_^1_%LDA- JTPLU,I_4YES, GET DUPE LU NBR_^1_%JMP* RUN31_6GO ERROR MSG_^1RUN25 EQU RUN25(*)_^1_%LDA- JPRLU,Q_4GET PRINTER LU_^1_%SUB- JPRLU,I_4COMPARE_^1_%SAZ RUN30_6SKIP IF EQUAL_^1_%JMP* RUN15_6NOT EQUAL-OK-GO NEXT_^1RUN30 EQU RUN30(*)_^1_%LDA- JPRLU,I_4GET DUPE PR LU NBR_^1RUN31 EQU RUN31(*)_^1_%OVSTA ITMPSV,13_1SAVE LU NBR_^1_%OVOVG 08,LUBUSY€€,13_^1RUN40 EQU RUN40(*)_^1_%OVRET 13_^1RUNWRK NUM 0_^1RUN50 EQU RUN50(*)_^1_%ENQ 4_:OFFSET FOR TTY_^1_%LDA+ LOG1,Q_5GET TTY ALT DEV_^1_%AND- LPMASK+12_2ISOLATE LOWER_^1_%STA* RUNWRK_5AND SAVE_^1_%INA 0_^1_%LDA- JFLAGS,I_3GET FLAGS_^1_%AND- ZROBIT+9_3SET ACTIVATE BIT_^1_%EOR- ONEBIT+9_^1_%AND- ZROBIT+14_,CLEAR SUSPENDED (SET RUNNING)_^1_%STA- JFLAGS,I_4SET ACTIVATE FLAG_^1_%€€LDQ- JPRLU,I_4GET PRINTER LU_^1_%LDA+ LOG1,Q_5GET LOG 1 ENTRY_^1_%AND- LPMASK+12_2CLEAR UPPER BITS_^1_%STA- JLGSV1,I_3SAVE_^1_%LDA+ LOG1,Q_5GET LOG1 AGAIN_^1_%AND- NZERO+12_3CLEAR LOWER BITS_^1_%EOR* RUNWRK_5ADD IN NEW ALT DEV (DUMMY)_^1_%STA+ LOG1,Q_5SET UP NEW LOG1 ENTRY_^1_%LDQ- JTPLU,I_4GET TAPE LU_^1_%LDA+ LOG1,Q_5GET LOG 1 ENTRY_^1_%AND- LPMASK+12_2CLEAR UPPER BITS_^1_%STA- J€€LGSV2,I_3SAVE_^1_%LDA+ LOG1,Q_5GET LOG1 AGAIN_^1_%AND- NZERO+12_3CLEAR LOWER BITS_^1_%EOR* RUNWRK_5ADD IN NEW ALT DEV (DUMMY)_^1_%STA+ LOG1,Q_5SET UP NEW LOG1 ENTRY_^1_%LDA TP01RL_^1_%ADD =XTP01RL-TPSCH-1-BS13_%ADJUST TO REAL_^1_%AND- ZROBIT+15_2CLEAR BIT 15_^1_%STA TPSCH+2_^1TPSCH SCHDLE TPSCH-*+1,3,X_^1_%JMP* RUN40_6EXIT TRUE_^1TP01RL ADC* TP01_^1_%EJT_]_^1*_]_^1*_$OVERLAY 14€€_(MOTION COMMAND PROCESSING,ALWAYS TRUE_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES_^1*_]_^1*_*REW_*14_^1*_*ADF_*14_^1*_*ADR_*14_^1*_*BSF_*14_^1*_*BSR_*14_^1*_*SKIP_)14_^1*_]_^1*_$CALLS RECURSIVE ROUTINES_^1*_]_^1*_*NONE_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*BADPRM_'94_^1*_*RET_*ROOT_^1*_*LUBUSY_'08_^1*_]_^1_%HEADER 14_^1FSKIP EQU FSKIP(2)_3SKIP = 2_^1FREW_!EQU FREW(3)_4REW = 3_^1F€€ADF_!EQU FADF(5)_4ADF = 5_^1FADR_!EQU FADR(7)_4ADR = 7_^1FBSF_!EQU FBSF(6)_4BSF = 6_^1FBSR_!EQU FBSR(1)_4BSR = 1_^1*_]_^1*_$FUNCTION CODE EQUATES_^1*_]_^1*_]_^1*_$MOTION REQUEST FORMAT EQUATES_^1*_]_^1MRQFN EQU MRQFN(5)_^1MRQLU EQU MRQLU(4)_^1MRQTD EQU MRQTD(3)_3THREAD_^1MRQER EQU MRQER(4)_3ERROR CODE_^1*_]_^1*_$REW ENTRY - RECURSIVE_^1*_]_^1*_$SET FUNCTION = REW_^1*_$GO€€ COMMON CODE_^1*_]_^1REW_"EQU REW(*)_^1_%ENA FREW_7SET FUNCTION = REW_^1_%STA TEMPSV+3_3SAVE FUNCTION_^1_%ADDR TEMPSV+3,14_^1_%JMP* MOTION_^1*_]_^1*_$ADF ENTRY - RECURSIVE_^1*_]_^1*_$SET FUNCTION = ADF_^1*_$GO COMMON CODE_^1*_]_^1ADF_"EQU ADF(*)_^1_%ENA FADF_7FUNCTION = ADF_^1_%STA TEMPSV+3_3SAVE FUNCTION_^1_%ADDR TEMPSV+3,14_^1_%JMP* MOTION_^1*_]_^1*_$ADR ENTRY - RECURSIVE€€_^1*_]_^1*_$SET FUNCTION = ADR_^1*_$GO COMMON CODE_^1*_]_^1ADR_"EQU ADR(*)_^1_%ENA FADR_7FUNCTION = ADR_^1_%STA TEMPSV+3_3SAVE FUNCTION_^1_%ADDR TEMPSV+3,14_^1_%JMP* MOTION_^1*_]_^1*_$BSF ENTRY - RECURSIVE_^1*_]_^1*_$SET FUNCTION = BSF_^1*_$GO COMMON CODE_^1*_]_^1BSF_"EQU BSF(*)_^1_%ENA FBSF_7FUNCTION = BSF_^1_%STA TEMPSV+3_3SAVE FUNCTION_^1_%ADDR TEMPSV+3,14_^1_%JMP* MOTION€€_^1*_]_^1*_$BSR ENTRY - RECURSIVE_89_^1*_]_^1*_$SET FUNCTION = BSR_^1*_$GO COMMON CODE_^1*_]_^1BSR_"EQU BSR(*)_^1_%ENA FBSR_7FUNCTION = BSR_^1_%STA TEMPSV+3_3SAVE FUNCTION_^1_%ADDR TEMPSV+3,14_^1*_]_^1*_$COMMON CODE FOR MOTION COMMANDS_^1*_]_^1*_$PICK UP NUMBER_^1*_$SET TO 1 IF 0_^1*_$CHECK FOR LEGAL MAX (4095)_^1*_*IF NOT LEGAL, EXIT TO BAD OPERAND ROUTINE_^1*_$MASK IN NUMBER €€AND FUNCTION_^1*_$CHECK FOR LU NOT IN USE_^1*_$MASK IN TAPE UNIT NUMBER (IS PRINTER IF SKIP)_^1*_$MASK IN FUNCTION_^1*_$PERFORM FUNCTION_^1*_$EXIT TO DISP TO AWAIT COMPLETION_^1*_]_^1MOTION EQU MOTION(*)_^1_%OVLDA ITMPSV,14_1GET NUMBER_^1_%SAN MOTN05_5SKIP IF NOT 0_^1_%ENA 1_:DEFAULT = 1_^1MOTN05 EQU MOTN05(*)_^1_%TRA Q_:SAVE N_^1_%AND- NZERO+12_3CHECK FOR MAX_^1_%SAZ MOTN10_€€5SKIP IF OK_^1_%OVOVG 94,BADPRM,14_^1MOTN10 EQU MOTN10(*)_^1_%TRQ A_:RESTORE N_^1_%LDQ TEMPSV+3_3GET FUNCTION_^1_%ADDR TEMPSV+3,14_^1_%QLS 12_9POSITION IN 12-14_^1_%AAQ A_:COMBINE N,FUNCTION INTO Q_^1_%EOR- ONEBIT+15_2SET BIT 15 (REPEAT)_^1_%STA* MOTPKT+MRQFN_/STORE FOR REQUEST_^1_%ENQ 1_:START AT DS 1_^1_%STQ* MOTNCT_5SAVE_^1MOTNLP EQU MOTNLP(*)_^1_%LDQ AJOB-1,Q_3GET JOB T€€AB FOR DS_^1_%ADDR AJOB-1,14_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND =N$4080_4ISOLATE SUSP/ASGN FLAGS_^1_%SUB- ONEBIT+7_3CHECK FOR ASSIGNED AND RUNNING_^1_%SAZ MOTNCK_5CONTINUE CHECK IF YES_^1_%JMP* MOTNOK_5BYPASS CKECK IF NOT_^1MOTNCK EQU MOTNCK(*)_^1_%LDA- JTPLU,Q_4GET TAPE LU_^1_%SUB TEMPSV+1_3CHECK AGAINST TAPE LU_^1_%ADDR TEMPSV+1,14_^1_%SAN MOTNOK_5SKIP IF NOT SAVE_^1_%LDA-€€ JTPLU,Q_4ELSE GET LU_^1_%OVSTA ITMPSV,14_1SAVE FOR ERROR MSG RTN_^1_%OVOVG 08,LUBUSY,14_.GP ERROR MSG_^1MOTNCT NUM 0_:DS COUNT_^1MOTNOK EQU MOTNOK(*)_^1_%RAO* MOTNCT_5BUMP TO NEXT DS_^1_%LDA* MOTNCT_5GET DS NBR_^1_%INA -NBRDS-1_3MAX_^1_%SAP MOTN30_5SKIP IF ALL DONE_^1_%LDQ* MOTNCT_5GET DS BBR_^1_%JMP* MOTNLP_5CHECK NEXT_^1MOTN30 EQU MOTN30(*)_^1_%LDA* MOTPKT+MRQLU_/GET LU WOR€€D_^1_%AND- NZERO+12_3CLEAR LU AREA_^1_%EOR TEMPSV+1_3ADD IN NEW LU_^1_%ADDR TEMPSV+1,14_^1_%STA* MOTPKT+MRQLU_/SET UP LU FOR REQUEST_^1_%ENA 0_:CLEAR THREAD_^1_%STA* MOTPKT+MRQTD_^1MOTPKT EQU MOTPKT(*)_^1*_]_^1*_$HERE GOES_^1*_]_^1_%MOTION 0,MOTCMP-*+1,1,0,,,0,3,,X_^1_%JMP- (ADISP)_^1MOTCMP EQU MOTCMP(*)_^1_%SQZ MOTDON_5SKIP IF NO ERROR_^1MOTDON EQU MOTDON(*)_^1_%OVRET 14_^1_€€%EJT_]_^1*_]_^1*_$OVERLAY 15_^1*_]_^1*_$CONTAINS RESURSIVE ROUTINES_^1*_]_^1*_*SKIP_)15_^1*_]_^1*_$CALLS RESURSIVE ROUTINES_^1*_]_^1*_*NONE_^1*_]_^1*_$EXITS DIRECTLY TO RESUSSIVE ROUTINES_^1*_]_^1*_*LUBUSY_'08_^1*_*RET_*08_^1*_]_^1_%HEADER 15_^1*_]_^1*_$SKIP ENTRY - RECURSIVE_^1*_]_^1SKIP_!EQU SKIP(*)_^1*_]_^1*_$GET NUMBER AND ERROR IF NOT LEGAL_^1*_$SET TO 1 IF 0_^1*_]_^1_%OVLDA €€ITMPSV,15_1GET NUMBER ITERATIONS_^1_%SAN SKIP05_^1_%ENA 1_:SET TO 1_^1_%OVSTA ITMPSV,15_^1SKIP05 EQU SKIP05(*)_^1_%TRA Q_:SAVE N_^1_%AND- NZERO+12_3CHECK FOR MAX_^1_%SAZ SKIP10_5SKIP IF LT MAX_^1_%OVOVG 94,BADPRM,15_.ELSE FO BAD PARAM_^1SKIP10 EQU SKIP10(*)_^1_%ENQ 1_:START AT DS 1_^1_%STQ* SKIPCT_5SAVE_^1SKIPLP EQU SKIPLP(*)_^1_%LDQ AJOB-1,Q_3GET JOB TAB FOR DS_^1_%ADDR A€€JOB-1,15_^1_%LDA- JFLAGS,Q_3GET FLAGS_^1_%AND =N$4080_4ISOLATE SUSP/ASGN FLAGS_^1_%SUB- ONEBIT+7_3CHECK FOR ASSIGNED AND RUNNING_^1_%SAZ SKIPCK_5CONTINUE CHECK IF YES_^1_%JMP* SKIPOK_5BYPASS CKECK IF NOT_^1SKIPCK EQU SKIPCK(*)_^1_%LDA- JPRLU,Q_4GET PRINTER LU_^1_%SUB TEMPSV+2_3CHECK AGAINST PRINTER LU_^1_%ADDR TEMPSV+2,15_^1_%SAN SKIPOK_5SKIP IF NOT SAVE_^1_%LDA- JPRLU,Q_4ELSE€€ GET LU_^1_%OVSTA ITMPSV,15_1SAVE FOR ERROR MSG RTN_^1_%OVOVG 08,LUBUSY,15_.GP ERROR MSG_^1SKIPCT NUM 0_:DS COUNT_^1SKIPOK EQU SKIPOK(*)_^1_%RAO* SKIPCT_5BUMP TO NEXT DS_^1_%LDA* SKIPCT_5GET DS NBR_^1_%INA -NBRDS-1_3MAX_^1_%SAP SKIP30_5SKIP IF ALL DONE_^1_%LDQ* SKIPCT_5GET DS BBR_^1_%JMP* SKIPLP_5GO CHECK NEXT_^1SKIP30 EQU SKIP30(*)_^1_%LDA* SKPPKT+MRQLU_/GET LU WORD_^1_%AND- €€NZERO+12_3CLEAR LU AREA_^1_%EOR TEMPSV+2_3ADD IN PRINT LU_^1_%ADDR TEMPSV+2,15_^1_%STA* SKPPKT+MRQLU_/SET UP LU FOR REQUEST_^1SKIP20 EQU SKIP20(*)_^1_%ENA 0_:CLEAR THREAD_^1_%STA* SKPPKT+MRQTD_^1SKPPKT EQU SKPPKT(*)_^1_%MOTION 0,SKPCMP-*+1,FSKIP,0,,,0,3,,X_^1_%JMP- (ADISP)_^1SKPCMP EQU SKPCMP(*)_^1_%SQZ SKPAOK_5SKIP IF NO ERROR_^1SKPAOK EQU SKPAOK(*)_^1_%OVLDA ITMPSV,15_1GET€€ COUNT_^1_%INA -1_9CECR_^1_%SAZ SKPDON_5SKIP IF DONE_^1_%OVSTA ITMPSV,15_1ELSE SAVE NEEW COUNT_^1_%JMP* SKIP20_5AND LOOP AGAIN_^1SKPDON EQU SKPDON(*)_^1_%OVRET 15_8EXIT_^1*_]_^1* *_!SEL,JOBNAME(,TN,PN)_^1* *_!START,DXXXXXD,N(,DS)_^1* *_!STOP,DXXXXXD,N(,DS)_^1* *_!REL_]_^1* *_!PART,SLC,ELC(,DS)_^1* *_"ASGN,(TN,PN,DS)_^1* *_!REW,UNIT_^1* *_!ADF,UNIT,N_^1* *_!BSF,UNIT,N_^1* *_!ADR,€€UNIT,N_^1* *_!BSR,UNIT,N_^1* *_!SKIP,UNIT,N_^1* *_!SUSP(,DS)_^1* *_!RUN(,DS)_^1* *_!FREE(,DS)_^1* *_!TERM_]_^1_%EJT_]_^1*_]_^1*_$OVERLAY 88_(PROCESS PARAMETERS ON RUN,SUSP,FREE_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*DRUN1_(88_^1*_*DRUN2_(88_^1*_*DSUSP1_'88_^1*_*DSUSP2_'88_^1*_*DFREE1_'88_^1*_*DFREE2_'88_^1*_*DFREE3_'88_^1*_*DATASX_'88_^1*_]_^1*_$CALLS RECURSIVE ROUTINES€€_^1*_]_^1*_*EOL_*ROOT_^1*_*NM_+ROOT_^1*_*DATSTS_%07_^1*_*DATSTR_%07_^1*_*DATSTM_%07_^1*_*DATRUN_%07_^1*_*DATSAV_%07_^1*_]_^1*_$EXITS DIRECTLY TO&_^1*_]_^1*_*BADSTM_'94_^1*_*RUN_*13_^1*_*SUSP_)12_^1*_*FREE_)12_^1*_*BADSTZ_'08_^1*_*RET_*ROOT_^1*_]_^1_%EQU OVN88(*-1)_^1_%EQU OVA88(OVN88/96)_^1_%EQU OVB88(OVA88+1)_^1_%EQU OVC88(OVB88*96)_^1_%BSS (OVC88-*)_^1_%EQU BS88(BASE-*)_^1*€€_]_^1*_]_^1*_$1_"VERIFY DATA STREAM PARAM+ EOL AND GO TO 2_^1*_*IF NOT, PUT OUT BAD PARAM MSG_^1*_$2_"VERIFY DATA STREAM LEGAL, ASSIGNED AND SUSPENDED_^1*_*CALL RUN PROCESSOR_^1*_*IF NOT, ISSUE DAD DATA STREAM MESSAGE_^1*_]_^1DRUN1_#EQU DRUN1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DATASX-DATASX/96*96 OVERLAY REFERENCE_€€^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS88_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DRUN2-DRUN2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS88_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADSTM-BADSTM/96*96 OVERLAY REFERENCE_^1_%VFD €€N8/$1C,X8/IRET-*-BS88_"JMP* (IRET-*-BSXX)_^1DRUN2_#EQU DRUN2(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSTS-DATSTS/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/13,X8/RUN-RUN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS88_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO€€-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADSTM-BADSTM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS88_"JMP* (IRET-*-BSXX)_^1DATASX_#EQU DATASX(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS88_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSAV-DATSAV/96*96 OVERLA€€Y REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS88_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$1_"VERIFY DATA STREAM PARAM+ EOL AND GO TO 2_^1*_*IF NOT, PUT OUT BAD PARAM MSG_^1*_$2_"VERIFY DATA STREAM LEGAL, ASSIGNED AND RUNNING_^1*_*IF NOT, ISSUE DAD DATA STREAM MESSAGE_^1*_$CALL SUSP PROCESSOT_^1*_]_^1DSUSP1_#EQU DSUSP1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_€€^1_%VFD N1/0,N7/88,X8/DATASX-DATASX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS88_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DSUSP2-DSUSP2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS88_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VF€€D N1/0,N7/94,X8/BADSTM-BADSTM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS88_"JMP* (IRET-*-BSXX)_^1DSUSP2_#EQU DSUSP2(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSTR-DATSTR/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/12,X8/SUSP-SUSP/96*96 OVERLAY REFERENCE_^1_%VFD N€€8/$5C,X8/IDOOR-*-BS88_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADSTM-BADSTM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS88_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$1_"VERIFY DATA STREAM PARAMETER, GO TO 2_^1*_*IF BAD, ISSUE BAD SATA STREAM MESSAGE_^1*_$2_"VERIFY DATA STREAM ASSIGNED AND GO TO 3_^1*_*IF NOT, ISSUE BAD DATA STREA€€M MESSAGE_^1*_$3_"VERIFY DATA STREAM SUSPENDED AND GO TO FREE PROCESSOR_^1*_*IF NOT, ISSUE DATA STREAM ACTIVE MESSAGE_^1*_]_^1DFREE1_#EQU DFREE1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DATASX-DATASX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS88_!ROOT REFEREN€€CE_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DFREE2-DFREE2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS88_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADSTM-BADSTM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS88_"JMP* (IRET-*-BSXX)_^1DFREE2_#EQU DFREE2(*)_!RECURSIVE ROUTINE_^1_%VFD N€€8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSTM-DATSTM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DFREE3-DFREE3/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS88_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADSTM-BADSTM/96*96 OVERLAY REFERENC€€E_^1_%VFD N8/$1C,X8/IRET-*-BS88_"JMP* (IRET-*-BSXX)_^1DFREE3_#EQU DFREE3(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS88_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATRUN-DATRUN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/12,X8/FREE-FREE/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS88_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD€€ N8/$5C,X8/IGO-*-BS88_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/08,X8/BADSTZ-BADSTZ/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS88_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 89 - EMPTY FOR NPW_^1*_]_^1*_]_^1*_$DUMMY OVERLAY TO RESOLVE PROBLEMS_^1*_]_^1_%EQU OVN89(*-1)_^1_%EQU OVA89(OVN89/96)_^1_%EQU OVB89(OVA89+1)_^1_%EQU OVC89(OVB89*96)_^1_%BSS (OVC89-*)_^1_%EQU BS€€89(BASE-*)_^1*_]_^1* DUMMY ROUTINE_^1*_]_^1DUMMY_#EQU DUMMY(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$1C,X8/IRET-*-BS89_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$DUMMY ROUTINES_^1*_]_^1_%EJT_]_^1*_]_^1*_$OBERLAY 90 - PROCESS AKIP PARAMETERS_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*DSKIP1_'90_^1*_*PRUNTP_'90_^1*_*NMBRPR_'90_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*COMMM_(ROOT_^1*_*€€CKEOL_(ROOT_^1*_*NM_+ROOT_^1*_*PRLU_)05_^1*_*OUTPUT_'ROOT_^1*_]_^1*_$EXITS DIRECTLY TO&_^1*_]_^1*_*SKIP_)15_^1*_*FALSE_(ROOT_^1*_*BADPRX_'94_^1*_*RET_*ROOT_^1*_]_^1_%EQU OVN90(*-1)_^1_%EQU OVA90(OVN90/96)_^1_%EQU OVB90(OVA90+1)_^1_%EQU OVC90(OVB90*96)_^1_%BSS (OVC90-*)_^1_%EQU BS90(BASE-*)_^1*_]_^1* CHECK FOR VALID PRINTER UNIT_^1* CHECK FOR COMMA_^1* CHECK FOR VALID NUMBE€€R_^1* CHECK FOR EOL FOLLOWING_^1* CALL SKIP COMMAND PROCESSOR)_^1* ALWAYS RETURN TRUE_^1*_]_^1DSKIP1_#EQU DSKIP1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/90,X8/PRUNTP-PRUNTP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMM-*-BS90_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR€€-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/90,X8/NMBRPR-NMBRPR/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CKEOL-*-BS90_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS90_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/15,X8/SKIP-SKIP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS90_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-€€BS90_"JMP* (IRET-*-BSXX)_^1*_]_^1* ROUTINE TO CHECK FOR VALID PRINTER LOGICAL UNIT NUMBER. FALSE IF NO._^1* FALSE IF BAD NUMBER OR BAD UNIT. OUTPUT ERROR MESSAGE._^1*_]_^1PRUNTP_#EQU PRUNTP(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS90_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1€€/0,N7/05,X8/PRLU-PRLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS90_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS90_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 10_^1_%ALF 05,ILLEGAL LU_^1_%VFD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS90_^1_%VFD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS90_!ROOT REFERENCE_^1_%€€VFD N8/$5C,X8/IGO-*-BS90_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/1,X15/FALSE-*-BS90_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS90_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR VALID NUMBER._^1* IF NOT, OUTPUT ERROR MESSAGE AND RETURN FALSE_^1*_]_^1NMBRPR_#EQU NMBRPR(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS90_!ROOT REFERENCE_^1_%V€€FD N8/$5C,X8/IRECUR-*-BS90_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/09,X8/NMSAV-NMSAV/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS90_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS90_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADPRX-BADPRX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS90_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 91_(TAPE MOTION COMMAND PAR€€AMETER PROCESSING_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*DREW1_(91_^1*_*DADF1_(91_^1*_*DADR1_(91_^1*_*DBSF1_(91_^1*_*DBSR1_(91_^1*_*NMBRTP_'91_^1*_*TLUNTT_'91_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*CKEOL_(ROOT_^1*_*TPLU_)05_^1*_*OUTPUT_'ROOT_^1*_*COMMM_(ROOT_^1*_*NM_+ROOT_^1*_]_^1*_$EXITS DIRECTLY TO RECURSIVE ROUTINES_^1*_]_^1*_*REW_*14_^1*_*ADF_*14_^1*_*ADR_*€€14_^1*_*BSF_*14_^1*_*BSR_*14_^1*_*BADPRX_'94_^1*_*FALSE_(ROOT_^1*_*RET_*ROOT_^1*_]_^1_%EQU OVN91(*-1)_^1_%EQU OVA91(OVN91/96)_^1_%EQU OVB91(OVA91+1)_^1_%EQU OVC91(OVB91*96)_^1_%BSS (OVC91-*)_^1_%EQU BS91(BASE-*)_^1*_]_^1* CHECK FOR VALID TAPE UNIT PARAMETER_^1* CHECK FOR EOL FOLLOWING_^1* CALL REW COMMAND PROCESSOR_^1* ALWAYS RETURN TRUE_^1*_]_^1DREW1_#EQU DREW1(*)_!RECU€€RSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/TLUNTT-TLUNTT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CKEOL-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS91_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/14,X8/REW-REW/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS91_!RTJ* (=XIDO€€OR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS91_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR VALID TAPE UNIT NUMBER_^1* CHECK FOR COMMA_^1* CHECK FOR VALID NUMBER_^1* CHECK FOR EOL FOLLOWING_^1* CALL ADF COMMAND PROCESSOR_^1* ALWAYS RETURN TRUE_^1*_]_^1DADF1_#EQU DADF1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/TLUNTT-TLUNTT/96*€€96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMM-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/NMBRTP-NMBRTP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CKEOL-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS91_!RTJ* (=X€€IGO-*-BSXX)_^1_%VFD N1/0,N7/14,X8/ADF-ADF/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS91_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS91_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR VALID TAPE UNIT NUMBER_^1* CHECK FOR COMMA_^1* CHECK FOR VALID NUMBER_^1* CHECK FOR EOL FOLLOWING_^1* CALL ADR COMMAND PROCESSOR_^1* ALWAYS RETURN TRUE_^1*_]_^1DADR1_#EQU DADR1(*)_!REC€€URSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/TLUNTT-TLUNTT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMM-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/NMBRTP-NMBRTP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS9€€1_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CKEOL-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS91_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/14,X8/ADR-ADR/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS91_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS91_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR VALID TAPE UNIT NUMBER_^1* CHECK FOR COMMA_^1* CHECK FOR VALID NUMBER_^1* CH€€ECK FOR EOL FOLLOWING_^1* CALL BSF COMMAND PROCESSOR_^1* ALWAYS RETURN TRUE_^1*_]_^1DBSF1_#EQU DBSF1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/TLUNTT-TLUNTT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMM-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ*€€ (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/NMBRTP-NMBRTP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CKEOL-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS91_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/14,X8/BSF-BSF/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS91_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS91_"JMP* (IR€€ET-*-BSXX)_^1*_]_^1* CHECK FOR VALID TAPE UNIT NUMBER_^1* CHECK FOR COMMA_^1* CHECK FOR VALID NUMBER_^1* CHECK FOR EOL FOLLOWING_^1* CALL BSR COMMAND PROCESSOR_^1* ALWAYS RETURN TRUE_^1*_]_^1DBSR1_#EQU DBSR1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/TLUNTT-TLUNTT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS€€91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMM-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/91,X8/NMBRTP-NMBRTP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CKEOL-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS91_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/14,X8/BSR-BSR/96*96 OV€€ERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS91_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS91_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$NMBRTP - RECURSIVE_^1*_]_^1*_$VERIFY VALID NUMERIC PARAMETER_^1*_$IF NOT, ISSUE BAD PARAMETER MESSAGE AND EXIT DIRECT FLLSE_^1*_]_^1NMBRTP_#EQU NMBRTP(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-€€*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/09,X8/NMSAV-NMSAV/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS91_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS91_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADPRX-BADPRX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS91_"JMP* (IRET-*-BSXX)_^1*_]_^1* ROUTINE TO CHECK €€FOR VALID TAPE LOGICAL UNIT. FALSE IF NOT._^1* FALSE IF BAD NUMBER OR BAD UNIT. OUTPUT ERROR MESSAGE_^1*_]_^1TLUNTT_#EQU TLUNTT(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/05,X8/TPLU-TPLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X€€8/IDOOR-*-BS91_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS91_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 10_^1_%ALF 05,ILLEGAL LU_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS91_^1_%VFD N8/$5C,X8/IRECUR-*-BS91_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS91_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/1,X15/€€FALSE-*-BS91_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS91_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 92_(EXAMINE ASGN PARAMETERS_!ALWAYS TRUE_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*DASGN1_'92_^1*_*DASGN2_'92_^1*_*DASGN3_'92_^1*_*DASGN4_'92_^1*_*DATASA_'92_^1*_*ASGNLU_'92_^1*_*ASGNTU_'92_^1*_*ASGNPU_'92_^1*_]_^1*_$CALLS RECURSIVE ROUTINES_^1*_]_^1*_*DATSTT_'07_^1€€*_*COMMA_(ROOT_^1*_*EOL_*ROOT_^1*_*NM_+ROOT_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*ASGN_)11_^1*_*BADPRX_'94_^1*_*DATSAV_'07_^1*_*TPLU_)05_^1*_*PRLU_)05_^1*_*RET_*ROOT_^1*_]_^1_%EQU OVN92(*-1)_^1_%EQU OVA92(OVN92/96)_^1_%EQU OVB92(OVA92+1)_^1_%EQU OVC92(OVB92*96)_^1_%BSS (OVC92-*)_^1_%EQU BS92(BASE-*)_^1*_]_^1*_$HAVE COMMA, CHECK FOR VALID PARAMETER STRING_^1*_$VERIFY DATA ST€€REAM NUMBER OK (DEFAULT,LEGAL,ASSIGNED,SUSPENDED)_^1*_$CALL ASGN PROCESSOR IF REXT OF STMT IS OK_^1*_$IF NOT, DO NOT CALL PROCESSOR BUT RETURN TRUE_^1*_]_^1DASGN1_#EQU DASGN1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/92,X8/DASGN2-DASGN2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/€€0,N7/07,X8/DATSTT-DATSTT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/11,X8/ASGN-ASGN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS92_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS92_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK FOR VALID PARAMETERS AFTER A COMMA_^1*_$BYPASS EXTRANEOUS COMMAS_^1*_$CALL ROUTINE TO VERIFY PARAMETERS_€€^1*_$IF PARAMETER CHECK GIVES FALSE, RETRUN FALSE_^1*_$IF PARAMETER CHECK IS TRUE, GO CHECK FOR MOTE PARAMS OR EOL_^1*_$EOL WILL RETURN TRUE AND FORCE TRUE EXIT_^1*_$COMMA WILL REENTER THIS LEVEL DIRECTLY_^1*_$ANYTHING ELAE WILL RETURN FALSE FORCING FALSE EXIT_^1*_]_^1DASGN2_#EQU DASGN2(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15€€/COMMA-*-BS92_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/92,X8/DASGN2-DASGN2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS92_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/92,X8/DASGN4-DASGN4/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/92,X€€8/DASGN3-DASGN3/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS92_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$CHECK AFTER A PARAMETER_^1*_$IF EOL, EXIT TRUE_^1*_$IF COMMA, GO REPEAT PARAMETER CHECK_^1*_$IF NEITHER, RETURN FALSE AFTER BADPARAM MESSAGE_^1*_]_^1DASGN3_#EQU DASGN3(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS92_!ROOT€€ REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS92_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS92_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/92,X8/DASGN2-DASGN2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS92_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)€€_^1_%VFD N1/0,N7/94,X8/BADPRX-BADPRX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS92_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$VERIFY A PARAMETER_^1*_$RETURN FALSE IF NOT LOGICAL UNIT OR DATA STREAM_^1*_]_^1DASGN4_#EQU DASGN4(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/92,X8/ASGNLU-ASGNLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/ID€€OOR-*-BS92_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/92,X8/DATASA-DATASA/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS92_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADPRX-BADPRX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS92_"JMP* (IRET-*-BSXX)_^1DATASA_#EQU €€ DATASA(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS92_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSAV-DATSAV/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS92_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR EITHER VALID PARAMETER. FALSE IF NEITHER._^1*_]_^1ASGNLU_#EQU ASGNLU(€€*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/92,X8/ASGNTU-ASGNTU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS92_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/92,X8/ASGNPU-ASGNPU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS92_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR€€ 'T' + VALID NUMBER. FALSE IF NOT BOTH_^1* CHECK FOR VALID TAPE LOGICAL UNIT NUMBER (CALL VERIFIER)_^1* FALSE IF NOT VALID_^1*_]_^1ASGNTU_#EQU ASGNTU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS92_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,T_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS92_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRE€€CUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS92_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/05,X8/TPLU-TPLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS92_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR 'P' + VALID NUMBER. FALSE IF NOT BOTH._^1* CHECK FOR VALID PRINTER LOGICAL UNIT. FALSE IF NO (CALL ROUTINE)_^1*_]_^1ASGNPU_#EQU ASGNPU(*)_!RECURSIVE€€ ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS92_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,P_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS92_^1_%VFD N8/$5C,X8/IRECUR-*-BS92_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS92_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS92_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/05,X8/PRLU-PRLU/96*96 OVERLAY REFERENCE_^1_%€€VFD N8/$1C,X8/IRET-*-BS92_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 93_(START,STOP,PART_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*DSTRT1_'93_^1*_*DSTOP1_'93_^1*_*DPART1_'93_^1*_*CHRNUM_'93_^1*_*OPTDSS_'93_^1*_*DATASS_'93_^1*_*CHRNME_'93_^1*_]_^1*_$CALLS RECURSIVE ROUTINES_^1*_]_^1*_*DSTRNG_'05_^1*_*COMMM_(ROOT_^1*_*DATSTT_'07_^1*_*CHRNMS_'09_^1*_*NM_+ROOT_^1*_*BADP€€RX_'94_^1*_*EOL_*ROOT_^1*_*COMMA_(ROOT_^1*_*CHRNMX_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*DATSAV_'07_^1*_*START_(10_^1*_*PART_)10_^1*_*STOP_)11_^1*_*BADPRX_'94_^1*_*RET_*ROOT_^1*_]_^1_%EQU OVN93(*-1)_^1_%EQU OVA93(OVN93/96)_^1_%EQU OVB93(OVA93+1)_^1_%EQU OVC93(OVB93*96)_^1_%BSS (OVC93-*)_^1_%EQU BS93(BASE-*)_^1* CHECK FOR DELIMITED STRING_^1* CHECK FOR COMMA_^1* CHECK FOR€€ VALID STARTING CHARACTER NUMBER_^1* CHECK FOR OPTIONAL DATA STREAM NUMBER PARAMETER_^1*_$VERIFY DATA STREAM NUMBER OK (DEFAULT,LEGAL,ASSIGNED,SUSPENDED)_^1* CALL START COMMAND PROCESSOR_^1* ALWAYS RETURN TRUE_^1*_]_^1DSTRT1_#EQU DSTRT1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/05,X8/DSTRNG-DSTRNG/96*96 OVERLAY REFERENCE_^1_€€%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMM-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/93,X8/CHRNUM-CHRNUM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/09,X8/CHRNMS-CHRNMS/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR€€-*-BSXX)_^1_%VFD N1/0,N7/93,X8/OPTDSS-OPTDSS/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSTT-DATSTT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS93_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/10,X8/STRT-STRT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS93_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS93_"JMP€€* (IRET-*-BSXX)_^1*_]_^1*_]_^1* CHECK FOR DELIMITED STRING_^1* CHECK FOR COMMA_^1* CHECK FOR VALID STARTING CHARACTER NUMBER_^1* CHECK FOR OPTIONAL DATA STREAM PARAMETER_^1*_$VERIFY DATA STREAM NUMBER OK (DEFAULT,LEGAL,ASSIGNED,SUSPENDED)_^1* CALL STOR COMMAND PROCESSOR_^1* ALWAYS RETURN TRUE_^1*_]_^1DSTOP1_#EQU DSTOP1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_€€!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/05,X8/DSTRNG-DSTRNG/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMM-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/93,X8/CHRNUM-CHRNUM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/09,X€€8/CHRNMS-CHRNMS/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/93,X8/OPTDSS-OPTDSS/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSTT-DATSTT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS93_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/11,X8/STOP-STOP/96*96 OVERLAY REFERENCE_€€^1_%VFD N8/$5C,X8/IDOOR-*-BS93_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS93_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR VALID STARTING CHARACTER NUMBER_^1* CHECK FOR VALID ENDING CHARACTER NUMBER_^1*_$VERIFY DATA STREAM NUMBER OK (DEFAULT,LEGAL,ASSIGNED,SUSPENDED)_^1* CALL PART COMMAND PROCESSOR_^1* ALWAYS RETURN TRUE_^1*_]_^1DPART1_#EQU DPART1(*)_!RECURSIVE ROUTINE_^1_%€€VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/93,X8/CHRNUM-CHRNUM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/09,X8/CHRNMS-CHRNMS/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMM-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-€€*-BSXX)_^1_%VFD N1/0,N7/93,X8/CHRNME-CHRNME/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/93,X8/OPTDSS-OPTDSS/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSTT-DATSTT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS93_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/10,X8/PART-PA€€RT/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS93_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS93_"JMP* (IRET-*-BSXX)_^1*_]_^1* VERIFY CHARACTER POSITION PARAMETER. FALSE AND ERROR MSG IF BAD_^1*_]_^1CHRNUM_#EQU CHRNUM(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*€€-BS93_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS93_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADPRX-BADPRX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS93_"JMP* (IRET-*-BSXX)_^1*_]_^1* OPTIONAL DATA STREAM NUMBER_^1* EXIT TRUE ON EOL_^1* IF NOT EOL, MUST BE COMMA + VALID STREAM NBR OR ERROR AND FALSE_^1* MUST END WITH EOL OR ERROR AND FALSE_^1*_]_^1OPTDSS_#EQU €€ OPTDSS(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS93_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/93,X8/DATASS-DATASS/96€€*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS93_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS93_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADPRX-BADPRX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS93_"JMP* (IRET-*-BSXX)_^1*_]_^1* CHECK FOR VALID END POSITION AND€€ SAVE - ERROR MSG AND FALSE IF BAD_^1*_]_^1DATASS_#EQU DATASS(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS93_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/07,X8/DATSAV-DATSAV/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS93_"JMP* (IRET-*-BSXX)_^1CHRNME_#EQU CHRNME(*)_!RECURSIVE R€€OUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS93_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IRECUR-*-BS93_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/09,X8/CHRNMX-CHRNMX/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS93_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS93_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADPRX-BADPRX/96*96 OVERLAY REF€€ERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS93_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 94_^1*_]_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*BADPRX_'94_^1*_*BADPRM_'94_^1*_*BADSTM_'94_^1*_*BADSTX_'94_^1*_*BADBKX_'94_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*OUTPUT_'ROOT_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*FALSE_(ROOT_^1*_*RET_*ROOT_^1*_]_^1_%EQU OVN94(*-1)_^1_%EQU €€ OVA94(OVN94/96)_^1_%EQU OVB94(OVA94+1)_^1_%EQU OVC94(OVB94*96)_^1_%BSS (OVC94-*)_^1_%EQU BS94(BASE-*)_^1*_]_^1*_$BADPRX - CALL BADPRM ROUTINE AND EXIT DIRECTLY TO FALSE_^1*_]_^1BADPRX_#EQU BADPRX(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS94_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADPRM-BADPRM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS94_!RTJ* (=XIGO-€€*-BSXX)_^1_%VFD N1/1,X15/FALSE-*-BS94_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS94_"JMP* (IRET-*-BSXX)_^1*_]_^1* ROUTINE TO OUTPUT ='NVALID OPERAND' - ALWAYS TRUE_^1*_]_^1BADPRM_#EQU BADPRM(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS94_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 15_^1_%ALF 08,INVALID OPERAND_^1_%VFD N8/$5C,X8/IRECUR-*-BS94_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/Z€€MVP-*-BS94_^1_%VFD N8/$5C,X8/IRECUR-*-BS94_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS94_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS94_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$BADSTX - OUTPUT BAD STM ABD EXIT DIRECTLY TO FALSE_^1*_]_^1BADSTX_#EQU BADSTX(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS94_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/94,X8/BADSTM-BADSTM/96*96 OVERLA€€Y REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS94_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/1,X15/FALSE-*-BS94_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS94_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$OUTPUT BAD DATA STREAM MESSAGE_^1*_]_^1BADSTM_#EQU BADSTM(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS94_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 26_^1_%ALF 13,INVALID DATA STREAM NUMBER_^1_%VFD N8/$5C,X8/IRECUR-*-BS€€94_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS94_^1_%VFD N8/$5C,X8/IRECUR-*-BS94_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS94_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS94_"JMP* (IRET-*-BSXX)_^1*_]_^1*_$BADBKX - OUTPUT BAD BLOCKSIZE MSG_^1*_]_^1BADBKX_#EQU BADBKX(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS94_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 29_^1_%ALF 15,€€BLOCKSIZE EXCEEDS BUFFER SIZE_^1_%VFD N8/$5C,X8/IRECUR-*-BS94_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS94_^1_%VFD N8/$5C,X8/IRECUR-*-BS94_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS94_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS94_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 95_^1*_]_^1*_$PROCESSES LOGICAL UNIT NUMBER PARAMETERS ON SEL COMMAND_^1*_*ON INVAL€€ID PARAMETER, ISSUES ERROR MESSAGE, EXITS TRUE_^1*_*OTHERWISE EXITS TO SELECT COMMAND PROCESSOR AT END OF LINE_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES_^1*_]_^1*_*DSEL2_(95_^1*_*SELPAR_'95_^1*_*DSELLU_'95_^1*_*DSELTU_'95_^1*_*DSELPU_'95_^1*_]_^1*_$CALLS RECURSIVE ROUTINES_^1*_]_^1*_*COMMA_(ROOT_^1*_*EOL_*ROOT_^1*_*OUTPUT_'ROOT_^1*_*FALSE_(ROOT_^1*_*NM_+ROOT_^1*_*TPLU_)05_^1*_*PRLU_)0€€5_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_*SEL_*02_^1*_*RET_*ROOT_^1*_]_^1_%EQU OVN95(*-1)_^1_%EQU OVA95(OVN95/96)_^1_%EQU OVB95(OVA95+1)_^1_%EQU OVC95(OVB95*96)_^1_%BSS (OVC95-*)_^1_%EQU BS95(BASE-*)_^1DSEL2_#EQU DSEL2(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/95,X8/SELPAR-SELPAR/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/€€IGO-*-BS95_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/02,X8/SEL-SEL/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS95_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$1C,X8/IRET-*-BS95_"JMP* (IRET-*-BSXX)_^1*_]_^1* SELECT COMMAND OPTIONAL PARAMETER CHECK. TRUE IF NONE OR VALID._^1* EXIT TRUE IF END OF LINE_^1* EXIT TRUE IF COMMA + VALID PARAMETER (CALL CHECK ROUTINE)_^1* SCAN UNTILL END O€€F LINE OR ERROR_^1* IF NOT EOL, NOR VALID PARAMETER, OUTPUT ERROR MESSAGE_^1*_]_^1SELPAR_#EQU SELPAR(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS95_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS95_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/COMMA-*-BS95_!ROOT REFERENCE_€€^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/95,X8/DSELLU-DSELLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS95_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/95,X8/SELPAR-SELPAR/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS95_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS95_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 10_^1_%ALF 05,ILLEGAL LU_^1_%VFD N8/$€€5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS95_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS95_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS95_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/1,X15/FALSE-*-BS95_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS95_"JMP* (IRET-*-BSXX)_^1DSELLU_#EQU DSELLU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,€€X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/95,X8/DSELTU-DSELTU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS95_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/95,X8/DSELPU-DSELPU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS95_"JMP* (IRET-*-BSXX)_^1DSELTU_#EQU DSELTU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5€€C,X8/ICLI-*-BS95_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,T_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS95_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS95_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS95_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/05,X8/TPLU-TPLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-B€€S95_"JMP* (IRET-*-BSXX)_^1DSELPU_#EQU DSELPU(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS95_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 01_^1_%ALF 01,P_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS95_^1_%VFD N8/$5C,X8/IRECUR-*-BS95_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/NM-*-BS95_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS95_!RTJ* (=XIGO-*-BSXX)_^€€1_%VFD N1/0,N7/05,X8/PRLU-PRLU/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS95_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 96_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_*RNCMD3_/96_^1*_]_^1*_$CALLS RECURSIVE ROUTINES_^1*_]_^1*_*EOL_*ROOT_^1*_]_^1*_$EXITS DIRECTLY TO&_^1*_]_^1*_*DSTOP1_'93_^1*_*REL_*ROOT_^1*_]_^1*_$RETURNS FALSE TO ORIGINAL CALLER OF RNCMDX OVERL€€AY GROUP_^1*_]_^1*_$CHECKS FOR COMMANDS_^1*_]_^1*_*ON FIND, EXITS TO APPROPRIATE PROCESSOR_^1*_*ON NO FIND, OUTPUTS UNDEFINED COMMAND MSG AND EXITS TRUE_^1*_]_^1*_$'LPT,'_$GO TO DLPT1_^1*_$'STOP,'_#GO TO DSTOP1_^1*_$'REL'_%GOTO REL_^1*_]_^1_%EQU OVN96(*-1)_^1_%EQU OVA96(OVN96/96)_^1_%EQU OVB96(OVA96+1)_^1_%EQU OVC96(OVB96*96)_^1_%BSS (OVC96-*)_^1_%EQU BS96(BASE-*)_^1RNCMD3_€€#EQU RNCMD3(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS96_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 05_^1_%ALF 03,STOP,_^1_%VFD N8/$5C,X8/IRECUR-*-BS96_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS96_^1_%VFD N8/$5C,X8/IGO-*-BS96_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/93,X8/DSTOP1-DSTOP1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS96_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,€€X8/ICLI-*-BS96_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,REL_^1_%VFD N8/$5C,X8/IRECUR-*-BS96_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS96_^1_%VFD N8/$5C,X8/IRECUR-*-BS96_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS96_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS96_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/1,X15/REL-*-BS96_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS96_!RTJ* €€(=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS96_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 17_^1_%ALF 09,UNDEFINED COMMAND_^1_%VFD N8/$5C,X8/IRECUR-*-BS96_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/ZMVP-*-BS96_^1_%VFD N8/$5C,X8/IRECUR-*-BS96_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/OUTPUT-*-BS96_!ROOT REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS96_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 97€€_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_$RNCMD2_497_^1*_$DTERM_597_^1*_]_^1*_$CALLS RECURSIVE ROUTINES_^1*_]_^1*_*EOL_*ROOT_^1*_]_^1*_$EXITS DIRECTLY TO_^1*_]_^1*_$RNCMD3_496_^1*_*DTERM1_^1*_*DREW1_(91_^1*_*DADF1_(91_^1*_*DADR1_(91_^1*_*DBSF1_(91_^1*_*DBSR1_(91_^1*_*DSKIP1_'90_^1*_*DSTRT1_'93_^1*_*DPART1_'93_^1*_]_^1*_$CHECKS FOR COMMANDS_^1*_]_^1*_*ON FIND, EXITS TO APP€€ROPRIATE PROCESSOR_^1*_*ON NO FIND, EXITS TO RNCMD3_^1*_]_^1*_$TERM_'GO TO DTERM1_^1*_$REW,_'GO TO DREW1_^1*_$ADF,_'GO TO DADF1_^1*_$ADR,_'GO TO DADR1_^1*_$BSF,_'GO TO DBSF1_^1*_$BSR,_'GO TO DBSR1_^1*_$SKIP,_%GO TO DSKIP1_^1*_$START,_$GO TO DSTRT1_^1*_$PART,_%GO TO DPART1_^1*_]_^1_%EQU OVN97(*-1)_^1_%EQU OVA97(OVN97/96)_^1_%EQU OVB97(OVA97+1)_^1_%EQU OVC97(OVB97*96)_^1€€_%BSS (OVC97-*)_^1_%EQU BS97(BASE-*)_^1RNCMD2_#EQU RNCMD2(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/97,X8/DTERM-DTERM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,REW,_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR€€-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/91,X8/DREW1-DREW1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,ADF,_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X€€8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/91,X8/DADF1-DADF1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,ADR,_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/91,€€X8/DADR1-DADR1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,BSF,_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/91,X8/DBSF1-DBSF1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5€€C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,BSR,_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/91,X8/DBSR1-DBSR1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/€€$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 05_^1_%ALF 03,SKIP,_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/90,X8/DSKIP1-DSKIP1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM €€ 06_^1_%ALF 03,START,_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/93,X8/DSTRT1-DSTRT1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 05_^1_%ALF 03,PART,_^1_%VFD N8/$5C,X8/IRECUR-*-€€BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/93,X8/DPART1-DPART1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS97_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/96,X8/RNCMD3-RNCMD3/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS97_"JMP* (IRET-*-BSXX€€)_^1DTERM_#EQU DTERM(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS97_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,TERM_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS97_^1_%VFD N8/$5C,X8/IRECUR-*-BS97_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS97_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS97_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/12,X8/€€TERM-TERM/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS97_"JMP* (IRET-*-BSXX)_^1_%EJT_]_^1*_]_^1*_$OVERLAY 98_^1*_]_^1*_$CONTAINS RECURSIVE ROUTINES&_^1*_]_^1*_$RNCMD1_498_^1*_$DFREE_598_^1*_$DRUN_698_^1*_$DSUSP_598_^1*_]_^1*_$CALLS RECURSIVE ROUTINES&_^1*_]_^1*_*EOL_*ROOT_^1*_]_^1*_$EXITS DIRECTLY TO&_^1*_]_^1*_$RUCMD2_497_^1*_*DASGN1_'92_^1*_*DSEL1_(01_^1*_*DRUN1_(88_^1*_€€*DRUN2_(88_^1*_*DSUSP1_'88_^1*_*DSUSP2_'88_^1*_*DFREE1_'88_^1*_*DFREE2_'88_^1*_]_^1*_$CHECKS FOR COMMON COMMANDS FOR RUN MODE_^1*_]_^1*_*ON FIND, EXITS DIRECTLY TO APPROPRIATE PROCESSOR_^1*_*ON NO FIND, EXITS DIRECTLY TO RNCMD2_^1*_]_^1*_$SEL,_'GO TO DSEL1_^1*_$RUN,_'GO TO DRUN1_^1*_$SUSP,_%GO TO DSUSP1_^1*_$FREE,_%GO TO DFREE1_^1*_$ASGN,_%GO TO DASGN1_^1*_$RUN + EOL_!GO TO D€€RUN2_^1*_$SUSP + EOL GO TO DSUSP2_^1*_$FREE + EOL GO TO DFREE2_^1*_$ASGN,_$GO TO DASGN1_^1*_]_^1_%EQU OVN98(*-1)_^1_%EQU OVA98(OVN98/96)_^1_%EQU OVB98(OVA98+1)_^1_%EQU OVC98(OVB98*96)_^1_%BSS (OVC98-*)_^1_%EQU BS98(BASE-*)_^1*_]_^1RNCMD1_#EQU RNCMD1(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS98_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,SEL,_^1_%VFD N8/$5C,X8/€€IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS98_^1_%VFD N8/$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/01,X8/DSEL1-DSEL1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS98_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS98_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,RUN,_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X€€15/CST-*-BS98_^1_%VFD N8/$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DRUN1-DRUN1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS98_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/98,X8/DRUN-DRUN/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS98_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS98_!RTJ* €€(=XICLI-*-BSXX)_^1_%NUM 05_^1_%ALF 03,FREE,_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS98_^1_%VFD N8/$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DFREE1-DFREE1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS98_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/98,X8/DFREE-DF€€REE/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS98_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS98_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 05_^1_%ALF 03,SUSP,_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS98_^1_%VFD N8/$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DSUSP1-DSUSP1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDO€€OR-*-BS98_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/0,N7/98,X8/DSUSP-DSUSP/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS98_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/ICLI-*-BS98_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 05_^1_%ALF 03,ASGN,_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS98_^1_%VFD N8/€€$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/92,X8/DASGN1-DASGN1/96*96 OVERLAY REFERENCE_^1_%VFD N8/$5C,X8/IDOOR-*-BS98_!RTJ* (=XIDOOR-*-BSXX)_^1_%VFD N8/$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/97,X8/RNCMD2-RNCMD2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS98_"JMP* (IRET-*-BSXX)_^1DRUN_#EQU DRUN(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS€€98_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 03_^1_%ALF 02,RUN_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS98_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS98_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DRUN2-DRUN2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS98_"JMP*€€ (IRET-*-BSXX)_^1DSUSP_#EQU DSUSP(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS98_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,SUSP_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS98_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/EOL-*-BS98_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD €€N1/0,N7/88,X8/DSUSP2-DSUSP2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS98_"JMP* (IRET-*-BSXX)_^1DFREE_#EQU DFREE(*)_!RECURSIVE ROUTINE_^1_%VFD N8/$5C,X8/ICLI-*-BS98_!RTJ* (=XICLI-*-BSXX)_^1_%NUM 04_^1_%ALF 02,FREE_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X15/CST-*-BS98_^1_%VFD N8/$5C,X8/IRECUR-*-BS98_!RTJ* (=XIRECUR-*-BSXX)_^1_%VFD N1/1,X€15/EOL-*-BS98_!ROOT REFERENCE_^1_%VFD N8/$5C,X8/IGO-*-BS98_!RTJ* (=XIGO-*-BSXX)_^1_%VFD N1/0,N7/88,X8/DFREE2-DFREE2/96*96 OVERLAY REFERENCE_^1_%VFD N8/$1C,X8/IRET-*-BS98_"JMP* (IRET-*-BSXX)_^1_%END RUNMOD_^__PSIM200 CSY/ P€1_%NAM SIM200_'200UT SIMULATOR(SOFRES 31AUG75-PTSD)_^1SPAC_!MAC N,A,P_^1_%RTJ- ($F4)_^1_%ADC $1540+'P'_^1_%ADC 'A'-*+1,0,0_^1_%ADC 'N'_^1_%EMC_]_^1SCHED MAC A_^1_%RTJ- ($F4)_^1_%ADC $1300+LVL2_^1_'ADC 'A'-*+1_^1_%EMC_]_^1TAB_"MAC K,L,M_^1_%VFD N1/0,X5/'K'-$40,X5/'L'-$40,X5/'M'-$40_^1_%EMC_]_^1DEF_"MAC L,N_^1_%EQU 'L'(*-PDT)_^1_%BSS ('N')_^1_%EMC_]_^1_%SPC 1_^1*_#THIS€€ PACKAGE SIMULATES UP TO 16 INDEPENDENT 200 USER TERMINALS_^1*_#ON A SINGLE CDC 1700_^1*_]_^1*_#P.B.J. VAN ELSWIJK_^1*_#MAY, 1970_^1*_]_^1*_#FOR DETAILS, SEE ERS_^1_%SPC 1_^1_%EXT MAKEQ,LOG1A_^1_%EXT S200BS_^1_%EXT MIB,MIBX_^1_%EXT_!R3644_^1_%EXT_"TIMINT_^1*_8WITH THE SIM200 PROGRAM_^1*_$****************************************************************_^1*_$SETUP THE FOLLOWING E€€QUS BEFORE INSTALLING THE PROGRAM_^1*_$****************************************************************_^1_%SPC 1_^1_%EQU TT1713(0)_#TELETYPE USED IS NOT 1713_^1*_$EQU TT1713(1)_#TELETYPE USED IS 1713_^1_%EQU MSOS30(1)_$OPERATING SYSTEM USED IS 3.0_^1*_$EQU MSOS30(0)_%OPERATING SYSTEM USED IS NOT 3.0_^1*_$EQU MX1749(1)_#1749 COMMUNICATION MULTIPLEXER IS USED FV/ER_^1_%EQU M€€X1749(0)_#364-4 MULTIPLEXER IS USED_'FV/ER_^1_%EQU PLOTER(0)_#PLOTTER IS NOT USED_-FV/ER_^1*_$EQU PLOTER(1)_#PLOTTER DEVICE IS USED_*FV/ER_^1_%EQU PLOTLU(05)_"PLOTTER LOGICAL UNIT NBER PARIS/JFP_^1_%EQU DISKLU(8)_#DISK LU USED AS MASS STORAGE_#FV/ER_^1_%SPC 3_^1_(EQU_%BCD(1)_"IF BCD=1 THE SIMULATED 200 UT IS BCD_^1*_'EQU_%BCD(0)_"IF BCD=0 THE SIMULATED 200 UT IS ASCII_^1*_#€€EXTERNAL BCD CODES_^1_%SPC 1_^1_%EQU E1($42)_^1_%EQU E2($20)_^1_%EQU E3($21)_^1_%EQU E4($22)_%PLOTTER CODE AFTER EOM_*FV/ER_^1_%EQU SYNC($16)_^1_%EQU EOL($50),CARR($41),SOM(1)_^1_%EQU YEOF(0)_!STOP AT END OF DECK (GIVE CU AT FAILURE)_^1*_$EQU YEOF(1) STOP AT END OF EACH FILE_^1_%IFA BCD,EQ,1_^1_%EQU ESCAPE($3E)_^1_%EIF_]_^1_%IFA BCD,EQ,0_^1_%EQU ESCAPE($1B)_^1_%EIF_]_^1€€_%EQU EOR($57),EOF($56),ETX(3)_^1_%EQU EJECT($41),DBSPAC($4A),SUPPR($30)_^1_%EQU RFORM($29)_^1_%EQU FFORM($36)_^1_%SPC 1_^1*_#200 USER TERMINAL CODES_^1_%SPC 1_^1_%EQU POLL(5),ACKNOW(6),REJEC($18)_^1_%EQU WRITE($11),CWRITE($12),RWRITE($C)_^1_%EQU DIAGWR($10),READ($13),ALERT(7)_^1_%EQU ERRCOD($15),EQNR(14)_^1_%EQU LVL1(11)_(PRIORITY OF DRIVER_^1_%EQU LVL2(7)_)PRIORITY OF€€ SIMULATOR_^1_%SPC 2_^1*_]_^1_%EXT SIMBUF_^1_%EXT SIMDMP_^1*_]_^1_%EJT_]_^1*_;ASCII CODES_^1_%SPC 1_^1_%EQU SEMIC($3B)_^1_%EQU BLANK($20),SLASH($2F),POINT($2E)_^1_%EQU A($41),F(A+6),XI(A+8),L(A+11)_^1_%EQU K(A+10),D(A+3),DIGIT($30)_^1_%EQU COMMA($2C)_^1_%EQU EOFC($2),EORC($4)_^1_%EQU EORC1($22)_^1_%SPC 1_^1*_+EQUIPMENT CLASS CODES_^1_%SPC 1_^1_%EQU MAGTAP(1),MMTYPE(2)€€,CARDTP(3)_^1_%EQU PTAPE(4),PRINTP(5),TTY(6)_^1_$EQU NUMLU(20)_^1_%SPC_!1_^1*_'PHYSTB ENTRIES_^1_%SPC_!1_^1_%EQU ELU(5),REQLOC(6),DTYPE(8)_^1_%EQU ERRTAB(8),CORE(10)_^1_%EQU ESTAT2(12)_^1_%EQU RD(2),WR(4)_^1_%EJT_]_^1*_$BUFER PARAMETERS_^1_%SPC 1_^1_%EQU LINSIZ(69)_"138 CHARACTER BUFFER_^1_(EQU_%SIZE(10*96)_^1_%SPC_"2_^1*_]_^1_%EQU MESSL(42)_!(80=42*2-4) CHARACTER BUFFER FO€€R DISPLAY_!PED_^1*_]_^1_%SPC 1_^1*_#COMMUNICATION AREA ENTRIES_^1_%SPC 1_^1_%EQU ZERO($22),LOCORE($F7),HICORE($F6)_^1_%EQU ONEBIT($23),LPMSK(2),ZROBIT($33),NZERO($12)_^1_(EQU N7(LPMSK+15),N8(ONEBIT+15)_^1_(EQU DISP($EA),COMPRQ($B6)_^1_(SPC 1_^1*_$REQUEST PARAMETERS_^1_(SPC 1_^1_(EQU THR(2),LU(3),LENGTH(4),BUFAD(5),SEC(6)_^1*_"THE FOLLOWING EQ DEFINES ,CTC REJECT>_^1_%EQU LERRM(*-ERRMES)_^1_%EJT_]_^1*_]_^1*_$PROCESSING OF ALERT MESSAGE_^1*_]_^1_(SPC 1_^1ALRT_!RTJ* RDEOM_+CHECK MESSAGE PARITY_^1_%LDA- BUSY,I_^1_%SAZ 1_^1_%JMP* REJECT_+REJECT MESSAGE IF DISPLAY BUFFER OCCUPIED_^1_%LDA- MMREAD+BUFAD,I_^1_%STA* B3_.ADDRESS OF DISPLAY BUFFER€€_^1_%ENQ LMESS-1_^1CPAL_!LDA* ALMS,Q_*COPY ALERT MESSAGE IN DISPLAY BUFFER_^1_%STA* (B3),Q_^1_%INQ -1_^1_%SQM 1_^1_%JMP* CPAL_^1_%JMP WRE1_,PROCESS AS ORDINARY DISPLAY MESSAGE_^1_%BZS B3_^1ALMS_!NUM_!$3123_'A,L,_^1_%NUM_!$3549_'E,R,_^1_%IFA BCD,EQ,1_^1_%NUM $533E_(T, ESCAPE_^1_%EIF_]_^1_%IFA BCD,EQ,0_^1_(NUM_#$531B_%T, ESCAPE_^1_%EIF_]_^1_%NUM_!$4203_'E1,ETX_^1_%NUM -0_^1_€€%EQU_!LMESS(*-ALMS)_^1_%EJT_]_^1*_$SUBROUTINE TO ISSUE THE HEADER OF THE REPLY MESSAGE_^1_(SPC 1_^1REPLY NUM_!0_^1_%LDQ- CONN,I_^1*_(THIS CODE IS GENERATED IF THE 364-4 IS USED_^1_)IFA_!MX1749,EQ,0_^1_%INQ $10_^1_%LDA =N$10A_^1_)EIF_^1*_(THIS CODE IS GENERATED IF THE 1749 IS USED_^1_)IFA_!MX1749,EQ,1_^1_%INQ 1_MFV/ER_^1_%LDA =N$826_HFV/ER_^1_)EIF_^1_%OUT ERR-*_+SWITCH TO TRA€€NSMIT MODE_^1_%LDQ* REPLY_'SAVE RETURN ADDRESS_^1_%ENA SYNC_^1_%RTJ* OUTPUT_*MESSAGE PRECEDED BY 4 SYNCS_^1_%ENA SYNC_^1_%RTJ* OUTPUT_^1_%ENA SYNC_^1_%RTJ* OUTPUT_^1_%ENA SYNC_^1_%RTJ* OUTPUT_^1_'ENA 0_^1_'STA- PARITY,I_)SET UP FOR PARITY GENERATING_^1_%ENA SOM_-START OF MESSAGE CODE_^1_%RTJ* OUTPUT_^1_%LDA- SITE,I_^1_%RTJ* OUTPUT_*SEND SITE ADDRESS_^1_%LDA- (ZERO),Q_(PARAME€€TER IS MESSAGE CODE_^1_%INA -REJEC_^1_%SAN NRJ_-SKIP IF NO REJECT_^1_%LDA- MSCODE,I_^1_%INA -POLL_+IS IT REJECT TO POLL MESSAGE_^1_%SAN NRJ_-SKIP IF NOT_^1_%ENA -1_^1_%AND- STATION,I_'STATION 140/160_^1_%JMP* NRJ+1_^1NRJ_"LDA- STATION,I_'OTHERWISE ORDINARY STATION ADDRESS_^1_%RTJ* OUTPUT_^1_%LDA- (ZERO),Q_(MESSAGE CODE_^1_%RTJ* OUTPUT_^1_%JMP- 1,Q_^1SKIPM_!RTJ RDEOM_^1ERRPLY€€ RTJ* REPLY_+ERROR REPLY EXIT_^1_%ADC ERRCOD_^1_%JMP* MSEND_+FINISH MESSAGE_^1*_]_^1ACKN_!RTJ* REPLY_+ACKNOWLEDGE MESSAGE EXIT_^1_%ADC ACKNOW_^1_%JMP* MSEND_+FINISH MESSAGE_^1*_]_^1_]_^1_]_^1RJT_#RTJ RDEOM_^1REJECT RTJ* REPLY_+REJECT MESSAGE EXIT_^1_%ADC REJEC_^1_%JMP* MSEND_+FINISH MESSAGE_^1_'EJT_^1*_$PROCESSING OF POLL MESSAGE_^1_(SPC 1_^1POLLM_!RTJ RDEOM_,CHECK MESSAGE PE€€RITY_^1_%LDQ- MMREAD+BUFAD,I_!ADDRESS OF DISPLAY BUFFER_^1_%LDA- READSW,I_$TEST FOR PENDING READ_^1_%SAN RDOP_^1_%JMP* REJECT_'REJECT IF NOT_^1RDOP_!INA -1_-TEST FOR OPERATOR MESSAGE_^1_%SAN RDOP2_^1_%LDQ- MSBUF,I_)TEST IF OPERATOR MESSAGE WAITING_^1RDOP2 STQ- IDX,I_+ADDRESS OF READ MESSAGE_^1_%RTJ* REPLY_+SET UP READ MESSAGE_^1_%ADC READ_^1_%LDQ- READSW,I_^1_%SQM MSEND2_'TES€€T FOR AUTOMATIC READ_^1_%JMP* NORM_^1MSEND2 ENA ESCAPE_^1_%RTJ* OUTPUT_^1_%LDA* TCODE+3,Q_'SELECT TERMINATING CODE_^1_%RTJ* OUTPUT_*OUTPUT E-CODE_^1MSEND ENA ETX_-END OF MESSAGE_^1_%RTJ* OUTPUT_^1_%LDA- PARITY,I_^1_%TCA A_/INVERT FOR ODD PARITY_^1_%RTJ* OUTPUT_*SEND MESSAGE PARITY_^1_%ENA $7F_^1_%RTJ* OUTPUT_5OUTPUT 1ST PAD_^1_%ENA $7F_^1_%RTJ* OUTPUT_5OUTPUT 2ND PAD_^1_%ENA €€ $7F_^1_%RTJ OUTPUT_5O/P 3RD PAD_^1_%ENA $7F_^1_%RTJ OUTPUT_5OUTPUT 4TH PAD_^1_%JMP_!RECEVE_%RESYNC_^1*_]_^1NORM_!LDQ- IDX,I_^1_%TRQ A_^1_%AND- LPMSK+15_%STRIP OFF UPPER/LOWER STORE FLAG_^1_%LLS 16_,A=Q=POINTER(Q IS WITHOUT UPP/LOW FLAG)_^1_%SAP NORM1_)P=GET CHAR.FROM LEFT BYTE_^1_%LDA- (ZERO),Q_^1_%ALS 8_/SELECT CHARACTER_^1_%INQ 1_-SET BUFFER POINTER TO NEXT WORD_^1_%JMP*€€ NORM2_^1NORM1 LDA- (ZERO),Q_^1_%ADQ- ONEBIT+15_$SET BUFF.POINTER TO RIGHT BYTE_^1NORM2 SAP NORM8_)P=CHAR.IS NOT LAST IN BUFFER_^1_%LDQ- READSW,I_$END OF BUFFER_^1_%TCQ Q_,SELECT E-CODE ACCORDING TO READSW_^1_%JMP* MSEND2_^1NORM8 STQ- IDX,I_)SAVE BUFFER POINTER_^1_%ENQ_!0_^1_%LLS 8_^1_%TRQ A_^1_'INA -EORC_*TEST FOR END OF RECORD CODE_^1_%SAN 2_^1*****_!THE CODE GENERATED D€€EPENDS ON THE LANGUAGE (ASCII OR BCD) AR_^1_%IFA BCD,EQ,1_^1_%ENQ_"$58_%IN ORDER TO LOAD AND SEND $57(BCD-EOR)_$PED_^1*_8FROM CONTAB._=PED_^1_%EIF_]_^1_%IFA BCD,EQ,0_^1_%ENQ $57_^1_%EIF_]_^1_%JMP* OUTESC_^1_%INA EORC-EOFC_(ETST FOR EOF CODE_^1_%SAN 4_^1*****_!THE CODE GENERATED DEPENDS ON THE LANGUAGE (ASCII OR BCD) AR_^1_%IFA BCD,EQ,1_^1_%ENQ_"$57_%TO LOAD AND SEND $56 FRO€€M CONTAB (EOF/BCD) PED_^1_%EIF_]_^1_%IFA BCD,EQ,0_^1_%ENQ $56_^1_%EIF_]_^1OUTESC ENA ESCAPE_^1_%RTJ OUTPUT_^1*****_!THE CODE GENERATED DEPENDS ON THE LANGUAGE (ASCII OR BCD) AR_^1_%IFA BCD,EQ,1_^1_%LDA_!CONTAB-BLANK,Q_^1_%ARS 8_^1_%EIF_]_^1_%IFA BCD,EQ,0_^1_%TRQ A_^1_%EIF_]_^1_'RTJ OUTPUT_^1_%JMP* NORM_^1*_]_^1TCODE ADC E3,E2,E1_^1*_]_^1*_$PROCESSING OF DIAGNOSTIC WRIT€€E MESSAGE_^1*_]_^1_(SPC 3_^1DG_#RTJ* REPLY_(ISSUE READ REPLY_^1_%ADC READ_^1_%LDQ- MMREAD+BUFAD,I_^1*_]_^1DGCYC LDA- (ZERO),Q_^1_%SQP 1_.ISSUE READ REPLY_^1_%ALS 8_^1_%SAM ENDRD_*SKIP IF END OF INPUT_^1_'ADQ- N8_^1_%ARS 8_^1_%RTJ OUTPUT_)OUTPUT CHARACTER_^1_%JMP* DGCYC_^1*_]_^1ENDRD JMP* MSEND_^1_%EJT_]_^1*_]_^1_]_^1_]_^1*_$CHARACTER PICK UP ROUTINE_^1*_$THIS ROUTINE PROVI€€DES PARTIAL READING OF THE PRINTER MM BUFFER_^1*_]_^1_%SPC 1_^1GETCHR NUM 0_^1_%LDQ- COUNT,I_^1GETC_!RAO- COUNT,I_)UPDATE CHARACTER COUNT_^1_%SQP EXH_-SKIP IF COUNT EXHAUSTED_^1_%QLS 15_^1_%ADQ- MRQ+BUFAD,I_$COMPUTE ADDRESS OF NEXT CHARACTER_^1_%TRQ A_^1_%AND- LPMSK+15_^1_%LLS 16_,A=Q=PTR.(Q IS WITHOUT UPP/LOW FLAG)_^1_%SAM GC1_+M=GET RIGHT-HAND CHAR._^1_%LDA- 96,Q_,FETH 2 C€€HARACTERS_^1_%ALS 8_/OR LEFT CHARACTER_^1_%JMP* RGT_^1GC1_"LDA- 96,Q_^1RGT_"AND- LPMSK+7_^1_%JMP* (GETCHR)_^1*_]_^1EXH_"LDA* GETCHR_*SET UP TO READ NEXT SECTOR_^1_%STA- COUNT,I_)SAVE RETURN ADDRESS_^1_%RTJ_!INDIR_^1_%ADC (MRQ)_^1_%JMP- (DISP)_^1*_]_^1*_$COMPLETION ROUTINE OF MRQ_^1*_]_^1_%SPC 1_^1MRQC_!INA -MRQ_,COMPUTE PHYSTB ADDRESS_^1_%STA- I_^1_'RAO- IOPR,I_^1_%RAO- MRQ+SEC€€+1,I_$UPDATE SECTOR NR. FOR NEXT CALL_^1_%LDA- COUNT,I_^1_%STA* GETCHR_*RESTORE RETURN ADDRESS_^1_]_^1_]_^1_%LDQ =N-192_^1_%STQ- COUNT,I_)INITIALIZE CHARACTER COUNT_^1_%JMP* GETC_^1_%EJT_]_^1OPMS_!000 0_,SUBROUTINE TO DETERMINE WHETHER AN_^1*_8OPERATOR MESSAGE IS WAITING FOR TRANSFER_^1*_8TO THE CENTRAL SITE._^1*_8THIS EFFECTIVELY IMPLEMENTS THE 'INT' KEY_^1_%IIN 0_^1_%LDA- OPME€€SS,I_^1_%SAZ OPMS1_(SKIP IF NOT WAITING_^1_%ENQ 0_^1_$STQ- OPMESS,I_%RESET FLAG_^1_%SAM OPMS2_(SKIP IF INTERRUPT ONLY_^1_%ENA 1_^1_]_^1_]_^1_%STA- READSW,I_$SET TO TRANSMIT OPERATOR MESSAGE_^1_%STA- LOCK,I_'AND LOCK OUT KEYBOARD_^1_%JMP* OPMS1_^1*_]_^1OPMS2 STQ- LOCK,I_'UNLOCK KEYBOARD_^1OPMS1 EIN 0_^1_%JMP* (OPMS)_^1*_]_^1*_,PROCESSING OF WRITE MESSAGE ENDING IN E2_^1*_]_^1€€_%SPC 1_^1WRE2_!LDQ- LISTLU,I_^1_%LDA- LISTSW,I_^1_%SAN PNRD_)SKIP IF 'LIST' IN PROGRESS_^1_%LDA LOG5,Q_^1_%AND- IDMBIT,I_$TEST IF PRINTER FREE TO USE_^1_%SAZ PRDY_^1PNRD_!JMP NRDY_)GO ISSUE 'PRINTER NOT READY'_^1*_]_^1PRDY_!LDA- IDBIT,I_^1_%STA LOG5,Q_'SET PRINTER IN USE_^1_%RAO- BUSY,I_'SET BUFFER IN USE_^1_%LDA- FREE,I_^1_%RAO- FREE,I_'FLAG DATA PRESENT_^1_%SAN PRD1_)SKIP€€ IF PREVIOUS NOT YET COMPLETED_^1_%LDQ- I_^1_%SCHED WRE21_^1PRD1_!JMP ACKN_)ACKNOWLEDGE MESSAGE_^1*_]_^1*_]_^1WRE21 STQ- I_^1_%RTJ INDIR_(WRITE BUFFER TO MASS STORAGE_^1_%ADC (MMWRT)_^1_%RTJ* OPMS_)TEST FOR INSERTION OF OP.MESS._^1_%SAN WRE22_(SKIP IF SO_^1_%ENA -3_^1_%STA- READSW,I_$SET TO XMIT 'PRINTER READY'_^1WRE22 JMP- (DISP)_^1*_]_^1*_$COMPLETION ROUTINE OF MMWRT_^1*_€€]_^1_%SPC 1_^1_%BZS_!B_^1MMWCMP INA -MMWRT_*COMPUTE PHYSTB ADDRESS_^1_%STA- I_^1_%RAO- IOPR,I_^1_%ENA 0_^1_%STA- BUSY,I_*SET CORE BUFFER AVAILABLE_^1_%STA- PRBUSY,I_^1_%LDQ- CHLU,I_^1_%SQZ NEXTP_(SKIP IF NO L.U. CHANGE_^1_%STA- CHLU,I_^1_%RTJ PRLU_)SET UP NEW PRINTER LU_^1_%EJT_]_^1NEXTP LDA- MMWRT+SEC+1,I_^1_%STA- MRQ+SEC+1,I_$INITIALIZE PARTIAL READ_^1_%ENA 0_^1_%STA- COUN€€T,I_)DUMMY COUNT TO FORCE READ_^1_%SPC 1_^1*_$PREPARE PRINT LINE_^1_%SPC 1_^1NEXTL LDA- SAVAD,I_)ADDRESS OF FREE PRINT BUFFER_^1_%STA* B_^1_'ENQ LINSIZ-1_^1_%LDA =A_^1CLC_"STA* (B),Q_+BACKGROUND BUFFER TO BLANKS_^1_%INQ -1_^1_%SQM 1_^1_%JMP* CLC_^1_%ENA 0_^1_%STA- PNTR,I_*POINTER TO START OF LINE_^1***_!THIS MODIF.MAY O N L Y BE USED WHEN 1 TERMINAL._^1***_!-IF MORE THAN €€1, PUT THIS FLAG INTO TERMINAL TABLE._^1_%STA* ESC1ST_$CLEAR ESCAPE FLAG_9PED_^1*_$*_/ESC1ST=1 IF ESCAPE IS 1ST CHAR OF A LINE_!PED_^1*_$*_/- IN THIS CASE, A LINE-SUPPRESS IS SIMULATEPED_^1_%SPC 1_^1*_$FORMAT CONTROL CHARACTER PROCESSING_^1_%SPC 1_^1_%IFA PLOTER,EQ,1_^1_%LDA- LISTLU,I_$GET LIST LU NUMBER AND DO NOT INTERPRET FV/ER_^1_%INA -PLOTLU_%FIRST CHAR AS CONTROL CHAR. IF€€ PLOTTER_!FV/ER_^1_%SAZ 2_MFV/ER_^1_%INA PLOTLU-DISKLU_(OR IF THE DISK_*FV/ER_^1_%SAN 1_MFV/ER_^1_%JMP* NEXTCH+1_FFV/ER_^1_%EIF_]_^1_%RTJ* GETCHR_*GET FORMAT CONTROL CODE_^1_%INA -ESCAPE_#TEST FOR ESCAPE CHARACTER_1PED_^1_%SAN 3_UPED_^1_%ENQ 2_*SIMULATE A LINE-SUPPR IF 1 LINE = ESC, E2 PED_^1_%RAO* ESC1ST_$SET ESCAPE FLAG_;PED_^1_%JMP* FNDC_RPED_^1_%ENQ 0_^1_%INA ESCAPE-DB€€SPAC_!DOUBLE SPACE_:PED_^1_%SAZ FNDC_^1_%ENQ 1_^1_%INA -EJECT+DBSPAC EJECT_^1_%SAZ FNDC_^1_%ENQ 2_^1_%INA EJECT-SUPPR_$LINE SUPPRESS_^1_%SAZ FNDC_^1_%ENQ 4_^1_%INA SUPPR-RFORM_$TEST FOR EOR CODE_^1_%SAZ FNDC_^1_%ENQ 5_/FOR ALL OTHER CODES_^1_%INA RFORM-FFORM_$TEST FOR EOF CODE_^1_%SAZ FNDC_^1_%ENQ 3_/OTHER CHARACTER_^1FNDC_!LDA- LINTYP,I_(TYPE OF LIST OUTPUT DEVICE_^1€€_%INA -TTY_,TEST FOR TELETYPE_^1_%SAZ TTY2_^1_%INA TTY-PTAPE_^1_%SAZ TTY2_^1_%INA PTAPE-MAGTAP_#TEST FOR MAGTAPE DEVICE_^1_%SAZ NTTY_^1_%INQ 6_^1TTY2_!INQ 6_/SELECT CODE TABLE ACCORDING TO DEVICE_^1NTTY_!LDA FORMAT,Q_$TRANSLATE FORMAT CONTROL CHARACTER_^1_%SAP NEXTCH_*TEST FOR EOF WRITE_^1_%RTJ WFILEM_*WRITE FILE MARK_^1_%ENA BLANK_^1NEXTCH RTJ* PUSYM_^1_%LDA* ESC1ST_$C€€HECK ESCAPE FLAG_9PED_^1_%SAZ 1_UPED_^1_%JMP* ESC_SPED_^1_%RTJ GETCHR_*COPY ONE LINE FROM MM BUFFER_^1_%TRA Q_^1_%INA -ESCAPE_)TEST FOR ESCAPE CHARACTER_^1_%SAN 1_^1_%JMP* ESC_^1*****_!THE CODE GENERATED DEPENDS ON THE LANGUAGE (ASCII OR BCD) AR_^1_%IFA BCD,EQ,1_^1_%ENA $7F_^1_%AND* CONTAB-$20,Q_#TRANSLATE CHARACTER TO ASCII_^1_%EIF_]_^1_%IFA BCD,EQ,0_^1_%TRQ A_^1_%EIF_]_€€^1_%JMP* NEXTCH_*INSERT CHARACTER IN LINE_^1*_]_^1*_#COMPLETION OF STANDARD DATA BLOCK PRINTOUT_^1*_]_^1PNB_"IIN 0_^1_%LDA- FREE,I_^1_%INA -1_+INDICATE READY_^1_%STA- FREE,I_^1_%EIN 0_^1_%SAN WRE24_(SKIP IF ANOTHER STILL WAITING_^1_%LDQ- LISTLU,I_^1_%STA LOG5,Q_'SET PRINTER NOT IN USE_^1_%STA- PRBUSY,I_^1_%JMP IGNORE_^1*_]_^1WRE24 JMP WRE21+1_%CONTINUE WITH NEXT BLOCK_^1ESC€€1ST NUM 0_$ESCAPE FLAG=1 WHEN (ESC,E2) BEGIN A LINE_'PED_^1_%EJT_]_^1*_$PROCESSING OF CONTROL CHARACTER AFTER ESCAPE_^1_'SPC 1_^1ESC_"RTJ GETCHR_^1_%TRA Q_^1_%INA -EOL_,EOL_^1_%SAZ ENDL_^1_%INA EOL-CARR_(CARRIAGE RETURN_^1_%SAZ ENDL_^1*****_!THE CODE GENERATED DEPENDS ON THE LANGUAGE (ASCII OR BCD) AR_^1_%IFA BCD,EQ,0_^1_%INA 1_^1_%SAZ ENDL_^1_%INA -1_^1_%EIF_]_^1_%INA€€ CARR-E2_)END OF PRINT MESSAGE_^1_%IFA PLOTER,EQ,1_^1_%SAZ EPRINT_'IS THIS THE END OF A PRINT LINE FV/ER_^1_%INA E2-E4_(NO, TEST FOR END OF A PLOTTER MESSAGE_!FV/ER_^1_%EIF_]_^1_%SAN COMPR_+NO, COMPRESSION CODE_^1EPRINT ENA -1_^1_%STA- PRBUSY,I_(MARK END OF PRINT_^1ENDL_!JMP* ENDLN_+END OF PRINT LINE_^1*_]_^1COMPR ENA 0_^1_%LRS 5_^1_%INQ -1_^1_%SQZ CS_.SKIP IF COMPRESS€€ED SPACES_^1_%INQ -1_^1_%SQN ERRC_,ERROR IF NO COMPRESSED BLANKS_^1_%SAP CZ_.OR COUNT ^15_^1ERRC_!ENA BLANK_+REPLACE BY BLANK_^1_%JMP* NEXTCH_^1_%SPC 1_^1*_$COMPRESSED SPACES PROCESSING_^1_%SPC 1_^1CS_#ENQ BLANK_^1_%JMP* CZ+1_^1_'SPC 1_^1*_$COMPRESSED BLANKS PROCESSING_^1_%SPC 1_^1CZ_#ENQ DIGIT_^1_%STQ- PRBUSY,I_(STORE REPEATED CHARACTER_^1_%TRA Q_^1_%QLS 5_^1CZ2_"LDA- €€PRBUSY,I_^1_%RTJ* PUSYM_+INSERT BLANKS_^1_%INQ -1_^1_%SQZ 1_^1_%JMP* CZ2_^1_%JMP* NEXTCH+1_(CONTINUE_^1*_]_^1ENDLN LDA- PRBUSY,I_(FIND RETURN ADDRES AFTER PRINT_^1_%ENQ PNB1-PRINT_^1_%SAM 1_^1_%ENQ NEXTL-PRINT_^1_%LDA- LINTYP,I_^1_%INA -MAGTAP_^1_%SAZ MT_^1_%INA MAGTAP-MMTYPE_^1_%SAN NMT_^1MT_#ENA LINSIZ_^1_%JMP* PRINT_^1NMT_"LDA- PNTR,I_^1_%SAN 1_^1_%ENA 1_*REPLACE Z€€ERO LENGTH_^1_%ADD- ONEBIT+15_'ROUND OFF POINTER_^1_%AND- N7_.NR. OF WORDS_^1_%SPC 1_^1*_$PRINT PROCESSING_^1_%SPC 1_^1PRINT STQ- PRET,I_*SAVE RETURN ADDRESS_^1_%STA- SAVL,I_*SAVE MESSAGE LENGTH_^1_%LDQ- KBLU,I_^1_%LDA LOG6,Q_*TEST IF INPUT BUSY_^1_%SAZ NEQ_-IF NOT, OMIT CHECKING_^1_%LDA- LISTLU,I_^1_%RTJ CKEQL_+TEST FOR DEVICES BEING IDENTICAL_^1NEQ_#LDA- SAVL,I_^1_%LDQ- LIS€€TRQ+THR,I_#TEST IF PREVIOUS PRINT COMPLETED_^1_%SQN 1_^1_%JMP* PCOMP_^1_%STA- FLAG,I_*IF NOT, FLAG LINE WAITING TO PRINT_^1_%JMP- (DISP)_^1_%EJT_]_^1*_$COMPLETION ROUTINE OF PRINT REQUEST_^1_%SPC 1_^1PRCMP INA -LISTRQ_)COMPUTE PDT ADDRESS_^1_%STA- I_^1_%RAO- IOPR,I_^1_%LDA- LINTYP,I_^1_%INA -MMTYPE_^1_%SAN 1_^1_%RAO- LISTRQ+SEC+1,I_"UPDATE RECORD NR._^1_%LDA- FLAG,I_*TEST FOR€€ WAITING LINE_^1_%ENQ 0_^1_%STQ- FLAG,I_*RESET FLAG_^1_%SAN PCOMP_+YES, PRINT IT_^1_%LDA- PRBUSY,I_^1_%SAP PNB1_^1_%JMP* PNB_*END OF PRINT_^1PNB1_!JMP- (DISP)_^1*_]_^1PCOMP_!STA- LISTRQ+LENGTH,I_!NR. OF WORDS_^1_%LDA- LISTRQ+BUFAD,I_^1_%LDQ- SAVAD,I_^1_%STQ- LISTRQ+BUFAD,I_!SWITCH BUFFERS_^1_%STA- SAVAD,I_^1_%RTJ_!INDIR_'ISSUE PRINT REQUEST_^1_%ADC (LISTRQ)_^1_%LDQ- PRET,I_*RET€€URN_^1_%JMP* PRINT,Q_^1PUSYM NUM 0_^1_%STQ* QS_.SAVE Q_^1_%STA* AS_,TEMP.STORE DATA CHAR._^1_%LDQ- PNTR,I_*TEST FOR LINE OVERFLOW_^1_%QLS 1_^1_%ADQ =X(-2*LINSIZ)_^1_%SQM 1_^1_%JMP* SKIP_^1_%QLS 15_^1_%ADQ- SAVAD,I_^1_%TRQ A_^1_%AND- LPMSK+15_^1_%LLS 16_,A=Q=POINTER(Q IS WITHOUT UPP/LO FLAG)_^1_%SAP LEFT_*P=GET UPPER CHAR._^1_%LDA* AS_,RESTORE DATA CHAR._^1_%EOR- LINSIZ,Q_€€^1_%AND- LPMSK+8_^1_%JMP* PUT_^1LEFT_!LDA* AS_,RESTORE DATA CHAR._^1_%ALS 8_-MOVE UPPER CHAR. TO RIGHT POSITION_^1_%EOR- LINSIZ,Q_^1_%AND- NZERO+8_^1PUT_"EOR- LINSIZ,Q_^1_%STA- LINSIZ,Q_^1_%LDQ- PNTR,I_^1_%ADQ- ONEBIT+15_'UPDATE POINTER_^1_%STQ- PNTR,I_^1SKIP_!LDQ* QS_^1_%JMP* (PUSYM)_^1_%BZS QS_^1_%BZS AS_^1_%EJT_]_^1*_$FORMAT CONTROL CODE TABLE_^1_%SPC 1_^1FORMAT ADC DIGIT,D€€IGIT+1,$2B,BLANK,EORC1,(-0)_^1_%ADC $D,$C,$7F,$7F,EORC,$D_1TELETYPE_^1_%ADC DIGIT,DIGIT+1,$2B,BLANK,EORC,EOFC_#ALL OTHERS_^1_%SPC 2_^1*****_!THE CODE GENERATED DEPENDS ON THE LANGUAGE (ASCII OR BCD) AR_^1_%IFA BCD,EQ,1_^1*_$TABLE FOR CONVERSION OF ASCII TO EXT. BCD AND VICE VERSA_^1*_$THE RIGHT COLUMN IS INDEXED BY BCD, THE LEFT COLUMN BY ASCII_^1*_$ALL NUMBERS ARE OCTAL_^1_%S€€PC 1_^1*_1ASCII_#BCD_^1CONTAB NUM $502D_^1_%NUM $2A4A_%EXCLAMATION_?PED_^1_%NUM $4C4B_%QUOTE_EPED_^1_%NUM $5E4C_%DIESE_EPED_^1_%NUM $2B4D_^1_%NUM $4E4E_^1_%NUM $5F4F_%AND_GPED_^1_%NUM $2D50_%APOS_FPED_^1_%NUM $5C51_^1_%NUM $3C52_^1_%NUM $2C21_%*_2EXCLAMATION_+PED_^1_%NUM $3024_^1_%NUM $5B2A_^1_%NUM $2027_:APOS_2PED_^1_%NUM $3B3F_:QUESTION MARK_)PED_^1_%NUM $513E_^€€1_%NUM $4A2B_^1_%NUM $4141_^1_%NUM $4242_^1_%NUM $4343_^1_%NUM $4444_^1_%NUM $4545_^1_%NUM $4646_^1_%NUM $4747_^1_%NUM $4848_^1_%NUM $4949_^1_%NUM $403C_^1_%NUM $3F2E_^1_%NUM $3A29_^1_%NUM $4B5C_;REVERSE SLASH_(PED_^1_%NUM $2F3F_^1_%NUM $2E3B_%QUESTION MARK_=PED_^1_%NUM $4D3A_%COMM. A_CPED_^1_%NUM $3131_^1_%NUM $3232_^1_%NUM $3333_^1_%NUM $3434_^1_%NUM $3535_^€€1_%NUM $3636_^1_%NUM $3737_^1_%NUM $3838_^1_%NUM $3939_^1_%NUM $2130_^1_%NUM $223D_^1_%NUM $2322_:QUOTE_1PED_^1_%NUM $2440_:COMM. A_/PED_^1_%NUM $2525_^1_%NUM $265B_^1_%NUM $2720_^1_%NUM $282F_^1_%NUM $2953_^1_%NUM $5254_^1_%NUM $5355_^1_%NUM $5456_^1_%NUM $5557_^1_%NUM $5658_^1_%NUM $5759_^1_%NUM $585A_^1_%NUM $595D_^1_%NUM $4F2C_^1_%NUM $3D28_%REVERSE SLASH€€_=PED_^1_%NUM $5A5F_%(RIGHT BRACKET)_#UNDERLINE_-PED_^1_%NUM $5F23_%(CIRCUMFLEX**)_$DIESE_1PED_^1_%NUM $5D26_%(UNDERLINE)_(AND_3PED_^1_%EJT_]_^1** THE BCD TERMINAL IS A 63-CHARACTER DEVICE. THEREFORE, THE_$PED_^1** CHAR GI VING "ESCAPE" IN EXT-BCD CAN"T BE TRANSMITTED :_'PED_^1**_#ASCI I 5E (CIRCUMFLEX) GIVES EXT.BCD 3E (ESCAPE), WHICH IS PED_^1**_QFORBIDDEN._#PED_^1**_!ALSO,€€ ASCII 5E (CIRCUM.) WILL BE CONVERTED INTO E.BCD 5F (ANDPED_^1**_#-E.B CD 5F (AND) WOULD GIVE BACK ASCII 26 (AND)AS USUAL-_"PED_^1*_]_#PED_^1*_!GRAPHIC E-BCD ASCII_KPED_^1*_$:_#40_"3A_NPED_^1*_$A_#31_#41_MPED_^1*_$B_#32_#42_MPED_^1*_$C_#33_#43_MPED_^1*_$D_#34_#44_MPED_^1*_$E_#35_#45_MPED_^1*_$F_#36_#46_MPED_^1*_$G_#37_#47_MPED_^1*_$H_#38_#48_MPED_^1*_$I_#39_#49_MPED_^1*_$J_#21_#4€€A_MPED_^1*_$K_#22_#4B_MPED_^1*_$L_#23_#4C_MPED_^1*_$M_#24_#4D_MPED_^1*_$N_#25_#4E_MPED_^1*_$O_#26_#4F_MPED_^1*_$P_#27_#50_MPED_^1*_$Q_#28_#51_MPED_^1*_$R_#29_#52_MPED_^1*_$S_#52_#53_MPED_^1*_$T_#53_#54_MPED_^1*_$U_#54_#55_MPED_^1*_$V_#55_#56_MPED_^1*_$W_#56_#57_MPED_^1*_$X_#57_#58_MPED_^1*_$Y_#58_#59_MPED_^1*_$Z_#59_#5A_MPED_^1*_$0_#4A_#30_MPED_^1*_$1_#41_#31_MPED_^1*_$2_#42_#32_MP€€ED_^1*_$3_#43_#33_MPED_^1*_$4_#44_#34_MPED_^1*_$5_#45_#35_MPED_^1*_$6_#46_#36_MPED_^1*_$7_#47_#37_MPED_^1*_$8_#48_#38_MPED_^1*_$9_#49_#39_MPED_^1*_$+_#30_#2B_MPED_^1*_$-_#20_#2D_MPED_^1*_$*_#2C_#2A_MPED_^1*_$/_#51_#2F_MPED_^1*_$(_#5C_#28_MPED_^1*_$)_#3C_#29_MPED_^1*_$$_#2B_#24_MPED_^1*_$=_#4B_#3D_MPED_^1*_+50_#20_(BLANK_?PED_^1*_$,_#5B_#2C_(COMMA_?PED_^1*_$._#3B_#2E_(PERIOD_>PED_^1€€*_$#_#5E_#23_MPED_^1*_$'_#4F_#5B_(LEFT BRACKET_8PED_^1*_$!_#5A_#5D_(RIGHT BRACKET_7PED_^1*_$%_#4E_#25_(PURECENT_PED_^1*_$?_#2E_#3F_(QUESTION MARK_7PED_^1*_$[_#3A_#3C_(LESS THAN_;PED_^1*_$>_#2F_#3E_(GREATER THAN_8PED_^1*_$<_#4D_#40_(COMM.A€€_>PED_^1*_$\_#3D_#5C_(REVERSE SLASH_7PED_^1*_$^_#3E_#5E_(CIRCUMFLEX (ESCAPE_2PED_^1*_$\_#3F_#3B_(SEMICOLON_;PED_^1_%EJT_]_^1_%EIF_]_^1CKEQL NUM 0_^1_%IFA OPERA,EQ,1_^1*_!OPERATOR HAS HIGH PRIRITY._^1_%JMP* (CKEQL)_^1_%EIF_]_^1_%LDQ- KBLU,I_*(A) = LU TO CHECK AGIANST KEYBOARD LU_^1_%EAQ A_/IDENTICAL TO DISPLAY DEVICE_^1_%AND- LPMSK+10_^1_%SAN NOTEQ_+SKIP IF NOT IDENTICAL_^1_%L€€DQ+ LOG1A,Q_)GET PHYSTB ADDRESS OF DEVICE_^1_%STQ- PHYSTB,I_(SAVE IN PDT_^1_%LDA- (ZERO),Q_(GET PRIORITY OF INITIATOR_^1O_$EOR- ONEBIT+8_(RELATIVE INDICATOR_^1_%IIN 0_^1_%IFA OPERA,EQ,0_^1**_!INCOMING MESSAGE HAS HIGH PRIORITY._^1_%LDA =N$1304_^1_%EIF_]_^1_%STA* P3_^1_%LDQ- I_/PASS ADDRESS OF TERMINAL_^1_%RTJ- ($F4)_+SCHEDULE INTERRUPT ROUTINE AT_^1P3_#NUM $1300_+PRIORITYOF DRI€€VER_^1_%ADC INTRUP-P3_^1NOTEQ JMP* (CKEQL)_^1*_$PROCESSING OF WRITE MESSAGE ENDING IN E3_^1*_]_^1_%SPC 1_^1WRE3_!RTJ OPMS_)TEST IF OPERATOR MESSAGE WAITING_^1_%SAN WRE32_^1_%LDA- NFILE,I_%TEST IF FILE DESCRIPTOR PRESENT_^1_%SAN NBUSY_^1NRDY_!ENA -2_^1_%STA- READSW,I_$SET 'READER NOT READY' MESSAGE_^1WRE32 JMP ACKN_)ACKNOWLEDGE MESSAGE_^1*_]_^1NBUSY RAO- BUSY,I_'SET BUFFER€€ IN USE_^1_%LDA- STOP,I_^1_%SAP NEOF_)SKIP IF INPUT NOT YET COMPLETED_^1_%RTJ INDIR_(READ BATCH FROM MASS STORAGE_^1_%ADC (MMREAD)_^1_%JMP* WRE32_^1*_]_^1NEOF_!RAO- INPRDY,I_$FLAG REQUEST FOR INPUT_^1_%JMP* WRE32_^1_%EJT_]_^1*_#SUBROUTINE TO ISSUE I/O REQUESTS_^1_%SPC 1_^1INDIR NUM 0_^1_%IIN 0_^1_%LDA- IOPR,I_^1_%INA -1_^1_%STA- IOPR,I_^1_%LDQ* INDIR_+SAVE RETURN_^1_%LDA- I€€_^1_%AND- N7_^1_%ADD- (ZERO),Q_(FORM ABS. LOC OF PARAMETER LIST_^1_%STA* P_^1_%RTJ- ($F4)_+ISSUE INDIRECT REQUEST_^1P_$ADC (0)_^1_%JMP- 1,Q_^1_%SPC 1_^1*_$COMPLETION ROUTINE OF MMREAD_^1_%SPC 1_^1MMCOMP INA -MMREAD_^1_%STA- I_^1_%RAO- IOPR,I_^1_%LDQ- MMREAD+BUFAD,I_^1_%ADQ- MMREAD+LENGTH,I_^1_%ENA -0_^1_%STA- (ZERO),Q_^1_%ENQ 0_^1_%STQ- BUSY,I_'RELEASE DISPLAY UFFER_^1_%LDA€€- STOP,I_^1_%STQ- STOP,I_'RESET_^1_%INA 1_^1_%SAN WRE33_(DETERMINE TERMINATING CODE_^1_%ENA 3_^1_%STA- READSW,I_$SET E3_^1_%LDQ- I_^1_%SCHED INPUT_^1_%JMP- (DISP)_'RESCHEDULE INPUT ROUTINE_^1*_]_^1WRE33 RTJ DELETE_'END OF INPUT_^1_%ENA 2_^1_%STA- READSW,I_$SET ]2_^1_%JMP- (DISP)_^1_%EJT_]_^1*_$PROCESSING OF WRITE MESSAGE ENDING IN E1_^1_%SPC 1_^1WRE1_!ENA 0_^1_%STA- LOCK,I€€_'UNLOCK KEYBOARD_^1MSRDY SPA- FIRST,I_^1_%STA- BUSY,I_*SET DISPLAY BUFFER UNOCCUPIED_^1_%LDQ- I_^1_%SCHED DISPLY_^1_%JMP* WRE32_(ACKNOWLEDGE MESSAGE_^1_%SPC 1_^1*_$DISPLAY MESSAGE PROCESSOR_^1_%SPC 1_^1DISPLY STQ- I_/PDT ADDRESS OF TERMINAL_^1_%LDA- MMREAD+BUFAD,Q_^1DISP1 STA PNTRM_(ADDRESS OF DISPLAY BUFFER_^1_%INA 0_^1_%SAN DISP5_(SKIP IF NOT YET END OF BUFFER_^1_%STA- B€€USY,I_'RELEASE DISPLAY BUFFER_^1_%RTJ OPMS_)OUTPUT OP.MESS. IF REQUIRED_^1_%JMP IGNORE_^1DISP5 LDA- MESSWR+BUFAD,I_^1_%INA 2_^1_%STA* PTR_-ADDRESS OF OUTPUT BUFFER_^1COPY_!RTJ CHPU_,COPY AND TRANSLATE BUFFER_^1_'TRA Q_^1_'INA -ESCAPE_^1_'SAN CPC_.SKIP IF NO ESCPAE CODE_^1_%RTJ CHPU_+READ CHARACTER AFTER ESCAPE CODE_^1_'INA -E1_^1_%SAN 2_^1_%ENA -0_^1_%JMP* ENDCOP_^1_'IN€€A E1-CARR_*TEST FOR CARRIAGE RETURN_^1_'SAZ ENDC_^1_'INA CARR-EOL_^1_'SAZ ENDC_^1*****_!THE CODE GENERATED DEPENDS ON THE LANGUAGE (ASCII OR BCD) AR_^1_%IFA BCD,EQ,1_^1_%ENQ $50_-REPLACE ILLEGAL CHARACTER BY BLANK_^1CPC_"ENA $7F_^1_'AND CONTAB-BLANK,Q_"TTANSLATE TO ASCII_^1_%EIF_]_^1_%IFA BCD,EQ,0_^1_%ENQ $20_^1CPC_"TRQ A_^1_%EIF_]_^1_'RTJ PSM_,INSERT IN OUTPUT BUFFER_€€^1_%LDA* PTR_^1_%AND- N7_^1_%SUB- MESSWR+BUFAD,I_^1_%INA -MESSL_^1_%SAP ENDC_^1_%JMP* COPY_^1ENDC_"LDA* PNTRM_^1_%EJT_]_^1ENDCOP STA- BUSY,I_^1_%ENA_!BLANK_^1_'RTJ PSM_^1_'LDA* PTR_^1_%AND- N7_^1_%TRA Q_^1_%INQ -1_^1TRAIL LDA- (ZERO),Q_^1_%EOR =A_+DELETE TRAILING BLANKS_^1_%SAN 2_^1_%INQ -1_^1_%JMP* TRAIL_^1_%INQ 1_^1_%TRQ A_^1_%SUB- MESSWR+BUFAD,I_^1_%STA- MESSWR+LENGTH€€,I SIZE OF OUTPUT BUFFER_^1_%RTJ* INDIR_+WRITE DISPLAY MESSAGE_^1_%ADC (MESSWR)_^1_$LDA- MESSWR+LU,I_^1_%RTJ CKEQL_^1_%LDA- FIRST,I_^1_%LDQ- BUSY,I_^1_%SQN 2_^1_%ENQ -1_^1_%STQ- FIRST,I_)MARK END OF DISPLAY_^1_%SAZ REM_^1_%JMP- (DISP)_^1_%SPC 1_^1*_$TEST WHETHER ACTIVE READ REQUEST HAS TO BE INTERRUPTED_^1_%SPC 1_^1REM_"LDQ- MESSWR+BUFAD,I_^1_%ENA 1_^1_(EOR-_$FIRST,I_^1_%S€€TA- FIRST,I_^1*_]_^1_%LDA- 2,Q_^1_%EOR =APM_,TEST FOR PM MESSAGE_^1_'SAN_!NOPM_^1_%LDA- 3,Q_-PM MESSAGE HAS TO START WITH PM/ IN_^1_'ARS 8_.ORDER TO BE PROCESSED AS SIMULATOR_^1_%INA -SLASH_^1_%SAZ 1_^1NOPM_!JMP- (DISP)_^1_'STA- BUSY,I_+YES, TEAT OUTPUT AS INPUT_^1_%ENA -1_^1_%STA- FIRST,I_'FORCE END OF DISPLAY_^1_%ADQ =N$8003_^1_%STQ* PNTRM_^1_'LDA- LPMSK+8_^1_%RTJ PSM_^1_€€%LDA- IDENT,I_^1_%STA_!ID_^1_'JMP PROC_'TERMINAL ALREADY IDENTIFIED_^1_%EJT_]_^1*_$ROUTINE TO INTERRUPT AN UNFINISHED READ REQUEST_^1_'SPC 1_^1INTRUP STQ- I_/ADDRESS OF PDT OF TERMINAL_^1_%LDQ- PHYSTB,I_(PHYSTB ADDRESS OF KEYBOARD DEVICE_^1_%LDA- ELU,Q_^1_%SAZ NOINT_+IF DEVICE NOT ASSIGNED, DO NOT INTERRUPT_^1_%LDA- REQLOC,Q_(COMPARE REQUEST AGAINST KEYBOARD READ REQUE_^1_%STQ- €€I_^1_%LDQ- ELU,Q_^1_%EOR LOG6,Q_*COMPARE REQUEST LOCATIONS_^1_%AND- N7_^1_%SAN NOINT_+SKIP IF NOT EQUAL_^1_%LDQ- REQLOC,I_^1_%LDA- CORE,I_*TEST WHETHER DATA TRANSFER HAS NOT YET_^1_%EOR- BUFAD,Q_)BEGUN_^1_%SAZ INTP_^1NOINT JMP- (DISP)_*NO INTERRUPTION NECESSARY_^1INTP_!LDA- ERRTAB,I_^1_%AND- ZROBIT+14_'SET ERROR BIT_^1_%EOR- ONEBIT+14_^1_%STA- ERRTAB,I_^1_%IFA MSOS30,EQ,1_^1_%€€RTJ+ MAKEQ_^1_%EIF_]_^1_%IFA MSOS30,NE,1_^1_%RTJ* MQ_^1_%EIF_]_^1_%RTJ- (COMPRQ)_(COMPLETE REQUEST WITH ERROR_^1_%IFA TT1713,EQ,1_^1_%ENA 0_^1_%STA S13BZY_^1_%EXT S13BZY_^1_%EIF_]_^1_%LDQ- I_^1_%TRQ A_^1_%EOR- ONEBIT+15_^1_%IIN 0_^1_%STA* P4_^1_%RTJ- ($F4)_+SCHEDULE INITIATOR_^1P4_#ADC 0_^1_%JMP- (DISP)_^1*_]_^1_%IFA MSOS30,NE,1_^1MQ_#0_"0_^1_%IIN 0_^1_%LDA* MQ_^1_%JMP+ M€€AKEQ_+CALL MAKEQ ROUTINE_^1_%EIF_]_^1_%BZS_!PTR,PNTRM_^1_%EJT_]_^1*_$COMPLETION ROUTINE OF MESSWR_^1_'SPC 1_^1MSWR_!INA -MESSWR_^1_%STA- I_^1_%RAO- IOPR,I_^1_%LDA- FIRST,I_^1_%SAM IGNORE_'TEST FOR EMD OF DISPLAY_^1_%LDA- BUSY,I_^1_%JMP DISP1_^1*_]_^1IGNORE LDQ- KBLU,I_^1_%LDA LOG6,Q_*TEST WHETHER KEYBOARD ALREADY BUSY_^1_%SAN P6_^1_%LDA LOG3,Q_^1_%SAZ P6_^1_%AND- IDMBIT,I_^1€€_%SAN P66_,SKIP IF KEYBOARD NOT DEDICATED_^1_%LDA- ATTFL,I_,TEST FOR ATTENDED/UNATTENDED MODE_^1_%SAZ P66_^1P6_#JMP- (DISP)_^1*_]_^1P66_"LDA =XMSRQ,I_)ADDRESS OF CURRENT KEYBOARD REQUEST_^1_%STA LOG6,Q_+SET BUSY_^1_%RTJ DEVCK_^1_%ADC WR+RD_^1_%ADC ERRQ_^1_%INA -TTY_^1_%SAN P7_.OMIT CRLF OF NO TELETYPE_^1_%JMP ERR9_,WRITE CRLF_^1P7_#RTJ INDIR_+ISSUE KEYBOARD REQUEST_^1_%A€€DC (MSRQ)_^1_%RAO- IOPR,I_^1_%LDA- MESSWR+LU,I_^1_%STA- ERRQ+LU,I_'RESTORE LUNR_^1_%JMP- (DISP)_^1_'SPC 2_^1CHPU_!0_"0_^1_'STQ* SQ_^1_%LDA* PNTRM_^1_%AND- LPMSK+15_$STRIP OFF UPPER/LOWER CHAR.FLAG_^1_%TRA Q_^1_'LDA- (ZERO),Q_^1_%LDQ* PNTRM_^1_'SQP LF_)SKIP IF LEFT HAND CHARACTER_^1_'ALS 8_^1LF_$ARS 8_^1_'SAM REXT_^1_'ADQ- N8_^1_'STQ* PNTRM_*TEST FOR SPECIAL CHARACTER_^1REXT_€€"LDQ* SQ_^1_%STA* KK_^1_%JMP* (CHPU)_^1_(SPC 1_^1RESYM_!0_"0_^1_%RTJ* CHPU_^1_%SAM REXT7_^1_%INA -BLANK_^1_%SAN 1_^1_%JMP* RESYM+1_^1_%INA -SEMIC+BLANK_^1_'SAN 1_^1_%ENA -SEMIC-1_(SEMICOLON IS TERMINATOR_^1_%INA SEMIC_^1REXT7 JMP* (RESYM)_^1_%SPC 2_^1*_#ROUTINE TO RESTART KEYBOARD I/O AFTER CHANGIN7 DEVICES_^1_%SPC 1_^1RESTRT LDA LOG3,Q_*(Q) = L.U.NR. OF KEYBOARD_^1_%SA€€N 1_^1_%JMP- (DISP)_*EXIT IF DEVICE NOT ASSIGNED_^1_%ENQ 15_^1RSTRT SAM FINT_,FIND CORRESPONDING TERMINAL_^1_%INQ -1_^1_%ALS 1_^1_%JMP* RSTRT_^1*_]_^1FINT_!LDA LOG4,Q_*GET PDT ADDRESS OF TERMINAL_^1_%STA- I_^1_%JMP* IGNORE_^1_%EJT_]_^1_%BZS SQ,KK_^1_%SPC 1_^1BACKSM 0_"0_.SUBROUTINE TO RESET POINTER 1 CHAR._^1_%LDA* KK_^1_%SAM 3_/DO NOT RESET POINTER AT END OF LINE_^1_'LD€€A* PNTRM_^1_'SUB- N8_^1_'STA* PNTRM_^1_'JMP* (BACKSM)_^1_%SPC 1_^1NUMBER 0_"0_.SUBROUTINE TO READ DECIMAL NUMBERS_^1_'STQ* SAVQ_^1_'ENA -0_^1_'STA* N_.PRESET NUMBER_^1NUM2_"RTJ* RESYM_^1_'SAM EXNUM2_)END OF NUMBER_^1_%INA -DIGIT-10_^1_%SAP EXNUM2_+TEST FOR DIGIT_^1_'INA 10_^1_'SAM EXNUM2_^1_'STA* SQ_^1_'ENA 10_^1_'MUI* N_^1_%ADD* SQ_^1_'STA* N_^1_%JMP* NUM2_^1*_]_^1EXNUM2 €€RTJ* BACKSM_^1_%LDA* N_^1_%LDQ* SAVQ_^1_'JMP* (NUMBER)_^1_%BZS N,SAVQ_^1_'SPC 2_^1_'EJT_^1PSM_"NUM 0_^1_%LDQ* PTR_^1_%STA* PTR_+TEMP.STORE DATA CHAR._^1_%TRQ A_^1_%AND- LPMSK+15_%STRIP OFF UPPER/LOWER STORE FLAG_^1_%LLS 16_,A=Q=POINTER (Q IS WITHOUT UPP/LOW FLAG)_^1_%SAP LFT_+P=SAVE NEXT CHAR.IN UPPER BYTE_^1_%LDA* PTR_+RESTORE DATA CHAR._^1_%EOR- (ZERO),Q_^1_%AND- LPMSK+8_^1€€_%EOR- (ZERO),Q_^1_%STA- (ZERO),Q_^1_%INQ 1_-INCR.POINTER (UPP/LOW FLAG ALREADY CLEARED)_^1_'JMP* PT9_^1LFT_"LDA* PTR_+RESTORE DATA CHAR._^1_%ALS 8_-LEFT-JUSTIFY DATA CHAR._^1_%EOR- (ZERO),Q_^1_]_^1_%AND- NZERO+8_^1_%EOR- (ZERO),Q_^1_%STA- (ZERO),Q_^1_%ADQ- ONEBIT+15_^1PT9_"STQ PTR_^1_%JMP* (PSM)_^1_%SPC 1_^1*_]_^1*_$PROCESSING OF ENT_#STATEMENT_^1*_]_^1ENTER RTJ* RESYM_+SKIP €€COMMA_^1_%SAM ERR24_^1_%LDA- OPMESS,I_(TEST IF ANOTHER OPERATOR MESSAGE_^1_%SAZ TRANSF_*IS YET WAITING FOR TRANSFER_^1_%SAM TRANSF_^1_'JMP ERR4_-ERROR 4 KEYBOARD LOCKED_/S_^1ERR24_!JMP* ERR21_^1*_]_^1TRANSF LDA- MSBUF,I_)ADDRESS OF MESSAGE TRANSFER BUFFER_^1_%STA PTR_^1ENTCYC RTJ* CHPU_,COPY MESSAGE IN BUFFER_^1_%SAM ENDE_^1_%TRA Q_^1_'INQ -SEMIC_)TEST FOR TERMINATOR_^1_%S€€QZ ENDE-1_^1_%RTJ* PSM_^1_%JMP* ENTCYC_^1*_]_^1_%RTJ* BACKSM_^1ENDE_"LDA- LPMSK+8_^1_%RTJ* PSM_^1_%IIN 0_^1_%LDA- LOCK,I_'DETERMINE WHAT TO DO WITH THE MESSAGE_^1_%SAN ENT2_)SKIP IF KEYBOARD LOCKED_^1_%SPA- OPMESS,I_$DO STRAIGHT OUTPUT IF NOT LOCKED_^1_%STA- LOCK,I_'AND LOCK OUT_^1_%STA- READSW,I_$SET PENDING READ_^1_%JMP* ENT1_^1ENT2_!ENA 1_^1_%STA- OPMESS,I_$FLAG MESSAGE WAIT€€ING_^1ENT1_!EIN 0_^1_'JMP MESSXT_^1_'EJT_^1*_]_^1*_$SIMULATOR MESSAGE PROCESSING_^1*_]_^1_%SPC 1_^1MSCOMP STA- I_/REQUEST LOCATION_^1_%TRQ A_^1_%LDQ- BUFAD,I_)ADDRESS OF INPUT BUFFER_^1_%STQ PNTRM_+PRESET FOR CHARACTER PICK UP_^1_%ADQ- LENGTH,I_(COMPUTE LWA OF BUFFER_^1_%INQ -1_+SET Q-REG.=LWA OF ENTIRE BUFFER_^1_%LDQ- (ZERO),Q_$(LWA)=LWA+1 OF USED PART OF BUFFER_^1_%ALS 1_^€€1_%SAP NSHORT_*TEST FOR SHORT TRANSFER_^1_%STA- (ZERO),Q_(ENDMARKER IN POSITION_^1NSHORT LDQ- LU,I_,GET L.U.NR. OF KEYBOARD DEVICE_^1_%QLS 5_^1_%QRS 5_^1_%ENA 0_^1_%STA LOG6,Q_*SET KEYBOARD NOT BUSY_^1_%LDA- LU,I_^1_%SAP 1_^1_%JMP- (DISP)_*EXIT AFTER ERROR_^1_%LDA_!LOG3,Q_%GET MASK OF TERMINALS TO WHICH_^1MPROC_!STA* PATTRN_+DEVICE IS ASSIGNED_^1*_]_^1_%ENQ 15_^1CYCID SAM €€FND_-FIND NR. OF HIGHEST TERMINAL_^1_%INQ -1_.ONLY IMPORTANT IF DEVICE IS DE-_^1_%ALS 1_/DICATED TO SOME TERMINAL_^1_%JMP* CYCID_^1*_]_^1FND_"STQ* ID_.SAVE IDENTIFICATION_^1_%LDQ LOG4,Q_^1_%STQ- I_^1_%AND- N7_.REMOVE THIS BIT_^1MPROC1 STA* SINGLE_$= 0 IF DEVICE DEDDIACTED_^1_%SPC 1_^1*_$PROCESSES POSSIBLE IDENTIFICATION_^1_%SPC 1_^1_%RTJ RESYM_^1_%SAP 2_^1_%JMP IGNORE_^1_%I€€NA -SLASH_*TEST FR SLASH_^1_%SAZ CORR_^1_%RTJ BACKSM_(OMISSION OF ID_^1_%ENA -0_^1_%STA* ID_.SET UNIDENTIFIED_^1_%JMP* PROC_,PROCESS STATEMENT_^1*_]_^1CORR_!RTJ RESYM_^1ERR112 SAM ERR11_+ERROR 1 IDENTIFIER MISSING_.S_^1_%INA -F-1_^1_%SAP ERR11_+ERROR 1 IDENTIFIER ^ F_2S_^1_%INA F+1-A_^1_'SAP OK10_^1_%INA 7_^1_%SAP ERR11_(ERROR 1 IDENTIFIER NOT ALFANUMERIC_^1OK10_"INA €€ 10_^1_'SAP OK11_^1ERR11_!JMP* ERR12_,ERROR 1 IDENTIFIER NOT ALFA_+S_^1*_]_^1OK11_"TRA Q_^1_%RTJ RESYM_^1_%SAM ERR12_+ERROR 1 TERMINATING SLASH MISSING_'S_^1_%INA -SLASH_^1_%SAN ERR12_^1_%LDA- ONEBIT,Q_(TEST WHETHER IDENTIFIER SPECIFIES_^1_%AND* PATTRN_*A TERMINAL TO WHICH DEVICE IS ASSIGNED_^1_%SAN IDOK_,ERROR 1 IDENTIFIER NOT ALLOWED_^1ERR12_!JMP ERR1_-ERROR 1 IDENTIF€€IER NOT ALLOWED_(S_^1_%SPC 1_^1*_$PROCESS STATEMENT_^1_%SPC 1_^1IDOK_!LDQ LOG4,Q_^1_'STQ- I_^1PROC_!RTJ RESYM_^1_%SAM ERR21_^1_%TRA Q_^1_%RTJ RESYM_+SECOND CHARACTER_^1_%SAM ERR21_+ERROR 2 ILLEGAL STATEMENT_/S_^1_%QLS 5_^1_%AAQ Q_/ASSEMBLE NAME_^1_%RTJ RESYM_+THIRD CHARACTER_^1_%SAP OK13_^1ERR21_!JMP ERR2_-ERROR 2 UNRECOGNIZABLE NAME_+S_^1OK13_!QLS 5_^1_%AAQ A_^1_%€€SUB =N$841_^1_%STA* NAME_^1_%SPC 1_^1*_$CHECK NAME AGAINST TABLE OF LEGAL NAMES_^1_%SPC 1_^1_%ENQ LTAB-1_^1SEARCH LDA* TABLE,Q_^1_%EOR* NAME_,COMPARE WITH GIVEN NAME_^1_%SAZ LEGAL_+SKIP IF FOUND_^1_%INQ -1_^1_%SQM ERR22_+ERROR 2 ILLEGAL NAME_4S_^1_%JMP* SEARCH_^1ERR22_!JMP* ERR21_^1_%BZS PATTRN,ID,NAME,CHAR,SINGLE_^1LEGAL_!QLS 1_^1_%SQZ BBR_^1_'LDA* ID_^1_'SAP BBR_.TEST€€ WHETHER IDENTIFIED_^1_'LDA* SINGLE_,OMISSION OF IDENTIFICATION IF DEDEICATED_^1_%SAN ERR14_^1_'LDA- TMODE,I_*TERMINAL SHOULD BE ACTIVE TO ACCEPT STMNT_^1_'SAN BBR_^1ERR14_!JMP* ERR12_^1*_]_^1BBR_"LDA- ERRQ+LU,I_^1_%JMP* BRANCH,Q_(BRANCH ACCORDING TO NAME_^1BRANCH JMP RESERV_*UTS (RESERVE TERMINAL)_^1_'JMP RELEAS_+REL_^1_'JMP ENTER_,ENT_^1_'JMP LOAD_-LOAD_^1_'JMP LIST_-LIST_€€^1_'JMP UNIT_-UNIT_^1_%JMP MOTION_*TMC_^1_%JMP DEL_-DEL_^1_%JMP ATT1_+EXT_^1_%JMP ATT2_(ATT_^1_%JMP INT2_.INT_^1_'SPC 1_^1*_$OTHER NAMES CAN BE ADDED HERE_^1_'SPC 3_^1*_$TABLE OF 3 CHARACTER NAMES_^1_%SPC 1_^1TABLE TAB $55,$54,$53_^1_%TAB $52,$45,$4C_^1_%TAB $45,$4E,$54_^1_%TAB $4C,$4F,$41_^1_%TAB $4C,$49,$53_^1_%TAB $55,$4E,$49_^1_%TAB $54,$4D,$43_^1_%TAB $44,$45€€,$4C_^1_%TAB $45,$58,$54_^1_%TAB $41,$54,$54_^1_%TAB $49,$4E,$54_^1_%EQU LTAB(*-TABLE)_^1_%SPC 1_^1*_#SUBROUTINE TO REWIND MASS STORAGE TYPE FILES_^1_%SPC 1_^1REWIND 0_"0_^1_%INA -MMTYPE_)(A) = DEVICE CLASS CODE_^1_%SAN NREW_,DO NOT REWIND IF NOT MASS STORAGE_^1_%LDQ* (REWIND)_(PARAMETER IS REQUEST LOCATION IN PDT_^1_%LDA- LU,B_JMOD WVL_^1_%AND- LPMSK+10_FMOD WVL_^1_%SUB- $€€C2_KMOD WVL_^1_%SAN NOSCRA_IMOD WVL_^1_%LDA- $C1_KMOD WVL_^1_%JMP* STOSEC_HMOD WVL_^1NOSCRA ENA 1_^1STOSEC STA- SEC+1,B_GMOD WVL_^1NREW_!RAO* REWIND_^1_%JMP* (REWIND)_^1_%SPC 1_^1*_#SUBROUTINE TO SET UP THE PRINTER LU_^1_%SPC 1_^1PRLU_!0_"0_^1_%STQ- LISTLU,I_(Q CONTAINS NEW LU_^1_%RTJ DEVCK_^1_%ADC WR_^1_%ADC LISTRQ_^1_%STA- LINTYP,I_(CLASS CODE OF PRINTER DEVICE_^1_%RTJ* REW€€IND_*REWIND IF MASS STORAGE FILE_^1_%ADC LISTRQ_^1_%JMP* (PRLU)_^1_%SPC 1_^1*_#PROCESSING OF ATT/EXT STATEMENTS_^1_%SPC 1_^1ATT1_!ENA 1_^1_%JMP* ATT2+1_)GO SET UNATTENDED FLAG_^1*_]_^1ATT2_!ENA 0_^1_%STA- ATTFL,I_)STE FLAG_^1_%JMP* ERR23-2_^1_%SPC 1_^1*_#PROCESSING OF INT INSTRUCTION_^1_%SPC 1_^1INT2_!LDA- OPMESS,I_^1_%SAZ 1_^1_%SAP 2_,IGNORE IF OPERATOR MESSAGE WAITING_^1€€_%ENA -1_^1_%STA- OPMESS,I_$SET INTERRUPT FLAG_^1_%JMP MESSXT_^1_%EJT_]_^1*_#PROCESSING OF DELETE STATEMENT_^1_%SPC 1_^1DEL_"RTJ DELETE_^1_%JMP* ERR23-2_^1_%SPC 1_^1*_$PROCESSING OF UNIT STATEMENT_^1_%SPC 1_^1UNIT_!RTJ RESYM_^1_%SAM ERR23_+ERROR IF FULL NAME NOT GIVEN_^1_%RTJ RESYM_^1_%SAM ERR23_^1_%INA -COMMA_*SHOULD BE FOLLOWED BY COMMA_^1_%SAN ERR23_^1*_]_^1NEXTU1 RT€€J RESYM_+EXAMINE TREMINATOR_^1_%SAP UPR_^1_%RTJ BACKSM_^1_'JMP MESSXT_+END OF THIS STATEMENT_^1ERR23_!JMP* ERR21_^1UPR_"STA* CHAR_,SAVE CHARACTER_^1_%RTJ NUMBER_*READ LOGICAL UNIT NR._^1_%SAM ERR34_^1_%TRA Q_^1_%SUB+ LOG1A_^1_%SAZ 2_^1_%SAM 1_^1ERR34 JMP* ERR32_^1_%LDA* CHAR_^1_%INA -XI_-TEST FOR I_^1_%SAN NOTI_^1_%LDA- LISTRQ+LU,I_^1_%RTJ DEVCK_+CHECK DEVICE FOR COMPA€€TIBILITY_^1_%ADC RD_.READ TYPE_^1_%ADC INPRQ_+INPUT DEVICE_^1_'STA- TYPE,I_^1_%RTJ* REWIND_^1_%ADC INPRQ_^1_%LDA- INPRQ+LU,I_^1_%STA- STINP,I_^1_%JMP* NEXTU_^1ERR31_!JMP* ERR32_^1*_]_^1NOTI_!INA XI-L_,TEST FOR L_^1_%SAZ 1_^1_%JMP* NOTL_^1_%STQ* REWIND_^1_%LDA- STINP,I_^1_%EAQ A_/COMPARE WITH INPUT DEVICE_^1_%AND- LPMSK+10_^1_%SAZ ERR37_+ERROR IF EQUAL_^1_%LDQ+ LOG1A,Q_)GET P€€HYSTB OF DEVICE_^1_%ENA WR_^1_%AND- DTYPE,Q_)CHECK FOR WRITE TYPE DEVICE_^1_%SAN 1_^1ERR37 JMP* ERR32_+ERROR IF NO WRITE TYPE_^1*_]_^1_%LDQ* REWIND_^1_%LDA- PRBUSY,I_(CHECK WHETHER PRINTING IN PROGRESS_^1_%SAZ PRNBS_+SJIP IF NOT_^1_%IIN 0_0AVOID INTERFERENCE OF TE9MINAL MSG._^1_%LDA- CHLU,I_*PROCESSING_^1_%SAP 1_/SKIP IF ANY PREVIOUS CHANGE NOT YET ACKNOWL_^1_%ADQ- N8_.REPLAC€€E OLD CHANGE WITH NEW CHANGE_^1_%EIN 0_^1_%STQ- CHLU,I_*FLAG CHANGE OF LU AT NEXT PRINT BLOCK_^1_%JMP* NEXTU_^1*_]_^1PRNBS RTJ* PRLU_^1_%JMP* NEXTU_^1*_]_^1NOTL_!INA L-K_-TEST FOR K_^1_%SAN NOTK_^1_%LDA- INPRQ+LU,I_^1_%RTJ DEVCK_+CHECK DEVICE_^1_%ADC RD_.READ TYPE_^1_'ADC MSRQ_-KEYBOARD INPUT DEVICE_^1_'LDA- LPMSK+10_^1_'AND- MSRQ+LU,I_^1_%LDQ- KBLU,I_+SAVE OLD LU_^1_'STA- €€KBLU,I_,EXTRACT LU OF KEYBOARD DEVICE_^1_%SCHED RESTRT_^1_%JMP* NEXTU_^1*_]_^1NOTK_!INA K-D_-TEST FOR D_^1_%SAN ERR32_+ERROR IF NONE OF THESE_^1_'RTJ DEVCK_*CEHCK DEVICE_^1_%ADC WR_.WRITE TYPE_^1_%ADC MESSWR_*DISPLAY DEVICE_^1_'LDA- MESSWR+LU,I_^1_'STA- ERRQ+LU,I_^1NEXTU RTJ RESYM_+EXAMINE TERMINATOR_^1_%SAM 1_^1_%JMP* NEXTU1_^1_%JMP* NEXTU1+3_(END OF STATEMENT_^1*_]_^1ERR€€32_!JMP ERR3_-ERROR 3 ILLEGAL SPECIFICATION_^1_%EJT_]_^1*_#ROUTINE TO WAIT UNTIL ALL I/O HAS BEEN FINISHED_^1*_#ENTERED WHEN ALL TERMINALS ARE RELEASED_^1_%SPC 1_^1WAIT_!LDQ NTERM_^1WCYC_!STQ* DY_^1_%LDQ LOG4-1,Q_)CHECK ALL TERMINALS_^1_%LDA- IOPR,Q_*TEST IF I/O FINISHED_^1_%SAN NOREL_^1_%LDA- TMOTN+THR,Q_^1_%SAN NOREL_'SKIP IF ANY TMC REQUEST BUSY_^1_'LDQ* DY_^1_%INQ -1_^1_€€%SQZ RELT_^1_%JMP* WCYC_^1NOREL JMP* WAIT_,CONTINUE CHECK_^1*_]_^1RELT_!IIN 0_^1_%LDA GOTIME+1_^1_%EOR- $11_+CHECK IF 7FFF_^1_%SAZ SETDSP_^1_%LDA GOTIME+1_^1_%JMP* SETDSP+1_FFV/ER_^1SETDSP LDA- DISP_)PICKUP ADDRESS OF DISPATCHER_#FV/ER_^1_%STA+ R3644_^1_%LDQ LOG4_^1_%LDA- MMREAD+BUFAD,Q_!DIFFERENT ADDRESS FOR TERMINAL 0_^1_%STA LOG4_^1_%LDQ NTERM_^1RELBUF LDA LOG4-1,Q_^1€€_%STA* P13_^1_%RTJ- ($F4)_^1_%NUM $1800,0_^1_%EQU P13(*-1)_^1_%INQ -1_^1_%SQZ ENDRL_^1_%JMP* RELBUF_^1ENDRL STQ+ S200BS_#SET SIMZ200 NOT BUSY_^1_%RTJ- ($F4)_^1_%NUM $1901_^1_%ADC (SIM200-*+1)_^1*_]_^1_%BZS DY_^1_%EJT_]_^1*_#TAPE MOTION CONTROL PROCESSOR_^1_%SPC 1_^1MOTION LDA- TMOTN+THR,I_^1_%SAZ NMOT_,TEST WHETHER REQUEST YET ACTIVE_^1_%JMP ERR8_^1*_]_^1NMOT_!RTJ RESYM€€_^1_%SAM ERR27_^1_%RTJ RESYM_^1_%SAM ERR27_^1_%TRA Q_/UNIT SPECIFICATION_^1_%RTJ RESYM_^1_%SAM ERR27_^1_%RTJ NUMBER_*READ CONTROL PARAMETER_^1_%SAP 1_^1ERR27 JMP* ERR28_^1_%ALS 12_^1_%STA- TMOTN+LENGTH,I_#INSERT PARAMETER IN REQUEST_^1_%INQ -XI_^1_%LDA- INPRQ+LU,I_%GET LU OF APPROPRIATE DEVICE_^1_%SQZ CKTPE_^1_%INQ XI-L_^1_%SQN ERR29_^1_%LDA- LISTRQ+LU,I_^1_%ENQ LINTY€€P-TYPE_^1CKTPE STA- TMOTN+LU,I_%INESERT LU IN REUQEST_^1_%LDQ- TYPE,B_*GET TYPE OF DEVICE_^1_%INQ -MAGTAP_^1ERR29 SQN ERR28_+ERROR IF NOT MAGNETIC TAPE DEVICE_^1_%AND- LPMSK+10_^1_%TRA_!Q_^1_%LDA LOG5,Q_*DEVICE SHOULD NOT BE BUSY_^1_'SAZ 1_^1_'JMP* NMOT-2_^1_%RTJ INDIR_+ISSUE TAPE MOTION CONTROL REQUEST_^1_%ADC (TMOTN)_^1_%RAO- IOPR,I_^1_%JMP MESSXT_^1ERR28 JMP ERR2_^1_'€€EJT_^1*_]_^1*_$INPUT BUFFERING ROUTINE_^1*_]_^1_%SPC 1_^1INPUT STQ- I_/(Q) = ADDRESS OF PDT OF TERMINAL_^1_%ENA 41_^1_%STA- INPRQ+LENGTH,I_"SET UP LOAD SIAE_^1_%ENA 96_^1_%MUI- INPSEC,I_#COMPUTE WORD ADDRESS OF MM BUFFER_^1_%LLS 1_^1_%ALS 15_.15 BIT ARITHMETIC_^1_%STA- OUTRQ+SEC+1,I_"INITIALIZE REQUEST_^1_%STQ- OUTRQ+SEC,I_^1_%ENA 0_^1_%STA- RECORD,I_(RESET RECORD COUNT_^1_€€%STA- STOP,I_*CLEAR STOP FLAG_^1_%JMP INITR_(INITIALIZE INPUT_^1_%SPC 1_^1*_$COMPLETION ROUTINE OF INPUT PROCESSOR_^1_%SPC 1_^1INPCMP INA -INPRQ_*COMPUTE ADDRESS OF PDT_^1_%STA- I_^1_%RAO- IOPR,I_^1_%LDA- TYPE,I_^1_%INA -MMTYPE_^1_%SAN 1_^1_%RAO- INPRQ+SEC+1,I_#UPDATE RECORD NR._^1_%INA MMTYPE-MAGTAP_^1_%SAZ CHKEOR_'Z=MAG.TAPE DEVICE_^1_%INA MAGTAP-CARDTP_^1_%SAN LFLIST_'€€N=NOT CARD DEVICE_^1_%LDQ- STINP,I_%GET LU OF READER DEVICE_^1_%AND- LPMSK+10_$ISOLATE LU NO._^1_%LDQ+ LOG1A,Q_%GET PDT BASE_^1_%LDA- ESTAT2,Q_$GET LAST DEVICE STATUS_^1_%AND- ONEBIT+11_#ISOLATE EOF FAAG_^1_%SAZ CHKEOR_'Z=EOF NOT DETECTED/CHECK FOR EOR)_^1_%LDQ- CORE,Q_'GET FWA OF BUFFER_^1_%LDA =N$0220_%EOF/BLANK_^1_%STA- (ZERO),Q_$STORE IN 1ST WORD OF BUFFER_^1CHKEOR RTJ RCVRT€€_^1_%ADC EORC1_^1LFLIST LDA- LISTSW,I_(EXAMINE LIST SWITCH_^1_%SAP NL2_^1_%JMP LISTT_^1NL2_"LDA- OUTRQ+THR,I_^1_%JMP* TEST_,TEST FOR COMPLETION OF DUMP_^1_%SPC 1_^1*_#COMPLETION ROUTINE OF OUTPUT DUMP PROCESSOR_^1_%SPC 1_^1OUTCMP INA -OUTRQ_^1_%STA- I_/PDT ADDRESS OF TERMINAL_^1_%RAO- IOPR,I_^1NOWTR LDA- STOP,I_^1_'SAN 1_^1_'JMP* OUT_.CONTINUE IF NOT LAST DUMP_^1_%ENA 40_€€^1_%MUI- RECORD,I_^1_%STA- MMREAD+LENGTH,I_"NUMBER OF WORDS_^1_%LDA- STOP,I_^1_%TCA A_^1ERXT_!STA- STOP,I_'SET END OF INPUT FLAG_^1_%LDA- INPRDY,I_^1_$SAZ ERXT1_)TEST IF INPUT ALREADY REQUESTED_^1_%ENA 0_^1_%STA- INPRDY,I_^1_%RTJ INDIR_(READ BACK FROM MASS STORAGE_^1_%ADC (MMREAD)_^1ERXT1 JMP- (DISP)_^1_%EJT_]_^1DELETE NOP 0_^1NLST_!ENA 0_^1_%LDQ- NFILE,I_^1_'STA- NFILE,I_+€€DELETE INPUT FILE_^1REMV_"INQ -1_^1_'STQ- LOADSW,I_^1_'SQM EXTL_^1_'LDQ- FILE,B_+REMOVE ALL LUNRS FROM ASSIGNMENT_^1_'STA LOG5,Q_^1_'LDQ- LOADSW,I_^1_'JMP* REMV_^1EXTL_!LDQ- STINP,I_^1_%ADQ- ZROBIT+12_^1_%RTJ DEVCK_+RESTORE STANDARD DEVICE_^1_%ADC RD_^1_%ADC INPRQ_^1_%STA- TYPE,I_^1_%LDA- LISTSW,I_^1_%SAZ EXTL2_^1_%ENA 0_^1_%STA- LISTSW,I_^1_%LDQ- LISTLU,I_^1_%STA LOG5,Q_*€€SET PRINTER DEVICE NOT BUSY_^1EXTL2 JMP* (DELETE)_^1_%EJT_]_^1OUT_"LDA- OUTRQ+SEC+1,I_^1_%ADD- OUTRQ+LENGTH,I_!UPDATE MM ADDRESS_^1_%SAP NOV_^1_%AND- N7_.ADJUST OVERFLOW_^1_%RAO- OUTRQ+SEC,I_^1NOV_"STA- OUTRQ+SEC+1,I_^1*_]_^1_%LDA- INPRQ+THR,I_$TEST FOR COMPLETION OF INPUT_^1TEST_!SAZ RDY_^1_%JMP- (DISP)_*EXIT IF NOT YET READY_^1*_]_^1RDY_"RTJ* CKEOF_+TEST FOR END OF CURRENT FIL€€E_^1_'SQP NOTEND_^1_%RTJ* NEXTLU_*FESCH NEXT LU FROM DESCRIPTOR_^1_%SQM_!EOFD_(SKIP IF NONE AVAILABLE_^1_%JMP* NOTEND_'MULTIPLE JOB ENTRY_^1EOFD_!LDA_!=X256*EOFC+BLANK_^1_%LDQ- INBUF,I_^1_%STA- (ZERO),Q_(PUT EOF CODE IN INPUT BUFFER_^1_'RAO- STOP,I_^1_%RAO- STOP,I_*INDICATE LAST DUMP_^1NOTEND RAO- RECORD,I_(UPDATE RECORD COUNT_^1_%LDA- RECORD,I_^1_'INA -12_.TEST FOR BUFFER FULL_^€€1_'SAM NSTP_^1_%RAO- STOP,I_*INDICATE LAST DUMP_^1NSTP_"LDQ- OUTBUF,I_^1_%LDA- INBUF,I_^1_%STA- OUTBUF,I_(SWITCH BUFFERS_^1_%STQ- INBUF,I_^1_%STA* NEXTLU_^1_%LDQ- OUTRQ+LENGTH,I_^1SCYC_!INQ -1_^1_%SQM WRBUF_^1_%LDA* (NEXTLU),Q_^1_%EOR =A_.SKIP TRAILING BLANKS_^1_%SAN 1_^1_%JMP* SCYC_^1_%LDA* (NEXTLU),Q_^1_%ALS 8_^1_%SAP WRBUF_+TEST FOR OD NUMBER OF CHARACTERS_^1_%AND- LPMSK+€€7_^1_%EOR- ONEBIT+13_'REPLACE FILLER BY SPACE_^1_%ALS 8_^1_%STA* (NEXTLU),Q_^1WRBUF RTJ INDIR_^1_%ADC (OUTRQ)_^1_%LDA- STOP,I_^1_%SAN EXITW_+DISCONTINUE INPUT AFTER LAST DUMP_^1*_]_^1INITR LDA- INBUF,I_^1_%STA* NEXTLU_%ADDRESS OF INPUT BUFFER_^1_%LDQ- INPRQ+LENGTH,I_!SIZE OF BUFFER_^1_%LDA =A_^1CLCYC INQ -1_^1_%SQM ENDCL_^1_%STA* (NEXTLU),Q_!BACKGROUND BUFFER_^1_%JMP* C€€LCYC_^1ENDCL RTJ_!INDIR_'ISSUE READ REQUEST_^1_%ADC (INPRQ)_^1EXITW JMP- (DISP)_^1_%EJT_]_^1*_$SUBROUTINE TO GET THE NEXT 1.U.NR. FROM THE FILE DESCRIPTOR_^1_'SPC 1_^1NEXTLU NUM 0_^1_%LDQ- LOADSW,I_(NR. OF REMAINING UNITS_^1_%INQ -1_^1_%STQ- LOADSW,I_^1_%SQM EXTLU_+SKIP IF FILE EXHAUSTED_^1_%TCQ Q_^1_'ADQ- NFILE,I_^1_'LDQ- FILE-1,B_^1_%TRQ A_^1_%EOR- ONEBIT+12_'SET ASCII M€€ODE_^1_%STA- INPRQ+LU,I_%PUT IN REQUEST_^1_'LDQ+ LOG1A,Q_*GET PDT ADDRESS OD DEFICE_^1_%LDA- DTYPE,Q_)GET DEVICE TYPE_^1_%ARS_!11_^1_%AND- LPMSK+3_)EXTRACT EQUIPMENT CLASS CODE_^1_'STA- TYPE,I_^1EXTLU JMP* (NEXTLU)_^1_'SPC 1_^1_%SPC 1_^1CKEOF_!0_"0_^1_%LDQ- LOADSW,I_(TEST IF INPUT HAS BEEN INTERRUPTED_^1_%SQM T1-2_^1_'LDQ- INPRQ+LU,I_^1_%SQM T1-2_,ERROR ALWAYS IMPLIES EOF_^1_%€€TRQ A_^1_%LDQ- TYPE,I_^1_'NUM $1AFF_+BRANCH ACCORDING TO EQUIPMENT CLASS_^1_%JMP* T1_^1_%JMP* T2_.MASS STORAGE DEVICE_^1_%IFA YEOF,EQ,1_^1_%JMP* T2_+CARD READER DEVICE_.FV/ER_^1_%EIF_]_^1_%IFA YEOF,EQ,0_^1_%JMP* (CKEOF)_^1_%EIF_]_^1_%JMP* T3_.PAPER TAPE DEVICE_^1_%JMP* (CKEOF)_)PRINTER DEVICE (IMPOSSIBLE)_^1_%JMP* T3_.TELETYPE DEVICE_^1*_]_^1T1_#TRA Q_^1_%QLS 1_)SHORT TRANSFE€€R IMPLIES FILE MARK_^1_%SQP EOFX_^1_%RTJ* BUFSIZ_^1_%INA -9_.RECORD SIZE LESS THAM 9 IMPLIES EOF_^1_%SAM EOFY+1_^1EOFX_!JMP* (CKEOF)_^1T2_#LDQ- INPRQ+BUFAD,I_^1_%LDA- (ZERO),Q_)TEST FOR EOF CODE_^1_%EOR =X256*EOFC+BLANK_^1EOFY_!SAN 1_^1_%ENQ -1_^1_%JMP* (CKEOF)_^1*_]_^1T3_#ALS 1_^1_%SAP EOFZ_^1_%RTJ* BUFSIZ_^1_%JMP* EOFY_/(A) = 0 IF BLANK LINE_^1EOFZ_!JMP* (CKEOF)_^1_%SPC €€1_^1BUFSIZ 0_"0_^1_%LDQ- INPRQ+BUFAD,I_^1_%ADQ- INPRQ+LENGTH,I_^1_%INQ -1_+SET Q-REG.=LWA OF ENTIRE BUFFER_^1_%LDA- (ZERO),Q_$(LWA)=LWA+1 OF USED PART OF BUFFER_^1_%SUB- INPRQ+BUFAD,I_%COMPUTE BUFFER SIZE_^1_%JMP* (BUFSIZ)_^1_%EJT_]_^1*_%LIST I/O PROCESSOR_^1_%SPC 1_^1LISTT RTJ* CKEOF_+TEST FOR END OF INPUT FILE_^1_%SQP TEOF_,SKIP IF NOT YET ENCOUNTERED_^1_%RTJ* NEXTLU_*GET N€€EXT UNIT FROM STRING_^1_%SQP FIXEOF_'NOT LAST EOF CARD_/FV/ER_^1_'LDQ- LINTYP,I_^1_%NUM $1AFF_+BRANCH ACCORDING TO TYPE OF LIST DEVICE_^1_%JMP* F1_^1_%JMP* F2_^1_%JMP* F2_^1_%JMP* F3_^1_%JMP* F2_^1_%JMP* F3_^1*_]_^1FIXEOF LDQ- INBUF,I_%PACK AN EOF CODE IN THE BUFFER_!FV/ER_^1_%LDA* EOFY-1_HFV/ER_^1_%STA- (ZERO),Q_FFV/ER_^1*_]_^1TEOF_!LDQ- LINTYP,I_^1_%INQ -MAGTAP_^1_%SQZ NSHY1_€€^1_%INQ MAGTAP-MMTYPE_^1_%SQN SHY_^1NSHY_!LDA- INPRQ+LENGTH,I_^1_%INA -1_^1_%JMP* BUFL_^1NSHY1 RTJ* RCVRT_+CONVERT EOR CODE_^1_%ADC EORC_^1_%JMP* NSHY_^1SHY_"LDQ- INPRQ+LU,I_^1_%QLS 1_0TEST FOR SKORT TRANSFER_^1_%SQM SRT7_^1_%LDA- INBUF,I_^1_%STA* BUFSIZ_^1_%LDQ- INPRQ+LENGTH,I_^1_%INQ -1_^1SPDEL INQ -1_^1_%SQZ FND8_^1_%LDA* (BUFSIZ),Q_%DELETE TRAILING BLANKS IF ANY_^1_%€€EOR =A_^1_%SAN FND8_^1_%JMP* SPDEL_^1*_]_^1FND8_!TRQ A_^1_%INA 1_/ACTUAL BUFFER SIZE_^1_%JMP* BUFL_^1SRT7_!RTJ* BUFSIZ_^1BUFL_!LDQ =XINIT2-PRINT_"RETURN ADDRESS_^1_%JMP PRINT_,PRINT LINE_^1*_]_^1INTLL STQ- I_.ENTRY TO SET UP LIST OPERATION_^1_%ENA LINSIZ_^1_%STA- INPRQ+LENGTH,I_!SET UP LIST SIZE_^1_%LDA- INBUF,I_^1_%STA- COUNT,I_)SAVE INPUT BUFFER ADDRESS_^1INIT2 LDA- SAVA€€D,I_^1_%STA- INBUF,I_)SET UP INPUT BUFFER ADDRESS_^1_%JMP* INITR+1_^1_%EJT_]_^1*_#END OF FILE PROCESSING_^1_%SPC 1_^1F1_#RTJ* WFILEM_*WRITE FILE MARK_^1*_]_^1LEXT_!LDA- COUNT,I_^1_%STA- INBUF,I_)RESTORE INPUT BUFFER ADDRESS_^1_%RTJ DELETE_^1_%JMP- (DISP)_^1*_]_^1F2_#LDQ- INBUF,I_^1_%LDA EOFD+1_^1_%STA- (ZERO),Q_(INSERT EOF CODE_^1_%LDA- INPRQ+LENGTH,I_^1_%INA -1_^1F4_#LDQ =XLE€€XT-PRINT_#GET RETURN ADDRESS_^1_%JMP* BUFL+2_^1*_]_^1F3_#LDQ- INBUF,I_^1_%ENA -0_^1_%STA- (ZERO),Q_(INSERT CARRIAGE RETURN CODE_^1_%ENA 1_^1_%JMP* F4_^1_%SPC 1_^1*_#SUBROUTINE TO WRITE FILE MARK_^1_%SPC 1_^1WFILEM 0_"0_^1_%LDA =N$2000_)WRITE FILE MARK CODE_^1_%STA- TMOTN+LENGTH,I_^1_%LDA- LISTRQ+LU,I_^1_%STA- TMOTN+LU,I_^1_%RTJ INDIR_+ISSUE TAPE MOTIOB CONTROL RQEUEST_^1_%ADC€€ (TMOTN)_^1_%RAO- IOPR,I_^1_%JMP* (WFILEM)_^1_%SPC 1_^1*_#SUBROUTINE TO CONVE9T EOR CODES_^1_%SPC 1_^1RCVRT 0_"0_^1_%LDQ- INPRQ+BUFAD,I_^1_%LDA- (ZERO),Q_^1_%ARS 8_^1_%SUB* (RCVRT)_)COMPARE WITH PARAMETER_^1_%SAN RCVRT1_*LEAVE IF NOT EQUAL_^1_'ENA EORC1+EORC_^1_%SUB* (RCVRT)_^1_%SUB* (RCVRT)_)COMPUTE EQUIVALENT_^1_'ALS 8_^1_%ADD- (ZERO),Q_^1_%STA- (ZERO),Q_^1RCVRT1 RAO* RCV€€RT_^1_%JMP* (RCVRT)_^1_%EJT_]_^1*_]_^1**RELEASE STATEMRNT PROCESS0R_^1*_]_^1_%SPC 1_^1RELEAS RAO- RELSF,I_)SET RELEASE FLAG_^1_%LDQ- KBLU,I_,TEST WHETHER KEYBORD IS CHARED_^1_%LDA LOG3,Q_^1_%AND- IDMBIT,I_^1_%STA LOG3,Q_*REMOVE ASSIGNATION_^1_%SAZ 2_^1_%JMP IGNORE_^1*_]_^1_%ENQ NUMLU-1_^1CKALL LDA LOG3,Q_*TEST WHTHER ALL ASSIGNATIONS ARE REMOVED_^1_%SAN NALL_^1_%INQ -1_^1€€_%SQZ CC_LFV/ER_^1_%JMP* CKALL_^1CC_#RTJ- ($F4)_^1_%NUM $1304_^1_%ADC WAIT-*+1_^1NALL_!JMP- (DISP)_^1_%EJT_]_^1*_#LOAD/LIST STATEMENT PROCESSOR_^1_%SPC 1_^1LIST_!LDQ- LISTLU,I_^1_%LDA LOG5,Q_^1_%SAN ERRS2_^1_%ENA -0_^1_%JMP* LOAD+1_^1_%SPC 1_^1LOAD_!ENA 0_^1_%STA* LFLAG_+SET LIST/LOAD FLAG_^1_'LDQ- NFILE,I_(TEST WHETHER ANY LOAD/LIST ALREADY_^1_%SQN ERRS2_+IN PROGRESS_^1_€€%RTJ RESYM_+SKIP 4TH LETTER_^1_%SAP TSTSTR_^1_%JMP ERR2_^1ERRS2 JMP ERR8_^1TSTSTR RTJ RESYM_^1_%SAM 1_^1_%JMP* STRING_*PROCESS STRING_^1_%RTJ BACKSM_*NO STRING GIVEN, SET UP DUMMY_^1_%LDA- INPRQ+LU,I_^1_%AND- LPMSK+10_^1_%STA- FILE,I_^1_%RTJ* CKBUSY_^1_%ENA 1_^1_%STA- LOADSW,I_#STRING CONTAINS 1 I,U,NR._^1_%STA- NFILE,I_^1STLOAD RTJ NEXTLU_^1_%LDQ- I_^1_%LDA* LFLAG_^1_%S€€TA- LISTSW,I_(SET SWITCH TO INDICATE LIST OPERATION_^1_%SAM STLIST_^1_%SCHED INPUT_^1_%JMP* MESSXT_^1_%SPC 1_^1STLIST SCHED INTLL_^1_%LDQ- LISTLU,I_^1_%LDA- IDBIT,I_^1_%STA LOG5,Q_*SET PRINTER DEVICE BUSY_^1_%JMP* MESSXT_^1_%BZS LFLAG_^1_%SPC 1_^1*_]_^1_%SPC 1_^1STRING ENA 0_^1_%STA- LOADSW,I_%INITIALYZE INDEX_^1NSTR_!RTJ NUMBER_*READ L.U.NR._^1_%SAM ENDS_+SKIP IF END OF€€ STRING_^1_%LDQ- LOADSW,I_^1_%INQ -16_^1_%SQP ERR55_,NOT MORE THAN 16 UNITS ALLOWED_^1_%STA- FILE+16,B_^1_%RAO- LOADSW,I_^1_%RAO- NFILE,I_^1_%RTJ* CKBUSY_)TEST IF DEVICE ACTIVE_^1_%RTJ RESYM_+READ TERMINATOR_^1_%SAM ENDS_,SKIP IF END OF MESSAGE_^1_%JMP* NSTR_^1*_]_^1ENDS_!RTJ BACKSM_^1_%LDA- LOADSW,I_^1_%SAZ ERR53_,SKIP IF NO FILE DEFINED_^1_%JMP* STLOAD_(START LOAD/LIST OPER€€ATION_^1**_]_^1ERR55 ENA 0_^1ERR53 STA* CKBUSY_^1_%RTJ DELETE_^1_%LDQ* CKBUSY_^1_%JMP* ERR5,Q_^1_%EJT_]_^1CKBUSY 0_"0_^1_%AND- LPMSK+10_^1_%TRA Q_^1_%LDQ+ LOG1A,Q_^1_%LDQ- DTYPE,Q_(GET DEVICE TYPE_^1_%QLS 14_^1_%SQP ERR56_^1_%TRA Q_.READ TYPE DEVICE_^1_%LDA LOG5,Q_^1_%AND- IDMBIT,I_'TEST WHETHER ACTIVE FOR OTHER TERMINAL_^1_%SAN ERR54_^1_%LDA- IDBIT,I_^1_%STA LOG5,Q_^1_%€€JMP* (CKBUSY)_'FOR THIS TERMINAL_^1_%SPC 1_^1ERR56 ENA ERR10-ERR5_^1_%JMP* ERR53_^1*_]_^1ERR54 ENA ERR8-ERR5_^1_%JMP* ERR53_^1_%SPC 3_^1MESSXT RTJ RESYM_+READ TERMINATING CHARACTER_^1_'SAM 1_^1_'JMP* MESSXT_)SKIP UNTIL END OF STATEMENT_^1_%RTJ RESYM_^1_'SAM ELINE_*SKIP IF END OF LINE_^1_%RTJ BACKSM_*NO, ANOTHER MESSAGE FOLLOWS_^1_'JMP PROC_^1_%EJT_]_^1ELINE_!JMP IGNORE€€_+GO REPEAT REQUEST_^1*_$ERROR PROCESSING_^1_'SPC_!1_^1ERR10 RAO* ERROR_^1ERR9_!RAO* ERROR_^1ERR8_!RAO* ERROR_^1ERR7_"RAO* ERROR_^1ERR6_"RAO* ERROR_^1ERR5_"RAO* ERROR_^1ERR4_"RAO* ERROR_^1ERR3_"RAO* ERROR_^1ERR2_"RAO* ERROR_^1ERR1_!LDQ* ERROR_^1_'LDA* RTAB,Q_^1_'STA- RTN,I_*FETCH RETURN LOCATION_^1_%LDA* MSLNG,Q_^1_'STA- ERRQ+LENGTH,I_!FETCH MESSAGE LENGTH_^1_'LDA* MSAD,Q_^1_'ADD €€ ADCS_^1_%STA* ERROR_+SAVE ADDRESS OF ERROR MESSAGE_^1_%INQ -8_^1_%SQZ 3_^1_%LDQ- MESSWR+BUFAD,I_^1_%LDQ- (ZERO),Q_(GET IDENTIFIER_^1_%STQ* (ERROR)_^1_%LDQ- ERRQ+LENGTH,I_^1CPERRM INQ -1_^1_%SQM ENDRC_^1_%LDA* (ERROR),Q_'COPY ERROR MESSAGE IN PDT BUFFER_^1_%STA- ERRBUF,B_^1_%JMP* CPERRM_^1ENDRC ENA 0_^1_'STA* ERROR_*PRESET FOR NEXT_^1_%LDA PNTRM_^1_%STA- SPTR,I_*SAVE POINTER€€_^1_%RTJ INDIR_^1_%ADC (ERRQ)_*DISPLAY ERROR MESSAGE_^1_%JMP- (DISP)_^1_'SPC 1_^1*_"COMPLETION ROUTINE OF ERROR MESSAGE DISPLAY REQQUEST_^1_(SPC 1_^1ERRQC_!INA -ERRQ_*FIND ADDRESS OF PDT_^1_'STA- I_^1_%RAO- IOPR,I_^1_'LDA- SPTR,I_^1_%STA PNTRM_+RESTORE POINTER_^1_'LDQ- RTN,I_*FETCH RETURN LOCATION_^1_'JMP* RTAB,Q_^1_'BZS ERROR_^1_%EJT_]_^1RTAB_!ADC* IGNORE,MESSXT+1,NEXTU+2,€€MESSXT+3,MESSXT+4,IGNORE+5,MESSXT+6_^1_%ADC* MESSXT+7,P7+8,MESSXT+9_^1MSLNG ADC L1,L2,L3,L4,L5,L6,L7_^1_%ADC L8,1,L3_^1MSAD_!ADC EM1-S,EM2-S,EM3-S,EM4-S,EM5-S,EM6-S,EM7-S_^1_%ADC EM8-S,EM9-S,EM3-S_^1EM1_"ALF *, /INVALID IDENTIFICATION*_^1_'EQU L1(*-EM1)_^1EM2_"ALF *, /INVALID STATEMENT*_^1_'EQU L2(*-EM2)_^1EM3_"ALF *, /INVALID UNIT*_^1_'EQU L3(*-EM3)_^1EM4_"ALF *, /€€KEYBOARD LOCKED*_^1_'EQU L4(*-EM4)_^1EM5_"ALF *, /INVALID FILE*_^1_'EQU L5(*-EM5)_^1EM6_"ALF *, /NO TERMINAL AVAILABLE*_^1_'EQU L6(*-EM6)_^1EM7_"ALF *, /TERMINAL ID = *_^1_'EQU L7(*-EM7)_^1EM8_"ALF *, /UNIT BUSY*_^1_%EQU L8(*-EM8)_^1EM9_"NUM -0_^1_'EJT_^1*_#SETUP OF TERMINAL STATUS TABLE (SIZE = 148)_^1_'SPC 1_^1PDT_#EQU PDT(*)_^1_'DEF MMREAD,BUFAD+2_^1_'DEF INPS€€EC,1_^1_'DEF MMWRT,SEC+2_^1_'DEF MRQ,SEC+2_^1_%DEF LISTRQ,SEC+2_^1_'DEF INPRQ,LU+1_^1_'NUM 41_^1_%DEF INBUF,3_^1_'DEF OUTRQ,LU+1_^1_'NUM 40_^1_'DEF OUTBUF,3_^1_'DEF MESSWR,BUFAD+1_^1_'DEF ERRQ,BUFAD+1_^1_%DEF TMOTN,LENGTH+1_^1_'DEF MSRQ,LU+1_^1_%ADC MESSL,0_^1_'DEF MSBUF,1_^1_'JMP* (*+1)_^1_'DEF RETURN,1_^1_'ORG RETURN+1_^1_'BSS LINTYP,TYPE,LOADSW,NFILE,FILE(16),C€€OUNT,TIME_^1_%BSS SPTR,IOPR,LISTSW,CONN,MSCHAR,LISTLU_^1_%BSS LOCK,INPRDY_^1_%BSS ATTFL_^1_%BSS SAVL,CHLU,ERRBUF(L1)_^1_'BSS READSW,OPMESS,ECODE,IDX,IDENT,IDBIT,IDMBIT,RELSF_^1_%BSS PRBUSY,PNTR,FIRST,PHYSTB,STINP,RTN,MESSRQ_^1_'BSS SITE,ST,STATION,PARITY,QHOLD,TMODE,MSCODE_^1_%BSS PARFLG_^1_'BSS KBLU,BUSY,FLAG,RECORD,STOP,FREE,SAVAD,SAVSEC_^1_%EQU PRET(PNTR)_^1_'ORG PDT+M€€MREAD_^1_%ADC $8F0+LVL2_^1_'ORG PDT+ERRQ_^1_%ADC $C00+$11*LVL2_^1_%ORG PDT+TMOTN_^1_%ADC $1C00+$11*LVL2_^1_%ORG PDT+MMWRT_^1_%ADC $CF0+LVL2_^1_'ORG PDT+MRQ_^1_%ADC $800+$11*LVL2_^1_'ORG PDT+LISTRQ_^1_%ADC $C00+$11*LVL2_^1_'ORG PDT+INPRQ_^1_%ADC $800+$11*LVL2_^1_'ORG PDT+OUTRQ_^1_%ADC $400+$11*LVL2_^1_'ORG PDT+MESSWR_^1_%ADC $C00+$10*LVL1+LVL2_^1_%ORG PDT+MSRQ_^1_%€JADC $800+$11*LVL2_^1_'ORG PDT+OUTRQ+LU_^1_%NUM $18C2_^1_'ORG PDT+MMREAD+LU_^1_%NUM $18C2_^1_'ORG PDT+MMWRT+LU_^1_%NUM $18C2_^1_%ADC SIZE_^1_'ORG PDT+MRQ+LU_^1_%NUM $18C2_^1_%NUM 96_^1_'ORG*_^1_%BZS (IDENT-LINTYP+1)_^1_%NUM 1,-1_^1_%BZS (SAVSEC-RELSF+1)_^1_%ORG PDT+STATION_^1_%NUM $61_^1_%ORG*_^1_%END SIM200_^__JPTSBOOT CSY/ P€1_%NAM TSBOOT_'TAPE SCOPE BOOTSTRAP 04/28/76_^1_%ENT TSBOOT_^1MSG_"ALF *,TURN OFF PROGRAM PROTECT,:R*_^1_%ALF *,MOUNT TAPE SCOPE SYSTEM TAPE ON UNIT 0,:R*_^1_%ALF *,TYPE 9 OR 7.:R*_^1LMSG_!EQU LMSG(*-MSG)_^1PARAM NUM 0_^1HOLD_!NUM 0_^1TSBOOT FWRITE 4,0,MSG,LMSG,A_^1_%LDA* TSBOOT+3_^1_%SAZ 1_^1_%JMP* *-2_^1REDPRM FREAD 4,0,PARAM,1,A_^1_%LDA* REDPRM+3_^1_%SAZ 1_^1_%J€€MP* *-2_^1CMPLAD LDA* PARAM_^1_%IIN_]_^1_%CLR M_^1_%ARS 8_^1_%INA -$37_^1_%SAZ QDIR_)7 TRACT SELECTED_^1_%INA -2_^1_%SAZ LOAD9_^1_%JMP* TSBOOT_'LOOP UNTILL 9 OR 7 ENTERED_^1LOAD9 LDA =N$180C_%9 TRACK SELECTED CHANGE JUMP INSTRUCTION_^1_%STA* CKSW_^1QDIR_!LDQ =N$382_'SELECT UNIT 0, 800 BPI_^1UNITSL LDA =N$44C_'ASSEMBLY MODE, BINARY_^1_%NOP_]_^1_%OUT -1_^1_%INQ -1_^1_%LD€€A =N$100_'START READ MOTION_^1_%NOP_]_^1_%OUT -1_^1_%ENA 0_,STARTING ADDRESS OF_^1_%STA* HOLD_)SYSLOD BOOTSTRAP = 0_^1_%STA- $FE_^1_%INQ -1_+IF 9TK TAPE, INPUT 16 BITS_^1_%NOP_]_^1RTN_"INP -1_+IF 7TK TAPE, INPUT 12 BITS_^1_%STA* (HOLD)_'SAVE INPUT WORD_^1_%SAZ CKSW_)DONE LOADING_^1_%RAO* HOLD_^1_%JMP* RTN_*CONTINUE RAW DATA INPUT_^1CKSW_!ADC $1801_($1801=7TK, $180C=9TK_^1_%E€€NA $24_*7-TRACK TAPE, START PACKING_^1_%STA- $FF_^1AGN_"LDA- ($FF)_(GET A 12 BIT WORD_^1_%SAZ GOEXEC_'IF=0, EXECUTE LOW CORE PROGRAM_^1_%ALS 4_,GET DIGITS 1 AND 3 OF HEX WORD_^1_%RAO- $FF_^1_%EOR- ($FF)_(GET DIGITS 2 AND 4 OF HEX WORD_^1_%SPA- ($FE)_^1_%RAO- $FE_*SAVE RESULTING INST. IN ORG. FORM_^1_%RAO- $FF_^1_%JMP* AGN_*REPEAT THIS LOOP_^1GOEXEC NUM $1400_(AUTO. JUMP TO LOC.€B 0 (SYSLOD)_^1_%NUM 0_,FOR NON-STOP EXECUTION_^1_%END TSBOOT_^__BPSETUP5 CSY/ P€1_%NAM SETUP5_'TS/MSOS 05/30/74 SETUP 955 1.4_^1* 3/31/75 CCN1755SET14-003_^1*_'1-30-75_+CCN1755SET14-002_^1*_$9/4/74_,CCN1755SET14-001_^1****** COPYRIGHT 1974 BY CONTROL DATA CORPORATION ******_^1_%ENT_"SETUP5_(CCN1755SET14-002_^1SETUP5 EQU_"SETUP5(*)_$CCN1755SET14-002_^1_%CLR_"A FOR RESTART PURPOSES NECESSARY TO CLEAR 955 SWITCH_^1_%STA_"SWI955_^1START RTJ-_!($F4)_#OUTPUT ON€€ TTY SOT 955_^1_%ADC_"$C00,0,0,$18FD,5,STUP_^1* LOOP UNTIL REQUEST IS COMPLETE_^1STAR_!LDA*_!START+3_^1_%SAZ_"TT1_'WHEN COMPLETE EXIT_^1_%JMP*_!STAR_$LOOP_^1* SPACE ONE LINE ON TTY AND THEN_^1* INPUT ONE CONTROL STATEMENT_^1TT1_"RTJ-_!($F4)_^1_%ADC_"$C00,0,0,$18FD,1,BLNK_^1BL_#LDA*_!TT1+3_^1_%SAZ_"TYR_^1_%JMP*_!BL_^1TYR_"RTJ-_!($F4)_^1_%ADC_"$800,0,0,$18FD,41,IBUF_^1TT2_"LDA*_!TYR+€€3_^1_%SAZ_"TT3_^1_%JMP*_!TT2_^1TT3_"RTJ*_!CCC_^1_%LDA_"SWI955_"955 SWITCH SET_^1_%SAZ_"TT4_,NO-GO READ FROM TTY_^1_%LDA_"ERRCON_0ERROR CONTROL SWETCH SET_^1_%SAZ_"TT5_^1_%CLR_"A_^1_%STA_"ERRCON_0CLEAR ERROR FLAG_^1TT5_"RTJ_"RD955_#GO READ FROM 955_^1_%JMP*_!TT3_%GO CHECK DATA_^1TT4_"JMP*_!TT1_^1_%SPC_"8_^1CCC_"NUM_"0_^1_%CLR_"A_^1_%STA_"SWIDLT_0CLEAR NECESSARY FLAGS AND SWITCHES_^1€€_%STA_"SWIMI_^1_%STA_"DP2_^1_%STA_"SWIEND_^1_%STA_"COPOS_^1_%STA_"COPY_^1_%STA_"SWINAM_^1_%STA_"SWIPO_^1_%STA_"LSW_^1_%RAO_"WRTSWI_^1_%SPC_"8_^1*CLOSED SUBROUTINE TO CHECK CONTROL CHARACTERS TO DETERMINE WHAT TYPE O_^1*IT FIRST CHAR.CHECKED IS AN =, THE STATEMENT IS CONTROL AND WILL BE FU_^1* TYPE. IF NOT, IT IS AN INSTRUCTION TO BE WRITTN TO TAPE._^1_%LDA_"IBUF_2LOAD FIRST WORD_^€€1_%SUB_"=N$2F3D_'CONTROL?_'CCN1715SET13-004_^1_%SAZ_"C1_-YES_+CCN1715SET13-004_^1_%SUB_"=N$2D00_'CONTROL?_'CCN1715SET13-004_^1_%SAZ_"C1_4YES - CONTINUE CHECK_^1_%JMP_"SETUP_^1C1_#LDA_"IBUF+1_-LOAD 2ND WORD OF INPUT BUFFER_^1_%ARS_"8_5SHIFT OUT LOWER 8 BITS_^1_%AND_"=N$FF_1MASK OUT UPPER 8 BITS_^1_%STA*_!CSAVE_#SAVE CONTROL CHAR_^1_%INA_"-$4D_%IS CHAR AN M_^1_%SAN_"C2_-NO - CONTINU€€E CHECKING_^1_%JMP_"CM_-YES-CHECK FOR MO OR MI_^1C2_#LDA*_!CSAVE_!RELOAD CONTROL CHAR_^1_%INA_"-$55_%IS IT A U_^1_%SAN_"C3_-NO - CONTINUE CHECKING_^1_%JMP_"CUP_,YES - GO CHECK FOR UP_^1C3_#LDA*_!CSAVE_^1_%INA_"-$44_%IS CONTROL A D_^1_%SAN_"C32_,NO - CONTINUE CHECKING_^1_%JMP_"CD_-YES - GO PROCESS DELETE CONTROL_^1C32_"LDA*_!CSAVE_^1_%INA_"-$49_%IS CONTROL AN I_^1_%SAN_"C4_-N€€O - CONTINUE CHECKING_^1_%JMP_"CDIN_+YES - GO PROCESS INSERT CONTROL_^1C4_#LDA*_!CSAVE_^1_%INA_"-$45_%IS CONTROL AN E_^1_%SAN_"C5_-NO - CONTINUE CHECKING_^1_%JMP_"CE_-YES - CHECK FOR EX OR EOR SYMBOL_^1C5_#LDA*_!CSAVE_^1_%INA_"-$43_#IS CONTROL A C_^1_%SAN_"C6_-NO - CONTINUE CHECKING_^1_%JMP_"CC_-YES - PROCESS COPY CONTROL_^1C6_#LDA*_!CSAVE_^1_%INA_"-$4C_#IS CONTROL AN L_^1_%SAN€€_"C7_#NO - KEEP CHECKING_^1_%JMP_"CLIST_#YES - PROCESS AND LIST NAME RECORDS_^1C7_#LDA*_!CSAVE_^1_%INA_"-$50_%IS CONTROL A P_^1_%SAN_"C8_^1_%JMP_"CPOS_)GO PROCESS POSITION INSTRUCTION_^1C8_#LDA*_!CSAVE_^1_%INA_"-$4E_^1_%SAN_"C9_^1_%JMP*_!NSEQ_^1C9_#LDA*_!CSAVE_^1_%INA_"-$53_^1_%SAN_"ERRSO2_^1_%JMP*_!SEQ_^1_%SPC_"8_^1*IF IT IS NONE OF THE ABOVE AN ILLEGAL CONTROL HAS BEEN INPUT, GO€€ TO TT_^1**_^1* WRITE TO OPERATOR WITH REPLY *_^1*_>*_^1*********************************_^1WTOR_!NOP_"0_^1_%LDQ*_!WTOR_^1_%INQ_"-1_^1_%LDA-_!1,Q_^1_%STA*_!RQWTO_^1_%LDA-_!2,Q_^1_%STA*_!RFWA_^1_%INQ_"3_^1_%STQ*_!RCOMP_^1_%RTJ_"WTO_^1RQWTO NUM_"$0_^1RIN_"RTJ-_!(€€$F4)_#FREAD_^1_%NUM_"$800_^1_%NUM_"0_^1_%NUM_"0_^1_%NUM_"$8FC_^1_%NUM_"1_^1_%NUM_"0_^1_%RTJ-_!($F4)_^1_%NUM_"$A00_#EXIT_^1_%EQU_"RCOMP(RIN+2)_^1_%EQU_"RLN(RIN+5)_^1_%EQU_"RFWA(RIN+6)_^1***********************************_^1*_@*_^1* SETCNT ROUTINE_0*_^1*_@*_^1***********************************_^1SETCNT NOP_"0_!ENTRY SETCNT_^1_%EOR_"=N$7FFF_^1_%INA_"1_^1_%STA*_!(SETCNT)_^1_%SOV_"0_€€^1_%RAO*_!SETCNT_^1_%JMP*_!(SETCNT) RETURN_^1**************************************_^1*_C*_^1* LBYTE - ROUTINE TO LOAD A CHAR_"*_^1*_)USING A CHAR ADDRESS_$*_^1*_)SPECIFIED IN Q, THE ADDRS *_^1*_)IS TWO TIMES THE WORD ADR *_^1*_)WHERE EVEN ADDRS IS UPPER *_^1*_)CHAR AND ODD ADDRS IS_#*_^1*_)LOWER CHAR. ON RETURN_"*_^1*_)Q POINTS TO NEXT CHAR_#*_^1*_C*_^1**************************€€************_^1LBYTE NOP_"0_,(Q) = CHARACTER ADDRESS OF DATA_^1_%QLS_"15_0DIVIDE CHARACTER ADDRESS BY TWO_^1_%INQ_"-1_0SET UP FOR INDEXING_^1_%STQ*_!QLD+1_^1_%SQP_"1_^1_%ADQ*_!SETCNT+2_^1_%LDA-_!1,Q_^1QLD_"LDQ_"=N0_^1_%SQM_"LOWER_-SKIP IF NO SHIFT_^1_%ARS_"8_1OTHERWISE PUT UPPER 8 BITS IN LOWER 8 B_^1LOWER AND_"=N$00FF_%MASK OFF TOP 8 BITS_^1_%QLS_"1_1RESET Q_^1_%INQ_"3_1POINT TO€N NEXT CHARACTER_^1_%JMP*_!(LBYTE)_*RETURN (A) = CHARACTER_^1_%END_"ABC955_^__NPOCR929 CSY/ P€1_%NAM OCR929_'MSOS 4 929 DRIVER 1.0_1(CYB)_^1******_"COPYRIGHT 1974 BY CONTROL DATA CORPORATION_"******_^1*_"929/1789 DOCUMENT READER DRIVER_^1*_%VERSION 1.0_!AUGUST, 1973_^1_(SPC_"1_^1*_#ENTRY POINTS, EXTERNAL SYMBOLS_^1_(SPC_"1_^1_(ENT_"OCR29I,OCR29C_"INITIATOR AND CONTINUATOR ADDRESSES_^1_%EXT_"ADEV_^1_(SPC_"4_^1*_#SPECIAL CHARACTERS_^1_(SPC_"1_^1FM1_$EQU_"FM1($5C)_(DATA FILE €€MARK_^1FM2_$EQU_"FM2($FF)_(EMITTED FILE MARK_^1REJECT_!EQU_"REJECT($40)_$REJECT CHARACTER_^1EOB_$EQU_"EOB($605B)_%END OF OMR BUFFER WORD_^1FM3_$EQU_"FM3($7F5B)_%OMR FIELD MARK WORD_^1FILL_#EQU_"FILL($5B)_'FILL CHARACTER_^1_(SPC_"4_^1*_#EQUIPMENT TABLES_^1_(SPC_"1_^1ELU_"EQU_"ELU(5)_^1EWES_#EQU_"EWES(7)_)EQUIPMENT CODE (EQTAB1)_^1EPTR_#EQU_"EPTR(6)_)POINTER TO REQUEST PARAMETERS (EQ€€TAB2)_^1EDIN_#EQU_"EDIN(1)_)INITIATOR ADDRESS (EQTAB3)_^1EDCN_#EQU_"EDCN(2)_)CONTINUATOR ADDRESS (EQTAB4)_^1EREQST_!EQU_"EREQST(8)_'REQUEST STATUS (EQTAB5)_^1ECCOR_"EQU_"ECCOR(10)_'OCR REJECT COUNT (EQTAB6)_^1ELSTWD_!EQU_"ELSTWD(11)_%STATUS WORD 2 (EQTAB7)_^1ESTAT2_!EQU_"ESTAT2(12)_%STATUS WORD 1 (EQTAB8)_^1ESTAT1_!EQU_"ESTAT1(9)_'REQUEST TYPE AND FORMAT (EQTAB9)_^1EQ5COMPL EQU_"EQ€€5COMPL($15C4) EQTAB5 (EREQST) WORD_^1EQST1 EQU_"EQST1(16)_$OCR REJECT COUNT_^1_(SPC_"4_^1*_#DIRECTOR FUNCTIONS_^1_(SPC_"1_^1D0_%EQU_"D0(1)_+DIRECTOR ZERO_^1D1_%EQU_"D1(0)_+DIRECTOR 1_^1D2_%EQU_"D2(1)_+DIRECTOR 2_^1D3_%EQU_"D3(2)_+DIRECTOR 3_^1D4_%EQU_"D4(3)_+DIRECTOR 4_^1D5_%EQU_"D5(4)_+DIRECTOR 5_^1D6_%EQU_"D6(5)_+DIRECTOR 6_^1D7_%EQU_"D7(6)_+DIRECTOR 7_^1D8_%EQU_"D8(7)_+DIRECTO€€R 8_^1D9_%EQU_"D9(8)_+DIRECTOR 9_^1STAT2DCR EQU_"STAT2DCR(1)_$STATUS 2_^1STAT3DCR EQU_"STAT3DCR(1)_$STATUS 3_^1_(SPC_"4_^1*_"OCR READ COORDINATE OFFSET_^1_(SPC_"1_^1OFFSET_!EQU_"OFFSET($D0D)_#COORDINATE DISTANCE BETWEEN HEADS_^1_(SPC_"3_^1*_#FUNCTION CODES (REQUEST BLOCK)_^1_(SPC_"1_^1RDCODE_!EQU_"RDCODE(2)_'READ A DOCUMENT REQUEST_^1INITCODE EQU_"INITCODE(1)_$READ INITIALIZE REQUE€€ST (1 OR 0)_^1REVCODE EQU_"REVCODE(6)_%REVERSE BUFFER REQUEST CODE_^1_(SPC_"4_^1*_#SYSTEMS ROUTINES ADDRESS POINTERS_^1_(SPC_"1_^1AFNR_#EQU_"AFNR($B5)_'STACK SUPERVISOR_^1ADISP EQU_"ADISP($EA)_^1ACOMP_"EQU_"ACOMP($B6)_%COMPLETION PROCESSOR_^1EBASE EQU_"EBASE(2)_^1ZERO_!EQU_"ZERO(EBASE)_^1H3_#EQU_"H3(EBASE+2)_^1H7_#EQU_"H7(EBASE+3)_^1HF_#EQU_"HF(EBASE+4)_^1H3F_"EQU_"H3F(EBASE+6)_€€^1H7F_"EQU_"H7F(EBASE+7)_^1HFF_"EQU_"HFF(EBASE+8)_^1H100_!EQU_"H100(EBASE+$29)_^1H2000 EQU_"H2000(EBASE+$2E)_^1H4000 EQU_"H4000(EBASE+$2F)_^1H7FFF EQU_"H7FFF(EBASE+$40)_^1HF000 EQU_"HF000(EBASE+$1C)_^1HFF00 EQU_"HFF00(EBASE+$18)_^1HFF80 EQU_"HFF80(EBASE+$17)_^1_(SPC_"4_^1*_#OUTPUT FUNCTIONS (A REGISTER)_^1_(SPC_"1_^1CLEARINT EQU_"CLEARINT(2)_$CLEAR INTERRUPT LINES_^1FEEDEM_!E€€QU_"FEEDEM($80)_$FEED DOCUMENTS_^1CLEARTAB EQU_"CLEARTAB(256)_"CLEAR TABLE_^1OVDISABL EQU_"OVDISABL(512)_"DISABLE POCKET OVERFLOW_^1ENABLE_!EQU_"ENABLE($18)_$ENABLE ALARM,END-OF-OP INTERRUPTS_^1READYSET EQU_"READYSET($20)_"ENABLE READY INTERRUPT ONLY_^1OVENABLE EQU_"OVENABLE(64)_#ENABLE POCKET OVERFLOW_^1RESC_#EQU_"RESC(16)_(RESCAN READ_^1READBIT EQU_"READBIT(1)_%READ DOCUMENT_^1_€€(SPC_"4_^1*_"REQUEST TABLE_^1_(SPC_"1_^1REQTABLE EQU_"REQTABLE(*)_^1_(ADC_"NORMAL-REQTABLE NORMAL READ INITIALIZE_^1_(ADC_"RESCREAD-REQTABLE REVERSE READ INITIALIZE_^1_(ADC_"READ-REQTABLE_"READ A DOCUMENT_^1_(ADC_"RESCAN-REQTABLE RESCAN DOCUMENT_^1_(ADC_"SORT-REQTABLE_"SORT DOCUMENT_^1_(ADC_"OVERFLOW-REQTABLE POCKET OVERFLOW FEATURE_^1_(ADC_"REVDATA-REQTABLE REVERSE DATA REQUEST_€€^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(ADC_"RTJIREQ-REQTABLE ILLEGAL REQUEST_^1_(SP€€C_"4_^1*_"INITIATOR_^1_(SPC_"1_^1OCR29I_!EQU_"OCR29I(*)_^1_%STQ-_!I_^1_(RTJ-_!(AFNR)_*GET NEXT REQUEST FROM QUEUE_^1_(JMP-_!(ADISP)_)(QUEUE IS EMPTY)_^1_(LDQ-_!EPTR,I_*GET USERS REQUEST BLOCK ADDRESS_^1_%STQ_"REQSAV_^1_%LDQ-_!10,Q_^1_%STQ-_!EPTR,I_^1REINIT EQU_"REINIT(*)_^1_%LDQ-_!EWES,I_(CLEAR LOST DATA , BUFFER OVERFLOW_^1_%ENA_"CLEARI_(STATUS IF THEY ARE SET_^1_%OUT_"1_^1_%NOP_"€€0_^1_%LDQ-_!EPTR,I_^1_%LDA-_!(ZERO),Q_^1_%AND-_!H100_^1_%STA_"XBIT_^1_(LDA-_!7,Q_-GET WORD 8 OF REQUEST BLOCK_^1_(STA*_!WORD5_+SAVE IT_^1_(LDA-_!4,Q_-GET REQUEST CODE_^1_(AND-_!HF_.MASK OFF REQUEST CODE_^1_(STA*_!REQCODE_)SAVE IT_^1_(LDA-_!5,Q_-GET LAST WORD OF REQUEST_^1_(STA*_!LASTWORD_(SAVE IT_^1_(RTJ*_!STATUS_*PERFORM STATUS CHECK_^1_(LDQ*_!REQCODE_)GET REQUEST CODE_^1_(ENA_"0_€€^1_(STA*_!VFIELD_*INITIALIZE COMPLETION FIELD TO ZERO_^1_(LDQ*_!REQTABLE,Q_%GET REQUEST PROCESSOR ADDRESS_^1_(JMP*_!REQTABLE,Q_%GO TO REQUEST PROCESSOR_^1_(SPC_"4_^1*_#CONTINUATOR_^1_(SPC_"1_^1OCR29C_!EQU_"OCR29C(*)_^1_(RTJ*_!STATUS_*PERFORM STATUS CHECKS_^1_(LDQ*_!(ADCDELAY)_%CONTINUE PROCESSING_^1_(LDA_"=X+DISPJUMP_$RESET DELAY POINTER_^1_(STA*_!(ADCDELAY)_^1_(JMP-_!(ZERO),Q_^1_(€€SPC_"4_^1*_#STATUS CHECKS ROUTINE_^1_(SPC_"1_^1STATUS_!EQU_"STATUS(*)_^1_(NOP_"0_^1_(LDQ-_!EWES,I_*GET STATUS_^1_(INP_"BADNEWS-*_^1_(STA*_!STAT1_+SAVE IT_^1_(STA-_!ESTAT2,I_(SAVE IN PHYS. DEV. TABLE_^1_(INQ_"STAT2DCR_(GET STATUS 2_^1_(INP_"BADNEWS-*_^1_(STA*_!STAT2_+SAVE IT_^1_(INQ_"STAT3DCR_(GET STATUS 3_^1_(INP_"BADNEWS-*_^1_(STA*_!STAT3_+SAVE IT_^1_(LDQ*_!STAT1_+EXAMINE STATUS_^€€1_(QLS_"13_.INTERRUPT?_^1_(SQP_"NOINT_+NO_^1_(ENA_"CLEARINT_(YES-- RESET INTERRUPTS_^1_(QLS_"5_/A READY INTERRUPT?_^1_(SQP_"NOFEED_*NO_^1_(ADD_"=X+FEEDEM_'YES-- FEED DOCUMENTS_^1_(LDQ-_!EWES,I_*FEED DOCUMENTS AND RESET INTERRUPTS_^1_(OUT_"BADNEWS-*_^1RETRY5_!EQU_"RETRY5(*)_^1_(LDA-_!EREQST,I_(IS THERE A REQUEST?_^1_(SAM_"REQIN_+YES-- RE-EXECUTE IT_^1_(JMP-_!(ADISP)_)NO-- RETURN VIA€€ DISPATCHER_^1REQIN_"EQU_"REQIN(*)_^1_(JMP*_!REINIT_*RESTART REQUEST_^1NOFEED_!EQU_"NOFEED(*)_^1_(LDQ-_!EWES,I_^1_(OUT_"BADNEWS-*_^1NOINT_"EQU_"NOINT(*)_^1_(LDA*_!STAT1_+CHECK STATUS_^1_(ALS_"3_/END OF FILE?_^1_(SAP_"NOFILE_*NO_^1_(LDA*_!REQCODE_)YES-- A READ REQUEST?_^1_(INA_"-RDCODE_^1_(SAN_"NOFILE_*NO_^1_%LDA-_!H2000_)SET V-FIELD TO 1_^1_(STA*_!VFIELD_^1_(JMP*_!(TERM)_*TERMINATE€€ REQUEST_^1NOFILE_!EQU_"NOFILE(*)_^1_(LDA*_!REQCODE_)READ INITIALIZE REQUEST?_^1_(INA_"-INITCODE-1_^1_(SAM_"STATOUT_)YES-- IGNORE ALL ALARMS AND NOT READY_^1_(INA_"INITCODE+1-REVCODE_^1_(SAZ_"STATOUT_)REVERSE BUFFER REQUEST, IGNORE ALARMS_^1_(LDA*_!STAT1_+GET STATUS_^1_(AND_"=N$C760_)ALARM CONDITION?_^1_(SAZ_"NOALARM_)NO_^1_(LDA*_!ERRFLAG_)ERROR ALREADY LOGGED?_^1_(SAN_"RETRY_+YES-€€- WAIT_^1_(JMP*_!ALRMSTAT_(NO-- ANALYZE ALARM CONDITION, SET E-FIE_^1NOALARM EQU_"NOALARM(*)_^1_(ENA_"0_/RESET ERROR FLAG_^1_(STA*_!ERRFLAG_^1_(LDA*_!STAT1_+GET STATUS_^1_(ALS_"15_.READY?_^1_(SAP_"RETRY_+NO-- WAIT FOR READY_^1STATOUT EQU_"STATOUT(*)_^1_(JMP*_!(STATUS)_(RETURN_^1RETRY_"EQU_"RETRY(*)_^1RETRY1_!EQU_"RETRY1(*)_^1_(ENA_"READYSET_(REQUEST READY INTERRUPT_^1_(LDQ-_!EWES€€,I_^1_(OUT_"BADNEWS-*_^1_(JMP-_!(ADISP)_)EXIT TO SYSTEM_^1ALRMSTAT EQU_"ALRMSTAT(*)_^1_(RAO*_!ERRFLAG_)(SET ERROR FLAG)_^1_(LDA*_!REQCODE_)GET REQUEST CODE_^1_(INA_"-RDCODE_)READ REQUEST?_^1_(SAN_"NORD_,NO_^1_(RTJ_"RDPROC_*YES-- STUFF STATUS IN REQUEST FOR DRAFT_^1_(LDA-_!EQST1,I_)GET REJECT COUNT_^1_(AND-_!HFF_-MASK TO 8 BITS_^1_(STA-_!6,Q_-STUFF INTO USER REQUEST BLOCK_^1NORD_#EQ€€U_"NORD(*)_^1_(LDA*_!STAT1_+GET STATUS_^1_(ENQ_"6_/INITIALIZE E-FIELD_^1_(AND_"=N$8200_)JAM,DOUBLE FEED,LOST DOCUMENT?_^1_(SAZ_"ASET3_+NO_^1_(JMP*_!ASET2_+YES_^1ASET3_"EQU_"ASET3(*)_^1_(ENQ_"1_^1_(LDA*_!STAT1_+GET STATUS_^1_(ALS_"1_/MISSORT?_^1_(SAM_"ASET2_+YES_^1_(ENQ_"7_^1_(ALS_"4_/STACKER FULL, HOPPER EMPTY, NO FEED?_^1_(SAM_"ASET2_+YES_^1_(ENQ_"3_^1_(ALS_"4_/LOST DATA?_^1_(SAM_€€"ASET2_+YES_^1_(LDA*_!STAT1_^1_(ENQ_"8_^1_(AND_"=N$C740_)LOST READY?_^1_(SAZ_"ASET2_+YES_^1_(ENQ_"4_/BUFFER OVERFLOW_^1ASET2_"EQU_"ASET2(*)_^1_%LDA-_!H4000_)SET V-FIELD TO 2_^1ASET1_"EQU_"ASET1(*)_^1_(STQ*_!EFIELD_*SET E FIELD_^1VSET1_"EQU_"VSET1(*)_^1_(STA*_!VFIELD_*SET V FIELD_^1_(JMP+_!TERMINAT_(TERMINATE REQUEST_^1TERM_#EQU_"TERM(*-1)_^1BADNEWS EQU_"BADNEWS(*)_^1_(NOP_"0_^1_%L€€DA_"=N$6000_'NO RESPONSE TO STATUS REQUEST_^1_(JMP*_!VSET1_+KILL REQUEST_^1_(SPC_"1_^1*_#MISC. STORAGE_^1_(SPC_"1_^1WORD5_"NUM_"0_/WORD 8 OF REQUEST BLOCK_^1REQCODE NUM_"0_/CRC (REQUEST) CODE_^1_(SPC_"4_^1*_"SORT TO POCKET_^1_(SPC_"1_^1SORT_#EQU_"SORT(*)_^1_(LDA*_!WORD5_+GET SORT POCKET NUMBER_^1_(TRA_"Q_/SAVE IT_^1_(INA_"-1_.LEGAL POCKET NUMBER?_^1_(SAM_"BOO_-NO_^1_(INA_"-3_.LEGA€€L POCKET NUMBER?_^1_(SAM_"SORT1_+YES_^1BOO_$EQU_"BOO(*)_^1_%ENA_"55_^1_%JMP*_!JIREQ_^1SORT1_"EQU_"SORT1(*)_^1_(LDA-_!SORTTABL,Q_%SET POCKET BIT_^1_(LDQ-_!EWES,I_^1_(INQ_"D7_^1_(OUT_"ERROR1-*_(SORT TO POCKET_^1_(JMP*_!(TERM)_*TERMINATE REQUEST_^1_(SPC_"4_^1*_#MISC. STORAGE_^1_(SPC_"1_^1LASTWORD NUM_"0_/WORD 6 OF REQUEST_^1ADCDELAY ADC_"DELAYPTR_(INTERRUPT CONTINUATION POINTER_^1VFIE€€LD_!NUM_"0_^1EFIELD_!NUM_"0_^1STAT1_"NUM_"0_^1_(SPC_"4_^1*_"SORT POCKET TABLE_^1_(SPC_"1_^1SORTTA EQU_"SORTTA(EBASE+$20)_^1_(SPC_"4_^1*_"MISC. STORAGE AND 929 STATUS_^1_(SPC_"1_^1ERRFLAG NUM_"0_^1ERROR1_!EQU_"ERROR1(*)_^1_(NOP_"0_^1_(JMP_"ERROR+1_^1STAT2_"NUM_"0_^1STAT3_"NUM_"0_^1_(SPC_"4_^1*_"READ INITIALIZE REQUEST_^1_(SPC_"1_^1NORMAL_!EQU_"NORMAL(*)_^1_(ENA_"0_/SET NORMAL BUFFE€€R FLAG_^1_(STA*_!READMODE_^1_(JMP*_!INITIAL_^1RESCREAD EQU_"RESCREAD(*)_^1_(RAO*_!READMODE_(SET REVERSE DATA FLAG_^1INITIAL EQU_"INITIAL(*)_^1_%LDQ*_!XBIT_*IS X-BIT SET_^1_%SQZ_"XNOT1_^1_%LDQ-_!EPTR,I_(GET POINTER TO STACKED REQUEST_^1_%INQ_"5_-TO WORD 6_^1XNOT1 EQU_"XNOT1(*)_^1_%ADQ*_!LASTWO_(ABSOLUTIZE WORD 6_^1_%STQ*_!TEMP1_^1_(LDA*_!WORD5_+GET TABLE LENGTH_^1_(ARS_"1_/(GET NU€€MBER OF READ AREA ENTRIES + 1)_^1_(INA_"-1_^1_(TCA_"A_/CONVERT TO A COUNT_^1_(STA*_!TEMP2_+SAVE IT_^1_(LDQ-_!EWES,I_^1_(LDA_"=X+OVDISABL+CLEARTAB+FEEDEM_^1_(OUT_"ERROR1-*_(FEED DOCUMENTS, RESET TABLE, RESET OVER_^1_(INQ_"D2_.SEND OUT OCR ADDRESS_^1_%RTJ*_!RIABS_)ABSOLUTIZE OCR BUFFER FWA_^1_(RAO*_!TEMP1_^1_(STA*_!FLAG1_+SAVE IT_^1_(SAZ_"OCRNOBUF_(OCR BUFFER NOT PRESENT_^1_(OUT_"ERR€€OR1-*_(SEND TO CONTROLLER_^1OCRNOBUF EQU_"OCRNOBUF(*)_^1_(INQ_"D9-D2_^1_%RTJ*_!RIABS_)ABSOLUTIZE OMR BUFFER FWA_^1_(STA*_!FLAG2_+SAVE IT_^1_(RAO*_!TEMP1_^1_(SAZ_"OMRNOBUF_(OMR BUFFER NOT PRESENT_^1_(OUT_"ERROR1-*_^1OMRNOBUF EQU_"OMRNOBUF(*)_^1_%RTJ*_!RIABS_)ABSOLUTIZE RESCAN BUFFER FWA_^1_(INQ_"D3-D9_^1_(RAO*_!TEMP1_^1_(SAZ_"NORESCAN_(NO RESCAN BUFFER_^1_(OUT_"ERROR1-*_^1NORESCAN E€€QU_"NORESCAN(*)_^1_(STA*_!FLAG3_+SAVE RESCAN BUFFER FWA_^1_(LDA*_!(TEMP1)_)GET BUFFER SIZES_^1_(LDQ*_!FLAG1_+ANY OCR BUFFER?_^1_(SQN_"OCRNO_+YES_^1_(AND-_!HFF00_+NO-- ZERO BUFFER LENGTH_^1OCRNO_"EQU_"OCRNO(*)_^1_(LDQ*_!FLAG2_+ANY OMR BUFFER?_^1_(SQN_"OMRNO_+YES_^1_(AND-_!HFF_-NO-- ZERO BUFFER LENGTH_^1OMRNO_"EQU_"OMRNO(*)_^1_(LDQ-_!EWES,I_^1_(INQ_"D4_.SEND TO BUFFER_^1_(OUT_"ERROR1€€-*_^1SENDLOOP EQU_"SENDLOOP(*)_^1_(RAO*_!TEMP2_+FINISHED?_^1_(LDA*_!TEMP2_+FINISHED?_^1_(SAM_"TEMP22_*NO_^1_(JMP*_!(TERM)_*YES_^1TEMP22_!EQU_"TEMP22(*)_^1_(RAO*_!TEMP1_+GET NEXT TABLE ENTRY_^1_(LDA*_!(TEMP1)_)GET TABLE ENTRY_^1_(TRA_"Q_/END OF TABLE?_^1_(TCQ_"Q_^1_(SQN_"NOTEND_*NO-- CONTINUE_^1_(JMP*_!(TERM)_*YES-- GO TO COMPLETION_^1NOTEND_!EQU_"NOTEND(*)_^1_(AND-_!HFF_-GET FONT_^€€1_(INA_"-$10_,OCR ENTRY?_^1_(SAP_"OCRENTRY_(YES_^1_(LDQ*_!FLAG2_+ANY OMR BUFFER?_^1_(SQN_"REQOK_+YES_^1_%ENA_"52_,NO--ERROR_^1JIREQ JMP*_!IREQ_^1REQOK_"EQU_"REQOK(*)_^1_(LDA*_!(TEMP1)_)GET TABLE ENTRY_^1_(LDQ-_!EWES,I_^1_(INQ_"D5_^1_(OUT_"ERROR1-*_^1_(RAO*_!TEMP1_^1_(LDA*_!(TEMP1)_^1_(OUT_"ERROR1-*_^1_(JMP*_!SENDLOOP_(NEXT TABLE ENTRY_^1OCRENTRY EQU_"OCRENTRY(*)_^1_(LDA*_!FLAG1_+A€€NY OCR BUFFER?_^1_(SAN_"OKREQ_+YES_^1BADREQ_!EQU_"BADREQ(*)_^1_%ENA_"51_,NO BUFFER--ERROR_^1_%JMP*_!IREQ_^1OKREQ_"EQU_"OKREQ(*)_^1_(LDA*_!(TEMP1)_)GET TABLE ENTRY_^1_(LDQ-_!EWES,I_*SEND TABLE ENTRY_^1_(INQ_"-D0_-TO CONTROLLER_^1_(OUT_"ERROR1-*_^1_(RAO*_!TEMP1_^1_(LDA*_!(TEMP1)_^1_(ADD_"=X+OFFSET_'ADD OCR OFFSET OF 3/4 INCH_^1_(OUT_"ERROR1-*_^1_(JMP*_!SENDLOOP_(NEXT TABLE ENTRY_^1_%€€SPC_"4_^1RIABS NOP_"0_^1_%LDA*_!(TEMP1)_'GET BUFFER ADDRESS_^1_%SAZ_"NOABS_)NO BUFFER_^1_%LDA*_!XBIT_*IS X-BIT SET IN REQUEST_^1_%SAZ_"XNOT2_)NO--DON'T ABSOLUTIZE_^1_%LDA*_!TEMP1_^1XNOT2 ADD*_!(TEMP1)_^1NOABS JMP*_!(RIABS)_^1XBIT_!NUM_"0_^1_(SPC_"4_^1*_#MISC. STORAGE_^1_(SPC_"1_^1TEMP1_"NUM_"0_^1TEMP2_"NUM_"0_^1EREF_#NUM_"0_^1MREF_#NUM_"0_^1ETAB_#EQU_"ETAB(*-1)_^1_(NUM_"5,2,0_^1€€READMO NUM_"0_-REVERSE DATA FLAG_^1FLAG1_"NUM_"0_^1FLAG2_"NUM_"0_^1FLAG3_"NUM_"0_^1_(SPC_"4_^1*_"READ A DOCUMENT_^1_(SPC_"1_^1READ_#EQU_"READ(*)_^1_(ENA_"0_/INITIALIZE E-FIELD FLAGS_^1_(STA*_!EREF_^1_(STA*_!MREF_^1_(LDQ-_!EWES,I_*BE CERTAIN DOCUMENTS HAVE BEEN FED_^1_(LDA_"=X+FEEDEM_^1_(OUT_"1_/(FEED DOCUMENTS IF NECESSARY)_^1_(NOP_"0_/(ALLOW FOR INTERNAL REJECT)_^1_(LDA*_!(WD5)_+G€€ET Q-LEVEL_^1_(ARS_"12_^1_(TRA_"Q_^1_(INA_"-4_.LEGAL Q LEVEL?_^1_(SAM_"LEGALQ_*YES_^1_(JMP*_!BADQ_,NO-- ABORT REQUEST_^1LEGALQ_!EQU_"LEGALQ(*)_^1_(LDA*_!QTABLE,Q_(GET Q LEVEL BIT_^1_(INA_"READBIT_)SET READ BIT_^1_(LDQ-_!EWES,I_*READ A DOCUMENT_^1_(INQ_"D6_^1_(OUT_"ERROR-*_^1_%RTJ_"DELAY_)WAIT FOR I/O COMPLETION_^1_(RTJ*_!RDPROC_*GET STATUSES, SET UP PHYSTAB, ETC._^1_%LDA*_!READMODE€€_%IS REVERSE DATA SET ?_^1_%SAZ_"RESCCOMP_%NO, CONTINUE_^1_%LDQ*_!FLAG1_)PICK UP OCR ADDRESS_^1_%RTJ*_!(ADCREV)_%GO REVERSE BUFFERS_^1RESCCOMP EQU_"RESCCOMP(*)_^1_(LDA-_!EQST1,I_)GET REJECT COUNT_^1_(SAZ_"NOOCR_+NO OCR REJECTS_^1_(RAO*_!EREF_,SET OCR ERROR FLAG_^1_(RAO*_!EREF_^1NOOCR_"EQU_"NOOCR(*)_^1_(AND-_!HFF_^1_(LDQ-_!EPTR,I_*PLACE REJECT COUNT IN REQUEST BLOCK_^1_(STA-_!6,Q_^1€€_(LDA*_!(ADCST1)_(ANY OMR REJECTS?_^1_(ALS_"4_^1_(SAP_"NOOMR_+NO_^1_(RAO*_!EREF_,SET OMR ERROR FLAGS_^1_(RAO*_!MREF_,(REMEMBER OMR ERROR)_^1NOOMR_"EQU_"NOOMR(*)_^1_(LDQ*_!EREF_,GET ERROR FLAG_^1_(SQZ_"NOERRORS_(NO ERRORS_^1_(LDQ*_!ETAB,Q_*GET E-FIELD CODE_^1_(JMP_"ASET2_+ERROR RETURN FROM DRIVER_^1NOERRORS EQU_"NOERRORS(*)_^1_(JMP*_!TERMINAT_(FINISHED_^1_(SPC_"4_^1IREQ_!EQU_"IREQ(*€€)_^1_%LDQ*_!REQSAV_^1_%STQ-_!EPTR,I_^1_%STA*_!CODSAV_(SAVE ERROR CODE_^1_%LDQ-_!EWES,I_(CLEAR INTERRUPTS BEFORE GETTING OUT_^1_%ENA_"2_^1_%OUT_"1_^1_%NOP_"0_^1_%LDA-_!EREQST,I_^1_%EOR-_!H4000_)SET ERROR BIT_^1_%STA-_!EREQST,I_^1_%LDQ-_!ELU,I_^1_%QLS_"6_^1_%LDA*_!CODSAV_^1_%EAQ_"Q_^1_%JMP_"ADEV_^1CODSAV NUM_"0_^1*_"MISC. STORAGE_^1_(SPC_"1_^1WORD6_"ADC_"LASTWORD_^1WD5_$ADC_"WORD5_^1€€_(SPC_"4_^1*_"Q-LEVEL TABLE_^1_(SPC_"1_^1QTABLE_!EQU_"QTABLE(*)_^1_(NUM_"0,2,4,8_^1REQSAV NUM_"0_^1_(SPC_"4_^1*_#READ REQUEST PROCESSING_^1_(SPC_"1_^1RDPROC_!NOP_"0_^1_(LDA_"STAT3_+GET NUMBER OF REJECTS_^1_(ARS_"8_^1_(AND-_!HFF_^1_(SAZ_"RESCNONE_(NO REJECTS_^1_(TCA_"A_/COMPLEMENT_^1RESCNONE EQU_"RESCNONE(*)_^1_(STA-_!EQST1,I_^1_(LDA+_!STAT2_+GET LENGTH OF OMR READ_^1ADC2STAT EQU_"A€€DC2STAT(*-1)_^1_(STA-_!ECCOR,I_)SAVE FOR STATUS REQUEST_^1_(AND-_!HFF_^1_(STA*_!OMRLEN_*SAVE IT_^1_(LDA*_!(ADCST3)_(GET LENGTH_^1_(AND-_!HFF_-OF READ_^1_(STA*_!LENGTH_*SAVE IT_^1_(LDQ-_!EPTR,I_^1_(STA-_!5,Q_^1_(LDA-_!7,Q_-GET LAST WORD OF REQUEST_^1_(AND-_!HF000_+ISOLATE Q-LEVEL_^1_(ADD*_!(ADC2STAT)_%ADD OMR LENGTH AND PANEL Q-LEVEL_^1_(STA-_!7,Q_-REPLACE BACK IN REQUEST_^1_(JMP*_!€€(RDPROC)_(RETURN_^1_(SPC_"4_^1*_#RESCAN DOCUMENT_^1_(SPC_"1_^1RESCAN_!EQU_"RESCAN(*)_^1_(LDA*_!MREF_,SET OMR ERROR FLAG IF ANY_^1_(STA*_!EREF_^1_(LDA*_!FLAG3_+ANY RESCAN BUFFER?_^1_(SAN_"RESCOK_*YES_^1_%ENA_"53_,NO RESCAN BUFFER_^1_%JMP*_!IREQ_*SET ERROR CODE AND KILL REQUEST_^1RESCOK_!EQU_"RESCOK(*)_^1RESC2_"EQU_"RESC2(*)_^1_(LDA-_!EQST1,I_)ANY REJECTS?_^1_(SAM_"RESC1_+YES_^1_(JMP€€*_!RESCCOMP_(NO-- FINISH UP_^1RESC1_"EQU_"RESC1(*)_^1_(LDA*_!(WD5)_+GET Q-LEVELS_^1_(STA*_!QLEVEL_*SAVE IT_^1RSLOOP_!EQU_"RSLOOP(*)_^1_(LDA*_!QLEVEL_*GET NEXT Q-LEVEL_^1_(ENQ_"0_^1_(LLS_"4_^1_(EOR-_!HF_^1_(STA*_!QLEVEL_^1_(TRQ_"A_/SAVE Q-LEVEL_^1_(INQ_"-15_-FINISHED?_^1_(SQN_"RSGO_,NO_^1_(JMP*_!RESCCOMP_(YES_^1RSGO_#EQU_"RSGO(*)_^1_(TRA_"Q_^1_(INA_"-4_.LEGAL Q?_^1_(SAP_"BADQ_,NO_^1€€_(LDA*_!QTABLE,Q_(SET Q-LEVEL BIT_^1_(INA_"RESC_,SET RESCAN BIT_^1_(LDQ-_!EWES,I_^1_(INQ_"D6_^1_(OUT_"ERROR-*_)RESCAN DOCUMENT_^1_(RTJ*_!DELAY_+WAIT FOR END OF OP_^1_(LDA*_!READMODE_(REVERSE DATA?_^1_(SAZ_"NOREV_+NO_^1_(LDQ*_!FLAG3_+YES-- GET RESCAN BUFFER ADDRESS_^1_(RTJ*_!(ADCREV)_(REVERSE DATA IN BUFFERS_^1NOREV_"EQU_"NOREV(*)_^1_(RTJ*_!REPLACE_)REPLACE REJECTS_^1_(JMP*_!RSLOOP_€€*NEXT RESCAN_^1_(JMP*_!RESCCOMP_(COMPLETE REQUEST PROCESSING_^1BADQ_#EQU_"BADQ(*)_^1_%ENA_"54_,BAD Q LEVEL_^1_%JMP*_!IREQ_*SET ERROR CODE AND KILL REQUEST_^1_(SPC_"4_^1*_#ERROR ROUTINE_^1_(SPC_"1_^1ERROR_"EQU_"ERROR(*)_^1_(NOP_"0_/DUMMY FOR INTERNAL REJECT_^1_(RTJ_"STATUS_*LOOK AT DEVICE STATUS_^1_(JMP*_!(ADCRETRY)_%NO ALARMS-- TRY AGAIN_^1ADCREV ADC_"REVERS_^1_(SPC_"4_^1*_#TERMINA€€TE REQUEST_^1_(SPC_"1_^1TERMINAT EQU_"TERMINAT(*)_^1_(ENA_"READYSET_(ENABLE READY INTERRUPT_^1_(LDQ-_!EWES,I_*AT ALL TIMES_^1_(OUT_"1_^1_(NOP_"0_^1_(LDQ-_!EPTR,I_*GET WORD 5 OF REQUEST BLOCK_^1_(LDA-_!4,Q_^1_(AND-_!HF_.SAVE CRC CODE_^1_(LDQ_"EFIELD_*GET ERROR FIELD_^1_(QLS_"4_/PLACE IN BITS 4-7_^1_(AAQ_"A_/ADD TO WORD 5_^1_(LDQ-_!EPTR,I_*COMBINE WITH WORD 5_^1_(STA-_!4,Q_-STORE IN €€REQUEST BLOCK_^1_%LDQ*_!REQSAV_^1_%STQ-_!EPTR,I_^1_(LDA_"VFIELD_*GET V FIELD_^1SETVFLD EQU_"SETVFLD(*)_^1_%STA-_!ESTAT1,I_^1_(RTJ-_!(ACOMP)_^1_%JMP_"OCR29I+1_^1_(SPC_"4_^1*_#MISC. STORAGE_^1_(SPC_"1_^1QLEVEL_!NUM_"0_^1TEMP5_"NUM_"0_^1ADCST1_!ADC_"STAT1_^1ADCRETRY ADC_"RETRY5_^1OMRLEN_!NUM_"0_^1ADCST3_!ADC_"STAT3_^1_(SPC_"4_^1*_"WAIT FOR I/O COMPLETION_^1_(SPC_"1_^1DELAY_"EQU_"DELA€€Y(*)_^1DELAYPTR ADC_"DISPJUMP_^1_(LDQ-_!EWES,I_*ENABLE ALL INTERRUPTS_^1_(ENA_"ENABLE_^1_(OUT_"ERROR-*_^1DISPJUMP EQU_"DISPJUMP(*)_^1_(JMP-_!(ADISP)_^1_%SPC_"2_^1*ILLEGAL REQUEST ROUTINE_^1_%SPC_"1_^1RTJIRE EQU_"RTJIRE(*)_^1_%ENA_"56_,ILLEGAL REQUEST ERROR CODE_^1_%JMP*_!IREQ_*KILL REQUEST_^1_(SPC_"4_^1*_#POCKET OVERFLOW FEATURE_^1_(SPC_"1_^1OVERFLOW EQU_"OVERFLOW(*)_^1_(LDQ-_!EWES€€,I_*SET Q_^1_(LDA*_!(WD5)_+ENABLE OR DISABLE?_^1_(SAZ_"OVDIS_+DISABLE_^1_(ENA_"OVENABLE_(ENABLE_^1_(JMP*_!OVOUT_^1OVDIS_"EQU_"OVDIS(*)_^1_(LDA*_!OVDISCON_^1OVOUT_"EQU_"OVOUT(*)_^1_(OUT_"ERROR-*_)ENABLE/DISABLE POCKET OVERFLOW_^1_(JMP*_!TERMINAT_^1_(SPC_"2_^1*_#MISC. STORAGE_^1_(SPC_"1_^1LENGTH_!NUM_"0_^1OVDISCON ADC_"OVDISABL_^1_(SPC_"4_^1*_"REPLACE REJECTS IN OCR BUFFER (BUFFER BU€€ILD)_^1_(SPC_"1_^1REPLACE EQU_"REPLACE(*)_^1_(NOP_"0_^1_(LDA*_!(ADCST3)_(GET RESCAN BUFFER LENGTH_^1_(AND-_!HFF_^1_(TRA_"Q_/(SAVE BUFFER LENGTH)_^1_(SUB*_!LENGTH_*EQUAL TO READ BUFFER LENGTH?_^1_(SAN_"R0_.NO-- RETURN_^1_(INQ_"-1_.FIND END OF BUFFERS_^1_(LDA_"(FLAG3),Q_'GET LAST RESCAN CHARACTER_^1_(AND-_!HFF_^1_(INA_"-FILL_+A FILL CHARACTER?_^1_(SAZ_"RSCFILL_)YES_^1_(LDA_"(FLAG1),€€Q_'LOOK AT LAST OCR CHARACTER_^1_(AND-_!HFF_-LOOK AT LAST OCR CHARACTER_^1_(INA_"-FILL_+A FILL CHARACTER?_^1_(SAN_"SAMELEN_)NO, GOOD_^1R0_%EQU_"R0(*)_^1_(JMP*_!ROUT0_+YES, DIFFERENT BUFFER LENGTHS_^1RSCFILL EQU_"RSCFILL(*)_^1_(LDA_"(FLAG1),Q_'GET LAST OCR CHARACTER_^1_(AND-_!HFF_^1_(INA_"-FILL_+A FILL CHARACTER?_^1_(SAZ_"SAMELEN_)YES, GOOD_^1_(JMP*_!ROUT0_+NO, BUFFERS NOT SAME LEN€€GTH_^1SAMELEN EQU_"SAMELEN(*)_^1_(CLR_"A_/RESET CHARACTER SUBSTITUTION FLAG_^1_(STA*_!CHARSUBS_^1_(LDA_"FLAG3_+GET RESCAN BUFFER ADDRESS_^1_(ALS_"1_/(BYTE ADDRESS)_^1_(STA*_!TEMP4_+SAVE IT_^1_(LDA_"FLAG1_+GET READ BUFFER ADDRESS_^1_(ALS_"1_/(BYTE ADDRESS)_^1_(STA*_!TEMP3_+SAVE IT_^1_(LDA*_!LENGTH_*GET BUFFER LENGTH_^1_(ALS_"1_/(BYTE LENGTH)_^1_(TCA_"A_/SET UP COUNTER_^1_(STA*_!TEM€€P6_+SAVE IT_^1R1_%EQU_"R1(*)_^1_(LDQ*_!TEMP4_+GET RESCAN CHARACTER_^1_(RTJ*_!GETCHAR_^1_(RAO*_!TEMP4_+INCR. BUFFER ADDRESS_^1_(STA*_!TEMP7_+SAVE CHARACTER_^1_(INA_"-REJECT_)A REJECT?_^1_(SAN_"R4_.NO_^1R2_%EQU_"R2(*)_^1_(RAO*_!TEMP3_+INCR. READ BUFFER ADDRESS_^1_(RAO*_!TEMP6_+INCR. COUNTER_^1_(LDA*_!TEMP6_+FINISHED?_^1_(SAM_"R3_.NO_^1_(LDA*_!CHARSUBS_(ANY CHARACTER SUBSTITUTIONS?_^1€€_(SAZ_"NOSUBS_*NO_^1_(JMP*_!ROUT1_+YES-- DO NOT RESCAN ANY MORE_^1NOSUBS_!EQU_"NOSUBS(*)_^1_(JMP*_!ROUT0_+FINISHED_^1R3_%EQU_"R3(*)_^1_(JMP*_!R1_^1R4_%EQU_"R4(*)_^1_(LDQ*_!TEMP3_+GET READ CHARACTER_^1_(RTJ*_!GETCHAR_^1_(STA*_!TEMP8_+SAVE IT_^1_(INA_"-REJECT_)A REJECT?_^1_(SAN_"R5_.NO_^1_(LDA*_!TEMP7_+YES_^1_(LDQ*_!TEMP3_+SUBSTITUTE RESCAN CHARACTER_^1_(RTJ*_!PUTCHAR_^1_(RAO-_!EQST1€€,I_)DECREMENT REJECT COUNT_^1_(LDA-_!EQST1,I_)FINISHED?_^1_(SAM_"R6_.NO_^1_(JMP*_!ROUT1_+YES_^1R5_%EQU_"R5(*)_^1_(LDA*_!TEMP8_+ARE READ AND RESCAN CHARACTERS EQUAL?_^1_(SUB*_!TEMP7_^1_(SAN_"R7_.NO_^1R6_%EQU_"R6(*)_^1_(JMP*_!R2_^1R7_%EQU_"R7(*)_^1_(ENA_"REJECT_*SUBSTITUTION_^1_(LDQ*_!TEMP3_+REPLACE WITH REJECT_^1_(RTJ*_!PUTCHAR_^1_(LDA-_!EQST1,I_)ADD 1 TO REJECT COUNT_^1_(INA_"-1_^1€€_(STA-_!EQST1,I_^1_(RAO*_!CHARSUBS_(SET CHARACTER SUBSTITUTIONS FLAG_^1_(JMP*_!R2_.CONTINUE CHECKING BUFFER_^1ROUT1_"EQU_"ROUT1(*)_^1_(RAO*_!REPLACE_)FINISHED EXIT_^1ROUT0_"EQU_"ROUT0(*)_(NOT FINISHED EXIT_^1_(JMP*_!(REPLACE)_'RETURN_^1_(SPC_"4_^1*_#REVERSE DATA IN MARK READ BUFFER_^1*_$ADDRESS OF BUFFER INPUT IN Q_^1_(SPC_"1_^1MRREVERS EQU_"MRREVERS(*)_^1_(NOP_"0_^1_(LDA*_!OMRLEN_€€*GET OMR BUFFER LENGTH_^1_(SAZ_"MROUT_+YES-- NO BUFFER_^1_(INA_"-1_.ALLOW FOR EOB CHARACTER_^1_(SAN_"MR0_-NO_^1MROUT_"EQU_"MROUT(*)_^1_(JMP*_!(MRREVERS)_%YES-- RETURN_^1MR0_$EQU_"MR0(*)_^1_(STQ*_!TEMP3_+SAVE BUFFER ADDRESS_^1_(INQ_"-1_.GET LAST BUFFER ADDRESS_^1_(AAQ_"Q_^1_(STQ*_!TEMP4_+SAVE IT_^1MRBUFFER EQU_"MRBUFFER(*)_^1_(ARS_"1_/SET UP COUNTER_^1_(SAZ_"MRFMS_+(1 WORD BUFFER, D€€O NOT REVERS)_^1_(TCA_"A_/COMPLEMENT IT_^1_(STA*_!TEMP7_+SAVE IT_^1MRCONVRT EQU_"MRCONVRT(*)_^1_(LDA*_!(TEMP3)_)REVERSE BUFFER_^1_(LDQ*_!(TEMP4)_^1_(STA*_!(TEMP4)_^1_(STQ*_!(TEMP3)_^1_(RAO*_!TEMP7_+THRU?_^1_(LDA*_!TEMP7_^1_(SAP_"MRFMS_+YES_^1_(RAO*_!TEMP3_+ADJUST ADDRESSES_^1_(LDA*_!TEMP4_^1_(INA_"-1_^1_(STA*_!TEMP4_^1_(JMP*_!MRCONVRT_(CONTINUE_^1MRFMS_"EQU_"MRFMS(*)_^1_(JMP*_!(MRR€€EVERS)_%YES--RETURN_^1_(SPC_"4_^1*_"MISC. STORAGE_^1_(SPC_"1_^1CHARSUBS NUM_"0_^1TEMP3_"NUM_"0_^1TEMP4_"NUM_"0_^1TEMP6_"NUM_"0_^1TEMP7_"NUM_"0_^1TEMP8_"NUM_"0_^1_(SPC_"4_^1*_"GET A CHARACTER_^1*_#BYTE ADDRESS IN Q_^1*_#CHARACTER RETURNED IN A_^1_(SPC_"1_^1GETCHAR EQU_"GETCHAR(*)_^1_(NOP_"0_^1_%LRS_"1_-PUT CHAR IND. IN BIT 15 OF A_^1_%STA* TEMP81_N04/28/7_^1_%TRQ A_S04/28/7_^1_%AN€€D- H7FFF_O04/28/7_^1_%TRA Q_S04/28/7_^1_%LDA* TEMP81_N04/28/7_^1_%LDQ-_!(ZERO),Q_%PICK UP A WORD_^1_%SAM_"GCNOSHFT_%BOTTOM CHAR. WANTED_^1_%QRS_"8_-UPPER CHAR. WANTED_^1GCNOSHFT EQU_"GCNOSHFT(*)_^1_%TRQ_"A_-PUT WORD IN A_^1_(AND-_!HFF_-MASK OFF CHARACTER_^1_(JMP*_!(GETCHAR)_'RETURN_^1TEMP81 NUM 0_S04/28/7_^1_(SPC_"4_^1*_"STORE A CHARACTER_^1*_#BYTE ADDRESS IN Q_^1*_#CHARACTER IN €€A_^1_(SPC_"1_^1PUTCHAR EQU_"PUTCHAR(*)_^1_(NOP_"0_^1_(QLS_"15_.GET WORD ADDRESS_^1_(SQM_"PCNOSHFT_(LOWER BYTE_^1_(ALS_"8_^1PCNOSHFT EQU_"PCNOSHFT(*)_^1_(STA*_!TEMP9_+SAVE CHARACTER_^1_%SQM_"PUT1_N04/22/7_^1_(LDA-_!(ZERO),Q_(GET WORD TO STORE INTO_^1_(SQP_"PCLOWER_^1PUT0_!AND-_!HFF00_+KEEP LOWER BYTE_204/22/7_^1_(JMP*_!PCADD_^1PCLOWER EQU_"PCLOWER(*)_^1_(AND-_!HFF_-KEEP LOWER BYTE€€_^1PCADD_"EQU_"PCADD(*)_^1_(EOR*_!TEMP9_+ASSEMBLE WORD_^1_(STA-_!(ZERO),Q_(REPLACE WORD IN BUFFER_^1_(JMP*_!(PUTCHAR)_'RETURN_^1PUT1_!TRQ_"A_Q04/22/7_^1_%AND-_!H7FFF_+STRIP BIT 15 OF Q_004/22/7_^1_%TRA_"Q_Q04/22/7_^1_%LDA-_!(ZERO),Q_(GET WORD TO STORE INTO_+04/22/7_^1_%JMP*_!PUT0_N04/22/7_^1_(SPC_"4_^1*_#MISC. STORAGE_^1_(SPC_"1_^1TEMP9_"NUM_"0_^1_(SPC_"4_^1*_"REVERSE OCR DATA IN B€€UFFER_^1*_#BUFFER BYTE ADDRESS IN Q_^1_(SPC_"1_^1OCREVERS EQU_"OCREVERS(*)_^1_(NOP_"0_^1_(LDA_"LENGTH_*GET LENGTH OF READ_^1_(AND-_!HFF_^1_(SAN_"OR1_-NON-ZERO_^1_(JMP*_!(OCREVERS)_%ZERO LENGTH BUFFER-- RETURN_^1OR1_$EQU_"OR1(*)_^1_(ALS_"1_/CONVERT TO BYTE LENGTH_^1_(STQ*_!TEMP3_+SAVE BUFFER ADDRESS_^1_(INQ_"-1_.GET BUFFER LAST BYTE ADDRESS_^1_(AAQ_"Q_^1_(STQ*_!TEMP4_+SAVE IT_^1_(AR€€S_"1_^1_(TCA_"A_^1_(STA*_!TEMP7_^1_(LDQ*_!TEMP4_+GET LAST BYTE OF BUFFER_^1_(RTJ*_!GETCHAR_^1_(INA_"-FILL_+FILL CHARACTER?_^1_(SAN_"ORNOFILL_(NO_^1_(LDA*_!TEMP4_+ADJUST LAST BUFFER ADDRESS_^1_(INA_"-1_^1_(STA*_!TEMP4_^1_(RAO*_!TEMP7_+ADJUST REVERSAL COUNTER_^1ORNOFILL EQU_"ORNOFILL(*)_^1_(LDQ*_!TEMP3_+REVERSE DATA_^1_(RTJ*_!GETCHAR_^1_(STA*_!TEMP10_^1_(LDQ*_!TEMP4_^1_(RTJ*_!GETCHAR€€_^1_(LDQ*_!TEMP3_^1_(RTJ*_!PUTCHAR_^1_(LDA*_!TEMP10_^1_(LDQ*_!TEMP4_^1_(RTJ*_!PUTCHAR_^1_(RAO*_!TEMP7_+FINISHED?_^1_(LDA*_!TEMP7_^1_(SAP_"ORFMS_+YES_^1_(RAO*_!TEMP3_+ADJUST ADDRESSES_^1_(LDA*_!TEMP4_^1_(INA_"-1_^1_(STA*_!TEMP4_^1_(JMP*_!ORNOFILL_(CONTINUE_^1ORFMS_"EQU_"ORFMS(*)_^1_(JMP*_!(OCREVERS)_%FINISHED_^1_(SPC_"4_^1*_"REVERSE DATA IN BOTH BUFFERS_^1*_#BUFFER WORD ADDRESS FOR €€OCR DATA IN Q_^1_(SPC_"1_^1REVERSE EQU_"REVERSE(*)_^1_(NOP_"0_^1_(SQZ_"RNO1_,NO BUFFER_^1_(QLS_"1_/CONVERT ADDRESS TO BYTE ADDRESS_^1_(RTJ*_!OCREVERS_(REVERSE OCR DATA_^1RNO1_#EQU_"RNO1(*)_^1_(LDQ_"FLAG2_+GET MARK READ BUFFER ADDRESS_^1_(SQZ_"RNO2_,NO BUFFER_^1_(RTJ*_!(MRREV)_)REVERSE OMR DATA_^1RNO2_#EQU_"RNO2(*)_^1_(JMP*_!(REVERSE)_'FINISHED_^1_(SPC_"4_^1*_#MISC. STORAGE_^1_(SPC€€_"1_^1TEMP10_!NUM_"0_^1MRREV_"ADC_"MRREVERS_^1_(SPC_"4_^1*_#REVERSE DATA REQUEST_^1_(SPC_"1_^1REVDAT EQU_"REVDAT(*)_^1_%LDQ_"XBIT_*IS X-BIT SET IN REQUEST_^1_%SQZ_"XNOT3_)NO_^1_%LDQ-_!EPTR,I_(GET POINTER TO STACKED REQUEST_^1_%INQ_"7_-TO WORD 8_^1_%LDA*_!(AWORD5) ABSOLUTIZE OCR BUFFER FWA_^1_%SAZ_"NOABS1_^1_%AAQ_"A_^1_%STA*_!(AWORD5)_^1NOABS1 INQ_"-2_,POINT TO WORD 6_^1_%LDA*_!(ALS€€TWD)_%ABSOLUTIZE OMR BUFFER FWA_^1_%SAZ_"1_^1_%AAQ_"A_^1_%STA*_!(ALSTWD)_^1XNOT3 LDQ*_!(AWORD5)_%GET OCR BUFFER ADDRESS_^1_(SQZ_"RDNO1_+NO BUFFER_^1_(QLS_"1_/CONVERT TO BYTE ADDRESS_^1_(RTJ*_!OCREVERS_(REVERSE DATA_^1RDNO1 EQU_"RDNO1(*)_^1_%LDQ*_!(ALSTWD)_%GET OMR BUFFER ADDRESS_^1_(SQZ_"RDNO2_+NO OMR DATA_^1_(RTJ*_!(MRREV)_)REVERSE OMR DATA_^1RDNO2_"EQU_"RDNO2(*)_^1_%JMP_"TERMIN€r_(RETURM TO USER_^1AWORD5 ADC_"WORD5_^1ALSTWD ADC_"LASTWO_^1_(JMP_"TERMINAT_(RETURN TO USER_^1_(SPC_"2_^1_(END_^__rPOLC915 CSY/ P€1_%NAM OLC915_'MSOS 4 915 OLCC MODULE 2.0 10/30/74_^1_%ENT_"OLC915_^1_%ENT_"ZMENT,DATENT,EOPENT_^1_%ENT_"OLCAD2_^1_%EXT_"RQAQ,RLAQ_^1_%EXT_"REJ_^1**************************************************************_^1OLC915 NOP_"0_8ENTRY_^1_%LDA-_!MODSAV,I_*IS OLCC SET IN MODE_^1_%AND-_!H20_^1_%SAN_"OLCREJ_^1OLCEX JMP*_!(OLC915)_2EXIT-NO REJECT_^1OLCREJ LDA-_!CHRSAV,I_%GET REJECT COUNT€€_^1_%SUB-_!REJCNT,I_^1_%STA-_!REJCNT,I_"SET (NO CORRECT) FLAG NEGATIVE_^1OLC1_!LDA-_!BF1SAV,I_%LOAD FWA OF USER BUFFER_^1_%STA-_!FWA,I_-AND SAVE_^1_%LDA-_!BF2SAV,I_^1_%STA-_!FWA2,I_-SAVE BUFFER2 ADDRESS_^1OLC2_!LDA-_!FWA,I_"ARE WE DONE CHECKING REJECTS_^1_%SUB-_!ECCOR,I_^1_%SAN_"OLC2B_(NO-SKIP_^1_%JMP*_!OLCEX1_%YES-EXIT_^1OLC2B LDQ-_!FWA,I_!STATT CHECKING FOR REJECTS_^1_%LDA-_!(BA€€SE),Q_^1_%AND-_!H007F_^1_%INA_"-$40_^1_%SAN_"OLC2A_1NOT REJECT - SKIP_^1_%LDQ-_!REJCNT,I_-SHOULD WE PROCESS REJECTS_^1_%SQP_"OLC5A_1YES - SKIP_^1OLC2A INA_"$40_#RESTORE CHARACTER_^1_%LDQ-_!FWA2,I_(STORE CHAR IN BUFF 2_^1_%STA-_!(BASE),Q_^1_%RAO-_!FWA2,I_,INCREMENT BUFF 2 ADDRS._^1OLC3_!RAO-_!FWA,I_*INCREMENT BUFFER ADDRESS_^1OLC4_!JMP*_!OLC2_7GO-BACK_^1OLC5A LDA-_!FWA,I IS REJ O€€N FIRST CHAR_^1_%SUB-_!BF1SAV,I_^1_%SAN_"OLC6_/NO-SKIP_^1_%LDA-_!OC1WD5,I_#GET INIT. COORD_^1_%AND-_!H00FF_^1_%JMP*_!OLC7+1_^1OLC6_!LDQ-_!FWA,I_$LOAD WORD BEFORE REJECT_^1_%INQ_"-1_-TO GET COORDINATE_^1_%LDA-_!(BASE),Q_^1_%ARS_"8_^1_%AND-_!H00FF_-GET REJECT COORD. AND DECREASE BY 2_^1OLC7_!INA_"-1_#DECREASE COORDINATE BY 1_^1_%STA-_!DISC1,I_+SAVE INITIAL DISPLAY COORD._^1_%INA_"15_€€"INCREASE BY 15 FOR TERMINATING COORD._^1_%LDQ-_!OC1WD5,I_-GET INIT COORD_^1_%QLS_"8_5MERGE WITH OLCC_^1_%LLS_"8_5TERM COORD_^1_%STA-_!RDCORD,I_*FOR READ_^1_%RAO-_!ZMFLG,I_+SET ZERO MIRROR FLAG_^1_%LDQ-_!EWES,I_,PICK UP EQUIPMENT CODE($301)_^1_%INQ_"3_#ZERO MIRROR_^1_%ENA_"$1A_^1_%OUT_"REJC-*_^1_%JMP-_!(ADISP)_'EXIT-DISP_^1ZMENT ENA_"0_^1_%STA-_!ZMFLG,I_+CLEAR ZERO MIRROR FLAG_^1_€€%LDQ-_!EWES,I_^1_%ENA_"$1E_#CLEAR & ENABLE INTERRUPTS_^1_%OUT_"REJC-*_^1_%RAO-_!DATFLG,I_^1_%RTJ+_!RQAQ_*REQUEST A/Q CHANNEL_^1_%STQ-_!I_^1_%LDQ-_!EWES,Q_^1_%INQ_"4_#SET D = 5 FOR READ_^1_%LDA-_!RDCORD,I_*READ COORD5_^1_%OUT_"REJC-*_^1_%AND-_!H00FF_^1_%SUB-_!DISC1,I_#IS REJECT THE FIRST CHAR_^1_%SAN_"1_^1_%JMP*_!MATCH_^1_%JMP-_!(ADISP)_'EXIT-DISP_^1DATENT INQ_"-1_.INPUT DATA-D=0_^1€€_%INP_"REJC-*_^1_%STA*_!ASAV_^1_%RTJ+_!RLAQ_*RELEASE A/Q CHANNEL_^1_%STQ-_!I_^1_%LDQ-_!DINOFG,I_*CHECK DINO FLAG_^1_%SQZ_"DINOGO_-OK-SKIP_^1_%JMP-_!(ADISP)_'EXIT-DISP_^1ASAV_!NUM_"0_^1DINOGO ARS_"8_,GET COORD IN BOTTOM HALF_^1_%AND-_!H00FF_-OF WORD FOR COMPAR_^1_%SUB-_!DISC1,I_+IS THERE A MATCH_^1_%SAP_"MATCH_.YES-SKIP_^1_%JMP-_!(ADISP)_'EXIT-DISP_^1MATCH RAO-_!DINOFG,I_$SET DINO €€FLAG_^1_%LDQ-_!EWES,I_,SET EQUIP CODE FOR DISPLAY_^1_%ENA_"$20_^1_%OUT_"REJC-*_^1_%JMP-_!(ADISP)_'EXIT-DISP_^1EOPENT ENA_"0_^1_%STA-_!DINOFG,I_^1_%STA-_!DATFLG,I_^1_%ENA_"2_5CLEAR INTERRUPTS AFTER READ_^1_%OUT_"REJC-*_^1_%ENA_"1_^1_%RTJ*_!OLCC_^1_%SAP_"COR1_/YES-SKIP_^1_%JMP*_!OLC3_'NO_^1REJC_!NOP_"0_^1_%JMP_"REJ_^1COR1_!ARS_"8_/SHIFT CHAR FOR STORAGE_^1_%LDQ-_!FWA2,I_^1_%STA-_!(BA€€SE),Q_^1_%RAO-_!FWA2,I_-INCREMENT BUFF 2 ADDRS._^1_%LDA-_!TTYBUF,I_!GET DATA WORD AGAIN_^1_%ALS_"8_3IS THERE A CHAR?_^1_%SAP_"COR2_0YES-SKIP_^1_%JMP*_!OLC3_'RETURN_^1COR2_!ARS_"8_^1_%LDQ-_!FWA2,I_(STORE SECOND CHAR IN BUFF 2_^1_%STA-_!(BASE),Q_^1_%JMP*_!OLC3-1_$RETURN- INCREMENT FWA2_^1OLCEX1 LDA-_!FWA2,I_!RESTORE USER'S LWA+1_^1_%STA-_!ECCOR,I_^1_%LDA-_!EQST3,I_+CLEAR REJECT STATU€€S BIT(TABLE 13)_^1_%AND-_!H7FFF_^1_%LDQ-_!REJCNT,I_#WERE THERE TOO MANY REJECTS_^1_%SQP_"1_#NO - SKIP_^1_%ADD-_!H8000_#YES - SET REJECT STATUS_^1_%STA-_!EQST3,I_^1_%LDA-_!BF1SAV,I_*RESTORE FWA OF BUFFER 1_^1_%STA-_!FWA,I_^1_%LDA-_!BF2SAV,I_*RESTORE FWA OF BUFFER 2_^1_%STA-_!FWA2,I_^1OLCEX2 LDA-_!FWA2,I_)ARE WE THROUGH MOVING_^1_%SUB-_!ECCOR,I_^1_%SAM_"OLCEX3_0NO-SKIP_^1_%JMP*_!PKDN€€_1YES_^1OLCEX3 LDA-_!MODSAV,I_'ARE WE IN_^1_%AND-_!H0100_0ASSEM MODE_^1_%SAN_"PACK_2YES-SKIP_^1_%LDQ-_!FWA,I_0NO-CLEAR WORD_^1_%STA-_!(BASE),Q_-IN BUFFER SO_^1_%JMP*_!PACK2_0UPPER 8 BITS WILL BE OFF_^1ISAVE NUM_"0_^1PACK_!LDQ-_!FWA2,I_#GET CHAR FROM BUFF2 AND_^1_%LDA-_!(BASE),Q_^1_%ALS_"8_.STORE IN TOP 8 BITS OF BUFF 1_^1_%LDQ-_!FWA,I_^1_%STA-_!(BASE),Q_^1_%RAO-_!FWA2,I_-INCREMENT€€ ADDR_^1_%LDA-_!FWA2,I_-ARE WE DONE MOVING_^1_%SUB-_!ECCOR,I_^1_%SAZ_"PACK1_0YES-SKIP_^1PACK2 LDQ-_!FWA2,I_*LOAD AND MERGE CHAR._^1_%LDA-_!(BASE),Q_^1_%LDQ-_!FWA,I_)WITH BUFF1_^1PACKB EOR-_!(BASE),Q_^1_%STA-_!(BASE),Q_^1_%RAO-_!FWA2,I_^1_%RAO-_!FWA,I_.INCREMENT BUFFER ADDRESSES_^1_%JMP*_!OLCEX2_/LOOP_^1PACK1 ENA_"$5B_,STORE FILL CHAR IN_^1_%JMP*_!PACKB_^1PKDN_!LDA-_!FWA,I_*RESTO€€RE LWA+1_^1_%STA-_!ECCOR,I_^1END_"JMP_"(OLC915)_#EXIT_^1*****************************************_^1OLCC_!NOP_"0_!ENTRY_^1_%STA*_!TTYOUT+5_^1_%LDA-_!(ZERO),I_%SET COMPLETION PRIORITY OF TTY_^1_%AND-_!HF_,ACCORDING TO DRIVER PRIORITY_^1_%STA-_!TTYBUF,I_%TAKEN FROM PHYSTAB_^1_%LDA*_!TTYINP+1_^1_%AND-_!HFFF0_^1_%ADD-_!TTYBUF,I_^1_%STA*_!TTYINP+1_^1_%LDA-_!I_1SAVE I REGISTER SETTING,CO€€NTAINS_^1_%STA*_!ISAVE_-ADDRESS OF PHYSTAB_^1_%INA_"TTYBUF_^1_%STA*_!TTYINP+6_^1_%SET_"A_#SET TTYBUF NEGATIVE_^1_%STA-_!TTYBUF,I_^1TTYOUT RTJ-_!($F4)_'OUTPUT TTY MESSAGE-OLCC#_^1_%ADC_"$C33,0,0,$18FC,3,OLCMSG_^1TTYINP RTJ-_!($F4)_'ACCEPT INPUT FROM OPERATOR_^1_%ADC_"$83D,VALCHR,0,$18FD,2,TTYBUF_^1_%JMP-_!(ADISP)_'EXIT-DISP_^1VALCHR LDA*_!ISAVE_'RESTORE PHYSTAB ADDRS IN I REJ._^1_%S€€TA-_!I_1THAT WAS DESTROYED BY ADISP_^1_%LDA-_!TTYBUF,I_*VALIDATE INPUT CHARS FOR_^1_%JMP*_!(OLCC)_%EXIT_^1OLCAD2 NOP_"0_^1_%ENA_"4_^1OLCAD3 RTJ*_!OLCC_!GO OUTPUT MESSAGE_^1_%ARS_"8_3NUMERIC ONLY_^1_%INA_"-$30_0CHAR. LESS THEN $30_^1_%SAM_"VALER_/YES-ERROR_^1_%INA_"-$A_1CHAR. GREATER THAN $39_^1_%SAM_"VAL1_/NO-OK_^1VALER JMP*_!OLCAD3-1_$REPEAT MSG_^1VAL1_!INA_"$A_-RESTORE HEX CHAR.€€_^1_%LDQ-_!TTYBUF,I_^1_%QLS_"8_^1_%SQM_"VAL3_^1_%MUI-_!H000A_^1_%STA-_!CHRSAV,I_*SAVE NUMERIC CHAR._^1_%LDA-_!TTYBUF,I_*LOAD WORD AGAIN_^1_%AND-_!H00FF_-GET BOTTOM 8 BITS_^1_%INA_"-$30_/CHAR. LESS THAN $30_^1_%SAM_"VAL2_/YES-ERROR_^1_%INA_"-$A_0CHAR. GREATER THAN $39_^1_%SAP_"VAL2_/YES-ERROR_^1_%INA_"$A_1RESTORE HEX CHAR._^1_%ADD-_!CHRSAV,I_*ADD TO PREVIOUS CHAR. AND SAVE_^1VAL3_!S€€TA-_!CHRSAV,I_^1_%INA_"-21_)IS FINAL VALUE_^1_%SAM_"CHROK_#GREATER THAN 20 DECIMAL_^1VAL2_!JMP*_!OLCAD3-1_#YES - REPEAT MESSAGE_^1CHROK JMP*_!(OLCAD2)_%EXIT_^1OLCMSG NUM_"$2020_^1_%NUM_"$4F4C_^1_%NUM_"$4343_.***_"OLCC#_"***_^1_%NUM_"$2320_^1****************************************************_^1*****_K*****_^1*****_#EQUIPMENT TABLE EQUATES_.*****_^1*****_K*****_^1*****************€€***********************************_^1EINT_!EQU_"EINT(1)_^1EDCN_!EQU_"EDCN(2)_^1EQCMP EQU_"EQCMP(4)_^1ELU_"EQU_"ELU(5)_^1EPTR_!EQU_"EPTR(6)_^1EWES_!EQU_"EWES(7)_^1EREQST EQU_"EREQST(8)_^1ESTAT1 EQU_"ESTAT1(9)_^1ECCOR EQU_"ECCOR(10)_^1ELSTWD EQU_"ELSTWD(11)_^1ESTAT2 EQU_"ESTAT2(12)_^1ERTN_!EQU_"ERTN(15)_^1EFLG_!EQU_"EFLG(16)_^1EOCFLG EQU_"EOCFLG(17)_^1EPRERD EQU_"EPRERD(18)_^1EUSB€€UF EQU_"EUSBUF(19)_^1MODSAV EQU_"MODSAV(20)_^1HPBUF EQU_"HPBUF(21)_^1BUFBLD EQU_"BUFBLD(22)_^1MRKFLG EQU_"MRKFLG(23)_^1BF1SAV EQU_"BF1SAV(24)_^1BF2SAV EQU_"BF2SAV(25)_^1MIRSAV EQU_"MIRSAV(26)_^1RDCNT EQU_"RDCNT(27)_^1LWABUF EQU_"LWABUF(28)_^1FWA_"EQU_"FWA(29)_^1EQSA6 EQU_"EQSA6(30)_^1REJCNT EQU_"REJCNT(31)_^1DISC1 EQU_"DISC1(32)_^1RDCORD EQU_"RDCORD(33)_^1CHRSAV EQU_"CHRSAV(34)€€_#TOTAL REJECTS TO BE CORRECTED PER READ_^1TTYBUF EQU_"TTYBUF(35)_#TTY INPUT BUFFER-OLCC#_^1TTYBU2 EQU_"TTYBU2(36)_!SECOND WORD OF TTY BUFF_^1FWA2_!EQU_"FWA2(37)_(BUFFER 2 ADDRESS_^1ZMFLG EQU_"ZMFLG(38)_%ZERO MIRROR FLAG_^1DATFLG EQU_"DATFLG(39)_#DATA FLAG_^1DINOFG EQU_"DINOFG(40)_#DINO FLAG_^1OC1WD5 EQU_"OC1WD5(41)_#WORD 5_^1OC1WD6 EQU_"OC1WD6(42)_#WORD 6_^1_%EQU_"EQST1(51)_^1_%E€€QU_"EQST2(52)_^1_%EQU_"EQST3(53)_^1BASE_!EQU_"BASE(2)_^1H007F EQU_"H007F(BASE+7)_^1ZERO_!EQU_"ZERO(BASE)_^1HF_#EQU_"HF(BASE+4)_^1HFFF0 EQU_"HFFF0(BASE+$14)_^1H00FF EQU_"H00FF(BASE+8)_^1HFF00 EQU_"HFF00(BASE+$18)_^1HFE00 EQU_"HFE00(BASE+$19)_^1H7FFF EQU_"H7FFF(BASE+$F)_^1H0001 EQU_"H0001(BASE+1)_^1H0100 EQU_"H0100(BASE+$29)_^1H20_"EQU_"H20(BASE+$26)_^1H000A EQU_"H000A(BASE+€€$44)_^1***************************************************_^1ADISP EQU_"ADISP($EA)_^1H8000 EQU_"H8000(BASE+$1F)_^1_%END_]_^__€POCR915 CSY/ P€1_%NAM OCR915_'MSOS 4 915-1735/919 DRIVER 2.0 10/30/74_^1***_(UPON ENTRANCE, I REG = LOGICAL UNIT NUMBER._^1***_(OC915I IS THE INITIATOR ENTRY POINT_^1***_(OC915C IS THE CONTINWATOR ENTRY POINT_^1***_]_^1_%ENT_"OC915I,OC915C_^1_%ENT_"REJ_^1_%EXT_"OLC915,ZMENT,DATENT,EOPENT_^1_%EXT_"OLCAD2,TSTBB_^1_%EXT_"RQAQ,RLAQ_^1_%EXT_"ADEV_^1_%EQU_"ADISP($EA)_^1_%EQU_"AFNR($B5)_^1_%EQU_"ACOMP(€€$B6)_^1***********************************************************_^1BASE_!EQU_"BASE(2)_^1ZERO_!EQU_"ZERO(BASE)_^1ONE_"EQU_"ONE(BASE+1)_^1H7_#EQU_"H7(BASE+3)_^1H000F EQU_"H000F(BASE+4)_^1H00FF EQU_"H00FF(BASE+8)_^1H100_!EQU_"H100(BASE+$29)_^1H0FFF EQU_"H0FFF(BASE+$C)_^1H7FFF EQU_"H7FFF(BASE+$F)_^1HFFFE EQU_"HFFFE(BASE+$11)_^1HFF00 EQU_"HFF00(BASE+$18)_^1HF800 EQU_"HF800(BASE€€+$1B)_^1HE000 EQU_"HE000(BASE+$1D)_^1HC000 EQU_"HC000(BASE+$1E)_^1H8000 EQU_"H8000(BASE+$1F)_^1H8_#EQU_"H8(BASE+$24)_^1H10_"EQU_"H10(BASE+$25)_^1H20_"EQU_"H20(BASE+$26)_^1H40_"EQU_"H40(BASE+$27)_^1H200_!EQU_"H200(BASE+$2A)_^1H400_!EQU_"H400(BASE+$2B)_^1H0800 EQU_"H0800(BASE+$2C)_^1H1000 EQU_"H1000(BASE+$2D)_^1H2000 EQU_"H2000(BASE+$2E)_^1H4000 EQU_"H4000(BASE+$2F)_^1HFFDF E€€QU_"HFFDF(BASE+$36)_^1HFF7F EQU_"HFF7F(BASE+$38)_^1HFEFF EQU_"HFEFF(BASE+$39)_^1HDFFF EQU_"HDFFF(BASE+$3E)_^1HBFFF EQU_"HBFFF(BASE+$3F)_^1H6_#EQU_"H6(BASE+$42)_^1*** I N I T I A T O R ***_^1OC915I EQU_"OC915I(*)_^1_%STQ-_!I_^1_%RTJ-_!(AFNR)_(CALL FIND NEXT REQUEST_^1_%JMP-_!(ADISP)_'NO MORE REQUESTS_^1_%ENA_"0_/CLEAR FLAGS FOR OLCC_^1_%STA-_!DATFLG,I_^1_%STA-_!ZMFLG,I_^1_%STA-_€€!DINOFG,I_^1_%STA-_!REJCNT,I_^1_%LDA-_!H0FFF_)REJECT,SERVO,ENAB,SUP.REJ._^1_%AND-_!EQST3,I_'BITS 15,14,13_^1_%STA-_!EQST3,I_^1_%RTJ_"INSTAT_^1_%ALS_"3_1IS END OF FILE SET?_^1_%SAP_"STWRDS-*-1_^1_%LDA-_!H2000_^1_%JMP_"SETFLG_^1***** TABLE OF JUMPS TO PROPER ROUTINE *****_^1JPRC_!JMP*_!JPRC2_#CRC = 0_^1_%JMP*_!INSTNT_#CRC = 1_^1_%JMP*_!MODE_#CRC = 2_^1_%JMP*_!POSIT_#CRC = 3_^1_%JMP*_€€!MECHAN_#CRC = 4_^1_%JMP*_!READ2_#CRC = 5_^1********************************************_^1STWRDS LDQ-_!EPTR,I_^1_%LDA-_!5,Q_^1_%STA-_!OC1WD6,I_^1_%LDA-_!4,Q_^1_%AND-_!H00FF_^1_%STA-_!OC1WD5,I_^1_%LDA-_!4,Q_^1_%ARS_"8_^1_%AND-_!H7_#GET CRC CODE_^1_%TRA_"Q_^1_%INA_"-6_#IS IT 0 TO 5_^1_%SAP_"NORCA_#NO - ERROR_^1_%JMP*_!JPRC,Q_*JUMP TO PROCESSING RTNE VIA TABLE(JPRC)_^1NORCA EQU_"NOR€€CA(*)_^1_%LDA-_!HC000_^1_%JMP_"SETFLG_^1*** M O D E ***_^1MODE_!EQU_"MODE(*)_^1_%LDA-_!OC1WD6,I_^1_%STA-_!MODSAV,I_%SAVE MODE FOR OLC_^1_%ARS_"4_^1_%AND-_!H000F_^1_%STA-_!EQST2,I_+SAVE NOB_^1_%ALS_"8_^1_%ADD-_!OC1WD5,I_*COMBINE WITH EOL CHAR_^1_%STA-_!EQST3,I_+AND SAVE_^1_%AND-_!H00FF_^1_%STA-_!EOLC,I_,SAVE EOL_^1_%JMP*_!INSCMP_+HOLD MODE FUNCTION-GO TO COMPLETION_^1MODE1 EQU_"MOD€€E1(*)_^1_%LDQ-_!EWES,I_^1_%INQ_"1_^1_%LDA-_!OC1WD6,I_%WORD 6 OF REQUEST BLOCK_^1_%AND_"=N$0F61_/RT,S,P,HB,OLCC,Z_^1_%INA_"$1A_/CLEAR AND REENABLE INTERRUPTS_^1_%JMP*_!FUNC_^1*** P O S I T I O N ***_E0000000000_^1POSIT EQU_"POSIT(*)_^1_%RTJ*_!COM1_^1_%AND-_!H4000_^1_%SAZ_"OUTPOS-*-1 NO--OUTPUT WITH A REG= CONTENTS OF WD9_^1_%EOR-_!OC1WD5,I_%YES-CLEAR FORWARD POSITION BIT_^1_%STA-_€€!OC1WD5,I_^1_%RTJ*_!FNDPOS_(DETERMINE PROPER SETTING_^1OUTPOS ADD-_!OC1WD5,I_^1_%STA-_!OC1WD5,I_^1_%AND_"=N$0F00_/PAGE ADV CNT = 0_^1_%SAN_"OPA-*-1_#NO._^1_%LDA-_!OC1WD5,I_^1_%AND-_!H1000_)YES,PG ADV REQUESTED_^1_%SAZ_"OPA-*-1_#NO._^1_%EOR-_!OC1WD5,I_%YES-ILLEGAL_^1_%STA-_!OC1WD5,I_^1OPA_"LDA-_!OC1WD5,I_^1_%AND_"=N$D000_^1_%SAN_"1_^1_%JMP*_!INSCMP_^1_%AND-_!H1000_.TEST PAGE ADVANCE€€_^1_%SAZ_"OPA2_0NO - SKIP_^1_%ENA_"0_^1_%STA-_!MRKFLG,I_+OK TO MARK_^1OPA2_!LDQ-_!EWES,I_^1_%ENA_"$1A_0CLEAR AND REENABLE INTERRUPTS_^1_%OUT_"REJ-*_^1_%LDA-_!OC1WD5,I_%POSITION FUNCTION IN A_^1_%INQ_"2_^1_%OUT_"REJ-*_^1_%JMP-_!(ADISP)_^1JPRC2 JMP*_!READ1_^1* THE FOLLOWING ROUTINE DETERMINES THE CORRECT POSITION SETTING_^1* BASED ON =REQUESTED COORDINATE MINUS CURRENT COORDINATE PO€€SITION_^1* THE PROPER SETTING IS RETURNED IN A REGISTER_^1FNDPOS NOP_"0_^1_%LDA-_!EQST1,I_^1_%AND-_!H00FF_^1_%STA-_!TEMP,I_^1_%LDA-_!OC1WD5,I_^1_%AND-_!H00FF_^1_%SUB-_!TEMP,I_^1_%TRA_"Q_^1_%SQZ_"RETPOS_^1_%LDA-_!H4000_0MIRROR TO LEFT OF PC_^1_%SQP_"RETPOS_^1_%LDA-_!H8000_0MIRROR TO RIGHT OF PC_^1RETPOS JMP*_!(FNDPOS)_^1*** I N S T A N T ***_E000000000000_^1INSTNT LDQ-_!OC1WD6,I WOR€€D 6 OF REQUEST BLOCK_^1_%LRS_"1_4SEPARATE CONTROLLER BIT_^1_%QLS_"7_4AND COUNTER BITS WITH_^1_%LRS_"15_37 ZERO BITS RESULT IN A_^1_%INA_"$1A_/CLEAR AND REENABLE INTERRUPTS_^1_%LDQ-_!EWES,I_^1FUNC_!OUT_"REJ-*_^1_%AND-_!ONE_^1_%SAZ_"INSCMP-*-1_'WAS CLR CONTROLLER SET_^1_%JMP-_!(ADISP)_'YES-WAIT FOR INTERUPT ON MIRROR ZERO_^1*** M E C H A N I C A L ***_^1MECHAN EQU_"MECHAN(*)_^1_%LDA-€€_!OC1WD6,I_%WORD 6 OF REQUEST BLOCK_^1_%INA_"-5_0IS THIS OLCC MESSAGE_^1_%SAZ_"OLCCK_-YES - SKIP_^1_%INA_"1_1IS IT MARKING PEN_^1_%SAN_"MECH2_-NO - SKIP_^1_%LDA-_!MRKFLG,I_)YES - WAS THIS LINE ALREADY MARKED_^1_%SAZ_"1_1NO - SKIP_^1INSCMP JMP*_!PRECMP_'EXIT_^1_%RAO-_!MRKFLG,I_)SET MRKFLG_^1MECH2 LDA-_!OC1WD6,I_#RELOAD ACT_^1_%ALS_"13_1POSITION BITS CORRECTLY_^1_%INA_"$1A_0CLEAR AN€€D REENABLE INTERRUPTS_^1_%LDQ-_!EWES,I_(AND OUTPUT FUNCTION_^1_%INQ_"3_^1_%OUT_"REJ-*_^1_%JMP-_!(ADISP)_^1OLCCK LDA*_!OLCMSG+1_#IS OLCC MODULE_^1_%ALS_"1_1IN SYSTEM_^1_%SAP_"OLCMSG_.YES - SKIP_^1_%JMP*_!RDERR_^1OLCMSG RTJ_"OLCAD2_#OUTPUT OLCC# MESSAGE_^1_%JMP*_!PRECMP_+RETURN_^1COM1_!NOP_"0_^1_%LDA-_!OC1WD6,I_^1_%ALS_"8_^1_%ADD-_!OC1WD5,I_^1_%STA-_!OC1WD5,I_^1_%JMP*_!(COM1)_^1*** €€READ-2 ***_^1READ2 RTJ*_!COM1_^1_%LDA-_!EUSBUF,I_^1_%STA-_!ECCOR,I_^1_%LDA-_!OC1WD5,I_^1_%STA-_!MIRSAV,I_9SAVE COORDINATES_^1_%CLR_"A_^1_%STA-_!RDCNT,I_:CLEAR READ COUNT_^1READ2A RTJ*_!FNDPOS_^1_%AND-_!H4000_^1_%SAN_"READB-*-1_^1RDERR EQU_"RDERR(*)_^1_%JMP*_!NORCA_^1READB EQU_"READB(*)_^1_%LDA-_!ESTAT1,I_^1_%EOR-_!HE000_)SET SWITCHES-RD OP. 1-PASS RD,_^1_%STA-_!ESTAT1,I_%NO BLAN€€K LINE CHECK_^1_%LDQ-_!EPRERD,I_,IS BLC SPECIFIED_^1_%SQN_"SABC_1YES - SKIP_^1_%SUB-_!H4000_)INDICATOR NO SECOND RD INITIATION_^1_%STA-_!ESTAT1,I_-IF EOP AND NO DATA_^1_%JMP*_!OUTRD_^1SABC_!LDA-_!OC1WD5,I_$READ COORD._^1_%AND-_!H00FF_)AND OUT TC_^1_%SUB-_!EPRERD,I_%IS BLC.GT.IC_^1_%SAM_"SAVCB-*-1_^1_%JMP*_!RDERR_^1SAVCB QLS_"8_^1_%LDA-_!ESTAT1,I_%INDICATE CK WILL BE MADE FOR_^1_%S€€UB-_!H2000_)BLANK LN WHEN BLC ENCOUNTERED_^1_%STA-_!ESTAT1,I_^1_%LDA-_!OC1WD5,I_%REPLACE IMT COORDINATES_^1_%AND-_!HFF00_)FOR SECOND PASS RD WITH_^1_%EOR-_!EPRERD,I_%BLANK LINE COORD AND_^1_%STA-_!EPRERD,I_%STORE_^1_%LDA-_!OC1WD5,I_^1_%AND-_!H00FF_)--REPLACE TERMINAL COORDINATE_^1_%EAQ_"A_6FOR FIRST PASS RD WITH BLC._^1OUT2R STA-_!OC1WD5,I STORE TEMPORARILY_^1OUTRD LDQ-_!EWES,I_€€^1_%ENA_"$1E_#CLEAR AND REENABLE INTERRUPTS_^1_%OUT_"REJ-*_^1_%RTJ+_!RQAQ_*REQUEST A/Q CHANNEL_^1_%STQ-_!I_^1_%LDQ-_!EWES,Q_^1_%LDA-_!OC1WD5,I_%RETURN IC & TC COORD._^1_%INQ_"4_0FOR READ FUNCTION_^1_%OUT_"REJ-*_^1_%JMP-_!(ADISP)_'EXIT--WAIT FOR INTERRUPT_^1*** READ-1 ***_^1READ1 LDA-_!OC1WD5,I BLK LINE COORDINATE_^1_%STA-_!EPRERD,I_%STORE FOR USE IN READ2_^1_%JMP_"BBPRD_^1*** INP€€UT STATUS ***_^1INSTAT NOP_"0_^1_%LDQ-_!EWES,I_^1_%INQ_"1_^1_%INP_"1_)MIRROR STATUS_^1_%STA-_!EQST1,I_^1_%LDQ-_!EWES,I_^1_%INP_"1_)EQUIP STATUS_^1_%STA-_!ESTAT2,I_^1_%JMP*_!(INSTAT)_^1***INTERNAL/EXTERNAL REJECT ROUTINE_^1REJ_"NOP_]_^1_%LDA-_!HC000_)ER N,2_^1_%STA-_!STAT,I_^1_%RTJ*_!INSTAT_^1_%JMP*_!FINIS_^1*** COMPLETION OF REQUEST ***_^1LSTSTA RTJ*_!INSTAT_#TAKE STATUS FOR SYSTEM€€ TABLES 8 AND 11._^1_%AND-_!H8_^1_%SAZ_"INTCLR_^1_%LDA-_!ESTAT2,I_^1_%EOR-_!H10_^1_%JMP*_!RDCK_^1INTCLR JMP_"RDONLY_^1PRECMP CLR_"A_^1SETFLG STA-_!STAT,I_$V-FIELD_^1CLRINT ENA_"2_^1_%LDQ-_!EWES,I_(EOP,ALARM INTERRUPTS_^1_%OUT_"REJ-*_^1FINIS LDA-_!ESTAT2,I_^1_%AND_"=N$F9FD_^1_%TRA_"Q_^1_%LDA-_!EQST3,I_'SET SERVO ENABLE AND REJECT STATUS_^1_%AND-_!HC000_^1_%ALS_"11_$RECEIVED AT ANY €€TIME DURING A READ_^1_%AAQ_"A_^1_%STA-_!ESTAT2,I_^1_%RTJ+_!RLAQ_*RELEASE A/Q CHANNEL_^1_%STQ-_!I_^1_%LDA-_!STAT,I_^1_%SAP_"CLR1_^1_%LDA-_!EREQST,I_-IF BIT 15 OF V-FIELD IS SET_^1_%EOR-_!H4000_0TURN ON BIT 14 OF STATUS_^1_%STA-_!EREQST,I_^1_%LDQ-_!EWES,I_^1_%ENA_"1_-CLEAR CONTROLLER_^1_%OUT_"1_^1_%NOP_"0_^1_%LDA-_!STAT,I_^1_%LDQ-_!ELU,I_^1_%QLS_"6_^1_%ALS_"3_^1_%EAQ_"Q_^1_%JMP_"ADEV€€_^1CLR1_!EQU_"CLR1(*)_^1_%STA-_!ESTAT1,I_^1_%RTJ-_!(ACOMP)_'CALLCOMPLETION PROCESSOR_^1_%JMP_"OC915I+1_%PROCESS NEXT REQUEST_^1*** C O N T I N U A T O R ***_^1OC915C LDA-_!ZMFLG,I_$ZERO MIRROR FLAG - IS IT SET_^1_%SAZ_"DATCHK_%NO-SKIP_^1_%JMP_"ZMENT_'YES-GO TO OLCC_^1DATCHK LDA-_!DATFLG,I_#CHECK DATA FLAG_^1_%SAZ_"CONTIN_#NOT SET_^1_%LDQ-_!EWES,I_$TAKE STATUS 1_^1_%INP_"REJ-*_^1_%A€€LS_"10_+IS ALARM SET_^1_%SAP_"EOPCK_(NO-SKIP_^1_%ALS_"15_+YES-CHECK FOR LOST DATA_^1_%SAP_"ALARM1_'NO-SKIP_^1_%ALS_"1_^1EOPCK ALS_"1_'IS END OF OP SET_^1_%SAP_"DATAON_%NO-SKIP_^1_%JMP_"EOPENT_%YES-GO TO OLCC_^1CONTIN LDA-_!ESTAT1,I_#IS THERE AN INTERRUPT AFTER READ_^1_%SAM_"RDCONT-*-1_'YES_^1CKINT RTJ*_!INSTAT_^1_%ALS_"4_)CHECK LINE LOCATE FAILURE_^1_%SAP_"CKAL_'NO - SKIP_^1_%JMP€€*_!JPST2_$YES - LINE LOCATE FAILED_^1CKAL_!JMP_"CKALA_^1ALARM1 JMP*_!JUNEXP_(UNEXPECTED INTERRUPT_^1DATAON ALS_"1_#IS DATA READY SET_^1_%SAM_"DATCK1_#YES - SKIP_^1_%JMP-_!(ADISP)_#NO - EXIT TO DISPATCHER_^1DATCK1 JMP_"DATENT_#GO TO OLCC MODULE_^1RDCONT LDQ-_!EWES,I_)CHECK FOR SUPER REJECT_^1_%INQ_"1_^1_%INP_"REJ-*_1STATUS 2_^1_%ALS_"4_5IS SUPER REJECT SET_^1_%SAP_"NOSR_2NO-SKIP_^1_€€%LDA-_!EQST3,I_.YES-_^1_%AND-_!HDFFF_^1_%ADD-_!H2000_1SET SUPER REJECT_^1_%STA-_!EQST3,I_^1NOSR_!LDQ-_!EWES,I_^1_%INP_"REJ-*_-INPUT STATUS0_^1RDCK_!STA-_!TEMP,I_^1_%AND-_!H400_*IS REJECT SET_^1_%SAZ_"TSTAT_^1_%LDA-_!EQST3,I_'YES,HAS IT BEEN SET PREVIOUSLY_^1_%SAM_"TSTAT_)YES,GO ON_^1_%ADD-_!H8000_)NO,SET IT_^1_%STA-_!EQST3,I_^1TSTAT LDQ-_!TEMP,I_^1_%QLS_"6_8IS SERVO ENABLE SET_^1_€€%SQP_"GOON_4NO-SKIP_^1_%LDA-_!EQST3,I_'YES,HAS IT BEEN SET PREVIOUSLY_^1_%AND-_!HBFFF_^1_%ADD-_!H4000_#SET IT IN EQST3_^1_%STA-_!EQST3,I_^1GOON_!QLS_"4_3IS ALARM SET_^1_%SQP_"CKEOO_3NO-SKIP_^1_%LDQ-_!EWES,I_^1_%ENA_"$42_+STOP READ, CLR INTERRUPTS_^1_%OUT_"REJ-*_)FORCE 1735 CTLR NOT BUSY_^1ALRM_!LDQ-_!TEMP,I_^1_%QLS_"9_#IS LOST DATA SET_^1_%SQM_"JPST2_3YES-SKIP_^1JUNEXP EQU_"JUNEXP(€€*)_^1_%JMP*_!UNEXPI_,NO --UNEXPECTED INTERRUPT._^1JPST2 LDA-_!H4000_#YES - LOST DATA_^1_%JMP*_!SETFLG_^1CKEOO QLS_"1_2IS EOP SET_^1_%SQM_"CKDATA_2YES-SKIP_^1_%RTJ*_!GETDATA_+NO-- INPUT DATA._^1_%SQM_"STPRD-*-1_!IF NOB OR LTC MET, STOP READ._^1RETDSP RTJ_"INSTAT_^1_%JMP-_!(ADISP)_^1*_]_^1CKDATA QLS_"1_1IS DATA ALSO SET_^1_%SQP_"NODAT_3NO-SKIP_^1INPDAT RTJ*_!GETDAT_,YES--INPUT DATA€€._^1_%SQP_"NODAT-*-1_^1*_]_^1STPRD CLR_"A_^1_%STA-_!STAT,I_^1STPRDA LDQ-_!EWES,I_^1STPRDB ENA_"$42_^1_%OUT_"REJD-*_^1_%JMP_"LSTSTA_^1NODAT LDA-_!ESTAT1,I_^1_%AND-_!H2000_)IS NO BLK LN SWITCH SET_^1_%SAN_"CKPASS-*-1_^1_%LDA_"=N$6000_^1_%JMP*_!STPRD+1_.GO TO STOP READ_^1CKPASS LDA-_!ESTAT1,I_^1_%AND-_!H4000_)IS 2 PASS RD SWITCH SET_^1_%SAN_"RD2-*-1_^1_%JMP*_!STPRD_+NO --GO TO STOP €€READ._^1RD2_"EOR-_!ESTAT1,I_%SET OFF BIT 14_^1_%STA-_!ESTAT1,I_%AFTER PASS 2 RECOGNIZED_^1_%LDA-_!EPRERD,I_%INITIATE 2ND READ ...BLC TO TC_^1_%JMP_"OUT2R_^1GETDAT NOP_]_^1DATOFF LDA-_!ESTAT1,I_^1_%AND-_!HDFFF_)SET BLK LN CK SWITCH TO_^1_%ADD-_!H2000_)INDICATE DATA WAS FOUND_^1_%STA-_!ESTAT1,I_^1_%CLR_"A_^1_%LDQ-_!EWES,I_^1_%INQ_"-1_^1_%INP_"REJD-*_-INPUT DATA WORD_^1_%AND-_!HFF7F_)€€STRIP BIT 7_^1_%LDQ-_!MODSAV,I_%CHECK FOR OLCC BIT_^1_%QLS_"10_^1_%SQM_"OLCDAT_)SET-SKIP_^1_%AND-_!H7FFF_0STRIP BIT 15_^1OLCDAT LDQ-_!ECCOR,I_^1_%STA-_!(ZERO),Q_%STORE IN USERS INPUT AREA_^1_%RAO-_!ECCOR,I_+INCREMENT BUFFER ADDRESS_^1***** CHECK NOB AND/OR EOL CHARACTER*****_^1_%LDQ-_!MODSAV,I_^1_%QLS_"7_4IS DATA PACKED_^1_%SQM_"SVDATA_/YES - SKIP_^1_%AND-_!H00FF_/CLEAR UPPER 8 BIT€€S_^1SVDATA STA-_!DATWD,I_'SAVE DATA WORD_^1_%AND-_!H00FF_,CHECK LOWER CHAR_^1_%INA_"-$40_.IS IT A REJECT_^1_%SAN_"1_1NO - SKIP_^1_%RAO-_!REJCNT,I_)YES - INC. REJECT CTR_^1_%INA_"$40_/RESET CHAR_^1_%SUB-_!EOLC,I_,IS IT EOL CHAR_^1_%SAZ_"RETNEG_-YES-RETURN Q NEG_^1_%LDA-_!DATWD,I_*GET DATA WORD_^1_%ARS_"8_1CHECK UPPER CHAR_^1_%SAZ_"NOB_/UNPACKED - SKIP_^1_%SUB-_!EOLC,I_,IS IT EOL CHA€€R_^1_%SAN_"NOB_0NO-SKIP_^1RETNEG SET_"Q_,YES-SET Q NEGATIVE_^1RESET LDA-_!EQST3,I_%RESET NOB_^1_%ARS_"8_^1_%AND-_!H000F_^1_%STA-_!EQST2,I_^1RGET_!JMP*_!(GETDAT)_%EXIT_^1NOB_"LDQ-_!EQST2,I_+WAS NOB CHOSEN_^1_%SQZ_"RETURN_0NO-EXIT_^1_%LDA-_!DATWD,I_+YES-GET DATA WORD_^1_%INA_"-$20_/IS WHOLE WORD = TO A BLANK_^1_%SAZ_"DECCT_.YES-MUST BE UNPACKED_^1_%SUB-_!H2000_-NO-IS WORD = 2 BLANKS€€_^1_%SAZ_"DECCT_.YES-SKIP_^1_%JMP*_!RESET_-NO-RESET NOB_^1DECCT INQ_"-1_/DECREMENT NOB COUNTER_^1_%SQZ_"RNEG_2SKIP IF ZERO_^1_%STQ-_!EQST2,I_^1RETURN JMP*_!RGET_(EXIT Q POS_^1RNEG_!JMP*_!RETNEG_(EXIT Q NEG_^1CKALA ALS_"6_$CHECK ALARM_^1_%SAM_"UNEXPI-*-1_'IF SET--SET FLAG 111._^1_%ALS_"1_1CHECK END OF OP._^1_%SAM_"MIRTST_0YES-SKIP_^1UNEXPI LDA-_!HE000_)SET FLAG 111_^1_%JMP*_!JPST2€€+1_^1********************************************_^1MIRTST LDA-_!BUFBLD,I_'TEST FOR B.B._^1_%AND-_!H8000_0RESCAN_^1_%SAN_"RESINT_0YES-SKIP_^1_%JMP_"PRECMP_^1RESINT EOR-_!BUFBLD,I_'CLEAR RESCAN BIT_^1_%STA-_!BUFBLD,I_^1_%JMP_"READ2A_^1RDONLY LDA-_!HPBUF,I_^1_%SAZ_"OLTST_1NOT HP-SKIP_^1TSTGO RTJ_"TSTBB_#IT IS HANDPRINT_^1OLTST LDA*_!FINGO-1_%IS OLCC IN SYSTEM_^1_%ALS_"1_^1_%SAM_"FI€€NGO_^1_%RTJ_"OLC915_)GO TO OLCC_^1FINGO JMP_"CLRINT_+COMPLETION_^1REJD_!NOP_"0_^1_%JMP_"REJ_^1BBPRD EQU_"BBPRD(*)_^1_%RTJ*_!CHKX_*IF X BIT SET ABSOLUTIZE_^1_%SAZ_"XNOT_*CONTENTS OF WORD 6 OF REQUEST_^1_%ENA_"5_^1_%AAQ_"A_-A IS ADDR. OF WORD5 OF REQUEST_^1_%ADD-_!5,Q_+A IS ABSOLUTE BUFFER ADDR._^1_%STA-_!OC1WD6,I_%SAVE FOR READ REQUEST_^1XNOT_!EQU_"XNOT(*)_^1_%LDA-_!4,Q_^1_%AND-_!€€HF800_^1_%SAN_"BSET_*IF B FIELD SET_^1_%LDA-_!OC1WD6,I_^1_%STA-_!EUSBUF,I_^1_%STA-_!BF1SAV,I_^1_%JMP*_!PROTEC_^1BSET_!EQU_"BSET(*)_^1_%RTJ*_!CHKX_*IF X BIT SET THEN ABSOLUTIZE_^1_%LDQ-_!OC1WD6,I_%BOTH BUFFER ADDRESSES_^1_%SAZ_"XNOT2_)IF X BIT NOT SET_^1_%LDA-_!(ZERO),Q_^1XNOT2 EQU_"XNOT2(*)_^1_%AAQ_"A_^1_%STA-_!EUSBUF,I_^1_%STA-_!BF1SAV,I_^1_%RTJ*_!CHKX_^1_%SAZ_"XNOT3_^1_%LDQ-_!OC€€1WD6,I_^1_%INQ_"1_^1_%LDA-_!(ZERO),Q_^1XNOT3 EQU_"XNOT3(*)_^1_%AAQ_"A_^1_%STA-_!BF2SAV,I_^1_%RTJ*_!CHKPRO_(IS BUF2 PROTECTED_^1_%STA-_!EQSA6,I_^1PROTEC LDA-_!BF1SAV,I_^1_%RTJ*_!CHKPRO_(IS BUF1 PROTECTED_^1_%SAN_"PROERR_0PROTECTED-SKIP_^1_%LDA-_!EQSA6,I_.WAS BUF2 PROTECTED_^1_%SAZ_"NOTPRO_0NO-SKIP_^1PROERR LDA-_!EPTR,I_'WAS REQUEST FROM_^1_%RTJ*_!CHKPRO_(PROTECTED MEMORY_^1_%SAN_"N€€OTPRO_(YES-OK-SKIP_^1_%JMP*_!HNDERR_^1NOTPRO LDQ-_!EPTR,I_^1_%LDA-_!4,Q_^1_%AND-_!H1000_)TEST BUFFER BUILD_^1_%STA-_!BUFBLD,I_%SAVE BB FLAG_^1_%SAZ_"BBPRD1_#NOT SET_^1_%LDA*_!TSTGO+1_^1_%SUB-_!H7FFF_)TEST FOR HND_^1_%SAN_"1_-SKIP-YES_^1BBPRDA EQU_"BBPRDA(*)_^1_%JMP*_!HNDERR_^1BBPRD1 LDA-_!MODSAV,I_^1_%AND-_!HFFDF_^1_%LDQ-_!4,Q_4SIXTH WORD OF REQUEST_^1_%QLS_"4_7IS OLCC SET_^1_%SQM_€€"OLCTST_2YES-SKIP_^1_%STA-_!MODSAV,I_^1_%JMP*_!MODEA_2OUTPUT MODE_^1OLCTST INA_"$20_/SET OLCC BIT_^1_%STA-_!MODSAV,I_^1_%LDQ*_!FINGO-1_0IS OLCC IN_^1_%QLS_"1_7SYSTEM_^1_%SQP_"OLCCIN_2YES-SKIP_^1HNDERR EQU_"HNDERR(*)_^1_%JMP_"NORCA_^1OLCCIN AND-_!HFEFF_,CLEAR ASSEM MODE_^1MODEA STA-_!OC1WD6,I_^1FNTSEL ARS_"10_^1_%INA_"-1_2TEST FOR RT=1_^1_%SAZ_"RT1_1SKIP-YES_^1_%ENA_"0_^1_%STA-_!HP€€BUF,I_'NO HANDPRINT_^1MODEB JMP_"MODE1_^1RT1_"LDA-_!OC1WD6,I_^1_%AND-_!H6_/GET RT SUPPLEMENT_^1_%ALS_"9_^1_%STA-_!BBTMP3,I_)SAVE_^1_%ARS_"10_^1_%INA_"-1_2TEST FOR HP_^1_%SAZ_"RTS1_0SKIP-NO_^1_%LDA-_!BBTMP3,I_^1_%EOR-_!H40_+ADD HP BIT FOR CONTROLLER_^1_%STA-_!BBTMP3,I_^1RTS1_!STA-_!HPBUF,I_^1_%LDQ-_!EWES,I_^1_%INQ_"1_^1_%LDA-_!OC1WD6,I_^1_%AND-_!HFF00_,OUTPUT-RT,S,P_^1_%OUT_"REJD-*€€_^1_%LDA-_!OC1WD6,I_^1_%AND_"=N$0321_^1_%EOR-_!BBTMP3,I_)MERGE RTS FOR RT_^1_%STA-_!OC1WD6,I_^1_%JMP*_!MODEB_^1_%SPC_"2_^1CHKX_!NOP_"0_^1_%LDQ-_!EPTR,I_^1_%LDQ-_!10,Q_*GETB POINTER TO REAL REQUEST_^1_%LDA-_!H100_*TEST X BIT OF REQUEST_^1_%AND-_!(ZERO),Q_^1_%JMP*_!(CHKX)_^1_%SPC_"2_^1CHKPRO NOP_"0_^1_%STA*_!CHKSAV_^1_%SUB-_!$F6_^1_%SAM_"NOTHI_^1_%JMP*_!CPROT_^1NOTHI LDA-_!$F7_^1_%S€€UB*_!CHKSAV_^1_%SAM_"CNOT_^1CPROT ENA_"1_^1_%JMP*_!CPRRET_^1CNOT_!CLR_"A_-IF ADDRESS IS UNPROTECTED (A)=0_^1CPRRET JMP*_!(CHKPRO)_%ELSE (A)=1_^1CHKSAV NOP_"0_^1***********************************************************_^1*_]*_^1* EQUIPMENT TABLE EQUATES_A*_^1*_]*_^1***********************************************************_^1EINT_!EQU_"EINT(1)_^1EDCN_!EQU_"EDCN(2)_^1EQCMP EQU_€€"EQCMP(4)_^1ELU_"EQU_"ELU(5)_^1EPTR_!EQU_"EPTR(6)_^1EWES_!EQU_"EWES(7)_^1EREQST EQU_"EREQST(8)_^1ESTAT1 EQU_"ESTAT1(9)_^1ECCOR EQU_"ECCOR(10)_^1ELSTWD EQU_"ELSTWD(11)_^1ESTAT2 EQU_"ESTAT2(12)_^1ERTN_!EQU_"ERTN(15)_^1EFLG_!EQU_"EFLG(16)_^1EOCFLG EQU_"EOCFLG(17)_^1EPRERD EQU_"EPRERD(18)_^1EUSBUF EQU_"EUSBUF(19)_^1MODSAV EQU_"MODSAV(20)_^1HPBUF EQU_"HPBUF(21)_^1BUFBLD EQU_"BUFBLD(22€€)_^1MRKFLG EQU_"MRKFLG(23)_^1BF1SAV EQU_"BF1SAV(24)_^1BF2SAV EQU_"BF2SAV(25)_^1MIRSAV EQU_"MIRSAV(26)_^1RDCNT EQU_"RDCNT(27)_^1LWABUF EQU_"LWABUF(28)_^1FWA_"EQU_"FWA(29)_^1EQSA6 EQU_"EQSA6(30)_^1REJCNT EQU_"REJCNT(31)_^1DISC1 EQU_"DISC1(32)_^1RDCORD EQU_"RDCORD(33)_^1CHRSAV EQU_"CHRSAV(34)_^1TTYBUF EQU_"TTYBUF(35)_^1TTYBU2 EQU_"TTYBU2(36)_^1DATWD EQU_"DATWD(TTYBU2)_^1FWA2_!EQU_€€"FWA2(37)_^1ZMFLG EQU_"ZMFLG(38)_^1DATFLG EQU_"DATFLG(39)_^1DINOFG EQU_"DINOFG(40)_#DINO FLAG_^1OC1WD5 EQU_"OC1WD5(41)_^1OC1WD6 EQU_"OC1WD6(42)_^1WORD5B EQU_"WORD5B(43)_^1WORD6B EQU_"WORD6B(44)_^1BBTMP1 EQU_"BBTMP1(45)_^1BBTMP2 EQU_"BBTMP2(46)_^1BBTMP3 EQU_"BBTMP3(47)_^1TEMP_!EQU_"TEMP(48)_^1STAT_!EQU_"STAT(49)_^1EOLC_!EQU_"EOLC(50)_^1_%EQU_"EQST1(51)_^1_%EQU_"EQST2(52)_^1_%EQU_"E€QST3(53)_^1_%END_]_^__PHND915 CSY/ P€1_'NAM HND915_'MSOS 4 915 HANDPRINT MODULE 2.0 10/30/74_^1*** THIS ROUTINE IS CALLED BY THE OCR 915-1735/919 DRIVER_^1*** WHEN HANDPRINT OR GOTHIC FONTS ARE REQUESTED_^1***_]_^1_%ENT_"TSTBB_^1_%EXT_"REJ_^1*******************************************************_^1*_]_^1* EQUIPMENT TABLE EQUATES_^1*_]_^1*******************************************************_^1EINT_!EQU_"EINT(1)_^€€1EDCN_!EQU_"EDCN(2)_^1ELU_"EQU_"ELU(5)_^1EPTR_!EQU_"EPTR(6)_^1EWES_!EQU_"EWES(7)_^1EREQST EQU_"EREQST(8)_^1ESTAT1 EQU_"ESTAT1(9)_^1ECCOR EQU_"ECCOR(10)_^1ELSTWD EQU_"ELSTWD(11)_^1ESTAT2 EQU_"ESTAT2(12)_^1ERTN_!EQU_"ERTN(15)_^1EFLG_!EQU_"EFLG(16)_^1EOCFLG EQU_"EOCFLG(17)_^1EPRERD EQU_"EPRERD(18)_^1EUSBUF EQU_"EUSBUF(19)_^1MODSAV EQU_"MODSAV(20)_^1HPBUF EQU_"HPBUF(21)_^1BUFBLD EQU_€€"BUFBLD(22)_^1MRKFLG EQU_"MRKFLG(23)_^1BF1SAV EQU_"BF1SAV(24)_^1BF2SAV EQU_"BF2SAV(25)_^1MIRSAV EQU_"MIRSAV(26)_^1RDCNT EQU_"RDCNT(27)_^1LWABUF EQU_"LWABUF(28)_^1REJCNT EQU_"REJCNT(31)_^1OC1WD5 EQU_"OC1WD5(41)_^1OC1WD6 EQU_"OC1WD6(42)_^1WORD5B EQU_"WORD5B(43)_^1WORD6B EQU_"WORD6B(44)_^1BBTMP1 EQU_"BBTMP1(45)_^1BBTMP2 EQU_"BBTMP2(46)_^1_%EQU_"EQST1(51)_^1_%EQU_"EQST2(52)_^1_%EQU_"E€€QST3(53)_^1******************************************_^1BASE_!EQU_"BASE(2)_^1H0001 EQU_"H0001(BASE+1)_^1H00FF EQU_"H00FF(BASE+8)_^1HFF00 EQU_"HFF00(BASE+$18)_^1H8000 EQU_"H8000(BASE+$1F)_^1H1FFF EQU_"H1FFF(BASE+$D)_^1******************************************_^1ADISP EQU_"ADISP($EA)_^1TSTBB NOP_"0_^1_%LDA-_!BUFBLD,I_^1_%SAN_"3_^1_%LDA-_!ECCOR,I_'GET LWA+1_^1_%STA-_!LWABUF,I_€€^1_%JMP*_!SRSTAT_(NO BUFFER BUILD_^1_%LDA-_!RDCNT,I_'CHECK READ COUNT_^1_%SAZ_"1_^1_%JMP*_!COMPAR_$NOT FIRST READ_^1_%LDA-_!ECCOR,I_'GET LAW+1_^1_%STA-_!LWABUF,I_%SAVE IT_^1_%LDA-_!EQST3,I_'CHECK REJECT_^1_%SAM_"INCCNT_^1SRSTAT LDA-_!EQST3,I_'SUPER REJECT STATUS_^1_%ALS_"2_^1_%SAM_"CONSUP_(SKIP IF SET_^1_%JMP*_!DONE1_^1ENDTST LDA-_!RDCNT,I_^1_%INA_"-3_+TEST FOR 3 RESCANS_^1_%SAZ_"C€€ONSUP_)YES_^1INCCNT RAO-_!RDCNT,I_'ADD TO COUNT_^1_%LDA-_!MIRSAV,I_^1_%STA-_!OC1WD5,I_%SET UP IC WORD_^1_%LDA-_!BF2SAV,I_^1_%STA-_!ECCOR,I_'RESCAN FWA_^1_%LDA-_!EPRERD,I_%BLC IF ANY_^1_%AND-_!H00FF_^1_%STA-_!EPRERD,I_^1_%JMP_"REVMIR_^1* CONVERT SUPER REJECTS TO NORMAL REJECTS_^1CONSUP ENA_"0_5CLEAR REJECT FLAG_^1_%STA-_!REJCNT,I_^1_%LDA-_!BF1SAV,I_^1_%STA-_!WORD5B,I_^1SUPER LDA-_!€€WORD5B,I_^1_%SUB-_!LWABUF,I_^1_%SAM_"1_^1_%JMP*_!DONE_^1_%LDQ-_!WORD5B,I_^1_%LDA-_!(BASE),Q_)RIGHT CHAR_^1_%RTJ*_!SUPR_^1_%STA-_!WORD6B,I_)SAVE CHAR_^1_%LDA-_!(BASE),Q_^1_%LDQ-_!MODSAV,I_/IS MODE PACKED_^1_%QLS_"7_^1_%SQP_"SUPER2_2NO-SKIP_^1_%QLS_"3_7YES-IS OLCC SET_^1_%SQP_"PACK_4NO-SKIP_^1SUPER2 AND-_!HFF00_^1_%JMP*_!NOPK_^1PACK_!ALS_"8_3UPPER CHARACTER_^1_%RTJ*_!SUPR_^1_%ALS_"8_€€^1NOPK_!EOR-_!WORD6B,I_$MERGE CHAR_^1_%LDQ-_!WORD5B,I_^1_%STA-_!(BASE),Q_)REPLACE WORD_^1_%RAO-_!WORD5B,I_^1_%JMP*_!SUPER_^1DONE_!LDA-_!EQST3,I_^1_%AND_"=N$4FFF_^1_%LDQ-_!REJCNT,I_#ANY REJECTS_^1_%SQZ_"DONE2_1NO-SKIP_^1_%EOR-_!H8000_^1DONE2 STA-_!EQST3,I_^1DONE1 LDA-_!LWABUF,I_^1_%STA-_!ECCOR,I_'RESTORE LWA+1_^1_%JMP*_!(TSTBB)_'EXIT_^1SUPR_!NOP_]_^1_%AND-_!H00FF_)MASK CHR._^1_%IN€€A_"-$23_^1_%SAZ_"SUB40_'TEST CHR._^1_%INA_"-$1D_^1_%SAN_"1_^1SUB40 RAO-_!REJCNT,I_#INCREMENT REJECT COUNTER_^1_%INA_"$40_#RESTORE CHAR OR SET SUPER REJECT TO $40_^1RTN_"JMP*_!(SUPR)_^1*COMPARE INITIAL AND RESCAN BUFFERS_^1COMPAR ENA_"0_^1_%STA-_!REJCNT,I_)CLEAR REJECT FLAG_^1_%LDA-_!ECCOR,I_'LWA+1 OF RESCAN_^1_%SUB-_!BF2SAV,I_%FWA OF RESCAN_^1_%SUB-_!LWABUF,I_-LWA+1 OF INIT SCAN_^€€1_%ADD-_!BF1SAVE,I_,FWA OF INIT SCAN_^1_%SAZ_"EQLEN_1SKIP IF EQUAL LENGTHS_^1_%JMP*_!ENDTST_-NOT EQUAL - IGNORE READ_^1EQLEN LDA-_!BF1SAV,I_^1_%STA-_!WORD5B,I_)INITIAL SCAN FWA_^1_%LDA-_!BF2SAV,I_^1_%STA-_!WORD6B,I_)RESCAN FWA_^1BBLOOP LDA-_!WORD5B,I_^1_%SUB-_!LWABUF,I_)TEST FOR END_^1_%SAN_"1_^1_%JMP*_!ENDCOM_^1_%LDQ-_!WORD5B,I_^1_%LDA-_!(BASE),Q_^1_%LDQ-_!WORD6B,I_^1_%LDQ-_!(BAS€€E),Q_^1_%RTJ*_!BBRTN_^1_%STA-_!BBTMP1,I_)SAVE RIGHT CHAR_^1_%INA_"-$40_7TEST FOR REJECT_^1_%SAN_"1_:SKIP - NO_^1_%RAO-_!REJCNT,I_)SET FLAG_^1_%LDQ-_!WORD5B,I_^1_%LDA-_!(BASE),Q_^1_%LDQ-_!MODSAV,I_/IS MODE PACKED_^1_%QLS_"7_^1_%SQP_"BBNOPK_2NO-SKIP_^1_%QLS_"3_7YES-IS OLCC SET_^1_%SQP_"PACKA_3NO-SKIP_^1BBNOPK AND-_!HFF00_^1_%JMP*_!REPLAC_^1PACKA ALS_"8_^1_%LDQ-_!WORD6B,I_^1_%LDQ-_!(€€BASE),Q_^1_%QLS_"8_^1_%RTJ*_!BBRTN_^1_%INA_"-$40_7TEST FOR REJECT_^1_%SAN_"1_^1_%RAO-_!REJCNT,I_^1_%INA_"$40_8RESTORE_^1_%ALS_"8_^1REPLAC EOR-_!BBTMP1,I_"MERGE CHARACTERS_^1_%LDQ-_!WORD5B,I_^1_%STA-_!(BASE),Q_^1_%RAO-_!WORD5B,I_^1_%RAO-_!WORD6B,I_^1_%JMP*_!BBLOOP_^1ENDCOM EQU_"ENDCOM(*)_^1_%LDA-_!REJCNT,I_^1_%SAZ_"END2_^1_%JMP*_!ENDTST_^1END2_!JMP*_!CONSUP_#END RESCANS_^1BBRTN NOP€€_]_^1_%AND-_!H00FF_^1_%INA_"-$23_(TEST INITIAL SCAN FOR SUPR REJ._^1_%SAN_"NOTSUP_#NO - SKIP_^1_%INA_"$23_)RESTORE_^1_%JMP*_!(BBRTN)_^1NOTSUP INA_"$23_^1_%STA-_!BBTMP2,I_)SAVE CHAR_^1_%TRQ_"A_^1_%AND-_!H00FF_^1_%INA_"-$23_(TEST RESCAN FOR SUPR REJ._^1_%SAN_"RSNSUP_^1NOREPL LDA-_!BBTMP2,I_"YES_^1_%JMP*_!(BBRTN)_^1RSNSUP INA_"-$1D TEST FOR REJ._^1_%SAN_"1_^1_%JMP*_!NOREPL_$YES_^1_%I€€NA_"$40_)RESTORE_^1_%SUB-_!BBTMP2,I_)ARE CHARACTERS EQUAL_^1_%SAN_"1_^1_%JMP*_!NOREPL_$YES_^1_%LDA-_!BBTMP2,I_)NO_^1_%INA_"-$40_(IS INITIAL SCAN A REJ._^1_%SAZ_"2_^1_%ENA_"$23_>NO - MAKE SUPER REJECT_^1_%JMP*_!(BBRTN)_^1_%TRQ_"A_+YES-USE RESCAN CHR._^1_%AND-_!H00FF_^1_%JMP*_!(BBRTN)_^1REVMIR LDQ-_!EWES,I_^1_%ENA_"$1A_3CLEAR AND RE-ENABLE INT._^1_%OUT_"REJD2-*_^1_%LDA-_!OC1WD5,I_%TC€κ-IC_^1_%AND-_!H00FF_^1RM_#EOR-_!H8000_^1_%INQ_"2_^1_%OUT_"REJD2-*_/POSITION MIRROR_^1_%EOR-_!BUFBLD,I_^1_%STA-_!BUFBLD,I_^1_%LDA-_!ESTAT1,I_^1_%AND-_!H1FFF_^1_%STA-_!ESTAT1,I_^1_%JMP-_!(ADISP)_^1REJD2 NOP_]_^1_%JMP_"REJ_^1_%END_]_^__κPOCR955 CSY/ P€1_%NAM OCR955_'MSOS 4 955 DRIVER 2.0_1(CYB)_^1* COPYRIGHT CONTROL DATA CORPORATION 1975_^1****** OC955I IS THE INITIATOR ENTRY POINT_^1****** OC955C IS THE CONTINUATOR ENTRY POINT_^1_%ENT_"OC955I,OC955C_^1_%ENT_"OC955E_^1_%ENT_"WORD6_^1_%ENT_"MECH_^1_%ENT_"SETFLG_^1_%ENT_"INT_^1_%ENT_"OC5XBT_^1_%ENT_"READ_^1_%EXT_"OLCRTN_^1_%EXT_"ADEV_^1_%EXT_"INOL,OLC,OLCTYP_^1_%SPC_"4_^1********€€************************************_^1*_]_^1*_!COMMUNICATIONS REGION EQUATES_^1*_]_^1********************************************_^1_%SPC_"2_^1EBASE EQU_"EBASE(2)_^1_%EQU_"H0003(EBASE+2)_^1_%EQU_"H000F(EBASE+4)_^1_%EQU_"H003F(EBASE+6)_^1_%EQU_"H00FF(EBASE+8)_^1_%EQU_"H0400(EBASE+$2B)_^1_%EQU_"H2000(EBASE+$2E)_^1_%EQU_"H4000(EBASE+$2F)_^1_%EQU_"ZERO(EBASE)_^1_%EQU_"H100(EBASE+$29)€€_^1_%EQU_"H8000(EBASE+$30)_^1_%EQU_"H7FFF(EBASE+$F)_^1_%EQU_"HFF00(EBASE+$18)_^1_%SPC_"2_^1ADISP EQU_"ADISP($EA)_^1ACOMP EQU_"ACOMP($B6)_^1AFNR_!EQU_"AFNR($B5)_^1_%SPC_"3_^1EREQST EQU_"EREQST(8)_^1_%EQU_"EDCLK(4)_^1_%EQU_"ELU(5)_^1_%EQU_"ECCOR(10)_^1EPTR_!EQU_"EPTR(6)_^1EWES_!EQU_"EWES(7)_^1ESTAT1 EQU_"ESTAT1(9)_^1ELSTWD EQU_"ELSTWD(11)_^1ESTAT2 EQU_"ESTAT2(12)_^1EQTAB6 EQU_"EQTA€€B6(10)_^1EQTB11 EQU_"EQTB11(35)_^1EQST2 EQU_"EQST2(36)_^1EQST3 EQU_"EQST3(37)_^1EFLG_!EQU_"EFLG(16)_^1COUNT EQU_"COUNT(17)_^1OLCFLG EQU_"OLCFLG(18)_^1NOOLC EQU_"NOOLC(19)_^1AUTFLG EQU_"AUTFLG(31)_^1CKSMIN EQU_"CKSMIN(32)_^1CKSMOT EQU_"CKSMOT(33)_^1NUMWRD EQU_"NUMWRD(34)_^1_%SPC_"4_^1_%EJT_]_^1OC955I EQU_"OC955I(*)_$INITIATOR ENTRY_^1_%STQ-_!I_^1_%RTJ-_!(AFNR)_(GET NEXT REQUEST_€€^1_%JMP-_!(ADISP)_'NO MRE REQUESTS EXIT_^1_%ENA_"-1_,TURN OFF DIAGNOSTIC TIMER_^1_%STA-_!EDCLK,I_^1_%ENA_"0_^1_%STA-_!EQST2,I_'CLEAR DATA AND END OF OP SWITCH_^1_%STA-_!EQST3,I_'CLEAR DATA AND END OF OP SWITCH_^1_%STA-_!ESTAT1,I_%CLEAR READ SWITCH_^1_%STA-_!EFLG,I_(CLEAR CRITICAL COUNTER_^1_%STA-_!OLCFLG,I_%CLEAR OLC FLG IN CASE OF MASTER CLEAR_^1_%LDQ-_!EPTR,I_(GET REQUEST ADDRESS€€ +1_^1_%LDQ-_!10,Q_*GET REAL REQUEST ADDR._^1_%LDA-_!(ZERO),Q_%REQUEST CUDE WORD_^1_%AND-_!H100_*IS X BIT SET_^1_%STA*_!XBIT_^1_%SAZ_"NOX_^1_%TRQ_"A_-GET ADDRESS OF SIXTH WORD_^1_%INA_"5_^1_%STA*_!XBIT_^1NOX_"EQU_"NOX(*)_^1_%LDA-_!5,Q_+6TH WORD OF USERS REQUEST BLOCK_^1_%STA-_!ECCOR,I_^1_%STA*_!WORD6_'SAVE THE SIXTH WORD FOR LATER_^1_%LDA-_!4,Q_+5TH WORD OF USERS REQUEST BLOCK_^1_%€€STA*_!WORD5_'SAVE THE FIFTH WORD FOR LATER_^1_%AND-_!H000F_)SAVE THE CONTROLLER REQUEST CODE_^1_%SAZ_"PIGBAG_(CRC=0,ILLEGAL_^1_%INA_"-6_^1_%SAN_"2_-IF NOT AUTOLOAD_^1_%JMP_"AUTLOD_^1PIGBAG EQU_"PIGBAG(*)_^1_%SAP_"NORC_*CRC>6,ILLEGAL_^1_%INA_"5_^1_%STA*_!PTRSAV_^1_%RTJ*_!STATUS_(TAKE TARNSPORT AND EQUIPMENT STATUS_^1_%ALS_"3_^1_%SAP_"NSET_*IF EOF NOT SET_^1_%ENA_"1_-SET V FIELD_^1_%€€JMP_"SETFLG_(AND EXIT_^1PTRSAV NUM_"0_^1NSET_!EQU_"NSET(*)_^1_%LDQ*_!PTRSAV_(GET CRC_^1_%JMP*_!JCRC,Q_%GO TO PROPER ROUTINE_^1NORC_!EQU_"NORC(*)_'ILLEGAL REQUEST EXIT_^1_%ENA_"6_^1_%JMP_"SETFLG_^1OC5XBT EQU_"OC5XBT(*)_^1XBIT_!NUM_"0_^1*_#INITIALIZE_^1INT_"EQU_"INT(*)_^1_%LDA*_!WORD6_^1_%ADD*_!XBIT_*ABSOLUTIZE WORD 6_^1_%STA*_!WORD6_^1_%RTJ_"ILRQST_(SEE IF TABLE ADDR IS LEGAL_^1_%LD€€A*_!(WORD6)_!FIRST WORD OF PAARAMETER TABLE_^1_%ALS_"6_^1_%AND-_!H003F_)SAVE LENGTH OF TABLE_^1_%INA_"-1_$DECREASE COUNT BY 1 (PARAMETER TABLE LENGTH)_^1_%STA-_!COUNT,I_^1_%LDA*_!GOIN+1_#IS ON-LINE CORREC. PRESENT?_^1_%INA_"1_^1_%SAM_"CHK6_*NO_^1_%LDA-_!OLCFLG,I_%CHECK IF OLLCC HAS CALLED_^1_%SAN_"CHK6_*YES DO NOT CALL INOL_^1GOIN_!RTJ_"INOL_#YES, GO SAVE INFO_^1CHK6_!EQU_"CHK6(*)_€€^1_%LDA*_!(WORD6)_$FIRST WORD OF PARAMETER TABLE_^1_%ARS_"8_,BEGIN CHECK ON PARAMETER COMMAND_^1_%AND-_!H0003_^1_%SAN_"1_#IF PC=0 IT IS CLR FONT TBL_^1_%STA-_!COUNT,I_'SO SET COUNT = 0 ALSO_^1_%INA_"-2_#PC = 2 REQUIRES FURTHER CHECK_^1_%SAZ_"FONT_)FONT PARAMETER TABLE_^1REG_"JMP*_!OUTINT_"READY TO BEGIN TRANSFERRING TO BC_^1FONT_!EQU_"FONT(*)_^1_%LDQ-_!COUNT,I_^1_%LDA*_!(WORD6),Q_"€€WORD OF FONT TABLE_^1_%AND-_!H000F_^1_%INA_"-4_+CHECK FOR TERMINAL FIELD COORD._^1_%SAN_"NON4-*-1_$IS IT A TFC_^1_%LDA*_!(WORD6),Q_"LOAD TFC_^1_%AND-_!HFF00_)SAVE ONLY TFC BITS 15-8_^1_%ALS_"8_/MOVE TFC TO BITS 7-0_^1_%STA_"HOLD_^1_%INQ_"-1_^1_%LDA*_!(WORD6),Q_#PICK UP IFC_^1_%ALS_"8_/MOVE IFC TO BITS 7-0_^1_%AND-_!H00FF_)SAVE ONLY IFC_^1_%INA_"3_^1_%SUB*_!HOLD_#IFC+3 MINUS TFC_^1_€€%SAP_"ERR5_#SKIP IF IFC+3 IS GRTR OR EQ_^1NON4_!INQ_"-1_^1_%SQZ_"OUTINT-*-1_^1_%JMP*_!FONT+1_^1ERR5_!JMP*_!NORC_#GO TYPE ILLEGAL REQUEST AND TERMINATE_^1OUTINT EQU_"OUTINT(*)_^1_%RTJ*_!FN1_+CLEAR AND ENABLE INTERRUPTS - ALARM AND DAT_^1_%INQ_"1_#USE DIRECTOR 2 - PARAMETER MODE_^1_%RAO-_!EQST3,I_'SET INITIALIZE SWITCH FOR CONTINUATOR CHK_^1_%LDA*_!(WORD6)_'MODE WORD OF USERS REQUEST€€_^1_%SUB-_!H0400_)REDUCE COUNT BY 1 (PARAMETER TABLE LENGTH)_^1_%JMP*_!GTOUT_#GO OUTPUT AND EXIT TO DISP_^1OC5WD5 EQU_"OC5WD5(*)_^1WORD5 NUM_!$0_^1OC5WD6 EQU_"OC5WD6(*)_^1WORD6 NUM_!$0_^1************************************************************************_^1SETB14 NUM_"0_^1_%STA*_!STAT_!SAVE V FIELD SETTING_^1_%ALS_"13_,MODIFY FOR CHECK_^1_%SAP_"NTST-*-1 IF NOT SET DON'T SET€€ BIT 14 OF TABLE # 5_^1_%LDA-_!EREQST,I_%TABLE 5 IE DRIVER STATUS_^1_%EOR-_!H4000_)SET BIT 14 OF THIS TABLE_^1_%STA-_!EREQST,I_^1NTST_!JMP*_!(SETB14)_!RETURN_^1**********************************************************************_^1*_#LINE LOCATE_^1LL_#LDA*_!WORD5_#GET TMC IN 0-7 OF A_^1_%ARS_"4_^1_%SUB*_!WORD6_#SUBTRACT IMC_^1_%INA_"-4_#TMC-IMC-4_^1_%SAP_"LLOK-*-1_$COORD. OK_^1JN€€ORC JMP*_!NORC_#GO TYPE ILLEGAL RQST AND TERMINATE_^1LLOK_!EQU_"LLOK(*)_^1_%RTJ*_!FN1_+CLEAR AND ENABLE INTERRUPTS - ALARM AND DAT_^1_%INQ_"5_,D=6 LINE LOCATE FUNCTION_^1_%LDA*_!WORD5_'TMC_^1_%ALS_"4_^1_%AND-_!HFF00_^1_%ADD*_!WORD6_%IMC AND TMC_^1_%JMP*_!GTOUT_#GO OUTPUT AND EXIT TO DISP_^1**********************************************************************_^1********TABLE OF JU€€MPS TO GO TO PROPER ROUTINES********_^1JCRC_!JMP* INT_(INITIALIZE REQUEST D=2_^1_%JMP* LL_)LINE LOCATE REQUEST D=6_^1_%JMP*_!POSIS_#POSITION REQUEST D=3_^1_%JMP* MECH_'MECHANICAL REQUEST D=4_^1_%JMP* READ_'READ REQUEST D=5 FOR OUTPUT D=0 FOR INPUT_^1**********************************************************************_^1****************************************************€€******************_^1* EQUIPMENT AND TRANSPORT STATUS ROUTINE_^1STATUS NUM_"$0_^1_%LDQ-_!EWES,I_^1_%INQ_"1_^1_%INP_"1_^1_%NOP_"0_^1_%STA-_!EQTB11,I_^1_%INQ_"-1_^1_%INP_"1_^1_%NOP_"0_^1_%STA-_!ESTAT2,I_%SAVE EQUIPMENT STATUS_^1_%JMP*_!(STATUS)_^1************************************************************************_^1****************************************************************€€********_^1*_#POSITION_^1POSIS EQU_"POSIS(*)_^1_%RTJ*_!FN1_+CLEAR AND ENABLE INTERRUPTS - ALARM AND DAT_^1_%LDA*_!WORD5_#I AND M OF POSITION RQST_^1_%AND* X00E0 SAVE THE ABOVE ONLY_^1_%ALS_"8_#MOVE I AND M TO BITS 15 - 13_^1_%ADD* WORD6_$ADD MC AND CNT._^1_%INQ_"2_,D=3_^1GTOUT EQU_"GTOUT(*)_^1_%STA*_!SNDA_^1_%ENA_"$3C_+SET DIAGNOSTIC TEMER_^1_%STA-_!EDCLK,I_^1_%LDA*_!SNDA_^1_%€€OUT_"REJ-*_)OUTPUT FUNCTION_^1_%JMP-_!(ADISP)_'EXIT TO DISPATCHE AND WAIT FOR INTERUPT_^1_%SPC_"2_^1********************************************_^1*DIAGNOSTIC TIMEOUT ROUTINE_^1********************************************_^1_%SPC_"2_^1OC955E STQ-_!I_Q031576_^1_%ENA_"-1_,TURN OFF TIMER_5031576_^1_%STA-_!EDCLK,I_^1_%ENA_"7_-SET UP ERROR V-FIELD_^1_%JMP*_!SETFLG_^1SNDA_!NUM_"0_^1*****€€*******************************************************************_^1**********************************************************************_^1*_#MECHANICAL_^1MECH_!EQU_"MECH(*)_^1_%LDA*_!WORD6_^1_%AND*_!HF0_+SAVE ACT_^1_%INA_"-$40 OLCC MESSAGE REQUESTED_^1_%SAN_"M001 NOT OLCC MSG, CONTINUE_^1_%LDA*_!RDCC+1 IS OLCC MODULE IN CORE_^1_%INA_"1_^1_%SAM_"2_"NO, SKIP IT_^1RDCC_!RTJ_"O€€LCTYP_!GO OUTPUT OLCC #_^1_%JMP*_!PRECMP_!GO TO PRE-COMPLETION_^1M001_!INA_"$40_!RESTORE VALUE_^1_%ALS_"8_#MOVE TO BITS 15 - 12_^1_%INA_"$1A_*CLEAR AND ENABLE_^1_%LDQ-_!EWES,I_(E00 AND ALARM INTERRUPTS_^1_%IIN_"0_-DISABLE INTERRUPTS_^1_%INQ_"3_,D=4_^1_%JMP*_!GTOUT_#GO OUTPUT AND EXIT TO DISP_^1**********************************************************************_^1*_#READ_]_^1READ€€_!EQU_"READ(*)_^1_%LDA*_!WORD6_)ABSOLUTIZE WORD 6_^1_%ADD*_!(AXBIT)_^1_%STA*_!WORD6_^1_%STA*_!HOLD_#SAVE FOR FURTHER CK_^1CKADR RTJ+_!ILRQST_#SEE IF PBA IS LEGAL_^1_%RAO*_!HOLD_#INCREM TO PICK UP FWA_^1_%LDA*_!(AXBIT)_^1_%SAZ_"1_-IF NOT SET_^1_%LDA*_!HOLD_^1_%ADD*_!(HOLD)_^1_%STA* (CORE),I PUT FWA IN EQTAB6_^1_%STA-_!ELSTWD,I_%STORE FWA IN ELSTWD**** NOTE MEANING HAS CH_^1_%STA_€€"CKBLK+1 SAVE USER BUFFER FWA CCN 1755DRI21-001_^1_%RTJ*_!(CKADR+1)_#SEE IF FWA IS LEGAL_^1_%LDA*_!(WORD6)_$COORDINATES_^1_%ENQ_"0_,CLEAR Q FOR A SHIFT_^1_%LLS_"8_,TMC IN BITS 0-7 OF Q, IMC IN BITS 15-8 OF_^1_%ALS_"8_#IMC TO 0-7 OF A_^1_%STQ*_!HOLD_#SAVE TMC_^1_%INA_"3_#IMC+3 MINUS TMC_^1_%SUB*_!HOLD_^1_%SAM_"OUTRD_#SKIP IF LESS THAN TMC_^1JNORC1 JMP*_!JNORC_#GO TYPE ILLEGAL RQST€€ AND TERMINATE_^1OUTRD RTJ*_!FN1_!CLEAR AND ENABLE INTS_^1_%LDA-_!ESTAT1,I_^1_%ADD-_!H8000_^1_%STA-_!ESTAT1,I_^1_%LDA*_!(WORD6)_$COORDINATES_^1_%INQ_"4_,D=5 FOR READ_^1_%JMP*_!GTOUT_#GO OUTPUT AND EXIT TO DISP_^1************************************************************************_^1STAT_!NUM_"$0_#WILL CONTAIN V FIELD SETTING AT COMPLETION_^1************************************€€**********************_^1X00E0 NUM_"$E0_^1HF0_"NUM_"$F0_^1******************************************************************_^1* COMPLETION ROUTINE_^1***********************************************************************_^1*_0DEVICE REJECT ROUTINE_^1REJ_"NUM_"$0B00_^1_%JMP*_!OC955E+1_%GO TO DIAGNOSTIC TIMEOUT ROUTINE_"031576_^1*****************************************************€€*******************_^1HOLD_!NUM_"0_^1AXBIT ADC_"XBIT_^1_%SPC_"4_^1FN1_"NOP_"0_-CLEAR AND ENABLE INTERRUPTS - ALARM AND DAT_^1_%LDQ-_!EWES,I_(GET DIRECTOR FN 1_^1_%ENA_"$1E_+SET CLEAR INTERRUPTS - ENABLE ALARM , E00,_^1_%OUT_"REJ-*_)OUTPUT FUNCTION_^1_%JMP*_!(FN1)_)RETURN_^1_%SPC_"3_^1PRECMP CLR_"A_^1SETFLG RTJ*_!SETB14_!FIND OUT IF BIT 14 OF TABLE MUST BE SET_^1CMPCNT ENA_"2_"CLEA€€R 955 INTERRUPTS_^1_%LDQ-_!EWES,I_"D=1 COUPLER MODE_^1_%OUT_"REJ-*_!CLEAR AND ENABLE INTERRUPTS_^1CMPBPS EQU_"CMPBPS(*)_!RETURN HERE IF NON-INTERRUPT REQUEST_^1_%LDA*_!STAT_*V-FIELD IN A_^1_%LDQ-_!OLCFLG,I_%CHECK IF OLCC HAS CALLED DRIVER_^1_%SQZ_"EX955_)NO SO COMPLEE REQUEST_^1_%JMP_"OLCRTN_(YES SO RETURN TO OLCC_^1EX955 EQU_"EX955(*)_^1_%ALS_"13_^1_%SAP_"GOCOMP_(IF V FIELD .LT. €€4_^1_%LDQ-_!EWES,I_^1_%ENA_"1_-CLEAR CONTROLLER_^1_%OUT_"REJ-*_^1_%LDA*_!STAT_*COMBINE LU AND ERROR CODE_^1_%LDQ-_!ELU,I_^1_%QLS_"6_^1_%EAQ_"Q_^1_%JMP_"ADEV_^1GOCOMP EQU_"GOCOMP(*)_^1_%STA-_!ESTAT1,I_^1_%LDA-_!ECCOR,I_^1_%STA-_!ELSTWD,I_^1_%RTJ-_!(ACOMP)_'COMPLETION PROCESSING_^1_%JMP_"OC955I+1_%HONOR NEXT REQUEST_^1_%EJT_]_^1_%SPC_"3_^1*********************************************€€****************_^1*************************************************************_^1*_#CONTINUATOR_^1**********************************************************************_^1X2140 NUM_"$2140_%MASKING TOOL FOR CHECKING STATUS_^1CORE_!ADC_"EQTAB6_^1OC955C NUM_"$0_$CONTINUATOR ADDRESS_^1GT955 EQU_"GT955(*)_^1_%ENA_"-1_,TURN OFF DIAGNOSTIC TIMER_^1_%STA-_!EDCLK,I_^1_%RTJ*_!STATUS_%TAK€€E EQUIPMENT AND TRANSPORT STATUS_^1_%LDQ-_!ESTAT1,I_%CHECK TO SEE IF THIS IS A READ INTERRUPT_^1_%SQM_!RD-*-1_^1_%LDQ-_!EQST3,I_'CHECK TO SEE IF THIS IS AN INIT FN_^1_%SQN_"JINIT_#IT IS AN INITIALIZE FUNCTION_^1_%JMP*_!CKINT_)THIS WAS NOT A READ OR INITIALIZE FUNCTION_^1JINIT JMP*_!INTIAL_(GO PROCESS THE INITIALIZE FUNCTION_^1RD_#EQU_"RD(*)_^1_%AND*_!X0058_^1_%SAN_"1_^1_%JMP*_!GT9€€55_^1_%LDQ-_!EWES,I_^1_%INQ_"-1_+D=0 DATA INPUT MODE_^1_%LDA*_!(CORE),I_#CORE ADDRESS FOR STORING_^1_%STA*_!DATA+1_^1_%INP_"DREJ-*_'GET RID OF WORD COUNT_^1_%RAO-_!EQST2,I_'IF THIS FAR WE HAVE DATA SO SET SWITH_^1INPUT INP_!DREJ-*_$WILL REJECT WHEN DATA IS UNAVAILABLE!_^1DATA_!STA+ $0_$TWO WORD FOR UPDATED ADDRESS FOR CORE STORAGE_^1_%RAO*_!DATA+1_$INCREMENT STORAGE AREA_^1_%JMP*€€ INPUT_)LOOP UNTIL REJECTED_^1DREJ_!NUM_"$B00_#UPDATE EQTAB6 WITH LWA+1 FOR STATUS RQST_^1_%RTJ_"STATUS_^1_%ALS_"9_^1_%SAP_"SETDAT_(IF LOST DATA NOT SET_^1_%ALS_"2_^1_%SAP_"SEL955_(IF EOP NOT SET_^1SETDAT LDA*_!DATA+1_^1_%STA*_!(CORE),I_^1_%JMP*_!GTSTAT_^1SEL955 RTJ*_!FN1_!YES, RE-SELECT INTERRUPTS_^1_%JMP*_!GODISP_^1GTSTAT LDA-_!ESTAT2,I_!955 STAT_^1_%ALS_"11_$CHECK FOR END OF OP€€_^1_%SAM_"SHIFT5_^1GODISP EQU_"GODISP(*)_^1_%ENA_"$3C_+SET DIAGNOSTIC TIMER_^1_%STA-_!EDCLK,I_^1_%JMP-_!(ADISP)_^1SHIFT5 ALS_"5_"RESTORE STATUS_^1_%AND*_!X2140_0MIRROR FAULT/AUTO/LOST DATA_^1_%SAZ_"CKDATA_#SKIP - NONE ARE SET_^1_%JMP*_!SKALRM_#YES, SET - GO CHECK_^1X0058 NUM_"$58_^1CKDATA EQU_"CKDATA(*)_^1_%LDA-_!EQST2,I_'CHECK DATA SWITCH_^1_%SAN_"CHREJ_(NON ZERO MEANS DATA IS UP€€_^1SETV3 EQU_"SETV3(*)_^1_%ENA_"3_-V-FIELD = 3 = NO DATA_^1_%JMP*_!SETFLG_/GO TO COMPLETION WITH V FIELD SET TO_^1CHREJ EQU_"CHREJ(*)_^1_%LDA-_!ESTAT2,I_%EQUIPMENT STATUS_^1_%ALS_"5_#IS CHAR REJECT SET_^1_%SAP_"SKEW-*-1_^1_%LDA*_!GOOLC+1_#GO TO ON LINE CORREC. MODULE IF PRESENT_^1_%INA_"1_^1_%SAM_"SETV2_^1_%LDA-_!OLCFLG,I_%CHECK IF OLCC HAS CALLED_^1_%SAN_"SETV2_)YES SO SKIP_^1GO€€OLC RTJ_"OLC_^1_%JMP*_!SETFLG_^1SETV2 EQU_"SETV2(*)_^1_%ENA_"2_-V-FIELD = 2 - SKEW/REJECTS_^1PALS2 JMP*_!SETFLG_#A-REGISTER CONTAINS V-FIELD_^1SKEW_!ALS_"11_$SKEW STATUS_^1_%SAP_"SUC-*-1_^1_%JMP*_!SETV2_#GO SET V = 2_^1SUC_"JMP*_!BLANKC GO CHECK FOR BLANK LINE CCN 1755DRI21-001_^1************************************************************************_^1INTIAL EQU_"INTIAL(*)_^1€€_%LDQ-_!COUNT,I_^1_%SQZ_"PARAM_#COUNT EQUALS ZERO?_^1_%LDQ-_!EQST2,I_'DETERMINE IF THIS IS 1ST TIME THROUGH_^1_%SQN_"PARAM_*NON ZERO MEANS NOT 1ST TIME_^1_%ENQ_"1_#PRESET Q INDEX FOR PARAMETER OUTPUT_^1_%STQ*_!DATA+1_#SAVE IN HOLD AREA_^1INTOUT LDA_"(WORD6),Q_#PICK UP WORD OF PARAM TBL_^1_%LDQ-_!EWES,I_(GET DIRECTOR FN 1_^1_%INQ_"-1_+DIRECTOR EQUALS A ZERO_^1_%OUT_"REJLOS-*_!CK LOS€€T DATA_^1PARAM RTJ_"STATUS_*UPDATE STATUS_^1_%ALS_"10_3ALARM BIT_^1_%SAP_"1_^1_%JMP*_!SKALRM_!ALARM IS SET_^1DONE_!ALS_"1_0SEE IF END OF OP IS UP_^1_%SAP_"1_^1_%JMP*_!ALLOK_"YES, SUCCESSFUL OPERATION_^1_%LDA-_!COUNT,I_'CK TO SEE IF ALL WORDS SENT_^1_%SAZ_"NTDNE-*-1_$ZERO IF IT'S A CLEAR TABLE_^1_%SUB*_!DATA+1_#HAVE ALL WORDS BEEN SENT_^1_%SAZ_"NTDNE_#YES_^1_%RAO*_!DATA+1_#NO, INCR€€EM INDEX_^1_%LDQ*_!DATA+1_^1_%JMP*_!INTOUT_#AND SEND NXT WORD_^1NTDNE EQU_"NTDNE(*)_^1_%RAO-_!EQST2,I_'SET END OP SWITCH_^1_%JMP*_!GODISP_#GO TO DISP EXIT_^1REJLOS NOP_"0_^1_%RTJ_"STATUS_^1_%ALS_"9_"LOST DATA SET_^1_%SAP_"1_!NO, ERROR_^1_%JMP*_!SEL955_!YES, SELECT INTERRUPTS_^1_%JMP_"REJ_"ERR7_^1************************************************************************_^1*_#CONTINUA€€TOR FOR ALL INTERRUPTS OTHER THAN READ_!*_^1SKALRM EQU_"SKALRM(*)_^1_%LDA-_!ESTAT2,I_%PICK UP STATUS_^1CKINT LLS_"10_#IS ALARM PRESENT_^1_%SAM_"ALRM_#YES_^1ALLOK JMP_"PRECMP_(NO--GO SET OPERATION OK_^1ALRM_!LRS_"3_(AUTOLOAD REQUIRED_^1_%SAP_"1_^1_%JMP*_!MCHRDY_"YES, GO SET V-FIELD_^1_%LRS_"3_#SEE IF LINE LOCATE FAILURE_^1_%STA_"HOLD_*SET LINE LOCATE SWITCH_^1MF_#LRS_"2_*MIRROR FA€€ULT DETECTED_^1_%SAM_"NOSORT-*-1_)DOCUMENT NOSORT OR A MIRROR FAULT_^1_%ALS_"7_$LOST DATA STATUS_^1_%SAM_"V6_%MINUS IF LOST DATA/GO SET V FIELD TO 6_^1_%LRS_"1_(CHECK FOR DOCUMENT NO SORT_^1_%SAP_"1_^1_%JMP*_!SETV3_#SET V-FIELD = 3_^1_%LDA_"HOLD_!IS LINE LOCATE FAILURE SET_^1_%SAM_"1_#YES_^1_%JMP*_!ALLOK_#NO_^1_%JMP*_!SETV2_#YES, SET V=2_^1NOSORT LDA-_!EQTB11,I_%PICK UP TRANSPORT S€€TATUS_^1_%ALS_"6_#HAS MECH READY DROPPED_^1MCHRDY SAM_"AUTO_#YES - GO SET V_^1_%ALS_"15_#SEE IF DOCUMENT LNGTH FAULT_^1_%SAP_"V6-*-1_"IF POSITIVE IT'S A PARAMETER OR MIRRROR FAULT_^1_%ENA_"5_-SET V-FIELD TO 5 - DOCUMENT LENGTH FAULT_^1_%JMP*_!PALS2_$GO BACK TO COMPLETION_^1V6_#EQU_"V6(*)_^1_%ENA_"6_-SET V-FIELD TO 6_^1_%JMP*_!PALS2_^1AUTO_!EQU_"AUTO(*)_^1_%ENA_"4_-SET V=4_^1_%JMP*_€€!PALS2_^1*THIS SETS V FIELD TO SIX ON THE FOLLOWING CONDITIONS!_^1*_#1) PARAMETER FAULT_^1*_#2) MIRROR FAULT_^1*_+A) USER ERROR (ILLEGAL CORDINATES)_^1*_+B) 955 ERROR_^1*_11) OUT OF SCAN AREA_^1*_12) MIRROR STOP FAULT_^1*_13) MIRROR VELOCITY FAULT_^1*_,C) LOST DATA_^1****************************************_^1ILRQST NOP_"0_(ROUTINE FOR CHECKING VALIDITY OF ADDRESSES_^1_%INA€€_"-1_'ADD 1 TO ADDRESS SO TOP OF SYSTEM WILL BE VALID_^1_%STA*_!ILLHD_#HOLD ONTO THE ADDRESS + 1_^1_%LDA-_!EREQST,I_%SEE IF RQST FROM PROT OR UNPORTECTED_^1*_5CORE. IF FROM PROTECTED CORE NO FUTHER CHECKING_^1*_5IS MADE. IF FROM UNPROTECTED CORE THE ADDRESS IS_^1*_5TESTED AGAINST THE FIRST AVAILAABLE LOCATION_^1*_5AVAILABLE TO THE USER AND IF THE USERS ADDRESS IF_^1*_5IN FACT LES€€S THE SYSTER WILL BE FORCED TO TYPE_^1*_5OUT AND ILLEGAL REQUEST MESSAGEE AND RETURN TO A_^1*_5'READY' CONDITION._^1_%ALS_"15_'THIS BIT TELLS WHETHER REQUEST CAME FROM PROTECT_^1*_5OR UNPROTECTED CORE._^1_%SAM_"EXIL_#PROTECTED - EXIT_^1_%LDA-_!OLCFLG,I_%CHECK IF OLCC CALLED_^1_%SAN_"EXIL_*IF YES BYPASS CHECK_^1_%LDA-_!$F7_%LOWEST UNPROTED LOCATION -1_^1_%SUB*_!ILLHD_#SUBTRACT CONE€€NTS OF F7 FROM THE ADDRESS OF THE_^1*_5USER'S TABLE._^1_%SAP_"ILEG_^1_%LDA*_!ILLHD_^1_%SUB-_!$F6_+IS IT GT TOP OF UNPORTCED_^1_%INA_"1_^1_%SAP_"ILEG_^1EXIL_!JMP*_!(ILRQST)_#RETURN_^1ILEG_!JMP_"NORC_^1**************************************************************_^1ILLHD NUM_"$0_'TEMPORY HOLD OF USER'S TABLE ADDRESSES_^1**************************************************************€€**********_^1BLANKC LDA_"DATA+1_(PICK UP DATA LWA+1_^1CKBLK SUB_"=N$0 SUBTRACK DATA FWA CCN 1755DRI21-001_^1_%TCA_"Q USE NEG. NUM. WDS AS INDEX CCN 1755DRI21-001_^1GETWD LDA_"(DATA+1),Q_"PICK UP A DATA WORD_^1_%SUB-_!H2000_)IS IT BLANK WITH FILL_^1_%SAZ_"BLNK1 YES, GO CHECK NEXT WORD CCN 1755DRI21-001_^1_%INA_"-$20 PACKED BLANKS? CCN 1755DRI21-001_^1_%SAZ_"BLNK1 YES_"CCN 1€€755DRI21-001_^1_%ADD-_!H2000_)NO UNPACKED BLANKS_^1_%SAN_"NOTBLK LINE NOT BLANK CCN 1755DRI21-001_^1BLNK1 INQ_"1 INCREMENT TABLE INDEX BY 1 CCN 1755DRI21-001_^1_%SQZ_"GOSET3 BLANK LINE, SET V-FIELD=3 CCN 1755DRI21-001_^1_%JMP*_!GETWD CONTINUE SEARCHING FOR BLANKS CCN 1755DRI21-001_^1NOTBLK JMP*_!ALLOK GO TO COMPLETION CCN 1755DRI21-001_^1GOSET3 JMP*_!SETV3 SET V-FIELD=3 FOR€€ BLANK LINE CCN 1755DRI21-001_^1**********************************************************_^1*_]_^1* AUT955 - THIS ROUTINE HANDLES THE AUTOLOAD FUNCTION FOR THE_^1*_)955-FF104 BUFFER CONTROLLER AFTER AUTOLOAD IS COMPLETE_^1*_)THE DATA SENT TO THE BC IS CHECKSUMMED TO INSURE_^1*_)ACCURACY OF TRANSMISSION_^1*_]_^1**********************************************************_^1_%SPC_"4_^€€1AUTLOD EQU_"AUTLOD(*)_^1_%LDA-_!AUTFLG,I_*FIRST TIME THROUGH_^1_%SAN_"CNTAUT_-NO,CONTINUE_^1_%STA-_!CKSMIN,I_*CLEAR INPUT CHECKSUM_^1_%STA-_!CKSMOT,I_*CLEAR OUTPUT CHECKSUM_^1_%LDQ-_!EWES,I_^1_%INQ_"8_2955 DIRECTOR 9, AUTOLOAD CONTROL MODE_^1_%OUT_"AREJ-*_^1_%SET_"A_^1_%STA-_!AUTFLG,I_*SET AUTOLOAD FLAG NON-ZERO_^1_%LDA_"OC5WD6_(ABSOLUTIZE WORD 6_^1_%ADD_"XBIT_^1_%STA_"OC5WD6_^1CN€€TAUT LDQ_"OC5WD6_^1_%LDA-_!1,Q_/GET NUMBER OF WORDS_^1_%SAN_"1_^1_%JMP*_!TKSUM_-ZERO LENGTH RECORD, END OF TRANSMISSION_^1_%TCA_"A_^1_%ADD-_!H7FFF_^1_%INA_"1_^1_%STA-_!NUMWRD,I_^1_%LDA_"(OC5WD6)_+PICK UP DISTANCE OF BUFFER_^1_%AAQ_"A_2ADD ADDRESS OF PARAMETER BLOCK_^1_%AND-_!H7FFF_-SAVE 15-BIT ADDRESS_^1_%STA_"OC5WD6_^1_%LDQ-_!EWES,I_^1_%INQ_"7_2955 DIRECTOR 8, AUTOLOAD DATA MODE_^€€1OUTDAT LDA_"(OC5WD6)_$PICK UP A WORD_^1_%OUT_"AREJ-*_^1_%ADD-_!CKSMOT,I_*ADD IT TO CHECKSUM_^1_%STA-_!CKSMOT,I_^1_%SOV_"0_2CLEAR OVERFLOW_^1_%RAO-_!NUMWRD,I_*INCREMENT WORD COUNT_^1_%RAO_"OC5WD6_-INCREMENT BUFFER POINTER_^1_%SOV_"1_2SKIP IF DONE_^1_%JMP*_!OUTDAT_,CONTINUE OUTPUTTING DATA_^1_%CLR_"A_^1_%JMP*_!GORTN1_,SET V=0 AND EXIT_^1_%SPC_"2_^1* DEVICE REJECT ROUTINE_^1_%SPC_"2_€€^1AREJ_!NOP_"0_^1_%CLR_"A_^1_%STA-_!AUTFLG,I_*CLEAR AUTOLOAD FLAG IN CASE OF FAILURE_^1_%ENA_"7_^1_%JMP*_!GORTN1_,EXIT V=7_^1_%SPC_"4_^1**************************************************************_^1* TKSUM - COMPUTES CHECKSUM AT END OF AUTOLOAD BY INPUTTING_^1*_(THE DATA JUST SENT TO THE BC. COMPARES OUTPUT_^1*_(CHECKSUM TO INPUT CHECKSUM AND IF EQUAL, SETS V=0_^1*_(TO INDICATE€€ SUCCESSFUL AUTOLOAD. IF CHECKSUM ERROR_^1*_(V IS SET TO 4._^1**************************************************************_^1_%SPC_"4_^1TKSUM ENA_"1_^1_%LDQ-_!EWES,I_,955 DIRECTOR 1_^1_%OUT_"AREJ-*_-CLEAR CONTROLLER_^1_%INQ_"1_2955 DIRECTOR 2_^1_%LDA_"=N$A40_-OUTPUT PARAM MODE WORD (CNT=2)_^1_%NOP_"0_^1_%OUT_"-1_^1_%INQ_"-1_1955 DIRECTOR 1_^1INPSTA INP_"AREJ-*_'INPUT 955 STATUS€€ 1_^1_%ALS_"12_1DATA READY_^1_%SAM_"1_2YES,CONTINUE_^1_%JMP*_!INPSTA_,NO,WAIT_^1_%INQ_"-1_1955 DIRECTOR 0_^1INPSUM CLR_"A_^1_%INP_"ENDSUM-*_+INPUT A WORD_^1_%ADD-_!CKSMIN,I_*COMPUTE NEW CHECKSUM_^1_%STA-_!CKSMIN,I_^1_%JMP*_!INPSUM_^1ENDSUM CLR_"A_^1_%STA-_!AUTFLG,I_*CLEAR AUTOLOAD FLAG_^1_%LDA-_!CKSMOT,I_^1_%EOR-_!CKSMIN,I_*COMPARE CHECKSUMS_^1_%SAN_"ERR4_/IF UNEQUAL_^1_%JMP*_!GORT€žN1_,AUTOLOAD SUCCESSFUL_^1ERR4_!ENA_"2_!SET V FIELD OF 2_^1GORTN1 STA-_!ESTAT1,I_#SET V FIELD_^1_%RTJ_"SETB14_^1_%JMP_"CMPBPS_#GO TO COMPLETION_^1_%END_]_^__žPCOR955 CSY/ P€1_'NAM COR955_'MSOS 4 955 OLCC MOD 2.0 06/23/75_^1*COPYRIGHT CONTROL DATA CORPORATION 1975_^1_%ENT_"INOL,OLCTYP,OLCRTN,OLC_^1_%EXT_"WORD6_^1_%EXT_"MECH_^1_%EXT_"READ_^1_%EXT_"INT_^1_%EXT_"OC5XBT_^1_%EXT_"SETFLG_^1_%SPC_"3_^1*****************************************_^1*_]_^1* LOW CORE CONSTANTS_^1*_]_^1*****************************************_^1_%SPC_"2_^1DISP_!EQU_"DISP($EA)_^1EB€€ASE EQU_"EBASE(2)_^1ZERO_!EQU_"ZERO(EBASE)_^1LPMASK EQU_"LPMASK(EBASE)_^1ONEBIT EQU_"ONEBIT(EBASE+$21)_^1HF_#EQU_"HF(EBASE+4)_^1HFFF0 EQU_"HFFF0(EBASE+$14)_^1HFF00 EQU_"HFF00(EBASE+$18)_^1H00FF EQU_"H00FF(EBASE+8)_^1H000A EQU_"H000A(EBASE+$44)_^1_%SPC_"4_^1*****************************************_^1*_]_^1*_!PHSYTAB EQUATES USED BY OLCC_^1*_]_^1********************************€€*********_^1_%SPC_"2_^1EPTR_!EQU_"EPTR(6)_^1ECCOR EQU_"ECCOR(10)_^1ELSTWD EQU_"ELSTWD(11)_^1EQTB12 EQU_"EQTB12(36)_^1EQTB13 EQU_"EQTB13(37)_^1ESTAT1 EQU_"ESTAT1(9)_^1ESTAT2 EQU_"ESTAT2(12)_^1ERTN_!EQU_"ERTN(15)_^1COUNT EQU_"COUNT(17)_^1OLCFLG EQU_"OLCFLG(18)_^1NOOLC EQU_"NOOLC(19)_^1RVBFLG EQU_"RVBFLG(20)_^1AORDIN EQU_"AORDIN(21)_^1QORDIN EQU_"QORDIN(22)_^1REJCNT EQU_"REJCNT(23)€€_^1SAVWRD EQU_"SAVWRD(24)_^1ACCUM EQU_"ACCUM(25)_^1OLCALM EQU_"OLCALM(26)_^1QMASK EQU_"QMASK(27)_^1IN8WD0 EQU_"IN8WD0(28)_^1IN8WD8 EQU_"IN8WD8(29)_^1CHRCNT EQU_"CHRCNT(30)_^1_%EJT_]_^1************************************************************************_^1* COR955-IS AN OPTIONAL MODULE USED WITH THE MSOS 955_0*_^1*_(DRIVER TO PERFORM ON-LINE CHARACTER CORRECTION_.*_^1*_(ON EN€€TRY TO COR955 VIA OLCTYP, "OLCC #" IS TYPED_,*_^1*_(AND A 3-DIGIT DECIMAL NUMBER DEFINING THE MAX_/*_^1*_(NUMBER OF REJECTS THAT MAY BE CORRECTED ON A LINE_+*_^1*_(IS INPUT FOLLOWED BY A CARRIAGE RTN. SUBSEQUENTLY_+*_^1*_(IF THE ACTUAL NO. OF REJECTS ON A LINE EXCEED THAT_**_^1*_(NUMBER, NO OLCC WILL BE PERFORMED ON THAT LINE_.*_^1***************************************************€€*********************_^1_%SPC_"2_^1************************************************************************_^1* INOL-THIS ROUTINE SAVES THE NECESSARY INFORMATION FROM_-*_^1*_%THE USER'S INITIALIZE REQUEST (SCAN MODE AND CHARACTER_(*_^1*_%MODE). IT ALSO CHECKS FOR AND SAVES THE STATE OF_-*_^1*_%THE REVERSE BUFFER BIT IN ID=D OF THE CONTROL_0*_^1*_%PARAMETER TABLE._N*_^1***********€€*************************************************************_^1INOL_!NOP_"0_*EXIT TO CALLER_^1_%LDQ_"WORD6_^1_%LDA-_!(ZERO),Q_%PICK UP ID=0 WORD IF INITIALIZE_^1_%AND-_!LPMASK+8_$SAVE BITS 7-0_^1_%ADD_"=N$0B00_(SET CNT=2 PC=3_^1_%STA-_!IN8WD0,I_%SAVE ID=0 MODE FOR FUTURE OLCC_^1_%LDA-_!(ZERO),Q_%GET ID=0 WORD AGAIN_^1_%ARS_"8_^1_%AND-_!LPMASK+2_#SAVE BITS 1-0_^1_%INA_"-1_"PC=1, CO€€NTROL PARM. TABLE_^1_%SAZ_"CNTBL_*YES, CHECK FOR ID=D_^1_%INA_"-2_^1_%SAZ_"CNTBL_^1_%JMP*_!(INOL)_(NOT CONTROL PARM TABLE, EXIT BACK TO DRIVER_^1CNTBL ADQ-_!COUNT,I_'PLUS PARM WORD COUNT_^1DWORD LDA-_!(ZERO),Q_%PICK UP NEXT TABLE ENTRY_^1_%AND-_!LPMASK+4_$ISOLATE ID NUMBER_^1_%INA_"-$D_,IS IT AN ID=D WORD?_^1_%SAZ_"GOTD_*YES, CHECK REVERSE BUFFER BIT_^1_%INQ_"-1_-DECREMENT TABLE €€INDEX BY 1_^1_%LDA_"WORD6_)IS SEARCH COMPLETE_^1_%EAQ_"A_^1_%SAZ_"CLRIT_)IF GOT ALL PARM WORDS_^1_%JMP*_!DWORD_)CONTINUE SEARCH_^1GOTD_!LDA-_!(ZERO),Q_^1_%AND-_!ONEBIT+7_%CHECK REVERSE BUFFER BIT_^1_%SAZ_"CLRIT_$REVERSE BUFFER BIT NOT SET_^1_%RAO-_!RVBFLG,I_%ITS ON, SET REVERSE BUFFER_^1EXINOL JMP*_!(INOL)_!EXIT BACK TO DRIVER_^1CLRIT CLR_"A_^1_%STA-_!RVBFLG,I_#CLEAR REVERSE BUFFE€€R FLAG_^1_%JMP*_!EXINOL_#EXIT TO CALLER_^1_%SPC_"2_^1************************************************************************_^1* OLCTYP - THIS ROUTINE TYPES OUT "OLCC#" ONE TIME_3*_^1*_*AT THE BEGINNING OF A RUN AND REQUESTS A_2*_^1*_*3-DIGIT NUMBER DEFINING THE MAXIMUM NUMBER_/*_^1*_*OR ALLOWABLE REJECTS/LINE TO BE CORRECTED._0*_^1*_*CALLED BY DR955 READ INITIATOR_<*_^1*********€€***************************************************************_^1_%SPC_"2_^1OLCTYP NOP_"0_(RETURN TO CALLER_^1_%LDA-_!(ZERO),I_%SET COMPLETION PRIORITIES_^1_%AND-_!HF_,OF TTY REQUESTS USING DRIVER_^1_%STA*_!BUFIN_)PRIORITY TAKEN FROM PHYSTAB_^1_%LDA*_!TYNFWA_^1_%AND-_!HFFF0_^1_%ADD*_!BUFIN_^1_%STA*_!TYNFWA_^1_%LDA*_!INQRQS_^1_%AND-_!HFFF0_^1_%ADD*_!BUFIN_^1_%STA*_!INQRQS_^1_%LDA-_€€!I_$PICK UP PHYSTB DEVICE TABLE ADDR._^1_%STA*_!IHOLD_#SAVE IT_^1TYPOUT RTJ-_!($F4)_"TYPE OUT OLCC #_^1_%NUM_"$C33_^1_%ADC_"COMP_^1_%NUM_"0_^1_%NUM_"$18FC STANDARD OUTPUT COMMENT DEVICE_^1_%NUM_"3_.3 WORDS_^1_%ADC_"OLCCON_^1_%JMP-_!(DISP)_^1OLCCON ALF_"3,OLCC#_^1COMP_!LDA*_!IHOLD_$RESTORE I-REGISTER_^1_%STA-_!I_^1_%SET_"A_$SET INPUT BUFFER TO FFFF_^1_%STA*_!BUFIN_^1TYPIN RTJ-_!($€€F4)_#INPUT REJECT NUMBER_^1TYNFWA NUM_"$83D_*COMPLETION PRIORITY ACTUALLY TAKEN FROM PTB_^1_%ADC_"COMP1_^1_%NUM_"0_^1_%NUM_"$18FD_*STANDARD INPUT COMMENT DEVICE_^1_%NUM_"2_'2 WORD INPUT_^1_%ADC_"BUFIN_^1_%JMP-_!(DISP)_^1BUFIN BSS_"BUFIN(2)_!BUFFER FOR TTY INPT_^1IHOLD NUM_"0_^1COMP1 LDA*_!IHOLD RESTORE I REGISTER_^1_%STA-_!I_^1_%LDA*_!BUFIN_!GET TTY CHAR_^1_%ARS_"8_#NUMERIC ONL€€Y_^1_%INA_"-$30 CHAR LESS THAN $30_^1_%SAM_"VALER YES ERROR_^1_%INA_"-$A_!CHAR GREATER THAN $39_^1_%SAM_"VAL1_!NO, OK_^1VALER JMP*_!TYPOUT_"TYPE OLCC # AGAIN_^1VAL1_!INA_"$A_^1_%LDQ*_!BUFIN_!GET TTY CHAR_^1_%QLS_"8_^1_%SQM_"VAL3_"NO CHAR THERE_^1_%MUI-_!H000A TIMES 10_^1_%STA-_!NOOLC,I_!SAVE IT_^1_%LDA*_!BUFIN LOAD WORD AGAIN_^1_%AND-_!H00FF_!GET BOTTOM 8 BITS_^1_%INA_"-$30_!C€€HAR LESS THAN $30_^1_%SAM_"VAL2 YES, ERROR_^1_%INA_"-$A_!CHAR GREATER THAN $39_^1_%SAP_"VAL2_!YES, ERROR_^1_%INA_"$A_^1_%ADD-_!NOOLC,I ADD PREVIOUS CHAR AND SAVE_^1VAL3_!STA-_!NOOLC,I_^1_%INA_"-21 IS FINAL VALUE_^1_%SAM_"CHROK GREATER THAN 20 DECIMAL_^1VAL2_!JMP*_!TYPOUT TYPE OLCC # AGAIN_^1CHROK JMP*_!(OLCTYP)_!RETURN TO CALLER_^1_%SPC_"2_^1***********************************€€*************************************_^1* OLC = SUBROUTINE IS CALLED FROM THE DR955_:*_^1*_'READ COUNTINUATOR WHENEVER THE FOLLOWING_^1*_'CONDITION EXIST_^1*_)1. A REJECT CHARACTER IS SENSED_<*_^1*_)2. OLCC HAS BEEN REQUESTED_^1*_)3. COR955 IS SYSTEM RESIDENT_^1*_]_^1*_'IT CHECKS THE NUMBER OF REJECTS ON A LINE, DISPLAYS THE_%*_^1*_'REJECT CHARACTERS ON A LINE IN ASCENDING OR DESC€€ENDING_'*_^1*_'SEQUENCE (THIS DONE WITH REVERSE BUFFER OPTION), AND_)*_^1*_'INPUTS THE USERS CORRECTIONS. IT TERMINATES WHEN ALL_(*_^1*_'REJECTS ON THE LINE HAVE BEEN ACCOUNTED FOR_2*_^1************************************************************************_^1_%SPC_"2_^1OLC_"NOP_"0_+EXIT TO CALLER_^1_%LDQ-_!EPTR,I_(CHECK IF OLCC REQUESTED_^1_%LDQ-_!10,Q_^1_%LDA-_!4,Q_+CHECK BIT 4€€ OF WORD 5 OF REQUEST_^1_%ALS_"11_^1_%SAM_"OLCGO3_^1_%JMP*_!OLCE2_)RETURN WITH VFIELD SET TO REJECTS_^1OLCGO3 EQU_"OLCGO3(*)_^1_%LDA-_!NOOLC,I_#DID USER SPECIFY REJECT COUNT ?_^1_%SAN_"CNTRJS_)YES, GO FIND # REJECTS FOR THIS LINE_^1OLCE2 EQU_"OLCE2(*)_^1_%ENA_"2_-SET VFIELD TO REEJECT_^1_%JMP*_!(OLC)_)NO, EXIT BACK TO DRIVER_^1POINT NUM_"0_)USER BUFFER POINTER_^1POINTR NUM_"0_"K€€EEPS TRACK OF RECEIVING DATA BUFFER.._^1HOLDEM NUM_"0_"HOLD CHARS FOR RECEIVING BUFFER_^1CNTRJS CLR_"A_^1_%STA-_!AORDIN,I_%CLEAR NEXT ORDINAL POINTER_^1_%STA-_!QORDIN,I_%CLEAR LAST ORDINAL POINTER_^1_%STA-_!REJCNT,I_%CLEAR REJECT COUNT_^1_%STA-_!ACCUM,I_'INITIALIZE LOOP SWITCH_^1_%STA-_!OLCALM,I_%CLEAR ALARM SWITCH_^1_%ENA_"1_^1_%STA*_!HOLDEM_^1REPROC LDA-_!ELSTWD,I_^1_%STA*_!POINT€€_^1_%STA*_!POINTR_!INIT RECEIVING BUFFER.._^1_%LDQ-_!HFF00_)INITITIALIZE USER'S FWA OF BUFFER_^1_%STQ-_!QMASK,I_^1GETRJ RTJ*_!FNDREJ_"GO ACCUMULATE AND/OR FIND A REJECT CHARACTER_^1DISPLY ENA_"$10_+ZERO MIRROR PARAMETER TO WORD 6_^1_%RTJ_"SETREQ_)GO SET UP DRIVER REQUEST_^1_%JMP_"MECH_+ZERO THE MIRROR_^1_%LDA-_!RVBFLG,I_%OPERATION OK, IS REVERSE BUFFER SET?_^1_%SAN_"LODQRD_)YES, U€€SE Q-ORDINAL #_^1_%LDA-_!AORDIN,I_#NO, USE A ORDINAL NUMBER_^1_%JMP*_!BUILD8_^1LODQRD LDA-_!QORDIN,I_^1BUILD8 ALS_"4_^1_%INA_"8_.BUILD ID=8 WORD_^1_%STA-_!IN8WD8,I_^1_%ENA_"IN8WD0_^1_%ADD-_!I_-A POINTS TO PHYSTAB SIMULATED INIT TABLE_^1_%SUB_"OC5XBT_(IT WILL BE ADDED IN DRIVER_^1_%RTJ*_!SETREQ_^1_%JMP_"INT_,INITIALIZE ID=8 WITH ORDINAL #_^1_%LDQ-_!EPTR,I_(GET WORD 5 OF REQUEST_^1_%€€LDQ-_!10,Q_^1_%LDA-_!5,Q_^1_%RTJ*_!SETREQ_(CALL_^1RDOLCC JMP_"READ_'DISPLAY REJECT CHARACTER_^1GETTY RTJ-_!($F4)_#OUTPUT A LINE FEED, CARRIAGE RETURN_^1_%NUM_"$CDD_*******MUST BE CHANGED WITH DRIVER PRIORITY*_^1_%ADC_"COMP2_^1_%NUM_"0_^1_%NUM_"$18FC_)STANDARD OUTPUT COMMENT DEVICE_^1_%NUM_"1_^1_%ADC_"LFCR_^1_%JMP-_!(DISP)_^1COMP2 LDA*_!IHOLD_^1_%STA-_!I_(RESTORE I-REGISTER_^1_%CL€€R_"A_^1_%STA-_!SAVWRD,I_%CLEAR CHARACTER SAVE WORD_^1INQUIR RTJ-_!($F4)_!INPUT CORRECTED CHARACTER_^1INQRQS NUM_"$2DD_******MUST BE CHANGED WITH DRIVER PRIORITY**_^1_%ADC_"COMP3_^1_%NUM_"0_^1_%NUM_"$18FD_"STANDARD INPUT COMMENT DEVICE_^1_%NUM_"0_^1INPUT ADC_"CHARHD_^1_%JMP-_!(DISP)_^1COMP3 LDA*_!IHOLD_^1_%STA-_!I_'RESTORE I-REGISTER_^1_%LDA*_!CHARHD_(PICK UP CORRECTION CHARACTER_€€^1_%ARS_"8_^1_%INA_"-$D_,CARRIAGE RETURN INPUT?_^1_%SAZ_"CHKCOU_)YES, SEE IF PRECEDED BY A CHARACTER_^1_%INA_"$D_^1_%STA-_!SAVWRD,I_%SAVE CHARACTER_^1_%JMP*_!INQUIR_^1CHKCOU LDA-_!SAVWRD,I ANY CHARACTER?_^1_%SAN_"OKCHAR_)YES, CONTINUE_^1_%JMP*_!NOTDON CARRIAGE RETURN ONLY, DROP CHARACTER..._^1OKCHAR LDA-_!SAVWRD,I_^1_%JMP*_!RENTER_!GO PUT REPLACEMENT CHARACTER IN THE BUFFER_^1CHAR€€HD NUM_"0_^1_%SPC_"2_^1************************************************************************_^1* FNDREJ - THIS ROUTINE FINDS THE ACCUMULATES AND/OR_1*_^1*_*LOCATES THE NEXT SEQUENTIAL REJECT IN THE_0*_^1*_*USER'S INPUT BUFFER. IT SETS THE REJECT_2*_^1*_*COUNT (NOOLC), SETS THE REJECT ORDINAL NUMBER_-*_^1*_*(AORDIN AND QORDIN), AND FINALLY RE-INITIALIZES_+*_^1*_*THE 955, SETTIN€€G STATUS, ONCE OLCC FOR A_2*_^1*_*GIVEN LINE IS COMPLETE,_C*_^1************************************************************************_^1_%SPC_"2_^1FNDREJ NOP_"0_(RETURN TO CALLER_^1FNDRJ1 LDA*_!POINT_"PICK UP INPUT BUFFER INDEX_^1_%SUB-_!ECCOR,I_^1_%SAN_"NOTDON_)NO, KEEP PROCESSING_^1_%LDA-_!ACCUM,I IF ACCUMULATING, SKIP NEXT CHECK_^1_%SAZ_"REND1_^1REND_!LDA*_!HOLDEM_!CHECK LOWE€€R 8 BITS OF HOLDEM_^1_%AND-_!H00FF_"IF = 0 DATA IS UNPACKED, SO NO FILL_^1_%INA_"-2_'IF = 1 EVEN # CHARS, SO NO FILL_^1_%SAM_"NOFILL_"IF PACKED AND ODD # OF CHARS, MUST FILL_^1_%ENA_"$5B_%GO STORE FILL CHAR_^1_%JMP*_!RENTER_^1NOFILL LDA*_!POINTR_"STORE BUFFER POINTER INTO ECCOR_^1_%STA-_!ECCOR,I_"IN CASE SHORTER THAN BEFORE OLCC..._^1REND1 JMP*_!FINISH_^1NOTDON LDQ-_!QMASK,I GET €€CHARACTER MASK_^1LOKAGN LDA*_!(POINT) PICK UP A WORD_^1_%LAQ_"A_.ISOLATE ONE 8-BIT CHARACTER_^1_%SQP_"BUMPCT_)LOWER CHARACTER, OK_^1_%ALS_"8_.UPPER CHARACTER, SHIFT LEFT 8 POSITIONS_^1_%JMP*_!CHKNXT_^1BUMPCT RAO*_!POINT_"INCREMENT BUFFER POINTER BY 1_^1CHKNXT QLS_"8_(REVERSE CHARACTER MASK_^1_%STQ-_!QMASK,I_%SAVE Q_^1_%LDQ-_!ACCUM,I_!GET ACCUM OR POSIT SWITCH_^1_%INA_"-$40_*IS THI€€S A REJECT CHARACTER?_^1_%SAZ_"RREJ YES REJECT, CHECK PASS_^1_%SQZ_"REXIT+1 NOT A REJECT, KEEP ACCUMULATING_^1_%INA_"$40_"RESTORE CHAR_^1RENTER ALS_"8_"SHIFT TO UPPER A_^1_%LDQ*_!HOLDEM_!GET HOLD_^1_%LLS_"8_"COMBINE QA_^1_%SAZ_"REXIT_!IF A ZERO, THEN 1ST CHAR_^1_%SQZ_"REXIT+1_!IF Q = 0, MUST BE DROPPING UNPACKED CHAR_^1_%STQ*_!(POINTR)_!A = NON-ZERO, THEN HAVE TWO CHARS_^1_%RAO*_€€!POINTR_!BUMP OUTPUT BUFFER POINTER_^1_%ENQ_"1_#SET FLAG TO INDICATE WHICH CHAR WORKING ON NOW_^1REXIT STQ*_!HOLDEM_^1_%JMP*_!FNDRJ1_!GO GET MORE CHARS_^1RREJ_!SQN_"INCORD_^1_%RAO-_!REJCNT,I_#INCREMENT REJECT COUNT BY 1_^1_%JMP*_!FNDRJ1_(GO AGAIN_^1INCORD RAO-_!AORDIN,I BUMP REJECT ORDINAL NUMBER BY 1_^1_%LDA-_!QORDIN,I_%DECREMENT REVERSE BUFFER ORDINAL BY 1_^1_%INA_"-1_^1_%STA-_!€€QORDIN,I_^1_%JMP*_!(FNDREJ)_$EXIT TO CALLER_^1FINISH LDA-_!ACCUM,I ACCUM OR POSITION_^1_%SAN_"FINAL_*POSITION_^1_%RAO-_!ACCUM,I_'ACCUM_^1_%LDA-_!REJCNT,I_%NUMBER OF REJECTS THIS LINE_^1_%SUB-_!NOOLC,I_'SPECIFIED NUMBER OF REJECTS_^1_%SAM_"CNTOK_*REJECT COUNT OK_^1_%SAZ_"CNTOK_*REJECT COUNT OK_^1_%ENA_"2_-SET VFIELD TO REJECT_^1_%JMP*_!OLCEXT_(EXIT OLCC_^1CNTOK LDA-_!REJCNT,I_^1_%€€INA_"1_^1_%STA-_!QORDIN,I_%SET UP RB ORDINAL COUNT_^1_%JMP_"REPROC_)GO FIND 1ST REJECT_^1FINAL ENA_"8_"RE-INITIALIZE ID=8 WORD_^1_%STA-_!IN8WD8,I_^1_%ENA_"IN8WD0_^1_%ADD-_!I_-ADDRESS OF INIT CNTR TAB_^1_%SUB_"OC5XBT_(IT WILL BE ADDED IN DRIVER_^1_%RTJ*_!SETREQ_(SET UP INIT REQUEST_^1_%JMP_"INT_,INITIALIZE 955_^1_%LDQ-_!REJCNT,I_%GET FINAL REJECT COUNT_^1_%LDA-_!ESTAT2,I_%GET 955 S€€TATUS_^1_%AND_"=N$FBFF_(CLEAR REJECT BIT_^1_%SQN_"SETREJ_^1_%CLR_"Q_-SET VFIELD TO NO REJECTS OR ERRORS_^1_%JMP*_!SAVST_^1SETREJ EOR-_!ONEBIT+10_!SET REJECT BIT 10 ON_^1_%ENQ_"2_-SET VFIELD TO REJECT STATUS_^1SAVST STA-_!ESTAT2,I RE-SET STATUS_^1_%TRQ_"A_-A HOLDS VFIELD_^1OLCEXT EQU_"OLCEXT(*)_^1_%JMP_"(OLC)_"EXIT TO DRIVER_^1SETREQ NOP_"0_(RETURN ADDRESS_^1_%LDQ*_!(AWORD6)_%SAVE€€ CONTENTS OF WORD 6_^1_%STA*_!(AWORD6)_%SET E NEW WORD6 FOR OLCC TYPE REQUEST_^1_%STQ-_!SAVWRD,I_^1_%RAO-_!OLCFLG,I_!SET COR955 REQUEST FLAG_^1_%LDA-_!ECCOR,I_'SAVE WORD 6 OF PHYSTAB_^1_%STA-_!ERTN,I_(I.E. CURRENT CORE ADDRESS_^1_%CLR_"A_^1_%STA-_!EQTB12,I_#CLEAR DATA SWITCH_^1_%STA-_!EQTB13,I_"CLEAR INITIALIZE SWITCH_^1_%STA-_!ESTAT1,I_#CLEAR READ INDICATOR_^1_%JMP*_!(SETREQ)_%EXI€€T BACK TO CALLER_^1LFCR_!NUM_"$2020_^1_%SPC_"3_^1OLCRTN EQU_"OLCRTN(*)_$RETURN HERE FROM DR955 WHEN OLCC IN USE_^1_%CLR_"Q_^1_%STQ-_!OLCFLG,I_%CLEAR OLCC FLAG_^1_%LDQ-_!OLCALM,I_%CHECK FOR PREVIOUS ERROR_^1_%INQ_"-4_^1_%SQM_"OLC050_(IF MINUS NO ERROR_^1_%LDA-_!OLCALM,I_%ELSE EXIT WITH VFIELD IN A_^1_%JMP_"SETFLG_^1OLC050 EQU_"OLC050(*)_^1_%STA-_!OLCALM,I_%SET VFIELD FROM PRIOR OPER€€ATION_^1_%INA_"-4_^1_%SAP_"REINIT_(IF ERROR RESET INITITIALIZE FN_^1OPEROK RAO*_!SETREQ_^1_%RAO*_!SETREQ_(SET NEW EXIT ADDRESS OF P+2_^1_%LDA-_!ERTN,I_(RESTORE CURRENT CORE ADDRESS_^1_%STA-_!ECCOR,I_^1_%LDA-_!SAVWRD,I_^1_%STA*_!(AWORD6)_%RESTORE WORD 6_^1_%JMP*_!(SETREQ)_%EXIT TO CALLER_^1REINIT EQU_"REINIT(*)_^1_%ENA_"8_^1_%STA-_!IN8WD8,I_%SET UP ID=8 WORD WITH ORDINAL = 0_^1_%ENA€β_"IN8WD0_(SET ADDRESS OF CONTROL TABLE_^1_%ADD-_!I_^1_%SUB_"OC5XBT_(IT WILL BE ADDED IN DRIVER_^1_%RTJ*_!SETREQ_(RE SET INITITIALIZE FN_^1_%JMP_"INT_,GO CLEAR ID=8 WORD (NO RETURN TO HERE)_^1AWORD6 ADC_"WORD6_^1_%END_"INOL_^__βPEMPY1 CSY/ P€1_%NAM_"EMPY1_%BACKGROUND TO CYBERDATA_/031576_^1*_$LOAD PROGRAM FOR EMTFIL_B*750520_^1*_$DRAFT-TO-CYBERDATA PACKAGE_?*750520_^1*_] *750520_^1_%ENT_"EMPTY_M*750520_^1_%EQU_"VLOS($5F)_I04/22/7_^1_%JMP*_!COMP_'BYPASS LOAD IF EXECUTION STARTS HERE_!*750520_^1EMPTY NOP_"0_Q*750520_^1_%LDA-_!(VLOS)_(TEST IF CYBERDATA ACTIVE_+031576_^1_%SAM_"3_Q031576_^1_%LDA_"=XNME1-GTFRQ-1_#CYBER DAT€pA ACTIVE_.031576_^1_%STA*_!GTFRQ+8_#LOAD EMTFL1_;031576_^1GTFRQ GTFILE COMP,NME-GTFRQ-1,SAD,SAD-EMPTY+2,0_0*750520_^1_%NUM_"0,0_O*750520_^1_%EXIT_U*750520_^1NME_"ALF_"3,EMTFIL_"NAME OF FILE TO BE LOADED_-*750520_^1NME1_!ALF_"3,EMTFL1_"LOADED WITH CYBERDATA ACTIVE_*031576_^1COMP_!NOP_"0_Q*750520_^1_%EQU_"SAD(*)_$FILE LOADED HERE_6*750520_^1_%END_"EMPTY_M*750520_^__pPEMTFL1 CSY/ P€1_%NAM_"EMTFL1_$BACKGROUND TO CYBERDATA_/031576_^1*_$THIS PROGRAM TRANSFERS BATCHES] WRITTEN ON SCRATCH_'*750520_^1*_$TO TAPE FOR LATER LOADING INTO CYBERDATA_1*750520_^1*_$IT IS BROUGHT INTO EXECUTION BY THE PGM ENPTY_,*750520_^1*_] *750520_^1_%EQU_"LPMASK(2)_I*750520_^1_%EQU_"MAXBCH(27)_H*751028_^1_%ENT_"ETY_O*750520_^1ETY_"NOP_"0_Q*750520_^1_%RTJ_"OPMESS_$OUTPUT OPERATOR MESSAG€€E_/*750520_^1_%FREAD $C2,CP1,INDX0,16,B,0,1,I_:*750520_^1_%NUM_"0,100_M*750520_^1*_$READ INDEX 0 ON DISK (LAST BATCH)_8*750520_^1_%EXIT_U*750520_^1CP1_"RTJ_"CHKQ_'CHECK FOR ERROR_7*750520_^1_%LDA*_!INDX0_M*750520_^1XX1_"SUB_"=ADM_'CHECK FOR DMPB IN WORD 0 AND 1_(*750520_^1_%SAZ_"A010_N*750520_^1_%JMP*_!EROUT_%NO ERROR_>*750520_^1A010_!LDA*_!INDX0+1_K*750520_^1XX2_"SUB_"=APB_N*7505€€20_^1_%SAZ_"A011_N*750520_^1_%JMP*_!EROUT_%ERROR_A*750520_^1A011_!FREAD $C2,CP2,CURIND,16,B,0,1,I_9*750520_^1*_$READ CURRENT INDEX_G*750520_^1MSA_"NUM_"0,101_M*750520_^1_%EXIT_U*750520_^1CP2_"RTJ_"CHKQ_'ERROR CHECK_;*750520_^1_%RAO*_!MSA+1_%PREPARE FOR NEXT BATCH_0*750520_^1_%LDA*_!CURIND_$CHECK FOR "DMPB"_6*750520_^1_%SUB*_!XX1+1_M*750520_^1_%SAZ_"A012_N*750520_^1_%JMP*_!EROUT_M*€€750520_^1A012_!LDA*_!CURIND+1_J*750520_^1_%SUB*_!XX2+1_M*750520_^1_%SAZ_"A013_N*750520_^1_%JMP*_!EROUT_%ERROR_A*750520_^1A013_!LDA*_!CURIND+8_"BATCH MUST BE ENTRY FROZEN_,*750520_^1_%EOR_"=N$5000_K*750520_^1_%SAZ_"A014_N*750520_^1_%JMP*_!EROUT_M*750520_^1A014_!LDA*_!CURIND+9_"BATCH 1-999, NO MORE NO LESS_**750520_^1_%CLR_"Q_Q*750520_^1_%SAN_"A015_N*750520_^1_%JMP*_!EROUT_%ERROR. BA€€TCH NO ZERO_2*750520_^1A015_!LLS_"4_Q*750520_^1_%SQN_"ERA_O*750520_^1_%LLS_"4_Q*750520_^1_%INQ_"-10_O*750520_^1_%SQP_"ERA_O*750520_^1_%CLR_"Q_Q*750520_^1_%LLS_"4_Q*750520_^1_%INQ_"-10_O*750520_^1_%SQP_"ERA_O*750520_^1_%CLR_"Q_Q*750520_^1_%LLS_"4_Q*750520_^1_%INQ_"-10_O*750520_^1_%SQM_"A020_N*750520_^1ERA_"JMP*_!EROUT_M*750520_^1A020_!LDA*_!CURIND+10_I*750520_^1_%INA_"-16_(16 IS ADD€€ED BY REDTRK_1*750520_^1_%STA_"FTADR_M*750520_^1_%RTJ_"REDTRK_L*750520_^1_%CLR_"A_Q*750520_^1_%STA*_!FTOB_N*750520_^1_%STA*_!LTOB_N*750520_^1_%STA*_!NUMTR_M*750520_^1A030_!CLR_"Q_Q*750520_^1_%LDA_"BFR_(GET FIRST TRACK OF BATCH_.*750520_^1_%STA*_!LTOB_'WILL BE UPDATED_7*750520_^1_%STA*_!FTOB_N*750520_^1A031_!LDA_"BFR,Q_%GET THE TRACKS_8*750520_^1_%SAZ_"A032_'ZERO MEANS END_8*750520_€€^1_%SUB*_!LTOB_'IS IT PREVIOUS PLUS ONE?_.*750520_^1_%SAN_"EROUT_M*750520_^1_%LDA*_!LTOB_N*750520_^1_%INA_"16_)BUMP BY ONE TRACK_5*750520_^1_%STA*_!LTOB_N*750520_^1_%INQ_"1_Q*750520_^1_%JMP*_!A031_N*750520_^1A032_!STQ*_!NUMTR_%SAVE TRACKS_;*750520_^1_%SQZ_"EROUT_%MUST BE AT LEAST ONE_2*750520_^1_%INQ_"-91_O*750520_^1_%SQM_"A034_'AND MAX 90_<*750520_^1EROUT ENA_"1_Q*750520_^1_%JMP_€€"ERROR_M*750520_^1A034_!LDA*_!LTOB_'DECREASE LTOB AGAIN_3*750520_^1_%INA_"-16_O*750520_^1_%STA*_!LTOB_N*750520_^1_%JMP*_!OVR_O*750520_^1*_] *750520_^1PRLTOB NUM_"0_*PREV LAST TRACK_7*750520_^1FTOB_!NUM_"0_*FIRST TRACK_;*750520_^1LTOB_!NUM_"0_*LAST TRACK_<*750520_^1NUMTR NUM_"0_*NUMBER OF TRACKS_6*750520_^1NUMREC NUM_"0_*NUMBER OF RECORDS_5*750520_^1INDX0 BZS_"INDX0(16)_I*750520_€€^1CURIND BZS_"CURIND(16)_H*750520_^1*_] *750520_^1OVR_"LDA_"ATT_(FIRST WORD OF ATT_5*750520_^1_%EOR_"=N$4441_#MUST BE $4441_9*750520_^1_%SAN_"B010_N*750520_^1_%LDA_"ATT+1_%FIRST TRACK OF BATCH_2*750520_^1_%EOR*_!FTOB_'MUST BE SAME AS IN HEADER RECORD_%*750520_^1_%SAZ_"B020_N*750520_^1B010_!JMP*_!BROUT_%ERROR_A*750520_^1B020_!LDA*_!FTOB_N*750520_^1_%SUB*_!PRLTOB_$FTOB MUST BE LARGE€€R_3*750520_^1_%INA_"-16_(THAN LAST TRACK OF PREVIOUS BATCH_$*750520_^1_%SAP_"B021_N*750520_^1_%JMP*_!BROUT_M*750520_^1B021_!LDA*_!LTOB_N*750520_^1_%STA*_!PRLTOB_$UPDATE FOR NEXT BATCH_1*750520_^1_%LDA_"ATT+8_%GET AVAIL NO OF WORDS IN TRACK_(*750520_^1_%SUB_"=N1537_L*750520_^1_%SAM_"B022_N*750520_^1_%JMP*_!BROUT_%CANNOT BE LARGER THAN 1536_,*750520_^1B022_!LDA_"ATT+13_$FORMAT NUMBER€€_9*750520_^1_%SAZ_"B030_'MUST BE NON ZERO_6*750520_^1_%SUB_"=N8001_$AND NO LARGER THAN 8000_/*750520_^1_%SAP_"B030_N*750520_^1_%LDA_"ATT+14_$NEXT MUST BE 4_8*750520_^1_%INA_"-4_P*750520_^1_%SAZ_"B031_N*750520_^1B030_!JMP*_!BROUT_M*750520_^1B031_!LDA_"ATT+15_$BASIC MODE IS ENTRY_3*750520_^1_%SUB_"=N$3000_K*750520_^1_%SAN_"B040_N*750520_^1_%LDA_"ATT+19_$SW1_C*750520_^1_%SUB_"=N$0404_€€K*750520_^1_%SAN_"B040_N*750520_^1_%LDA_"ATT+20_$SW2_C*750520_^1_%SUB_"=N$000C_K*750520_^1_%SAZ_"B041_N*750520_^1B040_!JMP*_!BROUT_M*750520_^1B041_!LDA_"ATT+32_$NO OF RECORCDS_8*750520_^1_%STA*_!NUMREC_L*750520_^1_%SAN_"B042_'CANNOT BE ZERO_8*750520_^1_%JMP*_!BROUT_M*750520_^1B042_!LDA_"ATT+35_$BATCH NO_>*750520_^1_%EOR_"CURIND+9_"MUST BE SAME AS INHEADER RECORD_'*750520_^1_%SAZ_"B€€043_N*750520_^1_%JMP*_!BROUT_M*750520_^1B043_!LDA_"=N$999_$OPERATOR NUMBER_7*750520_^1_%STA_"BFR+91_L*750520_^1_%LDA_"=N$1000_#FAKE TIME_=*750520_^1_%STA_"BFR+94_L*750520_^1_%ENA_"0_Q*750520_^1_%STA_"BFR+92_L*750520_^1_%STA_"ATT+34_$CLEAR ERROR WORD_6*750520_^1_%STA_"BFR+93_L*750520_^1_%STA_"BFR+95_$CLEAR NO OF RECORDS_3*751028_^1_%LDA_"=N$433F_#IDK AND ENTRY IN ATT 2_0*750520_^1_%€€STA_"ATT+2_M*750520_^1_%JMP*_!B050_N*750520_^1BROUT ENA_"2_Q*750520_^1_%JMP_"ERROR_%GO AND WRITE ERROR MESSAGE_,*750520_^1*_] *750520_^1* NOW INDEX IS OK. AND SO IS TRACK TABLE AND ATT_0*750520_^1*_$SO LET US WRITE THEHEADER RECORD ON THE TAPE_-*750520_^1B050_!WRITE $FA,CPI,CURIND,16,B,0,1,I_9*750520_^1_%EXIT_U*750520_^1CPI_"RTJ_"CHKQ_'CHECK FOR ERRORS_6*750520_^1_%CLR_"A_Q*7505€€20_^1_%STA*_!RECNO_M*750520_^1_%LDA_"FTOB_'FIX ADDRESS OF FIRST RECORD_+*750520_^1_%INA_"2_*SECTOR 0 AND 1 NOT USED FOR DATA_%*750520_^1_%MUI_"=N96_N*750520_^1_%LLS_"1_Q*750520_^1_%ARS_"1_Q*750520_^1_%AND-_!LPMASK+15_I*750520_^1_%STQ*_!CDAM_N*750520_^1_%STA*_!CDAL_N*750520_^1_%LDA_"FTOB_N*750520_^1_%STA*_!CURTR_%CURRENT TRACK IS FIRST TRACK_**750520_^1RECLOP LDQ*_!CDAM_N*750520_^1_€€%LDA*_!CDAL_N*750520_^1_%RTJ_"TRDSP_%GET TRACK NO AND DISPLACEMENT_)*750520_^1*_] *750520_^1_%LDA*_!RECNO_%FIRST RECORD?_9*750520_^1_%SAZ_"C010_N*750520_^1_%LDA_"BFR+3,Q_#TEST BACKWARD POINTER_1*750520_^1_%ARS_"8_Q*750520_^1_%AND-_!LPMASK+7_J*750520_^1_%EOR*_!PRDAM_%SHOULD POINT TO PRECEDING RECORD_%*750520_^1_%SAZ_"C001_N*750520_^1_%JMP*_!CROUT_%ERROR_A*750520_^1C001_!LDA_"BFR+1,€€Q_#LEAST SIGNIFICANT BITS_0*750520_^1_%EOR*_!PRDAL_M*750520_^1_%SAZ_"C002_N*750520_^1_%JMP*_!CROUT_M*750520_^1C002_!JMP*_!C011_N*750520_^1C010_!LDA_"BFR+1,Q_#TEST IF FIRST REC HAS FIRST REC BIT_"*750520_^1_%SAM_"C011_N*750520_^1_%JMP*_!CROUT_M*750520_^1C011_!LDA_"BFR+4,Q_#TEST FORMAT NUMBER_4*750520_^1_%SAZ_"C020_'NON ZERO_>*750520_^1_%SUB_"=N8001_L*750520_^1_%SAM_"C021_'AND LESS T€€HAN 8001_4*750520_^1C020_!JMP*_!CROUT_M*750520_^1C021_!LDA_"BFR+3,Q_#GET NEXT RECORDS ADDRESS_.*750520_^1_%AND-_!LPMASK+7_J*750520_^1_%STA*_!NDAM_N*750520_^1_%LDA_"BFR+2,Q_K*750520_^1_%STA*_!NDAL_N*750520_^1_%LDA_"BFR,Q_%GET REC LENGTH_8*750520_^1_%AND-_!LPMASK+9_J*750520_^1_%STA*_!RCLTH_%SAVE IT_?*750520_^1_%SAZ_"CROUT_%CANNOT BE ZERO_8*750520_^1_%SUB_"=N501_%500 IS MAX_<*750520_^€€1_%SAM_"C031_N*750520_^1CROUT ENA_"3_*GO TO ERROR_;*750520_^1_%JMP_"ERROR_M*750520_^1C031_!LDA_"BFR+4,Q_#GET FORMAT NO_9*751028_^1_%SUB*_!PRVFMT_$HAS IT CHANGED_8*751028_^1_%SAZ_"C0311_%NO_D*751028_^1_%ADD*_!PRVFMT_$RESTORE IT_<*751028_^1_%STA*_!PRVFMT_$AND SAVE FOR NEXT TIME_0*751028_^1_%JMP*_!C0312_M*751028_^1C0311 LDA*_!RCLTH_%RECORD LENGTH_9*751028_^1_%SUB*_!PRVLTH_L*751028_^€€1_%SAZ_"C0312_%SAME LENGTH_;*751028_^1_%JMP*_!CROUT_%ERROR_A*751028_^1C0312 LDA*_!RCLTH_M*751028_^1_%STA*_!PRVLTH_$SAVE IT_?*751028_^1_%INA_"5_*ADD RECORD HEADER LENGTH_.*750520_^1_%ADD*_!CDAL_N*750520_^1_%CLR_"Q_*FIGURE OUT NEXT POSSIBLE ADDRESS_%*750520_^1_%SAP_"C032_N*750520_^1_%AND-_!LPMASK+15_I*750520_^1_%INQ_"1_Q*750520_^1C032_!ADQ*_!CDAM_N*750520_^1_%STA*_!TMP1_N*750520_^1_€€%STQ*_!TMP2_'NEXT POSSIBLE ADDRESS_1*750520_^1_%JMP*_!C040_N*750520_^1*_] *750520_^1RECNO NUM_"0_*RECORD NUMBER_9*750520_^1CDAM_!NUM_"0_*CURRENT ADDRESS MSB_3*750520_^1CDAL_!NUM_"0_*CURRENT ADDRESS LSB_3*750520_^1NDAM_!NUM_"0_*NEXT REC ADDRESS MSB_2*750520_^1NDAL_!NUM_"0_*NEXT REC ADDRESS LSB_2*750520_^1PRDAM NUM_"0_*PREVIOUS RECORDS ADDRESS MSB_**750520_^1PRDAL NUM_"0_*PREVIOU€€S REC ADDRESS LSB_.*750520_^1CURTR NUM_"0_*CURRENT TRACK_9*750520_^1TMP1_!NUM_"0_Q*750520_^1TMP2_!NUM_"0_Q*750520_^1RCLTH NUM_"0_*RECORD LENGTH_9*750520_^1PRVFMT NUM_"0_*PREVIOUS FORMAT_7*751028_^1PRVLTH NUM_"0_Q*751028_^1*_] *750520_^1C040_!LDA*_!NDAM_'TEST IF NEXT ADDRESS IS LARGER_(*750520_^1_%SUB*_!TMP2_'OR EQUAL TO POSSIBLE NEXT ADDRESS_$*750520_^1_%SAM_"C050_'MSB CANNOT BE€€ SMALLER_1*750520_^1_%INA_"-1_P*750520_^1_%SAP_"C051_N*750520_^1_%LDA*_!NDAL_N*750520_^1_%SUB*_!TMP1_N*750520_^1_%SAP_"C051_N*750520_^1C050_!JMP*_!CROUT_%ERROR_A*750520_^1C051_!LDA*_!NDAL_'GET NEXT ADDRESS_6*750520_^1_%LDQ*_!NDAM_N*750520_^1_%RTJ_"TRDSP_%CONVERT TO TRACK AND DISPLACEMENT_$*750520_^1_%TRA_"Q_Q*750520_^1_%SUB*_!CURTR_%SAME TRACK?_;*750520_^1_%SAZ_"C060_'YES_C*750520_€€^1_%INA_"-16_(NO. MUST BE ONE LARGER_0*750520_^1_%SAZ_"C058_N*750520_^1_%JMP*_!CROUT_M*750520_^1C058_!STQ*_!CURTR_%INCREMENT TRACK NO_4*750520_^1_%RTJ_"WRITET_$WRITE THE TRACK AS FOUR RECORDS_'*750520_^1_%RTJ_"REDTRK_$READ IN NEXT TRACK_4*750520_^1C060_!LDA*_!CDAM_'PUSH CURRENT TO PREVIOUS_.*750520_^1_%STA*_!PRDAM_M*750520_^1_%LDA*_!CDAL_N*750520_^1_%STA*_!PRDAL_M*750520_^1_%LDA*_!€€NDAM_'NOW NEXT BECOMES CURRENT_.*750520_^1_%STA*_!CDAM_N*750520_^1_%LDA*_!NDAL_N*750520_^1_%STA*_!CDAL_N*750520_^1_%RAO*_!RECNO_%INCREMENT RECORD COUNTER_.*750520_^1_%LDA*_!RECNO_M*750520_^1_%SUB_"NUMREC HAVE ALL REXCORDS BEEN PROCESSED?_**750520_^1_%SAP_"WRTR_'IF SO WRITE AND OUT_3*750520_^1_%JMP*_!RECLOP_$NO GO BACK FOR MORE_3*750520_^1WRTR_!RTJ_"WRITET_$WRITE THE TRACK_7*750520_€€^1_%LDQ*_!CDAM_N*750520_^1_%LDA*_!CDAL_N*750520_^1_%RTJ_"TRDSP_%GET CURRENT TRACK_5*750520_^1_%SUB_"LTOB_N*750520_^1_%INA_"-1_P*750520_^1_%SAM_"OKWR_'LAST TRACK IS NO LARGER THAN LAST_$*750520_^1_%ENA_"4_Q*750520_^1_%JMP_"ERROR_M*750520_^1OKWR_!RTJ_"WRTFM_M*750520_^1*_$WRITE A FILE MARK_H*750520_^1CPM_"LDA_"CURIND+5_"FIX A MESSAGE TO THE OPERATOR_)*750520_^1_%STA*_!MS1_(THIS IS THE€€ JOB NAME_2*750520_^1_%LDA_"CURIND+6_J*750520_^1_%STA*_!MS1+1_M*750520_^1_%LDA_"CURIND+7_J*750520_^1_%STA*_!MS1+2_M*750520_^1_%CLR_"A_*GET BATCH NUMBER_6*750520_^1_%LDQ_"CURIND+9_J*750520_^1_%LRS_"4_Q*750520_^1_%ALS_"12_P*750520_^1_%LRS_"4_Q*750520_^1_%ALS_"12_P*750520_^1_%ADD_"=N$3030_#MAKE IF ASCII_9*750520_^1_%ADQ_"=N$2030_K*750520_^1_%STQ*_!MS1+3_M*750520_^1_%STA*_!MS1+4_M*7505€€20_^1_%FWRITE $FC,CPX,MS1,5,A,0,1,I_=*750520_^1_%EXIT_U*750520_^1MS1_"BSS_"MS1(5)_L*750520_^1CPX_"LDA_"CURIND+4_"GET FILE NUMBER_7*750520_^1_%EOR_"INDX0+4_K*750520_^1_%SAN_"NXB_(ARE ALL BATCHES TRANSFERED?_+*750520_^1_%RTJ_"WRTFM_M*750520_^1_%RTJ_"WRTFM_M*750520_^1_%MOTION $FA,ENDPGM,3,0,0,0,0,1,I_:*750520_^1*_$REWIND TO LOAD POINT_E*750520_^1_%EXIT_U*750520_^1ENDPGM JMP_"CLRSCR_$C€€LEAR SCRATCH INDEX_3*750520_^1NXB_"JMP_"A011_'GO AND PROCESS NEXT BATCH_-*750520_^1*_] *750520_^1ERROR ADD_"=N$2030_K*750520_^1_%STA*_!ERMS+3_$STORE ERROR CODE IN MESSAGE_+*750520_^1_%FWRITE $FC,CPE,ERMS,4,A,0,1,I_<*750520_^1*_$WRITE ERROR MESSAGE_F*750520_^1_%EXIT_U*750520_^1ERMS_!ALF_"10,ERROR_J*750520_^1CPE_"MOTION $FA,CPBF,6,0,0,0,0,1,I_<*750520_^1*_$BACKSPACE ONE FILE_G*7505€€20_^1_%EXIT_U*750520_^1CPBF_!RTJ_"WRTFM_%WRITE A FILE MARK_5*750520_^1_%RTJ_"WRTFM_%MAKE IT TWO_;*750520_^1_%JMP*_!ENDPGM_$ALL DONE_>*750520_^1*_] *750520_^1WRITET NOP_"0_Q*750520_^1_%WRITE $FA,CPW1,BFR,384,B,0,1,I_:*750520_^1_%EXIT_U*750520_^1CPW1_!WRITE $FA,CPW2,BFR+384,384,B,0,1,I_6*750520_^1_%EXIT_U*750520_^1CPW2_!WRITE $FA,CPW3,BFR+768,384,B,0,1,I_6*750520_^1_%EXIT_U*75052€€0_^1CPW3_!WRITE $FA,CPW4,BFR+1152,384,B,0,1,I_5*750520_^1_%EXIT_U*750520_^1CPW4_!JMP*_!(WRITET)_"ALL DONE_>*750520_^1*_] *750520_^1WRTFM NOP_"0_*WRITE FILE MARK ROUTINE_/*750520_^1_%MOTION $FA,CPWFM,2,0,0,0,0,1,I_;*750520_^1_%EXIT_U*750520_^1CPWFM JMP*_!(WRTFM)_K*750520_^1*_] *750520_^1TRDSP NOP_"0_*CALCULATE TRACK AND DISPLACEMENT_%*750520_^1_%ALS_"1_Q*750520_^1_%LRS_"1_*NOR€€MALIZE_=*750520_^1_%DVI_"=N1536_$A IS TRACK, Q IS DISPLACEMENT_)*750520_^1_%ALS_"4_*MULTIPLY BY FOUR_6*750520_^1_%JMP*_!(TRDSP)_K*750520_^1CHKQ_!NOP_"0_*Q MINUS MEANS ERROR_3*750520_^1_%SQM_"1_Q*750520_^1_%JMP*_!(CHKQ)_L*750520_^1_%ENA_"6_Q*750520_^1_%JMP_"ERROR_%ERROR EXIT_<*750520_^1*_] *750520_^1REDTRK NOP_"0_*READ A TRACK_:*750520_^1_%LDA*_!FTADR_%BUMP TRACK ADDRESS BY 16 SECT€€ORS_%*750520_^1_%INA_"16_P*750520_^1_%STA*_!FTADR_M*750520_^1_%FREAD $C2,CPRT,BFR,1536,B,0,1,I_9*750520_^1_%NUM_"0_Q*750520_^1FTADR NUM_"0_Q*750520_^1_%EXIT_U*750520_^1CPRT_!RTJ*_!CHKQ_'CHECK I/O ERROR_7*750520_^1_%JMP*_!(REDTRK)_J*750520_^1*_]_^1*_$WRITE OPERATOR MESSAGE_^1OPMESS NOP_"0_^1AGAN_!LDA-_!$FA_(GET STD OUTPUT DEVICE_^1_%CLR_"Q_^1_%DVI-_!$46_(DIV BY TEN_^1_%INQ_"$30_^1€€_%INA_"$30_^1_%ALS_"8_^1_%AAQ_"A_*COMBINE LOGICAL UNIT NUMBER_^1_%STA*_!ALUN_^1_%FWRITE $FC,CPOP,MNTMS,18,A,0,1,I_^1_%EXIT_^1CPOP_!FREAD $FD,CPIP,ALUN,1,A,0,1,I_^1*_$CHECK IF READY_^1_%EXIT_^1CPIP_!SQP_"1_*ERROR?_^1_%JMP*_!AGAN_'YES_^1_%JMP*_!(OPMESS)_"RETURN_^1MNTMS ALF_"13,MOUNT SCRATCH TAPE ON LU_^1ALUN_!NUM_"0_^1_%ALF_"4, READY?_^1***_]_^1CLRSCR NOP_"0_*CLEAR OUT SCRATCH IND€€EX_^1_%FWRITE $C2,ENDCMP,ZZZ,1,B,0,1,I_^1MMDD_!NUM_"0,100_M*751126_^1_%EXIT_^1ENDCMP RAO*_!MMDD+1_$INCREMENT SECTOR ADDRESS_.*751126_^1_%LDA*_!MMDD+1_L*751126_^1_%INA_"-101_'CLEAR SECTOR 100 TO MAXBCH+100_(*751126_^1_%INA_"-MAXBCH_K*751126_^1_%SAP_"1_Q*751126_^1_%JMP*_!CLRSCR_$GO BACK AGAIN_9*751126_^1_%EXIT_!0_*ALL OVER NOW_:*751126_^1*_$NO MORE TO DO_^1ZZZ_"NUM_"0_*WRITE A ZERO O€bN DISK_^1*_]_^1*_$TRACK BUFFER_^1***_]_^1BFR_"BSS_"BFR(100)_^1_%EQU_"ATT(BFR+96)_^1_%END_"ETY_^__bPOCSER CSY/ P€1_%NAM_"OCSER_%BACKGROUND-TO-CYBERDATA_/*751126_^1*_]_^1***********************************************************************_^1*_]_^1*_$THIS PROGRAM IS WRITTEN BY H.P.MYHR/CDC NORWAY, NOV. 1974,_^1*_$AS A RUNTIME SUBROUTINE TO THE DRAFT SYSTEM UNDER MSOS 4._^1*_$IT ENABLES DATA READ BY AN OCR READER TO BE ERROR CHECKED AND_^1*_$RECORDED ON DISK IN CYBERDATA FORMAT, FOR LATER_^1*€€_$ERROR CORRECTION FROM ANY CYBERDATA VDU"S._^1*_$BATCHES ARE RECORDED SEQUENTIALLY ON SCRATCH DISK,_^1*_$SIMILAR TO MAGNETIC TAPE RECORDING._^1*_$HENCE, BATCHES WILL HAVE TO BE "LOADED" BY CYBERDATA_^1*_$(SPECIAL DISK LOAD MODULE) BEFORE THEY CAN BE ACCESSED_^1*_$FROM THE VDU"S._^1*_]_^1*_$THE FOLLOWING INDEPENDENT ENTRY POINTS ARE PRESENT&_^1*_]_^1*_$OPNBCH - OPEN A NEW BATCH AR€€EA ON DISK_^1*_$CLOBCH - CLOSE THE CURRENT OPEN BATCH_^1*_$STOREC - STORE A RECORD ON DISK_^1*_$ERRMRK - SET FIELD AND RECORD ERROR FLAG_^1*_$REJMRK - EXAMINE ALL FIELDS IN A RECORD AND_^1*_.SET FIELD AND RECORD ERROR FLAG_^1*_.IF ANY REJECT CHARACTERS OCCUR._^1*_$WRTBCH - WRITE OUT ALL BATCHES ON SCRATCH ON TAPE_(*750506_^1*_'BY A CALL TO EMTFIL._C*750506_^1*_]_^1*****************€€******************************************************_^1*_]_^1*_$S E L E C T A B L E P A R M E T E R V A L U E S_^1*_]_^1_%EQU COMLU(4)_(LOGICAL UNIT OF OPERATOR COMMENT DEVICE_^1_%EQU DLU(8)_*LOGICAL UNIT OF SCRATCH DISK_^1_%EQU RP(1)_+REQUEST PRIORITY_^1_%EQU CP(1)_+COMPLETION PRIORITY_^1_%EQU XP(3)_+CHECKPOINT FREQUENCY_^1_%EQU MAXBCH(27)_%MAXIMUM NUMBER OF BATCHES_^1_%€€EQU MAXREC(500)_$MAXIMUM RECORD LENGTH (WORDS)_^1_%EQU TRKBCH(90)_%MAXIMUM NUMBER OF TRACKS PR. BATCH_^1_%EQU INDBAS(100)_$STARTING SECTOR ADDR OF INDEX_^1_%EQU FSTTRK(1344)_#NUMBER OF DATA WORDS IN FIRST TRACK_^1_%EQU FULTRK(1536)_#NUMBER OF DATA WORDS IN A FULL DISK TRACK_^1*_]_^1***********************************************************************_^1*_]_^1*_$I N D E X E S€€ A N D C O N S T A N T S_^1*_]_^1_%EQU NUMBAS($30)_$ASCII CHAR. "ZERO"_^1_%EQU HE000($1F),H1FFF($0F)_^1_%EQU H000F($06)_^1_%EQU H007F($09),HFF00($1A),H00FF($0A)_^1_%EQU_"ONE(1),TWO(2),THREE(3),FOUR(4),FIVE(5)_,*750506_^1_%EQU_"TEN($46)_J*750506_^1_%EQU ZROBIT($33),ONEBIT($23),ZERO($22)_^1_%EQU EXTCOM($E9),MAXMSB($15),MAXLSB($16)_^1_%EQU AMONI($F4),ADISP($EA)_^1*_]_^1******€€******************************************************************_^1*_]_^1*_$E X T E R N A L S_^1*_]_^1_'EXT IFREJ_*DRAFT SUBROUTINE_^1_'EXT DELUSR_)EXTERNAL ERROR FLAG_^1_'EXT EOTFLG_)EXTERNAL END OF BATCH AREA FLAG_^1_%EXT_"RJRUSR_$REJECT-IN-RECORD FLAG_1*750506_^1*_]_^1***********************************************************************_^1*_]_^1*CALL& RTJ OPNBCH_^1*_$ADC€€ P1_.PARAMETER DATA DESCRIPTOR ADDRESS_^1*_]_^1*P1_"NUM $2010_^1*_$ADC BUFF_,ADDRESS OF PARAMETER STRING_^1*_$ADC 10_.LENGTH OF STRING (CHARS)_^1*_]_^1*BUFF ALF 5,AAAAAADDDB_#AAAAAA=JOBNAME, DDD=BATCH NO., B=BLANK_^1*_]_^1***********************************************************************_^1*_]_^1_%ENT OPNBCH_^1_%ENT OPNBCX_N031576_^1_%EQU OPNBCX(*)_K031576_^1OPNBCH 0_€€"0_^1_%RTJ SAVREG_*SAVE REGISTERS AND INITIATE I_^1_%CLR Q_^1_%CLR A_^1_%RTJ INDEX_+READ INDEX SECTOR NO. 0_^1_%LDA- AUXBUF,I_^1_%SUB- INDX,I_^1_%SAZ OPN1_,SKIP IF "DM"_^1_%JMP* OPENUP_*NO BATCHES ON SCRATCH DISK_^1OPN1_!LDA- AUXBUF+1,I_^1_%SUB- INDX+1,I_^1_%SAZ OPN2_,SKIP IF "PB"_^1_%JMP* OPENUP_*NO BATCHES ON SCRATCH DISK_^1OPN2_!CLR Q_^1_%RTJ ATTCKP_*READ LAST CHECKPOINT€€ (ATT)_^1_%ENQ INDSIZ_*SIZE OF INDEX TABLE_^1MVLOOP INQ -1_.MOVE INDEX FROM AUXILIARY TO RESIDENT_^1_%LDA- AUXBUF,B_^1_%STA- INDX,B_^1_%SQZ MVFINI_^1_%JMP* MVLOOP_^1MVFINI LDA- IOCI,I_^1_%SAN OPENUP_*SKIP IF BATCH IS CLOSED_^1_%RTJ CLOBCX_*CLOSE BATCH THAT WAS FOUND OPEN_^1OPENUP LDA- IFIL,I_*FILE NO. TO BE OPENED_^1_%RAO- IFIL,I_*CURRENT FILE INDEX NO._^1_%SUB- INDNO,I_)MAXIM€€UM NO. OF INDEX ENTRIES_^1_%SAM OPN3_,SKIP IF FILE INDEX WITHIN RANGE_^1_%ENA 1_/ERROR, FILE INDEX OUT OF RANGE_^1_%JMP* OPNEXI_^1OPN3_!LDA- ITRK,I_*NO. OF TRACKS IN PREVIOUS BATCH_^1_%ALS 4_/CONVERT TO SECTORS_^1_%ADD- IFTA,I_*ADDR. OF FIRST TRACK IN PREVIOUS BATCH_^1_%STA- IFTA,I_*ADDR. OF FIRST TRACK IN CURRENT BATCH_^1_%STA- FTOB,I_^1_%ENQ MAXLSB_*EXTENDED COMM. REGION INDE€€X_^1_%LDA- (EXTCOM),Q_%LSB OF MAX. SCRATCH SECTOR_^1_%SUB-_!$C1_(NORMALIZE TO SCRATCH SECTOR VALUES_#*750506_^1_%SUB- FTOB,I_*LSB OF FIRST TRACK IN CURRENT BATCH_^1_%ARS_"4_*MAKE IT TRACKS_8*741126_^1_%SUB- MAXTRK,I_^1_%SAP OPN4_,SKIP IF TRACKS AVAILABLE_^1_%ENA 2_/ERROR, SCRATCH AREA IS FULL_^1_%JMP* OPNEXI_^1OPN4_!CLR A_^1_%STA- ITRK,I_*NO. OF TRACKS ASSIGNED_^1_%STA- IOCI,I_*€€BATCH IS OPEN_^1_%STA- IDMP,I_*BATCH NOT YET DUMPED_^1_%STA- BMDA,I_*BASIC MODE DISK ADDR. (MSB)_^1_%STA- BMDA+1,I_(BASIC MODE DISK ADDR. (LSB)_^1_%STA- VRCD,I_*NO. OF VERIFIABLE RECORDS_^1_%STA- RCDER,I_)NO. OF ERRONEOUS RECORDS_^1_%STA- RCD,I_+TOTAL NO. OF RECORDS_^1_%STA-_!FMTNO,I_#FORMAT NUMBER_9*741126_^1_%LDQ* (OPNBCH)_(ADDR. OF DATA DESCRIPTOR_^1_%LDQ- ONE,Q_+PARAMETER STRIN€€G ADDR._^1_%LDA- (ZERO),Q_(FIRST 2 CHARS OF JOBNAME_^1_%STA- IJOB,I_*STORE IN BST_^1_%LDA- ONE,Q_+SECOND 2 CHARS_^1_%STA- IJOB+1,I_^1_%LDA- TWO,Q_+THIRD 2 CHARS_^1_%STA- IJOB+2,I_^1_%RTJ BCHNO_+CALCULATE BATCH NO. (IBTCH,I AND BATCH,I)_^1_%RTJ ASGNTR_*ASSIGN FIRST AVAILABLE TRACK TO BATCH_^1_%LDA- NWDTRK+1,I_%14 SECTORS AVAILABLE IN FIRST TRACK_^1_%STA- AVLTK,I_^1_%LDA- FTOB,I_*A€€DDR. OF FIRST TRACK_^1_%INA 2_/INCR. ADDR. DUE TO TRT AND ATT SECTORS_^1_%RTJ SECWRD_*CONVERT SECTOR ADDR. TO WORD ADDR._^1_%STQ- CURDA,I_)CURRENT DISK ADDR. (MSB)_^1_%STA- CURDA+1,I_'CURRENT DISK ADDR. (LSB)_^1_%STQ- NDA,I_+NEXT (FREE) DISK ADDR. (MSB)_^1_%STA- NDA+1,I_)NEXT (FREE) DISK ADDR. (LSB)_^1_%ENQ 0_^1_%RTJ* OPMSG_+MESSAGE TO OPERATOR_^1_%ENA 0_/NO ERROR CONDITION_^1O€€PNEXI STA- DELUS,I_)ERROR CONDITION INDICATOR_^1_%RTJ ERRFLG_*SET EXTERNAL FLAGS_^1_%RAO* OPNBCH_*INCR. RETURN ADDR._^1_%RTJ RSTREG_*RESTORE REGISTERS_^1_%JMP* (OPNBCH)_(RETURN_^1*_]_^1***********************************************************************_^1*_]_^1*_$PICK UP BATCH NO FROM OPNBCH PARAM._^1*_]_^1*_$(Q) = ADDR OF BUFF (SEE OPNBCH)_^1*CALL& RTJ BCHNO_^1*_]_^1*******€€****************************************************************_^1*_]_^1BCHNO 0_"0_^1_%LDA- THREE,Q_^1_%ALS 8_^1_%AND-_!H000F_M*750506_^1_%ALS_"4_Q*750506_^1_%STA-_!BATCH,I_K*750506_^1_%LDA- THREE,Q_^1_%AND- H000F_^1_%ADD-_!BATCH,I_K*750506_^1_%ALS_"4_Q*750506_^1_%STA-_!BATCH,I_K*750506_^1_%LDA- FOUR,Q_^1_%ALS 8_^1_%AND- H000F_^1_%ADD- BATCH,I_^1_%STA- BATCH,I_^1_%STA- IBTCH,I_€€^1_%JMP* (BCHNO)_)RETURN_^1*_]_^1***********************************************************************_^1*_]_^1*CALL& RTJ CLOBCH_*CLOSE BATCH ON DISK_^1*_]_^1*_$THE NUMBER OF RECORDS_"IN BATCH IS DISPLAYED_^1*_$ON STANDARD COMMENT OUTPUT DEVICE._^1*_]_^1***********************************************************************_^1*_]_^1_%ENT CLOBCH_^1_%ENT CLOBCX_N031576_^1_%EQU €€CLOBCX(*)_K031576_^1CLOBCH 0_"0_^1_%RTJ SAVREG_*SAVE REGISTERS AND INITIATE I_^1_%RTJ CLOBAT_'CLOSE BATCH,DISPLAY NUMBER OF RECORDS 031576_^1_%RTJ RSTREG_*RESTORE REGISTERS_^1_%JMP* (CLOBCH)_(RETURN_^1*_]_^1************************************************************************_^1*_]_^1CLOBAT 0_"0_S031576_^1_%LDA- IOCI,I_^1_%SAZ CLO1_,SKIP IF BATCH IS OPEN_^1_%JMP* EXICLO_*IG€€NORE CLOSED BATCH_^1CLO1_!RAO- IOCI,I_*SET CLOSED FLAG_^1_%LDA- RCD,I_+TOTAL NUMBER OF RECORDS_^1_%SAN CLO2_,SKIP IF ANY RECORDS IN BATCH_^1_%LDA-_!IFIL,I_$RESET FILE NO TO PREVIOUS VALUE_'*751028_^1_%INA_"-1_P*751028_^1_%STA-_!IFIL,I_L*751028_^1_%ENA_"0_Q*751028_^1_%STA-_!ITRK,I_$CLER NO OF TRACKS ASSIGNED_,*751028_^1_%JMP* EXICLO_*IGNORE EMPTY BATCH_^1CLO2_!ENQ 1_^1_%RTJ ATTCK€€P_*WRITE CHKPOINT (ATT)_^1_%RTJ WINDEX_*WRITE INDEXES N AND 0_^1_%ENQ 1_^1_%RTJ* OPMSG_+MESSAGE TO OPERATOR_^1EXICLO JMP* (CLOBAT)_$RETURN_@031576_^1*_]_^1***********************************************************************_^1*_]_^1*_$STATUS MESSAGE TO OPERATOR WHEN A BATCH IS BEING_^1*_$OPENED (OP) OR CLOSED (CL)_^1*_;OR AN ERROR OCCURRED (EM)_^1*_]_^1*_$(Q) = 0 OPENED_^1*_$€€(Q) = 1 CLOSED_^1*_$(Q) = 2_.ERROR MESSAGE_^1*CALL& RTJ OPMSG_^1*_]_^1***********************************************************************_^1*_]_^1OPMSG 0_"0_^1_%LDQ* OPMESX,Q_(PICK UP MESSAGE CODE_^1_%STQ* OPMES1+4_^1_%ENQ 3_^1OPLOOP INQ -1_.MOVE JOB NAME TO MSG BUFFER_^1_%LDA- IJOB,B_^1_%STA* OPMES+4,Q *** E'''_^1_%SQZ OP1_^1_%JMP* OPLOOP_^1OP1_"LDQ-_!BATCH,I_K*750506_^1€€_%CLR_"A_Q*750506_^1_%LRS_"4_Q*750506_^1_%ALS_"12_P*750506_^1_%LRS_"4_Q*750506_^1_%ALS_"12_P*750506_^1_%ADD_"=N$3030_K*750506_^1_%ADQ_"=N$2030_K*750506_^1_%STA*_!OPMES1+2_J*750506_^1_%STQ*_!OPMES1+1_J*750506_^1_%LDA- IFTA,I_*FIRST TRACK ADDR._^1_%LDQ =XOPMES2_^1_%RTJ BINDES_*CONVERT "FT"_^1_%LDA- ITRK,I NUMBER OF TRACKS ASSIGNED TO BATCH3'''''_^1_%LDQ =XOPMES3_^1_%RTJ BINDES €€CONVERT "NT" '''_^1_%LDA- VRCD,I_*NUMBER OF VERIFIABLE RECORDS_^1_%LDQ =XOPMES4_^1_%RTJ BINDES_*CONVERT "VR"_^1_%LDA- RCDER,I_)NUMBER OF ERRONEOUS RECORDS_^1_%LDQ =XOPMES5_^1_%RTJ BINDES_*CONVERT "ER"_^1_%LDA- RCD,I_+TOTAL NUMBER OF RECORDS_^1_%LDQ =XOPMES6_^1_%RTJ BINDES_*CONVERT "TR"_^1_%LDA- DELUS,I_)ERROR CODE_^1_%LDQ =XOPMES7_^1_%RTJ* BINDES_*CONVERT 'EM'_^1_%CLR A_^1_€€%STA- DELUS,I_)RESET ERROR FLAG_^1_%RTJ- (AMONI)_)OUTPUT COMMENT TO OPERATOR_^1_%VFD_"N7/6,N1/0,X4/RP,X4/CP_=*750506_^1_%ADC OPMCMP,0_^1_%VFD N6/0,X10/COMLU_^1_%ADC MSGSIZ_*MESSAGE SIZE_^1_%ADC OPMES_+MESSAGE BUFFER ADDR._^1_%JMP- (ADISP)_)GO TO DISP_^1OPMES ALF *, JOB= *_^1_%BSS (3)_^1_%ALF *, BATCH=*_^1OPMES1 NUM_"$2020_M*750506_^1_%BSS_"(2)_O*750506_^1_%ALF *,_"*_^1_€€%NUM $0A8D_+CRLF_^1_%ALF *, /FT=*_^1_%BSS OPMES2(3)_^1_%ALF *,/NT=* T'''_^1_%BSS OPMES3(3)_^1_%ALF *,/VR=*_^1_%BSS OPMES4(3)_^1_%ALF *,/ER=*_^1_%BSS OPMES5(3)_^1_%ALF *,/TR=*_^1_%BSS OPMES6(3)_^1_%ALF *,/EM=*_^1_%BSS OPMES7(3)_^1_%NUM $0A8D_+CRLF_^1_%NUM $0A8D_+CRLF_^1_%EQU MSGSIZ(*-OPMES)_^1OPMESX ALF *,OPCLEM*_^1OPMCMP RTJ RSTI_-RESTORE I /'_^1_%JMP* (OPMSG)_*R€€ETURNR'''''_^1*_]_^1***********************************************************************_^1*_]_^1*_$CONVERT BINARY NUMBER TO FIVE DIGIT DESIMAL NUMBER PLUS SIGN_^1*_]_^1*CALL& (A)=BINARY NUMBER_^1*_$(Q)=ADDR. OF 3-WORD BUFFER WHERE DESIMALS SHALL BE STORED_^1*_$RTJ BINDES_^1*_]_^1***********************************************************************_^1*_]_^1BINDES 0_"0_^1_%STQ€€* LARS_^1_%LDQ- I_^1_%STQ* SPARI_+SAVE I_^1_%ENQ 2_/PREPARE FOR 5 DIGITS PLUS SIGN_^1_%STQ- I_^1_%LDQ =N$2030_^1_%SAP B1_^1_%LDQ =N$2D30_^1_%TCA A_^1B1_#STQ* (LARS)_^1BACK_!CLR Q_^1_%DVI- TEN_^1_%INQ $30_^1_%SAZ B2_^1_%STQ* (LARS),I_^1_%CLR Q_^1_%DVI- TEN_^1_%INQ $30_^1_%QLS 8_^1_%ADQ* (LARS),I_^1_%STQ* (LARS),I_^1_%LDQ- I_^1_%INQ -1_^1_%STQ- I_^1_%SAZ B3_^1_%SQZ B5_^€€1_%JMP* BACK_^1B2_#ADQ =N$2000_^1_%JMP* B4_^1B3_#SQZ FINI_^1_%LDQ =N$2020_^1B4_#STQ* (LARS),I_^1_%LDQ- I_^1_%INQ -1_^1_%STQ- I_^1_%JMP* B3_^1FINI_!ENA -$10_^1B5_#ADD* (LARS)_^1_%STA* (LARS)_^1_%LDA* SPARI_^1_%STA- I_/RESTORE I_^1_%JMP* (BINDES)_(RETURN_^1*_]_^1_%BSS LARS,SPARI_^1*_]_^1***********************************************************************_^1*_]_^1*CALL& RTJ €€STOREC_*STORE RECORD ON DISK_^1*_$ADC P1_.RECORD DATA DESCRIPTOR ADDRESS_^1*_$ADC P2_.PARAMETER DATA DESCRIPTOR ADDRESS_^1*_]_^1*P1_"NUM $2010_^1*_$ADC BUFF1_+ADDRESS OF RECORD HEADER_^1*_$ADC LTH+10_*LENGTH OF RECORD INCL. HEADER (CHARS)_^1*_]_^1*P2_"NUM $2010_^1*_$ADC BUFF2_+ADDRESS OF PARAMETER STRING_^1*_$ADC 5_/LENGTH OF PARAMETER STRING (CHARS)_^1*_]_^1*BUFF2 ALF 3,D€€DDDA_)DDDD=FORMAT NO., A="Y" FOR VERIF. RECORD_^1*_]_^1***********************************************************************_^1*_]_^1_%ENT STOREC_^1_%ENT STOREX_N031576_^1_%EQU STOREX(*)_K031576_^1STOREC 0_"0_^1_%RTJ SAVREG_*SAVE REGISTERS AND INITIATE I_^1_%LDA- IOCI,I_*OPEN=0,CLOSED=NOT 0_^1_%SAZ S0_.SKIP IF BATCH IS OPEN_^1_%ENA 3_/ERROR, BATCH IS NOT OPEN_^1_%STA- DELUS€€,I_^1_%RAO* STOREC_*INCR. RETURN ADDR._^1_%RAO* STOREC_*INCR. RETURN ADDR._^1_%JMP SH_.RETURN TO REQUESTOR_^1S0_#LDQ* (STOREC)_(PICK UP 1. PARAMETER_^1_%RAO* STOREC_^1_%LDA- ONE,Q_+RECORD HEADER ADDRESS_^1_%STA- HDR,I_^1_%LDA- TWO,Q_+RECORD LENGTH INCL. HEADER_^1_%ALS 15_.DIVIDE BY TWO_^1_%SAP S1_.SKIP IF EVEN NO. OF CHARS_^1_%AND- ZROBIT+15_'MASK OFF AND ROUND UP_^1_%INA 1_^1S€€1_#STA- LTH10,I_)TOTAL NO. OF WORDS IN RECORD_^1_%LDQ- HDR,I_+HEADER ADDRESS_^1_%LDA- (ZERO),Q_(HEADER WORD 0_^1_%AND_"=N$A400_#KEEP ERROR FLAG, FC AND DOC BITS_%*751028_^1_%STA- (ZERO),Q_^1_%LDQ* (STOREC)_(PICK UP 2. PARAMETER_^1_%RAO* STOREC_*INCR. RETURN ADDR._^1_%LDQ- ONE,Q_+PARAMETER STRING ADDR._^1_%LDA- (ZERO),Q_(FIRST WORD OF FORMAT NO._^1_%STA- AUXBUF+2,I_%BASE 100_^1_%ALS€€ 8_^1_%STA- AUXBUF+3,I_%BASE 1000_^1_%LDA- ONE,Q_+SECOND WORD OF FORMAT NO._^1_%STA- AUXBUF,I_(BASE 1_^1_%ALS 8_^1_%STA- AUXBUF+1,I_%BASE 10_^1_%LDA- TWO,Q_+VERIFIABLE RECORD INDICATOR_^1_%ALS 8_^1_%STA- AUXBUF+4,I_^1_%CLR A_^1_%STA- AUXBUF+5,I_%ACCUMULATOR LOC._^1_%ENQ 4_^1SLOOP INQ -1_^1_%LDA- AUXBUF,B_(LOAD DIGIT FROM UPPER END_^1_%AND- H007F_+ISOLATE ASCIT CHAR_^1_%INA €€-NUMBAS_)DECREASE BY NUMBER BASE_^1_%SAP S2_^1SERR_!ENA 4_/ERROR, NON NUMERIC FORMAT NO._^1_%STA- DELUS,I_^1_%JMP SH_.ERROR EXIT_^1S2_#INA -10_-DECREMENT BY UPPER LIMIT_^1_%SAM S3_.SKIP IF VALID DIGIT_^1_%JMP* SERR_,ERROR EXIT_^1S3_#INA 10_^1_%ADD- AUXBUF+5,I_%ADD TO ACCUMULATOR_^1_%SQZ S4_.SKIP IF LAST DIGIT_^1_%STQ- QSAVE,I '''_^1_%MUI- TEN_-MULTIPLY BY 10_^1_%LDQ- QSAVE,€€I 6'''_^1_%STA- AUXBUF+5,I_%STORE INTERMEDIATE RESULT_^1_%JMP* SLOOP_+TREAT NEXT DIGIT_^1S4_#STA- AUXBUF+5,I_%FINAL RESULT IS BINARY FORMAT NO._^1_%SUB- FMTNO,I_)SUBTRACT PREVIOUS FORMAT NO_^1_%SAZ S5_.SKIP IF IDENTICAL_^1_%LDQ- HDR,I_^1_%LDA- (ZERO),Q_(FIRST WORD OF RECORD HEADER_^1_%AND-_!ZROBIT+13_I*751028_^1_%EOR- ONEBIT+13_'SET FORMAT CHANGE INDICATOR_^1_%STA- (ZERO),Q_^1_%LD€€A-_!LTH10,I_#SAVE LENGTH_;*751028_^1_%STA-_!SAVLTH,I_J*751028_^1_%JMP*_!S51_O*751028_^1S5_#LDA-_!LTH10,I_#CHECK IF RECOED LENGTH IS THE SAME_#*751028_^1_%EOR-_!SAVLTH,I_"IF THE FORMAT IS THE SAME_-*751028_^1_%SAZ_"1_Q*751028_^1_%JMP*_!S7_P*751028_^1S51_"LDA-_!AUXBUF+5,I_H*751028_^1_%STA- FMTNO,I_)RESET FORMAT NO._^1_%LDQ- HDR,I_+RECORD HEADER ADDR._^1_%STA- FOUR,Q_*PLACE FORMAT NO.€€ IN HEADER_^1_%LDA- AUXBUF+4,I_%VERIFIABLE RECORD INDICATOR_^1_%AND- H007F_+ISOLATE CHARACTER_^1_%EOR =N$59_+Y=VERIFIABLE RECORD_^1_%SAN S6_.SKIP IF REC. NOT VERIFIABLE_^1_%RAO-_!VRCD,I_L*750506_^1S6_#LDA- LTH10,I_)TOTAL HDR+REC LENGTH IN WORDS_^1_%INA -6_.HEADER LENGTH+1_^1_%SAM S7_.SKIP IF ZERO RECORD LENGTH_^1_%SUB- MAXLTH,I_(MAXIMUM RECORD LENGTH_^1_%SAM S8_.SKIP IF RECORD€€ WITHIN RANGE_^1S7_#ENA 5_/ERROR, RECORD LENGTH OUT OF RANGE_^1_%STA- DELUS,I_^1_%JMP SH_.ERROR EXIT_^1S8_#ADD- MAXLTH,I_(RESTORE RECORD LENGTH_^1_%INA 1_^1_%EOR- (ZERO),Q_^1_%STA- (ZERO),Q_(STORE INTO RECORD HEADER WORD 0_^1_%LDA- RCD,I_+TOTAL NO. OF RECORDS_^1_%SAN S9_.SKIP IF NOT FIRST RECORD_^1_%LDA- ONEBIT+15_^1_%STA- ONE,Q_+FIRST RECORD OF BATCH INDICATOR_^1_%JMP*_!SE_P*7€€51126_^1S9_#LDA- CURDA+1,I_'CURRENT DISK ADDR. (LSB)_^1_%STA- ONE,Q_+PREVIOUS REC. ADDR. (LSB)_^1_%LDA- CURDA,I_)CURRENT DISK ADDR. (MSB)_^1_%AND- H007F_+MASK OUT SIGNIFICANT BITS_^1_%ALS 8_/SHIFT TO UPPER_^1_%STA- THREE,Q_)PREVIOUS REC. ADDR. (MSB)_^1SE_#LDA- AVLTK,I_)AVAILABLE NO. OF WORDS IN TRACK_^1_%SUB- LTH10,I_)NO. OF WORDS IN RECORD INCL. HEADER_^1_%INA_"-1_)GET NEW TRACK €€IF ZERO WORDS LEFT_%*750506_^1_%SAM S10_-SKIP IF NOT SPACE IN THIS TRACK_^1_%INA_"1_Q*750506_^1_%JMP SB_.GO AND PROCESS REQUEST_^1S10_"LDA- ITRK,I_*NUMBER OF TRACKS ASSIGNED_^1_%SUB- MAXTRK,I_(MAX. NO. OF TRACKS IN ONE BATCH_^1_%SAN SC_.SKIP IF MORE TRACKS MAY BE ASSIGNED_^1_%JMP SD_.BATCH IS FULL_^1SC_#RTJ ASGNTR_*ASSIGN NEW TRACK_^1_%LDA- NWDTRK,I_(NO OF WORDS IN A TRACK_^1_€€%STA- AVLTK,I_)RESET NO. OF WORDS AVAILABLE_^1_%ENQ 0_^1_%RTJ NRARDW_*READ HEADER FROM LAST RECORD ON DISK_^1_%LDA- NDA+1,I_)NEXT (FREE) DISK ADDR. (LSB)_^1_%STA- AUXBUF+2,I_%NEXT RECORD ADDR (LSB)_^1_%LDA- AUXBUF+3,I_^1_%AND- HFF00_^1_%EOR- NDA,I_+NEXT (FREE) DISK ADDR. (MSB)_^1_%STA- AUXBUF+3,I_%NEXT RECORD ADDR. (MSB)_^1_%ENQ 1_^1_%RTJ NRARDW_*WRITE HEADER TO LAST RECORD ON €€DISK_^1_%RTJ* WINDEX_*WRITE INDEXES N AND 0_^1_%ENQ_"1_Q*750506_^1_%RTJ_"ATTCKP_$WRITE CHECKPOINT_6*750506_^1_%JMP* SE_^1SD_#LDA- CHKP,I_*CHKPOINT FREQUENCY_^1_%STA- CHKFLG,I_(CHKPOINT RECORD COUNTER_^1_%ENA 6_/ERROR, BATCH OVERFLOW_^1_%STA- DELUS,I_^1_%ENQ 0_^1_%RTJ NRARDW_*READ HEADER FROM LAST RECORD_^1_%ENA -0_^1_%STA- AUXBUF+2,I_%FFFF TO NEXT RECORD ADDR. (LSB)_^1_%STA- ND€€A+1,I_)NEXT (FREE) DISK ADDR. (LSB)_^1_%LDA- H00FF_^1_%STA- NDA,I_+NEXT (FREE) DISK ADDR. (MSB)_^1_%ALS 8_^1_%AND- AUXBUF+3,I_%NEXT RECORD ADDR. (MSB)_^1_%EOR- H00FF_^1_%STA- AUXBUF+3,I_%XXFF TO NEXT RECORD ADDR. (MSB)_^1_%ENQ 1_^1_%RTJ NRARDW_*WRITE HEADER OF LAST RECORD IN BATCH_^1_%JMP SG_^1SB_#STA- AVLTK,I_)AVAILABLE NO OF WORDS LEFT IN TRACK_^1_%LDQ- HDR,I_^1_%LDA- ONE,Q_^€€1_%SAM S11_-SKIP IF FIRST RECORD OF BATCH_^1_%LDA- CURDA+1,I_'CURRENT DISK ADDR. (LSB)_^1_%STA- ONE,Q_+PREVIOUS REC. ADDR. (LSB) TO HEADER_^1_%LDA- THREE,Q_^1_%ALS 8_^1_%AND- HFF00_^1_%EOR- CURDA,I_)CURRENT DISK ADDR. (MSD)_^1_%ALS 8_^1_%STA- THREE,Q_)PREVIOUS REC. ADDR (MSB) TO HEADER_^1S11_"LDQ- NDA,I_+NEXT (FREE) DISK ADDR. (MSB)_^1_%STQ- CURDA,I_)CURRENT DISK ADDR. (MSB)_^1_€€%LDA- NDA+1,I_)NEXT (FREE) DISK ADDR. (LSB)_^1_%STA- CURDA+1,I_'CURRENT DISK ADDR. (LSB)_^1_%SOV_"0_*CLEAR POSSIBLE OVERFLOW_/*750506_^1_%ADD- LTH10,I_)NO. OF WORDS IN REC. INCL. HEADER_^1_%SNO S12_-SKIP ON OVERFLOW_^1_%INQ 1_/CARRY OVER_^1_%AND- ZROBIT+15_'MASK OFF OVERFLOWED SIGN BIT_^1S12_"STQ- NDA,I_+NEXT (FREE) DISK ADDR. (MSB)_^1_%STA- NDA+1,I_)NEXT (FREE) DISK ADDR. (LSB)_€€^1_%LDQ- HDR,I_^1_%STA- TWO,Q_+STORE NEXT RECORD (LSB) ADDR. IN HEADER_^1_%LDA- THREE,Q_)GET HEADER WORD 3_^1_%AND- HFF00_^1_%EOR- NDA,I_^1_%STA- THREE,Q_)STORE NEXT RECORD (MSB) ADDR. IN HEADER_^1_%RTJ RECWR_+WRITE RECORD TO DISK_^1_%RAO- CHKFLG,I_(INCR. CHECKPOINT RECORD COUNTER_^1SF_#RAO- RCD,I_+TOTAL NO. OF RECORDS_^1_%LDQ- HDR,I_+RECORD HEADER ADDRESS_^1_%LDA- (ZERO),Q_(FIRST€€ WORD OF REC. HEADER_^1_%SAP S13_-SKIP IF RECORD IS WITHOUT ERROR_^1_%RAO- RCDER,I_)COUNT FOR ERRONEOUS RECORDS_^1_%EQU_"S13(*)_L*750506_^1SG_#LDA- CHKFLG,I_(CHECKPOINT RECORD COUNTER_^1_%SUB- CHKP,I_*CHKPOINT FREQUENCY_^1_%SAN S14_-SKIP IF CHECKPOINT SHOULD NOT BE WRITTEN_^1_%ENQ 1_^1_%RTJ ATTCKP_*WRITE CHECKPOINT_^1S14_"LDQ- HDR,I_^1_%LDA- ONE,Q_+SECOND WORD OF HEADER_^1_%SAP€€ SI_.SKIP IF NOT FIRST RECORD IN BATCH_^1_%RTJ* WINDEX_*WRITE INDEXES N AND 0_^1_%ENQ_"1_Q*750506_^1_%RTJ_"ATTCKP_L*750506_^1SI_#LDQ- HDR,I_^1_%CLR A_^1_%STA- (ZERO),Q_(CLEAR OUT RECORD HEADER_^1_%STA- ONE,Q_^1_%STA- TWO,Q_^1_%STA- THREE,Q_^1_%STA- FOUR,Q_^1SH_#RTJ ERRFLG_*SET EXTERNAL ERROR FLAGS_^1_%RTJ RSTREG_*RESTORE REGISTERS_^1_%JMP (STOREC)_(RETURN_^1*_]_^1*************€€***********************************************************_^1*_]_^1WINDEX 0_"0_/WRITE INDEXES N AND 0_^1_%LDA- IFIL,I_*FILE (INDEX) NO. N_^1_%ENQ 1_^1_%RTJ INDEX_+WRITE INDEX NO. N_^1_%ENA 0_/FILE (INDEX) NO. 0_^1_%ENQ 1_^1_%RTJ INDEX_+WRITE INDEX NO. 0_^1_%JMP* (WINDEX)_(RETURN_^1*_]_^1***********************************************************************_^1*_]_^1ERRFLG 0_"€€0_/SET EXTERNAL ERROR FLAGS_^1_%LDA- DELUS,I_^1_%STA+ DELUSR_^1_%SAZ ERRX_^1_%ENQ 2_/ERROR MESSAGE_^1_%RTJ OPMSG_+MESSAGE TO OPERATOR_^1ERRX_!LDA- EOTFL,I_^1_%STA+ EOTFLG_^1_%JMP* (ERRFLG)_(RETURN_^1*_]_^1***********************************************************************_^1*_]_^1*_$CONVERT SECTOR ADDRESS TO WORD ADDRESS_^1*CALL&_]_^1*_$(A)=SECTOR ADDR._^1*_$RTJ SECWRD_^1*_€€$(Q)=MSB_.DISK WORD ADDR. (MSB)_^1*_$(A)=LSB_.DISK WORD ADDR. (LSB)_^1*_]_^1************************************************************************_^1*_]_^1SECWRD 0_"0_^1_%CLR Q_^1_%STA* X1+1_^1_%ALS 1_^1_%SAP X1_^1_%AND- ZROBIT+15_^1_%INQ 1_^1X1_#ADD =N0_^1_%SOV_"0_*CLEAR OVERFLOW_8*750506_^1_%SAP_"X2_P*750506_^1_%AND- ZROBIT+15_^1_%INQ 1_^1X2_#ALS 1_^1_%LLS 5_^1_%ARS 1_€€^1_%AND- ZROBIT+15_^1_%JMP* (SECWRD)_(RETURN_^1*_]_^1************************************************************************_^1*_]_^1SAVREG 0_"0_/SAVE REGISTERS AND INITIATE I_^1_%STQ* QREG_,SAVE Q_^1_%STA* AREG_,SAVE A_^1_%LDA- I_^1_%STA* IREG_,SAVE I_^1_%LDA =XBST_+BATCH STATUS TABLE ADDRESS_^1_%STA- I_/INITIATE I_^1_%CLR_"A_^1_%STA-_!EOTFL,I_#CLEAR BATCH FULL INDICATOR_^1_%STA€€-_!DELUS,I_^1_%JMP* (SAVREG)_(RETURN_^1*_<)'''''_^1************************************************************************_^1*_<)'''''_^1RSTI_!0_"0_0RESTORE I AFTER I/O REQUEST &'******_^1_%LDA =XBST_,BATCH STATUS TABLE ADDRESS''''_^1_%STA- I_!I'_^1_%JMP* (RSTI)_+RETURNQ'''''_^1*_]_^1************************************************************************_^1*_]_^1RSTREG 0_"0_/RES€€TORE REGISTERS_^1_%LDQ* QREG_,RESTORE Q_^1_%LDA* IREG_^1_%STA- I_/RESTORE I_^1_%LDA* AREG_,RESTORE A_^1_%JMP* (RSTREG)_(RETURN_^1*_]_^1_%BSS QREG,AREG,IREG_^1************************************************************************_^1*_]_^1DISKER 0_"0_^1_%ENA 12_.ERROR, DISK I/O FAILED_^1_%STA- DELUS,I_)SET ERROR FLAG_^1_%RTJ ERRFLG_*SET EXTERNAL FLAGS_^1_%JMP* (DISKER)_(RETURN_^€€1*_]_^1************************************************************************_^1*_]_^1*_$ASSIGN NEXT AVAILABLE TRACK TO CURRENT BATCH_^1*_]_^1*CALL& RTJ ASGNTR_^1*_]_^1************************************************************************_^1*_]_^1ASGNTR 0_"0_^1_%LDA- ITRK,I_*NUMBER OF TRACKS PREVIOUSLY ASSIGNED_^1_%ALS 4_/CONVERT TO SECTORS_^1_%ADD- IFTA,I_*SECTOR ADDR. OF FI€€RST TRACK IN BATCH_^1_%STA* TRKNO_+TRACK NO. TO BE ASSIGNED THIS TIME_^1_%LDA- IFTA,I_*SECTOR ADDR. OF TRACK TABLE (SECTOR 0)_^1_%RTJ SECWRD_*CONVERT TO WORD ADDR._^1_%SOV_"0_*CLEAR OVERFLOW_8*750506_^1_%ADD- ITRK,I_*WORD NO. IN TRACK TABLE (TRT)_^1_%SNO ASG1_,SKIP ON OVERFLOW_^1_%INQ 1_/CARRY OVER_^1_%AND- ZROBIT+15_'MASK OUT OVERFLOW BIT_^1ASG1_!STA* ASGLSB_*DISK WORD ADDR. (L€€SB)_^1_%STQ* ASGMSB_*DISK WORD ADDR. (MSB)_^1_%RAO- ITRK,I_*NUMBER OF TRACKS ASSIGNED TO THIS BATCH_^1_%LDA- ITRK,I_^1_%SUB- MAXTRK,I_(MAXIMUM NO. OF TRACKS THAT CAN BE ASSIGNED_^1_%SAN ASG2_,SKIP IF LAST TRACK NOT ASSIGNED_^1_%RAO- EOTFL,I_)SET FLAG FOR LAST TRACK ASSIGNED_^1ASG2_!LDA* TRKNO_+ASSIGNED TRACK NO._^1_%RTJ SECWRD_*CONVERT TO WORD ADDR._^1_%STQ- NDA,I_+NEXT (FREE) DI€€SK ADDR. (MSB)_^1_%STA- NDA+1,I_)NEXT (FREE) DISK ADDR. (LSB)_^1_%RTJ- (AMONI)_)WRITE TRT_^1_%VFD N7/2,N1/0,X4/RP,X4/CP_^1_%ADC ASGCMP,0_^1_%VFD N6/0,X10/DLU_^1_%NUM 2_^1_%ADC TRKNO_^1ASGMSB NUM 0_/MSB_^1ASGLSB NUM 0_/LSB_^1_%JMP- (ADISP)_)GO TO DISP_^1TRKNO NUM 0_/TRACK NUMBER ASSIGNED TO BATCH_^1_%NUM 0_/TRT TERMINATOR (ZERO)_^1ASGCMP RTJ RSTI_-RESTORE I -'R (ZER_^1_%S€€QP ASG3_-SKIP ON NORMAL COMPLETION 2'''_^1_%RTJ DISKER_*DISK I/O ERROR_^1ASG3_!JMP* (ASGNTR)_(RETURN_^1*_]_^1************************************************************************_^1*_]_^1*_$READ/WRITE INDEX ON DISK IN SECTOR MODE_^1*CALL&_]_^1*_$(Q)=0_!FREAD_(SECTOR ADDRESSING_^1*_$(Q)=1_!FWRITE_^1*_$(A)=N_0N=INDEX NO. (0.LE.N.LE.MAXBCH)_^1*_$RTJ INDEX_^1*_]_^1***************€€*********************************************************_^1*_]_^1INDEX 0_"0_^1_%ADD- INDTRK,I_(BASE SECTOR ADDRESS OF INDEX AREA_^1_%STA* INDLSB_^1_%LDA* INDADX,Q_(STARTING ADDR. OF BUFFER_^1_%STA* INDADR_^1_%LDQ- FRDREQ,B_(REQUEST FUNCTION WORD_^1_%STQ* INDIO+1_^1INDIO RTJ- (AMONI)_)DISK I/O_^1_%NUM 0_/REQUEST FUNCTION CODE_^1_%ADC INDCMP,0_^1_%VFD N6/0,X10/DLU_^1_%ADC INDS€€IZ_*NO. OF WORDS IN INDEX TABLE_^1INDADR ADC 0_/STARTING ADDR. OF BUFFER_^1_%NUM 0_/MSB_^1INDLSB NUM 0_/LSB (SECTOR ADDR)_^1_%JMP- (ADISP)_)GO TO DISP_^1INDADX ADC BST+AUXBUF_%AUXILIARY BUFFER ADDRESS_^1_%ADC BST+INDX_(RESIDENT INDEX TABLE ADDRESS_^1INDCMP RTJ RSTI_-RESTORE I ('X TABL_^1_%SQP INDEXI_+SKIP ON NORMAL COMPLETION O'''_^1_%RTJ DISKER_*DISK I/O ERROR_^1INDEXI JMP€€* (INDEX)_)RETURN_^1*_]_^1************************************************************************_^1*_]_^1*_$READ/WRITE ATT ON DISK AS CHECKPOINT_^1*_$(SECTOR 1 OF BATCH TRACK 0)_^1*CALL&_]_^1*_$(Q)=0_!FREAD_(SECTOR ADDRESSING_^1*_$(Q)=1_!FWRITE_^1*_$RTJ ATTCKP_^1*_]_^1************************************************************************_^1*_]_^1ATTCKP 0_"0_^1_%LDA- FRDREQ,B_(€€REQUEST CODE WORD_^1_%STA* ATTIO+1_)REQUEST FUNCTION CODE_^1_%LDA- IFTA,I_*FIRST TRACK ADDR. OF BATCH_^1_%INA 1_/ATT IN SECTOR 1_^1_%STA* ATTLSB_*LSB_^1_%ENA 0_^1_%STA- CHKFLG,I_(RESET CHECKPOINT RECORD COUNTER_^1ATTIO RTJ- (AMONI)_)DISK I/O_^1_%NUM 0_/REQUEST FUNCTION CODE_^1_%ADC ATTCMP,0_^1_%VFD N6/0,X10/DLU_^1_%ADC ATTSIZ_*NUMBER OF WORDS_^1_%ADC BST+ATT_)STARTING ADDR.€€_^1_%NUM 0_/MSB_^1ATTLSB NUM 0_/LSB_^1_%JMP- (ADISP)_)GO TO DISP_^1ATTCMP RTJ RSTI_-RESTORE I 5'_^1_%SQP ATTEXI_+SKIP ON NORMAL COMPLETION '''_^1_%RTJ DISKER_*DISK I/O ERROR_^1ATTEXI JMP* (ATTCKP)_(RETURN_^1*_]_^1************************************************************************_^1*_]_^1*_$READ/WRITE OF CURRENT RECORDS HEADER_^1*CALL&_]_^1*_$(Q)=0_!READ_)WORD ADDRESSING€€_^1*_$(Q)=1_!WRITE_^1*_$RTJ NRARDW_^1*_]_^1************************************************************************_^1*_]_^1NRARDW 0_"0_^1_%LDA- RDREQ,B_)REQUEST CODE WORD FROM BST_^1_%STA* NRAIO+1_^1_%LDA- CURDA+1,I_'CURRENT DISK ADDR. (LSB)_^1_%STA* NRALSB_^1_%LDA- CURDA,I_)CURRENT DISK ADDR. (MSB)_^1_%STA* NRAMSB_^1NRAIO RTJ- (AMONI)_)I/O ON DISK_^1_%NUM 0_/REQUEST CODE_^1_%A€€DC NRACMP,0_^1_%VFD N6/0,X10/DLU_^1_%NUM 5_/NO. OF WORDS_^1_%ADC BST+AUXBUF_%BUFFER ADDR._^1NRAMSB NUM 0_/MSB_^1NRALSB NUM 0_/LSB_^1_%JMP- (ADISP)_)GO TO DISP_^1NRACMP RTJ RSTI_-RESTORE I 9'_^1_%SQP NRAEXI_+SKIP ON NORMAL COMPLETION C'''_^1_%RTJ DISKER_*DISK ERROR EXIT_^1NRAEXI JMP* (NRARDW)_(RETURN_^1*_]_^1******************************************************************€€******_^1*_]_^1*_$WRITE RECORD INCL. HEADER TO DISK IN WORD MODE_^1*_]_^1*CALL& RTJ RECWR_^1*_]_^1************************************************************************_^1*_]_^1RECWR 0_"0_^1_%LDA- HDR,I_+RECORD HEADER ADDRESS_^1_%STA* RECADR_^1_%LDA- LTH10,I_)RECORD LENGTH INCL. HEADER_^1_%STA* RECSIZ_^1_%LDA- CURDA,I_)CURRENT DISK ADDR. (MSB)_^1_%STA* RECMSB_^1_%LDA- CURDA+1,I€€_'CURRENT DISK ADDR. (LSB)_^1_%STA* RECLSB_^1_%RTJ- (AMONI)_)WRITE ON DISK_^1_%VFD N7/2,N1/0,X4/RP,X4/CP_^1_%ADC RECCMP,0_^1_%VFD N6/0,X10/DLU_^1RECSIZ NUM 0_/RECORD SIZE INCL. HEADER_^1RECADR NUM 0_/RECORD HEADER ADDR._^1RECMSB NUM 0_/MSB_^1RECLSB NUM 0_/LSB_^1_%JMP- (ADISP)_)GO TO DISP_^1RECCMP RTJ RSTI_-RESTORE I ,'_^1_%SQP RECEXI_+SKIP ON NORMAL COMPLETION J'''_^1_%RTJ€€ DISKER_*DISK I/O ERROR_^1RECEXI JMP* (RECWR)_)RETURN_^1*_]_^1************************************************************************_^1*_]_^1*_$ERROR FLAGGING OF FIELD AND RECORD HEADER_^1*_]_^1*CALL& RTJ ERRMRK_^1*_$ADC P1_.RECORD (INCL. HEADER) DATA DESCR. ADDR._^1*_$ADC P2_.FIELD DATA DESCRIPTOR ADDR._^1*_]_^1*P1_"NUM $2010_+AREA DATA DESCRIPTOR_^1*_$ADC BUFF1_+RECORD HE€€ADER ADDRESS_^1*_$ADC LTH+10_*LENGTH OF RECORD INCL. HEADER (CHARS)_^1*_]_^1*P2_"NUM $20X0_+FIELD DATA DESCRIPTOR_^1*_$ADC BUFF1+Y_)FIELD ADDRESS WITHIN DATA RECORD_^1*_$ADC Z_/FIELD LENGTH_^1*_]_^1************************************************************************_^1*_]_^1_%EQU ADDR(1),LTH(2)_^1_%ENT ERRMRK_^1_%ENT ERRMRX_N031576_^1_%EQU ERRMRX(*)_K031576_^1ERRMRK 0_"0€€_^1_%STA* EXIERR+1_(SAVE A_^1_%STQ* EXIERR+3_(SAVE Q_^1_%CLR_"A_^1_%STA+_!DELUSR_$CLEAR ERROR FLAG_^1_%LDA* (ERRMRK)_(PICK UP 1.PARAMETER_^1_%RAO* ERRMRK_*INCR. RETURN ADDR._^1_%STA* DDADR_+SAVE D.D. ADDR. OF AREA_^1_%LDA* (ERRMRK)_(PICK UP 2. PARAMETER_^1_%RAO* ERRMRK_*INCR. RETURN ADDR._^1_%STA* DDADR+1_)SAVE D.D. ADDR. OF FIELD_^1_%RTJ WITHIN_*CHECK FOR FIELD WITHIN RECORD_^1DD€€ADR ADC 0_/D.D. OF RECORD INCL. HEADER_^1_%ADC 0_/D.D. OF FIELD_^1_%ADC ERRDET_*ERROR EXIT_^1_%LDQ* DDADR_+RECORD D.D. ADDR_^1_%LDQ- ADDR,Q_*RECORD HEADER ADDR._^1_%LDA- (ZERO),Q_(FIRST WORD OF HEADER_^1_%AND- ZROBIT+15_^1_%EOR- ONEBIT+15_^1_%STA- (ZERO),Q_(STORE ERROR FLAG IN RECORD HEADER_^1_%LDQ* DDADR+1_)FIELD D.D. ADDR._^1_%LDA- (ZERO),Q_(FIRST WORD OF D.D._^1_%LDQ- ADDR,Q€€_*FIELD ADDR._^1_%AND- ONEBIT+3_(UPPER CHAR=0,LOWER CHAR=1_^1_%SAZ E1_.SKIP IF FIELD STARTS IN UPPER CHAR._^1_%LDA- (ZERO),Q_(FIRST WORD OF FIELD_^1_%AND- ZROBIT+7_^1_%EOR- ONEBIT+7_(ERROR FLAG TO FIRST CHAR. IN FIELD_^1_%JMP* E2_^1E1_#LDA- (ZERO),Q_(FIRST WORD OF FIELD_^1_%AND- ZROBIT+15_^1_%EOR- ONEBIT+15_'ERROR FLAG TO FIRST CHAR. IN FIELD_^1E2_#STA- (ZERO),Q_(STORE FIELD ERROR€€ FLAG_^1_%JMP* EXIERR_^1ERRDET ENA 11_.ERROR, FIELD VIOLATES RECORD BORDER_^1_%ENQ DELUS_^1_%STA BST,Q_^1_%STA+ DELUSR_*STORE EXTERNAL ERROR FLAG_^1EXIERR LDA =X0_-RESTORE A_^1_%LDQ =X0_-RESTORE Q_^1_%JMP* (ERRMRK)_(RETURN_^1*_]_^1************************************************************************_^1*_]_^1*_$RECORD CHECKING AND ERROR FLAGGING OF RECORD HEADER AND FIELD_^1€€*_$IN CASE OF FIELD CONTAINING REJECT CHARACTER(S)_^1*_]_^1*CALL& RTJ REJMRK_^1*_$ADC P1_.RECORD (INCL. HEADER) DATA DESCR. ADDR._^1*_]_^1*P1_"NUM $2010_+AREA DATA DESCRIPTOR_^1*_$ADC BUFF1_+RECORD HEADER ADDRESS_^1*_$ADC LTH+10_*LENGTH OF RECORD INCL. HEADER (CHARS)_^1*_]_^1*P2_"NUM $2020_+HEADER DATA DESCRIPTOR_^1*_$ADC BUFF1_+RECORD HEADER ADDRESS_^1*_$ADC 10_.LENGTH OF €€RECORD HEADER ONLY (CHARS)_^1*_]_^1*P3_"NUM $2020_+RECORD DATA DESCRIPTOR_^1*_$ADC BUFF1+5_)RECORD ADDRESS_^1*_$ADC LTH_-LENGTH OF RECORD ONLY (CHARS)_^1*_]_^1*P4_"NUM $2030_+FIELD DATA DESCRIPTOR_^1*_$ADC BUFF15_)FIELD ADDRESS_^1*_$ADC ..._-FIELD LENGTH_^1*_$._]_^1*_$._]_^1*_$._]_^1*_$SUBFIELD DESCRIPTIONS AS DEFINED BY DRAFT SYSTEM FOLLOWS HERE_^1*_]_^1*********************€€***************************************************_^1*_]_^1_%ENT REJMRK_^1_%ENT REJMRX_N031576_^1_%EQU REJMRX(*)_K031576_^1REJMRK 0_"0_^1_%STA* EXIREJ+1_'SAVE A_^1_%STQ* EXIREJ+3_(SAVE Q_^1_%ENA_"0_Q*750506_^1_%STA_"RJRUSR_$CLEAR REJECT-IN-RECORD FLAG_+*750506_^1_%STA+_!DELUSR_$CLEAR ERROR FLAG_^1_%LDQ* (REJMRK)_(PICK UP PARAMETER_^1_%RAO* REJMRK_^1_%STQ* DDR_-SAVE RECORD DATA€€ DESCRIPTOR ADDR._^1_%STQ* DDRM_^1_%LDA- (ZERO),Q_(FIRST WORD OF D.D._^1_%AND* H00F0_+MASK OUT LEVEL_^1_%EOR- ONEBIT+4_(CHECK FOR LEVEL 1_^1_%SAZ R1_.SKIP IF LEVEL 1_^1_%ENA 8_/ERROR,FIRST DATA DESCRIPTOR NOT OF LEVEL 1_^1_%JMP* ERRFND+1_(RETURN TO REQUESTOR_^1R1_#LDA- LTH,Q_+RECORD LENGTH (CHARS)_^1_%STA* RLEN_,RECORD LENGTH INCL. HEADER_^1_%INQ 3_/ADJUST POINTER TO NEXT D.D._^€€1_%LDA- (ZERO),Q_(FIRST WORD OF D.D._^1_%AND* H00F0_+MASK OUT LEVEL_^1_%EOR- ONEBIT+5_(CHECK FOR LEVEL 2_^1_%SAZ R2_.SKIP IF LEVEL 2_^1_%ENA 9_/ERROR, SECOND D.D. NOT AT LEVEL 2_^1_%JMP* ERRFND+1_(RETURN TO REQUESTOR_^1R2_#LDA* RLEN_,RECORD LENGTH INCL. HEADER_^1_%SUB- LTH,Q_+SUBTRACT HEADER LENGTH_^1_%STA* RLEN_,DATA RECORD LENGTH_^1LOOK_!INQ 3_/INCR. D.D. POINTER TO NEXT D.D. €€ADDR._^1_%LDA- (ZERO),Q_(FIRST WORD OF FIELD D.D._^1_%AND* H00F0_+MASK OUT LEVEL_^1_%STA* LEVEL_+SAVE CURRENT LEVEL_^1_%EOR- ONEBIT+4_(CHECK FOR LEVEL 1_^1_%SAN R3_.SKIP IF NOT LEVEL 1_^1_%JMP* EXIREJ_*FINISHED, NORMAL RETURN TO REQUESTOR_^1R3_#INQ 3_/INCR. D.D. POINTER TO LOOK AT NEXT D.D._^1_%LDA- (ZERO),Q_(FIRST WORD OF NEXT D.D._^1_%INQ -3_.DECR. D.D. POINTER TO CURRENT D.D.€€_^1_%AND* H00F0_+MASK OUT LEVEL_^1_%TCA A_/MAKE IT NEGATIVE_^1_%ADD* LEVEL_+CURRENT LEVEL_^1_%SAP R4_.SKIP IF ELEMENTARY ITEM_^1_%JMP* LOOK_,CURRENT LEVEL LOWER THAN NEXT_^1R4_#STQ* DDR+1_+ADJUST FIELD D.D. PARAMETER_^1_%STQ* DDRM+1_^1_%STQ* DDF_-ADJUST FIELD D.D. PARAMETER_^1_%RTJ WITHIN_*CHECK FOR FIELD INSIDE RECORD_^1DDR_"ADC 0_/RECORD DATA DESCRIPTOR ADDRESS_^1_%ADC 0_/FI€€ELD DATA DESCRIPTOR ADDRESS_^1_%ADC ERRFND_*ERROR, RECORD BORDER VIOLATION_^1_%RTJ+ IFREJ_+CHECK FOR REJECT CHARS_^1DDF_"ADC 0_/FIELD DATA DESCRIPTOR ADDR._^1_%ADC_"RJCHR_%REJECTS_?*750506_^1_%JMP*_!NOREJ_%NO REJECTS_<*750506_^1RJCHR RTJ_"ERRMRK_L*750506_^1DDRM_!ADC 0_/RECORD DATA DESCRIPTOR ADDR._^1_%ADC 0_/FIELD DATA DESCRIPTOR ADDR._^1_%RAO_"RJRUSR_$SET REJECT-IN-RECORD FLA€€G_-*750506_^1NOREJ LDQ* DDRM+1_*FIELD D.D. ADDR._^1_%LDA-_!LTH,Q_M031576_^1_%AND*_!H0FFF_(SAVE FIELD LENGTH_3031576_^1_%STA*_!NOREJ1+1_J031576_^1_%LDA* RLEN_,REMAINING RECORD LENGTH_^1NOREJ1 SUB_"=X0_*SUBTRACT LENGTH OF CURRENT ITEM_$031576_^1_%STA* RLEN_,REMAINING RECORD LENGTH_^1_%SAZ EXIREJ_*SKIP IF ALL FIELDS ARE CHECKED_^1_%JMP* LOOK_,GET NEXT ITEM_^1ERRFND ENA 10_.ERROR, F€€IELD VIOLATES RECORD BORDER_^1_%ENQ DELUS_^1_%STA BST,Q_^1_%STA+ DELUSR_*STORE EXTERNAL ERROR FLAG_^1EXIREJ LDA =X0_-RESTORE A_^1_%LDQ =X0_-RESTORE Q_^1_%JMP* (REJMRK)_(RETURN_^1*_]_^1RLEN_!NUM 0_/REMAINING RECORD LENGTH_^1LEVEL NUM 0_/CURRENT ITEM LEVEL_^1H00F0 NUM $00F0_+LEVEL MASK_^1H0FFF NUM $0FFF_O031576_^1*_]_^1******************************************************€€******************_^1*_]_^1*_$CHECK FOR FIELD WITHIN RECORD BORDERS_^1*_]_^1*CALL& RTJ WITHIN_^1*_$ADC P1_.RECORD DATA DESCRIPTOR ADDRESS_^1*_$ADC P2_.FIELD DATA DESCRIPTOR ADDRESS_^1*_$ADC P3_.BORDER VIOLATION ERROR EXIT ADDRESS_^1*_]_^1*_$MAY OPERATE IN 32K AS WELL AS 64K MODE_^1*_]_^1************************************************************************_^1*_]_^1WITHIN 0_"0€€_^1_%STA* EXIWIT+1_(SAVE A_^1_%STQ* EXIWIT+3_(SAVE Q_^1_%LDA* (WITHIN)_(PICK UP 1. PARAMETER_^1_%RAO* WITHIN_*INCR. RETURN ADDR._^1_%STA* ADEFAD_*RECORD DATA DESCRIPTOR ADDR._^1_%LDQ* (WITHIN)_(PICK UP 2. PARAMETER_^1_%RAO* WITHIN_*INCR. RETURN ADDR._^1_%STQ* BDEFAD_*FIELD DATA DESCRIPTOR ADDR._^1_%LDA- ADDR,Q_*FIELD ADDR._^1_%STA* B_/FIELD WORD ADDRESS_^1_%LDQ* ADEFAD_*RECORD D.D.€€ ADDR._^1_%LDA- ADDR,Q_*RECORD ADDR._^1_%STA* A_/RECORD (WORD) ADDR._^1_%AND- HE000_+MASK OUT UPPER 3 BITS_^1_%ALS 3_/3 BIT BINARY VALUE_^1_%STA* AU_.INTERMEDIATE SAVE_^1_%LDA* B_/FIELD WORD ADDR._^1_%AND- HE000_+MASK OUT UPPER 3 BITS_^1_%ALS 3_/3 BIT BINARY VALUE_^1_%SUB* AU_.MAKE HIGH ORDER DIFF_^1_%SAP W1_.SKIP IF FIELD EQUAL TO OR ABOVE RECORD_^1_%JMP* BERROR_*FIELD CERTAINL€€Y BELOW RECORD_^1W1_#INA -2_.LEGAL VALUE 0 OR 1_^1_%SAM W2_.SKIP IF DIFF BELOW $3FFF_^1_%JMP* BERROR_*FIELD MORE THAN $3FFF ABOVE RECORD_^1W2_#INA 2_/RESTORE DIFF_^1_%ALS 13_.MAKE BIT 13 OF DIFF_^1_%STA* DIFF+1_*SAVE IT_^1_%LDA* A_/RECORD WORD ADDR._^1_%AND- H1FFF_+MASK OFF UPPER 3 BITS_^1_%ALS 1_/MAKE IT CHAR. "ADDR."_^1_%STA* A_/SAVE IT_^1_%LDA* B_/FIELD WD. ADDR._^1_%AND- H€€1FFF_+MASK OFF UPPER 3 BITS_^1DIFF_!EOR =N0_-SET DIFFERENCE BIT 13_^1_%ALS 1_/MAKE IT CHAR. ADDR._^1_%STA* B_/SAVE IT_^1_%LDQ* ADEFAD_*RECORD D.D. ADDR._^1_%LDA- (ZERO),Q_(D.D. WORD 0_^1_%ARS 3_/0=UPPER CHAR, 1=LOWER CHAR_^1_%AND- ONEBIT_*MASK OUT UPPER/LOWER BIT_^1_%ADD* A_/ADJUST RECORD CHAR "ADDR."_^1_%STA* A_/SAVE IT_^1_%LDQ* BDEFAD_*FIELD D.D. ADDR._^1_%LDA- (ZERO),Q_(D.D.W€€ORD 0_^1_%ARS 3_/0=UPPER, 1=LOWER_^1_%AND- ONEBIT_*MASK OUT UPPER/LOWER BIT_^1_%ADD* B_/ADJUST FIELD CHAR. "ADDR."_^1_%SUB* A_/SUBTRACT RECORD CHAR. "ADDR."_^1_%STA*_!A_Q031576_^1_%SAP W3_.SKIP IF FIELD STARTS ON OR ABOVE RECORD_^1_%JMP* BERROR_*FIELD STARTS BELOW RECORD_^1W3_#LDQ* BDEFAD_*FIELD D.D. ADDR._^1_%LDA-_!LTH,Q_M031576_^1_%AND*_!H0FFF_(SAVE FIELD LENGTH_3031576_^1_%ADD€€*_!A_,SAVE FIELD LENGTH_3031576_^1_%STA*_!A_Q031576_^1_%LDQ* ADEFAD_*RECORD D.D. ADDR._^1_%SUB- LTH,Q_+RECORD LENGTH (CHARS)_^1_%SAZ W4_.SKIP IF END OF FIELD EQ END OF RECORD_^1_%TCA A_/NEGATE FOR TEST_^1_%SAP W4_.SKIP IF END OF FIELD IS WITHIN RECORD_^1BERROR LDQ* (WITHIN)_(PICK UP 3. PARAMETER_^1_%STQ* WITHIN_*ERROR LABEL ADDR._^1_%JMP* EXIWIT_*RETURN TO ERROR LABEL_^1W4_#RAO*€€ WITHIN_*INCR. RETURN ADDR._^1EXIWIT LDA =X0_-RESTORE A_^1_%LDQ =X0_-RESTORE Q_^1_%JMP* (WITHIN)_(RETURN_^1*_]_^1ADEFAD NUM 0_/RECORD DATA DESCRIPTOR ADDR._^1BDEFAD NUM 0_/FIELD DATA DESCRIPTOR ADDR._^1AU_#NUM 0_/UPPER 3 BIT DIFFERENCE_^1A_$NUM 0_/RECORD "ADDR."_^1B_$NUM 0_/FIELD "ADDR."_^1*_]_^1**_] *750506_^1**_] *750506_^1_%ENT_"WRTBCH_L*750506_^1_%ENT WRTBCX_N031576_^1€€_%EQU WRTBCX(*)_K031576_^1_%EQU_"VLOS($5F)_I04/22/7_^1**_#WRITE OUT BATCHES TO TAPE BY EMTFIL_6*750506_^1WRTBCH NOP_"0_Q*750506_^1_%LDA-_!(VLOS)_'TEST IF CYBERDATA ACTIVE_,031576_^1_%SAM_"3_Q031576_^1_%LDA+_!=XFILNM1-GTF-1_#CYBERDATA ACTIVE_/031576_^1_%STA*_!GTF+8_%LOAD EMTFL1_;031576_^1_%LDA-_!$F7_(LOWEST UNPROTECTED MINUS ONT_**750506_^1_%INA_"1_Q*750506_^1_%STA*_!GTF+6_%STORE I€€N GTFILE REQUEST AS START ADDR_^1_%STA*_!JMPI+1_$ALSO IN JUMP INSTRUCTION_.*750506_^1GTF_"GTFILE JMPI,FILNAM-GTF-1,0,0,0,0,0,1_5*750506_^1_%NUM_"0,0_O*750506_^1_%EXIT_U*750506_^1JMPI_!JMP+_!0_*JUMP TO FIRST LOCATION_0*750506_^1*_] *750506_^1FILNAM ALF_"3,EMTFIL_J*750506_^1FILNM1 ALF_"3,EMTFL1_"LOADED WITH CYBERDATA ACTIVE_*031576_^1*************************************************€€***********************_^1*_]_^1*_$B A T C H S T A T U S T A B L E_^1*_]_^1************************************************************************_^1*_]_^1_%ENT BST_.JUST FOR DEBUGGING PURPOSE '''_^1_%EQU BST(*)_^1_%ADC *_/START OF BATCH STATUS TABLE_^1_%EQU ATT(*-BST)_^1_%NUM $4441_+START OF ACTIVE TERMINAL TABLE_^1_%EQU FTOB(*-BST)_^1_%NUM 0_/FIRST TRACK OF BATCH_^1_%NU€€M_"$433F_%IDK,ENTRY_=*750506_^1_%BZS_"(5)_O*750506_^1_%EQU AVLTK(*-BST)_^1_%NUM 0_/AVAILABLE NUMBER OF WORDS IN TRACK_^1_%EQU CURDA(*-BST)_^1_%NUM 0_/CURRENT DISK ADDRESS (MSB)_^1_%NUM 0_/CURRENT DISK ADDRESS (LSB)_^1_%EQU NDA(*-BST)_^1_%NUM 0_/NEXT (FREE) DISK ADDRESS (MSB)_^1_%NUM 0_/NEXT (FREE) DISK ADDRESS (LSB)_^1_%EQU FMTNO(*-BST)_^1_%NUM 0_/FORMAT NUMBER_^1_%EQU R€€FA(*-BST)_^1_%NUM 4_/RELATIVE FORMAT FIELD ADDRESS_^1_%EQU BMOD(*-BST)_^1_%NUM $3000_+BASIC MODE (ENTRY)_^1_%NUM 0_/N/A_^1_%EQU BMDA(*-BST)_^1_%NUM 0_/BASIC MODE DISK ADDRESS (MSB)_^1_%NUM 0_/BASIC MODE DISK ADDRESS (LSB)_^1_%EQU SW1(*-BST)_^1_%NUM $0404_+SWITCH 1_^1_%EQU SW2(*-BST)_^1_%NUM $000C_+SWITCH 2_^1_%BZS (4)_-N/A_^1_%EQU BFMTNO(*-BST)_^1_%NUM 0_/BASIC MODE F€€ORMAT NUMBER (N/A)_^1_%EQU KEYDPR(*-BST)_^1_%NUM $4000_+NUMBER OF KEY DEPRESSIONS_^1_%BZS (2)_-N/A_^1_%EQU VRCD(*-BST)_^1_%NUM 0_/NUMBER OF VERIFIABLE RECORDS_^1_%EQU RCDER(*-BST)_^1_%NUM 0_/NUMBER OF ERRONEOUS RECORDS_^1_%NUM 0_/N/A_^1_%EQU RCD(*-BST)_^1_%NUM 0_/TOTAL NUMBER OF RECORDS_^1_%EQU_"ASAVE(*-BST)_F*750506_^1_%NUM 0_/N/A_^1_%EQU_"QSAVE(*-BST)_F*750506_^1_%NUM €€ 0_/N/A_^1_%EQU BATCH(*-BST)_^1_%NUM $0999_+BATCH NUMBER, 3 BCD DIGITS_^1_%EQU ATTSIZ(BATCH)_"NUMBER OF WORDS IN ATT_^1_%EQU INDX(*-BST)_^1_%NUM $444D_+"DM", START OF INDEX TABLE_^1_%NUM $5042_+"PB"_^1_%NUM $3031_+"01", MONTH_^1_%NUM $3031_+"01", DAY_^1_%EQU IFIL(*-BST)_^1_%NUM 0_/FILE (INDEX) NUMBER (1-27)_^1_%EQU IJOB(*-BST)_^1_%ALF *,XXXXXX* JOB NAME (6 CHARACTERS) N€€'_^1_%NUM $5000_+FROZEN BATCH_^1_%EQU IBTCH(*-BST)_^1_%NUM $0999_+BATCH NUMBER, 3 BCD DIGITS_^1_%EQU IFTA(*-BST)_^1*_$BCHBEG EQ TO ADDR OF FIRST TRACK ASSIGNED TO BATCHES ON DISK_^1_%EQU_"TRAD1(MAXBCH+4)_C*751028_^1_%EQU_"TRAD2(TRAD1/16+7)_A*751028_^1_%VFD_"X12/TRAD2,N4/0_D*751028_^1_%BZS (5)_-N/A_^1_%EQU IOCI(*-BST)_^1_%NUM 0_/BATCH OPEN = 0, BATCH CLOSED = NOT 0_^1_%EQU I€€TRK(*-BST)_^1_%NUM 0_/NUMBER OF TRACKS ASSIGNED TO BATCH_^1_%EQU IDMP(*-BST)_^1_%NUM 0_/NUMBER OF TIMES BATCH IS DUMPED_^1_%EQU INDNO(*-BST)_^1_%ADC MAXBCH_*MAXIMUM NUMBER OF BATCHES (INDEX ENTRIES)_^1_%EQU INDSIZ(*-BST-INDX)_^1_%EQU RHDDA(*-BST)_^1_%ADC 0_/RECORD HEADER DATA DESCRIPTOR ADDRESS_^1_%EQU PBDDA(*-BST)_^1_%ADC 0_/PARAMETER BUFFER DATA DESCRIPTOR ADDRESS_^1_%E€€QU HDR(*-BST)_^1_%ADC 0_/RECORD HEADER ADDRESS_^1_%EQU LTH10(*-BST)_^1_%NUM 0_/NO. OF WORDS IN RECORD INCL. HEADER_^1_%EQU DELUS(*-BST)_^1_%NUM 0_/DELUSR FLAG CONTENT_^1_%EQU EOTFL(*-BST)_^1_%NUM 0_/EOTFLG FLAG CONTENT_^1_%EQU MAXLTH(*-BST)_^1_%ADC MAXREC_*MAXIMUM RECORD LENGTH_^1_%EQU NWDTRK(*-BST)_^1_%ADC FULTRK_*NUMBER OF WORDS IN FULL TRACK (=1536)_^1_%ADC FSTTRK_*€€NUMBER OF WORDS IN FIRST TRACK (=1344)_^1_%EQU CHKP(*-BST)_^1_%ADC XP_.CHECKPOINT FREQUENCY_^1_%EQU CHKFLG(*-BST)_^1_%NUM 0_/CHECKPOINT RECORD COUNTER_^1_%EQU MAXTRK(*-BST)_^1_%ADC TRKBCH_*MAXIMUM NUMBER OF TRACKS PR BATCH_^1_%EQU INDTRK(*-BST)_^1_%ADC INDBAS_*STARTING SECTOR ADDR. OF INDEX_^1_%EQU RDREQ(*-BST)_^1_%VFD N7/1,N1/0,X4/RP,X4/CP_$READ REQUEST FUNCTION WORD_^1_€€%VFD N7/2,N1/0,X4/RP,X4/CP_$WRITE REQUEST FUNCTION WORD_^1_%EQU FRDREQ(*-BST)_^1_%VFD N7/4,N1/0,X4/RP,X4/CP_$FREAD REQUEST FUNCTION WORD_^1_%VFD N7/6,N1/0,X4/RP,X4/CP_$FWRITE REQUEST FUNCTION WORD_^1_%EQU_"SAVLTH(*-BST)_E*751028_^1_%NUM_"0_Q*751028_^1_%EQU AUXBUF(*-BST)_^1_%BSS (INDSIZ)_(AUXILIARY WORKING STORAGE_^1_%EQU BSTLTH(*-BST)_^1_%ADC BSTLTH_*BATCH STATUS TABLE LENG€θTH_^1*_]_^1************************************************************************_^1*_]_^1*_$E N D O F P R O G R A M O C S E R_^1*_]_^1************************************************************************_^1*_]_^1_%END_]_^__θPEMPTY CSY/ P€1_%NAM_"EMPTY_%BACKGROUND-TO-CYBERDATA_/*751028_^1*_$LOAD PROGRAM FOR EMTFIL_B*750520_^1*_$DRAFT-TO-CYBERDATA PACKAGE_?*750520_^1*_] *750520_^1_%ENT_"EMPTY_M*750520_^1_%EQU_"VLOS($5F)_I04/22/7_^1_%JMP*_!COMP_'BYPASS LOAD IF EXECUTION STARTS HERE_!*750520_^1EMPTY NOP_"0_Q*750520_^1_%LDA-_!(VLOS)_'TEST IF CYBERDATA ACTIVE_,031576_^1_%SAM_"3_Q031576_^1_%LDA_"=XNME1-GTFRQ-1_#CYBER DA€pTA ACTIVE_.031576_^1_%STA*_!GTFRQ+8_#LOAD EMTFL1_;031576_^1GTFRQ GTFILE COMP,NME-GTFRQ-1,SAD,SAD-EMPTY+2,0_0*750520_^1_%NUM_"0,0_O*750520_^1_%EXIT_U*750520_^1NME_"ALF_"3,EMTFIL_"NAME OF FILE TO BE LOADED_-*750520_^1NME1_!ALF_"3,EMTFL1_"LOADED WITH CYBERDATA ACTIVE_*031576_^1COMP_!NOP_"0_Q*750520_^1_%EQU_"SAD(*)_$FILE LOADED HERE_6*750520_^1_%END_"EMPTY_M*750520_^__pPEMTFIL CSY/ P€1_%NAM_"EMTFIL_$BACKGROUND-TO-CYBERDATA_/*751028_^1*_$THIS PROGRAM TRANSFERS BATCHES] WRITTEN ON SCRATCH_'*750520_^1*_$TO TAPE FOR LATER LOADING INTO CYBERDATA_1*750520_^1*_$IT IS BROUGHT INTO EXECUTION BY THE PGM ENPTY_,*750520_^1*_] *750520_^1_%EQU_"LPMASK(2)_I*750520_^1_%EQU_"MAXBCH(27)_H*751028_^1_%ENT_"ETY_O*750520_^1ETY_"NOP_"0_Q*750520_^1_%RTJ_"OPMESS_$OUTPUT OPERATOR MESSA€€GE_/*750520_^1_%FREAD $C2,CP1,INDX0,16,B,0,1,I_:*750520_^1_%NUM_"0,100_M*750520_^1*_$READ INDEX 0 ON DISK (LAST BATCH)_8*750520_^1_%EXIT_U*750520_^1CP1_"RTJ_"CHKQ_'CHECK FOR ERROR_7*750520_^1_%LDA*_!INDX0_M*750520_^1XX1_"SUB_"=ADM_'CHECK FOR DMPB IN WORD 0 AND 1_(*750520_^1_%SAZ_"A010_N*750520_^1_%JMP*_!EROUT_%NO ERROR_>*750520_^1A010_!LDA*_!INDX0+1_K*750520_^1XX2_"SUB_"=APB_N*750€€520_^1_%SAZ_"A011_N*750520_^1_%JMP*_!EROUT_%ERROR_A*750520_^1A011_!FREAD $C2,CP2,CURIND,16,B,0,1,I_9*750520_^1*_$READ CURRENT INDEX_G*750520_^1MSA_"NUM_"0,101_M*750520_^1_%EXIT_U*750520_^1CP2_"RTJ_"CHKQ_'ERROR CHECK_;*750520_^1_%RAO*_!MSA+1_%PREPARE FOR NEXT BATCH_0*750520_^1_%LDA*_!CURIND_$CHECK FOR "DMPB"_6*750520_^1_%SUB*_!XX1+1_M*750520_^1_%SAZ_"A012_N*750520_^1_%JMP*_!EROUT_M€€*750520_^1A012_!LDA*_!CURIND+1_J*750520_^1_%SUB*_!XX2+1_M*750520_^1_%SAZ_"A013_N*750520_^1_%JMP*_!EROUT_%ERROR_A*750520_^1A013_!LDA*_!CURIND+8_"BATCH MUST BE ENTRY FROZEN_,*750520_^1_%EOR_"=N$5000_K*750520_^1_%SAZ_"A014_N*750520_^1_%JMP*_!EROUT_M*750520_^1A014_!LDA*_!CURIND+9_"BATCH 1-999, NO MORE NO LESS_**750520_^1_%CLR_"Q_Q*750520_^1_%SAN_"A015_N*750520_^1_%JMP*_!EROUT_%ERROR. B€€ATCH NO ZERO_2*750520_^1A015_!LLS_"4_Q*750520_^1_%SQN_"ERA_O*750520_^1_%LLS_"4_Q*750520_^1_%INQ_"-10_O*750520_^1_%SQP_"ERA_O*750520_^1_%CLR_"Q_Q*750520_^1_%LLS_"4_Q*750520_^1_%INQ_"-10_O*750520_^1_%SQP_"ERA_O*750520_^1_%CLR_"Q_Q*750520_^1_%LLS_"4_Q*750520_^1_%INQ_"-10_O*750520_^1_%SQM_"A020_N*750520_^1ERA_"JMP*_!EROUT_M*750520_^1A020_!LDA*_!CURIND+10_I*750520_^1_%INA_"-16_(16 IS AD€€DED BY REDTRK_1*750520_^1_%STA_"FTADR_M*750520_^1_%RTJ_"REDTRK_L*750520_^1_%CLR_"A_Q*750520_^1_%STA*_!FTOB_N*750520_^1_%STA*_!LTOB_N*750520_^1_%STA*_!NUMTR_M*750520_^1A030_!CLR_"Q_Q*750520_^1_%LDA_"BFR_(GET FIRST TRACK OF BATCH_.*750520_^1_%STA*_!LTOB_'WILL BE UPDATED_7*750520_^1_%STA*_!FTOB_N*750520_^1A031_!LDA_"BFR,Q_%GET THE TRACKS_8*750520_^1_%SAZ_"A032_'ZERO MEANS END_8*750520€€_^1_%SUB*_!LTOB_'IS IT PREVIOUS PLUS ONE?_.*750520_^1_%SAN_"EROUT_M*750520_^1_%LDA*_!LTOB_N*750520_^1_%INA_"16_)BUMP BY ONE TRACK_5*750520_^1_%STA*_!LTOB_N*750520_^1_%INQ_"1_Q*750520_^1_%JMP*_!A031_N*750520_^1A032_!STQ*_!NUMTR_%SAVE TRACKS_;*750520_^1_%SQZ_"EROUT_%MUST BE AT LEAST ONE_2*750520_^1_%INQ_"-91_O*750520_^1_%SQM_"A034_'AND MAX 90_<*750520_^1EROUT ENA_"1_Q*750520_^1_%JMP€€_"ERROR_M*750520_^1A034_!LDA*_!LTOB_'DECREASE LTOB AGAIN_3*750520_^1_%INA_"-16_O*750520_^1_%STA*_!LTOB_N*750520_^1_%JMP*_!OVR_O*750520_^1*_] *750520_^1PRLTOB NUM_"0_*PREV LAST TRACK_7*750520_^1FTOB_!NUM_"0_*FIRST TRACK_;*750520_^1LTOB_!NUM_"0_*LAST TRACK_<*750520_^1NUMTR NUM_"0_*NUMBER OF TRACKS_6*750520_^1NUMREC NUM_"0_*NUMBER OF RECORDS_5*750520_^1INDX0 BZS_"INDX0(16)_I*750520€€_^1CURIND BZS_"CURIND(16)_H*750520_^1*_] *750520_^1OVR_"LDA_"ATT_(FIRST WORD OF ATT_5*750520_^1_%EOR_"=N$4441_#MUST BE $4441_9*750520_^1_%SAN_"B010_N*750520_^1_%LDA_"ATT+1_%FIRST TRACK OF BATCH_2*750520_^1_%EOR*_!FTOB_'MUST BE SAME AS IN HEADER RECORD_%*750520_^1_%SAZ_"B020_N*750520_^1B010_!JMP*_!BROUT_%ERROR_A*750520_^1B020_!LDA*_!FTOB_N*750520_^1_%SUB*_!PRLTOB_$FTOB MUST BE LARG€€ER_3*750520_^1_%INA_"-16_(THAN LAST TRACK OF PREVIOUS BATCH_$*750520_^1_%SAP_"B021_N*750520_^1_%JMP*_!BROUT_M*750520_^1B021_!LDA*_!LTOB_N*750520_^1_%STA*_!PRLTOB_$UPDATE FOR NEXT BATCH_1*750520_^1_%LDA_"ATT+8_%GET AVAIL NO OF WORDS IN TRACK_(*750520_^1_%SUB_"=N1537_L*750520_^1_%SAM_"B022_N*750520_^1_%JMP*_!BROUT_%CANNOT BE LARGER THAN 1536_,*750520_^1B022_!LDA_"ATT+13_$FORMAT NUMBE€€R_9*750520_^1_%SAZ_"B030_'MUST BE NON ZERO_6*750520_^1_%SUB_"=N8001_$AND NO LARGER THAN 8000_/*750520_^1_%SAP_"B030_N*750520_^1_%LDA_"ATT+14_$NEXT MUST BE 4_8*750520_^1_%INA_"-4_P*750520_^1_%SAZ_"B031_N*750520_^1B030_!JMP*_!BROUT_M*750520_^1B031_!LDA_"ATT+15_$BASIC MODE IS ENTRY_3*750520_^1_%SUB_"=N$3000_K*750520_^1_%SAN_"B040_N*750520_^1_%LDA_"ATT+19_$SW1_C*750520_^1_%SUB_"=N$0404€€_K*750520_^1_%SAN_"B040_N*750520_^1_%LDA_"ATT+20_$SW2_C*750520_^1_%SUB_"=N$000C_K*750520_^1_%SAZ_"B041_N*750520_^1B040_!JMP*_!BROUT_M*750520_^1B041_!LDA_"ATT+32_$NO OF RECORCDS_8*750520_^1_%STA*_!NUMREC_L*750520_^1_%SAN_"B042_'CANNOT BE ZERO_8*750520_^1_%JMP*_!BROUT_M*750520_^1B042_!LDA_"ATT+35_$BATCH NO_>*750520_^1_%EOR_"CURIND+9_"MUST BE SAME AS INHEADER RECORD_'*750520_^1_%SAZ_"€€B043_N*750520_^1_%JMP*_!BROUT_M*750520_^1B043_!LDA_"=N$999_$OPERATOR NUMBER_7*750520_^1_%STA_"BFR+91_L*750520_^1_%LDA_"=N$1000_#FAKE TIME_=*750520_^1_%STA_"BFR+94_L*750520_^1_%ENA_"0_Q*750520_^1_%STA_"BFR+92_L*750520_^1_%STA_"ATT+34_$CLEAR ERROR WORD_6*750520_^1_%STA_"BFR+93_L*750520_^1_%STA_"BFR+95_$CLEAR NO OF RECORDS_3*751028_^1_%LDA_"=N$433F_#IDK AND ENTRY IN ATT 2_0*750520_^1_€€%STA_"ATT+2_M*750520_^1_%JMP*_!B050_N*750520_^1BROUT ENA_"2_Q*750520_^1_%JMP_"ERROR_%GO AND WRITE ERROR MESSAGE_,*750520_^1*_] *750520_^1* NOW INDEX IS OK. AND SO IS TRACK TABLE AND ATT_0*750520_^1*_$SO LET US WRITE THEHEADER RECORD ON THE TAPE_-*750520_^1B050_!WRITE $FA,CPI,CURIND,16,B,0,1,I_9*750520_^1_%EXIT_U*750520_^1CPI_"RTJ_"CHKQ_'CHECK FOR ERRORS_6*750520_^1_%CLR_"A_Q*750€€520_^1_%STA*_!RECNO_M*750520_^1_%LDA_"FTOB_'FIX ADDRESS OF FIRST RECORD_+*750520_^1_%INA_"2_*SECTOR 0 AND 1 NOT USED FOR DATA_%*750520_^1_%MUI_"=N96_N*750520_^1_%LLS_"1_Q*750520_^1_%ARS_"1_Q*750520_^1_%AND-_!LPMASK+15_I*750520_^1_%STQ*_!CDAM_N*750520_^1_%STA*_!CDAL_N*750520_^1_%LDA_"FTOB_N*750520_^1_%STA*_!CURTR_%CURRENT TRACK IS FIRST TRACK_**750520_^1RECLOP LDQ*_!CDAM_N*750520_^1€€_%LDA*_!CDAL_N*750520_^1_%RTJ_"TRDSP_%GET TRACK NO AND DISPLACEMENT_)*750520_^1*_] *750520_^1_%LDA*_!RECNO_%FIRST RECORD?_9*750520_^1_%SAZ_"C010_N*750520_^1_%LDA_"BFR+3,Q_#TEST BACKWARD POINTER_1*750520_^1_%ARS_"8_Q*750520_^1_%AND-_!LPMASK+7_J*750520_^1_%EOR*_!PRDAM_%SHOULD POINT TO PRECEDING RECORD_%*750520_^1_%SAZ_"C001_N*750520_^1_%JMP*_!CROUT_%ERROR_A*750520_^1C001_!LDA_"BFR+1€€,Q_#LEAST SIGNIFICANT BITS_0*750520_^1_%EOR*_!PRDAL_M*750520_^1_%SAZ_"C002_N*750520_^1_%JMP*_!CROUT_M*750520_^1C002_!JMP*_!C011_N*750520_^1C010_!LDA_"BFR+1,Q_#TEST IF FIRST REC HAS FIRST REC BIT_"*750520_^1_%SAM_"C011_N*750520_^1_%JMP*_!CROUT_M*750520_^1C011_!LDA_"BFR+4,Q_#TEST FORMAT NUMBER_4*750520_^1_%SAZ_"C020_'NON ZERO_>*750520_^1_%SUB_"=N8001_L*750520_^1_%SAM_"C021_'AND LESS €€THAN 8001_4*750520_^1C020_!JMP*_!CROUT_M*750520_^1C021_!LDA_"BFR+3,Q_#GET NEXT RECORDS ADDRESS_.*750520_^1_%AND-_!LPMASK+7_J*750520_^1_%STA*_!NDAM_N*750520_^1_%LDA_"BFR+2,Q_K*750520_^1_%STA*_!NDAL_N*750520_^1_%LDA_"BFR,Q_%GET REC LENGTH_8*750520_^1_%AND-_!LPMASK+9_J*750520_^1_%STA*_!RCLTH_%SAVE IT_?*750520_^1_%SAZ_"CROUT_%CANNOT BE ZERO_8*750520_^1_%SUB_"=N501_%500 IS MAX_<*750520_€€^1_%SAM_"C031_N*750520_^1CROUT ENA_"3_*GO TO ERROR_;*750520_^1_%JMP_"ERROR_M*750520_^1C031_!LDA_"BFR+4,Q_#GET FORMAT NO_9*751028_^1_%SUB*_!PRVFMT_$HAS IT CHANGED_8*751028_^1_%SAZ_"C0311_%NO_D*751028_^1_%ADD*_!PRVFMT_$RESTORE IT_<*751028_^1_%STA*_!PRVFMT_$AND SAVE FOR NEXT TIME_0*751028_^1_%JMP*_!C0312_M*751028_^1C0311 LDA*_!RCLTH_%RECORD LENGTH_9*751028_^1_%SUB*_!PRVLTH_L*751028_€€^1_%SAZ_"C0312_%SAME LENGTH_;*751028_^1_%JMP*_!CROUT_%ERROR_A*751028_^1C0312 LDA*_!RCLTH_M*751028_^1_%STA*_!PRVLTH_$SAVE IT_?*751028_^1_%INA_"5_*ADD RECORD HEADER LENGTH_.*750520_^1_%ADD*_!CDAL_N*750520_^1_%CLR_"Q_*FIGURE OUT NEXT POSSIBLE ADDRESS_%*750520_^1_%SAP_"C032_N*750520_^1_%AND-_!LPMASK+15_I*750520_^1_%INQ_"1_Q*750520_^1C032_!ADQ*_!CDAM_N*750520_^1_%STA*_!TMP1_N*750520_^1€€_%STQ*_!TMP2_'NEXT POSSIBLE ADDRESS_1*750520_^1_%JMP*_!C040_N*750520_^1*_] *750520_^1RECNO NUM_"0_*RECORD NUMBER_9*750520_^1CDAM_!NUM_"0_*CURRENT ADDRESS MSB_3*750520_^1CDAL_!NUM_"0_*CURRENT ADDRESS LSB_3*750520_^1NDAM_!NUM_"0_*NEXT REC ADDRESS MSB_2*750520_^1NDAL_!NUM_"0_*NEXT REC ADDRESS LSB_2*750520_^1PRDAM NUM_"0_*PREVIOUS RECORDS ADDRESS MSB_**750520_^1PRDAL NUM_"0_*PREVIO€€US REC ADDRESS LSB_.*750520_^1CURTR NUM_"0_*CURRENT TRACK_9*750520_^1TMP1_!NUM_"0_Q*750520_^1TMP2_!NUM_"0_Q*750520_^1RCLTH NUM_"0_*RECORD LENGTH_9*750520_^1PRVFMT NUM_"0_*PREVIOUS FORMAT_7*751028_^1PRVLTH NUM_"0_Q*751028_^1*_] *750520_^1C040_!LDA*_!NDAM_'TEST IF NEXT ADDRESS IS LARGER_(*750520_^1_%SUB*_!TMP2_'OR EQUAL TO POSSIBLE NEXT ADDRESS_$*750520_^1_%SAM_"C050_'MSB CANNOT B€€E SMALLER_1*750520_^1_%INA_"-1_P*750520_^1_%SAP_"C051_N*750520_^1_%LDA*_!NDAL_N*750520_^1_%SUB*_!TMP1_N*750520_^1_%SAP_"C051_N*750520_^1C050_!JMP*_!CROUT_%ERROR_A*750520_^1C051_!LDA*_!NDAL_'GET NEXT ADDRESS_6*750520_^1_%LDQ*_!NDAM_N*750520_^1_%RTJ_"TRDSP_%CONVERT TO TRACK AND DISPLACEMENT_$*750520_^1_%TRA_"Q_Q*750520_^1_%SUB*_!CURTR_%SAME TRACK?_;*750520_^1_%SAZ_"C060_'YES_C*750520€€_^1_%INA_"-16_(NO. MUST BE ONE LARGER_0*750520_^1_%SAZ_"C058_N*750520_^1_%JMP*_!CROUT_M*750520_^1C058_!STQ*_!CURTR_%INCREMENT TRACK NO_4*750520_^1_%RTJ_"WRITET_$WRITE THE TRACK AS FOUR RECORDS_'*750520_^1_%RTJ_"REDTRK_$READ IN NEXT TRACK_4*750520_^1C060_!LDA*_!CDAM_'PUSH CURRENT TO PREVIOUS_.*750520_^1_%STA*_!PRDAM_M*750520_^1_%LDA*_!CDAL_N*750520_^1_%STA*_!PRDAL_M*750520_^1_%LDA*_€€!NDAM_'NOW NEXT BECOMES CURRENT_.*750520_^1_%STA*_!CDAM_N*750520_^1_%LDA*_!NDAL_N*750520_^1_%STA*_!CDAL_N*750520_^1_%RAO*_!RECNO_%INCREMENT RECORD COUNTER_.*750520_^1_%LDA*_!RECNO_M*750520_^1_%SUB_"NUMREC HAVE ALL REXCORDS BEEN PROCESSED?_**750520_^1_%SAP_"WRTR_'IF SO WRITE AND OUT_3*750520_^1_%JMP*_!RECLOP_$NO GO BACK FOR MORE_3*750520_^1WRTR_!RTJ_"WRITET_$WRITE THE TRACK_7*750520€€_^1_%LDQ*_!CDAM_N*750520_^1_%LDA*_!CDAL_N*750520_^1_%RTJ_"TRDSP_%GET CURRENT TRACK_5*750520_^1_%SUB_"LTOB_N*750520_^1_%INA_"-1_P*750520_^1_%SAM_"OKWR_'LAST TRACK IS NO LARGER THAN LAST_$*750520_^1_%ENA_"4_Q*750520_^1_%JMP_"ERROR_M*750520_^1OKWR_!RTJ_"WRTFM_M*750520_^1*_$WRITE A FILE MARK_H*750520_^1CPM_"LDA_"CURIND+5_"FIX A MESSAGE TO THE OPERATOR_)*750520_^1_%STA*_!MS1_(THIS IS TH€€E JOB NAME_2*750520_^1_%LDA_"CURIND+6_J*750520_^1_%STA*_!MS1+1_M*750520_^1_%LDA_"CURIND+7_J*750520_^1_%STA*_!MS1+2_M*750520_^1_%CLR_"A_*GET BATCH NUMBER_6*750520_^1_%LDQ_"CURIND+9_J*750520_^1_%LRS_"4_Q*750520_^1_%ALS_"12_P*750520_^1_%LRS_"4_Q*750520_^1_%ALS_"12_P*750520_^1_%ADD_"=N$3030_#MAKE IF ASCII_9*750520_^1_%ADQ_"=N$2030_K*750520_^1_%STQ*_!MS1+3_M*750520_^1_%STA*_!MS1+4_M*750€€520_^1_%FWRITE $FC,CPX,MS1,5,A,0,1,I_=*750520_^1_%EXIT_U*750520_^1MS1_"BSS_"MS1(5)_L*750520_^1CPX_"LDA_"CURIND+4_"GET FILE NUMBER_7*750520_^1_%EOR_"INDX0+4_K*750520_^1_%SAN_"NXB_(ARE ALL BATCHES TRANSFERED?_+*750520_^1_%RTJ_"WRTFM_M*750520_^1_%RTJ_"WRTFM_M*750520_^1_%MOTION $FA,ENDPGM,3,0,0,0,0,1,I_:*750520_^1*_$REWIND TO LOAD POINT_E*750520_^1_%EXIT_U*750520_^1ENDPGM JMP_"CLRSCR_$€€CLEAR SCRATCH INDEX_3*750520_^1NXB_"JMP_"A011_'GO AND PROCESS NEXT BATCH_-*750520_^1*_] *750520_^1ERROR ADD_"=N$2030_K*750520_^1_%STA*_!ERMS+3_$STORE ERROR CODE IN MESSAGE_+*750520_^1_%FWRITE $FC,CPE,ERMS,4,A,0,1,I_<*750520_^1*_$WRITE ERROR MESSAGE_F*750520_^1_%EXIT_U*750520_^1ERMS_!ALF_"10,ERROR_J*750520_^1CPE_"MOTION $FA,CPBF,6,0,0,0,0,1,I_<*750520_^1*_$BACKSPACE ONE FILE_G*750€€520_^1_%EXIT_U*750520_^1CPBF_!RTJ_"WRTFM_%WRITE A FILE MARK_5*750520_^1_%RTJ_"WRTFM_%MAKE IT TWO_;*750520_^1_%JMP*_!ENDPGM_$ALL DONE_>*750520_^1*_] *750520_^1WRITET NOP_"0_Q*750520_^1_%WRITE $FA,CPW1,BFR,384,B,0,1,I_:*750520_^1_%EXIT_U*750520_^1CPW1_!WRITE $FA,CPW2,BFR+384,384,B,0,1,I_6*750520_^1_%EXIT_U*750520_^1CPW2_!WRITE $FA,CPW3,BFR+768,384,B,0,1,I_6*750520_^1_%EXIT_U*7505€€20_^1CPW3_!WRITE $FA,CPW4,BFR+1152,384,B,0,1,I_5*750520_^1_%EXIT_U*750520_^1CPW4_!JMP*_!(WRITET)_"ALL DONE_>*750520_^1*_] *750520_^1WRTFM NOP_"0_*WRITE FILE MARK ROUTINE_/*750520_^1_%MOTION $FA,CPWFM,2,0,0,0,0,1,I_;*750520_^1_%EXIT_U*750520_^1CPWFM JMP*_!(WRTFM)_K*750520_^1*_] *750520_^1TRDSP NOP_"0_*CALCULATE TRACK AND DISPLACEMENT_%*750520_^1_%ALS_"1_Q*750520_^1_%LRS_"1_*NO€€RMALIZE_=*750520_^1_%DVI_"=N1536_$A IS TRACK, Q IS DISPLACEMENT_)*750520_^1_%ALS_"4_*MULTIPLY BY FOUR_6*750520_^1_%JMP*_!(TRDSP)_K*750520_^1CHKQ_!NOP_"0_*Q MINUS MEANS ERROR_3*750520_^1_%SQM_"1_Q*750520_^1_%JMP*_!(CHKQ)_L*750520_^1_%ENA_"6_Q*750520_^1_%JMP_"ERROR_%ERROR EXIT_<*750520_^1*_] *750520_^1REDTRK NOP_"0_*READ A TRACK_:*750520_^1_%LDA*_!FTADR_%BUMP TRACK ADDRESS BY 16 SEC€€TORS_%*750520_^1_%INA_"16_P*750520_^1_%STA*_!FTADR_M*750520_^1_%FREAD $C2,CPRT,BFR,1536,B,0,1,I_9*750520_^1_%NUM_"0_Q*750520_^1FTADR NUM_"0_Q*750520_^1_%EXIT_U*750520_^1CPRT_!RTJ*_!CHKQ_'CHECK I/O ERROR_7*750520_^1_%JMP*_!(REDTRK)_J*750520_^1*_]_^1*_$WRITE OPERATOR MESSAGE_^1OPMESS NOP_"0_^1AGAN_!LDA-_!$FA_(GET STD OUTPUT DEVICE_^1_%CLR_"Q_^1_%DVI-_!$46_(DIV BY TEN_^1_%INQ_"$30_^€€1_%INA_"$30_^1_%ALS_"8_^1_%AAQ_"A_*COMBINE LOGICAL UNIT NUMBER_^1_%STA*_!ALUN_^1_%FWRITE $FC,CPOP,MNTMS,18,A,0,1,I_^1_%EXIT_^1CPOP_!FREAD $FD,CPIP,ALUN,1,A,0,1,I_^1*_$CHECK IF READY_^1_%EXIT_^1CPIP_!SQP_"1_*ERROR?_^1_%JMP*_!AGAN_'YES_^1_%JMP*_!(OPMESS)_"RETURN_^1MNTMS ALF_"13,MOUNT SCRATCH TAPE ON LU_^1ALUN_!NUM_"0_^1_%ALF_"4, READY?_^1***_]_^1CLRSCR NOP_"0_*CLEAR OUT SCRATCH IN€€DEX_^1_%FWRITE $C2,ENDCMP,ZZZ,1,B,0,1,I_^1MMDD_!NUM_"0,100_M*751126_^1_%EXIT_^1ENDCMP RAO*_!MMDD+1_$INCREMENT SECTOR ADDRESS_.*751126_^1_%LDA*_!MMDD+1_L*751126_^1_%INA_"-101_'CLEAR SECTOR 100 TO MAXBCH+100_(*751126_^1_%INA_"-MAXBCH_K*751126_^1_%SAP_"1_Q*751126_^1_%JMP*_!CLRSCR_$GO BACK AGAIN_9*751126_^1_%EXIT_!0_*ALL OVER NOW_:*751126_^1*_$NO MORE TO DO_^1ZZZ_"NUM_"0_*WRITE A ZERO €dON DISK_^1*_]_^1*_$TRACK BUFFER_^1***_]_^1BFR_"BSS_"BFR(100)_^1_%EQU_"ATT(BFR+96)_^1_%END_"ETY_^__dPDRAFT CSY/ P€1_%NAM DRAFT_(DRAFT 5.2 10/01/75_^1_%ENT_"DRAFT_^1***COPYRIGHT_!CONTROL DATA CORPORATION 1974 ***_^1*** THE EXEC PROGRAM CONTROLS THE LOADING AND EXECUTION_^1*** OF EACH PASS AND RESIDES AS THE FIRST PROGRAM ON THE_^1*** DRAFT SYSTEM TAPE._^1H1000 EQU_"H1000($80)_^1H8000 EQU_"H8000($83)_^1_%COM_"HERE($A0)_^1BEGIN LDA_"=XSTS_^1_%SUB_"=XSTART_'ADDRESS_^1_%INA_"1_^1_%ADD*_!MO€€VE1+1_(ADD RELOCATION FACTOR_^1_%STA*_!S1+1_^1_%CLR_"Q_^1MOVE_!LDA*_!START,Q_!MOVE MONITOR TO_^1_%STA*_!(MOVE1+1),Q_#UPPER CORE DEFINED_^1_%INQ_"1_'BY HERE_^1_%TRQ_"A_^1_%SUB_"=N$A0_^1_%SAZ_"1_^1_%JMP*_!MOVE_^1MOVE1 JMP+_!HERE_*EXIT TO MONITOR_^1START JMP*_!INIT_*INITIAL START_^1_%JMP*_!P0ENT_.PASS0 END LOAD PASS 1_^1_%JMP*_!P1ENT_.PASS1 END LOAD PASS 2_^1_%JMP*_!P2ENT_.PASS2 E€€ND LOAD PASS 3_^1_%JMP*_!P3ENT_.PASS3 END LOAD PASS 4_^1MSFLG NUM_"0_^1PIOENT NOP_"0_^1_%LDA*_!(PIOENT)_^1_%STA*_!PREQ_^1_%RAO*_!PIOENT_^1_%LDA*_!(PIOENT)_^1_%STA*_!PLU_^1_%RAO*_!PIOENT_^1_%LDA*_!(PIOENT)_^1_%STA*_!PSIZE_^1_%RAO*_!PIOENT_^1_%LDA*_!(PIOENT)_^1_%STA*_!PBUFF_^1_%RAO*_!PIOENT_^1_%RAO*_!PIOENT_^1_%RTJ-_!($F4)_^1PREQ_!NUM_"0_^1_%NUM_"0_^1PTHR_!NUM_"0_^1PLU_"NUM_"0_^1P€€SIZE NUM_"0_^1PBUFF NUM_"0_^1_%LDA*_!PTHR_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(PIOENT)_^1INIT_!RTJ*_!READ_+SKIP PASS 0_^1_%ADC_"$8F0_*SYSTEM UNIT_^1_%ADC_"$A_^1_%LDA-_!H1000_)BUILD BACKSPACE FUNCTION CODE_^1_%INA_"2_^1_%STA*_!FNCNT_)BACK SPACE WITH COUNT_^1_%RTJ*_!COPY_/COPY PASS1 TO 4 PLUS SUBROUTINES_^1_%ADC_"$8F0_*SYSTEM UNIT_^1_%ADC_"$8FA_*STANDARD OUTPUT_^1_%LDA*_!FNCNT_)SET €€UP MULTIPLE BACKSPACE_^1_%EOR-_!H8000_^1_%STA*_!FNCNT_^1_%RTJ*_!FNCTP_.REWIND DRAFT SYSTEM TAPE_^1_%ADC_"$8F0_*SYSTEM UNIT_^1FNCNT ADC_"$1000_)BACK SPACE WITH COUTN_^1_%RTJ*_!READ_/READ PASS 0 IN_^1_%ADC_"$8F0,$1400_^1EXIT_!LDQ-_!$F7_^1_%JMP-_!1,Q_"EXECUTE READ IN PASS_^1P0ENT RTJ*_!READ_*SKIP PASS 1_^1_%NUM_"$8FA,10_^1_%RTJ*_!COPY_/COPY P2 TO P4 AND SUBRS._^1_%NUM_"$8FA,$8F9_^1_€€%RTJ*_!FNCTP_.REWIND FIRST INTERMEDIATE_^1_%NUM_"$8FA,$3000_^1_%RTJ*_!READ_/READ IN PASS 1_^1_%NUM_"$8FA,$1200_^1_%JMP*_!EXIT_"EXECUTE PASS 1_^1P1ENT RTJ*_!READ_*READ PASS 2_^1_%NUM_"$8F9,$1200_^1_%JMP*_!EXIT_!EXECUTE PASS 2_^1P2ENT RTJ*_!READ_*SKIP PASS 2_^1_%NUM_"$8F9,10_^1_%JMP*_!P1ENT_)READ IN PASS 3_^1P3ENT RTJ*_!READ_*SKIP PASS 2_^1_%NUM_"$8F9,10_^1_%JMP*_!P2ENT_)SKIP PASS€€3, READ PASS4_^1COPY_!NUM_"0_^1_%LDA*_!(COPY)_$GET SENDING DEVICE_^1_%STA*_!R1_#STORE IN READ REQUEST_^1_%STA*_!S1_'AND IN STATUS REQUEST_^1_%RAO*_!COPY_$BUMP ADDRESS_^1_%LDA*_!(COPY)_$GET RECIEVING DEVICE_^1_%STA*_!W1_$STORE IN WRITE REQUEST_^1_%STA*_!W2_'AND IN FUNCTION REQUEST_^1_%RAO*_!COPY_#BUMP ADDRESS FOR EXIT_^1_%LDA-_!$F7_$GET F.W.A._^1_%INA_"1_^1_%STA*_!W1+2_$STORE IN WRI€€TE REQUEST_^1_%LDA_"=XHERE_^1_%SUB-_!$F7_(L W A_^1_%STA*_!R1+1_#STORE IN READ REQUEST_^1COPY1 RTJ*_!READ_%READ RECORD_^1R1_#NUM_"0,0_^1_%RTJ-_!($F4)_#GET STATUS_^1_%ADC_"$600_^1S1_#NUM_"0,0_^1_%ALS_"4_#CHECK FOR FILE MARK_^1_%SAP_"1_^1_%JMP*_!TERM_"YES TERMINATE COPY_^1_%RAO*_!FNCNT_)COUNT RECORDS TRANSFERED_^1_%LDA-_!I_"GET LWA_^1_%SUB-_!$F7_^1_%STA*_!WLN_#STORE IN WRITE REQUEST_€€^1_%RTJ-_!($F4)_$WRITE REQUEST_^1_%NUM_"$C00,0,0_^1W1_#NUM_"0_^1WLN_"NUM_"0,0_^1_%LDA*_!*-4_"WAIT TILL FINISHED_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!COPY1_"GET NEXT RECORD_^1TERM_!RTJ*_!FNCTP_%WRITE FILE MARK_^1W2_#NUM_"0,$2000_^1_%JMP*_!(COPY)_"EXIT_^1READ_!NUM_"0_^1_%LDA*_!(READ)_"GET DEVICE_^1_%STA*_!RQD_#PLACE IN REQUEST_^1_%RAO*_!READ_#BUMP ADDRESS_^1_%LDA*_!(READ)_"GET LENGTH_^€€1_%STA*_!LNGTH_"STORE IN REQUEST_^1_%RAO*_!READ_#BUMP ADDRESS FOR EXIT_^1_%LDA-_!$F7_$GET_^1_%INA_"1_)F.W.A._^1_%STA*_!ADDR_!STORE IN REQUEST_^1_%RTJ-_!($F4)_#INPUT_^1STS_"NUM_"$800,0,0_$RECORD_^1RQD_"NUM_"0_^1LNGTH NUM_"0_^1ADDR_!NUM_"0_^1_%LDA*_!*-4_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(READ)_"EXIT_^1FNCTP NUM_"0_^1_%LDA*_!(FNCTP)_"GET DEVICE_^1_%STA*_!F1_#STORE IN REQUEST_^1_%RA€€O*_!FNCTP_"BUMP ADDRESS_^1_%LDA*_!(FNCTP)_"GET FUNCTION_^1_%STA*_!F2_#STORE IN REQUEST_^1_%RAO*_!FNCTP_#BUMP ADDRESS FOR EXIT_^1_%RTJ-_!($F4)_#FUNCTION_^1_%NUM_"$1C00,0,0_#TAPE_^1F1_#NUM_"0_*UNIT_^1F2_#NUM_"0_^1_%LDA*_!*-3_^1_%SAZ_"1_"WAIT FOR COMP_^1_%JMP*_!*-2_^1_%JMP*_!(FNCTP) EXIT_^1DRAFT CLR_"Q_^1_%LDA*_!EXEC,Q_!MOVE EXEC TO_^1_%STA*_!(EXEC-1),Q UPPER CORE DEFINED_^1_%INQ_"€€1_!BY HERE_^1_%TRQ_"A_^1_%INA_"-$60_^1_%SAZ_"1_^1_%JMP*_!DRAFT+1_^1_%JMP+_!HERE_!EXIT TO EXEC_^1EXEC_!JMP*_!INITM_!INITIAL START_^1_%JMP*_!P0ENTM_!PASS 0 END - LOAD PASS 1_^1_%JMP*_!P1ENTM_!PASS 1 END - LOAD PASS 2_^1_%JMP*_!P2ENTM_!PASS 2 END - LOAD PASS 3_^1_%JMP*_!P3ENTM_!PASS 3 END - LOAD PASS 4_^1_%NUM_"$8001_^1INPOUT NOP_"0_^1_%LDA*_!(INPOUT)_^1_%STA*_!PREQM_^1_%RAO*_!INPOUT_€€^1_%RAO*_!INPOUT_^1_%LDA*_!(INPOUT)_^1_%STA*_!PSIZEM_^1_%RAO*_!INPOUT_^1_%LDA*_!(INPOUT)_^1_%STA*_!PBUFFM_^1_%RAO*_!INPOUT_^1_%LDA*_!(INPOUT)_^1_%STA*_!PSECTM_^1_%RAO*_!INPOUT_^1_%RTJ-_!($F4)_^1PREQM NUM_"0_^1_%NUM_"0_^1PTHRM NUM_"0_^1_%NUM_"$8B3_^1PSIZEM NUM_"0_^1PBUFFM NUM_"0_^1_%NUM_"0_^1PSECTM NUM_"0_^1_%LDA*_!PTHRM_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%LDA*_!PSECTM_^1_%INA_"9_^1_%JMP€€*_!(INPOUT)_!EXIT_^1INITM RTJ*_!RDDISK_^1_%ADC_"PASS0-DISKA_^1RDDISK NOP_"0_^1_%LDA*_!(RDDISK)_^1_%STA*_!FILE1_^1_%CLR_"A_^1_%STA*_!WR1_^1_%STA*_!WR2_^1_%RTJ-_!($F4)_!GETFILE_^1DISKA NUM_"$1A01,0,0,$8C2_^1WR1_"NUM_"0_^1_%ADC_"BEGIN_^1WR2_"NUM_"0_^1FILE1 NUM_"0,0,0_^1_%LDA*_!DISKA+2_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP+_!BEGIN_^1PASS0 ALF_"3,PS0_^1P0ENTM RTJ*_!RDDISK_^1_%ADC_"PASS1-€κDISKA_^1PASS1 ALF_"3,PS1_^1P1ENTM RTJ*_!RDDISK_^1_%ADC_"PASS2-DISKA_^1PASS2 ALF_"3,PS2_^1P2ENTM RTJ*_!RDDISK_^1_%ADC_"PASS3-DISKA_^1PASS3 ALF_"3,PS3_^1P3ENTM RTJ*_!RDDISK_^1_%ADC_"PASS4-DISKA_^1PASS4 ALF_"3,PS4_^1_%END_"DRAFT_^__κPPS0 CSY/ P€1_%NAM PS0_*DRAFT PASS0 02/24/69_^1_%ENT_"PS0_^1*** COPYRIGHT CONTROL DATA CORPORATION 1975 ***_^1_%EQU_"PS(1)_#TO READ IN PASS 1_^1***********************************************************************_^1*_]_'P_^1** PASS0-MACRO-ASSEMBLER. 24 FEB. 1969. OCR SOFTWARE,ROCKVILLE,MD._^1**_]_%P_^1****_:31 DECEMBER 1970. - MODIFIED AS FOLLOWS_^1*_@(A) THE OCR DRIVERS WERE DELETED_^1*_@€€(B) THE STRACTURE WAS CHANGED_^1*** MARCH 71 - 955 ROUTINES ADDED ***_^1**** 4.0 MODIFICATIONS INCLUDED_^1**** 3RD PARAMETER INDEXING_^1**** 955 HANDPRINT CHANGES_^1**** FIGURETIVE CONSTANTS_^1**** ASSIGN STATEMENT_^1**** CTL STATEMENT_^1**** PAGE STATEMENT_^1**** RECORD STATEMENT_^1**** FIELD STATEMENT_^1**_]_^1*** AUGUST 73 - 929 ROUTINES ADDED ***_^1******** INCLUED SPEC STATEM€€ENT ***_BP_^1********_,FLD STATEMENT ***_^1ASSEM JMP_"PS0_^1GETP1 JMP+_!EXEC+1_^1_%COM_"PTBL(96),INBUF1(51),SKLBUF(500)_^1_%EQU_"NUBUF(SKLBUF)_^1_%EQU_"INBUF(PTBL)_^1_%EQU_"UNPACK(PTBL)_^1_%EQU_"ACTBL(PTBL),ACTBL2(PTBL)_^1_%EQU_"ACTBL3(ACTBL2)_^1_%EQU_"DIRBUF(INBUF)_^1_%EQU_"INPADR(1)_^1_%EQU_"CRPADR(INPADR+1),ACADR(CRPADR+1)_^1_%EQU_"BUFFSW(ACADR+1),SKLADR(BUFFSW+1),CS(SKLADR+1€€)_^1_%EQU_"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_"SKWDCT(DC+1),DIRINX(SKWDCT+1)_^1_%EQU_"FPRINX(DIRINX+1)_^1_%EQU_"CM(FPRINX+1),CM1(CM+1),AP(CM1+1)_^1_%EQU_"SY(AP+1),XMOD(SY+4)_^1_%EQU_"T1(XMOD€€+1),TP1(T1+5)_^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,MM,ERC_^1_%COM_"PCHSW_^1_%COM_"NAMSAV(7)_^1_%COM_"EXEC($A0)_^1**_]_^1**_]_^1**_]_^1**_#****_!START OF PASS0 ****_^1**_]_^1PS0_"ENA_"1_^1_%AND_"EXEC+5_^1_%SAZ_"1_^1_%JMP*_!STUNLD+2_^1_%LDA_"=N$4000_^1_%LD€€Q-_!$F0_+PICK UP STD SYSTEM UNIT_^1_%TCQ_"Q_^1_%ADQ-_!$F9_+ARE SYSTEM AND INPUT UNITS EQUAL?_^1_%SQZ_"STRUNL_(YES, UNLOAD SYSTEMS TAPE_^1_%SUB_"=N$1000_^1STRUNL STA*_!STUNLD_(SAVE FUNCTION CODE IN TAPE REQUEST_^1_%RTJ-_!($F4)_)RWD/UNL OR REWIND ONLY_^1_%NUM_"$1C00_^1_%ADC_"CONTIN_^1_%NUM_"0_^1_%NUM_"$18F0_)SYSTEM LIBRARY UNIT_^1STUNLD NUM_"0_-TAPE FUNCTION GOES HERE_^1_%RTJ*_!(PSDL€€9+1)_#WAIT FOR COMPLETION OF IO_^1_%RTJ-_!($F4)_#TYPE "PASS 0 LOADED"_^1_%NUM_"$0C00_^1_%ADC_"CONTIN_^1_%ADC_"0_^1_%NUM_"$18FC_^1_%NUM_"15_^1_%ADC_"PCHMES_^1_%RTJ*_!(PSDL9+1)_#WAIT FOR COMPLETION_^1_%RTJ-_!($F4)_)GET OPTION_^1_%NUM_"$0800_^1_%ADC_"CONTIN_^1_%ADC_"0_^1SHRTLU NUM_"$18FD_^1_%NUM_"4_^1_%ADC_"OPBUFF_^1_%RTJ*_!(PSDL9+1)_^1_%CLR_"Q_^1OPTEST LDA_"OPBUFF,Q_^1_%AND_"=N$FF00_€€^1_%SAZ_"OPTESX_^1_%SAM_"OPDONE_^1_%ALS_"8_-IS IT B_^1_%RTJ*_!CKCHAR_^1_%LDA_"OPBUFF,Q_^1_%AND_"=N$FF_^1OPTESX SAZ_"OPDONE_^1_%SAM_"OPDONE_^1_%RTJ*_!CKCHAR_^1_%INQ_"-2_^1_%SQZ_"OPDONE_(DONE_^1_%INQ_"3_^1_%JMP*_!OPTEST_^1OPDONE JMP*_!PMPS_^1CKCHAR NOP_"0_^1_%INA_"-$42_*=B_^1_%SAN_"LTEST_^1_%STA_"PCHSW_^1_%JMP*_!(CKCHAR)_^1LTEST INA_"-$A_+=L_^1_%SAN_"MTEST_^1_%SET_"A_^1_%JMP*_!LTEST€€-3_^1MTEST INA_"-1_,=M_^1_%SAN_"PTEST_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%EOR_"=N$8000_^1_%STA_"EXEC+5_^1_%JMP*_!(CKCHAR)_^1PTEST INA_"-3_,=P_^1_%SAN_"STEST_^1_%ENA_"1_^1_%STA_"PCHSW_^1_%JMP*_!(CKCHAR)_^1STEST INA_"-3_,=S_^1_%SAN_"TTEST_^1_%RAO*_!SOURCE_^1TTEST JMP*_!(CKCHAR)_^1SOURCE NUM_"0_^1PMPS_!RTJ-_!($F4)_$READ REC FROM STD INPUT_^1_%NUM_"$0800_^1_%ADC_"CONTIN_^1_%NUM_"$0000_^€€1_%NUM_"$18F9_^1_%NUM_"$0028_^1_%ADC_"INBUF1_^1PSDL9 RTJ+_!DIDDLE_#WAIT FOR IO COMPLETION_^1******************************************************************_^1**** CHECK FOR DRAFT MAC._^1***************************************************************_^1TRA1_!LDA_"=N$0D00_#SET $0D AT END OF RECORD_^1_%STA_"INBUF1+40_^1_%ENQ_"80_)SET THE UNPACK BUFFER TO ZEROS_^1_%ENA_"0_^1_%STA*_€€!(DUMMY2+1),Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1CLNU_!ENQ_"-80_#CLEAR NUBUF TO BLANKS_^1_%ENA_"$20_^1_%STA_"NUBUF+80,Q_^1_%INQ_"1_^1_%SQZ_"1_2ALL CLEAR?_^1_%JMP*_!CLNU+2_^1_%ENA_"-42_(SET COUNT FOR UNPACK_^1_%STA*_!UPA_^1TRA2_!ENQ_"0_*INITIALIZE POINTERS_^1_%STQ-_!I_^1_%LDA*_!(TRA1-3),Q UNPACK TO WORKING BUFFER_^1_%ARS_"8_^1DUMMY2 STA+_!UNPACK,I_^1_%RAO-_!I_^1_%LDA*_!(TRA1-3)€€,Q_^1_%AND_"=N$FF_^1_%STA*_!(DUMMY2+1),I_^1_%LDA*_!UPA_^1_%INA_"1_!ALL UNPACKED_^1_%SAZ_"TRA3_"YES_^1DUMMY STA*_!UPA_^1_%RAO-_!I_^1_%INQ_"1_^1_%JMP*_!TRA2+2_^1_%BZS_"UPA(1)_^1TRA3_!LDA*_!(DUMMY2+1)_^1_%INA_"-$2A_#IS IT AN ASTERISK_^1_%SAN_"1_^1_%JMP*_!(JMPEND+1)_^1_%CLR_"Q_^1_%STQ-_!I_^1TRA4_!RTJ+_!SKCHBL_$SKIP CHARACTERS AND-OR TRAILING BLANKS_^1_%RTJ_"CODERT_$THE CODE IS STORED €€IN CODFRM_^1*_!CHECK FOR ENTER, NAM, END, MON STATEMENTS_^1_%LDA_"CODFRM_^1_%SUB_"=N$15C4_#CHECK FOR "END" CODE_^1_%SAN_"2_^1_%JMP_"END_(YES. IT IS THE END STATEMENT_^1_%INA_"-$10_'CHECK FOR "ENTER", CODE=$11D4_^1_%SAN_"2_^1_%JMP_"ENTER_%YES.GO TO THE PROPER ROUTINE_^1_%SUB_"=N$2259_#CHECK FOR *NAM* CODE_^1_%SAN_"2_^1JMPEND JMP+_!NAMEND_$JUST COPY THE RECORD_^1_%LDA_"ASW_(CHECK THE€€ ASSEMBLY SWITCH_^1_%SAZ_"1_^1_%JMP*_!(JMPEND+1)_^1_%LDA_"PRO_(CHECK FOR PROCEDURE SWITCH ON_^1_%SAZ_"TRA5-*-1_^1_%JMP_"PROC_^1TRA5_!LDA_"=XTABLES_"FWA OF TABLE TO BE SEARCHED_^1_%STA_"CHATBL+1_^1_%ENA_"2_*LOCATIONS TO SKIP TO CHECK NEXT CODE_^1_%STA_"WAVE+1_^1_%RTJ_"SEARCH_^1_%LDA_"INDIRT_$ADDRESS OF CODE_^1_%STA_"SAVEID_$SAVE THE ADDRESS OF THE OPERATION CODE_^1_%INA_"1_*TO GET T€€HE ADDRESS OF THE PROPER ROUTINE_^1_%STA*_!GOROTN+1_^1_%LDA*_!(GOROTN+1)_^1_%STA*_!GOROTN+1_^1GOROTN RTJ_"(-0)_^1DUMMY5 RTJ+_!PACK_^1PUNCH RTJ+_!EXEC+6_(WRITE OBJECT RECORD_^1_%NUM_"$C00_^1_%NUM_"$18FA_^1_%NUM_"$28_^1_%ADC_"INBUF1_^1SECTOR NUM_"10_^1_%RAO*_!SECTOR_^1_%LDA*_!ENDSW_%CHECK FOR END SWITCH_^1_%SAZ_"1_^1_%JMP*_!PMPS_^1AUTOMT RTJ*_!FMRWND_$WRITE FILE MARK AND REWIND TAPE€€ ON UNIT 1._^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAZ_"RWTAG_^1_%JMP*_!PUN1A_^1RWTAG RTJ-_!($F4)_^1_%NUM_"$1C00_^1_%NUM_"0,0_^1_%NUM_"$18FA_^1_%NUM_"$2300_^1_%LDA*_!RWTAG+3_^1_%SAZ_"RWDNA_^1_%JMP*_!*-2_^1RWDNA JMP*_!PUN1A_^1FMRWND NOP_"0_^1_%RTJ-_!($F4)_^1_%NUM_"$1C00_^1_%NUM_"0,0_^1_%NUM_"$18F9_^1_%NUM_"$4000_^1_%LDA*_!FMRWND+4_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(FMRWND)_"RETURN_^1PUN1€€A RTJ-_!($F4)_)TELL OPERATOR TO MOUNT_^1_%NUM_"$0C00_%SYSTEM TAPE_^1_%ADC_"CONTIN_^1_%ADC_"0_^1_%NUM_"$18FC_^1_%NUM_"5_^1_%ADC_"TELL_^1_%RTJ*_!DIDDLE_^1PUN1_!ENA_"1_^1_%AND_"EXEC+5_^1_%SAZ_"1_^1_%JMP*_!CONTIN-2_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAN_"CONTIN-2_^1_%RTJ-_!($F4)_^1_%NUM_"$0800_^1_%ADC_"CONTIN_^1_%NUM_"0_^1_%NUM_"$18FD_^1_%NUM_"1_^1_%ADC_"ZAS_^1_%RTJ*_!DIDDLE_^1_%JMP_"GETP€€1_^1CONTIN ENA_"-0_^1_%STA*_!DSW_^1_%NUM_"$54F4_^1_%NUM_"$0A00_^1DIDDLE ADC_"0_*WAITING ROUTINE_^1_%LDA*_!DSW_^1_%SAP_"3_^1_%CLR_"A_^1_%STA*_!DSW_^1_%JMP*_!(DIDDLE)_"RETURN_^1_%JMP*_!DIDDLE+1_^1DSW_"NUM_"0_^1_%BZS_"PRO(1)_^1ASW_"ADC_"0_^1ENDSW NUM_"1_*END SWITCH_^1ZAS_"ADC_"0_^1PCHMES ALF_"7,PASS 0 LOADED_^1_%NUM_"$0D0A_^1_%ALF_"6,TYPE OPTIONS_^1_%NUM_"$0D0A_^1OPBUFF BZS_"OPBUFF(4€€)_^1TELL_!ALF_"5,END PASS 0_^1*_!ROUTINE TREATING NAM AND END STATEMENTS_^1END_"ENA_"$44_+D_^1_%STA_"UNPACK+$E_^1_%ENA_"$5A_+Z_^1_%STA_"UNPACK+$F_^1_%ENA_"$20_^1_%STA_"UNPACK+$10_^1_%STA_"UNPACK+$11_^1_%STA_"UNPACK+$12_^1_%STA_"UNPACK+$13_^1_%CLR_"A_^1_%STA*_!PRO_^1_%STA_"ENDSW_%SET THE END SWITCH_^1NAMEND CLR_"A_^1_%STA-_!I_^1_%ENQ_"72_^1_%LDA_"UNPACK,I_^1_%STA_"NUBUF,I_^1_%RAO€€-_!I_^1_%INA_"-$0D_^1_%SAZ_"3_^1_%INQ_"-1_^1_%SQZ_"1_^1_%JMP*_!NAMEND+3_^1_%JMP_"DUMMY5_^1*_!ROUTINE TREATING THE ENTER STATEMENT_^1ENTER RTJ*_!(ENTER1+1) NEXT CHARACTER_^1_%INA_"-$45_'CHECK TO MAKE SURE IT CAN NOT BE OTHER THAN EN_^1_%SAZ_"1_^1_%JMP*_!ENTER4_^1ENTER5 RTJ+_!SKCHBL_$SKIP REMAINING CHARACTERS AND TRAILING BLANKS_^1_%RTJ*_!BUPNOT_^1_%INA_"-$41_'CHECK FOR A, FOR ASSE€€MBLY_^1_%SAZ_"1_^1_%JMP*_!ENDRFT_$CHECK FOR DRAFT_^1ENTER1 RTJ+_!BUP_(NEXT CHARACTER_^1_%INA_"-$53_'CHECK FOR S_^1_%SAZ_"2_^1ENTER2 JMP+_!ER3_(ERROR(N003)_^1_%RTJ*_!(ENTER1+1) NEXT CHARACTER_^1_%INA_"-$53_^1_%SAZ_"1_^1_%JMP*_!(ENTER2+1) ERROR(N003)_^1_%ENA_"1_*IT IS ENTER ASSEMBLY_^1_%STA*_!ASW_(SET ASSEMBLY SWITCH_^1ENTER3 LDA_"=XCONS_$SET I TO CONS_^1_%STA-_!I_^1_%JMP*_!NAMEND_€€^1ENDRFT INA_"-3_)CHECK FOR D_^1_%SAZ_"ENDRF1-*-1_^1_%JMP*_!(ENTER2+1) ERROR_^1ENTER4 LDA*_!ASW_(CHECK FOR ASSEMBLY SWITCH ON_^1_%SAZ_"1_^1_%JMP*_!NAMEND_^1_%JMP*_!(ENTER2+1) ERROR_^1ENDRF1 CLR_"A_^1_%STA*_!ASW_(SET DRAFT SWITCH_^1_%JMP*_!NAMEND_^1BUPNOT ADC_"0_*GETTING CHARACTER WITHOUT ADVANCING POINTER_^1_%LDA+_!UNPACK,I_^1_%JMP*_!(BUPNOT)_^1*_!OPERATION CODE TABLES_^1*_!THE F€€OLLOWING TABLES ARE SET UP AS FOLLOWS_^1*_!THE FIRST LOCATION HAS THE CODE OF THE MNEMONIC_^1*_!THE SECOND LOCATION HAS THE ADDRESS OF THE CORRESPONDING ROUTINE_^1********_]_^1********_]_^1TABLES NUM_"$0673_%ASSIGN CODE_^1_%ADC_"ASSIGN_^1*******_]_^1_%NUM_"$0E8C_%CTL CODE_^1_%ADC_"CTL_^1*******_]_^1_%NUM_"$11E3_%DOC CODE_^1_%ADC_"DOC_^1*******_]_^1_%NUM_"$1E4F_%GROUP CODE_^1_%ADC_€€"GROUP_^1*******_]_^1_%NUM_"$4027_%PAGE CODE_^1_%ADC_"PAGE_^1*******_]_^1TABREC NUM_"$48A3_%RECORD CODE_^1_%ADC_"RECORD_^1*******_]_^1_%NUM_"$1925_%FIELD CODE_^1_%ADC_"FIELD_^1*******_]_^1_%NUM_"$1034_%DATA CODE_^1_%ADC_"DATA_^1*******_]_^1_%NUM_"$424F_%PROCED CODE_^1_%ADC_"PROCED_^1*******_]_^1_%NUM_"$4123_%PICROCODE_^1_%ADC_"PICRO_^1******_]_^1_%NUM_"$20C9_#HFIELD CODE_^1_%ADC_"H€€FI_^1***_]_^1_%NUM_"$2068_#HCHAR CODE_^1_%ADC_"HCH_^1***_]_^1_%NUM_"$19F2_#FORM CODE_^1_%ADC_"FOR_^1***_]_^1_%NUM_"$3245_#LREC CODE_^1_%ADC_"LRE_^1***_]_^1_%NUM_"$312E_#LINE CODE_^1_%ADC_"LIN_^1***_]_^1_%NUM_"$0645_#AREA CODE_^1_%ADC_"ARE_^1***_]_^1_%NUM_"$4E05_/SPEC CODE_^1_%ADC_"SPEC_^1***_]_^1_%NUM_"$69EE_#ZONE CODE_^1_%ADC_"ZONE_^1_%NUM_"$FFFF_^1_%NUM_"$FFFF_^1******_]_^1******€€_]_^1*_!ROUTINE TREATING THE ASSIGN STATEMENT_^1ASSIGN ADC_"0_^1_%LDA_"=XASSSKL_"MOVE THE ASSIGN SKELETON IN NUBUF_^1ASS01 STA+_!INDR01_^1_%LDA_"=XNUBUF_^1ASS02 STA+_!INDR02_^1_%ENQ_"-33_^1ASSMOV RTJ+_!MOVERT_$TO THE MOVE ROUTINE_^1_%RTJ*_!(ENTER5+1) SKIP THE ASSIGN STATEMENT AND TRAILING BLANKS_^1_%ENQ_"8_^1_%RTJ_"MVNAME_$MOVE THE FILE NAME IN NUBUF_^1_%RTJ_"SKCHCM_^1_%SAZ_"1_^€€1_%JMP*_!(ASSIGN)_!RETURN. THERE ARE NO PARAMETERS_^1LOOP94 RTJ_"CODERT_$CODE THE ACTUAL PARAMETER NAME_^1_%LDA_"=XTABLE1_"STORE PARAMETERS IN SEARCHING ROUTINE_^1_%STA_"CHATBL+1_^1_%ENA_"5_^1_%STA_"WAVE+1_^1_%RTJ_"SEARCH_$COMPARE WITH THE ACTUAL PARAMETER_^1ASSIND LDA_"(INDIRT)_^1_%SUB_"=N$55C9_#CHECK FOR UNIT CODE_^1_%SAN_"1_^1_%JMP*_!UNITXX_^1_%ADD_"=N$4513_"CHECK FOR DEVICE COD€€E_^1_%SAZ_"1_^1_%JMP*_!LOOP95_^1DEVICE RTJ+_!BUP_(ADVANCE POINTER TO GET THE DEVICE NUMBER_^1_%RTJ*_!(DEVICE+1)_^1_%RTJ*_!(DEVICE+1)_^1_%RTJ*_!(DEVICE+1)_^1_%AND*_!HHHF_^1_%SAZ_"NOTEN-*-1_"IT IS NOT 10_^1_%RTJ*_!(DEVICE+1)_*GET SECOND NUMBER_^1_%AND*_!HHHF_^1_%SAZ_"DEVIC1_)SET FOR DEVICE 10_^1_%ENQ_"$17_^1_%JMP*_!DEVIC2_(SET FOR DEVICE 11_^1DEVIC1 ENA_"$30_^1_%STA*_!DEVSTA_^1_%STA*€€_!DEVSTA+1_^1_%JMP*_!LOOP95_^1NOTEN RTJ*_!(DEVICE+1)_!GET THE SECOND NUMBER_^1_%AND*_!HHHF_^1_%INA_"-3_#IS THIS DEVICE_^1_%SAN_"2_#MAG. TAPE OUT, NO_^1_%RAO_"NUBUF+18_)YES-SET I/O BIT_^1_%INA_"4_#RESTORE DEVICE NUM._^1_%MUI_"=N2_^1_%INA_"-1_^1_%TRA_"Q_^1DEVIC2 LDA*_!CNVDEV,Q_^1_%STA*_!DEVSTA_^1_%LDA*_!CNVDEV+1,Q_^1_%STA*_!DEVSTA+1_^1LOOP95 LDA+_!INDIRT_^1_%INA_"1_^1_%STA*_!(ASS01+€€1)_!STORE FOR INDIRECT USE_^1NOERR LDA_"=XNUBUF_^1_%ENQ_"3_^1_%ADD_"(INDIRT),Q_^1_%STA*_!(ASS02+1)_^1_%ENQ_"4_^1_%LDQ_"(INDIRT),Q_^1_%RTJ*_!(ASSMOV+1) MOVE THE LOGICAL UNIT INTO BUFFER_^1_%RTJ+_!SKCHCM_$SKIP REMAINING CHARACTERS AND TRAILING COMMA_^1LOWBCD RTJ+_!CHKEND_$CHECK FOR END OF RECORD_^1_%SAP_"1_^1_%JMP*_!(ASSIGN)_"EXIT_^1_%JMP*_!LOOP94_$NEXT PARAMETER_^1UNITXX RTJ*_!(DE€€VICE+1)_^1_%RTJ*_!(DEVICE+1)_^1_%INA_"-$40_2IS CHARACTER NUMERIC_^1_%SAM_"UNITX1_0YES-SKIP_^1_%INA_"-$13_^1_%SAZ_"1_^1_%JMP*_!ER3_^1UNITXA ENA_"6_^1UNITX1 INA_"$40_^1_%STA*_!UNISTA_^1_%RTJ*_!(DEVICE+1)_^1_%STA*_!UNISTA+1_^1_%INA_"-$40_2IS SECOND CHARACTER NUMERIC_^1_%SAP_"UNITX2_0NO-START CHECKING_^1_%JMP*_!UNITEX_/YES-EXIT_^1UNITX2 CLR_"Q_/USE Q AS INDEX_^1_%LDA*_!UNITT,Q_.CHECK T€€ABLE FOR C,N,U OR S_^1_%SAM_"ER3_^1_%SUB*_!UNISTA+1_-IS THERE A MATCH_^1_%SAZ_"UNITDN_0YES-SKIP_^1_%INQ_"2_5INCREMENT INDEX_^1_%JMP*_!UNITX2+1_-CONTINUE CHECKING_^1UNITDN INQ_"1_/PICK UP CODE FOR CHAR._^1_%LDA*_!UNITT,Q_.AND STORE IT_^1_%STA*_!UNISTA+1_^1UNITEX JMP*_!LOOP95_)GO MOVE_^1*_!ROUTINE FOR ERROR N002_^1ER3_"LDA_"=XERMS2_^1_%STA_"MESAGE_^1_%JMP+_!ERRTN_^1ERMS2 ALF_"2,N002€€_^1HHHF_!NUM_"$F_^1UNITT NUM_"$52_%R_^1_%NUM_"$32_^1_%NUM_"$49_+I_^1_%NUM_"$39_^1_%NUM_"$4F_*O_^1_%NUM_"$41_^1_%NUM_"$4C_+L_^1_%NUM_"$42_^1_%NUM_"$FFFF_^1*_!ASSIGN STATEMENT TABLE_^1*_!THE FIRST LOCATION CONTAINS THE CODE OF PARAMETER_^1*_!THE SECOND AND THIRD THE EQUIPMENT UNIT NUMBER_^1*_!THE FOURTH THE RELATIVE LOCATION IN NUBUF_^1*_!THE FIFTH THE NUMBER OF CHARACTERS TO BE MOV€€ED_^1*_!THE SIXTH IS INPUT OR OUPUT OPTION_^1******_]_^1TABLE1 NUM_"$10B6_%DEVICE CODE_^1DEVSTA NUM_"-0,-0,$14,-$2_^1******_]_^1_%NUM_"$55C9_%UNIT CODE_^1UNISTA NUM_"-0,-0,$F,-$2_^1******_]_^1_%NUM_"$0864_%BCD CODE_^1_%NUM_"$31,$31,$19,-$1_^1******_]_^1_%NUM_"$092E_%BINARY CODE_^1_%NUM_"$30,$30,$19,-$1_^1_%NUM_"$FFFF_%END OF TABLE CODE_^1_%NUM_"$FFFF_%END OF TABLE CODE_^1*_!SKELETO€€N OF ASSIGN STATEMENT_^1******_]_^1ASSSKL NUM_"$20,$41,$53,$53,$49,$47,$4E,$20_^1_%NUM_"$20,$20,$20,$20,$20,$20,$2C_^1_%NUM_"$31,$30,$2C,$30,$2C,$39,$31,$2C,$30,$2C_^1_%NUM_"$31,$2C,$30,$2C,$30,$30,$0D,$0D_^1CNVDEV NUM_"0_^1ONEENA NUM_"$30_^1_%NUM_"$31_^1TWODYO NUM_"$30_^1_%NUM_"$32_^1THRTRA NUM_"$30_^1_%NUM_"$39_^1THRT2 NUM_"$30_^1_%NUM_"$39_^1FORTES NUM_"$39_^1_%NUM_"$31_^1FIVPE€€N NUM_"$39_^1_%NUM_"$33_^1SIXEXI NUM_"$39_^1_%NUM_"$35_^1SEVEPT NUM_"$32_^1_%NUM_"$33_^1EITOKT NUM_"$32_^1_%NUM_"$32_^1NINENE NUM_"$31_^1_%NUM_"$31_^1TENDEK NUM_"$30_^1_%NUM_"$30_^1ELEVEN NUM_"$39_^1_%NUM_"$32_^1*_"END OF TABLE TO FIND THE DEVICE NUMBER_^1*_!ROUTINE TREATING THE CTL STATEMENT_^1CTL_"ADC_"0_^1_%LDA_"=XCTLSKL_"MOVE THE CTL SKELETON TO NUBUF_^1CTL01 STA+_!INDR01_^1CT€€LBUF LDA_"=XNUBUF_^1CTL02 STA+_!INDR02_^1_%ENQ_"-47_3COMPLEMENT OF NO. OF WORDS TO MOVE_^1CTLMOV RTJ*_!(CLTMOV+1) GO TO THE MOVE ROYTINE_^1CTLSK RTJ+_!SKCHBL_$SKIP THE CTL STATEMENT AND TRAILING BLANKS_^1_%ENQ_"8_^1_%RTJ_"MVNAME_$MOVE THE FILE NAME INTO NUBUF_^1_%RTJ_"SKCHCM_^1LOOP92 RTJ+_!CODERT_$CODE THE ACTUAL PARAMETER NAME_^1_%LDA_"CODFRM_$CHECK FOR BLL OPTION_^1_%SUB_"=N$0€€98C_^1_%SAN_"CKNOS_1NO-CHECK FOR NOS_^1_%ENA_"2_^1_%RTJ_"NUMCK_%CHECK FOR NEXT TWO CHARACTERS TO BE NUMERIC_^1_%SAZ_"STRCTL_0START CHECKING TABLE_^1_%JMP_"ER4_(THEY ARE NOT NUMERIC.ERROR_^1CKNOS SUB_"=N$3067_*IS IT NOS PARAM._^1_%SAN_"STRCTL_0NO-SKIP_^1_%ENA_"$31_3YES-SET OPTION BUFFER_^1_%STA_"NUBUF+$2D_-STORE IN ALREADY MOVED BUFFER_^1_%JMP*_!CTLCM_0LOOK FOR ANOTHER PARAM._^1STR€€CTL LDA_"=XTABLE2_(STORE PARAMS. IN SEARCHING ROUTINE_^1CTLTBL STA+_!CHATBL+1_^1_%ENA_"3_^1CTLWAV STA+_!WAVE+1_^1CTLSEA RTJ+_!SEARCH_^1CTLPAK LDA+_!=XUNPACK,I_^1_%INA_"1_^1_%STA*_!(CTL01+1)_^1_%LDA*_!CTLBUF+1_"NUBUF FWA_^1_%ENQ_"1_^1CTLIND ADD_"(INDIRT),Q_^1_%STA*_!(CTL02+1)_^1_%ENQ_"2_^1_%LDQ_"(INDIRT),Q_^1CLTMOV RTJ+_!MOVERT_$STORE THE PARAMETER INTO NUBUF_^1CTLCM RTJ+_!SKCHCM_$€€SKIP REMAINING OF CHARACTERS AND COMMA_^1_%RTJ+_!CHKEND_$CHECK FOR END_^1_%SAP_"1_^1_%JMP*_!(CTL)_%END-RETURN_^1_%JMP*_!LOOP92_$NEXT PARAMETER_^1*_!THE FIRST LOCATION CONTAINS CODE_^1*_!THE SECOND LOCATION CONTAINS THE FWA INTO NUBUF_^1*_!THE THIRD LOCATION CONTAINS THE NUMBER OF CHARACTERS_^1TABLE2 NUM_"$15EC_%EOL CODE_^1_%NUM_"$12,-$2_^1****_]_^1_%NUM_"$15F2_%EOR CODE_^1_%NUM_"$F€€,-$2_^1****_]_^1_%NUM_"$15F0_%EOP CODE_^1_%NUM_"$15,-$2_^1****_]_^1_%NUM_"$1984_%FLD CODE_^1_%NUM_"$18,-$2_^1****_]_^1_%NUM_"$1183_%DLC CODE_^1_%NUM_"$1B,-$2_^1****_]_^1_%NUM_"$1186_%DLF CODE_^1_%NUM_"$1E,-$2_^1****_]_^1_%NUM_"$118C_%DLL CODE_^1_%NUM_"$21,-$2_^1****_]_^1_%NUM_"$1981_%FLA CODE_^1_%NUM_"$24,-$2_^1****_]_^1_%NUM_"$39E2_%NOB CODE_^1_%NUM_"$27,-$2_^1****_]_^1_%NUM_"$098€€C_%BLL CODE_^1_%NUM_"$2A,-$2_^1_%NUM_"$FFFF_%END CODE_^1_%NUM_"$FFFF_%END CODE_^1*_!SKELETON TABLE OF CTL STATEMENT_^1******_]_^1CTLSKL NUM_"$20,$43,$54,$4C,$20,$20,$20,$20_^1_%NUM_"$20,$20,$20,$20,$20,$20,$2C_^1_%NUM_"$30,$30,$2C,$30,$30,$2C,$30,$30,$2C_^1_%NUM_"$35,$43,$2C,$30,$30,$2C,$30,$30,$2C_^1_%NUM_"$30,$30,$2C,$30,$30,$2C,$30,$30,$2C_^1_%NUM_"$30,$30,$2C,$30,$0D,$0D_^1*_!E€€ND OF SKELETON TABLE_^1*_!ROUTINE TREATING THE PAGE PARAMETERS_^1PNM_"ADC_"0_*FORM NUMBER FLAG_^1PAGE_!ADC_"0_^1_%CLR_"A_^1_%STA*_!PNM_(CLEAR THE FORM NUMBER FLAG_^1_%LDA_"=XPAGSKL_"MOVE THE PAGE SKELETON INTO NUBUF_^1PAGE01 STA+_!INDR01_^1_%LDA_"=XNUBUF_+F.W.A. OF OUTPUT BUFFER_^1PAGE02 STA+_!INDR02_^1_%ENQ_"-48_.COMPLEMENT OF WORDS TO MOVE_^1_%RTJ*_!(CLTMOV+1)_^1_%LDA*_!(CTLPAK+1€€) CHECK FOR FORM NUMBER PRESENCE_^1_%INA_"-$20_^1_%SAN_"PAG02-*-1_!THERE IS FORM NUMBER_^1PAG01 STA*_!PNM_(FLAG FOR NOT PRESENCE OF FORM NUMBER_^1_%ENA_"$31_^1_%STA_"NUBUF+41_^1_%JMP*_!PAG03_^1PAG02 ENA_"1_^1_%STA*_!PNM_(FLAG FOR PRESENCE OF FORM NUMBER_^1PAG03 ENA_"$2C_0CCN P0 001_^1_%STA_"NUBUF+44_^1_%ENA_"$44_^1_%STA_"NUBUF+45_^1_%ENA_"$30_^1_%STA_"NUBUF+46_^1PAG33 LDA-_!I_€€!ADVANCE THE POINTER TO THE PRMTER AREA_^1_%INA_"6_^1_%STA-_!I_^1_%RTJ*_!(LOOP90+1)_!GET CODE OF 3 SUCCESSIVE LOCATIONS_^1_%LDA*_!(LOOP90+3)_!CHECK CODE. IF BINARY 0-NO PARAMTRS_^1_%SAN_"1_^1_%JMP*_!(PAGE)_!RETURN--NO PARAMETERS_^1_%LDA-_!I_!BRING BACK POINTER TO THE OP.FIELD_^1_%INA_"-8_^1_%STA-_!I_^1_%RTJ_"SKCHBL SKIP UP TO THE 1ST PARAMETER_^1LOOP90 RTJ+_!CODERT_!GET THE CODE€€ OF MNEMONICS_^1_%LDA+_!CODFRM_!CHECK FOR RSL OPTION_^1_%SUB_"=N$4A6C_#TOMAKE SURE IT IS WITHIN LIMITS_^1_%SAN_"PAG141-*-1 IT IS NOT A RSL OPTION_^1_%RTJ_"CHKRSL_$GO FOR CHECKING_^1_%SAM_"PAG141-*-1 IT IS WITHIN LIMITS_^1_%JMP+_!ER3_.ERROR THE LIMIT WAS EXCEEDED_^1PAG141 LDA_"=XTABLE3_"INSERT PARAMETERS IN SEARCHING ROUTINE_^1_%STA_"CHATBL+1_^1_%ENA_"3_^1_%STA_"WAVE+1_^1_%RTJ_"SE€€ARCH_$GO TO COMPARE_^1*_!START CHECKING FOR SPECIAL CASES_^1*****_]_^1PAGFN LDA_"(INDIRT)_^1_%SUB_"=N$1A70_#CHECK IF WE HAVE TO ADD A FIELD SEPARATOR_^1_%SAN_"JUMP01-*-1 NO_^1_%ENA_"$31_(SET FOR FIELD SEPARATOR THE BIT ON_^1_%STA_"NUBUF+25_^1_%JMP*_!RETR99_^1JUMP01 SUB_"=N$271C_$CHECK FOR PLL CODE_^1_%SAN_"SKIP02-*-1_^1_%ENA_"$30_^1_%STA_"NUBUF+11_^1_%JMP*_!BACKTR_$RETURN TO CONT€€INUE_^1SKIP02 SUB_"=N$0AA6_#CHECK FOR SAR CODE_^1_%SAN_"SKIP03-*-1_^1_%ENA_"$31_^1INTER2 STA_"NUBUF+35_^1_%JMP*_!BACKTR_$RETURN TO CONTINUE_^1SKIP03 INA_"-$3C_(CHECL FOR SCAN MODE_^1_%SAN_"SKIP04_%NO-SKIP_^1_%RAO-_!I_^1_%LDA+_!UNPACK,I_"CHECK FOR LOW SCANNING_^1_%INA_"-$4C_'CHECK FOR LOW SCANNING_^1_%SAN_"3_^1_%ENA_"$33_^1_%STA_"NUBUF+33_^1_%JMP*_!RETR99_^1SKIP04 LDA_"(INDIRT)_^1_%€€SUB_"=N$19EE_^1_%SAN_"BACKTR_^1_%RAO-_!I_^1_%LDA+_!UNPACK,I_"CHECK VALUE_^1_%INA_"-$35_^1_%SAM_"PAGFN1_%SKIP-OK_^1_%JMP*_!PAG141-2_^1PAGFN1 INA_"$35_"RESTORE CHARACTER_^1_%STA_"NUBUF+$1B_^1_%JMP*_!RETR99_^1BACKTR RTJ*_!NUM333_$CHECK THE NEXT 3 CHARACTERS NUMERIC_^1_%RAO-_!I_^1_%LDA_"=XUNPACK,I F.W.A. OF PARAMETER_^1PAG05 STA+_!INDR01_$STORE FOR INDIRECT USE_^1_%LDA*_!PAGE02-1_#GE€€T FWA OF INPUT BUFFER_^1_%ENQ_"1_^1PAG555 ADD_"(INDIRT),Q_^1PAG06 STA+_!INDR02_$STORE FOR INDIRECT USE_^1_%INQ_"1_^1_%LDQ_"(INDIRT),Q_^1PAG07 RTJ+_!MOVERT_^1RETR99 RTJ+_!SKCHCM_$SKIP REMAINING CHARACTERS AND TRAILING COMMA_^1PAG08 RTJ+_!CHKEND_$CHECK FOR END OF PARAMETERS_^1_%SAM_"SKIP99-*-1_^1_%JMP*_!LOOP90_^1SKIP99 LDA_"PNM_(CHECK FOR FORM NUMBER PRESENCE_^1_%SAN_"1_^1_%JMP*_!€€FMNRT_^1_%LDA*_!BACKTR+3_"MOVE THE FORM NUMBER TO NUBUF_^1_%STA*_!(PAG05+1)_^1PAG09 LDA_"=XNUBUF+7_^1_%STA*_!(PAG06+1)_^1_%ENQ_"-3_^1_%RTJ*_!(PAG07+1)_^1FMNRT JMP_"(PAGE)_$RETURN_^1***_]_^1***_]_^1*** AUXILIARY ROUTINE CHECKING FOR 3 CONSECUTIVE CHARACTERS TO BE NUMERI_^1NUM333 ADC_"0_^1_%ENA_"3_^1_%RTJ_"NUMCK_^1_%SAZ_"2_^1_%JMP+_!ER3_(ERROR NOT ALL 3 CHARACTERS ARE NUMERIC_^1_%J€€MP*_!(NUM333)_"O.K.EXIT_^1******_]_^1*_!PAGE PARAMETER TABLE_^1TABLE3 NUM_"$418C_%PLL CODE_^1_%NUM_"$D,-$3_^1******_]_^1_%NUM_"$326C_%LSL CODE_^1_%NUM_"$11,-$3_^1******_]_^1_%NUM_"$4A6C_%RSL CODE_^1_%NUM_"$15,-$3_^1******_]_^1_%NUM_"$1A70_%FSP CODE_^1_%NUM_"$19,-$1_^1******_]_^1_%NUM_"$3183_%LLC CODE_^1_%NUM_"$1D,-$3_^1******_]_^1_%NUM_"$4C6E_%SCN CODE_^1_%NUM_"$21,-$1_^1******_]_^€€1_%NUM_"$4C32_%SAR CODE_^1_%NUM_"$25,-$3_^1******_]_^1_%NUM_"$19EE_'FON CODE_^1_%NUM_"$1B,-$1_^1_%NUM_"$FFFF_^1_%NUM_"$FFFF_^1******_]_^1*_#END OF TABLE_^1*_!PAGE SKELETON TABLE_^1******_]_^1PAGSKL NUM_"$20,$45,$4E,$56,$20,$34,$2C,$30,$30,$30,$2C_^1_%NUM_"$30,$2C,$30,$36,$30,$2C,$30,$35,$30,$2C_^1_%NUM_"$32,$31,$32,$2C,$30,$2C,$30,$2C,$30,$30_^1_%NUM_"$30,$2C,$32,$2C,$33,$2C,$30,$3€€0,$32,$2C_^1_%NUM_"$30,$2C,$30,$0D,$0D,$0D,$0D_^1*_!ROUTINE TREATING RECORD AND FIELD PARAMETERS_^1******_]_^1RECORD ADC_"0_^1_%ENA_"0_^1_%STA*_!EVN_(SET RECORD FLAG_^1_%JMP*_!FIELDO_^1FIELD ADC_"0_^1_%ENA_"1_^1_%STA*_!EVN_(SET FIELD FLAG_^1_%LDA*_!FIELD_%STORE THE RETURN ADDRESS PROPERLY_^1_%STA*_!RECORD_^1FIELDO LDA_"=XRECSKL_"MOVE THE RECORD FIELD SKELETON IN NUBUF_^1_%STA_"IND€€R01_$STORED FWA OF SENDING BUFFER_^1RF1_"LDA_"=XNUBUF_^1_%STA*_!(PAG06+1)_!STORED FWA OF RECEIVING BUFFER_^1_%ENQ_"-41_+NO OF WORDS TO MOVE_^1_%RTJ*_!(PAG07+1)_^1_%LDA*_!EVN_(SET FIELD OR RECORD CODE FLAG_^1_%SAZ_"RF11_^1_%ENA_"$31_^1RF222 STA*_!(RF11+2)_"STORE IT IN NUBUF+5_^1_%JMP*_!RF2_^1RF11_!ENA_"$32_(SET RECORD FLAG_^1_%STA_"NUBUF+5_^1RF2_"ENQ_"15_'CHECK FOR A BLANK_^1_%LDA_€€"UNPACK,Q_#PARAMETER FIELD_^1_%INA_"-$20_^1RF333 JMP*_!*+2_"FOR CORRECTIVE CODE_^1_%ADC_"CODFRM_%SEE SKIP 88+2_^1_%SAN_"2_^1_%JMP_"FRSTIN_$EXIT.NO PARAMETERS_^1_%LDA-_!I_*BRING BACK THE POINTER TO THE OPER. FIELD_^1_%INA_"-2_^1_%STA-_!I_^1_%RTJ_"SKCHBL_$SKIP UP TO THE FIRST PARAMETER_^1SKIP88 RTJ+_!CODERT_$CODE THE NAME OF PARAMETER_^1_%LDA*_!(RF333+1)_!GET THE CODE AND CHECK FOR €€RSL OPTION_^1_%SUB_"=N$4A6C_^1_%SAN_"OLCC1_1CHECK FOR OLCC PARAM._^1_%RTJ*_!CHKRSL_$MAKE SURE IT IS WITHIN LIMITS_^1_%SAM_"PAG142_0A=NEGATIVE-O.K._^1_%JMP*_!ER3REC_'ERROR_^1OLCC1 ADD_"=N$CE9_+IS IT OLCC OPTION_^1_%SAN_"PAG142_0NO-SKIP_^1_%LDA*_!EVN_3RECORD STMT.-O.K._^1_%SAN_"ER3REC_0FIELD-ERROR_^1_%ENA_"$31_3SET OLCC OPTION_^1_%STA_"NUBUF+$24_^1_%JMP*_!RETR88_/CHECK FOR NEXT PARM€€._^1PAG142 LDA_"=XTABLE4_"INSERT PARAMETERS IN SEARCHING ROUTINE_^1_%STA_"CHATBL+1_^1_%ENA_"3_^1_%STA_"WAVE+1_^1_%RTJ_"SEARCH_^1_%SAM_"1_^1_%JMP*_!SKIPR3_^1ER3REC JMP+_!ER3_(SEND ERROR MESSAGE_^1***_]_^1***_]_^1*** ROYTINE CHECKING FOR LEGALITY OF RSL_^1CHKRSL ADC_"0_^1_%LDA_"UNPACK+1,I_#GET FIRST CHARACTER_^1_%INA_"-$32_#CHAR=2?_^1_%SAN_"CHKRTN-*-1_#NO - SKIP_^1_%LDA_"UNPACK+2,I_#€€GET SECOND CHAR._^1_%INA_"-$35_#CHAR=5?_^1_%SAZ_"CKAGN-*-1_#YES - SKIP_^1CHKRTN JMP*_!(CHKRSL)_#EXIT (A REGISTER)_^1CKAGN LDA_"UNPACK+3,I_#GET THIRD CHAR._^1_%INA_"-$37_#CHAR. GREATER THAN 6_^1_%JMP*_!(CHKRSL)_#RETURN (A-REG HAS CODE)_^1ER4_"LDA_"=XER4ER_^1_%STA_"MESAGE_^1_%JMP_"ERRTN_^1ER4ER ALF_"2,N004_^1CORR_!NUM_"$2C,$44,$31,$2C_^1_%BZS_"TEMP99(1),EVN(1),FRST(1)_^1*_!START CH€€ECKING SPECIAL CASES_^1******_]_^1SKIPR3 LDA_"(INDIRT)_^1_%SUB_"=N$1A70_#CHECK FOR ADDING A FIELD SEPARATOR_^1_%SAN_"SKIP11-*-1 NO._^1_%ENA_"$31_(SET FLAG TO STORE A FIELD SEPARATOR_^1_%STA_"NUBUF+18_^1_%JMP*_!RETR88_^1SKIP11 SUB_"=N$31C2_#CHECK FOR SAR_^1_%SAN_"SKIP12-*-1_^1_%ENA_"$33_^1INTER3 STA_"NUBUF+28_^1_%JMP*_!TRPBAC_^1SKIP12 INA_"-$3C_'CHECK FOR SCN_^1_%SAN_"SKIPFN_^1_%RA€€O-_!I_^1_%LDA+_!UNPACK,I_^1SKIP14 INA_"-$4C_'CHECK FOR LOWE_^1_%SAN_"SKIIIP-*-1 IT IS NOT LOW_^1_%ENA_"$33_^1_%STA_"NUBUF+26_^1SKIIIP JMP*_!RETR88_^1SKIPFN LDA_"(INDIRT)_^1_%SUB_"=N$19EE_^1_%SAN_"TRPBAC_^1_%RAO-_!I_)GET A CHAR. FOR VALIDATION_^1_%LDA+_!UNPACK,I_^1_%INA_"-$35_^1_%SAM_"SKIPF1_%SKIP-OK_^1_%JMP*_!(ER3REC+1) ERROR_^1SKIPF1 INA_"$35_"RESTORE CHAR._^1_%STA_"NUBUF+$14_^1€€_%JMP*_!RETR88_^1TRPBAC RTJ_"NUM333_$CHECK NEXT 3 CHARACTERS NUMERIC_^1_%RAO-_!I_^1_%LDA_"=XUNPACK,I GET THE F.W.A. OF PARAMETER_^1_%STA+_!INDR01_$STORED FWA FOR INDIRECT USE_^1_%LDA_"=XNUBUF_#GET THE FWA OF NUBUF_^1_%ENQ_"1_^1SKIP20 ADD_"(INDIRT),Q_^1_%STA+_!INDR02_$STORED FWA FOR INDIRECT USE_^1_%ENQ_"2_^1_%LDQ_"(INDIRT),Q_^1SKIP22 RTJ+_!MOVERT_^1RETR88 RTJ+_!SKCHCM_$SKIP REMAIN€€ING CHARACTERS AND TRAILING COMMA_^1_%SAM_"FRSTIN_^1_%JMP*_!FRSTON_^1FRSTIN LDA*_!EVN_#IS THIS RECORD OR FIELD_^1_%SAN_"RF555-1_'FIELD - SKP_^1_%LDA*_!FRST_)IS THIS FIRST RECORD_^1_%SAN_"RF555_^1_%JMP*_!RF444_'YES-SKIP_^1RF555 ENQ_"37_^1_%LDA_"=XCORR_^1_%STA*_!TEMP99_^1LOOPCR LDA*_!(TEMP99)_^1_%STA*_!(SKIP20-2),Q_^1_%INQ_"1_^1_%TRQ_"A_^1_%INA_"-41_^1_%SAZ_"SKIPR2_^1_%RAO*_!TEMP99_€€^1_%JMP*_!LOOPCR_^1SKIPR2 RAO*_!CORR+2_^1_%LDA*_!CORR+2_^1_%INA_"-$3A_^1_%SAN_"RF444_^1_%ENA_"$41_^1_%STA*_!CORR+2_^1RF444 RAO*_!FRST_^1_%JMP_"(RECORD)_"RETURN. END OF PARAMETERS_^1FRSTON RTJ_"CHKEND_^1_%SAM_"2_^1_%JMP_"SKIP88_$NEXT PARAMETER_^1_%JMP*_!FRSTIN_$RETURN. END_^1*_!RECORD - FIELD PARAMETER TABLE_^1******_]_^1TABLE4 NUM_"$326C_%LSL CODE_^1_%NUM_"$A,-$3_^1******_]_^1_%NU€€M_"$4A6C_%RSL CODE_^1_%NUM_"$E,-$3_^1******_]_^1_%NUM_"$4C6E_%SCN CODE_^1_%NUM_"$1A,-$1_^1******_]_^1_%NUM_"$4C32_%SAR CODE_^1_%NUM_"$1E,-$3_^1******_]_^1_%NUM_"$1A70_%FSP CODE_^1_%NUM_"$12,-$1_^1******_]_^1_%NUM_"$19EE_'FON CODE_^1_%NUM_"$14,-$1_^1******_]_^1_%NUM_"$31E3_'LOC CODE_^1_%NUM_"$16,-$3_^1_%NUM_"$FFFF_^1_%NUM_"$FFFF_^1*_!RECORD AND FIELD SKELETON TABLE_^1******_]_^1RECS€€KL NUM_"$20,$45,$4E,$56,$20,$30,$2C,$2C,$2C,$2C_^1_%NUM_"$30,$30,$30,$2C,$30,$30,$30,$2C_^1_%NUM_"$30,$2C,$37,$2C,$30,$30,$30,$2C_^1_%NUM_"$30,$2C,$30,$2C,$30,$30,$30,$2C_^1_%NUM_"$30,$2C,$30,$0D,$0D,$0D,$0D,$0D_^1*** ROUTINE TREATING FORM STATEMENT ***_^1FOR_"ADC_"0_^1_%LDA_"=XFORSKL_#MOVE FORM SKELETON TO NUBUF_^1_%STA_"INDR01_#F.W.A. OF SKELETON_^1_%LDA_"=XNUBUF_#F.W.A. OF BUFFE€€R AREA_^1_%STA_"INDR02_^1_%ENQ_"-$40_#COMPLEMENT OF WORDS TO MOVE_^1_%RTJ_"MOVERT_#GO MOVE_^1_%RTJ_"SKCHBL_#SKIP FORM STATE. AND BLANKS_^1_%ENQ_"6_#MOVE FILE NAME STARTING_^1_%RTJ_"MVNAME_#AT NUBUF+6_^1_%RTJ_"SKCHCM_#SKIP TRAILING COMMA_^1FOR5_!RTJ+_!CODERT_#CODE ACTUAL PARAM._^1_%LDA_"CODFRM_*IS THERE A PARAMETER_^1_%SAN_"FOR7-*-1_'YES - SKIP_^1FOR6_!JMP*_!(FOR)_$EXIT - (NO PARAME€€TER)_^1FOR7_!SUB_"=N$1924_#IS IT FID PARAM.?_^1_%SAZ_"1_.YES - SKIP_^1_%JMP*_!FMICK_^1_%ENQ_"$33_-INDEX INTO NUBUF_^1FIDCK RTJ+_!BUP_%GET A CHAR._^1_%INA_"-$20_,IS IT A BLANK?_^1_%SAZ_"FIDOU-*-1_%YES - SKIP?_^1_%INA_"-$C_+IS IT A COMMA?_^1_%SAN_"FIDC1-*-1_%NO - SKIP_^1FIDOU JMP*_!FMIC4_#GO SET "NO MOVE" FLAG_^1FIDC1 INA_"$2C_'RESTORE CHAR._^1_%STA_"NUBUF,Q_(AND STORE IN BUFFER_^€€1_%INQ_"-$36_,HAVE 4 CHARS. BEEN STORED?_^1_%SQN_"1_/NO - SKIP_^1_%JMP*_!FMIC4_^1_%INQ_"$37_-RESTORE AND INCRE. INDEX_^1_%JMP*_!FIDCK_)GET ANOTHER CHAR._^1FMICK SUB_"=N$1BFF_"IS IT MIC PARAM?_^1_%SAZ_"1_/YES - SKIP_^1_%JMP*_!FORCK_^1_%RTJ*_!(FIDCK+1)_$GET A CHAR._^1_%INA_"-$31_,IS IT NUMERIC?_^1_%SAM_"FMIC2-*-1_%NO - SKIP (ERROR)_^1_%INA_"-7_.CHAR = 7 OR LESS?_^1_%SAM_"1_^1FMIC2 €€JMP*_!FORERR_"ERROR_^1_%INA_"7_/RESTORE CHAR. - LESS ONE_^1_%TRA_"Q_/CHAR IN Q-REG._^1_%LDA*_!FMIC5,Q_'GET PROPER VALUE_^1_%STA_"NUBUF+$3C_%AND STORE IT_^1FMIC4 RAO_"MVFLG_$SET "NO MOVE" FLAG_^1_%JMP*_!FOR9_^1FORCK SUB_"=N$4D0_#IS IT NOS OPTION?_^1_%SAN_"MAG1_#NO-SKIP_^1_%ENA_"$31_#YES-SET UP NUBUF TO REFLECT_^1_%STA_"NUBUF+$3E_"THIS OPTION_^1_%JMP*_!FMIC4_^1MAG1_!LDA_"=XFOR1_#FW€€A OF THE PARAM. TABLE._^1_%STA_"CHATBL+1_^1_%ENA_"3_#INDEX THROUGH TBL_^1_%STA_"WAVE+1_^1_%RTJ_"SEARCH_#SEE IF PARAM. MATCHES ONE IN TBL._^1_%LDA_"=XFOR4_#MUST PARAM. BE NUMERIC ONLY?_^1_%SUB_"INDIRT_^1_%SAM_"FOR9-*-1_#NO - SKIP_^1_%SAZ_"FOR8-*-1_#YES - BUT CHECK LLC OPTION_^1_%ENQ_"2_^1_%LDA_"(INDIRT),Q_.SPECIAL CASES_^1_%INA_"2_^1_%SAZ_"FOR10-*-1_%YES - SKIP_^1_%SAM_"FOR13-*-1_%D€€OCUMENT READY CHECK_^1_%JMP*_!FOR11_*NO - CHECK SPECIAL CASE_^1FOR10 JMP*_!FOR15_^1FOR8_!RTJ_"CHKRSL_$LLC OPTION LESS THAN 256?_^1_%SAM_"1_/YES - SKIP_^1_%JMP*_!FORERR_(YES - ERROR_^1FOR9_!RTJ_"MVPR_'MOVE ROUTINE_^1_%SAP_"1_/GET NEXT PARAM._^1_%JMP*_!FOREND_(END_^1_%JMP*_!FOR5_*GET NEXT PARAM._^1FOR13 LDA-_!I_^1_%STA*_!FOR14_)SAVE I REGISTER_^1_%RAO-_!I_^1_%RTJ*_!(FOR5+1)_$GET A €€CHARACTER_^1_%LDA_"CODFRM_*CODED PARAM. VALUE_^1_%SUB_"=N$4210_(CHARS. ALL ZEROS?_^1_%SAZ_"FORERR-*-1_$YES - ERROR_^1_%LDA*_!FOR14_^1_%STA-_!I_.RESTORE I REG._^1_%ENA_"1_^1FOR15 INA_"2_)CHECK FOR NUMERICS_^1_%RTJ_"NUMCK_*TWO NUMERIC CHARS?_^1_%SAN_"FORERR-*-1_^1_%JMP*_!FOR9_)YES - MOVE TO NUBUF_^1FORERR JMP_"ER4_%ERROR ROUTINE_^1FOREND JMP*_!(FOR)_#EXIT - END_^1FOR11 LDA_"UNPACK+€€1,I_#GET CHAR._^1_%INA_"-$34_#CHAR. GRTR THAN 3?_^1_%SAP_"FOR12-*-1_#YES - SKIP_^1_%JMP*_!FOR9_#MOVE PARAM. VALUE_^1FOR12 JMP*_!FORERR_^1FOR14 NUM_"0_^1FMIC5 NUM_"$31_!TABLE OF MIC VALUES_^1_%NUM_"$34_^1_%NUM_"$35_^1_%NUM_"$45_^1_%NUM_"$46_^1* FIRST WRD. CONTAINS PARAM. CODE_^1* SECOND WRD. CONTAINS FWA INTO NUBUF (OPTION BUFF)_^1* THIRD WRD. CONTAINS NUMBER OF CHARS._^1FOR1_!NU€€M_"$39E2_#NOB CODE_^1_%NUM_"$22,-$2_^1******_]_^1_%NUM_"$1981_#FLA CODE_^1_%NUM_"$2C,-$2_^1************_^1_%NUM_"$4899_*RDY CODE_^1_%NUM_"$38,-$3_^1******_]_^1FOR3_!NUM_"$098C_#BLL CODE_^1_%NUM_"$25,-$2_^1******_]_^1_%NUM_"$31C7_#LNG CODE_^1_%NUM_"$28,-$1_^1******_]_^1_%NUM_"$25C3_#INC CODE_^1_%NUM_"$2A,-$1_^1******_]_^1FOR4_!NUM_"$3183_#LLC CODE_^1_%NUM_"$2F,-$3_^1******_]_^1_%NUM€€_"$15EC_#EOL CODE_^1_%NUM_"$0D,-$2_^1******_]_^1_%NUM_"$15F2_#EOR CODE_^1_%NUM_"$10,-$2_^1******_]_^1_%NUM_"$15F0_#EOP CODE_^1_%NUM_"$13,-$2_^1******_]_^1_%NUM_"$1984_#FLD CODE_^1_%NUM_"$16,-$2_^1******_]_^1_%NUM_"$1183_#DLC CODE_^1_%NUM_"$19,-$2_^1******_]_^1_%NUM_"$1186_"DLF CODE_^1_%NUM_"$1C,-$2_^1******_]_^1_%NUM_"$118C_#DLL CODE_^1_%NUM_"$1F,-$2_^1_%NUM_"$FFFF_#END CODE_^1_%NU€€M_"$FFFF_#END CODE_^1FORSKL NUM_"$20,$46,$4F,$52,$4D,$20_^1_%NUM_"$20,$20,$20,$20,$20,$20,$2C_^1_%NUM_"$30,$30,$2C,$30,$30,$2C,$30,$30,$2C_^1_%NUM_"$35,$43,$2C,$30,$30,$2C,$30,$30,$2C_^1_%NUM_"$30,$30,$2C,$30,$30,$2C,$30,$30,$2C_^1_%NUM_"$30,$2C,$30,$2C,$30,$30,$2C_^1_%NUM_"$30,$30,$30,$2C,$20,$20,$20,$20,$2C_^1_%NUM_"$30,$30,$30,$2C,$30,$2C,$30,$0D_^1*** THIS ROUTINE MOVES PARAMET€€ER VALUES TO NUBUF ***_^1MVPR_!NUM_"0_^1_%LDA*_!MVFLG_#HAS PARAM. ALREADY BEEN MOVED?_^1_%SAZ_"MVP1-*-1_#NO - SKIP_^1_%CLR_"A_#YES_^1_%STA*_!MVFLG_#CLEAR FLAG_^1_%JMP*_!MVP2_#SKIP THE MOVE_^1MVP1_!RAO-_!I_#INCREMENT I-REG._^1_%LDA_"=XUNPACK,I_#FWA OF PARAMETER_^1_%STA*_!(LR00+1)_^1_%LDA_"=XNUBUF_#FWA OF NUBUF_^1_%ENQ_"1_#GET POSITION TO STORE INTO_^1_%ADD_"(INDIRT),Q_#NUBUF_^1_%STA€€*_!(LR01+1)_^1_%INQ_"1_#GET NUMBER OF CHARS. TO_^1_%LDQ_"(INDIRT),Q_#BE MOVED IN Q.REG._^1_%RTJ*_!(LR02+1)_#GO MOVE VALUE_^1MVP2_!RTJ_"SKCHCM_#SKIP TRAILING COMMA_^1_%RTJ_"CHKEND_#ARE WE DONE?_^1_%JMP*_!(MVPR)_#EXIT - WITH A-REG SET_^1_%BZS_"MVFLG(1)_^1*** ROUTINE TREATING THE LREC STATEMENTS ***_^1LRE_"ADC_"0_^1_%CLR_"A_^1_%STA_"ARFG_#CLR FLAG SET BY AREA STMTS_^1_%STA_"LNFG_#CLR €€FLAG SET BY LINE STMTS_^1_%STA_"LRFLG_'CLEAR LRFLG_^1_%LDA_"=XLRESKL_#MOVE LREC SKEL. TO NUBUF_^1LR00_!STA+_!INDR01_#FWA OF SKELETON_^1_%LDA_"=XNUBUF_#F.W.A. OF NUBUF_^1LR01_!STA+_!INDR02_^1_%ENQ_"-$34_*COMPLEMENT OF WORDS TO MOVE_^1LR02_!RTJ+_!MOVERT_#GO MOVE SKELETON_^1LRE1_!ENQ_"15_#Q=15_^1_%LDA_"UNPACK,Q_#SEE IF THERE IS A PARAM._^1_%INA_"-$20_#IS IT BLANK?_^1_%SAN_"LRE2-*-1_#N€€O - GO CHECK PARAM._^1_%JMP*_!LRE5_#EXIT - NO PARAMETERS_^1LRE2_!RTJ_"SKCHBL_#SKIP UP TO FIRST PARAM._^1LRE4_!RTJ_"CODERT_#GET ACUTAL PARAM. CODE_^1_%LDA_"CODFRM_(GET PARAM CODE_^1_%SUB_"=N$3D83_'IS IT THE OLC OPTION?_^1_%SAN_"MAG2_*NO-SKIP_^1_%ENA_"$31_(SET UP NUBUF TO INDICATE_^1_%STA_"NUBUF+$2F_$OLC OPTION_^1_%RAO*_!MVFLG_(SET NO-MOVE FLAG_^1_%RTJ*_!MVPR_^1_%JMP*_!LRE5-2_^1MAG2_€€!LDA_"=XLRET_#GET FWA OF PARAM TABLE_^1_%STA_"CHATBL+1_^1_%ENA_"4_#SET INDEX INCREMENT_^1_%STA_"WAVE+1_#THROUGH PARAM. TBL._^1_%RTJ_"SEARCH_#SEARCH THROUGH TB._^1_%RTJ*_!SUB955_#GO TO PROPER SUBROUTINE_^1_%SAM_"LRE5-*-1_#A-REG. NEGATIVE (END)_^1_%JMP*_!LRE4_#GET ANOTHER PARAM._^1LRE5_!RAO*_!LRESKL+$32_"INCREMENT CORRELETION FLAG_^1_%LDA*_!LRESKL+$32_^1_%INA_"-$3A_#FLAG = TO $3A?_^1€€_%SAN_"2_^1_%ENA_"$41_#YES - SET FLAG = TO $41(A)_^1_%STA*_!LRESKL+$32_^1LRE51 LDA+_!=XNUBUF+8_!MOVE_^1_%STA*_!(LR00+1) LREC_^1_%LDA_"=XLRSAVE_#PARAMETER IMAGE_^1_%STA*_!(LR01+1)_!TO SAVE BUFFER_^1_%ENQ_"-40_$FOR USE BY_^1_%RTJ*_!(LR02+1) LINE + AREA DEFAULT_^1_%LDA*_!(LRE51+1)_"MOVE_^1_%STA*_!(LR00+1)_!PARAM_^1_%LDA_"=XLNSAVE_!IMAGE_^1_%STA*_!(LR01+1)_!FOR_^1_%ENQ_"-40_!AREA_^1€€_%RTJ*_!(LR02+1) DEFAULT_^1LRE6_!JMP*_!(LRE)_#EXIT - MAIN ROUTINE_^1LRESKL NUM_"$20,$44,$45,$53,$43,$20,$38,$2C_^1_%NUM_"$30,$35,$30,$2C,$32,$31,$32,$2C,$30,$2C_^1_%NUM_"$30,$2C,$30,$2C,$31,$32,$38,$2C_^1_%NUM_"$31,$30,$2C,$31,$2C,$33,$32,$2C,$30,$2C_^1_%NUM_"$30,$2C,$30,$2C,$30,$2C,$30,$32,$2C_^1_%NUM_"$30,$2C,$30,$2C,$44,$30,$0D_^1*** FIRST WORD CONTAINS PARAMETER CODE_^1*** S€€ECOND WORD CONTAINS FWA OF NUBUF_^1*** THIRD WORD CONTAINS NO. OF CHARACTERS TO MOVE (COMPLEMENT)_^1*** FOURTH WORD CONTAINS ADDRS OF SUBROUTINE USED TO PROCESS_^1*** CORRESPONDING PARAMETER_^1LRET_!NUM_"$31A3_)LMC OPTION_^1_%NUM_"$08,-$3_^1_%ADC_"LMCR_^1******_]_^1_%NUM_"$49A3_-RMC OPTION_^1_%NUM_"$0C,-$3_^1_%ADC_"RMQV_^1******_]_^1_%NUM_"$4C6E_-SCN OPTION_^1_%NUM_"$10,-$1_^1_%€€ADC_"SCNR_^1******_]_^1_%NUM_"$4C32_-SAR OPTION_^1_%NUM_"$2A,-2_^1_%ADC_"SARR_^1******_]_^1_%NUM_"$4CB4_-SET OPTION_^1_%NUM_"$12,-1_^1_%ADC_"SETR_^1******_]_^1_%NUM_"$4CAC_-SEL OPTION_^1_%NUM_"$14,-$1_^1_%ADC_"SELR_^1******_]_^1_%NUM_"$4596_#QLV OPTION_^1_%NUM_"$16,-$3_^1_%ADC_"RMQV_^1******_]_^1_%NUM_"$0E12_#CPR OPTION_^1_%NUM_"$1A,-$2_^1_%ADC_"CPRR_^1******_]_^1_%NUM_"$5994_#VLT €€OPTION_^1_%NUM_"$1D,-$1_^1_%ADC_"VLTR_^1******_]_^1_%NUM_"$2194_#HLT OPTION_^1_%NUM_"$1F,-$2_^1_%ADC_"HLTR_^1******_]_^1_%NUM_"$19D4_#FNT OPTION_^1_%NUM_"$28,-$1_^1_%ADC_"FNTR_^1******_]_^1_%NUM_"$1A70_#FSP OPTION_^1_%NUM_"$2D,-$1_^1_%ADC_"FSPR_^1******_]_^1_%NUM_"$FFFF_#END CODE_^1_%NUM_"$FFFF_^1******************************************_^1SUB955 NOP_"0_^1_%LDQ_"INDIRT_#GET ADDR. €€OF POSITION IN PARAM TBL_^1_%INQ_"2_#INCREMENT ADDR. BY 2_^1_%LDA-_!1,Q_#GET ADDR. OF SUBROUTINE_^1_%STA*_!*+2_#AND STORE IT._^1_%RTJ+_!0_#** MODIFIED RETURN JUMP**_^1_%JMP*_!(SUB955)_#EXIT_^1*** ROUTINE TREATING LINE AND AREA STATEMENTS ***_^1LIN_"ADC_"0_^1_%ENA_"1_^1_%STA_"LRFLG_'SET LRFLG_^1_%STA_"LNFG_(SET LINE FLAG_^1_%CLR_"A_^1_%JMP*_!LAMV-1_#GO CLR FLAG SET BY AREA_^1ARE_"AD€€C_"0_^1_%CLR_"A_^1_%STA_"LNFG_(CLEAR FLAG SET BY LINE_^1_%ENA_"1_^1_%STA_"ARFG_(SET AREA FLAG_^1LAMV_!LDA_"=XLINSKL_#MOVE LN AND ARE SKEL. TO NUBUF_^1_%STA_"INDR01_#FWA OF SKELETON_^1_%LDA_"=XNUBUF_#FWA OF NUBUF_^1_%STA_"INDR02_^1_%ENQ_"-$31_#COMPLEMENT OF WORDS TO MOVE_^1_%RTJ_"MOVERT_#GO - MOVE_^1_%LDA*_!ARFG_#IS AREA FLAG SET?_^1_%SAZ_"LA01-*-1_#NO - SKIP_^1_%ENA_"$32_#YES - CHA€€NGE 2 WRDS. IN NUBUF_^1_%STA_"NUBUF+6_#CHANGE DESCRIPTION NUMBER_^1_%INA_"-2_^1LA00_!STA+_!NUBUF+$2D_#FSP OPTION EQUAL TO ZERO_^1_%ENA_"$30_^1_%STA_"NUBUF+$2B_^1_%STA_"NUBUF+$2A_^1LA01_!ENQ_"15_#IS THERE A PARAMETER TO CHECK_^1_%LDA_"UNPACK,Q_#IS IT A BLANK?_^1_%INA_"-$20_^1_%SAN_"LA10-*-1_#NO - GO CHECK PARAM._^1_%JMP*_!LAED_#EXIT - NO PARAMETER_^1LA10_!RTJ_"SKCHBL_#SKIP REMAINING€€ CHARS. AND BLANKS_^1LACO_!RTJ_"CODERT_#GET ACTUAL CODE_^1_%LDA_"CODFRM_#CODE IN A-REG._^1_%SUB_"=N$3D83_#IS IT OLC OPTION_^1_%SAN_"MAG4_#NO-SKIP_^1_%LDA*_!LNFG_#IS LINE FLAG SET?_^1_%SAZ_"MAG6_#NO-ERR3_^1_%ENA_"$31_#YES-SET UP NUBUF TO REFLECT_^1_%STA_"NUBUF+$2F_#OLC OPTION_^1_%RAO_"MVFLG_#SET NO-MOVE FLAG_^1_%RTJ_"(LM02+1)_^1_%JMP*_!MAG5_^1MAG4_!SUB_"=N$EAF_#IS IT SAR OPTION?_^1_€€%SAN_"LA03-*-1_#NO - SKIP_^1_%LDA*_!LNFG_#IS LINE FLAG SET?_^1_%SAN_"LA02-*-1_#YES - SKIP_^1MAG6_!JMP_"(LM03+1)_^1LA02_!ENA_"$30_^1_%STA*_!(LA00+1)_#SET SKP=$30_^1LA03_!LDA_"=XLRET_#FWA OF PARAM. TBL._^1_%STA_"CHATBL+1_^1_%ENA_"4_#SET INDEX INCREMENT_^1_%STA_"WAVE+1_^1_%RTJ_"SEARCH_#FIND CODE IN TBL_^1_%RTJ*_!SUB955_#GO TO PROPER SUBROUTINE_^1MAG5_!SAM_"LAED_#A-REG. RETURNED NEGATI€€VE-END_^1_%JMP*_!LACO_#GET ANOTHER PARAM._^1LAED_!LDA*_!LNFG_#PROCESSING LINE?_^1_%SAN_"1_^1_%JMP*_!LA04_^1_%CLR_"A,Q_^1_%STA*_!LNFG_#CLEAR LINE FLAG._^1_%LDA_"=XNUBUF+8_^1_%STA_"LINDEF_^1GTDEF LDA_"(LINDEF)_$GET A LINE PARAMETER_^1_%SAN_"1_#IS IT A DEFAULT_^1_%JMP*_!GETLRC_#YES_^1BUMPCT RAO_"LINDEF_$NO_^1_%INQ_"-40_%HAS COMPLETE LINE_^1_%SQP_"2_*STATEMENT BEEN EXAMINED_^1_%IN€€Q_"41_'NO_^1_%JMP*_!GTDEF_^1_%LDA_"=XNUBUF+8_#YES , SAVE_^1_%STA_"INDR01_#LINE STATEMENT FOR_^1_%LDA_"=XLNSAVE_#USE BY AREA_^1_%STA_"INDR02_$DEFAULT_^1_%ENQ_"-40_^1_%RTJ_"MOVERT_^1_%JMP*_!(LIN)_"EXIT LINE_^1GETLRC LDA_"LRSAVE,Q_#GET DEFAULT PARAM._^1_%STA*_!(LINDEF)_!AND STORE IN NUBUF_^1_%JMP*_!BUMPCT_^1LA04_!STA*_!ARFG_#CLEAR AREA FLAG._^1_%CLR_"Q_^1_%LDA_"=XNUBUF+8_^1_%STA*_!L€€INDEF_^1LINPAR LDA*_!(LINDEF) GET AN AREA PARAM._^1_%SAZ_"GETLNE_#IS IT A DEFAULT , YES_^1BUMPAR RAO*_!LINDEF_"NO_^1_%INQ_"-40_'HAS_^1_%SQP_"LA06_"COMPLETE AREA_^1_%INQ_"41 STATEMENT BEEN PROCESSED_^1_%JMP*_!LINPAR_^1GETLNE LDA*_!LRFLG_$TEST IF LINE IN_^1_%SAN_"2_^1_%LDA*_!LRSAVE,Q_(NO, USE LREC DEFAULTS_^1_%JMP*_!*+2_^1_%LDA*_!LNSAVE,Q_^1_%STA*_!(LINDEF)_^1_%JMP*_!BUMPAR_^1L€€A06_!JMP_"(ARE)_)EXIT AREA_^1_%BZS_"LNFG(1),ARFG(1)_^1_%BZS_"LRFLG(1)_^1_%BZS_"LNSAVE(40),LRSAVE(40),LINDEF(1)_^1LINSKL NUM_"$20,$44,$45,$53,$43,$20,$34,$2C_^1_%NUM_"0,0,0,$2C,0,0,0,$2C,0,$2C_^1_%NUM_"0,$2C,0,$2C,0,0,0,$2C,0,0,$2C_^1_%NUM_"0,$2C,0,0,$2C,0,$2C,0,$2C_^1_%NUM_"0,$2C,0,$2C,0,0,$2C,0,$2C,0,$0D_^1*** THESE SUBROUTINES ARE USED BY LREC, LINE AND AREA ***_^1*** TO TES PARA€€METER VALUES BEFORE MOVING THEM TO THEIR ***_^1*** CORRESPONDING AREAS IN NUBUF. ***_^1LMCR_!ADC_"0_#LMC OPTION_^1LMC00 RTJ+_!NUM333_#CHECK FOR 3 NUMERICS_^1_%RTJ*_!(RM00+1)_#VALUE GRTR. THAN 256?_^1_%SAM_"1_#NO - SKIP_^1_%JMP*_!LM03_#YES - ERROR_^1_%LDA_"UNPACK+1,I_#GET FIRST CHAR._^1_%INA_"-$30_#CHAR. = 0?_^1_%SAN_"LM02-*-1_#NO - SKIP_^1_%LDA_"UNPACK+2,I_#GET SECOND CHAR._^1_%IN€€A_"-$31_#CHAR. EQUAL OR LESS THAN 1?_^1_%SAM_"LM03-*-1_#YES - SKIP_^1_%SAZ_"LM01-*-1_#EQUAL - KEEP CHECKING_^1LM02_!RTJ+_!MVPR_#GO MOVE CHARS._^1_%JMP*_!(LMCR)_#EXIT_^1LM01_!LDA_"UNPACK+3,I_#GET CHAR._^1_%INA_"-$32_^1_%SAM_"LM03-*-1_#ERROR - SKIP_^1_%JMP*_!LM02_#MOVE CHARS._^1LM03_!JMP+_!ER3_^1**** **** **** **** **** **** **** ****_^1RMQV_!ADC_"0_#RMC AND QLV OPTIONS_^1_%RTJ*_!(LM€€C00+1)_#CHK FOR 3 NUMERICS_^1RM00_!RTJ+_!CHKRSL_#VALUE GRTR THAN 256?_^1_%SAM_"RM01-*-1_#NO - O.K. SKIP_^1_%JMP*_!(LM03+1)_#EXIT - ERROR_^1RM01_!RTJ*_!(LM02+1)_#GO MOVE CHARACTERS_^1_%JMP*_!(RMQV)_#EXIT - MAIN ROUTINE_^1**** **** **** **** **** **** **** ****_^1SARR_!ADC_"0_#SAR OPTION_^1_%ENA_"2_#CHK FOR 2 NUMERICS._^1SA00_!RTJ+_!NUMCK_#A-REG RETND = 0?_^1_%SAN_"SA01-*-1_#NO - SKI€€P-ERROR_^1_%RTJ*_!(LM02+1)_#GO MOVE CHARACTERS._^1_%JMP*_!(SARR)_#EXIT - MAIN ROUTINE_^1SA01_!JMP+_!ER4_#EXIT - ERROR ROUTINE_^1**** **** **** **** **** **** **** ****_^1SETR_!ADC_"0_#SET OPTION_^1_%LDA_"UNPACK+1,I_#GET ONE CHAR._^1_%INA_"-$30_#NUMERIC CHAR._^1_%SAM_"SE00-*-1_#NO - ERROR_^1_%INA_"-8_#CHAR. LESS THAN 8?_^1_%SAM_"SE01-*-1_#YES - O.K. SKIP_^1SE00_!JMP+_!ER3_#ERROR ROU€€TINE_^1SE01_!RTJ*_!(LM02+1)_#GO MOVE CHARS._^1_%JMP*_!(SETR)_#EXIT MAIN - ROUTINE_^1**** **** **** **** **** **** **** ****_^1CPRR_!ADC_"0_#CPR OPTION_^1_%ENA_"2_#CHECK FOR TWO NUMERICS_^1_%RTJ*_!(SA00+1)_^1_%SAZ_"CP00-*-1_#OK - NUMERIC_^1_%JMP*_!(SE00+1)_#ERROR_^1CP00_!LDA_"UNPACK+1,I_#GET CHAR._^1_%INA_"-$31_#CHAR EQUAL ONE?_^1_%SAM_"CP02-*-1_#NO - LESS_^1_%SAN_"CP01-*-1_#GREATER€€ - ERROR_^1_%LDA_"UNPACK+2,I_$GET SECOND CHAR._^1_%INA_"-$37_#CHAR. LESS THAN 7?_^1_%SAM_"CP02-*-1_#YES - O.K. SKIP_^1CP01_!JMP*_!(SE00+1)_#ERROR ROUTINE_^1CP02_!RTJ*_!(LM02+1)_#GO MOVE CHAR.S_^1_%JMP*_!(CPRR)_#EXIT MAIN ROUTINE_^1***** *** *** *** *** *** *** *** ***_^1VLTR_!ADC_"0_$VLT OPTION_^1_%LDA_"UNPACK+1,I_#GET CHAR._^1_%INA_"-$30_#NUMERIC CHAR?_^1_%SAM_"2_#NO - ERROR_^1_%I€€NA_"-2_#CHAR. GRTR THAN 1?_^1_%SAM_"VL01-*-1_#NO - SKIP_^1_%JMP*_!(SE00+1)_#ERROR ROUTINE_^1VL01_!RTJ+_!MVPR_#GO MOVE CHARS._^1_%JMP*_!(VLTR)_#EXIT - MAIN ROUTINE_^1***** *** *** *** *** *** ***_^1HLTR_!ADC_"0_#HLT OPTION_^1_%ENA_"2_#CHECK FOR 2 NUMERICS_^1_%RTJ*_!(SA00+1)_^1_%SAN_"HL01_#ERROR-SKIP_^1HL00_!LDA*_!(VLTR+2),I_^1_%INA_"-$36_#CHAR. GRTR THAN 5?_^1_%SAP_"HL01_#YES-ERROR_€€^1_%INA_"6_#CHAR. =0?_^1_%SAN_"HL02_#SKIP-OK_^1_%LDA*_!(CP01-3),I_^1_%INA_"-$30_#CHAR. =0?_^1_%SAN_"HL02_#NO-SKIP_^1HL01_!JMP+_!ER3_#ERROR ROUTINE_^1HL02_!RTJ*_!(VL01+1)_#GO MOVE CHARACTERS_^1_%JMP*_!(HLTR)_#EXIT - MANI ROUTINE_^1**** **** **** **** **** **** ****_^1SCNR_!ADC_"0_#SCN OPTION_^1_%LDA_"ARFG_#IS AREA FLAG SET?_^1_%SAZ_"SC01-*-1_#NO - SKIP_^1_%JMP*_!(HL01+1)_#YES - ERRO€€R_^1SC01_!LDA_"UNPACK+1,I_#GET CHARACTER._^1_%INA_"-$44_#CHAR=D? (DOUBLE SPACE)_^1_%SAZ_"SC02-*-1_#YES - SKIP_^1_%INA_"-$F_#IS IT AN S?_^1_%SAZ_"1_#YES - SKIP_^1_%JMP*_!(SE00+1)_#NO - ERROR_^1_%ENA_"$31_#NO - SET TO SINGLE SPACE (1)_^1_%JMP*_!SC03_#GO STORE CHAR_^1SC02_!ENA_"$30_#SET-DOUBLE SPACE (0)_^1SC03_!STA_"NUBUF+$10_#STORE IN NUBUF_^1_%RAO_"MVFLG_#SET FLAG TO INDICATE MOVE_^€€1_%RTJ*_!(VL01+1)_#HAS BEEN DONE_^1_%JMP*_!(SCNR)_#EXIT - MAIN ROUTINE_^1**** **** **** **** **** **** **** ****_^1SELR_!ADC_"0_#SEL OPTION_^1_%LDA_"UNPACK+1,I_#GET CHAR._^1_%STA*_!SELH_#SAVE IT_^1_%INA_"-$30_#IS CHAR. NUMERIC_^1_%SAM_"2_#NO - ERROR_^1_%INA_"-7_#CHAR LESS THN 6?_^1_%SAM_"SEL1-*-1_#NO - SKIP-O.K._^1_%JMP*_!(HL01+1)_#EXIT - ERROR ROUTINE_^1SEL1_!INA_"3_#CHAR. LESS TH€€AN 4?_^1_%SAP_"SEL2-*-1_#NO - SKIP_^1_%LDA*_!SELH_#PICK UP ORIGINAL VALUE._^1_%JMP*_!SEL3_#GO STORE CHAR. AS IS._^1SEL2_!LDA*_!SELH_#GET ORIGINAL CHAR._^1_%INA_"-3_#SET TO VALUE WANTED._^1SEL3_!STA_"NUBUF+$14_#STORE CHAR._^1_%RAO_"MVFLG_#SET FLAG TO INDICATE NO_^1_%RTJ*_!(VL01+1)_#MOVE REQUIRED._^1_%JMP*_!(SELR)_#EXIT - MAIN ROUTINE_^1SELH_!NUM_"0_#CHAR. HOLD._^1***** **** **** ***€€* **** ****_^1FSPR_!ADC_"0_#FSP OPTION_^1_%LDA_"ARFG_#IS AREAFLAG SET?_^1_%SAN_"FS01-*-1_#YES - SKIP - OK_^1FS00_!JMP+_!ER3_#EXIT - ERROR ROUTINE_^1FS01_!ENA_"$31_#SET FSP PARAM=1_^1_%STA_"NUBUF+$2D_#STORE IN NUBUF_^1_%RAO_"MVFLG_#SET "NO MOVE" FLAG_^1FS02_!RTJ+_!MVPR_#GO TO MOVE ROUTINE_^1_%JMP*_!(FSPR)_#EXIT - MAIN ROUTINE_^1***** ***** **** **** **** **** ****_^1FNTR_!ADC_"0_$FN€€T OPTION_^1_%ENQ_"$31_+USE Q FOR STORING IN OPTION BUFF_^1_%ENA_"$30_#SET ZERO S IN NUBUF EQUAL TO_^1FN01_!STA+_!NUBUF+$22_#SC IN OPTION BUFFER_^1FN02_!STA+_!NUBUF+$24_(DA IN OPTION BUFFER_^1FN03_!STA+_!NUBUF+$26_#HP IN OPTION BUFFER_^1FN04_!STA+_!NUBUF+$28_(GC,ER AND AC IN OPTION BUFFER_^1_%LDA_"UNPACK+1,I_#GET CHARACTER_^1_%INA_"-$30_+00-2F?_^1_%SAM_"FNAA_+YES-ERROR_^1_%INA_"-$A_€€,=30-39?_^1_%SAM_"FNAB_+YES-OK_^1_%INA_"-7_.3A-40?_^1_%SAM_"FNAA_+YES-ERROR_^1_%STA*_!FNHD_^1_%INA_"-9_4IS IT HANDPRINT(A-I)_^1_%SAP_"FNAA_3NO-SKIP_^1_%JMP*_!FNHH1_0GO PROCESS HANDPRINT CODES_^1FNAA_!JMP*_!(FS00+1)_)ERROR-INVALID CODE_^1FNAB_!INA_"4_#VALUE = 6-9?_^1_%SAP_"FNAE_#YES-SKIP_^1_%INA_"5_#VALUE =1?_^1_%SAZ_"FNAB1_#YES-SKIP_^1_%INA_"-1_^1_%SAN_"FNAD_^1_%STQ*_!(FN01+1)_#VAL€€UE IS 2_^1_%JMP*_!FNAE1_^1FNAB1 STQ*_!(FN02+1)_#VALUE IS 1_^1FNAD_!JMP*_!FNFG_#MOVE_^1FNAE_!SAZ_"FNAE1_#VALUE IS 6_^1_%INA_"-2_#IS VALUE 8?_^1_%SAZ_"FNAE2_#YES-SKIP_^1_%STQ*_!(FN02+1)_#SET LC =1 FOR VALUE OF 7 OR 9_^1_%SAP_"FNAE2_#VALUE IS 9_^1FNAE1 ENQ_"$32_^1FNAE2 TRQ_"A_^1_%JMP*_!FNH9_+GO STORE IN FNT OPTION_^1FNHH1 STQ*_!(FN03+1)_!SET HP = 1_^1_%LDQ*_!FNHD_1GET INDEX FOR HN€€DPRT TBL._^1_%LDA*_!FNHDTB,Q_-GET FONT SETTING_^1_%SAP_"FNH9_3DO NOT SET-DA (BIT 11)_^1_%ENQ_"$31_3SET DA IN NUBUF_^1_%STQ*_!(FN02+1)_^1_%AND_"=N$7FFF_/GET RID OF BIT 15_^1FNH9_!STA*_!(FN04+1)_'SET FNT OPTION_^1FNFG_!RAO_"MVFLG_#SET "NO. MOVE" FLAG._^1_%RTJ*_!(FS02+1)_#MOVE ROUTINE_^1_%JMP*_!(FNTR)_#EXIT - MAIN ROUTINE_^1FNHD_!NUM_"0_#CHAR. HLD._^1FNHDTB NUM_"$0031_^1_%NUM_"$0033_^€€1_%NUM_"$0030_^1_%NUM_"$0032_^1_%NUM_"$8030_^1_%NUM_"$8032_^1_%NUM_"$0039_^1_%NUM_"$0038_^1_%NUM_"$8038_^1****** THIS SUBROUTINE PROCESSES THE HANDPRINT STATEMENTS ******_^1***_"ENTRY POINT FOR HFIELD STATEMENT ***_^1HFI_"NOP_"0_#ENTRY POINT_^1_%RTJ_"HFIX_^1_%JMP*_!HPR_#GO MOVE SKELETON_^1*** ENTRY POINT FOR HCHAR STATEMENT ***_^1HCH_"NOP_"0_#ENTRY POINT_^1_%CLR_"A_#SET HFLAG POSIT€€IVE TO INDICATE_^1_%STA*_!HFLAG_#HCHAR BEING PROCESSED_^1_%ENA_"$39_#SET TABLE IDENTIFIER IN_^1_%STA*_!HPRSKL+6_#OPTION EQUAL TO 9 AND SET_^1_%INA_"-9_#FIRST SIX PARAMETERS EQUAL TO 0 ($30)_^1_%ENQ_"8_^1HCH1_!STA*_!HPRSKL,Q_^1_%INQ_"-$12_*DONE?_^1_%SQZ_"HPR_+YES-SKIP_^1_%INQ_"$14_+INCREMENT INDEX_^1_%JMP*_!HCH1_)CONTINUE STORING_^1HPR_"ENQ_"$3F_(NUMBER OF WORDS TO MOVE MINUS ONE_^1€€HPR1_!LDA*_!HPRSKL,Q_#GET ITEM FROM OPTION BUFFER_^1HPRN_!STA_"NUBUF,Q_#AND STORE IN NUBUF_^1_%INQ_"-1_#DECREMENT MOVE INDEX_^1_%SQM_"HPR2-*-1_#ALL ITEM MOVED?_^1_%JMP*_!HPR1_#NO - CONTINUE MOVING_^1HPR2_!RTJ+_!BUP_#GET A CHAR._^1_%INA_"-$20_#IS IT A BLANK?_^1_%SAZ_"HPR3-*-1_#YES - SKIP_^1_%JMP*_!HPR2_(NO - CONTINUE LOOKING FOR A BLANK._^1HPR3_!LDA*_!HFLAG_^1_%SAM_"HPR33_^1_%RTJ*_!€€(HPR2+1)_^1HPR33 ENQ_"8_^1_%STQ*_!HPRX_#INTO NUBUF_^1HPR4_!RTJ*_!(HPR2+1)_#GET ANOTHER CHAR._^1_%ENQ_"4_#INITIALIZE CHARACTER INDEX_^1_%LDA*_!HFLAG_#PROCESSING AN HFIELD STMT._^1_%SAM_"HF1_#YES-SKIP_^1HCH5_!LDA_"UNPACK,I_#GET A CHARACTER_^1_%SUB*_!HCHT,Q_#FIND A MATCH?_^1_%SAZ_"HCH9_#YS-SKIP_^1_%SQZ_"HPRE1_#NO-ERROR (INVALID CODE)_^1_%INQ_"-1_#DECREMENT INDEX_^1_%JMP*_!HCH5_^1HCH9€€_!SQN_"HCH6_#SKIP CHAR IS NOT A BLANK_^1_%JMP*_!(HCH)_#END OF INPUT._^1HCH6_!LDA*_!HPRX_#GET INDEX INTO NUBUG_^1_%INA_"-$40_#BUFFER OVERFLOW?_^1_%SAZ_"HPRE_#YES-SKIP_^1HCH7_!JMP*_!HPR8_#NO-GO STORE_^1HF1_"LDA_"UNPACK,I_#GET A CHARACTER_^1_%SUB*_!HFIT,Q_#FIND A MATCH?_^1_%SAZ_"HPR6_#YES-MATCH_^1HPRE1 SQZ_"HPRE_#SKIP-ERROR (INVALID CODE)_^1_%INQ_"-1_#DECREMENT INDEX_^1_%JMP*_!HF1_^1€€HPRE_!JMP+_!ER3_#ERROR 3 MESSAGE_^1HPR6_!SQN_"HPR7_#CHAR. NOT A BLANK_^1_%JMP*_!(HFI)_#END OF INPUT_^1HPR7_!LDA*_!HPRX_"NUBUF INDEX_^1_%INA_"-$14_+C. RTN FOUND IN NUBUF (BUF. O/FLOW)_^1_%SAN_"HPR8-*-1_#NO - SKIP_^1_%JMP*_!HPRE_#EXIT - ERROR_^1HPR8_!INQ_"$2F_#GET ACTUAL CODE FOR CHAR_^1_%TRQ_"A_#AND MOVE TO A-REG._^1_%LDQ*_!HPRX_#GET INDEX INTO NUBUF_^1_%STA*_!(HPRN+1),Q_#STORE CHAR€€. IN NUBUF_^1_%INQ_"2_#INCREMENT STORING INDEX_^1_%JMP*_!HPR33+1_^1HPRX_!NUM_"0_#NUBUF INDEX POINTER_^1HFLAG NUM_"0_^1HFIT_!NUM_"$20_#BLANK_^1_%NUM_"$41_"A_^1_%NUM_"$4D_#M_^1_%NUM_"$54_#T_^1_%NUM_"$4E_#N_^1HCHT_!NUM_"$20_#BLANK_^1_%NUM_"$2C_#COMMA_^1_%NUM_"$41_#A_^1_%NUM_"$53_#S_^1_%NUM_"$4E_#N_^1HPRSKL NUM_"$20,$44,$45,$53,$43,$20,$31,$2C_^1_%NUM_"$33,$2C,$33,$2C,$33,$2C,$33,$2C,€€$33,$2C,$33,$2C_^1_%NUM_"$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C_^1_%NUM_"$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C_^1_%NUM_"$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C_^1_%NUM_"$30,$2C,$30,$2C,$30,$2C,$30,$0D_^1*_!END OF TABLE_^1************************************************_^1***** ROUTINE TREATING SPEC STATEMENT_#*****_^1*************************************€€***********_^1FLAG29 NUM_"0_%FLAG FOR 929 R-LEVEL BUFFER_^1SPEC_!ADC_"0_,ENTRY POINT_^1_%RAO*_!FLAG29_^1_%LDA_"=XSPCSKL_)MOVE SPEC SKELETON TO NUBUF_^1SPC1_!STA+_!INDR01_$FWA OF SKELETON_^1_%LDA_"=XNUBUF_+FWA OF BUFFER AREA_^1SPC2_!STA+_!INDR02_^1_%ENQ_"-$24_(COMPLEMENT OF WORDS TO MOVE_^1SPC3_!RTJ+_!MOVERT_%GO MOVE_^1SPC4_!RTJ+_!SKCHBL_%SKIP SPEC STMT AND BLANKS_^1_%ENQ_"6_1MOVE F€€ILE NAME STARTING AT_^1_%RTJ_"MVNAME_+NUBUF+6_^1_%RTJ_"SKCHCM_+SKIP TRAILING COMMA_^1SPC5_!RTJ+_!CODERT_%GET CODE FOR A PARAM._^1SPC6_!LDA+_!CODFRM_'IS THERE A PARAM_^1_%SAN_"SPC15_,YES-SKIP_^1SPC10 JMP*_!(SPEC)_$NO PARAMETER -EXIT_^1SPC15 ENQ_"$31 SET Q-REG FOR POSSIBLE STORE_^1SPC16 SUB_"=N$48B6_%IS IT REVS._^1_%SAN_"SPC20_#NO-SKIP_^1_%STQ_"NUBUF+$1A YES-SET REVERSE BIT IN OP€€TN BUFF;_^1_%JMP*_!SPC40_^1SPC20 SUB_"=N$41F_#IS IT SFULL PARM,_^1_%SAN_"SPC25_#NO-SKIP_^1_%STQ_"NUBUF+$1C YES-SET STKR FULL BIT IN OPTN BUFF_^1_%JMP*_!SPC40_^1SPC25 LDA_"=XSPECT_"FWA OF PARAM TABLE_^1_%STA_"CHATBL+1_^1_%ENA_"4_(SET INDEX INCREMENT_^1_%STA_"WAVE+1_"THRU PARAM TABLE_^1_%RTJ_"SEARCH_^1_%LDA_"=XSPEC1_!IS IT A PARAM+ THAT NEEDS_^1_%SUB_"INDIRT_"VALIDATION_^1_%SAP_"SP€€C41_*NO-GO MOVE_^1_%RTJ_"SUB955_"YES-GO VALIDATE_^1_%JMP*_!SPC45-1 DONE?_^1SPC40 RAO+_!MVFLG_%SET NO MOVE FLAG_^1SPC41 RTJ+_!MVPR_'MOVE ROUTINE_^1_%SAP_"1_1STILL MORE_^1SPC45 JMP*_!(SPEC)_$EXIT_^1_%JMP*_!SPC5_-GET NEST PARAM._^1*************************************************_^1*** ROUTINE TREATING THE ZONE STATEMENT_'****_^1*************************************************_^1€€ZONE_!ADC_"0_#ENTRY_^1_%LDA_"=XZONSKL MOVE ZONE SKELETON TO NUBUF_^1_%STA*_!(SPC1+1)_(FWA OF SKELETON_^1_%LDA_"=XNUBUF_*FWA OF BUFFER_^1_%STA*_!(SPC2+1)_^1_%ENQ_"-$1C_'COMPLEMENT OF WORDS TO MOVE_^1_%RTJ*_!(SPC3+1)_)MOVE ROUTINE_^1_%ENQ_"15_0SEE IF A PARAM IS PRESENT_^1_%LDA_"UNPACK,Q_^1_%INA_"-$20_-IS IT A BLANK_^1_%SAN_"FLD5_-NO-GO CHECK PARAMETER_^1_%JMP*_!FLD50_!EXIT-NO PARAME€€TERS_^1FLD5_!RTJ*_!(SPC4+1)_#SKIP CHARS UP TO FIRST PARAMETER_^1FLD6_!RTJ*_!(SPC5+1)_#GET CODE FOR PARAM._^1_%LDA*_!(SPC6+1)_^1_%ENQ_"$31_.SET Q FOR POSSIBLE STORAGE_^1_%SUB_"=N$19B2_+IS IT FMARK_^1_%SAN_"FLD10_-NO-SKIP_^1_%STQ_"NUBUF+$1A_!SET OPTION BUFFER_^1_%JMP*_!FLD25_,GO TO MOVE ROUTINE_^1FLD10 SUB_"=N$2040_#IS IT NORSC_^1_%SAN_"FLD15_,NO-SKIP_^1_%STQ_"NUBUF+$16_!SET OPTION €€BUFFER_^1_%JMP*_!FLD25_+GO TO MOVE ROUTINE_^1FLD15 ADD_"=N$241D_%IS IT ENABLE BLANKS_^1_%SAN_"FLD30_-NO-SKIP_^1_%INQ_"-1_0YES-SET OPTION BUFFER TO ZERO_^1_%STQ_"NUBUF+$18_^1FLD25 RAO*_!(SPC40+1) SET NO MOVE FLAG_^1_%RTJ*_!(SPC41+1)_'GO TO MOVE ROUTINE_^1_%JMP*_!FLD35_+SEE IF DONE_^1FLD30 LDA_"=XZONT_#FWA OF ZONE PARAM, TABLE_^1_%STA_"CHATBL+1_^1_%ENA_"4_0SET INDEX INCREMENT_^1_€€%STA_"WAVE+1_+THROUGH PARAM TABLE_^1_%RTJ_"SEARCH_+SEARCH FOR PARAM_^1_%RTJ_"SUB955_+GO TO PROCESSING ROUTINE_^1FLD35 SAM_"FLD50_$ALL PARAM; PROCESSED_^1_%JMP*_!FLD6_#GET ANOTHER PARAMETER_^1FLD50 JMP*_!(ZONE)_^1*****************************************************_^1*****ROUTINE TREATING LVL PARAMETER_,*****_^1*****************************************************_^1LVLR_!NOP_"0_€€#ENTRY_^1_%LDA_"UNPACK+1,I_"GET A CHARACTER_^1_%INA_"-$30_$CHECK FOR NUMERIC_^1_%SAM_"LVLER_#ERROR-SKIP_^1_%INA_"-$4_%LVL=0,1,2,3_^1_%SAP_"LVLER_#SKIP-ERROR_^1_%RTJ*_!(LRC25+1)_+MOVE VALUE_^1_%JMP*_!(LVLR)_!EXIT_^1LVLER JMP*_!(LRC15+1)_!ERROR EXIT_^1*****************************************************_^1*****ROUTINE TREATING AST PARAMETER_-****_^1*********************************€€********************_^1ASTR_!NOP_"0_^1_%LDA_"UNPACK+1,I_"GET A CHARACTER_^1_%INA_"-$31_$CHECK FOR NUMERIC_^1_%SAM_"ASTRER_"EXIT-ERROR_^1_%INA_"-$3_%VALUE = 1,2,3_^1_%SAP_"ASTRER_"ERROR_^1_%RTJ*_!(LRC25+1)_"MOVE VALUE_^1_%JMP*_!(ASTR)_!EXIT_^1ASTRER JMP*_!(LRC15+1) ERROR-EXIT_^1*****************************************************_^1*****ROUTINE TREATING MRL PARAMETER_-*****_^1****€€*************************************************_^1MRLR_!NOP_"0_#ENTRY_^1_%ENA_"3_(CHECK FOR 3 NUMERICS_^1_%RTJ+_!NUMCK_"RANGE 001-999_^1_%SAN_"MRLER_#NO-SKIP_^1MRLM_!RTJ*_!(LRC25+1)_"MOVE PARAM;_^1_%JMP*_!(MRLR) EXIT-END_^1MRLER JMP*_!(LRC15+1)_!ERROR EXIT_^1**************************************************_^1*** ROUTINE TREATING LRC AND TRC PARAMETERS ***_^1******************€€***********************************_^1LRCR_!ADC_"0_,ENTRY_^1_%RAO-_!I_^1_%RTJ_"CODERT_%GET CODE FOR COORDINATE_^1_%LDA_"CODFRM_%CHECK VALUE_^1_%SUB_"=N$4215_%CHECK FOR LESS THAN 5_^1_%SAM_"LRC15_,NO-ERROR EXIT_^1LRC10 SUB_"=N$4C1_!CHECK FOR GREATER THAN 165_^1_%SAM_"LRC20_-OK-SKIP_^1LRC15 JMP+_!ER3_(ERROR-EXIT_^1LRC20 LDA-_!I_*RESTORE I REGISTER_^1_%INA_"-3_^1_%STA-_!I_^1LRC25 €€RTJ+_!MVPR_'GO MOVE CHARACTERS_^1_%JMP*_!(LRCR)_*EXIT-MAIN ROUTINE_^1**************************************************_^1*** ROUTINE TREATING FON PARAMETER ***_^1*****************************************************_^1FONR_!ADC_"0_,ENTRY_^1_%ENA_"$30_^1_%STA*_!(FON20+1)_^1_%LDA_"UNPACK+1,I_'GET CHARACTER_^1_%INA_"-$31_-IS CHAR. NUMERIC_^1_%SAM_"FONER_-NO-ERROR_^1_%INA_"-$8_^1_%SAM€€_"FON15_^1FONER JMP*_!(LRC15+1)_^1FON15 INA_"4_"VALUE=1,2,3, OR 4_^1_%SAP_"FON16_#NO-SKIP_^1_%INA_"4_^1_%TRA_"Q_^1_%LDA*_!ZCODE,Q GET CORRECT VALUE_^1FON20 STA+_!NUBUF+$E_'STORE AS FONT_^1_%JMP*_!FON50-1 GO TO MOVE ROUTINE_^1FON16 INA_"$30 RESTORE VALUE_^1_%STA_"NUBUF+$12_"SET M IN OPTION_^1_%RAO*_!(SETR1+1)_!SET NO MOVE FLAG_^1FON50 RTJ*_!(LRC25+1)_!GO MOVE_^1_%JMP*_!(FONR€€)_*EXIT_^1ZCODE NUM_"$31_^1_%NUM_"$32_^1_%NUM_"$34_^1_%NUM_"$38_^1***************************************************_^1*** ROUTINE TREATING SET PARAMETER ***_^1*****************************************************_^1SETRT ADC_"0_+ENTRY_^1_%LDA_"UNPACK+1,I_'GET CHAR_^1_%INA_"-$35_$CHECK FOR NUMERICS_^1_%SAP_"SETER_#ERROR-SKIP_^1_%INA_"4_(VALUE 1,2,3,4_^1_%SAM_"SETER_#NO-ERROR_^1_€€%TRA_"Q_^1_%LDA*_!ZCODE,Q GET CORRECT VALUE_^1_%STA_"NUBUF+$10_^1SETR1 RAO+_!MVFLG SET NO MOVE FLAG_^1SETR5 RTJ*_!(LRC25+1)_!GO MOVE_^1_%JMP*_!(SETRT)_)EXIT_^1SETER JMP*_!FONER_!ERROR-EXIT_^1**************************************************_^1*****ROUTINE TREATING CNV PARAMETER_******_^1****************************************************_^1CNVR_!NOP_"0_$ENTRY_^1_%RTJ*_!ASTR_€€%VALIDATE CHARACTER_^1_%JMP*_!(CNVR)_$EXIT_^1*****************************************************_^1*****************************************************_^1***** THIS IS THE OPTION BUFFER FOR SPEC_"******_^1**************************************************_^1SPCSKL NUM_"$20,$53,$50,$45,$43,$20_^1_%NUM_"$20,$20,$20,$20,$20,$20,$2C_^1_%NUM_"$30,$2C,$30,$2C,$30,$30,$2C,$30,$30,$2C_^€€1_%NUM_"$30,$30,$2C,$30,$2C,$30,$2C_^1_%NUM_"$30,$30,$30,$2C,$30,$0D_^1*************************************************_^1************************************************_^1***** THIS IS THE ZONE OPTION BUFFER_^1************************************************_^1ZONSKL NUM_"$20,$52,$5A,$4F,$4E,$20_^1_%NUM_"$30,$31,$30,$2C,$31,$36,$30,$2C_^1_%NUM_"$31,$2C,$31,$2C,$30,$2C,$30,$2C_^1€€_%NUM_"$30,$2C,$31,$2C,$30,$0D_^1*****************************************************_^1*****SPEC PARAMETER TABLE_7*****_^1*****************************************************_^1SPECT NUM_"$1A91_$FT1 OPTION_^1_%NUM_"$11,-$2_^1_%NUM_"0_^1_%NUM_"$1A92_(FT2 OPTION_^1_%NUM_"$14,-$2_^1_%NUM_"0_^1SPEC1 NUM_"$1A93_$FT3 OPTION_^1_%NUM_"$17,-$2_^1_%NUM_"0_^1_%NUM_"$32CC_*LVL OPTION_^1_%€€NUM_"$0D,-$1_^1_%ADC_"LVLR_^1_%NUM_"$0674_)AST OPTION_^1_%NUM_"$0F,-$1_^1_%ADC_"ASTR_^1_%NUM_"$364C_*MRL OPTION_^1_%NUM_"$1E,-$3_^1_%ADC_"MRLR_^1_%NUM_"$FFFF_'END_^1_%NUM_"$FFFF_^1***********************************************_^1*** ZONE PARAMETER TABLE_4***_^1*****************************************************_^1ZONT_!NUM_"$3243_,LRC OPTION_^1_%NUM_"$06,-$3_^1_%ADC_"LRCR_^1***_€€]_^1_%NUM_"$5243_'TRC OPTION_^1_%NUM_"$0A,-$3_^1_%ADC_"LRCR_^1***_]_^1_%NUM_"$19EE_,FON OPTION_^1_%NUM_"$0E,-$1_^1_%ADC_"FONR_^1***_]_^1_%NUM_"$4CB4_,SET OPTION_^1_%NUM_"$10,-$1_^1_%ADC_"SETRT_^1***_]_^1_%NUM_"$0DD6_'CNV OPTION_^1_%NUM_"$14,-$1_^1_%ADC_"CNVR_^1***_]_^1_%NUM_"$FFFF_^1_%NUM_"$FFFF_^1*****************************************************_^1ERRTN ADC_"0_^1_%RTJ-_!($F4)€€_#PRINT_^1_%NUM_"$0C00_$ERROR_^1_%ADC_"CONTIN_#MESSAGE_^1_%ADC_"0_)ON TTY_^1_%NUM_"$18FC_^1_%NUM_"2_^1MESAGE ADC_"0_^1_%RTJ+_!DIDDLE_^1_%RTJ-_!($F4)_"OUTPUT_^1_%NUM_"$0C00_^1_%ADC_"CONTIN_#DRAFT_^1_%ADC_"0_)STATEMENT_^1_%NUM_"$18FC_$ON TTY_^1_%NUM_"36_^1DRFTER ADC_"INBUF1_^1_%RTJ*_!(MESAGE+2)_^1_%LDA_"=XINBUF1+36_^1LOCFST STA+_!INDR01_^1_%LDA_"=XINBUF1+42_^1LOCSEC STA+_!INDR02_^1_%€€ENQ_"-6_^1LOCTHR RTJ+_!MOVERT_^1_%RTJ-_!($F4)_^1_%NUM_"$0400_^1_%ADC_"CONTIN_^1_%ADC_"0_^1_%NUM_"$18FC_^1_%NUM_"1_^1_%ADC_"CRLF_^1_%RTJ_"DIDDLE_^1_%ENQ_"35_^1BLNKIT LDA_"=N$2020_#CLEAR UP TO IDENT. NUMBER WITH BLANKS_^1_%STA*_!(DRFTER),Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1_%RTJ-_!($F4)_#ACCEPT_^1_%NUM_"$0800_$CORRECTED_^1_%ADC_"CONTIN_#DRAFT_^1_%ADC_"0_)INSTRUCTION_^1_%NUM_"$18€€FD_$AND STORE_^1_%NUM_"42_)IN INBUF1_^1NXTTRY ADC_"INBUF1_^1_%RTJ_"DIDDLE_^1_%ENQ_"35_^1LOOPCH LDA*_!(NXTTRY),Q_^1_%SAM_"STRBLK-*-1 ILLEGAL CHARACTER.STORE BLANKS INSTEAD_^1_%ALS_"8_*CHECK LOWER CHARACTER_^1_%SAP_"EVENN-*-1_!BOTH CHARACTERS ARE LEGAL_^1_%AND_"=N$20FF_#REPLACE THE $FF BY BLANK CHARACTER_^1EVENN ALS_"8_*CORRECT THE POSITION OF THE CHARACTERS_^1_%JMP*_!AVANTE_$AND G€€O TO STORE THEM AT THEIR PLACE_^1STRBLK LDA*_!BLNKIT+1_"STORE BLANKS INSTEAD_^1AVANTE STA*_!(NXTTRY),Q_^1_%INQ_"-1_)MODIFY POINTER FOR NEXT LOCATION_^1_%SQM_"1_*WE ARE THROUGH_^1_%JMP*_!LOOPCH_$NEXT LOCATION_^1_%LDA*_!LOCSEC-1_"STORE BACK THE IDENTIFICATION NUMBER_^1_%STA*_!(LOCFST+1)_^1_%LDA*_!LOCFST-1_^1_%STA*_!(LOCSEC+1)_^1_%ENQ_"-6_^1_%RTJ*_!(LOCTHR+1)_^1_%JMP_"TRA1_'GO TO REPR€€OCESS THE STATEMENT_^1***_]_^1***_!ROUTINE CHECKING AND IF NEED RESTORES CORRELATION_^1***_!ROUTINE CHECKING AND IF NEED RESTORES CORRELATION_^1LEVELR ADC_"0_^1_%LDA*_!RLEVEL_$CHECK FOR RECORD LEVEL_^1_%SAZ_"NORLEV-*-1 MIT IS NOT RECORD LEVEL_^1_%LDA*_!CORZ+1_$CHECK WHETHER WE JUST SHIFTED FROM 9 TO A_^1_%INA_"-$41_^1_%SAN_"CHK1CZ-*-1 NO_^1_%ENA_"$39_(SHIFT BACK FROM A TO 9_^1_%J€€MP*_!CHK2CZ_^1CHK1CZ INA_"$40_(RESTORE THE CODE REDUCED BY ONE_^1CHK2CZ STA*_!CORZ+1_^1NORLEV JMP*_!(LEVELR)_"RETURN_^1CRLF_!NUM_"$0D0A_%CARRIAGE RETURN - LINE FEED_^1PHS_"NUM_"$31,$36_^1DAL_"NUM_"$20,$44,$41,$54,$41,$20,$20_^1_%BZS_"ACCUM(1),MODE(1),SIGN(1),SWS(1),RSW(1)_^1_%BSS_"INLEN_^1RLEVEL ADC_"0_^1PHAZ_!NUM_"$31_^1SAVIT ADC_"0_^1VALSW NUM_"00_^1CORZ_!NUM_"$44,$30_^1VALZ_!N€€UM_"$2C,$30_^1CORL_!NUM_"$2C,$30,$30,$0D_^1*_!TREATING DATA STATEMENTS ROUTINE_^1DATA_!ADC_"0_^1_%CLR_"A_^1_%STA*_!(DAT62+1)_^1DAT303 STA*_!RLEVEL_^1DAT1_!LDA_"=XDAL_%MOVE THE WORD "DATA" IN NUBUF_^1DAT11 STA+_!INDR01_^1DAT12 LDA_"=XNUBUF_^1DAT13 STA+_!INDR02_^1_%ENQ_"-6_^1DAT14 RTJ+_!MOVERT_^1_%ENA_"$2C_(SET COMMA IN NUBUF_^1_%STA_"NUBUF+8_^1_%STA_"NUBUF+10_^1DAT22 RTJ+_!SKCH€€BL_$SKIP PAST OF CODE IN UNPACK_^1_%LDA*_!(DAT32+1),I CHECK LEVEL_^1_%INA_"-$3A_'CHECK FOR NUMBER UP TO 9_^1_%SAM_"1_^1_%JMP*_!DAT4_'MUST BE R OR W_^1DAT32 LDA+_!UNPACK,I_^1_%STA*_!(DAT522+1) SET LEVEL VALUE_^1DAT332 STA*_!RSW_^1COMPRT STA+_!TEMLVL_^1DAT333 LDA*_!PHS_^1_%STA*_!(DAT511+1)_^1DAT334 LDA*_!PHS+1_^1_%STA*_!(DAT533+1)_^1_%JMP*_!DAT7_'GO SET CORRELATION LABELS_^1DAT4_!L€€DA*_!(DAT32+1),I CHECK "R"_^1_%INA_"-$52_^1_%SAZ_"1_^1_%JMP*_!DAT6_'NOT R. GO CHECK FOR W_^1_%ENA_"$31_(SET PHASE TO 16_^1_%STA*_!PHS_^1_%STA*_!RLEVEL_^1_%STA*_!(DAT511+1)_^1_%STA*_!(DAT522+1)_^1_%STA*_!RSW_^1_%INA_"5_^1_%STA*_!PHS+1_^1_%STA*_!(DAT533+1)_^1_%SET_"A_*SET R PHASE FLAG FOR THE COMPAR ROUTINE_^1_%STA*_!(COMPRT+1)_^1_%LDA*_!CORZ_'MOVE THE CORRELATION TO THE SPECIAL BUFF€€ER_^1_%STA*_!CORL+1_^1_%LDA*_!CORZ+1_^1_%STA*_!CORL+2_^1_%RAO*_!CORZ+1_$ADD ONE FOR NEXT USE_^1_%LDA*_!CORZ+1_$CHECK WHETHER WE PASSED $39_^1_%INA_"-$3A_^1_%SAN_"DAT5-*-1_"NO._^1_%ENA_"$41_^1_%STA*_!CORZ+1_$SHIFT FROM 9 TO A_^1DAT5_!RTJ*_!ACCRTN_$GO TO AUXILIARY ROUTINE_^1_%CLR_"A_*SET ACCUM TO ZERO_^1_%STA*_!ACCUM_^1_%STA*_!SAVIT_%CLEAR SAVE IT_^1_%JMP*_!DAT8_'GO CHECK FOR DATA NA€€ME_^1ACCRTN ADC_"0_^1_%LDA*_!ACCUM_%ADD LAST RECORD LENGTH TO ACCUM_^1_%ADD*_!SAVIT_%TO COMPLETE LENGTH_^1_%STA*_!ACCUM_^1_%RTJ+_!COLR_'COMPARE LAST RECORD LENGTH TO LARGEST_^1*_!COMPARE AND SAVE LARGEST LENGTH_^1_%JMP*_!(ACCRTN)_"EXIT_^1DAT6_!INA_"-5_)CHECK FOR W_^1_%SAZ_"DAT62-*-1_!SHOULD BE W_^1_%RTJ*_!(LEVERR+1) CHECK FIRST CORRELATION_^1DAT61 JMP+_!ER3_(ERROR_^1DAT62 RAO+_€€!WSW_(SET W LEVEL SWITCH_^1_%ENA_"$30_(SET PHASE TO 04_^1_%STA*_!PHS_^1DAT511 STA+_!NUBUF+6_^1_%INA_"1_^1DAT522 STA+_!NUBUF+9_#AND LEVEL 1_^1_%STA*_!RSW_^1_%STA*_!(COMPRT+1)_^1_%INA_"3_*MAKE IT $34_^1_%STA*_!PHS+1_^1DAT533 STA+_!NUBUF+7_^1DAT63 LDA+_!SWS_(CHECK FOR FIRST W STATEMENT_^1_%SAZ_"1_^1_%JMP*_!DAT7_^1_%RAO*_!(DAT63+1)_^1_%RTJ*_!ACCRTN_$ADD AND SAVE ACCUM._^1DAT64 LDA*_€€!DLA_(ADD 40 TO LONGEST LENGTH_^1_%SAZ_"DAT64A_'SKIP IF ACCUM R-LEVEL LENGTH EQ. 0_^1DAT64B LDQ+_!FLAG29 IS 929 R-LEVEL FLAG SET_^1_%SQZ_"DAT64A-1_$NO-SKIP_^1_%CLR_"Q_,CLEAR FLAG_^1_%STQ*_!(DAT64B+1)_^1_%INA_"12_+ADD EXTRA 12 CHARS. TO LENGTH_^1_%JMP*_!DAT64A_^1_%INA_"80_)ADD AN EXTRA 80 CHARACTERS TO LENGTH_^1DAT64A STA*_!DLA_^1DAT65 STA+_!ACCUM_%SET ACCUMULATOR TO LONGEST LENGTH€€_^1_%CLR_"A_^1_%STA*_!SAVIT_^1_%LDQ*_!(DAT65+1)_^1_%LRS_"1_^1_%SAP_"1_^1_%RAO*_!(DAT65+1)_!YES. ADD ONE TO ACCUMULATOR_^1_%LDA*_!(DAT65+1)_!SAVE INPUT LENGTH_^1DAT66 STA+_!INLEN_^1DAT7_!ENA_"$30_^1_%STA*_!CORL+1_^1_%STA*_!CORL+2_^1DAT8_!RTJ+_!SKCHCM_$SKIP LEADING COMMA_^1DAT81 RTJ_"GETACH_$GET A CHARACTER_^1_%INA_"-$40_'CHECK ALPHABETIC_^1_%SAP_"DAT9-*-2_^1_%RTJ*_!(LEVERR+1) CHE€€CK FIRST CORRELATION_^1DATER4 JMP+_!ER4_(ERROR_^1*_!MOVE DATA NAME_^1_%ENQ_"11_^1DAT9_!RTJ_"MOVNAM_$MOVE DATA NAME INTO NUBUF_^1_%ENA_"$2C_(SET A COMMA_^1DT111 STA+_!NUBUF,Q_^1_%INQ_"1_^1_%LDA*_!DT111+1_^1_%AAQ_"A_^1_%STA*_!STB_^1_%LDA*_!(DAT32+1),I CHECK FOR COMMA OR PARENTHESIS_^1_%INA_"-$28_'CHECK PARENTHESIS_^1_%SAN_"DATT9-*-1_^1_%CLR_"A_^1_%STA*_!PARFLG_^1_%RTJ*_!PARRTN_^1_%R€€AO-_!I_^1_%RTJ*_!(ADNEXT+1) NEXT CHARACTER MUST BE A COMMA_^1_%INA_"-$2C_^1_%JMP*_!DATT9+1_^1_%JMP*_!DT1_(NEXT PARAM_^1DATT9 INA_"-4_)CHECK COMMA_^1_%SAZ_"DT1-*-1_^1_%RTJ*_!(LEVERR+1) CHECK FIRST CORRELATION_^1DAT91 JMP*_!MISCOM_^1DT1_"ENA_"1_^1DATBB0 RTJ+_!NUMCK_%CHECK NEXT CHARACTER NUMERIC_^1_%SAZ_"NOER41-*-1_^1LEVERR RTJ+_!LEVELR_$CHECK FIRST CORRELATION_^1_%JMP*_!(DATER4+1€€) ERROR_^1NOER41 RAO*_!PARFLG_^1_%RTJ*_!PARRTN_^1_%JMP*_!DATD_'GO TO END NUMERICS_^1PARRTN ADC_"0_^1_%ENA_"0_^1_%STA*_!DTJSAV_^1ADNEXT RTJ+_!BUP_(GET THE FIRST NUMERIC CHARACTERS_^1_%STA*_!SAVJ2_%SAVE THE CHARACTER_^1_%LDA*_!PARFLG_$CHECK FOR STORING OR NOT IN NUBUF_^1_%SAZ_"NOSTOR_$NO._^1_%LDA*_!SAVJ2_%GET AGAIN THE CHARACTER_^1_%STA*_!(STB)_%STORE IN OUTPUT BUFFER_^1_%RAO+_!STB_€€^1NOSTOR LDA*_!SAVJ2_%GET AGAIN THE CHARACTER_^1_%AND_"=N$F_'ELIMINATE THE ASCII BITS_^1_%STA*_!SAVJ1_^1_%LDA*_!DTJSAV_$MULTIPLY THE PREVIOUS RESULT BY 10_^1_%ALS_"3_^1_%ADD*_!DTJSAV_^1_%ADD*_!DTJSAV_^1_%ADD*_!SAVJ1_^1_%STA*_!DTJSAV_^1_%ENA_"1_^1_%RTJ_"NUMCK_%CHECK FOR NUMERIC NEXT CHARACTER_^1_%SAZ_"GRLOOP-*-1 YES IT IS NUMERIC_^1_%LDA*_!PARFLG_^1_%SAN_"2_^1_%LDA*_!DTJSAV_^1_%STA€€*_!SAVE_'STORE THE RESULT WHERE THEY BELONG_^1_%JMP*_!(PARRTN)_"RETURN_^1GRLOOP JMP*_!ADNEXT_$CONTINUE COMPUTING_^1_%BZS_"DLA(1),STB(1)_^1MISCOM LDA_"=XERRC_^1_%STA_"MESAGE_^1_%JMP_"ERRTN_^1ERRC_!ALF_"2,N001_^1WSW_"ADC_"0_^1SAVJ1 ADC_"0_^1DTJSAV ADC_"0_^1SAVJ2 ADC_"0_^1SAVJ3 ADC_"0_^1PARFLG ADC_"0_^1SAVE_!ADC_"0_^1*_!AFTER NUMERICS - NON NUMERICS_^1DATD_!LDA*_!SAVE_^1_%SAZ_"4_*C€€HECK FOR EXISTANCE OF PARENTHESIS_^1_%MUI*_!DTJSAV_$COMPUTE PARENTHSIS AND LENGTH_^1_%STA*_!DTJSAV_^1_%CLR_"A_^1_%STA*_!SAVE_^1_%LDA*_!DTJSAV_^1_%STA_"TEMLGT_$STORE THE LENGTH FOR CHECKING PURPOSES_^1_%RTJ_"COMPAR_$CHECK THE LEVELS IF THIS IS HIGHER_^1_%RTJ*_!(ADNEXT+1)_^1_%INA_"-$20_'CHECK BLANK_^1_%SAN_"1_^1_%JMP*_!DATI_^1_%INA_"-$C_(CHECK COMMA_^1_%SAN_"2_^1_%JMP_"DATL_^1_%INA_"€€-2_)CHECK DECIMAL POINT_^1_%SAZ_"DATD1-*+1_^1_%RTJ*_!(LEVERR+1) CHECK FIRST CORRELATION_^1DATD1 JMP+_!ER3_^1_%RTJ*_!DCOM_'IT WAS DECIMAL. SET COMMA AFTER LENGTH_^1_%ENA_"$31_(SET MODE NUMERIC_^1_%STA*_!(DTI3+1)_^1_%ENA_"-2_)CHECK NEXT TWO CHARACTERS AND MOVE TO NUBUF_^1_%STA*_!CTR_^1DATE_!ENA_"1_^1_%RTJ*_!(DATBB0+1)_^1_%SAZ_"1_^1_%JMP*_!DATF_^1DATE1 RTJ+_!BUP_^1_%STA*_!(STB)_^1_€€%RAO*_!STB_^1_%RAO*_!CTR_^1_%LDA*_!CTR_^1_%SAZ_"1_^1_%JMP*_!DATE_'GO TO MOVE THE SECOND_^1DATF_!RTJ_"(DATE1+1)_!NEXT CHARACTER_^1_%INA_"-$20_'CHECK SPACE_^1_%SAN_"3_^1DATG_!ENA_"$30_(YES, SET SIGN TO +_^1_%STA*_!(DATH1+1)_^1_%JMP*_!DATI22_^1_%INA_"-$C_(CHECK COMMA_^1_%SAZ_"DT3-*-1_^1_%RTJ*_!(LEVERR+1) CHECK FIRST CORRELATION_^1_%JMP*_!MISCOM_^1DT3_"RTJ*_!(DATE1+1)_^1_%INA_"-$22_'C€€HECK QUOTE_^1_%SAZ_"1_^1_%JMP*_!DATG_^1DAT123 LDA+_!WSW_(CHECK LEVEL W_^1_%SAZ_"1_^1_%JMP*_!QT1_^1_%LDA*_!STB_(GET ADDRESS OF PARAMETER_^1_%INA_"-2_)BUFFER AND BACK UP TO GET_^1_%STA*_!STBBB_%THE NUMBER OF CHARACTERS_^1_%LDA_"(STBBB)_^1_%ALS_"15_^1_%SAP_"QT1-*-1_^1_%RTJ*_!(LEVERR+1) CHECK FIRST CORRELATION_^1_%LDA_"INBUF1+38_#MOVE THE SEQUENCE NUMBER_^1_%STA*_!ER7+1_^1_%LDA_"INBUF€€1+39_^1_%STA*_!ER7+2_^1_%LDA_"=XER7_^1_%STA_"MESTTY_^1_%RTJ_"ER999_$SEND THE MESSAGE AND CONTINUE_^1QT1_"RTJ*_!(DATE1+1)_^1_%INA_"-$2D_#CHECK FOR MINUS SIGN_^1_%SAN_"DATH-*-1 PUT PLUS SIGN_^1_%ENA_"$31_"PUT MINUS SIGN_^1_%JMP*_!DATH1_^1DATH_!ENA_"$30_(YES, SET SIGN +_^1DATH1 STA+_!SIGN_^1_%JMP*_!DATCOM_^1_%BZS_"CTR(1),SVIREG(1)_^1_%BZS_"STBBB(1)_^1ER7_"ALF_"7,**_!** W003_^1DATCO€€M LDA-_!I_^1_%INA_"-1_^1_%STA*_!SVIREG_$SAVEI_^1_%RTJ*_!(DATE1+1)_!GET A CHARACTER_^1_%INA_"-$0D_'CHECK END OF RECORD FOR SECURITY PURPOSES_^1_%SAN_"1_^1_%JMP*_!DATL-2_$RETURN_^1_%INA_"-$15_'CHECK QUOTE_^1_%SAN_"1_*NO_^1_%JMP*_!RSTRI_^1_%INA_"-$A_(CHECK COMMA_^1_%SAZ_"1_*YES_^1_%JMP*_!DATCOM+3_^1_%ENA_"$5F_(REPLACE COMMA BY CANCEL CHARACTER_^1DATH2 STA+_!UNPACK,I_^1_%JMP*_!DATCOM+€€3_^1RSTRI LDA*_!SVIREG_$RESTORE I REGISTER FOR CONTINUATION_^1_%STA-_!I_^1_%RTJ*_!DATM_'MOVE MODE,SIGN AND ADDRESS INTO NUBUF_^1_%JMP*_!VMOV_'MOVE THE VALUE INTO NUBUF_^1DCOM_!ADC_"0_*SET A COMMA ROUTINE_^1_%ENA_"$2C_^1DATI1 STA_"(STB)_^1DATI2 RAO+_!STB_^1_%JMP*_!(DCOM)_^1DATI_!RTJ*_!DCOM_'PUT A COMMA_^1_%ENA_"$30_(SET MODE TO ALPHA_^1DTI3_!STA+_!MODE_^1_%STA*_!(DATH1+1)_!SET SI€€GN TO +_^1DATI22 CLR_"A_*CLEAR VALUE SWITCH_^1DATI23 STA+_!VALSW_^1_%RTJ*_!DATM_^1DATJ1 LDA*_!(DATI23+1) CHECK VALUE SWITCH_^1_%SAZ_"SKPP30-*-1_^1_%ENA_"$31_^1_%JMP*_!JMPSTA_^1SKPP30 ENA_"$30_^1JMPSTA STA_"VALZ+1_^1DA4_"LDA_"=XVALZ_$MOVE VALUE_^1DA44_!STA+_!INDR01_^1_%LDA*_!(DATI2+1)_^1DA45_!STA+_!INDR02_^1_%ENQ_"-6_^1_%RTJ*_!(DATYY+1)_!MOVE TO NUBUF_^1_%JMP_"(DATA)_$RETURN TO CA€€LLER_^1DATL_!RTJ*_!DCOM_'SET COMMA_^1_%ENA_"$30_(SET MODE TO ALP-NUM_^1DATL1 STA*_!(DTI3+1)_"MODE_^1_%JMP_"DT3_(GO CHECK FOR A VALUE_^1DATM_!ADC_"0_*STORE ADDRESS,BYTE,MODE,SIGN ROUTINE_^1_%RTJ*_!DCOM_'SET A COMMA_^1_%RTJ_"BYAD_'GO TO GET BYTE AND ADDRESS_^1_%LDA*_!(DTI3+1)_^1_%STA_"(STB)_^1_%RAO*_!(DATI2+1)_^1_%RTJ*_!DCOM_'SET COMMA_^1_%LDA*_!(DATH1+1)_^1_%STA_"(STB)_^1_%RAO*_!(D€€ATI2+1)_^1_%RTJ*_!DCOM_'PUT A COMMA_^1_%RTJ*_!DATY_^1_%RTJ*_!DCOM_'SET A COMMA_^1_%JMP*_!(DATM)_^1DATY_!ADC_"0_*MOVE ADDRESS TO NUBUF ROUTINE_^1_%LDA_"=XDPUT_$MOVE DINP INTO NUBUF_^1_%STA*_!(DA44+1)_^1_%LDA*_!(DATI2+1)_^1_%STA*_!(DA45+1)_^1_%ENQ_"-9_^1DATYY RTJ+_!MOVERT_^1_%LDA*_!(DA45+1)_"RESTORE THE NUBUF POINTER_^1_%STA*_!(DATI2+1)_^1_%JMP*_!(DATY)_$RETURN_^1VMOV_!LDA+_!DTJSAV_€€$MOVE THE VALUE TO NUBUF_^1_%TCA_"Q_^1VMO5_!STQ+_!VACT_^1_%LDA*_!(DTI3+1)_"CHECK NUMERIC CODE_^1_%INA_"-$31_^1_%SAZ_"1_^1_%JMP*_!VMO1_^1_%RTJ*_!(VMO4+1)_"CHECK FOR SIGN_^1_%INA_"-$2B_^1_%SAN_"VMO7-*-1_"IT IS NOT PLUS SIGN_^1_%JMP*_!VMO2-2_$IT IS PLUS SIGN_^1VMO7_!INA_"-2_"CHECK FOR MINUS SIGN_^1_%SAZ_"VMO2-*-3_"IT IS MINUS SIGN_^1_%LDA-_!I_#MOVE BACK ONE LOCATION THE POINTER_^1_%IN€€A_"-1_^1_%STA-_!I_^1_%JMP*_!VMO2_^1_%NOP_"0_+PAD_^1_%NOP_"0_*PAD_^1VMO2_!LDA*_!(DTI3+1)_"CHECK FOR NUMERIC MODE_^1_%INA_"-$31_^1_%SAN_"VMO1-*-1_^1VM03_!ENA_"1_^1_%RTJ_"NUMCK_%CHECK FOR NUMERIC_^1_%SAN_"1_^1_%JMP*_!VMO1_^1VMO4_!RTJ+_!BUP_$CHECK THE NATURE OF ERROR_^1_%INA_"-$22_"CHECK FOR LAST QUOTE_^1_%SAZ_"FLSNUM-*-1_"INCORRECT NUMBER OF CHARACTERS_^1_%JMP_"ER4_"ERROR. - NON NUMER€€IC IN NUMERIC FIELD_^1FLSNUM RTJ*_!ERW002_!SEND ERROR MESSAGE AND CONTINUE_^1_%JMP*_!DATY1_^1VMO1_!RTJ*_!(VMO4+1)_"GET THE CHARACTER_^1_%STA_"(STB)_^1_%INA_"-$22_'CHECK FOR SECOND QUOTE_^1_%SAN_"DATY22-*-1 NO. IT IS O.K._^1_%RTJ*_!ERW002_"SEND ERROR MESSAGE AND CONTINUE_^1_%ENA_"$20_^1_%STA_"(STB)_^1_%JMP*_!DATY1_^1DATY22 RAO*_!(VMO5+1)_$COUNT ONE CHARACTER_^1_%RAO*_!(DATI2+1)_^1_€€%LDA*_!(VMO5+1)_#CHECK FOR END_^1_%SAZ_"DATY44-*-1_^1_%JMP*_!VMO2_'NEXT CHARACTER_^1DATY44 RTJ*_!(VMO4+1)_^1_%INA_"-$22_'THIS CHARACTER MUST BE A QUOTE_^1_%SAZ_"DATY1-*-1_"O.K._!END OF LITERAL_^1_%RTJ*_!ERW002_^1DATY1 RAO*_!(DATI23+1)_^1_%JMP*_!DATJ1_^1DPUT_!NUM_"$44,$49,$4E,$50,$2B_^1_%BSS_"ADR(4),SSZ(1),ACT(1),REI(1)_^1MESTY1 ALF_"7,**_"** W001_^1MESTY2 ALF_"7,**_"** W002_^1*_€€!ROUTINE PREPARING MESSAGE W002_^1ERW002 ADC_"0_^1DATY11 LDA+_!INBUF1+38_"MOVE FIRST THE SEQUENCE NUMBER_^1_%STA*_!MESTY2+1_^1DATY12 LDA+_!INBUF1+39_^1_%STA*_!MESTY2+2_^1_%LDA_"=XMESTY2_^1_%STA*_!MESTTY_^1_%RTJ*_!ER999_^1_%JMP*_!(ERW002)_^1*_!ERROR MESSAGE ROUTINE_^1ER999 ADC_"0_^1_%RTJ-_!($F4)_^1_%NUM_"$0C00_^1_%ADC_"CONTIN_^1_%ADC_"0_^1_%NUM_"$18FC_^1_%NUM_"7_^1MESTTY ADC_"0_^1_€€%RTJ_"DIDDLE_^1_%JMP*_!(ER999)_#RETURN_^1_%BZS_"PRVLVL(1),CURLVL(1),TEMLVL(1),TEMLGT(1)_^1_%BZS_"TEMHIG(1),TEMLOA(1),TEMLOB(1),TEMHIB(1)_^1COMPAR ADC_"0_*ROUTINE COMPARING THE NUMBER OF_^1*_!CHARACTERS IN LEVEL GROUPS_^1_%LDA*_!CURLVL_$TRANSFER PREVIOUS LEVEL_^1_%STA*_!PRVLVL_^1_%LDA*_!TEMLVL IS IT AN R-LEVEL?_!CCN1700P0 51-001_^1_%SAP_"1 NO SKIP_3CCN1700P0 51-001_^1_%JMP*_!(COMPAR€€) EXIT-RLEVEL_%CCN1700P0 51-001_^1_%INA_"-$7F LAST DATA STMT_(CCN1700P0 51-001_^1_%SAN_"NOTHAT NO-SKIP_,CCN1700P0 51-001_^1_%JMP*_!WPOINT YES_/CCN1700P0 51-001_^1NOTHAT INA_"$4F_(RESTORE THE NUMBER BY REMOVING ASCII BITS_^1_%STA*_!CURLVL_^1_%LDA*_!PRVLVL_$CHECK NOW WHERE WE STAND_^1_%SAZ_"WFST-1 PREVIOUS LEVEL-R_!CCN1700P0 51-001_^1_%LDA*_!CURLVL IS IT LEVEL-W_#CCN1700P0 51-001€€_^1_%INA_"-1_9CCN1700P0 51-001_^1_%SAN_"WFST NO-SKIP_-CCN1700P0 51-001_^1_%LDA*_!(WPOINT+1) IS IT FIRST W-LEVEL CCN1700P0 51-001_^1_%SAN_"WFST NO-SKIP_)CCN1700P0 51-001_^1_%STA_"WR01+1 YES-CLEAR_$CCN1700P0 51-001_^1_%STA_"WR01+2 2-LEVEL AREAS CCN1700P0 51-001_^1_%JMP*_!EQUONE_0CCN1700P0 51-001_^1WFST_!LDA*_!PRVLVL COMPARE LEVELS CCN1700P0 51-001_^1_%SUB*_!CURLVL_.CCN1700P0 €€51-001_^1_%SAZ_"EQUONE LEVEL W_%CCN1700P0 51-001_^1_%SAM_"1_^1_%JMP*_!UPSLVL_$IT IS HIGHER LEVEL_^1_%JMP*_!DOWNSL_!IT IS OF LOWER LEVEL_^1EQUONE LDA*_!CURLVL_'CCN1700P0 51-001_^1_%INA_"-1_^1_%MUI_"=N2_^1_%TRA_"Q_^1_%LDA*_!(DOWN01+1)_^1_%STA_"RNUM1,Q_^1_%LDA*_!(DOWN02+1)_^1_%STA_"RNUM1+1,Q_^1_%LDA*_!CURLVL_^1_%INA_"-1_^1_%SAN_"3_^1_%LDA*_!TEMLGT_^1_%STA*_!WR01_^1_%JMP*_!(COMPAR)_^1€€_%LDA*_!WR01,Q_^1_%ADD*_!WR01-1,Q_^1_%STA*_!WR01-1,Q_^1_%LDA*_!TEMLGT_$STORE THE ACTUAL LENGTH_^1_%STA*_!WR01,Q_^1_%JMP*_!(COMPAR)_"RETURN_^1DOWNSL LDA*_!CURLVL_^1_%INA_"-1_^1_%MUI_"=N2_^1_%TRA_"Q_^1_%LDA*_!TEMLGT_$STORE THE LENGTH IN THE NEW_^1_%STA*_!WR01,Q_$LEVEL LOCATION B_^1DOWN01 LDA_"INBUF1+38_!SAVE THE SEQUENCE NUMBER OF THIS LEVEL_^1_%STA*_!RNUM1,Q_^1DOWN02 LDA_"INBUF1+39_€€^1_%STA*_!RNUM1+1,Q_^1_%JMP*_!(COMPAR)_"RETURN_^1UPSLVL LDA*_!CURLVL_$COMPUTE THE ADDRESS OF CURRENT_^1_%INA_"-1_)HIGHER LEVEL_^1_%MUI_"=N2_^1WPOINT ADD_"=XWR01_(CCN1700P0 51-001_^1_%STA*_!TEMHIG_^1_%LDA*_!PRVLVL_$COMPUTE THE ADDRESS OF THE_^1_%INA_"-1_)LATEST LOW LEVEL_^1_%MUI_"=N2_^1_%ADD_"=XWR01_^1_%STA*_!TEMLOB_^1_%INA_"-1_^1_%STA*_!TEMLOA_^1_%INA_"-1_^1_%STA*_!TEMHIB_^1_%LDA*_€€!(DOWN01+1)_#SAVE THE SEQUENCE NUMBER OF THIS LEVEL_^1_%STA*_!TEMSEQ_^1_%LDA*_!(DOWN02+1)_^1_%STA*_!TEMSEQ+1_^1*_"START COMPUTING AND COMPARING_^1COMP00 LDA*_!TEMHIB_^1_%INA_"2_^1_%SUB*_!TEMHIG_^1_%SAZ_"1_^1_%JMP*_!COMP20_^1EQUTWO LDQ*_!TEMHIG_!HOUSE KEEPING IN CURRENT_^1_%INQ_"-2_!HIGHER LEVEL_^1_%LDA-_!1,Q_!COMBINE THE PREVIOUS LENGTHS_^1_%ADD-_!2,Q_^1_%STA-_!1,Q_^1_%LDA*_!TEMLGT€€_^1_%STA-_!2,Q_^1_%TRQ_"A_^1_%SUB_"=XWR01_$SET CORRECT POINTER FOR SEQUENCE NUMBER_^1_%INA_"2_^1_%TRA_"Q_^1_%LDA*_!TEMSEQ_#MOVE THE NEW GROUP RECORD SEQUENCE_^1_%STA*_!RNUM1,Q_^1_%LDA*_!TEMSEQ+1_^1_%STA*_!RNUM1+1,Q_^1_%JMP*_!(COMPAR)_"RETURN_^1COMP20 LDA*_!(TEMLOB)_^1_%ADD*_!(TEMLOA)_^1_%SUB*_!(TEMHIB)_"COMPARE_^1_%SAN_"1_^1_%JMP*_!COMP30_^1_%LDA*_!TEMHIB_^1_%SUB_"=XWR01_!FIND THE €€RECORD SEQUENCE OF THE GROUP_^1_%TRA_"Q_^1_%LDA*_!RNUM1,Q_"GET THE SEQUENCE NUMBERS_^1_%STA_"MESTY1+1_^1_%LDA*_!RNUM1+1,Q_"AND MOVE IT TO THE MESSAGE_^1_%STA_"MESTY1+2_^1_%LDA_"=XMESTY1_^1_%STA_"MESTTY_^1_%RTJ_"ER999_%SEND MESSAGE AND CONTINUE_^1COMP30 CLR_"A_*CLEAR THE COMPUTED LOCATIONS_^1_%STA_"(TEMLOA)_^1_%STA_"(TEMLOB)_^1_%LDA*_!(COMP31+1)_^1_%INA_"-2_^1COMP31 STA+_!TEMLOA_^1_€€%LDA*_!(COMP32+1)_^1_%INA_"-2_^1COMP32 STA+_!TEMLOB_^1_%LDA*_!(COMP33+1)_"MOVE THE POINTERS TO THE NEW LEVELS_^1_%INA_"-2_^1COMP33 STA+_!TEMHIB_^1_%JMP*_!COMP00_$COMPARE THE NEXT LEVEL_^1WR01A NUM_"0_^1WR01_!NUM_"0_^1WR2A_!NUM_"0_^1WR2B_!NUM_"0_^1WR3A_!NUM_"0_^1WR3B_!NUM_"0_^1WR4A_!NUM_"0_^1WR4B_!NUM_"0_^1WR5A_!NUM_"0_^1WR5B_!NUM_"0_^1WR6A_!NUM_"0_^1WR6B_!NUM_"0_^1WR7A_!NUM_"0_^1W€€R7B_!NUM_"0_^1WR8A_!NUM_"0_^1WR8B_!NUM_"0_^1WR9A_!NUM_"0_^1WR9B_!NUM_"0_*%_^1* THE FOLLOWING LOCATIONS CONTAIN THE SEQUENCE NUMBER_^1* OF THE RECORDS OF VARIOUS LEVELS_^1RNUM1 NUM_"0_^1_%NUM_"0_^1RNUM2 NUM_"0_^1_%NUM_"0_^1RNUM3 NUM_"0_^1_%NUM_"0_^1RNUM4 NUM_"0_^1_%NUM_"0_^1RNUM5 NUM_"0_^1_%NUM_"0_^1RNUM6 NUM_"0_^1_%NUM_"0_^1RNUM7 NUM_"0_^1_%NUM_"0_^1RNUM8 NUM_"0_^1_%NUM_"€€0_^1RNUM9 NUM_"0_^1_%NUM_"0_^1_%BZS_"TEMSEQ(2)_^1***********************************************************************_^1BYAD_!ADC_"0_^1_%ENA_"$30_(SET ADDRESS TO ZEROS_^1_%ENQ_"-4_^1BY1_"STA_"ADR+4,Q_^1_%INQ_"1_^1_%SQZ_"1_^1_%JMP*_!BY1_^1BY11_!LDA+_!PHAZ_'CHECK WHETHER PRESENT LEVEL IS_^1BY12_!SUB+_!RSW_(LESS OR EQUAL TO PREVIOUS ONE_^1_%SAP_"1_^1_%JMP*_!BY8_^1BY13_!LDA+_!ACCUM€€_%YES. ADD SAVIT TO ACCUM_^1BY14_!ADD+_!SAVIT_^1_%STA*_!(BY13+1)_^1_%TRA_"Q_^1BY15_!LDA+_!SWS_(CHECK FOR FIRST WORKING STORAGE_^1_%SAZ_"BY8_^1_%LDA*_!(BY12+1)_^1_%INA_"-$31_'CHECK WHETHER LEVEL IS ONE_^1_%SAN_"BY8_(NO. DO NOT ADJUST LENGTH_^1_%LRS_"1_*DOES LENGTH NEED TO BE ADJUSTED_^1_%SAP_"BY8_(TO BEGING IN TOP OF WORD_^1_%RAO*_!(BY13+1)_"YES. ADD ONE TO MAKE IT EVEN_^1*_!SEE WH€€ETHER CURRENT LENGTH SHOULD BE SAVED_^1BY8_"LDA*_!(BY12+1)_^1_%INA_"-$31_'CHECK FOR LEVEL 1_^1_%SAN_"LTST93-*-1 NO_^1_%LDA*_!(BY15+1)_"YES. CHECK FOR R-LEVEL_^1_%SAN_"LTST93-*-1 NO. IT IS W LEVEL_^1BY16_!LDA+_!DLA_(GET LENGTH OF LONGEST RECORD_^1BY17_!SUB+_!DTJSAV_$CHECK WHETHER THE CURRENT RECORD IS LONGER_^1_%SAP_"LTST93-*-1_^1_%LDA*_!(BY17+1)_"YES. SAVE IT_^1_%STA*_!(BY16+1€€)_^1LTST93 LDA*_!(BY12+1)_"SET PRESENT LEVEL IN PAST LEVEL_^1_%STA*_!(BY11+1)_^1_%LDA*_!(BY17+1)_"PUT DTJSAV IN SAVIT_^1_%STA*_!(BY14+1)_^1_%CLR_"A_^1_%LDQ*_!(BY13+1)_"CHECK FOR STARTING CONVERTING_^1_%LRS_"1_*BINARY CONTENTS OF ACCUM_^1_%SAP_"BY2_(IS THERE REMAINDER?_^1_%ENA_"$31_(YES, SET BYTE TO ONE_^1BY95_!STA_"(STB)_^1BY96_!RAO+_!STB_^1_%ENA_"$2C_(SET COMMA IN NUBUF_^1_%STA_"(€€STB)_^1_%RAO*_!(BY96+1)_^1_%JMP*_!BY4_^1BY2_"ENA_"$30_(NO REMAINDER, SET BYTE ZERO_^1_%STA_"(STB)_^1_%JMP*_!BY96_^1BY4_"STQ+_!SSZ_(SAVE BINARY LENGTH_^1_%LDA_"=XADR+3_#SET ENTRY FOR STORAGE IN ASCII_^1BY41_!STA+_!VACT_^1_%TRQ_"A_^1_%INQ_"-10_^1_%SQP_"1_^1_%JMP*_!BY6_^1BY5_"CLR_"Q_^1_%DVI_"=N10_'DIVIDE BY 10_^1_%STA_"(BY4+1)_^1_%INQ_"$30_(ADD ASCII BITS TO REMAINDER_^1BY51_!STQ_"(VA€€CT)_^1_%LDA*_!(BY41+1)_"DECREMENT STORAGE_^1_%INA_"-1_^1_%STA*_!(BY41+1)_^1_%LDA*_!(BY4+1)_^1_%INA_"-10_^1_%SAM_"BY6_^1_%LDA_"(BY4+1)_^1_%JMP*_!BY5_^1BY6_"LDA*_!(BY4+1)_#ALL DONE, ADD ASCII BITS TO LAST DIGIT_^1_%INA_"$30_^1_%STA_"(VACT)_^1_%JMP*_!(BYAD)_^1_%BSS_"VACT(1)_^1NUMCK ADC_"0_^1_%TCA_"Q_1SET NO. OF CHAR. TO BE CHECKER_^1_%LDA-_!I_^1_%STA*_!(NU1+1)_#SAVE REFERENCE TO UNPA€€CK_^1NU3_"RTJ+_!BUP_(GET A CHARACTER TO BE CHECKED_^1_%INA_"-$30_^1_%SAM_"NU1_^1NUZ_"LDA+_!UNPACK,I_^1_%INA_"-$3A_^1_%SAP_"NU1_^1_%JMP*_!NU2_^1NU1_"LDA+_!REI_(CHARACTER NON NUMERIC_^1_%STA-_!I_0RESET "I"_^1_%ENA_"1_^1_%JMP_"(NUMCK)_*BACK TO CALLER WITH "A" NOT ZERO_^1NU2_"INQ_"1_-ALL CHAR. CHECKED_^1_%SQZ_"*+2_^1_%JMP*_!NU3_-NO,BACK FOR NEXT CHAR._^1_%LDA*_!(NU1+1)_#ALL DONE.RESET €€I REGISTER_^1_%STA-_!I_^1_%CLR_"A_1BACK TO CALLER WITH"A" ZERO_^1_%JMP*_!(NUMCK)_^1**** COMPARE LAST RECORD LENGTH TO LARGEST LENGTH_^1**** FOUND AND SAVE THE LARGEST LENGTH_^1COLR_!ADC_"0_^1COLR1 LDA+_!DLA_(SUBTRACT ACCUMULATOR OF LARGEST LENGTH FOUND_^1_%SUB_"ACCUM_^1_%SAM_"1_(ACCUM LARGER_^1_%JMP*_!(COLR)_^1_%LDA_"ACCUM_#YES, PUT ACCUM IN LARGEST FOUND_^1_%STA*_!(COLR1+1)_^1_%J€€MP*_!(COLR)_^1****_]_^1**_5********_^1BUP_"ADC_"0_^1_%RAO-_!I_^1_%LDA*_!(NUZ+1),I_^1_%JMP*_!(BUP)_^1*_!ROUTINE TREATING THE DOC STATEMENT_^1DOC_"ADC_"0_^1*_!MOVE THE DOC SKELETON TO NUBUF_^1_%LDA_"=XDOCOPT_^1_%STA+_!INDR01_^1DOC11 LDA_"=XNUBUF_^1_%STA+_!INDR02_^1_%ENQ_"-18_^1_%RTJ+_!MOVERT_$GO TO MOVE ROUTINE_^1_%RTJ+_!SKCHBL_^1_%LDA-_!I_^1_%INA_"-1_^1_%STA-_!I_^1DOC1_!RTJ+_!BUP_(€€GET NEXT CHARACTER_^1_%INA_"-$47_'CHECK FOR G_^1_%SAZ_"G_*YES. IT IS G_^1_%INA_"-5_)CHECK FOR L_^1_%SAZ_"L3_)YES. IT IS L_^1_%INA_"-2_)CHECK FOR N_^1_%SAZ_"N_*YES. IT IS N_^1DOC2_!JMP*_!NVALID_$PARAMETER NAME ILLEGAL_^1G_$JMP*_!GAP_(PROCESS GAP PARAMETER_^1N_$JMP_"NOSORT_$PROCESS NOSORT PARAMETER_^1L3_#RTJ*_!(DOC1+1)_"GET 2ND CHARACTER_^1_%INA_"-$45_'CHECK FOR E_^1_%SAZ_"E_^1_%JMP*€€_!NVALID_$NAME IS ILLEGAL_^1E_$RTJ*_!(DOC1+1)_"GET THIRD CHARACTER_^1_%INA_"-$4E_'CHECK FOR N_^1_%SAZ_"N3_)YES IT IS N_^1_%JMP*_!NVALID_$NAME IS ILLEGAL_^1N3_#RTJ*_!(DOC1+1)_"GET 4TH CHARACTER_^1_%INA_"-$47_'CHECK FOR G_^1_%SAZ_"LENG_'MUST BE LENGTH PARAMETER_^1_%INA_"-12_(CHECK FOR S_^1_%SAZ_"S_*YES IT IS S_^1_%JMP*_!NVALID_$NAME IS ILLEGAL_^1LENG_!JMP*_!LENGTH_$PROCESS LENGTH PAR€€AMETER_^1S_$JMP*_!LENSX_%PROCESS LENS PARAMETER_^1NVALID JMP_"ER3_^1*_!RETURN FROM VALID PARAMETER_^1VALID RTJ+_!CHECKI_^1_%SAP_"1_^1_%JMP*_!(DOC)_%END OF BUFFER, RETURN_^1_%RTJ*_!(DOC1+1)_"GET NEXT CHARACTER_^1_%INA_"-$20_'CHECK FOR BLANK (MEANING END)_^1_%SAN_"COMMA1-*-1_^1_%JMP*_!(DOC)_%END OF LIST, RETURN_^1COMMA1 INA_"-$C_(CHECK FOR COMMA_^1_%SAN_"FLAGER_^1_%JMP*_!DOC1_'PROCE€€SS NEXT PARAMETER_^1FLAGER JMP+_!MISCOM_$NO, FLAG ERROR_^1_%JMP*_!DOC1_'PROCESS NEXT PARAMETER_^1***_!SUBROUTINE TO PROCESS GAP PARAMETER_^1GAP_"RTJ*_!(DOC1+1)_"GET NEXT CHARACTER_^1_%INA_"-$41_'CHECK FOR A_^1_%SAZ_"A_^1_%JMP*_!NVALID_$NAME ILLEGAL_^1A_$RTJ*_!(DOC1+1)_"GET THE NEXT CHARACTER_^1_%INA_"-$50_'CHECK FOR P_^1_%SAZ_"P3_^1_%JMP*_!NVALID_^1P3_#ENA_"0_^1_%STA*_!SAVE3_%INITI€€ALIZE_^1_%ENQ_"-2_)SET INDEX_^1GLOOP RTJ*_!(DOC1+1)_"GET NEXT CHARACTER_^1GAPP_!STA+_!NUBUF+7,Q_!STORE IN PARAMETER LIST_^1*_"CHECK FOR NUMERIC VALUE 0 - 9_^1_%INA_"-$3A_'CHECK FOR GREATER THAN 9_^1_%SAP_"VALERR-*-1_^1_%INA_"10_)CHECK FOR LESS THAN ZERO_^1_%SAM_"NONNUM-*-1 YES_^1*_!CHECK FOR NUMERIC CORRECT VALUE_^1_%ADD*_!SAVE3_%ADD TO TOTAL_^1_%SQN_"1_^1_%JMP*_!CHKGAP_$FINISH_€€^1_%STQ*_!SAVEQ_^1_%MUI_"=N10_'DECIMAL SCALE FACTOR_^1_%STA*_!SAVE3_%SAVE TOTAL_^1_%LDQ*_!SAVEQ_^1_%INQ_"1_^1_%JMP*_!GLOOP_%CONTINUE_^1VALERR JMP*_!TOBIG_^1NONNUM INA_"2_*CHECK FOR DECIMAL POINT_^1_%SAZ_"1_^1_%JMP*_!TOBIG_^1_%JMP*_!GLOOP_^1SAVE3 NUM_"0_^1SAVEQ NUM_"0_^1***_!ANY VALUE GREATER THAN 25.5 OR ANY ERROR IN_^1***_!FORMAT WILL BE FLAGGED AND PROCESSED AS 25.5_^1CHKGAP SU€€B_"=N256_%IS GAP GREATER THAN 25.5_^1_%SAP_"TOBIG_^1_%JMP*_!VALID_%PROCESS NEXT PARAMETER_^1TOBIG ENA_"$32_^1_%STA_"NUBUF+5_#STORE 25.5 IN PARAM. LIST_^1_%ENA_"$35_^1_%STA_"NUBUF+6_^1_%STA_"NUBUF+7_^1_%JMP*_!NVALID_$VALUE IS ILLEGAL_^1**_!PROCESS LENS1 AND LENS3_^1**_!CONVERT LENS COORDINATES TO BINARY_^1**_!AND THEN BUILD TABLE OF LENS COORDINATES_^1LENSX RTJ+_!BUP_(PICK UP LENS€€ NO. AND SAVE_^1_%STA*_!LENO_^1_%RTJ+_!CONV_'CONVERT COORDINATES OF LENS_^1_%SAZ_"1_^1_%JMP*_!NVALID_$ERROR IN COORDINATES_^1_%LDA*_!LENSET+1_"NO. SET COOD. IN TABLE_^1_%LDQ*_!LENO_^1_%INQ_"-$31_'CHECK FOR LENS ONE_^1_%SQN_"LENSX2-*-1 NO_^1LENSX1 SUB+_!BIN_^1_%STA*_!LENSET_$YES, PALCE IN TABLE_^1_%JMP*_!VALID_^1LENSX2 INQ_"-2_)CHECK FOR LENS THREE_^1_%SQZ_"1_^1_%JMP*_!NVALID_$ERRO€€R_^1_%ADD*_!(LENSX1+1)_^1_%STA*_!LENSET+2_"YES, PLACE IN TABLE_^1_%JMP*_!VALID_^1LENSET ADC_"0_^1_%NUM_"1325_^1_%ADC_"0_^1LENO_!ADC_"0_^1***_!SUBROUTINE TO PROCESS LENGTH PARAMETER_^1***_!DEFAULT OPTION IS 12, CODE FOR LONGEST DOCUMENT_^1LENGTH RAO-_!I_*MOVE POINTER TO LOCATION OF VALUE_^1_%RAO-_!I_^1_%RTJ*_!(LENSX+1)_!GET VALUE (LENGTH CODE)_^1_%INA_"-$39_'CHECK FOR GREATER THAN 8€€_^1_%SAM_"LESS3-*-1_!NO_^1_%JMP*_!NVALID_$ILLEGAL CODE_^1LESS3 INA_"6_*CHECK FOR LESS THAN 3_^1_%SAP_"DRCODE-*-1_^1_%JMP*_!NVALID_$ILLEGAL CODE_^1DRCODE INA_"1_*CALCULATE DRIVER CODE_^1_%ALS_"1_^1_%INA_"-10_(DOES CODE USES 2 DEC. DIGITS?_^1_%SAM_"SINGLE-*-1 NO._^1_%INA_"$30_(ADD ASCII CONSTANT_^1STORLO STA_"NUBUF+10_"STORE LOW ORDER. STANDARD HIGH ORDER IS 1_^1_%JMP*_!VALID_^1SIN€€GLE INA_"$3A_(RECOVER VALUE AND ASCII CONSTANT_^1_%ENQ_"$30_(HI ORDER IS 0_^1_%STQ_"NUBUF+9_#STORE HI ORDER_^1_%JMP*_!STORLO_^1NOSORT LDA-_!I_^1_%INA_"5_*STEP CHARACTER POINTER_^1_%STA-_!I_^1_%RTJ*_!(LENSX+1)_!GET FIRST DIGIT_^1_%INA_"-$32_'CHECK FOR LESS THAN 2_^1_%SAP_"NO-*-1_$NO._^1_%INA_"2_*CHECK FOR GREATER THAN -1_^1_%SAM_"NO-*-1_$NO._^1_%INA_"$30_(PLACE ASCII CODE_^1_%STA_"N€€UBUF+12_^1_%JMP*_!DIGIT2_^1NO_#JMP*_!NVALID_^1DIGIT2 RTJ*_!(LENSX+1)_!GET 2ND DIGIT_^1_%INA_"-$3A_'CHECK FOR LESS THAN 1_^1_%SAP_"NO2-*-1_^1_%INA_"10_)GREATER THAN -1_^1_%SAM_"NO2-*-1_^1_%INA_"$30_(ADD ASCII CODE_^1_%STA_"NUBUF+13_^1_%ENA_"$46_^1_%STA_"NUBUF+16_"SET NOSORT SELECTED_^1_%JMP*_!SINGLE-1_"GO TO VALID_^1NO2_"ENA_"$30_^1_%STA_"NUBUF+12_^1_%JMP_"NVALID_^1***_!ROUTINE TREA€€TING THE GROUP STATEMENT_^1GROUP ADC_"0_^1_%LDA_"=XGRPSKL_^1GROP1 STA+_!INDR01_$MOVE THE GROUP SKELETON TO NUBUF_^1GRO20 LDA+_!=XNUBUF_^1GROP2 STA+_!INDR02_^1_%ENQ_"-42_^1GROP3 RTJ+_!MOVERT_^1_%RTJ+_!SKCHBL_$SKIP WORD "GROUP" AND TRAILING BLANKS_^1GRO022 RTJ_"CODERT_$CODE THE PARAMETER NAME_^1_%LDA_"=XTABLE5_"INSERT PARAMETERS IN SEARCHING ROUTINES_^1_%STA_"CHATBL+1_^1_%ENA_"2€€_^1_%STA_"WAVE+1_^1_%RTJ_"SEARCH_$FIND THE PARAMETER AND JUMP TO THE PROPER ROUT_^1_%SAP_"2_*IT WAS COMPARE_^1GRO024 JMP+_!ER3_(ERROR IN STATEMENT_^1_%LDA_"INDIRT_$PREPARE FOR INDIRECT ADDRESSING_^1_%STA*_!*+4_^1_%LDA*_!(*+3)_^1_%STA*_!*+2_^1_%RTJ_"(-0)_'GO TO THE PROPER ROUTINE_^1_%RTJ_"SKCHCM_$SKIP IF REMAINED CHARACTERS AND COMMA_^1_%SAP_"NEXTPA-*-1_^1_%RAO_"PGCGR_%ADD ONE TO NR€€ OF GROUP STATEMENT PROCESSED_^1_%JMP*_!(GROUP)_#END.RETURN_^1NEXTPA JMP*_!GRO022_$NEXT PARAMETER_^1***_!ROUTINE TREATING CLL PARAMETER_^1CLL_"ADC_"0_^1_%RAO-_!I_*INCREMENT POINTER FOR THE NEXT CHARACTER_^1_%ENA_"$30_(INDICATE SHUTTER SHOULD BE CLOSED_^1_%STA_"NUBUF+39_"AFTER READ_^1_%JMP*_!(CLL)_%EXIT_^1***_!ROUTINE TREATING FLDSEP PARAMETER_^1FLDS_!ADC_"0_^1_%ENA_"$31_(SET OPTION€€ TO ONE_^1_%STA_"NUBUF+21_^1_%JMP*_!(FLDS)_$RETURN_^1***_!ROUTINE TREATING THE FONTS PARAMETER_^1FONT_!ADC_"0_^1_%ENA_"2_^1_%ADD-_!I_^1_%STA-_!I_^1FONT22 RTJ+_!BUP_(GET CHAR. IMMEDIATELY FOLLOWING FONTS_^1_%STA_"NUBUF+37_"STORE AS MODE SELECTED_^1_%JMP*_!(FONT)_$RETURN_^1***_!ROUTINE TREATING THE LENS PARAMETER_^1LENS_!ADC_"0_^1_%RAO-_!I_^1_%ENA_"1_^1LENS66 RTJ+_!NUMCK_%NEXT CHARAC€€TER MUST BE NUMERIC_^1_%SAZ_"2_^1LENS44 JMP+_!ER4_(ERROR_^1LENS1 RTJ*_!(FONT22+1) GET NEXT CHARACTER LENS NO. 1,2, OR 3_^1_%INA_"-$34_^1_%SAM_"1_^1_%JMP*_!(GRO024+1) ERROR (N003)_^1_%INA_"$34_(RESTORE AND SAVE LENS NUMBER_^1_%STA*_!SALN_^1_%INA_"-$31_'CONVERT TO BINARY MINUS ONE_^1_%TRA_"Q_^1_%LDA*_!LENS93,Q_"GET APPROPRIATE OPTION BUFFER CHAR._^1LENS94 STA_"NUBUF+7_#STORE IN OP€€EN LENS POSITION_^1LENS95 STA_"NUBUF+39_"IN BUFFER_^1*_!NUBUF+39 WILL BE SET TO ZERO IF A CLOSE-LENS PARAMETER_^1*_!APPEARS IN CURRENT STATEMENT_^1LENS92 JMP*_!(LENS)_$RETURN_^1SALN_!ADC_"0_^1LENS93 NUM_"$34_(LENS1_^1_%NUM_"$32_(LENS2_^1_%NUM_"$31_(LENS3_^1*_!ROUTINE TREATING THE LSC PARAMETER_^1LSC_"ADC_"0_^1LSC2_!RTJ+_!CONV_'CONVERT COORDINATE TO BINARY_^1_%SAZ_"1_^1_%JMP*_!(LENS€€44+1) ERROR_^1_%ENA_"1_*SET A FOR LSC_^1LSC3_!RTJ+_!COMP_'AND COMPUTE COORDINATE_^1_%JMP*_!(LSC)_%RETURN_^1*_!ROUTINE TREATING THE RSC PARAMETER_^1RSC_"ADC_"0_^1_%RTJ*_!(LSC2+1)_"CONVERT COORDINATE TO BINARY_^1_%SAZ_"1_^1_%JMP*_!(GRO024+1) ERROR (N003)_^1_%RTJ*_!(LSC3+1)_"COMPUTE COORDINATE_^1_%JMP*_!(RSC)_%RETURN_^1***_!ROUTINE TREATING THE SGROUP PARAMETER_^1SGR63 ADC_"0_^1_%L€€DA-_!I_*ADVANCE THE PRINTER TO REACH THE PARAMETERS_^1_%INA_"4_^1_%STA-_!I_^1_%CLR_"A_*CLEAR NO OF GROUPS_^1_%STA*_!NOFNT_^1FNTS1 RTJ_"GETACH_^1_%SAP_"FN11-*-1_^1_%LDA*_!NOFNT_%CHECK WHETHER WE HAVE AT LEAST ONE GROUP_^1_%SAN_"1_^1_%JMP*_!(GRO024+1) ERROR.NO GROUP MET_^1_%JMP*_!NEXTPA-3_"RETURN.IT WAS END_^1FN11_!INA_"-$7F_'CHECK FOR COMMA_^1_%SAN_"FN13-*-1_^1_%LDA*_!NOFNT_%CHECK€€ WHETHER WE HAD AT LEAST ONE GROUP_^1_%SAN_"1_^1_%JMP*_!(GRO024+1) ERROR.NO GROUP MET_^1_%JMP*_!(SGR63)_#COMMA MET.NEXT PARAMETER_^1FN13_!INA_"$7F_(RESTORE THE CHARACTER_^1_%AND_"=N$F_^1_%STA*_!TMPORR_^1_%SAN_"1_*CHECK LOW LIMIT_^1_%JMP*_!(GRO024+1) ERROR.ILLEGAL CHARACTER_^1_%INA_"-8_)CHECK UPPER LIMIT_^1_%SAM_"1_^1_%JMP*_!(GRO024+1) ERROR.ILLEGAL CHARACTER_^1_%LDA*_!TMPORR_^1_€€%INA_"-1_^1_%ADD*_!TMPORR_^1_%INA_"22_^1_%TRA_"Q_^1_%ENA_"$31_^1_%STA_"(PROC22+1),Q_^1_%RAO*_!NOFNT_^1FN10_!LDA*_!NOFNT_%CHECK END_^1_%INA_"-5_^1_%SAZ_"2_^1_%RAO-_!I_^1_%JMP*_!FNTS1_^1_%JMP*_!(SGR63)_#RETURN_^1NOFNT ADC_"0_^1TMPORR ADC_"0_^1*_!GROUP STATEMENT TABLE_^1TABLE5 NUM_"$0D8C_%CLL CODE_^1_%ADC_"CLL_(ADDRESS OF ROUTINE_^1_%NUM_"$30AE_%LENS CODE_^1_%ADC_"LENS_^1_%NUM_"$3263€€_%LSC CODE_^1_%ADC_"LSC_^1_%NUM_"$4A63_%RSC CODE_^1_%ADC_"RSC_^1_%NUM_"$1984_%FLDSEP CODE_^1_%ADC_"FLDS_^1_%NUM_"$19EE_%FONTS CODE_^1_%ADC_"FONT_^1_%NUM_"$4CF2_%SGROUP CODE_^1_%ADC_"SGR63_^1_%NUM_"$FFFF_%NEGATIVE FIELD FOR ERROR CODE_^1_%NUM_"$FFFF_^1*_!SKELETON OF GROUP STATEMENT_^1GRPSKL NUM_"$20,$47,$52,$4F,$55,$50,$20,$30,$2C,$30,$30,$30_^1_%NUM_"$2C,$30,$30,$30,$2C,$30,$30,$30€€,$2C,$30_^1_%NUM_"$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30_^1_%NUM_"$2C,$30,$2C,$30,$2C,$30,$20,$0D_^1***_!END GROUP SKELETON_^1DTA_"ALF_"8,_%DATA_!W,_^1LITERL ALF_"7,QUOTE,2,"Q "_^1_%ALF_"7,ZERO,2.0,"00"_^1_%ALF_"7,ONE,2.0,"01"_^1_%ALF_"7,REJECT,2,"@ "_^1_%ALF_"7,SPACE,2," "_^1LIT12 ADC_"0_^1SQSV_!ADC_"0_^1SEVCT ADC_"0_^1*_!ROUTINE TREATING THE PROCED STATEMENT_^1PROCED €€ADC_"0_^1****_]_^1**** THIS ROUTINE GENERATES DATA TABLES FOR LITERALS_^1_%CLR_"Q_^1_%STQ-_!I_^1_%STQ*_!SQSV_^1_%ENA_"-5_#SET COUNTER_^1_%STA*_!LIT12_#TO GENERATE 5 LITERALS_^1_%ENQ_"39_^1MVPRCD LDA*_!(UNPK1+1),Q MOVE_^1BLD0_!STA_"NUBUF+100,Q PROCED_^1_%INQ_"-1_(STATEMENT_^1_%SQM_"1 HOLD_^1_%JMP*_!MVPRCD_'AREA_^1_%RTJ*_!BLDLIT_#STORE 1ST IN UNPACK_^1BLD1_!RTJ+_!DATA_^1_%ENA_"$22_€€#THIS OVER LAYS Q_^1_%STA_"NUBUF+36_^1_%LDA_"=N$2222_^1_%STA_"INBUF1+12_^1BLD2_!RTJ+_!PACK_^1_%JMP*_!BLD4_^1BLD3_!RTJ*_!BLDLIT_^1_%RTJ_"(BLD1+1)_#GO TO DATA ROUTINE_^1_%RTJ*_!(BLD2+1)_#PACK DATA_^1BLD4_!LDA_"SECTOR_^1_%STA*_!SECT_^1_%RTJ+_!EXEC+6_(WRITE A LITERAL STATMT_^1_%NUM_"$C00_^1_%NUM_"$18FA_^1_%NUM_"$28_^1_%ADC_"INBUF1_^1SECT_!NUM_"0_^1_%RAO_"SECTOR_^1_%RAO*_!LIT12_#HAVE AL€€L_^1_%LDA*_!LIT12_#LITERAL STATEMENTS_^1_%SAP_"BLD45_!BEEN GENERATED,YES_^1_%CLR_"A_"NO,GET NEXT ONE_^1_%STA-_!I_^1_%JMP*_!BLD3_^1BLD45 ENQ_"-80_!CLEAR_^1_%LDA*_!DTA-2_^1_%STA_"NUBUF+80,Q_"AND_^1_%INQ_"1_#INBUF1_^1_%SQZ_"1_#AREA_^1_%JMP*_!BLD45+2_^1_%ENQ_"39_^1BD45_!LDA*_!(BLD0+1),Q_"MOVE_^1_%STA*_!(UNPK1+1),Q_!PROCED_^1_%INQ_"-1_#STATEMENT_^1_%SQM_"1_$TO_^1_%JMP*_!BD45_#PRINT_^1_€€%JMP*_!PROC10_$AREA_^1*** THIS ROUTINE MOVES LITERAL CONSTANT_^1*** TO UNPACK TO ALLOW DAT ROUTINE PROCESSING_^1BLDLIT ADC_"0_^1_%ENQ_"7_^1UNPK_!LDA_"DTA,Q_^1UNPK1 STA_"INBUF1,Q_^1_%SQZ_"2_^1_%INQ_"-1_^1_%JMP*_!UNPK_^1_%ENA_"-7_^1_%STA*_!SEVCT_^1_%LDQ*_!SQSV_^1BLD5_!LDA_"LITERL,Q_!MOVE_^1BLD54 STA_"INBUF1+8,I_^1_%RAO*_!SEVCT_#CONSTANT TO INPUT_^1_%LDA*_!SEVCT_#BUFFER_^1_%INQ_"1_^€€1_%SAZ_"BLD7_"HAS ALL_^1_%RAO-_!I_!7 WORD CONSTANTS BEEN_^1_%JMP*_!BLD5_#MOVED, NO, GET NEXT WORD_^1BLD7_!STQ*_!SQSV_^1_%ENQ_"-31_^1BLD746 LDA_"=N$2020_^1BLD75 RAO-_!I_!BUMP INDEX_^1_%STA*_!(BLD54+1),I_^1_%INQ_"1_^1_%SQP_"1_#END OF BUFFER,YES_^1_%JMP*_!BLD75_!NO_^1_%STQ-_!I_^1_%ENQ_"3_^1_%JMP*_!BLD9+3_^1BLD8_!LDA*_!(UNPK1+1),Q_#UNPACK INBUF1_^1_%ARS_"8_#GET UPPER CHAR._^1BLD9_!ST€€A+_!UNPACK,I_#STORE IN UNPACK_^1_%RAO-_!I_^1_%LDA*_!(UNPK1+1),Q_#GET LOWER_^1_%AND_"=N$FF_#CHARACTER_^1_%STA*_!(BLD9+1),I_#AND STORE_^1_%RAO-_!I_^1_%INQ_"-39_^1_%SQZ_"2_#STATEMENT BEEN PROCESSED_^1_%INQ_"40_^1_%JMP*_!BLD8_#GET NEXT WORD_^1_%STQ-_!I_#YES_^1_%JMP*_!(BLDLIT)_#RETURN_^1PROC10 ENA_"$7F_^1_%STA_"TEMLVL_$SET FLAG FOR COMPLETING THE CHECKING_^1_%RTJ_"COMPAR_$OF THE LAST W €€GROUP_^1_%LDA_"=XPED_%MOVE THE "PROCED" WORD TO NUBUF_^1PROC11 STA+_!INDR01_^1PROC22 LDA+_!=XNUBUF_^1PROC33 STA+_!INDR02_^1_%ENQ_"-8_^1PROC44 RTJ+_!MOVERT_^1_%RTJ*_!CLADR_%CLEAR TO ASCII ZERO ADR THRU ADR+3_^1PROC55 LDQ_"INLEN_^1_%QRS_"1_^1_%LDA_"=XFOTA_$SET IN BYAD RETURN ADDRESS_^1PROC66 STA+_!BYAD_^1PROC77 JMP+_!BY4_^1FOTA_!LDA_"=XADR_%MOVE LENGTH OF INPUT TO BUFFER_^1_%STA*_!(P€€ROC11+1)_^1_%LDA_"=XNUBUF+8_^1_%STA*_!(PROC33+1)_^1_%ENQ_"-4_^1_%RTJ*_!(PROC44+1)_^1_%ENA_"$2C_(SET COMMA_^1PROPO STA_"NUBUF+12_^1_%RTJ*_!CLADR_%CLEAR AGAIN ADR THRU ADR+3_^1PROC88 LDQ+_!ACCUM_%ADD LAST DATA LENGTH TO ACCUMULATOR_^1_%ADQ+_!SAVIT_^1_%INQ_"2_^1_%STQ*_!(PROC88+1)_^1_%QRS_"1_*DIVIDE BY 2 AND GET NUMBER OF WORDS_^1_%LDA_"=XFOTZ_$SET RETURN ADDRESS IN BYAD_^1_%STA*_!(PR€€OC66+1)_^1_%JMP*_!(PROC77+1) GO TO BYAD TO CONVERT NO OF WORDS_^1FOTZ_!LDA*_!FOTA+1_^1_%STA*_!(PROC11+1)_^1_%LDA_"=XNUBUF+13_^1_%STA_"(PROC33+1)_^1_%ENQ_"-4_^1_%RTJ*_!(PROC44+1)_^1_%ENA_"$0D_(SET END OF BUFFER_^1_%STA_"NUBUF+17_^1_%RAO_"PRO_(SET PROCED SWITCH_^1_%JMP_"(PROCED)_^1CLADR ADC_"0_*CLEAR ADDRESS LOCATION TO ZERO_^1_%ENA_"$30_^1_%ENQ_"-4_^1_%STA_"ADR+4,Q_^1_%INQ_"1_^1_%€€SQZ_"1_^1_%JMP*_!CLADR+3_^1_%JMP*_!(CLADR)_^1***_]_^1PED_"NUM_"$20,$50,$52,$4F,$43,$45,$44,$20,$20_^1PROC_!CLR_"A_"CLEAR PARENTHESIS SWITCH AND COMMAS COUNTER_^1_%STA*_!PARTHE_^1_%STA*_!ACTPAR_^1_%STA-_!I_^1_%ENA_"-8_^1_%STA*_!COCT_'REINITIALIZE THE COMMAS COUNTER_^1*_!MOVE "PROC" INTO BUFFER_^1_%LDA_"=XPOP_^1_%STA*_!(PROC11+1)_^1_%LDA*_!PROC22+1_"FWA OF NUBUF_^1_%INA_"7_^1_%STA*_€€!(PROC33+1)_^1_%ENQ_"-5_^1_%RTJ*_!(PROC44+1) GO TO THE MOVE ROYTINE_^1_%CLR_"A_*INITIALIZE POINTERS AND FLAGS_^1_%STA-_!I_^1_%STA*_!FPRO_^1_%STA*_!FSTCOM_^1_%ENA_"-7_^1_%STA*_!COUN88_^1_%LDA_"=XNUBUF+11_^1PR1_"STA*_!STOB_^1PR2_"RTJ+_!SKCHBL_$SKIP UP TO OP.CODE_^1_%LDA-_!I_^1_%INA_"-1_^1_%STA-_!I_^1_%ENQ_"0_^1PR2A_!LDA_"UNPACK+7,Q_^1_%INA_"-$20_^1_%SAN_"PR2AB_^1PR2AA ENA_"$58_^1_%€€STA_"UNPACK+7,Q_^1_%JMP*_!PR3_^1PR2AB TRQ_"A_^1_%INA_"-5_^1_%SAN_"PR2B_^1_%LDA_"UNPACK+7,Q_^1_%INA_"-$50_^1_%SAZ_"PR3_^1_%INA_"-6_^1_%SAZ_"PR3_^1_%JMP*_!PR2AA_^1PR2B_!INQ_"1_^1_%JMP*_!PR2A_^1PR3_"RAO*_!STOB_'ADVANCE THE POINTERS_^1_%RAO-_!I_^1_%LDA_"UNPACK,I_"GET A CHARACTER_^1_%STA*_!(STOB)_$STORE IT IN THE OUTPUT BUFFER_^1*_"START CHECKING THE CHARACTER_^1_%INA_"-$D_(CHECK FOR E€€ND OF RECORD_^1_%SAN_"1_^1_%JMP*_!PR5_(END OF RECORD MET_^1_%INA_"-$13_'CHECK FOR BLANK_^1_%SAN_"1_^1_%JMP*_!PR4_(IT WAS A BLANK_^1_%INA_"-8_)CHECK FOR OPENING PARENTHESIS_^1_%SAN_"NOOPPA-*-1 IT IS NOT AN OPENING PARENTHESIS_^1_%RAO*_!PARTHE_$COUNT ONE PARENTHESIS MET_^1_%RAO*_!ACTPAR_$SET FLAG WE START PARENTHESIS_^1_%JMP*_!COMMMA_$AND FORCE A COMMA INSTEAD_^1NOOPPA INA_"-1_)CHEC€€K FOR CLOSING PARENTHESIS_^1_%SAN_"NOCLOS-*-1 IT IS NOT A CLOSING PARENTHESIS_^1_%LDA*_!PARTHE_$CHECK FOR THIRD CLOSING PARENTHESIS_^1_%INA_"-3_^1_%SAN_"NOLSTP-*-1 IT IS NOT THE THIRD PARENTHESIS_^1_%JMP*_!PAR17_%IT IS THE LAST.CLOSE THE INSTRUCTION_^1NOLSTP LDA*_!STOB_'MOVE BACK THE OUTPUT POINTER_^1_%INA_"-1_)TO AVOID DOUBLE COMMA_^1_%STA*_!STOB_^1_%JMP*_!PR3_(AND CONTINUE CHEC€€KING FOR COMMA_^1NOCLOS INA_"-3_)CHECK FOR COMMA_^1_%SAN_"1_*IT WAS NOT A COMMA_^1_%JMP*_!AFTPAR_$CHECK FOR COMMA AFTER PARENTHESIS_^1_%RAO*_!COUN88_$COUNT ONE CHARACTER MOVED_^1_%LDA*_!COUN88_$CHECK FOR MORE THAN 6 CHARACTERS_^1_%SAZ_"1_*THE ILLEGAL PARAMETER WILL BE TRUNCATED_^1_%JMP*_!PR3_(IT WAS O.K. - NEXT CHARACTER_^1_%JMP_"ER3_(ILLEGAL PARAMETER.MORE THAN 6 CHARACTERS_^1_%BZ€€S_"PARTHE(1),COCT(1),COUN88(1),CHRSAV(1)_'CCNP030-003_^1_%BZS_"FPRO(1),FSTCOM(1),STOB(1)_3CCNP030-003_^1_%BZS_"ACTPAR(1)_^1AFTPAR LDA*_!ACTPAR_$CHECK WHETHER WE ARE AFTER PARENTHESIS_^1_%SAZ_"COMMA2-*-1 NO._^1_%CLR_"A_^1_%STA*_!ACTPAR_$CLEAR THE PARENTHESIS BEING TREATED FLAG_^1_%JMP*_!COMMMA+2_^1COMMA2 RAO*_!COCT_'COUNT THE ALREADY STORED COMMA_^1_%RAO*_!STOB_'ADVANCE THE POINTER€€_^1COMMMA ENA_"$2C_(FORCE A COMMA_^1_%STA*_!(STOB)_^1_%RAO*_!COCT_'COUNT THE COMMA_^1_%ENA_"-7_)REINITIALIZE FOR A NEW PARAMETER_^1_%STA*_!COUN88_^1_%JMP*_!PR3_(GO TO GET THE FIRST CHARACTER OF PARAMETER_^1PR4_"LDQ*_!FPRO_'CHECK WHETHER THIS IS THE END BLANK_^1_%SQZ_"1_*NO._^1_%JMP*_!PR5_(IT WAS THE END BLANK_^1_%RTJ*_!(PR2+1)_#SKIP TRAILING BLANKS_^1_%SAP_"1_^1_%JMP*_!PR5_(THERE I€€S ONLY OPERATION CODE - ADDRESS FIELD I_^1_%LDA-_!I_*CHECK WHETHER WE REACHED THE SEQUENCE NUMBER_^1_%INA_"-72_^1_%SAM_"1_*NO._^1_%JMP*_!PR5_(YES. CLOSE THE RECORD_^1_%LDA-_!I_*ADAPT THE POINTER_^1_%INA_"-1_^1_%STA-_!I_^1_%RAO*_!FPRO_'SET FIRST BLANK MET FLAG_^1_%JMP*_!COMMMA_$AND REPLACE THE BLANK WITH A COMMA_^1PR5_"EQU_"PR5(*)_^1PR5C_!LDA_"PARTHE_(CHECK FOR INDEXING_^1_%SAZ_"1_^€€1_%JMP*_!PAR17_^1PR6_"LDA+_!UNPACK_^1_%INA_"-$20_^1_%SAN_"1_*YES.WE HAVE TO MOVE IT TO NUBUF_^1_%JMP*_!PR10_^1_%RTJ*_!COMA68_$COMPLETE THE PROPER NUMBER OF COMMAS_^1_%JMP*_!PR7_^1PAR17 RAO*_!COCT_'REDUCE BY ONE THE NUMBER OF COMMAS_^1_%RTJ*_!COMA68_$STORE THE REMAINING COMMAS_^1_%ENA_"$31_(STORE THE INDEXING CODE_^1_%STA*_!(STOB)_^1_%RAO*_!STOB_^1_%LDA*_!(PR6+1)_#CHECK FOR LABEL_^€€1_%INA_"-$20_^1_%SAZ_"4_^1_%ENA_"$2C_(SET A COMMA AFTER THE CODE_^1_%STA*_!(STOB)_^1_%RAO*_!STOB_^1_%JMP*_!PR7_(AND NOW GO TO STORE THE LABEL_^1_%JMP*_!PR10_^1COMA68 ADC_"0_*ROUTINE COMPLETING PROPER NUMBER OF COMMAS_^1_%LDA*_!COCT_^1_%SAM_"1_^1_%JMP*_!(COMA68)_"RETURN_^1_%ENA_"$2C_^1_%STA*_!(STOB)_^1_%RAO*_!STOB_^1_%RAO*_!COCT_^1_%JMP*_!COMA68+1_^1POP_"NUM_"$50,$52,$4F,$43,$20_^1P€€R7_"CLR_"A_^1_%STA-_!I_^1PR9_"RTJ*_!GETACH_$MOVE THE LABEL INTO NUBUF_^1_%SAP_"1_^1_%JMP*_!PR10_'END OF LABEL_^1_%STA*_!(STOB)_^1_%RAO-_!I_^1_%LDA-_!I_^1_%INA_"-7_^1_%SAZ_"2_^1_%RAO*_!STOB_^1_%JMP*_!PR9_(NOT YET END,NEXT CHARACTER_^1PR10_!ENA_"$0D_(SET END OF RECORD CODE_^1_%STA*_!(STOB)_^1_%JMP_"DUMMY5_^1*_!GET A CHARACTER ROUTINE_^1*_!EVERY CHARACTER IS CHECKED AS FOLLOWS_^1*_!1.€€_!FOR_!$0D MEANING END OF RECORD._^1*_!2._!THRU CHECKI ROUTINE FOR 80 CHARACTERS (END OF RECORD_^1*_!IN THE ABOVE CASES A REGISTER EXITS LOADED WITH $7F_^1*_!3._!FOR BLANK AND COMMA.THEN A REGISTER EXITS NEGATIVE_^1******_]_^1GETACH ADC_"0_^1_%RTJ*_!(LOAN1+1)_!CHECK FOR OVERFLOW_^1_%SAP_"1_^1_%JMP*_!FRCEND_$EXCEEDED 100 CHARACTERS_^1_%LDA*_!(PR6+1),I_!WHEN RETURNED I REGISTER €€SHOWS CORRECT LOCATIO_^1_%INA_"-$0D_(CHECK FOR END OF RECORD_^1_%SAN_"1_*NOT YET_^1_%JMP*_!FRCEND_^1_%INA_"-$13_'CHECK FOR BLANK (END OF MNEMONIC_^1_%SAN_"1_^1_%JMP*_!FRCEND_$THIS IS A FORCED END OF MNEMONIC_^1_%INA_"-$C_(CHECK FOR COMMA (INDICATION OF NEXT PARAMETER)_^1_%SAN_"1_^1_%JMP*_!MIDEND_^1_%INA_"$2C_(RESTORE THE CHARACTER_^1_%JMP*_!(GETACH)_"EXIT_^1FRCEND ENA_"-1_)SET A €€NEGATIVE_^1_%JMP*_!(GETACH)_"EXIT WITH A NEGATIVE_^1MIDEND ENA_"$7F_(CODE FOR COMMA MET_^1_%JMP*_!(GETACH)_"EXIT WITH END OF RECORD CODE IN A REGISTER_^1*_!SKIP THE REMAINING OF CHARACTERS AND TRAILING COMMA ROUTINE_^1******_]_^1SKCHCM ADC_"0_^1_%RTJ*_!(LOAN1+1)_!CHECK BUFFER LIMIT_^1_%SAP_"1_^1_%JMP*_!(SKCHCM)_"LIMIT OF BUFFER REACHED - EXIT_^1ENCORE LDA*_!(PR6+1),I_^1_%INA_"-$0D_€€'CHECK LIMIT OF RECORD_^1_%SAN_"2_^1_%ENA_"-1_)SET A NEGATIVE_^1_%JMP*_!(SKCHCM)_"LIMIT OF RECORD REACHED - EXIT_^1_%INA_"-$13_'CHECK FOR BLANK (FORCED END)_^1_%SAN_"2_^1_%ENA_"-1_)SET A NEGATIVE_^1_%JMP*_!(SKCHCM)_"IT IS THE LAST BLANK - EXIT_^1_%INA_"-$0C_'CHECK FOR COMMA_^1_%SAZ_"2_^1_%RAO-_!I_*ADVANCE THE POINTER FOR NEXT CHARACTER_^1_%JMP*_!ENCORE_^1_%RAO-_!I_*ADVANCE THE €€POINTER TO SKIP THE COMMA_^1_%CLR_"A_^1_%JMP*_!(SKCHCM)_"EXIT_^1*_!MOVE IN NUBUF THE FILE-NAME ROUTINE_^1*_!A REGISTER ENTERS POINTING THE FWA IN NUBUF_^1*_!I REGISTER EXITS POINTING EITHER THE LAST_^1*_!CHARACTER OF THE NAME OR THE COMMA_^1******_]_^1MVNAME ADC_"0_^1_%ENA_"-7_^1_%STA*_!COUNT1_$MOVE SIX CHARACTERS_^1MV001 RAO*_!COUNT1_^1_%LDA*_!COUNT1_$CHECK FOR END_^1_%SAN_"1_*NO€€T YET END_^1_%JMP*_!(MVNAME)_"RETURN_^1_%LDA*_!(PR6+1),I_!GET A CHARACTER_^1_%INA_"-$2C_'CHECK COMMA_^1_%SAZ_"MV003-*-1_!ITIS A COMMA_^1_%INA_"$2C_(RESTORE THE CHARACTER_^1MV002 STA_"NUBUF,Q_^1_%RAO-_!I_^1_%INQ_"1_^1_%JMP*_!MV001_^1MV003 ENA_"$20_(COMPLETE 6 CHARACTERS WITH BLANKS_^1_%STA*_!(MV002+1),Q_^1_%INQ_"1_^1_%JMP*_!MV001_^1******_]_^1******_]_^1MOVNAM ADC_"0_*MOVE NAME AS€€ IT IS_^1MV004 LDA*_!(BELAS+1),I_^1_%INA_"-$28_'CHECK FOR PARENTHESIS (MEANING END)_^1_%SAN_"1_^1_%JMP*_!(MOVNAM)_"RETURN_^1_%INA_"-4_)CHECK FOR COMMA (ALSO MEANING END)_^1_%SAN_"1_^1_%JMP*_!(MOVNAM)_"END-RETURN_^1_%INA_"$2C_(RESTORE THE CHARACTER_^1_%STA*_!(MV002+1),Q_^1_%RAO-_!I_*ADVANCE POINTERS_^1_%INQ_"1_^1_%RTJ*_!(LOAN1+1)_!CHECK FOR OVERFLOW_^1_%SAM_"1_*WEREACHED THE LIMIT €€OF BUFFER_^1_%JMP*_!MV004_%NEXT CHARACTER_^1_%JMP*_!(MOVNAM)_"END-RETURN_^1******_]_^1******_]_^1*_!SKIP THE REMAINING OF CHARACTERS AND TRAILING BLANKS ROUTINE_^1******_]_^1SKCHBL ADC_"0_^1LOAN1 RTJ+_!CHECKI_$CHECK FOR NO MORE THAN 100 CHARACTERS_^1_%SAP_"1_^1_%JMP*_!(SKCHBL)_"END - EXIT_^1_%LDA*_!(BLKFLD+1),I GET A CHARACTER_^1_%INA_"-$20_'CHECK FOR BLANK_^1_%SAZ_"2_^1_%RAO-_!I_€€^1_%JMP*_!SKCHBL+1_^1_%RAO-_!I_^1BLKFLD LDA+_!UNPACK,I_^1_%INA_"-$20_^1_%SAZ_"SKIP55-*-1_^1_%INA_"$20_(RESTORE THE CHARACTER_^1_%JMP*_!(SKCHBL)_"E X I T. - CHARACTER AFTER BLANKS FOUND_^1SKIP55 RAO-_!I_^1_%RTJ_"CHECKI_$CHECK BUFFER LIMIT_^1_%SAP_"1_^1_%JMP*_!(SKCHBL)_^1_%JMP*_!BLKFLD_^1*_!SKIP LEADING BLANKS ROUTINE_^1SKLDBL ADC_"0_^1_%RTJ_"CHECKI_$CHECK FOR BUFFER LIMIT_^1_%SAP_€€"2_^1_%JMP_"PS0_^1_%LDA_"(BLKFLD+1),I_^1_%INA_"-$20_'CHECK FOR BLANK_^1_%SAN_"SKIP72-*-1_^1_%RAO-_!I_^1_%JMP*_!SKLDBL+1_^1SKIP72 INA_"$20_(RESTORE THE CHARACTER_^1_%JMP*_!(SKLDBL)_"E X I T_^1_%BZS_"COUNT1(1)_^1_%BSS_"SAVEID(1)_^1*_!ROUTINE CODING MNEMONICS_^1*_!BEFORE THIS ROUTINE IS ENTERED IT WAS PRESTORED_^1*_!1. THE INITIAL SHIFT INSTRUCTION IN SHIFTL_^1*_!2. THE DEESCALATIO€€N OF SHIFTING AFTER EACH CHARACTER IN SHFCNT_^1*_!3. THE NUMBER OF CHARACTERS IN SEQUENCE TO BE CODED IN CODCNT_^1*_!4. FINALLY THE CODED MNEMONIC IS STORED IN CODFRM_^1******_]_^1CODERT ADC_"0_^1_%ENA_"-3_^1_%STA*_!CODCNT_$INITIALIZE THE COUNTERS_^1_%LDA_"=N$0FCA_#INITIAL SHIFT INSTRUCTION_^1_%STA*_!SHIFTL_^1_%ENA_"5_^1_%STA*_!SHFCNT_^1_%CLR_"A_^1_%STA*_!CODFRM_^1MORCHR RTJ_"GE€€TACH_$GO TO GET A CHARACTER_^1_%SAP_"1_^1_%JMP*_!(CODERT)_#E X I T A REGISTER RETURNED NEGATIVE_^1_%AND_"=N$001F_#CONSIDER THE 5 LAST BITS OF THE CHARACTER ONLY_^1SHIFTL ALS_"5_*HERE THE SHIFTING IS CHANGING_^1_%ADD*_!CODFRM_$MERGE WITH THE PREVIOUSLY CODED CHARACTERS_^1_%STA*_!CODFRM_^1_%RAO*_!CODCNT_$CHECK FOR END_^1_%LDA*_!CODCNT_^1_%SAN_"1_^1_%JMP*_!(CODERT)_"RETURN_^1_%LDA*_!€€SHIFTL_$MODIFY THE SHIFTING INSTRUCTION_^1_%SUB*_!SHFCNT_^1_%STA*_!SHIFTL_^1_%RAO-_!I_+UPDATE THE POINTER FOR THE NEXT CHARACTER_^1_%JMP*_!MORCHR_$NEXT CHARACTER_^1_%BZS_"CODFRM(1),CODCNT(1),SHFCNT(1)_^1*_!SEARCH A TABLE ROUTINE._^1*_!IN LOCATION INDIRT IS THE FWA OF THE TABLE_^1SEARCH ADC_"0_^1CHATBL LDA_"=XTABLES_"THIS LOCATION IS PRESTORED_^1_%STA*_!INDIRT_^1LOOP99 LDA*_!(INDI€€RT)_"GET A CODE FROM TABLES_^1_%SAP_"WAVE01-*-1 STILL CHECKING CODE NUMBERS_^1_%LDA*_!SAVEID_$CHECK THE CASE OF RECORD PARAMETERS_^1_%SUB_"=XTABREC_"BEING TREATED_^1_%SAZ_"2_*IT IS RECORD OPTION GO FOR FURTHER CHECKING_^1_%JMP_"ER3_^1_%LDA*_!(INDIRT)_"GET THE NEGATIVE CODE_^1_%JMP*_!(SEARCH)_"RETURN_^1WAVE01 SUB*_!CODFRM_$COMPARE WITH THE ACTUAL CODE_^1_%SAN_"1_*NO COMPARE_^1_%JMP€€*_!(SEARCH)_"IT IS COMPARE - EXIT_^1_%LDA*_!INDIRT_^1WAVE_!ADD_"=N-0_'SKIP THE PARAMETERS FOR NEXT COMPARE_^1_%STA*_!INDIRT_^1_%JMP*_!LOOP99_$GO ON SEARCHING_^1_%BZS_"INDIRT(1)_^1*_!MOVE ROUTINE_^1*_!IN LOCATIONS INDR01 AND INDR02 ARE STORED RESPECTICELY_^1*_!THE FWA (PLUS THE COMPEMENT OF CONTENTS OF Q REGISTER_^1*_!OF THE SENDING AND RECEIVING BUFFERS_^1*_!Q REGISTER ENTERS WITH €€THE COMPLEMENT OF THE NUMBER_^1*_!OF CHARACTERS TO BE VOVED_^1MOVERT ADC_"0_^1_%LDA*_!(INDR01)_"FROM OLD LOCATION_^1_%STA*_!(INDR02)_"TO NEW LOCATION_^1_%RAO*_!INDR01_$INCREASE THE LOCATION NUMBER BY ONE_^1_%RAO*_!INDR02_$SAME AS ABOVE_^1_%INQ_"1_*CHECK FOR END_^1_%SQZ_"1_^1_%JMP*_!MOVERT+1_^1_%JMP*_!(MOVERT)_"END - EXIT_^1_%BZS_"INDR01(1),INDR02(1)_^1*_!CHECKING FOR END ROUTINE_^1€€******_]_^1CHKEND ADC_"0_^1_%RTJ*_!CHECKI_$CHECK FOR MORE THAN 100 CHARACTERS_^1_%SAP_"1_^1_%JMP*_!LIMIT+1_^1BELAS LDA_"UNPACK,I_^1_%INA_"-$0D_'CHECK LIMIT OF RECORD_^1_%SAN_"1_^1_%JMP*_!LIMIT_^1_%INA_"-$13_'CHECK FOF BLANK_^1_%SAZ_"FINAL-*-1_^1_%CLR_"A_^1_%JMP*_!(CHKEND)_"EXIT_^1FINAL NOP_"0_^1LIMIT ENA_"-1_)SET A NEGATIVE_^1_%JMP*_!(CHKEND)_"EXIT_^1*_!CHECK BUFFER LIMIT ROUT€€INE_^1CHECKI ADC_"0_^1_%LDA-_!I_^1_%INA_"-100_'CHECK FOR LIMIT OF NUMBER OF CHARACTERS_^1_%SAP_"2_^1_%CLR_"A_*CODE MEANING NOT YET END_^1_%JMP*_!(CHECKI)_"RETURN_^1_%ENA_"-1_)SET A NEGATIVE_^1_%JMP*_!(CHECKI)_^1**************************************MOVE CHARS. FROM UNPACK TO NUBUF*_^1***************************_(**************_^1**_4PACKS NUBUF INTO INBUF1_^1*********************€€**************************************************_^1_%BSS_"STOP(1)_^1_%EQU_"INBUFT(INBUF1+34)_^1PACK_!ADC_"0_^1_%LDA_"SOURCE_^1_%SAZ_"PROPCK_^1_%LDQ_"=N$FA_(SEE IF DEVICE IS TTY_^1_%LDA-_!1,Q_^1_%INA_"-3_^1_%SAN_"PACKA_(OUTPUT DEVICE IS PRINTER_^1_%JMP*_!PACKT_^1PACKA RTJ-_!($F4)_!PRINT_^1_%NUM_"$0C00_(SOURCE_^1_%ADC_"CONTIN_'ON LIST_^1_%NUM_"0_,DEVICE_^1_%NUM_"$18FB_^1_%NUM_"40_€€^1_%ADC_"INBUF1_^1_%RTJ_"DIDDLE_^1PROPCK ENA_"-40_^1_%STA*_!STOP_^1_%ENQ_"0_^1_%STQ-_!I_^1PACK1 LDA_"NUBUF,I_$PICK UP CHAR._^1_%INA_"-$0D_^1_%SAN_"5_^1_%LDA_"ENDSW_^1_%SAZ_"1_^1_%ENA_"$2C_^1_%JMP*_!*+2_^1_%INA_"$0D_^1_%ALS_"8_^1_%RAO-_!I_^1PACK2 STA_"INBUF1,Q_^1_%LDA*_!(PACK1+1),I_#PICK UP SECOND HALF_^1_%INA_"-$0D_#IS IT CR?_^1_%SAN_"5_^1_%LDA_"ENDSW_^1_%SAZ_"1_^1_%ENA_"$2C_#IF €€YES, REPLACE WITH,_^1_%JMP*_!*+2_^1_%INA_"$0D_#IF NOT RESTORE CHARACTER_^1_%ADD*_!(PACK2+1),Q_+ADD SECOND HALF_^1_%STA*_!(PACK2+1),Q_#STORE PACKED BACK INBUF1_^1_%RAO-_!I_^1_%INQ_"1_^1_%RAO*_!STOP_^1_%LDA*_!STOP_-ALL DONE_^1_%SAZ_"1_^1_%JMP*_!PACK1_^1_%ENA_"$0D_^1_%STA_"INBUF1+50_^1PACKB JMP*_!(PACK)_^1PACKT RTJ-_!($F4) OUTPUT TO TTY_^1_%NUM_"$0C00_^1_%ADC_"CONTIN_^1_%NUM_"0_^1_€€%NUM_"$18FB_^1_%NUM_"35_^1_%ADC_"INBUF1_^1_%RTJ_"DIDDLE_^1_%RTJ-_!($F4)_%GO TO NEXT LINE_^1_%NUM_"$0C00_^1_%ADC_"CONTIN_^1_%NUM_"0_^1_%NUM_"$18FB_^1_%NUM_"7_^1_%ADC_"INBUFT_^1_%RTJ_"DIDDLE_^1_%JMP*_!PROPCK_^1****_]_^1CONV_!ADC_"0_^1_%ENA_"1_^1_%RTJ+_!NUMCK_#FIRST DIGIT NUMERIC_^1_%SAZ_"2_^1_%ENA_"1_#NO-RETURN WITH ERROR CODE_^1_%JMP*_!(CONV)_^1_%RTJ*_!(CON1+1)_^1_%AND_"=N$F_#MASK O€€FF ASCII BITS AND_^1_%STA*_!BIN_#SAVE BINARY VALUE_^1CON1_!RTJ+_!BUP_^1_%INA_"-$2E_#NEXT CHAR. A DEC. PT._^1_%SAZ_"1_^1_%JMP*_!CONV+5_^1_%ENA_"2_#YES-CHECK NEXT TWO CHAR. FOR NUMERIC_^1_%RTJ*_!(CONV+3)_^1_%SAZ_"1_^1_%JMP*_!CONV+5_^1_%LDA_"=N100_#MULT. SAVED CHAR. BY 100_^1_%MUI*_!BIN_^1_%STA*_!BIN_^1_%RTJ*_!(CON1+1)_^1_%AND_"=N$F_#MASK OFF ASCII BITS OF NEXT DIGIT_^1_%STA*_!BIN1_^1€€_%ALS_"3_#MULT. BINARY VALUE BY 10_^1_%ADD*_!BIN1_^1_%ADD*_!BIN1_^1_%ADD*_!BIN_#ADD TO VALUE OF FIRST CHAR._^1_%STA*_!BIN_^1_%RTJ*_!(CON1+1)_$GET NEXT DIGIT_^1_%AND_"=N$F_#MASK OF ASCII BITS_^1_%ADD*_!BIN_^1_%STA*_!BIN_#ADD TO GET TOTAL VALUE_^1_%CLR_"A_^1_%JMP*_!(CONV)_#RETURN WITH NO-ERROR CODE_^1BIN_"ADC_"0_^1BIN1_!ADC_"0_^1***** THIS ROUTINE COMPUTES THE LEFT AND RIGHT_^1****_€€!SCAN CORD. FOR THE GROUP STATEMENT._^1***_]_^1***_]_^1COMP_!ADC_"0_^1_%STA*_!SCFL_(SAVE "LSC" OR "RSC" FLAG_^1_%LDA_"SALN_)USING LENS 1_^1_%INA_"-$31_^1_%SAN_"COM6-*-1_^1_%LDA_"LENSET_$GET COORDINATE OF LENS 1_^1_%SAN_"COM1-*-1_^1NOCOOR JMP_"ER3_^1COM6_!INA_"-1_)COMPARE USING LENS 2_^1_%SAN_"3_^1_%LDA_"LENSET+1_$YES - GET CORD. OF LENS 2_^1_%JMP*_!COM1_(AND COMP. CORD. OF DATA_^1_€€%INA_"-1_^1_%SAN_"3_,USING LENS THREE_^1_%LDA_"LENSET+2_^1_%SAN_"1_#LENS THREE HAVE A CORD._^1_%JMP*_!NOCOOR_^1COM1_!ADD_"BIN_%COMP. CORD. OF DATA_^1_%LDQ*_!SCFL_(FOR "LSC" OR "RSC"_^1_%SQN_"COM3_^1_%INA_"5_,ITS "RSC" - ADD SAFETY FACTOR_^1_%STA*_!RSCD_^1_%ENQ_"17_+SET OPTION BUFFER ENTRY_^1COM2_!STA*_!SCBI_^1_%STA*_!SOSC5_#SAVE FOR OPEN SHUTTER PROCESSING_^1_%RTJ*_!PUT_%PLACE READ€€ CO-ORD. IN OPTION BUFFER_^1_%LDA*_!SCFL_(DOES LENS OPENING NEED TO BE SET_^1_%SAN_"1_^1_%JMP*_!(COMP)_%NO EXIT_^1_%JMP*_!COM4_^1COM3_!INA_"-5_'ITS "LSC" - PUT IN SAFETY FACTOR_^1_%ENQ_"13_+SET ENTRY TO OPTION BUFFER_^1_%JMP*_!COM2_^1***_]_^1***_]_^1_%BZS_"SCFL(1),SCBI(1),RSCD(1),FSGR(1)_^1SOSC5 NUM_"0_#HOLDS BEGIN-READ CO-ORD._^1CL438 NUM_"1_#NON-ZERO MEANS LAST GROUP STATEMENT_€€^1* CONTAINED CLOSE-LENS PARAMETER._^1***_]_^1***_/** SET LENS OPENING **_^1*_]_^1COM4_!LDA*_!SOSC5_#GET BEGIN-READ CO-ORD._^1_%INA_"-5_"SUB. 1 FROM CO-ORD._^1_%LDQ*_!CL438_#DID LAST GROUP STATEMENT_^1_%SQZ_"COM5_#CONTAIN CLOSE-LENS PARAMETER_^1_%INA_"-45_#YES. SUB. TOTAL OF 10 FROM COORD._^1COM5_!STA*_!SCBI_#STR. AS OPEN-SHUTTER CO-ORD._^1_%ENQ_"9_)GET OPTION BUFFER INDEX_^1_%RTJ*€€_!PUT_%PLACE OPEN-SHUTTER CO-ORD. IN OPTION BUFFER_^1_%JMP*_!(COMP)_"RETURN_^1*_]_^1*** THIS ROUTINE PUTS THE OPEN SHUTTER,_^1*** READ AND STOP READ CORD. IN THE OPTION_^1*** BUFFER._^1OPTN_!ADC_"0_^1PUT_"ADC_"0_^1_%STQ*_!OPTN_#SAVE ENTRY REF. TO OPTION BUFFER_^1_%LDA*_!SCBI_^1_%CLR_"Q_^1_%DVI_"=N5_#CONV. CORD. FROM HUNDREDS OF INCHES_^1_%STA*_!SCBI_#TO CORD._^1_%AND_"=N$0F00_#MASK€€ OFF FOR FIRST CHAR._^1_%ARS_"8_#SHIF TO LOWER 8 BITS_^1_%LDQ*_!OPTN_#SET Q TO OPTION BUFFER_^1_%RTJ*_!HXTO_#GO CONVERT TO ASCII_^1_%LDA*_!SCBI_^1_%AND_"=N$00F0_#MAST OFF FOR SECOND CHAR._^1_%ARS_"4_#PUT IN LOWER 8_^1_%RTJ*_!HXTO_#CONVERT_^1_%LDA*_!SCBI_^1_%AND_"=N$F_#MASK OFF FOR THIRD CHAR._^1_%RTJ*_!HXTO_#CONVERT_^1_%JMP*_!(PUT)_#EXIT_^1*** CONVERT FROM HEX TO ASCII_^1HXTO_!ADC_€€"0_^1_%STA*_!HXTO1_#SAVE HEX CHAR._^1_%INA_"-10_#IS IT 9 OR LESS_^1_%SAP_"HXTO3_^1_%LDA*_!HXTO1_'YES - ADD UPPER BITS_^1_%ADD_"=N$30_(TO MAKE ASCII NUM._^1HXTO2 STA+_!NUBUF,Q_!PUY IN OPTION BUFFER_^1_%INQ_"1_^1_%JMP*_!(HXTO)_%BACK FOR ANOTHER_^1HXTO3 INA_"$41_^1_%JMP*_!HXTO2_^1HXTO1 ADC_"0_^1*** STANDARD OPTION PARAMETERS FOR DOC STATEMENT_^1*** * UNPACKED, ONE CHARACTER PER WOR€€D_^1*** DOC 255,12,00,0_^1DOCOPT NUM_"$20,$44,$4F,$43,$20 DOC_^1I5_#NUM_"$32,$35,$35,$2C_,255_^1I9_#NUM_"$31,$32,$2C_(12_^1II2_"NUM_"$30,$30,$2C_%00,_^1II5_"NUM_"$24,$30,$0D_^1**********************************_%**_^1*_]_^1* PICRO IS THE ENTRY POINT TO PICTUR STATEMENT PROCESSING_^1*_]_^1*_]_^1PICRO 0_$0_%ENTRANCE_^1*_]_^1* THE NEXT GROUP OF INSTRUCTIONS MOVES THE PICTUR STATEMENT€€_^1* OPTION BUFFER TO NUBUF._^1*_]_^1_%ENQ_"70_-INITIALIZE MOVE INDEX_^1PI01_!LDA*_!PICTBL,Q_!GET ITEM FROM OPTION BUFFER_^1PI02_!STA+_!NUBUF,Q_"STR. IN NUBUF_^1_%INQ_"-1_,DECREMENT MOVE INDEX_^1_%SQM_"PI03_'HAVE ALL ITEMS BEEN MOVED_^1_%JMP*_!PI01_*NO_^1*_]_^1* YES. THE NEXT GROUP OF INSTRUCTIONS LOOKS FOR THE FIRST BLANK_^1* IN THE SOURCE STATEMENT FOLLOWING THE WORD PICTUR"._^1*€€_]_^1PI03_!RTJ+_!BUP_'GET CHAR._^1_%INA_"-$20_+IS IT_^1_%SAZ_"PI04_+A BLANK_^1_%JMP*_!PI03_)NO. EXAMINE NEXT CHAR._^1*_]_^1* YES. THE NEXT GROUP OF INSTRS. PROCESSES THE CHARS. SPECIFIED_^1*_]_^1PI04_!ENQ_"10_)INITIALIZE_^1_%STQ*_!PNUNX_)STORING INDEX_^1_%RTJ*_!(PI03+1)_$GET NEW CHAR._^1_%ENQ_"6_-INITIALIZE PLEGL INDEX_^1*_]_^1PI05_!LDA_"UNPACK,I_"GET CHAR._^1_%SUB*_!PLEGL,Q_'DOES€€ IT MATCH_^1_%SAZ_"PI06_+ONE OF THE LEGAL VALUES_^1_%SQZ_"PI07_+NO. HAVE ALL LEGAL VALUES BEEN COMPARED_^1_%INQ_"-1_,NO. SUB. 1 FROM PLEGL INDEX_^1_%JMP*_!PI05_)COMPARE CHAR. WITH NEXT VALUE_^1*_]_^1PI06_!SQZ_"PI08_%IS CHAR. A BLANK_^1_%INQ_"$30_,CONVERT A 1, 2, 3, A, N, OR S TO,_^1_%TRQ_"A_.RESPECTIVELY, A 1, 2, 3, 4, 5, OR 6_^1_%LDQ*_!PNUNX_)GET STORING INDEX_^1_%STA*_!(PI02+1),Q€€_#STR IN NUBUF_^1_%INQ_"2_-INCR. STORING INDEX_^1_%JMP*_!PI04+1_(PROCESS NEXT CHAR._^1*_]_^1PI07_!JMP_"ER3_(GO TO ERROR PROCESSING_^1* THE NEXT GROUP OF INSTRS. CALCULATES THE DGROUP+ INCREMENT_^1* FOR THE NEXT GROUP STATEMENT_^1*_]_^1PI08_!LDA*_!PGCGR_$GET CURRENT GROUP NR._^1_%ALS_"2_-MULTIPLY BY 4_^1_%RTJ*_!PDCNV_)CONVERT TO ASCII AND PUT IN NUBUF_^1_%JMP*_!(PICRO)_'RETURN_^1*_]€€_^1*_]_^1* PDCNV IS CALLED BY PICTUR STATEMENT PROCESSING TO CONVERT_^1* FROM DECIMAL TO ASCII THE NR. OF WORDS TO BE ADDED TO DGROUP_^1* FOR THE NEXT GROUP STATEMENT_^1*_]_^1PDCNV 0_$0_+ENTRANCE_^1*_]_^1* A-REG. HOLDS NR. TO BE CONVERTED._^1_%CLR_"Q_)ISOLATE_^1_%DVI_"=N100_$1ST DIGIT_^1_%INA_"$30_'CONVERT TO ASCII_^1_%STA_"NUBUF+66_$STORE IN NUBUF_^1_%TRQ_"A_)GET REMAINDER FROM 1€€ST DIVIDE_^1_%CLR_"Q_)ISOLATE_^1_%DVI_"=N10_%2ND DIGIT_^1_%INA_"$30_'CONVERT TO ASCII_^1_%STA_"NUBUF+67_$STORE IN NUBUF_^1_%INQ_"$30_'CONVERT 3RD CHAR. TO ASCII_^1_%STQ_"NUBUF+68_$STORE IN NUBUF_^1_%JMP*_!(PDCNV)_!RETURN_^1*_]_^1*_]_^1* THE FOLLOWING ARE DATA AND CONSTANTS USED BY PICTUR STATEMENT_^1* PROCESSING._^1*_]_^1PGCGR NUM_"0_#CURRENT GROUP NR. %INITIALLY EQUALS 0)_^1PNUNX€€ NUM_"0_#NUBUF INDEX_^1PLEGL NUM_"$20_$BLANK_^1_%NUM_"$31_'1_^1_%NUM_"$32_'2_^1_%NUM_"$33_'3_^1_%NUM_"$41_'A_^1_%NUM_"$4E_'N_^1_%NUM_"$53_%S_^1*_]_^1*** PICTBL IS THE PICTUR OPTION BUFFER_^1*_]_^1PICTBL NUM_"$20,$50,$49,$43,$54,$55,$52,$20,$30_^1_%NUM_"$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30_^1_%NUM_"$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30_^1_%NUM_"$2C,$30,$2C,$30,$2C,$30,$2C,$30€^,$2C,$30_^1_%NUM_"$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30_^1_%NUM_"$2C,$30,$2C,$30,$2C,$30,$2C,$30,$2C,$30_^1_%NUM_"$2C,$30,$2C,$30,$2C,$30,$2C,$30,$35,$30,$20,$0D_^1_%ALF_"17,COPYRIGHT CONTROL DATA CORP. 1971_^1HFIX_!NOP_]_^1_%SET_"A_^1_%STA_"HFLAG_!SET HFLAG NEG_^1_%ENA_"$31_^1_%STA_"HPRSKL+6_'SET OPTION_^1_%JMP*_!(HFIX)_!RETURN_^1_%END_"PS0_^__^PPS1 CSY/ P€1_%NAM PS1_*DRAFT PASS1 06/03/68_^1_%ENT_"PS1_^1*** COPYRIGHT CONTROL DATA CORPORATION, 1975 ***_^1_%ENT_"PASS1_^1_%EQU_"PS(1)_/TO READ IN PASS2_^1***********************************************************************_^1*_]_^1**_!PASS 1-MACRO-ASSEMBLER. 3 JUNE 1968. OCR SOFTWARE,ROCKVILLE,MD. **_^1****_?5 JULY 1968 - ADDENDA< < < < <_^1**_]_^1** 4.0 MODIFICATION AFFECT_^1*** ASS€€IGN SKELETON_^1*** PROCED SKELETON_^1*** PROC SKELETON_^1**_]_^1**********************************************************************_^1** AUGUST - 73 929 MODIFICATIONS_^1* SPEC SKELETON_^1* ZONE STATEMENT_^1**_]_^1**_]_^1ASSEM JMP_"ENTP1_%TO START OF PASS ONE_^1GETP2 JMP+_!EXEC+2_^1_%BZS_"CSWW(1)_^1COO_"ENA_"1_^1_%STA*_!CSWW_^1_%RTJ-_!($F4)_^1_%NUM_"$A00_^1_%ADC_"0_^1MA5_"AD€€C_"0_^1_%EQU_"ENDASB(MA5+1)_^1ENTP1 ENA_"1_^1_%AND_"EXEC+5_^1_%SAN_"ENTP2_^1_%RTJ-_!($F4)_^1_%ADC_"$1C00,CONTIN,0,$18FA,$5000_^1_%RTJ_"DIDDLE_^1ENTP2 EQU_"ENTP2(*)_^1_%LDA_"PSECTM_^1_%INA_"1_^1_%STA_"SECTNO_^1_%STA_"SECWRT_^1_%RTJ-_!($F4)_'TELL OP. TO READY PT. AND UNIT 1_^1_%NUM_"$C00_^1_%ADC_"CONTIN_^1_%NUM_"0_^1_%NUM_"$18FC_^1_%NUM_"7_^1_%ADC_"TELL1_^1_%RTJ_"DIDDLE_^1_%LDA_"=X€€CONS+SKLADR_^1_%TRA_"Q_^1_%SUB_"=XN1+1_^1_%STA_"N1+1_^1_%INA_"-2_^1_%STA_"N1+3_^1_%TRQ_"A_^1_%SUB_"=XQCC1+1_^1_%STA_"QCC1+1_^1_%LDA_"=XCONS+CRPADR_^1_%SUB_"=XCHRPIC+6_^1_%STA_"CHRPIC+6_^1_%JMP_"PASS1_^1TELL1 ALF_"7,PASS 1 LOADED_^1******_]_^1_%COM_"PTBL(96),INBUF1(51),SKLBUF(500)_^1****_]_^1_%EQU_"INBUF(PTBL)_^1_%EQU_"ACTBL(PTBL),ACTBL2(PTBL)_^1_%EQU_"ACTBL3(ACTBL2)_^1_%EQU_"DIRBU€€F(INBUF)_^1_%EQU_"INPADR(1)_^1_%EQU_"CRPADR(INPADR+1),ACADR(CRPADR+1)_^1_%EQU_"BUFFSW(ACADR+1),SKLADR(BUFFSW+1),CS(SKLADR+1)_^1_%EQU_"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_"SKWDCT(DC+1),DIRINX(€€SKWDCT+1)_^1_%EQU_"FPRINX(DIRINX+1)_^1_%EQU_"CM(FPRINX+1),CM1(CM+1),AP(CM1+1)_^1_%EQU_"SY(AP+1),XMOD(SY+4)_^1_%EQU_"T1(XMOD+1),TP1(T1+5)_^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,MM,ERC_^1_%COM_"PCHSW_^1_%COM_"NAMSAV(7)_^1_%COM_"EXEC($A0)_^1_%EQU_"PSECTM(EXEC+€€$1C)_^1_%EQU_"SECTNO(EXEC+$9F)_^1**_]_^1**_#**** START OF PASS 1 OF THE ASSEMBLER ****_^1**_]_^1DRCT_!ADC_"0_^1CONTIN SET_"A_^1_%STA*_!DSW_^1_%RTJ-_!($F4)_"EXIT_^1_%NUM_"$0A00_^1DIDDLE ADC_"0_^1_%LDA*_!DSW_^1_%SAP_"3_^1_%CLR_"A_^1_%STA*_!DSW_^1_%JMP*_!(DIDDLE)_^1_%JMP*_!DIDDLE+1_^1DSW_"ADC_"0_^1LDRAFT ADC_"0_^1_%JMP*_!(LDRAFT)_^1PS1_"LDA_"=XCONS_(PUT START OF COMMON IN I_^1_%EQU_€€"PASS1(PS1)_^1_%STA-_!I_^1_%LDQ_"=XCONS+RCS-DIRBUF_^1_%ENA_"0_^1_%STA_"DIRBUF,Q_(CLEAR COMMON TO ZERO SO THAT_^1_%INQ_"-1_5ALL SWITCHES ARE INITIALIZED_^1_%SQM_"1_^1_%JMP*_!*-4_^1_%STA_"ERC_^1_%STA_"CSWW_^1_%STA-_!LN,I_^1_%LDA_"=XINBUF1_^1_%STA-_!INPADR,I_^1_%STA_"P1J+1_^1_%STA_"CHPU+6_^1_%STA_"MC7+4_^1_%STA_"MC7+6_^1_%LDA_"=XACTBL_^1_%STA-_!ACADR,I_^1_%STA_"MCCON_^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_%SAP_"3_^1_%RTJ_"PIL_^1_%JMP*_!P1D_^1_%SUB_"=N$35EE_-MON IMG_^1_%SAN_"P1C-*-1_^1P1A_"LDA+_!FST_^1_%SAN_"P1C-*-1_^1_%STA_"MM_^1_%RAO*_!(P1A+1) FST_^1_%ENQ_"2_^1_%ENA_"1_^1_%STA_"L,Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-4_^1P1C_"LDA-_!NU,I_^1_%SUB_"=N$382D_-NAM OP€€CODE_^1_%SAZ_"1_^1_%JMP*_!MDEX2_^1_%ENA_"-1_2SET NAM INDEX_^1_%ENQ_"45_^1_%STA*_!(P1J+1),Q_^1_%ENQ_"43_^1_%STA*_!(P1J+1),Q_^1_%RTJ*_!(MDEX+1)_^1_%JMP*_!MDEX+2_^1MDEX_!RTJ+_!PIL_^1_%RTJ*_!(CONAB-1) READIM_^1_%RTJ*_!(P1D+2) GETOP_^1MDEX3 LDA-_!NOPG,I_^1_%SAN_"1_^1_%JMP*_!MDEX2_^1_%LDQ-_!DIRINX,I_^1_%INQ_"-5_^1_%LDA+_!DIRBUF,Q_,FLAG LAST DIR_^1_%TCA_"A_3ENTRY_^1MDEX2 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_"2_^1_%JMP_"CONAC_2ASTERISCK **_^1_%SUB_"=N$15A3_*EMC OPCODE_^1_%SAN_"QVVR_^1_%ENA_"-3_+SET CLASS + INDEX_^1_%ENQ_"43_+FOR EMC_^1P1J_"STA+_!0,Q_^1_%ENA_"17_^1_%ENQ_"45_^1_%S€€TA*_!(P1J+1),Q_^1_%CLR_"A_#SET SWITCH FOR DRAFT CODE_^1_%STA*_!ASW_^1_%JMP_"ENDMAC_^1_%EQU_"QVVR(*)_^1_%LDA-_!NU,I_^1_%SUB_"=N$15C4_*END OPCODE_^1_%SAZ_"1_^1_%JMP*_!P1EE_^1_%ENA_"-3_^1_%ENQ_"43_+STORE CLASS + INX_^1_%STA*_!(P1J+1),Q_#FOR END_^1_%ENA_"7_^1_%ENQ_"45_^1_%STA*_!(P1J+1),Q_^1_%LDA-_!BUFFSW,I_^1_%SAP_"2_,BE SURE LAST IL SECT_^1_%ALS_"1_,GETS OUT_^1_%STA-_!BUFFSW,I_^1_%ENA€€_"1_^1_%STA*_!ENDFLG_^1P1F_"RTJ+_!IL_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAN_"P1F1_^1_%RTJ-_!($F4)_^1_%ADC_"$1C00,0,0,$8FA,$3000_^1_%RTJ-_!($F4)_^1_%ADC_"$1C00,0,0,$8F9,$3000_^1P1F1_!EQU_"P1F1(*)_^1_%RTJ-_!($F4)_$TELL OPERATOR TO MOUNT SYSTEM TAPE_^1_%NUM_"$C00_^1_%ADC_"CONTIN_^1_%NUM_"0_^1_%NUM_"$18FC_^1_%NUM_"5_^1_%ADC_"TELL_^1_%RTJ_"DIDDLE_^1_%JMP_"GETP2_^1ZAS_"ADC_"0_^1_%BZS_"ENDFLG€€(1)_^1TELL_!ALF_"5,END PASS 1_^1**_]_^1**_#**** END PASS 1 - CALL PASS 2 ****_^1**_]_^1**_]_^1ASW_"ADC_"0_^1P1EE_!ENQ_"0_^1_%STQ-_!T1,I_^1_%LDA*_!ASW_^1_%SAN_"1_^1_%JMP*_!P1G_^1**_]_^1**_#*** LOAD 15 BIT OP.CODE. IF NEG.,FIRST OF CLASS ***_^1**_]_^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 OPCOD€€ES 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+1),Q_#STORE INDEX_^1_%LDA-_!T1,I_^1_%ENQ_"43_^1_%STA*_!(P1J+1),Q_#STORE CLASS CODE_^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+1),Q_#STORE HEX CODE_^1_%LDA-_!T1,I_)STORE CLASS CODE_^1_%ENQ_"43_^1_%STA*_!(P1J+1),Q_^1_%JMP*_!CONAC_^1COND_!ENA_"0_,CLASS 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 U€€P 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_3GO GET IT AGAIN_^1ENDMAC CLR_"A_^1_%STA_"MSW1,I_^1_%JMP*_!CONAC_^1P1G_"RTJ_"RECV_^1**_4**** ASCII NAME NOW IN -SY- ****_^1**_]_^1_%LDA-_!I_(SAVE I REGISTER_^1_%STA-_!T1,I_^1_%ENQ_"0_^1_%STQ-_!I_^1**********************************************€€********************_^1**** CHECK FOR DRAFT MAC._^1***************************************************************_^1TRA1_!ENQ_"0_^1_%STQ-_!I_^1CLNU_!ENQ_"-55_'CLEAR NUBUF TO BLANKS_^1_%ENA_"$20_^1_%STA_"NUBUF+55,Q_^1_%INQ_"1_^1_%SQZ_"1_2ALL CLEAR?_^1_%JMP*_!CLNU+2_^1_%ENA_"-40_%SET COUNT FOR UNPACK_^1_%STA*_!(DUMMY+1)_^1TRA2_!LDA+_!INBUF1,Q_!AND UNPACK INBUF 1_^1_%ARS_"8_^1DUMMY2 €€STA+_!UNPACK,I_^1_%RAO-_!I_^1_%LDA*_!(TRA2+1),Q_^1_%AND_"=N$FF_^1_%STA*_!(DUMMY2+1),I_^1_%LDA_"UPA_^1_%INA_"1_!ALL UNPACKED_^1_%SAZ_"TRA3_"YES_^1DUMMY STA+_!UPA_^1_%RAO-_!I_^1_%INQ_"1_^1_%JMP*_!TRA2_#NO_^1TRA3_!CLR_"Q_#RESET Q AND I_^1_%STQ-_!I_^1TRA4_!LDA_"UNPACK,I_2FIRST CHARACTER A BLANK_^1_%INA_"-$20_^1_%SAN_"FINZ_^1_%RAO-_!I_"YES_^1_%JMP*_!TRA4_^1FINZ_!LDA_"UNPACK,I_^1_%INA€€_"-$45_*NOT BLANK, AN "E"_^1_%SAN_"2_^1_%JMP_"ENTER_2AN "E", GO CHECK FOR ENTER DRAFT_^1_%LDA_"ASW_+IS ASSEM SWITCH ON_^1FINZ1 SAZ_"4_^1ERRJJ RTJ_"ERO_^1_%JMP_"MDEX+2_^1_%LDA_"PRO_+ASSEM NOT SET, IS PROCEDURE SET_^1_%SAZ_"FIN_^1_%JMP_"PROC_#PROCESS PROCEDURE STATEMENT_^1_%JMP_"(ER3-1)_^1FIN_"LDA_"UNPACK,I_"BEGIN CHECK FOR DRAFT NON-PROCEDURE_^1_%INA_"-$41_*FIRST PARM. START WITH €€"A"_^1_%SAZ_"*+2_^1_%JMP*_!FIN1_"IT IS NOT A , GO CHECK FOR C_^1_%RAO-_!I_)YES, CHECK FOR ASSIGN_^1_%LDA*_!(FIN+1),I_^1_%INA_"-$53_'IS "S" NEXT_^1_%SAZ_"1_^1_%JMP*_!ER1_^1_%ENA_"9_*SET NO. OF PARM._^1_%STA*_!(DUMMY6+1)_^1_%LDA_"ASWI_'FIRST ASSIGN STATEMENT_^1_%SAZ_"ASKL_^1_%LDA_"=XSKAS_$NO - MOVE SKEL._^1_%RTJ*_!(DUMMY7+1)_^1SEAS_!ENA_"7_%SET COUNTER FOR PARM. PICK UP_^1_%STA*_!(D€€UMMY9+1)_^1_%JMP*_!MAC541_'JMP TO MACCAL_^1ASKL_!RAO_"ASWI_"SET FIRST ASSIGN FOUND_^1_%LDA_"=XSKAS1_^1_%RTJ*_!(DUMMY7+1) MOVE SKEL._^1_%ENA_"$66_^1_%STA_"SKAS_'SET NO. OF WORDS FOR NEXT MOVE_^1_%JMP*_!SEAS_^1ER1_"JMP*_!ER2_^1FIN1_!INA_"-$2_#IS CHARAC A C ?_^1_%SAZ_"1_^1_%JMP*_!FIN2_^1_%RAO-_!I_$YES - IS NEXT CHARAC. A T_^1_%LDA_"(FIN4+1),I_^1_%INA_"-$54_^1_%SAZ_"1_^1_%JMP*_!ER2_^€€1_%ENA_"13_/SET NO. OF PARAMS._^1_%STA_"(DUMMY6+1)_^1_%LDA_"CSWI_'FIRST "CTL"_^1_%SAZ_"SECT_^1_%LDA_"=XSKCT_^1_%RTJ*_!(DUMMY7+1)_^1PCTZ_!ENA_"4_^1DUMMY9 STA+_!CONS+CT_^1_%JMP*_!(ER3-1)_^1SECT_!RAO_"CSWI_#SET CTL SWITCH_^1_%LDA_"=XSKCT1_^1_%RTJ*_!(DUMMY7+1)_^1_%ENA_"$31_^1_%STA_"SKCT_^1_%JMP*_!PCTZ_^1FIN2_!INA_"-$1_#IS CHARAC A D ?_^1_%SAZ_"1_^1_%JMP*_!FIN3_^1_%RAO-_!I_#YES - IS N€€EXT CHARAC AN A ?_^1_%LDA*_!(FIN4+1),I_^1_%INA_"-$41_^1_%SAN_"FIN2A_#NO_^1_%JMP_"DATPR3_#YES. IT'S DATA_^1FIN2A INA_"-4_#IS IT AN E - DESC_^1_%SAN_"1_#NO_^1_%JMP*_!DESTMT_#YES - GO PROCESS DESC_^1_%INA_"-$A_#IS CHAR._^1_%SAZ_"1_#AN O_^1_%JMP*_!ER2_#NO_^1_%RAO-_!I_#YES_^1_%LDA*_!(FIN4+1),I_#IS NEXT_^1_%INA_"-$43_#CHAR._^1_%SAZ_"1_#A C YES_^1_%JMP*_!ER2_#NO_^1_%STA_"SW935_#INDICA€€TE PROGRAM IS FOR 935_^1_%ENA_"6_#IT S A DOC_^1_%STA*_!(DUMMY6+1)_^1_%ENA_"3_^1_%STA*_!(DUMMY9+1)_#GET_^1_%LDA_"=XSKDOC_#SKELETON_^1_%RTJ*_!(DUMMY7+1)_#AND MOVE_^1MAC541 JMP*_!(ER3-1)_#GO TO MACCAL_^1DESTMT ENA_"5_^1_%STA*_!(DUMMY9+1)_^1_%LDA_"UNPACK+6_%GET FIRST PARAMETER_^1_%INA_"-$31_*IS IT HFIELD?_^1_%SAZ_"DESC2_)YES-SKIP_^1_%INA_"-8_,IS IT HCHAR?_^1_%SAZ_"DESC2_)YES-SKIP_^1_%I€€NA_"1_-IS IT LREC?_^1_%SAN_"2_-NO-SKIP_^1_%RAO_"REC92_)YES- INCRE. RECORD STMT. CNTR_^1_%ENA_"$13_+NO. OF PARAMS TO MOVE_^1_%STA*_!(DUMMY6+1)_^1_%LDA_"=XSKDE_(GET ADDRS OF SKELETON_^1_%JMP*_!MAC541-1_$GO MOVE SKELETON_^1DESC2 ENA_"$1E_%NO. OF PARAMETERS TO MOVE_^1_%STA*_!(DUMMY6+1)_^1_%LDA_"=XSKHP_(GET ADDRS OF SKELETON_^1_%JMP*_!MAC541-1_^1DATSTM ENA_"13_^1DUMMY6 STA+_!NF+CONS_^1€€_%LDA_"DSWI_#FIRST DATA STATEMENT_^1_%SAZ_"SEDA_^1_%LDA_"=XSKDA_^1DUMMY7 RTJ+_!SKLMOV_^1_%ENA_"5_$COUNTER FOR PARM PICK UP_^1_%JMP*_!DUMMY9_^1SEDA_!RAO_"DSWI_$SET DATA SWITCH_^1_%LDA_"=XSKDA_^1_%RTJ*_!(DUMMY7+1)_^1_%ENQ_"-3_^1_%LDA_"SKDA2+3,Q_$SET END OF SKELETON FOR NEXT MOVE_^1_%STA_"SKDA1+3,Q_^1_%INQ_"1_^1_%SQZ_"1_(ALL CHAR SET_^1_%JMP*_!*-6_^1_%JMP*_!SEDA-2_^1_%JMP*_!(ER3-1)_#B€€ACK TO ASSEMBLER_^1ER2_"JMP*_!ER3_^1FIN3_!INA_"-$2_#IS CHARACTER AN F ?_^1_%SAZ_"1_^1_%JMP*_!FIN4_^1_%RAO-_!I_#YES - IS NXT CHAR. AN O_^1_%LDA*_!(FIN4+1),I_^1_%INA_"-$4F_^1_%SAN_"ER3_)NO_^1_%ENA_"$13_)NO OF PARAMETERS TO MOVE_^1_%STA*_!(DUMMY6+1)_^1_%ENA_"5_^1_%STA*_!(DUMMY9+1)_^1_%LDA_"=XSKFO_#ADDR. OF FORM SKELETON_^1_%JMP*_!MAC541-1_^1_%JMP+_!MACCAL_#GO PROCESS DRAFT MACRO_^1ER€€3_"JMP_"ERRJJ_^1FIN4_!LDA+_!UNPACK,I_$IS CHARACTER A P_^1_%INA_"-$50_^1_%SAN_"FIN6_#NO - CONTINUE CHECK_^1_%RAO-_!I_^1FOT_"JMP*_!FOT1_#GO CHK FOR PROC_^1FIN6_!INA_"-2_%IS IT CHAR. R_^1_%SAZ_"1_%YES_^1_%JMP*_!FIN7_!NO-SKIP_^1_%ENA_"5_^1_%STA*_!(DUMMY9+1)_^1_%ENA_"$0A_^1_%STA*_!(DUMMY6+1) NO. OF PARAMS. TO MOVE_^1_%LDA*_!RZN1_!IS IT FIRST RZONE STATEMENT_^1_%SAN_"RZN2_"NO-SKIP_^1_%€€LDA_"=XRZONE_"FWA OF ZONE SKELETON_^1_%RTJ*_!(DUMMY7+1) MOVE SKELETON_^1_%LDA_"=N67_/SET SKELETON FOR NEXT MOVE_^1_%STA_"RZONE1_^1_%STA*_!RZN1_^1_%JMP*_!(ER3-1)_^1RZN2_!LDA_"=XRZONE1_^1_%RTJ*_!(DUMMY7+1)_^1_%JMP*_!(ER3-1)_^1RZN1_!ADC_"0_^1FIN7_!INA_"-1_%IS IT CHAR S_^1_%SAN_"FIN8_(NO-SKIP_^1_%ENA_"5_^1_%STA*_!(FOT956+1)_^1_%ENA_"$0B_^1_%STA*_!(DUMMY6+1) NO. OF PARAMETERS IN SKELE€€TON_^1_%LDA_"=XSKSPC_$FWA OF SPEC SKELETON_^1_%JMP*_!MAC541-1_"MOVE_^1FIN8_!LDA*_!(FIN4+1),I_%GET CHAR._^1_%INA_"-$47_#IS IT_^1_%SAZ_"ER6+1_#A G, YES_^1_%STA-_!I_^1_%ENA_"3_^1_%RTJ_"NUMCK_^1_%SAN_"ER6_^1_%JMP*_!FOT2_^1ER6_"JMP*_!ER2_^1_%RAO-_!I_^1_%LDA*_!(FIN4+1),I_#IS NEXT CHAR._^1_%INA_"-$52_#AN R_^1_%SAZ_"1_#YES IT S A GROUP_^1_%JMP*_!ER2_^1_%ENA_"15_+SET NUMBER_^1_%STA*_!(DUM€€MY6+1)_#OF PARAM._^1_%ENA_"5_#SET COUNT_^1_%STA*_!(FOT956+1)_!FOR PARAMETER PICK UP_^1_%LDA*_!GRP1_/1ST GROUP STATE_^1_%SAN_"GRP2_0NO_^1_%LDA_"=XSKGRO_-YES_^1_%RTJ*_!(DUMMY7+1)_*MOVE FIRST SKEL._^1_%LDA_"=N87_0SET SKEL. FOR NEXT MOVE_^1_%STA_"SKGRO1_^1_%STA*_!GRP1_^1_%JMP*_!(ER3-1)_^1GRP2_!LDA_"=XSKGRO1_)MOVE 2ND_^1_%RTJ*_!(DUMMY7+1)_*SKEL._^1_%JMP*_!(ER3-1)_^1GRP1_!ADC_"0_^1FOT2_!€€ENA_"16_^1_%STA*_!(DUMMY6+1)_^1_%LDA_"ESWI_-FINST ENV STATEMENT_^1_%SAZ_"SEEN_^1_%LDA_"UNPACK+5_#NO. GET ENV. LEVEL_^1_%INA_"-$32_#IS THIS A RECORD STATEMENT_^1_%SAN_"2_#NO._^1_%RAO_"REC92_#YES. INCR. RECORD STATEMENT COUNTER_^1_%LDA_"=XSKEN_^1_%RTJ*_!(DUMMY7+1)_^1_%JMP*_!FOT1-2_^1SEEN_!RAO_"ESWI_)SET ENV. STATEMENT SWITCH_^1_%LDA_"=XSKEN_^1_%RTJ*_!(FOT957+1)_^1_%ENQ_"-3_^1_%LDA_"S€€KEN2+3,Q_$SET END OF SKELETON FOR NEXT MOVE_^1_%STA_"SKEN1+3,Q_^1_%INQ_"1_^1_%SQZ_"1_^1_%JMP*_!*-6_^1_%JMP_"PCTZ_^1FOT1_!LDA*_!(FIN4+1),I_"IS NEXT CHARACTER AN "R"_^1_%INA_"-$52_^1_%SAZ_"FOT5_^1_%JMP*_!PITEST_%NO. SEE IF CHAR. IS AN "I"_^1FOT5_!ENA_"3_"SET NO OF PARM_^1_%STA_"CONS+NF_^1_%ENA_"6_^1FOT956 STA+_!CONS+CT_!SET COUNT FOR PARAMETER PICK UP_^1_%RAO_"PRO_)SET PROCED SWITCH_€€^1SKL95 LDA_"=XSKPC_^1FOT957 RTJ+_!SKLMOV_%MOVE SKELETON_^1_%JMP_"(ER3-1)_^1ENTER RTJ+_!BUP_!FOUND AN "E"-IS "N" NEXT_^1_%INA_"-$4E_^1_%SAZ_"2_^1_%JMP_"FINZ1_^1_%RTJ_"BUP_+SPACE TO BLANKS AND THEN FIND NEXT WORD_^1_%INA_"-$56_#IS IT A V_^1_%SAN_"1_#NO_^1_%JMP*_!FOT2_#YES, GET SKELETON_^1_%RTJ*_!(ENTER+1)_^1_%INA_"-$20_^1_%SAZ_"1_^1_%JMP*_!*-3_^1_%RTJ*_!(ENTER+1)_!SKIP PAST BLANKS€€_^1_%INA_"-$20_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%LDA_"UNPACK,I_%NEXT PARM. BEGIN WITH "A"_^1_%INA_"-$41_^1_%SAN_"ENTER1_^1_%RTJ_"BUP_+YES, TRY "S" NEXT_^1_%INA_"-$53_^1_%SAZ_"1_^1_%JMP*_!ENTER+4_^1_%ENA_"1_-ITS "ENTER ASSEM"_^1_%STA_"ASW_+SET ASW SWITCH_^1ENTER2 LDA_"=XCONS_!SET "I" TO CONS_^1_%STA-_!I_^1_%JMP_"MDEX+2_(GO GET NEXT IMAGE_^1ENTER1 INA_"-$3_$NOT A, IS IT "D"_^1_%SAZ_"1_^1_€€%JMP*_!ENTER+4_^1_%RTJ_"BUP_+YES ITS "D", A "R" NEXT_^1_%INA_"-$52_^1_%SAZ_"1_^1_%JMP*_!ENTER+4_^1_%CLR_"A_-ITS ENTER DRAFT_^1_%STA_"ASW_+SET ASW FOR DRAFT CODE_^1_%JMP*_!ENTER2_^1_%BZS_"ASWI(1),CSWI(1),DSWI(1),ESWI(1)_^1_%BZS_"UPA(1),PRO(1),FPRO(1)_^1_%EQU_"UNPACK(PTBL)_^1_%EQU_"NUBUF(SKLBUF)_^1PROC_!ENA_"10_^1FPR44 STA+_!NF+CONS_^1_%LDA_"=XSKPR_^1FPR45 RTJ+_!SKLMOV_^1_%ENA_"10_€€^1FPR46 STA+_!CT+CONS_^1FPR47 JMP+_!MACCAL_^1*_]_^1*_]_^1*_]_^1PITEST LDA_"UNPACK,I_#GET CURRENT CHAR._^1_%INA_"-$49_)IS CHAR._^1_%SAZ_"PTT52_(AN "I"_^1_%JMP_"ER3_*NO. ERROR_^1PTT52 ENA_"31_%YES. GET NR OF PRMTRS TO PROCESS_^1_%STA*_!(FPR44+1)_"STR. IN NF+CONS_^1_%ENA_"6_,GET NR. OF CHARS. IN "PICTUR"_^1_%STA*_!(FPR46+1)_"STR. IN CT+CONS_^1_%LDA_"=XPIC31_%GET ADR. OF PICTURE SK€€ELETON_^1_%RTJ*_!(FPR45+1)_"MOVE SKELETON_^1_%JMP*_!(FPR47+1)_"JMP TO MACCAL_^1*_]_^1*_]_^1*_]_^1DATPR3 LDA*_!SW935_#IS CURRENT PROGRAM FOR 935_^1_%SAN_"DP401_#NO._^1_%JMP*_!DP404_#YES_^1DP401 LDA_"UNPACK+6_#IS 1ST DIGIT OF_^1_%INA_"-$31_"PHASE A 1_^1_%SAZ_"DP402_#YES_^1_%JMP*_!DP405_#NO -- NOT AN R-LEVEL DATA STATEMENT_^1DP402 LDA_"UNPACK+7_#IS 2ND DIGIT OF_^1_%INA_"-$36_#PHASE €€A 6_^1_%SAZ_"DP402A_#YES_^1_%JMP*_!DP405_#NO -- NOT AN R-LEVEL DATA STATEMENT_^1DP402A LDA_"UNPACK+9_#IS CURRENT_^1_%INA_"-$31_#LEVEL ONE_^1_%SAZ_"DP403_#YES_^1_%JMP*_!DP405_#NO -- NOT AN R-LEVEL DATA STATEMENT_^1*_]_^1DP403 LDA*_!REC92_#CAN CURRENT R-LEVEL DATA STATEMENT BE_^1_%SAZ_"DP404_#CORRELATED TO A RECORD STATEMENT_^1_%INA_"-1_#YES. SUB 1 FROM NR. OF RECORD STATEMENTS_^1_%€€STA*_!REC92_#SAVE FOR NEXT R-LEVEL DATA STATEMENT_^1_%JMP*_!DP405_^1*_]_^1DP404 LDA*_!FLG35R_#CHANGE DATA SKELETON_^1_%STA_"FLG35+2_#TO GENERATE A DATA TABLE_^1_%LDA*_!FLG35R+1_#WITH A FOURTH WORD OF ALL_^1_%STA_"FLG35+3_#ZEROES -- CORRELATION ADR._^1DP405 JMP_"DATSTM_^1*_]_^1SW935 NUM_"1_#0 EQ 935 PROGRAM_^1FLG35R NUM_"$2030_^1_%NUM_"$3020_^1_%BZS_"REC92(1)_#INCREMENTED AT EACH€€ RECORD STATEMENT_^1*_]_^1*_]_^1******************************************************************_^1**_]_^1**_]_^1**_]_^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 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_^1CHPU_!ADC_"0_^1_%RAO-_!CT,I_)INCREMENT CHAR CT€€R_^1_%ENA_"0_^1_%LDQ-_!CT,I_^1_%LRS_"1_^1_%LDQ+_!0,Q_^1_%SAZ_"1_^1_%QLS_"8_^1_%QRS_"8_,Q CONTAINS 7 BIT CHAR_^1_%LDA-_!AF,I_^1_%SAZ_"3_^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_^1_%STA-_!SY,B_)ZERO SY,XMOD_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^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_%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*_!CHPU_^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_^1**_]_^1******************************************************************_^1**_]_^1READIM ADC_"€€0_^1_%RAO-_!LN,I_^1_%RTJ*_!READ_^1_%ENQ_"0_^1_%LDA*_!(READ1),Q_^1_%SAM_"2_^1_%INQ_"1_^1_%JMP*_!*-3_^1_%LDA_"=N$D00_^1_%STA*_!(READ1),Q_^1_%INQ_"1_^1_%LDA*_!(READ1),Q_^1_%SAP_"3_^1_%CLR_"A_^1_%STA*_!(READ1),Q_^1_%JMP*_!*-5_^1_%LDA-_!LN,I_^1_%ENQ_"41_^1_%STA*_!(READ1),Q_^1_%NOP_"0_^1_%NOP_"0_^1_%JMP*_!(READIM)_^1**_]_^1*****************************************************************€€*_^1**_]_^1READ_!ADC_"0_^1_%ENA_"-0_^1_%ENQ_"41_^1_%STA*_!(READ1),Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1_%ENA_"0_^1_%STA-_!RCS,I_^1**_]_^1**_#*** FREAD - READ FROM STANDARD INPUT MEDIUM ***_^1**_]_^1_%RTJ_"EXEC+6_^1_%NUM_"$800_^1_%NUM_"$18FA_^1_%NUM_"$28_^1READ1 ADC_"INBUF1_^1SECTOR NUM_"10_^1_%RAO*_!SECTOR_^1_%JMP*_!(READ)_^1SMOP_!NUM_"$35EE,$3E14,$15C4_^1**_]_^1**************€€******************************************************_^1**_]_^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)_^1**_]_^1********************************************************************_^1**_]_^1IL_#ADC_"0_^1_%LDA-_!BUFFSW,I_^1_%SAP_"1_^1_%JMP*_!(IL)_^1**_]_^1**_#*** INTERMEDIATE LANGUAGE OUTPUT ROUTINE - PAPE€€R TAPE ***_^1**_]_^1_%ENQ_"40_^1CHKCOM LDA_"INBUF1,Q_#IS_^1_%AND_"=N$FF00_#CHAR._^1_%ARS_"8_#A REPLACED_^1_%INA_"-$5F_$COMMA_^1_%SAN_"2_#NO_^1_%ENA_"$2C_#YES. STORE A COMMA_^1_%JMP*_!*+2_#AND STORE IN UPPER BITS_^1_%INA_"$5F_^1_%ALS_"8_^1_%STA*_!SAVE6_^1_%LDA*_!(CHKCOM+1),Q_#CHECK_^1_%AND_"=N$FF_#LOWER_^1_%INA_"-$5F_#HALF OF WORD FOR REPLACED COMMA_^1_%SAN_"2_^1_%ENA_"$2C_#SYMBOL S€€HOULD BE REPLACED_^1_%JMP*_!*+2_$WITH A COMMA_^1_%INA_"$5F_^1_%ADD*_!SAVE6_#ADD TO UPPER HALF OF WORD_^1_%STA*_!(CHKCOM+1),Q_#STORE WORD_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!CHKCOM_#GET ANOTHER WORD_^1***_]_^1*** BLOCK INTER SOURCE LANGUAGE TAPE_^1***_]_^1_%STA*_!SAVAQ_#SAVE_^1_%STQ*_!SAVAQ+1_#CALLERS_^1_%LDA-_!I_#PROGRAM_^1_%STA*_!SAVAQ+2_#REGISTERS_^1_%LDA*_!BUFADR_#SET I TO NEXT_^1_€€%STA-_!I_#LOGICAL RECORD AREA_^1_%CLR_"Q_#SET INDEX REG TO PKK FIRST DATA WORD_^1XFRBUF LDA_"INBUF1,Q_#TRANSFER WORK BUFFER TO_^1_%STA_"BUFTEN,B_#I/O DATA BLOCK_^1_%INQ_"-47_#IS INBUF1 EMPTIED_^1_%SQP_"2_#-YES, GO CHECK FOR BUFFER FULL_^1_%INQ_"48_#-NO, POINT TO NEXT WORD_^1_%JMP*_!XFRBUF_#GO TRANSFER MORE_^1_%LDA-_!I_#BUMP BUFFER ADDRESS TO_^1_%INA_"48_#NEXT LOGICAL RECORD AREA_^1€€_%STA*_!BUFADR_#AND STORE FOR NEXT TIME_^1_%SUB_"=N720_#IS OUTPUT BUFFER FULL_^1_%SAZ_"WTBLOK_#-YES, OUTPUT BLOCK_^1_%LDA_"ENDFLG_^1_%SAN_"WTBLOK_#-END, OUTPUT LAST BLOCK_^1_%JMP*_!RETADR_#-NO_^1_%BZS_"BUFADR(1),SAVAQ(3)_#SAVE AREAS_^1***** WRITE A BLOCK_^1***_]_^1WTBLOK RTJ_"EXEC+6_^1_%NUM_"$C00_^1_%NUM_"$8F9_^1_%NUM_"$2D0_^1_%ADC_"BUFTEN_^1SECWRT NUM_"11_^1_%STA*_!SECWRT_^1******€€_]_^1_%CLR_"Q_$CLEAR_^1_%STQ-_!I_#OUTPUT_^1BUFCLR LDA_"=N719_$BUFFER FOR_^1_%STQ_"BUFTEN,I THE NEXT BLOCK_^1_%RAO-_!I_^1_%SUB-_!I_^1_%SAZ_"1_^1_%JMP*_!BUFCLR_^1_%CLR_"A_^1_%STA*_!BUFADR_^1RETADR LDA*_!SAVAQ+2 RESTORE_^1_%STA-_!I CALLERS_^1_%LDA*_!SAVAQ PROGRAM_^1_%LDQ*_!SAVAQ+1_^1_%ENQ_"48_#CLEAR INBUF1_^1_%CLR_"A_^1_%STA_"INBUF1,Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-5_^1_%JMP*_!€€(IL)_^1SAVE6 ADC_"0_^1**_]_^1DDRAFT ADC_"0_^1_%RTJ-_!($F4)_)PRINT INPUT BUFFER_^1_%NUM_"$0C00_^1_%ADC_"CONTIN_^1_%NUM_"0_^1_%NUM_"$18FB_^1_%NUM_"40_^1_%ADC_"INBUF1_^1_%RTJ_"DIDDLE_^1_%JMP*_!(DDRAFT)_^1**_]_^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-_!$FC_^1_%ADD*_!PIL+2_^1_%STA*_!MER1_^1_%ENA_"0_^1_%STA-_!CSW,I_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_^1_%ADC_"CONTIN_^1_%ADC_"0_^1MER1_!ADC_"0_^1_%ADC_"10_^1_%ADC_"JJ9_^1_%RTJ_"DIDDLE_^1_%JMP*_!(MER)_^1ERT_"ALF_"1,SQ_^1_%ALF_"1,MC_^1_%ALF_"1,MD_^1_%ALF_"1,NR_^1JJ9_"NUM_"$2A2A_^1_%BSS_"PB(2)_^1_%ALF_"7,** **********_^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_%SQ€€Z_"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_^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_%S€€TA-_!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)_^1PUNT_!CLR_"A_^1_%STA_"MSW1+CONS_^1_%STA_"MSW2+CONS_^1_%STA_"ASW_^1OPTB_!NUM_"$CF7E_(LDA CLASS 1 COMPLEMEN€€T_^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_%NU€€M_"$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_^1_%NUM_"$1461 ECA_^1_%NUM_"$1061 DCA_^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,$5B0,$5C0_"CAQ,CAB,ECA,DCA_^1**_]_^1**_#*** END OF MAIN ROUTINE - PASS 1 ***_^1**_]_^1**_]_^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_%JMP*_!*+6_^1N2_#LDA-_!CHST,I_^1_%EOR_"=N$FF00_^1N1_#AND_"(*+2),Q_^1_%STA_"(*+2),Q_^1_%LDA-_!CHST,I_^1_%JMP*_!(NEWPUT)_^1CHRPIC ADC_"0_^1_%RAO-_!CT,I_^1_%ENA_"0_^1_%LDQ-_!CT,I_^1_%LRS_"1_^1_%LDQ_"(*+2),Q_^1_%SAZ_"1_^1_%QLS_"8_^1_%QRS_"8_^1_%SQM_"4_^1_%TRQ_"A_^1_%STA-_!CS,I_^1_%INQ_"-$D_^1_%SQN_"1_^1_%ENA_"-1_/SET A NEG FOR C€€R_^1_%JMP*_!(CHRPIC)_^1CRPUT ADC_"0_^1_%LDQ-_!NC,I_^1_%INQ_"-72_^1_%SQN_"6_^1_%ENQ_"36_^1CR1_"LDA_"=N$D00_^1QCC1_!STA_"(*+2),Q_^1_%JMP*_!(CRPUT)_^1_%INQ_"72_^1_%ENA_"0_^1_%LRS_"1_^1_%INQ_"1_^1_%JMP*_!CR1_^1**_]_^1MACCAL LDA_"=XCONS_^1_%STA-_!I_^1_%RAO_"ASW_#SET DRAFT SWITCH FOR 1700 CODE_^1_%CLR_"A_^1_%STA-_!CS,I_^1_%RAO-_!NF,I_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"€€0_^1_%NOP_"0_^1MCC3_!LDA-_!INPADR,I_^1_%STA-_!CRPADR,I_^1_%LDA_"=XACTBL2_^1_%STA-_!ACADR,I_^1_%STA_"MCCON_^1_%ENA_"0_0ZERO OUT ACTUAL_^1_%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**_]_^1**_]_^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_€€%RTJ*_!(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*_!€€GETCH_^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*_!L€€OCPRC_#* END OF PARM._^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_%NOP_"0_$FOR BLKS WITHIN CONST_^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_%NOP_"0_^1_%JMP*_!MC5_*€€NULL PARAM LAST-NOT CONT_^1_%RAO-_!MSW2,I_+CONTINUATION IMAGE_^1MC7_"LDA_"=N$8000_^1_%ENQ_"42_/SET MACRO CALL BIT_^1_%ADD+_!0,Q_^1_%STA+_!0,Q_^1_%ENQ_"2_0SAVE MACRO NAEM_^1_%LDA-_!SY,B_^1_%STA-_!TP1,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-4_^1_%JMP_"CONAC_^1**_]_^1MCCON ADC_"(CONS+ACADR),MACER_^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_/SET BIT IN IL FOR_^1_%ADD*_!(MC7+4),Q_(MACRO CALL_^1_%STA*_!(MC7+4),Q_^1_%RAO-_!MSW1,I_^1MC8_"JMP*_!MCCON-2 CONAC_^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_^1**_]_^1**_]_^1MACCON STA-_!T1,I_)SAVE A REG_^1_%LDA_"=N$4000_%PUT CONTINUATION_^1_%ENQ_"42_+BIT IN IL_^1_%ADD*_!(MC7+4),Q INPADR_^1_%STA*_!(MC7+4),Q INPADR_^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)_^1**_]_^1MV1_"ADC_"0_,MOVE WHOLE IMAGE?_^1_%RTJ_"CHRPIC_^1_%SAM_"1_^1_%RTJ_"NEWPUT_^1_%SAM_"1_^1_%JMP*_!MV1+1_^1_%RTJ_"CRPUT_^1_%JMP*_!(MV1)_^1**_]_^1**_]_^1*********************************************************************_^1**_]_^1MACGET LDA_"=XSKLBUF_€€^1_%STA-_!CRPADR,I_$FOR CHRPIC_^1MG1_"LDA+_!ACTBL_^1_%EOR_"=N$100_^1_%STA*_!(MG1+1)_^1_%LDA-_!INPADR,I_$SET ADDR FOR_^1_%STA-_!SKLADR,I_$NEWPUT_^1_%LDA_"DRCT_^1_%STA-_!CT,I_^1_%ENA_"-1_/INITIALIZE CTRS FOR_^1_%STA-_!NC,I_^1_%RTJ*_!(MG7+1) CHRPIC_^1_%SAP_"1_^1_%JMP*_!MG2A_-END OF INPUT IMAGE_^1_%LDQ-_!PM,I_)PROG MACRO_^1_%SQN_"3_,YES_^1_%INA_"-$21_-NO-IS THIS EXCLAM PT_^1_%SAN_"2_0N€€O_^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_"4_^1MG7_"RTJ+_!CHRPIC_^1_%SAM_"1_^1_%JMP*_!MG5_^1_%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 PARAM_^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_%LDQ-_!CT,I_^1_%STQ_"DRCT_^1_%JMP_"CONAB_^1ACTPIC ADC_"0_^1_%RAO-_!ACC,I_^1_%ENA_"0_^1_%LDQ-_!ACC,I_^1_%LRS_"1_^1_%LDQ*_!(MG1+1),Q_%ACTBL>>_^1_%SAZ_"1_^1_%QLS_"8_^1_%QRS_"8_^1_%TRQ_"A_^1_%JMP*_!(ACTPIC)_^1**_]_^1**_]_^1**_]_^1**_]_^1CO_#ENQ_"1_^1_%STQ_"CONS+CSW_^1_%RTJ-_!($F4)_(EXIT_^1_%NUM_"$A00_^1RCO_"QLS_"1_^1_%INQ_"1_^1_%STQ_"C€€ONS+RCS_^1_%JMP*_!CO+3_^1**_]_^1SKLMOV ADC_"0_+MOVE SKELETON TO BUFFER_^1_%STA_"$FF_^1_%LDA_"0,I_/GET LENGTH OF SKELETON_^1_%TRA_"Q_^1LOOP_!LDA_"0,B_^1_%STA_"SKLBUF-1,Q_^1_%INQ_"-1_^1_%SQZ_"1_1TEST FOR COMPLETE_^1_%JMP*_!LOOP_^1_%ENA_"-1_^1_%STA_"DRCT_^1_%JMP*_!(SKLMOV)_(RETURN TO CALLER_^1***********************************************************************_^1***_!THIS IS THE MA€€CRO SKELETON FOR THE DRAFT MACRO ASSIGN._^1***_!VFD STATEMENTS ARE USED TO BUILD THE ASSIGN TABLE._^1***_]_^1***_(PARAMETER_-SKELETON LABEL_!NAME_^1***_(FILE NAME_402_(A_^1***_)INPUT/OUTPUT_203_(B_^1***_(UNIT NUMBER_304_(C_^1***_(DEVICE_805_(D_^1***_(RECORD MARK_306_(E_^1***_(MODE_907_(F_^1***_(DENSITY_708_(G_^1***_(MULTI_909_(H_^1*** BLOCK COUNT FOR CLOSE/OPEN VERB_^1SKAS1 NUM_"1€€07,$204A,$4D50,$2044,$5A20_^1SKAS_!NUM_"$200D_^1***_!FIRST STATEMENT_^1*** 02 VFD A48/ 02,N1/ 03,N7/ 04,N8/ 05,N1/ 06,N1/ 07,N2/ 08_^1***_),N12/ 09 CR_^1_%NUM_"$2702,$2056,$4644,$2041,$3438,$2F27_^1_%NUM_"$020D_^1***U1 IFA '03,GT,F0_^1_%NUM_"$2049,$4641,$2024,$2703,$2C47,$542C,$2439,$390D_^1*** VFD N8/'03,N1/'04,N7/'05 CR_^1_%NUM_"$2056,$4644,$204E,$382F,$2427,$032C,$4E31,$2F27_^1€€_%NUM_"$042C,$4E37,$2F27,$0520,$0D20_^1***EIF U1 CR_^1_%NUM_"$4549,$4620,$2020,$200D_^1*** U2 IFA '03,LT,F0 CR_^1_%NUM_"$2049,$4641,$2024,$2703,$2C4C,$542C,$2439,$390D_^1**** VFD N8/'03,N1/'04,N7/'05 CR_^1_%NUM_"$2056,$4644,$204E,$382F,$2703,$2C4E,$312F,$2704_^1_%NUM_"$2C4E,$372F,$2705,$0D20_^1*** EIF U2 CR_^1_%NUM_"$4549,$4620,$200D_^1_%NUM_"$2049,$4641,$2024,$2703,$2C45,$512C,$24€€39,$390D_^1_%NUM_"$2020,$5646,$4420,$4E38,$2F27,$032C,$4E31,$2F27_^1_%NUM_"$042C,$4E37,$2F27,$0520,$0D20_^1_%NUM_"$4549,$4620,$2020,$200D_^1*** VFD N1/'06,N1/'07,N2/'08,N12/'09 CR_^1_%NUM_"$2056,$4644,$204E,$312F,$2706,$2C4E,$312F_^1_%NUM_"$2707,$2C4E,$322F,$2708,$2C4E,$3132,$2F27,$090D_^1_%NUM_"$2041,$4443,$2030,$200D_^1***_!SECOND STATEMENT_^1***_!EMC_]_^1_%NUM_"$2045,$4D43,$200D€€_^1***********************************************************************_^1***_!THIS IS THE MACRO SKELETON FOR THE DRAFT MACRO CTL._^1***_!VFD STATEMENTS ARE USED TO BUILD THE CONTROL TABLE._^1***_]_^1***_)PARAMETER_.SKELETON LABEL_"NAME_^1***_)FILE NAME_602_(A_^1***_(END OF RECORD_203_(B_^1***_(END OF LINE_404_(C_^1***_)END OF PAGE_405_(D_^1***_(FIELD SEPARATOR_/06_(E_^1***_)DEL€€ETE CHARACTER_.07_(F_^1***/////// DELETE FIELD_208_(G_^1***_)DELETE LINE_209_(H_^1***_(DELETE RECORD_10A_(I_^1***_)NO. OF BLANKS END LINE_'0B_(J_^1***_(SKIP OPTION ON ERROR_)0C_(K_^1*** NO SEARCH FOR FIRST LINE_)0D_^1***_]_^1*** ENT DCTL_^1***_]_^1SKCT1 NUM_"57_^1_%NUM_"$2045,$4E54,$2044,$4354,$4C0D_^1_%NUM_"$4443_^1***_!FIRST STATEMENT_^1***_!VFD A48/ 02,N8/$ 03,N8/$ 04,N8/$ 05,€€N8/$ 06,N8/$ 07,_^1***_%N8/$ 08 CR_^1SKCT_!NUM_"$544C_^1_%NUM_"$2056,$4644,$2020,$4134,$382F_^1_%NUM_"$2702,$2C4E,$382F,$2427,$032C_^1_%NUM_"$4E38,$2F24,$2704,$2C4E,$382F_^1_%NUM_"$2427,$052C,$4E38,$2F24,$2706_^1_%NUM_"$2C4E,$382F,$2427,$072C,$4E38_^1_%NUM_"$2F24,$2708,$0D20_^1***_]_^1***_!SECOND STATEMENT_^1*** VFD N8/$'09,N8/$'0A,N1/'0D,N7/'0B,N8/'0C_^1_%NUM_"$5646,$4420,$4E38,$2€€F24,$2709_^1_%NUM_"$2C4E,$382F,$2427,$0A2C,$4E31_^1_%NUM_"$2F27,$0D2C,$4E37,$2F27,$0B2C_^1_%NUM_"$4E38,$2F27,$0C0D_^1***_]_^1***_!THIRD STATEMENT_^1***_!EMC CR_^1_%NUM_"$2045,$4D43,$200D_^1***********************************************************************_^1***_!THIS IS THE MACRO SKELETON FOR THE DRAFT MACRO ENV._^1***_!VFD STATEMENTS ARE USED TO BUILD ENVIRONMENT TABLE._^1**€€*_!PAGE,RECORD AND FIELD STATEMENTS CALL THIS SKELETON._^1***_)PARAMETER_.SKELETON LABEL_!NAME_^1***_)PAGE/RECORD/FIELD CODE_'02_(A_^1***_(FORM NUMBER_303_(B_^1***_(CONTINIOUS/SEPARATE_+04_)C_^1***_)MAXIUM LINES_205_(D_^1***//////// LEFT SCAN LIMIT_/06_(E_^1***_(RIGHT SCAN LIMIT_.07_(F_^1***_(MODE_:08_(G_^1***_(FONT_:09_(H_^1***_(LINE LOCATE COORDINATE_'0A_(I_^1***_(SCAN HIGHT_40B_€€(J_^1***_(SKIP BEFORE/AFTER_,0C_(K_^1***_(SKIP COUNT_30D_'L_^1***_(MISSING FORM # FLAG_+0E_(X_^1*** ON-LINE CHARACTER CORRECTION_+0F_^1*** CORRELATION FLAG_710_^1***_]_^1***_!FIRST STATEMENT_^1*** 10_"VFD N3/'02,N5/'0B,N2/'0C,N6/'0D,N8/'07,N8/'06_^1SKEN_!NUM_"123_^1_%NUM_"$2710,$2020,$5646,$4420,$4E33_^1_%NUM_"$2F27,$022C,$4E35,$2F27,$0B2C_^1_%NUM_"$4E32,$2F27,$0C2C,$4E36,$2F27_^1_€€%NUM_"$0D2C,$4E38,$2F27,$072C,$4E38_^1_%NUM_"$2F27,$060D_^1***_!SECOND STATEMENT_^1*** VFD N3/'09,N1/'0F,N3/'09,N9/'0A_^1_%NUM_"$2056,$4644,$204E,$332F,$2709_^1_%NUM_"$2C4E,$312F,$270F,$2C4E,$332F,$2708_^1_%NUM_"$2C4E,$392F,$270A,$200D_^1***_]_^1***_!THIRD STATEMENT_^1***_!ADC 0 CR_^1_%NUM_"$2041,$4443,$2030,$200D_^1***_]_^1***_!FOURTH STATEMENT_^1**** QZ IFA 02,EQ,4 CR_^1_%NUM_"€€$515A_^1_%NUM_"$2049,$4641,$2027,$022C,$4551_^1_%NUM_"$2C34,$200D_^1_%NUM_"$2A2A,$5041,$4745,$200D,$5151_^1***_]_^1***_!FIFTH STATEMENT_^1*** QQ IFA 0E,EQ,0 CR_^1_%NUM_"$2049_^1_%NUM_"$4641,$2027,$0E2C,$4551_^1_%NUM_"$2C30,$200D_^1***_]_^1***_!SIXTH STATEMENT_^1*** VFD A24/'03,N2/'OF,N6/'05 CR_^1_%NUM_"$2056,$4644,$2041,$3234,$2F27_^1_%NUM_"$032C,$4E32,$2F30,$2C4E,$362F,$2705,$20€€0D_^1_%NUM_"$2045,$4946,$2051,$510D,$4E5A_!EIF QQ_^1***_]_^1***_!SEVENTH STATEMENT_^1*** NZ IFA 0E,EQ,1 CR_^1_%NUM_"$2049,$4641,$2027,$0E2C,$4551_^1_%NUM_"$2C31,$200D_^1***_]_^1*** EIGHTH STATEMENT_^1*** VFD N16/03,N8/03,N2/'OF,N6/'05 CR_^1_%NUM_"$2056,$4644,$204E,$3136,$2F27,$032C,$4E38,$2F27_^1_%NUM_"$032C,$4E31,$2F30,$2C4E,$372F,$2705,$200D_^1***_]_^1***_!NINTH STATEMENT_^1***€€ EIF NZ_^1_%NUM_"$2045,$4946,$204E,$5A0D_^1_%NUM_"$2045,$4946,$2051,$5A0D_!EIF_!QZ_^1SKEN1 NUM_"$2045,$5155,$2044,$454E,$5628,$2710,$290D_^1*** ENT DENV_^1_%NUM_"$2045,$4E54,$2044,$454E,$560D_^1***_!TENTH STATEMENT_^1***_!EMC CR_^1SKEN2 NUM_"$2045,$4D43,$200D_^1***_!THIS IS THE MACRO SKELETON FOR_5***_^1***_!THE DRAFT MACRO FORM, FOR THE 955._0***_^1***_V***_^1***_!PARAMETER_:S€€KELETON LABEL ***_^1***_W***_^1***_!FILE NAME_AO2_%***_^1***_!END OF LINE_?03_%***_^1***_!END OF RECORD_=04_%***_^1***_!END OF PAGE_?05_%***_^1***_!FIELD SEPARATOR_;06_%***_^1***_!DELETE CHAR.-CANCEL_707_%***_^1***_!DELETE FIELD_>08_%***_^1***_!DELETE LINE_?09_%***_^1*** NUMBER OF BLANKS_*0A_!***_^1***_!BLANK LINE LIMIT_:0B_%***_^1***_!DOCUMENT LENGTH_;0C_%***_^1***_!STEPPING INCR€€EMENT_80D_%***_^1***_!FIRST LINE ADVANCE_80E_%***_^1***_!LINE LOCATE COORD._80F_%***_^1***_!FORM NUMBER_?10_%***_^1***_!DOCUMENT READY_711_%***_^1***_!MIRROR IMAGE_<12_$****_^1******* NO SEARCH_513_-***_^1************************************************************_^1*** NUMBER WORDS IN SKELETON, LABEL DFOR_^1SKFO_!NUM_"126,$4446,$4F52_^1** FIRST STATEMENT LABELED DFOR_^1** VFD A€€48/'02,N13/$0420,N1/'13,N2/$'0D,N1/0_^1** N7/$'03,N1/0,N3/'0A,N4/9 CR_^1_%NUM_"$2056,$4644,$2041,$3438,$2F27,$022C,$4E31_^1_%NUM_"$332F,$2430,$3432,$302C,$4E31,$2F27,$132C_^1_%NUM_"$4E32,$2F24,$270D_^1_%NUM_"$2C4E,$312F,$302C,$4E37,$2F24,$2703,$2C4E_^1_%NUM_"$312F,$302C,$4E33,$2F27,$0A2C,$4E34,$2F39,$0D20_^1*** SECOND STATEMENT_^1*** VFD N1/0,N7/$'07,N8/$A,N1/0,N7/$'09,N8/$B CR_€€^1_%NUM_"$2056,$4644,$204E,$312F,$302C,$4E37,$2F24_^1_%NUM_"$2707,$2C4E,$382F,$2441,$2C4E,$312F,$302C_^1_%NUM_"$4E37,$2F24,$2709,$2C4E,$382F,$2442,$0D20_^1*** THIRD STATEMENT_^1*** VFD N1/0,N7/'0B,N2/$'0C,N6/$C,N8/0,N4/$'12,N4/$D,N16/$3E CR_^1_%NUM_"$5646,$4420,$4E31,$2F30,$2C4E,$372F,$270B_^1_%NUM_"$2C4E,$322F,$2427,$0C2C,$4E36,$2F24,$432C_^1_%NUM_"$4E38,$2F30,$2C4E,$342F,$2427,€€$122C,$4E34_^1_%NUM_"$2F24,$442C,$4E31,$362F,$2433,$450D_^1*** FOURTH STATEMENT_^1*** VFD N10/'11,N6/$F,N8/'0F,N8/'0E,N8/$'04,N8/$'05 CR_^1_%NUM_"$2056,$4644,$204E,$3130,$2F27,$112C,$4E36_^1_%NUM_"$2F24,$462C,$4E38,$2F27,$0F2C,$4E38,$2F27_^1_%NUM_"$0E2C,$4E38,$2F24,$2704,$2C4E,$382F,$2427,$050D_^1*** FIFTH STATEMENT_^1*** VFD N8/$'06,N8/$'08,A32/'10 CR_^1_%NUM_"$2020,$5646,$44€€20,$4E38,$2F24,$2706,$2C4E_^1_%NUM_"$382F,$2427,$082C,$4133,$322F,$2710,$0D20_^1*** SIXTH STATEMENT_^1*** ENT DFOR CR_^1_%NUM_"$454E,$5420,$4446,$4F52,$0D20_^1*** SEVENTH STATEMENT_^1** EMC CR_]_^1_%NUM_"$454D,$4320,$200D_^1************************************************************_^1***_!THIS IS THE MACRO SKELETON FOR THE DRAFT_****_^1*** MACRO DESC. LREC, LINE AND AREA_+***_^1*€€**_!STATEMENTS CALL THIS SKELETON. FOLLOWING_)***_^1***_W***_^1***_!PARAMETER_:SKELETON LABEL ***_^1***_W***_^1***_!LREC/LINE/AREA CODE_702_%***_^1***_!LEFT MIRROR COORD._803_%***_^1***_!RIGHT MIRROR COORD._704_%***_^1***_!SCAN HEIGHT FOR LREC/LINE_105_%***_^1***_!CHARACTER SET FOR ANSI_306_%***_^1***_!FONT LINE/CHAR. PER INCH_107_%***_^1***_!QUANTIZING LEVEL_:08_%***_^1***_!CHAR€€. PEAK REFERENCE_609_%***_^1***_!VERTICAL LINE THICKENING_20A_%***_^1***_!HORIZONTAL LINE THICKENING_/0B_%***_^1***_!ANSI SIZE C SELECTED_60C_%***_^1***_!ANSI SIZE A LOWER CASE SEL._.0D_%***_^1***_!HANDPRINT SELECTED_80E_%***_^1***_!ALTERNATE FONT SELECTION_10F_%***_^1***_!SKIP COUNT FOR LREC/LINE_210_%***_^1***_!DO SKIP/LINE OR FSP/AREA_011_%***_^1*** ON LINE CORRECTION - LREC/LIN€€E_(12_#***_^1*** CORRELATION FLAG - LREC ONLY_*13_#***_^1************************************************************_^1** NUMBER OF WORDS IN SKELETON_^1SKDE_!NUM_"$00D0_^1** SECOND STATEMENT_^1** SECOND STATEMENT_^1** '13 VFD N4/'02,N2/'12,N2/'05,N1/'11,N7/'10 CR_^1_%NUM_"$2713,$2056,$4644,$204E,$342F,$2702,$2C4E_^1_%NUM_"$322F,$2712,$2C4E,$322F,$2705,$2C4E,$312F_^1_%NUM_"$2711,$€€2C4E,$372F,$2710,$0D20_^1** THIRD STATEMENT_^1** IFA '02,NE,2 CR_^1_%NUM_"$4946,$4120,$2702,$2C4E,$452C,$320D_^1** FOURTH STATEMENT_^1** VFD N8/'04,N8/'03,N16/0 CR_^1_%NUM_"$2056,$4644,$204E,$382F,$2704,$2C4E,$382F,$2703_^1_%NUM_"$2C4E,$3136,$2F30,$0D20_^1** FIFTH STATEMENT_^1** IFA '02,EQ,8 CR_^1_%NUM_"$4946,$4120,$2702,$2C45,$512C,$380D_^1** SIXTH STATEMENT_^1** VFD N1/'0C,N3/'06€€,N1/'0D,N4/'0F,N2/'07,N1/'0E,N4/1 CR_^1_%NUM_"$2056,$4644,$204E,$312F,$270C,$2C4E,$332F,$2706_^1_%NUM_"$2C4E,$312F,$270D,$2C4E,$342F,$270F,$2C4E,$322F_^1_%NUM_"$2707,$2C4E,$312F,$270E,$2C4E,$342F,$310D_^1** SEVENTH STATEMENT_^1** VFD N8/'08,N4/'09,N4/5,N1/'0A,N7/'0B,N8/6 CR_^1_%NUM_"$2056,$4644,$204E,$382F,$2708,$2C4E,$342F_^1_%NUM_"$2709,$2C4E,$342F,$352C,$4E31,$2F27,$0A2C_^1_%NUM€€_"$4E37,$2F27,$0B2C,$4E38,$2F36,$0D20_^1** EIGHTH STATEMENT_^1** EIF CR_]_^1_%NUM_"$4549,$4620,$200D_^1** NINTH STATEMENT_^1** IFA '02,LT,8 CR_^1_%NUM_"$2049,$4641,$2027,$022C,$4C54,$2C38,$0D20_^1** TENTH STATEMENT_^1**VFD N1/'0C,N3/'06,N1/'0D,N4/'0F,N2/'07,N1/'0E,N4/1 CR_^1_%NUM_"$5646,$4420,$4E31,$2F27,$0C2C,$4E33,$2F27_^1_%NUM_"$062C,$4E31,$2F27,$0D2C,$4E34,$2F27,$0F2C_^1_%NUM_"€€$4E32,$2F27,$072C,$4E31,$2F27,$0E2C,$4E34_^1_%NUM_"$2F31,$0D20_^1** ELEVENTH STATEMENT_^1** IFA '02,EQ,2 CR_^1_%NUM_"$4946,$4120,$2702,$2C45,$512C,$3220,$0D20_^1** TWELFTH STATEMENT_^1** VFD N8/'03,N8/2,N8/'04,N1/'11,N7/4 CR_^1_%NUM_"$5646,$4420,$4E38,$2F27,$032C,$4E38,$2F32_^1_%NUM_"$2C4E,$382F,$2704,$2C4E,$312F,$2711,$2C4E_^1_%NUM_"$372F,$340D_^1** THRITEENTH STATEMENT_^1** EIF C€€R_]_^1_%NUM_"$2045,$4946,$2020,$200D_^1** FOURTEENTH STATEMENT_^1** T2 IFA '02,LT,8 CR_^1_%NUM_"$5432,$2049,$4641,$2027,$022C,$4C54,$2C38,$200D_^1** FIFTEENTH STATEMENT_^1**VFD N8/'08,N4/'09,N4/5,N1/'0A,N7/'0B,N8/6 CR_^1_%NUM_"$2056,$4644,$204E,$382F,$2708,$2C4E,$342F_^1_%NUM_"$2709,$2C4E,$342F,$352C,$4E31,$2F27,$0A2C_^1_%NUM_"$4E37,$2F27,$0B2C,$4E38,$2F36,$0D20_^1** EIF T2 CR_^1_€€%NUM_"$4549,$4620,$5432,$200D_^1** EIGHTEENTH STATEMENT_^1** EIF CR_]_^1_%NUM_"$2045,$4946,$200D_^1** NINETEENTH STATEMENT_^1** IFC '13,EQ,D0 CR_^1_%NUM_"$2049,$4643,$2027,$132C,$4551,$2C44,$300D_^1** TWENTIETH STATEMENT_^1** EQU DESC('13) CR_^1_%NUM_"$2045,$5155,$2044,$4553,$4328,$2713,$290D_^1** TWENTY-FIRST STATEMENT_^1** ENT DESC CR_^1_%NUM_"$2045,$4E54,$2044,$4553,$430D_^1**€€ TWENTH-SECOND STATEMENT_^1** EIF CR_]_^1_%NUM_"$2045,$4946,$200D_^1** TWENTY-THIRD STATEMENT_^1** EMC CR_]_^1_%NUM_"$2045,$4D43,$200D_^1***********************************************_^1***********************************************_^1*** THIS IS THE MACRO SKELETON FOR THE DRAFT *_^1*** MACRO DESC. FOR HFIELD AND HCHAR._#****_^1***_G****_^1*** PARAMETER_+SKELETON LABEL_!****_^€€1***_G****_^1*** HFIELD/HCHAR CODE_$02_-***_^1*** HAND>RINT IDENTIFIER 1_#03_(***_^1***_'THROUGH_8***_^1*** HANDPRINT IDENTIFIER 28_!1E_(***_^1**********************************************_^1** NUMBER OF WORDS IN SKELETON_^1SKHP_!NUM_"$C5_^1** FIRST STATEMENT_^1** VFD N4/'02,N2/'03,N2/'04,N2/'05,N2/'06,N2/'07,N2/'08 CR_^1_%NUM_"$2056,$4644,$204E,$342F,$2702,$2C4E,$322F,$2703_^€€1_%NUM_"$2C4E,$322F,$2704,$2C4E,$322F,$2705,$2C4E,$322F_^1_%NUM_"$2706,$2C4E,$322F,$2707,$2C4E,$322F,$2708,$200D_^1** SECOND STATEMENT_^1** M1 IFA '09,EQ,0 CR_^1_%NUM_"$4D31,$2049,$4641,$2027,$092C,$4551,$2C30,$0D20_^1** THIRD STATEMENT_^1** IFA '0A,NE,0 CR_^1_%NUM_"$4946,$4120,$270A,$2C4E,$452C,$300D_^1** FOURTH STATEMENT_^1** EIF M1 CR_^1_%NUM_"$2045,$4946,$204D,$310D_^1** FIF€€TH STATEMENT_^1** VFD N6/'09N2/'0A,N2/'0B,N2/'0C,N2/'0D,N2/'0E CR_^1_%NUM_"$2056,$4644,$204E,$362F,$2709,$2C4E,$322F,$270A_^1_%NUM_"$2C4E,$322F,$270B,$2C4E,$322F,$270C,$2C4E,$322F_^1_%NUM_"$270D,$2C4E,$322F,$270E,$200D_^1** SIXTH STATEMENT_^1** M2 IFA '0F,EQ,0 CR_^1_%NUM_"$4D32,$2049,$4641,$2027,$0F2C,$4551,$2C30,$0D20_^1** SEVENTH STATEMENT_^1** IFA '10,NE,0 CR_^1_%NUM_"$4946,$41€€20,$2710,$2C4E,$452C,$300D_^1** EIGHTH STATEMENT_^1** EIF M2_]_^1_%NUM_"$2045,$4946,$204D,$320D_^1** NINETH STATEMENT_^1** VFD N6,/'0F,N2/'10,N2/'11,N2/'12,N2/'13,N2/'14 CR_^1_%NUM_"$2056,$4644,$204E,$362F,$270F,$2C4E,$322F,$2710_^1_%NUM_"$2C4E,$322F,$2711,$2C4E,$322F,$2712,$2C4E,$322F_^1_%NUM_"$2713,$2C4E,$322F,$2714,$200D_^1** TENTH STATEMENT_^1** M3 IFA '15,EQ,0 CR_^1_%NUM_"$€€4D33,$2049,$4641,$2027,$152C,$4551,$2C30,$0D20_^1** ELEVENTH STATEMENT_^1** IFA '16,NE,0 CR_^1_%NUM_"$4946,$4120,$2716,$2C4E,$452C,$300D_^1** TWELVTH STATEMENT_^1** EIF M3_]_^1_%NUM_"$2045,$4946,$204D,$330D_^1** THIRTEENTH STATEMENT_^1** VFD N6/'15,N2/'16,N2/'17,N2/'18,N2/'19,N2/'1A CR_^1_%NUM_"$2056,$4644,$204E,$362F,$2715,$2C4E,$322F,$2716_^1_%NUM_"$2C4E,$322F,$2717,$2C4E,$322F,€€$2718,$2C4E,$322F_^1_%NUM_"$2719,$2C4E,$322F,$271A,$200D_^1** FOUTEENTH STATEMENT_^1** M4 IFA '1B,EQ,0 CR_^1_%NUM_"$4D34,$2049,$4641,$2027,$1B2C,$4551,$2C30,$0D20_^1** FIFTEENTH STATEMENT_^1** IFA '1C,NE,0 CR_^1_%NUM_"$4946,$4120,$271C,$2C4E,$452C,$300D_^1** SIXTEENTH STATEMENT_^1** EIF M4 CR_^1_%NUM_"$2045,$4946,$204D,$340D_^1** NINTH STATEMENT_^1** VFD N6/'1B,N2/'1C,N2/'1D,N2/€€'1E,N2/0,N2/0 CR_^1_%NUM_"$2056,$4644,$204E,$362F,$271B,$2C4E,$322F,$271C_^1_%NUM_"$2C4E,$322F,$271D,$2C4E,$322F,$271E,$2C4E,$322F_^1_%NUM_"$302C,$4E32,$2F30,$0D20_^1** EIGHTEENTH STATEMENT_^1** EIF CR_]_^1_%NUM_"$2045,$4946,$200D_^1** NINETEENTH STATEMENT_^1_%NUM_"$2045,$4D43,$200D_^1*******************************************************_^1*** THIS IS THE MACRO SKELETON FOR THE €€DRAFT MACRO ***_^1*** SPEC, FOR THE 929._=***_^1***_P***_^1*** PARAMETER_2SKELETON LABEL_$***_^1***_P***_^1*** FILE NAME_702_,***_^1*** LEVEL (QUANTIZING)_-03_,***_^1*** AUTO SORT_704_,***_^1*** FIELD TERMINATOR 1_.05_,***_^1*** FIELD TERMINATOR 2_.06_,***_^1*** FIELD TERMINATOR 3_.07_,***_^1*** REVERSE BUFFER_208_-***_^1*** STACKER FULL_409_,***_^1*** MARK READ LOCATION_.0A_-***_€€^1*** CANCEL CHARACTER_10B_-***_^1*******************************************************_^1*** NUMBER OF WORDS IN SKELETON, LABEL DSPC_(***_^1SKSPC NUM_"48,$4453,$5043_^1** FIRST STATEMENT_^1** VFD A48/'02,N8/$'05,N8/$'06,N8/'07,N8/'0A,_^1** VFD N1/'08,N10/'0B,N2/'03,N1/'09,N2/'04 CR_^1_%NUM_"$2056,$4644,$2041,$3438,$2F27,$022C_^1_%NUM_"$4E38,$2F24,$2705,$2C4E,$382F,$2427,$062C_^€€1_%NUM_"$4E38,$2F24,$2707,$2C4E,$382F,$270A,$0D20_^1_%NUM_"$5646,$4420,$4E31,$2F27,$082C,$4E31,$302F_^1_%NUM_"$270B,$2C4E,$322F,$2703,$2C4E,$312F,$2709_^1_%NUM_"$2C4E,$322F,$2704,$200D_^1*** SECOND STATEMENT_^1** ENT DSPC CR_^1_%NUM_"$2045,$4E54,$2044,$5350,$430D_^1*** THIRD STATEMENT_^1** EMC CR_]_^1_%NUM_"$2045,$4D43,$200D_^1*******************************************************€€_^1*******************************************************_^1*** THIS IS THE MACRO SKELETON FOR THE DRAFT MACRO ***_^1*** RZON (ZONE STATEMENT) FOR THE 929._-***_^1***_P***_^1*** PARAMETER_0SKELETON LABEL_'***_^1***_P***_^1*** LEADING READ COORD._.02_+***_^1*** TRAILING READ COORD._-03_+***_^1*** FONT SELECT_604_+***_^1*** CHARACTER SET_405_+***_^1*** MARK READ SELECT_106_+***_^1*€€** CONVERT MARK READ_007_+***_^1*** NO-RESCAN_808_+***_^1*** SUPPRESS BLANKS_209_+***_^1*** FIELD MARK_70A_+***_^1*******************************************************_^1*** NUMBER OF WORDS IN SKELETON, LABEL RZON_^1RZONE NUM_"90_^1_%NUM_"$2045,$4E54,$2052,$5A4F,$200D_^1_%NUM_"$525A,$4F20_^1** FIRST STATEMENT_^1** VFD N16/0,N16/0,N16/0,N16/0 CR_^1_%NUM_"$2056,$4644,$204E,$3136€€,$2F30,$2C4E,$3136,$2F30_^1_%NUM_"$2C4E,$3136,$2F30,$2C4E,$3136,$2F30_^1RZONE1 NUM_"$0D20,$2020_^1*** SECOND STATEMENT_^1** IFA '04,NE,0 CR_^1_%NUM_"$4946,$4120,$2704,$2C4E,$452C,$300D_^1*** THIRD STATEMENT_^1** VFD N1/'08,N1/'0A,N2/'09,N8/'04,N4/'05 CR_^1_%NUM_"$2056,$4644,$204E,$312F,$2708,$2C4E,$312F,$270A_^1_%NUM_"$2C4E,$322F,$2709,$2C4E,$382F,$2704,$2C4E,$342F_^1_%NUM_"$2705,$€€0D20_^1** EIF CR_]_^1_%NUM_"$4549,$4620,$200D_^1*** FIFTH STATEMENT_^1** F2 IFA '04,EQ,0 CR_^1_%NUM_"$4632,$2049,$4641,$2027,$042C,$4551,$2C30,$0D20_^1*** SIXTH STATEMENT_^1** VFD N1/'08,N1/'0A,N4/'07,N10/'06 CR_^1_%NUM_"$5646,$4420,$4E31,$2F27,$082C,$4E31,$2F27,$0A2C_^1_%NUM_"$4E34,$2F27,$072C,$4E31,$302F,$2706,$0D20_^1*** SEVENTH STATEMENT_^1** EIF F2 CR_^1_%NUM_"$4549,$4620,$463€€2,$200D_^1*** EIGHTH STATEMENT_^1** VFD N8/'02,N8/'03 CR_^1_%NUM_"$2056,$4644,$204E,$382F,$2702,$2C4E,$382F,$2703,$0D20_^1*** TENTH STATEMENT_^1** EMC CR_]_^1_%NUM_"$2045,$4D43,$200D_^1*******************************************************_^1***********************************************************************_^1***_!THIS IS THE MACRO SKELETON FOR THE DRAFT MACRO DATA._^1***_!VF€€D STATEMENTS ARE USED TO BUILD THE DATA TABLE_^1***_]_^1***_(PARAMETER_.SKELETON LABEL_"NAME_^1***_(PHASE_:02_)A_^1***_(LEVEL_903_)B_^1***_(DATA NAME_604_*C_^1***//////// LENGTH_905_)D_^1***_(FRACTIONAL LENGTH_-06_)E_^1***_)BYTE_;07_)F_^1***_(MODE_;08_)G_^1***_(SIGN_;09_)J_^1***_(ADDRESS_80A_)K_^1***_(VALUE_:0B_)L_^1***_(CORROLATION LABEL_.0C_)M_^1*_]_^1SKDA_!NUM_"120_^1*_]_^1*** €€FIRST STATEMENT_^1*_]_^1** ORG* CR_]_^1*_]_^1_%NUM_"$204F,$5247,$2A20_^1SKD32 NUM_"$200D_^1*_]_^1***_"04 VFD N5/ 02,N7/ 03,N1/ 07,N1/ 08,N1/ 08,N1/ 08 CR_^1_%NUM_"$2704,$2056,$4644,$204E,$352F_^1_%NUM_"$2702,$2C4E,$372F,$2703,$2C4E_^1_%NUM_"$312F,$2707,$2C4E,$312F,$2708_^1_%NUM_"$2C4E,$312F,$2708,$2C4E,$312F_^1_%NUM_"$2708,$200D_^1***_]_^1***_!SECOND STATEMENT_^1***_!ADC_!0A CR_^€€1_%NUM_"$2041,$4443,$2027,$0A0D_^1***_]_^1***_!THIRD STATEMENT_^1***_!VFD N1/ 09,N3/ 06,N12/ 05 CR_^1_%NUM_"$2056,$4644,$204E,$312F,$2709_^1_%NUM_"$2C4E,$332F,$2706,$2C4E,$3132_^1_%NUM_"$2F27,$050D_^1***_]_^1***_!FOURTH STATEMENT_^1**** QY IFA 02,EQ,16_!CR_^1_%NUM_"$5159_^1_%NUM_"$2049,$4641,$2027,$022C,$4551_^1_%NUM_"$2C31,$360D_^1_%NUM_"$2A2A,$4441,$5441,$200D_^1***_]_^1***_!€€FIFTH STATEMENT_^1****_!IFA_!03,EQ,1_!CR_^1_%NUM_"$445A,$2049_^1_%NUM_"$4641,$2027,$022C,$4551_^1_%NUM_"$2C31,$360D_^1***_]_^1***_!SIXTH STATEMENT_^1** ADC OD CR_^1FLG35 NUM_"$2041,$4443,$2027,$0D20,$0D20_^1***_]_^1***_!SEVENTH STATEMENT_^1***_!EIF CR_^1_%NUM_"$2045,$4946,$2044,$5A0D_^1***_!EIF QY_^1_%NUM_"$2045,$4946,$2051,$590D_^1***_]_^1***_!EIGHT STATEMENT_^1** DY IFA 1,EQ,1 €€CR_^1_%NUM_"$4459,$2049,$4641,$2027,$0C2C,$4551,$2C31,$200D_^1***_]_^1***_!NINTH STATEMENT_^1***_!ORG_!0A CR_^1_%NUM_"$204F,$5247,$2027,$0A0D_^1***_]_^1***_!TENTH STATEMENT_^1***_%ALF/,OB/CR_^1_%NUM_"$2041,$4C46,$205C,$2C27,$0B5C_^1_%NUM_"$200D_^1***_]_^1***_!ELEVENTH STATEMENT_^1***_!ORG* CR_^1_%NUM_"$204F,$5247,$2A0D_^1***_]_^1***_!TWELVETH STATEMENT_^1*** EIF DY CR_^1_%NUM_"$2€€045,$4946,$2044,$590D_^1***_]_^1SKDA1 NUM_"$2045,$5155,$2044,$4154,$4128,$2704,$290D_^1***_!THIRTEENTH STATEMENT_^1***_!EMC CR_^1SKDA2 NUM_"$2045,$4D43,$200D_^1***********************************************************************_^1***_!THIS IS THE MACRO SKELETON FOR THE DRAFT MACRO PROC._^1***_!ALL PROCEEDURE STATEMENTS CALL THIS MACRO._^1***_]_^1***_(PARAMETER_.SKELETON LAB€€EL_!NAME_^1***_(OP CODE_702_(A_^1***_(PARAMETER 1_303_(B_^1***_(PARAMETER 2_204_(C_^1***_(PARAMETER 3_205_(D_^1SKPR_!NUM_"158_^1***_!EXT_!02 CR_^1_%NUM_"$2045,$5854,$2027,$020D_^1***IFA 0A,NE,_!CR_^1_%NUM_"$2049,$4641,$2027,$0A2C,$4E45,$2C0D_^1***THIRD STATEMENT_^1***ADC 0 CR_^1_%NUM_"$2041,$4443,$2030,$0D20_^1***FOURTH STATEMENT_^1***EIF CR_]_^1_%NUM_"$4549,$4620,$0D20_^1***FIF€€TH STATEMENT_^1** IFA 09, CR_^1_%NUM_"$4946,$4320,$2709,$2C45,$512C,$310D_^1** EXT CALC CR_^1** RTJ CALC_^1** ADC 03_]_^1** ADC 04_]_^1** ADC 05_]_^1*** ADC 06_^1***ADC 07_]_^1***ADC 08_]_^1_%NUM_"$2045,$5854,$2043,$414C,$430D_^1_%NUM_"$270A,$2020,$2052,$544A,$2043,$414C,$430D_^1_%NUM_"$2041,$4443,$2027,$030D_^1_%NUM_"$2041,$4443,$2027,$040D_^1_%NUM_"$2041,$4443,$2027,$050€€D_^1_%NUM_"$2041,$4443,$2027,$060D_^1_%NUM_"$2041,$4443,$2027,$070D_^1_%NUM_"$2041,$4443,$2027,$080D_^1_%NUM_"$2052,$544A,$2027,$020D_^1_%NUM_"$2045,$4946,$200D_^1_%NUM_"$2049,$4641,$2027,$092C,$4551,$2C0D_^1_%NUM_"$270A,$2020,$2052,$544A,$2027,$020D_^1_%NUM_"$2045,$4946,$200D_^1*** IFA 03,NE, CR_^1_%NUM_"$2049,$4641,$2027,$032C,$4E45,$2C0D_^1*** ADC 03_^1_%NUM_"$2041,$4443,$202€€7,$030D_^1_%NUM_"$2045,$4946,$200D_^1*** IFA 05,NE, CR_^1_%NUM_"$2049,$4641,$2027,$052C,$4E45,$2C0D_^1*** ADC 05 CR_^1_%NUM_"$2041,$4443,$2027,$050D_^1_%NUM_"$2045,$4946,$200D_^1*** IFA 07,NE CR_^1_%NUM_"$2049,$4641,$2027,$072C,$4E45,$2C0D_^1** ADC 07_]_^1_%NUM_"$2041,$4443,$2027,$070D_^1_%NUM_"$2049,$4641,$2027,$092C,$4754,$2C31_^1_%NUM_"$200D,$2020,$2020_^1_%NUM_"$2041,$4443,$€€2027,$090D_^1_%NUM_"$2045,$4946,$200D_^1SKPR2 NUM_"$2045,$4D43,$200D_^1***_]_^1***********************************************************************_^1***_!THIS IS THE MACRO SKELETON FOR THE DRAFT MACRO PROCED._^1SKPC_!NUM_"141_^1_%NUM_"$2020,$4E55,$4D20,$3030,$200D_#NUM 00 CR_^1_%NUM_"$2045,$5155,$2052,$4A52,$4543,$4428_#EQU RJRECD(_^1_%NUM_"$3629,$2C42,$5546,$4F56,$5228,$3129_€€^1_%NUM_"$2C42,$4C4B,$5245,$4328,$3229,$2C45_^1_%NUM_"$4A28,$3329,$2C46,$4C44_^1_%NUM_"$4D4B,$5328,$3429,$2C45,$4F46,$2835_#MKS(4),EOF(5_^1_%NUM_"$292C,$454F,$5446,$4C47,$2837,$2920,$200D_^1_%NUM_"$2045,$5155,$2054,$524E,$4348,$4B28,$3829_^1_%NUM_"$2C53,$5254,$4348,$4B28,$3929,$200D_^1_%NUM_"$2045,$5155,$204C,$4F43,$4552_^1_%NUM_"$5228,$3134,$290D_^1*** INDICATORS USED BY 955 ARE I€€NCREC(10);DELREC(11)***_^1_%NUM_"$2045,$5155,$2049,$4E43,$5245,$4328_^1_%NUM_"$3130,$292C,$4445,$4C52,$4543,$2831_^1_%NUM_"$3129,$200D_^1_%NUM_"$2045,$5155,$204F,$4D52,$5245,$4A28,$3132,$290D_^1_%NUM_"$2045,$5155,$204C,$4F53,$5444,$4128,$3133,$290D_^1_%NUM_"$2045,$4E54,$2044,$494E,$502C,$4441_#ENT DINP,DA_^1_%NUM_"$5441,$200D_"TA CR_^1_%NUM_"$2045,$5854,$2043,$4F4D,$4552,$5220,$200€€D_^1***_!FIRST STATEMENT_^1***_!BSS DINPUT( 02) CR_^1LSTLAB NUM_"$2042,$5A53,$2044,$494E,$5028_^1_%NUM_"$2702,$290D_^1_%NUM_"$2042,$5353,$2028,$2703,$2D27,$0229,$200D_^1_%NUM_"$445A,$3120,$4E55,$4D20,$3020,$0D20_^1_%NUM_"$4551,$5520,$445A,$2844,$5A31,$2B31,$290D_^1_%NUM_"$2045,$4E54,$2044,$5A20,$200D_^1***_]_^1***_!SECOND STATEMENT_^1***_!EMC CR_^1_%NUM_"$2045,$4D43,$200D_^1***MA€€CRO SKEL. FOR DOC IS_^1***DOC VFD N8/02,N4/03,N8/0,N4/05,N4/04,N4/0 CR_^1***PARAMETER_,SKELETON LABEL_^1***GAP_%02_^1**LENGTH_#03_^1*NO SORT_#04_^1*NO SORT SEL.05_^1SKDOC NUM_"55_^1* ENT DOC_]_^1_%NUM_"$2045,$4E54,$2044,$4F43,$200D_^1_%NUM_"$444F,$4320,$5646,$4420,$4E38,$2F27_^1_%NUM_"$022C_^1_%NUM_"$4E34,$2F27_^1_%NUM_"$032C_^1_%ALF_"3,N8/00,_^1_%NUM_"$4E34,$2F27_^1_%NUM_"$052C_^€€1_%NUM_"$4E34,$2F27_^1_%NUM_"$042C_^1_%ALF_"2,N4/0_^1_%NUM_"$200D_^1_%NUM_"$4443,$544C,$204E,$554D,$2033,$302C_^1_%NUM_"$3330,$2C33,$302C,$3330,$2C24,$3543,$200D_^1** EMC CR_]_^1_%NUM_"$2045,$4D43,$200D_^1*** GROUP MACRO SKEL._^1*_]_^1***** PARAMETER_8SKELETON LABEL_^1*_]_^1*** LENS NR._@02_^1*** OPEN SHUTTER CO-ORD._403_^1*** READ CO-ORD._<04_^1*** STOP READ CO-ORD._705_^1*** FIEL€€D SEPARATOR_:06_^1*** CHAR. GROUP 0/.50-INCH BOX SIZE_*07_^1*** CHAR. GROUP 1/.45-INCH BOX SIZE_*08_^1*** CHAR. GROUP 2/.40-INCH BOX SIZE_*09_^1*** CHAR. GROUP 3/.35-INCH BOX SIZE_)0A_^1*** CHAR. GROUP 4/.30-INCH BOX SIZE_)0B_^1*** CHAR. GROUP 5/.25-INCH BOX SIZE_*0C_^1*** CHAR. GROUP 6/BLANKS GENERATION_*0D_^1*** FONT (MODE)_=0E_^1*** CLOSE LENS NR._:0F_^1*_]_^1*******************€€*****************************_^1** FIRST STATEMENT_^1** ENT DGROUP_^1** BZS DGROUP(50)_^1** ORG DGROUP_^1SKGRO NUM_"106_^1_%NUM_"$2045,$4E54,$2044,$4752,$4F55,$500D_^1_%NUM_"$2042,$5A53,$2044,$4752,$4F55,$5028,$3530,$290D_^1_%NUM_"$204F,$5247,$2044,$4752,$4F55,$5020_^1SKGRO1 NUM_"$200D_^1*_]_^1** VFD N4/$ 0E,N1/ 07,N1/ 08,N1/ 09,N1/ 0A,N1/ 0B,N1/ OC,N1/ 0D,_^1** N1/1,N1/ 06,N3/7_^€€1*_]_^1_%NUM_"$2020,$5646,$4420,$4E34,$2F24,$270E,$2C4E,$312F,$2707_^1_%NUM_"$2C4E,$312F,$2708,$2C4E,$312F,$2709,$2C4E_^1_%NUM_"$312F,$270A,$2C4E,$312F,$270B,$2C4E,$312F_^1_%NUM_"$270C,$2C4E,$312F,$270D,$2C4E,$312F,$312C_^1_%NUM_"$4E31,$2F27,$062C,$4E33,$2F37,$200D_^1*** VFD N12/$03,N3/02,N1/0_^1***_]_^1_%NUM_"$2056,$4644,$204E,$3132,$2F24,$2703_^1_%NUM_"$2C4E,$332F,$2702,$2C4E_^1_€€%NUM_"$312F,$3020,$200D_^1** VFD N12/$04,N3/02,N1/1_^1**_]_^1_%NUM_"$2056,$4644,$204E,$3132,$2F24_^1_%NUM_"$2704,$2C4E,$332F,$2702,$2C4E_^1_%NUM_"$312F,$3120,$200D_^1**_]_^1** VFD N12/$ 05,N3/ 0F,N1/0 CR_^1*_]_^1_%NUM_"$2056,$4644,$204E,$3132,$2F24_^1_%NUM_"$2705,$2C4E,$332F,$270F,$2C4E_^1_%NUM_"$312F,$3020,$200D_^1*** EMC CR_^1_%NUM_"$2045,$4D43,$200D_^1**************************€€*********************************************_^1***** ERROR ROUTINE-USED BY ALL DRAFT ROUTINES_^1***********************************************************************_^1ERO_"ADC_"0_^1_%LDA-_!I_+SAVE "I" AND SET TO CONS_^1_%STA*_!REI_^1_%LDA_"=XCONS_^1_%STA-_!I_^1_%ENQ_"1_,SET "Q" FOR MESSAGE_^1_%RTJ_"MER_^1_%NOP_"0_^1_%NOP_"0_^1_%JMP*_!(ERO)_'BACK TO CALLER_^1*_6THIS ROUTINE WILL€€ CHECK A NUMBER_^1*_6OF CHAR. FOR NUMBERIC AND INDICATE ANY ERROR_^1_%BSS_"CKNO(1),REI(1)_^1NUMCK ADC_"0_%SET NUM. OF CHAR. TO_^1_%TCA_"Q_+BE CHECKED_^1_%LDA-_!I_^1_%STA*_!REI_^1NU3_"RTJ_"BUP_$GET CHAR._^1_%INA_"-$30_^1_%SAM_"NU1_^1NUZ_"LDA+_!UNPACK,I_^1_%INA_"-$3A_^1_%SAP_"NU1_^1_%JMP*_!NU2_^1NU1_"LDA*_!REI_#CHAR. NOT NUMERIC_^1_%STA-_!I_^1_%ENA_"1_^1_%JMP*_!(NUMCK)_^1NU2_"INQ_"1€€_(ALL CHAR. CHECKED_^1_%SQZ_"*+2_^1_%JMP*_!NU3_(NO, GET NEXT_^1_%LDA*_!REI_(YES_^1_%STA-_!I_^1_%CLR_"A_^1_%JMP*_!(NUMCK)_^1****_]_^1**_4PROCESS THE ASSIGN PARAMETERS_^1**_5AND BUILD NUBUF_^1**_5********_^1BUP_"ADC_"0_^1_%RAO-_!I_^1_%LDA*_!(NUZ+1),I_^1_%JMP*_!(BUP)_^1****************************************************************_^1***** THIS IS THE MACRO SKELETON FOR THE DRAFT PIC€€TUR STATEMENT._^1***** VFD STATEMENTS ARE USED TO BUILD THE PICTUR TABLE.********_^1*_]_^1* PARAMETER_>SKELETON LABEL_^1*_]_^1*** INPUT FIELD IDENTIFIER_202_^1*** HANDPRINT CHAR. 1_'03_^1*** HANDPRINT CHAR. 2_704_^1*** HANDPRINT CHAR. 3_605_^1*** HANDPRINT CHAR. 4_706_^1*** HANDPRINT CHAR. 5_707_^1*** HANDPRINT CHAR. 6_708_^1*** HANDPRINT CHAR. 7_809_^1*** HANDPRINT CHAR. 8_80A_^1*€€** HANDPRINT CHAR. 9_70B_^1*** HANDPRINT CHAR. 10_60C_^1*** HANDPRINT CHAR. 11_60D_^1*** HANDPRINT CHAR. 12_%0E_^1*** HANDPRINT CHAR. 13_60F_^1*** HANDPRINT CHAR. 14_610_^1*** HANDPRINT CHAR. 15_611_^1*** HANDPRINT CHAR. 16_612_^1*** HANDPRINT CHAR. 17_613_^1*** HANDPRINT CHAR. 18_614_^1*** HANDPRINT CHAR. 19_615_^1*** HANDPRINT CHAR. 20_616_^1*** HANDPRINT CHAR. 21_717_^1*** HANDP€€RINT CHAR. 22_718_^1*** HANDPRINT CHAR. 23_719_^1*** HANDPRINT CHAR. 24_61A_^1*** HANDPRINT CHAR. 25_61B_^1*** HANDPRINT CHAR. 26_61C_^1*** HANDPRINT CHAR. 27_61D_^1*** HANDPRINT CHAR. 28_71E_^1*** WORD COUNT INCREMENT TO DGROUP_'1F_^1*_]_^1***********************************************************_^1*_]_^1** ORG* CR_]_^1*_]_^1PIC31 NUM_"235_^1_%NUM_"$204F,$5247,$2A20,$200D_^1** €€H1 IFA 03,NE,0 CR_^1_%NUM_"$4831,$2049,$4641,$2027,$032C,$4E45,$2C30,$200D_^1** VFD N4/$ 03,N4/$ 04,N4/$ 05,N4/$ 06 CR_^1*_]_^1_%NUM_"$2056,$4644,$204E,$342F,$2427,$032C,$4E34,$2F24_^1_%NUM_"$2704,$2C4E,$342F,$2427,$052C,$4E34,$2F24,$2706,$200D_^1** EIF H1 CR_^1_%NUM_"$2045,$4946,$2048,$3120,$200D_^1** H2 IFA 07,NE,0 CR_^1*_]_^1_%NUM_"$4832,$2049,$4641,$2027,$072C,$4E45,$2C30,$20€€0D_^1*** FOURTH STATEMENT_^1** VFD N4/$ 07,N4/$ 08,N4/$ 09,N4/$ 0A CR_^1*_]_^1_%NUM_"$2056,$4644,$204E,$342F,$2427,$072C,$4E34,$2F24_^1_%NUM_"$2708,$2C4E,$342F,$2427,$092C,$4E34,$2F24,$270A,$200D_^1** EIF H2 CR_^1_%NUM_"$2045,$4946,$2048,$3220,$200D_^1** H3 IFA 0B,NE,0 CR_^1*_]_^1_%NUM_"$4833,$2049,$4641,$2027,$0B2C,$4E45,$2C30,$200D_^1*** FIFTH STATEMENT_^1** VFD N4/$ 0B,N4/$ 0C,€€N4/$ 0D,N4/$ 0E CR_^1*_]_^1_%NUM_"$2056,$4644,$204E,$342F,$2427,$0B2C,$4E34,$2F24_^1_%NUM_"$270C,$2C4E,$342F,$2427,$0D2C,$4E34,$2F24,$270E,$200D_^1** EIF H3 CR_^1*_]_^1_%NUM_"$2045,$4946,$2048,$3320,$200D_^1** H4 IFA 0F,NE,0 CR_^1*_]_^1_%NUM_"$4834,$2049,$4641,$2027,$0F2C,$4E45,$2C30,$200D_^1*** SIXTH STATEMENT_^1** VFD N4/$ 0F,N4/$ 10,N4/$ 11,N4/$ 12 CR_^1_%NUM_"$2056,$4644,$204E€€,$342F,$2427,$0F2C,$4E34,$2F24_^1_%NUM_"$2710,$2C4E,$342F,$2427,$112C,$4E34,$2F24,$2712,$200D_^1** EIF H4 CR_^1*_]_^1_%NUM_"$2045,$4946,$2048,$3420,$200D_^1** H5 IFA 13,NE,0 CR_^1*_]_^1_%NUM_"$4835,$2049,$4641,$2027,$132C,$4E45,$2C30,$200D_^1*** SEVENTH STATEMENT_^1** VFD N4/$ 13,N4/$ 14,N4/$ 15,N4/$ 16 CR_^1*_]_^1_%NUM_"$2056,$4644,$204E,$342F,$2427,$132C,$4E34,$2F24_^1_%NUM_"$27€€14,$2C4E,$342F,$2427,$152C,$4E34,$2F24,$2716,$200D_^1** EIF H5 CR_^1*_]_^1_%NUM_"$2045,$4946,$2048,$3520,$200D_^1** H6 IFA 17,NE,0 CR_^1*_]_^1_%NUM_"$4836,$2049,$4641,$2027,$172C,$4E45,$2C30,$200D_^1*** EIGHT STATEMENT_^1** VFD N4/$ 17,N4/$ 18,N4/$ 19,N4/$ 1A CR_^1*_]_^1_%NUM_"$2056,$4644,$204E,$342F,$2427,$172C,$4E34,$2F24_^1_%NUM_"$2718,$2C4E,$342F,$2427,$192C,$4E34,$2F24,$271A,€€$200D_^1** EIF H6 CR_^1*_]_^1_%NUM_"$2045,$4946,$2048,$3620,$200D_^1** H7 IFA 1B,NE,0 CR_^1*_]_^1_%NUM_"$4837,$2049,$4641,$2027,$1B2C,$4E45,$2C30,$200D_^1*** NINTH STATEMENT_^1** VFD N4/$ 1B,N4/$ 1C,N4/$ 1D,N4/$ 1E CR_^1*_]_^1_%NUM_"$2056,$4644,$204E,$342F,$2427,$1B2C,$4E34,$2F24_^1_%NUM_"$271C,$2C4E,$342F,$2427,$1D2C,$4E34,$2F24,$271E,$200D_^1** EIF H7 CR_^1*_]_^1_%NUM_"$2045,$49€46,$2048,$3720,$200D_^1** ORG DGROUP+ 1F_^1*_]_^1_%NUM_"$204F,$5247,$2044,$4752,$4F55,$502B,$271F,$200D_^1** EMC CR_]_^1*_]_^1_%NUM_"$2045,$4D43,$200D_^1_%BZS_"BUFTEN(720) BUFFER FOR INTER/LANG._^1**_#*** END OF PASS 1 SUBROUTINES ***_^1_%EQU_"INCON(READ1)_^1**_]_^1_%END_"PS1_^__PPS2 CSY/ P€1_%NAM PS2_*DRAFT PASS2_^1_%ENT_"PS2_^1**_]_^1**********************************************************************_^1_%ENT_"DPS2_^1**_]_^1_%EQU_"PS(2)_(TO READ IN PASS 3_^1**_]_^1***_]_^1**_]_^1** 4.0 MODIFICATION ARE_^1**** CONSOLIDATE INTO ONE PART_^1**** SAVE NAM FOR RESTART_^1****_]_^1******_]_^1******************************************************************_^1**_]_^1ASSE€€M JMP*_!STP2_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1MA1_"NOP_"0_^1_%NOP_"0_^1GETP3 JMP+_!EXEC+3_^1STP2_!ENA_"1_^1_%AND_"EXEC+5_^1_%SAN_"DPS2_^1_%RTJ-_!($F4)_^1_%ADC_"$1C00,CO,0,$8F9,$5000_^1_%RTJ_"STATUS_^1**_]_^1*********************************************************************_^1*********************************************************************_^1**_]_^1**_]_^1DPS2_!NOP_"0_^1€€PS2_"LDA_"=XCONS_^1_%EQU_"PASS2(PS2)_^1_%STA-_!I_^1_%LDA_"SECTNO_^1_%STA_"SECTOR_^1**_]_^1_%LDA_"=XCONS+SL_'LOAD ADDR. OF TOP OF COMMON SWITCHES_^1_%TRA_"Q_^1**_]_^1LOOP_!CLR_"A_^1_%STA_"0,Q_">>>> ZERO OUT "COM" SO SWITCHES INIT ED < <_^1_%INQ_"-1_^1_%TRQ_"A_^1_%SUB_"=XCONS_^1_%SAM_"2_^1_%SAZ_"1_^1_%JMP*_!LOOP_^1**_]_^1_%ENA_"1_^1_%STA-_!TSW,I_^1_%STA-_!PSW,I_^1_%ENA_"0_^1_%STA-_!C€€SW,I_^1_%STA_"MM_^1**_]_^1_%LDA*_!P3LNG_%CALC.VACANT PASS 3 CORE SPACE_^1_%ADD_"=XASSEM+1_^1_%STA-_!ST,I_^1_%NOP_"0_^1**_]_^1***********************************************************************_^1**_]_^1****** INSERT MSG. TO READ PAPER TAPE(LOAD IT) HERE.>>>>>>>>>>>>>>>_^1**_]_^1***********************************************************************_^1MSG_"RTJ-_!($F4)_)PRINT MS€€G TO LOAD PAPER TAPE_^1_%NUM_"$C00_^1_%ADC_"CO_^1_%NUM_"0_^1_%NUM_"$18FC_^1_%NUM_"7_^1_%ADC_"MSG1_^1**_]_^1_%LDA_"CONS+CSW_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%ENA_"0_^1_%STA_"CONS+CSW_^1_%JMP*_!CONT_#DO PASS 2 PROCESSING_^1MSG1_!ALF_"7,PASS 2 LOADED_^1MSG2_!ALF_"5,END PASS 2_^1***************************************************************_^1_%NUM_"$D0A_^1_%BZS_"RPY1_^1**_]_^1************€€************************************************************_^1**_]_^1P3LNG NUM_"$1200 LENGTH OF PASSES_^1**_]_^1************************************************************************_^1**_]_^1CONT_!LDA_"=XCONS_^1**_]_^1_%STA-_!ET,I_"EXTERNAL TBL ADDR_^1_%SUB-_!ST,I_^1_%STA-_!WMS,I_/NO OF WORDS IN SYMTAB_^1_%RTJ_"ZSYTAB_.ZERO SYMBOL TABLE_^1_%LDA_"=N$240_^1_%STA-_!LA,I_^1_%LDA_"€€=N$FF_^1_%ENQ_"0_^1**_]_^1_%RTJ_"SYPT_^1_%ENA_"1_^1_%STA-_!RM,I_^1_%LDA_"=N$2020_^1_%STA_"NAMC_^1_%STA_"NAMC+1_^1_%STA_"NAMC+2_^1NEXT_!ENA_"0_^1_%ENQ_"14_^1_%STA-_!DX,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!NEXT+2_^1_%STA-_!LP,I_^1_%RTJ*_!RDIM_^1_%ALS_"3_^1_%SAP_"3_^1_%LDA*_!IB+45_^1_%SAM_"1_^1_%JMP*_!*-5_^1_%ENA_"-1_^1_%STA-_!CT,I_^1_%JMP_"LBPK_^1RDIM_!ADC_"0_^1_%LDA_"=XIB_^1_%STA*_!IM€€_^1_%ENA_"0_^1_%NOP_"0_^1_%STA-_!CSW,I_^1_%NOP_"0_^1**_]_^1***********************************************************************_^1**_]_^1****_!PAPER TAPE READ ROUTINE GOES HERE >>>>>>>>>>>>>>>>>_^1**_]_^1***DEBLOCK INTER. LANG. TAPE_^1_%STA*_!SAVAQ SAVE_^1_%STQ*_!SAVAQ+1_!CALLERS_^1_%LDA-_!I_!PROGRAM_^1_%STA*_!SAVAQ+2 REGISTERS_^1***_]_^1_%LDA*_!BUFFAD_#LOGICAL RECORD LOCATIO€€N_^1_%SAN_"1_^1_%JMP*_!GETBLK_#FIRST TIME IN_^1_%STA-_!I_^1_%SUB_"=N720_#IS BUFFER EMPTY_^1_%SAP_"5_#-YES, GO INPUT A BLOCK_^1_%JMP*_!DEBLK_#-NO, GO MOVE TO WORK AREAS_^1_%BZS_"BUFFAD(1),SAVAQ(3)_^1***_]_^1GETBLK RTJ_"EXEC+6_^1_%NUM_"$800_^1_%NUM_"$8F9_^1_%NUM_"$2D0_^1_%ADC_"BUFTEN_^1SECTOR NUM_"11_^1_%STA*_!SECTOR_^1_%LDA*_!SAVAQ+2_^1_%STA-_!I_^1_%ENA_"0_^1_%STA-_!CSW,I_^1***_]_^1€€_%CLR_"A_^1_%STA*_!BUFFAD_^1_%STA-_!I_^1DEBLK CLR_"Q_^1***_]_^1XFRBUF LDA_"BUFTEN,B_#TRANSFER DATA_^1_%STA*_!IB,Q_^1_%INQ_"-47_#IS IB FULL_^1_%SQP_"2_#-YES_^1_%INQ_"48_#-NO, UPDATE TO NEXT WORD_^1_%JMP*_!XFRBUF_#GO TRANSFER MORE_^1_%LDA-_!I_#UPDATE POINTER TO_^1_%INA_"48_#NEXT LOGICAL_^1_%STA*_!BUFFAD_#RECORD AREA_^1_%LDA*_!SAVAQ+2_#RESTORE_^1_%STA-_!I_#CALLERS_^1_%LDA*_!SAVAQ_#PR€€OGRAM_^1_%LDQ*_!SAVAQ+1_#REGISTERS_^1**_]_^1RZ1_"ENQ_"41_^1_%LDA*_!(IM),Q_^1_%SAZ_"1_^1_%STA-_!LN,I_0STORE LINE NO_^1_%INQ_"1_^1_%LDA*_!(IM),Q_^1_%STA-_!IL,I_0IL FLAG BITS_^1_%JMP*_!(RDIM)_^1PRNT_!ADC_"0_^1_%RTJ*_!WRIT_^1_%JMP*_!(PRNT)_^1_%BZS_"IM(1),IB(48)_^1WRIT_!ADC_"0_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_^1_%ADC_"CO_^1_%ADC_"0_^1WRT1_!NUM_"$18FC_^1_%ADC_"10_^1_%ADC_"CONS+PB_^1_%RTJ_"S€€TATUS_^1_%JMP*_!(WRIT)_^1ER_#ADC_"0_^1_%RAO_"ERC_^1_%LDQ*_!ERT,Q_^1_%STQ-_!ES,I_^1_%STQ-_!PB+4,I_^1_%RTJ*_!DECV_^1_%STQ-_!PB+1,I_^1_%STA-_!PB+2,I_^1_%LDA_"=A**_^1_%STA-_!PB+3,I_^1_%STA-_!PB,I_^1_%ENQ_"4_^1_%STA-_!PB+5,B_^1_%SQZ_"2_^1_%INQ_"-1_^1_%JMP*_!*-3_^1_%RTJ+_!PRNT_^1_%ENA_"0_^1_%STA-_!ES,I_^1_%STA-_!RC,I_^1_%ENQ_"42_^1ERIM_!LDA_"(IM),Q_^1_%AND_"=N$DFFF_^1_%EOR_"=N$2000_^1_%S€€TA_"(IM),Q_^1_%JMP*_!(ER)_^1DECV_!ADC_"0_0NUMBER TO CONVERT IN A_^1_%ENA_"0_%THIS ROUTINE CONVERTS THE_^1_%STA-_!TR,I_"BINARY LINE NUMBER TO ASCII_^1_%ENQ_"4_^1_%LDA-_!LN,I_"OUTPUT IS 3 DIGITS IN QA WITH_^1_%INA_"-10_.A TRAILING BLANK_^1_%SAM_"2_^1_%RAO-_!TR,I_^1_%JMP*_!*-3_^1_%INA_"58_$ADD BACK 10 PLUS HEX 30 TO_^1_%STA-_!TR,B_-MAKE ASCII CHAR_^1_%LDA-_!TR,I_^1_%STA-_!TR+5,I_^1_%E€€NA_"0_^1_%STA-_!TR,I_^1_%LDA-_!TR+5,I_^1_%INQ_"-1_^1_%SQZ_"1_^1_%JMP*_!*-13_^1_%LDQ-_!TR+1,I_^1_%QLS_"8_^1_%ADQ-_!TR+2,I_^1_%LDA-_!TR+3,I_^1_%ALS_"8_^1_%ADD_"TR+4,I_^1_%JMP*_!(DECV)_^1ERT_"ALF_"1,DS_^1_%ALF_"1,EX_^1_%ALF_"1,LB_^1_%ALF_"1,PP_^1_%ALF_"1,OP_^1_%ALF_"1,RG_^1_%ALF_"1,RL_^1_%ALF_"1,OV_^1_%ALF_"1,UD_^1_%ALF_"1,MO_^1**_]_^1*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX€€XXXXXXXXXXXXXXXXXX_^1*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_^1*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_^1*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_^1**_]_^1*_'HOLDERS AND SWITCHES FOR PASS 2_^1*_1ST MUST BE FIRST_^1_%EQU_"ST(1),ET(ST+1),PSW(ET+1),PB(PSW+1)_^1_%EQU_"TSW(PB+49),CSW(TSW+1)_^1_%EQU_"WMS(CS€€W+1)_^1_%EQU_"CC(WMS+1),DC(CC+1)_^1_%EQU_"PC(DC+1),DX(PC+1),LA(DX+2),W1(LA+4),W2(W1+1)_^1_%EQU_"AD(W2+1),AF(AD+1),AM(AF+1),CL(AM+1),EX(CL+1)_^1_%EQU_"RC(EX+1),AX(RC+1),LC(AX+1),AU(LC+1),AR(AU+1)_^1_%EQU_"TR(AR+1),SY(TR+7),NU(SY+4),SG(NU+1),RP(SG+1)_^1_%EQU_"HX(RP+1),XMOD(HX+1),LT(XMOD+1),ES(LT+1),LP(ES+1)_^1_%EQU_"IG(LP+1),NS(IG+1),IS(NS+1),CT(IS+1),CS(CT+1)_^1_%EQU_"IL(CS+1),MD(IL€€+1),ID(MD+1),SKF(ID+1)_^1_%EQU_"BS(SKF+1)_^1_%EQU_"UB(BS+1)_^1_%EQU_"LN(UB+57),OR(LN+1),OC(OR+1)_^1_%EQU_"AS(OC+1),SC(AS+1),SS(SC+1)_^1_%EQU_"WC(SS+1),RM(WC+1)_^1_%EQU_"YL(RM+1),SZ(YL+1)_^1_%EQU_"PER(SZ+1)_^1_%EQU_"VBT(PER+1),VMS(VBT+1),IFNAM(VMS+1)_^1_%EQU_"MPSW(IFNAM+1)_^1_%EQU_"VCT(MPSW+1),VWD(VCT+1)_^1_%EQU_"AX16(VWD+1)_^1_%EQU_"ETSAVE(AX16+1)_^1_%EQU_"DVFL(ETSAVE+1)_^1_%EQU_"P€€AGL(DVFL+1)_^1_%EQU_"SL(PAGL+1)_^1**_]_^1*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_^1*****************************************************************_^1*****************************************************************_^1*****************************************************************_^1*****************************************************************_^1_€€%COM_"CONS(SL+1)_^1_%COM_"FST_^1_%COM_"L,P,X,MM,ERC_^1_%COM_"PCHSW_^1_%COM_"NAMSAV(7)_^1_%COM_"EXEC($A0)_^1_%EQU_"SECTNO(EXEC+$9F)_^1*****************************************************************_^1*******************************************************************_^1**_]_^1**_]_^1NAM_"LDA-_!LN,I_^1_%INA_"-1_^1_%SAZ_"5_^1_%ENQ_"4_^1_%RTJ_"ER_^1_%JMP_"OB_^1_%RAO-_!IG,I_^1_%RTJ*_!€€(DD+6)_.TO CHPR_^1_%SQN_"1_^1_%STQ-_!SY+1,I_.ZERO NULL FLAG_^1_%SAN_"2_3ERR FROM CHPR_^1_%LDA-_!CS,I_^1_%SAZ_"2_^1_%ENQ_"1_^1_%RTJ*_!(DD+2)_.ERROR_^1_%LDQ_"N2_^1_%RTJ*_!(DD+4) RECONVERT TO 7 BITS_^1_%ENQ_"2_3STORE NAME IN_^1_%LDA-_!LA,B_0PUNCH BUFFER_^1_%STA*_!NAMC,Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-4_^1_%ENQ_"42_^1_%LDA-_!IL,I_0SET READ ONLY IL_^1_%ADD_"=N$1000_-FOR PASS 3_^1_%€€STA_"(IM),Q_^1NAM1_!JMP_"NEXT_^1_%BZS_"NAMC(3)_^1DD_#ADC_"D1C,PRNT,ER,CHPU,RECV,PUNC,CHPR,0_^1_%ADC_"0,UP1,AXPR,0,0,D5,0_^1ALF_"RTJ*_!(DD+13)_-LABEL TO SYMTAB_^1_%RTJ*_!(DD+3)_.TO CHPU_^1_%INA_"$20_^1_%TRA_"Q_^1_%STQ-_!TR+4,I_.SAVE N_^1_%INQ_"-$3A_^1_%SQM_"1_3MAY BE NUMERIC_^1_%JMP*_!DA12_0NOT NUMERIC_^1_%INQ_"$A_^1_%SQP_"1_3NUMERIC_^1_%JMP*_!DA12_0NOT NUMERIC_^1_%LDA-_!CT,I_^1_%I€€NA_"-1_^1_%STA-_!CT,I_0REDUCE COL COUNT_^1_%RTJ*_!(DD+6)_.TO CHPR_^1_%SAN_"DA11-*-1_,ERR FROM CHPR_^1_%LDA-_!CS,I_^1_%INA_"-1_^1_%SAN_"DA11-*-1_,ERR - NO COMMA NEXT_^1_%LDQ-_!NU,I_^1_%SQZ_"DA11-*-1_,NO COUNT_^1_%RTJ_"UP2_1BUMP PROG CTR_^1DA11_!JMP_"NEXT_^1DA12_!ENA_"0_^1_%STA-_!TR+2,I_^1_%STA-_!TR+3,I_^1_%RAO-_!AF,I_^1_%RTJ*_!(DD+3)_.TO CHPU_^1_%INQ_"-$2C_^1_%SQZ_"3_^1DA1_"ENA_"0_^€€1_%STA-_!AF,I_0ZERO AF FLAG_^1_%JMP*_!DA11_^1DA16_!RTJ*_!ALFSB2_^1_%JMP*_!DA15_073RD COL OR CR OR MATCH ON N_^1_%JMP*_!*-2_1SPECIAL CHARACTER_^1_%RAO-_!TR+3,I_^1_%LDQ-_!TR+3,I_^1_%LRS_"1_^1_%SAM_"1_^1_%RTJ*_!(DD+9)_.BUMP PROG CTR_^1_%JMP*_!DA16_^1DA15_!LDQ-_!TR+3,I_^1_%LRS_"1_^1_%SAP_"1_^1_%RTJ*_!(DD+9)_.BUMP PROG CTR_^1_%JMP*_!DA1_1EXIT_^1ALFSB2 ADC_"0_^1_%LDA-_!TR+2,I_.SAVE PRECE€€DING CHARACTER_^1_%STA-_!TR+1,I_^1_%RTJ*_!(DD+3)_.GET NEXT CHARACTER_^1_%STQ-_!TR+2,I_.SAVE IT_^1_%LDA-_!CT,I_^1_%INA_"-72_^1_%SAP_"5_373RD COL ***_^1_%TRQ_"A_^1_%INQ_"-$D_^1_%SQZ_"2_3CR_^1_%EOR-_!TR+4,I_.CHECK MATCH ON N_^1_%SAN_"1_^1_%JMP*_!(ALFSB2)_,EXIT TO MARK+1_^1_%LDA-_!TR+1,I_^1_%INA_"-$3A_^1_%SAN_"ALF1-*-1_^1_%ENQ_"5_3CHECK FOR SPECIAL_^1_%LDA-_!TR+2,I_.CHAR FOLLOWING COL€€ON_^1_%SUB*_!ALFTB2,Q_^1_%SAZ_"3_3FOUND ONE_^1_%SQZ_"ALF1-*-1_,NOT SPECIAL CHAR_^1_%INQ_"-1_^1_%JMP*_!*-5_^1_%ENQ_"1_^1_%JMP*_!(ALFSB2),Q_*RETURN TO MARK+2_^1ALF1_!ENQ_"2_^1_%JMP*_!(ALFSB2),Q_*EXIT TO MARK+3_^1*_2R_!T_!L_!B_!F_!V_"PASS 2 AND 3_^1ALFTB2 NUM_"$52,$54,$4C,$42,$46,$56_^1ADC_"RTJ*_!(DD+13) LABEL TO SYM TABLE_^1_%RAO-_!AD,I_0SET ADC FLAG_^1_%ENA_"0_^1_%STA-_!IS,I_-LEADIN€€G SIGN LEGAL_^1DA4_"RTJ*_!(DD+6)_.TO CHPR_^1_%LDA-_!CS,I_^1_%INA_"-2_2LOOP THROUGH CHPR_^1_%SAM_"1_3UNTIL BLANK OR_^1_%JMP*_!DA4_1COMMA ENCOUNTERED_^1_%RTJ_"UP1_^1_%LDA-_!CS,I_^1_%SAZ_"1_^1_%JMP*_!DA4_1GET NEXT FIELD_^1_%JMP_"NEXT_^1NUM_"RTJ*_!(DD+13) LABEL TO SYM TABLE_^1DA3_"ENA_"0_^1_%STA-_!IS,I_"LEADING SIGN LEGAL_^1_%RAO-_!NS,I_0SET NUM FLAG_^1_%RTJ*_!(DD+6)_.TO CHPR_^1_%SAZ_"€€3_^1_%SQZ_"2_^1_%ENA_"0_^1_%STA-_!CS,I_^1_%RTJ_"UP1_^1_%LDA-_!CS,I_^1_%SAZ_"3_^1_%INA_"-1_^1_%SAN_"1_^1_%JMP*_!DA3+3_^1NUM1_!ENA_"0_^1_%STA-_!NS,I_^1_%JMP_"NEXT_^1**_]_^1************************************************************************_^1**_]_^1****_$-DEC- REMOVED. NOT ALLOWED IN DRAFT CODING < <_^1*_]_^1LST_"ENA_"0_^1_%STA-_!YL,I_^1_%JMP_"NEXT_^1NLS_"RAO-_!YL,I_^1_%JMP*_!€€LST+2_^1VFD_"RTJ+_!D5_2PUT AWAY LABEL_^1_%ENA_"0_^1_%STA-_!VBT,I_/ZERO BIT COUNTER_^1VF2C_!STA-_!VMS,I_^1_%RTJ*_!(VFCHPU+1)_*TO CHPU_^1_%SAZ_"VF3C_^1_%INA_"-$C_^1_%SAN_"1_^1_%JMP*_!*-4_^1_%INA_"-$15_^1_%SAZ_"2_3MODE IS A_^1_%RAO-_!VMS,I_^1_%INA_"-$D_^1_%SAZ_"2_3MODE IS N_^1_%RAO-_!VMS,I_^1_%INA_"-$A_^1_%SAZ_"5_^1_%SAN_"2_^1VF3C_!LDA-_!VBT,I_^1_%SAZ_"1_3***_^1_%RTJ*_!(VFUP1+1)_+BUMP€€ PROG CTR_^1_%JMP*_!NUM1_0EXIT_^1_%RTJ*_!(IFA5+1)_^1_%SAN_"5_3ERR FROM CHPR ***_^1_%LDA-_!NU,I_^1_%SAZ_"3_3ERR - N IS NOT A NUMBER_^1_%LDQ-_!CS,I_^1_%INQ_"-5_^1_%SQZ_"1_^1_%JMP*_!VF3C+2_.ERR - NEXT CHAR NOT A SLASH_^1_%LDQ-_!VMS,I_^1_%JMP*_!*+1,Q_^1_%JMP*_!VFA_1MODE IS A_^1_%JMP*_!VFN_1MODE IS N_^1_%INA_"-17_^1_%SAM_"1_^1_%JMP*_!VF3C+2_.ERR,BIT COUNT GREATER THAN 16_^1_%INA_"17_^1€€_%ADD-_!VBT,I_/ADD N TO BIT COUNTER_^1_%STA-_!VBT,I_^1_%RTJ*_!(VFCHPU+1)_*TO CHPU, SLEW TO_^1_%SAZ_"4_3COMMA OR BLANK_^1_%INA_"-$C_^1_%SAZ_"1_^1_%JMP*_!*-4_^1_%INA_"1_^1_%STA-_!CS,I_^1VF6C_!LDA-_!VBT,I_^1_%INA_"-16_^1_%SAM_"4_^1_%STA-_!VBT,I_^1VFUP1 RTJ+_!UP1_1BUMP PROG CTR_^1_%JMP*_!VF6C_^1VF5C_!LDA-_!CS,I_^1_%SAZ_"3_^1_%INA_"-1_^1_%SAZ_"2_^1_%JMP*_!VF3C+2_.ILLD_^1_%JMP*_!VF3C_^1€€_%JMP*_!VF2C_^1VFN_"INA_"-17_1MODE IS N_^1_%SAM_"1_^1_%JMP*_!VF3C+2_.ILLEGAL TERMINATORQ_^1_%INA_"17_^1_%ADD-_!VBT,I_^1_%STA-_!VBT,I_^1_%RAO-_!NS,I_^1_%RTJ*_!(IFA5+1)_,TO CHPR_^1_%JMP*_!VF6C_^1_%BZS_"VFA1(1)_-HOLDER FOR N (ASCI VFD)_^1VFA_"STA*_!VFA1_^1_%TRA_"Q_^1_%ENA_"0_^1_%LRS_"3_^1_%SAZ_"1_^1_%JMP*_!VF3C+2_.N NOT A MULTIPLE OF 8_^1_%RAO-_!AF,I_0SET ALF SWITCH FOR CHPU_^1_%ENA_€€"0_^1_%STA-_!TR+2,I_^1_%TCA_"A_^1_%STA-_!TR+4,I_.SET FOR NO COMPARE IN ALFSB2_^1VF4C_!RTJ_"ALFSB2_.GET NEXT CHAR_^1_%JMP*_!VF3C_073RD COL OR CR_^1_%JMP*_!*-3_^1_%LDA-_!VBT,I_^1_%INA_"8_^1_%STA-_!VBT,I_^1_%INA_"-16_^1_%SAM_"2_^1_%STA-_!VBT,I_^1_%RTJ*_!(VFUP1+1)_+BUMP PROG CTR_^1_%LDA*_!VFA1_^1_%INA_"-8_^1_%STA*_!VFA1_^1_%SAZ_"1_3FINISHED_^1_%JMP*_!VF4C_0GO AGAIN_^1_%STA-_!AF,I_^1VFC€€HPU RTJ+_!CHPU_0GET NEXT CHAR_^1_%SAZ_"1_^1_%INA_"-$B_^1_%STA-_!CS,I_^1_%JMP*_!VF5C_^1IFA_"ENA_"0_^1_%STA-_!VBT,I_/USE FOR SUBFIELD COUNT_^1_%STA-_!IS,I_0SET LEADING SIGN LEGAL_^1IFA1_!RTJ+_!AXPR_0EVALUATE EXPRESSION_^1_%SQZ_"2_^1IFA2_!JMP_"NEXT_^1_%LDQ-_!VBT,I_/SAVE EXPRESSION_^1_%STA-_!VMS,B_^1_%LDA-_!CS,I_^1_%AAQ_"A_^1_%SAZ_"2_3ILLEGAL FIELD TERMINATOR_^1_%SQZ_"2_^1_%JMP*_!IFA3_€€0ALL FIELDS PROCESSED_^1_%JMP*_!IFA2_^1_%RAO-_!IS,I_0SET LEADING SIGN ILLEGAL_^1IFA5_!RTJ+_!CHPR_0GET COMPARE CODE_^1_%LDA-_!CS,I_^1_%STA-_!VBT,I_^1_%ADQ-_!SY+1,I_^1_%STQ-_!VCT,I_^1_%INA_"-1_^1_%SAZ_"1_^1_%JMP*_!IFA2_0ERR,NO COMMA NEXT_^1_%JMP*_!IFA+2_/GO GET NEXT FIELD ***_^1IFA3_!ENQ_"3_^1_%LDA-_!VCT,I_^1_%SUB*_!IFTAB,Q_^1_%SAZ_"4_3FOUND_^1_%SQZ_"2_3ILLEGAL_^1_%INQ_"-1_^1_%JMP*_€€!*-5_^1_%JMP*_!IFA2_^1_%LDA-_!VMS,I_^1_%SUB-_!VMS+1,I_^1_%QLS_"1_^1_%JMP*_!*+1,Q_^1_%SAN_"8_3CONDITION NOT MET_^1_%JMP*_!IFA2_0CONDITION MET_^1_%SAZ_"6_^1_%JMP*_!IFA2_^1_%SAP_"4_^1_%JMP*_!IFA2_^1_%SAZ_"2_^1_%SAM_"1_^1_%JMP*_!IFA2_^1_%RAO-_!SKF,I_/CONDITION NOT SATISFIED_^1_%LDA-_!LA,I_0SAVE IF NAM_^1_%STA-_!IFNAM,I_^1_%JMP*_!IFA2_^1*_2EQ_!NE_!LT_!GT_^1IFTAB NUM_"$171,$3A5,$334,$1F€€4_^1IFC_"LDA-_!MD,I_^1_%ENQ_"0_^1_%SAN_"3_^1IFC2_!ENA_"0_^1_%STA-_!AF,I_^1_%JMP*_!IFA2_^1_%STQ-_!VBT,I_/USE FOR COUNTING SUBRIELDS_^1_%STQ-_!VMS,I_/USE FOR CHARACTER CTR_^1_%ENQ_"5_^1_%ENA_"0_^1_%STA-_!TR,B_^1_%SQZ_"2_^1_%INQ_"-1_^1_%JMP*_!*-3_^1IFC10 RTJ+_!CHPU_0SLEW OVER LEADING BLANKS_^1_%SAN_"1_3FOUND A NON BLANK CHARACTER_^1_%JMP*_!IFA2_0GET OUT_^1_%LDA-_!CT,I_0SET COL CTR BA€€CK ONE_^1_%INA_"-1_^1_%STA-_!CT,I_0GET CHAR WITH AF_^1IF3C_!RAO-_!AF,I_0SWITCH SET_^1_%RTJ*_!(IFC10+1)_^1_%STQ-_!TR+6,I_^1_%LDA-_!VBT,I_^1_%INQ_"-9_^1_%SQZ_"4_3TAB_^1_%INQ_"-4_^1_%SQZ_"2_3CR_^1_%INQ_"-$13_^1_%SQN_"1_^1_%JMP*_!IF5C_0BLANK_^1_%INQ_"-$C_^1_%SQN_"1_^1_%JMP*_!IF4C_0COMMA_^1_%RAO-_!VMS,I_^1_%LDA-_!VMS,I_^1_%INA_"-7_^1_%SAM_"1_^1_%JMP*_!IF3C_06 CHAR STORED_^1_%LDQ-_!VMS,I€€_^1_%INQ_"-1_^1_%LRS_"1_^1_%ADQ-_!VBT,I_^1_%SAM_"3_3RIGHT CHARACTER_^1_%LDA-_!TR+6,I_.LEFT CHARACTER_^1_%ALS_"8_^1_%JMP*_!*+2_^1_%LDA-_!TR+6,I_^1_%ADD-_!TR,B_^1_%STA-_!TR,B_^1_%JMP*_!IF3C_^1IF4C_!SAZ_"1_^1_%JMP*_!IFC2_0ERR, COMMA WITH VBT NON ZERO_^1_%ENA_"0_^1_%STA-_!AF,I_^1_%RTJ*_!(IFA5+1)_,GET COMPARE CODE_^1_%ENA_"3_^1_%STA-_!VBT,I_^1_%LDA-_!CS,I_^1_%INA_"-1_^1_%SAZ_"1_^1_%JMP*€€_!IFC2_0ERR, NO COMMA HERE_^1_%STA-_!VMS,I_^1_%JMP*_!IF3C_0GO GET NEXT FIELD_^1IF5C_!SAN_"1_^1_%JMP*_!IFC2_0ERR, BLANK WITH VBT EQU ZERO_^1_%ENQ_"2_^1_%LDA-_!TR,B_^1_%INQ_"3_^1_%EOR-_!TR,B_^1_%SAN_"3_3NO MATCH_^1_%INQ_"-4_^1_%SQM_"2_3MATCH_^1_%JMP*_!*-6_^1_%TRA_"Q_^1_%LDA-_!SY,I_^1_%ADD-_!SY+1,I_^1_%SUB_"=N$171_^1_%SAZ_"4_3COMPARE IS ON EQ_^1_%SUB_"=N$234_^1_%SAZ_"3_3COMPARE IS ON €€NE_^1_%JMP*_!IFC2_0ILLEGAL COMPARE_^1_%SQP_"2_^1_%SQM_"4_^1_%SQP_"3_^1_%RAO-_!SKF,I_^1_%LDA-_!LA,I_^1_%STA-_!IFNAM,I_^1IF7C_!JMP*_!IFC2_^1EMC_"LDA-_!MD,I_0END MACRO_^1_%SAZ_"2_^1_%INA_"-1_^1_%STA-_!MD,I_^1_%JMP*_!EIF1_^1EIF_"LDA-_!SKF,I_/END IF_^1_%SAN_"1_^1_%JMP*_!EIF1_^1_%RTJ+_!CHPR_^1_%SAN_"1_^1_%LDA-_!CS,I_^1_%SAN_"EIF1_^1_%RAO-_!IG,I_^1_%RTJ*_!(EIF+4)_^1_%SAN_"1_^1_%LDA-_!CS,I€€_^1_%SAN_"EIF1_^1_%TRQ_"A_3ADDRESS SYMBOL IN Q_^1_%EOR-_!IFNAM,I_^1_%SAN_"1_3NO MATCH_^1_%STA-_!SKF,I_/MATCH,STOP SKIPPING_^1EIF1_!JMP*_!IF7C_^1AXPR_!SLS_]_^1_%ENA_"0_^1_%ENQ_"12_^1_%STA-_!EX,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1_%ENQ_"-0_2SET ADDRESS_^1_%STQ-_!AX,I_0SUMMATION STORAGE_^1AB_#RTJ+_!CHPR_^1_%SAN_"AA-*+1_.ERR FROM CHPR_^1_%STA-_!RC,I_^1_%LDA-_!CS,I_^1_%INA_"-6_$TES€€T FOR LEFT PAREN_^1_%SAZ_"3_^1_%SAN_"AX2-*-1_^1AA_#ENQ_"8_^1_%RTJ*_!(A+1)_/TO ERR PROC_^1_%LDA-_!CS,I_^1_%INA_"-2_^1_%SAM_"2_%BL OR COMMA NEXT_^1_%RTJ*_!(AB+1)_.TO CHPR_^1_%JMP*_!*-4_1SLEW TO COMMA OR BLANK_^1_%ENA_"0_^1_%STA-_!RC,I_^1_%STA-_!AX,I_^1_%STA-_!AS,I_^1_%JMP*_!AX3_^1AX2_"SQZ_"1_^1_%JMP*_!AX1-1_^1_%LDQ-_!SY+1,I_^1_%SQZ_"6_^1_%INA_"4_3NULL FIELD_^1_%SAM_"3_^1_%LDA-_!LC,I_€€^1_%SAZ_"1_^1_%JMP*_!AA_^1_%JMP*_!A2_^1_%LDQ-_!SY+2,I_^1_%SQN_"1_^1_%JMP*_!A2_2NUMERIC_^1_%LDA-_!PC,I_"PROGRAM COUNTER =_^1_%STA-_!NU,I_"VALUE OF THIS TERM_^1_%LDA-_!RM,I_"RELOCATION = PROGRAM_^1_%STA-_!RC,I_0RELOCATION MODE_^1_%JMP*_!A2_^1_%RAO-_!SS,I_0SET SEARCH FLAG_^1AX1_"LDA-_!ST,I_^1_%RTJ*_!(A+3)_/SEARCH SYM TABLE_^1_%SQP_"AX1A_%>>>>>> SYMBOL FOUND->>>>>>>>>>>_^1_%NOP_"0_^1AX€€1A_!LDA-_!1,Q_*PICK UP SYMBOL >>>>>>>>_^1_%ARS_"12_^1_%INA_"-4_^1_%SAN_"1_^1***_]_^1_%JMP*_!AA_2UNDEFINED ENT PT_^1_%INA_"4_^1_%STA-_!RC,I_0STORE RELOCATION_^1_%ADQ-_!SY+3,I_^1_%LDA-_!2,Q_^1_%TCA_"A_^1_%STA-_!NU,I_0STORE ADDR VALUE_^1**_]_^1_%JMP*_!A2_^1AX3_"ENA_"0_^1_%STA-_!LP,I_0ZERO LEFT PAREN_^1_%STA-_!SS,I_^1_%LDA-_!AX,I_^1_%AND*_!A_%MASK ADDRESS TO_^1_%STA-_!AX,I_015 BITS_^1_€€%LDQ-_!RC,I_^1_%JMP*_!(AXPR)_^1A_$ADC_"$7FFF,ER,MOVE,SYCH_^1A2_#LDQ-_!LC,I_"LEADING OPERATOR_^1_%LDA-_!SG,I_^1_%SAZ_"4_3NO LEADING SIGN_^1_%SQZ_"1_^1AXAA_!JMP*_!AA+2_^1_%SAP_"1_%LEADING SIGN PLUS_^1_%INQ_"3_%SET LC CODE MINUS_^1_%INQ_"-4_^1_%STQ-_!RP,I_"SAVE FOR NEXT TEST_^1_%INQ_"1_^1_%SQN_"2_^1_%ENA_"-0_^1_%STA-_!AS,I_"SET ADDRESS MASK NEGATIVE_^1_%LDA-_!RC,I_^1_%SAZ_"AX4C-*-1_^1€€_%SQZ_"4_/LC IS MINUS_^1_%INQ_"-1_^1_%SQN_"4_^1_%LDQ-_!AS,I_^1_%SQZ_"2_^1_%ENQ_"4_^1_%JMP*_!*+2_^1_%ENQ_"0_^1_%EAQ_"Q_3OF RC_^1_%LDA-_!TR-1,B_.RECORD RELOCATION_^1_%INA_"1_3OF THIS TERM_^1_%STA-_!TR-1,B_^1AX4C_!LDA-_!RP,I_0LEADING CHARACTER_^1_%LDQ-_!CS,I_0TRAILING CHARACTER_^1_%INQ_"-4_^1_%STQ-_!RP,I_^1_%SAM_"1_%LC = +,-,BL OR COMMA_^1_%JMP*_!AG_2LC = * OR /_^1_%SQM_"1_^1_%JMP*_!A€€E_2CS = * OR /_^1_%LDA-_!NU,I_"LC,CS = +,-,BL OR COMMA_^1AZ_#ALS_"1_^1_%ARS_"1_%EXTEND SIGN OF NU_^1_%EOR-_!AS,I_"COMPLEMENT IF SIGN MINUS_^1_%ADD-_!AX,I_^1_%STA-_!AX,I_^1_%ENA_"0_^1_%STA-_!AS,I_^1_%STA-_!RC,I_^1AV_#LDQ-_!CS,I_^1_%INQ_"-2_^1_%SQM_"4_%CS = BLANK OR COMMA_^1_%INQ_"2_%CS INTO LC GO PICK_^1_%STQ-_!LC,I_0UP NEXT TERM_^1_%JMP_"AB_^1_%ENA_"0_^1_%STA-_!RC,I_^1_%ENQ_"3_3CH€€ECK RELOCATION_^1_%LDA-_!TR-1,B_^1_%INQ_"4_^1_%SUB-_!TR-1,B_^1_%SAN_"4_3RELOCATION HERE_^1_%INQ_"-5_^1_%SQN_"1_^1_%JMP*_!AX3_^1_%JMP*_!*-7_^1_%STQ-_!RP,I_^1_%INA_"1_%RELOC HERE CHECK IT_^1_%SAN_"6_^1_%LDA-_!RC,I_^1_%SAZ_"1_^1_%JMP*_!AXAA_^1_%STQ-_!RC,I_^1_%LDQ-_!RP,I_^1_%JMP*_!*-12_^1_%INA_"-2_^1_%SAZ_"1_^1_%JMP*_!*-6_1RELOC ERROR_^1_%INQ_"-4_^1_%JMP*_!*-10_^1AE_#LDA-_!RC,I_"LC = €€+,-,BL OR COMMA_^1_%STA-_!AR,I_0CS =* OR /_^1_%LDA-_!NU,I_0SAVE RC AND NU_^1_%STA-_!AU,I_^1_%JMP*_!AV_^1AG_#LDQ-_!RC,I_0LC = * OR /_^1_%SQZ_"7_3RC = 0_^1_%SAZ_"1_3LC = *_^1_%JMP*_!AE-3_"ERR DIVISOR RELOC_^1_%LDA-_!AR,I_^1_%SAZ_"1_^1_%JMP*_!AE-3_"ERR TOO MANY RELOCS_^1_%STQ-_!AR,I_0SAVE THIS RELOC_^1_%JMP*_!*+2_^1_%SAN_"AH-*-1_.LC = /_^1_%LDA-_!NU,I_0LC= *_^1_%MUI-_!AU,I_^1_%SAP_"2_€€^1_%AND*_!A_%PRODUCT WRAP AROUND_^1_%INA_"1_^1_%QLS_"1_^1_%AAQ_"A_^1_%SAP_"2_^1_%CLR_"Q_^1_%JMP*_!*-6_^1_%LDQ-_!RP,I_^1_%SQP_"1_^1_%JMP*_!AZ_$CS = +,-,BL OR COMMA_^1_%JMP*_!AE+3_0CS = * OR SLASH_^1AH_#LDA-_!NU,I_0LC = /_^1_%SAN_"1_^1_%JMP*_!A2+4_"ERR DIV BY ZERO_^1_%LDA-_!AU,I_^1_%ENQ_"0_^1_%DVI-_!NU,I_0AU/NU_^1_%JMP*_!AH-4_^1UP2_"SLS_]_^1_%SQN_"1_^1_%JMP*_!(UP2)_^1_%RTJ*_!UP1_^1_%€€INQ_"-1_^1_%JMP*_!*-4_^1_%BZS_"UTEMP(1)_,TEMP***_^1UP1_"SLS_"0_3BUMP PROGRAM_^1_%LDA-_!PC,I_0COUNTER BY ONE_^1_%SUB*_!UPM1_^1_%SAZ_"2_^1_%ADD*_!UPM1_^1_%INA_"1_^1_%STA-_!PC,I_^1_%JMP*_!(UP1)_^1UPM1_!NUM_"$7FFE_^1MOVE_!SLS_"0_/MOVE SYMBOL_^1_%ENQ_"3_3TO LABEL_^1_%LDA-_!SY,B_^1_%STA-_!LA,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-4_^1_%JMP*_!(MOVE)_^1**_]_^1PUNC_!ADC_"0_(ENTRY TO -PUNCH- S€€UBROUTINE_^1PC2_"NOP_"0_^1_%NOP_"0_^1PC3_"LDA_"=XCONS+UB_^1_%LDQ-_!PER,I_,NO WDS TO OUTPUT_^1_%NOP_"0_^1PO_#ENA_"0_^1_%ENQ_"56_^1_%STA-_!UB,B_-*********************_^1_%INQ_"-1_/*********************_^1_%SQM_"1_0*********************_^1_%JMP*_!*-3_.*********************_^1_%JMP*_!(PUNC)_'EXIT FROM SUBROUTINE_^1**_]_^1**********************************************************_^1**_]€€_^1BW_#ADC_"0_^1_%STA*_!BW+11_^1_%STA*_!BW11_^1_%STA*_!BW10_^1_%STQ*_!BW+10_^1_%ENA_"0_^1_%STA-_!CSW,I_^1_%RTJ_"EXEC+6_^1_%NUM_"$C00_^1_%NUM_"$8FA_^1BW10_!NUM_"0_^1BW11_!NUM_"0_^1_%JMP*_!(BW)_^1STATUS ADC_"0_^1_%LDA_"CONS+CSW_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%JMP*_!(STATUS)_,MARK FOR ERROR_^1CO_#ENQ_"1_^1_%STQ_"CONS+CSW_^1_%RTJ-_!($F4)_+EXIT REQUEST_^1_%NUM_"$A00_^1**_]_^1_%BZS_"BUFTEN(€€720)_^1**_]_^1**_]_^1IMJ_"ADC_"(IM)_^1LAA_"ADC_"CONS+LA,CONS+SY_^1SYCH_!ADC_"0_^1_%LDQ-_!SS,I_-SS=0, SYMBOL IN LABEL_^1_%SQN_"5_%SS NOT ZERO,SYMBOL IN SY_^1_%LDQ*_!LAA_^1_%STQ*_!S3-5_^1_%INQ_"3_^1_%STQ*_!S3+4_^1_%JMP*_!*+3_^1_%LDQ*_!LAA+1_^1_%JMP*_!*-5_^1_%LDQ-_!I_^1_%STQ-_!RP,I_-SAVE I_^1_%INA_"-1_^1S4_#ENQ_"0_^1_%STA-_!I_%ADDRESS-1 OF TBL TO BE SEARCHED_^1_%STA+_!CONS+HX_*SAVE AD€€DR OF 1ST WORD_^1S2_#LDA-_!1,I_.PICK UP ENTRY_^1_%SAN_"5_^1_%ENQ_"-1_$END OF TABLE-NOT FOUND_^1SX_#LDA_"CONS+RP_^1_%STA-_!I_0RESTORE I_^1_%JMP*_!(SYCH)_^1_%SAM_"S3-*-1_^1_%SQP_"2_^1S1_#RAO-_!I_%SLEWING ENTRY-INCREMENT ADDRESS_^1_%JMP*_!S2_^1_%LDA_"=N$7FF_+MASK_^1_%SQZ_"1_0PROCESSING 1ST WORD_^1_%SET_"A_^1_%AND-_!1,I_^1_%SUB+_!0,Q_^1_%SAZ_"1_0MATCH_^1_%INQ_"-4_$NO MATCH-SET Q NEG TO€€ SLEW_^1_%INQ_"1_^1_%JMP*_!S1_/GO BACK FOR MORE_^1S3_#SQM_"S5-*-1_+WERE SLEWING_^1_%INQ_"-1_^1_%TCQ_"Q_%DOES ORDINAL IN SY+3 MATCH Q_^1_%ADQ+_!0_^1_%SQN_"S5-*-1_+NO-ENTRY DID NOT MATCH_^1_%LDQ*_!(S2-1) CONS+HX ADDR-1 OF 1ST WD TO Q_^1_%JMP*_!SX_^1S5_#LDA-_!I_^1_%INA_"1_^1_%JMP*_!S4_^1N1_#ADC_"(CONS+ET)_^1N2_#ADC_"CONS+SY_^1*_]_^1SYPT_!ADC_"0_'>>> PLACE LABEL IN SYMBOL TABLE < <_^1_€€%QLS_"1_^1_%STQ*_!SF+1_-RELOCATION_^1_%STA*_!SE-2_-VALUE_^1_%LDA-_!LA,I_"ANY SYMBOL TO PUT AWAY_^1_%SAZ_"SA-1-*-1_)NO_^1SY2C_!LDA-_!ST,I_0SYMBOL TABLE ADDRESS_^1_%RTJ*_!(SA+2) SYCH_^1_%SQM_"SA-*-1_+NOT FOUND_^1_%LDA-_!1,Q_#WAS IT UNDEFINED ENTRY POINT_^1_%ARS_"12_^1_%INA_"-4_^1_%SAN_"SA+3-*-1_)NO-IS DOUBLE DEF_^1_%RAO*_!SF+1_-SET ENTRY POINT BIT_^1_%INQ_"1_^1_%RTJ*_!SB_$PUT AWAY V€€AL AND RELOC OF SYMB_^1**_]_^1_%JMP*_!(SYPT)_^1SA_#LDA-_!ET,I_-EXTERNAL TABLE ADDRESS_^1_%RTJ+_!SYCH_^1_%SQM_"4_^1_%ENQ_"0_^1SY1C_!RTJ+_!ER_2ERROR HERE_^1_%JMP*_!(SYPT)_^1***_]_^1_%RTJ*_!OV_^1_%LDQ-_!ST,I_^1_%ADQ-_!SC,I_^1_%RTJ*_!SB_^1_%LDA-_!LA+3,I_^1_%INA_"2_^1_%ADD-_!SC,I_^1_%STA-_!SC,I_^1_%JMP*_!(SYPT)_^1*_]_^1SB_#ADC_"0_%Q CONTAINS ADDR OF 1ST ENTRY_^1_%STQ*_!SE+1_^1_%LDQ-_!LA€€+3,I_^1_%INQ_"1_^1_%LDA_"=N0_.VALUE_^1_%TCA_"A_^1SE_#STA+_!0,Q_.PATCHED_^1_%INQ_"-1_^1_%SQZ_"3_^1_%SQM_"7_^1_%LDA-_!LA,B_^1_%JMP*_!SE_^1SF_#LDA_"=N0_^1_%ALS_"11_^1_%ADD-_!LA,I_^1_%JMP*_!SE_^1_%JMP*_!(SB)_^1OV_#ADC_"0_^1_%LDA-_!ET,I_^1_%SUB-_!SC,I_^1_%SUB-_!ST,I_^1_%INA_"-5_^1_%SAM_"1_^1_%JMP*_!(OV)_0THIS TABLE NOT FULL_^1**_]_^1_%RTJ-_!($F4)_$PRINT SYMBOL TABLE OVERFLOW MSG........€€.._^1_%ADC_"$C00,OV1,0,$18FC,24,ERMS_^1OV1_"RTJ-_!($F4)_(**** EXIT TO ABORT JOB ****_^1_%ADC_"$0A00_^1**_]_^1ERMS_!ALF_"13,*** SYMBOL TABLE OVERFLOW._^1_%NUM_"$D0A,$0909_^1_%ALF_"9,JOB ABANDONED. >>>_^1**_]_^1**_]_^1ZSYTAB ADC_"0_3ZERO SYMBOL TABLE_^1_%LDQ-_!WMS,I_^1_%LDA+_!CONS+ST_^1_%NOP_"0_^1_%NOP_"0_^1_%STA*_!*+3_^1_%ENA_"0_^1_%STA+_!0,Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-4_^1_€€%JMP*_!(ZSYTAB)_^1*_]_^1**_]_^1LBPK_!RTJ*_!(O2-3) CHPU_^1_%INA_"-$A_.IS IT AN ASTERISK_^1_%SAN_"L8_^1LK_#LDA-_!LN,I_^1_%INA_"-1_^1_%SAN_"3_^1_%ENQ_"4_3NO NAM_^1_%RTJ+_!ER_^1_%JMP_"NEXT_^1L8_#ENA_"-1_^1_%STA-_!CT,I_-SET CHAR CTR BACK_^1_%RAO-_!IS,I_-LEADING SIGN ILLEGAL_^1_%RTJ*_!(O1+3)_^1_%SAZ_"L3-*-1_+NO ERROR_^1L6_#ENQ_"45_^1_%LDA_"(IM),Q_^1_%SAP_"2_^1_%ENQ_"2_3THIS IS A NAME REC€€ORD_^1_%RTJ*_!(LK+5)_.PRINT ERROR AND SET IL BIT_^1_%ENQ_"0_^1_%STA-_!LA,I_^1_%JMP*_!L1_^1L3_#SQZ_"L4-*-1_+NUMERIC_^1_%RTJ_"MOVE_^1_%JMP*_!L5_^1L4_#LDA-_!SY+1,I_+IS IT NULL FIELD_^1_%SAZ_"L1-*_0NO_^1L5_#LDA-_!CS,I_^1_%SAN_"1_^1L1_#JMP*_!OPCP_^1_%JMP*_!L6_^1*_]_^1OPCP_!LDA-_!SKF,I_(CHECK IF SKIP FLAG IS ON >>>>>>>>>>>_^1_%SAZ_"1_^1_%JMP*_!SKPROC_.SKIPPING ON IF_^1_%LDA-_!IL,I_^1_%SA€€P_"O1-*-1_.NOT A MACRO CARD_^1_%ALS_"1_^1_%SAP_"1_^1_%JMP*_!LK_2EXIT_^1_%RAO-_!MD,I_0BUMP MACRO DEPTH SWITCH_^1_%LDA-_!PC,I_^1_%LDQ-_!RM,I_^1_%RTJ*_!(O7+5)_.PUT AWAY SYMBOL_^1_%JMP*_!LK_2EXIT_^1O1_#RAO-_!IG,I_^1_%RAO-_!IS,I_-LEADING SIGN ILLEGAL_^1_%RTJ+_!CHPR_-GET OPCODE_^1_%SAZ_"4_^1O11_"LDA-_!LN,I_^1_%INA_"-1_^1_%SAN_"OE_^1_%JMP*_!LK+3_0NAM ERROR_^1_%SQZ_"1_^1_%JMP*_!OF_^1_%LDA-€€_!NU,I_"NUMERIC OPCODE-MUST BE ZERO_^1_%SAZ_"O2-*-1_^1_%JMP*_!O11_^1OE_#LDA-_!CS,I_0PICK UP INDICATOR_^1_%SAZ_"3_0BLANK_^1_%RTJ+_!CHPU_^1_%JMP*_!*-3_^1_%STA-_!AM,I_^1O2_#ENA_"-1_^1_%STA-_!CL,I_"SET CLASS CODE FOR ADC_^1_%ENQ_"0_^1_%JMP*_!O7-3_^1OF_#ENQ_"43_^1_%LDA_"(IM),Q_^1_%ENQ_"45_2GET PSEUDO INDEX_^1_%LDQ_"(IM),Q_^1_%SQP_"2_^1_%ENQ_"22_^1_%ENA_"-1_^1_%SAN_"1_^1OB_#JMP*_!OE_2OP €€CODE ERROR_^1O6_#STA-_!CL,I_^1_%SAM_"1_^1_%JMP*_!O7_/MACHINE OPCODE_^1_%RAO-_!IS,I_^1_%JMP_"N3_^1O7_#STA-_!AU,I_^1_%STQ-_!SG,I_^1_%LDA-_!PC,I_^1_%LDQ-_!RM,I_^1_%RTJ+_!SYPT_0PUT LABEL IN SYMBOL TABLE_^1_%LDA-_!AU,I_^1_%INA_"-6_^1_%SAZ_"1_^1_%JMP*_!O8_^1_%LDA-_!CS,I_^1_%SAZ_"1_^1_%JMP*_!OE_/ERROR-ILL TERM_^1_%JMP*_!OX-3_^1O8_#LDQ-_!CL,I_^1_%INQ_"-3_^1_%LDA-_!CS,I_-EXAMINE TERMINATOR_€€^1_%STA-_!AM,I_^1_%SAZ_"8_0BLANK_^1_%SQP_"6_3ERR NO BLANK FOR 3,4,5_^1_%INA_"-1_^1_%SAZ_"4_0COMMA ERROR_^1_%INA_"-4_^1_%SAP_"2_^1_%RTJ*_!CHPU_^1_%SAZ_"5_^1_%JMP*_!OE_^1_%SQM_"7_^1_%RTJ_"UP1_^1_%JMP*_!LK_^1OX_#LDA-_!AM,I_^1_%INA_"-2_^1_%SAZ_"1_^1_%JMP*_!OX-3_^1_%ENQ_"2_^1_%RTJ_"UP2_^1OX1_"JMP*_!LK_^1*_]_^1SKPROC LDA-_!IL,I_^1_%SAP_"4_3NOT A MACRO_^1_%ALS_"1_3MACRO_^1_%SAM_"1_3CONTI€€NUATION_^1_%RAO-_!ID,I_0MACRO CALL_^1_%JMP*_!OX1_^1_%ENQ_"43_^1_%LDQ_"(IM),Q_^1_%SQM_"1_^1_%JMP*_!OX1_^1_%ENQ_"45_^1SKP1_!LDA_"(IM),Q_^1_%LDQ-_!ID,I_^1_%INA_"-17_^1_%SAZ_"6_3EMC_^1_%INA_"1_^1_%SAN_"7_^1_%SQN_"6_3EIF_^1_%RAO-_!IG,I_0IF DEPTH SWITCH NOT SET_^1_%JMP_"EIF_^1_%SQZ_"2_^1_%INQ_"-1_^1_%STQ-_!ID,I_0DECREMENT IF DEPTH SWITCH_^1_%JMP*_!OX1_^1*_]_^1CHPU_!ADC_"0_^1_%RAO-_!CT,I_€€-INCREMENT CHAR CTR_^1_%ENA_"0_^1_%LDQ-_!CT,I_^1_%INQ_"-72_^1_%SQM_"1_^1_%JMP*_!C1+1_-TOO MANY CHARS_^1_%INQ_"72_^1_%LRS_"1_^1_%LDQ_"(IM),Q_^1_%SAZ_"1_^1_%QLS_"8_^1_%QRS_"8_0Q CONTAINS 7 BIT CHAR_^1_%SQM_"CHP1-*-1_,NULL_^1_%SQZ_"CHP1-*-1_,ZERO(NULL PARAM IN MAC ASELET_$N)_^1_%LDA-_!AF,I_^1_%SAZ_"1_^1_%JMP*_!(CHPU)_^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_0NO_^1_%ENA_"71_$SET CHAR CTR TO 71 FOR END OF_^1_%STA-_!CT,I_-IMAGE_^1CHP1_!JMP*_!CHPU+1_^1_%INQ_"-$13_-BLANK_^1_%SQM_"C1-*-1_+CHAR ILLEGAL_^1_%SQN_"2_^1C3_#SAZ_"C1+1-*-1_)CHAR BLANK-IG NOT SET_^1_%JMP*_!CHPU+1_+GO BACK FOR NEXT CHAR_^1_%INQ_"-$40_-UPPER BOUND FOR LEGAL_^1_%SQM_"C2-*-1_+IS LEGAL_^1C1_#ENA_"$3C_^1_%S€€TA-_!CS,I_^1_%ENQ_"0_^1_%STQ-_!IG,I_^1_%JMP*_!(CHPU)_+EXIT_^1C2_#INQ_"$40_.6 BIT CHAR FOR OUTPUT_^1_%TRQ_"A_^1_%JMP*_!C1+1_^1XC_#NUM_"0,$C,$B CHAR TBL-BLANK,COMMA,PLUS_^1_%NUM_"$D,$A,$F,8 MINUS,ASTER,SLASH,LFT PAREN_^1_%NUM_"9,4_.RT PAREN,DOLLAR SIGN_^1_%NUM_"$1D,$3B_^1XI_#ADC_"XB_/BLANK,COMMA_^1_%ADC_"XP_/PLUS_^1_%ADC_"XM_/MINUS_^1_%ADC_"XK_/ASTERISK_^1_%ADC_"XH_/SLASH_^1_%ADC_"XL€€_/LEFT PAREN_^1_%ADC_"XRP_.RIGHT PAREN_^1_%ADC_"XD_/DOLLAR SIGN_^1_%ADC_"XT_/EQUAL SIGN_^1_%ADC_"XLB_1EQUAL SIGN,LEFT BRACKET_^1*_]_^1CHPR_!ADC_"0_0ENTRY_^1_%ENA_"0_^1_%STA-_!ES,I_^1_%ENQ_"10_2LEFT BRACKET_^1_%STA-_!SY,B_;HX,XMOD,LT,ES_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1XLOP_!RTJ*_!(XR+1) CHPU_^1_%ENQ_"10_2ZERO INTO SY,NU,SG,RP,_^1X1_#LDA-_!CS,I_"SEARCH SPECIAL CHARACTERS_^1_%S€€UB*_!XC,Q_^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_"1_0BLANK_^1_%INQ_"-1_^1_%LDA*_!XI,Q_^1_%LDQ-_!XMOD,I_^1_%STA*_!*+2_^1_%JMP+_!0_0GO TO ROUTINE_^1X5_#LDQ-_!EX,I_-TERMINATOR NEEDED_^1_%SQN_"XA-1-*-1_)YES-ERROR_^1_%LDQ-_!XMOD,I_^1_%INA_"-$10_^1_%SAM_"XA+6-*-1 ERR-BELOW LOWER BOUND_^1_%INA_"-$A_^1_%SAP_€€"1_0NOT NUMERIC_^1_%JMP*_!XN_/Q CONTAINS MODE_^1_%INA_"-7_^1_%SAM_"8_0NOT ALPHA-ERROR_^1_%INA_"-$1A_^1_%SAP_"XA+6-*-1_)NOT ALPHA-ERROR_^1XA_#SQN_"XALF-*-1_)NOT INITIAL MODE-ALPHA_^1_%ENQ_"1_0SET ALPHA MODE_^1_%STQ-_!XMOD,I_^1_%LDQ-_!RP,I_"RT PAREN OR ASTER SWITCH SET_^1_%ADQ-_!SY+2,I_^1_%SQZ_"1_^1_%JMP*_!XR_/YES-IS ERROR_^1_%INA_"$1B_.CONVERT TO 5 BIT VALUE_^1_%ALS_"6_0XA+6 **_^1_%€€JMP*_!XALN-3_^1XALF_!INQ_"-1_^1_%SQZ_"1_^1_%JMP*_!XALN_-NUMERIC MODE_^1_%LDQ-_!SY+3,I_+XALF+3 **_^1_%INQ_"-6_^1_%SQZ_"XALN-1-*-1_'6 CHARS-EXIT_^1_%INQ_"6_^1_%LRS_"1_^1_%SAM_"3_^1_%LDA-_!CS,I_^1_%ALS_"8_^1_%JMP*_!*+2_^1_%LDA-_!CS,I_^1_%ADD-_!SY,B_-PUT CHAR IN SY_^1_%STA-_!SY,B_^1_%RAO-_!SY+3,I_+INCREMENT CHAR COUNT_^1_%JMP*_!XLOP_-XALN-1 **_^1XALN_!LDQ-_!HX,I_^1_%SQZ_"2_0HEX SWITCH €€NOT SET ERROR_^1_%INA_"$14_^1_%SAM_"1_^1_%JMP*_!XR_^1_%INA_"$10_.CHANGE TO NUMBER_^1_%JMP*_!XNUM_^1XN_#INA_"$A_/CONVERT TO NUMBER_^1_%SQN_"4_^1_%STA-_!NU,I_-INITIAL MODE_^1_%ENA_"2_0**_^1_%STA-_!XMOD,I_+SET NUMERIC MODE_^1_%JMP*_!XLOP_-XNUM-4 **_^1_%INQ_"-1_^1_%SQN_"1_^1_%JMP*_!XALF+3_+ALPHA MODE_^1XNUM_!STA-_!CS,I_^1_%LDA-_!HX,I_^1_%LDQ-_!NU,I_^1_%SAZ_"XN1-*-1_*DECIMAL NUMBER_^1_%€€LDA-_!CS,I_-HEX NUMBER_^1_%ALS_"12_^1_%LLS_"4_0MULTIPLY BY 16_^1_%SAN_"XN1+4-*-1_(OVERFLOW_^1_%LDA-_!NS,I_-16 BITS LEGAL_^1_%SAN_"1_0YES_^1_%SQM_"XN1+1-*-1_(NO-OVERFLOW_^1_%STQ-_!NU,I_^1_%JMP*_!XLOP_^1XN1_"QLS_"1_^1_%SQM_"XO-*-1_+OVERFLOW_^1_%STQ-_!NU,I_^1_%LLS_"2_^1_%SAN_"XO-*-1_^1_%SQM_"XO-*-1_^1_%ADQ-_!NU,I_^1_%SQM_"XO-*-1_^1_%ADQ-_!CS,I_^1_%SQM_"XO-*-1_^1_%JMP*_!XN1-2_^1XO_#ENQ€€_"7_^1_%RTJ_"ER_^1_%ENA_"-1_^1_%STA-_!CS,I_^1XR_#RTJ+_!CHPU_^1_%SAZ_"XR1-*-1_*BLANK_^1_%ENQ_"1_^1_%STQ-_!CS,I_-SET CS FOR COMMA_^1_%INA_"-$C_.CHAR COMMA_^1_%SAZ_"XR1-*-1_*YES_^1_%JMP*_!XR_^1XR1_"ENA_"0_^1_%ENQ_"11_^1_%STA-_!SY,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!XR1+2_^1_%RAO-_!ES,I_^1XX_#ENA_"0_^1_%STA-_!IS,I_^1_%STA-_!EX,I_^1_%LDA-_!ES,I_^1_%LDQ-_!SY,I_^1_%JMP_"(CHPR)_+EXIT FROM R€€OUTINE_^1XB_#SQN_"1_^1_%RAO-_!SY+1,I INIT MODE-NULL FIELD INDICATOR_^1_%LDA-_!LP,I_^1_%SUB-_!RP,I_^1_%SAZ_"1_^1_%JMP*_!XR1_.NON PAREN MATCH_^1XB2_"LDQ-_!SY+3,I_^1_%SQZ_"3_^1_%INQ_"-1_^1_%QRS_"1_^1_%STQ-_!SY+3,I_+SET CHAR COUNT FOR SY_^1_%JMP*_!XX_^1XP_#SQN_"XM-*-1_+PLUS SIGN_^1_%LDA-_!SG,I_-INITIAL MODE_^1_%SAN_"XM+4-*-1 ERR-CONCATENATED OPERATORS_^1_%RAO-_!SG,I_-SET SIGN POSITIVE€€_^1_%LDA-_!IS,I_-XP+4 **_^1_%SAN_"XM+4-*-1 ERR-LEADING SIGN ILLEGAL_^1_%JMP*_!XNUM-4 XLOP_%XM-1 **_^1XM_#SQZ_"1_^1_%JMP*_!XB2_.ALPHA OR NUMERIC MODE_^1_%LDA-_!SG,I_^1_%SAZ_"1_^1_%JMP*_!XR_$ERR-CONCATENATED OPERATORS_^1_%INA_"-1_^1_%STA-_!SG,I_"SET SIGN SWITCH FOR MINUS_^1_%JMP*_!XP+4_^1XK_#SQN_"XH-*-1_+ASTERISK_^1_%RAO-_!SY+2,I_+SET ASTERISK INDICATOR_^1_%RAO-_!EX,I_^1_%JMP*_!XN+3_€€-SET NUMERIC MODE_^1XH_#SQZ_"1_0SLASH_^1_%JMP*_!XM_^1_%LDA-_!SG,I_^1_%SAN_"XL+5-*-1 ERR-CONCATENATED OPERATORS_^1_%RAO-_!SY+1,I_+SET NULL FIELD_^1_%JMP*_!XX_^1XL_#RAO-_!LP,I_-COUNT LEFT PAREN_^1_%LDA-_!CL,I_^1_%SQZ_"3_^1_%INQ_"-1_^1_%SQZ_"XL2-*-1_^1_%JMP*_!XR_/XL+6 **_^1_%SAZ_"XL1-*-1 ERR-PROCESSING LABEL OR OP_^1_%SAM_"XL1+1-*-1_(PSEUDO OPCODE_^1_%INA_"-3_/MACHINE OPCODE_^1_%SAM_"€€XL1+3-*-1 XLOP_^1XL1_"JMP*_!XR_^1_%INA_"1_0PSEUDO OPCODE_^1_%SAN_"1_^1_%JMP*_!XM-1 XLOP_(CLASS 1 PSEUDO_^1_%INA_"1_^1_%SAN_"XL2+1-*-1_(ERROR-WRONG CLASS_^1_%JMP*_!XL-2_^1XL2_"INA_"2_0MUST BE CLASS 2 PSEUDO_^1_%SAN_"XT+4-*-1_)IS NOT_^1_%JMP*_!XB2_^1XRP_"RAO-_!RP,I_^1_%JMP*_!XL1+3 XLOP_^1XD_#SQN_"XT+4-*-1_^1_%RAO-_!HX,I_^1_%JMP*_!XN+3_^1XT_#SQN_"3_%ERR-NOT INITIAL MODE-EQUAL SG_^1_%L€€DA-_!CL,I_^1_%INA_"-1_^1_%SAZ_"1_^1_%JMP*_!XR_/ERROR-NOT CLASS 1_^1_%RTJ*_!(XR+1) CHPU GET CHAR FOLLOWING EQUAL_^1_%RAO-_!LT,I_-SET LITERAL SWITCH_^1_%JMP*_!XX_^1XLB_"SQN_"5_^1_%LDA-_!MD,I_^1_%SAZ_"3_^1_%ENA_"0_^1_%JMP_"XA_^1_%JMP*_!XR_^1OP4_"ADC_"ADC,ORG,EQU,COM,DAT,BSS,BSS_^1_%ADC_"END,ENT,EXT,ALF,NUM,VFD,VFD,IFA_^1_%ADC_"IFC,EIF,EMC,LST,NLS,NAM1,NAM1,NAM_^1*_]_^1N3_#LDA*_!OP4,Q_€€">>>> PICKUP TRANSFER VECTOR < < (SIC)_^1_%STA*_!DAT-1_^1_%LDA-_!CS,I_^1_%STA-_!AM,I_^1_%SAZ_"N3X_^1_%INQ_"-22_^1_%SQZ_"N3X_1NAME CARD_^1_%INA_"-4_/TERMINATOR ASTERISK_^1_%SAN_"7_0NO-ERROR_^1_%INQ_"20_^1_%SQM_"2_^1_%INQ_"-7_^1_%SQN_"3_0NO-ERROR_^1_%RTJ_"CHPU_^1_%SAZ_"2_0BLANK_^1_%JMP_"OB_/ERROR_^1N3X_"RAO-_!IG,I_^1_%JMP+_!0_0GO TO PSEUDO ROUTINE_^1*_5PSEUDO OP CHECKOUT_^1DAT_"RAO-€€_!DX+1,I_.SET DATA FLAG_^1COM_"RTJ*_!D4_^1_%JMP*_!EQU+2_/NO SYMBOL PRESENT_^1_%JMP*_!D4C_#NO LEFT PAREN PRES_^1_%JMP*_!D1A_1NON ZERO RELOCATION_^1_%LDQ-_!DX+1,I_.NORMAL RETURN_^1_%LDA-_!CC,B_0COMMON OR DATA CTR_^1_%STA-_!W1,I_"INTO COMMAND WORD_^1_%ADD-_!AX,I_0ADD ADDRESS_^1_%SAP_"2_^1_%SUB*_!D7_^1_%INA_"1_0WRAP AROUND_^1_%STA-_!CC,B_0ADJUST COUNTER_^1_%LDA-_!W1,I_"SET A FOR SYMBOL€€ TBL PUT_^1_%INQ_"2_%COMMON OR DATA RELOC_^1_%STQ-_!RC,I_-FOR LISTING_^1_%JMP*_!EQU+5_/TO SYM TABLE_^1D7_#NUM_"$8000_^1EQU_"NOP_"0_^1_%RTJ*_!D4_^1_%JMP*_!DF_/NO SYMBOL PRESENT_^1_%JMP*_!DF+2_^1_%JMP*_!*+1_1NON ZERO RELOCATION_^1_%LDQ-_!RC,I_0RELOCATION CODE_^1_%RTJ*_!(D+8)_!TO SYMB TABLE(COMMON HERE TOO)_^1_%JMP*_!D1D_^1D4_#SLS_]_^1_%RTJ*_!D1_^1_%SQN_"2_^1_%STQ-_!LA,I_^1_%JMP*_!(D4€€)_0NO SYMBOL PRESENT_^1_%RTJ*_!(D+13)_.MOVE SYM TO LA_^1_%LDA-_!LP,I_^1_%SAN_"4_^1_%ENA_"1_%NO LFT PAREN-1 INTO CMD WD_^1_%STA-_!AX,I_^1_%ENQ_"1_^1_%JMP*_!(D4),Q_^1D4B_"RTJ*_!(D+4)_/CALL AXPR_^1_%SQZ_"2_^1_%ENQ_"2_%NON-ZERO RELOCATION_^1_%JMP*_!(D4),Q_^1D4C_"LDQ-_!CS,I_^1_%INQ_"-2_^1_%SQM_"1_^1_%JMP*_!D1A_#NO BLANK OR COMMA NEXT_^1_%ENQ_"3_^1_%JMP*_!(D4),Q_.NORMAL RETURN_^1BSS_"RTJ€€*_!D4_^1_%JMP*_!D8_^1_%JMP*_!D4C_1NO LEFT PAREN_^1_%JMP*_!D1A_^1*_1NORMAL RETURN ADDRESS TO COMD WORD_^1_%STA-_!W1,I_^1_%RTJ*_!D5_$NAME INTO SYM TABLE_^1_%LDA-_!W1,I_^1_%SAN_"1_^1_%JMP*_!D1D_^1D6_#LDQ-_!AX,I_^1_%RTJ*_!(D+12) BUMP COUNTER BY ADDRESS_^1_%JMP*_!D1D_^1D8_#LDA-_!SY+1,I_^1_%SAN_"1_3NULL FIELD_^1_%JMP*_!D1D_^1_%LDA-_!LP,I_^1_%SAZ_"1_^1_%JMP*_!D4B_1LEFT PAREN PRESENT_^1_€€%ENA_"0_^1_%JMP*_!D4C_^1D5_#SLS_]_^1_%LDA-_!PC,I_^1_%LDQ-_!RM,I_^1_%RTJ*_!(D+8)_^1_%JMP*_!(D5)_^1DF_#LDA-_!SY+1,I_^1_%SAZ_"3_^1_%LDA-_!CS,I_^1_%INA_"-2_^1_%SAM_"1_^1_%JMP*_!D1D_^1_%ENA_"0_^1_%STA-_!AX,I_^1_%STA-_!RC,I_^1_%JMP*_!EQU+5_^1D_$ADC_"CHPR,ER,0,0,AXPR,CHPU,PRNT,NEXT_^1_%ADC_"SYPT,0,0_^1_%ADC_"UP1,UP2,MOVE,SYCH,OV_^1D1_#SLS_]_^1_%RAO-_!IS,I_0LEAD SGN ILLEGAL_^1_%RTJ*_!(D)_#€€TO CHARACTER PROCESSOR_^1_%SAN_"1_%ERROR FOUND BY CHPR_^1_%JMP*_!(D1)_"NO ERROR - RETURN_^1D1A_"ENA_"0_^1_%STA-_!AX,I_0ZERO ADDRESS_^1_%STA-_!RC,I_0AND RELOCATION_^1D1D_"LDA-_!CS,I_0IS THE NEXT_^1_%INA_"-1_$CHARACTER A COMMA_^1_%SAN_"1_3NO_^1_%JMP*_!D1+1_0YES_^1D1C_"JMP*_!(D+7)_^1EXT_"RTJ*_!(D)_1TO CHPR_^1_%SQN_"DL1-1_^1_%LDA-_!SY+1,I_.NO SYMBOL PRESENT_^1_%SAZ_"1_^1_%JMP*_!EXT2_0N€€ULL FIELD_^1EXT1_!ENQ_"1_^1_%RTJ*_!(D+1)_^1**_]_^1******_]_^1******_]_^1****_]_^1*************************************************************_^1**_]_^1EXT2_!NOP_"0_^1**_]_^1**_]_^1**_]_^1_%LDA-_!CS,I_^1_%SAZ_"EXT3_0EXIT_^1_%INA_"-1_^1_%SAN_"1_^1_%JMP*_!EXT_1COMMA NEXT_^1_%ENQ_"1_^1_%RTJ*_!(D+1)_/ILLEGAL TERMINATOR_^1EXT3_!JMP*_!(D+7)_/EXIT_^1_%RTJ*_!(D+13)_.MOVE SYM TO LA_^1DL1_"L€€DA-_!ST,I_^1_%RTJ*_!(D+14)_.SEARCH SYMBOL TABLE_^1_%SQM_"2_^1DK_#ENQ_"0_3ERR - EXT IN SYMTAB_^1_%JMP*_!EXT1+1_^1_%LDA-_!ET,I_^1_%RTJ*_!(D+14)_.SEARCH EXT TAB_^1_%SQM_"DH1-*-1_-NOT FOUND ****_^1_%LDA-_!1,Q_1FOUND - COMPARE MODE_^1_%AND*_!DT5+1_/PICK UP REL EXT BIT_^1_%ARS_"9_^1_%EOR-_!AM,I_^1_%SAZ_"1_3OK_^1_%JMP*_!DK_2ERR - NO MATCH_^1_%JMP*_!EXT2_^1**************************_^1**_€€]_^1**_"DH1 WAS A LABEL ON RTJ TO TBLIN. CHANGE_^1**_]_^1DH1_"NOP_"0_^1**_]_^1_%RTJ*_!(D+15)_.CHK TABLE OVF_^1_%ENA_"1_^1_%ALS_"15_^1_%LDQ-_!ET,I_0SET EXTERNAL_^1_%INQ_"-2_2ADDRESS TO_^1_%STA-_!1,Q_1MINUS 7FFF_^1_%TRQ_"A_^1_%SUB-_!LA+3,I_.CALCULATE NEW_^1_%STA-_!ET,I_0EXT TAB ADDRESS_^1_%LDQ-_!LA+3,I_^1_%LDA-_!LA,B_^1_%LDA+_!CONS+ET_^1_%STA*_!*+5_^1_%NOP_"0_^1_%NOP_"0_^1_%LDA-_!LA,€€B_^1_%STA+_!0,Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-5_^1_%LDA-_!AM,I_^1_%SAZ_"6_3****_^1_%LDQ-_!ET,I_0SET RELATIVE BIT_^1_%INQ_"-1_^1_%LDA*_!DT5_^1_%AND-_!1,Q_^1_%ADD*_!DT5+1_^1_%STA-_!1,Q_^1_%JMP*_!EXT2_^1ENT_"RTJ*_!D1_^1_%SQN_"1_^1_%JMP*_!D1D_1NO SYMBOL PRESENT_^1_%RTJ*_!(D+13)_^1DL_#LDA-_!ST,I_0SYMTAB ADDR_^1_%RTJ*_!(D+14)_.SEARCH SYMTAB_^1_%SQP_"1_3SYMBOL FOUND_^1_%JMP*_!DH_2NOT€€ FOUND_^1_%LDA*_!DT5_1SET ENT PT BIT_^1_%AND-_!1,Q_^1_%ADD*_!DT5+1_^1_%STA-_!1,Q_^1_%JMP*_!DT_^1DH_#LDA-_!ET,I_0SEARCH EXT TAB_^1_%RTJ*_!(D+14)_^1***_]_^1***************************************************************_^1**_]_^1_%SQM_"4_^1_%ENQ_"0_3FOUND - ERROR_^1_%RTJ*_!(D+1)_^1**_]_^1****_!-DT- WAS LABEL FOR CALL TO -RESTBL-_^1**_]_^1DT_#NOP_"0_^1**_]_^1_%JMP*_!D1D_^1**_]_^1_%RTJ€€*_!(D+15)_.CHK ROOM IN SYMTAB_^1_%ENQ_"4_^1_%RTJ*_!(D+8)_/PUT ENTRY IN SYMTAB_^1_%JMP*_!D1D_^1DT5_"NUM_"$F7FF_^1_%NUM_"$0800_^1ORG_"LDA-_!AM,I_^1_%SAZ_"12_^1_%ENQ_"0_^1_%LDA-_!OC,I_^1_%SAZ_"7_3NOT IN ORG MODE_^1_%INA_"0_^1_%STA-_!PC,I_^1_%LDA-_!OR,I_^1_%STA-_!RM,I_^1_%STA-_!RC,I_^1_%STQ-_!OR,I_^1_%STQ-_!OC,I_0SAVE STORAGES_^1DG_#JMP_"NEXT_^1_%STA-_!IS,I_^1_%RTJ+_!AXPR_^1_%INQ_"-2_^€€1_%SQZ_"2_3ERROR COM RELO_^1_%INQ_"-2_^1_%SQM_"1_^1_%JMP*_!DG_2ERROR NEG RELO_^1_%LDQ-_!OC,I_^1_%SQN_"6_3IN ORG MODE NOW_^1_%LDQ-_!PC,I_0SAVE PROG CTR_^1_%SQN_"1_^1_%TCQ_"Q_^1_%STQ-_!OC,I_^1_%LDQ-_!RM,I_0SAVE RELO_^1_%STQ-_!OR,I_^1_%STA-_!PC,I_0RESET PROG CTR_^1_%LDA-_!RC,I_^1_%STA-_!RM,I_0RESET RELO_^1_%JMP*_!DG_2EXIT TO NEXT_^1END_"ENQ_"2_(CAN T PUT SYMB.TBL.ON MS < <>>>_^1_%LDA€€+_!NAMC,Q_^1_%STA-_!UB+4,B_^1_%STA_"NAMSAV+4,Q_#SAVE NAME_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-7_^1_%LDQ_"=N$2050_^1_%STQ-_!UB,I_"ID INTO PUNCH BUFFER_^1_%STQ_"NAMSAV_#SAVE IT_^1_%LDQ-_!CC,I_#STORE COMMON_^1_%STQ-_!UB+1,I_#CTR IN PUNCH BUF._^1_%STQ_"NAMSAV+1_#AND NAM SAVE_^1_%LDQ-_!DC,I_#STORE DATA_^1_%STQ-_!UB+2,I_#CTR IN PUNCH BUF._^1_%STQ_"NAMSAV+2_^1_%LDQ-_!PC,I_^1_%STQ-_!UB+3,I_€€^1_%STQ_"NAMSAV+3_^1_%ENQ_"7_0SET WRD CNT_^1_%STQ-_!PER,I_,FOR PUNC_^1_%NOP_"0_#REPLACES_^1_%NOP_"0_#PUNCH INSTR._^1_%ENA_"0_^1_%STA-_!CC,I_^1_%STA-_!DC,I_^1_%STA-_!PC,I_^1END1_!ENQ_"48_^1_%LDA_"=N$2020_^1_%STA-_!PB,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1_%ENA_"-1_^1_%STA-_!CT,I_^1_%ENA_"1_^1_%STA-_!PSW,I_^1JJPR5 ENA_"1_^1_%STA-_!RM,I_^1**_]_^1_%CLR_"A_^1_%STA_"CONS+CSW_^1_%NOP_€€"0_^1*************************************************************_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAN_"MSG3-2_^1_%RTJ-_!($F4)_%REWIND INT. OUTPUT TAPE_^1_%ADC_"$1C00,CO,0,$8F9,$3000_^1_%LDA_"CONS+CSW_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%CLR_"A_^1_%STA_"CONS+CSW_^1_%NOP_"0_^1_%NOP_"0_^1**_]_^1MSG3_!RTJ-_!($F4)_(O/P MSG TO RELOAD PAPER TAPE****_^1_%NUM_"$C00_^1_%ADC_"CO_^1_%NUM_"0_^1_%NUM_"$€€18FC_^1_%NUM_"5_^1_%ADC_"MSG2_^1**_]_^1_%LDA_"CONS+CSW_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%ENA_"0_^1_%STA-_!CSW,I_^1**_]_^1********************************************************************_^1**_]_^1****_!GO ON TO PASS 3 < < < < >>>>>>>>>>>>_^1***_]_^1***_]_^1_%JMP_"MA1_^1RECV_!ADC_"0_%THIS ROUTINE CONVERTS SYMBOLS_^1_%INQ_"-1_$BACK TO 7 BIT CHARS-ADDR OF_^1_%LDA*_!WV_^1_%STA-_!LA+1,I €€SYMBOL TO BE CONVERTED IN Q AT_^1_%STA-_!LA+2,I_^1_%LDA_"=N$7C0_+ENTRY_^1_%AND-_!1,Q_^1_%ARS_"6_0OUTPUT IS IN LA AND FF_^1_%SAZ_"1_^1_%INA_"$20_#CONVERT 5 BIT CHAR BACK TO 7_^1_%INA_"$20_^1_%ALS_"8_^1_%STA-_!LA,I_^1_%ENA_"$3F_^1_%AND-_!1,Q_^1_%INA_"$20_^1_%ADD-_!LA,I_^1_%STA-_!LA,I_^1_%INQ_"1_^1_%STQ*_!RR+1_^1_%ENQ_"1_^1RR_#LDA+_!0,Q_^1_%SAM_"6_^1_%ADD*_!WV_^1_%STA-_!LA,B_^1_%INQ_"€œ-2_^1_%SQZ_"2_^1_%INQ_"3_^1_%JMP*_!RR_^1_%JMP*_!(RECV)_^1WV_#NUM_"$2020,$2050,$2043,$2044,$2058_^1_%NUM_"$2D50,$2D43,$2D44_^1JAREA NOP_"0_^1_%END_"DPS2_^__œPPS3 CSY/ P€1_%NAM PS3_*DRAFT PASS3 08/28/68_^1_%ENT_"PS3_^1_%EQU_"PAGE(52)_'***** THIS EQU CAN BE SET FOR_^1*_JANY DESIRED PAGE LENGTH*****_^1_%ENT_"DPS3_^1_%EQU_"PS(3)_(TO READ IN PASS4_^1**_]_^1*******************************************************************_^1**_]_^1**_"**** PASS 3, 1700 MACRO ASSEMBLER- MODIFIED AT OCR SOFTWARE,_^1**_-RABINOW ENGINEERING DIV., ROCKVILLE, MD._^1* UPDA€€TED 28 AUGUST 1968 *_^1**********_]_^1*** 4.0 MODIFICATION_^1****** CONSOLIDATE P3 INTO ONE PART_^1****** SAVE NAM FOR RESTART_^1****_]_^1******************************************************************_^1ASSEM JMP_"STP3_^1GETP4 JMP+_!EXEC+4_^1STP3_!CLR_"A_^1_%STA_"CONS+CSW_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAN_"VRB61-1_^1_%RTJ-_!($F4)_^1_%ADC_"$1C00,CO,0,$8F9,$5000_^1_%RTJ*_!(PCH€€43+1)_#WAIT FOR END OF IO_^1_%JMP*_!DPS3_^1VRB61 NUM_"2_#HOLDS OUTPUT OPTION TYPED BY OP._^1******************************************************************_^1**_]_^1**_]_^1PS3_"NOP_"0_-DUMMY ENTRY_^1_%EQU_"DPS3(PS3)_^1_%LDA_"SECTNO_^1_%STA_"SECTOR_^1_%CLR_"A_#INITIALIZE IO_^1_%STA*_!(PCH44+1)_#COMPLETION SWITCH_^1_%RTJ-_!($F4)_0TELL OPERATOR TO READY UNIT1_^1_%NUM_"$C00_^1_%ADC€€_"CO_^1_%NUM_"0_^1_%NUM_"$18FC_^1_%NUM_"7_^1_%ADC_"MSG1_^1PCH43 RTJ+_!STATUS_#WAIT FOR MSG TO BE OUTPUT_^1PCHOPT CLR_"A_#INITIALIZE_^1PCH44 STA+_!CONS+CSW_#COMPLETION SWITCH_^1_%STA+_!ERC_-CLEAR ERROR SWITCH_^1_%ENA_"2_^1_%AND_"EXEC+5_^1_%SAN_"1_^1_%JMP*_!PCH54_^1_%RTJ-_!($F4)_#TYPE OUTPUT OPTIONS_^1_%NUM_"$0C00_^1_%ADC_"CO_^1_%ADC_"0_^1_%NUM_"$18FC_^1_%NUM_"7_^1_%ADC_"PCHMES_^1_€€%RTJ*_!(PCH43+1)_#WAIT FOR MSG TO BE OUTPUT_^1_%CLR_"A_#INITIALIZE IO_^1_%STA*_!(PCH44+1)_#COMPLETION SWITCH_^1_%RTJ-_!($F4)_#INPUT REPLY_^1_%NUM_"$0800_^1_%ADC_"CO_^1_%ADC_"0_^1_%NUM_"$18FD_^1_%NUM_"1_^1_%ADC_"VRB61_^1_%RTJ*_!(PCH43+1)_#WAIT FOR COMPLETION_^1_%LDA*_!VRB61_#GET INPUT CHAR._^1_%ARS_"8_^1_%INA_"-$42_#IS IT A "B"_^1_%SAN_"PCH52_#NO._^1PCH51 STA+_!PCHSW_#YES. SET OUTP€€UT SWITCH TO "BOTH"_^1_%JMP*_!PCH54_#(ZERO EQ. "BOTH")_^1PCH52 INA_"-10_#IS CHAR. AN "L"_^1_%SAN_"PCH53_#NO._^1_%SET_"A_#YES. SET OUTPUT SWITCH TO "LIST ONLY"_^1_%STA*_!(PCH51+1)_#(NEG. EQ. "LIST")_^1_%JMP*_!PCH55_^1PCH53 INA_"-4_#IS CHAR. A "P"_^1_%SAZ_"1_#YES_^1_%JMP*_!PCHOPT_#NO. RE-TYPE "OUTPUT OPTION"_^1_%ENA_"1_#SET OUTPUT SWITCH TO "PUNCH ONLY"_^1_%STA*_!(PCH51+1)_#(POS. €€NON-ZERO EQ. "PUNCH ONLY")_^1PCH54 LDA*_!CMMBA+1_#INITIALIZE I-REG. WITH_^1_%STA-_!I_#BASE ADR. OF COMMON_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAZ_"2_^1_%ENA_"1_^1_%STA-_!$E4_^1_%RTJ_"PUNC_#PUNCH NAM BLOCK_^1PCH55 LDA*_!CMMBA+1_#INITIALIZE I-REG._^1_%STA-_!I_#WITH BASE ADR. OF COMMON_^1PASS3 NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1*_'STATUS_"$FB,,I_**STATUS ON STANDARD PRINT DEVICE_^1_%RTJ-_!(€€$F4)_+*_^1_%NUM_"$600_,*_^1_%NUM_"$8FB_,*_^1_%NUM_"0_/*_^1_%SQP_"1_^1_%JMP*_!*-5_^1CMMBA LDA_"=XCONS_#SET I-REG. TO START OF COMMON_^1_%STA-_!I_^1_%TRQ_"A_^1_%AND*_!JJ3_-MASK TO LEAVE ONLY EQUIP CODE_^1_%ALS_"5_^1_%INA_"-1_^1_%SAZ_"3_^1_%INA_"-4_^1_%SAZ_"2_^1_%JMP*_!JPRNST_^1_%JMP*_!JPRNMT_^1TESTPN RTJ_"EJECT_^1**_]_^1_%JMP*_!NEXT_^1MSG1_!ALF_"7,PASS 3 LOADED_^1MSG2_!ALF_"5,END PA€€SS 3_^1PCHMES ALF_"7,OUTPUT OPTION_^1ANSZ_!NOP_"0_^1JJJ_"NUM_"0_^1PRNFLG NUM_"0_^1LINE_!NUM_"49_^1JJ3_"NUM_"$7800_#MASK FOR DEVICE TYPE_^1PJECT NUM_"$000C_"CHAR FOR PAGE EJECT CARR CONTROL_^1JJ5_"NUM_"$2020_"CHAR FOR NORMAL CARRIAGE CONTROL_^1CARCON NUM_"0_^1JPRNST LDA_"=N$0C00_%PRINTER IS STANDARD_^1_%STA*_!PJECT_(PAGE EJECT CODE_^1_%ENA_"-0_^1_%STA*_!JJ5_*NORMAL CARRIAGE CONTROL€€_^1_%ENA_"36_^1JJ4_"STA*_!LINE_^1_%JMP*_!TESTPN_^1JPRNMT LDA_"=N$3120_%PRINTER IS MAG TAPE_^1_%STA*_!PJECT_(*_^1_%STA*_!PRNFLG_^1_%ENT_"PRNFLG_^1_%JMP*_!TESTPN_'*_^1NEXT_!ENA_"0_^1_%ENQ_"14_^1_%STA-_!DX,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!NEXT+2_^1_%STA-_!LP,I_^1NXT1_!ENA_"PAGE_^1_%SUB-_!PAGL,I_^1_%SAZ_"1_^1_%SAP_"2_^1_%RTJ_"EJECT_/PAGE EJECT_^1_%RTJ*_!RDIM_!K READ IL_^1_%LDQ-_!SKF€€,I_^1_%SQN_"NXT3-*-1_,SKIPPING ON IF_^1_%ALS_"2_^1_%SAP_"3_^1_%ENQ_"3_3ERROR FROM PREVIOUS PASS_^1_%RTJ+_!ER_^1_%LDA-_!IL,I_^1_%ALS_"3_^1_%SAP_"NXT3-*-1_^1NXTOUT RTJ+_!PRNT_^1_%JMP*_!NEXT_^1NXT3_!ENA_"-1_^1_%STA-_!CT,I_^1_%JMP_"LBPK_^1**_]_^1DECV_!ADC_"0_0NUMBER TO CONVERT IN A_^1_%ENA_"0_%THIS ROUTINE CONVERTS THE_^1_%STA-_!TR,I_"BINARY LINE NUMBER TO ASCII_^1_%ENQ_"4_^1_%LDA-_!LN€€,I_"OUTPUT IS 3 DIGITS IN QA WITH_^1_%INA_"-10_.A TRAILING BLANK_^1_%SAM_"2_^1_%RAO-_!TR,I_^1_%JMP*_!*-3_^1_%INA_"58_$ADD BACK 10 PLUS HEX 30 TO_^1_%STA-_!TR,B_-MAKE ASCII CHAR_^1_%LDA-_!TR,I_^1_%STA-_!TR+5,I_^1_%ENA_"0_^1_%STA-_!TR,I_^1_%LDA-_!TR+5,I_^1_%INQ_"-1_^1_%SQZ_"1_^1_%JMP*_!*-13_^1_%LDQ-_!TR+1,I_^1_%QLS_"8_^1_%ADQ-_!TR+2,I_^1_%LDA-_!TR+3,I_^1_%ALS_"8_^1_%ADD-_!TR+4,I_^1_%€€JMP*_!(DECV)_^1RDIM_!ADC_"0_^1_%LDA_"=XIB_^1_%STA*_!IM_^1_%ENA_"0_^1_%STA-_!CSW,I_^1**_]_^1***********************************************************************_^1**_]_^1**_'>>>>>> PAPER TAPR READ ROUTINE TO REPLACE DISC GET < < <_^1**_]_^1**********************************************************************_^1***DEBLOCK INTER SOURCE LANGUAGE TAPE_^1***_]_^1_%STA*_!SAVAQ_!SAVE_^€€1_%STQ*_!SAVAQ+1 CALLERS_^1_%LDA-_!I PROGRAM_^1_%STA*_!SAVAQ+2_!REGISTERS_^1***_]_^1_%LDA*_!BUFFAD_!LOGICAL RECORD LOCATION_^1_%SAN_"1_^1_%JMP*_!GETBLK_^1_%STA-_!I_^1_%SUB_"=N720_!IS BUFFER EMPTY_^1_%SAP_"5 YES, GO INPUT A BLOCK_^1_%JMP*_!DEBLK_!NO, GO MOVE TO WORD AREA_^1_%BZS_"BUFFAD(1),SAVAQ(3)_^1***_]_^1GETBLK RTJ_"EXEC+6_^1_%NUM_"$800_^1_%NUM_"$8F9_^1_%NUM_"$2D0_^1_%ADC_"BU€€FTEN_^1SECTOR NUM_"11_^1_%STA*_!SECTOR_^1_%LDA*_!SAVAQ+2_^1_%STA-_!I_^1_%ENA_"0_^1_%STA-_!CSW,I_^1_%STA*_!BUFFAD_^1_%STA-_!I_^1DEBLK CLR_"Q_^1***_]_^1XFRBUF LDA_"BUFTEN,B_#TRANSFER_^1_%STA*_!IB,Q_#DATA_^1_%INQ_"-47_#IS IB FULL_^1_%SQP_"2_#YES_^1_%INQ_"48_#NO, UPDATE TO NEXT WORD_^1_%JMP*_!XFRBUF_#GO TRANSFER MORE_^1_%LDA-_!I_#UPDATE POINTER TO_^1_%INA_"48_#NEXT LOGICAL_^1_%STA*_!B€€UFFAD_#RECORD AREA_^1_%LDA*_!SAVAQ+2_#RESTORE_^1_%STA-_!I_#CALLERS_^1_%LDA*_!SAVAQ_#PROGRAM_^1_%LDQ*_!SAVAQ+1_#REGISTERS_^1***_]_^1***_]_^1**_]_^1RZ1_"ENQ_"41_^1_%LDA*_!(IM),Q_^1_%SAZ_"1_^1_%STA-_!LN,I_0STORE LINE NO_^1_%INQ_"1_^1_%LDA*_!(IM),Q_^1_%STA-_!IL,I_0IL FLAG BITS_^1_%ENQ_"0_3MOVE IMAGE TO_^1RZ2_"LDA*_!(IM),Q_^1_%SUB_"=N$0D00_^1_%SAZ_"8_'SKIP COUNT TEST IF "CR"............€€..._^1_%ADD*_!*-2_^1_%STA-_!PB+9,B_^1_%INQ_"1_^1_%INQ_"-49_'CHECK IF IL GROUP EXCEEDED ? ? ? ?_^1_%SAZ_"2_^1_%INQ_"49_'NO, ADD CHECK AMOUNT BACK IN ...._^1_%JMP*_!RZ2_'>>>> GO TO CHECK IF NEXT IS TO BE MOVED_^1_%INQ_"49_'END OF MOVE, RESTORE IMAGE LENGTH........_^1_%STQ-_!SL,I_0STORE IMAGE LENGTH_^1_%ENA_"8_^1_%SUB_"LINE_^1_%AAQ_"Q_^1_%SQM_"4_^1_%ENQ_"-9_^1_%ADQ_"LINE_^1_%STQ-_!SL€€,I_0INDICATED_^1_%LDA-_!LN,I_^1_%SAN_"4_^1_%LDA_"=N$2020_^1_%TRA_"Q_^1_%JMP*_!*+1_^1_%RTJ*_!DECV_0CONVERT LINE NO._^1_%STQ-_!PB,I_^1_%STA-_!PB+1,I_^1_%LDA-_!IL,I_^1_%JMP*_!(RDIM)_^1_%BZS_"IM(1),IB(48)_^1STATUS ADC_"0_^1_%LDA_"CONS+CSW_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%CLR_"A_^1_%STA*_!(STATUS+2)_^1_%JMP*_!(STATUS)_,MARK FOR ERROR_^1END_"LDA-_!MD,I_^1_%ENQ_"4_^1_%SAN_"ENDER-*-1_^1_%RTJ+_€€!CHPR_^1_%SAN_"2_^1_%LDA-_!CS,I_^1_%SAZ_"3_^1_%ENQ_"1_^1ENDER RTJ+_!ER_^1_%RTJ+_!PRNT_^1_%RTJ+_!UNCP_0EMPYT PUNCH BUFFER_^1_%ENA_"0_^1_%STA-_!WC,I_^1_%STA-_!NU,I_^1_%CLR_"A_^1_%STA_"CSW,I_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAN_"ENDRW_^1_%RTJ_"EXEC+6_^1_%NUM_"$1C00_^1_%NUM_"$8F9_^1_%NUM_"$3000_^1_%NUM_"$B00_^1ENDRW CLR_"A_^1_%STA_"CONS+CSW_^1_%NOP_"0_^1_%NOP_"0_^1_%RTJ-_!($F4)_0TELL O€€PERATOR TO READY UNIT 0_^1_%NUM_"$C00_^1_%ADC_"CO_^1_%NUM_"0_^1_%NUM_"$18FC_^1_%NUM_"5_^1_%ADC_"MSG2_^1_%RTJ*_!STATUS_^1_%JMP_"GETP4_^1WDPK_!ADC_"0_^1_%LDA-_!W1,I_^1_%RTJ*_!(LDCP+3) HEXC_^1_%LLS_"8_^1_%STQ-_!PB+6,I_^1_%LDQ*_!WV_^1_%LLS_"8_^1_%ALS_"8_^1_%QLS_"8_^1_%STQ-_!PB+7,I_^1_%STA-_!PB+5,I_^1_%LDA-_!EX,I_^1_%SAZ_"WA1-*-1_^1_%LDA*_!WV+4_^1WA_#LDQ-_!PB+7,I_^1_%QLS_"8_^1_%LLS_"8_^€€1_%STA-_!PB+8,I_^1_%STQ-_!PB+7,I_^1_%RTJ*_!(ENDER+3)_^1_%JMP*_!(WDPK)_^1WA1_"LDQ-_!RC,I_^1_%LDA*_!WV,Q_^1_%JMP*_!WA_^1WV_#NUM_"$2020,$2050,$2043,$2044,$2058_^1_%NUM_"$2D50,$2D43,$2D44_^1LDCP_!ADC_"0_^1_%LDA-_!PC,I_^1_%RTJ+_!HEXC_^1_%STQ-_!PB+3,I_^1_%STA-_!PB+4,I_^1_%LDQ-_!RM,I_^1_%LDA*_!WV,Q_^1_%STA-_!PB+2,I_^1_%RTJ*_!WDPK_^1_%JMP*_!(LDCP)_^1**_]_^1RECV_!ADC_"0_%THIS ROUTINE CONVER€€TS SYMBOLS_^1_%INQ_"-1_$BACK TO 7 BIT CHARS-ADDR OF_^1_%LDA*_!WV_^1_%STA-_!LA+1,I SYMBOL TO BE CONVERTED IN Q AT_^1_%STA-_!LA+2,I_^1_%LDA_"=N$7C0_+ENTRY_^1_%AND-_!1,Q_^1_%ARS_"6_0OUTPUT IS IN LA AND FF_^1_%SAZ_"1_^1_%INA_"$20_#CONVERT 5 BIT CHAR BACK TO 7_^1_%INA_"$20_^1_%ALS_"8_^1_%STA-_!LA,I_^1_%ENA_"$3F_^1_%AND-_!1,Q_^1_%INA_"$20_^1_%ADD-_!LA,I_^1_%STA-_!LA,I_^1_%INQ_"1_^1_%STQ€€*_!RR+1_^1_%ENQ_"1_^1RR_#LDA+_!0,Q_^1_%SAM_"6_^1_%ADD*_!WV_^1_%STA-_!LA,B_^1_%INQ_"-2_^1_%SQZ_"2_^1_%INQ_"3_^1_%JMP*_!RR_^1_%JMP*_!(RECV)_^1**_]_^1PUNC_!ADC_"0_^1_%LDA_"PCHSW_#IS OUTPUT SWITCH SET TO "LIST ONLY"_^1_%SAP_"2_#NO_^1_%JMP_"(PUNC)_^1PC2_"NOP_"0_^1_%NOP_"0_^1PC3_"LDA_"=XCONS+UB_^1_%LDQ-_!PER,I_,NO WDS TO OUTPUT_^1_%RTJ*_!BW_2BINARY WRITE_^1PO_#ENA_"0_^1_%ENQ_"56_^1_%STA-€€_!UB,B_-*********************_^1_%INQ_"-1_/*********************_^1_%SQM_"1_0*********************_^1_%JMP*_!*-3_.*********************_^1_%JMP*_!(PUNC)_^1BW_#ADC_"0_^1_%STA*_!BW2_^1_%STQ*_!BW1_^1_%STA*_!DFWA_^1_%STQ*_!DLEN_^1_%ENA_"0_^1_%STA-_!CSW,I_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_-FORMATTED WRITE_^1_%ADC_"CO_^1_%ADC_"0_^1_%NUM_"$8FA_^1BW1_"NUM_"0_^1BW2_"NUM_"0_^1_%RTJ_"STATUS_^1_%E€€NA_"1_^1_%AND_"EXEC+5_^1_%SAN_"1_^1_%JMP*_!(BW)_^1_%LDA-_!$E4_^1_%STA*_!LGOD_^1_%ENA_"0_^1_%STA-_!CSW,I_^1_%RTJ-_!($F4)_)WRITE LOAD AND GO ON DISK_^1_%NUM_"$C00_^1_%ADC_"CO_^1_%NUM_"0_^1_%NUM_"$8B3_^1DLEN_!NUM_"0_^1DFWA_!NUM_"0_^1_%NUM_"0_^1LGOD_!NUM_"0_^1_%RTJ_"STATUS_^1_%RAO-_!$E4_^1_%JMP*_!(BW)_^1RBPK_!ADC_"0_^1_%LDA-_!WC,I_-RBD WORD COUNT_^1_%SAN_"RA-*-1_^1_%INA_"1_^1_%STA-_!WC€€,I_^1_%LDQ_"=N$4050 RBD IMG AND 7-9 CODE_^1_%STQ-_!UB,I_^1_%LDQ-_!RM,I_^1_%QLS_"12_^1_%STQ-_!UB+1,I_^1_%LDQ-_!PC,I_^1_%STQ-_!UB+2,I_^1RA_#ENQ_"0_^1_%STQ-_!HX,I_-SET SWITCH FOR SBRTP_^1_%RTJ*_!RB_^1_%LDQ-_!XMOD,I_^1_%LDA-_!W1,I_^1_%STA-_!UB+1,B_^1_%LDA-_!WC,I_^1_%INA_"1_^1_%STA-_!WC,I_^1_%INA_"-44_^1_%SAN_"1_^1_%RTJ*_!UNCP_^1_%JMP*_!(RBPK)_^1RB_#ADC_"0_0HX=0 NEED LDA- RM,I_^1_%ENQ_"€€0_0HX NON-ZERO NEED INA 8_^1_%DVI_"=N4_#A CONTAINS WORD COUNT-DIV BY 4_^1_%STQ-_!RP,I_-SAVE REMAINDER_^1_%MUI_"=N5_^1_%STA-_!AU,I_-REL BYTE POINTER_^1_%INA_"5_^1_%DVI*_!*-3_^1_%ADD-_!WC,I_^1_%STA-_!XMOD,I_+COMMAND WORD POINTER_^1_%LDQ-_!RP,I_-REMAINDER_^1_%ENA_"3_^1_%EAQ_"Q_^1_%LDA-_!HX,I_^1_%SAN_"9_^1_%LDA-_!RC,I_-RELO BYTE FOR OUTPUT_^1RD_#SQZ_"3_^1_%ALS_"4_^1_%INQ_"-1_^1_%JMP*_!€€RD_^1_%LDQ-_!AU,I_-REL BYTE WORD POINTER_^1_%ADD-_!UB+1,B_^1_%STA-_!UB+1,B_^1_%JMP*_!(RB)_^1_%ENA_"8_^1_%JMP*_!RD_^1**_]_^1UNCP_!ADC_"0_^1_%LDA-_!WC,I_^1_%SAN_"1_^1_%JMP*_!(UNCP)_^1_%INA_"-1_^1_%RAO-_!HX,I_^1_%RTJ*_!RB_^1_%LDQ-_!XMOD,I_+SET WRD CNT_^1_%INQ_"2_0FOR PUNC_^1_%STQ-_!PER,I_^1_%RTJ*_!PUNC_^1_%ENA_"0_^1_%STA-_!WC,I_-ZERO WORD COUNT_^1_%JMP*_!(UNCP)_^1HEXC_!ADC_"0_^1_%LDQ-€€_!I_^1_%STQ-_!RP,I_^1_%ENQ_"0_^1_%STQ-_!I_^1_%ENQ_"0_^1_%LLS_"4_^1_%INQ_"-$A_^1_%SQM_"1_^1_%INQ_"7_^1_%INQ_"$3A_^1_%STQ_"CONS+TR,I_^1_%LDQ-_!I_^1_%INQ_"-3_^1_%SQZ_"2_^1_%RAO-_!I_^1_%JMP*_!HEXC+5_^1_%LDA_"CONS+RP_^1_%STA-_!I_^1_%LDQ-_!TR,I_^1_%QLS_"8_^1_%ADQ-_!TR+1,I_^1_%LDA-_!TR+2,I_^1_%ALS_"8_^1_%ADD-_!TR+3,I_^1_%JMP*_!(HEXC)_^1BLN_"ADC_"0_^1_%LDA_"=N$2020_^1_%ENQ_"48_^1_%STA-_!PB€€,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1_%JMP*_!(BLN)_^1PRNT_!ADC_"0_^1_%LDQ-_!ES,I_^1_%SQZ_"1_^1_%JMP*_!PE_/PASS 2 ERROR_^1_%NOP_"0_^1_%LDA-_!YL,I_^1_%SAN_"BLNK-*-1_^1_%LDQ-_!SL,I_^1_%INQ_"9_3LENGTH OF BUFFER_^1_%STA-_!SL,I_^1_%LDA-_!MPSW,I_^1_%SAZ_"1_^1_%ENQ_"9_3PRINT BINARY WD ONLY_^1_%LDA*_!PD+8 CONS+PB_^1_%RTJ*_!WRIT_^1_%JMP*_!BLNK_^1BLNK_!RTJ*_!BLN_^1_%JMP*_!(PRNT)_^1PD_#EN€€A_"0_^1_%STA-_!CSW,I_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_0FORMATTED WRITE_^1_%ADC_"CO_2COMPLETION ADDR_^1_%ADC_"0_^1_%NUM_"$18FC_/TYPEWRITER_^1_%ADC_"9_^1_%ADC_"CONS+PB_^1_%RTJ+_!STATUS_^1_%JMP*_!BLNK_^1PE_#LDA_"=XPEB_^1_%ENQ_"9_^1_%RTJ*_!WRIT_^1_%JMP*_!(PRNT)_^1WRIT_!ADC_"0_^1*_]_^1_%RAO-_!PAGL,I_^1_%STA*_!WR4+1_,START ADDR_^1_%STQ*_!WR1_.NUMB WDS_^1_%LDA_"PCHSW_^1_%SAZ_"WRITXX_^1_%SAM_€€"WRITXX_^1_%JMP*_!(WRIT)_(EXIT WITHOUT PRINTING_^1WRITXX LDA_"CARCON_^1_%STA*_!CRCON1_^1WR3_"LDA-_!PSW,I_^1_%SAN_"1_^1_%NOP_"0_+****_^1_%ENQ_"48_^1WR4_"LDA+_!0,Q_.MOVE IMAGE TO ALTERNATE_^1_%STA*_!APB,Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!WR4_^1WR2_"ENA_"0_^1_%STA-_!PSW,I_^1_%RAO*_!WR1_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_^1_%ADC_"COP_^1_%ADC_"0_^1_%NUM_"$18FB_^1WR1_"ADC_"0_^1_%ADC_"APB-1_^1€€_%LDA_"CONS+PSW_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%LDA-_!PAGL,I_^1_%INA_"-50_^1_%SAZ_"1_^1_%JMP*_!(WRIT)_^1_%LDA*_!WRIT_^1_%STA*_!*+4_^1_%RTJ+_!EJECT_^1_%JMP+_!0_^1**_]_^1ER_#ADC_"0_^1_%RAO_"ERC_^1_%LDQ*_!ERT,Q_,PICK UP ERR MESSAGE_^1_%STQ-_!ES,I_^1_%JMP*_!ER2_^1_%NOP_"0_^1ER1_"LDA_"=A**_^1_%STA-_!PB+2,I_^1_%STQ-_!PB+3,I_^1_%RTJ_"DECV_^1_%STQ-_!PB,I_^1_%STA-_!PB+1,I_^1ER3_"RTJ*_!PRNT_^1_€€%ENA_"0_^1_%STA-_!RC,I_^1_%STA-_!ES,I_^1_%JMP*_!(ER)_^1ER2_"STQ*_!PEB+3_^1_%LDA_"PCHSW_)DIAGNOSTICS TO TTY?_^1_%SAZ_"1_-BOTH LIST AND PUNCH, CHECK LIST DEVICE_^1_%SAP_"GOTTY_)PUNCH ONLY, GO TO TELETYPE_^1_%RTJ_"TPSTAT_(DETERMINE TYPE OF LIST DEVICE_^1_%JMP*_!NOTTY_)DEVICE WAS PRINTER_^1GOTTY RTJ_"DECV_*DEVICE WAS MAG TAPE_^1_%STQ*_!PEBNEW+2_^1_%STA*_!PEBNEW+3_^1_%RTJ-_!($F4)_^1_%N€€UM_"$C00_^1_%ADC_"CO_^1_%ADC_"0_^1_%NUM_"$18FC_^1_%NUM_"15_^1_%ADC_"PEBNEW_^1_%RTJ*_!(PE-2)_^1NOTTY JMP*_!ER3_^1CRCON1 NUM_"$2020_^1_%BZS_"APB(49)_^1CO_#RAO_"CONS+CSW_^1_%RTJ-_!($F4)_+EXIT REQUEST_^1_%NUM_"$A00_^1COP_"INQ_"1_^1_%STQ_"CONS+PSW_^1_%JMP*_!COP-2_^1ERT_"ALF_"1,DS_^1_%ALF_"1,EX_^1_%ALF_"1,LB_^1_%ALF_"1,PP_^1_%ALF_"1,OP_^1_%ALF_"1,RG_^1_%ALF_"1,RL_^1_%ALF_"1,OV_^1_%ALF_"€€1,UD_^1_%ALF_"1,MO_^1PEBNEW ALF_"6,_^1PEB_"ALF_"9,****** **********_^1*_'HOLDERS AND SWITCHES FOR PASS 2_^1*_1ST MUST BE FIRST_^1_%EQU_"ST(1),ET(ST+1),PSW(ET+1),PB(PSW+1)_^1_%EQU_"TSW(PB+49),CSW(TSW+1)_^1_%EQU_"WMS(CSW+1)_^1_%EQU_"CC(WMS+1),DC(CC+1)_^1_%EQU_"PC(DC+1),DX(PC+1),LA(DX+2),W1(LA+4),W2(W1+1)_^1_%EQU_"AD(W2+1),AF(AD+1),AM(AF+1),CL(AM+1),EX(CL+1)_^1_%EQU_"RC(EX+1),AX(RC+1€€),LC(AX+1),AU(LC+1),AR(AU+1)_^1_%EQU_"TR(AR+1),SY(TR+7),NU(SY+4),SG(NU+1),RP(SG+1)_^1_%EQU_"HX(RP+1),XMOD(HX+1),LT(XMOD+1),ES(LT+1),LP(ES+1)_^1_%EQU_"IG(LP+1),NS(IG+1),IS(NS+1),CT(IS+1),CS(CT+1)_^1_%EQU_"IL(CS+1),MD(IL+1),ID(MD+1),SKF(ID+1)_^1_%EQU_"BS(SKF+1)_^1_%EQU_"UB(BS+1)_^1_%EQU_"LN(UB+57),OR(LN+1),OC(OR+1)_^1_%EQU_"AS(OC+1),SC(AS+1),SS(SC+1)_^1_%EQU_"WC(SS+1),RM(WC+1)_^1_%EQ€€U_"YL(RM+1),SZ(YL+1)_^1_%EQU_"PER(SZ+1)_^1_%EQU_"VBT(PER+1),VMS(VBT+1),IFNAM(VMS+1)_^1_%EQU_"MPSW(IFNAM+1)_^1_%EQU_"VCT(MPSW+1),VWD(VCT+1)_^1_%EQU_"AX16(VWD+1)_^1_%EQU_"ETSAVE(AX16+1)_^1_%EQU_"DVFL(ETSAVE+1)_^1_%EQU_"PAGL(DVFL+1)_^1_%EQU_"SL(PAGL+1)_^1**************************************************_^1_%COM_"CONS(SL+1)_^1_%COM_"FST_^1_%COM_"L,P,X,MM,ERC_^1_%COM_"PCHSW_^1_%COM_"NA€€MSAV(7)_^1_%COM_"EXEC($A0)_^1_%EQU_"SECTNO(EXEC+$9F)_^1**************************************************_^1**************************************************_^1LAA_"ADC_"CONS+LA,CONS+SY_^1SYCH_!ADC_"0_^1_%LDQ-_!SS,I_-SS=0, SYMBOL IN LABEL_^1_%SQN_"5_%SS NOT ZERO,SYMBOL IN SY_^1_%LDQ*_!LAA_^1_%STQ*_!S3-5_^1_%INQ_"3_^1_%STQ*_!S3+4_^1_%JMP*_!*+3_^1_%LDQ*_!LAA+1_^1_%JMP*_!SYCH+4_^1_%L€€DQ-_!I_^1_%STQ-_!RP,I_-SAVE I_^1_%INA_"-1_^1S4_#ENQ_"0_^1_%STA-_!I_%ADDRESS-1 OF TBL TO BE SEARCHED_^1_%STA+_!CONS+HX_*SAVE ADDR OF 1ST WORD_^1S2_#LDA-_!1,I_.PICK UP ENTRY_^1_%SAN_"5_^1_%ENQ_"-1_$END OF TABLE-NOT FOUND_^1SX_#LDA_"CONS+RP_^1_%STA-_!I_0RESTORE I_^1_%JMP*_!(SYCH)_^1_%SAM_"S3-*-1_^1_%SQP_"2_^1S1_#RAO-_!I_%SLEWING ENTRY-INCREMENT ADDRESS_^1_%JMP*_!S2_^1_%LDA_"=N$7FF_+MA€€SK_^1_%SQZ_"1_0PROCESSING 1ST WORD_^1_%SET_"A_^1_%AND-_!1,I_^1_%SUB+_!0,Q_^1_%SAZ_"1_0MATCH_^1_%INQ_"-4_$NO MATCH-SET Q NEG TO SLEW_^1_%INQ_"1_^1_%JMP*_!S1_/GO BACK FOR MORE_^1S3_#SQM_"S5-*-1_+WERE SLEWING_^1_%INQ_"-1_^1_%TCQ_"Q_%DOES ORDINAL IN SY+3 MATCH Q_^1_%ADQ+_!0_^1_%SQN_"S5-*-1_+NO-ENTRY DID NOT MATCH_^1_%LDQ*_!(S2-1) CONS+HX ADDR-1 OF 1ST WD TO Q_^1_%JMP*_!SX_^1S5_#LDA-_!I€€_^1_%INA_"1_^1_%JMP*_!S4_^1LBPK_!RTJ+_!CHPU_^1_%INA_"-$A_.IS IT AN ASTERISK_^1_%SAN_"1_0NO_^1_%JMP*_!LK_/YES_^1_%ENA_"-1_^1_%STA-_!CT,I_-SET CHAR CTR BACK_^1_%RAO-_!IS,I_-LEADING SIGN ILLEGAL_^1_%RTJ*_!(OPC2+3)_,GET LABEL_^1_%SAZ_"L3-*-1_+NO ERROR_^1L6_#ENQ_"2_^1_%RTJ+_!ER_^1_%ENA_"0_^1_%STA-_!LA,I_^1_%JMP*_!L1_^1L3_#SQZ_"L4-*-1_+NUMERIC_^1_%RTJ_"MOVE_^1_%JMP*_!L5_^1L4_#LDA-_!SY+1,€€I_+IS IT NULL FIELD_^1_%SAZ_"3_^1L5_#LDA-_!CS,I_^1_%SAN_"1_^1L1_#JMP*_!OPCP_^1_%JMP*_!L6_^1IGNORE LDA-_!MPSW,I_^1_%EQU_"LK(IGNORE)_^1_%SAN_"2_3NO MACRO PRINT_^1_%JMP+_!NXTOUT_^1_%JMP*_!OPCNX_^1OPCP_!LDA-_!SKF,I_^1_%SAZ_"2_,-_^1_%JMP+_!SKPROC_^1_%LDQ-_!IL,I_^1_%SQM_"1_^1_%JMP*_!OPC2_0NOT A MACRO_^1_%QLS_"1_^1_%SQP_"OPC1-*-1_,MACRO_^1_%LDA-_!MD,I_0MACRO CONTINUATION_^1_%INA_"-2_^1_%S€€AP_"2_^1_%ENQ_"0_3NOT IN DEPTH_^1_%STQ-_!MPSW,I_.PRINT THIS CONTINUATION CARD_^1_%INA_"1_^1_%STA-_!MD,I_^1OPC1_!LDA-_!MPSW,I_^1_%SAN_"2_^1_%RTJ_"PRNT_0PRINT_^1_%RAO-_!MD,I_0BUMP MACRO DEPTH SWITCH_^1OPC1C LDA_"MM_^1_%SAN_"1_^1_%RAO-_!MPSW,I_.RESET NO PRINT SWITCH_^1OPCNX JMP_"NEXT_^1OPC2_!RAO-_!IG,I_^1_%RAO-_!IS,I_-LEADING SIGN ILLEGAL_^1_%RTJ+_!CHPR_-GET OPCODE_^1_%SAN_"OE_^1OPC€€21 SQZ_"1_^1_%JMP*_!OF_^1_%LDA-_!NU,I_"NUMERIC OPCODE-MUST BE ZERO_^1_%SAZ_"O2-*-1_^1OE_#ENQ_"4_^1_%RTJ*_!(L6+2) ER_^1_%LDA-_!CS,I_-PICK UP TERMINATOR_^1_%SAZ_"3_--_^1_%RTJ+_!CHPU_*-_^1_%JMP*_!*-4_+-_^1_%STA-_!AM,I_^1O2_#ENA_"-1_^1_%STA-_!CL,I_"SET CLASS CODE FOR ADC_^1_%ENQ_"0_^1_%JMP*_!O7-3_^1OF_#ENQ_"43_^1_%LDA_"(IM),Q_^1_%SAN_"1_^1_%JMP*_!OE_^1O6_#STA-_!CL,I_^1_%SAM_"1_^1_%JMP€€*_!O7_/MACHINE OPCODE_^1_%ENQ_"45_^1_%LDQ_"(IM),Q_^1_%RAO-_!IS,I_^1_%JMP_"N3_^1O7_#ENQ_"44_^1_%LDQ_"(IM),Q_^1_%STQ-_!W1,I_0BINARY OP CODE_^1_%INA_"-6_^1_%SAZ_"1_^1_%JMP*_!O8_^1_%LDA-_!CS,I_^1_%SAZ_"1_^1_%JMP*_!OE_/ERROR-ILL TERM_^1_%JMP_"REGP_"EXIT TO REGISTER PROCESSOR_^1O8_#LDQ-_!CL,I_^1_%INQ_"-3_^1_%LDA-_!CS,I_-EXAMINE TERMINATOR_^1_%STA-_!AM,I_^1_%SAZ_"9_(BLANK_^1_%SQZ_"7_%ERR-€€CLASS 3,4,5 MUST HAVE BLANK_^1_%INA_"-1_^1_%SAZ_"5_%COMMA ERROR_^1_%INA_"-4_^1_%SAP_"2_^1_%RTJ+_!CHPU_^1_%SAZ_"1_^1_%JMP*_!OE_^1_%RAO-_!IG,I_^1_%JMP_"MAPR_^1_%BZS_"BUFTEN(720)_^1OFJ2_!ADC_"(IM)_^1SKPROC LDA-_!IL,I_^1_%SAP_"5_%NOT A MACRO_^1_%ALS_"1_3MACRO_^1_%SAM_"1_3CONTINUATION_^1_%RAO-_!ID,I_0MACRO CALL_^1SKPR1 JMP+_!IGNORE_^1_%ENQ_"43_^1_%LDQ_"(IM),Q_^1_%SQM_"1_^1_%JMP*_!SKPR€€1_^1_%ENQ_"45_^1_%LDA_"(IM),Q_^1_%LDQ-_!ID,I_^1_%INA_"-17_^1_%SAZ_"6_3EMC_^1_%INA_"1_^1_%SAN_"7_^1_%SQN_"6_3EIF_^1_%RAO-_!IG,I_0IF DEPTH SWITCH NOT SET_^1_%JMP_"EIF_^1_%SQZ_"2_^1_%INQ_"-1_^1_%STQ-_!ID,I_0DECREMENT IF DEPTH SWITCH_^1_%JMP*_!SKPR1_^1**_]_^1**_]_^1**_]_^1CHPU_!ADC_"0_^1_%RAO-_!CT,I_-INCREMENT CHAR CTR_^1_%ENA_"0_^1_%LDQ-_!CT,I_^1_%INQ_"-72_^1_%SQM_"1_^1_%JMP*_!C1+1_-T€€OO MANY CHARS_^1_%INQ_"72_^1_%LRS_"1_^1_%LDQ_"(IM),Q_^1_%SAZ_"1_^1_%QLS_"8_^1_%QRS_"8_0Q CONTAINS 7 BIT CHAR_^1_%SQZ_"CHP1-*-1_,ZERO(NULL PARAM IN MAC SKELET_$N)_^1_%SQM_"CHP1-*-1_,NULL_^1_%LDA-_!AF,I_^1_%SAZ_"1_^1_%JMP*_!(CHPU)_^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_0NO_^1_%ENA_"71_$SET €€CHAR CTR TO 71 FOR END OF_^1_%STA-_!CT,I_-IMAGE_^1CHP1_!JMP*_!CHPU+1_^1_%INQ_"-$13_-BLANK_^1_%SQM_"C1-*-1_+CHAR ILLEGAL_^1_%SQN_"2_^1C3_#SAZ_"C1+1-*-1_)CHAR BLANK-IG NOT SET_^1_%JMP*_!CHPU+1_+GO BACK FOR NEXT CHAR_^1_%INQ_"-$40_-UPPER BOUND 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)_+EXIT_^1C2_#INQ_"$40_.6 BIT CHAR F€€OR OUTPUT_^1_%TRQ_"A_^1_%JMP*_!C1+1_^1**_]_^1**_]_^1XC_#NUM_"0,$C,$B CHAR TBL-BLANK,COMMA,PLUS_^1_%NUM_"$D,$A,$F,8 MINUS,ASTER,SLASH,LFT PAREN_^1_%NUM_"9,4_.RT PAREN,DOLLAR SIGN_^1_%NUM_"$1D,$3B_^1XI_#ADC_"XB_/BLANK,COMMA_^1_%ADC_"XP_/PLUS_^1_%ADC_"XM_/MINUS_^1_%ADC_"XK_/ASTERISK_^1_%ADC_"XH_/SLASH_^1_%ADC_"XL_/LEFT PAREN_^1_%ADC_"XRP_.RIGHT PAREN_^1_%ADC_"XD_/DOLLAR SIGN_^1_%ADC_"€€XT_/EQUAL SIGN_^1_%ADC_"XLB_1EQUAL SIGN,LEFT BRACKET_^1**_]_^1**_]_^1**_]_^1CHPR_!ADC_"0_0ENTRY_^1_%ENA_"0_^1_%ENQ_"10_2LEFT BRACKET_^1_%STA-_!SY,B_;HX,XMOD,LT,ES_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1XLOP_!RTJ*_!(XR+1) CHPU_^1_%ENQ_"10_2ZERO INTO SY,NU,SG,RP,_^1X1_#LDA-_!CS,I_"SEARCH SPECIAL CHARACTERS_^1_%SUB*_!XC,Q_^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_"1_0BLANK_^1_%INQ_"-1_^1_%LDA*_!XI,Q_^1_%LDQ-_!XMOD,I_^1_%STA*_!*+2_^1_%JMP+_!0_0GO TO ROUTINE_^1X5_#LDQ-_!EX,I_-TERMINATOR NEEDED_^1_%SQN_"XA-1-*-1_)YES-ERROR_^1_%LDQ-_!XMOD,I_^1_%INA_"-$10_^1_%SAM_"XA+6-*-1 ERR-BELOW LOWER BOUND_^1_%INA_"-$A_^1_%SAP_"1_0NOT NUMERIC_^1_%JMP*_!XN_/Q CONTAINS MODE_^1_%INA_"-7_^1_%SAM_"8_0NOT€€ ALPHA-ERROR_^1_%INA_"-$1A_^1_%SAP_"XA+6-*-1_)NOT ALPHA-ERROR_^1XA_#SQN_"XALF-*-1_)NOT INITIAL MODE-ALPHA_^1_%ENQ_"1_0SET ALPHA MODE_^1_%STQ-_!XMOD,I_^1_%LDQ-_!RP,I_"RT PAREN OR ASTER SWITCH SET_^1_%ADQ-_!SY+2,I_^1_%SQZ_"1_^1_%JMP*_!XR_/YES-IS ERROR_^1_%INA_"$1B_.CONVERT TO 5 BIT VALUE_^1_%ALS_"6_0XA+6 **_^1_%JMP*_!XALN-3_^1XALF_!INQ_"-1_^1_%SQZ_"1_^1_%JMP*_!XALN_-NUMERIC MODE_^1_%€€LDQ-_!SY+3,I_+XALF+3 **_^1_%INQ_"-6_^1_%SQZ_"XALN-1-*-1_'6 CHARS-EXIT_^1_%INQ_"6_^1_%LRS_"1_^1_%SAM_"3_^1_%LDA-_!CS,I_^1_%ALS_"8_^1_%JMP*_!*+2_^1_%LDA-_!CS,I_^1_%ADD-_!SY,B_-PUT CHAR IN SY_^1_%STA-_!SY,B_^1_%RAO-_!SY+3,I_+INCREMENT CHAR COUNT_^1_%JMP*_!XLOP_-XALN-1 **_^1XALN_!LDQ-_!HX,I_^1_%SQZ_"2_0HEX SWITCH NOT SET ERROR_^1_%INA_"$14_^1_%SAM_"1_^1_%JMP*_!XR_^1_%INA_"$10_.CHANGE T€€O NUMBER_^1_%JMP*_!XNUM_^1XN_#INA_"$A_/CONVERT TO NUMBER_^1_%SQN_"4_^1_%STA-_!NU,I_-INITIAL MODE_^1_%ENA_"2_0**_^1_%STA-_!XMOD,I_+SET NUMERIC MODE_^1_%JMP*_!XLOP_-XNUM-4 **_^1_%INQ_"-1_^1_%SQN_"1_^1_%JMP*_!XALF+3_+ALPHA MODE_^1XNUM_!STA-_!CS,I_^1_%LDA-_!HX,I_^1_%LDQ-_!NU,I_^1_%SAZ_"XN1-*-1_*DECIMAL NUMBER_^1_%LDA-_!CS,I_-HEX NUMBER_^1_%ALS_"12_^1_%LLS_"4_0MULTIPLY BY 16_^1_%SAN_"XN€€1+4-*-1_(OVERFLOW_^1_%LDA-_!NS,I_-16 BITS LEGAL_^1_%SAN_"1_0YES_^1_%SQM_"XN1+1-*-1_(NO-OVERFLOW_^1_%STQ-_!NU,I_^1_%JMP*_!XLOP_^1XN1_"LDA-_!AX16,I_^1_%QLS_"1_^1_%SAN_"1_^1_%SQM_"XN2-*-1_^1_%ENA_"0_^1_%STQ-_!NU,I_^1_%LLS_"2_^1_%SAN_"XO-*-1_^1_%LDA-_!AX16,I_^1_%SAN_"1_^1XN2_"SQM_"XO-*-1_^1_%ADQ-_!NU,I_^1_%SAN_"1_^1_%SQM_"XO-*-1_^1_%ADQ-_!CS,I_^1_%SAN_"1_^1_%SQM_"XO-*-1_^1_%SQP_"2_^1_%€€STQ-_!AX16,I_.NUMBER HAS GONE NEGATIVE_^1_%JMP*_!XN1-2_^1_%SAM_"XO-*-1_.OVERFLOW_^1_%JMP*_!XN1-2_^1XO_#ENQ_"7_^1_%RTJ_"ER_^1_%ENA_"-1_^1_%STA-_!ES,I_^1XR_#RTJ+_!CHPU_^1_%SAZ_"XR1-*-1_*BLANK_^1_%ENQ_"1_^1_%STQ-_!CS,I_-SET CS FOR COMMA_^1_%INA_"-$C_.CHAR COMMA_^1_%SAZ_"XR1-*-1_*YES_^1_%JMP*_!XR_^1XR1_"ENA_"0_^1_%STA-_!LP,I_^1_%ENQ_"9_^1_%STA-_!SY,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!XR€€1+3_^1_%RAO-_!ES,I_^1XX_#ENA_"0_^1_%STA-_!IS,I_^1_%STA-_!EX,I_^1_%LDA-_!ES,I_^1_%LDQ-_!SY,I_^1_%JMP_"(CHPR)_+EXIT FROM ROUTINE_^1XB_#SQN_"1_^1_%RAO-_!SY+1,I INIT MODE-NULL FIELD INDICATOR_^1_%LDA-_!LP,I_^1_%SUB-_!RP,I_^1_%SAZ_"1_^1_%JMP*_!XR1_.NON PAREN MATCH_^1XB2_"LDQ-_!SY+3,I_^1_%SQZ_"3_^1_%INQ_"-1_^1_%QRS_"1_^1_%STQ-_!SY+3,I_+SET CHAR COUNT FOR SY_^1_%JMP*_!XX_^1XP_#SQN_"XM-*-€€1_+PLUS SIGN_^1_%LDA-_!SG,I_-INITIAL MODE_^1_%SAN_"XM+4-*-1 ERR-CONCATENATED OPERATORS_^1_%RAO-_!SG,I_-SET SIGN POSITIVE_^1_%LDA-_!IS,I_-XP+4 **_^1_%SAN_"XM+4-*-1 ERR-LEADING SIGN ILLEGAL_^1_%JMP*_!XNUM-4 XLOP_%XM-1 **_^1XM_#SQZ_"1_^1_%JMP*_!XB2_.ALPHA OR NUMERIC MODE_^1_%LDA-_!SG,I_^1_%SAZ_"1_^1_%JMP*_!XR_$ERR-CONCATENATED OPERATORS_^1_%INA_"-1_^1_%STA-_!SG,I_"SET SIGN SWITCH FOR €€MINUS_^1_%JMP*_!XP+4_^1XK_#SQN_"XH-*-1_+ASTERISK_^1_%RAO-_!SY+2,I_+SET ASTERISK INDICATOR_^1_%RAO-_!EX,I_^1_%JMP*_!XN+3_-SET NUMERIC MODE_^1XH_#SQZ_"1_0SLASH_^1_%JMP*_!XM_^1_%LDA-_!SG,I_^1_%SAN_"XL+5-*-1 ERR-CONCATENATED OPERATORS_^1_%RAO-_!SY+1,I_+SET NULL FIELD_^1_%JMP*_!XX_^1XL_#RAO-_!LP,I_-COUNT LEFT PAREN_^1_%LDA-_!CL,I_^1_%SQZ_"3_^1_%INQ_"-1_^1_%SQZ_"XL2-*-1_^1_%JMP*_!XR_/XL+€€6 **_^1_%SAZ_"XL1-*-1 ERR-PROCESSING LABEL OR OP_^1_%SAM_"XL1+1-*-1_(PSEUDO OPCODE_^1_%INA_"-3_/MACHINE OPCODE_^1_%SAM_"XL1+3-*-1 XLOP_^1XL1_"JMP*_!XR_^1_%INA_"1_0PSEUDO OPCODE_^1_%SAN_"1_^1_%JMP*_!XM-1 XLOP_(CLASS 1 PSEUDO_^1_%INA_"1_^1_%SAN_"XL2+1-*-1_(ERROR-WRONG CLASS_^1_%JMP*_!XL-2_^1XL2_"INA_"2_0MUST BE CLASS 2 PSEUDO_^1_%SAN_"XT+4-*-1_)IS NOT_^1_%JMP*_!XB2_^1XRP_"RAO-_!RP,I_€€^1_%JMP*_!XL1+3 XLOP_^1XD_#SQN_"XT+4-*-1_^1_%RAO-_!HX,I_^1_%JMP_"XN+3_^1XT_#SQN_"3_%ERR-NOT INITIAL MODE-EQUAL SG_^1_%LDA-_!CL,I_^1_%INA_"-1_^1_%SAZ_"1_^1_%JMP*_!XR_/ERROR-NOT CLASS 1_^1_%RTJ*_!(XR+1) CHPU GET CHAR FOLLOWING EQUAL_^1_%RAO-_!LT,I_-SET LITERAL SWITCH_^1_%JMP*_!XX_^1XLB_"SQN_"5_3LEFT BRACKET NOT INITIAL MODE_^1_%LDA-_!MD,I_^1_%SAZ_"3_^1_%ENA_"0_^1_%JMP_"XA_^1_%JMP*_!X€€R_^1**_]_^1**_]_^1OP4_"ADC_"ADC,ORG,EQU,COM,DAT,BSS,BZS_^1_%ADC_"END,ENT,EXT,ALF_^1_%ADC_"NUM,VFD,VFD,IFA_^1_%ADC_"IFC,EIF,EMC,LST,NLS,SPC,EJT_^1N3_#LDA*_!OP4,Q_,PICK UP TRANSFER VECTOR_^1**_]_^1_%STA*_!DAT-1_^1_%LDA-_!CS,I_^1_%STA-_!AM,I_^1_%SAZ_"11_/TERMINATOR BLANK_^1_%INA_"-4_/TERMINATOR ASTERISK_^1_%SAN_"7_0NO-ERROR_^1_%INQ_"-2_2ORG OR ADC OP_^1_%SQM_"2_3YES, ASTERISK OK_^1_%I€€NQ_"-7_2EXT OP_^1_%SQN_"3_0NO-ERROR_^1_%RTJ_"CHPU_^1_%SAZ_"2_0BLANK_^1_%JMP_"OE_^1_%RAO-_!IG,I_^1_%JMP+_!0_0GO TO PSEUDO ROUTINE_^1*_5PSEUDO OP CHECKOUT_^1DAT_"RAO-_!DX+1,I_.SET DATA FLAG_^1COM_"RAO-_!DX,I_"SUPPRESS LOC PRINT_^1_%RTJ*_!D4_^1_%JMP*_!EQU+2 D1A_^1_%JMP*_!D4C_#NO LEFT PAREN PRES_^1_%JMP*_!D4D_#NON ZERO RELOCATION_^1_%LDQ-_!DX+1,I_.NORMAL RETURN_^1_%LDA-_!CC,B_0COMMON O€€R DATA CTR_^1_%STA-_!W1,I_"INTO COMMAND WORD_^1_%ADD-_!AX,I_0ADD ADDRESS_^1_%SAP_"2_^1_%SUB*_!D7+7_-SUBTRACT $8000_^1_%INA_"1_0WRAP AROUND_^1_%STA-_!CC,B_0ADJUST CTR_^1_%LDA-_!W1,I_"SET A FOR SYMBOL TBL PUT_^1_%INQ_"2_%COMMON OR DATA RELOC_^1_%STQ-_!RC,I_-FOR LISTING_^1_%JMP*_!EQU+7_/TO SYM TABLE_^1EQU_"RAO-_!DX,I_"INHIBIT LOCATION PRINT_^1_%RTJ*_!D4_^1_%JMP*_!DF_/NO SYMBOL PRESENT€€_^1_%JMP*_!DF+2_^1_%JMP*_!*+1_1NON ZERO RELOCATION_^1_%LDQ-_!RC,I_0RELOCATION CODE_^1_%STA-_!W1,I_^1_%JMP*_!D1B_^1D4_#SLS_]_^1_%RTJ*_!D1_^1_%SQN_"2_^1_%STQ-_!LA,I_^1_%JMP*_!(D4)_0NO SYMBOL PRESENT_^1_%RTJ*_!(D+13)_.MOVE SYM TO LA_^1_%LDA-_!LP,I_^1_%SAN_"4_^1_%ENA_"1_^1_%STA-_!AX,I_^1_%ENQ_"1_^1_%JMP*_!(D4),Q_^1D4B_"RTJ*_!(D+4)_/CALL AXPR_^1_%SQZ_"2_^1_%ENQ_"2_%NON-ZERO RELOCATION_^€€1_%JMP*_!(D4),Q_^1D4C_"LDQ-_!CS,I_^1_%INQ_"-2_^1_%SQM_"1_^1_%JMP*_!D1A_#NO BLANK OR COMMA NEXT_^1_%ENQ_"3_^1_%JMP*_!(D4),Q_.NORMAL RETURN_^1D4D_"ENQ_"6_^1_%JMP*_!D1A+1_/RELOCATION ERROR_^1BZS_"RAO-_!DX+1,I_.SET BZS FLAG_^1BSS_"RTJ*_!D4_^1_%JMP*_!BSZ1_0NO SYMBOL PRESENT_^1_%JMP*_!D4C_1NO LEFT PAREN_^1_%JMP*_!D4D_#NON-ZERO RELOCATION_^1*_1NORMAL RETURN ADDRESS TO COMD WORD_^1_%STA-_€€!W1,I_^1_%SAN_"1_^1_%JMP*_!D1B_^1_%RTJ*_!(D+2)_/PRINT_^1_%LDA-_!DX+1,I_^1_%SAN_"4_3BZS_^1_%RTJ*_!(D+9)_!EMPTY PUNCH BUFFER_^1D6_#LDQ-_!AX,I_^1_%RTJ*_!(D+12) BUMP COUNTER BY ADDRESS_^1_%JMP*_!D1D_^1_%ENA_"0_^1_%STA-_!W1,I_0ZERO COMD WORD_^1_%LDA-_!WC,I_^1_%SAZ_"7_%PUNCH BUFFER EMPTY_^1_%RTJ*_!(D+8)_/PACK AND PUNCH WHEN BUFFER FU_$L_^1_%RTJ*_!(D+11) BUMP COUNTER BY ONE_^1_%LDA-_!AX€€,I_^1_%INA_"-1_^1_%STA-_!AX,I_^1_%SAZ_"7_3FINISHED_^1_%JMP*_!*-8_^1_%LDA-_!PC,I_^1_%LDQ-_!SZ,I_^1_%SQN_"1_^1_%STA-_!PER,I_,SAVE BLOCK START_^1_%LDA-_!AX,I_^1_%AAQ_"A_3INCREASE BLOCK_^1_%STA-_!SZ,I_0SIZE BY AX_^1_%JMP*_!D6_^1D7_#STA-_!UB+3,I BLOCK SIZE INTO BUFF_^1_%LDA_"=N$6050_^1_%STA-_!UB,I_"CARD TYPE INTO BUFF_^1_%LDA-_!RM,I_^1_%ALS_"12_^1_%EOR_"=N$8000_^1_%STA-_!UB+1,I RELOC €€BYTE INTO BUFF_^1_%LDA-_!PER,I_^1_%STA-_!UB+2,I START ADDR INTO BUFF_^1_%ENQ_"4_^1_%STQ-_!PER,I_^1_%RTJ*_!(D+10)_.PUNCH BZS CARD_^1_%ENA_"0_^1_%STA-_!SZ,I_0ZERO BLOCK SUM_^1_%JMP*_!(D+7)_/EXIT TO NEXT_^1BSZ1_!LDA-_!SY+1,I_^1_%SAN_"1_3NULL FIELD_^1_%JMP*_!D1A_^1_%LDA-_!LP,I_^1_%SAZ_"1_^1_%JMP*_!D4B_1LEFT PAREN PRESENT_^1_%ENA_"0_^1_%JMP*_!D4C_^1DF_#LDA-_!SY+1,I_^1_%SAZ_"3_^1_%LDA-_€€!CS,I_^1_%INA_"-2_^1_%SAM_"1_^1_%JMP*_!D1A_.ERROR NOT NULL_^1_%ENA_"0_^1_%STA-_!AX,I_^1_%STA-_!RC,I_^1_%JMP*_!EQU+5_^1**_]_^1D_$ADC_"CHPR,ER,LDCP,WDPK,AXPRJ_^1_%ADC_"CHPU,PRNT,NEXT_^1_%ADC_"RBPK,UNCP,PUNC_^1_%ADC_"UP1,UP2,MOVE,SYCH_^1D1_#SLS_]_^1_%RAO-_!IS,I_0LEAD SGN ILLEGAL_^1_%RTJ*_!(D)_#TO CHARACTER PROCESSOR_^1_%SAN_"1_%ERROR FOUND BY CHPR_^1_%JMP*_!(D1)_"NO ERROR - RETURN_^1D€€1A_"ENQ_"1_^1_%ENA_"0_^1_%STA-_!AX,I_0ZERO ADDRESS_^1_%STA-_!RC,I_0AND RELOCATION_^1_%RTJ*_!(D+1)_/TO ERROR PROCESSOR_^1D1B_"LDA-_!DX,I_^1_%SAN_"2_^1_%RTJ*_!(D+2)_!PRINT LOCATION,BINARY_^1_%JMP*_!*+2_#AND CARD IMAGE (IF PRESENT)_^1_%RTJ*_!(D+3)_/PRINT BINARY AND CARD IMAGE_^1D1D_"LDA-_!CS,I_0IS THE NEXT_^1_%INA_"-1_$CHARACTER A COMMA_^1_%SAN_"1_3NO_^1_%JMP*_!D1+1_0YES_^1_%LDA-_!SZ,€€I_^1_%SAZ_"1_^1_%JMP*_!D7_$GO OUTPUT BZS CARD_^1D1C_"JMP*_!(D+7)_^1EXT_"JMP_"IGNORE_^1ENT_"RTJ*_!(D)_1TO CHPR_^1_%SAN_"ENT2C-1_-ERR FROM CHPR_^1_%SQN_"ENT1C-2_^1_%LDA-_!SY+1,I_.NO SYMBOL PRESENT_^1_%SAZ_"1_3ERROR_^1_%JMP*_!ENT4C_/OK, NULL FIELD_^1_%ENQ_"1_3ERR, NO SYMBOL PRESENT_^1ENT2C RTJ*_!(D+1)_^1_%JMP*_!ENT4C_^1_%RTJ*_!(D+13)_.MOVE SYM TO LA_^1_%LDA-_!ST,I_"SYMBOL TABLE ADDR_€€^1ENT1C RTJ*_!(D+14)_#>>>>> SYCH - SYMB.TBL.SEARCH < <_^1_%SQP_"1_^1_%JMP*_!DH_^1_%LDA-_!1,Q_^1_%ARS_"12_^1_%INA_"-2_^1_%SAM_"5_^1_%ENQ_"8_3UNDEFINED ENTRY POINT_^1_%INA_"-2_^1_%SAZ_"1_^1_%ENQ_"6_3RELOCATION ERROR_^1_%JMP*_!ENT2C_^1_%JMP*_!ENT4C_^1DH_#NOP_"0_^1ENT4C NOP_"0_^1_%LDA-_!CS,I_^1_%SAZ_"ENT4_0BLANK HERE_^1_%INA_"-1_^1_%SAN_"1_3NO COMMA NEXT_^1_%JMP*_!ENT_1COMMA HERE, C€€HECK NEXT FIELD_^1_%ENQ_"1_3ILLEGAL TERMINATOR_^1_%RTJ*_!(D+1)_^1ENT4_!JMP*_!EXT_1EXIT TO IGNORE_^1ORG_"RAO-_!DX,I_"SUPPRESS LOC PRINT_^1_%LDA-_!AM,I_^1_%SAZ_"ORG1-*-1_^1_%ENQ_"0_^1_%LDA-_!OC,I_^1_%SAN_"1_^1ORG2_!JMP*_!EXT_1EXIT TO IGNORE_^1_%INA_"0_^1_%STA-_!W1,I_"CTR INTO CMD WD_^1_%STA-_!PC,I_0RESTORE COUNTER_^1_%LDA-_!OR,I_0RESTORE RELOCATION_^1_%STA-_!RM,I_^1_%STA-_!RC,I_^1_%S€€TQ-_!OR,I_0ZERO INTO SAVE_^1_%STQ-_!OC,I_0STORAGES_^1_%JMP*_!DG-3_^1ORG1_!STA-_!IS,I_^1_%RTJ*_!(DD+10)_-TO AXPR_^1_%INQ_"-2_^1_%SQZ_"2_%ERROR COMMON RELOC_^1_%INQ_"-2_^1_%SQM_"4_3POSITIVE RELOCATION_^1_%ENA_"0_^1_%STA-_!CS,I_0FORCE EXIT_^1_%ENQ_"6_3ILLEGAL RELOCATION_^1_%JMP*_!D1A+1_^1_%LDQ-_!OC,I_^1_%SQN_"6_^1_%LDQ-_!PC,I_"SAVE PROGRAM CTR_^1_%SQN_"1_^1_%TCQ_"Q_^1_%STQ-_!OC,I_^1_€€%LDQ-_!RM,I_0SAVE RELOCATION_^1_%STQ-_!OR,I_^1_%STA-_!PC,I_"ADDR INTO PROG CTR_^1_%STA-_!W1,I_"ADDR INTO COMD WD_^1_%LDA-_!RC,I_^1_%STA-_!RM,I_^1_%RTJ*_!(DD+13)_^1_%LDA-_!CS,I_^1_%SAZ_"3_^1DG_#ENA_"0_%ERR NO BLANK NEXT_^1_%STA-_!CS,I_^1_%JMP*_!D1A_^1_%JMP*_!D1B_^1DD_#ADC_"D1C,PRNT,ER,CHPU,RECV,PUNC,CHPR,LDCP_^1_%ADC_"RBPK,UP1,AXPRJ_^1_%ADC_"M2J5,M1,UNCP_^1ALF_"RTJ*_!(DD+3)_^1_%INA_€€"$20_^1_%TRA_"Q_^1_%STQ-_!TR+6,I_^1_%INQ_"-$30_^1_%SQM_"2_3NOT A NUMBER_^1_%INQ_"-$A_^1_%SQM_"1_3THIS IS A NUMBER_^1_%JMP*_!ALF1_0NON-NUMERIC CHARACTER_^1_%LDA-_!CT,I_^1_%INA_"-1_^1_%STA-_!CT,I_^1_%RTJ*_!(DD+6)_.TO CHPR_^1_%SAN_"3_3ERR FROM CHPR_^1_%LDA-_!CS,I_^1_%INA_"-1_^1_%SAZ_"1_^1_%JMP*_!ALF1C_/ERR,NO COMMA NEXT_^1_%LDA-_!NU,I_^1_%SAN_"1_^1_%JMP*_!ALF1C+2_-COUNTER IS ZERO **€€*_^1DA1_"ENA_"0_3COME HERE WITH LITERAL_^1_%STA-_!TR+6,I_.SET COMPARE CHARACTER ZERO_^1_%JMP*_!ALF2C_^1ALF1_!RAO-_!AF,I_^1_%RTJ*_!(DD+3)_^1_%INQ_"-$2C_^1_%SQZ_"3_^1ALF1C ENQ_"1_3ERROR_^1_%RTJ*_!(DD+2)_.TO ERROR PROCESSOR_^1_%JMP*_!ORG2_0EXIT TO IGNORE_^1ALF2C RTJ*_!ALFSB_^1_%SAP_"2_^1_%SQN_"DA2+1-*_^1_%JMP*_!DAALF_^1_%LDQ-_!DX+1,I_^1_%SQZ_"DA2+1-*_^1_%ENQ_"0_3LITERAL FROM MAPR_^1€€_%STQ-_!AF,I_^1_%RTJ*_!(DD+3)_.GET NEXT CHARACTER_^1_%SAZ_"1_3SET CODE FOR MAPR_^1_%INA_"-$B_^1_%SAZ_"1_^1_%STA-_!CS,I_^1DA2_"LDA-_!TR,I_^1_%JMP*_!(DD+11)_-RETURN TO MAPR_^1_%LDA-_!TR,I_^1_%STA-_!W1,I_^1_%RTJ*_!(DD+7)_.PRINT_^1_%RTJ*_!(DD+8)_.PUNCH_^1_%RTJ*_!(DD+9)_.BUMP COUNT_^1_%LDA-_!TR+6,I_^1_%SAZ_"2_3COUNTING CHARACTERS_^1_%SAM_"6_3MATCH FOUND ***_^1_%JMP*_!ALF2C_^1_%LDA-_!NU,€€I_^1_%INA_"-1_^1_%STA-_!NU,I_^1_%SAZ_"1_^1_%JMP*_!ALF2C_/NOT FINISHED GET NEXT CHAR_^1DAALF JMP*_!(DD)_^1ALFSB ADC_"0_^1_%ENA_"1_^1_%STA-_!TR,I_^1_%RTJ*_!ALFSB2_.GET NEXT CHARACTER AND CHECK_%T_^1_%LDA-_!TR,I_^1_%QLS_"8_^1_%LLS_"8_^1_%STA-_!TR,I_^1_%LDA-_!TR+6,I_^1_%SAM_"2_3MATCH FOUND ON CHARACTER_^1_%SQN_"1_^1_%JMP*_!ALFSB+3_-GET RIGHT HAND CHARACTER_^1_%JMP*_!(ALFSB)_-RETURN_^€€1*_2R_!T_!L_!B_!F_!V_"PASS 2 AND 3_^1ALFTB2 NUM_"$52,$54,$4C,$42,$46,$56_^1*_2CR HT LF BEL FF VT_!PASS 3 ONLY_^1ALFTB1 NUM_"$0D,$09,$0A,$07,$0C,$0B_^1ALFSB2 ADC_"0_^1_%RAO-_!AF,I_^1_%RTJ*_!(DD+3)_.TO CHPU_^1_%SQM_"5_3END OF IMAGE_^1_%INQ_"-$D_^1_%SQZ_"3_3CR_^1_%LDA-_!CT,I_^1_%INA_"-72_^1_%SAM_"AB21-*-1_^1_%ENQ_"71_^1_%STQ-_!CT,I_^1AB20_!LDA-_!TR+6,I_^1_%SAZ_"2_^1_%TCA_"A_3USING€€ CHARACTER MATCH_^1_%STA-_!TR+6,I_^1_%ENQ_"$20_^1_%JMP*_!AB25C_^1AB21_!INQ_"$D_2RESTORE CHARACTER_^1_%TRQ_"A_^1_%EOR-_!TR+6,I_^1_%SAN_"1_^1_%JMP*_!AB20_0MATCH ON SAVED CHARACTER_^1_%INQ_"-$3A_^1_%SQZ_"4_3COLON_^1_%INQ_"$3A_^1AB25C ENA_"0_^1_%STA-_!AF,I_^1_%JMP*_!(ALFSB2)_,RETURN_^1_%RTJ+_!CHPU_^1_%STQ-_!CS,I_^1_%ENQ_"5_^1_%LDA-_!CS,I_^1_%EOR*_!ALFTB2,Q_^1_%SAZ_"3_3SPECIAL CHARACTE€€R FOUND_^1_%SQZ_"4_3NOT A SPECIAL CHARACTER_^1_%INQ_"-1_^1_%JMP*_!*-5_^1_%LDQ*_!ALFTB1,Q_^1_%JMP*_!AB25C_^1_%ENQ_"$3A_^1_%LDA-_!CT,I_0BACK UP CHARACTER COUNT_^1_%INA_"-1_^1_%STA-_!CT,I_^1_%JMP*_!AB25C_^1ADC_"RAO-_!AD,I_0SET ADC FLAG_^1_%ENA_"0_^1_%STA-_!IS,I_-LEADING SIGN LEGAL_^1DA4_"RTJ+_!AXPRJ_^1_%LDQ-_!LP,I_^1_%LDA-_!EX,I_^1_%INA_"-2_^1_%SAN_"4_^1_%SQZ_"ADC2-*-1_,RELATIVE EXTER€€NAL_^1ADC1C RTJ+_!ER_^1_%JMP*_!ADC1_^1_%LDA-_!AM,I_^1_%SAM_"1_^1_%SAN_"1_^1ADC2_!JMP*_!ADC1_^1_%SQZ_"1_3RELATIVE ADC_^1_%JMP*_!ADC1C_/ERR,PAREN WITH RELATIVE ADC_^1_%LDQ-_!EX,I_^1_%SQN_"4_^1_%LDA-_!RM,I_^1_%SUB-_!RC,I_^1_%SAZ_"2_^1_%ENQ_"6_^1_%JMP*_!ADC1C_/ERR,EXPRESSION IS NOT ABSOLUT_^1_%STA-_!RC,I_^1_%LDA-_!AX,I_^1_%SUB-_!PC,I_^1_%STA-_!AX,I_^1_%JMP*_!ADC3_^1ADC1_!LDQ-_!LP,I_^1€€_%LDA-_!AX,I_^1_%ALS_"1_3IF LEFT PAREN_^1_%LLS_"31_2PRESENT_^1_%STQ-_!LP,I_^1_%LDQ-_!DX+1,I_^1_%SQZ_"2_^1_%JMP+_!M2J5_^1ADC3_!STA-_!W1,I_^1_%RTJ+_!M1_2PRINT AND PUNCH_^1_%JMP*_!DA4_^1NUM_"ENA_"0_^1_%EQU_"DA3(NUM)_^1_%STA-_!IS,I_"LEADING SIGN LEGAL_^1_%RAO-_!NS,I_0SET NUM FLAG_^1_%RTJ*_!(IFA5+1)_,TO CHPR_^1_%SAN_"3_^1_%SQN_"NUM1-*-1_^1_%LDA-_!CS,I_^1_%INA_"-2_^1_%SAP_"NUM1-*-1_^1_%L€€DA-_!NU,I_0LOAD NUMBER_^1_%LDQ-_!SG,I_^1_%SQP_"1_^1_%TCA_"A_3- SIGN COMPLEMENT_^1NUM2_!ENQ_"0_^1_%STQ-_!NS,I_^1_%LDQ-_!DX+1,I_^1_%SQZ_"1_^1_%JMP*_!ADC3-2_.LITERAL TO MAPR ***_^1_%STA-_!W1,I_^1_%RTJ*_!(ADC3+2)_,PRINT AND PUNCH_^1_%JMP*_!DA3+2_^1NUM1_!ENQ_"1_^1_%RTJ*_!(ADC1C+1)_^1_%ENA_"0_^1_%JMP*_!NUM2_^1IFA_"ENA_"0_^1_%STA-_!VBT,I_/USE FOR SUBFIELD COUNT_^1_%STA-_!IS,I_0SET LEADIN€€G SIGN LEGAL_^1IFA1_!RTJ*_!(DA4+1)_-TO AXPR_^1_%SQZ_"6_^1_%ENQ_"6_3EXPRESSION NOT ABSOLUTE_^1_%JMP*_!*+2_^1IFA2_!ENQ_"1_^1_%NOP_"0_^1IFIG_!JMP_"IGNORE_^1_%LDQ-_!VBT,I_/SAVE EXPRESSION_^1_%STA-_!VMS,B_^1_%LDA-_!CS,I_^1_%AAQ_"A_^1_%SAZ_"2_3ILLEGAL FIELD TERMINATOR_^1_%SQZ_"2_^1_%JMP*_!IFA3_0ALL FIELDS PROCESSED_^1_%JMP*_!IFA2_^1_%RAO-_!IS,I_0SET LEADING SIGN ILLEGAL_^1IFA5_!RTJ+_!CHP€€R_0GET COMPARE CODE_^1_%LDA-_!CS,I_^1_%STA-_!VBT,I_^1_%ADQ-_!SY+1,I_^1_%STQ-_!VCT,I_^1_%INA_"-1_^1_%SAZ_"1_^1_%JMP*_!IFA2_0ERR,NO COMMA NEXT_^1_%JMP*_!IFA+2_/GO GET NEXT FIELD ***_^1IFA3_!ENQ_"3_^1_%LDA-_!VCT,I_^1_%SUB*_!IFTAB,Q_^1_%SAZ_"4_3FOUND_^1_%SQZ_"2_3ILLEGAL_^1_%INQ_"-1_^1_%JMP*_!*-5_^1_%JMP*_!IFA2_^1_%LDA-_!VMS,I_^1_%SUB-_!VMS+1,I_^1_%QLS_"1_^1_%JMP*_!*+1,Q_^1_%SAN_"8_3CO€€NDITION NOT MET_^1_%JMP*_!IFIG_^1_%SAZ_"6_^1_%JMP*_!IFIG_^1_%SAP_"4_^1_%JMP*_!IFIG_^1_%SAZ_"2_^1_%SAM_"1_^1_%JMP*_!IFIG_^1_%RAO-_!SKF,I_/CONDITION NOT SATISFIED_^1_%LDA-_!LA,I_0SAVE IF NAM_^1_%STA-_!IFNAM,I_^1_%JMP*_!IFIG_^1*_2EQ_!NE_!LT_!GT_^1IFTAB NUM_"$171,$3A5,$334,$1F4_^1IFC_"LDA-_!MD,I_^1_%ENQ_"0_^1_%SAN_"4_^1_%ENQ_"4_^1IFC2_!ENA_"0_^1_%STA-_!AF,I_^1_%JMP*_!IFA2+1_^1_%STQ-_!€€VBT,I_/USE FOR COUNTING SUBRIELDS_^1_%STQ-_!VMS,I_/USE FOR CHARACTER CTR_^1_%ENQ_"5_^1_%ENA_"0_^1_%STA-_!TR,B_^1_%SQZ_"2_^1_%INQ_"-1_^1_%JMP*_!*-3_^1IFC10 RTJ+_!CHPU_0SLEW OVER LEADING BLANKS_^1_%SAN_"2_^1IFC15 ENQ_"1_^1_%JMP*_!IFC2_0TO ERR AND EXIT_^1_%LDA-_!CT,I_0SET COL CTR BACK ONE_^1_%INA_"-1_^1_%STA-_!CT,I_0GET CHAR WITH AF_^1IF3C_!RAO-_!AF,I_0SWITCH SET_^1_%RTJ*_!(IFC10+1)€€_^1_%STQ-_!TR+6,I_^1_%LDA-_!VBT,I_^1_%INQ_"-9_^1_%SQZ_"4_3TAB_^1_%INQ_"-4_^1_%SQZ_"2_3CR_^1_%INQ_"-$13_^1_%SQN_"1_^1_%JMP*_!IF5C_0BLANK_^1_%INQ_"-$C_^1_%SQN_"1_^1_%JMP*_!IF4C_0COMMA_^1_%RAO-_!VMS,I_^1_%LDA-_!VMS,I_^1_%INA_"-7_^1_%SAM_"1_^1_%JMP*_!IF3C_06 CHAR STORED_^1_%LDQ-_!VMS,I_^1_%INQ_"-1_^1_%LRS_"1_^1_%ADQ-_!VBT,I_^1_%SAM_"3_3RIGHT CHARACTER_^1_%LDA-_!TR+6,I_.LEFT CHARACTER_^€€1_%ALS_"8_^1_%JMP*_!*+2_^1_%LDA-_!TR+6,I_^1_%ADD-_!TR,B_^1_%STA-_!TR,B_^1_%JMP*_!IF3C_^1IF4C_!SAZ_"1_^1_%JMP*_!IFC15_/ERR,COMMA WITH VBT NON ZERO_^1_%ENA_"0_^1_%STA-_!AF,I_^1_%RTJ*_!(IFA5+1)_,GET COMPARE CODE_^1_%ENA_"3_^1_%STA-_!VBT,I_^1_%LDA-_!CS,I_^1_%INA_"-1_^1_%SAZ_"1_^1_%JMP*_!IFC15_/ERR,NO COMMA HERE_^1_%STA-_!VMS,I_^1_%JMP*_!IF3C_0GO GET NEXT FIELD_^1IF5C_!SAN_"1_^1_%JMP*_!€€IFC15_/ERR,BLANK WITH VBT EQU ZERO_^1_%ENQ_"2_^1_%LDA-_!TR,B_^1_%INQ_"3_^1_%EOR-_!TR,B_^1_%SAN_"3_3NO MATCH_^1_%INQ_"-4_^1_%SQM_"2_3MATCH_^1_%JMP*_!*-6_^1_%TRA_"Q_^1_%LDA-_!SY,I_^1_%ADD-_!SY+1,I_^1_%SUB_"=N$171_^1_%SAZ_"4_3COMPARE IS ON EQ_^1_%SUB_"=N$234_^1_%SAZ_"3_3COMPARE IS ON NE_^1_%JMP*_!IFC15_/ILLEGAL COMPARE CODE_^1_%SQP_"2_^1_%SQM_"4_^1_%SQP_"3_^1_%RAO-_!SKF,I_^1_%LDA-_!LA€€,I_^1_%STA-_!IFNAM,I_^1_%ENA_"0_^1_%STA-_!AF,I_^1IF7C_!JMP_"IGNORE_^1EMC_"LDA-_!MD,I_0END MACRO_^1_%SAN_"1_^1_%JMP*_!IF7C_^1_%INA_"-1_^1_%STA-_!MD,I_^1_%SAN_"1_^1_%STA-_!MPSW,I_.ZERO INHIBIT MACRO PRINT SWIT_$H_^1EMC1_!JMP_"NEXT_^1EIF_"LDA-_!SKF,I_/END IF_^1_%SAN_"1_^1_%JMP*_!EIF1_^1_%RTJ+_!CHPR_0GET ADDRESS FIELD_^1_%SAN_"1_^1_%LDA-_!CS,I_^1_%SAN_"EIF1+1_^1_%RAO-_!IG,I_^1_%RTJ*_!(€€EIF+4)_^1_%SAN_"1_^1_%LDA-_!CS,I_^1_%SAN_"EIF1+1_^1_%TRQ_"A_3ADDRESS SYMBOL IN Q_^1_%EOR-_!IFNAM,I_^1_%SAN_"1_3NO MATCH_^1_%STA-_!SKF,I_/MATCH,STOP SKIPPING_^1EIF1_!JMP*_!IF7C_^1_%JMP*_!IFC15_/TO ERR AND IGNORE_^1**_]_^1**_]_^1**_]_^1EJT_"ENA_"0_^1_%STA-_!SL,I_^1_%NOP_"0_^1_%NOP_"0_^1EJECT ADC_"0_^1_%LDA_"L_^1_%SAN_"1_,SKIP IF PRINTING_^1_%NOP_"0_^1_%ENA_"0_^1_%STA-_!PAGL,I_'SET T€€O TOP OF PAGE_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%LDA_"PJECT_^1_%STA_"CARCON_'SET CARRIAGE CONTROL TO TOP-OF-FORM_^1_%ENQ_"20_^1_%LDA+_!PRNFLG_^1_%SAN_"2_^1_%ENA_"-0_^1_%JMP*_!*+3_^1_%LDA_"=N$E0E0_%SET BUFFER TO WASTE TIME_^1_%STA-_!PB,B_)CHARACTERS_^1_%SQZ_"2_^1_%INQ_"-1_^1_%JMP*_!*-3_^1_%LDA_"=XCONS+PB_^1_%ENQ_"21_^1_%RTJ_"WRIT_^1_%LDA*_!SPC2+6_^1_%ENQ_"20_^1_%STA-_!PB,B_$BLANK €€OUT PUNCH BUFFER_^1_%SQZ_"2_(*_^1_%INQ_"-1_'*_^1_%LDA_"=N$2020_#RESET CARRIAGE CONTROL_^1_%STA_"CARCON_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%JMP*_!(EJECT)_^1LST_"ENA_"0_^1_%STA-_!YL,I_^1_%JMP+_!EMC1_$EXIT_^1NLS_"RAO-_!YL,I_^1_%JMP+_!EMC1_^1SPC_"RTJ*_!AXPRJ_^1_%SAZ_"6_^1_%SQZ_"7_+-_^1_%ENQ_"1_^1SPC1_!RTJ+_!ER_^1SPC2_!RTJ+_!PRNT_^1_%JMP+_!EMC1_^1_%STQ-_!SL,I_^1_%LDA_"=N$202€€0_^1_%STA-_!PB,I_^1_%STA-_!PB+1,I_^1_%RTJ*_!(SPC2+1)_^1_%LDA-_!AX,I_^1_%INA_"-1_^1_%STA-_!AX,I_^1_%SAZ_"1_^1_%JMP*_!*-5_^1_%JMP+_!EMC1_^1AXPRJ SLS_"0_$>>>>>>>> THIS LABEL REPLACES "AXPR" < < < <_^1_%ENA_"0_^1_%ENQ_"12_^1_%STA-_!EX,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1_%ENQ_"-0_2SET ADDRESS_^1_%STQ-_!AX,I_0SUMMATION STORAGE_^1AX1_"RTJ+_!CHPR_^1_%SAN_"AA-*-1 ERR FOUND IN CHPR_€€^1_%STA-_!RC,I_^1_%LDA-_!LT,I_^1_%SAZ_"3_^1_%LDA-_!LC,I_-FIRST TERM_^1_%SAN_"AA-*-1_+NO ERROR_^1_%JMP*_!(AXPRJ)_%"LITERAL-RETURN"-- ? ?_^1_%LDA-_!CS,I_^1_%INA_"-6_$TEST FOR LEFT PAREN_^1_%SAN_"AA1-*-1_^1AA_#ENQ_"1_^1_%RTJ*_!(A+1)_/TO ERR PROC_^1_%LDA-_!CS,I_^1_%INA_"-2_^1_%SAM_"2_%BL OR COMMA NEXT_^1_%RTJ*_!(AX1+1)_^1_%JMP*_!*-4_^1_%ENA_"0_^1_%STA-_!RC,I_^1_%STA-_!AX,I_^1_%STA-_!AS€€,I_^1_%JMP*_!A12_^1AA1_"SQZ_"1_^1_%JMP*_!AB_2SYMVOL PRESENT_^1_%LDQ-_!SY+1,I_^1_%SQZ_"6_^1_%INA_"4_3NULL FIELD_^1_%SAM_"3_^1_%LDA-_!LC,I_^1_%SAZ_"1_^1_%JMP*_!AA_^1_%JMP*_!A2_^1_%LDQ-_!SY+2,I_^1_%SQN_"1_^1_%JMP*_!A2_2NUMERIC_^1_%LDA-_!PC,I_"PROGRAM COUNTER =_^1_%STA-_!NU,I_"VALUE OF THIS TERM_^1_%LDA-_!RM,I_"RELOCATION = PROGRAM_^1_%STA-_!RC,I_0RELOCATION MODE_^1_%JMP*_!A2_^1AB_#RAO€€-_!SS,I_0SET SEARCH FLAG_^1_%LDA-_!ST,I_^1_%RTJ*_!(A+3)_/SEARCH SYM TABLE_^1_%SQP_"AB2-*-1_-SYMBOL FOUND_^1_%LDA-_!ET,I_^1_%RTJ*_!(A+3)_/SEARCH EXT TABLE_^1_%SQM_"1_^1_%JMP*_!AW_^1AB1_"NOP_"0_%>>>>>>>>>> DELETE SYM.TBL.DISC CALL >>>>>>>>>_^1_%ENQ_"8_^1_%RTJ+_!ER_.ERROR ROUTINE_^1_%RTJ+_!LDCP_^1_%RTJ+_!RBPK_^1_%RTJ+_!UP1_^1_%JMP*_!AA+2_^1AB2_"LDA-_!1,Q_1PICK UP SYMBOL_^1_%ARS_"12_^1€€_%INA_"-4_^1_%SAN_"1_^1_%JMP*_!AB1_1UNIDENTIFIED ENTRY PT_^1_%INA_"4_^1_%STA-_!RC,I_0STORE RELOCATION_^1_%ADQ-_!SY+3,I_^1_%LDA-_!2,Q_^1_%TCA_"A_^1_%LDQ-_!AX16,I_^1_%SQZ_"2_^1_%ALS_"1_316-BIT ARITH_^1_%ARS_"1_3EXTEND SIGN OF SYMBOL ADDRESS_^1_%STA-_!NU,I_0STORE ADDR VALUE_^1_%JMP*_!A2_^1AW_#RAO-_!EX,I_/SET EXTERNAL FLAG_^1_%LDA-_!CS,I_^1_%INA_"-2_^1_%SAP_"AY1-*-1_^1_%LDA-_!LC,I_^1_%€€INA_"-2_2LEADING TERMINATOR_^1_%SAP_"AY1-*-1_^1_%LDA-_!SG,I_^1_%SAN_"AY1-*-1_^1_%LDA-_!AM,I_^1_%SAM_"2_^1_%LDA-_!AD,I_0ONE WORD COMMAND_^1_%SAZ_"AY1-*-1_^1_%LDA-_!RM,I_0CHECK RELOCATION_^1_%INA_"-2_^1_%SAM_"3_^1AY_#ENQ_"6_3RELOCATION ERROR_^1_%JMP*_!AA+1_^1AY1_"JMP*_!AA_^1_%LDA-_!1,Q_^1_%ARS_"12_^1_%STA-_!RC,I_0SET RELOCATION_^1_%ALS_"12_^1_%EOR-_!1,Q_^1_%STA-_!1,Q_^1_%ARS_"11_^1_%€€SAZ_"5_^1_%LDA-_!AM,I_0RELATIVE EXT_^1_%INA_"1_^1_%SAN_"1_^1_%JMP*_!AA_$ERROR PLUS TERMINATOR_^1_%RAO-_!EX,I_0EX FLAG = 2_^1_%LDA-_!RM,I_0RM INTO EXTERNAL_^1_%ALS_"12_2TABLE_^1_%ADD-_!1,Q_^1_%STA-_!1,Q_^1_%ADQ-_!SY+3,I_^1_%LDA-_!2,Q_1ADDRESS FROM_^1_%TCA_"A_^1_%STA-_!AX,I_^1_%LDA-_!PC,I_0PROGRAM COUNTER OR_^1_%SUB-_!AD,I_0PROGRAM COUNTER_^1_%INA_"1_3PLUS ONE INTO_^1_%TCA_"A_3EXTERN€€AL TABLE_^1_%STA-_!2,Q_^1A12_"ENA_"0_^1_%LDQ-_!AD,I_^1_%SQN_"3_%ENTERED FROM ADC_^1_%LDQ-_!CL,I_^1_%SQP_"1_^1_%STA-_!LP,I_0ZERO LEFT PAREN_^1_%STA-_!SS,I_^1_%LDA-_!AX,I_^1_%LDQ-_!AX16,I_^1_%SQN_"1_^1_%AND*_!A_%MASK ADDRESS TO_^1_%STA-_!AX,I_015 BITS_^1_%LDQ-_!RC,I_^1_%JMP*_!AA-4_0RETURN_^1A_$ADC_"$7FFF,ER,MOVE,SYCH_^1A2_#LDQ-_!LC,I_"LEADING OPERATOR_^1_%LDA-_!SG,I_^1_%SAZ_"4_3NO LE€€ADING SIGN_^1_%SQZ_"1_^1_%JMP*_!AY1_^1_%SAP_"1_%LEADING SIGN PLUS_^1_%INQ_"3_%SET LC CODE MINUS_^1_%INQ_"-4_^1_%STQ-_!RP,I_"SAVE FOR NEXT TEST_^1_%INQ_"1_^1_%SQN_"2_^1_%ENA_"-0_^1_%STA-_!AS,I_"SET ADDRESS MASK NEGATIVE_^1_%LDA-_!RC,I_^1_%SAZ_"A21-*-1_^1_%SQZ_"4_/LC IS MINUS_^1_%INQ_"-1_^1_%SQN_"4_^1_%LDQ-_!AS,I_^1_%SQZ_"2_^1_%ENQ_"4_^1_%JMP*_!*+2_^1_%ENQ_"0_^1_%EAQ_"Q_3OF RC_^1_%LD€€A-_!TR-1,B_.RECORD RELOCATION_^1_%INA_"1_3OF THIS TERM_^1_%STA-_!TR-1,B_^1A21_"LDA-_!RP,I_0LEADING CHARACTER_^1_%LDQ-_!CS,I_0TRAILING CHARACTER_^1_%INQ_"-4_^1_%STQ-_!RP,I_^1_%SAM_"1_%LC = +,-,BL OR COMMA_^1_%JMP*_!AG_2LC = * OR /_^1_%SQM_"1_^1_%JMP*_!AE_2CS = * OR /_^1_%LDA-_!NU,I_"LC,CS = +,-,BL OR COMMA_^1AZ_#LDQ-_!AX16,I_^1_%SQN_"2_316-BIT ARITH_^1_%ALS_"1_^1_%ARS_"1_%EXTEND SIG€€N OF NU_^1_%EOR-_!AS,I_"COMPLEMENT IF SIGN MINUS_^1_%ADD-_!AX,I_^1_%STA-_!AX,I_^1_%ENA_"0_^1_%STA-_!AS,I_^1_%STA-_!RC,I_^1AV_#LDQ-_!CS,I_^1_%INQ_"-2_^1_%SQM_"4_%CS = BLANK OR COMMA_^1_%INQ_"2_%CS INTO LC GO PICK_^1_%STQ-_!LC,I_0UP NEXT TERM_^1_%JMP_"AX1_^1_%ENA_"0_^1_%STA-_!RC,I_^1_%ENQ_"3_3CHECK RELOCATION_^1_%LDA-_!TR-1,B_^1_%INQ_"4_^1_%SUB-_!TR-1,B_^1_%SAN_"4_3RELOCATION HERE_^€€1AV2_"INQ_"-5_^1_%SQN_"1_^1_%JMP*_!A12_^1_%JMP*_!*-7_^1_%STQ-_!RP,I_^1_%INA_"1_%RELOC HERE CHECK IT_^1_%SAN_"6_^1AV1_"LDA-_!RC,I_^1_%SAZ_"1_^1_%JMP*_!AY_2RELOC ERROR_^1_%STQ-_!RC,I_^1_%LDQ-_!RP,I_^1_%JMP*_!AV2_^1_%INA_"-2_^1_%SAZ_"1_^1_%JMP*_!*-6_1RELOC ERROR_^1_%INQ_"-4_^1_%JMP*_!AV1_^1AE_#LDA-_!RC,I_"LC = +,-,BL OR COMMA_^1_%STA-_!AR,I_0CS =* OR /_^1_%LDA-_!NU,I_0SAVE RC AND NU_€€^1_%STA-_!AU,I_^1_%JMP*_!AV_^1AG_#LDQ-_!RC,I_0LC = * OR /_^1_%SQZ_"7_3RC = 0_^1_%SAZ_"1_3LC = *_^1_%JMP*_!AE-3_"ERR DIVISOR RELOC_^1_%LDA-_!AR,I_^1_%SAZ_"1_^1_%JMP*_!AE-3_"ERR TOO MANY RELOCS_^1_%STQ-_!AR,I_0SAVE THIS RELOC_^1_%JMP*_!*+3_^1_%SAZ_"1_^1_%JMP*_!AH_^1_%LDA-_!NU,I_0LC= *_^1_%MUI-_!AU,I_^1_%STA-_!VWD,I_^1_%LDA-_!AX16,I_^1_%SAN_"AG1-*-1_-16-BIT ARITH_^1_%LDA-_!VWD,I_^1_%S€€AP_"2_^1_%AND*_!A_%PRODUCT WRAP AROUND_^1_%INA_"1_^1_%QLS_"1_^1_%AAQ_"A_^1_%SAP_"AG1-*_^1_%CLR_"Q_^1_%JMP*_!*-6_^1AG1_"LDA-_!VWD,I_^1_%LDQ-_!RP,I_^1_%SQP_"1_^1_%JMP*_!AZ_$CS = +,-,BL OR COMMA_^1_%JMP*_!AE+3_0CS = * OR SLASH_^1AH_#LDA-_!NU,I_0LC = /_^1_%SAN_"1_^1_%JMP*_!A2+4_"ERR DIV BY ZERO_^1_%LDA-_!AU,I_^1_%LLS_"16_^1_%LRS_"16_^1_%DVI-_!NU,I_0AU/NU_^1_%JMP*_!AH-4_^1UP2_"SLS_]_^1_€€%SQN_"1_^1_%JMP*_!(UP2)_^1_%RTJ*_!UP1_^1_%INQ_"-1_^1_%JMP*_!*-4_^1UP1_"SLS_"0_3BUMP PROGRAM_^1_%LDA-_!PC,I_0COUNTER BY ONE_^1_%SUB*_!UP1+8_^1_%SAZ_"2_^1_%ADD*_!UP1+8_^1_%INA_"1_^1_%STA-_!PC,I_^1_%JMP*_!(UP1)_^1_%NUM_"$7FFE_^1MOVE_!SLS_"0_/MOVE SYMBOL_^1_%ENQ_"3_3TO LABEL_^1_%LDA-_!SY,B_^1_%STA-_!LA,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-4_^1_%JMP*_!(MOVE)_^1MAPR_!LDA-_!AM,I_"AM NEG =€€ 2 WD COMD_^1_%SAN_"3_^1_%LDQ-_!CL,I_^1_%INQ_"-3_^1_%SQP_"2_3CL 3,4 OR 5_^1_%INA_"-3_$AM ZERO= 1 WD DIRECT_^1_%STA-_!AM,I_"AM ONE = 1 WD REL_^1_%RTJ*_!(M)_^1_%LDQ-_!LT,I_^1_%SQN_"1_^1_%JMP*_!MA_^1_%RAO-_!DX+1,I_^1_%LDA-_!AM,I_0LITERAL_^1_%SAM_"2_^1_%ENQ_"9_3ERR LITERAL IN_^1_%JMP*_!M2B+3_/1 WD COMMAND_^1_%LDA-_!CS,I_^1_%INA_"-$21_^1_%SAN_"1_^1_%JMP*_!(M+1)_!LITERAL IS ALPHA_^1_%INA€€_"-$D_^1_%SAN_"1_^1_%JMP*_!(M+2)_!LITERAL IS NUMERIC_^1_%INA_"-$A_#LITERAL IS ADDR EXP_^1_%SAN_"1_3ILLEGAL_^1_%JMP*_!(M+3)_^1_%JMP*_!*-12_^1MA_#LDQ-_!CL,I_^1_%INQ_"-3_^1_%SQM_"2_^1_%JMP_"MK_^1_%LDQ-_!AM,I_0CLASS 1 OR 2_^1_%SQN_"1_^1_%JMP*_!MF-5_0ONE WORD DIRECT_^1_%INQ_"1_^1_%SQZ_"10_^1_%LDA-_!EX,I_^1_%SAZ_"3_^1_%INA_"-1_^1_%SAZ_"6_^1_%JMP*_!MF-9_/EXTERNAL_^1_%LDA-_!RC,I_^1_%SUB-_!€€RM,I_^1_%SAZ_"MC-*-1_.1 OR 2 WD RELATIVE_^1_%SQM_"1_^1_%JMP*_!M3+2_^1_%LDA-_!LP,I_^1_%ALS_"15_^1_%EOR-_!AX,I_"SET SIGN BIT IN AX_^1_%STA-_!AX,I_^1_%JMP*_!MF_^1MC_#STA-_!RC,I_0SET RELOCATION_^1_%LDA-_!AX,I_^1_%SUB-_!PC,I_"SUBTRACT PROG CTR_^1_%SQP_"3_^1_%INA_"-1_22 WD COMMAND_^1_%STA-_!AX,I_^1_%JMP*_!MF-9_^1_%STA-_!AX,I_^1_%SAP_"1_^1_%TCA_"A_^1_%SUB*_!M5+2_^1_%SAM_"1_^1_%JMP*_!M3+4_€€0ADDRESS ERROR_^1_%LDA*_!M5+1_^1_%EOR-_!W1,I_^1_%STA-_!W1,I_^1_%JMP*_!MF-2_^1_%SUB*_!M5+3_^1_%SAM_"1_^1_%JMP*_!M3+4_^1_%LDA-_!LP,I_^1_%SAZ_"3_^1MF_#LDA*_!M5+4_"SET INDIRECT BIT_^1_%EOR-_!W1,I_^1_%STA-_!W1,I_^1_%LDQ-_!AM,I_^1_%LDA-_!AX,I_^1_%SQM_"1_3TWO WD COMMAND_^1_%JMP*_!M3_^1M2J5_!STA-_!W2,I_^1_%LDQ-_!RC,I_0SAVE RC FOR_^1_%STQ-_!AR,I_02ND WD OF_^1_%ENQ_"0_3TWO WD OUTPUT_^1_%STQ-€€_!RC,I_^1M2_#LDA-_!CS,I_^1_%SAN_"1_^1_%JMP*_!M1+1_^1_%INA_"-1_^1_%SAZ_"1_^1_%JMP*_!M2B+2_/ERROR NO COMMA_^1_%RTJ*_!(M+7)_!PICK UP NEXT CHAR_^1_%SAN_"1_^1_%JMP*_!M1+1_^1_%ENQ_"1_^1_%INA_"-$22_^1_%SAZ_"5_3INDEX IS B_^1_%INA_"-$7_^1_%SAZ_"5_3INDEX IS I_^1_%INA_"-$8_^1_%SAZ_"2_3INDEX IS Q_^1_%JMP*_!M2B+2_/ERROR_^1_%INQ_"1_^1_%INQ_"1_^1_%QLS_"8_^1_%TRQ_"A_^1_%EOR-_!W1,I_0INDEX BITS_^1_%€€STA-_!W1,I_0INTO W1_^1M2B_"RTJ*_!(M+7)_!PICK UP NEXT CHAR_^1_%SAZ_"5_^1_%ENQ_"1_^1_%ENA_"0_^1_%STA-_!CS,I_^1_%ENQ_"1_^1_%RTJ*_!(M+4)_/TO ERROR PROCESSOR_^1_%JMP*_!M1+1_^1M_$ADC_"AXPRJ,DA1,DA3,DA4,ER_^1_%ADC_"LDCP,RBPK,CHPU,UP1_^1_%ADC_"NEXT_^1M5_#NUM_"$8000,$800,$80,$100,$400,$FF,$FF80_^1M1_#SLS_]_^1_%RTJ*_!(M+5)_/PRINT_^1_%RTJ*_!(M+6)_/PUNCH_^1_%RTJ*_!(M+8)_/BUMP COUNTER_^1_%LDA-_€€!CS,I_^1_%INA_"-1_^1_%SAZ_"8_3COMMA NEXT_^1_%LDA-_!AM,I_^1_%SAP_"7_3ONE WORD_^1_%LDA-_!W2,I_0TWO WORDS_^1_%STA-_!W1,I_^1_%LDA-_!AR,I_^1_%STA-_!RC,I_02ND WD RELOCATION_^1_%STA-_!AM,I_^1_%JMP*_!M1+1_0GO AGAIN_^1_%JMP*_!(M1)_^1_%JMP*_!(M+9)_^1M3_#LDQ-_!RC,I_^1_%SQZ_"4_^1_%ENQ_"6_3RELOCATION ERROR_^1_%JMP*_!*+2_^1_%ENQ_"1_^1_%RTJ*_!(M+4)_^1_%LDA*_!M5+5_^1_%AND-_!AX,I_^1_%EOR-_!W1,I_^1_€€%STA-_!W1,I_^1_%JMP*_!M2_^1MK_#SQN_"10_^1_%LDA-_!AX,I_^1_%ALS_"1_^1_%ARS_"1_^1_%SAP_"1_^1_%TCA_"A_^1_%LDQ*_!M5+6_^1_%LAQ_"A_^1_%STA-_!CS,I_^1_%LDQ*_!M5+5_0CLASS 3 COMMAND_^1_%JMP*_!*+4_^1_%INQ_"-1_^1_%SQN_"2_^1_%ENQ_"$1F_1CLASS 4 COMMAND_^1_%JMP*_!MK1_^1_%LDQ-_!RC,I_^1_%SQZ_"MK2-*-1_^1_%SUB-_!PC,I_0CALCULATED SKIP_^1_%INA_"-1_^1_%STA-_!AX,I_^1_%SAP_"1_^1_%JMP*_!M2B+2_^1_%LDA-_!RC,I€€_^1_%SUB-_!RM,I_^1_%STA-_!RC,I_^1_%LDA-_!AX,I_^1MK2_"INA_"-$10_0SKIP CPMMAND_^1_%SAM_"2_^1_%ENQ_"1_^1_%RTJ*_!(M+4)_/ADDRESS ERROR_^1_%ENQ_"$F_^1MK1_"LDA-_!AX,I_^1_%LAQ_"A_3MASK ADDRESS_^1_%EOR-_!W1,I_^1_%STA-_!W1,I_^1_%LDA-_!RC,I_^1_%ADD-_!CS,I_^1_%SAZ_"1_^1_%JMP*_!M2B+2_,ERROR_^1_%JMP*_!M1+1_^1REGP_!RAO-_!IG,I_0IGNORE BLANKS_^1_%RTJ*_!(M+7)_!PICK UP NEXT CHAR_^1_%SAN_"1_^1_%JMP*_!€€M1+1_0BLANK FIELD_^1_%INA_"-$10_^1_%SAN_"4_^1_%RTJ*_!(M+7)_/ZERO FIELD_^1_%SAZ_"1_^1_%JMP*_!M2B+2_!ERR NO BLANK NEXT_^1_%JMP*_!M1+1_^1_%ENQ_"0_^1_%STQ-_!TR+1,I_^1_%STQ-_!TR+2,I_^1_%STQ-_!TR+4,I_^1_%INA_"-$11_^1_%SAN_"2_^1_%ENQ_"4_%A IS DESTINATION REGISTER_^1_%JMP*_!*+9_^1_%INA_"-$C_^1_%SAN_"2_^1_%ENQ_"1_%M IS DESTINATION REGISTER_^1_%JMP*_!*+5_^1_%INA_"-$4_^1_%SAZ_"1_%Q IS DESTINA€€TION REGISTER_^1_%JMP*_!M2B+2_/ADDRESS ERROR_^1_%ENQ_"2_^1_%LDA-_!TR,B_^1_%SAZ_"1_^1_%JMP*_!M2B+2_/REG DEFINED TWICE_^1_%STQ-_!TR,B_^1_%ADQ-_!W1,I_^1_%STQ-_!W1,I_^1_%RTJ*_!(M+7)_/PICK UP NEXT CHAR_^1_%SAZ_"3_3BLANK NEXT_^1_%INA_"-$C_^1_%SAZ_"2_3COMMA NEXT_^1_%JMP*_!*-8_*ADDRESS ERROR_^1_%JMP*_!M1+1_^1_%RTJ*_!(M+7)_/PICK UP NEXT CHAR_^1_%INA_"-$10_^1_%JMP*_!REGP+14_-GO AGAIN_^1**_]_€€^1******************************************************************_^1**_]_^1VFD_"NOP_"0_">>> START OF RTN CHG ED. DEC REMOVED..........._^1**_]_^1*******************************************************************_^1**_]_^1**_]_^1VFDEC ENA_"0_^1_%STA-_!VCT,I_/NUMBER OF BITS IN CURRENY BYT_^1_%STA-_!W1,I_0OUTPUT WORD_^1_%ENA_"-0_^1_%STA-_!VBT,I_/NUMBER OF BITS NOW IN OUTPUT_%OR€€_^1VF3C_!ENA_"0_^1_%STA-_!VMS,I_/MODE SWITCH_^1_%STA-_!EX,I_0RXTERNAL SWITCH_^1_%STA-_!RC,I_0RELOCATION_^1_%STA-_!AX16,I_^1_%STA-_!NS,I_^1VF8C_!RTJ+_!CHPU_^1_%SAN_"1_^1_%JMP*_!VF2C_0BLANK HERE_^1_%INA_"-$C_^1_%SAN_"1_^1_%JMP*_!VF8C_^1_%INA_"-$15_^1_%SAZ_"2_3MODE IS A_^1_%RAO-_!VMS,I_^1_%INA_"-$D_^1_%SAZ_"2_3MODE IS N_^1_%RAO-_!VMS,I_^1_%INA_"-$A_^1_%SAZ_"VF1CA-*-1_+MODE IS X_^1VF1C€€_!ENQ_"1_3ILLEGAL MODE_^1_%RTJ+_!ER_^1_%ENA_"0_3FORCE_^1_%STA-_!VWD,I_/THIS_^1_%STA-_!VCT,I_/WORD_^1_%ENA_"16_2OUT_^1_%STA-_!VBT,I_^1_%RTJ*_!VFSB1_/FORM OUTPUT WORD_^1VF1CB ENA_"0_^1_%STA-_!NS,I_^1_%STA-_!AX16,I_^1_%JMP_"NEXT_0EXIT_^1VF1CA RTJ+_!CHPR_^1_%SAN_"5_3ERR FROM CHPR_^1_%LDA-_!CS,I_^1_%INA_"-5_^1_%SAN_"2_3ERR, NO SLASH NEXT_^1_%LDA-_!NU,I_^1_%SAN_"1_^1_%JMP*_!VF1C_0ERR, €€NO BIT COUNT_^1_%STA-_!VCT,I_/SAVE NO. OF BITS_^1_%LDQ-_!VMS,I_^1_%JMP*_!*+1,Q_^1_%JMP*_!VFA_^1_%JMP*_!VFN_^1VFX_"INA_"-16_^1_%SAZ_"2_^1_%SAM_"3_^1_%JMP*_!VF1C_0ERR, BIT COUNT GREATER TNAN 1_^1_%RAO-_!AX16,I_.FLAG 16-BIT ARITHMETIC_^1_%RAO-_!NS,I_^1_%ENA_"-3_^1_%STA-_!AM,I_^1_%RTJ_"AXPRJ_%EVALUATE EXPRESSION (? ?)>>>>>>>>>_^1_%STA-_!VWD,I_^1_%LDA-_!AX16,I_^1_%SQZ_"5_^1_%SAZ_"4_^1_€€%ENQ_"6_^1_%RTJ*_!(VF1C+2)_,RELOCATION ERROR_^1_%ENA_"0_^1_%STA-_!VWD,I_^1VF4C_!LDQ-_!VCT,I_/FORM MASK_^1_%INQ_"-16_^1_%SQP_"VF2CA-*-1_^1_%INQ_"16_^1_%ENA_"1_3FOR BYTE_^1_%INQ_"-1_^1_%SQZ_"3_^1_%ALS_"1_^1_%INA_"1_^1_%JMP*_!*-4_^1_%AND-_!VWD,I_^1_%STA-_!VWD,I_^1VF2CA RTJ*_!VFSB1_^1VF2C_!LDA-_!CS,I_^1_%SAZ_"4_3BLANK TERMINATOR_^1_%INA_"-1_^1_%SAN_"1_^1_%JMP*_!VF3C_0TERMINATOR COMMA_€€^1_%JMP*_!VF1C_0ILLEGAL TERMINATOR_^1_%LDA-_!VBT,I_^1_%SAZ_"2_^1_%SAM_"2_^1_%JMP*_!VF1C+3_.FORCE LAST WORD OUT_^1_%JMP*_!VF1CB_/EXIT_^1_%JMP_"IGNORE_^1VFN_"INA_"-17_^1_%SAM_"1_^1_%JMP*_!VF1C_0ERR, N GT 16_^1_%RAO-_!NS,I_^1_%RTJ*_!(VF1CA+1)_+TO CHPR_^1_%SAN_"1_3ERR FROM CHPR_^1_%SQZ_"5_3***_^1VF5C_!ENQ_"1_3ERR, V IS SY8BOLIC_^1_%RTJ*_!(VF1C+2)_,ERR, V IS SYMBOLIC_^1_%ENA_"0_^1_%STA-€€_!VWD,I_^1_%JMP*_!VF4C_^1_%LDA-_!NU,I_^1_%LDQ-_!SG,I_0CIMPLEMENT IF_^1_%SQP_"1_3LEADING MINUS_^1_%TCA_"A_^1_%JMP*_!*-6_^1VFA_"STA-_!NS,I_^1_%TRA_"Q_^1_%ENA_"0_^1_%LRS_"3_3Q REG IS ZERO HERE_^1_%SAZ_"1_^1_%JMP*_!VF1C_0BIT CT NOT DIVISIBLE BY 8_^1_%ENA_"8_^1_%STA-_!VCT,I_/SET BIT COUNT FOR THIS BYTE_^1_%RTJ+_!ALFSB2_.GET CHARACTER_^1_%STQ-_!VWD,I_^1_%RTJ*_!VFSB1_/FORM OUTPUT WORD_^1_€€%LDA-_!NS,I_^1_%INA_"-8_^1_%SAZ_"1_^1_%JMP*_!VFA_1NOT FINISHED GO AGAIN_^1_%RTJ*_!(VF8C+1)_^1_%SAZ_"2_^1_%INA_"-$B_^1_%STA-_!CS,I_^1_%JMP*_!VF2C_^1VFSB1 ADC_"0_^1_%LDA-_!EX,I_^1_%SAZ_"3_^1_%INA_"-1_2EXTERNAL_^1_%SAZ_"VFSB2-*-1_+NON-RELATIVE_^1_%JMP*_!VFSB3_^1_%LDA-_!RC,I_^1_%SAN_"1_3RELOCATABLE_^1_%JMP*_!VFS1_0ABSOLUTE_^1VFSB2 LDQ-_!VBT,I_^1_%LDA-_!VCT,I_^1_%INA_"-15_^1_%SAN_"3_^€€1_%INQ_"-1_^1_%SQN_"5_^1_%JMP*_!VFS1_^1VFSB3 LDA-_!VCT,I_^1_%INA_"-16_^1_%SAN_"1_^1_%SQZ_"VFS1-*-1_^1VF6C_!ENQ_"1_^1_%RTJ+_!ER_^1VFS1_!ENA_"16_^1_%SUB-_!VCT,I_^1_%SUB-_!VBT,I_^1_%TRA_"Q_^1_%SQM_"1_^1_%JMP*_!VFS2A_/VWD WILL FIT IN W1_^1_%TCQ_"Q_^1_%STQ-_!VCT,I_^1_%ENA_"1_3FORM MASK FOR_^1_%INQ_"-1_2BITS NOT WANTED_^1_%SQZ_"3_3IN TNIS WORD_^1_%ALS_"1_^1_%INA_"1_^1_%JMP*_!*-4_^1_%TCA€€_"Q_^1_%STQ-_!TR,I_0SAVE COMPLEMENT OF MASK_^1_%AND-_!VWD,I_^1_%LDQ-_!VWD,I_^1_%STA-_!VWD,I_/SAVE REMAINDER OF WORD_^1_%TRQ_"A_^1_%LDQ-_!TR,I_^1_%LAQ_"A_3MASK OFF BITS FOR THIS BYTE_^1_%TCQ_"Q_3COUNT BITS TO BE SHIFTED OUT_^1_%QRS_"1_^1_%ALS_"15_^1_%SQZ_"1_^1_%JMP*_!*-3_^1_%ENQ_"16_^1_%STQ-_!VBT,I_/OUTPUT WORD IS FULL_^1_%JMP*_!VFS2B_^1VFS2A LDA-_!VBT,I_^1_%ADD-_!VCT,I_^1_%STA-_!V€€BT,I_^1_%LDA-_!VWD,I_^1_%SQZ_"3_^1_%ALS_"1_^1_%INQ_"-1_^1_%JMP*_!*-3_^1_%STQ-_!VCT,I_^1VFS2B EOR-_!W1,I_^1_%STA-_!W1,I_^1_%LDA-_!VBT,I_^1_%INA_"-16_^1_%SAZ_"1_3WORD IS FULL_^1_%JMP*_!(VFSB1)_^1_%STA-_!VBT,I_^1_%RTJ+_!LDCP_0PRINT AND PUNCH_^1_%RTJ+_!RBPK_^1_%RTJ+_!UP1_^1_%ENA_"0_^1_%STA-_!W1,I_^1_%LDA-_!VCT,I_^1_%SAN_"1_^1_%JMP*_!(VFSB1)_-FINISHED WITH THIS BYTE_^1ENDVFD JMP*_!VFS1€€_^1_%BZS_"DECBZS(220-ENDVFD+VFDEC)_^1**_]_^1***********************************************************************_^1* TPSTAT - CHECKS TYPE OF LIST DEVICE SPECIFIED, IF LOC. $FB HAS_"*_^1*_)LU NO. OF MAG TAPE, CONTROL GOES TO P+2 OTHERWISE CONTROL_!*_^1*_)GOES TO P+1(PRINTER)._E*_^1************************************************************************_^1_%SPC_"2_^1TPSTAT NOP_"0_€^-RETURN TO CALLER_^1_%RTJ-_!($F4)_)GET STATUS OF LIST DEVICE_^1_%NUM_"$600_^1_%NUM_"$8FB_*LIST LU NUMBER_^1_%NUM_"0_^1_%LLS_"5_^1_%AND_"=N$7_^1_%INA_"-1_,MAG TAPE ?_^1_%SAN_"1_-NO, GO TO P+1_^1_%RAO*_!TPSTAT_(YES, GO TO P+2_^1_%LDA_"=XCONS_(RESTORE I_"CCN1700P3 51-001_^1_%STA-_!I_-CCN1700P3 51-001_^1_%JMP*_!(TPSTAT)_%EXIT TO CALLER_^1_%END_"PS3_^__^PPS4 CSY/ P€1_%NAM PS4_*DRAFT PASS4 09/13/68_^1_%ENT_"PS4_^1_%ENT_"P4END,ASSEM_^1_%ENT_"PASS4_^1**_]_^1*###########_^1*##_]_^1*_]_^1**_'THIS VERSION OF PASS 4 IS AS OF, 13 SEPT.1968......._^1**_+THE CHANGES REFLECT CHANGES IN THE DEFINITION OF_^1**_-"DRAFT" AS PER NJP.................................._^1**_]_^1*** 4.0 MODIFICATION_^1**** RESTART CAPABILITY_^1*_]_^1ASSEM NOP_"0_^1************€€***_^1**_]_^1**_]_^1_%EQU_"ST(1),ET(ST+1),PSW(ET+1),PB(PSW+1)_^1_%EQU_"TSW(PB+49),CSW(TSW+1)_^1_%EQU_"WMS(CSW+1)_^1_%EQU_"CC(WMS+1),DC(CC+1)_^1_%EQU_"PC(DC+1),DX(PC+1),LA(DX+2),W1(LA+4),W2(W1+1)_^1_%EQU_"AD(W2+1),AF(AD+1),AM(AF+1),CL(AM+1),EX(CL+1)_^1_%EQU_"RC(EX+1),AX(RC+1),LC(AX+1),AU(LC+1),AR(AU+1)_^1_%EQU_"TR(AR+1),SY(TR+7),NU(SY+4),SG(NU+1),RP(SG+1)_^1_%EQU_"HX(RP+1),XMOD(HX+1€€),LT(XMOD+1),ES(LT+1),LP(ES+1)_^1_%EQU_"IG(LP+1),NS(IG+1),IS(NS+1),CT(IS+1),CS(CT+1)_^1_%EQU_"IL(CS+1),MD(IL+1),ID(MD+1),SKF(ID+1)_^1_%EQU_"BS(SKF+1)_^1_%EQU_"UB(BS+1)_^1_%EQU_"LN(UB+57),OR(LN+1),OC(OR+1)_^1_%EQU_"AS(OC+1),SC(AS+1),SS(SC+1)_^1_%EQU_"WC(SS+1),RM(WC+1)_^1_%EQU_"YL(RM+1),SZ(YL+1)_^1_%EQU_"PER(SZ+1)_^1_%EQU_"VBT(PER+1),VMS(VBT+1),IFNAM(VMS+1)_^1_%EQU_"MPSW(IFNAM+1)_^1_€€%EQU_"VCT(MPSW+1),VWD(VCT+1)_^1_%EQU_"AX16(VWD+1)_^1_%EQU_"ETSAVE(AX16+1)_^1_%EQU_"DVFL(ETSAVE+1)_^1_%EQU_"PAGL(DVFL+1)_^1_%EQU_"SL(PAGL+1)_^1_%CLR_"A_#INITIALIZE_^1_%STA_"CONS+CSW_#COMPLETION SWITCH_^1_%RTJ-_!($F4)_#TYPE "PASS 4 LOADED"_^1_%ADC_"$C00,CO,0,$18FC,7,MSG86_^1_%RTJ_"STATUS_#WAIT FOR IO COMPLETION_^1********************************************************************_^1€€********************************************************************_^1_%COM_"CONS(SL+1)_^1_%COM_"FST,L,P,X,MM,ERC_^1_%COM_"PCHSW_^1_%COM_"NAMSAV(7)_^1_%COM_"EXEC($A0)_^1**_]_^1**_]_^1*******************************************************************_^1**_]_^1**_"THE CALLING SEQUENCE FOR PASS 1 OF THE ASSEMBLER,(ASSEM)_^1**_'WAS LOCATED HERE. IT HAS BEEN REMOVED FOR PURPOSES OF_^1€€**_'"DRAFT". RABINOW ROCKVILLE, 15 JULY 1968................_^1**_]_^1*******************************************************************_^1*******************************************************************_^1**_]_^1PS4_"NOP_"0_^1_%EQU_"PASS4(PS4)_^1_%LDA_"=XCONS_%SET "I" REG TO START OF COMMON < < <_^1_%STA-_!I_^1_%STA*_!JJJ_-*_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%ENA_"1_^1_%ST€€A_"ESYFLG_^1*_'STATUS_"$FA,,I_** STATUS ON STANDARD PUNCH DEVICE_^1_%RTJ-_!($F4)_+*_^1_%NUM_"$0600_+*_^1_%NUM_"$08FA_+*_^1_%NUM_"0_/*_^1_%SQP_"1_^1_%JMP*_!*-5_^1_%TRQ_"A_^1_%AND*_!JJ3_-MASK TO LEAVE ONLY EQUIP CODE_^1_%ALS_"5_^1_%STA*_!JJP_-STORE EQUIP CODE FOR LATER TEST_^1TESTPR NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1*_'STATUS_"$FB,,I_**STATUS ON STANDARD PRINT DEVI€€CE_^1_%RTJ-_!($F4)_+*_^1_%NUM_"$600_,*_^1_%NUM_"$8FB_,*_^1_%NUM_"0_/*_^1_%SQP_"1_^1_%JMP*_!*-5_^1_%LDA*_!JJJ_^1_%STA-_!I_/RESTORE I-REG_^1_%TRQ_"A_^1_%AND*_!JJ3_-MASK TO LEAVE ONLY EQUIP CODE_^1_%ALS_"5_^1_%INA_"-1_^1_%SAZ_"3_^1_%INA_"-4_^1_%SAZ_"2_^1_%JMP*_!JPRNST_^1_%JMP*_!JPRNMT_^1TESTPN NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%LDA*_!JJP_^1_%INA_"-1_^1_%SAZ_"2_^1_%INA_"-3_^1_%JMP*_!JPUN€€MT_^1_%JMP*_!JPUNST_^1_%JMP*_!JPUNMT_^1TESTDN RTJ*_!EJECT_+PAGE EJECT BETWEEN LIST AND SYM T_$B_^1_%JMP*_!PASS41_^1JJJ_"NUM_"0_^1JJ3_"NUM_"$07F0_^1JJP_"NUM_"0_%TEMP STORE_^1PJECT NUM_"$000C_"CHAR FOR PAGE EJECT CARR CONTROL_^1JJ5_"NUM_"$2020_"CHAR FOR NORMAL CARRIAGE CONTROL_^1PRNFLG NUM_"0_'FLAG WHICH TELLS WHAT EQUIP ST PRINT IS_^1* VALUES OF PRNFLG -1 OUTPUT IS MAG TAPE, 0 IS €€OTHER_^1PUNFLG NUM_"0_'FLAG WHICH TELLS WHAT EQUIP ST PUNCH IS_^1* VALUES OF PUNFLG -1 PUNCH IS PAPER TAPE, 1 IS MAG TAPE, 0 IS OTHER_^1CARCON NUM_"0_^1PAGEJ NUM_"56_^1JPRNST LDA_"=N$0C00_%PRINTER IS STANDARD_^1_%STA*_!PJECT_(PAGE EJECT CODE_^1_%ENA_"-0_^1_%STA*_!JJ5_*NORMAL CARRIAGE CONTROL_^1_%JMP*_!TESTPN_^1JPUNST ENA_"-1_+PUNCH IS STANDARD_^1_%STA*_!PUNFLG_'*_^1_%JMP*_!TESTDN€€_'*_^1JPRNMT LDA_"=N$3120_%PRINTER IS MAG TAPE_^1_%STA*_!PJECT_(*_^1_%ENA_"-1_+*_^1_%STA*_!PRNFLG_'*_^1_%JMP*_!TESTPN_'*_^1JPUNMT ENA_"1_,PUNCH IS MAG TAPE_^1_%STA*_!PUNFLG_'*_^1_%JMP*_!TESTDN_'*_^1EJECT ADC_"0_^1_%JMP*_!(EJECT)_^1_%STA-_!PAGL,I_'SET TO TOP OF PAGE_^1_%NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%LDA*_!PJECT_^1_%STA*_!CARCON_'SET CARRIAGE CONTROL TO TOP-OF-FORM_^1_%ENQ_"20_^1€€_%LDA*_!PRNFLG_^1_%SAN_"2_^1_%ENA_"-0_^1_%JMP*_!*+3_^1_%LDA_"=N$E0E0_%SET BUFFER TO WASTE TIME_^1_%STA-_!PB,B_)CHARACTERS_^1_%SQZ_"2_^1_%INQ_"-1_^1_%JMP*_!*-3_^1_%LDA_"=XCONS+PB_^1_%ENQ_"21_^1_%RTJ_"WRIT_)PRINT LINE_^1_%LDA*_!JJ5_*RESTORE CARRIAGE CONTROL_^1_%STA*_!CARCON_^1_%ENQ_"20_^1_%LDA_"=N$2020_%SET BUFFER TO BLANKS_^1_%STA-_!PB,B_)*_^1_%SQZ_"2_^1_%INQ_"-1_^1_%JMP*_!*-3_^1_%N€€OP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%JMP*_!(EJECT)_^1PASS41 LDQ-_!ST,I_^1_%INQ_"-1_^1END6_!LDA_"=N$8050_^1_%STA-_!UB,I_^1EY_#LDA-_!1,Q_-GET ENTRY_^1_%SAN_"1_^1_%JMP*_!EE_.DONE WITH ENTRY PTS_^1_%ALS_"4_^1_%SAM_"5_/IS ENTRY POINT_^1_%LDA-_!1,Q_-NOT ENTRY-SLEW IT_^1_%INQ_"1_^1_%SAM_"1_^1_%JMP*_!*-3_^1_%JMP*_!EY_.GO BACK FOR NEXT_^1_%RTJ_"ESB_^1_%JMP*_!END6_0GO BACK FOR MORE_^1EE_#NOP_"0_^€€1END1_!NOP_"0_^1**_]_^1*******************************************************************_^1**_]_^1_%ENA_"0_^1_%LDQ-_!WC,I_^1_%STA-_!WC,I_,ZERO WORD COUNT_^1_%SQZ_"4_0IMAGE OUT_^1_%INQ_"1_0SET WD CNT_^1_%STQ-_!PER,I_,FOR PUNC_^1END5_!RTJ+_!PUNC_^1END2_!LDQ-_!ET,I_0EXTERNA9 ADDRESS_^1_%INQ_"-1_^1EF_#ENA_"0_^1_%STA-_!NU,I_^1_%LDA_"=N$A050_)EXTERNAL IMAGE TYPE_^1_%STA-_!UB,I_^1_%LDA-€€_!1,Q_^1_%SAN_"1_^1_%JMP*_!END3_0DONE WITH THIS TABLE_^1_%ALS_"4_^1_%SAP_"1_/NOT RELATIVE EXTERNAL_^1_%RAO-_!NU,I_,REL EXT,SET FLAG_^1_%RTJ_"ESB_^1_%JMP*_!EF_^1END3_!NOP_"0_(>>>>>>>> SUBSTITUTION >>>>>>>>>>>>>>>>>>>>>_^1_%LDQ-_!WC,I_^1_%SQZ_"3_^1_%INQ_"1_0SET WD CNT_^1_%STQ-_!PER,I_,FOR PUNC_^1_%RTJ*_!(END5+1)_^1XFRP_!LDA_"=N$C050 XFR TYPE TO PUNCH BUFFER_^1_%STA-_!UB,I_^1_%LDA-_!S€€Y,I_^1_%SAN_"1_^1_%STA-_!SY+1,I_^1_%LDQ_"=XCONS+SY_^1_%RTJ_"RECV_^1_%LDA-_!LA,I_^1_%STA-_!UB+1,I_^1_%LDA-_!LA+1,I_^1_%STA-_!UB+2,I_^1_%LDA-_!LA+2,I_^1_%STA-_!UB+3,I_^1_%ENQ_"4_0SET WD CNT_^1_%STQ-_!PER,I_,FOR PUNC_^1_%RTJ*_!(END5+1)_^1*******************************************************************_^1**_]_^1******************************************************************_^1***€€***************************************************************_^1**_]_^1**_"**** READ "DRAFT" SUBROUTINES ------_^1**_2IF THEY ARE CALLED AS EXTERNALS (IN EXT.TBL.),_^1**_2"PUNCH" THEM ONTO THE OBJECT PROGRAM TAPE......._^1**_]_^1*_]_^1_%LDA-_!I_^1_%STA_"T1_'SAVE "I" REG........_^1_%LDA_"EXEC+5_^1_%SAP_"2_^1_%JMP_"DPEX_^1_%LDA_"CONS+ET_^1_%STA-_!I_^1_%STA_"SAVEXT_^1DPNAM ENQ_"0_^€€1**_]_^1**_]_^1_%LDA_"=N$2020_^1_%STA_"EXTST_^1_%STA_"EXTST+1_^1_%STA_"EXTST+2_^1**_]_^1_%LDA_"0,I_^1_%SAN_"1_^1_%JMP*_!DEX_^1_%STA_"EXTST,Q_^1DPNM1 RAO-_!I_^1_%LDA_"0,I_^1_%SAM_"6_^1_%ADD_"=N$2020_$ADD HEX 20 TO MAKE IT ASCII CHARS..._^1_%INQ_"1_^1_%STA_"EXTST,Q_^1_%JMP*_!DPNM1_^1**_]_^1_%ENA_"0_^1_%RAO-_!I_#FOR START OF NEXT NAME_^1_%LDQ_"EXTST_^1_%LRS_"6_%PUT CHAR.#2 IN "A"....€€....._^1_%ARS_"2_^1_%AND_"=N$3F00_^1_%ADD_"=N$2000_%ADD "20" TO CONVERT TO ASCII>>>>>>>_^1_%STA_"EXTST_^1_%LRS_"16_(SHIFT CHAR.#1 TO "A"........._^1_%AND_"=N$001F_^1_%ADD_"=N$0040_"ADD "40" TO CHG. TO ASCII >>>>>>>>>>>>_^1_%LLS_"16_^1_%LDA_"EXTST_^1_%LLS_"8_^1_%STQ_"EXTST FIND TWO CHARACTERS NOW IN ASCII_^1**_]_^1_%ENQ_"0_^1_%STQ*_!SCNT_^1**_]_^1DPNM2 LDA_"=XENTRY,Q_#END OF TABLE€€?_^1_%SUB_"=XENTCNT_^1_%SAM_"1_^1_%JMP*_!ERRW_^1_%JMP_"GETENT_^1ERRW_!LDA_"EXTST_^1_%SUB_"=N$4649_.IS IT FIELDS?_^1_%SAZ_"NOTERR_^1_%LDA_"EXTST_^1_%SUB_"=N$4348_.IS IT CHRS?_^1_%SAZ_"NOTERR_^1_%LDA_"EXTST_^1_%SUB_"=N$534B_,IS IT SKIP?_^1_%SAZ_"NOTERR_^1_%SAN_"1_^1NOTERR JMP*_!DPNAM_^1_%RTJ-_!($F4)_/WRITE ERROR MESSAGE_^1_%NUM_"$0C00_.ON_^1_%ADC_"CO_1TTY_^1_%ADC_"0_^1_%NUM_"$18FC_^1€€_%NUM_"2_^1_%ADC_"ERRY_^1_%RTJ_"STATUS_^1_%RTJ-_!($F4)_-WRITE NON-DRAFT VERB ON TTY_^1_%NUM_"$0C00_^1_%ADC_"CO_^1_%ADC_"0_^1_%NUM_"$18FC_^1_%NUM_"3_^1_%ADC_"EXTST_^1_%RTJ_"STATUS_^1XDUMB JMP*_!DPNAM_^1GETENT LDA_"ENTRY,Q_^1_%SAZ_"1_^1_%SAP_"CHKENT_^1_%TCA_"A_-MINUS ENTRY_^1_%STA*_!ALTRTN_(FLAG INDEX INTO SUBR. TABLE_^1_%RAO*_!SCNT_*IF MODULE REQUIRES PRESENCE OF_^1_%INQ_"1_-INC TO€€ NEXT ENTRY_^1_%JMP*_!DPNM2_)A POSSIBLY UNREFERENCED MODULE_^1CHKENT EQU_"CHKENT(*)_^1**_]_^1_%SUB_"EXTST_"NO-- ARE FIRST TWO CHARS. EQUAL ?_^1_%SAZ_"2_'YES_^1_%INQ_"3_)NO----_^1_%JMP*_!DPNM2_^1**_]_^1_%LDA_"ENTRY+1,Q_%TEST NEXT TWO CHARS....._^1_%SUB_"EXTST+1_^1_%SAZ_"2_,THEYR E EQUAL>>>>>>>_^1_%INQ_"3_^1_%JMP*_!DPNM2_^1**_]_^1_%LDA_"ENTRY+2,Q_$TEST LAST TWO CHARS._^1_%SUB_"EXTST+€€2_^1_%SAZ_"2_^1_%INQ_"3_^1_%JMP*_!DPNM2_^1*******_]_^1_%LDA*_!SCNT_#EQUAL NAME FOUND_^1_%ALS_"2_.MULTIPLY BY FOUR_^1_%INA_"3_+ADD THREE FOR SWITCH LOCATION..........._^1_%TRA_"Q_^1_%RAO_"SUBRT,Q_$SET SWITCH FOR THIS NAME IN TABLE....._^1_%LDQ*_!ALTRTN_(IF ANOTHER MODULE IS REQUIRED_^1*_*Q=INDEX INTO SUBR. ELSE Q_^1*_(IS MINUS. THUS ENTRY TABLE_^1*_)CONTAINS INDEX AS SEPARATOR WORD_€€^1_%SAM_"NOALTR_(NOT REQUIRED_^1_%RAO_"SUBRT,Q_'YES, IT IS SO, SET IT ON_^1NOALTR EQU_"NOALTR(*)_^1_%JMP*_!XDUMB_)GET NEXT EXTERNAL_^1ALTRTN NUM_"0_^1***_]_^1ERRY_!ALF_"2,F002_*F002=NONDRAFT PROCEDURE VERB_^1_%BZS_"SCNT_%COUNT OF SUBROUTINE NUMBER_^1_%BSS_"SAVEXT(1)_^1***_]_^1DEX_"NOP_"0_#ALL SUBROUTINES MARKED NOW. GO GET EM........_^1*_]_^1**_]_^1DRDS_!NOP_"0_#READ THE NEXT SUBR€€TN._^1_%LDA_"PCHSW_#IS OUTPUT OPTION SWITCH SET TO "B" OR "P"_^1_%SAP_"2_#YES_^1_%JMP_"DPEX_#NO. SKIP READING OF SUBROUTINES_^1_%RTJ-_!($F4)_^1_%ADC_"$800,CO,0,$8F9,61,SBUF_^1_%LDA_"CONS+CSW_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%ENA_"0_^1_%STA_"CONS+CSW_^1_%LDA-_!I_^1_%STA_"ISAV_^1_%STQ_"QSAV_^1_%RTJ-_!($F4)_#TAKE STATUS_^1_%NUM_"$600_#OF MAG. TAPE_^1_%NUM_"$8F9_^1_%ADC_"DRDS+2_#CONDITION_^€€1_%ALS_"4_#IS THIS_^1_%SAP_"2_#AN EOF_^1_%JMP_"DPEX_#YES_^1_%LDA_"ISAV_^1_%STA-_!I_^1_%LDQ_"QSAV_^1**_]_^1**_]_^1_%LDA*_!SBUFEN_#LOAD ADDR. OF LAST WORD READ_^1_%SUB_"=XSBUF_'SUBTR.START ADDR._^1_%STA_"CONS+PER_^1**_]_^1_%LDA*_!SBUF_$TEST IF IT S A "NAM" BLOCK_^1_%ARS_"13_)BIT 13-15=1, IT S A "NAM" BLOCK_^1_%INA_"-1_^1_%SAN_"1_%............................ ? ? ?_^1_%JMP*_!DPNM3_^1*€€*_]_^1**_]_^1DPUNSW JMP+_!DEX_%"SWITCH" INITIALIZED ON-BYPASS PUNCHING>>>>> >>_^1_%LDA_"=XSBUF_^1_%LDQ_"CONS+PER_^1_%RTJ_"BW_-GO TO "BINARY WRITE" - (PUNCH)_^1_%JMP*_!DEX_^1**_]_^1**_]_^1ISAV_!ADC_"0_^1QSAV_!ADC_"0_^1_%BSS_"SBUF(60),SBUFEN_^1_%BSS_"T1_^1DADR1 ADC_"CONS_^1DJSW_!NUM_"$1400,$1802_^1**_]_^1**_]_^1****_]_^1**************************************************************€€**********_^1**_]_^1DPNM3 ENQ_"0_^1_%LDA*_!DJSW_*SET PUNCH SWITCH TO SKIP_^1_%STA*_!DPUNSW_^1**_]_^1DPNM4 LDA_"=XSUBRT,Q_#END OF TABLE?_^1_%SUB_"=XRTCNT_^1_%SAM_"2_^1_%JMP_"DEX_^1**_]_^1_%LDA_"SUBRT+3,Q_#LOAD "IF PRESENT" SWITCH>>>>>>>>>>>>>_^1_%SAN_"2_0SKIP IF IT S REQUIRED_^1DPNM5 INQ_"4_*NOT NEEDED, INCREMENT TO NEXT NAME_^1_%JMP*_!DPNM4_^1**_]_^1_%LDA_"SUBRT,Q_"TEST CHARS.1 €€% 2 FOR EQUALITY._^1_%SUB*_!SBUF+4_^1_%SAZ_"1_+EQUAL_^1_%JMP*_!DPNM5_$UNEQUAL_^1**_]_^1_%LDA_"SUBRT+1,Q_%TEST CHARS.3 % 4 FOR EQUALITY._^1_%SUB*_!SBUF+5_^1_%SAZ_"1_^1_%JMP*_!DPNM5_#UNEQUAL_^1**_]_^1_%LDA_"SUBRT+2,Q_(TEST CHARS.5 % 6 FOR EQUALITY.._^1_%SUB*_!SBUF+6_^1_%SAZ_"1_+ALL CHARACTERS NOW EQUAL>>>>>>>_^1_%JMP*_!DPNM5_^1**_]_^1_%LDA*_!DJSW+1_(SET SWITCH TO PUNCH THIS ROUTINE_^€€1_%STA*_!DPUNSW_^1_%CLR_"A_^1_%STA_"SUBRT+3,Q_"SET "IF PRESENT" SWITCH OFF FOR THIS RTN._^1_%JMP*_!DPUNSW_*GO TO PUNCH NAME RECORD_^1**_]_^1DEX1_!JMP_"DPEX_^1**_]_^1**********************************************************_^1**_]_^1ENTRY ALF_"3,READ3X_^1_%NUM_"0_^1_%ALF_"3,READ1X_^1_%NUM_"0_^1_%ALF_"3,READ5X_^1_%NUM_"0_^1_%ALF_"3,READX_^1_%NUM_"0_^1_%ALF_"3,CHRSX_^1_%ALF_"3,FIELD€€X_^1_%NUM_"0_^1_%ALF_"3,SKIPX_^1_%NUM_"0_^1_%ALF_"3,WRITEX_^1_%ALF_"3,DISPLX_^1_%ALF_"3,WAITIX_^1_%ALF_"3,WRTOVX_^1_%NUM_"0_^1_%ALF_"3,MOVEX_^1_%NUM_"0_^1_%ALF_"3,IFLSAX_^1_%ALF_"3,IFLSNX_^1_%ALF_"3,IFEQAX_^1_%ALF_"3,IFEQNX_^1_%ALF_"3,IFGRAX_^1_%ALF_"3,IFGRNX_^1_%NUM_"0_^1_%ALF_"3,ADDX_^1_%ALF_"3,SUBX_^1_%NUM_"0_^1_%ALF_"3,CLEARX_^1_%NUM_"0_^1_%ALF_"3,SHIFTX_^1_%NUM_"0_^1_%ALF_"3,E€€XITX_^1_%NUM_"0_^1_%ALF_"3,GOTOX_^1_%NUM_"0_^1_%ALF_"3,SORTX_^1_%NUM_"0_^1_%ALF_"3,LISTX_^1_%NUM_"0_^1_%ALF_"3,ACCEPX_^1_%NUM_"0_^1_%ALF_"3,CONVRX_^1_%NUM_"0_^1_%ALF_"3,CALLX_^1_%NUM_"0_^1_%ALF_"3,RETURX_^1_%NUM_"0_^1_%ALF_"3,CALC_^1_%NUM_"0_^1_%ALF_"3,IFNUX_^1_%ALF_"3,IFREJX_^1_%NUM_"0_^1_%ALF_"3,DETX_^1_%NUM_"0_^1_%ALF_"3,XDIGX_^1_%NUM_"0_^1_%ALF_"3,BKSPX_^1_%ALF_"3,SKFFX_^1_%ALF€€_"3,SKFBX_^1_%NUM_"0_^1_%ALF_"3,TMARKX_^1_%ALF_"3,RWNDX_^1_%ALF_"3,UNLDX_^1_%NUM_"0_^1_%ALF_"3,EJECTP_^1_%ALF_"3,EJECTX_^1_%ALF_"3,EJTPSX_^1_%ALF_"3,EJTSSX_^1_%NUM_"0_^1_%ALF_"3,STACKX_^1_%NUM_"0_^1_%ALF_"3,FLDCHX_^1_%ALF_"3,MOV92X_^1_%ALF_"3,READ2X_^1_%NUM_"0_^1_%ALF_"3,IFPOSX_^1_%ALF_"3,IFNEGX_^1_%NUM_"0_^1_%ALF_"3,ADVX_^1_%ALF_"3,ADVFNX_^1_%ALF_"3,SEARCX_^1_%NUM_"0_^1_%ALF_"3,MA€€RKX_^1_%NUM_"0_^1_%ALF_"3,ALTERX_^1_%NUM_"0_^1_%ALF_"3,COUNTX_^1_%NUM_"0_^1_%ALF_"3,MULTX_^1_%NUM_"0_^1_%ALF_"3,OPENX_^1_%NUM_"0_^1_%ALF_"3,CLOSEX_^1_%ALF_"3,CLOSEV_^1_%ALF_"3,CLOSEF_^1_%NUM_"0_^1_%ALF_"3,COMERR_^1_%NUM_"0_^1_%ALF_"3,SIGNX_^1_%ALF_"3,UNSIGX_^1_%ADC_"(-MOVIND)_^1_%ALF_"3,MOVOCX_^1_%NUM_"0_^1_%ALF_"3,CHROCX_^1_%ALF_"3,CHRMRX_^1_%NUM_"0_^1_%ALF_"3,DATEX_^1_%NUM_"0_^1_€€%ALF_"3,OPNBCX_^1_%NUM_"0_^1_%ALF_"3,CLOBCX_^1_%NUM_"0_^1_%ALF_"3,STOREX_^1_%NUM_"0_^1_%ALF_"3,ERRMRX_^1_%NUM_"0_^1_%ALF_"3,REJMRX_^1_%NUM_"0_^1_%ALF_"3,WRTBCX_^1_%NUM_"0_^1ENTCNT NUM_"91_,*NO OF DRAFT ENTRY POINTS*_^1EXTST ALF_"3,_^1**_]_^1*******************************************************************_^1**_]_^1SUBRT ALF_"3,R35_^1_%NUM_"0_^1_%ALF_"3,R15_^1_%NUM_"0_^1_%ALF_"3€€,R55_^1_%NUM_"0_^1_%ALF_"3,READ_^1_%NUM_"0_^1_%ALF_"3,CHRFLD_^1_%NUM_"0_^1_%ALF_"3,SKIP_^1_%NUM_"0_^1_%ALF_"3,OUTPUT_^1_%NUM_"0_^1_%ALF_"3,MOVE_^1MOVRTN EQU_"MOVRTN(*)_$USED TO FORCE MOVOCR TO_^1MOVIND EQU_"MOVIND(MOVRTN-SUBRT)_^1_%NUM_"0_^1_%ALF_"3,IF_'>>>> IF LOGICAL (COMPARE)_^1_%NUM_"0_^1_%ALF_"3,ADDSUB_^1_%NUM_"0_^1_%ALF_"3,CLEAR_^1_%NUM_"0_^1_%ALF_"3,SHIFT_^1_%NUM_"0_^1_%ALF_€€"3,EXIT_^1_%NUM_"0_^1_%ALF_"3,TRANS_^1_%NUM_"0_^1_%ALF_"3,SORT_^1_%NUM_"0_^1_%ALF_"3,LIST_^1_%NUM_"0_^1_%ALF_"3,ACCEPT_^1_%NUM_"0_^1_%ALF_"3,CONVER_$CCN1700P4 51-001_^1_%NUM_"0_^1_%ALF_"3,CALL_^1_%NUM_"0_^1_%ALF_"3,RETURN_^1_%NUM_"0_^1_%ALF_"3,CALC_^1_%NUM_"0_^1_%ALF_"3,IFNU_^1_%NUM_"0_^1_%ALF_"3,DET_^1_%NUM_"0_^1_%ALF_"3,XDIG_^1_%NUM_"0_^1_%ALF_"3,TAPMOV_^1_%NUM_"0_^1_%ALF_"3,TPCL€€O_^1_%NUM_"0_^1_%ALF_"3,EJECT_^1_%NUM_"0_^1_%ALF_"3,SORT29_^1_%NUM_"0_^1_%ALF_"3,R29_^1_%NUM_"0_^1_%ALF_"3,IFPOS_^1_%NUM_"0_^1_%ALF_"3,ADV_^1_%NUM_"0_^1_%ALF_"3,MARK_^1_%NUM_"0_^1_%ALF_"3,ALTER_^1_%NUM_"0_^1_%ALF_"3,COUNT_^1_%NUM_"0_^1_%ALF_"3,MULPLY_^1_%NUM_"0_^1_%ALF_"3,OPEN_^1_%NUM_"0_^1_%ALF_"3,CLOSE_^1_%NUM_"0_^1_%ALF_"3,TTYOUT_^1_%NUM_"0_^1_%ALF_"3,SIGN_^1_%NUM_"0_^1_%ALF_"3,€€MOVOCR_^1_%NUM_"0_^1_%ALF_"3,CHRWRD_^1_%NUM_"0_^1RTCNT NUM_"35_#*NUM OF NAMES_^1**_]_^1**_]_^1**_]_^1ESYFLG ADC_"0_^1********************************************************************_^1**_]_^1**_]_^1DPEX_!LDA_"T1_(** RESTORE THE "I" REGISTER **_^1_%STA-_!I_^1**_]_^1********************************************************************_^1**_]_^1**_!****** END OF SUBROUTINE LOADIN€€G ON OBJECT PROGRAM TAPE ******_^1**_]_^1*********************************************************************_^1**_]_^1**_]_^1******************************************************************_^1**_]_^1_%RTJ*_!(ESY4+1)_^1_%RTJ*_!(ESY4+1)_^1_%ENA_"28_^1_%STA-_!SL,I_0SET LENGTH OF PRINT LINE_^1_%ENA_"0_^1_%STA-_!NU,I_0BUFFER INDEX_^1ESY1_!LDA-_!ST,I_0TEMP STORAGE_^1_%INA_"-1_2FOR S€€YMTAB_^1_%STA-_!AU,I_0ADDRESS_^1ESY2_!LDA-_!PAGL,I_^1_%SUB_"PAGEJ_^1_%SAM_"2_^1_%RTJ_"EJECT_^1_%LDQ-_!AU,I_^1_%LDQ-_!1,Q_^1_%SQZ_"1_3END OF TABLE_^1_%JMP*_!ESY5_^1_%LDA*_!ESYFLG_^1_%SAZ_"ESY4_^1_%LDA-_!ET,I_^1_%INA_"-1_^1_%STA-_!AU,I_^1_%ENA_"0_^1_%STA*_!ESYFLG_^1_%JMP*_!ESY2_^1ESY4_!RTJ+_!PRNT_^1_%LDA_"ERC_^1_%SAN_"1_^1_%JMP*_!SYOUT_^1_%STA-_!LN,I_^1_%RTJ*_!(ESY4+1)_^1_%RTJ_"DECV_€€0CONVERT ERROR NUMBER_^1_%STQ-_!PB,I_^1_%STA-_!PB+1,I_^1_%LDA_"ERMS_^1_%STA-_!PB+2,I_^1_%LDA_"ERMS+1_^1_%STA-_!PB+3,I_^1_%LDA_"ERMS+2_^1_%STA-_!PB+4,I_^1_%RTJ*_!(ESY4+1)_^1ESY3_!JMP*_!SYOUT_^1ESY5_!QRS_"12_^1_%LDA-_!ET,I_^1_%SAN_"1_^1_%ENQ_"4_3EXTERNAL_^1_%LDA_"WV,Q_^1_%LDQ-_!NU,I_^1_%ALS_"8_^1_%STA-_!PB+6,B_^1_%LDQ-_!AU,I_^1_%INQ_"1_3CONVERT SYMBOL FROM_^1_%RTJ_"RECV_^1_%LDQ-_!NU,€€I_^1_%LDA-_!LA,I_^1_%STA-_!PB,B_0SYMBOL_^1_%LDA-_!LA+1,I_^1_%STA-_!PB+1,B_^1_%LDA-_!LA+2,I_^1_%STA-_!PB+2,B_^1_%LDQ-_!AU,I_^1_%LDA-_!1,Q_^1_%INQ_"1_^1_%SAM_"1_^1_%JMP*_!*-3_^1_%STQ-_!AU,I_^1_%TCA_"A_^1_%RTJ+_!HEXC_0CONVERT LOCATION TO HEX_^1_%STQ-_!TR,I_^1_%LDQ-_!NU,I_^1_%STA-_!PB+5,B_.LOCATION INTO_^1_%LDA-_!TR,I_0PRINT BUFFER_^1_%STA-_!PB+4,B_^1_%INQ_"-28_^1_%SQZ_"3_^1_%INQ_"35_^€€1_%STQ-_!NU,I_^1_%JMP*_!ESY2_^1_%STQ-_!NU,I_^1_%RTJ*_!(ESY4+1)_^1_%RAO-_!PAGL,I_^1_%JMP*_!ESY2_^1SYOUT NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%RTJ_"EJECT_^1_%LDA_"PUNFLG_^1_%SAN_"1_^1_%JMP*_!DEND_^1MTEOLW EQU_"MTEOLW(*)_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAN_"1_^1_%JMP*_!DEND5_^1_%LDA_"EOL_^1_%STA-_!UB,I_)WRITE AN END-OF-LOAD_^1_%ENQ_"9_,RECORD_^1_%ENA_"-0_^1_%STA-_!UB,B_^1_%INQ_"-1_^1_%SQZ_€€"1_^1_%JMP*_!*-3_^1_%ENA_"0_^1_%STA-_!CSW,I_^1_%LDA_"=XCONS+UB_^1_%ENQ_"10_^1_%RTJ_"BW_^1_%ENA_"0_^1_%STA-_!CSW,I_^1***_]_^1DEND_!NOP_"0_(END OF JOB ROUTINE_^1**_]_^1_%ENA_"1_^1_%AND_"EXEC+5_^1_%SAZ_"DEND5_^1_%JMP*_!FILEMJ_^1DEND5 RTJ-_!($F4)_)REWIND THE SYSTEMS TAPE-------------_^1_%ADC_"$1C00,CO,0,$8F9,$3000_^1_%LDA_"CONS+CSW_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%CLR_"A_^1_%STA_"CONS+CSW€€_^1**_]_^1_%LDA_"(PSW76+1)_^1_%SAP_"1_#YES_^1_%JMP*_!EOJMSJ_#NO_^1_%LDA_"PUNFLG_^1_%SAM_"EOJMSJ_^1FILEMJ LDA_"PCHSW_)WAS PUNCH SELECTED_^1_%SAM_"EOJMSJ_(NO-SKIP_^1_%RTJ-_!($F4)_)WRITE FM - UNLOAD_^1_%ADC_"$1C00,CO,0,$8FA,$2300_^1_%RTJ_"STATUS_^1EOJMSJ RTJ-_!($F4)_^1_%ADC_"$C00,DEND6,0,$18FC,12,DEOJ_^1_%RTJ-_!($F4)_^1_%ADC_"$C00,CO,0,$18FC,4,RESRT_^1_%RTJ_"STATUS_^1_%RTJ-_!($F4)_^1_€€%ADC_"$800,CO,0,$18FD,1,REPY_^1_%RTJ_"STATUS_^1_%LDA*_!REPY_#IS RESTART_^1_%SUB_"=N$4E4F_#DESIRED_^1_%SAN_"1_^1_%JMP*_!DEND6_^1_%ENA_"2_^1_%AND_"EXEC+5_^1_%SAN_"NOREST_^1_%ENA_"2_^1_%EOR_"EXEC+5_^1_%STA_"EXEC+5_^1NOREST ENA_"-3_,YES-SET_^1_%STA_"L_#SWITCH FOR PASS 3_^1_%CLR_"A_^1_%STA-_!PC,I_^1_%LDA_"CONS+ET ADDR. OF EXT TBL._^1_%INA_"-1_^1_%STA-_!I_^1GETEX LDA-_!1,I_^1_%SAZ_"DNC€€LR_!END OF TBL._^1_%AND_"=N$FFF CLEAR 1ST TBL._^1_%STA-_!1,I_^1GTX1_!RAO-_!I_^1_%LDA-_!1,I_^1_%SAP_"1_#IS THIS LAST TABLE_^1_%JMP*_!SET8_#WORD, YES_^1_%SAZ_"1_#END OF TBL_^1_%JMP*_!GTX1_^1DNCLR LDA_"=XCONS_^1_%STA-_!I_^1_%LDQ_"=N$2050_^1_%STQ-_!UB,I_^1_%ENQ_"6_^1GTNM_!LDA_"NAMSAV,Q_#RESTORE_^1_%STA-_!UB,B_#NAME_^1_%INQ_"-1_#BLOCK_^1_%SQZ_"1_#IN PUNCH_^1_%JMP*_!GTNM_#BUFFER_^1_%EN€€Q_"7_#WORD CT._^1_%STQ-_!PER,I_#FOR PUNCH_^1_%ENA_"-1_^1_%STA-_!CT,I_^1_%ENA_"0_^1_%STA-_!WC,I_^1_%JMP+_!EXEC+3_^1SET8_!LDA_"=N$8000 SET LAST TBL. WORD_^1_%STA-_!1,I_^1_%RAO-_!I_^1_%JMP*_!GETEX_^1DEND6 RTJ-_!($F4)_(EXIT TO JOB PROCESSOR-------_^1_%NUM_"$A00_^1**_]_^1MSG86 ALF_"7,PASS 4 LOADED_^1DEOJ_!ALF_"11, *** END OF COMPILE._^1_%NUM_"$D0A_^1RESRT ALF_"4,RESTART_^1REPY_!NUM€€_"0_^1PTBINU ADC_"0_^1PSW76 LDA+_!PCHSW_#IS OUTPUT OPTION SWITCH SET TO "B" OR "P"_^1_%SAP_"2_#YES_^1_%JMP_"(PTBINU)_^1_%RTJ-_!($F4)_^1_%NUM_"$400_^1_%ADC_"CO_^1_%NUM_"0_^1_%NUM_"$8FA_^1_%NUM_"56_^1_%ADC_"CONS+UB_^1_%RTJ_"STATUS_^1_%JMP*_!(PTBINU)_^1ERMS_!ALF_"3,ERRORS_^1EOL_"ALF_"1,*T_^1_%NUM_"-0_^1ESB_"ADC_"0_^1_%ALS_"15_^1_%STA-_!LP,I_,RELO SWITCH_^1_%INQ_"1_^1_%STQ*_!EZ+1_,SAV€€E Q_^1_%RTJ+_!RECV_"CONVERT SYMB BACK TO 7 BITS_^1_%LDA-_!NU,I_,IS THIS REL EXT_^1_%SAZ_"4_/NO_^1_%LDA-_!LA,I_,SET BIT FOR REL EXT_^1_%EOR_"=N$8000_^1_%STA-_!LA,I_^1EZ_#LDA+_!0_^1_%SAM_"2_^1_%RAO*_!EZ+1_^1_%JMP*_!*-4_^1_%LDQ-_!LP,I_^1_%SQP_"1_^1_%TCA_"A_^1_%STA-_!LP,I_,VALUE ENTRY_^1_%LDQ-_!WC,I_^1_%LDA-_!LA,I_^1_%STA-_!UB+1,B_^1_%INQ_"1_^1_%LDA-_!LA+1,I_^1_%STA-_!UB+1,B_^1_%INQ_"1€€_^1_%LDA-_!LA+2,I_^1_%STA-_!UB+1,B_^1_%INQ_"1_^1_%LDA-_!LP,I_^1_%STA-_!UB+1,B_^1_%INQ_"-55_.FILLED_^1_%SQZ_"4_/YES_^1_%INQ_"56_^1_%STQ-_!WC,I_^1_%LDQ*_!EZ+1_,SAVED Q ADDR OF TBL_^1_%JMP*_!(ESB)_^1_%STQ-_!WC,I_^1_%ENQ_"57_^1_%STQ-_!PER,I_^1_%RTJ_"PUNC_^1_%JMP*_!*-7_^1**_]_^1*******************************************************************_^1**_]_^1**_'THIS WAS THE DISC HANDLING RO€€UTINES........_^1**_]_^1*******************************************************************_^1**_]_^1PRNT_!ADC_"0_^1_%NOP_"0_^1_%LDQ-_!ES,I_^1_%SQZ_"1_^1_%JMP*_!PE_/PASS 2 ERROR_^1_%SAZ_"BLNK-*-1_^1_%LDA-_!YL,I_^1_%SAN_"BLNK-*-1_^1_%LDQ-_!SL,I_^1_%INQ_"9_3LENGTH OF BUFFER_^1_%LDA-_!MPSW,I_^1_%SAZ_"1_^1_%ENQ_"9_3PRINT BINARY WD ONLY_^1_%LDA*_!PD+8 CONS+PB_^1_%RTJ*_!WRIT_^1_%JMP*_!BL€€NK_^1BLNK_!RTJ*_!BLN_^1_%JMP*_!(PRNT)_^1PD_#ENA_"0_^1_%STA-_!CSW,I_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_0FORMATTED WRITE_^1_%ADC_"CO_2COMPLETION ADDR_^1_%ADC_"0_^1_%NUM_"$18FC_/TYPEWRITER_^1_%ADC_"9_^1_%ADC_"CONS+PB_^1_%RTJ+_!STATUS_^1_%JMP*_!BLNK_^1PE_#NOP_"0_^1_%NOP_"0_^1_%LDA_"=XPEB_^1_%ENQ_"9_^1_%RTJ*_!WRIT_^1_%JMP*_!(PRNT)_^1WRIT_!ADC_"0_^1_%STA*_!WR4+1_,START ADDR_^1_%STQ*_!WR1_.NUM€€B WDS_^1_%LDA_"PCHSW_^1_%SAZ_"WRITXX_(CONTINUE IF B SELECTED_^1_%SAM_"WRITXX_(CONTINUE IF L SELECTED_^1_%JMP*_!(WRIT)_(EXIT IF P SELECTED_^1WRITXX EQU_"WRITXX(*)_^1_%LDA_"CARCON_^1_%STA*_!CRCON1_^1WR3_"NOP_"0_^1_%NOP_"0_^1_%NOP_"0_^1_%ENQ_"48_^1WR4_"LDA+_!0,Q_.MOVE IMAGE TO ALTERNATE_^1_%STA*_!APB,Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!WR4_^1WR2_"ENA_"0_^1_%STA-_!CSW,I_^1_%RAO*_!WR1_^1€€_%RTJ-_!($F4)_^1_%NUM_"$C00_^1_%ADC_"CO_^1_%ADC_"0_^1_%NUM_"$18FB_^1WR1_"ADC_"0_^1_%ADC_"APB-1_^1_%RTJ_"STATUS_^1_%JMP*_!(WRIT)_^1HEXC_!ADC_"0_^1_%LDQ-_!I_^1_%STQ-_!RP,I_^1_%ENQ_"0_^1_%STQ-_!I_^1_%ENQ_"0_^1_%LLS_"4_^1_%INQ_"-$A_^1_%SQM_"1_^1_%INQ_"7_^1_%INQ_"$3A_^1_%STQ_"CONS+TR,I_^1_%LDQ-_!I_^1_%INQ_"-3_^1_%SQZ_"2_^1_%RAO-_!I_^1_%JMP*_!HEXC+5_^1_%LDA_"CONS+RP_^1_%STA-_!I_^1_%LDQ-_€€!TR,I_^1_%QLS_"8_^1_%ADQ-_!TR+1,I_^1_%LDA-_!TR+2,I_^1_%ALS_"8_^1_%ADD-_!TR+3,I_^1_%JMP*_!(HEXC)_^1BLN_"ADC_"0_^1_%LDA_"=N$2020_^1_%ENQ_"48_^1_%STA-_!PB,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!*-3_^1_%JMP*_!(BLN)_^1CRCON1 ADC_"0_^1_%BZS_"APB(49)_^1CO_#ENQ_"1_^1_%STQ_"CONS+CSW_^1_%RTJ-_!($F4)_+EXIT REQUEST_^1_%NUM_"$A00_^1COP_"INQ_"1_^1_%STQ_"CONS+PSW_^1_%JMP*_!COP-2_^1PEB_"ALF_"9,****** €€ **********_^1WV_#NUM_"$2020,$2050,$2043,$2044,$2058_^1_%NUM_"$2D50,$2D43,$2D44_^1RECV_!ADC_"0_%THIS ROUTINE CONVERTS SYMBOLS_^1_%INQ_"-1_$BACK TO 7 BIT CHARS-ADDR OF_^1_%LDA*_!WV_^1_%STA-_!LA+1,I SYMBOL TO BE CONVERTED IN Q AT_^1_%STA-_!LA+2,I_^1_%LDA_"=N$7C0_+ENTRY_^1_%AND-_!1,Q_^1_%ARS_"6_0OUTPUT IS IN LA AND FF_^1_%SAZ_"1_^1_%INA_"$20_#CONVERT 5 BIT CHAR BACK TO 7_^1_%INA_"$20€€_^1_%ALS_"8_^1_%STA-_!LA,I_^1_%ENA_"$3F_^1_%AND-_!1,Q_^1_%INA_"$20_^1_%ADD-_!LA,I_^1_%STA-_!LA,I_^1_%INQ_"1_^1_%STQ*_!RR+1_^1_%ENQ_"1_^1RR_#LDA+_!0,Q_^1_%SAM_"6_^1_%ADD*_!WV_^1_%STA-_!LA,B_^1_%INQ_"-2_^1_%SQZ_"2_^1_%INQ_"3_^1_%JMP*_!RR_^1_%JMP*_!(RECV)_^1******************************************************************_^1************************************************************€€******_^1**_]_^1DECV_!ADC_"0_0NUMBER TO CONVERT IN A_^1_%ENA_"0_%THIS ROUTINE CONVERTS THE_^1_%STA-_!TR,I_"BINARY LINE NUMBER TO ASCII_^1_%ENQ_"3_0DECIMAL_^1_%LDA-_!LN,I_"OUTPUT IS 3 DIGITS IN QA WITH_^1_%INA_"-10_.A TRAILING BLANK_^1_%SAM_"2_^1_%RAO-_!TR,I_^1_%JMP*_!*-3_^1_%INA_"58_$ADD BACK 10 PLUS HEX 30 TO_^1_%STA-_!TR,B_-MAKE ASCII CHAR_^1_%STA*_!DFWA_^1_%STQ*_!DLEN_^1_%LDA-_!€€TR,I_^1_%STA-_!TR+4,I_^1_%ENA_"0_^1_%STA-_!TR,I_^1_%LDA-_!TR+4,I_^1_%INQ_"-1_^1_%SQZ_"1_^1_%JMP*_!*-13_^1_%LDQ-_!TR+1,I_^1_%QLS_"8_^1_%ADQ-_!TR+2,I_^1_%LDA-_!TR+3,I_^1_%ALS_"8_^1_%INA_"$20_^1_%JMP*_!(DECV)_^1******************************************************************_^1*******************************************************************_^1**_]_^1STATUS ADC_"0_^1_%LDA_"CONS+CS€€W_^1_%SAN_"1_^1_%JMP*_!*-3_^1_%CLR_"A_^1_%STA_"CONS+CSW_^1_%JMP*_!(STATUS)_^1******************************************************************_^1******************************************************************_^1**_]_^1******************************************************************_^1******************************************************************_^1**_]_^1PUNC_!ADC_"0_%>>>€€>> ENTRY POINT FOR PUNCH OUT ROUTINE >>>>>_^1_%LDA_"PCHSW_#IS OUTPUT OPTION SWITCH SET TO "B" OR "P"_^1_%SAP_"2_#YES_^1_%JMP_"(PUNC)_^1PC2_"NOP_"0_^1_%NOP_"0_^1PC3_"LDA_"=XCONS+UB_^1_%LDQ-_!PER,I_,NO WDS TO OUTPUT_^1_%RTJ*_!BW_2BINARY WRITE_^1PO_#ENA_"0_^1_%ENQ_"56_^1_%STA-_!UB,B_-*********************_^1_%INQ_"-1_/*********************_^1_%SQM_"1_0*********************_^1_%JMP*_!*€€-3_.*********************_^1_%JMP*_!(PUNC)_^1BW_#ADC_"0_^1_%STA*_!STRADR_^1_%STQ*_!BLKLTH_^1_%STA*_!DFWA_^1_%STQ*_!DLEN_^1_%LDA_"PCHSW_^1_%SAP_"2_#OUTPUT OPTION SWITCH SET TO "P" OR "B"_^1_%JMP_"(BW)_^1_%ENA_"0_^1_%STA-_!CSW,I_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_-FORMATTED WRITE_^1_%ADC_"CO_^1_%ADC_"0_^1_%NUM_"$08FA_^1BLKLTH ADC_"0_^1STRADR ADC_"0_^1_%RTJ_"STATUS_^1_%ENA_"1_^1_%AND_"EXEC€€+5_^1_%SAN_"1_^1_%JMP*_!(BW)_^1_%LDA-_!$E4_^1_%STA*_!LGOD_^1_%ENA_"0_^1_%STA-_!CSW,I_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_^1_%ADC_"CO_^1_%NUM_"0_^1_%NUM_"$8B3_^1DLEN_!NUM_"0_^1DFWA_!NUM_"0_^1_%NUM_"0_^1LGOD_!NUM_"0_^1_%RTJ_"STATUS_^1_%RAO-_!$E4_^1_%JMP*_!(BW)_^1ER_#ADC_"0_^1_%RAO_"ERC_^1_%LDQ*_!ERT,Q_,PICK UP ERR MESSAGE_^1_%STQ-_!ES,I_^1_%LDA_"L_^1_%SAN_"ER2-*-1_^1ER1_"LDA_"=A**_^1_%STA-€€_!PB+2,I_^1_%STQ-_!PB+3,I_^1_%RTJ_"DECV_^1_%STQ-_!PB,I_^1_%STA-_!PB+1,I_^1ER3_"RTJ_"PRNT_^1_%ENA_"0_^1_%STA-_!RC,I_^1_%STA-_!ES,I_^1_%JMP*_!(ER)_^1ER2_"STQ_"PEB+3_^1_%JMP*_!ER3_^1ERT_"ALF_"1,DS_^1_%ALF_"1,EX_^1_%ALF_"1,LB_^1_%ALF_"1,PP_^1_%ALF_"1,OP_^1_%ALF_"1,RG_^1_%ALF_"1,RL_^1_%ALF_"1,OV_^1_%ALF_"1,UD_^1_%ALF_"1,MO_^1P4END NOP_"0_#>>>>>>> END OF PASS 4 < < < < < < < < < !!!!!!€.._^1_%END_"PS4_^__PR55 CSY/ P€1_%NAM R55_*955 READ DRAFT 5.1 12/02/74_^1_%ENT_"READ5X,ADV55,EJP55,SIXLIN_^1_%EXT_"DFOR,DESC,DATA,DINP_^1_%EXT_"RJRUSR,EOFUSR,FLDMK1,EJTUSR,BLNUSR,INCUSR,DELUSR_^1_%EXT_"BUFUSR_^1_%DAT_"R55DAT(5)_^1_%ORG_"R55DAT_^1_%ADC_"ADV55_^1_%ADC_"EJP55_^1_%ADC_"SIXLIN_^1_%ADC_"H7FFF+1_^1_%ADC_"CONTRL+2_^1_%ORG*_^1_%COM_"LUIN(1),FST(100)_^1_%COM_"NOFSX(1)_^1*** THE FOLLOWING TABLE IS ACCESSE€€D BY USING ITS BASE ADDRESS_(**_^1*** CONTAINED IN THE I-REGISTER; INDEXED BY THE RELATIVE VALUE OF THE **_^1*** DESIRED TABLE ENTRY._N*_^1_%SPC_"2_^1TABL55 NUM_"0_#BASE ADDRESS OF TABLE_^1TAB001 NUM_"0_"LLCIND - LINE LOCATE ON DATA FLAG_^1SIXLIN NUM_"0 "SEARCH" INDICATOR FOR 6 LINES/INCH_^1_%NUM_"0_"ENREAD - END-READ INDICATOR_^1_%NUM_"0_#ADVCT - PAGE ADVANCE COUNT_^1_%NUM_"0_#NU€€MRED - MULTIPLE LINE READ COUNT_^1_%NUM_"0_#CBCTR - CONSECUTIVE BLANKS COUNT_^1_%NUM_"0_#EXIND - FIELD SEPARATOR TERMINATION FLAG_^1_%NUM_"0_#FSFLAG - LEADING FS FLAG_^1_%NUM_"0_%HPSWH - HANDPRINT SWITCH FOR MVBUF_^1_%NUM_"0 DLTCNT - DELETE LINE COUNT_^1_%NUM_"0 HPFLD- HFIELD FLAG_^1_%NUM_"0_$HCHAR TABLE SEARCH_^1_%NUM_"0_#HPTR - HCHAR TABLE ADDRESS POINTER_^1_%NUM_"0_!NXTOVR - BU€€FFER OVERFLOW FLAG_^1_%NUM_"0_#BLKCNT - BLANK LINE COUNT_^1NOFS_!NUM_"0_"FIELD SEPARATOR COUNT_^1_%NUM_"0_"FSPNED - FLD SEP. FLAG - CONTINUOUS LINES_^1_%NUM_"0_#LINPTR - ADDRESS POINTER FOR "LINE" ENTRYS_^1_%ADC_"DATA_#DATAX - ADDRESS OF DATA_^1_%ADC_"DINP_#DINPX - ADDRESS OF INPUT AREA_^1_%ADC_"TAB005_#RECX - ADDRESS OF RECLIN (3-WORD STORAGE)_^1_%ADC_"DINP_#FLDPTR - CURRENT FS AD€€DRESS POINTER (PACK)_^1_%ADC_"DINP_#OLDFLD - LAST FS ADDRESS POINTER (PACK)_^1_%NUM_"0_#FWAPTR - WORD POINTER IN PACK BUFFER_^1_%NUM_"$FF00_#PACKSW - CHARACTER POINTER IN PACK BUFFER_^1_%ADC_"FST_#FSTPTR - FIELD SEPARATOR TABLE POINTER_^1_%ADC_"DINP_#INPTR - WORD POINTER IN UNPACK BUFFER_^1_%NUM_"$FF00_#CHARSW - CHARACTER POINTER IN UNPACK BUFFER_^1_%NUM_"1_#TOPIND - TOP-OF-PAGE IN€€DICATOR_^1_%NUM_"0_#LVL2 - CONTAINS DATA TABLE ADDRESSES_^1_%NUM_"0_#ONETIM - INITIAL COMPARE SWITCH (FINCK)_^1_%NUM_"0_#DATA2 - CONTAINS CURRENT DATA TABLE ADDRESS_^1_%NUM_"0_#ASAVE - HOLD AREA_^1_%NUM_"$3C0_#MSKHLD-CHARACTER MASK FOR HCHAR_^1_%NUM_"0_#QSAVE - HOLD AREA_^1_%NUM_"0_"IHOLD - HOLDS CONTENTS OF I-REGISTER_^1_%NUM_"0_#WDHLD-HOLD AREA FOR HCHAR_^1_%NUM_"0_#STATHD - STAT€€US HOLD AREA_^1_%NUM_"0_#MODWRD - CONTAINS PRE-SET MODE WORD_^1_%NUM_"$FFFF_#XFFFF - MASK_^1_%NUM_"$FF00_#XFF00 = MASK_^1_%NUM_"$00FF_#X00FF - MASK_^1_%NUM_"0_#TABPTR - ADDRESS POINTER INTO DESC TABLE_^1_%NUM_"0_#RECPTR - ADDRESS POINTER FOR "LREC" ENTRYS_^1_%ADC_"FONFLT_#BUFPTR - ADDRESS OF FONT/FLD BUFFER_^1_%NUM_"$0F46_#SHFTAB-NUMERIC SHIFT-HPCONV_^1_%NUM_"$0F40_#SYMBOL SHIFT_^1€€_%NUM_"$0F43_#ALPHA SHIFT_^1_%NUM_"0_#ONELRC - FLAG FOR 1 LREC STATEMENT_^1_%NUM_"0_#LMCNXT - LOOK AHEAD LMC STORAGE_^1TAB002 ADC_"NUMTAB_#ADDTAB = ADDRESSES OF HCHAR CONV. TABLES_^1_%ADC_"SYMTAB_#ADDTAB = SYMBOL CONVERSION_^1_%ADC_"ALPTAB_#ADDTAB = ALPHA CONVERSION_^1** HCHAR NUMERIC TO ASCII CONV. TABLE (NUMTAB)_^1** HPRINT CODE ASCII EQUIV._^1NUMTAB NUM_"$30_#0000_!0_^1_%NUM_"$3€€1_#0001_!1_^1_%NUM_"$32_#0010_!2_^1_%NUM_"$33_#0011_!3_^1_%NUM_"$34_#0100_!4_^1_%NUM_"$35_#0101_!5_^1_%NUM_"$36_#0110_!6_^1_%NUM_"$37_#0111_!7_^1_%NUM_"$38_#1000_!8_^1_%NUM_"$39_#1001_!9_^1_%NUM_"$40_#1010_!REJECT_^1_%NUM_"0_%1011_!UNUSED_^1_%NUM_"0_%1100_!UNUSED_^1_%NUM_"0_%1101_!UNUSED_^1_%NUM_"$20_#1110_!SPACE_^1TAB003 NUM_"$40_#1111_"REJECT_^1_%NUM_"$38_#MSKTBL - HANDPRINT CHAR€€. MASK TABLE_^1_%NUM_"7_^1_%NUM_"$3C0_^1** HCHAR SYMBOL TO ASCII CONVERSION TABLE (SYMTAB)_^1**_*HPRINT CODE_$ASCII EQUIV._^1SYMTAB NUM_"$2B_#0000_%+_^1_%NUM_"$2D_#0001_!-_^1_%NUM_"$5C_#0010_^1_%NUM_"$3D_#0011_!=_^1_%NUM_"$40_#0100_!REJECT_^1_%NUM_"0_%0101_!UNUSED_^1_%NUM_"$20_#0110_!SPACE_^1_%NUM_"$40_#0111_!REJECT_^1** HCHAR ALPHA TO ASCII CONVERSION TABLE (ALPTAB)_^1**_*HPRINT C€€ODE_#ASCII EQUIV._^1ALPTAB NUM_"$43_#0000_#C_^1_%NUM_"$53_#0001_!S_^1_%NUM_"$54_#0010_!T_^1_%NUM_"$58_#0011_!X_^1_%NUM_"$5A_#0100_!Z_^1_%NUM_"$40_#0101_!REJECT_^1_%NUM_"$20_#0110_!SPACE_^1_%NUM_"$40_#0111_!REJECT_^1TAB004 NUM_"0_#EOLPRM - END-OF-LINE SYMBOL_^1_%NUM_"0_$LLCPRM - LINE LOCATE COORDINATE_^1_%NUM_"0_$FLAPRM - FIRST LINE ADVANCE COUNT_^1_%NUM_"0_$EORPRM - END-OF-RECORD S€€YMBOL_^1_%NUM_"0_$EOPRM - END-OF-PAGE SYMBOL_^1_%NUM_"0_!FLDPRM - FIELD SEPARATOR SYMBOL_^1_%NUM_"0_!DLFPRM - DELETE FIELD SYMBOL_^1_%NUM_"0_!FID_"- CHAR. #1_^1_%NUM_"0_!FID_"- CHAR. #2_^1_%NUM_"0_!FID_"- CHAR. #3_^1_%NUM_"0_!FID_"- CHAR. #4_^1OLCCON NUM_"0_^1_%BZS_"TAB005(3)_#RECLIN - 3-WORD LREC/LINE DEFAULT BUFFER_^1_%BZS_"FONFLT(49)_$49-WORD FONT/FIELD WORK BUFFER_^1CNTADR NUM€€_"0_$"FORM" MODE WORD ADDRESS_^1INCHLD NUM_"0_$"INC" VALUE_^1****** 955 REQUEST FOR INITIALIZE, LINE LOCATE; POSITION,_!******_^1****** MECHANICAL AND READ_B******_^1NIN55 NOP_"0_#RETURN ADDRESS_^1_%CLR_"A_^1_%STA*_!CMPSW_"CLEAR COMPLETION FLAG_^1_%RTJ-_!($F4)_^1_%ADC_"$400_#REQUEST CODE_^1_%NUM_"0_^1_%NUM_"0_^1NINLU NUM_"$1000_#LOGICAL UNIT NUMBER_^1NINWD1 NUM_"0_#PARAMETER WOR€€D NO. 1_^1NINWD2 NUM_"0_#PARAMETER WORD NO. 2_^1_%LDA*_!NINLU-1_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%LDA*_!NINLU_^1_%AND_"=N$E000_!IS EOF_^1_%SUB_"=N$2000_"BUTTON PRESSED_^1_%SAN_"EXN55_!NO_^1_%STA-_!LLCIND,I CLEAR LLC IND_0CCN1700R5541-001_^1_%ENA_"1_FCCN1700R5541-001_^1_%STA-_!TOPIND,I SET TOP OF FORM_.CCN1700R5541-001_^1_%LDA*_!INCHLD RESTORE NOS PARM._-CCN1700R5541-001_^1_%STA*_!(CNTAD€€R) TO CONTROL TABLE_-CCN1700R5541-001_^1_%RAO_"EOFUSR YES_^1EXN55 JMP*_!(NIN55)_^1WAIT_!NOP_"0_#RETURN ADDRESS_^1_%LDA*_!CMPSW_#DIDDLE LOOP_^1_%SAN_"DONE_^1_%JMP*_!*-2_^1DONE_!JMP*_!(WAIT)_#EXIT TO CALLER_^1CMPLT RAO*_!CMPSW_#COMPLETION ROUTINE_^1_%RTJ-_!($F4)_^1_%ADC_"$0A00_^1CMPSW NUM_"0_^1_%EQU_"LLCIND(TAB001-TABL55),ENREAD(LLCIND+2),ADVCT(ENREAD+1)_^1_%EQU_"NUMRED(ADVCT+1),€€CBCTR(NUMRED+1),EXIND(CBCTR+1)_^1_%EQU_"FSFLAG(EXIND+1),HPSWH(FSFLAG+1),DLTCNT(HPSWH+1)_^1_%EQU_"HPFLD(DLTCNT+1),ENDSRH(HPFLD+1),HPTR(ENDSRH+1)_^1_%EQU_"NXTOVR(HPTR+1),BLKCNT(NXTOVR+1)_^1_%EQU_"FSPNED(BLKCNT+2),LINPTR(FSPNED+1)_^1_%EQU_"DATAX(LINPTR+1),DINPX(DATAX+1),RECX(DINPX+1)_^1_%EQU_"FLDPTR(RECX+1),OLDFLD(FLDPTR+1),FWAPTR(OLDFLD+1)_^1_%EQU_"PACKSW(FWAPTR+1),FSTPTR(PACKSW+1),I€€NPTR(FSTPTR+1)_^1_%EQU_"CHARSW(INPTR+1),TOPIND(CHARSW+1)_^1_%EQU_"LVL2(TOPIND+1),ONETIM(LVL2+1)_^1_%EQU_"DATA2(ONETIM+1),ASAVE(DATA2+1),MSKHLD(ASAVE+1)_^1_%EQU_"QSAVE(MSKHLD+1),IHOLD(QSAVE+1)_^1_%EQU_"WDHLD(IHOLD+1),STATHD(WDHLD+1)_^1_%EQU_"MODWRD(STATHD+1),XFFFF(MODWRD+1),XFF00(XFFFF+1)_^1_%EQU_"X00FF(XFF00+1),TABPTR(X00FF+1),RECPTR(TABPTR+1)_^1_%EQU_"BUFPTR(RECPTR+1)_^1_%EQU_"SHF€€TAB(BUFPTR+1),ADDTAB(TAB002-TABL55)_^1_%EQU_"ONELRC(SHFTAB+3),LMCNXT(ONELRC+1)_^1_%EQU_"MSKTBL(TAB003-TABL55)_^1_%EQU_"FORMCK(TAB004-TABL55),EOLPRM(FORMCK)_^1_%EQU_"LLCPRM(EOLPRM+1),FLAPRM(LLCPRM+1),EORPRM(FLAPRM+1)_^1_%EQU_"EOPRM(EORPRM+1),FLDPRM(EOPRM+1),DLFPRM(FLDPRM+1)_^1_%EQU_"FIDPRM(DLFPRM+1),OLCMSG(OLCCON-TABL55)_^1_%EQU_"RECLIN(TAB005-TABL55)_^1_%EQU_"REQ55(NIN55-TABL55),RE€€QLU(NINLU-TABL55)_^1_%EQU_"REQWD1(REQLU+1)_^1_%EQU_"REQWD2(REQWD1+1)_^1READ5X NOP_"0_-RETURN EXIT TO USER_^1_%EQU_"READ55(READ5X)_^1_%RTJ_"INIT_#GO INITIALIZE READ PARAMETERS_^1_%LDA_"EJTUSR_#IS EJECT USER INDICATOR ON?_^1_%SAN_"EJ1-*-1_#YES, GO TO EJP55_^1_%LDA-_!TOPIND,I_#NO, IS TOP-OF-PAGE INDICATOR SET?_^1_%SAN_"CLRCTL-*-1_#YES_^1_%JMP*_!CKREAD_#NO, GO TO CKREAD_^1EJ1_"CLR_"A_#€€SET A EQUAL TO ZERO (SORT PRIMARY)_^1_%RTJ_"EJP55_#GO TO EJECT PAGE_^1CLRCTL RTJ*_!CONTRL_#GO SEND CTL. PARAM. TBL. WITH DOC. RDY CNT_^1_%ENA_"1_^1_%STA-_!REQWD1,I_#SET CRC = 1_^1_%ALS_"8_^1_%EOR_"=N$400_#SET CNT = 1_^1_%STA-_!MODWRD,I_#STORE RESULT IN MODE WORD_^1_%LDA_"=XMODWRD_#PUT ADDRESS OF MODE WORD IN_^1_%ADD-_!$FF_#PARAMETER WORD 2 OF INITIALIZE REQUEST_^1_%STA-_!REQWD2,I_^€€1_%RTJ-_!REQ55,I_#GO CLEAR CONTROL PARAMETER TABLE_^1_%RTJ_"LINLOC_^1_%LDA_"EJTUSR_#WAS EJECT SET AS RESULT OF FLA?_^1_%SAZ_"SETLL_#NO, CONTINUE_^1_%JMP_"BLKRC_#YES, GO SET BLNUSR INDICATOR_^1SETLL LDQ*_!(CNTADR)_'PICK UP NOS WORD_^1_%QLS_"13_4IS NOS SET_^1_%SQP_"SETLL1_/NO, CONTINUE_^1_%STA-_!TOPIND,I_-YES, CLEAR TOP IND_^1_%STA-_!LLCIND,I_-CLEAR LLC ON DATA_^1_%JMP*_!GOSNDC_^1SE€€TLL1 RAO-_!LLCIND,I_'SET LLC ON DATA_^1GOSNDC RTJ*_!CONTRL_)SEND CONTROL TABLE_^1_%JMP*_!CKREAD_#CONTINUE_^1CONTRL NOP_"0_'RETURN ADDRESS_^1_%LDQ_"=XDFOR_#GET FORM TABLE ADDRESS_^1_%TRQ_"A_^1_%INA_"3_^1_%STA-_!REQWD2,I_^1_%STA*_!CNTADR_^1_%LDA*_!(CNTADR)_"IS NO SEARCH_^1_%STA*_!INCHLD_#SAVE IT_^1_%LDA_"=N$2100_^1_%STA*_!(CNTADR)_!PUT COUNT = 8 IN CTL. MODE WORD_^1_%ENA_"1_)SET CRC €€= 1_^1_%STA-_!REQWD1,I_^1RESEND RTJ-_!REQ55,I_"SEND CONTROL PARAMETER TABLE TO 955_^1_%RTJ_"STAT55_#TAKE 955 STATUS_^1_%LDA_"EOFUSR IS IT EOF_"CCN1700R5540-001_^1_%SAZ_"SNCTLS NO, CONTINUE_"CCN1700R5540-001_^1SETFS LDA_"NOFS_*STORE NO OF FS_^1_%STA_"NOFSX_)IN COMMON_^1_%JMP*_!(READ55) YES, EXIT_"CCN1700R5540-001_^1SNCTLS LDA-_!REQLU,I_!ERROR IN SENDING TABLE?_^1_%SAP_"1_)NO, CON€€TINUE_^1_%JMP*_!RESEND_$YES, TRY AGAIN_^1_%LDA*_!INCHLD_^1_%STA*_!(CNTADR)_"RESET CONTROL MODE WORD_^1_%LDA-_!STATHD,I_!GET 955 STATUS_^1_%ALS_"1_)DOCUMENT NO SORT?_^1_%SAP_"EXTCTL_#NO, EXIT_^1_%RAO_"EJTUSR_#YES,SET EJECT INDICATOR_^1SETBLK JMP_"BLKRC_^1EXTCTL JMP*_!(CONTRL)_"EXIT TO CALLER_^1CKREAD LDA-_!ENREAD,I_#IS END-OF-READ INDICATOR SET?_^1_%SAZ_"EORCHK-*-1_#NO, CONTINUE_^1_€€%LDQ*_!CONTRL+2_"GET ADDRESS OF "FORM TABLE_^1_%LDA-_!8,Q_(GET "D" WORD OF TABLE_^1_%ALS_"8_*REVERSE BUFFER SET?_^1_%SAP_"SETCK_%NO,CONTINUE_^1_%LDA-_!FLDPRM,I_!GET FS CODE_^1_%RTJ_"PACK_(PUT TERMINAL FS IN USER BUFFER_^1SETCK JMP_"CKIND_%GO CHECK USER INDICATORS_^1EORCHK LDA-_!EORPRM,I_#HAS EOR BEEN SPECIFIED?_^1_%SAZ_"NOTEOR-*-1_#NO_^1_%LDA-_!NUMRED,I_#YES, HAVE WE READ ONE TIME€€?_^1_%SAZ_"NOTEOR-*-1_#NO_^1_%RTJ_"RESRED_%GO SET UP READ PARAMETERS FOR EOR_^1_%JMP_"LLCDAT_%YES, GO CHECK FOR LLC ON DATA_^1NOTEOR RAO-_!NUMRED,I_#ADD 1 TO NUMBER OF TIMES READ_^1_%LDQ-_!DATA2,I_#GET ADDRESS OF R-LEVEL DATA TABLE_^1_%LDA-_!3,Q_#GET 4TH WORD OF TABLE TO FIND 1ST LREC_^1_%STA-_!RECPTR,I_"STORE IT IN LREC POINTER_^1_%STA-_!TABPTR,I_(SAVE IT TEMPORARILY IN TABPTR_^1_€€%CLR_"A_#SET A = 0_^1_%LDQ-_!BUFPTR,I_#GET ADDRESS OF FONFLT_^1_%STQ*_!CLRBF_#SAVE IT_^1_%ENQ_"48_^1CLRFON STA*_!(CLRBF),Q_#CLEAR OUT FONT/FIELD BUFFER_^1_%SQZ_"MOVREC-*-1_#IF COMPLETE, CONTINUE_^1_%INQ_"-1_#DECREMENT INDEX BY 1_^1_%JMP*_!CLRFON_#CONTINUE CLEARING TABLE_^1CLRBF NUM_"0_^1MOVREC LDQ-_!RECPTR,I_!CHECK FOR OLCC_^1_%INQ_"-1_^1_%LDA_"1,Q_^1_%ALS_"5_^1_%SAP_"MVRECA NO O€€LCC SKIP_^1_%LDA-_!OLCMSG,I IS THIS THE FIRST TIME THRU_^1_%SAN_"MVRECA NO-SKIP_^1_%RAO-_!OLCMSG,I SET FLAG_^1_%ENA_"4_!SEND OLCMSG TO USER-CRC CODE_^1_%STA-_!REQWD1,I_^1_%ALS_"4_^1_%STA-_!REQWD2,I_!ACT=2 (MECHANICAL RQST)_^1_%RTJ-_!REQ55,I_!OUTPUT RQST_^1MVRECA LDQ-_!RECPTR,I_^1_%INQ_"1_#GET ADDRESS OF LREC READ COORDINATES_^1_%STQ-_!REQWD2,I_#PUT ADDRESS IN PARAM. WORD 2 OF RE€€AD REQUEST_^1_%INQ_"-2_^1_%LDA-_!1,Q_#GET LREC SKIP COUNT_^1_%TRA_"Q_#SAVE THAT WORD TO GET SCN_^1_%AND_"=N$7F_#ISOLATE SKIP COUNT_^1_%STA-_!ADVCT,I_#SAVE IT FOR ADVANCE ROUTINE_^1_%TRQ_"A_^1_%CLR_"Q_^1_%ALS_"5_!IS OLC DESIRED_^1_%SAP_"1 NO_^1_%ENQ_"$10_#YES, SET BIT_^1_%INQ_"5_#AND CRC CODE AND_^1_%STQ-_!REQWD1,I_#STORE IN REQUEST_^1GETSCN ALS_"11_!POSITION FOR SCN BIT_^1_%AND_"€€=N$100_#ISOLATE SCN BIT_^1_%ARS_"1_^1_%EOR_"=N$1200_#COMBINE WITH REMAINING CONTENTS OF MODE WORD_^1_%LDQ-_!BUFPTR,I_^1_%INQ_"-1_^1_%STA-_!1,Q_#PUT MODE WORD IN 1ST WORD OF FONFLT_^1_%RTJ_"HPBLD_"GO BUILD HPRINT TABLE FOR CURRENT LINE_^1_%RTJ_"HPSRH_#GO CHECK FOR HFIELD WORD (ID)_^1HCHCR1 STA*_!CHECKQ+1_#SAVE INDICATOR_^1_%SAN_"1_+HPRINT WORD FOUND_^1_%JMP*_!NOHPT_'NO HPRINT, CONTI€€NUE_^1_%LDQ-_!BUFPTR,I_^1_%STA-_!2,Q_)PUT HPRINT WORD IN 3RD WORD OF FONFLT_^1_%LDQ-_!RECPTR,I_,LREC POINTER_^1_%LDA-_!3,Q_2ID=1 WORD_^1_%AND_"=N$FDFF_/CLEAR BIT 9_^1_%EOR_"=N$200_0SET FOR ANSI_^1_%STA-_!3,Q_#RESET ID =1 WORD_^1_%LDQ-_!BUFPTR,I_'GET FONFLT POINTER_^1_%INQ_"-1_^1_%LDA-_!1,Q_*GET MODE WORD_^1_%ADD_"=N$400_%INCREMENT CNT BY 1 (CNT=5)_^1_%STA-_!1,Q_)PUT MODE WORD BACK €€IN FONFLT_^1_%STA-_!HPSWH,I_$SET HPSWH NON-ZERO_^1NOHPT RTJ_"MVBUF_#MOVE WORDS 1,5,6 FROM LREC TO FONFLT_^1_%SET_"A_^1CHECKQ LDQ_"=N$0_,CHECK HPRINT INDICATOR_^1_%SQZ_"1_1NO HPRINT-CONTINUE_^1_%STA-_!HPSWH,I_%SET HPSWH NON-ZERO_^1_%RTJ_"MVBUF_)MOVE WORDS 1,5,6 FROM FONFLT TO RECLIN_^1_%LDA-_!RECPTR,I_$GET ADDRESS OF LREC_^1_%INA_"6_,INCREMENT IT BY 6_^1_%STA-_!TABPTR,I_$SAVE RESUL€€T IN TABPTR_^1_%LDA-_!LINPTR,I_#IS THIS FIRST READ?_^1_%SAZ_"CKENT_#YES, CONTINUE_^1_%LDA-_!LINPTR,I_^1_%STA-_!TABPTR,I_#NO, SET TABLE POINTER TO CORRECT ENTRY_^1_%RTJ_"HPBLD_"GO BUILD HPRINT TABLE FOR NTH LINE_^1CKENT LDQ-_!TABPTR,I_^1_%INQ_"-1_^1_%LDA-_!1,Q_#GET IDENTIFIER WORD_^1_%ALS_"1_#IS THIS A "LINE" ENTRY?_^1_%SAP_"SETEND_#NO, GO SET END-READ INDICATOR_^1_%RTJ_"CKDATA_#GO€€ SEE IF DESC TABLE HAS BEEN EXCEEDED_^1_%CLR_"Q_#IS IT A VALID LINE ENTRY_^1_%RTJ_"LADEF_#GO GET DEFAULT VALUES FOR "LINE"_^1_%LDA-_!BUFPTR,I_^1_%STA_"BLDPTR_^1_%JMP*_!CKNEXT_^1SETEND LDA-_!BUFPTR,I_#GET ADDRESS OF FONFLT_^1_%STA_"BLDPTR_#STORE IT IN FONFLT POINTER_^1_%LDA-_!EORPRM,I_$IS "EOR" SPECIFIED?_^1_%SAN_"1_,YES, DO NOT SET ENREAD INDICATOR_^1_%RAO-_!ENREAD,I_$SET ON END-RE€€AD INDICATOR_^1_%JMP*_!CKNX1_(CHECK NEXT ENTRY_^1CKNEXT LDA-_!TABPTR,I_#GET ADDRESS CONTAINED IN TABLE POINTER_^1_%INA_"6_#INCREMENT IT TO NEXT ENTRY_^1_%STA-_!TABPTR,I_#SAVE IT_^1CKNX1 RTJ_"CKDATA_%GO SEE IF DESC TABLES EXCEEDED_^1_%LDQ-_!TABPTR,I_$NO, POINTER OK_^1_%INQ_"-1_^1_%LDA-_!1,Q_^1_%ALS_"2_#IS THIS AN "AREA" ENTRY?_^1_%SAP_"CHKLIN_#NO, SEE IF ITS LINE_^1_%SET_"Q_#YES_^1€€_%RTJ_"LADEF_#GO GET AREA DEFAULTS_^1_%JMP*_!CKNEXT_#CHECK NEXT TABLE ENTRY_^1CHKLIN ALS_"1_,HPRINT ID?_^1_%SAP_"PSLINE_'NO, CHECK AGAIN_^1_%ALS_"13_#YES, IS IT_^1_%SAM_"PSLINE_#HFIELD, NO HCHAR_^1_%RAO-_!TABPTR,I_%YES, INCREMENT TABPTR BY 1_^1_%LDQ-_!TABPTR,I_^1_%INQ_"-8_+LOOK AT PREVIOUS TABLE ENTRY_^1_%LDA-_!1,Q_^1_%ALS_"2_,WAS IT "AREA"?_^1_%SAP_"1_,NO, CONTINUE_^1_%JMP*_!CKNX1€€_(YES, GO BACK_^1PSLINE LDQ-_!TABPTR,I_^1_%INQ_"-1_^1_%LDA-_!1,Q_)LOOK AT NEXT TABLE ENTRY_^1_%ALS_"1_,IS IT "LINE"?_^1_%SAM_"SAVTB-*-1_#YES, GO SAVE CONTENTS OF TABPTR_^1_%LDA-_!EORPRM,I_#IS "EOR" SPECIFIED?_^1_%SAN_"1_%YES, DO NOT SET END-READ INDICATOR ON_^1_%RAO-_!ENREAD,I_"NO, SET END-READ INDICATOR ON_^1_%JMP*_!ADDINP_$GO SET UP DATA INPUT ADDRESS_^1SAVTB LDA-_!TABPTR,I_^1_%€€STA-_!LINPTR,I_#SET UP TABLE POINTER FOR NEXT READ_^1ADDINP RTJ*_!SAVRED_%GO SAVE READ PARAMETERS_^1_%RTJ_"SNDTBL_#GO SEND FONT/FIELD TABLE TO 955_^1REPRED JMP*_!MOVBAK_#GO RESTORE READ PARAMETERS_^1SAVRED NUM_"0_#RETURN ADDRESS_^1_%LDA-_!REQWD1,I_^1_%STA*_!SVRED_#SAVE REQUEST PARAM. WORD 1_^1_%LDA-_!REQWD2,I_^1_%STA*_!SVRED+1_#SAVE REQUEST PARAM. WORD 2_^1_%JMP*_!(SAVRED)_#EXIT TO€€ CALLER_^1_%BZS_"SVRED(2)_^1INDADR NUM_"0_^1RESRED NUM_"0_#RETURN ADDRESS_^1_%LDA*_!SVRED_^1_%STA-_!REQWD1,I_#RESTORE PARAM. WORD 1 OF REQUEST_^1_%LDA*_!SVRED+1_^1_%STA-_!REQWD2,I_#RESTORE PARAM. WORD 2 OF REQUEST_^1_%JMP*_!(RESRED)_#EXIT TO CALLER_^1MOVBAK RTJ*_!RESRED_^1LLCDAT LDA_"SIXLIN_!SEARCH FOR LINE AT 6/IN.?_^1_%SAN_"SIXLLC_!YES_^1_%LDA-_!LLCIND,I_!NO, LLC ON DATA SET?_^1_€€%SAZ_"PASLL_!NO, CONTINUE_^1SIXLLC RTJ_"LINLOC_!YES, LINE LOCATE ON DATA_^1PASLL RTJ*_!SAVRED_#GO SAVE READ PARAM. WORD 1 % 2_^1_%LDA*_!(SVRED+1)_$GET READ COORDINATES_^1_%AND-_!X00FF,I_#ISOLATE LMC_^1_%INA_"-$A_#SET LMC = LMC-10_^1_%STA-_!REQWD2,I_#STORE IT IN PARAM. WORD 2 OF REQUEST_^1_%LDA-_!NUMRED,I_^1_%INA_"-1_#CHECK FOR FIRST READ_^1_%SAN_"2_^1_%LDA-_!REQWD2,I_"YES, SAVE LM€€C_^1_%STA-_!LMCNXT,I_^1_%ENA_"3_^1_%STA-_!REQWD1,I_#SET CRC=3 FOR POSITION_^1REDOVR RTJ-_!REQ55,I_!GO POSITION MIRROR FOR READ_^1SETRD RTJ*_!RESRED_#GO RESTORE READ PARAMETERS_^1_%LDA-_!NXTOVR,I_!IS THERE ANY POSSIBLITY OF_^1_%SAZ_"3_#BUFFER OVERFLOW, NO_^1_%RAO_"BUFUSR_"YES, SET USRE INDICATOR_^1_%JMP*_!USRIND_#RETURN WITHOUT READING_^1_%LDQ-_!REQWD2,I_#GET ADDRESS OF READ PARAME€€TERS_^1_%LDA-_!FWAPTR,I_"GET CURRENT ADDRESS OF PACK POINTER_^1_%INA_"1_)INCREMENT IT BY 1_^1_%STA-_!1,Q_'STORE IT IN FWA PARAMETER OF READ REQUEST_^1_%RTJ-_!REQ55,I_#GO READ A LINE OF DATA_^1_%RTJ_"STAT55_"GET STATUS_^1CNTU_!LDA-_!REQLU,I_#GET LOGICAL UNIT WORD OF READ REQUEST_^1_%SAM_"1_#A MIRROR FAULT OCCURRED_^1_%JMP*_!GOODAT_#CONTINUE PROCESSING_^1_%RTJ*_!SAVRED_#SAVE READ COO€€RDINATES_^1_%ENA_"4_^1_%STA-_!REQWD1,I_#SET CRC=4 IN PARAM. WORD 1 OF REQUEST_^1_%INA_"$C_^1_%STA-_!REQWD2,I_#SET ZERO MIRROR BIT IN PARAM. WORD 2_^1_%JMP*_!REDOVR_%GO ZERO MIRROR AND READ AGAIN_^1GOODAT CLR_"Q_^1_%LLS_"3_^1_%INQ_"-3_#IS "V" FIELD OF REQUEST SET TO 3?_^1_%SQZ_"1_#YES, SEE IF BLANK OR DELETE LINE_^1_%JMP*_!CKFLDS_#NO, CONTINUE_^1_%LDA-_!STATHD,I_#GET 955 STATUS_^1_%€€ALS_"1_+DOCUMENT NO SORT DURING READ?_^1_%SAP_"CONTU-*-1_#NO, CONTINUE_^1_%RAO_"EJTUSR_%YES, SET EJECT FLAG ON_^1_%JMP*_!USRIND_%YES, GO SET USER INDICATORS_^1CONTU ALS_"5_+IS IT DELETE LINE?_^1_%SAM_"DLTEOR_#YES, GO CHECK FOR EOR_^1_%LDA-_!EORPRM,I_#BLANK LINE - "EOR" SPECIFIED?_^1_%SAN_"1_#YES, CONTINUE_^1_%RAO-_!BLKCNT,I_#NO, ADD 1 TO BLANK LINE COUNT_^1_%JMP*_!PREADV_#GO TO SE€€T UP ADVANCE PARAMETERS_^1DLTEOR LDA-_!EORPRM,I_#DELETE LINE, EOR SPECIFIED?_^1_%SAN_"1_#YES, CONTINUE_^1_%RAO-_!DLTCNT,I_#NO, ADD 1 TO DELETE LINE COUNT_^1PREADV CLR_"Q_#SET Q = 0 FOR ADV55_^1_%LDA-_!ADVCT,I_#PUT THE SKIP COUNT IN A_^1_%RTJ_"ADV55_#GO ADVANCE THE PAGE_^1_%JMP_"CKREAD_#GO BACK FOR ANOTHER LINE_^1CKFLDS LDA-_!FSFLAG,I_#HAS FIELD SEP. FLAG BEEN SET_^1_%SAN_"GOUNP_#YE€€S, CONTINUE_^1_%LDA-_!DATA2,I_#GET ADDRESS OF CURRENT R-LEVEL DATA TABLE_^1_%STA-_!LVL2,I_#SAVE IT FOR FLDSEP_^1_%RTJ_"FLDSEP_#GO TO FIELD SEPARATOR ROUTINE_^1GOUNP RTJ_"UNPACK_#GO GET A DATA CHARACTER FROM INPUT BUFFER_^1_%LDQ-_!FSPNED,I_!LOOKING FOR FS FROM LAST LINE?_^1_%SQZ_"REPROC-*-1_^1_%JMP_"UNPAGN+2_#YES, GO TO FLDSEP_^1REPROC STA*_!CHARES+1_#SAVE IT_^1EOPMCH SUB-_!EOPRM,I€€_#IS IT END-OF-PAGE SYMBOL?_^1_%SAN_"CHARES-*-1_#NO, KEEP SEARCHING_^1_%LDA-_!FWAPTR,I_%CURRENT PACK ADDR._^1_%SUB-_!DINPX,I_'ANY DATA STORED YET?_^1_%SAP_"CHARES_(YES,TREAT EOP AS DATA_^1_%RAO_"EJTUSR_$SET EJECT FLAG ON_^1_%JMP*_!BLKRC_'YES, GO SET BLNUSR INDICATOR_^1CHARES LDA_"=N$0_#PICK UP THE DATA CHARACTER AGAIN_^1_%JMP*_!FLDMCH_^1_%LDA-_!FLDPRM,I_#YES, CONVERT IT TO "FLD" SY€€MBOL_^1GOFS_!RTJ_"FLDSEP_#GO TO FIELD SEPARATOR ROUTINE_^1_%JMP*_!SENDCR_#GO STORE THE CHARACTER_^1FLDMCH LDA*_!CHARES+1_#GET DATA CHARACTER AGAIN_^1_%SUB-_!FLDPRM,I_#IS IT A FIELD SEPARATOR?_^1_%SAN_"1_#NO, CONTINUE_^1_%JMP*_!GOFS-1_#YES, GO TO FIELD SEPARATOR ROUTINE_^1_%LDA*_!CHARES+1_#GET DATA CHARACTER AGAIN_^1_%SUB-_!DLFPRM,I_#IS IT A DELETE FIELD CHARACTER_^1_%SAN_"CKEOL-*-1€€_#NO, GO CHECK FOR "EOL" CHARACTER_^1_%RTJ_"UNPACK_#LOOK AT NEXT CHARACTER_^1_%STA*_!WORDRS+1_#SAVE IT_^1_%SUB-_!DLFPRM,I_#IS IT ALSO A DELETE FIELD CHARACTER?_^1_%SAN_"RETRY_#NO_^1_%CLR_"A_#YES_^1SENDCR RTJ_"PACK_#GO DELETE THE FIELD_^1_%JMP*_!GOUNP_#GET ANOTHER CHARACTER_^1RETRY LDA*_!CHARES+1_#PROCESS THE PREVIOUS CHARACTER AS DATA_^1_%RTJ_"PACK_^1WORDRS LDA_"=N$0_#SEND THE CUR€€RENT CHARACTER BACK THROUGH_^1_%JMP*_!REPROC_#TO CHECK FOR CONTROL CHARACTERS_^1CKEOL LDA*_!CHARES+1_#GET CHARACTER AGAIN_^1_%SUB-_!EOLPRM,I_#IS IT END-OF-LINE SYMBOL_^1_%SAN_"CKEORS-*-1_#NO_^1_%JMP*_!GOUNP_^1CKEORS LDA*_!CHARES+1_#GET CHARACTER AGAIN_^1_%SUB-_!EORPRM,I_#IS IT "EOR"?_^1_%SAZ_"2_#YES_^1_%LDA*_!CHARES+1_#PUT CHARACTER IN A REGISTER_^1_%JMP*_!SENDCR_#GO PACK IT UP_^1€€_%RAO-_!ENREAD,I_#SET END-OF-READ INDICATOR ON_^1_%JMP*_!GOUNP_^1********************************************************************_^1********************************************************************_^1USRIND LDA-_!ENREAD,I_#IS END-READ INDOCATOR ON?_^1_%SAN_"CKIND-*-1_#YES, CONTINUE_^1_%JMP*_!INDEOR_#NO, GO SEE IF WORKING UNDER "EOR"_^1CKIND LDA-_!DLTCNT,I_#ANY LINES DELETED€€?_^1_%SAN_"ALLDEL-*-1_#YES, GO SEE IF ALL LINES DELETED_^1_%LDA-_!NUMRED,I_#NO_^1_%SUB-_!BLKCNT,I_#ARE ALL LINES BLANK?_^1_%SAN_"REJCK-*-1_#NO_^1BLKRC CLR_"A_^1_%STA_"FLDMK1_#YES, CLEAR FIELD MARK INDICATOR_^1_%RAO_"BLNUSR_#SET BLANK RECORD INDICATOR ON_^1_%JMP*_!EXTUSR_#GO EXIT TO USER_^1REJCK RTJ_"FINCK_#GO MAKE FINAL CHECKS ON USER DATA_^1_%JMP*_!EXTUSR_#GO EXIT TO USER_^1ALLD€€EL SUB-_!NUMRED,I_#ARE ALL LINES DELETED?_^1_%SAN_"INCPLT-*-1_#NO, GO SET INCOMPLETE RECORD IND._^1_%STA_"FLDMK1_#YES, CLEAR FIELD MARK INDICATOR_^1_%RAO_"DELUSR_#SET DELETE RECORD INDICATOR ON_^1_%JMP*_!EXTUSR_#GO EXIT TO USER_^1INCPLT RAO_"INCUSR_#SET INCOMPLETE RECORD INDICATOR ON_^1_%JMP*_!REJCK_#GO MAKE FINAL CHECK_^1INDEOR LDA-_!EORPRM,I_#IS "EOR" SPECIFIED?_^1_%SAN_"1_#YES, €€CHECK FOR DATA_^1_%JMP*_!INCPLT_#NO, SET INDICATORS_^1_%LDA-_!FWAPTR,I_^1_%SUB-_!DINPX,I_#IS PACK POINTER ON 1ST WORD OF INPUT BUFFER?_^1_%SAZ_"1_#YES, CHECK PACKSW_^1_%JMP*_!INCPLT_#NO, GO SET INDICATORS_^1_%LDA-_!PACKSW,I_#ANY CHARACTERS IN BUFFER_^1_%SAM_"1_#NO, BLANK RECORD_^1_%JMP*_!INCPLT_#YES, SET INDICATORS_^1_%JMP*_!BLKRC_#GO SET BLANK RECORD INDICATOR_^1EXTUSR JMP_"SETFS_€€)EXIT TO CALLER_^1*************************************************************_^1*************************************************************_^1** INITIALIZE **_^1INIT_!NOP_"0_#RETURN ADDRESS_^1_%LDA_"=XTABL55_#PUT BASE ADDRESS OF TABLES IN_^1_%STA-_!$FF_#I-REGISTER FOR INDEXING_^1_%ENA_"0_^1_%STA_"CALLID_^1_%ENQ_"LINPTR_#CLEAR READ FLAGS AND COUNTERS_^1_%INQ_"-ENREAD_^1CLRIND ST€€A-_!ENREAD,B_^1_%INQ_"-1_^1_%SQM_"CNTUA-*-1_^1_%JMP*_!CLRIND_^1CNTUA STQ_"FLDMK1_$SET FIELD SEPARATOR INDICATOR NON-ZERO_^1_%STA-_!NXTOVR,I_^1_%STA_"RJRUSR_#CLEAR REJECT INDICATOR_^1_%STA_"EOFUSR_#CLEAR END-OF-FILE_^1_%STA_"BLNUSR_#CLEAR BLANK RECORD_^1_%STA_"INCUSR_#CLEAR INCOMPLETE RECORD_^1_%STA_"DELUSR_#CLEAR DELETE RECORD_^1_%STA_"BUFUSR_^1_%LDQ_"=XFST_#GET ADDRESS OF FS TABL€€E_^1_%STA-_!1,Q_#SET 2ND LOC. OF FS TABLE=0_^1_%INQ_"-1_^1_%LDA-_!DINPX,I_#PUT ADDRESS OF DINP -1 IN_^1_%INA_"-1_#1ST LOCATION OF FS TABLE_^1_%EOR_"=N$8000_#SET BIT 15 ON_^1_%STA-_!1,Q_(AND IN THE PACK WORD POINTR (FWAPTR)_^1_%INQ_"2_)STORE ADDRESS OF FST+1 IN FSTPTR_^1_%STQ-_!FSTPTR,I_^1H7FFF AND_"=N$7FFF_^1_%STA-_!FWAPTR,I_^1_%STA-_!OLDFLD,I_#PUT ADDRESS OF DINP-1 IN PACK FS POI€€NTER_^1_%STA-_!FLDPTR,I_#PUT ADDRESS OF DINP-1 IN PACK FS POINTER_^1_%INA_"1_^1_%STA-_!INPTR,I_#PUT ADDRESS OF DINP IN UNPACK WORD POINTER_^1_%LDA-_!XFF00,I_^1_%STA-_!CHARSW,I_#INITIALIZE UNPACK CHARACTER SWITCH_^1_%STA-_!PACKSW,I_#INITIALIZE PACK CHARACTER SWITCH_^1_%LDA*_!FSTHRU_#FIRST TIME THRU?_^1_%SAN_"1_#YES, GO ARRANGE FORM PARAMETERS_^1_%JMP*_!FNDATA_#NO, CONTINUE_^1_%ENA_"€€0_#CLEAR FSTHRU SWITCH_^1_%STA*_!FSTHRU_^1_%LDA_"=XFORMCK_^1_%ADD-_!$FF_^1_%STA*_!FRMHLD_#PUT ADDRESS OF FORMCK IN FRMHLD_^1_%LDQ_"=XDFOR_^1_%LDA-_!4,Q_#GET "EOL" CHARACTER FROM FORM TABLE_^1_%ALS_"8_^1_%AND-_!X00FF,I_#MASK IT_^1_%STA*_!(FRMHLD)_#STORE IT IN 1ST WORD OF FORMCK_^1_%RAO*_!FRMHLD_^1_%INQ_"$B_^1_%STQ*_!FRMADR_^1_%ENA_"-5_*SAVE LLC,FLA,EOR,EOP,FLD,DLF,%FID PARAMS._^1_%S€€TA*_!FRMCNT_%IN FORMCK_^1FOR1_!ENQ_"-2_^1_%LDA*_!(FRMADR)_#STORE THESE PARAMETERS 1 CHAR/WORD IN_^1_%ALS_"8_#SUCCESSIVE LOCATIONS OF FORMCK_^1FOR2_!AND-_!X00FF,I_^1_%STA*_!(FRMHLD)_^1_%RAO*_!FRMHLD_^1_%INQ_"1_^1_%SQZ_"2_^1_%LDA*_!(FRMADR)_^1_%JMP*_!FOR2_^1_%RAO*_!FRMCNT_^1_%LDA*_!FRMCNT_"DONE STORING PARAMETERS?_^1_%SAZ_"FNDATA-*-1_#YES_^1_%RAO*_!FRMADR_#NO, INCREMENT SEND ADDRESS €€BY 1 AND GO BACK_^1_%JMP*_!FOR1_^1FRMADR NUM_"0_#SAVE AREA FOR ADDRESS OF DFOR+$A_^1FRMHLD NUM_"0_#SAVE AREA FOR ADDRESS OF FORMCK_^1FRMCNT NUM_"0_#COUNTER_^1FSTHRU NUM_"1_#FIRST TIME THRU SWITCH_^1FNDATA LDQ_"(READ55)_$GET ADDRESS OF R-LEVEL DATA TABLE_^1_%STQ-_!DATA2,I_%SAVE IT IN DATA2_^1_%RAO_"READ55_#INCREMENT TO NEXT PARAMETER_^1_%LDQ_"(READ55)_!GET ADDRESS OF ASSIGN TABLE_^1€€_%LDA-_!3,Q_'GET LOGICAL UNIT NUMBER_^1_%AND-_!XFF00,I_^1_%SAP_"ASSG1_^1_%EOR_"=N$8_^1ASSG1 ALS_"8_^1_%STA_"LUIN_^1_%STA-_!REQLU,I_"SAVE IT IN 955 REQUEST AS WELL AS COMMON_^1_%RAO_"READ55_%SET RETURN ADDRESS TO USER_^1_%ENA_"-2_^1_%STA-_!ONELRC,I_"INITIALIZE ONE LREC FLAG_^1_%LDA-_!DATAX,I_^1_%SUB-_!DATA2,I_#TEST DATA ADDRESS_^1_%SAZ_"1_^1_%JMP*_!(INIT)_$NOT 1 LREC_^1_%RAO-_!ONE€€LRC,I_"INCREMENT ONCE_^1_%JMP*_!(INIT)_^1_%JMP*_!(INIT)_'EXIT FROM INITIALIZE_^1***************_!BUILD HANDPRINT ADDRESS TABLE ****************_^1HPBLD NOP_"0_'RETURN ADDRESS TO CALLER_^1_%LDQ-_!TABPTR,I_$GET CURRENT ADDRESS IN TABPTR_^1_%INQ_"6_-INCREMENT TO ADDRESSBOF NEXT ENTRY_^1_%STQ*_!FRMCNT_(SAVE RESULTING ADDRESS_^1_%INQ_"-7_^1_%LDA-_!1,Q_+PICK UP CURRENT LREC OR LINE ENT€€RY_^1_%STA*_!FRMHLD_(SAVE IT TEMPORARILY_^1_%CLR_"A_^1_%ENQ_"8_^1CLRTBL STA*_!HPTABL,Q_$CLEAR OUT 9-WORD HPRINT ADDRESS TABLE_^1_%SQZ_"ADATA_(DONE, CONTINUE_^1_%INQ_"-1_,DECREMENT Q BY 1_^1_%JMP*_!CLRTBL_'GO BACK_^1ADATA LDA*_!FRMCNT_'GET ADDRESS OF TABLE ENTRY_^1_%SUB-_!DATAX,I_%DOES IT EQUAL ADDRESS OF DATA TABLES?_^1_%SAZ_"GETOUT_)STOP SEARCH_^1_%LDA*_!(FRMCNT)_%DOES IT POINT T€€O AN "LREC" ENTRY?_^1_%SAM_"GETOUT_%YES, STOP SEARCH_^1_%ALS_"1_)DOES IT POINT TO A "LINE" ENTRY ?_^1_%SAP_"REPCHK_(NO, KEEP CHECKING_^1_%LDA*_!FRMHLD_'YES, WAS PREVIOUS RECORD "LREC" ?_^1_%SAM_"1_*YES, KEEP SEARCHING FOR HPRINT STATEMENTS_^1GETOUT JMP*_!EXITHP_%NO,EXIT FROM HPBLD_^1_%CLR_"A_(CLEAR LREC INDICATOR_^1_%STA*_!FRMHLD_^1_%JMP*_!LRCLIN_)CONTINUE SEARCH_^1REPCHK ALS_"2_,I€€S IT "HPRINT" ID ?_^1_%SAM_"HPADR_(YES, SAVE THE ADDRESS_^1LRCLIN LDA*_!FRMCNT_%NO, INCREMENT ADDRESS BY 6_^1_%INA_"6_^1_%STA*_!FRMCNT_(SAVE IT FOR NEXT TIME_^1_%JMP*_!ADATA_)GO BACK_^1HPADR ALS_"13_#IS IT HCHAR_^1_%SAP_"1_#NO, HFIELD_^1_%JMP*_!EXITHP_#YES_^1_%LDA*_!FRMCNT_^1_%STA*_!HPTABL,Q_$SAVE HPRINT WORD ADDRESS_^1_%RAO*_!FRMCNT_(INCREMENT TABLE ADDRESS BY 1_^1_%TRQ_"A_^1_%IN€€A_"-7_,HPRINT TABLE FULL?_^1_%SAZ_"EXITHP_(YES, STOP BUILDING TABLE_^1_%INQ_"1_.NO, INC. Q BY,1_^1_%JMP*_!ADATA_^1EXITHP JMP*_!(HPBLD)_#EXIT TO CALLER_^1_%BZS_"HPTABL(9)_%HPRINT ADDRESS TABLE_^1*************************************************************_^1*************************************************************_^1LINLOC NOP_"0_#RETURN ADDRESS_^1_%LDA-_!TOPIND,I_#IS TOP-OF-PA€€GE INDICATOR SET?_^1_%SAZ_"2_#NO, GO LLC ON DATA_^1_%LDA-_!LLCIND,I_#YES, IS LLC ON DATA AT TOP OF PAGE SPECIFIED?_^1_%SAZ_"1_#NO, CHECK FOR "LLC" PARAMETER_^1_%JMP*_!SRHDAT_#YES, GO LLC ON DATA_^1_%LDA-_!LLCPRM,I_#IS "LLC" PARAMETER SPECIFIED?_^1_%SAN_"2_#YES, LINE LOCATE ON BAR_^1_%JMP_"FLARTN_#NO, GO CHECK FOR FIRST LINE ADVANCE_^1_%STA*_!CORDSV_#SAVE LLC COORDINATE_^1_%LDQ_"=XD€€ESC_$GET ADDRESS OF 1ST LREC TABLE_^1_%STQ-_!RECPTR,I_#SAVE IT IN LREC POINTER_^1_%LDA_"=N$1240_#SET CNT = 4, PC = 2, S = 0(SCAN 3)+C=1 (UNPACK_^1_%LDQ-_!BUFPTR,I_^1_%INQ_"-1_^1_%STA-_!1,Q_#STORE MODE WORD IN 1ST WORD OF FONFLT_^1_%RTJ_"MVBUF_#MOVE WORDS 1,5 % 6 OF LREC TO FONFLT_^1_%RTJ_"SNDTBL_#GO SEND FONT/FIELD TABLE TO 955_^1MIRR_!RTJ_"POSMIR_#GO POSITION MIRROR_^1_%LDA*_!CORD€€SV_#GET "LLC" COORDINATE_^1_%INA_"$14_#SET TMC = LLC+20_^1_%ALS_"4_#PUT TMC IN PROPER POSITION_^1_%INA_"2_#SET CRC=2_^1_%STA-_!REQWD1,I_#STORE IN PARAM. WORD 1 OF REQUEST_^1_%LDA*_!CORDSV_^1_%INA_"-$14_#SET IMC = LLC - 20_^1_%STA-_!REQWD2,I_#STORE IN PARAM WORD 2 OF REQUEST_^1_%RTJ-_!REQ55,I_#PERFORM LINE LOCATE ON BAR_^1_%RTJ_"STAT55_#TAKE 955 STATUS_^1_%LDA-_!STATHD,I_#GET 955 ST€€ATUS_^1_%ALS_"4_#LINE LOCATE FAILURE?_^1_%SAP_"3_#NO, CHECK FOR FID_^1TYPOUT RTJ_"TYPERR_#YES, TYPE OUT ERROR "LL"_^1_%JMP*_!MIRR_#TRY AGAIN_^1_%LDA-_!FIDPRM,I_#IS "FID" SPECIFIED?_^1_%INA_"-$20_^1_%SAN_"2_"YES, CONTINUE_^1_%JMP_"FLARTN_%NO, GO CHECK "FLA"_^1_%RTJ_"POSMIR_#GO POSITION MIRROR FOR READ_^1_%LDQ*_!CORDSV_^1_%TRQ_"A_^1_%INA_"$14_#READ TMC = LLC +20_^1_%ALS_"8_^1_%INQ_"-€€$14_#READ IMC = LLC =20_^1_%EAQ_"A_^1_%STA*_!PARHLD_#SAVE IN HOLD AREA_^1_%LDA-_!DINPX,I_#PUT ADDRESS OF DINP IN 2ND WORD OF HOLD AREA_^1_%STA*_!PARHLD+1_^1_%STA*_!SRHFID_^1_%LDA_"=XPARHLD_^1_%STA-_!REQWD2,I_#PUT ADDR. OF HOLD AREA IN PARAM. WORD 1 OF RE_^1_%ENA_"5_#SET CRC=5_^1_%STA-_!REQWD1,I_#PUT IT IN PARAM. WORD 2 OF READ REQUEST_^1_%RTJ-_!REQ55,I_#GO READ FORM IDENTIFIER_^1_%€€RTJ_"STAT55 GET FID LWA+1_/CCN1700R5541-002_^1_%CLR_"Q_#GET A CHARACTER OF INPUT_^1_%STQ*_!VALMCH_%CLEAR MATCH INDICATOR_^1CKFID INQ_"1_^1_%LDA-_!FIDPRM-1,B_^1_%INA_"-$20_)END OF FID?_^1_%SAN_"RESTT_'NO,CONTINUE_^1_%JMP*_!FIDOK_(YES, EXIT_^1RESTT LDA*_!(SRHFID)_$GET AN FID CHAR. FROM INPUT BUFFER_^1_%SUB-_!FIDPRM-1,B_"IS THERE A MATCH?_^1_%RAO*_!SRHFID_%INCREMENT INPUT BY 1_^1_%S€€AZ_"CNTFID_'YES, GO ON_^1_%LDA*_!VALMCH_'ANY MATCH FOUND YET?_^1_%SAZ_"CKEND_'NO, GO TO CHECK END OF INPUT_^1FIDERR JMP*_!TYPOUT_%YES, TYPE OUT ERROR_^1CKEND LDA*_!SRHFID_^1_%SUB-_!IHOLD,I_$IS INPUT DATA EXAUSTED?_^1_%SAZ_"ERAGN_%YES, ERROR_^1_%JMP*_!RESTT_%NO, GET ANOTHER CHARACTER_^1ERAGN JMP*_!TYPOUT_$GO TYPE "LL"_^1CNTFID ENA_"1_^1_%STA*_!VALMCH_#SET MATCH INDICATOR ON_^1_%TR€€Q_"A_^1_%INA_"-4_(HAVE 4 CHARS. BEEN MATCHED?_^1_%SAZ_"FIDOK_$YES, FORM ID IS CORRECT_^1_%JMP*_!CKFID_%NO, GO BACK_^1CORDSV NUM_"0_*COORDINATE SAVE AREA_^1SRHFID NUM_"0_,ADDRESS OF INPUT FID CHARACTERS_^1VALMCH NUM_"0_)MATCH INDICATOR_^1_%BZS_"PARHLD(2)_#PARAMETER WORD HOLD_^1FIDOK JMP*_!FLARTN_#GO CHECK "FLA"_^1SRHDAT LDA-_!REQWD1,I_#GET PREVIOUS CRC FOR READ_^1_%STA*_!PARHLD_#SA€€VE IT_^1_%LDA-_!REQWD2,I_#GET PREVIOUS PBA FOR READ_^1_%STA*_!PARHLD+1_#SAVE IT_^1LOCAGN LDQ-_!BUFPTR,I_#GET ADDRESS OF FONFLT_^1_%LDA-_!2,Q_#GET 3RD WORD OF TABLE_^1_%STA*_!LLAREA+1_^1_%AND-_!X00FF,I_^1_%INA_"-2_#LINE LOCATE BY AREA?_^1_%SAZ_"LLAREA-*-1_#YES_^1_%LDA-_!3,Q_^1_%STA*_!LLAREA+1_^1_%AND-_!X00FF,I_^1_%INA_"-2_(IS IT "AREA" ?_^1_%SAZ_"LLAREA_#YES, CONTINUE_^1_%LDA*_!(PAR€€HLD+1)_#NO, GET LMC % RMC FROM READ REQUEST_^1_%AND-_!X00FF,I_#ISOLATE LMC_^1_%STA*_!CORDSV_#SAVE IT TEMPORARILY_^1_%INA_"-$A_#GET LMC -10_^1_%JMP*_!POSTN_#GO POSITION MIRROR_^1LLAREA LDQ_"=N$0_%PICK UP CURRENT "AREA" COORDINATE FOR LLC_^1_%LLS_"8_#MOVE IT TO BOTTOM OF A_^1_%AND-_!X00FF,I_"ISOLATE IT_^1_%STA*_!CORDSV_#SAVE IT TEMPORARILY_^1_%INA_"-$A_#GET LMC-10_^1POSTN STA-_!REQW€€D2,I_#PUT LMC-10 IN POSITION REQUEST_^1_%ENA_"3_^1_%STA-_!REQWD1,I_#SET CRC=3_^1_%RTJ-_!REQ55,I_#GO POSITION MIRROR_^1_%LDQ_"=XDFOR_#GET START OF FORM TABLE_^1_%LDA-_!7,Q_#MASK_^1_%AND_"=N$7F00_#OUT BLANK LINE COORDINATE_^1_%ARS_"8_#AND_^1_%TRA_"Q_#SAVE IN Q REG_^1_%LDA*_!CORDSV_#GET LMC FOR LINE LOCATE_^1_%STA-_!REQWD2,I_#STORE IT IN PARAM. WORD 2 OF REQUEST_^1_%SQZ_"2_#IS THERE A€€ BLL SPECIFIED, NO_^1_%AAQ_"A_#YES,ADD TO INITIAL COORDINATE_^1_%JMP*_!*+2_^1_%INA_"$1E_#SET RMC = LCM + 30_^1_%ALS_"4_^1_%INA_"2_#SET CRC=2_^1_%STA-_!REQWD1,I_#STORE IT IN PARAM WORD 1 OF REQUEST_^1_%RTJ-_!REQ55,I_#GO LINE LOCATE_^1_%RTJ_"STAT55_#TAKE 955 STATUS_^1_%LDA-_!STATHD,I_^1_%ALS_"4_#LINE LOCATE FAILURE?_^1_%SAM_"CKACT-*-1_#YES, TAKE ACTION_^1CLRN_!CLR_"A_^1_%STA-_!TOPIND€€,I_#CLEAR TOP-OF-PAGE INDICATOR_^1_%STA-_!LLCIND,I_#CLEAR LINE LOCATE ON DATA INDICATOR_^1_%STA_"SIXLIN_!CLEAR 6/IN. INDICATOR_^1_%JMP*_!RESTOR_#GO RESTORE READ PARAMETERS_^1CKACT LDQ_"SIXLIN_!SEARCH INDICATOR SET?_^1_%SQN_"SRHSIX_!YES, CONTINUE_^1_%LDQ-_!TOPIND,I_!TOP OF PAGE?_^1_%SQN_"1_!YES_^1_%JMP*_!CLRN_!NO, PREPARE TO EXIT_^1SRHSIX ALS_"12_!DATA SKEWED?_^1_%SAP_"1_*NO, ITS A€€ BLANK LINE_^1_%JMP*_!CLRN_#YES, PREPARE TO EXIT_^1_%ENA_"1_#SET SKIP COUNT = 1_^1_%SET_"Q_#SET BIT 15 OF Q ON_^1_%RTJ_"ADV55_#GO ADVANCE THE PAGE_^1_%LDA_"EJTUSR_#EJECT INDICATOR SET?_^1_%SAZ_"2_#NO, CONTINUE_^1_%JMP_"BLKRC_#YES, SET BLNUSR INDICATOR_^1_%JMP*_!LOCAGN_#GO BACK TO LINE LOCATE AGAIN_^1RESTOR LDA*_!PARHLD_^1_%STA-_!REQWD1,I_#RESTORE READ PARAM WORD 1_^1_%LDA*_!PARHLD+€€1_^1_%STA-_!REQWD2,I_#RESTORE READ PARAM WORD 2_^1EXITLN JMP_"(LINLOC)_$EXIT TO CALLER_^1FLARTN LDA-_!FLAPRM,I_#IS FIRST LINE ADVANCE REQUESTED?_^1_%SAN_"1_#YES, GO_^1_%JMP*_!EXITLN_#EXIT TO CALLER_^1_%SET_"Q_#SET Q NEGATIVE_^1_%RTJ_"ADV55_#GO ADVANCE THE PAGE_^1FLADR JMP*_!EXITLN_^1****************************************_^1****************************************_^1POSMIR NOP_"0€€_#RETURN ADDRESS_^1_%ENA_"3_^1_%STA-_!REQWD1,I_#SET CRC=3 IN PARAM. WORD 1 OF REQUEST_^1_%LDA*_!CORDSV_$GET PREVIOUS LLC COORDINATE_^1_%INA_"-$1E_#SET LMC EQUAL TO LLC-30_^1_%STA-_!REQWD2,I_#PUT IT IN PARAM. WORD 2 OF REQUEST_^1_%RTJ-_!REQ55,I_#GO POSITION MIRROR_^1_%RTJ_"STAT55_#TAKE 955 STATUS_^1_%JMP*_!(POSMIR)_#EXIT TO CALLER_^1****************************************_^1*******€€*********************************_^1SNDTBL NOP_"0_#RETURN ADDRESS_^1_%ENA_"1_^1_%STA-_!REQWD1,I_#SET CRC = 1 IN PARAMETER WORD 1 OF REQUEST_^1_%LDA-_!BUFPTR,I_#GET ADDRESS OF FONFLT_^1_%STA-_!REQWD2,I_#STORE IT IN PARAMETER WORD 2 OF REQUEST_^1FNT55 RTJ-_!REQ55,I_#GO SEND FONT/FIELD TABLE FOR LLC_^1CKSTAT LDA-_!REQLU,I_#PICK UP LOGICAL UNIT NO. FROM REQUEST_^1_%SAP_"1_#NO ERROR, C€€ONTINUE_^1_%JMP*_!FNT55_#V FIELD IS SET (ERROR), TRY AGAIN_^1_%JMP*_!(SNDTBL)_^1****************************************_^1****************************************_^1TYPERR NOP_"0_"RETURN ADDRESS_^1_%RTJ-_!($F4)_#TYPE OUT "LL" FOR LINE LOCATE FAILURE_^1_%ADC_"$0C00_#OR INCORRECT FORM IDENTIFIER_^1_%NUM_"0_^1_%NUM_"0_^1_%NUM_"$18FC_#STANDARD OUTPUT COMMENT DEVICE_^1_%NUM_"1_^1_%ADC_€€"MSGOUT_^1_%LDA*_!TYPERR+4_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%RTJ-_!($F4)_#GET OPERATOR REPLY_^1_%ADC_"$0800_^1_%NUM_"0_^1TYPTHR NUM_"0_^1_%NUM_"$18FD_#STANDARD INPUT COMMENT DEVICE_^1_%NUM_"1_^1_%ADC_"MSGIN_^1_%LDA*_!TYPTHR_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(TYPERR)_#GO BACK TO LINE LOCATE_^1MSGOUT NUM_"$4C4C_^1MSGIN NUM_"1_^1****************************************_^1****************€€************************_^1MVBUF NOP_"0_#RETURN ADDRESS_^1_%SAM_"MVRECX-*-1_"GO MOVE FROM FONFLT TO RECLIN_^1_%CLR_"A_.CLEAR OUT MVSWH_^1_%STA*_!MVSWH_^1_%LDA-_!RECPTR,I_#MOVE FROM RECPTR TO FONFLT_^1_%INA_"3_#PUT SENDING ADDRESS IN A_^1_%LDQ-_!BUFPTR,I_^1_%INQ_"1_#PUT RECEIVING ADDRESS IN Q_^1_%JMP*_!MOVE_#GO MOVE_^1MVRECX STA*_!MVSWH_*SET MVSWH NON-ZERO_^1_%LDA-_!BUFPTR,I_^1_%IN€€A_"1_#PUT SENDING ADDRESS IN A_^1_%LDQ-_!RECX,I_#PUT RECEIVING ADDRESS IN Q_^1MOVE_!STA*_!INADDR_^1_%STQ*_!OUTADR_^1_%LDA-_!HPSWH,I_(IS HPRINT ID=7 INVOLVED?_^1_%SAZ_"NRMOVE_)NO, CONTINUE_^1_%LDA*_!MVSWH_+YES, MOVE FROM RECPTR TO FONFLT?_^1_%SAN_"2_.NO, FROM FONFLT TO RECLIN_^1_%RAO*_!OUTADR_)INCREMENT RECEIVING ADDRESS BY 1_^1_%JMP*_!NRMOVE_)CONTINUE_^1_%RAO*_!INADDR_)INCREMENT SE€€NDING ADDRESS BY 1_^1NRMOVE ENQ_"2_.SET Q INDEX = 2_^1NORM2 LDA*_!(INADDR),Q_$GET A WORD_^1_%STA*_!(OUTADR),Q_$STORE IT_^1_%SQN_"QNZERO_)IF Q NON-ZERO, NOT DONE MOVING_^1_%STQ-_!HPSWH,I_(CLEAR HPSWH_^1_%JMP*_!(MVBUF)_(EXIT TO CALLER_^1QNZERO INQ_"-1_-DECREMENT Q INDEX BY 1_^1_%LDA-_!HPSWH,I_(HPRINT INVOLVED?_^1_%SAN_"1_.YES_^1_%JMP*_!NORM2_*NO, GO BACK FOR NEXT WORD_^1_%SQZ_"1_/IF€€ Q = 0, FIND ADDR. TO DECREMENT_^1_%JMP*_!NORM2_*Q NON-ZERO, GO BACK_^1_%LDA*_!MVSWH_+DETERMINE TYPE OF MOVE_^1_%SAN_"FNTREC_)FONFLT TO RECLIN_^1_%LDA*_!OUTADR_*RECPTR TO FONFLT_^1_%INA_"-1_^1_%STA*_!OUTADR_*PUT DECREMENTED ADDRESS BACK IN OUTADR_^1_%JMP*_!NORM2_+GO BACK_^1FNTREC LDA*_!INADDR_^1_%INA_"-1_^1_%STA*_!INADDR_+PUT ADDRESS BACK IN INADDR_^1_%JMP*_!NORM2_^1MVSWH NUM_"0_/€€SWITCH FOR HPRINT MOVES_^1INADDR NUM_"0_#HOLDS SENDING ADDRESS_^1OUTADR NUM_"0_#HOLDS RECEIVING ADDRESS_^1***********************************************************************_^1***********************************************************************_^1LADEF NUM_"0_^1_%SQZ_"LA2_+Q = ZERO MEANS LINE INPUT_^1_%JMP*_!LA20_^1LA2_"LDA-_!BUFPTR,I_%FONT/FLD BUFFER_^1_%STA*_!BLDPTR_^1_%L€€DA-_!TABPTR,I_%POINTER TO LINE TABLE_^1_%STA*_!DEFPTR_^1_%LDA*_!(DEFPTR)_%FIRST WORD_^1_%ALS_"5_-CHECK FOR OLC_^1_%SAP_"LA3_+SKIP = NO_^1_%ENQ_"$15_+YES_^1_%STQ-_!REQWD1,I_%SET OLC IN READ REQUEST_^1_%CLR_"Q_^1LA3_"ALS_"2_-MAKE SCN BIT HIGH ORDER_^1_%LLS_"1_^1_%LDA*_!(BLDPTR)_^1_%AND_"=N$FF7F_'ALL MODE EXCEPT SCN_^1_%QLS_"7_^1_%AAQ_"A_-MERGE SCAN_^1_%STA*_!(BLDPTR)_%RESTORE_^1_%LDA€€*_!(DEFPTR)_^1_%AND_"=N$007F_!PICK UP SKIP COUNT_^1_%STA-_!ADVCT,I STORE SKIP COUNT_^1_%RAO*_!DEFPTR_^1_%LDQ*_!DEFPTR_^1_%STQ-_!REQWD2,I_%SET PBA TO LINE_^1_%RAO*_!DEFPTR_^1_%RAO*_!DEFPTR_^1_%RAO*_!BLDPTR_(POINT TO FONT WORD_^1_%LDA*_!(DEFPTR)_%STORE OPTIONS_^1_%STA*_!(BLDPTR)_^1_%RAO*_!DEFPTR_(NEXT WORD_^1_%RAO*_!BLDPTR_^1_%RTJ*_!HPSRH_)CHECK FOR ID = 7 FOR THIS LINE_^1_%SAN_"1_^1€€_%JMP*_!GO56_*NO_^1_%STA*_!(BLDPTR)_%YES - STORE ID = 7 IN FONFLT_^1_%LDQ*_!BLDPTR_^1_%INQ_"-2_^1_%LDA-_!1,Q_+SET BIT 9 IN ID =1_^1_%AND*_!ZERBT9_^1_%EOR*_!BITE9_^1_%STA-_!1,Q_^1_%RAO*_!BLDPTR_^1_%LDQ-_!BUFPTR,I_^1_%INQ_"-1_^1_%LDA-_!1,Q_^1_%ADD_"=N$400_(ADD 1 TO MODE WORD (CNT = 5)_^1_%STA-_!1,Q_^1_%STA-_!HPSWH,I_'SET HPSWH NON-ZERO_^1GO56_!LDA*_!(DEFPTR)_%VIDEO CONTROL PARAMETERS€€_^1_%STA*_!(BLDPTR)_%QLV, CPR_^1_%RAO*_!DEFPTR_^1_%RAO*_!BLDPTR_^1_%LDA*_!(DEFPTR)_%VLT, HLT_^1_%STA*_!(BLDPTR)_^1_%JMP*_!(LADEF)_'EXIT_^1LA20_!LDA-_!TABPTR,I_^1_%STA*_!DEFPTR_(POINTER TO AREA TABLE_^1_%RAO*_!DEFPTR_^1_%LDA*_!BLDPTR_(CHECK IF FIRST AREA TABLE_^1_%SUB-_!BUFPTR,I_^1_%SAZ_"1_-SKIP = YES - SET COUNT TO 6_^1_%ENA_"3_-NO - INCREM. COUNT BY 5_^1_%INA_"2_^1_%ADD_"=N$900_(C€€REATE INA INSTR. FOR_^1_%STA*_!LA30_*STORING COUNT IN MODE WORD_^1_%RAO*_!BLDPTR_^1_%LDA*_!(DEFPTR) STORE FONT OPTIONS_^1_%STA*_!(BLDPTR)_^1_%RAO*_!DEFPTR_^1_%RAO*_!BLDPTR_^1_%RTJ*_!HPSRH_)CHECK FOR ID = 7 FOR THIS AREA_^1_%SAN_"1_^1_%JMP*_!BUILD2_(NO_^1_%STA*_!(BLDPTR)_%YES - STORE ID = 7_^1_%LDQ*_!BLDPTR_^1_%INQ_"-2_^1_%LDA-_!1,Q_+SET BIT 9 IN ID 1_^1_%AND*_!ZERBT9_^1_%EOR*_!BITE€€9_^1_%STA-_!1,Q_^1_%RAO*_!BLDPTR_^1_%RAO*_!LA30_*INCREMENT MODE WORD BY 1_^1BUILD2 ENQ_"4_%LMC,RMC,VIDEO CONTROL_^1_%LDA*_!(DEFPTR)_^1_%STA*_!(BLDPTR)_^1_%RAO*_!DEFPTR_^1_%RAO*_!BLDPTR_^1_%INQ_"-1_^1_%SQZ_"1_^1_%JMP*_!BUILD2+1_^1_%LDA*_!BLDPTR_^1_%INA_"-1_^1_%STA*_!BLDPTR_^1_%LDQ-_!BUFPTR,I_^1_%INQ_"-1_^1_%LDA-_!1,Q_+RESET MODE WORD COUNT_^1_%ALS_"6_^1LA30_!INA_"0_^1_%ALS_"10_^1_%S€€TA-_!1,Q_^1_%JMP*_!(LADEF)_'EXIT_^1ZERBT9 NUM_"$FDFF_^1BITE9 NUM_"$0200_^1BLDPTR NUM_"0_#POINTS INTO 40-WD BUFFER_^1DEFPTR NUM_"0_#POINTS INTO LINE/AREA TBL_^1******************************************************************_^1******************************************************************_^1HPSRH NOP_"0_1RETURN ADDRESS_^1_%LDA-_!TABPTR,I_*GET ADDRESS IN TABPTR_^1_%INA_"6_1UP€€ IT BY 6_^1_%STA*_!HPDR11_"SAVE IT_^1_%CLR_"Q_^1SRHTBL LDA_"HPTABL,Q_*GET AN HPRINT ADDRESS_^1_%SAN_"1_1IF NON-ZERO, CONTINUE_^1_%JMP*_!EXTSRH_,IF ZERO, END OF TABLE,EXIT_^1_%SUB*_!HPDR11_"DO ADDR. MATCH_^1_%SAZ_"TBLMCH_,YES_^1_%INQ_"1_1NO_^1_%JMP*_!SRHTBL_-GO AGAIN_^1TBLMCH LDQ_"HPTABL,Q_*GET ADDRESS OF HPRINT WORD_^1_%INQ_"-1_^1_%LDA-_!1,Q_/GET CONTENTS OF THAT ADDRESS_^1_%ALS_€€"4_^1_%AND_"=N$FFF0_+MASK OFF HPRINT ID_^1_%INA_"7_1REPLACE WITH ID=7_^1EXTSRH JMP*_!(HPSRH)_+EXIT TO CALLER_^1HPDR11 NUM_"0_^1************************************************************************_^1************************************************************************_^1************************************************************************_^1********************************€€****************************************_^1CKDATA NOP_"0_#RETURN ADDRESS_^1_%LDA-_!TABPTR,I_#GET TABLE POINTER ADDRESS_^1_%SUB-_!DATAX,I_#HAVE WE RUN INTO DATA TABLES?_^1_%SAZ_"TS_^1_%LDQ-_!TABPTR,I_^1_%INQ_"-1_^1_%LDA-_!1,Q_'GET DESC WORD_^1_%SAM_"1_*CHECK FOR HCHAR_^1_%JMP*_!(CKDATA)_!NO_^1_%ALS_"3_^1_%SAM_"1_^1_%JMP*_!(CKDATA)_!NO_^1_%RAO-_!ONELRC,I_!YES_^1_%JMP*_!(CKDATA)_#NO, €€EXIT_^1TS_#RAO-_!ONELRC,I_!INCREMENT ONE LREC FLAG_^1_%LDA-_!EORPRM,I_"IS EOR SPECIFIED?_^1_%SAZ_"1_'NO, GO SET END-READ INDICATOR_^1_%JMP*_!(CKDATA) YES, DO NOT SET END-READ, EXIT_^1_%RAO-_!ENREAD,I_!SET END-READ INDICATOR ON_^1_%JMP_"ADDINP_#GO BACK TO READ WHAT IS THERE_^1************************************************************************_^1*******************************€€*****************************************_^1UNPACK NUM_"0_^1UN2_"LDA-_!INPTR,I_#GET ADDR. POINTER INTO BUFFER_^1_%STA*_!UN30_^1_%SUB-_!IHOLD,I_#IS IT = LWA+1_^1_%SAN_"UN4_#NO - CONTINUE_^1_%LDA-_!XFF00,I_^1_%STA-_!CHARSW,I_#SET TO GET UPPER CHAR NXT TIME THRU_^1_%JMP_"ENDATA_#GO SET END OF CURRENT LINE_^1UN4_"LDA*_!(UN30)_#GET WORD FROM BUFFER_^1_%TRA_"Q_^1_%SQM_"1_^1_%JMP*_!UN6_^1€€_%QLS_"1_^1_%SQM_"UN6_#NOT HANDPRINT SKIP_^1_%RAO-_!INPTR,I_#INCREM. POINTER TO NEXT WORD_^1_%LDQ-_!FSPNED,I_#IS FLDSEP CALLING_^1_%SQN_"1_#YES, CHECK HCHAR WORD_^1_%JMP*_!HPCONV_#NO, CONTINUE_^1_%RTJ*_!CKSEPR_#GO CHECK HCHAR FLD. ID. OR FLD SEP._^1_%JMP*_!UN13_#YES, REPLACE WITH CONTENTS OF FLDPRM_^1_%JMP*_!(UNPACK)_#NO, RETURN TO FLDSEP--NO CONVERSION_^1UN6_"AND-_!CHARSW,I_#MASK €€CHAR._^1_%TRA_"Q_^1_%LDA-_!CHARSW,I_#WAS LOWER CHAR. JUST PICKED UP?_^1_%SAM_"UN8_#NO_^1_%RAO-_!INPTR,I_#YES, INCREM. TO NEXT WORD_^1_%JMP*_!UN10_^1UN8_"QLS_"8_#SHIFT UPPER CHAR. TO BOTTOM HALF_^1UN10_!EOR-_!XFFFF,I_#REVERSE CHAR. MASK SWITCH_^1_%STA-_!CHARSW,I_^1_%TRQ_"A_#WAS CHAR. = ZERO = FILL_^1_%SAN_"UN12_#NO_^1_%JMP*_!UN2_#YES - GO GET ANOTHER_^1UN12_!SUB-_!X00FF,I_"IS IT A F€€IELD IDENTIFIER?_^1_%SAN_"UN14_$NO, RESTORE CHARACTER_^1UN13_!LDA-_!FLDPRM,I_)YES, RETURN FS CODE_^1_%JMP*_!(UNPACK)_"EXIT_^1UN14_!TRQ_"A_%RESTORE ORIGINAL CHARACTER_^1_%JMP*_!(UNPACK)_^1UN30_!NUM_"0_^1**************_^1CKSEPR NUM_"0_^1_%TRA_"Q_#SAVE CONTENTS_^1_%ALS_"2_#HCHAR FIELD ID_^1_%SAM_"FMARK_#YES, EXIT_^1_%TRQ_"A_#NO, RESTORE A_^1_%AND*_!SEVEN_#MASK IT_^1_%INA_"-2_#HCHAR FI€€ELD SEP_^1_%SAZ_"1_#YES EXIT_^1_%RAO*_!CKSEPR_#NO, INCREASE RETURN ADDRESS_^1FMARK JMP*_!(CKSEPR)_^1SEVEN NUM_"7_^1***********_^1***********_^1HPCONV STA-_!ASAVE,I_#SAVE HANDPRINT WORD_^1_%RTJ*_!HPADDR_#GET A HANDPRT DEFINITION_^1HP4_"LDA-_!ASAVE,I_#GET HANDPRT CHAR_^1_%RTJ*_!CKSEPR_#GO CHECK HCHAR ID. OR FLD. SEP._^1_%JMP*_!UN13_#RETURN A FS_^1_%LDA-_!ASAVE,I_#GET CHAR. AGAIN_^1€€_%LDQ-_!MSKHLD,I_#AND MASK_^1_%LAQ_"A_#TO GET SPECIFIED CHAR_^1_%STA-_!ASAVE,I_^1_%QRS_"2_#USE BITS 2-3 OF Q AS INDEX_^1_%ENA_"3_^1_%LAQ_"Q_^1_%LDA-_!SHFTAB,B_#GET CORRECT SHIFT_^1_%STA*_!HP8_^1_%LDQ-_!ADDTAB,B_#GET CONV. TABLE ADR._^1_%LDA-_!ASAVE,I_#GET CHAR. CODE_^1HP8_"ARS_"0_#MODIFIED SHIFT INSTRUCTION_^1_%AAQ_"A_^1_%STA*_!HP9+1_^1HP9_"LDA+_!0_#MODIFIED LOAD_^1_%JMP*_!(UNPACK)€€_#RETURN TO CALLER_^1************_^1************_^1HPADDR NUM_"0_^1_%LDQ-_!ENDSRH,I_#HAS END OF HCHAR TABLE BEEN FOUND_^1_%SQZ_"1_#NO, CONTINUE_^1_%JMP*_!(HPADDR)_#YES, EXIT_^1_%LDA-_!ASAVE,I_#GET SAVE HANDPRINT CHARACTER_^1_%RTJ*_!CKSEPR_#GO CHECK HCHAR FIELD ID. OR FIELD SEP._^1_%JMP*_!CKTABL_#ITS A FS., GO CHECK HCHAR TABLE_^1_%LDA-_!HPFLD,I_#IS HPFLD SET_^1_%SAZ_"1_#NO, CONTINU€€E_^1_%JMP*_!(HPADDR)_#YES, EXIT_^1HA3_"RTJ*_!GTCODE_#GO GET A HCHAR CODE_^1_%SQN_"HA4_#IS IT FLD. SEP, NO_^1SETFLD RAO-_!HPFLD,I_#YES, SET HPFLD ON_^1_%JMP*_!(HPADDR)_#EXIT_^1HA4_"LDA-_!MSKTBL,B_#GET PROPER HCHAR MASK_^1_%STA-_!MSKHLD,I_#SAVE IT FOR HPCONV_^1_%JMP*_!(HPADDR)_#EXIT_^1CKTABL LDA-_!HPFLD,I_#IS HPFLD SET_^1_%SAZ_"RESET_#NO_^1_%CLR_"A_#TURN FLAG_^1_%STA-_!HPFLD,I_#OFF_^€€1HA5_"LDA-_!FLDPRM,I_#GET FLD. SEP. CODE_^1_%JMP*_!(UNPACK)_#EXIT_^1RESET RTJ*_!GTCODE_#GET HCHAR CODE_^1_%SQN_"1_#IS IT A FLD. SEP_^1_%JMP*_!HA5_#YES_^1_%JMP*_!RESET_#NO_^1GTCODE ADC_"0_^1_%LDA-_!HPTR,I_#HAS HCHAR ADDRESS BEEN FOUND_^1_%SAN_"HA6_#YES SKIP_^1_%LDA-_!TABPTR,I_#NO, SET HPTR TO CURRENT TABLE ADDRESS_^1_%STA-_!HPTR,I_^1_%JMP*_!HA8_^1HA6_"CLR_"Q_#GET NEXT_^1_%LDA-_!WDH€€LD,I_#HCHAR CODE_^1HA7_"LLS_"2_^1_%STA-_!WDHLD,I_^1_%LDA*_!CTHP_"HAS END_^1_%INA_"-6_$OF HCHAR STSTEMENTS_^1_%SAZ_"HA75_!BEEN FOUND, YES_^1_%INA_"7_"NO_^1_%STA*_!CTHP_^1_%JMP*_!HA25_^1HA75_!RAO-_!HPTR,I_^1_%LDA-_!HPTR,I_^1HA8_"STA*_!HA30_^1_%SUB-_!DATAX,I_^1_%SAM_"HA10_^1HA9_"RAO-_!ENDSRH,I_^1_%JMP*_!(HPADDR)_^1HA10_!CLR_"Q_^1_%LDA*_!(HA30)_!IS IT AN LREC_^1_%SAP_"HA20_"NO_^1_%ALS€€_"3_!IS IT_^1_%SAM_"HA20_!HCAR, YES_^1_%JMP*_!HA9 NO, AN LREC_^1HA20_!LDA*_!(HA30)_!IS STSTEMENT_^1_%LLS_"4_"A CONTINUATION_^1_%SQZ_"HA22_!YES_^1_%INQ_"-9 IS IT_^1_%SQZ_"HA22 OTHER THAN_^1_%JMP*_!HA24 HCAR, YES_^1HA22_!STQ*_!CTHP_!YES_^1_%STA-_!WDHLD,I_^1_%JMP*_!HA7_^1HA24_!LDA-_!HPTR,I_^1_%INA_"6_^1_%STA-_!HPTR,I_^1_%JMP*_!HA8_^1HA25_!SQN_"HA27_^1_%LDA*_!PREVCH_#WAS PREVIOUS C€€HARACTER_^1_%SAM_"HA29_!ALSO A FLD.SEP, YES_^1_%SET_"A_#NO, SET INDICATOR_^1HA27_!STA*_!PREVCH_^1_%JMP*_!(GTCODE)_^1HA29_!STQ*_!PREVCH_!CLEAR PREV. CHAR. INDICATOR_^1_%JMP*_!HA9_#AND SET END OF TABLE CONDITION_^1HA30_!NUM_"0_^1CTHP_!NUM_"0_^1PREVCH NUM_"0_^1**********************************************************************_^1*****************************************************€€*****************_^1FLDSEP NOP_"0_#RETURN ADDRESS_^1_%RAO-_!FSFLAG,I_#SET FIELD SEPARATOR FLAG ON_^1_%STA-_!ASAVE,I_#SAVE CHARACTER IN A_^1_%LDQ-_!EXIND,I_#IS EXIT-INDICATOR ON?_^1_%SQZ_"CKFOR2-*-1_#NO, CONTINUE_^1PREXIT LDA-_!ASAVE,I_#YES, GET THE CHARACTER INTO A_^1_%JMP*_!(FLDSEP)_#EXIT TO CALLER_^1CKFOR2 LDA-_!LVL2,I_#GET ADDRESS OF CURRENT LEVEL DATA STATEMENT_^1_%INA_"4_#INCR€€EMENT IT TO NEXT ENTRY_^1_%STA-_!LVL2,I_#SAVE IT_^1_%STA*_!DATHD2_^1_%LDA*_!(DATHD2)_#GET CONTENTS OF DATA ENTRY_^1_%ARS_"4_^1_%ENQ_"$F_^1_%LAQ_"A_^1_%INA_"-2_#IS THIS A 2-LEVEL DATA STATEMENT?_^1_%SAZ_"CHDEF2-*-1_#YES - CONTINUE_^1_%RAO-_!EXIND,I_#NO, SET EXIT INDICATOR_^1_%JMP*_!PREXIT_^1CHDEF2 ENQ_"2_^1_%LDA*_!(DATHD2),Q_^1_%AND-_!X00FF,I_#GET DATA LENGTH_^1_%INA_"-2_#IS THIS A €€FIELD DEFINITION OF 2?_^1_%SAZ_"1_#YES, CONTINUE_^1_%JMP*_!PREXIT_#NO_^1_%RAO-_!FSPNED,I_#SET FS FLAG FOR NEXT LINE_^1UNPAGN RTJ_"UNPACK_#GO GET A CHARACTER_^1_%SUB-_!FLDPRM,I_#IS IT A FIELD SEPARATOR?_^1_%SAZ_"1_#YES, GO TO EXIT_^1_%JMP*_!UNPAGN_#NO, GO GET ANOTHER CHARACTER_^1_%STA-_!FSPNED,I_$CLEAR FS FLAG_^1_%LDA-_!FLDPRM,I_"RETURN FS CODE_^1_%JMP*_!(FLDSEP)_"EXIT_^1DATHD2 NUM_€€"0_#HOLD AREA_^1***************************************************************_^1***************************************************************_^1PACK_!NUM_"0_^1_%TRA_"Q_#SAVE CHAR. OR SWITCH IN Q_^1_%LDA-_!FWAPTR,I_#FIRST TIME THRU, FWAPTR_^1_%SUB-_!DINPX,I_#MUST BE RESET_^1_%SAP_"PA14_^1_%RAO-_!FWAPTR,I_^1PA14_!SQN_"PA20_#ZERO INPUT MEANS DELETE FIELD_^1_%LDA-_!FLDPTR,I_#SO RES€€ET PACKING POINTER TO LAST FLD SEP._^1_%TRA_"Q_^1_%AND_"=N$7FFF_#AFTER STRIPPING UPPER/LOWER INDIC._^1_%STA-_!FWAPTR,I_^1_%SQM_"PA16_#SKIP - LAST FLD SEP WAS UPPER CHAR_^1_%LDA-_!X00FF,I_#ELSE SET LOWER CHAR IN SWITCH_^1_%JMP*_!PA18_^1PA16_!LDA-_!XFF00,I_#SET UPPER CHAR IN SWITCH_^1PA18_!STA-_!PACKSW,I_^1_%CLR_"A_^1_%STA-_!CBCTR,I_#CLEAR CONSECUTIVE BLANKS COUNTER_^1_%JMP*_!PA31_^1€€PA20_!TRQ_"A_#GET CHAR._^1_%SUB-_!FLDPRM,I_#IS IT = USERS FLD SEP?_^1_%SAN_"PA22_#NO_^1_%JMP*_!PA40_#YES_^1PA22_!TRQ_"A_#GET CHAR_^1_%INQ_"-$20_#IS IT = SPACE?_^1_%SQN_"PA26_#NO_^1_%RAO-_!CBCTR,I_#YES, INCREM. CONSECUTIVE BLANKS CTR._^1_%JMP*_!PA28_#GO STORE CHAR._^1PA26_!CLR_"Q_^1_%STQ-_!CBCTR,I_#CLR CONSEC. BLANKS CTR._^1PA28_!LDQ-_!PACKSW,I_#ARE WE GOING TO STORE LOWER CHAR.?_^1€€_%SQP_"PA30_#YES_^1_%ALS_"8_#NO, SHIFT CHAR. TO UPPER HALF A-REG._^1PA30_!TRA_"Q_#SAVE CHAR. IN Q_^1_%LDA-_!FWAPTR,I_^1_%STA*_!PAPTR_#GET WORD ADDR._^1_%LDA-_!XFFFF,I_^1_%EOR-_!PACKSW,I_#SET A-REG. TO GET HALF OF WORD_^1_%AND*_!(PAPTR)_#TO BE COMBINED WITH CURRENT CHAR._^1_%AAQ_"A_^1_%STA*_!(PAPTR)_#STORE WORD_^1PA31_!LDA-_!PACKSW,I_"UPPER CHARACTER JUST STORED?_^1_%SAM_"PA32_#YES_€€^1_%RAO-_!FWAPTR,I_#NO, INCREM. TO NXT WORD_^1PA32_!EOR-_!XFFFF,I_^1_%STA-_!PACKSW,I_#REVERSE CHAR. MASK SWITCH_^1_%JMP*_!(PACK)_,EXIT_^1PAPTR NUM_"0_^1PA40_!LDA-_!FLDPTR,I_#SAVE PREVIOUS FLD START ADDR._^1_%STA-_!OLDFLD,I_^1PA42_!LDA-_!CBCTR,I_#ANY TRAILING BLANKS TO DELETE?_^1_%SAZ_"PA46_#NO_^1_%INA_"-1_#YES_^1_%STA-_!CBCTR,I_#DECREM. CONSEC. BLANKS COUNT_^1_%LDA-_!PACKSW,I_#WAS€€ LAST BLANK STORED IN UPPER HALF?_^1_%SAP_"PA44_#YES_^1_%LDQ-_!FWAPTR,I_#NO, DECREM. WORD POINTER_^1_%INQ_"-1_^1_%STQ-_!FWAPTR,I_^1PA44_!EOR-_!XFFFF,I_#REVERSE CHAR. MASK SWITCH_^1_%STA-_!PACKSW,I_^1_%JMP*_!PA42_#GO CHK COUNTER FOR MORE BLANKS_^1PA46_!LDA-_!FWAPTR,I_^1_%LDQ-_!PACKSW,I_#SET FLDPTR TO ADDR OF WHERE FLD SEP WILL BE_^1_%SQP_"PA48_#STORED AND TURN ON BIT 15 IF UPPER HAL€€F_^1_%EOR_"=N$8000_^1PA48_!STA-_!FLDPTR,I_^1_%LDQ-_!FSTPTR,I_#GET ADDR. OF FLD SEP ADDR. TBL_^1_%INQ_"-1_#STORE ADDR. INTO TBL_^1_%EOR_"=N$8000_!SET BIT 15 ON_^1_%STA-_!1,Q_^1_%RAO-_!FSTPTR,I_#INCREM. FLD SEP TBL ADDR._^1_%RAO-_!BLKCNT+1,I_"INCREMENT NO. OF FIELD SEPS._^1_%CLR_"A_^1_%STA-_!2,Q_#CLR NXT WORD IN FLD SEP ADDR. TBL_^1_%LDA-_!FLDPRM,I_"GET USER FLD SEPARATOR CODE_^1_%JM€€P*_!PA26_'GO STORE IT_^1****************************************************************_^1****************************************************************_^1FINCK NUM_"0_^1_%CLR_"A_^1_%STA-_!ONETIM,I_#CLR FIRST TIME THRU SWITCH_^1_%LDA-_!XFF00,I_^1_%STA-_!CHARSW,I_#SET FOR UPPER CHAR._^1_%LDA-_!DINPX,I_^1_%STA-_!INPTR,I_#SET POINTER TO START OF INPUT_^1FIN4_!STA*_!FIN30_#SAVE FOR€€ CHAR. PICKUP_^1_%SUB-_!FWAPTR,I_#PACK POINTER = CURRENT?_^1_%SAN_"FIN14_#NO - KEEP GOING_^1_%LDA-_!CHARSW,I_#STILL HAVE HALF WORD TO PROCESS?_^1_%SUB-_!PACKSW,I_^1_%SAN_"FIN14_#YES - CONTINUE_^1_%LDA-_!ONETIM,I_#FIRST TIME THRU?_^1_%SAN_"FIN12_#NO_^1_%RAO_"BLNUSR_#YES, SET BLANK RECORD_^1_%STA_"INCUSR_#CLR OTHER INDICATORS_^1FIN10 STA_"FLDMK1_^1FIN12 JMP*_!(FINCK)_#EXIT_^1FIN14 €€ RAO-_!ONETIM,I_#SET SWITCH FOR FIRST TIME DONE_^1_%LDA*_!(FIN30)_#GET WORD OF INPUT_^1_%AND-_!CHARSW,I_#GET CHAR._^1_%LDQ-_!CHARSW,I_#UPPER CHAR.?_^1_%SQP_"FIN16_#NO_^1_%ALS_"8_#SHIFT TO BOTTOM OF A-REG._^1FIN16 INA_"-$40_#IS CHAR. = REJECT?_^1_%SAN_"FIN18_#NO_^1_%RAO_"RJRUSR_"SET REJECT IN RECORD INDICATOR_^1_%JMP*_!FIN10_#GO TO EXIT AND CLR FLDMK1_^1FIN18 INA_"$40_#RESTORE CHA€€R._^1_%SUB-_!FLDPRM,I_#IS IT = USERS FLD. SEP._^1_%SAZ_"FIN20_#YES_^1_%CLR_"A_^1_%STA_"FLDMK1_#NO, CLR ONLY-FLD-MKS INDIC._^1FIN20 SQM_"FIN22_#SKIP - UPPER CHAR. JUST PROCESSED_^1_%RAO-_!INPTR,I_#NO, LOWER. INCREM WORD PTR_^1FIN22 TRQ_"A_^1_%EOR-_!XFFFF,I_^1_%STA-_!CHARSW,I_#REVERSE CHAR. MASK SWITCH_^1_%LDA-_!INPTR,I_#GET CURRENT ADDR._^1_%JMP*_!FIN4_#AND GO LOOK AT NEXT CHAR._^€€1FIN30 NUM_"0_^1ENDATA LDA-_!FWAPTR,I_#GET CURRENT PACK POINTER ADDRESS_^1_%INA_"1_#INCREMENT IT BY 1_^1_%STA-_!INPTR,I_#PUT IT IN CURRENT UNPACK POINTER_^1_%LDQ_"READ55_^1_%INQ_"-2_^1_%STQ*_!ADHOLD_^1_%LDQ*_!(ADHOLD)_$GET DATA TABLE ADDRESS_^1_%LDA-_!2,Q_*WORD 3_^1_%AND_"=N$0FFF_'NUMBER OF CHARACTERS_^1_%ARS_"1_-WORDS_^1_%ADD-_!DINPX,I_^1_%SUB-_!FWAPTR,I_$CHECK FOR OVERFLOW_^1_%S€€AP_"1_^1_%RAO-_!NXTOVR,I_$YES_^1_%CLR_"Q_#SET Q = 0 FOR RETURN_^1_%ENA_"-1_^1_%STA*_!CALLID_$SET CALL INDICATOR_^1_%LDA-_!ADVCT,I_#GET CONTENTS OF ADVCT INTO A FOR ADV55_^1_%RTJ*_!ADV55_%GO ADVANCE THE PAGE_^1_%JMP_"CKREAD_#GET ANOTHER DATA LINE_^1ADHOLD NUM_"0_^1CALLID NUM_"0_^1****************************************_^1****************************************_^1ADV55 NOP_"0_#RET€€URN ADDRESS_^1_%STA*_!SKSAVE_%SAVE SKIP COUNT_^1_%LDA_"=XTABL55_#SET BASE ADDRESS OF TABLES IN I REGISTER_^1_%STA-_!$FF_^1_%STQ-_!QSAVE,I_#SAVE CONTENTS OF Q_^1_%LDA*_!ADV55_$GET ADDRESS OF CALLER_^1_%SUB_"=XFLADR_#IS FLA CALLING ?_^1_%SAZ_"MSKINC_$YES_^1_%LDA_"SIXLIN_!ARE 6 LINES/IN SPECIFIED?_^1_%SAZ_"MSKINC_!NO, GET NORMAL PAGE INCREMENT_^1_%ENA_"3_!YES, SET CNT = 3_^1_%STA*_!SK€€SAVE_!SAVE IT TEMPORARILY_^1_%ENA_"$20_!SET BIT 5 ON FOR MINI-STEP_^1_%JMP*_!SETCRC GO SET UP CRC_^1MSKINC LDQ_"=XDFOR_!GET ADDRESS OF FORM TABLE_^1_%LDA-_!3,Q_^1_%ALS_"6_*GET "INC" PARAMETER_^1_%AND_"=N$C0_#MASK IT_^1SETCRC INA_"3_!SET CRC = 3 FOR POSITION REQUEST_^1_%STA-_!REQWD1,I_#STORE WORD IN PARAM. WORD 1 OF REQUEST_^1_%LDA_"LUIN_#GET LOG. UNIT NO. FROM COMMON STORAGE_^1_%S€€TA-_!REQLU,I_#PUT IT IN LOG. UNIT WORD OF REQUEST_^1ADVEX LDA*_!SKSAVE_$SKIP COUNT = 0?_^1_%SAN_"3_/NO,CONTINUE_^1_%ENA_"0_^1_%STA*_!CALLID_)CLEAR FLAG_^1_%JMP*_!(ADV55)_#YES, EXIT_^1_%INA_"-$F_#SKIP COUNT 714_^1_%SAM_"SETSKP-*-1_#NO_^1_%RAO-_!LLCIND,I_#YES, SET ON LLC-DATA INDICATOR FOR NEXT READ_^1_%STA*_!SKSAVE_$SAVE SUBTRACT RESULT_^1_%LDA_"=N$0F00_#SET CNT = 15 IN ADVANCE REQ€€UEST_^1_%STA-_!REQWD2,I_#STORE IT IN PARAM. WORD 2 OF REQUEST_^1_%JMP*_!ADVANC_#GO ADVANCE PAGE_^1SETSKP INA_"$F_#RESTORE SKIP COUNT_^1_%ALS_"8_#POSITION IT_^1_%STA-_!REQWD2,I_#PUT IT IN PARAM. WORD 2 OF REQUEST_^1_%CLR_"A_^1_%STA*_!SKSAVE_$CLEAR SKSAVE FOR NEXT TIME THRU_^1ADVANC LDA*_!CALLID_^1_%SAN_"1_^1_%JMP*_!NOMIR_#TEST CALLER_^1_%ENA_"0_^1_%STA*_!CALLID_^1_%LDA-_!ENREAD,I_"T€€EST END RECORD_^1_%SAZ_"NOTEND_^1_%LDA-_!ONELRC,I_#TEST ONE LREC FLAG_^1_%SAP_"1_^1_%JMP*_!NOMIR_^1_%LDA-_!LMCNXT,I_"YES, GET LMC FROM LREC_^1LACOR EOR-_!REQWD2,I_^1_%STA-_!REQWD2,I_^1_%JMP*_!NOMIR_^1NOTEND LDA-_!EORPRM,I_^1_%SAZ_"1_^1_%JMP*_!NOMIR_#NO LOOK AHEAD ON EOR_^1_%LDA-_!LINPTR,I LINE LOOK AHEAD_^1_%INA_"6_^1_%SUB-_!DATAX,I_$TEST FOR END_^1_%SAZ_"LALN_^1_%LDQ-_!LINPTR,I_€€^1_%INQ_"5_^1_%LDA-_!1,Q_^1_%ALS_"2_$CHECK FOR AREA_^1_%SAM_"LAAR_^1LALN_!LDQ-_!LINPTR,I_%NO - USE LINE LMC_^1_%LDA-_!1,Q_^1LALN1 AND-_!X00FF,I_^1_%INA_"-$A_^1_%JMP*_!LACOR_^1LAAR_!LDA-_!3,Q USE AREA LMC_^1_%ARS_"8_^1_%JMP*_!LALN1_^1NOMIR RTJ-_!REQ55,I_$ADVANCE PAGE_^1_%RTJ*_!STAT55_#TAKE 955 STATUS_^1_%LDA-_!STATHD,I_#NO, GET 955 STATUS_^1_%ALS_"1_#DOCUMENT NO SORT?_^1_%SAM_"1_#€€YES, GO SET EJECT_^1_%JMP*_!ADVEX_#NO, GO SEE IF SKIP COUNT EXHAUSTED_^1_%RAO_"EJTUSR_$SET EJTUSR INDICATOR ON_^1CHKEXT LDA-_!QSAVE,I_#DETERMINE EXIT PATH_^1_%SAP_"1_^1_%JMP*_!(ADV55)_#EXIT TO CALLER_^1_%JMP_"USRIND_#GO CHECK USER INDICATORS_^1SKSAVE NUM_"0_*HOLDS SKIP COUNT_^1****************************************_^1****************************************_^1EJP55 NOP_"0_'RETUR€€N ADDRESS_^1_%LDQ_"=XTABL55_#SET BASE ADDRESS OF TABLES IN I REGISTER_^1_%STQ-_!$FF_^1_%SAP_"PRIM_2TEST SORT_^1_%SUB_"=N$8001_^1_%ENQ_"$60_3SORT SECONDARY_^1_%SAN_"2_-TEST PRINT_^1_%LDQ_"=N$E0_)PRINT SN_^1_%JMP*_!SRTSEC_^1PRIM_!SUB_"=N$1_^1_%ENQ_"$20_3SORT PRIMARY_^1_%SAN_"2_-TEST PRINT_^1_%LDQ_"=N$A0_)PRINT SN_^1SRTSEC STQ-_!REQWD2,I_#PUT WORD IN PARAMETER WORD 2 OF MECH. RQST_^1_€€%ENA_"4_^1_%STA-_!REQWD1,I_(SET CRC=4_^1_%ENA_"1_*SET TOP-OF-PAGE INDICATOR_^1_%STA-_!TOPIND,I_^1_%CLR_"A_^1_%STA_"EJTUSR_'CLEAR EJECT FLAG_^1_%STA-_!LLCIND,I_'CLEAR LINE-LOCATE ON DATA INDICATOR_^1_%RTJ-_!REQ55,I_#GO EJECT THE PAGE_^1_%JMP*_!(EJP55)_'EXIT TO CALLER_^1****************************************_^1****************************************_^1STAT55 NOP_"0_#RETURN ADDRESS€€_^1_%LDA-_!REQLU,I_#GET LOGICAL UNIT NUMBER_^1_%AND_"=N$FFF_(CCN1755R5551-001_^1_%STA*_!STATLU_#STORE IT IN STATUS REQUEST_^1_%RTJ-_!($F4)_#TAPE CURRENT 955 STATUS_^1_%ADC_"$0600_^1STATLU NUM_"0_^1_%NUM_"0_^1_%LDQ_"=XTABL55_#GET TABLE ADDRESS_^1_%STA-_!STATHD,Q_#SAVE 955 STATUS_^1_%LDA-_!$FF_'I CONTAINS LWA READ INTO_^1_%INA_"1_(MAKE IT LWA+1_^1_%STA-_!IHOLD,Q_!STORE RESULT IN IHOL€hD_^1_%STQ-_!$FF_#SET BASE ADDRESS OF READ TABLES_^1EXSTAT JMP*_!(STAT55)_#EXIT TO CALLER_^1_%END_"DZ_^__hPR15 CSY/ P€1_%NAM R15_*915 READ DRAFT 5.1 12/02/74_^1_%ENT_"READ1X,EJP15,ADV15,SERV15_^1_%EXT_"EOFUSR,RJRUSR,BUFUSR,EJTUSR,BLNUSR,FLDMK1_^1_%EXT_"INCUSR,DELUSR,DCTL,DATA,DENV,DINP,JAMUSR_^1_%EXT_"LOCUSR_^1_%DAT_"R15DAT(5)_^1_%ORG_"R15DAT_^1_%ADC_"ADV15_^1_%ADC_"EJP15_^1_%ADC_"SERV15_^1_%ADC_"THRU13+3_^1_%ADC_"TAB021_^1_%ORG*_^1*****************************************************************€€*******_^1***_]_^1***_]_^1*** THIS IS THE REQUEST ROUTINE TO THE DRIVER.THE DRIVER S REPLY IS_^1*** CHECKED AND THE PROPER USER"S INDICATORS ARE SET IF NEED_^1***_]_^1***_]_^1REQST ADC_"0_^1TAB001 NUM_"$54F4_%JUMP RETURN TO DISLATCHAR_^1TAB002 NUM_"$0400_%REQUEST CODE AND PRIORITY_^1TAB003 ADC_"CMP1_'COMPLETION ADDRESS_^1TAB004 NUM_"$0000_%LOCATION FOR THREAD_^1TAB005 NUM_"$000A€€_%LOGICAL UNIT_^1TAB006 NUM_"$0000_%NUMBER OF WORDS_^1TAB007 NUM_"$0000_%FWA IN BUFFAR_^1_%LDA*_!TAB004_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%RTJ*_!(CMP1+1)_"SET I REGISTER_^1_%LDA-_!REQST5,I_"CHECK FOR EOF_^1_%AND-_!HE000,I_^1_%SAN_"1_*THERE IS SOMETHING WRONG TO INVESTIGATE_^1EXRQST JMP*_!(REQST)_#RETURN_^1_%SAP_"NOJAM-*-1_!NO JAMMING IN SIGHT_^1YESJAM RTJ+_!CLRFLG_$CLEAR ALL USER"S INDIC€€ATORS_^1_%RAO_"JAMUSR_$SET JAMMING USER"S INDICATOR_^1_%JMP*_!BOTH_'SET ALSO BLANK RECORD INDICATOR AND EXIT_^1NOJAM SUB-_!H2000,I_#CHECK FOR END OF FILE_^1_%SAZ_"1_*END OF FILE BUTTON WAS DEPRESSED_^1_%JMP*_!EXRQST_$EXIT.NOTHING WRONG FOR NOW_^1_%RTJ*_!(YESJAM+1) CLEAR INDICATORS_^1_%RAO_"EOFUSR_$SET END OF FILE USER"S INDICATOR_^1BOTH_!RAO_"BLNUSR_$SET ALSO BLANK RECORD USER"S €€INDICATOR_^1_%JMP*_!EXRQST_!EXIT_^1CMP1_!RTJ+_!GETI_'SET I REGISTER_^1_%RTJ-_!($F4)_%EXIT_^1_%NUM_"$0A00_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1TAB008 NUM_"$0001_^1TAB009 NUM_"$0002_^1TAB010 NUM_"$000F_^1TAB011 NUM_"$003F_^1TAB012 NUM_"$007F_^1TAB013 NUM_"$00FF_^1TAB014 NUM_"$0100_^1TAB015 NUM_"$0200_^1TAB016 NUM€€_"$0300_^1TAB017 NUM_"$0400_^1TAB018 NUM_"$0F00_^1TAB019 NUM_"$2000_^1TAB020 NUM_"$4000_^1TAB021 NUM_"$7FFF_^1TAB022 NUM_"$8000_^1TAB023 NUM_"$E000_^1TAB024 NUM_"$FF00_^1TAB025 NUM_"$0000_%PBEG. BEGINNING PAGE AREA FOR CLEARING_^1TAB026 NUM_"$0000_%ASGNPT. ADDRESS OF ASSIGN TABLE_^1TAB027 NUM_"$0000_%TOP. ZERO MEANS TOP OF PAGE_^1TAB029 NUM_"$0000_%PENV1. WORD ONE OF PAGE DESCRIP€€TIOJ_^1TAB030 NUM_"$0000_%PENV2. MINISTEP OPTIOJ IF NO ZERO_^1TAB031 NUM_"$0000_%SKCNT. SKIP COUNT_^1TAB032 NUM_"$0000_%SKAGN. SKIP AGAIN IF SET_^1TAB033 NUM_"$0000_%MAX. MAXIMUM NUMBER OF LINES_^1TAB034 NUM_"$0000_%LINE. NUMBER OF LINES SO FAR_^1TAB035 NUM_"$0000_%ENDP. END OF PAGE IF SET_^1TAB036 NUM_"$0000_%SECSRT. SORT TO SECONDARY IF SAT_^1TAB037 NUM_"$0000_%RBEG. BEGI€€NNING RECORD AREA FOR CLEARING_^1TAB038 NUM_"$0000_%ENVNPT. POINTER TO ENVIRONMENT TABLE_^1TAB039 NUM_"$0000_%RENV1. WORD ONE OF RECORD DESCRIPTION_^1TAB040 NUM_"$0000_%FENV1. WORD ONE OF FIELD DESCRIPTION_^1TAB041 NUM_"$0000_%FFLAG. FIELD PRESENCE FLAG_^1TAB028 NUM_"$0000_%SERFLG. SERVO ROUTINE IN ACTION IF SET._^1TAB042 NUM_"$0000_%SERCNT. SERVO COUNTER_^1TAB043 NUM_"$0000_%€€BFWA. UNPACKED BUFFER POINTER_^1TAB044 NUM_"$0000_%SBFWA. SAVED CONTENTS OF ABOVE LOCATION_^1TAB045 NUM_"$0000_%PFWA. PACKED BUFFER POINTER_^1TAB046 NUM_"$0000_%SPFWA. SAVED CONTENTS OF ABOVE LOCATION_^1TAB047 NUM_"$0000_%AREAX. POINTER FOR GET A CHARACTER ROUTINE_^1TAB048 NUM_"$0000_%PTFLD. ADDRESS TO STOP CURFLD_^1TAB049 NUM_"$0000_%SPTFLD. SAVED CONTENTS OF ABOVE LOCATION€€_^1TAB050 NUM_"$0000_%FFSOL. FIRST FIELD SEPARATOR OF LINE_^1TAB051 NUM_"$0000_%SFFSOL. SAVED CONTENTS OF ABOVE LOCATION_^1TAB052 NUM_"$0000_%CURFLD. LAST FIELD SEPARATOR ADDRESS_^1TAB053 NUM_"$0000_%SCRFLD. SAVED CONTENTS OF ABOVE LOCATION_^1TAB054 NUM_"$0000_%PMDF. DATA-FIELD SEPARATOR SWITCH FLAG_^1TAB055 NUM_"$0000_%SPMDF. SAVED CONTENTS OF ABOVE LOCATION_^1TAB056 NUM_"$0€€000_%PMRBA. HOLDS ADDRESS OF CURRENT 2-LEVEL DATA_^1TAB057 NUM_"$0000_%SPMRBA. SAVED CONTENTS OF ABOVE LOCATION_^1TAB058 NUM_"$0000_%PMDBL. NON ZERO MEANS NO MORE DOUBLE F.S._^1TAB059 NUM_"$0000_%SPMDBL. SAVED CONTENTS OF ABOVE LOCATION_^1TAB060 NUM_"$0000_%PM2LV. NON ZERO MEANS NO 2-LEVEL STATEMENTS_^1TAB061 NUM_"$0000_%SPM2LV. SAVED CONTENTS OF ABOVE LOCATION_^1TAB062 NUM_"€€$0000_%CHAR. CHARACTER BEING WORKED_^1TAB063 NUM_"$0000_%NXTOVR. WARNING SWITCH FOR BUFFER OVERFLOW_^1TAB064 NUM_"$0000_%SPACE. CONSECUTIVE SPACE COUNTER_^1TAB065 NUM_"$0000_%SNOFS. SAVED CONTENTS OF NOFS_^1TAB066 NUM_"$0000_%FSEP. HOLDS FIELD SEPARATOR SYMBOL_^1TAB067 NUM_"$0000_%PCR. PREVIOUS CHARACTER READ_^1TAB068 NUM_"$0000_%NUMCHR. NUMBER OF NON F.S. CHARACTERS MET_^1T€€AB069 NUM_"$0000_%USRFSF. NUMBER OF FIELD SEPARATORS MET_^1TAB69A NUM_"$0000_%TOTCHR. TOTAL CHAR.IN RECD (NO F.S.)_^1TAB69B NUM_"$0000_%TOTFS. NUMBER OF F.S. IN RECORD_^1TAB070 NUM_"$0000_%REND. LAST RECORD LOCATION FOR CLEARING_^1TAB071 NUM_"$0000_%FWACTL. ADDRESS OF CONTROL TABLE_^1TAB072 NUM_"$0000_%FWAINP. F.W.A. OF INPUT BUFFER_^1TAB073 NUM_"$0000_%GOODRD. SUCCESSFUL REA€€DING OF A FIELD COUNTER_^1TAB074 NUM_"$0000_%STOK1L. STOCK FORM IS SET_^1TAB075 NUM_"$0000_%STOKFM. MULTILINE STOCK FORM RECORD IS SET_^1TAB076 NUM_"$0000_%SERVSW. IF SET MEANS SERVO ALREADY USED_^1TAB077 NUM_"$0000_%EORMET. IF SET MEANS JUST A RECORD IS COMPLET_^1TAB078 NUM_"$0000_%CORD. MIRROR COORDINATE_^1TAB079 NUM_"$0000_%BKUP. COUNTER FOR BACKUP ROUTINE_^1TAB080 NUM_"$0€€000_%P0. PAGE, RECORD, FIELD FLAG_^1TAB081 NUM_"$0000_%P1. PAGE, RECORD, FIELD FLAG_^1TAB082 NUM_"$0000_%P2. SCAN HEIGHT_^1TAB083 NUM_"$0000_%P3. SKIP PARAMETER_^1TAB084 NUM_"$0000_%P4. RIGHT SCAN LIMIT_^1TAB085 NUM_"$0000_%P5. LEFT SCAN LIMIT_^1TAB086 NUM_"$0000_%P6. LINE LOCATE COORDINATE_^1TAB087 NUM_"$0000_%P7. FORM NUMBER_^1TAB088 NUM_"$0000_%P8. FORM NUMBER_^1TAB089 €€NUM_"$0000_%P9. FORM NUMBER_^1TAB090 NUM_"$0000_%PA. CONTINUOUS FORM FLAG_^1TAB091 NUM_"$0000_%PB. MAXIMUM NUMBER OF LINES_^1TAB092 NUM_"$0000_%TEMPOR. TEMPORARY LOCATION_^1TAB093 NUM_"$0_-BBFLG_!BUFR BUILD FLAG_^1TAB094 NUM_"$0_-FONT_"FONT (FINAL)_^1TAB095 NUM_"$0_-INTBUF INITIAL BUFFER FWA_^1TAB096 NUM_"$0_-RESBUF RESCAN BUFFER FWA_^1TAB097 NUM_"$0_-FONTP_!PAGE FONT_^1TAB09€€8 NUM_"$0_-FONTR_!RECORD FONT_^1TAB099 NUM_"$1000_'HANDPRINT BIT FOR PRE-READ_^1TAB100 NUM_"$0000_'OLCC MESSAGE FLAG_^1TAB101 NUM_"$0008 USED WITH LUN_^1****_]_^1****_]_^1************************************************************************_^1***_]_^1***_]_^1_%COM_"LUIN(1),FST(100)_^1_%COM_"NOFSX(1)_^1************************************************************************_^1**€€*_]_^1***_]_^1_%EQU_"REQST1(TAB001-REQST),REQST2(TAB002-REQST)_^1_%EQU_"REQST3(TAB003-REQST),REQST4(TAB004-REQST)_^1_%EQU_"REQST5(TAB005-REQST),REQST6(TAB006-REQST)_^1_%EQU_"REQST7(TAB007-REQST),SWITCH(TAB008-REQST)_^1_%EQU_"H02(TAB009-REQST),HF(TAB010-REQST)_^1_%EQU_"H3F(TAB011-REQST),H7F(TAB012-REQST)_^1_%EQU_"HFF(TAB013-REQST),H100(TAB014-REQST)_^1_%EQU_"H200(TAB015-REQST),H300(€€TAB016-REQST)_^1_%EQU_"H400(TAB017-REQST),HF00(TAB018-REQST)_^1_%EQU_"H2000(TAB019-REQST),H4000(TAB020-REQST)_^1_%EQU_"H7FFF(TAB021-REQST),H8000(TAB022-REQST)_^1_%EQU_"HE000(TAB023-REQST),HFF00(TAB024-REQST)_^1_%EQU_"PBEG(TAB025-REQST),ASGNPT(TAB026-REQST)_^1_%EQU_"TOP(TAB027-REQST),SERFLG(TAB028-REQST)_^1_%EQU_"PENV1(TAB029-REQST),PENV2(TAB030-REQST)_^1_%EQU_"SKCNT(TAB031-REQST),S€€KAGN(TAB032-REQST)_^1_%EQU_"MAX(TAB033-REQST),LINE(TAB034-REQST)_^1_%EQU_"ENDP(TAB035-REQST),SECSRT(TAB036-REQST)_^1_%EQU_"RBEG(TAB037-REQST),ENVNPT(TAB038-REQST)_^1_%EQU_"RENV1(TAB039-REQST),FENV1(TAB040-REQST)_^1_%EQU_"FFLAG(TAB041-REQST),SERCNT(TAB042-REQST)_^1_%EQU_"BFWA(TAB043-REQST),SBFWA(TAB044-REQST)_^1_%EQU_"PFWA(TAB045-REQST),SPFWA(TAB046-REQST)_^1_%EQU_"AREAX(TAB047-REQS€€T),PTFLD(TAB048-REQST)_^1_%EQU_"SPTFLD(TAB049-REQST),FFSOL(TAB050-REQST)_^1_%EQU_"SFFSOL(TAB051-REQST),CURFLD(TAB052-REQST)_^1_%EQU_"SCRFLD(TAB053-REQST),PMDF(TAB054-REQST)_^1_%EQU_"SPMDF(TAB055-REQST),PMRBA(TAB056-REQST)_^1_%EQU_"SPMRBA(TAB057-REQST),PMDBL(TAB058-REQST)_^1_%EQU_"SPMDBL(TAB059-REQST),PM2LV(TAB060-REQST)_^1_%EQU_"SPM2LV(TAB061-REQST),CHAR(TAB062-REQST)_^1_%EQU_"NXTO€€VR(TAB063-REQST),SPACE(TAB064-REQST)_^1_%EQU_"SNOFS(TAB065-REQST),FSEP(TAB066-REQST)_^1_%EQU_"PCR(TAB067-REQST),NUMCHR(TAB068-REQST)_^1_%EQU_"USRFSF(TAB069-REQST),REND(TAB070-REQST)_^1_%EQU_"FWACTL(TAB071-REQST),FWAINP(TAB072-REQST)_^1_%EQU_"GOODRD(TAB073-REQST),STOK1L(TAB074-REQST)_^1_%EQU_"STOKFM(TAB075-REQST),SERVSW(TAB076-REQST)_^1_%EQU_"EORMET(TAB077-REQST),CORD(TAB078-REQST)_€€^1_%EQU_"BKUP(TAB079-REQST),P0(TAB080-REQST)_^1_%EQU_"P1(TAB081-REQST),P2(TAB082-REQST)_^1_%EQU_"P3(TAB083-REQST),P4(TAB084-REQST)_^1_%EQU_"P5(TAB085-REQST),P6(TAB086-REQST)_^1_%EQU_"P7(TAB087-REQST),P8(TAB088-REQST)_^1_%EQU_"P9(TAB089-REQST),PA(TAB090-REQST)_^1_%EQU_"PB(TAB091-REQST),TEMPOR(TAB092-REQST)_^1_%EQU_"BBFLG(TAB093-REQST),FONT(TAB094-REQST)_^1_%EQU_"INTBUF(TAB095-REQST)€€,RESBUF(TAB096-REQST)_^1_%EQU_"FONTP(TAB097-REQST),FONTR(TAB098-REQST)_^1_%EQU_"H1000(TAB099-REQST),OLCMSG(TAB100-REQST)_^1_%EQU_"H8(TAB101-REQST)_^1_%EQU_"TOTCHR(TAB69A-REQST),TOTFS(TAB69B-REQST)_^1************************************************************************_^1************************************************************************_^1***********************************€€*************************************_^1***_]_^1***_]_^1*** THIS IS THE DRAFT READ15 SUBROUTINE. IT IS ENTERED BY A_^1*** RETURN JUMP FROM THE USER S COMPILED DRAFT PROGRAM. THE PROPER_^1*** PARAMETERS ARE TAKEN FROM THE COMPILED PROGRAM. THIS ROUTINE_^1*** IS SETTING AND CLEARING THE USER S INDICATORS CONNECTED WITH_^1*** THIS ROUTINE SO THAT TO KEEP THE USER INFORMED WITH THE_€€^1*** RESULTS OF A RECORDS READING_^1***_]_^1***_]_^1READ1X ADC_"0_-ENTRY OF THE R15 ROUTINE_^1_%EQU_"READ15(READ1X)_^1_%EQU_"READ(READ15)_^1_%RTJ*_!(CMP1+1)_"SET I REGISTER_^1_%ENA_"0_^1_%STA-_!BBFLG,I_.CLEAR BUFFER BUILD FLAG_^1_%STA-_!FONT,I_.CLEAR FONT_^1_%LDQ*_!READ_^1_%INQ_"2_^1_%LDA*_!(ZWRD),Q_'POSSIBLE 3RD PARAMETER_^1_%TRA_"Q_^1_%LDA*_!(ZWRD),Q_'WORD 1 IF DATA TABLE_^1_%AN€€D-_!HFF00,I_^1_%SUB_"=N$2000_.CHECK FOR W-LEVEL_^1_%SAZ_"WLEVL_^1_%JMP*_!NOBB_0NO_^1WLEVL ENA_"1_^1_%STA-_!BBFLG,I_-SET BUFR BUILD_^1_%LDA-_!1,Q_1DATA ADDRESS OF RESCAN BUFR_^1_%STA-_!RESBUF,I_^1_%LDQ*_!READ_^1_%LDA*_!(ZWRD),Q_^1_%TRA_"Q_^1_%LDA-_!1,Q_1DATA ADDRESS OF INITIAL BUFR_^1_%STA-_!INTBUF,I_^1NOBB_!CLR_"A_^1THRU13 STA_"EOFUSR_$CLEAR THE E.O.F. USER"S INDICATOR_^1_%LDQ_"=X€€DCTL_$GET CONTROL TABLE ADDRESS_^1_%STQ-_!FWACTL,I_"SAVE IT IN LOW CORE_^1_%LDA-_!3,Q_(GET 4TH WORD OF CTL TABLE_^1_%AND-_!HFF00,I_#ISOLATE E.O.R. SYMBOL IF ANY_^1_%SAZ_"2_*NO EOR SYMBOL FOUND_^1_%SET_"A_^1_%STA-_!STOKFM,I_"SET MULTILINE STOCK FORM FLAG_^1CHKEJT LDA+_!EJTUSR_^1_%SAZ_"R915-*-1_"NO._^1_%RTJ_"EJ_)EJECT THE PAGE TO PRIMARY_^1_%LDA-_!REQST5,I_"CHECK FOR E.O.F._^1_%ARS_"€€13_^1_%INA_"-1_^1_%SAN_"R915-*-1_"IT IS NOT SET._^1_%RAO*_!(THRU13+1) SET E.O.F. USER"S INDICATOR_^1_%JMP_"SEOR6_%AND EXIT WITHOUT READIND_^1R915_!LDA-_!TOP,I_%CHECK WHETHER A NEW PAGE STARTS_^1_%SAZ_"1_*YES_^1_%JMP*_!RRDD1_%NO. GO TO READ THE NEXT LINE_^1***_]_^1***_]_^1_%ENQ_"REND_'CLEAR THE PAGE PARAMETER LOCATIONS_^1_%INQ_"-PBEG_^1CLRR2 STA-_!PBEG,B_^1_%SQZ_"2_*IF END OF CLEA€€RING CONTINUE_^1_%INQ_"-1_)PREPARE TO CLEAR THE NEXT LOCATION_^1_%JMP*_!CLRR2_%LOOP UNTIL ALL LOCATIONS ARE CLEARED_^1***_]_^1*** GET PARAMETERS FROM THE ENVIRONMENT TABLE_^1***_]_^1_%LDA_"=XDENV_$GET THE ADDRESS OF THE ENVIRONMENT TABLE_^1_%STA-_!ENVNPT,I_"SAVE IT IN LOW CORE_^1_%STA-_!PENV1,I_^1_%TRA_"Q_^1_%LDA-_!2,Q_1THIRD PAGE WORD_^1_%AND*_!FNTBIT+1_,FONT_^1_%ALS_"3_^1_%STA-_!€€FONTP,I_-SAVE_^1_%LDA_"(P0P),Q_/GET FIRST WORD OF TABLE_^1_%STA-_!P0,I_'SAVE IT IN TWO LOCATIONS_^1_%STA-_!P1,I_^1_%RTJ*_!ASSENT_$GET LOGICAL UNIT NUMBER. CLEAR RECORDS FLAGS_^1_%RTJ_"PARAM_1GET THE PAGE PARAMETERS_^1_%RTJ_"MODSET_0SET MODE_^1_%LDA-_!P6,I_'CHECK FOR LINE LOCATE OPTION_^1_%SAZ_"1_5NO-SKIP_^1_%JMP*_!YESLL_0YES_^1SKIPLL RTJ*_!FNTFND_^1_%LDA-_!FONT,I_$NO SERVO IF HAND€€PRINT_^1_%SAZ_"DOSERV_^1_%INA_"-3_^1_%SAZ_"DOSERV_^1_%JMP*_!FSLADV_^1DOSERV LDQ-_!FWACTL,I_"GET ADDRESS OF CTL BLOCK_^1_%LDA-_!7,Q_.GET 7TH WORD OF CTL-CHECK NOS_^1_%SAP_"DOSER1_,NO SET-CONTINUE_^1_%LDA-_!TOP,I_,YES-NOS,CHECK FOR TOP OF PAGE_^1_%SAN_"DOSER1_,ITS NOT TOP-SKIP_^1_%RAO-_!TOP,I_,IT IS TOP-DO NOT SERVO_^1_%RAO-_!SERVSW,I_^1_%JMP*_!FSLADV_^1DOSER1 RTJ*_!(RDD10+1)_!CALL S€€ERVO ROUTINE_^1_%JMP*_!RRDD1_%THEN GO TO READ THE LINE_^1YESLL RTJ_"LL_)GO TO LINE LOCATE ROUTINE_^1_%LDA-_!P7,I_'CHECK FOR FORM NUMBER_^1_%SAZ_"2_*NO FORM NUMBER FOUND_^1_%RTJ_"CKFN_'CHECK THE IDENTIFICATION NUMBER_^1_%JMP*_!SKIPLL_$AND NOT GO TO SKIP TO FIRST LINE AND SERVO_^1FSLADV LDQ-_!FWACTL,I_#CONTROL TABLE_^1_%LDA-_!6,Q_^1_%AND-_!H3F,I_-SKIP COUNT_^1_%STA-_!SKCNT,I_^1_%SAZ€€_"2_^1_%RTJ_"ALP_0EXECUTE FLA_^1_%JMP*_!RRDD1_^1***_]_^1***_]_^1ZWRD_!NUM_"0_^1FNTFND NOP_"0_^1_%LDQ*_!(READ)_,DATA ADDRESS_^1_%LDQ-_!3,Q_/ENVT. POINTER_^1_%LDA*_!(ZWRD),Q_^1_%SAM_"1_1TEST FOR PAGE_^1_%JMP*_!*+2_^1_%INQ_"6_1YES, SET TO RECORD_^1_%LDA-_!2,Q_/3RD WORD_^1FNTBIT AND_"=N$E000_%FONT BITS_^1_%SUB*_!FNTBIT+1_^1_%SAZ_"PAGFNT_,TEST FOR DEFAULT_^1_%ADD*_!FNTBIT+1_)NO, RESTORE€€_^1_%ALS_"3_^1_%JMP*_!STRFNT_^1PAGFNT LDA-_!FONTP,I_(USE PAGE FONT_^1STRFNT STA-_!FONTR,I_^1_%INQ_"4_5MAY BE FIELD_^1_%LDA*_!(ZWRD),Q_^1_%AND*_!FNTBIT+1_^1_%SUB_"=N$2000_/CHECK FOR FIELD_^1_%SAZ_"1_5SKIP-YES_^1_%JMP*_!RECFNT_^1_%LDA-_!2,Q_^1_%AND*_!FNTBIT+1_^1_%SUB*_!FNTBIT+1_,TEST FOR DEFAULT_^1_%SAZ_"RECFNT_/SKIP-YES_^1_%ADD*_!FNTBIT+1_,NO,RESTORE_^1_%ALS_"3_^1_%JMP*_!STRFON_^1RE€€CFNT LDA-_!FONTR,I_'USE REC FONT_^1STRFON STA-_!FONT,I_^1RESQ_!INQ_"-4_/POINT TO REC_^1_%JMP*_!(FNTFND)_^1***_#R_"R_"R_"R_"R_"R_"R_"R_"R_"R_"R_"R_^1***_]_^1*** RECORD AREA STARTS HERE_^1***_]_^1***_]_^1RRDD1 ENQ_"REND_'CLEAR RECORD PARAMETER LOCATIONS_^1_%INQ_"-RBEG_^1_%CLR_"A_^1CLRR1 STA-_!RBEG,B_^1_%SQZ_"2_^1_%INQ_"-1_)PREPARE FOR NEXT LOCATION_^1_%JMP*_!CLRR1_%LOOP UNTIL ALL L€€OCATIONS ARE CLEARED_^1_%RTJ*_!ASSENT_$GET LOGICAL UNIT_^1_%RTJ_"PMINZ_%INITIALIZE FOR 2-LEVEL DATA STATEMENT_^1_%RTJ*_!FNTFND_^1CLRR5 LDA-_!2,Q_)CHECK FOR LINE LOCATE_^1_%AND-_!HFF,I_/LOC BITS_^1_%SAZ_"NOLOCR_/CHECK FOR LL_^1_%RTJ_"LLRF_^1NOLOCR JMP*_!RDD1_*GO READ LINE_^1***_]_^1***_]_^1*** GET PARAMETERS FROM ASSIGN AREA AND STORE THE_^1*** LOGICAL UNIT WHERE NEEDED_^1***_]_^1*€€**_]_^1ASSENT ADC_"0_^1_%RTJ_"INIT_'INITIALIZE_^1_%RAO_"READ_^1_%LDQ_"(READ)_^1_%STQ-_!ASGNPT,I_"SAVE POINTER OF ASSIGN ENTRY_^1_%LDA_"READ_^1_%INA_"-1_)RESTORE THE RETURN ADDRESS AS IT WAS_^1_%STA_"READ_^1_%LDA-_!3,Q_(GET THE INPUT DEVICE_^1_%AND-_!HFF00,I_#ISOLATE LOGICAL UNIT NUMBER_^1_%SAP_"ASS1_.ACTUAL L.U.N._^1_%EOR_"H8,I_!SET BIT TO INDICATE ADDRS.-LUN_^1ASS1_!ALS_"8_-POSITI€€ON IT_^1_%STA_"LUIN_'AND STORE IT WHERE NECESSARY_^1_%STA-_!REQST5,I_^1_%STA_"STATUS+3_^1_%STA_"SEZ_^1_%JMP*_!(ASSENT)_"RETURN_^1***_]_^1P0P_"NUM_"0_^1***_]_^1***_]_^1***_"F_"F_"F_"F_"F_"F_"F_"F_"F_"F_"F_"F_^1***_]_^1*** FIELD (ONE READ EXECUTION) AREA STARTS HERE_^1***_]_^1***_]_^1RDD1_!LDA+_!SERV15_$CHECK FOR USE OF THE SERVO ROUTINE_^1_%SAZ_"RDD13-*-1_^1RDD10 RTJ+_!SERVO_%EXECU€€TE ALIGNEMENT OVER THE FIRST LINE FOUND_^1_%CLR_"A_^1_%STA*_!(RDD1+1)_"CLEAR THE USE OF SERVO FLAG_^1_%JMP*_!RRDD1_^1RDD13 RTJ_"ENVST_%GET POINTERS FOR THIS READING_^1RDD11 RTJ+_!PARAM_%GET PARAMETERS FOR THIS READING_^1RDD12 RTJ+_!MODSET_$SET EOL,SCAN HEIGHT,NOB_^1***_]_^1***_]_^1*** POSITION MIRROR - THEN READ - THEN SKIP TO THE NEXT LINE_^1***_]_^1***_]_^1_%LDA-_!P5,I_'GET T€€HE LEFT SCAN LIMIT_^1_%INA_"-5_)REDUCE IT BY FIVE COORDINATES_^1_%STA-_!CORD,I_$CONSIDER IT AS STARTING COORDINATE TO READ_^1_%CLR_"A_^1_%STA-_!SKCNT,I_#STORE IT TO BE USED BY ALP ROUTINE_^1RDD2_!RTJ+_!ALP_(POSITION THE MIRROR_^1_%RTJ*_!READ0_%GO READ WITHOUT MOVING THE PAGE_^1_%LDA-_!P3,I_'GET THE SKIP PARAMETER_^1_%AND_"H3F,I_%ISOLATE THE SKIP BITS_^1_%STA-_!SKCNT,I_#STORE THEM T€€O BE USED BY THE ALP ROUTINE_^1_%RTJ*_!(RDD2+1)_"EXECUTE THE ADVANCE OF PAGE_^1_%RTJ_"PACK_'CHECK AND PACK THE BUFFER_^1_%LDA-_!NUMCHR,I_^1_%ADD-_!TOTCHR,I_^1_%STA-_!TOTCHR,I_^1_%LDA-_!USRFSF,I_^1_%ADD-_!TOTFS,I_^1_%STA-_!TOTFS,I_^1_%RTJ_"BLKRJT_$CHECK FOR REJECTS-BLANK LINE-F.S. ONLY_^1***_]_^1***_]_^1*** CHECK FOR END OF PAGE AND END OF RECORD_^1***_]_^1***_]_^1_%LDA-_!ENDP,I_$CH€€ECK FOR END OF PAGE SYMBOL FOUND_^1_%SAZ_"1_^1_%JMP*_!(RDD3+1)_"GO TO THE END OF RECORD ROUTINE_^1_%LDA-_!EORMET,I_"CHECK END OF RECORD FLAG_^1_%SAZ_"2_*NOT SET_^1RDD3_!JMP+_!SEOR_'IF SET GO TO THE END OF RECORD ROUTINE_^1_%LDA-_!STOK1L,I_"CHECK FOR STOCK FORM_^1_%SAZ_"RDD4-*-1_"IT IS PPF FORM_^1_%LDA-_!STOKFM,I_"CHECK FOR MULTILINE STOCK FORM_^1_%SAN_"RDD4-*-1_"IT IS MULTILINE OPT€€ION - NOT YET END OF RECORD_^1_%JMP*_!(RDD3+1)_"END OF RECORD. IT IS ONE LINE ONE RECORD_^1RDD4_!JMP_"CLW_(GO TO FINISH THIS FIELD_^1***_]_^1***_]_^1SERV15 NUM_"0_*ENTRY POINT FOR SERVO FLAG_^1***_]_^1***_]_^1**********************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE CARRIES OUT THE ACTUAL READING_^1***_]_^1***_]_^1READ0 ADC_"0_^1_%CL€€R_"A_^1_%LDQ-_!BFWA,I_$GET THE F.W.A. OF BUFFER_^1_%STA*_!(P0P),Q_#ZERO THE FIRST WORD OF READING_^1* CHECK FOR POSSIBLE BUFFER OVERFLOW_^1_%LDA-_!SERFLG,I_"CHECK WHETHER IT IS A DUMMY SERVO READING_^1_%SAN_"PRERED-*-1 YES. SO DO NOT CHECK FOR OVERFLOW_^1_%LDA-_!NXTOVR,I_^1_%SAZ_"PRERED-*-1 NO POSSIBILITY OF BUFFER OVERFLOW_^1_%RAO_"BUFUSR_$SET THE USER"S OVERFLOW FLAG_^1_%JMP_"S€€EOR_'RETURN WITHOUT READING_^1*** MAKE PRELIMINARY REQUEST FOR FWA AND BLC_^1*** THIS IS THE PREREAD ROUTINE. IT ALSO OUTPUTS RQST_^1*** FOR OLCC NO._^1PRERED LDA-_!BBFLG,I_^1_%SAN_"OLCHP_!IT IS SET - CHECK FURTHER_^1_%JMP*_!PRER00_!NO-SKIP_^1OLCHP LDA-_!FONT,I_!CHK FOR HNDPRT_^1_%SAZ_"OLCC01_!NO-IT IS ANSI-SKIP_^1_%INA_"-3_!IT IS DEGRADED ANSI-SKIP_^1_%SAN_"OLCC02_!IT IS HNDPRT€€_^1OLCC01 STA-_!BBFLG,I_!SET BBFLG TO ZERO_^1OLCC02 LDA-_!BBFLG,I POSITION HP BIT_^1_%ALS_"1_^1_%STA-_!BBFLG,I_^1_%LDQ-_!RENV1,I_^1_%LDA-_!2,Q CHECK FOR OLCC_^1_%AND-_!H1000,I_^1_%SAZ_"OLCC04_!NO-BIT NOT SET IN TABLE_^1_%LDA-_!OLCMSG,I IS IT FIRST TIME THROUGH_^1_%SAN_"OLCC03 NO-DO NOT OUTPUT OLCC MSG._^1_%RAO-_!OLCMSG,I SET FLAG ON_^1_%LDA-_!REQST2,I STORE CRC CODE OF 4_^1_%€€STA-_!REQST6,I_^1_%ENA_"5_^1_%STA-_!REQST7,I SET ACT =5 IN RQST_^1_%RTJ*_!(PRER01+1) GO OUTPUT MESSAGE_^1OLCC03 RAO-_!BBFLG,I SET BIT FOR OLCC_^1OLCC04 LDA-_!BBFLG,I_^1_%ALS_"11_^1_%STA-_!BBFLG,I_^1PRER00 LDQ-_!FWACTL,I_!GET ADDRESS OF CONTROL TABLE_^1_%LDA-_!7,Q_(GET THE BLL PARAMETER_^1_%AND-_!HFF,I_^1_%SAZ_"LB52_'NOT SPECIFIED. TAKE IT AS ZERO_^1_%ADD-_!P5,I_'ADD IT TO THE L€€EFT SCAN LIMIT_^1LB52_!STA-_!REQST6,I_"STORE IT IN REQUEST_^1_%LDA-_!BBFLG,I_-CHECK FOR BUFR BUILD_^1_%SAN_"1_^1_%JMP*_!SKPBB_/NO_^1_%EOR-_!REQST6,I_)COMBINE WORD 5 OF REQUEST_^1_%STA-_!REQST6,I_)WITH POSSIBLE HANDPRINT AND/OR OLCC_^1_%LDA_"=XTAB095_*SET TABLE ADDRESS_^1_%STA-_!REQST7,I_^1_%LDA-_!BFWA,I_+SET FWA_^1_%STA-_!INTBUF,I_^1_%JMP*_!PRER01_^1SKPBB LDA-_!BFWA,I_^1_%STA-_!RE€€QST7,I_"STORE ALSO THE FWA OF BUFFER_^1PRER01 RTJ+_!REQST_%EXECUTE THE REQUEST_^1_%LDA-_!P4,I_'GET THE RIGHT SCAN LIMIT_^1_%ALS_"8_^1_%STA-_!REQST7,I_"STORE IN REQUEST THE RIGHT SCAN LIMIT_^1_%LDA-_!P5,I_'GET THE LEFT SCAN LIMIT_^1_%ADD-_!H200,I_^1_%ADD-_!H300,I_$SET ALSO THE CRC_^1_%STA-_!REQST6,I_"STORE CRC ALONG WITH LEFT SCAN LIMIT IN REQUES_^1_%RTJ*_!(PRER01+1) GO READ_^1_%RT€€J_"STATUS_$GET STATUS_^1_%LDQ_"(READ)_$GET THE DATA TABLE ADDRESS_^1_%LDA-_!2,Q_(GET THE NUMBER OF CHARACTERS_^1_%AND_"=N$0FFF_^1_%ARS_"1_*DIVIDE BY 2 TO FIND THE NUMBER OF WORDS_^1_%ADD-_!FWAINP,I_"ADD THE FWA OF BUFFER TO FIND THE LWA_^1_%SUB_"STATI_%COMPARE WITH THE ALREADY LWA IN BUFFER_^1_%SAP_"PRER02-*-1 NO. POSSIBILITY OF OVERFLOWING WITH NEXT READ_^1_%RAO-_!NXTOVR,I_"SET O€€VERFLOW FLAG IF ANOTHER ATTEMPT_^1PRER02 LDA-_!BBFLG,I_#TEST FOR HNDPRT OR OLCC_^1_%SAZ_"1_^1_%JMP*_!(READ0)_-YES - IGNORE REJECTS_^1_%LDA_"STATA_0GET SAVED STATUS_^1_%AND-_!H400,I_$CHECK FOR REJECTS_^1_%SAZ_"SKPREJ-*-1 IF NO REJECTS RETURN TO CALLER_^1_%ENA_"0_^1_%STA-_!SKCNT,I_#PREPARE TO READ AGAIN WITHOU SKIPPING_^1_%RTJ*_!(RDD2+1)_"REVERSE THE MIRROR_^1_%RAO*_!RC_)BUMP RESCAN€€ COUNTER_^1_%LDA*_!RC_^1_%INA_"-3_)HAVE 3 ATTEMPTS BEEN MADE?_^1_%SAZ_"1_*YES_^1_%JMP*_!READ0+1_#IF NO. READ AGAIN_^1SKPREJ STA*_!RC_^1_%JMP*_!(READ0)_#RETURN_^1RC_#NUM_"0_*RESCAN COUNTER_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE GETS A CHARACTER FROM THE ADDRESS IN_^1*** AREAX,I. IF THE HIGH ORDER€€ BIT IN THE ADDRESS WORD_^1*** IS SET, THE LOWER HALF CHARACTER IS PICKED UP AND_^1*** THE UPPER HALF CHARACTER IS CLEARED TO BINARY ZERO_^1*** IF IT IS NOT SET, THE UPPER HALF CHARACTER IS PICKED_^1*** UP AND THE LOWER HALF CHARACTER IS CLEARED TO ZERO_^1*** THE CHARACTER IS POSITIONED TO THE LOWER HALF OF_^1*** THE WORD AND STORED IN CHAR,I. CONTROL IS RETURNED_^1*** TO THE CALL€€ER WITH THE CHARACTER IN A REGISTER_^1***_]_^1***_]_^1CGET_!ADC_"0_^1_%LDQ-_!AREAX,I_#GET ADDRESS OF CHARACTER_^1_%SQM_"CG1_(IT IS IN LOWER HALF OF WORD_^1_%LDA*_!(H0B),Q_#GET WORD_^1_%AND-_!HFF00,I_#ISOLATE UPPER CHARACTER_^1_%ALS_"8_*POSITION IT TO LOWER HALF_^1_%STA-_!CHAR,I_$SAVE IT_^1_%LDA*_!(H0B),Q_#GET SAME WORD AGAIN_^1_%AND-_!HFF,I_%ISOLATE LOWER HALF_^1_%STA*_!(H0B),Q_#ST€€ORE IT AT THA SAME LOCATION OF THE WORD_^1_%ADQ-_!H8000,I_#SET LOWER HALF FLAG FOR NEXT TIME_^1_%STQ-_!AREAX,I_#SAVE IT_^1_%LDA-_!CHAR,I_$PUT CHARACTER IN A REGISTER_^1_%JMP*_!(CGET)_$RETURN_^1CG1_"TRQ_"A_^1_%AND-_!H7FFF,I_#DROP FLAG BIT, FOR UPPER HALF NEXT TIME_^1_%TRA_"Q_^1_%LDA*_!(H0B),Q_^1_%AND-_!HFF,I_%ISOLATE LOWER HALF_^1_%STA-_!CHAR,I_$STORE IN CHAR,I_^1_%LDA*_!(H0B),Q_#GE€€T WORD WITH CHARACTER_^1_%AND-_!HFF00,I_#ISOLATE UPPER HALF_^1_%STA*_!(H0B),Q_#STORE IN SAME WORD WITH BOTTOM BINARY ZERO_^1_%INQ_"1_*SET ADDRESS FOR NEXT TIME_^1_%STQ-_!AREAX,I_#SAVE IT_^1_%LDA-_!CHAR,I_$PUT CHARACTER IN A REGISTER_^1_%JMP*_!(CGET)_$RETURN_^1***_]_^1H0B_"NUM_"0_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***€€_]_^1*** THIS ROUTINE WILL TAKE CARE OF UPDATING THE INPUT AND STORAGE_^1*** ADDRESSES OF THE SCAN AREA. IT WILL CHECK EACH CHARACTER AND_^1*** IF IT IS A CONTROL CHARACTER TRANSFER PROGRAM CONTROL TO A_^1*** ROUTINE TO HANDLE IT. IT WILL SET FLAGS IF CHARACTER OR_^1*** FIELD SEPARATORS ARE FOUND IN THE RECORD_^1***_]_^1***_]_^1PACK_!ADC_"0_^1* SAVE POINTERS AND COUNTERS FOR THE €€CASE OF DELETE A LINE_^1_%LDA_"NOFS_^1_%STA-_!SNOFS,I_^1_%LDA-_!BFWA,I_^1_%STA-_!SBFWA,I_^1_%LDA-_!PFWA,I_^1_%STA-_!SPFWA,I_^1_%LDA-_!PTFLD,I_^1_%STA-_!SPTFLD,I_^1_%LDA-_!FFSOL,I_^1_%STA-_!SFFSOL,I_^1_%LDA-_!CURFLD,I_^1_%STA-_!SCRFLD,I_^1_%LDA-_!PMDF,I_^1_%STA-_!SPMDF,I_^1_%LDA-_!PMRBA,I_^1_%STA-_!SPMRBA,I_^1_%LDA-_!PMDBL,I_^1_%STA-_!SPMDBL,I_^1_%LDA-_!PM2LV,I_^1_%STA-_!SPM2LV,I_^1€€_%LDQ-_!BFWA,I_$CHECK FOR BLANK LINE_^1_%LDA*_!(H0B),Q_^1_%SAN_"PACK1-*-1_!O.K. CONTINUE_^1_%JMP*_!(PACK)_$RETURN - IT IS A BLANK LINE_^1PACK1 LDA-_!BFWA,I_$GET UNPACKED BUFFER ACTUAL ADDRESS_^1_%STA-_!AREAX,I_#UPDATE THE POINTER FOR CHARACTER GET ROUTINE_^1_%AND-_!H7FFF,I_#DROP THE NEGATIVE BIT IF ANY_^1_%SUB_"STATI_%CHECK FOR END_^1_%SAM_"PACK2-*-1_!NOT YET_^1_%SAZ_"PACK2-*-1_!T€€HIS IS THE LAST WORD_^1PACK99 JMP*_!(PACK)_$RETURN_^1PACK2 RTJ*_!CGET_'GET A CHARACTER_^1_%SAN_"1_^1_%JMP*_!(PACK)_^1_%LDQ-_!AREAX,I_#GET NEW UNPACKED BUFFER POINTER_^1_%STQ-_!BFWA,I_$STORE NEW POINTER_^1PACK3 LDQ-_!FWACTL,I_"GET ADDRESS OF CONTROL TABLE_^1_%LDA-_!4,Q_(GET 5TH WORD OF TABLE_^1_%AND-_!HFF,I_%ISOLATE FIELD SEPARATOR SYMBOL_^1_%STA-_!FSEP,I_$SAVE IT_^1_%SUB-_!CHAR,I€€_$CHECK WITH CURRENT CHARACTER_^1_%SAZ_"PK1-*-1_#YES. IT IS A FIELD SEPARATOR_^1_%JMP*_!PK5_(NO._^1PK1_"RAO-_!USRFSF,I_"ADD ONE TO FIELD SEPARATOR COUNTER_^1_%LDA-_!PMDF,I_$CHECK FOR DATA FIELD SEPARATOR FLAG_^1_%SAZ_"PK3-*-1_#YES_^1_%CLR_"A_*NO. SET DATA-FIELD SEPARATOR FLAG TO DATA_^1_%STA-_!PMDF,I_^1_%JMP*_!PACK1_%NEXT CHARACTER_^1PK3_"LDA-_!PMDBL,I_#MIGHT NEXT FIELD BEGIN WITH€€ FIELD SEPARATOR_^1_%SAN_"PK4-*-1_#NO._^1_%RTJ_"PMLDT_%YES. SEE IF IT DOES_^1PK4_"RTJ_"FLD_(PROCESS CURRENT FIELD SEPARATOR_^1_%JMP*_!PACK17_^1PK5_"LDA-_!CHAR,I_$GET AGAIN CURRENT CHARACTER_^1_%INA_"-$5B_'CHECK FOR FILL CHARACTER_^1_%SAN_"PK6-*-1_#NO._^1_%JMP*_!PACK99_$RETURN_^1PK6_"LDA-_!PMDF,I_$CHECK FOR DATA-FIELD SEPARATOR FLAG_^1_%SAZ_"PK7-*-1_#YES. CHARACTER IS VALID_^1_%JMP€€*_!PACK1_%NO. PROCESS NEXT CHARACTER_^1PK7_"LDA-_!CHAR,I_$GET AGAIN THE CHARACTER_^1_%INA_"-$20_'CHECK FOR BLANK_^1_%SAN_"NOSPCE-*-1_!IT IS NOT A SPACE_^1_%LDA-_!PCR,I_!CHECK WHETHER PREV. CHAR WAS FS._^1_%SUB-_!FSEP,I_^1_%SAN_"1_!NO IT IS A VALID SPACE_^1_%JMP*_!PACK1_!IGNORE THIS BLANK_^1SPAC_!RAO-_!SPACE,I_#INCREMENT THE SPACE COUNTER_^1_%JMP*_!PACK18_$AND TREAT IT AS DATA_^1NO€€SPCE INA_"-$3E_!CHECK FOR STAND. DELETE LINE_^1_%SAN_"2_*IT IS NOT DELETE LINE_^1_%JMP_"DLL1_'GO TO DELETE LINE ROUTINE_^1_%INA_"-$1_(CHECK FOR CANCEL CHARACTER_^1_%SAN_"1_*NOT A CANCEL CHARACTER_^1_%JMP*_!PACK1_%IF YES IGNORE IT_^1PACK81 LDQ-_!FWACTL,I_"GET ADDRESS OF CONTROL TABLE_^1_%LDA-_!3,Q_(GET 4TH WORD OF THE TABLE_^1_%AND-_!HFF00,I_#ISOLATE THE END OF RECORD SYMBOL_^1_%ALS€€_"8_*POSITION IT FOR CHECK_^1_%SUB-_!CHAR,I_$COMPARE WITH ACTUAL CHARACTER_^1_%SAN_"PACK9-*-1_!IT IS NOT END OF RECORD SYMBOL_^1_%RAO-_!EORMET,I_"SET END OF RECORD FLAG_^1_%JMP*_!PACK99_$RETURN_^1PACK9 LDA-_!3,Q_(GET 4TH WORD OF CONTROL TABLE_^1_%AND-_!HFF,I_%SAVE END OF LINE SYMBOL_^1_%SUB-_!CHAR,I_$COMPARE WITH CURRENT CHARACTER_^1_%SAN_"PACK10_$IT IS NOT END OF LINE_^1_%JMP*_!P€€ACK99_$RETURN_^1PACK10 LDA-_!4,Q_(GET 5TH WORD OF CONTROL TABLE_^1_%AND-_!HFF00,I_#ISOLATE EOP SYMBOL_^1_%ALS_"8_^1_%SUB-_!CHAR,I_$COMPARE WITH CURRENT CHARACTER_^1_%SAN_"PACK12-*-1 NOT END OF PAGE SYMBOL_^1_%LDA-_!FWAINP,I_"GET THE FWA OF BUFFER_^1_%ADD-_!H8000,I_#CONSIDER THE LOWER PART OF WORD_^1_%SUB-_!AREAX,I_#AS ALREADY DID THE AREAX POINTER_^1_%SAN_"PAC10A-*-1 THE EOP SYMB€€OL IS NOT IN FIRST LOCATION_^1_%RAO_"BLNUSR_$SET BLANK RECORD USER"S INDICATOR_^1_%JMP_"EOP_(GO TO END OF PAGE ROUTINE_^1PAC10A JMP*_!PACK17_$CONTINUE PACKING_^1PACK12 LDA-_!5,Q_(GET 6TH WORD OF CONTROL TABLE_^1_%AND-_!HFF00,I_#SAVE DELETE CHARACTER SYMBOL_^1_%ALS_"8_^1_%SUB-_!CHAR,I_$COMPARE WITH CURRENT CHARACTER_^1_%SAN_"PACK13-*-1 NOT A DELETE CHARACTER SYMBOL_^1_%JMP_"DLC_(GO€€ TO DELETE CHARACTER ROUTINE_^1PACK13 LDA-_!5,Q_(GET 6TH WORD AGAIN_^1_%AND-_!HFF,I_%ISOLATE DELETE FIELD SYMBOL_^1_%SUB-_!CHAR,I_$COMPARE WITH CURRENT CHARACTER_^1_%SAN_"PACK14-*-1 IT IS NOT A DELETE FIELD SYMBOL_^1_%JMP_"DLF_(GO TO DELETE FIELD ROUTINE_^1PACK14 LDA-_!6,Q_(GET 7TH WORD OF CONTROL TABLE_^1_%AND-_!HFF00,I_#ISOLATE DELETE LINE SYMBOL_^1_%ALS_"8_^1_%SUB-_!CHAR,I_$COM€€PARE WITH CURRENT CHARACTER_^1_%SAN_"PACK17-*-1 IT IS NOT A DELETE LINE SYMBOL_^1_%JMP_"DLL_(GO TO THE DELETE LINE ROUTINE_^1PACK17 CLR_"A_^1_%STA-_!SPACE,I_#CLEAR CONSECUITVE SPACE COUNTER_^1PACK18 LDA-_!CHAR,I_$GET AGAIN THE CHARACTER_^1_%STA-_!PCR,I_%SAVE IT TO SERVE AS PREVIOUS CHARACTER IF NEED_^1_%SUB-_!FSEP,I_$CHECK IF IT IS F.S._^1_%SAZ_"PK19-*-1_"IT IS FIELD SEPARATOR, AL€€READY CHECKED_^1_%LDA-_!CHAR,I_$GET AGAIN THE CHARACTER_^1_%INA_"-$20_'CHECK FOR BLANK_^1_%SAZ_"PK19-*-1_"IGNORE IT_^1_%INA_"-$20_'CHECK FOR REJECT_^1_%SAZ_"PK19-*-1_"IGNORE IT FOR THE MOMENT_^1_%RAO-_!NUMCHR,I_"ADD ONE TO GOOD CHARACTERS_^1PK19_!LDQ-_!PFWA,I_$GET ADDRESS OF WHERE TO PUT THE CHARACTER_^1_%SQM_"PACK19-*-1 PUT IT IN BITS 0-7_^1_%JMP*_!PACK20_$PUT IT IN BITS 8-15_^1P€€ACK19 TRQ_"A_*GET ADDRESS_^1_%SUB-_!H8000,I_#UNSET TOP BIT_^1_%TRA_"Q_^1_%LDA*_!(H0C),Q_#GET WORD THAT IS THERE_^1_%AND-_!HFF00,I_#ISOLATE TOP CHARACTER_^1_%ADD-_!CHAR,I_$COMBINE WITH CHARACTER_^1_%STA*_!(H0C),Q_#STORE THEM_^1_%INQ_"1_*GET ADDRESS OF NEXT WORD_^1_%JMP*_!PACK21_$GO TO SAVE IT_^1PACK20 LDA*_!(H0C),Q_#GET WORD THAT IS THERE_^1_%AND-_!HFF,I_%SAVE LOWER HALF_^1_%ALS_"8_€€*POSITION TO COMBINE_^1_%ADD-_!CHAR,I_$COMBINE CHARACTERS_^1_%ALS_"8_*REPOSITION THEM_^1_%STA*_!(H0C),Q_#STORE THEM_^1_%ADQ-_!H8000,I_#GET ADDRESS OF NEXT CHARACTER_^1PACK21 STQ-_!PFWA,I_$SAVE ADDRESS TO PUT NEXT CHARACTER_^1_%JMP*_!PK3-1_%GET NEXT CHARACTER_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** PMINZ INITIA€€LIZES FLAGS AND INDICES USED BY THE PACK ROUTINE_^1*** FOR DOUBLE FIELD SEPARATOR PROCESSING_^1***_]_^1***_]_^1PMINZ ADC_"0_^1_%LDQ_"(READ)_$GET ADDRESS OF CURRENT R-LEVEL DATA TABLE_^1_%INQ_"4_*GO TO POSSIBLE 1ST 2-LEVEL DATA TABLE_^1_%STQ-_!PMRBA,I_#SAVE IT FOR FUTURE USE_^1_%LDA*_!(H0C),Q_#GET WORD ONE OF THAT TABLE_^1_%ARS_"4_*ISOLATE FIELD-LEVEL BYTE_^1_%AND-_!HF,I_^1_%INA_"-€€2_)IS IT IN FACT, A 2-LEVEL DATA TABLE_^1_%SAZ_"PMZ2_'YES._^1_%RAO-_!PMDBL,I_#NO. INDICATE THAT NO FIELD WILL BEGIN WITH F.S_^1PMZ1_!STA-_!PM2LV,I_#ZERO MEANS RECORD WITH 2-LEVEL DATA STATEMENT_^1_%JMP*_!(PMINZ)_#RETURN_^1PMZ2_!LDQ-_!PMRBA,I_#GET BASE ADDRESS OF 1ST 2-LEVEL DATA TABLE_^1_%LDA-_!2,Q_(GET LENGTH BYTE_^1_%INA_"-1_^1_%STA-_!PMDF,I_$1ST FIELD WILL NOT BEGIN WITH F.S._^1€€_%JMP*_!(PMINZ)_#RETURN_^1***_]_^1***_]_^1H0C_"NUM_"0_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THE PMLDT ROUTINE DETERMINES WHETHER THE NEXT_^1*** INPUT FIELD IS TO BE PRECEDED BY A FIELD SEPARATOR_^1***_]_^1***_]_^1PMLDT ADC_"0_^1_%LDA-_!PMRBA,I_#GET ADDRESS OF DATA TABLE_^1_%INA_"4_*PREPARE FOR NEXT INPUT FI€€ELD_^1_%STA*_!PMWC1_%SAVE FOR THIS TIME_^1_%STA-_!PMRBA,I_#SAVE FOR NEXT TIME_^1_%LDA*_!(PMWC1)_#GET DATA TABLE WORD FOR THE NEXT FIELD_^1_%ARS_"4_^1_%AND-_!HF,I_^1_%INA_"-2_)IS NEXT FIELD A LEVEL 2_^1_%SAZ_"PML1_'YES_^1_%RAO-_!PMDBL,I_#NO. INDICATE NO MORE FIELDS TO BE PRECEDED_^1*** BY A FIELD SEPARATOR_^1_%JMP*_!(PMLDT)_#RETURN_^1PML1_!RAO*_!PMWC1_%INCREMENT TO DATA TABLE WORD 3€€_^1_%RAO*_!PMWC1_^1_%LDA*_!(PMWC1)_^1_%AND_"=N$FFF_$ISOLATE LENGTH_^1_%INA_"-2_)WILL NEXT FIELD BE PRECEDED BY F.S._^1_%SAN_"PML2_'NO._^1_%RAO-_!PMDF,I_$YES. SET DATA-FIELD SEPARATOR FLAG TO F.S._^1PML2_!JMP*_!(PMLDT)_#RETURN_^1***_]_^1***_]_^1PMWC1 ADC_"0_^1***_]_^1***_]_^1***********************************************************************_^1***_]_^1***_]_^1*** ADD AT END ON€€E FIELD SEPARATOR IF THE FLAG IS ON_^1ADDFS ADC_"0_^1_%LDQ-_!ENVNPT,I_"GET THE ADDRESS OF ENVIRONEMENT TABLE_^1_%LDA-_!2,Q_(GET THE THIRD WORD_^1_%AND-_!H200,I_$CHECK IF WE HAVE TO ADD FIELD SEPARATOR_^1_%SAN_"1_*YES_^1_%JMP*_!(ADDFS)_#RETURN WITOUT DOING ANYTHING_^1_%LDA-_!PFWA,I_$GET THE PACKING POINTER_^1_%AND-_!H7FFF,I_#STRIP THE NEGATIVE BIT IF ANY_^1_%TRA_"Q_*MAKE Q A POINTE€€R_^1_%LDA-_!PFWA,I_$CHECK WHERE THE F.S IS TO BE STORED_^1_%SAM_"ADDLOW-*-1 IT MUST BE STORED TO THE LOWER AREA_^1_%LDA-_!FSEP,I_$STORE A F.S. AT HIGHER PART WHERE IS THE POINT_^1_%ALS_"8_^1COMEXT STA*_!(R0J),Q_^1_%CLR_"A_^1_%STA-_!SPACE,I_#CLEAR THE SPACE COUNTER_^1_%RTJ_"FLD_(PROCESS THE ADDED FIELD SEPARATOR_^1_%LDA-_!PFWA,I_/CCN1700R1540-001_^1_%SAM_"ADDL01_0CCN1700R1540-001_^€€1_%ADD-_!H8000,I_.CCN1700R1540-001_^1COMEX1 STA-_!PFWA,I_)CCN1700R1540-001_^1_%JMP*_!(ADDFS)_#RETURN_^1ADDL01 AND-_!H7FFF,I_(CCN1700R1540-001_^1_%INA_"1_5CCN1700R1540-001_^1_%JMP*_!COMEX1_/CCN1700R1540-001_^1ADDLOW LDA*_!(R0J),Q_(CCN1700R1540-001_^1_%AND-_!HFF00,I_#SAVE THE UPPER CHARACTER_^1_%ADD-_!FSEP,I_$ADD IN LOWER PART THE F.S. SYMBOL_^1_%JMP*_!COMEXT_$STORE THE WORD WITH THE€€ ADDED F.S._^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** ROUTINE CHECKING FOR FIELD MARKS ONLY_^1BLNFLD ADC_"0_^1_%LDA*_!(SKIP03+1) CHECK FOR REJECTS_^1_%SAZ_"NONREJ-*-1 NO REJECTS IN THIS READING_^1_%JMP*_!FLDBLN_$EXIT.WITH REJECTS IMPOSSIBLE TO DECIDE_^1NONREJ LDA-_!USRFSF,I_"CHECK FOR F.S. MET_^1_%SAZ_"FLDBLN-€€*-2 MUST BE A GOOD READING_^1_%LDA-_!NUMCHR,I_"CHECK FOR GOOD DATA_^1_%SAN_"FLDBLN-*-2 EXIT O.K._^1_%RAO_"FLDMK1_$SET FIELD SEPARATORS ONLY INDICATOR_^1_%JMP*_!(BLNFLD)_"RETURN_^1_%RAO-_!GOODRD,I_"COUNT ONE GOOD READING_^1FLDBLN JMP*_!(BLNFLD)_"RETURN_^1***_]_^1***_]_^1**********************************************************************_^1***_]_^1***_]_^1BLKRJT ADC_"0_*CHECKING€€ BUFFER FOR REJECTS_^1_%LDQ-_!SBFWA,I_#GET THE SAVED FWA OF THIS READING_^1_%LDA*_!(R0J),Q_#CHECK FOR BLANK LINE_^1_%AND-_!HFF00,I_#ISOLATE FIRST CHARACTER IN BUFFER_^1_%SAN_"LOOPRJ-*-1 NO BLANK LINE_^1_%RAO_"BLNUSR_$SET BLANK LINE FLAG_^1_%JMP*_!(BLKRJT)_"RETURN_^1LOOPRJ TCQ_"A_^1_%ADD_"STATI_%COMPARE WITH LAST WORD PLUS ONE_^1_%SAP_"1_^1_%JMP*_!CKBLFS_$END_^1_%LDA*_!(R0J),Q_#GET€€ ONE WORD_^1_%AND-_!HFF00,I_#ISOLATE UPPER CHARACTER_^1_%ALS_"8_^1_%INA_"-$20_'CHECK FOR BLANK_^1_%SAN_"SKIP01-*-1 IT IS NOT A BLANK_^1_%JMP*_!LOOPHF_$FORGET ABOUT THE BLANK NEXT CHARACTER_^1SKIP01 INA_"-$20_'CHECK FOR REJECT_^1_%SAN_"LOOPHF-*-1 IT IS NOT A REJECT_^1SKIP03 RAO+_!RJRUSR_$SET THE REJECT USER"S INDICATOR_^1LOOPHF LDA*_!(R0J),Q_#ISOLATE LOWER CHARACTER_^1_%AND-_!HFF,€€I_^1_%INA_"-$20_'CHECK FOR BLANK_^1_%SAN_"SKIP11-*-1 NOT A BLANK_^1_%JMP*_!NXTWRD_$PREPARE FOR NEXT WORD_^1SKIP11 INA_"-$20_'CHECK FOR REJECT_^1_%SAN_"NXTWRD-*-1 IT IS NOT A REJECT_^1_%RAO*_!(SKIP03+1) SET THE REJECT USER"S INDICATOR_^1NXTWRD INQ_"1_*SET THE POINTER FOR NEXT LOCATION_^1_%JMP*_!LOOPRJ_$GO TO CHECK THE NEXT WORD_^1CKBLFS RTJ_"BLNFLD_$CHECK FOR BLANK LINE - ONLY F.€€S._^1ENDREJ JMP*_!(BLKRJT)_"RETURN_^1***_]_^1R0J_"NUM_"0_^1***_]_^1***_]_^1***********************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE WILL CHECK THE LAST WORD OF A READ AND MAKE SURE_^1*** IT IS FILLED CORRECTLY._^1*** IT REMOVES TRAILING SPACES, CHECKS EOR AND SETS BFWA._^1***_]_^1***_]_^1CLW_"RTJ+_!RTS_(REMOVE TRAILING SPACES_^1CLW1€€_!RTJ+_!ADDFS_%ADD ONE FIELD SEPARATOR AT THE END IF NEEDED_^1_%LDA-_!PFWA,I_$GET THE PACKED BUFFER POINTER_^1_%AND-_!H7FFF,I_#MAKE SURE THE 15 BIT IS REMOVED_^1_%INA_"1_^1_%STA-_!BFWA,I_$SET POINTER FOR NEXT READ_^1_%STA-_!INTBUF,I_^1_%LDA-_!PTFLD,I_#GET THE F.S. TABLE POINTER_^1_%STA-_!FFSOL,I_#SAVE IT AS POINTER FOR NEXT LINE_^1_%CLR_"A_^1_%STA-_!NUMCHR,I_^1_%STA-_!USRFSF,I_^1_%€€STA_"JAMUSR_^1_%RAO-_!TOP,I_^1_%JMP_"RDD1_'READ THE NEXT FIELD_^1***_]_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE PERFORMS END OF RECORD JOBS_^1*** AMONG OTHERS IT SETS THE FINAL USER"S INDICATORS_^1***_]_^1***_]_^1SEOR_!CLR_"A_^1_%STA-_!TEMPOR,I_"THIS LOCATION IS ACTUALLY USED TO SAVE FLAGS_^1_%STA-€€_!EORMET,I_"CLEAR THE END OF RECORD FLAG_^1_%RTJ*_!(CLW+1)_#REMOVE TRAILING SPACES_^1_%RTJ*_!(CLW1+1)_"ADD ONE FIELD SEPARATOR AT THE END IF NEEDED_^1*** START CHECKING FOR USER S INDICATORS TO BE LEFT_^1_%LDA-_!STOK1L,I_"CHECK WHICH FORM IS RUN_^1_%SAZ_"SEOR1-*-1_!IT IS PPF FORM_^1_%LDA-_!STOKFM,I_"CHECK FOR MULTILINE STOCK FORM_^1_%SAN_"1_*YES_^1_%JMP*_!SEOR5_%IT IS ONE LINE STOC€€K. NO NEED TO CHECK_^1SEOR1 LDA_"RJRUSR_$CHECK THE REJECT USER"S INDICATOR_^1_%SAZ_"SEOR2-*-1_!NO REJECTS_^1_%LDA-_!TOTCHR,I_"CHECK FOR ANY GOOD CHAR.(NO F.S.) IN RECORD_^1_%SAN_"SEOR11-*-1 YES.SO IT CAN NOT BE REJECTS ONLY_^1_%LDA-_!TOTFS,I_#CHECK WHETHER WE HAD F.S. ONLY_^1_%SAN_"SEOR11-*-1 YES.SO IT CAN NOT BE REJECTS ONLY_^1_%RAO*_!(SEOR3+1)_!WE HAVE REJECTS ONLY.CONSIDER IT€€ AS BLANK LINE_^1_%CLR_"A_^1_%STA*_!(SEOR1+1)_!CLEAR THE USER"S REJECT FLAG_^1_%JMP*_!SEOR2_^1SEOR11 CLR_"A_^1_%STA*_!(SEOR2+1)_!CLEAR INDICATORS WHICH ARE INCOMPATIBLE_^1_%STA*_!(SEOR3+1)_!WITH REJECTS_^1_%JMP*_!SEOR5_%SKIP MORE CHECKING_^1SEOR2 LDA+_!FLDMK1_$CHECK THE F.S.ONLY USER"S INDICATOR_^1_%SAZ_"SEOR3-*-1_!NO_^1_%LDA-_!GOODRD,I_"CHECK WHETHER WE HAD ALSO GOOD READ_^1_%SAN€€_"1_^1_%JMP*_!SEOR4_^1_%CLR_"A_^1_%STA*_!(SEOR2+1)_!WITH GOOD READ ONLY FS IS INCOMPATIBLE_^1_%STA*_!(SEOR3+1)_^1_%RAO-_!TEMPOR,I_"SAVE THE PREVIOUSLY CLEARED FLAG_^1_%JMP*_!SEOR4_^1SEOR3 LDA+_!BLNUSR_$CHECK FOR BLANK RECORD_^1_%SAZ_"SEOR4-*-1_!NO_^1_%LDA-_!GOODRD,I_"CHECK FOR SOME GOOD READING_^1_%SAZ_"SEOR4-*-1_^1_%CLR_"A_^1_%STA*_!(SEOR3+1)_!GOOD READING AND BLANK RECORD ARE IN€€COMPATIBLE_^1_%RAO-_!TEMPOR,I_"SAVE THE PREVIOUSLY CLEARED FLAG_^1SEOR4 LDA+_!INCUSR_$CHECK FOR INCMPLETE OR DELETED RECORD_^1_%SAZ_"SEOR5-*-1_!NO_^1_%LDA-_!GOODRD,I_"CHECK WHETHER WE HAD SOME GOOD READING_^1_%SAN_"SEOR5-*-1_!YES. SO WE CAN NOT HAVE DELUSR_^1_%LDA*_!(SEOR2+1)_!CHECK FOR FIELD MARKS ONLY INDICATOR_^1_%SAN_"SEOR5-*-1_!YES. SO WE CAN NOT HAVE DELUSR_^1_%LDA*_!(SEOR3+€€1)_!CHECK FOR BLANK RECORD_^1_%SAN_"SEOR5-*-1_^1_%LDA-_!TEMPOR,I_"CHECK ALSO THE SAVED FLAGS IF ANY_^1_%SAN_"SEOR5-*-1_!IF FLAGS EXISTED IT CAN NOT BE DELETED RECORD_^1_%CLR_"A_^1_%STA*_!(SEOR4+1)_!CLEAR THE INCOMPLETE RECORD INDICATOR_^1_%RAO_"DELUSR_$AND SET THE DELETE RECORD INDICATOR_^1SEOR5 LDQ-_!PTFLD,I_#GET FS NEXT POINTER_^1_%ENA_"0_^1_%STA*_!(H0D),Q_#CLEAR LAST ENTRY_^1_%€€STA-_!STOK1L,I_"CLEAR STOCK FORM SWITCH_^1_%STA-_!STOKFM,I_^1_%LDA-_!FWAINP,I_"GET BUFFER ADDRESS_^1_%INA_"-1_)MINUS ONE_^1_%ADD-_!H8000,I_#SET BY THE BIT_^1_%STA_"FST_(SET FLAG FOR MOVE_^1_%LDA-_!ENDP,I_$CHECK FOR END OF PAGE_^1_%SAZ_"SEOR6-*-1_!NOT YET_^1_%JMP*_!EOP_(GO TO EOP ROUTINE BEFORE EXITING_^1SEOR6 RAO+_!READ_^1_%RAO*_!(SEOR6+1)_^1_%LDA-_!BBFLG,I_/CHECK FOR 3RD PARAMETE€€R_^1_%SAZ_"1_^1_%RAO*_!(SEOR6+1)_^1_%RAO-_!TOP,I_^1_%LDA_"NOFS_*STORE NO OF FS_^1_%STA_"NOFSX_)IN COMMON_^1_%JMP_"(READ)_$RETURN_^1***_]_^1***_]_^1**********************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE PROVIDES THE USER THE NECESSARY INFORMATION_^1*** AT END OF PAGE FOR THE CONTINUATION OF THE PROGRAM_^1***_]_^1***_]_^1EOP_"CLR_"A_€€^1_%STA-_!TOP,I_%SET TOP OF PAGE FLAG_^1_%STA-_!SERVSW,I_"SET SERVO ROUTINE TO BE USED FOR FIRST LINE_^1_%RAO_"EJTUSR_$SET EJECT PAGE USER"S INDICATOR_^1_%JMP*_!SEOR6_%RETURN TO USER_^1***_]_^1***_]_^1*********************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE IS ENTERED EACH TIME A FIELD SEPARATOR IS FOUND_^1*** AND IS VALID. IT REMOVE€€S TRAILING SPACES AND SAVES THE ADDRESS_^1*** OF WHERE THE FIELD SEPARATOR IS STORED_^1***_]_^1***_]_^1FLD_"ADC_"0_^1_%RTJ_"RTS_(REMOVE TRAILING SPACES_^1FLD1_!RAO+_!NOFS_'INCREASE THE F.S. COUNTER BY ONE_^1_%LDA-_!PFWA,I_$GET ADDRESS OF THIS FIELD SEPARATOR_^1_%LDQ-_!PTFLD,I_#GET ADDRESS OF FIELD SEPARATORS TABLE_^1_%STA*_!(H0D),Q_#SAVE FIELD SEPARATOR ADDRESS IN F.S. TABLE_^1_%ST€€A-_!CURFLD,I_"SAVE ALSO AS CURRENT F.S. ADDRESS_^1_%INQ_"1_^1_%STQ-_!PTFLD,I_#INCREMENT TABLE POINTER_^1_%LDA-_!FSEP,I_$GET FIELD SEPARATOR CODE_^1_%STA-_!CHAR,I_$REPLACE IN SAVE CURRENT CHARACTER LOCATION_^1_%JMP*_!(FLD)_%RETURN_^1***_]_^1***_]_^1H0D_"NUM_"0_^1***_]_^1***_]_^1*********************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE I€€S ENTERED WHEN A DLC CODE IS FOUND. IT REMOVES_^1*** THE PREVIOUS CHARACTER FROM THE RECORD, SETS A NEW CHARACTER_^1*** ADDRESS_^1***_]_^1***_]_^1***_]_^1DLC_"ENA_"1_^1_%STA-_!BKUP,I_^1_%RTJ_"BACKUP_$SET THE POINTER BACK ONE CHARACTER_^1_%LDQ_"FWACTL,I_"GET ADDRESS OF CONTROL TABLE_^1_%LDA-_!4,Q_(GET 5TH WORD OF CONTROL TABLE_^1_%AND-_!HFF,I_%SAVE FIELD SEPARATOR_^1_%SUB-_!PCR,I_%C€€OMPARE WITH PREVIOUS CHARACTER_^1_%SAZ_"DLC3-*-1_"IT WAS A FIELD SEPARATOR_^1DLC2_!JMP_"PACK2_%CONTINUE PACKING_^1DLC3_!LDA-_!USRFSF,I_"DECREASE BY ONE THE SPECIAL F.S. COUNTER_^1_%INA_"-1_^1_%STA-_!USRFSF,I_^1_%ENA_"$20_(STORE A BLANK IN PREVIOUS CHRAC.IN PLACE OF F._^1_%STA-_!PCR,I_^1_%LDA-_!PM2LV,I_#CHECK FOR 2-LEVEL DATA STATEMENT_^1_%SAN_"1_^1_%JMP*_!DLC2_'YES CONTINUE PACKING€€_^1_%LDQ-_!PTFLD,I_#GET ADDRESS TO HOLD F.S. ADDRESS_^1_%INQ_"-1_)DECREASE IT BY ONE_^1_%CLR_"A_^1_%STA*_!(H0D),Q_#CLEAR THAT ADDRESS_^1_%STQ-_!PTFLD,I_#UPDATE THE F.S. TABLE POINTER_^1_%INQ_"-1_^1_%LDA*_!(H0D),Q_#GET THE F.S. ADDRESS ACTUALLY NEEDED_^1_%STA-_!CURFLD,I_"UPDATE THE BASIC F.S. ADDRESS_^1_%LDA*_!(FLD1+1)_"DECREASE THE F.S. COUNTER_^1_%INA_"-1_^1_%STA*_!(FLD1+1)_^1_%JM€€P*_!DLC2_'RETURN_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE IS ENTERED WHEN A DELETE FIELD SYMBOL IS ENCOUNTERED_^1*** IT REMOVES ALL DATA UP TO BUT NO INCLUDING THE PREVIOUS FIELD_^1*** SEPARATOR OR TO THE BEGINNING OF THE RECORD WHICH EVER COMES FIRST_^1*** THEN IT ELIMINATES ALL SPACES FOLLOWING T€€HE DELETE FIELD CHARACTER_^1***_]_^1***_]_^1DLF_"LDA-_!PCR,I_%GET PREVIOUS CHARACTER_^1_%SUB-_!CHAR,I_$COMPARE WITH LAST_^1_%SAZ_"DLF1-*-1_"YES THE FIELD MUST BE DELETED_^1_%JMP_"PACK17_$NO. TREAT CURRENT CHARACTER AS DATA_^1DLF1_!STA-_!PCR,I_%CLEAR PREVIOUS CHARACTER READ_^1_%STA-_!SPACE,I_#INITIALIZE CONSECUTIVE SPACE COUNTER_^1_%LDA-_!CURFLD,I_"GET BASE ADDRESS OF CURRENT FIELD_€€^1_%SAN_"DLF2-*-1_"THIS CANNOT BE THE FIRST FIELD OF RECORD_^1_%LDA-_!FWAINP,I_"GET BASE ADDRESS OF RECORD_^1_%JMP*_!DLF3_'STORE AS NEW PACKED BUFFER ADDRESS_^1DLF2_!SAM_"2_^1_%ADD-_!H8000,I_#IF POSITIVE POINT TO LOWER BIT_^1_%JMP*_!DLF3_^1_%AND-_!H7FFF,I_#IF NEGATIVE POINT TO NEXT WORD_^1_%INA_"1_^1DLF3_!STA-_!PFWA,I_^1***_]_^1*** NOW THE UNPACKED POINTER MUST MOVE AFTER THE BLAN€€KS IF ANY_^1***_]_^1DLF4_!LDA-_!BFWA,I_$CHECK FOR OVERFLOWING THE FIELD_^1_%AND-_!H7FFF,I_#DROP THE 15 BIT IF ANY_^1_%INA_"-1_^1_%SUB_"STATI_%COMPARE WITH LWA OF FIELD READ_^1_%SAM_"2_^1_%JMP_"(PACK)_$NOTHING WAS FOUND THAN BLANKS_^1_%LDA-_!BFWA,I_$GET UNPACKED BUFFER ADDRESS_^1_%STA-_!AREAX,I_#STORE FOR CGET ROUTINE_^1_%RTJ_"CGET_'GET A CHARACTER_^1_%LDQ-_!AREAX,I_#GET NEW BUFFER €€POINTER_^1_%STQ-_!BFWA,I_$SAVE IT_^1_%LDA-_!CHAR,I_$GET THE CHARACTER_^1_%INA_"-$20_'CHECK FOR BLANK_^1_%SAN_"1_*NO MORE BLANKS EXIT_^1_%JMP*_!DLF4_'LOOP UNTIL ALL BLANKS ARE SKIPPED_^1_%JMP_"PACK3_^1***_]_^1***_]_^1***********************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE IS ENTERED WHEN A DLL SYMBOL OR DELETE LINE_^1*** CONTROL CHA€€RACTER IS READ. IT SETS UP THE POINTERS OF_^1*** BUFFER AREA AND FIELD SEPARATOR TABLE AS THEY WERE AT THE_^1*** BEGINNING OF THE READ._^1***_]_^1***_]_^1DLL_"LDA-_!PCR,I_%COMPARE WITH PREVIOUS CHARACTER_^1_%SUB-_!CHAR,I_$WHICH MUST BE THE SAME FOR DELETING THE LINE_^1_%SAZ_"DLL1_'YES. IT IS_^1DLL11 JMP+_!PACK17 IT WAS NOT, TREAT IT AS DATA_^1***_]_^1***_]_^1DLL1_!LDA-_!SERFLG,I€€ CHECK WHETHER WE ARE IN SERVO RTN._^1_%SAZ_"1 NO_^1_%JMP*_!(DLL11+1) YES, TREAT THE DELETE LINE AS DATA_^1_%LDA-_!STOK1L,I CHECK FOR STOCK FORM_^1_%SAN_"DLL2-*-1_"YES. IT IS STOCK FORM_^1_%RAO_"INCUSR_$SET INCOMPLETE RECORD FLAG_^1_%RTJ*_!DLL3_^1_%CLR_"A_^1_%STA-_!NXTOVR,I_"CLEAR THE OVERFLOW FLAG IN CASE IT WAS SET_^1_%JMP_"RDD13_%GO TO READ THE NEXT FIELD_^1DLL2_!LDA-_!STOKF€€M,I_"CHECK FOR MULTILINE STOCK FORM_^1_%SAZ_"DLL22-*-1_!IT IS ONE LINE STOCK FORM_^1_%RTJ*_!DLL3_'FORGET ABOUT IT_^1_%JMP*_!DLL4_^1DLL22 RAO_"DELUSR_$SET DELETE RECORD FLAG_^1_%JMP_"SEOR_'END OF RECORD - THE RECORD WAS DELETED_^1*** REPLACE POINTERS AND COUNTERS BY THE SAVED ONES_^1DLL3_!ADC_"0_^1_%LDA-_!SNOFS,I_^1_%STA_"NOFS_^1_%CLR_"A_%CLEAR TRAILING_%CCN1700R1541-001_^1_%STA-_!€€SPACE,I_!SPACE COUNT_%CCN1700R1541-001_^1_%LDA-_!SBFWA,I_^1_%STA-_!BFWA,I_^1_%LDA-_!SPFWA,I_^1_%STA-_!PFWA,I_^1_%LDA-_!SPTFLD,I_^1_%STA-_!PTFLD,I_^1_%LDA-_!SFFSOL,I_^1_%STA-_!FFSOL,I_^1_%LDA-_!SCRFLD,I_^1_%STA-_!CURFLD,I_^1_%LDA-_!SPMDF,I_^1_%STA-_!PMDF,I_^1_%LDA-_!SPMRBA,I_^1_%STA-_!PMRBA,I_^1_%LDA-_!SPMDBL,I_^1_%STA-_!PMDBL,I_^1_%LDA-_!SPM2LV,I_^1_%STA-_!PM2LV,I_^1_%JMP*_!(DLL3)_€€^1DLL4_!CLR_"A_^1_%STA-_!NXTOVR,I_"CLEAR THE OVERFLOW FLAG IN CASE IT WAS SET_^1_%JMP_"RDD11_%AND CONTINUE WITH SAME POINTERS_^1***_]_^1***_]_^1***********************************************************************_^1***_]_^1*** THIS IS USER S ENTRANCE TO ADVANCE PAGE ROUTINE (ALP)_^1***_]_^1***_]_^1ADV15 ADC_"0_^1_%RTJ_"GETI_'SET I REGISTER_^1_%STA-_!SKCNT,I_#SET SKIP COUNT_^1_%€€RTJ*_!ALP_(ADVANCE THE PAGE_^1_%JMP*_!(ADV15)_#RETURN TO USER_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE POSITIONS THE MIRROR TO THE REQUESTED COORDINATE_^1*** AND ADVANCES THE PAGE. UPON ENTRY THE REQUESTED COORDINATE_^1*** MUST BE IN CORD AND THE NUMBER OF LINES TO SKIP IN SKCNT._^1*** IF MAXIMUM N€€UMBER OF LINES IS EXCEEDED_^1*** CHECKS FOR SETTING BLNUSR THEN JUMPS TO EOP ROUTINE_^1***_]_^1***_]_^1ALP_"ADC_"0_^1_%LDA-_!CORD,I_$GET MIRROR COORDINATE_^1_%ADD-_!H300,I_$INSERT CONTROLLER REQUEST CODE_^1_%STA-_!REQST6,I_"STORE THE RESULT IN REQUEST_^1_%LDA-_!SKCNT,I_#GET THE NUMBER OF LINES TO ADVANCE_^1_%INA_"-16_(CHECK WHETHER WE HAVE TO SKIP MORE TIMES_^1_%SAM_"SKLL1_%NO. THE€€ SKIP CAN BE MADE WITH ONE REQUEST_^1_%INA_"1_*GET CORRECT COUNT LEFT_^1_%STA-_!SKCNT,I_#SAVE IT FOR NEXT ADVANCE_^1_%RAO-_!SKAGN,I_#SET FLAG THAT SKIP WILL CONTINUE_^1_%ENA_"15_)SKIP 15 LINES ONLY THIS TIME_^1_%JMP*_!SKLL2_%GO TO SET THE REQUEST_^1SKLL1 CLR_"A_^1_%STA-_!SKAGN,I_#CLEAR FLAG. THIS IS THE LAST TIME WE SKIP_^1_%LDA-_!SKCNT,I_#GET THE NUMBER OF LINES TO SKIP_^1SKLL2 €€INA_"$50_(ENABLE MIRROR POSITIONING-SET ENABLING BIT_^1_%ADD-_!PENV2,I_#SET MINNIE STEP IF ANY_^1_%STA-_!REQST7,I_"PUT IT IN REQUEST_^1_%LDA-_!SKCNT,I_#CHECK THE CASE WE DO NOT HAVE TO SKIP_^1_%SAN_"SKL22-*-1_!WE HAVE TO SKIP_^1_%LDA-_!REQST7,I_"REMOVE THE SKIP BIT.WE DO NOT HAVE TO SKIP_^1_%AND_"=N$FFEF_^1_%STA-_!REQST7,I_^1SKL22 RTJ_"REQST_%EXECUTE THE MOVEMENT_^1_%LDA-_!SKAGN,I€€_#CHECK WHETHER WE HAVE TO SKIP AGAIN_^1_%SAZ_"SKLL3-*-1_^1_%LDA-_!LINE,I_$GET NUMBER OF LINES FROM COUNTER_^1_%INA_"15_)ADD AMOUNT JUST MOVED_^1_%STA-_!LINE,I_^1_%JMP*_!ALP+1_%GO TO CHECK AND COMPLETE PAGE ADVANCE_^1SKLL3 LDA-_!PENV2,I_#CHECK FOR MINISTEP FLAG_^1_%SAN_"ALPEND-*-1 YES. THERE IS MINISTEP OPTION_^1_%LDA-_!SKCNT,I_#GET THE NUMBER ADVANCED THIS TIME_^1_%ADD-_!LINE,I€€_$ADD TO THE LINE COUNTER_^1_%STA-_!LINE,I_$AND UPDATE THE COUNTER_^1_%SUB-_!PB,I_'COMPARE WITH MAXIMUM NUMBER ALLOWED_^1_%SAM_"ALPEND-*-1 NOT YET END_^1_%SAZ_"ALPEND-*-1 WE ARE AT THE LIMIT, BUT CONTINUE_^1_%LDA-_!PB,I_'CHECK FOR ADVFND AS THE VERY FIRST INSTRUCTION_^1_%SAN_"EOPMAX-*-1 IT IS NOT THIS CASE.IT MUST BE END OF PAGE_^1ALPEND CLR_"A_^1_%STA-_!PENV2,I_#CLEAR THE MINIS€€TEP FLAG_^1_%JMP*_!(ALP)_%RETURN_^1EOPMAX RTJ_"PACK_'GO FOR CHECKING AND PACKING THE BUFFER_^1_%RTJ_"BLKRJT_$CHECK FOR REJECTS - BLANK LINE - F.S. ONLY_^1_%LDQ-_!FWAINP,I_"CHECK FOR BLANK RECORD_^1_%LDA*_!(S0S),Q_#GET THE FIRST WORD_^1_%SAN_"2_*THE RECORD IS NOT BLANK_^1_%JMP_"EOP_(GO TO END OF PAGE ROUTINE_^1_%LDA-_!STOK1L,I_"CHECK WHICH FORM WE ACTUALLY RUN_^1_%SAZ_"EOPMX1-*-1 I€€T IS PPF FORM_^1_%LDA-_!STOKFM,I_"CHECK FOR MULTIPLE LINE STOCK FORM RECORD_^1_%SAZ_"EOPMX3-*-1 IT IS ONE RECORD - ONE LINE_^1_%LDA-_!EORMET,I_"THE E.O.R. SYMBOL MUST HAVE BEEN READ_^1_%SAN_"EOPMX3-*-1 O.K. RETURN_^1_%JMP*_!EOPMX2_$THE RECORD IS INCOMPLETE_^1EOPMX1 LDQ-_!FENV1,I_#CHECK WHETHER THE RECORD WAS COMPLETED_^1_%INQ_"4_^1_%LDA*_!(S0S),Q_#GET FIRST WORD OF NEXT ENTRY_^1_€€%AND-_!HE000,I_#ISOLATE PAGE - RECORD - FIELD BITS_^1_%SUB-_!H2000,I_#CHECK FOR NO FIELD ENTRY_^1_%SAN_"EOPMX3-*-1 O.K. ALL RECORD"S FIELDS HAVE BEEN READ_^1EOPMX2 RAO_"INCUSR_$SET INCOMPLETE RECORD INDICATOR_^1EOPMX3 RAO-_!ENDP,I_$SET END OF PAGE FLAG_^1_%JMP_"SEOR_'GO TO FINISH WITH THIS RECORD AND PAGE_^1***_]_^1S0S_"NUM_"0_^1***_]_^1***_]_^1************************************€€************************************_^1***_]_^1***_]_^1*** THIS IS USER"S ENTRANCE TO EJECT PAGE ROUTINE (EJP)_^1***_]_^1***_]_^1EJP15 ADC_"0_^1_%RTJ_"GETI_'SET I REGISTER_^1_%STA-_!SECSRT,I_"SAVE THE SORTING CODE_^1_%RTJ*_!EJ_)EJECT THE PAGE_^1_%JMP*_!(EJP15)_#RETURN_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** €€THIS ROUTINE EJECTS THE PAGE AND SETS TOP OF PAGE FLAG_^1***_]_^1***_]_^1EJ_#ADC_"0_^1_%LDA-_!H400,I_$GET CRC CODE 4_^1_%STA-_!REQST6,I_"STORE IT IN REQUEST_^1_%ENA_"0_*GET ZERO MIRROR CODE_^1_%STA-_!REQST7,I_"STORE IT IN REQUEST_^1EJ1_"RTJ+_!REQST_%ZERO MIRROR_^1_%ENA_"1_*GET CODE FOR PRIMARY SORT_^1_%STA-_!REQST7,I_"STORE IN REQUEST_^1_%LDA-_!SECSRT,I_"CHECK WHETHER FLAG FOR SECO€€NDARY SORT IS SET._^1_%SAZ_"EJ2-*-1_#NO._^1_%ENA_"3_*GET CODE FOR SECONDARY SORT_^1_%STA-_!REQST7,I_"STORE IT IN REQUEST_^1EJ2_"RTJ*_!(EJ1+1)_#SORT THE DOCUMENT_^1_%ENA_"0_^1EJ3_"STA+_!EJTUSR_$CLEAR THE EJECT PAGE USER"S INDICATOR_^1_%STA-_!SERVSW,I_"CLEAR THE FIRST TIME SERVO SWITCH_^1_%STA-_!TOP,I_%SET TOP OF PAGE FLAG_^1_%JMP*_!(EJ)_'RETURN_^1***_]_^1***_]_^1********************€€****************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE SETS UP THE REQUEST BLOCK FOR A LINE LOCATE_^1***_]_^1***_]_^1LL_#ADC_"0_^1_%INA_"-20_^1_%SAP_"1_^1_%CLR_"A_^1_%STA-_!CORD,I_^1_%CLR_"A_^1_%STA-_!SKCNT,I_^1_%RTJ*_!ALP_^1_%LDA-_!P6,I_^1_%INA_"-5_)A REGISTER ENTERS WITH LL COORDINATE_^1_%STA-_!CORD,I_$STORE COORDINATE TO START_^1LL1_"RTJ+_!ALP_(P€€OSITION MIRROR_^1_%LDA-_!H400,I_$GET THE CRC CODE_^1_%STA-_!REQST6,I_"STORE IT IN REQUEST_^1_%LDA-_!H02,I_%GET CODE FOR LINE LOCATE_^1_%STA-_!REQST7,I_"STORE IT IN REQUEST_^1_%RTJ_"REQST_%EXECUTE LINE LOCATE_^1_%LDA-_!REQST5,I_"GET DRIVER S REPLY_^1_%AND-_!HE000,I_#SAVE V FIELD_^1_%SUB-_!H4000,I_#CHECK FOR LL FAILURE_^1_%SAN_"ENDLL-*-1_!O.K. EXIT_^1_%LDA_"=N$4C4C_#SET LL FAILURE CO€€DE_^1_%JMP_"ERP_^1ENDLL JMP*_!(LL)_'RETURN_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE CHECKS THE FORM NUMBER AGAINST THAT SPECIFIED_^1*** BY THE PAGE STATEMENT. IF NUMBER IS INVALID CONTROL IS GIVEN_^1*** TO ERROR HANDLER._^1***_]_^1***_]_^1CKFN_!ADC_"0_^1_%LDA-_!P6,I_'GET LINE LOCATE COORDINATE_^1€€_%STA-_!P5,I_'SAVE IT FOR THE READ0 ROUTINE_^1_%INA_"-5_^1_%STA-_!CORD,I_$SAVE COORDINATE FOR POSITIONING THE MIRROR_^1_%RTJ*_!(LL1+1)_#POSITION MIRROR_^1_%LDA-_!P6,I_'GET LINE LOCATE COORDINATE_^1_%INA_"$35_(ADD $35 UNITS_^1_%ALS_"8_^1_%STA-_!P4,I_'STORE IT AS RIGHT SCAN LIMIT_^1_%RTJ_"READ0_%READ_^1CKFN1 RTJ+_!CGET_'GET A CHARACTER_^1_%SAN_"1_^1_%JMP*_!BADFRM_$THE BUFFER IS EMPT€€Y - ERROR_^1_%SUB-_!P7,I_'COMPARE WITH FIRST DIGIT_^1_%SAZ_"1_*P.K. THERE IS COMPARE_^1_%JMP*_!CKFN1_%IF NO, TRY AGAIN_^1_%RTJ*_!(CKFN1+1)_^1_%SUB-_!P8,I_'COMPARE WITH SECOND DIGIT_^1_%SAZ_"1_*O.K. THERE IS COMPARE_^1_%JMP*_!BADFRM_$IF NO COMPARE - ERROR_^1_%RTJ*_!(CKFN1+1)_!GET THE NEXT CHARACTER_^1_%SUB-_!P9,I_'COMPARE WITH THIRD CHARACTER_^1_%SAZ_"CKFN2-*-1_!O.K. RETURN_^1BAD€€FRM LDA_"=N$464E_#SET BAD FORM NUMBER CODE_^1_%JMP*_!ERP_(GO PROCESS ERROR_^1CKFN2 JMP*_!(CKFN)_$RETURN_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS IS THE ERROR ROUTINE WHICH IS USED WHEN THE LL SEARCHING_^1*** WAS A FAILURE OR THE FORM NUMBER WAS INCORRECT._^1*** IN BOTH CASES A MESSAGE IS GIVEN AND THE PAG€€E SORTED TO SECONDARY_^1***_]_^1***_]_^1ERP_"RAO-_!SECSRT,I_"SET SECONDARY SORT FLAG_^1_%RTJ*_!MSG_(PRINT MESSAGE_^1_%RTJ*_!EJ_)EJECT THE PAGE_^1_%RTJ*_!WAIT_'GET THE OPERATOR"S REPLY_^1_%LDA_"EOFUSR_/CCN1700R1540-003_^1_%SAZ_"2_"CHECK EOF_'CCN1700R1540-003_^1_%JMP_"SEOR6_0CCN1700R1540-003_^1_%JMP_"SKIPLL-2_^1***_]_^1***_]_^1***_]_^1MSG_"ADC_"0_^1_%STA*_!MSG1_'SAVE MESSAGE CODE_^1_€€%RTJ-_!($F4)_%TYPE THE MESSAGE_^1_%NUM_"$0C00_%FWRITE CODE_^1_%ADC_"CMP1_'COMPLETION ADDRESS_^1_%ADC_"$0000_%THREAD_^1_%NUM_"$18FC_%LOGICAL UNIT_^1_%NUM_"$0002_%LENGTH OF MESSAGE_^1_%ADC_"MSG1_'FWA OF MESSAGE_^1_%LDA*_!MSG+5_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(MSG)_%RETURN_^1***_]_^1***_]_^1WAIT_!ADC_"0_*GET THE OPERATOR"S REPLY_^1_%RTJ-_!($F4)_^1_%ADC_"$0800_^1_%ADC_"CMP1_^1_%NUM_€€"$0000_^1_%NUM_"$18FD_^1_%NUM_"$0001_^1_%ADC_"MSG2_^1_%LDA*_!WAIT+4_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(WAIT)_^1***_]_^1***_]_^1MSG1_!NUM_"0,$200D_^1MSG2_!NUM_"1_^1***_]_^1***_]_^1**************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE SETS UP THE REQUEST BLOCK TO SET THE MODES_^1*** ON THE 915. IT USES THE ENVIRONMNET TABLE ENTRY TO DETER€€-_^1*** MINE THE SCAN HEIGHT._^1***_]_^1***_]_^1MODSET ADC_"0_^1_%LDA-_!H400,I_$REQUEST CODE IS 2_^1_%STA-_!REQST2,I_"STORE $400 IN REQUEST_^1_%LDQ-_!FWACTL,I_"GET ADDRESS OF CONTROL TABLE_^1_%LDA-_!3,Q_(GET THE 4TH WORD OF CONTROL TABLE_^1_%AND-_!HFF,I_%ISOLATE END OF LINE CHARACTER_^1_%ADD-_!H200,I_$SET ALSO CRC CODE_^1_%STA-_!REQST6,I_"STORE IN REQUEST_^1_%LDA-_!7,Q_(GET 8TH WOR€€D OF CONTROL TABLE_^1_%AND-_!HF00,I_$ISOLATE NUMBER OF BLANKS_^1_%ARS_"4_*POSITION TO BITS 4-7_^1_%STA-_!TEMPOR,I_"SAVE IT FOR REFERENCE_^1_%LDA-_!P2,I_'GET SCAN HEIGHT INDICATOR_^1_%AND-_!H100,I_$STRIP SCAN BIT_^1_%ALS_"1_*POSITION IT_^1_%ADD-_!H100,I_$COMBINE WITH 2 CHARACTERS PER WORD MODE_^1_%ADD-_!TEMPOR,I_"COMBINE WITH NUMBER OF BLANKS_^1_%STA-_!REQST7,I_"STORE IN REQUEST_^1_€€%LDQ-_!FONT,I_.GET FONT_^1_%LDA*_!FONTAB,Q_,DRIVER FONT BITS_^1_%ADD-_!REQST7,I_^1_%STA-_!REQST7,I_,MERGE IN REQUEST_^1_%RTJ_"(EJ1+1) EXECUTE REQ._"CCN1700R1540-003_^1_%JMP*_!(MODSET)_"RETURN_^1FONTAB NUM_"$0000_*ANSI_^1_%NUM_"$0400_0HP_^1_%NUM_"$0404_0HP,X_^1_%NUM_"$0402_0DEG.ANSI_^1_%NUM_"$0406_1GOTHIC_^1***_]_^1***_]_^1***********************************************************€€*************_^1***_]_^1***_]_^1*** FIND AND SAVE PAGE, RECORD AND FIELD ENVIRONMENT TABLE ENTRY ADDRESS_^1***_]_^1***_]_^1ENVST ADC_"0_^1_%LDA-_!FFLAG,I_#CHECK FOR ALREADY PRESENSE OF FIELD_^1_%SAZ_"2_*NO_^1_%LDQ-_!FENV1,I_#PUT IN Q THE PROBABLE ACTUAL POINTER_^1_%JMP*_!FPRESN_^1_%LDQ_"(READ)_$GET DATA ADDRESS. WE ARE AT RECORD LEVEL_^1_%LDQ-_!3,Q_(GET THE ENVIRONMENT ADDRESS_^1€€_%LDA*_!(E0V),Q_#CHECK WHETHER IT IS THE FIRST RECORD_^1_%SAM_"1_*YES BECAUSE WE HAVE THE ADDRESS OF PAGE_^1_%JMP*_!*+2_^1_%INQ_"6_^1_%STQ-_!ENVNPT,I_"SAVE IT TO GET THE RECORD S PARAMETERS_^1_%STQ-_!RENV1,I_^1_%LDA_"(E0V),Q_#GET THE FIRST WORD_^1_%STA-_!P0,I_'SAVE IN TWO LOCATIONS FOR CHECKING P,R,F_^1_%STA-_!P1,I_^1FPRESN INQ_"4_*POINT TO NEXT GROUP_^1_%STQ-_!FENV1,I_#SAVE IT FOR€€ PROBABLE FIELD_^1_%LDA*_!(E0V),Q_#GET THE FIRST PARAMETER OF NEXT ENTRY_^1_%AND-_!HE000,I_#ISOLATE PAGE - RECORD - FIELD BITS_^1_%SUB-_!H2000,I_#CHECK FOR FIELD_^1_%SAZ_"NXTFLD-*-1 YES. GO TO TREAT THE NEXT FIELD_^1_%LDA-_!ENVNPT,I_"CHECK WHETHER WE HAVE RECORD WITHOUT FIELDS_^1_%SUB-_!RENV1,I_^1_%SAZ_"YSSERV-*-1 IT IS THE NEXT RECORD STOCK FORM_^1_%LDA-_!SERFLG,I_"CHECK WHETHE€€R WE ARE IN SERVO ROUTINE_^1_%SAN_"YSSERV-*-1 YES.SO FORGET ABOUT EXITING_^1_%JMP_"SEOR_'ALL FIELDS OF CURRENT RECORD PROCESSED_^1YSSERV RAO-_!STOK1L,I_"SET STOCK FORM FLAG_^1_%JMP*_!(ENVST)_#RETURN_^1NXTFLD RAO-_!FFLAG,I_#SET FIELD FLAG_^1_%LDA-_!FENV1,I_#ADAPT THE POINTER_^1_%STA-_!ENVNPT,I_"TO THE CURRENT FIELD_^1_%CLR_"A_^1_%STA-_!STOK1L,I_"CLEAR THE STOCK FORM FLAG_^1_%JMP*_!€€(ENVST)_#RETURN_^1***_]_^1E0V_"NUM_"0_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE IS SETTING THE PROPER WORD OF THE ENVIRONMENT_^1*** DIVISION AS WELL AS THE MASKING BITS AND THEN_^1*** IT GIVES CONTROL TO THE PRMGET ROUTINE TO FIND_^1*** AND STORE THE PARAMETERS_^1***_]_^1***_]_^1PARAM ADC_"0_^1_%EN€€Q_"0_*SET Q TO FIRST WORD_^1_%LDA-_!H300,I_$SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$GET SCAN HEIGHT_^1_%ENQ_"0_*SET Q TO FIRST WORD_^1_%LDA-_!HFF,I_%SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$GET SKIP PARAMETER_^1_%ENQ_"1_*SET Q TO SECOND WORD_^1_%LDA-_!HFF00,I_#SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$GET THE RIGHT SCAN LIMIT_^1_%ENQ_"1_*SET Q TO SECOND WORD_^1_%LDA-_!HFF,I_%SET A TO €€MASKING BITS_^1_%RTJ*_!PRMGET_$GET THE LEFT SCAN LIMIT_^1_%LDA-_!P1,I_'ARE WE GETTING PAGE PARAMETERS_^1_%SAM_"1_*YES. CONTINUE_^1_%JMP*_!PARAM1_$EXIT. NO NEED FOR OTHER PARAMETER_^1_%ENQ_"2_*SET Q TO 3D WORD_^1_%LDA-_!HFF,I_%SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$GET LINE LOCATE COORDINATE_^1_%ENQ_"4_*SET Q TO 5TH WORD_^1_%LDA-_!HFF00,I_#SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$€€GET FIRST ID CHARACTER_^1_%LDA-_!P7,I_'GET THE FIRST IDENTIFICATION CHARACTER_^1_%ALS_"8_*POSITION IT_^1_%STA-_!P7,I_^1_%ENQ_"4_*SET Q TO 5TH WORD_^1_%LDA-_!HFF,I_%SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$GET THE SECOND ID. CHARACTER_^1_%ENQ_"5_*SET Q TO 6TH WORD_^1_%LDA-_!HFF00,I_#SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$GET THE 3D CHARACTER_^1_%LDA-_!P9,I_'GET THE STORED THIRD CHAR€€ACTER_^1_%ALS_"8_*POSITION IT_^1_%STA-_!P9,I_^1_%ENQ_"5_*SET Q TO 6TH WORD_^1_%LDA_"=N$80_%SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$GET CONTINUOUS FORM FLAG_^1_%ENQ_"5_*SET Q TO 6TH WORD_^1_%LDA-_!H7F,I_%SET A TO MASKING BITS_^1_%RTJ*_!PRMGET_$GET MAXIMUM NUMBER OF LINES_^1_%JMP*_!NOLOCF_^1PARAM1 LDA-_!FFLAG,I_*CHECK FOR FIELD_^1_%SAN_"1_7SKIP YES_^1_%JMP*_!NOLOCF_^1_%LDQ-_!ENVNPT,€€I_^1_%LDA-_!2,Q_13RD WORD_^1HE_#AND_"=N$E000_,FONT_^1_%SUB*_!HE+1_0CHECK DEFAULT_^1_%SAZ_"RCFNT_*SKIP --- YES_^1_%ADD*_!HE+1_0RESTORE_^1_%ALS_"3_^1_%JMP*_!FLDFNT_^1RCFNT LDA-_!FONTR,I_!USE RECORD FONT_^1FLDFNT STA-_!FONT,I_^1_%ENA_"P2_^1_%STA*_!SPM_^1_%LDA-_!SERFLG,I_^1_%SAZ_"1_^1_%JMP*_!(PARAM)_,NO LL IN SERVO_^1_%LDA-_!2,Q_13RD WORD AGAIN_^1_%AND-_!HFF,I_/LOC BITS_^1_%SAZ_"NOLOC€€F_/TEST FOR LL_^1_%RTJ*_!LLRF_^1_%JMP*_!(PARAM)_^1NOLOCF ENA_"P2_^1_%STA*_!SPM_(INITIALIZE FOR NEXT TIME_^1_%JMP*_!(PARAM)_^1***_]_^1***_]_^1SPM_"ADC_"P2_)PARAMETER STORAGE ADDRESS_^1***_]_^1***_]_^1***_"THIS ROUTINE PERFORMS LINE LOCATING ON RECORD_^1***_"AND FIELD REQUESTS_^1***_]_^1LLRF_!NOP_]_^1_%STA-_!CORD,I_^1_%ENA_"3_^1_%STA*_!LLOOP_^1DOLL_!CLR_"A_^1_%STA-_!SKCNT,I_^1_%RTJ_"€€ALP_^1_%LDA-_!H400,I_^1_%STA-_!REQST6,I_^1_%LDA-_!H02,I_^1_%STA-_!REQST7,I_^1_%RTJ_"REQST_^1_%LDA-_!REQST5,I_^1_%AND-_!HE000,I_^1_%SUB-_!H4000,I_^1_%SAN_"ENDLRF_^1_%LDA*_!LLOOP_^1_%INA_"-1_^1_%SAZ_"LLER_^1_%STA*_!LLOOP_^1_%JMP*_!DOLL_^1ENDLRF JMP*_!(LLRF)_^1LLER_!RAO_"LOCUSR_^1_%LDA_"=XDINP_)FWA OF INPUT BUFFER_^1_%SUB-_!BFWA,I_(CHECK FOR INCOMPLETE RECORD_^1_%SAZ_"NOTINC_^1_%RAO_"€€INCUSR_^1NOTINC JMP_"SEOR_^1LLOOP NUM_"0_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE GETS THE PARAMETERS FROM THE ENVIRONMENT TABLE_^1*** AND STORES THEM FOR USE BY OTHER ROUTINES. UPON ENTRY Q MUST BE SET_^1*** TO THE NUMBER OF WORDS IN THE ENV TABLE AND A REGISTER MUST CONTAIN_^1*** THE MASKING BITS._^1**€€*_]_^1***_]_^1PRMGET ADC_"0_^1_%STQ*_!PRQ_(SAVE Q_^1_%STA*_!PRA_(SAVE A_^1_%ADQ-_!ENVNPT,I_"ADD THE ADDRESS OF ENV TABLE ENTRY_^1PRM1_!AND*_!(E0),Q_$MASK WORD WITH BITS IN A REGISTER_^1_%STA*_!SAVPAR_$SAVE THE PARAMETERS_^1_%SAZ_"PRM3-*-1_"IF ZERO FIND DEFAULT OPTION_^1PRM2_!STA*_!(SPM),I_#OTHERWISE STORE THE PARAMETER PROPERLY_^1_%RAO*_!SPM_(INCREMENT STORAGE POINTER FOR NEXT PARA€€METER_^1_%LDA-_!P1,I_'GET ORIGINAL PAGE, RECORD, FIELD FLAG_^1_%STA-_!P0,I_'RESTORE IT FOR NEXT TIME_^1_%JMP*_!(PRMGET)_"RETURN_^1* GET FALL BACK DEFAULT OPTIONS WHEN NECESSARY_^1PRM3_!LDA-_!P0,I_'CHECK WHETHER WE HAVE ALREADY LOOPED_^1_%SAN_"1_*NO._^1_%JMP*_!PRM5_'YES_^1_%LDQ-_!ENVNPT,I_"CHECK THE LEVEL WE ARE_^1_%LDA*_!(E0),Q_^1_%SAP_"PRM4-*-1_"MUST BE RECORD OR FIELD_^1_%LDA*_!S€€AVPAR_$IT IS PAGE LEVEL, STORE IT EVEN IF ZERO_^1_%JMP*_!PRM2_'GO TO STORE IT_^1PRM4_!ALS_"2_*CHECK FOR RECORD OR FIELD_^1_%SAM_"PRM6-*-1_"IT IS FIELD LEVEL_^1PRM5_!LDQ*_!PRQ_^1_%ADQ-_!PENV1,I_#FALL BACK TO PAGE PARAMETER_^1_%LDA*_!PRA_^1_%AND*_!(E0),Q_^1_%JMP*_!PRM2_'GO TO STORE IT_^1PRM6_!ENA_"0_*SET FLAG FOR HAVING GOT RECORD PARAMETER_^1_%STA-_!P0,I_^1_%LDQ*_!PRQ_^1_%ADQ-_!RENV€€1,I_#FALL BACK TO RECORD PARAMETER_^1_%LDA*_!PRA_^1_%JMP*_!PRM1_^1***_]_^1***_]_^1PRA_"NUM_"0_*SAVE CONTENTS OF A REGISTER ON ENTRY_^1PRQ_"NUM_"0_*SAVE CONTENTS OF Q REGISTER ON ENTRY_^1SAVPAR NUM_"0_*SAVE PARAMETER TEMPORARILY_^1E0_#NUM_"0_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE FOR THE FIRST NON€€ BLANK LINE AND THROUGH_^1*** MINISTEPS AND REJECT CHECKING IS ALIGNING THE MIRROR OVER IT_^1***_]_^1***_]_^1SERVO ADC_"0_^1_%RAO-_!SERFLG,I_"SET FLAG WE ARE IN SERVO ROUTINE_^1_%ENA_"0_^1SER0_!STA+_!DINP_'CLEAR THE FIRST WORD OF INPUT BUFFER_^1_%ENA_"-5_^1_%STA-_!SERCNT,I_"REINITIALIZE THE REJECT COUNTER_^1_%RTJ_"ENVST_%GET THE ENVIRONMENT POINTER_^1_%RTJ_"PARAM_%GET AND SAVE PAR€€AMETERS_^1_%RTJ_"MODSET_$SET MODE OF READING_^1_%CLR_"A_^1_%STA-_!STOK1L,I_"CLEAR THE STOCK FLAG IF ANY_^1_%LDA-_!SERVSW,I_"CHECK WHETHER IT IS THE FIRST LINE TO READ_^1_%SAN_"SER2-*-1_"NO_^1_%LDQ-_!FWACTL,I_"GET THE ADDRESS OF CONTROL TABLE_^1_%LDA-_!6,Q_(GET THE 7TH WORD OF TABLE_^1_%AND-_!H3F,I_%ISOLATE THE SKIP BITS TO THE FIRST LINE_^1_%STA-_!SKCNT,I_#ADVANCE ONE LINE NOT TO H€€ANG ON THE LL IF ANV._^1SER1_!RTJ+_!ALP_(SKIP TO THE FIRST LINE TO READ_^1SER2_!ENA_"0_^1_%STA-_!SKCNT,I_#AVOID TO SKIP AGAIN_^1_%LDA-_!P5,I_'GET THE LEFT SCAN LIMIT_^1_%INA_"-10_^1_%STA-_!CORD,I_$CONSIDER FOR POSITIONING THE MIRROR LSL -10_^1_%LDA-_!FFLAG,I_"CHECK FOR PPF FORM_^1_%SAN_"SER3-*-1_"YES.CONSIDER THE REAL RIGHT COORDINATE_^1_%LDA-_!P5,I_'GET THE LEFT SCAN LIMIT AGAIN_^€€1_%INA_"$30_(ADD 30 HEX UNITS_^1_%ALS_"8_*POSITION IT_^1_%STA-_!P4,I_'CONSIDER AS RIGHT SCAN LIMIT LSL+$30_^1SER3_!RTJ*_!(SER1+1)_"POSITION THE MIRROR_^1SER303 LDA+_!SERV15_$CHECK WHETHER IT IS THE TOP LINE_^1_%SAZ_"SER33-*-1_!YES.THIS IS THE TOP LINE_^1_%RTJ*_!SER4_'USE CLOSE SCAN MODE,CONSIDERING SINGLE SPACING_^1_%ENA_"$20_(SET MINISTEP OPTION_^1_%STA-_!PENV2,I_^1SER33 RTJ+_!RE€€AD0_%READ THIS PART OF LINE_^1SER34 RTJ+_!PACK_'PACK THE BUFFER_^1SER35 RTJ+_!DLL3_'REINITIALIZE THE POINTERS TO AVOID OVERFLOW_^1_%RTJ_"BLKRJT_$SET PROPER FLAGS_^1_%LDA_"BLNUSR_$CHECK FOR BLANK LINE_^1_%SAZ_"1_^1_%JMP*_!SERZZ_^1_%LDA_"FLDMK1_$CHECK FOR F.S. ONLY_^1_%SAN_"SERZZ-*-1_$YES.CONSIDER IT AS A BLANK LINE_^1_%JMP*_!SER44_^1SERZZ RTJ*_!CLRFLG_^1_%LDA*_!(SER303+1)_^1_%SAZ€€_"SERXX-*-1_^1_%ENA_"2_^1_%JMP*_!SERXX+1_^1SERXX ENA_"1_^1_%STA-_!SKCNT,I_^1_%JMP*_!SER3_'TRY AGAIN_^1SER44 RTJ*_!SER4_'CLOSE SCAN MODE - ADVANCE BY MINISTEPS_^1_%RTJ*_!CLRFLG_^1_%CLR_"A_^1_%STA*_!(SER0+1)_"CLEAR THE FIRST WORD OF BUFFER_^1_%STA-_!SKCNT,I_#SUPPRESS PAGE ADVANCE_^1SER5_!RTJ*_!(SER1+1)_"REVERSE MIRROR_^1_%RTJ*_!(SER33+1)_!READ THE LINE AGAIN_^1_%RTJ*_!(SER34+1)_!€€PACK THE BUFFER_^1_%RTJ*_!(SER35+1)_!REINITIALIZE THE POINTERS_^1_%LDA*_!(SER0+1)_"CHECK THE FIRST WORD OF BUFFER_^1_%SAN_"SER7-*-1_"NOW GO TO CHECK FOR REJECTS_^1SER6_!ENA_"2_*ADVANCE 2 MINISTEPS_^1_%STA-_!SKCNT,I_^1_%ENA_"$20_(SET THE MINISTEP BIT_^1_%STA-_!PENV2,I_^1_%JMP*_!SER5_'TRY AGAIN_^1SER7_!RTJ*_!STATUS_)GET THE STATUS_^1_%AND-_!H400,I_$CHECK FOR REJECTS_^1_%SAN_"1_*WE HA€€VE REJECTS_^1_%JMP*_!SER8_'O.K. NO REJECTS - EXIT_^1_%LDA*_!(SER0+1)_"GET THE FIRST WORD OF INPUT_^1_%EOR_"=N$4040_#CHECK WHETHER BOTH CHARACTERS ARE REJECTS_^1_%SAZ_"1_*YES._^1_%JMP*_!SER8_'RETURN FOR FINAL CHECKING_^1_%LDA-_!SERCNT,I_"CHECK FOR LIMIT OF TRIES_^1_%SAN_"1_*WE CAN TRY AGAIN_^1_%JMP*_!SER8_'ENOUGH TRIES. RETURN IN SPITE OF REJECTS_^1_%RAO-_!SERCNT,I_"COUNT ONE MORE €€TIME OF REJECTS_^1_%ENA_"0_^1_%STA-_!SKCNT,I_#NO PAGE ADVANCE ANY MORE_^1_%RTJ*_!(SER1+1)_"POSITION THE MIRROR_^1_%RTJ*_!(SER33+1)_!READ AGAIN_^1_%RTJ*_!(SER34+1)_!PACK THE BUFFER_^1_%RTJ*_!(SER35+1)_!REINITIALIZE THE POINTERS_^1_%JMP*_!SER7_^1SER8_!RAO-_!SERVSW,I_"SET SWITCH THAT FIRST LINE WAS SERVOED_^1_%RAO-_!TOP,I_%SET NOT TOP OF PAGE FLAG_^1SER9_!CLR_"A_^1_%STA-_!FFLAG,I_#CLE€€AR THE FIELD FLAG TO START FROM FIRST FIELD_^1_%STA-_!SERFLG,I_"CLEAR THE SERVO IN ACTION FLAG_^1_%RTJ*_!CLRFLG_$CLEAR USER"S FLAGS_^1_%JMP*_!(SERVO)_#RETURN_^1***_]_^1SER4_!ADC_"0_*CLOSE SCAN MODE REQUEST_^1_%RTJ-_!($F4)_^1_%NUM_"$0400_^1_%ADC_"CMP1_^1_%NUM_"$0000_^1SEZ_"NUM_"$000A_^1_%NUM_"$0200_^1_%NUM_"$03F0_^1_%LDA*_!SEZ-1_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(SER4)_$RETURN_^1**€€*_]_^1***_]_^1**********************************************************************_^1***_]_^1***_]_^1*** INITIALIZE RECORD PARAMETERS ROUTINE_^1INIT_!ADC_"0_^1_%LDA_"=XDINP_$GET FWA OF INPUT AREA_^1_%STA-_!FWAINP,I_"SAVE IT_^1_%STA-_!PFWA,I_$INITIALIZE PACKED BUFFER POINTER_^1_%STA-_!BFWA,I_$INITIALIZE UNPACKED BUFFER POINTER_^1_%STA-_!AREAX,I_#INITIALIZE POINTER FOR GET CHARACTE€€R ROUTINE_^1_%LDA_"=XFST+1_#GET ADDRESS OF FIELD SEPARATOR TABLE_^1_%STA-_!PTFLD,I_#INITIALIZE F.S. ADDRESS POINTER_^1_%STA-_!FFSOL,I_#SET FOR ADDRESS OF FIRST F.S._^1_%TRA_"Q_^1_%ENA_"0_^1_%STA*_!(IZ),Q_$CLEAR SECOND F.S. TABLE WORD_^1_%INQ_"-1_^1_%STA*_!(IZ),Q_$CLEAR FIRST F.S. TABLE WORD_^1_%RTJ*_!CLRFLG_$CLEAR REMAINING USERS INDICATORS_^1_%STA-_!GOODRD,I_"CLEAR GOOD READING CO€€UNTER_^1_%STA*_!NOFS_'CLEAR USERS F.S. COUNTER_^1_%STA-_!STOK1L,I_"CLEAR THE STOCK FORM FLAG_^1_%STA-_!NXTOVR,I_"CLEAR NEXT READING BUFFER WILL OVERFLOW_^1_%JMP*_!(INIT)_$RETURN_^1***_]_^1IZ_#NUM_"0_^1NOFS_!NUM_"0_*NUMBER OF FIELD SEPARATORS IN RECORD_^1***_]_^1***_]_^1*********************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE IS CLEARI€€NG USERS FLAGS_^1CLRFLG ADC_"0_^1_%CLR_"A_^1_%STA_"RJRUSR_$REJECTS ON RECORD USER S INDICATOR_^1_%STA_"BUFUSR_$BUFFER OVERFLOW USER"S INDICATOR_^1_%STA_"EJTUSR_$EJECT PAGE USER S INDICATOR_^1_%STA_"BLNUSR_$BLANK LINE USER S INDICATOR_^1_%STA_"FLDMK1_$FIELD MARKS ONLY USER S INDICATOR_^1_%STA_"INCUSR_$INCOMPLETE RECORD USER S INDICATOR_^1_%STA_"DELUSR_$DELETE RECORD USER S INDICATOR€€_^1_%STA_"JAMUSR_$JAMMING OF PAPER USER"S INDICATOR_^1_%STA_"LOCUSR_^1_%JMP*_!(CLRFLG)_"RETURN_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE INITIALIZES THE I REGISTER WHEN NEEDED_^1***_]_^1***_]_^1GETI_!ADC_"0_^1_%LDQ_"=XREQST_#GET REQUEST ADDRESS FOR RELATION_^1_%STQ-_!I_*SET INDEX REGISTER_^1_%JMP*_!€€(GETI)_$RETURN_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** THIS ROUTINE WILL BACKUP THE PACKED BUFFER POINTER_^1*** THE NUMBER OF CHARACTERS CONTAINED IN BKUP LOCATION._^1***_]_^1***_]_^1BACKUP ADC_"0_^1_%LDA-_!PFWA,I_$GET THE PACKED BUFFER POINTER_^1_%SAM_"3_*IF NEGATIVE BRANCH_^1_%INA_"-1_)IF NOT DECREMENT ADDRE€€SS_^1_%ADD-_!H8000,I_#AND TURN ON UPPER BIT_^1_%JMP*_!*+2_(GO TO STORE IT_^1_%AND-_!H7FFF,I_#STRIP UPPER BIT_^1_%STA-_!PFWA,I_$SAVE POINTER_^1_%LDA-_!BKUP,I_$GET BACKUP COUNT_^1_%INA_"-1_)DECREMENT IT_^1_%SAN_"1_*CHECK FOR END_^1_%JMP*_!(BACKUP)_"END-RETURN_^1_%STA-_!BKUP,I_$IF NOT, SAVE NEW BACKUP COUNT_^1_%JMP*_!BACKUP+1_"AND CONTINUE_^1***_]_^1***_]_^1***************************€€*********************************************_^1***_]_^1***_]_^1*** THIS ROUTINE REMOVES TRAILING SPACES FROM PACKED BUFFER_^1***_]_^1***_]_^1RTS_"ADC_"0_^1_%LDA-_!SPACE,I_#GET CONSECUTIVE SPACE COUNT_^1_%SAZ_"NORTS -*-1 RETURN IF NO BLANK_^1_%STA-_!BKUP,I_$STORE THE NUMBER IN BACKUP COUNTER_^1_%RTJ*_!BACKUP_$GO REMOVE THE TRAILING SPACES_^1_%ENA_"0_5CCN1700R1540-002_^1_%STA-_!SPA€€CE,I_.CCN1700R1540-002_^1NORTS JMP*_!(RTS)_%RETURN_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1*** STANDARD STATUS ROUTINE_^1***_]_^1***_]_^1STATUS ADC_"0_^1_%RTJ-_!($F4)_^1_%NUM_"$0600_^1_%NUM_"$000A_^1_%ADC_"TAB002_^1_%STA*_!STATA_%SAVE A REGISTER STATUS_^1_%LDA-_!I_^1_%STA*_!STATI_%SAVE LWA READ IN BUFFER_^1_%RTJ*€P_!GETI_'REINITIALIZE THE "I" REGISTER_^1_%LDA*_!STATA_%PUT AGAIN THE STATUS IN A REGISTER_^1_%JMP*_!(STATUS)_"RETURN_^1***_]_^1STATA ADC_"0_*SAVED STATUS FROM A REGISTER_^1STATI ADC_"0_*SAVED LWA FROM I REGISTER_^1***_]_^1***_]_^1************************************************************************_^1***_]_^1***_]_^1_%END_"DZ_^__PPMOVOCR CSY/ P€1_%NAM MOVOCR_'OCR MOVE DRAFT 5.1 12/02/74_^1_%ENT_"MOVOCX_^1_%EXT_"MOVSTR_^1_%EXT_"BCOMP_^1_%EXT_"FETCH_^1_%EXT_"STORE_^1_%EXT_"LDBFLD_^1_%DAT_"UNUSED(3),DCTL(1),DFOR(1)_^1_%COM_"DUMMY(1),SEPTAB(100)_^1_%SPC_"3_^1*_]_^1* MOVE EQUATES TO REFERENCE MOVE LOCAL STORAGE_^1*_]_^1_%EQU_"C1(1),C2(2),C3(3),C4(4)_^1_%EQU_"AFLD(5),AFLD1(6),AFLD2(7),BFLD(8),BFLD1(9),BFLD2(10)_^1_%EQU_"ABYTE€€(11),BBYTE(12),ASIZE(13),BSIZE(14)_^1_%EQU_"AFRAC(15),BFRAC(16),P2(17),P1(18),HOLD(19)_^1_%EQU_"HOLD2(20),AB(21),BB(22),ANO(23),BNO(24)_^1_%EQU_"CHAR(25),FLAG1(26),FLAG2(27)_^1_%EQU_"FLDSEP(28),FTABLE(29)_^1_%EQU_"CHAR1(6),SIGNSW(4),SEPSW(18)_^1***********************************************************************_^1*_]_^1* FOLLOWING IS FOR MOVE FROM INPUT AREA TO WORKING STORAGE.€€_^1*_]_^1*_]_^1*_]_^1*_]_^1* GO TO CONTROL TABLE (WORD 5 BYTE 2) AND GET THE FIELD SEPARATOR._^1*_]_^1MOVOCX NOP_"0_-ENTRY TO MOVOCR_^1_%EQU_"MOVOCR(MOVOCX)_^1_%LDQ_"DCTL_^1_%STQ*_!DCTLX+1_'THIS CODE EQUIVELENT_^1DCTLX LDQ_"DCTL_*TO LDQ (DCTL)_^1_%STQ*_!INPUT+1_^1_%LDQ_"DFOR_^1_%STQ*_!DFORX+1_'THIS CODE EQUIVELENT_^1DFORX LDQ_"DFOR_*TO LDQ (DFOR)_^1_%STQ*_!INP31+1_^1_%LDQ*_!MOVOC€€R_((Q) = PARAMETER LIST_^1_%RTJ_"MOVSTR_(INITIALIZE FOR M O V E_^1INPUT LDA_"=XDCTL_(IS THIS A_^1_%SUB*_!H7FFF_)915 PROGRAM_^1_%SAZ_"INP31_#NO. CHECK FOR 955_^1_%LDQ*_!INPUT+1_#YES. GET ADR. OF CTL TABLE_^1_%LDA-_!C4,Q_#ISOLATE AND SAVE_^1_%JMP*_!INP33_#FIELD-SEP. SYMBOL_^1INP31 LDA_"=XDFOR_#IS THIS A_^1_%SUB*_!H7FFF_)955 PROGRAM_^1_%SAZ_"INP32_#NO. ASSUME THIS IS A 935 PROGRAM_^€€1_%LDQ*_!INP31+1_#YES. GET ADR. OF DFOR TABLE_^1_%LDA-_!13,Q_#ISOLATE AND_^1_%ARS_"8_#SAVE FIELD_^1_%JMP*_!INP33_#SEPARATOR SYMBOL_^1INP32 ENA_"$5C_#GET STANDARD FIELD-SEP_^1INP33 EQU_"INP33(*)_^1_%AND*_!H00FF_)ELIMINATE EXTRANEOUS BITS_^1_%STA-_!FLDSEP,I_^1*_]_^1*_]_^1_%LDQ_"=XSEPTAB_%ADDR OF FIELD SEPARATOR TABLE._^1_%LDA*_!(ZERO),Q_%FIRST WORD OF TABLE_^1_%SAN_"1_"SKIP IF NOT €€ZERO_^1_%INQ_"1_#BUMP TO NEXT ENTRY - 1ST ADDRESS._^1_%STQ-_!FTABLE,I_^1*_]_^1_%LDQ-_!P1,I_+A-FLD TABLE POINTER._^1_%STQ-_!AFLD2,I_^1*_]_^1GROUP1 CLR_"A_^1_%STA-_!AFRAC,I_(CLEAR ITEM SWITCH._^1_%STA*_!FFFL26_#INITIALIZE 1ST-PASS SWITCH_^1_%JMP*_!GROUP+2_^1GROUP RAO-_!FTABLE,I_!BUMP FLD SEPARATOR TABLE._^1_%RAO*_!FFFL26_#INDICATE CURRENT B-FLD NOT 1ST B-FLD_^1_%CLR_"A_^1_%STA-_!SIG€€NSW,I_%CLEAR SIGN SWITCH._^1_%STA-_!SEPSW,I ALSO, FLD SEP SWITCH._^1_%LDQ-_!FTABLE,I_^1_%LDA-_!1,Q_!IS THERE ANOTHER INPUT FIELD TO BE MOVED_^1_%SAZ_"GROUPE_"NO_^1_%LDA*_!(ZERO),Q_%FIELD ADDRESS (INPUT)_^1_%SAN_"GP1_"SKIP IF TABLE ENTRY NOT ZERO._^1GROUPE EQU_"GROUPE(*)_^1_%LDQ*_!MOVOCR_(RETURN_^1_%JMP-_!2,Q_^1*_]_^1GP1_"SAP_"GP2_#SKIP IF IN 1ST BYTE._^1_%AND*_!H7FFF_^1_%INA_"1_0B€€UMP TO GET PAST FLD SEP._^1_%CLR_"Q_^1_%JMP*_!GP2+1_^1*_]_^1GP2_"SET_"Q_^1_%STQ-_!ABYTE,I_(SET BYTE SWITCH._^1_%STA-_!AFLD,I_)STORE INPUT FLD ADDR._^1_%LDQ-_!P2,I_,B-FLD TABLE POINTER._^1GP3_"LDA-_!C3,Q_)GET NEXT ENTRY LEVEL CODE._^1_%AND*_!XOOFO_^1_%STA-_!HOLD,I_*HOLD IT._^1_%LDA*_!(ZERO),Q_%ISOLATE CODE_^1_%SAZ_"GP3A-1_!SKIP IF NO MORE DATA TABLES_^1_%AND*_!XOOFO_#FOR CURRENT LEV€€EL_^1_%INA_"-$10_#IS CURRENT B-FLD A 1-LEVEL FIELD_^1_%SAN_"GP3A_#NO_^1_%LDA*_!FFFL26_#YES. IS CURRENT FIELD THE 1ST FIELD_^1_%SAZ_"GP3A_#YES_^1_%JMP*_!GROUPE_#NO. END OF PROCESSING_^1GP3A_!EQU_"GP3A(*)_^1_%LDA*_!(ZERO),Q_%GET THIS LEVEL CODE_^1_%AND*_!XOOFO_^1_%SUB-_!HOLD,I_(SUBTRACT NEXT ONE._^1_%SAP_"GP4_-SKIP THIS ITEM IS ELEMENTARY._^1_%INQ_"3_/BUMP TO NEXT TABLE ENTRY._^1_%JM€€P*_!GP3_^1*_]_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1* THESE CONSTANTS ARE HERE TO PROVIDE FOR 1-WORD INSTRUCTIONS._^1*_]_^1XOOFO NUM_"$00F0_^1FFFL26 NUM_"0_#0 MEANS CURRENT B-FLD IS 1ST B-FLD_^1ZERO_!NUM_"0_^1H7FFF NUM_"$7FFF_^1H00FF NUM_"$00FF_^1HFF00 NUM_"$FF00_^1H8000 NUM_"$8000_^1*_]_^1**************************€€*********************************************_^1*_]_^1*_]_^1*_]_^1GP4_"TRQ_"A_^1_%INA_"3_^1_%STA-_!P2,I_+HOLD CURRENT TABLE ADDR._^1*_]_^1_%RTJ_"LDBFLD_*GO SET-UP B-FLD CONSTANTS._^1*_]_^1_%LDA-_!AFLD,I_^1_%STA-_!HOLD,I_^1_%LDA-_!ABYTE,I_^1_%STA-_!AB,I_^1_%LDA-_!BBYTE,I_'B-FLD BYTE._^1_%STA-_!BB,I_^1*_]_^1_%LDA-_!BSIZE,I_^1_%STA-_!BNO,I_^1_%LDA-_!BFLD,I_^1_%STA-_!HOLD2,I_^1_%CLR_"A€€_)SET FLAGS FOR LEFT JUSTIFICATION._^1_%STA-_!FLAG2,I_^1_%ENA_"1_^1_%STA-_!FLAG1,I_^1*_]_^1_%LDA-_!BFLD1,I_^1_%ALS_"13_.IS MODE FOR THIS FLD ALPHA-NUMERIC._^1_%SAP_"INALNU_*YES, SKIP._^1_%JMP*_!INNUM_*NO, NUMERIC._^1INALNU EQU_"INALNU(*)_^1_%RTJ*_!(AFETCH)_%GET A CHARACTER_^1IN1_"LDA-_!BNO,I_'END OF B-FLD?_^1_%SAN_"IN2_-NO, SKIP._^1IN11_!LDA-_!AFRAC,I_#ITEM ONLY SWITCH ON?_^1_%SAN_€€"1_/YES, SKIP._^1_%JMP*_!GROUP_*NO, CONTINUE._^1_%JMP*_!GROUPE_)GO TO END._^1*_]_^1IN2_"LDA-_!SEPSW,I_^1_%SAM_"IN3_"SKIP IF FLD SEP HAD BEEN FOUND._^1_%LDA-_!CHAR,I_^1_%SUB-_!FLDSEP,I_'WAS LAST CHAR A FLD SEPARATOR?_^1_%SAN_"STRCHR_#NO_^1_%RTJ*_!CHKSEP_#YES, CHECK IF FIELD ENDED_^1_%SAZ_"IN3_#DID FIELD END, YES_^1STRCHR EQU_"STRCHR(*)_^1_%RTJ*_!(ASTORE)_%NO GO STORE CHARACTER_^1_%J€€MP*_!INALNU_^1*_]_^1IN3_"ENA_"$20_*ASCII BLANK._^1_%STA-_!CHAR,I_^1_%SET_"A_^1_%STA-_!SEPSW,I SET FLD SEP SWITCH._^1_%RTJ*_!(ASTORE)_^1_%JMP*_!IN1_^1*_]_^1INNUM CLR_"A_^1*_]_^1_%STA-_!ANO,I_^1_%LDA-_!BSIZE,I_^1_%CLR_"Q_^1*_]_^1_%RTJ_"BCOMP_+GO COMPUTE RIGHT-MOST CHAR ADDR._^1INN1_!EQU_"INN1(*)_^1_%RTJ*_!(AFETCH)_%GET CHARACTER_^1*_]_^1_%INA_"-$2D_-IS THE CHAR A MINUS SIGN (2D)_^€€1_%SAN_"INN2_,NO, SKIP._^1_%SET_"A_^1_%STA-_!SIGNSW,I_$SET SIGNSWITCH._^1_%JMP*_!SUBANO_^1*_]_^1INN2_!INA_"2_,IS IT A PLUS SIGN? (2B)_^1_%SAN_"INN3_-NO, SKIP._^1_%JMP*_!SUBANO_^1INN3_!LDA-_!CHAR,I_^1_%SUB-_!FLDSEP,I_'IS THE CHAR A FLD SEPARATOR?_^1_%SAN_"INN31_^1_%RTJ*_!CHKSEP_^1_%SAZ_"INN4_^1INN31 JMP*_!INN1_^1*_]_^1INN4_!LDA-_!ANO,I_^1_%INA_"-1_+DECREMENT 1 FOR FLD SEP._^1_%TCA_€€"A_/COMPLIMENT INPUT CHAR COUNT._^1_%INA_"0_^1_%STA-_!ANO,I_^1* BACK THE ADDRESS UP TO RIGHT-MOST CHARACTER_^1_%LDA-_!HOLD,I_^1_%INA_"-1_^1_%STA-_!HOLD,I_^1*_]_^1_%ENA_"-1_%SET FLAGS FOR RIGHT-JUSTIFIED MOVE._^1_%STA-_!FLAG2,I_^1_%CLR_"A_^1_%STA-_!FLAG1,I_^1*_]_^1INN5_!LDA-_!ANO,I_%END OF INPUT CHARS._^1_%SAN_"INN6_,NO, SKIP._^1_%ENA_"$30_*ASCII ZERO._^1_%STA-_!CHAR,I_^1_%JMP*_!CHK€€LST_(BYPASS FETCH IN FILL MODE CCN1700MOV51-001_^1*_]_^1INN6_!EQU_"INN6(*)_^1_%RTJ*_!(AFETCH)_%GET CHARACTER_^1*_]_^1CHKLST EQU_"CHKLST(*)_^1_%LDA-_!BNO,I_*END OF B-FLD CHARS_^1_%SAN_"INN7_+NO, SKIP._^1_%LDQ-_!SIGNSW,I_^1_%LDA-_!BFLD2,I_'B-FLD WORD 3._^1_%ALS_"1_^1_%LRS_"1_.PICK UP NEW SIGN IN BIT 15._^1_%LDQ-_!P2,I_^1_%INQ_"-3_^1_%STA-_!C2,Q_*NEW WORD 3 OF B-FLD TABLE ENTRY._^1_%J€€MP*_!IN11_^1*_]_^1INN7_!EQU_"INN7(*)_^1_%RTJ*_!(ASTORE)_%STORE THE CHARACTER_^1_%JMP*_!INN5_^1ASTORE ADC_"STORE_^1AFETCH ADC_"FETCH_^1*_]_^1*_]_^1*_]_^1SUBANO LDA-_!ANO,I_#DECREMENT A-FLD CHAR COUNTER._^1_%INA_"-1_^1_%SAZ_"3_#IS IT A MINUS OR HYPHEN_^1_%CLR_"A_#HYPHEN_^1_%STA-_!C4,I_^1_%JMP*_!INN3_^1_%STA-_!ANO,I_^1_%JMP*_!INN1_^1CHKSEP ADC_"0_^1_%LDA-_!HOLD,I_#GET INPUT ADDRESS_^1€€_%LDQ-_!AB,I_#IS CHAR._^1_%SQM_"UPBITS_#IN UPPER 8 BITS, YES_^1_%INA_"-1_#NO, SET COW BYTE_^1_%EOR*_!H8000_)AND BACK_^1UPBITS LDQ-_!FTABLE,I_^1_%INQ_"1_^1_%STQ*_!SAVFT_^1_%SUB*_!(SAVFT)_^1_%JMP*_!(CHKSEP)_^1SAVFT ADC_"0_^1*_]_^1***********************************************************************_^1***********************************************************************_^1_%END_"€DZ_^___!AB,I_#IS CHAR._^1_PCHRFLD CSY/ P€1_%NAM CHRFLD_'CHRS/FIELD DRAFT 5.1 12/02/74_^1**** CHRS, FIELDS AND BINASC ROUTINE_^1_%ENT_"CHRSX,FIELDX_^1_%COM_"LUIN(1),FST(100)_^1_%COM_"NOFSX(1)_^1FIELDX ADC_"0_^1_%EQU_"FIELDS(FIELDX)_^1_%LDA*_!(FIELDS)_^1_%INA_"1_#GET ADDRESS OF 2ND WORD OF DATA TABLE_^1_%STA*_!SAVE_^1_%TRA_"Q_#SET SIGN OF DESTINATION FIELD TO +_^1_%LDA-_!1,Q_^1_%AND_"=N$7FFF_^1_%STA-_!1,Q_^1_%LDA*_!(SAVE)_€€#GET ADDRESS IN WORKING STORAGE WHERE NUM._^1_%STA*_!SAVE1_#OF FIELD SEPARATORS WILL BE STORED_^1_%RAO*_!FIELDS_#INCREASE RETURN ADDRESS_^1_%LDQ_"NOFSX_)BINARY NO OF FS_^1_%LDA_"=XNUMSAV_^1_%RTJ*_!BINASC_#CONVERT_^1_%LDA*_!NUMSAV+1_^1_%STA*_!(SAVE1)_#STORE CONVERTED NUM. IN P2_^1_%JMP*_!(FIELDS)_^1_%BZS_"SAVE(1),SAVE1(1),NUMSAV(2)_^1**** THIS ROUTINE WILL COMPUTE THE NUM. OF_^1****€€ CHARACTERS IN A FIELD OF THE INPUT BUFFER_^1CHRSX ADC_"0_^1_%EQU_"CHRS(CHRSX)_^1_%LDA*_!(CHRS)_^1_%INA_"1_^1_%STA*_!TMP1_^1_%LDA*_!(TMP1)_^1_%STA*_!TMP1_#SAVE WORK STORAGE ADDRESS_^1_%LDA*_!(TMP1)_#DATA WORD CONTAINING FIELD ORDINAL_^1_%SUB_"=N$3030_^1_%CLR_"Q_^1_%STQ*_!COUNT_^1_%ALS_"8_#SWAP CHARACTERS_^1_%LLS_"8_#LO ORDER IN Q_^1_%ARS_"8_#HIGH ORD. IN A_^1_%STQ*_!TMP1_^1_%MUI_"€€=N10_#CONVRT DEC. TO BIN._^1_%LDQ*_!TMP1_^1_%AAQ_"A,Q_^1_%SAN_"1_^1_%JMP*_!ERR1_^1_%SUB_"NOFSX_)GRT THAN NO OF FIELDS_^1_%SAM_"2_)NO_^1_%SAZ_"1_^1_%JMP*_!ERR1_#YES, ERROR_^1_%LDA_"FST,Q_#GET ADDRESS OF UPPER FLD. SEP._^1_%SAP_"GETLWR-1_#IS FS IN HI ORDER_^1H7FFFX AND_"=N$7FFF_#NO_^1_%STA*_!UFSA_^1_%ENA_"1_^1_%STA*_!COUNT_^1_%JMP*_!GETLWR_^1_%STA*_!UFSA_^1GETLWR INQ_"-1_^1_%LDA_"FST€€,Q_#GET ADDRESS OF LOWER FLD. SEP._^1_%SAM_"SAVLWR_#IS FS IN HI ORDER_^1_%STA*_!LFSA_#YES_^1_%RAO*_!COUNT_^1_%JMP*_!CNTCHR_^1SAVLWR AND*_!H7FFFX+1_#STRIP INDICATOR_^1_%STA*_!LFSA_^1CNTCHR LDA*_!UFSA_^1_%SUB*_!LFSA_#NUM. OF WORDS BETWEEN SEPARATORS_^1_%SAZ_"ADJCNT_^1_%INA_"-1_^1_%ALS_"1_#MULT. BY 2_^1_%ADD*_!COUNT_#ADJUST FOR ODD CHARS._^1ADJCNT TRA_"Q_#SAVE CHARS. IN Q_^1GETOUT RAO€€*_!CHRS_#INCREASE PARAMETER ADDRESS TO STORE RESULTS_^1_%STQ*_!SAVE_%SAVE Q_^1_%LDQ*_!(CHRS)_#SET SIGN OF DESTINATION FIELD TO +_^1_%LDA-_!2,Q_^1_%AND_"=N$7FFF_^1_%STA-_!2,Q_^1_%LDQ*_!SAVE_%RESTORE Q_^1_%LDA*_!(CHRS)_^1_%INA_"1_#2ND WORD OF DATA TABLE_^1_%STA*_!TMP1_^1_%LDA*_!(TMP1)_#WORKING STORAGE ADDRESS_^1_%STA*_!TMP1_^1_%LDA_"=XTMP2_#ADDR. OF STORAGE FOR BINASC_^1_%RTJ*_!BINAS€€C_#CONVRT TO ASCII_^1_%LDA*_!TMP2+1_#LO ORDER WORD OF BINASC_^1_%STA*_!(TMP1)_#RETURN NUMBER TO USER_^1_%RAO*_!CHRS_#RETURN ADDRESS_^1_%JMP*_!(CHRS)_^1ERR1_!LDQ_"=N9999_#ERROR FLAG_^1_%JMP*_!GETOUT_^1COUNT NUM_"0_^1UFSA_!NUM_"0_^1TMP1_!NUM_"0_^1TMP2_!NUM_"0_^1LFSA_!NUM_"0_^1BINASC ADC_"0_^1_%STQ*_!ASC1_#SAVE BINARY WORD_^1_%STA*_!ASCADR_#SAVE STORAGE ADD RESS_^1_%CLR_"A_^1_%STA*_!€€LIMIT_^1_%ENQ_"3_^1_%STA*_!TMPASC,Q_^1_%SQZ_"2_^1_%INQ_"-1_^1_%JMP*_!*-3_^1_%LDQ_"=XTMPASC+3_^1_%STQ*_!ASC2_^1_%LDA*_!ASC1_^1GETCHR CLR_"Q_^1_%DVI_"=N10_^1_%STA*_!ASC1_#SAVE REMAINDER_^1_%STQ*_!(ASC2)_#SAVE DIGIT_^1_%RAO*_!LIMIT_^1_%LDA*_!ASC2_^1_%INA_"-1_^1_%STA*_!ASC2_^1_%LDA*_!ASC1_^1_%SUB_"=N10_^1_%SAM_"DONE1_^1_%LDA*_!LIMIT_^1_%INA_"-$4_^1_%SAN_"1_^1_%JMP*_!ERRLIM_^1_%LDA*_!AS€€C1_^1_%JMP*_!GETCHR_#GET NEXT DIGIT_^1DONE1 LDA*_!ASC1_^1_%STA*_!(ASC2)_#STORE LAST DIGIT_^1_%LDA*_!TMPASC_^1_%ALS_"8_^1_%ADD*_!TMPASC+1_#COMPACT_^1_%ADD_"=N$3030_#CONVERT TO ASCII_^1_%STA*_!(ASCADR)_^1_%RAO*_!ASCADR_^1_%LDA*_!TMPASC+2_^1_%ALS_"8_^1_%ADD*_!TMPASC+3_^1_%ADD_"=N$3030_^1_%STA*_!(ASCADR)_^1_%JMP*_!(BINASC)_^1ERRLIM STA*_!(ASCADR)_^1_%RAO*_!ASCADR_^1_%STA*_!(ASCADR)_^1€r_%JMP*_!(BINASC)_^1ASC1_!NUM_"0_^1ASCADR NUM_"0_^1LIMIT NUM_"0_^1_%BSS_"TMPASC(4)_^1ASC2_!NUM_"0_^1_%END_"DZ_^__rPR29 CSY/ P€1_%NAM R29_*929 READ/MOVE DRAFT 5.1 12/02/74_%(CYB)_^1_%SPC_"2_^1*******************************************************************_^1*_'COPYRIGHT CONTROL DATA CORP., 1974_6*_^1********************************************************************_^1_%SPC_"2_^1_%ENT_"READ2X,SRT29_^1_%ENT_"MOV92X,FLDCHX_^1_%EXT_"DSPC,DATA,DINP,OMRUSR,LOSUSR_^1_%EXT_"EOFUSR,RJRUSR,BLNUSR,BUFUSR,JAMUS€€R_^1_%COM_"LUIN(1)_'LU WORD_^1_%COM_"DUMMY(100),NOFSX(1)_^1_%EXT_"RZO,SETREG_^1_%ENT_"OCRCNT,MRKCNT_^1_%SPC_"2_^1************************************************************************_^1*** THE FOLLOWING TABLE IS ACCESSED BY USING ITS BASE ADDRESS_^1*** CONTAINED IN THE I-REGISTER, INDEXED BY THE RELATIVE VALUE_^1*** OF THE DESIRED TABLE ENTRY. IT IS ALSO REFERENCED BY DIFFERENT €€*_^1*** NAMES USING ONE-WORD RELATIVE ADDR. TO SAVE TIME._,**_^1************************************************************************_^1_%SPC_"2_^1TABL29 NUM_"0_-DUMMY WORD_^1XZ0F0 NUM_"$00F0_)X00F0 - MASK_^1_%SPC_"2_^1*OMR SELECTIVE FIELD CONVERSION TABLE*_^1_%SPC_"2_^1FLDOMR NUM_"0_-1ST OMR FIELD_^1_%NUM_"0_-2ND *_^1_%NUM_"0_-3RD *_^1_%NUM_"0_-4TH *_^1_%NUM_"0_-5TH *_^1_%NUM_€€"0_-6TH *_^1_%NUM_"0_-7TH *_^1_%NUM_"$FFFF_)END OF TABLE_^1_%SPC_"2_^1_%SPC_"2_^1* THE FOLLOWING IS A TABLE OF Q-LEVELS FOR RESCANNING BASED*_^1* ON THE INITIAL VALUE OF "LVL" IN THE "SPEC" TABLE_'*_^1_%SPC_"2_^1QLVLTB NUM_"$123F_^1_%NUM_"$213F_^1_%NUM_"$321F_^1_%NUM_"$321F_^1*******************************************************************_^1READDA LDA-_!ERRIND,I_%ERROR FROM PRE€€VIOUS I/O?_^1_%SAZ_"STREAD_(NO, GO EXECUTE READ_^1_%JMP_"SNDINT_(YES, GO BACK TO RE-INITIALIZE_^1STREAD ENA_"2_-READ FUNCTION- CRC=2_^1_%STA-_!REQWD1,I_^1_%LDA-_!LVLPRM,I_%GET SELECTED Q-LEVEL PARAMETER_^1_%ALS_"12_,PUT Q IN BITS 15-12_^1_%STA-_!REQWD4,I_%SAVE IN WORD 4_^1_%SET_"A_-SET READ OVERLAP INDICATOR_^1_%JMP*_!RED929_(***** EXIT IND. = - *****_^1SETLVL ENA_"1_-***** SET EXI€€T IND. = + *****_^1RED929 RTJ-_!REQ29,I_'READ A DOCUMENT_^1STAT29 SQN_"CKV_^1_%STQ*_!READIN_(CLR LOST DATA REREAD IND._^1_%STQ*_!RSCAN_)CLR RESCAN INDICATOR_^1_%JMP*_!CKAST_)I/O ERROR FREE_^1CKV_"INQ_"-3_,V-FIELD # 3?_^1_%SQN_"CKV2_*NO, CONTINUE_^1STRNCK RAO_"JAMUSR_(YES, SET USER TRANSPORT CHECK INDICATOR_^1_%JMP-_!RETNIN,I_%EXIT TO LAST CALLER_^1CKV2_!INA_"-6_,JAM, DOUBLE FEED, L€€OST DOC. OR SORT FAILURE_^1_%SAN_"1_-NO, CONTINUE_^1REREAD JMP*_!STRNCK_(YES, SET TRANSPORT CHECK_^1CKMSRT INA_"-1_,STACKER FULL, HOPPER EMPTY, OR FEED FAILURE_^1_%SAN_"1_-NO, KEEP CHECKING_^1_%JMP*_!SETLVL_(YES, RE-READ THE DOCUMENT_^1_%INA_"6_-DOCUMENT MISSORT?_^1_%SAN_"1_-NO, CONTINUE_^1_%JMP*_!SETLVL_(YES, RE-READ THE DOCUMENT_^1_%INA_"-2_,LOST DATA?_^1_%SAN_"1_-NO, KEEP CHECKI€€NG_^1_%JMP*_!CKLOST_(YES, SEE IF RE-READ HAS BEEN DONE_^1_%INA_"-5_,HAS "STOP" BEEN PUSHED?_^1_%SAN_"1_-NO, CONTINUE CHECKING_^1_%JMP*_!STRNCK_(YES, TRANSPORT CHECK_^1_%INA_"4_-BUFFER OVERFLOW?_^1_%SAN_"CKRJTS_(NO, CONTINUE_^1_%RAO*_!OVERFL_(YES, SET OVERFLOW INDICATOR_^1_%JMP*_!CKAST_)CHECK "AST" OPTION_^1CKRJTS INA_"4_-OCR AND OMR REJECTS?_^1_%SAN_"CKOCR_)NO, CONTINUE_^1STOMUS RA€€O+_!OMRUSR_(SET OMR REJECT INDICATOR_^1_%JMP*_!CKRSAN_(GO SEE IF RESCAN ALLOWABLE_^1CKOCR INA_"-2_,OCR REJECTS ONLY?_^1_%SAN_"1_-OMR REJECTS ONLY_^1_%JMP*_!CKRSAN_(OCR REJECTS ONLY_^1_%RAO*_!(STOMUS+1)_#SET OMR REJECT INDICATOR_^1_%JMP*_!CKAST_)CHECK AUTO SORT_^1CKLOST LDA*_!READIN_(HAS DOC. BEEN RE-READ?_^1_%SAN_"CKAST_)YES, CONTINUE_^1_%RAO*_!READIN_(NO, SET RE-READ IND._^1_%JMP€€*_!SETLVL_(READ THE DOCUMENT ONE MORE TIME_^1CKAST LDA*_!AUTSRT_(IS AUTO- SORT SPEC?_^1_%SAZ_"SORTOK_(NO, CONTINUE_^1_%STA*_!NINWD4_(YES, PUT PKT NO. IN WORD 4_^1_%ENA_"4_-SORT CRC = 4_^1_%STA*_!NINWD1_(PUT IN WORD 1 OF SORT REQUEST_^1_%CLR_"A_-**** SET EXIT IND. = 0 *****_^1_%RTJ*_!NIN29_)SORT THE DOCUMENT_^1_%SQZ_"SORTOK_(I/O OK, CONTINUE_^1_%JMP*_!STRNCK_(SORT FAULT, SET TRANSP€€ORT CHECK_^1SORTOK LDA*_!READIN_(SORT AFTER LOST DATA ?_^1_%SAN_"1_-YES, GET OUT OF READ ROUTINE_^1_%JMP*_!PRCDAT_(NO, GO PROCESS DATA_^1_%CLR_"A_^1_%STA*_!READIN_(CLEAR LOST DATA IND._^1_%STA*_!RSCAN_)CLEAR RESCAN IND._^1_%RAO_"LOSUSR_(SET USER LOST DATA INDICATOR_^1_%JMP*_!RET929_(EXIT TO LAST CALLER_^1CKRSAN LDA*_!RSCAN_)OCR REJ., HAVE WE RESCANNED?_^1_%SAN_"CKSRT_)YES, GO CHECK€€ SORT_^1_%LDA*_!RSCFWA_(NO, IS RESCAN ALLOWED?_^1_%SAZ_"CKSRT_)NO, CONTINUE_^1_%RAO*_!RSCAN_)YES, SET RESCAN INDICATOR_^1_%ENA_"3_-RESCAN CRC = 3_^1_%STA*_!NINWD1_(PUT IN CRC WORD_^1_%LDQ*_!QLVPRM_(PICK UP USERS Q/LEVEL_^1_%INQ_"-1_,USE AS INDEX TO QLV TABLE_^1_%LDA-_!QLEVEL,B_%PICK UP RESCAN QLVL WORD_^1_%STA*_!NINWD4_(SAVE IN WORD 4 OF REQUEST_^1_%ENA_"1_-**** SET EXIT IND. = + *€€***_^1_%RTJ*_!NIN29_)DO A RESCAN ON DOCUMENT_^1_%JMP*_!STAT29_(TAKE 929 STATUS_^1CKSRT RAO_"RJRUSR_(SET OCR REJECT INDICATOR_^1_%CLR_"A_^1_%STA*_!READIN_(CLEAR LOST DATA IND._^1_%JMP*_!CKAST_)GO SEE IF SORT NOW REQUIRED_^1PRCDAT LDA*_!REVFLG_(PUT REVERSE BUFFER FLAG IN A_^1_%LDQ*_!OVERFL_(PUT OVERFLO IND. IN Q_^1_%SAP_"TSTOVR_(REVERSE BUFFER NOT SET, TEST OVERFLOW_^1_%SQZ_"RVSBUF_€€(RVRS BUFF SET, OVERFLOW NOT SET_^1_%RAO_"BUFUSR_(TURN ON USER BUFFER OVERFLOW INDICATOR_^1_%JMP*_!RET929_(EXIT TO LAST CALLER_^1TSTOVR SQP_"CNTDAT_(OVERFLOW NOT SET, CONTINUE_^1_%RAO_"BUFUSR_(SET OVERFLOW USER INDICATOR_^1CNTDAT JMP*_!PROCSS_(CONTINUE PROCESSING_^1RVSBUF LDQ*_!ZONFST_(PICK UP FWA OF ZONE TABLE_^1_%LDA-_!1,Q_+PICK UP CONTENTS OF OMR FWA WORD FROM "ZONE_^1_%STA*_!NI€€NWD2_(PUT IN WORD 2 OF REQUEST_^1_%LDA*_!(ZERO),Q_^1_%STA*_!NINWD4_(PUT IN WORD 4 OF REQUEST_^1_%ENA_"6_-REVERSE BUFFER CRC = 6_^1_%STA*_!NINWD1_(PUT IN CRC WORD OF REQUEST_^1_%CLR_"A_-***** SET EXIT IND. = 0 *****_^1_%RTJ*_!NIN29_)REVERSE OCR AND/OR OMR DATA_^1PROCSS JMP_"GOMOVE_(GO MOVE 929 DATA_^1_%SPC_"2_^1CINDEX NUM_"0_-CVINDX- OMR FIELD CONV CODE INDEX_^1READIN NUM_"0_-REDIN€€D - READ ERROR INDICATOR_^1RSCAN NUM_"0_-RSCIND - RESCAN INDICATOR_^1_%NUM_"0_-QHOLD - Q-REGISTER SAVE AREA_^1OVERFL NUM_"0_-OVRFLO - INTERNAL BUFFER OVERFLOW IND._^1_%NUM_"0_-ONETIM - ZONE TABLE FLAG_^1DATA2S NUM_"0_-DATA2 - ADDR OF R-LVL DATA TABLE_^1DATAHD NUM_"0_-DATHLD - INTERMED. R-LVL ADDRESS_^1FIRSTH NUM_"0_-FSTHRU - FIRST TIME THRU INDICATOR_^1ERRFLG NUM_"0_-ERRIND - INI€€TIALIZE ERROR IND._^1OCRFST NUM_"0_-OCRFWA - FWA OF OCR BUFFER_^1OCLAST NUM_"0_-OCRLWA - LWA OF OCR BUFFER_^1OCRSIZ NUM_"0_-OCRLNG - OCR DATA LENGTH_^1OMRFST NUM_"0_-OMRFWA - FWA OF OMR BUFFER_^1OMRLST NUM_"0_-OMRLWA - LWA OF OMR BUFFER_^1RSCFWA NUM_"0_-RESFWA - FWA OF RESCAN BUFFER_^1_%NUM_"0_-RESLNG - LENGTH OF RESCAN BUFFER_^1REVFLG NUM_"0_-RVBFLG - REVERSE BUFFER FLAG_^1QLVPRM €€NUM_"0_-LVLPRM - QUANTIZE LEVEL PARAMETER_^1_%NUM_"0_-SFULPR - STACKER FULL FLAG_^1AUTSRT NUM_"0_-ASTPRM - AUTO SORT FLAG_^1ZONFST NUM_"0_-ZONFWA - FWA OF ZONE TABLE_^1XSPEC ADC_"DSPC_*XDSPC - ADDR OF SPEC TABLE_^1XINPUT ADC_"DINP_*XDINP - SET TO DINP + 1 FOR MOV929_^1ENDATA ADC_"DATA_*XDATA - END ADDR OF DATA TABLES_^1NOFS_!NUM_"0_-NUMBER OF FLD SEPS FOR MOV929_^1MRKCNT NUM_"0€€_-NUMBER OF OMR WORDS (W/O $EOFB WORD)_^1OCRCNT NUM_"0_-NUMBER OF OCR CHARACTERS_^1_%SPC_"2_^1************************************************************************_^1* NIN29(REQ29) - ALL 929 FUNCTIONS ARE ISSUED FROM THIS REQUEST BLOCK *_^1* THE SETTING OF A-REG ON ENTRY DETERMINES INITIAL EXIT PATH FROM_"***_^1* READ29. BY SCHEDULING RUNNING PRIORITY = 1, AND COMP PRIOR = 0,_^€€1* CONTROL WILL ALWAYS RETURN TO BOTTOM OF REQUEST AFTER IT IS INIT._"*_^1* BEFORE CONTROL IS PASSED TO USER AFTER INITIATING A READ, 929 BUSY_!*_^1* BIT IS SET AND WAIT BIT IS CLEARED. THESE BITS ARE IN WORD 5 OF_"***_^1* ASSIGN TABLE. BUSY AND WAIT ARE CHECKED BY THE DRAFT WAITIO ROUTINE *_^1* AND AT COMPLETION OF 929 I/O WHEN SETREG IS CALLED TO RETURN CONTROL_^1* TO THE USER. €€ ********************************************************_^1************************************************************************_^1_%SPC_"2_^1NIN29 NOP_"0_-RETURN ADDRESS TO CALLER_^1_%STA*_!EXTQUE+1_%SAVE EXIT VALUE PASSED THRU A-REG_^1_%RTJ-_!(MON)_)SET RUN PRIORITY = 1_^1_%ADC_"SCHED+1,IO929_^1DISP29 RTJ-_!(MON)_)EXIT TO DISPATCHER_^1_%NUM_"$0A00_^1IO929 LDA*_!EXTQUE+1_%PI€€CK UP EXIT INDICATOR_^1_%RTJ-_!($F4)_)GENERAL I/O REQUEST_^1_%ADC_"$400_*REQUEST CODE = 2_^1_%ADC_"CMPRTN_(COMP. ADDRESS_^1_%NUM_"0_-THREAD_^1NINLU NUM_"$1000_)LOGICAL UNIT NUMBER_^1NINWD1 NUM_"0_-PARAMETER WORD 1_^1NINWD2 NUM_"0_-PARAMETER WORD 2_^1NINWD3 NUM_"0_-PARAMETER WORD 3_^1NINWD4 NUM_"0_-PARAMETER WORD 4_^1_%SAP_"EXTUSR_(A=+, EXIT TO LAST INTERRUPT LOC._^1ASSG29 LDQ_"=N$€€0_*GET ADDR OF ASSIGN TABLE_^1_%LDA-_!4,Q_+GET WORD 5_^1_%AND_"=N$7FFC_^1_%INA_"2_-SET 929 BUSY, CLEAR 929 WAIT_^1_%STA-_!4,Q_+RESET WORD 5_^1SETFS LDA_"NOFS_*SORE NO OF FS_^1_%STA_"NOFSX_)IN COMMON_^1_%JMP*_!(R29)_)A=-, RETURN CONTROL TO DRAFT USER TEMPORARI_^1EXTUSR JMP*_!DISP29_(EXIT TO DISP TO AWAIT 929 I/O COMP_^1EXN29 CLR_"Q_^1_%LDA*_!NINLU_)PICK UP LU WORD_^1_%LLS_"3_-ISOL€€ATE V-FIELD IN Q_^1_%LDA*_!NINWD1_(PICK UP CRC WORD_^1_%AND_"XZ0F0_G02/24/76_^1_%ARS_"4_-ISOLATE E-FIELD IN A_^1_%INQ_"-1_,END OF FILE?_^1_%SQN_"SETRTN_(NO, SET UP RETURN TO REQUEST CALLER_^1_%RAO_"EOFUSR_(YES, SET USER EOF INDICATOR_^1EXTQUE LDA_"=N$0_*PICK UP EXIT INDICATOR_^1_%SAN_"1_-READ OR RESCAN, EXIT TO LAST INTERRUPT LOC._^1_%JMP*_!SETFS_)NON-INTER FUNCTION_^1GETQ_!LDQ*_!A€€SSG29+1_%PICK UP ADDRESS OF ASSIGN FOR SETREG_^1RETPRE JMP_"SETREG_(GO RESTORE USER REGS AND EXIT_^1SETRTN INQ_"1_-RESTORE ORIGINAL V-FIELD_^1_%JMP*_!(NIN29)_'EXIT TO REQUEST CALLER_^1CMPRTN LDA_"=XTABL29_%PICK UP BASE ADDRESS OF 929 TABLES_^1_%STA-_!I_-SAVE IT FOR BASE REFERENCE_^1CKSTAT LDA*_!NINWD1_(PICK UP CRC WORD_^1_%AND_"=N$7_^1_%INA_"-2_,IS THIS A READ?_^1_%SAZ_"NXTPRM_(YES€€,CONTINUE_^1_%JMP*_!EXN29_)NO, GO TO COMPLETION_^1NXTPRM LDA*_!NINWD2_(ANY OCR DATA?_^1_%TRA_"Q_^1_%QLS_"1_-COMPUTE OCR CHAR. LENGTH_^1_%STQ*_!OCRCNT_(SAVE FOR CHROCR DRAFT RTN **********_^1_%SAZ_"SETOCL_(NO, SET OCRLST = 0_^1_%INA_"-1_,YES, DECREMENT OCR LNG BY 1_^1_%ADD*_!OCRFST_(ADD OCR FWA_^1SETOCL STA*_!OCLAST_(POINT TO OCR LWA_^1_%LDA*_!NINWD4_(ANY OMR DATA?_^1X00FF AND_"=N€€$00FF_^1_%STA*_!MRKCNT_(STORE FOR POSSIBLE ZERO COUNT_^1_%SAZ_"SETOML_(OMR COUNT = 0_^1_%INA_"-1_,DEC. COUNT TO EXCLUDE $E0FB WORD_^1_%STA*_!MRKCNT_(SAVE FOR CHRMRK DRAFT RTN ***********_^1_%INA_"-1_^1_%ADD*_!OMRFST_(ADD OMR FWA_^1SETOML STA*_!OMRLST_(POINT TO OMR LWA_^1_%LDA*_!QLVPRM_(IS Q-LVL SPECIFIED?_^1_%SAN_"GOCMP1_(YES, DONE CHECKING_^1_%LDA*_!NINWD4_(NO, PICK UP PANEL SETTI€€NG_^1_%ALS_"8_-PUT IN BITS 7-0_^1_%AND_"=N$F_^1_%TRA_"Q_^1_%INQ_"-4_,IS A "4" SET?_^1_%SQN_"STRQPM_(NO, CONTINUE_^1_%INA_"-1_,YES, SET IT TO A "3"_^1STRQPM STA*_!QLVPRM_(SAVE RESULT_^1GOCMP1 JMP*_!EXN29_)GO TO COMPLETION_^1_%EQU_"RET929(GETQ)_^1_%EQU_"INSINQ($D00)_^1_%EQU_"X00F0(XZ0F0-TABL29)_^1_%EQU_"FLDTBL(FLDOMR-TABL29)_^1_%EQU_"QLEVEL(QLVLTB-TABL29)_^1_%EQU_"CVINDX(CINDEX-TABL2€€9),REDIND(CVINDX+1)_^1_%EQU_"RSCIND(REDIND+1),QHOLD(RSCIND+1)_^1_%EQU_"OVRFLO(QHOLD+1),ONETIM(OVRFLO+1),DATA2(ONETIM+1)_^1_%EQU_"DATHLD(DATA2+1)_^1_%EQU_"FSTHRU(DATHLD+1),ERRIND(FSTHRU+1),OCRFWA(ERRIND+1)_^1_%EQU_"OCRLWA(OCRFWA+1),OCRLNG(OCRLWA+1)_^1_%EQU_"OMRFWA(OCRLNG+1),OMRLWA(OMRFWA+1),RESFWA(OMRLWA+1)_^1_%EQU_"RESLNG(RESFWA+1),RVBFLG(RESLNG+1)_^1_%EQU_"LVLPRM(RVBFLG+1),SFULPR(€€LVLPRM+1),ASTPRM(SFULPR+1)_^1_%EQU_"ZONFWA(ASTPRM+1),XDSPC(ZONFWA+1)_^1_%EQU_"XDINP(XDSPC+1),XDATA(XDINP+1)_^1_%EQU_"REQ29(NIN29-TABL29),REQLU(NINLU-TABL29)_^1_%EQU_"REQWD1(REQLU+1),REQWD2(REQWD1+1)_^1_%EQU_"REQWD3(REQWD2+1),REQWD4(REQWD3+1)_^1_%EQU_"MON($F4),SCHED($1200),RETNIN(RET929-TABL29)_^1XZERO EQU_"XZER0(*)_^1ZERO_!NUM_"0_^1FSTAB ADC_"$1800+DFS1_#***** TABLES BELOW ARE US€€ED FOR ***_^1_%ADC_"$1800+DFS2_#***** MOV929 TO SPEED UP PROCESSING **_^1_%ADC_"$1800+DFS3_#*******_^1_%NUM_"$FFFF_)END OF TABLE *******_^1FSADCS ADC_"FS1_+*****_^1_%ADC_"FS2_+******_^1_%ADC_"FS3_+*****_^1***********************************************************************_^1READ2X NOP_"0_-929READ ENTRY POINT_^1_%EQU_"READ29(READ2X)_^1_%RTJ_"INIT29_(INITIALIZE REQUIRED INFORMAT€€ION_^1_%LDA*_!FIRSTH_(HAVE 929 TABLES BEEN SET UP ?_^1_%SAZ_"SETUP_)NO, CONTINUE_^1_%JMP_"READDA_(YES, GO READ A DOCUMENT_^1SETUP RAO*_!FIRSTH_(TURN OFF FIRST TIME THRU IND._^1_%SPC_"1_^1******* THE FOLLOWING ROUTINE MODIFIES NON STD FS_!*********_^1******* CHECKING IN MOV929. DONE ONCE PER RUN_$**********_^1_%SPC_"1_^1_%LDQ*_!XSPEC_)GET ADDRESS OF SPEC TABLE_^1_%LDA-_!4,Q_+PUT "F€€T3" PARM IN Q_^1XXFF00 AND_"=N$FF00_^1_%LDQ-_!3,Q_+PUT FT1,FT2 IN Q_^1_%EAQ_"A_-************ THESE 3 INSTS. REVERSE A AND Q_^1_%EAQ_"Q_-*****************_^1_%EAQ_"A_-***************_^1SHIFT8 LLS_"8_-PUT A FS CODE IN 7-0 OF Q_^1_%SQN_"1_^1_%JMP*_!GETJMP_(FS CODE = 0, SEE IF JUMP NEEDED_^1_%STA*_!HLDCHR+1_%SAVE REMAINDER FROM A_^1_%INQ_"-SPEC_)SUBTRACT FILL FROM FS CODE_^1_%TCQ_"A_-P€€UT COMPLEMENT OF RESULT IN A_^1RSULT ADD_"=N$0_*ADD INIT REMAINDER FROM PREV CHECK_^1_%STQ*_!RSULT+1_'SAVE INIT REMAINDER FOR NEXT TIME_^1_%AND*_!X00FF+1_^1_%ADD*_!INSINA_(CREATE AN INA INST. USING A AS DELTA_^1FSCNT LDQ_"=N$0_*PICK UP INDEX FOR STORING THE INA_^1_%LDQ*_!FSADCS,Q_%PICK UP ADDRESS OF FS1,FS2, OR FS3_^1_%STA*_!(ZERO),Q_^1HLDCHR LDA_"=N$0_*PICK UP REMAINING FS CODES€€_^1_%CLR_"Q_-CLEAR Q FOR SHIFTING_^1_%RAO*_!FSCNT+1_'INCREMENT STORE INDEX BY 1_^1_%JMP*_!SHIFT8_(GET NEXT CODE_^1GETJMP LDQ*_!FSCNT+1_'PICK UP STORE INDEX_^1_%LDA*_!FSTAB,Q_'PICK UP NEEDED JMP INST._^1_%SAM_"GETZON_(END OF TABLE, EXIT ROUTINE_^1_%LDQ*_!FSADCS,Q_%PICK UP ADDRESS OF FS1,FS2, OR FS3_^1_%STA*_!(ZERO),Q_^1****************************************************************€€*******_^1_%SPC_"2_^1GETZON LDQ-_!DATA2,I_'GET ADDR. OF R-LVL DATA TABLE_^1_%LDA-_!2,Q_+THEN GET DATA LENGTH_^1_%AND*_!X00FF+1_^1_%ARS_"1_-CALCULATE WORD COUNT_^1_%INA_"6_-PAD BUFFER BY SIX WORDS(OCR BUFFER)_^1_%STA-_!OCRLNG,I_%SAVE RESULT_^1_%STA-_!DATHLD,I_^1_%LDA_"=XRZO_)PICK UP ADDRESS OF "ZONE" TABLE_^1_%STA-_!ZONFWA,I_^1_%STA*_!ZONHLD_(SAVE ADDRESS OF "ZONE" TABLE_^1_%LDQ-_!X€€DSPC,I_'GET ADDRESS OF "SPEC" TABLE_^1_%LDA-_!4,Q_+PICK UP "MRL" PARAMETER_^1_%CLR_"Q_-CLEAR OCR FWA INDICATOR_^1_%AND*_!X00FF+1_^1_%SAZ_"CRONLY_(YES, ONLY OCR DATA TO BE READ_^1_%INA_"-1_,NO, IS "MRL" = 1_^1_%SAZ_"MRONLY_(YES, ONLY OMR DATA TO BE READ_^1_%INA_"-1_,NO, IS MRL = 2?_^1_%SAZ_"MRONLY_(YES, ONLY OMR DATA TO BE READ_^1CRONLY LDQ-_!XDINP,I_'BOTH OCR AND OMR DATA PRESENT_^€€1MRONLY STQ*_!(ZONHLD)_%PUT ADDRESS OF OCR BUFF OR 0 IN WORD 1 OF Z_^1_%STQ-_!OCRFWA,I_%SAVE OCR FWA_^1_%STQ_"FWAOCR_(SAVE OCR FWA FOR MOV929 *****************_^1_%SQZ_"TSTOMR_(OCR ADDR = 0_^1_%SAN_"TSBOTH_(MRL # 0 OR # 1_^1_%TRA_"Q_^1_%JMP*_!STROMR_(GO SET OMR ADDRESS_^1TSBOTH INA_"1_-SET UP OCR LENGTH FOR WORD CALC._^1_%ARS_"1_-CALCULATE OCR WORD LENGTH_^1_%INA_"6_-PAD OCR BUFFER€€ BY 6 WORDS(12 CHAR.)_^1_%AAQ_"Q_-CALCULATE OMR FWA_^1_%JMP*_!STROMR_^1TSTOMR LDQ-_!XDINP,I_'PICK UP INPUT BUFFER ADDRESS_^1STROMR RAO*_!ZONHLD_^1_%STQ*_!(ZONHLD)_%PUT ADDRESS OF OMR BUFF OR 0 IN WORD 2 OF Z_^1_%STQ-_!OMRFWA,I_%SAVE OMR FWA_^1_%STQ_"OMRDAT_(SAVE OMR FWA FOR MOV929_^1_%SAZ_"SETLNG_(MRL # 0_^1_%ENQ_"2_^1_%STA*_!(ZONHLD),Q_#STORE OCR LENGTH IN WORD 4 OF ZONE_^1_%STA-_€€!OCRLNG,I_%SAVE IT_^1_%LDA-_!DATHLD,I_%GET BUFFER LENGTH_^1_%SUB*_!(ZONHLD),Q_#SUBTRACT OCR BUFFER LENGTH_^1XX00FF AND_"=N$00FF_^1_%ALS_"8_^1_%EOR*_!(ZONHLD),Q_#COMBINE OMR AND OCR LENGTHS_^1_%STA*_!(ZONHLD),Q_#PUT THEM IN WORD 4 OF ZONE_^1_%JMP*_!CKRSCN_(GO CHECK RESCAN PARAMETER_^1SETLNG LDQ*_!(ZONHLD)_^1_%LDA-_!DATHLD,I_%IS OMR FWA = 0_^1_%SQZ_"SETOCR_(YES, CONTINUE_^1_%ALS_"8_-€€NO, OMR ONLY_^1SETOCR ENQ_"2_^1_%STA*_!(ZONHLD),Q_#PUT OMR OR OCR LENGTH IN WORD 4 OF ZONE_^1CKRSCN ENQ_"-1_^1_%LDA*_!(ZONHLD),Q_#PICK UP OCR FWA FROM "ZONE"_^1_%TCQ_"Q_-IS IT "0"?_^1_%SAZ_"STRRSC_(YES, SET RESCAN BUFFER FWA # 0_^1_%LDA-_!RESFWA,I_%NO, PUT VALUE OF RESCAN FWA IN "ZONE"_^1_%SAN_"RSCLNG_(RESCAN BUFFER SPEC., CHECK LENGTH_^1STRRSC STA*_!(ZONHLD),Q_#SET RESCAN BUFFER F€€WA = 0 IN "ZONE"_^1_%JMP*_!CKRVSB_(GO CHECK REVERSE BUFFER_^1ZONHLD NUM_"0_^1RSCLNG LDA-_!RESLNG,I_%PICK UP RESCAN BUFFER LENGTH_^1_%SUB-_!OCRLNG,I_%SUBTRACT OCR BUFFER LENGTH_^1_%SAM_"NORSCA_(INVALID RESCAN PARM., DO NOT ALLOW RESCAN_^1_%LDA-_!RESFWA,I_%RESCAN LNG OK, SET FWA_^1_%JMP*_!SETADR_^1NORSCA CLR_"A_^1_%STA-_!RESFWA,I_%CLEAR RESCAN INDICATOR_^1SETADR STA*_!(ZONHLD),Q_#SET€€ RESCAN BUFFER FWA IN "ZONE"_^1CKRVSB LDQ-_!XDSPC,I_'PICK UP ADDRESS OF "SPEC" TABLE_^1_%LDA-_!5,Q_+GET "REVERSE BUFFER" BIT_^1_%STA-_!RVBFLG,I_%PUT "R" VALUE IN RVB BUFFER INDICATOR_^1_%LDQ-_!ZONFWA,I_%PICK UP FWA OF "ZONE" TABLE_^1_%INQ_"3_-SET Q = ADDR OF 1ST TABLE ENTRY -1_^1_%CLR_"A_^1_%STA-_!ONETIM,I_%CLEAR PREVIOUS ENTRY FLAG_^1EDTZON LDA-_!1,Q_+PICK UP 1ST WORD OF 2 WORD EN€€TRY_^1_%AND-_!X00F0,I_'ISOLATE BITS 4-7_^1_%SAZ_"OMRENT_(OMR ENTRY_^1_%ENA_"1_-OCR ENTRY_^1_%STA-_!ONETIM,I_^1_%LDA-_!RVBFLG,I_^1_%SAM_"CURENT_^1_%JMP*_!NXTENT_^1INSINA NUM_"$900_*INA INSTRUCTION FOR CODE MODIF. ***********_^1CURENT LDA-_!1,Q_+PICK UP 1ST WORD AGAIN_^1_%EOR_"=N$800_(SET "R" BIT IN OCR WORD 1_^1_%STA-_!1,Q_^1_%JMP*_!NXTENT_(CHECK NEXT ENTRY_^1OMRENT LDA-_!1,Q_+PICK €€UP OMR WORD 1_^1_%ARS_"10_^1_%AND_"=N$7_^1_%STQ-_!QHOLD,I_'SAVE Q TEMPORARILY_^1_%SAZ_"STRCD0_(** CODE = 0 **_^1_%ENQ_"-3_,** CODE = 1 **_^1_%INA_"-1_,IS IT CODE 1?_^1_%SAZ_"STRCOD_(YES_^1_%INQ_"14_,** CODE = 2 ** TBL CODE = 11_^1_%INA_"-1_,IS IT CODE 2?_^1_%SAZ_"STRCOD_(YES_^1_%INQ_"-2_,** CODE = 3 ** TBL CODE = 9_^1STRCOD TRQ_"A_-PUT CNV CODE IN A_^1STRCD0 LDQ-_!CVINDX,I_%INCR€€EMENT INDEX TO TABLE BY 1_^1_%STA-_!FLDTBL,B_%SAVE "CNV" NUMBER IN TABLE_^1_%RAO-_!CVINDX,I_%INCREMENT INDEX TO TABLE BY 1_^1_%LDQ-_!QHOLD,I_^1_%LDA-_!1,Q_+GET OMR WORD 1 AGAIN_^1_%AND_"=N$E003_'CLEAR OUT BITS 12-10_^1_%STA-_!1,Q_^1_%LDA-_!ONETIM,I_%IS THIS 1ST OMR AFTER PRECED. OCR ENTRY?_^1_%SAZ_"NXTENT_(NO, CONTINUE_^1_%INQ_"-2_,YES, SET "E" BIT IN LAST OCR ENTRY_^1_%LDA-_!1,Q_^€€1A2000 ADD_"=N$2000_^1_%STA-_!1,Q_^1_%INQ_"2_^1_%CLR_"A_-CLEAR PREV. OCR ENTRY INDICATOR_^1_%STA-_!ONETIM,I_^1NXTENT INQ_"2_-SET INDEX TO NEXT ENTRY_^1_%TRQ_"A_^1_%SUB-_!XDATA,I_'ARE WE AT DATA TABLES?_^1_%INA_"1_^1_%SAZ_"STEBIT_(YES, STOP LOOKING_^1_%JMP*_!EDTZON_(NO, CONTINUE EDIT OF "ZONE" TABLE_^1STEBIT INQ_"-2_,SET "E" BIT IN LAST OMR OR OCR ENTRY_^1_%LDA-_!1,Q_^1_%ADD*_!A200€€0+1_^1_%STA-_!1,Q_^1_%LDQ-_!XDSPC,I_'GET ADDRESS OF "SPEC" TABLE_^1_%LDA-_!5,Q_+PICK UP WORD 6_^1_%CLR_"Q_-BYPASS 2 BITS_^1_%LLS_"11_^1_%CLR_"Q_-ISOLATE "LVL" PARAMETER IN Q_^1_%LLS_"2_^1_%STQ-_!LVLPRM,I_%SAVE "LVL" PARAMETER_^1_%CLR_"Q_^1_%LLS_"1_^1_%STQ-_!SFULPR,I_%SAVE "S" PARAMETER_^1_%CLR_"Q_^1_%LLS_"2_^1_%STQ-_!ASTPRM,I_%SAVE "AST" PARAMETER_^1_%SPC_"1_^1*********************€€************************************************_^1_%SPC_"2_^1SNDINT LDQ-_!ZONFWA,I_%PUT ADDRESS OF "ZONE" IN WORD 2 OF READ INI_^1_%STQ-_!REQWD2,I_^1_%LDA-_!XDATA,I_'PICK UP FWA OF DATA TABLES_^1_%TCQ_"Q_-NEGATE FWA OF ZONE TABLE_^1_%AAQ_"A_-CALCULATE LENGTH OF ZONE TABLE_^1_%STA-_!REQWD4,I_%STORE RESULT IN WORD 4_^1_%CLR_"A_-SET CRC = 0_^1_%STA-_!REQWD1,I_%SAVE IN WORD 1 OF REQUE€€ST_^1_%RTJ-_!REQ29,I_'SEND ZONE TABLE TO 929 VIA INITIALIZE_^1_%SQN_"SETIND_(I/O ERROR_^1_%STQ-_!ERRIND,I_%I/O OK_^1INITOK LDA-_!SFULPR,I_%IS "SFUL" PARAMETER SET?_^1_%SAZ_"REDOC_)NO, GO READ A DOCUMENT_^1SNSFUL ENA_"5_-ENABLE POCKET OVERFLOW - CRC # 5_^1_%STA-_!REQWD1,I_^1_%ENA_"1_-FUNCTION CODE = 1_^1_%STA-_!REQWD4,I_^1_%CLR_"A_-**** SET EXIT IND. = 0 ****_^1_%RTJ-_!REQ29,I_'ISSU€€E POCKET OVERFLOW REQUEST_^1SETIND STQ-_!ERRIND,I_%IF I/O ERROR, ERRIND # 0 OTHERWISE = 0_^1_%SQN_"SETJAM_(BAD I/O, SET INDICATOR_^1REDOC JMP_"READDA_(I/O OK, GO READ A DOCUMENT_^1SETJAM RAO_"JAMUSR_(TURN ON USER JAM INDICATOR_^1_%JMP_"SETFS_)EXIT_^1GOMOVE LDQ-_!OCRLWA,I_%ANY OCR DATA ?_^1_%SQZ_"1_-NO, SET LWAOCR = 0 FOR MOV929_^1_%RTJ*_!SETEND_(YES, SET UP OCR END ADDRESS_^1_%STQ€€_"LWAOCR_(SAVE RESULT IN LWAOCR FOR MOV929 **********_^1TESTOM LDQ-_!OMRLWA,I_%ANY OMR DATA ?_^1_%SQZ_"ENDIT_)NO, PREPARE TO EXIT_^1_%RTJ*_!SETEND_(YES, SET UP OMR END ADDRESS_^1_%STQ_"OMREND_(SAVE RESULT IN OMREND FOR MOV929 **********_^1_%JMP*_!EXCALL_^1ENDIT STQ_"OMRDAT_(NO OMR DATA, SET OMRDAT = 0_^1EXCALL JMP-_!RETNIN,I_%EXIT TO LAST CALLER_^1_%SPC_"1_^1**********************€€*************************************************_^1** SETEND - SETS UP ENDING ADDRESS OF OCR AND/OR OMR DATA FOR MOV929 **_^1**_*SO THAT DATA CAN BE MOVED TO WORKING STORAGE._)***_^1************************************************************************_^1_%SPC_"2_^1SETEND NOP_"0_-RETURN ADDRESS_^1_%SET_"A_^1_%STA-_!1,Q_+INSURE THAT END OF BUFFER HAS A FIELD SEP._^1_%LDA*_!(ZERO€€A),Q_^1_%QLS_"1_-COMPUTE CHARACTER ADDRESS OF LWA_^1_%AND_"XX00FF+1_^1_%INA_"-FILL_)IS LAST CHAR A FILL?_^1_%SAZ_"1_-YES, POINT TO IT_^1_%INQ_"1_-NO, POINT TO NEXT FULL WORD_^1_%INQ_"1_^1_%JMP*_!(SETEND)_%EXIT TO CALLER_^1_%SPC_"1_^1************************************************************************_^1* INIT29 - THIS ROUTINE INITIALIZED FLAGS, COUNTERS, USER INDICATORS, *_^1€€* AND VARIOUS TABLES NEEDED BY THE 929 READ ROUTINE AND_^1* EXTERNAL DRAFT SUBROUTINES_^1************************************************************************_^1_%SPC_"2_^1INIT29 NOP_"0_-RETURN TO CALLER_^1_%LDA_"=XTABL29_%PUT BASE ADDRESS OF TABLES IN_^1_%STA-_!I_-I-REGISTER FOR INDEXING_^1_%LDA_"=XOVERFL_%CLEAR INDICATORS_^1_%SUB_"=XCINDEX_^1_%TRA_"Q_^1_%CLR_"A_^1CLRIND STA-_!€€CVINDX,B_%CLEAR FLAGS AND INDICS._^1_%INQ_"-1_^1_%SQM_"CNTUE_^1_%JMP*_!CLRIND_^1CNTUE STA_"OMRUSR_(CLEAR OMR REJECT INDICATOR_^1_%STA_"LOSUSR_(CLEAR LOST DATA INDICATOR_^1_%STA_"EOFUSR_(CLEAR END-OF-FILE INDICATOR_^1_%STA_"RJRUSR_(CLEAR OCR REJECT INDICATOR_^1_%STA_"BUFUSR_(CLEAR BUFFER OVERFLOW INDICATOR_^1_%STA_"JAMUSR_(CLEAR TRANSPORT CHECK INDICATOR_^1_%LDA-_!OMRFWA,I_%PICK UP€€ OMR FWA (EFFECTIVE 2ND TIME)_^1_%STA_"OMRDAT_(RE-SET OMR FWA_^1_%SPC_"1_^1GOINIT LDA-_!FSTHRU,I_%FIRST TIME THRU ?_^1_%SAZ_"SETD2_)YES, CONTINUE_^1_%LDQ*_!(ADDR29+1)_#PICK UP CALLERS ADDRESS_^1_%INQ_"2_^1RETRNI LDA_"=N$0_*IS RESCAN BUFFER PRESENT ?_^1_%SAZ_"1_-NO, NOT SPECIFIED_^1_%INQ_"1_-YES, INC. CALLERS RETURN BY 1_^1_%STQ*_!(ADDR29+1)_#RE-SET CALLERS ADDRESS_^1_%JMP*_!(INIT29€€)_%EXIT TO INIT29 CALLER_^1SETD2 LDQ_"(R29)_)PICK UP ADDR OF R-LEVEL DATA TBL_^1_%STQ-_!DATA2,I_'SAVE IT FOR LATER_^1_%INQ_"4_-POINT TO NEXT LEVEL_^1_%LDA*_!(ZEROA),Q_^1_%ARS_"4_^1_%AND_"=N$F_^1_%INA_"-1_,IS THIS A W-LEVEL TABLE ?_^1_%SAN_"SETRL2_(NO, SET RLVL2 = ADDR OF 1ST ELEM. ITEM_^1_%STA*_!(SETRL2+1)_#YES, THERE IS NO ELEM ITEM UNDER R_^1_%JMP*_!ADDR29_(CONTINUE_^1SETRL2 STQ€€+_!RLVL2_)SAVE FOR MOV929 **********************_^1ADDR29 RAO+_!R29_^1GTLUNB LDQ_"(R29)_)PICK UP ADDRESS OF ASSIGN TABLE_^1_%STQ_"ASSG29+1_%SAVE ADDRESS OF ASSIGN TABLE_^1_%LDA-_!3,Q_+ISOLATE LU# WORD_^1_%AND_"XXFF00+1_^1_%SAP_"1_-A CTUAL LOGICAL UNIT_^1_%INA_"8_-LOCATION OF LOGICAL UNIT_^1_%ALS_"8_-SET UP REQLU WORD_^1STALU STA_"LUIN_*PUT 929 LOGICAL UNIT WORD IN COMMON_^1_%STA-€€_!REQLU,I_'SAVE IT IN INTERNAL REQUEST BLOCK_^1_%RAO*_!(ADDR29+1)_#POINT TO ADDRESS OF RESCAN BUFFER_^1CHKRES LDQ_"(R29)_)GET ADDRESS OF IT_^1_%LDA*_!(ZEROA),Q_^1_%AND_"XXFF00+1_^1_%SUB_"=N$2000_^1_%SAZ_"RSYES_)THERE IS A RESCAN BUFFER_^1_%CLR_"A_^1_%STA-_!RESFWA,I_%NO RESCAN, CLEAR FLAG_^1_%STA-_!RESLNG,I_%NO RESCAN, CLEAR LNG_^1_%JMP*_!SETINP_^1RSYES LDQ_"(R29)_)PICK UP FWA OF D€€ATA TABLE FOR RESCAN_^1_%LDA-_!1,Q_+PICK UP RESCAN FWA_^1_%STA-_!RESFWA,I_%SAVE IT FOR FSTHRU ROUTINE_^1_%STA*_!RETRNI+1_%SET UP USER RETURN INDICATOR_^1_%LDA-_!2,Q_+PICK UP RESCAN LENGTH_^1H0FFF AND_"=N$0FFF_^1_%ARS_"1_-CALC WORD LENGTH_^1_%STA-_!RESLNG,I_%SAVE RESCAN WORD LENGTH_^1_%RAO*_!(ADDR29+1)_#ADD 1 TO RETURN FOR RESCAN_^1SETINP LDQ-_!XDINP,I_'Q=ADDRESS OF INPUT BUFFER_^1€€_%LDA_"=N$5C5C_^1_%STA*_!(ZEROA),Q_^1_%RAO-_!XDINP,I_'INCREMENT INPUT ADDR BY 1_^1_%JMP*_!(INIT29)_%EXIT TO CALLER_^1_%SPC_"2_^1SRT29 NOP_"0_-RETURN ADDRESS TO "STACK"_^1_%LDQ_"=XTABL29_%PICK UP BASE ADDRESS OF 929 TABLES_^1_%STQ-_!I_-PUT IT IN I-REGISTER_^1_%LDQ*_!SRT29_)PICK UP SORT ROUTINE CALLER ADDRESS_^1_%STQ_"R29_+SAVE IT FOR RETURN_^1_%STA-_!REQWD4,I_%PUT POCKET NO. IN WOR€€D 4_^1_%LDA_"LUIN_^1_%STA-_!REQLU,I_'PUT LOGICAL UNIT # IN REQUEST_^1_%ENA_"4_^1_%STA-_!REQWD1,I_%SORT CRC=4_^1_%CLR_"A_-**** SET EXIT IND. = 0 ****_^1_%RTJ-_!REQ29,I_'SORT THE DOCUMENT_^1_%SQZ_"EXSORT_(SORT IS ERROR FREE_^1_%RAO_"JAMUSR_(SORT ERROR, SET TRANSPORT CHECK_^1EXSORT JMP_"SETFS_)EXIT_^1ZEROA NUM_"0_^1_%EQU_"R29(READ29)_^1_%EJT_]_^1**************************************€€*_^1*_]_^1* MOV929 - MOVE OCR INPUT DATA TO WORKING_^1*_*STORAGE, AS SPECIFIED BY READ INTO_^1*_]_^1* CALLING SEQUENCE: RTJ MOV929_^1*_4(Q) = FWA OCR INPUT_^1*_4(A) = LWA OCR INPUT_^1*_4(P1) = POINTER TO DATA LEVEL 2 OCR_^1*_4(P2) = POINTER TO WORKING STORAGE LEVEL 1_^1*_]_^1*********************************************_^1_%SPC_"4_^1****************************_^1*_]_^1* EQUATE€€S FOR MOVE_^1*_]_^1****************************_^1_%SPC_"3_^1_%SPC_"1_^1D1_#EQU_"D1(1)_^1D2_#EQU_"D2(2)_^1D3_#EQU_"D3(3)_^1_%SPC_"3_^1SPEC_!EQU_"SPEC($5B)_^1FILL_!EQU_"FILL($5B)_^1SEP1_!EQU_"SEP1($5C)_^1SPACE EQU_"SPACE($20)_^1REJECT EQU_"REJECT($40)_^1MINUS EQU_"MINUS($2D)_^1PLUS_!EQU_"PLUS($2B)_^1SEP2_!NUM_"$A3_^1CANCEL NUM_"$A1_^1ASBFLD ADC_"SETBFL_(ADDRESS OF BFIELD SET UP RO€€UTINE_^1ASAFLD ADC_"SETAFL_(ADDRESS OF AFIELD SET UP ROUTINE_^1BLNKB ADC_"LCHDAT-BLNCHK+$1800_^1_%EJT_]_^1*************************************_^1*_]_^1* SBYTE STORE A BYTE_^1*_]_^1*************************************_^1_%SPC_"3_^1SBYTE NOP_"0_^1_%LDQ_"BDATAL_(ADDRESS OF DATA_^1_%TRQ_"A_^1_%AND*_!H7FFF+1_^1_%STA*_!SBYTE1+1_^1SBYTE1 LDA+_!BDATAL_(*** MODIFIED ***_^1_%SQM_"LOW_^€€1_%ALS_"8_^1LOW_"EQU_"LOW(*)_^1HFF00 AND_"=N$FF00_^1_%EOR*_!CHAR_^1_%SQM_"SBYTE2_^1_%ALS_"8_^1SBYTE2 EQU_"SBYTE2(*)_^1_%STA*_!(SBYTE1+1)_^1_%ADQ*_!AFLAG_^1_%SOV_"0_^1_%STQ*_!BDATAL_^1_%RAO*_!BCOUNT_^1_%JMP*_!(SBYTE)_^1_%EJT_]_^1_%SPC_"2_^1NXTCHR EQU_"NXTCHR(*)_$MAIN LOOP TO FETCH AND STORE DATA_^1_%RTJ*_!LCHAR_)LOAD CHARACTER_^1_%SQZ_"STORE_)DATA NOT FIELD SEPARATOR_^1_%JMP*_!FILL€€ER_(AFIELD ENDED - FILL BFIELD_^1STORE EQU_"STORE(*)_^1_%ENA_"MINUS_)NOTE: CODE MODIFICATION - IF NUMERIC ENA MI_^1*_!IS USED OTHERWISE A JMP* STR020 IS USED********************_^1_%SUB*_!CHAR_*IF CHAR IS GREATER THAN - THEN SKIP_^1_%SAM_"STR020_^1_%SAN_"STR010_(ELSE IF CHAR NOT MINUS THEN TRY PLUS_^1_%LDA*_!(SIGNSW)_%SET MINUS SIGN IN DATA TABLE_^1H7FFF AND_"=N$7FFF_^1H8000 E€€OR_"=N$8000_^1_%STA*_!(SIGNSW)_%STORE IT_^1_%JMP*_!NXTCHR_(GET NEXT CHARACTER AND DO NOT STORE SIGN_^1STR010 EQU_"STR010(*)_^1_%INA_"MINUS-PLUS_#IF NOT PLUS THEN STORE CHAR IN WS_^1_%SAN_"STR020_^1_%LDA*_!(SIGNSW)_%ELSE SET DATA TABLE SIGN TO +_^1_%AND*_!H7FFF+1_^1_%STA*_!(SIGNSW)_^1_%JMP*_!NXTCHR_(BYPASS STORE_^1STR020 EQU_"STR020(*)_^1_%RTJ*_!SBYTE_^1_%SOV_"DONE2_^1_%JMP*_!NXTCHR€€_(GET NEXT DATA CHARACTER_^1DONE2 EQU_"DONE2(*)_^1_%RTJ*_!LCHAR_)SLEW TO FIELD SEPARATOR_^1_%SQN_"DONE_^1_%RAO*_!(FTAB)_(INDICATE TRUNCATION OF OCR/OMR DATA_^1_%JMP*_!DONE2_^1FILLER EQU_"FILLER(*)_^1_%SET_"A_-INDICATE SHORT OCR/OMR FIELD_^1_%STA*_!(FTAB)_^1_%LDA*_!FILLC_)GET FILL CHARACTER_^1_%STA*_!CHAR_*SET THE CHARACTER_^1FILL1 EQU_"FILL1(*)_^1_%RTJ*_!SBYTE_)STORE FILL CHARACT€€ER UNTIL WS IF FULL_^1_%SOV_"DONE_^1_%JMP*_!FILL1_)CONTINUE_^1DONE_!EQU_"DONE(*)_^1_%LDA*_!FILLC_)CHECK IF LEFT ADDRESS MUST BE RESET_^1_%INA_"-$30_^1_%SAN_"NRESET_(IF NOT ZERO DO NOT RESET_^1_%LDA*_!ALAST_)ELSE RESET_^1_%STA*_!ADATAL_^1_%ENA_"SPACE_)RESET FILL CHARACTER_^1_%STA*_!FILLC_^1NRESET EQU_"NRESET(*)_^1NXTFLD EQU_"NXTFLD(*)_^1_%RTJ*_!(ASBFLD)_%SET UP B FIELD_^1_%RTJ*_!(AS€€AFLD)_%SET UP AFIELD_^1_%RAO*_!(AFTAB)_'BUMP FIELD COUNT_^1_%RAO*_!FTAB_*BUMP INDEX_^1_%CLR_"A_-CLEAR FIELD ENTRY_^1_%STA*_!(FTAB)_^1_%JMP*_!NXTCHR_^1_%EJT_]_^1*******************************************_^1*_]_^1* LCHAR_!- LOAD CHARACTER FROM OCR INPUT_^1*_+PERFORM CHECKS ON DATA FOR:_^1*_+1) FIELD SEPARATORS_^1*_+2) CANCEL CHARACTERS_^1*_+3) REJECTS_^1*_+4) BLANKS_^1*_+5) FILL C€€HARACTER_^1*_]_^1*******************************************_^1_%SPC_"4_^1LCHAR NOP_"0_^1NXTCH1 EQU_"NXTCH1(*)_^1_%LDQ*_!ADATAL_(ADDRESS OF DATA_^1_%TRQ_"A_K022976_^1_%AND*_!H7FFF+1_E022976_^1_%STA*_!LCHR1+1_E022976_^1LCHR1 LDA+_!ADATAL_(*** MODIFIED ***_+022976_^1_%ADQ*_!AFLAG_)INCREMENT ADDRESS_^1_%STQ*_!ADATAL_(AND SAVE_^1_%SOV_"0_-TURN OFF OVERFLOW IF ANY_^1MODIFY SQP_"LOWE€€R_)UPPER OR LOWER? THIS WORD MODIFIED FOR OMR_^1_%ARS_"8_-UPPER_^1LOWER EQU_"LOWER(*)_^1H00FF AND_"=N$00FF_^1_%STA*_!CHAR_*SAVE CHARACTER_^1_%TRA_"Q_-SAVE CHARACTER IN Q FOR LATER USE_^1_%INA_"-SPEC_^1_%SAM_"LCH020_(IF SPECIAL FALL THRU ELSE SKIP_^1_%SAN_"LCH005_(IF FILL_^1_%JMP*_!NXTCH1_(THEN IGNORE AND GET NEXT CHARACTER_^1LCH005 EQU_"LCH005(*)_$ELSE CHECK THE FIELD SEPARATOR €€CODES_^1_%INA_"FILL-SEP1_$IS IT A 5C_^1_%SAZ_"FSEP01_(YES_^1_%SUB*_!SEP2_*IF = TO FF_^1_%SAN_"LCH015_(THEN COMPLETE FIELD_^1FSEP01 EQU_"FSEP01(*)_^1_%ENQ_"1_-SET FIELD SEPARATOR PARAMETER_^1_%JMP*_!(LCHAR)_'RETURN_^1LCH015 EQU_"LCH015(*)_^1_%TRQ_"A_-RESET CHARACTER_^1_%INA_"-SPEC_^1LCH020 EQU_"LCH020(*)_^1*** CODE MODIFICATION OCCURS DURING INITIALIZATION ***_^1*** VALUES FOR COD€€E LABELS FS1, FS2, AND FS3,_$***_^1*** ARE COMPUTED IF THEY EXIST AND BECOME INA INS. ***_^1*** THE PURPOSE IS TO ACHIEVE HIGH SPEED LOOK UP_!***_^1*** OF THE ALTERNATE FIELD SEPARATORS. IF NONE ARE***_^1*** SPECIFIED THEN THE FOLLOWING CODE TAKES 1,5 US ***_^1*** I.E. A JMP* LCH025 REPLACES THE APPROPRIATE_"***_^1*** INA INSTRUCTION. FOR EXAMPLE IF TWO ALTERNATE ***_^1*** €€ FIELD SEPARATORS ARE SPECIFIED THEN FS3 BECOMES***_^1*** A JMP* LCH025._@***_^1_%SPC_"3_^1******WARNING READ ABOVE******_^1_%SPC_"3_^1FS1_"INA_"-0_,FS1 IS FIRST FIELD SEPARATOR OR JMP* LCH025_^1_%SAZ_"FSEP02_^1FS2_"INA_"-0_,IS A SECOND FIELD SEPARATOR OR JMP* LCH025_^1_%SAZ_"FSEP02_(FOUND IT_^1FS3_"INA_"-0_,IS A THIRD FIELD SEPARATOR OR JMP* LCH025_^1_%SAN_"LCH025_(NOT ANY_^1FSEP€€02 EQU_"FSEP02(*)_^1_%JMP*_!FSEP01_(SET FIELD SEPARTOR RETURN_^1LCH025 EQU_"LCH025(*)_^1BLNCHK INQ_"-SPACE_^1*_"OR UNALTERED. CHANGED TO JMP* LCHDAT AFTER FIRST NON_^1* BLANK CHARACTER IS FOUND._^1_%SQZ_"LCHDAT_(STILL BLANKS_^1_%CLR_"A_^1_%STA*_!(ABUSR)_'CLEAR BLANK LINE INDICATOR_^1_%LDA*_!BLNKB_)LOAD JMP* LCHDAT TO MODIFIY ABOVE_^1_%STA*_!BLNCHK_(BYPASS THIS CHECK FOR DURATION €€OF RECORD_^1_%SPC_"3_^1LCHDAT EQU_"LCHDAT(*)_^1_%ENQ_"0_^1_%JMP*_!(LCHAR)_'RETURN_^1_%SPC_"2_^1DFS1_!EQU_"DFS1(LCH025-FS1)_^1DFS2_!EQU_"DFS2(LCH025-FS2)_^1DFS3_!EQU_"DFS3(LCH025-FS3)_^1_%EJT_]_^1_%EJT_]_^1****************************************************_^1*_]_^1* LOMR - LOAD OMR DATA INTO CHAR_^1*_]_^1*_(LOMR IS CALLED DURING PROCESSING OF OMR_^1*_(DATA. WHEN ALL OCR DATA HAS€€ BEEN PROCESSED_^1*_(A JMP LOMR IS INSERTED IN LCHAR SUCH THAT_^1*_(IN PLACE OF USING THE INLINE LBYTE FUNCTION_^1*_(LCHAR JMP S TO LOMR. CODE MODIFICATION IS_^1*_(NECESSITATED DUE TO THE TIMING OF THE 929_^1*_]_^1*****************************************************_^1_%SPC_"4_^1LOMR_!EQU_"LOMR(*)_^1_%SQM_"LOMR10_(IF ORIGINAL ADDRESS WAS ODD_^1_%LDA*_!TEMP_*THEN IF FILL_^1_%SAP_"€€LOMR05_^1_%JMP*_!NXTCH1_(IGNORE IT_^1LOMR05 EQU_"LOMR05(*)_^1_%CLR_"Q_-ELSE RETURN TEMP AS CHARACTER_^1_%JMP*_!LOMRET_(AND RETURN_^1LOMR10 EQU_"LOMR10(*)_$NEW DATA WORD_^1_%AND*_!H7FFF+1_^1_%STA*_!TEMP_*SAVE DATA_^1_%ALS_"1_-IF BIT 14 ON_^1_%SAP_"LOMR20_(THEN_^1_%SET_"A_-A FIELD MARK WAS FOUND_^1_%STA*_!TEMP_*SET TEMP TO FILL SO SECOND CHARACTER IS_^1_%ENQ_"1_-IGNORED AND RETURN A €€FIELD SEPARATOR_^1_%JMP*_!(LCHAR)_'RETURN THRU LCHAR_^1LOMR20 EQU_"LOMR20(*)_^1_%LDQ*_!(CONOMR)_%CHECK IF OMR CONVERSION MODE_^1_%SQN_"LOMR29_(IF ZERO THEN_^1_%JMP*_!LOMR30_(IGNORE CONVERSION_^1LOMR29 EQU_"LOMR29(*)_^1_%CLR_"Q_-CONVERSION REQUIRED_^1_%LLS_"3_-OMR STATUS IN Q, DATA LEFT JUSTIFIED IN A_^1*_000 SINGLE MARK_^1*_001 OMR REJECT_^1*_002 MULTIPLE MARKS (REJECT FOR CONVE€€RSION)_^1*_003 BLANK - NO MARKS_^1_%JMP*_!CONVER,Q_%CAS CONVER AS SHOWN ABOVE_^1_%EJT_]_^1***************************************************_^1*_]_^1* DATA AREA FOR MOVE PARAMETERS ETC._^1*_]_^1***************************************************_^1_%SPC_"4_^1AFTAB ADC_"FLDTAB_(ADDRESS OF FIELD TABLE_^1ADATAL ADC_"0_-POINTER TO CHARACTER IN OCR INPUT_^1AFLAG ADC_"0_-DIRECTION O€€F MOVE_^1BDATAL ADC_"0_^1FILLC ADC_"0_-FILLER CHARACTER_^1ALAST ADC_"0_-LAST COORDINATE IN OCR BUFFER AFTER MOVE_^1CHAR_!ADC_"0_-CURRENT CHARACTER_^1TEMP_!ADC_"0_^1TEMP2 ADC_"0_^1BCOUNT ADC_"0_^1SIGNSW ADC_"0_-POINTER TO DATA TABLE SIGN INDICATOR FOR WS_^1FTAB_!ADC_"FLDTAB_(INDEX INTO FIELD TABLE_^1ABUSR ADC_"BLNUSR_(ADDRESS OF BLANK LINE INDICATOR_^1_%EJT_]_^1_%SPC_"3_^1LOMR30€€ EQU_"LOMR30(*)_^1_%STQ*_!(ABUSR)_'CLEAR BLANK LINE INDICATOR_^1_%LDA*_!TEMP_*RESTORE ORIGINAL OMR DATA_^1_%LDQ*_!AFLAG_)CHECK DIRECTION OF STORE_^1_%SQM_"LOMR40_^1_%LDQ_"HFF00+1_^1_%LAQ_"Q_-(Q) =UPPER_^1_%QLS_"8_^1_%JMP*_!LOMR50_^1LOMR40 EQU_"LOMR40(*)_^1_%LDQ*_!H00FF+1_^1_%LAQ_"Q_-Q= LOWER_^1_%ALS_"8_-(A) = LOWER_^1LOMR50 EQU_"LOMR50(*)_^1_%AND*_!H00FF+1_^1LOMRET EQU_"LOMRET(*)_^€€1_%STQ*_!TEMP_*CLEAR TEMP OR SET IT_^1_%STA*_!CHAR_*SAVE CHARACTER_^1_%CLR_"Q_-SET CHARACTER RETURN_^1_%JMP*_!(LCHAR)_'RETURN THROUGH LCHAR_^1_%SPC_"3_^1SLEW_!NOP_"0_-SLEW TO FIELD SEPARATOR_^1_%RTJ*_!LCHAR_)CALL LCHAR_^1_%SQN_"SLEW1_^1_%JMP*_!SLEW+1_^1SLEW1 EQU_"SLEW1(*)_^1_%JMP*_!(SLEW)_^1_%EJT_]_^1CONVER EQU_"CONVER(*)_^1_%JMP*_!CONV05_(00 SINGLE MARK_^1_%JMP*_!CONRJ1_(01 REJEC€€T BUT DO NOT SET REJCET INDICATOR_^1_%JMP*_!CONREJ_(02 MULTIPLE MARKS - SET REJECT INDICATOR_^1_%ENA_"SPACE_)03 BLANK LINE_^1_%JMP*_!OMRCNE_(RETURN BLANK_^1CONREJ EQU_"CONREJ(*)_^1_%RAO_"OMRUSR_(SET MARK REJECT FLAG_^1CONRJ1 EQU_"CONRJ1(*)_^1_%ENA_"REJECT_(SET REJECT CODE IN A AND RETURN_^1_%JMP*_!OMRCNE_^1CONV05 EQU_"CONV05(*)_^1_%STQ*_!(ABUSR)_'CLEAR BALNK LINE INDICATOR_^1_%INA_€€"1_-INSURE BIT 0 IS ON_^1_%LDQ*_!(CONOMR)_%GET CONVERSION INDEX_^1CON010 EQU_"CON010(*)_^1_%SAM_"CON020_(FOUND BIT_^1_%ALS_"1_^1_%INQ_"-1_,COUNT SHIFTS TO FIND WHICH BIT IS ON_^1_%JMP*_!CON010_^1CON020 EQU_"CON020(*)_^1_%TRQ_"A_-RESULT IN Q AND A DETRMINE CONVERSION_^1_%SQM_"SIGN_*IF RESULT = + THE (A) = 0 - 9_^1_%INA_"$30_+GENERATE ASCII CODE_^1OMRCNE EQU_"OMRCNE(*)_^1_%STA*_!CHA€€R_^1_%LDQ*_!ADATAL_(INCREMENT ADDRESS_^1_%ADQ*_!AFLAG_^1_%SOV_"0_-TURN OFF OVERFLOW IF ANY_^1_%STQ*_!ADATAL_^1_%CLR_"Q_^1_%JMP*_!(LCHAR)_'RETURN THRU LCHAR_^1SIGN_!EQU_"SIGN(*)_^1_%INQ_"2_^1_%SQM_"CON030_(IF STILL MINUS THEN CONVERT BIT 11_^1_%CLR_"A_-SET UP TO CONVERT SIGN_^1_%SQN_"CON025_^1_%ENA_"-2_^1CON025 EQU_"CON025(*)_^1_%INA_"MINUS_^1_%JMP*_!OMRCNE_^1CON030 EQU_"CON030(*)_^€€1_%TCQ_"Q_-RESULT = -1_^1_%INQ_"-3_,IF -1, MINUS SIGN, IF -2, PLUS SIGN_^1_%JMP*_!CON020_(+ VALUE = NUMERIC_^1_%EJT_]_^1**********************************************_^1*_]_^1* SETAFL SETUP A FIELD - OCR INPUT_^1*_]_^1**********************************************_^1_%SPC_"4_^1SETAFL NOP_"0_-ENTRY_^1_%LDA_"H8000+1_^1_%STA*_!AFLAG_^1_%LDQ_"P1_^1_%SQZ_"SETA10_(DO NOT BOTHER_^1SETA0€€4 EQU_"SETA04(*)_^1_%LDA*_!(ZEROB),Q_^1_%INA_"-$20_^1_%SAZ_"SETA07_(IT IS 2_^1_%CLR_"A_-ELSE SET P1 TO ZERO_^1_%STA*_!P1_^1_%JMP*_!SETA10_(NEXT PASS DO NOT CHECK DATA TABLES_^1SETA07 EQU_"SETA07(*)_^1_%LDA-_!D2,Q_*CHECK FIELD SEPARATOR COUNT_^1_%AND_"H0FFF+1_^1_%INA_"-1_^1_%INQ_"4_-POINT TO NEXT DATA TABLE_^1_%STQ*_!P1_^1_%SAZ_"SETA10_^1SETA08 EQU_"SETA08(*)_^1_%RTJ*_!SLEW_*SLEW TO€€ FIELD SEPARATOR_^1_%SPC_"3_^1SETA10 EQU_"SETA10(*)_^1_%RAO*_!CONOMR_(INCREMENT OMR INDEX EVEN WITH OCR_^1_%LDA*_!ADATAL_(CHECK IF INPUT AREA FINISHED_^1_%ALS_"1_-CONVERT TO CHARACTER ADDRESS_^1_%SUB*_!LAST_^1_%SAM_"SETA15_(NO CONTINUE_^1_%LDA*_!FWAOMR_^1_%SAN_"SETA13_^1_%JMP_"MOVDNE_^1SETA13 EQU_"SETA13(*)_^1_%CLR_"Q_^1_%STQ*_!FWAOMR_(CLEAR OMR DATA WORD_^1_%STA*_!ADATAL_(SET LEFT€€ MOST COORDINATE_^1_%LDA*_!OMREND_(GET LAST W A_^1_%STA*_!LAST_^1_%LDA*_!LOMRC_)MODIFY LCHAR TO USE LOMER_^1_%STA*_!(AMODL)_^1_%LDA_"=XFLDOMR_%GET OMR FIELD TABLE ADDRESS_^1_%STA*_!CONOMR_(AND INITIALIZE OMR INDEX_^1SETA15 EQU_"SETA15(*)_^1_%LDA*_!FILLC_)CHECK IF BFIEDL IS NUMERIC_^1_%INA_"-$30_^1_%SAZ_"SETANM_(YES_^1_%LDA*_!ASIGN_)CODE MODIFICATION - SET ALPHA MOVE ********_^1_%ST€€A*_!(ISTORE)_%CODE MODIFICATION - SET ALPHA MOVE ******_^1_%JMP*_!(SETAFL)_%RETURN_^1_%SPC_"3_^1CONOMR ADC_"0_^1_%SPC_"3_^1SETANM EQU_"SETANM(*)_^1_%RTJ*_!SLEW_*SLEW TO FIEDL SEPARATOR_^1SETA20 EQU_"SETA20(*)_^1_%LDQ*_!ADATAL_^1_%STQ*_!ALAST_)SET LEFT LIMIT_^1_%LDA_"H7FFF+1_^1_%AAQ_"Q_-COMPUTE RIGHTMOST CHARACTER_^1_%AAQ_"Q_-I.E. SUBTRACT 2 FROM FS ADDRESS +1_^1_%SOV_"0_-TURN OFF€€ OVERFLOW_^1_%STQ*_!ADATAL_(FIELD MARK_^1_%STA*_!AFLAG_^1_%LDA*_!NSIGN_)CODE MODIFICATION - SET NUMERIC MOVE SIGN C_^1_%STA*_!(ISTORE)_%CODE MODIFICATION - SET NUMERIC MOVE *****_^1_%JMP*_!(SETAFL)_^1ASIGN ADC_"STR020-STORE+$1800_^1LOMRC ADC_"$1800+LOMR-MODIFY_^1NSIGN ENA_"MINUS_)NUMERIC MOVE SIGN CHECK_^1_%EJT_]_^1SETBFL NOP_"0_^1_%LDQ*_!P2_,POINTER TO CURRENT DATA STMNT_^1_%L€€DA*_!(ZEROB),Q_^1_%SAZ_"SETB01_(IF ZERO COMPLETE_^1_%AND*_!H00F0_)MASK LEVEL NUMBER_^1_%STA*_!TEMPX_)SAVE FOR LATER_^1_%INA_"-$10_*CHECK FOR LEVEL 1_^1_%SAN_"SETB02_(NO)_^1_%LDA*_!FIRSTP_(CHECK IF FIRST PASS_^1_%RAO*_!FIRSTP_^1_%SAZ_"SETB02_(THEN PROCESS_^1SETB01 EQU_"SETB01(*)_^1_%JMP*_!MOVEXT_(EXIT MOVE_^1SETB02 EQU_"SETB02(*)_^1_%LDA-_!D3,Q_*CHECK NEXT LEVEL_^1_%AND*_!H00F0_^1_%€€STA*_!TEMPX2_^1_%SUB*_!TEMPX_^1_%INA_"-$10_*IF CURRENT LEVEL EQUAL TO NEXT LEVEL_^1_%INQ_"3_^1_%SAM_"ELEMNT_(THEN ELEMENTARY INTEM FOUND_^1_%LDA*_!TEMPX2_(ELSE CHECK NEXT LEVEL_^1_%SAN_"SETB03_(IF ZERO - END OF DATA TABLES_^1MOVEXT EQU_"MOVEXT(*)_^1_%CLR_"A_-CLEAR FIELD CHECK PARAMETER_^1_%STA*_!BFLDX_^1MOV100 EQU_"MOV100(*)_^1_%RTJ*_!SETAFL_(SLEW TO END OF OCR/OMR DATA_^1*_0NOTE: €€WILL NOT RETURN HEN OCR/OMR DATA EXHAUSTED_^1_%RAO*_!BFLDX_)COUNT FIELD SEPARTORS AFTER WS EXHAUSTED_^1MOV105 EQU_"MOV105(*)_^1_%RTJ_"SLEW_*SLEW TO FS_^1_%JMP*_!MOV100_^1SETB03 EQU_"SETB03(*)_^1_%STA*_!TEMPX_)ELSE CONTINUE_^1_%JMP*_!SETB02_^1_%SPC_"4_^1ELEMNT EQU_"ELEMNT(*)_^1_%STQ*_!P2_,RESET P2 TO POINT TO NEXT DATA TABLE_^1_%INQ_"-3_,AND THEN BACK TO CURRENT_^1_%LDA-_!D2,Q_*COMP€€UTE INVERSE LENGTH OF FIELD_^1_%AND_"H0FFF+1_^1A7FFF EOR_"H7FFF+1_^1_%INA_"1_^1_%STA_"BCOUNT_(SET MAXIMUM BFIELD STORE COUNT_^1_%LDA-_!D1,Q_*COMPUTE CHARACTER ADDRESS_^1_%ALS_"1_^1_%STA*_!(ABDATA)_^1_%LDA*_!(ZEROB),Q_^1_%ALS_"12_^1_%SAP_"SETB04_^1_%RAO*_!(ABDATA)_%SET LOWER CHARACTER_^1SETB04 EQU_"SETB04(*)_^1_%ALS_"1_-CHECK NUMERCIC OPTION_^1_%SAM_"SETBNM_^1_%ENA_"$20_+SET BLANK€€ FILL CHARACTER_^1_%STA*_!(AFILLC)_^1_%LDA*_!(ABDATA)_^1SETB05 EQU_"SETB05(*)_^1_%ALS_"15_,RESET CHARACTER ADDRESS FOR FAST USE_^1_%STA*_!(ABDATA)_^1_%JMP*_!(SETBFL)_%RETURN_^1ZEROB NUM_"0_^1SETBNM EQU_"SETBNM(*)_^1_%INQ_"D2_,SET POINTER TO SIGN SWITHC_^1_%STQ_"SIGNSW_^1_%LDA*_!(ZEROB),Q_^1_%AND_"H7FFF+1_^1_%EOR_"H8000+1_^1_%STA*_!(ZEROB),Q_^1_%ENA_"$30_+SET ZERO FILL_^1_%STA*_!(A€€FILLC)_^1_%LDA*_!(ZEROB),Q_^1_%AND_"H0FFF+1_^1_%ADD*_!(ABDATA)_%COMPUTE RIGHT MOST CHARACTER_^1_%INA_"-1_,BACK UP ONE TO COMPENSATE FOR LENGTH_^1_%JMP*_!SETB05_^1H00F0 ADC_"$F0_^1ISTORE ADC_"STORE_^1_%EJT_]_^1******************************************_^1*_]_^1* MOV929 - MOVE RAW OCR/OMR DATA TO WS_^1*_]_^1******************************************_^1_%SPC_"3_^1P1_#ADC_"0_-POINTER €€TO R LEVEL 2 DATA TABLES_^1AMODL ADC_"MODIFY_^1AADAT ADC_"ADATAL_(ADDRESS OF CHARACTER POINTER FOR OCR INPUT_^1BFLDX ADC_"0_-NUMBER FOR FIELD SEPARATORS AFTER COMPLETIO_^1TEMPX ADC_"0_-TEMPORARY 1_^1TEMPX2 ADC_"0_-TEMPORARY 2_^1LAST_!ADC_"0_-LAST CHARACTER ADDRESS OF VALID OMR/OCR DAT_^1P2_#ADC_"0_-POINTER TO WORKING STORAGE DATA TABLES_^1FIRSTP ADC_"0_-FIRST PASS FLAG_^1FWAOCR€€ ADC_"0_^1FWAOMR ADC_"0_^1LWAOCR ADC_"0_^1OMRDAT ADC_"0_-FWA OMR BUFFER_^1OMREND ADC_"0_-LWA OF OMR BUFFER_^1RLVL2 ADC_"0_-ADDRESS OF 2 LEVEL R STATEMENT_^1BLNK1 INQ_"-SPACE_(USED FOR CODE RESETING_^1LOCRC SQP_"1_-USED TO MODIFY LCHAR FOR OCR_^1AFTAB2 ADC_"FLDTAB_(ADDRESS OF FIELD TABLE_^1ABDATA ADC_"BDATAL_^1AFILLC ADC_"FILLC_^1MOV92X EQU_"MOV92X(*)_^1MOV929 NOP_"0_-ENTRY TO MO€€V929_^1_%LDA*_!LOCRC_)MODIFY CODE SO LCHAR PROCESSES OCR DATA_^1_%STA*_!(AMODL)_^1_%LDA*_!BLNK1_)RESET BLANK LINE_^1_%STA_"BLNCHK_^1_%RAO_"BLNUSR_(SET ALL BLANK INDICATOR_^1_%LDA*_!RLVL2_)FIND 2 LEVEL IF ANY_^1_%STA*_!P1_^1_%SET_"A_-INITIALIZE FIELD CHECK PARAMETER_^1_%STA*_!BFLDX_^1_%CLR_"A_-CLEAR POINTERS_^1_%STA*_!FIRSTP_^1_%STA*_!CONOMR_^1_%STA*_!FLDTAB_^1_%LDA*_!AFTAB2_(SET FI€€ELD COUNT = 0 AND INITIALIZE INDEX_^1_%STA_"FTAB_^1_%LDQ*_!MOV929_^1_%LDA-_!1,Q_+FIND WORKING STORAGE_^1_%STA*_!P2_^1_%INQ_"2_^1_%STQ*_!MOV929_(SET REUTNR ADDRESS_^1_%SAZ_"MOVDNE_^1_%LDA*_!LWAOCR_^1_%STA*_!LAST_^1_%LDA*_!OMRDAT_^1_%STA*_!FWAOMR_^1_%LDA*_!FWAOCR_^1_%STA*_!(AADAT)_^1_%JMP_"NXTFLD_(START PROCESSING_^1MOVDNE EQU_"MOVDNE(*)_^1_%LDA*_!FLDTAB_(GET NUMBER OF FIELD SEPARATO€€RS_^1_%ADD*_!BFLDX_^1_%STA_"NOFS_^1_%JMP*_!(MOV929)_%RETURN_^1FLDTAB ADC_"0_^1_%BZS_"(31)_^1_%EJT_]_^1*************************************************_^1*_]_^1* FLDCHK - INDICATE THAT THE FIELD ORDINAL_^1*_*SPECIFIED IN DATA-NAME WAS TRUNCATED,_^1*_*FILLED, EQUAL, OR NOT MOVED. FLDCHK_^1*_*MAY BE CALLED AFTER MOV929 AS FOLLOWS:_^1*_]_^1*_*FLDCHK DATANAME,TRUNCATION,SHORT,INVALID€€_^1*_]_^1*_*FLDCHK TRANSFERS CONTROL TO ONE OF THE_^1*_*ABOVE ADDRESSES OR RETURNS FOLLOWING THE_^1*_*CALL DEPENDING ON THE FIELD SPECIFIED._^1*_]_^1*_*IF THE ORDINAL SPECIFIED IS ZERO THEN_^1*_*THE NUMBER OF FIELDS READ AND MOVED IS_^1*_*COMPARED TO THE NUMBER ACTUALLY READ._^1*_*THUS ORDINAL ZERO PROVIDES AN OVERALL_^1*_*FIELD CHECK ON A DOCUMENT BASIS._^1*_]_^1******************€€********************************_^1ZEROC NUM_"0_^1_%SPC_"4_^1FLDCHX EQU_"FLDCHX(*)_^1FLDCHK NOP_"0_-ENTRY_^1_%LDQ*_!(FLDCHK)_%ADDRESS OF WS ENTRY_^1_%LDQ-_!1,Q_+GET ADDRESS OF ORDINAL_^1_%LDA*_!(ZEROC),Q_^1_%SUB_"=N$3030_'CONVERT TO BINARY_^1_%LDQ_"H00FF+1_^1_%LAQ_"Q_-COMPUTE ORDINAL OF FIELD TO BE CHECKED_^1_%STQ*_!TEMP1_^1_%ARS_"8_^1_%MUI_"=N$A_^1_%ADD*_!TEMP1_^1_%STA*_!TEMP1_^1€€_%SAN_"FLD010_(IF ORDINAL = 0_^1_%LDA*_!BFLDX_)THEN BFLDX = FLAG TO RETURN_^1_%JMP*_!VALSET_^1FLD010 EQU_"FLD010(*)_^1_%TRA_"Q_-VERIFY THE ORDINAL IS IS TABLE_^1_%SUB*_!FLDTAB_(NUMBER OF FIELDS_^1_%INA_"-1_^1_%SAM_"FLD020_(IF ORDINAL IS GREATER THAN A NUMBER OF FS_^1_%LDQ*_!FLDCHK_(THEN RETURN INVALID_^1_%LDQ-_!INVALD,Q_^1_%JMP*_!(ZEROC),Q_^1FLD020 EQU_"FLD020(*)_^1_%LDA*_!FLDTAB,Q€€_%GET FIELD DATA FLAG_^1VALSET EQU_"VALSET(*)_^1_%LDQ*_!FLDCHK_^1_%SAN_"FLD030_(IF ZERO THEN_^1_%JMP-_!EQUAL,Q_'RETURN TO EQUAL - AFTER CALLING SEQUNECE_^1FLD030 EQU_"FLD030(*)_^1_%SAM_"FLD040_(IF POSITIVE RETURN_^1_%LDQ-_!TRUNC,Q_'TRUNCATED FIELD_^1_%JMP*_!(ZEROC),Q_^1FLD040 EQU_"FLD040(*)_^1_%LDQ-_!SHORT,Q_'IF NEGATIVE THEN RETURN FILLED FIEDL_^1_%JMP*_!(ZEROC),Q_^1TEMP1 ADC_"0_€l^1INVALD EQU_"INVALD(3)_^1SHORT EQU_"SHORT(2)_^1TRUNC EQU_"TRUNC(1)_^1EQUAL EQU_"EQUAL(4)_^1_%END_"DZ_^__lPSORT29 CSY/ P€1_%NAM SORT29_'929 SORT DRAFT 5.1 12/02/74_^1_%ENT_"STACKX_^1_%EXT_"SRT29,EOFUSR_^1ZEROS NUM_"0_^1_%COM_"LUIN(1)_^1STACKX NOP_"0_-ENTRY TO 929 STACK_^1_%EQU_"STACK(STACKX)_^1_%CLR_"A_^1_%STA_"EOFUSR_(CLEAR END-OF-FILE INDICATOR_^1_%LDQ*_!(STACK)_'GET ADDRESS OF DATA TABLE_^1_%RAO*_!STACK_)SET UP RETURN ADDRESS_^1_%LDQ-_!1,Q_+2ND WORD POINTS TO STACKER NUMBER_^1_%LDA*_!(ZEROS),Q_^€ž1_%SUB_"=N$3030_^1_%TRA_"Q_^1_%QRS_"4_^1_%AAQ_"A_-COMBINE HEX DIGITS_^1_%RTJ_"SRT29_)GO TO 929 SORT ROUTIME_^1_%JMP*_!(STACK)_'EXIT TO CALLER_^1_%END_"DZ_^__žPREAD CSY/ P€1_%NAM READ_)NON-OCR READ DRAFT 5.1 12/02/74_^1*_(06-15-75_)CCN1700REA51-001_^1_%EXT_"EOFUSR_^1_%ENT_"READX_^1_%COM_"LUIN(1)_^1READX ADC_"0_-ENTRY-READ_^1_%EQU_"READ(READX)_^1_%LDQ*_!(READ)_^1_%LDA-_!1,Q_^1_%STA*_!REQUST+6_^1_%LDA-_!2,Q_^1H0FFF AND_"=N$0FFF_^1_%INA_"1_^1_%ARS_"1_^1_%STA*_!REQUST+5_^1_%RAO*_!READ_^1_%LDQ*_!(READ)_^1_%LDA-_!3,Q_^1_%AND_"=N$FF00_^1_%SAP_"1_^1_%INA_€€"8_^1_%ALS_"8_^1_%STA_"LUIN_^1_%LDA-_!4,Q_^1_%AND_"=N$4000_^1_%ARS_"2_^1_%ADD_"LUIN_^1_%STA*_!REQUST+4_^1_%AND*_!H0FFF+1_^1_%STA*_!MODLOG_^1_%CLR_"A_^1_%STA_"EOFUSR_^1REQUST RTJ-_!($F4)_^1_%NUM_"$0800_^1_%NUM_"0_^1THRED NUM_"0_^1_%ADC_"0_%LOGICAL NUM_^1_%NUM_"0_%SIZE_^1_%ADC_"0_%STARTING ADDR_^1CKTHRD LDA*_!THRED_^1_%SAZ_"1_^1_%JMP*_!CKTHRD_(WAIT FOR I/O TO COMPLETE_^1_%RTJ-_!($F4€Ύ)_%REQUEST_^1_%NUM_"$600_%OF NON OCR_^1MODLOG NUM_"0_#DEVICE_^1_%NUM_"0_-CCN1700REA51-001_^1_%ALS_"4_^1_%SAP_"RETCTR_^1EOFCT RAO_"EOFUSR_^1RETCTR RAO*_!READ_^1_%JMP*_!(READ)_^1_%END_"DZ_^__ΎPMOVE CSY/ P€1_%NAM MOVE_)NON-OCR MOVE DRAFT 5.1 12/02/74_^1***********************************************************************_^1***********************************************************************_^1*_]_^1* C. B. EVANS_^1* CONTROL DATA CORPORATION_^1* RABINOW ENGINEERING DIVISION_^1* 07 NOVEMBER 1968_^1*_]_^1***********************************************************************_^1***€€********************************************************************_^1*_]_^1*_]_^1*_]_^1*** THIS ROUTINE WAS MODIFIED FOR VER. 4.0 AS FOLLOWS_1M_^1*** MOVENU AND MOVEAN STATEMENTS ARE CHANGED TO_^1*** MOVOCR IF IT IS A MOVE FROM AN OCR R_^1*** LEVEL STATEMENT. ALL OTHER TYPE MOVES USE_^1*** A "MOVE" STATEMENT._^1*_]_^1*_>* * * * * * * *_^1*_>*_,*_^1*_>*_!M O V E_!*_^1*_>*_,*_^1*_€€>* * * * * * * *_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1*_]_^1_%ENT_"MOVEX_^1_%ENT_"MOVSTR_^1_%ENT_"FETCH_^1_%ENT_"STORE_^1_%ENT_"LDBFLD_^1_%ENT_"BCOMP_^1*_]_^1*_]_^1***********************************************************************_^1*****************************************************€€******************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_9*** ROUTINE DESCRIPTION ***_^1*_]_^1*_]_^1*_]_^1*_]_^1* DATA IS TRANSFERRED FROM ONE AREA OF CORE TO ANOTHER, IN ACCORDANCE_^1* WITH THE SPECIFICATIONS FOR THE RECEIVING ITEM. THE ORIGINAL_^1* (SOURCE) ITEM IS NOT ALTERED._^1*_!ZERO "FILL" AND RIGHT JUSTIFICATION IS STANDARD._^1*_!PROPER OPERATIONAL SIGN (+ OR -) FOLLOWS TO THE RECEI€€VING FIELD_^1*_!BOTH ITEMS MUST BE NUMERIC AND ELEMENTARY ITEMS. IF THIS RULE_^1*_!IS VIOLATED, THE MOVE IS AUTOMATICALLY TREATED AS ALPHANUMERIC._^1*_!PRIOR TO MOVING, THE SOURCE AND RECEIVING ITEMS ARE ALIGNED BY_^1*_!THE ASSUMED DECIMAL POINTS, RELATIVE TO THE RECEIVING FIELD._^1*_!THIS COULD CAUSE LOSS OF LEADING AND/OR TRAILING DIGITS._^1*_!IF NOT SPECIFIED, THE FRACTIONAL LE€€NGTH IS ASSUMED TO BE ZERO._^1*_]_^1* THE INPUT MOVE IS CALLED BY A MOVOCR INSTRUCTION OR_^1* THE SENDING FIELD IS AN R LEVEL._^1*_!THE DATA IS MOVED, FORMATTED ACCORDING TO THE SPECIFICATIONS DE-_^1*_!FINED BY THE WORK AREA, AND SIGNED. IF NO OPERATIONAL SIGN_^1*_!(+ OR -) PRECEEDS THE INPUT DATA, POSITIVE IS ASSUMED._^1*_!THE ONLY TWO LEVELS OF ITEMS THAT MAY BE MVED IN THIS MAN€€NER ARE_^1*_!LEVEL 1 (THE RECORD) OR AN ELEMENTARY ITEM. AN ATTEMPT TO MOVE_^1*_!ANY OTHER GROUP ITEM WILL CAUSE UNDETERMINED RESULTS._^1*_!THE FIELDS WITHIN THE "INPUT" AREA MUST BE DEFINED BY FIELD SE-_^1*_!PARATORS._^1*_!DECIMAL POINTS IN THE "INPUT" AREA ARE ASSUMED AND MUST BE FOL-_^1*_!LOWED BY THE CORRECT NUMBER OF DIGITS AS DETERMINED IN THE "DATA"_^1*_!DIVISION BY THE FRA€€CTIONAL LENGTH._^1***********************************************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_8* DATA TABLE FORMAT *_^1*_]_^1* WORD 1 -_^1*_*BIT 0 - ADJUSTMENT_#0 = LEFT-JUSTIFIED_^1*_A1 = RIGHT-JUSTIFIED_^1*_*BIT 1 - FILL_*0 = BLANKS_^1*_A1 = ZEROS_^1*_*BIT 2 - MODE_*0 = €€ALPHA-NUMERIC_^1*_A1 = NUMERIC_^1*_*BIT 3 - BYTE_*0 = BITS 8-15_^1*_A1 = BITS 0-7_^1*_*BITS 4-7 - LEVEL_%1 TO 9 (HEX), WHERE 1 IS HIGHEST._^1*_*BITS 8-10 - UNUSED_^1*_*BITS 11-15 - PHASE_#10000 = INPUT_^1*_A01000 = OUTPUT_^1*_A00100 = WORKING_^1*_A00010 = CONSTANT_^1*_A00001 = REPORT_^1*_]_^1*_]_^1* WORD 2 - CORE ADDRESS OF THE DATA (0 TO 7FFF)._^1*_]_^1*_]_^1* WORD 3 -_^1*_*BIT€€S 0-11 - DATA LENGTH (BINARY NUMBER OF CHARACTERS)._^1*_+BITS 12-14 - FRACTION LENGTH (0-7)._^1*_*BIT 15 - SIGN_'0 = POSITIVE_^1*_A1 = NEGATIVE_^1*_]_^1*_]_^1* WORD 4 - ENVIRONMENT TABLE POINTER (ONLY PRESENT FOR INPUT ENTRY);_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1*******************************************€€****************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_<*** CONSTANTS ***_^1*_]_^1*_]_^1_%EQU_"C1(1),C2(2),C3(3),C4(4)_^1_%EQU_"AFLD(5),AFLD1(6),AFLD2(7),BFLD(8),BFLD1(9),BFLD2(10)_^1_%EQU_"ABYTE(11),BBYTE(12),ASIZE(13),BSIZE(14)_^1_%EQU_"AFRAC(15),BFRAC(16),P2(17),P1(18),HOLD(19)_^1_%EQU_"HOLD2(20),AB(21),BB(22),ANO(23),BNO(24)_^1_%EQU_"CHAR(25),FLAG1(26),FLAG2(27)_^1_%EQU_"FL€€DSEP(28),FTABLE(29)_^1_%EQU_"CHAR1(6),SIGNSW(4),SEPSW(18)_^1*_]_^1*_]_^1*_]_^1*_]_^1ALCORE NUM_"0_'SAVES Q REGISTER_^1_%NUM_"0_.SAVES A REGISTER._^1_%NUM_"0_-SAVES I REGISTER._^1_%NUM_"0_.EXIT ADDRESS._^1_%NUM_"0_$ENTRY SWITCH AND SIGNSW._^1_%NUM_"0_.AFLD_^1_%NUM_"0_$AFLD1 AND CHAR1._^1_%NUM_"0_-AFLD2_^1_%NUM_"0_-BFLD_^1_%NUM_"0_-BFLD1_^1_%NUM_"0_-BFLD2_^1_%NUM_"0_-ABYTE_^1_%NUM_"0€€_-BBYTE_^1_%NUM_"0_-ASIZE -_^1_%NUM_"0_-BSIZE -_^1_%NUM_"0_-AFRAC -_^1_%NUM_"0_-BFRAC -_^1_%NUM_"0_.P2_^1_%NUM_"0_$P1 AND SEPSW._^1_%NUM_"0_.HOLD_^1_%NUM_"0_.HOLD2_^1_%NUM_"0_-AB_^1_%NUM_"0_.BB_^1_%NUM_"0_-ANO_^1_%NUM_"0_-BNO_^1_%NUM_"0_.CHAR_^1_%NUM_"0_.FLAG1_^1_%NUM_"0_.FLAG2_^1_%NUM_"0_/FLDSEP_^1_%NUM_"0_/FTABLE_^1*****************************************************************€€******_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_=*** MAINLINE ***_^1*_]_^1*_]_^1*_]_^1*_]_^1MOVSTR NOP_"0_-INITIALIZE FOR MOVE AND MOVOCR_^1_%LDA_"=XALCORE_%LOCAL STORAGE ADDRESS_^1_%STA-_!I_-STORAGE ADDRESS TO I REG._^1_%CLR_"A_,CLEAR SWITCHES._^1_%STA-_!HOLD,I_^1_%STA-_!HOLD2,I_^1_%LDA-_!C1,Q_(PARAMETER 2._^1_%STA-_!P€€2,I_^1_%LDQ*_!(ZRO),Q_$PARAMETER 1 TO Q-REG. - POINTER._^1_%STQ-_!P1,I_^1_%LDA*_!(ZRO),Q_^1_%STA-_!AFLD1,I_$WORD 1 OF DATA TABLE._^1_%AND*_!OOO8_^1_%SAZ_"1_,SKIP IF IST CHAR IN BITS 8-15._^1_%SET_"A_^1_%STA-_!ABYTE,I_$SET THE A-FLD BYTE SWITCH._^1*_]_^1_%LDA-_!C1,Q_^1_%STA-_!AFLD,I_%WORD 2 - DATA ADDRESS._^1_%LDA-_!C2,Q_^1_%STA-_!AFLD2,I_$WORD 3 - LENGTHS._^1_%AND*_!OFFF_^1_%TCA_"Q€€_,COMPLIMENT DATA LENGTH._^1_%INQ_"0_^1_%STQ-_!ASIZE,I_$A-FLD LENGTH (TOTAL)._^1_%LDQ-_!AFLD2,I_^1_%QRS_"12_^1_%LDA*_!OOO7_^1_%CAQ_"Q_,COMPLIMENT FRACTION LENGTH._^1_%INQ_"0_^1_%STQ-_!AFRAC,I_$A-FLD FRAC. LENGTH._^1_%LDQ-_!P2,I_(TABLE POINTER, B-FIELD._^1_%RTJ*_!LDBFLD_^1_%JMP*_!(MOVSTR)_%RETURN_^1*_]_^1LDBFLD NUM_"0_^1_%LDA*_!(ZRO),Q_^1_%STA-_!BFLD1,I_$WORD 1 DATA TABLE._^1_%AND*_€€!OOO8_^1_%SAZ_"1_,SKIP IF 1ST CHAR IN BITS 8-15_^1_%SET_"A_^1_%STA-_!BBYTE,I_$SET THE B-FLD BYTE SWITCH._^1*_]_^1_%LDA-_!C1,Q_^1_%STA-_!BFLD,I_%WORD 2 - DATA ADDRESS._^1_%LDA-_!C2,Q_^1_%STA-_!BFLD2,I_$WORD 3 - LENGTHS._^1_%AND*_!OFFF_^1_%TCA_"Q_,COMPLIMENT DATA LENGTH._^1_%INQ_"0_^1_%STQ-_!BSIZE,I_(B-FLD TOTAL LENGTH._^1_%LDQ-_!BFLD2,I_(B-FLD WORD 3 OF TABLE._^1_%QRS_"12_^1_%LDA*_!€€OOO7_^1_%CAQ_"Q_-COMPLIMENT FRACTION LENGTH._^1_%INQ_"0_^1_%STQ-_!BFRAC,I_$B-FLD FRAC LENGTH._^1_%JMP*_!(LDBFLD)_^1*_]_^1*** CHECKS IF GROUP OR ELEM. ITEM. Q - REG._^1*** CONTAINS ADDRESS OF PARAMETER 1 OR 2_^1GRPCHK ADC_"0_^1_%LDA-_!C3,Q_#GET WORD ONE OF NEXT_^1_%AND*_!OOFO_#DATA TABLE AND EXTRACT_^1_%STA-_!HOLD,I_#LEVEL NUM._^1_%LDA*_!(ZRO),Q_#GET LEVEL NUM FROM_^1_%AND*_!OOFO_#C€€URRENT DATA TABLE_^1_%SUB-_!HOLD,I_^1_%SAP_"1_^1_%JMP*_!JMPAN_^1_%JMP*_!(GRPCHK)_^1_%EJT_]_^1MOVEX NOP_"0_-ENTRY-MOVE_^1_%EQU_"MOVE(MOVEX)_^1_%LDQ*_!MOVE_*(Q) = PARAMETER LIST_^1_%RTJ*_!MOVSTR_(INITIALIZE MOVE_^1_%LDA-_!AFLD,I_#IS THIS A_^1_%SAP_"1_#NON-OCR INPUT MOVE_^1_%JMP*_!JMPAN_#YES_^1_%LDA-_!BFLD1,I_$WORD 1 OF B-FLD TABLE ENTRY._^1_%ALS_"13_^1_%SAM_"1_,SKIP IF NUMERIC B-FIE€€LD._^1_%JMP*_!JMPAN_'JUMP IF B-FIELD IS A/N._^1*_]_^1_%LDQ-_!P1,I_#PARAMETER ONE'S ADDRESS_^1_%RTJ*_!GRPCHK_#CHECK FOR GROUP ITEM_^1_%LDQ-_!P2,I_#PARAMETER TWO'S ADDRESS_^1_%RTJ*_!GRPCHK_#CHECK FOR GROUP ITEM_^1_%LDA-_!AFLD1,I_#DATA TABLE 1 OF PARAM. 1_^1_%ALS_"13_^1_%SAM_"NUMRIC_'SKIP IF B-FIELD IS NUMERIC._^1JMPAN JMP_"ALPHA_#TREAT AS ALPHANUMERIC_^1* COMPUTE A-FLD ADDR OF RIGHT€€-MOST WHOLE NUMBER CHARACTER._^1NUMRIC LDA-_!ASIZE,I_!FIELD LENGTH (COMPLIMENT)._^1_%LDQ-_!AFRAC,I_%FRACTION LENGTH (COMPLIMENT)._^1_%TCA_"A_-RE-COMPLIMENT FLD LENGTH._^1_%AAQ_"A_.SUBTRACT FRACTION FROM TOTAL LENGTH._^1_%TCA_"Q_-COMPLIMENT LENGTH OF WHOLE NOS._^1_%STQ-_!ANO,I_(SAVE IT._^1_%CLR_"Q_^1_%DVI*_!TWO_*TO GET NO. OF WORDS._^1_%ADD-_!AFLD,I_'A-FLD ADDR._^1_%SQZ_"2_.SKIP IF €€NO REMAINDER._^1_%LDQ-_!ABYTE,I_^1_%JMP*_!NABYTE_^1_%LDQ-_!ABYTE,I_^1_%TCQ_"Q_.RE-SET BYTE SWITCH_^1_%SQZ_"NABYTE_(SKIP IF CHAR IN 2ND BYTE._^1_%INA_"-1_,DECREMENT ADDR COUNTER._^1*_]_^1NABYTE STQ-_!AB,I_"STORE BYTE SWITCH._^1_%STA-_!HOLD,I_'STORE ADDR POINTER FOR A-FLD._^1* COMPUTE B-FLD ADDR OF RIGT-MOST WHOLE NUMBER CHARACTER._^1*_]_^1_%LDA-_!BSIZE,I_%B-FIELD LENGTH (COMPLIMENT)€€._^1_%LDQ-_!BFRAC,I_%B-FIELD FRAC LENGTH (COMPLIMENT)._^1_%RTJ*_!BCOMP_^1_%JMP*_!FLAGW_^1*_]_^1*_]_^1*_]_^1*_]_^1*********************************************************************_^1*_]_^1* THESE CONSTANTS ARE PLACED HERE FOR EASY ACCESS BY 1 WORD INSTRUCTION_^1*_]_^1OOO8_!NUM_"$0008_^1OFFF_!NUM_"$0FFF_^1OOO7_!NUM_"$0007_^1OOFO_!NUM_"$00F0_^1TWO_"NUM_"2_^1ZRO_"NUM_"0_^1*_]_^1***€€*******************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1BCOMP NUM_"0_^1_%TCA_"A_.RE-COMPLIMENT TOTAL FLD LENGTH._^1_%AAQ_"A_.SUBTRACT FRACTION FROM TOTAL LENGTH._^1_%TCA_"Q_-COMPLIMENT NO. OF WHOLE NOS._^1_%STQ-_!BNO,I_(SAVE IT._^1_%CLR_"Q_^1_%DVI*_!TWO_*TO GET NO. OF WORD._^1_%ADD-_!BFLD,I_'B-FLD ADDR POINTER._^1_%SQZ_"2_$SKIP IF NO REMAINDER€€._^1_%LDQ-_!BBYTE,I_^1_%JMP*_!NBBYTE_^1_%LDQ-_!BBYTE,I_^1_%TCQ_"Q_$RESET BYTE SWITCH._^1_%SQZ_"NBBYTE SKIP IF CHAR IN BYTE 2._^1_%INA_"-1_-DECREMENT ADDR COUNTER._^1*_]_^1NBBYTE STQ-_!BB,I_"STORE B-FLD BYTE SWITCH._^1_%STA-_!HOLD2,I_%STORE B-FLD ADDR POINTER._^1_%JMP*_!(BCOMP)_^1* SET-UP ADDRESS MANIPULATION FLAGS FOR WHOLE NUMBER MOVE._^1FLAGW CLR_"A_^1_%STA-_!FLAG1,I_^1_%ENA_"-1€€_^1_%STA-_!FLAG2,I_^1*_]_^1*_]_^1WHOLE LDA-_!ANO,I_"WHOLE NOS LEFT?_^1_%SAN_"AGO1_*SKIP IF ALL NOT YET MOVED._^1_%ENA_"$30_+ASCII ZERO._^1_%STA-_!CHAR,I_^1_%JMP*_!AGO2_^1*_]_^1AGO1_!RTJ*_!FETCH_+GO GET A CHARACTE/0000000000000000000000_^1*_]_^1AGO2_!LDQ-_!BNO,I_#NO. OF B-FLD CHARACTERS._^1_%SQZ_"FRACTN_(SKIP ALL WHOLE NOS HAVE BEEN MOVED._^1*_]_^1_%RTJ*_!STORE_.GO STORE THE CHARAC€€TER_^1*_]_^1_%JMP*_!WHOLE_(KEEP GOING._^1* SET UP ADDRESS MANIPULATION FLAGS FOR FRACTION NOS. MOVE._^1FRACTN CLR_"A_^1_%STA-_!FLAG2,I_^1_%ENA_"1_^1_%STA-_!FLAG1,I_^1*_]_^1*_]_^1* COMPUTE A-FLD ADDR OF LEFT-MOST FRACTIONAL NUMBER_^1*_]_^1_%LDA-_!ASIZE,I_%A-FLD TOTAL LENGTH (COMPLIMENT)._^1_%LDQ-_!AFRAC,I_%A-FLD FRACTIONAL LENGTH (COMPLIMENT)._^1_%STQ-_!ANO,I_(SAVE FRACTION._^1_%TCA€€_"A_.RE-COMPLIMENT TOTAL LENGTH._^1_%AAQ_"A_.SUBTRACT._^1_%CLR_"Q_^1_%DVI*_!TWO_*TO GET NO. OF WORDS._^1_%ADD-_!AFLD,I_'A-FLD ADDR._^1_%SQZ_"NFA_+SKIP IF NO REMAINDER._^1_%LDQ-_!ABYTE,I_^1_%TCQ_"Q_-RE-SET BYTE BIT._^1_%SQN_"NFA+1_)SKIP IF CHAR WAS IN 1ST BYTE._^1_%INA_"1_-BUMP A-FLD ADDR COUNTER._^1_%JMP*_!*+2_^1*_]_^1NFA_"LDQ-_!ABYTE,I_^1_%STQ-_!AB,I_)SET BYTE SWITCH FOR A-FLD._^1€€_%STA-_!HOLD,I_'SET ADDR POINTER._^1*_]_^1* COMPUTE B-FLD ADDR OF LEFT-MOST FRACTIONAL NUMBER._^1*_]_^1_%LDA-_!BSIZE,I_%B-FLD TOTAL LENGTH (COMPLIMENT)._^1_%LDQ-_!BFRAC,I_%B-FLD FRACTION LENGTH (COMPLIMENT)._^1_%STQ-_!BNO,I_(SAVE FRACTION._^1_%TCA_"A_.RE-COMPLIMENT TOTAL LENGTH._^1_%AAQ_"A_.SUBTRACT._^1_%CLR_"Q_^1_%DVI*_!TWO_*GET NO. OF WORDS._^1_%ADD-_!BFLD,I_'ADDR._^1_%SQZ_"NFB_+€€SKIP IF NO REMAINDER._^1_%LDQ-_!BBYTE,I_^1_%TCQ_"Q_.RE-SET BYTE SWITCH._^1_%SQN_"NFB+1_)SKIP IF CHAR WAS IN 1ST BYTE._^1_%INA_"1_.BUMP A-FLD ADDR COUNTER._^1_%JMP*_!*+2_^1*_]_^1NFB_"LDQ-_!BBYTE,I_^1_%STQ-_!BB,I_)SET B-FLD BYTE SWITCH._^1_%STA-_!HOLD2,I_%SET ADDR COUNTER._^1*_]_^1FRAC_!LDA-_!ANO,I_#NUMBER OF A-FLD CHARS._^1_%SAN_"BGO1_*SKIP IF NOT ZERO._^1_%ENA_"$30_+ADCII ZERO._^1_€€%STA-_!CHAR,I_^1_%JMP*_!BGO2_)GO STORE IT._^1*_]_^1BGO1_!RTJ*_!FETCH_)GO GET CHAR._^1*_]_^1BGO2_!LDQ-_!BNO,I_#NUMBER OF B-FLD CHARS._^1_%SQZ_"ADJUST_(SKIP IF ZERO -END OF MOVE._^1_%RTJ*_!STORE_-STORE NEXT CHAR._^1*_]_^1_%JMP*_!FRAC_)GO AROUND AGAIN._^1*_]_^1*_]_^1*_]_^1ADJUST LDA-_!AFLD2,I WORD 3 OF A-FLD TABLE ENTRY._^1_%CLR_"Q_^1_%SAP_"1_-SKIP IF POSITIVE SIGN BIT._^1_%ENQ_"1_-1€€ INTO Q IF NEG. SIGN BIT._^1_%LDA-_!BFLD2,I_%WORD 3 OF B-FLD TABLE ENTRY._^1_%ALS_"1_^1_%LRS_"1_-PICK UP NEW SIGN BIT._^1_%LDQ-_!P2,I_)ADDR OF B-FLD TABLE ENTRY._^1_%STA-_!C2,Q_-STORE ADJUSTED WORD 3 OF B-FLD._^1*_]_^1*_]_^1_%LDQ-_!C3,I_)EXIT ADDRESS._^1_%LDQ_"MOVE_*COMPUTE MOVE ADDRESS RETURN_^1_%JMP-_!2,Q_+RETURN P+2_^1*_]_^1*******************************************************€€****************_^1*_]_^1*_]_^1*_]_^1*_]_^1* LOAD A CHARACTER , ADJUST THE ADDRESS COUNTER, RESET BYTE SWITCH,_^1* AND DECREMENT CHARACTER COUNTER (A-FIELD)._^1FETCH NUM_"0_^1_%LDQ-_!HOLD,I_'DATA ADDR._^1_%LDA-_!AB,I_*BYTE SWITCH._^1_%TCA_"A_.RE-SET FOR NEXT PASS._^1_%STA-_!AB,I_^1_%SAN_"FBYTE1_(SKIP IF CHAR IN 1ST BYTE (8-15)._^1_%TRQ_"A_^1_%ADD-_!FLAG1,I_%ADJUST ADDR COUNTER FOR€€ NEXT PASS._^1_%STA-_!HOLD,I_^1_%LDA*_!(ZRO),Q_(DATA WORD._^1FMASK EQU_"FMASK(*)_^1_%AND_"=N$00FF_^1_%STA-_!CHAR,I_'SAVE IT._^1_%RAO-_!ANO,I BUMP CHAR COUNTER._^1_%JMP*_!(FETCH)_%RETURN._^1*_]_^1FBYTE1 TRQ_"A_^1_%ADD-_!FLAG2,I_%ADJUST ADDR COUNTER FOR NEXT PASS._^1_%STA-_!HOLD,I_^1_%LDA*_!(ZRO),Q_#DATA WORD._^1_%ARS_"8_-SHIFT TO 0-7._^1_%JMP*_!FMASK_^1TSCOPE NUM_"0_^1ZERO_!NUM_"0€€_^1*_]_^1* STORE A CHARACTER, ADJUST THE ADDRESS COUNTER, RE-SET BYTE SWITCH,_^1* AND DECREMENT CHARACTER COUNTER(B-FIELD)._^1*_]_^1STORE NUM_"0_^1_%LDQ-_!HOLD2,I_(B-FLD ADDR._^1_%LDA-_!BB,I_)BYTE SWITCH._^1_%TCA_"A_.RE-SET FOR NEXT PASS._^1_%STA-_!BB,I_^1_%SAN_"SBYTE1_)SKIP IF CHAR IS TO BE STORED IN 8-15._^1_%TRQ_"A_^1_%ADD-_!FLAG1,I_%ADJUST ADDR COUNTER FOR NEXT PASS._^1_%STA-_€€!HOLD2,I_^1_%LDA-_!CHAR,I_^1_%STA-_!CHAR1,I_^1_%LDA*_!(ZERO),Q_^1XFF00 AND_"=N$FF00_^1_%JMP*_!STORE1_^1*_]_^1SBYTE1 TRQ_"A_^1_%ADD-_!FLAG2,I_%ADJUST ADDR COUNTER._^1_%STA-_!HOLD2,I_^1_%LDA-_!CHAR,I_^1_%ALS_"8_-SHIFT NEW CHAR TO BYTE 1_^1_%STA-_!CHAR1,I_^1_%LDA*_!(ZERO),Q_^1_%AND*_!FMASK+1_^1*_]_^1STORE1 EOR-_!CHAR1,I_)PICK UP NEW CHARACTER._^1_%STA*_!(ZERO),Q_^1_%RAO-_!BNO,I BUMP€€ B-FLD CHAR COUNTER._^1_%JMP*_!(STORE)_%RETURN._^1*_]_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1* MOVE INPUT DATA TO B-FLD IN ALPHA-NUMERIC MODE._^1ALPHA RTJ*_!ALPHAX_^1*_]_^1AATEST LDA-_!ANO,I_#END OF A-FLD CHARS_^1_%SAN_"AA1_-NO, SKIP._^1_%ENA_"$20_-LOAD ASCII BLANK._^1_%STA-_!CHAR,I_^1_%JMP*_!AA2_^1*_]_^1AA1_"RTJ*_!FETCH€€_'GO GET A CHAR._^1*_]_^1AA2_"LDA-_!BNO,I_'END OF B-FLD?_^1_%SAN_"AA3_.NO, SKIP._^1_%JMP*_!ADJUST_)EXIT._^1*_]_^1AA3_"RTJ*_!STORE_'GO STORE CHAR._^1_%JMP*_!AATEST_)LOOP THRU AGAIN._^1* SET-UP WORKING FIELDS._^1ALPHAX NUM_"0_^1_%LDA-_!AFLD,I_+A-FLD ADDR_^1_%STA-_!HOLD,I_^1_%LDA-_!BFLD,I_)B-FLD ADDR._^1_%STA-_!HOLD2,I_^1_%LDA-_!ABYTE,I_(A-FLD BYTE._^1_%STA-_!AB,I_^1_%LDA-_!BBYTE,I_(B€-FLD BYTE._^1_%STA-_!BB,I_^1*_]_^1_%CLR_"A_/SET FLAGS FOR LEFT JUSTIFIED FIELD._^1_%STA-_!FLAG2,I_^1_%ENA_"1_^1_%STA-_!FLAG1,I_^1*_]_^1_%LDA-_!ASIZE,I_(A-FLD LENGTH._^1_%STA-_!ANO,I_^1_%LDA-_!BSIZE,I_(B-FLD LENGTH._^1_%STA-_!BNO,I_^1*_]_^1_%JMP*_!(ALPHAX)_^1_%END_"DZ_^__PSKIP CSY/ P€1_%NAM SKIP_)SKIP DRAFT 5.1 12/02/74_^1_%ENT_"SKIPX,EOTFLG,EOFUSR,BUFUSR,BLNUSR,RJRUSR_^1_%ENT_"JAMUSR,SRTUSR_^1_%ENT_"FLDMK1,INCUSR,DELUSR_^1_%ENT_"EJTUSR,OMRUSR,LOSUSR,LOCUSR_^1SKIPX ADC_"0_^1_%EQU_"SKIP(SKIPX)_^1_%LDQ*_!(SKIP)_^1_%RAO*_!SKIP_^1_%LDA*_!(SKIP)_^1_%STA*_!FLAGON_^1_%RAO*_!SKIP_^1_%LDA*_!INDTBL,Q_#CHECK FOR PROPER FLAG_^1_%SAZ_"NOTSET_#FLAG NOT SET_^1SKIPON JMP*_!(€€FLAGON)_#NORMAL EXIT_^1NOTSET JMP*_!(SKIP)_^1FLAGON ADC_"0_^1INDTBL ADC_"0_^1BUFUSR ADC_"0_#INPUT BUFFER OVERFLOW_^1BLNUSR ADC_"0_#BLANK LINE_^1EJTUSR ADC_"0 EJECT PAGE_^1FLDMK1 ADC_"0_#ONLY FIELD MARKS_^1EOFUSR ADC_"0_#END OF FILE_^1RJRUSR ADC_"0_#REJECT IN RECORD_^1EOTFLG ADC_"0_#END OF TAPE_^1JAMUSR ADC_"0_#TRANSPORT CHECK_^1SRTUSR ADC_"0_#SORT CHECK_^1INCUSR ADC_"0_^1DELUSR AD€˜C_"0_^1OMRUSR ADC_"0_#929 MARK READ REJECT INDICATOR_^1LOSUSR ADC_"0_#929 LOST DATA INDICATOR_^1LOCUSR ADC_"0_#915 REC OR FIELD LL ERROR_^1_%END_"DZ_^__˜PCHRWRD CSY/ P€1_%NAM CHRWRD_'OCR/OMR WRD CNT 929 DRAFT 5.1 12/02/74_^1_%ENT_"CHROCX,CHRMRX_^1_%EXT_"MRKCNT,OCRCNT_^1_%SPC_"2_^1*********************************************************************_^1* CHROCR - COUNT OF R-LVL INPUT OCR CHARACTERS_^1* CHRMRK - COUNT OF R-LVL INPUT OMR WORDS_^1*********************************************************************_^1_%SPC_"2_^1CHROCX NOP_"0_-OCR/O€€MR RETURN ADDRESS_^1_%EQU_"CHROCR(CHROCX)_^1_%SET_"A_-SET OCR IND = -_^1_%STA*_!TYPIND+1_^1_%JMP*_!GTDATA_^1CHRMRX NOP_"0_^1_%EQU_"CHRMRK(CHRMRX)_^1_%CLR_"A_-SET OMR IND = +_^1_%STA*_!TYPIND+1_^1_%LDA*_!CHRMRK_^1_%STA*_!CHROCR_(SET UP ONE COMMON RETURN ADDR_^1GTDATA LDQ*_!(CHROCR)_%GET ADDR. OF DATA TABLE_^1_%RAO*_!CHROCR_(INC RETURN ADDR TO USER BY 1_^1_%LDA-_!2,Q_+GET SIGN WORD_^€€1_%AND_"=N$7FFF_^1_%STA-_!2,Q_+RE-SET WORD_^1_%LDA-_!1,Q_+PICK UP ADDR FOR RESULTING NUMBER_^1_%STA*_!CNTSAV_(SAVE IT_^1TYPIND LDA_"=N$0_*PICK UP TYPE INDICATOR_^1_%SAP_"CNVMRK_(OMR = +, OCR = -_^1_%LDA_"OCRCNT_(PICK UP OCR CNT FROM READ29_^1_%JMP*_!HXTASC_(GO CONVERT TO ASCII DEC._^1CNVMRK LDA_"MRKCNT_(PICK UP OMR CNT FROM READ29_^1HXTASC RTJ*_!HEXASC_(GO CONVERT_^1_%STA*_!(CNTSAV€€)_%SAVE CONVERTED NUMBER_^1_%JMP*_!(CHROCR)_%EXIT TO CALLER_^1CNTSAV NUM_"0_^1_%SPC_"2_^1**********************************************************************_^1** HEXASC - CONVERTS 2 HEX DIGITS TO THEIR DECIMAL ASCII EQUIV. ******_^1*_*THE MAX. HEX INPUT NO. IS $63 AND MAX. OUTPUT NO. IS 3939 *_^1*_*CALLED WITH A = 2-DIGIT HEX NO._9**_^1*_+EXITS WITH ASCII NO. IN A_>**_^1*******€ή****************************************************************_^1_%SPC_"2_^1HEXASC NOP_"0_-RETURN ADDRESS_^1_%CLR_"Q_^1_%DVI_"=N$A_^1_%ALS_"8_^1_%AAQ_"A_^1_%ADD_"=N$3030_^1_%JMP*_!(HEXASC)_%EXIT TO CALLER_^1_%END_"DZ_^__ήPOUTPUT CSY/ P€1_%NAM OUTPUT_'I/O WITH OVERLAP DRAFT 5.1 12/02/74_^1_%ENT_"WRITEX,WRTOVX,WAITIX_^1_%ENT_"DISPLX,SETREG_^1_%EXT_"EOTFLG_^1_%EQU_"SCHED($1200),MON($F4),EXIT($0A00)_^1_%EQU_"STATUS($600)_^1_%SPC_"2_^1**********************************************************************_^1** OUTPUT - HANDLES DRAFT PHYSICAL OUTPUT DEVICES,I.E.,MAG TAPE,_"**_^1**_)PRINTER,AND TELETYPE. IT ALLOWS THE S€€YSTEM TO PERFORM_!**_^1**_)CPU FUNCTIONS WHILE I/O OPERATIONS IN DRAFT ARE IN_$**_^1**_)PROGRESS. WRTOVR IS ALSO DESIGNED TO ALLOW THE DRAFT USER *_^1**_)TO CONTINUE MAINLINE OPERATIONS AFTER I/O IS INITIATED. **_^1**_)HOWEVER, USE OF WAITIO VERB IS REQUIRED WITH WRTOVR._!**_^1**_)WRITE DOES NOT ALLOW MAINLINE OPERATIONS TO CONTINUE ****_^1**_*AFTER I/O IS INITIATED,HOWEVER,IT WI€€LL ALLOW OPERATIONS **_^1**_)IN FOREGROUND OF T.S. 4.0 TO CONTINUE.WRITE DOES NOT_#**_^1**_*REQUIRE USAGE OF WAITIO BY USER BUT WAITIO IS CALLED_!***_^1**_)INTERNALLY.MAXIMUM OUTPUT OF THIS ROUTINE CAN BE GOTTEN **_^1**_)BY USING BUFFERED I/O DEVICES AND WRTOVR WITH WAITIO_!****_^1************************************************************************_^1_%SPC_"2_^1WRITEX NOP_"0_-€€COMMON EXIT FOR ALL CALLS_^1_%EQU_"WRITE(WRITEX)_^1_%CLR_"A_^1_%STA*_!DEVIND_(SET WRITE IND = +_^1_%JMP*_!CNTOUT_^1WRTOVX NOP_"0_-WRTOVR ENTRY POINT_^1_%EQU_"WRTOVR(WRTOVX)_^1_%SET_"A_^1_%STA*_!DEVIND_(SET WRTOVR IND = -_^1_%LDA*_!WRTOVR_^1_%STA*_!WRITE_)SET UP COMMON EXIT_^1CNTOUT LDQ*_!(WRITE)_'GET ADDR. OF DATA TABLE_^1_%LDA-_!1,Q_+GET BUFFER FWA_^1_%STA*_!REQFWA_(SAVE IN I/O RE€€QUEST_^1_%LDA-_!2,Q_+GET BUFFER LENGTH_^1X0FFF AND_"=N$0FFF_^1_%INA_"1_^1_%ARS_"1_-GET WORD COUNT_^1_%STA*_!REQNUM_(SAVE IN I/O REQUEST_^1_%RAO*_!WRITE_^1_%LDQ*_!(WRITE)_'GET ADDR. OF ASSIGN TABLE_^1_%STQ*_!ASGSAV_(SAVE IT_^1_%LDA-_!3,Q_+GET LU WORD_^1_%AND_"=N$FF00_^1_%SAP_"1_-ABSOLUTE UNIT_^1_%INA_"8_-STD OUTPUT UNIT_^1_%ALS_"8_^1_%STA*_!REQLU_)SAVE IN I/O REQUEST_^1_%LDA-_!4,Q_€€+PICK UP MODE BIT_^1_%AND_"=N$4000_^1_%ARS_"2_^1_%EOR*_!REQLU_^1_%STA*_!REQLU_)RE-SET WORD_^1_%RAO*_!WRITE_)SET USERS RETURN_^1_%CLR_"A_^1_%STA_"EOTFLG_(CLEAR END OF TAPE FLAG_^1_%RTJ-_!(MON)_)SET RUN PRIORITY = 1_^1_%ADC_"SCHED+1,REQBLK_^1_%RTJ-_!(MON)_)EXIT TO DISPATCHER_^1_%ADC_"EXIT_^1REQBLK RTJ-_!(MON)_)FORMATTED WRITE_^1_%ADC_"$0C00_^1_%ADC_"WRCOMP_^1_%NUM_"0_^1REQLU NUM_"0_€€-LU NUMBER_^1REQNUM NUM_"0_-LENGTH_^1REQFWA NUM_"0_-FWA_^1_%LDQ*_!ASGSAV_(GET ADDR. OF ASSIGN_^1_%LDA-_!4,Q_+GET WORD 5_^1_%AND_"=N$7FFC_^1_%INA_"2_-SET I/O BUSY, CLEAR WAIT_^1_%STA-_!4,Q_+RE-SET WORD_^1_%LDA*_!DEVIND_(DID WRTOVR CALL ?_^1_%SAP_"NOVRLP_(NO, CONTINUE_^1_%JMP*_!(WRITE)_'YES, PASS CONTROL TO USER_^1NOVRLP RTJ*_!WAITIO_(NO, KEEP CONTROL_^1ASGSAV NUM_"0_-ASSIGN TABLE AD€€DRESS_^1_%JMP*_!(WRITE)_'I/O COMPLETE , EXIT_^1WRCOMP LDA*_!REQLU_)PUT LU NO. IN STATUS REQUEST_^1_%AND_"=N$0FFF_^1_%STA*_!STATLU_^1_%RTJ-_!(MON)_)TAKE I/O STATUS_^1_%ADC_"STATUS_^1STATLU NUM_"0_-LU NUMBER_^1_%NUM_"0_^1_%STA*_!CKEOT+1_'SAVE STATUS_^1_%LLS_"5_^1_%AND_"=N$7_^1_%INA_"-1_,IS IT CLASS 1 (MAG TAPE) ?_^1_%SAN_"DTEXIT_(NO, PREPARE TO EXIT_^1CKEOT LDA_"=N$0_*GET I/O STATUS€€_^1_%ALS_"6_-END OF TAPE ?_^1_%SAP_"COUNT1_(NO, CONTINUE_^1_%RAO_"EOTFLG_(YES, SET USER INDICATOR_^1_%JMP*_!DTEXIT_^1COUNT1 LDQ*_!ASGSAV_^1_%LDA-_!5,Q_+GET WORD 6 OF ASSIGN_^1_%INA_"1_-ADD 1 TO RECORD COUNT_^1_%STA-_!5,Q_+RE-SET WORD_^1DTEXIT LDQ*_!ASGSAV_^1_%JMP*_!SETREG_(EXIT TO CLEAR BUSY_^1_%SPC_"2_^1************************************************************************_^1** €€DISPLA -HANDLES I/O TO STD OUTPUT COMMENT DEVICE_^1************************************************************************_^1_%SPC_"2_^1DISPLX NOP_"0_^1_%EQU_"DISPLA(DISPLX)_^1_%LDQ*_!(DISPLA)_%GET ADDR OF DATA TABLE_^1_%LDA-_!1,Q_+GET BUFFER FWA_^1_%STA*_!COMFWA_(SAVE IN I/O REQUEST_^1_%LDA-_!2,Q_+GET CHAR LNG._^1_%AND*_!X0FFF+1_^1_%INA_"1_^1_%ARS_"1_-COMPUTE WORD LENGTH_^1_%STA€€*_!COMLNG_(SAVE IN I/O REQUEST_^1_%RAO*_!DISPLA_(SET RETURN ADDRESS_^1_%LDA_"=N$18FC_'LU IS STD OUTPUT COMMENT DEV._^1_%STA*_!COMLUN_(SAVE IN I/O REQUEST_^1_%RTJ-_!(MON)_)FORMATTED WRITE_^1_%ADC_"$0C00_^1_%NUM_"0_^1COMTRD NUM_"0_^1COMLUN NUM_"0_-LU_^1COMLNG NUM_"0_-LENGTH_^1COMFWA NUM_"0_-FWA_^1CKTHRD LDA*_!COMTRD_(PICK UP THREAD_^1_%SAZ_"1_-I/O DONE_^1_%JMP*_!CKTHRD_(WAIT FOR I/O_€€^1_%JMP*_!(DISPLA)_%EXIT TO CALLER_^1DEVIND NUM_"0_^1************************************************************************_^1* WAITIO - SAVES CALLERS A,Q,AND I REGISTERS UPON ENTRY. SETS SYSTEM *_^1*_*RUN PRIORITY = 1,CHECKS I/O DEVICE BUSY BIT WHICH IS_$*_^1*_*LOCATED IN THAT DEVICES ASSIGN TABLE. IF BUSY IS SET,_$*_^1*_*CONTROL IS PASSED TO THE SYSTEM DISP TO ALLOW FOREGROU€€ND *_^1*_*OPERATIONS TO CONTINUE UNINTERRUPTED. AT THE SAME TIME *_^1*_*IT SETS THE WAIT FLAG ON SO THAT IF AN I/O OPERATION_%*_^1*_*COMPLETES, THE COMPLETION ROUTINE FOR THAT I/O WILL KNOW_!*_^1*_*THAT WAITIO HAS BEEN EXECUTED AND THEREFORE , CONTROL_$*_^1*_*MUST BE RETURNED TO THE CALLER OF WAITIO. IF WAITIO HAS_"*_^1*_*NOT BEEN EXECUTED BY THE TIME AN I/O OPERATION IS COMPLETE€€ *_^1*_*CONTROL GOES TO THE SYSTEM DISPATCHER. IF ON ENTRY TO_$*_^1*_*WAITIO, THE I/O BUSY BIT IN THE CALLERS ASSIGN TABLE IS_"*_^1*_*NOT SET, CONTROL RETURNS IMMEDIATELY TO CALLER AFTER_"*_^1*_+A,Q, AND I ARE RESTORED._^1************************************************************************_^1_%SPC_"2_^1WAITIX NOP_"0_^1_%EQU_"WAITIO(WAITIX)_^1_%STA*_!SAVA_*SAVE CALLERS A REGISTE€€R_^1_%STQ*_!SAVQ_*SAVE CALLERS Q REGISTER_^1_%LDA-_!I_^1_%STA*_!SAVI_*SAVE CALLERS I REGISTER_^1_%RTJ-_!(MON)_)SET RUN PRIORITY = 1_^1_%ADC_"SCHED+1,WAITNX_^1EXIT1 RTJ-_!(MON)_)EXIT TO DISPATCHER_^1_%ADC_"EXIT_^1WAITNX LDQ*_!(WAITIO)_%Q=ADDR OF CALLERS ASSIGN TBL_^1_%LDA-_!4,Q_+PICK UP WORD 5_^1_%ALS_"14_,IS THIS UNIT BUSY ?_^1_%SAP_"PUTBAK_(NO, EXIT TO CALLER_^1_%RAO-_!4,Q_+YES,S€€ET WAIT FLAG ON_^1_%JMP*_!EXIT1_)EXIT TO DISP TO ALLOW FOREGND OPERATIONS_^1***********************************************************************_^1*_!SETREG - MAY BE CALLED BY VARIOUS DRAFT I/O ROUTINES TO CLEAR_!***_^1*_+THAT ROUTINES DEVICE BUSY BIT AND RETURN CONTROL TO_#**_^1*_+THE CORRECT PLACE._F*_^1*_-THE CALLER MUST PASS THE ADDRESS OF HIS ASSIGN TABLE *_^1*_-THRU THE Q€€-REGISTER._A*_^1************************************************************************_^1_%SPC_"2_^1SETREG LDA-_!4,Q_+PICK UP WORD 5 OF ASSIGN TABLE_^1_%AND_"=N$FFFD_^1_%STA-_!4,Q_+RE-SET WORD 5_^1_%ALS_"15_,HAS WAITIO BEEN EXECUTED?_^1_%SAM_"PUTBAK_(YES RESTORE CALLERS REGISTERS_^1_%JMP*_!EXIT1_)NO, EXIT TO DISP_^1PUTBAK LDA*_!SAVI_^1_%STA-_!I_-RESTORE CALLERS I REGISTER_^1_%LD€κA*_!SAVA_*RESTORE CALLERS A REGISTER_^1_%LDQ*_!SAVQ_*RESTORE CALLERS Q-REGISTER_^1_%RAO*_!WAITIO_(INCREMENT RETURN ADDRESS BY 1_^1_%JMP*_!(WAITIO)_%EXIT TO CALLER OF WAITIO_^1SAVA_!NUM_"0_^1SAVQ_!NUM_"0_^1SAVI_!NUM_"0_^1_%END_"DZ_^__κPTAPMOV CSY/ P€1_%NAM TAPMOV_'MAG TAP MOVE DRAFT 5.1 12/02/74_^1_%ENT_"SKFFX_^1_%ENT_"SKFBX_^1_%ENT_"BKSPX_^1TAG6_!NUM_"$6000_^1TAG1_!NUM_"$1000_^1TAG5_!NUM_"$5000_^1MSK1_!NUM_"$000F_^1RETADD ADC_"0_^1BKSPX ADC_"0_-BACKSPACE_^1_%EQU_"BKSP(BKSPX)_^1_%LDA*_!(BKSP)_^1_%INA_"3_^1_%STA*_!LUONE_^1_%LDA*_!TAG1_^1_%STA*_!TPFUNC_^1_%RAO*_!BKSP_^1_%LDA*_!(BKSP)_^1_%INA_"1_^1_%STA*_!REPT_^1_%LDA*_!(REPT)_€€^1_%RTJ*_!DECHEX_^1_%LDA*_!BKSP_^1_%STA*_!RETADD_^1_%JMP*_!GO_^1SKFFX ADC_"0_-SKIP FILE FORWARD_^1_%EQU_"SKFF(SKFFX)_^1_%LDA*_!(SKFF)_#FILE NAME_^1_%INA_"3_^1_%STA*_!LUONE_#L.U._^1_%LDA*_!TAG5_#FUNCTION CODE_^1_%STA*_!TPFUNC_^1_%RAO*_!SKFF_^1_%LDA*_!(SKFF)_^1_%INA_"1_^1_%STA*_!REPT_^1_%LDA*_!(REPT)_^1_%RTJ*_!DECHEX_^1_%LDA*_!SKFF_^1_%STA*_!RETADD_^1_%JMP*_!GO_^1DECHEX ADC_"0_^1** €€THIS ROUTINE CONVERTS DECIMAL ASCII CHARACTERS TO_^1** HEXADECIMAL NUMBERS. THE CALLING SEQUENCE IS RTJ DECHEX._^1_%STA*_!TEMP1_#ADR. OF CHARACTERS_^1_%LDA*_!(TEMP1)_#GET NR. OF FILES_^1_%STA*_!TEMP1_"SAVE DECIMAL_^1_%ARS_"8_#POSITION UPPER DIGIT_^1_%AND*_!MSK1_#MASK OUT ASCII_^1_%STA*_!TEMP2_^1_%LDA*_!TEMP1_#DEC. AGAIN_^1_%AND*_!MSK1_#LOWER DIGIT_^1_%STA*_!TEMP3_^1_%LDA*_!TEMP2_^1€€_%ALS_"3_#CONVERT_^1_%ADD*_!TEMP2_#DEC._^1_%ADD*_!TEMP2_"TO_^1_%ADD*_!TEMP3_#HEXADECIMAL_^1_%STA*_!REPT_^1_%JMP*_!(DECHEX)_^1TEMP3 ADC_"0_^1TEMP1 ADC_"0_^1TEMP2 ADC_"0_^1SKFBX ADC_"0_^1_%EQU_"SKFB(SKFBX)_^1_%LDA*_!(SKFB)_^1_%INA_"3_^1_%STA*_!LUONE_^1_%LDA*_!TAG6_^1_%STA*_!TPFUNC_^1_%RAO*_!SKFB_^1_%LDA*_!(SKFB)_^1_%INA_"1_^1_%STA*_!REPT_^1_%LDA*_!(REPT)_^1_%RTJ*_!DECHEX_^1_%LDA*€€_!SKFB_^1_%STA*_!RETADD_^1_%JMP*_!GO_^1REPT_!ADC_"0_^1GO_#LDA*_!(LUONE)_^1_%AND_"=N$FF00_^1_%SAP_"1_-ABSOLUTE UNIT_^1_%INA_"8_-STD UNIT_^1_%ALS_"8_^1_%STA*_!LUONE_^1REPEAT RTJ-_!($F4)_#TAPE MOTION CONTROL REQ. BLK_^1_%NUM_"$1C00_^1_%NUM_"0_^1THRED NUM_"0_^1LUONE ADC_"0_#LOGICAL UNIT_^1TPFUNC ADC_"0_^1CKTHRD LDA*_!THRED_^1_%SAZ_"1_^1_%JMP*_!CKTHRD_(WAIT FOR I/O_^1_%LDA*_!REPT_^1_%€nINA_"-1_^1_%STA*_!REPT_^1_%SAZ_"TG76_^1_%JMP*_!REPEAT_^1TG76_!RAO*_!RETADD_^1_%JMP*_!(RETADD)_^1_%END_"DZ_^__nPACCEPT CSY/ P€1_%NAM ACCEPT_'ACCEPT DRAFT 5.1 12/02/74_^1_%ENT_"ACCEPX_^1ACCEPX NOP_"0_^1_%EQU_"ACCEPT(ACCEPX)_^1_%LDA*_!(ACCEPT)_*GO TO THE HOLDING ADDRESS_^1_%INA_"1_1GET THE ADDRESS_^1_%STA*_!PLACE_-SAVE THE ADDRESS_^1_%LDA*_!(PLACE)_+PLACE CONTENTS IN A REG_^1_%STA*_!POINT+6_+PASS PARAM_^1_%RAO*_!PLACE_-MOVE TO NEXT ADDRESS_^1_%LDA*_!(PLACE)_*GET THE LENGTH_^1_%AND_"=N$0FFF_^1_%INA_"1_1ADD €€SAFETY FACTOR_^1_%ARS_"1_2GET HALF OF WORD_^1_%STA*_!POINT+5_*PASS PARAMETER_^1MESS_!RTJ-_!($F4)_^1_%NUM_"$0C00_-WRITE REQUEST_^1_%NUM_"0_^1THRD1 NUM_"0_^1_%NUM_"$18FC_-LOGICAL UNIT_^1_%NUM_"$7_#LENGTH OF MESSAGE_^1_%ADC_"GOTOIT_-ADDRESS_^1CKTRD1 LDA*_!THRD1_^1_%SAZ_"1_^1_%JMP*_!CKTRD1_^1POINT RTJ-_!($F4)_^1_%NUM_"$0800_-READ REQUEST_^1_%NUM_"0_^1THRED NUM_"0_^1_%NUM_"$18FD_.L.U€(._^1_%ADC_"0_1LENGTH_^1_%ADC_"0_1ADDRESS_^1CKTHRD LDA*_!THRED_^1_%SAZ_"1_^1_%JMP*_!CKTHRD_(WAIT FOR I/O_^1_%RAO*_!ACCEPT_+PREPARE FOR RTJ TO CALLR_^1_%JMP*_!(ACCEPT)_*RETURN TO CALLER_^1_%BZS_"PLACE(1)_%RESERVE LOCATION_^1GOTOIT ALF_"6,ACCEPT DATA_^1_%NUM_"$0A0D_-CARRIAGE RETURN_^1_%END_"DZ_^__(PTPCLO CSY/ P€1_%NAM TPCLO_(TAPE CLOSE DRAFT 5.1 12/02/74_^1_%ENT_"RWNDX_^1_%ENT_"TMARKX_^1_%ENT_"UNLDX_^1TMARKX NOP_"0_^1_%EQU_"TMARK(TMARKX)_^1_%LDA*_!TMARK_^1_%STA*_!RWND_^1_%LDA_"=N$2000_^1_%JMP*_!COMBIN-1_^1UNLDX NOP_"0_^1_%EQU_"UNLD(UNLDX)_^1_%LDA*_!UNLD_^1_%STA*_!RWND_^1_%LDA_"=N$4000_^1_%JMP*_!COMBIN-1_^1RWNDX NOP_"0_^1_%EQU_"RWND(RWNDX)_^1_%LDA_"=N$3000_^1_%STA*_!TPFUNC_^1COMBIN LDA*€@_!(RWND)_^1_%INA_"3_^1_%STA*_!LUONE_^1_%LDA*_!(LUONE)_^1_%AND_"=N$FF00_^1_%SAP_"1_^1_%INA_"8_^1_%ALS_"8_^1_%STA*_!LUONE_^1_%RTJ-_!($F4)_^1_%NUM_"$1C00_^1_%NUM_"0_^1THRED NUM_"0_^1LUONE ADC_"0_^1TPFUNC ADC_"0_^1CKTHRD LDA*_!THRED_^1_%SAZ_"1_^1_%JMP*_!CKTHRD_(WAIT FOR I/O_^1_%RAO*_!RWND_^1_%JMP*_!(RWND)_^1_%END_"DZ_^__@POPEN CSY/ P€1_%NAM OPEN_)OPEN DRAFT 5.1 12/02/74_^1_%ENT_"OPENX_^1_%EXT_"CVASEB_^1OPENX ADC_"0_^1_%EQU_"OPEN(OPENX)_^1_%LDQ*_!OPEN_$****** CHECK FOR OPTIONAL PARAMETER *****_^1_%LDA-_!2,Q_^1_%STA_"SAVAE_^1_%LDA_"(SAVAE)_^1_%AND_"=N$FF00_^1_%SUB_"=N$2000_^1_%STA_"OPPARM_^1_%LDQ*_!(OPEN)_^1_%LDA-_!3,Q_#GET WORD (4) OF ASSIGN TABLE_^1_%AND_"=N$FF00_^1_%SAP_"1_-ABSOLUTE UNIT_^1_%INA_"8_-STD UNIT€€_^1_%ALS_"8_^1_%STA*_!STATLU_^1_%STA*_!LU1_^1_%STA_"LU2_^1_%EOR_"=N$1000_^1_%STA_"LU3_^1_%STQ*_!OK+1_*SAVE ADDR OF ASSIGN_^1_%RTJ-_!($F4)_)TAKE STATUS_^1_%NUM_"$600_^1STATLU NUM_"0_-LU NUMBER_^1_%NUM_"0_^1_%LLS_"5_^1_%AND_"=N$7_^1_%INA_"-1_,IF 1, MAG TAPE_^1_%SAZ_"OK_^1_%RAO*_!OPEN_^1EXIT_!LDA*_!OPPARM_!BUMP 1 MORE FOR OPTIONAL PARM._^1_%SAN_"1_^1_%RAO*_!OPEN_^1_%RAO*_!OPEN_^1_%JMP€€*_!(OPEN)_+RETURN_^1OK_#LDQ_"=N$0_*RESTORE Q_^1_%LDA-_!3,Q_#CHECK UPPER BIT OF WORD (4)_^1_%ALS_"8_^1_%SAP_"INPUT_#0=INPUT, 1=OUTPUT_^1_%JMP*_!OUTPUT_^1INPUT RTJ-_!($F4)_^1_%NUM_"$1C00_#FUNCTION TO SKIP TO FAR SIDE OF FILE MARK_^1_%NUM_"0_^1_%NUM_"0_^1LU1_"NUM_"0_^1_%NUM_"$5000_^1_%LDA*_!*-3_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!EXIT-1_"EXIT THIS ROUTINE..._^1OUTPUT ENA_"3_#GET ADDRE€€SS OF FILE NAME AND WORD COUNT_^1_%LDQ*_!(OPEN)_#OUTPUT THE FILE NAME ON TTY_^1_%RTJ_"TTYOUT_^1_%ENA_"3_^1_%LDQ_"=XVSN_^1_%RTJ_"TTYOUT_^1_%ENA_"3_^1_%LDQ_"=XSERNO_#READ SERIAL NO FROM TTY_^1_%RTJ_"TTYIN_^1_%LDA*_!OPPARM_^1_%SAZ_"SK4_^1_%JMP*_!SK0_!TREAT AS ASCII IF PARM. MISSING_^1SK4_"LDA*_!(SAVAE)_^1_%AND_"=N$8_^1_%RAO*_!SAVAE_^1_%LDQ*_!(SAVAE)_^1_%STQ*_!SAVAE_^1_%LDQ*_!(SAVAE)_^€€1_%SAN_"1_^1_%QRS_"8_^1_%TRQ_"A_^1_%AND_"=N$00FF_^1SK0_"INA_"-$45_^1_%STA*_!SAVAE_^1_%SAN_"SK1_/NOT EBCDIC,SKIP CONVERT_^1_%LDA*_!EBC+1_^1SUB7F SUB_"=N$7FFF_^1_%SAZ_"EBC2_^1EBC_"JMP_"CVASEB_^1EBCFWA ADC_"VOL1_^1_%ADC_"FORTY_^1_%JMP*_!SK1_^1EBC2_!RTJ-_!($F4)_^1_%NUM_"$1E00_-REQUEST CODE OF 15_^1FORTY NUM_"40_^1_%ADC_"VOL1_^1SK1_"ENA_"40_^1_%LDQ_"=XVOL1_^1_%RTJ_"TAPEOT_#WRITE VOL L€€ABEL ON TAPE_^1_%RAO*_!OPEN_#POINT TO DATA NAME_^1_%LDQ*_!(OPEN)_#BET DATA NAME ADDRESS_^1_%LDA-_!1,Q_^1_%STA*_!SAVE_^1_%LDA-_!2,Q_#GET DATA NAME LENGTH_^1_%STA*_!CHARS_^1_%INA_"-23_^1_%SAM_"LESS_#CHECK TO CURTAIL CHARACTERS IN EXCESS_^1_%ENA_"23_^1_%STA*_!CHARS_^1LESS_!ENQ_"0_^1_%STQ*_!TIMES_#**MOVE DATA NAME**_^1REPEAT LDA*_!(SAVE),Q_^1_%STA*_!(XFILID),Q_^1_%RAO*_!TIMES_^1_%RAO*_€€!TIMES_^1_%LDA*_!TIMES_^1_%SUB*_!CHARS_^1_%SAP_"2_^1_%INQ_"1_^1_%JMP*_!REPEAT_^1_%SAZ_"FILLER+2_^1_%LDA*_!(XFILID),Q_^1_%AND_"=N$FF00_^1_%INA_"$20_^1FILLER STA*_!(XFILID),Q_^1_%TRQ_"A_^1_%INA_"-11_^1_%SAZ_"GETVOL_^1_%INQ_"1_^1_%LDA_"=N$2020_^1_%JMP*_!FILLER_^1OPPARM NUM_"0_-OPTIONAL PARM._^1SAVE_!NUM_"0_^1XFILID ADC_"FILEID_^1SAVAE NUM_"0_^1TIMES NUM_"0_^1CHARS NUM_"0_^1GETVOL E€€NA_"3_^1_%LDQ_"=XVOL_^1_%RTJ*_!TTYOUT_^1_%ENA_"2_^1_%LDQ_"=XTEMP_#INTO A TEMPORARY AREA_^1_%RTJ*_!TTYIN_^1_%LDA*_!XFILID_+PUT ADDRESS OF FILEID IN I REGISTER_^1_%STA-_!I_^1_%LDQ-_!11,I_^1_%LDA_"TEMP_^1_%QRS_"8_^1_%LLS_"8_^1_%STQ-_!11,I_^1_%TRA_"Q_^1_%LDA_"TEMP+1_^1_%QRS_"8_^1_%LLS_"8_^1_%STQ-_!12,I_^1_%INA_"$30_^1_%STA-_!13,I_^1_%ENA_"3_^1_%LDQ_"=XCDT_^1_%RTJ*_!TTYOUT_^1_%LDQ-_!19,€€I_^1_%ENA_"3_^1_%RTJ*_!TTYIN_,INPUT CREATION DATE INTO OUTPUT RECORD_^1_%LDA-_!21,I_^1XFF00 AND_"=N$FF00_^1_%INA_"$20_^1_%STA-_!21,I_^1_%ENA_"3_^1_%LDQ_"=XEDT_^1_%RTJ*_!TTYOUT_^1_%LDQ-_!22,I_^1_%ENA_"3_^1_%RTJ*_!TTYIN_,INPUT EXPIRATION DATE INTO OUTPUT RECORD_^1_%LDA-_!24,I_^1_%AND*_!XFF00+1_^1_%INA_"$20_^1_%STA-_!24,I_^1_%LDA*_!SAVAE_^1_%SAN_"SK2_^1_%LDA*_!EBC+1_^1_%SUB*_!SUB7F+1€€_^1_%SAZ_"HDR1B_^1_%JMP_"CVASEB_^1HDR1A ADC_"HDR1_^1_%ADC_"FORTY_^1_%JMP*_!SK2_^1HDR1B RTJ-_!($F4)_^1_%NUM_"$1E00_^1_%NUM_"40_^1_%ADC_"HDR1_^1SK2_"LDQ_"=XHDR1_^1_%ENA_"40_^1_%RTJ*_!TAPEOT_+OUTPUT HEADER LABEL_^1_%RTJ-_!($F4) WRITE FILE MARK_^1_%NUM_"$1C00_^1_%NUM_"0_^1_%NUM_"0_^1LU2_"NUM_"0_^1_%NUM_"$2000_^1_%LDA*_!*-3_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%LDA*_!SAVAE_^1_%SAN_"SK3_^1_%LD€€A*_!SK3A-1_^1_%SUB_"=N$7FFF_^1_%SAZ_"SK3A+3_^1_%JMP_"CVASEB_^1SK3A_!ADC_"VOL1_^1_%ADC_"H8050_^1_%JMP*_!SK3_^1_%RTJ-_!($F4)_^1_%NUM_"$1E00_-CALL T15 MODULE_^1H8050 NUM_"$8050_)EBCDIC TO ASCII-80 WORDS_^1_%ADC_"VOL1_^1SK3_"JMP_"EXIT_#EXIT THIS ROUTINE..._^1TTYOUT ADC_"0_#TTY OUTPUT SUBROUTINE_^1_%STA*_!WDCNT_^1_%STQ*_!STADDR_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_#FORMATTED WRITE_^1_%NUM_"0_€€^1_%NUM_"0_^1_%NUM_"3_^1WDCNT NUM_"0_#WORD COUNT_^1STADDR NUM_"0_#STARTING ADDRESS_^1_%LDA*_!*-4_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(TTYOUT)_#EXIT_^1TTYIN ADC_"0_^1_%STA*_!ICNT_^1_%STQ*_!IADDR_^1_%RTJ-_!($F4)_#INPUT SUBROUTINE..._^1_%NUM_"$800_#FORMATTED READ_^1_%NUM_"0_^1_%NUM_"0_^1_%NUM_"3_^1ICNT_!NUM_"0_^1IADDR NUM_"0_^1_%LDA*_!*-4_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(TTYIN)_#€€EXIT_^1TAPEOT ADC_"0_#TAPE OUTPUT SUBROUTINE_^1_%STA*_!TCNT_^1_%STQ*_!TADDR_^1_%RTJ-_!($F4)_^1_%NUM_"$C00_^1_%NUM_"0_^1_%NUM_"0_^1LU3_"NUM_"0_^1TCNT_!NUM_"0_^1TADDR NUM_"0_^1_%LDA*_!*-4_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%JMP*_!(TAPEOT)_^1VOL1_!ALF_"2,VOL1_^1SERNO ALF_"3,_^1_%ALF_"20,_^1_%ALF_"14,_^1_%ALF_"1, 1_^1HDR1_!ALF_"2,HDR1_^1FILEID ALF_"13,_^1_%ALF_"3, 0001_^1_%ALF_"9,_^1_%ALF_"€‚3,000000_^1_%ALF_"10,_^1TEMP_!ALF_"10,_^1VSN_"ALF_"3,VSN#_^1VOL_"ALF_"3,VOL#_^1CDT_"ALF_"3,C/DT_^1EDT_"ALF_"3,E/DT_^1_%END_"DZ_^__‚PCLOSE CSY/ P€1_%NAM CLOSE_(CLOSE DRAFT 5.1 12/02/74_^1_%ENT_"CLOSEX,CLOSEV_^1_%EXT_"CVASEB_^1CLOSEX ADC_"0_^1_%EQU_"CLOSEF(CLOSEX)_^1_%LDQ*_!CLOSEF_^1_%RTJ*_!CKPARM_^1_%RTJ*_!COMMON_^1_%JMP*_!*+2_^1_%JMP*_!EXIT01_^1_%SAM_"OUTF-*-1_^1_%RTJ_"RWIND_^1EXIT01 RAO*_!CLOSEF_^1_%JMP*_!(CLOSEF)_"RETURN_^1OUTF_!LDA_"=N$4631_#F1_^1_%RTJ*_!CONVR_%CONVERT AND STORE PROPERLY THE NUMBER_^1_%JMP*_!EXIT01_$RET€€URN_^1CLOSEV ADC_"0_^1_%LDQ*_!CLOSEV_^1_%RTJ*_!CKPARM_^1_%RTJ*_!COMMON_^1_%JMP*_!*+2_^1_%JMP*_!EXIT02_^1_%SAM_"OUTV-*-1_^1_%RTJ_"RWIND_^1EXIT02 RAO*_!CLOSEV_^1_%JMP*_!(CLOSEV)_"RETURN_^1OUTV_!LDA_"=N$5631_#V1_^1_%RTJ*_!CONVR_%CONVERT AND STORE THE NUMBER PROPERLY_^1_%JMP*_!EXIT02_$RETURN_^1CKPARM ADC_"0_^1_%STQ_"HOLD_^1_%LDA-_!1,Q_.GET ADDRESS OF DATA-TABLE_^1_%STA_"SAVAE_^1_%LDA_"€€(SAVAE)_^1XFF00 AND_"=N$FF00_^1_%SUB_"=N$2000_^1_%SAZ_"1_1YES...SKIP_^1_%JMP*_!SK0_.NO,TREAT SAME AS ASCII..._^1_%RAO*_!CLOSEV_+BUMP PAST OPTIONAL PARAMETER_^1_%RAO*_!CLOSEF_+FOR RETURN_^1_%RAO_"SAVAE_^1_%AND_"=N$8_^1_%RAO_"SAVAE_^1_%LDQ_"(SAVAE)_^1_%STQ_"SAVAE_^1_%LDQ*_!(SAVAE)_*GET DATA WORD_^1_%SAN_"1_1SKIP IS LOWER_^1_%QRS_"8_1SHIFT TO LOWER_^1_%TRQ_"A_^1_%AND_"=N$00FF_^1_%INA€€_"-$45_^1SK0_"STA*_!SAVAE_)SAVE RESULTS_^1_%JMP*_!(CKPARM)_)RETURN_^1COMMON ADC_"0_^1_%LDQ*_!(HOLD)_+GET ADDRESS OF ASSIGN TABLE_^1_%LDA-_!3,Q_(GET THE EQUIPMENT NUMBER_^1_%AND*_!XFF00+1_^1_%SAP_"1_-ABSOLUTE UNIT_^1_%INA_"8_-STD UNIT_^1_%ALS_"8_^1_%STA*_!STATLU_^1_%STA*_!LU2_^1_%STA*_!LU3_^1_%EOR_"=N$1000_^1_%STA*_!LU1_^1_%STQ*_!OK+1_*SAVE ADDR OF ASSIGN_^1_%RTJ-_!($F4)_)TAKE STATU€€S_^1_%NUM_"$600_^1STATLU NUM_"0_-LU NUMBER_^1_%NUM_"0_^1_%LLS_"5_^1_%AND_"=N$7_^1_%INA_"-1_,IF 1, MAG TAPE_^1_%SAZ_"OK-*-1_$YES_^1_%RAO*_!COMMON_$THIS IS NOT A TAPE UNIT_^1_%JMP*_!(COMMON)_"RETURN_^1OK_#LDQ_"=N$0_*RESTORE Q_^1_%LDA-_!3,Q_(GO TO CHECK FOR INPUT OR OUTPUT_^1_%ALS_"8_^1_%JMP*_!(COMMON)_"RETURN_^1CONVR ADC_"0_*CONVERTION ROUTINE FROM BINARY TO ASCII_^1_%STA*_!TRALER+1€€_^1_%RTJ*_!CLFM_'WRITE A FILE MARK_^1_%LDQ*_!(HOLD)_+GET ADDRESS OF ASSIGN TABLE_^1_%LDA-_!5,Q_(GET THE 6TH WORD (RECORD COUNTER)_^1_%ENQ_"2_^1_%STQ-_!I_*INITIALIZE THE POINTER_^1CONVT CLR_"Q_^1DVIA_!DVI_"=N$A_^1_%INQ_"$30_(ADD THE ASCII BITS_^1_%STQ*_!TEMP_'SAVE THIS DIGIT_^1_%CLR_"Q_^1_%DVI*_!DVIA+1_^1_%INQ_"$30_^1_%QLS_"8_*POSITION IT_^1_%ADQ*_!TEMP_'COMBINE WITH THE PREVIOUS T€€O FORM THE WORD_^1_%STQ*_!CONVRT,I_"STORE IT AT ITS LOCATION_^1_%LDQ-_!I_^1_%INQ_"-1_)MOVE THE POINTER ONE LOCATION_^1_%STQ-_!I_^1_%SQM_"1_*CHECK FOR END_^1_%JMP*_!CONVT_%NOT YET END_^1_%CLR_"A_*INITIALIZE THE RECORD COUNTER_^1_%LDQ*_!(HOLD)_+ADDRESS OF ASSIGN TABLE_^1_%STA-_!5,Q_^1_%LDA*_!SAVAE_,IS IT EBCDIC_^1_%SAN_"SK1_0NOT EBCDIC,SKIP CONVERT_^1_%LDA*_!EBC+1_^1SUB7F SUB_"=N$7F€€FF_^1_%SAZ_"EBCFWA+3_^1EBC_"JMP_"CVASEB_^1EBCFWA ADC_"TRALER_^1_%ADC_"FORTY_^1_%JMP*_!SK1_^1_%RTJ-_!($F4)_^1_%NUM_"$1E00_-REQUEST CODE 15_^1FORTY NUM_"40_^1_%ADC_"TRALER_,STARTING ADDRESS_^1SK1_"RTJ-_!($F4)_*WRITE THE TRAILER..._^1_%NUM_"$0C00_^1_%NUM_"$0000_^1_%NUM_"$0000_^1LU1_"NUM_"0_^1_%NUM_"$0028_^1_%ADC_"TRALER_^1_%LDA*_!*-4_^1_%SAZ_"1_^1_%JMP*_!*-2_^1_%RTJ*_!CLFM_'WRITE 2 F€€ILE MARKS_^1_%RTJ*_!CLFM_^1_%RTJ*_!RWIND_%REWIND UNLOAD_^1_%LDA*_!SAVAE_^1_%SAN_"SK2_^1_%LDA*_!EBC+1_^1_%SUB*_!SUB7F+1_^1_%SAZ_"ASCFWA+3_^1_%JMP_"CVASEB_^1ASCFWA ADC_"TRALER_^1_%ADC_"H8028_^1_%JMP*_!SK2_^1_%RTJ-_!($F4)_^1_%NUM_"$1E00_-CONVERT FROM EBCDIC BACK_^1H8028 NUM_"$8028_)TO ASCII_^1_%ADC_"TRALER_^1SK2_"JMP*_!(CONVR)_(RETURN_^1RWIND ADC_"0_*REWIND UNLOAD ROUTINE_^1_%RTJ-_!€€($F4)_^1_%NUM_"$1C00_^1_%NUM_"$0000_^1_%NUM_"$0000_^1LU2_"NUM_"0_^1_%NUM_"$4000_^1_%JMP*_!(RWIND)_#RETURN_^1CLFM_!ADC_"0_*WRITE A FILE MARK ROUTINE_^1_%RTJ-_!($F4)_^1_%NUM_"$1C00_^1_%NUM_"$0000_^1_%NUM_"$0000_^1LU3_"NUM_"0_^1_%NUM_"$2000_^1_%LDA*_!*-3_^1_%SAZ_"1_^1_%JMP*_!*-2_+WAIT FOR COMPLETION_^1_%JMP*_!(CLFM)_$RETURN_^1SAVAE NUM_"0_,ASCII/EBCDIC FLAG_^1HOLD_!NUM_"0_^1TEMP_!NUM€F_"0_^1TRALER ALF_"1,EO_^1_%ALF_"26,_^1CONVRT ALF_"13,_^1_%END_"DZ_^__FPADDSUB CSY/ P€1_%NAM ADDSUB_'ADD/SUB DRAFT 5.1 12/02/74_^1***********************************************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1* C. B. EVANS_^1* CONTROL DATA CORPORATION_^1* RABINOW ENGINEERING DIVISION_^1* 21 NOVEMBER 1968_^1*_]_^1*_]_^1*_]_^1*_]_^1********************************************€€***************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_=* * * * * * * * * *_^1*_=*_0*_^1*_=* A D D S U B_"*_^1*_=*_0*_^1*_=* * * * * * * * * *_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1_%ENT_"ADDX,SUBX_^1*_]_^1*_]_^1***********************************************************************_^1************************************************************€€***********_^1***********************************************************************_^1*_]_^1*_]_^1*_6*** ROUTINE DESCRIPTION ***_^1*_]_^1*_]_^1*_]_^1*_]_^1* BOTH FIELDS MUST BE NUMERIC. RESULTS OF A/N FIELDS ARE UNDETERMINED._^1* NEITHER FIELD CAN BE AN "INPUT" ITEM._^1* ZERO IS ALWAYS THE FILL CHARACTER. BLANKS ARE CONVERTED TO ZEROS._^1* IF 2 FIELDS HAVE UNEQUAL FRACTIONAL €€LENGTHS OR ARE NOT OF THE SAME_^1*_!MODE, THE RESULT IS DETERMINED BY THE B-FIELD CHARACTERISTICS._^1* THE ASSUMED DECIMAL POINTS ARE ALIGNED RELATIVE TO THE B-FIELD._^1* ZERO FIELDS ARE PLUS UNLESS INPUT OTHERWISE._^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************_^1*_]_^1€€*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_8* DATA TABLE FORMAT *_^1*_]_^1* WORD 1 -_^1*_*BIT 0 - ADJUSTMENT_#0 = LEFT-JUSTIFIED_^1*_A1 = RIGHT-JUSTIFIED_^1*_*BIT 1 - FILL_*0 = BLANKS_^1*_A1 = ZEROS_^1*_*BIT 2 - MODE_*0 = ALPHA-NUMERIC_^1*_A1 = NUMERIC_^1*_*BIT 3 - BYTE_*0 = BITS 8-15_^1*_A1 = BITS 0-7_^1*_*BITS 4-7 - LEVEL_%1 TO 9 (HEX), WHERE 1 IS HIGHEST._^1*_*BITS 8-10 - UNUSED_^1*_*BITS€€ 11-15 - PHASE_#10000 = INPUT_^1*_A01000 = OUTPUT_^1*_A00100 = WORKING_^1*_A00010 = CONSTANT_^1*_A00001 = REPORT_^1*_]_^1*_]_^1* WORD 2 - CORE ADDRESS OF THE DATA (0 TO 7FFF)._^1*_]_^1*_]_^1* WORD 3 -_^1*_*BITS 0-11 - DATA LENGTH (BINARY NUMBER OF CHARACTERS)._^1*_+BITS 12-14 - FRACTION LENGTH (0-7)._^1*_*BIT 15 - SIGN_'0 = POSITIVE_^1*_A1 = NEGATIVE_^1*_]_^1*_]_^1* WORD 4 - E€€NVIRONMENT TABLE POINTER (ONLY PRESENT FOR INPUT ENTRY);_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_>*** CONSTANTS ***_^1*_]_^1*_]_^1_%EQU_"C1(1),C2(2),C3(3),C4(4)_^1_%EQU_"P1(5),P2(6),AFLD1(7),AFLD2(8),AFLD3(9),A€€FLD2W(10)_^1_%EQU_"BFLD1(11),BFLD2(12),BFLD3(13),BFLD2W(14)_^1_%EQU_"AFRAC(15),BFRAC(16),ASIZE(17),ASIZEW(18)_^1_%EQU_"BSIZE(19),BSIZEW(20),ABYTE(21),ABYTEW(22)_^1_%EQU_"BBYTE(23),BBYTEW(24),ZFFILL(25),SIGNSW(26)_^1_%EQU_"CARRY(27),BORROW(28),CHAR(29)_^1_%EQU_"HOLDA(30),HOLDB(31),FINALS(32)_^1_%EQU_"ZFFILA(33)_^1*_]_^1*_]_^1*_]_^1*_]_^1ALCORE NUM_"0_(SAVES Q REGISTER._^1_%NUM_"0_.S€€AVES A REGISTER._^1_%NUM_"0_.SAVES I REGISTER._^1_%NUM_"0_.EXIT ADDRESS._^1_%NUM_"0_.ENTRY CODE._^1_%NUM_"0_.P1_^1_%NUM_"0_.P2_^1_%NUM_"0_/AFLD1_^1_%NUM_"0_/AFLD2_^1_%NUM_"0_/AFLD3_^1_%NUM_"0_/AFLD2W_^1_%NUM_"0_/BFLD1_^1_%NUM_"0_.BFLD2_^1_%NUM_"0_.BFLD3_^1_%NUM_"0_.BFLD2W_^1_%NUM_"0_.AFRAC_^1_%NUM_"0_/BFRAC_^1_%NUM_"0_.ASIZE_^1_%NUM_"0_/ASIZEW_^1_%NUM_"0_/BSIZE_^1_%NUM_"0_.BSIZEW_^€€1_%NUM_"0_/ABYTE_^1_%NUM_"0_/ABYTEW_^1_%NUM_"0_/BBYTE_^1_%NUM_"0_/BBYTEW_^1_%NUM_"0_/ZFFILL_^1_%NUM_"0_.SIGNSW_^1_%NUM_"0_/CARRY_^1_%NUM_"0_/BORROW_^1_%NUM_"0_/CHAR_^1_%NUM_"0_.HOLDA_^1_%NUM_"0_.HOLDB_^1_%NUM_"0_/FINALS_^1_%NUM_"0_+ZFFILA_^1*_]_^1*_]_^1*_]_^1*_]_^1ASAVE NUM_"0_^1QSAVE NUM_"0_^1ENTRY NUM_"0_*ENTRY SWITCH - 0000=ADD , $FFFF=SUB._^1*_]_^1*_]_^1*_]_^1***************€€********************************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_:*** MAINLINE ***_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1ADDX_!NUM_"0_^1_%EQU_"ADD(ADDX)_^1*_]_^1_%STA*_!ASAVE_^1_%LDA*_!ADD_^1_%STQ*_!QSAVE_^1_%CLR_"Q_^1_%JMP*_!START_^1*_]_^1SUBX_!NUM_"0_^1_%EQU_"SUB(SUBX)_^1*_€€]_^1_%STA*_!ASAVE_^1_%LDA*_!SUB_^1_%STQ*_!QSAVE_^1_%SET_"Q_^1*_]_^1START STQ*_!ENTRY_!STORE ENTRY POINT SWITCH._^1*_]_^1LOCAL LDQ_"=XALCORE LOCAL STORAGE ADDR._^1_%STA-_!C3,Q_)1ST PARAMETER ADDRESS._^1_%LDA-_!I_^1_%STA-_!C2,Q_)SAVE I-REG._^1_%LDA*_!ASAVE_^1_%STA-_!C1,Q_*SAVE A-REG._^1_%LDA*_!QSAVE_^1_%STA*_!(ZRO),Q_%SAVE Q-REG._^1_%STQ-_!I_,STORAGE ADDR TO I-REG._^1_%LDA-_!C3,I_€€)ADDR OF PARAMETER 1._^1*_]_^1CONTIN TRA_"Q_^1_%INA_"2_^1_%STA-_!C3,I_(EXIT ADDRESS._^1_%LDA*_!ENTRY_^1_%STA-_!C4,I_(SAVE ENTRY CODE._^1*_]_^1_%CLR_"A_,CLEAR SWITCHES AND FLAGS._^1_%STA-_!ZFFILL,I_^1_%STA-_!ZFFILA,I_^1_%STA-_!SIGNSW,I_^1_%STA-_!CARRY,I_^1_%STA-_!BORROW,I_^1_%STA-_!FINALS,I_^1_%LDA-_!C1,Q_+PARAMETER 2._^1_%STA-_!P2,I_^1_%LDQ*_!(ZRO),Q_$PARAMETER 1._^1_%STQ-_!P1,I_^1€€_%LDA*_!(ZRO),Q_^1_%STA-_!AFLD1,I_#WORD 1 OF DATA TABLE._^1_%AND*_!OOO8_^1_%SAZ_"1_,SKIP IF 1ST CHAR IN BITS 8-15._^1_%SET_"A_^1_%STA-_!ABYTE,I_$SET THE A-FLD BYTE SWITCH._^1_%STA-_!ABYTEW,I_^1_%LDA-_!C1,Q_^1_%STA-_!AFLD2,I_$WORD 2 - DATA ADDRESS._^1_%LDA-_!C2,Q_^1_%STA-_!AFLD3,I_$WORD 3 - LENGTHS._^1_%AND*_!OFFF_^1_%STA-_!ASIZE,I_^1_%TCA_"Q_+COMPLIMENT DATA LENGTH._^1_%STQ-_!ASIZE€€W,I_^1_%LDA-_!AFLD3,I_^1_%ARS_"12_+FRACTION IS IN BITS 12-14_^1_%AND*_!OOO7_^1_%STA-_!AFRAC,I_$A-FLD FRACTION._^1*_]_^1_%LDQ-_!P2,I_(PARAMETER 2 - B-FLD TABLE POINTER._^1_%LDA*_!(ZRO),Q_^1_%STA-_!BFLD1,I_$WORD 1._^1_%AND*_!OOO8_^1_%SAZ_"1_-SKIP IF 1ST CHAR IN BITS 8-15._^1_%SET_"A_^1_%STA-_!BBYTE,I_$SET THE B-FLD BYTE SWITCH._^1_%STA-_!BBYTEW,I_^1_%LDA-_!C1,Q_^1_%STA-_!BFLD2,I_$WOR€€D 2-DATA ADDRESS._^1_%LDA-_!C2,Q_^1_%STA-_!BFLD3,I_$WORD 3 - LENGTHS._^1_%AND*_!OFFF_^1_%STA-_!BSIZE,I_^1_%TCA_"Q_^1_%STQ-_!BSIZEW,I_^1_%LDA-_!BFLD3,I_^1_%ARS_"12_,FRACTION IS IN BITS 12-14._^1_%AND*_!OOO7_^1_%STA-_!BFRAC,I_$B-FLD FRACTION._^1*_]_^1_%SUB-_!AFRAC,I_^1_%SAM_"AFRGRT_'SKIP IF A-FLD FRACTION GREATER._^1_%SAZ_"RIGHTA_'SKIP FRACTIONS EQUAL._^1_%TCA_"A_^1_%ADD-_!BSIZE,I_^1€€_%STA-_!BSIZE,I_^1_%TCA_"A_^1_%STA-_!BSIZEW,I_^1_%JMP*_!RIGHTA_^1AFRGRT ADD-_!ASIZE,I_$REDUCE A-FLD SIZE BY FRACTION DIFFERENCE._^1_%STA-_!ASIZE,I_^1_%TCA_"A_^1_%STA-_!ASIZEW,I_%DIFFERENCE IN GRACTIONAL LENGTHS._^1RIGHTA RTJ*_!RITADR_^1_%JMP*_!ABSB1_^1*_]_^1***********************************************************************_^1*_]_^1* THESE CONSTANTS ARE PLACED HERE TO PROVIDE F€€OR ACCESS BY ONE-_^1* WORD INSTRUCTIONS._^1*_]_^1ZRO_"NUM_"0_^1OOO7_!NUM_"$0007_^1OOO8_!NUM_"$0008_^1OFFF_!NUM_"$0FFF_^1TWO_"NUM_"2_^1ADRMSK NUM_"$7FFF_^1*_]_^1***********************************************************************_^1*_]_^1* COMPUTE ADDRESS OF RIGHTMOST CHAR IN A-FIELD._^1RITADR NUM_"0_^1_%LDA-_!ASIZE,I_'A-FLD LENGTH._^1_%CLR_"Q_^1_%DVI*_!TWO_^1_%ADD-_!AFLD2,I_$CUR€€RENT ADDR._^1_%SQN_"RA2+1_$SKIP IF REMAINDER_^1*_]_^1_%LDQ-_!ABYTE,I_^1_%TCQ_"Q_,RESET BYTE SWITCH._^1_%SQZ_"RA2_*SKIP IF BITS 0-7._^1_%INA_"-1_+DECREMENT ADDR._^1*_]_^1RA2_"STQ-_!ABYTEW,I_"BYTE SWITCH._^1_%STA-_!AFLD2W,I_%ADDR OF RIGHT-MOST CHAR._^1*_]_^1*_]_^1* COMPUTE B-FLD ADDR OF RIGHT-MOST CHARACTER._^1_%LDA-_!BSIZE,I_$B-FLD LENGTH._^1_%CLR_"Q_^1_%DVI*_!TWO_^1_%ADD-_!BFLD2,I_€€$CURRENT ADDR._^1_%SQN_"RA3+1_$SKIP IF REMAINDER_^1*_]_^1_%LDQ-_!BBYTE,I_^1_%TCQ_"Q_,RESET BYTE SWITCH._^1_%SQZ_"RA3_*SKIP IF 2ND BYTE._^1_%INA_"-1_+DECREMENT ADDR._^1*_]_^1RA3_"STQ-_!BBYTEW,I_"BYTE SWITCH._^1_%STA-_!BFLD2W,I_%B-FLD ADDR OF RIGHT-MOST._^1*_]_^1_%JMP*_!(RITADR)_^1*_]_^1*_]_^1*_]_^1*_]_^1* TEST FOR EQUAL SIGNS._^1ABSB1 LDA*_!ADRMSK_#$7FFF_^1_%TCA_"A_^1_%LDQ-_!AFLD3,€€I_'A-FLD WD 3 - SIGN BIT IS 15._^1_%LAQ_"Q_/MASK SIGN OF A-FLD._^1_%AND-_!BFLD3,I_'MASK SIGN OF B-FLD._^1_%EAQ_"A_.COMPARE._^1_%SAZ_"EQSIGN_)SKIP IF SIGNS EQUAL._^1_%SET_"A_^1_%STA-_!SIGNSW,I_%SET SWITCH._^1*_]_^1*_]_^1EQSIGN LDA-_!C4,I ENTRY SWITCH._^1_%SAZ_"ADDOP_*SKIP IF ADD OPERATION._^1_%JMP*_!SUBOP_)SUB OPERATION._^1ADDOP LDA-_!SIGNSW,I_^1_%SAZ_"1_/SKIP IF SIGNS EQUAL._^1_%€€JMP*_!SUBOP1_(THIS IS EQUIVALENT TO SUBTRACTION._^1ADDOP1 RTJ*_!ALOAD_"LOAD A-FLD DIGIT._^1*_]_^1_%RTJ*_!BLOAD_)LOAD B-FLD DIGIT._^1*_]_^1_%RTJ_"ADDRTN_"GO PERFORM ADDITION._^1*_]_^1_%RTJ*_!STORE_)STORE NEW DIGIT._^1_%LDA-_!BSIZEW,I_^1_%SAP_"1_+SKIP IF NO MORE B-FIELD._^1_%JMP*_!ADDOP1_(RETURN._^1*_]_^1_%SET_"A_^1_%STA-_!FINALS,I_%SIGN SWITCH - A-FLD SIGN IS FINAL._^1_%JMP*_!AEXIT_€€^1SUBOP LDA-_!SIGNSW,I_^1_%SAZ_"SUBOP1_)SKIP IF SIGNS EQUAL._^1_%SET_"A_^1_%STA-_!BORROW,I_^1_%JMP*_!ADDOP1_(0O ADD._^1SUBOP1 RTJ*_!ALOAD_"FETCH A-FLD DIGIT._^1*_]_^1_%RTJ*_!BLOAD_)FETCH B-FLD DIGIT._^1*_]_^1_%RTJ_"SUBRTN_"GO PERFORM SUBTRACTION_^1*_]_^1_%RTJ*_!STORE_)STORE NEW DIGIT._^1*_]_^1_%LDA-_!BSIZEW,I_^1_%SAP_"1_+SKIP IF NO MORE B-FIELD DIGITS._^1_%JMP*_!SUBOP1_(CONTINUE._€€^1*_]_^1_%LDA-_!BORROW,I_^1_%SAN_"SUBOP2_*SKIP IF BORROW FLAG ON, RESULT MUST_^1*_7BE COMPLIMENTED._^1_%CLR_"A_^1_%STA-_!FINALS,I_"FINAL SIGN = B-FIELD._^1_%JMP*_!AEXIT_#GO TO END._^1*_]_^1SUBOP2 RTJ_"ADRRIT_%GO ADJUST ADDRESS TO RIGHT-MOST DIGIT._^1_%LDA-_!BSIZE,I_'B-FLD DATA LENGTH._^1_%TCA_"A_^1_%STA-_!BSIZEW,I_^1*_]_^1_%RTJ*_!BLOAD_^1_%SAZ_"1_*SKIP IF DIGIT IS ZERO._^1_%JMP*_!S€€UBP22_#JUMP IF NOT # ZERO._^1_%RTJ_"ADJBFD_$GO ADJUST ADDR POINTER._^1_%JMP*_!*-5_'GO AGAIN._^1SUBP22 ENA_"$A_"DECIMAL 10._^1_%SUB-_!HOLDB,I_'COMPLIMENT PREVIOUS RESULT._^1_%STA-_!CHAR,I_^1_%RTJ*_!STORE_)GO STORE FINAL DIGIT._^1*_]_^1SUBOP3 LDA-_!BSIZEW,I_^1_%SAZ_"CEX_,SKIP IF END OF B-FLD._^1_%RTJ*_!BLOAD_^1SUBP33 ENA_"9_^1_%SUB-_!HOLDB,I_'COMPLIMENT PREVIOUS RESULT._^1_%STA-_!CHA€€R,I_^1_%RTJ*_!STORE_)STORE IT._^1_%JMP*_!SUBOP3_(CONTINUE._^1*_]_^1CEX_"SET_"A_^1_%STA-_!FINALS,I_($FFFF = A-FLD SIGN IS FINAL._^1*_]_^1AEXIT LDQ-_!FINALS,I_^1_%SQN_"1_0SKIP IF FINAL SIGN = A-FIELD._^1_%JMP*_!AEX1_+JUMP - B-FIELD SIGN REMAINS UNALTERED._^1_%LDA-_!AFLD3,I_)A-FLD WORD 3._^1_%LDQ-_!C4,I_,ENTRY SWITCH._^1_%SQZ_"AEX2_-SKIP IF THIS WAS AN ADD. SIGN OKAY._^1_%LDQ-_!BORRO€€W,I_^1_%SQZ_"AEX2_-SKIP IF NO COMPLEMENTATION TOOK PLACE._^1* ON SUB OPERATION, IF SIGNS ARE LIKE AND THE SUBTRAHEND IS GRTR THAN_^1* THE MINUEND, THE SIGN OF THE DIFFERENCE IS REVERSED._^1_%LLS_"1_0SHIFT SIGN OF A-FIELD TO Q._^1_%TCQ_"Q_0REVERSE IT._^1_%JMP*_!AEX2+1_^1AEX2_!LLS_"1_,SHIFT A-FIELD SIGN TO Q._^1_%LDA-_!BFLD3,I_'B-FLD WORD 3._^1_%ALS_"1_/SHIFT OUT B-FLD SIGN BIT._^1_%€€LRS_"1_/SHIFT IN A-FLD SIGN BIT._^1_%LDQ-_!P2,I_*PARAMETER 2 - B-FLD TABLE ADDR._^1_%STA-_!C2,Q_*STORE ADJUSTED WORD 3._^1*_]_^1*_]_^1*_]_^1*_]_^1AEX1_!LDQ-_!C3,I_%EXIT ADDRESS._^1*_]_^1_%STQ*_!EXIT+1_)SET EXIT ADDRESS._^1FINI_!LDQ-_!I_+STORAGE ADDR TO Q-REG._^1_%LDA-_!C2,Q_^1_%STA-_!I_.RESTORE I REGISTER._^1_%LDA-_!C1,Q_*RESTORE A REGISTER._^1_%LDQ*_!(ZERO),Q_#RESTORE Q REGISTER._€€^1*_]_^1EXIT_!JMP+_!0000_%RETURN TO CALLING PROGRAM._^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1* THESE CONSTANTS ARE PLACED HERE IN THE CENTER OF THE ROUTINE TO_^1* PROVIDE FOR ACCESS BY ONE-WORD INSTRUCTIONS._^1*_]_^1OOFF_!NUM_"$00FF_^1FFOO_!NUM_"$FF00_^1ZERO_!NUM_"0_^1*_]_^1*_]_^1*************************************************€€**********************_^1*_]_^1*_]_^1* FETCH DIGIT FROM A-FIELD, SET BLANKS = ZERO, CONVERT ASCII TO BINARY,_^1* UPDATE (DECREMENT) A-FIELD ADDRESS COUNTER AND BYTE SWITCH._^1*_]_^1ALOAD NUM_"0_^1_%LDA-_!ASIZEW,I_(DIGIT COUNTER._^1_%SAN_"1_0SKIP IF NOT ZERO._^1_%JMP*_!AEND_,JUMP-NO MORE DIGITS IN A-FIELD._^1_%LDQ-_!AFLD2W,I_(A-FIELD ADDR._^1_%LDA-_!ABYTEW,I_(BYTE SWITCH._^1_%TCA_"€€A_1RE-SET BYTE SWITCH FOR NEXT PASS._^1_%STA-_!ABYTEW,I_^1_%SAZ_"ALD1_-SKIP IF DIGIT IS IN BITS 0-7._^1_%TRQ_"A_^1_%INA_"-1_/DECREMENT ADDR._^1_%STA-_!AFLD2W,I_^1_%LDA*_!(ZERO),Q_%WORD CONTAINING DIGIT._^1_%ARS_"8_^1ALDMSK AND*_!OOFF_%CLEAR OTHER HALF OF WORD._^1_%INA_"-$20_^1_%SAZ_"1_#SKIP IF BLANK -SET EQUAL TO ZERO_^1_%INA_"-$10_-COMPLETE ASCII CONVERSION._^1_%RAO-_!ASIZEW,I_(BU€€MP DIGIT COUNTER._^1AEND_!STA-_!HOLDA,I_$NEW DIGIT._^1_%JMP*_!(ALOAD)_)EXIT._^1*_]_^1ALD1_!LDA*_!(ZERO),Q_!LOCATION CONTAINING DIGIT._^1_%JMP*_!ALDMSK_^1*_]_^1*_]_^1*_]_^1*_]_^1* FETCH B-FIELD DIGIT, SET BLANK = ZERO, CONVERT FROM ASCII TO BINARY._^1*_]_^1BLOAD NUM_"0_^1_%LDQ-_!BFLD2W,I_(B-FIELD ADDR._^1_%LDA*_!(ZERO),Q_%LOCATION CONTAINING DIGIT._^1_%LDQ-_!BBYTEW,I_(BYTE SWITCH._€€^1_%SQN_"1_0SKIP IF 2ND BYTE._^1_%ARS_"8_1FROM BITS 8-15 TO 0-7._^1_%AND*_!OOFF_,CLEAR OTHER HALF OF WORD._^1_%INA_"-$20_^1_%SAZ_"1_0SKIP IF BLANK - SET IT EQL TO ZERO._^1_%INA_"-$10_-COMPLETE ASCII CONVERSION._^1_%STA-_!HOLDB,I_)STORE IT._^1_%JMP*_!(BLOAD)_)EXIT._^1*_]_^1*_]_^1*_]_^1*_]_^1* CONVERT TO ASCII FROM BINARY, STORE DIGIT AND UPDATE B-FLD ADDRESS._^1STORE NUM_"0_^1_%LDQ€€-_!BFLD2W,I_'B-FIELD ADDR._^1_%LDA-_!BBYTEW,I_(B-FIELD BYTE SWITCH._^1_%TCA_"A_1RE-SET BYTE SWITCH FOR NEXT PASS._^1_%STA-_!BBYTEW,I_^1_%SAZ_"ST1_/SKIP IF BYTE WAS BITS 0-7._^1_%TRQ_"A_^1_%INA_"-1_0DECREMENT B-FIELD ADDR._^1_%STA-_!BFLD2W,I_^1_%LDA-_!CHAR,I_*NEW DIGIT TO BE STORED._^1_%INA_"$30_.BINARY TO ASCII._^1_%ALS_"8_1SHIFT TO BITS 8-15._^1_%STA-_!CHAR,I_^1_%LDA*_!(ZERO),Q_%C€€ONTENTS OF LOCATION TO BE STORED._^1_%AND*_!OOFF_,CLEAR OUT CURRENT DIGIT._^1*_]_^1ST2_"EOR-_!CHAR,I_$PICK UP NEW DIGIT._^1_%STA*_!(ZERO),Q_%STORE ENTIRE WORD._^1_%RAO-_!BSIZEW,I_(BUMP B-FLD COUNTER._^1_%JMP*_!(STORE)_)EXIT._^1*_]_^1ST1_"LDA-_!CHAR,I_^1_%INA_"$30_.CONVERT TO ASCII._^1_%STA-_!CHAR,I_^1_%LDA*_!(ZERO),Q_%CONTENTS OF NEW LOCATION._^1_%AND*_!FFOO_,CLEAR PRESENT DIGIT_^1€€_%JMP*_!ST2_^1*_]_^1*_]_^1*_]_^1*_]_^1* ADDITION SUB-ROUTINE._^1ADDRTN NUM_"0_^1_%LDA-_!HOLDA,I_)A-FIELD DIGIT._^1_%ADD-_!HOLDB,I_)B-FIELD DIGIT._^1_%ADD-_!CARRY,I_)CARRY FROM PREVIOUS ADD._^1_%STA-_!CHAR,I_*NEW DIGIT._^1_%INA_"-$A_^1_%CLR_"Q_^1_%SAM_"AR1_.SKIP IF NO CARRY THIS TIME._^1_%STA-_!CHAR,I_*NEW DIGIT._^1_%ENQ_"1_^1AR1_"STQ_"CARRY,I_'SET CARRY FLAG._^1_%JMP*_!(ADDRTN)_(EX€€IT._^1*_]_^1*_]_^1*_]_^1*_]_^1* SUBTRACT SUB-ROUTINE._^1*_]_^1SUBRTN NUM_"0_^1_%LDA-_!HOLDB,I_'B-FIELD DIGIT._^1_%SUB-_!HOLDA,I_'A-FIELD DIGIT._^1_%SUB-_!BORROW,I_(LESS PREVIOUS BORROW DIGIT._^1_%CLR_"Q_^1_%SAP_"SR1_.SKIP IF NO BORROW NEEDED._^1_%INA_"$A_/ADD 10 BACK IN._^1_%ENQ_"1_^1SR1_"STQ-_!BORROW,I_$SET BORROW FLAG._^1_%STA-_!CHAR,I_*NEW DIGIT._^1_%JMP*_!(SUBRTN)_(EXIT._^1*_]_€€^1*_]_^1* DECREMENT B-FIELD ADDRESS POINTER._^1*_]_^1ADJBFD NUM_"0_^1_%LDQ-_!BFLD2W,I_!B-FLD ADDR._^1_%LDA-_!BBYTEW,I_!B-FLD BYTE SWITCH._^1_%TCA_"A_*RESET BYTE SWITCH._^1_%STA-_!BBYTEW,I_^1_%SAZ_"3_*SKIP IF BITS 0-7._^1_%TRQ_"A_^1_%INA_"-1_)DECREMENT B-FLD ADDR._^1_%STA-_!BFLD2W,I_^1_%RAO-_!BSIZEW,I_!BUMP B-FLD COUNTER_^1_%JMP*_!(ADJBFD)_^1*_]_^1*_]_^1* COMPUTE RIGHT-MOST CHARACTR€€ ADDRESS_^1*_]_^1ADRRIT NUM_"0_^1_%LDA-_!BSIZE,I_"B-FLD LENGTH._^1_%CLR_"Q_^1_%DVI_"=N2_^1_%ADD-_!BFLD2,I_"CURRENT ADDR._^1_%SQN_"ADRRTT_!SKIP IF REMAINDER FROM DIVISION._^1_%LDQ-_!BBYTE,I_^1_%TCQ_"Q_"RESET BYTE SWITCH._^1_%SQZ_"1_"SKIP IF 2ND BYTE._^1_%INA_"-1_"DECREMENT ADDR._^1_%STQ-_!BBYTEW,I_^1_%STA-_!BFLD2W,I_^1_%JMP*_!ADREXT_^1ADRRTT LDQ-_!BBYTE,I_^1_%STQ-_!BBYTEW,I_^1_%STA-€ _!BFLD2W,I_"NOW THE B-FLD ADDR OF RIGHTMOST CHAR._^1ADREXT JMP*_!(ADRRIT)_"RETURN TO CALLER_^1_%BSS_"(12)_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************_^1_%END_"DZ_^__ PIF CSY/ P€1_%NAM IF_+IF DRAFT 5.1 12/02/74_1(CYB)_^1*_]_^1************************************************************************_^1*_]_^1* THIS ROUTINE WAS MODIFIED FOR VER. 4.0 TO INCORPORATE_^1* THE ACCEPTED STD. COLLATING SEQUENCE. THE LOOKUP_^1* SCHEME WAS CHANGED TO AN INDEXING METHOD_^1*_]_^1*_]_^1*_;* * * * * *_^1*_<*_(*_^1*_<*_!I F_!*_^1*_<*_(*_^1*_<* * * * * *_^1*_]_^1*_]_^1*_]_€€^1*_]_^1*_]_^1*_]_^1************************************************************************_^1*_]_^1*_]_^1*_]_^1_%ENT_"IFLSAX,IFEQAX,IFEQNX,IFGRAX_^1_%ENT_"IFLSNX,IFGRNX_^1*_]_^1*_]_^1*_]_^1************************************************************************_^1************************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_5*** ROUTINE DESC€€RIPTION ***_^1*_]_^1*_]_^1* THERE ARE 6 "IF" CONDITIONAL TESTS; IF LESS THAN (ALPHA-NUMERIC AND_^1* NUMERIC), IF EQUAL TO (ALPHA-NUMERIC AND NUMERIC), IF GREATER THAN_^1* (ALPHA-NUMERIC AND NUMERIC)._^1* IF THE CONDITION IS SATISFIED, CONTROL IS TRANSFERRED TO THE ADDRESS_^1* SPECIFIED BY THE THIRD PARAMETER. OTHERWISE, CONTROL IS RETURNED_^1* TO THE NEXT SEQUENTIAL LOCATION FOLLO€€WING THE PARAMETER LIST._^1*_]_^1* THE CODE GENERATED IN CORE BY THE "IF" MACRO IS FORMATTED AS_^1* FOLLOWS;_]_^1* EXT_!IFXXXX_#WHERE XXXX = LSAN, EQAN, GRAN,_^1* RTJ_!IFXXXX_2LSNU, EQNU OR GRNU._^1* ADC_!A-FIELD ADDR_^1* ADC_!B-FIELD ADDR_^1* ADC_!RETURN ADDRESS (IF CONDITION IS SATISFIED)_^1*_]_^1* THE COMPARISON IS PERFORMED LEFT TO RIGHT._^1* IN A NUMERIC COMPARE, A ZERO FIELD €€IS CONSIDERED EQUAL REGARDLESS_^1* OF FIELD LENGTH, DECIMAL POINTS AND SIGNS._^1* FOR 2 NUMERIC ITEMS, COMPARISON IS BASED ON THE ALGEBRAIC VALUES; A_^1* POSITIVE VALUE IS GREATER THAN A NEGATIVE VALUE AND A SMALL_^1* NEGATIVE NUMBER IS GREATER THAN A LARGE NEGATIVE NUMBER._^1* TWO A/N ITEMS OR 1 A/N AND 1 NUM ITEM ARE COMPARED ACCORDING TO THE_^1* SPECIFIED COLLATING SEQUENCE._^1*€€ ALL GROUP ITEMS ARE TREATED AS A/N REGARDLESS OF THE CLASS OF DATA._^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1************************************************************************_^1************************************************************************_^1*_]_^1*_]_^1*_]_^1************************************************************************_^1****************************************€€********************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_<* DATA TABLE FORMAT *_^1*_]_^1* WORD 1 -_]_^1*_*BIT 0 - ADJUSTMENT_)0 = LEFT-JUSTIFIED_^1*_G1 = RIGHT-JUSTIFIED_^1*_*BIT 1 - FILL_00 = BLANKS_^1*_G1 = ZEROS_^1*_*BIT 2 - MODE_00 = ALPHA-NUMERIC_^1*_G1 = NUMERIC_^1*_*BIT 3 - BYTE_00 = BITS 8-15_^1*_H1 = BITS 0-7_^1*_*BITS 4-7 - LEVEL_+1 TO 9 (HEX), WHERE 1 IS HIGHEST_^1*_€€*BITS 8-10 - UNUSED_^1*_*BITS 11-15 - PHASE_)10000 = INPUT_^1*_H01000 = OUTPUT_^1*_H00100 = WORKING_^1*_G00010 = CONSTANT_^1*_G00001 = REPORT_^1*_]_^1*_]_^1* WORD 2 - CORE ADDRESS OF THE DATA (0 TO 7FFF)._^1*_]_^1*_]_^1* WORD 3 -_]_^1*_-BITS 0-11 - DATA LENGTH (BINARY NUMBER OF CHARACTERS)._^1*_.BITS 12-14 - FRACTION LENGTH (0-7)._^1*_-BIT 15 - SIGN_)0 = POSITIVE_^1*_F1 = NEGATIVE€€_^1*_]_^1*_]_^1* WORD 4 - ENVIRONMENT TABLE POINTER (ONLY PRESENT FOR INPUT ENTRY);_^1*_]_^1*_]_^1*_]_^1*_]_^1************************************************************************_^1************************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_A* MAINLINE *_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1IFLSAX NUM_"0_-ALPHA-NUM,LESS-THAN_^1_%EQU_"IFLSAN€€(IFLSAX)_^1*_]_^1_%ENQ_"$10_^1_%LDA*_!IFLSAN_^1_%JMP*_!TSTSTG_^1************************************************************************_^1************************************************************************_^1IFEQAX NUM_"0_-ALPHA-NUM,EQUAL_^1_%EQU_"IFEQAN(IFEQAX)_^1*_]_^1_%ENQ_"$20_^1_%LDA*_!IFEQAN_^1_%JMP*_!TSTSTG_^1************************************************************€€************_^1************************************************************************_^1IFGRAX NUM_"0_-ALPHA-NUM,GREATER THAN_^1_%EQU_"IFGRAN(IFGRAX)_^1*_]_^1_%ENQ_"$30_^1_%LDA*_!IFGRAN_^1_%JMP*_!TSTSTG_^1************************************************************************_^1************************************************************************_^1IFLSNX NUM_"0_-NUMERIC-LESS€€ THAN_^1_%EQU_"IFLSNU(IFLSNX)_^1*_]_^1_%ENQ_"$11_^1_%LDA*_!IFLSNU_^1_%JMP*_!TSTSTG_^1************************************************************************_^1************************************************************************_^1IFEQNX NUM_"0_-NUMERIC EQUAL - ENTRY POINT_^1_%EQU_"IFEQNU(IFEQNX)_^1*_]_^1_%ENQ_"$21_^1_%LDA*_!IFEQNU_^1_%JMP*_!TSTSTG_^1***************************€€*********************************************_^1ENTRY NUM_"0_-ENTRY POINT SWITCH_^1*_BHEX 10, 20, 30, 11, 21 OR 31_^1************************************************************************_^1*_]_^1IFGRNX NUM_"0_^1_%EQU_"IFGRNU(IFGRNX)_^1*_]_^1_%ENQ_"$31_^1_%LDA*_!IFGRNU_^1************************************************************************_^1TSTSTG STQ*_!ENTRY_^1*************€€***********************************************************_^1************************************************************************_^1_%EQU_"C1(1),C2(2)_^1_%SPC_"4_^1LOCAL STA_"P3I_+RETURN ADDRESS_^1CONTIN TRA_"Q_^1_%INA_"3_^1_%STA_"C3I_+EXIT ADDRESS IF CONDITION NOT MET_^1_%LDA*_!ENTRY_^1_%STA*_!C4I_+SAVE ENTRY CODE_^1_%ARS_"4_^1_%INA_"-2_^1_%STA*_!C5I_+IF C5I = 0 TEST IS IFEQ€€XX_^1_%CLR_"A_^1_%STA*_!BFLDSW_(CLEAR SWITCHES_^1_%STA*_!NSW_^1_%STA*_!TEMP2_^1************************************************************************_^1************************************************************************_^1_%LDA-_!C2,Q_*PARAMETER 3, EXIT IF CONDITION MET_^1_%STA_"P3I_^1_%LDA-_!C1,Q_*PARAMETER2_^1_%STA*_!BFLD_^1_%LDQ*_!(ZERO),Q_^1* ADDRESS POINTER TO DATA TABL€€E IS STILL IN Q - REG._^1* EXTRACT INFORMATION FROM A-FIELD DATA TABLE_^1_%LDA*_!(ZERO),Q_^1H0008 AND_"=N8_^1_%SAZ_"H8000+2_'SKIP IF FIRST CHAR. IS IN BITSN8-15_^1H8000 LDA_"=N$8000_^1_%ADD-_!C1,Q_*SECOND WORD OF DATA TABLE_^1_%STA*_!AFLD_*A-FLD DATA ADDRESS_^1_%LDA-_!C2,Q_*3RD WORD_^1_%STA_"AFLDX_^1H0FFF AND_"=N$0FFF_^1_%TCA_"A_-COMPLEMENT IT_^1_%STA*_!ACOUNT_(STORE AS COUNTER_€€^1_%LDA-_!C2,Q_*ISOLATE FRACTION LENGTH_^1_%ALS_"4_^1H0007 AND_"=N$7_^1_%STA_"AFRAC_^1_%LDA*_!(ZERO),Q_^1_%AND*_!HF0_^1_%STA*_!TEMP1_^1_%LDA-_!3,Q_^1_%AND*_!HF0_+EXAMINE NEXT DATA TABLE_^1_%SUB*_!TEMP1_^1_%SAM_"NGRUPA_(SKIP IF NOT A GROUP ITEM_^1_%SAZ_"NGRUPA_(DITTO_^1_%STA*_!TEMP2_)SET SWITCH TO SHOW GROUP ITEM_^1* EXTRACT INFORMATION FROM B - FIELD DATA TABLE_^1NGRUPA LDQ*_!BFLD€€_*B-FLD TABLE ADDR TO Q-REG_^1_%LDA*_!(ZERO),Q_^1_%AND*_!H0008+1_^1_%SAZ_"1_-IF FIELD BEGINS IN BITS 8-15 OF WORD_^1_%LDA*_!H8000+1_^1_%ADD-_!C1,Q_*B-FLD DATA ADDRESS_^1_%STA*_!BFLD_^1_%LDA-_!C2,Q_*THIRD TABLE WORD_^1_%STA_"BFLDX_^1_%AND*_!H0FFF+1_^1_%TCA_"A_-COMPLEMENT IT_^1_%STA*_!BCOUNT_(STORE AS COUNTER_^1_%LDA-_!C2,Q_*ISOLATE FRACTION LENGTH_^1_%ALS_"4_^1_%AND*_!H0007+1_^1_%ST€€A_"BFRAC_^1_%LDA*_!(ZERO),Q_^1_%AND*_!HF0_^1_%STA*_!TEMP1_^1_%LDA-_!3,Q_+EXAMINE NEXT DATA TABLE_^1_%AND*_!HF0_^1_%SUB*_!TEMP1_^1_%SAM_"NGRUPB_(SKIP IF NOT A GROUP ITEM_^1_%SAZ_"NGRUPB_(DITTO_^1_%STA*_!TEMP2_^1NGRUPB LDA*_!TEMP2_^1_%SAN_"ALPHA_)SKIP IF EITHER ENTRY IS A GROUP ITEM_^1_%LDA*_!C4I_+ENTRY SWITCH_^1_%AND_"=N$F_^1_%SAZ_"ALPHA_)SKIP IF ALPHA-NUM ENTRY_^1_%JMP*_!NUMRIC_(JU€€MP IF NUMERIC ENTRY_^1C4I_"NUM_"0_^1HF0_"NUM_"$F0_^1EBASE NUM_"0_^1ZERO_!NUM_"0_^1************************************************************************_^1************************************************************************_^1* ALPHA-NUMERIC ENTRY_^1************************************************************************_^1****************************************************€€********************_^1ALPHA EQU_"ALPHA(*)_^1_%RTJ*_!ALOAD_)FETCH A CHAR. FROM A-FIELD_^1_%LDA*_!BFLDSW_(IS B-FIELD DEPLETED_^1_%SAZ_"BLD_+NO, SKIP_^1_%ENA_"$20_+SUBSTITUTE A BLANK FOR B-FLD CHAR._^1_%STA*_!TEMP2_^1_%JMP*_!BLD1_^1BLD_"EQU_"BLD(*)_^1_%RTJ*_!BLOAD_)FETCH A CHAR. FROM B-FIELD_^1BLD1_!EQU_"BLD1(*)_^1_%SUB*_!TEMP1_^1_%SAZ_"BCNT_*IF CHARACTERS ARE EQUAL_^1_%LDA*_!C5I_+I€€S TEST IFEQXX_^1_%SAN_"NODON_^1_%JMP*_!TSTIFJ_(YES, GET OUT_^1NODON JMP*_!COLLAT_(NO, COMPARE CHARS VIA COLLATING SEQUENCE_^1*_]_^1*_]_^1BCNT_!LDA*_!BCOUNT_^1_%LDQ*_!ACOUNT_^1_%SQZ_"1_-IF A-FLD COUNTER = ZERO_^1_%JMP*_!BTEST_^1_%SAN_"SUBBLK_(IF B-FLD COUNTER .NE. ZERO_^1EQUAL ENA_"-2_^1TSTIFJ JMP_"TSTIF_)FO TEST FOR TYPE OF "IF"_^1SUBBLK ENA_"$20_+SUBSTITUTE BLANK FOR A-FLD CHAR.€€_^1_%STA*_!TEMP1_^1_%JMP*_!BLD_^1*_]_^1BTEST SAN_"2_-IF B-FLD COUNTER .NE. ZERO_^1_%SET_"A_-SET FLAG TO INDICATE THAT_^1_%STA*_!BFLDSW_(B-FIELD HAS BEEN DEPLETED_^1_%JMP*_!ALPHA_^1_%SPC_"2_^1BFLDSW NUM_"0_-B-FLD DELETED FLAG_^1C5I_"NUM_"0_-SWITCH = 0 IF TEST IF IFEQXX_^1_%SPC_"2_^1COLLAT LDQ*_!TEMP2_)GET B-FIELD CHAR._^1_%INQ_"-$20_*SUBTRACT INDEX FACTOR_^1_%LDA_"TABLE,Q_'GET COLL€€ATING SEQ._^1_%STA*_!TEMP2_^1_%LDQ*_!TEMP1_)GET A-FIELD CHAR._^1_%INQ_"-$20_^1_%LDA_"TABLE,Q_^1_%SUB*_!TEMP2_)COMPARE CHARACTERS_^1_%SAP_"1_^1_%JMP*_!LESS_^1_%JMP*_!GRTR_^1_%SPC_"4_^1NSW_"NUM_"0_^1TEMP2 NUM_"0_^1TEMP1 NUM_"0_^1BFLD_!NUM_"0_^1AFLD_!NUM_"0_^1ACOUNT NUM_"0_^1BCOUNT NUM_"0_^1H7FFF NUM_"$7FFF_^1_%SPC_"4_^1ALOAD NUM_"0_^1_%LDQ*_!AFLD_*GET CURRENT A-FLD ADDR._^1_%SQP_€€"1_K02/24/76_^1_%ADQ*_!H7FFF_^1_%LDA*_!(ZERO),Q_^1_%LDQ*_!AFLD_^1_%SQM_"ALOWER_(IF AFTER BITS 0-7_^1_%ARS_"8_^1ALOWER AND_"=N$FF_^1_%ADQ_"=N$8000_^1_%STQ*_!AFLD_^1_%STA*_!TEMP1_)SAVE A-FLD CHAR._^1_%RAO*_!ACOUNT_(BUMP A-FLD COUNTER_^1_%JMP*_!(ALOAD)_^1_%SPC_"4_^1BLOAD NUM_"0_^1_%LDQ*_!BFLD_*GET CURRENT B-FLD ADDR._^1_%SQP_"1_K02/24/76_^1_%ADQ*_!H7FFF_^1_%LDA*_!(ZERO),Q_^1_%LDQ*_!B€€FLD_^1_%SQM_"BLOWER_(IF AFTER BITS 0-7_^1_%ARS_"8_^1BLOWER AND*_!ALOWER+1_^1_%ADQ*_!ALOWER+3_^1_%STQ*_!BFLD_^1_%STA*_!TEMP2_)SAVE B-FLD CHAR._^1_%RAO*_!BCOUNT_(BUMP B-FLD COUNTER_^1_%JMP*_!(BLOAD)_^1_%SPC_"4_^1*_]_^1*_]_^1*_]_^1NUMRIC RTJ*_!ALOAD_)GET A-FLD CHAR._^1_%LDQ*_!BFLDSW_^1_%SQN_"GETB_*IF THIS IS NOT FIRST PASS_^1_%INA_"-$30_^1_%SAN_"NOTZRO_(IF A-CHAR NOT = ZERO_^1_%LDA*_!€€ACOUNT_^1_%SAZ_"1_-IF A-FIELD DEPLETED_^1_%JMP*_!NUMRIC_^1_%STA*_!TEMP1_)SET TO ZERO - A-FIELD IS ZERO_^1NOTZRO STA*_!BFLDSW_(SET SWITCH - OUT OF PASS1_^1GETB_!RTJ*_!BLOAD_)GET A-FLD CHAR._^1_%LDQ*_!NSW_^1_%SQN_"COMPUT_(SKIP IF NOT STILL IN 1ST PASS_^1_%INA_"-$30_^1_%SAN_"NNOTZO_(IF CHAR NOT ZERO_^1_%LDA*_!BCOUNT_^1_%SAZ_"1_-IF B-FLD DEPLETED_^1_%JMP*_!GETB_^1_%LDA*_!TEMP1_^1_%SAZ_€€"N5_,SKIP IF BOTH ARE ZERO - EQUAL_^1_%LDQ*_!AFLDX_^1_%JMP*_!CP2_^1N5_#JMP*_!EQUAL_^1NNOTZO STA*_!NSW_+SET SWITCH - OUT OF PAASS 1_^1_%SPC_"4_^1COMPUT LDA*_!ACOUNT_^1_%SAZ_"1_-IF A-FIELD DEPLETED_^1_%TCA_"A_-SUBTRACT LENGTH OF FRACTION_^1_%SUB*_!AFRAC_)FROM ENTIRE REMAINING LENGTH_^1_%TRA_"Q_^1_%LDA*_!BCOUNT_^1_%SAZ_"1_-IF B-FIELD DEPLETED_^1_%TCA_"A_^1_%SUB*_!BFRAC_^1_%TCA_"A_^1_%€€AAQ_"A_-A-FIELD MINUS B-FIELD_^1_%LDQ*_!AFLDX_)SIGN OF A-FIELD_^1_%SAN_"CP1_+IF NOT EQUAL LENGTH FIELDS_^1_%LDA*_!TEMP1_^1_%SUB*_!TEMP2_^1_%SAZ_"CEQAL_)IF CHARS ARE EQUAL_^1_%SAP_"CP2_+SKIP IF A-FIELD CHAR IS GREATER_^1_%JMP*_!CP1A_*IF B-FIELD CHAR IS GREATER_^1CEQAL LDA*_!ACOUNT_^1_%LDQ*_!BCOUNT_^1_%JMP*_!CP4_^1*_]_^1*_]_^1CP1_"SAP_"CP2_+IF A-FIELD LONGER_^1CP1A_!LDA*_!BFLDX_)SIG€€N OF B-FIELD_^1_%SQP_"CP3_+IF A-FIELD POSITIVE_^1_%SAP_"LESS_*IF B-FIELD POSITIVE_^1_%JMP*_!GRTR_*A-FLD IS GREATER THAN B-FLD_^1CP3_"SAP_"LESS_*SKIP IF A-FLD .LT. B-FLD_^1_%JMP*_!GRTR_^1*_]_^1CP2_"SQP_"GRTR_*IF A-FIELD IS POSITIVE_^1*_]_^1LESS_!ENA_"-1_^1_%JMP*_!TSTIF_)A-FIELD .LT. B-FIELD_^1*_]_^1GRTR_!ENA_"-3_,A-FIELD .GT. B-FIELD_^1_%JMP*_!TSTIF_^1AFRAC NUM_"0_-LENGTH OF FRACTI€€ON PART OF A-FLD_^1BFRAC NUM_"0_-LENGTH OF FRACTION PART OF A-FLD_^1*_]_^1CP4_"SAN_"CP5_+IF NOT END OF A-FIELD_^1_%SQN_"1_-IF NOT END OF B-FIELD_^1_%JMP*_!EQUALX_(FIELDS ARE EQUAL_^1_%TCQ_"A_-CHAR COUNT OF B-FIELD_^1ZEROA ADD_"=N0_^1_%SUB*_!BFRAC_^1_%SAM_"CP4A_*IF ONLY FRACTION LEFT_^1_%SAZ_"1_-DITTO_^1_%JMP*_!LESS_^1CP4A_!JMP*_!BREMN_^1*_]_^1CP5_"SQZ_"1_-IF END OF B-FIELD_^1_%JM€€P*_!NUMRIC_(NOT END - COMPARE NEXT TWO CHARS._^1_%TCA_"A_^1_%ADD*_!ZEROA+1_^1_%SUB*_!AFRAC_^1_%SAM_"AREMN_)IF ONLY FRACTION LEFT_^1_%SAZ_"1_-DITTO_^1_%JMP*_!GRTR_^1*_]_^1*_]_^1AREMN RTJ*_!ALOAD_)GET A-FIELD CHAR._^1_%INA_"-$30_*TEST FOR ZERO_^1_%SAN_"ARE3_*IF NOT ZERO_^1_%LDA*_!ACOUNT_^1_%SAZ_"ARE2_*IF END OF FIELD_^1_%JMP*_!AREMN_)TEST NEXT CHAR_^1ARE3_!JMP*_!GRTR_*A-FLD .GT. B-F€€LD_^1ARE2_!JMP*_!EQUALX_^1*_]_^1*_]_^1BREMN RTJ*_!BLOAD_)GO GET B-FLD CHAR_^1_%INA_"-$30_*TEST FOR ZERO_^1_%SAN_"BRE3_*IF NOT ZERO_^1_%LDA*_!BCOUNT_^1_%SAZ_"EQUALX_(IF END OF FIELD_^1_%JMP*_!BREMN_)TEST NEXT CHAR_^1BRE3_!JMP*_!LESS_*A-FLD .LT. B-FLD_^1EQUALX LDA*_!AFLDX_)SIGN OF A-FLD_^1_%EOR*_!BFLDX_^1_%SAM_"EQUAL1_(IF SIGNS ARE DIFFERENT_^1_%JMP_"EQUAL_)FIELDS ARE EQUAL_^1EQUAL1€€ LDQ*_!AFLDX_)SIGN OF A-FLD_^1_%JMP*_!CP2_+SEE WHICH FIELD IS GREATER_^1AFLDX NUM_"0_-SIGN OF A-FIELD_^1BFLDX NUM_"0_-SIGN OF B-FIELD_^1TSTIF LDQ_"C4I_+ENTRY SWITCH_^1_%QRS_"4_-1=LT, 2=EQ, 3=GT_^1_%AAQ_"A_^1_%SAZ_"CONSAT_(IF CONDITION SATISFIED_^1_%LDQ*_!C3I_^1_%JMP_"(ZERO),Q_^1CONSAT LDQ*_!P3I_^1_%JMP_"(ZERO),Q_^1C3I_"NUM_"0_^1P3I_"NUM_"0_^1*_]_^1*_]_^1*************************€€***********************************************_^1************************************************************************_^1*_]_^1* WHICH WAS MODIFIED IN VER. 4.0_^1TABLE NUM_"0002_*SPACE_^1_%NUM_"0028_*!_^1_%NUM_"0065_*QUOTE_^1_%NUM_"0061_*#_^1_%NUM_"0029_*$_^1_%NUM_"0046_*%_^1_%NUM_"0018_*&_^1_%NUM_"0063_*"_^1_%NUM_"0015_*(_^1_%NUM_"0031_*)_^1_%NUM_"0030_**_^1_%NUM_"0016_*+_^1_€€%NUM_"0045_*,_^1_%NUM_"0034_*-_^1_%NUM_"0013_*._^1_%NUM_"0035_*/_^1_%NUM_"0178_*0_^1_%NUM_"0179_*1_^1_%NUM_"0180_*2_^1_%NUM_"0181_*3_^1_%NUM_"0182_*4_^1_%NUM_"0183_*5_^1_%NUM_"0184_*6_^1_%NUM_"0185_*7_^1_%NUM_"0186_*8_^1_%NUM_"0187_*9_^1_%NUM_"0060_^1_%NUM_"0032_*;_^1_%NUM_"0144_*END OF LINE_^1_%NUM_"0064_*=_^1_%NUM_"0177_*>_^1_%NUM_"0049_*?_^1_%NUM_"0001_*REJECT_^1_%NUM_"0131_*A_^€€1_%NUM_"0132_*B_^1_%NUM_"0133_*C_^1_%NUM_"0134_*D_^1_%NUM_"0135_*E_^1_%NUM_"0136_*F_^1_%NUM_"0137_*G_^1_%NUM_"0138_*H_^1_%NUM_"0139_*I_^1_%NUM_"0147_*J_^1_%NUM_"0148_*K_^1_%NUM_"0149_*L_^1_%NUM_"0150_*M_^1_%NUM_"0151_*N_^1_%NUM_"0152_*O_^1_%NUM_"0153_*P_^1_%NUM_"0154_*Q_^1_%NUM_"0155_*R_^1_%NUM_"0164_*S_^1_%NUM_"0165_*T_^1_%NUM_"0166_*U_^1_%NUM_"0167_*V_^1_%NUM_"0168_*W_^1_%NUM_"01€€69_*X_^1_%NUM_"0170_*Y_^1_%NUM_"0171_*Z_^1_%NUM_"0012_*FILL_^1_%NUM_"0188_*FIELD SEPARATOR_^1_%NUM_"0142_*)_^1_%NUM_"0033_*CANCEL_^1_%NUM_"0059_^1***_#THE FOLLOWING ARE LOWER CASE_#***_^1_%NUM_"0067_*A_^1_%NUM_"0068_*B_^1_%NUM_"0069_*C_^1_%NUM_"0070_*D_^1_%NUM_"0071_*E_^1_%NUM_"0072_*F_^1_%NUM_"0073_*G_^1_%NUM_"0074_*H_^1_%NUM_"0075_*I_^1_%NUM_"0083_*J_^1_%NUM_"0084_*K_^1_%NUM_"008€V5_*L_^1_%NUM_"0086_*M_^1_%NUM_"0087_*N_^1_%NUM_"0088_*O_^1_%NUM_"0089_*P_^1_%NUM_"0090_*Q_^1_%NUM_"0091_*R_^1_%NUM_"0100_*S_^1_%NUM_"0101_*T_^1_%NUM_"0102_*U_^1_%NUM_"0103_*V_^1_%NUM_"0104_*W_^1_%NUM_"0105_*X_^1_%NUM_"0106_*Y_^1_%NUM_"0107_*Z_^1_%NUM_"0130_^1_%NUM_"0044_^1_%NUM_"0146_^1_%NUM_"0099_^1_%NUM_"0000_*INVALID CODE_^1_%END_"DZ_^__VPSHIFT CSY/ P€1_%NAM SHIFT_(SHIFT DRAFT 5.1 12/02/74_^1***********************************************************************_^1*_]_^1* C. B. EVANS_^1* CONTROL DATA CORPORATION_^1* RABINOW ENGINEERING DIVISION_^1* 16 OCTOBER 1968_^1*_]_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_9************************_^1*_9*_5*_^1*_9*€€_5*_^1*_9*_$S H I F T_%*_^1*_9*_5*_^1*_9*_5*_^1*_9************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1_%ENT_"SHIFTX_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************€€_^1*_]_^1*_]_^1*_]_^1*_]_^1*_5*** ROUTINE DESCRIPTION ***_^1*_]_^1* THE FIELD IS SHIFTED LEFT OR RIGHT UP TO 99 POSITIONS._^1* IF THE FIELD IS SHORTER THAN THE SHIFT COUNT, THE FIELD IS CLEARED_^1* IF A "L" OR "R" IS NOT SPECIFIED THE ROUTINE EXITS WITH NO DATA_^1* MANIPULATION AT ALL. CHARACTERS SHIFTED ARE LOST._^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*********************************€€**************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_8* DATA TABLE FORMAT *_^1*_]_^1* WORD 1 -_^1*_*BIT 0 - ADJUSTMENT_#0 = LEFT-JUSTIFIED_^1*_A1 = RIGHT-JUSTIFIED_^1*_*BIT 1 - FILL_*0 = BLANKS_^1*_A1 = ZEROS_^1*_*BIT 2 - MODE_*0 = ALPHA-NUMERIC_^1*_A1 = NUMERIC_^1*_*BIT 3 - BYTE_*0 = BITS 8-15€€_^1*_A1 = BITS 0-7_^1*_*BITS 4-7 - LEVEL_%1 TO 9 (HEX), WHERE 1 IS HIGHEST._^1*_*BITS 8-10 - UNUSED_^1*_*BITS 11-15 - PHASE_#10000 = INPUT_^1*_A01000 = OUTPUT_^1*_A00100 = WORKING_^1*_A00010 = CONSTANT_^1*_A00001 = REPORT_^1*_]_^1*_]_^1* WORD 2 - CORE ADDRESS OF THE DATA (0 TO 7FFF)._^1*_]_^1*_]_^1* WORD 3 -_^1*_*BITS 0-11 - DATA LENGTH (BINARY NUMBER OF CHARACTERS)._^1*_+BITS 1€€2-14 - FRACTION LENGTH (0-7)._^1*_*BIT 15 - SIGN_'0 = POSITIVE_^1*_A1 = NEGATIVE_^1*_]_^1*_]_^1* WORD 4 - ENVIRONMENT TABLE POINTER (ONLY PRESENT FOR INPUT ENTRY);_^1*_]_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_6*** CONSTANTS ***_^1*_]€€_^1*_]_^1_%EQU_"C1(1),C2(2),C3(3),C4(4)_^1_%EQU_"PARM1(4),PARM2(5),PARM3(6),BYTE(7),BBYTE(8)_^1_%EQU_"INADD(9),OUTADD(10),FILLCH(11),LENGTH(12)_^1_%EQU_"HOLD(13),INA1(14),INA2(15)_^1_%EQU_"ERRSW(6)_)ERRSW USES THE SAME LOCATION AS PARM3._^1*_]_^1*_]_^1*_]_^1*_]_^1* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1ALCORE NUM€€_"0_*SAVES Q REGISTER._^1_%NUM_"0_1SAVES A REGISTER._^1_%NUM_"0_1SAVES I REGISTER._^1_%NUM_"0_0RETURN ADDRESS (EXIT)._^1_%NUM_"0_0PARM1 - PARAMETER 1 - FIELD ADDRESS._^1_%NUM_"0_0PARM2 - PARAMETER 2 - SHIFT COUNT._^1_%NUM_"0_0PARM3 - PARAMETER 3 - L OR R ;_^1*_8ERRSW - ERROR SWITCH._^1_%NUM_"0_0BYTE - 0000= BITS 8-15 ; $FFFF=BITS 0-7_^1_%NUM_"0_0BBYTE - SAME AS ABOVE._^1_%NUM_"0_1I€€NADD - CURRENT ADDR COUNTER FOR CHAR._^1_%NUM_"0_1OUTADD - NEW ADDR COUNTER FOR CHAR, PO_^1_%NUM_"0_1FILLCH - HOLDS FILL CHAR, BLANK OR ZER_^1_%NUM_"0_0LENGTH - HOLDS FIELD LENGTH._^1_%NUM_"0_0HOLD - MISC TEMPORARY STORAGE._^1_%NUM_"0_1INA1 - ADDR BUMPING CONSTANT._^1_%NUM_"0_0INA2 - ADDR BUMPING CONSTANT._^1*_]_^1*_]_^1**************************************************************€€*********_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1* * * * * * * * * * * * * * * MAINLINE * * * * * * * * * * * * * * *_^1*_]_^1SHIFTX NUM_"0_^1_%EQU_"SHIFT(SHIFTX)_^1*_]_^1_%STQ*_!QSAVE_^1LOCAL LDQ_"=XALCORE_#ADDR OF LOCAL STORAGE._^1_%STA-_!C1,Q_,SAVE A-REG._^1_%LDA-_!I_^1_%STA-_!C2,Q_,SAVE I-REG._^1_%LDA*_!QSAVE_^1_%S€€TA*_!(ZRO),Q_%SAVE Q-REG._^1_%STQ-_!I_0STORAGE ADDR TO I-REG._^1STRETN LDA*_!SHIFT_$PARAMETER 1 ADDRESS._^1_%TRA_"Q_^1_%INA_"3_1BUMP BY 3 TO GET PAST PARAMETERS._^1_%STA-_!C3,I_,RETURN ADDRESS_^1_%CLR_"A_^1_%STA-_!ERRSW,I_^1_%STA-_!FILLCH,I_^1*_]_^1*_1EACH PARAMETER IS A POINTER TO DATA TABLE._^1_%LDA*_!(ZRO),Q_%PARAMETER1, FIELD ADDRESS._^1_%STA-_!PARM1,I_^1_%LDA-_!C2,Q_$PARAMETER€€ 3, DIRECTION._^1_%STA-_!PARM3,I_^1_%LDQ-_!C1,Q_$PARAMETER 2, COUNT._^1_%STQ-_!PARM2,I_^1************_^1_%LDA*_!(ZRO),Q_%WD 1 OF TABLE ENTRY FOR COUNT._^1_%AND*_!OOO8_^1_%STA-_!BYTE,I_*ZERO=1ST BYTE, 8-15._^1_%LDA-_!C2,Q_,WORD 2._^1_%AND*_!OFFF_^1_%SUB*_!K2_^1_%STA-_!HOLD,I_*ZERO=2 DIGIT LENGTH._^1_%LDQ-_!C1,Q_,DATA ADDRESS TO Q-REG._^1_%CLR_"A_^1_%STA-_!PARM2,I_^1*_]_^1COUNTX LDA-€€_!BYTE,I_^1_%SAZ_"BYTE1_,SKIP IF IN BITS 8-15._^1_%CLR_"A_^1_%STA-_!BYTE,I_*RESET SWITCH FOR NEXT PASS._^1_%LDA*_!(ZRO),Q_%DATA WORD._^1_%INQ_"1_0BUMP ADDRESS FOR NEXT PASS._^1_%JMP*_!COMMON_^1*_]_^1BYTE1 SET_"A_^1_%STA-_!BYTE,I_*RE-SET SWITCH._^1_%LDA*_!(ZRO),Q_%DATA WORD._^1_%ARS_"8_^1*_]_^1COMMON AND*_!OOFF_"MASK OUT THE COUNT._^1_%INA_"-$30_-CONVERT FROM ASCII._^1_%ADD-_!PARM2€€,I_)PREVIOUS COUNT._^1_%STA-_!PARM2,I_^1_%LDA-_!HOLD,I_*ARE THERE 1 OR 2 DIGITS?_^1_%SAN_"GO2_.SKIP IF 1 DIGIT._^1*_]_^1_%STQ-_!HOLD,I_*SET SWITCH NON-ZERO BY SAVING Q._^1_%ENA_"10_^1_%MUI_"PARM2,I_*MULTIPLY TENS DIGIT BY 10._^1_%STA-_!PARM2,I_)STORE THE PRODUCT._^1_%LDQ-_!HOLD,I_*RESTORE Q-REG._^1_%JMP*_!COUNTX_*GO GET UNITS DIGIT._^1*_]_^1GO2_"LDQ-_!PARM1,I_%TABLE POINTER FOR DAT€€A._^1_%LDA*_!(ZRO),Q_%WORD 1._^1_%AND*_!OOO8_^1_%SAZ_"1_)SKIP IF BITS 8-15._^1_%SET_"A_^1_%STA-_!BYTE,I_*SET SWITCH. ZERO = 8-15._^1_%LDA*_!(ZRO),Q_^1_%AND*_!K2_+GET FILL CHARACTER._^1_%SAZ_"1_1SKIP IF BLANKS._^1_%ENA_"$10_^1_%INA_"$20_^1_%STA-_!FILLCH,I_(BLANK = $20; ZERO = $30._^1_%LDA-_!C1,Q_,WORD 2 - DATA ADDRESS._^1_%STA-_!PARM1,I_^1_%LDA-_!C2,Q_-WORD 3 - FLD LENGTH._^1_%AND*_€€!OFFF_^1_%STA-_!LENGTH,I_^1_%SUB-_!PARM2,I_)SUB SHIFT COUNT._^1_%SAZ_"1_.SKIP IF COUNT = FLD LENGTH._^1_%SAP_"DIRECT_+SKIP IF COUNT IS LESS THAN FLD LENGTH._^1_%LDA-_!PARM1,I_^1_%STA-_!OUTADD,I_(SET ADDRESS COUNTER._^1_%JMP*_!CLR_.GO CLEAR THE FIELD._^1DIRECT LDQ-_!PARM3,I_"TABLE POINTER FOR DIRECTION._^1_%LDA*_!(ZRO),Q_%WORD 1._^1_%AND*_!OOO8_^1_%LDQ-_!C1,Q_-DATA ADDRESS TO Q-REG.€€_^1_%LDQ*_!(ZRO),Q_%DATA WD TO Q-REG._^1_%SAN_"1_1SKIP IF IN BITS 0-7._^1_%QRS_"8_^1_%LDA*_!OOFF_^1_%LAQ_"Q_1LP OF A AND Q REGS._^1*_]_^1_%INQ_"-$4C_^1_%SQZ_"LL_0SKIP IF IT S AN "L"._^1_%INQ_"-6_^1_%SQZ_"RR_0SKIP IF IT S AN "R"._^1_%STQ-_!ERRSW,I_)SET ERROR SWITCH._^1_%JMP*_!FIN_^1RR_#ENQ_"1_^1LL_#STQ-_!PARM3,I_'PARM3=ZERO IF LEFT SHIFT; ONE IF RIGHT._^1_%CLR_"A_^1_%STA-_!ERRSW,I_)€€CLEAR SWITCH._^1_%SQZ_"LEFT_-SKIP IF LEFT SHIFT_^1_%JMP*_!RIGHT_+JUMP IF RIGHT SHIFT._^1*_]_^1***********************************************************************_^1*_]_^1* THESE CONSTANTS ARE HERE TO ALLOW MAXIMUM USE OF 1-WORD INSTRUCTIONS._^1*_]_^1QSAVE NUM_"0_^1OOO8_!NUM_"$0008_^1OFFF_!NUM_"$0FFF_^1OOFF_!NUM_"$00FF_^1FFOO_!NUM_"$FF00_^1K2_#NUM_"2_^1ZRO_"NUM_"0_^1*_]_^1*****€€******************************************************************_^1*_]_^1* COMPUTE ADDRESS OF THE NEW LEFT-MOST CHARACTER._^1LEFT_!LDA-_!PARM2,I_$COUNT._^1_%DVI*_!K2_^1_%ADD-_!PARM1,I_)FIELD ADDRESS._^1_%SQZ_"SETIN_,SKIP IF NO REMAINDER - EVEN # OF SHIFTS_^1_%LDQ-_!BYTE,I_^1_%TCQ_"Q_1RESET BYTE SWITCH._^1_%SQN_"SETIN+1_+SKIP IF CHAR WAS IN 1ST BYTE._^1_%INA_"1_^1_%JMP*_!*+2_^1SE€€TIN LDQ-_!BYTE,I_^1_%STQ-_!BBYTE,I_^1_%STA-_!INADD,I_)ADDR OF CHARACTER TO BE SHIFTED 1ST._^1*_]_^1_%LDA-_!PARM1,I_^1_%STA-_!OUTADD,I_(SET ADDR OF NEW LEFT-MOST CHARACTER._^1*_]_^1* SET-UP ADDRESS BUMPING CONSTANTS FOR THE LEFT SHIFT._^1_%CLR_"A_^1_%STA-_!INA2,I_^1_%INA_"1_^1_%STA-_!INA1,I_^1*_]_^1* GET A CHARACTER AND MOVE IT TO ITS NEW LOCATION WITHIN THE FIELD._^1LOOP_!LDQ-_!€€INADD,I_$CHAR ADDR TO Q-REG._^1_%LDA-_!BBYTE,I_^1_%TCA_"A_1RESET BYTE SWITCH FOR NEXT PASS._^1_%STA-_!BBYTE,I_^1_%SAN_"B815_.SKIP IF CHAR IN 1ST BYTE (BITS 8-15)._^1_%TRQ_"A_^1_%ADD-_!INA1,I_*ADD 1 IF LEFT_^1_%STA-_!INADD,I_)NOW IT S SET FOR NEXT PASS._^1_%LDA*_!(ZRO),Q_%DATA WD._^1_%AND*_!OOFF_^1_%LDQ-_!BYTE,I_^1_%SQZ_"FILL-1_+SKIP IF CHAR TO BE STORED IN 1ST BYTE._^1_%JMP*_!FILL_€€,TO BE STORED IN 2ND BYTE._^1*_]_^1B815_!TRQ_"A_^1_%ADD-_!INA2,I_*ADD 0 IF LEFT SHIFT; ADD -1 IF RIGHT._^1_%STA-_!INADD,I_)NOW IT S SET FOR NEXT PASS._^1_%LDA*_!(ZRO),Q_%DATA WORD._^1_%AND*_!FFOO_^1_%LDQ-_!BYTE,I_^1_%SQZ_"FILL_.SKIP IF PRESENT POSITION IS OKAY._^1_%ALS_"8_^1* NOW STORE THE SHIFTED CHARACTER._^1FILL_!STA-_!HOLD,I_%STORE TEMPORARILY._^1_%TCQ_"A_1RESET BYTE SWITCH._^€€1_%STA-_!BYTE,I_^1_%LDQ-_!OUTADD,I_(STORAGE ADDRESS._^1_%SAN_"FB815_,SKIP IF CHAR TO BE STORED IN 1ST BYTE._^1_%TRQ_"A_^1_%ADD-_!INA1,I_*ADD 1 IF LEFT SHIFT; AND 0 IF RIGHT._^1_%STA-_!OUTADD,I_^1_%LDA*_!(ZRO),Q_%DATA WORD._^1_%AND*_!FFOO_^1_%JMP*_!FSTORE_^1*_]_^1FB815 TRQ_"A_^1_%ADD-_!INA2,I_*ADD 0 IF LEFT SHIFT; ADD -1 IF RIGHT._^1_%STA-_!OUTADD,I_(NOW IT S RESET FOR NEXT TIME._^€€1_%LDA*_!(ZRO),Q_^1_%AND*_!OOFF_^1*_]_^1FSTORE EOR-_!HOLD,I_#PICK-UP THE CHARACTER._^1_%STA*_!(ZRO),Q_^1*_]_^1* ARE WE AT THE END?_^1TEST_!LDA-_!LENGTH,I_^1_%INA_"-1_0DECREMENT FLD LENGTH COUNTER._^1_%STA-_!LENGTH,I_^1_%TRA_"Q_^1_%SUB-_!PARM2,I_)SUB NO. OF SHIFTS._^1_%SAZ_"2_0SKIP IF ALL THE SIGNIFICANT CHARS SHIFT_^1_%SAM_"1_0SKIP IF ALL THE SIGNIFICANT CHARS SHIFT_^1_%JMP*_!LOOP€€_,CONTINUE THIS SHIFTY JOB._^1_%SQN_"1_0SKIP MORE TO SHIFT OR FILL._^1FIN_"JMP*_!FINI_)JUMP IF FINISHED_^1_%LDA-_!FILLCH,I_(BLANK OR ZERO._^1_%LDQ-_!BYTE,I_^1_%SQZ_"1_1SKIP IF CHAR IS TO BE SHIFTED._^1_%JMP*_!FILL_^1_%JMP*_!FILL-1_^1*_]_^1* IF THE SHIFT COUNT IS GRTR THAN OR EQUAL TO THE FIELD LENGTH, THE_^1* FIELD IS FILLED WITH THE APPROPRIATE FILL CHARACTER._^1CLR_"CLR_"A_.SET€€ UP_^1_%STA-_!INA2,I_.FOR A_^1_%ENA_"1_8LEFT SHIFT._^1_%STA-_!INA1,I_^1_%LDA-_!LENGTH,I_(SIMULATE THE_^1_%STA-_!PARM2,I_-"END OF SIGNIFICANT_^1_%INA_"1_:CHARACTERS" CONDITION._^1_%STA-_!LENGTH,I_^1_%JMP*_!TEST_,GO FILL FIELD._^1*_]_^1*_]_^1* COMPUTE ADDRESS OF RIGHT-MOST CHARACTER IN FIELD._^1*_]_^1RIGHT CLR_"A,Q_^1_%LDA-_!BYTE,I_(GET UPPER / LOWER INDICATOR_^1_%STA-_!HOLD,I_^1_%€€LDA-_!LENGTH,I_^1_%DVI*_!K2_^1_%ADD-_!PARM1,I_*FLD ADDRESS + (FLD LENGTH/2)._^1_%SQN_"SETBQ+1_*SKIP IF REMAINDER - ODD NO. OF SHIFTS._^1_%LDQ-_!BYTE,I_^1_%STQ-_!HOLD,I_(KEEP BYTE SWITCH TEMPORARILY._^1_%TCQ_"Q_1RESET BYTE SWITCH._^1_%SQZ_"SETBQ_-SKIP IF CHAR IS IN 2ND BYTE._^1_%INA_"-1_/DECREMENT ADDRESS BY ONE._^1*_]_^1SETBQ STQ-_!BYTE,I_^1_%STA-_!OUTADD,I_(ADDR OF RIGHT-MOST CHA€€RACTER._^1*_]_^1* COMPUTE ADDRESS OF CHARACTER TO BE THE RIGHT-MOST._^1_%LDA-_!LENGTH,I_^1_%SUB-_!PARM2,I_!SHIFT COUNT._^1_%CLR_"Q_^1_%DVI*_!K2_^1_%ADD-_!PARM1,I_)FLD ADDRESS + (FLD LENGTH-SHIFT COUNT/2)_^1_%SQZ_"2_)SKIP IF NO REMAINDER._^1_%LDQ-_!HOLD,I_^1_%JMP*_!SETRQ_^1_%LDQ-_!HOLD,I_^1_%TCQ_"Q_1RESET BYTE SWITCH._^1_%SQZ_"SETRQ_,SKIP IF CHAR IN 2ND BYTE (0-7)._^1_%INA_"-1_0DECR€€EMENT ADDR COUNTER._^1*_]_^1SETRQ STQ-_!BBYTE,I_^1_%STA-_!INADD,I_)ADDR OF CHAR TO BE SHIFTED FIRST._^1* SET-UP ADDRESS BUMPING CONSTANTS FOR THE RIGHT SHIFT._^1_%CLR_"A_^1_%STA-_!INA1,I_^1_%INA_"-1_^1_%STA-_!INA2,I_^1_%JMP*_!LOOP_-GO TO WORK._^1*_]_^1*_]_^1FINI_!LDA-_!ERRSW,I_$ERROR SWITCH SET?_^1FINIS LDQ-_!C3,I_^1_%STQ*_!EXIT+1_+SET RETURN ADDRESS._^1RELOC LDQ-_!I_)STORAGE A€zDDR TO Q-REG._^1*_]_^1_%LDA-_!C2,Q_^1_%STA-_!I_/RESTORE I REGISTER._^1_%LDA-_!C1,Q_,RESTORE A REGISTER._^1_%LDQ*_!(ZRO),Q_%RESTORE Q REGISTER._^1*_]_^1EXIT_!JMP+_!0000_(RETURN TO CALLING ROUTINE._^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************_^1_%END_"DZ_^__zPCLEAR CSY/ P€1_%NAM CLEAR_(CLEAR DRAFT 5.1 12/02/74_^1***********************************************************************_^1*_]_^1*_]_^1* C. B. EVANS_^1* CONTROL DATA CORPORATION_^1* RABINOW ENGINEERING DIVISION_^1* 03 OCTOBER 1968_^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_9* * * * * * * * * * * * * *_^1*_9*_8*_^1*_9*_#C L €€ E A R_%*_^1*_9*_8*_^1*_9* * * * * * * * * * * * * *_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1*_]_^1_%ENT_"CLEARX_^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_]_^1*_=* CONSTANTS *_^1*_]_€€^1*_]_^1_%EQU_"CWD1(6),CWD2(7),CWD3(8),FLAG(5)_^1_%EQU_"HOLD(9),BYTE(10),SAVEQ(11)_^1_%EQU_"C1(1),C2(2),C3(3),C4(4)_^1*_]_^1*####################################################_^1*_$EQU VOLA($BB),VOLR($BA)_4#_^1*####################################################_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1* ALL REFERENCES TO "TABLE 5" ARE SYNONYMOUS WITH THE "DATA TABLE"._^1*_]_^1*_]€€_^1ALCORE NUM_"0_,SAVES Q REGISTER._^1_%NUM_"0_2SAVES A REGISTER._^1_%NUM_"0_3SAVES I REGISTER._^1_%NUM_"0_2HOLDS RETURN (EXIT) ADDRESS._^1_%NUM_"0_+HOLDS PARAMETER = POINTER TO TABLE 5._^1_%NUM_"0_+FLAG - NEGATIVE = GROUP ITEM._^1_%NUM_"0_+CWD1 - WORD 1 OF TABLE 5._^1_%NUM_"0_+CWD2 - WORD 2 OF TABLE 5._^1_%NUM_"0_+CWD3- WORD 3 OF TABLE 5._^1_%NUM_"0_+HOLD - USED FOR LEVEL CODE AND€€ FOR FILL CHAR_^1_%NUM_"0_+BYTE - 0000 = BITS 8-15, $FFFF = BITS 0-7._^1_%NUM_"0_2SAVEQ - HOLDS Q-REG CONTENTS._^1*_]_^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_8* DATA TABLE FORMAT *_^1*_]_^1* WORD 1 -_^1*_*BIT 0 - ADJUSTMENT_#0 = LEFT-JUSTIFI€€ED_^1*_A1 = RIGHT-JUSTIFIED_^1*_*BIT 1 - FILL_*0 = BLANKS_^1*_A1 = ZEROS_^1*_*BIT 2 - MODE_*0 = ALPHA-NUMERIC_^1*_A1 = NUMERIC_^1*_*BIT 3 - BYTE_*0 = BITS 8-15_^1*_A1 = BITS 0-7_^1*_*BITS 4-7 - LEVEL_%1 TO 9 (HEX), WHERE 1 IS HIGHEST._^1*_*BITS 8-10 - UNUSED_^1*_*BITS 11-15 - PHASE_#10000 = INPUT_^1*_A01000 = OUTPUT_^1*_A00100 = WORKING_^1*_A00010 = CONSTANT_^1*_@00001 = REPORT_^1*€€_]_^1*_]_^1* WORD 2 - CORE ADDRESS OF THE DATA (0 TO 7FFF)._^1*_]_^1*_]_^1* WORD 3 -_^1*_+BITS 0-11 - DATA LENGTH (BINARY NUMBER OF CHARACTERS)._^1*_*BITS 12-14 - FRACTION LENGTH (0-7)._^1*_*BIT 15 - SIGN_'0 = POSITIVE_^1*_@1 = NEGATIVE_^1*_]_^1*_]_^1* WORD 4 - ENVIRONMENT TABLE POINTER (ONLY PRESENT FOR INPUT ENTRY);_^1*_DNOT VALID FOR "CLEAR" ROUTINE._^1*_]_^1*_]_^1*_]_^1***€€********************************************************************_^1***********************************************************************_^1*_]_^1*_0* ROUTINE DESCRIPTION *_^1*_]_^1* THE APPROPRIATE FILL CHARACTER REPLACES THE CONTENTS OF THE_^1* INDICATED DATA ELEMENT. IF THE DATA ELEMENT IS A GROUP ITEM, THE_^1* INCLUDED ELEMENTARY ITEMS ARE CLEARED SEPARATELY._^1* THE FIEL€€D(S) ARE CLEARED IN LEFT TO RIGHT FASHION._^1* CONSTANT ITEMS ARE NOT TREATED DIFFERENTLY._^1* INPUT ITEMS WILL NOT BE CLEARED, INSTEAD THE ROUTINE WILL EXIT._^1*_]_^1*_]_^1***********************************************************************_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1*_8* MAINLINE *_^1*_]_^1*_]_^1CLEARX NUM_"0_^€€1_%EQU_"CLEAR(CLEARX)_^1*_]_^1_%STQ*_!QSAVE_^1*_]_^1LOCAL LDQ_"=XALCORE_#ADDR OF LOCAL STORAGE_^1_%STA-_!C1,Q_-SAVE A_^1_%LDA-_!I_^1_%STA-_!C2,Q_,SAVE I_^1_%LDA*_!QSAVE_^1_%STA*_!(ZRO),Q_$SAVE Q-REG._^1_%STQ-_!I_.STORAGE ADDR TO I-REG._^1*_]_^1STRETN LDA*_!CLEAR_$PARAMETER ADDRESS._^1_%TRA_"Q_0TO Q_^1_%INA_"1_^1_%STA-_!C3,I_-RETURN ADDRESS._^1_%LDA*_!(ZRO),Q_$PARAMETER IS DATA TAB€€LE POINTER._^1_%STA-_!C4,I_^1_%TRA_"Q_5TABLE 5 POINTER TO Q-REG._^1_%CLR_"A_^1_%STA-_!FLAG,I_.CLEAR FLAG WORD._^1*_]_^1*_]_^1TSTLVL LDA*_!(ZRO),Q WORD 1 OF TABLE 5._^1_%SAP_"1_!SKIP IF NOT AN R LEVEL_"CCN1700CLE40-001_^1_%JMP*_!CLOSE_!R LEVEL-EXIT_"CCN1700CLE40-001_^1_%AND*_!OOFO_0AND OUT LEVEL CODE._^1_%STA-_!HOLD,I_.HANG ON TO IT._^1TSTLV2 INQ_"3_.BUMP POINTER TO NEXT ENTRY._^1_€€%LDA*_!(ZRO),Q_$WORD 1._^1_%AND*_!OOFO_0LEVEL CODE._^1_%SUB-_!HOLD,I_*COMPARE NEXT LEVEL TO PREVIOUS._^1_%SAZ_"LVLLOW_+SKIP IF EQUAL._^1_%SAM_"LVLLOW_+SKIP IF NEXT ENTRY GRTR THAN PREVIOUS._^1_%LDA*_!BIT15_'$8000._^1_%STA-_!FLAG,I_.SET GROUP ITEM FLAG._^1_%JMP*_!TSTLV2_-CONTINUE SEARCH FOR LOWEST LEVEL._^1*_]_^1*_]_^1LVLLOW INQ_"-3_-BUMP POINTER TO PREVIOUS TABLE ENTRY._^1_%LDA*_!(€€ZRO),Q_$WORD1._^1_%STA-_!CWD1,I_^1_%AND*_!OOO8_^1_%SAZ_"1_'SKIP IF BYTE IS 8-15._^1_%SET_"A_^1_%STA-_!BYTE,I_*SET SWITCH - 0000 = 8-15, $FFFF = 0-7._^1_%LDA-_!CWD1,I_*WORD 1 AGAIN._^1_%AND*_!OOO2_^1_%SAZ_"1_0SKIP IF FILL IS BLANKS._^1_%ENA_"$10_^1_%INA_"$20_^1_%STA-_!HOLD,I_*$20=BLANK; $30 = ZERO._^1_%LDA-_!C1,Q_,WORD 2 OF TABLE 5_^1_%STA-_!CWD2,I_^1_%LDA-_!C2,Q_,WORD 3._^1_%AND*_!€€OFFF_^1_%STA-_!CWD3,I_^1_%STQ-_!SAVEQ,I_)SAVE ADDR OF CURRENT TABLE 5 ENTRY._^1*_]_^1FILLIT LDQ-_!CWD2,I_#CURRENT ADDRESS._^1_%LDA-_!BYTE,I_^1_%TCA_"A_1COMPLIMENT BYTE SWITCH._^1_%STA-_!BYTE,I_*NOW IT S SET FOR NEXT PASS._^1_%SAN_"BYTE1_#SKIP IF CHAR IN BYTE 1 (BITS 8-15)._^1_%TRQ_"A_1CURRENT ADDR TO A-REG._^1_%INA_"1_1BUMP ADDR POINTER FOR NEXT PASS._^1_%STA-_!CWD2,I_^1_%LDA*_!(ZR€€O),Q_$LOAD DATA WORD._^1_%AND*_!FFOO_^1_%EOR-_!HOLD,I_*ADD FILL CHARACTER._^1_%JMP*_!STORE_+GO STORE IT._^1BYTE1 LDA*_!(ZRO),Q LOAD DATA WORD._^1_%AND*_!OOFF_^1_%ALS_"8_^1_%EOR-_!HOLD,I_*PICK UP FILL CHAR._^1_%ALS_"8_^1*_]_^1STORE STA*_!(ZRO),Q STORE NEW DATA WORD._^1_%LDA-_!CWD3,I_*TEST FOR ZERO CHARACTER COUNT._^1_%INA_"-1_^1_%STA-_!CWD3,I_^1_%SAZ_"TSTFLG_+SKIP IF ALL CLEARED€€._^1_%JMP*_!FILLIT_*JUMP IF MORE TO DO._^1*_]_^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1*_]_^1* THESE CONSTANTS ARE SET HERE IN THE MIDDLE OF THE ROUTINE TO PROVIDE_^1* FOR ACCESS BY 1-WORD INSTRUCTIONS THROUGH-OUT THE PROGRAM._^1*_]_^1QSAVE NUM_"0_^1OOFO_!NUM_"$00F0_(LEVEL MASK._^1ZRO_"NUM_"0_^1BIT15 NUM_"$8000_^1OOO8_!NUM_"$00€€08_^1OOO2_!NUM_"$0002_^1OFFF_!NUM_"$0FFF_^1OOFF_!NUM_"$00FF_^1FFOO_!NUM_"$FF00_^1*_]_^1*_]_^1***********************************************************************_^1*_]_^1*_]_^1*_]_^1TSTFLG LDA-_!FLAG,I_#WAS THIS A GROUP ITEM?_^1_%SAM_"1_0YES, SKIP TO FIND OUT WHAT S LEFT._^1_%JMP*_!CLOSE_+NO, THAT S ALL._^1*_]_^1*_]_^1_%LDQ-_!SAVEQ,I_)CURRENT TABLE 5 POINTER TO Q-REG._^1PREVLV L€€DA*_!(ZRO),Q WORD 1 OF TABLE 5._^1_%AND*_!OOFO_)GET LEVEL CODE._^1_%STA-_!HOLD,I_^1_%INQ_"-3_^1_%LDA*_!(ZRO),Q_#WORD 1._^1_%AND*_!OOFO_+PULL LEVEL._^1_%SUB-_!HOLD,I_%SUBTRACT PREVIOUS LEVEL CODE._^1_%SAM_"1_%SKIP IF THIS LEVEL IS NOT GREATER._^1_%JMP*_!LVLLOW+1_!JUMP IF = OR GREATER._^1_%TRQ_"A_^1_%SUB-_!C4,I_,IS THIS THE ORIGINAL ENTRY?_^1_%SAZ_"CLOSE_,YES, END OF THE OPERATION._€€^1_%JMP*_!PREVLV_*NO, LOOP BACK._^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1*_]_^1CLOSE LDQ-_!C3,I_^1_%STQ*_!EXIT+1_#SET RETURN ADDRESS._^1_%LDQ-_!I_0STORAGE ADDRESS TO Q-REG._^1_%LDA-_!C2,Q_^1_%STA-_!I_0RESTORE I REGISTER._^1_%LDA-_!C1,Q_,RESTORE A REGISTER._^1_%LDQ*_!(ZRO),Q_$RESTORE Q REGISTER._^1*_]_^1EXIT_!JMP+_!0000_)RETURN TO CALLING PROGRAM._^1*_]_^1*_]_^1**********************€Œ*************************************************_^1***********************************************************************_^1_%END_"DZ_^__ŒPEXIT CSY/ P21_%NAM EXIT_)EXIT DRAFT 5.1 12/02/74_^1_%ENT_"EXITX_^1**** EXIT ROUTINE_^1**** USED BY DRAFT TO TRANSFER CONTROL_^1**** TO UTILITY SYSTEM WHEN DRAFT USER_^1**** PROGRAM HAS BEEN TERMINATED_^1EXITX ADC_"0_^1_%EQU_"EXIT(EXITX)_^1_%RTJ-_!($F4)_!PASS CONTROL TO UTILITY SYSTEM_^1_%NUM_"$0A00_^1_%END_"DZ_^__2PTRANS CSY/ P&1_%NAM TRANS_(TRANS(GOTO) DRAFT 5.1 12/02/74_^1_%ENT_"GOTOX_^1** TRANSFER ROUTINE FOR DRAFT_^1** ADDRESS OF TRANSFER IS PASSED AS A_^1** PARAMETER IN CALLING SEQ._^1GOTOX ADC_"0_^1_%EQU_"GOTO(GOTOX)_^1_%LDA*_!(GOTO)_#PICK UP TRANSFER ADDRESS_^1_%STA*_!SKIP+1_^1SKIP_!JMP+_!00_^1_%END_"DZ_^__&PCALL CSY/ Pϊ1_%NAM CALL_)CALL DRAFT 5.1 12/02/74_^1_%ENT_"CALLX_^1CALLX ADC_"0_^1_%EQU_"CALL(CALLX)_^1_%LDA*_!(CALL)_^1_%STA*_!TEM_^1_%INA_"-1_^1_%STA*_!TEMP_^1_%LDA*_!CALL_^1_%INA_"1_^1_%STA*_!(TEMP)_^1_%JMP*_!(TEM)_^1_%BZS_"TEM_^1_%BZS_"TEMP_^1_%END_"DZ_^__ϊPRETURN CSY/ Pς1_%NAM RETURN_'RETURN DRAFT 5.1 12/02/74_^1_%ENT_"RETURX_^1RETURX ADC_"0_^1_%EQU_"RETURN(RETURX)_^1_%LDA*_!(RETURN)_^1_%INA_"-1_^1_%STA*_!RETADR_^1_%LDA*_!(RETADR)_^1_%STA*_!TEMP_^1_%JMP*_!(TEMP)_^1_%BZS_"RETADR_^1_%BZS_"TEMP_^1_%END_"DZ_^__ςPCONVER CSY/ P€1_%NAM CONVER_'CONVERT DRAFT 5.1 12/02/74_^1_%ENT_"CONVRX_^1_%EXT_"CVASEB_^1***************************************************************_^1* THE CONVERT ROUTINE USES THE TAPE SCOPE T15 CONVERT_**_^1* MODULE TO CONVERT DATA. BECAUSE THE T15 MODULE CONVERTS_%*_^1* WHOLE WORDS ONLY, THE DRAFT CONVERT MUST_5*_^1* COMPENSATE FOR DRAFT DATA AREAS WHICH START OR END_+*_^1* OR BOTH IN €€THE MIDDLE OF A WORD(S). THIS COMPENSATION_'*_^1* IS MADE BY ALLOWING T15 TO CONVERT THE DATA AS NORMAL_(*_^1* AND THEN THE DRAFT CONVERT REPLACES THE LEFTMOST OR_**_^1* RIGHTMOST CHARACTERS WITH THEIR ORIGINAL VALUES IF NECESSARY. *_^1* NATURALLY THESE RESPECTIVE VALUES ARE SAVED BEFORE CONVERSION *_^1*****************************************************************_^1CONVRX ADC_€€"0_^1_%EQU_"CONVRT(CONVRX)_^1_%LDA*_!(CONVRT)_#1ST WORD OF DATA TABLE_^1_%STA*_!SAVE_^1_%INA_"1_^1_%STA*_!SAVE3_#2ND WORD OF DATA TABLE_^1_%INA_"1_^1_%STA*_!TEMP_#3RD WORD OF DATA TABLE_^1_%LDA*_!(TEMP)_#GET CHARACTER_^1_%AND_"=N$FFF_#LENGTH_^1_%TRA_"Q_2COMBINE AND SHIFT QA SUCH THAT_^1_%CLR_"A_$CLEAR THE A REGISTER......_^1_%LRS_"1_1THE CHARACTER LENGTH IS CONVERTED_^1_%STQ*_!LENG€€TH_"SAVE CURRENT Q CONTENTS_^1_%LDQ*_!(SAVE)_,SET THE UPPER/LOWER STARTING_^1_%QRS_"3_2BIT ALONG WITH THE ODD INDICATOR_^1_%LRS_"1_2IN ASAVE FOR USE AFTER THE_^1_%STA*_!ASAVE_-CONVERSION._^1_%LDQ*_!LENGTH_!GET LENGTH AGAIN_^1_%SAZ_"1_$NOT ODD LENGTH OR ODD START POSITION.._^1_%INQ_"1_$BUMP LENGTH BY 1_^1_%STQ*_!LENGTH_"ACTUAL NUMBER OF WORDS TO CONVRT_^1_%INQ_"-1_$SET UP LWA_^1_%ST€€Q*_!HOLD SAVE IN HOLD_^1_%RAO*_!CONVRT_#GET 3RD_^1_%LDA*_!(CONVRT)_#PARAMETER TO CHECK TYPE_^1_%STA*_!SAVAE_#OF CONVERT A OR E_^1_%LDA*_!(SAVAE)_#DOES CHAR. BEGIN_^1_%AND*_!H0008_#IN UPPER 8 BITS_^1_%RAO*_!SAVAE_#GET CONTENTS_^1_%LDQ*_!(SAVAE)_#OF 3RD_^1_%STQ*_!SAVAE_#PARAMETER_^1_%LDQ*_!(SAVAE)_#IN Q_^1_%SAN_"1_#CHAR IS_^1_%QRS_"8_#IN UPPER, YES_^1_%TRQ_"A_#NO_^1_%AND*_!H00FF_#LO€€WER_^1_%INA_"-$45_#IS IT_^1_%SAZ_"SKP_"SKIP FOR ASCII TO EBCDIC_^1_%LDA*_!LENGTH_+SET EBCDIC TO ASCII INDICATOR_^1_%ADD_"=N$8000_,INTO REQUEST TO T15 MODULE._^1_%STA*_!LENGTH_^1SKP_"RAO*_!CONVRT_!POINT TO RETURN ADDRESS_^1_%LDA*_!(SAVE3)_#GET ADDRESS OF_^1_%STA*_!SAVE3_#DATA BUFFER_^1_%ADD*_!HOLD_.ADD FWA + LENGTH_^1_%STA*_!HOLD_.SAVE AS LWA_^1_%LDA*_!(SAVE3)_*GET 1ST OR LEFTMOST W€€ORD OF DATA_^1_%AND*_!HFF00_-SAVE AND STORE ONLY UPPER PORTION_^1_%STA*_!HOLD1_^1_%LDA*_!(HOLD)_,GET RIGHTMOST WORD OF DATA_^1_%AND*_!H00FF_-SAVE LOWER PORTION OF DATA_^1_%STA*_!HOLD2_^1_%LDA*_!MSUB+1_^1_%SUB_"=N$7FFF_^1_%SAZ_"LENGTH-2_%NOT MSOS - SKIP_^1_%LDA*_!LENGTH_^1_%STA*_!SLTH_^1_%LDA*_!SAVE3_^1_%STA*_!SFWA_^1MSUB_!RTJ_"CVASEB_^1SFWA_!NUM_"0_^1_%ADC_"SLTH_^1_%JMP*_!SAVE3+1_^€€1_%RTJ-_!($F4)_-CALL T15 MODULE .........._^1_%NUM_"$1E00_^1LENGTH NUM_"0_^1SAVE3 NUM_"0_^1*******************************************************************_^1* THE UPPER 2 BITS IN ASAVE DETERMINE IF THE LEFTMOST AND/OR_$*_^1* RIGHTMOST CHARACTERS NEED TO BE RESET TO THEIR VALUE BEFORE THE *_^1* BUFFER WAS CONVERTED. THE LEFTMOST BIT MEANS: 1 = DATA STARTS *_^1* IN LOWER 0 = €€DATA STARTS IN UPPER. THE 2ND BIT MEANS: 0 =_"*_^1* EVEN NUMBER OF CHARS 1 = ODD NUMBER OF CHARS._0*_^1*_!*_!*_!IF ASAVE = 0000_%NO REPLACEMENT_1*_^1*_!*_!*_!IF ASAVE = 4000_%REPLACE RIGHTMOST CHAR_)*_^1*_!*_!*_!IF ASAVE = C000_%REPLACE LEFTMOST CHAR_**_^1*_!*_!*_!IF ASAVE = 8000_%REPLACE BOTH LEFTMOST AND_%*_^1*_!*_!*_8RIGHTMOST CHAR_1*_^1***************************************€€****************************_^1_%LDQ*_!ASAVE_^1_%SQN_"1_^1_%JMP*_!(CONVRT)_*EXIT A = 0000_^1_%SQM_"DOLEFT_^1_%JMP*_!DORITE_,GO PLUG IN RIGHTMOST CHARACTER A = 400_^1DOLEFT LDA*_!(SAVE3)_$PLUG IN LEFTMOST CHARACTER A = 8000 OR C000_^1_%AND*_!H00FF_^1_%EOR*_!HOLD1_^1_%STA*_!(SAVE3)_^1_%QLS_"1_^1_%SQM_"EXIT_/SKIP RIGHTMOST A = C000_^1DORITE LDA*_!(HOLD)_^1_%AND*_!HFF00_-DO RIGHTMOS€T CHARACTER ALSO A = 8000_^1_%EOR*_!HOLD2_^1_%STA*_!(HOLD)_^1EXIT_!JMP*_!(CONVRT)_%EXIT_^1SLTH_!NUM_"0_^1H00FF NUM_"$FF_^1HFF00 NUM_"$FF00_^1H0008 NUM_"8_^1HOLD_!NUM_"0_^1HOLD1 NUM_"0_^1HOLD2 NUM_"0_^1SAVE_!NUM_"0_^1TEMP_!NUM_"0_^1SAVAE NUM_"0_^1ASAVE NUM_"0_^1_%END_"DZ_^__PXDIG CSY/ P€1_%NAM XDIG_)CHECK DIGIT DRAFT 5.1 12/02/74_^1_%ENT_"XDIGX_^1XDIGX ADC_"0_^1_%EQU_"XDIG(XDIGX)_^1*_]_^1* XDIG IS CALLED TO CALCULATE A CHECKSUM FOR A DATA ELEMENT_^1* SPECIFIED IN A DRAFT PROCEDURE STATEMENT. THE RESULTANT_^1* CHECK-DIGIT IS PLACED IN THE STORAGE LOCATION SPECIFIED IN_^1* THE SAME DRAFT STATEMENT._^1*_]_^1_%CLR_"A_#SET TO ZERO_^1_%STA*_!XDMUL_#MULTIPLY/NO-MULTIP€€L FLG (SET IT TO MULTIPLY)_^1_%STA*_!XDCHK_#CHECK-SUM_^1_%RTJ*_!XDDTP_#GET NECESSARY INFO. FROM P1 ADR._^1* SPECIFIED IN CURRENT DRAFT STATEMENT_^1*_]_^1* A-REG. HOLDS NR. OF CHARACTERS TO BE PROCESSED_^1*_]_^1_%CLR_"Q_#DIVIDE NR. OF_^1_%DVI_"=N2_#CHARACTERS BY 2_^1* A-REG. HOLDS WORD INCREMENT TO BE ADDED TO BASE ADR. OF DATA._^1* Q-REG. HOLDS REMAINDER (0 EQ EVEN LENGTH. 1 EQ ODD€€ LENGTH)._^1* I-REG. HOLDS BASE ADR. OF CURRENT DATA ELEMENT._^1*_]_^1_%ADD-_!I_#GET TENTATIVE LAST-WORD ADR. OF DATA_^1_%SQN_"XD03-*-1_#ARE THERE AN ODD NR. OF CHARS._^1XD01_!LDQ*_!XDUL_#NO. GET UPPER/LOWER FLAG_^1_%SQN_"XD02-*-1_#IS 1ST CHAR.--OR CURRENT CHAR--IN U-HALF_^1_%INA_"-1_#YES. SUB- 1 FROM LAST-WORD--OR CURRENT_^1* WORD--ADDRESS_^1XD02_!TCQ_"Q_#SWITCH UPPER/LOWER FLAG S€€ETTING AND_^1_%STQ*_!XDUL_#SAVE FOR FURTHER PROCESSING_^1XD03_!STA-_!I_#SAVE LAST-WORD--OR CURRENT--WORD ADR._^1*_]_^1_%LDA-_!($FF)_#GET CURRENT CHARACTER_^1_%LDQ*_!XDUL_#GET UPPER/LOWER FLAG_^1_%SQN_"XD04-*-1_#IS CURRENT CHAR. IN U-HALF OF WORD_^1_%ARS_"8_#YES. MOVE IT TO LOWER HALF OF REG._^1XD04_!AND*_!XDLMK_#ISOLATE CHAR._^1_%RTJ*_!XDSUM_#ADD CHAR. TO CHECKSUM_^1*_]_^1_%LDA*_!X€€DNCH_#SUBTRACT 1 FROM NR. OF CHARS._^1_%INA_"-1_#REMAINING TO BE PROCESSED_^1_%SAZ_"XD05-*-1_#HAVE ALL CHARS. BEEN PROCESSED_^1_%STA*_!XDNCH_#NO. SAVE NEW NR. FOR NEXT PASS_^1_%LDA-_!I_#GET CURRENT WORD ADR._^1_%JMP*_!XD01_#PROCESS NEXT CHARACTER_^1*_]_^1* FINAL CHECK DIGIT PROCESSING FOLLOWS._^1*_]_^1XD05_!RTJ*_!XDDGT_#GET CHECK-DIGIT_^1_%RAO*_!XDIG_#INCR. RETURN ADR. (GET P2 ADDR€€ESS)_^1_%RTJ*_!XDDTP_#DO DATA TABLE PROCESSING PREPARATORY TO_^1* STORING CHECK-DIGIT_^1_%LDA-_!($FF)_#GET DATA WORD_^1_%LDQ*_!XDUL_#GET UPPER/LOWER FLAG_^1*_]_^1_%SQZ_"XD06-*-1_#SHOULD CHECK-DIGIT BE STORED IN L-HALF OF WD_^1_%AND*_!XDUMK_#YES. SET LOWER HALF OF WORD TO ZERO_^1_%ADD*_!XDCHK_#GET CHECK-DIGIT AND COMBINE WITH_^1_%JMP*_!XD07_#OTHER CHAR. IN WORD_^1*_]_^1XD06_!AND*_!X€€DLMK_#SET TO ZERO UPPER HALF OF WORD_^1_%LDQ*_!XDCHK_#GET CHECK-DIGIT AND_^1_%QLS_"8_#SHIFT IT TO U-HALF OF WORD_^1_%AAQ_"A_#COMBINE CHECK-DIGIT WITH OTHER CHAR. IN WORD_^1XD07_!STA-_!($FF)_#RETURN WORD TO ITS MEMORY LOCATION_^1*_]_^1_%RAO*_!XDIG_#INCR. RETURN ADR._^1_%JMP*_!(XDIG)_#RETURN TO NEXT DRAFT STATEMENT_^1*_]_^1*_]_^1*_]_^1XDDTP 0_$0_#ENTRANCE_^1*_]_^1* XDDTP IS CALLED B€€Y XDIG TO ISOLATE AND PROCESS RELEVANT_^1* INFORMATION FOUND IN WORDS 1, 2, AND 3 OF THE GIVEN DATA TABLE._^1*_]_^1_%LDA*_!(XDIG)_#GET BASE ADR. OF_^1_%STA*_!XDDTB_#DATA TABLE IN QUESTION_^1_%ENA_"$8_#ISOLATE BYTE FIELD OF_^1_%AND*_!(XDDTB)_#DATA TABLE WORD 1_^1_%SAZ_"XDP1-*-1_#WILL DATA BEGIN IN UPPER HALF OF WORD_^1_%SET_"A_#NO. SET UPPER/LOWER FLAG TO LOWER_^1XDP1_!STA*_!XDUL_#S€€AVE UPPER/LOWER FLG (U EQ 0. L EQ NEG. 0.)_^1*_]_^1_%RAO*_!XDDTB_#INCR. DATA TABLE ADR._^1_%LDA*_!(XDDTB)_#GET BASE ADR. OF DATA_^1_%STA-_!I_#SAVE FOR LATER PROCESSING_^1_%RAO*_!XDDTB_#INCR. DATA TABLE ADR._^1_%LDA*_!(XDDTB)_#GET DATA LENGTH_^1_%AND_"=N$7FFF_#SET SIGN OF DESTINATION FIELD TO +_^1_%STA*_!(XDDTB)_^1_%AND_"=N$FFF_#ELIMINATE EXTRANEOUS BITS_^1_%STA*_!XDNCH_#SAVE DATA L€€ENGTH_^1*_]_^1_%JMP*_!(XDDTP)_#RETURN_^1*_]_^1*_]_^1*_]_^1XDSUM 0_$0_#ENTRANCE_^1* XDSUM IS CALLED BY XDIG TO COMBINE A GIVEN NUMBER WITH AN_^1* EXISTING CHECKSUM. THE NR. IS FIRST CONVERTED TO DECIMAL_^1* FROM ASCII. EVERY OTHER NR. IS MERELY ADDED TO THE CHECKSUM._^1* ALTERNATELY, THE NR. IS DOUBLED, AND, IF THE RESULTANT_^1* DOUBLED NR. IS A TWO-DIGIT DECIMAL NR., THOSE TWO DIG€€ITS ARE_^1* SUMMED. THE RESULT IS ADDED TO THE CHECKSUM._^1*_]_^1* A-REG. HOLDS THE GIVEN NR._^1*_]_^1_%INA_"-$30_#CONVERT NR FROM ASCII_^1_%LDQ*_!XDMUL_#GET MUL./DON T MUL. FLG. (INITIALLY SET TO MUL)_^1_%SQM_"XDS01-*-1_#SHOULD NR. MERELY BE ADDED TO CHECKSUM_^1_%ALS_"1_#NO. DOUBLE THE NR._^1_%TRA_"Q_#IS THE DOUBLED_^1_%INQ_"-10_#NUMBER GREATER THAN_^1_%SQM_"XDS01-*-1_#OR EQUAL TO€€ 10_^1_%INA_"-9_#YES. SUM THE 2 DIGITS OF THE NR._^1*_]_^1XDS01 ADD*_!XDCHK_#COMBINE NR._^1_%STA*_!XDCHK_#WITH CHECKSUM_^1_%LDQ*_!XDMUL_#GET MUL/DON T MUL. FLG_^1_%TCQ_"Q_#REVERSE FLAG SETTING_^1_%STQ*_!XDMUL_#FOR NEXT PASS_^1*_]_^1_%JMP*_!(XDSUM)_#RETURN_^1*_]_^1*_]_^1*_]_^1XDDGT 0_$0_#ENTRANCE_^1*_]_^1* XDDGT IS CALLED BY XDIG TO ISOLATE THE FINAL CHECKDIGIT FROM_^1* THE CHECKS€€UM PERFORMED ON THE CURRENT DATA ELEMENT. THE LEAST_^1* SIGNIFICANT DECIMAL DIGIT IS EXTRACTED FROM THE CHECKSUM, AND,_^1* IF THIS NR. IS NON-ZERO, IT IS SUBTRACTED FROM 10. THE RESULT_^1* IS THEN CONVERTED TO ASCII._^1*_]_^1_%LDA*_!XDCHK_#GET CHECKSUM_^1XDG01 SAZ_"XDG03_$DOES NR. EQ ZERO_^1_%INA_"-10_$NO. SUBTRACT 10 FROM NR._^1_%SAM_"XDG02_$IS NR. NEGATIVE_^1_%JMP*_!XDG01_$NO._€€^1XDG02 TCA_"A_$YES. CONVERT NR. TO A POSITIVE VALUE_^1XDG03 INA_"$30_$CONVERT IT_^1_%STA*_!XDCHK_#TO ASCII_^1*_]_^1_%JMP*_!(XDDGT)_#RETURN_^1*_]_^1*_]_^1*_]_^1_%BSS_"XDUL_#UPPER/LOWER FLAG (+0 EQ U...-0 EQ L)_^1_%BSS_"XDMUL_#MULTIPLY/DON T MUL. FLAG (0 EQ MUL.)_^1_%BSS_"XDCHK_#HOLDS CHECKSUM_^1_%BSS_"XDDTB_#HOLDS DATA TABLE ADR._^1_%BSS_"XDNCH_#HOLDS NR. OF CHARS. TO PROCESS_^1€lXDUMK NUM_"$FF00_#MASK FOR UPPER-HALF CHAR._^1XDLMK NUM_"$00FF_$MASK FOR LOWER-HALF CHAR._^1_%END_"DZ_^__lPDET CSY/ P€1_%NAM DET_*DE-EDIT DRAFT 5.1 12/02/74_^1*_$7-7-75_#CCN1700DET51-001_^1_%ENT_"DETX_^1DETX_!ADC_"0_^1_%EQU_"DET(DETX)_^1*_]_^1* DET IS CALLED TO DELETE FROM A GIVEN DATA ELEMENT CERTAIN_^1* SPECIFIED CHARACTERS. 1 (RETURN ADDRESS+1) HOLDS THE DATA_^1* TABLE ADDRESS FOR THE GIVEN DATA ELEMENT. P2 (RETURN ADDRESS_^1* +2) HOLDS THE ADDRESS OF THE DATA TABLE INDICATING THE_^1* CHARACT€€ER(S) TO BE DELETED_^1*_]_^1_%LDA*_!(DET)_#GET BASE ADR. OF P1 DATA TABLE_^1_%CLR_"Q_#EXTRACT AND SAVE RELEVANT_^1_%RTJ*_!(ZERA)_'INFO. FROM P1 DATA TABLE_^1_%LDA*_!ZEAN_#GET ALPHA/NUMERIC INDICATOR (0 EQ ALPHA_^1_%STA-_!I_#1 EQ NUMERIC.)_^1*_]_^1_%SAZ_"ZE05_#IS CURRENT DATA FIELD NUMERIC_^1_%LDA*_!ZENCH_#YES. GET NR. OF CHARS. (Q-REG. EQ. 0)_^1_%DVI_"=N2_#GET NR. OF WORDS_^1_%ADD*€€_!ZECWA_#COMBINE WITH 1ST-WORD ADR._^1_%SQN_"ZE04_#GO TO ZE04 IF THERE ARE AN ODD NR. OF CHARS._^1*_]_^1ZE01_!LDQ*_!ZEUL_#GET UPPER-/LOWER-CHAR. INDICATOR_^1_%SQN_"ZE02_#IS CURRENT CHAR. IN U-HALF OF WORD_^1_%ADD*_!ZEUI,I_#YES. SUB. 0(ALPHA) OR 1 (NUMERIC) FROM ADR._^1_%JMP*_!ZE03_^1ZE02_!ADD*_!ZELI,I_#NO. ADD 1 (ALPHA) OR 0 (NUMERIC) FROM ADR._^1ZE03_!TCQ_"Q_#REVERSE UPPER/LOWER_^€€1_%STQ*_!ZEUL_#FLAG SETTING_^1ZE04_!STA*_!ZECWA_#SAVE WORD ADR._^1*_]_^1ZE05_!LDA*_!(ZECWA)_#GET NEW CHARACTER_^1_%LDQ*_!ZEUL_#GET UPPER/LOWER FLAG_^1_%SQN_"ZE06_#IS CHAR. IN U-HALF OF WORD_^1_%ARS_"8_#YES. SHIFT IT TO L-HALF_^1ZE06_!AND*_!ZELMK_#ISOLATE AND_^1_%STA*_!ZECHR_#SAVE CHAR._^1*_]_^1_%CLR_"A_-INDICATE THAT DELETE-CHARACTER_^1_%STA*_!ZELET_(ROUTINE HAS NOT BEEN ENTERED_^1€€_%RTJ*_!ZEMAT_#SHOULD CURRENT CHAR. BE DELETED FROM FIELD_^1_%RTJ*_!ZELET_#YES. DELETE THE CHAR._^1*_]_^1_%LDA*_!ZENCH_#GET NR. OF CHARS. REMAINING_^1_%INA_"-1_#DECR. NR. BY 1_^1_%SAZ_"ZE07_#HAVE ALL CHARS. IN FIELD BEEN TESTED_^1_%STA*_!ZENCH_#NO. SAVE DECREMENTED NR. OF CHARS._^1*_]_^1_%LDA*_!ZELET_(HAS A CHARACTER_^1_%SAZ_"ZE06A_)JUST BEEN DELETED_^1_%JMP*_!ZE05_)YES. DO NOT INC€€REMENT CHAR. SLOT_^1ZE06A LDA*_!ZECWA_"GET CURRENT WORD ADR._^1_%JMP*_!ZE01_#PROCESS NEXT CHAR_^1*_]_^1ZE07_!RAO*_!DET_#RETURN TO_^1_%RAO*_!DET_#NEXT DRAFT_^1_%JMP*_!(DET)_#STATEMENT_^1*_]_^1*_]_^1*_]_^1ZEMAT 0_$0_#ENTRANCE_^1*_]_^1* ZEMAT IS CALLED BY DET TO DETERMINE WHETHER THE GIVEN CHARACTER_^1* SHOULD BE DELETED FROM THE CURRENT DATA FIELD. THIS ROUTINE_^1* COMPARES THE GI€€VEN CHARACTER WITH THE "DELETE" CHARACTERS OF_^1* THE CURRENT P2 DATA ELEMENT._^1*_]_^1_%LDA*_!DET_#GET DRAFT RETURN_^1_%INA_"1_#ADDRESS+2_^1_%STA*_!ZEDTB_#GET BASE ADDRESS_^1_%LDA*_!(ZEDTB)_#OF P2 DATA TABLE_^1_%ENQ_"1_#INDEX FOR STORING INFO_^1_%RTJ*_!ZEDTP_#EXTRACT AND SAVE INFO. FROM DATA TABLE_^1*_]_^1_%LDQ*_!ZEUL+1_#GET UPPER/LOWER FLAG FOR "DELETE" CHARS._^1ZM01_!LDA*_!(ZECW€€A+1)_#GET "DELETE" CHAR._^1_%SQN_"ZM02_#IS CHAR. IN U-HALF OF WORD_^1_%ARS_"8_#YES. SHIFT IT TO L-HALF_^1ZM02_!AND*_!ZELMK_#ISOLATE CHAR._^1_%SUB*_!ZECHR_#SHOULD CURRENT CHARACTER FROM_^1_%SAZ_"ZM05_#P1 DATA FIELD BE DELETED_^1_%LDA*_!ZENCH+1_#NO, GET NR. OF REMAINING P2 CHARS._^1_%INA_"-1_#HAS CURRENT CHAR. FROM P1 DATA FIELD BEEN_^1_%SAZ_"ZM04_#COMPARED TO ALL P2 "DELETE" CHARS._€€^1*_]_^1_%STA*_!ZENCH+1_#NO. SAVE NR OF REMAINING P2 CHARS._^1_%SQZ_"ZM03_#IS CURRENT P2 CHAR. FROM LOWER OF WORD_^1_%RAO*_!ZECWA+1_#YES. INCR P2 WORD ADR._^1ZM03_!TCQ_"Q_#REVERSE UPPER/LOWER FLAG_^1_%JMP*_!ZM01_#EXAMINE NEXT P2 CHAR._^1*_]_^1ZM04_!RAO*_!ZEMAT_#SKIP DELETE CHARACTER PROCESSING_^1ZM05_!JMP*_!(ZEMAT)_#RETURN_^1*_]_^1*_]_^1*_]_^1ZERA_!ADC_"ZEDTP_^1_%BSS_"ZEUL(2)_#UPPE€€R/LOWER FLAG (+0 EQ UPPER)_^1_%BSS_"ZECWA(2)_#CURRENT WORD ADR._^1_%BSS_"ZENCH(2)_#NR. OF CHARS._^1_%BSS_"ZEDTB_#ADR. OF DATA TABLE WORD_^1_%BSS_"ZEAN(2)_#ALPHA/NUMERIC FLAG (0 EQ ALPHA)_^1ZEUI_!NUM_"0_#UPPER--ALPHA ADR. MODIFIER_^1_%NUM_"-1_#UPPER-NUMERIC ADR. MODIFIER_^1ZELI_!NUM_"1_#LOWER--ALPHA ADR. MODIFIER_^1_%NUM_"0_#LOWER--NUMERIC ADR. MODIFIER_^1ZELMK NUM_"$00FF_#LOWER MA€€SK_^1ZEUMK NUM_"$FF00_#UPPER MASK_^1_%BSS_"ZECHR_#CURRENT CHAR._^1_%BSS_"ZELCW_#CURRENT P2 WORD ADR._^1_%BSS_"ZELOW_#LAST/NEXT P2 WORD ADR._^1ZELIN NUM_"1_#ALPHA INCR. TO CURRENT WORD ADR._^1_%NUM_"-1_#NUMERIC INCR. TO CURRENT WORD ADR._^1_%BSS_"ZELNL_#P2 NR. LEFT TO PROCESS_^1_%BSS_"ZELUL_#P2 UPPER/LOWER FLAG_^1ZELCN NUM_"$2020_#ASCII BLANK_^1_%NUM_"$3030_#ASCII ZERO_^1*_]_^1*_€€]_^1*_]_^1ZELET 0_$0_#ENTRANCE_^1*_]_^1* ZELET IS CALLED BY DET TO DELETE THE GIVEN CHARACTER FROM THE_^1* CURRENT P1 DATA FIELD. AFTER DELETING THE CHARACTER, THIS_^1* ROUTINE CONTRACTS THE DATA FIELD AS FOLLOWS0 AN ALPHA FIELD_^1* IS LEFT JUSTIFIED AND BLANK FILLED. A NUMERIC FIELD IS RIGHT_^1* JUSTIFIED AND ZERO FILLED._^1*_]_^1* THE I-REG. EQ 0 FOR AN ALPHA FIELD, 1 FOR A NU€€MERIC FIELD._^1*_]_^1_%LDA*_!ZECWA_#GET ADR. OF_^1_%STA*_!ZELCW_#CURRENT CHAR._^1_%ADD*_!ZELIN,I_#ADD 1 OR -1_^1_%STA*_!ZELOW_#TO ADDRESS_^1_%LDQ*_!ZEUL_)GET UPPER/_^1_%STQ*_!ZELUL_(LOWER FLAG_^1_%LDA*_!ZENCH_#GET NR. OF CHARS._^1_%STA*_!ZELNL_#REMAINING_^1*_]_^1ZL01_!LDA*_!ZELNL_#DECR. NR. OF CHARS._^1_%INA_"-1_#REMAINING_^1_%SAN_"ZL02_#IS THIS THE LAST CHAR. IN THE DATA FIELD_^1_€€%JMP*_!ZL09_#YES. FILL REMAINING SLOT WITH ZERO OR BLANK_^1ZL02_!STA*_!ZELNL_#NO. SAVE NR. FOR NEXT PASS_^1*_]_^1_%LDA-_!I_#GET ALPHA/NUMERIC FLAG_^1_%SQN_"ZL05_#IS UPPER/LOWER FLAG SET TO UPPER_^1_%SAN_"ZL03_#YES. IS ALPHA/NUMERIC FLAG SET TO ALPHA_^1_%LDA*_!(ZELCW)_#YES. GET NEXT CHAR. FROM CURRENT WORD_^1_%JMP*_!ZL04_^1ZL03_!LDA*_!(ZELOW)_#GET NEXT CHAR. FROM LAST WORD_^1ZL04_!R€€TJ*_!ZELRU_#COMBINE WITH CHAR. IN L-HALF OF CURRENT WORD_^1*_]_^1_%CLR_"Q_-SET UPPER/LOWER INDEX TO UPPER_^1_%JMP*_!ZL08_^1*_]_^1ZL05_!SAN_"ZL06_#IS ALPHA/NUMERIC FLAG SET TO ALPHA_^1_%LDA*_!(ZELOW)_#YES. GET NEXT CHAR. FROM NEXT WORD_^1_%JMP*_!ZL07_^1ZL06_!LDA*_!(ZELCW)_#GET NEXT CHAR. FROM CURRENT WORD_^1ZL07_!RTJ*_!ZELRL_#COMBINE WITH CHAR. IN U-HALF OF CURRENT HALF_^1_%ENQ_"2_-€€SET UPPER/LOWER INDEX TO LOWER_^1*_]_^1ZL08_!LDA*_!ZELCW_#GET CURRENT-WORD ADR._^1_%ADD*_!ZEUI,B_'MODIFY ADR. FOR_^1_%STA*_!ZELCW_(FOR NEXT CHAR._^1_%LDA*_!ZELOW_(GET NEXT-/LAST-WORD ADR_^1_%ADD*_!ZEUI,B_'MODIFY ADR. FOR_^1_%STA*_!ZELOW_(NEXT CHAR._^1*_]_^1_%LDQ*_!ZELUL_'REVERSE UPPER_^1*_]_^1_%TCQ_"Q_#LOWER FLG._^1_%STQ*_!ZELUL_#SAVE FOR LATER PROCESSING_^1_%JMP*_!ZL01_#SEE IF ALL€€ CHARS. HAVE BEEN MOVED_^1*_]_^1ZL09_!LDA*_!ZELCN,I_#GET BLANK OR ZERO_^1_%SQN_"ZL10_#IS UPPER/LOWER FLAG SET TO UPPER_^1_%RTJ*_!ZELRU_#YES. PLACE FILL CHAR. IN U-HALF OF WORD_^1_%JMP*_!ZL11_^1ZL10_!RTJ*_!ZELRL_#PLACE FILL CHAR. IN L-HALF OF WORD_^1*_]_^1ZL11_!JMP*_!(ZELET)_#RETURN_^1*_]_^1*_]_^1*_]_^1ZEDTP 0_$0_#ENTRANCE_^1*_]_^1* ZEDTP IS CALLED TO EXTRACT INFORMATION FOUND IN W€€ORDS 1,2, AND_^1* 3 OF THE GIVEN DATA TABLE._^1*_]_^1* A-REG. HOLDS BASE ADR. OF TABLE_^1* Q-REG. EQ 0 FOR P1 DATA TABLE, 1 FOR P2 DATA TABLE_^1*_]_^1_%STA*_!ZEDTB_#SAVE BASE ADR. OF DATA TABLE_^1_%ENA_"$8_#ISOLATE_^1_%AND*_!(ZEDTB)_#BYTE FIELD_^1_%SAZ_"ZP01_#WILL DATA BEGIN IN UPPER-HALF OF WORD_^1_%SET_"A_#NO. SET UPPER/LOWER FLAG TO LOWER_^1ZP01_!STA*_!ZEUL,Q_#SAVE UPPER/LOWER F€€LAG_^1*_]_^1_%ENA_"4_#ISOLATE_^1_%AND*_!(ZEDTB)_#ALPHA/NUMERIC FIELD_^1_%ARS_"2_#SET ALPHA/NUMERIC INDICATOR TO 0 FOR ALPHA,_^1_%STA*_!ZEAN,Q_#OR 1 FOR NUMERIC_^1*_]_^1_%RAO*_!ZEDTB_#INCR. TO WORD 2 OF DATA TABLE_^1_%LDA*_!(ZEDTB)_#GET BASE ADR._^1_%STA*_!ZECWA,Q_#OF DATA_^1*_]_^1_%RAO*_!ZEDTB_#INCR. TO WORD 3 OF DATA TABLE_^1_%LDA*_!(ZEDTB)_#GET NR. OF CHARS. IN CURRENT FIELD_^1_%€€AND_"=N$FFF_#ELIMINATE EXTRANEOUS BITS_^1_%STA*_!ZENCH,Q_#SAVE NR._^1*_]_^1_%JMP*_!(ZEDTP)_#RETURN_^1*_]_^1*_]_^1*_]_^1ZELRU 0_$0_#ENTRANCE_^1*_]_^1* ZELRU IS CALLED TO PLACE THE GIVEN CHARACTER IN THE UPPER HALF_^1* OF THE CURRENT WORD OF THE CURRENT DATA FIELD+_^1*_]_^1* THE CHAR. IS IN LOW-ORDER 8 BITS OF A-REG._^1*_]_^1_%AND*_!ZELMK_#ISOLATE GIVEN CHAR._^1_%ALS_"8_#MOVE CHAR. €€TO UPPER_^1_%TRA_"Q_#HALF OF Q REG._^1_%LDA*_!(ZELCW)_#GET CURRENT 2-CHARACTER WORD_^1_%AND*_!ZELMK_#CLEAR UPPER HALF OF WORD_^1_%EAQ_"A_-PLACE GIVEN CHAR. CCN1700DET51-001_^1_%STA*_!(ZELCW)_#IN UPPER HALF OF WORD_^1*_]_^1_%JMP*_!(ZELRU)_#RETURN_^1*_]_^1*_]_^1*_]_^1ZELRL 0_$0_#ENTRANCE_^1*_]_^1* ZELRL IS CALLED TO PLACE THE GIVEN CHARACTER IN THE UPPER HALF_^1* OF THE CURRENT WOR€€D OF THE CURRENT DATA FIELD._^1*_]_^1* THE CHAR. IS IN HIGH-ORDER 8 BITS OF A-REG._^1*_]_^1_%ARS_"8_#SHIFT CHAR. TO LOWER-HALF OF REG._^1_%AND*_!ZELMK_#ELIMINATE EXTRANEOUS BITS_^1_%TRA_"Q_#PLACE CHAR. IN L-HALF OF Q-REG._^1_%LDA*_!(ZELCW)_#GET CURRENT 2-CHAR. WORD_^1_%AND*_!ZEUMK_#CLEAR LOWER-HALF OF WORD_^1_%EAQ_"A_-PLACE GIVEN CHAR IN LOWER CCN1700DET51-001_^1_%STA*_!(ZELCW)_#HA€TLF OF CURRENT WORD_^1*_]_^1_%JMP*_!(ZELRL)_#RETURN_^1*_]_^1*_]_^1*_]_^1_%END_"DZ_^__TPCALC CSY/ P€1_%NAM CALC_)SUBSCRIPTING DRAFT 5.1 12/02/74_^1_%ENT_"CALC_^1_%EXT_"COMERR_^1**** THIS ROUTINE WAS MODIFIED FOR VER. 4.0 AS FOLLOWS_0C_^1**** PROCESS THREE PARAMETER STATEMENTS_^1**** PROCESS ODD CHARACTER LENGTH_^1**** PRODUCE ERROR MESSAGE IF SUBSCRIPT IS ZERO_^1*** THIS DRAFT SUBROUTINE IS ENTERED WHEN A PAREN-_^1*** THESIS OCCURS IN A PROCEDURE STATEMENT. THE_^1*** REFERENCED€€ DATA NAME AND ARRAY ARE SAVED FOR_^1*** THE PURPOSE OF CALCULATING A NEW DATA ADDRESS._^1CALCX ADC_"0_^1_%EQU_"CALC(CALCX)_^1_%ENA_"0_^1_%STA-_!I_^1_%STA*_!INDX_^1_%LDA*_!CALC_^1_%STA*_!RETNAD_^1GTPAR LDA*_!(CALC)_#GET PARAMETER_^1_%STA*_!SAVDAT_+AND SAVE_^1GT_#RTJ*_!GETDAT_)GET WORD THREE_^1_%STA*_!LENTH_0AND SAVE_^1_%ALS_"15_^1_%STA*_!ODDEVN_^1_%LDA*_!DATW3_#GET WORD 2_^1_%STA€€*_!DATDRS_#AND SAVE_^1_%RAO*_!CALC_-BUMP PARAMETER POINTER_^1_%RAO*_!INDX_2AND PARAMETER NUMBER_^1_%ENA_"0_^1_%STA*_!INFLG_^1_%LDA*_!(CALC)_+GET PARAMETER_^1_%SAN_"1_^1_%JMP*_!CHKPAR_^1_%RAO*_!INFLG_0BUMP INDEX FLAG_^1_%RTJ*_!GETDAT_#NO, GET 3RD AND 2ND WORD_^1_%STA*_!DTLTH2_#FROM DATA TABLE_^1_%ENA_"0_^1_%STA*_!CT_#CLEAR COUNTER_^1_%STA*_!TEMP2_^1_%STQ*_!SAVQ_^1PROCH RTJ*_!CHARPU€€_+GET A CHARACTER_^1_%AND_"=N$F_2MASK OUT ASCII BITS_^1_%STA*_!TEMP1_0SAVE CHAR_^1_%LDA*_!TEMP2_/GET PREVIOUS CHAR._^1_%ALS_"3_#CONVERT_^1_%ADD*_!TEMP2_#DEC._^1_%ADD*_!TEMP2_#NUM_^1_%ADD*_!TEMP1_#TO_^1_%STA*_!TEMP2_#HEX_^1_%LDA*_!DTLTH2_#HAS ALL_^1_%INA_"-1_#CHAR. BEEN_^1_%STA*_!DTLTH2_#PROCESSED_^1_%SAZ_"1_^1_%JMP*_!PROCH_#NO, GET NEXT CHAR._^1_%JMP*_!MULTSR_#YES, GO TO MULTIPLY R€€OUTINE_^1*** THE NEXT SIX LOCATIONS ARE SAVED FOR TWO THREE_^1*** WORD DATA TABLES TO BE USED BY INDEXED PARAMETERS_^1TEM_"ADC_"0_2WORD 1_^1SAV1_!ADC_"0_1WORD 2_^1LNTH1 ADC_"0_0WORD 3_^1T2_#ADC_"0_!WORD1_^1SAV2_!ADC_"0_2WORD 2_^1LNTH2 ADC_"0_0WORD 3_^1DAT3_!ADC_"0_^1SAV3_!ADC_"0_^1LNTH3 ADC_"0_^1RETNAD ADC_"0_^1INDX_!ADC_"0_^1INFLG ADC_"0_^1LENTH ADC_"0_^1DATDRS ADC_"0_^1SAVDA€€T ADC_"0_^1GETDAT ADC_"0_^1_%STA*_!DATW1_5SAVE ORIG PARAMETER_^1_%INA_"1_#WORD 2_^1_%STA*_!DATW2_#AND SAVE_^1_%LDA*_!(DATW2)_#GET_^1_%STA*_!DATW3_#WORD 3_^1_%RAO*_!DATW2_#AND_^1_%LDA*_!(DATW2)_#MASK UP PER 4_^1_%AND_"=N$0FFF_#BITS_^1_%JMP*_!(GETDAT)_^1TEMP1 ADC_"0_^1TEMP2 ADC_"0_^1DATW1 ADC_"0_^1DATW2 ADC_"0_^1DATW3 ADC_"0_^1CALC1 ADC_"CALC_#ALLOW TO REFERENCE CALC_^1ODDEVN N€€UM_"0_^1HFFF7 NUM_"$FFF7_^1SAVQ_!ADC_"0_^1CT_#ADC_"0_^1DTLTH2 ADC_"0_^1CHARPU ADC_"0_^1_%ENA_"0_^1_%LDQ*_!CT_3CHARACTER COUNT_^1_%LRS_"1_^1_%LDQ*_!(DATW3),Q_,GET A CHARACTER_^1_%SAZ_"1_5IS CHAR. IN UPPER 8 BITS_^1_%QLS_"8_5NO_^1_%QRS_"8_5YES_^1_%TRQ_"A_^1_%RAO*_!CT_3BUMP CHAR. COUNT_^1_%JMP*_!(CHARPU)_^1MULTSR LDA*_!TEMP2_+MULTIPLY DATA LENGTH_^1_%SAN_"1_#IS ARRAY_^1_%JMP*_!ERROR_€€#A ZERO, YES_^1_%INA_"-1_#NO_^1_%MUI*_!LENTH_^1_%INA_"1_#DIVIDE CALCULATED_^1_%ARS_"1_#ADDRESS BY ONE AND_^1_%ADD*_!DATDRS_#ADD ORIGINAL DATA ADDRESS_^1_%LDQ*_!ODDEVN_#IS DATA AN_^1_%STA-_!I_"SAVE NEW ADDR._^1_%SQM_"2_"ODD LENGTH FIELD_!CCN1700CAL40-002_^1_%LDA*_!(SAVDAT)_!EVEN LENGTH FIELD_!CCN1700CAL40-002_^1_%JMP*_!SETBYT_!CHECK FOR INDEXING_!CCN1700CAL40-002_^1_%LDA*_!TEMP2_#GE€€T ARRAY CHAR. LENGTH_^1_%ALS_"15_#TO CHECK FOR EVEN OF ODD_^1_%LDQ*_!(SAVDAT)_#GET DATA_^1_%QLS_"12_#BYTE BIT_^1_%SAM_"EVNARY_"IS ARRAY EVEN, NO_^1_%SQM_"SETBTO_!YES, DATA BEGINS 0-7_^1_%LDA-_!I_#ARRAY IS ODD, DATA 8-15_^1_%INA_"-1_#DECREMENT CALC. ADDRESS_^1_%STA-_!I_#AND SAVE_^1SETBT1 LDA*_!(SAVDAT)_#SET BYTE OF CALC._^1_%AND*_!HFFF7_#DATA TABLE TO BEGIN_^1_%EOR_"=N$0008_#IN 0-7_€€^1_%JMP*_!SETBYT_^1EVNARY SQP_"SETBTO ODD ARRAY, DATA IN 8-15_!CCN1700CAL40-001_^1_%JMP*_!SETBT1_!ARRAY IS ODD,DATA IN 0-7_^1SETBTO LDA*_!(SAVDAT)_#SET BYTE OF CALC. DATA_^1_%AND*_!HFFF7_#TABLE TO REFLECT DATA_^1SETBYT STA*_!SAVDAT BEGIN 8-15_!CCN1700CAL40-001_^1IDXCHK LDA-_!I_^1CHKPAR RAO*_!(CALC1)_!BUMP PT._^1_%LDQ*_!INFLG_$ANY INDEXING_^1_%SQN_"YESIND_!YES_^1_%LDQ*_!INDX_!NO,€€ WHICH PARAM._^1_%INQ_"-3 IS_^1_%SQN_"1_"THIS LAST PARAM._^1_%JMP*_!EXIT-2_!YES_^1GET1_!JMP_"GTPAR_!NO,GET NEXT PARAM._^1YESIND LDQ*_!INDX_"FIND PARAM._^1_%INQ_"-1_!IS THIS P2_^1_%SQZ_"1_$YES_^1_%JMP*_!CHKFR3_"NO_^1_%STA*_!SAV1_6NO_^1_%LDA*_!SAVDAT GET ORIG._"CCN1700CAL40-001_^1_%STA*_!TEM_6WORD 1_^1_%LDA*_!LENTH_/STORE LENGTH_^1_%STA*_!LNTH1_^1_%LDA_"=XTEM_!STORE TEMP.DATA TABLE€€ ADDR._^1_%LDQ*_!(CALC1)_!INTO_^1_%STA-_!6,Q_"P1 OF PROCEDURE VERB_^1_%JMP*_!GET1_^1CHKFR3 INQ_"-1_"IS THIS P4_^1_%SQZ_"1_!YES_^1_%JMP*_!PARAM3_!NO, P6_^1_%LDA-_!I_!GET CALC. ADDR._^1_%STA*_!SAV2 AND STORE IN TEMP.TBL._^1_%LDA*_!SAVDAT_!GET ORIG._"CCN1700CAL40-001_^1_%STA*_!LNTH1+1_3IN WORD 3 AND STORE_^1_%LDA*_!LENTH_1PARAM._^1_%STA*_!LNTH2_^1_%LDA_"=XT2_!STORE TEMP.TBL. ADDR._^1€€_%LDQ*_!(CALC1)_!INTO_^1_%STA-_!5,Q P2 OF PROC. VERB_^1_%JMP*_!GET1_^1PARAM3 LDA-_!I GET CALC ADDR._^1_%STA*_!SAV3 AND STORE INTEMP. TBL._^1_%LDA*_!SAVDAT_!GET WORD ONE_"CCN1700CAL40-001_^1_%STA*_!DAT3_#AND STORE_^1_%LDA*_!LENTH_#GET WORD 3_^1_%STA*_!LNTH3_#AND STORE_^1_%LDA_"=XDAT3_^1_%LDQ*_!(CALC1)_^1_%STA-_!4,Q_^1_%LDQ*_!(CALC1)_^1_%STQ*_!EXIT+1_^1EXIT_!JMP+_!0000_^1ZERSUB AL€ŠF_"7,ZERO SUBSCRIPT_^1ERROR LDQ_"RETNAD_^1_%INQ_"-2_^1_%LDA_"=XZERSUB_^1_%RAO*_!(CALC1)_^1_%RTJ_"COMERR_^1_%JMP*_!GET1-4_^1_%END_"DZ_^__ŠPTTYOUT CSY/ P€1_%NAM TTYOUT_'COMMON ERROR TTY OUT DRAFT 5.1 12/02/74_^1_%ENT_"COMERR_^1** THIS ROUTINE IS USED BY OTHER SUBROUTINES_^1** TO TYPE OUT AN ERROR MESSAGE_^1** UPON ENTRY IT EXPECTS THE MESSAGE_^1** ADDRESS IN THE A-REG. AND THE ERRONEOUS_^1** PROCEDURE STATEMENT ADDRESS IN THE Q-REG._^1** IT TYPES THE ERROR MESSAGE FOLLOWED BY_^1** THE RELATIVE ADDRESS OF ERROONEOUS PROC._^1** STATE€€MENT._^1COMERX ADC_"0_^1_%EQU_"COMERR(COMERX)_^1_%STA*_!MESADR_#ADDRESS OF MESSAGE_^1_%LDA-_!$F7_#MAKE ERRONEOUS_^1_%INA_"1_#PROCEDURE STATEMENT_^1_%STA*_!SUBA_#A_^1_%TRQ_"A_#RELATIVE_^1_%SUB*_!SUBA_#ADDRESS_^1_%RTJ*_!BINHEX_#CONVERT TO ASCII_^1_%STA*_!PROC2_#STORE CONVERTED_^1_%STQ*_!PROC3_#ADDRESS IN REQUEST_^1BEGIN RTJ-_!($F4)_#BLOCK AND EXECUTE_^1_%NUM_"$C00_#FORMAT WRITE_^1_%€€NUM_"0_#COMP._^1THRD_!NUM_"0_#THREAD_^1_%NUM_"3_#LUG. UNIT_^1_%NUM_"7_#SIZE OF MESSAGE_^1MESADR NUM_"0_#MESSAGE ADDRESS_^1_%LDA*_!THRD_#IS_^1_%SAZ_"1_#REQUEST_^1_%JMP*_!*-2_#COMPLETED NO_^1_%RTJ-_!($F4)_#YES_^1_%NUM_"$400_#WRITE REQUEST_^1_%NUM_"0_^1THD_"NUM_"0_^1_%NUM_"3_^1_%NUM_"3_^1_%ADC_"PROC1_^1_%LDA*_!THD_#IS REQUEST_^1_%SAZ_"1_#COMPLETED_^1_%JMP*_!*-2_#NO_^1_%JMP*_!(COMERR)_€€#YES_^1PROC1 NUM_"$2050_^1PROC2 NUM_"0_^1PROC3 NUM_"0_^1SUBA_!NUM_"0_^1*** THIS ROUTINE CONVERTS HEXADECIMAL_^1*** NUMBERS TO DECIMAL ASCII. UPON ENTRY_^1*** IT EXPECTS A-REG. TO CONTAIN NUMBER_^1*** TO BE CONVERTED. IT EXITS WITH HI-ORD_^1*** TWO CHARACTERS IN A-REG., LOW ORD._^1*** TWO CHAR. IN Q-REG._^1HEXASC ADC_"0_^1_%ENQ_"-2_^1_%STQ-_!$FF_^1FACTOR ENQ_"0_^1_%DVI_"=N10_#D€€IVIDE BY DECIMAL BASE_^1_%ADQ_"=N$30_#CONSTANT FOR ASCII CODES_^1_%STQ*_!ASC+2,I_#STORE LOWER HALF OF WORD_^1_%SAZ_"BLKCHR_#SKIP IF QUOTIENT WAS ZERO_^1_%ENQ_"0_^1_%DVI_"=N10_#DIVIDE BY BASE AGAIN_^1_%ADQ_"=N$30_#ASCII CONSTANT_^1_%QLS_"8_#MOVE TO UPPER HALF OF WORD_^1HIORDR ADQ*_!ASC+2,I_#ADD TO LOWER HALF_^1_%STQ*_!ASC+2,I_^1_%LDQ-_!I_#GET INDEX_^1_%SQZ_"DONE_#SKIP IF INDEX IS ZE€€RO_^1_%INQ_"1_#BUMP INDEX_^1_%STQ-_!I_^1_%SAZ_"BLKWRD_#SKIP IF QUOTIENT ZERO_^1_%JMP*_!FACTOR_^1BLKCHR LDQ_"=N$2000_#ASCII BLANK IN HI-ORD_^1_%JMP*_!HIORDR_^1BLKWRD LDQ_"=N$2020_^1_%STQ*_!ASC+2,I_^1_%LDQ-_!I_^1_%SQZ_"DONE_#SKIP IF INDEX ZERO_^1_%INQ_"1_^1_%STQ-_!I_^1_%JMP*_!BLKWRD_#NEXT WORD 2 BLANKS_^1DONE_!LDA*_!ASC+1_$PICK UP CONV. DATA_!CCN1700TTY41-001_^1_%LDQ*_!ASC_#PUT LOW O€€RD IN Q_^1_%JMP*_!(HEXASC)_^1_%BSS_"ASC(4)_^1*** CONVERTS BINARY TO HEX. ASCII. UPON ENTRY A-REG._^1*** MUST CONTAIN NUM. TO BE CONV. EXITS WITH HI-ORD 2_^1*** CHAR. IN A-REG, 2 LOW ORD IN Q-REG._^1BINHEX ADC_"0_^1_%STA*_!ASC+3_#SAVE BINARY NUM_^1_%ENA_"-2_^1_%STA*_!COUNT_^1BACK1 RTJ*_!GETHEX_#PICK UP HEX. DIGIT_^1_%ALS_"8_#STORE CHAR. IN LEFT HALF OF_^1_%LDQ*_!COUNT_#SAVE WORD_^1€€_%STA*_!ASC+3,Q_^1_%RTJ*_!GETHEX_#PICK UP NEXT HEX. DIGIT_^1_%LDQ*_!COUNT_#STORE CHAR. IN RIGHT HALF_^1_%ADD*_!ASC+3,Q_^1_%STA*_!ASC+3,Q_^1_%RAO*_!COUNT_^1_%LDA*_!COUNT_^1_%SAZ_"1_^1_%JMP*_!BACK1_^1_%LDA*_!ASC+1_#PUT 2 LEFT DIGITS IN A-REG._^1_%LDQ*_!ASC+2_#PUT 2 RIGHT DIGITS IN Q_^1_%JMP*_!(BINHEX)_#RETURN TO CALLER_^1_%EQU_"COUNT(ASC)_^1GETHEX ADC_"0_^1_%LDA*_!ASC+3_#GET BINARY N€ΨUM_^1_%CLR_"Q_^1_%LLS_"4_#PUT A CHAR. IN Q_^1_%STA*_!ASC+3_#SAVE REMAIN. CHAR._^1_%INQ_"-10_$IS NUMBER 0-9_^1_%SQM_"1_#YES_^1_%INQ_"7_#NO, CONVERT_^1_%INQ_"$3A_#TO ASCII_^1_%TRQ_"A_^1_%JMP*_!(GETHEX)_^1_%END_"DZ_^__ΨPIFPOS CSY/ P€1_%NAM IFPOS_(IF POS/NEG DRAFT 5.1 12/02/74_^1_%ENT_"IFPOSX_^1_%ENT_"IFNEGX_^1IFNEGX NUM_"0_^1_%EQU_"IFNEG(IFNEGX)_^1_%LDQ*_!IFNEG_#GET RETURN ADR._^1_%RTJ*_!RTNE_#IS DATA ELEMENT NEG._^1_%SAM_"TG2_#YES. GO TO P2 ADR._^1_%JMP-_!2,Q_#NO. NORMAL RETURN_^1*_]_^1IFPOSX NUM_"0_^1_%EQU_"IFPOS(IFPOSX)_^1_%LDQ*_!IFPOS_#GET RETURN ADR._^1_%RTJ*_!RTNE_#IS DATA ELEMENT POS._^1_%SAP_"TG2_#YES€€. GO TO P2 ADR._^1_%JMP-_!2,Q_#NO. NORMAL RETURN_^1*_]_^1TG2_"INQ_"1_#INCR. RETURN ADR._^1_%LDQ*_!(ZRO),Q_#GET P2 ADR._^1_%JMP*_!(ZRO),Q_"GO TO THAT ADR._^1*_]_^1RTNE_!NUM_"0_#EXTRACT DATA SIGN FROM DATA TABLE_^1_%LDA*_!(ZRO),Q_#GET BASE ADR. OF DATA TABLE_^1_%INA_"2_#INCR. TO WD HOLDING SIGN BIT AND_^1_%STA-_!I_#DATA LENGTH_^1_%LDA*_!(ZRO),I_#GET SIGN OF DATA_^1_%JMP*_!(RTNE)_#EXI€&T_^1*_]_^1ZRO_"NUM_"0_^1_%END_"DZ_^__&PEJECT CSY/ P€1_%NAM EJECT_(915/955 EJECT DRAFT 5.1 12/02/74_^1_%ENT_"EJECTP,EJECTX_^1_%ENT_"EJTPSX,EJTSSX_^1_%EXT_"EOFUSR_^1_%DAT_"AD5515(1),EJ5515(1),SERSIX(1),DUMMY(2)_^1EJECTP NUM_"0_#ENTRY FOR PRIMARY SORT_^1_%CLR_"A_#A=0 IS PRIMARY SORT_^1_%STA*_!EJECTS_#SAVE INDICATOR_^1_%LDA+_!EJ5515_^1_%STA*_!EP915+1_^1_%LDQ*_!(EJECTP)_^1_%RAO*_!EJECTP_^1_%LDA-_!3,Q_#GET DEVICE TYPE_^1_%AND*_!CON7F_^1_€€%TRA_"Q_^1_%CLR_"A_%CLEAR INDIC. IN CASE PREVIOUSLY SET_^1_%STA_"EOFUSR_!READ ROUTINE WILL SET IF REQD_^1_%LDA*_!EJECTS_#GET SORT INDICATOR_^1_%INQ_"-91_#915?_^1_%SQZ_"EP915_#YES_^1_%INQ_"-4_#955?_^1_%SQZ_"EP915_)YES - SKIP_^1RETURN JMP*_!(EJECTP)_%EXIT_^1EP915 RTJ+_!EJ5515_(CHANGED TO CONTENTS OF EJ5515_^1_%JMP*_!RETURN_^1CON7F NUM_"$7F_^1EJECTX NUM_"0_^1_%EQU_"EJECTS(EJECTX)_^1€r_%LDA*_!EJECTS_#SET COMMON EXIT_^1_%STA*_!EJECTP_^1_%CLR_"A_^1_%SET_"A_#NEGATIVE MEANS SECONDARY_^1_%JMP*_!EJECTP+2_^1EJTPSX NUM_"0_^1_%EQU_"EJTPSN(EJTPSX)_^1_%LDA*_!EJTPSN_^1_%STA*_!EJECTP_,COMMON EXIT_^1_%ENA_"$1_1SET PRINT_^1_%JMP*_!EJECTP+2_^1EJTSSX NUM_"0_^1_%EQU_"EJTSSN(EJTSSX)_^1_%LDA*_!EJTSSN_^1_%STA*_!EJECTP_^1_%LDA_"=N$8001_^1_%JMP*_!EJECTP+2_^1_%END_"DZ_^__rPCOUNT CSY/ P€1_%NAM COUNT_(915 COUNTER DRAFT 5.1 12/02/74_^1* * * * * * * * * * * * * * * * *_^1*_N*_^1*_!COUNT EITHER CLEARS COUNTER 1,2,OR 3_'*_^1*_!OR INCREMENTS COUNTERS BY 1._/*_^1*_%P1- WHICH COUNTER_5*_^1*_%P2- CLEAR OR ADD 1_4*_^1*_%P3- LOGICAL UNIT_6*_^1*_N*_^1* DRAFT CALLING SEQUENCE_5*_6C_^1*_O*_^1*_#COUNT DN-1,DN-2,FILE-NAME_/*_^1*_N*_^1* DATA-NAMES (1),(2) M€€UST BE TWO_^1*_#DIGIT IN LENGTH ONLY....._0*_^1*_N*_^1* * * * * * * * * * * * * * * * *_^1_%ENT_"COUNTX_^1COUNTX ADC_"0_^1_%EQU_"COUNT(COUNTX)_^1_%LDA*_!(COUNT)_^1_%STA*_!SAVE_#GET BASE ADDR OF DATA TABLE FOR COUNTER_^1_%LDQ*_!(SAVE)_#GET 1ST WORD OF DATA TABLE_^1_%QLS_"12_#PUT BYTE POSITION BIT IN UPPER A REGISTER_^1_%RAO*_!SAVE_^1_%LDA*_!(SAVE)_#GET 2ND WORD OF DA€€TA TABLE_^1_%STA*_!SAVE1_^1_%LDA*_!(SAVE1)_^1_%SQM_"NXTUP_$SEE IF CHARACTER IS IN NEXT UPPER HALF_^1_%JMP*_!E2_^1NXTUP RAO*_!SAVE1_"GET THE ADDRESS OF NEXT WORD_^1_%LDA*_!(SAVE1)_^1_%ARS_"8_^1E2_#AND_"=N$000F_^1_%SAZ_"E1_#TEST NO. FOR RANGE OF 1,2,OR 3_^1_%INA_"-4_^1_%SAM_"OK_^1E1_#LDA*_!COUNT_#SET RETURN ADDRESS, THEN EXIT_^1_%INA_"3_,WITHOUT HONORING REQUEST..._^1_%STA*_!COUNT_^€€1_%JMP*_!(COUNT)_^1OK_#INA_"4_#RESTORE CHARACTER_^1_%STA*_!HOLD_#SAVE IT_^1_%INA_"-3_^1_%SAN_"2_^1_%ENA_"4_#IF THE COUNTER IS (3), CHANGE TO A (4) TO SET_^1_%STA*_!HOLD_!THE PROPER BITS WHEN STORED IN PARAMETER STRING///_^1_%RAO*_!COUNT_^1_%LDA*_!(COUNT)_^1_%STA*_!SAVE_^1_%LDQ*_!(SAVE)_#GET DATA WORD CONTAINING UP/LOWER FLAG_^1_%QLS_"12_(SHIFT BIT TO UPPER Q REGISTER_^1_%RAO*_!SAVE€€_^1_%LDA*_!(SAVE)_#PICK UP ADDRESS OF DATA_^1_%STA*_!SAVE1_^1_%LDA*_!(SAVE1)_"NOW LOAD DATA INDICATING CLEAR OR ADD FUNCTION_^1_%SQM_"NXTUPR_"SEE IF CHARACTER IS IN NEXT WORD_^1_%JMP*_!E3_#NO.IT IS IN LOWER HALF OF THE ACTUAL WORD_^1NXTUPR RAO*_!SAVE1_^1_%LDA*_!(SAVE1)_^1_%ARS_"8_^1E3_#AND_"=N$000F_^1_%INA_"-1_^1_%LDQ*_!HOLD_#GET COUNTER NO. AGAIN_^1_%QLS_"1_^1_%SAP_"BUMP_#SET PROP€€ER BITS FOR CLEAR OR ADD FUNCTION_^1_%QLS_"3_^1BUMP_!STQ*_!P6_#STORE IN PARAMETER STRING_^1_%RAO*_!COUNT_^1_%LDQ*_!(COUNT)_#GO GET LOGICAL UNIT_^1_%LDA_"3,Q_^1_%AND_"=N$FF00_^1_%SAP_"2_^1_%EOR_"=N$8_^1_%ALS_"8_^1_%STA*_!P4_^1_%STA*_!D4_#STORE LU IN STRING_^1_%STA*_!S2_#STORE LU IN STRING_^1STATUS RTJ-_!($F4)_#GET CURRENT STATUS OF 915 READER_^1_%NUM_"$0600_^1S2_#NUM_"0_^1_%NUM_"0_^€€1_%SAP_"NTBUSY_#IF POSITIVE, THEN NOT BUSY, GO EXECUTE REQUEST_^1_%RTJ-_!($F4)_^1_%NUM_"$0400_#BUSY, SO EXECUTE A DUMMY PRE-READ REQUEST_^1_%NUM_"0_#IN ORDER TO GET DRIVER TO UPDATE BUSY STATUS_^1_%NUM_"0_^1D4_#NUM_"0_^1_%NUM_"0_^1D6_#ADC_"D6_^1_%JMP*_!STATUS_#NOW, GO TO GET STATUS AGAIN_^1NTBUSY RTJ-_!($F4)_^1_%NUM_"$0400_#ISSUE CLEAR COUNTER OR ADD TO COUNTER REQUEST_^1_%NUM_"0_^€ή1_%NUM_"0_^1P4_#NUM_"0_^1_%NUM_"$0100_^1P6_#NUM_"0_^1_%RAO*_!COUNT_#BUMP RETURN ADDRESS TO POINT PAST LAST_^1_%JMP*_!(COUNT)_"PARAMETER IN STRING, THEN EXIT..._^1SAVE_!NUM_"0_^1SAVE1 NUM_"0_^1HOLD_!NUM_"0_^1_%END_"DZ_^__ήPIFNU CSY/ P€1_%NAM IFNU_)IF NUM/REJ DRAFT 5.1 12/02/74_^1_%ENT_"IFNUX_^1_%ENT_"IFREJ_^1IFNUX ADC_"0_^1_%EQU_"IFNU(IFNUX)_^1_%LDA_"=XNRTST_^1_%STA*_!IF033+1_^1_%LDA_"=XIF06_^1_%STA*_!IF044+1_^1*_]_^1REJIF LDA*_!(IFNU)_"SAVE ADR. OF_^1_%STA*_!WRD1_#DATA TABLE WORD ONE_^1_%ENA_"$8_#ISOLATE BYTE FIELD OF_^1_%AND*_!(WRD1)_#DATA TABLE WORD ONE_^1_%SAZ_"IF01-*-1_#WILL DATA BEGIN IN UPPER-HALF OF W€€ORD_^1_%SET_"A_#NO. SET U/L FLAG TO LOWER_^1IF01_!TRA_"Q_#SAVE U/L FLAG. (+0 EQ UPPER - -0 EQ LOWER)_^1*_]_^1_%RAO*_!WRD1_#GET ADR. FOR DATA TABLE WORD TWO_^1_%LDA*_!(WRD1)_#GET BASE ADR._^1_%STA*_!IFCA_"FOR DATA_^1*_]_^1_%RAO*_!WRD1_#GET ADR. FOR DATA TABLE WORD THREE_^1_%LDA*_!(WRD1)_#ISOLATE_^1_%AND_"=N$FFF_#DATA LENGTH_^1_%STA*_!NCH_#STR. AS NR. OF CHARS. TO PROCESS_^1*_]_^1IF0€€2_!LDA*_!(IFCA)_#GET CURRENT CHAR._^1_%SQN_"IF03-*-1_#IS CURRENT CHAR. IN UPPER HALF OF WORD_^1_%ARS_"8_#YES. SHIFT CHAR. TO LOWER HALF OF WORD_^1IF03_!AND_"=N$FF_#ISOLATE CHAR_^1IF033 RTJ+_!NRTST_^1*_]_^1_%LDA*_!NCH_#GET CHARACTER COUNT_^1_%INA_"-1_#DECREMENT COUNT BY 1_^1_%SAN_"IF04-*-1_#HAVE ALL CHARS. BEEN PROCESSED_^1IF044 JMP+_!IF06_^1*_]_^1IF04_!STA*_!NCH_#NO. SAVE CHAR. C€€OUNT FOR NEXT PASS_^1_%SQZ_"IF05-*-1_#WAS THIS LAST CHAR. FROM LOWER HALF OF WORD_^1_%RAO*_!IFCA_#YES. INCR. WORD ADR._^1IF05_!TCQ_"Q_#REVERSE U/L FLAG SETTING_^1_%JMP*_!IF02_#PROCESS NEXT CHAR._^1*_]_^1IF06_!RAO*_!IFNU_#INCR. RETURN ADR. BY 1_^1_%LDQ*_!(IFNU)_#GET P2 ADDRESS CONTAINED THEREIN_^1_%STQ*_!WRD1_#TRANSFER CONTROL_^1_%JMP*_!(WRD1)_#TO THAT ADDRESS_^1*_]_^1IFREJX ADC_"0_€€^1_%EQU_"IFREJ(IFREJX)_^1_%LDA*_!IFREJ_^1_%STA*_!IFNU_^1_%LDA_"=XRJTST_^1_%STA*_!IF033+1_^1_%LDA_"=XNR02_^1_%STA*_!IF044+1_^1_%JMP*_!REJIF_^1*_]_^1*_]_^1RJTST ADC_"0_^1_%INA_"-$40_"CHECK FOR REJECT_^1_%SAN_"1_^1_%JMP*_!IF06_"IT IS REJECT.SKIP TO THE NEW ADDRESS_^1_%JMP*_!(RJTST)_!NORMAL RETURN_^1*_]_^1* NRTST IS CALLED BY IFNU TO DETERMINE IF CURRENT CHAR. IS A NR._^1* A-REG. HOLD€€S THE CHARACTER_^1*_]_^1NRTST 0_$0_#ENTRANCE_^1_%INA_"-$30_#CONVERT NR. FROM ASCII_^1_%SAP_"NR01-*-1_#IS CHAR. GTEQ+0_^1_%JMP*_!NR02_#NO. CHARACTER IS NOT NUMERIC_^1NR01_!INA_"-10_#IS CHARACTER_^1_%SAP_"NR02-*-1_#LT 10_^1_%JMP*_!(NRTST)_#YES. RETURN_^1*_]_^1NR02_!RAO*_!IFNU_#INCREMENT RETURN ADDRESS_^1_%RAO*_!IFNU_#TO THAT OF NEXT DRAFT STATEMENT_^1_%JMP*_!(IFNU)_#TRANSFER CONTROL€ΐ TO THAT POINT_^1*_]_^1*_]_^1_%BSS_"WRD1_#HOLDS ADR. OF DATA TABLE (WORD 1,2, OR 3)_^1_%BSS_"NCH_#NR. OF CHARS. LEFT TO PROCESS_^1_%BSS_"IFCA_#HOLDS ADR. OF CURRENT CHAR._^1*_]_^1_%END_"DZ_^__ΐPMULPLY CSY/ P€1_%NAM MULPLY_'MULTIPLY DRAFT 5.1 12/02/74_^1_%ENT_"MULTX_^1_%EXT_"COMERR_^1* THIS IS A MULTIPLYING ROUTINE OF TWO NUMERIC FIELDS (DATA-NAME-1_^1* BY DATA-NAME-2 AND STORES THE RESULT IN PROPER LOCATIONS IN_^1* DATA-NAME-3 WITH SIGN AT PROPER LOCATION_^1*******************************************************************_^1MULTX ADC_"0_^1_%EQU_"MULT(MULTX)_^1_%LDQ*_!(MULT)_$GET T€€HE DATA TABLE ADDRESS OF FIRST PARAMETER_^1_%LDA-_!1,Q_(GET ADDRESS OF ARRAY NUMBER ONE_^1_%STA*_!PARAM_%SAVE IT_^1_%LDA-_!2,Q_(GET THE LENGTH_^1_%AND*_!FFF_(ISOLATE LENGTH BITS_^1_%STA*_!PARAM+1_#SAVE IT_^1_%LDA-_!2,Q_^1_%AND*_!H7000_%ISOLATE FRACTIONAL LENGTH_^1_%ALS_"4_^1_%STA*_!FRAC12_$SAVE IT_^1_%LDA-_!2,Q_^1_%AND*_!HIBIT_^1_%STA*_!SIGN01_^1THRU01 RTJ+_!CHBYTE_$FIND THE BYTE O€€F LAST CHARACTER_^1_%STA*_!BYTEA_%SAVE IT_^1_%RAO*_!MULT_^1_%LDQ*_!(MULT)_$GET DATA TABLE ADDRESS OF SECOND PARAMETER_^1_%LDA-_!1,Q_(GET ADDRESS OF ARRAY NUMBER TWO_^1_%STA*_!PARAM+2_#SAVE IT_^1_%LDA-_!2,Q_(GET THE LENGTH_^1_%AND*_!FFF_(ISOLATE LENGTH BITS_^1_%STA*_!PARAM+3_^1_%LDA-_!2,Q_^1_%AND*_!H7000_%ISOLATE FRACTIONAL LENGTH_^1_%ALS_"4_^1_%ADD*_!FRAC12_$COMBINE WITH OTHER FRAC€€TIONAL LENGTH_^1_%STA*_!FRAC12_$SAVE TOTAL_^1_%LDA-_!2,Q_^1_%AND*_!HIBIT_^1_%STA*_!SIGN02_^1_%RTJ*_!(THRU01+1)_^1_%STA*_!BYTEB_^1_%RAO*_!MULT_^1_%LDQ*_!(MULT)_$GET ADDRESS OF DATA TABLE NUMBER THREE_^1_%LDA-_!1,Q_(GET ADDRESS OF ARRAY NUMBER THREE_^1_%STA*_!PARAM+4_#SAVE IT_^1_%LDA-_!2,Q_^1_%AND*_!H7000_%ISOLATE FRACTIONAL LENGTH_^1_%ALS_"4_^1_%STA*_!FRAC03_$SAVE IT_^1_%LDA-_!2,Q_(€€GET THE LENGTH_^1_%AND*_!FFF_(ISOLATE LENGTH BITS_^1_%STA*_!PARAM+5_#SAVE IT_^1_%LDA-_!2,Q_^1_%AND*_!H7FFF_%REMOVE SIGN BIT IF ANY_^1_%STA-_!2,Q_^1_%INQ_"2_^1_%STQ*_!SINBIT_^1_%RTJ*_!(THRU01+1)_^1_%STA*_!BYTEC_^1_%LDA*_!MULT_'FIND THE FWA OF PROC INSTRUCTION_^1_%INA_"-4_^1_%STA*_!PROER_^1_%INA_"5_^1_%STA*_!MULT_^1_%ENA_"0_*ZERO ALL AUXILIARY FOR COMPUTATION LOCATIONS_^1_%ENQ_"47_^1€€CLOOP STA*_!TEMPA,Q_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!CLOOP_^1_%JMP*_!SINBIT+1_^1H7FFF NUM_"$7FFF_^1H7000 NUM_"$7000_^1FFF_"NUM_"$FFF_^1ZERO_!NUM_"0_^1HIBIT NUM_"$8000_^1_%BSS_"PARAM(6)_"STORAGE FOR PARAMETERS_^1_%BSS_"TEMPA(12),TEMPB(12),C(24)_^1FLAG_!NUM_"0_^1_%BSS_"BYTEA(1),BYTEB(1),BYTEC(1)_^1_%BSS_"SAVEI(1),SAVEQ(1)_^1_%BSS_"INDR01(1),INDR02(1),TEMPOR(1)_^1_%BSS_"PROER(1)_^€€1TEN_"NUM_"10_^1FRAC12 NUM_"0_^1FRAC03 NUM_"0_^1SIGN01 NUM_"0_^1SIGN02 NUM_"0_^1SINBIT NUM_"0_^1* UNPACK ARRAY A IN TEMPA_^1_%LDA_"=XPARAM+1_^1_%STA*_!(THRU02+1)_^1_%STA*_!(THRU03+1)_^1_%LDA*_!BYTEA_^1_%RTJ*_!(THRU04+1)_^1_%LDA*_!PARAM_^1THRU05 STA+_!LOOP88+1_^1THRU06 STA+_!LEVLHI+1_^1_%LDA_"=XTEMPA_^1THRU07 STA+_!CHANG1+1_^1THRU08 STA+_!CHANG2+1_^1_%LDA*_!PARAM+1_^1_%TCA_"A_^1_%S€€TA*_!TEMPOR_^1_%ENQ_"11_^1THRU09 RTJ+_!UNPACK_$UNPACK THE ARRAY_^1* UNPACK ARRAY B IN TEMPB_^1_%LDA_"=XPARAM+3_^1_%STA*_!(THRU02+1)_^1_%STA*_!(THRU03+1)_^1_%LDA*_!BYTEB_^1_%RTJ*_!(THRU04+1)_^1_%LDA*_!PARAM+2_^1_%STA*_!(THRU05+1)_^1_%STA*_!(THRU06+1)_^1_%LDA_"=XTEMPB_^1_%STA*_!(THRU07+1)_^1_%STA*_!(THRU08+1)_^1THRU90 LDA+_!PARAM+3_^1_%TCA_"A_^1_%STA*_!TEMPOR_^1_%ENQ_"11_^1THRU10 RT€€J*_!(THRU09+1)_^1*_!STORE IN SLOTS PARTIAL RESULTS OF MULTIPLICATION_^1_%ENQ_"11_^1_%STQ-_!I_^1LOOP66 LDA_"TEMPB,Q_^1_%STQ*_!SAVEQ_%SAVE Q FOR NEXT USE_^1_%MUI_"TEMPA,I_^1_%LDQ*_!SAVEQ_^1_%ADD_"C+1,B_^1_%STA_"C+1,B_^1_%INQ_"-1_^1_%SQM_"1_^1_%JMP*_!LOOP66_^1_%ENQ_"11_^1_%LDA-_!I_^1_%INA_"-1_^1_%STA-_!I_^1_%SAM_"1_^1_%JMP*_!LOOP66_^1* END OF STORING PARTIAL RESULTS IN SLOTS_^1* CON€€SIDER THE CARRIES - NORMALIZE THE NUMBERS_^1_%LDA_"=XC+23_^1THRU14 STA+_!INDR01_^1_%LDA_"=XC+22_^1THRU15 STA+_!INDR02_^1LOOP55 LDA_"(INDR01)_^1_%CLR_"Q_^1_%DVI*_!TEN_^1_%STQ*_!(INDR01)_^1THRU16 ADD_"(INDR02)_^1_%STA_"(INDR02)_^1_%LDA*_!(THRU14+1)_^1_%INA_"-1_^1_%STA*_!(THRU14+1)_^1_%LDA*_!(THRU15+1)_^1_%INA_"-1_^1_%STA*_!(THRU15+1)_^1_%SUB_"=XC-1_^1_%SAZ_"1_^1_%JMP*_!LOOP55_^1*_!PR€€EPARE TO ZERO WITH $30 THE DESTINATION FIELD_^1THRU55 LDA_"=XPARAM+5_^1THRU02 STA+_!PAR135+1_^1THRU03 STA+_!NOSPEC+1_^1_%LDA*_!(THRU55+1)_^1_%TCA_"A_^1_%STA*_!TEMPOR_^1_%LDA_"BYTEC_^1THRU04 RTJ+_!FINDI_%FIND THE POINTER OF DESTINATION FIELD_^1_%LDA-_!I_^1_%STA_"SAVEI_^1_%RTJ_"ZERDES_^1* * * CHECK FOR SIZE ERROR_^1_%LDQ_"FRAC12_$FIND THE LOCATION OF THE LAST SIGNIFICANT CHAR_^1_%€€TCQ_"Q_^1_%INQ_"23_^1_%LDA*_!(THRU55+1) FIND THE NUMBER OF CHARACTERS ASKED FOR_^1_%SUB_"FRAC03_^1_%TCA_"A_^1_%AAQ_"Q_*SET THE POINTER AT LOCATION BEYOND WHICH_^1* THE REMAINING CHARACTERS MUST BE ZERO IF NOT ERROR_^1LOOP69 SQP_"1_^1_%JMP*_!THRU67_$O.K. END OF CHECKING_^1THRU69 LDA+_!C,Q_^1_%SAZ_"ZERMET-*-1_^1_%LDA_"=XERSIZE_"PREPARE TO GIVE ERROR MESSAGE_^1_%LDQ_"PROER_^1_%RTJ_€€"COMERR_^1_%JMP_"(MULT)_^1* * * * *_]_^1ERSIZE ALF_"7,SIZE ERROR_^1* * * * *_]_^1ZERMET INQ_"-1_^1_%JMP*_!LOOP69_^1*_!MOVE FROM AUXILIARY TO DESTINATION FIELD_^1THRU67 LDA+_!PARAM+5_^1_%TCA_"A_^1_%STA*_!(THRU21+1)_^1_%ENQ_"23_^1_%LDA_"SAVEI_^1_%STA-_!I_^1_%CLR_"A_^1_%STA*_!ADZERO_^1_%LDA_"FRAC12_$COMPARE FRACTIONAL LENGTHS_^1_%SUB_"FRAC03_^1_%SAZ_"START1-*-1 NO DIFFERENCE_^1_%SAM_€€"3_^1_%TCA_"A_^1_%AAQ_"Q_^1_%JMP*_!START1_^1_%STA*_!ADZERO_$SAVE THE END ZERO NUMBER_^1START1 LDA_"BYTEC_^1THRU18 EOR+_!HIBIT_^1THRU19 STA+_!FLAG_^1_%SAP_"1_^1_%JMP*_!UPLVL_^1_%LDA*_!ADZERO_$CHECK WHETHR WE HAVE TO LEAVE END ZEROS_^1_%SAZ_"LOOP44-*-1 NO_^1_%RAO*_!ADZERO_$REDUCE BY ONE THE ADDITIONAL ZEROS_^1_%JMP*_!THRU21_$AND AVOID TO STORE ANYTHING_^1LOOP44 LDA+_!C,Q_^1THRU20 EO€€R_"(PARAM+4),I_^1_%STA_"(PARAM+4),I_^1_%INQ_"-1_^1THRU21 RAO+_!TEMPOR_^1_%LDA*_!(THRU21+1)_^1_%SAN_"1_^1_%JMP*_!DONE1_^1UPLVL LDA*_!ADZERO_^1_%SAZ_"UPLVL1-*-1_^1_%RAO*_!ADZERO_^1_%JMP*_!UPLVL2_^1UPLVL1 LDA*_!(LOOP44+1),Q_^1_%ALS_"8_^1_%EOR_"(PARAM+4),I_^1_%STA_"(PARAM+4),I_^1_%INQ_"-1_^1UPLVL2 LDA-_!I_^1_%INA_"-1_^1_%STA-_!I_^1_%RAO*_!(THRU21+1)_^1_%LDA*_!(THRU21+1)_^1_%SAZ_"DONE1€€-*-1_^1_%LDA*_!ADZERO_^1_%SAZ_"1_^1_%JMP*_!LOOP44-2_^1_%JMP*_!LOOP44_^1ADZERO NUM_"0_^1DONE1 LDA_"SIGN01_$CHECK FOR FINAL SIGN_^1_%SUB_"SIGN02_^1_%SAN_"2_^1DONE2 JMP_"(MULT)_$EXIT_^1THRU22 LDA_"(SINBIT)_^1_%EOR*_!(THRU18+1)_^1_%STA_"(SINBIT)_^1_%JMP_"(MULT)_$EXIT_^1CHBYTE ADC_"0_*ROUTINE FINDING WHERE THE LAST NUMBER IS_^1_%LDQ_"(MULT)_^1_%LDA_"(ZERO),Q_^1_%AND_"=N8_^1_%SAZ_"HIST€€RT-*-1_^1*_!DATA BEGINS IN LOWER PART_^1_%LDA-_!2,Q_^1_%AND*_!N1_^1_%SAZ_"LOWHIG-*-1_^1LOWEVN LDA*_!(THRU18+1)_^1_%JMP*_!(CHBYTE)_^1LOWHIG CLR_"A_^1_%JMP*_!(CHBYTE)_^1HISTRT LDA-_!2,Q_^1_%AND*_!N1_^1_%SAZ_"HIGEVN-*-1_^1HIGODD CLR_"A_^1_%JMP*_!(CHBYTE)_^1HIGEVN LDA*_!(THRU18+1)_^1_%JMP*_!(CHBYTE)_^1N1_#NUM_"1_^1FINDI ADC_"0_*FIND THE POINTER ROUTINE_^1_%CLR_"Q_^1_%EOR*_!(THRU18+1)_€€^1_%STA*_!(THRU19+1)_^1_%SAM_"NOSPEC-*-1_^1PAR135 LDA+_!PARAM+5_^1_%AND*_!N1_^1_%SAN_"NOSPEC-*-1_^1_%ENQ_"-1_^1NOSPEC LDA+_!PARAM+5_^1_%ARS_"1_^1_%AAQ_"A_^1_%STA-_!I_^1_%JMP*_!(FINDI)_^1ZERDES ADC_"0_*ZERO WITH $30 THE DESTINATION FIELD_^1_%LDA*_!(THRU19+1)_^1_%SAM_"HILEVL-*-1_^1LOOP99 LDA_"(PARAM+4),I_^1_%AND*_!FF00_^1_%INA_"$30_^1_%STA_"(PARAM+4),I_^1_%RAO*_!(THRU21+1)_^1_%LDA*_!€€(THRU21+1)_^1_%SAN_"1_^1_%JMP*_!(ZERDES)_"EXIT_^1HILEVL LDA_"(PARAM+4),I_^1_%AND*_!FF_^1_%ADD_"=N$3000_^1_%STA_"(PARAM+4),I_^1_%LDA-_!I_^1_%INA_"-1_^1_%STA-_!I_^1_%RAO*_!(THRU21+1)_^1_%LDA*_!(THRU21+1)_^1_%SAN_"1_^1_%JMP*_!(ZERDES)_"EXIT_^1_%JMP*_!LOOP99_^1F_$NUM_"$F_^1FF_#NUM_"$FF_^1F00_"NUM_"$F00_^1FF00_!NUM_"$FF00_^1UNPACK ADC_"0_*UNPACK AN ARRAY_^1_%LDA*_!(THRU19+1)_^1_%SAM_"LE€€VLHI-*-1_^1LOOP88 LDA+_!PARAM,I_^1_%AND*_!F_^1CHANG1 STA+_!TEMPA,Q_^1_%INQ_"-1_^1_%RAO*_!(THRU21+1)_^1_%LDA*_!(THRU21+1)_^1_%SAN_"1_^1_%JMP*_!(UNPACK)_"EXIT_^1LEVLHI LDA+_!PARAM,I_^1_%AND*_!F00_^1_%ALS_"8_^1CHANG2 STA+_!TEMPA,Q_^1_%INQ_"-1_^1_%LDA-_!I_^1_%INA_"-1_^1_%STA-_!I_^1THRU30 RAO+_!TEMPOR_^1_%LDA*_!(THRU30+1)_^1_%SAN_"1_^1_%JMP*_!(UNPACK)_"EXIT_^1_%JMP*_!LOOP88_^1_%END_"DZ_€^__-*-1_^1LOOP88 LDA+_!PSIGN CSY/ P€1_%NAM SIGN_)NEG/UN SIGN DRAFT 5.1 12/02/74_^1** ROUTINE SETTING OR REMOVING OVERPUNCH IN UNITS POS._^1_%ENT_"SIGNX,UNSIGX_^1_%EXT_"COMERR_^1SIGNX ADC_"0_^1_%EQU_"SIGN(SIGNX)_^1_%LDA*_!SIGN_^1_%STA*_!COMMON_^1_%SET_"A_^1_%STA*_!CODE_'SET CODE THAT WE HAVE TO OVERPUNCH IF NEED_^1_%JMP*_!START_^1UNSIGX ADC_"0_^1_%EQU_"UNSIGN(UNSIGX)_^1_%LDA*_!UNSIGN_^1_%STA*_!COMMON_^1_%CLR_"A_^1_%€€STA*_!CODE_'SET CODE TO REMOVE OVERPUNCH IF ANY_^1START LDQ*_!(COMMON)_"FIND THE BYTE OF LAST CHARACTER ROUTINE_^1_%LDA-_!2,Q_#FOR CHECKING LATER FOR SIGN BIT_^1_%STA*_!PUNCH_^1_%LDA*_!(ZERO),Q_"GET THE FIRST WORD OF DATA TABLE_^1_%AND*_!N8_)ISOLATE THE BYTE BIT_^1_%SAZ_"HISTRT-*-1 DATA BEGINS IN UPPER PART_^1* PATH FOLLOWED IF DATA BEGINS IN LOWER HALF TO FIND_^1* LAST CHARACT€€ER"S BYTE_^1_%LDA-_!2,Q_^1_%AND*_!N1_)CHECK FOR EVEN OR ODD NUMBER OF CHARACTERS_^1_%SAZ_"LOWHIG-*-1_^1LOWEVN LDA*_!HIBIT_^1_%JMP*_!FINDI_^1LOWHIG CLR_"A_^1_%JMP*_!FINDI_^1HISTRT LDA-_!2,Q_^1_%AND*_!N1_^1_%SAZ_"HIGEVN-*-1_^1HIGODD CLR_"A_^1_%JMP*_!FINDI_^1HIGEVN LDA*_!HIBIT_^1FINDI EOR_"HIBIT_%ROUTINE FINDING THE POINTER OF LAST WORD_^1_%STA*_!FLAG_^1_%LDA-_!2,Q_^1_%AND*_!FFF_^1_%€€STA*_!LENGTH_^1_%CLR_"Q_^1_%LDA*_!FLAG_^1_%SAM_"NOSPEC-*-1_^1_%LDA*_!LENGTH_^1_%AND*_!N1_^1_%SAN_"NOSPEC-*-1_^1_%ENQ_"-1_^1NOSPEC LDA*_!LENGTH_^1_%ARS_"1_*DIVIDE BY TWO TO FIND THE NUMBER OF WORDS_^1_%AAQ_"A_*CONSIDER ALSO THE SPECIAL CASE_^1_%STA-_!I_*THE POINTER IS SET_^1_%LDQ_"(COMMON)_"GET THE POTENTIAL WORD TO BE OVERPUNCHED_^1_%LDA-_!1,Q_^1_%STA*_!ADRESS_^1_%LDA*_!(ADRESS),I_€€^1_%LDQ*_!FLAG_'CHECK THE BYTE_^1_%SQM_"UPLVL-*-1_!THE UPPER HALF MAY BE OVERPUNCHED_^1_%AND*_!FF00_'SAVE THE OTHER HALF_^1_%STA*_!WORD_^1_%LDA*_!(ADRESS),I_^1_%AND*_!FF_)ISOLATE THE CHARACTER TO BE OVERPUNCHED_^1_%JMP*_!CHEKIT_^1UPLVL AND*_!FF_^1_%STA*_!WORD_^1_%LDA*_!(ADRESS),I_^1_%ALS_"8_^1_%AND*_!FF_^1CHEKIT STA*_!SAVECH_$SAVE IN LOWER PART THE CHARACTER TO BE OVERPUN_^1_%LDQ*€€_!CODE_'CHECK WHAT WE ARE DOING_^1_%SQM_"1_*WE OVERPUNCH_^1_%JMP*_!REMOVE_$WE REMOVE THE OVERPUNCH_^1_%LDQ*_!PUNCH_%CHECK THE SIGN OF THE NUMBER_^1_%SQM_"1_^1_%JMP*_!RETURN_$THE NUMBER IS POSITIVE.DO NOT DO ANYTHING_^1_%INA_"-$3A_'CHECK IF IT IS WITHIN LIMITS_^1_%SAM_"1_^1_%JMP*_!ERROR_^1_%INA_"$A_^1_%SAP_"1_^1_%JMP*_!ERROR_^1_%SAN_"NOZERO-*-1 IT IS NOT ZERO.OVERPUNCH WITH $19_^1_€€%LDA*_!SAVECH_^1_%INA_"4_^1NOZERO INA_"$49_^1_%LDQ_"FLAG_'COMBINE THE TWO CHARACTERS IN ONE WORD_^1_%SQP_"LOW01-*-1_^1_%ALS_"8_^1LOW01 EOR*_!WORD_^1_%STA*_!(ADRESS),I_^1_%JMP*_!RETURN_^1COMMON ADC_"0_*LOCATION OF COMMON RETURN ADDRESS_^1FLAG_!NUM_"0_^1ZERO_!NUM_"0_^1CODE_!NUM_"0_^1HIBIT NUM_"$8000_^1N1_#NUM_"1_^1N8_#NUM_"8_^1FFF_"NUM_"$FFF_^1FF_#NUM_"$FF_^1FF00_!NUM_"$FF00_^1LENG€€TH NUM_"0_^1ADRESS NUM_"0_^1WORD_!NUM_"0_^1SAVECH NUM_"0_^1PUNCH NUM_"0_^1REMOVE INA_"-$3A_#CHECK FOR OVERPUNCH_^1_%SAP_"1_*LOOKS LIKE HAVING OVERPUNCH_^1_%JMP*_!RETURN_$NO OVERPUNCH EXISTS_^1_%INA_"-$43_#CHECK FOR ZERO_^1_%SAZ_"REMOV1-*-1 YES.IT IS ZERO_^1_%INA_"$2A_(CHECK LIMITS FOR OTHER NUMBERS_^1_%SAM_"1_^1_%JMP*_!ERROR_^1_%INA_"$A_^1_%SAP_"REMOV1-*-1_^1_%JMP*_!ERROR_^1REMOV€€1 INA_"$30_^1_%LDQ_"FLAG_'CHECK WHICH HALF IS TO BE OVERPUNCHED_^1_%SQP_"LOW02-*-1_^1_%ALS_"8_^1LOW02 EOR*_!WORD_'COMBINE THE TWO CHARACTERS IN ONE WORD_^1_%STA*_!(ADRESS),I_^1_%LDQ*_!(COMMON)_^1_%LDA-_!2,Q_($CHECK THE EXISTING SIGN IN DATA TABLE_^1_%SAM_"RETURN-*-1 IT IS ALREADY NEGATIVE_^1_%EOR*_!HIBIT_%SET THE SIGN NEGATIVE_^1_%STA-_!2,Q_^1RETURN RAO*_!COMMON_^1_%JMP*_!(COMMO€ŒN)_"EXIT_^1ERROR LDA_"=XERPUNC_^1_%LDQ*_!COMMON_^1_%INQ_"-2_^1_%RTJ_"COMERR_^1_%JMP*_!RETURN_^1ERPUNC ALF_"7,SIGN NON-NUM._^1_%END_"DZ_^__ŒPMARK CSY/ P€1_%NAM MARK_)915/955 PENMARK DRAFT 5.1 12/02/74_^1_%ENT_"MARKX_^1_%EXT_"EOFUSR_^1CON7F NUM_"$7F_^1MARKX NOP_"0_^1_%EQU_"MARK(MARKX)_^1_%CLR_"A_%CLEAR EOF INDICATOR IN CASE PREVIOUSLY SET_^1_%STA_"EOFUSR_^1_%LDQ*_!(MARK)_#GET ADDR. OF ASSIGN TBL_^1_%RAO*_!MARK_#INCREM. FOR RETURN_^1_%LDA-_!3,Q_#GET LUN AND DEVICE TYPE_^1_%TRA_"Q_^1_%AND*_!CON7F_#GET DEVICE TYPE_^1_%INA_"-91_^1_%L€€LS_"16_#Q=0=915,4=955_^1_%AND_"=N$FF00_^1_%SAP_"2_^1_%EOR_"=N$8_^1_%ALS_"8_^1_%STA*_!LUN_#STORE INTO REQUEST_^1_%ENA_"4_#SET CRC WORD = $0004 IN CASE 955_^1_%SQZ_"DO915_#SKIP-IT IS 915_^1_%INQ_"-4_^1_%SQZ_"DO955_#SKIP - IT IS 955_^1_%JMP*_!(MARK)_#NEITHER - EXIT_^1DO915 ALS_"8_#MAKE CRC WORD - $0400 FOR 915_^1_%ENQ_"4_#MECH. ACTION WD = $0004 FOR 915_^1_%JMP*_!STOREQ_^1DO955 LDQ_€€"=N$80_#CRC WD OK, MECH. ACTION = $0080 FOR 955_^1STOREQ STA*_!WD6_^1_%STQ*_!WD7_^1_%RTJ-_!($F4)_#** REQUEST ***_^1_%ADC_"$400_^1_%NUM_"0_#COMPLETION = 0_^1THRD_!NUM_"0_^1LUN_"NUM_"0_^1WD6_"NUM_"0_#CRC WD_^1WD7_"NUM_"0_#MECH. ACTION_^1_%LDQ*_!THRD_^1_%SQZ_"DONE_#WAIT FOR COMPL_^1_%JMP*_!*-2_^1DONE_!LDA*_!LUN_#GET V-FIELD_^1_%LLS_"3_#INTO Q = REG._^1_%INQ_"-1_#END OF FILE_^1_%SQN_"N€^OEOF_#NO_^1_%RAO_"EOFUSR_#YES, SET USER INDICATOR_^1NOEOF JMP*_!(MARK)_#EXIT_^1_%END_"DZ_^__^PADV CSY/ P€1_%NAM ADV_*915/955 ADVANCE DRAFT 5.1 12/02/74_^1_%ENT_"ADVX,SEARCX,ADVFNX_^1_%EXT_"EOFUSR_^1_%DAT_"AD5515(1),EJ5515(1),SERSIX(1),DUMMY(2)_^1_%COM_"LUIN(1)_^1ADVX_!NOP_"0_^1_%EQU_"ADV(ADVX)_^1_%LDA_"AD5515_^1_%STA*_!AD915+1_^1_%CLR_"A_$CLEAR INDICATOR IN CASE PREVIOUSLY SET_^1_%STA_"EOFUSR_"READ ROUTINE WILL SET IF REQUIRED_^1_%LDQ*_!(ADV)_#GET ADDRESS OF ASSIGN TABLE_^1_%RAO*_!AD€€V_#INCREM. FOR NEXT PARAM._^1_%LDA-_!3,Q_$GET LOG. UNIT AND DEVICE TYPE_^1_%TRA_"Q_^1_%AND*_!CON7F_#GET DEVICE TYPE_^1_%INA_"-91_^1_%STA*_!DTYP_^1_%LLS_"16_^1_%AND_"=N$FF00_^1_%SAP_"2_^1_%EOR_"=N$8_^1_%ALS_"8_^1_%STA_"LUIN_$FOR READ ROUTINE_^1_%LDQ*_!(ADV)_#GET DATA TABLE ADDRESS_^1_%RAO*_!ADV_#INCREMENT RETURN ADDRESS_^1_%LDA-_!1,Q_#GET DATA-NAME ADDRESS_^1_%STA*_!TEMP_^1_%LDA*_!(€€TEMP)_#GET CONTENTS OF DATA NAME_^1_%STA*_!TEMP_#WHICH IS ADVANCE COUNT_^1_%ALS_"8_^1_%AND*_!CONF_#CONVERT 2 ASCII DECIMAL CHARS._^1_%MUI_"=N$A_#TO BINARY TOTAL_^1_%STA*_!TEMP2_^1_%LDA*_!TEMP_^1_%AND*_!CONF_^1_%ADD*_!TEMP2_#PASS TOTAL IN A-REG_^1_%LDQ*_!DTYP_^1_%SQZ_"AD915-*-1_#DEVICE IS 915 - SKIP_^1_%INQ_"-4_^1_%SQZ_"AD955-*-1_#DEVICE IS 955_^1_%JMP*_!(ADV)_#NEITHER - EXIT_^1AD95€€5 SET_"Q_-955 EXPECTS NEG. Q REG._^1AD915 RTJ+_!AD5515_(CHANGED TO CONTENTS OF AD5515_^1_%JMP*_!(ADV)_#EXIT_^1TEMP_!NUM_"0_^1TEMP2 NUM_"0_^1DTYP_!NUM_"0_^1CON7F NUM_"$7F_^1CONF_!NUM_"$F_^1SEARCX NOP_"0_^1_%EQU_"SEARCH(SEARCX)_^1_%LDA_"SERSIX_^1_%STA*_!SERSIA+1_^1SERSIA RAO_"0_^1_%RAO_"SEARCH_#INCREMENT FOR RETURN_^1_%JMP*_!(SEARCH)_#EXIT_^1ADVFNX NOP_"0_^1_%EQU_"ADVFND(ADVFNX)_€‚^1_%LDA_"SERSIX_^1_%STA*_!SERSIB+1_^1SERSIB RAO_"0_^1_%LDA*_!ADVFND_#SET COMMON EXIT_^1_%STA*_!ADV_^1_%JMP*_!ADV+1_^1_%END_"DZ_^__‚PALTER CSY/ P1_%NAM ALTER_(ALTER DRAFT 5.1 12/02/74_^1_%ENT_"ALTERX_^1ALTERX ADC_"0_^1_%EQU_"ALTER(ALTERX)_^1_%LDQ*_!ALTER_/P1 OF ALTER_^1_%LDA-_!1,Q_1(P2) OF ALTER_^1_%LDQ*_!(ALTER)_-(P1) ALTER_^1_%STA-_!2,Q_1INTO GOTO +2_^1_%LDQ*_!ALTER_/P1 OF ALTER_^1_%JMP-_!2,Q_^1_%END_"DZ_^__PCVASEB CSY/ P€1_%NAM CVASEB_'CONVERT ASCII/EBCDIC DRAFT 5.1 12/02/74_^1*_$CONVERTS ASCII TO EBCDIC AND VICE VERSA_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.3_^1*_$SMALL COMPUTER SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1975_^1*_]_^1***_"PURPOSE_^1*_$-------_^1*_]_^1*_$THIS ROUTINE CONVERTS ASCII TO EBCDIC AND VICE VERSA_^1*_$CALLING SEQUENCE-_^1*_%R€€TJ CVASEB_^1*_$ADC BUF_*BUFFER ADDRESS_^1*_$ADC BUFL_)BUFFER LENGTH_^1*_]_^1*_$BUFL = +LENGTH IF ASCII TO EBCIDC_^1*_$BUFL = -LENGTH IF EBCDIC TO ASCII_^1*_]_^1****_!*****************************************************************_^1*_$ENTRY POINTS_^1****_!*****************************************************************_^1****_!*************************************************€€****************_^1*_$EXTERNALS_^1****_!*****************************************************************_^1_%ENT CVASEB_^1_%EQU NZERO($12)_^1****_!*****************************************************************_^1*_$EQUIVALENCES_^1****_!*****************************************************************_^1****_]_^1_%EQU ZERO($22)_^1_%EQU LPMSK(2)_^1CVASEB NOP_]_^1_%RTJ* NORML_€€(ABSOLUTIZE FIRST PARAMETER_^1_%STA* ADDR_^1_%RTJ* NORML_(ABSOLUTIZE SECOND PARAMETER_^1_%STA* ECOUNT_'SAVE ADDRESS OF COUNT_^1_%LDA* (ECOUNT)_^1_%SAM EBCASC_'IF MINUS EBCDIC TO ASCII CONVERSION_^1_%STA* ECOUNT_'SAVE COUNT_^1_%ENA $20_^1_%STA* ADJUST_^1_%JMP* T15C_^1EBCASC TCA A_,GET ACTUAL COUNT_^1_%STA* ECOUNT_'SAVE COUNT_^1_%ENA $3F_^1_%ADD- NZERO+15_^1_%STA* ADJUST_^1T15C_!€€LDA* ECOUNT_^1_%INA -1_+DECREASE COUNT_^1_%ADD* ADDR_)GET BUFFER ADDRESS_^1_%STA* ADDR_)REAL ADDRESS_^1LOOP_!LDQ* ADDR_)GET CHARACTER UPPER_^1_%LDA- (ZERO),Q_^1_%ARS 8_^1_%RTJ* EXAM_^1_%ALS 8_,SHIFT CHARACTER UPPER_^1_%STA* HOLD_^1_%LDQ* ADDR_^1_%LDA- (ZERO),Q_$GET WORD LOWER_^1_%RTJ* EXAM_^1_%EOR* HOLD_)COMBINE UPPER AND LOWER_^1_%LDQ* ADDR_^1_%STA- (ZERO),Q_$STORE CONVERTED WO€€RD_^1_%LDA* ECOUNT_^1_%INA -1_+DECREASE COUNT_^1_%SAZ EXIT_^1_%STA* ECOUNT_^1_%LDA* ADDR_)ADJUST BUFFER ADDRESS_^1_%INA -1_^1_%STA* ADDR_^1_%JMP* LOOP_^1EXIT_!JMP* (CVASEB)_^1*_]_^1ADDR_!NUM 0_,CURRENT BUFFER ADDRESS_^1ECOUNT NUM 0_,WORDS REMAINING TO BE CONVERTED_^1ADJUST NUM 0_^1HOLD_!NUM 0_,TEMPORARY STORAGE_^1_%SPC 4_^1*_]_^1*_$THIS ROUTINE CHECKS FOR RELATIVE ADDRESSIN€€G OF THE_^1*_$PARAMETERS AND ABSOLUTIZES THEM_^1*_]_^1NORML NOP_]_^1_%LDQ* CVASEB_'GET RETURN ADDRESS_^1_%RAO* CVASEB_^1_%LDA- $F6_*NO RELATIVE IN UPPER BANK_^1_%SAM KG65K_^1_%LDA- (ZERO),Q_$A CONTAINS ADDRESS OF PARAMETER_^1_%SAP OUT_*A POSITIVE IMPLIES NOT RELATIVE ADDRESSING_^1_%AAQ A_^1_%AND- LPMSK+15_^1_%JMP* OUT_^1KG65K LDA- (ZERO),Q_^1OUT_"JMP* (NORML)_^1_%EJT_]_^1*_]_^€€1*_$TABLE FORMAT_^1*_$ASCII - EBCDIC_^1*_]_^1EXAM_!NOP 0_^1_%AND- LPMSK+8_^1_%TRA Q_^1_%LDA* ADJUST_^1_%AND- LPMSK+15_^1_%LLS 16_^1_%TCQ Q_^1_%AAQ A_^1_%SAM EXIV_^1_%LDQ* ADJUST_^1_%SQM EX1_^1_%INA -$60_^1_%SAP EXIV_^1_%INA $60_^1_%JMP* EX1_^1EXIV_!ENA $5F_*INVALID CHARACTER_^1EX1_"TRA Q_^1_%AND- LPMSK+15_^1_%LDA* CNVRTB,Q_^1_%LDQ* ADJUST_^1_%SQP EX4_*EBCDIC_^1_%ARS 8€€_^1EX4_"AND- LPMSK+8_^1_%JMP* (EXAM)_^1_%EJT_]_^1CNVRTB NUM_"$7F40_^1_%NUM $205A_^1_%NUM $7F7F_^1_%NUM $7F7B_^1_%NUM $7F5B_^1_%NUM $7F6C_^1_%NUM $7F50_^1_%NUM $7F7D_^1_%NUM $7F4D_^1_%NUM $7F5D_^1_%NUM $7F5C_^1_%NUM $5B4E_^1_%NUM $2E6B_^1_%NUM $7F60_^1_%NUM $284B_^1_%NUM $2B61_^1_%NUM $7FF0_^1_%NUM $26F1_^1_%NUM $7FF2_^1_%NUM $7FF3_^1_%NUM $7FF4_^1_%NUM $7FF5_^1€€_%NUM $7FF6_^1_%NUM $7FF7_^1_%NUM $7FF8_^1_%NUM $7FF9_^1_%NUM $7F7A_^1_%NUM $215E_^1_%NUM $24CE_^1_%NUM $2A7E_^1_%NUM $29EC_^1_%NUM $3B6F_^1_%NUM_"$5F7C_^1_%NUM $2DC1_^1_%NUM $2FC2_^1_%NUM $7FC3_^1_%NUM $7FC4_^1_%NUM $7FC5_^1_%NUM $7FC6_^1_%NUM $7FC7_^1_%NUM $7FC8_^1_%NUM $7FC9_^1_%NUM $7FD1_^1_%NUM $7CD2_^1_%NUM $2CD3_^1_%NUM $25D4_^1_%NUM $5ED5_^1_%NUM $7€€FD6_^1_%NUM $3FD7_^1_%NUM $7FD8_^1_%NUM $7FD9_^1_%NUM $7FE2_^1_%NUM $7FE3_^1_%NUM $7FE4_^1_%NUM $7FE5_^1_%NUM $7FE6_^1_%NUM $7FE7_^1_%NUM $7FE8_^1_%NUM $60E9_^1_%NUM $3A4A_^1_%NUM $23FA_^1_%NUM_"$40CC_^1_%NUM $276D_^1_%NUM $3D5F_^1_%NUM $2279_^1_%NUM $7F81_^1_%NUM $6182_^1_%NUM $6283_^1_%NUM $6384_^1_%NUM $6485_^1_%NUM $6586_^1_%NUM $6687_^1_%NUM $6788_^1_%N€€UM $6889_^1_%NUM $6991_^1_%NUM $7F92_^1_%NUM $7F93_^1_%NUM $7F94_^1_%NUM $7F95_^1_%NUM $7F96_^1_%NUM $7F97_^1_%NUM $7F98_^1_%NUM $6A99_^1_%NUM $6BA2_^1_%NUM $6CA3_^1_%NUM $6DA4_^1_%NUM $6EA5_^1_%NUM $6FA6_^1_%NUM $70A7_^1_%NUM $71A8_^1_%NUM $72A9_^1_%NUM $7FC0_^1_%NUM $7F6A_^1_%NUM $7FD0_^1_%NUM $7FA1_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7E3E€€_^1_%NUM $733E_^1_%NUM $743E_^1_%NUM $753E_^1_%NUM $763E_^1_%NUM $773E_^1_%NUM $783E_^1_%NUM $793E_^1_%NUM $7A3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM €€ $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7B3E_^1_%NUM $413E_^1_%NUM $423E_^1_%NUM $433E_^1_%NUM $443E_^1_%NUM $453E_^1_%NUM $463E_^1_%NUM $473E_^1_%NUM $483E_^1_%NUM $493E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $5D3E_^1_%NUM $7F3E_^1_%NUM $3C3E_^1_%NUM $7F3E_^1_%NUM $7D3E_^1_%NUM $4A3E_^1_%NUM $4B3E_^1_%NUM $4C3E_^1_%NUM $4D3E_^1€€_%NUM $4E3E_^1_%NUM $4F3E_^1_%NUM $503E_^1_%NUM $513E_^1_%NUM $523E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $533E_^1_%NUM $543E_^1_%NUM $553E_^1_%NUM $563E_^1_%NUM $573E_^1_%NUM $583E_^1_%NUM $593E_^1_%NUM $5A3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $3E3E_^1_%NUM $7F3E_^1_%NUM $7€F3E_^1_%NUM $7F3E_^1_%NUM $303E_^1_%NUM $313E_^1_%NUM $323E_^1_%NUM $333E_^1_%NUM $343E_^1_%NUM $353E_^1_%NUM $363E_^1_%NUM $373E_^1_%NUM $383E_^1_%NUM $393E_^1_%NUM $5C3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%NUM $7F3E_^1_%END_]_^__PDATE CSY/ P€1_%NAM DATE_)DATE DRAFT 5.1 12/02/74_^1*_!THIS ROUTINE PICKS UP THE SYSTEM DATE IN THE FORM_^1*_!YYMMDD AND PLACES IT IN THE SPECIFIED DATA ITEM_^1_%ENT_"DATE_^1_%ENT_"DATEX_^1_%EQU_"DATEX(*)_^1DATE_!NOP_"0_^1_%LDQ*_!(DATE)_$GET ADDRESS OFF DATA ITEM_^1_%LDQ-_!1,Q_(ACTUAL DATA ADDRESS_^1_%STQ-_!I_^1_%LDQ-_!$E9_(ADDRESS OF EXTENDED CORE TABLE_^1_%LDQ-_!12,Q_'ADDRESS OF YEAR IN ASC€ώII_^1_%LDA-_!($22),Q_^1_%STA-_!($22),I_#STORE YEAR_^1_%LDQ-_!$E9_^1_%LDQ-_!13,Q_'TAKE MONTH AND DAY ALSO_^1_%LDA-_!($22),Q_^1_%STA-_!1,I_^1_%LDQ-_!$E9_^1_%LDQ-_!14,Q_^1_%LDA-_!($22),Q_^1_%STA-_!2,I_^1_%RAO*_!DATE_^1_%JMP*_!(DATE)_$RETURN_^1_%END_"DZ_^__ώPPGMLOD CSY/ P€1_%NAM PGMLOD_'FILE LOAD DRAFT 5.1 12/02/74_^1_%ENT_"PGMLOD_LSWDSTO*_^1_%COM_"PLAC(35)_JSWDSTO*_^1PGMLOD NOP_"0_*ENTRY_ASWDSTO*_^1_%EQU_"LPMSK(2)_JSWDSTO*_^1_%RTJ*_!WRT_(WRITE MESSAGE_9SWDSTO*_^1_%RTJ*_!INPT_'GET NAME OF FILE_6SWDSTO*_^1_%ENQ_"2_*CHECK FOR $FF IN LOWER 8 BITS_)SWDSTO*_^1TSTFF LDA*_!NME,Q_MSWDSTO*_^1_%AND-_!LPMSK+8_KSWDSTO*_^1_%EOR-_!LPMSK+8_KSWDSTO*_^1_%SAN_"OK_)€€NOT FF_@SWDSTO*_^1_%LDA*_!NME,Q_%GET WORD_>SWDSTO*_^1_%AND-_!NZERO+8_#STRIP LOWER 8 BITS_4SWDSTO*_^1_%EQU_"NZERO($12)_HSWDSTO*_^1_%INA_"$20_(ADD A BLANK_;SWDSTO*_^1_%STA*_!NME,Q_MSWDSTO*_^1OK_#LDA*_!NME,Q_^1_%AND-_!NZERO+8_^1_%EOR-_!NZERO+8_^1_%SAN_"OK2_^1_%LDA*_!NME,Q_^1_%AND-_!LPMSK+8_^1_%EOR_"=N$2000_^1_%STA*_!NME,Q_^1OK2_"INQ_"-1_,ALL THREE WORDS TESTED_^1_%SQM_"DNE_OSWDSTO*_^1€€_%JMP*_!TSTFF_MSWDSTO*_^1DNE_"ENQ_"30_)MOVE GTFILE REQ TO COMMON_-SWDSTO*_^1DNE1_!LDA*_!PGM,Q_MSWDSTO*_^1_%STA+_!PLAC,Q_LSWDSTO*_^1_%INQ_"-1_PSWDSTO*_^1_%SQM_"1_QSWDSTO*_^1_%JMP*_!DNE1_NSWDSTO*_^1_%JMP+_!PLAC_'GO TO THE REQ NOW IN COMMON_+SWDSTO*_^1WRT_"NOP_"0_QSWDSTO*_^1CL1_"RTJ-_!($F4)_^1_%NUM_"$C00,0,0,$18FC,$F_^1_%ADC_"MS1_^1_%LDA*_!CL1+3_%GET THREAD_._#._"._€€^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_]_^__Β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_]_^__\PDCORE 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_]_^__–PNDISP 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_]_^__Κ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_]_^__Τ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_^__PD1728 CSY/ C48 P€1_%NAM D1728_(DECK-ID C48 MSOS 4.1_-SUMMARY-079_^1*_*1728/430 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*P1728 ADC $520E_(00 SCHEDULER CALL_^1*_%ADC CI1728_'01 INITIATOR ADDRESS_^1*_%ADC CC1728_'02 CONTINUATOR ADDRESS_^1*_%ADC CE1728_'0€€3 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*_%NUM $18C6_(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 L1728_(13 DRIVER LENGTH €€IF MASS MEMORY_^1*_%ADC S1728_(14 NAME ASSOCIATED WITH SECTOR NUMBER_^1*_%NUM 0_,15 PACKING CYCLE ADDRESS STORAGE_^1*_%NUM $800F_(16 READ/PUNCH SWITCH, EOF FORMAT (6789)_^1*_%ADC BUF28_(17 FIRST LOCATION OF 80 WORD I / O 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 RECO€€RD LENGTH_^1*_%NUM 0_,22 CHECKSUM ACCUMULATOR_^1*_%NUM 0_,23 TEMPORARY STORAGE_^1*_%NUM 0_,24 OUTPUT OFFSET SWITCH_^1*_%NUM 0_,25 ERROR RETURN_^1*_%NUM 0_,26 HOLLERITH ERROR FLAG_^1*_%ADC U1728_(27 DIAGNOSTIC LU_^1**_]_^1*_%BZS BUF28(80)_#29 INPUT / OUTPUT BUFFER_^1**_8108 INPUT / OUTPUT BUFFER_^1*_]_^1_%EXT ALTDEV_^1_%EXT MAKEQ_^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* CDRD_)CARD CONVERSION (READ)_+**MSOS 4.1**_^1_%EXT* CDPC_)CARD CONVERSION (PUNCH)_***MSOS 4.1**_^1_%SPC 2_^1_%ENT I1728_(DRIVER INITIATOR_1**MSOS 4.1**_^1_%ENT C1728_(DRIVER CONTINUATOR_/**MSOS 4.1**_^1_%ENT E1728_(DRIV€€ER ERROR_5**MSOS 4.1**_^1_%SPC 2_^1_%EQU AFNR($B5)_^1_%EQU ADISP($EA)_^1_%EQU COMPRQ($B6)_^1_%EQU AMONI($F4)_^1_%EJT_]_^1***_"MASK BITS_^1_%SPC 2_^1_%EQU FORMTD(2) FORMATTED REQUEST IF BIT1=1_^1_%EQU ORIDE(4)_!CHECKSUM OVERRIDE BIT2_^1_%EQU CHEKSM(4)_^1_%EQU BINASC(8) BINARY-ASCII MODE INDICATOR_^1_%EQU FIRST($10) FIRST CARD INDICATOR_^1_%EQU FSTCRD($10)_^1_%EQU ZERO€€($22)_^1_%EQU ONEBIT($23)_^1_%EQU QMARK($3F)_^1_%EQU LPMSK(2)_^1_%EQU H000F(6)_^1_%EQU H00FF($A)_^1_%EQU H07FF($D)_^1_%EQU H0080($2A)_^1_%EQU H0100($2B)_^1_%EQU H0800($2E)_^1_%EQU HC000($20)_^1_%EQU HFF00($1A)_^1_%EQU HFFBF($39)_^1_%EQU HFFF0($16)_^1_%EQU H0FFF($E)_^1_%EQU BIT14($31)_^1_%EQU BIT15($21)_^1_%EJT_]_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU €€ TIME(4)_"DIAG. CLOCK TIME_^1_%EQU LU(5)_$LOG. UNIT_^1_%EQU REQAD(6)_!REQUEST ADDRESS_^1_%EQU CALL(7)_"HARDWARE ADDRESS_^1_%EQU ERRTAB(8) REQUEST STATUS_^1_%EQU SWITCH(9) DRIVER SWITCHS_^1_%EQU CORE(10)_!CORE ADDRESS WORD (IN/OUT)_^1_%EQU LASTP1(11) LAST CORE LOCATION + 1_^1_%EQU STATUS(12) HARDWARE STATUS_^1_%EQU CYCLE(15) PACKING CYCLE ADDRESS STORAGE WORD_^1_%EQU EO€€FCRD(16) EOF CARD PATTERN AND RD/PUN SWITCH ERROR_^1_%EQU BUFFER(17) STARTING ADDRESS OF 80 WORD BUFFER_^1_%EQU BUFFAD(18) CURRENT WORD BUFFER ADDRESS_^1_%EQU RETURN(19) SUBROUTINE RETURN ADDRESS_^1_%EQU SEQ(20)_"SEQUENCE NUMBER_^1_%EQU LENGTH(21) RECORD LENGTH_^1_%EQU CHKSUM(22) CHECKSUM WORD_^1_%EQU TPMWRD(23) TEMP.STORAGE_^1_%EQU OFFSET(24) OFFSET CARD SWITCH_^1_%EQU ER€€RETN(25) ERROR RETURN_^1_%EQU FLAG(26)_^1_%EQU DIAGLU(27)_"DIAGNOSTIC LU_4**MSOS 4.1**_^1_%EQU TEMP(LENGTH)_^1_%EQU ERRCOD(FLAG)_^1_%EQU TMPWRD(27)_^1_%SPC 2_^1***_"ERROR CODES_^1_%SPC 2_^1_%EQU TIMERR(0) TIME OUT_^1_%EQU ALARM(2)_!ALARM_^1_%EQU CKSMER(4) CHECKSUM ERROR_^1_%EQU INTREJ(5) INTERNAL REJECT_^1_%EQU EXTREJ(6) EXTERNAL REJECT_^1_%EQU ECHO(7)_"ECHO OR 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 RDPUER(11) READ - PUNCH SWITCH ATTEMPT_^1_%EQU NO79ER(12) NO 79 PUNCH_^1_%EQU STKFUL(22) OUTPUT STACKER FULL_^1_%EQU EMPTY(23) INPUT TRAY EMPTY_^1_%EQU FEDERR(24) FEED FAILURE_^1_%EQU CRDJAM(25) CARD JAM_^1_%EQU DINTER(34) DATA INT€€ERRUPT NUMBER 81_^1_%EQU ERLYEP(35) EOP BEFORE ALL 80 READ_^1_%EJT_]_^1_%SPC 2_^1START STQ- I_^1_%LDQ =XE1728-START_B**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 3,I_^1_%LDQ =XC1728-START_B**MSOS 4.1**_^1_%AAQ Q_^1_%STQ- 2,I_^1_%LDQ =XI1728-START_B**MSOS 4.1**_^1_%AAQ Q_N**MSOS 4.1**_^1_%STQ- 1,I_L**MSOS 4.1**_^1_%LDQ =XREADMS-START_A**MSOS 4.1**_^1_%AAQ Q_N**MSOS 4.1**_^1_%STQ SCHE€€OP+1_G**MSOS 4.1**_^1_%LDQ =XFEEDIT-START_A**MSOS 4.1**_^1_%AAQ Q_N**MSOS 4.1**_^1_%STQ SCHDAT+1_G**MSOS 4.1**_^1_%LDQ =XALMLLV-START_A**MSOS 4.1**_^1_%AAQ Q_N**MSOS 4.1**_^1_%STQ SCHALM+1_G**MSOS 4.1**_^1_%LDQ =XPUNCMS-START_A**MSOS 4.1**_^1_%AAQ Q_N**MSOS 4.1**_^1_%STQ PNCHIT+1_G**MSOS 4.1**_^1_%JMP* I1728+1_H**MSOS 4.1**_^1MS300 JMP+ MAS300_'RELEASE BUFFER_3**MSOS 4.1*€€*_^1_%EJT_]_^1E1728 STQ- I_,1728 TIME EXPIRED_0**MSOS 4.1**_^1_%ENA TIMERR_#TIME OUT ERROR 0_^1_(JMP*_$TTRROR_^1_%SPC 2_^1**_%DRIVER INITIATOR ENTRY_^1_%SPC 2_^1I1728 STQ- I_,INITIATOR_8**MSOS 4.1**_^1FNR_%RTJ-_#(AFNR)_.GET A REQUEST_%**MSOS 4.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-_$BUFFER,I_^1_(STQ-_$BUFF€€AD,I_^1_)LDQ-_$REQAD,I_,TAPE MOTION CONTROL_^1_)LDA-_$(ZERO),Q_+REQUEST_^1_)ARS_%9_^1_%AND- LPMSK+5_%MASK FOR REQUEST CODE_,**MSOS 4.1**_^1_)INA_%-14_^1_(SAN_%TP4-*-1_^1_%STA- CORE,I_J*MSOS V4.0_^1_%STA- LASTP1,I_H*MSOS V4.0_^1_)LDA-_$4,Q_0YES_^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 PARAMETER WORD_^1_(JMP_%MORMC_^1TP4_$LDA-_$SWITCH,I_,YES, ATTEMPT TO SWITCH_^1_(ALS_%5_3FROM READ TO PUNCH OR VICE_^1_(EOR-_$CALL,I_.VERSA_^1_(ALS_%10_^1_(SAM_%NORPCK-*-1_^1_(ENA_%$60_1YES, REVERSE STATION CODE_^1_(EOR-_$CALL,I_.IN CONNECT CODE,SET_^1_(STA-_$CALL,I_.ERROR CODE AND EXIT TO_^1_(LDA-_$EOFCRD,I_,READ-PUNCH CHANGE_^1_(SAP_%NORPCK-*-1_*€€CHECK BIT SET_^1_(ENA_%RDPUER_.ALTERNATE DEVICE HANDLER_^1TTRROR JMP* TOERR_K*MSOS V4.0*_^1NORPCK_!ENA_%1_3READ REQUEST_^1_(AND-_$SWITCH,I_^1_(SAN_%TOPCH-*-1_^1_(JMP_%FEEDCD_.YES_^1TOPCH JMP TOPNCH_^1_%SPC 2_^1**_%EOF READ - SET BIT 14 IN ERRTAB WORD_^1**_1SET BIT 11 IN STATUS WORD_^1_%SPC 2_^1EOFRD LDA- SWITCH,I_!IF SLEW EOF_:*MSOS V4.0_^1_%SAP NSE-*-1_"SKIP IF NOT SLEW_5*MS€€OS V4.0_^1_%EOR- BIT15_$CLEAR SLEW INDICATOR_1*MSOS V4.0_^1_%STA- SWITCH,I_!COMPLETION OF SLEW_3*MSOS V4.0_^1NSE_"LDA- BIT14_$EOF WAS READ_^1_)EOR-_$ERRTAB,I_+MARK THE REQUEST_^1_)STA-_$ERRTAB,I_+COMPLETE WITH ERROR_^1_(LDA-_$H0100_^1_(STA-_$OFFSET,I_^1_%ALS 3_O*MSOS V4.0*_^1_%STA- STATUS,I_$SET BIT11 IN STATUS WORD FOR EOF_!*MSOS V4.0*_^1_%JMP TTDONE_^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_3COLUMN TO ASCII_^1_(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_(QL€€S_%1_^1_(SQP_%1_^1_(INA_%$66_1ROW 6_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$67_1ROW 7_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$18_1ROW 8_^1_(QLS_%1_^1_(SQP_%1_^1_(INA_%$79_1ROW 9_^1_(AND_%=N$FF8F_-CLEAR CARRY FORCING 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-_$HFFBF_^1_(ENQ_%0_€€^1_(LLS_%9_3ILLEGAL 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**_^1TTEFR JMP* EOFRD_^1_%ENA 1_^1_%STA- FLAG,I_^1_%ENA QMARK_^1_%JMP* SETUP_^1NOHLER LLS 6_^1_%LDQ CDRD,Q_I**MSOS 4.1**_^1_(SAN_%1_3UPPER CHAR_^1_(LLS_%8_3NO, SHIFT IT_^1_(LLS_%8_^1SETUP A€€ND- H00FF_^1_(LDQ-_$RETURN,I_^1GETOUT_!JMP_%ASCII1,Q_^1TOERR JMP* TERROR_J*MSOS V4.0*_^1_%EJT_]_^1**_%DRIVER CONTINUATOR ENTRY_^1_%SPC 2_^1C1728 STQ- I_,CONTINUATOR_6**MSOS 4.1**_^1_)LDQ-_$CALL,I_^1_%INP ERREJ-*_^1_(STA-_$STATUS,I_^1_%ENA 2_^1_%OUT ERREJ-*_%CLEAR INTERRUPTS_^1_%LDA- TIME,I_I**MSOS 4.1**_^1_%SAM GHOINT_I**MSOS 4.1**_^1_%LDA- LU,I_K**MSOS 4.1**_^1_%SAZ GHOINT€€_I**MSOS 4.1**_^1_%ENA -1_M**MSOS 4.1**_^1_%STA- TIME,I_I**MSOS 4.1**_^1_%ENA $20_*ALARM BIT_8**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**_^1GHOINT JMP- (ADISP)_"GHOST INTERRUPT - GET OUT_^1CHKB5 ENA $10_*CHECK FOR EOP_4**MSOS 4.1**_^1_%AND- STATUS,I_H*MSOS V4.0_^1_%SA€€Z DAINT_(GOT DATA_9**MSOS 4.1**_^1_%JMP* EP1728_#EOP INTERRUPT_8*MSOS V4.0_^1DAINT ENA 8_N**MSOS 4.1**_^1_%AND- STATUS,I_$SEE IF DATA STATUS PRESENT_'**MSOS 4.1**_^1_%SAZ NOSTAT_I**MSOS 4.1**_^1_%JMP* DA1728_'PROCESS DATA INTERRUPT_+**MSOS 4.1**_^1NOSTAT JMP* EXIT+1_'WAIT FOR READ DATA INTERRUPT_$**MSOS 4.1**_^1_%EJT_]_^1**_%ANALYZE ALARM INTERRUPT_^1_%SPC 2_^1ALMINT LDA- STAT€€US,I_!ADJUST STATUS WORD_3*MSOS V4.0_^1_%ALS 4_)BIT 11 WILL INDICATE EOF WAS -_'*MSOS V4.0_^1_%SAP 1_)DETECTED._<*MSOS V4.0_^1_%ADD- BIT15_$CLEAR BIT 11 - SET BIT 12_,*MSOS V4.0_^1_%ALS 12_N*MSOS V4.0_^1_%STA- STATUS,I_!SAVE ADJUSTED STATUS WORD_,*MSOS V4.0_^1_%AND- H0100_$CHECK BIT 8 (ERROR)_2*MSOS V4.0_^1_%SAZ ALRCHK_#SKIP IF NOT PRE-READ ERROR_+*MSOS V4.0_^1_%RTJ* PUNERR_^1_€€%ENA ECHO_%PRE-READ OR PUNCH ERROR 7_+**MSOS 4.1**_^1_%JMP* TERROR_#REPORT ERROR_9*MSOS V4.0_^1ALRCHK INQ 2_)SET D BITS 0 AND 1_3*MSOS V4.0_^1_%INP ERREJ-*_"GET LEVEL 2 STATUS_3*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0_^1_%LRS 1_)CHECK EMPTY_9**MSOS 4.1**_^1_%SAP ALM2_L*MSOS V4.0_^1_%ENA EMPTY_(INPUT TRAY EMPTY_2*MSOS V4.0*_^1_%JMP* TERROR_J*MSOS V4.0*_^1ALM2_!LRS 1_)CHECK STACKER F€€ULL_3*MSOS V4.0_^1_%SAP ALM3_L*MSOS V4.0_^1_%ENA STKFUL_'OUTPUT STACKER FULL_/*MSOS V4.0*_^1_%JMP* TERROR_J*MSOS V4.0*_^1ALM3_!LRS 1_)CHECK FEED FAILURE_3*MSOS V4.0_^1_%SAP ALM4_L*MSOS V4.0_^1_%RTJ* PUNERR_^1_%ENA FEDERR_'FEED FAILURE_6*MSOS V4.0*_^1_%JMP* TERROR_J*MSOS V4.0*_^1ALM4_!AND- $5_(CHECK JAM_<*MSOS V4.0_^1_%SAZ NOTECH-*-1_F*MSOS V4.0_^1_%RTJ* PUNERR_^1_%ENA CRDJAM€€_#CARD JAM ERROR 25_4*MSOS V4.0_^1_%JMP* TERROR_J*MSOS V4.0_^1NOTECH ENA ALARM_$ALARM ERROR 2_8*MSOS V4.0_^1TERROR JMP ERROR_$ERROR EXIT_;*MSOS V4.0_^1PUNERR NUM 0_,ENTRY_^1_%ENA 1_^1_%AND- SWITCH,I_$CHECK FOR R/W FAILURE_^1_%SAZ LEAVIT_^1_%INA -1_+DECREMENT SEQUENCE NUMBER_^1_%INA 1_,DECR.SEQ.NUMBER_^1_%STA- SEQ,I_(IN CASE OF RP_^1_%LDA- H0100_(BAD PUNCH CARD_^1_%STA- OFFSE€€T,I_$WILL BE OFFSET_^1LEAVIT JMP* (PUNERR)_$EXIT_^1_%EJT_]_^1**_%ANALYZE DATA INTERRUPT_^1_%SPC 2_^1DA1728 INQ -1_(PROCESS DATA INTERRUPT_/*MSOS V4.0_^1_%LDA- SWITCH,I_!CHECK IF SLEW_8*MSOS V4.0_^1_%SAP D1-*-1_#SKIP IF NOT SLEW_5*MSOS V4.0_^1_%JMP* SLWDAT_#DATA INT. FOR SLEW_3*MSOS V4.0_^1D1_#ENA 1_O*MSOS V4.0_^1_%AND- SWITCH,I_!CHECK IF PUNCHING_4*MSOS V4.0_^1_%SAN PCHIN_$DAT€€A INT. FOR PUNCH_2*MSOS V4.0_^1_%LDA- BUFFAD,I_$CURRENT BUF.ADRS._0**MSOS 4.1**_^1_%SUB- BUFFER,I_$START BUF.ADRS._2**MSOS 4.1**_^1_%INA -80_*CHECK IF LEGAL DATA INT._)**MSOS 4.1**_^1_%SAM GETDAT_'SKIP IF LESS THAN 80 COLUMNS_$**MSOS 4.1**_^1_%ENA DINTER_'EXTRA DATA INTERRUPT ERROR 34_#**MSOS 4.1**_^1_%JMP* TERROR_'REPORT ERROR_5**MSOS 4.1**_^1PCHIN JMP* PCHDAT_#DATA INTERRUPT €€FOR PUNCH_^1_%SPC 2_^1**_%PROCESS DATA INTERRUPT FOR READ_^1***_"READ A COLUMN_^1_%SPC 2_^1GETDAT INP ERREJ-*_"GET DATA_^1_%LDQ- BUFFAD,I_^1_%STA- (ZERO),Q_^1EXIT_!RAO- BUFFAD,I_!INCREMENT BUFFER ADDRESS_^1_%LDQ- CALL,I_#SELECT INTERRUPTS ON_^1_%ENA $1C_'DATA - EOP - AND ALARM_^1_%OUT ERREJ-*_H**MSOS 4.1**_^1SAVSTA ENA 1_^1_%STA- TIME,I_#RESET TIME_^1_%JMP- (ADISP)_"EXIT TO D€€ISPATCHER_^1_%SPC 2_^1**_%PROCESS DATA INTERRUPT FOR PUNCH_^1***_"PUNCH A COLUMN_^1_%SPC 2_^1PCHDAT LDA- TEMP,I_#DATA INT FOR PUNCH_3*MSOS V4.0_^1_%SAZ NXTCRD_#SKIF IF ALL WORDS ARE PUNCHED_(*MSOS V4.0_^1_%RAO- TEMP,I_#UPDATE NUMBER OF WORDS LEFT TO PUNCH *MSOS V4.0_^1_%LDQ- BUFFAD,I_!MORE TO PUNCH_^1_%LDA- (ZERO),Q_!GET A DATA WORD AND PUNCH IT_^1_(LDQ-_$CALL,I_^1_(INQ_%-1_^1_€€%OUT ERREJ-*_"DATA WORD_^1_(JMP*_$EXIT_^1NXTCRD JMP* EP1728_#GOT-UM ALL GOOD AS EOP INT._)*MSOS V4.0_^1_%EJT_]_^1**_%PROCESS DATA INTERRUPT FOR SLEW_^1***_"READ COLUMN ONE - CHECK FOR EOF_^1_%SPC 2_^1SLWDAT INP ERREJ-*_"DATA INTERRUPT FOR SLEW_.*MSOS V4.0_^1_%LDQ* COL1_)CHECK IF COLUMN 1 HAS BEEN READ_"*MSOS V4.0_^1_%SQN NOEOF_(GET NEXT COLUMN_3*MSOS V4.0_^1_%RAO* COL1_)SET CO€€LUMN 1 READ FLAG_,*MSOS V4.0_^1_%TRA Q_,SAVE WORD IN Q_4*MSOS V4.0*_^1_%LDA- EOFCRD,I_H*MSOS V4.0*_^1_%AND- H0FFF_(GET EOF PATTERN_3*MSOS V4.0*_^1_%EAQ A_,EOR A AND Q TO A_2*MSOS V4.0*_^1_%SAN NOEOF-*-1_#SKIP IF NOT EOF_3*MSOS V4.0*_^1_%STA* COL1_L*MSOS V4.0_^1TOEOF JMP TTEFR_J**MSOS 4.1**_^1NOEOF JMP* EXIT+1_J*MSOS V4.0_^1COL1_!NUM 0_)SET NON ZERO ON COLUMN 1 (SLEW)_%*MSOS €€V4.0_^1_%SPC 2_^1ERREJ JMP* DEJECT_#INTERNAL REJECT_^1_%JMP* DEJECT+1_!EXTERNAL REJECT_^1_%EJT_]_^1**_%ANALYZE EOP INTERRUPT_^1_%SPC 2_^1EP1728 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_+SKIP IF NOT SLEW_2*MSOS V4.0_^1_%CLR A_O*MSOS V4.0_^1_%STA* COL1_%CLEAR COLUMN 1 FLAG_2*MSOS V4.0_^1_%JMP €€ NOTPAR_'FEED NEXT CARD FOR SLEW_+*MSOS V4.0_^1EP_#AND- ONEBIT_'READ OR PUNCH EOP_1*MSOS V4.0_^1_%SAN PNEOP-*-1 SKIP IF EOP FOR PUNCH_0*MSOS V4.0_^1_%JMP* RDEOP_$EOP FOR READ_9*MSOS V4.0_^1_%SPC 2_^1**_%PROCESS EOP INTERRUPT FOR PUNCH_^1_%SPC 2_^1PNEOP LDA- BUFFER,I_H*MSOS V4.0_^1_%STA- BUFFAD,I_G**MSOS 4.1**_^1_%ENA 2_)FORMATTED BIT 1_5*MSOS V4.0_^1_%AND- SWITCH,I_H*MSOS V4€€.0_^1_%SAN FORMOP-*-1_"SKIP IF FORMATTED_1*MSOS V4.0_^1_(LDA-_$LASTP1,I_^1_(SUB-_$CORE,I_.NO,LAST WORD_^1_(SAZ_%TTDONE-*-1_^1TOPNCH_!JMP_%PUNCH_/NO_^1FORMOP ENA 8_)ASCII BIT 3_9*MSOS V4.0_^1_%AND- SWITCH,I_H*MSOS V4.0_^1_%SAN TTDONE-*-1_"SKIP IF ASCII_5*MSOS V4.0_^1_%ENA 4_)CHECKSUM PUNCHED BIT 2_.*MSOS V4.0_^1_%AND- SWITCH,I_H*MSOS V4.0_^1_%SAN TTDONE-*-1_"SKIP IF PUNCHED_3€€*MSOS V4.0_^1_(JMP*_$TOPNCH_.NO_^1_%EJT_]_^1**_%PROCESS EOP INTERRUPT FOR READ_^1_%SPC 2_^1RDEOP LDA- BUFFAD,I_$CHECK IF LEGAL TIME_.**MSOS 4.1**_^1_%SUB- BUFFER,I_$FOR EOP INT._5**MSOS 4.1**_^1_%INA -80_L**MSOS 4.1**_^1_%SAZ SCHDEP_#SKIP IF LEGAL EOP_2**MSOS V4.0_^1_%ENA ERLYEP_#EOP BEFORE COLUMN 80 READ_^1_%JMP* TERROR_I**MSOS 4.1**_^1TTDONE JMP DONE_K**MSOS 4.1**_^1SCHDEP €€LDA- BUFFER,I_!INITIALIZE BUFFER_3**MSOS 4.1**_^1_%STA- BUFFAD,I_G**MSOS 4.1**_^1_%LDQ- I_,SAVE ADDR OF PHYSTB_0***MSOS4.0_^1_%RTJ- (AMONI)_^1SCHEOP ADC $520A_(SCHED EOP INTERRUPT_.**MSOS 4.1**_^1_%ADC READMS_K***MSOS4.0_^1_%JMP- (ADISP)_^1READMS STQ- I_^1*_84 CARDS DELETED_762*1303_^1_%ENA FORMTD_I**MSOS 4.1**_^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_^1TOGETW_!TRA_%Q_^1_(ENA_%FIRST_^1_(AND-_$SWITCH,I_^1_(SAN_%FRDB1-*-1_^1_(LDA-_$EOFCRD,I_,IS IT AN_^1_(ALS_%4_3EOF CARD_^1_(AND-_$HFFF0_^1_(EAQ_%A_^1_(SAN_€€%FRDB1-*-1_^1_%JMP* TOEOF_$TO EOFRD_^1FRDB1_"TRQ_%A_^1_%AND- H00FF_^1_%AND =N$0050_K72*1686_^1_%INA -$50_%CHECK FOR 79 PUNCH_^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_^1_)ENA_%BINASC_-YES,SET ASCII MODE_^1_)EOR-_$SWITCH,I_^1_)STA-_$SWITCH,I_^1TOASCI_"JMP_%ASCII_^1NOT1ST_"EN€€A_%NO79ER_-NO,ERROR - NO 7/9 PUNCH_^1_%JMP* TERR_%TO ERROR_^1FRDB2_"ENA_%$20_0NO, IS CHECKSUM_^1_(LAQ_%A_3OVERRIDE 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_3IS THE SEQUENCE_^1_(ARS_%8_3NUMBER OK_^1_(AND-_$H00FF_^1_%SAZ VERIFY_'SEQ NUMBER.EQ.0_^1_%STA- TMPWRD,I_$SAVE SEQ.NUM€€BER_^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- TMPWRD,I_^1_%STQ- SEQ,I_(SET SEQ.CTR.FOR A READ THROUGH_^1_(ENA_%SEQER_/NO,FATAL_^1TERR_!JMP* TTERR_$TO ERROR_^1DEJECT_!JMP*_$REJECT_^1_(JMP*_$REJECT+1_^1 EJT_]_^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* TTERR_$TO ERROR_^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_3FROM THE_^1_(SUB-_$BUFFER,I_,CORE BUFFER_^1_(INA_%-80_1IF THE BUFFER_^1_(SAN_%NOTEXB-*-1_*IS EMPTY WHEN_^1_%JMP*_$FEEDCD_.A WORD IS REQUESTED,A_^1NOTEXB_!LDA-_$(ZERO),Q_,FEED CYCLE€€ IS_^1_(LDQ-_$1,Q_0INITIATED_^1_(QLS_%4_^1_(LLS_%4_^1_(ENQ_%CYCLE2-CYCLE1_^1GETWEX_!STQ-_$CYCLE,I_^1_(TRA_%Q_^1_(ADQ-_$CHKSUM,I_^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_3NO,STORE THE WORD_^1_(LD€€Q-_$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_0NO_^1FRDB8_"ENQ_%FRDB9-GETWRD_(YES,GET THE CHECKSUM_^1_(JMP*_$GETWRD_^1_%EJT_]_^1***_"SCHEDULE UP FOR CARD READ_^1_%SPC 2_^1FEEDCD LDQ- I_^1_%RTJ- (AMONI)_^1SCHDAT ADC $520E_(SCHED UP FOR READ DAT€€A_+**MSOS 4.1**_^1_%ADC FEEDIT_K***MSOS4.0_^1_%JMP- (ADISP)_^1FEEDIT STQ- I_^1_%LDA- BUFFER,I_$INITIALIZE BUFFER ADDRESS_^1_(STA-_$BUFFAD,I_,ADDRESS_^1NOTPAR 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_(SAM_%DEFOFF-*-1_^1_(ENQ_%0_^1_(STQ-_%OFFSET,I_^1NOOFF_"EOR-_$ONEBIT_^1_(LDQ-_$CALL,I_^1_(OUT_%REJECT-*_^1_%J€€MP* XXX_M*MSOS V4.0_^1_%SPC 2_^1REJECT JMP* INTRNL_#INTERNAL REJECT ERROR_^1_%ENA EXTREJ_#EXTERNAL REJECT ERROR_^1TTERR JMP* TTTERR_#REPORT ERROR_^1_%SPC 2_^1DEFOFF_!LDQ-_$H0100_^1_(STQ-_$OFFSET,I_^1_(LAQ_%A_^1_(JMP*_$NOOFF_^1XXX_"ENA $14_'SELECT INTERRUPTS ON DATA - ALARM_#*MSOS V4.0_^1_%LDQ- CALL,I_^1_%EOR- H0080_$FEED CARD FUNCTION_^1_(OUT_%REJECT-*_^1_(INP_%REJECT-*_^1_(ST€€A-_$STATUS,I_^1_(JMP_%SAVSTA_^1FRDB9_"LDA-_$CHKSUM,I_,DOES THE SUM BALANCE_^1_(SAZ_%TODONE-*-1_*TO ZERO_^1_(ENA_%ORIDE_/NO,CHECKSUM OVERRIDE_^1_(AND-_$SWITCH,I_,SET_^1_(SAN_%TODONE-*-1_^1_%LDA- SEQ,I_O76*1884_^1_%INA -1_+DECREMENT SEQUENCE COUNTER_,76*1884_^1_%STA- SEQ,I_(FOR RETRY_^1_(ENA_%CKSMER_.NO,ERROR_^1_%JMP* TTTERR_#TO ERROR_^1TODONE_!JMP*_$DONE_0YES,FINISHED_^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 COLUMN_^1RD€€BIN3_"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_(ENQ_%CYCLE3-CYCLE1_^1_(JMP*_$GETWEX_^1INTRNL_!ENA_%INTREJ_.SET INTERNAL REJECT ERROR_^1TTTERR 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_]_^1DONE_#LDQ-_$REQAD,I_^1_%LDA- (ZERO),Q_J53*1083_^1_%ARS 9_^1_%AND- LPMSK+5_I*MSOS V4.0_^1_(INA_%-14_^1_(SAN_%NOTMC-*-1_^1_%SPC 2_^1***_"PROCESS MOTION REQUEST_^1MORMC LDA- TPMWRD,I_$GET MOTION REQUEST PARAMETER STRING*MSOS V4.0*_^1_%CLR Q_O*MSOS V4.0*_^1_%LLS 4_,GET ONE PARAMETER_1*MSOS V4.0*_^1_%SQZ NOTMC-*-1_#SKIP IF ZER€€O PARAMETER_,*MSOS V4.0*_^1_%STA- TPMWRD,I_$SAVE REMAINDER OF STRING_**MSOS V4.0*_^1_%INQ -2_+TEST FOR WEOF (2)_1*MSOS V4.0*_^1_%SQN MC1_*SKIP IF NOT WEOF_2*MSOS V4.0*_^1_%JMP* WEOF_L*MSOS V4.0*_^1MC1_"INQ -2_+TEST FOR ZROSEQ (4)_/*MSOS V4.0*_^1_%SQN MC2_*SKIP IF NOT REWIND UNLOAD CODE_#*MSOS V4.0*_^1_%JMP* ZROSEQ_'GO CLEAR SEQ. AND TERMINATE REQUEST*MSOS V4.0*_^1MC2_"INQ -1_+€€TEST FOR SLEW TO EOF CODE (5)_$*MSOS V4.0*_^1_%SQN MORCI-*-1_#SKIP IF NOT SLEW_2*MSOS V4.0*_^1_%JMP* SLEW_)GO SLEW TO EOF_4*MSOS V4.0*_^1MORCI JMP* MORMC_(CHECK NEXT PARAMETER_.*MSOS V4.0*_^1NOTMC_"ENA_%2_^1_(LDQ-_$CALL,I_^1_(OUT_%REJECT-*_^1_%INP REJECT-*_^1_%AND- H07FF_K*MSOS V4.0_^1_%TRA Q_O*MSOS V4.0*_^1_%LDA- STATUS,I_H*MSOS V4.0*_^1_%AND- H0800_^1_%AAQ Q_O*MSOS V4.0*_^1_€€%STQ- STATUS,I_H*MSOS V4.0*_^1_(ENA_%0_G**MSOS 4.1**_^1_%JMP* MAKQ_^1TOMAKQ LDA- FLAG,I_'CHECK ILLEGAL HOLLERITH_^1_%SAZ TMAKQ_(PUNCH FLAG_^1_%ENA HOLRTH_^1_%JMP* ERROR_^1TMAKQ EQU TMAKQ(*)_G**MSOS 4.1**_^1_%RTJ+ RLAQ_)RELEASE A/Q CHANNEL_.**MSOS 4.1**_^1_%STQ- I_N**MSOS 4.1**_^1_%RTJ- (COMPRQ)_G**MSOS 4.1**_^1_%JMP FNR_L**MSOS 4.1**_^1_%EJT_]_^1***_"WRITE END OF FILE_^1_%SPC €€ 2_^1WEOF_#ENA_%0_3PUNCH EOF CARD-SET PHONY_^1_(STA-_$SEQ,I_/CLEAR SEQUENCE BASE_^1_(ENA_%CHKSUM_^1_(ADD-_$I_^1_(STA-_$CORE,I_^1_(INA_%1_^1_(STA-_$LASTP1,I_^1_(LDA-_$EOFCRD,I_^1_(ALS_%4_^1_(AND-_$HFFF0_^1_(STA-_$CHKSUM,I_^1_(LDA-_$BIT15_^1_(EOR-_$OFFSET,I_^1_(STA-_$OFFSET,I_^1_(ENA_%1_3SET WRITE AND OFFSET SWITCHES_^1_(STA-_$SWITCH,I_^1TTP4_!JMP TP4_^1_%SPC 2_^1***_"SET SEQUENCE€€ NUMBER TO ZERO_^1_%SPC 2_^1ZROSEQ STQ- SEQ,I_(CLEAR SEQUENCE COUNTER_,*MSOS V4.0*_^1_%JMP* NOTMC_(TERMINATE THIS REQUEST_,*MSOS V4.0*_^1_%SPC 2_^1***_"SLEW CARDS TO END OF FILE_^1_%SPC 2_^1SLEW_!LDA =N$8000_%BIT 15 INDICATES SLEW_-*MSOS V4.0_^1_%STA- SWITCH,I_H*MSOS V4.0_^1_%JMP* TTP4_L*MSOS V4.0_^1_%EJT_]_^1ERROR_"LDQ-_$LU,I_0CODE_^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_(LDQ-_$CALL,I_^1_%CLR A_O*MSOS V4.0_^1_(INP_%1_^1_(NOP_%0_^1_%ALS 4_O*MSOS V4.0_^1_%SAP 1_)SKIP IF NOT BIT 11_3*MSOS V4.0_^1_%ADD- BIT15_$CLEAR BIT 11 - SET BIT 12_,*MSOS V4.0_^1_%ALS 12_N*MSOS V4.0_^1_%STA- STATUS,I_!SAVE ADJUSTED STATUS_1*MSOS V4.0_^1_(ENA_%1_^1_(OUT_%1_^1_(NOP_%0_^1_%LDQ- I_^1_€€%RTJ- (AMONI)_^1SCHALM ADC $520A_(SCHD DOWN FOR ALARM_.**MSOS 4.1**_^1_%ADC ALMLLV_K***MSOS4.0_^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 1_N**MSOS 4.1**_^1_%STA- ERRETN,I_^1_%JMP* MAKQ_^1UMAKQ LDQ- ERRCOD,I_G**MSOS 4.1**_^1_%LDA- LU,I_)DO NOT LOG OR REPORT ERROR_'**MSOS 4.1**_^1_%SUB- DIAGLU,I_'ON DIAGNOST€€IC LU_/**MSOS 4.1**_^1_%SAZ NORPT_J**MSOS 4.1**_^1_%TRQ A_,DO NOT LOG MODE CHANGE ERRORS_#**MSOS 4.1**_^1_%AND- LPMSK+6_H**MSOS 4.1**_^1_%INA -RDPUER_H**MSOS 4.1**_^1_%SAZ NOLOG_J**MSOS 4.1**_^1_%RTJ+ LOG_*LOG ERROR IN EF_2**MSOS 4.1**_^1NOLOG JMP+ ALTDEV_I**MSOS 4.1**_^1NORPT JMP* TMAKQ_(GO TO COMPLETE REQUEST_+**MSOS 4.1**_^1MAKQ_!LDQ- ERRETN,I_^1_%SQZ 1_^1_%ENA UMAKQ-TOM€€AKQ_^1_%STA- RETURN,I_^1_(ENQ_%0_^1_%STQ- ERRETN,I_^1_%ENA -ORIDE_^1_%AND- SWITCH,I_^1_%STA- SWITCH,I_^1_%RTJ MAKEQ_^1_(LDQ-_$RETURN,I_^1_(JMP*_$TOMAKQ,Q_^1_%EJT_]_^1ASCII_#LDQ-_$BUFFAD,I_+GET A COLUMN_^1_)LDA-_$(ZERO),Q_^1_)ENQ_%0_^1_)JMP*_#TNVRT_/CONVERT IT TO HOLLERITH_^1ASCII1_!ALS_%8_^1_(EOR-_$H00FF_^1_(LDQ-_$CORE,I_^1_(STA-_$(ZERO),Q_^1_(TRQ_%A_^1_(SUB-_$LASTP1,I_^1_(SAN_%1€€_^1_(JMP*_$ASCII4_^1_)RAO-_$BUFFAD,I_+GET THE NEXT COLUMN_^1_)LDQ-_$BUFFAD,I_^1_)LDA-_$(ZERO),Q_^1_)ENQ_%ASCII2-ASCII1_^1TNVRT_#JMP_%CONVRT_-CONVERT IT AND COMBINE_^1ASCII2_!EOR-_$HFF00_^1_(LDQ-_$CORE,I_^1_(AND-_$(ZERO),Q_^1_)STA-_$(ZERO),Q_^1_(RAO-_%CORE,I_-INCREMENT CORE_^1_)LDA-_$CORE,I_^1_)SUB-_$LASTP1,I_+FINISHED_^1_)SAZ_%ASCII4-*-1_^1_)RAO-_$BUFFAD,I_+NO, FINISHED WITH THIS_^€€1_)LDA-_$BUFFAD,I_+CARD_^1_)SUB-_$BUFFER,I_^1_)INA_%-80_^1_)SAZ_%ASCII3-*-1_^1_)JMP*_$ASCII_.NO, DO REST OF CARD_^1ASCII3_"ENA_%FORMTD_-YES, FORMATTED_^1_)AND-_$SWITCH,I_^1_)SAN_%ASCII4-*-1_^1_)JMP_%FEEDCD_-NO, FEED ANOTHER CAR**MSOS 4.1**_^1ASCII4_"JMP_%DONE_/YES, FINSIHED_^1_%EJT_]_^1PCNVRT_!STQ-_$RETURN,I_,CONVERT THE_^1_(AND-_$H00FF_/CLEAR SLOP_^1_(TRA_%Q_3ASCII CODE_^1_(INA_%-€€$60_0IN A TO 12_^1_(SAP_%OUTRNG-*-1_*BIT HOLLERITH_^1_(INA_%$40_1LEAVE THE RESULT_^1_(SAP_%1_3IN A_^1OUTRNG_!ENQ_%$20_^1_%INQ -$20_K**MSOS 4.1**_^1_%LDA CDPC,Q_I**MSOS 4.1**_^1_(LDQ-_$BUFFAD,I_,STORE INTO_^1_(STA-_$(ZERO),Q_,BUFFER_^1_(RAO-_$BUFFAD,I_,INC BUFFER ADDRESS_^1_(LDQ-_$RETURN,I_^1_(JMP*_$PUNCH,Q_^1_%EJT_]_^1***_"PACK DATA INTO CARD READER'S BUFFER_^1_%SPC 2_^1PUT_$STQ€€-_$RETURN,I_^1_(TRA_%Q_^1_(ADQ-_$CHKSUM,I_^1_(STQ-_$CHKSUM,I_,THIS SUBROUTINE_^1_(LDQ-_$CYCLE,I_-ACCEPTS A WORD AS INPUT_^1_(JMP*_$PCYCL1,Q_,IT SEPERATES THIS WORD_^1PCYCL1_!ALS_%12_2IN TO 12 BIT COLUMNS_^1_(LDQ-_$BUFFAD,I_,AND STORES THEM INTO_^1_(STA-_$(ZERO),Q_+A PUNCH BUFFER._^1_(ALS_%12_^1_(AND-_$HFF00_^1_(STA-_$1,Q_^1_(ENQ_%PCYCL2-PCYCL1_^1PPEXIT_!STQ-_$CYCLE,I_^1_(LDQ-_$RETU€€RN,I_^1_(JMP*_$PUNCH,Q_^1PCYCL2_!STA-_$TEMP,I_^1_(AND-_$HFF00_^1_(ALS_%8_^1_(LDQ-_$BUFFAD,I_^1_(EOR-_$1,Q_^1_(STA-_$1,Q_^1_(LDA-_$TEMP,I_^1_(AND-_$H00FF_^1_(ALS_%4_^1_(STA-_$2,Q_^1_(ENQ_%PCYCL3-PCYCL1_^1_(JMP*_$PPEXIT_^1PCYCL3_!LDQ-_$BUFFAD,I_^1_(STA-_$3,Q_^1_(ALS_%4_^1_(AND-_$H000F_^1_(EOR-_$2,Q_^1_(STA-_$2,Q_^1_(INQ_%4_^1_(STQ-_$BUFFAD,I_^1_%ENQ 0_)RE-SET CYCLE TO ZERO_1*MSOS V4€€.0_^1_%STQ- CYCLE,I_I*MSOS V4.0_^1_%JMP* PPEXIT_#RETURN_?*MSOS V4.0_^1_%EJT_]_^1PUNCH LDQ- I_^1_%RTJ- (AMONI)_^1PNCHIT ADC $520A_(SCHCD DOWN FOR PUNCH_-**MSOS 4.1**_^1_%ADC PUNCMS_K***MSOS4.0_^1_%JMP- (ADISP)_^1PUNCMS STQ- I_^1_%ENA 0_N**MSOS 4.1**_^1_(STA-_$CYCLE,I_^1_(ENA_%BINASC_.IS THE REQUEST BINARY MODE_^1_(AND-_$SWITCH,I_^1_(SAZ_%PUNCH1-*-1_^1_'JMP*_$PUNCH6_.NO_^1PUNCH1_€€!ENA_%FORMTD_.YES,FORMATTED_^1_(AND-_$SWITCH,I_^1_(SAZ_%PUNCH5-*-1_^1_(JMP*_$PUNCH3_^1PUNCH5_!LDQ-_$CORE,I_.NO,PUT A WORD IN THE BUFFER_^1_(LDA-_$(ZERO),Q_^1_(ENQ_%PUNCH4-PUNCH_'/_3**MSOS 4.1**_^1TPUT_#JMP*_$PUT_^1_%SPC 2_^1***_"PUNCH4 - UNFORMATTED BINARY_^1***_,CHECKS FOR 80 WORD BUFFER FULL -_^1***_,OR ALL DATA PACKED,WHEN EITHER CONDITION_^1***_,HAS BEEN MET -_^1***_,CONTROL I€€S PASSED TO PNCH17.._^1_%SPC 1_^1PUNCH4 RAO- CORE,I_J*MSOS V4.0_^1_%LDA- BUFFER,I_!CHECK IF PUNCH BUFFER -_.*MSOS V4.0_^1_%SUB- BUFFAD,I_!HAS BEEN FILLED._5*MSOS V4.0_^1_%INA 80_N*MSOS V4.0_^1_%SAZ FULL80_#SKIP IF FULL CARD_4*MSOS V4.0_^1_%LDA- CORE,I_#CHECK IF ALL DATA HAS BEEN -_)*MSOS V4.0_^1_%SUB- LASTP1,I_!MOVED TO PUNCH BUFFER._/*MSOS V4.0_^1_%SAZ PNC69_$SKIP IF ALL DATA C€€ONVT'D_-*MSOS V4.0_^1_%JMP* PUNCH5_#PUT NEXT DATA WORD INTO BUFFER_'*MSOS V4.0_^1FULL80 ENA -80_'80 WORDS TO PUNCH_4*MSOS V4.0_^1_%STA- TEMP,I_J*MSOS V4.0_^1_%JMP* TFDCRD_#PUNCH CARD_;*MSOS V4.0_^1PNC69_"ENA_%CHEKSM+FORMTD+FIRST_^1_(EOR-_$SWITCH,I_^1_(STA-_$SWITCH,I_^1_(JMP*_$PNCH17_^1_%EJT_]_^1PUNCH6_!ENA_%FIRST_/ASCII PUNCH_^1_(AND-_$SWITCH,I_,FIRST CARD_^1_(SAZ_%PNC12-*-1_^1_(E€€NA_%FORMTD_.NO, FORMATTED_^1_(AND-_$SWITCH,I_^1_(SAN_%PNC16-*-1_^1_(LDA-_$CORE,I_.NO,LAST WORD_^1_(SUB-_$LASTP1,I_,PROCESSED_^1_(SAN_%PNC13-*-1_^1PNC16_"JMP_%DONE_0YES,FINISHED_^1PNC12_"ENA_%FIRST_/FIRST CARD-SET_^1_(EOR-_$SWITCH,I_,NOT FIRST_^1_(STA-_$SWITCH,I_^1PNC13_"LDQ-_$CORE,I_.PROCESS UPPER CHAR_^1_(LDA-_$(ZERO),Q_^1_(STA-_$TEMP,I_B**MSOS 4.1**_^1_(ARS_%8_^1_(ENQ_%PNCH7-PUNC€€H_^1TCNVRT_!JMP_%PCNVRT_^1PNCH7_"LDA-_$TEMP,I_.PROCESS LOWER_^1_(ENQ_%PNCH8-PUNCH_)CHAR_^1_(JMP*_$TCNVRT_^1_%SPC 2_^1***_"PNCH8 - FORM. OR UNFORM. ASCII_^1***_,CHECKS FOR 80 WORD BUFFER FULL -_^1***_,OR ALL DATA PACKED,WHEN EITHER CONDITION_^1***_,HAS BEEN MET -_^1***_,THE COMP. OF WORD COUNT IS SET IN 'TEMP'_^1***_,AND CONTROL IS PASSED TO 'FEEDCD'._^1_%SPC 1_^1PNCH8 RAO- CORE,€€I_J*MSOS V4.0_^1_%LDA- CORE,I_#CHECK IF ALL DATA PACKED_-*MSOS V4.0_^1_%SUB- LASTP1,I_H*MSOS V4.0_^1_%SAZ PNCH9_$PACKED ALL_;*MSOS V4.0_^1_%LDA- BUFFAD,I_!IS 80 WORD BUFFER FULL_/*MSOS V4.0_^1_%SUB- BUFFER,I_H*MSOS V4.0_^1_%INA -80_M*MSOS V4.0_^1_%SAN PNC10_$SKIP IF BUFF. IS NOT FULL_,*MSOS V4.0_^1_%ENA -80_'FULL 80 WORDS_8*MSOS V4.0_^1P8XX_!STA- TEMP,I_#COMP. OF WORD COUNT_2*M€€SOS V4.0_^1TFDCRD JMP FEEDCD_#PUNCH A CARD_9*MSOS V4.0_^1PNCH9 LDA- BUFFER,I_!CALCULATE WORD COUNT_1*MSOS V4.0_^1_%SUB- BUFFAD,I_H*MSOS V4.0_^1_%JMP* P8XX_%COMP. OF WORD COUNT TO TEMP._)*MSOS V4.0_^1PNC10 JMP* PNC13_$PACK NEXT WORD_7*MSOS V4.0_^1PUNCH3 LDQ- CORE,I_#FORMATTED BINARY_750*947_^1_%LDA- (ZERO),Q_#SET UP SEQUENCE NUMBER_/50*947_^1_%SUB =N$2050_#IS THIS A NAM BLOCK -_€€150*947_^1_%SAZ SEQXX_'YES - SET SEQ.BASE TO ZERO_+50*947_^1_%LDA- SEQ,I_'NO - GET NEXT SEQ.NUMBER_-50*947_^1_(AND-_$H00FF_/PUNCH SEQUENCE NUMBER_^1SEQXX STA- SEQ,I_M50*947_^1_(RAO-_$SEQ,I_^1_(ALS_%8_^1_(INA_%$50_1ADD 7,9 PUNCH_^1PNCH18_!ENQ_%PNCH12-PUNCH_^1_%JMP* TPUT_^1PNCH12_!ENA_%FIRST_/IS THIS THE FIRST CARD_^1_(AND-_$SWITCH,I_^1_(SAN_%PNCH16-*-1_^1_(ENA_%FIRST_/YES,RESET FI€€RST CARD_^1_(EOR-_$SWITCH,I_,SWITCH AND PUNCH_^1_(STA-_$SWITCH,I_,COMPLEMENTED LENGTH_^1_(LDA-_$CORE,I_^1_(SUB-_$LASTP1,I_^1_(ENQ_%PNCH13-PUNCH_^1_(JMP*_$TPUT_^1PNCH13_!LDQ-_$CORE,I_.PUNCH A WORD_^1_(LDA-_$(ZERO),Q_^1_(ENQ_%PNCH14-PUNCH_^1_(JMP*_$TPUT_^1PNCH14_!RAO-_$CORE,I_.INCREMENT CORE_^1_%SPC 2_^1***_"PNCH16 - FORMATTED BINARY_^1_%SPC 1_^1PNCH16 LDA- BUFFER,I_!CHECK IF BUFFE€€R IS FULL_.*MSOS V4.0_^1_%SUB- BUFFAD,I_H*MSOS V4.0_^1_%INA 80_N*MSOS V4.0_^1_%SAZ FUL80_$SKIP IF 80 WORD BUFF. IS FULL_(*MSOS V4.0_^1_%LDA- CORE,I_#ALL WORDS PACKED_5*MSOS V4.0_^1_%SUB- LASTP1,I_H*MSOS V4.0_^1_%SAZ PNCH15_#SKIP IF ALL PACKED_3*MSOS V4.0_^1_%JMP* PNCH13_#PACKED NEXT WORD_5*MSOS V4.0_^1FUL80 JMP* FULL80_#SET FOR CARD PUNCH_3*MSOS V4.0_^1PNCH15_!ENA_%CHEKSM_.YES,€€ HAS THE CHECKSUM_^1_(AND-_$SWITCH,I_,BEEN PUNCHED_^1_(SAN_%PNCH17-*-1_^1_(ENA_%CHEKSM_.NO, RESET CHECKSUM_^1_(EOR-_$SWITCH,I_^1_(STA-_$SWITCH,I_^1_(LDA-_$CHKSUM,I_,PUNCH THE CHECKSUM_^1_(TCA_%A_^1_(JMP*_$PNCH18_^1_%EJT_]_^1***_"PNCH17 - FORM. AND UNFORM. BINARY_^1***_,CHECK IS MADE FOR CYCLE = ZERO_^1***_,IF CYCLE IS ZERO ALL DATA HAS BEEN PACKED_^1***_,OR 80 WORD BUFFER IS FULL_^€€1***_,THE COMP. OF WORD COUNT IS SET INTO_^1***_,'TEMP' AND CONTOL IS PASSED TO 'FEEDCD'_^1***_,IF CYCLE IS NOT ZERO - A ZERO IS_^1***_,PACKED INTO THE BUFFER AND THE_^1***_,CHECK IS MADE AGAIN FOR CYCLE = ZERO_^1_%SPC 2_^1PNCH17 LDA- CYCLE,I_"ALL DATA HAS BEEN PACKED_-*MSOS V4.0_^1_%SAN PNCH19_#SKIP IF NOT CYCLE ZERO_/*MSOS V4.0_^1_%LDA- BUFFER,I_!GET COMP. OF WORD COUNT_.*MSOS €άV4.0_^1_%SUB- BUFFAD,I_H*MSOS V4.0_^1_%STA- TEMP,I_#OF NUMBER OF WORDS TO PUNCH_**MSOS V4.0_^1_%JMP* TFDCRD_#FEED A CARD FOR PUNCHING_-*MSOS V4.0_^1_%SPC 2_^1PNCH19_!ENA_%0_3NO, PUNCH A ZERO_^1_(JMP*_$PNCH18_^1_(END_^__άPCP026 CSY/ C54 P€1_%NAM CP026_(DECK-ID C54 MSOS 4.1_-SUMMARY-079_^1*_*HOLLERITH (026) CARD PUNCH TABLE_^1*_*1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_*SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_*COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%ENT CDPC_^1_%SPC 2_^1CDPC_!NUM_($000_0$20-SPACE_^1_(NUM_%$482_0$21-EXCLAMATION_^1_(NUM_%$006_0$22-QUOTES_^1_(NUM_%$806_0$23-NUMBER€€_^1_(NUM_%$442_0$24-DOLLAR_^1_(NUM_%$212_0$25-PERCENT_^1_(NUM_%$082_0$26-AMPERSAND_^1_(NUM_%$022_0$27-APOSTROPHE_^1_(NUM_%$222_0$28-OPENING PAREN._^1_(NUM_%$822_0$29-CLOSING PAREN._^1_(NUM_'$422_1$2A-ASTERISK_^1_(NUM_'$800_1$2B-PLUS_^1_(NUM_%$242_0$2C-COMMA_^1_(NUM_%$400_0$2D-MINUS_^1_(NUM_%$842_0$2E-PERIOD_^1_(NUM_%$300_0$2F-SLASH_^1_(NUM_%$200_0$30-ZERO_^1_(NUM_%$100_0$31-ONE_^1_€€(NUM_%$080_0$32-TWO_^1_(NUM_%$040_0$33-THREE_^1_(NUM_%$020_0$34-FOUR_^1_(NUM_%$010_0$35-FIVE_^1_(NUM_%$008_0$36-SIX_^1_(NUM_%$004_0$37-SEVEN_^1_(NUM_%$002_0$38-EIGHT_^1_(NUM_%$001_0$39-NINE_^1_(NUM_%$012_0$3A-COLON_^1_(NUM_%$40A_0$3B-SEMICOLON_^1_(NUM_%$80A_0$3C-LESS THAN_^1_(NUM_%$042_0$3D-EQUAL_^1_(NUM_%$00A_0$3E-GREATER THAN_^1_(NUM_%$882_0$3F-QUESTION MARK_^1_(NUM_%$206_0$40-AT€€_^1_(NUM_%$900_0$41-A_^1_(NUM_%$880_0$42-B_^1_(NUM_%$840_0$43-C_^1_(NUM_%$820_0$44-D_^1_(NUM_%$810_0$45-E_^1_(NUM_%$808_0$46-F_^1_(NUM_%$804_0$47-G_^1_(NUM_%$802_0$48-H_^1_(NUM_%$801_0$49-I_^1_(NUM_%$500_0$4A-J_^1_(NUM_%$480_0$4B-K_^1_(NUM_%$440_0$4C-L_^1_(NUM_%$420_0$4D-M_^1_(NUM_%$410_0$4E-N_^1_(NUM_%$408_0$4F-O_^1_(NUM_%$404_0$50-P_^1_(NUM_%$402_0$51-Q_^1_(NUM_%$401_0$52-R_^1_(N€VUM_%$280_0$53-S_^1_(NUM_%$240_0$54-T_^1_(NUM_%$220_0$55-U_^1_(NUM_%$210_0$56-V_^1_(NUM_%$208_0$57-W_^1_(NUM_%$204_0$58-X_^1_(NUM_%$202_0$59-Y_^1_(NUM_%$201_0$5A-Z_^1_(NUM_%$812_0$5B-OPENING BRACKET_^1_%NUM_($282_0$5C - REVERSE SLASH_^1_(NUM_%$412_0$5D-CLOSING BRACKET_^1_(NUM_%$406_0$5E-UP ARROW_^1_%NUM_($20A_0$5F - LEFT ARROW_^1_%END_]_^__VPCP029 CSY/ C55 P€1_%NAM CP029_(DECK-ID C55 MSOS 4.1_-SUMMARY-079_^1*_*EBCDIC (029) CARD PUNCH TABLE_^1*_*1700 MASS STORAGE OPERATING SYSTEM VERSION 4.1_^1*_*SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_*COPYRIGHT CONTROL DATA CORPORATION 1973_^1_%ENT CDPC_^1_%SPC 2_^1CDPC_!NUM_($000_0$20-SPACE_^1_%NUM $806_)$21-EXCLAMATION_^1_%NUM $0006_($22-QUOTES_^1_%NUM $042_)$23-NUMBER_^€€1_%NUM $442_)$24-DOLLAR_^1_%NUM $222_)$25-PERCENT_^1_%NUM $800_)$26-AMPERSAND_^1_%NUM $012_)$27-APOSTROPHE_^1_%NUM $812_)$28-OPENING PAREN._^1_%NUM $412_)$29-CLOSING PAREN._^1_%NUM $422_)$2A-ASTERISK_^1_%NUM $80A_)$2B-PLUS_^1_%NUM $242_)$2C-COMMA_^1_%NUM $400_)$2D-MINUS_^1_%NUM $842_)$2E-PERIOD_^1_%NUM $300_)$2F-SLASH_^1_%NUM $200_)$30-ZERO_^1_%NUM $100_)$31-ONE_^1_%N€€UM $080_)$32-TWO_^1_%NUM $040_)$33-THREE_^1_%NUM $020_)$34-FOUR_^1_%NUM $010_)$35-FIVE_^1_%NUM $008_)$36-SIX_^1_%NUM $004_)$37-SEVEN_^1_%NUM $002_)$38-EIGHT_^1_%NUM $001_)$39-NINE_^1_%NUM $082_)$3A COLON_^1_%NUM $40A_)$3B-COLON_^1_%NUM $822_)$3C-LESS THAN_^1_%NUM $00A_)$3D-EQUAL_^1_%NUM $20A_)$3E-GREATER THAN_^1_%NUM $206_)$3F-QUESTION MARK_^1_%NUM $022_)$40-AT_^1_%N€€UM $900_)$41-A_^1_%NUM $880_)$42-B_^1_%NUM $840_)$43-C_^1_%NUM $820_)$44-D_^1_%NUM $810_)$45-E_^1_%NUM $808_)$46-F_^1_%NUM $804_)$47-G_^1_%NUM $802_)$48-H_^1_%NUM_($801_0$49-I_^1_%NUM $500_)$4A-J_^1_%NUM $480_)$4B-K_^1_%NUM $440_)$4C-L_^1_%NUM $420_)$4D-M_^1_%NUM_($410_0$4E-N_^1_%NUM $408_)$4F-O_^1_%NUM $404_)$50-P_^1_%NUM $402_)$51-Q_^1_%NUM $401_)$52-R_^1_%NUM $2€L80_)$53-S_^1_%NUM $240_)$54-T_^1_%NUM $220_)$55-U_^1_%NUM $210_)$56-V_^1_%NUM $208_)$57-W_^1_%NUM $204_)$58-X_^1_%NUM $202_)$59-Y_^1_%NUM $201_)$5A-Z_^1_%NUM $882_)$5B-OPENING BRACKET_^1_%NUM $282_)$5C-REVERSE SLASH_^1_%NUM $482_)$5D-CLOSING BRACKET_^1_%NUM $406_)$5E-UP ARROW_^1_%NUM $212_)$5F-UNDERSCORE_^1_%END_]_^__LPCR029 CSY/ C53 P€1_%NAM CR029_(DECK-ID C53 MSOS 4.1_-SUMMARY-079_^1*_$CARD READER CONVERSION TABLE FOR 029(EBCDIC) CODES_^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*_$TABLE ENTRY POINT_^1_%ENT CDRD_^1_%SPC 2_^1CDRD_!NUM $3120_^1_%NUM $3332_^1_%NUM $3534_^1_%NUM $€€3736_^1_%NUM $3938_^1_%NUM $233A_^1_%NUM $2740_^1_%NUM $223D_^1_%NUM $2F30_^1_%NUM $5453_^1_%NUM $5655_^1_%NUM $5857_^1_%NUM $5A59_^1_%NUM $2C5C_^1_%NUM $5F25_^1_%NUM $3F3E_^1_%NUM $4A2D_^1_%NUM $4C4B_^1_%NUM $4E4D_^1_%NUM $504F_^1_%NUM $5251_^1_%NUM $245D_^1_%NUM $292A_^1_%NUM $5E3B_^1_%NUM $4126_^1_%NUM $4342_^1_%NUM $4544_^1_%NUM $4746_^1_%NUM $4948_^1_%€6NUM $2E5B_^1_%NUM $283C_^1_%NUM $212B_^1_%END_]_^__6PCR026 CSY/ C52 P€1_%NAM CR026_(DECK-ID C52 MSOS 4.1_-SUMMARY-079_^1*_$CARD READER HOLLERITH TO ASCII CONVERSION TABLE_^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 CDRD_)TABLE START_^1*_]_^1CDRD_!NUM $3120_^1_%NUM $3332_^1_%NUM $3534_^1_%NUM $3736_^1_%NUM€€ $3938_^1_%NUM $3D26_^1_%NUM $3A27_^1_%NUM $223E_^1_%NUM $2F30_^1_%NUM $5453_^1_%NUM $5655_^1_%NUM $5857_^1_%NUM $5A59_^1_%NUM $2C5C_^1_%NUM $2528_^1_%NUM $405F_^1_%NUM $4A2D_^1_%NUM $4C4B_^1_%NUM $4E4D_^1_%NUM $504F_^1_%NUM $5251_^1_%NUM $2421_^1_%NUM $5D2A_^1_%NUM $5E3B_^1_%NUM $412B_^1_%NUM $4342_^1_%NUM $4544_^1_%NUM $4746_^1_%NUM $4948_^1_%NUM $2E3F_^€*1_%NUM $5B29_^1_%NUM $233C_^1_%END_]_^__*PD17293 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_]_^__jPD42312 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_]_^__ΜPD17332 CSY/ C07 P€1_%NAM D17332_'DECK-ID C07 MSOS 4.1_-SUMMARY-079_^1*_$1733-2/856 MULTIPLE CARTRIDGE DISK SUBSYSTEM 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*_*THIS VERSION INCLUDES THE OVERLAY ROUTINE_^1*_*AND USES AN EXTERNAL DIAGNOSTIC ROUTINE (DKDIAG)._€€^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/SECTOR)_^1_%SPC 4_^1_%ENT I17332_'DRIVER INITIATOR_^1_%ENT C17332_'DRIVER CONTINUATOR_^1_%ENT E17332_'DRIVER ERROR ROUTINE_^1_%SPC 1_^1_%EXT LOG_*ERROR LOGGING ROUTINE_^1_%EXT COMPV4_'MAGNITUDE COM€€PARISON ROUTINE (IN TRVEC)_^1_%EXT P332D0_'UNIT 0 PHYSTB ADDRESS_^1_%SPC 2_^1_%EQU PLU(3)_^1_%EQU CLCKVA(1)_#CLOCK VALUE_^1_%EQU ZERO($22)_^1_%EQU WDSECM(5)_$MSB OF SYSTEM DIRECTORY ADDRESS_^1_%EQU WDSECL(6)_$LSB OF SYSTEM DIRECTORY ADDRESS_^1_%EQU AFNR($B5)_#ENTRY POINT TO FNR_^1_%EQU ASABS($BD)_"ENTRY POINT TO S PARAM. ABSOLUTIZING ROUTINE_^1_%EQU ACABS($BE)_"ENTRY POIN€€T TO C PARAM. ABSOLUTIZING ROUTINE_^1_%EQU ADISP($EA)_"ENTRY POINT TO DISPATCHER_^1_%EQU ACOMPC($B6)_!ENTRY POINT TO COMPLETION ROUTINE_^1_%EQU LPMSK(2)_^1_%EQU MASK9($45)_^1_%EQU NZERO($12)_"$FFFF_^1_%EQU ONEBIT($23)_!$0001_^1_%EQU FIXBIT($28)_!$0020_^1_%EQU AUTLOD(4)_#BIAS FOR AUTOLOAD AREA_^1_%EQU D18562(11773) SECTOR 0, DISK 1, 856-2_^1_%EQU D18564(23663) SECTOR 0, DI€€SK 1, 856-4_^1_%EQU ZROBIT($33)_!$FFFE_^1_%EQU CWAERR(37)_"CWA STATUS ERROR CODE_^1_%EQU CAERR(48)_#CONTROLLER ADDRESS STATUS ERROR_^1_%EQU DCERR(49)_#DRIVE ADDRESS STATUS ERROR_^1_%EJT_]_^1************************************************************************_^1*_]_^1*_$PHYSICAL DEVICE TABLE EQUIVALENCES_^1*_]_^1***************************************************************€€*********_^1_%SPC 3_^1_%EQU CLCK(4)_%DIAGNOSTIC CLOCK_^1_%EQU LUN(5)_'LOGICAL UNIT_^1_%EQU EPTR(6)_%LOC. OF CURRENT REQUEST PARAMETER LIST_^1_%EQU GENST(7)_$EQUIPMENT CODE_^1_%EQU SYST(8)_%SYSTEM STATUS_^1_%EQU RQST(9)_%REQUEST STATUS_^1_%EQU FWD(10)_%NEXT LOC. TO STORE OR OBTAIN DATA_^1_%EQU LWD(11)_%LAST LOCATION + 1 FOR DATA_^1_%EQU STAT(12)_$LAST VALUE OF EQUIPMENT ST€€ATUS_^1_%EQU FILEAD(15)_"SECTOR NUMBER OR FNR RETURN_^1_%EQU FCONN(16)_#CONNECT, SELECT INTERRUPTS, NO COMPARE FLAG_^1_%EQU TEMSEC(17)_"USED BY WORD ADDRESS PORTION_^1_%EQU ECALL1(18)_"**********_^1_%EQU ECALL2(19)_"* RESERVED FOR_^1_%EQU ECALL3(20)_"* OVERLAY ROUTINE_^1_%EQU ECALL4(21)_"**********_^1_%EQU OTHER(22)_#LINK FOR MULTIPLE PHYSTBS_^1_%EQU EXTRA(23)_#RETURN AD€€DRESS FOR DATA TRANSFER_^1_%EQU DISK1(24)_#FIRST SECTOR ADDRESS ON DISK 1_^1_%EQU FUNCT(25)_#LAST DATA TRANSFER FUNCTION_^1_%EQU BUFSIZ(26)_"BUFFER SIZE FOR SPLIT TRANSFERS_^1_%EQU CYLADR(27)_"CYLINDER ADDRESS FOR TRANSFER_^1_%EQU SEKBIT(28)_"MASK FOR THIS UNIT'S SEEK COMPLETE BIT_^1_%EQU ABUFF(29)_#ADDRESS OF 96 WORD BUFFER_^1_%EQU TEMFWD(30)_"USED BY WORD ADRESS PORTION_^1€€_%EQU TEMLWD(31)_"USED BY WORD ADDRESS PORTION_^1_%EQU WORDNO(32)_"USED BY WORD ADDRESS PORTION_^1_%EQU TEMREQ(33)_"REQUEST CODE_^1_%EQU PRILVL(34)_"REQUEST PRIORITY_^1_%EQU SVFLAD(35)_"START SECTOR FOR COMPARE OR RETRY_^1_%EQU SAVFWD(36)_"FWA OF TRANSFER FOR COMPARE OR RETRY_^1_%EQU ERCONT(37)_"ERROR COUNTER_^1_%EQU FDATAF(38)_"DATA TRANSFER FUNCTION CODE_^1_%EQU BUFSEC(3€€9)_"NUMBER OF SECTOR CURRENTLY IN BUFFER_^1_%EQU STATS2(40)_"LAST VALUE OF CYLINDER ADDRESS STATUS_^1_%EQU STATS3(41)_"LAST VALUE OF CWA STATUS_^1_%EQU STATS4(42)_"LAST VALUE OF CHECKWORD STATUS_^1_%EQU STATS5(43)_"LAST VALUE OF DRIVE CYLINDER STATUS_^1_%EJT_]_^1*********************************************************************_^1*_]_^1*_$I N I T I A T O R_^1*_]_^1**********€€***********************************************************_^1_%SPC 3_^1I17332 STQ- I_,SAVE ADDRESS OF PHYSTB_^1_%LDA- OTHER,I_%PICK UP PHYSTB THREAD_^1_%EOR- I_,CHECK FOR MULTIPLE DISKS_^1_%SAN DK1A_)SKIP IF YES_^1_%JMP* DK_+NO_^1_%SPC 2_^1DK1A_!LDA DATFLG_'DATA TRANSFER FLAG_^1_%SAZ DK_+SKIP IF NO DATA TRANSFER IN PROGRESS_^1_%LDA- RQST,I_'SET "WANT IN" BIT_^1_%AND- ZROBIT+2€€_$IN_^1_%EOR- ONEBIT+2_$THIS UNIT'S_^1_%STA- RQST,I_'PHYSTB_^1_%JMP- (ADISP)_^1_%SPC 2_^1DK_#RTJ- (AFNR)_'CHECK FOR A REQUEST ON THIS UNIT_^1_%JMP* CHECK_(NONE, SCAN FOR REQUESTS ON OTHER UNITS_^1_%LDA- FCONN,I_%PICK UP CONNECT CODE_^1_%ARS 9_,CONNECT CODE TO BITS 0,1_^1_%AND- LPMSK+2_%ONLY CONNECT CODE_^1_%TRA Q_^1_%LDA- ONEBIT,Q_^1_%STA- SEKBIT,I_$SET UP SEEK COMPLETE BIT MASK€€_^1_%LDQ- GENST,I_%PICK UP EQUIPMENT CODE_^1_%LDA- FCONN,I_%PICK UP CONNECT CODE_^1_%OUT REJECT-*_$CONNECT TO DISK_^1_%RTJ STATUS_'UPDATE STATUS WORDS, RETURN WITH STATUS 1_^1_%ALS 3_,DISK TYPE BIT TO A15_^1_%LDQ =XD18562_$SECTOR 0, DISK 1, 856-2_^1_%SAM DK2_*SKIP IF 856-2_^1_%LDQ =XD18564_$SECTOR 0, DISK 1, 856-4_^1DK2_"STQ- DISK1,I_%SET UP DISK1,I_^1_%LDA- LWD,I_^1_%LDQ- FW€€D,I_^1_%RTJ COMPV4_'CHECK MAGNITUDES_^1_%SAM NOTOK_(LWD.LT.FWD_^1_%SAN LENOK_(LWD.GT.FWD_^1NOTOK LDA- FWD,I_(MAKE LWD G.T. FWD_^1_%INA 1_^1_%STA- LWD,I_^1LENOK LDQ- 6,I_*PICK UP THE FWA OF REQUEST PARAMETER LIST_^1_%LDA- (ZERO),Q_^1_%STA- TEMREQ,I_$SAVE THE REQ._^1_%ARS 4_,DROP COMPLETION PRIORITY_^1_%AND- NZERO-12_$$000F - SAVE REQUEST PRIORITY_^1_%STA- PRILVL,I_(FOR DRIVER€€_^1_%LDA- TEMREQ,I_$RESTORE REQUEST_^1_%AND =N$3E00_%UNPACK THE REQUEST CODE_^1_%STA- TEMREQ,I_$SAVE THE REQUEST CODE_^1_%ARS 9_^1_%INA -14_*CHECK FOR MOTION REQUEST_^1_%SAN NOTMC_(SKIP IF NOT_^1_%STA- FWD,I_^1_%STA- LWD,I_^1_%JMP* DONE_)IGNORE MOTION REQUEST_^1NOTMC LDA- TEMREQ,I_^1_%SAN CHKREQ_'SKIP IF NOT A SYSTEM DIRECTORY REQUEST_^1_%LDA- WDSECL,Q_%PICK UP LSB OF SECTOR €€ADDRESS_^1_%LDQ- WDSECM,Q_%PICK UP MSB OF SECTOR ADDRESS_^1_%ALS 1_^1_%LRS 1_-CONVERT TO ONE WORD_^1_%INA AUTLOD_'BIAS OVER AUTOLOAD AREA_^1_%STA- FILEAD,I_$SAVE AS SECTOR NUMBER_^1_%ENQ DONE-LENOK_#CALCULATE RETURN ADDRESS_^1_%JMP* READOP_^1CHKREQ AND- ONEBIT+11_#($0800) CHECK IF FORMAT = READ/WRITE_^1_%SAN NORMAL_'YES, NORMAL FOR DISK_^1_%JMP LIKDUM_'NO LOOK LIKE A DRUM - €€SECTOR = ONE WORD_^1NORMAL RTJ- (ASABS)_%ABS. S PARAM. (ADDR. OF WHERE TRANSFER BEGINS)_^1_%TRA Q_^1_%LDA- 2,Q_*PICK UP LSB_^1_%LDQ- 1,Q_+PICK UP MSB_^1_%ALS 1_^1_%LRS 1_-CONVERT TO ONE WORD_^1_%SAZ 1_,DO NOT BIAS IF SECTOR ZERO_^1_%INA AUTLOD_'BIAS OVER AUTOLOAD AREA_^1_%STA- FILEAD,I_$STORE IN PHYSTB_^1_%LDQ- RQST,I_'PICK UP WORD 9 (ESTAT1) OF PHYSTB_^1_%LRS 1_^1_%SAP NO1A€€_)SKIP IF FREAD REQUEST_^1_%JMP* FWRITE_^1NO1A_!RTJ CKOVRL_'MOVE PARAMETERS IF OVERLAY REQUEST_^1_%ENQ DONE-LENOK_"CALCULATE RETURN ADDRESS_^1_%JMP* READOP_'PROCESS READ REQUEST_^1FWRITE ENQ DONE-LENOK_"CALCULATE RETURN ADDRESS_^1_%JMP* WRITOP_'DO THE WRITE OPERATION_^1_%EJT_]_^1DONE_!CLR A_^1_%STA- ERCONT,I_$CLEAR ERROR COUNTER_^1_%LDA- FCONN,I_%PICK UP CONNECT CODE_^1_%AND- NZ€€ERO+9_%SAVE UNIT NUMBER ONLY_^1_%EOR- ONEBIT+7_$SET DESELECT BIT_^1_%LDQ- GENST,I_%PICK UP EQUIPMENT CODE_^1_%OUT REJECT-*_$DISCONNECT FROM UNIT_^1_%RTJ- (ACOMPC)_$COMPLETE THE REQUEST_^1_%JMP* DK_+CHECK FOR ANOTHER REQUEST ON THIS UNIT_^1_%EJT_]_^1************************************************************************_^1*_]_^1*_$CHECK ALL PHYSTBS FOR A UNIT THAT WANTS IN_^1*_]_^€€1************************************************************************_^1_%SPC 3_^1CHECK LDA- OTHER,I_%PICK UP FIRST THREAD_^1CHECK1 TRA Q_^1_%SUB- I_,IS THIS END OF CHAIN_^1_%SAZ CHECK4_'SKIP IF YES_^1_%LDA- RQST,Q_'SEE IF THIS UNIT WANTS IN_^1_%AND- ONEBIT+2_^1_%SAN CHECK3_'IT DOES, GO SERVICE IT_^1_%LDA- OTHER,Q_%GET NEXT UNIT_^1_%JMP* CHECK1_'CHECK IT_^1CHECK4 LDQ SEKD€€ON_'SEEKS COMPLETED FLAG_^1_%SQZ CHECK2_'SKIP IF NO DATA TRANSFERS TO START_^1_%JMP CHKPRI_'CHECK PRIORITYS ON UNITS DONE SEEKING_^1CHECK2 JMP- (ADISP)_%EXIT TO DISPATCHER_^1CHECK3 STQ- I_,SET I REGISTER TO UNIT THAT WANTS IN_^1_%JMP* DK_+GO INITIATE REQUEST_^1_%SPC 5_^1READOP STQ- EXTRA,I_%SAVE RETURN ADDRESS_^1_%ENA 3_,SET A REG. TO READ FUNCTION-1_^1_%JMP* RD2_^1WRITOP STQ- €€EXTRA,I_%SAVE RETURN ADDRESS_^1_%ENA 2_,SET A REG TO A WRITE FUNCTION-1_^1RD2_"STA- FUNCT,I_%SAVE DATA XFER FUNCTION FOR ERROR RETRY_^1RETRY ADD- GENST,I_%ADD EQUIP CODE ($0XX1)_^1_%STA- FDATAF,I_$DATA TRANSFER FUNCTION CODE_^1_%JMP* SECFIL_'BEGIN THE TRANSFER_^1_%EJT_]_^1***********************************************************************_^1*_]_^1*_$CONVERT SECTOR TO FILE ADD€€RESS_^1*_]_^1***********************************************************************_^1_%SPC 3_^1SECFIL LDA- FILEAD,I_$PICK UP THE SECTOR NUMBER FOR TRANSFER_^1_%STA- SVFLAD,I_$SAVE FOR COMPARE OR ERROR RETRY_^1_%LDQ- DISK1,I_%IS FIRST SECTOR ON DISK 0 OR 1 ?_^1_%RTJ COMPV4_'COMPARE MAGNITUDES_^1_%SAP TBL2_)SKIP IF REQUEST STARTS ON DISK 1_^1_%CLR A_^1_%STA- CYLADR,I_$CLEAR THE€€ FILE ADDRESS LOCATION_^1_%LDA- FILEAD,I_$PICK UP THE STARTING SECTOR ADDRESS_^1CONVRT STA* SAVSEC_'SAVE SECTOR WE WANT TO SEEK TO_^1_%CLR Q_^1_%DVI =N29_)DIVIDE SYSTEM SECTOR BY SECTORS/TRACK_^1_%QLS 10_+Q = SECTOR_^1_%LLS 6_,A = CYL, TRACK AND SECTOR_^1_%ADD- CYLADR,I_$ADD DISK INDICATOR_^1_%STA- CYLADR,I_$SAVE AS FILE ADDRESS_^1_%JMP* CHKLEN_'CHECK THE LENGTH OF THE DATA TRA€€NSFER_^1_%SPC 3_^1TBL2_!LDA- FIXBIT_'$0020 DISK 1 INDICATOR_^1_%STA- CYLADR,I_$STORE IN FILE ADDRESS LOCATION_^1_%LDA- FILEAD,I_$PICK UP THE STARTING SECTOR ADDRESS_^1_%SUB- DISK1,I_%LENGTH OF DISK 0_^1_%JMP* CONVRT_'CONVERT TO A SEEK FUNCTION_^1_%SPC 5_^1REJECT JMP* REJCT1_'INTERNAL REJECT_^1_%JMP EXTRJT_'EXTERNAL REJECT_^1REJCT1 JMP INTRJT_^1_%EJT_]_^1***********************€€************************************************_^1*_]_^1*_$CHECK THE LENGTH OF THE TRANSFER_^1*_]_^1*********************************************************************_^1_%SPC 3_^1CHKLEN LDA- LWD,I_(PICK UP LWA+1 OF TRANSFER_^1_%LDQ- FWD,I_(PICK UP FWA OF TRANSFER_^1_%RTJ COMPV4_'GET LENGTH OF TRANSFER_^1_%CLR Q_^1_%DVI =N96_)DIVIDE LENGTH INTO SECTORS_^1_%SQN CKLEN1_'SKIP €€IF A REMAINDER_^1_%INA -1_+DECREMENT TO GET CORRECT LENGTH_^1CKLEN1 ADD* SAVSEC_'ADD STARTING SECTOR_^1_%STA* LSTSEC_'SAVE ADDRESS OF LAST SECTOR_^1_%LDA- CYLADR,I_$PICK UP THE FILE ADDRESS_^1_%AND- ONEBIT+5_$CHECK FIXED DISK BIT_^1_%SAZ CKLEN3_'SKIP IF TRANSFER STARTS ON DISK 0_^1_%JMP* SEEKOP_'PERFORM TRANSFER_^1CKLEN3 LDA* LSTSEC_'LAST SECTOR OF TRANSFER_^1_%SUB- DISK1,I_%FIRS€€T SECTOR ON DISK 1_^1_%SAP CKLEN4_'SKIP IF TRANSFER GOES ONTO DISK 1_^1_%JMP* SEEKOP_'PERFORM TRANSFER_^1CKLEN4 LDA- DISK1,I_%FIRST SECTOR ON DISK 1_^1_%STA- FILEAD,I_$UPDATE FILE ADDRESS FOR NEXT TRANSFER_^1_%SUB* SAVSEC_'SUBTRACT STARTING SECTOR_^1_%MUI =N96_)COMPUTE LENGTH OF DISK 0 TRANSFER_^1_%STA- BUFSIZ,I_$STORE FOR LOAD BUFFER FUNCTION_^1_%JMP* SEEKOP_'BEGIN TRANSFER_^1_%€€SPC 3_^1LSTSEC NUM 0_,COMPUTED LAST SECTOR OF TRANSFER_^1SAVSEC NUM 0_,FIRST SECTOR OF TRANSFER_^1_%EJT_]_^1***********************************************************************_^1*_]_^1*_$S E E K_!( L O A D_!A D D R E S S )_!O P E R A T I O N_^1*_]_^1***********************************************************************_^1_%SPC 3_^1SEEKOP LDQ- GENST,I_%EQUIPMENT CODE_^1_%LD€€A- FCONN,I_%DIRECTOR FUNCTION SELECT BITS_^1_%OUT REJECT-*_$SELECT THE UNIT_^1SEEK0 RTJ* STATUS_'UPDATE STATUS WORDS, RETURN WITH STATUS 1_^1_%AND- MASK9_(SAVE ON CYLINDER AND READY_^1_%SAN SEK1A2_'CONTINUE CHECKING_^1_%JMP* REJECT_'DEVICE NOT READY_^1SEK1A2 AND- ONEBIT+3_$BIT 3 (ON CYLINDER)_^1_%SAN SEK1A1_'SKIP IF ON-CYLINDER_^1_%LDA- STAT,I_'STATUS_^1_%AND- ONEBIT+1_$$0002 €€TEST FOR BUSY_^1_%SAN SEK1A3_'SKIP IF BUSY_^1_%JMP* REJECT_'DRIVE IS NOT OPERATIONAL_^1SEK1A3 JMP* SEEK0_(DRIVE IS POSITIONING_^1SEK1A1 LDA- CYLADR,I_$PICK UP NEW ADDRESS_^1_%INQ 1_,SET Q TO SEEK (LOAD ADDRESS) FUNCTION ($0XX2)_^1_%OUT REJECT-*_$SEEK_^1_%INQ -1_+SET Q TO XXX1_^1_%INP REJECT-*_$TAKE STATUS_^1_%AND- ONEBIT+3_$CHECK FOR ON-CYLINDER_^1_%SAZ SEK1A4_'SKIP IF HEADS €€MOVED_^1_%JMP LOADBF_'GO TO DATA TRANSFER_^1SEK1A4 ENA $18_*EOP + ALARM_^1_%OUT REJECT-*_$SELECT INTERRUPTS_^1_%ENA CLCKVA_'VALUE FOR CLOCK_^1_%STA- CLCK,I_'STORE IN PHYSTB_^1_%LDA- SEKBIT,I_$SET THIS UNITS BIT_^1_%TCA A_4IN_^1_%AND* SEKMSK_'SEEK COMPLETED MASK_^1_%EOR- SEKBIT,I_^1_%STA* SEKMSK_^1_%JMP* CHECK_(CHECK FOR MORE REQUESTS_^1_%EJT_]_^1*******************************€€**************************************_^1*_]_^1*_$C O N T I N U A T O R_^1*_]_^1*********************************************************************_^1_%SPC 3_^1C17332 STQ- I_,SAVE PHYSTB ADDRESS_^1_%LDQ- GENST,I_%PICK UP EQUIPMENT CODE_^1_%INQ 4_^1_%INP REJECT-*_^1_%AND* SEKMSK_^1_%STA* SEKDON_'SAVE SEEK COMPLETES_^1_%INQ -4_^1_%LDA* DATFLG_'CHECK IF A DATA TRANSFER IS IN PRO€€GRESS_^1_%SAZ CONT1_(SKIP IF NONE_^1_%STA- I_,SET I TO UNIT WITH DATA TRANSFER_^1_%RTJ* STATUS_'UPDATE STATUS WORDS, RETURN WITH STATUS 1_^1_%AND- ONEBIT+1_$BUSY STATUS BIT_^1_%SAZ DATA1_(CONTROLLER NOT BUSY, INTERRUPT OK_^1_%JMP* GHOSTE_'REENABLE INTERRUPTS AND EXIT_^1CONT1 LDA* SEKMSK_'CHECK FOR SEEKS IN PROGRESS_^1_%SAN CONT1A_'SKIP IF THERE ARE SOME_^1_%JMP* GHOSTD_'DISABLE€€ INTERRUPTS AND EXIT_^1CONT1A LDA* SEKDON_'PICK SEEK COMPLETES_^1_%SAN CONT1B_'SKIP IF THERE ARE SOME_^1_%JMP* GHOSTE_'REENABLE INTERRUPTS AND EXIT_^1CONT1B STA* SEKDON_'SAVE SEEKS COMPLETED_^1_%ENA 2_^1_%OUT REJECT-*_$CLEAR INTERRUPTS_^1_%JMP* CHKPRI_'CHECK PRIORITYS_^1DATA1 ENA 2_^1_%OUT REJECT-*_$CLEAR INTERRUPT_^1_%CLR A_^1_%STA* DATFLG_'CLEAR DATFLG_^1_%ENA -1_^1_%STA-€€ CLCK,I_'CLEAR CLOCK WORD_^1_%LDA- STAT,I_'PICK UP THE STATUS_^1_%AND =N$EF60_%UNPACK THE ERROR BITS FROM THE STATUS_^1_%SAZ CONT2_(SKIP IF NO ERROR_^1_%JMP DETERR_'DETERMINE ERROR_^1_%EJT_]_^1************************************************************************_^1*_]_^1*_$CHECK ALL DEVICE STATUS AGAINST EXPECTED VALUES_^1*_]_^1************************************************€€************************_^1CONT2 LDA- STATS3,I_$PICK UP FINAL CORE ADDRESS_^1_%EOR- FWD,I_(CHECK AGAINST FINAL ADDRESS EXPECTED_^1_%SAZ CONT2A_'SKIP IF SAME_^1_%ENA CWAERR_'ERROR CODE TO A_^1_%JMP DKDIA1_'REPORT ERROR_^1CONT2A LDA- STATS2,I_$PICK UP FINAL CYLINDER ADDRESS STATUS_^1_%EOR- CYLADR,I_$CHECK AGAINST EXPECTED_^1_%SAZ CONT2B_'SKIP IF SAME_^1_%ENA CAERR_(ERROR CODE T€€O A_^1_%JMP DKDIA1_'REPORT ERROR_^1CONT2B LDA- CYLADR,I_$PICK UP EXPECTED CYLINDER ADDRESS STATUS_^1_%ENQ $5F_^1_%LAQ Q_,SAVE HEAD AND SECTOR IN Q_^1_%SQN CONT2C_'SKIP IF CYLINDER OK_^1_%SUB- ONEBIT+7_$DECREMENT CYLINDER BY ONE_^1CONT2C EOR- STATS5,I_$CHECK AGAINST ACTUAL DRIVE CYLINDER_^1_%AND- NZERO+7_%SAVE ONLY CYLINDER BITS_^1_%SAZ CONT3_(SKIP IF NO ERROR_^1_%ENA DCERR_(E€€RROR CODE TO A_^1_%JMP* DKDIA1_'REPORT ERROR_^1_%EJT_]_^1CONT3 LDA- FCONN,I_%CHECK IF COMPARE REQUESTED_^1_%SAM CONT4_(NO, BYPASS COMPARE_^1_%LDA- FDATAF,I_$PICK UP LAST DATA TRANSFER FUNCTION_^1_%AND- LPMSK+3_%GET 'D' FIELD_^1_%INA -3_+CHECK FOR WRITE COMPLETION_^1_%SAN CONT4_(SKIP IF LAST OPERATION WAS NOT WRITE_^1_%LDA- SVFLAD,I_$PICK UP ORIGINAL FILE ADDRESS_^1_%STA- FILEAD€€,I_$RESTORE_^1_%LDA- SAVFWD,I_$PICK UP ORIGINAL FWD_^1_%STA- FWD,I_(RESTORE_^1_%LDA- GENST,I_%PICK UP EQUIP CODE_^1_%INA 4_,SET TO COMPARE FUNCTION_^1_%STA- FDATAF,I_^1_%JMP SECFIL_'REPEAT TRANSFER BUT COMPARE THIS TIME_^1CONT4 LDA- LWD,I_(PICK UP LWA+1 OF REQUEST_^1_%LDQ- FWD,I_(PICK UP LWA+1 OF REQUEST_^1_%RTJ COMPV4_'GET DIFFERENCE_^1_%SAZ CONT5_(SKIP IF REQUEST COMPLETE_^1€€_%JMP SECFIL_'DO SECOND PART OF SPLIT TRANSFER_^1CONT5 LDQ- EXTRA,I_%PICK UP RETURN ADDRESS_^1_%JMP LENOK,Q_%RETURN TO SENDER_^1_%SPC 3_^1GHOSTD ENA 2_,CLEAR INTERRUPT FUNCTION_^1_%JMP* GHOST_^1GHOSTE ENA $18_*SELECT EOP, ALARM INTERRUPTS_^1GHOST OUT 1_,CLEAR GHOST INTERRUPT_^1_%NOP 0_^1_%JMP- (ADISP)_%EXIT_^1_%EJT_]_^1******************************************************€€******************_^1*_]_^1*_$SAVE ALL DEVICE STATUS IN PHYSTB, RETURN WITH STATUS 1_^1*_]_^1************************************************************************_^1_%SPC 5_^1STATUS NUM 0_^1_%LDQ- GENST,I_%PICK UP EQUIPMENT CODE_^1_%INP DEVERR-*_$GET STATUS 1_^1_%STA- STAT,I_'SAVE_^1_%INQ 1_^1_%INP DEVERR-*_$GET STATUS 2_^1_%STA- STATS2,I_$SAVE IN PHYSTB_^1_%INQ 1_^1_%INP €€ DEVERR-*_$GET STATUS 3_^1_%STA- STATS3,I_$SAVE IN PHYSTB_^1_%INQ 1_^1_%INP DEVERR-*_$GET STATUS 4_^1_%STA- STATS4,I_$SAVE IN PHYSTB_^1_%INQ 1_^1_%INP DEVERR-*_$GET STATUS 5_^1_%STA- STATS5,I_$SAVE IN PHYSTB_^1_%LDA- STAT,I_'PICK UP STATUS 1_^1_%LDQ- GENST,I_%EQUIPMENT CODE TO Q_^1_%JMP* (STATUS)_$RETURN_^1_%EJT_]_^1**************************************************************€€**********_^1*_]_'*_^1*_$CHECK THE PRIORITYS ON THE UNITS THAT HAVE COMPLETED SEEKING_"*_^1*_]_'*_^1************************************************************************_^1_%SPC 3_^1DATFLG NUM 0_,DATA TRANSFER FLAG_^1PRINUM NUM 0_,CURRENT HIGHEST PRIORITY NO._^1PRIADR NUM 0_,ADDRESS OF HIGH PRIORITY UNIT PHYSTB_^1SEKDON NUM 0_,SEEK COMPLETE STATUS_^1SEKMSK NUM 0_,MASK FOR €€SEEK COMPLETE STATUS_^1_%SPC 3_^1CHKPRI ENA -1_^1_%STA* PRINUM_'CURRENT HIGHEST PRIORITY NO._^1_%LDA- 0_,TWO WORD INSTRUCTION_^1UNIT0 ADC P332D0_'ADDRESS OF UNIT 0 PHYSTB_^1_%STA- I_,RESET I REGISTER FOR PRIORITY SCAN_^1_%LDQ* SEKDON_'SEEK COMPLETED BITS TO Q-REG_^1*_]_^1*_*FIND A UNIT THAT HAS COMPLETED SEEKING_^1*_]_^1SEEK_!LRS 1_,SEEK COMPLETE BIT TO A REG._^1_%STQ* SEKDON_€€'SAVE SEEKS COMPLETED_^1_%SAP SEEK4_(SKIP IF THIS UNIT NOT DONE SEEKING_^1_%JMP* SEEK5_(DONE - CHECK PRIORITY OF THIS UNIT_^1SEEK4 LDQ- OTHER,I_%ADDRESS OF NEXT PHYSTB_^1_%TRQ A_^1_%SUB* UNIT0_(ADDRESS OF UNIT 0 PHYSTB_^1_%SAN SEEK9_(SKIP IF NOT END OF THREAD_^1_%JMP* SEEK6_(PROCESS INTERRUPT ON HIGHEST PRIORITY UNIT_^1SEEK9 STQ- I_^1_%LDQ* SEKDON_'RESTORE Q REGISTER_^1_%JMP* €€SEEK_)CHECK NEXT UNIT_^1_%EJT_]_^1*_]_^1*_*SEE IF THIS UNITS PRIORITY IS HIGHER THAN LAST_^1*_]_^1SEEK5 LDA* PRINUM_'PICK UP HIGHEST PRIORITY SO FAR_^1_%SUB- PRILVL,I_$SUBTRACT THIS UNIT'S PRIORITY_^1_%SAM SEEK7_(SKIP IF THIS UNIT'S PRIORITY HIGHER_^1_%JMP* SEEK4_(GO BACK TO CHECK REST_^1SEEK7 LDA- PRILVL,I_$PRIORITY LEVEL FOR THIS UNIT_^1_%STA* PRINUM_'SAVE IT AS CURRENT HIGHES€€T PRIORITY_^1_%LDA- I_,PHYSTB ADDRESS_^1_%STA* PRIADR_'ADDRESS OF CURRENT HIGHEST PRIORITY PHYSTB_^1_%JMP* SEEK4_(CHECK IF DONE_^1*_]_^1*_$PROCESS SEEK INTERRUPT ON HIGHEST PRIORITY UNIT_^1*_]_^1SEEK6 LDQ* PRIADR_'ADDRESS OF HIGHEST PRIORITY PHYSTB_^1_%STQ- I_^1_%LDA- SEKBIT,I_$CLEAR THIS UNIT'S BIT_^1_%TCA A_4IN_^1_%AND* SEKMSK_'SEEK COMPLETED MASK_^1_%STA* SEKMSK_^1_%ENA -1_^1€€_%STA- CLCK,I_'CLEAR CLOCK WORD_^1_%LDQ- GENST,I_%DIRECTOR FUNCTION_^1_%LDA- FCONN,I_%DIRECTOR FUNCTION SELECT BITS %0X1A<_^1_%OUT DEVERR-*_$SELECT THE UNIT_^1_%RTJ* STATUS_'UPDATE STATUS WORDS, RETURN WITH STATUS 1_^1_%AND =N$8420_%CHECK FOR SEEK TYPE ERRORS ONLY_^1_%SAN SEKERR_'SKIP IF AN ERROR ON SEEK_^1_%JMP* DATA_)NO ERROR_^1SEKERR JMP* DETERR_'DIAGNOSE ERROR STATUS_^1_%EJ€€T_]_^1**************************************************************_^1*_[*_^1*_!B I T_!P O S I T I O N_!I N_!S T A T U S_!W O R D_"*_^1*_[*_^1* -------------------------------------------------------- *_^1*_!15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0_#*_^1* -------------------------------------------------------- *_^1*_!D_!P_!S_!8_!C_!A_!L C P N A E O I B R_€€#*_^1*_!R_!R_!T_!5_!O_!D_!O H R O L N N N U E_#*_^1*_!I_!O_!O_!6_!N_!D_!S E O_#A D_#T S A_#*_^1*_!V_!T_!R_!-_!T_!R_!T C T C R_#C E Y D_#*_^1*_!E_!E_!A_!2_!R_!E_$K E O M O Y R_#Y_#*_^1*_%C_!G_%O_!S_!D W C M_#F L R_**_^1*_!S_!T_!E_!C_!L_!S_!A O T P_'I U_**_^1*_!E_*O_!L_%T R E A_#O N P_**_^1*_!E_!F_!P_!N_!E_!E_!A D D R_#P D T_**_^1*_!K_!A_€€!A_!N_!R_!R_+E_#E E_-*_^1*_%U_!R_!E_%R_$E_*R R_-*_^1*_!E_!L_!I_!C_!S_!O_$R_*A_0*_^1*_!R_!T_!T_!T_!E_!R_$R_*T_0*_^1*_!R_%Y_!E_!E_)O_*I_0*_^1*_!O_*D_!K_)R_*O_0*_^1*_!R_%E_=N_0*_^1*_*R_%E_G*_^1*_*R_%R_G*_^1*_*O_%R_G*_^1*_*R_%O_G*_^1*_2R_G*_^1*_[*_^1**************************************************************_^1*_[*_^1*_!F I L E_!A D D R E S S_!W O R D_7*_^1*_[*_^1* --------------€€------------------------------------------ *_^1*_!15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0_#*_^1* -------------------------------------------------------- *_^1*_!C_!Y_!L_!I_!N_!D_!E_!R - T D SECTOR WITHIN_#*_^1*_CR I_#A TRACK_'*_^1*_'0_!T O_!4 0 5_,A S_#0 - 2 8_'*_^1*_CC K_3*_^1*_CK_6*_^1*_F0_3*_^1*_C1_6*_^1*_FO_3*_^1*_CO R_3*_^1*_CF_6*_^1*_F1_3*_^1*_C2_6*_^1*€€*************************************************************_^1_%EJT_]_^1***********************************************************************_^1*_]_^1*_$E R R O R_!R O U T I N E_^1*_]_^1***********************************************************************_^1_%SPC 2_^1DEVERR JMP* INTRJT_'INTERNAL REJECT_^1EXTRJT ENA 6_,EXTERNAL REJECT CODE_^1CLRINT STA- FDATAF,I_$SAVE ERROR €€CODE_^1_%LDQ- GENST,I_%EXTERNAL REJECT_!Q = DIRECTOR FUNCTION $0XX1_^1_%ENA 2_^1_%OUT 1_,CLEAR INTERRUPTS_^1_%NOP 0_^1_%INP 1_,TAKE STATUS_^1_%NOP 0_^1_%STA- STAT,I_'SAVE STATUS_^1_%LDQ- NZERO+14_$$C000 SET UP ERROR CODE FOR WORD 9 OF PHYSTB_^1_%ALS 15_+SHIFT READY BIT TO TOP OF A REG._^1_%SAP TRYNXT_'SKIP IF NOT READY_^1_%LDQ- NZERO+13_$$E000 SET UP ERROR CODE FOR WORD 9 €€OF PHYSTB_^1_%JMP* TRYNXT_^1INTRJT ENA 5_,INTERNAL REJECT CODE_^1_%JMP* CLRINT_^1_%SPC 2_^1E17332 STQ- I_,SAVE ADDRESS OF PHYSTB_^1_%LDQ- NZERO+13_$$E000 SET ERROR BIT FOR STATUS WORD_^1_%ENA 0_,I/O HANG UP ERROR INDICATION_^1_%SPC 2_^1DKDIA1 STA- FDATAF,I_$SAVE ERROR CODE_^1TRYNXT LDA- SYST,I_'PICK UP REQUEST STATUS WORD. WORD 8 OF PHYSTB_^1_%AND- NZERO-2_%($3FFF) MASK OFF €€TOP STATUS BITS_^1_%ADD- ZROBIT-2_$($4000) SET I/O HANGUP BIT (BIT 14)_^1_%STA- SYST,I_'STORE IN REQUEST STATUS WORD_^1_%LDA- RQST,I_'PICK UP STATUS WORD. WORD 9 OF PHYSTB_^1_%AND- NZERO-3_%($1FFF) MASK OFF ERROR BITS OF STATUS WORD_^1_%AAQ A_,ADD IN NEW ERROR BITS_^1_%STA- RQST,I_'RESTORE STATUS WORD_^1_%LDQ- LUN,I_(PICK UP LOGICAL UNIT_^1_%QLS 6_,SHIFT TO UPPER BITS OF A_^1€€_%ADQ- FDATAF,I_$ADD ERROR CODE_^1_%RTJ LOG_*LOG ERROR_^1_%JMP DONE_)GO COMPLETE REQUEST_^1_%EJT_]_^1***********************************************************************_^1*_]_^1*_$D A T A_!T R A N S F E R_^1*_]_^1***********************************************************************_^1_%SPC 3_^1DATA_!INQ 1_,LOAD ADDRESS FUNCTION_^1_%LDA- CYLADR,I_$FILE ADDRESS_^1_%OUT DEV€€ERR-*_$PERFORM LOAD ADDRESS_^1_%INQ -1_+DIRECTOR STATUS_^1_%INP DEVERR-*_$TAKE STATUS_^1_%AND- ONEBIT+3_$ON CYLINDER_^1_%SAN LOADBF_'SKIP IF NO MOVEMENT_^1_%ENQ CSERR-ERRCOD_^1_%STQ* BITPTR_^1_%JMP* DETER2_'HEADS MOVED, REPORT AS CONTROLLER SEEK ERROR_^1_%SPC 2_^1LOADBF LDA- BUFSIZ,I_$CHECK FOR SHORTENED TRANSFER_^1_%SAN LOADB1_'IT IS, USE BUFSIZ AS TRANSFER LENGTH_^1_%LDA- L€€WD,I_(PICK UP LWA+1_^1_%LDQ- FWD,I_(PICK UP FWA_^1_%RTJ COMPV4_'COMPUTE TRANSFER LENGTH_^1LOADB1 STA* TMP1_)SAVE FOR LOAD BUFFER FUNCTION_^1_%LDA- FWD,I_(PICK UP FWA OF BUFFER_^1_%STA- SAVFWD,I_$SAVE FWD FOR COMPARE OR RETRY_^1_%STA* TMP2_)SAVE IT FOR DATA TRANSFER_^1_%ADD* TMP1_)ADD LENGTH OF DATA TRANSFER_^1_%STA- FWD,I_(UPDATE BUFFER FWA_^1_%LDQ- GENST,I_%PICK UP EQUIPMENT CODE€€_^1_%INQ -1_+SET Q TO LOAD BUFFER LENGTH FUNCTION_^1_%LDA* TMP1_)PICK UP BUFFER SIZE TO TRANSFER_^1_%OUT DEVERR-*_$LOAD THE BUFFER LENGTH REGISTER_^1_%INQ 1_,SET Q TO THE DIRECTOR FUNCTION ($0XX1)_^1_%ENA $18_*EOP,ALARM_^1_%OUT DEVERR-*_$SELECT INTERRUPTS_^1_%LDA* TMP2_)PICK UP THE FWA OF THE BUFFER_^1_%LDQ- FDATAF,I_$PICK UP THE DATA TRANSFER FUNCTION_^1_%OUT DEVERR-*_$PERF€€ORM THE DATA TRANSFER_^1_%ENA CLCKVA_H*4.0*79*1911_^1_%STA- CLCK,I_'SET TIME OUT_4*4.0*79*1911_^1_%LDQ- I_,PHYSTB ADDRESS_^1_%STQ* DATFLG_'SAVE ADDRESS OF UNIT WITH DATA TRANSFER_^1_%ENA 0_^1_%STA- BUFSIZ,I_$CLEAR BUFFER LENGTH_^1_%EJT_]_^1************************************************************************_^1*_]_^1*_$COMPUTE FINAL CONTROLLER ADDRESS REGISTER STATUS_^1*_]_^1*€€***********************************************************************_^1_%SPC 3_^1_%LDA- CYLADR,I_$PICK UP START ADDRESS FOR TRANSFER_^1_%CLR Q_^1_%LLS 10_+TRACK BITS TO Q_^1_%STQ* TRACK_^1_%CLR Q_^1_%LLS 1_,DISK BIT TO Q_^1_%STQ* DISK_^1_%CLR Q_^1_%LLS 5_,SECTOR BITS TO Q_^1_%STQ* SECTOR_^1_%LDA* TMP1_)PICK UP LENGTH OF TRANSFER_^1_%INA 95_+ADD ONE SECTOR MINUS 1 WORD_^1€€_%CLR Q_^1_%DVI =N96_)COMPUTE NUMBER OF SECTORS TO BE ADDED_^1_%ADD* SECTOR_'ADD START SECTOR_^1XXX1_!STA* SECTOR_'SAVE AS POSSIBLE NEW SECTOR_^1_%INA -29_*NUMBER OF SECTORS PER TRACK_^1_%SAM XXX2_)SKIP IF FINISHED_^1_%RAO* TRACK_(BUMP TRACK BY 1_^1_%JMP* XXX1_^1XXX2_!LDA* TRACK_(PICK UP EXPECTED TRACK NUMBER_^1_%ALS 1_^1_%EOR* DISK_)INSERT DISK BIT_^1_%ALS 5_^1_%EOR* SECTOR_€€'INSERT SECTOR NUMBER_^1_%STA- CYLADR,I_$STORE AS EXPECTED CYLINDER ADDRESS_^1_%JMP- (ADISP)_^1_%SPC 2_^1TMP1_!NUM 0_^1TMP2_!NUM 0_^1DISK_!NUM 0_^1TRACK NUM 0_^1SECTOR NUM 0_^1_%EJT_]_^1**********************************************************************_^1*_]_^1*_$D E T E R M I N E_!T Y P E_!O F_!E R R O R_^1*_]_^1**********************************************************€€************_^1_%SPC 3_^1DETERR RAO- ERCONT,I_$BUMP ERROR COUNTER_^1_%STA* TMPSTS_'STORE STATUS TO BE ANALYZED_^1_%CLR Q_^1_%STQ* BITPTR_^1DETER1 LDQ* BITTAB,Q_$PICK UP NEXT ENTRY FROM BIT TABLE_^1_%LDA* TMPSTS_'PICK UP ERROR BITS_^1_%AND- ONEBIT,Q_$CHECK IF THIS BIT SET_^1_%SAN DETER2_'SKIP IF NOT THIS ERROR_^1_%RAO* BITPTR_'CHECK NEXT BIT_^1_%LDQ* BITPTR_^1_%JMP* DETER1_^1DETE€€R2 LDQ* BITPTR_(PICK UP POINTER_^1_%RAO* ERRCNT,Q_$COUNT ERROR_^1_%LDQ* ERRCOD,Q_$PICK UP ERROR CODE_^1_%LDA- ERCONT,I_$PICK UP ERROR TRY NUMBER_^1_%INA -10_*SUBTRACT THE MAX. NUMBER OF TRYS_^1_%SAZ CHKDON_'NO MORE CHANCES, REPORT ERROR_^1_%INQ -17_*TEST FOR A DRIVE SEEK ERROR_^1_%SQN DETI_)SKIP IF NOT_^1_%LDQ- GENST,I_%($0XX1) PICK UP THE DIRECTOR FUNCTION_^1_%INQ -1_+SET Q €€REG. TO A CLEAR CONTROLLER FUNCTION_^1_%INP RJ-*_^1DETI_!LDA- SAVFWD,I_^1_%STA- FWD,I_%RESTORE FWD IN PHYSTB_^1_%LDA- SVFLAD,I_^1_%STA- FILEAD,I_$RESTORE FILE ADDRESS_^1_%LDA- FUNCT,I_%RESTORE LAST DATA TRANSFER FUNCTION_^1_%JMP RETRY_(RETRY TRANSFER_^1CHKDON TRQ A_,ERROR NUMBER TO A_^1_%LDQ- NZERO+13_$($E000) ERROR BIT S FOR STATUS WORD_^1_%JMP* DKDIA1_'REPORT ERROR_^1_%SPC 3€€_^1RJ_#JMP* RJ1_*INTERNAL REJECT_^1_%JMP EXTRJT_'EXTERNAL REJECT_^1RJ1_"JMP INTRJT_^1_%SPC 3_^1TMPSTS NUM 0_,ERROR BITS FOR ANALYSIS_^1BITPTR NUM 0_,POINTER TO TABLES_^1_%EJT_]_^1*_$TABLE OF ERROR BIT NUMBERS_^1*_]_^1BITTAB NUM 15_+DRIVE SEEK ERROR_^1_%NUM 14_+PROTECT FAULT_^1_%NUM 13_+STORAGE PARITY ERROR_^1_%NUM 11_+CONTROLLER SEEK ERROR_^1_%NUM 10_+ADDRESS ERROR_^1_%NU€€M 9_,LOST DATA_^1_%NUM 8_,CHECKWORD ERROR_^1_%NUM 6_,NO COMPARE_^1_%NUM 5_,ALARM_^1_%SPC 3_^1*_$TABLE OF ERROR CODES_^1*_]_^1ERRCOD NUM 17_+17 DRIVE SEEK ERROR_^1_%NUM 19_+19 PROTECT FAULT_^1_%NUM 3_,03 STORAGE PARITY ERROR_^1CSERR NUM 16_+16 CONTROLLER SEEK ERROR_^1_%NUM 18_+18 ADDRESS ERROR_^1_%NUM 1_,01 LOST DATA_^1_%NUM 20_+20 CHECKWORD ERROR_^1_%NUM 7_,07 €€ NO COMPARE_^1_%NUM 2_,02 ALARM_^1_%SPC 3_^1*_$TABLE OF ERROR COUNTS_^1*_]_^1ERRCNT NUM 0_,DRIVE SEEK ERRORS_^1_%NUM 0_,PROTECT FAULTS_^1_%NUM 0_,STORAGE PARITY ERRORS_^1_%NUM 0_,CONTROLLER SEEK ERRORS_^1_%NUM 0_,ADDRESS ERRORS_^1_%NUM 0_,LOST DATA ERRORS_^1_%NUM 0_,CHECKWORD ERRORS_^1_%NUM 0_,NO COMPARE ERRORS_^1_%NUM 0_,ALARM (ONLY) ERRORS_^1_%EJT_]_^1****************€€********************************************************_^1*_]_^1*_$W O R D_!A D D R E S S A B L E_!R O U T I N E_^1*_]_^1************************************************************************_^1*_]_^1*_$THIS ROUTINE HANDLES READ/WRITE TYPE REQUESTS_^1*_]_^1************************************************************************_^1_%SPC 3_^1LIKDUM RTJ- (ASABS)_%ABSOLUTIZE STARTI€€NG ADDRESS_^1_%TRA Q_,A = ABS. STARTING ADDRESS_^1_%LDA- 2,Q_*LSB OF WORD ADDRESS TO A REG._^1_%LDQ- 1,Q_*MSB OF WORD ADDRESS TO Q REG._^1_%ALS 1_^1_%LRS 1_,DOUBLE PRECISION WORD ADDRESS_^1_%DVI =N96_)DIVIDE INTO SECTORS AND WORDS_^1_%SAZ 1_,DO NOT BIAS IF SECTOR ZERO_^1_%INA AUTLOD_'BIAS TO SKIP OVER AUTOLOAD AREA_^1_%STA- FILEAD,I_$SAVE STARTING SECTOR NUMBER_^1_%STA- TEMSE€€C,I_^1_%STQ- WORDNO,I_$SAVE NO. OF WORDS LESS THAN A SECTOR_^1_%LDQ- RQST,I_'PICK UP REQUEST STATUS_^1_%LRS 1_^1_%SAM CHKOV_(SKIP IF WRITE REQUEST_^1_%RTJ CKOVRL_'MOVE PARAMETERS IF OVERLAY REQUEST_^1CHKOV LDA- LWD,I_(LWA+1 OF USERS BUFFER_^1_%STA- TEMLWD,I_$SAVE IN TEMP._^1_%LDA- FWD,I_(PICK UP FWA OF USERS BUFFER_^1_%STA- TEMFWD,I_$SAVE IN TEMP_^1_%LDA- WORDNO,I_$PICK UP WORD€€S LESS THAN A SECTOR_^1_%SAN LASTSC_'SKIP IF THERE ARE SOME_^1_%LDA- TEMREQ,I_$PICK UP REQUEST CODE_^1_%AND- ONEBIT+9_$UNPACK REQUEST CODE_^1_%SAN LKDUM2_'SKIP IF A READ REQUEST_^1_%JMP* LKDUM3_'JUMP TO WRITE FULL SECTORS_^1LKDUM2 ENQ DONE-LENOK_"CALCULATE RETURN ADDRESS_^1_%JMP* READ_)COMPLETE AS FORMAT READ_^1LASTSC LDA- BUFSEC,I_$PICK UP NUMBER OF SECTOR CURRENTLY IN BUFFER_^€€1_%EOR- FILEAD,I_$CHECK IF SAME AS SECTOR NEEDED_^1_%SAZ LKDUM1_'SAME, BYPASS READ INTO BUFFER_^1_%LDA- FILEAD,I_$PICK UP SECTOR TO BE READ_^1_%STA- BUFSEC,I_$SAVE AS SECTOR IN BUFFER_^1_%LDA- ABUFF,I_%PICK UP ADDRESS OF INTERIM BUFFER IN PHYSTB_^1_%STA- FWD,I_(SAVE IN PHYSTB AS FWA_^1_%INA 96_^1_%STA- LWD,I_(SET UP LWA+1_^1_%LDQ =XLKDUM1-LENOK_"CALCULATE RETURN ADDRESS_^1READ_!€€JMP READOP_^1LKDUM1 LDA- TEMREQ,I_^1_%AND- ONEBIT+9_$($0200) UNPACK REQUEST CODE_^1_%SAN TRANRD_'SKIP IF A READ REQUEST_^1_%JMP* RWRITE_'REGULAR WRITE_^1TRANRD LDQ- WORDNO,I_$WORDS LESS THAN A SECTOR (0-95)_^1_%ADQ- ABUFF,I_%ADD THE ADDRESS OF THE LOCAL BUFFER_^1_%LDA- (ZERO),Q_$PICK UP A WORD FROM LOCAL BUFFER_^1_%LDQ- TEMFWD,I_$PICK UP THE ADDRESS OF THE USERS BUFFER_^1_%STA- €€(ZERO),Q_$STORE THE WORD INTO THE USERS BUFFER_^1_%RAO- TEMFWD,I_$INCREMENT FWA OF USERS BUFFER_^1_%LDA- TEMFWD,I_$CHECK IF DONE WITH ENTIRE JOB_^1_%LDQ- TEMLWD,I_^1_%RTJ COMPV4_'GET DIFFERENCE_^1_%SAM TRANON_'SKIP IF MORE TO DO_^1_%JMP DONE_)TRANSFER COMPLETE, EXIT_^1TRANON RAO- WORDNO,I_$INCREMENT STARTING WORD NO._^1_%LDA- WORDNO,I_^1_%INA -96_^1_%SAP MORERD_'SKIP IF BUFFER€€ EMPTY_^1_%JMP* TRANRD_^1MORERD ENA 1_^1_%ADD- TEMSEC,I_$BUMP SECTOR NUMBER_^1_%STA- FILEAD,I_$SET UP PHYSTB SECTOR NUMBER_^1_%LDA- TEMFWD,I_^1_%STA- FWD,I_(UPDATE FWA_^1_%LDA- TEMLWD,I_'AND LWA+1_^1_%STA- LWD,I_^1_%ENQ DONE-LENOK_"CALCULATE RETURN ADDRESS_^1_%JMP* READ_)READ REST OF BUFFER_^1RWRITE LDQ- TEMFWD,I_$INDEX TO PICK UP ONE WORD_^1_%LDA- (ZERO),Q_$PICK UP ONE WORD_^1_%€€LDQ- WORDNO,I_$PICK UP THE WORD COUNT_^1_%ADQ- ABUFF,I_%ADD THE FWA OF INTERIM BUFFER_^1_%STA- (ZERO),Q_$STORE ONE WORD IN THE INTERIM BUFFER IN PHYSTB_^1_%RAO- TEMFWD,I_^1_%LDA- TEMFWD,I_$CHECK IF_^1_%LDQ- TEMLWD,I_^1_%RTJ COMPV4_'GET DIFFERENCE_^1_%SAZ RWRIT_(SKIP IF DONE WITH JOB_^1_%JMP* WRITON_^1RWRIT LDA- TEMSEC,I_$RESTORE TABLE_^1_%STA- FILEAD,I_4SECTOR_^1_%LDA- ABUFF,I_^€€1_%STA- FWD,I_7FIRST WORD_^1_%INA 96_^1_%STA- LWD,I_7LSAT WORD_^1_%ENA 0_^1_%STA- WORDNO,I_$CLEAR WORD COUNTER_^1_%ENQ DONE-LENOK_"CALCULATE RETURN ADDRESS_^1WRITE JMP WRITOP_'WRITE SECTOR BACK ON DISK_^1WRITON RAO- WORDNO,I_$CHECK IF_^1_%LDA- WORDNO,I_$BUFFER FULL_^1_%INA -96_^1_%SAP MORITE_'SKIP IF BUFFER IS FULL_^1_%JMP* RWRITE_'CONTINUE TRANSFER_^1MORITE LDA- TEMSEC,I_$W€€RITE SECTOR BACK ON DISK_^1_%STA- FILEAD,I_^1_%LDA- ABUFF,I_^1_%STA- FWD,I_(SET UP FWA_^1_%INA 96_+ADD ONE SECTOR_^1_%STA- LWD,I_(SET UP LWA_^1_%LDQ =XLKDUM5-LENOK_#CALCULATE THE RETURN ADDRESS_^1_%JMP* WRITE_(WRITE SECTOR BACK ON DISK_^1LKDUM5 RAO- TEMSEC,I_^1_%LDA- TEMSEC,I_^1_%STA- FILEAD,I_$SET SECTOR TO SECOND OF TRANSFER_^1_%ENA 0_^1_%STA- WORDNO,I_$CLEAR WORD COUNTER_^1LK€€DUM3 LDQ- TEMFWD,I_$RESTORE FWD_^1_%STQ- FWD,I_^1_%INQ 96_+ADD ONE SECTOR_^1_%TRQ A_^1_%STQ* TMP4_^1_%LDQ- TEMLWD,I_^1_%RTJ COMPV4_'GET DIFFERENCE_^1_%SAM WRTFUL_(SKIP IF MORE THAN ONE SECTOR_^1_%JMP* LASTSC_'UPDATE AND WRITE BACK LAST SECTOR_^1WRTFUL LDQ* TMP4_^1_%STQ- LWD,I_(RESTORE LWD_^1_%STQ- TEMFWD,I_$NEXT FIRST WORD_^1_%RAO- TEMSEC,I_$NEXT SECTOR_^1_%INQ 96_+ADD ONE SEC€€TOR_^1_%TRQ A_^1_%STQ* TMP4_^1_%LDQ- TEMLWD,I_^1_%RTJ COMPV4_'GET DIFFERENCE_^1_%SAP LKDUM4_'SKIP IF LAST EVEN SECTOR_^1_%JMP* WRTFUL_'CHECK FOR ANOTHER FULL SECTOR_^1_%JMP* WRITE_(COMPLETE AS FORMAT WRITE_^1LKDUM4 LDQ =XLKDUM6-LENOK CALCULATE RETURN ADDRESS_^1_%JMP* WRITE_^1LKDUM6 LDA- TEMSEC,I_^1_%STA- FILEAD,I_$RESET SECTOR ADDRESS_^1_%JMP* LASTSC_'CORRECT AND WRITE BACK LA€€ST SECTOR_^1TMP4_!NUM 0_^1_%EJT_]_^1***********************************************************************_^1*_]_^1*_$CHECK FOR AN OVERLAY REQUEST_^1*_]_^1***********************************************************************_^1*_]_^1*_$IF THE REQUEST IS A READ AND THE REQUEST PARAMETERS ARE IN THE_^1*_$READ BUFFER, MOVE THEM TO ECALL. (WORDS 18 THROUGH 21 OF THE_^1*_$PHYSTB)_^€€1*_]_^1***********************************************************************_^1_%SPC 3_^1CKOVRL 0_"0_^1_%LDA- EPTR,I_'PICK UP ADDRESS OF REQUEST PARAM. LIST_^1_%INA 7_,LENGTH OF PARAMETER LIST_^1_%LDQ- FWD,I_^1_%RTJ COMPV4_'COMPARE MAGNITUDES_^1_%SAP CKOV1_(EPTR+7.GE.FWD_^1_%JMP* (CKOVRL)_$NOT OVERLAY REQUEST, RETURN_^1CKOV1 LDA- EPTR,I_'PICK UP ADDRESS OF REQUEST PARAM. LIS€€T_^1_%LDQ- LWD,I_^1_%RTJ COMPV4_'COMPARE MAGNITUDES_^1_%SAM CKB_*EPTR.LT.LWD_^1_%JMP* (CKOVRL)_$NOT OVERLAY REQUEST, RETURN_^1CKB_"LDQ- EPTR,I_'PICK FWA OF PARAMETER LIST_^1_%LDA- (ZERO),Q_$PICK UP CONTENTS OF FWA OF PARAM. LIST_^1_%AND- NZERO-8_%($00FF) SAVE PRIORITIES_^1_%ADD =N$5200_%CONVERT TO A SCHEDULER REQUEST_^1_%STA- ECALL1,I_$SAVE IN PHYSTB (WORD 18)_^1_%LDA- PLU,Q_(€€PICK UP THE LOGICAL UNIT FROM THE PARAM. LIST_^1_%STA- ECALL4,I_$SAVE IN PHYSTB (WORD 21)_^1_%RTJ- (ACABS)_%ABSOLUTIZE THE COMPLETION ADDRESS_^1_%STQ- ECALL2,I_$SAVE IN PHYSTB (WORD 19)_^1_%ENA ECALL1_'PICK UP ADDRESS OF OVERLAY CALL_^1_%ADD- I_,ADD IN THE ADDRESS OF THE PHYSTB_^1_%STA- EPTR,I_'SAVE AS THE NEW ADDRESS OF THE PARAM. LIST_^1_%JMP* (CKOVRL)_$RETURN TO CALLER_^1_%SP€&C 3_^1_%END_]_^__L UNIT FROM THE PARA&PREWCK CSY/ C13 P€1_%NAM REWCK_(DECK-ID C13 MSOS 4.1_-SUMMARY-079_^1*_$REWIND CHECK SUBROUTINE FOR D1732/D17322_^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 REWCK_^1_%EQU EWES(7)_^1_%EQU ESTAT1(9)_^1_%EQU UNTMOD(16)_^1_%EQU ZROBIT($33)_^1_%EQU MONI($F4)_^1_%EQ€€U DISP($EA)_^1REWCK STQ- I_^1_%LDQ- EWES,I_'EQUIPMENT CODE_869*1587_^1_%INP RJ-*_)STATUS_^1RJ_#AND- $2F_*$1000 CHECK FOR CONTROLLER ACTIVE_$69*1587_^1_%SAZ NTBSY_(SKIP IF NOT BUSY_669*1587_^1_%LDQ- I_,PICK UP PHYSTB ADDRESS_^1_%SCHDLE REWCK,3,,1_^1_%JMP- (DISP)_^1NTBSY LDQ- EWES,I_'PICK UP EQUIP CODE FOR STATUS_^1_%INQ 1_,FORM Q FOR UNIT SELECT_^1_%LDA- UNTMOD,I_$PICK UP UNI€€T SELECT CODE_^1_%INA 4_,FAKE BINARY MODE_6PECTAP_^1_%OUT RJ-*_)CONNECT TO UNIT_^1_%INQ -1_+FORM Q FOR STATUS_^1_%INP RJ-*_)INPUT STATUS_^1_%ALS 5_,LOAD POINT IN A15_^1_%SAM 1_^1_%JMP* REWCK+1_%NO LOAD POINT_^1_%LDA- ESTAT1,I_$GOT LOAD POINT_^1_%AND- ZROBIT+6_$RESET REWIND BIT_^1_%STA- ESTAT1,I_^1_%LDA- I_^1_%TRA Q_^1_%STA* ADR_^1_%RTJ- (MONI)_^1_%NUM $6000_^1ADR_"ADC *_^1€_%JMP- (DISP)_^1_%END_]_^__PD327TR CSY/ C30 P€1_%NAM D327TR_'DECK-ID C30 MSOS 4.1_-SUMMARY-079_^1*_$7 TRACK SUBROUTINES FOR DR1732/D17322_^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 ZERO($22)_#LOCATION CONTAINING ZERO_^1_%EQU H00FF($A)_^1_%EQU HFF00($1A)_^1_%EJ€€T_]_^1*_*PHYSICAL DEVICE TABLE LAYOUT_^1*_*REFER TO MASS STORAGE OPERATING SYSTEM 2.0 REFERENCE MANUAL_^1_%EQU ECCOR(10)_#NEXT LOCATION TO STOR DATA_^1_%EQU ELSTWD(11)_"LAST WORD + 1 TO STORE DATA_^1_%EQU PHSREC(23)_"MAXIMUM PHYSICAL RECORD SIZE (7 TRACK) 1732-2_^1_%EQU NOISLN(9)_#MINIMUM ACCEPTABLE RECORD SIZE_^1_%SPC 3_^1_%ENT PACK_^1_%ENT UNPK_^1_%ENT BCDASC_^1_%ENT AS€€CBCD_^1_%ENT PRUCMP_^1_%EJT_]_^1*_$BCD-ASCII BUFFER CODE CONVERSION ROUTINES_^1************************************************************************_^1*_]_'*_^1*_*ASCII TO BCD CONVERSION SUBROUTINE_8*_^1*_]_'*_^1*_*THE FOLLOWING SUBROUTINE CONVERTS A BUFFER OF ASCII CODES *_^1*_*(TWO ASCII CHARACTERS PER WORD - BITS 0-6, 8-14) TO BCD_"*_^1*_*CODES (TWO BCD CHARACTERS PER WORD €€- BITS 0-5, 8-13). THE *_^1*_*ORIGINAL CODES ARE REPLACED BY THE CONVERTED CODES SO THAT *_^1*_*THE ORIGINAL ASCII BUFFER IS MODIFIED TO BE A BCD BUFFER. *_^1*_]_'*_^1*_*CALL_)RTJ A2BCD_B*_^1*_]_'*_^1*_*WITH_!(A) = ADDRESS OF FIRST WORD OF BUFFER_.*_^1*_1(Q) = NUMBER OF WORDS IN BUFFER_4*_^1*_]_'*_^1*_1(I)_!NOT AFFECTED BY SUBROUTINE_3*_^1****************************************€€********************************_^1_%SPC 1_^1A2BCD 0_"0000_"ENTRY POINT TO ASCII TO BCD CONVERTION SUBROUTINE_^1_%STA* BUFFER_'SAVE STARTING ADDRESS OF BUFFER_^1_%LDA- I_^1_%STA* SAVEI_(SAVE CONTENTS OF I REGISTER_^1LOOPA ENA $7F_*MASK TO A_^1_%INQ -1_+DECREMENT Q BY ONE_^1_%SQP CONVA-*-1_#CONTINUE IF Q IS POSITIVE_^1_%SPC 1_^1_%LDA* SAVEI_(DONE IF Q IS NEGATIVE - GET ORIGIN€€AL I_^1_%STA- I_,RESTORE I_^1_%JMP* (A2BCD) EXIT FROM SUBROUTINE WITH BUFFER CONVERTED_^1_%SPC 1_^1CONVA STQ- I_,SET UP I AS BUFFER INDEX_^1_%LDQ* (BUFFER),I_"GET WORD FROM BUFFER_^1_%LAQ Q_,MASK TO GET LOWER CHARACTER_^1_%RTJ* LIMCK_(ASSURE CHARACTER BETWEEN 20 AND 5F (BAD=20)_^1_%LDQ* TABLE,Q_%GET BCD CODE - USE ASCII CHARACTER AS INDEX_^1_%LAQ Q_,MASK TO GET BCD CODE (LOWER €€HALF OF WORD)_^1_%STQ* TEMP_)SAVE FIRT CODE_^1_%LDQ* (BUFFER),I_"GET WORD FROM BUFFER_^1_%QLS 8_,SHIFT UPPER CHARACTER INTO POSITION_^1_%LAQ Q_,MASK TO GET CHARACTER_^1_%RTJ* LIMCK_(ASSURE CHARACTER BETWEEN 20 AND 5F (BAD=20)_^1_%LDQ* TABLE,Q_%GET BCD CODE - USE ASCII CHARACTER AS INDEX_^1_%LAQ A_,MASK TO GET BCD CODE (LOWER HALF OF WORD)_^1_%ALS 8_,SHIFT CODE TO UPPER HALF_^1_€€%ADD* TEMP_)ADD LOWER CODE_^1_%STA* (BUFFER),I_"STORE CONVERTED CODES BACK INTO BUFFER_^1_%SPC 1_^1_%LDQ- I_,GET I_^1_%JMP* LOOPA_(LOOP BACK FOR NEXT WORD IN BUFFER_^1LIMCK 0_"0_^1_%INQ -$20_^1_%SQP 1_,SKIP IF NOT 0-1F_^1_%ENQ 0_,SET TO 20 FOR SPACE_^1_%INQ -$40_^1_%SQM 1_,SKIP IF NOT 60-7F_^1_%ENQ -$40_)SET TO 20 FOR SPACE_^1_%INQ $60_*RESTORE ORIGINAL CHARACTER_^1_%INA €€-$40_)MAKE 3F MASK_^1_%LAQ Q_,TRUNCATE Q TO 6 BITS_^1_%INA $40_*RESTORE 7F MASK_^1_%JMP* (LIMCK)_^1_%SPC 5_^1BUFFER NUM 0_,ADDRESS OF BUFFER_^1SAVEI NUM 0_,TEMPORARY STORAGE OF I_^1TEMP_!NUM 0_,TEMPORARY STORAGE OF PARTIAL CONVERSION_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1*_*BCD TO ASCII CONVERSION SUBROUTINE_8*_^1*_]_€€'*_^1*_*THE FOLLOWING SUBROUTINE CONVERTS A BUFFER OF BCD CODES_"*_^1*_*(TWO BCD CODES PER WORD - BITS 0-5, 8-13) TO ASCII CODES_!*_^1*_*(TWO ASCII CODES PER WORD - BITS 0-6, 8-14). THE ORIGINAL *_^1*_*CODES ARE REPLACED BY THE CONVERTED CODES SO THAT THE_$*_^1*_*ORIGINAL BCD BUFFER IS MODIFIED TO BE AN ASCII BUFFER._#*_^1*_]_'*_^1*_*CALL_)RTJ BCD2A_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_A*_^1************************************************************************_^1_%SPC 1_^1BCD2A 0_"0000_"ENTRY TO BCD TO ASCII CONVERSION SUBROUTINE_^1_%STA* BUFFER_'SAVE STARTING ADDRESS OF BUFFER_^1_%LDA- I_^1_%STA* SAVEI_(SAVE CONTENTS OF I REGISTER_^1LOOPB LDA- H00FF_(GE€€T 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- HFF00_(MASK TO GET UPPER CODE€€_^1_%ADD* TEMP_)ADD LOWER CODE_^1_%STA* (BUFFER),I_"STORE CONVERTED CODES BACK INTO BUFFER_^1_%SPC 1_^1_%LDQ- I_,GET I_^1_%JMP* LOOPB_(LOOP BACK FOR NEXT WORD IN BUFFER_^1_%EJT_]_^1************************************************************************_^1*_]_'*_^1* THE FOLLOWING TABLE IS USED TO CONVERT CODES FROM_3*_^1*_#1. TELETYPE ASCII TO EXTERNAL BCD_=*_^1*_#2. EXTERNAL BC€€D TO TELETYPE ASCII_=*_^1_%SPC 2_^1*_5BCD TO ASCII_$**_$ASCII TO BCD_^1*_I**_^1TABLE NUM $261F_(00_%3A_^1_%NUM $3131_'01_!1_!31_'**_'41_!A_!31_^1_%NUM $3232_'02_!2_!32_'**_'42_!B_!32_^1_%NUM $3333_'03_!3_!33_'**_'43_!C_!33_^1_%NUM $3434_'04_!4_!34_'**_'44_!D_!34_^1_%NUM $3535_'05_!5_!35_'**_'45_!E_!35_^1_%NUM $3636_'06_!6_!36_'**_'46_!F_!36_^1_%NUM $3737_'07_!7_!37_'**_'47€€_!G_!37_^1_%NUM $3838_'08_!8_!38_'**_'48_!H_!38_^1_%NUM $3939_'09_!9_!39_'**_'49_!I_!39_^1_%NUM $3021_'0A_!0_!30_'**_'4A_!J_!21_^1_%NUM $3D22_'0B_!=_!3D_'**_'4B_!K_!22_^1_%NUM $2723_%0C_%27_'**_'4C_!L_!23_^1_%NUM $3A24_'0D_%26 (3A)_!**_'4D_!M_!24_^1_%NUM $3E25_^1_%NUM $2226_^1_%NUM $2027_'10 SPACE 20_'**_'50_!P_!27_^1_%NUM $2F28_'11_!/_!2F_'**_'51_!Q_!28_^1_%NUM $5329_'12_!S_!53€€_'**_'52_!R_!29_^1_%NUM $5412_'13_!T_!54_'**_'53_!S_!12_^1_%NUM $5513_'14_!U_!55_'**_'54_!T_!13_^1_%NUM $5614_'15_!V_!56_'**_'55_!U_!14_^1_%NUM $5715_'16_!W_!57_'**_'56_!V_!15_^1_%NUM $5816_'17_!X_!58_'**_'57_!W_!16_^1_%NUM $5917_'18_!Y_!59_'**_'58_!X_!17_^1_%NUM $5A18_'19_!Z_!5A_'**_'59_!Y_!18_^1_%NUM $5F19_^1_%NUM $2C3D_^1_%NUM $281E_^1_%NUM $252D_^1_%NUM $5C2F_^1_%NUM $401€€A_^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_%EJT_]_^1PRUCMP NUM 0_Q*72*1609*_^1_%STA* NUMBR_^1_%LDA- PHSREC,I_$PRU SIZE INSTALLED_4MSOS4.1_^1_%STA* PRUSZ_(PRUSIZE_=*72*1609*_^1TRYAGN ENQ 0_S72*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_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_]_^__€PD17323 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_]_^__PDMTSIM CSY/ C78 P€1_%NAM DMTSIM_'DECK-ID C78 MSOS 4.3_-SUMMARY-102_^1***_"MAG TAPE SIMULATOR DRIVER_^1*_$1700 MASS STORAGE OPERATING SYSTEM VERSION 4.3_^1*_$SMALL COMPUTER DEVELOPMENT DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1975_^1_%SPC 2_^1***_]_^1*S2_"FUNCTION -_^1*_$THE PURPOSE OF THIS PROGRAM IS TO SIMULATE THE OPERATIONS_^1*_$OF A 9 TRACK MAGNETIC TAPE_^1*_]_^1€€*_$GENERAL DESCRIPTION -_^1*_$THIS DRIVER ALLOWS ONE TO USE ASSIGNIED AREAS OF ONE_^1*_$OR TWO DISK DRIVES AS THOUGH THEY WERE MAG TAPE DRIVES._^1*_$EACH DISK OR BOTH, IF USED, MAY HAVE AS MANY ASSIGNED AREAS_^1*_$AS DESIRED. EACH OF THESE BUFFER AREAS IS REFERENCED_^1*_$BY A SEPERATE LOGICAL UNIT NUMBER. ALL MAG TAPE MOTION_^1*_$REQUESTS ARE HANDLED BY THIS DRIVER. THE HARDWARE€€_^1*_$STATUS WORD IN EACH DEVICE PHYSTAB IS UPDATED AND IS_^1*_$REASONABLY COMPATABLE WITH THAT FOR A REAL MAG TAPE._^1*_$THERE IS NO LIMIT TO THE TOTAL NUMBER OF MAG TAPE_^1*_$SIMULATOR UNITS THAT MAY BE USED (GIVEN SUFFICIENT MASS_^1*_$STORAGE AND CORE FOR PHYSTABS, LOG TABLES, ETC.)._^1*_]_^1*_$THE BASIC SOFTWARE REQUIREMENTS TO RUN THIS DRIVER ARE_^1*_$M.S.O.S. OPERATING SYSTEM€€, VERSION 3.0, AND A WORD_^1*_$ADDRESSABLE DISK DRIVER. A MODIFICATION MUST ALSO BE_^1*_$MADE TO THE MODULE *MIPRO* TO ALLOW ENABLING AND_^1*_$DISABLING THE WRITE RING OF EACH MAG TAPE SIMULATOR UNIT_^1*_$(IE. SET OR CLEAR BIT 15 IN PHYSTAB WORD 12 -- ESTAT2)._^1*_]_^1*_$IF USING THE SYSTEM DISK AS ONE OR MORE OF THE MASS_^1*_$MEMORY BUFFERS FOR THE MAG TAPE SIMULATORS, SET MAXSEC€€_^1*_$TO (MAX MM SECTOR ADDRESS FOR DEVICE - AREA REQUIRED FOR_^1*_$BUFFERS)._^1*_]_^1_%EJT_]_^1***_]_^1*E_]_^1*_$FLOW -_^1*_$1) UPON ENTRY TO THE DRIVER A CHECK IS MADE TO SEE IF_^1*_(THE DRIVER IS ALREADY BUSY. IF SO, AN EXIT IS MADE_^1*_(TO THE DISPATCHER. IF NOT, THE REQUEST IS PROCESSED._^1*_$2) A CALL IS MADE TO FIND NEXT REQUEST. IF A REQUEST_^1*_(IS NOT FOUND, THE DRIVER€€ GETS THE NEXT MAG TAPE_^1*_(SIMULATORS PHYSTAB. IF THERE ARE NO REQUESTS FOR_^1*_(THAT MAG TAPE SIMULATOR AND ALL SIMULATORS HAVE BEEN_^1*_(PROCESSED, THE DRIVER EXITS THROUGH MAS300._^1*_$3) IF A REQUEST IS FOUND AND IT IS THE FIRST REQUEST_^1*_(MADE TO THE DEVICE THE PRESTORED STARTING MASS_^1*_(MEMORY ADDRESS FOR THE MAG TAPE SIMULATOR IS CONVERTED_^1*_(TO A WORD ADDRESS._^1*_€€$4) THE REQUEST TYPE IS DETERMINED AND CONTROL IS GIVEN_^1*_(TO THE APPROPIATE SECTION TO PROCESS THE REQUEST._^1*_(UPON COMPLETION A CALL IS MADE TO COMPLETE REQUEST_^1*_(AND IT RETURNS CONTROL TO THE DRIVER AT STEP 2._^1*_]_^1*_]_^1*_$INPUT REQUIREMENTS -_^1*_$UPON ENTRY TO THE DRIVER, THE Q REGISTER CONTAINS_^1*_$THE ADDRESS OF THE PHYSICAL DEVICE TABLE_^1*_]_^1*_]_^1****_!ENTRY€€/EXIT -_^1_%ENT IMTSIM_'DRIVER INITIATOR_^1*_$THE DRIVER RETURNS CONTROL THROUGH MAS300_^1*_]_^1*_]_^1*_$SUBROUTINES -_^1_%EXT ALTDEV_'ALTERNATE DEVICE HANDLER_^1_%EXT LOG_*ERROR LOGGING ENTRY_^1_%EXT MAS300_'DRIVER EXIT ROUTINE_^1_%SPC 2_^1_%EQU AFNR($B5)_#FIND NEXT REQUEST_^1_%EQU ACMPRQ($B6)_!COMPLETE REQUEST_^1_%EQU ADISP($EA)_"DISPATCHER_^1_%EQU AMONI($F4)_"MONITOR_^1€€****_]_^1_%EJT_]_^1***_]_^1*E_#PARAMETERS -_^1*_$THE FOLLOWING IS A SAMPLE PHYSICAL DEVICE TABLE FOR_^1*_$THE MAG TAPE SIMULATOR_^1*_]_^1*MTSIM1 NUM $5208_'0_+SCHEDULER CALL_^1*_%ADC IMTSIM_%1 EDIN_$INITIALIZER ENTRY_^1*_%ADC 0_+2 EDCN_$DUMMY_^1*_%ADC 0_+3 EDPGM_#DUMMY_^1*_%NUM -1_*4 EDCLK_#DIAGNOSTIC CLOCK_^1*_%NUM 0_+5 ELU_%LOGICAL UNIT_^1*_%NUM 0_+6 EPTR_$REQUEST PO€€INTER_^1*_%NUM 0_+7 EWES_$DUMMY_^1*_%NUM $0A46_'8 EREQST_"EQUIPMENT TYPE CODE_^1*_%NUM 0_+9 ESTAT1_"SOFTWARE STATUS_^1*_%NUM 0_*10 ECCOR_#START OF USERS BUFFER_^1*_%NUM 0_*11 ELSTWD_"LWA+1 OF USERS BUFFER_^1*_%NUM 0_*12 ESTAT2_"HARDWARE STATUS_^1*_%ADC LMTSIM_$13 LENGTH_"DRIVER LENGTH IF MASS MEMORY_^1*_%ADC SMTSIM_$14 ADMMDR_"NAME ASSOCIATED WITH SEC NUM_^1*_%NUM €€0_*15 RETURN_"RETURN ADDRESS_^1*_%NUM 8_*16 EDSKLU_"DISK LOGICAL UNIT_^1*_%NUM 0_*17 EDSMSB_"MM WORD_^1*_%NUM 0_*18 EDSLSB_%ADDRESS POINTER_^1*_%NUM 0_*19 EDSTR1_"MM SECTOR ADDRESS_^1*_%ADC MTBFS1_$20 EDSTR2_"START OF BUFFER_^1*_%NUM 0_*21 EDLST1_"MM SECTOR ADDRESS_^1*_%ADC MTBFE1_$22 EDLST2_"END OF BUFFER_^1*_%ADC MTSIM2_$23 ENEXT_#POINTER TO NEXT PHYSTAB_^1*_]_^1€€_%EJT_]_^1***_]_^1*E_#THE FOLLOWING ARE THE HARDWARE STATUS BITS (ESTAT2)_^1*_]_^1* 15 14 13 12 11 10_!9_!8_!7_!6_!5_!4_!3_!2_!1_!0_^1* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --_^1*_!W_!T_!T_!C_!F_!L_!E_!E_!B_!L_!A_!E_!B_!N_!D_!R_^1*_!R_!A_!A_!O_!I_!O_!N_!N_!A_!O_!L_!N_!A_!O_!R_!E_^1*_!I_!P_!P_!N_!L_!A_!D_!D_!C_!S_!A_!D_!D_!T_!I_!A_^1*_!T_!E_!E_!T_!E_!D_€€*K_!T_!R_.V_!D_^1*_!E_*R_*O_!O_!S_%M_!O_!R_!U_!E_!Y_^1*_%D_!D_!O_!M_!P_!F_!F_!P_!D_%F_!E_!S_!R_^1*_!R_!E_!E_!L_!A_!O_*A_!A_*C_!E_^1*_!I_!N_!N_!L_!R_!I_!T_!W_!C_!T_%O_!O_!D_!B_^1*_!N_!S_!S_!E_!K_!N_!A_!R_!E_!A_%P_!R_%U_^1*_!G_!I_!I_!R_%T_!P_!I_.E_!D_%S_^1*_%T_!T_%S_%E_!T_!F_*R_*Y_^1*_!P_!Y_!Y_!A_!E_!S_%T_!I_*A_!H_^1*_!R_*C_!N_!E_%E_!L_*T_!E_^1*_!E_!8_!5_!T_!S_!N_%N_!E_*I_!A_^1*_!S_!€€0_!5_!I_!E_!S_6O_!D_^1*_!E_!0_!6_!V_!D_!E_%D_!M_*N_!E_^1*_!N_*E_%D_%A_!A_.R_^1*_!T_!B_!B_2T_!R_^1*_%P_!P_2A_!K_^1*_%I_!I_^1*_]_^1*_]_^1*_]_^1*_]_^1*_$MESSAGES -_^1*_$THE FOLLOWING ARE THE ERROR MESSAGES DETECTED BY THE_^1*_$DRIVER AND SENT TO THE USER_^1*_]_^1*_$2 = ALARM - A DISK I/O ERROR_^1*_$3 = ILLEGAL RECORD HEADER OR HEADER NOT FOUND_^1*_#13 = ATTEMPTED WRITE WITH WRITE RING€€ NOT ENABLED_^1*_#18 = ATTEMPTED READ AT END OF WRITTEN DATA_^1*_#31 = NOISE RECORD - ZERO LENGTH WRITE_^1*_#44 = ATTEMPTED WRITE PAST END OF MAG TAPE SIMULATOR_^1*_#60 = ILLEGAL TAPE MOTION REQUEST_^1_%EJT_]_^1*_]_^1*_$PHYSICAL DEVICE TABLE WORDS_^1*_]_^1_%EQU ELU(5)_'LOGICAL UNIT_^1_%EQU EPTR(6)_%REQUEST POINTER_^1_%EQU ESTAT1(9)_#SOFTWARE STATUS_^1_%EQU ECCOR(10)_#START OF U€€SER BUFFER_^1_%EQU ELSTWD(11)_"LWA+1 OF USER BUFFER_^1_%EQU ESTAT2(12)_"HARDWARE STATUS_^1_%EQU EDSKLU(16)_"DISK LOGICAL UNIT_^1_%EQU EDSMSB(17)_"MM WORD ADDRESS POINTER (MSB)_^1_%EQU EDSLSB(18)_"MM WORD ADDRESS POINTER (LSB)_^1_%EQU EDSTR1(19)_"MM SECTOR ADDRESS (MSB)_^1_%EQU EDSTR2(20)_%START OF BUFFER (LSB)_^1_%EQU EDLST1(21)_"MM SECTOR ADDRESS (MSB)_^1_%EQU EDLST2(22)_€€%END OF BUFFER (LSB)_^1_%EQU ENEXT(23)_#POINTER TO NEXT PHYSTAB_^1_%SPC 2_^1*_]_^1*_$MASK TABLE WORDS_^1*_]_^1_%EQU LPMSK(2)_$START OF RIGHT PARTS MASK_^1_%EQU NZERO($12)_"START OF LEFT PARTS MASK_^1_%EQU ZERO($22)_#ZERO_^1_%EQU ONEBIT($23)_!START OF ONE BITS MASK_^1_%EQU ZROBIT($33)_!START OF ZERO BITS AMSK_^1_$EJT_]_^1*_]_^1*_$D R I V E R_!E N T R Y_^1*_]_^1*_]_^1START ST€€Q- I_^1_%LDQ =XIMTSIM-START_^1_%AAQ Q_^1_%STQ- 1,I_*SAVE THE ABSOLUTE INITIATOR ADDRESS_^1_%LDQ =XCMPL-START_^1_%AAQ Q_^1_%STQ COMP_)SAVE THE ABSOLUTE DISK I/O COMPLETION_^1_%LDQ =XBUFR-START_^1_%AAQ Q_^1_%STQ HDRBFR_'SAVE THE ABSOLUTE HEADER BUFFER ADDRESS_^1_%LDQ =XBUFR1-START_^1_%AAQ A_^1_%STA TRLBFR_'SAVE THE ABSOLUTE TRAILER BUFFER ADDRESS_^1_$JMP* IMTSIM+1_^1_%EJT_€€]_^1IMTSIM STQ- I_^1_%LDA TEMP_)CHECK IF DRIVER BUSY WITH ANOTHER DEVICE_^1_%SAZ CHECK-*-1_#NO._^1_%JMP- (ADISP)_^1CHECK LDQ- I_^1_%STQ TEMP_^1_%RTJ- (AFNR)_'GO FIND NEXT REQUEST_^1_%JMP* GOCYL_(GO GET NEXT PHYSTAB_^1PST1_!LDA- ESTAT2,I_$IS THIS 1ST TIME IN DRIVER_^1_%AND- LPMSK+15_$MASK OUT BIT 15_^1_%SAZ PST2-*-1_$YES_^1_%JMP* PST3_)NO_^1*_]_^1PST2_!LDA =N$5411_%LD PNT,EOP,€€RDY,CONT ACTIVE,800 BPI_^1_%EOR- ESTAT2,I_$PRESET HARDWARE_^1_%STA- ESTAT2,I_(STATUS._^1_%LDA- EDSTR2,I_$CALCULATE AND_^1_%RTJ* CALADD_*PRESET STARTING_^1_%STQ- EDSTR1,I_+MM ADDRESS_^1_%STQ- EDSMSB,I_.AS WELL_^1_%STA- EDSTR2,I_1AS MM_^1_%STA- EDSLSB,I_4POINTER._^1_%LDA- EDLST2,I_$CALCULATE LAST_^1_%RTJ* CALADD_*MM ADDRESS._^1_%INA 97_+CORRECT LAST_^1_%SAP PST2A-*-1_'ADDRESS FOR_^€€1_%AND- LPMSK+15_+SIZE OF_^1_%INQ 1_5LAST SECTOR._^1PST2A STQ- EDLST1,I_$STORE_^1_%STA- EDLST2,I_(IT._^1*_]_^1PST3_!ENA 0_,CLEAR FILE MARK_^1_%STA* FMFND_+FOUND FLAG AND_^1_%STA FLMARK_-BACKSPACE FILEMARK FLAG._^1_%LDA- ESTAT2,I_$WAS A FILE_^1_%ALS 4_/MARK FOUND_^1_%SAP PST3A-*-1_*ON LAST READ._^1_%ENQ 1_,YES, SET_^1_%STQ* FMFND_+FLAG._^1PST3A ALS 4_,WAS A BACKSPACE_^1_%SA€€P PST4-*-1_(FILEMARK FOUND BEFORE._^1_%ENQ 1_,YES, SET_^1_%STQ FLMARK_*FLAG._^1PST4_!LDA- ESTAT2,I_$CLEAR ALL CLEARABLE_^1_%AND =N$F401_)CONTROLLER STATUS BITS_^1_%EOR- ONEBIT+1_+EXCEPT LOAD POINT AND_^1_%STA- ESTAT2,I_.SET DRIVER BUSY BIT._^1_%ALS 5_,ARE WE AT LOAD POINT_^1_%SAM CKHDR-*-1_#YES, CHECK HEADER_^1_%JMP* RQSTCK_'NO, CHECK THE TYPE OF REQUEST_^1CKHDR ALS 11_+CHE€€CK IF_^1_%SAP NORING-*-1_%WRITE RING SET._^1_%ENA 1_,SET FLAG FOR_^1_%STA* ERFLAG_*NO ERROR OUTPUT_^1NORING RTJ RDHEDR_'READ AND TEST HEADER_^1_%CLR A_,CLEAR FLAG FOR_^1_%STA* ERFLAG_*ERROR OUTPUT_^1_%SQZ RQSTCK-*-1_"IS HEADER OK_^1_%LDA- ONEBIT+15_#NO, A BLANK_^1_%STA BUFR_,DISK FILE_^1_%STA BUFR+2_-SO PRESET_^1_%CLR A_5A HEADER_^1_%STA BUFR+1_3IN WORDS_^1_%ENQ 3_;1,2_^1€€_%LDA HDRBFR_^1_%STA BUFADR_^1_%RTJ WDISK_:AND 3._^1*_]_^1RQSTCK LDQ- EPTR,I_'GET POINTER TO PARAM LIST_^1_%LDA- (ZERO),Q_$PICK UP REQUEST CODE._^1_%ARS 9_,IS IT A TAPE_^1_%AND- LPMSK+5_^1_%INA -14_-MOTION REQUEST._^1_%SAN NOMOTN_'NO_^1_%JMP TPMCTL_'YES_^1NOMOTN JMP* RDWRIT_^1*_]_^1CALADD NOP 0_^1_%MUI =N96_)CONVERT MM_^1_%LLS 1_/SECTOR ADDRESS_^1_%ARS 1_2TO EQUIVALENT_^€€1_%AND- LPMSK+15_.WORD ADDRESS._^1_%JMP* (CALADD)_^1*_]_^1GOCYL JMP CYCLE_(GO CHECK NEXT PHYSTAB_^1_%EJT_]_^1*_]_^1* THIS IS THE READ/WRITE PROCESSOR_^1*_]_^1RDWRIT LDA- ELSTWD,I_$FIND NUMBER OF_^1_%SUB- ECCOR,I_)WORDS TO TRANSFER._^1_%SAN RDGO1-*-1_#ZERO WORD TRANSFER REQUESTED_^1_%ENA 1_,YES, SET NUMBER OF WDS TO 1_^1RDGO1 STA* NUMRQS_'STORE IT_^1_%STA* NUMWDS_'SET NUM. TO €€TRANS. TO NUM. REQUESTED_^1_%TRA Q_^1_%LDA- ECCOR,I_%GET STARTING ADDRESS_^1_%STA* STRTCO_(AND SAVE_^1_%LDA- ESTAT1,I_$IS THIS_^1_%AND- ONEBIT+0_(A READ OR_^1_%SAN WRITRQ-*-1_)A WRITE_^1_%JMP* READ_2REQUEST._^1WRITRQ TRQ A_^1_%INA -3_+IS NUM. TO TRANS._^1_%SAP WRITOK-*-1_%LESS THAN 2?_^1_%ENA 31_+YES, INDICATE ERROR-_^1_%JMP ERROR_+NOISE RECORD_^1WRITOK TRQ A_^1_%RTJ* WRITE€€_(PROCESS WRITE REQUEST_^1_%JMP WEXIT_^1*_]_^1*_]_^1FMFND NUM 0_,FLAG TO INDICATE FILE MK FND ON LAST READ_^1ERFLAG NUM 0_,FLAG TO INHIBIT HEADER ERROR OUTPUT_^1*_]_^1*_]_^1_%EJT_]_^1*_]_^1* PROCESS WRITE REQUEST_^1*_]_^1WRITE NOP 0_^1_%ADD- EDSLSB,I_$ADD LSB OF MM POINTER_^1_%INA 6_,CORRECT FOR HEADER AND TRAILER_^1_%LDQ- EDSMSB,I_$GET MSB OF MM POINTER_^1_%SAP WRIT1-*-1_#€€IS BIT 15 OF LSB SET_^1_%AND- LPMSK+15_$YES, CLEAR BIT 15_^1_%INQ 1_/AND INCREMENT MSB._^1WRIT1 LLS 16_+INTERCHANGE MSB AND LSB_^1_%SUB- EDLST1,I_$SEE IF WE OVERFLOW MM BUFFER_^1_%SAZ WRIT2-*-1_#POSSIBLY, CHECK FURTHER_^1_%SAM WRT0-*-1_$NO WAY, CONTINUE PROCESSING_^1OVERFL ENQ 9_,YES, SET END OF TAPE BIT_^1_%RTJ SETST2_*(9) IN STATUS WORD._^1_%ENA 44_+SET ERROR CODE = 44_^1€€_%JMP* WERROR_*TO INDICATE END OF PSEUDO-TAPE._^1WRIT2 TRQ A_,FURTHER CHECK_^1_%SUB- EDLST2,I_(FOR OVERFLOW_^1_%SAM WRT0-*-1_+OF MM BUFFER._^1_%JMP* OVERFL_^1WRT0_!LDA- ESTAT2,I_$IS WRITE_^1_%SAM WRT1-*-1_(RING ENABLED._^1_%ENA 13_+NO, SET ERROR CODE = 13_^1WERROR JMP ERROR_+TO INDICATE WRITE RING DISABLED._^1WRT1_!RTJ RDHEDR_'READ AND CHECK CURRENT HEADER_^1_%LDA- ESTAT2,I_€€$STATUS NOW_^1_%ALS 5_^1_%SAM WRTA_)SKIP-LOAD POINT_!CLEAR EOF FROM HEADER_^1_%LDQ FLMARK_'BACKSPACE FILE PREVIOUSLY_^1_%SQN WRTA_)SKIP-BACKSPACE FILE_!CLEAR HEADER_^1_%ALS 15_^1_%SAM WRTB1_(EOF SENSED?_^1_%JMP* WRTB_)NO_^1WRTB1 LDQ* FMFND_(EOF NOW Q=EOF PREVIOUSLY FLAG_^1_%SQN WRTB_)SKIP-EOF PREVIOUS_^1WRTA_!LDA BUFR_^1_%AND- LPMSK+15_$CLEAR BIT 15_^1_%INA -1_+ARE WE POS€€ITIONED BEFORE_^1_%SAN WRTA1_+A SHORT RECORD?_^1_%RTJ DECADR_'YES, BACK UP TO WRITE OVER IT._^1_%RTJ CLRBSF_'CLEAR BACKSPACE FILEMARK BIT AND FLAG_^1_%RTJ RDHEDR_'READ AND CHECK CURRENT HEADER_^1_%JMP* WRTB_)DO NOT CLEAR OUT FILE MARK_^1WRTA1 ENA 0_,CLEAR EOF FROM HEADER_^1_%STA BUFR+1_^1WRTB_!ENQ 11_+CLEAR FILE MARK_^1_%RTJ CLRST2_*BIT IF SET._^1_%LDA* NUMWDS_'GET NUMBER €€OF WORDS_^1_%TRA Q_^1_%EOR- ONEBIT+15_#SET BIT 15_^1_%STA BUFR+2_'SET IT IN HEADER OF THIS RECORD_^1_%STA BUFR1_(SET NUMBER_^1_%CLR A_-OF WORDS_^1_%STA BUFR1+1_(AND END OF_^1_%LDA- ONEBIT+15_'WRITTEN DATA_^1_%STA BUFR1+2_*IN TRAILER._^1_%LDA- EDSMSB,I_$SAVE MM_^1_%STA* TMPMSB_(ADDRESS_^1_%LDA- EDSLSB,I_'IN TEMPORARY_^1_%STA* TMPLSB_*STORAGE_^1_%ENQ 3_^1_%LDA HDRBFR_(SET TO_€€^1_%STA BUFADR_(WRITE HEADER_^1_%RTJ WDISK_(WRITE HEADER_^1_%ENA 3_,INCREASE DISK ADDRESS_^1_%RTJ INKADR_(BEYOND HEADER_^1_%LDA* STRTCO_'GET STARTING ADDRESS_^1_%STA BUFADR_(OF USERS BUFFER_^1_%LDQ* NUMWDS_'NUM. WORDS TO TRANSFER_^1_%RTJ WDISK_(WRITE FROM USERS BUFFER_^1_%LDA* NUMWDS_'INCREASE DISK ADDRESS_^1_%RTJ INKADR_(BEYOND USERS RECORD_^1_%ENQ 3_^1_%LDA TRLBFR_'SET T€€O_^1_%STA BUFADR_(TRAILER BUFFER_^1_%RTJ WDISK_(WRITE TRAILER_^1_%LDA* TMPMSB_'RESTORE MM ADDRESS_^1_%STA- EDSMSB,I_%FROM_^1_%LDA* TMPLSB_)TEMPORARY_^1_%STA- EDSLSB,I_(STORAGE_^1_%JMP* (WRITE)_^1*_]_^1*_]_^1TMPMSB NUM 0_,TEMPORARY MSB_^1TMPLSB NUM 0_,TEMPORARY LSB_^1NUMRQS NUM 0_,NUMBER OF WORDS REQUESTED_^1NUMWDS NUM 0_,CORRECTED NUMBER OF WORDS TO TRANSFER_^1STRTCO NUM 0_,€€STARTING ADDRESS OF USERS BUFFER_^1*_]_^1_%EJT_]_^1*_]_^1* PROCESS READ REQUEST_^1*_]_^1READ_!LDA- EDSMSB,I_$SAVE_^1_%STA* TMPMSB_(MM_^1_%LDA- EDSLSB,I_'ADDRESS_^1_%STA* TMPLSB_*TEMPORARILY_^1_%ENQ 3_^1_%LDA HDRBFR_'SET TO_^1_%STA BUFADR_'READ HEADER_^1_%RTJ RDISK_(READ HEADER_^1_%RTJ HDRTST_'CHECK HEADER_^1_%ENA 3_,INCREASE DISK ADDRESS_^1_%RTJ INKADR_(BEYOND HEADER_^1_%LDA€€ BUFR+2_'IS NUMBER OF WORDS REQUESTED_^1_%TRA Q_-GREATER THAN_^1_%SUB* NUMWDS_)SIZE OF RECORD_^1_%SAP RCBIGR-*-1_"NO, TRANSFER NUMBER REQUESTED_^1_%JMP* RD1_*YES, TRANSFER NUMBER IN RECORD_^1RCBIGR LDQ* NUMWDS_'NUMBER OF WORDS REQUESTED_^1RD1_"LDA* STRTCO_'SET TO READ_^1_%STA BUFADR_(INTO USERS BUFFER_^1_%RTJ RDISK_(READ DATA_^1_%LDA* TMPMSB_'RESTORE MM_^1_%STA- EDSMSB,I_%ADDR€€ESS_^1_%LDA* TMPLSB_)FROM_^1_%STA- EDSLSB,I_(TEMPORARY_^1_%LDA- ESTAT2,I_$WAS AN END_^1_%ALS 4_/OF FILE FOUND._^1_%SAM FMFOND-*-1_"YES_^1_%JMP* EOFCLR_'NO_^1FMFOND LDA FMFND_(WAS IT FOUND ON LAST READ_^1_%SAN EFCLR-*-1_#YES, CHECK IF NEXT RECORD IS SHORT_^1_%LDQ STRTCO_'NO, SET FILE MARK_^1_%LDA =N$1300_)BITS IN 1ST WORD_^1_%STA- (ZERO),Q_+OF USERS BUFFER._^1_%ENA 1_,SIGNIFY€€ THAT A 1_^1_%STA BUFR+2_*WORD TRANSFER OCCURED._^1_%JMP* REXT1_(EXIT, BUT DO NOT INCREMENT MM POINTER_^1EFCLR LDA BUFR+2_'LOAD SIZE OF NEXT RECORD_^1_%INA -1_+IS NUM. TO TRANS._^1_%SAN EOFCLR-*-1_%LESS THAN 2?_^1_%RTJ INCADR_'YES, SKIP THE SHORT RECORD_^1_%CLR A_^1_%STA FMFND_(CLEAR FILE MARK FOUND ON LAST READ_^1_%JMP* READ_)READ NEXT RECORD_^1EOFCLR ENQ 11_+CLEAR END OF€€_^1_%RTJ CLRST2_*FILE STATUS BIT_^1_%ALS 7_,ARE WE AT END OF WRITTEN DATA_^1_%SAM EOD-*-1_%YES_^1_%JMP* REXIT_^1EOD_"ENA 18_+SET ERROR CODE = 18_^1_%JMP ERROR_+TO INDICATE END OF WRITTEN DATA._^1_%EJT_]_^1*_]_^1* READ/WRITE EXIT PROCESSOR_^1*_]_^1REXT1 ENA 1_,SET FLAG TO SUPPRESS_^1_%STA* INCFLG_*INCREMENTING MM POINTER._^1REXIT LDA BUFR+2_'IS RECORD LENGTH LESS_^1_%SUB N€€UMRQS_*THAN NO. OF WDS REQUESTED._^1_%SAP NSHORT-*-1_"NO._^1_%LDA- ESTAT1,I_%YES, SET SHORT_^1_%AND- ZROBIT+14_'READ BIT (14)_^1_%EOR- ONEBIT+14_*IN ERROR_^1_%STA- ESTAT1,I_.(V) FIELD._^1_%LDA BUFR+2_'SET NEXT_^1_%ADD STRTCO_*LOCATION TO_^1_%LDQ- ELSTWD,I_+STORE INTO_^1_%INQ -1_4USERS LAST_^1_%STA- (ZERO),Q_1BUFFER WORD._^1NSHORT LDA- ESTAT2,I_$CHECK END OF FILE_^1_%ALS 4_/BIT€€ IN STATUS._^1_%SAP WEXIT-*-1_#NOT SET_^1_%LDA- ESTAT1,I_$SET END OF FILE AND ERROR_^1_%AND =N$5FFF_)BITS (13) AND (15)_^1_%EOR =N$A000_,IN ERROR_^1_%STA- ESTAT1,I_.(V) FIELD._^1WEXIT LDA* INCFLG_'SEE IF WE ARE TO SUPPRESS_^1_%SAN WEXT1-*-1_'INCREMENTING MM POINTER._^1_%RTJ INCADR_'INCREMENT MM POINTER_^1WEXT1 CLR A_,CLEAR INCREMENT_^1_%STA* INCFLG_*MM POINTER FLAG._^1_%ENQ€€ 10_+CLEAR LOAD POINT_^1_%RTJ CLRST2_^1*_]_^1_%EJT_]_^1*_]_^1* DRIVER EXIT PROCESSOR_^1*_]_^1EXIT_!RTJ- (ACMPRQ)_$COMPLETE THE REQUEST_^1_%JMP CHECK_^1CYCLE ENQ 4_,SET END OF OPERATION_^1_%RTJ* SETST2_*BIT IN STATUS._^1_%LDA- I_,SAVE PRESENT_^1_%STA* TEMP_,PHYSTB LOCATION._^1CYCLE1 LDA- ENEXT,I_%PREPARE TO CHECK NEXT_^1_%STA- I_/PSEUDO-TAPE UNIT._^1_%RTJ- (AFNR)_^1_%JMP* CYCLE€€2_'NO MORE REQUESTS ON THIS UNIT_^1_%JMP PST1_)GO PROCESS NEW REQUEST_^1CYCLE2 LDA- I_,CHECK TO SEE IF WE HAVE_^1_%SUB* TEMP_,CYCLED ALL THE PSEUDO-TAPES._^1_%SAZ CYCLE3-*-1_"SKIP IF YES_^1_%JMP* CYCLE1_'GO CHECK NEXT TAPE._^1CYCLE3 STA* TEMP_^1_%RTJ- (AFNR)_'NO MORE REQUESTS, BUT CLEAR PHYSTAB_^1_%NOP 0_^1_%ENQ 1_,CLEAR DRIVER BUSY BIT IN_^1_%RTJ CLRST2_'HARDWARE STATUS_^1_%E€€NQ 12_+CLEAR CONTROLLER ACTIVE_^1_%RTJ CLRST2_^1_%JMP+ MAS300_'EXIT DRIVER_^1*_]_^1*_]_^1INCFLG NUM 0_,INCREMENT MM POINTER FLAG_^1TEMP_!NUM 0_,TEMP STORAGE LOCATION_^1*_]_^1*_]_^1SETST2 NOP 0_^1_%LDA- ESTAT2,I_$SET BIT GIVEN_^1_%AND- ZROBIT,Q_(IN Q REGISTER_^1_%EOR- ONEBIT,Q_+IN HARDWARE_^1_%STA- ESTAT2,I_.STATUS WORD._^1_%JMP* (SETST2)_^1_%EJT_]_^1*_]_^1* HEADER TEST ROUTINE€€_^1*_]_^1HDRTST NOP 0_^1_%LDA BUFR_)IS 1ST HEADER_^1_%SAM OK1-*-1_)WORD NEGATIVE._^1*_]_^1HDRERR LDA ERFLAG_'GET SUPRESS ERROR FLAG_^1_%ENQ 3_^1_%SAZ HERCAL-*-1_"IS THE FLAG SET_^1_%JMP* (HDRTST)_$YES, RETURN WITH Q NON-ZERO_^1HERCAL RTJ* SETST2_'NO, SET HEADER ERROR BIT (3)_^1_%ENA 3_,SET ERROR CODE = 3_^1_%JMP* ERROR_+FOR BAD RECORD HEADER._^1*_]_^1OK1_"AND- LPMSK+15_$CLEA€€R BIT 15_^1_%SAN OK2-*-1_%IS IT ZERO_^1_%ENQ 10_+YES, SET STATUS BIT 10_^1_%RTJ* SETST2_*FOR LOAD POINT SENSED._^1_%JMP* OK3_^1OK2_"SAP OK3-*-1_%SKIP IF 1ST HEADER WORD POSITIVE_^1_%JMP* HDRERR_'NO, ERROR_^1OK3_"LDA BUFR+1_'GET 2ND HEADER WORD_^1_%SAZ OK5-*-1_%IF ZERO, OK_^1_%EOR- NZERO_(IF $FFFF IT_^1_%SAZ OK4-*-1_)IS AN END OF FILE._^1_%JMP* HDRERR_'IF NEITHER, A HEADER ERR€€OR_^1OK4_"ENQ 11_+SET STATUS BIT 11_^1_%RTJ* SETST2_*TO INDICATE EOF SENSED._^1OK5_"LDA BUFR+2_'GET 3RD HEADER WORD_^1_%SAM OK6-*-1_%IS IT NEGATIVE_^1_%JMP* HDRERR_'NO, HEADER ERROR_^1OK6_"AND- LPMSK+15_$CLEAR BIT 15_^1_%STA BUFR+2_'RESTORE IT IN HEADER_^1_%SAN OK7-*-1_%IS IT ZERO_^1_%ENQ 8_,YES, SET STATUS BIT 8_^1_%RTJ* SETST2_*FOR END OF WRITTEN DATA SENSED._^1_%JMP* OK8_^€€1OK7_"SAP OK8-*-1_%SKIP IF 3RD HEADER WORD POSITIVE_^1_%JMP* HDRERR_'NO, HEADER ERROR_^1OK8_"CLR Q_,Q = 0 FOR NO HEADER ERROR_^1_%JMP* (HDRTST)_$RETURN_^1*_]_^1_%EJT_]_^1*_]_^1* DISK READ/WRITE COUPLER ROUTINE_^1*_]_^1RDISK NOP 0_^1_%LDA* RDISK_(SET RETURN_^1_%STA* WDISK_+ADDRESS._^1_%LDA =N$4200_%SET UP READ IN CALL_^1_%JMP* STREQ_^1WDISK NOP 0_^1_%LDA =N$4400_%SET UP WRIT€€E IN CALL_^1STREQ STQ* NUMB_)STORE NUMBER OF WDS TO READ OR WRITE_^1_%TRA Q_^1_%LDA- (I)_*SET UP_^1_%AND- LPMSK+4_)REQUEST_^1_%EAQ Q_2AND_^1_%ALS 4_5COMPLETION_^1_%EAQ A_8PRIORITIES_^1_%STA* REQ_^1_%LDA- EDSKLU,I_$GET DISK LU_^1_%STA* LU_.FOR THIS PSEUDO-TAPE._^1_%LDA- EDSMSB,I_$SET MM_^1_%STA* MMADR_+ADDRESS_^1_%LDA- EDSLSB,I_+IN_^1_%STA* MMADR+1_/CALL._^1_%LDA- I_,SAVE_^1_%S€€TA* SAVEI_+I REGISTER._^1_%SPC 1_^1_%RTJ- (AMONI)_^1REQ_"ADC 0_^1COMP_!ADC CMPL_^1_%ADC 0_^1LU_#ADC 0_^1NUMB_!ADC 0_^1BUFADR ADC 0_^1MMADR ADC 0,0_^1_%JMP- (ADISP)_^1*_]_^1CMPL_!LDA* SAVEI_(RESTORE_^1_%STA- I_/I REGISTER._^1_%LDA* LU_+DID A DISK I/O ERROR OCCUR_^1_%SAM IOERR-*-1_#YES_^1_%JMP* (WDISK)_%NO, RETURN_^1*_]_^1SAVEI NUM 0_,SAVE I REGISTER HERE_^1*_]_^1IOERR E€€NQ 5_,SET BITS 5 AND_^1_%RTJ* SETST2_*6 IN STATUS WORD TO_^1_%ENQ 6_2INDICATE ALARM_^1_%RTJ* SETST2_0AND LOST DATA._^1_%ENA 2_,SET ERROR CODE = 2_^1*_]_^1* ERROR HANDLING ROUTINES_^1*_]_^1ERROR LDQ- ELU,I_(SET UP_^1_%QLS 6_/ERROR WORD_^1_%EAQ Q_2FOR ALTERNATE_^1_%STQ* TEMP1_1DEVICE HANDLER._^1_%LDA- ESTAT1,I_$SET ALARM_^1_%AND- LPMSK+14_(AND SHORT_^1_%EOR- NZERO+14_+TRANSFER €€BITS IN_^1_%STA- ESTAT1,I_.ERROR (V) FIELD._^1_%LDA- ECCOR,I_%SINCE NO TRANSFER_^1_%LDQ- ELSTWD,I_(OCCURED SET LAST WORD_^1_%INQ -1_1OF USERS BUFFER TO_^1_%STA- (ZERO),Q_.ADDRESS OF 1ST WORD._^1_%LDQ* TEMP1_(PICK UP ERROR WORD_^1_%RTJ+ LOG_*ENGINEER LOG_^1EREXIT LDA- (I)_^1_%STA* GO_^1_%RTJ- (AMONI)_%SCHEDULE ALTDEV SO_^1GO_#NUM 0_/WE CAN_^1_%ADC ALTDEV_-RETAIN CONTROL._^1_%JMP €€ CYCLE_(GO CHECK OTHER PENDING REQUESTS_^1*_]_^1*_]_^1TPMERR LDQ- ELU,I_(SET UP ERROR WORD_^1_%QLS 6_/FOR ALTERNATE_^1_%EAQ Q_2DEVICE HANDLER._^1_%LDA- ESTAT1,I_$SET ALARM_^1_%AND- ZROBIT+15_'BIT (15)_^1_%EOR- ONEBIT+15_*IN SOFTWARE_^1_%STA- ESTAT1,I_.STATUS WORD._^1_%JMP* EREXIT_^1*_]_^1*_]_^1TEMP1 NUM 0_,TEMPORARY STORAGE LOCATION_^1MULTNO NUM 0_,NUMBER OF TIMES TO EXECUTE -€€- EQUALS -1 FOR_^1*_=SINGLE REQUESTS_^1*_]_^1_%EJT_]_^1*_]_^1* TAPE MOTION AND DENSITY CHANGE REQUEST ROUTINES_^1*_]_^1TPMCTL LDA FMFND_(PASS FILEMARK_^1_%STA FILEMK_*FOUND FLAG_^1_%LDA- 4,Q_*GET MOTION REQUEST CODES_^1_%SAP SINGRQ-*-1_"CHECK FOR MULTIPLE REQUESTS_^1_%TRA Q_,MULTIPLE REQUEST_^1_%AND- LPMSK+12_$ISOLATE NUMBER OF TIMES TO EXECUTE_^1_%INA -1_^1_%SAP MULTOK-*-1_"€€CHECK FOR POSITIVE, NON-ZERO NUMBER_^1_%ENA 60_+ILLEGAL, SET ERROR CODE = 60_^1_%JMP* TPMERR_'NO, ERROR IN NUMBER_^1MULTOK STA* MULTNO_'STORE NUMBER - 1_^1_%TRQ A_^1_%AND =N$7000_%ISOLATE REQUEST CODE_^1_%ALS 4_^1_%STA* TEMP1_^1_%TRA Q_^1_%JMP* LEGAL_^1SINGRQ ENQ -1_+SINGLE REQUEST_^1_%STQ* MULTNO_'SET FLAG FOR SINGLE REQUESTS_^1_%STA* TEMP1_(STORE IT_^1_%AND- LPMSK+4_%ISOLAT€€E DENSITY_^1_%TRA Q_/BITS._^1_%SQN TSTDNS-*-1_"IS THERE A DENSITY CHANGE_^1_%JMP* NOCHG_(NO_^1TSTDNS LDA- ESTAT2,I_$CLEAR DENSITY BITS_^1_%AND =N$9FFF_)IN STATUS WORD._^1_%INQ -1_+IS IT 200 BPI_^1_%SQN TST556-*-1_"NO_^1_%JMP* STODNS_'YES, RESTORE STATUS_^1TST556 INQ -1_+IS IT 556 BPI_^1_%SQN TST800-*-1_"NO_^1_%EOR- ONEBIT+13_#YES, SET BIT 13_^1_%JMP* STODNS_*IN STATUS WORD._€€^1TST800 EOR- ONEBIT+14_#ALL OTHERS ARE 800 BPI_^1STODNS STA- ESTAT2,I_$RESTORE STATUS WORD_^1NOCHG LDA* TEMP1_(CLEAR DENSITY_^1_%AND- NZERO+4_)BITS IN_^1_%STA* TEMP1_.REQUEST CODES._^1_%JMP* GETREQ_^1TPCTLR LDQ* MULTNO_^1_%SQM GETREQ-*-1_"CHECK FOR SINGLE REQUESTS_^1_%SQN DECR-*-1_$CHECK IF FINISHED WITH A MULTIPLE REQUEST_^1_%JMP* DONOTH_^1DECR_!INQ -1_+DECREMENT NUMBER OF TI€€MES TO EXECUTE_^1_%STQ* MULTNO_^1_%LDQ* TEMP1_(LOAD REQUEST INTO Q_^1_%JMP* LEGAL_^1GETREQ LDA* TEMP1_(GET_^1_%CLR Q_/1ST_^1_%LLS 4_2REQUEST_^1_%STA* TEMP1_1PARAMETER._^1LEGAL INQ -8_+LEGALITY_^1_%SQM TPM1-*-1_(CHECK._^1_%ENA 60_+ILLEGAL, SET ERROR CODE = 60_^1_%JMP* TPMERR_*FOR ILLEGAL TAPE MOTION REQUEST._^1TPM1_!JMP* TPMTBL+8,Q_"GO TO PROCESSOR_^1*_]_^1*_]_^1TPMTBL JMP* DO€€NOTH_'EXIT FROM TAPE MOTION REQUESTS_^1_%JMP* BSPR_)BACKPACE RECORD_^1_%JMP* MARKEF_'WRITE END OF FILE_^1_%JMP* REWIND_'REWIND PSEUDO-TAPE_^1_%JMP* UNLOAD_'UNLOAD PSEUDO-TAPE_^1_%JMP* SKF_^1_%JMP* BSF_^1_%JMP SKIPR_(ADVANCE TO NEXT RECORD_^1SKF_"JMP SKIPF_(ADVANCE PAST NEXT FILE MARK_^1BSF_"JMP BKSPF_(BACKSPACE PAST PREV FILE MARK_^1*_]_^1*_]_^1DONOTH LDA* FILEMK_'PASS FILEMARK €€FOUND_^1_%STA FMFND_+FLAG BACK._^1_%JMP EXIT_)FINISHED_^1*_]_^1RESET NOP 0_^1_%LDA- EDSTR2,I_$RESET MM_^1_%STA- EDSLSB,I_(POINTER TO_^1_%LDA- EDSTR1,I_+START OF_^1_%STA- EDSMSB,I_.MM BUFFER._^1_%ENQ 10_+SET LOAD POINT BIT (10)_^1_%RTJ SETST2_*IN STATUS WORD._^1_%RTJ* CLRBSF_'CLEAR BACKSPACE FILEMARK AND BIT_^1_%ENQ 11_+CLEAR FIILE MARK BIT (11)_^1_%RTJ* CLRST2_*IN STATUS WOR€€D._^1_%CLR Q_,CLEAR FILE MARK ON LAST OPERATION FLAG_^1_%STQ* FILEMK_^1_%JMP* (RESET)_^1*_]_^1REWIND RTJ* RESET_(RESET MM POINTER_^1_%JMP* TPCTLR_*AND GET NEXT REQUEST._^1*_]_^1UNLOAD RTJ* RESET_(RESET MM POINTER_^1_%JMP* DONOTH_*AND EXIT FROM DRIVER._^1BSPR_!RTJ* RDHEDR_'READ AND CHECK HEADER OF CURRENT RECORD_^1_%ENQ 8_,CLEAR END OF WRITTEN DATA BIT (8)_^1_%RTJ* CLRST2_*IN STAT€€US WORD._^1_%ALS 4_,WAS A FILE MARK FOUND_^1_%SAP NOFLMK-*-1_"NO, CHECK FOR LOAD POINT_^1_%ENQ 11_+YES, CLEAR FILE MARK BIT (11)_^1_%RTJ* CLRST2_*IN STATUS WORD._^1_%LDQ* FILEMK_'CHECK IF FOUND ON LAST OPERATION_^1_%SQZ NOFLMK-*-1_"NO, CHECK FOR LOAD POINT_^1_%CLR Q_,YES, CLEAR FILE MARK ON_^1_%STQ* FILEMK_*LAST OPERATION FLAG_^1_%RTJ* SETBSF_'SET BACKSPACE FILEMARK BIT AND FL€€AG_^1_%JMP* TPCTLR_'GET NEXT REQUEST_^1NOFLMK LDA- ESTAT2,I_$GET STATUS WORD_^1_%ALS 5_,CHECK IF AT LOAD POINT_^1_%SAP BSR3-*-1_$NO, BACKSPACE A RECORD_^1_%JMP* FINISH_'YES, DO NOT BACKSPACE ANYMORE_^1BSR3_!ENQ 0_^1_%STQ* FILEMK_'CLEAR FILE MARK ON LAST OPERATION FLAG_^1_%RTJ* CLRBSF_'CLEAR BACKSPACE FILEMARK BIT AND FLAG_^1_%RTJ* DECADR_'DECREMENT MM POINTER_^1_%RTJ* RDHEDR_'RE€€AD AND CHECK NEW HEADER_^1_%LDA* BUFR+2_'CHECK FOR SHORT RECORD_^1_%INA -1_+IS SIZE OF NEXT RECORD_^1_%SAN BSR2-*-1_(LESS THAN 2?_^1_%ENA 11_+YES, CLEAR FILE MARK BIT (11)_^1_%RTJ* CLRST2_*IN STATUS WORD._^1_%RTJ* SETBSF_^1_%JMP* TPCTLR_'GET NEXT REQUEST_^1BSR2_!LDA- ESTAT2,I_$GET STATUS WORD_^1_%ALS 4_,WAS A FILE MARK FOUND_^1_%SAP FINISH-*-1_"NO, GET NEXT REQUEST_^1_%ENQ 1_€€,SET FILE MARK ON LAST OPERATION FLAG._^1_%STQ* FILEMK_^1FINISH JMP* TPCTLR_'GET NEXT REQUEST_^1*_]_^1*_]_^1MARKEF LDA- ESTAT2,I_$GET STATUS WORD._^1_%SAM OKMARK-*-1_"CHECK IF WRITE ENABLE RING PRESENT_^1_%ENA 13_+NO, SET ERROR CODE = 13_^1_%JMP TPMERR_*TO INDICATE NO WRITE RING._^1OKMARK LDA* FILEMK_'CHECK IF WE ARE AT AN EOF_^1_%SAZ SINGEF-*-1_^1_%ENA $22_*YES, SET UP STARTI€€NG ADDRESS FOR_^1_%STA STRTCO_*WRITE OF SHORT RECORD_^1_%ENA 1_^1_%ENQ 1_^1_%STA NUMWDS_'SET UP NUMBER OF WORDS TO WRITE_^1_%RTJ WRITE_(WRITE THE SHORT RECORD_^1_%RTJ* INCADR_'INCREMENT ADDRESS TO WRITE NEXT EOF_^1SINGEF RTJ* RDHEDR_'READ AND CHECK HEADER OF CURRENT RECORD._^1_%ENQ 11_+SET FILE MARK BIT (11)_^1_%RTJ SETST2_*IN STATUS WORD._^1_%RTJ* CLRBSF_'CLEAR BACKSPACE FI€€LEMARK BIT AND FLAG_^1_%ENA 1_^1_%STA* FILEMK_'SET FILE MARK_^1_%STA FMFND_+IN FILEMARK FLAGS_^1_%SET A_2AND IN HEADER_^1_%STA* BUFR+1_^1_%LDA- ONEBIT+15_#WRITE END OF WRITTEN_^1_%STA* BUFR+2_*DATA IN HEADER WORD_^1_%ENQ 3_,WRITE HEADER BACK_^1_%LDA* HDRBFR_^1_%STA BUFADR_^1_%RTJ WDISK_+ONTO DISK._^1_%JMP* FINISH_'GET NEXT REQUEST_^1_%EJT_]_^1*_]_^1*_]_^1* THIS IS THE BUFFER €€AREA_^1*_]_^1_%BZS BUFR(3)_%THE HEADER FOR RECORD GOES HERE_^1_%BZS BUFR1(3)_$TRAILER GOES HERE_^1HDRBFR ADC BUFR_)POINTER TO HEADER BUFFER_^1TRLBFR ADC BUFR1_(POINTER TO TRAILER BUFFER_^1*_]_^1DECADR NOP 0_^1_%LDA* BUFR_)GET LENGTH OF PRECEEDING RECORD_^1_%AND- LPMSK+15_$CLEAR BIT 15_^1_%INA 3_,CORRECT FOR HEADER LENGTH_^1_%TCA A_,SUBTRACT INCREMENT_^1_%ADD- EDSLSB,I_(FROM €€LSB OF MM POINTER._^1_%SAP FINDEC-*-1_"HAVE WE UNDERFLOWED_^1_%AND- LPMSK+15_$YES, CLEAR BIT 15_^1_%INA 1_^1_%LDQ- EDSMSB,I_$DECREMENT_^1_%INQ -1_.MSB_^1_%STQ- EDSMSB,I_+SLOT._^1FINDEC STA- EDSLSB,I_$RESTORE LSB_^1_%JMP* (DECADR)_^1*_]_^1CLRBSF NOP 0_^1_%CLR Q_,CLEAR_^1_%STQ* FLMARK_^1_%ENQ 7_/FILEMARK BIT_^1_%RTJ* CLRST2_-AND FLAG._^1_%JMP* (CLRBSF)_^1*_]_^1FILEMK NUM 0_,SE€€T IF A FILEMARK SENSED ON LAST OPERATION_^1FLMARK NUM 0_,SET IF A FILEMARK SENSED ON LAST BACKSPACE_^1*_]_^1CLRST2 NOP 0_^1_%LDA- ESTAT2,I_$CLEAR BIT GIVEN_^1_%AND- ZROBIT,Q_(IN Q REGISTER_^1_%STA- ESTAT2,I_+IN STATUS WORD._^1_%JMP* (CLRST2)_^1*_]_^1RDHEDR NOP 0_^1_%ENQ 3_^1_%LDA* HDRBFR_^1_%STA BUFADR_'READ AND_^1_%RTJ RDISK_+TEST HEADER_^1_%RTJ HDRTST_-OF CURRENT RECORD._^€€1_%JMP* (RDHEDR)_^1*_]_^1SETBSF NOP 0_,SET_^1_%ENQ 1_/FILEMARK BIT_^1_%STQ* FLMARK_-AND FLAG_^1_%ENQ 7_^1_%RTJ SETST2_^1_%JMP* (SETBSF)_^1*_]_^1INCADR NOP 0_^1_%LDA* BUFR+2_'GET LENGTH OF RECORD_^1_%AND- LPMSK+15_$CLEAR BIT 15 IF NECESSARY_^1_%INA 3_,CORRECT FOR HEADER LENGTH_^1_%RTJ* INKADR_'INCREMENT ADDRESS_^1_%JMP* (INCADR)_^1*_]_^1INKADR NOP 0_^1_%ADD- EDSLSB,I_$ADD LSB€€ OF MM POINTER_^1_%SAP FININC-*-1_"HAVE WE OVERFLOWED_^1_%AND- LPMSK+15_$YES, CLEAR BIT 15_^1_%RAO- EDSMSB,I_$INCREMENT MSB_^1FININC STA- EDSLSB,I_$RESTORE LSB_^1_%JMP* (INKADR)_$RETURN_^1*_]_^1_%EJT_]_^1SKIPF RTJ* RDHEDR_'READ AND CHECK HEADER OF CURRENT RECORD._^1_%ENQ 10_+CLEAR LOAD POINT BIT (10)_^1_%RTJ* CLRST2_*IN STATUS WORD._^1_%RTJ* CLRBSF_'CLEAR BACKSPACE FILEMARK BIT €€AND FLAG_^1_%ALS 4_,WAS A FILE MARK FOUND_^1_%SAP FNDBFR-*-1_"NO, CHECK FOR END OF WRITTEN DATA_^1_%LDQ* FILEMK_'YES, DID WE FIND_^1_%SQN FNDBFR-*-1_%IT ON LAST OPERATION._^1_%LDA* BUFR+2_'NO, CHECK FOR SHORT RECORD_^1_%INA -1_+IS SIZE OF NEXT RECORD_^1_%SAN SKIPF2-*-1_%LESS THAN 2?_^1_%ENA 11_+YES, CLEAR FILE MARK BIT (11)_^1_%RTJ* CLRST2_*IN STATUS WORD._^1_%RTJ* SETBSF_^1_€€%RTJ* INCADR_'INCREMENT THE ADDRESS_^1_%RTJ* RDHEDR_'READ AND CHECK HEADER OF CURRENT RECORD_^1_%JMP* FINISH_'GET NEXT REQUEST_^1SKIPF2 ENA 1_,NO, SET_^1_%STA* FILEMK_*IT NOW._^1_%JMP* FINISH_'GET NEXT REQUEST_^1FNDBFR ALS 3_,ARE WE AT THE END OF WRITTEN DATA_^1_%SAP NOTFND-*-1_"NO, ADVANCE TO NEXT RECORD_^1_%ENA 18_+YES, SET ERROR CODE = 18_^1_%JMP TPMERR_*TO INDICATE END OF €€WRITTEN DATA._^1NOTFND ENQ 11_+CLEAR FILE MARK BIT (11)_^1_%RTJ* CLRST2_*IN STATUS WORD._^1_%CLR Q_,CLEAR FILE MARK_^1_%STQ* FILEMK_*FOUND FLAG._^1_%RTJ* INCADR_'INCREMENT MM POINTER TO NEXT RECORD_^1_%JMP* SKIPF_(CHECK AGAIN FOR FILE MARK_^1*_]_^1BKSPF RTJ* RDHEDR_'READ AND CHK HDR OF CURRENT REC._^1_%ENQ 8_,CLEAR END OF WRITTEN DATA BIT (8)_^1_%RTJ* CLRST2_*IN STATUS WORD._^1€€_%ALS 4_,WAS A FILE MARK FOUND_^1_%SAP FDBEFR-*-1_"NO, CHECK IF WE ARE AT LOAD POINT_^1_%ENQ 11_+YES, CLEAR FILE MARK BIT (11)_^1_%RTJ* CLRST2_*IN STATUS WORD._^1_%LDQ* FILEMK_'DID WE FIND IT_^1_%SQZ FDBEFR-*-1_%ON LAST OPERATION._^1_%RTJ* SETBSF_'YES, SET BACKSPACE FILEMARK BIT AND FLAG_^1_%ENQ 0_,CLEAR FOREWARD_^1_%STQ* FILEMK_*FILEMARK FLAG._^1_%JMP* FINSH_(GET NEXT REQUEST€€_^1FDBEFR RTJ* CLRBSF_'CLEAR BACKSPACE FILEMARK BIT AND FLAG_^1_%ALS 5_,ARE WE AT THE LOAD POINT_^1_%SAP NTFOND-*-1_"NO_^1_%JMP* FINSH_(GET NEXT REQUEST_^1NTFOND RTJ* DECADR_'DECREMENT MM POINTER_^1_%ENQ 1_,SET FILEMARK ON LAST OPERATION IN CASE WE_^1_%STQ* FILEMK_*BACKED UP TO AN END OF FILE_^1_%JMP* BKSPF_(CHECK AGAIN FOR FILE MARK_^1*_]_^1SKIPR RTJ* RDHEDR_'READ AND CHECK HE€€ADER OF CURRENT RECORD_^1_%ENQ 10_+CLEAR LOAD POINT BIT (10)_^1_%RTJ* CLRST2_*IN STATUS WORD_^1_%ALS 4_,WAS A FILE MARK FOUND_^1_%SAP NFILMK-*-1_"NO, CHECK FOR END OF WRITTEN WORD_^1_%LDQ* FILEMK_'YES, DID WE FIND IT ON LAST OPERATION_^1_%SQN NFILMK-*-1_"YES, CHECK FOR END OF WRITTEN DATA_^1_%LDA BUFR+2_'NO, CHECK FOR SHORT RECORD_^1_%INA -1_+IS SIZE OF NEXT RECORD_^1_%SAZ A€€DVREC-*-1_%LESS THAN 2?_^1_%ENQ 1_^1_%STQ* FILEMK_'SET IT NOW_^1_%RTJ* CLRBSF_'CLEAR BACKSPACE FILEMARK BIT AND FLAG_^1_%JMP* FINSH_(GET NEXT REQUEST_^1NFILMK ALS 3_,CHECK IF END OF WRITTEN DATA_^1_%SAP ADVREC-*-1_"NO, ADVANCE TO NEXT RECORD_^1_%JMP* FINSH_(YES, DO NOT ADVANCE ANYMORE_^1ADVREC ENQ 11_+CLEAR FILE MARK BIT (11)_^1_%RTJ* CLRST2_*IN STATUS WORD_^1_%ENQ 0_^1_%STQ* €€FILEMK_'CLEAR FILE MARK ON LAST OPERATION FLAG_^1_%RTJ* CLRBSF_'CLEAR BACKSPACE FILEMARK BIT AND FLAG_^1_%RTJ* INCADR_^1_%RTJ* RDHEDR_'READ AND CHECK NEW HEADER_^1_%LDA- ESTAT2,I_$GET STATUS WORD_^1_%ALS 4_,WAS A FILE MARK FOUND_^1_%SAP FINSH-*-1_#NO, GET NEXT REQUEST_^1_%RTJ* SETBSF_'SET FILE MARK ON BACKSPACE FILE_^1_%ENQ 11_+CLEAR FILE MARK BIT (11)_^1_%RTJ* CLRST2_*IN STATUS€‚ WORD_^1FINSH JMP TPCTLR_'GET NEXT REQUEST_^1*_]_^1*_]_^1*_]_^1_%EQU ENDRVR(*)_#THIS IS THE LENGTH OF THE DRIVER_^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_]_^__nPJBKILL 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_]_^__²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_^__ΨPODBUG1 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_]_^__`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_"ADPMDRV56 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_]_^__Έ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_]_^__lPQMT7TK 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_]_^__0PSMM2 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_^__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_^__vPQCDDMY 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_]_^__€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_]_^__xPSCMTTY 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_]_^__ͺPSCMCRD 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_]_^__ 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_