October 27, 2024

Sun 3/80 -- address map

We don't have any real hardware documentation for the Sun 3/80.
We are putting this together in pieces as we search for clues.

A current guess is that the ROM is at 0xfefe0000 -- 0xfeffffff

The floppy and parallel port are unique to the 3/80 and are as follows:

controller  fdc0 at obio ? csr 0x6e000000 priority 6 vector fdintr 0x5c
device      pp0 at obio ? csr 0x6f000000 priority 1
The 3/80 is called a sun3x "class" machine (the few machines with a 68030) The only other sun3x I know of is the 3/470. The following addresses are for sun3x machines:
device      le0 at obio ? csr 0x65002000 priority 3 (lance ethernet)
controller  sm0 at obio ? csr 0x66000000 priority 2 (scsi)
device      zs0 at obio ? csr 0x62002000 flags 3 priority 3 (zilog serial)
device      zs1 at obio ? csr 0x62000000 flags 0x103 priority 3
device      cgfour0 at obmem ? csr 0x50300000 priority 4 (cgfour 8-bit framebuffer)
device      cgsix0 at obmem ? csr 0x50000000 priority 4 (accelerated 8-bit framebuffer)
device      cgeight0 at obmem ? csr 0x50300000 priority 4 (24 bit frame buffer)
device      bwtwo0 at obmem ? csr 0x50300000 priority 4 (monochrome frame buffer)
Looking at NetBSD 2.0 sources, the file usr/src/sys/arch/sun3/sun3x/obio.h gives:
/*
 * The obio or type "1" address space.
 */
#define OBIO_MIN_ADDRESS    0x58000000
#define OBIO_MAX_ADDRESS    0x7BFFFFFF

/*
 * Physical addresses of nonconfigurable devices.
 */
#define OBIO_FPA_ADDR       0x5C000000

#define OBIO_IOMMU          0x60000000

/* Note that these six are all in the same page. */
#define OBIO_ENABLEREG      0x61000000
#define OBIO_BUSERRREG      0x61000400
#define OBIO_DIAGREG        0x61000800
#define OBIO_IDPROM1        0x61000C00 /* 3/470 only */
#define OBIO_MEMREG         0x61001000
#define OBIO_INTERREG       0x61001400

#define OBIO_ZS_KBD_MS      0x62000000
#define OBIO_ZS_TTY_AB      0x62002000

/*
 * Note: there are two kinds of EEPROM/IDPROM/clock!
 * On the 3/80 one Mostek MK48T02 does it all.
 * The 3/470 uses the older, discrete parts.
 */
#define OBIO_EEPROM         0x64000000
#define OBIO_IDPROM2        0x640007D8 /* 3/80 only (Mostek MK48T02) */
#define OBIO_CLOCK2         0x640007F8 /* 3/80 only (Mostek MK48T02) */

#define OBIO_CLOCK1         0x64002000 /* 3/470 only */

#define OBIO_INTEL_ETHER    0x65000000
#define OBIO_LANCE_ETHER    0x65002000

#define OBIO_EMULEX_SCSI    0x66000000 /* 3/80 only */
#define OBIO_EMULEX_DMA     0x66001000 /* 3/80 only */

#define OBIO_PCACHE_TAGS    0x68000000
#define OBIO_ECCPARREG      0x6A1E0000
#define OBIO_IOC_TAGS       0x6C000000
#define OBIO_IOC_FLUSH      0x6D000000

#define OBIO_FDC            0x6e000000  /* 3/80 only */
#define OBIO_PRINTER_PORT   0x6f00003c  /* 3/80 only */
We have the SYSENA register at 0x6100_0000 with these bits:
#define ENA_DBGCACHE    0x0008      /* r/w - debug mode for system cache */
#define ENA_LOOPBACK    0x0010      /* r/w - vme loopback mode */
#define ENA_IOCACHE 0x0020      /* r/w - enable I/O cache */
#define ENA_CACHE   0x0040      /* r/w - enable system cache */
#define ENA_DIAG    0x0100      /* r/w - diag switch/programmable */
#define ENA_FPA     0x0200      /* r/w - enable floating point accel */
#define ENA_RES     0x0400      /* r/o - monitor resolution */
#define ENA_VIDEO   0x0800      /* r/w - enable video memory */
#define ENA_SDVMA   0x2000      /* r/w - enable system DVMA */
#define ENA_FPP     0x4000      /* r/w - enable floating point proc */
#define ENA_NOTBOOT 0x8000      /* r/w - non-boot state, 1 = normal */
We have the diag reg at 0x6100_0800