revert between 56095 -> 55830 in arch
[AROS.git] / arch / m68k-all / m680x0 / 060sp / inetbsd.S
blob993f0e7c9e2266d4d50161c47b1c605ac728a11c
1 /*
3 # $NetBSD: inetbsd.S,v 1.4 2000/11/30 21:00:51 scw Exp $
5 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6 # MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
7 # M68000 Hi-Performance Microprocessor Division
8 # M68060 Software Package Production Release 
9
10 # M68060 Software Package Copyright (C) 1993, 1994, 1995, 1996 Motorola Inc.
11 # All rights reserved.
12
13 # THE SOFTWARE is provided on an "AS IS" basis and without warranty.
14 # To the maximum extent permitted by applicable law,
15 # MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
16 # INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
17 # FOR A PARTICULAR PURPOSE and any warranty against infringement with
18 # regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
19 # and any accompanying written materials. 
20
21 # To the maximum extent permitted by applicable law,
22 # IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
23 # (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
24 # BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
25 # ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
26
27 # Motorola assumes no responsibility for the maintenance and support
28 # of the SOFTWARE.  
29
30 # You are hereby granted a copyright license to use, modify, and distribute the
31 # SOFTWARE so long as this entire notice is retained without alteration
32 # in any modified and/or redistributed versions, and that such modified
33 # versions are clearly identified as such.
34 # No licenses are granted by implication, estoppel or otherwise under any
35 # patents or trademarks of Motorola, Inc.
36 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 # Derived from: 
38 # iskeleton.s
40 # This file contains:
41 #       (1) example "Call-out"s
42 #       (2) example package entry code
43 #       (3) example "Call-out" table
47 #################################
48 # (1) EXAMPLE CALL-OUTS         #
49 #                               #
50 # _060_isp_done()               #
51 # _060_real_chk()               #
52 # _060_real_divbyzero()         #
53 #                               #
54 # _060_real_cas()               #
55 # _060_real_cas2()              #
56 # _060_real_lock_page()         #
57 # _060_real_unlock_page()       #
58 #################################
63 # _060_isp_done():
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".
76 ASENTRY_NOPROFILE(_060_isp_done)
77         rte
81 # _060_real_chk():
83 # This is an alternate exit point for the Unimplemented Integer
84 # Instruction exception handler. If the instruction was a "chk2"
85 # and the operand was out of bounds, then _isp_unimp() creates
86 # a CHK exception stack frame from the Unimplemented Integer Instrcution
87 # stack frame and branches to this routine.
90 ASENTRY_NOPROFILE(_060_real_chk)
91         tstb    %sp@                    |# is tracing enabled?
92         bpls    real_chk_end            |# no
96 #           CHK FRAME              TRACE FRAME
97 #       *****************       *****************
98 #       *   Current PC  *       *   Current PC  *
99 #       *****************       *****************
100 #       * 0x2 *  0x018  *       * 0x2 *  0x024  *
101 #       *****************       *****************
102 #       *     Next      *       *     Next      *
103 #       *      PC       *       *      PC       *
104 #       *****************       *****************
105 #       *      SR       *       *      SR       *
106 #       *****************       *****************
109         moveb   #0x24,%sp@(0x7)         |# set trace vecno
110         bral    _ASM_LABEL(_060_real_trace)
112 real_chk_end:
113         jmp     _C_LABEL(chkinst)
117 # _060_real_divbyzero:
119 # This is an alternate exit point for the Unimplemented Integer 
120 # Instruction exception handler isp_unimp(). If the instruction is a 64-bit
121 # integer divide where the source operand is a zero, then the _isp_unimp() 
122 # creates a Divide-by-zero exception stack frame from the Unimplemented
123 # Integer Instruction stack frame and branches to this routine.
125 # Remember that a trace exception may be pending. The code below performs
126 # no action associated with the "chk" exception. If tracing is enabled,
127 # then it create a Trace exception stack frame from the "chk" exception
128 # stack frame and branches to the _real_trace() entry point.
131 ASENTRY_NOPROFILE(_060_real_divbyzero)
132         tstb    %sp@                    |# is tracing enabled?
133         bpls    real_divbyzero_end      |# no
137 #        DIVBYZERO FRAME           TRACE FRAME
138 #       *****************       *****************
139 #       *   Current PC  *       *   Current PC  *
140 #       *****************       *****************
141 #       * 0x2 *  0x014  *       * 0x2 *  0x024  *
142 #       *****************       *****************
143 #       *     Next      *       *     Next      *
144 #       *      PC       *       *      PC       *
145 #       *****************       *****************
146 #       *      SR       *       *      SR       *
147 #       *****************       *****************
150         moveb   #0x24,%sp@(0x7)         |# set trace vecno
151         bral    _ASM_LABEL(_060_real_trace)
153 real_divbyzero_end:
154         jmp     _C_LABEL(zerodiv)
156 |###########################
160 # _060_real_cas():
162 # Entry point for the selected cas emulation code implementation.
163 # If the implementation provided by the 68060ISP is sufficient,
164 # then this routine simply re-enters the package through _isp_cas.
167 ASENTRY_NOPROFILE(_060_real_cas)
168         bral    _C_LABEL(I_CALL_TOP)+0x80+0x08
172 # _060_real_cas2():
174 # Entry point for the selected cas2 emulation code implementation.
175 # If the implementation provided by the 68060ISP is sufficient,
176 # then this routine simply re-enters the package through _isp_cas2.
179 ASENTRY_NOPROFILE(_060_real_cas2)
180         bral    _C_LABEL(I_CALL_TOP)+0x80+0x10
184 # _060_lock_page():
186 # Entry point for the operating system's routine to "lock" a page
187 # from being paged out. This routine is needed by the cas/cas2
188 # algorithms so that no page faults occur within the "core" code
189 # region. Note: the routine must lock two pages if the operand 
190 # spans two pages.
191 # NOTE: THE ROUTINE SHOULD RETURN AN FSLW VALUE IN D0 ON FAILURE
192 # SO THAT THE 060SP CAN CREATE A PROPER ACCESS ERROR FRAME.
193 # Arguments:
194 #       a0 = operand address
195 #       d0 = `xxxxxxff -> supervisor| `xxxxxx00 -> user
196 #       d1 = `xxxxxxff -> longword| `xxxxxx00 -> word
197 # Expected outputs:
198 #       d0 = 0 -> success| non-zero -> failure
201 ASENTRY_NOPROFILE(_060_real_lock_page)
202         clrl    %d0
203         rts
207 # _060_unlock_page():
209 # Entry point for the operating system's routine to "unlock" a
210 # page that has been "locked" previously with _real_lock_page.
211 # Note: the routine must unlock two pages if the operand spans
212 # two pages.
213 # Arguments:
214 #       a0 = operand address
215 #       d0 = `xxxxxxff -> supervisor| `xxxxxx00 -> user
216 #       d1 = `xxxxxxff -> longword| `xxxxxx00 -> word
219 ASENTRY_NOPROFILE(_060_real_unlock_page)
220         clrl    %d0
221         rts
223 |############################################################################
225 ##################################
226 # (2) EXAMPLE PACKAGE ENTRY CODE #
227 ##################################
230 ASENTRY_NOPROFILE(_060_isp_unimp)
231         bral    _C_LABEL(I_CALL_TOP)+0x80+0x00
233 ASENTRY_NOPROFILE(_060_isp_cas)
234         bral    _C_LABEL(I_CALL_TOP)+0x80+0x08
236 ASENTRY_NOPROFILE(_060_isp_cas2)
237         bral    _C_LABEL(I_CALL_TOP)+0x80+0x10
239 ASENTRY_NOPROFILE(_060_isp_cas_finish)
240         bral    _C_LABEL(I_CALL_TOP)+0x80+0x18
242 ASENTRY_NOPROFILE(_060_isp_cas2_finish)
243         bral    _C_LABEL(I_CALL_TOP)+0x80+0x20
245 ASENTRY_NOPROFILE(_060_isp_cas_inrange)
246         bral    _C_LABEL(I_CALL_TOP)+0x80+0x28
248 ASENTRY_NOPROFILE(_060_isp_cas_terminate)
249         bral    _C_LABEL(I_CALL_TOP)+0x80+0x30
251 ASENTRY_NOPROFILE(_060_isp_cas_restart)
252         bral    _C_LABEL(I_CALL_TOP)+0x80+0x38
254 |############################################################################
257 ################################
258 # (3) EXAMPLE CALL-OUT SECTION #
259 ################################
261 # The size of this section MUST be 128 bytes!!!
264 GLOBAL(I_CALL_TOP)
265         .long   _ASM_LABEL(_060_real_chk)-_C_LABEL(I_CALL_TOP)
266         .long   _ASM_LABEL(_060_real_divbyzero)-_C_LABEL(I_CALL_TOP)
267         .long   _ASM_LABEL(_060_real_trace)-_C_LABEL(I_CALL_TOP)
268         .long   _ASM_LABEL(_060_real_access)-_C_LABEL(I_CALL_TOP)
269         .long   _ASM_LABEL(_060_isp_done)-_C_LABEL(I_CALL_TOP)
271         .long   _ASM_LABEL(_060_real_cas)-_C_LABEL(I_CALL_TOP)
272         .long   _ASM_LABEL(_060_real_cas2)-_C_LABEL(I_CALL_TOP)
273         .long   _ASM_LABEL(_060_real_lock_page)-_C_LABEL(I_CALL_TOP)
274         .long   _ASM_LABEL(_060_real_unlock_page)-_C_LABEL(I_CALL_TOP)
276         .long   0x00000000,0x00000000,0x00000000,0x00000000
277         .long   0x00000000,0x00000000,0x00000000
279         .long   _ASM_LABEL(_060_imem_read)-_C_LABEL(I_CALL_TOP)
280         .long   _ASM_LABEL(_060_dmem_read)-_C_LABEL(I_CALL_TOP)
281         .long   _ASM_LABEL(_060_dmem_write)-_C_LABEL(I_CALL_TOP)
282         .long   _ASM_LABEL(_060_imem_read_word)-_C_LABEL(I_CALL_TOP)
283         .long   _ASM_LABEL(_060_imem_read_long)-_C_LABEL(I_CALL_TOP)
284         .long   _ASM_LABEL(_060_dmem_read_byte)-_C_LABEL(I_CALL_TOP)
285         .long   _ASM_LABEL(_060_dmem_read_word)-_C_LABEL(I_CALL_TOP)
286         .long   _ASM_LABEL(_060_dmem_read_long)-_C_LABEL(I_CALL_TOP)
287         .long   _ASM_LABEL(_060_dmem_write_byte)-_C_LABEL(I_CALL_TOP)
288         .long   _ASM_LABEL(_060_dmem_write_word)-_C_LABEL(I_CALL_TOP)
289         .long   _ASM_LABEL(_060_dmem_write_long)-_C_LABEL(I_CALL_TOP)
291         .long   0x00000000
292         .long   0x00000000,0x00000000,0x00000000,0x00000000
295 ############################################################################
297 # 060 INTEGER KERNEL PACKAGE MUST GO HERE!!!
300 #include "isp.S"