|
|
1.1 ! root 1: ! 2: #include "definitions" ! 3: ! 4: /* I/O ROUTINES TO CPU2 CONSOLE */ ! 5: ! 6: #define MAXC 1000 /* MAX 1000 chars per line */ ! 7: #define OUTADR 0x20000 /* Address of output buffer */ ! 8: #define INADR 0x20100 /* Address of input buffer */ ! 9: ! 10: long ocnt = 0; /* Next location in output buffer */ ! 11: long icnt = 0; /* Next location in input buffer */ ! 12: extern long savvec7; ! 13: ! 14: writec(c) /* VERSION to run on the simmulator */ ! 15: char c; ! 16: { ! 17: putchar(c); ! 18: } ! 19: ! 20: readc(c) ! 21: char *c; ! 22: { char *cptr; ! 23: ! 24: asm("mfpr $MME,_savvec7"); ! 25: savvec7 = savvec7 & 0x1; ! 26: asm("mtpr $0,$MME"); /* Disable MME */ ! 27: cptr = (char *)(INADR+ icnt++); ! 28: *c = *cptr; ! 29: asm("mtpr _savvec7,$MME"); /* Restore MME */ ! 30: } ! 31: ! 32: writes(s) ! 33: char *s; ! 34: { ! 35: putstr(s); ! 36: } ! 37: ! 38: /* This function read a string of characters. ! 39: calling sequence : nochar = reads(s); ! 40: input argument : char *s; ! 41: return value : no. of char read; excluding NULL or CR. ! 42: */ ! 43: reads(s) ! 44: char *s; ! 45: { char *str; ! 46: int ix; ! 47: ! 48: str = s; ! 49: for(ix=0;ix<ALINE;ix++) ! 50: { ! 51: readc(str); ! 52: if ((*str==NULL)||(*str==CR)) ! 53: { *str = NULL; ! 54: break; ! 55: } ! 56: else str++; ! 57: } ! 58: icnt = 0; /* For simulator only */ ! 59: ! 60: return(ix); ! 61: } ! 62: /* This function read a string of HEX digit and ! 63: convert it to integer value. ! 64: calling sequence : stat = readh(ix); ! 65: input parameter : long *ix; ! 66: return value : (stat < 0) if error else (stat = 0); ! 67: */ ! 68: ! 69: /* ! 70: readh(ix) ! 71: long *ix; ! 72: { char line[ALINE], *getnum(), *del; ! 73: int nochar; ! 74: ! 75: if ( (nochar = reads(line)) > 8 ) return(-1); ! 76: if ( (del = getnum(line,ix,del,HEX)) < 0 ) return(-1); ! 77: else return(0); ! 78: } ! 79: ! 80: */ ! 81: ! 82: ! 83: ! 84: writeh(ix) /* 32 bits HEX */ ! 85: long ix; ! 86: { long iy, temp, mask; ! 87: int count; ! 88: char c; ! 89: ! 90: iy=1; count = 28; ! 91: mask = 0xf0000000; ! 92: while (mask) ! 93: { ! 94: c = ( (ix&mask) >> count )&0xf; ! 95: count -= 4; ! 96: mask = mask >> 4; ! 97: if (iy) ! 98: { mask = 0xf000000; ! 99: iy=0; ! 100: } ! 101: if ((c>=0)&&(c<=9)) c=c+'0'; ! 102: else c=c+'7'; ! 103: writec(c); ! 104: } ! 105: } ! 106: ! 107: /* This function read a string of DEC digit and ! 108: convert it to integer value. ! 109: calling sequence : stat = readd(ix); ! 110: input parameter : long *ix; ! 111: return value : (stat < 0) if error else (stat = 0); ! 112: */ ! 113: ! 114: /* ! 115: readd(ix) ! 116: long *ix; ! 117: { char line[ALINE], *getnum(), *del; ! 118: int nochar; ! 119: ! 120: if ( (nochar = reads(line)) > 11 ) return(-1); ! 121: if ( (del = getnum(line,ix,del,DEC)) < 0 ) return(-1); ! 122: else return(0); ! 123: } ! 124: */ ! 125: ! 126: ! 127: writed(ix) /* 32 bits DECIMAL */ ! 128: long ix; ! 129: { char c; ! 130: long div; ! 131: float divi; ! 132: int lead0; ! 133: ! 134: /* ! 135: if (ix<0) ! 136: { writes("********"); ! 137: return(0); } ! 138: lead0 = 1; ! 139: divi = 1000000000; ! 140: div = divi; ! 141: while (div) ! 142: { ! 143: c = (ix/div)+'0'; ! 144: ix = ix%div; ! 145: divi = divi/10; ! 146: div = divi; ! 147: if ((c=='0')&&(lead0)) c=SPACE; ! 148: else lead0 = 0; ! 149: writec(c); ! 150: } ! 151: */ ! 152: ! 153: } ! 154:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.