On 3/20/2021 8:51 PM, Kyle Owen via cctalk wrote:
On Sat, Mar 20, 2021 at 7:19 PM Kyle Owen <kylevo...@gmail.com> wrote:

However, it appears as though word count will be hit by the loading of the
first block. In fact, my instrumented version of SimH says it's overwritten
with a zero. If that's the case, it would seem as though the word count
overflow flag will never get set. Not to mention, the current address will
be updated next, causing data to be redirected to yet another position.

To continue this thought, it appears as though SimH does the following for
a read data break:
0. Increment WC
1. Increment CA
2. Compute memory address from the extended memory bits from the TC08 and CA
3. Store the data from the tape at the memory address specified from 2.
4. Check if WC equals zero, and handle that accordingly

>From what I can tell, both the PDP-8/E and the PDP-8/I set the WC overflow
based on the carry out from the adders...so if WC happens to be overwritten
with a zero, a carry out will never happen in the real hardware. In SimH,
the entire WC is tested and compared to zero. This behavior seems different.

You have to read the bootstrap code in the TC0x driver to understand this.

What happens is that the code watches the buffer pointer (7755) and when it hits 7642, the remaining read is directed to field 1. The boot is looping on 7616/DTSF and 7617/JMP .-1 when it's overwritten by the boot (the NOP below overwrites the DTSF).

The other weirdness is that a Read Data operation sets the done flag at the end of the block, so reading a single block means that the WC is unimportant. (Continuous mode reads multiple blocks as controlled by the WC).

Lowercase comments below are mine.
    -Rick

BOOT1,  TAD 7755        /this gets the buffer pointer
        TAD BM7642      /and checks if it's at 7642
        SNA CLA         /WATCH THE PROGRESS OF THE READ
        JMP BOOT2       /WHEN IT GETS PAST 7643, SWITCH TO FIELD 1
        NOP             /LOADS OVER DTSF IN 7616
        JMP BOOT1       /LOADS OVER JMP .-1 IN 7617 - STARTS BOOTSTRAP
BOOT2,  TAD B10
        DTLB            /ZAP A 10 INTO STATUS REG B TO LOAD INTO FIELD 1
        DTSF            /FROM HERE ON - LOAD THE FIELD 1 RESIDENT INTO FIELD 1
        JMP .-1
BOOT3,  DTXA            /CONTINUE READING NEXT RECORD(ALSO SEE CODE AT 7600)
        DTLB            /INTO FIELD 0
        TAD B7577
        DCA 7755        /PAGE 7600
        DCA 7754        /here's where your zero gets set for the WC.
BOOTX,  CDF CIF 10
        JMP 7642        /JUMP INTO WAIT LOOP IN FIELD 1
        JMP BOOT1       /DISK MONITOR FUDGE - JUMP INTO WAITING LOOP
B7577,  7577
B10,    10
B600,   600
B620,   620
        ZBLOCK  7642-.  /this gets loaded into field 1.
        DCA 7744
        DTSF            /THIS IS LOADED INTO FIELD 1 WITH MONITOR RESIDENT
        JMP .-1         /IT IS IN THE CD OUTPUT AREA AND SO WILL BE ZAPPED
        CDF CIF 0       /BY THE KEYBOARD MONITOR
ENDB,   JMP 7605        /OK, FIELD 0 RESIDENT READ IN, START UP MONITOR

Reply via email to