CPC BASIC команда «ВЫЗОВ»

Oct 27 2020

Недавно поигрался с эмулятором Amstrad CPC. Я не писал код BASIC в течение многих лет, но в свое время я действительно использовал CPC по-настоящему.

В любом случае, просматривая документацию в Интернете, я вижу, что в CPC есть CALLкоманда для выполнения произвольных подпрограмм машинного кода Z80. Однако мне трудно найти много документации по этому поводу; в большинстве списков команд просто сказано: «Если вы не знаете, что это, не трогайте!»

CALLза ним следует адрес выполняемого машинного кода. Предположительно, простая инструкция возврата из подпрограммы вернет вас обратно в BASIC, когда вы закончите.

Остается проблема передачи данных между BASIC и машинным кодом. В частности, CALLкажется , что команда принимает дополнительные параметры после начального адреса, но, похоже, не задокументировано, что они на самом деле делают. (К сожалению, способа вернуть результаты обратно в BASIC нет.)

Ответы

5 MichaelGraf Oct 27 2020 at 05:15

Call принимает в качестве параметров только целые числа и указатели; оба являются 16-битными значениями. Параметры помещаются в стек BASIC. IX указывает на вершину этой стопки. Число параметров помещается в A. Операция машинного кода должна взять его оттуда, включая выяснение (или просто предположение) типа данных параметров.

Для примера см., Например, http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC; но учтите, что описание может немного запутать.

Обратите внимание, что когда вы передаете указатель, вы фактически передаете его по ссылке, поэтому значение может быть возвращено переменной, на которую указывает.

1 Raffzahn Oct 27 2020 at 05:55

Несколько указателей:

  • Хорошей книгой для сборки Z80 из некоторых HLL POV всегда были подпрограммы языка ассемблера Z80 Osborne .

  • Для адресов, специфичных для CPC, вы можете посмотреть сайты, связанные с CPC, такие как CPCWIKI.

  • И общая инструкция возврата 8080 RET(C9h)

  • Условный возврат RET xxс условием xx.