User Tag List

Страница 24 из 26 ПерваяПервая ... 20212223242526 ПоследняяПоследняя
Показано с 231 по 240 из 256

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

  1. #231

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

    По умолчанию

    Про предвыборку я что-то припоминаю, вроде бы обсуждались какие-то её косяки в 1801ВМ2, а про 1801ВМ1 не помню.
    Цитата Сообщение от Alex_K Посмотреть сообщение
    Регистровые команды всегда запускают предвыборку следующей команды.
    Что-то алгоритм прям сильно отличается от того, что Vslav в документации описал.
    Затронута только movb или ещё cmpb, bisb, bicb, bitb?
    А mfps pc? А однооперандные регистровые тоже запускают предвыборку?

  2. #232

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

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Про предвыборку я что-то припоминаю, вроде бы обсуждались какие-то её косяки в 1801ВМ2, а про 1801ВМ1 не помню.
    Да, она есть в 1801ВМ1. Но принцип её отличается от ВМ2. В ВМ2 она принудительная, делается всегда, независимо от того, будет использована или нет.
    В ВМ1 она выборочная. Запускают её те команды, которые не будут использовать шину МПИ. Их четыре группы:
    1. Команды снятия-установки признаков. Это коды с 0240 по 0277.
    2. Однооперандные команды работы с регистром. Предвыборка запускается всегда, но игнорируется, если используется регистр PC. Также предвыборка игнорируется в команде MTPS, независимо от регистра.
    3. Двухоперандные типа регистр-регистр. Так же запускается всегда, но игнорируется, если один из регистров PC. Ну за исключением регистра источника в команде MOVB.
    4. Двухоперандные типа память-регистр. Предвыборка запускается после обработки источника. Так же, если приёмник равен PC, то её результаты не используются.
    В ВМ1 есть два регистра инструкций - IR и IRA. IR выходит прям на главную ПЛМ и в него прямо читается при чтении некэшированной инструкции. При запуске чтения предвыборки чтение идёт в регистр IRA. А потом когда микрокоманда делает ожидание чтения предвыборки, то завершается ожидание чтения в IRA, а потом копируется из IRA в IR.
    Цитата Сообщение от gid Посмотреть сообщение
    Что-то алгоритм прям сильно отличается от того, что Vslav в документации описал.
    К сожалению у Vslav в документации не всё описано по строению микрокоманды, а в описании алгоритмов исполнения команд есть ошибки. По всей видимости он алгоритмы некоторых команд прямо копировал в другие команды.
    Цитата Сообщение от gid Посмотреть сообщение
    Затронута только movb или ещё cmpb, bisb, bicb, bitb?
    Только MOVB, т.к. у неё есть дополнительная микроинструкция для расширения знака. Эта микроинструкция используется и в MFPS, но там нету источника, только приёмник, потому этот глюк там не проявляется.
    Цитата Сообщение от gid Посмотреть сообщение
    А mfps pc? А однооперандные регистровые тоже запускают предвыборку?
    Да, уже описал выше.

    У MFPS есть глюк с флагом C, так же как и в MOVB. Но об этом вроде известно.

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

    Цитата Сообщение от gid Посмотреть сообщение
    Что-то алгоритм прям сильно отличается от того, что Vslav в документации описал.
    Добавлю, что алгоритм команды MOV не отличается от описания Vslav, просто он у меня немного по другому описан и акцентировано по продвижению флагов в разных регистрах. В алгоритме MOVB видно, что после микрокоманды копирования младшего байта источника в младший байт приёмника, для того чтобы следующей микрокоманде было доступно содержание флагов из АЛУ, производится копирование всех флагов в регистр MJ, а с него в регистр MA, который выходит на ПЛМ. В этом и ошибка, т.к. из АЛУ копируется уже нулевой бит C. Но в 1801ВМ1 нету в поле PLOP микрокоманды такого условия, чтобы скопировать только три бита в MJ и сразу же передать в MA. Копирование трёх битов в MJ есть, но без передачи в MA.

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

    BlaireCas(05.10.2025), CodeMaster(05.10.2025)

  3. #233

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

    По умолчанию

    Пробовал писать определятор типа процессора и видео, ВМ1 определяет по внутренним регистрам:

    cpuid.mac.txt

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

    Alex_K(05.10.2025)

  4. #234

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Про предвыборку я что-то припоминаю

    недавно делал тесты хитрозадых команд, где регистр PC "шагает назад" по коду. результаты эмулятора и реала ниже (закину архивом). совпало только для BR .-2 и MOV -(PC),-(PC). самый жесткий разбег на команде SUB Rx,PC. бинарник прилагается. уточнение по работе теста: генерируется длинный массив одинаковых команд, по кадровому прерыванию делается переход на конец массива, код начинает "бежать назад". следующее прерывание останавливает код, цифры показывают кол-во команд, выполненных между кадровыми прерываниями (запускать в режиме 11М) back_PC.zip
    Последний раз редактировалось reddie; 26.10.2025 в 22:00.

  5. #235

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    совпало только для
    Ну почему же, для CMP тоже вполне совпало. Для BIS тоже расхождение не сильно большое. Вы все всё время забываете, что БК - это не спектрум и не ДВК/УКНЦ/и т.п. На этой дурацкой БК невозможно определить точные тайминги команд. Они примерные, и если очень близко к реальности, то это очено хорошо.
    А вот про SUB R2,PC мне нечего сказать, я не знаю, почему она на реальной машине выполняется так медленно, наверное опять какие-то тайны микрокода, которые никто не обнародовал.

  6. #236

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

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    А вот про SUB R2,PC мне нечего сказать, я не знаю, почему она на реальной машине выполняется так медленно, наверное опять какие-то тайны микрокода, которые никто не обнародовал.
    Просто в этом случае считывается предвыборка, но она не используется. В качестве примера: команда SUB R2,PC находится по адресу 02000. Так как команда регистровая, то сразу же начинает читаться следующая команда в регистр предвыборки по адресу 2002. После исполнения операции микрокод видит, что в качестве DST использовался счётчик команд и переходит на чтение некэшированной инструкции. Такая ситуация со всеми двухоперандными регистровыми командами, если счётчик команд используется в качестве SRC или DST. Ну за исключением команды MOVB PC,Rd, где есть ошибка в микрокоде.

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

    CodeMaster(27.10.2025)

  7. #237

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    просто для удобства и быстроты: ткнуть мышкой/подвинуть стрелками подсветку адреса и следом нажать Crtl+Enter (ну или другой вариант) всяко быстрее, чем вписывать адрес в регистр вручную.
    Я вчера значит не понял, т.е. задача ставится наоборот, мы задаём новый адрес PC по текущей строке в окне дизассемблера.
    Я об таком даже не задумывался, никогда такого не было надо, но сделать можно.
    Цитата Сообщение от reddie Посмотреть сообщение
    И еще рискну предложить опцию "пропуск текущей команды"
    А вот это полезная штука, это надо будет реализовать.
    Цитата Сообщение от reddie Посмотреть сообщение
    по компилеру, bkturbo8: как оказалось, ему безразличен регистр команд/ключей CO и CL, а вот ключи типа -r воспринимаются только в нижнем регистре. в верхнем выдает ошибку. привести бы к общему знаменателю
    Я вначале подумал, а почему бы и не сделать регистронезависимые ключи, а потом посмотрел, как там. Я для парсинга командной строки использую линуксовый компонент getopt, а в линуксе традиционно все ключи регистрозависимые, поэтому решил оставить всё как есть. Для всех моих утилит командной строки все ключи будут регистрозависимы. Команды, в принципе, тоже должны были быть регистрозависимыми, но я решил, что это не принципиально.

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

    reddie(03.11.2025)

  8. #238

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,051
    Спасибо Благодарностей отдано 
    1,142
    Спасибо Благодарностей получено 
    1,473
    Поблагодарили
    525 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Уважаемый @gid,
    Начал пробовать использовать компилятор BKTurbo8 -- спасибо за него кстати, да и вообще спасибо за упорный труд по поддержке эмулятора и инструментов к нему.
    Собственно, к BKTurbo8 замечания (мой опыт крутится в основном вокруг использования MACRO/LINK под RT-11):

    1. Мне лично очень нехватает условной компиляции, в виде примерно таком:
    .IF <выражение>
    <произвольный блок кода>
    .ELSE
    <произвольный блок кода>
    .ENDIF
    Ну и понятно что .ELSE со вторым блоком кода можно не использовать.
    При компиляции, первый блок кода вставляется, если выражение не равно 0, иначе вставляется второй блок кода.
    Как я это использую? например, я в начале игры вставляю определения чит-кодов, если код не 0 то вставляется блок кода. В релизе игры все читы 0, лишний код не добавляется.

    2. Очень бы хотелось блок повторения кода, вида:
    .REPT <положительное число>
    <произвольный блок кода>
    .ENDR
    Здесь блок кода повторяется столько раз сколько указано в числе после .REPT.
    Применение: например, я разворачиваю цикл, нужно 20 раз выписать один и тот же блок. С псевдо-оператором повторения код будет гораздо более компактным.

    3. Вызываю BKTurbo8_x64.exe из .bat-файла. Как мне понять что была ошибка и собирать программу дальше бессмысленно?
    Если в коде есть неопределённая метка, то выдаётся сообщение на экран, но errorlevel остаётся 0.

    4. Ещё одно важное применение .IF -- это проверить, что мы не вышли за какую-то границу.
    Допустим, я размещаю код в блоке 000000-040000 и мне важно чтобы он не вышел за границу в 040000 -- пишу после кода что-то вроде
    .IF . - 040000 > 0
    .ERROR "Вышли за границу в 040000"
    .ENDIF
    -- и вот для этого нужен ещё псевдооператор .ERROR, который покажет строку с ошибкой и сделает компиляцию неудачной.
    Последний раз редактировалось nzeemin; 29.11.2025 в 13:30.

  9. #239

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

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Мне лично очень нехватает условной компиляции
    Мне тоже иногда не хватает. Я даже хочу реализовать макрокоманды, но не знаю как. Я смотрел исходники MACRO-11, как он работает, но у меня совсем другой принцип, прямиком с БКшки. Из-за того и про errorlevel вообще в мыслях не было. Не знаю как сделать макрокоманды, то ли делать претрансляцию с генерацией промежуточного файла, но тогда не будет работать .IF . - 040000 > 0, то ли как-то непонятно как, иногда мысль где-то рядом крутится, но идею никак ухватить не могу.
    О том, что произошла ошибка, я узнаю по появлению файла _errors.txt в директории рядом с исполняемым файлом, там просто перечислены все появившиеся ошибки, чтобы не искать их по листингу.
    А когда мне прям никак без макрокоманд, я использую вот этот https://gitlab.com/Rhialto/macro11.git кросс MACRO-11 в связке с вашим PCLinkом

  10. #240

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,051
    Спасибо Благодарностей отдано 
    1,142
    Спасибо Благодарностей получено 
    1,473
    Поблагодарили
    525 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Мне тоже иногда не хватает. Я даже хочу реализовать макрокоманды, но не знаю как. Я смотрел исходники MACRO-11, как он работает, но у меня совсем другой принцип, прямиком с БКшки. Из-за того и про errorlevel вообще в мыслях не было. Не знаю как сделать макрокоманды, то ли делать претрансляцию с генерацией промежуточного файла, но тогда не будет работать .IF . - 040000 > 0, то ли как-то непонятно как, иногда мысль где-то рядом крутится, но идею никак ухватить не могу.
    О том, что произошла ошибка, я узнаю по появлению файла _errors.txt в директории рядом с исполняемым файлом, там просто перечислены все появившиеся ошибки, чтобы не искать их по листингу.
    Ну хорошо, допустим полноценный препроцессор сложно.
    Но IF-ERROR же можно сделать, это проще? я хотя бы смогу защищаться от наползания кода на экран, сейчас руками проверяю что не есть хорошо.

    По поводу появления файла _errors.txt -- да, это я заметил и использую. Но, именно при ошибке о неопределённых метках, при отсутствии других ошибок, мы видим сообщение об ошибке только на экране, файл _errors.txt в этом случае тоже не создаётся. Мне пришлось сливать вывод программы в файл, и искать эту ошибку уже там.

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

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

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

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

Похожие темы

  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

Ваши права

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