
06.09.2013, 19:03
|
Прохожий
|
|
Регистрация: 14.07.2012
Сообщения: 21
Версия Delphi: Delphi 7
Репутация: 10
|
|
Цитата:
Сообщение от M.A.D.M.A.N.
запустил, посмотрел, вроде все работает, но как-то медленновато.
|
А что значит медленовато?!... Сколько по времени?... Вы по тесту делали который я предлагал? ( в сообщении 24)
Цитата:
Приношу извинения за то что не пояснил что подразумевается под «торможение»...
Привожу тест для его определения.
Надеюсь от подобного теста Вы получите удовольствие. :-)
Запустите SASEmulator1.2Beta
Выберите в Комбобокс игру: «Аэрокобра(1)» либо откройте её имя файла:Аэрокобра1.LVT
При необходимости проверьте (либо установите) FPS=50, Freq/fps=68000
Установите графический режим 768х512 Меню:Tools\Graphic Mode\768x512
На экране заставка Aerocobara. Нажмите пробел.
На экране: «Ваша задача — забрать....»
Подготовьте часы так чтобы было видно секунды (на компе).
При нажатии пробела одновременно запомните время минуты и секунды.
Происходит «синяя» очистка экрана и далее пошла игра.
Пройдите всеми правдами и не правдами :-) Первый уровень до момента окончания (синяя очистка, перед STAGE 02)
снимите показания времени.
При нормальной работе эмулятора без торможения, время прохождения 1-го уровня должно быть в пределах 47-51 секундах. У меня было 48сек(50сек). Чем ближе к 47 — тем лучше. :-)
При торможении время прохождения увеличивается. У меня было 78 сек.
При изменени граф.режима на 512х512 и торможении, время = 58 сек.
При торможении и увеличении граф.режима более чем 512х512, явно заметно изменение скорости игры по сравнению с более маленькими разрешениями (256х256). При нормальной работе — такого явно заметно быть не должно!... и время прохождения 1-го уровня (на любых граф. Режимах) остается в тех же пределах т.*е. (в пределах 47-51 секундах)
Заранее благодарен за внимание к моему эмулятору и за проведенный тест.
|
Цитата:
Сообщение от M.A.D.M.A.N.
не желаете исходники открыть?
|
Полностью нет! А саму процедуру вывода на экран?!... Хм.. будет ли смысл...
Код:
Var
VRAM : array [0..16383] of byte; // видео память
VRAMCardinal: array [0..4095] of Cardinal absolute VRAM; //буфер для быстрой прорисовки
VRAMDirty : array [0..16383] of Byte; //буфер для быстрой прорисовки
VRAMDirtyCardinal: array [0..4095] of Cardinal absolute VRAMDirty; //буфер для быстрой прорисовки
procedure TMainFormEmu.DrawScreen;
Var sClientWidth:Word;
sClientHeight:Word;car,{позиция по кардиналу} Byte_,{позиция по байту} ByteSM{байт смещения}:word;
smpx1,smpx2,smpx3,smpx4:word;// смещение для пикселов
begin
{$R-}
IF PortC1Dirty<>Ports[$C1] then
begin// ПОЛНАЯ ПЕРЕРИСОВКА
PortC1Dirty:=Ports[$C1]; fChangeVRAM:=false;
Byte_:=0;
While Byte_<16384 do
begin{***********}
sClientWidth:= (Byte_ mod 64)*4; sClientHeight:=(Byte_ div 64)*1;
smpx1:=sClientWidth;smpx2:=smpx1+1; smpx3:=smpx2+1; smpx4:=smpx3+1;
gamecanvas.Canvas.Pixels[smpx1,sClientHeight]:=SuperColor[ports[$C1],VRAM[Byte_],1];
gamecanvas.Canvas.Pixels[smpx2,sClientHeight]:=SuperColor[ports[$C1],VRAM[Byte_],2];
gamecanvas.Canvas.Pixels[smpx3,sClientHeight]:=SuperColor[ports[$C1],VRAM[Byte_],3];
gamecanvas.Canvas.Pixels[smpx4,sClientHeight]:=SuperColor[ports[$C1],VRAM[Byte_],4];
Byte_:=Byte_+1;
end;{***********}
for car := 0 to 4095 do VRAMDirtyCardinal[car]:= VRAMCardinal[car]; // быстрое копирование массивов
fChangeBitmap:=True;
end// ПОЛНАЯ ПЕРЕРИСОВКА
Else Begin // ЧАСТИЧНАЯ ПЕРЕРИСОВКА
car:=0;fChangeVRAM:=false;
while (car<=4095) do begin
if (VRAMCardinal[car]<>VRAMDirtyCardinal[car]) then Begin//сравниваем значения , а есть ли изменения
ByteSM:=0;
while (ByteSM<=3) do begin
Byte_:=(car*4)+ByteSM;
Begin{***********}
if (VRAM[Byte_]<>VRAMDirty[Byte_]) then //сравниваем значения , а есть ли изменения
begin
sClientWidth:= (Byte_ mod 64)*4; sClientHeight:=(Byte_ div 64)*1;
smpx1:=sClientWidth;smpx2:=smpx1+1; smpx3:=smpx2+1; smpx4:=smpx3+1;
gamecanvas.Canvas.Pixels[smpx1,sClientHeight]:=SuperColor[ports[$C1],VRAM[Byte_],1];
gamecanvas.Canvas.Pixels[smpx2,sClientHeight]:=SuperColor[ports[$C1],VRAM[Byte_],2];
gamecanvas.Canvas.Pixels[smpx3,sClientHeight]:=SuperColor[ports[$C1],VRAM[Byte_],3];
gamecanvas.Canvas.Pixels[smpx4,sClientHeight]:=SuperColor[ports[$C1],VRAM[Byte_],4];
VRAMDirty[Byte_]:= VRAM[Byte_];
fChangeBitmap:=True;
end;{***********}
end;
ByteSM:=ByteSM+1;
end;// while (ByteSM<=3) do begin
VRAMDirtyCardinal[car]:= VRAMCardinal[car];
end; // if (VRAMCar[ic]<>VRAMDirtyCar[ic])
car:=car+1;
end;//while (ic<=4096) do begin
end;// ЧАСТИЧНАЯ ПЕРЕРИСОВКА
if fChangeBitmap then // если были изменения экрана
Begin
MainFormEmu.Canvas.StretchDraw(rect(0,ToolBar1Height,MainFormEmuClientWidth,MainFormEmuClientHeight),gamecanvas);
fChangeBitmap:=False;
end;
{$R+}
end;
|