Важная информация

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 20 из 20

Тема: ZX68 - новый эмулятор Спектрума для PalmOS

  1. #11
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть еще 1 вариант. Не делать никуда jump, а сразу выполнять операцию по таблице. См. мой Z (правда, он для PC, но важна идея).
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  2. #12
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,569
    Спасибо Благодарностей отдано 
    1,227
    Спасибо Благодарностей получено 
    1,781
    Поблагодарили
    686 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov
    Есть еще 1 вариант. Не делать никуда jump, а сразу выполнять операцию по таблице. См. мой Z (правда, он для PC, но важна идея).
    Как это не делать джамп?
    Приведи пример

  3. #13
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все в исходниках Z. Адрес дать? Вот: http://bonanzas.rinet.ru/zx/z.zip
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  4. #14
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,569
    Спасибо Благодарностей отдано 
    1,227
    Спасибо Благодарностей получено 
    1,781
    Поблагодарили
    686 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov
    Все в исходниках Z. Адрес дать? Вот: http://bonanzas.rinet.ru/zx/z.zip
    ;-----------------------------------------;
    ; call certain instruction procedure ;
    ;-----------------------------------------;
    call word ptr seg_Op:[JumpTable+bx]

    извиняюсь великодушно, а калл это уже не джамп???

  5. #15
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,775
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    1,180
    Поблагодарили
    776 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ещё один интересный момент на сайте есть скрин из игрушки Sentinel,
    надпись и карта выводятся не полностью - точно такая же ситуация в амиговском эмуле ZxAm

  6. #16
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    call это хуже. Но дело не в этом. Я же в Z стремился к меньшему размеру. Но если стремиться только к скорости, то можно по таблицам:
    1 - увеличивать t тактов,
    2 - дальше выполнять операцию
    3 - и на финише операции формировать флажки. Примерно это и сделано. Но я стремился к минимальному размеру при соблюдении максимальной корректности, так что основную идею пришлось эксплуатировать совсем не в плане быстродействия. Потому и CALL а не JUMP - чтобы вернуться в то (общее) место, где по таблицам все завершающие части делаются.

    А вообще jump'а можно избежать в большом количестве команд (если jump или call тормозит больше чем самомодификация кода эмулятора). Т.е. по таблице выбирается байт, который самомодифицирует следующую команду, и она становится или jump'ом, или начинает ту операцию, которая без jump'а начинает делать что-нибудь (опять по таблицам). Например: LD r1,r2 - их аж 64 команды, и видимо, это одна из частых разновидностей команд. Самомодификация еще пары кодов команд в самом эмуляторе (например, смещения в структуре подправляются), или если хорошая регистровая адресация есть - по 2 регистрам - то в 2 регистра выбираются номера регистров по коду операции, и дальше выполняется - опять без jump'ов выборка из одного "регистра" Z80, и засовывание в другой "регистр" Z80. Остается только 1 jump - на место, где следующая команда выбирается.

    Может быть пример и не очень хороший, может быть, имеет смысл ускорять совсем не эти 64 команды (тем более там голову сломишь, что делать с HALT и (HL)), может быть имеет смысл ускорять как раз jump'ы и call'ы, но идея именно такая.

    (Вот в PC я точно знаю, что jump, что самомодификация - все равно конвейер останавливается. А на других платформах - вдруг самомодификация дешевле).
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,569
    Спасибо Благодарностей отдано 
    1,227
    Спасибо Благодарностей получено 
    1,781
    Поблагодарили
    686 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov
    (Вот в PC я точно знаю, что jump, что самомодификация - все равно конвейер останавливается. А на других платформах - вдруг самомодификация дешевле).
    Не знаю тонкостей кэша PC, но, ни на одном из виданых мною процессоров самомодификация в цикле эмуляции не быстрее банального джампа. Мало того, она заведомо медленнее, поскольку программа исполняется из кеша команд, тогда как модификация памяти затрагивает кеш данных, что влечет за собой либо burst-цикл записи кеша данных в память с последующим обновлением кеша команд; либо медленный цикл копирования линейки кеша данных в кеш команд (это лучший вариан, хотя никогда такого не встречал); либо банальную невосприимчивость конвейера к изменившемуся коду.

    Что же касается процессоров без кеша (например 68000), то на них почти ВСЕГДА предпочтительней делать джамп по любому поводу и без повода, сколько позволяет свободная память, поскольку отсутствует главный тормозящий фактор кэшевых систем - загрузка линейки кеша команд.

  9. #18
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy
    ещё один интересный момент на сайте есть скрин из игрушки Sentinel,
    надпись и карта выводятся не полностью - точно такая же ситуация в амиговском эмуле ZxAm
    Возможно это связано вот с чем:

    "Well, I am using the same technique used by Peter McGavin in his Spectrum emulator for the Amiga, doing interrupts after 2500 Z80 branch instructions, but I am refreshing the complete screen in every interruption, this way the screen will be refreshed too often some times, I will try to control this with a timer."
    С уважением, Станислав.

  10. #19
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,775
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    1,180
    Поблагодарили
    776 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    скорее всего ошибка не в обновлении экрана, а в установке флагов какой нибудь командой

  11. #20
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да нет, не в обновлении дело. Просто при эмуляции НИКАК не учитывается время исполнения инструкций процессора, а прерывание случается после каждых 2500 инструкций перехода. Я так понимаю, что это сделано во имя скорости эмуляции. Скорее всего дело именно в таком подходе к прерываниям.
    С уважением, Станислав.

Страница 2 из 2 ПерваяПервая 12

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

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

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

Похожие темы

  1. Эмулятор Кворума
    от caro в разделе Эмуляторы
    Ответов: 13
    Последнее: 17.04.2011, 16:02
  2. Хороший эмулятор
    от ian в разделе Эмуляторы
    Ответов: 13
    Последнее: 06.01.2006, 13:43
  3. Эмулятор на сотовом
    от Jack Ketch в разделе Эмуляторы
    Ответов: 3
    Последнее: 23.07.2005, 11:52

Ваши права

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