TC08 DECtape bootloader question
Bob Smith
bobsmithofd at gmail.com
Sun Mar 21 08:45:40 CDT 2021
thanks, came through to ENDB here! great explanation!
bb
On Sun, Mar 21, 2021 at 9:35 AM Rick Murphy via cctalk
<cctalk at classiccmp.org> wrote:
>
> 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.
> >
> > Kyle
>
> Trying again - my reply got chopped off for some reason.
>
> 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