I sprawdziłem... Znalazłem disassemblację ROMu CPC -
http://www.cpcwiki.eu/index.php/ROM-Listing_CPC_464/664/6128Niestety jest po niemiecku i w bitmapach więc słabo się szuka, ale da się znaleźć istotne informacje.
Obsługa CALL siedzi (w 464, bo to przeglądałem, ale reszta powinna być chyba zbliżona) pod adresem F1BA. Najpierw pobiera adres wywołania (czyli pierwszy parametr) i zapisuje go pod adres AE72. Potem zapamiętuje stos do zmiennej a następnie w pętli pobiera kolejne parametry - za każdym razem używa procedury CE91, która parsuje wyrażenia i zwraca wartość w DE (zachowując pozostałe rejestry). Tak pobrana wartość zrzucana jest na stos a na zakończenie pętli do A zapisywana jest faktyczna liczba odczytanych parametrów i wykonywany jest kod:
ld ix,0
add ix,sp
rst 18
dw ae72
Restart 18 to procedura "dalekiego wywołania" z ewentualnym przełączaniem banków itp. Procedura nie rusza IX tylko pobiera parametr podany za RST do DE przestawiając równocześnie na stosie adres powrotu o dwa bajty. Pobrany parametr traktowany jest jako wektor skoku - spod tego adresu pobierany jest jeszcze raz do DE adres - tym razem właściwy adres wywoływanej przez BASICowy CALL procedury i następuje skok do niego poprzez kombinację PUSH DE/RET.
Oczywiście w samej procedurze dzieje się więcej, ale zasadniczo nie ma to znaczenia dla meritum sprawy. Istotne jest to, że na wejściu do wywoływanej procedury w IX znajduje się kopia SP tuż sprzed RST czyli IX wskazuje na ostatni parametr więc jednak jeśli wywołujemy procedurę z jednym parametrem to znajduje się on pod (IX+0)+ 256*(IX+1).
Jakby ktoś chciał sprawdzać głębiej, to obsługa CALL w PDFie znajduje się na stronie 554, RST 18 na stronie 217 a sama procedura obsługi skoku na stronie 233.