[Simh] Ultrix 1.0

Mark Pizzolato - Info Comm Mark at infocomm.com
Fri Jun 27 22:54:22 EDT 2014


Hi Jason,

This is interesting.

The 4.2 and 4.3BSD (and Ultrix) drivers MUST have worked with real hardware, so the best course of action here would be to fix the simulation to match what the software expects.

The code you're pointing at below (if_de.c) is the driver for the DEUNA/DELUA not the DEQNA which the original poster is using.

I could believe that there are issues with the DEUNA implementation for earlier Ultrix and BSD versions.  I'm glad to fix that also if the simulated hardware isn't consistent with how real hardware worked...

Can you remember or better yet, provide a specific case which needs the driver patch you suggest below...

Thanks.


-          Mark

From: simh-bounces at trailing-edge.com [mailto:simh-bounces at trailing-edge.com] On Behalf Of Jason Stevens
Sent: Thursday, June 26, 2014 7:35 PM
To: 'Henry Bent'; simh at trailing-edge.com
Subject: Re: [Simh] Ultrix 1.0

I wonder if it's related to the BSD driver for the network card.... Years ago I was playing with 4.2 and 4.3BSD and I never could get the network card to work, so I started to play with the driver, and I found this:

In the  if_de.c driver there is some error checking, that always seems to come back with errors.

------8<------8<------8<------8<------8<------8<------8<------8<------8<------8<
/*
 * Ethernet interface receiver interface.
 * If input error just drop packet.
 * Otherwise purge input buffered data path and examine
 * packet to determine type.  If can't determine length
 * from type, then have to drop packet.  Othewise decapsulate
 * packet based on type and pass to type specific higher-level
 * input routine.
 */
derecv(unit)
        int unit;
{
        register struct de_softc *ds = &de_softc[unit];
        register struct de_ring *rp;
        int len;

        rp = &ds->ds_rrent[ds->ds_rindex];
        while ((rp->r_flags & RFLG_OWN) == 0) {
                ds->ds_if.if_ipackets++;
                if (ds->ds_deuba.iff_flags & UBA_NEEDBDP)
                        UBAPURGE(ds->ds_deuba.iff_uba,
                        ds->ds_ifr[ds->ds_rindex].ifrw_bdp);
                len = (rp->r_lenerr&RERR_MLEN) - sizeof (struct ether_header)
                        - 4;    /* don't forget checksum! */
                /* check for errors */
               if ((rp->r_flags & (RFLG_ERRS|RFLG_FRAM|RFLG_OFLO|RFLG_CRC)) ||
                    (rp->r_flags&(RFLG_STP|RFLG_ENP)) != (RFLG_STP|RFLG_ENP) ||
                    (rp->r_lenerr & (RERR_BUFL|RERR_UBTO|RERR_NCHN)) ||
                    len < ETHERMIN || len > ETHERMTU) {
                        ds->ds_if.if_ierrors++;
                        if (dedebug)
                        printf("de%d: ierror, flags=%b lenerr=%b (len=%d)\n",
                                unit, rp->r_flags, RFLG_BITS, rp->r_lenerr,
                                RERR_BITS, len);
                } else
------8<------8<------8<------8<------8<------8<------8<------8<------8<------8<
if_dereg.h:#define      RFLG_ERRS       0x40            /* Error summary */
if_dereg.h:#define      RFLG_FRAM       0x20            /* Framing error */
if_dereg.h:#define      RFLG_OFLO       0x10            /* Message overflow */
if_dereg.h:#define      RFLG_CRC        0x08            /* CRC error */
if_dereg.h:#define      RFLG_STP        0x02            /* Start of packet */
if_dereg.h:#define      RFLG_ENP        0x01            /* End of packet */
if_dereg.h:#define      RERR_BUFL       0x8000          /* Buffer length error *
if_dereg.h:#define      RERR_UBTO       0x4000          /* UNIBUS tiemout */
if_dereg.h:#define      RERR_NCHN       0x2000          /* No data chaining */


Now I don't know if Ultrix still has the driver source code... but this was a quick enough fix for me.  And I recall if_de.c being the same from 4.2BSD into 4.3BSD as it was the same fix I used to get them all working on SIMH.




The patch was something like this...
------8<------8<------8<------8<------8<------8<------8<------8<------8<------8<
500c500
<               if ((rp->r_flags & (RFLG_ERRS|RFLG_FRAM|RFLG_OFLO|RFLG_CRC)) ||
---
> /***          if ((rp->r_flags & (RFLG_ERRS|RFLG_FRAM|RFLG_OFLO|RFLG_CRC)) ||
503a504,505
>                       ***/
>                       if(1==5){
------8<------8<------8<------8<------8<------8<------8<------8<------8<------8<

________________________________
From: Henry Bent [mailto:hbent at oberlin.edu]
Sent: Friday, June 27, 2014 9:09 AM
To: simh at trailing-edge.com<mailto:simh at trailing-edge.com>
Subject: [Simh] Ultrix 1.0

I had success booting the Unix Archive's floppy distribution of Ultrix 1.0 on the MicroVAX 1 simulator.  It appears that the distribution there was only meant for a dual-RX50 MicroVAX 1 with an RD drive, and will not boot on any other machine.  RQ0 needs to be an RD51 or RD52, and RQ1 and RQ2 need to be RX50s.  TTI and TTO need to be 7 bit.  To boot the installer, put 32m-1.0-bin/01 on RQ1 and 32m-1.0-bin/02 on RQ2.  The install goes cleanly, albeit with quite a bit of disk swapping - the installation disk set is 13 floppies.
The QVSS is supported and will display some output on boot.  I haven't yet looked into what is needed to use it as the console (if that's possible?).

The kernel seems to support what I assume is the DEQNA - it has references to a qe device - but I can't figure out how to get it recognized.  Unfortunately there are no kernel config files in the distribution, so I have no idea if the stock kernel is expecting the controller at a non-standard address.  Any help with this would be greatly appreciated,
-Henry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.trailing-edge.com/pipermail/simh/attachments/20140627/eeb46e1e/attachment-0002.html>


More information about the Simh mailing list