This is a new implementation to emulate the KL-10 PDP-10 CPU. It emulates:
-
KL-10 CPU with full extended address functionality and without cache.
-
Paging support matches what the hardware and microcode do in a real KL-10 for TOPS-20 paging (only).
-
Supports the maximum physical memory of 4MW, pretending to have an MG20 that implements this just enough so the SBDIAG functions that are required work properly.
-
Supports RH20 for Massbus peripherals.
- RP07 or something.
- TU78 or something.
-
Supports one DTE20 attaching an emulated console and "front end" bootloader.
-
Doesn't support:
- DIA20.
- Any Unibus peripherals other than those (e.g., console) whose function is provided through RSX-20m to the KL-10 via DTE20 interactions.
- Multiprocessing with additional KL-10 processors. This might change in the future.
- TOPS-10 paging.
- PUBLIC mode. This is pretty useless anyway.
- Address break functionality.
First, clone the project using
git clone --recurse-submodules https://github.com/alanmimms/km10.git
Install cmake
at least version 3.14.
Create a build
directory and change directory to it and run cmake
.
cd km10 ; mkdir -p build ; cd build ; cmake -DCMAKE_BUILD_TYPE=Debug ..
Now you can build the project.
make
When this completes, run ./km10 --help
to see built in help for the
command line.
-
noIncPC
is set when PC should not increment before next fetch. -
NEXT
: When we get here we have the instruction in IR. -
Check for pending interrupt, HALTed, meter interrupt, trap. If any of these:
- Set
noIncPC
flag. - If meter interrupt:
- TBD: Handle meter interrupt.
- Goto NEXT
- If interrupt:
- IR = 40 + n*2.
- Goto NEXT
- If HALTed:
- Goto NEXT
- If trap:
- IR = 420+trap.
- Goto NEXT
- Set
-
COMPUTE_EA
: This is used when PC is in section zero. Initially IW = IR.- Extract I, X, Y from IW.
- If X != 0, E = RH(AC[X] + Y) else E = Y.
- If I != 0, IW = fetch(E); goto
COMPUTE_EA
; else done
EXTENDED_COMPUTE_EA
:
This is used when PC is in a nonzero section.
Initially EAIR = IR.
FETCH:
- IR = *PC.
- If !noIncPC ++PC;