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