Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 20.12.2012, 14:47
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Цитата:
а может вообще готовый модуль существует подточенный под распознавание паскаля?!...
может pascal script как-то припахать
__________________
>woweook<
Ответить с цитированием
Этот пользователь сказал Спасибо Pyro за это полезное сообщение:
sas9568635 (05.09.2013)
  #17  
Старый 04.09.2013, 23:54
sas9568635 sas9568635 вне форума
Прохожий
 
Регистрация: 14.07.2012
Сообщения: 21
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Форма.Таймер. В таймере выполняются процедуры. Необходимо сделать так что-бы после того как тайиер END(ВНЕ ТАЙМЕРА) вызывалась процедура. Как это сделать?
Ответить с цитированием
  #18  
Старый 05.09.2013, 00:29
sas9568635 sas9568635 вне форума
Прохожий
 
Регистрация: 14.07.2012
Сообщения: 21
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

С тех пор как я создал эту тему прошло немало времени и своё «детище» я уже выпустил «в свет». Желающие могут скачать здесь:

SAS emulator 1.2 Beta (от 04.08.2013) (Размер:1.047 Mb)
Скачать:
http://file.oboz.ua/download.php?fid=394807

Если программа пожалуется на отсутствие qtintf.dll Скачайте его здесь http://file.oboz.ua/download.php?fid=337370 и распакуйте из qtintf.7z в основной каталого эмулятора (там где SASEmulator.exe). Хотя у меня она работает без него.
===============================================
У пользователя есть возможность переназначить соответствия клавиш вашей клавиатуры к клавиатуре ПК-01 «Львов» эмулятора. Сводится это к созданию и настройке файла SASEmulator.key в каталоге эмулятора. Подробности описывать не буду. При желании рассмотрите черновик-архив Keyboard.7z. Файл Keyboard.dpr
который может быть редактирован, скомпилирован и запущен для создания SASEmulator.key.
Скачать здесь: http://file.oboz.ua/download.php?fid=337372

Хотелось бы услышать критику и пожелания. А так же у меня просьба протестировать на разных компах (слабых и мощных, старых и новых) (и на разных системах) на выявления торможения и других глюков. Не «за горами» выйдет новая версия программы
(не пропустите “мимо глаз” моё предыдущее сообщение вопрос о таймере :-) )
Ответить с цитированием
  #19  
Старый 05.09.2013, 01:42
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

"По таймеру", но "вне таймера"... В голову приходит только PostMessage с соответствующей обработкой (гуглить WM_USER).

А переход в Open-Source не планируешь?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение:
sas9568635 (05.09.2013)
  #20  
Старый 05.09.2013, 09:50
sas9568635 sas9568635 вне форума
Прохожий
 
Регистрация: 14.07.2012
Сообщения: 21
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Вот таймер 1 который временами дает глюки...
Цитата:
procedure TMainFormEmu.TimerMainTimer(Sender: TObject);
begin
i8080_do_opcodes(opcodes_to_run);// блок команд КР580
RefreshScreen;// перечертить экран
end;
Вот таймер 2 который будет в следующей версии(в меню можно будет выбрать способ вывода 1 или 2) Этом таймер я еще не проверил так как глюков не появлялось...
RDTSCfirstStart — флаг первого запуска, необращай внимания
GetTestRDTSC_ - измерянное кол-во таков RDTSC в 1 сек
RDTSCbak- бывшее состояние RDTSC
RDTSC1fps — колво тактов RDTSC в 1/50 секунду при FPS=50
RDTSC — текущее RDTSC

Цитата:
function RDTSC: int64; assembler; asm db $0F,$31 end;

procedure TMainFormEmu.TimerRDTSCTimer(Sender: TObject);
begin
if not RDTSCfirstStart then begin RDTSCfirstStart:=True; RDTSCbak:=RDTSC; end;//первый запуск таймера
RDTSC1fps:=Round((GetTestRDTSC_/FPS)*{поправка}(100/173));
if RDTSC >= RDTSCBAK+RDTSC1fps then begin
RDTSCbak:=RDTSC; RDTSCBAK:=RDTSCBAK+RDTSC1fps;
i8080_do_opcodes(opcodes_to_run);// блок команд КР580
RefreshScreen;// перечертить экран
end;
Соль второго таймера, что отсчёт времени начинается СРАЗУ после того как закончился предыдущий отсчёт времени (RDTSCbak:=RDTSC; RDTSCBAK:=RDTSCBAK+RDTSC1fps и процедуры ( i8080_do_opcodes(opcodes_to_run) RefreshScreen выполняются когда «часики уже тикают»....
А вот в первом, врядле так оно. Поетому я хочу в 1 таймере вынести выполнение за пределы таймера т.*е. чтобы они выполнялись по end-таймеру....
Правильно ли я мыслю?.... даст ли это чего?..
Ответить с цитированием
  #21  
Старый 05.09.2013, 15:24
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

На многопроцессорных (многоядерных) машинах вместо RDTC лучше и безопасней использовать QueryPerformanceCounter/QueryPerformanceFrequency, иначе возможны глюки.

Про таймеры ничего не понял из объяснения.
Ответить с цитированием
Этот пользователь сказал Спасибо Freeman за это полезное сообщение:
sas9568635 (05.09.2013)
  #22  
Старый 06.09.2013, 09:38
sas9568635 sas9568635 вне форума
Прохожий
 
Регистрация: 14.07.2012
Сообщения: 21
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Уважаемые форумчане! Обращаюсь к тем кто скачивал и запускал (пользуется) моим эмулятором ( http://sas.forumbb.ru/click.php?http...php?fid=394807 ). Очень прошу Вас написать о его торможении. Имеется ли оно?... Часто ли?... Может как-то знаете или поняли как избавляться от него?.. Стоит ли мне думать о том как от него в эмуляторе избавится??!!.. (если оно есть конечно). :-)
У меня лично — всё в порядке! Но это если в памяти «висит» Дельфи 7. Как это зависимо ума не приложу. :-) Напишите пожалуйста при каких случаях у Вас всё хорошо (или плохо).
С уважением, SAS,
автор SAS emulator.
Ответить с цитированием
  #23  
Старый 06.09.2013, 13:49
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Не понял, в чем должно выражаться торможение? Никогда не играл на "Львове", сразу предупреждаю.

Скачал, запустил. Загрузил игру Columns -- идет очень быстро даже на 0-м уровне, загрузил Almaz -- человечек движется на одну клетку в выбранном направлении, потом замирает. Охранник при этом исправно скачет во всех направлениях, -- он явно парень не тормоз.

Вчера, когда только скачал программу, но не запускал, подумал, что мог бы взять код на обзор (code review) под NDA. Сегодня же, запустив эмулятор, понял, что это будет слишком уныло. Тем не менее, готов выслушать автора в личке.
Ответить с цитированием
Этот пользователь сказал Спасибо Freeman за это полезное сообщение:
sas9568635 (06.09.2013)
  #24  
Старый 06.09.2013, 15:51
sas9568635 sas9568635 вне форума
Прохожий
 
Регистрация: 14.07.2012
Сообщения: 21
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Freeman, тебе отпишу позже.

Приношу извинения за то что не пояснил что подразумевается под «торможение»...
Привожу тест для его определения.
Надеюсь от подобного теста Вы получите удовольствие. :-)
Запустите 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 секундах)
Заранее благодарен за внимание к моему эмулятору и за проведенный тест.

Цитата:
Сообщение от Freeman
Вчера, когда только скачал программу, но не запускал, подумал, что мог бы взять код на обзор (code review) под NDA.
??!! Я не пойму этого предложения?!... Ты хочешь мой код на обзор?... Дак что имменно?... Могу дать только какую-то часть кода.
Цитата:
Сообщение от Freeman
Сегодня же, запустив эмулятор, понял, что это будет слишком уныло. Тем не менее, готов выслушать автора в личке.
??!!! Тоже не совсем понял.. :-) О чём нужно меня слушать... и именно в личке. Если есть, о чём лично переписываться дак давай тогда Е-майлом (кинь мне в ЛС свой е-майл) так удобней думаю будет.

Последний раз редактировалось M.A.D.M.A.N., 06.09.2013 в 17:48.
Ответить с цитированием
  #25  
Старый 06.09.2013, 18:56
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

запустил, посмотрел, вроде все работает, но как-то медленновато.
не желаете исходники открыть?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
sas9568635 (06.09.2013)
  #26  
Старый 06.09.2013, 19:03
sas9568635 sas9568635 вне форума
Прохожий
 
Регистрация: 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;

Последний раз редактировалось sas9568635, 06.09.2013 в 19:14.
Ответить с цитированием
  #27  
Старый 06.09.2013, 19:24
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от sas9568635
О чём нужно меня слушать... и именно в личке.
Открыть код под NDA -- означает "под подписку о неразглашении". Мож ты потом эмулятор продавать собрался, я же не знаю.

Я занимаюсь разработкой компилятора, на форуме даже была где-то тема. Сейчас попал в творческий кризис, ищу вдохновение. Показалось, что контакт с энтузиастом по схожей тематике был бы обоюдно полезен.

С утра повикипедил немного про КР580. Он и в "Микроше" стоял, оказывается. Помню, как облизывался тогда, но денег на эту игрушку тупо не было. А так хоть бы в эмуляторе ознакомился...

Цитата:
Сообщение от sas9568635
Выберите в Комбобокс игру: «Аэрокобра(1)» либо откройте её имя файла:Аэрокобра1.LVT
Попробовал и еще раз убедился, что играть в вертолетики -- не для меня. Увы. Тут уже тестировщик нужен с терпением. Ну, или программист с отладчиком, как вариант.

Цитата:
Сообщение от sas9568635
Полностью нет! А саму процедуру вывода на экран?!... Хм.. будет ли смысл...
Если это реальный код из проекта, боюсь, простым обзором тут не обойдешься. Тем не менее, разговоры об архитектуре все же имеют смысл... Наверное...
Ответить с цитированием
Этот пользователь сказал Спасибо Freeman за это полезное сообщение:
sas9568635 (06.09.2013)
  #28  
Старый 06.09.2013, 20:21
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Артефакты вот

А открывать исходники, я имел ввиду для того, чтобы заинтересованный народ мог оптимизировать код, если у вас в этом потребность возникнет.

И да, делал на курсовую (почти полностью перепилил CPU (это порт бокса на дельфи)) эмуль кампутера с возможностью управления процессором (проект забросил, не интересно стало, а так, эмуль проца использовал для эмуляции всякого кода в своих программах).

__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 06.09.2013 в 20:25.
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
sas9568635 (06.09.2013)
  #29  
Старый 06.09.2013, 20:24
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Упс, прошу прощения, это ракета
А показалось, будто артефакт.

Эх, блин, детство вспомнил, глядя на ваши игрушки))
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 06.09.2013 в 21:08.
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
sas9568635 (06.09.2013)
  #30  
Старый 06.09.2013, 23:25
sas9568635 sas9568635 вне форума
Прохожий
 
Регистрация: 14.07.2012
Сообщения: 21
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Эх, блин, детство вспомнил, глядя на ваши игрушки))
:-)
Да игрушки то в общем-то не мои :-) Мой эмулятор! :-):-):-)
Автор Аэрокобры для ПК-01 - Чистяков, там в игре написано :-):-):-)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter