@researcher1111

Ошибка компиляции D кода?

Пытаюсь скомпилировать нагло взятый отсюда (OsDev Wiki) код:
module kernel.main;
 
extern(C) void main(uint magic, uint addr) {
        int ypos = 0; //Starting points of the cursor
	int xpos = 0;
	const uint COLUMNS = 80; //Screensize
	const uint LINES = 25;
 
	ubyte* vidmem = cast(ubyte*)0xFFFF_8000_000B_8000; //Video memory address
 
	for (int i = 0; i < COLUMNS * LINES * 2; i++) { //Loops through the screen and clears it
            volatile *(vidmem + i) = 0;
	}
 
	volatile *(vidmem + (xpos + ypos * COLUMNS) * 2) = 'D' & 0xFF; //Prints the letter D
	volatile *(vidmem + (xpos + ypos * COLUMNS) * 2 + 1) = 0x07; //Sets the colour for D to be light grey (0x07)
 
	for (;;) { //Loop forever. You can add your kernel logic here
	}
}

Коммандой gdc -c kernel.main.d -o kernel.main.o -g

Выдает ошибку:
gdc -c kernel.main.d -o kernel.main.o -g
kernel.main.d:12:4: error: undefined identifier 'volatile'
    volatile *(vidmem + i) = 0;
    ^
kernel.main.d:15:2: error: undefined identifier 'volatile'
  volatile *(vidmem + (xpos + ypos * COLUMNS) * 2) = 'D' & 0xFF; //Prints the letter D
  ^
kernel.main.d:16:2: error: undefined identifier 'volatile'
  volatile *(vidmem + (xpos + ypos * COLUMNS) * 2 + 1) = 0x07; //Sets the colour for D to be light grey (0x07)
  ^


Как пофиксить?
  • Вопрос задан
  • 404 просмотра
Пригласить эксперта
Ответы на вопрос 1
fzfx
@fzfx
18,5 дм
Ознакомьтесь, как-раз про volatile в gdc: https://bugzilla.gdcproject.org/show_bug.cgi?id=126
Попробуйте использовать атрибут @volatile, или заменить volatile на shared, или и то, и то вместе.
Ещё вариант: forum.dlang.org/post/m27g5bqb16.fsf@comcast.net
Если что-то из этого поможет - будьте добры, отпишитесь тут, что именно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы