Annotation of sys/arch/m68k/060sp/iskeletn.s, Revision 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