/4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 1 /4 OS/8 CASSETTE HANDLER / / / / / / / / / /COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / / DEC-S8-UCASA-A-LA / COPYRIGHT 1972 / DIGITAL EQUIPMENT CORPORATION / MAYNARD MASSACHUSETTS 01754 / MOUTH/DORP /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 1-1 IFNDEF CODE 6700 KCLR=CODE^10+6700 /CLEAR ALL 6701 KSDR=CODE^10+6701 /SKIP ON DATA FLAG 6702 KSEN=CODE^10+6702 /SKIP ON ERROR 6703 KSBF=CODE^10+6703 /SKIP ON READY FLAG 6704 KLSA=CODE^10+6704 /LOAD STATUS A 6705 KSAF=CODE^10+6705 /SKIP ON ANY FLAG OR ERROR 6706 KGOA=CODE^10+6706 /ASSERT CONTENTS OF STATUS A AND XFER 6707 KRSB=CODE^10+6707 /READ STATUS B 7002 BSW=7002 /BYTE SWAP [8/E,F ONLY] /REWIND=10 /BACKFIL=30 /WRGAP=40 /BACKBLOCK=50 /SKPFIL=70 /SPECIAL CODES / 0 WRITE EOF / 1 REWIND / 2 BACKBLOCK / 3 SKIPFILE/BACKFILE / 4-7 UNUSED (TAKES LOW ORDER 2 BITS ONLY CURRENTLY) 0003 VERSION="C&77 /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 2 0000 *0 00000 7776 -2 /THERE ARE TWO HANDLERS 00001 2401 2401 00002 7001 7001+CODE 00003 0323 0323 00004 0160 0160+CODE+CODE /CSA0 00005 0270 270 /DEVICE CONTROL BLOCK (TYPE 27) 00006 4007 4000+7 /ENTRY POINT FOR CSA0 00007 0000 ZBLOCK 2 00011 2401 2401 00012 7001 7001+CODE 00013 0323 0323 00014 0161 0161+CODE+CODE /CSA1 00015 0270 270 00016 4001 4000+1 /ENTRY POINT FOR CSA1 00017 0000 ZBLOCK 2 /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 3 0200 *200 00200 3700 K3700, 3700 /MUST BE FIRST LOCATION ON PAGE UNIT, 00201 0003 CSA1, VERSION /ENTRY POINT FOR CSA1 00202 7200 CLA /PROTECT CODE AGAINST IGNORANT USERS 00203 1201 TAD CSA1 /PICK UP ARGUMENTS 00204 3207 DCA CSA0 /VIA CSA0 00205 7125 STL IAC RAL /TAD (3 [8/I,L,E,F] 00206 5211 JMP .+3 /JOIN PROCESSING WITH UNIT 1 00207 0003 CSA0, VERSION /ENTRY POINT FOR CSA0 00210 7326 STL CLA RTL /TAD (2 00211 7002 BSW / [8/E,F] 00212 3201 DCA UNIT /SAVE UNIT (0 IS 200, 1 IS 300) 00213 4352 CS, JMS T /INITIALIZATION; REPLACED BY RDF 00214 1232 TAD KCIF /FORM RETURN FIELD INSTRUCTION 00215 3350 DCA RETCIF /STORE IN RETURN CODE 00216 1607 TAD I CSA0 /GET FUNCTION CONTROL WORD 00217 3354 DCA FUN /SAVE IT 00220 1354 TAD FUN /GET IT BACK AGAIN 00221 0374 AND K70 /ISOLATE FIELD OF BUFFER 00222 1375 TAD KCDF /FORM CDF TO FIELD OF BUFFER 00223 3262 DCA BUFCDF /STORE IN APPROPRIATE SPOT 00224 2207 ISZ CSA0 /POINT TO ARGUMENT 2 00225 1607 TAD I CSA0 /GET BUFFER ADDRESS 00226 3355 DCA BUFFER /SAVE IT 00227 2207 ISZ CSA0 /POINT TO ARGUMENT 3 00230 1607 TAD I CSA0 /GET BLOCK NUMBER 00231 2207 ISZ CSA0 /POINT TO ERROR RETURN 00232 6203 KCIF, CIF CDF 0 /SEEK TEMPORARY SAFETY IN CURRENT DATA FIELD 00233 7640 SZA CLA 00234 5242 JMP NOT1ST /NOT BLOCK 0 00235 7330 STL CLA RAR /TAD (4000 00236 0354 AND FUN /ISOLATE READ/WRITE BIT 00237 1201 TAD UNIT /INSERT UNIT 00240 4762 JMS I QCAS /CALL CASSETTE ROUTINE 00241 0212 REWIND-. /TO PERFORM A REWIND/INITIALIZATION 00242 1354 NOT1ST, TAD FUN 00243 0200 K200, AND K3700 /ISOLATE NUMBER OF BLOCKS TO XFER 00244 7450 SNA 00245 5366 JMP SPCASE /0 BLOCKS MEANS SPECIAL THING (EOF) 00246 3360 RECLP, DCA BLKNT /SET COUNT OF NUMBER OF BLOCKS 00247 7330 STL CLA RAR /TAD (4000 00250 0354 AND FUN /ISOLATE READ/WRITE BIT 00251 1201 TAD UNIT /INSERT UNIT 00252 4762 JMS I QCAS /CALL CASSETTE ROUTINE 00253 0137 RW-. /TO INITIATE READ OR WRITE 00254 7440 RETRY, SZA /NON-ZERO AC MEANS ERROR 00255 5350 JMP RETCIF /TOUGH LUCK BOOBIE - ERROR 00256 1264 TAD K7700 /GET READY TO XFER 100 DOUBLE WORDS 00257 3356 DCA DBWDCT /SET DOUBLE WORD COUNTER 00260 1355 TAD BUFFER /GET START OF BUFFER SEGMENT 00261 3363 DCA BPTR /SET 'BPTR' 00262 7402 BUFCDF, HLT /CHANGE TO DATA FIELD OF USER'S BUFFER /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 3-1 00263 1354 TAD FUN 00264 7700 K7700, SMA CLA /WHICH DIRECTION IS TRANSFER? 00265 5307 JMP READ /WANT TO READ /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 4 00266 1763 WRITE, TAD I BPTR /WANT TO WRITE, SO GET WORD FROM BUFFER 00267 4757 JMS I QGPCH /WRITE 00270 1763 TAD I BPTR /GET FIRST WORD AGAIN 00271 0333 AND P7400 /ISOLATE FIRST HALF OF BYTE 3 00272 3352 DCA T /SAVE FOR FUTURE REFERENCE 00273 2363 ISZ BPTR /POINT TO NEXT LOCATION IN BUFFER 00274 1763 TAD I BPTR /GET SECOND WORD OF BUFFER PAIR 00275 4757 JMS I QGPCH /WRITE BYTE #2 00276 1763 TAD I BPTR /RETRIEVE WORD 2 00277 0333 AND P7400 /ISOLATE 2ND HALF OF BYTE #3 00300 7112 CLL RTR /CREATE MYSTIC HIDDEN BYTE 3 00301 7012 RTR 00302 1352 TAD T /GOOD THING I STILL HAVE THIS 00303 7112 CLL RTR 00304 7012 RTR 00305 4757 JMS I QGPCH /WRITE BYTE #3 00306 5332 JMP COM /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 5 00307 4757 READ, JMS I QGPCH /READ BYTE #1 OF TRIPLE 00310 3763 DCA I BPTR /STORE IN WORD 1 OF BUFFER PAIR 00311 4757 JMS I QGPCH /READ BYTE #2 OF TRIPLE 00312 3352 DCA T /SAVE IT FOR POSTERITY 00313 4757 JMS I QGPCH /READ BYTE #3 OF TRIPLE 00314 7006 RTL 00315 7006 RTL /MYSTIC ROTATES 00316 3353 DCA T2 00317 1353 TAD T2 00320 0333 AND P7400 /AND MYSTIC CONSTANTS 00321 1763 TAD I BPTR /FIX UP BUFFER WORD 1 OF PAIR 00322 3763 DCA I BPTR 00323 1353 TAD T2 00324 7006 RTL 00325 7006 RTL /MORE ROTATION 00326 0333 AND P7400 /AND MORE 00327 1352 TAD T 00330 2363 ISZ BPTR /POINT TO SECOND WORD OF BUFFER PAIR 00331 3763 DCA I BPTR /STORE SECOND WORD 00332 2363 COM, ISZ BPTR /POINT TO BEGIN OF NEXT BUFFER PAIR 00333 7400 P7400, 7400 /PROTECTION AGAINST CORE WRAP AROUND 00334 2356 ISZ DBWDCT /BUMP DOUBLE WORD COUNT 00335 5262 JMP BUFCDF /REITERATE 00336 4762 JMS I QCAS /CALL CASSETTE ROUTINE 00337 0103 CRC-. /TO CHECK CRC 00340 1355 TAD BUFFER /GET BUFFER SEGMENT ADDRESS 00341 1243 TAD K200 /ADD 200 TO GET TO NEXT SEGMENT 00342 3355 DCA BUFFER /REPLACE 00343 1360 TAD BLKNT /GET BLOCK COUNT 00344 1264 TAD K7700 /SUBTRAT 100 00345 7440 SZA /ARE WE DONE? 00346 5246 JMP RECLP /NO, REITERATE 00347 2207 ISZ CSA0 /POINT TO NORMAL GOOD RETURN 00350 7402 RETCIF, HLT /RETURN TO USER'S DATA AND INSTRUCTION FIELDS 00351 5607 JMP I CSA0 /RETURN /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 6 / INTIALIZATION ROUTINE - ONCE ONLY CODE / OVERLAID BY TEMPORARIES 00352 0000 T, 0 /ENTRY POINT TO INITIALIZATION 00353 1364 T2, TAD KRDF /REPLACE CALL BY RDF 00354 3213 FUN, DCA CS /SO THAT WE'LL NEVER SEE YOU HERE AGAIN 00355 1352 BUFFER, TAD T /CORRECT ADDRESS OF GPCH 00356 1365 DBWDCT, TAD KQX1 /BY ADDING IN CS+1 00357 3357 QGPCH, DCA . /STORE IT HERE 00360 7326 BLKNT, STL CLA RTL /CORRECT ADDRESS OF CAS IS 2 MORE 00361 1357 TAD QGPCH 00362 3362 QCAS, DCA . /THAN GPCH. STORE IT HERE. 00363 5213 BPTR, JMP CS /RETURN TO MAIN PROGRAM 00364 6214 KRDF, RDF 00365 0164 KQX1, GPCH-CS-1 00366 1354 SPCASE, TAD FUN 00367 0376 AND L4003 /ISOLATE R/W BIT + SPECIAL CODE 00370 1201 TAD UNIT 00371 4762 JMS I QCAS 00372 0115 SPCODE-. 00373 5347 JMP RETCIF-1 /LEAVE GRACEFULLY 00374 0070 K70, 70 00375 6201 KCDF, CDF 0 00376 4003 L4003, 4003 0400 PAGE /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 7 00400 0000 GPCH, 0 /READ OR WRITE A BYTE 00401 5230 JMP AROUND /GO TO REAL LOCATION OF THIS SUBROUTINE 00402 0000 CAS, 0 /MUST BE AT GPCH+2; DO CASSETTE STUFF 00403 3303 DCA TEMP /SAVE ARGUMENT IN AC 00404 6201 CDF 0 00405 1602 TAD I CAS /GET UNRELOCATED RELATIVE LOCAL ENTRY POINT 00406 1202 TAD CAS /RELOCATE IT 00407 2202 ISZ CAS /POINT TO NORMAL RETURN LOCATION 00410 3200 DCA GPCH /SAVE ENTRY POINT IN TEMPORARY 00411 5600 JMP I GPCH /GO TO CORRECT ENTRY POINT 00412 1202 RW, TAD CAS 00413 3306 DCA RTRY /SAVE RETRY ADDRESS 00414 1303 TAD TEMP /GET ARGUMENT PASSED VIA AC 00415 3305 DCA FNUNIT /SAVE 00416 7346 CLL STA RTL /TAD (7775 00417 3304 DCA ERKNT /SET ERROR COUNT TO -3 00420 1305 ERETRY, TAD FNUNIT 00421 7510 SPA 00422 1377 TAD (20 /READ CODE IS 0; WRITE IS 20 00423 6704 KLSA /LOAD STATUS A 00424 1305 TAD FNUNIT /***KLSA CLEARS BIT 0 00425 7700 SMA CLA /READS HAVE TO BE INITIATED 00426 4326 JMS CWAIT /READ 00427 5706 JMP I RTRY /RETURN 00430 3303 AROUND, DCA TEMP 00431 1305 TAD FNUNIT 00432 7700 SMA CLA 00433 5237 JMP RDCHAR /READ 00434 1303 TAD TEMP /WRITE 00435 4326 JMS CWAIT 00436 5600 JMP I GPCH /RETURN 00437 4326 RDCHAR, JMS CWAIT 00440 1303 TAD TEMP /GET CHAR JUST READ 00441 5600 JMP I GPCH /RETURN WITH IT IN AC /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 8 00442 1305 CRC, TAD FNUNIT 00443 1376 TAD (60 00444 6704 KLSA /INITIATE READ/WRITE CRC 00445 1305 TAD FNUNIT /***KLSA CLEARS BIT 0 00446 7700 SMA CLA 00447 4326 JMS CWAIT /HAVE TO READ TWICE 00450 4326 JMS CWAIT /WRITE CRC WRITES BOTH 00451 6700 KCLR /WHY NOT? 00452 5602 JMP I CAS /RETURN 00453 1375 REWIND, TAD (10 00454 4267 JMS UTIL 00455 1303 TAD TEMP 00456 7700 SMA CLA 00457 5602 JMP I CAS /MERELY REWIND IF READING 00460 5263 JMP EOF 00461 1377 SKIPF, TAD (20 00462 1375 BACKBL, TAD (10 00463 1375 EOF, TAD (10 00464 1374 BACKF, TAD (30 00465 4267 JMS UTIL 00466 5602 JMP I CAS /RETURN 00467 0000 UTIL, 0 00470 1303 TAD TEMP 00471 6704 KLSA 00472 6706 TRYAGN, KGOA 00473 4355 JMS CTCTST 00474 6703 KSBF /WAIT FOR READY 00475 5273 JMP .-2 00476 6707 KRSB 00477 0375 AND (10 00500 7640 SZA CLA 00501 5272 JMP TRYAGN /KEEP TRYING IF ERROR CAUSED BY DRIVE EMPTY 00502 5667 JMP I UTIL 00503 0000 TEMP, 0 00504 0000 ERKNT, 0 00505 0000 FNUNIT, 0 00506 0000 RTRY, 0 00507 1303 SPCODE, TAD TEMP 00510 0373 AND (3 00511 1372 TAD (JMP TABLE 00512 3316 DCA J 00513 1303 TAD TEMP 00514 0371 AND (4300 00515 3303 DCA TEMP 00516 7402 J, HLT 00517 5263 TABLE, JMP EOF /0 WRITE EOF 00520 5253 JMP REWIND /1 REWIND AND WRITE EOF IF BIT 0=1 00521 5262 JMP BACKBL /2 BACK BLOCK 00522 1303 TAD TEMP /3 SKIP/BACK FILE DEPENDING ON BIT 0 00523 7700 SMA CLA /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 8-1 00524 5261 JMP SKIPF /FORWARD FILE 00525 5264 JMP BACKF /BACK FILE /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 9 00526 0000 CWAIT, 0 00527 6706 KGOA /ASSERT CONTENTS OF STATUS A 00530 3303 DCA TEMP /SAVE ANYTHING READ 00531 4355 JMS CTCTST 00532 6705 KSAF 00533 5331 JMP .-2 /WAIT FOR SOMETHING TO HAPPEN 00534 6702 KSEN /WAS IT AN ERROR? 00535 5726 JMP I CWAIT /NO, SO RETURN 00536 3303 ERR, DCA TEMP /YES ... ERROR 00537 6707 KRSB 00540 0374 AND (30 00541 7450 SNA 00542 5345 JMP .+3 00543 0377 AND (20 00544 5706 JMP I RTRY /END OF FILE IS SOFT ERROR 00545 2304 ISZ ERKNT /SHALL WE TRY AGAIN? 00546 5351 JMP .+3 /YES 00547 7330 STL CLA RAR /TAD (4000 00550 5706 JMP I RTRY /RETURN WITH NON-ZERO AC 00551 1305 TAD FNUNIT /RETRY 00552 1370 TAD (50 /BUT FIRST DO BACKSPACE BLOCK GAP 00553 4267 JMS UTIL 00554 5220 JMP ERETRY 00555 0000 CTCTST, 0 /TEST FOR CONTROL/C 00556 7600 L7600, 7600 00557 1356 TAD L7600 00560 6034 KRS 00561 1367 TAD (-7603 00562 7650 SNA CLA 00563 6031 KSF 00564 5755 JMP I CTCTST 00565 6203 CIF CDF 0 00566 5756 JMP I L7600 /RETURN TO OS/8 00567 0175 00570 0050 00571 4300 00572 5317 00573 0003 00574 0030 00575 0010 00576 0060 00577 0020 $ /4 OS/8 CASSETTE HANDLER PAL8-V10D NO DATE PAGE 10 AROUND 0430 SKIPF 0461 BACKBL 0462 SPCASE 0366 BACKF 0464 SPCODE 0507 BLKNT 0360 T 0352 BPTR 0363 TABLE 0517 BUFCDF 0262 TEMP 0503 BUFFER 0355 TRYAGN 0472 CAS 0402 T2 0353 CODE 0000 UNIT 0201 COM 0332 UTIL 0467 CRC 0442 VERSIO 0003 CS 0213 WRITE 0266 CSA0 0207 CSA1 0201 CTCTST 0555 CWAIT 0526 DBWDCT 0356 EOF 0463 ERETRY 0420 ERKNT 0504 ERR 0536 FNUNIT 0505 FUN 0354 GPCH 0400 J 0516 KCDF 0375 KCIF 0232 KCLR 6700 KGOA 6706 KLSA 6704 KQX1 0365 KRDF 0364 KRSB 6707 KSAF 6705 KSBF 6703 KSDR 6701 KSEN 6702 K200 0243 K3700 0200 K70 0374 K7700 0264 L4003 0376 L7600 0556 NOT1ST 0242 P7400 0333 QCAS 0362 QGPCH 0357 RDCHAR 0437 READ 0307 RECLP 0246 RETCIF 0350 RETRY 0254 REWIND 0453 RTRY 0506 RW 0412 ERRORS DETECTED: 0 LINKS GENERATED: 0