Annotation of Net2/arch/i386/stand/srt0.c, revision 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.