Monday, March 25, 2024

How the Entrex 480 / Nixdorf 620 Boots

March 24, 2024 From Bruce Ray with Wild Hare Computer Systems / NovasAreForever.org:

The standard DG/DCC Data Channel device [DCH] tape/disk bootstrap program consists of only 3 instructions:

375/ 062677   IORST

376/ 0601<xx> NIOS <device code>

377/ 000377   JMP 

This is the program initiated by the PL switch on the 'standard' machines

DCH device controllers are designed to boot from record/sector zero of a tape/disk drive into location 0 onward, and therefore overwrites the JMP . instruction at location 377.  Any standard bootable DG/DCC tape/disk [and I would assume Entrex] successfully uses this model.  If a faithful image of a tape/disk is created and appropriately configured in an emulator, the system should be 'bootable'.  A correct SimH-compatible tape restoration works on all of the very-diverse systems I work with, and likewise for disk images and appropriate disk emulation configuration.

Therefore, if a known "bootable" tape is accurately recovered to SimH-compatible format, the resulting contents should behave exactly like the original hardware if the various parameters are met.    This is the basic approach successfully used over the decades for handling even the 'weirdest' client situation.

Once the controller is started [i.e. NIOS <device>] the controller will transfer words from the device to main memory automatically.  Even if an extreme custom hardware modification were made to the front console's program load logic, the examination of the tape/disk record/sector zero might reveal more information, faster, than trying to grok custom hardware modifications.  Knowing the exact [human] operator procedure to bootstrap the system would reinforce

the decision to attack the problem either bottom-down or bottom-up.  Top-down In this case would be to start with a known good accurate copy of the tape/disk media in question, bottom-up would be dissecting schematics to discern the forest from the trees... 

---------------------------------------------------------------------------------------

We provided Bruce with these two recovered SimH-format 9-track tape files:

Entrex_Nixdorf_620_Save_PRIX_22-01-87.tap

Entrex_Nixdorf_620_Master_Didos_1_genere_08-10-83.tap

to which Bruce replied with these glorious preliminary results:
;---------------------------------
; comments
; we know that tape records are 4KW or less in size, so
; load first tape record into main memory so we can 'investigate';
; instructions are IORST, NIOS MTA and JMP . in high memory
; where they will not be overwritten by data read in...
;---------------------------------

Wild Hare Computer Systems Nova and Eclipse [beta 00.00.05] simulator V4.0-0 Current        git commit id: a06fa926
sim> d 40000 62677
sim> d 40001 60122
sim> d 40002   400
sim> e -m 40000/5
40000:  IORST
40001:  NIOS 0,MTA
40002:  JMP 40002
40003:  JMP 0
40004:  JMP 0
sim> set cpu hist=100
sim> attach mta entrex.tap
sim> d mta rtime 1
sim> d mta ctime 1
sim> run 40000

;---------------------------------
; <control/E> after a few seconds to regain SCP control...
;---------------------------------

     040001 / 060122  NIOS  = 000000, <022>    [    0 | 000000]
Simulation stopped, PC: 040002 (JMP 40002)
sim> e 177
177:    000762

;---------------------------------
; you indicated location 177 was "starting address" of bootstrap
; process, so examine that address - which looks like a plausible
; 'JMP' instruction, so examine the target address of the JMP...
;---------------------------------

sim> e -m 177
177:    JMP 161
sim> e -m 161/10
161:    SKPBZ MTA
162:    JMP 161
163:    IORST
164:    SUB 3,3
165:    LDA 0,0,3
166:    STA 0,0,3
167:    INC 3,3,SZR
170:    JMP 165

;---------------------------------
; so the target instructions also seem plausible boot activity - waiting
; for the mag tape to finish operation and then starting a block memory 
; move loop, so set the PC to 0177 and continue execution...
;---------------------------------

sim> d PC 177
sim> cont

 Simulation stopped, PC: 004150 (JMP 4147)
sim>
sim> show hist

;---------------------------------
; stop program execution and see what is happening...
;---------------------------------


 07000000  00000000  ffffffff   0   0  0     004147 / 063660    000020  000000  013200  000002  0    SKPDN 60
 07000000  00000000  ffffffff   0   0  0     004150 / 000777    000020  000000  013200  000002  0    JMP 4147
 07000000  00000000  ffffffff   0   0  0     004147 / 063660    000020  000000  013200  000002  0    SKPDN 60
 07000000  00000000  ffffffff   0   0  0     004150 / 000777    000020  000000  013200  000002  0    JMP 4147
 07000000  00000000  ffffffff   0   0  0     004147 / 063660    000020  000000  013200  000002  0    SKPDN 60
 07000000  00000000  ffffffff   0   0  0     004150 / 000777    000020  000000  013200  000002  0    JMP 4147
 07000000  00000000  ffffffff   0   0  0     004147 / 063660    000020  000000  013200  000002  0    SKPDN 60
 07000000  00000000  ffffffff   0   0  0     004150 / 000777    000020  000000  013200  000002  0    JMP 4147
 07000000  00000000  ffffffff   0   0  0     004147 / 063660    000020  000000  013200  000002  0    SKPDN 60
 07000000  00000000  ffffffff   0   0  0     004150 / 000777    000020  000000  013200  000002  0    JMP 4147
 07000000  00000000  ffffffff   0   0  0     004147 / 063660    000020  000000  013200  000002  0    SKPDN 60
 07000000  00000000  ffffffff   0   0  0     004150 / 000777    000020  000000  013200  000002  0    JMP 4147
 07000000  00000000  ffffffff   0   0  0     004147 / 063660    000020  000000  013200  000002  0    SKPDN 60

;---------------------------------
; the boot code loaded additional program in and is interrogating device code <060>;
; waiting for some condition on this device.  A peek at code after the device <060>
; test instructions show additional test made on the device.
; I do not know what this device is, or if there are any other device(s) which this
; boot code assumes exists - more information about the hardware devices on this
; system would be a "very good thing".
;---------------------------------

sim> e -m 4147/20
4147:   SKPDN 60
4150:   JMP 4147
4151:   NIOP 0,60
4152:   SKPBZ 60
4153:   JMP 4151
4154:   DOA 1,60
4155:   SKPBZ 61
4156:   JMP 4155
4157:   DOA 0,61
4160:   DOCS 3,61
4161:   INC 1,1
4162:   DSZ 61,2
4163:   JMP 4147
4164:   LDA 3,67
4165:   AND# 3,1,SNR
4166:   JMP 4143
sim> e ac0
AC0:    000020
sim> e ac1
AC1:    000000
sim> e ac2
AC2:    013200
sim> e ac3
AC3:    000002
sim>

;---------------------------------
; at this point the tape boots in a somewhat-reasonable fashion and is
; expecting other devices to exist and be in some assumed condition.
; To minimize future time...
;
; What devices exist in the system?
;
; What are their functions?
;---------------------------------

So, WHAT exactly is Device Code <060>?

Well, learned that the Device Code for the Nova is determined by the binary value of the

Now that we know what a Device Code is, which one is Device Code <060>?

It's the Scanner Board!
Apparently this device responds to three separate addresses:

<060>
<061>
<064>
---------------------------------------------------------
March 26, 2024 Bruce Ray:

A quick perusal of the schematics and boot program shows that device code 

<035> is used (perhaps the disc controller), 
<064> is for the MUX on-board timer, 
<061> is the MUX channel select and 
<060> is the scanner select device codes.  

The MUX appears to be a DCH device which asynchronously polls terminals and  deposits input results into specified main memory locations.  This was a technique used by various 3rd-party vendors for handling large number of terminal I/O with minimum CPU overhead (Point 4 had its Mighty-Mux, Keronix had its MegaMux, DG eventually had it's DCU/50 and DCU/200, etc.)

---------------------------------------------------------

To be continued....

No comments:

Post a Comment