User Tag List

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

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

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

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

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

    По умолчанию

    Q-Master, спасибо за столь ценные советы. Никогда до этого не приходилось сталкивался с memoryview! Есть отличный повод разобраться и применить. Авось эмулятор начнёт шевелиться чуть шустрее
    С уважением, Станислав.

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

  3. #2

    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    373
    Поблагодарили
    310 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    CityAceE, скриншоты просто прослезили ) Создал тему эмулятора на игровом форуме, замечательный предпраздничный релиз!
    https://www.old-games.ru/forum/posts/1521263/

    Мне вот что подумалось, сколько в IT отрасли ещё специалистов - у которых первой машиной была отечественная микроЭВМ? Может опрос какой-то организовать? Естественно все клоны спектрумов (и т.п.) нашего производства идут в зачёт как отечественные (что естественно!)
    Последний раз редактировалось hobot; 27.12.2018 в 03:50.
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  4. #3

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Авось эмулятор начнёт шевелиться чуть шустрее
    Я бы на твоем месте еще сделал работу с флагами не так, как у тебя - каждый флаг - отдельная переменная. А держал бы все их в одном байте или слове. Ну и отказался бы от универсальности эмуляции 8080/Z80.

  5. #4

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Я бы на твоем месте еще сделал работу с флагами не так, как у тебя - каждый флаг - отдельная переменная. А держал бы все их в одном байте или слове.
    А какие это может дать преимущества? Как я себе это понимаю, когда каждый флаг в отдельной переменной, его можно быстрее устанавливать/сбрасывать. Всего пара команд i8080 требует полного флагового регистра, и для этих команд не сильного дорого запаковать все флаги в один байт и производить обратную процедуру. А все остальные команды расставляют флаги по отдельности.

    Цитата Сообщение от Titus Посмотреть сообщение
    Ну и отказался бы от универсальности эмуляции 8080/Z80.
    Это, конечно, не сильно скажется на производительности, но, да, отказаться можно.
    С уважением, Станислав.

  6. #5

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

    Вот, например, твой вариант RLCA:

    Код:
        reg_a = reg_a << 1
        flag_c = bool(reg_a & 0x100)
        reg_a = (reg_a | flag_c) & 0xff
        if not i8080:
            flag_h = False
        fflag_n(False)
        fflag_3(bool(reg_a & 0b00001000))
        fflag_5(bool(reg_a & 0b00100000))
    И как можно оптимально это эмулировать (без учета универсальности Z80/8080):

    Код:
    	reg_A = (reg_A << 1) | (reg_A >> 7);			
    	reg_F = (reg_A & CONST_53C) | (reg_F & CONST_SZPH);

  7. #6

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Я не знаю, питона, поэтому пример приведу на Си:
    Приведённый тобой пример будет работать в Python без каких-либо изменений, даже точки с запятой убирать не придётся Спасибо, я поизучаю и такой вариант, попробую померить скорость и если будет выигрыш, то применю.

    Цитата Сообщение от svofski Посмотреть сообщение
    В Питоне может быть и невелика будет разница, но я бы попробовал.
    Тоже нужно будет прикинуть и измерить скорость обоих вариантов. Хотя в Python я ещё ни разу не использовал вызов функции по значению из списка - пользовался только вызовом по словарю, как в этом эмуляторе. И даже не знаю осуществимо ли это? Видимо, осуществимо.

    Я уже получил довольно много полезных советов, обязательно воспользуюсь ими всеми. Мне бы сейчас заставить работать систему при варианте хранения регистров в memoryview. Мало того, что оно просто сейчас перестало работать, так ещё и всякие нюансы всплыли. Например, вариант, предложенный Titus'ом:

    Код:
    reg_A = (reg_A << 1) | (reg_A >> 7);
    при таком методе хранения работать не будет, например, если reg_A == 0xFF. Как только сдвинутся биты внутри первых скобок я получу ошибку, что это значение не может хранится в байте. Вот и приходится огород городить из временных переменных, что явно не идёт на руку скорости эмуляции.
    Последний раз редактировалось CityAceE; 27.12.2018 в 15:46.
    С уважением, Станислав.

  8. #7

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Приведённый тобой пример будет работать в Python без каких-либо изменений, даже точки с запятой убирать не придётся Спасибо, я поизучаю такой вариант, попробую померить скорость и если будет выигрыш, то применю.
    Замечу, что reg_A должен быть формата uint8, иначе придется сделать иначе.

    Это фрагмент из моего эмулятора Z80. Он очень быстрый. Ну очень) Куда уж быстрее)
    Последний раз редактировалось Titus; 27.12.2018 в 15:41.

  9. #8

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

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Хотя в Python я ещё ни разу не использовал вызов функции по значению из списка - пользовался только вызовом по словарю, как в этом эмуляторе. И даже не знаю осуществимо ли это? Видимо, осуществимо.
    Конечно осуществимо. И из списка и из тупли.

    Написал незамысловатый бенчмарк. С современными компами и интерпретируемыми языками уровня питона такие бенчмарки мало толку дают. У меня получается разброс в 10% между запусками, слишком много внешних воздействий. В среднем, как мне показалось, тупля незначительно опережает список, список незначительно опережает словарь, но в общем это ловля блох и вряд ли эмулятор ускорится в два раза от такой переделки. Хотя в реальном коде разница может оказаться другой и, учитывая то, что попробовать вообще ничего не стоит, по-моему стоит попробовать

    Код:
    import time
    
    def foo(): return 'foo'
    def bar(): return 'bar'
    
    disp=[foo if i & 1 else bar for i in range(256)]
    dict={}
    for i in range(256):
        dict[i] = foo if i & 1 else bar
    
    
    niter = 100000000
    
    print("dispatch using list")
    start_time = time.time()
    for i in range(niter):
        u = disp[i & 255]()
    elapsed_time = time.time() - start_time
    print("elapsed time=", elapsed_time)
    
    print("dispatch using dictionary")
    start_time = time.time()
    for i in range(niter):
        u = dict[i & 255]()
    elapsed_time = time.time() - start_time
    print("elapsed time=", elapsed_time)
    
    tust=tuple(disp)
    print("dispatch using tuple")
    start_time = time.time()
    for i in range(niter):
        u = tust[i & 255]()
    elapsed_time = time.time() - start_time
    print("elapsed time=", elapsed_time)
    - - - Добавлено - - -

    P.S. заметил, что вставил версию без вызова функции, только с выборкой. Перепроверил, разницы нет, но на всякий случай -- в замеряемых циклах добавить ().
    Больше игр нет

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

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

Эту тему просматривают: 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

Ваши права

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