|
|
1.1 ! root 1: .asciz "@(#)reset.s 34.1 10/3/80" ! 2: # C library -- reset, setexit ! 3: # reset(x) ! 4: # will generate a "return" from ! 5: # the last call to ! 6: # setexit() ! 7: # by restoring r6 - r12, ap, fp ! 8: # and doing a return. ! 9: # The returned value is x; on the original ! 10: # call the returned value is 0. ! 11: # ! 12: # useful for going back to the main loop ! 13: # after a horrible error in a lowlevel ! 14: # routine. ! 15: # Changed by M. Marcus (4/4/80) to chain saved frames. Should be rewritten ! 16: # to only use the stack, avoiding need for resexit and getexit. ! 17: # Setexit works as before, but getexit adds pointer ! 18: # to the saved block when it pushes saved state onto stack. ! 19: # resexit restores this link by moving back extra word. ! 20: # getexit and setexit are to be thought of as an (almost) unitary action. ! 21: .globl _setexit ! 22: .globl _getexit ! 23: .globl _reset ! 24: .globl _resexit ! 25: .globl _setsav ! 26: .globl _exitlnk ! 27: .globl _svkludg ! 28: ! 29: _setexit: ! 30: .word 0x0000 ! 31: movab _setsav,r0 ! 32: movq r6,(r0)+ ! 33: movq r8,(r0)+ ! 34: movq r10,(r0)+ ! 35: movq 8(fp),(r0)+ # ap, fp ! 36: movab 4(ap),(r0)+ # sp ! 37: movl 16(fp),(r0) # pc ! 38: clrl r0 ! 39: ret ! 40: ! 41: _reset: ! 42: .word 0x0000 ! 43: movl 4(ap),r0 # returned value ! 44: movab _setsav,r1 ! 45: movq (r1)+,r6 ! 46: movq (r1)+,r8 ! 47: movq (r1)+,r10 ! 48: movq (r1)+,r12 ! 49: movl (r1)+,sp ! 50: jmp *(r1) ! 51: ! 52: _resexit: ! 53: .word 0x0000 ! 54: movc3 $44,*4(ap),_setsav ! 55: ret ! 56: _svkludg: ! 57: movl (sp)+,out ! 58: movq r0,myregs ! 59: movq r2,myregs+8 ! 60: movq r4,myregs+16 ! 61: subl2 $44,sp ! 62: movc3 $44,_setsav,(sp) ! 63: movq myregs,r0 ! 64: movq myregs+8,r2 ! 65: movq myregs+16,r4 ! 66: jmp *out ! 67: ! 68: _getexit: ! 69: .word 0x0000 ! 70: movc3 $44,_setsav,*4(ap) ! 71: movl 4(ap), _exitlnk ! 72: ret ! 73: ! 74: #exitlnk is to be thought of as the last word of the setsav area (11 longs long) ! 75: .data ! 76: _setsav:.space 10*4 ! 77: _exitlnk:.space 4 ! 78: out: .space 4 ! 79: myregs: .space 6*4 ! 80:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.