Trivia for the night

77 views
Skip to first unread message

Bill E

unread,
Oct 30, 2025, 7:50:13 PM (7 days ago) Oct 30
to [PiDP-1]
Given how serious all the current discussions are (welcome back Angelo!), here's a PDP-1 tidbit. Ever wonder why so many programs start at either address 4 or 100?
Simple. The 'sequence break system', aka interrupts, uses locations 0-3. If you have the 16 channel version, it uses locations 0-077. So, there you have it. Of course, if a program doesn't use interrupts, no need to pay attention. But a number of hardware devices did support interrupts. so it seems it became common practice to leave those locations alone.
Bill

Glenn Babecki

unread,
Oct 30, 2025, 10:50:07 PM (7 days ago) Oct 30
to Bill E, [PiDP-1]
Thanks for the legwork on this.  I knew of the for the start a location 4, but had not gotten into the 16 channel interrupt system yet.akes sense that the 16 channels place the next start address at 100 (octal). 👍

--
You received this message because you are subscribed to the Google Groups "[PiDP-1]" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-1+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/pidp-1/e2417646-62ef-45e5-9996-396cd807a1efn%40googlegroups.com.

Norbert Landsteiner

unread,
Nov 1, 2025, 12:20:42 AM (6 days ago) Nov 1
to [PiDP-1]
Moreover, the instruction `cal` (equalling `jda 100)` suggests that address 101 was envisioned as a major entry point.
(Especially as a standard entry point for subroutines, since `cal` stands for call subroutine.) 
But I haven't seen `cal` used "in anger", yet.

On a personal note, I never understood why there's `cal`, at all, and it's a quite puzzling instruction.
With a single-word instruction set, there's no difference in having an instruction `cal` (16YYYY) or an instruction `jda 100` (170100). I really don't see any advantage in using `cal`. Moreover, just a single subroutine, really? The Handbook actually describes this as `cal Y`, but Y is completely ignored, if the i-bit isn't set. (Which is the actual difference between `cal` and `jda`. In other words, if the i-bit isn't set, `100` is jammed in as the call address, instead of Y.) – Are we expected to derive the caller address from the return address as put in AC and retrieve the value of Y from the address part of the `cal` instruction? (This would be equally backwards and awkward, much like the "break mark" of the 6502 `BRK` instruction, which is really more an artefact of the repurposed interrupt system than a useful feature.)
Is there any reason for this in the 16-bit sequence break channel circuitry, like a facility to execute an implicit `cal`?

Best,
Norbert

Bill E

unread,
Nov 1, 2025, 8:49:23 AM (6 days ago) Nov 1
to [PiDP-1]
I haven't see anything to indicate that cal has any meaning to the SBS16 system. All interrupts vector thru the usual 4 words, nothing in any of the commands or documentation indicate otherwise. From various bits I've read, just about everyone considers cal useless, and it apparently was very rarely used.
Bill

Angelo Papenhoff/aap

unread,
Nov 1, 2025, 10:25:13 AM (6 days ago) Nov 1
to [PiDP-1]
I think the idea is to implement your own opcodes with this? with extended memory it's neat that you can have a fixed entry at 100 field 0 available. if you then dispatch on the address of the CAL instruction it might give you some nice flexibility. will have to experiment with this :)

Bradford Miller

unread,
Nov 1, 2025, 12:52:43 PM (6 days ago) Nov 1
to Angelo Papenhoff/aap, [PiDP-1]
See: https://ia801502.us.archive.org/18/items/bitsavers_decpdp1mem_392642/M-1091_MAC_Nov60.pdf which claims CAL was essential for building the MAC master subroutine system.

Also according to http://simh.trailing-edge.com/docs/architecture18b.pdf CAL showed up in all DEC’s 18b computers, where other instructions got replaced if they weren’t useful. So it had to be something that got used, by DEC if not by customers?

Norbert Landsteiner

unread,
Nov 1, 2025, 1:27:19 PM (6 days ago) Nov 1
to [PiDP-1]
I think, it may be also useful in the context of bank switching?
It may be interesting, when the instruction was actually introduced. Looking at the front panels, the A prototype had no facility to extend memory, at all, and the BBN prototype used an instruction field and a data field architecture (much like the PDP-8, I guess?). There were dedicated instruction to control the IF and DF registers, which are not found on the production machines. So it may be interesting to check, if `cal` was already present on the BBN prototype. (If I just could recall what's the manual, where this particular instruction set is in…)

Best,
Norbert

Angelo Papenhoff/aap

unread,
Nov 1, 2025, 1:39:15 PM (6 days ago) Nov 1
to [PiDP-1]
F15_PDP1_Handbook_Apr60.pdf as well as the preliminary pdp-3 spec don't have cal/jda. F15B_PDP1_Handbook_1961.pdf has them. 

Bill E

unread,
Nov 1, 2025, 2:35:47 PM (5 days ago) Nov 1
to [PiDP-1]
I have a vague recollection that there was some different behavior of cal vs the regular ones related to banks, but I didn't pay much attention to it.
So, might be useful for something.
Bill

Milo Velimirović

unread,
Nov 1, 2025, 3:27:25 PM (5 days ago) Nov 1
to Angelo Papenhoff/aap, [PiDP-1]
Perhaps it’s a precursor to the pdp-11 EMT/TRAP instructions where state is saved, control is transfered to a fixed location, AND information is transferred to the called routine in the form of the opcode. Without a privileged/unprivileged mode to TRAP into (and an RTI/RTT) cal is less useful, except as Angelo describes.

On Nov 1, 2025, at 10:25 AM, Angelo Papenhoff/aap <a...@papnet.eu> wrote:

Norbert Landsteiner

unread,
Nov 1, 2025, 11:48:05 PM (5 days ago) Nov 1
to [PiDP-1]
> F15_PDP1_Handbook_Apr60.pdf as well as the preliminary pdp-3 spec don't have cal/jda

"F15_PDP1_Handbook_Apr60.pdf" seems to still reflect the A prototype (at least in the photos). Then, there's this instruction list card, https://bitsavers.org/pdf/dec/pdp1/F16A_PDP-1_Instruction_List_196307.pdf, which is somewhat transitional, listing `jfd Y`("jump memory field according to C(Y)") but also showing already `div` and `mul` (instead of `dis` and `mus`). (This may be about the C prototype that went to Ed Fredkin's newly founded Triple-I?) There's also the March 1961 brochure, found only as images in https://bitsavers.org/pdf/dec/pdp1/JPEGs/, showing the BBN prototype (but none of those field instructions.) Both do show the `cal` and `jda` instructions.
But there's also some more obscure documentation, showing some more field related instructions, which probably applied to the BBN prototype only.

Best,
Norbert
Reply all
Reply to author
Forward
0 new messages