Hi John,
I am confused by some of your response to (b) and (c). Are you
suggesting that
because there are problems which occur in RT-11, but not in RSTS/E, the
problems
which occur in RT-11 should not be fixed?
My goal is to provide a common utility which functions correctly under
all OSs,
not just RSTS/E or RT-11. TSX-PLUS has different issues as well. I can
add code which solves the problems for RT-11, but since RSTS/E will likely
be impacted, a few additional lines can prevent any impact on RSTS/E. As
most programmers realize, when any changes are being made to a program,
the additional effort of fixing other problems is much less than if done
in a
separate operation.
John A. Dundas III wrote:
> At 1:41 PM -0500 3/18/10, Jerome H. Fine wrote:
>
>>
John A. Dundas III wrote:
>>
>>> Not sure why you need to change what MACRO/CREF are already doing;
>>> they work as is under RSTS. If you're fixing a Y2k bug the file
>>> chaining code, and for that matter the rest as well, works just as
>>> well under RSTS as it does under RT. I would think the best
>>> approach is not to change anything, unless it specifically addresses
>>> a bug.
>>
>>
>>> From my testing of MACRO / CREF under RT-11, there are 3 separate
>>> problems, in addition to
>>
>> the lack of the 4 digit year when DEC added support for the years
>> after 1999:
>>
>> (a) The DEC version of the MACRO / CREF pair can ONLY be located on
>> the SY: device
>> since the .Chain EMT request is hard coded to transfer control
>> back and forth to each
>> other using only files on the device SY:. No other utility
>> program has that restriction.
>> Note that this problem exists on all three operating systems:
>> RSTS/E, TSX-PLUS and
>> RT-11.
>
>
> Well, under RSTS it's a little different. Under the hood, things are
> set up so that CREF is chained to (and, e.g., MACRO returned to,
> though CREF is not limited to talking to MACRO) when they exist in the
> system ($) account. The $ account can span multiple physical disks.
> Programs don't need to [explicitly] know about it, the OS finds it for
> them. However $ maps to a single [PPN].
>
> So I don't see this as a limitation. If MACRO and CREF are installed
> normally, everything works as it's supposed to. The real "limitation"
> that I am aware of is that you can't have MACRO chain to a private
> version of CREF. Say you're working on a development version of
> CREF. You need to write your own harness to exercise it; you can't
> use the system version of MACRO, FOR, etc., to do that.
>
> >From the perspective of a (former) system manager, it's not a
> problem. Remember, this is a multi-user timesharing system. Quite a
> bit different from the RT audience.
It sounds like anyone who worked on any development versions of the
MACRO / CREF
utilities had to do so on their own system or at hours when no one else
was around to
be bothered. At DEC, that was probably not much of a problem. For
RT-11 systems
which support essentially only one user at a time, it is also not much
of a problem.
On the other hand, I have worked with applications running under RT-11
which supported
many tasks running at the same time all of which were both human and
other computers - a
total of 15 tasks of which 4 were for human interaction and 11 were
other computers.
Fortunately, all were via serial lines so that the processing demands
were never that
critical.
Since it is rather easy to see the solution after it has been found, I
agree that it might
not have been apparent to the RT-11 developers. Of course, MACRO and CREF
might not have been part of the RT-11 development team since I
understand it was
probably maintained under the RSTS/E group. In that case, maybe the
need to keep it
simple was the more important goal.
Also, the RT-11 group may not have been concerned about the two problems
with
MACRO running under RT-11, or at least not sufficiently to consider
doing anything
about the problems.
But then, I have all of the technical details worked out for a Logical
Name Handler,
LN(x).SYS, in RT-11 which will support a Logical Name Search List to allow
multiple directories to be searched in RT-11, such as in the Logical
Name List
feature in VMS and the PATH NAME in DOS, although the latter is limited
to executable files. Again, like with READ ONLY files under RT-11, why
does such a standard feature which is available under RSTS/E not have
the extra
code in DIR to show which files are READ ONLY?
Still, even if a few extra lines of code are required for the transfer
of control back and forth
via the .Chain command between MACRO and CREF as the contents of a
command file
are processed when one or both of MACRO or CREF are not on the SY:
device, I can't
see that as a huge problem based on the flexibility that provides.
By the way, I can't think of any other program that uses CREF except
MACRO? Do
you know of any? And with so little code (less than 5 blocks including
data areas), I
would have thought that it would have been better to use CREF as an
additional overlay
in MACRO rather than all the effort of using the .Chain EMT to go back
and forth.
Probably the bare code required for an overlay within MACRO would be
less than
4 blocks of code since there would not have been the need for any extra
stuff for the
.Chain EMTs or other code needed because of restarting the process.
Since there
are 3 overlay areas within MACRO, either of the other two could have
been used
without making MACRO itself any bigger.
(b) Under
RT-11, when running under a mapped operating system, if
VBGEXE is used under
There is no concept of VBGEXE under RSTS. MACRO can be used to
compile multiple files, in separate compiles (I think that's what
you're getting at), without reloading. Either way, again, this is not
a problem for a timesharing system. Multiple instances can be running
simultaneously, without problem.
I am very aware that VBGEXE is not a concept under RSTS. On the other
hand, once
MACRO does a .Chain request to CREF, on the return .Chain to MACRO to
continue
the next compile, MACRO must be reloaded. In fact, that is what the
.Chain EMT does,
i.e. load and initiate a program. However, since only the root of MACRO
is actually
loaded to begin the process, the overhead in rather low in my opinion,
so the net effect
of reloading or not reloading is nothing to disagree about as far as
consequences are
concerned. So my pointing out that reloading of MACRO does take place
due to
separate compiles is not to point out a problem, but rather to correct
the record
of how MACRO / CREF operate, namely, CREF does not terminate after it
completes the cross-reference tables, but always does a .Chain EMT request
back to the caller. On RT-11 under an unmapped monitor (which is how RSTS
runs for RT-11 programs), that is never a problem and it is a valid
method of
transferring control from CREF back to MACRO.
In fact, as far as my testing shows, even if the user command files has
a separate
RUN MACRO command for each new compile, MACRO gets reloaded again
just before it terminates with no additional work to do when it finds no
more
separate compiles to perform. So repeated RUN MACRO commands in
a command file result in MACRO being reloaded twice for every subsequent
compile. Again, the number of blocks of disk access involved are too low
to be of concern, so this is not a disagreement.
(c) Under
RT-11, when running MACRO.SAV as a system job, VBGEXE is
required to
load into extended memory (64K in size) and initiate MACRO.SAV;
however, if a
cross-reference table is requested, the .Chain EMT will cause
the job to abort with
the complete loss of the listing file.
A non-issue with RSTS.
I understand, RSTS does not have the concept of system jobs. But RT-11
does and
executing the .Chain request aborts the system job.
As it happens,
according to the PDF that you suggested that I look
at, the .SaveStatus
EMT request under RSTS/E returns the device name of the file in
question - as opposed
to the RT-11 values which are totally different. However, since
there is no specific mention
of the .CStatus EMT request in the PDF as to what happens if used
under RSTS/E (the
most probable result is that the .CStatus EMT request will be ignored
under RSTS/E), then
program control will be used to solve if RSTS/E is being used vs
RT-11 when MACRO.SAV
is found to be executing under an unmapped monitor. This is because
the third word of the
data block returned by RSTS/E for the .SaveStatus EMT request will be
6544 decimal
(RAD50 "RO" = 12620 octal = 4096+2048+384+16) which is very different
from the size
of MACRO.SAV (about 100 blocks) which is the value found in the third
word under
RT-11,. I found this information in the PDF on pages 6-10 and 7-57.
I'm not following where there is a problem, but OK.
I am saying that there is a solution!!!!!!!!! The .SaveStatus
information provided by RSTS
provides the device name which the .CStatus information provided by
RT-11 supplies.
The initial question was how to determine which EMT request to use. I
will attempt to
explain again why the .SaveStatus EMT request results are sufficiently
different between
RSTS and RT-11 if on reading my explanation again you still don't
understand.
What I still don't know is how RSTS handles the .CStatus RT-11 EMT request.
Would you be able to run a small test program under RSTS for me to determine
that question. Or is there a downloadable RSTS image available that can run
RSTS under SIMH available that I can use to test it myself?
There is also
a final question about the information in the PDF on
page 6-16 which states
that bit 5 of offset 300 will always be zero. Are there no RSTS/E
systems running where
the power is 50 Hz rather than 60 Hz? Unless this omission has been
corrected, but the
documentation has not been updated? Otherwise, the TIME printed on
the listing from
MACRO.SAV will be incorrect if run under a 50 Hz system. Likewise
for other programs
which check bit 5 in offset 300 (the .GVal EMT request) and attempt
to convert ticks to
the time.
Yes, RSTS runs on 50Hz systems, no problem, though I've never
personally done it. All I know is that RSTS attempts to present the
time value in a format RT expects (as it keeps time different
internally from RT). Maybe the ticks value IS wrong. Is it every
displayed? I just don't remember whether MACRO uses that in its
listings or not.
Based on your explanation and the documentation in the PDF on page 6-16, my
assumption is that RSTS converts all time quantities to ticks based on a
60 Hz
clock. So even if the actual hardware is running at 50 Hz, the
conversion into
ticks to satisfy the .GTim EMT request does so based on a 60 Hz clock.
Otherwise, the time of day at the top of each page in the listing would be
noticeably less than the correct time near the end of the day, i.e. too
few ticks
would be calculated.
A review of the source code for an older version of
the emulator
suggests that the 50/60Hz bit (5) is always set to 0. Oh well.
Reasonable as long as the conversion of the correct time to ticks for the
RT-11 program is done at 60 Hz.
There is one other discrepancy between the
documentation and the
source: evidently bit 15 (system clock presence) DOES get set, always,
contrary to what is written in the manual.
Under RT-11, that states that there IS a system clock while bit 5 being
zero states that the frequency is 60 Hz. So everything is CORRECT
after all!!!
Please let me know if you can run a small RT-11 program under RSTS to
print the contents of the information provided by the .CStatus EMT request?
More specifically, it would also show if there is an error returned or if
RSTS just ignores the request but leaves the data block unchanged.
What I would probably do is set the overlaid bit in the JSW in word 44
of block zero of the program, then execute the EMTs for channel 17:
.SaveStatus
.ReOpen
.CStatus
in that order in case RSTS aborts the program when the .CStatus
EMT request is executed. If RSTS just ignores the .CStatus EMT
request and returns success, but leaves the data block unchanged,
then it will be trivial to determine that RSTS is running rather than
RT-11.
Jerome Fine