1

czy ktoś może ma przykład, lub mógłby wytłumaczyć jak krowie na rowie jak wywołać procę w asm z parametrami z poziomu C (cc65) - czyli taki odpowiednik usr w basicu? prockę sobie mam w jakimś miejscu w pamięci, z góry ustalonym oczywiście.

PunBB bbcode test

2 Ostatnio edytowany przez epi (2011-05-02 21:23:26)

Przykład:

// foo.h
int foo(int k, char m);
; foo.s
.import popa, popax
.export _foo

.proc _foo

 jsr popa
 sta m
 jsr popax
 sta kl  ; mlodsze 8 bitow k
 stx kh ; starsze 8 bitow k

; ... zrob cos

 lda wynik
 ldx wynik+1
 rts
 
.endproc

Jeśli zadeklarujesz jako fastcall, to odpada pierwsze jsr popa(x):

int __fastcall__ foo(int k, char m);

Zamiast ustalać miejsce procedurki z góry, użyj ca65 + ld65 (w przypadku więcej niż jednego parametru i/lub bez __fastcall__ jest to właściwie konieczność, bo inaczej nie zgadniesz gdzie są popa i popax - po to jest linker).

Samo wywołanie niczym się nie różni od normalnego wywołania funkcji:

// bar.c
#include "foo.h"
void bar(void)
{
    int q = foo(12345, 'c');
    // ...
}

Więcej przykładów w źródłach runtime cc65.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.