software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape4 / RX78B.PA
1 /RX78B
2 /FLOPPY DISK (RX01,RX71) NON-SYSTEM HANDLER FOR OS/8
3 /FOR RXA2 AND RXA3
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /COPYRIGHT (C) 1977 BY DIGITAL EQUIPMENT CORPORATION
13 /
14 /
15 /
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
24 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
25 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
26 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
27 /
28 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
29 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
30 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
31 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
32 /
33 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
34 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
35 /DIGITAL.
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
46 \f/FLOPPY DISK (RX01,RX71) NON-SYSTEM HANDLER FOR OS/8
47
48 /DEFINITIONS OF RX8/E IOT'S
49
50 RXVER= "F&77
51
52 DEVCOD= 750 /DEVICECODE
53
54 LCD= 6001+DEVCOD /LOAD COMMAND REGISTER
55 XDR= 6002+DEVCOD /TRANSFER DATA REGISTER
56 STR= 6003+DEVCOD /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG
57 SER= 6004+DEVCOD /SKIP ON ERROR FLAG, CLEAR FLAG
58 SDN= 6005+DEVCOD /SKIP ON DONE FLAG, CLEAR FLAG
59 INTR= 6006+DEVCOD /INTERRUPT ENABLE/DISABLE
60 INIT= 6007+DEVCOD /INITIALIZE CONTROLLER AND RECALIBRATE DRIVES
61
62
63 /NOTES ON THIS HANDLER:
64
65 /THIS HANDLER READS AND WRITES THE DISK IN "12-BIT" MODE, IN WHICH
66 /ONLY 6 BITS OF EVERY 8-BIT BYTE ARE USED. AN RX01 CARTRIDGE
67 /CONTAINS 494 OS/8 BLOCKS UNDER THIS METHOD
68
69 /TO MAXIMIZE SPEED ON THE DEVICE, THE HANDLER READS AND WRITES DATA
70 /ON A TRACK WITH A TWO-WAY INTERLEAVE - I.E. RECORDS 1-26 ON A TRACK
71 /ARE WRITTEN IN THE SEQUENCE:
72 / 1,3,5,7,9,11,13,15,17,19,21,23,25,2,4,6,8,10,12,14,16,18,20,22,24,26
73
74 /IN THIS WAY THE HANDLER CAN TRANSFER DATA AT A 5KHZ WORD RATE
75
76 /MODIFIED TO ALLOW ADDRESS CALCULATION DURING SECTOR BUFFER
77 /LOAD-UNLOAD.
78 \f *0 /ORIGIN FOR BUILD
79
80 -2 /TWO ENTRY POINTS
81 DEVICE RX01 /"RX01" IS THE GROUP NAME
82 DEVICE RXA2 /"RXA2" IS THE ENTRY POINT NAME
83 4250 /DCB WORD - DEVICE TYPE 25, DIRECTORY DEVICE
84 RXA2&177 /ENTRY POINT OFFSET
85 0 /THIS WORD ALWAYS SEEMS TO BE 0
86 0 /UNUSED FOR NONSYSTEM DEVICE
87
88 DEVICE RX01 /"RX01" IS THE GROUP NAME
89 DEVICE RXA3 /"RXA3" IS THE ENTRY POINT NAME
90 4250 /DCB WORD - DEVICE TYPE 25, DIRECTORY DEVICE
91 RXA3&177 /ENTRY POINT OFFSET
92 0 /THIS WORD ALWAYS SEEMS TO BE 0
93 0 /UNUSED FOR NONSYSTEM DEVICE
94 \f *200 /HANDLER CODE
95
96 BUF, 0 /USER BUFFER POINTER
97 REC, 0 /RX01 RECORD NUMBER BEFORE INTERLEAVING
98 BC, 0 /BLOCK COUNT OF TRANSFER
99 FN, 0 /FUNCTION, 0=WRITE, 2=READ
100
101 FLPWC=. /100 COUNTER FOR SILO OK IN LDCMD ENTRY
102 LDCMD, 0 /WAIT FOR DONE FLAG AND LOAD CMD REG
103 DCA TRANS /SAVE THE NEW COMMAND REG VALUE
104 SDN /WAIT FOR THE DONE FLAG TO COME UP
105 JMP .-1 /BEFORE YOU LOAD THE COMMAND REGISTER
106 DONELP, TAD S7600 /SEE IF THE KEYBOARD BUFFER
107 KRS /CONTAINS A CONTROL/C CHARACTER
108 TAD (-7603 /(WITH OR WITHOUT PARITY)
109 CLL /KEEP LINK CLEAAR
110 SNA CLA
111 KSF /WITH THE FLAG UP.
112 JMP NOTCTC /IF NOT, CONTINUE
113 JMS SELECT /YES, SELECT "A" DRIVES
114 SCDIF0, CDF CIF 0 / RETURN TO OS/8
115 JMP I S7600
116
117 NOTCTC, TAD TRANS /NOW GET THE NEW COMMAND REGISTER CONTENTS
118 LCD /AND LOAD IT.
119 SER /SKIP IF I/O ERROR
120 JMP I LDCMD /AND RETURN
121 JMS SELECT /SELECT "A" DRIVES
122 CLA CLL CML RAR /SET AC TO 4000
123 JMP SRET /TAKE ERROR RETURN
124
125
126 RXA2, RXVER /ENTRY POINT FOR UNIT 2
127 CLA /BE PROTECTIVE
128 S70, 70 /** MUST BE AT 33 ON THIS PAGE**
129 JMP RXCOMN /GO TO COMMON CODE
130
131 IFNZRO S70&177-33 <.ERROR>
132
133 MQ, /DIVIDE TEMPORARY
134 RXA3, RXVER /ENTRY POINT FOR UNIT 3
135 CLA /CAREFUL, CAREFUL!
136 TAD RXA3
137 DCA RXA2 /PUT CALLING ADDR IN KNOWN PLACE
138 TAD DIVLP /GET "20"
139 RXCOMN, TAD DIVRAL /SET AC TO 20*UNIT+4
140 DCA UNIT /SAVE UNIT NUMBER
141 RDF
142 TAD SCDIF0 /REMEMBER CALLING FIELD FOR RETURN
143 DCA SRET
144 IAC
145 JMS SELECT /SELECT "B" DRIVES
146 \f
147 / OVERALL COMMENTS:
148 /
149 / LINK REMAINS 0 THROUGH THE MAIN PROCESSING LOOP
150 / EXCEPT AS MANIPULATED BY DIVSUB
151 /
152 / OVERALL LOOP CONTROL THROUGH BC IS MILDLY ODD.
153 / BC STARTS WITH MINUS COUNT OF THE # OF WORDS TO BE TRANSFERRED.
154 / BC IS INCREMENTED 77 TIMES AT THE SILO CODE, AND 1 TIME AFTER
155 / THE I/O OPERATION.
156 / A READ OPERATION STARTS AND FINISHES AT THE MIDDLE OF THE LOOP.
157 / A WRITE OEPRATION STARTS AT THE TOP, AND FINISHES AT BOTTOM.
158 / THUS, A 1 BLOCK READ INCREMENTS 1, 77, 1, 77 AND EXITS FROM MIDDLE.
159 / AND, A 1 BLOCK WRITE INCREMENTS 77, 1, 77, 1 AND EXITS FROM BOTTOM.
160 /
161 / DIVISION IS CARRIED OUT IN PARALLEL WITH I/O OPERATION BECAUSE OF
162 / TIMING CONSIDERATIONS OF THE VT78.
163 /
164 / THERE IS NO ERROR RETRY, NOT PARTICULARLY CRITICAL FOR A FLOPPY.
165
166 CLL CML CLA RAR /SET LINK=0, AC=4000
167 TAD I SYS /TO PUT READ-WRITE BIT TO LINK
168 S33, AND S70 /KEEP BITS FOR CDF
169 TAD SCDF0 /ADDING IN CDF LITERAL
170 DCA BUFCDF /CDF INSTRUCTION TO USER'S BUFFER
171 CML RTL /FUNCTION CODE, 0=WRITE, 2=READ
172 DCA FN
173 TAD I SYS /MAKE CONTROL COUNT
174 RAL
175 AND S7600 /MAKE CONTROL COUNT FOR TOTAL
176 CIA /NUMBER OF WORDS
177 DCA BC
178 ISZ SYS
179 TAD I SYS /FETCH BUFFER ADDRESS
180 DCA BUF
181 ISZ SYS
182 TAD I SYS /OS8 BLOCK #
183 CLL RTL /TIMES 4 TO BE FLOPPY SECTOR #
184 DCA REC
185 ISZ SYS /ERROR EXIT FROM I/O CALL
186 JMS DIVSUB /COMPUTE TRACK/SECTOR FOR FIRST I/O
187 TAD FN /READ OR WRITE START DIFFERENTLY
188 SZA CLA /SKIP ON WRITE
189 JMP STREAD /GO TO READ
190 /
191 / WRITE FALLS THRU.......
192 /
193 \f/
194 /
195 / TOP OF MAIN PROCESSING LOOP
196 /
197 SETSLO, TAD FN /SET SILO TO LOAD-UNLOAD DEPENDING
198 JMS LDCMD
199 TAD S7700 /SILO CONTROL COUNT 100 OCTAL
200 DCA FLPWC
201 BUFCDF, HLT /CDF TO USER'S BUFFER PLACED HERE
202 TRLOOP, TAD I BUF /FETCH A WORD IN CASE WRITE
203 STR /WAIT
204 JMP .-1
205 XDR /AC TO SILO; OR; SILO TO AC
206 DCA I BUF /PLACE A WORD IN CASE READ; WRITE REPLACES SAME.
207 ISZ BUF /MOVE TO NEXT BUFFER LOCATION (MAY SKIP)
208 S77, 77 /LITERAL 77, EXECUTES AS A NOP
209 ISZ FLPWC /DONE WITH 100 OCTAL SILO OPERATION
210 JMP TRLOOP /NO
211 TAD BC /INCREMENT BC BY 77 HERE, 1 LATER
212 TAD S77 /CHECKING FOR A READ EXIT
213 MAGIC, SNA /IF BC HAS GONE TO ZERO, NO-OP FOR LDCMD
214 JMP OKEX /READ EXIT.
215 DCA BC /REPLACING BC FOR WRITE EXIT CHECK AT LOOP END
216 /
217 / MIDDLE OF MAIN PROCESSING LOOP
218 /
219 STREAD, TAD FN /READ STARTS HERE
220 TAD UNIT /SET UP DO DO READ OR WRITE I/O
221 JMS LDCMD
222 TAD MQ /LOAD PRECOMPUTED SECTOR INFO
223 STR
224 JMP .-1 /IN CASE NOT READY
225 XDR
226 S7700, 7700 /CLEAR AC, CAN'T SKIP (XDR LEAVES AC ALONE)
227 TAD QUO /TRACK
228 STR
229 JMP .-1
230 XDR
231 S7600, 7600
232 ISZ REC /MOVE TO NEXT FLOPPY SECTOR
233 JMS DIVSUB /COMPUTE NEXT TRACK AND SECTOR DURING THIS I/O
234 TAD MAGIC /WAIT FOR I/O TO COMPLETE
235 JMS LDCMD
236 ISZ BC /CHECK FOR WRITE EXIT
237 JMP SETSLO /NO, BACK TO TOP
238 OKEX, ISZ SYS /BUMP TO REGULAR EXIT
239 JMS SELECT /SELECT "A" DRIVES
240 SRET, HLT /CDF CIF FOR USER'S CALLING FIELD
241 JMP I SYS /GONE
242 /
243 UNIT, 0 /UNIT
244 SYS=RXA2
245 /
246 \f/
247 /
248 / LITERALS
249 /
250 SM15, -15
251 SCDF0, CDF 0
252 /
253 / DIVSUB
254 /
255 / MUST ENTER WITH LINK AND AC 0
256 / COMPUTES TRACK IN 'QUO', SECTOR IN 'MQ', FROM # IN 'REC'
257 /
258 / REPEATED SUBTRACTS OF 13 DECIMAL LEAVE THE HIGH N-1 BITS OF
259 / QUOTIENT IN QUO, THE LOW BIT OF QUOTIENT IN LINK, AND THE
260 / REMAINDER IN AC. THE INTERLEAVE IS ACCOMPLISHED BY SHIFTING
261 / LOW QUOTINET BIT INTO LOW REMAINDER BIT.
262 /
263 DIVSUB, 0
264 DCA QUO /INIT QUOTIENT FOR DIVIDE
265 TAD REC /RECORD # MASSAGED IN AC
266 DIVLP, SNL /LINK USAGE REVERSED FROM RICHIE'S CODE
267 ISZ QUO /ISZ EVERY OTHER TIME, <=DIVIDE BY 26
268 TAD SM15 /THE -13 DECIMAL
269 SMA /SKIP ON DONE
270 JMP DIVLP /MORE
271 DIVRAL, RAL /LINK USAGE REVERSED; INTERLEAVE!!
272 TAD S33 /ADD 233 (200 IRREL) MAKING SECTOR
273 DCA MQ
274 JMP I DIVSUB /LEAVING LINK AND AC 0
275 QUO, 0 /DIVIDE TEMP
276 /
277 SELECT=.-1 /ENTRY POINT FOR DRIVES SELECT
278 6750 /SELECT APPROPRIATE DRIVES
279 TAD MAGIC
280 LCD /INITIALIZE THEM
281 JMP I SELECT /DONE
282 /
283 TRANS=DIVSUB /TRANSFER COMMAND
284 /
285 $
286
287 \f