User Tag List

Страница 23 из 26 ПерваяПервая ... 1920212223242526 ПоследняяПоследняя
Показано с 221 по 230 из 256

Тема: Эмулятор БК-0010-01, БК-0011 и БК-0011М

  1. #221

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    613
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    136 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Обсуждали тут такой баг
    А где обсуждали? Я про это впервые слышу, как-то мимо меня прошло обсуждение.
    Добавить эмуляцию бага смогу, если будет его точное описание, желательно на уровне микрокода.
    Я ж не знаю какие команды подвержены багу, и как его реализовывать.

  2. #222

    Регистрация
    22.11.2009
    Адрес
    Москва
    Сообщений
    1,699
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    195
    Поблагодарили
    127 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Занятная находка, авторам защит понравилась бы в свое время. Вместе с находкой про готовность клавиатуры (https://forum.maxiol.com/index.php?s...ndpost&p=55014)

    Сижу я значит, весьма много лет назад, клепаю на дорогой и любимой БК-шке то-то. И писал я программу для работы с клавиатурой. Проверяю разряд 6 в регистре 177716, там единичка, то есть клавиша нажата. Иду брать код в @#177662, и обламываюсь - там какая-то фигня! Проверяю @#177660 - и правда, бит, который говорит о готовности кода с клавиатуры, не установлен! И только после примерно 50-70 циклов SOB он таки появляется.

    В общем, оказывается, что между нажатием клавиши (о чём тут же докладает бит в регистре 177716) и появлением готового кода проходит некоторое время, причём разное для разных экземпляров БКшек, но в пределах одного экземпляра - более-менее стабильное. Сначала об этой находке сделал анонс (Дuck Tales #4) - а потом подумал-подумал, и решил (Дuck Tales #7) не раскрывать детали - чтобы любители делать защиты не приняли это на вооружение.

    Как я понимаю, величина задержки определялась конкретными экземплярами D4, R4, C3 и D2 (см. схему), установленными в конкретной машине.

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

  3. #223

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    485
    Спасибо Благодарностей отдано 
    140
    Спасибо Благодарностей получено 
    392
    Поблагодарили
    147 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    А где обсуждали? Я про это впервые слышу, как-то мимо меня прошло обсуждение.
    Пока-что в телеграме. Увы не тут.
    Описание - наверное надо идти к vslav читать реверс ВМ1. А так можно просто взять железную БК или ФПГА версию на мистере (там по реверсу сделано). Запустить собственно код, увидеть что вот такие мол дела.
    Ну и надеюсь Alex_K или svinka появятся и опишут в чем проблема-с. Алексей сказал что напишет (я сам в этих микрокодах ни бум-бум).
    Алексей такое в телеграме написал: У Vslav-а в документе при описании алгоритмов есть ошибки
    Возможно какие-то ошибки. Ну бывает.
    Последний раз редактировалось BlaireCas; 04.10.2025 в 16:42.
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

  4. #224

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Правильный алгоритм регистровых команд MOV и MOVB.
    Команда MOV:
    Код:
    if (dd address mode == 0) &&
       (ss address mode == 0)
       {
        01: A = PC
        IR preload start, word read start
        if (ss register == PC) ||
           (dd register == PC)
            01: R12 = PC + 2
        else
            01: PC = PC + 2;
    
        58: Rd = Rs, assign NZV MJ[NZV]=FSEL(NZV), PSW[NZV]=FSEL(NZV)
            if (dd register == PC) ||
               (ss register == PC)
                11: next instruction
            else
               {
                MCIR poll, wait read
                01: next instruction
               }
       }
    else
    Команда MOVB:
    Код:
    if (dd address mode == 0) &&   (ss address mode == 0)
       {
        01: A = PC
        IR preload start, word read start
        if (ss register == PC) ||
           (dd register == PC)
            01: R12 = PC + 2
        else
            01: PC = PC + 2;
    
    
        58: Rd[7:0] = Rs[7:0], MJ[NZVC]=FSEL(NZVC), MA=MJ
        51: if (N) Rd |= 177400
            else   Rd &= ~177400;
            assign NZV MJ[NZV]=FSEL(NZV), PSW[NZV]=FSEL(NZV)
            if (dd register == PC)
                11: next instruction
            else
               {
                MCIR poll, wait read
                01: next instruction
               }
       }
    else
    Регистровые команды всегда запускают предвыборку следующей команды. А уже далее смотрится, если в качестве одного из регистров используется счётчик команд, то увеличение счётчика команд на два не происходит, запись уходит не в PC, а в R12. После исполнения команды так же проверяются используемые регистры, и если среди них есть счётчик команд, то осуществляется переход на чтение некэшированной инструкции (адрес 11). В противном случае проверяются прерывания и при их отсутствии осуществляется переход на исполнение следующей команды.
    Но в микрокоде исполнения команды MOVB присутствует ещё один шаг с номером 51, который осуществляет знаковое расширение старшего байта. И ошибка состоит в том, что на принадлежность к счётчику команд проверяется только регистр-приёмник, но не источник. В итоге в случае с командой MOVB PC,Rd, где Rd!=PC происходит такой глюк: сразу же запускается чтение в регистр предвыборки следующей команды, но при этом счётчик команд не увеличивается на два. После исполнения команды MOVB, т.к. регистр-источник не проверяется на PC, происходит ожидание завершения чтения команды, установка флагов и переход на исполнение только что прочитанной команды. Но счётчик команд стоит не после прочитанной команды, а на ней. В итоге команда исполняется и запускается ещё раз её чтение, ну и исполнение второй раз. Если команда многословная, то сама команда уже является вторым словом.

    Этот пользователь поблагодарил Alex_K за это полезное сообщение:

    gid(05.10.2025)

  5. #225

    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,481
    Спасибо Благодарностей отдано 
    310
    Спасибо Благодарностей получено 
    250
    Поблагодарили
    218 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Пока-что в телеграме. Увы не тут.
    Очень помнится, что и тут было, но вскользь в какой-то другой теме, не про реверс ВМ1.
    "Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.

  6. #226

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CodeMaster Посмотреть сообщение
    Очень помнится, что и тут было, но вскользь в какой-то другой теме, не про реверс ВМ1.
    Да, там. Нашёл Patron.

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

  8. #227

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    485
    Спасибо Благодарностей отдано 
    140
    Спасибо Благодарностей получено 
    392
    Поблагодарили
    147 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    К вопросу о том мол "да вообще зачем нужен этот movb PC, R0 - судя по сообщениям в телеграме
    - а я в демке использовал
    - черт понятно демка-то работала только на эмуляторе
    Возможно у демомейкеров которые экономят каждое слово такая команда может быть вполне себе востребована. Допустим надо занести в регистр число 10 - ну напиши ты mov #10, R0 - так тут два слова-же. А мы экономим "каждый байт!". И подбором адреса запуска демки и через movb PC, R0 можно занести нужное число в регистр через однословную команду. Но увы, смотря что за ней будет стоять - оно заработает только на эмуляторе.
    Шедевр портирования на УКНЦ - игра Highway Encounter
    Эмуляторы: UKNCBTL, EmuStudio (респект авторам)

  9. #228

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Но увы, смотря что за ней будет стоять - оно заработает только на эмуляторе.
    Или на FPGA, если поправить микрокод.

  10. #229

    Регистрация
    22.11.2009
    Адрес
    Москва
    Сообщений
    1,699
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    195
    Поблагодарили
    127 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    В итоге команда исполняется и запускается ещё раз её чтение, ну и исполнение второй раз. Если команда многословная, то сама команда уже является вторым словом.
    Как это работает в случае BR и подобных?

  11. #230

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shattered Посмотреть сообщение
    Как это работает в случае BR и подобных?
    Выполнит BR, но при вычислении адреса перехода будет использован адрес не после команды, а самой команды, т.к. счётчик команд указывает на саму команду BR.

    Этот пользователь поблагодарил Alex_K за это полезное сообщение:

    gid(05.10.2025)

Страница 23 из 26 ПерваяПервая ... 1920212223242526 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Отличия БК-0011М от БК-0010(01)?
    от nzeemin в разделе БК-0010/0011
    Ответов: 22
    Последнее: 30.03.2021, 18:47
  2. БК-0010/0011: Разное
    от CD-Inc в разделе БК-0010/0011
    Ответов: 73
    Последнее: 30.07.2012, 16:58
  3. Начало выпуска БК-0011 и БК-0011М
    от dk_spb в разделе БК-0010/0011
    Ответов: 6
    Последнее: 14.10.2010, 14:22
  4. Отличие 0011 и 0011М
    от Kronshou в разделе БК-0010/0011
    Ответов: 11
    Последнее: 17.01.2010, 22:24
  5. Москва - куплю все связанное с БК-0010/0011
    от kt315b в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 04.10.2008, 05:09

Ваши права

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