CPC BASIC "CALL"명령

Oct 27 2020

최근에 저는 Amstrad CPC 에뮬레이터를 가지고 놀았습니다. 몇 년 동안 BASIC 코드를 작성하지 않았지만 예전에는 실제로 CPC를 실제로 사용했습니다.

어쨌든 온라인 문서를 보면 CPC에 CALL임의의 Z80 기계 코드 서브 루틴을 실행 하는 명령이 있음을 알 수 있습니다. 그러나 이에 대한 많은 문서를 찾는 데 어려움이 있습니다. 대부분의 명령 목록은 "이게 뭔지 모르면 건드리지 마세요!"라고 말합니다.

CALL다음에 실행할 기계어의 주소가옵니다. 아마도 간단한 서브 루틴에서 복귀 명령을 사용하면 완료되면 BASIC으로 돌아갈 수 있습니다.

그러면 BASIC과 기계어 코드간에 데이터를 전달하는 방법에 대한 문제가 남습니다. 특히 CALL명령은 시작 주소 뒤에 추가 매개 변수를 허용하는 것처럼 보이지만 실제로 수행하는 작업에 대해서는 문서화되지 않은 것 같습니다. (슬프게도 결과를 BASIC으로 되 돌리는 방법이없는 것 같습니다.)

답변

5 MichaelGraf Oct 27 2020 at 05:15

호출은 정수와 포인터 만 매개 변수로 허용합니다. 둘 다 16 비트 값입니다. 매개 변수는 BASIC 스택에 배치됩니다. IX는 해당 스택의 맨 위를 가리 킵니다. 매개 변수의 수는 A에 입력됩니다. 기계 코드 작업은 매개 변수의 데이터 유형을 파악 (또는 가정)하는 것을 포함하여 거기에서 가져와야합니다.

예를 들어, 예를 참조하십시오. http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC; 하지만 설명이 약간 혼란 스러울 수 있습니다.

포인터를 전달할 때 효과적으로 참조로 전달하므로 가리키는 변수에 값이 반환 될 수 있습니다.

1 Raffzahn Oct 27 2020 at 05:55

몇 가지 지침 :

  • 일부 HLL POV에서 Z80 어셈블리를 수행하는 좋은 책은 항상 Osborne의 Z80 어셈블리 언어 서브 루틴 이었습니다.

  • CPC 특정 주소의 경우 CPCWIKI 와 같은 CPC 관련 사이트를 살펴볼 수 있습니다.

  • 그리고 일반 8080 반환 명령은 RET(C9h)

  • 조건부 반환은 RET xxxx를 조건으로합니다.