TITLE FEDUMP - KL10 FRONT END DUMPER ;THIS PROGRAM RUNS STANDALONE ON THE KL10 WITH CACHE AND PAGING TURNED OFF .MLLIT==1 A=1 B=2 C=3 D=4 E=5 T=6 TT=7 I=10 J=11 Q=12 R=13 P=17 DDT=774000 LOC 1000 LPDL==40 PDL: -LPDL,,. BLOCK LPDL ICWA=20 DIRADR: BLOCK 3 ;CYL, SURF, SECT OF DIR DIRWD: 0 ;WORD INDEX OF NEXT FROB IN DIR DIRLEN: 0 ;TOTAL NUMBER OF WORDS IN DIR .INSRT SYSTEM;RH10 > ;USUAL RHGET AND RHSET ROUTINES ;STUFF IN TT RHGET: TLZA TT,%HRLOD RHSET: TLO TT,%HRLOD DATAO DSK,TT MOVEI TT,10 SOJG TT,. DATAI DSK,TT TLNE TT,%HDERR JRST 4,. ANDI TT,177777 POPJ P, ;READ DISK UNIT 0. ;A HAS ADDRESS TO READ INTO ;B HAS WORD COUNT ;C HAS CYLINDER ;D HAS SURFACE ;E HAS SECTOR ;CLOBBERS ARGS RDISK: IRPS CM,,CLR RDP ACK MOVEI TT,%HM!CM ;%HRDCL=0 PUSHJ P,RHSET TERMIN RDISK0: JUMPE B,RDISK9 MOVE TT,C HRLI TT,%HRCYL PUSHJ P,RHSET MOVE TT,D LSH TT,8 IOR TT,E HRLI TT,%HRADR PUSHJ P,RHSET MOVEI T,-1(A) CAIGE B,20000 JRST [ MOVN TT,B JRST .+2 ] MOVNI TT,20000 ADD B,TT SUB A,TT LSH TT,4 HRL T,TT MOVEM T,ICWA ASH TT,-4-7 ;- # SECTORS MOVNS TT ADD E,TT ;ADVANCE THE DISK ADDR IDIVI E,NSECS EXCH E,T ;# SURFACES ADD T,D IDIVI T,NHEDS MOVE D,TT ADD C,T ;# CYLINDERS SETZM ICWA+1 MOVSI TT,%HRCTL HRRI TT,%HMRED MOVEI T,ICWA DPB T,[$HCICWA TT] PUSHJ P,RHSET CONSZ DSK,%HIBSY JRST .-1 MOVSI TT,%HRSTS PUSHJ P,RHGET TRNE TT,%HSERR JRST 4,. ;DISK ERROR JRST RDISK0 ;TRANSFER NEXT HUNK RDISK9: POPJ P, ;WRITE TAPE UNIT 0 ;A HAS ADDRESS TO WRITE FROM ;B HAS WORD COUNT ;WRITES A BUNCH OF 1024 WORD RECORDS FOLLOWED BY EOF ;CLOBBERS ITS ARGS MAGCOM==0_15.+1_14.+2_6.+1_13. MWRITE==MAGCOM+4000 MWREOF==MAGCOM+5000 MNOOP==MAGCOM+0000 MTC==340 MTS==344 JOBDON==100 WRTAPE: JUMPLE B,WRTAP9 MOVEI TT,-1(A) CAIGE B,2000 JRST [ MOVN T,B ;LAST RECORD IS SHORT JRST .+2 ] MOVNI T,2000 ADD B,T ;ADVANCE WORD COUNT AND ADDRESS SUB A,T LSH T,4 HRL TT,T MOVEM TT,ICWA SETZM ICWA+1 DATAO MTS,[ICWA] CONO MTC,MWRITE CONSO MTS,JOBDON JRST .-1 JRST WRTAPE WRTAP9: SETZM ICWA CONO MTC,MWREOF CONSO MTS,JOBDON JRST .-1 CONO MTC,MNOOP POPJ P, GO: MOVE P,PDL MOVEI A,BUF ;READ IN HOM BLOCK MOVEI B,200 MOVEI C,0 ;WHICH IS PHYSICAL BLOCK 1 MOVEI D,0 MOVEI E,1 PUSHJ P,RDISK HLRZ T,HOMDRC ;SET UP DIR ADDR MOVEM T,DIRADR+0 LDB T,[101000,,HOMDRA] MOVEM T,DIRADR+1 LDB T,[001000,,HOMDRA] MOVEM T,DIRADR+2 HLRZ T,HOMDRL LSH T,7 ;NUMBER OF WORDS IN DIR MOVEM T,DIRLEN SETZM DIRWD ;PROCESS NEXT FILE LOOP: MOVEI A,BUF ;READ IN THE DIR MOVE B,DIRLEN MOVE C,DIRADR+0 MOVE D,DIRADR+1 MOVE E,DIRADR+2 PUSHJ P,RDISK MOVE T,DIRWD CAML T,DIRLEN JRST DONE MOVSI T,BUF(T) ;BLT DIR ENTRY DOWN TO BASE OF BUF HRRI T,BUF BLT T,BUF+7 SKIPN T,DIRNAM ;IF FILE NAME IS ZERO JRST NXTFIL ;SKIP THIS FILE CAME T,[-2,,-2] ;OR VARIOUS OTHER FILLERS CAMN T,[177776,,177776] JRST NXTFIL HLRZ C,DIRPBN ;SET UP ADDRESS OF THIS FILE LDB D,[101000,,DIRPBN] LDB E,[001000,,DIRPBN] MOVEI A,BUF+10 HLRZ B,DIRWRT LSH B,16. HRRZ T,DIRWRT ADDI B,1(T) LSH B,-1 ;# -10 WORDS MOVEM B,FILLEN' PUSHJ P,RDISK ;READ IN THE FILE MOVEI A,BUF MOVE B,FILLEN ADDI B,10 ;WRITE OUT DIR ENTRY CONCAT FILE PUSHJ P,WRTAPE NXTFIL: MOVEI T,10 ADDM T,DIRWD JRST LOOP DONE: SETZM ICWA ;PUT 2 EOFS AT END OF TAPE CONO MTC,MWREOF CONSO MTS,JOBDON JRST .-1 CONO MTC,MNOOP JRST DDT ;WHOLE DIR DONE PAT: PATCH: BLOCK 100 CONSTANTS VARIABLES ;I/O BUFFER IS REST OF CORE BUF: ;FORMAT OF HOME BLOCK HOMIXC==BUF+64 ;RH CYLINDER OF INDEX FILE HOMIXA==BUF+65 ;LH SURFACE AND SECTOR OF INDEX FILE HOMIXL==BUF+65 ;RH NUMBER OF CONSECUTIVE BLOCKS IN INDEX FILE HOMDRC==BUF+66 ;LH CYLINDER OF DIRECTORY FILE HOMDRA==BUF+66 ;RH SURFACE AND SECTOR OF DIRECTORY FILE HOMDRL==BUF+67 ;LH NUMBER OF CONSECUTIVE BLOCKS OF DIR ;OTHER STUFF TOO, WHO CARES ;FORMAT OF DIRECTORY BLOCK ;EACH BLOCK CONTAINS 16 8-WORD BLOCKS WHICH WHEN BLT'ED ;DOWN TO THE FRONT OF THE BUF LOOK LIKE THIS DIRNAM==BUF+0 ;FILE NAME, 2 WORDS OF PDP11 SQUOZE DIREXT==BUF+1 ;LH EXTENSION, 1 WORD OF PDP11 SQUOZE DIRDAT==BUF+1 ;RH SMITHSONIAN DATE DIRPBN==BUF+2 ;PHYS BLOCK NUMBER, BYTE(18)CYL(10)SURF(8)SECT DIRALC==BUF+3 ;WORDS ALLOC LH MOST SIGNIFICANT 16 BITS, RH LEAST DIRWRT==BUF+4 ;WORDS WRITTEN SAME FORMAT AS DIRALC DIRLOD==BUF+5 ;LH 11 LOAD ADR, RH 11 START ADDR DIRSTS==BUF+6 ;LH "FILE TYPE & STATUS", RH CHECKSUM DIR7==BUF+7 ;RESERVED MUST BE ZERO END GO