And update on the update

Well I was playing around with a version of 4.3 BSD I’d never heard of, that was from the University of Wisconsin, when I figured out a quick hack to get the 4.3 BSD’s networking operational under SIMH’s 11/780 emulator. I simply removed the error checking from the recv portion in the if_de.c file, and it now works!

So I have updated some packages on the sourceforge site:

https://sourceforge.net/project/showfiles.php?group_id=204974&package_id=245145

4.3 BSD & UWisc 4.3 BSD have been added, and both are ready to run with SLiRP (User mode networking/nat).

As for the Wisconsin release, it may interest people as they had taken the NFS & VFS code from SunOS and integrated them into 4.3 BSD before the RENO time frame. From there it seems that most of the hackers at UWisconsin went on to either Legato or SUN to continue their work, leaving this release as a single event… The tape image seems to have last been used January 12th, 1987. This release does not appear on the UNIX family tree’s.. It’s like a long forgotten offshoot, but still I think it’s kind of cool. And it shows just how networking was done back then with nearly 4000 enteries in the hosts file!

I’ve been trying to track down some more info from the TUHS list, but if anyone else passing by wants to add anything, feel free to let me know!

Otherwise, the installer package on sourceforge should run on any Windows 98 or above machine.

Updates on my sourceforge BSD/SIMH packages

On my project page I have made some new packages for 4.3BSD & 4.2BSD. Both of which can be downloaded here.

The updates include:
-moving to 3.8-1 of SIMH
-turning off unnecessary services in BSD
-moving from putty to Tera Term
-fixing PDF documentation links..

While not a major update, I figure since people are still downloading the 4.3 BSD RENO version as of TODAY I figure an update for these people wouldn’t be such a bad thing…

As before they are windows install packages, although I guess if you were so motivated you could extract them on some kind of *nix box..

NASA space probe data

While nothing to do with emulation, I came across this ftp server with all kinds of data from NASA probes.

nssdcftp.gsfc.nasa.gov

It’s got all kinds of readings, and even some programs to interpret the data.. (FORTRAN from what I saw). It’s got to be one of the better clearing houses of space probe data available… I suppose later on I’ll see what’s involved in running some of these programs.. But I wouldn’t hold your breath…!

Even for the less inclined, there is jpeg & tiff data!

For example here is a picture from the viking project on Mars:
ftp://nssdcftp.gsfc.nasa.gov/miscellaneous/planetary/viking/images/vom_sj05s070.jpg

Stunning to say the least.

easy68k & sozobon

Easy68k

I know this is a little weird to follow, but I thought it was somewhat interesting. Anyways I’ve been reading up on some CP/M stuff, and found some interesting m68k stuff. There is this really cool m68k simulator/test environment called easy68k. Ok so the 68000 isn’t exactly the hottest chip, but for anyone that’s used a Mac, Amiga, Atari ST, SEGA Genesis, or old SUN the m68000 was the end all be all CPU. Anyways you can download the easy68k simulator from here:

http://www.easy68k.com/

Now I’ve never been really all that good with assembly. I know one day I should learn, but until then, there is higher level languages, and of course the best ‘medium’ level language C. Back in the day the ‘sozobon’ compiler was somewhat portable, and a good & easy 16 bit C compiler. Now as far as I know there really hasn’t been any activity on this since 1991, so it’s getting hard to find, and of course the archived copies I found needed LZH.. You can find some archived copies here:

http://umich.edu/~archive/atari/Languages/Sozo2/

Since I didn’t want to go thru a big ordeal, I found an extracted copy of the sources here:

http://cd.textfiles.com/crawlycrypt1/program/compiler/sozobon/

Building the sozobon compiler

Using wget I pulled down the source code. It’s worth noting that unlike GCC this is SMALL… although it only targets the 68000 cpu. The only source that I’m using is the actual C compiler. I suppose if I were better I could map the simulator, and setup the assembler & linker to target the environment all the way… However for now I’m just interested in showing the relationship between a compiler, to the assembler. Now the source is old enough that it uses the reserved word inline in gunk.c I simply changed it to Xinline. I’ve attached a diff for those who like diff’s however as you can see it’s really simple, I just renamed them, so they don’t conflict.


--- gunk.c Fri Feb 22 05:33:34 1991
+++ gunk-fix.c Mon Mar 9 14:35:33 2009
@@ -37,7 +37,7 @@
int (rewri)(); / rewrite function */
};

-int m_unfold(), unfold(), m_cast(), cast(), m_inline(), inline();
+int m_unfold(), unfold(), m_cast(), cast(), m_inline(), Xinline();
int m_hardas(), hardas(), m_fcmp(), fcmp(), m_md_shf(), md_shf();
int m_eident(), eident(), m_incdec(), incdec(), m_fldas(), fldas();

@@ -48,7 +48,7 @@
{m_eident, eident},
{m_incdec, incdec},
{m_hardas, hardas},
- {m_inline, inline}, /* must cast before inline /
+ {m_inline, Xinline}, /
must cast before inline */
{m_fcmp, fcmp},
{m_fldas, fldas},
{0}
@@ -424,7 +424,7 @@
return 0;
}

-inline(np)
+Xinline(np)
NODEP np;
{
register NODEP nmp, cmap;
@@ -782,7 +782,7 @@
register NODEP tp;

spar1 = "%fpcmp";
- inline(np);
+ Xinline(np);

tp = copyone(np);
tp->n_left = np->n_left;

Now with that out of the way, you should be able to build with the make.unx


% make -f make.unx
gcc -DUNIX -O -c d2.c
gcc -DUNIX -O -c decl.c
gcc -DUNIX -O -c expr.c
gcc -DUNIX -O -c fix.c
gcc -DUNIX -O -c fun.c
gcc -DUNIX -O -c g2.c
gcc -DUNIX -O -c gen.c
gcc -DUNIX -O -c gsub.c
gcc -DUNIX -O -c gunk.c
gcc -DUNIX -O -c main.c
main.c:424: warning: 'optnl' was declared implicitly 'extern' and later 'static'
main.c:417: warning: previous declaration of 'optnl'
gcc -DUNIX -O -c md.c
gcc -DUNIX -O -c nodes.c
gcc -DUNIX -O -c out_st.c
gcc -DUNIX -O -c p2.c
gcc -DUNIX -O -c pre.c
gcc -DUNIX -O -c tok.c
gcc -DUNIX -O -c subs_c.c
gcc -o xhcc d2.o decl.o expr.o fix.o fun.o g2.o gen.o gsub.o gunk.o main.o md.o nodes.o out_st.o p2.o pre.o tok.o subs_c.o

Writing hello world!

OK, with the compiler built, let’s write a simple C program. I’ve setup a simple main, and calls to a ‘putc’ and an ‘exit’ that currently don’t do anything. We will have to fix that in the assembly source.. but for now it’s nice as it sets up a place holder.



char MESSAGE[]="this is a message";
void putc(c)
char *c;
{

}
void exit()
{}

void main()
{
int j;
j=0;
putc(MESSAGE);
exit();
}

Now we can compile the source file (x.c) and use the -S flag, so it only outputs an assembly source, that we can then massage to work with easy68k.


% ./xhcc -S x.c ; cat x.s
.data
.globl _MESSAGE
_MESSAGE:
.dc.b $74,$68,$69,$73,$20,$69,$73,$20,$61,$20,$6d
.dc.b $65,$73,$73,$61,$67,$65
.dc.b 0
.text
.globl _putc
_putc:
bra L1
L0:
;var 4 8 _c
L2:
unlk a6
rts
L1:
link a6,#-0
bra L0
.globl _exit
_exit:
bra L4
L3:
L5:
unlk a6
rts
L4:
link a6,#-0
bra L3
.globl _main
_main:
bra L7
L6:
;var 2 -2 _j
clr.w -2(a6)
move.l #_MESSAGE,-(sp)
jsr _putc
add.w #4,sp
jsr _exit
L8:
unlk a6
rts
L7:
link a6,#-2
bra L6
.data

As you can see from the source below the following changes were made:

-Added the ORG $1000
-Changed the formatting of the _MESSAGE into a format that easy68k’s assembler likes.
-Removed all the .globl statements.
-Renamed the _main section to START & and add the end start tags.
-Populated the exit procedure with the ‘exit’ code from easy68k’s example
-Changed putc to use the d0 register instead of d6, and added the print string code from easy68k.


ORG $1000

_MESSAGE dc.b $74,$68,$69,$73,$20,$69,$73,$20,$61,$20,$6d
dc.b $65,$73,$73,$61,$67,$65
dc.b 0

_putc:
bra L1
L0:
;var 4 8 _c
move.b #14,d0
trap #15

L2:
unlk a0
rts
L1:
link a0,#-0
bra L0

_exit:
bra L4
L3:
L5:
unlk a6
rts
L4:
move.b #9,d0
trap #15
link a6,#-0
bra L3

START:
bra L7
L6:
;var 2 -2 _j
clr.w -2(a6)
move.l #_MESSAGE,-(sp)
jsr _putc
add.w #4,sp
jsr _exit
L8:
unlk a6
rts
L7:
link a6,#-2
bra L6
end start

conclusion

Now you can run the code in the simulator, and watch it enter the ‘start’ section, call the putc with the address of _MESSAGE, return to the main, and then call the _exit procedure, which calls the sim68k exit program interrupt. I’ll leave this as an exercise to the read for any real value…. I just thought it was cool, that without really learning any assembly I was able to write a basic ‘hello world’ type program in an hour….

HECnet update

I’ve updated the code to work with windows! I built this with MinGW… although it should build with others…

Anyways it’s easy to use, but requires a numeric ip address to attach too…

att xq 192.168.0.1:7771

Is the syntax, host then : then port.

It should be somewhat robust, not requring the bridge to send something first for it to work…

The code snippet can be found here:

http://gunkies.org/wiki/Networking_with_SIMH#HECnet

SIMH v3.8-1 released!

A new bugfix version of SIMH has been released!

I’ll be adding more binaries onto the sourceforge page, but in the meantime, the sourcecode is up, win32 binaries & i386 linux binaries are also uploaded.

http://sourceforge.net/projects/simh/

From the notes:
SCP and libraries: Fixed bug in DETACH ALL if called at simulator exit (from Dave Bryan) Fixed bug in DO command handling of null arguments (from Dave Bryan) Fixed bug in DO handling of \\ (literal backslash) (from Dave Bryan) Fixed warnings in help printouts HP2100 (all changes from Dave Bryan)
Corrected DMS violation register set conditions JSB to 0/1 with W5 out and fence = 0 erroneously causes MP abort Fixed DJP, SJP, and UJP jump target validation BACI: Fixed STC,C losing interrupt request on BREAK MPX: Implemented 12792C eight-channel terminal multiplexer MT: Fixed missing flag after CLR command PIF: Implemented 12620A/12936A Privileged Interrupt Fences IBM 1401:
Fixed bug in ZA and ZS (from Bob Abeles) Fixed tape indicator implementation (from Bob Abeles) Added missing magtape modifier A (from Van Snyder) Added -n (no rewind) option to BOOT (from Van Snyder) Fixed bug to mask input to 6b on read (from Bob Abeles) PDP11:
Moved all Unibus/Qbus support routines to common I/O library Fxed bug in ASHP left overflow calc Fixed bug in DIVx VAX:
Fxed bug in ASHP left overflow calc Fixed bug in DIVx Resync time of day clock on any clock reset

HECnet client for SIMH

Ok the good news is that my PS3 running SIMH/VAX/Quasijarus is pinging away on my OpenBSD machine running the HECnet bridge program…

The ‘bad’ news for now is that it’s all *nix based… so no joy for the windows crowd. I’ll fix this soon enough, and release some binaries…

For now you can read about it here:

http://mailman.trailing-edge.com/pipermail/simh/2009-February/002205.html

Colossal Cave on the PDP-8 & OS/8 redux

Just an FYI I got a quick message from Rick Murphy regarding the OS/8 image for Adventure. The new image is now located here:

http://www.rickmurphy.net/advent/advent.rk05

Naturally, check out his page with all the information regarding Adventure on OS/8 right here:

http://www.rickmurphy.net/adventure.html

Once more again, special thanks to Rick for making this whole “adventure adventure” possible!!

xv6

While adding pages & stuff to http://gunkies.org/wiki/Unix_System_6 I came across this thing called xv6 at MIT.

http://pdos.csail.mit.edu/6.828/2006/index.html

What it is, is a port of Unix v6 to the x86 cpu. Before this, apparently they were using actual v6 on a PDP-11 emulator, however for their uses it would be easier to use something more i386 like. Now the cool part is that it’s SMALL. It harkens back to the day when people could actually read the code to their OS..

# cat *.c wc -l
6384
cat *.h wc -l
1019
cat *.S wc -l
311

Yes, that all there is to it! It litteraly takes 4.5 seconds to compile the whole thing, and setup a boot/root disk image on a 1.5 Ghz P4. The only ‘catch’ is that you need elf tools to build the thing.. Most Linux/NetBSD/OpenBSD folk ought to be in luck as they have been elf for quite some time now.. For windows people it’s just easier to install an OS into a VM that contains an ELF toolchain.. Don’t feel bad about compiling it in a VM as it will not be that big of an ordeal.

Download the inital source from here: http://pdos.csail.mit.edu/6.828/2006/src/xv6-rev0.tar.gz

If you feel brave go thru the labs.. They have stuff to add like virtual memory and whatnot, but they do walk you thru it, with guides and stuff… Remember this is out of a class, they don’t throw the kids to the wolves as it were.

Naturally since it’s v6, there is no TCP/IP, heck it doesn’t even have native tools… But it *can* run exe’s so it’s got enough to get your feet wet.. It’s dammed near tempting to complete the course work to flesh it out, grab 32v and start building a userland then bring it to 3BSD levels… But then I guess that is missing the point of a small readable Unix.

Anyways I found it interesting, no pictures on this one but either way its… different. Oh and the disk images run great under Qemu for what it’s worth.