GBA ASM - День 24: Компилирование вместе с C — Архив WASM.RU

Все статьи

GBA ASM - День 24: Компилирование вместе с C — Архив WASM.RU

Компиляция с C?

Да, сегодня мы используем как ASM, так и C++-функции в отдельных файлах, скомпилировав оба.

C++-файле

В test.cpp :

/* НАЧАЛО КОДА */
#include "C:\devkitadv\include\gba.h"

extern "C" {
void SetThePixel(); /* ASM-функция использует C-соглашение */
}

int main() {
	REG_DISPCNT = 0x403; /* режим 3 */
	SetThePixel(); /* ASM-функция */
	while((*KEYS)&KEY_START);  /* ждём нажатия на клавишу 'Start' */
	REG_DISPCNT = 0; /* нет режима (точка исчезнет) */
	while(1);
	return 0;
}
/* КОНЕЦ КОДА */

ASM-файл

В test.S :

@-- НАЧАЛО КОДА --@ .global SetThePixel SetThePixel: ldr r1,=0x6000200 ldr r2,=0x00FF str r2,[r1] @ красная точка где-то на экране bx lr @return; @-- CODE END --@

Замечание: сделайте перевод строки в конце каждого из файлов.

Компиляция

Считая, что оба исходника находятся в одной директории и C:\devkitadv\bin\ находится на пути, то для компиляции потребуется следующее:

	gcc test.S test.cpp
	objcopy -O binary a.out test.gba

Затем запустите TEST.GBA, чтобы убедиться в работоспособности примера.

Обзор этого дня

Ссылки:

  • Пост по этой теме на форуме GBADev.ORG.
  • Ссылка, где объясняется, почему необходим "extern "C"".

Надеюсь, вам понравилось.

2002-2013 (c) wasm.ru