PLOMEM CSY/ P€1_(NAM_!LOMEM_^1_(ENT_!LOMEM_^1_(EXT_!XDUMP_^1*_*C O M M U N I C A T I O N_!R E G I O N_^1*_]_^1LOMEM_"ALF_!0,0_^1_(JMP_!XDUMP_-JUMP TO STAND-ALONE DUMP ROUTINE_^1*_$RTJ SYFAIL_'GO TO COMMON SYSTEM FAILURE ROUTINE_^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 $E€€000_^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_]_^1LOWEND_!EQU_!LOWEND€H(*-LOMEM)_^1LFILL_"EQU_!LFILL($140-LOWEND)_^1_(BZS_!(LFILL)_^1_(END_^__ HPDMP827 CSY/ P€1_%NAM DMP827_'DECK-ID D01 PERIPH. DRIVERS 1.1C SUMMARY-110_^1****************************************************************_^1*_*1827 LINE PRINTER CORE DUMP ROUTINE_^1****************************************************************_^1*_$PERIPHERAL DRIVERS 1.1C_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 3_^1*_]_^1*_8€€USER INSTRUCTIONS_^1*_82. PUT ENDING ADDRESS+1 IN Q_)Q=8000_^1*_83. PUT START OF COUTV4 IN P_^1*_84. PUSH RUN SWITCH_^1*_]_^1*_1PROGRAM RESULTS AFTER RUNNING_^1*_81. PAPER IS SET AT TOP OF FORM_^1*_82. ABSOLUTE/RELATIVE(MOD 16) HEADING OF_^1*_;SIXTEEN COLUMNS AT TOP OF EACH PAGE_^1*_83. ABSOLUTE ADDRESS, RELATIVE ADDRESS,_^1*_;AND SIXTEEN WORDS PRINTED PER LINE_^1*_84. LINES WHOSE €€SIXTEEN WORDS ARE SAME AS_^1*_;LAST PRINTED WORD ARE IGNORED BY_^1*_;PRINTING A ROW OF ASTERISKS_^1*_85. PRINTS 60 LINES PER PAGE,HANGS WHEN DONE_^1*_]_^1*_$ENT COUTV4_^1_(ENT_!XDUMP_^1_(ENT_!DMP827_^1DMP827_!ALF_!0,0_^1COUTV4_!ALF_!0,0_^1_(EXT_!TPINIT_^1_(JMP_!TPINIT_^1*_]_^1PART1_"ALF_!0,0_^1XDUMP_"EQU_!XDUMP(PART1)_^1_(LDA_!=N0_^1_(LDQ_!=N$1FFF_^1_(JMP* GO_^1*_]_^1PART2_"ALF_!€€0,0_^1_(LDA_!=N$0040_^1_(LDQ_!=N$0200_^1*_]_^1GO_%ALF_!0,0_^1_%STA STRADR_'SAVE CURRENT,STARTING AND ENDING ADDRESSES_^1_%STA CURADR_^1_%STQ ENDADR_^1_%RTJ STATUS_'WAIT UNTIL STATUS OK_^1*_]_^1NXTPAG ENA $40_*TOP OF FORM_^1_%RTJ OUTPUT_^1_%ENA_!-60_^1_%STA LINCTR_^1_%ENA 0_^1_%STA HEXCTR_^1_%ENQ -1_^1_(LDA =N$4142_^1_%RTJ* RPTOUT_'OUTPUT AB_^1_%ENQ -1_^1_%LDA =N$534C_^€€1_%RTJ* RPTOUT_'OUTPUT SL_^1_%ENQ -1_^1_%LDA* TWOSPC_^1_%RTJ* RPTOUT_'OUTPUT TWO SPACES_^1_%ENQ -1_^1_%LDA =N$2052_^1_%RTJ* RPTOUT_'OUTPUT R_^1_%ENQ -1_^1_%LDA =N$454C_^1_%RTJ* RPTOUT_'OUTPUT EL_^1_%ENQ -4_^1*_]_^1HEDFLD LDA* TWOSPC_'NEXT HEADING FIELD_^1_%RTJ* RPTOUT_'OUTPUT CORRECT NUMBER OF SPACES_^1_%ENA $F_+NEXT HEADING WORD_^1_%AND* CURADR_^1_%ADD* HEXCTR_'GET ABSOLUTE€€ HEXADECIMAL DIGIT_^1_%ALS 4_^1_%EOR* HEXCTR_'GET RELATIVE HEXADECIMAL DIGIT_^1_%ALS 8_^1_%RTJ OUT2CH_'OUTPUT ABSOLUTE AND RELATIVE HEX DIGIT HEADING_^1_%RAO* HEXCTR_^1_%LDA* HEXCTR_^1_%INA -$10_)INCREMENT HEX COLUMN COUNTER, IS IT $10_^1_%SAP HEDDON_*YES, ENTIRE HEADING HAS BEEN OUTPUT_^1_%ENQ -2_.NO, OUTPUT NEXT HEADING FIELD_^1_%JMP* HEDFLD_^1HEDDON RTJ* PRTSPC_'PRINT HEAD€€ING FIELD AND SPACE TO NEXT LINE_^1_%JMP* NXTLIN_'OUTPUT THIS LINE_^1_%EJT_]_^1CHKLIN ENA 0_,CHECK LINE IF ALL WORDS SAME AS LAST WORD_^1_%STA* HEXCTR_'SET HEX COLUMN COUNTER_^1*_]_^1CHKFLD LDQ* CURADR_^1_%ADQ* HEXCTR_^1_%LDA* (ZERO),Q_^1_%EOR* LSTWRD_'IS NEXT WORD EQUAL TO LAST WORD OUTPUT_^1_%SAZ 1_^1_%JMP* NXTLIN_^1*_]_^1_%LDA* CURADR_'CHECK FOR END ADDRESS_^1_%ADD* HEXCTR_^1_€€%EOR* ENDADR_^1_%SAN_!1_^1_%JMP* NXTLIN_^1_%RAO* HEXCTR_*YES, INCREMENT HEX COLUMN COUNTER_^1_%LDA* HEXCTR_^1_%INA -$10_)IS HED COLUMN COUNTER $10_^1_%SAP 1_^1_%JMP* NXTCHK_^1*_]_^1_%LDA* CURADR_^1_%ADD* HEXCTR_^1_%STA* CURADR_^1_%LDA* IGNFLG_*YES, IS IGNORE FLAG SET_^1_%SAZ OUTASK_2NO, PRINT ROW OF ASTERISKS_^1_%JMP* CHKDON_2YES, CHECK IF ALL DONE_^1*_]_^1OUTASK ENA 1_^1_%RTJ€€* OUTPUT_^1_%ENQ -57_^1_%STQ* IGNFLG_'SET IGNORE FLAG_^1_%LDA* TWOASK_^1_%RTJ* RPTOUT_'OUTPUT A ROW OF ASTERISKS_^1_%RAO* LINCTR_*INCREMENT LINE COUNTER_^1_%JMP* PRTLIN_'PRINT ROW OF ASTERISKS_^1*_]_^1NXTCHK JMP* CHKFLD_^1*_]_^1NXTLIN ENA 1_^1_%RTJ* OUTPUT_^1_%LDA* CURADR_^1_%RTJ* OUTFLD_'OUTPUT CURRENT ABSOLUTE ADDRESS_^1_%LDA* CURADR_^1_%SUB* STRADR_^1_%RTJ* OUTFLD_'OUTPUT CURR€€ENT RELATIVE ADDRESS_^1_%ENQ -2_^1_%LDA* TWOSPC_^1_%RTJ* RPTOUT_'OUTPUT A SPACER FIELD_^1_%ENA 0_^1_%STA* HEXCTR_'SET HEX COLUMN COUNTER_^1_%STA* IGNFLG_'RESET IGNORE FLAG_^1*_]_^1NXTFLD LDQ* CURADR_^1_%LDA* (ZERO),Q_$GET NEXT CORE WORD_^1_%RTJ* OUTFLD_'OUTPUT NEXT FIELD (CORE WORD AND SPACES)_^1_%RAO* HEXCTR_^1_%LDA* CURADR_'CHECK TO SEE IF DONE_^1_%EOR* FFFE_^1_%SAZ 3_^1_%LDA€€* CURADR_^1_%EOR* ENDADR_^1_%SAN 2_^1_%RTJ* PRTSPC_^1_%JMP* ALLDON_^1_%LDA* HEXCTR_^1_%INA -$10_)INCREMENT HEX COLUMN COUNTER, IS $10_^1_%RAO* CURADR_'OUTPUT NEXT FIELD_^1_%SAP PRTLIN_*YES, PRINT THE LINE_^1_%JMP* NXTFLD_*NO, OUTPUT NEXT FIELD_^1_%EJT_]_^1PRTLIN RTJ* PRTSPC_'PRINT THE LINE AND SPACE TO THE NEXT LINE_^1*_]_^1CHKDON LDA* IGNFLG_'NO,IS IGNORE FLAG SET_^1_%SAN CKNX€€LN_1YES, CHECK NEXT LINE_^1*_]_^1_%RAO* LINCTR_1NO, INCREMENT LINE COUNTER_^1_%LDA* LINCTR_'HAS BOTTOM OF PAGE BEEN REACHED_^1_%SAM CKNXLN_*NO, CHECK NEXT LINE_^1_%JMP* NXTPAG_*YES, SET TOP OF FORM AND PRINT HEADING_^1*_]_^1CKNXLN JMP* CHKLIN_^1*_]_^1*_]_^1*_]_^1ALLDON_!ALF_!0,0_^1_(LDA_!=N2_^1PARTS_"EQU_!PARTS(*-1)_^1_(INA_!-1_^1_(STA* PARTS_^1_(SAZ_!*+3_^1_(JMP_!PART2_^1_%NUM €€$18FF_(ALL DONE, HANG_^1_%EJT_]_^1RPTOUT 000 000_*REPEAT OUTPUT WORD IN A, Q-TIMES_^1_%STQ* RPTCTR_*SET REPEAT COUNTER AND SAVE WORD_^1_%STA* WRDSAV_^1RPTAGN ALS 8_^1_%RTJ* OUTPUT_^1_%LDA* WRDSAV_^1_%RTJ* OUTPUT_^1_%LDA* WRDSAV_^1_%RAO* RPTCTR_^1_%LDQ* RPTCTR_'INCREMENT REPEAT COUNTER, IS IT ZERO_^1_%SQP RPTEXT_*YES, ALL DONE, EXIT_^1_%JMP* RPTAGN_*NO, REPEAT AGAIN_^1RPTEXT JMP*€€ (RPTOUT)_^1_%SPC 2_^1PRTSPC 000 000_*PRINT LINE AND SPACE TO THE NEXT LINE_^1_%ENA $20_*PRINT_^1_%RTJ* OUTFCT_^1_%JMP* (PRTSPC)_^1_%SPC 2_^1TWOSPC NUM $2020_(TWO SPACES_^1ENDADR NUM $8000_(ENDING ADDRESS + 1_^1STRADR NUM 0_,STARTING ADDRESS_^1CURADR NUM 0_,CURRENT ADDRESS_^1HEXCTR NUM 0_,HEX COLUMN COUNTER_^1LINCTR NUM 0_,LINE COUNTER_^1RPTCTR NUM 0_,REPEAT COUNTER_^1IG€€NFLG NUM 0_,IGNORE FLAG_^1WRDSAV NUM 0_,WORD SAVE_^1LSTWRD NUM 0_,LAST WORD_^1ZERO_!NUM 0_,ZERO_^1TWOASK NUM $2A2A_(TWO ASTERISKS_^1WESSTA NUM $0201_(HARDWARE ADDRESS (STATUS)_"(EQ 4)_^1FFFE_!NUM $FFFE_^1_%SPC 2_^1OUTFLD 000 000_*OUTPUT NEXT FIELD_^1_%STA* LSTWRD_*SAVE LAST WORD OUTPUT_^1_%RTJ* OUT2CH_'OUTPUT FIRST TWO CHARACTERS_^1_%LDA* LSTWRD_^1_%ALS 8_^1_%RTJ* OUT2CH_€€'OUTPUT LAST TWO CHARACTERS_^1_%LDA* TWOSPC_^1_%ENQ -1_^1_%RTJ* RPTOUT_^1_%JMP* (OUTFLD)_^1_%SPC 2_^1OUT2CH 000 000_*OUTPUT TWO HEX CHARACTERS_^1_%ENQ 0_/CHARACTERS IN BITS 8-15 OF A_^1_%LLS 4_^1_%ALS 4_,PUT FIRST CHARACTER IN Q AND SECOND ONE IN A_^1_%AND =N$F_^1*_]_^1_%INQ -$A_^1_%SQP 1_,CONVERT FIRST CHARACTER TO ASCII_^1_%INQ +$3A-$41_^1_%INQ $41_^1*_]_^1_%INA -$A_^€€1_%SAP 1_,CONVERT SECOND CHARACTER TO ASCII_^1_%INA +$3A-$41_^1_%INA $41_^1*_]_^1_%QLS 8_,COMBINE BOTH ASCII CHARACTERS IN A_^1_%EAQ A_^1_%ENQ -1_^1_%RTJ* RPTOUT_^1_%JMP* (OUT2CH)_^1_%EJT_]_^1OUTPUT 000 000_*OUTPUT TWO ASCII CHARACTERS_^1_%LDQ* WESSTA_'CHARACTERS IN 'A'_^1_%INQ -1_^1_%OUT -1_+OUTPUT_^1_%RTJ* STATUS_^1_%JMP* (OUTPUT)_$CHECK STATUS AND EXIT_^1_%SPC 2_^1OUTF€€CT 000 000_*OUTPUT LINE PRINTER FUNCTION_^1_%LDQ* WESSTA_'FUNCTION IN 'A'_^1_%OUT -1_+OUTPUT FUNCTION_^1_%RTJ* STATUS_^1_%JMP* (OUTFCT)_$CHECK STATUS AOK AND EXIT_^1_%SPC 2_^1STATUS 000 000_*ASCERTAIN LINE PRINTER STATUS AOK_^1_%LDQ* WESSTA_^1INPSTA INP -1_+INPUT STATUS_^1_%AND =N$000B_^1_%INA -9_^1_%SAZ STAAOK_'IS STATUS AOK_^1_%JMP* INPSTA_*NO, REREAD STATUS_^1STAAOK JMP*€ (STATUS)_(YES, EXIT_^1_(END_^__ PXCOMM CSY/ P€1_(NAM_!XCOMM_^1_(ENT_!XCOMM_^1_(ENT_!XRDR,XPRT,XTPGET,XCON,XMIR_^1_(ENT_!XTPEX_^1_(ENT_!XTPPUT_^1_(ENT_!XRDRQ_^1_(ENT_!XCARD_^1_(EXT_!CRDR,LPRT,OCON,TPGET,MIR_^1_(EXT_!TPPUT_^1_(EXT_!RDCRQ_^1_(EXT_!TPEXEC_^1_(EXT_!CARD_^1_(SPC_!3_^1*********_]_^1*_-XCOMM -- COMMUTATOR (BACKGROUND DISPATCHER)_^1*********_]_^1_(SPC_!3_^1XCOMM_"ALF_!0,0_^1XTPEX_"RTJ_!TPEXEC_,TO TP EXECUTIVE_^1XRDRQ_"€€RTJ_!RDCRQ_-READ CARD READER QUEUE_^1XRDR_#RTJ_!CRDR_.CARD READER SWITCH_^1XCARD_"JMP* *+2_/CONVERT CARD JUST READ FROM RAW BINARY_^1_(ADC_!CARD_.TO ASCII_^1XPRT_#RTJ_!LPRT_.LINE PRINTER SWITCH_^1XCON_#RTJ_!OCON_.OPERATOR CONSOLE SWITCH_^1XTPGET_!RTJ_!TPGET_-GET NEXT TP BLOCK FROM HASP_^1XMIR_#RTJ_!MIR_/PROCESS MANUAL INPUT MESSAGE_^1XTPPUT_!RTJ_!TPPUT_-COMPRESSION QUEUE HANDLER_^€61_(JMP* XCOMM_-BACK AROUND THE COMMUTATOR_^1_(END_^__6PXCINT CSY/ P€1_(NAM_!XCINT_^1_(ENT_!XCINT,XCOUT_^1_(ENT_!STACK_^1_(ENT_!INTERN_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1_(SPC_!2_^1X7FFF_"EQU_!X7FFF($11)_^1X8000_"EQU_!X8000($21)_^1ZERO_#EQU_!ZERO($22)_^1X100_#EQU_!X100($2B)_^1_(SPC_!2_^1*********_€€]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1_(EQU_!INTERR($4F)_'INTERNAL INTERRUPT FAULT_^1*_@BIT 0 -- STORAGE PARITY_^1*_@BIT 1 -- PROGRAM PROTECT_^1*_@BIT 2 -- POWER FAILURE_^1ASTACK_!EQU_!ASTACK($7B)_'COMMON INTERRUPT STACK_^1************************************************************************_^1_(SPC_!3_^1****€€*****_]_^1*_-STACK REGISTER EQUATES_^1*********_]_^1_(SPC_!2_^1XQ_%EQU_!XQ(0)_-Q-REGISTER_^1XA_%EQU_!XA(1)_-A-REGISTER_^1XM_%EQU_!XM(2)_-MASK REGISTER_^1XI_%EQU_!XI(3)_-I-REGISTER_^1XV_%EQU_!XV(4)_-INTERRUPT VECTOR ENTRY + OVERFLOW IND._^1XR_%EQU_!XR(5)_-INTERRUPTED LOCATION_^1XL_%EQU_!XL(6)_-NUMBER OF WORDS PER STACK ELEMENT_^1_(SPC_!3_^1*********_]_^1*_-FOR EACH INTERRUPT USED BY€€ MRJE17 THE 4-WORD INTERRUPT_^1*_-VECTOR ENTRY LOOKS AS FOLLOWS;_^1*********_]_^1_(SPC_!2_^1*WORD1_!NUM_!0_1INTERRUPTED PROGRAM LOCATION_^1*WORD2_!RTJ- (AXCINT)_*GO TO COMMON SYSTEM INTER. ROUTINE_^1*WORD3_!NUM_!XXXX_.MASK REGISTER VALUE FOR THIS INTERRUPT_^1*WORD4_!ADC_!SSSS_.ADDRESS OF USER INTERRUPT ROUTINE_^1_(SPC_!3_^1*********_]_^1*_-XCINT -- COMMON INTERRUPT ENTRY_^1*******€€**_]_^1_(SPC_!2_^1XCINT_"0_#0_^1_(STQ- (ASTACK)_*ENTER Q IN STACK_^1_(LDQ- ASTACK_,ADDRESS OF STACK_^1_(STA- XA,Q_.SAVE A IN STACK_^1_(TRM_!A_^1_(STA- XM,Q_.SAVE M IN STACK_^1_(AND* (XCINT)_+KEEP ONLY THOSE BITS COMMON TO THE_^1*_@INT. MASK REG. AND THE INT. MASK WORD_^1_(TRA_!M_1SET NEW MASK REGISTER_^1_(LDA- I_^1_(STA- XI,Q_.SAVE I IN STACK_^1_(TRQ_!A_1MOVE STACK TO NEXT E€€NTRY_^1_(INA_!XL_^1_(STA- ASTACK_,DONE_^1_(LDA* XCINT_-SAVE INTERRUPT VECTOR ADDRESS WITH_^1_(INA_!-2_0OVERFLOW INDICATOR_^1_(STA- I_^1_(SNO_!*+2_^1_(EOR- X8000_^1_(STA- XV,Q_.DONE_^1_(LDA- (ZERO),I_^1_(STA- XR,Q_.SAVE INTERRUPTED LOCATION_^1_(LDQ- 3,I_^1_(EIN_!0_1ENABLE INTERRUPTS_^1_(JMP- (ZERO),Q_*AND TRANSFER TO FURTHER PROCESSING_^1_(SPC_!3_^1*********_]_^1*_-XCOUT --€€ COMMON INTERRUPT EXIT_^1*********_]_^1_(SPC_!3_^1XCOUT_"ALF_!0,0_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(STA* DBA_^1_(LDA- ASTACK_^1_(SUB_!=XSTACK_^1_(SAN_!NOBUG_^1_(STQ* DBQ_^1_(TRM_!A_^1_(STA* DBM_^1_(CLR_!A_^1_(TRA_!M_^1_(NUM_!$18FF_^1*_]_^1NOBUG_"ALF_!0,0_^1_(LDQ- ASTACK_,GET CURRENT STACK ADDRESS_^1_(INQ_!-XL_/MOVE TO LAST ENTRY_^1_(LDA- XM,Q_^1_(TRA_!M_1RESTORE M_^1_(SOV_!*€€+1_^1_(LDA- XV,Q_^1_(SAP_!NOVR_^1_(ENA_!16_^1_(ADD- X7FFF_^1_(LDA- XV,Q_^1_(AND- X7FFF_^1*_]_^1NOVR_#ALF_!0,0_^1_(STA- I_1RESTORE OVERFLOW INDICATOR AND_^1_(SUB- X100_.DELTA FOR EXIT INTERRUPT INSTRUCTION_^1_(ADD_!=N$0E00_^1_(STA* IEXI_.DONE_^1_(LDA- XR,Q_^1_(STA- (ZERO),I_*RESTORE INTERRUPTED INSTRUCTION ADDR_^1_(LDA- XI,Q_^1_(STA- I_1RESTORE I_^1_(STQ- ASTACK_,STACK P€€OINTER BACK ONE ENTRY_^1_(LDA- XA,Q_.RESTORE A_^1_(LDQ- (ASTACK)_*RESTORE Q_^1*_]_^1IEXI_#0_#0_^1*_]_^1DBA_$ADC_!0_^1DBQ_$ADC_!0_^1DBM_$ADC_!0_^1_(SPC_!3_^1*********_]_^1*_-INTERN -- INTERNAL INTERRUPT PROCESSOR_^1*********_]_^1_(SPC_!2_^1INTERN_!ALF_!0,0_^1_(SNP_!NOPAR_-IF STORAGE PARITY_^1_(ENA_!1_1THEN SET BIT 0 IN INTERR_^1*_]_^1FINI_#ALF_!0,0_^1_(STA- INTERR_,INTERR CONTAIN€€S THE INTERNAL INT. CODE_^1_(JMP_!0_1TO INFINITE LOOP_^1*_]_^1NOPAR_"ALF_!0,0_^1_(SNF_!NOPRO_-IF PROGRAM PROTECT_^1_(ENA_!2_1THEN SET BIT 1 IN INTERR_^1_(JMP* FINI_.DONE_^1*_]_^1NOPRO_"ALF_!0,0_^1_(ENA_!4_1SET BIT 2 IN INTERR FOR POWER FAILURE_^1_(JMP* FINI_.DONE_^1_(SPC_!3_^1*********_]_^1*_-INTERRUPT STACK_^1*********_]_^1_(SPC_!2_^1IACTIVE EQU_!IACTIVE(6)_(NO. OF ACTIVE INTER€:RUPTS ALLOWED_^1STACK_"BZS_!STACK(XL*IACTIVE)_^1_(END_^__ :PTIMER CSY/ P€1_(NAM_!TIMER_^1_(ENT_!TIMENQ,TIMDEQ_^1_(ENT_!XSTIME_^1_(ENT_!TIMINT,DMICOD,TBLADR,EMPSRT_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1********_]_^1_(SPC_!2_^1********_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY €€MRJE17._^1********_]_^1AXCOUT_!EQU_!AXCOUT($7A)_'COMMON INTERRUPT EXIT_^1************************************************************************_^1_(SPC_!3_^1*********_]_^1*_-TIMER SERVICES_^1*********_]_^1_(SPC_!2_^1*********_]_^1*_-TIMINT -- TIMER INTERRUPT ROUTINE_^1*********_]_^1_(SPC_!2_^1TIMINT_!LDA* CLKTBL+1_*ADVANCE INTERNAL TIMER BY 5_^1_(INA_!5_1TO YIELD A 16 2/3 (5 X 3€€ 1/3) MS CYCLE_^1_(STA* CLKTBL+2_*DONE_^1_(LDQ* EMPSRT_-ENABLE CLOCK AND LIMIT INTERRUPT_^1_(OUT_!TIMREJ-*_^1TIMREJ_!NOP_!0_^1*_]_^1TMRSW_"ALF_!0,0_/TIMER SWITCH SET BY TIMENQ AND TIMDEQ_^1_(JMP* *+2_/OFF POSITION_^1_(ADC* TIMEUP_-FURTHER PROCESSING_^1_(JMP- (AXCOUT)_*COMMON INTERRUPT EXIT_^1_(SPC_!3_^1*_]_^1TMCODE_!EQU_!TMCODE(8)_^1TMRTYP_!ADC TMCODE_-TIME BASE CODE_^1DMICOD_!€€NUM_!$8008_-DMI CODE_^1TBLADR_!ADC_!CLKTBL_,ADT TABLE ADDRESS_^1EMPSRT_!NUM_!$F3_/ENABLE CLOCK AND LIMIT INTERRUPT_^1EMPSTP_!NUM_!$F0_/DISABLE CLOCK AND LIMIT INTERRUPT_^1CLKTBL_!NUM_!$80F0_-ADT TABLE STARTS HERE_^1FSTIME_!NUM_!0_1INTERVAL START TIME_^1XSTIME_!EQU_!XSTIME(FSTIME)_^1_(NUM_!5_1INTERVAL STOP TIME_^1_(NUM_!0_1ZERO_^1TIMCPS_!EQU_!TIMCPS(60)_(TIMER CYCLES PER SECOND_^1TI€€MEC_"EQU_!TIMEC(TIMCPS/10-1) TIMER CYCLES PER 1/10 SECOND MINUS 1_^1_(SPC_!5_^1*********_]_^1*_,TIMENQ -- ENQUEUE A TIMER REQUEST_^1*********_]_^1*_]_^1*_-CALLING SEQUENCE_^1*_]_^1*_0IIN_!0_^1*_0RTJ_!TIMENQ_^1*_]_^1*_-UPON ENTRY_^1*_]_^1*_0(A) CONTAINS THE LENGTH OF THE INTERVAL IN SECONDS_^1*_0(Q) CONTAINS THE ADDRESS TO BE GIVEN CONTROL_^1*_4WHEN THE TIME INTERVAL EXPIRES._^1*_]_€€^1_(SPC_!2_^1TIMENQ_!0_#0_^1_(STQ* TIMACT_,SAVE INTERRUPT ADDRESS_^1_(STA* TIMEND_,STORE INTERVAL STOP TIME_^1_(ENA_!TIMCPS_,RESET THE 1-SECOND TIMER_^1_(STA* SEC_^1_(LDA_!=N$1800_^1_(STA* TMRSW_-FLIP ON TIMER SWITCH_^1_(EIN_!0_1ENABLE INTERRUPTS_^1_(JMP* (TIMENQ)_*RETURN_^1_(SPC_!5_^1*********_]_^1*_,TIMDEQ -- DEQUEUE LAST TIMER REQUEST_^1*********_]_^1*_]_^1*_-CALLING SEQUEN€€CE_^1*_]_^1*_0IIN_!0_^1*_0RTJ TIMDEQ_^1*_]_^1_(SPC_!2_^1TIMDEQ_!0_#0_^1_(LDA_!=N$1802_^1_(STA* TMRSW_-FLIP OFF TIMER SWITCH_^1_(EIN_!0_1ENABLE INTERRUPTS_^1_(JMP* (TIMDEQ)_*RETURN_^1_(SPC_!5_^1*********_]_^1*_-TIMEUP -- PROCESS TIMER INTERRUPT FOR TIMENQ AND TIMDEQ_^1*********_]_^1_(SPC_!2_^1TIMEUP_!ALF_!0,0_^1_(LDA_!=N0_^1SEC_$EQU_!SEC(*-1)_*1-SECOND TIMER_^1_(INA_!-1_0DECREMENT€€ BY 1 CYCLE_^1_(STA* SEC_/SAVE RESIDUAL_^1_(SAZ_!*+2_/IF NOT ZERO_^1_(JMP- (AXCOUT)_*THEN EXIT VIA COMMON INTERRUPT_^1_(ENA_!TIMCPS_,ELSE RESET THE 1-SECOND TIMER_^1_(STA* SEC_^1_(LDA_!=N0_/1 SECOND HAS EXPIRED, SO DECREMENT_^1TIMEND_!EQU_!TIMEND(*-1)_'THE REQUESTED TIME INTERVAL IN_^1_(INA_!-1_0SECONDS BY 1._^1_(STA* TIMEND_,SAVE RESIDUAL._^1_(SAN_!TOEXIT_-IF INTERVAL HAS EXPI€bRED_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ* TIMDEQ_,THEN DEQUEUE THE TIMER REQUEST_^1_(IIN_!0_1TIME OUT ROUTINE MUST BE UNINTERRUPTED_^1_(RTJ* (TIMACT)_*AND GO TO TIME END ACTION ROUTINE_^1_(EIN_!0_1RE-ENABLE INTERRUPTS_^1TOEXIT_!ALF_!0,0_^1_(JMP- (AXCOUT)_*COMMON INTERRUPT EXIT_^1*_]_^1TIMACT_!ADC_!0_1ADDRESS OF TIME END ACTION ROUTINE_^1_(END_^__ bPRIP CSY/ P€1_(NAM_!RIP_^1_(ENT_!RIP,RIP0,XCRIP_^1_(EXT* BCC_^1_(EXT* TIMDEQ_^1_(SPC_!3_^1*********_]_^1*_-RIP -- RECEIVE INTERRUPT PROCESSOR_^1*********_]_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1********_]_^1_(SPC_!2_^1X1_%EQU_!X1($3)_^1XFF_$EQU_!XFF($A)_^1€€X100_#EQU_!X100($2B)_^1X8000_"EQU_!X8000($21)_^1*********_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1_(SPC_!2_^1_(EQU_!ADCCLA($47)_'ADDRESS OF THE DCCLA (ALSO READ/WRITE_^1_(EQU_!DCSF($48)_)DCCLA STATUS/FUNCTION COMMAND_^1_(EQU_!DCIN($5C)_)DCCLA INTERNAL REJECTS_^1_(EQU_!DCEX($5D)_)DCCLA EXTERNAL REJECTS_^1_(EQU_!XBC€€T($60)_)CURRENT TP BUFFER_^1_(EQU_!XBCC($61)_)CRC CHECK WORD_^1_(EQU_!XEND($62)_)TP COMPLETION ADDRESS_^1_(EQU_!XES($63)_*TP ENDING STATUS_^1TPA_$EQU_!TPA($68)_*RIP/TIP ACTIVE TP BUFFER WORD POINTER_^1TPCA_#EQU_!TPCA($69)_)RIP/TIP ACTIVE TP BUFFER CHAR POINTER_^1XSYNCT_!EQU_!XSYNCT($6A)_'TIP LEADING SYN COUNT_^1XPAD_#EQU_!XPAD($6F)_)PAD CHARACTER_^1AXCOUT_!EQU_!AXCOUT($7A)_'COMMON €€INTERRUPT EXIT_^1************************************************************************_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-XES ENDING STATUS WORD EQUATES_^1*********_]_^1_(SPC_!2_^1TOK_$EQU_!TOK(0)_,ALL ZEROES - TRANSMISSION OK_^1LDA_$EQU_!LDA(1)_,BIT 1 - LOST DATA_^1DCK_$EQU_!DCK(2)_,BIT 2 - DATA CHECK_^1TIM_$€€EQU_!TIM(4)_,BIT 3 - TIMEOUT_^1ECK_$EQU_!ECK(8)_,BIT 4 - EQUIPMENT CHECK_^1************************************************************************_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-TP BUFFER SIZE_^1*********_]_^1_(SPC_!2_^1TPBSIZ_!EQU_!TPBSIZ(200)_'TP BUFFER SIZE_^1**********************************************€€**************************_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-DATA LINK CONTROL CHARACTERS IN EBCDIC_^1*********_]_^1_(SPC_!2_^1_(EQU_!SOH(1)_^1_(EQU_!STX(2)_^1_(EQU_!ETX(3)_^1_(EQU_!DLE($10)_^1_(EQU_!ETB($26)_^1_(EQU_!ENQ($2D)_^1_(EQU_!SYN($32)_^1_(EQU_!NAK($3D)_^1_(EQU_!ACK0($70)_^1*****************************€€*******************************************_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-BUFFER CONTROL TABLE_^1*********_]_^1_(SPC_!2_^1*_-BUFFER CONTROL TABLE_^1BCT_$ALF_!0,0_^1BCH_$EQU_!BCH(0)_,BUFFER CHAIN POINTER_^1BFCT_#EQU BFCT(1)_,NUMBER OF CHARACTERS IN BUFFER_^1BS_%EQU BS(2)_.BUFFER STATUS WORD_^1*_,STATUS WORD€€ EQUATES_^1STR_$EQU_!STR(1)_,BIT 0 TRANSPARENT TEXT IN BUFFER_^1SOB_$EQU SOB(2)_-BIT 1 OBJECT CODE IN TEXT_^1SCS_$EQU SCS(4)_-BIT 2 CONTROL SEQUENCE ONLY IN BUFFER_^1SDC_$EQU_!SDC(8)_,BIT 3 BUFFER MARKED FOR DECOMPRESSION_^1SDM_$EQU_!SDM(16)_+BIT 4 DUMMY BUFFER_^1SDL_$EQU_!SDL(32)_+BIT 5 BUFFER MARKED FOR DELETION_^1SMB_$EQU_!SMB(32)_+BIT 5 MSB USED IN STATUS WORD_^1*_]_^1BDATA_"€€EQU_!BDATA(3)_*DATA PORTION OF BLOCK_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_'DUAL-CHANNEL COMMUNICATIONS LINE ADAPTER (DCCLA) EQUATES_^1*********_]_^1********_]_^1*_-CHANNEL FUNCTION BIT DEFINITIONS_^1********_]_^1_(EQU_!CLC(1)_,CLEAR CHANNEL_^1_(EQU_!DTR(256)_*SET DATA TERMINAL READY_^1_(EQU_!RER(8192)_)RESET ERROR C€€ONDITION_^1_(EQU_!SSS(16384)_(SET SEARCH SYNC_^1_(SPC_!3_^1********_]_^1*_-CHANNEL STATUS BIT DEFINITIONS_^1********_]_^1_(EQU_!IDR(4)_,INPUT DATA INTERRUPT/DATA READY_^1_(EQU_!CAR(256)_*CARRIER ON DETECT FROM MODEM_^1************************************************************************_^1_(SPC_!3_^1RIP_$ALF_!0,0_^1_(LDQ- DCSF_.INPUT AND STORE STATUS_^1_(INP_!CLAERR-*_^1_(STA* €€ RSTAT_-DONE_^1_(LDQ- ADCCLA_,INPUT AND STORE DATA CHARACTER_^1_(INP_!CLAERR-*_^1_(AND- XFF_^1_(STA_!CHAR_.DONE_^1_(SPC_!5_^1*********_]_^1*_-INISW -- INITIALIZATION SWITCH_^1*********_]_^1_(SPC_!2_^1INISW_"JMP* *+2_/RIP INITIALIZATION SWITCH ON_^1XCRIP_"EQU_!XCRIP(INISW)_%ADDRESS FOR RIP EXTERNAL CLEAR_^1_(ADC* CINISW_^1_(LDQ- XBCT_.GET CURRENT TP BUFFER_^1_(STA- BFCT,Q_,SET€€ DATA LENGTH TO ZERO_^1_(LDA_!=X2*SMB-1-STR-SOB-SCS INITIALIZE THREE STATUS BITS --_^1_(AND- BS,Q_.NO TRANS. TEXT, NO OBJECT CODE, BUT_^1_(INA_!SCS_/CONTROL SEQUENCE ONLY IN BUFFER._^1_(STA- BS,Q_.DONE_^1_(INQ_!BFCT_^1_(STQ* CTADR_-SET CTADR TO BUFFER LENGTH POINTER_^1_(CLR_!A_^1_(STA* SYNCS_-RESET SYNC TEST WORD_^1_(STA* TCHAR_-CLEAR TWO-CHARACTER STORAGE_^1_(STA* (CTADR)_+A€€ND INITIAL CHARACTER COUNT_^1_(LDA* X1800_^1_(STA* INISW_-FLIP INITIALIZATION SWITCH OFF_^1_(STA* TTSW_.AND TRANS. TEXT MODE SWITCH_^1_(STA* DLESW_-AND DLE SWITCH_^1_(STA_!NTTSW_-AND NON-TRANS. TEXT MODE SWITCH_^1_(STA* NOPSW_-AND NO-OP SWITCH_^1_(LDA* X1802_^1_(STA* SYNSW_-RESET SYNCHRONIZATION SWITCH_^1_(STA* CTLSW_-AND CONTROL MODE SWITCH_^1_(STA_!BCCSW_-AND BCC SWITCH_^€€1*_]_^1CINISW_!ALF_!0,0_^1_(SPC_!3_^1*********_]_^1*_-NOPSW -- NO OPERATION SWITCH, I.E. IGNORE THE INTERRUPT_^1*********_]_^1_(SPC_!2_^1NOPSW_"JMP_!CNOPSW_,NO-OP SWITCH OFF_^1_(JMP- (AXCOUT)_*IGNORE THE INTERRUPT_^1*_]_^1CNOPSW_!ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-CHECK CARRIER AND INPUT DATA INTERRUPT STATUS_^1*********_]_^1_(SPC_!2_^1_(LDA_!=N0_/IF CARRIER NOT PRESENT_^1RSTA€€T_"EQU_!RSTAT(*-1)_^1_(AND- X100_^1_(SAN_!RIP01_^1_(ENA_!LDA_/THEN SET "LOST DATA"_^1*_]_^1REXIT_"STA- XES_/ENDING STATUS_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!TIMDEQ_,DISABLE WATCHDOG TIMER_^1_(LDQ- DCSF_.CLEAR CHANNEL, BUT KEEP DATA TERMINAL_^1_(LDA_!=XCLC+DTR_)READY_^1_(OUT_!*+1-*_-TO DCCLA_^1_(NOP_!0_1DONE_^1*_]_^1RIP0_#ALF_!0,0_/ENTRY FROM RTINIT_^1_(RTJ- (XEND)_,TO END €€ROUTINE_^1_(JMP- (AXCOUT)_*COMMON INTERRUPT EXIT_^1*_]_^1RIP01_"ALF_!0,0_^1_(LDA* RSTAT_-IF INPUT DATA INTERRUPT NOT SET_^1_(AND- IDR_^1_(SAN_!*+2_^1_(JMP- (AXCOUT)_*THEN IGNORE THE INTERRUPT_^1_(SPC_!5_^1*********_]_^1*_-SYNSW -- RIP SYNCHRONIZATION SWITCH_^1*********_]_^1_(SPC_!2_^1SYNSW_"JMP* *+2_/RIP SYNCHRONIZATION SWITCH ON_^1_(ADC* CSYNSW_^1_(LDQ* CHAR_.SYNCHRONIZATIO€€N IS ESTABLISHED_^1*_@WHEN WE HAVE READ TWO_^1_(LDA_!=N0_/CONSECUTIVE SYN CHARACTERS_^1SNYCS_"EQU_!SYNCS(*-1)_^1_(LRS_!8_^1_(STA* SYNCS_^1_(SUB_!=XSYN*256+SYN_^1_(SAZ_!*+2_^1_(JMP- (AXCOUT)_*NO SYNC, SO EXIT IMMEDIATELY_^1_(LDA* X1800_-FLIP SYNC SWITCH OFF_^1_(STA* SYNSW_^1_(JMP- (AXCOUT)_*EXIT IMMEDIATELY_^1*_]_^1CSYNSW_!ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-CTLSW -- CONTROL€€ MODE SWITCH_^1*********_]_^1_(SPC_!2_^1CTLSW_"JMP* *+2_/CONTROL MODE SWITCH ON_^1_(ADC* CCTLSW_^1_(LDA* CHAR_.IF SYN AND CONTROL MODE_^1_(INA_!-SYN_^1_(SAN_!*+2_^1_(JMP- (AXCOUT)_*COMMON INTERRUPT EXIT_^1_(RTJ* STORC_-STORE CHAR JUST READ_^1_(LDA* CHAR_.IF ENQ AND CONTROL MODE_^1_(INA_!-ENQ_^1_(SAN_!*+3_^1_(ENA_!LDA_/THEN SET "LOST DATA"_^1_(JMP* REXIT_-ENDING STATUS AND EX€€IT_^1_(LDA* CHAR_.IF NAK AND CONTROL MODE_^1_(INA_!-NAK_^1_(SAN_!*+3_^1_(ENA_!TOK_/THEN SET "NORMAL"_^1_(JMP* REXIT_-ENDING STATUS AND EXIT_^1_(LDA* TCHAR_-IF DLE,ACK0 AND CONTROL MODE_^1_(SUB_!=XDLE*256+ACK0_^1_(SAN_!*+3_^1_(ENA_!TOK_/THEN SET "NORMAL"_^1_(JMP* REXIT_-ENDING STATUS AND EXIT_^1_(LDA* TCHAR_-IF DLE,SOH AND CONTROL MODE_^1_(SUB_!=XDLE*256+SOH_^1DLESOH_!EQU_!DLES€€OH(*-1)_^1_(SAN_!XTT_^1*_]_^1TT_%LDA* X1802_-THEN SET TRANS. TEXT_^1_(STA* TTSW_.MODE SWITCH_^1_(ENA_!SCS+STR_+SET STATUS WORD TO REFLECT TRANS._^1*_]_^1RCM_$ALF_!0,0_^1_(LDQ- XBCT_.TEXT AND NO CONTROL SEQUENCE._^1_(EOR- BS,Q_^1_(STA- BS,Q_.DONE_^1_(LDA* X1800_-RESET CONTROL MODE SWITCH_^1_(STA* CTLSW_^1_(JMP- (AXCOUT)_*AND EXIT EMMEDIATELY_^1*_]_^1XTT_$ALF_!0,0_^1_(LDA_!=N€€0_/IF DLE,STX AND CONTROL MODE_^1TCHAR_"EQU_!TCHAR(*-1)_^1_(SUB_!=XDLE*256+STX_^1DLESTX_!EQU_!DLESTX(*-1)_^1_(SAN_!*+2_^1_(JMP* TT_0THEN SET TRANS. TEXT MODE SWITCH_^1_(LDA* CHAR_.IF SOH AND CONTROL MODE_^1_(INA_!-SOH_^1_(SAN_!XNTT_^1*_]_^1NTT_$ALF_!0,0_/THEN SET NON-TRANS. TEXT_^1_(LDA_!=N$1802_^1X1802_"EQU_!X1802(*-1)_^1_(STA* NTTSW_-MODE SWITCH_^1_(ENA_!SCS_/SET STATUS WORD T€€O REFLECT NON-TRANS._^1_(JMP* RCM_/GO RESET CONTROL MODE SWITCH_^1*_]_^1XNTT_#ALF_!0,0_^1_(LDA* CHAR_.IF STX AND CONTROL MODE_^1_(INA_!-STX_^1_(SAN_!*+2_^1_(JMP* NTT_/THEN SET NON-TRANS. TEXT MODE SWITCH_^1_(JMP- (AXCOUT)_*ELSE EXIT IMMEDIATELY_^1*_]_^1CTADR_"ADC_!0_1POINTER TO BUFFER LENGTH_^1_(SPC_!5_^1*********_]_^1*_-DCCLA I/O ERROR_^1*********_]_^1_(SPC_!2_^1CLAERR_!ALF_!0€€,0_^1_(JMP* INERR_-GO PROCESS INTERNAL ERROR;_^1*********_]_^1*_-EXTERNAL ERROR PROCESSED HERE;_^1********_]_^1_(RAO- DCEX_/INCREMENT EXTERNAL ERROR COUNT_^1_(JMP* INERR+1_,GO SET ERROR CODE_^1*********_]_^1*_-INTERNAL ERROR PROCESSED HERE;_^1*********_]_^1INERR_"ALF_!0,0_^1_(RAO- DCIN_/INCREMENT INTERNAL ERROR COUNT;_^1_(ENA_!ECK_/SET "EQUIPMENT CHECK" IN ENDING STATUS_^1_(JMP* €€REXIT_-GO EXIT_^1*_]_^1CCTLSW_!ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-TTSW -- TRANSPARENT TEXT MODE SWITCH_^1*********_]_^1_(SPC_!2_^1TTSW_#JMP_!CTTSW_-TRANSPARENT TEXT MODE SWITCH OFF_^1DLESW_"JMP_!CDLESW_,DLE SWITCH OFF_^1_(LDA_!=N$1800_+RESET DLE SWITCH_^1X1800_"EQU_!X1800(*-1)_^1_(STA* DLESW_^1*_]_^1TXCOM_"ALF_!0,0_^1_(LDA_!=N0_/IF DLE,SYN AND TRANS. TEXT MODE_^1CHAR_#EQU_!CHA€€R(*-1)_^1_(INA_!-SYN_^1_(SAN_!*+2_^1_(JMP- (AXCOUT)_*THEN IGNORE CHARACTER AND EXIT_^1_(RTJ* STORC_-STORE CHARACTER IN TP BUFFER_^1_(LDA* CHAR_.IF DLE,ENQ AND TRANS. TEXT MODE_^1_(INA_!-ENQ_^1_(SAN_!*+3_^1_(ENA_!LDA_/THEN SET "LOST DATA"_^1_(JMP* REXIT_-ENDING STATUS AND EXIT_^1_(LDA* CHAR_.IF DLE,ETB AND TRANS. TEXT MODE_^1_(INA_!-ETB_^1_(SAN_!NXETB_^1*_]_^1XTEXT_"ALF_!0,0_^1€€_(LDA* X1800_-RESET BOTH TEXT MODE SWITCHES_^1_(STA* TTSW_.SO WE CAN NOW READ,_^1_(STA* NTTSW_-COMPUTE AND COMPARE BCC CHAR'S_^1_(JMP- (AXCOUT)_*EXIT IMMEDIATELY_^1*_]_^1NXETB_"ALF_!0,0_^1_(LDA* CHAR_.IF DLE,ETX AND TRANS. TEXT MODE_^1_(INA_!-ETX_^1_(SAN_!*+2_^1_(JMP* XTEXT_-THEN PROCESS AT XTEXT_^1_(JMP- (AXCOUT)_*ELSE EXIT IMMEDIATELY_^1*_]_^1CDLESW_!ALF_!0,0_^1_(LDA* CHA€€R_.IF FIRST DLE_^1_(INA_!-DLE_.THEN SET DLE SWITCH_^1_(SAN_!NXDLE_-AND EXIT IMMEDIATELY,_^1_(LDA* X1802_-DISCARDING DLE CHARACTER_^1_(STA* DLESW_^1_(JMP- (AXCOUT)_*DONE_^1*_]_^1NXDLE_"ALF_!0,0_^1_(RTJ* STORC_-STORE CHARACTER IN TP BUFFER_^1_(JMP- (AXCOUT)_*AND EXIT IMMEDIATELY_^1*_]_^1CTTSW_"ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-NTTSW -- NON-TRANSPARENT TEXT MODE SWITCH_^1***€€******_]_^1_(SPC_!2_^1NTTSW_"JMP_!CNTTSW_,NON-TRANS. TEXT MODE SWITCH OFF_^1_(JMP* TXCOM_-COMMON PROCESSING FOR BOTH TEXT MODES_^1*_]_^1CNTTSW_!ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-BCCSW -- BLOCK CHECK CHARACTERS SWITCH_^1*********_]_^1_(SPC_!2_^1BCCSW_"JMP* *+2_/BCC SWITCH ON_^1_(ADC* CBCCSW_^1_(LDA* X1800_-SET SWITCH FOR SECOND BCC CHARACTER_^1_(STA* BCCSW_^1_(LDA* CHAR_.€€SAVE FIRST BCC CHARACTER READ_^1_(STA* BCCIN_^1_(JMP- (AXCOUT)_*EXIT IMMEDIATELY_^1*_]_^1CBCCSW_!ALF_!0,0_^1_(LDA* X1802_-FLIP ON THE NO-OP SWITCH_^1_(STA_!NOPSW_-TO IGNORE FURTHER INTERRUPTS_^1_(RTJ_!BCC_/GO COMPUTE BCC_^1_(LDA_!=N0_/GET BCC READ_^1BCCIN_"EQU_!BCCIN(*-1)_^1_(ALS_!8_^1_(ADD* CHAR_^1_(STA* BCCIN_-DONE_^1_(SUB- XBCC_.COMPARE COMPUTED VS. RECEIVED BCC'S_^1_(SAN_€€!*+3_/IF EQUAL, THEN SET "NORMAL"_^1_(JMP_!REXIT_-ENDING STATUS AND EXIT_^1_(ENA_!DCK_/ELSE SET "DATA CHECK"_^1_(JMP_!REXIT_-ENDING STATUS AND EXIT_^1_(SPC_!5_^1*********_]_^1*_-STORC -- STORE CHARACTER JUST READ IF ROOM IN BUFFER_^1*********_]_^1_(SPC_!2_^1STORC_"0_#0_^1_(LDA* (CTADR)_+IF THERE IS ROOM IN TP BUFFER_^1_(SUB_!=XTPBSIZ+TPBSIZ_"FOR CHARACTER JUST READ_^1_(SAN_!*+4_/T€€HEN SKIP FORWARD_^1_(ENA_!LDA_/ELSE SET "LOST DATA"_^1_(JMP_!REXIT_-ENDING STATUS AND EXIT_^1_(LDQ* CHAR_.STORE CHARACTER JUST READ INTO_^1_(LDA- (TPA)_-TP BUFFER_^1_(LLS_!8_1TPA IS WORD POINTER_^1_(LDA- TPCA_.TPCA IS CHARACTER POINTER_^1_(SAZ_!*+2_/USE AND UPDATE TPA AND TPCA_^1_(QLS_!8_^1_(STQ- (TPA)_^1_(EOR- X1_^1_(STA- TPCA_^1_(SAN_!*+2_^1_(RAO- TPA_/DONE_^1_(RAO* (CTAD€ΚR)_+INCREMENT CHAR COUNT BY 1_^1_(LDA* CHAR_.UPDATE TCHAR WHICH CONTAINS_^1_(ALS_!8_1THE LAST TWO CHARACTERS READ_^1_(LDQ* TCHAR_^1_(LLS_!8_^1_(STQ* TCHAR_-DONE_^1_(JMP* (STORC)_+RETURN_^1_(END_^__ ΚPTIP CSY/ P€1_(NAM_!TIP_^1_(ENT_!TIP,XCTIP_^1_(EXT* TIMDEQ_^1_(SPC_!3_^1************************************************************************_^1********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1********_]_^1X1_%EQU_!X1($3)_^1XFF_$EQU_!XFF($A)_^1X8000_"EQU_!X8000($21)_^1X8_%EQU_!X8($26)_^1_(SPC_!2_^1********_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER €€APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1********_]_^1_(SPC_!2_^1_(EQU_!ADCCLA($47)_'ADDRESS OF THE DCCLA (ALSO READ/WRITE_^1*_@DATA COMMAND)_^1_(EQU_!DCSF($48)_)DCCLA STATUS/FUNCTION COMMAND_^1_(EQU_!DCIN($5C)_)DCCLA INTERNAL REJECTS_^1_(EQU_!DCEX($5D)_)DCCLA EXTERNAL REJECTS_^1_(EQU_!XBCT($60)_)CURRENT TP BUFFER_^1_(EQU_!XBCC($61)_)CRC CHECK WORD_^1_(EQU_!XEND($62)_)TP CO€€MPLETION ADDRESS_^1_(EQU_!XES($63)_*TP ENDING STATUS_^1TPA_$EQU_!TPA($68)_*RIP/TIP ACTIVE TP BUFFER WORD POINTER_^1TPCA_#EQU_!TPCA($69)_)RIP/TIP ACTIVE TP BUFFER CHAR POINTER_^1XSYNCT_!EQU_!XSYNCT($6A)_'TIP LEADING SYN COUNT_^1XPAD_#EQU_!XPAD($6F)_)PAD CHARACTER_^1XSYN_#EQU_!XSYN($76)_)SYN_^1AXCOUT_!EQU_!AXCOUT($7A)_'COMMON INTERRUPT EXIT_^1*****************************************€€*******************************_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-XES ENDING STATUS WORD EQUATES_^1*********_]_^1_(SPC_!2_^1TOK_$EQU_!TOK(0)_,ALL ZEROES - TRANSMISSION OK_^1LDA_$EQU_!LDA(1)_,BIT 1 - LOST DATA_^1DCK_$EQU_!DCK(2)_,BIT 2 - DATA CHECK_^1TIM_$EQU_!TIM(4)_,BIT 3 - TIMEOUT_^1ECK_$EQU_!ECK(8)_,BIT 4 - E€€QUIPMENT CHECK_^1************************************************************************_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_-TP BUFFER SIZE_^1*********_]_^1_(SPC_!2_^1TPBSIZ_!EQU_!TPBSIZ(200)_'TP BUFFER SIZE_^1************************************************************************_^1_(SPC_!3_^1******************€€******************************************************_^1*********_]_^1*_-BUFFER CONTROL TABLE_^1*********_]_^1_(SPC_!2_^1BCT_$ALF_!0,0_^1BCH_$EQU_!BCH(0)_,BUFFER CHAIN POINTER_^1BFCT_#EQU BFCT(1)_,NUMBER OF CHARACTERS IN BUFFER_^1BS_%EQU BS(2)_.BUFFER STATUS WORD_^1*_,STATUS WORD EQUATES_^1STR_$EQU_!STR(1)_,BIT 0 TRANSPARENT TEXT IN BUFFER_^1SOB_$EQU SOB(2)_-BIT 1 OBJECT CODE I€€N TEXT_^1SCS_$EQU SCS(4)_-BIT 2 CONTROL SEQUENCE ONLY IN BUFFER_^1SMB_$EQU_!SMB(32)_+BIT 5 MSB USED IN STATUS WORD_^1*_]_^1BDATA_"EQU_!BDATA(3)_*DATA PORTION OF BLOCK_^1************************************************************************_^1_(SPC_!3_^1************************************************************************_^1********_]_^1*_-DATA LINK CONTROL CHARACTERS IN EBCDI€€C_^1********_]_^1_(SPC_!2_^1_(EQU_!SOH(1)_^1_(EQU_!STX(2)_^1_(EQU_!DLE($10)_^1************************************************************************_^1_(SPC_!3_^1************************************************************************_^1*********_]_^1*_'DUAL-CHANNEL COMMUNICATIONS LINE ADAPTER (DCCLA) EQUATES_^1*********_]_^1_(SPC_!2_^1*********_]_^1*_-CHANNEL FUNCTION BIT DEFINI€€TIONS_^1*********_]_^1_(EQU_!CLC(1)_,CLEAR CHANNEL_^1_(EQU_!COI(4)_,CLEAR OUTPUT INTERRUPTS_^1_(EQU_!EOI(16)_+ENABLE OUTPUT INTERRUPT_^1_(EQU_!DTR(256)_*SET DATA TERMINAL READY_^1_(EQU_!RQS(512)_*SET REQUEST TO SEND_^1_(SPC_!2_^1*********_]_^1*_-TIP -- TRANSMIT INTERRUPT PROCESSOR_^1*********_]_^1_(SPC_!2_^1*********_]_^1TIP_$ALF_!0,0_^1_(LDQ- DCSF_.INPUT AND STORE STATUS_^1_(INP_€€!CLAERR-*_^1_(STA* TSTAT_-DONE_^1_(SPC_!5_^1*********_]_^1*_-INISW -- INITIALIZATION SWITCH_^1*********_]_^1_(SPC_!2_^1INISW_"JMP* *+2_0TIP INITIALIZATION SWITCH ON_^1XCTIP_"EQU_!XCTIP(INISW)_%ENTRY FOR TIP EXTERNAL CLEAR_^1_(ADC* CINISW_^1_(LDA* X1800_^1_(STA* INISW_-FLIP INITIALIZATION SWITCH_^1_(STA* NOPSW_-TURN OFF NO-OP SWITCH_^1_(STA* EOTSW_-AND END OF TRANSMISSION SWIT€€CH_^1_(STA* TXTSW_-AND TEXT MODE SWITCH_^1_(LDA- XSYNCT_^1_(STA* SYNCT_-INITIALIZE LEADING SYN COUNT_^1_(LDA* X1802_^1_(STA* SYNSW_-RESET SYNCHRONIZATION SWITCH_^1_(STA* BLKSW_-AND BLOCK SWITCH_^1_(STA* DLESW_-AND DLE SWITCH_^1_(STA* STMSW_-AND START-TEXT-MODE SWITCH_^1_(STA_!BCCSW_-AND BCC SWITCH_^1_(STA_!BC1SW_-AND BC1 SWITCH_^1_(STA_!BC2SW_-AND BC2 SWITCH_^1_(LDQ- XBCT_€€.GET CURRENT TP BUFFER_^1_(LDA- BFCT,Q_,IF BUFFER LENGTH IS ZERO_^1_(SAN_!*+2_^1_(JMP* TEXIT_-THEN SET "NORMAL" ENDING STATUS & EXIT_^1_(TCA_!A_1ELSE SET CCT = BUFFER_^1_(ADD- X8000_-LENGTH LOOP CONTROL IN CHARACTERS_^1_(STA* CCT_/DONE_^1_(STQ- I_1SAVE BUFFER ADDRESS IN I_^1_(LDQ* X1800_-IF CONTROL SEQUENCE ONLY IN BUFFER_^1_(LDA- BS,I_.THEN TURN OFF BCC AND START-TEXT-MODE_€€^1_(AND_!=XSCS_-SWITCHES._^1_(SAZ_!NOCSC_^1_(STQ* BCCSW_^1_(STQ* STMSW_^1_(JMP* CINISW_,DONE;_^1*_]_^1NOCSC_"ALF_!0,0_^1_(LDA- BS,I_.SET TRANSPARENT SWITCH TO PROPER POS._^1_(AND_!=XSTR_^1_(SAZ_!*+2_^1_(LDQ* X1802_^1_(STQ* TTSW_.DONE;_^1*_]_^1CINISW_!ALF_!0,0_^1_(SPC_!3_^1*********_]_^1*_-NOPSW -- NO OPERATION SWITCH, I.E. IGNORE THE INTERRUPT_^1*********_]_^1_(SPC_!2_^1NOPSW€€_"JMP_!CNOPSW_,NO-OP SWITCH OFF_^1_(LDQ- DCSF_.CLEAR THE OUTPUT INTERRUPT_^1_(ENA_!COI_^1_(OUT_!*+1-*_^1_(NOP_!0_^1*_@DONE_^1_(JMP- (AXCOUT)_*COMMON INTERRUPT EXIT_^1*_]_^1CNOPSW_!ALF_!0,0_^1_(SPC_!3_^1_(LDA* TSTAT_-RELOAD STATUS_^1_(AND- X8_0IF OUTPUT DATA INTERRUPT NOT SET_^1_(SAN_!EOTSW_^1_(ENA_!ECK_/THEN SET "EQUIPMENT CHECK" ENDING STAT_^1*_]_^1TEXIT_"ALF_!0,0_^1_(STA- XE€€S_/STORE ENDING STATUS_^1_(IIN_!0_^1_(RTJ_!TIMDEQ_,DISABLE WATCHDOG TIMER_^1_(LDQ- DCSF_.CLEAR CHANNEL AND DATA TERMINAL READY_^1_(LDA_!=XCLC+DTR_^1_(OUT_!*+1-*_-TO DCCLA_^1_(NOP_!0_^1_(RTJ- (XEND)_,TO END ROUTINE_^1_(JMP- (AXCOUT)_*COMMON INTERRUPT EXIT_^1_(SPC_!5_^1*********_]_^1*_-EOTSW -- END OF TRANSMISSION SWITCH_^1*********_]_^1_(SPC_!2_^1EOTSW_"JMP_!CEOTSW_,TIP END OF TR€€ANSMISSION SWITCH OFF_^1_(LDA_!=N$1802_+FLIP ON THE NO-OP SWITCH_^1X1802_"EQU_!X1802(*-1)_^1_(STA* NOPSW_-TO IGNORE FURTHER INTERRUPTS_^1_(ENA_!TOK_/SET "NORMAL" ENDING STATUS_^1_(JMP* TEXIT_-AND EXIT_^1*_]_^1CCT_$NUM_!0_1CHARACTER COUNT LOOP CONTROL_^1TSTAT_"NUM_!0_1TRANSMITTER STATUS WORD_^1_(SPC_!5_^1*********_]_^1*_-DCCLA I/O ERROR_^1*********_]_^1_(SPC_!2_^1CLAERR_!ALF_!0,0_€€^1_(JMP* INERR_-GO PROCESS INTERNAL ERROR;_^1*********_]_^1*_-EXTERNAL ERROR PROCESSED HERE;_^1*********_]_^1_(RAO- DCEX_/INCREMENT EXTERNAL ERROR COUNT_^1_(JMP* INERR+1_,GO SET ERROR CODE_^1*********_]_^1*_-INTERNAL ERROR PROCESSED HERE;_^1*********_]_^1INERR_"ALF_!0,0_^1_(RAO- DCIN_/INCREMENT INTERNAL ERROR COUNT;_^1_(ENA_!ECK_/SET "EQUIPMENT CHECK" IN ENDING STATUS_^1_(JMP* TEX€€IT_.GO EXIT_^1*_]_^1CEOTSW_!ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-SYNSW -- SYNCHRONIZATION SWITCH_^1*********_]_^1_(SPC_!2_^1SYNSW_"JMP* *+2_/TIP SYNCHRONIZATION SWITCH ON_^1_(ADC* CSYNSW_^1_(LDA- XSYN_.TRANSMIT NEXT SYN CHARACTER_^1_(LDQ- ADCCLA_^1_(OUT_!CLAERR-*_^1_(LDA_!=N0_/SET SYN COUNT = SYN COUNT-1_^1SYNCT_"EQU_!SYNCT(*-1)_^1_(INA_!-1_^1_(STA* SYNCT_.DONE_^1_(SAZ_!*+2_/€€IF THERE ARE MORE SYN CHARACTERS_^1_(JMP- (AXCOUT)_*THEN EXIT IMMEDIATELY_^1_(LDA_!=N$1800_+ELSE_^1X1800_"EQU_!X1800(*-1)_^1_(STA* SYNSW_-FLIP SYN SWITCH AND_^1_(JMP- (AXCOUT)_*THEN EXIT IMMEDIATELY_^1*_]_^1CSYNSW_!ALF_!0,0_^1_(SPC_!3_^1*********_]_^1*_-TXTSW -- TEXT MODE SWITCH_^1*********_]_^1_(SPC_!2_^1TXTSW_"JMP_!CTXTSW_,TEXT MODE SWITCH OFF_^1*_]_^1TTSW_#JMP_!CTTSW_-TRANSPA€€RENT TEXT MODE SWITCH OFF_^1*_]_^1DLESW_"JMP* *+2_/DLE SWITCH ON_^1_(ADC* CDLESW_^1_(LDA- (TPA)_-IF TEXT MODE AND TRANS. TEXT AND DLE_^1_(LDQ- TPCA_.THEN INSERT A DLE CHAR. IN OUTPUT_^1_(SQN_!*+2_/AND FLIP THE DLE SWITCH;_^1_(ALS_!8_1ELSE RESET THE DLE SWITCH AND CONTINUE_^1_(AND- XFF_^1_(INA_!-DLE_^1_(SAN_!CDLESW_^1_(LDA* CCT_/INSERT A DLE CHAR. IN OUTPUT_^1_(SUB_!=N$7FFE_+O€€NLY IF THE NUMBER OF REMAINING_^1_(SAP_!CDLESW_,CHARACTERS IS LESS THAN 3_^1_(LDQ* X1800_-FLIP THE DLE SWITCH_^1_(STQ* DLESW_^1_(ENA_!DLE_/INSERT A DLE CHAR. IN OUTPUT_^1_(JMP* XMIT_^1*_]_^1CDLESW_!ALF_!0,0_^1_(LDQ* X1802_-RESET THE DLE SWITCH_^1_(STQ* DLESW_^1*_@DONE;_^1CTTSW_"ALF_!0,0_^1CTXTSW_!ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-BLKSW -- TP BLOCK TRANSMIT SWITCH_^1******€€***_]_^1_(SPC_!2_^1BLKSW_"JMP* *+2_/TIP BLOCK TRANSMIT SWITCH ON_^1_(ADC* CBLKSW_^1_(LDQ- (TPA)_-GET NEXT WORD_^1_(LDA- TPCA_.GET NEXT CHARACTER IN LSB OF Q_^1_(SAN_!*+2_^1_(QLS_!8_^1_(EOR- X1_0DONE_^1_(STA- TPCA_.TWO CHARACTERS PER WORD_^1_(SAN_!*+2_/IF BOTH CHARACTERS HAVE BEEN TRANS._^1_(RAO- TPA_/THEN INCREMENT WORD POINTER BY 1_^1_(SOV_!*+1_/IF THERE IS MORE IN BLOCK TO€€ TRANSMIT_^1_(RAO* CCT_^1_(SNO_!XMORE_-THEN SKIP TO XMORE_^1_(LDA* X1800_-ELSE FLIP BLOCK SWITCH_^1_(STA* BLKSW_^1_(STA* TXTSW_-AND TEXT MODE SWITCH_^1*_]_^1XMORE_"ALF_!0,0_^1_(SPC_!3_^1*********_]_^1*_-STMSW -- START-TEXT-MODE SWITCH_^1*********_]_^1_(SPC_!2_^1STMSW_"JMP* *+2_/START-TEXT-MODE SWITCH ON_^1_(ADC* CSTMSW_^1_(LDA- XFF_/IF NEXT CHAR. IS STX OR SOH_^1_(LAQ_!A,Q_/€€THEN TURN ON TEXT MODE SWITCH_^1_(INA_!-STX_.AND TURN OFF START-TEXT-MODE SWITCH_^1_(SAZ_!TSWON_^1_(TRQ_!A_^1_(INA_!-SOH_^1_(SAN_!CSTMSW_^1*_]_^1TSWON_"ALF_!0,0_^1_(LDA* X1802_-TURN ON TEXT MODE SWITCH_^1_(STA* TXTSW_^1_(LDA* X1800_-TURN OFF START-TEXT-MODE SWITCH_^1_(STA* STMSW_^1*_@DONE;_^1CSTMSW_!ALF_!0,0_^1_(TRQ_!A_1TRANSMIT CHARACTER_^1*_]_^1XMIT_#ALF_!0,0_^1_(LDQ- ADCCLA€€_^1_(OUT_!CLAERR-*_*DONE_^1_(JMP- (AXCOUT)_*COMMON INTERRUPT EXIT_^1*_]_^1CBLKSW_!ALF_!0,0_^1_(SPC_!3_^1*********_]_^1*_-BCCSW -- TRANSMIT BCC CHARACTERS_^1_(SPC_!2_^1*********_]_^1BCCSW_"JMP* *+2_/BCC SWITCH ON_^1_(ADC* TPAD_^1_(SPC_!5_^1*********_]_^1*_,BC1SW -- TRANSMIT FIRST BCC CHARACTER_^1*********_]_^1_(SPC_!2_^1BC1SW_"JMP* *+2_/TIP BC1 SWITCH ON_^1_(ADC* CBC1SW_^1_(LDA€€* X1800_-FLIP BC1 SWITCH_^1_(STA* BC1SW_^1_(LDA- XBCC_.GET FIRST BCC CHARACTER_^1_(ARS_!8_^1_(JMP* XMIT_.GO TRANSMIT IT_^1*_]_^1CBC1SW_!ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-BC2SW -- TRANSMIT SECOND BCC CHARACTER_^1*********_]_^1_(SPC_!2_^1BC2SW_"JMP* *+2_/TIP BC2 SWITCH ON_^1_(ADC* CBC2SW_^1_(LDA* X1800_-FLIP BC2 SWITCH_^1_(STA* BC2SW_-GET SECOND BCC CHARACTER_^1_(LDA- X€2BCC_^1_(JMP* XMIT_.GO TRANSMIT IT_^1*_]_^1CBC2SW_!ALF_!0,0_^1_(SPC_!5_^1*********_]_^1*_-TRANSMIT TRAILING PAD CHARACTER_^1*********_]_^1_(SPC_!2_^1TPAD_#ALF_!0,0_^1_(LDA* X1802_-FLIP END OF TRANSMISSION SWITCH_^1_(STA* EOTSW_^1_(LDA- XPAD_.GET PAD CHARACTER_^1_(JMP* XMIT_.GO TRANSMIT IT_^1_(END_^__ 2PBCC CSY/ P€1_(NAM_!BCC_^1************************************************************************_^1************************************************************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1_(EQU_!X8000($32)_^1*********_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJ€€E17._^1*********_]_^1_(EQU_!DCCRC1($4C)_'DCCLA INPUT CRC NPR/CRC DATA OUTPUT_^1_(EQU_!DCCRC2($4D)_'DCCLA OUTPUT CRC OPR_^1_(EQU_!CRCIN($5A)_(CRC INTERNAL REJECTS_^1_(EQU_!CRCEX($5B)_(CRC EXTERNAL REJECTS_^1_(EQU_!XBCT($60)_)CURRENT TP BUFFER_^1_(EQU_!XBCC($61)_)CRC CHECK WORD_^1_(EQU_!XSOH($70)_)SOH_^1_(EQU_!XSTX($71)_)STX_^1*********************************************************€€***************_^1************************************************************************_^1_(EJT_^1************************************************************************_^1************************************************************************_^1********_]_^1*_-BUFFER CONTROL TABLE_^1********_]_^1BCT_$ALF_!0,0_^1_(EQU_!BCH(0)_,BUFFER CHAIN POINTER_^1_(EQU BFCT(1)_,NUMBER OF C€€HARACTERS IN BUFFER_^1_(EQU BS(2)_.BUFFER STATUS WORD_^1*_]_^1_(EQU_!BDATA(3)_*DATA PORTION OF BLOCK_^1************************************************************************_^1************************************************************************_^1_(EJT_^1_(ENT_!BCC_^1*********_]_^1*_-BCC CALCULATOR_^1*********_]_^1*_]_^1*_-CALLING SEQUENCE_^1*_]_^1*_0RTJ+ BCC_^1*_]_^1*_-THE€€ CALCULATED CRC WILL BE STORED IN LOCATION XBCC_^1*_-UPON EXIT FROM ROUTINE;_^1*_]_^1*_-NOTE: THIS ROUTINE ASSUMES THAT THE ENDING CONTROL_^1*_-SEQUENCE IS ETB, NOT DLE,ETB;_^1*********_]_^1*_]_^1BCC_$0_#0_^1_(LDQ- XBCT_.LOAD BCT ADDRESS IN Q;_^1_(LDA- X8000_^1_(SUB- BFCT,Q_,COMPUTE $8000-NUMBER OF CHARACTERS IN_^1*_@BUFFER;_^1_(STA* LCT_/USE FOR CHARACTER COUNT LOOP CONTROL;_^€€1_(CLR_!A_1CLEAR CRC_^1_(STA- XBCC_.CALCULATION;_^1_(STQ- $FF_/INDEX = BCT ADDRESS;_^1_(SOV_!*+1_/RESET OVERFLOW INDICATOR;_^1*********_]_^1*_-SEARCH FOR FIRST STX OR SOH_^1*********_]_^1BC00_#ALF_!0,0_^1_(LDA_!=N$7FFE_+SET COUNTER FOR_^1_(EQU CPAIR(*-1)_^1_(STA* PAIR_.TWO CHARACTERS PER WORD;_^1_(STA* CRCPR_-TWO TRAILING CRC ZERO DATA CHARACTERS;_^1_(LDQ- BDATA,I_+GET NEXT C€€HARACTER PAIR;_^1*_]_^1BC01_#ALF_!0,0_^1_(CLR_!A_1CLEAR A;_^1_(LLS_!8_1NEXT CHARACTER TO A;_^1_(STA* SAVEA_-SAVE CHARACTER;_^1_(SUB- XSOH_.IF CHARACTER = SOH_^1_(SAZ_!BC02_.THEN SKIP FORWARD;_^1_(LDA* SAVEA_-ELSE CONTINUE;_^1_(SUB- XSTX_.IF CHARACTER = STX_^1_(SAZ_!BC02_.THEN SKIP FORWARD;_^1_(RAO* LCT_/ELSE DECREMENT CHARACTER COUNT BY 1;_^1_(SNO_!*+2_/IF CHARACTER STRING EXH€€AUSTED_^1_(JMP* (BCC)_-THEN EXIT WITH XBCC = 0;_^1*_]_^1_(RAO* PAIR_.ELSE DECREMENT CHARACTER PAIR;_^1_(SOV_!*+2_/IF THE 2ND CHARACTER OF PAIR NOT_^1*_@PROCESSED_^1_(JMP* BC01_.THEN GO PROCESS IT;_^1*_]_^1_(RAO- $FF_/ELSE STEP INDEX TO NEXT CHARACTER PAIR_^1_(JMP* BC00_.GO PROCESS CHARACTER PAIR;_^1*********_]_^1*_,BEGIN CRC CALCULATION_^1*********_]_^1BC02_#ALF_!0,0_^1_(RAO* €€ LCT_/DECREMENT CHARACTER COUNT BY 1;_^1_(SNO_!*+2_/IF CHARACTER STRING EXHAUSTED_^1_(JMP* BC04_.THEN EXIT;_^1*_]_^1_(RAO* PAIR_.ELSE DECREMENT CHARACTER PAIR;_^1_(SNO_!BC03_.IF THE 2ND CHARACTER OF PAIR NOT_^1*_@PROCESSED THEN GO PROCESS IT;_^1_(RAO- $FF_/ELSE STEP INDEX TO NEXT CHARACTER PAIR_^1_(LDA* CPAIR_-SET COUNTER FOR_^1_(STA* PAIR_.NUMBER OF CHARACTERS PER WORD;_^1_(L€€DQ- BDATA,I_+GET NEXT CHARACTER PAIR;_^1*_]_^1BC03_#ALF_!0,0_^1_(STQ* SAVEQ_-SAVE Q;_^1_(LDQ- DCCRC2_,OUTPUT CRC OPR;_^1_(LDA- XBCC_^1_(OUT_!INERR-*_+DONE;_^1_(LDQ- DCCRC1_,OUTPUT CRC DATA CHARACTER;_^1_(LDA* SAVEQ_^1_(ALS_!8_^1_(STA* SAVEQ_^1_(OUT_!INERR-*_+DONE;_^1_(INP_!INERR-*_+INPUT NPR AND SAVE AS NEXT OPR;_^1_(STA- XBCC_.DONE;_^1_(LDQ_!=N0_/RESTORE NEXT CHARACTER TO €€Q;_^1_(EQU_!SAVEQ(*-1)_^1_(JMP* BC02_.GO PROCESS NEXT CHARACTER;_^1*_]_^1BC04_#ALF_!0,0_^1_(RAO* CRCPR_-REPEAT TWO MORE TIMES WITH DATA_^1*_@CHARACTER OF ALL ZEROES;_^1_(SOV_!BC05_^1_(LDA* CPAIR_-SHOW TWO MORE CHARACTERS IN LCT_^1_(STA* LCT_/AND PAIR;_^1_(STA* PAIR_^1_(CLR_!Q_1TWO ZERO CHARACTERS IN Q;_^1_(JMP* BC03_.CONTINUE CRC CALCULATION;_^1*_]_^1BC05_#ALF_!0,0_^1_(LDA- €€XBCC_.ORDER BCC_^1_(ALS_!8_1FOR TRANSMISSION;_^1_(STA- XBCC_^1_(JMP* (BCC)_-EXIT;_^1*_]_^1INERR_"ALF_!0,0_^1_(JMP* IN01_.GO PROCESS INTERNAL ERROR;_^1*********_]_^1*_-EXTERNAL ERROR PROCESSED HERE_^1*********_]_^1_(RAO- CRCEX_-INCREMENT EXTERNAL ERROR COUNT BY 1;_^1_(JMP* (BCC)_-PREMATURE EXIT;_^1*********_]_^1*_-INTERNAL ERROR PROCESSED HERE_^1*********_]_^1*_]_^1IN01_#ALF_!0€>,0_^1_(RAO- CRCIN_-INCREMENT INTERNAL ERROR COUNT BY 1;_^1_(JMP* (BCC)_-PREMATURE EXIT;_^1*_]_^1SAVEA_"ADC_!0_1TEMPORARY STORAGE(_^1LCT_$ADC_!0_1NUMBER OF CHAR'S IN BUFFER, LOOP CNTRL_^1PAIR_#ADC_!0_1NUMBER OF CHAR'S PER WORD, LOOP CNTRL_^1CRCPR_"ADC_!0_1NUMBER OF 0 CRC DATA CHARACTERS, LOOP_^1*_-CNTRL_^1_(END_^__ >PTPSUP CSY/ P€1_(NAM_!TPSUP_^1*_]_^1*_-TPSUP CONTAINS TWO PRIMARY ENTRY POINTS:_^1*_]_^1*_2(1) REND -- TO PROCESS THE INTERRUPT FOLLOWING EACH_^1*_>BLOCK OF DATA RECEIVED FROM HASP._^1*_]_^1*_2(2) TEND -- TO PRECESS THE INTERRUPT FOLLOWING EACH_^1*_>BLOCK OF DATA TRANSMITTED TO HASP._^1*_]_^1_(ENT_!REND,TEND,TPSUP_^1_(ENT_!LOGI,LOGO,ZAPEND_^1_(ENT_!XFCSI,XFCSO_^1_(ENT_!CURRP_^1_(EXT_!TPBUSY_^1_(€€SPC_!3_^1*_]_^1_(EQU_!RERRS(-5+1)_'NUMBER OF CONSECUTIVE ERRORS THAT MUST_^1*_@OCCUR ON THE SYNCHRONOUS COMM._^1*_@ADAPTER BEFORE OPERATOR IS INFORMED._^1_(EQU_!ZAPCT(3)_*NUMBER OF WORDS TO CAPTURE FROM TP I/O_^1*_@BUFFERS FOR TRACE INFO._^1_(SPC_!2_^1_(EXT* TPTRA,TPREC_^1_(EXT_!GBUFF,FBUFF_^1_(EXT_!TOQ,TGET_^1_(SPC_!3_^1************************************************************€€************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1_(SPC_!2_^1XF_%EQU_!XF(6)_^1XFF_$EQU_!XFF($A)_^1ZERO_#EQU_!ZERO($22)_^1X10_$EQU_!X10($27)_^1X20_$EQU_!X20($28)_^1X40_$EQU_!X40($29)_^1X4000_"EQU_!X4000($31)_^1XFFBF_"EQU_!XFFBF($39)_^1XFF7F_"EQU_!XFF7F($3A)_^1XBFFF_"EQU_!XBFFF($41)_^1_(SPC_!2_^1*********_]_^1*_-LOCAT€€IONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1_(SPC_!2_^1XESES_"EQU_!XESES($4E)_(STATUS OF LAST TP TRANSMIT/RECEIVE OP._^1*_-TP LOG_^1_(EQU_!RUNRS($50)_(UNKNOWN RESPONSES RECEIVED FROM HASP_^1_(EQU_!RNKRS($51)_(NAK RESPONSES RECEIVED FROM HASP_^1_(EQU_!RWBIT($52)_(WAIT-A-BITS RECEIVED FROM HASP_^1_(EQU_!RHDW($53)_)RECEIVE HARDWARE €€ERRORS_^1_(EQU_!RTXTI($54)_(TEXT BLOCKS RECEIVED FROM HASP_^1_(EQU_!RBCHI($55)_(LOST BLOCKS FROM HASP_^1_(EQU_!RACKI($56)_(NUMBER OF ACK'S RECEIVED FROM HASP_^1_(EQU_!THDW($57)_)TRANSMIT HARDWARE ERRORS_^1_(EQU_!TNULL($58)_(NULL RECORDS TRANSMITTED TO HASP_^1_(EQU_!TPCT($59)_)TOTAL NUMBER OF TP TRANSMISSIONS MADE_^1*_@DURING SESSION._^1_(EQU_!NEXTIN($5E)_'NEXT TP BUFFER TO BE READ €€FROM HASP_^1_(EQU_!LASTWR($5F)_'LAST TP BUFFER TRANSMITTED TO HASP_^1_(EQU_!XBCT($60)_)CURRENT TP BUFFER_^1_(EQU_!XEND($62)_)TP COMPLETION ADDRESS_^1_(EQU_!XES($63)_*TP ENDING STATUS_^1RSGCR_"EQU_!RSGCR($6B)_(RCB,SRCB FOR GEN. CONT. REC. FROM HASP_^1TXSTX_"EQU_!TXSTX($6D)_(TEXT MODE LEADER CONTROL SEQUENCE_^1TXETB_"EQU_!TXETB($6E)_(TEXT MODE TRAILER CONTROL SEQUENCE_^1_(SPC_!3_^1**€€*******_]_^1*_-XES ENDING STATUS WORD EQUATES_^1*********_]_^1_(SPC_!2_^1TOK_$EQU_!TOK(0)_,ALL ZEROES - TRANSMISSION OK_^1LDA_$EQU_!LDA(1)_,BIT 1 - LOST DATA_^1DCK_$EQU_!DCK(2)_,BIT 2 - DATA CHECK_^1TIM_$EQU_!TIM(4)_,BIT 3 - TIMEOUT_^1ECK_$EQU_!ECK(8)_,BIT 4 - EQUIPMENT CHECK_^1_(SPC_!3_^1*********_]_^1*_-TP BUFFER SIZE_^1*********_]_^1_(SPC_!3_^1TPBSIZ_!EQU_!TPBSIZ(200)_'TP BUFFER€€ SIZE_^1_(SPC_!3_^1*********_]_^1*_-DATA LINK CONTROL CHARACTERS IN EBCDIC_^1*********_]_^1_(SPC_!2_^1_(EQU_!SOH(1)_^1_(EQU_!STX(2)_^1_(EQU_!ETX(3)_^1_(EQU_!DLE($10)_^1_(EQU_!ETB($26)_^1_(EQU_!ENQ($2D)_^1_(EQU_!SYN($32)_^1_(EQU_!NAK($3D)_^1_(EQU_!ACK0($70)_^1_(SPC_!3_^1*********_]_^1*_-BUFFER CONTROL TABLE_^1*********_]_^1_(SPC_!2_^1BCT_$ALF_!0,0_^1BCH_$EQU_!BCH(0)_,BUFFER CHAIN PO€€INTER_^1BFCT_#EQU BFCT(1)_,NUMBER OF CHARACTERS IN BUFFER_^1BS_%EQU BS(2)_.BUFFER STATUS WORD_^1*_,STATUS WORD EQUATES_^1STR_$EQU_!STR(1)_,BIT 0 TRANSPARENT TEXT IN BUFFER_^1SOB_$EQU SOB(2)_-BIT 1 OBJECT CODE IN TEXT_^1SCS_$EQU SCS(4)_-BIT 2 CONTROL SEQUENCE ONLY IN BUFFER_^1SDC_$EQU_!SDC(8)_,BIT 3 BUFFER MARKED FOR DECOMPRESSION_^1SDM_$EQU_!SDM(16)_+BIT 4 DUMMY BUFFER_^1SDL_$E€€QU_!SDL(32)_+BIT 5 BUFFER MARKED FOR DELETION_^1*_]_^1BDATA_"EQU_!BDATA(3)_*DATA PORTION OF BLOCK_^1************************************************************************_^1_(EJT_^1TEND_#0_#0_^1*_]_^1*_-NOP THE FOLLOWING JMP IF YOU WISH TO RECORD THE ENDING_^1*_-STATUS (XES) AND THE FIRST 'ZAPCT' DATA WORDS OF THE_^1*_-TRANSMIT BUFFER._^1*_]_^1LOGO_#JMP* NOLOGO_,LOG/NOLOG INSTRU€€CTION_^1_(LDA_!=N$542F_^1_(RTJ* ZAPIT_-TO LOG;_^1*_]_^1NOLOGO_!ALF_!0,0_^1_(LDA- XES_/IF ENDING STATUS INDICATES NO ERRORS_^1_(STA- XESES_-SAVE TRANSMIT ENDING STATUS_^1_(SAZ_!T_1THEN SKIP FORWARD;_^1*_]_^1_(RAO- THDW_.ELSE INCREMENT ERROR LOG BY 1;_^1**********_]_^1*_-ERROR MESSAGE TO OPERATOR WILL GO HERE_^1**********_]_^1_(CLR_!A_1TERMINATE TP OP. PREMATURELY_^1_(STA_!TPBUSY€€_,INDICATE "NOT BUSY" TO TPEXEC_^1_(JMP* (TEND)_,RETURN TO TIP;_^1_(SPC_!3_^1*_]_^1T_'ALF_!0,0_^1_(LDA- NEXTIN_,GET NEXT TP INPUT BUFFER_^1_(STA- XBCT_.ESTABLISH RECEIVE BCT_^1_(LDA_!=XREND_,ESTABLISH RECEIVE_^1_(STA- XEND_.END ACTION ROUTINE_^1_(RTJ_!TPREC_-ACTIVATE RECEIVER_^1_(JMP* (TEND)_,EXIT_^1_(EJT_^1*_]_^1*_-THIS CODE RECORDS THE ENDING STATUS (XES) PLUS THE FIRST_^1*_€€-'ZAPCT' DATA WORDS OF THE TP I/O BUFFER._^1*_-THE BACK END OF THE DUMMY BUFFER IS USED._^1*_]_^1ZAPIT_"0_#0_^1_(STA* SVA_^1_(LDQ_!=XZAP_^1CURRP_"EQU_!CURRP(*-1)_^1_(TRQ_!A_^1_(INA_!ZAPCT+3_^1_(SUB_!=XZAPEND_^1_(SAM_!*+3_^1_(LDQ_!=XZAP_^1_(STQ- I_^1_(LDA_!=N0_^1SVA_$EQU_!SVA(*-1)_^1_(STA- (ZERO),I_^1_(LDA- XES_^1_(STA- 1,I_^1_(LDQ- XBCT_^1_(STQ- 2,I_^1_(LDA- BDATA,Q_^1_(STA€€- 3,I_^1_(LDA- BDATA+1,Q_^1_(STA- 4,I_^1_(LDA- BDATA+2,Q_^1_(STA- 5,I_^1_(LDA- I_^1_(INA_!ZAPCT+3_^1_(STA* CURRP_^1_(JMP* (ZAPIT)_+RETURN;_^1_(EJT_^1REND_#0_#0_^1*_]_^1*_-NOP THE FOLLOWING JMP IF YOU WISH TO RECORD THE ENDING_^1*_-STATUS (XES) AND THE FIRST 'ZAPCT' DATA WORDS OF THE TP_^1*_-RECEIVE BUFFER._^1*_]_^1LOGI_#JMP* NOLOGI_,LOG/NOLOG INSTRUCTION_^1_(LDA_!=N$522F_^€€1_(RTJ* ZAPIT_-TO LOG;_^1*_]_^1NOLOGI_!ALF_!0,0_^1_(LDQ- XES_/GET RECEIVE ENDING STATUS_^1_(SQZ_!*+2_/IF THERE IS AN ERROR_^1_(RAO- RHDW_.THEN INCREMENT REC. ERR. COUNT BY 1_^1_(QLS_!8_1AND ADD IT TO XESES_^1_(ADQ- XESES_^1_(STQ- XESES_-DONE_^1_(CLR_!Q_1CLEAR TPBUSY FLAG_^1_(STQ_!TPBUSY_,DONE_^1_(JMP* (REND)_,EXIT_^1_(EJT_^1*********_]_^1*_-TPSUP -- TP SUPERVISOR_^1*_6PROCESS€€ TRANSMIT/RECEIVE END OPERATION_^1*********_]_^1_(SPC_!2_^1TPSUP_"0_#0_^1***_!HANDLE ERROR MESSAGES HERE_^1_(LDA- XESES_-GET COMPOSITE ENDING STATUS_^1_(AND- XFF_/MASK OFF TRANS. ENDING STATUS_^1_(SAZ_!XTOK_.IF ZERO THEN SKIP FORWARD_^1_(LDA- LASTWR_,ELSE RE-TRANSMIT LAST BUFFER TO HASP_^1_(SAN_!*+2_/IF LASTWR IS ZERO_^1_(LDA* ANAK_.THEN A NAK WAS LAST SENT_^1_(STA- XBCT_.LAST€€WR AS CURRENT BUFFER_^1_(JMP_!RW03_.GO COMPLETE TRANSMISSION_^1*_]_^1XTOK_#ALF_!0,0_^1_(LDA- XES_/IF ENDING STATUS INDICATES NO ERRORS_^1_(SAN_!*+2_^1_(JMP* RE01_.THEN JUMP FORWARD TO CONTINUE PROC._^1*_@ELSE PROCESS ERROR CONDITION_^1RE03_#ALF_!0,0_^1_(LDQ- XBCT_.IF NEXTIN=LASTWR=DUMMY BUFFER_^1_(LDA- LASTWR_,AND NO. OF CHAR. REC'D > 2_^1_(SUB_!ADUM_.THEN IGNORE RE-QUEUING LAS€€TWR AND_^1_(AAQ_!A_1TRANSMIT A NAK RESPONSE_^1_(EAQ_!A_^1_(SAN_!RE04_.ALL NOT EQUAL_^1_(LDA- BFCT,Q_,CHECK COUNT_^1_(INA_!-3_^1_(SAM_!RE04_..LE. 2, SO SKIP_^1_(LDA_!LASTWR_,RELEASE THE LAST OUTPUT BUFFER USED_^1_(STA- I_1BUT KEEP THE SAME INPUT BUFFER_^1_(RTJ_!FREEIT_^1_(CLR_!A_1INDICATE THAT NO OUTPUT BUFFER EXISTS_^1_(STA_!LASTWR_,DONE_^1*_]_^1RE04_#ALF_!0,0_^1_(LDA_!=XNAKBCT_*€€PREPARE TO TRANSMIT NAK CONTROL SEQ._^1ANAK_#EQU_!ANAK(*-1)_^1_(STA- XBCT_.NEXT TP OUTPUT BUFFER_^1_(STA* NAKOUT_,INDICATE THAT A NAK WAS TRANSMITTED_^1_(JMP_!RW01_.GO TRANSMIT_^1_(EJT_^1*_]_^1RE01_#ALF_!0,0_^1_(LDQ- XBCT_^1_(STQ- $FF_/GET BUFFER STATUS WORD_^1_(LDA- BS,I_.FROM CURRENT BUFFER;_^1_(AND_!=XSCS_-IF BUFFER CONTAINS NO TEXT, I.E. CON-_^1*_@TROL SEQUENCE ONLY_^1ASCS€€_#EQU_!ASCS(*-1)_^1_(SAN_!*+3_/THEN SKIP FORWARD_^1_(JMP_!R04_/ELSE GO PROCESS TEXT;_^1*_]_^1_(RTJ_!FREEIT_,FREE THE INPUT BUFFER (BUT STILL TEST_^1*_@IT)_^1_(LDQ- BDATA,I_+GET FIRST RESPONSE BYTE;_^1_(CLR_!A_^1_(LLS_!8_^1_(STA* RRESP_^1_(INA_!-DLE_.IF NOT DLE LEADER_^1_(SAN_!RE02_.THEN SKIP FORWARD;_^1_(QLS_!8_1ELSE GET REAL RESPONSE;_^1_(STQ* RRESP_^1*_]_^1RE02_#ALF_!0,0_^1_(L€€DQ_!=N0_/LOAD REAL RESPONSE;_^1RRESP_"EQU_!RRESP(*-1)_^1_(TRQ_!A_^1*_]_^1_(INA_!-ACK0_-IF THIS IS NOT WRITE ACKNOWLEDGEMENT_^1_(SAN_!*+2_/THEN SKIP FORWARD;_^1_(JMP* RA01_.ELSE GO PROCESS ACK0;_^1*_]_^1_(TRQ_!A_^1_(INA_!-NAK_.IF THIS IS NEGATIVE ACKNOWLEDGEMENT_^1_(SAZ_!RNK01_-THEN GO PROCESS NAK;_^1_(RAO- RUNRS_-ELSE UNKNOWN RESPONSE -- LOG IT AND_^1_(RTJ* GNEXTI_,GET NEXT INPU€€T BUFFER AND_^1_(JMP* RE03_.PREPARE A NAK SEQUENCE;_^1_(EJT_^1*_]_^1*_-ALLOCATE NEXT INPUT BUFFER_^1*_]_^1GNEXTI_!0_#0_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!GBUFF_-GET NEXT TP BUFFER_^1_(SQN_!RG01_.IF GOTTEN, THEN SKIP FORWARD TO RG01_^1_(LDQ* ADUM_.ELSE USE THE DUMMY BUFFER_^1*_]_^1RG01_#ALF_!0,0_^1_(STQ- NEXTIN_,ADDRESS OF NEXT INPUT BUFFER_^1_(JMP* (GNEXTI)_*EXIT;_^1_(EJT_€€^1*_]_^1*_-NEGATIVE RESPONSE (NAK) RECEIVED FROM HASP_^1*_]_^1RNK01_"ALF_!0,0_^1_(RAO- RNKRS_-NAK'ED, SO LOG IT;_^1_(LDQ_!=N0_/IF WE LAST TRANSMITTED A NAK_^1NAKOUT_!EQU_!NAKOUT(*-1)_^1_(SQN_!RNK02_-THEN SKIP TO RE-TRY LAST BLOCK TO HASP_^1_(LDQ- LASTWR_,GET LAST WRITE_^1_(STQ- I_1TO I_^1_(LDA- BS,Q_.GET BUFFER STATUS_^1_(AND* ASCS_.IF BUFFER CONTAINS NO TEXT (I.E. CON-_^1*_@T€€ROL ONLY)_^1_(SAN_!RA010_-THEN SKIP FORWARD (FORGET IT);_^1*_]_^1RNK02_"ALF_!0,0_^1_(LDQ- LASTWR_^1_(SQN_!*+2_/IF LASTWR IS ZERO_^1_(JMP* RN01_.THEN GO SEND A NULL BLOCK TO HASP_^1_(STQ- XBCT_.RE-TRY LAST BLOCK TO HASP_^1_(STQ- I_1TO I_^1_(RTJ* GNEXTI_,GET NEXT INPUT BUFFER;_^1_(LDA- LASTWR_,IF THE LAST WRITE WAS FROM THE DUMMY_^1_(SUB* ADUM_.BUFFER_^1_(SAN_!RNK03_^1_(LDA- €€TXSTX_-THEN RESTORE THE TEXT MODE LEADER_^1_(STA_!DUMBCT+BDATA_%DONE_^1*_]_^1RNK03_"ALF_!0,0_^1_(JMP_!CREWRT_,GO TRANSMIT;_^1_(EJT_^1*_]_^1*_-POSITIVE ACKNOWLEDGEMENT OF LAST WRITE TO HASP_^1*_]_^1RA01_#ALF_!0,0_^1_(RAO- RACKI_-LOG ACK0 RECEIVED;_^1*_]_^1RA010_"ALF_!0,0_^1_(LDA* XFCSI_-TURN OFF WAIT-A-BIT;_^1_(AND- XBFFF_^1_(STA* XFCSI_-DONE;_^1*_]_^1RA02_#ALF_!0,0_^1_(LDA- LA€€STWR_,GET ADDRESS OF LAST WRITE BUFFER;_^1_(STA- I_1TO I FOR FREEIT_^1_(RTJ_!FREEIT_,GO FREE IT_^1*_]_^1RA03_#ALF_!0,0_^1*********_]_^1*_-SET ALARM CLOCK TO GO OFF IN DELAY$ MS_^1*********_]_^1*_]_^1RA04_#ALF_!0,0_^1_(LDA* XFCSI_-GET FCS;_^1_(AND- X4000_-IF WAIT-A-BIT SET_^1_(SAZ_!*+2_^1_(JMP* WBIT_.THEN JUMP TO WBIT;_^1*_]_^1*_'MVI_!0,TPOFF_+ELSE ALLOW BUFFERING;_^1*_]_^1RA040€€_"ALF_!0,0_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(LDQ_!TOQ_/LOOK AT TP OUTPUT QUEUE_^1_(SQZ_!FCSSW0_,IF NOTHING THERE, THEN SKIP_^1_(LDA- (ZERO),Q_*ELSE DEQUE NEXT OUTPUT BUFFER_^1_(STA_!TOQ_/DONE_^1_(STQ- XBCT_.STORE NEXT OUTPUT BUFFER_^1_(EIN_!0_1ENABLE INTERRUPTS_^1_(JMP* RA05_.GO START OUTPUT OPERATION;_^1*_]_^1FCSSW0_!ALF_!0,0_^1_(EIN_!0_1ENABLE INTERRUPTS_^1*_]_^1FCSSW_"ALF_!0€€,0_^1_(JMP+ RN01_.FORCE FCS RESPONSE SWITCH;_^1*********_]_^1*_-CLOCK WORK HERE_^1*********_]_^1*_'EIT_5OK FOR ALARM CLOCK;_^1_(JMP* (TPSUP)_+RETURN TO COMMUTATOR_^1*_]_^1*_-START OUTPUT OPERATION;_^1*_]_^1RA05_#ALF_!0,0_^1_(RTJ* GNEXTI_,GET NEXT INPUT BUFFER;_^1*_]_^1CNDWRT_!ALF_!0,0_^1_(LDA* RBCB0_-SET BCB FOR_^1_(STA* XBCB_.CURRENT BUFFER;_^1_(INA_!1_1INCREMENT CURRENT BLOC€€K COUNT BY 1;_^1_(AND* X8F_/MODULO 16;_^1_(STA* RBCB0_-STORE IT;_^1_(JMP_!CWRITE_,GO WRITE IT;_^1*_]_^1*_-WAIT-A-BIT SEQUENCE RECEIVED FROM HASP_^1*_]_^1WBIT_#ALF_!0,0_^1*_'MVI_!X'FF',TPOFF_'STOP ALL BUFFERING;_^1_(RAO- RWBIT_-LOG WAIT-A-BIT RECEIVED;_^1_(JMP* RN01_.GO IDLE;_^1_(EJT_^1*_]_^1*_-XNULL -- NO DATA TO SEND TO HASP_^1*_]_^1XNULL_"NOP_!0_^1*_-ENTRY FROM ALARM CLOCK_^1€€_(JMP* RA040_-ONE LAST TRY BEFORE NULL XMISSION_^1*_]_^1RN01_#ALF_!0,0_^1*_-TURN OFF ALARM CLOCK;_^1_(RAO- TNULL_-COUNT NO. OF NULL BLOCKS SENT TO HASP;_^1*_]_^1*_-RESET FCS RESPONSE SWITCH (NOP IT);_^1*_]_^1*_-SET-UP DUMMY BUFFER FOR NORMAL TRANSMISSION_^1*_]_^1_(LDQ_!=XDUMWD_+GET NUMBER OF WORDS TO MOVE_^1*_]_^1RN010_"ALF_!0,0_^1_(LDA* DUMBUF-1,Q_(MOVE FROM DUMBUF TO DUMBCT_^1€€_(STA_!DUMBCT-1,Q_^1_(INQ_!-1_^1_(SQZ_!*+2_^1_(JMP* RN010_^1_(LDQ- TXSTX_-TEXT MODE LEADER CONTROL SEQUENCE_^1_(STQ_!DUMBCT+BDATA_^1_(LDQ- TXETB_-TEXT MODE TRAILER CONTROL SEQUENCE_^1_(STQ_!DUMBCT+DUMWD-1_^1*_]_^1_(RTJ* GNEXTI_,GET NEXT BUFFER FOR INPUT_^1_(TRQ_!A_1IF NEXT INPUT BUFFER IS THE DUMMY_^1_(SUB_!=XDUMBCT_*BUFFER_^1ADUM_#EQU_!ADUM(*-1)_^1_(SAZ_!RN03_.THEN SKIP FORWAR€€D FOR NULL OUTPUT_^1*_@ELSE CONTINUE_^1RN02_#ALF_!0,0_^1_(LDA* XFCSO_-IF FCS HAS_^1_(SUB* SFCSO_-NOT CHANGED_^1_(SAZ_!RN04_.THEN TO WRITE ACK0 SEQUENCE;_^1*_]_^1RN03_#ALF_!0,0_^1_(LDA* ADUM_.ELSE MUST USE DUMMY BUFFER_^1_(STA- XBCT_.AS NEXT OUTPUT BUFFER;_^1_(JMP* CWRITE_,GO DO NORMAL WRITE_^1*_]_^1RN04_#ALF_!0,0_^1_(LDA_!=XACKBCT_*SET UP ACK0 SEQUENCE AS_^1AACK0_"EQU_!AACK0(€€*-1)_^1_(STA- XBCT_.NEXT OUTPUT BUFFER;_^1_(JMP_!CWRITE_,GO WRITE;_^1_(SPC_!3_^1*_]_^1*_-NULL BLOCK TO BE TRANSMITTED TO HASP_^1*_]_^1DUMBUF_!ALF_!0,0_^1_(ADC_!0_^1_(ADC_!DUMWD*2-BDATA-BDATA_^1_(ADC_!SDM+STR_^1_(ADC_!DLE*256+STX_'DLE,STX_^1_(NUM_!$9000,0_+BCB=$90(BYPASS SEQUENCE COUNT);_^1*_@FCS=0,0; RCB=0(EOB);_^1_(ADC_!DLE*256+ETB_'DLE,ETB_^1DUMWD_"EQU_!DUMWD(*-DUMBUF)_"NUMBER O€€F WORDS_^1_(EJT_^1*_]_^1*_-CWRITE -- COMMUNICATIONS WRITE ROUTINE_^1*_]_^1CWRITE_!ALF_!0,0_^1_(LDA- XBCT_.NEXT TP OUTPUT BUFFER;_^1_(STA- LASTWR_,SAVE LAST WRITE;_^1_(STA- $FF_/TO I;_^1*_]_^1CREWRT_!ALF_!0,0_^1_(CLR_!A_1INDICATE LAST TRANSMISSION NOT A NAK_^1_(STA* NAKOUT_,DONE_^1_(LDA- BS,I_^1_(AND_!=XSCS_-IF THIS IS A RESPONSE_^1_(SAZ_!*+2_^1_(JMP* RW01_.THEN JUMP FORWARD;_€€^1*_]_^1_(LDQ- BDATA+1,I_)ELSE SET CURRENT FCS_^1_(LDA- BDATA+2,I_)IN OUTPUT DATA;_^1_(LLS_!8_^1_(LDQ* XFCSO_^1_(STQ* SFCSO_-SAVE LAST FCS SENT TO HASP;_^1_(LLS_!24_^1_(STQ- BDATA+1,I_^1_(STA- BDATA+2,I_^1_(LDA- NEXTIN_,IF WE ARE NOT_^1_(SUB* ADUM_.USING THE DUMMY BUFFER_^1_(SAN_!RW02_.THEN SKIP FORWARD;_^1*_]_^1_(LDA- BDATA+1,I_)ELSE TELL HASP WAIT-A-BIT;_^1_(AND- XFFBF_€€^1_(ADD- X40_^1_(STA- BDATA+1,I_^1_(LDA- I_1IF OUTPUT BUFFER IS THE DUMMY BUFFER_^1_(SUB* ADUM_^1_(SAZ_!RW01_.THEN SKIP BCB INSERTION_^1*_]_^1RW02_#ALF_!0,0_^1_(LDQ_!=N0_/SET BCB INTO BUFFER;_^1XBCB_#EQU_!XBCB(*-1)_^1_(LDA- BDATA+1,I_^1_(ALS_!8_^1_(LRS_!8_^1_(STA- BDATA+1,I_^1*_]_^1RW01_#ALF_!0,0_^1_(RAO- TPCT_.INCREMENT TOTAL TRANSMISSION COUNTER_^1*_]_^1RW03_#ALF_!0,0_^1_(€€LDA_!=XTEND_,SET TRANSMIT END_^1_(STA- XEND_.OF BLOCK ROUTINE_^1_(RTJ_!TPTRA_-INITIATE TRANSMIT;_^1_(JMP_!(TPSUP)_+RETURN TO COMMUTATOR_^1_(SPC_!3_^1*_]_^1SFCSO_"NUM_!$8FCF_-LAST FCS OUTPUT TO HASP_^1XFCSI_"NUM_!$8FCF_-FCS ON INPUT_^1XFCSO_"NUM_!$8FCF_-FCS ON OUTPUT_^1*_]_^1RBCB0_"NUM_!$80_/BLOCK CONTROL BYTE OUT_^1RBCBI_"NUM_!$80_/BLOCK CONTROL BYTE IN_^1_(EJT_^1*_]_^1*_-PROCESS €€INPUT TEXT BUFFER_^1*_]_^1R04_$ALF_!0,0_^1_(RAO- RTXTI_-COUNT TEXT BLOCKS RECEIVED;_^1_(LDQ- BDATA+1,I_)SET NEW FCS_^1_(LDA- BDATA+2,I_)FROM INPUT BLOCK;_^1_(LLS_!8_^1_(STQ* XFCSI_^1_(AND- XFF_/GET BCB COUNT;_^1_(STA* CBCB_.SAVE BCB FROM INPUT;_^1_(SUB* RBCBI_-IF RECEIVED DOES NOT MATCH EXPECTED_^1_(SAZ_!*+2_^1_(JMP* BCHEK_-THEN JUMP TO PROCESS ERROR;_^1*_]_^1_(LDA* RBCBI_€€-ELSE COMPUTE NEXT EXPECTED BCB_^1_(INA_!1_^1_(AND_!=N$8F_-MODULO 16;_^1X8F_$EQU_!X8F(*-1)_^1_(STA* RBCBI_^1*_]_^1BCBOK_"ALF_!0,0_^1_(LDA- $FF_^1_(SUB* ADUM_.IF THIS IS NOT THE DUMMY BUFFER_^1_(SAN_!R05_/THEN SKIP FORWARD_^1_(JMP_!RA02_.ELSE IGNORE IT;_^1*_]_^1R05_$ALF_!0,0_^1_(LDA- BDATA+2,I_^1_(AND- XFF_/IF RCB NOT EQUAL ZERO_^1_(SAN_!R07_/THEN SKIP FORWARD;_^1*_]_^1R06_$ALF€€_!0,0_^1_(RTJ* FREEIT_,ELSE FREE THE INPUT BUFFER_^1_(JMP_!RA02_.AND IGNORE RECEIVED TEXT;_^1*_]_^1R07_$ALF_!0,0_^1_(LDA- BDATA+2,I_)IF RCB IS GENERAL CONTROL RECORD_^1_(AND- XFF_/THEN SAVE THE RCB,SRCB IN SGCR_^1_(SUB_!=N$F0_-AND REPLACE THE RCB,SRCB WITH $9181_^1_(SAN_!R08_/SO THE REASON CAN BE DISPLAYED_^1_(LDQ- BDATA+2,I_^1_(LDA- BDATA+3,I_^1_(LLS_!8_^1_(STQ- RSGCR_^1_(LD€€Q_!=N$9181_^1_(LLS_!24_^1_(STQ- BDATA+2,I_^1_(STA- BDATA+3,I_)DONE_^1*_]_^1R08_$ALF_!0,0_^1*********_$ADD SIGNON PROCESSING HERE FOR 1700-TO-1700_^1_(LDA- I_1GET BUFFER_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!TGET_.ADD BUFFER TO END OF INPUT QUEUE_^1*_@RESET FCS RESPONSE SWITCH (NOP IT);_^1_(JMP_!RA02_^1_(SPC_!3_^1*_]_^1*_-RECEIVED BCB COUNT NOT CORRECT_^1*_]_^1BCHEK_"ALF_!0,0_^€€1_(LDA_!=N0_/GET THE RECEIVED BCB COUNT;_^1CBCB_#EQU_!CBCB(*-1)_^1_(AND- X10_/IF THE IGNORE BIT IS NOT ON_^1_(SAZ_!BCH00_-THEN SKIP FORWARD;_^1_(JMP* BCBOK_-ELSE BCB IS OK;_^1*_]_^1BCH00_"ALF_!0,0_^1_(LDA* CBCB_^1_(AND- X20_/IF BCB DOES NOT INDICATE A RESET REQ._^1_(SAZ_!BCBBAD_,THEN BCB IS BAD;_^1*_@ELSE CONTINUE;_^1_(LDA* CBCB_.RESET INPUT BCB COUNT FROM_^1_(AND- XF_^1_(TRA€€_!Q_1INPUT BUFFER;_^1_(LDA* RBCBI_^1_(AND_!=N$F0_^1_(AAQ_!A_^1_(STA* RBCBI_^1_(JMP* BCBOK_-BCB IS OK_^1_(SPC_!3_^1*_]_^1BCBBAD_!ALF_!0,0_^1_(RAO* RBBCB_-LOG BAD BCB CONDITION_^1_(LDA* CBCB_.LOAD THE NEGATIVE OF THE_^1_(AND- XF_0RECEIVED BCB INTO Q;_^1_(STA* SCBCB_-SAVE CBCB;_^1_(TCA_!Q_^1_(LDA* RBCBI_-LOAD THE EXPECTED BCB INTO A;_^1_(AND- XF_^1_(AAQ_!A_1COMPUTE EXPECTED-R€€ECEIVED BCB COUNTS;_^1_(SAP_!RBCH01_^1_(INA_!16_0MODULO 16;_^1*_]_^1RBCH01_!ALF_!0,0_^1_(INA_!-MAXDUP_+IF DIFFERENCE IS NOT REASONABLE_^1_(SAP_!RBCH02_,THEN SKIP FORWARD;_^1_(JMP* R06_/ELSE GO FREE THE INPUT BUFFER AND CONT_^1*_]_^1RBCH02_!ALF_!0,0_^1_(RAO- RBCHI_-COUNT NUMBER OF BLOCK CHECK_^1*_@OCCURRENCES;_^1_(LDA_!=N0_/GET RECEIVED BCB_^1SCBCB_"EQU_!SCBCB(*-1)_^1_(ADD_!=N$90_€€-PLUS IGNORE BIT_^1_(STA* XBCB_.TO CURRENT BUFFER;_^1_(ALS_!8_^1_(STA* LBCB_.TO OUTPUT BLOCK (BCB);_^1_(LDA* RBCBI_-EXPECTED_^1_(AND* X8F_/BCB_^1_(ALS_!8_1TO_^1_(STA* LSRCB_-OUTPUT BLOCK (SRCB);_^1_(LDA- LASTWR_,FREE THE_^1_(STA- $FF_/LAST OUTPUT_^1_(RTJ* FREEIT_,BUFFER;_^1_(LDA_!=XLOSTBL_*ESTABLISH 'LOST BLOCK' MESSAGE_^1_(STA- XBCT_.AS THE NEXT OUTPUT BUFFER TO HASP;_^1_€€(LDA- TXSTX_-INSERT THE TEXT MODE LEADER AND_^1_(STA* LOSTST_,TRAILER CONTROL SEQUENCES_^1_(CLR_!Q_^1_(LDA- TXETB_^1_(LLS_!8_^1_(STQ* LSRCB+1_^1_(STA* LSRCB+2_+DONE_^1_(JMP_!CWRITE_,GO TELL HASP ABOUT BAD BCB;_^1*_]_^1MAXDUP_!EQU_!MAXDUP(3)_^1RBBCB_"ADC_!0_^1*_]_^1*_-PROTOTYPE CTL RECORD TO TELL HASP THAT BLOCKS ARE LOST_^1*_]_^1LOSTBL_!ALF_!0,0_^1_(ADC_!0_1NO CHAIN_^1_(ADC_!L€€OSTCT*2-1_(CHARACTER COUNT_^1_(ADC_!SDM+STR_+DUMMY BUFFER AND TRANSPARENT TEXT_^1LOSTST_!ALF_!0,0_^1_(ADC_!DLE*256+STX_'DLE,STX_^1LBCB_#NUM_!$9000,$00E0_'BCB=9X(RECEIVED BCB COUNT ADDED);_^1*_@FCS=0,0; RCB=E0(CTL REC., TYPE = LOST_^1*_@DATA)_^1LSRCB_"NUM_!$8000_-SRCB=8X(EXPECTED BCB COUNT ADDED);_^1*_@SCB=0(NULL RECORD);_^1_(ADC_!DLE_/RCB=0(EOB); DLE_^1_(ADC_!ETB*256_+ETX,FILL;_^1_€€(EQU_!LOSTCT(*-LOSTST)_^1_(EJT_^1*_]_^1*_-NAK BUFFER CONTROL TABLE_^1*_]_^1NAKBCT_!ALF_!0,0_^1_(ADC_!0_1NO CHAIN_^1_(NUM_!1_1CHARACTER COUNT_^1_(ADC_!SCS+SDM_+CONTROL SEQUENCE ONLY AND DUMMY BUFFER_^1_(ADC_!NAK*256_+NAK_^1*_]_^1*_-ACK0 BUFFER CONTROL TABLE_^1*_]_^1ACKBCT_!ALF_!0,0_^1_(ADC_!0_1NO CHAIN_^1_(NUM_!2_1CHARACTER COUNT_^1_(ADC_!SCS+SDM_+CONTROL SEQUENCE AND DUMMY BUFFER_^€€1_(ADC_!DLE*256+ACK0_%DLE,ACK0_^1_(EJT_^1*_]_^1*_-FREE THE LAST TP BUFFER USED FOR INPUT OR OUTPUT_^1*_]_^1*_-ADDRESS OF BUFFER (BCT) IS IN I-REGISTER UPON ENTRY;_^1*_]_^1FREEIT_!0_#0_^1_(LDA- I_1IF NO BUFFER TO FREE,_^1_(SAZ_!RF01_.THEN SKIP OUT_^1_(LDA- BS,I_.IF THIS IS A_^1_(AND_!=XSDM_-DUMMY BUFFER_^1_(SAN_!RF01_.THEN SKIP FORWARD;_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(LDQ- I_1€€GET BUFFER ADDRESS_^1_(RTJ_!FBUFF_-GO FREE BUFFER_^1*_]_^1RF01_#ALF_!0,0_^1_(JMP* (FREEIT)_*RETURN TO CALLER;_^1_(EJT_^1_(SPC_!3_^1*_]_^1*_-DUMMY BUFFER_^1*_]_^1DUMBCT_!ALF_!0,0_^1_(ADC_!0_1NO CHAIN_^1_(ADC_!DUMWD*2-BDATA-BDATA_^1_(ADC_!SDM+STR_+DUMMY BUFFER AND TRANSPARENT TEXT_^1_(BSS_!(TPBSIZ)_^1***************_^1ZAP_$EQU_!ZAP(DUMBCT+BDATA+DUMWD)_^1ZAPEND_!EQU_!ZAPEND(*-1)_^1**€*************_^1_(END_^__ PXD1810 CSY/ P€1_(NAM_!XD1810_^1*_$1810-1 CONVERSATIONAL DISPLAY TERMINAL DRIVER_^1*_$PERIPHERAL DRIVERS 1.0C_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 2_^1*_]_^1*P1810 ADC $520D_(00 SCHEDULER CALL_^1*_%ADC I1810_(01 INITIATOR ADDRESS_^1*_%ADC C1810_(02 CONTINUATOR ADDRESS_^1*_%ADC E1810_(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+T1810_!08 REQUEST STATUS_^1*_%NUM 0_,09 DRIVER STATUS_^1*_%NUM 0_,10 CURRENT LOCATION_^1*_%NUM 0_,11 LAST LOCATION PLUS ONE_^1*_%NUM 0_,12 DEVICE STATUS_^1*_%NUM 0_,13 ERROR CODE AND STARTING LOCATION_^1*_%NUM $7FFF_(€€14 RESERVED_^1*_%NUM 0_,15 RESERVED FOR FNR AND CMR_^1*_%NUM 0_,16 DRIVER FLAGS_^1*_%NUM 1_,17 HARDWARE PARITY CHECK FLAG_^1*_%ADC U1810_(18 DIAGNOSTIC LU_^1 SPC 1_]_^1_(ENT_!XI1810,XC1810,XE1810_^1*_'EXT_%ALTDEV_^1*_'EXT_%MAKEQ_^1*_$EXT MI_^1*_$EXT LOG_*ERROR LOGGING ENTRY_.**MSOS 4.1**_^1*_$EXT RQAQ_)REQUEST A/Q ALLOCATOR_181*2063_^1*_$EXT RLAQ_)RELEASE A/Q ALLOCATO€€R_181*2063_^1_%SPC 2_^1***_"PHYSICAL DEVICE TABLE WORDS_^1_%SPC 2_^1_%EQU TIME(4)_"DIAG. CLOCK TIME_^1_%EQU LU(5)_$LOGICAL UNIT_^1_%EQU REQAD(6)_!REQUES ADDRESS_^1_%EQU CALL(7)_"HARDWARE ADDRESS_^1_%EQU ERRTAB(8) REQUEST STATUS_^1_%EQU SWITCH(9) SWITCH WORD_^1_%EQU CORE(10)_!CORE ADDRESS_^1_%EQU LASTP1(11) LAST CORE LOCATION + 1_^1_%EQU STATUS(12) HARDWARE STATUS_^1_%E€€QU 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 SWMASK($4)_"MASK TO RESET SWITCH WORD_-MP MSOS_^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 RLSRSV($2B)_!RELEASE RESERVE STATUS MASK_+MP MSOS_^1_%EQU RDMODE($2C)_!READ MODE STATUS MASK_1MP MSOS_^1_%EQU RSRVD($2D)_"RESERVED (PANEL MODE) STATUS_*MP MSOS_^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 SE€€CONDS_^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_]_^1E1810 STQ- I_,DIAGNOSTIC TIMER ERROR ENTRY_^1XE1810_!EQU_!XE1810(E1810)_^1_%RTJ* CHKRSV_'CHECK IF PANEL MODE, RETURN..._(MP MSOS_^1_€€%JMP* TMOUT_(HERE IF NOT IN PANEL MODE_-MP MSOS_^1_%JMP- (DISPAD)_$RETURN HERE IF SO-RESTART LATER_'MP MSOS_^1*_9AT RELEASE RESERVE INTERRUPT_)MP MSOS_^1TMOUT ENA TIMERR_(GOT LEGITIMATE TIMEOUT_0MP MSOS_^1_%JMP* SETCDE_^1_%SPC 2_^1CHKRSV NOP 0_,ENTRY FOR SUBROUTINE_2MP MSOS_^1_%RTJ* GETSTS_'GET DEVICE STATUS IN 'A'_.MP MSOS_^1_%AND- RSRVD_(CHECK IF RESERVED BIT ON_.MP MSOS_^1_%€€SAZ CKOUT_(SKIP IF NOT ON_8MP MSOS_^1_%RAO* CHKRSV_'IS ON, RETURN +1_6MP MSOS_^1CKOUT JMP* (CHKRSV)_$RETURN_@MP MSOS_^1_%SPC 2_SMP MSOS_^1GETSTS NOP 0_,ENTRY FOR SUBROUTINE_2MP MSOS_^1_%LDQ- CALL,I_'GET THE DEVICE_8MP MSOS_^1_%INP 1_,STATUS AND_83*2129_^1*_$RTJ RQAQ_)REQUEST A/Q ALLOCATION_083*2129_^1*_$STQ- I_S83*2129_^1_%LDQ- CALL,I_N83*2129_^1_%ENA 0_,RESET FLAG_<83*2129_^1_%STA€€- FLAG,I_N83*2129_^1*_$LDA- (I)_*PICKUP SCHEDULER CALL FROM PHYSTB_$83*2129_^1*_$STA* SCHCAL_'MAKE UP SCHEDULER CALL_^1*_$RTJ- ($F4)_(SCHEDULE MI_^1*SCHCAL 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*RELXIT RTJ RLAQ_)RELEASE A/Q_^1*_$JMP- (DIS€€PAD)_$EXIT_B83*2129_^1RELXIT_!JMP* (I1810)_+EXIT_^1JNOMAN JMP* NOMAN_^1TOCLRO JMP* CLROUT_'CLEAR DEVICE AND EXIT_1MP MSOS_^1_%SPC 2_^1ERROR JMP* INTRNL_J*MSOS V4.0_^1_%ENA EXTREJ_#EXTERNAL REJECT 6_4*MSOS V4.0_^1SETCDE JMP* SETCOD_^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*_$RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_081*2063_^1*_$STQ- I_,RESTORE PDT POINTER_381*2063_^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**_^1*LOGIT RTJ+ LOG_*LOG ERROR IN EF_^1*_'JMP+_$ALTDEV_^1_(JMP* RELXIT_,EXIT_^1NOMAN RTJ CHKRSV_'CHECK IF IN PANEL MODE_0MP MSOS_^1_%JMP* CKRLS_(RETURN HERE IF NOT_4MP MSOS_^1_%ENA -1_RMP MSOS_^1_%STA- TIME,I_'RESET TIMER VALUE_5MP MSOS_^1SETALM ENA $12_*RETURN HERE IF SO-_^1_%LDQ- CALL,I_'CLEAR INTERRUPTS EXCEPT ALAR€€M_^1_%OUT 1_,BUT NOT CONTROLLER_4MP MSOS_^1_%NOP 0_SMP MSOS_^1*_'JMP- (DISPAD)_*EXIT-RESTART AT RELEASE RESERVE INTRPT_^1_(JMP* RELXIT_,EXIT_^1_%SPC 1_SMP MSOS_^1CKRLS LDA- STATUS,I_$GET DEVICE STATUS_5MP MSOS_^1_%AND- RLSRSV_'CHECK IF RELEASE RSV INTERRUPT_(MP MSOS_^1_%SAZ NOTRLS_'NO,SKIP_?MP MSOS_^1_%ENA 2_,CLEAR INTERRUPTS_6MP MSOS_^1_%LDQ- CALL,I_'BUT NOT CONTROLLER_4MP€€ MSOS_^1_%OUT 1_,IN ORDER TO CLEAR THE_1MP MSOS_^1_%NOP 0_,RELEASE RESERVE INTERRUPT_-MP MSOS_^1_%LDA- LU,I_)CHECK IF A REQUEST IN PROGRESS_(MP MSOS_^1_%SAN SRTAGN_'SKIP TO RESTART IT_4MP MSOS_^1_%JMP FNR_*NONE IN PROG-GO GET ONE_/MP MSOS_^1SRTAGN LDA- COREIN,I_$GET BUFFER START ADDRESS_.MP MSOS_^1_%STA- CORE,I_'AND RESTORE CURRENT LOCN_.MP MSOS_^1_%LDA- SWITCH,I_$GET SWITCH WO€€RD_7MP MSOS_^1_%AND- SWMASK_'MASK OFF ALL BUT_6MP MSOS_^1_%STA- SWITCH,I_$ORIG SWITCH VALUES_4MP MSOS_^1_%JMP RESTRT_'RESTART THE REQUEST_3MP MSOS_^1_%SPC 1_SMP MSOS_^1NOTRLS LDA- LU,I_)CHECK IF REQ IN PROGRESS_.MP MSOS_^1_%SAN NOMAN1-*-1_^1CLROUT RTJ* CLEAR_(CLEAR AND EXIT_^1_%JMP* RELXIT_'RELEASE A/Q AND EXIT_283*2129_^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_!CHECK FOR DATA INTERRUPT_-*MSOS V4.0_^1_%SAZ DONE_)SKIP IF N€€OT_;83*2129_^1_%JMP* NOTDON_#PROCESS DATA INTERRUPT_/*MSOS V4.0_^1ALRINT ENA $40_'BIT 6_@*MSOS V4.0_^1_%AND- STATUS,I_!CHECK FOR LOST DATA_^1_%SAN A1_+SKIP IF LOST DATA_^1_%LDA- PARFLG,I_$CHECK FOR HARDWARE PARITY CHECK_^1_%SAZ A0_+SKIP IF NOT_^1_%LDA- BIT7_P83*2468_^1_%AND- STATUS,I_$CHECK FOR PARITY ERROR_^1_%SAN A2_+SKIP IF PARITY ERROR_^1A0_#ENA ALARM_^1_%JMP* SETCOD_J*MSO€€S V4.0_^1A1_#ENA LOSDAT_#LOST DATA ERROR 1_4*MSOS V4.0_^1_%JMP* SETCOD_J*MSOS V4.0_^1A2_#ENA PARERR_'PARITY ERROR 3_^1_%JMP* SETCOD_^1*_83 CARDS DELETED_783*2129_^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_^1*COMPRQ RTJ- (ACOMPR)_$GO TO COMPLETE THE€€ STATUS_^1*_$RTJ+ RLAQ_)RELEASE A/Q ALLOCATION_081*2063_^1*_$STQ- I_,RESTORE PDT POINTER_381*2063_^1*_$JMP I1810+1_H**MSOS 4.1**_^1_(RAO_!I1810_-EOP RETURN_^1_(JMP* RELXIT_,EXIT_^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_%LDA- RDMODE_'CHECK IF INTO READ YET_0MP MSOS_^1_(AND-_$STATUS,I_^1_%S€€AZ NFREAD_^1_%JMP READ_^1NFREAD_!LDQ-_$CALL,I_.CLEAR INT.AND_^1_(ENA_%2_3SET READ MODE_^1_(OUT_%ERROR-*_-SELECT INT.ON_^1_(LDA*_$B9A4A2_.DATA AND ALARM_^1_%JMP OUTOUT_^1B9A4A2 NUM $214_^1_%EJT_]_^1***_"PROCESS MOTION REQUEST_^1_%SPC 2_^1NXTMCR LDA- SWITCH,I_H*MSOS V4.0_^1_%EOR- BIT15_$CLEAR BIT 15 FROM_4*MSOS V4.0_^1_%STA- SWITCH,I_!PREVIOUS MOTION REQUEST_.*MSOS V4.0_^1MOTREQ€€ LDA- TMPWRD,I_!GET PARAMETER STRING_1*MSOS V4.0_^1_%CLR Q_O*MSOS V4.0_^1_%LLS 4_)GET ONE PARA. FROM STRING_,*MSOS V4.0_^1_%SQZ TRMMCR_#SKIP IF ZERO PARA_4*MSOS V4.0_^1_%STA- TMPWRD,I_!SAVE REMAINDER OF STRING_-*MSOS V4.0_^1_%INQ -2_(IS IT WEOF_;*MSOS V4.0_^1_%SQZ TOPFRM_#SKIP IF WEOF_9*MSOS V4.0_^1_%INQ -2_(IS IT REWIND/UNLOAD_2*MSOS V4.0_^1_%SQZ TRMMCR_#SKIP IF YES_:*MSOS €€V4.0_^1_%JMP* MOTREQ_#GET NEXT PARAMETER_3*MSOS V4.0_^1TRMMCR JMP* DONE_L*MSOS V4.0_^1_%SPC 2_O*MSOS V4.0_^1***_"TOP OF FORM_J*MSOS V4.0_^1_%SPC 1_^1TOPFRM LDA- SWITCH,I_H*MSOS V4.0_^1_%AND- H003F_$SAVE LOWER SWITCHS_3*MSOS V4.0_^1_%EOR =N$81C0_"SET BIT 15 AND NULL COUNT FOR 7_%*MSOS V4.0_^1_%STA- SWITCH,I_!INTO SWITCH_:*MSOS V4.0_^1_%ENA TFORM_$ASCII TOP OF FORM (0C)_/*MSOS V4€€.0_^1_%JMP* TOSND_$OUTPUT TOP OF FORM_3*MSOS V4.0_^1_%EJT_]_^1AWRITE_!ENA_%2_3FORMATTED_^1_(AND-_$SWITCH,I_^1_%TRA Q_,Q = 0 IF UNFORMATTED_^1_(ENA_%$10_11ST CHAR._^1_(AND-_$SWITCH,I_^1_(SAN_%NOT1ST-*-1_^1_(ENA_%$10_1YES,CLEAR 1ST_^1_%SQN 1_,SKIP IF FORMATTED_^1_%ENA $30_*RESET LINE FEED FLAGIF UNFORMATTED_^1_(EOR-_$SWITCH,I_,CHAR.SWITCH_^1_(STA-_$SWITCH,I_,SEND OUT A_^1_%SQZ NO€€T1ST-*-1_"CONTINUE IF UNFORMATTED_^1_%ENA $A_+LINE-FEED CHARACTER_^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_%LDA* BIT6A7_'DISPLAY9_^1_%INA $20_*TTY._?*MSOS V4.1_^1_(EOR-_$SWITCH,I_,AND SEND OUT_^1_(STA-_$SWITCH,I_,A LINE FEED_^1_%AND* BIT6A7_^1_%TRA Q_^1_%ENA $D_+CARRI€€AGE RETURN_^1_%SQN 1_^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_%CLR A_^1_%JMP SENDCH_'GO OUTPUT CHARACTER_^1NOSPCC LDA- SWITCH,I_H*MSO€€S 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_%LDA* BIT1D0_^1_(JMP*_$GOTCR_/CONTROL_^1NOTCR_"INA_%1_3NO,FORM OUT_^1_(SAZ_%GOTTAB-*-1_^1_(INA_%1_3NO,VERTICAL_^1_(SAZ_%GOTTAB-*-1_*TAB_^1_(INA_%2_3NO,H€€ORIZONTAL_^1_(SAN_%NOCR-*-1_,TAB_^1GOTTAB_!LDA*_$BIT6A7_.YES,MODIFY_^1GOTCR_"EOR-_$SWITCH,I_,SWITCH_^1_(STA-_$SWITCH,I_^1NOCR_#TRQ_%A_3OUTPUT_^1_%INA -$7F_)TEST FOR RUBOUT_790*2884_^1_%SAN NOCR1_(SKIP IF NOT A RUBOUT CHARACTER_(90*2884_^1_%RAO* ROFLAG_'SET RUBOUT PRESENT FLAG_/90*2884_^1_%JMP* RUBOUT_'DON'T OUTPUT A RUBOUT_190*2884_^1NOCR1 ENA 0_,RESET RUBOUT PRESENT FLAG_-90*2€€884_^1_%STA* ROFLAG_N90*2884_^1_%TRQ A_,RESTORE ORIGINAL CHARACTER_,90*2884_^1_%LDQ- CALL,I_N90*2884_^1_(INQ_%-1_2CHARACTER_^1_(OUT_%TOEROR-*_^1RUBOUT LDA- CORE,I_'LAST WORD_=90*2884_^1_(SUB-_$LASTP1,I_^1_(SAZ_%COMPLT-*-1_^1_(ENA_%4_3NO,REVERSE_^1_(EOR-_$SWITCH,I_,UPPER LOWER_^1_(STA-_$SWITCH,I_,SWITCH_^1_%AND- BIT2_(NOW SET FOR_^1_%SAN GOGODI_%UPPER_^1_(RAO-_$CORE,I_.YES,INCREME€€NT_^1_(LDA-_$CORE,I_.CORE LOCATION_^1_(SUB-_$LASTP1,I_,NOW LAST_^1_(SAN_%GOGODI-*-1_*NO_^1COMPLT_!ENA_%8_3YES,SET_^1_(EOR-_$SWITCH,I_,COMPLETEO BIT_^1_(STA-_$SWITCH,I_,AND EXIT_^1_%JMP* GOGODO_N90*2884_^1GOGODI LDA* ROFLAG_'RUBOUT PRESENT FLAG SET_/90*2884_^1_%SAZ GOGODO_'NO_D90*2884_^1_(JMP_!XC1810+2_*YES, GO GET THE NEXT CHARACTER_^1GOGODO JMP EXIT_P90*2884_^1ROFLAG NUM 0_,RUB€€OUT FLAG PRESENT_390*2884_^1BIT6A7 NUM $3C0_^1BIT1D0 NUM $1D0_^1READ_#INQ_%-1_2INPUT A CHAR_^1_(ENA_%0_^1_(INP_%TOEROR-*_^1_%STA- TEMP,I_^1_%LDA- PARFLG,I_^1_%SAN NOPAR_(SKIP IF HARDWARE PARITY CHECK_^1_%LDA- TEMP,I_^1_(SPA-_$TEMP,I_^1_(SAN_%NOPAR-*-1_+PARITY OK_^1_%ENA PARERR_#PARITY ERROR 3_7*MSOS V4.0_^1_%JMP SETCOD_J*MSOS V4.0_^1TOEROR JMP* TR5_M*MSOS V4.0_^1_%JMP ERROR+1€€_"EXTERNAL REJECT_6*MSOS V4.0_^1TR5_"JMP ERROR_$INTERNAL REJECT_6*MSOS V4.0_^1NOPAR_"ENA_%$7F_1YES,STRIP_^1_(AND-_$TEMP,I_.PARITY BIT_^1_(TRA_%Q_^1_(ENA_%2_3FORMATTED_^1_(AND-_$SWITCH,I_^1_(SAZ_%ZIFORM-*-1_^1_(TRQ_%A_3YES,_^1_(INA_%-$A_1LINE FEED_^1_(SAZ_%PASSIT-*-1_*YES,IGNORE IT_^1_(INA_%-3_2NO,CARRIAGE_^1_(SAN_%1_3RETURN_^1_(JMP*_$CARRET_.YES_^1_(INA_%-$72_0NO,CANCEL_^1_(SAN_%1€€_^1_(JMP*_$CANCEL_.YES_^1_(ENA_%$10_1NO,PASS SWITCH_^1_(AND-_$SWITCH,I_,SET_^1_(SAZ_%1_^1PASSIT_!JMP*_$TGODIS_.YES,EXIT_^1ZIFORM TRQ A_O*MSOS V4.1_^1_%INA -$61_)LOWER CASE A_6*MSOS V4.1_^1_%SAM ZIFORN_'SKIP IF LESS THAN LOWER CASE A._"*MSOS V4.1_^1_%INA -$1A_)CHECK RANGE TO LOWER CASE Z._%*MSOS V4.1_^1_%SAP ZIFORN_'SKIP IF ABOVE LOWER CASE CHARACTERS*MSOS V4.1_^1_%INQ -$20_)D€€ROP LOWER CASE BIT._.*MSOS V4.1_^1ZIFORN ENA 4_,CHECK IF UPPER CHARACTER._)*MSOS V4.1_^1_(AND-_$SWITCH,I_^1_(SAN_%LOWLOW-*-1_^1***_$ENA_%-0_2YES_^1_(LDA_!=N$2020_1YES_^1_(LLS_%24_^1_(JMP*_$TOSTO_^1LOWLOW_!TRQ_%A_3NO_^1*_'EOR-_$XFF00_^1*_'LDQ-_$CORE,I_^1*_'AND-_$(ZERO),Q_^1_(LDQ- CORE,I_^1_(EOR- (ZERO),Q_^1_(EOR- B5A3_^1TOSTO_"LDQ-_$CORE,I_^1_(STA-_$(ZERO),Q_^1_(LDA-_$CORE,I_.LA€€ST LOC_^1_(SUB-_$LASTP1,I_^1_(SAZ_%TGETOU-*-1_*YES,GETOUT_^1_(ENA_%4_-+NO,REVERSE_^1_(EOR-_$SWITCH,I_,UPPER-LOWER_^1_(STA-_$SWITCH,I_,SWITCH_^1_%AND- BIT2_%CHECK IF UPPER_7*MSOS V4.0_^1_%SAN TGODIS_#SKIP IF UPPER_8*MSOS V4.0_^1_.RAO-_$CORE,I_.YES,INCREMENT_^1_(LDA-_$CORE,I_.CORE LOCATION_^1_(SUB-_$LASTP1,I_,NOW LAST_^1_(SAZ_%NGODIS-*-1_^1TGODIS JMP* GOGODI_#TO EXIT_>*MSOS V4.0_^1N€€GODIS_!ENA_%2_^1_(AND-_$SWITCH,I_^1_(SAN_%NOG-*-1_^1TGETOU_!ENA_%8_3SELECT EOT_^1_(LDQ-_$CALL,I_.INTERRUPT_^1_(OUT_%TOEROR-*_^1*_81 CARD DELETED_883*2129_^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*_$TGETO€€U_.NO_^1_(ENA_%-$34_0YES,CLEAR PASS_^1_(AND-_$SWITCH,I_,CANCEL AND_^1_(STA-_$SWITCH,I_,LOWER_^1_(LDQ-_$COREIN,I_,INITIALIZE_^1_(STQ-_$CORE,I_.CORE LOCATION_^1MORUB_"SET_%A_3TO ALL ONES_^1_(STA-_$(ZERO),Q_^1MORUB0 EQU MORUB0(*)_K93*2925_^1_(LDA-_$LASTP1,I_^1*_8PSR 89*2925 DELETED_391*2925_^1_(EAQ_%A_^1_%SAZ MORUB1_'SKIP IF ALL DATA ERASED_/93*2925_^1_%SET A_S93*2925_^1_%STA- (ZER€μO),Q_L93*2925_^1_%INQ 1_S93*2925_^1_%JMP* MORUB0_N93*2925_^1MORUB1 EQU MORUB1(*)_^1_(JMP*_$TGODIS_^1CANCEL_!ENA_%-$30_0CANCEL-SET_^1_(AND-_$SWITCH,I_,PASS AND_^1_(INA_%$30_1CANCEL SWITCH_^1_(STA-_$SWITCH,I_^1_(JMP*_$TGODIS_^1_(END_^__μPXK1827 CSY/ P€1_(NAM_!XK1827_^1*_$1827 LINE PRINTER KERNEL_^1*_$PERIPHERAL DRIVERS 1.0C_^1*_$SMALL SYSTEMS DIVISION, LA JOLLA, CALIFORNIA_^1*_$COPYRIGHT CONTROL DATA CORPORATION 1976_^1_%SPC 5_^1****_]_^1*E_]_^1* **********************************************************************_^1*_1K1827 - KERNEL FOR 1827 LINE PRINTER_^1* *******************************************************************€€***_^1_(SPC_!3_^1************************************************************************_^1************************************************************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1X3_%EQU_!X3($4)_^1************************************************************************_^1**********************€€**************************************************_^1_(SPC_!3_^1************************************************************************_^1************************************************************************_^1********_]_^1*_-TANK BUFFER CONTROL TABLE EQUATES (TK)_^1********_]_^1TKBCT_"EQU_!TKBCT(0)_*TANK BUFFER CONTROL TABLE_^1TKBCH_"EQU_!TKBCH(0)_*BUFFER CHAIN POINTER_^1TKRCB€€H_!EQU_!TKRCBH(1)_)RECORD CONTROL BYTE(HIGH BYTE)_^1TKSRCL_!EQU_!TKSRCL(1)_)SUB-RECORD CONTROL BYTE (LOW BYTE)_^1TKCT_#EQU_!TKCT(2)_+NUMBER OF CHARACTERS INBUFFER_^1TKDAT_"EQU_!TKDAT(3)_*TANK DATA_^1************************************************************************_^1************************************************************************_^1_%EJT_]_^1****_]_^1*E_]_^1*_]_^1*_]€€_^1*_2OUTPUT_^1*_2------_^1*_]_^1*_(THE OUTPUTS OF THE PRINTER KERNEL ARE:_^1*_]_^1*_2A. STATUS_^1*_5INITIATOR STATUS TO PDT_^1*_5CONTINUATOR STATUS TO PDT_^1*_5TIME OUT STATUS TO PDT_^1*_]_^1*_2B. FAULT CODE (FLTCOD) IS SET IF ERROR_^1*_5OCCURS AS FOLLOWS:_^1*_50_!TIME OUT_^1*_52_!ALARM_^1*_53_!PARITY_^1*_55_!INTERNAL REJECT_^1*_56_!EXTERNAL REJECT_^1*_]_^1*_5ALSO BIT 14 OF EREQST€€_^1*_]_^1*_2C._^1*_5DATA IN CALLER'S BUFFER IS SENT TO_^1*_5BUFFER_^1*_]_^1*_2D. GHOST INTERRUPT COUNTER IS STEPPED IF_^1*_5GHOST INTERRUPT HAS OCCURED_^1*_]_^1*_]_^1*E_]_^1*_2ENTRY/EXIT_^1*_2----------_^1*_2ENTRY -_^1*_]_^1*_2A. K1827 - ENTERED BY RETURN JUMP BY DRIVER_^1*_5INITIATOR_^1*_]_^1*_2B. C1827 - ENTERED BY THE INTERRUPT_^1*_5PROCESSOR WHENEVER AN INTERRUPT OCCURS._^1*_]€€_^1*_2C. E1827 - TIME OUT ADDRESS, ENTERED_^1*_5WHEN DIAGNOSTIC CLOCK COUNTER BECOMES_^1*_5NEGATIVE_^1*_]_^1*_2EXIT_!-_^1*_2A. EXITS TO CALLING ROUTINE (DRIVER)_^1*_5ON:_^1*_(ELSE)_^1*_>ENDIF_^1*_;(ELSE)_^1*_;ENDIF_^1*_8(ELSE)_^1*_8ENDIF_^1CKST40 INQ BADST_^1_%TRQ A_,BAD STATUS FAULT CODE_^1_%JMP* FCARDR_^1_%SPC 2_^1STATNO BSS STATNO_'STATUS €€NUMBER (0-INIT, 2-CONT)_^1SELMSK ADC SLMSK1,SLMSK2,SLMSK3,SLMSK4_^1*_*INIT,EOP,TIME OUT,DATA_^1BITS_!ADC BITS1,BITS2,BITS3,BITS4_^1*_*INIT,EOP,TIME OUT,DATA_^1ZERO_!EQU ZERO(SELMSK+2)_^1_%EJT 0_^1*_]_^1*_$*****************************************************_^1*_:INPUT DATA_^1*_:**********_^1*_$*****************************************************_^1*_]_^1INPDAT NUM $FFFF_^1_%€€RAO- COLNUM,I_(BUMP COLUMN COUNTER_^1_%SFZ- SINTER,EOPBIT,ONEBIT,I_^1*_8MASK RAW STATUS 1 FOR EOP_^1_%JMP* INPD10_'IF NO EOP, THEN_^1_%LDQ- EWES,I_^1_%INQ -1_^1_%INP REJECT-*_(READ CARD COLUMN (A/Q)_^1_%LDQ- LWA,I_^1_%TCQ Q_^1_%ADQ- FWA,I_^1_%SQP INPD05_*IF FWA.LT.LWA, THEN_^1_%LDQ- FWA,I_^1_%STA* (ZERO),Q_+SAVE DATA IN CURRENT ADDRESS_^1_%RAO- FWA,I_.BUMP FWA_^1INPD05 CLR A_^€€1_%JMP* INPD20_^1*_;(ELSE)_^1*_;ENDIF_^1*_8ELSE_^1INPD10 ENA -1_+(EOP)_^1*_8ENDIF_^1INPD20 JMP* (INPDAT)_$RETURN_^1_%EJT 0_^1*_$*****************************************************_^1*_3LOOK FOR GHOST INTERRUPTS_^1*_3*************************_^1*_$*****************************************************_^1*_]_^1CKGINT NUM $FFFF_(CHECK FOR GHOST INTERRUPT_^1_%LDA- EREQST,I_^1_%SAM €€ CKGI10_'IF NO ACTIVE REQUEST, THEN_^1_%RAO- GHOSTI,I_$BUMP GHOST COUNT_^1_%ENA CLRINT_'CLEAR INTERRUPTS_^1_%OUT 1_,CAN NOT LOOK FOR REJECTS SINCE_^1*_8INFINITE LOOP COULD OCCUR_^1_%NOP_]_^1*_$RTJ CGHOST_*CHECK FOR CONSTANT INTERRUPT_^1*_;CGHOST EXITS TO DISPATCHER_^1*_8(ELSE)_^1*_8ENDIF_^1CKGI10 JMP* (CKGINT)_$RETURN_^1_%SPC 5_^1*_$*********************************************€€********_^1*_ 12, WE WILL USE 1_^1_(SAP_!*+2_^1_(ENQ_!1_1DONE_^1_(INQ_!$3F_/ADJUST FOR CYBER 18 VALUE_^1_(STQ* CHB,I_-SAVE_^1_(JMP* GOTCC_-WE HAVE CHANNEL CC_^1*_]_^1LN_%ENA_!3_1MASK FOR NO. OF LINES_^1_(LAQ_!A_1TO A_^1_(ADD* LNB,I_-ADD TO ANY PREVIOUS RESIDUAL_^1_(STA* LNB,I_-WE HAVE LINE CC_^1*_]_^1GOTCC_"ALF_!0,0_^1_(LDA* CHB_/IF CHAN. BEFORE IS THERE, USE IT_^1_(€€SAN_!STCC_.ELSE CONTINUE SEARCH_^1_(LDA* LNB_/IF LINE BEFORE IS THERE, USE IT_^1_(SAN_!STCC_.ELSE INSERT THE VALUE 1_^1_(ENA_!1_1DONE_^1*_]_^1STCC_#STA* CC_0OUR CHOSEN CC_^1*_]_^1CLL_$ALF_!0,0_^1_(LDA_!=N0_/GET CC VALUE_^1CC_%EQU_!CC(*-1)_^1_(TRA_!Q_1TO Q_^1_(INQ_!-$40_.IF > OR = $40, THEN CLEAR CC_^1_(SQP_!LL_0USE THIS VALUE, AND GO PRINT_^1_(TRA_!Q_1ORIGINAL CC_^1_(INQ_!-3_0IF €€< OR = 3, USE THIS VALUE, CLEAR_^1_(SQM_!LL_0CC AND GO PRINT_^1_(ENA_!3_13 IS THE MAX_^1_(JMP* LPRT02_,LEAVE RESIDUAL IN CC_^1*_]_^1LL_%CLR_!Q_1CLEAR Q_^1*_]_^1LPRT02_!ALF_!0,0_^1_(STQ* CC_0SAVE RESIDUAL VALUE FOR NEXT TIME IN_^1_(LDQ* APPDT_-GET PPDT ADDR._^1_(STA- 2,Q_/SAVE NEW CC IN WORD 2_^1_(LDQ_!=N0_^1TANKAD_!EQU_!TANKAD(*-1)_^1_(LDA_!=XPPDT_,GET PPDT ADDRESS_^1APPDT_"EQU€€_!APPDT(*-1)_^1_(STA- I_^1_(CLR_!A_1RESET REQUEST STATUS_^1_(STA- EREQST,I_^1_(STQ- (ZERO),I_*SAVE TANK ADDRESS_^1_(TRQ_!A_1SET FIRST WORD ADDRESS_^1_(INA_!TKDAT_^1_(STA- ECCOR,I_+DONE_^1_(LDA- TKCT,Q_,SET LAST WORD ADDRESS + 1_^1_(INA_!1_^1_(ARS_!1_^1_(ADD- ECCOR,I_^1_(STA- ELSTWD,I_*DONE_^1_(RAO* BPRT_.MARK DRIVER BUSY_^1_(LDA- LP1WES_,ADJUST MASK REGISTER_^1_(STA* PWES€€_.HARDWARE ADDRESS IN PPDT_^1_(RTJ_!CLRMK_^1_(LDA- LP1MSK_,COMPLETE THE INTERRUPT VECTOR_^1_(STA+ $102,Q_^1_(LDA_!=XXPINT_^1_(STA+ $103,Q_,DONE_^1_(RTJ_!XK1827_,INITIATE PRINT OPERATION_^1_(LDA- LP1WES_,GO SET BIT IN_^1_(RTJ_!SETMK_-THE MASK REGISTER_^1_(JMP_!(LPRT)_,EXIT_^1_(SPC_!2_^1*_]_^1CARRY_"ALF_!0,0_^1_(LDA_!=XCCTANK_*USE DUMMY CARR. CONT. TANK_^1ACCTNK_!EQU_!ACCTNK(*-1)€€_^1_(STA* TANKAD_^1_(JMP* CLL_/CONTINUE CARR. CONT. PROCESSING_^1_(SPC_!2_^1*_]_^1DTANK_"NUM_!0,$A094,0_^1CCTANK_!NUM_!0,$9481,2_^1_(ALF_!Z, Z_^1LNB_$ADC_!1_1SKIP LINE COUNT BEFORE PRINT_^1LNA_$ADC_!1_1SKIP LINE COUNT AFTER PRINT_^1CHB_$ADC_!0_1CHANNEL SKIP BEFORE PRINT_^1CHA_$ADC_!0_1CHANNEL SKIP AFTER PRINT_^1_(SPC_!3_^1LPNR_#NUM_!0,0_^1_(ADC_!2*LPNRD_^1_(ALF_!Z,***LINE PRINTE€€R NOT READY***Z_^1LPNRD_"EQU_!LPNRD(*-LPNR-3)_^1_(SPC_!3_^1*********_]_^1*_-XPINT -- LINE PRINTER INTERRUPT PROCESSOR_^1*********_]_^1_(SPC_!3_^1XPINT_"ALF_!0,0_^1_(LDA_!BPRT_.IF LPRT IS NOT BUSY_^1_(SAN_!XOK_^1_(LDQ- LP1WES_,THEN RESET AND IGNORE THE INTERRUPT_^1_(ENA_!1_^1_(OUT_!1_^1_(NOP_!0_^1_(JMP- (AXCOUT)_*TO COMMON INTERRUPT EXIT_^1*_]_^1XOK_$ALF_!0,0_^1_(LDQ* APPDT_-GET €€ADDRESS OF PPDT_^1_(RTJ_!XS1827_,TO CONTINUATOR_^1_(CLR_!A_1MARK DRIVER NOT BUSY_^1_(STA_!BPRT_^1_(LDA- EREQST,I_*IF THERE WAS A HARDWARE ERROR_^1_(AND- X4000_^1_(SAN_!PERR_.THEN SKIP TO PERR_^1_(LDQ- (ZERO),I_*ELSE FREE THE TANK JUST USED_^1_(TRQ_!A_1DO NOT FREE THE DUMMY CC TANK_^1_(SUB* ACCTNK_^1_(SAN_!*+2_^1_(JMP- (AXCOUT)_*TO COMMON INTERRUPT EXIT_^1_(IIN_!0_^1_(RTJ_!FPTA€€NK_,DONE_^1_(JMP- (AXCOUT)_*TO INTERRUPT COMMON EXIT_^1_(SPC_!3_^1*_]_^1PERR_#ALF_!0,0_^1_(LDA_!=XPRERR_+ADDRESS OF ERROR MESSAGE_^1_(IIN_!0_^1_(RTJ_!TOCNQ_-ENQUEUE IT ON CN QUEUE_^1_(LDQ- (ZERO),I_*PLACE TANK BACK AT TOP OF PR QUEUE_^1_(IIN_!0_^1_(LDA_!PRQ_^1_(STA- (ZERO),Q_^1_(STQ_!PRQ_^1_(CLR_!A_^1_(STA* CC_0START AFRESH_^1_(EIN_!0_1DONE_^1_(JMP- (AXCOUT)_*TO COMMON INTERRU€€PT EXIT_^1_(SPC_!3_^1*_]_^1PRERR_"ALF_!0,0_^1_(NUM_!0_^1_(NUM_!0_^1_(ADC_!2*PREND_^1_(ALF_!Z,***LP ERR -- CHECK PRINTER***Z_^1PREND_"EQU_!PREND(*-PRERR-3)_^1_(SPC_!3_^1*_]_^1PPDT_#BZS_!PPDT(33)_^1_(ORG_!PPDT+1_^1_(ADC_!XK1827_^1_(ADC_!XS1827_^1_(ADC_!XE1827_^1_(NUM_!-1,9,0,$0201_^1PWES_#EQU_!PWES(*-1)_^1_(ORG_!*+11_^1_(NUM_!4,1_^1_(ORG_!*+3_^1_(NUM_!12_^1_(ORG_!*+3_^1_(NUM_!136,0,6€0_^1_(ORG*_^1_(END_^__PRDCRQ CSY/ Px1_(NAM_!RDCRQ_^1_(ENT_!RDCRQ_^1_(EXT_!CRQ,FRTANK,BRDR_^1ZERO_#EQU_!ZERO($22)_^1RDCRQ_"0_#0_^1_(IIN_!0_^1_(LDQ_!CRQ_^1_(SQN_!*+3_^1_(EIN_!0_^1_(JMP* (RDCRQ)_^1_(LDA- (ZERO),Q_^1_(STA_!CRQ_^1_(EIN_!0_^1_(LDA- 1,Q_^1_(AND_!=N$FF00_^1_(SUB_!=N$A000_^1_(SAN_!XON_^1_(CLR_!A_^1_(STA_!BRDR_^1*_]_^1XON_$ALF_!0,0_^1_(IIN_!0_^1_(TRQ_!A_^1_(RTJ_!FRTANK_^1_(JMP* (RDCRQ)_^1_(END_^__ xPCRDR CSY/ P€1_(NAM_!CRDR_^1_(ENT_!CRDR_^1_(ENT_!BRDR_^1_(ENT_!CARD,ERDR_^1_(ENT_!SRDR,DTANK_^1_(EXT_!XRDR,TOCMQ,GRTANK,FRTANK,TOCNQ_^1_(EXT_!XK1829,XC1829,XE1829_^1_(EXT_!SETMK,CLRMK_^1_(EXT_!XCARD_^1_(SPC_!3_^1*********_]_^1*_-CRDR -- CARD READER DRIVER_^1*********_]_^1_(SPC_!3_^1************************************************************************_^1***************************************€€*********************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1X200_#EQU_!X200($2C)_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1AXCOUT_!EQU_!AXCOUT($7A)_^1CR1WES_!EQU_!CR1WES($7C)_^1CR1MSK_!EQU_!CR1MSK($7D)_^1_(SPC_!3_^1****************************************€€********************************_^1************************************************************************_^1*********_]_^1*_-TANK BUFFER CONTROL TABLE EQUATES (TK)_^1*********_]_^1TKBCT_"EQU_!TKBCT(0)_*TANK BUFFER CONTROL TABLE_^1TKBCH_"EQU_!TKBCH(0)_*BUFFER CHAIN POINTER_^1TKRCBH_!EQU_!TKRCBH(1)_)RECORD CONTROL BYTE(HIGH BYTE)_^1TKSRCL_!EQU_!TKSRCL(1)_)SUB-RECORD CONTROL BYTE (L€€OW BYTE)_^1TKCT_#EQU_!TKCT(2)_+NUMBER OF CHARACTERS INBUFFER_^1TKDAT_"EQU_!TKDAT(3)_*TANK DATA_^1************************************************************************_^1************************************************************************_^1_(SPC_!3_^1CRDR_#0_#0_^1_(LDQ- CR1WES_,IF CARD READER NOT READY_^1_(INP_!*+1-*_-THEN INFORM OPERATOR THE FIRST TIME_^1_(NOP_!0_1THROUGH.€€_^1_(AND- X200_.ELSE CONTINUE_^1_(SAZ_!CRDY_.TO CRDY IF READY_^1*_]_^1CMSSW_"JMP* *+2_/FIRST PASS SWITCH_^1_(ADC* CCMSSW_^1_(LDA_!=XCRNR_,GO ENQUE MESSAGE TO OPERATOR_^1_(IIN_!0_^1_(RTJ_!TOCNQ_-DONE_^1_(LDA_!=N$1800_+FLIP FIRST PASS SWITCH_^1X1800_"EQU_!X1800(*-1)_^1_(STA* CMSSW_^1*_]_^1CCMSSW_!ALF_!0,0_^1_(JMP* (CRDR)_,EXIT_^1_(SPC_!2_^1*_]_^1CRDY_#ALF_!0,0_^1_(LDA_!=N$1802_+€€CARD READER IS READY_^1_(STA* CMSSW_-SO RESET CMSSW FIRST PASS SWITCH_^1_(SPC_!3_^1*********_]_^1*_-REQSW -- REQUEST PERMISSION FROM HASP TO START CARD READR_^1*********_]_^1_(SPC_!2_^1REQSW_"JMP* *+2_/START READER SWITCH ON_^1_(ADC* CREQSW_^1_(LDA* X1800_-TURN OFF START READER SWITCH_^1_(STA* REQSW_-DONE_^1_(LDA_!=XSRDR_,REQUEST TO START READER FROM HASP_^1_(IIN_!0_^1_(RTJ_!T€€OCMQ_-TO COMPRESSION QUEUE_^1_(RAO* BRDR_.MARK CARD READER BUSY UNTIL PERMISSION_^1*_@IS GRANTED FROM HASP TO PROCEED._^1*_]_^1CREQSW_!ALF_!0,0_^1_(LDA_!=N0_/IF ERROR FLAG IS SET_^1ERDR_#EQU_!ERDR(*-1)_^1_(SAZ_!*+2_^1_(JMP* (CRDR)_,THEN EXIT IMMEDIATELY_^1_(LDA_!=N0_/IF DRIVER IS BUSY_^1BRDR_#EQU_!BRDR(*-1)_^1_(SAZ_!*+2_^1_(JMP* (CRDR)_,THEN EXIT IMMEDIATELY_^1*_]_^1NEXTR_"ALF_!€€0,0_^1_(IIN_!0_1GET A CR TANK_^1_(RTJ_!GRTANK_^1_(SQN_!*+2_/IF NONE AVAILABLE_^1_(JMP* (CRDR)_,THEN EXIT IMMEDIATELY_^1_(LDA_!=XRPDT_,GET ADDRESS OF RPDT_^1ARPDT_"EQU_!ARPDT(*-1)_^1_(STA- I_1TO I_^1_(STQ- (ZERO),I_*SAVE TANK ADDRESS_^1_(INQ_!TKDAT_^1_(STQ- BUFR,I_,SAVE BUFFER ADDRESS_^1_(STQ- FWA,I_-FIRST WORD ADDRESS (RAW)_^1_(STQ- ECCOR,I_+FIRST WORD ADDRESS (ASCII)_^1_(ENA€€_!80_^1_(AAQ_!A_^1_(STA- LWA,I_-LAST WORD ADDRESS + 1 (RAW)_^1_(ENA_!40_^1_(AAQ_!A_^1_(STA- ELSTWD,I_*LAST WORD ADDRESS + 1 (ASCII)_^1_(CLR_!A_1RESET CYCLE FOR ODD COLUMN_^1_(STA- CYCLE,I_^1_(STA- EREQST,I_*CLEAR ERROR FLAGS_^1_(RAO* BRDR_.MARK DRIVER BUSY_^1_(LDA- CR1WES_,ADJUST MASK REGISTER_^1_(STA* RWES_.HARDWARE ADDRESS IN RPDT_^1_(RTJ_!CLRMK_^1_(LDA- CR1MSK_,COMPLETE €€THE INTERRUPT VECTOR_^1_(STA+ $102,Q_^1_(LDA_!=XXRINT_^1_(STA+ $103,Q_,DONE_^1_(LDA* X1800_-TURN OFF INTERRUPT BYPASS SWITCH_^1_(STA* INTSW_-DONE_^1_(RTJ_!XK1829_,TO INITIATOR_^1_(LDA- CR1WES_,GO SET BIT_^1_(RTJ_!SETMK_-IN MASK REGISTER_^1_(JMP* (CRDR)_,EXIT_^1_(SPC_!2_^1*_]_^1CRNR_#NUM_!0,0_^1_(ADC_!2*CRNRD_^1_(ALF_!Z,***CARD READER NOT READY***Z_^1CRNRD_"EQU_!CRNRD(*-CRNR-3€€)_^1_(SPC_!3_^1*_]_^1RPDT_#BZS_!RPDT(44)_^1_(ORG_!RPDT+1_^1_(ADC_!XK1829_^1_(ADC_!XC1829_^1_(ADC_!XE1829_^1_(NUM_!-1,10,0,$581,$1BF2_^1RWES_#EQU_!RWES(*-2)_^1_(ORG_!*+10_^1_(NUM_!11,1_^1_(ORG_!*+21_^1_(NUM_!$000F_^1_(ORG*_^1_(SPC_!3_^1*********_]_^1*_-XRINT -- CARD READER INTERRUPT PROCESSOR_^1*********_]_^1_(SPC_!3_^1XRINT_"ALF_!0,0_^1_(SPC_!3_^1*********_]_^1*_-INTSW -- INTERRUPT€€ BYPASS SWITCH_^1*********_]_^1_(SPC_!2_^1INTSW_"JMP_!CINTSW_,INTERRUPT BYPASS SWITCH OFF_^1_(LDQ- CR1WES_,THEN RESET AND IGNORE THE INTERRUPT_^1_(ENA_!1_^1_(OUT_!1_^1_(NOP_!0_^1_(JMP- (AXCOUT)_*TO COMMON INTERRUPT EXIT_^1*_]_^1CINTSW_!ALF_!0,0_^1_(LDQ* ARPDT_-ADDRESS OF RPDT_^1_(RTJ_!XC1829_,TO CONTINUATOR_^1_(JMP- (AXCOUT)_*TO COMMON INTERRUPT EXIT_^1_(LDA_!=N$5400_+ACTIVATE €€CARD COMMUTATOR ENTRY_^1_(STA_!XCARD_-DONE_^1_(LDA_!=N$1802_+TURN ON INTERRUPT BYPASS SWITCH_^1X1802_"EQU_!X1802(*-1)_^1_(STA* INTSW_-DONE_^1_(JMP- (AXCOUT)_*TO COMMON INTERRUPT EXIT_^1_(EJT_^1_(SPC_!2_^1*_]_^1*_;FUNCTION_^1*_;--------_^1*_]_^1*_$CONVERTS RAW DATA READ BY THE CARD READER KERNEL TO ASCII_^1*_]_^1*_6GENERAL DESCRIPTION_^1*_6-------------------_^1*_]_^1*_$1. ASCII_^€€1*_(A. READS CARD DATA_^1*_(B. CALLS CONVRT TO CONVERT THE DATA TO ASCII_^1*_(C. PACKS THE RESULTS INTO A BUFFER_^1*_$2. CONVRT_^1*_(A. LOOKS FOR END OF FILE_^1*_(B. CHECKS FOR ILLEGAL MULTIPUNCHES_^1*_(C. DETERMINES ORDINAL IN CONVERSION TABLE FOR DATA_^1*_(D. SELECTS APPROPRIATE CHARACTER IN CONVERSION TABLE ENTRY_^1*_$3. EOFCHK_^1*_(A. CHECKS COLUMN 1 FOR END OF FILE PUNCHES_^1*€€_(B. DETERMINES RETURN ADDRESS BASED UPON EOF FOUND OR NOT_^1_%EJT 0_^1****_]_^1*E_]_^1*_]_^1*_]_^1*__^1*_'10_(0-1_%/_%0-_%0_^1*_'11_(0-3_%T_%0-2_$S_^1*_'12_(0-5_%V_%0-4_$U_^1*_'13_(0-7_%X_%0-6_$W_^1*_'14_(0-9_%Z_%0-8_$Y_^1*_'15_%0-8-3_%,_#0-8-2_$\_^1*_'16_%0-8-5_%%_#0-8-4_$(_^1*_'17_%0-8-7_%@_#0-8-6_$_ _^1*_'20_'11-1_%J_$11-_%-_^1*_'21_'11-3_%L_$11-2_$K_^1*_'22_'11-5_%N_$11-4_$M_^1*_'23_'11-7_%P_$11-6_$O_^1*_'24_'11-9_%R_$11-8_$Q_^1*_'25_$11-8-3_%$_"11-8-2_$]_^1*_'26_$11-8-5_%€€!_"11-8-4_$*_^1*_'27_$11-8-7_%^_"11-8-6_$;_^1*_'30_'12-1_%A_$12-_%+_^1*_'31_'12-3_%C_$12-2_$B_^1*_'32_'12-5_%E_$12-4_$D_^1*_'33_'12-7_%G_$12-6_$F_^1*_'34_'12-9_%I_$12-8_$H_^1*_'35_$12-8-3_%._"12-8-2_$?_^1*_'36_$12-8-5_%[_"12-8-4_$)_^1*_'37_$12-8-7_%#_"12-8-6_$<_^1****_]_^1_%EJT 0_^1_%EXT* XFAULTN_%DETERMINE FAULT CODE FROM STATUS_^1****_]_^1_%EJT 0_^1****_]_^1*E_]_^1*_]_^1*_7EQUA€€TE REFERENCES_^1*_7*****************_^1*_]_^1*_]_^1*_$CONVERSION EQUATES:_^1*_]_^1_%EQU COMBN8($10)_!COMBINATION OF 8 PUNCH WITH OTHER PUNCH_^1_%EQU LCHAR(1)_$LEFT CHARACTER POSITION IN TABLE LOOK UP_^1_%EQU ORD0(0)_%RELATIVE ORDINAL OFFSET POSITION FOR WORD 0_^1_%EQU ORD1(2)_%RELATIVE ORDINAL OFFSET POSITION FOR WORD 1_^1_%EQU ORD2(4)_%RELATIVE ORDINAL OFFSET POSITION FOR WOR€€D 2_^1_%EQU ORD3(6)_%RELATIVE ORDINAL OFFSET POSITION FOR WORD 3_^1_%EQU ORD4(8)_%RELATIVE ORDINAL OFFSET POSITION FOR WORD 4_^1_%EQU OVRFLO($40)_!OVERFLOW INDICATOR IN COMBINATION ZONE PUNCHES_^1_%EQU OVRFLW($60)_!OVERFLOW INDICATOR IN COMBINATION PUNCHES_^1_%EQU RCHAR(0)_$RIGHT CHARACTER POSITION IN TABLE LOOK UP_^1_%EQU ZONE0($10)_"BASE OFFSET FOR ZONE PUNCH ROW 10_^1_%EQU€€ ZONE11($20)_!BASE OFFSET FOR ZONE PUNCH ROW 11_^1_%EQU ZONE12($30)_!BASE OFFSET FOR ZONE PUNCH ROW 12_^1*_]_^1*_$LOW CORE CONSTANTS:_^1*_]_^1_%EQU ADISP($EA)_"DISPATCHER ADDRESS_^1_%EQU AMONI($F4)_"MONITOR ADDRESS_^1_%EQU LMASK($13)_"MASK OF ZERO BITS RIGHT JUSTIFIED_^1_%EQU MASK($3)_$MASK OF ONE BITS RIGHT JUSTIFIED_^1_%EQU ONEBIT($23)_!ONE BIT MASK_^1_%EQU ZERBIT($33)_!Z€€ERO BIT MASK_^1_%EQU ZERO($22)_#REFERENCE TO ZERO WORD_^1*_]_^1*_$MISCELLANEOUS EQUATES:_^1*_]_^1_%EQU BADST(1)_$PSEUDO FAULT CODE OFFSET_^1_%EQU CONTST(1)_#CONTINUATION STATUS_^1_%EQU EOFBIT(5)_#7/9 PUNCHES FOR COLUMN 1_^1_%EQU MOTOPT(4)_#OFFSET TO MOTION OPTIONS WORD_^1_%EQU NOTUSE(0)_#NOT USED_^1*_]_^1*_$OPTION SELECTION BIT EQUATES:_^1*_]_^1_%EQU BINASC(8)_#ASCII REQUEST€€ BIT_^1_%EQU FORMTD(2)_#FORMATTED REQUEST BIT_^1_%EQU ORIDE($40)_"OVERRIDE CHECKSUM BIT_^1****_]_^1_%EJT 0_^1****_]_^1*E_]_^1*_]_^1*_]_^1*_5STATUS BIT POSITION_^1*_5*******************_^1*_]_^1*_$COMBINED STATUS - ESTAT2 :_^1*_]_^1_%EQU READY(1)_$00 READY_^1_%EQU BUSY(2)_%01 BUSY_^1_%EQU INTRPT(4)_#02 INTERRUPT_^1_%EQU DATAV(8)_$03 DATA_^1_%EQU EOP($10)_$04 EOP_^1_%EQU€€ ALARM($20)_"05 ALARM_^1_%EQU LOSTDT($40)_!06 LOST DATA_^1_%EQU PROTCT($80)_!07 PROTECTED_^1_%EQU NREADY($200) 09 NOT READY_^1_%EQU ADT($400)_#10 ADT MODE_^1_%EQU ENDFIL($800) 11 EOF_^1_%EQU HOPPER($1000) 12 HOPPER EMPTY_^1_%EQU STACK($2000) 13 STACKER FULL_^1_%EQU FLFEED($4000) 14 FAILED TO FEED_^1_%EQU JAM($0000)_"15 STACKER JAM + $8000_^1*_]_^1*_$STATUS BI€€T POSTION :_^1*_]_^1_%EQU BREADY(0)_#READY BIT_^1_%EQU BBUSY(1)_$BUSY BIT_^1_%EQU BINTPT(2)_#INTERRUPT BIT_^1_%EQU BDATA(3)_$DATA BIT_^1_%EQU BEOP(4)_%COP BIT_^1_%EQU BALARM(5)_#ALARM BIT_^1_%EQU BLOSTD(6)_#LOST DATA BIT_^1_%EQU BPROT(7)_$PROTECTED_^1_%EQU BNREDY(9)_#NOT READY BIT_^1_%EQU BADT(10)_$ADT BIT_^1_%EQU BEOF(11)_$EOF BIT_^1_%EQU BHOPER(12)_"HOPPER EMPTY BIT_^€€1_%EQU BSTACK(13)_"STACKER FULL BIT_^1_%EQU BFLFED(14)_"FAIL TO FEED BIT_^1_%EQU BJAM(15)_$STACKER JAM BIT_^1****_]_^1_%EJT 0_^1****_]_^1*E_]_^1*_]_^1*_$FAULT CODES:_^1*_]_^1_%EQU CKSMER(4)_#FAULT CODE FOR CHECKSUM ERROR_^1_%EQU LENGER(10)_"FAULT CODE FOR POSITIVE BINARY LENGTH_^1_%EQU NO79ER(12)_"FAULT CODE FOR NO 7/9 PUNCH IN COLUMN 1_^1_%EQU PUNCH(8)_$HOLLERITH ERROR, CA€€RD PUNCHED WRONG_^1_%EQU SEQERR(9)_#FAULT CODE FOR SEQUENCE ERROR_^1*_]_^1*_$STATUS FAULT CODES :_^1*_]_^1_%EQU FCLOST(1)_#LOST DATA FAULT CODE_^1_%EQU FCALRM(2)_#ALARM FAULT CODE_^1_%EQU FCNRDY(14)_"NOT READY FAULT CODE_^1_%EQU FCSTCK(22)_"STACKER FULL FAULT CODE_^1_%EQU FCHOPR(23)_"HOPPER EMPTY FAULT CODE_^1_%EQU FCFEED(24)_"FALL TO FEED FAULT CODE_^1_%EQU FCJAM(25)_#STAC€€KER JAM FAULT CODE_^1_%EQU FCDATA(34)_"DATA, EXPECTED EOP_^1_%EQU FCEOP(35)_#EOP, EXPECTED NO EOP BEFORE EOP_^1_%EQU FCNEOP(53)_"NO EOP, EXPECTED EOP_^1_%EQU FCNDAT(54)_"NO DATA, EXPECTED DATA BEFORE EOP_^1_%EQU FCINT(61)_#INTERRUPT FAULT CODE_^1_%EQU FCADT(62)_#ADT FAULT CODE_^1_%EQU FCBUSY(63)_"BUSY, EXPECTED NOT BUSY AT EOP_^1_%EQU FCNBSY(64)_"NOT BUSY, EXPECTED BUSY BEF€€ORE EOP_^1_%EQU FCEOF(NOTUSE) EOF FAULT CODE_^1_%EQU FCPROT(NOTUSE) PROTECTED FAULT CODE_^1*_]_^1*_$SELECTIVE STATUS BIT MASK:_^1*_]_^1_%EQU SLMSK1(NREADY+READY)_^1*_8INITIAL STATUS SELECTED BITS_^1_%EQU STAT1(ADT+NREADY+LOSTDT+ALARM+EOP+DATAV+INTRPT+BUSY+READY)_^1_%EQU STAT2(JAM+FLFEED+STACK+HOPPER)_^1_%EQU SLMSK2(STAT2+STAT1)_^1*_8DATA OR EOP SELECTED BITS_^1*_]_^1*_$EXPECT€€ED STATUS:_^1*_]_^1_%EQU BITS1(READY)_^1*_8INITIAL STATUS_^1_%EQU BITS2(EOP+INTRPT+READY)_^1*_8EOP CONDITION_^1_%EQU BITS3(DATAV+INTRPT+BUSY+READY)_^1*_8DATA CONDITION_^1****_]_^1_(EJT_^1*********_]_^1*_-CARD -- TRANSLATE CARD JUST READ FROM RAW BINARY TO ASCII_^1*********_]_^1_(SPC_!2_^1CARD_#0_#0_^1_(LDA* X1802_-DE-ACTIVATE CARD COMMUTATOR ENTRY_^1_(STA_!XCARD_-DONE_^1_(LDA* €€ ARPDT_-GET RPDT ADDRESS_^1_(STA- I_1TO I_^1_%LDA- EREQST,I_$ERROR FLAG (0= READ OK, 0# BAD READ)_^1_%AND- ONEBIT+14_^1_%SAZ DAT10_(NO ERROR_^1_%RTJ FAULTC_'DETERMINE STATUS FAULT CODE_^1DAT05 JMP ERROR_((ERROR EXIT)_^1DAT10_"ALF_!0,0_^1_%EJT 0_^1*_.*********************************_^1*_.* HOLLERITH TO ASCII CONVERSION *_^1*_.*********************************_^1*_]_^1_(LDA- €€BUFR,I_,GET RAW DATA BUFFER ADDRESS_^1ASC20 STA- FWA,I_^1_%TRA Q_^1_%SUB- LWA,I_^1_%SAM ASC40_(UNPROCESS DATA REMAINS_^1*_$ENA FORMTD_^1*_$AND- ESTAT1,I_^1*_$SAN ASC30_(FORMATED READ (MAX 1 CARD PER REQUEST)_^1*_$JMP* ASC10_(WORDS PER REQUEST > 40_^1*ASC30 JMP* ASC70_(DONE_^1_(JMP* ASC70_-DONE_^1ASC40 LDQ- (ZERO),Q_$PICK UP COLUMN OF DATA_^1_%RTJ* CONVRT_^1_%LDQ- CYCLE,I_^1€€_%SQN ASC50_(EVEN NUMBER COLUMNS_^1_%ALS 8_^1_%EOR- MASK+7_'FILL WITH ONES FOR ZERO WORD REQUEST_^1_%LDQ- ECCOR,I_^1_%JMP* ASC60_^1ASC50 EOR- LMASK+7_%ZERO RIGHT MASK_^1_%LDQ- ECCOR,I_^1_%AND- (ZERO),Q_^1_%RAO- ECCOR,I_%BUMP WORD TO STORE INTO_^1ASC60 STA- (ZERO),Q_^1_%LDA- ECCOR,I_^1_%SUB- ELSTWD,I_^1_%SAP ASC70_(WORD COUNT IS SATISFIED_^1_%ENA 1_^1_%SUB- CYCLE,I_%TOGGLE CYC€€LE FLAG (0 TO 1, OR 1 TO 0)_^1_%STA- CYCLE,I_^1_%LDA- FWA,I_^1_%INA 1_^1_%JMP* ASC20_(PICK UP MORE RAW DATA_^1ASC70_"ALF_!0,0_^1_(LDQ- (ZERO),I_*GET TANK ADDRESS_^1_(ENA_!80_^1*_]_^1ASCEOF_!ALF_!0,0_^1_(STA- TKCT,Q_,TANK COUNT IN CHARACTERS_^1_(LDA_!=N$9380_+RCB,SRCB_^1_(STA- TKRCBH,Q_*TO TANK_^1_(TRQ_!A_1TANK ADDRESS TO A_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!TOCMQ_-CHAIN TO€€ COMPRESSION QUEUE_^1_(CLR_!A_1MARK DRIVER NOT BUSY_^1_(STA_!BRDR_^1_(JMP_!(CARD)_,BACK TO COMMUTATOR_^1SRDR_#NUM_!0,$9093,0_^1_%EJT 0_^1*_,**************************************_^1*_,* CONVERSION TABLE ENTRY CALCULATION *_^1*_,**************************************_^1*_]_^1*_$ACCUMULATOR REGISTER -A-_^1*_$BITS 15- 7: ILLEGAL MULTIPLE PUNCH FIELD_^1*_$BITS 6- 1: OFFSET IN TABLE T€€O ASCII ENTRY_^1*_$BIT_$0: 0=RIGHT CHAR, 1=LEFT CHAR_^1*_]_^1CONVRT NUM $FFFF_(CONVERT 12 BIT H0LL. COLUMN TO ASCII_^1_%CLR A_^1_%QLS 7_^1_%SQP 1_^1_%INA OVRFLW+COMBN8+ORD0+LCHAR_/ROW 1_^1_%QLS 1_^1_%SQP 1_^1_%INA OVRFLW+ORD1+RCHAR_6ROW 2_^1_%QLS 1_^1_%SQP 1_^1_%INA OVRFLW+ORD1+LCHAR_6ROW 3_^1_%QLS 1_^1_%SQP 1_^1_%INA OVRFLW+ORD2+RCHAR_6ROW 4_^1_%QLS 1_^1_%SQP 1_^1_€€%INA OVRFLW+ORD2+LCHAR_6ROW 5_^1_%QLS 1_^1_%SQP 1_^1_%INA OVRFLW+ORD3+RCHAR_6ROW 6_^1_%QLS 1_^1_%SQP 1_^1_%INA OVRFLW+ORD3+LCHAR_6ROW 7_^1_%QLS 1_^1_%SQP 1_^1_%INA COMBN8+ORD4+RCHAR_6ROW 8_^1_%QLS 1_^1_%SQP 1_^1_%INA OVRFLW+COMBN8+ORD4+LCHAR_/ROW 9_^1_%AND =N$FF8F_%CLEAR LEGAL MULTIPLE 8+X PUNCHES OVERFLOW AREA_^1_%QLS 5_^1_%SQP 1_^1_%INA OVRFLO+ZONE12_:ROW 12_^1_%€€QLS 1_^1_%SQP 1_^1_%INA OVRFLO+ZONE11_:ROW 11_^1_%QLS 1_^1_%SQP 1_^1_%INA OVRFLO+ZONE0_;ROW 0_^1_%AND- ZERBIT+6_^1_%CLR Q_^1_%LLS 9_^1_%SQZ CON20_(NO ILLEGAL PUNCH_^1_%RTJ* EOFCHK_'SEE IF EOF CARD READ, APPLIES TO COLUMN 1 ONLY_^1_%JMP* CON10_(NO EOF_^1CON05 JMP* FB05_)EOF FOUND DURING H0LL. READ (DONE)_^1CON10 ENA PUNCH_^1CON15 JMP ERROR_((ERROR EXIT)_^1CON20 LLS 6€€_,TABLE ORDINAL_^1_%LDQ CDRD,Q_^1_%SAM 1_,UPPER CHARACTER_^1_%LLS 8_,LOWER CHARACTER_^1_%LLS 8_^1_%AND- MASK+7_^1_%JMP* (CONVRT)_$RETURN_^1_(SPC_!3_^1*_]_^1FB05_#ALF_!0,0_^1_(LDA_!=N$1802_+ACTIVATE START READER REQUEST_^1_(STA_!REQSW_-(WHEN CARD READER IS READY)_^1_(LDA_!=XDTANK_^1_(IIN_!0_^1_(RTJ_!TOCMQ_^1_(LDA_!=XCREF_^1_(IIN_!0_^1_(RTJ_!TOCNQ_^1_(JMP* CREEX_^1DTANK_"NUM_!0,€€$9380,0_^1CREF_#NUM_!0,0_^1_(ADC_!2*CREFW_^1_(ALF_!Z,***END OF FILE ON CARD READER***Z_^1CREFW_"EQU_!CREFW(*-CREF-3)_^1_%EJT 0_^1*_4*********************_^1*_4* END OF FILE CHECK *_^1*_4*********************_^1*_]_^1EOFCHK NUM $FFFF_(LOOK FOR EOF PUNCHED IN COLUMN 1_^1_(STQ* QSV_^1_%LDA- EOF,I_(COMPARE REFERENCE EOF VALUE_^1_%AND- MASK+11_^1_(LDQ- BUFR,I_,RAW DATA BUFFER ADDRES€€S_^1_(EOR- (ZERO),Q_^1_(LDQ_!=N0_^1QSV_$EQU_!QSV(*-1)_^1_%SAN EOF10_(NOT EOF_^1_%LDA- EREQST,I_^1_%AND- ZERBIT+14_#CLEAR ERROR BIT OF V FIELD_^1_%EOR- ONEBIT+14_#SET ERROR BIT OF V FIELD_^1_%STA- EREQST,I_^1_%LDA- ESTAT2,I_^1_%EOR- ONEBIT+11_#SET EOF STATUS BIT_^1_%STA- ESTAT2,I_^1_%RAO* EOFCHK_'FOUND EOF_^1EOF10 JMP* (EOFCHK)_$RETURN_^1_%EJT 0_^1*_8**************_^1*_8* ERROR €€EXIT *_^1*_8**************_^1*_]_^1ERROR STA- FLTCOD,I_$SAVE FAULT CODE_^1_%LDA- EREQST,I_^1_%AND- ZERBIT+14_#CLEAR ERROR BIT IF SET_^1_%EOR- LMASK+13_$TOGGLE BITS 14,15 TO SHOW ERROR AND FINISHED_^1_%STA- EREQST,I_^1*_$RTJ MAKEQ_(SET V FIELD_^1*_$LDA- FLTCOD,I_^1*_$LDQ- ELU,I_^1*_$QLS 6_^1*_$EAQ Q_,ADD ERROR CODE TO LOGICAL UNIT_^1*_$RTJ LOG_*LOG ERROR_^1*_$JMP ALTDEV_'TRANS€€FER TO ALTERNATE DEVICE HANDLER_^1_%SPC 5_^1*_:**********_^1*_:* RETURN *_^1*_:**********_^1*_]_^1_(LDA_!=XCRERR_+ERROR MESSAGE_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!TOCNQ_-CHAIN TO CN QUEUE_^1_(RAO_!ERDR_.SET READER ERROR FLAG_^1*_]_^1CREEX_"ALF_!0,0_^1_(CLR_!A_1MARK DRIVER NOT BUSY_^1_(STA_!BRDR_^1_(LDQ- (ZERO),I_*FREE THE TANK JUST USED_^1_(IIN_!0_^1_(RTJ_!FRTANK_,DONE_^1_(J€€MP_!(CARD)_,BACK TO COMMUTATOR_^1_(SPC_!3_^1*_]_^1CRERR_"NUM_!0,0_^1_(ADC_!2*CREND_^1_(ALF_!Z,***CR ERR -- RE-READ LAST CARD***Z_^1CREND_"EQU_!CREND(*-CRERR-3)_^1_%EJT 0_^1*_4*********************_^1*_4* STATUS FAULT CODE *_^1*_4*********************_^1*_]_^1FAULTC NUM $FFFF_^1_%LDA- FLTCOD,I_$CHECK FOR STATUS FAULT CODE_^1_%SAZ FA10_)TIME OUT_^1_%TRA Q_^1_%INQ -CONTST-BADST S€€TATUS FAULT CODE BIASED BY BADST_^1_%SQM FA30_)INITIATOR STATUS BAD_^1_%SQZ FA20_)CONTINUATOR STATUS BAD_^1FA10_!JMP* FA60_)NOT BAD STATUS_^1FA20_!LDQ- COLNUM,I_^1_%INQ -80_^1_%SQZ FA30_)EOP BAD STATUS_^1_%ENQ 1_,DATA BAD STATUS_^1FA30_!INQ CONTST_^1*_8Q = 0, INITIATOR CALL_^1*_8Q = 1, EOP_^1*_8Q = 2, DATA (COL 1-80)_^1_%LDA- ESTAT2,I_$COMBINE STATUS WORD_^1_%AND* SELMSK,Q_$S€€ELECT BITS TO BE EXAMINED_^1_%EOR* BITS,Q_'MASK BITS THAT SHOULD BE SET_^1_%STA* BADBIT_^1_(RTJ_!XFAULTN_+SEARCH FOR FAULT CODE_^1_%ADC (BADBIT-*)_^1_%ADC (TABLE-*)_^1_%LDQ- COLNUM,I_$CHECK TO SEE IF FAULTN FOUND PROPER FAULT CODE_^1_%INQ -80_^1_%SQZ FA60_)FAULT CORRECT FOR EOP CONDITION_^1_%TRA Q_,FAULT CODE FROM TABLE LOOK UP_^1_%INQ -FCBUSY_^1_%SQN FA40_^1_%ENA FCNBSY_'C€€.R. NOT BUSY_^1_%JMP* FA60_^1FA40_!INQ -FCDATA+FCBUSY_^1_%SQN FA50_^1_%ENA FCNDAT_'EXPECTED DATA BEFORE EOP_^1_%JMP* FA60_^1FA50_!INQ -FCNEOP+FCDATA_^1_%SQN FA60_^1_%ENA FCEOP_(EXPECTED NO EOP BEFORE EOP_^1FA60_!JMP* (FAULTC)_$RETURN_^1_%EJT 0_^1BADBIT BSS BADBIT_'BAD BIT STATUS INDICATOR_^1TABLE VFD X8/FCNRDY,X8/BREADY_'NOT READY_^1_%VFD X8/FCLOST,X8/BLOSTD_'LOST DATA_^€€1_%VFD X8/FCJAM,X8/BJAM_*STACKER AREA JAM_^1_%VFD X8/FCFEED,X8/BFLFED_'FEED FAILURE_^1_%VFD X8/FCSTCK,X8/BSTACK_'STACKER FULL_^1_%VFD X8/FCHOPR,X8/BHOPER_'HOPPER EMPTY_^1_%VFD X8/FCALRM,X8/BALARM_'ALARM_^1_%VFD X8/FCDATA,X8/BDATA_(DATA_^1_%VFD X8/FCNEOP,X8/BEOP_)NO EOP_^1_%VFD X8/FCBUSY,X8/BBUSY_(BUSY_^1_%VFD X8/FCINT,X8/BINTPT_(INTERRUPT_^1_%VFD X8/FCADT,X8/BADT_*ADT_^1_€€%BZS (1)_7END OF TABLE_^1SELMSK ADC SLMSK1,(SLMSK2),(SLMSK2) INIT.,EOP, DATA SELECTIVE BITS_^1*_8PLUS JAM STATUS FOR EOP AND DATA_^1BITS_!ADC BITS1,BITS2,BITS3_#INIT.,EOP, DATA EXPECTED BITS_^1_(SPC_!5_^1*********_]_^1*_-CARD READER CONVERSION TABLE FOR 029(EBCDIC) CODES_^1*********_]_^1*_]_^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_!$2421_^1_(NUM_!$292A_^1_(NUM_!$5E3B_^1_(NUM_!$4126_^1_(NUM_!$4342_^1_(NUM_!$4544_^1_(NUM_!$4746_^1_(NUM_!$4948_^1_(NUM_!$2E5B_^1_(NUM_!$283C_^1_€(NUM_!$5D2B_^1_%END_]_^__ PXFAULT CSY/ P€1_(NAM_!XFAULTN_^1*_$1829-3 CARD READER FAULT CODE ANCILLARY ROUTINE_^1*_]_^1*_;FUNCTION_^1*_;--------_^1*_$RETURNS FAULT CODE_^1*_]_^1*_]_^1*_6INPUT REQUIREMENTS_^1*_6------------------_^1*_$CALLING SEQUENCE_^1*_*INDEX = FAULTN (STATUS,TABLE)_^1*_*WHERE_^1*_-STATUS IS STATUS WORD FROM KERNEL_^1*_-TABLE IS COMPARSION FAULT TABLE_^1*_-INDEX IS ERROR INDEX_^1*_]_^1*_$FAULT TABLE - BI€€TS 15-8, FAULT CODE NUMBER_^1*_3BITS 7-0, BIT POSITION CORRESPONDING_^1*_3TO ERROR STATUS WORD._^1*_3ENTRIES ARE ORDERED TOP TO BOTTOM BY_^1*_3MOST IMPORTANT TO LEAST IMPORTANT_^1*_3FAULT CODE THAT SHOULD BE RETURNED._^1*_3TABLE ENDS WITH ZERO WORD._^1****_]_^1_(ENT_!XFAULTN_+ENTRY_^1****_]_^1_%EJT 0_^1FAULTN NUM $FFFF_(ENTRY POINT_^1XFAULTN EQU_!XFAULTN(FAULTN)_^1_%STQ* SAVEQ_€€(SAVE Q REGISTER_^1_%RTJ CRPREP_'Q8PREP CALL_^1_%ADC* FAULTN_^1_%RTJ CRPKUP_'PICK UP ADDRESS OF STATUS WORD_^1_%TRA Q_^1_%LDA* (ZERO),Q_^1_%STA* ERRWRD_'SAVE STATUS VALUE_^1_%RTJ CRPKUP_'PICK UP TABLE ADDRESS_^1_%TRA Q_^1FALT10 LDA* (ZERO),Q_$ENTRY FROM FAULT TABLE_^1_%SAZ FALT30_'DONE WITH SEARCH - NO ENTRY FOUND_^1_%AND* MASKFF_'BIT POSITION_^1_%TCA A_^1_%INA 15_+SHIFT CO€€UNT_^1_%EOR* ALS_*ALS INSTRUCTION_^1_%STA* INSTR_^1_%LDA* ERRWRD_^1INSTR ALS *-*_^1_%SAM FALT20_'EXIT ON FIRST MATCH_^1_%INQ 1_^1_%JMP* FALT10_^1FALT20 LDA* (ZERO),Q_$EXTRACT FAULT NUMBER_^1_%ALS 8_^1_%AND* MASKFF_^1FALT30 LDQ* SAVEQ_(RESTORE Q REGISTER BEFORE LEAVING_^1_%JMP* (FAULTN)_$RETURN_^1ALS_"ALS 0_,ALS REFERENCE WORD_^1ERRWRD BSS ERRWRD_'ERROR STATUS WORD_^1MASKFF N€€UM $FF_*MASK WORD_^1SAVEQ BSS SAVEQ_^1ZERO_!BZS ZERO_)ZERO_^1_(SPC_!3_^1*_]_^1CRPREP_!NUM_!$FFFF_^1_(LDA* (CRPREP)_^1_(ADD* CRPREP_^1_(AND* MASKSB_^1_(STA* ENTAD_^1_(RAO* CRPREP_^1_(JMP* (CRPREP)_^1ENTAD_"NUM_!0_^1PAD_$NUM_!0_^1MASKSB_!NUM_!$7FFF_^1CRPKUP_!NUM_!$FFFF_^1_(LDA* (ENTAD)_^1_(STA* PAD_^1_(LDA* (PAD)_^1_(SAP_!2_^1_(ADD* (ENTAD)_^1_(AND* MASKSB_^1_(RAO* (E€&NTAD)_^1_(JMP* (CRPKUP)_^1_%END_]_^__&PBUFMGR CSY/ P€1_(NAM_!BUFMGR_^1_(ENT_!TODCQ,TOMIQ,TOPRQ,TOCMQ,TOCNQ,TOCRQ_^1_(ENT_!GCNTNK,FCNTNK,GMITNK,FMITNK_^1_(ENT_!GBUFF,FBUFF_^1_(ENT_!TPUT,TGET_^1_(ENT_!GRTANK,FRTANK,GPTANK,FPTANK_^1_(ENT_!TIQ,TAQ,TOQ,TPOFF_^1_(ENT_!TPQ,TOTPQ_^1_(ENT_!CMQ,CNQ,PRQ,DCQ,MIQ,CRQ_^1_(SPC_!3_^1************************************************************************_^1*******************************************€€*****************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1ZERO_#EQU_!ZERO($22)_^1************************************************************************_^1************************************************************************_^1_(EJT_^1**********_]_^1*_-TANK BUFFER ASSEMBLY PARAMETERS_^1*_]_^1RTKSIZ_!EQU€€_!RTKSIZ(85)_(CARD READER TANK SIZE_^1PTKSIZ_!EQU_!PTKSIZ(85)_(LINE PRINTER TANK SIZE_^1CNTSIZ_!EQU_!CNTSIZ(85)_(CONSOLE OUTPUT TANK SIZE_^1MITSIZ_!EQU_!MITSIZ(85)_(CONSOLE MANUAL INPUT TANK SIZE_^1*_]_^1**********_]_^1_(EJT_^1*_]_^1*_-TANK BUFFER CONTROL TABLE EQUATES (TK)_^1*_]_^1TKBCT_"EQU_!TKBCT(0)_*TANK BUFFER CONTROL TABLE_^1TKBCH_"EQU_!TKBCH(0)_*BUFFER CHAIN POINTER_^1TKRCBH€€_!EQU_!TKRCBH(1)_)RECORD CONTROL BYTE(HIGH BYTE)_^1TKSRCL_!EQU_!TKSRCL(1)_)SUB-RECORD CONTROL BYTE (LOW BYTE)_^1TKCT_#EQU_!TKCT(2)_+NUMBER OF CHARACTERS INBUFFER_^1TKDAT_"EQU_!TKDAT(3)_*TANK DATA_^1_(EJT_^1*_]_^1*_-BUFFER CONTROL TABLE FOR TP BUFFER_^1*_]_^1BCT_$ALF_!0,0_^1_(EQU_!BCH(0)_,BUFFER CHAIN POINTER_^1_(EQU_!BFCT(1)_+NUMBER OF CHARACTERS IN BUFFER_^1_(EQU_!BS(2)_-BUFFER ST€€ATUS WORD_^1*_-STATUS WORD EQUATES_^1_(EQU_!STR(1)_,BIT 0 TRANSPARENT TEXT IN BUFFER_^1_(EQU_!SOB(2)_,BIT 1 OBJECT CODE IN TEXT_^1_(EQU_!SCS(4)_,BIT 2 CONTROL SEQUENCE ONLY IN BUFFER_^1_(EQU_!SDC(8)_,BIT 3 BUFFER MARKED FOR DECOMPRESSION_^1_(EQU_!SDM(16)_+BIT 4 DUMMY BUFFER_^1_(EQU_!SDL(32)_+BIT 5 BUFFER MARKED FOR DELETION_^1_(EJT_^1*_]_^1*_-GET TP BUFFER_^1*_]_^1*_-BUFFER BCT ADD€€RESS OR ZERO IN Q-REGISTER_^1*_]_^1*_-UPON RETURN;_^1*_]_^1GBUFF_"0_#0_^1_(CLR_!A_1RETURN ZERO IF_^1_(LDQ+ GB1_/STOP BUFFERING HAS BEEN REQUESTED_^1_(EQU_!TPOFF(*-2)_((CHANGE TO A JMP INSTRUCTION TO STOP_^1*_@BUFFERING)_^1_(LDQ* TAQ_/IF NULL QUEUE_^1_(SQZ_!GB1_/THEN SKIP FORWARD;_^1_(LDA- (ZERO),Q_*MOVE NEXT BUFFER ADDRESS_^1_(STA* TAQ_/TO TOP OF QUEUE;_^1_(CLR_!A_1SET BUFFER_^€€1_(STA- (ZERO),Q_*CHAIN AND_^1_(STA- BS,Q_.BUFFER STATUS TO ZERO;_^1*_]_^1GB1_$ALF_!0,0_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (GBUFF)_+RETURN;_^1_(EJT_^1*_]_^1*_-FREE BUFFER_^1*_]_^1*_-ADDRESS OF BUFFER BCT TO BE FREED MUST BE IN Q-REGISTER_^1*_-UPON ENTRY;_^1*_]_^1FBUFF_"0_#0_^1_(LDA* TAQ_/GET TOP-OF-QUEUE;_^1_(STQ* TAQ_/NEW TOP-OF-QUEUE IS BUFFER BCT TO BE_^1*_@FREED;_^1_(€€STA- (ZERO),Q_*OLD TOP-OF-QUEUE BECOMES CHAIN POINTER_^1*_@IN NEW TOP;_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (FBUFF)_+RETURN_^1_(SPC_!5_^1TAQ_$ADC_!0_1TP AVAILABILITY QUEUE_^1TIQ_$ADC_!0_1TP INPUT QUEUE_^1TOQ_$ADC_!0_1TP OUTPUT QUEUE_^1TPQ_$ADC_!0_1ACTIVE TP QUEUE_^1CRQ_$ADC_!0_1CARD READER QUEUE_^1PRQ_$ADC_!0_1LINE PRINTER QUEUE_^1CMQ_$ADC_!0_1COMPRESSION QUEUE_^1DCQ_$ADC_!0_1€€DECOMPRESSION QUEUE_^1MIQ_$ADC_!0_1CONSOLE MANUAL INPUT QUEUE_^1CNQ_$ADC_!0_1CONSOLE OUTPUT QUEUE_^1_(EJT_^1*_]_^1*_-CHAIN TO END OF ACTIVE TP QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER_^1*_-UPON ENTRY_^1*_]_^1TOTPQ_"0_#0_^1_(LDQ* TOTPQ_-MOVE RETURN_^1_(STQ* TPUT_.ADDRESS;_^1_(LDQ_!=XTPQ_-GET TOP OF TP QUEUE;_^1_(JMP* HP1_/GO ENQUEUE;_^1_(EJT_^1*_]_^1*_-CHAIN TO END €€OF DECOMPRESSION QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER_^1*_-UPON ENTRY_^1*_]_^1TODCQ_"0_#0_^1_(LDQ* TODCQ_-MOVE RETURN_^1_(STQ* TPUT_.ADDRESS;_^1_(LDQ_!=XDCQ_-GET TOP OF DC QUEUE_^1_(JMP* HP1_/GO ENQUEUE;_^1_(EJT_^1*_]_^1*_-CHAIN TO END OF CARD READER QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER_^1*_-UPON ENTRY_^1*_]_^1TOCRQ_"0_#0_^1_(LDQ* TOCRQ_-MOVE€€ RETURN_^1_(STQ* TPUT_.ADDRESS;_^1_(LDQ_!=XCRQ_-GET TOP OF CR QUEUE_^1_(JMP* HP1_/GO ENQUEUE;_^1_(EJT_^1*_]_^1*_-CHAIN TO END OF CONSOLE MANUAL INPUT QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER_^1*_-UPON ENTRY_^1*_]_^1TOMIQ_"0_#0_^1_(LDQ* TOMIQ_-MOVE RETURN_^1_(STQ* TPUT_.ADDRESS;_^1_(LDQ_!=XMIQ_-GET TOP OF MI QUEUE_^1_(JMP* HP1_/GO ENQUEUE;_^1_(EJT_^1*_]_^1*_-CHAIN€€ TO END OF TP OUTPUT QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER_^1*_-UPON ENTRY_^1*_]_^1TPUT_#0_#0_^1_(LDQ_!=XTOQ_-GET TOP OF TP OUTPUT QUEUE;_^1*_]_^1HP1_$ALF_!0,0_^1_(STA* SAVEA_^1*_]_^1HP2_$ALF_!0,0_^1_(LDA- (ZERO),Q_*IF AT THE END-OF-QUEUE_^1_(SAZ_!HP3_/THEN SKIP FORWARD;_^1_(LDQ- (ZERO),Q_*ELSE GET NEXT QUEUE ENTRY_^1_(JMP* HP2_/GO CHECK FOR END-OF-QUEUE;_^1*_]€€_^1HP3_$ALF_!0,0_^1_(LDA_!=N0_^1_(EQU_!SAVEA(*-1)_^1_(STA- (ZERO),Q_*ADD NEW BCT TO END-OF-QUEUE_^1_(TRA_!Q_^1_(CLR_!A_1SET BUFFER CHAIN = 0 IN NEW BCT_^1_(STA- (ZERO),Q_*TO INDICATE END-OF-QUEUE_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (TPUT)_,RETURN;_^1_(EJT_^1*_]_^1*_-CHAIN TO END OF TP INPUT QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER UPON ENTRY_^1*_]_^1TGET_#0_#0_€€^1_(LDQ* TGET_.MOVE RETURN ADDRESS_^1_(STQ* TPUT_^1_(LDQ_!=XTIQ_-GET TOP OF INPUT QUEUE_^1_(JMP* HP1_/GO ENQUEUE;_^1_(EJT_^1*_]_^1*_-CHAIN TO END OF LINE PRINTER QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER_^1*_-UPON ENTRY_^1*_]_^1TOPRQ_"0_#0_^1_(LDQ* TOPRQ_-MOVE RETURN_^1_(STQ* TPUT_.ADDRESS;_^1_(LDQ_!=XPRQ_-GET TOP OF PR QUEUE_^1_(JMP* HP1_/GO ENQUEUE;_^1_(EJT_^1*€€_]_^1*_-CHAIN TO END OF COMPRESSION QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER_^1*_-UPON ENTRY_^1*_]_^1TOCMQ_"0_#0_^1_(LDQ* TOCMQ_-MOVE RETURN_^1_(STQ* TPUT_.ADDRESS;_^1_(LDQ_!=XCMQ_-GET TOP OF CM QUEUE_^1_(JMP* HP1_/GO ENQUEUE;_^1_(EJT_^1*_]_^1*_-CHAIN TO END OF CONSOLE OUTPUT QUEUE_^1*_]_^1*_-ADDRESS OF READY BCT IS IN A-REGISTER_^1*_-UPON ENTRY_^1*_]_^1TOCNQ_"0_#0€€_^1_(LDQ* TOCNQ_-MOVE RETURN_^1_(STQ* TPUT_.ADDRESS;_^1_(LDQ_!=XCNQ_-GET TOP OF CN QUEUE_^1_(JMP* HP1_/GO ENQUEUE;_^1_(EJT_^1*_]_^1*_-GET/FREE TANK FOR CARD READER_^1*_]_^1*_-ADDRESS OF READY TANK BCT OR ZERO IN Q-REGISTER_^1*_-UPON RETURN;_^1*_]_^1GRTANK_!0_#0_^1_(LDQ* TRTAQ_-GET TOP OF TANK QUEUE;_^1_(SQZ_!GT1_/IF NULL QUEUE, THEN SKIP FORWARD;_^1_(LDA- (ZERO),Q_*PLACE NEXT €€BUFFER ADDRESS_^1_(STA* TRTAQ_-AT TOP OF AVAILABILITY QUEUE;_^1_(CLR_!A_1SET BUFFER CHAIN FIELD_^1_(STA- (ZERO),Q_*EQUAL TO ZERO BEFORE ASSIGNING BUFFER_^1*_]_^1GT1_$ALF_!0,0_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (GRTANK)_*RETURN;_^1_(SPC_!5_^1*_]_^1*_-ADDRESS OF TANK BCT TO BE FREED MUST BE IN Q-REGISTER_^1*_-UPON ENTRY_^1*_]_^1FRTANK_!0_#0_^1_(LDA* TRTAQ_-GET TOP OF TANK QU€€EUE;_^1_(STQ* TRTAQ_-NEW TOP-OF-QUEUE IS TANK TO BE FREED;_^1_(STA- (ZERO),Q_*OLD TOP-OF-QUEUE BECOMES CHAIN POINTER_^1*_@IN NEW TOP;_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (FRTANK)_*RETURN;_^1*_]_^1TRTAQ_"ADC_!RTKONE_^1_(SPC_!3_^1*_]_^1*_-TANKS AND TANK BCT'S_^1*_]_^1RTKONE_!ALF_!0,0_^1_(ADC_!*+3+RTKSIZ_^1_(BSS_!(2+RTKSIZ)_^1_(ADC_!*+3+RTKSIZ_^1_(BSS_!(2+RTKSIZ)_^1_(ADC_!0_^1_€€(BSS_!(2+RTKSIZ)_^1_(EJT_^1*_]_^1*_-GET/FREE TANK FOR CONSOLE OUTPUT_^1*_]_^1*_-ADDRESS OF READY TANK BCT OR ZERO IN Q-REGISTER_^1*_-UPON RETURN;_^1*_]_^1GCNTNK_!0_#0_^1_(LDQ* TCNTAQ_,GET TOP OF TANK QUEUE;_^1_(SQZ_!GT2_/IF NULL QUEUE, THEN SKIP FORWARD;_^1_(LDA- (ZERO),Q_*PLACE NEXT BUFFER ADDRESS_^1_(STA* TCNTAQ_,AT TOP OF AVAILABILITY QUEUE;_^1_(CLR_!A_1SET BUFFER CHAIN FIELD€€_^1_(STA- (ZERO),Q_*EQUAL TO ZERO BEFORE ASSIGNING BUFFER_^1*_]_^1GT2_$ALF_!0,0_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (GCNTNK)_*RETURN;_^1_(SPC_!5_^1*_]_^1*_-ADDRESS OF TANK BCT TO BE FREED MUST BE IN Q-REGISTER_^1*_-UPON ENTRY_^1*_]_^1FCNTNK_!0_#0_^1_(LDA* TCNTAQ_,GET TOP OF TANK QUEUE;_^1_(STQ* TCNTAQ_,NEW TOP-OF-QUEUE IS TANK TO BE FREED;_^1_(STA- (ZERO),Q_*OLD TOP-OF-QUE€€UE BECOMES CHAIN POINTER_^1*_@IN NEW TOP;_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (FCNTNK)_*RETURN;_^1*_]_^1TCNTAQ_!ADC_!CNTONE_^1_(SPC_!3_^1*_]_^1*_-TANKS AND TANK BCT'S_^1*_]_^1CNTONE_!ALF_!0,0_^1_(ADC_!*+3+CNTSIZ_^1_(BSS_!(2+CNTSIZ)_^1_(ADC_!0_^1_(BSS_!(2+CNTSIZ)_^1_(EJT_^1*_]_^1*_-GET/FREE TANK FOR MANUAL INPUT_^1*_]_^1*_-ADDRESS OF READY TANK BCT OR ZERO IN Q-REGISTER_^1*_-UP€€ON RETURN;_^1*_]_^1GMITNK_!0_#0_^1_(LDQ* TMITAQ_,GET TOP OF TANK QUEUE;_^1_(SQZ_!GT3_/IF NULL QUEUE, THEN SKIP FORWARD;_^1_(LDA- (ZERO),Q_*PLACE NEXT BUFFER ADDRESS_^1_(STA* TMITAQ_,AT TOP OF AVAILABILITY QUEUE;_^1_(CLR_!A_1SET BUFFER CHAIN FIELD_^1_(STA- (ZERO),Q_*EQUAL TO ZERO BEFORE ASSIGNING BUFFER_^1*_]_^1GT3_$ALF_!0,0_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (GMITNK)_*RET€€URN;_^1_(SPC_!5_^1*_]_^1*_-ADDRESS OF TANK BCT TO BE FREED MUST BE IN Q-REGISTER_^1*_-UPON ENTRY_^1*_]_^1FMITNK_!0_#0_^1_(LDA* TMITAQ_,GET TOP OF TANK QUEUE;_^1_(STQ* TMITAQ_,NEW TOP-OF-QUEUE IS TANK TO BE FREED;_^1_(STA- (ZERO),Q_*OLD TOP-OF-QUEUE BECOMES CHAIN POINTER_^1*_@IN NEW TOP;_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (FMITNK)_*RETURN;_^1*_]_^1TMITAQ_!ADC_!MITONE_^1_(SP€€C_!3_^1*_]_^1*_-TANKS AND TANK BCT'S_^1*_]_^1MITONE_!ALF_!0,0_^1_(ADC_!*+3+MITSIZ_^1_(BSS_!(2+MITSIZ)_^1_(ADC_!0_^1_(BSS_!(2+MITSIZ)_^1_(EJT_^1*_]_^1*_-GET/FREE TANK FOR LINE PRINTER_^1*_]_^1*_-ADDRESS OF READY TANK BCT OR ZERO IN Q-REGISTER_^1*_-UPON RETURN;_^1*_]_^1GPTANK_!0_#0_^1_(LDQ* TPTAQ_-GET TOP OF TANK QUEUE;_^1_(SQZ_!GT4_/IF NULL QUEUE, THEN SKIP FORWARD;_^1_(LDA- (ZERO€€),Q_*PLACE NEXT BUFFER ADDRESS_^1_(STA* TPTAQ_-AT TOP OF AVAILABILITY QUEUE;_^1_(CLR_!A_1SET BUFFER CHAIN FIELD_^1_(STA- (ZERO),Q_*EQUAL TO ZERO BEFORE ASSIGNING BUFFER_^1*_]_^1GT4_$ALF_!0,0_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (GPTANK)_*RETURN;_^1_(SPC_!5_^1*_]_^1*_-ADDRESS OF TANK BCT TO BE FREED MUST BE IN Q-REGISTER_^1*_-UPON ENTRY_^1*_]_^1FPTANK_!0_#0_^1_(LDA* TPTAQ_-GE€€T TOP OF TANK QUEUE;_^1_(STQ* TPTAQ_-NEW TOP-OF-QUEUE IS TANK TO BE FREED;_^1_(STA- (ZERO),Q_*OLD TOP-OF-QUEUE BECOMES CHAIN POINTER_^1*_@IN NEW TOP;_^1_(EIN_!0_1ENABLE INTERRUPTS;_^1_(JMP* (FPTANK)_*RETURN;_^1*_]_^1TPTAQ_"ADC_!PTKONE_^1_(SPC_!3_^1*_]_^1*_-TANKS AND TANK BCT'S_^1*_]_^1PTKONE_!ALF_!0,0_^1_(ADC_!*+3+PTKSIZ_^1_(BSS_!(2+PTKSIZ)_^1_(ADC_!*+3+PTKSIZ_^1_(BSS_!(2+PTKSIZ€,)_^1_(ADC_!0_^1_(BSS_!(2+PTKSIZ)_^1_(END_^__,PCOMP CSY/ P€1_(NAM_!COMP_^1_(ENT_!COMP,PREP_^1_(EXT_!XEBCDI,GBUFF_^1_(EXT_!TPUT_^1_(EXT_!MVC,MVI_^1_(SPC_!3_^1************************************************************************_^1************************************************************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1ONE_$EQU_!ONE($3)_^1X1F_$EQU_!X1F(€€$7)_^1X7F_$EQU_!X7F($9)_^1XFF_$EQU_!XFF($A)_^1XFF00_"EQU_!XFF00($1A)_^1X8000_"EQU_!X8000($21)_^1ZERO_#EQU_!ZERO($22)_^1X20_$EQU_!X20($28)_^1X40_$EQU_!X40($29)_^1X80_$EQU_!X80($2A)_^1XFFDF_"EQU_!XFFDF($38)_^1XFFBF_"EQU_!XFFBF($39)_^1*********_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1MVCA_#EQU_!MVCA($64)_)MVC FIELD A€€_^1MVCCA_"EQU_!MVCCA($65)_(CHARACTER POSITION OF FIELD A_^1MVCB_#EQU_!MVCB($66)_)MVC FIELD B_^1MVCCB_"EQU_!MVCCB($67)_(CHARACTER POSITION OF FIELD B_^1TXSTX_"EQU_!TXSTX($6D)_(TEXT MODE LEADER CONTROL SEQUENCE_^1TXETB_"EQU_!TXETB($6E)_(TEXT MODE TRAILER CONTROL SEQUENCE_^1************************************************************************_^1*************************************€€***********************************_^1_(SPC_!3_^1************************************************************************_^1************************************************************************_^1*********_]_^1*_-TANK BUFFER CONTROL TABLE EQUATES (TK)_^1*********_]_^1TKBCT_"EQU_!TKBCT(0)_*TANK BUFFER CONTROL TABLE_^1TKBCH_"EQU_!TKBCH(0)_*BUFFER CHAIN POINTER_^1TKRCBH_!EQU_!TKRCB€€H(1)_)RECORD CONTROL BYTE(HIGH BYTE)_^1TKSRCL_!EQU_!TKSRCL(1)_)SUB-RECORD CONTROL BYTE (LOW BYTE)_^1TKCT_#EQU_!TKCT(2)_+NUMBER OF CHARACTERS INBUFFER_^1TKDAT_"EQU_!TKDAT(3)_*TANK DATA_^1************************************************************************_^1************************************************************************_^1_(SPC_!3_^1*************************************€€***********************************_^1************************************************************************_^1*********_]_^1*_-TP BUFFER SIZE_^1*********_]_^1TPBSIZ_!EQU_!TPBSIZ(200)_'TP BUFFER SIZE_^1************************************************************************_^1************************************************************************_^1_(SPC_!3_^1*******************€€*****************************************************_^1************************************************************************_^1*********_]_^1*_-BUFFER CONTROL TABLE_^1*********_]_^1BCT_$ALF_!0,0_^1BCH_$EQU_!BCH(0)_,BUFFER CHAIN POINTER_^1BFCT_#EQU BFCT(1)_,NUMBER OF CHARACTERS IN BUFFER_^1BS_%EQU BS(2)_.BUFFER STATUS WORD_^1*_,STATUS WORD EQUATES_^1STR_$EQU_!STR(1)_,BIT 0 TRA€€NSPARENT TEXT IN BUFFER_^1SOB_$EQU SOB(2)_-BIT 1 OBJECT CODE IN TEXT_^1SCS_$EQU SCS(4)_-BIT 2 CONTROL SEQUENCE ONLY IN BUFFER_^1SDC_$EQU_!SDC(8)_,BIT 3 BUFFER MARKED FOR DECOMPRESSION_^1SDM_$EQU_!SDM(16)_+BIT 4 DUMMY BUFFER_^1SDL_$EQU_!SDL(32)_+BIT 5 BUFFER MARKED FOR DELETION_^1*_]_^1BDATA_"EQU_!BDATA(3)_*DATA PORTION OF BLOCK_^1*_]_^1********************************************€€****************************_^1************************************************************************_^1_(SPC_!3_^1*********_]_^1*_-COMP -- COMPRESSION ROUTINE_^1*********_]_^1*_]_^1*_-CALLING SEQUENCE_^1*_]_^1*_2(P)_#RTJ+_!COMP_#(WITH DECOMPRESSED TANK)_^1*_]_^1*_.OR (P)_#RTJ+_!PREP_#(WITH COMPRESSED TANK)_^1*_]_^1*_2(P+1)_!(RETURN HERE IF NO TP BUFFER IS AVAILABLE)_^1*_2(P+2)_€€!(NORMAL RETURN)_^1*_]_^1*_-UPON ENTRY_^1*_]_^1*_2(Q) = ADDRESS OF THE TANK TO BE COMPRESSED_^1*_]_^1*_-UPON ABNORMAL EXIT (P+1)_^1*_]_^1*_2THE INPUT TANK IS RETURNED IN COMPRESSED FORMAT._^1*_2ALL SUCCEEDING CALLS SHOULD BE MADE TO ENTRY POINT_^1*_2PREP UNTIL THE COMPRESSED TANK IS ACCEPTED._^1*_]_^1*********_]_^1COMP_#0_#0_^1_(CLR_!A_1CLEAR_^1_(STA_!EXITSW_,EXIT SWITCH_^1_(STA* €€RBIAS_-RUNNING BIAS_^1_(STA- MVCCA_-CHAR POSITION FOR FIELD A_^1_(STA- MVCCB_-CHAR POSITION FOR FIELD B_^1_(STA* EOR_/END OF RECORD INDICATOR_^1_(STQ_!INADD_-STORE TANK ADDRESS_^1_(INQ_!2_1STORE INITIAL FIELD A POINTER_^1_(STQ- MVCA_^1_(INQ_!1_1STORE INITIAL FIELD B POINTER_^1_(STQ- MVCB_^1_(STQ* STRADD_,FOR CONVERSION TO EBCDIC_^1_(INQ_!-3_0TANK ADDRESS IN Q_^1_(LDA- TKCT,Q€€_,IF THIS IS A NULL RECORD_^1_(SAN_!COM01_^1_(JMP* AD2BUF_,THEN GO ADD TO BUFFER_^1*_]_^1COM01_"INA_!1_1ELSE_^1_(ARS_!1_^1_(STA* TWCT_.SAVE TANK WORD COUNT_^1_(AAQ_!A_1ADD TANK WORD COUNT TO TANK ADDRESS_^1_(INA_!TKDAT-1_^1_(STA* INEND_-TO COMPUTE AND STORE END ADDRESS_^1_(LDA- TKCT,Q_,IF THE TANK CHARACTER COUNT_^1_(AND- ONE_/IS A WORD MULTIPLE_^1_(STA* TBIAS_-SET TANK BIAS €€TO THE ODD CHARACTER_^1_(SAZ_!OGOB_.THEN SKIP FORWARD TO OGOB_^1_(LDA* (INEND)_+ELSE PAD THE LAST WORD WITH A Z_^1_(AND- XFF00_^1_(INA_!$5A_^1_(STA* (INEND)_+DONE_^1*_]_^1OGOB_#ALF_!0,0_^1_(LDA- TKDAT,Q_^1_(ARS_!8_^1_(INA_!-2_0IF THIS IS NOT A TEXT CARD_^1_(SAN_!OGOA_.THEN GO TO OGOA_^1*********_]_^1* NOTE -- WE DO NOT SET BUFFER STATUS TO SHOW OBJECT (=2)_^1*********_]_^1*_]_^€€1_(LDA_!=N0_^1TWCT_#EQU_!TWCT(*-1)_^1_(STA* WRDS_.SET WORD COUNT TO RECORD SIZE_^1_(JMP* SKWZB_-GO MOVE RECORD TO TP BUFFER_^1*_]_^1OGOA_#ALF_!0,0_^1_(RTJ+ XEBCDI_,GO CONVERT STRING TO EBCDIC_^1STRADD_!ADC_!0_1STRING ADDRESS_^1_(ADC_!TWCT_.WORD COUNT_^1_(LDQ_!=N0_^1INEND_"EQU_!INEND(*-1)_^1_(CLR_!A_1SET END CHARACTERS_^1_(STA- 1,Q_/INTO TWO TRAILER_^1_(STA- 2,Q_/WORDS OF ZEROE€€S_^1*_]_^1OGO_$ALF_!0,0_^1_(LDQ- MVCB_.RESTORE INPUT POINTER IN Q_^1_(CLR_!A_^1_(STA* WRDS_.RESET WORD COUNT TO 0_^1*_]_^1GO1_$ALF_!0,0_^1_(LDA- 1,Q_^1_(SUB_!=N$4040_+IF LOOK AHEAD NOT BLANKS_^1BLANKS_!EQU_!BLANKS(*-1)_^1_(SAN_!SKIPUP_,THEN SKIP TO SKIPUP_^1_(LDA- (ZERO),Q_*ELSE CONTINUE_^1_(SUB- 1,Q_^1_(SAN_!*+2_/IF COMPRESSIBLE THEN BRANCH TO SKWEEZ_^1_(JMP* SKWEEZ_^1_(INQ_€€!1_1ELSE MOVE TO NEXT WORD_^1_(RAO* WRDS_^1_(JMP* GO1_^1*_]_^1SKIPUP_!ALF_!0,0_^1_(INQ_!2_1UP INPUT POINTER BY 2_^1_(RAO* WRDS_^1_(RAO* WRDS_.UP WORD COUNT BY 2_^1_(TRQ_!A_^1_(SUB* INEND_-IF THIS IS END OF INPUT_^1_(SAP_!*+2_/THEN SKIP FORWARD_^1_(JMP* GO1_/ELSE EXAMINE NEXT 2 WORDS_^1_(TCA_!A_^1_(ADD* WRDS_.ADJUST WORD COUNT_^1_(STA* WRDS_.BY REMOVING OVERAGE_^1_(RAO* WRD€€S_.DONE_^1SKWZB_"RAO* EOR_/SET END-OF-RECORD INDICATOR_^1_(LDA_!=N0_^1TBIAS_"EQU_!TBIAS(*-1)_(FINAL TANK BIAS TO_^1_(STA* RBIAS_-RUNNING BIAS_^1*_]_^1SKWEEZ_!ALF_!0,0_^1_(LDA* WRDS_^1_(ALS_!1_^1_(SUB_!=N0_/COMPUTE NO. OF CHAR'S IN FIELD_^1RBIAS_"EQU_!RBIAS(*-1)_^1_(SAZ_!COMPR_-IF NO FIELD TO MOVE, THEN SKIP_^1*_]_^1SKWZC_"TRA_!Q_^1_(INA_!-$3F_^1_(SAM_!*+2_/IF STRING EXCEEDS SCB,€€_^1_(JMP* BIGMOV_,JUMP TO BIGMOV_^1_(ENA_!$C0_^1_(AAQ_!A_^1_(RTJ+ MVI_/INSERT SCB WITH ID BITS_^1AMVI_#EQU_!AMVI(*-1)_^1_(STQ- I_1FIELD LENGTH TO I_^1_(RTJ+ MVC_/MOVE UNCOMPRESSED STRING BEHIND SCB_^1AMVC_#EQU_!AMVC(*-1)_^1*_]_^1COMPR_"ALF_!0,0_^1_(LDA_!=N0_/IF POSITION_^1EOR_$EQU_!EOR(*-1)_*IS EOR_^1_(SAZ_!*+2_/THEN_^1_(JMP* AD2BUF_,GO ADD TO BUFFER_^1_(ENA_!2_1ELSE START COM€€PRESSION COUNTER_^1_(STA* WRDS_.ALREADY HAVE 2 WORDS OF BLANKS_^1_(LDQ- MVCB_.SET Q TO CURRENT_^1_(AAQ_!Q_1INPUT LOCATION_^1*_]_^1COMP1_"ALF_!0,0_^1_(LDA- (ZERO),Q_*COUNT THE NUMBER_^1_(SUB* BLANKS_,OF CONSECUTIVE BLANK WORDS_^1_(SAN_!COMSTP_,IF A NON-BLANK WORD, THEN SKIP FORWARD_^1_(RAO* WRDS_^1_(INQ_!1_^1_(JMP* COMP1_^1*_]_^1COMSTP_!STQ- MVCB_.UPDATE INPUT POINTER TO NEXT€€ WORD_^1_(LDA_!=N0_^1WRDS_#EQU_!WRDS(*-1)_)GET NUMBER_^1_(ALS_!1_1OF BLANK CHARACTERS_^1*_]_^1COMSC_"TRA_!Q_1SAVE IN Q_^1_(INA_!-$1F_.IF SCB IS EXCEEDED_^1_(SAP_!BIGPRO_,THEN SKIP FORWARD_^1_(SQZ_!ZROCNT_,IF NO BLANKS, THEN SKIP_^1_(TRQ_!A_^1_(EOR- X80_/SET SCB ALWAYS BIT_^1_(RTJ* (AMVI)_,MOVE SCB INTO OUTPUT_^1*_]_^1ZROCNT_!JMP* OGO_/CONTINUE RECORD_^1*_]_^1BIGPRO_!ENA_!$9F_/MA€€X SCB_^1_(RTJ* (AMVI)_,MOVE SCB INTO OUTPUT_^1_(TRQ_!A_^1_(INA_!-$1F_.REDUCE BLANK CHARACTER COUNT_^1_(JMP* COMSC_-CONTINUE_^1*_]_^1BIGMOV_!ENA_!$FF_/MAX SCB FOR NON-DUPLICATE STRING_^1_(RTJ* (AMVI)_,MOVE MAX SCB INTO OUTPUT_^1_(ENA_!63_0MAX STRING LENGTH_^1_(STA- I_1TO I_^1_(RTJ* (AMVC)_,MOVE STRING INTO OUTPUT_^1_(TRQ_!A_^1_(INA_!-63_/REDUCE COUNT BY MAX LENGTH_^1_(JMP* SKW€€ZC_-CONTINUE_^1*_]_^1AD2BUF_!ALF_!0,0_^1_(CLR_!A_^1_(RTJ* (AMVI)_,END OF RECORD SCB_^1_(LDA- MVCA_.GET ADDRESS OF NEXT WORD_^1_(SUB_!=N0_/SUBTRACT TANK ADDRESS_^1INADD_"EQU_!INADD(*-1)_^1_(INA_!-1_0ONE WORD TOO MANY_^1_(ALS_!1_1TIMES TWO_^1_(ADD- MVCCA_-NOW HAVE CHARACTER LENGTH OF_^1*_@COMPRESSED RECORD_^1_(STA* (INADD)_+SAVE IN WORD 1 OF TANK_^1*_]_^1REENT_"LDQ_!=N0_/GET ADDR€€ESS OF CURRENT BUFFER_^1BUFPTR_!EQU_!BUFPTR(*-1)_^1_(SQN_!*+2_/IF NOT ACTIVE THEN GET ONE_^1_(JMP* GETBUF_^1*_]_^1BUFOK_"LDA* (INADD)_^1_(STA- I_1SAVE LENGTH FOR MOVE_^1_(SUB_!=XTPBSIZ+TPBSIZ-7 IF THIS RECORD WILL NOT FIT_^1BUFCNT_!EQU_!BUFCNT(*-1)_^1_(SAM_!*+2_/THEN JUMP TO BUFFUL_^1_(JMP* BUFFUL_^1_(STQ- MVCA_.MOVE INTO FIELD A_^1_(LDA* INADD_^1_(INA_!1_1POINT TO RCB,SRCB_€€^1_(STA- MVCB_.MOVE FROM FIELD B_^1_(CLR_!A_^1_(STA- MVCCB_-CHAR 0 OF WORD 1, TANK STRING_^1_(LDA* BUFPC_^1_(STA- MVCCA_-CHAR X OF WORD 1, BUFFER STRING_^1_(RTJ* (AMVC)_,PERFORM MOVE_^1_(LDA- MVCA_.UPDATE BUFFER POINTER_^1_(STA* BUFPTR_^1_(LDA- MVCCA_-AND CHAR POINTER_^1_(STA* BUFPC_^1_(LDA* BUFCNT_,UPDATE BUFFER_^1_(SUB* (INADD)_+CHARACTER COUNT_^1_(STA* BUFCNT_,LIMIT_€€^1_(LDA* (INADD)_^1_(INA_!-3_^1_(SAN_!*+2_/IF THIS WAS A NULL RECORD_^1_(JMP* FLUSH_-THEN GO WRITE BUFFER_^1_(LDQ* INADD_^1_(LDA- 1,Q_^1_(AND- XFF00_^1_(SUB_!=N$9200_+IF THIS IS AN_^1_(SAN_!*+2_/OPERATOR COMMAND_^1_(JMP* FLUSH_-THEN GO WRITE BUFFER_^1*_]_^1RETOK_"LDA_!=N$1800_^1_(STA* FLSW_^1_(LDA_!=N0_^1EXITSW_!EQU_!EXITSW(*-1)_^1_(SAN_!ALTEX_-IF NOT SECONDARY ENTRY_^1_(RAO€€_!COMP_^1_(JMP_!(COMP)_,THEN MAKE NORMAL PRIMARY EXIT (P+2)_^1*_]_^1ALTEX_"RAO* PREP_^1_(JMP* (PREP)_,ELSE MAKE NORMAL SECONDARY EXIT (P+2)_^1*_]_^1PREP_#0_#0_^1_(RAO* EXITSW_,SET EXIT SWITCH TO SECONDARY EXIT_^1_(JMP* REENT_-GO PLACE IN BUFFER, IF THERE IS ROOM_^1*_]_^1GETBUF_!ALF_!0,0_^1_(IIN_!0_^1_(RTJ+ GBUFF_-GET NEW BUFFER_^1_(SQN_!SUCBUF_,IF SUCCESSFUL, THEN SKIP_^1_(LDA€€* EXITSW_,ELSE, MAKE ABNORMAL EXIT (P+1)_^1_(SAN_!*+3_^1_(JMP_!(COMP)_,PRIMARY EXIT_^1_(JMP* (PREP)_,SECONDARY EXIT_^1*_]_^1SUCBUF_!STQ_!ACTBUF_^1_(LDA- TXSTX_-TEXT LEADER CONTROL SEQUENCE_^1_(STA- BDATA,Q_^1_(LDA_!=N$808F_+BCB,FCS_^1_(STA- BDATA+1,Q_^1_(LDA_!=N$CF00_+FCS,XX_^1_(STA- BDATA+2,Q_)TO BUFFER PROLOG_^1_(INQ_!BDATA+2_+INITIALIZE BUFFER POINTER TO THE_^1_(STQ* BUFP€€TR_,FIRST WORD AND_^1_(ENA_!1_1CHARACTER IN BUFFER_^1_(STA* BUFPC_^1_(LDA_!=XTPBSIZ+TPBSIZ-7_^1_(STA* BUFCNT_,INITIALIZE MAXIMUM CHARACTER COUNT_^1_(JMP* REENT_-CONTINUE_^1*_]_^1FLUSH_"RAO* FLSW_^1_(RAO* FLSW_.BYPASS FLUSH SWITCH_^1*_]_^1BUFFUL_!LDA_!=XEPILOG_*MOVE EOB,DLE,ETB_^1_(STA- MVCB_.INTO BUFFER_^1_(ENA_!1_^1_(STA- MVCCB_^1_(LDA- TXETB_-TEXT ENDING CONTROL SEQUENCE_€€^1_(STA* EPILOG+1_^1_(LDA* BUFPTR_^1_(STA- MVCA_^1_(LDA_!=N0_^1BUFPC_"EQU_!BUFPC(*-1)_^1_(STA- MVCCA_^1_(ENA_!3_^1_(STA- I_1FIELD LENGTH_^1_(RTJ_!(AMVC)_,DONE_^1_(LDQ_!=N0_^1ACTBUF_!EQU_!ACTBUF(*-1)_^1_(LDA- MVCA_.COMPUTE BUFFER_^1_(SUB* ACTBUF_,CHARACTER COUNT_^1_(INA_!-BDATA_^1_(ALS_!1_1AND STORE IN BCT_^1_(ADD- MVCCA_^1_(STA- BFCT,Q_,DONE_^1_(ENA_!STR_/SET TRANSPARENT T€ EXT_^1_(STA- 2,Q_/STATUS IN BCT_^1_(CLR_!A_^1_(STA* BUFPTR_,SHOW NO BUFFER ACTIVE_^1_(LDA* ACTBUF_,READY TO_^1_(IIN_!0_^1_(RTJ+ TPUT_.TRANSMIT TO HASP_^1*_]_^1FLSW_#JMP_!GETBUF_,FLUSH SWITCH_^1_(JMP* RETOK_^1*_]_^1EPILOG_!NUM_!0,$1026_+XX,EOB,DLE,ETB_^1_(END_^__ PDCOMP CSY/ P€1_(NAM_!DCOMP_^1_(ENT_!DCOMP_^1_(EXT_!XASCII_^1_(EXT_!MVC,DUP_^1_(EXT_!FBUFF,GPTANK,GCNTNK,GMITNK,GRTANK,FPTANK,TOCNQ,TOMIQ_^1_(EXT_!TOCRQ,TOPRQ_^1_(SPC_!3_^1************************************************************************_^1************************************************************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIME€€SHARE 3)._^1*********_]_^1ONE_$EQU_!ONE($3)_^1X1F_$EQU_!X1F($7)_^1X3F_$EQU_!X3F($8)_^1X7F_$EQU_!X7F($9)_^1XFF_$EQU_!XFF($A)_^1XFF00_"EQU_!XFF00($1A)_^1X8000_"EQU_!X8000($21)_^1ZERO_#EQU_!ZERO($22)_^1X20_$EQU_!X20($28)_^1X40_$EQU_!X40($29)_^1X80_$EQU_!X80($2A)_^1XFFDF_"EQU_!XFFDF($38)_^1XFFBF_"EQU_!XFFBF($39)_^1*********_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AN€€D_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1MVCA_#EQU_!MVCA($64)_)MVC FIELD A_^1MVCCA_"EQU_!MVCCA($65)_(CHARACTER POSITION OF FIELD A_^1MVCB_#EQU_!MVCB($66)_)MVC FIELD B_^1MVCCB_"EQU_!MVCCB($67)_(CHARACTER POSITION OF FIELD B_^1************************************************************************_^1************************************************************************_^1_(S€€PC_!3_^1************************************************************************_^1************************************************************************_^1*********_]_^1*_-TANK BUFFER CONTROL TABLE EQUATES (TK)_^1*********_]_^1TKBCT_"EQU_!TKBCT(0)_*TANK BUFFER CONTROL TABLE_^1TKBCH_"EQU_!TKBCH(0)_*BUFFER CHAIN POINTER_^1TKRCBH_!EQU_!TKRCBH(1)_)RECORD CONTROL BYTE(HIGH BYTE)_^1TK€€SRCL_!EQU_!TKSRCL(1)_)SUB-RECORD CONTROL BYTE (LOW BYTE)_^1TKCT_#EQU_!TKCT(2)_+NUMBER OF CHARACTERS INBUFFER_^1TKDAT_"EQU_!TKDAT(3)_*TANK DATA_^1************************************************************************_^1************************************************************************_^1_(SPC_!3_^1*********_]_^1*_-DCOMP -- DECOMPRESSION ROUTINE_^1*********_]_^1*_]_^1*_-CALLI€€NG SEQUENCE_^1*_]_^1*_2(P)_#RTJ+_!DCOMP_^1*_2(P+1)_!(RETURN HERE IF NO TANK IS AVAILABLE)_^1*_2(P+2)_!(NORMAL RETURN)_^1*_]_^1*_-UPON ENTRY_^1*_2(Q) = ADDRESS OF TP BUFFER, WHICH IS USED ONLY ON_^1*_8THE FIRST CALL TO DCOMP FOR EACH BUFFER_^1*_]_^1*_-UPON NORMAL EXIT (P+2)_^1*_]_^1*_2(Q) = ADDRESS OF TANK CONTAINING THE DECOMPRESSED_^1*_8RECORD_^1*_/OR (Q) = 0 FOR END-OF-BUFFER CON€€DITION_^1*********_]_^1*_]_^1DCOMP_"0_#0_^1ENTSW_"JMP_!FIRST_^1*_]_^1NEWREC_!ALF_!0,0_^1_(LDA* (BUFPNT)_*GET RCB_^1_(LDQ_!=N0_^1BUFPC_"EQU_!BUFPC(*-1)_^1_(SQN_!*+2_^1_(ALS_!8_^1_(AND- XFF_/DONE_^1_(SAN_!*+2_/IF RCB = 0_^1_(JMP* BUFEND_,THEN JUMP TO END PROCESSING_^1_(LDA_!=XRCB2_,GET RCB,SRCB FROM BUFFER_^1_(STA- MVCA_.POINT FIELD A TO RCB2_^1_(CLR_!A_^1_(STA- MVCCA_^1_(LDA_!=€€N0_/POINT FIELD B TO RCB,SRCB_^1BUFPNT_!EQU_!BUFPNT(*-1)_^1_(STA- MVCB_.IN BUFFER_^1_(LDA* BUFPC_^1_(STA- MVCCB_-DONE_^1_(ENA_!2_1MOVE 2_^1_(STA- I_1CHARACTERS_^1_(RTJ_!MVC_/DONE_^1AMVC_#EQU_!AMVC(*-1)_^1_(LDQ_!=N0_/GET RCB,SRCB JUST MOVED_^1RCB2_#EQU_!RCB2(*-1)_^1_(TRQ_!A_1TO A_^1_(AND_!=N$F00_,IF 4 LSB OF RCB ARE ZERO_^1_(SAZ_!*+2_/THEN WE HAVE A CONTROL RCB_^1_(QLS_!8_1ELSE €€SHIFT RCB TO LSB OF Q_^1_(ENA_!$7_03 LSB CONTAINS STREAM IDENTIFIER_^1_(LAQ_!Q_^1_(LDA* PUTTNK,Q_*POST DECOMPRESSION ACTION_^1_(STA* TNKQUE_,EITHER ENQUE OR FREE TANK_^1_(LDQ* GETTNK,Q_*GET A TANK_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ- (ZERO),Q_*DONE_^1_(SQN_!*+2_/IF (Q) = 0, THEN TANK NOT AVAILABLE_^1_(JMP* (DCOMP)_+ABNORMAL RETURN_^1_(STQ* TANKAD_,SAVE TANK ADDRESS_^1_(LDA€€* RCB2_.MOVE RCB,SRCB INTO NEW TANK_^1_(STA- 1,Q_/DONE_^1_(INQ_!3_1POSITION FIELD A FOR DECOMPRESSION_^1_(STQ- MVCA_.DONE_^1*_]_^1DECOM_"ALF_!0,0_^1_(RTJ* IC_0GET SCB IN A-REGISTER_^1_(AND- X7F_/TURN OFF 1ST BIT_^1_(SAN_!*+2_/IF RESULTING BYTE IS ZERO_^1_(JMP* ENDREC_,THEN GO TO ENDREC_^1_(TRA_!Q_1SAVE SCB_^1_(AND- X40_/IF DUPLICATION FLAG IS SET (=0)_^1_(SAZ_!DUPL_.THEN SKI€€P TO DUPL_^1_(TRQ_!A_1GET SCB_^1_(AND- X3F_/TURN OFF BIT, NON-DUPLICATE STRING_^1_(STA- I_1LENGTH OF NON-DUPLICATE STRING_^1_(RTJ* (AMVC)_,MOVE STRING INTO TANK_^1_(JMP* DECOM_-GO GET NEXT FIELD_^1*_]_^1DUPL_#ALF_!0,0_^1_(TRQ_!A_1GET SCB AND SAVE_^1_(AND- X1F_/LENGTH OF DUPLICATE_^1_(STA- I_1STRING IN I-REGISTER FOR LATER MOVE_^1_(TRQ_!A_1GET SCB_^1_(AND- X20_/IF DUPLICATE C€€HARACTER IS BLANK_^1_(SAZ_!BYPASS_,THEN SKIP TO BYPASS_^1_(RTJ* IC_0GET DUPLICATE CHARACTER IN A-REGISTER_^1_(JMP* CONT_.CONTINUE_^1*_]_^1BYPASS_!ENA_!$40_/DUPLICATE CHARACTER IS A BLANK_^1*_]_^1CONT_#ALF_!0,0_^1_(RTJ+ DUP_/MOVE DUPLICATE CHARACTER TO BUFFER_^1_(JMP* DECOM_-CONTINUE WORKING ON RECORD_^1*_]_^1ENDREC_!ALF_!0,0_^1_(LDA- MVCCA_-IF STRING IS A WORD MULTIPLE_^1_(SAZ€€_!XASC_.THEN SKIP TO XASC_^1_(LDA- (MVCA)_,ELSE PAD THE LAST WORD WITH A BLANK_^1_(AND- XFF00_^1_(INA_!$40_^1_(STA- (MVCA)_,DONE_^1*_]_^1XASC_#ALF_!0,0_^1_(LDA- MVCA_.COMPUTE TANK RECORD LENGTH_^1_(SUB_!=N0_^1TANKAD_!EQU_!TANKAD(*-1)_^1_(INA_!-TKDAT_^1_(ALS_!1_^1_(ADD- MVCCA_-DONE_^1_(LDQ* TANKAD_^1_(STA- 2,Q_/STORE LENGTH IN TANK_^1_(SAZ_!MOVPTR_,IF NULL RECORD, THEN SKIP A€€ROUND_^1*_@CONVERSION_^1_(INA_!1_1COMPUTE WORD_^1_(ARS_!1_1LENGTH FOR_^1_(STA* XNC_/ASCII CONVERSION_^1_(INQ_!TKDAT_^1_(STQ* XADDR_-STARTING ADDRESS FOR ASCII CONVERSION_^1_(RTJ+ XASCII_,CONVERT TO ASCII_^1XADDR_"ADC_!0_1ADDRESS OF FIRST WORD_^1_(ADC_!XNC_/ADDRESS OF WORD COUNT_^1*_]_^1MOVPTR_!ALF_!0,0_^1_(LDA- MVCB_.UPDATE CURRENT_^1_(STA* BUFPNT_,TP BUFFER AND CHARACTER_^1_(€€LDA- MVCCB_-POINTERS FOR NEXT ENTRY_^1_(STA* BUFPC_-TO DCOMP_^1*_]_^1RETOK_"LDQ* TANKAD_,TANK ADDRESS TO Q_^1_(TRQ_!A_1AND A_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ* (TNKQUE)_*FREE OR ENQUE TANK JUST FILLED_^1*_]_^1EOB_$ALF_!0,0_^1_(RAO* DCOMP_-SET NORMAL RETURN_^1_(JMP* (DCOMP)_+EXIT_^1*_]_^1BUFEND_!ALF_!0,0_^1_(LDQ_!=N0_^1BUFADD_!EQU_!BUFADD(*-1)_^1_(IIN_!0_1INHIBIT INTERRUP€€TS_^1_(RTJ+ FBUFF_-FREE BUFFER JUST USED_^1_(LDA_!=N$1800_+RESET ENTRY SWITCH_^1_(STA* ENTSW_-TO USE NEXT INPUT BUFFER_^1_(CLR_!Q_1SET (Q) = 0 FOR END-OF-BUFFER COND_^1_(JMP* EOB_/DO NORMAL RETURN_^1*_]_^1XNC_$ADC_!0_^1TNKQUE_!ADC_!0_^1_(SPC_!3_^1*_]_^1FIRST_"ALF_!0,0_^1_(LDA_!=N$1802_+FLIP FIRST PASS_^1_(STA* ENTSW_-ENTRY SWITCH_^1_(STQ* BUFADD_,SAVE BUFFER ADDRESS_^1_(INQ_!5€€_^1_(STQ* BUFPNT_,POINT TO RCB WORD_^1_(ENA_!1_^1_(STA* BUFPC_-AND CHARACTER_^1_(JMP* NEWREC_^1_(EJT_^1*********_]_^1*_-IC -- INSERT CHARACTER IN A-REGISTER FROM FIELD B_^1*********_]_^1IC_%0_#0_^1_(LDQ- (MVCB)_,GET NEXT CHARACTER IN Q_^1_(LDA- MVCCB_^1_(SAN_!*+2_^1_(QLS_!8_1DONE_^1_(EOR- ONE_/ADVANCE_^1_(STA- MVCCB_-FIELD B POINTER_^1_(SAN_!*+2_/TO NEXT_^1_(RAO- MVCB_.CHAR€€ACTER_^1_(TRQ_!A_1CHARACTER TO A-REGISTER_^1_(JMP* (IC)_.RETURN_^1_(SPC_!3_^1*********_]_^1*_-GET TANK ROUTINES_^1*********_]_^1_(SPC_!2_^1*_]_^1GETTNK_!ALF_!0,0_^1_(ADC_!GPTANK_^1_(ADC_!GCNTNK_^1_(ADC_!GMITNK_^1_(ADC_!GRTANK_^1_(ADC_!GPTANK_^1_(ADC_!GPTANK_^1_(ADC_!GPTANK_^1_(ADC_!GPTANK_^1_(SPC_!3_^1*********_]_^1*_-FREE OR ENQUE TANK ROUTINES_^1*********_]_^1_(SPC_!2_^1*_]_^1PU€–TTNK_!ALF_!0,0_^1_(ADC_!FPTANK_^1_(ADC_!TOCNQ_^1_(ADC_!TOMIQ_^1_(ADC_!TOCRQ_^1_(ADC_!TOPRQ_^1_(ADC_!FPTANK_^1_(ADC_!FPTANK_^1_(ADC_!FPTANK_^1_(END_^__–PMVC CSY/ P€1_(NAM_!MVC_^1_(ENT_!MVC_^1_(ENT_!MVI_^1_(ENT_!DUP_^1_(SPC_!3_^1************************************************************************_^1************************************************************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1ONE_$EQU_!ONE($3)_^1XFF_$EQU_!XFF($A)_^1X8000_"EQU_!X8000($21)_^1***€€******_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1MVCA_#EQU_!MVCA($64)_)MVC FIELD A_^1MVCCA_"EQU_!MVCCA($65)_(CHARACTER POSITION OF FIELD A_^1MVCB_#EQU_!MVCB($66)_)MVC FIELD B_^1MVCCB_"EQU_!MVCCB($67)_(CHARACTER POSITION OF FIELD B_^1************************************************************************_^1*********€€***************************************************************_^1_(SPC_!3_^1*********_]_^1*_-MVC -- MOVE CHARACTERS FROM FIELD B TO FIELD A_^1*********_]_^1*_]_^1*_-UPON ENTRY_^1*_]_^1*_-(I) = FIELD LENGTH IN CHARACTERS_^1*_]_^1*_-NOTE: THIS MVC CODE IS OPTIMIZED FOR NON-OVERLAPPING_^1*_2FIELDS. FIELD B MUST LEAD FIELD A BY AT LEAST 2_^1*_2CHARACTERS._^1*_]_^1*_-NOTE: THE A-REGIST€€ER IS NOT PRESERVED IN ANY OF THESE_^1*_4CHARACTER STRING ROUTINES_^1*_]_^1*********_]_^1*_]_^1_(SPC_!3_^1MVC_$0_#0_^1_(STQ* SQ_0SAVE Q_^1_(LDA- I_1GET FIELD LENGTH_^1_(SAN_!*+2_/IF LENGTH IS ZERO_^1_(JMP* (MVC)_-THEN EXIT IMMEDIATELY_^1_(LDA- X8000_-SET FC_^1_(SUB- I_1FOR CHARACTER FIELD LENGTH_^1_(STA* FC_0LOOP CONTROL_^1_(SOV_!*+1_/RESET OVERFLOW_^1_(LDA- MVCCA_-CHAR POSI€€TION A_^1_(LDQ- MVCCB_-CHAR POSITION B_^1_(SQN_!BC1_/IF FIELD B, CHAR 1 THEN SKIP_^1_(SAZ_!MOV00_-IF FIELD A, CHAR 0 AND FIELD B, CHAR 0_^1*_@THEN SKIP_^1_(JMP* MOV10_-FIELD A, CHAR 1; FIELD B, CHAR 0;_^1BC1_$ALF_!0,0_^1_(SAZ_!*+2_/IF FIELD A, CHAR 1 AND FIELD B, CHAR 1_^1_(JMP* MOV11_-THEN JMP TO MOV11_^1_(JMP* MOV01_-FIELD A, CHAR 0, FIELD B, CHAR 1;_^1_(SPC_!3_^1*********_]_€€^1*_-CHAR 0 OF BOTH FIELDS_^1*********_]_^1MOV00_"LDA- I_1GET NUMBER OF CHARACTERS_^1L00_$ALF_!0,0_^1_(LDQ- (MVCB)_,MOVE FROM (MVCB) TO (MVCA) THE NUMBER_^1_(INA_!-2_0OF CHARACTERS SPECIFIED IN THE A-REG_^1_(SAP_!M00_/IF AT LEAST 2 CHARS, SKIP TO M00_^1_(LDA- (MVCA)_,ONLY 1 CHAR LEFT -- GET IT_^1_(LLS_!8_^1_(ALS_!8_^1_(STA- (MVCA)_,DONE_^1_(JMP* MVCEND_,EXIT_^1M00_$STQ- (MVCA€€)_,STORE TWO CHARACTERS AT A TIME_^1_(RAO- MVCB_^1_(RAO- MVCA_^1_(SAZ_!*+2_^1_(JMP* L00_^1_(JMP* MVCEND_,DONE, SO EXIT_^1_(SPC_!3_^1*********_]_^1*_-CHAR 1 OF BOTH FIELDS_^1*********_]_^1MOV11_"LDQ- (MVCA)_,MOVE 1ST CHAR_^1_(LDA- (MVCB)_,FROM (MVCB) TO (MVCA)_^1_(QLS_!8_^1_(ALS_!8_^1_(LLS_!8_1DONE_^1_(LDA- I_1NOW, FIELDS ARE ALIGNED_^1_(INA_!-1_0FOR MOV00 CODE_^1_(JMP* M00_€€^1_(SPC_!3_^1*********_]_^1*_-CHAR 0 OF FIELD A, CHAR 1 OF FIELD B_^1*********_]_^1MOV01_"LDA- (MVCB)_,GET 1ST CHAR_^1_(ALS_!8_^1L01_$LDQ- (MVCA)_^1_(LLS_!8_1GOT IT_^1_(RAO- MVCB_.ADVANCE FIELD B POINTER_^1_(RAO* FC_^1_(SNO_!*+4_/IF NO MORE CHAR'S_^1_(QLS_!8_^1_(STQ- (MVCA)_,THEN STORE LAST CHAR_^1_(JMP* MVCEND_,AND EXIT_^1M01_$LDA- (MVCB)_,ELSE GET NEXT CHARACTER_^1_(LLS_!8€€_1GOT IT_^1_(STQ- (MVCA)_,STORE BOTH CHAR'S_^1_(RAO- MVCA_^1_(RAO* FC_0IF NO MORE CHAR'S_^1_(SOV_!*+2_/THEN SKIP FORWARD_^1_(JMP* L01_/ELSE GO GET NEXT CHAR_^1_(JMP* MVCEND_,DONE, SO EXIT_^1_(SPC_!3_^1*********_]_^1*_-CHAR 1 OF FIELD A, CHAR 0 OF FIELD B_^1*********_]_^1MOV10_"LDQ- (MVCA)_,REPOSITION FIELD A_^1_(QLS_!8_1WE ARE NOW ALIGNED_^1_(JMP* M01_/FOR THE MOV01 CODE_^1_€€(SPC_!3_^1*********_]_^1*_-MVCEND -- COMMON EXIT_^1*********_]_^1MVCEND_!LDA- MVCCB_-COMPUTE_^1_(ADD- I_1NEXT_^1_(AND- ONE_/MVCCB_^1_(STA- MVCCB_-DONE_^1_(LDA- MVCCA_-COMPUTE_^1_(ADD- I_1NEXT_^1_(AND- ONE_/MVCCA_^1_(STA- MVCCA_-DONE_^1_(LDQ* SQ_0RESTORE Q_^1_(JMP* (MVC)_-EXIT_^1*_]_^1FC_%NUM_!0_1NUMBER OF CHAR'S IN MVC OPERATION_^1_(EJT_^1*********_]_^1*_-MVI -- MOVE A CH€€ARACTER INTO FIELD A_^1*_]_^1*_-UPON ENTRY_^1*_]_^1*_2(A) = CHARACTER TO BE MOVED INTO (MVCA)_^1*_]_^1*********_]_^1MVI_$0_#0_^1_(STQ* SQ_0SAVE Q_^1_(ALS_!8_1REPOSITION CHARACTER TO BE MOVED_^1_(LDQ- MVCCA_-IF NEXT CHARACTER POSITION_^1_(SQN_!MI1_/IS 1, THEN SKIP TO M01_^1_(ENQ_!1_1ELSE_^1_(STQ- MVCCA_-USE CHAR 0 AND SET NEXT CHAR POS TO 1_^1_(LDQ- (MVCA)_^1_(LLS_!8_^1_(QLS_!8_€€^1_(STQ- (MVCA)_,DONE_^1*_]_^1MI0_$LDQ_!=N0_/RESTORE Q_^1SQ_%EQU_!SQ(*-1)_^1_(JMP* (MVI)_-EXIT_^1*_]_^1MI1_$ALF_!0,0_^1_(CLR_!Q_1USE CHAR 1 AND_^1_(STQ- MVCCA_-SET NEXT CHAR POS TO 0_^1_(LDQ- (MVCA)_^1_(QLS_!8_^1_(LLS_!8_^1_(STQ- (MVCA)_,DONE_^1_(RAO- MVCA_.ADVANCE TO NEXT WORD FOR CHAR 0_^1_(JMP* MI0_/EXIT_^1_(SPC_!3_^1*********_]_^1*_-DUP - DUPLICATE A CHARACTER INTO EACH €€POSITION OF FIELD A_^1*********_]_^1*_]_^1*_-UPON ENTRY_^1*_]_^1*_-(A) = DUPLICATE CHARACTER_^1*_-(I) = FIELD LENGTH IN CHARACTERS_^1*********_]_^1*_]_^1DUP_$0_#0_^1_(STQ* SQ_0SAVE Q_^1_(LDQ- I_1IF FIELD LENGTH_^1_(SQN_!*+3_/IS ZERO_^1*_]_^1DEXIT_"ALF_!0,0_^1_(LDQ* SQ_0RESTORE Q_^1_(JMP* (DUP)_-THEN EXIT IMMEDIATELY_^1_(AND- XFF_/GET DUPLICATE CHARACTER_^1_(TRA_!Q_1PUT TWO DUP€€ CHAR'S IN Q_^1_(ALS_!8_^1_(AAQ_!Q_1DONE_^1_(LDA- X8000_-SET LOOP CONTROL_^1_(SUB- I_^1_(STA* FC_0DONE_^1_(SOV_!*+1_/TURN OFF OVERFLOW_^1_(LDA- MVCCA_-IF NEXT FIELD A POS IS ON A WORD BNDRY_^1_(SAZ_!D01_/THEN SKIP FORWARD TO D01_^1_(TRQ_!A_1ELSE MOVE ONE CHARACTER TO FORCE_^1_(RTJ* MVI_/WORD ALIGNMENT_^1D02_$SOV_!*+1_/TURN OFF OVERFLOW_^1_(RAO* FC_^1_(SNO_!*+2_/IF NO MORE CHA€VRACTERS_^1_(JMP* DEXIT_-THEN EXIT FROM DUP_^1*_]_^1D01_$ALF_!0,0_^1_(RAO* FC_0IF MORE THAN ONE CHAR LEFT_^1_(SNO_!*+4_/THEN SKIP FORWARD_^1_(TRQ_!A_1ELSE MOVE THE LAST CHAR AND EXIT_^1_(RTJ* MVI_^1_(JMP* DEXIT_-DONE_^1_(STQ- (MVCA)_,STORE ONE WORD OF DUP CHAR'S_^1_(RAO- MVCA_.UPDATE FIELD A POINTER_^1_(JMP* D02_/CONTINUE_^1_(END_^__ VPXCHAR CSY/ P€1_(NAM_!XCHAR_^1_(ENT_!XEBCDI_^1*_'SUBROUTINE TO TRANSLATE ASCII INTO EBCDIC._^1*_]_^1*_'CALLING SEQUENCE_^1*_]_^1*_-RTJ+ XEBCDI_^1*_-ADC_!ADDR(ASCII CHARACTER STRING)_^1*_-ADC_!ADDR(STRING WORD LENGTH)_^1*_]_^1_(SPC_!2_^1XEBCDI_!0_#0_^1_(STA* SA_0SAVE REGISTERS_^1_(STQ* SQ_^1_(LDA- I_^1_(STA* SI_0DONE_^1_(LDA* (XEBCDI)_^1_(STA- I_1A(STRING) TO I;_^1_(RAO* XEBCDI_^1_(SPC_!3_^€€1_(LDQ* (XEBCDI)_^1_(LDA_!=N$8000_^1_(ORG_!*-1_^1X8000_"ALF_!0,0_^1_(ORG*_^1_(SUB* (ZERO),Q_^1_(SPC_!3_^1_(STA* NWRD_/$8000-NWRD_^1_(RAO* XEBCDI_^1_(SAP_!*+2_^1_(JMP* EXITE_-NULL FIELD, SO EXIT;_^1LOOP_#LDA* (ZERO),I_^1_(SUB_!=N$2020_^1_(CLR_!Q_^1_(LLS_!7_^1_(LDQ* EBCDIC,Q_^1_(SAM_!*+2_^1_(QRS_!8_^1_(STQ* SAVEQ_^1_(ALS_!1_^1_(CLR_!Q_^1_(LLS_!7_^1_(LDQ* EBCDIC,Q_^1_(SAM_!*+2_^€€1_(QRS_!8_^1_(LRS_!8_^1_(LDQ* SAVEQ_^1_(LRS_!8_^1_(STA* (ZERO),I_^1_(RAO- I_^1_(SOV_!*+1_^1_(RAO* NWRD_^1_(SOV_!*+2_^1_(JMP* LOOP_^1*_]_^1EXITE_"ALF_!0,0_^1_(LDA_!=N0_/RESTORE REGISTERS_^1SI_%EQU_!SI(*-1)_^1_(STA- I_^1_(LDA_!=N0_^1SA_%EQU_!SA(*-1)_^1_(LDQ_!=N0_/DONE_^1SQ_%EQU_!SQ(*-1)_^1_(JMP* (XEBCDI)_^1_(SPC_!2_^1ZERO_#NUM_!0_^1NWRD_#NUM_!0_^1SAVEQ_"NUM_!0_^1EBCDIC_!NUM_!$4€€05A,$7F7B_'BLANK ! " #_^1_(NUM_!$5B6C,$507D_'$ % & '_^1_(NUM_!$4D5D,$5C4E_'( ) * +_^1_(NUM_!$6B60,$4B61_', - . /_^1_(NUM_!$F0F1,$F2F3_'0 1 2 3_^1_(NUM_!$F4F5,$F6F7_'4 5 6 7_^1_(NUM_!$F8F9,$7A5E_'8 9 : ;_^1_(NUM_!$4C7E,$6E6F_'< = > ?_^1_(NUM_!$7CC1,$C2C3_'@ A B C_^1_(NUM_!$C4C5,$C6C7_'D E F G_^1_(NUM_!$C8C9,$D1D2_'H I J K_^1_(NUM_!$D3D4,$D5D6_'L M €€N O_^1_(NUM_!$D7D8,$D9E2_'P Q R S_^1_(NUM_!$E3E4,$E5E6_'T U V W_^1_(NUM_!$E7E8,$E94A_'X Y Z [_^1_(NUM_!$E04F,$5F6D_'\ ] ^ _ _^1ASCII_"NUM_!$2041,$4243_'BLANK A B C_^1_(NUM $4445,$4647_(D E F G_^1_(NUM $4849,$5B2E_(H I [ ._^1_(NUM $3C28,$2B5D_(< ( + ]_^1_(NUM $264A,$4B4C_(& J K L_^1_(NUM $4D4E,$4F50_(M N O P_^1_(NUM $5152,$2124_(Q R ' $_^1_(NU€€M $2A29,$3B5E_(* ) ; ^_^1_(NUM_!$2D2F,$5354_'- / S T_^1_(NUM $5556,$5758_(U V W X_^1_(NUM $595A,$202C_(Y Z \ ,_^1_(NUM $255F,$3E3F_(% _ > ?_^1_(NUM $3031,$3233_(0 1 2 3_^1_(NUM $3435,$3637_(4 5 6 7_^1_(NUM $3839,$3A23_(8 9 : #_^1_(NUM $4027,$3D22_(@ ' = "_^1_(SPC_!3_^1_(ENT_!XASCII_^1*_'SUBROUTINE TO TRANSLATE EBCDIC INTO ASCII._^1*_]_^1*_'CALLIN€€G SEQUENCE_^1*_]_^1*_-RTJ+ XASCII_^1*_-ADC_!ADDR(EBCDIC CHARACTER STRING)_^1*_-ADC_!ADDR(STRING WORD LENGTH)_^1*_]_^1_(SPC_!2_^1XASCII_!0_#0_^1_(STA* SA_0SAVE REGISTERS_^1_(STQ* SQ_^1_(LDA- I_^1_(STA* SI_0DONE_^1_(LDA* (XASCII)_^1_(STA- I_1A(STRING) TO I;_^1_(RAO* XASCII_^1_(SPC_!3_^1_(LDQ* (XASCII)_^1_(LDA* X8000_^1_(SUB* (ZERO),Q_^1_(STA* NWRD_/$8000-NWRD_^1_(RAO* XASC€€II_^1_(SAP_!*+2_^1_(JMP* EXITA_-NULL FIELD, SO EXIT;_^1LOOPB_"LDA* (ZERO),I_^1_(AND_!=N$7F7F_^1_(SUB_!=N$4040_^1_(CLR_!Q_^1_(LLS_!7_^1_(LDQ* ASCII,Q_^1_(SAM_!*+2_^1_(QRS_!8_^1_(STQ* SAVEQ_^1_(ALS_!1_^1_(CLR_!Q_^1_(LLS_!7_^1_(LDQ* ASCII,Q_^1_(SAM_!*+2_^1_(QRS_!8_^1_(LRS_!8_^1_(LDQ* SAVEQ_^1_(LRS_!8_^1_(STA* (ZERO),I_^1_(RAO- I_^1_(SOV_!*+1_^1_(RAO* NWRD_^1_(SOV_!*+2_^1_(JMP* LOO€†PB_^1*_]_^1EXITA_"ALF_!0,0_^1_(LDA* SI_0RESTORE REGISTERS_^1_(STA- I_^1_(LDA* SA_^1_(LDQ* SQ_0DONE_^1_(JMP* (XASCII)_^1_(END_^__ †PSSTAT CSY/ P€1_(NAM_!SSTAT_^1_(ENT_!SSTAT_^1_(EXT_!TOCNQ_^1_(SPC_!3_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1_(SPC_!2_^1XF_%EQU_!XF(6)_^1ZERO_#EQU_!ZERO($22)_^1_(SPC_!2_^1*********_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1_(SPC_!2_^1*_-TP LOG_^1_(EQU_!RUNRS($50)_(UN€€KNOWN RESPONSES RECEIVED FROM HASP_^1_(EQU_!RNKRS($51)_(NAK RESPONSES RECEIVED FROM HASP_^1_(EQU_!RWBIT($52)_(WAIT-A-BITS RECEIVED FROM HASP_^1_(EQU_!RHDW($53)_)RECEIVE HARDWARE ERRORS_^1_(EQU_!RTXTI($54)_(TEXT BLOCKS RECEIVED FROM HASP_^1_(EQU_!RBCHI($55)_(LOST BLOCKS FROM HASP_^1_(EQU_!RACKI($56)_(NUMBER OF ACK'S RECEIVED FROM HASP_^1_(EQU_!THDW($57)_)TRANSMIT HARDWARE ERRORS_^1_€€(EQU_!TNULL($58)_(NULL RECORDS TRANSMITTED TO HASP_^1_(EQU_!TPCT($59)_)TOTAL NUMBER OF TP TRANSMISSIONS MADE_^1*_@DURING SESSION._^1RSGCR_"EQU_!RSGCR($6B)_(RCB,SRCB FOR GEN. CONT. REC. FROM HASP_^1_(SPC_!3_^1*********_]_^1*_-SSTAT -- DISPLAY SESSION STATISTICS_^1*********_]_^1_(SPC_!2_^1SSTAT_"0_#0_^1_(LDA_!=XRUNRS_+FIRST WORD ADDRESS OF STATISTICS_^1_(STA- I_1TO I_^1_(LDQ_!=XSSDA€€TA+3_(FIRST WORD ADDRESS OF OUTPUT LINE_^1_(LDA_!=X$7FFF-10+1_%LOOP CONTROL_^1_(STA* SWORDS_^1*_]_^1SLOOP_"ALF_!0,0_^1_(LDA- (ZERO),I_*CONVERT FIRST 2 CHAR'S OF WORD_^1_(RTJ_!HEXASC_^1_(STA- (ZERO),Q_*DONE_^1_(LDA- (ZERO),I_*CONVERT NEXT 2 CHAR'S OF WORD_^1_(ALS_!8_^1_(RTJ_!HEXASC_^1_(STA- 1,Q_/DONE_^1_(INQ_!3_^1_(RAO- I_^1_(SOV_!*+1_^1_(RAO* SWORDS_,IF ALL WORDS HAVE BEEN C€€ONVERTED_^1_(SOV_!*+2_/THEN SKIP FORWARD_^1_(JMP* SLOOP_-ELSE REPEAT LOOP_^1_(LDA- RSGCR_-ALSO PICK UP THE RCB,SRCB FOR ANY_^1_(RTJ_!HEXASC_,GENERAL CONTROL RECORD FROM HASP_^1_(STA_!ARGCR_^1_(LDA- RSGCR_^1_(ALS_!8_^1_(RTJ_!HEXASC_^1_(STA_!ARGCR+1_+DONE_^1_(IIN_!0_1ENQUE H1_^1_(LDA_!=XH1_^1_(RTJ_!TOCNQ_-DONE_^1_(IIN_!0_1ENQUE SPACE_^1_(LDA_!=XSPACE_^1_(RTJ_!TOCNQ_-DONE_^1_(IIN_!€€0_1ENQUE H2_^1_(LDA_!=XH2_^1_(RTJ_!TOCNQ_-DONE_^1_(IIN_!0_1ENQUE SPACE_^1_(LDA_!=XSPACE_^1_(RTJ_!TOCNQ_-DONE_^1_(IIN_!0_1ENQUE H3_^1_(LDA_!=XH3_^1_(RTJ_!TOCNQ_-DONE_^1_(IIN_!0_1ENQUE DATA LINE_^1_(LDA_!=XSSDATA_^1_(RTJ_!TOCNQ_-DONE_^1_(JMP* (SSTAT)_+EXIT_^1_(SPC_!2_^1*_]_^1SWORDS_!ADC_!0_^1*_]_^1H1_%NUM_!0,0_^1_(ADC_!2*H1C_^1_(ALF_!Z,_+Z_^1_(ALF_!Z,S E S S I O N S T A T I S T I C€€ S Z_^1H1C_$EQU_!H1C(*-H1-3)_^1*_]_^1SPACE_"NUM_!0,0,1_^1_(ALF_!Z, Z_^1*_]_^1H2_%NUM_!0,0_^1_(ADC_!2*H2C_^1_(ALF_!Z,!----------------RECEIVED----------------!Z_^1_(ALF_!Z,!---TRANSMITTED--!Z_^1H2C_$EQU_!H2C(*-H2-3)_^1*_]_^1H3_%NUM_!0,0_^1_(ADC_!2*H3C_^1_(ALF_!Z,UNRS Z_^1_(ALF_!Z,NAKS Z_^1_(ALF_!Z,WBIT Z_^1_(ALF_!Z,RERR Z_^1_(ALF_!Z,TEXT Z_^1_(ALF_!Z,BCHK Z_^1_(ALF_!Z,ACKS Z_€€^1_(ALF_!Z,TERR Z_^1_(ALF_!Z,ACKS Z_^1_(ALF_!Z,TOTL Z_^1_(ALF_!Z,RGCR Z_^1H3C_$EQU_!H3C(*-H3-3)_^1*_]_^1SSDATA_!NUM_!0,0_^1_(ADC_!2*SSD_^1_(ALF_!Z,_PZ_^1_(ALF_!Z,_)Z_^1ARGCR_"EQU_!ARGCR(*)_^1_(ALF_!Z,_$Z_^1SSD_$EQU_!SSD(*-SSDATA-3)_^1_(SPC_!3_^1*********_]_^1*_-HEXASC -- HEXADECIMAL TO ASCII CONVERSION_^1*_]_^1*_2THE TWO CHARACTERS IN BITS 8-15 OF THE A-REGISTER_^1*_2ARE CONVER€€TED FROM HEX TO ASCII AND RETURNED IN THE_^1*_2A-REGISTER._^1*********_]_^1_(SPC_!2_^1HEXASC_!0_#0_^1_(STQ* SAVEQ_^1_(ENQ_!0_^1_(LLS_!4_^1_(ALS_!4_^1_(AND- XF_0ONE CHAR. IN A, ONE CHAR. IN Q_^1*_]_^1_(INQ_!-$A_/CONVERT FIRST CHARACTER TO ASCII_^1_(SQP_!*+2_^1_(INQ_!$3A-$41_^1_(INQ_!$41_/DONE_^1*_]_^1_(INA_!-$A_/CONVERT SECOND CHARACTER TO ASCII_^1_(SAP_!*+2_^1_(INA_!$3A-$41_^1_(I€šNA_!$41_/DONE_^1*_]_^1_(QLS_!8_1COMBINE BOTH ASCII CHARACTERS IN A_^1_(EAQ_!A_^1_(LDQ_!=N0_^1SAVEQ_"EQU_!SAVEQ(*-1)_^1_(JMP* (HEXASC)_*RETURN_^1_(END_^__šPTPINIT CSY/ P€1_(NAM_!TPINIT_^1_(ENT_!RMTID,TPINIT_^1_(EXT* XASCII,XEBCDI_^1_(EXT* SETMK,DMICOD,TBLADR,EMPSRT_^1_(EXT_!TIMINT_^1_(EXT_!XCINT,XCOUT,STACK_^1_(EXT* OCON_^1_(EXT* TOCNQ_^1_(EXT_!MIQ,CNQ_^1_(EXT_!CLRMK_^1_(EXT_!BCON_^1_(EXT_!MVC_^1_(EXT_!FMITNK_^1_(EXT_!TAQ,TPUT,TIMENQ,TIMDEQ,TPTRA_^1_(EXT_!XCOMM,TPBUSY,TEND,GBUFF_^1_(EXT_!INTERN_^1_(SPC_!3_^1*************************************€€***********************************_^1*********_]_^1*_-COMMUNICATIONS REGION (COMPATIBLE WITH MSOS 5_^1*_-AND TIMESHARE 3)._^1*********_]_^1XFF_$EQU_!XFF($A)_^1ZERO_#EQU_!ZERO($22)_^1_(SPC_!2_^1*********_]_^1*_-LOCATIONS $47-B2 ARE RESERVED FOR USER APPLICATIONS, AND_^1*_-WILL BE USED BY MRJE17._^1*********_]_^1_(SPC_!2_^1_(EQU_!ADCCLA($47)_'ADDRESS OF THE DCCLA (ALSO READ/WRITE_^1€€*_@DATA COMMAND)_^1_(EQU_!DCSF($48)_)DCCLA STATUS/FUNCTION COMMAND_^1_(EQU_!DCACS($49)_(DCCLA ACTIVE CHANNEL STATUS COMMAND_^1_(EQU_!DCCF($4A)_)DCCLA COMMON FUNCTION COMMAND_^1_(EQU_!DCIF($4B)_)DCCLA INITIALIZE FUNCTION COMMAND_^1_(EQU_!DCCRC1($4C)_'DCCLA INPUT CRC NPR/CRC DATA OUTPUT_^1_(EQU_!DCCRC2($4D)_'DCCLA OUTPUT CRC OPR_^1XESES_"EQU_!XESES($4E)_(STATUS OF LAST TP TRANSMIT/RE€€CEIVE OP._^1_(EQU_!INTERR($4F)_'INTERNAL INTERRUPT FAULT_^1*_@BIT 0 -- STORAGE PARITY_^1*_@BIT 1 -- PROGRAM PROTECT_^1*_@BIT 2 -- POWER FAILURE_^1*_-TP LOG_^1_(EQU_!RUNRS($50)_(UNKNOWN RESPONSES RECEIVED FROM HASP_^1_(EQU_!RNKRS($51)_(NAK RESPONSES RECEIVED FROM HASP_^1_(EQU_!RWBIT($52)_(WAIT-A-BITS RECEIVED FROM HASP_^1_(EQU_!RHDW($53)_)RECEIVE HARDWARE ERRORS_^1_(EQU_!RTXTI($54)_€€(TEXT BLOCKS RECEIVED FROM HASP_^1_(EQU_!RBCHI($55)_(LOST BLOCKS FROM HASP_^1_(EQU_!RACKI($56)_(NUMBER OF ACK'S RECEIVED FROM HASP_^1_(EQU_!THDW($57)_)TRANSMIT HARDWARE ERRORS_^1_(EQU_!TNULL($58)_(NULL RECORDS TRANSMITTED TO HASP_^1_(EQU_!TPCT($59)_)TOTAL NUMBER OF TP TRANSMISSIONS MADE_^1*_@DURING SESSION._^1_(EQU_!CRCIN($5A)_(CRC INTERNAL REJECTS_^1_(EQU_!CRCEX($5B)_(CRC EXTERNAL€€ REJECTS_^1_(EQU_!DCIN($5C)_)DCCLA INTERNAL REJECTS_^1_(EQU_!DCEX($5D)_)DCCLA EXTERNAL REJECTS_^1_(EQU_!NEXTIN($5E)_'NEXT TP BUFFER TO BE READ FROM HASP_^1_(EQU_!LASTWR($5F)_'LAST TP BUFFER TRANSMITTED TO HASP_^1_(EQU_!XBCT($60)_)CURRENT TP BUFFER_^1_(EQU_!XBCC($61)_)CRC CHECK WORD_^1_(EQU_!XEND($62)_)TP COMPLETION ADDRESS_^1_(EQU_!XES($63)_*TP ENDING STATUS_^1MVCA_#EQU_!MVCA($64)_€€)MVC FIELD A_^1MVCCA_"EQU_!MVCCA($65)_(CHARACTER POSITION OF FIELD A_^1MVCB_#EQU_!MVCB($66)_)MVC FIELD B_^1MVCCB_"EQU_!MVCCB($67)_(CHARACTER POSITION OF FIELD B_^1TPA_$EQU_!TPA($68)_*RIP/TIP ACTIVE TP BUFFER WORD POINTER_^1TPCA_#EQU_!TPCA($69)_)RIP/TIP ACTIVE TP BUFFER CHAR POINTER_^1XSYNCT_!EQU_!XSYNCT($6A)_'TIP LEADING SYN COUNT_^1TPIQ_#EQU_!TPIQ($6B)_)NEXT TP INPUT BUFFER READY €€FOR USE_^1TPOQ_#EQU_!TPOQ($6C)_)NEXT TP OUTPUT BUFFER READY FOR USE_^1TXSTX_"EQU_!TXSTX($6D)_(TEXT MODE LEADER CONTROL SEQUENCE_^1*_@(DLE,STX) OR (SOH,STX)_^1TXETB_"EQU_!TXETB($6E)_(TEXT MODE TRAILER CONTROL SEQUENCE_^1*_@(DLE,ETB) OR (SYN,ETB)_^1XPAD_#EQU_!XPAD($6F)_)PAD CHARACTER_^1XSOH_#EQU_!XSOH($70)_)SOH_^1XSTX_#EQU_!XSTX($71)_)STX_^1XETB_#EQU_!XETB($72)_)ETB_^1XETX_#EQU_!XETX€€($73)_)ETX_^1XDLE_#EQU_!XDLE($74)_)DLE_^1XENQ_#EQU_!XENQ($75)_)ENQ_^1XSYN_#EQU_!XSYN($76)_)SYN_^1XNAK_#EQU_!XNAK($77)_)NAK_^1XACK0_"EQU_!XACK0($78)_(ACK0_^1AXCINT_!EQU_!AXCINT($79)_'COMMON INTERRUPT ENTRY_^1AXCOUT_!EQU_!AXCOUT($7A)_'COMMON INTERRUPT EXIT_^1ASTACK_!EQU_!ASTACK($7B)_'COMMON INTERRUPT STACK_^1CR1WES_!EQU_!CR1WES($7C)_'CARD READER CONVERTER,EQUIP,STATION_^1CR1MSK_!EQU_€€!CR1MSK($7D)_'CARD READER INTERRUPT MASK_^1LP1WES_!EQU_!LP1WES($7E)_'LINE PRINTER CONV,EQUIP,STATION_^1LP1MSK_!EQU_!LP1MSK($7F)_'LINE PRINTER INTERRUPT MASK_^1CN1WES_!EQU_!CN1WES($80)_'CONSOLE CONVERTER,EQUIP,STATION_^1CN1MSK_!EQU_!CN1MSK($81)_'CONSOLE INTERRUPT MASK_^1CLAWES_!EQU_!CLAWES($82)_'CLA CONVERTER,EQUIP,STATION_^1CLAMSK_!EQU_!CLAMSK($83)_'CLA INTERRUPT MASK_^1CLKWES_!EQU€€_!CLKWES($84)_'CLOCK CONVERTER,EQUIP,STATION_^1CLKMSK_!EQU_!CLKMSK($85)_'CLOCK INTERRUPT MASK_^1_(SPC_!3_^1********_]_^1*_-BUFFER CONTROL TABLE_^1********_]_^1_(SPC_!2_^1BCT_$ALF_!0,0_^1BCH_$EQU_!BCH(0)_,BUFFER CHAIN POINTER_^1BFCT_#EQU BFCT(1)_,NUMBER OF CHARACTERS IN BUFFER_^1BS_%EQU BS(2)_.BUFFER STATUS WORD_^1*_,STATUS WORD EQUATES_^1STR_$EQU_!STR(1)_,BIT 0 TRANSPARENT TEXT I€€N BUFFER_^1SOB_$EQU SOB(2)_-BIT 1 OBJECT CODE IN TEXT_^1SCS_$EQU SCS(4)_-BIT 2 CONTROL SEQUENCE ONLY IN BUFFER_^1SDC_$EQU_!SDC(8)_,BIT 3 BUFFER MARKED FOR DECOMPRESSION_^1SDM_$EQU_!SDM(16)_+BIT 4 DUMMY BUFFER_^1SDL_$EQU_!SDL(32)_+BIT 5 BUFFER MARKED FOR DELETION_^1*_]_^1BDATA_"EQU_!BDATA(3)_*DATA PORTION OF BLOCK_^1_(SPC_!3_^1*********_]_^1*_'DUAL-CHANNEL COMMUNICATIONS LINE ADAP€€TER (DCCLA) EQUATES_^1*********_]_^1*_-CHANNEL STATUS BIT DEFINITIONS_^1_(SPC_!2_^1_(EQU_!DSR(2048)_)DATA SET READY FROM MODEM_^1_(SPC_!3_^1*********_]_^1*_-TANK BUFFER CONTROL TABLE EQUATES (TK)_^1*********_]_^1TKBCT_"EQU_!TKBCT(0)_*TANK BUFFER CONTROL TABLE_^1TKBCH_"EQU_!TKBCH(0)_*BUFFER CHAIN POINTER_^1TKRCBH_!EQU_!TKRCBH(1)_)RECORD CONTROL BYTE(HIGH BYTE)_^1TKSRCL_!EQU_!TKSRCL(€€1)_)SUB-RECORD CONTROL BYTE (LOW BYTE)_^1TKCT_#EQU_!TKCT(2)_+NUMBER OF CHARACTERS IN BUFFER_^1TKDAT_"EQU_!TKDAT(3)_*TANK DATA_^1_(SPC_!2_^1_(EQU_!TPBSIZ(200)_^1_(EQU_!NWRID(3)_*NUMBER OF WORDS FOR REMOTE ID IS 3;_^1*_]_^1*_-DATA LINK CONTROL CHARACTERS IN EBCDIC_^1*_]_^1_(EQU_!SOH(1)_^1_(EQU_!STX(2)_^1_(EQU_!ETX(3)_^1_(EQU_!DLE($10)_^1_(EQU_!ETB($26)_^1_(EQU_!ENQ($2D)_^1_(EQU_!SYN(€€$32)_^1_(EQU_!EOT($37)_^1_(EQU_!NAK($3D)_^1_(EQU_!ACK0($70)_^1_(EQU_!ACK1($61)_^1PAD_$EQU_!PAD($FF)_^1************************************************************************_^1_(EJT_^1*_]_^1*_-THE FOLLOWING CODE DYNAMICALLY ALLOCATES THE TP BUFFER_^1*_-POOL OVER THE INITIALIZATION CODE. THIS PROGRAM MODULE_^1*_-MUST PHYSICALLY APPEAR LAST IN MEMORY, SINCE THE RE-_^1*_-MAINING PORT€€ION OF MAIN STORAGE FROM THIS POINT ON WILL_^1*_-BE ALLOCATED TO TP BUFFERS._^1*_]_^1BOM_$ADC_!XPOOL_^1EOM_$ADC_!XEOM_^1FIRSTB_!ADC_!XPOOL_-FIRST BCT ADDR FOR BUFFER POOL_^1_(EQU_!ONEBCT(TPBSIZ+BDATA) LENGTH OF ONE BCT_^1_(EQU_!TWOBCT(ONEBCT+ONEBCT) LENGTH OF TWO BCT'S_^1EOMAD_"ADC_!0_1SAVE END-OF-MEMORY_^1_(ENT_!M0_^1M0_%ALF_!0,0_^1MAPBUF_!LDA* EOM_^1_(STA* EOMAD_-SAVE EOM_^1_(L€€DA* FIRSTB_,LOAD FIRST BCT ADDRESS_^1_(STA+ TAQ_/SET TOP OF AVAILABILITY QUEUE_^1*_]_^1NXALLO_!ALF_!0,0_^1_(TRA_!Q_1CURRENT BCT POINTER TO Q_^1_(ADD_!=XTWOBCT_*TWO MORE BCT'S_^1_(SUB* EOMAD_-IS THERE ROOM?_^1_(SAP_!THRU_.BRANCH IF NOT_^1_(TRQ_!A_1CURRENT BCT POINTER_^1_(ADD_!=XONEBCT_*FORWARD BCT POINTER_^1_(STA- (ZERO),Q_*TO CURRENT BCT_^1_(JMP* NXALLO_,REPEAT_^1*_]_^1THRU_#A€€LF_!0,0_^1_(CLR_!A_1B.CHN FIELD OF_^1_(STA- (ZERO),Q_*LAST BCT = 0000_^1_(EJT_^1_(EJT_^1*********_]_^1*_-TRANSMIT SIGNON AND ESTABLISH HASP SYNCHRONIZATION_^1*********_]_^1_(SPC_!2_^1_(LDA_!=XSIG_-SIGNON BUFFER_^1_(STA- LASTWR_,BECOMES LAST WRITE_^1_(STA- XBCT_.AND CURRENT TP BUFFER_^1_(LDA_!=XTEND_,SET UP TRANSMIT INTERRUPT ROUTINE_^1_(STA- XEND_.DONE_^1_(IIN_!0_1INHIBIT INTER€€RUPTS_^1_(RTJ_!GBUFF_-GET NEXT TP BUFFER_^1_(STQ- NEXTIN_,AS NEXT INPUT BLOCK_^1_(LDQ_!=XTPTRA_+POINT TPTRA RETURN TO COMMUTATOR_^1_(LDA_!=XXCOMM_+AND ENTER TPTRA FOR FIRST TP OPERATION_^1_(STA- (ZERO),Q_^1_(JMP- 1,Q_/DONE_^1_(EJT_^1*********_]_^1*_-WRITE DCCLA ERROR MESSAGE TO OPERATOR_^1*********_]_^1_(SPC_!2_^1XERR_#0_#0_^1_(LDQ_!=XXERRM_+IF LS BYTE OF XESES IS NON-ZERO_^1_(L€€DA- XESES_-THEN WE HAVE TRANSMIT ERROR_^1_(AND- XFF_^1_(SAN_!*+3_^1_(LDQ_!=XRERRM_+ELSE WE HAVE RECEIVE ERROR_^1_(STQ* ETANK_-SAVE ERROR MESS. TANK ADDRESS_^1_(INQ_!RXDEL_-ADJUST FOR ERROR TYPE_^1_(STQ* FLDA_.FIELD A POINTER_^1_(LDA- XESES_-GET COMPOSITE ENDING STATUS CODE_^1_(TRA_!Q_1TO Q_^1_(AND- XFF_/LS BYTE FOR TRANSMIT_^1_(SAN_!*+2_^1_(QLS_!8_1MS BYTE FOR RECEIVE_^1_(CLR€€_!A_1GET ORDINAL FOR ERROR MESSAGE_^1_(QRS_!1_^1_(SQZ_!*+3_^1_(INA_!1_^1_(JMP* *-3_^1*_@DONE_^1_(MUI_!=XRXMDEL_*LOCATE ERROR TYPE FOR MESSAGE_^1_(ADD_!=XXRESM_+BASE ADDRESS_^1_(STA* FLDB_.BECOMES FIELD B POINTER_^1*_-MOVE FIELD B INTO FIELD A_^1_(ENQ_!RXMDEL_^1*_]_^1XMOVE_"ALF_!0,0_^1_(LDA* (FLDB)_^1_(STA* (FLDA)_^1_(RAO* FLDB_^1_(RAO* FLDA_^1_(INQ_!-1_^1_(SQZ_!*+2_^1_(JMP* €€XMOVE_^1*_@DONE_^1_(LDA_!=N0_/GET ERROR TANK ADDRESS_^1ETANK_"EQU_!ETANK(*-1)_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!TOCNQ_-TO CONSOLE OUTPUT Q_^1_(RTJ_!OCON_.KICK CONSOLE DRIVER_^1_(LDA_!BCON_.WAIT UNTIL MESSAGE IS WRITTEN_^1_(SAZ_!*+2_^1_(JMP* *-3_^1*_@DONE;_^1_(JMP* (XERR)_,EXIT_^1*_]_^1FLDA_#ADC_!0_^1FLDB_#ADC_!0_^1*_]_^1XRESM_"ALF_!0,0_^1_(ALF_!Z,LOST DATA Z_^1RXMDEL_!EQU_!€€RXMDEL(*-XRESM)_^1_(ALF_!Z,DATA CHECKZ_^1_(ALF_!Z,TIME OUT Z_^1_(ALF_!Z,EQPT CHECKZ_^1_(EJT_^1_(SPC_!3_^1*********_]_^1*_-HERE ARE THE CONSTANTS FOR LOW MEMORY;_^1*********_]_^1_(SPC_!2_^1***_+DCCLA COMMANDS_^1_(SPC_!2_^1MLBEG_"EQU_!MLBEG(*)_^1_(NUM_!$0500_-ADCCLA_^1_(NUM_!$0501_-DCSF_^1_(NUM_!$0502_-DCACS_^1_(NUM_!$0504_-DCCF_^1_(NUM_!$0505_-DCIF_^1_(NUM_!$0506_-DCCRC1_^1_(NUM_!$€€0507_-DCCRC2_^1_(SPC_!2_^1***_+A(TPOQ)-A(DCCRC2)_^1_(SPC_!2_^1_(BZS_!(XPAD-DCCRC2-1)_^1OCONT_"EQU_!OCONT(*)_^1_(ORG_!MLBEG+$6A-$47_^1_(NUM_!4_1TIP LEADING SYN COUNT_^1_(ORG_!MLBEG+$6D-$47_^1_(NUM_!$0102_-NON-TRANSPARENT TEXT LEADER_^1_(NUM_!$3226_-NON-TRANSPARENT TEXT TRAILER_^1_(ORG_!OCONT_^1_(SPC_!2_^1***_+DATA LINK CONTROL CHARACTERS_^1_(SPC_!2_^1_(ADC_!PAD_^1_(ADC_!SOH_^1_(ADC_€€!STX_^1_(ADC_!ETB_^1_(ADC_!ETX_^1_(ADC_!DLE_^1_(ADC_!ENQ_^1_(ADC_!SYN_^1_(ADC_!NAK_^1_(ADC_!ACK0_^1_(SPC_!2_^1***_+COMMON INTERRUPT LINKAGE_^1_(SPC_!2_^1_(ADC_!XCINT_-COMMON INTERRUPT ENTRY_^1_(ADC_!XCOUT_-COMMON INTERRUPT EXIT_^1_(ADC_!STACK_-COMMON INTERRUPT STACK_^1_(SPC_!2_^1***_+LOCAL DEVICE ADDRESSES AND INTERRUPT MASKS_^1_(SPC_!2_^1_(NUM_!$0581,$0001_'CARD READER (PP)_^1_(NU€€M_!$0201,$0D03_'LINE PRINTER (CR/CLA/TI/LS/PP)_^1_(NUM_!$0091,$0D01_'CONSOLE (CR/CLA/TI/PP)_^1_(NUM_!$0501,$0801_'DCCLA (CR/PP)_^1_(NUM_!$0401,$0801_'CLOCK (CR/PP)_^1MLEND_"EQU_!MLEND(*)_^1_(SPC_!2_^1*_@PP = PROTECT/PARITY_^1*_@CR = CARD READER_^1*_@TI = TIMER_^1*_@LS = LOW SPEED I/O_^1*_]_^1_(EJT_^1*_]_^1*_-EXECUTION BEGINS HERE FOR THE INITIALIZATION MODULE_^1*_]_^1TPINIT_!ALF_!0€€,0_^1_(SPC_!3_^1*********_]_^1*_-SET UP LOW MEMORY_^1*********_]_^1_(SPC_!2_^1_(SLS_^1_(JMP_!*-1_^1_(LDQ_!=XMLEND-MLBEG_$NO. OF WORDS USED_^1*_]_^1MLOW_#ALF_!0,0_^1_(LDA* MLBEG-1,Q_)LOOP UNTIL ALL CONSTANTS ARE MOVED_^1_(STA- $46,Q_-INTO LOW MEMORY._^1_(INQ_!-1_^1_(SQZ_!*+2_^1_(JMP* MLOW_^1*_@DONE;_^1_(SPC_!3_^1*********_]_^1*_-ENABLE INTERNAL INTERRUPT_^1*********_]_^1_(SPC_!2_€€^1_(CLR_!A_1CLEAR BIT IN INTERRUPT REGISTER_^1_(RTJ_!CLRMK_^1_(CLR_!A_1Q POINTS TO DISPL. IN THE INTER. VECT._^1_(STA+ $102,Q_,SET INTERNAL INT. MASK FOR INTERN_^1_(LDA_!=XINTERN_*SET INTERRUPT ADDRESS FOR INTERN_^1_(STA+ $103,Q_^1_(LDA_!=N$0001_+INITIAL VALUE IN MASK REGISTER (PP)_^1_(TRA_!M_^1_(SPC_!3_^1*********_]_^1*_-STORE TEXT LEADER AND TRAILER IN SIGNON BLOCK_^1*********_€€]_^1_(SPC_!2_^1_(LDA- TXSTX_^1_(STA_!SIGNON_^1_(LDA- TXETB_^1_(STA_!SIGNON+44_)DONE_^1_(SPC_!2_^1*********_]_^1*_-START THE CLOCK_^1*********_]_^1_(SPC_!2_^1_(LDA- CLKWES_,CLEAR CLOCK BIT IN THE MASK REGISTER_^1_(RTJ_!CLRMK_^1*_@Q POINTS TO DISPL. IN THE INTER. VECT._^1_(LDA- CLKMSK_,SET CLOCK MASK FOR TIMINT_^1_(STA+ $102,Q_^1_(LDA_!=XTIMINT_*SET CLOCK INTERRUPT ADDRESS FOR T€€IMINT_^1_(STA+ $103,Q_^1_(LDA- CLKWES_,SET CLOCK BIT IN THE MASK REGISTER_^1_(RTJ_!SETMK_^1_(LDQ_!DMICOD_,ENABLE THE 3 1/3 MS MICRO CLOCK_^1_(LDA_!TBLADR_^1_(DMI_!0_1DONE;_^1_(LDQ_!EMPSRT_,ENABLE CLOCK AND LIMIT INTERRUPT_^1_(OUT_!*+1-*_^1_(NOP_!0_^1_(SPC_!2_^1*_@DONE;_^1_(SPC_!3_^1*********_]_^1*_-ENQUE FIRST CONSOLE MESSAGE_^1*********_]_^1_(SPC_!2_^1_(LDA_!=XMSAL_^1_(RTJ_!CNMQ€€_.WRITE MESSAGE_^1_(SPC_!2_^1_(LDQ_!=XNWRID_^1_(EQU_!ANWRID(*-1)_^1*_]_^1LOOPA_"ALF_!0,0_^1_(LDA_!RMTID-1,Q_)MOVE (LAST)_^1_(STA_!RMNO-1,Q_*REMOTE ID_^1_(INQ_!-1_0IN EBCDIC_^1_(SQZ_!*+2_/INTO CONSOLE_^1_(JMP* LOOPA_-MESSAGE;_^1*_]_^1_(RTJ_!XASCII_,TRANSLATE INTO ASCII;_^1_(ADC_!RMNO_^1_(ADC_!ANWRID_^1*_]_^1IN01_#ALF_!0,0_^1_(LDA_!=XMCN01_^1_(RTJ* CNMQ_.WRITE MESSAGE_^1_(LDA_!=XMC€€N02_^1_(RTJ* CNMQ_.WRITE MESSAGE_^1_(LDQ* ANWRID_^1*_]_^1LOOPC_"ALF_!0,0_^1_(LDA_!RMNO-1,Q_*MOVE CONFIRMED_^1_(STA_!RMTID-1,Q_)REMOTE ID IN ASCII_^1_(INQ_!-1_0INTO SIGNON_^1_(SQZ_!*+2_/RECORD;_^1_(JMP* LOOPC_^1*_]_^1_(RTJ_!XEBCDI_,TRANSLATE FROM_^1_(ADC_!RMTID_-ASCII TO EBCDIC;_^1_(ADC_!ANWRID_^1_(SPC_!2_^1_(RTJ_!OCON_.ONE MORE CALL TO ACTIVATE INPUT SIDE_^1*_]_^1WAITR_"ALF_!0,0€€_^1_(NOP_!0_1ROOM FOR INTERRUPTS_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(LDQ_!MIQ_/IF NO INPUT IN QUE_^1_(SQN_!*+3_^1_(EIN_!0_1THEN ENABLE INTERRUPTS_^1_(JMP* WAITR_-AND LOOK AGAIN_^1_(SPC_!2_^1_(LDA- (ZERO),Q_*ELSE REMOVE NEXT INPUT TANK FROM QUE_^1_(STA_!MIQ_^1_(EIN_!0_1AND ENABLE INTERRUPTS_^1_(STQ- I_1SAVE INPUT TANK IN I_^1_(LDQ* ANWRID_^1*_]_^1LOOPD_"ALF_!0,0_^1_(LDA- TKDAT-1€€,B_)MOVE INPUT MESSAGE_^1_(STA_!RMNO-1,Q_*INTO WORK AREA_^1_(INQ_!-1_^1_(SQZ_!*+2_^1_(JMP* LOOPD_^1*_@DONE;_^1_(SPC_!2_^1_(LDQ- I_1TANK ADDRESS TO Q_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!FMITNK_,GO FREE INPUT TANK JUST USED_^1_(SPC_!2_^1_(LDQ- TKCT,I_,IF NO WORDS IN RESPONSE,_^1_(INQ_!1_^1_(QRS_!1_^1_(SQZ_!RIDOK_-THEN SKIP FORWARD;_^1_(INQ_!-NWRID_,ELSE ALLOW OPERATOR_^1_(SQP_€€!IN02_.TO CONFIRM WHAT HE ENTERED;_^1_(LDA_!=N$2020_+PAD A SHORT_^1*_]_^1LOOPB_"ALF_!0,0_^1_(STA_!RMNO+NWRID,Q_%RESPONSE WITH BLANKS;_^1_(INQ_!1_^1_(SQZ_!*+2_^1_(JMP* LOOPB_^1*_]_^1IN02_#ALF_!0,0_^1_(JMP* IN01_.GO BACK FOR CONFIRMATION;_^1*_]_^1RIDOK_"ALF_!0,0_^1_(SPC_!3_^1*********_]_^1*_-PROMPT OPERATOR AT 20-SECOND INTERVALS_^1*_-WITH 'DATA SET NOT READY' IF NECESSARY_^1******€€***_]_^1_(SPC_!2_^1_(ENA_!20_020-SECOND INTERVAL_^1_(LDQ_!=XTIM20_+TIMER INTERRUPT ROUTINE_^1ATIM20_!EQU_!ATIM20(*-1)_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!TIMENQ_,GO ENQUE TIMER REQUEST_^1_(SPC_!2_^1*_]_^1LDSR_#ALF_!0,0_^1_(LDQ- CLAWES_,REMAIN IN THIS LOOP UNTIL THE DATA SET_^1_(INP_!1_1BECOMES READY OR THE 20-SECOND TIMER_^1_(NOP_!0_1EXPIRES, WHICHEVER COMES FIRST._^1_(AND_!=X€€DSR_^1_(SAN_!*+2_/IF DATA SET NOT READY_^1_(JMP* LDSR_.THEN GO LOOK AGAIN_^1_(SPC_!2_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!TIMDEQ_,DEQUE TIMER REQUEST, SINCE DATA SET IS_^1*_@NOW READY._^1_(SPC_!3_^1*********_]_^1*_-XMIT PRE-SIGNON_^1*********_]_^1_(SPC_!2_^1PRESON_!ALF_!0,0_^1_(LDA_!=XPRE_-SET PRE-SIGNON BUFFER_^1_(STA- XBCT_.AS CURRENT TP BLOCK_^1_(STA- LASTWR_,AS LAST WRITE€€_^1_(LDA_!=XTEND_,SET XMIT INTERRUPT ROUTINE_^1_(STA- XEND_^1_(LDA_!=XXPOOL_+REPLY BUFFER_^1_(STA- NEXTIN_,AS NEXT INPUT BUFFER_^1_(RTJ_!TPTRA_-GO TRANSMIT BLOCK TO HASP_^1*_]_^1PLOOP_"ALF_!0,0_^1_(LDA_!TPBUSY_,WAIT HERE UNTIL TPBUSY IS RESET_^1_(SAZ_!*+2_/IF NOT SET_^1_(JMP* PLOOP_-THEN LOOK AGAIN_^1_(LDA- XESES_-GET TRANS./REC. ENDING STATUS_^1_(SAZ_!PREOK_-IF ZERO, THEN SKIP€€ FORWARD (NO ERROR)_^1_(RTJ_!XERR_.GO PRINT ERROR MESSAGE TO OPERATOR_^1_(JMP* PRESON_,ATTEMPT PRE-SIGNON AGAIN_^1_(SPC_!2_^1*********_]_^1*_-PRE-SIGNON TRANSMITTED -- CHECK RESPONSE FROM HASP_^1*********_]_^1_(SPC_!2_^1PREOK_"ALF_!0,0_^1_(LDQ- XBCT_.CHECK BLOCK JUST RECEIVED FROM HASP_^1_(LDA- BDATA,Q_+FOR POSITIVE ACKNOWLEDGEMENT_^1_(SUB_!DLEACK_^1_(SAZ_!*+2_/IF NOT THERE_^1_(€€JMP* PRESON_,THEN RE-TRANSMIT PRE-SIGNON_^1_(SPC_!2_^1_(LDA_!=XNL_.NEW LINE TO CONSOLE OUTPUT_^1_(RTJ* CNMQ_.GO WRITE_^1_(LDA_!=XMTPOK_^1_(RTJ* CNMQ_.WRITE MESSAGE_^1_(IIN_!0_1TURN OFF TIMER_^1_(RTJ_!TIMDEQ_^1_(JMP_!MAPBUF_+GO MAP TP BUFFERS ONTO REMAINING MEMORY_^1_(SPC_!3_^1*********_]_^1*_-ENQUE AND INITIATE NEXT CONSOLE OUTPUT MESSAGE_^1*********_]_^1_(SPC_!2_^1CNMQ_#0_#0_^1€€_(IIN_!0_^1_(RTJ_!TOCNQ_-DONE;_^1_(RTJ_!OCON_.OUTPUT MESSAGE_^1_(LDA_!BCON_.HANG UNTIL OUTPUT DRIVER IS NOT BUSY_^1_(SAZ_!*+2_^1_(JMP* *-3_^1*_@DONE_^1_(JMP* (CNMQ)_,RETURN_^1*_]_^1XERRM_"ALF_!0,0_^1_(NUM_!0,0_^1_(ADC_!2*XMEND_^1_(ALF_!Z, XMIT ERR = Z_^1RXDEL_"EQU_!RXDEL(*-XERRM)_^1_(ALF_!Z,_)Z_^1XMEND_"EQU_!XMEND(*-XERRM-3)_^1*_]_^1RERRM_"ALF_!0,0_^1_(NUM_!0,0_^1_(ADC_!2*RMEND_^€€1_(ALF_!Z, XREC ERR = Z_^1_(ALF_!Z,_)Z_^1RMEND_"EQU_!RMEND(*-RERRM-3)_^1_(SPC_!2_^1*********_]_^1*_-20-SECOND TIMER INTERRUPT ROUTINE_^1*********_]_^1_(SPC 2_^1TIM20_"0_#0_^1_(ENA_!20_0RESET 20-SECOND TIMER_^1_(LDQ* ATIM20_,SAME INTERRUPT ROUTINE_^1_(IIN_!0_1INHIBIT INTERRUPTS_^1_(RTJ_!TIMENQ_,GO ENQUE REQUEST AGAIN_^1_(LDA_!=XTMESS_+REMIND OPERATOR_^1_(IIN_!0_1INHIBIT INTERRUPTS_€€^1_(RTJ_!TOCNQ_-ADD TO CONSOLE OUTPUT Q_^1_(RTJ_!OCON_.KICK CONSOLE DRIVER_^1_(JMP* (TIM20)_+EXIT_^1*_]_^1TMESS_"ALF_!0,0_^1_(NUM_!0,0_^1_(ADC_!2*TMWD_^1_(ALF_!Z, DATA SET NOT READYZ_^1TMWD_#EQU_!TMWD(*-TMESS-3)_^1_(SPC_!2_^1*_]_^1NL_%ALF_!0,0_^1_(NUM_!0,0,2_^1_(NUM_!$2000_^1_(SPC_!3_^1MTPOK_"ALF_!0,0_^1_(NUM_!0,0_^1_(ADC_!2*NTPOK_^1*_]_^1TPOK_#ALF_!0,0_^1_(ALF_!$, COMMUNICATIONS €€LINE ESTABLISHED$_^1_(EQU_!NTPOK(*-TPOK)_^1*_]_^1*_]_^1MSAL_#ALF_!0,0_^1_(NUM_!0,0_^1_(ADC_!2*NSAL_^1SAL_$ALF_!0,0_^1_(ALF_!$, HASP MULTI-LEAVING REMOTE WORKSTATION$_^1_(EQU_!NSAL(*-SAL)_^1*_]_^1MCN01_"ALF_!0,0_^1_(NUM_!0,0_^1_(ADC_!2*NCN01_^1CN01_#ALF_!0,0_^1_(ALF_!$, REMOTE ID = $_^1RMNO_#ALF_!$,LUP00_!$_^1_(EQU_!NCN01(*-CN01)_^1*_]_^1MCN02_"ALF_!0,0_^1_(NUM_!0,0_^1_(ADC_!2*NCN02€€_^1CN02_#ALF_!0,0_^1_(ALF_!$, ENTER A NEW REMOTE ID OR A CR - $_^1_(EQU_!NCN02(*-CN02)_^1*_]_^1*_-PRE-SIGNON MESSAGE_^1*_]_^1PRE_$ALF_!0,0_^1_(ADC_!0_1BUFFER CHAIN POINTER = 0_^1_(ADC_!NCPRE_-NUMBER OF CHARACTERS IN BUFFER_^1_(ADC_!$14_/STATUS BYTE (DUMMY)_^1PRESI_"ALF_!0,0_^1_(ADC_!$012D_-SOH,ENQ SEQUENCE_^1_(EQU_!NCPRE(**2-PRESI*2)_^1*_]_^1*_-DLE,ACK0 SEQUENCE_^1*_]_^1DLEACK_!ALF€€_!0,0_^1_(ADC_!$1070_-DLE,ACK0_^1*_]_^1*_-SIGNON MESSAGE_^1*_]_^1SIG_$ALF_!0,0_^1_(ADC_!0_1BUFFER CHAIN POINTER = 0 (DUMMY)_^1_(ADC_!SNUM_.NUMBER OF CHARACTERS IN BUFFER_^1_(ADC_!$11_/DUMMY BUFFER + TRANSPARENT TEXT_^1SIGNON_!ALF_!0,0_^1_(ADC_!$1002_-DLE,STX_^1_(NUM_!$A08F,$CFF0_'BCB,FCS(2),GEN. CONTROL TYPE RCB_^1_(NUM_!$C161,$5CE2,$C9C7,$D5D6,$D540 SIGN-ON ID,C'/*SIGNON '_^1_(NUM€€_!$4040,$4040,$4040,$D3E4,$D7F0,$F040 C'_$LUP00 '_^1_(EQU_!RMTID(SIGNON+11)_^1_(NUM_!$C140,$4040,$4040,$4040,$4040,$4040 C'A_*'_^1_(NUM_!$4040,$4040,$4040,$4040,$4040,$4040 C'_+'_^1_(NUM_!$4040,$4040,$4040,$4040,$4040,$4040 C'_+'_^1_(NUM_!$4040,$4040,$4040,$4040,$4040,$4040 C'_+'_^1_(NUM_!$4040,$4040,$4040,$4040,$4040,$4000 C'_*',EOR_^1_(NUM_!$1026_-DLE,ETB_^1_(EQU_!SNUM(**2-SIGNON€N*2)_^1_(EJT_^1_(SPC_!3_^1*_]_^1*_-THIS IS A TEMPORARY REPLY BCT FOR THE PRE-SIGNON MESSAGE_^1*_]_^1XPOOL_"ALF_!0,0_^1_(ADC_!0_1BUFFER CHAIN POINTER = 0000_^1_(ADC_!0_1NUMBER OF CHARACTERS READ BY RIP_^1_(ADC_!0_1STATUS BYTE STORED BY RIP_^1_(BSS_!(TPBSIZ)_*ONE TP BUFFER FOR RESPONSE_^1_(BSS_!(07*TPBSIZ)_^1XEOM_#ALF_!0,0_^1_(END_^__ N