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