Add README.md
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape4 / RX78B.PA
CommitLineData
7af5ad59
PH
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
50RXVER= "F&77
51
52DEVCOD= 750 /DEVICECODE
53
54LCD= 6001+DEVCOD /LOAD COMMAND REGISTER
55XDR= 6002+DEVCOD /TRANSFER DATA REGISTER
56STR= 6003+DEVCOD /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG
57SER= 6004+DEVCOD /SKIP ON ERROR FLAG, CLEAR FLAG
58SDN= 6005+DEVCOD /SKIP ON DONE FLAG, CLEAR FLAG
59INTR= 6006+DEVCOD /INTERRUPT ENABLE/DISABLE
60INIT= 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
96BUF, 0 /USER BUFFER POINTER
97REC, 0 /RX01 RECORD NUMBER BEFORE INTERLEAVING
98BC, 0 /BLOCK COUNT OF TRANSFER
99FN, 0 /FUNCTION, 0=WRITE, 2=READ
100
101FLPWC=. /100 COUNTER FOR SILO OK IN LDCMD ENTRY
102LDCMD, 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
106DONELP, 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
114SCDIF0, CDF CIF 0 / RETURN TO OS/8
115 JMP I S7600
116
117NOTCTC, 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
126RXA2, RXVER /ENTRY POINT FOR UNIT 2
127 CLA /BE PROTECTIVE
128S70, 70 /** MUST BE AT 33 ON THIS PAGE**
129 JMP RXCOMN /GO TO COMMON CODE
130
131 IFNZRO S70&177-33 <.ERROR>
132
133MQ, /DIVIDE TEMPORARY
134RXA3, 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"
139RXCOMN, 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
168S33, 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/
197SETSLO, TAD FN /SET SILO TO LOAD-UNLOAD DEPENDING
198 JMS LDCMD
199 TAD S7700 /SILO CONTROL COUNT 100 OCTAL
200 DCA FLPWC
201BUFCDF, HLT /CDF TO USER'S BUFFER PLACED HERE
202TRLOOP, 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)
208S77, 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
213MAGIC, 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/
219STREAD, 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
226S7700, 7700 /CLEAR AC, CAN'T SKIP (XDR LEAVES AC ALONE)
227 TAD QUO /TRACK
228 STR
229 JMP .-1
230 XDR
231S7600, 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
238OKEX, ISZ SYS /BUMP TO REGULAR EXIT
239 JMS SELECT /SELECT "A" DRIVES
240SRET, HLT /CDF CIF FOR USER'S CALLING FIELD
241 JMP I SYS /GONE
242/
243UNIT, 0 /UNIT
244SYS=RXA2
245/
246\f/
247/
248/ LITERALS
249/
250SM15, -15
251SCDF0, 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/
263DIVSUB, 0
264 DCA QUO /INIT QUOTIENT FOR DIVIDE
265 TAD REC /RECORD # MASSAGED IN AC
266DIVLP, 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
271DIVRAL, 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
275QUO, 0 /DIVIDE TEMP
276/
277SELECT=.-1 /ENTRY POINT FOR DRIVES SELECT
278 6750 /SELECT APPROPRIATE DRIVES
279 TAD MAGIC
280 LCD /INITIALIZE THEM
281 JMP I SELECT /DONE
282/
283TRANS=DIVSUB /TRANSFER COMMAND
284/
285 $
286
287\f