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