von SimonLothar » Sa 13. Nov 2010, 16:08
fxlib.h, keybios.h und ggf. weitere wie z. B. stdlib.h musst Du weiterhin includen.
Die Interfaces, Types und Konstanten brauchst Du ja unabhängig von der konkreten Implementation.
Wenn Du aber eine gleichnamige Funktion in einem Modul des Projekts implementierst, dann benutzt der Linker diese Implementation.
Z. B. atoi:
wenn Du nichts weiter machst, bezieht der Linker atoi aus der SDK-library (header: stdlib.h).
Alternativ kannst Du aber auch in einem Assembler-Modul
SYSCALL 015F, _atoi
deklarieren.
Der Linker verwendet dann diese SysCall-Variante. Das spart bereits 1 k Code.
In der debug-Datei FXADDINror.map kannst Du die Resultate nachvollziehen bzw. nachsehen,
welche der SDK-Funktionen viel Platz verbrauchen und ggf. optimiert werden können.
Es bringt nicht immer was, auf SysCalls umzustellen, da die SDK-Library selbst z. T. bereits SysCalls benutzt.
Die in stdlib.h und stdio.h deklarierten Funktionen sind aber oft gute Kandidaten.
Manchmal kann man eine der Library-Funktionen nicht mit einem einzelnen SysCall abbilden.
Z. B. sprintf:
diese und die anderen Formatierungsfunktionen (stdio.h) sind zwar sehr komfortabel, verursachen eine ziemlich große Codezunahme.
Wenn man nur Ganzzahlen formatieren muss, dann reicht vielleicht
SYSCALL 0160, _itoa
aus.
Das Interface von itoa ist: int itoa( int value, unsigned char*result, int digits );
Ggf. hilft hier noch
SYSCALL 0AD4, _strcat
Ich hör jetzt erst einmal auf, damit Du das alles verdauen kannst.