(не носитель языка, прошу прощения за смутное название)
Я использую набор компиляторов sdcc (3.7.0) для компиляции кода C для калькулятора TI-82 STATS . Его процессор Z80. ОС предоставляет несколько функций для взаимодействия с устройством, например, ClrLcdScreen () по адресу памяти 0x4755, который не принимает аргументов и ничего не возвращает.
Чтобы «объявить» и вызвать эту функцию в сборке, я могу сделать следующее:
ClrLcdScreen equ 0x4755 ; Assembly equivalent of '#define ClrLcdScreen 0x4755'
call ClrLcdScreen ; Call the function at memory address 0x4755
Теперь я не уверен, как сказать SDCC, что в адресе памяти 0x4755 есть функция, которую я хочу вызвать. Как я могу написать только объявление и дать SDCC знать, где можно найти определение во время выполнения?
Вот как я могу представить себе решение, которое будет выглядеть так (следующий код не настоящий, он просто создан для демонстрации того, что мне нужно):
__at__ 0x4755 void ClrLcdScreen(); // Function declaration
int main() {
ClrLcdScreen();
}
Я попытался вызвать функцию с использованием встроенной сборки:
#define ClrLcdFull() __asm__("call 0x4755")
int main() {
ClrLcdFull();
}
Это работает, но не то, что я хочу. С помощью этого кода я сам управляю вызовом, а SDCC вообще не знает, что я вызываю функцию.