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

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

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

  1. #1
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    2,997
    Благодарностей: 1285
    Записей в дневнике
    5
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию ZX68 - новый эмулятор Спектрума для PalmOS

    ZX68 is the name for a ZX Spectrum emulator witten in assembler for the Motorola 68000 CPU and all compatible variants. The idea is to do a ZX Spectrum emulator that can be executed on any machine based on the Motorola 68000. The emulation core can be exactly the same for all the machines, the only diference will be the code to access specific hardware of the host machine, like the screen, keyboard, sound hardware and file access.

    Actually I am working in versions for 680x0 based Amigas and PalmOS compatible devices, my intention is to do versions for Macintosh, Atari ST, Linux m68k and any other plataform based or compatible with the Motorola 68000 CPU.

    http://zx68.8k.com/
    С уважением, Станислав.

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

  3. #2
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    2,997
    Благодарностей: 1285
    Записей в дневнике
    5
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну вот, решил проверить скорость работы эмулятора ZX68. Безусловно, точно замерить скорость эмуляции не реально, поэтому я решил воспользваться игрой AticAtac. Там в начале игры появляются часы, которые на настоящем Спектруме отсчитывают секунды близкие к реальным. Так вот я изготовил два снепшота для эмуляторов ZX68 и ZX-Pilot и поочерёдно запустил их на обоих эмуляторах на своём КПК. Для замерения времени я воспользовался обычным секундомером нажав на "Старт" при появлении на экране эмуляторов 00:01 и нажимал на "Стоп" при появлении цифры 00:30, то есть губо говоря измерял за сколько времени эмуляторы обрабатывают 29 секунд эмуляруемого времени. Итак, счётчик в игре AticAtac изменился с 00:01 до 00:30 под эмулятором ZX68 за 3 минуты 45 секунд, а под эмулятором ZX-Pilot за 1 минуту 20 секунд. Конечно, такой замер ни в коем случае не может говорить о том, что ZX-Pilot работает в 3 раза быстрее, чем ZX68, но он как минимум может говорить, что ZX-Pilot всё же быстрее.

    Кроме того, мне было любопытно взгялнуть а как же устроен этот эмулятор внутри. Каково же было моё удивление, когда я обнаружил, что главный цикл ядра эмуляции совпадает с моим по сути 1:1. Пусть это всего лишь несколько строк кода, но от них зависит очень много. Я ни в коем случае не пытаюсь обвинить автора ZX68 в плагиате, но тем не менее факт очень любопытный. Можно сказать, что эти несколько строк я вынашивал месяц. Вполне вероятно, что нам обоим в голову пришла одинаковая идея, правда с промежутком в три года А даже если автор и использовал мою идею, то мне совсем не жалко!

    Ещё мне кажется, что у ZX68 нет будущего - уж слишко грубо сделана в нём эмуляция. Что уж говорить, если в этом эмуляторе никак не учитывается количество тактов, за которое исполняется каждая команда Z80.

    Правда, автор ZX68 сделал запрет на запись в область ПЗУ Спектрума. Я также делал в своём эмуляторе на первых порах, но позже отказался от него во имя скорости, пожертвовав совместимостью.

    Ещё осталось непонятным почему на всех сайтах, где лежит ZX68 в Интернете, в качестве иллюстрации используется анимированный GIF, изготовленный мною для иллюстрации работы ZX-Pilot'а!
    С уважением, Станислав.

  4. #3
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,937
    Благодарностей: 3436
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE
    Кроме того, мне было любопытно взгялнуть а как же устроен этот эмулятор внутри. Каково же было моё удивление, когда я обнаружил, что главный цикл ядра эмуляции совпадает с моим по сути 1:1. Пусть это всего лишь несколько строк кода, но от них зависит очень много. Я ни в коем случае не пытаюсь обвинить автора ZX68 в плагиате, но тем не менее факт очень любопытный. Можно сказать, что эти несколько строк я вынашивал месяц. Вполне вероятно, что нам обоим в голову пришла одинаковая идея, правда с промежутком в три года А даже если автор и использовал мою идею, то мне совсем не жалко
    Интересно, какие эти несколько строк?

    p.s.: Под 680x0 я сам в свое время для Амиги делал эмулятор Спектрума и Денди...

  5. #4
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Благодарностей: 29
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  6. #5
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    2,997
    Благодарностей: 1285
    Записей в дневнике
    5
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus
    Интересно, какие эти несколько строк?
    Цитата Сообщение от Vladimir Kladov
    Или что вообще такого уникального можно придумать для эмуляции Z80, кроме почти (? да нет, при чем тут почти - абсолютно) единственно возможного цикла выборки и исполнения команд?
    Я подумал и понял, что действительно тут может быть только одно единственно верное решение! Это же подтвердил и автор ZX68, когда я поросил его прокомментировать:

    "This is incredible, our main loops are almost
    identical, thank you very much for your help. Maybe we
    can join our projects to do a better emulator.

    Greetings from Spain."

    А циклы выглядят так:

    ZX-Pilot:
    moveq #0,d7 ;4
    move.b (a1)+,d7 ;8
    add.w d7,d7 ;4
    move.w (a2,d7.w),d7 ;14
    jmp (a3,d7.w) ;14

    ZX68:
    clr.w d7 ;4
    move.b (a4)+,d7 ;8
    lsl.w #1,d7 ;8
    move.w (a1,d7.w),d7 ;14
    jmp (a3,d7.w) ;14

    Различаются только первая и четвертая строки, которы делают одно и то же: первая обнуляет регистр d7, а вторая умножает его на 2, с той разницей, что в моём варианте удаётся сэкономить 4 такта
    С уважением, Станислав.

  7. #6
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,937
    Благодарностей: 3436
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov
    Или что вообще такого уникального можно придумать для эмуляции Z80, кроме почти (? да нет, при чем тут почти - абсолютно) единственно возможного цикла выборки и исполнения команд?
    При написании цикла эмуляции на медленных процессорах нельзя действовать просто "в лоб". Даже для 68000 схема быстрого цикла далеко не так очевидна, как может показаться на первый взгляд. Не говоря уже о реализации на более сложных процессорах, например на 68030, где, помимо всего прочего, необходимо учитывать особенности работы кеша данных и команд.

  8. #7
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    2,997
    Благодарностей: 1285
    Записей в дневнике
    5
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus
    Даже для 68000 схема быстрого цикла далеко не так очевидна, как может показаться на первый взгляд.
    И как ты оцениваешь то, что я представил?
    С уважением, Станислав.

  9. #8
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,937
    Благодарностей: 3436
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE
    И как ты оцениваешь то, что я представил?
    ZX-Pilot:
    moveq #0,d7 ;4
    move.b (a1)+,d7 ;8
    add.w d7,d7 ;4
    move.w (a2,d7.w),d7 ;14
    jmp (a3,d7.w) ;14
    Для 68000 неплохо, но почему, например, не:

    moveq #0,D7 ;4
    move.b (A1)+,D7 ;8
    add.w D7,D7 ;4
    move.w (A2,A7.w),A7 ;14
    move.l D7,A3 ;4
    jmp (A3) ;8 (на 2 такта быстрее)

    или:

    moveq #0,D6 ;4
    move.b (A1)+,D6 ;8
    add.w D6,D6 ;4
    move.l D6,A3 ;4
    move.w (A3),D7 ;8
    move.l D7,A3 ;4
    jmp (A3) ;8 (на 4 такта быстрее)

    или, если использовать вместо байт 16-битные слова, где младший байт равен нулю, то выборка сведется к:

    move.w (A1)+,D7 ;8
    move.l D7,A3 ;4
    jmp (A3) ;8 (на 24 такта быстрее, хотя приведет к потерям в обработчиках некоторых команд)

    p.s.: Если, конечно, я правильно помню 68000

  10. #9
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    2,997
    Благодарностей: 1285
    Записей в дневнике
    5
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus
    p.s.: Если, конечно, я правильно помню 68000
    Видимо ты подзабыл его

    Ключевой момент - jmp (a3,d7.w)! В a3 хранится начало таблицы адресов выборки команд, в d7 сдвиг относительно команды NOP. jmp (a3,d7.w) обозначает что нужно перейти на адрес a3+d7. А ты предлагаешь просто перехоть по адресу d7
    С уважением, Станислав.

  11. #10
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,937
    Благодарностей: 3436
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE
    Видимо ты подзабыл его

    Ключевой момент - jmp (a3,d7.w)! В a3 хранится начало таблицы адресов выборки команд, в d7 сдвиг относительно команды NOP. jmp (a3,d7.w) обозначает что нужно перейти на адрес a3+d7. А ты предлагаешь просто перехоть по адресу d7
    D7 - базовый адрес подпрограмм эмуляции команд выровненный на границу 64Кб, где D7[31..16] - собственно базовый адрес, а D7[15..0] - смещение выбираемое по таблице.

    Т.е. взамен внутрикомандного A3.l+D7.w, выполняемого за 6 тактов, мы получаем A3 = D7.l[31..16]+D7.w за 4 такта

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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