User Tag List

Страница 4 из 7 ПерваяПервая 1234567 ПоследняяПоследняя
Показано с 31 по 40 из 70

Тема: sPycialist - эмулятор ПК Специалист на Python

Комбинированный просмотр

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

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,641
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Круто! Да, с опросом событий это ты очень верно подменил. Я даже не знаю почему я так бездумно сделал. Сделал, и даже в ту сторону и не смотрел больше. Вот что значит свежий взгляд со стороны!

    Сравниваем изменения по сравнению с твоей предыдущей версией и реальной скоростью в Emu80:



    С уважением, Станислав.

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

  3. #2

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,299
    Спасибо Благодарностей отдано 
    1,028
    Спасибо Благодарностей получено 
    813
    Поблагодарили
    484 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так я и сам смотрел на это место два дня и мог бы обратить внимание, но в упор не видел. Заметил только когда напечатал табличку профайлера и посмотрел на число вызовов event.get().

    Оставшееся всё вполне равномерно, вряд ли можно что-то принципиально улучшить в эмуляции процессора.

    Самые популярные функции (отсортировано по количеству вызовов). По общему времени лидер - j<cond>, но у нее и количество вызовов большое, так что вроде пропорционально.
    Код:
    Tue Jan  1 16:19:19 2019    prof.out
    
             28186074 function calls (28179897 primitive calls) in 24.967 seconds
    
       Ordered by: call count
    
       ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      8216227    1.807    0.000    1.807    0.000 i8080.py:338(inc_pc)
      6406851    3.577    0.000   18.481    0.000 i8080.py:1128(core)
      3540402    0.678    0.000    0.678    0.000 i8080.py:315(read_mem)
      1598541    0.494    0.000    0.494    0.000 i8080.py:63(get_conditions)
      1595476    3.415    0.000    5.177    0.000 i8080.py:865(b11000010)
      1428592    1.612    0.000    1.925    0.000 i8080.py:669(b01000000)
      1412212    1.731    0.000    1.731    0.000 i8080.py:170(or_a)
      1398364    1.536    0.000    3.577    0.000 i8080.py:783(b10110000)
      1394605    1.400    0.000    1.714    0.000 i8080.py:494(b00001011)
       127088    0.092    0.000    0.092    0.000 i8080.py:353(dec_reg)
       125392    0.141    0.000    0.256    0.000 i8080.py:536(b00000101)
       117377    1.023    0.000    1.023    0.000 i8080.py:245(byte2mem)
        83329    0.163    0.000    0.163    0.000 i8080.py:181(cp_a)
        50121    0.084    0.000    0.084    0.000 i8080.py:148(and_a)
        49003    0.100    0.000    0.157    0.000 i8080.py:469(b00111010)
        48731    0.068    0.000    0.180    0.000 i8080.py:1016(b11100110)
        47052    0.066    0.000    0.188    0.000 i8080.py:1040(b11111110)
        41886    0.052    0.000    0.077    0.000 i8080.py:661(b01110000)
        41688    0.047    0.000    0.056    0.000 i8080.py:477(b00000011)
        39268    0.043    0.000    0.060    0.000 i8080.py:435(b00001010)
        36239    0.041    0.000    0.120    0.000 i8080.py:799(b10111000)
        21200    0.020    0.000    0.020    0.000 i8080.py:343(inc_reg)
    Больше игр нет

  4. #3

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,388
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вариант того, что можно сделать с клавиатурой (на базе v0.3). Изящества и красоты здесь нет, все тупо, но вроде работает. Еще в spyc_keyboard.py можно убрать fill_matrix. А по хорошему надо нормальный 8255.
    Вложения Вложения
    • Тип файла: zip i8080.zip (5.8 Кб, Просмотров: 75)

  5. #4

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,641
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ivagor, отличное решение с клавиатурой - не заполнять память последовательностью, а отдавать нужный байт при чтении соответствующей ячейки памяти! Спасибо за процедуру! Я её слегка оптимизировал и вынес за пределы эмулятора процессора. Также вынес за пределы эмулятора процессора и вывод экрана. Хочу чтобы эмулятор процессора был максимально чистым, и чтобы в случае чего его можно было задействовать в любом другом проекте.

    Сейчас клавиатура работает везде, где не работала (тест С.Рюмика, игры Gold и Jet-Set Willi), однако остаются следующие проблемы:
    1. Не работает кнопка НР.
    2. Идёт залипание кнопок на пересечениях столбцов и рядов. То есть, если нажать две кнопки по диагоналям воображаемого прямоугольника на клавиатуре, то "нажмутся" ещё две по оставшимся углам прямоугольника.

    Сходу понять почему это происходит и, соответственно, устранить у меня не получилось.

    Также после оптимизации svofski сломался мой монитор регистров в i8080.py, вызываемый при запуске этого файла. Во-первых, теперь перепутаны местами значения регистровой пары AF. А во-вторых, приложение крашится на коде #21, при выводе содержимого памяти HL (или DE при коде #11). Опять же сходу сообразить что там не так не получилось.

    Обновил версию 0.4 в первом посте и на гитхабе.

    P.S. Приаттачил к сообщению пропатченый тест C.Рюмика, чтобы не ждать прохождения всех тестов, а чтобы сразу запускался тест клавиатуры. Там удобно увидеть все возникающие проблемы с клавиатурой.
    Вложения Вложения
    Последний раз редактировалось CityAceE; 02.01.2019 в 14:30.
    С уважением, Станислав.

  6. #5

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,388
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    НР можно починить малой кровью, а чтобы диагональ не превращалась в квадрат нужно сильно переделывать.
    Вложения Вложения
    Последний раз редактировалось ivagor; 02.01.2019 в 14:12.

  7. #6

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,641
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    НР можно починить малой кровью
    Спасибо! Я чуть подправил:

    Код:
    elif vv55a_mode == 0x82:
        if not (addr % 4):
            return 0xff - kb_mem[0]
        elif addr % 4 == 1:
            if kb_ports[0] & kb_mem[0] or (kb_ports[2] & kb_mem[2]) % 0x10:
                return 0xff - kb_ports[1]
            else:
                return 0xff - (kb_ports[1] & 2)
        elif addr % 4 == 2:
            return 0xff - kb_mem[2]

    Цитата Сообщение от ivagor Посмотреть сообщение
    чтобы диагональ не превращалась в квадрат нужно сильно переделывать.
    А в чём суть переделки?

    Цитата Сообщение от svofski Посмотреть сообщение
    А если как сейчас, то в принципе ок с учетом того, что я там сделано 1 ^ во всех адресациях регистров, но получается вот этот затык с перепутанным AF.
    Бог с ним, с монитором - регистровую пару легко перевернуть в итоге при выводе. Просто я не совсем понял почему перемена местами A и F при их задании в начале файла всё крашит. Не стал разбираться и бросил. А вот 1 ^ меня реально не очень порадовало - это же дополнительная медленная логическая операция, которая будет замедлять эмуляцию инструкций. Но опять же всё оставил так, как ты сделал.
    Последний раз редактировалось CityAceE; 02.01.2019 в 14:58.
    С уважением, Станислав.

  8. #7

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,299
    Спасибо Благодарностей отдано 
    1,028
    Спасибо Благодарностей получено 
    813
    Поблагодарили
    484 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Бог с ним, с монитором - регистровую пару легко перевернуть в итоге при выводе. Просто я не совсем понял почему перемена местами A и F при их задании в начале файла всё крашит. Не стал разбираться и бросил. А вот 1 ^ меня реально не очень порадовало - это же дополнительная медленная логическая операция, которая будет замедлять эмуляцию инструкций. Но опять же всё оставил так, как ты сделал.
    Вот я не могу придумать, как сделать так, чтобы индексы регистров в bytearray были бы b = 0, c = 1, ... но при этом словная memoryview от того же массива была бы не перевернутой. Медленность операции 1 ^ мне кажется преувеличенной, но элегантности в этом нет. Факт.

    Перемена местами A и F все крашит потому, что инструкции, которые ссылаются по индексу на A (например inr a), начинают ссылаться на F.
    Больше игр нет

  9. #8

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,299
    Спасибо Благодарностей отдано 
    1,028
    Спасибо Благодарностей получено 
    813
    Поблагодарили
    484 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    CityAceE, я погорячился. Сейчас проще поправить монитор регистров. Инструкции работают за счет того, что у тебя операции с PSW и SP вынесены в отдельные обработчики. Но вообще я не прав, надо как-то переделать регистровый файл. Пока не могу придумать, как это получше сделать -- если регистры нумеровать подряд, 0=b, 1=c... то получается, что в отображении на регистровые пары перепутаны байты. А если как сейчас, то в принципе ок с учетом того, что я там сделано 1 ^ во всех адресациях регистров, но получается вот этот затык с перепутанным AF.

    - - - Добавлено - - -

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Смысла нет ровным счетом никакого. Доступ к переменным класса и ф-циям класса в питоне несколько медленнее, т.к. везде передается self и еще там куча всякой магии.
    Вот. Я уже убедился в этом на практике.
    Больше игр нет

  10. #9

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,388
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сейчас все нажатия сливаются в 2 с половиной байта, по которым можно правильно определить одновременные нажатия только в пределах ряда или колонки. Вместо этих 2.5 байт надо делать матрицу 12x6+1 бит или 12x7. Содержимое keys при этом целесообразно поменять на пары № колонки, № столбца.

  11. #10

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,641
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем, у меня пока нет никаких полезных мыслей ни по регистрам, ни по клавиатуре. Зато эмулятор стал вполне играбельным:

    С уважением, Станислав.

Страница 4 из 7 ПерваяПервая 1234567 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Специалист-М
    от zx_ в разделе Специалист
    Ответов: 230
    Последнее: 18.12.2021, 14:41
  2. Ответов: 77
    Последнее: 21.01.2021, 00:14
  3. Тулзы для работы с образами на Python
    от Q-Master в разделе Утилиты
    Ответов: 4
    Последнее: 25.11.2014, 22:44
  4. Эмулятор ПК "Специалист" для Mac OS X
    от hdc в разделе Эмуляторы отечественных компьютеров
    Ответов: 1
    Последнее: 21.10.2009, 11:28
  5. Python
    от Black1980 в разделе Программирование
    Ответов: 12
    Последнее: 26.12.2006, 10:30

Ваши права

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