PDA

Просмотр полной версии : Программирование на free Pascal в OS4.1



Smalovsky
02.09.2023, 16:44
Написал такую программку( выводит текст в окно, стрелками влево-вправо можно его подвигать):

Program Window;
uses exec, sysutils, utility, intuition,agraphics,diskfont;
procedure Paint(AWin:PWindow;x:SmallInt;y:SmallInt);
var
str:AnsiString;
begin
SetRast(AWin^.RPort,0);
str:='Amiga text';
SetAPen(AWin^.RPort,1);
SetDrMd(AWin^.RPort,JAM1);
GFXMove(AWin^.RPort,x,y);
GFXText(AWin^.RPort,PChar(str), Length(str));
end;
var
win:PWindow;
done:Boolean=False;
Msg:PMessage;
tatr:TTextAttr;
pfont:PTextFont;
fname:AnsiString;
key:Word;
x:SmallInt=50;
y:SmallInt=50;
begin
win:=OpenWindowTags(nil,
[WA_Width,AsTag(300),
WA_Height,AsTag(200),
WA_MaxWidth,AsTag(640),
WA_MaxHeight,AsTag(256),
WA_MinWidth,AsTag(100),
WA_MinHeight,AsTag(100),
WA_Title,AsTag('My Window'),
WA_DepthGadget,AsTag(True),
WA_SizeGadget,AsTag(True),
WA_DragBar,AsTag(True),
WA_Activate,ASTag(True),
WA_Flags,WFLG_Closegadget or WFLG_GIMMEZEROZERO,
WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_REFRESHWINDOW or IDCMP_RAWKEY ,
TAG_END]);
fname:='topaz.font';
tatr.ta_Name:=PChar(fname);
tatr.ta_YSize:=8;
tatr.ta_Flags:=0;
tatr.ta_Style:=0;
//IF OpenDiskFont(@tatr)<>nil then write('OK!');
pfont:= OpenDiskFont(@tatr);
SetFont(Win^.RPort,pfont);
Paint(win,x,y);
repeat
key:=0;
//WaitPort(Win^.UserPort);
Msg:=GetMsg(Win^.UserPort);
if Msg<>nil then
begin
case PIntuiMessage(Msg)^.IClass of
IDCMP_CloseWindow:
begin
done:=True;
continue;
end;
IDCMP_REFRESHWINDOW:
Paint(Win,x,y);
IDCMP_RAWKEY:
key:= PIntuiMessage(Msg)^.Code;
end;
ReplyMsg(Msg);
end;
if (key<>0) and (key=$4F) or (key=$4E) then
begin
case key of
$4f:
x:=x-1;
$4E:
x:=x+1;
end;
Paint(Win,x,y);
end;

Until done;
CloseWindow(Win);
end.


В общем окно с текстом появилось. Заметил странность с обработкой событий для нажатия клавиш. После нажатия и удержания клавиши( стрелка влево или вправо) текст сразу смещается на один пиксель, а затем дальнейшее смещение текста происходит через паузу в одну секунду. Нет ли в ОС какой настройки автоповтора для клавиатуры? Если такая настройка есть, как поменять её программно?
Пробовал менять палитру функцией SetRGB4. При смене палитры цвета меняются для всего экрана. И вопрос, какие индексы цветов использует система? Я хочу настроить палитру для окна, но что бы не изменять цветовые настройки вокбенча.

Smalovsky
06.09.2023, 14:13
Кодеров под амигу не осталось?
Разобрался с воркбенчем. Он использует первые 16 индексов в таблице цветов. Но ,всё равно, программировать графику через битовые плоскости с ограничением в 256 индексированных цветов это не то, что мне хочется на PPC. Полюбому нужно оваивать cybergraphics.librarry, в которой есть 24-32 битные цвета и пиксельные массивы.
Осваиваю ассемблер. Пока научился получать доступ к переменным. Для примера программа, в которой к переменной x прибавляется 55:


Program Test_FPC;
var
i:LongInt;
begin
i:=680000;

asm
addis r2,r0,i@hi
ori r2,r2,i@l
lwz r3,(r2)
addi r3,r3,55
stw r3,(r2)
end;

write('result'#10#13'');
write('i=', i,''#10#13'');

end.



Так кодеров вообще не осталось?..

CityAceE
06.09.2023, 16:58
Так кодеров вообще не осталось?
Я только писал эмулятор Спектрума (https://zx-pk.ru/threads/21181-emulyator-zx-pilot-dlya-palm-os.html) под совместимый процессор. В качестве справочника использовал книгу для Амиги.

Smalovsky
06.09.2023, 17:03
CityAceE, я использую другой ассемблер и другой процессор( PowerPC 604e Phase5 CyberStorm).

kas1e
07.09.2023, 08:06
Под Паскаль точно не найдешь кодеров на ОС4, все только C/C++