Annotation of Net2/arch/i386/stand/srt0.c, revision 1.1.1.1

1.1       root        1: /*-
                      2:  * Copyright (c) 1990 The Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * This code is derived from software contributed to Berkeley by
                      6:  * William Jolitz.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *     This product includes software developed by the University of
                     19:  *     California, Berkeley and its contributors.
                     20:  * 4. Neither the name of the University nor the names of its contributors
                     21:  *    may be used to endorse or promote products derived from this software
                     22:  *    without specific prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     25:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     26:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     27:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     28:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     29:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     30:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     31:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     32:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     33:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     34:  * SUCH DAMAGE.
                     35:  *
                     36:  *     @(#)srt0.c      5.3 (Berkeley) 4/28/91
                     37:  */
                     38: 
                     39: /*
                     40:  * Startup code for standalone system
                     41:  * Non-relocating version -- for programs which are loaded by boot
                     42:  * Relocating version for boot
                     43:  * Small relocating version for "micro" boot
                     44:  */
                     45: 
                     46:        .globl  _end
                     47:        .globl  _edata
                     48:        .globl  _main
                     49:        .globl  __rtt
                     50:        .globl  _exit
                     51:        .globl  _bootdev
                     52:        .globl  _cyloffset
                     53: 
                     54: #ifdef SMALL
                     55:        /* where the disklabel goes if we have one */
                     56:        .globl  _disklabel
                     57: _disklabel:
                     58:        .space 512
                     59: #endif
                     60: 
                     61: entry: .globl  entry
                     62:        .globl  start
                     63: 
                     64: #if    defined(REL) && !defined(SMALL)
                     65: 
                     66:        /* relocate program and enter at symbol "start" */
                     67: 
                     68:        #movl   $entry-RELOC,%esi       # from beginning of ram
                     69:        movl    $0,%esi
                     70:        #movl   $entry,%edi             # to relocated area
                     71:        movl    $ RELOC,%edi            # to relocated area
                     72:        # movl  $_edata-RELOC,%ecx      # this much
                     73:        movl    $64*1024,%ecx
                     74:        cld
                     75:        rep
                     76:        movsb
                     77:        # relocate program counter to relocation base
                     78:        pushl   $start
                     79:        ret
                     80: #endif
                     81: 
                     82: start:
                     83: 
                     84:        /* setup stack pointer */
                     85: 
                     86: #ifdef REL
                     87:        leal    4(%esp),%eax    /* ignore old pc */
                     88:        movl    $ RELOC-4*4,%esp
                     89:        /* copy down boot parameters */
                     90:        movl    %esp,%ebx
                     91:        pushl   $3*4
                     92:        pushl   %ebx
                     93:        pushl   %eax
                     94:        call    _bcopy
                     95:        movl    %ebx,%esp
                     96: #else
                     97:        /* save old stack state */
                     98:        movl    %esp,savearea
                     99:        movl    %ebp,savearea+4
                    100:        movl    $ RELOC-0x2400,%esp
                    101: #endif
                    102: 
                    103:        /* clear memory as needed */
                    104: 
                    105:        movl    %esp,%esi
                    106: #ifdef REL
                    107: 
                    108:        /*
                    109:         * Clear Bss and up to 64K heap
                    110:         */
                    111:        movl    $64*1024,%ebx
                    112:        movl    $_end,%eax      # should be movl $_end-_edata but ...
                    113:        subl    $_edata,%eax
                    114:        addl    %ebx,%eax
                    115:        pushl   %eax
                    116:        pushl   $_edata
                    117:        call    _bzero
                    118: 
                    119:        /*
                    120:         * Clear 64K of stack
                    121:         */
                    122:        movl    %esi,%eax
                    123:        subl    %ebx,%eax
                    124:        subl    $5*4,%ebx
                    125:        pushl   %ebx
                    126:        pushl   %eax
                    127:        call    _bzero
                    128: #else
                    129:        movl    $_edata,%edx
                    130:        movl    %esp,%eax
                    131:        subl    %edx,%eax
                    132:        pushl   %edx
                    133:        pushl   %esp
                    134:        call    _bzero
                    135: #endif
                    136:        movl    %esi,%esp
                    137: 
                    138:        pushl   $0
                    139:        popf
                    140: 
                    141: #ifndef        SMALL
                    142:        call    _kbdreset       /* resets keyboard and gatea20 brain damage */
                    143: #endif
                    144: 
                    145:        call    _main
                    146:        jmp     1f
                    147: 
                    148:        .data
                    149: _bootdev:      .long   0
                    150: _cyloffset:    .long   0
                    151: savearea:      .long   0,0     # sp & bp to return to
                    152:        .text
                    153: #ifndef        SMALL
                    154:        .globl _getchar
                    155: #endif
                    156:        .globl _wait
                    157: 
                    158: __rtt:
                    159: #ifndef        SMALL
                    160:        call    _getchar
                    161: #else
                    162: _exit:
                    163:        pushl   $1000000
                    164:        call    _wait
                    165:        popl    %eax
                    166: #endif
                    167:        movl    $-7,%eax
                    168:        jmp     1f
                    169: #ifndef        SMALL
                    170: _exit:
                    171:        call    _getchar
                    172: #endif
                    173:        movl    4(%esp),%eax
                    174: 1:
                    175: #ifdef REL
                    176: #ifndef SMALL
                    177:        call    _reset_cpu
                    178: #endif
                    179:        movw    $0x1234,%ax
                    180:        movw    %ax,0x472       # warm boot
                    181:        movl    $0,%esp         # segment violation
                    182:        ret
                    183: #else
                    184:        movl    savearea,%esp
                    185:        movl    savearea+4,%ebp
                    186:        ret
                    187: #endif
                    188: 
                    189:        .globl  _inb
                    190: _inb:  movl    4(%esp),%edx
                    191:        subl    %eax,%eax       # clr eax
                    192:        inb     %dx,%al
                    193:        ret
                    194: 
                    195:        .globl  _outb
                    196: _outb: movl    4(%esp),%edx
                    197:        movl    8(%esp),%eax
                    198:        outb    %al,%dx
                    199:        ret
                    200: 
                    201:        .globl ___udivsi3
                    202: ___udivsi3:
                    203:        movl 4(%esp),%eax
                    204:        xorl %edx,%edx
                    205:        divl 8(%esp)
                    206:        ret
                    207: 
                    208:        .globl ___divsi3
                    209: ___divsi3:
                    210:        movl 4(%esp),%eax
                    211:        xorl %edx,%edx
                    212:        cltd
                    213:        idivl 8(%esp)
                    214:        ret
                    215: 
                    216:        #
                    217:        # bzero (base,cnt)
                    218:        #
                    219: 
                    220:        .globl _bzero
                    221: _bzero:
                    222:        pushl   %edi
                    223:        movl    8(%esp),%edi
                    224:        movl    12(%esp),%ecx
                    225:        movb    $0x00,%al
                    226:        cld
                    227:        rep
                    228:        stosb
                    229:        popl    %edi
                    230:        ret
                    231: 
                    232:        #
                    233:        # bcopy (src,dst,cnt)
                    234:        # NOTE: does not (yet) handle overlapped copies
                    235:        #
                    236: 
                    237:        .globl  _bcopy
                    238: _bcopy:
                    239:        pushl   %esi
                    240:        pushl   %edi
                    241:        movl    12(%esp),%esi
                    242:        movl    16(%esp),%edi
                    243:        movl    20(%esp),%ecx
                    244:        cld
                    245:        rep
                    246:        movsb
                    247:        popl    %edi
                    248:        popl    %esi
                    249:        ret
                    250: 
                    251:        # insw(port,addr,cnt)
                    252:        .globl  _insw
                    253: _insw:
                    254:        pushl   %edi
                    255:        movw    8(%esp),%dx
                    256:        movl    12(%esp),%edi
                    257:        movl    16(%esp),%ecx
                    258:        cld
                    259:        nop
                    260:        .byte 0x66,0xf2,0x6d    # rep insw
                    261:        nop
                    262:        movl    %edi,%eax
                    263:        popl    %edi
                    264:        ret
                    265: 
                    266:        # outsw(port,addr,cnt)
                    267:        .globl  _outsw
                    268: _outsw:
                    269:        pushl   %esi
                    270:        movw    8(%esp),%dx
                    271:        movl    12(%esp),%esi
                    272:        movl    16(%esp),%ecx
                    273:        cld
                    274:        nop
                    275:        .byte 0x66,0xf2,0x6f    # rep outsw
                    276:        nop
                    277:        movl    %esi,%eax
                    278:        popl    %esi
                    279:        ret
                    280: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.