Added SRCCOM.MAC
[retro-software/dec/tops10/v4.5.git] / src / ptrser.mac
1 TITLE PTRSER - PAPER TAPE READER SERVICE ROUTINE FOR BOTH PDP-6 AND PDP-10\r
2 SUBTTL  /GBH/TNM  TS 14 APR 69 V004\r
3 XP      VPTRSR,004\r
4                 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
5 EXTERNAL  STOSQD,ILLOUT\r
6 EXTERNAL STODAT, IOSET, SETBYT, ADVBFF\r
7 EXTERNAL SETIOD, PTRSAV, PTRCHN,PIOMOD\r
8 EXTERNAL SETACT,STOIOS,CPOPJ1,PTRMSK\r
9 INTERNAL PTRINT,PTRDSP\r
10 \r
11 ;PTR DEVICE DATA BLOCK LINKAGE\r
12 \r
13 \r
14 \r
15 \r
16 \r
17 ENTRY PTRSER\r
18 PTRSER:\r
19 \r
20 \r
21 \f,PARAMETER ASSIGNMENTS\r
22 ,   PTR CONTROL REGISTER\r
23         PTRDON=10               ;DONE FLAG\r
24         PTRBSY=20               ;BUSY FLAG\r
25         PTRBIN=40               ;BINARY READ MODE\r
26         POW=400                 ;POWER,  ON=1\r
27 \r
28 ,   SPECIAL IO STATUS WORD ASSIGNMENTS\r
29         IODISC=400000\r
30         PTRFCI=200000\r
31         PTRPOW=100000\r
32 ,   SPECIAL ASCII CHARACTERS\r
33         RUBOUT=177\r
34 \r
35 \r
36 INTERNAL FTCHECK,FTMONP\r
37 IFN FTCHECK+FTMONP,<\r
38 EXTERNAL PTRDDB,PTRIOS,PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1,PTRCON\r
39 >\r
40 IFE FTCHECK+FTMONP,<\r
41 ;PTR DEVICE DATA BLOCK\r
42         INTERN  PTRDDB\r
43 \r
44 PTRDDB:\r
45 PTRDAT: SIXBIT  /PTR/\r
46         XWD     ^D30*HUNGST,41\r
47 PTRIOS: 0\r
48         EXP     PTRDSP\r
49         XWD     DVPTR+DVIN,14403\r
50         0\r
51         0\r
52 PTRADR: XWD     PROG,0\r
53 PTRPTR: 0\r
54 PTRCTR: 0\r
55 PTRSVC: 0\r
56 PTRSV1: 0\r
57 PTRCON: 0\r
58 >\r
59 \f\r
60 \r
61 ,PTR SERVICE DISPATCH TABLE\r
62         JRST PTRINI     ;INITILIZE\r
63         JRST    PTRREL          ;HUNG DEVICE TIME-OUT ERROR.\r
64 PTRDSP: JRST PTRREL             ;RELEASE\r
65         POPJ PDP,               ;CLOSE\r
66         JRST ILLOUT             ;OUTPUT\r
67 \f       TLNN IOS,IOBEG          ;INPUT, VIRGIN DEVICE?\r
68         JRST PTRIN1             ;NO\r
69         TLO IOS,IOFST           ;IOFST:=1. NEXT ITEM WILL BE FIRST ITEM OF A BUFFER\r
70         TLZ IOS,PTRPOW+PTRFCI+IODISC\r
71         PUSHJ PDP,SETBYT        ;TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE\r
72                                 ;TAC14-17:=PROG\r
73         MOVEM TAC,PTRPTR        ;PTRPTR:=C(TAC)\r
74         CONSZ PTR,POW           ;IS POWER ON?\r
75         TLO IOS,PTRPOW          ;YES. PTRPOW:=1\r
76 PTRIN1:\r
77         MOVEI TAC1,PTRBSY\r
78         TLZN IOS,IOBEG          ;VIRGIN?\r
79         MOVEI TAC1,PTRDON       ;NO\r
80 \r
81         TLNN    IOS,PTRPOW\r
82         ANDI TAC1,PTRMSK                ;PTRMSK IS DEFINED IN BUILD AS -1 PDP-6 AND 0 PDP-10\r
83         PUSHJ PDP,SETACT        ;IOACT:=1\r
84         MOVEI TAC,PTRCHN(TAC1)\r
85         LDB TAC1,PIOMOD\r
86         CAIE TAC1,IB            ;IMAGE BINARY?\r
87         CAIN TAC1,B             ;OR BINARY\r
88         IORI TAC,PTRBIN\r
89         HRLI TAC,PTRDON\r
90         STARTDV PTR\r
91         POPJ PDP,\r
92 \f\r
93 PTRINT: CONSO PTR,@PTRCON\r
94         JRST    PTRINT\r
95         SKIPL PTRIOS            ;DISCONNECT REQUEST? (IODISC=1?)\r
96         DATAI PTR,PTRSV1        ;PTRSV1:=DATA ITEM.\r
97         JSR PTRSAV              ;SAVE ACCUMULATORS AND ESTABLISH PDP\r
98         MOVEI DEVDAT,PTRDDB     ;SET UP DEVDAT\r
99         PUSHJ PDP,IOSET         ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR)\r
100                                 ;IOS=C(PTRIOS)\r
101         MOVE DAT,PTRSV1         ;DAT:=DATA ITEM\r
102         CONSO PTR,POW           ;PTR POWER ON?\r
103         JRST PTREND             ;NO\r
104         TLON IOS,PTRPOW         ;PTRPOW=1? PTRPOW:=1\r
105         JRST PTREX1             ;NO\r
106         TLZE IOS,IODISC         ;DISCONNECT REQUEST?\r
107         JRST PTREX              ;YES\r
108         TLZE IOS,PTRFCI         ;IS PTRFCI=1?\r
109         MOVE DAT,PTRSVC         ;YES.  DAT:=C(PTRSVC)\r
110 PTRIN0: TRNE IOS,B              ;MODE=BINARY?\r
111         JRST PTRI0              ;YES\r
112         ANDI DAT,177            ;MASK OUT PARITY BIT\r
113         CAIN DAT,RUBOUT         ;LAST CHAR A RUBOUT?\r
114         JRST PTREX1             ;YES\r
115         JUMPE DAT,PTREX1        ;DAT=0?\r
116 \r
117 PTRI0:  PUSHJ PDP,STODAT        ;NO STORE DATA WORD.\r
118         JFCL                    ;CHECKSUM ERROR\r
119         JRST PTRI1              ;BLOCK FULL OR BLOCK COMPLETE\r
120         JRST PTREX1             ;DATA STORED CORRECTLY.\r
121 \r
122 PTRI1:  PUSHJ PDP,ADVBFF        ;ADVANCE BUFFER\r
123         TLO IOS,IODISC          ;NEXT BUFFER IS FULL.  IODISC:=1\r
124 PTRI2:  TLO IOS,IOFST           ;IOFST:=1, NEXT ITEM IS FIRST ITEM OF A BUFFER.\r
125         TLZE IOS,IOW            ;IN A WAIT? IOW:=0\r
126         PUSHJ PDP,SETIOD        ;IOWS:=1\r
127         JRST PTREX1\r
128 \f,COME HERE WHEN THE READER IS SHUT OFF\r
129 \r
130 \r
131 PTREND: TDZ IOS,[XWD PTRPOW,IOACT]      ;PTRPWO:=0,IOACT:=0\r
132         PUSHJ PDP,PTRREL        ;CLEAR PTR AND CONSO FLAG\r
133         LDB TAC,PIOMOD\r
134         TLO IOS,IOEND+IOBEG\r
135         CAIE TAC,B              ;CHECKSUM BINARY BLOCK ..OF?\r
136         JRST PTREI              ;NO\r
137         TLNN IOS,IOFST          ;IOFST=1?\r
138         TRO IOS,IOIMPM          ;NO. BINARY BLOCK INCOMPLETE.\r
139         JRST PTRI2\r
140 PTREI:  PUSHJ PDP,STOSQD        ;FINISH THE BUFFERE, STORE WORD COUNT\r
141         JFCL\r
142         PUSHJ PDP,ADVBFF        ;ADVANCE BUFFERE\r
143         JFCL\r
144         JRST PTRI2\r
145 \f\r
146 ,DISCONNECT PTR\r
147 PTREX:  SKIPG @PTRADR           ;IOUSE=1?\r
148         JRST PTREX0             ;YES.\r
149         DATAI PTR,DAT\r
150         JRST PTRIN0\r
151 \r
152 PTREX0: DATAI PTR,PTRSVC        ;SAVE LAST DATA WORD FROM PTR\r
153         TLZE IOS,IOW            ;JOB IN AN IO WAIT FOR PTR?\r
154         PUSHJ PDP,SETIOD                ;YES, WAKE UP JOB\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         JRST STOIOS             ;STORE IOS,RESET HUNG DEVICE\r
161                                 ;TIMEOUT COUNT AND DISMISS\r
162 \r
163 PTRINI:\r
164 PTRREL: CONO PTR,0              ;CLEAR PTR CONTROL\r
165         HLLZS PTRCON            ;CLEAR CONSO FLAG\r
166         POPJ PDP,\r
167 \r
168         END\r