[BACK]Return to iskeletn.s CVS log [TXT][DIR] Up to [local] / sys / arch / m68k / 060sp

Annotation of sys/arch/m68k/060sp/iskeletn.s, Revision 1.1.1.1

1.1       nbrk        1: #
                      2: # $OpenBSD: iskeletn.s,v 1.2 1996/05/30 22:14:43 niklas Exp $
                      3: # $NetBSD: iskeletn.s,v 1.2 1996/05/15 19:48:41 is Exp $
                      4: #
                      5:
                      6: #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      7: # MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
                      8: # M68000 Hi-Performance Microprocessor Division
                      9: # M68060 Software Package Production Release
                     10: #
                     11: # M68060 Software Package Copyright (C) 1993, 1994, 1995, 1996 Motorola Inc.
                     12: # All rights reserved.
                     13: #
                     14: # THE SOFTWARE is provided on an "AS IS" basis and without warranty.
                     15: # To the maximum extent permitted by applicable law,
                     16: # MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
                     17: # INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
                     18: # FOR A PARTICULAR PURPOSE and any warranty against infringement with
                     19: # regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
                     20: # and any accompanying written materials.
                     21: #
                     22: # To the maximum extent permitted by applicable law,
                     23: # IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
                     24: # (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
                     25: # BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
                     26: # ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
                     27: #
                     28: # Motorola assumes no responsibility for the maintenance and support
                     29: # of the SOFTWARE.
                     30: #
                     31: # You are hereby granted a copyright license to use, modify, and distribute the
                     32: # SOFTWARE so long as this entire notice is retained without alteration
                     33: # in any modified and/or redistributed versions, and that such modified
                     34: # versions are clearly identified as such.
                     35: # No licenses are granted by implication, estoppel or otherwise under any
                     36: # patents or trademarks of Motorola, Inc.
                     37: #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     38:
                     39: #
                     40: # iskeleton.s
                     41: #
                     42: # This file contains:
                     43: #      (1) example "Call-out"s
                     44: #      (2) example package entry code
                     45: #      (3) example "Call-out" table
                     46: #
                     47:
                     48:
                     49: #################################
                     50: # (1) EXAMPLE CALL-OUTS        #
                     51: #                              #
                     52: # _060_isp_done()              #
                     53: # _060_real_chk()              #
                     54: # _060_real_divbyzero()                #
                     55: #                              #
                     56: # _060_real_cas()              #
                     57: # _060_real_cas2()             #
                     58: # _060_real_lock_page()                #
                     59: # _060_real_unlock_page()      #
                     60: #################################
                     61:
                     62: #
                     63: # _060_isp_done():
                     64: #
                     65: # This is and example main exit point for the Unimplemented Integer
                     66: # Instruction exception handler. For a normal exit, the
                     67: # _isp_unimp() branches to here so that the operating system
                     68: # can do any clean-up desired. The stack frame is the
                     69: # Unimplemented Integer Instruction stack frame with
                     70: # the PC pointing to the instruction following the instruction
                     71: # just emulated.
                     72: # To simply continue execution at the next instruction, just
                     73: # do an "rte".
                     74: #
                     75:        global          _060_isp_done
                     76: _060_isp_done:
                     77:        rte
                     78:
                     79: #
                     80: # _060_real_chk():
                     81: #
                     82: # This is an alternate exit point for the Unimplemented Integer
                     83: # Instruction exception handler. If the instruction was a "chk2"
                     84: # and the operand was out of bounds, then _isp_unimp() creates
                     85: # a CHK exception stack frame from the Unimplemented Integer Instrcution
                     86: # stack frame and branches to this routine.
                     87: #
                     88:        global          _060_real_chk
                     89: _060_real_chk:
                     90:        tst.b           (%sp)                   # is tracing enabled?
                     91:        bpl.b           real_chk_end            # no
                     92:
                     93: #
                     94: #          CHK FRAME              TRACE FRAME
                     95: #      *****************       *****************
                     96: #      *   Current PC  *       *   Current PC  *
                     97: #      *****************       *****************
                     98: #      * 0x2 *  0x018  *       * 0x2 *  0x024  *
                     99: #      *****************       *****************
                    100: #      *     Next      *       *     Next      *
                    101: #      *      PC       *       *      PC       *
                    102: #      *****************       *****************
                    103: #      *      SR       *       *      SR       *
                    104: #      *****************       *****************
                    105: #
                    106:        mov.b           &0x24,0x7(%sp)          # set trace vecno
                    107:        bra.l           _060_real_trace
                    108:
                    109: real_chk_end:
                    110:        rte
                    111:
                    112: #
                    113: # _060_real_divbyzero:
                    114: #
                    115: # This is an alternate exit point for the Unimplemented Integer
                    116: # Instruction exception handler isp_unimp(). If the instruction is a 64-bit
                    117: # integer divide where the source operand is a zero, then the _isp_unimp()
                    118: # creates a Divide-by-zero exception stack frame from the Unimplemented
                    119: # Integer Instruction stack frame and branches to this routine.
                    120: #
                    121: # Remember that a trace exception may be pending. The code below performs
                    122: # no action associated with the "chk" exception. If tracing is enabled,
                    123: # then it create a Trace exception stack frame from the "chk" exception
                    124: # stack frame and branches to the _real_trace() entry point.
                    125: #
                    126:        global          _060_real_divbyzero
                    127: _060_real_divbyzero:
                    128:        tst.b           (%sp)                   # is tracing enabled?
                    129:        bpl.b           real_divbyzero_end      # no
                    130:
                    131: #
                    132: #       DIVBYZERO FRAME           TRACE FRAME
                    133: #      *****************       *****************
                    134: #      *   Current PC  *       *   Current PC  *
                    135: #      *****************       *****************
                    136: #      * 0x2 *  0x014  *       * 0x2 *  0x024  *
                    137: #      *****************       *****************
                    138: #      *     Next      *       *     Next      *
                    139: #      *      PC       *       *      PC       *
                    140: #      *****************       *****************
                    141: #      *      SR       *       *      SR       *
                    142: #      *****************       *****************
                    143: #
                    144:        mov.b           &0x24,0x7(%sp)          # set trace vecno
                    145:        bra.l           _060_real_trace
                    146:
                    147: real_divbyzero_end:
                    148:        rte
                    149:
                    150: ###########################
                    151:
                    152: #
                    153: # _060_real_cas():
                    154: #
                    155: # Entry point for the selected cas emulation code implementation.
                    156: # If the implementation provided by the 68060ISP is sufficient,
                    157: # then this routine simply re-enters the package through _isp_cas.
                    158: #
                    159:        global          _060_real_cas
                    160: _060_real_cas:
                    161:        bra.l           _I_CALL_TOP+0x80+0x08
                    162:
                    163: #
                    164: # _060_real_cas2():
                    165: #
                    166: # Entry point for the selected cas2 emulation code implementation.
                    167: # If the implementation provided by the 68060ISP is sufficient,
                    168: # then this routine simply re-enters the package through _isp_cas2.
                    169: #
                    170:        global          _060_real_cas2
                    171: _060_real_cas2:
                    172:        bra.l           _I_CALL_TOP+0x80+0x10
                    173:
                    174: #
                    175: # _060_lock_page():
                    176: #
                    177: # Entry point for the operating system's routine to "lock" a page
                    178: # from being paged out. This routine is needed by the cas/cas2
                    179: # algorithms so that no page faults occur within the "core" code
                    180: # region. Note: the routine must lock two pages if the operand
                    181: # spans two pages.
                    182: # NOTE: THE ROUTINE SHOULD RETURN AN FSLW VALUE IN D0 ON FAILURE
                    183: # SO THAT THE 060SP CAN CREATE A PROPER ACCESS ERROR FRAME.
                    184: # Arguments:
                    185: #      a0 = operand address
                    186: #      d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user
                    187: #      d1 = `xxxxxxff -> longword; `xxxxxx00 -> word
                    188: # Expected outputs:
                    189: #      d0 = 0 -> success; non-zero -> failure
                    190: #
                    191:        global          _060_real_lock_page
                    192: _060_real_lock_page:
                    193:        clr.l           %d0
                    194:        rts
                    195:
                    196: #
                    197: # _060_unlock_page():
                    198: #
                    199: # Entry point for the operating system's routine to "unlock" a
                    200: # page that has been "locked" previously with _real_lock_page.
                    201: # Note: the routine must unlock two pages if the operand spans
                    202: # two pages.
                    203: # Arguments:
                    204: #      a0 = operand address
                    205: #      d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user
                    206: #      d1 = `xxxxxxff -> longword; `xxxxxx00 -> word
                    207: #
                    208:        global          _060_real_unlock_page
                    209: _060_real_unlock_page:
                    210:        clr.l           %d0
                    211:        rts
                    212:
                    213: ############################################################################
                    214:
                    215: ##################################
                    216: # (2) EXAMPLE PACKAGE ENTRY CODE #
                    217: ##################################
                    218:
                    219:        global          _060_isp_unimp
                    220: _060_isp_unimp:
                    221:        bra.l           _I_CALL_TOP+0x80+0x00
                    222:
                    223:        global          _060_isp_cas
                    224: _060_isp_cas:
                    225:        bra.l           _I_CALL_TOP+0x80+0x08
                    226:
                    227:        global          _060_isp_cas2
                    228: _060_isp_cas2:
                    229:        bra.l           _I_CALL_TOP+0x80+0x10
                    230:
                    231:        global          _060_isp_cas_finish
                    232: _060_isp_cas_finish:
                    233:        bra.l           _I_CALL_TOP+0x80+0x18
                    234:
                    235:        global          _060_isp_cas2_finish
                    236: _060_isp_cas2_finish:
                    237:        bra.l           _I_CALL_TOP+0x80+0x20
                    238:
                    239:        global          _060_isp_cas_inrange
                    240: _060_isp_cas_inrange:
                    241:        bra.l           _I_CALL_TOP+0x80+0x28
                    242:
                    243:        global          _060_isp_cas_terminate
                    244: _060_isp_cas_terminate:
                    245:        bra.l           _I_CALL_TOP+0x80+0x30
                    246:
                    247:        global          _060_isp_cas_restart
                    248: _060_isp_cas_restart:
                    249:        bra.l           _I_CALL_TOP+0x80+0x38
                    250:
                    251: ############################################################################
                    252:
                    253: ################################
                    254: # (3) EXAMPLE CALL-OUT SECTION #
                    255: ################################
                    256:
                    257: # The size of this section MUST be 128 bytes!!!
                    258:
                    259:        global  _I_CALL_TOP
                    260: _I_CALL_TOP:
                    261:        long    _060_real_chk           - _I_CALL_TOP
                    262:        long    _060_real_divbyzero     - _I_CALL_TOP
                    263:        long    _060_real_trace         - _I_CALL_TOP
                    264:        long    _060_real_access        - _I_CALL_TOP
                    265:        long    _060_isp_done           - _I_CALL_TOP
                    266:
                    267:        long    _060_real_cas           - _I_CALL_TOP
                    268:        long    _060_real_cas2          - _I_CALL_TOP
                    269:        long    _060_real_lock_page     - _I_CALL_TOP
                    270:        long    _060_real_unlock_page   - _I_CALL_TOP
                    271:
                    272:        long    0x00000000, 0x00000000, 0x00000000, 0x00000000
                    273:        long    0x00000000, 0x00000000, 0x00000000
                    274:
                    275:        long    _060_imem_read          - _I_CALL_TOP
                    276:        long    _060_dmem_read          - _I_CALL_TOP
                    277:        long    _060_dmem_write         - _I_CALL_TOP
                    278:        long    _060_imem_read_word     - _I_CALL_TOP
                    279:        long    _060_imem_read_long     - _I_CALL_TOP
                    280:        long    _060_dmem_read_byte     - _I_CALL_TOP
                    281:        long    _060_dmem_read_word     - _I_CALL_TOP
                    282:        long    _060_dmem_read_long     - _I_CALL_TOP
                    283:        long    _060_dmem_write_byte    - _I_CALL_TOP
                    284:        long    _060_dmem_write_word    - _I_CALL_TOP
                    285:        long    _060_dmem_write_long    - _I_CALL_TOP
                    286:
                    287:        long    0x00000000
                    288:        long    0x00000000, 0x00000000, 0x00000000, 0x00000000
                    289:
                    290: ############################################################################
                    291:
                    292: # 060 INTEGER KERNEL PACKAGE MUST GO HERE!!!

CVSweb