1 2 /OS/8 FILE SYSTEM 3 /SHEET 0 4 / 3 JUL 69 RBH 5 6 /ADDITIONAL DEFINITIONS FOR MACRO-8M 7 8 /TC01 DECTAPE CONTROL 9 DTRA= 6761 10 DTCA= 6762 11 DTXA= 6764 12 DTLA= 6766 13 DTSF= 6771 14 DTRB= 6772 15 DTLB= 6774 16 17 FIXTAB 18 19 20 /OS/8 FILE SYSTEM 21 /SHEET 1 22 /28 MAR 69 RBH 23 / 24 /PAGE ZERO 25 26 *1 27 00001 7000 INTZ, NOP /MIGHT RUN ON PDP-5 28 00002 5403 JMP I .+1 29 00003 7264 ANSWER 30 31 SCATP, /POINTER TO 32 00004 7304 SCAT=JMP I .; RETURN /GLOBAL INTERRUPT DISMISSAL 33 INTP=5 /POINTER TO NON-FILE-SYSTEM 34 /INTERRUPT HANDLERS 35 TEMP=6 /POINTER FOR INDIRECT ADDRESSING 36 37 XRG1=10 /AUTO-INDEX 38 XRG2=11 /REGISTERS USED 39 40 41 /OS/8 FILE SYSTEM 42 /SHEET 2 43 /24 MAR 69 RBH 44 / 45 /MULTIPROGRAMMING INTERFACE TO FILE SYSTEM 46 47 PAGE 35 48 / 49 /SETUP - COPY ARGS FROM CALLING SEQUENCE AND SET UP 50 / MULTIPROGRAMMING RETURN. USED BY 51 / EXTERNAL ROUTINES INPUT, OUTPUT, ET AL. 52 / 53 54 07200 0000 SETUP, 0 55 07201 3261 DCA SELOC /HOLD POINTER 56 07202 1215 TAD CDF0 /CDF 00 57 07203 6214 RDF /FIND OUT WHO'S CALLING 58 07204 3241 DCA SEA1 /MAKES CDF X0 59 07205 1243 TAD CIF0 /CIF CDF 00 60 07206 6214 RDF /+DATA FIELD 61 07207 3255 DCA OPEXIT /MAKES CIF CDF X0 FOR EXIT 62 07210 1261 TAD SELOC /GET RETURN POINTER 63 07211 7001 IAC /SKIP ARGUMENT 64 07212 3260 DCA OPUSER /COMPLETE RETURN POINTER 65 07213 1661 TAD I SELOC /NOW DEFER TO FIND 66 07214 3261 DCA SELOC /ARG LIST IN CALLING FIELD 67 07215 6201 CDF0, CDF 00 /COME DOWN TO EARTH 68 07216 1321 SEA0, TAD DONE /TEST FOR COMPLETION 69 07217 7700 SMA CLA /WAIT HERE UNTIL 70 07220 5216 JMP .-2 /PREVIOUS OPERATION 71 07221 1322 TAD EFLG /COMPLETE, THEN 72 07222 7440 SZA /LOOK FOR ERRORS 73 07223 5255 JMP OPEXIT /GO RIGHT BACK 74 07224 6002 IOF /SENSITIVE THINGS START HERE 75 07225 3321 DCA DONE /WE AREN'T FINISHED AGAIN! 76 07226 1263 TAD OPFAKE /GIMMICKING POINTERS 77 07227 3004 DCA SCATP /SCAT LINKAGE 78 07230 1600 TAD I SETUP /LOOK FOR ARGUMENT COUNT 79 07231 2200 ISZ SETUP /AND TWEAK RETURN POINTER 80 07232 7450 SNA /ANY ARGUMENTS TO FETCH? 81 07233 5600 JMP I SETUP /NO, SO FINISHED HERE 82 07234 3006 DCA Z TEMP /ALREADY NEGATIVE 83 07235 7240 STA /-1 FOR AUTO-INDEX 84 07236 1600 TAD I SETUP /THIS TELLS WHERE TO PUT THINGS 85 07237 2200 ISZ SETUP /BUMP POINTER 86 07240 3011 DCA Z XRG2 /USE HANDY-DANDY ... 87 88 89 /OS/8 FILE SYSTEM 90 /SHEET 3 91 /24 MAR 69 RBH 92 93 07241 5241 SEA1, JMP . /BECOMES CDF X0 94 07242 1661 TAD I SELOC /LIFT A WORD 95 07243 6203 CIF0, CIF CDF 00 /USED AS CONSTANT 96 07244 3411 DCA I Z XRG2 /STASH IT AWAY 97 07245 2261 ISZ SELOC 98 07246 2006 ISZ Z TEMP /DONE? 99 07247 5241 JMP SEA1 /NOPE. 100 07250 5600 JMP I SETUP /YUP. 101 102 103 07251 7300 OPSCAT, CLA CLL /FIRST TIME SO WE GET BACK O.K. 104 07252 1262 TAD OPREST /RESTORE NORMAL RETURN POINTER 105 07253 3004 DCA SCATP 106 07254 1322 TAD EFLG /CARRY BACK ERROR FLAGS 107 07255 5255 OPEXIT, JMP . /BECOMES CIF CDF X0 108 07256 6001 ION /ALL HELL BREAKS LOOSE HERE 109 07257 5660 JMP I OPUSER 110 07260 0000 OPUSER, 0 /INITIAL MULTIPROG RETURN 111 112 07261 0000 SELOC, 0 /ARGUMENT POINTER 113 07262 7304 OPREST, RETURN /NORMAL INTERRUPT RETURN 114 07263 7251 OPFAKE, OPSCAT /FAKE RETURN, FIRST TIME 115 116 117 /OS/8 FILE SYSTEM 118 /SHEET 4 119 /28 MAR 69 RBH 120 / 121 /INTERRUPT ROUTINES 122 / DF32 DECDISC AND CONTROL 123 / (PROBABLY RF08 DECDISC CONTROL, ALSO) 124 / TC01 DECTAPE CONTROL 125 / (COMPATIBLE ROUTINES EXIST FOR THE 126 / (TYPE 552 DECTAPE CONTROL) 127 128 07264 3317 ANSWER, DCA AC /SAVE AC AND LINK 129 07265 7004 RAL 130 07266 3320 DCA LK 131 07267 1321 TAD DONE /SEE IF FILE SYSTEM THRU 132 07270 7640 SZA CLA /IF SO, FLAGS MIGHT BE SET 133 07271 5405 JMP I Z INTP /THIS MUST BE SOMETHING ELSE 134 07272 7000 NOP /DFSC FOR DISC IN SYSTEM 135 07273 7410 SKP /DFSE FOR DISC 136 07274 5713 JMP I DFWAIT /GETS ALL DISC INTERRUPTS 137 07275 6771 DTSF /DECTAPE INTERRUPT? 138 07276 5405 JMP I Z INTP /NO, SOMETHING ELSE 139 07277 6772 DTRB /GET TAPE STATUS 140 07300 7710 SPA CLA /DECTAPE ERROR? 141 07301 5327 JMP DTERR /YES 142 07302 6764 DTXA /NO,CLEAR FLAGS 143 07303 5715 JMP I DTWAIT /AND SERVICE 144 145 07304 7300 RETURN, CLA CLL 146 07305 1320 TAD LK /RESTORE AC AND LINK 147 07306 7010 RAR 148 07307 1317 TAD AC 149 07310 6244 RMF /RESTORE MEMORY FIELD 150 07311 6001 ION /ASK FOR TROUBLE 151 07312 5400 JMP I Z 0 /RETURN 152 153 07313 0000 DFWAIT, 0 /DECDISC RETURN ADDRESS 154 07314 5404 SCAT /GO PLAY AWHILE 155 156 07315 0000 DTWAIT, 0 /DECTAPE RETURN ADDRESS 157 07316 5404 SCAT /GO OFF SOMEPLACE 158 159 07317 0000 AC, 0 /STORAGE FOR AC 160 07320 0000 LK, 0 /STORAGE FOR LINK 161 162 07321 7777 DONE, 7777 /FILE SYSTEM COMPLETION FLAG 163 07322 0000 EFLG, 0 /FILE SYSTEM ERROR FLAG 164 165 07323 7544 ENDZON, DTTURN /WHERE TO GO ON ENDZONE 166 07324 2300 MPTMSK, 2300 /MARK, PARITY, TIMING MASK 167 07325 7337 RETRY, DTQUIT-1 /WHERE TO GO ON ERRORS 168 07326 7575 RUNFLG, DTRUN /SOFTWARE MOTION FLAG 169 170 /OS/8 FILE SYSTEM 171 /SHEET 5 172 /28 MAR 69 RBH 173 174 07327 6772 DTERR, DTRB /READ ERROR STATUS 175 07330 7006 RTL /LOOK FOR ENDZONE 176 07331 7710 SPA CLA /IS IT? 177 07332 5723 JMP I ENDZON /YES, TRY OTHER WAY 178 07333 6772 DTRB /LOOK FOR TRANSIENT ERRORS 179 07334 0324 AND MPTMSK /MARK, PARITY, TIMING 180 07335 7640 SZA CLA 181 07336 5725 JMP I RETRY /DO COMMAND OVER 182 07337 6772 DTRB /NO, COP OUT 183 07340 3322 DTQUIT, DCA EFLG /SAVE ERROR FLAG DURING STOP 184 07341 7240 STA 185 07342 3726 DCA I RUNFLG /SET STOPPED FLAG 186 07343 6761 DTRA /KILL THE DECTAPE 187 07344 0344 AND . /(=0344): BAD PRACTICE 188 07345 6764 DTXA /GO, WRITE, INT., & FLAGS OFF 189 07346 7410 SKP /CALL IT QUITS 190 07347 3322 DFQUIT, DCA EFLG /DISK QUITS HERE 191 07350 7240 STA /EXIT TO USER 192 07351 3321 DCA DONE /AT ERROR OR COMPLETION 193 07352 5404 SCAT 194 195 /ARGUMENT FETCHING ROUTINE FOR INTERNAL PROCEDURES 196 /USED BY SEVERAL MONITOR ROUTINES AND BY DT(MM)RORW 197 198 07353 0000 GETARG, 0 199 07354 3377 DCA GETCNT /# OF ITEMS 200 07355 1753 TAD I GETARG /DEFER TWICE 201 07356 3006 DCA Z TEMP /TO GET CORRECT POINTER 202 07357 7240 STA /-1 FOR AUTO-INDEX 203 07360 1406 TAD I Z TEMP 204 07361 3011 DCA Z XRG2 205 07362 2353 ISZ GETARG 206 07363 1753 TAD I GETARG /DEFER TWICE FOR 207 07364 3006 DCA Z TEMP /SECOND ARGUMENT 208 07365 7240 STA /-1 FOR AUTO-INDEX 209 07366 1406 TAD I Z TEMP 210 07367 3010 DCA Z XRG1 211 07370 2353 ISZ GETARG 212 07371 1410 GETA1, TAD I Z XRG1 /MOVE LIST OF 213 07372 3411 DCA I Z XRG2 /ARGUMENTS 214 07373 2406 ISZ I Z TEMP /KEEP BUMPING RETURN ADDRESS 215 07374 2377 ISZ GETCNT /UNTIL FINISHED 216 07375 5371 JMP GETA1 217 07376 5753 JMP I GETARG 218 07377 0000 GETCNT, 0 219 220 221 /OS/8 FILE SYSTEM 222 /SHEET 6 223 /23 APR 69 RBH 224 / 225 /ACTUAL READ, WRITE, AND SEARCH ROUTINES 226 227 PAGE 36 228 / 229 /DTRORW - READ OR WRITE ONE BLOCK OF A FILE 230 / TC01 DECTAPE CONTROL 231 / A COMPATIBLE VERSION EXISTS FOR THE 232 / TYPE 552 DECTAPE CONTROL 233 / 234 /CALL: (CLA) TO READ OR (CLA IAC) TO WRITE 235 / JMS DTRORW 236 / (BLOCK #) 237 / (UNIT #) 238 / (MEMORY FIELD) 239 / (CORE ADDRESS) 240 / (FILE LINK) 241 / (RETURN) 242 / 243 244 07400 0000 DTRORW, 0 245 07401 7640 SZA CLA /READ OR WRITE? 246 07402 1242 TAD DTWRIT /WRITE 247 07403 1241 TAD DTREAD /READ 248 07404 3355 DCA DTFUNC /SAVE FOR FUTURE USE 249 07405 1362 TAD DTM4 /4 ARGUMENTS 250 07406 4777 JMS I DTCOPY /PICK UP ARGUMENTS 251 07407 7536 DTSMSK, DTLIST 252 07410 7400 DTRORW 253 07411 2375 ISZ DTRUN /TAPE MOVING? 254 07412 4776 JMS I DTFORK /LET SOMEBODY MULTIPROGRAM 255 07413 1371 TAD DTBLKS /READY FOR ANOTHER BLOCK NOW 256 07414 4243 JMS DTSRCH /GO FIND THE BLOCK 257 07415 3756 DCA I DTWC /ZERO OUT WORD COUNT 258 07416 1355 TAD DTFUNC /PICK UP FUNCTION WORD 259 07417 6764 DTXA /ESTABLISH FUNCTION 260 07420 7240 STA 261 07421 1200 TAD DTRORW /TRANSFER FILE LINK 262 07422 3757 DCA I DTAD /FROM CALLING SEQUENCE 263 264 265 /OS/8 FILE SYSTEM 266 /SHEET 7 267 /23 APR 69 RBH 268 269 07423 6772 DTRB /LOOK OUT FOR SELECT 270 07424 7710 SPA CLA /ERROR FROM WRITE-LOCK 271 07425 5743 JMP I DTTRAP /OOPS! 272 07426 1756 TAD I DTWC /WATCH FOR 273 07427 7650 SNA CLA /WORD COUNT TO CHANGE 274 07430 5226 JMP .-2 /KEEP AT IT 275 07431 1373 TAD DTFLD /NOW MAKE TRANSFER 276 07432 6774 DTLB /SET FIELD NUMBER 277 07433 7240 STA /-1 FOR INDEXING 278 07434 1374 TAD DTLOC 279 07435 3757 DCA I DTAD /ADDRESS OF TRANSFER 280 07436 2200 ISZ DTRORW /STEP OVER CALLING SEQUENCE 281 07437 3375 DCA DTRUN /SET MOVING FLAG 282 07440 5600 JMP I DTRORW /TRANSFER IN PROGRESS 283 284 07441 0130 DTREAD, 130 /(READ,NM).XOR.(SCH,CM) 285 07442 0020 DTWRIT, 150-130 /((WRT,NM).XOR.(SCH,CM))-DTREAD 286 287 288 /OS/8 FILE SYSTEM 289 /SHEET 8 290 /23 APR 68 RBH 291 292 / 293 /DTSRCH - BIDIRECTIONAL SEARCH 294 / USED BY ALL TAPE TWISTING ROUTINES 295 / UNIT # MUST BE AVAILABLE IN DTUNIT 296 / AND RUN FLAG(0:STOPPED,>0:RUNNING) IN DTRUN 297 / IF RUN FLAG IS 0, UNIT WILL BE RESELECTED 298 / 299 /CALL: TAD (BLOCK #) FOR FORWARD FUNCTION 300 / ::OR:: 301 / TAD (-BLOCK #) FOR REVERSE FUNCTION 302 / JMS DTSRCH 303 / (RETURN) AC=0, TAPE SEARCHING, CONTINUOUS MODE, 304 / INTERRUPT ARMED, AT DESIRED 305 / BLOCK IN INDICATED DIRECTION 306 / 307 308 07443 0000 DTSRCH, 0 309 07444 7510 SPA /WHICH DIRECTION? 310 07445 5252 JMP DTSA1 /REVERSE 311 07446 3371 DCA DTBLKS /FORWARD, STORE TEST BLOCK 312 07447 1335 TAD DTRLST /PUT ADDRESS OF FWD FOUND BLOCK 313 07450 3757 DCA I DTAD /IN CURRENT ADDRESS 314 07451 5257 JMP DTSA2 /AND PROCEED 315 07452 7041 DTSA1, CIA /MAKE BLOCK # POSITIVE 316 07453 3370 DCA DTBLKF /STORE REVERSE TEST BLOCK 317 07454 1336 TAD DTLIST /PUT ADDRESS OF REV FOUND BLOCK 318 07455 3757 DCA I DTAD /IN CURRENT ADDRESS 319 07456 7326 CLA STL RTL /+2 320 07457 1207 DTSA2, TAD DTSMSK /+POINTER TO STATUS A MASKS 321 07460 3011 DCA Z XRG2 /USE AUTO-INDEX FOR EFFICIENCY 322 07461 1375 TAD DTRUN /LOOK TO SEE IF NEW TRANSFER 323 07462 7740 SMA SZA CLA /OTHERWISE CONTINUE SAME UNIT 324 07463 5270 JMP DTSA3 /CONTINUING 325 07464 1372 TAD DTUNIT /SELECT THE TRANSPORT 326 07465 7112 CLL RTR 327 07466 7012 RTR /MOVE # TO BITS 0,2 328 07467 6766 DTLA /SELECT TRANSPORT 329 07470 6761 DTSA3, DTRA /FIND OUT WHAT'S GOING ON 330 07471 0411 AND I Z XRG2 /BITS TO BE TURNED OFF 331 07472 6764 DTXA /TURN THEM OFF 332 07473 6761 DTRA /LOOK AGAIN 333 07474 7040 CMA /NOT STATUS 334 07475 0411 AND I Z XRG2 /BITS TO BE TURNED ON 335 07476 6764 DTXA /TURN THEM ON. UNIT # UNCHANGED 336 07477 6774 DTLB /SET FIELD 0 337 07500 7240 STA /SEARCH ONE BLOCK 338 07501 3756 DTSA4, DCA I DTWC /SET WORD COUNT 339 340 341 /OS/8 FILE SYSTEM 342 /SHEET 9 343 /23 APR 69 RBH 344 345 07502 4776 DTSA5, JMS I DTFORK /DALLY AROUND 'TIL BLOCK COMES UP 346 07503 1371 TAD DTBLKS /COMPARE 347 07504 7041 CIA /SOUGHT AND FOUND 348 07505 1370 TAD DTBLKF /BLOCKS 349 07506 7510 SPA /KEEP GOING SAME DIRECTION? 350 07507 5301 JMP DTSA4 /YES 351 07510 7450 SNA /CHANGE DIRECTION? 352 07511 5643 JMP I DTSRCH /NO, AT DESIRED BLOCK 353 07512 7001 IAC /YES, OVERSHOOT 354 07513 7040 CMA /BY 2 BLOCKS 355 07514 3756 DCA I DTWC /SET WORD COUNT 356 07515 1360 TAD DTC400 /CHANGE DIRECTION 357 07516 6764 DTXA 358 07517 4776 DTSA6, JMS I DTFORK /DO SOMETHING ELSE FOR A WHILE 359 07520 1370 TAD DTBLKF /COMPARE 360 07521 7001 IAC /FOUND AND 361 07522 7040 CMA /SOUGHT 362 07523 1371 TAD DTBLKS /BLOCKS OFFSET BY TWO 363 07524 7500 SMA /BACK FAR ENOUGH? 364 07525 5330 JMP DTSA7 /YES, GO AROUND AGAIN 365 07526 3756 DCA I DTWC /NO, BACK SOME MORE 366 07527 5317 JMP DTSA6 /IN THIS LOOP 367 07530 7040 DTSA7, CMA /TEST THE BLOCK PRECEDING 368 07531 3756 DCA I DTWC /THE ONE WE WANT 369 07532 1360 TAD DTC400 /CHANGE DIRECTION 370 07533 6764 DTXA 371 07534 5302 JMP DTSA5 372 373 374 /OS/8 FILE SYSTEM 375 /SHEET 10 376 /23 APR 69 RBH 377 378 07535 7570 DTRLST, DTBLKF 379 07536 7571 DTLIST, DTBLKS /THIS STAYS WITH NEXT 4 WORDS 380 07537 0460 460 /NOT (SEARCH FWD CM INTERRUPT) 381 07540 0314 314 /SEARCH FWD CM INTERRUPT 382 07541 0060 060 /NOT (SEARCH REV CM INTERRUPT) 383 07542 0714 714 /SEARCH REV CM INTERRUPT 384 385 07543 7337 DTTRAP, DTQUIT-1 /SELECT ERROR 386 387 07544 1361 DTTURN, TAD DTC600 /START UP AGAIN 388 07545 6764 DTXA /GOING THE OTHER WAY 389 07546 7240 STA /PICK UP THE FIRST BLOCK 390 07547 3756 DCA I DTWC /BY SETTING WORD COUNT 391 07550 1776 TAD I DTFORK /CHECK RETURN ADDRESS 392 07551 1363 TAD MWTBKW /WERE WE BACKING UP? 393 07552 7650 SNA CLA 394 07553 5302 JMP DTSA5 /YES, BUT NOT NOW 395 07554 5317 JMP DTSA6 /NO, BUT WE ARE NOW 396 397 07555 0000 DTFUNC, 0 /FUNCTION SELECTED 398 399 07556 7754 DTWC, 7754 400 07557 7755 DTAD, 7755 401 07560 0400 DTC400, 400 402 07561 0600 DTC600, 600 403 07562 7774 DTM4, -4 404 07563 0260 MWTBKW, -DTSA6-1 405 406 *.&7600+170 407 408 07570 0000 DTBLKF, 0 /TC01 AND 552 VERSIONS MATCH HERE 409 07571 0000 DTBLKS, 0 410 07572 0000 DTUNIT, 0 411 07573 0000 DTFLD, 0 412 07574 0000 DTLOC, 0 413 07575 7777 DTRUN, 7777 414 07576 7315 DTFORK, DTWAIT 415 07577 7353 DTCOPY, GETARG 416 417 418 419 /OS/8 FILE SYSTEM 420 /SHEET 11 421 /14 JAN 69 RBH 422 / 423 /ASSEMBLY PARAMETERS 424 425 /ACTIVE FILE DIRECTORY INDEX CONSTANTS: 426 AFDMOD=3 /MODE BIT AND FILE EXTENSION (1 CHAR) 427 AFD1ST=4 /FIRST BLOCK NUMBER 428 AFDBLK=5 /# OF BLOCKS IN FILE 429 AFDUNT=6 /UNIT # OR DEVICE IDENTIFIER 430 AFDNXT=7 /NEXT BLOCK NUMBER 431 AFDFBL=10 /FREE BLOCK BUFFER POINTER FOR DECTAPE 432 /OR FILE NUMBER FOR DECDISC 433 AFDPNT=11 /RUNNING BLOCK POINTER FOR DECTAPE 434 /OR FILE TABLE POINTER FOR DISC 435 FBLEN=177 /LENGTH OF FREE BLOCK LIST BUFFER 436 437 438 /OS/8 FILE SYSTEM 439 /SHEET 12 440 /23 APR 69 RBH 441 / 442 /INPUT COMMAND 443 444 PAGE 34 445 / 446 /INPUT - READ A FILE 447 / 448 /CALL: JMS INPUT 449 / ARGS 450 / . . . 451 /ARGS, (ACTIVE FILE POINTER) 452 / (NUMBER OF BLOCKS TO READ) 453 / (MEMORY FIELD--62X1 = CDF X0) 454 / (BUFFER BASE ADDRESS) 455 / (END-OF-FILE FLAG) 456 / 457 /IF A FILE MARK (FILE LINK=0000) IS ENCOUNTERED, 458 /THE INPUT COMMAND IS TERMINATED AND THE END-OF-FILE 459 /FLAG IS SET TO 7777 TO NOTIFY THE CALLING PROGRAM 460 /THAT END-OF-FILE HAS OCCURRED. AN ATTEMPT TO READ 461 /PAST A FILE MARK WILL RESULT IN AN END-OF-FILE ERROR. 462 /NOTE THAT IT IS POSSIBLE TO READ FROM AN OUTPUT FILE. 463 /THIS FEATURE SHOULD BE USED CAREFULLY. 464 / 465 466 07000 0000 INPUT, 0 467 07001 7200 CLA 468 07002 1200 TAD INPUT 469 07003 4777 JMS I (SETUP) /ESTABLISH MULTIPROGAMMING RETURN 470 07004 7774 0-4 /# OF ARGUMENTS 471 07005 7146 NUMBER /ARG BUFFER 472 07006 1776 TAD I (SEA1) /GET CDF TO CALLING FLD 473 07007 3225 DCA INA3 /FOR RETURNING E-O-F 474 07010 1775 TAD I (SELOC) /ADDRESS OF E-O-F FLAG 475 07011 3352 DCA FINAL /FOR INDIRECT DEPOSIT 476 07012 4317 JMS OSUNIT /PICK THE UNIT 477 07013 4240 JMS INTRF /TRANSFER ARGUMENTS FROM BUFFER 478 07014 4263 INA1, JMS TRANSF /TO READ/WRITE CALL 479 07015 1271 TAD NEXT /LOOK AT FILE LINK 480 07016 7650 SNA CLA /FILE MARK? 481 07017 5222 JMP INA2 /YES, TERMINATE INPUT COMMAND 482 07020 2237 ISZ INPGS /INPUT ALL REQUESTED? 483 07021 5214 JMP INA1 /NO, GO BACK 484 07022 1271 INA2, TAD NEXT /LOOK FOR E-O-F 485 07023 7650 SNA CLA /0 IF END 486 07024 7240 STA /END, RETURN 7777 487 07025 5225 INA3, JMP . /BECOMES CDF X0 488 07026 3752 DCA I FINAL /SIGNAL FILE STATUS 489 07027 6201 CDF 00 /BACK TO EARTH 490 491 /OS/8 FILE SYSTEM 492 /SHEET 13 493 / 3 JUL 69 RBH 494 495 07030 4774 INA4, JMS I (DTWAIT) /GO PLAY OUTSIDE 496 07031 1271 TAD NEXT /FINAL FILE LINK 497 07032 3011 DCA Z XRG2 /DEPOSIT FOR AFDPUT 498 07033 1373 TAD (AFDNXT) /STORE AS NEXT BLOCK 499 07034 4337 JMS AFDPUT /IN A.F.D. 500 07035 5772 JMP I (DTQUIT) /AND SIGNAL COMPLETION 501 502 07036 0200 PAGSIZ, 200 /NUMBER OF WORDS PER BLOCK 503 07037 0000 INPGS, 0 /PAGE COUNTER 504 505 07040 0000 INTRF, 0 /COPY ARGUMENTS FROM BUFFER TO CALL 506 07041 1345 TAD ERRCNT /SET NUMBER OF TIMES 507 07042 3317 DCA OSUNIT /TO RETRY ERRORS 508 07043 2317 ISZ OSUNIT /ERRORS COME BACK HERE 509 07044 7410 SKP /STILL RETRYING 510 07045 5354 JMP FILERR-1 /TOO MANY TIMES 511 07046 1373 TAD (AFDNXT) /ALSO USED BY OUTPUT 512 07047 4332 JMS AFDGET /EXTRACT BLOCK NUMBER 513 07050 7450 SNA /END-OF-FILE? 514 07051 5360 JMP FILERR+3 /YES, ERROR 1 515 07052 3265 DCA BLOCK /DEPOSIT IN CALL 516 07053 1347 TAD PAGES /NUMBER OF PAGES 517 07054 7141 CIA CLL /MAKE NEGATIVE TO 518 07055 3237 DCA INPGS /USE FOR COUNTING 519 07056 1350 TAD EXTADD /COPY FIELD NUMBER 520 07057 3267 DCA TRFFLD 521 07060 1351 TAD BUFFER /AND STARTING ADDRESS 522 07061 3270 DCA TRFLOC 523 07062 5640 JMP I INTRF /ALL COPIED FOR READING, 524 /BUT MORE TO DO FOR WRITING 525 526 07063 0000 TRANSF, 0 /ROUTINE USED BY BOTH 527 07064 4771 JMS I (DTRORW) /INPUT & OUTPUT COMMANDS 528 07065 0000 BLOCK, 0 /BLOCK NUMBER 529 07066 0000 UNIT, 0 /UNIT NUMBER 530 07067 0000 TRFFLD, 0 /MEMORY FIELD 531 07070 0000 TRFLOC, 0 /CORE ADDRESS 532 07071 0000 NEXT, 0 /FILE LINK 533 07072 1270 TAD TRFLOC 534 07073 1236 TAD PAGSIZ /BUMP POINTER BY ONE PAGE 535 07074 3270 DCA TRFLOC 536 07075 1271 TAD NEXT /MOVE FILE LINK 537 07076 3265 DCA BLOCK /FOR NEXT CALL 538 07077 5663 JMP I TRANSF /CLIMB UP ONE STEP 539 540 541 /OS/8 FILE SYSTEM 542 /SHEET 14 543 / 3 JUL 69 RBH 544 545 07100 0000 JOIN, 0 546 07101 7200 CLA 547 07102 1305 TAD .+3 /MAKE RETURN LINKAGE 548 07103 6214 RDF /+00X0 549 07104 3315 DCA REJOIN /=CIF CDF X0 550 07105 6203 CIF CDF 00 /USED AS CONSTANT 551 07106 1770 TAD I (DONE) /LOOK FOR COMPLETION 552 07107 7700 SMA CLA 553 07110 5306 JMP .-2 /INTERRUPT IS ON 554 07111 1767 TAD I (EFLG) /RETURN ERRORS 555 07112 3332 DCA AFDGET /SAVE ERRORS 556 07113 3767 DCA I (EFLG) /AND CLEAR FLAG 557 07114 1332 TAD AFDGET /(AFDGET WON'T BE ACTIVE) 558 07115 5315 REJOIN, JMP . /BECOMES CIF CDF X0 559 07116 5700 JMP I JOIN /RETURN 560 561 07117 0000 OSUNIT, 0 /SELECT I/O DEVICE 562 07120 1366 TAD (AFDUNT) /FROM CODE IN A.F.D. 563 07121 4332 JMS AFDGET /GET THE CODE 564 07122 7550 SPA SNA /DECTAPE IS UNIT # 565 07123 5731 JMP I NONDTA /D=0,R,P=-1,K,T=-2 566 07124 0373 AND (7) /TRIM UNIT # 567 07125 7450 SNA /UNIT 8? 568 07126 1365 TAD (10) /BE KIND TO YOUR 552 569 07127 3266 DCA UNIT /(FOR A DUCK MAY BE . . . 570 07130 5717 JMP I OSUNIT 571 07131 7153 NONDTA, FILERR-2 /POINTER TO NON-DECTAPE I/O 572 573 07132 0000 AFDGET, 0 /GET A WORD FROM A.F.D. 574 07133 1346 TAD NUMBER /INDEX CURRENT FILE POINTER 575 07134 3006 DCA Z TEMP /USE PAGE 0 TEMPORARY 576 07135 1406 TAD I Z TEMP /PICK UP, 577 07136 5732 JMP I AFDGET /RETURN WITH WORD IN AC 578 579 07137 0000 AFDPUT, 0 /PUT SOMETHING INTO A.F.D. 580 07140 1346 TAD NUMBER /INDEX CURRENT FILE POINTER 581 07141 3006 DCA Z TEMP /USE HANDY PAGE 0 LOCATION 582 07142 1011 TAD Z XRG2 /WHAT WE WANT TO PUT THERE 583 07143 3406 DCA I Z TEMP /PUT AWAY IN A.F.D. 584 07144 5737 JMP I AFDPUT /RETURN 585 586 07145 7770 ERRCNT, -10 /TIMES TO RETRY ERRORS 587 588 589 590 /OS/8 FILE SYSTEM 591 /SHEET 14.5 592 / 3 JUL 69 RBH 593 594 07146 0000 NUMBER, 0 /ACTIVE FILE POINTER 595 07147 0000 PAGES, 0 /NUMBER OF PAGES TO TRANSFER 596 07150 0000 EXTADD, 0 /MEMORY FIELD 597 07151 0000 BUFFER, 0 /BEGINNING ADDRESS FOR TRANSFER 598 07152 0000 FINAL, 0 /END-OF-FILE FLAG OR PNTR 599 600 /ERROR CODES FOR FILE SYSTEM: 601 / 602 07153 7201 CLA IAC /6: ILLEGAL DEVICE 603 07154 7001 IAC /5: PERMANENT ERROR 604 07155 7001 FILERR, IAC /4: EXHAUSTED FREE BLOCK LIST 605 07156 7001 IAC /3: INSUFFICIENT FREE BLOCKS 606 07157 7001 IAC /2: ATTEMPT TO WRITE ON INPUT FILE 607 07160 7001 IAC /1: END-OF-FILE 608 07161 5772 JMP I (DTQUIT) /MAKE SOME NOISE ABOUT IT 609 610 07165 0010 PAGE /DUMP LINKS AND LITERALS 07166 0006 07167 7322 07170 7321 07171 7400 07172 7340 07173 0007 07174 7315 07175 7261 07176 7241 07177 7200 611 612 *RETRY /FIX ERROR RETURN POINTER 613 07325 7043 INTRF+3 /TO RE-EXECUTE WHOLE TRANSFER 614 615 616 /OS/8 FILE SYSTEM 617 /SHEET 15 618 /21 APR 69 RBH 619 / 620 /OUTPUT COMMAND 621 622 PAGE 33 623 / 624 /OUTPUT - OUTPUT A FILE 625 / 626 /CALL: JMS OUTPUT 627 / ARGS 628 / . . . 629 /ARGS, (ACTIVE FILE POINTER) 630 / (NUMBER OF PAGES TO WRITE) 631 / (MEMORY FIELD--62X1 = CDF X0) 632 / (BUFFER BASE ADDRESS) 633 / (END-OF-FILE FLAG) 634 / 635 /IF THE LAST ARGUMENT IS NON-ZERO, THE FILE WILL BE 636 /TERMINATED BY A FILE MARK (FILE LINK=0000). OTHERWISE, 637 /A LINK WILL BE CREATED TO THE ANTICIPATED NEXT BLOCK. 638 639 /FURTHER ATTEMPTS TO WRITE IN THAT FILE WILL 640 /CAUSE AN END-OF-FILE ERROR. 641 / 642 643 06600 0000 OUTPUT, 0 644 06601 7200 CLA 645 06602 1200 TAD OUTPUT /SET UP FOR MULTIPROGRAMMING 646 06603 4777 JMS I (SETUP) / 647 06604 7773 0-5 /ARGUMENT COUNT 648 06605 7146 NUMBER /USE BUFFER IN INPUT ROUTINE 649 06606 1376 TAD (AFDMOD) /MAKE SURE THIS IS 650 06607 4775 JMS I (AFDGET) /AN OUTPUT FILE 651 06610 7700 SMA CLA /SIGN BIT TELLS 652 06611 5774 JMP I (FILERR+2) /IT ISN'T 653 06612 4773 JMS I (OSUNIT) /SEE WHAT UNIT 654 06613 1372 TAD (AFDFBL) /PICK UP THE FBL POINTER 655 06614 4775 JMS I (AFDGET) /FROM THE A.F.D. 656 06615 3346 DCA FBLPNT /KEEP IT LOCALLY 657 06616 1746 TAD I FBLPNT /CHECK NUMBER OF FREE BLOCKS 658 06617 1771 TAD I (PAGES) /TO BE SURE WE HAVE ENOUGH 659 06620 7700 SMA CLA /DO WE? 660 06621 5770 JMP I (FILERR+1) /NO, ABORT 661 06622 1367 TAD (AFD1ST) /CHECK THE FIRST BLOCK 662 06623 4775 JMS I (AFDGET) /FROM THE A.F.D. 663 06624 7640 SZA CLA /ZERO SAYS JUST STARTING 664 06625 5234 JMP OUTA1 /ALREADY INITIALIZED 665 666 667 /OS/8 FILE SYSTEM 668 /SHEET 16 669 /23 APR 69 RBH 670 671 06626 4261 JMS FBLGET /GET FIRST FREE BLOCK 672 06627 3011 DCA Z XRG2 /TO STORE AS 673 06630 1367 TAD (AFD1ST) /INITIAL BLOCK 674 06631 4766 JMS I (AFDPUT) /IN A.F.D. 675 06632 1365 TAD (AFDNXT) /STORE IT AS NEXT BLOCK, ALSO 676 06633 4766 JMS I (AFDPUT) /PUTS IT INTO A.F.D. 677 06634 3260 OUTA1, DCA WRDONE /CLEAR LAST-PAGE FLAG AND COUNTER 678 06635 4764 JMS I (INTRF) /SET UP DTRORW CALL 679 06636 2763 OUTA2, ISZ I (INPGS) /LAST PAGE COMING UP? 680 06637 5251 JMP OUTA3 /NO, JUST GET A BLOCK 681 06640 1362 TAD (AFDBLK) /YES, GET BLOCK COUNT 682 06641 4775 JMS I (AFDGET) /FROM A.F.D. 683 06642 1260 TAD WRDONE /ADD # OF BLOCKS JUST WRITTEN 684 06643 7001 IAC /+ THIS NEXT ONE 685 06644 3406 DCA I Z TEMP /BACK INTO BLOCK COUNT 686 06645 7240 STA /JUGGLE A FEW THINGS 687 06646 3260 DCA WRDONE /LIKE THE LAST PAGE FLAG 688 06647 1761 TAD I (FINAL) /TERMINATION FLAG 689 06650 7650 SNA CLA /CONTINUE THE FILE? 690 06651 4261 OUTA3, JMS FBLGET /YES, GET A FREE BLOCK 691 06652 3760 DCA I (NEXT) /FILE LINK 692 06653 7201 CLA IAC /SET WRITE FLAG 693 06654 4757 JMS I (TRANSF) /WRITE BLOCK 694 06655 2260 ISZ WRDONE /LAST PAGE? 695 06656 5236 JMP OUTA2 /NO, CALL FOR ANOTHER 696 06657 5756 JMP I (INA4) /CLEAN UP AND GO HOME 697 698 06660 0000 WRDONE, 0 699 700 701 /OS/8 FILE SYSTEM 702 /SHEET 17 703 /21 APR 69 RBH 704 705 06661 0000 FBLGET, 0 /FREE BLOCK ROUTINE 706 06662 2746 ISZ I FBLPNT /TALLY OF REMAINING BLOCKS 707 06663 7410 SKP /O.K. IF NO SKIP 708 06664 5755 JMP I (FILERR) /OUT OF BLOCKS 709 06665 1354 TAD (-15) /# OF BITS IN AC+LINK 710 06666 3347 DCA BITCNT /SET UP BIT COUNTER 711 06667 1353 TAD (AFDPNT) /LOOK UP FBL POINTER 712 06670 4775 JMS I (AFDGET) /STORED IN A.F.D. 713 06671 1352 FBLA0, TAD (-FBLEN) /MAX NR OF WORDS IN FBL 714 06672 3345 DCA NWDS /COUNTER 715 06673 1260 TAD WRDONE /LOOK FOR LAST PAGE 716 06674 7710 SPA CLA /OF OUTPUT COMING UP 717 06675 2406 ISZ I Z TEMP /YES, SO KICK POINTER 718 06676 1406 TAD I Z TEMP /POINTER PLUS 719 06677 1346 TAD FBLPNT /BASE ADDRESS 720 06700 3343 DCA FBLWRD /GIVES ACTUAL ADDR 721 06701 1406 TAD I Z TEMP /MULTIPLY FBL POINTER 722 06702 7106 CLL RTL /FIRST BY 4 723 06703 3344 DCA BLKNR /SAVE IT 724 06704 1344 TAD BLKNR /MAKE IT X10 725 06705 7104 CLL RAL /THEN ADD X4 TO MAKE 14 726 06706 1344 FBLA1, TAD BLKNR /FIX POINTER 727 06707 3344 DCA BLKNR /NO FREE BLOCKS SEEN 728 06710 2345 ISZ NWDS /STILL MORE AVAILABLE? 729 06711 5314 JMP .+3 /YES 730 06712 3406 DCA I Z TEMP /GO BACK TO BEGINNING 731 06713 5271 JMP FBLA0 /TO LOOK FOR THEM 732 06714 2343 ISZ FBLWRD /POINT TO NEXT DOZEN BLOCKS 733 06715 1743 TAD I FBLWRD /PICK UP 734 06716 7440 SZA /ANY FREE ONES? 735 06717 5324 JMP FBLA3 /YES 736 06720 1351 TAD (14) /NO, JUMP BY A DOZEN BLOCKS 737 06721 5306 JMP FBLA1 /GO BACK FOR MORE 738 739 740 /OS/8 FILE SYSTEM 741 /SHEET 18 742 /21 APR 69 RBH 743 744 06722 7430 FBLA2, SZL /IS THIS BLOCK FREE? 745 06723 5330 JMP FBLA4 /YES 746 06724 2344 FBLA3, ISZ BLKNR /NO 747 06725 7004 RAL /MOVE UP ANOTHER BIT 748 06726 2347 ISZ BITCNT /TALLY THE BIT AND 749 06727 5322 JMP FBLA2 /TRY ANOTHER 750 06730 7100 FBLA4, CLL /GOT THE BLOCK, MARK IT 751 06731 7004 RAL /AND PUT IT BACK 752 06732 2347 ISZ BITCNT /ROTATE 'TIL ZERO 753 06733 5331 JMP .-2 754 06734 3743 DCA I FBLWRD /UPDATE FBL 755 06735 1346 TAD FBLPNT /SUBTRACT BASE ADDR+1 756 06736 7040 CMA /TO GET 0-ORIGIN 757 06737 1343 TAD FBLWRD /AND SAVE POINTER 758 06740 3406 DCA I Z TEMP /FOR NEXT TIME 759 06741 1344 TAD BLKNR /THIS IS OUR BLOCK NUMBER 760 06742 5661 JMP I FBLGET /CARRY IT BACK 761 762 06743 0000 FBLWRD, 0 763 06744 0000 BLKNR, 0 764 06745 0000 NWDS, 0 765 06746 0000 FBLPNT, 0 766 06747 0000 BITCNT, 0 767 768 769 770 06751 0014 $ 06752 7601 06753 0011 06754 7763 06755 7155 06756 7030 06757 7063 06760 7071 06761 7152 06762 0005 06763 7037 06764 7040 06765 0007 06766 7137 06767 0004 06770 7156 06771 7147 06772 0010 06773 7117 06774 7157 06775 7132 06776 0003 06777 7200 AC 7317 AFD1ST 0004 AFDBLK 0005 AFDFBL 0010 AFDGET 7132 AFDMOD 0003 AFDNXT 0007 AFDPNT 0011 AFDPUT 7137 AFDUNT 0006 ANSWER 7264 BITCNT 6747 BLKNR 6744 BLOCK 7065 BUFFER 7151 CDF0 7215 CIF0 7243 DFQUIT 7347 unreferenced DFWAIT 7313 DONE 7321 DTAD 7557 DTBLKF 7570 DTBLKS 7571 DTC400 7560 DTC600 7561 DTCA 6762 unreferenced DTCOPY 7577 DTERR 7327 DTFLD 7573 DTFORK 7576 DTFUNC 7555 DTLA 6766 DTLB 6774 DTLIST 7536 DTLOC 7574 DTM4 7562 DTQUIT 7340 DTRA 6761 DTRB 6772 DTREAD 7441 DTRLST 7535 DTRORW 7400 DTRUN 7575 DTSA1 7452 DTSA2 7457 DTSA3 7470 DTSA4 7501 DTSA5 7502 DTSA6 7517 DTSA7 7530 DTSF 6771 DTSMSK 7407 DTSRCH 7443 DTTRAP 7543 DTTURN 7544 DTUNIT 7572 DTWAIT 7315 DTWC 7556 DTWRIT 7442 DTXA 6764 EFLG 7322 ENDZON 7323 ERRCNT 7145 EXTADD 7150 FBLA0 6671 FBLA1 6706 FBLA2 6722 FBLA3 6724 FBLA4 6730 FBLEN 0177 FBLGET 6661 FBLPNT 6746 FBLWRD 6743 FILERR 7155 FINAL 7152 GETA1 7371 GETARG 7353 GETCNT 7377 INA1 7014 INA2 7022 INA3 7025 INA4 7030 INPGS 7037 INPUT 7000 INTP 0005 INTRF 7040 INTZ 0001 unreferenced JOIN 7100 LK 7320 MPTMSK 7324 MWTBKW 7563 NEXT 7071 NONDTA 7131 NUMBER 7146 NWDS 6745 OPEXIT 7255 OPFAKE 7263 OPREST 7262 OPSCAT 7251 OPUSER 7260 OSUNIT 7117 OUTA1 6634 OUTA2 6636 OUTA3 6651 OUTPUT 6600 PAGES 7147 PAGSIZ 7036 REJOIN 7115 RETRY 7325 RETURN 7304 RUNFLG 7326 SCAT 5404 SCATP 0004 SEA0 7216 unreferenced SEA1 7241 SELOC 7261 SETUP 7200 TEMP 0006 TRANSF 7063 TRFFLD 7067 TRFLOC 7070 UNIT 7066 WRDONE 6660 XRG1 0010 XRG2 0011