• Please review our updated Terms and Rules here

OS8 - difference between system and non-system device handlers?

Crawford

Experienced Member
Joined
Oct 21, 2008
Messages
275
Location
Maryland
Folks,

I'm working with Kyle Owen to improve on his excellent SerialDisk server.

One thing has puzzled me - the reason for system vs. non-system device handlers in OS8. I know the technical differences, but would like to know why you'd use one over the other. If you had a system handler that worked for all your devices, would you also need the non-system one? The non-system one seems redundant.

Sorry if this is in the DEC literature. If it is, please point me to it and I will RTFM.

Cheers,
Crawford
 
Folks,

I'm working with Kyle Owen to improve on his excellent SerialDisk server.

One thing has puzzled me - the reason for system vs. non-system device handlers in OS8. I know the technical differences, but would like to know why you'd use one over the other. If you had a system handler that worked for all your devices, would you also need the non-system one? The non-system one seems redundant.

Sorry if this is in the DEC literature. If it is, please point me to it and I will RTFM.

Cheers,
Crawford

try alt.sys.pdp8
 
Jack,

I would love to goto (pun intended) VCF-MW but have to be in Canada for yet another wedding!
 
If you had a system handler that worked for all your devices, would you also need the non-system one? The non-system one seems redundant.

You can't BUILD a system which has 2 or more devices coresident with different system handlers. It makes no difference if you actually INSERT the system device for the second system handler, it's enough that you INSERT a coresident device (whether that device is identical to the system device or not) for BUILD to see a conflict. System handlers (not just THE system handler) have an allocation in the system area and are always loaded to 7600 (and possibly 17600) so you can't have 2 or more active.

<edit>So what I'm trying to say is that if suppose you had a system with a TC08/TU56 as the system device, you couldn't use a system handler for Kyle's SerialDisk, it would need to be a non system handler and so on.</edit>
 
Last edited:
Bobaboba,

Ok, thanks. I think I've got it now. You can only have one system device that you boot from. If you want to use something as a non-boot device you need a non-system handler. Grr - I just hate (mostly) duplicate code. Maybe conditional assembly would help...

Interestingly there is a hierarchy I've observed. Kyle's system handler only does one disk device, but rk05's are two sided. The system handler has SYS, SDA0, and SDB0. SYS=SDA0 in this case. The non-system handler does SDA0, SDB0, SDA1, SDB1 (2 disks x 2 sides). If you install both handlers, the system handler only 'handles' SYS, all others are 'handled' through the non-system handler. It's an interesting way of resolving name conflicts I guess.

I'd like to get the system handler to work with 2 disks at least (max is 8 devices IIRC). I will first have to convert it to a 2 page handler, as the code is already pretty tight.

-Crawford
 
Bobaboba,
I'd like to get the system handler to work with 2 disks at least (max is 8 devices IIRC). I will first have to convert it to a 2 page handler, as the code is already pretty tight.

I'd resist converting it to a two page handler. I don't think two page system handlers play all that nicely with Fortran, 8K systems, etc.

Most of the design decisions about system vs non-system are driven by the tight memory for the resident portion of the system, causing almost everything interesting to get pushed in the the non-system (and thus non-resident) category.

Vince
 
You can only have one system device that you boot from. If you want to use something as a non-boot device you need a non-system handler.

Almost - but you can also of course have a non-boot device which is coresident with the system device (ie included in the system handler).

The system handler has SYS, SDA0, and SDB0. SYS=SDA0 in this case. The non-system handler does SDA0, SDB0, SDA1, SDB1 (2 disks x 2 sides). If you install both handlers, the system handler only 'handles' SYS, all others are 'handled' through the non-system handler. It's an interesting way of resolving name conflicts I guess.

This is optional. If a device is available in both handlers (SDB0 here) you can choose which to install at build time whilst installing the other devices from the non-system handler. All other things being equal it's better to use the system handler because it is always resident anyway.

I'd like to get the system handler to work with 2 disks at least (max is 8 devices IIRC). I will first have to convert it to a 2 page handler, as the code is already pretty tight.

Well, the challenge surely is to try to fit into 1 page (as well as reducing the machine-dependency ;)). A 2-page non-system handler takes scarce resources on a small machine. There's also the option of having several non-system handlers, each handling only a subset of the total devices (the TD8E nonsys handler is done that way) - an overhead on the BUILD tables but little difference to the user since 2 different devices would use 2 different handlers anyway. Lots of options.
 
Last edited:
Almost - but you can also of course have a non-boot device which is coresident with the system device (ie included in the system handler).



This is optional. If a device is available in both handlers (SDB0 here) you can choose which to install at build time whilst installing the other devices from the non-system handler. All other things being equal it's better to use the system handler because it is always resident.

Ok, I figured out how to do this selectively. LOad the system handler, then INsert SYS, SDA0, SDB0, then LOad the non-system handler, INsert SDA1, SDB1. This makes the most use of the system handler for the disks it can handle. What I was doing was LOading both handlers. BUILD would only INsert SDA0,SDB0 to the non-system handler when they were both LOAded before an INsert. Live and learn I guess.
 
That seems to be the best solution, although I have mine running with only SYS inserted from the system handler, then all four devices on the nonsystem handler (SDA0, SDB0, SDA1, SDB1).

Since my 8/A has two RL02 drives, I wanted to be able to access them too. So I installed the RL02 handlers (found on RKB0 alias SDB0:) for drive 0, and was able to successfully format the pack in the drive :)

But OS/8 can only see partitions C & D (R20C: and R20D:). When attempting to access R20A: or R20B: I get the message "BAD DIRECTORY". Using ZERO on any of the four partitions crashes the system and I have to reload SerialDisk including its bootloader. Haven't tried drive 1 yet. Not bothering with the small E partitions because there won't be enough handler slots anyway.

I've seen problems like this before, usually caused by a mix of different versions of OS/8, BUILD and handlers... So I used SIMH to take the known good handlers from my RL02 image and put them on the virtual RK05. Reinstalled the new handlers using BUILD (the names of these RL02 handlers are also different, R0AB.SYS, R0CD.SYS, R1AB.SYS etc.).

Same problem :( probably still a version problem.

I do have a working RL02 image that became corrupted when I had RL8A hardware problems, but the only way I have to get it on my 8/A is to use vtserver on my 11/23+ system. It's very slow and also has some kind of bug (when I get to about 6 of the 10 MB transferred, the echoes to the PC console change and it looks like something's bombed out). Every RL02 image I have does this so it's not a problem with that particular image.


Any thoughts?
Thanks for any help.
-Charles
 
Sounds as though OS/8 CAN see the A and B partitions otherwise you would get a DOES NOT EXIST error rather than a BAD DIRECTORY.

I've never had an RL02, but have you checked that there's an entry in PIP's tables to enable ZEROing the devices? Depends which version you're using. Just building the device in doesn't automatically update the system programs. (Not that I think that would necessarily crash things, but would prevent ZEROing).
 
Sounds as though OS/8 CAN see the A and B partitions otherwise you would get a DOES NOT EXIST error rather than a BAD DIRECTORY.

I've never had an RL02, but have you checked that there's an entry in PIP's tables to enable ZEROing the devices? Depends which version you're using. Just building the device in doesn't automatically update the system programs. (Not that I think that would necessarily crash things, but would prevent ZEROing).

So in early 2012 I was having a similar problem. From alt.sys.pdp8 back then I wrote:

"I made a bootable OS/8 RL02 pack last night. the RL2SY.BN handler
works fine, but the non-system handler RL20.BN seems not to work. I
saw a posting here on alt.sys.pdp8 from a few years back from a fellow
trying to build a system on an emulator that encountered the same
problem. I will try RL20AB from the OS/78 V4 distribution (an RL02 non-
system handler) and see if I have better luck."

and a little later:

"And now the rest works too. I cannot say for certain if the RL20.BN
would have worked or not. I loaded and inserted the RL20AB from the
OS78 V4 distribution. (I also inserted the RL20CD, RL21AB, and
RL21CD). However, again, I would go to zero the other partitons, and
it would appear to work, but when I did a directory, I got a bad
directory error.

My problem was the version of PIP. I still had PIP V11A (from wherever
that came.) When I assembled PIPV4.PA from the OS78V4 distribution, I
now got a PIP with a zero (/Z) that knew RL02s and worked properly!
(When assembling PIPV4, one must SAVE SYS PIP;13000=6400. This is
noted in the listing.)

So now all is well and we have four huge 4000 block partitions per
pack! I will likely not bother with the partition Es because they are
slower and would consume another two handler slots of the meager 15
allowed."

Lou

PS. I have RX01 / RX02 mass storage on the 8/A in addition to the RL02. I can build packs by booting from floppy. Then I use Kermit to send the big files to the disk.
 
I don't know whether you ever decided to progress this Crawford?

I wanted more flexibility with the os8diskserver disks so I've done the following:
- hacked the system handler to add a second disk (so sda0,sdb0,sda1,sdb1)
- hacked the non-system handler to make it 4 disks (so sda0-sda3, sdb0-sdb3) and RTL/RTRs instead of BSWs
- out of interest hacked the original system handler to use RTL/RTRs instead of BSWs. I don't have an 8/I but I thought maybe one day.....
- sadly I couldn't find the space to get both 2 disks AND rotates in the system handler so still just 1 disk for this:(
- hacked the server a little to accommodate up to 4 disks
 
Hey Bob,

Yes, I got the system handler up to 4 disks, and I got the system and non-system handlers to be the same code base (with conditional assembly). My main goal was to eliminate the weird byte ordering to and from the PDP8, and reduce the overhead on the server side. That way the server could run on something very modest like an Arduino. So, in my version all the byte/word conversions follow the order on the disk image, so no reordering needs to happen and the buffers are not necessary. The server will still speak to the older handler (which helps with testing and transition).

So, I did a pretty wide detour to do all that, and still do not have it running from a Arduino. I told Kyle what I was doing and he really thought keeping the server code in pure C was the way to go. If you've ever done Arduino, it's a great environment, but if you go with pure C you need a FAT file library, etc. etc. because you're not using the environment.

-Crawford
 
I've no experience at all with an Arduino.
Mine runs on a Raspberry Pi - same code as Kyle's original just extended to 4 disks. The Pi lives in the 8/e chassis and boots with the 8/e and I added a little bit in the server to shut it down on command to avoid just cutting its power.
I Only have 2 disks in the system handler though, just couldn't get them all into a single page :(. Similarly (since all transfers are unchanged) the server and handlers are all compatible so trivial to swap things over initially.
The serial port on the Pi is very controllable so I run it at one of the higher non-standard baud rates that you can rig the M8650 up to and it's really quite quick. I've thought about getting one of Philip Hachtman's usb cards but every time I've looked lately his on-line shop is under maintenance. Maybe gilding the lily a bit though ;)
 
Last edited:
Yep, I'm running my server on a Raspberry Pi also. The idea of the Arduino was to have as cheap a server as possible, but with the Pi model A or a used/open box Model B being like $20, maybe not so much a goal.

I wrote a short routine on the PDP8 that shuts down the serial server, (send it a 'Q'), then a script can shut down the Raspberry Pi.

Slight change of topic and something I saw when I combined system and non-system handler code - why is the system handler limit only 100 words? They call them one page handlers, but the system limit is up to 7744 octal. That's 2/3 of a page! And while no one says why, if you go over 7744, the system will crash. (Yes I tried).
 
Yes, the writeups on handlers are a bit scattered around and some of the detail isn't in the main BUILD writeups. I've seen a reference to the 7744 page limit somewhere (can't remember where offhand) but all it said was that locations above there were used by the Monitor, not what for. I think the limited system handler space isn't really an issue for an intelligent device, not that there ever were very many on the 8, but it's tight for a dumb one.
 
Back
Top