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

📄 88.c

📁 坦尼保姆
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>#define EXTERN extern#include "88.h"#include "macro.h"#ifdef INPUT#include <signal.h>#endifextern void prut();interp(){register word             t;register word             t2;register char             c;register int              mm, n, k;       /* 1 if dumping on, 0 if off */register adr              u, u1, u2;    mask = 0377;/* Here is the main loop of the interpreter. */loop:/* dump();    if (anything)        dumpck();    if (--timer == 0)        checkint(); */next:    t = *pcx++ & mask;    if(stopvlag) dump();    else if(traceflag && !(--instrcount & 0x3fff)){	sprintf(errbuf,"Telstop %3d",((instrcount)>>14)&0Xff); meldroutine();		if(instrcount) {/* system("sleep 1"); winupdate();*/}		else dump();}    if((PC)>codelength) {      if (traceflag) dump();	fprintf(stderr,"Code out of range %d\n",(PC)); exit(1);}bloop:    /* if (t == 0x90)        goto next; */    /* Some compilers balk at 256-case switches */    switch(t) {    case 0x00: by(); c=eoplo+roplo; BSTORE(c); BLAZYCC(eoplo,roplo,ADDB); LOOP;    case 0x01: wd(); t=eop+rop; WSTORE(t); LAZYCC(eop,rop,ADDW); LOOP;    case 0x02: by(); c=roplo+eoplo; *rapc=c; BLAZYCC(roplo,eoplo,ADDB); LOOP;    case 0x03: wd(); t=rop+eop; *rapw=t; LAZYCC(eop,rop,ADDW); LOOP;    case 0x04: IMMED8; c=al; al+=eoplo; BLAZYCC(c,eoplo,ADDB); LOOP;    case 0x05: IMMED; t= ax; ax+=eop; LAZYCC(t,eop,ADDW); LOOP;    case 0x06: PUSH(es); LOOP;    case 0x07: POP(es); LOOP;    case 0x08: by(); c=eoplo|roplo; BSTORE(c); BSZONLY(c); LOOP;    case 0x09: wd(); t=eop|rop; WSTORE(t); SZONLY(t); LOOP;    case 0x0A: by(); c=roplo|eoplo; *rapc=c; BSZONLY(c); LOOP;    case 0x0B: wd(); t=rop|eop; *rapw=t; SZONLY(t); LOOP;    case 0x0C: IMMED8; c=al|eoplo; al=c; BSZONLY(c); LOOP;    case 0x0D: IMMED; t= ax|eop; ax=t; SZONLY(t); LOOP;    case 0x0E: PUSH(cs); LOOP;    case 0x0F: syscal(); LOOP; /* spare(0x0F);*/    case 0x10: by(); CC; c=eoplo+roplo+cf; BSTORE(c);		BLAZYCC3(eoplo,roplo,cf,ADCB); LOOP;    case 0x11: wd(); CC; t=eop+rop+cf; WSTORE(t);		LAZYCC3(eop,rop,cf,ADCW); LOOP;    case 0x12: by(); CC; c=roplo+eoplo+cf; *rapc=c;		BLAZYCC3(roplo,eoplo,cf,ADCB); LOOP;    case 0x13: wd(); CC; t=rop+eop+cf; *rapw=t;		LAZYCC3(eop,rop,cf,ADCW); LOOP;    case 0x14: IMMED8; CC; c=al; al+=eoplo+cf;		BLAZYCC3(c,eoplo,cf,ADCB); LOOP;    case 0x15: IMMED; CC; t= ax; ax+=eop+cf;		LAZYCC3(t,eop,cf,ADCW); LOOP;    case 0x16: PUSH(ss); LOOP;    case 0x17: POP(ss); LOOP;    case 0x18: by(); CC; c=eoplo-roplo-cf; BSTORE(c);		BLAZYCC3(eoplo,roplo,cf,SBBB); LOOP;    case 0x19: wd(); CC; t=eop-rop-cf; WSTORE(t);		LAZYCC3(eop,rop,cf,SBBW); LOOP;    case 0x1A: by(); CC; c=roplo-eoplo-cf; *rapc=c;		BLAZYCC3(roplo,eoplo,cf,SBBB); LOOP;    case 0x1B: wd(); CC; t=rop-eop-cf; *rapw=t;		LAZYCC3(rop,eop,cf,SBBW); LOOP;    case 0x1C: IMMED8; CC; c=al; al-=(eoplo+cf);		BLAZYCC3(c,eoplo,cf,SBBB); LOOP;    case 0x1D: IMMED; CC; t= ax; ax-=(eop+cf);		LAZYCC3(t,eop,cf,SBBW); LOOP;    case 0x1E: PUSH(ds); LOOP;    case 0x1F: POP(ds); LOOP;    case 0x20: by(); c=eoplo&roplo; BSTORE(c); BSZONLY(c); LOOP;    case 0x21: wd(); t=eop&rop; WSTORE(t); SZONLY(t); LOOP;    case 0x22: by(); c=roplo&eoplo; *rapc=c; BSZONLY(c); LOOP;    case 0x23: wd(); t=rop&eop; *rapw=t; SZONLY(t); LOOP;    case 0x24: IMMED8; c=al&eoplo; al=c; BSZONLY(c); LOOP;    case 0x25: IMMED; t= ax&eop; ax=t; SZONLY(t); LOOP;    case 0x26: OVERRIDE(es); LOOP;    case 0x27: notim(t);    case 0x28: by(); c=eoplo-roplo; BSTORE(c); BLAZYCC(eoplo,roplo,SUBB); LOOP;    case 0x29: wd(); t=eop-rop; WSTORE(t); LAZYCC(eop,rop,SUBW); LOOP;    case 0x2A: by(); c=roplo-eoplo; *rapc=c; BLAZYCC(roplo,eoplo,SUBB); LOOP;    case 0x2B: wd(); t=rop-eop; *rapw=t; LAZYCC(rop,eop,SUBW); LOOP;    case 0x2C: IMMED8; c=al; al-=eoplo; BLAZYCC(c,eoplo,SUBB); LOOP;    case 0x2D: IMMED; t= ax; ax-=eop; LAZYCC(t,eop,SUBW); LOOP;    case 0x2E: OVERRIDE(cs); LOOP;    case 0x2F: notim(t);    case 0x30: by(); c=eoplo^roplo; BSTORE(c); BSZONLY(c); LOOP;    case 0x31: wd(); t=eop^rop; WSTORE(t); SZONLY(t); LOOP;    case 0x32: by(); c=roplo^eoplo; *rapc=c; BSZONLY(c); LOOP;    case 0x33: wd(); t=rop^eop; *rapw=t; SZONLY(t); LOOP;    case 0x34: IMMED8; c=al^eoplo; al=c; BSZONLY(c); LOOP;    case 0x35: IMMED; t= ax^eop; ax=t; SZONLY(t); LOOP;    case 0x36: OVERRIDE(ss); LOOP;    case 0x37: notim(t);    case 0x38: by(); BLAZYCC(eoplo,roplo,SUBB); LOOP;    case 0x39: wd(); LAZYCC(eop,rop,SUBW); LOOP;    case 0x3A: by(); BLAZYCC(roplo,eoplo,SUBB); LOOP;    case 0x3B: wd(); LAZYCC(rop,eop,SUBW); LOOP;    case 0x3C: IMMED8; BLAZYCC(al,eoplo,SUBB); LOOP;    case 0x3D: IMMED; LAZYCC(ax,eop,SUBW); LOOP;    case 0x3E: OVERRIDE(ds); LOOP;    case 0x3F: notim(t);    case 0x40: CC; t= ax; ax=t+1; LAZYCC(t,1,INCW); LOOP;    case 0x41: CC; t= cx; cx=t+1; LAZYCC(t,1,INCW); LOOP;    case 0x42: CC; t= dx; dx=t+1; LAZYCC(t,1,INCW); LOOP;    case 0x43: CC; t= bx; bx=t+1; LAZYCC(t,1,INCW); LOOP;    case 0x44: CC; t= sp; sp=t+1; LAZYCC(t,1,INCW); LOOP;    case 0x45: CC; t= bp; bp=t+1; LAZYCC(t,1,INCW); LOOP;    case 0x46: CC; t= si; si=t+1; LAZYCC(t,1,INCW); LOOP;    case 0x47: CC; t= di; di=t+1; LAZYCC(t,1,INCW); LOOP;    case 0x48: CC; t= ax; ax=t-1; LAZYCC(t,1,DECW); LOOP;    case 0x49: CC; t= cx; cx=t-1; LAZYCC(t,1,DECW); LOOP;    case 0x4A: CC; t= dx; dx=t-1; LAZYCC(t,1,DECW); LOOP;    case 0x4B: CC; t= bx; bx=t-1; LAZYCC(t,1,DECW); LOOP;    case 0x4C: CC; t= sp; sp=t-1; LAZYCC(t,1,DECW); LOOP;    case 0x4D: CC; t= bp; bp=t-1; LAZYCC(t,1,DECW); LOOP;    case 0x4E: CC; t= si; si=t-1; LAZYCC(t,1,DECW); LOOP;    case 0x4F: CC; t= di; di=t-1; LAZYCC(t,1,DECW); LOOP;    case 0x50: PUSH(ax); LOOP;    case 0x51: PUSH(cx); LOOP;    case 0x52: PUSH(dx); LOOP;    case 0x53: PUSH(bx); LOOP;    case 0x54: t=sp; PUSH(t); LOOP;    case 0x55: PUSH(bp); LOOP;    case 0x56: PUSH(si); LOOP;    case 0x57: PUSH(di); LOOP;    case 0x58: POP(ax); LOOP;    case 0x59: POP(cx); LOOP;    case 0x5A: POP(dx); LOOP;    case 0x5B: POP(bx); LOOP;    case 0x5C: POP(t); sp=t; LOOP;    case 0x5D: POP(bp); LOOP;    case 0x5E: POP(si); LOOP;    case 0x5F: POP(di); LOOP;    case 0x60:    case 0x61:    case 0x62:    case 0x63:    case 0x64:    case 0x65:    case 0x66:    case 0x67: spare(t);    case 0x68: IMMED; PUSH(eop); LOOP;    case 0x69: spare(t);    case 0x6A: IMMED8X; PUSH(eop); LOOP;    case 0x6B:    case 0x6C:    case 0x6D:    case 0x6E:    case 0x6F: spare(t);    case 0x70: IMMED8X; CC; if (ovf > 0) pcx += eop; LOOP;    case 0x71: IMMED8X; CC; if (ovf == 0) pcx += eop; LOOP;    case 0x72: IMMED8X; CC; if (cf > 0) pcx += eop; LOOP;    case 0x73: IMMED8X; CC; if (cf == 0) pcx += eop; LOOP;    case 0x74: IMMED8X; CC; if (zerof > 0) pcx += eop; LOOP;    case 0x75: IMMED8X; CC; if (zerof == 0) pcx += eop; LOOP;    case 0x76: IMMED8X; CC; if (cf+zerof > 0) pcx += eop; LOOP;    case 0x77: IMMED8X; CC; if (cf+zerof == 0) pcx += eop; LOOP;    case 0x78: IMMED8X; CC; if (signf > 0) pcx += eop; LOOP;    case 0x79: IMMED8X; CC; if (signf == 0) pcx += eop; LOOP;    case 0x7A:    case 0x7B: notim(t);    case 0x7C: IMMED8X; CC; if (signf != ovf) pcx += eop; LOOP;    case 0x7D: IMMED8X; CC; if (signf == ovf) pcx += eop; LOOP;    case 0x7E: IMMED8X; CC; if (zerof > 0 || signf != ovf) pcx += eop; LOOP;    case 0x7F: IMMED8X; CC; if (zerof == 0 && signf == ovf) pcx += eop; LOOP;    case 0x80: by(); 	switch(ra) {		/* this opcode splits on reg field (in ra) */	    case B00: BRMCONST; c=eoplo+roplo; BSTORE(c);			BLAZYCC(eoplo,roplo,ADDB); LOOP;	    case B01: BRMCONST; c=eoplo|roplo; BSTORE(c); BSZONLY(c); LOOP;	    case B02: BRMCONST; CC; c=eoplo+roplo+cf; BSTORE(c);			BLAZYCC3(eoplo,roplo,cf,ADCB); LOOP;	    case B03: BRMCONST; CC; c=eoplo-roplo-cf; BSTORE(c);			BLAZYCC3(eoplo,roplo,cf,SBBB); LOOP;	    case B04: BRMCONST; c=eoplo&roplo; BSTORE(c); BSZONLY(c); LOOP;	    case B05: BRMCONST; c=eoplo-roplo; BSTORE(c);			BLAZYCC(eoplo,roplo,SUBB); LOOP;	    case B06: BRMCONST; c=eoplo^roplo; BSTORE(c); BSZONLY(c); LOOP;	    case B07: BRMCONST; BLAZYCC(eoplo,roplo,SUBB); LOOP;	}    case 0x81: wd(); 	switch(ra) {		/* this opcode splits on reg field (in ra) */	    case W00: RMCONST; t=eop+rop; WSTORE(t); LAZYCC(eop,rop,ADDW); LOOP;	    case W01: RMCONST; t=eop|rop; WSTORE(t); SZONLY(t); LOOP;	    case W02: RMCONST; CC; t=eop+rop+cf; WSTORE(t);			LAZYCC3(eop,rop,cf,ADCW); LOOP;	    case W03: RMCONST; CC; t=eop-rop-cf; WSTORE(t);			LAZYCC3(eop,rop,cf,SBBW); LOOP;	    case W04: RMCONST; t=eop&rop; WSTORE(t); SZONLY(t); LOOP;	    case W05: RMCONST; t=eop-rop; WSTORE(t); LAZYCC(eop,rop,SUBW); LOOP;	    case W06: RMCONST; t=eop^rop; WSTORE(t); SZONLY(t); LOOP;	    case W07: RMCONST; LAZYCC(eop,rop,SUBW); LOOP;	}    case 0x82: by(); 	switch(ra) {		/* this opcode splits on reg field (in ra) */	    case B00: BRMCONST; c=eoplo+roplo; BSTORE(c); BLAZYCC(eoplo,roplo,ADDB); LOOP;	    case B01: spare(t);	    case B02: BRMCONST; CC; c=eoplo+roplo+cf; BSTORE(c);			BLAZYCC3(eoplo,roplo,cf,ADCB); LOOP;	    case B03: BRMCONST; CC; c=eoplo-roplo-cf; BSTORE(c);			BLAZYCC3(eoplo,roplo,cf,SBBB); LOOP;	    case B04: spare(t);	    case B05: BRMCONST; c=eoplo-roplo; BSTORE(c);			BLAZYCC(eoplo,roplo,SUBB); LOOP;	    case B06: spare(t);	    case B07: RMCONST; BLAZYCC(eoplo,roplo,SUBB); LOOP;	}    case 0x83: wd(); 	switch(ra) {		/* this opcode splits on reg field (in ra) */	    case W00: XRMCONST; t=eop+rop; WSTORE(t);			LAZYCC(eop,rop,ADDW); LOOP;	    case W01: XRMCONST; t=eop|rop; WSTORE(t); SZONLY(t); LOOP;	    case W02: XRMCONST; CC; t=eop+rop+cf; WSTORE(t);			LAZYCC3(eop,rop,cf,ADCW); LOOP;	    case W03: XRMCONST; CC; t=eop-rop-cf; WSTORE(t);			LAZYCC3(eop,rop,cf,SBBW); LOOP;	    case W04: XRMCONST; t=eop&rop; WSTORE(t); SZONLY(t); LOOP;	    case W05: XRMCONST; t=eop-rop; WSTORE(t);			LAZYCC(eop,rop,SUBW); LOOP;	    case W06: XRMCONST; t=eop^rop; WSTORE(t); SZONLY(t); LOOP;	    case W07: XRMCONST; LAZYCC(eop,rop,SUBW); LOOP;	}    case 0x84: by(); c=eoplo&roplo; BSZONLY(c); LOOP;    case 0x85: wd(); SZONLY(eop&rop); LOOP;    case 0x86: by(); BSTORE(roplo); *rapc=eoplo; LOOP;    case 0x87: wd(); WSTORE(rop); *rapw=eop; LOOP;    case 0x88: by(); BSTORE(roplo); LOOP;    case 0x89: wd(); WSTORE(rop); LOOP;    case 0x8A: by(); *rapc = eoplo; LOOP;    case 0x8B: wd(); *rapw = eop; LOOP;    case 0x8C: wd();	switch(ra) {	    case W00: WSTORE(es); LOOP;	    case W01: WSTORE(cs); LOOP;	    case W02: WSTORE(ss); LOOP;	    case W03: WSTORE(ds); LOOP;	    default:  spare(t);	}    case 0x8D: wd(); *rapw = ea; LOOP;    case 0x8E: wd();	switch(ra) {		/* this opcode splits on reg field (in ra) */	    case W00: es=eop; LOOP;	    case W01: CS(eop); LOOP;	    case W02: ss=eop; LOOP;	    case W03: ds=eop; LOOP;	    default:  spare(t);	}    case 0x8F: wd(); POP(t); WSTORE(t); LOOP;	/* some spares treated as POP */    case 0x90: LOOP;    case 0x91: t= ax; ax= cx; cx=t; LOOP;    case 0x92: t= ax; ax= dx; dx=t; LOOP;    case 0x93: t= ax; ax= bx; bx=t; LOOP;    case 0x94: t= ax; ax= sp; sp=t; LOOP;    case 0x95: t= ax; ax= bp; bp=t; LOOP;    case 0x96: t= ax; ax= si; si=t; LOOP;    case 0x97: t= ax; ax= di; di=t; LOOP;    /*case 0x98: ah = (al < 0 ? 0xFF : 0); LOOP;*/    case 0x98: /*prut(ah,al);*/ ah = ( (al & 0X80) ? 0xFF : 0); LOOP;    case 0x99: dx = (ax < 0 ? 0xFFFF : 0); LOOP;    case 0x9A: IMMED; RMCONST; PUSH(cs); PUSH(PC); CS(rop);		    CSMEM(pcx,eop); if(traceflag) procdepth(1); LOOP;    case 0x9B: timer=1; if (!(intstruct[nextint].int_status&ENABLED)) pcx--;		LOOP;    case 0x9C: FLAGWD(eop); PUSH(eop); LOOP;    case 0x9D: POP(t); LOADFLAGS(t); LOOP;    case 0x9E: CC;t=ah; signf=(t>>7)&1; zerof=(t>>6)&1; cf=t&1; LOOP;    case 0x9F: CC; ah= (signf<<7) + (zerof<<6) + cf; LOOP;    case 0xA0: IMMED; MEM(xapc,ds,eop); al= *xapc; LOOP;    case 0xA1: IMMED; MEM(xapc,ds,eop); al= *xapc++; ah= *xapc++; LOOP;    case 0xA2: IMMED; MEM(xapc,ds,eop); *xapc=al; LOOP;    case 0xA3: IMMED; MEM(eapc,ds,eop); WSTORE(ax); LOOP;    case 0xA4: rep(0xA4); LOOP;    case 0xA5: rep(0xA5); LOOP;    case 0xA6: rep(0xA6); LOOP;    case 0xA7: rep(0xA7); LOOP;    case 0xA8: IMMED8; c=al&eoplo; BSZONLY(c); LOOP;    case 0xA9: IMMED; SZONLY(ax&eop); LOOP;    case 0xAA: rep(0xAA); LOOP;    case 0xAB: rep(0xAB); LOOP;    case 0xAC: rep(0xAC); LOOP;    case 0xAD: rep(0xAD); LOOP;    case 0xAE: rep(0xAE); LOOP;    case 0xAF: rep(0xAF); LOOP;    case 0xB0: al= *pcx++; LOOP;    case 0xB1: cl= *pcx++; LOOP;    case 0xB2: dl= *pcx++; LOOP;    case 0xB3: bl= *pcx++; LOOP;    case 0xB4: ah= *pcx++; LOOP;    case 0xB5: ch= *pcx++; LOOP;    case 0xB6: dh= *pcx++; LOOP;    case 0xB7: bh= *pcx++; LOOP;    case 0xB8: al= *pcx++; ah= *pcx++; LOOP;    case 0xB9: cl= *pcx++; ch= *pcx++; LOOP;    case 0xBA: dl= *pcx++; dh= *pcx++; LOOP;    case 0xBB: bl= *pcx++; bh= *pcx++; LOOP;    case 0xBC: IMMED; sp = eop; LOOP;    case 0xBD: IMMED; bp = eop; LOOP;    case 0xBE: IMMED; si = eop; LOOP;    case 0xBF: IMMED; di = eop; LOOP;    case 0xC0:

⌨️ 快捷键说明

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