| 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 | \f/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 | \f *0 /ORIGIN FOR BUILD |
| 78 | |
| 79 | -1 /ONE ENTRY POINT |
| 80 | DEVICE RX8E /"RX8E" IS THE GROUP NAME |
| 81 | DEVICE SYS /"SYS" IS THE ENTRY POINT NAME |
| 82 | 4250 /DCB WORD - DEVICE TYPE 25, DIRECTORY DEVICE |
| 83 | 2007 /2000 MEANS SYS HANDLER,7 IS ENTRY POINT OFFSET |
| 84 | 0 /THIS WORD ALWAYS SEEMS TO BE 0 |
| 85 | DECIMAL |
| 86 | 76^26%4 /THE NUMBER OF OS8 BLOCKS ON THE DEVICE |
| 87 | OCTAL |
| 88 | |
| 89 | BOOTST-BOOTND /LENGTH OF THE BOOTSTRAP |
| 90 | \f |
| 91 | RELOC 2 |
| 92 | BOOTST, |
| 93 | X7577, 7577 |
| 94 | SECT, 1 |
| 95 | FAKRET, JMS GET1 |
| 96 | DCA CDF10 |
| 97 | CDF 0 |
| 98 | TAD X7577 |
| 99 | DCA XR |
| 100 | JMS GET1 |
| 101 | JMS GET1 |
| 102 | TAD UNIT |
| 103 | DCA I PUNIT |
| 104 | INIT |
| 105 | JMS I X7577 |
| 106 | XR, 7600+BOOTND-BOOTST-1 /LOC 17 |
| 107 | PUNIT, S4UNIT |
| 108 | |
| 109 | GET1, FAKRET |
| 110 | STL RTL |
| 111 | TAD UNIT |
| 112 | LCD |
| 113 | CLA STL RTL |
| 114 | TAD SECT |
| 115 | JMS LOAD |
| 116 | DCA SECT |
| 117 | CLA IAC |
| 118 | JMS LOAD |
| 119 | HANGGG, SDN |
| 120 | JMP LOAD+1 |
| 121 | SER |
| 122 | SKP |
| 123 | HLT |
| 124 | SNA |
| 125 | JMP I GET1 |
| 126 | CLA STL RTL |
| 127 | LCD |
| 128 | CDF10, CDF 10 |
| 129 | JMS LOAD |
| 130 | DCA I XR |
| 131 | LP, JMP CDF10 |
| 132 | BOOTND, |
| 133 | RELOC |
| 134 | |
| 135 | \f |
| 136 | NOPUNCH |
| 137 | *24 |
| 138 | BOOT, STL RTL |
| 139 | TAD UNIT |
| 140 | LCD |
| 141 | CLA IAC |
| 142 | JMS LOAD |
| 143 | JMS LOAD |
| 144 | CLL RAL |
| 145 | |
| 146 | START, |
| 147 | HANGGG, SDN |
| 148 | JMP LOAD+1 |
| 149 | SER |
| 150 | SNA |
| 151 | SKP CLA |
| 152 | JMP GOODRD |
| 153 | TAD UNIT |
| 154 | CIA |
| 155 | TAD X6030 |
| 156 | DCA UNIT |
| 157 | JMP BOOT |
| 158 | GOODRD, LCD |
| 159 | LP, JMS LOAD |
| 160 | DCA BOOTST |
| 161 | ISZ .-1 |
| 162 | JMP LP |
| 163 | |
| 164 | LOAD, 0 |
| 165 | STR |
| 166 | JMP HANGGG |
| 167 | XDR |
| 168 | JMP I LOAD |
| 169 | UNIT, 7024 |
| 170 | X6030, 6030 |
| 171 | |
| 172 | ENPUNCH |
| 173 | \f *200 |
| 174 | RELOC 7600 |
| 175 | |
| 176 | ZBLOCK 7 /SYSTEM SPACE |
| 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 | SYS, RXSVER |
| 198 | CLL CML CLA RAR /SET LINK=0, AC=4000 |
| 199 | TAD I SYS /TO PUT READ-WRITE BIT TO LINK |
| 200 | S33, AND S70 /KEEP BITS FOR CDF |
| 201 | TAD SCDF0 /ADDING IN CDF LITERAL |
| 202 | DCA BUFCDF /CDF INSTRUCTION TO USER'S BUFFER |
| 203 | CML RTL /FUNCTION CODE, 0=WRITE, 2=READ |
| 204 | DCA FN |
| 205 | RDF /FETCH CALLER'S FIELD |
| 206 | TAD SCDIF0 /MAKE CDF CIF TO HIS FIELD |
| 207 | DCA SRET /FOR RETURN |
| 208 | TAD I SYS /MAKE CONTROL COUNT |
| 209 | S4UNIT, RAL /7004 (7024 FOR UNIT #1) DOUBLES AS |
| 210 | /LITERAL FOR READ-WRITE COMMAND |
| 211 | AND S7600 /MAKE CONTROL COUNT FOR TOTAL |
| 212 | CIA /NUMBER OF WORDS |
| 213 | DCA BC |
| 214 | ISZ SYS |
| 215 | TAD I SYS /FETCH BUFFER ADDRESS |
| 216 | DCA BUF |
| 217 | ISZ SYS |
| 218 | S70, 70 /THIS LITERAL MUST BE AT LOCATION 33! |
| 219 | IFNZRO S70&177-33 <.ERROR.> |
| 220 | TAD I SYS /OS8 BLOCK # |
| 221 | CLL RTL /TIMES 4 TO BE FLOPPY SECTOR # |
| 222 | DCA REC |
| 223 | ISZ SYS /ERROR EXIT FROM I/O CALL |
| 224 | JMS DIVSUB /COMPUTE TRACK/SECTOR FOR FIRST I/O |
| 225 | TAD FN /READ OR WRITE START DIFFERENTLY |
| 226 | SZA CLA /SKIP ON WRITE |
| 227 | JMP STREAD /GO TO READ |
| 228 | / |
| 229 | / WRITE FALLS THRU....... |
| 230 | / |
| 231 | \f/ |
| 232 | / |
| 233 | / TOP OF MAIN PROCESSING LOOP |
| 234 | / |
| 235 | SETSLO, TAD FN /SET SILO TO LOAD-UNLOAD DEPENDING |
| 236 | JMS LDCMD |
| 237 | TAD S7700 /SILO CONTROL COUNT 100 OCTAL |
| 238 | DCA FLPWC |
| 239 | BUFCDF, HLT /CDF TO USER'S BUFFER PLACED HERE |
| 240 | TRLOOP, TAD I BUF /FETCH A WORD IN CASE WRITE |
| 241 | STR /WAIT |
| 242 | JMP .-1 |
| 243 | XDR /AC TO SILO; OR; SILO TO AC |
| 244 | DCA I BUF /PLACE A WORD IN CASE READ; WRITE REPLACES SAME. |
| 245 | ISZ BUF /MOVE TO NEXT BUFFER LOCATION (MAY SKIP) |
| 246 | S77, 77 /LITERAL 77, EXECUTES AS A NOP |
| 247 | ISZ FLPWC /DONE WITH 100 OCTAL SILO OPERATION |
| 248 | JMP TRLOOP /NO |
| 249 | TAD BC /INCREMENT BC BY 77 HERE, AND 1 LATER |
| 250 | TAD S77 |
| 251 | MAGIC, SNA /SKIP UNLESS READ DONE;NO-OP FOR LDCMD! |
| 252 | JMP OKEX /READ EXIT. |
| 253 | DCA BC / |
| 254 | / |
| 255 | / MIDDLE OF MAIN PROCESSING LOOP |
| 256 | / |
| 257 | STREAD, TAD FN /READ STARTS HERE |
| 258 | TAD S4UNIT /SET UP DO DO READ OR WRITE I/O |
| 259 | JMS LDCMD |
| 260 | TAD MQ /LOAD PRECOMPUTED SECTOR INFO |
| 261 | STR |
| 262 | JMP .-1 /IN CASE NOT READY |
| 263 | XDR |
| 264 | S7700, 7700 /CLEAR AC, CAN'T SKIP (XDR LEAVES AC ALONE) |
| 265 | TAD QUO /TRACK |
| 266 | STR /ILLEGAL 7700 ENTRY WILL HANG; THE FUNCTION |
| 267 | JMP .-1 /IS NOT SET UP (LDCMD) |
| 268 | XDR |
| 269 | S7600, 7600 |
| 270 | ISZ REC /MOVE TO NEXT FLOPPY SECTOR |
| 271 | JMS DIVSUB /COMPUTE NEXT TRACK AND SECTOR DURING THIS I/O |
| 272 | TAD MAGIC /WAIT FOR I/O TO COMPLETE |
| 273 | JMS LDCMD |
| 274 | ISZ BC /CHECK FOR WRITE EXIT |
| 275 | JMP SETSLO /NO, BACK TO TOP |
| 276 | OKEX, ISZ SYS /BUMP TO REGULAR EXIT |
| 277 | SRET, HLT /CDF CIF FOR USER'S CALLING FIELD |
| 278 | JMP I SYS /GONE |
| 279 | / |
| 280 | \f/ |
| 281 | / |
| 282 | / LITERALS |
| 283 | / |
| 284 | SM15, -15 |
| 285 | SCDF0, CDF 0 |
| 286 | 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 | DIVSUB, 0 |
| 299 | DCA QUO /INIT QUOTIENT FOR DIVIDE |
| 300 | TAD REC /RECORD # MASSAGED IN AC |
| 301 | DIVLP, SNL /LINK USAGE REVERSED FROM RICHIE'S CODE |
| 302 | ISZ QUO /ISZ EVERY OTHER TIME, ==DIVIDE BY 26 |
| 303 | TAD SM15 /THE -13 DECIMAL |
| 304 | SMA /SKIP ON DONE |
| 305 | JMP DIVLP /MORE |
| 306 | RAL /LINK USAGE REVERSED; INTERLEAVE!! |
| 307 | TAD S33 /ADD 233 (200 IRREL) MAKING SECTOR |
| 308 | DCA MQ |
| 309 | JMP I DIVSUB /LEAVING LINK AND AC 0 |
| 310 | / |
| 311 | / LDCMD |
| 312 | / |
| 313 | FLPWC=. /COUNTER IN ENTRY POINT FOR SILO LOOP ONLY |
| 314 | LDCMD, 0 |
| 315 | SDN /WAIT |
| 316 | JMP .-1 |
| 317 | LCD /COMMAND FROM AC, WHICH IS CLEARED |
| 318 | SER /SKIP IF ERROR (I/O ONLY) |
| 319 | JMP I LDCMD /OK, RETURN |
| 320 | CLL CML CLA RAR /CONVENTIONAL ERROR RETURN 4000 IN AC |
| 321 | 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 | \f |