|
|
1.1 ! root 1: # ! 2: # Copyright (c) 1979 Regents of the University of California ! 3: # ! 4: # char sccsid[] = "@(#)00case.h 4.1 10/10/80"; ! 5: # ! 6: # Berkeley Pascal Assembler Kernel ! 7: # ! 8: .globl _interpret #normal interpreter entry point ! 9: # ! 10: # register definitions ! 11: # ! 12: # registers R0 - R6 are for scratch use ! 13: # ! 14: .set lino, r11 ! 15: .set lc, r10 ! 16: .set dp, r9 ! 17: .set loop, r8 ! 18: .set buf, r7 ! 19: # ! 20: # Global constants ! 21: # ! 22: .set R2,0x004 #register fields in call mask ! 23: .set R3,0x008 ! 24: .set R4,0x010 ! 25: .set R5,0x020 ! 26: .set R6,0x040 ! 27: .set R7,0x080 ! 28: .set R8,0x100 ! 29: .set R9,0x200 ! 30: .set R10,0x400 ! 31: .set R11,0x800 ! 32: .set SIGINT,2 #interrupt signal ! 33: .set SIGFPE,8 #arithmetic exception signal ! 34: .set SIGSEGV,11 #segmentation violation ! 35: .set MASK,6 #offset of save mask in call stack ! 36: .set FP,12 #offset of "fp" in call stack ! 37: .set PC,16 #offset of "pc" in call stack ! 38: .set REGS,20 #beginning of saved registers in call stack ! 39: .set O_DATE,0345 #DATE opcode number ! 40: .set O_TIME,0346 #TIME opcode number ! 41: .set tempsize,-1024 #maximum required temporary stack space ! 42: # ! 43: # program variables ! 44: # ! 45: .globl _display #runtime display ! 46: .globl _file #current file name ! 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: .globl __sobuf #standard output buffer ! 60: # ! 61: # system subroutines ! 62: # ! 63: .globl _signal ! 64: .globl _time ! 65: .globl _times ! 66: # ! 67: # system math routines ! 68: # ! 69: .globl _atan ! 70: .globl _cos ! 71: .globl _exp ! 72: .globl _log ! 73: .globl _sin ! 74: .globl _sqrt ! 75: .globl _srand ! 76: .globl _rand ! 77: # ! 78: # pascal specific subroutines ! 79: # ! 80: .globl _error #error message routine ! 81: .globl _palloc #heap allocator ! 82: .globl _pfree ! 83: .globl _cttot #set constructor ! 84: .globl _inct #set inclusion ! 85: .globl _pdattim #getting date, time info ! 86: .globl _perror #process pxp errors ! 87: # ! 88: # initializing the interpreter ! 89: # ! 90: _interpret: ! 91: .word 0xffc #register save mask ! 92: moval iloop,r8 ! 93: tstl 8(ap) #check for profiling ! 94: beql l0050 ! 95: moval ploop,r8 #set profiling request ! 96: l0050: ! 97: callg *4(ap),l0051 #set ap to base of program ! 98: ret ! 99: l0051: ! 100: .word 0 ! 101: bispsw $0xe0 #enable overflow traps ! 102: movl ap,r10 #program start address ! 103: moval _display,r9 ! 104: moval -4(sp),(r9) ! 105: pushal stderr #set up global file variables ! 106: movl sp,stderr+FLEV ! 107: movl _llimit,stderr+LLIMIT ! 108: calls $0,_unit #init active file ! 109: pushal stdout ! 110: movl sp,stdout+FLEV ! 111: movl _llimit,stdout+LLIMIT ! 112: pushal stdin ! 113: movl sp,stdin+FLEV ! 114: moval stdin,_fchain ! 115: jmp (r8) #begin interpreter ! 116: # ! 117: # main interpreter loop ! 118: # the instruction 'jmp (loop)' ! 119: # transfers here ! 120: # ! 121: ploop: ! 122: movzbl (r10),r0 ! 123: incl _profcnts[r0] ! 124: iloop: ! 125: caseb (r10)+,$0,$255 ! 126: optab:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.