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.

new MS-DOS build of SIMH 3.8-1

Well I went ahead and cranked out another copy of the SIMH for MS-DOS package, which includes a new emulator this time around, the SWTPc 6800. It includes a disk image for Flex 2.0, and I’ve also switched the DOS extender from DOS4G/W to DOS-32A.

You can download it here:

http://downloads.sourceforge.net/simh/simh-3.8-1_MS-DOSi386-exe.zip?use_mirror=osdn

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 (<em>rewri)(); /</em> 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 <em>/
+ {m_inline, Xinline}, /</em> 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.

Colossal Cave on the PDP-8 & OS/8

While I was tracking down some FORTRAN versions of Zork/Adventure I came across the original ‘advent’ for OS/8. Not realizing it at the time, but this ‘advent’ I had come across was not the ‘adventure’ of zork fame, but adventure of Colossal Cave fame. Colossal Cave was written by Willie Crowther and quickly became one of the most popular games for it’s time. Because it was written in FORTRAN it was portable to various machines, not limited to the original version for the PDP-10, to even the IBM-PC (Microsoft released it the same time as MS-DOS 1.0). The version in question has been expanded by Don Woods to include the fantasy aspect of it. And with SIMH it’s very easy to get running.

First you will need a PDP-8 emulator. Natrually I’d recommend SIMH. You can download source and binaries from the sourceforge page here:
http://sourceforge.net/projects/simh/

With the emulator in hand, next I’d just recommend you use the disk image graciously provided by Rick Murphy with both OS/8 and the adventure program already compiled and indexed here:
http://www.rickmurphy.net/advent/advent.rk05

Now all you need to do is setup an .ini file for the PDP8 emulator. It’s very easy just save this in a .ini file with the emulator in the disk image in the same directory. If you call it pdp8.ini it will auto execute when you run the pdp8 emulator.

set cpu 32K
set cpu idle
att rk0 advent.rk05
boot rk0
exit

Now go ahead and run the emulator.

You will be greeted with a . prompt. Now type in:

R FRTS

This will run the FORTRAN runtime system… It’s funny to note that in this day and age we take things like runtime systems for granted as this kind of thing is bound to the exe, and we just run things never thinking of where they came from. There is no doubt the DLL has been an improvment over stuff like this from the 1970’s… Anyways with the FORTRAN runtime loaded we are now at a * prompt. We just have to tell it the FORTRAN program to run, in this case it’s ADVENT. So type in the following:

ADVENT

You will still be at the * prompt, to execute it, hit the escape key. Then you will get the following output:

*ADVENT
*$
WELCOME TO ADVENTURE!! WOULD YOU LIKE INSTRUCTIONS?
>

Ok, now you are ready to enter the FORTRAN version of Colossal Cave under OS/8. And it shouldn’t have been *that* hard… 🙂

Now for anyone wondering about the original version of Colossal Cave, The original FORTRAN source to adventure has been located here:

http://jerz.setonhill.edu/if/crowther/

And if anyone is brave enough, OpenWATCOM includes it’s FORTRAN compiler.. not to mention G77, and of course the original FORTRAN stuff that can be run in SIMH. I’d leave this up to the reader as my FORTRAN skills are… lacking. I don’t know if it’s me, but I started out with the IBM FORTRAN on the RS/6000 back in the AIX 3.2.1 days, and then went to Microsoft FORTRAN 5.. Now it seems I’ve forgotten just about everything, and what I do recall works on few and far of the things out there…. But that’s another story for another day. Oh and if you search around there is a C version of this….

Apple Lisa Xenix

Wow I’m surprised a few hours googleing about and I got it running….
I found this ‘idle’ emulator (“Incomplete Draft of a Lisa Emulator”
http://sourceforge.net/projects/idle-lisa-emu ), which can infact run Xenix! It also says it can run the uniplus SYSV (so says the readme)..

Searching around I found the following site:
http://unixsadm.blogspot.com/2007/12/xenix-blast-from-past-looking-back-at.html

Whas Xenix 3.0 disk images in the DART format… which as luck would have it idle cannot mount. However I found another lisa emulator, lisaem ( http://www.sunder.net/ ) which has a tool to convert the disks from DART to DC42 (disk copy 4.2). So it was a simple matter of converting the disks

lisafsh-tool.exe “Xenix OS Boot Floppy”
quit

… etc etc… ad nasium…

Then firing up idle, setting the CPU to max speed, and booting up whenver I was going to answer a question I toggled it back to 5Mhz.. otherwise it would take FOREVER to boot… lol like the ‘good old days’.

Once the boot floppy had formatted the 5mb hard disk image, and transfered on reboot I had to tell the bootloader to boot from the profile disk..

pf(0,0)xenix

And away it went. After installing the OS & the C compiler I’m left with 23 blocks free!.. which I guess for a 5mb disk, is pretty cool.. Anyways there are assorted Xenix PDF’s which can be found here:

http://www.tenox.tc/docs/

Namely these two for Apple Lisa Xenix..
http://www.tenox.tc/docs/apple_lisa_xenix_programmers_guide.pdf
http://www.tenox.tc/docs/apple_lisa_xenix_programmers_reference.pdf
It’s amazing that lisa emulators were sort of capable of running Lisa Office System, now they can run the old unix stuff… it’s still impressive.