|
|
1.1 ! root 1: /* halt.s -- halt */ ! 2: ! 3: #include <procreg.h> ! 4: #include <conf.h> ! 5: #include <qbus.h> ! 6: #include <mach.h> ! 7: ! 8: /* declare global for use after uploading, with pm */ ! 9: .data ! 10: .comm _pslsave, 4 ! 11: .comm _spsave, 4 ! 12: ! 13: /*------------------------------------------------------------------------ ! 14: * halt -- simulate halt on VAX (really halt on UVAXII) ! 15: *------------------------------------------------------------------------ ! 16: */ ! 17: .text ! 18: .globl __halt ! 19: __halt: ! 20: /* no entry mask--not called */ ! 21: movpsl _pslsave /* save old psl for pm after upload */ ! 22: mtpr $DISABLE, $IPL /* disable interrupts */ ! 23: ! 24: mfpr $SID, r1 /* get system id register value */ ! 25: bicl2 $SYSTYPE, r1 /* mask off system id */ ! 26: cmpl r1, $UVAXIISID /* compare with UVAX II sid reg. value */ ! 27: jneq uvaxi ! 28: movw $QMHALT,*$QMCPMBX/* raise console program mailbox flag */ ! 29: halt /* can halt if UVAXII */ ! 30: jmp savepc ! 31: ! 32: uvaxi: movl sp, _spsave ! 33: movl $kernstk, sp /* give stack memory for kprintf call */ ! 34: pushab haltmesg ! 35: calls $1, _kprintf ! 36: movl _spsave, sp /* restore stack pointer */ ! 37: forever: ! 38: jbr forever /* simulate halt by tight loop -- */ ! 39: /* if halted, the cpu may try to reboot */ ! 40: savepc: movl _pslsave, -(sp) /* in case user moves PC past loop and */ ! 41: movab unhalt, -(sp) /* issues console "C" */ ! 42: rei /* load old psl */ ! 43: unhalt: ! 44: ret ! 45: ! 46: haltmesg: ! 47: .ascii "\nCpu executing tight loop, may be halted at console\n\0"
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.