Compiling KLH10

From Computer History Wiki
Revision as of 07:29, 26 February 2012 by Lexthehex (talk | contribs) (Compiling KLH10 on Gentoo x86_64)
Jump to: navigation, search

Introduction

This is a brief guide to compiling Ken Harrenstein's KLH10 PDP-10 emulator. It was written on an AMD64 Gentoo machine with 2GB RAM and gcc 4.5.3-r1. The author currently has a bad cold, so please excuse any mistakes/foolishness caused by light-headedness.

Useful links: Viktor Björn's tutorial 'Some notes on setting up an ITS system'

This tutorial assumes that you are running a Linux system with a modern version of gcc. Some of these instructions will not apply to your system, or may differ. I am using a current Gentoo system, as of February 2012. The system has been configured as a 'multilib' configuration, with a mixture of 32- and 64-bit. By default, gcc compiles for 64-bit. (verify this)

Step 1: obtaining the KLH-10 source. There are two places that you can get the source, but I recommend using the Panda source, which you can download at [1]. As mentioned in Mr. Viktor's tutorial, if you are using gcc 4.x or later (I am!) you need to apply this patch. I needed to apply some additional patches of my own - see later.

Step 2: unpack the source - easy: 'tar -xzf panda-dist.tar.gz'

Step 3: compile the source. Here's where I got lost. The instructions (panda-dist/klh10-2.0h/doc/install.txt) tell you to:

  1. Unpack the main distribution, and the auxiliary distribution (I didn't, as I don't need it yet).
  2. Configure for the native platform. Again, I didn't do anything here. Perhaps I should have.
  3. 'Build a KN10 from sources'. Here, I was stumped. Which sources? Where? How?

The example shows:

       $ cd <distrib>/bld/<platform>
       $ make base-kl          ;;; or base-ks or base-ks-its

On my system, '<distrib>' is 'klh10-2.0h' and '<platform>' is 'lnx86' (Linux, x86) - so, I did:

       $ cd klh10-2.0h/bld/lnx86

.. but was dismayed to find a solitary file in this directory:

       -rwxr-xr-x 1 lex root 70 Feb 21  2005 00build

This contains a 'make' command:

       #!/bin/sh
       make base-kl CONFFLAGS_AUX=-DKLH10_I_CIRC=1 LDFLAGS=-static

Predictably, executing it causes make to output an error, because there is no Makefile.

       make: *** No rule to make target `base-kl'.  Stop.

Eventually, I decided to copy the command from the '00build' file, but source the Makefile.mk in the 'src' directory, two levels up (../../src/). This gave me this command:

       make -f ../../src/Makefile.mk base-kl CONFFLAGS_AUX=-DKLH10_I_CIRC=1 LDFLAGS=-static

I was happy that at this point, gcc compiled some code before aborting with a syntax error in ../../cenv.h. This was easily-fixed: edit cenv.h and find line 270.

       #   define _FILE_OFFSET_BITS=64 /* Use 64-bit file ops */

Change that to:

       #   define _FILE_OFFSET_BITS 64 /* Use 64-bit file ops */

I.e. change the '=' to a space.

Repeating the 'make base-kl ...' command should cause compilation to progress a bit further, before it aborts with an undefined reference to 'lites_init'. That function is in src/dvlites.c, and is an addition that the Panda team added: it sends the processor status over the parallel port, where it is displayed by a custom bit of hardware (a microcontroller, as designed by Spare Time Gizmos. I have almost all of the parts for this device, but alas! My computer doesn't have a parallel port, and no serial port either. I'll have to think of another way to display the CPU status, and I have thought of a few:

  1. Display the CPU status as a window on the screen.
  2. Send it to a file, or a pipe (to be interpreted by another application).
  3. Send it over the network, to be displayed by other hardware.
  4. Display it on standard PC hardware - e.g. the keyboard LEDs. Problem: there aren't many LEDs, and XKB might not take too kindly to my app stealing its control.

I've decided on '2' at present, but might do the window thing first, as I am trying to learn to program with SDL.

Lexthehex 21:29, 25 February 2012 (PST)