diff --git a/bin/device/oarcdv.bin b/bin/device/oarcdv.bin deleted file mode 100755 index 5c5baa15..00000000 Binary files a/bin/device/oarcdv.bin and /dev/null differ diff --git a/build/build.tcl b/build/build.tcl index 2eda8753..18e65819 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -421,6 +421,9 @@ respond "*" ":midas device;jobdev arc_syseng;arcdev\r" expect ":KILL" respond "*" ":link device;jobdev ar,device;jobdev arc\r" +respond "*" ":midas device;oarcdv bin_syseng;arcdev 66\r" +expect ":KILL" + # JOBDEV D (DSKDEV) respond "*" ":midas device;jobdev d_syseng;dskdev\r" expect ":KILL" diff --git a/src/syseng/arcdev.23 b/src/syseng/arcdev.66 similarity index 98% rename from src/syseng/arcdev.23 rename to src/syseng/arcdev.66 index 965a199e..aa957657 100644 --- a/src/syseng/arcdev.23 +++ b/src/syseng/arcdev.66 @@ -1,4 +1,6 @@ TITLE ARCDEV -- BOJ HANDLER FOR ARCHIVE DEVICE +; Version 66 reconstructed from SYSENG; ARCDEV 23 (timestamped 1976-12-26) +; and DEVICE; OARCDV BIN (1977-07-04) disassembly. ; SUMMARY OF ARCDEV ROUTINES @@ -184,6 +186,8 @@ OPMODE: 0 ; MODE OF OPEN CRUNAM: 0 ; CREATOR OF THIS ARCDEV CRJNAM: 0 ; JNAME OF CREATOR OF THIS ARCDEV LENGTH: 0 ; FILE LENGTH OF READ FILE +BYTSIZ: 0 ; BYTE SIZE +BYTPWD: 0 ; BYTES PER WORD LOCKSW: 0 ; 0=>ARC NOT LOCKED 1.1 BIT=1 => SOFT LOCKED, 1.2 BIT=1 => HARD LOCKED INTLCK: 0 ; 0=>ALL INTERRUPS OK, =/0=>SAVE JOB/BOJ INTERRUPTS @@ -1168,7 +1172,8 @@ ARCINI: PUSH P,A SETZM BLOCK3 ; INITIALIZE THE OUTPUT BLOCK MOVE A,[BLOCK3,,BLOCK3+1] BLT A,BLOCK3+1777 - SETOM BLOCK3+ARCTYP ; -1 => NEW FLAVOR ARCHIVE + MOVE A,[SIXBIT /ARC!!!/] + MOVEM A,BLOCK3+ARCTYP MOVEI A,2000 ; POINTER TO NAME AREA OFF THE END MOVEM A,BLOCK3+UDNAMP MOVE A,[-2000,,BLOCK3] @@ -1458,6 +1463,13 @@ DIRMAP: PUSH P,A HRLZI B,-2 .CALL BLKMAP JRST DTAERR + MOVE A,ARCDIR+ARCTYP + CAME A,[-1] + CAMN A,[SIXBIT /ARC!!!/] + CAIA + JRST [MOVSI H,46 ? JRST OPFAIL] + MOVE A,[SIXBIT /ARC!!!/] + MOVEM A,ARCDIR+ARCTYP MOVE A,ARCDIR+GCTAG ; GET GC TAG EXCH A,WHENGC ; SAVE AND GET WHAT I THINK IT IS CAME A,WHENGC ; THE SAME? @@ -1481,42 +1493,17 @@ OPNAR2: POP P,A ARCNOP: .STATUS ARC,A ; FIND OUT WHY LDB A,[220600,,A] ; GET OPEN FAILURE BITS + CAIN A,4 + JRST OPNAR2 CAIE A,23 ; FILE LOCKED? - JRST OPNAR3 ; NO - FILE NOT FOUND + JRST ARCNP4 ; NO - FILE NOT FOUND ARCNP3: MOVEI A,15 ; WAIT A HALF SECOND AND TRY AGAIN .SLEEP A, MOVE A,(P) JRST OPNAR1 ; GO TRY AGAIN -OPNAR3: MOVE A,[6,,ARC] - .CALL DSKDIR ;MAP IN DIRECTORY, AND SEARCH FOR ARCHIVE - JRST OPNAR2 ; NO SUCH USER - .CALL SCRMAP ;ALLOCATE PAGE - JRST OPNAR2 ;CANT GET PAGE - MOVE A,[-2000,,BLOCK3] - .IOT ARC,A - MOVEI A,BLOCK3 - ADD A,BLOCK3+1 ;PNTR TO NAME AREA - PUSH P,B - MOVE B,DEVICE -ARCNP1: CAIL A,BLOCK3+2000 - JRST ARCNP2 - CAMN B,UNFN1(A) ;FOUND ONE? - JRST ARCNP4 ;YES - ADDI A,LUNBLK - JRST ARCNP1 - -ARCNP2: POP P,B - .CALL SCRFLS - JFCL - .CLOSE ARC, - JRST OPNAR2 - -ARCNP4: POP P,B ; FOUND FILE, WAIT AND TRY AGAIN - .CALL SCRFLS - JFCL - .CLOSE ARC, - JRST ARCNP3 +ARCNP4: HRLZ H,A + JRST OPFAIL ; BLTSCR - COPY ARCDIR INTO BLOCK3 (AFTER MAKING BLOCK3 EXIST) @@ -2174,6 +2161,13 @@ OPEN: MOVE A,WD3 ; COPY SUB-FILE NAMES MOVEM A,DEVICE MOVE A,WD7 ; SAVE OPEN MODE MOVEM A,OPMODE + TRNE A,6 + SKIPA A,[44] + MOVEI A,7 + MOVEM A,BYTSIZ + MOVEI B,44 + IDIVM B,A + MOVEM A,BYTPWD HRLZ A,OPMODE ; GET OPEN MODE TLZ A,777770 ; ISOLATE BASIC OPEN MODES TLC A,1 ; COMPLEMENT READ/WRITE MODE @@ -2567,32 +2561,29 @@ FILIOT: FAUI ; ASCII UNIT INPUT DAUI: PUSHJ P,LFCHR ; GET NEXT CHARACTER CAIN A,3 ; EOF? - HRLI A,-1 ; MAKE -1,,3 + JRST SEOF .IOT BOJC,A ; SEND IT - JUMPGE A,LOOP ; DID WE JUST SEND EOF? - SETOM IOCERR ; YES - SET ERROR FLAG FOR NEXT IOT - JRST LOOP +DAUI1: SOSG WD2 + JRST LOOP + LDB B,[000300,,OPMODE] + JRST @DIRIOT(B) ; DIUI - DIRECTORY IMAGE UNIT INPUT - SEND NEXT WORD OF IMAGE ; DIRECTORY. DIUI: MOVE A,BLKPOS ; GET POSITION IN DIRECTORY BLOCK CAIL A,2000 ; IN BOUNDS? - JRST DIUI1 ; NO - GO SEND EOF + JRST SEOF ; NO - GO SEND EOF AOS BLKPOS ; BUMP POSITION CAIN A,2 ; IS HE ASKING FOR DIRECTORY NAME? JRST DIUI0 ; YES - GO GIVE IT TO HIM CAIG A,1 ; IS HE ASKING FOR WORD 0 OR 1 AOS A ; ADJUST TO DISK FORMAT .IOT BOJC,ARCDIR(A) ; SEND NEXT WORD - JRST LOOP + JRST DAUI1 DIUI0: .IOT BOJC,DIRECT ; SEND DIRECTORY NAME - JRST LOOP - -DIUI1: .IOT BOJC,[-1,,3] ; SEND EOF (??) - SETOM IOCERR ; ERROR NEXT TIME - JRST LOOP + JRST DAUI1 ; DABI - DIRECTORY ASCII BLOCK INPUT - SEND ASCII CHARACTERS PACKED ; FIVE TO A WORD. @@ -2956,7 +2947,7 @@ FIBI: PUSHJ P,INTOFF SKIPL A,BLKPOS ; IS THERE A BLOCK IN NOW? JRST FIBO0 ; YES - CAN HANDLE MUCH LIKE A WRITE NOW FIBI1: SETZM H ; MAKE LOSER FALL OUT OF HIS IOT - SETZM I +FISI1: SETZM I PUSHJ P,INTON .CALL JRET JFCL @@ -2985,8 +2976,12 @@ FAUO3: SOS CHLFIB ; ONE LESS SLOT AVAILABLE AOS POSPTR MOVE A,LENGTH PUSHJ P,LENADJ -FAUO4: PUSHJ P,INTON +FAUO4: SOSLE WD2 + JRST FAUO5 + PUSHJ P,INTON JRST LOOP +FAUO5: LDB B,[000300,,OPMODE] + JRST @FILIOT(B) ; FAUI - FILE ASCII UNIT INPUT @@ -3008,6 +3003,10 @@ FAUI2: MOVE C,BLBPTR JRST FAUO3 ; GO UPDATE COUNTS FAUI3: PUSHJ P,INTON +SEOF: MOVEI H,1 + MOVSI A,1000 + TDNE A,WD1 + JRST FISI1 .IOT BOJC,[-1,,3] ; SEND EOF SETOM IOCERR ; IOC ERROR NEXT TIME JRST LOOP @@ -3031,13 +3030,13 @@ FIUO2: MOVE A,BLKPOS ; GET CURRENT POINTER INTO DATA BLOCK SOS WDLFIB ; DECREASE WORDS LEFT MOVE A,LENGTH ; UPDATE LENGTH PUSHJ P,LENADJ + SOSLE WD2 + JRST FAUO5 PUSHJ P,INTON JRST LOOP FIUO3: PUSHJ P,INTON - .IOT BOJC,[-1,,3] ; SEND EOF - SETOM IOCERR ; IOC ERROR NEXT TIME - JRST LOOP + JRST SEOF ; FIUI - FILE IMAGE UNIT INPUT @@ -3057,7 +3056,9 @@ RCHST: MOVEI I,1(P) ; GET POINTER TO ROOM ON STACK PUSH P,FNAME1 ; REAL FILE NAMES PUSH P,FNAME2 PUSH P,DIRECT ; DIRECTORY NAME - PUSH P,POSPTR ; CURRENT ACCESS POINTER + MOVE A,POSPTR + IMUL A,BYTPWD + PUSH P,A PUSH P,[0] ; UNKNOWN PUSH P,[0] ; UNKNOWN HRLI I,-7 @@ -3204,8 +3205,13 @@ CALWN1: MOVEI H,1 ; MAKE LOSER SKIP ; FILLEN - SEND FILE'S LENGTH -FILLEN: PUSH P,LENGTH ; SEND HIM THE LENGTH - MOVEI A,1 +FILLEN: MOVE A,LENGTH + IMUL A,BYTPWD + PUSH P,A + PUSH P,BYTSIZ + PUSH P,LENGTH + PUSH P,[44] + MOVEI A,4 JRST CALWIN ; RDMPBT - READ THE DUMP BIT @@ -3324,6 +3330,9 @@ ACCESS: SKIPN NEWFIL PUSHJ P,INTOFF SETZM IOCERR ; CLEAR I/O ERROR FLAG MOVE A,WD2 ; GET POSITION HE WANTS + IDIV A,BYTPWD + JUMPN B,ACCES4 + MOVEM A,WD2 CAMN A,POSPTR ; DOES HE WANT WHERE WE ARE? JRST NOOP1A ; YES - DO NOTHING JUMPN A,ACCES1 ; DOES HE WANT BEGINNING?