Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Все об эмуляции ПК-01 "Львов" на современных платформах
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by Tim0xA »

Спасибо за информацию по точкам входа. Несколько бейсик-программ запустилось после перехода по 0x06AB, но подавляющее большинство пишет ошибку:

Code: Select all

?SN ERROR
GO
Подсмотрел в отладчике b2m состояния регистров, но не помогло, чего-то еще не хватает. Может потом разберусь. Эмулировать набор RUN не буду, в SDK есть виртуальная клава - лучше ее прикрутить.

Выложил исходники http://code.google.com/p/timgoo/source/ ... k/lvivgoo/ и последнюю сборку с играми http://code.google.com/p/timgoo/downloads/list
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by liberation »

Tim0xA wrote:Выложил исходники http://code.google.com/p/timgoo/source/ ... k/lvivgoo/
Кому лениво заморачиваться с SVN, для тех в файловом архиве подготовлен специальный архивчик. :D
Carthago delenda est, Carthaginem delendam esse
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by sadfsdfsdaf »

Tim0xA wrote:Подсмотрел в отладчике b2m состояния регистров, но не помогло, чего-то еще не хватает. Может потом разберусь.
имхо, отэмулировать надо какое-то количество команд, а уже потом переход туда делать, т.к. по BasicHotEntry 0x02FD код отрабатывает загруженную программу, инициализируя состояние интерпретатора и уже потом переходит на ожидание символа в биос. попробуй после загрузки запустить машину на выполнение до перехода PC в область C000..FFFF, а уже потом "бросать" в RUN.
второй вариант - заполнить буфер ввода с клавиатуры - он как раз на 4 символа.
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by sadfsdfsdaf »

Tim0xA wrote:Подсмотрел в отладчике b2m состояния регистров, но не помогло, чего-то еще не хватает. Может потом разберусь. Эмулировать набор RUN не буду, в SDK есть виртуальная клава - лучше ее прикрутить.
вот вариант с буфером клавиатуры - просто и сердито :-)

Code: Select all

 emControl(emcSetMem,0xBE10,13);
 emControl(emcSetMem,0xBE11,'N');
 emControl(emcSetMem,0xBE12,'U');
 emControl(emcSetMem,0xBE13,'R');
 emControl(emcSetMem,0xBE14,4);
знать точку входа в RUN необязательно, минус - не больше 4-х символов

Code: Select all

E8A9 sub_E8A9: ; input_key
E8A9                 push    h
E8AA                 push    d
E8AB                 push    b
E8AC                 mvi     a, 8Ah ; 'К'
E8AE                 out     0D3h
E8B0                 lxi     h, keyBufSz     ; num of chars
E8B3                 mov     a, m
E8B4                 ora     a
E8B5                 jnz     loc_E908


E908 loc_E908:
E908                 dcr     m
E909                 mvi     a, 10h
E90B                 add     m
E90C                 mov     l, a
E90D                 mov     a, m
E90E                 pop     b
E90F                 pop     d
E910                 pop     h
E911                 ret

BE10 keyBuf:         .db 0, 0, 0, 0
BE14 keyBufSz:       .db 0
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by Tim0xA »

Значительно ускорил эмулятор и прикрутил звук спикера!

1. По поводу ускорения: исправил такую плюху, о которой даже не задумывался, но она вполне очевидно приводила к жутким тормозам. Ну вот, например:

Code: Select all

for (y = 0; y < 256; y++)
{
  for (x = 0; x < 256; x++)
  {
    ... = screen[y][x] ;   // <- вот такое обращение к массиву работает НАМНОГО быстрее
    ... = screen[x][y] ;   // чем вот такое
  }
}
Да, это все ясно, но я только сейчас обратил на это внимание. Так что компилятору доверяй, но сам не плошай! В итоге эмулятор стал просто летать. А я все удивлялся, ну почему на динге эмулят сегу и снес - там железо покруче, а все летает. А у меня Вектор и Львов (простые машинки) тормозили ))

2. В эмуляции звука велосипед не изобретался. Ключевой момент - синхронизация от звука. В SDK динги есть библиотечка, в которой можно запустить проигрывание WAV-буфера. И есть процедура, которая вызывается, когда завершается проигрывание этого WAV-буфера. Создаем два буфера длительностью по 20мс. Заполняем один буфер и по заполнению приостанавливаем проц и обновляем экран, в это время проигрывается второй буфер, по завершению которого переключаем буферы и опять пускаем проц, заполняем буфер и т.д по кругу. Звук воспроизводится непрерывно без щелчков и потерь синхронно с отрисовкой экрана.

ФПС сделал чуть больше 49. Не 50, потому что так было удобнее синхронизировать число тактов на фрейм и размер звукового буфера. Тактов в экране 44800, но динга не потянула звук 44800, а только 44100. Поэтому я даю 896 семплов вместо 882 на 20мс для кратности. В итоге получился очень простой и быстрый код.

Сначала взялся "отлаживать" звук на рекомпиляциях с MSX... Но не звучит хоть ты тресни! Хоть грызи зубами лед! Хоть бейся лбом об стену! Молчит как рыба! А потом вспомнил, что там звук не через спикер, а на AY. А я и забыл уже )) Взял родной софт - эмулятор запел ))

У меня нет технических подробностей о тактах, частотах и времянках экрана Львова, поэтому некоторые моменты были реализованы приближенно. Посему есть уточняющие вопросы:
1. Сколько тактов в строке? Я взял 32 такта на строчный импульс и 128 на экран. Т.е. строка - 160 тактов.
2. Какова длительность КСИ? Какой полный размер экрана в пересчете на строки? Я взял 256 видимых строк и 24 на КСИ. Т.е. всего 280 строк. В итоге получаем 160*280=44800 тактов на экран.
3. Есть ли детальная информация за какое количество тактов выполняется та или иная процессорная команда у Львова? Не у процессора ВМ80А - это все известно. А именно у Львова. Ведь я где-то читал, что работа с ОЗУ происходит медленнее, чем с ПЗУ. Как и насколько это тормозится?

И еще: в каких играх на Львове самый лучший музон? Хочу постестировать.
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by liberation »

Tim0xA wrote:Ведь я где-то читал, что работа с ОЗУ происходит медленнее, чем с ПЗУ. Как и насколько это тормозится?
Сколько у Вас отличных новостей! :)
Про ОЗУ и ПЗУ замечу, что конкретными цифрами не владею. В памяти всплывает цифра 30%, но я сомневаюсь в ее достоверности, поскольку не помню, кто и когда мне ее сообщил. Да и прочих подробностей не помню.
Tim0xA wrote:И еще: в каких играх на Львове самый лучший музон? Хочу постестировать.
Туго с музоном на ПК-01 было, туго. Из более-менее приличного можно припомнить только "Star Raider" (музыка после загрузки) и "King Valley" (музыка во время игрового процесса).
Carthago delenda est, Carthaginem delendam esse
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by sadfsdfsdaf »

Tim0xA wrote:Так что компилятору доверяй, но сам не плошай!
думаешь, что он не смог векторизовать индекс на sizeof(a[]) ?
всё-таки надо на ассемблерный вывод смотреть, может там хитрая индексная адресация используется (я не в курсе системы команд динги) ?
Tim0xA wrote:У меня нет технических подробностей о тактах, частотах и времянках экрана Львова, поэтому некоторые моменты были реализованы приближенно. Посему есть уточняющие вопросы
с этим сложно, мультиколор-демок практически не было (я слышал от Alexander ровно об одной).
думаю, что спрашивать надо разработчиков, если у них какие материалы ещё найдутся (или сами что вспомнят (to Zelya: 3-я сессия вопросов и ответов?))

Второй вариант - экспериментировать на живом железе, вот только, наверное, чисто программных методов не хватит, нужна ещё какая-то аппаратная обвязка.....
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by Tim0xA »

sadfsdfsdaf wrote:думаешь, что он не смог векторизовать индекс
Внутреннему циклу с индексом "x" проще получать данные из массива screen[y][x], т.к. элементы [x] располагаются в памяти последовательно. При этом указатель в каждой итерации инкрементируется на +1. Для массива screen[x][y] указатель должен изменяться с шагом sizeof[y], а это более тормозной вариант. Поменял - и эмулятор начал просто летать.
sadfsdfsdaf wrote:Второй вариант - экспериментировать на живом железе, вот только, наверное, чисто программных методов не хватит
ivagor писал отличные тесты с помощью которых удалось определить все временные диаграммы работы видеоОЗУ и процессора Вектора. Для Львова у него тоже был тест (его запускали в теме на zp.pk.ru, когда разбирались с частотами и экраном), но он утерян и связь с ivagor-ом тоже утеряна - его почтовый ящик закрыт.
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by liberation »

Tim0xA wrote:ivagor писал отличные тесты с помощью которых удалось определить все временные диаграммы работы видеоОЗУ и процессора Вектора. Для Львова у него тоже был тест (его запускали в теме на zp.pk.ru, когда разбирались с частотами и экраном), но он утерян и связь с ivagor-ом тоже утеряна - его почтовый ящик закрыт.
А ФИО ivagor'а известны? Я могу провести глубинное бурение Интернета, вдруг повезет.
Carthago delenda est, Carthaginem delendam esse
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by Tim0xA »

liberation wrote: А ФИО ivagor'а известны? Я могу провести глубинное бурение Интернета, вдруг повезет.
Очень даже известны - это Городецкий Иван, который адаптировал мои рекомпиляции с MSX на Львов и другие компы. Просто связь утеряна.
User avatar
Zelya
Site Admin
Posts: 1071
Joined: 24 Jul 2008, 12:05

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by Zelya »

Tim0xA wrote: Очень даже известны - это Городецкий Иван, который адаптировал мои рекомпиляции с MSX на Львов и другие компы. Просто связь утеряна.
Ой! Действительно очень жаль, что Иван пропал с контакта. Очень интересный человек и собеседник, много сделавший для "Львова"! Посмотрел, последнее полученное от него письмо датируется маем 2011-го. :cry:
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by liberation »

Tim0xA wrote:Очень даже известны - это Городецкий Иван, который адаптировал мои рекомпиляции с MSX на Львов и другие компы. Просто связь утеряна.
По результатам бурения отписался в личку.

Про скорость доступа к ОЗУ и ПЗУ - круг замкнулся! 30% пришли из Вашей реплики на zx.pk.ru, где цитируется довольно известный злопыхательский фрагмент про "Львов". :lol:
Carthago delenda est, Carthaginem delendam esse
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by Tim0xA »

Выпущен релиз эмулятора со звуком и качественным ресайзом экрана.
http://code.google.com/p/timgoo/downloads/list

Пропиарил Львов у буржуев на динго-форуме. Знай наших ))
http://boards.dingoonity.org/dingoo-rel ... iv-pk-01'/
User avatar
Zelya
Site Admin
Posts: 1071
Joined: 24 Jul 2008, 12:05

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by Zelya »

Tim0xA
Пропиарил Львов у буржуев на динго-форуме. Знай наших ))
Дело правильное и очень полезное! Может рискнете продублировать тему в интернациональном разделе?
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320

Post by liberation »

Tim0xA wrote:Выпущен релиз эмулятора со звуком и качественным ресайзом экрана.
Отличная новость! А что-нибудь известно о работоспособности эмулятора на других подобных устройствах (Ritmix RZX-50, к примеру)?

p.s.
Свежие исходники и архив продублированы в файловом архиве (v2).
Carthago delenda est, Carthaginem delendam esse
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest