Technical data
SDA Description
.
.
.
8005D1C8 UCB$L_SVAPTE 80062720
8005D1CC UCB$W_BOFF 0795
8005D1CE UCB$W_BCNT 006D
8005D1D0 UCB$B_ERTCNT 00
8005D1D1 UCB$B_ERTMAX 00
8005D1D2 UCB$W_ERRCNT 0000
.
.
.
SDA>
If you have only one printer in your system configuration, you do not need to use
the FORMAT command. Instead, you can use the command SHOW DEVICE LP.
Because only one printer is connected to the processor, only one UCB is associated
with a printer for SDA to display.
The output produced by the FORMAT @R5 command shows that UCB$W_BOFF
contains a value greater than that in UCB$W_BCNT; it should be smaller.
Therefore, the value stored in BOFF is incorrect.
Thus, the value of BOFF is not the number of characters that remain in the
buffer. This value is used in calculating an address that is referenced at an
elevated IPL. When this address is within a null page (unreadable in all access
modes), an attempt to reference it causes the system to fail.
9.4.3 Identifying and Correcting the Defective Code
Examine the printer driver code to locate all instructions that modify UCB$W_
BOFF. The value changes in two circumstances:
• Immediately after the driver detects that the printer is not ready and that
the problem is not a paper problem (line 609).
• When the wait-for-interrupt routine’s timeout count of 12 seconds is
exhausted (lines 616 and 630). At this time, the contents of R1, plus 1,
are stored in UCB$W_BOFF (line 631).
When the printer times out, the driver should not modify UCB$W_BOFF. It does
so, however, in line 631. The driver should modify the contents of UCB$W_BOFF
only when it is certain that the printer printed the character. When the printer
times out, this is not the case. Furthermore, the wait-for-interrupt routine
preserves only registers R3, R4, and R5, so that only those registers can be used
unmodified after the execution of the wait-for-interrupt routine. Thus, the use of
R1 in line 631 is an error.
To correct the problem, change the WFIKPCH argument (line 616) so that, when
the printer times out, the WFIKPCH macro transfers control to 50$ rather than
to 40$.
SDA–30