ПК-01 ЛЬВОВ

форум о ПК-01,02 "Львов"
Текущее время: 30 мар 2020, 13:05

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 26 сообщений ]  На страницу 1 2 След.
Автор Сообщение
 Заголовок сообщения: SAS еmulator
СообщениеДобавлено: 15 сен 2012, 20:48 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Посты про SAS еmulator, вынесено из темы Хочу написать свой эмулятор ПК-01 Львов на Delphi.
Цитата:
сорсы обязательно размещу !
Неплохо бы! Я хотел бы кое чего спионерить - "реализацию портов ввода вывода", а то мне надоело мусолить с втроенным в модуль DprToLvt (PasToLvt) толком недописаным эмулятором... :D хотелось бы приступить к самому компилятору... а вот без еще толком недописанного встр.эмулятора вроде как не могу...


Вернуться к началу
СообщениеДобавлено: 17 сен 2012, 19:28 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщения: 1009
Цитата:
???!!!! - Да я вообще-то написал тот пост так как он по теме "Хочу написать свой эмулятор ПК-01 Львов на Delphi"...:-) т.е для MARAT_BEST если он хочет конечно...
Я ничего не имею против Ваших постов. Возможно стоило разнести свой ответ на две части. Я предложил поискать метод бысторго доступа к пикселям изображения, показав, так сказать, направление. Только вот Делфи листинг я писать не буду, ибо конкретно подзабыл синтаксис.
Цитата:
А вообще я не понимаю.... Зачем отрисовка 50 раз в сек.... У меня отрисовывает часть (8х8) экрана только во время его вывода и только то (тот 8х8) что выводится?... И все впорядке! (Это вопрос ко всем)
Ваш эмуль полностью ест одно ядро процессора, при этом, не уверен, что он держит 100% скорости. Еще раз хочу обратить внимание на в корне неверный подход к принципам эмуляции. Вы не должны эмулировать каждую команду процессора по времени. Это надо делать "пачками", считая тики в переменной. Тогда и производительность будет хорошая, да и менять ее будет элементарно (соверменные компы с легкостью тянут практически любую скорость, хоть х2 хоть х1000) оставляя fps 50.


Вернуться к началу
СообщениеДобавлено: 17 сен 2012, 21:21 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Цитата:
...Еще раз хочу обратить внимание на в корне неверный подход к принципам эмуляции. Вы не должны эмулировать каждую команду процессора по времени. Это надо делать "пачками", считая тики в переменной.
Мой Эмулятор в модуле он вообщем-то и не должен быть с правильными принципами, он предназначен там дла дебагенья т.е. для пошаговой проверки и просмотра... поэтому все то что вы пишите не совсем к данному случаю... или разве что "под занавес", до которого мне еще очень далеко... :-) Я его еще не могу довести до ума хоть как-то неговоря уже про ИДЕАЛизирование...


Вернуться к началу
СообщениеДобавлено: 19 ноя 2012, 10:27 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Рассматривая код в эмуляторе...
Непойму зачем ВСЕ эти переменные определены как — INTEGER ?
Код:
    r_A : INTEGER;   // регистрики
    r_B : INTEGER;
    r_C : INTEGER;
    r_D : INTEGER;
    r_E : INTEGER;
    r_H : INTEGER;
    r_L : INTEGER;
    r_F : INTEGER;
    r_PC : integer;  // адрес в памяти
    r_SP : integer; 

  tmp  : integer;
  tmp3 : integer;
  tmp2 : integer;
  tmp1 : integer;
  opcode : integer;
Я вот сделал так...
Код:
var
  r_A : Integer; // регистрики
  r_B : Byte;
  r_C : Integer;
  r_D : Byte;
  r_E : word;
  r_H : Byte;
  r_L : word;
  r_F : Byte;
  r_PC : word; // адрес в памяти
  r_SP : word;


 tmp : Byte;
 tmp3 : Byte;
 tmp2 : integer;
 tmp1 : integer;
 opcode : Byte;


Не все получилось заменить на Byte; и word;

Насколько я понял увеличилось быстродействие скажем на 25%!!!???. Если я не ошибаюсь конечно.... самому странно...

Также заменил
r_PC:=r_PC+1; на Inc(r_PC); r_PC:=r_PC+2; на Inc(r_PC,2);
r_PC:=r_PC-1; на Dec(r_PC); r_PC:=r_PC-2; на Dec(r_PC,2);
clock:=clock+5;.... r_C:=r_C-1;....
и т.д.
Незнаю дает ли оно что-то или компилятор такой умный что без разницы... но по крайней мере выглядит аккуратней :-)

После того как некоторые переменные изменены с integer; на Byte;
можно повыкидывать подобное
Код:
  $1B: …...
      if (r_D<0) then
      begin
        r_D:=$FF;
      end;

  $13: ….
      if (r_D>$FF) then
      begin
        r_D:=0;
      end;
вопрос: А зачем в командах
$88,;89,8B,8C и т.д. Строка -
tmp2:=tmp2+0;
Что она дает?... Можно ли ее выкинуть?...


Вернуться к началу
СообщениеДобавлено: 19 ноя 2012, 13:16 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщения: 1009
sas9568635
Замена Integer на Word/Byte не увеличит быстродействия. А вот выбрасывание кода по проверке переполнения и замена плюсиков на инкрисы может незначительно ускорить, но никак не на 25%.

Насчет строки tmp2:=tmp2+0; ничего не знаю, откуда она появилась и какой в ней смысл. Выкинуть, думаю, можно и нунжно.

Кстати, а почему некоторые регистры стали Byte, а некоторые Word, а r_C вобще Integer остался?


Вернуться к началу
СообщениеДобавлено: 19 ноя 2012, 15:01 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Цитата:
sas9568635
Замена Integer на Word/Byte не увеличит быстродействия. А вот выбрасывание кода по проверке переполнения и замена плюсиков на инкрисы может незначительно ускорить, но никак не на 25%.
Поменял обратно на Integer к сожалению...
Цитата:
Насчет строки tmp2:=tmp2+0; ничего не знаю, откуда она появилась и какой в ней смысл. Выкинуть, думаю, можно и нунжно.
Ну в исходниках ты смотрел? команды те что я написал....
Смысла никакого не вижу else tmp2:=tmp2+0;...
я подумал что это когда "перепиливалось" от туда, от куда нельзя без else...
ну вот и вписали лишьбы что-то было...
А где такое есть?... в джаваскриптах есть? ну если then то и обязательно ветка else?..
Цитата:
Кстати, а почему некоторые регистры стали Byte, а некоторые Word, а r_C вобще Integer остался?
Я было пытался все их сделать Byte и Word и проверял на работоспособность... вот поэтому так и получилось... ну теперь то уже вернул обратно... там есть команды в которых есть проверка на отрицательное прежде чем его исхользовать как байт-положительное и т.д.


Вернуться к началу
СообщениеДобавлено: 04 июл 2013, 20:33 
Не в сети

Зарегистрирован: 21 авг 2012, 22:30
Сообщения: 137
немного офтопика

sas9568635
SAS еmulator 1.0Beta ?
ваше?
http://zx.pk.ru/showthread.php?t=21543

зачем 4 раза упоминать "вирусов нет"

от этого
складывается мнение "что они там есть"


Вернуться к началу
СообщениеДобавлено: 04 июл 2013, 20:58 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Цитата:
sas9568635
SAS еmulator 1.0Beta ?
ваше?
http://zx.pk.ru/showthread.php?t=21543
Моё!
Цитата:
зачем 4 раза упоминать "вирусов нет"
от этого складывается мнение "что они там есть"
Я про вирусы было вообще забыл...
Скачал было инсталятор Дельфи 7, а он был заражен каким-то вроде безвредным вирусом, но распространняемым по скомпилированным екзешникам... я бы ничего и не знал если бы не сервис http://f-bit.ru который отказал размещать мой архив из-за наличия вируса... после чего я «вернулся» к предыдущему Дельфи6 и скомпилировал в нём... перестраховался проверил ДокторВебом онлайн... вот поетому и пишу, что на вирусы проверен... а если так каким-то образом что-то окажется, я ведь ни виноват! Проверяйте файлы так как Вы считаете нужным!


Вернуться к началу
СообщениеДобавлено: 04 сен 2013, 00:19 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщения: 1009
По просьбам трудящихся на этой же машине потестил SASEmulator 1.2. Почему-то первый запуск был крайне медленным. Но зато потом все остальные работали явно шустрее. Как минимум, скорость при 256х256 выглядит почти идеальной. Порадовала смена расширения, огорчило отсутствие звука. Еще из особо неудобных вещей - невозможность сделать скриншот, нет подписей к кнопкам тулбара, кнопки не продублированы в меню и пропадают при уменьшении экрана, контролы со звездочками (те что стают красные) слишком уж странные, нельзя как-то переделать?


Вернуться к началу
СообщениеДобавлено: 04 сен 2013, 14:17 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Цитата:
Оказывается SASEmulator глючит не единоразово. Не знаю с чем связано, но он крайне капризно реагирует на какие-то ресурсы, так как иногда работает быстрее, чем LVOVulator, но иногда просто ужасно тормозит.
Сам не пойму! Поэтому и в инструкции к программе написал:
Цитата:
Притормаживание вывода на экран. При расширении формы эмулятора на весь экран возможно притормаживание вывода на экран. Я все усилия приложил для того, чтобы этого не было. Но оно бывает наблюдается и я не пойму почему. Вроде как само «приходит» и «уходит» Если возникла такая ситуация. То возможны следующие варианты выхода из нее: (во всяком случае у меня получалось)
1. Попробуйте, нажать Паузу и минут на 10 оставить комп «в покое», сходить покурить, например
2. Можно попробовать перезагрузку компа.
3. В зависимости от системы можно попробовать поменять «битность» экрана с 16бит на 32бит или наоборот.
4. Можно просто попробовать запустить эмулятор позже
   Я надеюсь, что это (притормаживание) только у меня на компе, так как мой ноутбук ограничен в видеопамяти, на других компах я не испытывал эмулятор. У других, желающих использовать мой эмулятор, будет все в порядке!
Вывод на экран у меня делается через StretchDraw остальное я убрал, может добавить все-таки еще
обычный Draw?...
Цитата:
Это полезная фича. Но если говорить о слабых машинах, то куда полезнее фреймскип.
А что это такое?... Поточнее можно?
Цитата:
Сейчас вся эмуляция выведена на таймер, стандартный ,
Ты хочешь сказать что если стандартный таймер заменить чем-то другим например RDTSC то будет всё в порядке?... Хм.. надо попробывать. Но говорят, RDTSC очень нестабилен (неточный)..
Цитата:
который глючит и очень зависит от ресурсов машины, по этому подумываю про Directx
А можешь ссылку дать куда надо ткнуться, чтобы понять как это делать т. е. через Directx
Цитата:
только графика, звук и таймер. насколько я помню в win95 он появился как раз (Directx)
в 98 уже был!


Вернуться к началу
СообщениеДобавлено: 04 сен 2013, 14:23 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщения: 1009
Цитата:
Вывод на экран у меня делается через StretchDraw остальное я убрал, может добавить все-таки еще
обычный Draw?...
Понятия не имею. Просто пару раз запустился с приятной скоростью. Но пару раз просто неиграбельный ужас.
Цитата:
А что это такое?... Поточнее можно?
Пропуск кадров. Кода программа не успевает отрисовывать заданный FPS, то она может пропускать несколько кадров, не рисуя их. Но, как правильно заметил MARAT_BEST для "Львова" фреймскип модет нести тяжеліе последствия в виде серьезнейшего мерцания или даже пропадания спрайтов.
Цитата:
в 98 уже был!
В 95-м уже был. Главное не использовать фичи новейших версий. Хотя, я тут почитал, вроде даже 9-й встает на 95-ку. Так что все норм, но лучше не увлекаться.


Вернуться к началу
СообщениеДобавлено: 05 сен 2013, 09:47 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Цитата:
набери в гугле или яндексе delphi dirextx ... двумя словами не расскажешь :roll:
Да набирал... было... и не один раз... понаскачивал всякой фигни... :-) ничего не устраивает... "потеть" над всем тем надо не на шутку... :-)
Цитата:
новая версия
У тебя новые версие ежедневно выходят?!... :-) Как свежие газеты?!.. :-)
Цитата:
сделал так чтобы не главные формы создавались только по необходимости
Хм.. И что оно дало?... Считаю, что зря это делал. Нет смысла и т.д.


Вернуться к началу
СообщениеДобавлено: 05 сен 2013, 09:51 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Марат обрати внимание!... может нет смысла замораживаться на всяких директИксах...
Вот я написал на форумы
Цитата:
Вот таймер 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-таймеру....
Правильно ли я мыслю?.... даст ли это чего?..
Марат! Я все это к тому. что есть другие способы вот такие как я пишу и прочие... а для ретро машин (ретро эмуляторов) заморачиваться на Директах... стоит ли?.. особенно если еще изучать нужно


Вернуться к началу
СообщениеДобавлено: 05 сен 2013, 10:23 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщения: 1009
Цитата:
заморачиваться на Директах... стоит ли?
Стоит. Однозначно :).


Вернуться к началу
СообщениеДобавлено: 05 сен 2013, 11:36 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщения: 372
Откуда: Конотоп
Цитата:
Цитата:
заморачиваться на Директах... стоит ли?
Стоит. Однозначно :).
Я иммею ввиду для таких целей как эмуляторы (мой и Марата)?!.. Считаешь что стОит?..
Ну пусть Марат напишет на директе :-) а я посмотрю ! :-)


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 26 сообщений ]  На страницу 1 2 След.

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB