Make the boot ROMs a bit easier to maintain.
Add assertion that the two variants of each are the same size.
Add offsets to the comments so it's easier to see where jumps are going.
The boot rom for tape didn't handle a tapes coming on-line, didn't take
the RH/TM/addresses from the FE. The launcher also didn't handle
autoboot.
Now it does, with the restriction that ITS will only talk to UBA1.
The boot rom for tape didn't handle a tapes coming on-line, didn't take
the RH/TM/addresses from the FE. The launcher also didn't handle
autoboot.
Now it does, with the restriction that ITS will only talk to UBA1.
The KS10's 8080 interfaces to the OS thru a small communications region.
The documentation is rather lacking, and the 8080 microcode is difficult
to follow. Many years ago (while still at DEC), I worked it out, and
put definitions into TOPS-10. They're now here, too.
Also, properly initialize the KLINIK communication words and the
keep-alive word.
The KS front end microcode actually reads the wrong alternate HOM block.
Teach the bootstrap to try the wrong one (in case someone counts on
this), but also the correct block.
Implement boot -A to emulate an autoboot - the boot that happens on
power-on or when the boot switch is pressed. No questions, just boots.
The pdp10_rp emulator had several problems:
1) disks are not recognized properly when they come on-line. Same issue
as tapes, but not the same code paths.
2) The bootstrap code did not wait for disks to become ready.
3) The bootstrap code did not take the RH CSR address from the front end
(device). Hence, would not boot if the device address was changed.
4) The bootstrap looked for the second HOM block at block 10 of the
disk. Unfortunately, it read block 8. 10 is decimal; you need all 10
(decimal) fingers.
Fixes:
1) Implement spin-up delay. A device that is attached/re-attached comes
on-line a second later. Replace tests for 'attached' with tests for
up-to-speed.
2) Wait for the drive to become ready after issuing a controller clear.
When it's ready, write the attention summary register to prevent the
un-tended on-line interrupt for looking like an error.
3) Read the RHBASE from main memory instead of storing it there. Teach
the bootstrap command to put it in memory from the dib, as it did with
the unit.
4) Read the correct block.
FILSER now gets on-line and off-line interrupts.
Tape on-line interrupts weren't happening when a tape was attached or
replace on the TH11/TM0x emulation.
The OS never saw a MOL transition in the case of replacement, where the
detach is implicit.
This patch defers reporting MOL for 100 msec; faster than a human can
change tapes, but long enough for an OS to see the 1->0->1 transition of
MOL.
Further, checks for UNIT_ATT should be for MOL.
This makes GALAXY automatic tape recognition work.
Thanks to Ian Hammond, Lou Ernst, Malcolm Macloud, and Jack Rubin,
In addition, I've added the CAPS11 bootstrap into the emulator module, so no more toggle-in required.
Lou Ernst reported that RT11 V5 does not work with the TA11, even on real hardware. The simulated TA11 does work under RT11 V4; it's included in the stock FB monitor.
One anomaly with RT11 V4 - after writing files to CT0: and then doing a DIRECTORY, all the files lengths are 0. The files are there. I can type them and DIFF them against their source.
It does not fix the problem that MMR1 is not used for floating point instructions.
I don't know if I will fix the FP MMR1 problem. It does not seem to impact running software. It is consistent with the architecture spec - just not with the actual J11 implementation. The J11 microcode has a variety of exception exits for FP conditions, and I have to trace which ones invoke fix-up, and which do not.
With multiple instances, error logging gets confusing when every CPU has
the same serial number.
This makes the CPU serial number settable. If not set, the old defaults
apply.