> Date: Thu, 23 Feb 2023 18:38:25 +0000
> Subject: [TUHS] Re: Origins of the SGS (System Generation Software)
> and COFF (Common Object File Format)
>
> For the sake of timelines:
>
> June 1980 - Publication date on the front page of the 3.0 manual in which the utilities are still very much research for PDP-11 and 32V-ish for VAX where distinctions matter.
>
> June 1981 - Publication date on the front page of the 4.1 manual in which the man-pages very much refer to all of this as the "3B-20 object format"
>
> June 1982 - Publication date on the front page of the 5.0 manual by which point these same pages had been edited and extended to describe the "common object file format"
>
> Additions at the 1981 release include dump(1), list(1), and the ld-prefixed library routines for managing these object files. These likewise persist in 5.0, SysV, and beyond as COFF-related tools.
>
> So this puts the backstop of what would become COFF at at least '81.
>
> - Matt G.
The surviving source code for SysV R2 supports this timeline:
- The header files (start from https://github.com/ryanwoodsmall/oldsysv/blob/master/sysvr2-vax/src/head/a.…) have dates of late ’82, early ’83.
- The source for exec() has a comment that refers to the 4xx magic formats as “pre 5.0 stuff”.
- The COFF format headers are #ifdef’ed for the 3B series.
Interestingly, the lowest magic numbers in the 5xx series are not for the 3B, but for the “Basic-16” and for the “x86”. That led me to this paper:
https://www.bell-labs.com/usr/dmr/www/otherports/newp.pdf
It seems that the roots of COFF go back to the initial portability effort for V7 and in particular the 8086 port (which was done in 1978 according to the paper).
> From: Clem Cole
> MIT had a modified a.out format for the NU machine ports - that might
> have been called b.out.
Yes. Here's the man page output:
http://ana-3.lcs.mit.edu/~jnc/tech/unix/help/b.out.lpt
(I don't have the source for that, alas.) It's basically just a.out with
32-bit fields instead of 16-bit. I have a .h file for the format too, if
anyone has any interest in it. It's all part of the MIT 68K workbench that
used PCC (the source for all of which I do have).
Noel
COFF transfer, TUHS Bcc'd to know where this thread went.
Between the two if you're not doing UNIX-specific things but just trying to resurrect/restore these, COFF will probably be the better place for further discussion. @OP if you're not a member of COFF already, you should be able to reach out to Warren Toomey regarding subscription.
If you're feeling particularly adventurous, NetBSD still supports VAX in some manner: http://wiki.netbsd.org/ports/vax/
YMMV, but I've had some success with NetBSD on some pretty oddball stuff. As the old saying goes, "Of course it runs NetBSD". You might be able to find some old VMS stuff for them as well, but I wouldn't know where to point you other than bitsavers. There's some other archival site out there with a bunch of old DEC stuff but I can never seem to find it when I search for it, only by accident. Best of luck!
- Matt G.
------- Original Message -------
On Wednesday, February 22nd, 2023 at 10:08 AM, jnc(a)mercury.lcs.mit.edu <jnc(a)mercury.lcs.mit.edu> wrote:
> > From: Maciej Jan Broniarz
>
>
> > Our local Hackroom acquired some VAX Station machines.
>
>
> Exactly what sort of VAXstations? There are several different kinds; one:
>
> http://gunkies.org/wiki/VAXstation_100
>
> doesn't even include a VAX; it's just a branding deal from DEC Marketing.
> Start with finding out exactly which kind(s) of VAXstation you have.
>
> Noel
Has anyone tried talking to anyone at Oracle about possibly getting
the SunOS code released under an open source license? There can't be
any commercial value left in it.
- Dan C.
> From: Maciej Jan Broniarz
> Our local Hackroom acquired some VAX Station machines.
Exactly what sort of VAXstations? There are several different kinds; one:
http://gunkies.org/wiki/VAXstation_100
doesn't even include a VAX; it's just a branding deal from DEC Marketing.
Start with finding out exactly which kind(s) of VAXstation you have.
Noel
Hello Everyone,
Our local Hackroom acquired some VAX Station machines. The problem is, we
have absolutely no docs or knowledge how to run the machine or how to test
if it is working properly. Any help would be appreciated
All best,
--
Maciej Jan Broniarz
Was an upgrade for ethernet TCP/IP for Unix V7 ever
done when running under SIMH?
Was an upgrade ever done for Unix V7 when running
under SIMH to read and set the date/time? I have a
work around but it doesn't work because when running
the sim it inserts boot code then when the 'run 2002'
is issued further startup commands in the 'conf' file are
ignored.
System was built from unix_v7.tm dated 20 June 2006.
run.conf contents:
echo
echo Unix V7 startup 2-19-2023 KenUnix
echo
set cpu 11/45
set cpu 256k
set rp0 rp04
attach rp0 system.hp
d cpu 2000 042102
d cpu 2002 012706
d cpu 2004 002000
d cpu 2006 012700
d cpu 2010 000000
d cpu 2012 012701
d cpu 2014 176700
d cpu 2016 012761
d cpu 2020 000040
d cpu 2022 000010
d cpu 2024 010061
d cpu 2026 000010
d cpu 2030 012711
d cpu 2032 000021
d cpu 2034 012761
d cpu 2036 010000
d cpu 2040 000032
d cpu 2042 012761
d cpu 2044 177000
d cpu 2046 000002
d cpu 2050 005061
d cpu 2052 000004
d cpu 2054 005061
d cpu 2056 000006
d cpu 2060 005061
d cpu 2062 000034
d cpu 2064 012711
d cpu 2066 000071
d cpu 2070 105711
d cpu 2072 100376
d cpu 2074 005002
d cpu 2076 005003
d cpu 2100 012704
d cpu 2102 002020
d cpu 2104 005005
d cpu 2106 105011
d cpu 2110 005007
echo
echo To boot type boot enter then hp(0,0)unix enter after 'mem =' press
ctrl-d
echo To cancel press ctrl-e then at sim> type exit enter
echo At login: type root enter at password type root enter
echo To shutdown sync;sync wait 5 then press ctrl-e then at sim> type exit
enter
echo
echo Copy / paste date at #
echo DATE 2302191116
run 2002
Thanks,
Ken/--
WWL 📚
Hello there,
I recently watched an old Unix promotion video by AT&T on YouTube (AT&T
Archives: The UNIX Operating System: https://youtu.be/tc4ROCJYbm0) and
they mention a design tool for integrated circuits (apparently named
L-Gen or lgen; timestamped link: https://youtu.be/tc4ROCJYbm0?t=1284)
Part of this software is a language implemented with YACC that appears
to describe the behavior of digital logic, like modern hardware
description languages, i.e. Verilog and VHDL.
Does anyone have information about this, in particular:
- Documentation
- Which projects were realized with this?
- Source code, if possible
I asked this question on retrocomputing.stackexchange.com (see
https://retrocomputing.stackexchange.com/q/26301/26615) but so far there
is no satisfying answer. A "Circuit Design Language" (CDL) is mentioned
and there is some good information about it but it has another syntax
(as shown in the video vs. the documentation about CDL) and apparently
another purpose (description of board wiring vs. logic behavior).
Best regards,
Christian
Here is a simplified 'more' command for Unix V7:
/*********************************************************************
* UNIX pager (v7 compatible) Chipmaster and KenUnix
*
* cc -o more more.c
*
* Usage examples:
* man wall | more
* more xyz
* more abc def xyz
*
* Started February 15th, 2023 YeOlPiShack.net
*
* This is the ultimately dumbest version of more I have experienced.
* Its main purpose is to illustrate the use of /dev/tty to interact
* with the user while in a filter role (stdin -> stdout). This also
* leaves stderr clear for actual errors.
*
*
* NOTES on Antiquity:
*
* - The early C syntax didn't allow for combining type information
* in the parenthesized argument list only the names were listed.
* Then a "variable" list followed the () and preceded the { that
* declared the types for the argument list.
*
* - There is no "void", specifically there is no distinction
* between a function that returns an int or nothing at all.
*
* - Many of the modern day header files aren't there.
*
* - Apparently "/dev/tty" couldn't be opened for both reading and
* writing on the same FD... at least not in our VM.
*
* - Apparently \a wasn't defined yet either. So I use the raw code
* \007.
*
* - Modern compilers gripe if you do an assignment and comparison in
* the same statement without enclosing the assignment in (). The
* original compilers did not. So if it looks like there are too
* many ()s it's to appease the modern compiler gods.
*
* - I'm not sure where they hid errno if there was one. I'd think
* there had to be. Maybe Kernighan or Pike knows...
*
*********************************************************************/
#include <stdio.h>
/*** Let's make some assumptions about our terminal columns and lines. ***/
#define T_COLS 80
#define T_LINES 24
/*** Let's set up our global working environment ***/
FILE *cin; /* TTY (in) */
FILE *cout; /* | (out) */
int ct = 0;
/*** message to stderr and exit with failure code ***/
err(msg)
char *msg;
{
fputs(msg, stderr);
exit(1);
}
/*** A poor man's CLear Screen ***
*
* Yup! This is how they used to do it, so says THE Kenrighan & Pike!
* termcap?!?! What's that?
*/
cls()
{
int x;
for(x=0; x<T_LINES; ++x) fputc('\n', cout);
ct = 0; /* reset global line count */
}
/*** The PAUSE prompt & wait ***/
pause()
{
char in[T_COLS+1]; /* TTY input buffer */
fflush(stdout); /*JIC*/
fputs("--- [ENTER] to continue --- Ctrl-d exits ", cout);
fflush(cout);
if(!fgets(in, 81, cin)) {
/* ^D / EOF */
fputc('\n', cout); /* cleaner terminal */
exit(0);
}
}
/*** Read and page a "file" ***/
int pg(f)
FILE *f;
{
char buf[T_COLS+1]; /* input line: usual term width + \0 */
/*** read and page stdin ***/
while(fgets(buf, sizeof(buf), f)) {
/* page break at T_LINES */
if(++ct==T_LINES) {
pause();
ct = 1;
}
fputs(buf, stdout);
}
return 0;
}
/*** Let's do some paging!! ***/
int main(argc, argv)
int argc;
char *argv[];
{
FILE *in;
int x, er;
/*** Grab a direct line to the TTY ***/
if(!(cin=fopen("/dev/tty", "r")) || !(cout=fopen("/dev/tty", "w")))
err("\007Couldn't get controlling TTY\n");
/*** with CLI args ***/
if(argc>1) {
er = 0;
for(x=1; x<argc; ++x) {
if(argc>2) {
if(!er) cls();
er = 0;
/* remember all user interaction is on /dev/tty (cin/cout) */
fprintf(cout, ">>> %s <<<\n", argv[x]);
pause();
}
/* - is tradition for stdin */
if(strcmp("-", argv[x])==0) {
pg(stdin);
/* it must be a file! */
} else if((in=fopen(argv[x], "r"))) {
pg(in);
fclose(in);
} else {
/* errors go on stderr... JIC someone want to log */
fprintf(stderr, "Could not open '%s'!\n", argv[x]);
fflush(stderr);
er = 1; /* this prevents cls() above. */
}
}
/*** no args - read and page stdin ***/
} else {
pg(stdin);
}
return 0;
}
End...
--
WWL 📚