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