|
|
1.1 ! root 1: # 00case.s ! 2: # ! 3: # Berkeley Pascal Assembler Kernel ! 4: # ! 5: .globl _interpret #normal interpreter entry point ! 6: # ! 7: # register definitions ! 8: # ! 9: # registers R0 - R6 are for scratch use ! 10: # ! 11: .set lino, r11 ! 12: .set lc, r10 ! 13: .set dp, r9 ! 14: .set loop, r8 ! 15: .set buf, r7 ! 16: # ! 17: # Global constants ! 18: # ! 19: .set R2,0x004 #register fields in call mask ! 20: .set R3,0x008 ! 21: .set R4,0x010 ! 22: .set R5,0x020 ! 23: .set R6,0x040 ! 24: .set R7,0x080 ! 25: .set R8,0x100 ! 26: .set R9,0x200 ! 27: .set R10,0x400 ! 28: .set R11,0x800 ! 29: .set SIGINT,2 #interrupt signal ! 30: .set SIGFPE,8 #arithmetic exception signal ! 31: .set SIGSEGV,11 #segmentation violation ! 32: .set MASK,6 #offset of save mask in call stack ! 33: .set FP,12 #offset of "fp" in call stack ! 34: .set PC,16 #offset of "pc" in call stack ! 35: .set REGS,20 #beginning of saved registers in call stack ! 36: .set O_DATE,0346 #DATE opcode number ! 37: .set O_TIME,0347 #TIME opcode number ! 38: .set tempsize,-256 #maximum required temporary stack space ! 39: .set HZ,60 #interrupt frequency ! 40: # ! 41: # program variables ! 42: # ! 43: .globl _display #runtime display ! 44: .globl _addrsze #size of addresses ! 45: .globl _file #current file name ! 46: .globl _bufopt #standard output buffering option ! 47: .globl _fchain #head of active file chain ! 48: .globl _llimit #max number of output lines ! 49: .globl _stcnt #number of stmts executed ! 50: .globl _stlim #max number of stmts to exec ! 51: .globl _nodump #1 => no postmortum dump ! 52: .globl _perrno #interpreter error number ! 53: .globl _profcnts #PX profile execution counts ! 54: .globl _pxpbuf #ptr to pxp buffer ! 55: .globl _pxpsize #size of pxp buffer ! 56: .globl _argc #number of passed args ! 57: .globl _argv #values of passed args ! 58: .globl __iob #base of I/O buffer block ! 59: # ! 60: # system subroutines ! 61: # ! 62: .globl _signal ! 63: .globl _time ! 64: .globl _times ! 65: # ! 66: # system math routines ! 67: # ! 68: .globl _atan ! 69: .globl _cos ! 70: .globl _exp ! 71: .globl _log ! 72: .globl _sin ! 73: .globl _sqrt ! 74: .globl _srand ! 75: .globl _rand ! 76: # ! 77: # pascal specific subroutines ! 78: # ! 79: .globl _error #error message routine ! 80: .globl _palloc #heap allocator ! 81: .globl _pfree ! 82: .globl _pcttot #set constructor ! 83: .globl _pdattim #getting date, time info ! 84: .globl _perror #process pxp errors ! 85: # ! 86: # initializing the interpreter ! 87: # ! 88: _interpret: ! 89: .word 0xffc #register save mask ! 90: moval iloop,r8 ! 91: tstl 8(ap) #check for profiling ! 92: beql l0050 ! 93: moval ploop,r8 #set profiling request ! 94: l0050: ! 95: callg *4(ap),l0051 #set ap to base of program ! 96: ret ! 97: l0051: ! 98: .word 0 ! 99: bispsw $0xe0 #enable overflow traps ! 100: movl ap,r10 #program start address ! 101: moval _display,r9 ! 102: moval -4(sp),(r9) ! 103: pushal stderr #set up global file variables ! 104: movl sp,stderr+FLEV ! 105: movl _llimit,stderr+LLIMIT ! 106: pushal stdout ! 107: movl sp,stdout+FLEV ! 108: movl _llimit,stdout+LLIMIT ! 109: pushal stdin ! 110: movl sp,stdin+FLEV ! 111: moval stdin,_fchain ! 112: jmp (r8) #begin interpreter ! 113: # ! 114: # main interpreter loop ! 115: # the instruction 'jmp (loop)' ! 116: # transfers here ! 117: # ! 118: ploop: ! 119: movzbl (r10),r0 ! 120: incl _profcnts[r0] ! 121: iloop: ! 122: caseb (r10)+,$0,$255 ! 123: optab: ! 124: .word _ABORT-optab ! 125: .word _HALT-optab ! 126: .word _TRA4-optab ! 127: .word _NODUMP-optab ! 128: .word _BEG-optab ! 129: .word _END-optab ! 130: .word _CALL-optab ! 131: .word _TRACNT-optab ! 132: .word _PUSH-optab ! 133: .word _POP-optab ! 134: .word _INX4-optab ! 135: .word _SDUP-optab ! 136: .word _IF-optab ! 137: .word _TRA-optab ! 138: .word _LINO-optab ! 139: .word _GOTO-optab ! 140: .word _REL2-optab ! 141: .word _REL4-optab ! 142: .word _REL24-optab ! 143: .word _REL42-optab ! 144: .word _REL8-optab ! 145: .word _RELG-optab ! 146: .word _RELT-optab ! 147: .word badop-optab ! 148: .word _REL28-optab ! 149: .word _REL48-optab ! 150: .word _REL82-optab ! 151: .word _REL84-optab ! 152: .word _AND-optab ! 153: .word _OR-optab ! 154: .word _NOT-optab ! 155: .word badop-optab ! 156: .word _AS2-optab ! 157: .word _AS4-optab ! 158: .word _AS24-optab ! 159: .word _AS42-optab ! 160: .word _AS8-optab ! 161: .word _INX2P2-optab ! 162: .word _INX4P2-optab ! 163: .word _AS-optab ! 164: .word _AS21-optab ! 165: .word _AS41-optab ! 166: .word _AS28-optab ! 167: .word _AS48-optab ! 168: .word _OFF-optab ! 169: .word _INX2-optab ! 170: .word _NIL-optab ! 171: .word _LV-optab ! 172: .word _ADD2-optab ! 173: .word _ADD4-optab ! 174: .word _ADD24-optab ! 175: .word _ADD42-optab ! 176: .word _ADD28-optab ! 177: .word _ADD48-optab ! 178: .word _ADD82-optab ! 179: .word _ADD84-optab ! 180: .word _SUB2-optab ! 181: .word _SUB4-optab ! 182: .word _SUB24-optab ! 183: .word _SUB42-optab ! 184: .word _SUB28-optab ! 185: .word _SUB48-optab ! 186: .word _SUB82-optab ! 187: .word _SUB84-optab ! 188: .word _MUL2-optab ! 189: .word _MUL4-optab ! 190: .word _MUL24-optab ! 191: .word _MUL42-optab ! 192: .word _MUL28-optab ! 193: .word _MUL48-optab ! 194: .word _MUL82-optab ! 195: .word _MUL84-optab ! 196: .word _ABS2-optab ! 197: .word _ABS4-optab ! 198: .word _ABS8-optab ! 199: .word badop-optab ! 200: .word _ADD8-optab ! 201: .word _SUB8-optab ! 202: .word _MUL8-optab ! 203: .word _DVD8-optab ! 204: .word _DIV2-optab ! 205: .word _DIV4-optab ! 206: .word _DIV24-optab ! 207: .word _DIV42-optab ! 208: .word badop-optab ! 209: .word badop-optab ! 210: .word badop-optab ! 211: .word badop-optab ! 212: .word _MOD2-optab ! 213: .word _MOD4-optab ! 214: .word _MOD24-optab ! 215: .word _MOD42-optab ! 216: .word badop-optab ! 217: .word badop-optab ! 218: .word badop-optab ! 219: .word badop-optab ! 220: .word _NEG2-optab ! 221: .word _NEG4-optab ! 222: .word _NEG8-optab ! 223: .word badop-optab ! 224: .word badop-optab ! 225: .word badop-optab ! 226: .word badop-optab ! 227: .word badop-optab ! 228: .word badop-optab ! 229: .word badop-optab ! 230: .word badop-optab ! 231: .word badop-optab ! 232: .word badop-optab ! 233: .word badop-optab ! 234: .word badop-optab ! 235: .word badop-optab ! 236: .word _DVD2-optab ! 237: .word _DVD4-optab ! 238: .word _DVD24-optab ! 239: .word _DVD42-optab ! 240: .word _DVD28-optab ! 241: .word _DVD48-optab ! 242: .word _DVD82-optab ! 243: .word _DVD84-optab ! 244: .word _RV1-optab ! 245: .word _RV2-optab ! 246: .word _RV4-optab ! 247: .word _RV8-optab ! 248: .word _IND1-optab ! 249: .word _IND2-optab ! 250: .word _IND4-optab ! 251: .word _IND8-optab ! 252: .word _CON1-optab ! 253: .word _CON2-optab ! 254: .word _CON4-optab ! 255: .word _CON8-optab ! 256: .word _RV-optab ! 257: .word _IND-optab ! 258: .word _CON-optab ! 259: .word badop-optab ! 260: .word _RANG2-optab ! 261: .word _RANG42-optab ! 262: .word _RSNG2-optab ! 263: .word _RSNG42-optab ! 264: .word _RANG4-optab ! 265: .word _RANG24-optab ! 266: .word _RSNG4-optab ! 267: .word _RSNG24-optab ! 268: .word _WRITEF-optab ! 269: .word _WRITEC-optab ! 270: .word _WRITES-optab ! 271: .word _WRITEB-optab ! 272: .word badop-optab ! 273: .word badop-optab ! 274: .word badop-optab ! 275: .word badop-optab ! 276: .word _BLKBEG-optab ! 277: .word _PUSH4-optab ! 278: .word _POP4-optab ! 279: .word badop-optab ! 280: .word badop-optab ! 281: .word badop-optab ! 282: .word badop-optab ! 283: .word badop-optab ! 284: .word _CASE1OP-optab ! 285: .word _CASE2OP-optab ! 286: .word _CASE4OP-optab ! 287: .word _PXPBUF-optab ! 288: .word _COUNT-optab ! 289: .word badop-optab ! 290: .word badop-optab ! 291: .word badop-optab ! 292: .word _ADDT-optab ! 293: .word _SUBT-optab ! 294: .word _MULT-optab ! 295: .word _INCT-optab ! 296: .word _CTTOT-optab ! 297: .word _CARD-optab ! 298: .word _IN-optab ! 299: .word _ASRT-optab ! 300: .word _FOR1U-optab ! 301: .word _FOR2U-optab ! 302: .word _FOR4U-optab ! 303: .word _FOR1D-optab ! 304: .word _FOR2D-optab ! 305: .word _FOR4D-optab ! 306: .word _STLIM-optab ! 307: .word _SCLCK-optab ! 308: .word _STOI-optab ! 309: .word _STOD-optab ! 310: .word _ITOD-optab ! 311: .word _ITOS-optab ! 312: .word _BUFF-optab ! 313: .word _WCLCK-optab ! 314: .word _WRHEX2-optab ! 315: .word _WRHEX4-optab ! 316: .word _GET-optab ! 317: .word _PUT-optab ! 318: .word _MESSAGE-optab ! 319: .word _FNIL-optab ! 320: .word _EOF-optab ! 321: .word _EOLN-optab ! 322: .word _RESET-optab ! 323: .word _REWRITE-optab ! 324: .word _REMOVE-optab ! 325: .word _READ4-optab ! 326: .word _UNIT-optab ! 327: .word _READC-optab ! 328: .word _READ8-optab ! 329: .word _UNITINP-optab ! 330: .word _UNITOUT-optab ! 331: .word _READLN-optab ! 332: .word _WRIT2-optab ! 333: .word _WRIT4-optab ! 334: .word _WRITB-optab ! 335: .word _WRITC-optab ! 336: .word _WRIT8-optab ! 337: .word _WRITG-optab ! 338: .word _WRIT82-optab ! 339: .word _WRITLN-optab ! 340: .word _WROCT2-optab ! 341: .word _WROCT4-optab ! 342: .word _FLUSH-optab ! 343: .word _PACK-optab ! 344: .word _UNPACK-optab ! 345: .word _LLIMIT-optab ! 346: .word _ARGC-optab ! 347: .word _ARGV-optab ! 348: .word _CLCK-optab ! 349: .word _SEED-optab ! 350: .word _RANDOM-optab ! 351: .word _DISPOSE-optab ! 352: .word _NEW-optab ! 353: .word _EXPO-optab ! 354: .word _DATE-optab ! 355: .word _TIME-optab ! 356: .word _ATAN-optab ! 357: .word _COS-optab ! 358: .word _EXP-optab ! 359: .word _LN-optab ! 360: .word _SIN-optab ! 361: .word _SQRT-optab ! 362: .word _CHR2-optab ! 363: .word _CHR4-optab ! 364: .word _ODD2-optab ! 365: .word _ODD4-optab ! 366: .word _PRED2-optab ! 367: .word _PRED4-optab ! 368: .word _PRED24-optab ! 369: .word _SUCC2-optab ! 370: .word _SUCC4-optab ! 371: .word _SUCC24-optab ! 372: .word _DEFNAME-optab ! 373: .word _PAGE-optab ! 374: .word _UNDEF-optab ! 375: .word _SQR2-optab ! 376: .word _SQR4-optab ! 377: .word _SQR8-optab ! 378: .word _ROUND-optab ! 379: .word _TRUNC-optab ! 380: badop: ! 381: incl r10 ! 382: movw $EBADOP,_perrno ! 383: jbr error
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.