⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 output.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/*	@(#)output.c 1.1 92/07/30 SMI	*//* *	Microassembler output routines */#include "micro.h"#include <stdio.h>extern RAMNODE ram[];extern short curaddr;extern NODE *curnode, n[];extern NODE *adr[];extern SYMBOL *shash[];FILE *binfile;FILE *tblfile;alpha_out(){    /* print listing */    register NODE *nd;    register int i;    Boolean any_undef = False;    SYMBOL *sp;    printf("\nSun Microsystems FPA Microassembler -- Version 1.0 (10 June 1985) -- Company Confidential\n");    for (i = 0; i < NHASH; i++) {	sp = shash[i];	while (sp != 0) {	    if (!sp->defined) {		if (!any_undef) {		    any_undef = True;		    error ("\nError:  undefined symbols:\n");		}		printf("     %s\n",sp->name);	    }	    sp = sp->next_hash;	}    }    if (any_undef) {	printf("\n");	return;    }    printf("Microcode Output\n");    printf("\n                 next                 data rec ram  ptr\n");    printf(  "    ln# addr seq addr stat L+ F+ sgnl mux  reg ctrl ctrl  source line\n");    for( nd = n; nd <=curnode; nd++) {	if (nd->org_pseudo) {	    printf("                                                     %s",nd->line);	} else if (nd->sccsid) {	    printf("%7x  ",nd->addr);	    printf("%04x%04x%04x%04x%02x                           ",nd->word1,nd->word2,nd->word3,		nd->word4, nd->word5>>8 );	    printf("%s", nd->line != 0 ? nd->line : "\n");	} else if (nd->filled) {	    printf("  %4d%5x  ",nd->lineno, nd->addr);	    printf("%02x  %04x  %02x%1s %02x %02x %04x  %02x   %01x   %02x   %02x   ",		nd->word1 >> 10,		((nd->word1 << 4) + (nd->word2 >> 12)) & 0x3fff,		(nd->word2 >> 6) & 0x3f,		(nd->word4 & 0x0001) ? "*" : " ",		(nd->word2 >> 1) & 0x1f,		((nd->word2 << 7) + (nd->word3 >> 9) ) & 0xff,		((nd->word3 << 4) + (nd->word4 >> 12)) & 0x1fff,		(nd->word4 >> 6) & 0x3f,		(nd->word4 >> 4) & 0x3,		((nd->word4 >> 1 << 3) + ((nd->word5 >> 13) & 0x7)) & 0x7f,		((nd->word5 >> 8) & 0x1f ));	    printf("%s", nd->line);	}    }    printf("\n\n");    printf("Ram Table Output\n\n");    printf("name             addr in ram     entry in ucode   L+        F+\n");    for( i=0; i<NINST; i++ ) {	if ( ram[i].name[0] != 0 ) {		printf("%-17s%12s        %4x         %x         %2x\n", 			ram[i].name, ram[i].addr, ram[i].entry, ram[i].load, ram[i].func);	}    }}FILE *open_a_file( s )    char *s;{    register int i;    i = creat( s, 0644 );    if (i<0){	perror( s );	fatal("could not create output file");    }    return fdopen( i, "w");}write_binary(){        register NODE *ni;        short word;	int   addr = 0;	fwrite(&curaddr, sizeof(curaddr), 1, binfile);        for( ni = n; ni <=curnode; ni++ ) {		if (ni->org_pseudo) continue;		while (ni->addr != addr ) {			word = 0;			fwrite(&word,sizeof(word),1,binfile);			word = 0x40;			fwrite(&word,sizeof(word),1,binfile);			word = 0x8;			fwrite(&word,sizeof(word),1,binfile);			word = 0;  			fwrite(&word,sizeof(word),1,binfile);			word = 0;			fwrite(&word,sizeof(word),1,binfile);			word = 0;			fwrite(&word,sizeof(word),1,binfile);			addr++;		}		addr++;		word = 0;		fwrite(&word,sizeof(word),1,binfile);		word = ni->word1 >> 8;		fwrite(&word,sizeof(word),1,binfile);		word = (ni->word1 << 8) + (ni->word2 >> 8);		fwrite(&word,sizeof(word),1,binfile);		word = (ni->word2 << 8) + (ni->word3 >> 8);		fwrite(&word,sizeof(word),1,binfile);		word = (ni->word3 << 8) + (ni->word4 >> 8);		fwrite(&word,sizeof(word),1,binfile);		word = (ni->word4 << 8) + (ni->word5 >> 8);		fwrite(&word,sizeof(word),1,binfile);	}}write_ramtbl(){	short i, word;	for( i = 0; i < NINST; i++){		word = ram[i].entry >> 6;		fwrite(&word,sizeof(word),1,tblfile);		word = (ram[i].entry << 10) + (ram[i].load << 6) + ram[i].func;		fwrite(&word,sizeof(word),1,tblfile);	}}output(bout_stream, tbl_stream)FILE * bout_stream;FILE * tbl_stream;{    /* there are three parts to the output writing -- the listing, the binary, and the ramtbl */    alpha_out();    if (bout_stream != 0) {	binfile = bout_stream;        write_binary();        fclose( binfile );    }    if (tbl_stream != 0 ) {	tblfile = tbl_stream;	write_ramtbl();        fclose( tblfile );    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -