diff --git a/Makefile b/Makefile index e98c4b61..2cf49e78 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ SRC = system syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \ spcwar rwg libmax rat z emaxim rz maxtul aljabr cffk das ell ellen \ jim jm jpg macrak maxdoc maxsrc mrg munfas paulw reh rlb rlb% share \ tensor transl wgd zz graphs lmlib pratt quux scheme gsb ejs mudsys \ - draw wl taa tj6 budd sharem ucode rvb + draw wl taa tj6 budd sharem ucode rvb kldcp DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \ xfont maxout ucode moon diff --git a/build/misc.tcl b/build/misc.tcl index 548c6fc9..0f4b6e1a 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -898,3 +898,7 @@ expect ":KILL" # KL10 front end directory tool respond "*" ":midas sys1;ts klfedr_syseng;klfedr\r" expect ":KILL" + +# KL10 front end dumper +respond "*" ":midas dsk0:.;@ fedump_kldcp; fedump\r" +expect ":KILL" diff --git a/doc/programs.md b/doc/programs.md index 6a77dbbd..f4dcd041 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -65,6 +65,7 @@ - FCDEV, talk to LispM file server. - FDIR, fast directory listing. - FED, font editor. +- FEDUMP, KL10 front end dumper. - FIDO, watch for system events and bark. - FILE, Chaosnet file server. - FIND, search for files. diff --git a/src/kldcp/fedump.10 b/src/kldcp/fedump.10 new file mode 100755 index 00000000..3e9a3b54 --- /dev/null +++ b/src/kldcp/fedump.10 @@ -0,0 +1,247 @@ + 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 + \ No newline at end of file