123242Smckusick /* 229309Smckusick * Copyright (c) 1982, 1986 Regents of the University of California. 323242Smckusick * All rights reserved. The Berkeley software License Agreement 423242Smckusick * specifies the terms and conditions for redistribution. 523242Smckusick * 6*30770Skarels * @(#)srt0.c 7.3 (Berkeley) 04/02/87 723242Smckusick */ 8326Sbill 99186Ssam #include "../vax/mtpr.h" 103349Swnj #define LOCORE 119186Ssam #include "../vax/cpu.h" 123263Swnj 131914Swnj /* 141914Swnj * Startup code for standalone system 151914Swnj * Non-relocating version -- for programs which are loaded by boot 1625442Skarels * Relocating version for boot* 171914Swnj */ 18326Sbill 193349Swnj .globl _end 201757Sbill .globl _edata 21326Sbill .globl _main 22326Sbill .globl __rtt 233263Swnj .globl _configure 243349Swnj .globl _cpu 253349Swnj .globl _openfirst 26*30770Skarels .globl _boothowto 27*30770Skarels .globl _bootdev 28326Sbill 29326Sbill .set HIGH,31 # mask for total disable 30326Sbill 312438Swnj entry: .globl entry 32326Sbill .word 0x0 33326Sbill mtpr $HIGH,$IPL # just in case 343349Swnj #ifdef REL 353349Swnj movl $RELOC,sp 363349Swnj #else 373349Swnj movl $RELOC-0x2400,sp 383349Swnj #endif 392438Swnj start: 403349Swnj movl aedata,r0 41411Sbill clr: 42411Sbill clrl (r0)+ 43411Sbill cmpl r0,sp 44411Sbill jlss clr 453349Swnj #ifdef REL 4612366Ssam movc3 aedata,*$0,(sp) 4712366Ssam /* 4812366Ssam * Reclear bss segment separately from text and data 4912366Ssam * since movc3 can't move more than 64K bytes 5012366Ssam */ 5112366Ssam dclr: 5212366Ssam clrl (r3)+ 5312366Ssam cmpl r3,$_end 5412366Ssam jlss dclr 5512366Ssam /* this loop shouldn't be necessary, but is when booting from an ra81 */ 5612366Ssam xclr: 5712366Ssam clrl (r3)+ 5812366Ssam cmpl r3,$0x100000 5912366Ssam jlss xclr 603349Swnj jmp *abegin 613349Swnj begin: 623349Swnj #endif 63*30770Skarels movl r11,_boothowto 64*30770Skarels movl r10,_bootdev 65*30770Skarels again: 663349Swnj mtpr $0,$SCBB 673263Swnj calls $0,_configure 683349Swnj movl $1,_openfirst 69326Sbill calls $0,_main 70*30770Skarels #ifdef REL 71*30770Skarels jmp again 723349Swnj #else 733349Swnj ret 743349Swnj #endif 75326Sbill 763349Swnj .data 773349Swnj #ifdef REL 783349Swnj abegin: .long begin 793349Swnj aedata: .long _edata-RELOC 803349Swnj #else 813349Swnj aedata: .long _edata 823349Swnj #endif 83*30770Skarels _bootdev: .long 0 84*30770Skarels _boothowto: .long 0 85*30770Skarels .text 863349Swnj 87326Sbill __rtt: 88326Sbill .word 0x0 8925442Skarels #ifdef REL 9025442Skarels halt 9125442Skarels #else 92326Sbill jmp start 9325442Skarels #endif 943349Swnj 9530547Skarels .globl _badaddr 9630547Skarels _badaddr: 973349Swnj .word 0 983349Swnj movl $1,r0 993349Swnj movl 4(ap),r3 10030547Skarels movl 8(ap),r4 1013349Swnj movl $4,r2 1023349Swnj movab 9f,(r2) 10330547Skarels bbc $0,r4,1f; tstb (r3) 10430547Skarels 1: bbc $1,r4,1f; tstw (r3) 10530547Skarels 1: bbc $2,r4,1f; tstl (r3) 1063349Swnj 1: clrl r0 # made it w/o machine checks 1073349Swnj 2: movl $4,r2 1083349Swnj clrl (r2) 1093349Swnj ret 1103349Swnj .align 2 1113349Swnj 9: 1123349Swnj casel _cpu,$1,$VAX_MAX 1133349Swnj 0: 1143349Swnj .word 8f-0b # 1 is 780 1153349Swnj .word 5f-0b # 2 is 750 1167446Sroot .word 5f-0b # 3 is 730 11724153Sbloom .word 6f-0b # 4 is 8600 1183349Swnj 5: 1193349Swnj mtpr $0xf,$MCESR 1203349Swnj brb 1f 12124153Sbloom 6: 12224153Sbloom mtpr $0,$EHSR 12324153Sbloom brb 1f 1243349Swnj 8: 1253349Swnj mtpr $0,$SBIFS 1263349Swnj 1: 1273349Swnj addl2 (sp)+,sp # discard mchchk trash 1283349Swnj movab 2b,(sp) 1293349Swnj rei 130