However, Dan sent me several interesting files, apparently from the SunOS 4.1.1 sources.
cpu.addrs.h SS411/reva/sys/stand/mon/sun3 cpu.map.h SS411/reva/sys/stand/mon/sun3 sunmon.h SS411/reva/sys/stand/mon/sun3 interreg.h SS411/reva/sys/sun3 sunromvec.h SS411/reva/sys/stand/mon/h srt0.s SS411/reva/sys/boot/sun3 map.s SS411/reva/sys/boot/lib/sun3 standalloc.cThe directory sys/stand/mon/sun3 has a Makefile with this interesting section.
FILES= blts.s cmp.s cpu.map.s db.s patt.s romvec.s space.s \ trap.s asm_linkage.h assym.h cpu.addrs.h cpu.buserr.h \ cpu.map.h cpu.misc.h dpy.h keyboard.h m68vectors.h \ machdep.h memerr.h memreg.h structconst.h sunmon.hThere is plenty of interesting stuff in the "boot" and "stand" directories.
SS411/reva/sys/boot/lib/common
This file has many other useful insights.
struct sunromvec { char *v_initsp; /* Initial Stack Pointer for hardware.*/ void (*v_startmon)(); /* Initial PC for hardware. */ int *v_diagberr; /* Bus error handler for diagnostics. */ /* * Configuration information passed to standalone code and UNIX. */ struct bootparam **v_bootparam; /* Information for boot-strapped pgm. */ unsigned int *v_memorysize; /* Total physical memory in bytes. */ /* * Single character input and output. */ unsigned char (*v_getchar)(); /* Get a character from input source. */ void (*v_putchar)(); /* Put a character to output sink. */ int (*v_mayget)(); /* Maybe get a character, or "-1". */ int (*v_mayput)(); /* Maybe put a character, or "-1". */ unsigned char *v_echo; /* Should "getchar" echo input? */ unsigned char *v_insource; /* Current source of input. */ unsigned char *v_outsink; /* Currrent output sink. */ /* * Keyboard input and frame buffer output. */ int (*v_getkey)(); /* Get next key if one is available. */ void (*v_initgetkey)();/* Initialization for "getkey". */ unsigned int *v_translation; /* Keyboard translation selector. */ unsigned char *v_keybid; /* Keyboard ID byte. */ int *v_screen_x; /* V2: Screen x pos (R/O). */ int *v_screen_y; /* V2: Screen y pos (R/O). */ struct keybuf *v_keybuf; /* Up/down keycode buffer. */ char *v_mon_id; /* Revision level of the monitor. */ /* * Frame buffer output and terminal emulation. */ void (*v_fwritechar)();/* Write a character to frame buffer. */ int *v_fbaddr; /* Address of frame buffer. */ char **v_font; /* Font table for frame buffer. */ void (*v_fwritestr)(); /* Quickly write a string to frame * * buffer. */ /* * Re-boot interface routine. Resets and re-boots system. No return. */ void (*v_boot_me)(); /* For example, boot_me("xy()vmunix").*/ /* * Command line input and parsing. */ unsigned char *v_linebuf; /* The command line buffer. */ unsigned char **v_lineptr; /* Current pointer into "linebuf". */ int *v_linesize; /* Length of current command line. */ void (*v_getline)(); /* Get a command line from user. */ unsigned char (*v_getone)(); /* Get next character from "linebuf". */ unsigned char (*v_peekchar)(); /* Peek at next character without * * advancing pointer. */ int *v_fbthere; /* Is there a frame buffer or not? * * 1=yes. */ int (*v_getnum)(); /* Grab hex number from command line. */ /* * Phrase output to current output sink. */ int (*v_printf)(); /* Similar to Kernel's "printf". */ void (*v_printhex)(); /* Format N digits in hexadecimal. */ unsigned char *v_leds; /* RAM copy of LED register value. */ void (*v_set_leds)(); /* Sets LEDs and RAM copy */ /* * The nmi related information. */ void (*v_nmi)(); /* Address for the Sun-4 level 14 * * interrupt vector. */ void (*v_abortent)(); /* Entry for keyboard abort. */ int *v_nmiclock; /* Counts in milliseconds. */ int *v_fbtype; /* Frame buffer type: see*/ /* * Assorted other things. */ unsigned int v_romvec_version; /* Version number of "romvec". */ struct globram *v_gp; /* Monitor's global variables. */ struct zscc_device *v_keybzscc; /* Address of keyboard in use. */ int *v_keyrinit; /* Millisecs before keyboard repeat. */ unsigned char *v_keyrtick; /* Millisecs between repetitions. */ unsigned int *v_memoryavail; /* V1: Size of usable main memory. */ long *v_resetaddr; /* where to jump on a RESET trap. */ void (*v_exit_to_mon)();/* Exit from user program. */ unsigned char **v_memorybitmap; /* V1: Bit map of main memory or NULL.*/ #ifndef sun3x void (*v_setcxsegmap)();/* Set segment in any context. */ #endif sun3x void (**v_vector_cmd)();/* V2: Handler for the 'w' (vector) * * command. */ #if defined(sun4) || defined(sun4c) unsigned long *v_exp_trap_signal;/* V3: Location of the expected trap * * signal. Was trap expected or not? */ unsigned long *v_trap_vector_table_base; /* V3: Address of the TRAP * * VECTOR TABLE which exists in RAM. */ #endif sun4 || sun4c #ifdef sun4c struct physmemory *v_physmemory; /* ptr to memory list */ unsigned int *v_monmemory; /* memory taken by monitor */ struct config_ops *v_config_ops; /* configuration operations */ #endif sun4c /* XXX - does sun4m really need this too? */ #if defined(sun3x) || defined(sun4m) int **v_lomemptaddr; /* address of low memory ptes */ int **v_monptaddr; /* address of debug/mon ptes */ int **v_dvmaptaddr; /* address of dvma ptes */ int **v_monptphysaddr; /* Physical Addr of the KADB PTE's */ int **v_shadowpteaddr; /* addr of shadow cp of DVMA pte's */ struct physmemory *v_physmemory; /* Ptr to memory list for Hydra */ #endif sun3x || sun4m int dummy1z; int dummy2z; int dummy3z; int dummy4z; }; /* * The possible values for "*romp->v_insource" and "*romp->v_outsink" are * listed below. These may be extended in the future. Your program should * cope with this gracefully (e.g. by continuing to vector through the ROM * I/O routines if these are set in a way you don't understand). */ #define INKEYB 0 /* Input from parallel keyboard. */ #define INUARTA 1 /* Input or output to Uart A. */ #define INUARTB 2 /* Input or output to Uart B. */ #define INUARTC 3 /* Input or output to Uart C. */ #define INUARTD 4 /* Input or output to Uart D. */ #define OUTSCREEN 0 /* Output to frame buffer. */ #define OUTUARTA 1 /* Input or output to Uart A. */ #define OUTUARTB 2 /* Input or output to Uart B. */ #define OUTUARTC 3 /* Input or output to Uart C. */ #define OUTUARTD 4 /* Input or output to Uart D. */ /* * Structure set up by the boot command to pass arguments to the booted program. */ struct bootparam { char *bp_argv[8]; /* String arguments. */ char bp_strings[100]; /* String table for string arguments. */ char bp_dev[2]; /* Device name. */ int bp_ctlr; /* Controller Number. */ int bp_unit; /* Unit Number. */ int bp_part; /* Partition/file Number. */ char *bp_name; /* File name. Points into "bp_strings". */ struct boottab *bp_boottab; /* Points to table entry for device. */ }; /* * This table entry describes a device. It exists in the PROM. A pointer to * it is passed in "bootparam". It can be used to locate ROM subroutines for * opening, reading, and writing the device. NOTE: When using this interface, * only ONE device can be open at any given time. In other words, it is not * possible to open a tape and a disk at the same time. */ struct boottab { char b_dev[2]; /* Two character device name. */ int (*b_probe)(); /* probe(): "-1" or controller number. */ int (*b_boot)(); /* boot(bp): "-1" or start address. */ int (*b_open)(); /* open(iobp): "-"1 or "0". */ int (*b_close)(); /* close(iobp): "-"1 or "0". */ int (*b_strategy)(); /* strategy(iobp, rw): "-1" or "0". */ char *b_desc; /* Printable string describing device. */ struct devinfo *b_devinfo; /* Information to configure device. */ };