Initial commit
[retro-software/dec/tops10/v1.19.git] / src / ptrser.mac
1 TITLE PTRSER - PAPER TAPE READER SERVICE ROUTINE\r
2 SUBTTL 8-15-65\r
3 EXTERNAL WSYNC, STOSQD, ILLOUT\r
4 EXTERNAL STODAT, IOSET, SETBYT, CKS12, ADVBFF\r
5 EXTERNAL SETIOD, PTRSAV, PTRCHN, PTRRET,PIOMOD\r
6 INTERNAL PTRINT\r
7 \r
8 ;PTR DEVICE DATA BLOCK LINKAGE\r
9 \r
10 EXTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER,PTRMOD,PTRBUF\r
11 EXTERNAL PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1\r
12 ENTRY PTRDSP\r
13 \f\r
14 \r
15 ,PARAMETER ASSIGNMENTS\r
16 ,   PTR CONTROL REGISTER \r
17           PTRDON=10;            DONE FLAG\r
18           PTRBSY=20;            BUSY FLAG\r
19           PTRBIN=40;            BINARY READ MODE\r
20           POW=400;   POWER.  ON=1\r
21 \r
22 ,   SPECIAL IO STATUS WORD ASSIGMENTS\r
23           PTRERR=2000\r
24           PTRFCI=200000\r
25           PTRPOW=100000\r
26 ,   SPECIAL ASCII CHARACTERS\r
27           NULL=200\r
28           RUBOUT=377\r
29           S2EOF=232;            END OF FILE\r
30 ,   PI CONTROL REGISTER\r
31           PION=200\r
32           PIOFF=400\r
33 \r
34 REPEAT 0,<P\r
35 ,PTR DATA BLOCK\r
36 PTRDAT:   SIXBIT "PTR"\r
37 PTRCHR:   41\r
38 PTRIOS:   0\r
39 PTRSER:   EXP PTRDSP\r
40 PTRMOD:   XWD 1000+PROG,10403\r
41  0\r
42 PTRBUF:   0\r
43 PTRADR:   XWD PROG,0\r
44 PTRPTR:   0\r
45 PTRCTR:   0\r
46 PTRSVC:   0\r
47 PTRSV1:   0\r
48 >\r
49 \r
50 ,PTR SERVICE DISPATCH TABLE\r
51 \r
52 PTRDSP:   JRST PTRREL           ;RELEASE\r
53           POPJ PDP,;            CLOSE\r
54           JRST ILLOUT           ;OUTPUT\r
55           JRST PTRINP;          INPUT\r
56 \f\r
57 \r
58 PTRINP:   TLNN IOS,IOBEG;       VIRGIN DEVICE? (IOBEG=1?)\r
59           JRST PTRIN1;          NO\r
60           TLO IOS,IOFST;    IOFST:=1. NEXT ITEM WILL BE FIRST ITEM\r
61           PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE\r
62 ,                               TAC14-17:=PROG\r
63           MOVEM TAC,PTRPTR;     PTRPTR:=C(TAC)\r
64           CONSZ PTR,POW;        IS POWER ON?\r
65           TLO IOS,PTRPOW;       YES. PTRPOW:=1\r
66 PTRIN1:   TRO IOS,IOACT;        IOACT:=1\r
67           LDB TAC,PIOMOD\r
68           MOVEI TAC1, PTRCHN;   TAC1:=PTR PI CHANNEL ASSIGNME\r
69           CAIN TAC,B;           MODE=BINARY?\r
70           ADDI TAC1,PTRBIN;     YES.  ALPHA/BINARY:=BINARY\r
71           MOVEI TAC,PTRDON  ;SET CONSO INTERRUPT FLAG\r
72           HRRM TAC,PTRINT\r
73           TLZN IOS,IOBEG;       VIRGIN DEVICE? (IOBEG=1?)\r
74           JRST PTRIN4;          NO\r
75           MOVEM IOS,PTRIOS;     PTRIOS:=C(IOS)\r
76           CONO PTR,PTRBSY(TAC1);        PTR BUSY FLAG:=1,ASSIGN INTER\r
77           POPJ PDP,;            INPUT RETURN-VIRGIN DEVICE\r
78 \r
79 PTRIN4:   MOVEM IOS,PTRIOS;     PTRIOS:=C(IOS)\r
80           CONO PTR,PTRDON(TAC1);        PTR DONE FLAG:=1,ASSIGN INTER\r
81           POPJ PDP,\r
82 \f\r
83 \r
84 PTRINT:   CONSO PTR,PTRDON      ;INTERRUPT.  IS DONE FLAG = 1?\r
85           JRST PTRINT           ;NO. IF PTR IS IN FLAG LIST, THIS LOC\r
86           SKIPL PTRIOS          ;DISCONNECT REQUEST? (IODISC=1?)\r
87           DATAI PTR,PTRSV1      ;PTRSV1: = DATA WORD\r
88           JSR PTRSAV            ;SAVE ACCUMULATORS AND ESTABLISH PDP\r
89           MOVEI DEVDAT,PTRDAT   ;DEVDAT: = PTR SIXBIT\r
90           PUSHJ PDP,IOSET       ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR)\r
91           MOVE IOS,PTRIOS       ;IOS:=C(PTRIOS)\r
92           MOVE DAT,PTRSV1       ;DAT:=C(PTRSV1)\r
93           CONSO PTR,POW         ;PTR POWER ON?\r
94           JRST PTREND           ;NO\r
95           TLON IOS,PTRPOW       ;PTRPOW=1? PTRPOW:=1\r
96           JRST PTREX1           ;NO\r
97           TLZE IOS,IODISC\r
98           JRST PTREX\r
99           TLZE IOS,PTRFCI       ;IS PTRFCI=1?\r
100           MOVE DAT,PTRSVC       ;YES.  DAT:=C(PTRSVC)\r
101 PTRIN0:   TRNE IOS,B            ;MODE=BINARY?\r
102           JRST PTRI0            ;YES\r
103           CAIE DAT,NULL         ;LAST CHARACTER NULL OR RUBOUT\r
104           CAIN DAT,RUBOUT\r
105           JRST PTREX1           ;YES\r
106           JUMPE DAT,PTREX1      ;DAT=0?\r
107 \r
108 PTRI0:    PUSHJ PDP,STODAT      ;NO STORE DATA WORD.\r
109           JFCL      ;CHECKSUM ERROR\r
110           JRST PTRI1            ;BLOCK FULL OR BLOCK COMPLETE\r
111           JRST PTREX1           ;DATA STORED CORRECTLY.\r
112 \r
113 PTRI1:    PUSHJ PDP,ADVBFF      ;ADVANCE BUFFER\r
114           TLO IOS,IODISC;       NEXT BUFFER IS FULL. IODISC:=1\r
115           TRNE IOS,IOCON;       NEXT BUFFER IS EMPTY.  CONTINUOUS? (IOC\r
116           TLO IOS,IODISC;       NON-CONT. OPERATION. IODISC:=1\r
117 PTRI2:    TLO IOS,IOFST;        IOFST:=1.  NEXT ITEM IS FIRST ITEM OF A\r
118           TLZE IOS,IOW;         IN A WAIT?  IOW:=0\r
119           PUSHJ PDP,SETIOD;     IOWS:=1\r
120           JRST PTREX1\r
121 \f\r
122 \r
123 ,COME HERE WHEN THE READER IS SHUT OFF\r
124 \r
125 PTREND:   TDZ IOS,[XWD PTRPOW,IOACT]    ;PTRPOW:=0,IOACT:=0\r
126           PUSHJ PDP,PTRREL      ;CLEAR PTR AND CONSO FLAG\r
127           LDB TAC,PIOMOD\r
128           TLO IOS,IOEND         ;IOEND:=1\r
129           TRNE TAC,B            ;MODE=A,AL\r
130           JRST PTREIB           ;NO\r
131           MOVEI DAT,S2EOF;      EOF CHAR\r
132           PUSHJ PDP,STODAT      ;STORE DATA WORD\r
133           JRST PTRI0+1          ;CHECKSUM ERROR\r
134           JRST .+3      ;BLOCK FULL OF BLOCK COMPLETE\r
135 PTREI:    PUSHJ PDP,STOSQD;     FINISH THIS BUFFER, STORE WORD COUNT\r
136           SKIP\r
137           PUSHJ PDP,ADVBFF      ;ADVANCE BUFFER\r
138           SKIP\r
139           JRST PTRI2\r
140 \r
141 PTREIB:   CAIE TAC,B            ;MODE=BINARY?\r
142           JRST PTREI            ;NO\r
143           TLNN IOS,IOFST        ;IOFST=1?\r
144           TRO IOS,PTRERR        ;NO.  PTRERR:=1.  BINARY BLOCK INCOMPLE\r
145           JRST PTRI2\r
146 \f\r
147 \r
148 ,DISCONNECT PTR\r
149 PTREX:    SKIPG @PTRADR         ;IOUSE=1?\r
150           JRST PTREX0           ;YES.\r
151           DATAI PTR,PTRSV1\r
152           JRST PTRIN0\r
153 \r
154 PTREX0:   DATAI PTR,PTRSVC      ;SAVE LAST DATA WORD FROM PTR\r
155           PUSHJ PDP,PTRREL      ;CLEAR PTR AND CONSO FLAG\r
156           TLO IOS,PTRFCI        ;PTRFCI:=1\r
157           TRZ IOS,IOACT         ;IOACT:=0\r
158 \r
159 PTREX1:   MOVEM ITEM,PTRCTR     ;PTRCTR:=C(ITEM)\r
160           MOVEM IOS,PTRIOS      ;PTRIOS:=C(IOS)\r
161           JRST PTRRET           ;RESTORE ACCUMULATORS AND DISMISS INTER\r
162 \r
163           INTERNAL PTRINI\r
164 \r
165 PTRINI:\r
166 PTRREL:   CONO PTR,0            ;CLEAR PTR CONTROL\r
167           HLLZS PTRINT          ;CLEAR CONSO FLAG\r
168           POPJ PDP,\r
169 \r
170           END,\r