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

User Tag List

Страница 3 из 7 ПерваяПервая 1234567 ПоследняяПоследняя
Показано с 21 по 30 из 62

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

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

    По умолчанию

    Опубликовал v0.3 в первом посте и на GitHub.

    Но до сих пор из-за упрощённой эмуляции К580ВВ55А не работает управление в играх, которые для опроса клавиатуры используют собственные процедуры, а не пользуются стандартной подпрограммой "Загрузчика". Пока я нашёл три таких программы:
    • Тест С.Рюмика
    • Игра Gold
    • Игра Jet-Set Willy

    Наверняка есть и другие игры.

    Я делал эмуляцию клавиатуры на основании анализа работы "Загрузчика". Свои изыскания опубликовал у себя в дневнике. Однако другие программы используют какие-то нюансы работы ВВ55А. Эти программы записывают байты в порты (не в регистр управления!), а потом считывают данные с соседнего порта и на основании того, что считалось, делают вывод о том нажата кнопка или нет. Закономерность того, что и в каких случаях считывается я так и не смог понять. Может быть кто-то сможет разъяснить?

    Вот, например, тест С.Рюмика в режиме работы порта #82 (канал B на считывание), последовательно засылает в канал С значения 0E, 0D, 0B. Если нажата кнопка F (левая верхняя на клавиатуре Специалиста), то после засылки этих значений из канала B считывается FF. Но если подать в канал С значение 7, то из канала B считывается 7F - сбрасывается старший бит, который как раз соответствует столбцу клавиши F на клавиатуре. Почему так происходит я понять не могу. В моём эмуляторе сейчас всегда будет считываться 7F, если нажата клавиша F, какие бы байты не засылали в соседние каналы.
    Последний раз редактировалось CityAceE; 31.12.2018 в 14:16.
    С уважением, Станислав.

  2. #22
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    2,703
    Благодарностей: 974
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все просто: $80 & CW: bit set/reset mode. Bit 0: 1=set, 0=reset, bit 1-3=bit number.
    Больше игр нет

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

    По умолчанию

    svofski, спасибо. Но можно для тупых более подробно?
    С уважением, Станислав.

  4. #24
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    4,055
    Благодарностей: 1321
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не мне бы конечно писать на эту тему, но пока настоящие специалисты не подтянулись - можно посмотреть описание Pyk, фрагмент со слов "Для опроса клавиатуры может использоваться...". Можно этот вопрос и несколько иначе рассмотреть, но с точки зрения эмуляции и такое описание (за которое респект Pykу) вполне подойдет.

  5. Этот пользователь поблагодарил ivagor за это полезное сообщение:
    CityAceE (31.12.2018)

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

    По умолчанию

    ivagor, вот-вот я как раз про это и говорю:
    Для опроса клавиатуры может использоваться один из трех методов:

    • Порты A, младшая половина C и B программируются на ввод. Нажатая клавиша определяется по положению нулей в обоих портах. Нажатая клавиша располагается на пересечении положения нулей.
    • Порт A и младшая половина C программируются на вывод, порт B - на ввод. Осуществляется сканирование методом бегущего "0" путем записи в порты A и C и анализа порта B.
    • Порт A и младшая половина C программируются на ввод, порт B - на вsвод. Осуществляется сканирование методом бегущего "0" путем записи в порт B и анализа портов A и C.
    У меня в эмуляторе как раз и реализована эмуляция под первый метод, который используется в "Загрузчике". Но я не могу найти информацию, при каких значениях, что получаем в соседних портах для сканирования методом бегущего нуля.
    С уважением, Станислав.

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

    По умолчанию

    Всё, дошло!
    С уважением, Станислав.

  8. #27
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    4,055
    Благодарностей: 1321
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для повышения удобства отладки можно воспользоваться таким тестиком. Параллельно можно запустить emu или emu80 и сравнивать результаты. Из исходника думаю понятно, что там делается, но на всякий случай: 91 - "метод 3"; 82 - "метод 2".
    Вложения Вложения
    • Тип файла: zip klav1.zip (554 байт, Просмотров: 14)

  9. Этот пользователь поблагодарил ivagor за это полезное сообщение:
    CityAceE (31.12.2018)

  10. #28
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    2,703
    Благодарностей: 974
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    CityAceE, прошу прощения за телеграфный стиль - я писал с телефона. У 8255 есть режим быстрого сброса/установки бит в порту C. Он подробно описан в документации и эмуляторах, поэтому вдаваться в подробности здесь смысла нет.

    Пока не изучал подробно сорцы, но сразу обратил внимание на то, что нету привязки к времени и если где-то принудительно не задан VSYNC, то программа молотит на 100% ядра. Особо не вдаваясь в pygame, с которым я знаком шапочно, попробовал сделать в основном цикле вот так:

    Код:
        clock = pygame.time.Clock()
        while running:
            cpu.core()
            if cpu.ticks > INT_TICKS:
                cpu.ticks = 0
                if cpu.scr_upd:
                    cpu.pygame.display.flip()
                    clock.tick(50)
                    cpu.scr_upd = False
    Если я его правильно понял, clock.tick(fps) вызывает SDL_Delay() если его вызывают чаще, чем указанный в параметре fps. Теперь эффективность кода можно оценивать по загрузке проца.
    Больше игр нет

  11. Этот пользователь поблагодарил svofski за это полезное сообщение:
    Q-Master (02.01.2019)

  12. #29
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    2,703
    Благодарностей: 974
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В основном модуле предлагаю убрать часть, которая проверяет запись в экран и рисует пиксели поштучно. Вместо нее добавить вот такое шаманство. Честно скажу, долго подбирал
    Код:
    def blitsurface():
        mem = np.reshape(memory[0x9000:0xc000], (256,48), 'F')
        bits = np.unpackbits(mem) * 255
        pygame.surfarray.blit_array(screen, np.reshape(bits, (256,384)).T)
    И в основном цикле, соответственно:
    Код:
        while running:
            cpu.core()
            if cpu.ticks > INT_TICKS:
                cpu.ticks = 0
                cpu.blitsurface()
                cpu.pygame.display.flip()
                n = clock.tick(50)
    Все это в приаттаченном к #1 патче, чтоб быстро попробовать.
    Последний раз редактировалось svofski; 31.12.2018 в 22:24.
    Больше игр нет

  13. Эти 2 пользователя(ей) поблагодарили svofski за это полезное сообщение:
    CityAceE (01.01.2019), Q-Master (02.01.2019)

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Все это в приаттаченном к #1 патче, чтоб быстро попробовать.
    Сравниваем. Слева - v0.3, справа - твой вариант.

    Последний раз редактировалось CityAceE; 01.01.2019 в 06:20.
    С уважением, Станислав.

  15. Этот пользователь поблагодарил CityAceE за это полезное сообщение:
    svofski (01.01.2019)

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

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

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

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

Похожие темы

  1. Специалист-М
    от zx_ в разделе Специалист
    Ответов: 210
    Последнее: 23.03.2019, 16:26
  2. Ответов: 61
    Последнее: 19.03.2019, 08:50
  3. Тулзы для работы с образами на Python
    от Q-Master в разделе Утилиты
    Ответов: 4
    Последнее: 25.11.2014, 23:44
  4. Эмулятор ПК "Специалист" для Mac OS X
    от hdc в разделе Эмуляторы отечественных компьютеров
    Ответов: 1
    Последнее: 21.10.2009, 11:28
  5. Python
    от Black1980 в разделе Программирование
    Ответов: 12
    Последнее: 26.12.2006, 11:30

Ваши права

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