Всему свое время![]()
Всему свое время![]()
Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Доброго времени суток, орионщики и им сочувствующие
Давно не писал, но это не значит, что забросил. Работа по развитию ОС идёт, к НГ постараюсь выложить сборку со всеми последними новинками. А пока хочу рассказать о том, что сделано.
С момента последней публикации версии 3.83, была "переходная" версия 3.84, в которой принципиально изменился механизм запуска оболочки ОС и некоторый функционал самой оболочки, удалось обойти существующее ранее ограничение размера копируемого оболочкой файла. Исполняемый файл оболочки изменился: DC$ -> SHELL, о ней напишу отдельный пост, т.к. там "много букв" (и картинок).
ОС "научилась" работать с т.н. "оверлейными" (или "системными") программами, работающими в специальной области второй страницы ОЗУ, работают эти программы "параллельно" основным, находящимся в нулевой странице ОЗУ пользователя, т.о. в ОС появился функционал псевдо многозадачности, о чём позже распишу подробнее.
На данный момент проходит тестирование версия 3.85, в которой реализован комплекс мер по ускорению работы с дисками, в частности - с виртуальным ( G: ). Для этого введён новый протокол (v3) работы с ORI-сервером (версия приложения 3.06 и выше), поддерживающий двойное кэширование операций чтения/записи каталога. На уровне ОС также организовано кэширование (отключаемое) каталогов всех дисков. При групповых операциях с несколькими файлами кэширование позволяет значительно ускорить работу за счёт минимизации лишних операций чтения/записи каталога.
Также серьёзным новшеством стала поддержка работы с директориями (подкаталогами) виртуального диска, на этом останавлюсь подробнее. Имеются в виду переходы в подкаталоги и обратно прямо с Клиента, т.е. с Ориона-128/ПРО. Теперь фактически приложение сервера на IBM-PC можно свернуть в трей и работать с виртуальным диском полностью на Орионе
Работа с директориями (подкаталогами) на виртуальном диске.
В версии 3.85 ОС DSDOS (ORI-сервер версии 3.06 и выше) появилась возможность удалённой работы с директориями с помощью выполнения запросов с ПРК "Орион".
Директория - это надстройка над файловым протоколом ОС DSDOS, она представляет собой специальный метафайл, ассоциированный с соответствующей директорией на сервере. Метафайлы сервер генерирует автоматически при чтении текущего каталога, на основании имеющихся там директорий, физически этих файлов на сервере нету.
Сама ОС DSDOS ничего не "знает" про директории, она работает только с файлами. Орион "видит" метафайлы в виде обычных файлов, которые присутствуют в каталоге диска "G:".
При поступлении запроса на загрузку такого метафайла, сервер отправляет Ориону файл, содержимое которого представляет собой текстовую строку полного пути к директории на сервере (для информации), после чего выполняет переход в эту директорию, обновление списка файлов нового каталога и установку признака обновления каталога (используется системой кэширования в ОС DSDOS v3.85). Т.о. последующие файловые операции на Орионе принудительно прочитают новый каталог и уже будет работа с содержимым новой директории.
Имя метафайла директории всегда начинается с символа "." (точка), далее следует от одного до семи произвольных символов, допустимых в именах файлов ОС DSDOS. Если имя директории на сервере длиннее семи символов, то лишние обрезаются. Также производится преобразование букв к верхнему регистру, а русских букв к латинским, т.к. в ОС русские буквы в именах файлов недопустимы.
Метафайл с именем ".." ассоциирован с переходом на уровень вверх (по направлению к корневому каталогу на сервере).
Также есть обратная возможность: создавать новые директории в текущем каталоге виртуального диска. Для этого Орион должен отправить серверу команду записи файла, имя которого начинается с точки, поле которой следует от одного до семи символов, допустимых в именах файлов ОС DSDOS. Содержимое файла не имеет значения и игнорируеся сервером (в будущем возможно будет использоваться для создания на сервере директорий с длинными именами), в связи с этим для ускорения процесса, достаточно передать в теле файла один байт (минимальный размер файла в ОС DSDOS). Попытка записать на виртуальный диск файл, имя которого начинается с двух точек приведёт к ошибке, т.к. имя ".." зарезервировано под метафайл перехода на директорию выше! Также запрещено записывать на виртуальный диск файл, имя которого состоит из одной точки.
Копирование, переименование, изменение атрибутов и удаление метафайлов в текущей версии не поддерживаются!
Примеры работы с директориями виртуального диска с помощью команд ОС DSDOS:
G: - выбираем текущим виртуальный диск;
L .MYDIR - переход к директории "MYDIR" на сервере;
L G:.MYDIR - вариация предыдущей команды с явным указанием диска (для случая, когда текущий диск - другой);
L .. - переход к директории уровнем выше;
I .MYDIR B000 - вариация команды перехода к директории "MYDIR", начальная область ОЗУ пользователя не затирается информацией о полном пути к директории на сервере;
T .MYDIR - переход к директории "MYDIR" с выводом на экран полного пути на сервере;
S .NEWDIR 0,1 - создание новой директории "NEWDIR" на сервере в текущем каталоге.
Соответственно, в пакетных файлах также возможна работа с директориями.
В оболочке ОС DSDOS (SHELL v4.1 и выше) работа с директориями упрощена и происходит прозрачно для пользователя. Оболочка умеет распознавать метафайлы директорий и обрабатывает их соответствующим образом. Для смены директории достаточно выбрать её имя и нажать "ВК" (Enter), в результате чего оболочка отправит серверу команду загрузки соответствующего метафайла, после чего выполнит обновление содержимого каталога текущей панели, т.о. мы фактически перейдём в выбранную директорию. Выбор директории с именем ".." выполнит переход на уровень вверх.
Сортировка каталога на сервере производится таким образом, что в начале списка всегда идут метафайлы директорий, а затем следуют ORI-файлы. Метафайл перехода на уровень вверх всегда самый первый в списке.
При переходе в директорию, каталог всегда выводится с начала (вверху самый первый файл в списке, т.е. в большинстве случаев это метафайл ".."), указатель устанавливается на него.
Также есть возможность создать новую директорию в текущем каталоге, для этого нужно нажать клавишу "7", далее откроется окно диалога для ввода семи символов имени директории. Лидирующая точка уже присутствует, её вводить не нужно! Завершается ввод нажатием "ВК" (Enter). В случае успеха, новая директория появится в списке файлов текущей панели. В случае ошибки откроется окно с соответствующим сообщением ОС DSDOS, далее можно будет повторить ввод имени новой директории ("ВК" или Enter) или отменить создание директории (ESC или F4). Как и в других диалогах ввода строк, оболочка запоминает вводимое ранее имя директории, его можно вставить, нажав стрелку "вверх" или дописать к введённому - стрелка "вниз".
Метафайлы нельзя выделять и производить над ними операции копирования, перемещения, удаления, изменения атрибута защиты, т.к. в текущей версии ОС DSDOS нет поддержки соответствующих операций на уровне протокола с сервером.
Также с метафайлами не работают команды "F3", "F4" и пр. аналогичные макросы в оболочке.
Узнать полный путь к выбранной директории на сервере можно нажав "T"+"ВК"(Enter), это выполнит распечатку содержимого метафайла соответствующей командой ОС DSDOS. При этом, согласно вышеописанному механизму, автоматически произойдёт переход в эту директорию на сервере (сервер получит команду чтения содержимого метафайла и выполнит переход в ассоциированный каталог), т.о. после возврата в оболочку на текущей панели будет содержимое этой директории.
Последний раз редактировалось Denn; 07.12.2016 в 13:52. Причина: дополнение, форматирование текста
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
Выкладываю предновогодний релиз ОС DSDOS для обеих платформ в виде образов ROM-дисков под разные варианты м/сх ПЗУ.
Сборки ОС DSDOS v3.85 для ПРК ОРИОН-128/512:
ПЗУ ROM-диска объёмом 64 Кб
ПЗУ ROM-диска объёмом 128 Кб
ПЗУ ROM-диска объёмом 256 Кб
ПЗУ ROM-диска объёмом 512 Кб
Внутри каждого архива три варианта:
- без RAM-диска (не путать с квазидиском!);
- RAM5 (RAM-диск 1024 Кб в составе ЭД™ 1x1, порт #F50xh);
- RAM7 (быстрый RAM-диск 1024 Кб в виде платы расширения, порт #F7Fxh);
Поддерживаются оба варианта реализации порта виртуального диска: COM1 (ВВ51/MSM82C51A-2, 38400/115200 Бод) и COM2 (16C550, 115200 Бод). Определяются загрузчиком ОС (автодетект), текущим выбирается наиболее быстрый (приоритет у COM2).
альт.ссылка на изображение
Сборки ОС DSDOS v3.85 для ПК ОРИОН-ПРО:
"Стандартная", ПЗУ ROM-диска объёмом 64 Кб
"Стандартная", ПЗУ ROM-диска объёмом 128 Кб
"Стандартная", ПЗУ ROM-диска объёмом 256 Кб
"Игровая", ПЗУ ROM-диска объёмом 64 Кб
"Игровая", ПЗУ ROM-диска объёмом 128 Кб
"Игровая", ПЗУ ROM-диска объёмом 256 Кб
"Программист", ПЗУ ROM-диска объёмом 64 Кб
"Программист", ПЗУ ROM-диска объёмом 128 Кб
"Программист", ПЗУ ROM-диска объёмом 256 Кб
Внутри архивов под объёмы 128 Кб и более находится два варианта: одним полным образом (файл romdisk.bin) для новой версии ROM-диска, и соотв. кол-вом файлов по 64 Кб (файлы romdiskN.bin) для старого варианта (в составе Multi-Card).
Поддерживаются оба варианта реализации порта виртуального диска: COM1 (ВВ51/MSM82C51A-2, 38400/115200 Бод) и COM3 (16C550, 115200 Бод).
альт.ссылка на изображение
Список изменений относительно предыдущей версии (3.84) из файла DISKINFO:
альт.ссылка на изображение
Конфигуратор ОС DSDOS
Вместо старой утилиты SYSVAR$ появилась новая - SYSTEM$, она позволяет более наглядно настраивать параметры ОС, плюс отображает информацию об аппаратной части (АЧ) ПРК. Для ОРИОН-128/512 экран утилиты выглядит следующим образом:
альт.ссылка на изображение
В виду аппаратных различий, на ОРИОН-ПРО информация АЧ несколько отличается:
альт.ссылка на изображение
Интерфейс сделан максимально интуитивно понятным. По АЧ, справа от сокращённого названия порта в квадратных скобках:
"■" - устройство обнаружено, "х" - не обнаружено.
Выделенная инверсией буква в соответствующем пункте является горячей клавишей для редактирования данного параметра. Буквы - русские, в соответствии с раскладкой подключенной клавиатуры (РК86 или IBM-PC). При изменении цвета символов/фона можно добавлять [Shift] - это меняет параметр в обратную сторону.
Доступ дисков меняется через [Ctrl]+<буква диска>.
Вид курсора меняется стрелками вверх/вниз.
[F2] - восстанавливает изменения текущей сессии, [F1] - значения по-умолчанию. Для сохранения изменений - [ВК] (Enter).
Вызвать утилиту SYSTEM$ можно также через сервисное меню ОС: [Shift]+[F1] -> [Y]. Выход из утилиты производится принудительно в ОС (jmp 0F360h), т.к. изменение некоторых параметров требует перезапуск CCP.
Аналогично добавлен быстрый вызов калькулятора: [Shift]+[F1] -> [C]. Выход (ret) из калькулятора происходит в программу, откуда был сделан его вызов, при этом содержимое экрана под ним восстанавливается. Для удобства вызов калькулятора сделан в оболочке по клавише [C]:
альт.ссылка на изображение
Обе утилиты являются системными, т.е. работают во второй странице ОЗУ, в области памяти 8000...AFFFh, т.о. их запуск не изменяет содержимое ОЗУ основной страницы.
Про данный механизм упоминал ранее, он позволяет делать системные программы, работающие "поверх" основных, а также позволяет динамически подгружать исполняемые модули (оверлеи) программ, т.о. экономится ОЗУ основной страницы.
Буфер обмена
В версии 3.85 изменилась локализация буфера обмена: раньше содержимое хранилось в ОЗУ второй страницы в области B000..BFFFh и буфер позволял сохранять максимум 4 Кб данных, теперь данные хранятся в виде файла ~CBDATA в квазидиске и буфер позволяет сохранять до 64 Кб (теоретически, практически - до 48 Кб, максимально до 60 Кб) данных:
альт.ссылка на изображение
Соответственно увеличилась скорость обмена с буфером, т.к. фактически выполняются файловые операции с квазидиском по ускоренным алгоритмам (push/pop инструкции), а 4 Кб ОЗУ второй страницы освободилось для драйверов расширения ОС.
Кэширование
В новой версии ОС появилось кэширование каталогов (отключаемое). Ранее этой функции не было, и каталог читался при каждой файловой операции с диском, т.к. предполагалось, что между файловыми операциями на диске могли произойти изменения (например, сменили дискету в дисководе или удалили файл на вирт. диске) и ОС нужна актуальная информация. Каталог в общем случае представляет собой список заголовков всех файлов на диске (16 байт*кол-во файлов) + FAT (для дисков с кластерной организацией). В итоге, возникали ситуации, когда фактический размер файла например 1 байт, а каталог+FAT например 8 Кб! Т.е. для сохранения 1 байта информации, нужно было "прокачать" ещё дополнительные 16 Кб: считать каталог (8 Кб) + записать изменённый каталог (8 Кб). В случае относительно медленных носителей это ощутимо снижало скорость файловых операций, особенно заметно при групповом копировании файлов. Кэширование каталога (двойное: на чтение и на запись) позволяет исключить холостые загрузки/выгрузки каталога (+FAT), если на диске с момента последнего обращения не было изменений, и в ОЗУ ПРК находится его актуальная копия; в случае записи каталога теперь записываются только изменения. Для виртуального диска, введён механизм обратной связи, т.о. ПРК сначала "пингует" сервер на предмет изменений каталога, и перезагружает его только если таковые произошли. Кэширование каталога ROM-диска также ускоряет работу, т.к. фактически чтение каталога диска "A:" это сканирование заголовков файлов по всему ПЗУ, объём которого может достигать 1024 Кб.
Кэширование дискет потенциально опасно, т.к. ОС не имеет возможности отслеживать смену физического носителя, поэтому по-умолчанию у дисков "C:" и "D:" оно отключено.
Для управления функцией кэширования сделана специальная утилита - DCM$, её работу поясняет следующий скриншот:
альт.ссылка на изображение
В примере показано отключение кэширования для RAM-диска ( E: ).
Запуск оболочки ОС DSDOS
В ОС изменился механизм запуска оболочки. Ранее это осуществлялось через файл автостарта - EXT$, и однажды запущенная оболочка приводила к возврату из программ всегда в саму себя, что зачастую мешало увидеть результаты работы консольных утилит.
Теперь механизм иной. Оболочка вызывается по нажатию клавиши [Esc], после чего включается признак запуска оболочки при выходе из программ в ОС.
альт.ссылка на изображение
Если запуск программы производился из панели нажатием [Enter], то автовозврат в оболочку сохраняется. Если запуск был через эмуляцию командной строки (с вводом параметров), то возврат из программы производится в CCP, т.е. в режим диалога ОС. Т.о. возможно посмотреть результат завершения программы, сделать повторные вызовы, а для возврата в оболочку достаточно нажать [Esc].
Файл автостарта EXT$ теперь не используется оболочкой, и его пользователь может применять в своих целях.
"Движок" оболочки изменился, а также расширился её функционал. Об этом напишу в другом посте, т.к. в этот столько инфы уже не влезет
Виртуальный диск
В последней версии ОС и ORI-сервера значительно увеличены тайм-ауты в процедурах передачи/приёма байта по интерфейсу RS-232. Это сделано для увеличения надёжности работы, т.к. при запуске приложения ORI-сервера на слабых компьютерах наблюдались ошибки связи.
ORI-сервер
Предновогодняя версия ORI-сервера - 3.09. Ссылка для скачивания - прежняя.
Как упоминал выше, введена поддержка нового файлового протокола v3 с Орионом, реализующего механизм кэширования чтения/записи каталога. В ОС DSDOS этот протокол используется начиная с версии 3.85. Поддержка старого протокола v2 также осталась, т.е. старые версии DSDOS с новым сервером будут работать без проблем.
В интерфейсе появилась возможность изменять вертикальный размер окна приложения:
альт.ссылка на изображение
Этот параметр также сохраняется в файле конфигурации oriserv.ini.
Возможно вообще уменьшить вертикальный размер до исчезновения списка файлов, при этом отображение последнего выключается:
альт.ссылка на изображение
Это может дать некоторую экономию ресурсов на совсем старых и слабых ПК. В виду того, что смена каталога теперь стала возможна непосредственно с Клиента (Ориона), необходимость в работе со списком на сервере, в общем-то, отпала.
При обновлении данных, список теперь не моргает (спасибо Сергею за подсказку про фишку с "DoubleBuffered").
***
Последний раз редактировалось Denn; 11.02.2024 в 13:08. Причина: Изменение путей ссылок. Сборки старых версий недоступны.
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
Как писал выше, оболочка ОС DSDOS изменилась. Ранее она представляла собой запускаемый файл DC$, который при первом старте создавал на квазидиске ( B: ) файл самозапуска (EXT$), т.о. выход из программ пользователя всегда происходил в оболочку.
Теперь оболочка представляет собой системный модуль (файл SHELL), который запускается по нажатию клавиши [Esc] в строке диалога ОС (CCP). Выход из программ пользователя осуществляется либо в оболочку, либо в диалог ОС DSDOS, в зависимости от режима запуска файла (описано выше).
В результате работы, оболочка создаёт на квазидиске конфигурационный файл SHELL.CF:
альт.ссылка на изображение
В нём хранится информация о текущем содержимом панелей, положениях указателей, вводимой ранее информации в эмуляторе командной строки, а также в других диалоговых окнах. Запись конфигурации производится при выходе из оболочки (запуск файлов, процедуры копирования, перемещения, удаления).
Информация о диске
В окне информации о диске (вызов по клавише [?]) появилось несколько горячих клавиш. Они предназначены скорее для опытных пользователей, поэтому явной подсказки на экране по ним нет!
альт.ссылка на изображение
Клавиша [СТР] ([PgDown]) очищает буфер обмена, результат выполнения виден на этом скриншоте:
альт.ссылка на изображение
Поскольку содержимое буфера обмена теперь хранится в файле "~CBDATA" на квазидиске, то в результате очистки удаляется и сам файл:
альт.ссылка на изображение
Клавиша [N] устанавливает верхнюю границу ОЗУ пользователя на значение по-умолчанию (BAFFh). Область BB00..BFFFh резервируется под знакогенератор "Монитора" и код эмуляции API ОС ORDOS (для возможности работы ORDOS-программ в среде ОС DSDOS).
Клавиша [M] устанавливает верхнюю границу ОЗУ пользователя на максимальное значение BFFFh:
альт.ссылка на изображение
Данное значение позволяет программам, написанным под ОС DSDOS максимально использовать ОЗУ основной страницы. При этом код эмуляции ОС ORDOS может быть затёрт! Затирание знакогенератора не так критично, т.к. при выходе в ОС он автоматически восстанавливается, т.о. при последующем запуске не-DSDOS программы отображение символов через п/п Монитора будет работать корректно.
И наконец клавиша [H] устанавливает верхнюю границу ОЗУ пользователя на экстремальное значение EFFFh:
альт.ссылка на изображение
Теоретически возможны ситуации, когда это может потребоваться для обработки огромного файла. Но надо понимать, что информация выше C000h залезет в экранное ОЗУ, т.е. будет видна на дисплее в виде "мусора". Также эта информация может быть испорчена выводом сообщений на экран программой обработчиком.
Последние три команды полностью аналогичны соответствующим командам ОС DSDOS: "M <значение RamTOP>".
Операции с файлами
В оболочке полностью изменён механизм переименования, копирования и удаления файла(ов), а также добавлена возможность переноса (копирование с удалением исходного) файла(ов). Код данного функционала вынесен в отдельный "оверлейный" модуль-копировщик (файл SHELL.EX), который работает во второй странице ОЗУ, т.о. стало возможно копировать файлы любого размера, т.к. под буфер копирования отводится всё ОЗУ основной страницы. По факту операции основной модуль оболочки вызывает копировщик, передаёт ему задание (список файлов, диск назначения и режим обработки) и передаёт управление. После отработки, копировщик вновь загружает основной модуль (т.к. он может быть затёрт телом копируемого файла) и передаёт ему управление.
Остановлюсь подробнее на работе копировщика. Функционал модуля следующий:
[5] или [F5] - копирование (чтение) файла(ов);
[6] ( [F6] - доступно только на клавиатуре PS/2 с прошивкой МК v0.21!) - перенос/переименование файла(ов);
[8] ( [F8] - доступно только на клавиатуре PS/2 с прошивкой МК v0.21!) - удаление файла(ов).
Как и прежде, если нет отмеченных файлов в текущей панели, то операция производится с текущим файлом, на котором установлен курсор-указатель:
альт.ссылка на изображение
По-умолчанию диском назначения при копировании/переносе будет диск противоположной панели. В случае операции с одним файлом возможно отредактировать диск и имя файла назначения. Если стереть диск назначения и оставить только имя файла, то операция копирования/переноса будет производиться на исходный диск:
альт.ссылка на изображение
Можно изначально запретить копировщику подставлять диск назначения, для этого нужно при копировании удерживать клавишу [Shift].
Также возможно копировать/переносить файлы на произвольный диск, для этого достаточно вручную отредактировать диск назначения:
альт.ссылка на изображение
Если на целевом диске уже есть файл с таким же именем, то появится диалог перезаписи:
альт.ссылка на изображение
Пользователю выводится информация о размере/дате копируемого (нового) и существующего (старого) файлов, что зачастую облегчает принятие финального решения
Положительный ответ - нажатие клавиши [ВК] (Enter), отрицательный - любая другая клавиша (кроме [Shift], [Ctrl] и [Alt]).
При успешном выполнении операции будет отображена соответствующая информация:
альт.ссылка на изображение
Внизу окна копировщика отображается индикатор прогресса, визуализирующий ход выполнения операции.
Если при групповом копировании файлов на диске назначения попадается файл с таким же именем, то диалог перезаписи имеет расширенный вид:
альт.ссылка на изображение
Тут у пользователя пять вариантов на выбор:
1). [ВК] (Enter) - перезаписать текущий файл новым, при последующей аналогичной ситуации вновь появится такой же диалог;
2). Любая другая символьная клавиша - не перезаписывать текущий файл, копирование пропустить, при последующей аналогичной ситуации вновь появится такой же диалог;
3). [Ctrl]+[ВК] (Enter) - перезаписать текущий файл новым, при последующей аналогичной ситуации также выполнять перезапись без подтверждения;
4). [Ctrl]+<любая символьная клавиша> - не перезаписывать текущий файл, при последующей аналогичной ситуации также не выполнять перезапись;
5). [Esc] - отмена процесса копирования.
Для удобства при выборе используются только клавиши с однозначной трактовкой, без завязки на регистр и язык.
Во всех аналогичных диалогах (обработка ошибок и т.п.) при групповых файловых операциях действуют те же самые варианты ответов. В случаях ответов №3 и №4, в процессе дальнейшего выполнения операций, в окне появляется информация о выбранных вариантах для последующих аналогичных ситуаций.
Перезаписывать (ЗАМенять) все последующие повторные файлы на новые:
альт.ссылка на изображение
Не перезаписывать:
альт.ссылка на изображение
Тут попытка перезаписать файл, защищённый от удаления:
альт.ссылка на изображение
Те же пять вариантов развития событий. Выбираем не перезаписывать защищённые файлы:
альт.ссылка на изображение
В итоге у нас продолжается процесс копирования со следующими "авансами": перезаписывать повторные, но не перезаписывать защищённые.
При удалении группы файлов сначала появляется запрос на подтверждение, в котором указывается кол-во выделенных файлов на удаление:
альт.ссылка на изображение
Также, если встречается защищённый файл, то появляется дополнительный диалог (с пятью вариантами развития событий):
альт.ссылка на изображение
Команды переименования и перемещения выполняются одной клавишей: [6]. По-умолчанию предполагается перемещение файла(ов):
альт.ссылка на изображение
Переименование возможно только в случае операции с одним файлом!
Для переименования необходимо чтобы диск назначения совпадал с исходным диском. Т.е. стираем явное указание диска назначения, а имя файла редактируем на новое:
альт.ссылка на изображение
Переименование также произойдёт если явно указанный диск назначения будет совпадать с исходным!
Копировщик сам распознаёт и выполняет переименование (отражено в заголовке окна):
альт.ссылка на изображение
В функции копирования заложен вариант копирования файла(ов) в "никуда" (аналог копирования на "NUL" в IBM-PC). Для этого необходимо удерживать [Ctrl].
Т.е. выделяем группу файлов, нажимаем [Ctrl]+[F5], в результате эти файлы просто считываются, но никуда не записываются:
альт.ссылка на изображение
Чтение честное, каждый файл полностью загружается в буфер. Данный режим может быть полезен для проверки чтения с ненадёжных носителей и для измерения скорости чтения файлов (для тестов).
Макроподстановки
В новой версии оболочки дополнена система макроподстановок параметров в эмулятор командной строки.
Клавиша [A] вставляет команду изменения адреса посадки текущего файла:
альт.ссылка на изображение
Остаётся ввести новый адрес посадки и нажать [ВК] (Enter).
Очень полезной на практике оказалась двойная подстановка файлов в команду запуска "L". Типичная задача при запуске программ и утилит - подстановка в качестве параметра имени рабочего файла. Допустим, требуется открыть на редактирование файл "ED.HLP", для этого нужно запустить из ROM-диска текстовые редактор ED$, а в качестве параметра указать диск размещения и имя редактируемого файла. Для выполнения таких задач сделана возможность подстановки имён файлов (с явными указаниями дисков) с обеих панелей оболочки. Для этого на одной (противоположной) панели выбираем файл программы-обработчика:
альт.ссылка на изображение
на другой (текущей) панели выбираем рабочий файл, который будет вставлен в качестве параметра,
и нажимаем клавишу "L", при этом удерживая клавишу [Shift]:
альт.ссылка на изображение
В эмуляторе командной строки собрана готовая команда для запуска из ROM-диска текстового редактора с загрузкой из квазидиска файла помощи "ED.HLP". Далее можно ввести дополнительные параметры (например, ключи), если требуется, и нажать [ВК] (Enter) для выполнения.
Если не требуется ввод доп. параметров, а нужно просто запустить утилиту с подстановкой рабочего файла, то достаточно нажать [Shift]+[ВК] (Enter) - команда выполнится сразу, без подтвержения.
Размещение файла программы-обработчика на противоположной панели сделано для удобства, т.к. при множественных вызовах достаточно просто перемещаться по рабочим файлам текущей панели и давать команду запуска.
Ещё одну часто используемую операцию оформил в виде макропостановки: сравнение двух файлов утилитой FC$. В произвольном порядке выделяем сравниваемые файлы на обеих панелях и нажимаем клавишу "J", в результате собирается и выполняется следующая команда:
L A:FC$ d1:FILE1 d2:FILE2
Для примера я выбрал файлы "ED.HLP" на диске "B:" (в правой панели) и на диске "A:" (в левой панели) и нажал "J", результат:
альт.ссылка на изображение
Также на клавишу "H" на будущее зарезервирована подстановка вызова утилиты HEX$, которая позволит редактировать бинарный файл.
Последний раз редактировалось Denn; 11.02.2024 в 13:24. Причина: Изменение путей ссылок
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
shapipovo(27.11.2019)
Уважаемый Denn! на 128 кб озу буде работать DSDOS? и с кнгмд от орион-сервиса?
tol123, да, работать будет. Но в системе не будет квазидиска, а без него будет не очень интересно, имхо. Квазидиск используется для буфера обмена, для хранения INI-файлов программ, в качестве рабочего/временного диска при каком-либо креативе на Орионе.
Квазидиск выбирается по-умолчанию если нет явного указания диска, но это правило можно изменить с помощью утилиты конфигурации ОС - SYSTEM$ (параметр "Раб.диск").
Если в системе нет никаких других дисков, кроме диска "A:", то смысл установки ОС скорее ознакомительный.
По КНГМД. Если он удовлетворяет следующей спецификации:
F700H; Р-Р КОМАНД
F701H; Р-Р ДОРОЖЕК
F702H; Р-Р СЕКТОРОВ
F703H; Р-Р ДАННЫХ
F708H; Р-Р КОНФИГУРАЦИИ ; D1=DRV, D0=SIDE или F720H; D4=/SIDE, D2=0, D1&D0=DRV
то будет работать.
П.С. Я собрал два варианта: М.Короткина и тот, который идёт в комплекте плат от Zorel'а - с обоими КНГМД ОС прекрасно работает.
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
Всех приветствую в новом году!
Праздники прошли с пользой дела, в результате наконец-то сделал (буквально на одном дыхании!) то, что давным-давно хотел - удобный инструмент длялюбителей поковыряться в...работы с ОЗУ. До этого долго и мучительно пользовался замечательными авторскими программами: EDMEM$ и M128$, но, увы, концептуально они не вписываются в идеологию DSDOS, которая предполагает скорость, удобство и наглядность интерфейса. К тому же авторские утилиты используют не толерантный RET-, а жёсткий JMP-выход по адресу горячего старта ОС ORDOS (BFFDh), т.о. при полном использовании ОЗУ пользователя и затирании кода эмуляции ОРДОС эти утилиты становятся неработоспособными. Это конечно можно вылечить правкой их кода, но остальные неудобства подтолкнули на создание собственной утилиты, объединяющей функции обеих авторских.
По старой-доброй традиции утилита названа "Инструментальный монитор", имя файла - MTOOL$. Начиная с DSDOS v3.86 она интегрирована в ОС и будет идти во всех сборках вместо авторских EDMEM$ и M128$/M256$. Под "интегрированием" понимается возможность её быстрого вызова через сервисное меню ОС (Win-M в PS/2-версии клавиатуры с прошивкой МК v0.21), а также из оболочки (горячая клавиша 'M'). Причём в первом случае производится полное сохранение рабочего экрана ПРК с последующим его восстановлением после выхода из MTOOL. Сохраняются: основной экран (C000..EFFFh@0), атрибуты цвета (C000..EFFFh@1), режим отображения символов, текущий цвет экрана, позиция курсора, текущий диск ОС. Для сохранения требуется 24 Кб свободного места на квазидиске. Если свободно менее 24 Кб, но более 12 Кб, то будет сохранён/восстановлен только основной экран, без атрибутов цвета. Сохранение сделано для того, чтобы инструмент можно было вызывать в любой момент, когда на экране присутствует мигающий курсор, а после выхода работа прерванной программы была продолжена "с того же места". Т.о. MTOOL$ является системной (или оверлейной) программой, работает во второй странице ОЗУ, т.е. его работа прозрачна - не затрагивает ОЗУ основной (нулевой) страницы.
При выходе из MTOOL$, на квазидиске в файле MTOOL.CF сохраняются все текущие параметры: выбранные адреса, номер страницы ОЗУ, границы блока, поисковые запросы и т.д., т.о. при повторном запуске утилиты мы оказываемся как бы в том же самом месте.
Главный экран утилиты представляет собой редактор дампа и выглядит следующим образом:
альт.ссылка на изображение
Поясню назначение полей. Идём сверху вниз, слева направо.
первая строка:
"Адрес" - текущий адрес, где в данный момент находится курсор редактора (по-умолчанию устанавливается в 0000h);
"Страница" - текущая страница ОЗУ, с которой мы работаем (по-умолчанию устанавливается в 0);
"Блок" - диапазон адресов, указывающих на участок ОЗУ, используется в операциях копирования/заполнения/поиска (по-умолчанию устанавливается в 0000h-<RamTOP>);
вторая строка:
"Метка" - адрес для быстрого перехода, адрес начала фрагмента при работе с буфером обмена (по-умолчанию устанавливается в 0000h);
"Буфер... (...)" - размер и тип данных в буфере обмена (если буфер пуст, то значения параметров не отображаются);
"Шаблон" - байт данных, используется для заполнения ячеек ОЗУ константой в одиночных и групповых операциях (по-умолчанию = 00h);
* значения всех параметров в HEX-виде!
ниже идут:
Основное поле текущего шестнадцатиричного дампа, а справа копия этого же дампа в текстовом виде.
под ними находится поле:
"Шрифты 8х8" - копия текущего дампа в графическом виде, "заточенном" под отображение растровых шрифтов 8х8 пикселей (a-ka фонтов).
Пример знакогенератора из ПЗУ Монитора:
альт.ссылка на изображение
Пример знакогенератора ОС DSDOS:
альт.ссылка на изображение
В самом низу экрана находится сокращённая подсказка по управляющим клавишам.
Концепт
Идеология работы с утилитой отличается от M128$. Все операции доступны в одно нажатие, никаких долгих перемещений по пунктам меню и повторов ввода адресов/данных. Все изменения немедленно отображаются в соответствующих полях (изменения ячеек ОЗУ - во всех трёх видах отображения текущего дампа):
альт.ссылка на изображение
Все виды операций доступны для любой страницы ОЗУ - текущей в данный момент. Групповые операции с массивом данных выполняются по адресам блока. При переносе/вставке массива/фрагмента данных производится проверка на корректность ("заворачивание" адреса и превышение критической границы F000h), при некорректных значениях операция не выполняется и звучит сигнал ошибки (концепт "защита от дурочки").
Редактор дампа
Как наиболее важная и первоочередная функция, редактор предстаёт пользователю сразу после загрузки утилиты.
Возможно редактирование в двух режимах: "Байтовый" (выбран по-умолчанию) и "Текстовый", переключение между ними с помощью клавиши [Tab]:
альт.ссылка на изображение
Для навигации используются следующие клавиши:
[←], [→], [↑] и [↓] - перемещение по текущему дампу;
[Ctrl]+ [←], [→] - перемещение по адресам результатов поиска (работает после выполнения соответствующей команды, см. ниже);
[Ctrl]+ [↑] / [↓] или [PgUp] / [PgDown] - перемещение к предыдущему/следующему дампу;
[Home] / [End] - в начало/конец текущей строки;
[Shift]+ [Home] / [End] - в начало/конец текущего дампа;
[Ctrl]+ [Home] / [End] - в начало/конец блока;
[F2] - ввести новый текущий адрес*;
[Shift]+ [F2] - ввести новый адрес метки*;
[Ctrl]+ [N] - присвоить адресу метки текущий адрес (поставить метку);
[Ctrl]+ [G] - присвоить адрес метки текущему адресу (переход к метке);
[Ctrl]+ [F2] - ввести новые адреса начала и конца блока (можно ввести только адрес начала, а затем нажать [Esc] - адрес конца останется прежний)*;
[Ctrl]+[Shift]+ [F2] - ввести новый адрес конца блока*;
[Ctrl]+[Shift]+ [F3] - адресу начала блока присвоить адрес метки, а адресу конца блока - текущий (быстрое выделение блока);
[Ctrl]+ [<0..7>] - выбор текущей страницы ОЗУ**;
[F5] - обновление экрана (полная перерисовка);
[F4] - выход из утилиты MTOOL$ с сохранением параметров;
[Shift]+ [F4] - выход из утилиты без сохранения параметров (ранее созданный файл MTOOL.CF также удаляется!);
* вводятся шестнадцатеричные значения параметров, обязателен ввод всех четырёх цифр адреса; новое значение вступает в силу после ввода последней цифры;
ввод параметра можно прервать нажатием [Esc], при этом восстанавливается старое значение.
** максимально доступное значение зависит от реального объёма ОЗУ в ПРК, которое определяется загрузчиком ОС DSDOS; при попытке выбора недоступной страницы ОЗУ прозвучит сигнал ошибки и страница не сменится! При выборе страницы равной текущей обновление информации на экране не произойдёт.
Клавиши редактирования
"Байтовый" режим:
[Tab] - переключение в "Текстовый" режим (адрес ячейки в дампе сохраняется, курсор переходит в поле символов);
[Пробел] - выбор ниббла текущего байта*;
[0..9], [A..F] - модификация значения текущей ячейки ОЗУ, после ввода последней цифры текущего байта курсор переходит к следующему в пределах текущего дампа;
[-] - декремент значения текущей ячейки ОЗУ;
[+] - инкремент значения текущей ячейки ОЗУ;
[\] - обмен нибблов байта текущей ячейки ОЗУ;
[<] - циклический сдвиг значения текущей ячейки ОЗУ влево;
[>] - циклический сдвиг значения текущей ячейки ОЗУ вправо;
[F1] - обнуление значения текущей ячейки ОЗУ;
[Забой] - инверсия значения текущей ячейки ОЗУ;
[N] - логическое "AND" значения текущей ячейки ОЗУ с шаблоном (результат записывается в текущую ячейку);
[O] - логическое "OR" значения текущей ячейки ОЗУ с шаблоном (результат записывается в текущую ячейку);
[X] - логическое "XOR" значения текущей ячейки ОЗУ с шаблоном (результат записывается в текущую ячейку);
[P] - заполнить блок по шаблону.
* для ускорения навигации при перемещении между ячейками курсор всегда устанавливается на начало байта (старший ниббл), если требуется изменить только младший ниббл, то старший пробелом пропускается; при нахождении курсора на младшем ниббле (второй цифре байта) нажатие пробела переместит курсор на старший ниббл (первую цифру байта).
Ввод любого ниббла байта немедленно модифицирует значение текущей ячейки ОЗУ! Отката изменений в данной версии утилиты нет.
"Текстовый" режим:
[Tab] - переключение в "Байтовый" режим (адрес ячейки в дампе сохраняется, курсор переходит в поле редактора байтов);
['Пробел'..'ъ'] - ввод символов с кодами 20h..FFh, курсор переходит к следующему в пределах текущего дампа;
[F1] - вставка признака конца строки (байт 00h) в текущую ячейку ОЗУ;
[Ctrl]+ [E] - смена кодировки текущего символа (ORDOS/DSDOS);
[Ctrl]+ [K] - смена регистра текущего символа (актуально только для кодировки DSDOS! в кодировке ORDOS меняется язык РУС/LAT);
Общие для обоих режимов:
[Ctrl]+ [Enter] - сохранить значение текущей ячейки в шаблон;
[Shift]+ [Enter] - ввести новое значение шаблона*;
[Enter] - заменить значение текущей ячейки на значение шаблона;
[F3] - скопировать блок по текущему адресу;
[Ctrl]+ [F3] - скопировать фрагмент в буфер обмена**;
[Shift]+ [F3] - вставить фрагмент из буфера обмена по текущему адресу;
* вводится шестнадцатеричное значение параметра, обязателен ввод двух цифр; новое значение вступает в силу после ввода последней цифры;
ввод параметра можно прервать нажатием [Esc], при этом восстанавливается старое значение.
** фрагментом считается участок дампа от адреса метки до текущего, включительно.
Редактор имеет три параллельных механизма переноса данных: 1) Шаблон, 2) Блок и 3) Буфер обмена.
Шаблон позволяет переносить только один байт данных, блок и буфер обмена - до 60 Кб. Шаблон и буфер обмена позволяют осуществлять перенос данных между страницами ОЗУ (копируем на одной странице, вставляем на другой).
Ввод адресов
Для удобства запоминания ввод адресов ассоциирован с клавишей [F2]. Без добавления управляющих клавиш вводится текущий адрес:
альт.ссылка на изображение
Старое значение адреса стирается, и редактор готов к вводу нового. В этом режиме воспринимаются только цифры [0..9] и латинские буквы [A..F], в последнем случае текущий регистр и язык ввода роли не играют, нажатия на соответствующие буквы интерпретируются корректно:
альт.ссылка на изображение
Значение параметра обновляется после ввода последней цифры. Отмена ввода нового значения параметра - с помощью клавиши [Esc], при этом старое значение параметра восстанавливается.
Добавление управляющей клавиши [Shift] вводит адрес метки:
альт.ссылка на изображение
Добавление управляющей клавиши [Ctrl] вводит адреса блока. Сначала запрашивается адрес начала:
альт.ссылка на изображение
а затем адрес конца:
альт.ссылка на изображение
Если требуется изменить только адрес начала, то после его ввода нажимаем [Esc].
Если требуется изменить только адрес конца, то удерживаем одновременно обе управляющие клавиши: [Ctrl]+[Shift].
Шаблон
По аналогии, все операции связанные с Шаблоном ассоциированы с клавишей [Enter]. Без добавления управляющих клавиш производится вставка шаблона по текущему адресу, при этом для удобства при многократных операциях автоматически курсор переходит на следующий байт (символ).
Добавление управляющей клавиши [Ctrl] копирует значение текущей ячейки ОЗУ в шаблон.
Значение шаблона также можно ввести вручную, для этого добавляется управляющая клавиша [Shift]:
альт.ссылка на изображение
Копирование блока
При операции копирования, дамп выделенного блока копируется начиная с текущего адреса.
Т.е. сначала задаём границы копируемого блока, как было описано выше, либо с помощью быстрого выделения [Ctrl]+[Shift]+[F3].
Для примера выделим фрагмент строки "Слишком большой файл":
альт.ссылка на изображение
В данном примере метка стоит на конце исходной строки по адресу 0013h, а курсор по адресу 0000h. Операция быстрого выделения сама определяет который из адресов старше, и в соответствии с этим корректно берёт значения начала и конца блока.
Далее перемещаем курсор по адресу, куда требуется скопировать блок (в данном примере - 0020h), и нажимаем [F3]:
альт.ссылка на изображение
Блок скопирован.
Буфер обмена
Используется для переноса (копирования) данных между участками дампов ОЗУ, между страницами ОЗУ и между программами. В данной утилите также может использоваться для копирования участка дампа в качестве образца для поиска.
MTOOL$ различает два зарезервированных в ОС DSDOS типа данных: "HEX" (01h) и "TXT" (03h). При копировании в буфер обмена маркировка типа данных производится согласно текущему режиму: "Байтовый" = "HEX" (01h), "Текстовый" = "TXT" (03h). При вставке из буфера тип данных игнорируется, данные вставляются всегда как дамп, т.о. возможна вставка любых данных из других программ.
Для копирования данных в буфер обмена, сначала выделяем фрагмент.
Для этого адрес начала фрагмента записываем в метку ([Ctrl]+[N] или [Shift]+[F2]):
альт.ссылка на изображение
Затем перемещаем курсор к адресу конца фрагмента и нажимаем [Ctrl]+[F3] (или [Ctrl]+[Ins] на клавиатуре PS/2 с прошивкой МК v0.21).
В результате фрагмент записан в буфере обмена под соответствующим типом данных:
альт.ссылка на изображение
Для вставки фрагмента из буфера обмена перемещаем курсор на адрес начала места вставки и нажимаем [Shift]+[F3] (или [Shift]+[Ins] на клавиатуре PS/2 с прошивкой МК v0.21).
альт.ссылка на изображение
Фрагмент вставлен.
Как было сказано выше, вставку можно делать в другой странице ОЗУ, т.о. легко делается перенос данных между страницами.
А также данные в буфер обмена могли быть скопированы ранее из другой программы и вставлены в MTOOL$, либо скопированы из MTOOL$, а использованы в другой программе. Например, можно скопировать текстовое сообщение (в текстовом режиме) из дампа программы, а затем вставить его в текстовом редакторе, и наоборот.
Пример копирования бинарных данных (фонтов) через буфер обмена:
Выделяем и копируем фрагмент (BB80h..BBFFh) в буфер обмена (тип данных = 01h):
альт.ссылка на изображение
Перемещаемся на адрес начала, куда будем вставлять (участок BB00h..BB7Fh):
альт.ссылка на изображение
Вставляем:
альт.ссылка на изображение
Результат наглядно виден по графическому полю.
Если что-то пошло не так...
Механизм "Защиты от дурочки" не позволяет при блочных операциях испортить системную область непереключаемого ОЗУ F000h..F3FFh, а также копировать данные в порты F400h..FFFFh (модифицировать ячейки портов по отдельности можно). Однако "наломать дров" всё же есть возможность, в частности испортить область ОС DSDOS в странице ОЗУ №1, содержимое файлов квазидиска - страницы 2..3(7) или скопировать данные в экранную область. Порча системных данных вероятнее всего фатальна, в результате потребуется холодная перезагрузка ОС, испорченные файлы не восстановить - тут пользователь должен сам "думать головой".
А вот последнюю ситуацию (с экраном) возможно оперативно и без последствий исправить.
Для примера нечаянно скопировали мусор в экранную область:
альт.ссылка на изображение
Ничего страшного, нажимаем клавишу [F5], в результате экран утилиты полностью перерисовывается:
альт.ссылка на изображение
Сравнение дампов
Сравнение дампов выполняется по команде [Ctrl]+[C]. Происходит побайтовое сравнение блока с дампом начиная с текущего адреса.
Возьмём результаты примера со скопированными фонтами, и сравним оригинал с копией. Блок копии у нас уже выделен, ставим курсор на начало оригинала и даём команду сравнения:
альт.ссылка на изображение
Копировщик в прошлом примере не подвёлДанные идентичны:
альт.ссылка на изображение
Нарочно испортим 16 первых байт оригинала (затрём кодом 30h из шаблона):
альт.ссылка на изображение
И повторим сравнение. Вновь техника не обманула, несоответствия выявлены:
альт.ссылка на изображение
Результаты сравнения выводятся в отдельном окне, поверх полей данных редактора. Если кол-во результатов не помещается в окне, то происходит скроллинг. Приостановить процесс скроллинга можно нажатием любой клавиши, продолжить также любой клавишей, кроме [Esc], последняя отменяет процесс сравнения.
По окончании сравнения выводится общий счётчик несовпадений (в десятичном виде). Возврат в редактор - по любой клавише.
Поиск фрагмента
Поиск фрагмента производится в пределах блока! Поэтому сначала определяем границы блока, а потом даём команду поиска - [Ctrl]+[F].
Открывается диалог ввода образца поиска:
альт.ссылка на изображение
Возможны два варианта ввода: "Байтовый" и "Текстовый". Переключение между ними по клавише [Tab]. Переключаться можно в любой момент, в т.ч. "посреди дороги" во время ввода, при этом содержимое строки отобразится в соответствующем виде, и ввод будет продолжен в новом режиме. Максимальная длина образца поиска - 255 байт (символов).
Доступны следующие клавиши при вводе/редактировании образца:
"Байтовый" режим:
[0..9], [A..F] - ввод текущего байта, после ввода последней цифры текущего байта курсор переходит к следующему
"Текстовый" режим:
['Пробел'..'ъ'] - ввод символов с кодами 20h..FFh
Общие для обоих режимов:
[←], [Забой] - удаление последнего байта/символа;
[→] - открыть ("вспомнить") следующий байт/символ*;
[↑] или [↓] - восстановить образец предыдущего поиска;
[СТР] или [PgDown] - очистить строку;
[Esc] - отмена операции, возврат в редактор;
[Enter] - запуск процесса поиска;
[F3] или [Shift]+[F3] (или [Shift]+[Ins] на клавиатуре PS/2 с прошивкой МК v0.21) - вставить фрагмент поиска из буфера обмена**;
* На самом деле буфер ввода всегда состоит из 255 байтов/символов, из которых значащие (видимые на экране и участвующие в поиске) ограничиваются искусственно (по нажатию [Enter]). Т.о. есть возможность открыть ("вспомнить") все 255 байт/символов буфера строки образца.
При вставке в строку образца фрагмента из буфера обмена, учитывается тип данных, в соответствии с ним автоматически переключается режим отображения:
альт.ссылка на изображение
* Вставка фрагмента из буфера обмена возможна только при условии, что размер данных не превышает 255 байт! В противном случае вставка игнорируется.
После вставки, можно изменить режим и продолжить редактирование:
альт.ссылка на изображение
После завершения ввода образца, запускаем процесс поиска ([Enter]):
альт.ссылка на изображение
Если образец занимает более одной строки, то он визуально усекается, а в хвосте добавляется многоточие, т.к. остальная часть окна используется для отображения процесса поиска.
При анализе больших массивов выводится анимация - вращающийся "индикатор прогресса".
При обнаружении совпадений, выводятся адреса вхождения участков дампа. Также эти адреса запоминаются в специальном буфере, т.о. впоследствии, в редакторе дампа по ним можно быстро перемещаться с помощью [Ctrl]+ [←], [→].
Для приостановки процесса поиска нужно нажать любую клавишу. Продолжение также по любой клавише, кроме [Esc], последняя отменяет поиск и возвращает в редактор.
По окончании процесса выводится общее кол-во вхождений образца и предлагаются два варианта выхода в редактор:
альт.ссылка на изображение
По [Enter] мы автоматически выходим в редактор по адресу первого вхождения образца. По любой другой клавише мы возвращаемся в редактор по текущему адресу, при этом указатель быстрых переходов по результатам поиска установлен на адрес последнего вхождения образца, т.е. переходы по результатам [Ctrl]+[←] будут идти с конца.
Например, жмём [Enter] и переходим к первому результату:
альт.ссылка на изображение
Затем нажимаем [Ctrl]+[→] и переходим к следующему:
альт.ссылка на изображение
Аналогично можно перемещаться в "текстовом" режиме...
[Ctrl]+[←]:
альт.ссылка на изображение
[Ctrl]+[→]:
альт.ссылка на изображение
Содержимое буфера адресов результатов сохраняется до следующего поиска.
При повторном поиске клавишей [→] можно посимвольно "вспоминать" предыдущий образец:
альт.ссылка на изображение
или восстановить его сразу весь по клавише [↑].
Передача управления по адресу
При нажатии комбинации [Ctrl]+[Shift]+[G] выполняется CALL-вызов кода в нулевой странице по текущему адресу. Работает только если текущая страница ОЗУ = 0 !
Возврат производится обратно в MTOOL$, при этом полностью перерисовывается экран и восстанавливаются режимы отображения (полноэкранный, б/цветный и т.д.).
Коды клавиш
Часто необходимая при программирования функция - получение HEX-кодов клавиш. В MTOOL$ вызывается в "Байтовом" режиме по клавише [K].
Открывается окно, в котором отображаются символы и коды нажимаемых клавиш:
альт.ссылка на изображение
Выводятся символ и код, полученные подпрограммой BIOS ОС DSDOS.
Если нажатую клавишу чуть задержать, то выводится дополнительный вариант кода, полученного подпрограммой Монитора 0F81Bh:
альт.ссылка на изображение
Т.к. BIOS осуществляет преобразование кодов в соответствии с типом используемой клавиатуры, то значения для некоторых клавиш (или сочетаний) могут различаться с п/п Монитора.
Выход в редактор по клавише [Esc].
П.С.:
В планах дополнить функционал возможностью оперативного сохранения блока в виде файла и возможно ещё чем-то.
Вывод контрольных сумм не реализован в виду их полной неактуальности на момент создания утилиты![]()
Последний раз редактировалось Denn; 11.02.2024 в 13:50. Причина: Изменение путей ссылок
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
Редактор отличный. Жалко только что интерактивный подсчет контрольной суммы возможен только построчно и, максимум, для блока. Это делал DL-редактор для Специалиста. А для всего файла Орион уже не потянет. В этом отношении набор дампов на PC намного удобнее (писал для себя):
PS Вывод блока в графическом режиме это супер!
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)