1 /FLOPPY DISK (RX01,RX71) 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 /FLOPPY DISK HANDLER SYSTEM 46 47 /DEFINITIONS OF RX8/E IOT'S 48 49 RXSVER= "E&77 50 51 DEVCOD= 750 /DEVICECODE 52 53 LCD= 6001+DEVCOD /LOAD COMMAND REGISTER 54 XDR= 6002+DEVCOD /TRANSFER DATA REGISTER 55 STR= 6003+DEVCOD /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG 56 SER= 6004+DEVCOD /SKIP ON ERROR FLAG, CLEAR FLAG 57 SDN= 6005+DEVCOD /SKIP ON DONE FLAG, CLEAR FLAG 58 INTR= 6006+DEVCOD /INTERRUPT ENABLE/DISABLE 59 INIT= 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 /MAIN CHANGE FROM RX01SY IS THAT THE NEXT DISK ADDRESS IS 75 /CALCULATED DURING THE DATA TARNSFER TO/FROM THE DISK TO ITS 76 /SECTOR BUFFER. THIS IS NEEDED FOR SLOW 8S !. 77 *0 /ORIGIN FOR BUILD 78 79 000000 7777 -1 /ONE ENTRY POINT 80 000001 2230 DEVICE RX8E /"RX8E" IS THE GROUP NAME 000002 7005 81 000003 2331 DEVICE SYS /"SYS" IS THE ENTRY POINT NAME 000004 2300 82 000005 4250 4250 /DCB WORD - DEVICE TYPE 25, DIRECTORY DEVICE 83 000006 2007 2007 /2000 MEANS SYS HANDLER,7 IS ENTRY POINT OFFSET 84 000007 0000 0 /THIS WORD ALWAYS SEEMS TO BE 0 85 DECIMAL 86 000010 0756 76^26%4 /THE NUMBER OF OS8 BLOCKS ON THE DEVICE 87 OCTAL 88 89 000011 7732 BOOTST-BOOTND /LENGTH OF THE BOOTSTRAP 90 91 RELOC 2 92 BOOTST, 93 000002* 7577 X7577, 7577 94 000003* 0001 SECT, 1 95 000004* 4021 FAKRET, JMS GET1 96 000005* 3044 DCA CDF10 97 000006* 6201 CDF 0 98 000007* 1002 TAD X7577 99 000010* 3017 DCA XR 100 000011* 4021 JMS GET1 101 000012* 4021 JMS GET1 102 000013* 1060 TAD UNIT 103 000014* 3420 DCA I PUNIT 104 000015* 6757 INIT 105 000016* 4402 JMS I X7577 106 000017* 7645 XR, 7600+BOOTND-BOOTST-1 /LOC 17 107 000020* 7623 PUNIT, S4UNIT 108 109 000021* 0004 GET1, FAKRET 110 000022* 7126 STL RTL 111 000023* 1060 TAD UNIT 112 000024* 6751 LCD 113 000025* 7326 CLA STL RTL 114 000026* 1003 TAD SECT 115 000027* 4053 JMS LOAD 116 000030* 3003 DCA SECT 117 000031* 7201 CLA IAC 118 000032* 4053 JMS LOAD 119 000033* 6755 HANGGG, SDN 120 000034* 5054 JMP LOAD+1 121 000035* 6754 SER 122 000036* 7410 SKP 123 000037* 7402 HLT 124 000040* 7450 SNA 125 000041* 5421 JMP I GET1 126 000042* 7326 CLA STL RTL 127 000043* 6751 LCD 128 000044* 6211 CDF10, CDF 10 129 000045* 4053 JMS LOAD 130 000046* 3417 DCA I XR 131 000047* 5044 LP, JMP CDF10 132 BOOTND, 133 RELOC 134 135 136 NOPUNCH 137 *24 138 000024 7126 BOOT, STL RTL 139 000025 1060 TAD UNIT 140 000026 6751 LCD 141 000027 7201 CLA IAC 142 000030 4053 JMS LOAD 143 000031 4053 JMS LOAD 144 000032 7104 CLL RAL 145 146 START, 147 000033 6755 HANGGG, SDN 148 000034 5054 JMP LOAD+1 149 000035 6754 SER 150 000036 7450 SNA 151 000037 7610 SKP CLA 152 000040 5046 JMP GOODRD 153 000041 1060 TAD UNIT 154 000042 7041 CIA 155 000043 1061 TAD X6030 156 000044 3060 DCA UNIT 157 000045 5024 JMP BOOT 158 000046 6751 GOODRD, LCD 159 000047 4053 LP, JMS LOAD 160 000050 3002 DCA BOOTST 161 000051 2050 ISZ .-1 162 000052 5047 JMP LP 163 164 000053 0000 LOAD, 0 165 000054 6753 STR 166 000055 5033 JMP HANGGG 167 000056 6752 XDR 168 000057 5453 JMP I LOAD 169 000060 7024 UNIT, 7024 170 000061 6030 X6030, 6030 171 172 ENPUNCH 173 *200 174 RELOC 7600 175 176 007600* 0000 ZBLOCK 7 /SYSTEM SPACE 007601* 0000 007602* 0000 007603* 0000 007604* 0000 007605* 0000 007606* 0000 177 178 / OVERALL COMMENTS: 179 / 180 / LINK REMAINS 0 THROUGH THE MAIN PROCESSING LOOP 181 / EXCEPT AS MANIPULATED BY DIVSUB 182 / 183 / OVERALL LOOP CONTROL THROUGH BC IS MILDLY ODD. 184 / BC STARTS WITH MINUS COUNT OF THE # OF WORDS TO BE TRANSFERRED. 185 / BC IS INCREMENTED 77 TIMES AT THE SILO CODE, AND 1 TIME AFTER 186 / THE I/O OPERATION. 187 / A READ OPERATION STARTS AND FINISHES AT THE MIDDLE OF THE LOOP. 188 / A WRITE OEPRATION STARTS AT THE TOP, AND FINISHES AT BOTTOM. 189 / THUS, A 1 BLOCK READ INCREMENTS 1, 77, 1, 77 AND EXITS FROM MIDDLE. 190 / AND, A 1 BLOCK WRITE INCREMENTS 77, 1, 77, 1 AND EXITS FROM BOTTOM. 191 / 192 / DIVISION IS CARRIED OUT IN PARALLEL WITH I/O OPERATION BECAUSE OF 193 / TIMING CONSIDERATIONS OF THE VT78. 194 / 195 / THERE IS NO ERROR RETRY, NOT PARTICULARLY CRITICAL FOR A FLOPPY. 196 197 007607* 0005 SYS, RXSVER 198 007610* 7330 CLL CML CLA RAR /SET LINK=0, AC=4000 199 007611* 1607 TAD I SYS /TO PUT READ-WRITE BIT TO LINK 200 007612* 0233 S33, AND S70 /KEEP BITS FOR CDF 201 007613* 1316 TAD SCDF0 /ADDING IN CDF LITERAL 202 007614* 3250 DCA BUFCDF /CDF INSTRUCTION TO USER'S BUFFER 203 007615* 7026 CML RTL /FUNCTION CODE, 0=WRITE, 2=READ 204 007616* 3352 DCA FN 205 007617* 6214 RDF /FETCH CALLER'S FIELD 206 007620* 1317 TAD SCDIF0 /MAKE CDF CIF TO HIS FIELD 207 007621* 3313 DCA SRET /FOR RETURN 208 007622* 1607 TAD I SYS /MAKE CONTROL COUNT 209 007623* 7004 S4UNIT, RAL /7004 (7024 FOR UNIT #1) DOUBLES AS 210 /LITERAL FOR READ-WRITE COMMAND 211 007624* 0303 AND S7600 /MAKE CONTROL COUNT FOR TOTAL 212 007625* 7041 CIA /NUMBER OF WORDS 213 007626* 3351 DCA BC 214 007627* 2207 ISZ SYS 215 007630* 1607 TAD I SYS /FETCH BUFFER ADDRESS 216 007631* 3355 DCA BUF 217 007632* 2207 ISZ SYS 218 007633* 0070 S70, 70 /THIS LITERAL MUST BE AT LOCATION 33! 219 IFNZRO S70&177-33 <.ERROR.> 220 007634* 1607 TAD I SYS /OS8 BLOCK # 221 007635* 7106 CLL RTL /TIMES 4 TO BE FLOPPY SECTOR # 222 007636* 3354 DCA REC 223 007637* 2207 ISZ SYS /ERROR EXIT FROM I/O CALL 224 007640* 4320 JMS DIVSUB /COMPUTE TRACK/SECTOR FOR FIRST I/O 225 007641* 1352 TAD FN /READ OR WRITE START DIFFERENTLY 226 007642* 7640 SZA CLA /SKIP ON WRITE 227 007643* 5267 JMP STREAD /GO TO READ 228 / 229 / WRITE FALLS THRU....... 230 / 231 / 232 / 233 / TOP OF MAIN PROCESSING LOOP 234 / 235 007644* 1352 SETSLO, TAD FN /SET SILO TO LOAD-UNLOAD DEPENDING 236 007645* 4334 JMS LDCMD 237 007646* 1276 TAD S7700 /SILO CONTROL COUNT 100 OCTAL 238 007647* 3334 DCA FLPWC 239 007650* 7402 BUFCDF, HLT /CDF TO USER'S BUFFER PLACED HERE 240 007651* 1755 TRLOOP, TAD I BUF /FETCH A WORD IN CASE WRITE 241 007652* 6753 STR /WAIT 242 007653* 5252 JMP .-1 243 007654* 6752 XDR /AC TO SILO; OR; SILO TO AC 244 007655* 3755 DCA I BUF /PLACE A WORD IN CASE READ; WRITE REPLACES SAME. 245 007656* 2355 ISZ BUF /MOVE TO NEXT BUFFER LOCATION (MAY SKIP) 246 007657* 0077 S77, 77 /LITERAL 77, EXECUTES AS A NOP 247 007660* 2334 ISZ FLPWC /DONE WITH 100 OCTAL SILO OPERATION 248 007661* 5251 JMP TRLOOP /NO 249 007662* 1351 TAD BC /INCREMENT BC BY 77 HERE, AND 1 LATER 250 007663* 1257 TAD S77 251 007664* 7450 MAGIC, SNA /SKIP UNLESS READ DONE;NO-OP FOR LDCMD! 252 007665* 5312 JMP OKEX /READ EXIT. 253 007666* 3351 DCA BC / 254 / 255 / MIDDLE OF MAIN PROCESSING LOOP 256 / 257 007667* 1352 STREAD, TAD FN /READ STARTS HERE 258 007670* 1223 TAD S4UNIT /SET UP DO DO READ OR WRITE I/O 259 007671* 4334 JMS LDCMD 260 007672* 1350 TAD MQ /LOAD PRECOMPUTED SECTOR INFO 261 007673* 6753 STR 262 007674* 5273 JMP .-1 /IN CASE NOT READY 263 007675* 6752 XDR 264 007676* 7700 S7700, 7700 /CLEAR AC, CAN'T SKIP (XDR LEAVES AC ALONE) 265 007677* 1353 TAD QUO /TRACK 266 007700* 6753 STR /ILLEGAL 7700 ENTRY WILL HANG; THE FUNCTION 267 007701* 5300 JMP .-1 /IS NOT SET UP (LDCMD) 268 007702* 6752 XDR 269 007703* 7600 S7600, 7600 270 007704* 2354 ISZ REC /MOVE TO NEXT FLOPPY SECTOR 271 007705* 4320 JMS DIVSUB /COMPUTE NEXT TRACK AND SECTOR DURING THIS I/O 272 007706* 1264 TAD MAGIC /WAIT FOR I/O TO COMPLETE 273 007707* 4334 JMS LDCMD 274 007710* 2351 ISZ BC /CHECK FOR WRITE EXIT 275 007711* 5244 JMP SETSLO /NO, BACK TO TOP 276 007712* 2207 OKEX, ISZ SYS /BUMP TO REGULAR EXIT 277 007713* 7402 SRET, HLT /CDF CIF FOR USER'S CALLING FIELD 278 007714* 5607 JMP I SYS /GONE 279 / 280 / 281 / 282 / LITERALS 283 / 284 007715* 7763 SM15, -15 285 007716* 6201 SCDF0, CDF 0 286 007717* 6203 SCDIF0, CDF CIF 0 287 / 288 / DIVSUB 289 / 290 / MUST ENTER WITH LINK AND AC 0 291 / COMPUTES TRACK IN 'QUO', SECTOR IN 'MQ', FROM # IN 'REC' 292 / 293 / REPEATED SUBTRACTS OF 13 DECIMAL LEAVE THE HIGH N-1 BITS OF 294 / QUOTIENT IN QUO, THE LOW BIT OF QUOTIENT IN LINK, AND THE 295 / REMAINDER IN AC. THE INTERLEAVE IS ACCOMPLISHED BY SHIFTING 296 / LOW QUOTINET BIT INTO LOW REMAINDER BIT. 297 / 298 007720* 0000 DIVSUB, 0 299 007721* 3353 DCA QUO /INIT QUOTIENT FOR DIVIDE 300 007722* 1354 TAD REC /RECORD # MASSAGED IN AC 301 007723* 7420 DIVLP, SNL /LINK USAGE REVERSED FROM RICHIE'S CODE 302 007724* 2353 ISZ QUO /ISZ EVERY OTHER TIME, ==DIVIDE BY 26 303 007725* 1315 TAD SM15 /THE -13 DECIMAL 304 007726* 7500 SMA /SKIP ON DONE 305 007727* 5323 JMP DIVLP /MORE 306 007730* 7004 RAL /LINK USAGE REVERSED; INTERLEAVE!! 307 007731* 1212 TAD S33 /ADD 233 (200 IRREL) MAKING SECTOR 308 007732* 3350 DCA MQ 309 007733* 5720 JMP I DIVSUB /LEAVING LINK AND AC 0 310 / 311 / LDCMD 312 / 313 FLPWC=. /COUNTER IN ENTRY POINT FOR SILO LOOP ONLY 314 007734* 0000 LDCMD, 0 315 007735* 6755 SDN /WAIT 316 007736* 5335 JMP .-1 317 007737* 6751 LCD /COMMAND FROM AC, WHICH IS CLEARED 318 007740* 6754 SER /SKIP IF ERROR (I/O ONLY) 319 007741* 5734 JMP I LDCMD /OK, RETURN 320 007742* 7330 CLL CML CLA RAR /CONVENTIONAL ERROR RETURN 4000 IN AC 321 007743* 5313 JMP SRET /SET CDF AND EXIT 322 / 323 / USE DATA BREAK LOCATIONS FOR TERMPORARIES 324 / 325 MQ=7750 326 BC=7751 327 FN=7752 328 QUO=7753 329 REC=7754 330 BUF=7755 331 332 RELOC 333 334 335 $ BC 7751 BOOT 0024 BOOTND 0050 BOOTST 0002 BUF 7755 BUFCDF 7650 CDF10 0044 DEVCOD 0750 DIVLP 7723 DIVSUB 7720 FAKRET 0004 FLPWC 7734 FN 7752 GET1 0021 GOODRD 0046 HANGGG 0033 INIT 6757 INTR 6756 unreferenced LCD 6751 LDCMD 7734 LOAD 0053 LP 0047 MAGIC 7664 MQ 7750 OKEX 7712 PUNIT 0020 QUO 7753 REC 7754 RXSVER 0005 S33 7612 S4UNIT 7623 S70 7633 S7600 7703 S77 7657 S7700 7676 SCDF0 7716 SCDIF0 7717 SDN 6755 SECT 0003 SER 6754 SETSLO 7644 SM15 7715 SRET 7713 START 0033 unreferenced STR 6753 STREAD 7667 SYS 7607 TRLOOP 7651 UNIT 0060 X6030 0061 X7577 0002 XDR 6752 XR 0017