CPC BASIC Komenda „CALL”

Oct 27 2020

Ostatnio bawiłem się emulatorem Amstrad CPC. Od lat nie pisałem kodu BASIC-a, ale kiedyś naprawdę korzystałem z CPC.

W każdym razie, patrząc na dokumentację online, widzę, że CPC ma CALLpolecenie do wykonywania dowolnych podprogramów kodu maszynowego Z80. Jednak mam problem ze znalezieniem dużej ilości dokumentacji na ten temat; większość list poleceń mówi tylko „jeśli nie wiesz, co to jest, nie dotykaj tego!”

CALLnastępuje adres kodu maszynowego do wykonania. Przypuszczalnie prosta instrukcja powrotu z podprogramu spowoduje powrót do języka BASIC, kiedy skończysz.

Pozostaje to problem przekazywania danych między BASICem a kodem maszynowym. W szczególności CALLpolecenie wydaje się akceptować dodatkowe parametry po adresie początkowym, ale nie wydaje się, aby zostało udokumentowane, co one faktycznie robią. (Niestety wydaje się, że nie ma sposobu na zwrócenie wyników z powrotem do języka BASIC).

Odpowiedzi

5 MichaelGraf Oct 27 2020 at 05:15

Call akceptuje tylko liczby całkowite i wskaźniki jako parametry; obie są wartościami 16-bitowymi. Parametry są umieszczane na stosie BASIC. IX wskazuje na szczyt tego stosu. Liczba parametrów jest umieszczana w A. Operacja kodu maszynowego musi ją stamtąd pobrać, w tym określić (lub po prostu założyć) typ danych parametrów.

Na przykład patrz np http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC; ale uważaj, że opis jest trochę zagmatwany.

Zwróć uwagę, że przekazując wskaźnik, skutecznie przekazujesz przez odwołanie, więc wartość może zostać zwrócona do wskazywanej zmiennej.

1 Raffzahn Oct 27 2020 at 05:55

Kilka wskazówek:

  • Fajną książką do robienia assemblacji Z80 z jakiegoś HLL POV zawsze były podprocedury języka asemblera Z80 Osborne'a .

  • W przypadku adresów specyficznych dla CPC możesz zajrzeć na strony związane z CPC, takie jak CPCWIKI

  • Ogólna instrukcja powrotu 8080 to RET(C9h)

  • Warunkowy zwrot jest RET xxwarunkiem xx.