Cleanup more typos.
[retro-software/dec/tops10/v4.5.git] / src / cdrsrx.mac
1 TITLE   CDRSRX - CARD READER SERVICE FOR PDP-10(CR-10)\r
2 SUBTTL  T. WACHS/RCC TS  17 OCT 68  V004\r
3 XP      VCDRSX,004\r
4                 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
5 \r
6 CDRDDB: SIXBIT  /CDR/\r
7         XWD     36*HUNGST,34\r
8 CDRIOS: 0\r
9         CDRDSP\r
10         XWD     DVCDR+DVIN,10403\r
11         0\r
12         0\r
13 CDRIAD: XWD     PROG,0\r
14 CDRPTR: 0\r
15 CDRCTR: 0\r
16 CDRSUM: 0\r
17 CDRCHK: 0\r
18         EXTERN  ADVBFF,CDRCHN,CDRRET,CDRSAV,CPOPJ,CDRBTS\r
19         EXTERN  ILLOUT,NEWBF1,SETIOD,STOIOS,CLRACT,SETACT,ADRERR\r
20 CDR=150\r
21 ;CDRBTS=1670+CDRCHN.... CONO TO READ A CARD\r
22 COD029=5252             ;12-0-2-4-6-8\r
23 CODEOF=7400             ;12-11-0-1\r
24 \r
25 ;BITS IN LH OF IOS\r
26 COLUM1=100\r
27 COLUM2=200\r
28 CR029=400\r
29 FORGET=1000\r
30 IGNRBT=2000\r
31 \r
32 \r
33 ENTRY   CDRSRX          ;THIS NAME LETS BUILD PICK BETWEEN 2 CDRSER'S\r
34 INTERN  CDRDDB,CDRINT,CDRDSP\r
35 \r
36 \r
37 ;DISPATCH TABLE\r
38         JRST    CDROFF+1        ;INITIALIZATION\r
39         JRST    CDRREL          ;HUNG DEVICE\r
40 CDRDSP: JRST    CDRREL          ;RELEASE\r
41         POPJ    PDP,            ;CLOSE\r
42         JRST    ILLOUT          ;OUTPUT IS ILLEGAL\r
43 \fCDRSRX:        TLZN    IOS,IOBEG       ;FIRST TIME THROUGH?\r
44         JRST    CDRGO           ;NO\r
45         TLZ     IOS,CR029+FORGET+IGNRBT ;YES. SET UP FOR 1ST TIME\r
46         TRNE    IOS,10          ;ASCII MODE?\r
47         JRST    .+4             ;NO\r
48         MOVEI   TAC,CDRASC      ;YES. SET UP FOR CODE CONVERSION\r
49         MOVSI   TAC1,700        ;BYTE SIZE =7\r
50         JRST    SETPTR\r
51         MOVEI   TAC,CDRBIN      ;SET UP FOR BINARY\r
52         TRNE    IOS,3           ;REALLY BINARY?\r
53         MOVEI   TAC,CPOPJ       ;IMAGE - NO PROCESSING\r
54         MOVSI   TAC1,1400       ;BYTE SIZE = 12\r
55 SETPTR: MOVEM   TAC1,CDRPTR     ;SET BYTE SIZE\r
56         HRRM    TAC,CDRDIS      ;AND PROCESSING LOC\r
57         MOVEI   TAC,770         ;SET UP INTERRUPT LOC\r
58         HRRM    TAC,CDRINT\r
59 CDRGO:  PUSHJ   PDP,NEWBF1      ;INITIALIZE NEW BUFFER\r
60         JRST    ADRERR          ;ADRESS ERROR\r
61         MOVEI   TAC,(PROG)      ;SET TO RELOCATE ADDRESS\r
62         ADDM    TAC,CDRPTR\r
63         MOVEM   PROG,USEPRG     ;SAVE PROG FOR INTERRUPT ROUTINE\r
64 CDRGO1: TLNE    IOS,IOEND       ;EOF?\r
65         JRST    EOF             ;YES. SHUT DOWN CDR\r
66         TLO     IOS,COLUM1+COLUM2 ;NO. INIT FOR COLUMN 1\r
67         MOVEI   TAC,1670        ;SET UP CONO FOR NEXT CARD\r
68         CONSO   CDR,400100      ;WAS TROUBLE ENCOUNTERED OR CARD READY?\r
69         MOVEI   TAC,370         ;YES. SET CONO FOR READY-TO-READ\r
70         CONO    CDR,CDRCHN(TAC) ;START CARD READER\r
71         TRO     IOS,IOACT       ;CANT USE SETACT AS IT ZEROES IOW\r
72         JRST    STOIOS          ;WHICH MAY BE ON AFTER IGNORING A CARD\r
73 \fEXTERN CDRCHL\r
74 \r
75 CDRINT: CONSO   CDR,0           ;INTERRUPT FOR CDR?\r
76         JRST    .-1             ;NO. GO AWAY\r
77         CONSZ   CDR,270         ;MAYBE. A TRANSIENT INTERRUPT\r
78         JRST    CDINT1          ;YES. DEFINATELY FOR CDR\r
79         CONSZ   CDR,200000      ;NO. RDY-TO-RD ENABLED?\r
80         CONSO   CDR,100         ;AND READY-TO-READ ON?\r
81         JRST    CHKTRB          ;NO. CHECK FOR TROUBLE\r
82         CONO    CDR,CDRBTS      ;YES. TELL CDR TO START READING\r
83         JEN     @CDRCHL         ;AND DISMISS THE INTERRUPT\r
84 CHKTRB: CONSZ   CDR,400000      ;ENABLE FOR TROUBLE?\r
85         CONSO   CDR,400         ;AND TROUBLE OCCURRING?\r
86         JRST    CDRINT+1        ;NO. INTERRUPT IS NOT FOR CDR\r
87 CDINT1: JSR     CDRSAV          ;YES. SAVE ACS\r
88         MOVE    IOS,CDRIOS      ;RESTORE IOS\r
89         CONSO   CDR,10          ;DATA INTERRUPT?\r
90         JRST    NTDATA          ;NO\r
91         DATAI   CDR,DAT         ;YES. READ DATA\r
92         TLNE    IOS,FORGET+IGNRBT ;PROCESS IT?\r
93         JRST    CDRRET          ;NO. DISMISS INTERRUPT\r
94         TLZE    IOS,COLUM1      ;FIRST COLUMN?\r
95         JRST    FSTCOL          ;YES. MAKE SPECIAL CHECKS\r
96 CDRDIS: PUSHJ   PDP,.           ;NO. PROCESS PIECE OF DATA\r
97         IDPB    DAT,CDRPTR      ;STORE IT IN BUFFER\r
98         SOSLE   CDRCTR          ;ROOM FOR MORE?\r
99         POPJ    PDP,            ;YES. EXIT\r
100 IGNORE: TLO     IOS,IGNRBT      ;NO. IGNORE REST OF CARD\r
101 STODIS: MOVEM   IOS,CDRIOS      ;SAVE IOS\r
102         POPJ    PDP,            ;EXIT THE INTERRUPT\r
103 \f;HERE TO PROCESS A BINARY BYTE\r
104 CDRBIN: ADDM    DAT,CDRSUM      ;ADD 12 BITS TO CHECKSUM\r
105         POPJ    PDP,\r
106 \r
107 ;HERE WHEN AN ASCII CHARACTER IS READ\r
108 CDRASC: SETZB   TAC,TAC1\r
109         JUMPE   DAT,CDRAS2      ;0-PICK UP AN ASCII BLANK\r
110         CAIN    DAT,5000\r
111         MOVEI   DAT,4202\r
112         CAIN    DAT,3000\r
113         MOVEI   DAT,2202\r
114         LDB     TAC1,[XWD 110300,DAT]\r
115         TRNE    DAT,3\r
116         TRC     TAC1,7\r
117         TRNE    DAT,74\r
118         TRO     TAC1,10\r
119         TRNE    DAT,314\r
120         TRO     TAC,2\r
121         TRNE    DAT,525\r
122         TRO     TAC,1\r
123         TLNN    IOS,CR029       ;AN 029 CARD READ?\r
124         TRO     TAC1,20         ;NO. BUMP TAC1 TO 026 TABLE\r
125 CDRAS2: LDB     DAT,CRCVPT(TAC) ;PICK UP ASCCII CHAR FROM TABLE\r
126         POPJ    PDP,            ;AND RETURN\r
127 \f;HERE WHEN THE 1ST COLUMN OF A CARD HES BEEN READ\r
128 FSTCOL: CAIN    DAT,CODEOF      ;AN EOF CARD?\r
129         JRST    EOFCRD          ;YES. HANDLE IT\r
130         TRNE    IOS,10          ;NO. ASCII CARD?\r
131         JRST    NOTASC          ;NO\r
132         CAIN    DAT,COD029      ;YES. IS IT AN 029 CARD?\r
133         TLO     IOS,CR029+FORGET ;TES. SET A BIT\r
134 SETIOS: MOVEM   IOS,CDRIOS      ;SAVE IOS\r
135         TLNN    IOS,FORGET      ;FORGET REST OF CARD?\r
136         JRST    CDRDIS          ;NO. PROCESS IT\r
137         JRST    CDRRET          ;YES. DISMISS INTERRUPT\r
138 SETFRG: TLOA    IOS,FORGET       ;SET BIT TO FORGET ABOUT CARD\r
139 NOTASC: TRNN    IOS,7           ;COL 1 OF A NOT ASCII CARD\r
140         JRST    SETIOS          ;IMAGE MODE - NO PROCESSING\r
141         TLZN    IOS,COLUM2      ;COLUMN1?\r
142         JRST    COL2IN          ;NO. COLUMN2 JUST READ\r
143         MOVEI   TAC,-5(DAT)     ;COL1 - IS THERE A 7-9 PUNCH?\r
144         TRNE    TAC,17\r
145         TRO     IOS,IOIMPM      ;NO. SET ERROR BIT\r
146         LSH     DAT,-6          ;COLUMNS 12-3 ARE WORD COUNT\r
147         JUMPE   DAT,SETFRG      ;FORGET CARD IF WRDCNT=0\r
148         PUSH    PDP,DAT         ;SAVE DAT\r
149         IMULI   DAT,3           ;COMPUTE ITEM COUNT\r
150         CAMGE   DAT,CDRCTR      ;MORE THAN THE BUFFER CAN HOLD?\r
151         MOVEM   DAT,CDRCTR      ;NO. SAVE AS REAL COUNT\r
152         POP     PDP,DAT         ;GET WRDCNT\r
153         HRRM    DAT,@CDRPTR     ;IN R.H. OF 1ST DATA WORD OF BUFFER\r
154         TLO     IOS,COLUM1      ;SET TO PICK UP COLUMN2 \r
155         JRST    STODIS          ;STORE IOS AND RETURN\r
156 \r
157 ;HERE WHEN COL 2 OF A BINARY CARD WAS READ\r
158 COL2IN: MOVEM   DAT,CDRCHK      ;COLUMN2 IS CHECKSUM\r
159         HRLM    DAT,@CDRPTR     ;ALSO IN L.H. OF 1ST DATA WORD\r
160         SETZM   CDRSUM          ;ZERO COMPUTED CHKSUM\r
161         JRST    STODIS          ;STORE IOS AND RETURN\r
162 \f;HERE ON A NON-DATA CDR INTERRUPT\r
163 NTDATA: MOVEI   DEVDAT,CDRDDB   ;NO. SET DEVDAT\r
164         MOVE    PROG,USEPRG     ;RESTORE PROG\r
165         CONSO   CDR,20          ;END OF CARD?\r
166         JRST    NOTEOC          ;NO\r
167         TLZE    IOS,FORGET      ;YES. FORGET ABOUT CARD?\r
168         JRST    CDRGO1          ;YES. START READ NEXT CARD\r
169         TRNE    IOS,10          ;BINARY?\r
170         JRST    BINEOC          ;YES. CHECK CHKSUM\r
171         MOVEI   DAT,15          ;NO. INSERT <CR>\r
172         IDPB    DAT,CDRPTR\r
173         MOVEI   DAT,12          ;INSERT <LF>\r
174         IDPB    DAT,CDRPTR\r
175 NXTCRD: TLZ     IOS,IGNRBT      ;SET UP TO READ NEXT CARD\r
176         HRRZ    TAC,CDRPTR      ;LAST ADDRESS\r
177         MOVEI   TAC1,@CDRIAD    ;FIRST ADDRESS (-1)\r
178         SUBI    TAC,1(TAC1)     ;COMPUTE NUMBER OF WORDS STORED\r
179         HRRM    TAC,1(TAC1)     ;STORE IN 1ST WORD OF BUFFER\r
180         TLZE    IOS,IOW         ;IN IO WAIT?\r
181         PUSHJ   PDP,SETIOD      ;YES. TAKE OUT\r
182         PUSHJ   PDP,ADVBFF      ;ADVANCE BUFFERS\r
183         JRST    CDROFF          ;NEXT BUFFER NOT EMPTY\r
184         JRST    CDRGO           ;AVAILABLE - START READ INTO IT\r
185 \r
186 \r
187 ;HERE ON THE END OF A BINARY CARD\r
188 BINEOC: TRNN    IOS,4           ;REALLY BINARY?\r
189         JRST    NXTCRD          ;IMAGE MODE \r
190         MOVE    DAT,[POINT 12,CDRSUM,] ;COMPUTE CHKSUM\r
191         ILDB    TAC,DAT         ;BITS 0-11\r
192         ILDB    TAC1,DAT        ;PLUS 12-23\r
193         ADD     TAC,TAC1\r
194         ILDB    TAC1,DAT        ;PLUS 24-35\r
195         ADD     TAC,TAC1\r
196         TRZE    TAC,770000      ;OVERFLOW?\r
197         AOS     TAC             ;YES. ADD 1\r
198         CAME    TAC,CDRCHK      ;COMPARE WITH CARD'S CHKSUM?\r
199         TRO     IOS,IODTER      ;NO. LIGHT A BIT\r
200         JRST    NXTCRD          ;START READ OF NEXT CARD\r
201 EOFCRD: TLO     IOS,IOEND       ;EOF - LIGHT BIT\r
202         JRST    SETFRG          ;FORGET REST OF CARD\r
203 \fNOTEOC:        CONSZ   CDR,40          ;EOF BUTTON PRESSED?\r
204         JRST    EOF             ;YES.\r
205         CONSZ   CDR,400         ;TROUBLE?\r
206         CONO    CDR,CDRCHN      ;YES.TURN OFF TROUBLE ENABLE\r
207         CONSO   CDR,60200       ;ERROR EXCEPT PICK OR STOP BUTTON?\r
208         JRST    SETRDY          ;NO. GO SET READY-TO-READ INTERRUPT\r
209         TRO     IOS,IODERR      ;YES. SET  ERROR BIT\r
210         JRST    NXTCRD          ;ADVANCE BUFFERS, SET RDY-TO-READ\r
211 EOF:    TLO     IOS,IOEND+IOBEG ;EOF - LIGHT BIT\r
212 CDRREL: HLLZS   CDRINT          ;RESET INTERUPT LOC\r
213 CDROFF: CONO    CDR,10000       ;TURN OFF CDR\r
214         TLZE    IOS,IOW\r
215         PUSHJ   PDP,SETIOD      ;TAKE OUT OF IO WAIT\r
216         JRST    CLRACT          ;ZERO IOACT, STORE IOS AND RETURN\r
217 \r
218 SETRDY: CONO    CDR,10000       ;RESET READ-A-CARD FLOP\r
219         JRST    CDRGO           ;ENABLE FOR READY TO READ\r
220 \fUSEPRG:        0\r
221 \r
222 CRCVPT: XWD     350700+TAC1,CRCVTB\r
223         XWD     260700+TAC1,CRCVTB\r
224         XWD     170700+TAC1,CRCVTB\r
225         XWD     100700+TAC1,CRCVTB\r
226 \r
227 ;CODE CONVERSION FOR THE 029 KEYPUNCH\r
228 \r
229 ;THE FOLLOWING EQUIVALENCES ARE ARTIFICIALLY DEFINED\r
230 \r
231 ;029 KEYTOP     ;ASCII 35       ;ASCII 37\r
232 ;CENT           [               [\r
233 ;0-8-2          ]               ]\r
234 ;VERT BAR       ^               HAT = L.C. VERT BAR\r
235 ;UNDERBAR       _               UNDERBAR\r
236 ;NEGATION       \               TILDE = L.C. NEGATION\r
237 \r
238         ;CHARACTERS     ;ZONE/DIGITS\r
239 CRCVTB: ASCII / 123/    ;N/N-3\r
240         ASCII .0/ST.    ;0/N-3\r
241         ASCII /-JKL/    ;11/N-3\r
242         ASCII /HI[./    ;12,8/N-3\r
243         ASCII /&ABC/    ;12/N-3\r
244         ASCII /QR!$/    ;11,8/N-3\r
245         ASCII /YZ],/    ;0,8/N-3\r
246         ASCII /89:#/    ;8/N-3\r
247         ASCII /4567/    ;N/4-7\r
248         ASCII /UVWX/    ;0/4-7\r
249         ASCII /MNOP/    ;11/4-7\r
250         ASCII /<(+^/    ;12,8/4-7\r
251         ASCII /DEFG/    ;12/4-7\r
252         ASCII /*);\/    ;11,8/4-7\r
253         ASCII /%_>?/    ;0,8/4-7\r
254         ASCII /@'="/    ;8/4-7\r
255 \r
256 ;CODE FOR THE 026 KEYPUNCH A LA H HYMAN\r
257 \r
258         ASCII / 123/    ;N/N-3\r
259         ASCII .0/ST.    ;0/N-3\r
260         ASCII /-JKL/    ;11/N-3\r
261         ASCII /HI?./    ;12,8/N-3\r
262         ASCII /+ABC/    ;12/N-3\r
263         ASCII /QR:$/    ;11,8/N-3\r
264         ASCII /YZ;,/    ;0,8/N-3\r
265         ASCII /89_=/    ;8/N-3\r
266         ASCII /4567/    ;N/4-7\r
267         ASCII /UVWX/    ;0/4-7\r
268         ASCII /MNOP/    ;11/4-7\r
269         ASCII /)]<!/    ;12,8/4-7\r
270         ASCII /DEFG/    ;12/4-7\r
271         ASCII /*[>&/    ;11,8/4-7\r
272         ASCII /("#%/    ;0,8/4-7\r
273         ASCII /@^'\/    ;8/4-7\r
274 \r
275 \r
276 CDREND: END\r
277 \f\r