ПК-01 ЛЬВОВ

форум о ПК-01,02 "Львов"
Текущее время: 20 июл 2018, 03:51

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC + 2 часа [ Летнее время ]




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

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
Посты про SAS еmulator, вынесено из темы Хочу написать свой эмулятор ПК-01 Львов на Delphi.

MARAT_BEST писал(а):
сорсы обязательно размещу !

Неплохо бы! Я хотел бы кое чего спионерить - "реализацию портов ввода вывода", а то мне надоело мусолить с втроенным в модуль DprToLvt (PasToLvt) толком недописаным эмулятором... :D хотелось бы приступить к самому компилятору... а вот без еще толком недописанного встр.эмулятора вроде как не могу...


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

Зарегистрирован: 24 июл 2008, 12:05
Сообщений: 994
sas9568635 писал(а):
???!!!! - Да я вообще-то написал тот пост так как он по теме "Хочу написать свой эмулятор ПК-01 Львов на Delphi"...:-) т.е для MARAT_BEST если он хочет конечно...


Я ничего не имею против Ваших постов. Возможно стоило разнести свой ответ на две части. Я предложил поискать метод бысторго доступа к пикселям изображения, показав, так сказать, направление. Только вот Делфи листинг я писать не буду, ибо конкретно подзабыл синтаксис.

sas9568635 писал(а):
А вообще я не понимаю.... Зачем отрисовка 50 раз в сек.... У меня отрисовывает часть (8х8) экрана только во время его вывода и только то (тот 8х8) что выводится?... И все впорядке! (Это вопрос ко всем)


Ваш эмуль полностью ест одно ядро процессора, при этом, не уверен, что он держит 100% скорости. Еще раз хочу обратить внимание на в корне неверный подход к принципам эмуляции. Вы не должны эмулировать каждую команду процессора по времени. Это надо делать "пачками", считая тики в переменной. Тогда и производительность будет хорошая, да и менять ее будет элементарно (соверменные компы с легкостью тянут практически любую скорость, хоть х2 хоть х1000) оставляя fps 50.


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

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 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
Сообщений: 994
sas9568635
Замена Integer на Word/Byte не увеличит быстродействия. А вот выбрасывание кода по проверке переполнения и замена плюсиков на инкрисы может незначительно ускорить, но никак не на 25%.

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

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


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

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
Zelya писал(а):
sas9568635
Замена Integer на Word/Byte не увеличит быстродействия. А вот выбрасывание кода по проверке переполнения и замена плюсиков на инкрисы может незначительно ускорить, но никак не на 25%.

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

Ну в исходниках ты смотрел? команды те что я написал....
Смысла никакого не вижу else tmp2:=tmp2+0;...
я подумал что это когда "перепиливалось" от туда, от куда нельзя без else...
ну вот и вписали лишьбы что-то было...
А где такое есть?... в джаваскриптах есть? ну если then то и обязательно ветка else?..
Zelya писал(а):
Кстати, а почему некоторые регистры стали 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
Откуда: Конотоп
NeoSpectruman писал(а):
sas9568635
SAS еmulator 1.0Beta ?
ваше?
http://zx.pk.ru/showthread.php?t=21543

Моё!
NeoSpectruman писал(а):
зачем 4 раза упоминать "вирусов нет"
от этого складывается мнение "что они там есть"

Я про вирусы было вообще забыл...
Скачал было инсталятор Дельфи 7, а он был заражен каким-то вроде безвредным вирусом, но распространняемым по скомпилированным екзешникам... я бы ничего и не знал если бы не сервис http://f-bit.ru который отказал размещать мой архив из-за наличия вируса... после чего я «вернулся» к предыдущему Дельфи6 и скомпилировал в нём... перестраховался проверил ДокторВебом онлайн... вот поетому и пишу, что на вирусы проверен... а если так каким-то образом что-то окажется, я ведь ни виноват! Проверяйте файлы так как Вы считаете нужным!


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

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


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

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
Zelya писал(а):
Оказывается SASEmulator глючит не единоразово. Не знаю с чем связано, но он крайне капризно реагирует на какие-то ресурсы, так как иногда работает быстрее, чем LVOVulator, но иногда просто ужасно тормозит.

Сам не пойму! Поэтому и в инструкции к программе написал:

Цитата:
Притормаживание вывода на экран. При расширении формы эмулятора на весь экран возможно притормаживание вывода на экран. Я все усилия приложил для того, чтобы этого не было. Но оно бывает наблюдается и я не пойму почему. Вроде как само «приходит» и «уходит» Если возникла такая ситуация. То возможны следующие варианты выхода из нее: (во всяком случае у меня получалось)
1. Попробуйте, нажать Паузу и минут на 10 оставить комп «в покое», сходить покурить, например
2. Можно попробовать перезагрузку компа.
3. В зависимости от системы можно попробовать поменять «битность» экрана с 16бит на 32бит или наоборот.
4. Можно просто попробовать запустить эмулятор позже
   Я надеюсь, что это (притормаживание) только у меня на компе, так как мой ноутбук ограничен в видеопамяти, на других компах я не испытывал эмулятор. У других, желающих использовать мой эмулятор, будет все в порядке!

Вывод на экран у меня делается через StretchDraw остальное я убрал, может добавить все-таки еще
обычный Draw?...
Zelya писал(а):
Это полезная фича. Но если говорить о слабых машинах, то куда полезнее фреймскип.

А что это такое?... Поточнее можно?

MARAT_BEST писал(а):
Сейчас вся эмуляция выведена на таймер, стандартный ,

Ты хочешь сказать что если стандартный таймер заменить чем-то другим например RDTSC то будет всё в порядке?... Хм.. надо попробывать. Но говорят, RDTSC очень нестабилен (неточный)..
MARAT_BEST писал(а):
который глючит и очень зависит от ресурсов машины, по этому подумываю про Directx

А можешь ссылку дать куда надо ткнуться, чтобы понять как это делать т. е. через Directx

MARAT_BEST писал(а):
только графика, звук и таймер. насколько я помню в win95 он появился как раз (Directx)

в 98 уже был!


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

Зарегистрирован: 24 июл 2008, 12:05
Сообщений: 994
Цитата:
Вывод на экран у меня делается через StretchDraw остальное я убрал, может добавить все-таки еще
обычный Draw?...

Понятия не имею. Просто пару раз запустился с приятной скоростью. Но пару раз просто неиграбельный ужас.

Цитата:
А что это такое?... Поточнее можно?

Пропуск кадров. Кода программа не успевает отрисовывать заданный FPS, то она может пропускать несколько кадров, не рисуя их. Но, как правильно заметил MARAT_BEST для "Львова" фреймскип модет нести тяжеліе последствия в виде серьезнейшего мерцания или даже пропадания спрайтов.

Цитата:
в 98 уже был!

В 95-м уже был. Главное не использовать фичи новейших версий. Хотя, я тут почитал, вроде даже 9-й встает на 95-ку. Так что все норм, но лучше не увлекаться.


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

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
MARAT_BEST писал(а):
набери в гугле или яндексе delphi dirextx ... двумя словами не расскажешь :roll:

Да набирал... было... и не один раз... понаскачивал всякой фигни... :-) ничего не устраивает... "потеть" над всем тем надо не на шутку... :-)
MARAT_BEST писал(а):
новая версия

У тебя новые версие ежедневно выходят?!... :-) Как свежие газеты?!.. :-)
MARAT_BEST писал(а):
сделал так чтобы не главные формы создавались только по необходимости

Хм.. И что оно дало?... Считаю, что зря это делал. Нет смысла и т.д.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 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
Сообщений: 994
Цитата:
заморачиваться на Директах... стоит ли?

Стоит. Однозначно :).


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

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
Zelya писал(а):
Цитата:
заморачиваться на Директах... стоит ли?

Стоит. Однозначно :).

Я иммею ввиду для таких целей как эмуляторы (мой и Марата)?!.. Считаешь что стОит?..
Ну пусть Марат напишет на директе :-) а я посмотрю ! :-)


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

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC + 2 часа [ Летнее время ]


Кто сейчас на форуме

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


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

Найти:
cron
Free counters!
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB