User Tag List

Показано с 1 по 10 из 1102

Тема: Emu80 v.4

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m
    Как только это число перевалило за 40000, завершаем цикл и ждём следующего срабатывания таймера
    На мой взгляд это неудачная концепция. Пригодная лишь для точной эмуляции по скорости и ито НЕ на коротких периодах. На быстрой машине собственно такая эмуляция длится, допустим, 1 процент времени за цикл, а остальное время прогона нет. Как же тогда правильно будет играть музыка, где всё на задержках. И где взять таймер с периодом частоты в 50-100 герц? Я слышал, что в IBM PC есть таймер позволяющий измерять отсчеты с кратностью 1/18 секунды, а не 1/100 секунды.

    По-моему, правильнее прогонять всё время, но тормозить после каждой команды, как я и делаю, хотя подгон времён и сделан небрежно. Обычно я сам пользуюсь эмулятором, где подгонка времён прогона команд отсутствует или минимальна, отчего погрешность времён +-100% и более (зато в режиме ТУРБО - 100 МГЦ Z80). Никакой разницы в работе программ при подгоне времён и без него - нет (точнее, я не заметил). Есть встроенный тест, который исполняет сотни миллионов команд NOP, а затем по таймеру вычисляет реальный такт. Этого вполне хватает. Можно прогнать тест с заведомо известным временем прогона и настроить и по нему. Но т.к команды плохо сбалансированы, то время прогона зависит от конкретного набора команд. Поэтому если настроить константу тормозилки по одному тесту, то на другом тесте возможны существенные расхождения с реальностью +-10%.

    Но для программ это без разницы. Нет программ ни для ОРИОНА, ни для СПЕЦИАЛИСТА, ни для РК86, где это бы играло роль. Чем переделывать концепцию, мне проще написать тест команд по скорости (это программа Z80, который в моём эмуляторе имеет доступ к времени в 0040:006C) и сделать покомандную подгонку менее дискретной (т.е грузить в счётчик паузы не число тактов, а число тактов умноженное на 10), что даст возможность точнее сбалансировать команды.

    КСИ у меня в эмуляторе нет, т.к такты я не считаю. А прерывание 50 ГЦ формирую подсчётом не тактов, а числа команд - делалось на медленной ЭВМ, где запаса по скорости вообще не было, а INC короче чем ADD (на число тактов). Поэтому если тормозилка маленькая, такт CPU высокий, то эмулируются прерывания не 50 ГЦ, а например 100 ГЦ. В программах разницы не заметил.
    Последний раз редактировалось barsik; 04.04.2017 в 22:46.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Emu80, старые версии
    от Pyk в разделе Эмуляторы отечественных компьютеров
    Ответов: 68
    Последнее: 11.03.2017, 00:33

Ваши права

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