|
|
1.1 ! root 1: # ! 2: # 34err.s ! 3: # ! 4: .set ECHR,1 ! 5: .set ESYSTEM,2 ! 6: .set EBUILTIN,3 ! 7: .set EHALT,4 ! 8: .set ENILPTR,5 ! 9: .set EPASTEOF,6 ! 10: .set ESQRT,7 ! 11: .set ESTKNEMP,8 ! 12: .set ESUBSCR,9 ! 13: .set EREFINAF,10 ! 14: .set EWRITE,11 ! 15: .set ENAMESIZE,12 ! 16: .set ELN,13 ! 17: .set EBADOP,14 ! 18: .set EBADINUM,15 ! 19: .set EGOTO,16 ! 20: .set ECASE,17 ! 21: .set ESEEK,18 ! 22: .set ECREATE,19 ! 23: .set EOUTOFMEM,20 ! 24: .set ECTTOT,21 ! 25: .set ESTLIM,22 ! 26: .set ESTKOVFLO,23 ! 27: .set EBADFNUM,24 ! 28: .set EREMOVE,25 ! 29: .set ECLOSE,26 ! 30: .set EOPEN,27 ! 31: .set EARGV,28 ! 32: .set EPACK,29 ! 33: .set EUNPACK,30 ! 34: .set ERANGE,31 ! 35: .set EASRT,32 ! 36: .set EREADIT,33 ! 37: .set EWRITEIT,34 ! 38: .set EINTR,35 ! 39: .set EASSIGN,36 ! 40: .set EFIXADD,37 ! 41: .set EFLTADD,38 ! 42: .set EFIXSUB,39 ! 43: .set EFLTSUB,40 ! 44: .set EFIXMUL,41 ! 45: .set EFLTMUL,42 ! 46: .set EFIXDIV,43 ! 47: .set EFLTDIV,44 ! 48: .set EMODDIV,45 ! 49: .set EFIXNEG,46 ! 50: .set ELLIMIT,47 ! 51: .set EFRAMESIZE,48 ! 52: .set ETRASHHEAP,49 ! 53: # ! 54: # Fielding interrupts and processing errors ! 55: # ! 56: # Process interpreter detected errors ! 57: # ! 58: error: ! 59: movzwl _perrno,-(sp) ! 60: calls $1,_error ! 61: jmp (r8) ! 62: ! 63: _endinterpret: ! 64: .byte 'e,'n,'d, 0 ! 65: ! 66: # ! 67: # Keyboard interrupts ! 68: # ! 69: .align 1 ! 70: .globl _intr ! 71: _intr: ! 72: .word 0 ! 73: pushal _intr #reset interrupt signal ! 74: pushl $SIGINT ! 75: calls $2,_signal ! 76: pushl $EINTR ! 77: calls $1,_error ! 78: ret ! 79: # ! 80: # Segmentation Violations => No more memory available for the stack ! 81: # ! 82: .align 1 ! 83: .globl _memsize ! 84: _memsize: ! 85: .word 0 ! 86: pushl $ESTKOVFLO ! 87: calls $1,_error ! 88: ret ! 89: # ! 90: # Process computational errors ! 91: # ! 92: .align 1 ! 93: .globl _except ! 94: _except: ! 95: .word 0 ! 96: pushal _except #reset signal ! 97: pushl $SIGFPE ! 98: calls $2,_signal ! 99: movl PC(fp),r0 #r0 has PC at point following error ! 100: moval errtbl-4,r1 #r1 points to error offset table ! 101: l3404: ! 102: addl2 $4,r1 #determine cause of error ! 103: cmpl r0,(r1)+ ! 104: blssu l3405 #not in table => system error ! 105: cmpl r0,(r1)+ ! 106: bgtru l3404 ! 107: movzwl (r1),-(sp) #select error message ! 108: brb l3406 ! 109: l3405: ! 110: pushl $ESYSTEM ! 111: l3406: ! 112: calls $1,_error ! 113: ret ! 114: # ! 115: # Table of offsets and their associated errors ! 116: # ! 117: .align 1 ! 118: errtbl: ! 119: .long _AS2, _OFF, EASSIGN ! 120: .long _INX2, _NIL, ESUBSCR ! 121: .long _ADD2, _ADD28, EFIXADD ! 122: .long _ADD28, _SUB2, EFLTADD ! 123: .long _SUB2, _SUB28, EFIXSUB ! 124: .long _SUB28, _SQR2, EFLTSUB ! 125: .long _SQR2, _MUL28, EFIXMUL ! 126: .long _MUL28, _DIV2, EFLTMUL ! 127: .long _DIV2, _MOD2, EFIXDIV ! 128: .long _MOD2, _ABS2, EMODDIV ! 129: .long _ABS2, _ABS8, EFIXNEG ! 130: .long _DVD2, _IND1, EFLTDIV ! 131: .long _RANG2, _CASE1OP, ERANGE ! 132: .long _STOI, _UNDEF, EBUILTIN ! 133: .long _PACK, _UNPACK, EPACK ! 134: .long _UNPACK, _GET, EUNPACK ! 135: .long 0xffffffff ! 136: # ! 137: # recover values of dp and lino from the stack ! 138: # ! 139: .globl _fetchdp ! 140: ! 141: _fetchdp: ! 142: .word R2|R3|R4|R5|R6|R7|R8|R9|R10|R11 ! 143: pushl fp #sift through the stack to get the ! 144: movl sp,oldsp # values of dp and lino ! 145: l3401: ! 146: bicw3 $0xf000,MASK(fp),mask #register save mask ! 147: moval REGS(fp),sp #point to saved registers ! 148: popr mask #pop them ! 149: cmpl PC(fp),$_interpret #check for interpreter frame ! 150: blss l3402 #not found ! 151: cmpl PC(fp),$_endinterpret #check for end of interpreter ! 152: blss l3403 #found ! 153: l3402: ! 154: movl FP(fp),fp #get next frames registers ! 155: jbr l3401 ! 156: l3403: ! 157: movl oldsp,sp #restore current frame ! 158: movl (sp)+,fp ! 159: movl r9,*4(ap) #return dp ! 160: movl r11,*8(ap) #return lino ! 161: ret ! 162: .data ! 163: oldsp: .space 4 #old value of sp ! 164: mask: .space 2 #register pop mask ! 165: .text
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.