Cleanup of typos.
[retro-software/dec/tops10/v1.19.git] / src / cdrser.mac
1 TITLE CDRSER - CARD READER SERVICE\r
2 SUBTTL  8-2-65\r
3 \r
4 \r
5 EXTERNAL STODAT, ADVBFF, IOSET, SETIOD, SETBYT, STOSQD\r
6 EXTERNAL CDRSAV, CDRCHN,  CDRRET,ILLOUT,PIOMOD\r
7 INTERNAL CDRINT\r
8 \r
9 ;DEVICE DATA BLOCK LINKAGE\r
10 EXTERNAL CDRDB,CDRDAT,CRDIS\r
11 ENTRY CDRDSP\r
12 \f\r
13  \r
14 ,CDR PARAMETER ASSIGNMENTS\r
15  \r
16 ,   CDR CONTROL REGISTER\r
17           CRDONE=10;            DONE FLAG\r
18           CRBUSY=20;            BUSY FLAG\r
19           CRBIN=40;             BINARY\r
20           CRALL=100;            ALL FLAG\r
21           CRMISS=200;           DATA MISSED\r
22           CREOC=400;            END OF CARD\r
23           CREOFF=1000;          END OF FILE\r
24           CRERR=2000;           ERROR\r
25           CHCHN=2\r
26 ,   ACCUMULATORS\r
27           CRDAT1=TEM\r
28           CRAC=JDAT\r
29  \r
30 ,   SPECIAL IO STATUS WORD ASSIGNMENTS\r
31           CRMFST=40000;         FIRST CARD\r
32           CRMBIN=200000;        BINARY\r
33           CRMIMG=100000;        IMAGE\r
34 ,   SPECIAL CHARACTERS\r
35           S2EOF=32;             END OF FILE\r
36  \r
37 REPEAT 0,<\r
38 ,CDR DATA BLOCK\r
39 \r
40 CDRDAT:   SIXBIT /CRD\r
41  34\r
42  0\r
43  EXP CDRDSP\r
44  XWD 1400+PROG,10403\r
45  0\r
46  0 \r
47  XWD PROG,0\r
48  0\r
49  0\r
50 CRDIS:    JRST .\r
51 >\r
52 \r
53 ,CDR SERVICE DISPATCH TABLE\r
54 \r
55 CDRDSP:   CONO CR,0 ;RELEASE\r
56           POPJ PDP,;            CLOSE\r
57           JRST ILLOUT           ;OUTPUT\r
58           JRST CRINP;           INPUT\r
59 \f\r
60 CRINP:    TLZ IOS,IOBEG;        VIRGIN DEVICE?  IOBUF:=0\r
61 \r
62 CDRIN1:   TLO IOS,IOFST+CRMFST;         IOFST:=CRMFST:=1\r
63           LDB TAC,PIOMOD\r
64           CAIN TAC,B;           MODE=BINARY?\r
65           TLO IOS,CRMBIN;       YES.  CRMBIN:=1\r
66           CAIN TAC,I;           MODE=IMAGE?\r
67           TLO IOS,CRMIMG;       YES.  CRMIMG:=1\r
68           TRO IOS,IOACT;        IOACT:=1\r
69           MOVEM IOS,DEVIOS(DEVDAT)\r
70           PUSHJ PDP,SETBYT;     TAC0-5:=TAC12-13:=0; TAC6-11:=BYTE SIZE\r
71           MOVEM TAC,DEVPTR(DEVDAT)\r
72           MOVEI TAC, CDRCHN;    ASSIGN PI CHANNEL\r
73           CONO CR,CRBIN+CRALL+CRBUSY(TAC);              SELECT BINARY, ALL\r
74           POPJ PDP,;            RETURN\r
75 \f\r
76 \r
77 CDRINT:   CONSO CR,CRDONE;      DONE FLAG?\r
78           JRST CDRINT\r
79           JSR CDRSAV;                   SAVE ACCUMULATORS AND ESTABLI\r
80           MOVEI DEVDAT,CDRDAT\r
81           MOVE IOS,DEVIOS(DEVDAT)\r
82           CONSZ CR,  CRMISS+CRERR;      DATA MISSED OR ERROR?\r
83           TRO IOS,IODERR;       IODERR:=1\r
84           DATAI CR, CRDAT1;     INPUT INFORMATION\r
85           PUSHJ PDP,IOSET;      PROG:=C(JBTADR18-35), ITEM:= C(DEVPTR)\r
86           TLZN IOS,CRMFST;      FIRST CARD?  CRMFST:=0\r
87           XCT CRDIS             ;NOT FIRST, GO TO SUBROUTINE\r
88 \r
89 CRFIRS:   TRC CRDAT1, 7400;     FIRST COL OF FIRST CARD\r
90           TRCN CRDAT1,7400;     Y, X, 0, OR 1 PUNCH?\r
91           JRST CREOFC;                  NO, END OF FILE CARD\r
92           CONSZ CR, CREOFF;     END OF FILE?\r
93           JRST CREOF;                   YES\r
94           TLNE IOS,CRMBIN;      CRMBIN=1?\r
95           JRST CRFSTB;          YES\r
96           TLNE IOS,CRMIMG;      CRMIMG=1?\r
97           JRST CRFSTI;          YES\r
98           JRST CRFSTL+1\r
99 \r
100 CREOFC:   MOVEI TAC,CDRCHN      ;WAIT FOR EOC\r
101           CONO CR,CRBUSY(TAC)\r
102 CREOF:    TLO IOS, IOEND;       IUEND:=1\r
103           MOVEI DAT,S2EOF\r
104           PUSHJ PDP,STODAT;     STORE END OF FILE CHARACTER\r
105           SKIP\r
106           JRST CRLST2;          BLOCK FULL OR BLOCK COMPLETE\r
107           MOVEI TAC,.;          DATA STATED PROPERLY\r
108           HRRM TAC, CRDIS;      SET DISPATCH TO RETURN HERE.\r
109           CONSO CR, CREOC;      END OF CARD?\r
110           JRST CREXIT;          NO.\r
111           PUSHJ PDP,ADVBFF;     ADVANCE BUFFER\r
112           SKIP\r
113           TLO IOS,IOBEG;        IOBEG:=1\r
114           JRST CROFF\r
115 \r
116 CRFSTL:   PUSHJ PDP, CRITMS;    STORE ITEM\r
117           MOVEI TAC,CRCV;       TAC:=CRCV.   HOLLERITH READ\r
118 \r
119 CRREST:   CONI CR, TAC1\r
120           TRZ TAC1, CRBIN+CRALL+CRBUSY; SELECT HOLERITH, ALL:=0, BUS\r
121           CONO CR, (TAC1);      RESET CARD READER\r
122           JRST CREXT1;          CHANGE DISPATCH AND GO\r
123 \f\r
124 , HOLLERITH READ MODE\r
125 \r
126 CRCV:     MOVE CRAC, [POINT 6,CRDAT1,23];       COLUMNS 79 AND 80\r
127           CONSO CR,CREOC;       END OF CARD?\r
128           MOVE CRAC,CRC1;       NO.  LOOK AT ALL CHARACTERS\r
129           LDBI TAC,CRAC         ;CONVERT HOLLERITH\r
130           IDIVI TAC, 5;         TO ASCII\r
131           LDB DAT, CRCV1(TAC1)\r
132           PUSHJ PDP,STODAT;     STORE IN BU FER\r
133           JRST CREOF+1\r
134           JRST CRINS\r
135           TLNE CRAC, 760000;    WORD COMPLETE?\r
136           JRST CRCV+3;          NO\r
137           CONSZ CR,CREOC;       END OF CARD?\r
138           JRST CRINS;           YES\r
139           MOVEI TAC, CRCV;      NEXT DISPATCH TO CRCV.  HOLLERITH READ\r
140 \r
141 CREXT1:   HRRM TAC, CRDIS;      UPDATE DISPTACHER\r
142           JRST CREXIT\r
143 CRCON:    OCT 6424\r
144 \r
145 CRINS:    MOVE CRAC,CRC2;       BLOCK FULL OR BLOCK COMPLETE  INSERT CR\r
146           LDBI DAT, CRAC\r
147           PUSHJ PDP,STODAT;     STORE CHAR\r
148           SKIP;                 EXIT1.\r
149           JRST CRLST2;          EXIT2.  BLOCK FULL OR BLOCK COMPLETE\r
150           TLNE CRAC,760000;     THATS ALL?\r
151           JRST CRINS+1;         NO\r
152           JRST CRLAST;          END OF CARD\r
153 \f\r
154 , BINARY READ MODE\r
155 \r
156 CRFSTB:   LDB TAC,[POINT 3,CRDAT1,35];  7-9 PUNCH?\r
157           CAIE TAC, 5\r
158           TRO IOS, IOIMPM;      YES.  IOIMPM:=1\r
159           CONI CR, TAC\r
160           TRZ TAC, CRBUSY+CRALL;        BUSY FLAG:=0, ALL FLAG;=0\r
161           CONO CR,(TAC);        RESET TO RE-READ COL 3\r
162           MOVEI TAC, CRCOL2;    DISPATCH TO CRCOL2 ON NEXT INTERRUPT\r
163           JRST CREXT1\r
164 \r
165 CRCOL2:   MOVEI TAC, CRCOL4;    DISPATCH TO CRCOL4 ON NEXT INTERRUPT\r
166           HRRM TAC,CRDIS\r
167 \r
168 CRCOL4:   MOVE DAT, CRDAT1\r
169           PUSHJ PDP, CRITMS+1;          STORE THE WORD FROM DAT\r
170           JRST CREXIT\r
171 \r
172 CRC1:     POINT 6,CRDAT1\r
173 CRC2:     POINT 7,CRCON,20\r
174 \f\r
175 ,IMAGE READ MODE\r
176 \r
177 CRFSTI:   MOVEI TAC,  .+3;      DISPATCH TO CRFSTI + 3 ON NEXT INTERRUP\r
178           DPB CRDAT1,[POINT 24,CRTEM,23];       SAVE COLUMN 1 AS MI\r
179           JRST CREXT1\r
180 \r
181           PUSHJ PDP, CRITMS;    SET ITEM AND CHECK SIZE\r
182           IOR CRDAT1, CRTEM;    CRTEM12-35:=COL 1 AND 2\r
183           MOVEI TAC, .+2;       DISPATCH TO CRFSTI + 7 ON NEXT INTERRUP\r
184           JRST CRIM1+1\r
185 \r
186           CONI CR, TAC1\r
187           TRZ TAC1, CRBUSY+CRALL;       BUSY FLAG:=ALL FLAG:=0\r
188           CONO CR, (TAC1);      RESET READER ON COL 3\r
189 \r
190 CRIM1:    MOVEI TAC,.;          DISPATCH TO CRIM1 ON NEXT INTERRUPT\r
191           CONSZ CR, CREOC;      END OF CARD?\r
192           JRST CRLAST;          YES\r
193           MOVEM @DEVPTR(DEVDAT)\r
194           AOS DEVPTR(DEVDAT);   INCREMENT ITEM POINTER\r
195           JRST CREXT1\r
196 \r
197 CRITMS:   TLO IOS, IOFST;       IOFST:=1\r
198           PUSHJ PDP, STODAT;    STORE WORD\r
199           JRST CREOF+1\r
200           JRST CREOF+1\r
201           POPJ PDP,;            RETURN\r
202 \r
203 CRCNV:    ASCII ._123456789.\r
204           ASCII .0=@^'\ /ST.\r
205           ASCII .UVWXYZ;,(".\r
206           ASCII .#%-JKLMNOP.\r
207           ASCII .QR:$*[>&+A.\r
208           ASCII :BCDEFGHI?.:\r
209           ASCII :)]<!?:\r
210 \r
211 CRCV1:    POINT 7,CRCNV(TAC),6\r
212           POINT 7,CRCNV(TAC),13\r
213           POINT 7,CRCNV(TAC),20\r
214           POINT 7,CRCNV(TAC),27\r
215           POINT 7,CRCNV(TAC),34\r
216 \f\r
217 CRLAST:   CAIL ITEM,^D82;       C(ITEM)<82?\r
218           JRST CRCONT;          NO\r
219 CRLST0:   PUSHJ PDP,STOSQD;     STORE WORD COUNT\r
220           SKIP\r
221 CRLST2:   PUSHJ PDP,ADVBFF;     ADVANCE BUFFER\r
222           JRST CROFF;           EXIT1.  NECT BUFFER FULL\r
223           MOVEI TAC, CDRCHN\r
224           CONO CR, CRBIN+CRALL+CRBUSY(TAC);     SELECT BINARY, ALL\r
225                                 ,ASSIGN PI CHANNEL\r
226 CRLST1:   TLO IOS,IOFST+CRMFST;         IOFST:=CRMFST:=1\r
227           TLZE IOS, IOW;        IN A WAIT?  IOW:=0\r
228           PUSHJ PDP, SETIOD;    IOWS:=1\r
229 \r
230 CREXIT:   MOVEM IOS,DEVIOS(DEVDAT);     C(CRIOS):=C(IOS)\r
231           MOVEM ITEM, DEVCTR(DEVDAT);   C(CRCTR):=C(ITEM)\r
232           JRST CDRRET;          RESTORE ACCUMULATORS AND DISMISS INTERR\r
233 \r
234 CROFF:    TRZ IOS,IOACT;        IOACT:=0\r
235           CONO CR,0;            CLEAR CDR CONTROL REGISTER\r
236           JRST CRLST1\r
237 \r
238 CRCONT:   MOVEI TAC, CDRCHN;    ASSIGN PI CHANNEL\r
239           CONO CR, CRBIN+CRALL+CRBUSY(TAC);     SELECT BINARY, ALL,\r
240           TLO IOS,CRMFST;       CRMFST:=1\r
241           JRST CREXIT\r
242 \r
243 CRTEM:    0\r
244 END,\r