On Wed, 23 Jan 2013 20:53:58 +0100, Johnny Billquist <
b...@softjar.se>
wrote:
I should have pointed out that the simple emulator I'm sketching at
the moment would not attempt to translate between RT-11 file
structures and RSX file and record structures. That's a different
task, and substantially more complex.
The only way that that RT-11 programs running in the emulator could
work with native RSX file and record structures would be if they were
identical in the first place, or if an external conversion process
took place.
Now, if ask: "if you can't deal with RSX data, then what's the point?"
The answer to that is: "That's one good reason I haven't actually
written such an emulator over the past 30 years." But there are
programs that don't need data, and sometimes the data is compatible,
and sometimes conversion isn't difficult.
But mostly the reason for me now sketching RTX.TSK is because
sometimes it would just be nice to be able to test something out under
RSX without having to think about rewriting it (which I never do).
That was the case with a little app called GRUB.SAV I wrote a few
weeks ago. I would have liked to have tested it under RSX, but the
thought of dealing with all the stuff I don't quite get in RSX makes
me feel like I've got my thumbs tied together.
In fact, I wrote exactly this kind of emulator for VAX/VMS, called
VRT, except that VRT ran a fully compatible RT-11/SJ system rather
than just an image level emulator (I don't have the space for that in
RSX). I found it really handy--I used to patch VMS directories with it
when they broke. On the other hand, I think we only ever sold two
copies of the thing.
>> I guess that RTEM.TSK uses this approach. RTEM.TSK would be a standard
>> RSX image linked to FCP. It could use PLAS calls to map the emulated
>> RT-11 image and monitor. It could translate RT-11 I/O by packaging up
>> the system call data in some high memory buffer and then remapping the
>> RSX code to handle the operation using FCP.
>
>What is FCP? It's not a component of RSX. Are you in fact meaning FCS?
>If so, this would exactly describe my second option.
>The first option implies linking FCS into all the RT-11 images running
>under RTEM.
So much for my huge knowledge of RSX--FCS.
I was looking for FCS source, and ended up looking at FCP source code,
which then rewired my tiny brain.
>> The second option, adding new calls, would defeat the original purpose
>> of emulation if apps had to use the new calls.
>
>The RSX file system is not available natively in either case, so I fail
>to see your point (ie. any generic RT-11 program running under RTEM
>cannot access the RSX file system).
I'm not sure what you mean. My sketched emulator wouldn't have
anything to do with RTEM at all.
RTX.TSK would be a new RSX program and be a fully self-contained RT-11
emulator. As is the case with RT-11, all the system code would be in
high memory. Low memory space would be used by the RT-11 app. There
would be no emulated RSX disk.
>You have a special program (FIP.SAV in this case), which can access the
>RSX file system. FIP.SAV can either do that by having a copy of FCS, and
>do the RSX QIOs. There are some additional headaches with this, since
>FCS expects, and uses some fixed areas in your memory for its
>structures, which might very well conflict with RT-11. The other option
>is to have FIP use system calls that goes down to RTEM, which then
>performs services for FIP, such as file access operations. In this case,
>the file operations, as well as translation of semantics, data
>structures, and everything else, is code in RTEM, which is already an
>RSX task, linked to FCS.
As you say, FIP is a a special case which is specifically written to
handle both file and record systems in some manner. There may well be
hidden little trap doors in the emulated workspace to call RTEM.TSK to
handle FCS. I've already noted device vector @#250 providing some kind
of entry point. Testing with something like a system call trace is
required to answer this kind of question, although an intelligent
PDP-11 instruction dump of FIP would also provide a number of clues.
(and DUMP.SAV is an example of a program which could be used
meaningfully in RTX.TSK).
>Of course, apart from the file operations provided by the QIO interface,
>all disk blocks read in must also be massaged, as the actual file
>content structure in RSX is very different from RT-11. RSX have these
>records, which can be of various lengths, span physical blocks, have
>format information embedded, and so on...
>You cannot feed that directory to an RT-11 program and expect anything
>meaningful to come out of it.
Once again, I'm not planning to record-level translation in this
emulator. RT-11 programs would use RT-11 data, or files which are
compatible by chance, or a conversion process would be necessary.
I'm never quite sure whether RSX supports stream files. If it did then
it might be possible to share text files in that manner.
>> There is a third option. A simple RT-11 emulator really only needs to
>> open a very small number of record formats. RT-11 programs don't use
>> any of the RSX record formats except block I/O for disk-like devices
>> and character I/O to terminals. FCP is not required to manage this
>> simple kind of I/O. It can all be done with QIO.
>
>That kind of approach would not even let you read a normal text file
>from RSX into RT-11.
See the point above.
>> Directory searchs require that host directories need to be translated
>> into RT-11 directory structures. I do that with Windows directories,
>> and it's pretty straight-forward. It would take longer with RSX
>> because you'd have to read the index files to get the creation date
>> info etc.
>
>You don't do that by reading the directory file or INDEXF.SYS. That is
>done by QIO functions to the F11ACP.
Sorry, poor RSX terminology again, I meant the file headers, and I
confess I haven't looked at how you do that under RSX because I used
RMS to do it under VAX/VMS. It wouldn't be a high priority for a first
version of RTX.TSK.
>> It's not hard to work out what FCP does if you use a system trace.
>> Here's an excerpt from RSX PIP.TSK running under the RUST/XM RSX
>> emulator running under V11 on Windows (in this case RSX system calls
>> are translated into RT-11/RUST calls).
>>
>> !
>> ! PIP finds
RUST.COM
>> !
>> 26456 alun lun=3 dev=SY:
>> 26620 glun lun=3 buf=15370
>> 20426 qiow (fna) fun=11 mod=0 lun=3 efn=40 pri=0 isb=15420 ast=0
>> p1=0 p2=0 p3=0 p4=0 p5=0 p6=1654
>> fid=. nam=001004.dir;1 sta=0 nxt=0
>> did=dd.ft dev=SY:
>
>This is locating the UFD in the MFD. Your presentation of the DID is
>weird. The DID is a a file id. Essentially three 16-bit numbers, which
>tells in which file to search for the other file, given by the NAM field.
>
>And the MFD is, by the way, always FID (4,4,0). (And FID and DID is the
>same type of information, just two different fields.)
This code is running under an RSX emulator running under RUST/XM, so I
translate some info to be more meaningful in that environment.
I do have a system trace for raw RSX in V11, but it provides much less
info.
>P6 points to a FNAM structure, which I'm sure you know...
>
>> 26456 alun lun=3 dev=SY:
>> 26620 glun lun=3 buf=15370
>> 20426 qiow (fna) fun=11 mod=0 lun=3 efn=40 pri=0 isb=15420 ast=0
>> p1=0 p2=0 p3=0 p4=0 p5=0 p6=1654
>> fid=. nam=
rust.com;0 sta=100006 nxt=0
>> did=001004.dir dev=SY:
>
>Did you do a translation of the DID into a file name here? Because the
>DID here should just be the resulting FID from the previous IO.FNA you
>have above.
>
>Same story as above otherwise. And this could in theory be repeated
>additional times, if you had a hierarchical directory structure.
Yes, the trace it's reporting a world that exists somewhere between
the RSX app and the RUST operating system. There is no RSX file
structure available in RUST. RSX programs run out of RT-11 directories
and use files in RSX directories. I fudge the record-level
descriptors, based on file types. But that's a whole different story.
>> 30556k .purge chan=1
>> 30620k .lookup chan=1 dblk=54052=sy:
rust.com (eve) seq=0
>> 22776k .readw chan=1 buf=70106 wcnt=1000 crtn=0 blk=12
>> 22776k .readw chan=1 buf=66054 wcnt=1000 crtn=0 blk=14
>> 22776k .readw chan=1 buf=64022 wcnt=1000 crtn=0 blk=16
>
>This looks very RT-11is to me. :-)
Yes, this is the emulator issuing the appropriate RT-11 emts to
implement the RSX "fna" QIO function. The "k" at the end of the
address in the left column means it's operating in kernel space
(which is where the RSX emulator lives).
There were man more RT-11 calls originally which I edited out. I
missed this bit. All the gory details are in the listing file PIP.TXT
at
http://code.google.com/p/rust/downloads/list
>> 34740 qio (rat) fun=26 mod=0 lun=3 efn=2 pri=0 isb=1724 ast=0
>> p1=1654 p2=3600 p3=0 p4=0 p5=0 p6=0
>> fid=
rust.com
>
>This is reading some metadata from the file. However, based on the event
>flag, this is not done by FCS, but the application program itself.
>Could be anything from record type, record attributes, record length,
>file dates, file size, owner, or something else...
The execution address, 34740, seems to be higher than most of the FCS
code in PIP.TXT. Another way to check would be to perform the same
kind of operation with a different RSX utility and see whether the
same call was issued.
>> 34754 wtse efn=2
>
>And obviously just waiting for it to complete. Silly code. Why not a
>QIOW in this case?
That's what happens when people write library code and then spend a
decade altering it. It becomes a mess of conditionals and noisey,
incomprehensible jibber jabber...
>> !
>> ! PIP opens
RUST.COM using ACR
>> !
>> 26456 alun lun=3 dev=SY:
>> 26620 glun lun=3 buf=15370
>> 20426 qiow (acr) fun=15 mod=0 lun=3 efn=40 pri=0 isb=15420 ast=0
>> p1=1654 p2=334 p3=0 p4=0 p5=100400 p6=0
>> fid=
rust.com
>
>Access the file for read.
>
>> 20426 qiow (rvb) fun=21 mod=0 lun=3 efn=40 pri=0 isb=36620 ast=0
>> p1=36640 p2=1000 p3=0 p4=0 p5=1 p6=0
>
>And read the first block. (P1 -> Address to place data, P2 = Size, P5,P6
>is block number)
>
>For something like a text file, FCS will, after this, start handing out
>data to the program from the FCS-internal disk buffer, one record at a
>time. And when the first block is exhausted, FCS will read in the next
>one, and continue.
As above, record-level translation is a separate issue.
All RT-11 programs do their own record operations. RT-11 does not
provide any system-level file-to-record functionality. RT-11 I/O is
restricted to the equivalent of RSX virtual/logical block I/O. That's
it.
Now, it wouldn't be too hard to feed the input from a variable length
RSX text file to an RT-11 program as a stream file, just so long as
the access is strictly sequential--and that's usually the case.
Likewise for output.
But, it starts taking a lot of space when you have to deal with
multiple files, and it gets really icky if a program detaches a file
and later reattaches and keeps going from where it left off.
Then you have things like MACRO libraries which have mixed record
types.
All that said, in the example above PIP.TSK happily sends the RT-11
file
RUST.COM to the terminal in a coherent way. But that's the
exception.
Ian