Contiki-Inga 3.x
rl78-sys.h
1 /*
2 
3 Copyright (c) 2011 Red Hat Incorporated.
4 All rights reserved.
5 
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8 
9  Redistributions of source code must retain the above copyright
10  notice, this list of conditions and the following disclaimer.
11 
12  Redistributions in binary form must reproduce the above copyright
13  notice, this list of conditions and the following disclaimer in the
14  documentation and/or other materials provided with the distribution.
15 
16  The name of Red Hat Incorporated may not be used to endorse
17  or promote products derived from this software without specific
18  prior written permission.
19 
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 DISCLAIMED. IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY
24 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 */
32 /**
33  * \author DJ Delorie <dj@redhat.com>
34  */
35 
36 r8 = 0xffef0
37 r9 = 0xffef1
38 r10 = 0xffef2
39 r11 = 0xffef3
40 r12 = 0xffef4
41 r13 = 0xffef5
42 r14 = 0xffef6
43 r15 = 0xffef7
44 r16 = 0xffee8
45 r17 = 0xffee9
46 r18 = 0xffeea
47 r19 = 0xffeeb
48 r20 = 0xffeec
49 r21 = 0xffeed
50 r22 = 0xffeee
51 r23 = 0xffeef
52 
53 #define SYS__exit SYS_exit
54 
55  .macro syscall_body number
56  /* The RL78 doesn't really have an "interrupt" upcode, just
57  BRK, which we emulate exactly. We use the STOP opcode,
58  which is a breakpoint in the simulator. */
59  mov A, #\number
60  stop
61  ret
62  .endm
63 
64  .macro do_syscall name number
65 __\name:
66  .global __\name
67 _\name:
68  .weak _\name
69  syscall_body \number
70  .endm
71 
72  .macro syscall_returns name number
73 __\name:
74  .global __\name
75 _\name:
76  .weak _\name
77  mov r8, #\number
78  ret
79  .endm
80 
81 #define S(name) do_syscall name, SYS_##name
82 #define SYSCALL(number) syscall_body number
83 #define ERR(name) syscall_returns name, -1
84 #define OK(name) syscall_returns name, 0
85 #define RET(name,val) syscall_returns name, val