2 #include "aros/m68k/asm.h"
6 #include "060sp/copyright.S"
21 lea %pc@(FP_CALL_TOP+0x80+0x30),%a1 // _060_fpsp_fline
22 move.l 11*4(%a0),56*4(%a0) /* save old f-line */
24 lea %pc@(FP_CALL_TOP+0x80+0x00),%a1 // _060_fpsp_snan
26 lea %pc@(FP_CALL_TOP+0x80+0x08),%a1 // _060_fpsp_operr
28 lea %pc@(FP_CALL_TOP+0x80+0x10),%a1 // _060_fpsp_ovfl
30 lea %pc@(FP_CALL_TOP+0x80+0x18),%a1 // _060_fpsp_unfl
32 lea %pc@(FP_CALL_TOP+0x80+0x20),%a1 // _060_fpsp_dz
34 lea %pc@(FP_CALL_TOP+0x80+0x28),%a1 // _060_fpsp_inex
36 lea %pc@(FP_CALL_TOP+0x80+0x38),%a1 // _060_fpsp_unsupp
38 lea %pc@(FP_CALL_TOP+0x80+0x40),%a1 // _060_fpsp_effadd
41 lea %pc@(I_CALL_TOP+0x80+0x00),%a1 // _060_isp_unimp
48 bral I_CALL_TOP+0x80+0x00
51 bral I_CALL_TOP+0x80+0x08
54 bral I_CALL_TOP+0x80+0x10
57 bral I_CALL_TOP+0x80+0x18
60 bral I_CALL_TOP+0x80+0x20
63 bral I_CALL_TOP+0x80+0x28
65 _060_isp_cas_terminate:
66 bral I_CALL_TOP+0x80+0x30
69 bral I_CALL_TOP+0x80+0x38
74 bral FP_CALL_TOP+0x80+0x00
77 bral FP_CALL_TOP+0x80+0x08
80 bral FP_CALL_TOP+0x80+0x10
83 bral FP_CALL_TOP+0x80+0x18
86 bral FP_CALL_TOP+0x80+0x20
89 bral FP_CALL_TOP+0x80+0x28
92 bral FP_CALL_TOP+0x80+0x30
95 bral FP_CALL_TOP+0x80+0x38
98 bral FP_CALL_TOP+0x80+0x40
102 /* exception stack frame is ready, jump to correct exception vector */
104 movem.l %d0-%d1,%sp@-
106 move.w %sp@(8+6),%d0 /* fetch exception vector number */
111 movem.l %sp@+,%d0-%d1
114 jmp_exception_old_fline:
118 /* 0xE0 = old f-line storage */
119 move.l %a0@(56*4),%sp@(4)
124 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
125 # MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
126 # M68000 Hi-Performance Microprocessor Division
127 # M68060 Software Package Production Release
129 # M68060 Software Package Copyright (C) 1993, 1994, 1995, 1996 Motorola Inc.
130 # All rights reserved.
132 # THE SOFTWARE is provided on an "AS IS" basis and without warranty.
133 # To the maximum extent permitted by applicable law,
134 # MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
135 # INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
136 # FOR A PARTICULAR PURPOSE and any warranty against infringement with
137 # regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
138 # and any accompanying written materials.
140 # To the maximum extent permitted by applicable law,
141 # IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
142 # (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
143 # BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
144 # ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
146 # Motorola assumes no responsibility for the maintenance and support
149 # You are hereby granted a copyright license to use, modify, and distribute the
150 # SOFTWARE so long as this entire notice is retained without alteration
151 # in any modified and/or redistributed versions, and that such modified
152 # versions are clearly identified as such.
153 # No licenses are granted by implication, estoppel or otherwise under any
154 # patents or trademarks of Motorola, Inc.
155 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
159 #################################
160 # EXAMPLE CALL-OUTS #
162 # _060_dmem_write() #
165 # _060_dmem_read_byte() #
166 # _060_dmem_read_word() #
167 # _060_dmem_read_long() #
168 # _060_imem_read_word() #
169 # _060_imem_read_long() #
170 # _060_dmem_write_byte() #
171 # _060_dmem_write_word() #
172 # _060_dmem_write_long() #
174 # _060_real_trace() #
175 # _060_real_access() #
176 #################################
183 # Writes to data memory while in supervisor mode.
186 # a0 - supervisor source address
187 # a1 - user destination address
188 # d0 - number of bytes to write
189 # a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
191 # d1 - 0 = success, !0 = failure
196 moveb %a0@+,%a1@+ |# copy 1 byte
197 subql #0x1,%d0 |# decr byte counter
198 bnes _060_dmem_write |# quit if ctr = 0
199 moveq #0,%d1 |# return success
204 # _060_imem_read(), _060_dmem_read():
206 # Reads from data/instruction memory while in supervisor mode.
209 # a0 - user source address
210 # a1 - supervisor destination address
211 # d0 - number of bytes to read
212 # a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
214 # d1 - 0 = success, !0 = failure
220 moveb %a0@+,%a1@+ |# copy 1 byte
221 subql #0x1,%d0 |# decr byte counter
222 bnes _060_dmem_read |# quit if ctr = 0
223 moveq #0,%d1 |# return success
228 # _060_dmem_read_byte():
230 # Read a data byte from user memory.
233 # a0 - user source address
234 # a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
236 # d0 - data byte in d0
237 # d1 - 0 = success, !0 = failure
242 moveq #0,%d1 |# return success
243 moveq #0,%d0 |# clear whole longword
244 moveb %a0@,%d0 |# fetch byte
249 # _060_imem_read_word():
250 # Read an instruction word from user memory.
252 # _060_dmem_read_word():
253 # Read a data word from user memory.
256 # a0 - user source address
257 # a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
259 # d0 - data word in d0
260 # d1 - 0 = success, !0 = failure
266 moveq #0,%d1 |# return success
267 moveq #0,%d0 |# clear whole longword
268 movew %a0@,%d0 |# fetch word
273 # _060_imem_read_long():
274 # Read an instruction longword from user memory.
276 # _060_dmem_read_long():
277 # Read an data longword from user memory.
281 # a0 - user source address
282 # a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
284 # d0 - data longword in d0
285 # d1 - 0 = success, !0 = failure
291 moveq #0,%d1 |# return success
292 movel %a0@,%d0 |# fetch longword
297 # _060_dmem_write_byte():
299 # Write a data byte to user memory.
302 # a0 - user destination address
303 # d0 - data byte in d0
304 # a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
306 # d1 - 0 = success, !0 = failure
310 _060_dmem_write_byte:
311 moveq #0,%d1 |# return success
312 moveb %d0,%a0@ |# store byte
317 # _060_dmem_write_word():
319 # Write a data word to user memory.
322 # a0 - user destination address
323 # d0 - data word in d0
324 # a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
326 # d1 - 0 = success, !0 = failure
330 _060_dmem_write_word:
331 moveq #0,%d1 |# return success
332 movew %d0,%a0@ |# store word
337 # _060_dmem_write_long():
339 # Write a data longword to user memory.
342 # a0 - user destination address
343 # d0 - data longword in d0
344 # a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
346 # d1 - 0 = success, !0 = failure
350 _060_dmem_write_long:
351 moveq #0,%d1 |# return success
352 movel %d0,%a0@ |# store longword
359 # This is the exit point for the 060FPSP when an instruction is being traced
360 # and there are no other higher priority exceptions pending for this instruction
361 # or they have already been processed.
363 # The sample code below simply executes an "rte".
372 # _060_real_access():
374 # This is the exit point for the 060FPSP when an access error exception
375 # is encountered. The routine below should point to the operating system
376 # handler for access error exceptions. The exception stack frame is an
377 # 8-word access error frame.
379 # We jump directly to the 68060 buserr handler.
380 # If we had a sane ld, we could use use that entry point directly...
387 #include "m68k_060int.S"
388 #include "m68k_060fpu.S"