Ne Library wäre z.b. das cpctelera. Ich nutze aber quasi meine eigene library.
Es gibt zuerst eine startup-datei in assembler für den c-code. Wenn man in C keine globale initialisierte variablen benutzt, braucht man in dieser startup-datei nix anderes tun als .org #4712 und dann jp _main. Der Assembler kennt alle c-variablen und funktionen indem man ein _ davor schreibt. Was passiert: ich lande automatisch in meiner void main(void). Hier kann ich dann meine eigenen lib-funktionen aufrufen.
Ich nutze kein cpctelera, da ich schon ganz gerne mein eigener herr bin und das cpctelera ja eher generisch ist und viele dinge (noch) nicht kann. Ich schaue mir natürlich gerne an, wie die manche sachen lösen.
So sieht dann z.B. eine Lib-Funktion von mir aus:
void ClsC000(void) __naked
{
__asm
ld hl, #0xc000
ld ( hl ), #0
ld de, #0xc001
ld bc, #0x3FFF
ldir
ret
__endasm;
}
Das naked heisst übrigens das die funktion nix automatisch rettet und ich dafür verantwortlich bin, dass die register dannach korrupt sind.
Anderes Beispiel, wo der compiler die register rettet (den code sieht man natürlich nicht hier):
void SetColorDirect(unsigned char nColorIndex, unsigned char nPalette)
{
nColorIndex;
nPalette;
__asm
ld ix, #2 ;; [3] IX Points to SP+2 (first 2 bytes are return address)
add ix, sp ;; [3] , to use it for getting parameters from stack
ld e, 0( ix )
ld l, 1( ix )
ld b, #0x7f
ld c, e
di
out (c), c
ld c, l
out (c), c
ei
__endasm;
}