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