- Пара вопросов по эмулятору ув. gid
- [+] Старые сообщения (1053)
-
? maxvel@ - 21.02.2023 12:32
А что случилось с редактором джойстика? пытаюсь его перенастроить под себя, так обязательно пару кнопок не желают работать. да и за чем на серую клавиатуру назначили вывод меню (num7) кому опять лень мышкой до менюшки или иконки дотянуться?
-
? gid - 21.02.2023 13:14
А какие кнопки не работают? Я без фантазии потыкался в цифробуквенные - все переназначаются.
А что за вывод меню? У меня на серую клавиатуру вообще ничего не забиндено, кроме джойстика по умолчанию.
На num7 а точнее на клавишу Home очень любит вешать всякую фигню Скалолаз в своих сборках.
А я именно поэтому не использую ни для чего эту клавишу, потому что вот именно такая фигня с ней происходит.
-
? Shestipalov - 25.02.2023 22:06
Сергей, есть предложение добавить эмуляцию кнопки «Printscreen». Использовалась в разных программах, Snipper, например, Graphix ot RDC. Это которая посылает сигнал прерывания по вектору 100. Схема подключения есть в документации на Snipper. Вот тут скриншот https://pastenow.ru/6d3da0ac150e449351d60b858f08ca6b
-
? gid - 26.02.2023 10:09
Точно по вектору 100 ?
Я когда-то где-то читал, что кто-то предлагал использовать для этого вектор 24, типа он есть, но никем не используется, и просто зря пропадает.
Я подумаю, но что-то пока плохо представляю, как сделать. Зафигачу ещё одну кнопку на тулбаре, назначу ей какую-нибудь горячую клавишу, чтобы, когда на БК нажимаешь какой-нибудь АР2/ВС или АР2/СБР, внезапно ещё делалось ещё и прерывание по вектору 100, ибо свободных горячих клавиш уже и не осталось. А если горячих клавиш не делать, обязательно найдётся человек, которому эта кнопка нужна в полноэкранном режиме.
¤
Результат должен что делать? Сохранять копию экрана в файл на дискету или распечатывать его на принтере?
В чём смысл? Принтер не эмулируется, а файл - не так уж и нужен, потому что уже есть кнопка "Сделать скриншот экрана", без всякой эмуляции векторов, причём тип скриншота тоже регулируется - или нативный, с разрешениями БК как есть, или пропорциональный, как видно на экране.
Т.е. мы уже может получить скриншот экрана без всяких новых кнопок.
-
? Shestipalov@ - 26.02.2023 12:09
>Точно по вектору 100 ?
.
Точно. Эта кнопка вызывает прерывание по вектору 100.
.
>Результат должен что делать? Сохранять копию экрана в файл на дискету или распечатывать его на принтере?
.
Нет, ничего такого. Результатом нажатия на кнопку должно быть просто прерывание по вектору 100 (название «PrintScreen» не совсем корректное, но так уж повелось :-) ). А что должно происходить дальше — зависит от загруженного в данный момент обработчика прерывания. Snipper, например, позволяет текст на экране записать в ТЕКСТОВЫЙ файл, т.е., он сканирует изображение и распознаёт символы. Graphix2 делает графическую копию экрана. Можно сделать любой другой свой обработчик, например, догрузку к Paradise, которая будет передавать управление в отладчик при нажатии кнопки. Или, например, сохранение состояния игры (ну или содержимого памяти) для 10-х игр. Ну или что ещё фантазия подскажет :-)
.
>Т.е. мы уже может получить скриншот экрана без всяких новых кнопок.
.
Так речь идёт не просто о возможности получить скриншот, а об эмуляции доработки реального БК0010-01/0011(М), которая делали на реальных БК. Это такая же доработка, как Covox, AY, кнопка Reset, например. Поэтому было бы невредно иметь и её эмуляцию, раз уж она была в реальности.
-
? Maxvel@ - 26.02.2023 18:04
>>А что за вывод меню? У меня на серую клавиатуру вообще ничего не забиндено<<
при отжатом нунлок нажимаем NUM7(HOME).
-
? gid - 27.02.2023 08:21
>>? Maxvel@ - 26.02.2023 18:04
[при отжатом нунлок нажимаем NUM7(HOME).]
И ничего не происходит. Повторю, что в моих сборках, с моего сайта, ничего на серую клавиатуру не назначено.
А если пользовались сборкой Скалоаза, то его настройки могли в реестре остаться. МФС кеширует в реестре все менюшки, тулбары, конфигурацию докинга, горячие клавиши и т.п.
Чтобы вернуть всё как было нужно кликнуть правой кнопкой мыши в любом месте на тулбарах или свободной области, в контекстом меню выбрать "Настройка...", перейти во вкладку "Клавиатура", выбрать категорию "Все команды", нажать кнопку "Сбросить все".
Ну и там в остальных вкладках можно вернуть к изначальному виду и всё остальное.
-
? Maxvel@ - 27.02.2023 21:47
Попробую Спасибо.
-
? Maxvel@ - 27.02.2023 21:47
Попробую Спасибо.
-
? Дмитрий - 01.03.2023 23:38
gid, вопрос по Турбо8. Как в нем реализовано вычисление выражений с меткой или метками (типа MOV #LABEL+12,R1), которые пока еще не определены? У себя сделал запись таких выражений в таблицу для повторной обработки после прохода по всему тексту. Плюс такие выражения могут быть и в подключаемых файлах - их тоже надо обрабатывать, а в случае ошибки правильно выдать в каком файле, в какой строке и позиции ошибка, если она возникнет. Так-то все работает, но что-то мне не совсем нравится способ - хочу переделать.
-
? gid - 02.03.2023 09:43
Тут в двух словах не ответить, будет многабуков, и не сильно понятно, наверное.
Для простоты будем говорить про старую версию Турбо8, где арифметическое выражение - это просто сумма слагаемых, куда располагать результат этой суммы - становится известно при компиляции, и этот адрес сохраняется в таблице ссылок на метки.
При первом проходе компилятора делаются следующие действия:
1. В таблицу определений собираются все определения меток (из поля меток), с их значениями.
2. Строится код из опкодов и аргументов команд, которые явно определены, то, что нельзя пока вычислить - заменяется нулями, или теми значениями, которые можно вычислить - сумма всех числовых слагаемых выражения.
3. В таблицу ссылок на метки собираются все метки из вот таких арифметических выражений. и ещё задаются атрибуты: "знак минус" - значит надо значение метки не прибавлять, а вычитать, "деление пополам" - фича именно турбо8 и "смещение" - означает, что результат - не абсолютное значение, а смещение до значения.
¤
Тут надо отметить, что есть два режима компиляции: сразу с компоновкой, и компиляция в объектный файл.
Во втором случае, никакие метки компоновать нельзя, т.к. объектный файл может быть потом слинкован с другим объектным файлом по произвольному адресу и нужно делать коррекцию всех меток и ссылок.
А в первом случае - в первом же проходе, если если ссылка на определённую метку, то её значение можно сразу же прибавить к результату арифметического выражения.
¤
Затем, когда все определения меток будут собраны и весь код построен, если мы не компилируем в объектный файл, делается финальный проход по таблице ссылок на метки, и всё что там останется - это ссылки на неопределённые метки.
¤
Как я понял, с объектными файлами заморачиваюсь только я, все остальные делают тупо include.
¤
В новой версии Турбо8 работа с арифметическими выражениями принципиально иная. Там возможны полноценные арифметические выражения со скобками и приоритетами операций, в выражениях возможны ещё не определённые метки и всё это возможно в присваиваниях типа
VAL=<END-BEGIN>/2 и значения меток при этом могут быть ещё не определены, значение VAL может использоваться в других арифм. выражениях. И всё это последовательно вычисляется в процессе определения меток.
¤
У меня сделан пока простейший менеджер ошибок, который был в оригинальном Турбо8, т.е. у меня не показывается, в какой строке текста появилась неопределённая метка, у меня показывается адрес из таблицы ссылок, и выяснять где это, надо по листингу.
А при линковке объектников - вообще никак не узнать. Так что мне ещё предстоит переписывать менеджер ошибок по нормальному.
-
? Дмитрий - 02.03.2023 20:10
Я про то, как сохраняется такое выражение. Как вырезанное в отдельную строку или запоминается ссылка на его первый символ в исходнике? Я сделал сохранение вырезанного выражения в отдельную таблицу доп. прохода, но при инклюдах приходится сохранять еще имя файла и позицию для вывода возможной ошибки, что громоздко. А могут быть и вложенные инклюды. Ведь адрес метки в выражении на момент разбора нам неизвестен и метка помещается в таблицу меток как неопределенная. А в дополнительном проходе по такой таблице все метки нам должны быть известны и встреча неопределенной метки вызовет ошибку, которую и надо сообщить пользователю. Вот думаю либо переделать на ссылки, чтоб не плодить тонну строк, либо также вырезать выражение, но не могу придумать как с минимальными накладными расходами сохранить все (имя файла, позиция в тексте, позиция ошибки, номер строки и указатель на ошибочный идентификатор выражения) для вывода возможных ошибок.
-
? Дмитрий - 02.03.2023 20:19
Да и еще в догонку про команды FPU. Если в командах MULF/DIVF/ADDF/SUBF и других в качестве источника будет указано непосредственное значение: MULF #X,AC0, то как себя будет вести проц? Исключение по неправильной команде или все же выполнит? Я что-то не нашел в описаниях команд такого случая.
-
? gid - 02.03.2023 21:33
Я не сохраняю выражение в текстовом виде. Я его парсю, преобразую в обратную польскую нотацию, из неё создаю цепочку сущностей, где каждая сущность - либо арифметическая операция, либо числовая константа, либо ссылка на метку, либо ссылка на текущий PC (аргумент "точка"). И уже в таблицу ссылок помещаю всю эту цепочку. И потом вычисляю эту цепочку, если она вычисляется.
В общем случае, теперь у меня абсолютно всё - это арифметические выражения, даже единичная числовая константа - это тривиальное арифметическое выражение, которое вычисляется немедленно.
Я очень долго морочился, чтобы сделать возможность генерировать объектные файлы, которые можно линковать как угодно. Чтобы была полная перемещаемость.
Я же говорю, у меня нигде не сохраняется информация о месте, где возникает ошибка. Для этого мне придётся делать специальный файл типа микрософтовского .pdb, где будут храниться строки текста, номера строк и адреса бинарника, к которым эти строки относятся. Концепция ещё на стадии обдумывания и сделана будет не скоро.
В общем скачайте исходники BKTurbo8, там есть текстовые файлы с набросками концепций и структур данных, как я всё делал.
¤
[Если в командах MULF/DIVF/ADDF/SUBF и других в качестве источника будет указано непосредственное значение: MULF #X,AC0, то как себя будет вести проц?]
Как обычно, будет прочитано 16 разрядное плавающее число и преобразовано в 32 или 64-х разрядное путём добивания нулями хвоста мантиссы.
Скачайте исходники бета версии эмулятора v4.х и посмотрите реализацию FPU. Она проходит тесты DEC xxdp: dffpa, dffpb, cffpc
Вот только сами тесты не очень всеохватывающие, они просто проверяют насколько правильно вычисляются вычисления.
-
? Дмитрий - 03.03.2023 00:00
>> у меня абсолютно всё - это арифметические выражения, даже единичная числовая константа - это тривиальное арифметическое выражение, которое вычисляется немедленно.
Я аналогично сделал. Но я не стал делать в виде бинарника. Потому как константа "1" - это байт, а 000001 в двоичном занимает в 2 раза больше. А после "100" уже выгоднее бинарником. Спасибо. Обдумаю на досуге этот вариант.
¤
>> будет прочитано 16 разрядное плавающее число и преобразовано в 32 или 64-х разрядное путём добивания нулями хвоста мантиссы.
т.е.
SETD
MULF (PC)+,AC0
.FLT4 2.0
¤
черта с два выполнится? но 16-разрядное - это же половина float, при добивании нулями потеряется точность. про double вообще молчу. Хотя этот вариант вряд ли будет кто-то использовать. Проще
¤
SETD
MULF D2,AC0
...
D2: .FLT4 2.0
¤
>> Она проходит тесты DEC xxdp: dffpa, dffpb, cffpc
Тесты нашел, но в PDF. А исходников их нет?
-
? gid - 03.03.2023 09:09
Неправильно.
.FLT2 nnn делает 32хразрядное плавающее число, а .FLT4 nnn - 64х разрядное.
Так работать не будет.
SETD
MULF (PC)+,AC0 ; эта команда примет только первое слово аргумента и
.FLT4 2.0 ; затем проц попробует выполнить второе слово аргумента как команду и будет неопределённое поведение
¤
Надо писать так:
SETD
MULD #^F3.1415, AC0
Непосредственный аргумент - только 16 разрядное плавающее число.
Если хочешь точности, не нужно использовать непосредственные аргументы.
¤
SETD
MULD PI,AC0
...
PI: .FLT4 3.1415
¤
а если сделать так:
SETF
MULF PI, AC0
то эта команда просто прочтёт половину числа.
¤
Есть исходники. Я пару месяцев мучился распознавал эти пдфки:
https://disk.yandex.ru/d/yiqZwoLJobiIfw
¤
Там они немного поправлены, чтобы компилировались в обычном macro-11 и чтобы на БК работали. Требуются регистры терминала.
-
? Дмитрий - 07.03.2023 00:11
>> Есть исходники. Я пару месяцев мучился распознавал эти пдфки
Благодарю. Мельком пока глянул. Погляжу на досуге по-подробнее.
¤
Судя по тому как записаны тестовые константы для проверки, запись double осуществляется big endian. Хотя в вики сказано, что у PDP был свой т.н. "PDP-endian". Я почему-то думал, что у PDP тоже little endian, потому как 16-битное слово пишется как раз LE.
-
? BD@ - 10.03.2023 19:55
Глубоко многоуважаемый GID!
Возможно ли в HDD Image Manager добавить конвертер .hdi в "самарский" формат?
-
? gid - 11.03.2023 10:55
Зачем? HDD Image Manager работает только с образами, он вообще не знает ни про какие форматы.
Для работы с логическими структурами в образах есть утилита BKHDDTool, одой из её функций как раз является конвертация между альтпро и самарским форматами
-
? Дмитрий - 15.03.2023 20:14
Вопрос по STST. Как я понял из описания и сырцов эмулятора, если метод адресации > 0, то получается адрес и последовательно пишется FEC и FEA. Причем независимо от метода, т.е. STST @(R0)+ получает адрес из R0, потом из этого адреса слово и по полученному пишется два слова. Точно также и STST @#1000 - FEC будет записан в @#1000, а FEA - в @#1002. Еще нашел в описании, что STST SP и STST PC вызывают illegal opcode. И непонятно, что выдаст команда, если не было ошибок - оба слова равны 0 или их значение неопределено после старта машины?
-
? gid - 15.03.2023 21:05
Я настолько не углублялся. Я вообще писал код, ориентируясь на драйвер эмулятора FPU-инструкций под RT-11. И только когда встречал там ошибки, смотрел описания по нужным командам в документации.
Точно не знаю, но полагаю, что после старта машины FPU будет проинициализировано и FEC и FEA будут иметь свои начальные значения.
FEC = 0, потому что ещё никаких ошибок не произошло, а FEA - без понятия, может 0, а может ещё что-то начальное, что может прийти в голову DECовцам.
- << Форум