PDP-10 / its

Incompatible Timesharing System
Other
857 stars 81 forks source link

Ancient ITS #672

Open larsbrinkhoff opened 6 years ago

larsbrinkhoff commented 6 years ago

It looks like we have much of ITS version 785 from 1973. There's support for the KA10 AI and ML machines. (No DM from what I can see.)

So far, this repository has been focused on restoring and updating 1990 vintage ITS. These old files doesn't have any obvious place in this regime. Also, I feel I don't have time for this.

The files are checked into the syseng-1973 branch. Any takers?

philbudne commented 4 years ago

I doubt this is the right place to note this, but a new .zip file just appeared on bitsavers in http://www.bitsavers.org/bits/DEC/pdp6/X3411.2006_Peter_Samson_DECtapes/

aap commented 4 years ago

Close but no cigar. TS9 extracted here: http://aap.papnet.eu/pub/pdp/10/ts9_dump.tgz File listing: DECBOT.8 DECUUO.298 LIGHTS.14 MACROS.115 MACROS.ORDER SAIL.73 SAIL.JARGON SYSCHK.36 XGPDEV.92 XQUEUE.171 ZONKER.HARRIS

Haven't checked unused blocks between files.

larsbrinkhoff commented 4 years ago

I have checked the unused blocks. I searched for some ITS symbols but got no hits.

larsbrinkhoff commented 4 years ago

ToTS tape 3100150, also known as MAPS; AI7104 1000, is a possibly full dump of the AI PDP-10 from April 1971.

It has source code for ITS 672, 673, and 674. Binaries in . are all 674, but SYSBIN; ITS BACKUP is 671.

I haven't found any large changes compared to ITS 720. The major missing piece would be the IMP. However, SALV doesn't have the TRAN subroutine to transfer files from magtape to disk. This would present a bootstrapping problem: how to get the essential SYS; ATSIGN HACTRN files onto disk?

ITS itself does have magtape support, but the source file is in the JSF directory. This suggests the code was recently somewhat experimental.

@fhgwright explained to me how ITS relied much more on DECtapes in the early days, and quite possibly ITS was booted off tape rather than disk. This still doesn't give us a method to get HACTRN onto a recently marked disk, but it provided a clue. I took another look at the ITS source code and discovered that HACTRN is first loaded from the SYS device, but if that fails it will retry with the UT2 device. So we can start ITS and get to DDT and access all necessary tools on a DECtape, and use plain COPY to transfer files to disk.

larsbrinkhoff commented 4 years ago

Searching for ITS pieces on old tapes.

ToTS ID File What
3100150 FW; UT DIRS DECtape listings with ITS 527.
3100150 .INFO.; SYS ARCHIV News for ITS 549 and 546.
3100150 MJG; CARET BIN Parts of ITS 629 binary.
3100150 RG; FD 4/1/68 DECtape listings with ITS 265-346.
3100150 DEE; JUST BIN Assembler listing of ITS using 2311 controller.
larsbrinkhoff commented 4 years ago

Added to the moby table:

larsbrinkhoff commented 4 years ago

Another small piece of ITS. It could be PDP-6 ITS, because it's using the 2311 device. First 1K of DEE; JUST BIN on ToTS tape 3100150.

Compared to ITS 672 it's quite close, but it's missing two sections that deal with page faults, and two lines that deal with the Datapoint kludge device.

Looks like an assembler listing, but not like any MIDAS output I have seen. Maybe an NTS MIDAS?


                                                       OR DEBUGGING PURPOSES
   285  001 012         TLNE D,210      ;NO ACCESS OR DBL
   286  002 016         TRO A,BIOADC    ;ILM
   287  001 012         TLNE D,20       ;PURE
   288  001 009         TLO A,(BPURE)
   289  001 012         TLNE D,100      ;W IN RD ONLY
   290  001 009         TLO A,(BWIRO)
   291  001 012         TLZ D,5
   292  353 016 CFH6:   ANDCAM D,UPGML+3(U)
   293  353 016 CLKB1K: LPMR UPGML(U)
   294  004 028 CLKB1G: CONO 470000+APRCHN      ;RESET
   295  002 036 CLB1X:  MOVE T,[BADBTS]
   296  352 003         IOR T,MSKST(U)  ;GET OR OF ENABLED AND BAD BITS
   297  001 009         AND T,A         ;GET AND WITH BITS ACTUALLY ON
   298  015 302         JUMPE T,CLB1XA  ;NOT BAD OR ENABLED, FORGET ABOUT IT
   299  352 002         IORM T,PIRQC(U) ;BLAME IT ON THE USER
   300  020 004         JRST SCHED
   301                                                                                PAGE 15.5
   302  352 014 CLB1XA: SKIPE FLSINS(U)
   303  020 004         JRST SCHED
   304  012 031         JRST CLKB1D
   305
   306          CNLJL:  JRST 4,.+1      ;NULL JOB LOST
   307  004 028         CONO 470000+APRCHN
   308  020 004         JRST SCHED^M^L
   001                                                                                PAGE 16
   002  012 013 PCMARB: MOVE B,CLKBRK
   003  353 006         MOVEM B,UMARPC(U)
   004  002 017         TRO A,BMARI
   005  001 010         MOVEI B,0
   006  353 016         DPB B,[220300,,UPGML+2(U)]      ;DISABLE MAR
   007  001 021         POPJ P,
   008
   009  012 013 CPROC1: MOVE T,CLKBRK
   010  003 004         TLNN T,LSRMOD   ;SKIP IF FROM USER MODE
   011  016 015         JRST CPRUUO
   012  002 014         TRO A,BPROC     ;GIVE USER INTERRUPT
   013  001 021         POPJ P,
   014
   015  034 047 CPRUUO: MOVE T,[JRST ONEPROC]   ;ONE PROCEED INT. FROM EXEC. MODE
   016  050 027         MOVEM T,UEXIT   ;CLOBBER EXIT TO RUN SYS CALL TO COMPLETION
   017  001 021         POPJ P,
   018
   019  001 022 AROV:   TLZE T,400000
   020  003 004         TLNN T,LSRMOD
   021  016 027         JRST AROV2      ;NOT REALLY SET OR SET BY SYS
   022  012 013         MOVEM T,CLKBRK
   023  352 009         SKIPE PICLR(U)  ;SKIP IF INTERRUPTS TO USER NOT ENABLED
   024  002 006         TRO A,AROIF     ;GIVE USER INTERRUPT
   025  001 021         POPJ P,
   026
   027  012 013 AROV2:  MOVEM T,CLKBRK
   028  001 021         POPJ P,
   029
   030  001 022 ARFOV:  TLZE T,40000
   031  003 004         TLNN T,LSRMOD
   032  016 027         JRST AROV2
   033  012 013         MOVEM T,CLKBRK
   034  352 009         SKIPE PICLR(U)
   035  001 009         TLO A,(ARFOIF)
   036  001 021         POPJ P,
   037
   038          CLKB1E: CONSO PI,200000 ;GET HERE FOR MEMORY PARITY ERROR
   039  016 047         JRST CLK1F      ;SPURIOUS INT
   040                  CONO PI,240000  ;RESET
   041  012 013         MOVE T,CLKBRK
   042  001 014         MOVEI TT,0
   043  001 010         MOVSI B,1
   044  016 051         PUSHJ P,CLKMEM
   045  020 004         JRST SCHED
   046
   047  004 028 CLK1F:  MOVEI J,APRCHN
   048  345 003         JSP E,SPUR
   049  020 004         JRST SCHED
   050
   051  350 023 CLKMEM: AOS PARERR(TT)  ;INCREMENT COUNT
   052  346 052         IORM B,SUPCOR   ;CAUSE MESSAGE TYPEOUT
   053  350 025         MOVEM T,PARPC(TT)       ;STORE INFO FOR MESSAGE
   054  001 021         POPJ P,
   055
   056          MEMHNG: JRST 4,.+1
   057  004 028         CONO 10000+APRCHN       ;CLEAR NON EX MEM AFTER HALT TO RESET MEMORY
   058  001 010         MOVEI B,IOCER3
   059  003 005         TLNE T,SPECIAL
   060  012 013         HRRM B,CLKBRK
   061  001 010         MOVSI B,4                                                     PAGE 16.1
   062  001 014         MOVEI TT,1
   063  016 051         JRST CLKMEM^M^L
   001         ;                                                                     PAGE 17
   002          ; SLOW CLOCK SERVICE ROUTINE
   003          ;
   004  225 048 SSLCK:  MOVE A,UTTBF
   005  001 009         CAIGE A,30
   006  017 009         JRST SSLCK2
   007  347 029         SETOM UTBFLF    ;SIGNAL CORE JOB TO FLUSH UTAPE BUFFERS
   008  350 016         AOS NCORRQ
   009  347 017 SSLCK2: SKIPE UTTYCT    ;SKIP IF NO NEW USERS
   010  035 005         PUSHJ P,USTART  ;NEW USER TO START
   011  167 075         SKIPL T,DWDS
   012  001 022         MOVEI T,0
   013  005 058         ADDI T,MDISWD
   014  167 075         MOVEM T,DWDS    ;RESET DISPLAY RATE COUNTER
   015                  CONSO UTC,4000  ;TIME FLG ENB
   016  227 006         SKIPGE UIDLE    ;SKIP IF DEC TAPE NOT IDLE
   017  017 024         JRST SSLCK1     ;DEC TAPE IDLE
   018  350 003         MOVE T,TIME
   019  227 024         SUB T,LUTOTM    ;SUBTRACT LAST UTC OPERATION TIME
   020  003 034         CAIGE T,MXOPT*SCLKI     ;SKIP IF DEC TAPE HUNG TOO LONG ON ONE OPERATION
   021  017 024         JRST SSLCK1     ;OK
   022  227 025         SETOM UTHERR    ;SET UTC HUNG ERR FLAG
   023  004 051         CONO UTC,CUINT  ;CAUSE DEC TAPE INTERRUPT ROUTINE TO RUN
   024  227 006 SSLCK1: AOSN UIDLE      ;SKIP UNLESS DEC TAPE IDLE
   025  004 051         CONO UTC,CUINT  ;ACTIVATE INTERRUPT
   026  004 040         CONO PI,UTCOFF
   027  307 023         AOSN QIOCE      ;SKIP IF 2311 BUSY
   028  004 009         CONO 2311C,2311CH       ;ENABLE 2311 INTERRUPT
   029  001 021         IFN NMTCS,PUSHJ P,MSMAGC
   030  004 039         CONO PI,UTCON
   031  307 014         AOSN 2311ZR
   032  004 009         CONO 2311C,2311CH       ;END PHASE 2 OF ZERO RET
   033  307 033         AOS QACTTM
   034  019 002 SSKQ1:  PUSHJ P,DISCHK  ;CHECK FOR 340 DEATH
   035  100 004         PUSHJ P,PDCCHK  ;CHECK ON REAL-TIME HACKS
   036  211 027         PUSHJ P,PTRCHK  ;CHECK ON PAPER TAPE READER
   037  342 065         SKIPN CCSDEV
   038  017 050         JRST SCDCK3
   039  342 065         SETZM CCSDEV
   040  001 015         MOVSI I,-128.
   041  342 062 SCDCK1: SKIPGE A,DCHNTC(
larsbrinkhoff commented 4 years ago

Information about early ITS development.


Date: Mon, 16 Jan 89 13:50 EST
From: Tom Knight <tk@AI.AI.MIT.EDU>
Subject: PCLSR paper history query
To: ALAN@AI.AI.MIT.EDU, TK@AI.AI.MIT.EDU

I'd permute the order of your list to:

Nelson, Greenblatt, Knight, Holloway in terms of relative importance for
early development.  I actually took the first crack at writing a very
early version of the system (it was called SYS for quite a while, I
coined the name ITS later).  Nelson was primarily responsible for the
PCLSR ideas.  Greenblatt did a lot of the initial programming, such as
microtape support.  I did a lot of the other stuff, such as core
allocation (using protect + relocate and BLT!)  the early support for
teletypes (I did the hardware for those too).  I did the first
modification of DDT to run under the system.  It was "temporary" until
Greenblatt got around to writing his command processor (based on Midas
macros!).

Eastlake, Wright, Rubin, George Mitchell and Jerry Freiburg were all
quite important, but came aboard quite a bit later.  In terms of
surviving code, both Wright and Rubin contributed quite a bit.  Wright
did a lot of the rewrites of teletype routines for display devices.
Rubin added the job device and did a lot of work on the network code.
fhgwright commented 4 years ago

Another small piece of ITS. It could be PDP-6 ITS, because it's using the 2311 device. First 1K of DEE; JUST BIN on ToTS tape 3100150.

Compared to ITS 672 it's quite close, but it's missing two sections that deal with page faults, and two lines that deal with the Datapoint kludge device.

Looks like an assembler listing, but not like any MIDAS output I have seen. Maybe an NTS MIDAS?

It's an assembly listing of sorts. Instead of listing the instruction binary, the second and third columns are the page and line number where the reference is defined. If the address is numeric, it falls back to reporting the AC definition. If both the address and the AC are numeric, it reports nothing.

IIRC, at the end of a listing, there was a complete symbol table based on page and line number of definitions.

Fred Wright

                                                       OR DEBUGGING PURPOSES
   285  001 012         TLNE D,210      ;NO ACCESS OR DBL
   286  002 016         TRO A,BIOADC    ;ILM
[...]
larsbrinkhoff commented 4 years ago

Oh, so maybe it's a CROSS or CREF listing. Thanks!

larsbrinkhoff commented 4 years ago

I sent this rough timeline to Tom Knight: (later additions in italics)

He replied:

That is quite an accurate reconstruction of the history. Some additional wrinkles:

The first time sharing system was started by me (but heavily influenced and architected by Stu Nelson). Nelson was responsible for the key idea of PCLSR, probably the most important concept in the OS. The original system was just called SYS, and was later renamed (by me) to ITS. There probably are no extant copies of the original versions, since, as you suggest, they were all on Dectape. Greenblat wrote the dectape control software, which was extremely important in the early days, since there were no disks. Placement of software on blocks mattered, as it could take many seconds to reach a distant file on the tape. Greenblat also figured out how to make the controller spin multiple tapes at the same time, which was also an important optimization, and difficult without help from the dectape controller. Tapes occasionally would “flap” if the software failed to get back to a tape in time. I built the first multi-teletype controller for the PDP-6, which drove the first model 35 teletypes, some modems, and was later used to automatically dial up CTSS on system start to fetch clock time. I also modified DDT as an “interim” measure for handling job creation and debugging. Greenblat had a vision of some other program (never really articulated well, at least to me), called HACTRN. DDT eventually evolved into the primary interactive method. Nelson again had a lot to do with the development of that technology.

larsbrinkhoff commented 4 years ago

ITS hardware memo 1 from February 1970 has information about the 2311 interface, but not the DC-10 2314 interface. The tape from April 1971 has ITS using the DC-10 and no trace of the 2311. However, the tape does have SALV and DSKDMP for the 2311 which suggests a transition had been made not too long before.

The memo also has GE typein and typeout devices at codes 70 and 750. ITS hardware memo 5 documents a "new version of the old Kotok dataphone previously used to interface with the Datanet 760" at code 400. ITS on the 1971 tape has symbols GTYI and GTYO for devices 70 and 400, but only has one trivial use of GTYI.

larsbrinkhoff commented 4 years ago

To create a new directory in 1972: Patch NUFDTB with the sixbit name of the directory. Then access a file.

To create a new directory in 1971: Patch NUFDSW to -1, then write a file to the directory.

larsbrinkhoff commented 4 years ago

HACTRN is first loaded from the SYS device, but if that fails it will retry with the UT2 device.

This must be some remnant from earlier days, because the code no longer works. When ^Z has been typed, the fresh job calls .CALL LOAD to read the program. But this system call doesn't support loading from DECtape; it calls a stub at LOADS which jumps to ILLUUO. There must have been some other way to load programs before .CALL was introduced.

larsbrinkhoff commented 3 years ago

Snippets from a 1988 book. It seems Gerald Sussman had (has?) a 1967 printout of ITS.

its1967

larsbrinkhoff commented 3 years ago

    When I told Sussman about Rees feeling compelled to shoot down the idea of adding unnecessary code to the program, Gerry was sympathetic.     "Most people don't realize that you don't want to make a language more and more complicated. Rees and I have the same feeling, which is you want the thing to be simple and small and elegant - lean and mean. Most programmers tend to clutter up their languages and make them more complicated. One of the things you have to work on when you make up a computer language for people with good taste is you have to keep your thumb on all the people who want to make it more complicated. Keep it simple. I don't want the language to be complicated. I want the things I can build with it to be complicated."     I spoke of how Gumby liked to read good code and about how he would laugh sometimes at a clever hack.     "I believe programs will become a new literature," Sussman said. "And that they say things that couldn't be said mathematically. They provide methodology. I have files of old programs that are classified under Humorous, Sad, programs that are tragic, programs that I've learned something from by reading. I can tell a lot about the personality of the programmer."     I mentioned the XOR hack that Gumby had liked.     "Two XORs in a row?" Sussman said. "Sounds like a Gosper program. I can tell you who it was: Bill Gosper. That's the kind of thing Gosper would write. It's very brilliant, very clever, and it's also at a very low level of detail. And then there are people who are ore architectural.     "When I see a program written by Gosper, I can recognize it. I can read programs write by Winston [Patrick Henry Winston, a former Minsky student who now heads the department] and tel you that's a Winston program. Its got its own flavor."     Then Sussman opened a file drawer, saying, "A long long time ago, what did LISP look like?" He laughed, pulled out a half-inch-think computer printout, laughed again, and said, "It was only this big. That's the amazing thing. It was written by many people. A listing of LISP systems now is about five or six times as thick."     "Yet I can look through this a read various pieces of the code and say, 'This part was written by [Richard] Greenblatt.' I can tell."     The[n] he pulled out a printout that he handled as if it were an original Gutenberg bible. It was the original code for the ITS operating system — the Incompatible Timesharing system. It even seemed awesome to me. Today we just accept the fact that a mainframe computer can be in the basement of a building and desktop terminals can be spread throughout a building, or throughout the world, providing anyone with a terminal, access to the computer. It is hard to realize that as late as the 1960s this wasn't the case. If you wanted computer time, you wrote your program, took it to the computer room, and had it run oftentimes by someone else, even if you wanted to do it yourself.     It is a tribute to the modesty and especially to the irreverence of the early hackers that when they created the world's first timesharing system at MIT, they provided it with a name that was completely opposite from what it really was: the Incompatible Timesharing System.     There was Gerry Sussman holding that half-inch printout, a blessed relic from 1967. The machine has a Moby memory, and as if reciting from the opening words of the Great American novel, Sussman held the printout in his hands and said, "The first line of it is, Moby is One." It was written as Moby = 1, but the way Sussman read it, there was the sound of poetry and philosophy, as existential a piece of haiku as I have ever heard: Moby is One. "These days such an operating system would have maybe one hundred times as much code. But this is what it was like then, filled with some very beautiful code — and some very ugly code. Some of it is humorous, and some of it is sad. Some of it had ideas in it that have been lost. Some historian could go through it someday and read it the way people read the Dead Sea Scrolls and say, 'Aha, The guys who wrote this were real smart guys. And some of the things they knew, we don't even know now.'"     My code was neither cute nor clever. It was awful. But I had been spending some time blundering about with Logo, which is a simplified LISP language, and had found how intoxicating it was to make a computer do your bidding. I had also found how easily the hours could slip away as you kind of did a mind meld with the computer terminal. One morning I went down to the fourth floor with Patrick Sobalvarro, who had helped write several versions of the Logo program, and we found an Apple Ile to play with. The first time I had met Sobalvarro was up on the ninth floor, in one of the small laboratories that ring the field of computers. I had been watching members of Ken Salisbury's robotic-hand group working on the computer-controlled motions of a three-fingered hand they had created. Each finger had three joints. A VAX minicomputer was used for the execution of, and a LISP machine was used to translate the movement commands for the VAX.     "Holy shit!" Sobalvarro said when he saw the smoothness with which the three fingers turned a pop can. Steven Chiu, who had done the LISP programming, was proud that Sobalvarro was impressed. Sobalvarro had programmed computers for the control or robotic arms and knew how complex the code could be.

BobKerns commented 3 years ago

Who is the narrator here? The time would appear to be the early-mid 1980s.

larsbrinkhoff commented 3 years ago

It's all from the book in the comment above: The Tomorrow Makers, by Grant Fjermedal. So the narrator would be Grant. The book was first published in 1986, with a second edition in 1988. I have ordered a used copy.

I also emailed Sussman inquiring about the printout, but I got no reply so far. I will pursue this further, because I think a 1967 version of ITS would be very interesting to see!

BobKerns commented 3 years ago

I wasn't sure if it was Grant (whom I hadn't heard of until you cited his book) or if he was quoting someone I might know.

Either way, yes, a 1967 ITS would be fascinating! I should also get the book. I don't normally do paper books these days (my nice home library quickly spread to every place we could put a bookcase decades ago, and my eyes like being able to adjust the print size...). But this seems worth it!

larsbrinkhoff commented 2 years ago

Update! Sussman found the listing which turns out to be ITS version 138.

ambiamber commented 2 years ago

William Arthur Martin's1967 thesis paper, Symbolic Mathematical Laboratory mentions the PDP-6 to CTSS dataphone Lisp interface code. My impression is that it preceded ITS but he does state that the large core memory had become available. Screenshot from 2022-10-03 16-25-01

larsbrinkhoff commented 2 years ago

Thank you, @ambiamber. I see the date January 1967. This is consistent with what we have learned about the moby memory. It was delivered some time mid-1966 but it took a while to get it working right. Peter Samson told us the subway hack required the use of the full moby, and that took place in April 1967. ITS went online in July.

I haven't researched the dataphone interfaces thoroughly. ITS hw memo 5 mentions an "old Kotok dataphone", although that was supposedly interfacing to the Datanet 760. ITS source code from 1971 has a dial out device and code to retrieve the time and date from CTSS; these were made by Fred Wright.

larsbrinkhoff commented 1 year ago

I talked to @gjs some weeks ago, and he said he'd have the printout scanned.

larsbrinkhoff commented 10 months ago

The ITS 138 listing is now being processed: https://github.com/PDP-6/ITS

The TITLE directive says ITS 1.0 3/19/67, but the dating doesn't seem to have been updated. It has support for GE consoles, but not Data Disc drives. They are both present in AI memo 161 from July 1968.