very nice! thans!! better than reading all the manuals and trying to
figure out the code!!
Stay well Paul!!
bob smith

On Fri, Mar 5, 2021 at 1:38 PM Paul Koning via cctalk
<cctalk@classiccmp.org> wrote:
>
> I was just asked some questions about how RSTS identifies your processor 
> type.  Since that topic might be of broader interest I figured I'd do some 
> code reading and summarize the logic.
>
> In the RSTS initialization code (INIT.SYS), the first step is to identify 
> what your hardware looks like.  That is a combination of CPU type, bus type, 
> memory layout, and peripheral configuration lookup.  They aren't strictly 
> separated into sequential blocks for those four activities, though naturally 
> you'd want to know the bus type before you start looking for I/O devices on 
> that bus.
>
> What I describe here is in RSTS/E V10.1.  The general idea of scanning the 
> hardware was introduced in V6B, and I believe is basically the same from that 
> time onward apart from the addition of support for more hardware types.  
> Prior to V6B, the assumption was that you had the hardware you specified 
> during SYSGEN, neither more nor less.
>
> Here is an outline (not all the details) of the hardware scan flow:
>
> 1. If word 0 of the boot block contains a zero, this is a Pro (CT bus); 
> otherwise it isn't.
> 2. Make sure the MMU exist; if not, halt.
> 3. Check the CPU type (MFPT instruction).  If it's an F-11, see if 177570 
> exist.  If yes, 11/24 (Unibus); if no, 11/23 (Qbus).  If it's a J-11, read 
> the board type register at 177750 and use the bus type bit to distinguish 
> Qbus from Unibus.
> 4. Check that there is a clock, and if possible determine the power line 
> frequency.
> 5. Check if there is a CPU cache, and whether there is a cache error address 
> register.
> 6. If Qbus, check whether there is memory above the 18 bit range.
> 7. Check that there is at least 96kW of memory (but the message says that 
> 124kW is required -- the actual check value was apparently overlooked and not 
> updated).
> 8. Check CPU features: EIS (required), FPP, FIS, switch register, display 
> register, MED, two register sets, system ID register, CIS, Data space.
> 9. If Unibus, check for UMR.
> 10. Find where memory is.  This is done by looking at every 1kW address to 
> see if it answers.  So unlike some other operating systems, RSTS will keep 
> looking if it finds a hole in memory.  The kernel needs to be at 0 and 
> contiguous, but holes above that are not a problem.
> 11. Scan the I/O bus for peripherals. This uses the fixed addresses and float 
> rules for Unibus/Qbus (either, the code doesn't care) or the slot use bits 
> and device type register codes for the Pro.
> 12. Find the vectors, which for almost every device is done by making it 
> interrupt.
> 13. Identify specific device models if we care, like RL01 vs. RL02, Massbus 
> disk type, DMC/DMR/DMP, etc.
> 14. Find which of these devices we were booted from.
>
> That's about it.  Once you get past that point the INIT prompt appears and 
> you can ask what INIT found with "HARDWARE LIST".
>
> Incidentally, RSTS doesn't try to identify the exact CPU type you have.  
> Instead, it cares about features or distinctions that affect the code.  In a 
> number of cases it does report the type -- if MFPT works then "hardware list" 
> will report that information.  But for older CPUs, it doesn't say explicitly, 
> though you can deduce it to some extent.  If no type is given but there is 
> cache and more than 128 kW of memory, it's an 11/70.  If MED is available, 
> it's an 11/60.  If it has FIS, it can only be an 11/40.  Etc...
>
>         paul
>
>

Reply via email to