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: [email protected] [mailto:[email protected]] On 
Behalf Of Jason Stevens
Sent: Thursday, June 26, 2014 7:35 PM
To: 'Henry Bent'; [email protected]
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:[email protected]]
Sent: Friday, June 27, 2014 9:09 AM
To: [email protected]<mailto:[email protected]>
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
_______________________________________________
Simh mailing list
[email protected]
http://mailman.trailing-edge.com/mailman/listinfo/simh

Reply via email to