diff options
author | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1996-05-30 21:14:31 +0000 |
---|---|---|
committer | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1996-05-30 21:14:31 +0000 |
commit | 32d9f5dc967f634f8b9912d0541c5cdc5a04ad87 (patch) | |
tree | 4c394dded87f01ffced278bda88d885e6763c019 /sys/arch/m68k/060sp/iskeletn.s | |
parent | 6c0539d933458ca5bc6e048d4cca4b5ab7259297 (diff) |
checkin of files sup have missed earlier, this dir is now at 0529
Diffstat (limited to 'sys/arch/m68k/060sp/iskeletn.s')
-rw-r--r-- | sys/arch/m68k/060sp/iskeletn.s | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/sys/arch/m68k/060sp/iskeletn.s b/sys/arch/m68k/060sp/iskeletn.s new file mode 100644 index 00000000000..2ad8857fcf2 --- /dev/null +++ b/sys/arch/m68k/060sp/iskeletn.s @@ -0,0 +1,291 @@ +# +# $NetBSD: iskeletn.s,v 1.2 1996/05/15 19:48:41 is Exp $ +# + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP +# M68000 Hi-Performance Microprocessor Division +# M68060 Software Package Production Release +# +# M68060 Software Package Copyright (C) 1993, 1994, 1995, 1996 Motorola Inc. +# All rights reserved. +# +# THE SOFTWARE is provided on an "AS IS" basis and without warranty. +# To the maximum extent permitted by applicable law, +# MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +# INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS +# FOR A PARTICULAR PURPOSE and any warranty against infringement with +# regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) +# and any accompanying written materials. +# +# To the maximum extent permitted by applicable law, +# IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER +# (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, +# BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) +# ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE. +# +# Motorola assumes no responsibility for the maintenance and support +# of the SOFTWARE. +# +# You are hereby granted a copyright license to use, modify, and distribute the +# SOFTWARE so long as this entire notice is retained without alteration +# in any modified and/or redistributed versions, and that such modified +# versions are clearly identified as such. +# No licenses are granted by implication, estoppel or otherwise under any +# patents or trademarks of Motorola, Inc. +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# +# iskeleton.s +# +# This file contains: +# (1) example "Call-out"s +# (2) example package entry code +# (3) example "Call-out" table +# + + +################################# +# (1) EXAMPLE CALL-OUTS # +# # +# _060_isp_done() # +# _060_real_chk() # +# _060_real_divbyzero() # +# # +# _060_real_cas() # +# _060_real_cas2() # +# _060_real_lock_page() # +# _060_real_unlock_page() # +################################# + +# +# _060_isp_done(): +# +# This is and example main exit point for the Unimplemented Integer +# Instruction exception handler. For a normal exit, the +# _isp_unimp() branches to here so that the operating system +# can do any clean-up desired. The stack frame is the +# Unimplemented Integer Instruction stack frame with +# the PC pointing to the instruction following the instruction +# just emulated. +# To simply continue execution at the next instruction, just +# do an "rte". +# + global _060_isp_done +_060_isp_done: + rte + +# +# _060_real_chk(): +# +# This is an alternate exit point for the Unimplemented Integer +# Instruction exception handler. If the instruction was a "chk2" +# and the operand was out of bounds, then _isp_unimp() creates +# a CHK exception stack frame from the Unimplemented Integer Instrcution +# stack frame and branches to this routine. +# + global _060_real_chk +_060_real_chk: + tst.b (%sp) # is tracing enabled? + bpl.b real_chk_end # no + +# +# CHK FRAME TRACE FRAME +# ***************** ***************** +# * Current PC * * Current PC * +# ***************** ***************** +# * 0x2 * 0x018 * * 0x2 * 0x024 * +# ***************** ***************** +# * Next * * Next * +# * PC * * PC * +# ***************** ***************** +# * SR * * SR * +# ***************** ***************** +# + mov.b &0x24,0x7(%sp) # set trace vecno + bra.l _060_real_trace + +real_chk_end: + rte + +# +# _060_real_divbyzero: +# +# This is an alternate exit point for the Unimplemented Integer +# Instruction exception handler isp_unimp(). If the instruction is a 64-bit +# integer divide where the source operand is a zero, then the _isp_unimp() +# creates a Divide-by-zero exception stack frame from the Unimplemented +# Integer Instruction stack frame and branches to this routine. +# +# Remember that a trace exception may be pending. The code below performs +# no action associated with the "chk" exception. If tracing is enabled, +# then it create a Trace exception stack frame from the "chk" exception +# stack frame and branches to the _real_trace() entry point. +# + global _060_real_divbyzero +_060_real_divbyzero: + tst.b (%sp) # is tracing enabled? + bpl.b real_divbyzero_end # no + +# +# DIVBYZERO FRAME TRACE FRAME +# ***************** ***************** +# * Current PC * * Current PC * +# ***************** ***************** +# * 0x2 * 0x014 * * 0x2 * 0x024 * +# ***************** ***************** +# * Next * * Next * +# * PC * * PC * +# ***************** ***************** +# * SR * * SR * +# ***************** ***************** +# + mov.b &0x24,0x7(%sp) # set trace vecno + bra.l _060_real_trace + +real_divbyzero_end: + rte + +########################### + +# +# _060_real_cas(): +# +# Entry point for the selected cas emulation code implementation. +# If the implementation provided by the 68060ISP is sufficient, +# then this routine simply re-enters the package through _isp_cas. +# + global _060_real_cas +_060_real_cas: + bra.l _I_CALL_TOP+0x80+0x08 + +# +# _060_real_cas2(): +# +# Entry point for the selected cas2 emulation code implementation. +# If the implementation provided by the 68060ISP is sufficient, +# then this routine simply re-enters the package through _isp_cas2. +# + global _060_real_cas2 +_060_real_cas2: + bra.l _I_CALL_TOP+0x80+0x10 + +# +# _060_lock_page(): +# +# Entry point for the operating system's routine to "lock" a page +# from being paged out. This routine is needed by the cas/cas2 +# algorithms so that no page faults occur within the "core" code +# region. Note: the routine must lock two pages if the operand +# spans two pages. +# NOTE: THE ROUTINE SHOULD RETURN AN FSLW VALUE IN D0 ON FAILURE +# SO THAT THE 060SP CAN CREATE A PROPER ACCESS ERROR FRAME. +# Arguments: +# a0 = operand address +# d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user +# d1 = `xxxxxxff -> longword; `xxxxxx00 -> word +# Expected outputs: +# d0 = 0 -> success; non-zero -> failure +# + global _060_real_lock_page +_060_real_lock_page: + clr.l %d0 + rts + +# +# _060_unlock_page(): +# +# Entry point for the operating system's routine to "unlock" a +# page that has been "locked" previously with _real_lock_page. +# Note: the routine must unlock two pages if the operand spans +# two pages. +# Arguments: +# a0 = operand address +# d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user +# d1 = `xxxxxxff -> longword; `xxxxxx00 -> word +# + global _060_real_unlock_page +_060_real_unlock_page: + clr.l %d0 + rts + +############################################################################ + +################################## +# (2) EXAMPLE PACKAGE ENTRY CODE # +################################## + + global _060_isp_unimp +_060_isp_unimp: + bra.l _I_CALL_TOP+0x80+0x00 + + global _060_isp_cas +_060_isp_cas: + bra.l _I_CALL_TOP+0x80+0x08 + + global _060_isp_cas2 +_060_isp_cas2: + bra.l _I_CALL_TOP+0x80+0x10 + + global _060_isp_cas_finish +_060_isp_cas_finish: + bra.l _I_CALL_TOP+0x80+0x18 + + global _060_isp_cas2_finish +_060_isp_cas2_finish: + bra.l _I_CALL_TOP+0x80+0x20 + + global _060_isp_cas_inrange +_060_isp_cas_inrange: + bra.l _I_CALL_TOP+0x80+0x28 + + global _060_isp_cas_terminate +_060_isp_cas_terminate: + bra.l _I_CALL_TOP+0x80+0x30 + + global _060_isp_cas_restart +_060_isp_cas_restart: + bra.l _I_CALL_TOP+0x80+0x38 + +############################################################################ + +################################ +# (3) EXAMPLE CALL-OUT SECTION # +################################ + +# The size of this section MUST be 128 bytes!!! + + global _I_CALL_TOP +_I_CALL_TOP: + long _060_real_chk - _I_CALL_TOP + long _060_real_divbyzero - _I_CALL_TOP + long _060_real_trace - _I_CALL_TOP + long _060_real_access - _I_CALL_TOP + long _060_isp_done - _I_CALL_TOP + + long _060_real_cas - _I_CALL_TOP + long _060_real_cas2 - _I_CALL_TOP + long _060_real_lock_page - _I_CALL_TOP + long _060_real_unlock_page - _I_CALL_TOP + + long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + long 0x00000000, 0x00000000, 0x00000000 + + long _060_imem_read - _I_CALL_TOP + long _060_dmem_read - _I_CALL_TOP + long _060_dmem_write - _I_CALL_TOP + long _060_imem_read_word - _I_CALL_TOP + long _060_imem_read_long - _I_CALL_TOP + long _060_dmem_read_byte - _I_CALL_TOP + long _060_dmem_read_word - _I_CALL_TOP + long _060_dmem_read_long - _I_CALL_TOP + long _060_dmem_write_byte - _I_CALL_TOP + long _060_dmem_write_word - _I_CALL_TOP + long _060_dmem_write_long - _I_CALL_TOP + + long 0x00000000 + long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + +############################################################################ + +# 060 INTEGER KERNEL PACKAGE MUST GO HERE!!! |