TC08 DECtape bootloader question

Rick Murphy rick at rickmurphy.net
Sun Mar 21 07:24:53 CDT 2021


On 3/20/2021 8:51 PM, Kyle Owen via cctalk wrote:
> On Sat, Mar 20, 2021 at 7:19 PM Kyle Owen <kylevowen at 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



More information about the cctalk mailing list