CPC BASIC команда «ВЫЗОВ»
Недавно поигрался с эмулятором Amstrad CPC. Я не писал код BASIC в течение многих лет, но в свое время я действительно использовал CPC по-настоящему.
В любом случае, просматривая документацию в Интернете, я вижу, что в CPC есть CALLкоманда для выполнения произвольных подпрограмм машинного кода Z80. Однако мне трудно найти много документации по этому поводу; в большинстве списков команд просто сказано: «Если вы не знаете, что это, не трогайте!»
CALLза ним следует адрес выполняемого машинного кода. Предположительно, простая инструкция возврата из подпрограммы вернет вас обратно в BASIC, когда вы закончите.
Остается проблема передачи данных между BASIC и машинным кодом. В частности, CALLкажется , что команда принимает дополнительные параметры после начального адреса, но, похоже, не задокументировано, что они на самом деле делают. (К сожалению, способа вернуть результаты обратно в BASIC нет.)
Ответы
Call принимает в качестве параметров только целые числа и указатели; оба являются 16-битными значениями. Параметры помещаются в стек BASIC. IX указывает на вершину этой стопки. Число параметров помещается в A. Операция машинного кода должна взять его оттуда, включая выяснение (или просто предположение) типа данных параметров.
Для примера см., Например, http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC; но учтите, что описание может немного запутать.
Обратите внимание, что когда вы передаете указатель, вы фактически передаете его по ссылке, поэтому значение может быть возвращено переменной, на которую указывает.
Несколько указателей:
Хорошей книгой для сборки Z80 из некоторых HLL POV всегда были подпрограммы языка ассемблера Z80 Osborne .
Для адресов, специфичных для CPC, вы можете посмотреть сайты, связанные с CPC, такие как CPCWIKI.
И общая инструкция возврата 8080 RET(C9h)
Условный возврат
RET xxс условием xx.