Неплохо бы! Я хотел бы кое чего спионерить - "реализацию портов ввода вывода", а то мне надоело мусолить с втроенным в модуль DprToLvt (PasToLvt) толком недописаным эмулятором...MARAT_BEST wrote:сорсы обязательно размещу !
SAS еmulator
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
SAS еmulator
Посты про SAS еmulator, вынесено из темы Хочу написать свой эмулятор ПК-01 Львов на Delphi.
хотелось бы приступить к самому компилятору... а вот без еще толком недописанного встр.эмулятора вроде как не могу...
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Я ничего не имею против Ваших постов. Возможно стоило разнести свой ответ на две части. Я предложил поискать метод бысторго доступа к пикселям изображения, показав, так сказать, направление. Только вот Делфи листинг я писать не буду, ибо конкретно подзабыл синтаксис.sas9568635 wrote: ???!!!! - Да я вообще-то написал тот пост так как он по теме "Хочу написать свой эмулятор ПК-01 Львов на Delphi"...т.е для MARAT_BEST если он хочет конечно...
Ваш эмуль полностью ест одно ядро процессора, при этом, не уверен, что он держит 100% скорости. Еще раз хочу обратить внимание на в корне неверный подход к принципам эмуляции. Вы не должны эмулировать каждую команду процессора по времени. Это надо делать "пачками", считая тики в переменной. Тогда и производительность будет хорошая, да и менять ее будет элементарно (соверменные компы с легкостью тянут практически любую скорость, хоть х2 хоть х1000) оставляя fps 50.sas9568635 wrote: А вообще я не понимаю.... Зачем отрисовка 50 раз в сек.... У меня отрисовывает часть (8х8) экрана только во время его вывода и только то (тот 8х8) что выводится?... И все впорядке! (Это вопрос ко всем)
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Мой Эмулятор в модуле он вообщем-то и не должен быть с правильными принципами, он предназначен там дла дебагенья т.е. для пошаговой проверки и просмотра... поэтому все то что вы пишите не совсем к данному случаю... или разве что "под занавес", до которого мне еще очень далеко...Zelya wrote:...Еще раз хочу обратить внимание на в корне неверный подход к принципам эмуляции. Вы не должны эмулировать каждую команду процессора по времени. Это надо делать "пачками", считая тики в переменной.
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Рассматривая код в эмуляторе...
Непойму зачем ВСЕ эти переменные определены как — INTEGER ?
Я вот сделал так...
Не все получилось заменить на 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;
можно повыкидывать подобное
вопрос: А зачем в командах
$88,;89,8B,8C и т.д. Строка -
tmp2:=tmp2+0;
Что она дает?... Можно ли ее выкинуть?...
Непойму зачем ВСЕ эти переменные определены как — INTEGER ?
Code: Select all
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;
Code: Select all
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;
можно повыкидывать подобное
Code: Select all
$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;
Что она дает?... Можно ли ее выкинуть?...
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
sas9568635
Замена Integer на Word/Byte не увеличит быстродействия. А вот выбрасывание кода по проверке переполнения и замена плюсиков на инкрисы может незначительно ускорить, но никак не на 25%.
Насчет строки tmp2:=tmp2+0; ничего не знаю, откуда она появилась и какой в ней смысл. Выкинуть, думаю, можно и нунжно.
Кстати, а почему некоторые регистры стали Byte, а некоторые Word, а r_C вобще Integer остался?
Замена Integer на Word/Byte не увеличит быстродействия. А вот выбрасывание кода по проверке переполнения и замена плюсиков на инкрисы может незначительно ускорить, но никак не на 25%.
Насчет строки tmp2:=tmp2+0; ничего не знаю, откуда она появилась и какой в ней смысл. Выкинуть, думаю, можно и нунжно.
Кстати, а почему некоторые регистры стали Byte, а некоторые Word, а r_C вобще Integer остался?
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Поменял обратно на Integer к сожалению...Zelya wrote:sas9568635
Замена Integer на Word/Byte не увеличит быстродействия. А вот выбрасывание кода по проверке переполнения и замена плюсиков на инкрисы может незначительно ускорить, но никак не на 25%.
Ну в исходниках ты смотрел? команды те что я написал....Zelya wrote:Насчет строки tmp2:=tmp2+0; ничего не знаю, откуда она появилась и какой в ней смысл. Выкинуть, думаю, можно и нунжно.
Смысла никакого не вижу else tmp2:=tmp2+0;...
я подумал что это когда "перепиливалось" от туда, от куда нельзя без else...
ну вот и вписали лишьбы что-то было...
А где такое есть?... в джаваскриптах есть? ну если then то и обязательно ветка else?..
Я было пытался все их сделать Byte и Word и проверял на работоспособность... вот поэтому так и получилось... ну теперь то уже вернул обратно... там есть команды в которых есть проверка на отрицательное прежде чем его исхользовать как байт-положительное и т.д.Zelya wrote: Кстати, а почему некоторые регистры стали Byte, а некоторые Word, а r_C вобще Integer остался?
-
NeoSpectruman
- Posts: 145
- Joined: 21 Aug 2012, 22:30
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
немного офтопика
sas9568635
SAS еmulator 1.0Beta ?
ваше?
http://zx.pk.ru/showthread.php?t=21543
зачем 4 раза упоминать "вирусов нет"
от этого
складывается мнение "что они там есть"
sas9568635
SAS еmulator 1.0Beta ?
ваше?
http://zx.pk.ru/showthread.php?t=21543
зачем 4 раза упоминать "вирусов нет"
от этого
складывается мнение "что они там есть"
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Моё!
Я про вирусы было вообще забыл...NeoSpectruman wrote: зачем 4 раза упоминать "вирусов нет"
от этого складывается мнение "что они там есть"
Скачал было инсталятор Дельфи 7, а он был заражен каким-то вроде безвредным вирусом, но распространняемым по скомпилированным екзешникам... я бы ничего и не знал если бы не сервис http://f-bit.ru который отказал размещать мой архив из-за наличия вируса... после чего я «вернулся» к предыдущему Дельфи6 и скомпилировал в нём... перестраховался проверил ДокторВебом онлайн... вот поетому и пишу, что на вирусы проверен... а если так каким-то образом что-то окажется, я ведь ни виноват! Проверяйте файлы так как Вы считаете нужным!
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
По просьбам трудящихся на этой же машине потестил SASEmulator 1.2. Почему-то первый запуск был крайне медленным. Но зато потом все остальные работали явно шустрее. Как минимум, скорость при 256х256 выглядит почти идеальной. Порадовала смена расширения, огорчило отсутствие звука. Еще из особо неудобных вещей - невозможность сделать скриншот, нет подписей к кнопкам тулбара, кнопки не продублированы в меню и пропадают при уменьшении экрана, контролы со звездочками (те что стают красные) слишком уж странные, нельзя как-то переделать?
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Сам не пойму! Поэтому и в инструкции к программе написал:Zelya wrote:Оказывается SASEmulator глючит не единоразово. Не знаю с чем связано, но он крайне капризно реагирует на какие-то ресурсы, так как иногда работает быстрее, чем LVOVulator, но иногда просто ужасно тормозит.
Вывод на экран у меня делается через StretchDraw остальное я убрал, может добавить все-таки ещеПритормаживание вывода на экран. При расширении формы эмулятора на весь экран возможно притормаживание вывода на экран. Я все усилия приложил для того, чтобы этого не было. Но оно бывает наблюдается и я не пойму почему. Вроде как само «приходит» и «уходит» Если возникла такая ситуация. То возможны следующие варианты выхода из нее: (во всяком случае у меня получалось)
1. Попробуйте, нажать Паузу и минут на 10 оставить комп «в покое», сходить покурить, например
2. Можно попробовать перезагрузку компа.
3. В зависимости от системы можно попробовать поменять «битность» экрана с 16бит на 32бит или наоборот.
4. Можно просто попробовать запустить эмулятор позже
Я надеюсь, что это (притормаживание) только у меня на компе, так как мой ноутбук ограничен в видеопамяти, на других компах я не испытывал эмулятор. У других, желающих использовать мой эмулятор, будет все в порядке!
обычный Draw?...
А что это такое?... Поточнее можно?Zelya wrote: Это полезная фича. Но если говорить о слабых машинах, то куда полезнее фреймскип.
Ты хочешь сказать что если стандартный таймер заменить чем-то другим например RDTSC то будет всё в порядке?... Хм.. надо попробывать. Но говорят, RDTSC очень нестабилен (неточный)..MARAT_BEST wrote:Сейчас вся эмуляция выведена на таймер, стандартный ,
А можешь ссылку дать куда надо ткнуться, чтобы понять как это делать т. е. через DirectxMARAT_BEST wrote:который глючит и очень зависит от ресурсов машины, по этому подумываю про Directx
в 98 уже был!MARAT_BEST wrote:только графика, звук и таймер. насколько я помню в win95 он появился как раз (Directx)
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Понятия не имею. Просто пару раз запустился с приятной скоростью. Но пару раз просто неиграбельный ужас.Вывод на экран у меня делается через StretchDraw остальное я убрал, может добавить все-таки еще
обычный Draw?...
Пропуск кадров. Кода программа не успевает отрисовывать заданный FPS, то она может пропускать несколько кадров, не рисуя их. Но, как правильно заметил MARAT_BEST для "Львова" фреймскип модет нести тяжеліе последствия в виде серьезнейшего мерцания или даже пропадания спрайтов.А что это такое?... Поточнее можно?
В 95-м уже был. Главное не использовать фичи новейших версий. Хотя, я тут почитал, вроде даже 9-й встает на 95-ку. Так что все норм, но лучше не увлекаться.в 98 уже был!
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Да набирал... было... и не один раз... понаскачивал всякой фигни...MARAT_BEST wrote:набери в гугле или яндексе delphi dirextx ... двумя словами не расскажешь![]()
У тебя новые версие ежедневно выходят?!...MARAT_BEST wrote: новая версия
Хм.. И что оно дало?... Считаю, что зря это делал. Нет смысла и т.д.MARAT_BEST wrote: сделал так чтобы не главные формы создавались только по необходимости
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Марат обрати внимание!... может нет смысла замораживаться на всяких директИксах...
Вот я написал на форумы
Вот я написал на форумы
Марат! Я все это к тому. что есть другие способы вот такие как я пишу и прочие... а для ретро машин (ретро эмуляторов) заморачиваться на Директах... стоит ли?.. особенно если еще изучать нужноВот таймер 1 который временами дает глюки...Вот таймер 2 который будет в следующей версии(в меню можно будет выбрать способ вывода 1 или 2) Этом таймер я еще не проверил так как глюков не появлялось...Code: Select all
procedure TMainFormEmu.TimerMainTimer(Sender: TObject); begin i8080_do_opcodes(opcodes_to_run);// блок команд КР580 RefreshScreen;// перечертить экран end;
RDTSCfirstStart — флаг первого запуска, необращай внимания
GetTestRDTSC_ - измерянное кол-во таков RDTSC в 1 сек
RDTSCbak- бывшее состояние RDTSC
RDTSC1fps — колво тактов RDTSC в 1/50 секунду при FPS=50
RDTSC — текущее RDTSC
Соль второго таймера, что отсчёт времени начинается СРАЗУ после того как закончился предыдущий отсчёт времени (RDTSCbak:=RDTSC; RDTSCBAK:=RDTSCBAK+RDTSC1fps;) и процедуры ( i8080_do_opcodes(opcodes_to_run) RefreshScreen;) выполняются когда «часики уже тикают»....Code: Select all
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;
А вот в первом, врядле так оно. Поетому я хочу в 1 таймере вынести выполнение за пределы таймера т. е. чтобы они выполнялись по end-таймеру....
Правильно ли я мыслю?.... даст ли это чего?..
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Стоит. Однозначнозаморачиваться на Директах... стоит ли?
-
sas9568635
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Я иммею ввиду для таких целей как эмуляторы (мой и Марата)?!.. Считаешь что стОит?..Zelya wrote:Стоит. Однозначнозаморачиваться на Директах... стоит ли?.
Ну пусть Марат напишет на директе
Who is online
Users browsing this forum: No registered users and 1 guest

