1 
2 // automatically generated by m4 from headers in proto subdir
3 
4 
5 #ifndef __IM2_H__
6 #define __IM2_H__
7 
8 #include <stdint.h>
9 
10 extern void __LIB__ im2_init(void *im2_table_address) __smallc __z88dk_fastcall;
11 
12 
13 extern void __LIB__ *im2_install_isr(uint8_t vector,void *isr) __smallc;
14 extern void __LIB__ *im2_install_isr_callee(uint8_t vector,void *isr) __smallc __z88dk_callee;
15 #define im2_install_isr(a,b) im2_install_isr_callee(a,b)
16 
17 
18 extern void __LIB__ *im2_create_generic_isr(uint8_t num_callbacks,void *address) __smallc;
19 extern void __LIB__ *im2_create_generic_isr_callee(uint8_t num_callbacks,void *address) __smallc __z88dk_callee;
20 #define im2_create_generic_isr(a,b) im2_create_generic_isr_callee(a,b)
21 
22 
23 extern void __LIB__ *im2_create_generic_isr_8080(uint8_t num_callbacks,void *address) __smallc;
24 extern void __LIB__ *im2_create_generic_isr_8080_callee(uint8_t num_callbacks,void *address) __smallc __z88dk_callee;
25 #define im2_create_generic_isr_8080(a,b) im2_create_generic_isr_8080_callee(a,b)
26 
27 
28 extern void __LIB__ im2_append_generic_callback(uint8_t vector,void *callback) __smallc;
29 extern void __LIB__ im2_append_generic_callback_callee(uint8_t vector,void *callback) __smallc __z88dk_callee;
30 #define im2_append_generic_callback(a,b) im2_append_generic_callback_callee(a,b)
31 
32 
33 extern void __LIB__ im2_prepend_generic_callback(uint8_t vector,void *callback) __smallc;
34 extern void __LIB__ im2_prepend_generic_callback_callee(uint8_t vector,void *callback) __smallc __z88dk_callee;
35 #define im2_prepend_generic_callback(a,b) im2_prepend_generic_callback_callee(a,b)
36 
37 
38 extern int __LIB__ im2_remove_generic_callback(uint8_t vector,void *callback) __smallc;
39 extern int __LIB__ im2_remove_generic_callback_callee(uint8_t vector,void *callback) __smallc __z88dk_callee;
40 #define im2_remove_generic_callback(a,b) im2_remove_generic_callback_callee(a,b)
41 
42 
43 
44 #ifdef __CLANG
45 
46 #define IM2_DEFINE_ISR(name)       error clang does not support IM2_DEFINE_ISR;
47 #define IM2_DEFINE_ISR_8080(name)  error clang does not support IM2_DEFINE_ISR_8080;
48 
49 #endif
50 
51 #ifdef __SCCZ80
52 
53 #define IM2_DEFINE_ISR(name)  void name(void) \
54 { \
55 asm("\tEXTERN\tasm_im2_push_registers\n" \
56 "\tEXTERN\tasm_im2_pop_registers\n" \
57 "\n" \
58 "\tcall\tasm_im2_push_registers\n" \
59 "\tcall\t__im2_isr_" #name "\n" \
60 "\tcall\tasm_im2_pop_registers\n" \
61 "\n" \
62 "\tei\n" \
63 "\treti\n" \
64 ); \
65 } \
66 void _im2_isr_##name(void)
67 
68 #define IM2_DEFINE_ISR_8080(name)  void name(void) \
69 { \
70 asm("\tEXTERN\tasm_im2_push_registers_8080\n" \
71 "\tEXTERN\tasm_im2_pop_registers_8080\n" \
72 "\n" \
73 "\tcall\tasm_im2_push_registers_8080\n" \
74 "\tcall\t__im2_isr_8080_" #name "\n" \
75 "\tcall\tasm_im2_pop_registers_8080\n" \
76 "\n" \
77 "\tei\n" \
78 "\treti\n" \
79 ); \
80 } \
81 void _im2_isr_8080_##name(void)
82 
83 #if __SPECTRUM || __ZXNEXT
84 
85 #define IM2_DEFINE_ISR_WITH_BASIC(name)  void name(void) \
86 { \
87 asm("\tEXTERN\tasm_im2_push_registers\n" \
88 "\tEXTERN\tasm_im2_pop_registers\n" \
89 "\n" \
90 "\tcall\tasm_im2_push_registers\n" \
91 "\tcall\t__im2_isr_" #name "\n" \
92 "\tcall\tasm_im2_pop_registers\n" \
93 "\n" \
94 "\tpush iy\n" \
95 "\tld iy,0x5c3a\n" \
96 "\tcall 0x0038\n" \
97 "\tpop iy\n" \
98 "\treti\n" \
99 ); \
100 } \
101 void _im2_isr_##name(void)
102 
103 #endif
104 
105 #endif
106 
107 #ifdef __SDCC
108 
109 #define IM2_DEFINE_ISR(name)  void name(void) __naked \
110 { \
111 	__asm \
112 	EXTERN	asm_im2_push_registers \
113    EXTERN	asm_im2_pop_registers \
114 	\
115 	call	asm_im2_push_registers \
116 	call   __im2_isr_##name \
117 	call   asm_im2_pop_registers \
118 	\
119 	ei \
120 	reti \
121 	__endasm; \
122 } \
123 void _im2_isr_##name(void)
124 
125 #define IM2_DEFINE_ISR_8080(name)  void name(void) __critical __interrupt(0)
126 
127 #if __SPECTRUM || __ZXNEXT
128 
129 #define IM2_DEFINE_ISR_WITH_BASIC(name)  void name(void) __naked \
130 { \
131 	__asm \
132 	EXTERN	asm_im2_push_registers \
133 	EXTERN	asm_im2_pop_registers \
134 	\
135 	call	asm_im2_push_registers \
136 	call   __im2_isr_##name \
137 	call   asm_im2_pop_registers \
138 	\
139 	push iy \
140 	ld iy,0x5c3a \
141 	call 0x0038 \
142 	pop iy \
143 	ret \
144 	__endasm; \
145 } \
146 void _im2_isr_##name(void)
147 
148 #endif
149 
150 #endif
151 
152 
153 #endif
154