*SUBR MSGINT/INTERR/ASR/ B.2 PAGE 1
0001 *SUBR MSGINT/INTERR/ASR/ B.2. 11-11-70
0002 *SUBR MSGINT/INTERR/ASR REV B.1. 7.11.70
0003 *SUBR MSGINT/INTERR REV A 28 OKT 70 PL
0004 *SUBROUTINE MSGINT & INTERR.16 OKT 70 PL.
0005 *
0006 * PURPOSE:TYPE EITHER A MESSAGE OR TWO
0007 * ASCII CHARACTERS,OR RECEIVE TWO ASCII
0008 * CHARACTERS ON A INTERRUPT BASE.
0009 *
0010 * USE: LOAD THE ACCUMULATOR WITH TWO
0011 * ASCII CHARACTERS OR THE ADDRESS OF A
0012 * MESSAGE AND CALL"MSGINT".
0013 *
0014 * MSGINT WILL PREPARE THE ASR FOR OUTPUT
0015 * IT STORES THE MESSAGE ADDRESS OR ASCII
0016 * CHARACTERS, CLEARS THE REFERENE CEL
0017 * AND JUMPS BACK TO THE MAIN PROGRAM.
0018 *
0019 * THE MAIN PROGRAM WILL CONTINUE BUT WILL
0020 * BE INTERRUPTED BY "INTERR" FROM TIME TO
0021 * TIME.TO SEND A CHARACTER TO THE ASR
0022 * BUFFER UNTIL A WORD "@@" IS FOUND.THE
0023 * ASR IS THEN PREPARED FOR INPUT AGAIN.
0024 *
0025 * ASR INPUT WILL ALSO CAUSE INTERRUPTS.
0026 * ANY TWO CHARACTERS RECEIVED ARE COMPARED
0027 * WITH THE REFERENCE CELL OR CHECKED FOR
0028 * ASTERISK + ONE CHARACTER.
0029 * CHARACTERS RECEIVED ARE STORED IN THE
0030 * "REC" CEL ('77).
0031 * IF ILLEGAL CHARACTERS ARE TYPED,A "?"
0032 * IS TYPED.
0033 * IN ALL CASES THE CONTROL WILL NOW GO
0034 * BACK TO THE MAIN PROGRAM.
0035 *
0036 * ANY OTHER INTERRUPT ON THE PIL00 LINE
0037 * WILL GIVE CONTROL TO A SUBPROGRAM "INTR"
0038 *
0039 REL
0040 SUBR MSGINT
0041 SUBR INTERR
0042 SUBR ASR
0043 *
0044 00000 0 000000 MSGI DAC **
PREPARE ASR FOR
0045 00001 101400 SMI CHECK FOR
0046 00002 0 01 00005 JMP *+3
ADDRESS OR
0047 00003 0 04 00205 STA CHAR ASCII.
0048 00004 0 02 00207 LDA CHA!
0049 00005 0 04 00212 STA MNR OUTPUT.
0050 00006 34 0104 SKS '104
0051 00007 0 01 00006 JMP *-1
0052 00010 140040 CRA
0053 00011 0 04 00204 STA CHNR
0054 00012 0 04 00074 STA REF CLEAR REFERENCE CELL
0055 00013 14 0104 OCP '104
0056 00014 0 02 00213 LDA OUTP
0057 00015 0 04 00036 STA ASR
*SUBR MSGINT/INTERR/ASR/ B.2 PAGE 2
0058 00016 0 02 00226 LDA =-5
0059 00017 0 04 00211 STA LINE
0060 00020 0 02 00225 LDA =-2
0061 00021 0 04 00210 STA HEAD
0062 00022 -0 01 00000 JMP*
MSGI
0063 *
0064 * ----------------------
0065 * INTERRUPT ROUTINE.
0066 * ----------------------
0067 00023 0 000000 INTE DAC **
0068 00024 0 04 00203 STA SAVA
0069 00025 34 0404 SKS '404
0070 00026 0 01 00036 JMP ASR
0071 00027 54 1500 INA '1500
0072 00030 0 01 00027 JMP *-1
0073 00031 0 03 00224 ANA ='4000
0074 00032 101040 SNZ
0075 00033 0 01 00200 JMP RET
0076 00034 140040 CRA
0077 00035 0 10 00000 CALL INTR
0078 00036 0 00 00000 ASR PZE JUMP INP OR JUMP OUT.
0079 00037 0 02 00204 INP LDA CHNR 1ST OR 2ND CHAR?
0080 00040 100040 SZE
0081 00041 0 01 00073 JMP 2ND
0082 00042 54 1004 INA '1004
READ 1ST CHAR.
0083 00043 000000 HLT
0084 00044 0 04 00077 STA REC SAVE 1ST CHAR.
0085 00045 0 05 00223 ERA ='252
CHECK FOR ASTERISK *
0086 00046 101040 SNZ
0087 00047 0 01 00067 JMP AST1
0088 00050 0 02 00074 LDA REF
0089 00051 0406 70 ARR 8
0090 00052 0 03 00222 ANA ='377
1ST REFERENCE CHAR.
0091 00053 0 07 00077 SUB REC CHAR. RECEIVED EQUAL?
0092 00054 101040 SNZ
0093 00055 0 01 00071 JMP REC0 RECOGNIZED.
0094 00056 0 02 00221 NREC LDA =0
ILLEGAL CHARACTER.
0095 00057 0 04 00204 STA CHNR
0096 00060 14 0104 OCP '104
ASR IN OUTPUTMODE.
0097 00061 0 02 00220 LDA =A
?
0098 00062 74 0004 OTA 4
TYPE A "?"
0099 00063 0 01 00062 JMP *-1
0100 00064 34 0104 SKS '104
WAIT TILL READY.
0101 00065 0 01 00064 JMP *-1
0102 00066 0 01 00171 JMP SCOD
0103 00067 0 02 00221 AST1 LDA =0
CLEAR "REC" CELL
0104 00070 0 04 00077 STA REC
0105 00071 0 12 00204 REC0 IRS CHNR 1ST CHAR.RECOGNI2ED.
0106 00072 0 01 00200 JMP RET RETURN TO MAIN PROGR.
0107 00073 0 02 00077 2ND LDA REC LOAD 1ST CHARACTER.
0108 00074 0406 70 ARR 8
AND SWOP
0109 00075 54 0004 INA 4
READ ALSO 2ND CHAR.
0110 00076 000000 HLT
0111 00077 0 04 00077 STA REC SAVE THE TWO CHAR.
0112 00100 0 07 00074 SUB REF REFERENCE
0113 00101 101040 SNZ
0114 00102 0 01 00110 JMP COMP SET CHAR. COMPLETE.
*SUBR MSGINT/INTERR/ASR/ B.2 PAGE 3
0115 00103 0 02 00077 LDA REC
0116 00104 0406 70 ARR 8
0117 00105 0 03 00222 ANA ='377
1ST CHARACTER
0118 00106 100040 SZE
0119 00107 0 01 00056 JMP NREC IT WAS NOT AN "*"
0120 00110 0 02 00221 COMP LDA =0
0121 00111 0 04 00204 STA CHNR RESET CHARACTERNR.
0122 00112 0 10 00000 CALL LETTER
0123 00113 0 01 00200 JMP RET RETURN TO MAIN PROGRAM
0124 00114 0 02 00210 OUT LDA HEAD
0125 00115 101040 SNZ
0126 00116 0 01 00132 JMP OK
0127 00117 0 06 00217 ADD =1
0128 00120 100040 SZE
0129 00121 0 01 00124 JMP *+3
0130 00122 0 02 00216 LDA ='212
0131 00123 0 01 00125 JMP *+2
0132 00124 0 02 00215 LDA ='215
0133 00125 0 12 00210 IRS HEAD
0134 00126 101000 NOP
0135 00127 74 0004 OTA 4
0136 00130 000000 HLT
0137 00131 0 01 00200 JMP RET
0138 00132 0 02 00204 OK LDA CHNR
0139 00133 100040 SZE
0140 00134 0 01 00151 JMP CH2
0141 00135 -0 02 00212 LDA*
MNR
0142 00136 0 04 00205 STA CHAR
0143 00137 0 07 00206 SUB EOM CHECK END OF MESSAGE.
0144 00140 101040 SNZ
0145 00141 0 01 00171 JMP SCOD
0146 00142 0 02 00205 LDA CHAR
0147 00143 0406 70 ARR 8
0148 00144 74 0004 OTA '4
0149 00145 000000 HLT
0150 00146 0 04 00205 STA CHAR
0151 00147 0 12 00204 IRS CHNR
0152 00150 0 01 00200 JMP RET
0153 00151 0 02 00205 CH2 LDA CHAR
0154 00152 0406 70 ARR 8
0155 00153 74 0004 OTA '4
0156 00154 000000 HLT
0157 00155 0 12 00212 IRS MNR
0158 00156 140040 CRA
0159 00157 0 04 00204 STA CHNR
0160 00160 0 01 00200 JMP RET
0161 00161 0 12 00211 MORE IRS LINE
0162 00162 0 01 00165 JMP *+3
SOME LINEFEEDS AND
0163 00163 0 02 00215 LDA ='215
1 RETURN.
0164 00164 0 01 00166 JMP *+2
0165 00165 0 02 00216 LDA ='212
0166 00166 74 0004 OTA 4
0167 00167 000000 HLT
0168 00170 0 01 00200 JMP RET
0169 00171 0 02 00211 SCOD LDA LINE
0170 00172 100040 SZE
0171 00173 0 01 00161 JMP MORE
*SUBR MSGINT/INTERR/ASR/ B.2 PAGE 4
0172 00174 0 02 00214 LDA INPT ASR OFF AND RESET
0173 00175 0 04 00036 STA ASR
0174 00176 14 0004 OCP 4
0175 00177 101000 NOP
0176 00200 0 02 00203 RET LDA SAVA RESTORE ACCU.
0177 00201 000401 ENB
0178 00202 -0 01 00023 JMP*
INTE -----EXIT----->
0179 00203 000000 SAVA BSZ 1
0180 00204 000000 CHNR BSZ 1
0181 00205 000000 CHAR BSZ 1
0182 00206 140300 EOM BCI 1,@@
END OF MESSAGE
0183 00207 0 000205 CHA! DAC CHAR
0184 00210 000000 HEAD BSZ 1
HEAD LINES
0185 00211 000000 LINE BSZ 1
NUMBER OF LINEFEEDS.
0186 00212 000000 MNR BSZ 1
0187 000074 REF EQU '74
REFERENCE CELL.
0188 000077 REC EQU '77
CHARACTERS RECEIVED.
0189 00213 0 01 00114 OUTP JMP OUT
0190 00214 0 01 00037 INPT JMP INP
0191 00215 000215 END
00216 000212
00217 000001
00220 120240
00221 000000
00222 000377
00223 000252
00224 004000
00225 177776
00226 177773
2ND 000073 ASR 000036 AST1 000067 CH2 000151
CHA! 000207 CHAR 000205 CHNR 000204 COMP 000110
EOM 000206 HEAD 000210 INP 000037 INPT 000214
INTE 000023 LINE 000211 MNR 000212 MORE 000161
MSGI 000000 NREC 000056 OK 000132 OUT 000114
OUTP 000213 REC 000077A
REC0 000071 REF 000074A
RET 000200 SAVA 000203 SCOD 000171
0000 WARNING OR ERROR FLAGS
DAP-16 MOD 2 REV. C 01-26-71