PDA

Просмотр полной версии : DSDOS для ПРК "Орион-128"



Страницы : [1] 2 3

Denn
13.10.2013, 01:32
НАВИГАЦИЯ ПО ТЕМЕ:


Software

Команды ОС DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=634822&viewfull=1#post634822)

Ошибки в ОС DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=634880&viewfull=1#post634880)

Пакетная обработка команд (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=634880&viewfull=1#post634880)

Сервисное меню пользователя (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=635382&viewfull=1#post635382)

Оболочка ОС DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=635745&viewfull=1#post635745)

Информация по программированию в среде ОС DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=637266&viewfull=1#post637266)

Текстовый редактор «Gemini-EDIT» (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=643544&viewfull=1#post643544)

Архиватор файлов «STORE» (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=793991&viewfull=1#post793991)

Утилита сравнения файлов «FC» (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=795341&viewfull=1#post795341)

Формат хранения файлов на IBM-PC: *.ORI (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=795695&viewfull=1#post795695)

Преобразование кодировки текстовых файлов (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=795927&viewfull=1#post795927)

Шифрование текстовых файлов, «PSWD$» (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=796075&viewfull=1#post796075)

Смена концепта: русификация ОС DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=801891&viewfull=1#post801891)

Настройка виртуального COM-порта в эмуляторе b2m (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=835534&viewfull=1#post835534)

Связь с IBM-PC по линкеру (GUI-версия) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=844013&viewfull=1#post844013)

Конвертер файлов PC <-> ORI (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=883707&viewfull=1#post883707)

Виртуальный диск: работа с директориями (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=893089&viewfull=1#post893089)

Буфер обмена в квазидиске, кэширование каталогов дисков (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=895431&viewfull=1#post895431)

Оболочка ОС DSDOS: смена концепта (SHELL) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=895531&viewfull=1#post895531)

Инструментальный Монитор (MTOOL$) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=898417&viewfull=1#post898417)

Анализатор ТТЛ-сигналов для ПРК "Орион" (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=923604&viewfull=1#post923604)

АССЕМБЛЕР DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=933658&viewfull=1#post933658)

Программирование на Ассемблере DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=936060&viewfull=1#post936060)

Драйвер расширения ExtDRV v2.7 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=948846&viewfull=1#post948846)

Формат графических файлов ОС DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=950562&viewfull=1#post950562)

Просмотр графических файлов - PICVIEW$ (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=950740&viewfull=1#post950740)

Проигрыватель WAV-файлов для Орион-128 (Covox) (http://zx-pk.ru/threads/26836-12-bit-stereo.html?p=882029&viewfull=1#post882029)

Утилита вывода параметров винчестера (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=952585#post952585)

Поддержка НЖМД (IDE-винчестеров) в ОС DSDOS (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=953639&viewfull=1#post953639)

Измерение скорости работы накопителей (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=989145&viewfull=1#post989145)

Дизассемблирование МОНИТОР-1 (https://zx-pk.ru/threads/9679-orion-128-sborka-i-nastrojka-kompyutera.html?p=1006372&viewfull=1#post1006372)


Хронология релизов ОС DSDOS

DSDOS v3.71r от 05.11.2015 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=840947&viewfull=1#post840947)

DSDOS v3.72r [16 бит]от 09.12.2015 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=848057&viewfull=1#post848057)

Полноценный виртуальный диск на IBM-PC (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=850213&viewfull=1#post850213)

DSDOS v3.77r & ORI-server v2.03 от 20.02.2016 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=858415&viewfull=1#post858415)

DSDOS v3.81 от 16.06.2016 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=874727&viewfull=1#post874727)

DSDOS v3.83 (+RTC) от 11.07.2016 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=878257&viewfull=1#post878257)

DSDOS v3.85 от 28.12.2016 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=895431&viewfull=1#post895431)

ORI-server: протокол v.3 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=895431&viewfull=1#post895431)

DSDOS v3.86 от 23.01.2017 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=898706&viewfull=1#post898706)

DSDOS v3.87 от 10.12.2017 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=940746&viewfull=1#post940746)

DSDOS v3.88 PRO от 25.03.2018 (поддержка НЖМД) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=956236&viewfull=1#post956236)

DSDOS v3.9 от 01.01.2019 (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=993125&viewfull=1#post993125)

DSDOS v3.92 для Орион-128, исправления от 13.01.2019 (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=994652&viewfull=1#post994652)

DSDOS v3.92 для Орион-ПРО (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=1040397&viewfull=1#post1040397)

DSDOS v3.93 для Орион-ПРО (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=1042795&viewfull=1#post1042795)

DSDOS v3.93r для Орион-128 и DSDOS v3.94r для Орион-ПРО (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=1097199#post1097199)

Критическое обновление DSDOS: v3.94 для ОРИОН-128, v3.95 для ОРИОН-ПРО (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=1099101&viewfull=1#post1099101)

DSDOS v3.95: Определение ОЗУ объёмом 1024 Кб (ОРИОН-128), ошибка в плате (ОРИОН-ПРО) (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=1102433&viewfull=1#post1102433)


Hardware

ROM-диск объёмом более 64 Кб (до 1 Мб) (http://zx-pk.ru/threads/18954-sborka-orion-128-rev-512.html?p=946988&viewfull=1#post946988)

SuperROM-диск v2.0 (UT621024) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=880046&viewfull=1#post880046)

SROM "Lite" 1024 Kb (http://zx-pk.ru/threads/25367-gibridnyj-elektronnyj-disk-dlya-prk-orion.html?p=896625&viewfull=1#post896625)

Гибридный электронный диск (ЭД™) v.1 (http://zx-pk.ru/threads/25367-gibridnyj-elektronnyj-disk-dlya-prk-orion.html?p=880943&viewfull=1#post880943)
Гибридный электронный диск (ЭД™) v.3 (https://zx-pk.ru/threads/25367-gibridnyj-elektronnyj-disk-dlya-prk-orion.html?p=954203&viewfull=1#post954203)
Реализация ЭД™ от Freiwind с готовой платой (https://zx-pk.ru/threads/25367-gibridnyj-elektronnyj-disk-dlya-prk-orion.html?p=1138756&viewfull=1#post1138756)

Быстрый RAM-диск (RAM7) v.1 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=881433&viewfull=1#post881433)

КНГМД для ОС DSDOS (М.Короткин) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=634546&viewfull=1#post634546)

Вариант реализации КНГМД М.Короткина (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=852608&viewfull=1#post852608)

Прошивка МК для клавиатуры Caro (начало) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=857932&viewfull=1#post857932)

Финальная версия прошивки МК (Caro) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=858035&viewfull=1#post858035)

Порт COM1 на КР580ВВ51А / MSM82C51A-2 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=876239&viewfull=1#post876239)

Печатная плата порта COM1 (от OldSpeccer) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=890152&viewfull=1#post890152)

Быстрый порт COM2 на БИС 16C550 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=876066&viewfull=1#post876066)

Планы по разработке DS-Card™ (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=881379&viewfull=1#post881379)

Подключение ЖК-индикатора к ПРК "Орион-128" (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=925323&viewfull=1#post925323)

Программатор ПЗУ Winbond W27C512 (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=941190&viewfull=1#post941190)

Часы реального времени на RTC КР512ВИ1 (http://zx-pk.ru/threads/9331-orion-128-podklyuchenie-rtc-512vi1.html?p=929148&viewfull=1#post929148)

Исправление ошибки схемотехники RTC для ОРИОН-ПРО (http://zx-pk.ru/threads/25327-periferiya-quot-orionpro-quot.html?p=922237&viewfull=1#post922237)

ЦАП 12-бит стерео для Орион-128 (Covox) (http://zx-pk.ru/threads/26836-12-bit-stereo.html?p=883534&viewfull=1#post883534)

ПЗУ-тест расширенного ОЗУ 512 Кб для ПРК Орион-128 рев.512 (https://zx-pk.ru/threads/18954-sborka-orion-128-rev-512.html?p=871740&viewfull=1#post871740)

Альтернативные PS/2-клавиатура и RTC на DS1307 (https://zx-pk.ru/threads/29974-ps-2-i-rtc2-cherez-port-klaviatury.html)

Беспроводное подключение виртуального диска (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=1004388&viewfull=1#post1004388)

SD/SDHC вместо НЖМД (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=1003585&viewfull=1#post1003585)

Адреса портов расширений (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=995188&viewfull=1#post995188)


F.A.Q.

Недоступен диск B: (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=950346&viewfull=1#post950346)

Неработоспособность старых версий ОС на неродных версиях Мониторов (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=849369&viewfull=1#post849369)

Поддержка широкого экрана (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=874819&viewfull=1#post874819)

Наладка COM-порта (OldSpeccer) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=890086&viewfull=1#post890086)

Работоспособность DSDOS на 128 Кб ОЗУ (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=895577&viewfull=1#post895577)

Работоспособность DSDOS с КНГМД "Орион-сервис" (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=895577&viewfull=1#post895577)

Адресация порта COM1 (ВВ51А) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=912481&viewfull=1#post912481)

Поддержка многозадачности в ОС (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=948977&viewfull=1#post948977)

Вопросы, предложения (от Barsik) (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=949206&viewfull=1#post949206)

К вопросу о GUI (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=949529&viewfull=1#post949529)

В чём разница форматов файлов *.BRU и *.ORI ? (http://zx-pk.ru/threads/28758-opoznat-platu-ngmd.html?p=950094&viewfull=1#post950094)

Проблема "народного" КНЖМД на базе порта пользователя (https://zx-pk.ru/threads/27462-sborka-nastrojka-platy-orion-128(uknts)-ps-2(caro)-fdd-ide-z80card2.html?p=956692&viewfull=1#post956692)

Проблемы подключения нестандартных НЖМД (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=994732&viewfull=1#post994732)

Сбиваются показания времени и даты, плата Орион-128(УКНЦ)+ PS/2(caro)+FDD+IDE+Z80card2 (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=995161&viewfull=1#post995161)

Определение ОЗУ объёмом 1024 Кб (https://zx-pk.ru/threads/9679-orion-128-sborka-i-nastrojka-kompyutera.html?p=1037730&viewfull=1#post1037730)

Почему детект НЖМД реализован проверкой терминирования ШД в накопителе, а не с помощью команды-запроса по IDE (https://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=1061445&viewfull=1#post1061445)


Другие ресурсы

Группа ВК (https://vk.com/dsdos_orion)

ORI-сервер (https://vk.com/oriserv)
__________________________________________________ __________________________________________________ ________________

Начало темы:


Доброго времени суток уважаемые орионщики и им сочувствующие :)

По просьбам трудящихся, в данном топике буду выкладывать свои наработки по этому замечательному ПРК. :v2_dizzy_coder:

Для начала немного предыстории. Я "заболел" Орионом сразу, как получил первый номер журнала РАДИО со схемой и описанием.
С нетерпением ждал очередной журнал, делал все доработки, руками набивал весь публикуемый софт (в т.ч. гигантские BASIC и PENX!).
Мне понравилась концепция авторской ОС ORDOS, впоследствии я написал достаточно много своих программ под неё.
Но в какой-то момент понял узкие рамки ORDOS и у меня выработалось чёткое представление чего бы хотелось в ней улучшить.
Окончательно "сложилась картинка" после публикации контроллера НГМД и прилагаемой к нему ОС SPDOS. В результате я начал работу по созданию (с нуля) собственной ОС, которая бы взяла всё лучшее от обеих ОС, а также позволила ещё больше реализовать возможности ПРК Орион в варианте с расширенным до 256 Кб ОЗУ.
От ORDOS взята базовая идеология (ROM/RAM-диски, однобуквенные команды, частично структура файлов), а от SPDOS взят формат хранения файлов на дискетах. Заодно была решена давно мучавшая меня проблема - медленный вывод символов на экран.
Новая ОС (далее - DSDOS) включает модуль обеспечивающий совместимость с программами, написанными под ORDOS (правда с некоторыми небольшими ограничениями, о которых упомяну ниже), т.о. авторский софт под ней работоспособен. DSDOS содержит полный набор процедур ввода-вывода (BIOS), т.о. родной софт, написанный под DSDOS, обходится без подпрограмм ПЗУ "Монитора". :v2_dizzy_bye:
Помимо "многообразия" неплохого авторского софта, мною создан некий набор системного и прикладного ПО, которое я по мере возможности постараюсь осветить в данной теме.

Итак, перехожу непосредственно к описанию операционной системы DSDOS.
На данный момент "устаканившейся" является версия 3.5, про неё и будет дальнейшее описание.
Образ ROM-диска с DSDOS v3.5 и базовым пакетом системного ПО можно загрузить тут - http://www.denn.ru/orion/ROM_DISK.BIN


Требования к конфигурации ПРК:

Процессор___________КР580ВМ80А (Z80 со звуком через INTE)
ОЗУ_________________256 Кб (расширенная память)
ПЗУ_________________2 Кб ("Монитор-2", используется для начальной загрузки ОС с ROM-диска)
ROM- или RAM-диск___64 Кб (в варианте RAM-диска заводится дополнительный сигнал управления с порта клавиатуры для реализации режима записи)

Опционально (и очень желательно :)):
НГМД________________контроллер на КР1818ВГ93, 2 FDD, MFM, 800 Кб (по схеме из журнала РАДИО №12/1992, стр. 14-15)

*Возможна работа под эмулятором (http://denn.ru/8bit/emu_b2m/emu.rar) на IBM PC


Возможности DSDOS:

+ Поддержка файловой структуры (с точки зрения ПО) совместимой с ORDOS v2.x
+ Поддержка файла автозапуска (EXT$) при передаче управления ОС
+ Поддержка механизма пакетной обработки команд ОС
+ Поддержка ROM-диска объёмом до 64 Кб (формат ORDOS v2.x, диск «A:»)
+ Поддержка RAM-диска объёмом 120 Кб (2 и 3-я страницы расширенного ОЗУ, диск «B:»)
+ Поддержка двух накопителей НГМД (каждый по 800 Кб, диски «C:» и «D:»)
+ Быстрый доступ к файлам RAM-диска (при операциях чтения/записи перенос блоков с помощью инструкций push/pop)
+ Поддержка общего буфера обмена между программами (aka ClipBoard)
+ Возможность интегрирования в ОС ещё 4-х накопителей произвольного вида (диски E, F, G, H)
+ Сервисное меню пользователя (доступно в любых программах в момент опроса клавиатуры)
+ Возможность вызова программ из программ, минуя выход в систему (через сервисное меню пользователя)
+ Возможность подгрузки и сохранения данных, не выходя из программ (через сервисное меню пользователя)
+ Ускоренный вывод символов на экран (знакоместо 8x8 пикселей)
+ Поддержка цветного режима вывода символов
+ Поддержка расширенной кодировки ASCII (заглавные и строчные буквы)
+ Поддержка 32-х видов курсоров (а также в качестве курсора может быть задействован любой из 224-х символов основого знакогенератора)
+ Поддержка 32-х символов псевдографики (в т.ч. рамки, стрелки)
+ Поддержка двух рабочих экранов (основной и альтернативный)
+ Поддержка псевдооконного режима отображения
+ Максимальная совместимость с ОС ORDOS v2.x (кроме операций с произвольным доступом к файлу)
+ Размещение ОС полностью в дополнительной странице ОЗУ (кроме модуля обеспечивающего совместимость с ORDOS)
+ Занимает небольшой объём оперативной памяти (менее 32 Кб)


Загрузка операционной системы DSDOS

При начальной загрузке ОС DSDOS (при включении питания ПК, при полной перезагрузке системы или после “зависания”) на экран выводится меню выбора источника загрузки ОС, которое содержит два пункта: [ROM] [FDD]

http://www.denn.ru/8bit/orion/soft/dsdos/01-boot.gif

Выбор нужного пункта осуществляется при помощи клавиш: «←», «→» и «Enter». В случае выбора пункта ”ROM” загрузка ОС производится из ROM-диска. В случае выбора пункта ”FDD” производится поиск на дисководе №0 операционной системы и при успешной попытке производится её загрузка.

После успешного прохождения начального этапа загрузки в зарезервированной системной области ОЗУ делается отметка об источнике начальной загрузки ОС, а также делается отметка о том, что была произведена "холодная" загрузка. Таким образом, последующие "горячие" перезагрузки ОС (аппаратный сброс, передача управления по адресу 0F800h) не будут приводить к выводу меню выбора источника загрузки ОС.

В процессе дальнейшей загрузки ОС из ROM-диска производится проверка на наличие и простейшая проверка на исправность всех устройств, поддерживаемых ОС DSDOS (наличие файлов на ROM-диске, расширенного ОЗУ, контроллера НГМД). При этом на экран выводится соответствующая информация:

http://www.denn.ru/8bit/orion/soft/dsdos/02-boot.gif

После выполнения этапа проверки управление передаётся непосредственно ОС DSDOS.

http://www.denn.ru/8bit/orion/soft/dsdos/03-dsdos.gif

"Горячая" перезагрузка ОС производится путём аппаратного сброса или передачей управления по адресу 0F800h. При этом производится подгрузка некоторых блоков ОС из источника, определённого при начальной "холодной" загрузке (перезагрузке) и передача управления ОС DSDOS. Если по какой-либо причине компьютер "завис", то рекомендуется произвести его перезагрузку с полным обновлением всех блоков системы (в целях исключения некорректного поведения испорченных блоков системы и, как следствие, возможной порчи информации). Для этого достаточно при нажатии на кнопку аппаратного сброса удержать клавишу «РУС/ЛАТ». Если необходимо произвести полную "холодную" перезагрузку ОС DSDOS (например, для смены источника загрузки системы), то достаточно при нажатии на кнопку аппаратного сброса удержать вместе нажатыми клавиши «Ctrl» и «Shift». Аналогичный результат можно получить при одновременном нажатии клавиш «Ctrl», «Shift» и «F4» в любой момент, когда на экране присутствует мигающий курсор.

При передаче управления ОС DSDOS происходят следующие операции:

• установка знакогенератора ПЗУ "Монитор-2" в область ОЗУ пользователя по адресу из системной переменной M_FONT;
• установка полноэкранного режима отображения символов;
• если не нажата клавиша «Shift», то поиск на RAM-диске файла EXT$ (если он есть, то его загрузка и исполнение);
• инициализация режима отображения (окраска экрана, установка текущего вида курсора и, при первом запуске очистка экрана с выводом фирменной заставки ОС DSDOS);
• передача управления программе поддержки диалога с пользователем.


После первоначальной загрузки ОС DSDOS (а иногда и в случае "зависания"), необходимо выполнить некоторые команды инициализации.

Форматирование RAM-диска

Физически не удаляет файлы с диска, в начале списка файлов записывается признак конца каталога.
Выполняется командой "F", после ввода которой следует запрос подтверждения [Y/N]:

http://www.denn.ru/8bit/orion/soft/dsdos/04-fmtram.gif


Установка системной даты

В ОС DSDOS есть системная переменная, в которой содержится значение текущей даты. При "холодной" загрузке эта переменная содержит дату релиза ОС. Системная дата используется при файловых операциях для актуализации даты создания/изменений файлов.
Узнать текущую дату можно запуском утилиты DATE$ без параметров. Установить текущую дату можно вызвав эту же утилиту с параметрами "<день>.<месяц>.<год>". При корректном вводе параметров установленная дата будет повторно отображена:

http://www.denn.ru/8bit/orion/soft/dsdos/05-sysdate.gif


Запуск файлового менеджера (оболочки ОС)

Для удобства работы с файлами рекомендуется включить оболочку ОС, для этого необходимо запустить файл DC$:

http://www.denn.ru/8bit/orion/soft/dsdos/07-load_dc.gif

После запуска файлового менеджера, он создаёт на RAM-диске файл собственного автозапуска, т.о. при рестарте и выходе из программ в ОС пользователь автоматически будет попадать в оболочку:

http://www.denn.ru/8bit/orion/soft/dsdos/08-filemgr.gif

Если по какой-то причине при выходе из программы нужно игнорировать загрузку оболочки, то необходимо удерживать клавишу «Shift». Полностью выгрузить оболочку можно выполнив команду «Q» из самой оболочки.

Vladimir_S
13.10.2013, 15:41
Denn, Контроллер FDD не из Радио №5 1993г?

Denn
13.10.2013, 15:51
Denn, Контроллер FDD не из Радио №5 1993г?

из описания:


НГМД________________контроллер на КР1818ВГ93, 2 FDD, MFM, 800 Кб (по схеме из журнала РАДИО 2/93)

Vladimir_S
13.10.2013, 16:09
НГМД________________контроллер на КР1818ВГ93, 2 FDD, MFM, 800 Кб (по схеме из журнала РАДИО 2/93)
Так схема откуда? В РАДИО 2/93 схема только для РК86.
Видимо РАДИО 12/92. И ничего не менял?

Denn
13.10.2013, 16:50
Так схема откуда? В РАДИО 2/93 схема только для РК86.

Прошу прощения за дезу... Контроллер по схеме из РАДИО №12/1992, стр. 14-15

Вот его описание и схема:

http://www.denn.ru/8bit/orion/128/fdd/fdc1.jpg
http://www.denn.ru/8bit/orion/128/fdd/fdc2.jpg
http://www.denn.ru/8bit/orion/128/fdd/fdc3.jpg
http://www.denn.ru/8bit/orion/128/fdd/fdc4.jpg



И ничего не менял?

С тех прошло 20 лет! Чесное слово, не помню деталей :) Возможно как обычно были какие-то неточности, которые впоследствии были исправлены в следующих журналах. Но скорее всего заработало сразу, т.к. секаса с FDC я не помню.

У меня на той же плате контроллера собрана ещё схема интерфейса RS-232 с таймером:

http://www.denn.ru/8bit/orion/128/rs232/5351.jpg

Прямого отношения к контроллеру дисковода она не имеет, но пользуется общим с ним дешифратором адресов 0F7xxh (КР1533ИД3).

Denn
14.10.2013, 12:07
Итак, продолжим.

Система команд ОС DSDOS

Команды однобуквенные (латинские заглавные, установка по-умолчанию при загрузке ОС), вводятся сразу после промпта (имя текущего устройства и значёк ">") без пробела. Параметры команд отделяются пробелами (их кол-во может быть любым). Если используются ключи-модификаторы, то они также разделяются пробелами, предваряются символом "/" и могут следовать в произвольном порядке. Для выполнения команды, после набора всех необходимых параметров нужно нажать клавишу "ВК" (Enter).

При наборе команды доступны следующие средства редактирования:

"←" / "→" - перемещение по символам;
"УС" (Ctrl) + "←" / "→" - перемещение по словам
"TAB" - на четыре символа вперёд;
"УС" (Ctrl) + "TAB" - на восемь символов вперёд;
"⌐" (Home) - переход в начало строки;
"ПС" (End) - переход в конец строки;
"СТР" (Cls) - очистка содержимого всей строки;
"АР2" (Esc) - отмена ввода строки;
"ЗБ" (BackSpace) - удаление символа слева от курсора;
"УС" (Ctrl) + "ЗБ" (BackSpace) - удаление строки слева от курсора;
"F2" (Del) - удаление символа в позиции курсора;
"УС" (Ctrl) + "F2" - удаление строки правее курсора;
"F3" (Ins) - переключение режима вставка/замена (также изменяется вид курсора);
"↑" - восстановление содержимого строки предыдущего ввода (замещение текущих данных предыдущими);
"↓" - добавление содержимого строки предыдущего ввода в конец текущей строки (добавление предыдущих данных к текущим).

Все вышеперечисленные возможности редактирования доступны в любых программах написанных под ОС DSDOS и использующих строчный ввод данных.

Также всегда, когда на экране присутствует мигающий курсор модуля ввода-вывода DSDOS, работают следующие команды:

"РУС/ЛАТ" (Caps Lock) - переключение раскладки (Лат/Рус);
"РУС/ЛАТ" (Caps Lock) + "Shift" - переключение регистра (Заглавные/Строчные);
"Shift" + символ - ввод символа в альтернативном регистре;
"Shift" + "F1" - вызов сервисного меню пользователя (также доступно при опросе клавиатуры через п/п ПЗУ "Монитор");
"Ctrl" + "Shift" + "F4" - "холодная" перезагрузка ПРК.


*

Denn
14.10.2013, 14:01
Основные команды ОС DSDOS

1. Вывод краткого описания команд DSDOS

A>H

http://www.denn.ru/8bit/orion/soft/dsdos/06-help.gif


2. Вывод информации о разработчике и номере версии DSDOS

A>V


3. Выбор (смена) текущего устройства

A>{drive name}:

При успешном исполнении команды в следующей строке в промпте системы появляется выбранное устройство (имя устройства), которое становится текущим. В противном случае появляется сообщение об ошибке.
Возможны следующие имена устройств:
A: ROM-диск
B: RAM-диск
C: дисковод №0
D: дисковод №1
E: зарезервировано
F: зарезервировано
G: зарезервировано
H: зарезервировано


4. Форматирование RAM-диска (устройства "B:")

A>F

При вводе команды появляется запрос на подтверждение [Y/N], т. к. после выполнения команды происходит полное уничтожение всех файлов на RAM-диске. Команда применяется в случае возникновения сбоев на RAM-диске или для быстрого освобождения от большого количества ненужных файлов.
Данная команда форматирует только RAM-диск (устройство "B:"), независимо от выбранного текущего устройства!


5. Вывод каталога устройства

A>D[drive name]

При вводе команды без параметра выводится каталог текущего устройства (в данном примере устройства "А"); аналогичный результат получается при введении пустой строки (нажатие клавиши "Enter" без ввода какой-либо команды).
Записи каталога выводятся в порядке следования файлов на диске (без сортировки по алфавиту) и содержат следующую информацию:

FileName Addr DecLong/HexLong{P} (Page) Date

где

FileName - имя файла (1..8 символов)
Addr - адрес посадки файла в шестнадцатиричном виде
DecLong - длина файла в десятичном виде
HexLong - длина файла в шестнадцатиричном виде
P - при включённом атрибуте защиты отображается символ "*"
Page - номер рабочей страницы ОЗУ
Date - дата создания/модификации файла

Под списком файлов отображается общее их количество.


6. Вывод информации об устройстве

A>?[drive name]

При вводе команды без параметра выводится информация о текущем устройстве (в данном примере - устройстве "А"). Отображается следующая информация:

- полный объём дискового пространства (в Кбайтах)
- объём, занимаемый файлами (в Кбайтах)
- свободный объём дискового пространства (в Кбайтах)

7. Загрузка (исполнение) файла

A>L {full file name} [additional information]

Под {full file name} понимается полное имя файла, которое может состоять либо просто из одного имени файла, либо из указания имени устройства и имени файла (разделяются двоеточием, например: A:PROG.CFG). Под [additional information] понимается любой набор символов, отделённых от имени файла пробелом (эта информация бывает необходима для указания параметров при запуске некоторых программ).
Файл загружается в память и обрабатывается в соответствии со следующими правилами:

* если файл имеет в имени символ "$", то он является командным (исполняемым) и после считывания в память ему передаётся управление (после завершения работы файла управление передаётся обратно ОС DSDOS);
* если файл имеет в имени символ "%", то он является пакетным, т. е. содержит список команд DSDOS. После считывания его содержимое переносится в буфер пакетных файлов DSDOS и далее происходит последовательная построчная обработка команд;
* если файл имеет в имени последовательность символов ".FT", то он распознаётся системой как знакогенератор ОС DSDOS и его загрузка производится в рабочую страницу памяти модуля CONIO по адресу, определённому переменной M_FNTS;
* если файл имеет в имени последовательность символов ".ZG", то он распознаётся системой как знакогенератор стандартной процедуры вывода символов ПЗУ "Монитора" (процедура 0F809h) и его загрузка в память производится по адресу начала стандартного знакогенератора (адрес начала определяется переменной монитора BegnZG);
* Во всех остальных случаях загрузка файла в память производится по адресу, указанному в заголовке файла и управление передаётся обратно ОС DSDOS.

Примечание: Вместо символа "L" можно набирать "_" (пробел).


8. Вызов файла

A>B {full file name} [additional information]

Команда аналогична предыдущей. Отличия состоят в том, что после обработки исполняемого файла выход происходит не в ОС DSDOS, а в программу, которая давала команду "B". Данную команду необходимо использовать при пакетной обработке команд. В остальном работа команды аналогична работе команды "L".


9. Загрузка файла в память

A>I {full file name} [begin address]

При успешном выполнении команды осуществляется чтение файла в память и далее управление передаётся ОС DSDOS не зависимо от имени файла, т.е. не производится распознавание командных, пакетных и прочих файлов. Параметр [begin address] указывает начальный адрес загрузки файла, при отсутствии параметра загрузка производится по адресу, указанному в заголовке файла. При чтении файла командой "I" производится проверка на превышение верхней границы памяти пользователя и если файл "залезает" в область ОЗУ, находящуюся выше этой границы, то выводится сообщение об ошибке "Out of memory".


10. Сохранение участка памяти в виде файла

B>S {full file name} {begin address},{long} [/P]

Параметр {begin address} указывает адрес начала, а параметр {long} указывает длину сохраняемого участка ОЗУ. Необязательный параметр [/P] указывает на установку атрибута защиты, записываемого файла от удаления. При успешном выполнении
команды осуществляется сохранение файла на текущем (если параметр {full file name} состоит только из имени файла) устройстве или на устройстве, заданном в параметре {full file name} (отделяется двоеточием, например: B:TEXT.TXT).


11. Переименование файла

B>R {source file name} {target file name}

Параметр {source file name} указывает имя файла, который подлежит переименованию. Параметр {target file name} указывает новое имя файла. Оба параметра не допускают указание полного имени файла т. к. переименование возможно только на текущем устройстве!


12. Копирование файла

B>C {source full file name} [target drive name]:[target file name]

Параметр {source full file name} указывает имя файла, который подлежит копированию. Необязательный параметр [target drive name] указывает имя устройства, куда производится копирование (в случае отсутствия параметра копирование производится на тоже устройство, с которого копируется файл). Необязательный параметр [target file name] указывает имя скопированного файла (в случае отсутствия
параметра файл копируется со своим именем).


13. Удаление файла

B>E {full file name}

Параметр {full file name} указывает полное имя файла, которое может состоять либо просто из одного имени файла, либо из указания имени устройства и имени файла (разделяются двоеточием, например: A:PROG.CFG).


14. Просмотр файла

A>T {full file name} [/O]

При успешном выполнении команды на экран выводится содержимое файла в текстовом виде в соответствии с расширенной кодировкой ASCII, принятой в ОС DSDOS. В варианте с ключом [/О] содержимое файла выводится в соответствии с кодировкой ASCII, принятой в ОС ORDOS v2.x. Коды со значением меньше 20h (ПРОБЕЛ) не отображаются и пропускаются.
Для отмены вывода информации нужно нажать клавишу "АР2" (Esc), а для приостановки - любую другую.


15. Постановка/снятие атрибута защиты файла от удаления

B>P {full file name}

Параметр {full file name} указывает полное имя файла, которое может состоять либо просто из одного имени файла, либо из указания имени устройства и имени файла (разделяются двоеточием, например: A:PROG.CFG). Выполнение команды происходит по принципу триггера, т.е. если атрибут не установлен, то он устанавливается, а если уже установлен, то - снимается.


16. Изменение адреса посадки файла

B>A {full file name} {new begin address}

Параметр {full file name} указывает полное имя файла, которое может состоять либо просто из одного имени файла, либо из указания имени устройства и имени файла (разделяются двоеточием, например: A:PROG.CFG). Параметр {new begin address} указывает новый адрес посадки файла. После успешного выполнения команды для справки выводится прежний адрес посадки.


17. Просмотр/изменение адреса верхней границы ОЗУ пользователя

A>M [new user memory address]

Без параметров команда выводит на экран текущее значение адреса верхней границы ОЗУ пользователя. При задании параметра [new user memory address] команда производит установку адреса верхней границы ОЗУ пользователя и отображение нового значения. Адрес задаётся в шестнадцатиричном виде.


18. Вызов подпрограммы по адресу

A>G {address}

При правильном вызове команды происходит передача управления по указанному адресу (параметр {address}). Выход из вызываемой подпрограммы происходит в ОС DSDOS. Адрес задаётся в шестнадцатиричном виде.


19. Выход из ОС DSDOS (полная перезагрузка ОС DSDOS)

A>Q

При вводе команды появляется запрос на подтверждение [Y/N] и в случае подтверждения происходит полная перезагрузка ОС DSDOS, а именно производится установка признака "холодной" загрузки ОС DSDOS и осуществляется переход по адресу 0F800h, что приводит к полной перезагрузке компьютера. Аналогичный результат, но без запроса на подтверждение можно получить одновременным нажатием клавиш "Ctrl+Shift+F4" в любой момент, когда на экране присутствует мигающий курсор модуля ввода-вывода ОС DSDOS.

Denn
14.10.2013, 14:32
Возможные ошибки при выполнении команд ОС DSDOS

01h - Error I/O DIR: <d>*
Ошибка при выполнении операции чтения/записи каталога

02h - Out of DIR: <d>
Переполнение каталога устройства
(превышение максимально-возможного для данного устройства количества файлов)

03h - Out of disk: <d>
При записи: переполнение памяти устройства;
При чтении: нарушение структуры данных файла

04h - Not found file: <filename>*
Файл не найден

05h - Error I/O file: <filename>
Ошибка при выполнении операции чтения/записи "тела" файла

06h - Read only file: <filename>
Файл доступен только для чтения (установлен атрибут защиты)

07h - Replace name: <filename>
Повторное имя файла (попытка переименовать имя файла в имя, уже имеющееся на данном устройстве)

08h - Replace file: <filename>
Повторное имя файла (попытка записи или копирования файла с именем, уже имеющимся на данном устройстве)

09h - Out of memory
Считываемый файл выходит за верхнюю границу ОЗУ пользователя и может испортить область системы и/или резидентных программ

0Ah - No access to drive: <d>
Попытка выбора недоступного устройства
(доступ устройств определяется при конфигурации системы)

0Bh - Invalid drive: <d>
Попытка выбора несуществующего устройства
(разрешены устройства: A, B, C, D, E, F, G, H)

0Ch - Incorrect call batch
Некорректный вызов пакетного файла (попытка вызова из пакетного файла или запрещён вызов программно)

1Bh - Terminated!
Выполнение операции прервано нажатием клавиши "АР2" (Esc)

40h - Write protect drive: <d>
Устройство защищено от выполнения операций записи/удаления

80h - Not ready drive: <d>
Устройство не готово к записи/чтению данных (например: не закрыт дисковод)

FFh - Invalid command
Попытка выполнить несуществующую в данной версии DSDOS команду
__________________________________________________ __________________________________________________ _____________
* <d> - символ имени устройства (A, B, C, ...), при операции с которым произошла ошибка
* <filename> - имя файла, при операции с которым произошла ошибка


Пакетная обработка команд ОС DSDOS

В DSDOS есть возможность выполнять команды ОС в автоматическом режиме (пакетная обработка). Для её реализации необходимо в любом редакторе создать текстовый файл со списком команд ОС DSDOS, имя этого файла должно содержать символ "%". При запуске такого файла командой "L", ОС DSDOS будет поочерёдно исполнять все команды от начала списка до конца. Команды должны быть указаны полностью, со всеми необходимыми параметрами их вызова. Неверно записанная команда приведёт к выводу сообщения об ошибке, и будет продолжено выполнение остальных команд в списке.
Т.о. если результат выполнения какой-либо команды зависит от предыдущей в списке, то необходимо заранее принять меры по контролю возможных ошибочных ситуаций.
Также нужно понимать, что пакетный файл может быть запущен на исполнение с любого устройства, которое для пакета будет текущим диском, поэтому если используются команды без явного указания имён дисков, то следует принять меры по избежанию некорректного исполнения пакета.

При обработке пакетных файлов есть некоторые отличия и некоторые дополнения в системе команд.
Не обрабатываются следующие команды ОС DSDOS: "?", "T" и "ВК" (Enter).

Инструкция "?" вместо вывода информации о текущем диске, используется для вывода текстовых сообщений в процессе исполнения пакетного файла. Т.о. любая последовательность символов после "?" будет немедленно выведена на экран при обработке данной строки, а в конце будет выполнен перевод строки.
Введённая пустая строка не приведёт к выводу каталога текущего диска, а просто будет игнорирована при обработке. Для вывода на экран кода перевода строки нужно указать строку из одного символа "?".
Команда "T" просто игнорируется, это связано с тем, что она для своей работы использует ту же область, что и буфер обработчика пакетных файлов.
Для указания комментариев используется инструкция ";", после которой может следовать любая последовательность символов до конца строки.
Для приостановки исполнения используется инструкция "W" (работает только при пакетной обработке!), на экран выводится мигающий курсор и по нажатию любой клавиши продолжается дальнейшее исполнение команд.
Прервать исполнение команд можно нажатием клавиши "АР2" (Esc), проверка на нажатие которой производится при интерпретации очередной команды.
Для вызова запускаемых программ необходимо пользоваться командой "B" вместо команды "L", в этом случае при выходе из программы будет продолжено выполнение остальных команд пакета.
Во время обработки команд пакетного файла запрещается вызов других пакетных файлов, т.е. нельзя вызывать пакетный файл из пакетного!

Denn
15.10.2013, 18:02
Сервисное меню пользователя ОС DSDOS

В DSDOS существует возможность пользоваться некоторыми средствами ОС прямо из программ пользователя. Эта возможность реализована в виде сервисного меню, которое вызывается одновременным нажатием клавиш «Shift+F1» в любой момент, когда на экране присутствует мигающий курсор. Меню выводится в самой верхней строке экрана, при это затёртая информация сохраняется во временный буфер и при выходе из меню восстанавливается. Для отмены меню необходимо нажать клавишу «АР2» (Esc), выбор нужного пункта осуществляется клавишами «←», «→» и «ВК» (Enter).

http://www.denn.ru/8bit/orion/soft/dsdos/09-servmnu.gif


Меню содержит следующие опции:

Load - загрузка файла
Save - сохранение участка памяти в файл
Code - ввод кода ASCII (00h…FFh)
View - просмотр альтернативного экрана
Curs - выбор вида курсора
Exit - выход в ОС DSDOS

Этот небольшой набор опций позволяет облегчить процесс отладки программ, а также упрощает адаптацию программ не рассчитанных на работу в ОС DSDOS.

1. Загрузка файла (Load)
Данная опция позволяет, находясь в программе пользователя производить загрузку файлов данных, знакогенераторов, а также производить запуск других программ пользователя. Опция аналогична команде «L» ОС DSDOS с тем отличием, что запрещена обработка пакетных файлов и саму команду вводить не нужно - сразу вводится имя файла (можно с указанием диска, через двоеточие) и, если необходимо, параметры его вызова.

2. Сохранение участка памяти в файл (Save)
Данная опция позволяет, находясь в программе пользователя, производить сохранение участка памяти в файл. В том числе позволяет без использования специальных резидентных программ создавать "снимок" экрана. Опция аналогична команде «S» ОС DSDOS, только саму команду уже вводить не нужно - сразу вводятся параметры: имя файла (можно с указанием диска, через двоеточие), адрес начала, длина.

3. Ввод кода ASCII (Code)
Данная опция позволяет в любой момент, когда на экране присутствует мигающий курсор, вводить любой код ASCII путём набора его шестнадцатиричного значения (00h…FFh). Т.о. возможен ввод абсолютно любых символов, в т.ч. тех, которых нет на клавиатуре (например, рамок, стрелок и т.п.).

4. Просмотр альтернативного экрана (View)
Данная опция позволяет в любой момент просмотреть содержимое альтернативного экрана. Альтернативным экраном для "основного" считается "теневой" и наоборот. "Теневой" экран используют некоторые программы, чтобы не изменять содержимого "основного" экрана.

5. Выбор вида курсора (Curs)
Данная опция позволяет в любой момент изменить вид курсора процедуры ввода-вывода ОС DSDOS. В системе зарезервировано 32 вида курсоров, плюс 224 символа основного знакогенератора ОС DSDOS, которые тоже могут быть задействованы в качестве курсора.

6. Выход в ОС DSDOS (Exit)
Данная опция позволяет в любой момент, когда на экране присутствует мигающий курсор, осуществить выход из программы пользователя в ОС DSDOS. Опция необходима для программ, не имеющих выхода или делающими выход некорректно.


*

Denn
16.10.2013, 15:42
Оболочка ОС DSDOS (файл-менеджер)

DSDOS-Commander (далее - DC) представляет собой оболочку ОС DSDOS и предназначен для значительного облегчения выполнения операций с файлами. Интерфейс программы построен по принципу аналогичных программ (NC$ - для ПК "Орион-128", Norton Commander - для IBM PC и т.д.). После запуска программа создает на устройстве начальной загрузки ОС DSDOS (по-умолчанию диск «B:») файл самозапуска (EXT$) оболочки при передаче управления ОС (например после завершения программы пользователя или после горячей перезагрузки ОС), причём автозагрузчик "помнит" с какого устройства был запущен DC и все последующие самозапуски будут производиться именно с этого устройства (обычно диск «A:»).

http://www.denn.ru/8bit/orion/soft/dsdos/08-filemgr.gif

При чтении/запуске файла или при выполнении какой-либо команды ОС DSDOS оболочка сохраняет на том же устройстве (где и файл самозапуска) свой конфигурационный файл «DC.INI». Файл конфигурации содержит информацию о панелях: выбранные диски, положения указателей, цвет, формат вывода размеров файлов; образец шаблона выделения файлов; последние данные, вводимые в командную строку из-под оболочки. Для своей работы DC использует область ОЗУ пользователя (0-я страница):

9000..97FFh - каталог диска левой панели
9800..9FFFh - каталог диска правой панели
A000..B27Fh - собственно оболочка DC

При выполнении команд ОС DSDOS и при запуске программ пользователя DC полностью освобождает ОЗУ пользователя, но также необходимо помнить, что при выходе в ОС область 9000..B27Fh будет затерта оболочкой, т.е. не следует располагать в этой области каких-либо драйверов или резидентных программ. Если же, всё-таки необходимо использовать вышеуказанную область ОЗУ под драйвер/резидент, то необходимо завершить работу с оболочкой DC (команда «Q») и далее осуществлять диалог с DSDOS штатными средствами ОС через интерфейс командной строки (см. подсказку по команде «H» ОС DSDOS). При завершении работы с DC, автоматически удаляются файлы «EXT$» и «DC.INI» с соответствующего диска и пользователь попадает в диалог процессора команд ОС DSDOS.
В DC имеется также возможность исполнения одно буквенных команд ОС DSDOS через встроенные средства поддержки командной строки. для перехода в командную строку DC необходимо нажать клавишу «СТР», причём, если при этом удерживать клавишу «Ctrl», то в командную строку будет вставлено имя текущего выбранного файла. При выполнении всех команд ОС DSDOS, не связанных с запуском файлов на исполнение, возврат осуществляется в диалог командного процессора ОС, и для возврата в оболочку необходимо нажать клавишу «F4» или «АР2» (Esc). Возврат из программ пользователя всегда осуществляется в оболочку. Если необходимо запретить выход в оболочку (например требуется посмотреть результаты работы утилиты), то при выходе из утилиты/программы необходимо удержать клавишу «Shift» до появления промпта ОС DSDOS. Возврат в оболочку в этом случае делается аналогично - по «F4» или «АР2» (Esc). При редактировании командной строки действуют все стандартные средства редактирования строк ОС DSDOS.


Операции выбора дисков и файлов

Для выбора нужного диска необходимо нажать соответственно для левой панели клавишу «F1» или «1», а для правой панели - клавишу «F2» или «2». В результате на соответствующей панели появится окно диалога выбора диска.

http://www.denn.ru/8bit/orion/soft/dsdos/10-dc_drvs.gif

Далее необходимо нажать на клавишу с буквой нужного диска или нажать «АР2» (Esc) в случае отказа. Нажатия на клавиши с буквами несуществующих в системе дисков будут игнорироваться. Если произошла ошибка чтения каталога выбранного диска, то будет выведено сообщение о причине ошибки и пользователь снова попадет в диалог выбора диска, где можно повторить процедуру чтения каталога, нажав клавишу «ВК» (Enter), либо выбрать другой диск, либо отказаться от выбора, нажав клавишу «АР2» (Esc). Для обновления каталога текущей панели необходимо нажать клавишу «D» или комбинацию клавиш: Ctrl+«R». При нажатии на клавишу «N» будет произведено обновление каталогов обеих панелей.
Для выбора текущей панели служат клавиши: ←, →, ТАБ - они все осуществляют активизацию противоположенной панели. Панели можно поменять местами, нажав: Ctrl+«W».

Для выбора файла на текущей панели существуют следующие команды:

«↓» / «↑» - переход к следующему / предыдущему файлу;
«Home» / «ПС» - в начало / конец текущей страницы;
Ctrl + «↓» / «↑» - на страницу вверх / вниз;
Ctrl + «Home» / «ПС» - в начало / конец всего списка.

По нажатию клавиши «F» осуществляет изменение формата отображения длин файлов (шестнадцатеричный / десятичный) на обеих панелях.

http://www.denn.ru/8bit/orion/soft/dsdos/11-dc_fmtf.gif

Нажав клавишу «?» можно получить информацию о текущем диске аналогично соответствующей команде ОС DSDOS (занято/свободно/всего места на диске), а также адрес верхней границы ОЗУ пользователя, размер и код типа данных в буфере обмена.

http://www.denn.ru/8bit/orion/soft/dsdos/12-dc_info.gif


Операции загрузки файлов

Загрузка файлов в ОЗУ, а также запуск на исполнение командных файлов осуществляется нажатием клавиши «ВК» (Enter) на выбранном файле. При этом механизм загрузки/запуска файлов полностью аналогичен команде «L» ОС DSDOS. Для запуска программы с параметрами необходимо нажать «L» или Ctrl+«Enter», при этом под панелями откроется диалог редактирования командной строки со вставленной командой:

http://www.denn.ru/8bit/orion/soft/dsdos/22-dc_load.gif

Далее пользователь может ввести параметры запуска и нажать клавишу «Enter», или отказаться и вернуться к обзору панелей, нажав клавишу «АР2» (Esc) или «F4». Загрузка файлов в ОЗУ пользователя по конкретному адресу осуществляется нажатием клавиши «I» на выбранном файле. Далее механизм аналогичен вышеописанному для команды запуска с параметрами, только в качестве параметра необходимо указать адрес загрузки файла в ОЗУ. Команда полностью аналогична соответствующей команде ОС DSDOS.


Операции выделения файлов в группу, шаблоны

Некоторые операции (копирование, удаление) могут быть выполнены не только над отдельным файлом, но и над группой файлов. Далее рассмотрены команды выделения файлов в группу:

«*» - выделение/снятие выделения текущего файла панели;
«_» (пробел) – выделение/снятие выделения текущего файла панели со смещением указателя вниз на одну позицию;
Ctrl + «.» - инвертировать выделение файлов;
«S» (+) - выделение файлов по шаблону;
«U» (-) - отмена выделения файлов.

Выделенный файл на панели помечается слева символом «>».

http://www.denn.ru/8bit/orion/soft/dsdos/13-dc_hdlt.gif

Выделение файлов снимается после обновления содержимого панели(ей), после выполнения операций копирования и удаления файлов, а также после выхода из DC (запуска программ, сброс ПРК).

При выборе выделения по шаблону (команда «S») появляется окно ввода/редактирования шаблона по которому будет производиться выделение файлов, причем в строку будет подставлен последний введенный шаблон (по-умолчанию «*»), который можно отредактировать стандартными средствами редактирования строк ОС DSDOS.

http://www.denn.ru/8bit/orion/soft/dsdos/14-dc_sel.gif

Нельзя ввести в качестве шаблона пустую строку. При вводе допустимы любые комбинации символов, причём символы «*», «?» выполняют специальные функции:

«*» - означает любое кол-во любых символов;
«?» - означает один любой символ.

Например: шаблон «*.TXT» выделит все текстовые файлы на текущей панели, а шаблон «FL??.TMP» выделит все файлы с именами начинающимися на "FL", с расширением ".TMP" и имеющие в середине любые два символа.


Копирование файлов

Для копирования файла необходимо выбрать его на какой-либо панели и нажать клавишу «C» («F5» или «5»). Далее откроется окно диалога, где пользователю будут предложены диск противоположенной панели и имя файла назначения, разделенные символом «:».

http://www.denn.ru/8bit/orion/soft/dsdos/15-dc_copy.gif

При необходимости пользователь может их изменить, пользуясь стандартными средствами редактирования строк ОС DSDOS или принять без изменений, сразу нажав «ВК» (Enter). Если же на текущей панели есть выделенные файлы, то будет произведено их немедленное копирование на диск противоположенной панели. В процессе копирования в окне будет отображаться ход событий (имена копируемых файлов, их номер в очереди).

http://www.denn.ru/8bit/orion/soft/dsdos/16-dc_copy.gif

Если в процессе копирования на диске назначения будет обнаружен файл с аналогичным именем, то пользователю будет предложено: записать поверх «Yes», пропустить «No», а также произвести аналогичные действия со всеми остальными повторяющимися файлами без дополнительного подтверждения («for All» = «Yes», «Skip for all» = «No»). Заглавными выделены буквы, нажатие которых инициирует соответствующие операции.

http://www.denn.ru/8bit/orion/soft/dsdos/17-dc_copy.gif

Пользователь также может нажать клавишу «АР2» (Esc) для отмены дальнейшего копирования. Если при выборе режима перезаписи поверх встретится файл, защищенный от удаления, то пользователю будет предложено подтвердить перезапись, подтвердить для всех последующих, пропустить, пропустить для всех последующих или прервать выполнение копирования.

Примечание: оболочка DC не позволяет копировать файлы больших размеров (более 9000h), что связано с ограничением буфера копирования из-за присутствия «тела» DC в основной странице ОЗУ. Для копирования больших файлов надо использовать команду «C» ОС DSDOS. Если в процессе копирования группы файлов встретится файл, превышающий вышеуказанный размер, то пользователю будет предложено либо пропустить этот файл, либо прервать процесс копирования.


+++ продолжение на следующей странице +++

Denn
16.10.2013, 15:42
Оболочка ОС DSDOS (продолжение)


Удаление файлов

Для удаления файла необходимо выбрать его на какой-либо панели и нажать клавишу «E» («8»). Далее откроется окно диалога подтверждения удаления [Y/N]. Если на текущей панели имеются выделенные файлы, то будет вызвано окно диалога подтверждения удаления именно этих файлов, где будет указано их количество:

http://www.denn.ru/8bit/orion/soft/dsdos/18-dc_eras.gif

Команда позволяет удалять защищенные от удаления файлы с дополнительным подтверждением (для текущего файла, а также для всех последующих в группе):

http://www.denn.ru/8bit/orion/soft/dsdos/19-dc_eras.gif


Постановка/снятие защиты файлов

Для манипулирования атрибутом защиты файла в DC существует команда «P», которая работает по принципу триггера - один раз ставит, другой раз снимает защиту файла. Команда работает только с одним текущим файлом, т.е. игнорируется выделение файлов в группу. При выполнении данной команды производится обновление содержимого текущей панели, а, следовательно, снимается выделение файлов, если оно имело место быть. При попытке изменения атрибута защиты файла на диске, защищенном от записи, будет выведено соответствующее предупреждение и пользователю будет предложено либо повторить команду, либо отказаться:

http://www.denn.ru/8bit/orion/soft/dsdos/20-dc_prof.gif


Переименование файла

Для переименования текущего выбранного файла служит команда «R» («6»). При выборе этой опции пользователь попадает в окно диалога, где показывается имя исходного файла и пустая строка, куда необходимо ввести новое имя.

http://www.denn.ru/8bit/orion/soft/dsdos/21-dc_renm.gif

Для удобства, DC автоматически подставляет в предысторию второй строки исходное имя файла, и при необходимости его можно "вспомнить", нажав клавишу «↑», а затем отредактировать. После ввода/редактирования нового имени файла необходимо нажать клавишу «ВК» (Enter). Переименование файла возможно только на текущем диске, данная опция не производит переноса файла на другой диск! При наличии защиты от записи на текущем диске - развитие событий аналогично команде «P».


Просмотр содержимого файла

При нажатии клавиши «T» формируется командная строка с соответствующей командой ОС DSDOS, а в качестве параметра подставляется имя текущего выбранного файла.

http://www.denn.ru/8bit/orion/soft/dsdos/23-dc_type.gif

Далее пользователь может либо нажать «ВК» (Enter), либо ввести ключ «/O», либо отменить команду нажатием «АР2» (Esc). Подробнее - см. описание команды «T» ОС DSDOS.

Более "продвинутым" вариантом для просмотра содержимого файлов является вызов внешней утилиты DCVIEW$, который осуществляется из DC нажатием клавиши «F3» («3») на выбранном файле:

http://www.denn.ru/8bit/orion/soft/dsdos/24-dc_view.gif

DCVIEW позволяет корректно отображать текстовую информацию в различных кодировках (DSDOS / ORDOS / TRDOS / MSDOS / WINDOWS, выбирается нажатием соответствующей клавиши, по-умолчанию выбрана кодировка DSDOS), а также в виде шестнадцатиричного дампа (клавиша «H»):

http://www.denn.ru/8bit/orion/soft/dsdos/25-dc_view.gif

Если текст или дамп целиком не помещается на экране, то возможна навигация с помощью клавиш, указанных внизу в подсказке.

В режиме просмотра шестнадцатиричного дампа информация выводится блоками по 256 байт, также отображаются контрольные суммы текущего блока и всего файла. Параметр «Offset» показывает адрес смещения текущего блока от начала файла, а параметр «Real address» - физический адрес блока с учётом адреса "посадки" файла.

Выход из просмотрщика - «АР2» (Esc) или «F4».

Denn
18.10.2013, 13:55
Форматирование гибких магнитных дисков

Для форматирования дискет в ОС DSDOS используется внешняя системная утилита - FORMAT$.
Вызов утилиты без параметров или с неверно заданными параметрами выводит справку о её использовании:

http://www.denn.ru/8bit/orion/soft/dsdos/30-format.gif

В качестве параметров следует ввести имя форматируемого диска («C:» или «D:»), а также через пробел необязательный ключ-модификатор:

«/F» - только форматирование (без проверки);
«/V» - только проверка (без форматирования);
«/Q» - быстрое форматирование (только очистка каталога файлов).

Без ключей утилита производит полное форматирование указанного диска с проверкой.
Разметка диска - в соответствии со стандартом принятым в ОС SPDOS: две стороны, 80 дорожек, по 5 секторов на дорожку, каждый объёмом 1024 байта.
В процессе форматирования на экран выводится информация о номере текущей форматируемой дорожки, а также о возможных ошибках (с указанием сбойных секторов). После форматирования выводится информация об общем кол-ве успешно отформатированных секторов и кол-ве секторов с ошибками.
В режиме "только проверка" возможна проверка дискет с другой разметкой, т.к. для успешного прохождения проверки достаточно ответа от контроллера FDD о успешном прочтении сектора.

Denn
21.10.2013, 18:45
Информация по программированию в среде ОС DSDOS

Операционная система DSDOS состоит из пяти основных модулей: BIOS, KERN, CCP, CONIO и BASE.FT, располагаемых в дополнительной странице ОЗУ №1, и одного необязательного модуля обеспечения работоспособности программ, написанных под ОС ORDOS v2.x, располагаемого в основной странице ОЗУ (занимает небольшую область пользователя BE00h…BFFFh). Таким образом, ОС DSDOS предоставляет для программ пользователя практически всё ОЗУ основной страницы, а также участки ОЗУ дополнительной страницы №1 (7000h…77FFh, 8000h…AFFFh, а при отказе от общего буфера обмена - и B000h…BFFFh), что позволяет программам эффективно использовать ресурсы ПРК "Орион-128". Распределение памяти дополнительной страницы ОЗУ №1 при работе ОС DSDOS приведено тут (http://www.denn.ru/orion/dsdos/memalloc.doc).

Назначение модулей ОС DSDOS

BIOS – базовой модуль файловой системы;
KERN – содержит таблицу переходов и процедуры BIOS, работающие в непереключаемой области ОЗУ;
CCP – модуль процессора команд ОС DSDOS и поддержки командной строки;
CONIO – модуль процедур консольного ввода-вывода;
BASE.FT – модуль набора образов символов расширенного знакогенератора ОС DSDOS;
ORDOS – модуль поддержки программ, предназначенных для работы в ОС ORDOS v2.x.

Модуль ORDOS не присутствует в виде файла в каталоге диска "A:", он находится в составе загрузчика ОС DSDOS, расположенного в первых 2 Кб ROM-диска.
Для программиста представляют интерес модули BIOS, CCP и CONIO. Далее приводится подробное их описание.


Модуль BIOS

Основой ОС DSDOS является модуль BIOS, который содержит набор основных процедур поддержки файловой структуры, НГМД, ROM- и RAM-дисков, а также организацию общего буфера обмена между программами (ClipBoard) и некоторые другие системные функции. Для работы программ пользователя с файлами в среде ОС DSDOS необходимо использовать процедуры BIOS. Полный список процедур, доступных для пользователя приведён тут (http://www.denn.ru/8bit/orion/soft/dsdos/bios.doc).
Обращение к процедурам BIOS из программ пользователя, работающих в основной странице ОЗУ, производится через универсальную точку входа, расположенную в непереключаемой области системного ОЗУ (модуль KERN) по адресу 0F000h. Программы пользователя, работающие в дополнительной странице ОЗУ №1 (страница размещения ОС DSDOS), должны обращаться к процедурам BIOS по адресу 4000h. Вызов необходимой процедуры осуществляется занесением в аккумулятор кода процедуры (см. таблицы 1-3 (http://www.denn.ru/8bit/orion/soft/dsdos/bios.doc)), а в остальные регистры МП необходимых данных, после чего производится CALL–вызов процедуры BIOS. Результаты работы процедур возвращаются в соответствующих регистрах МП. При вызове процедуры BIOS необходимо помнить, что содержимое регистров МП, не использующихся в данной процедуре, не изменяется, что позволяет обойтись без лишних команд PUSH, POP и таким образом делать более "экономичный" программный код.


Модуль CCP

Модуль процессора команд CCP осуществляет поддержку командной строки и диалога с пользователем на уровне однобуквенных команд, описанных тут (http://zx.pk.ru/showpost.php?p=634843&postcount=7). Программам пользователя предоставляется возможность обращения к средствам CCP. Для этого необходимо занести в буфер командной строки (адрес начала буфера 0F330h, максимальная длина - 80 байт) символьную строку требуемой команды (признаком конца строки должен быть байт с кодом < 20h) и произвести вызов процедуры по адресу 0F003h. Результат работы процессора команд считается успешным, если будет возвращён сброшенный признак переноса (флаг C микропроцессора), при этом значение аккумулятора будет равно 00h, в противном случае признак переноса будет установлен, а аккумулятор будет содержать код ошибки (www.denn.ru/orion/dsdos/errors.doc). Программа пользователя может осуществить вывод сообщения об ошибке, обратившись к процедуре обработки ошибок ОС DSDOS по адресу 0F006h с кодом ошибки в аккумуляторе.


Модуль CONIO

Операционная система DSDOS имеет собственные процедуры поддержки клавиатуры и вывода символов на экран, которые обладают более мощными возможностями, чем аналогичные стандартные процедуры ПЗУ "Монитор-2".
Процедура ввода символа с клавиатуры (аналогичная процедура ПЗУ "Монитор-2" - 0F803h) позволяет осуществлять переключение регистра символов и язык (РУС/ЛАТ), а также позволяет в любой момент, когда на экране присутствует мигающий курсор, активизировать "Сервисное меню пользователя" и осуществлять немедленную перезагрузку компьютера. Также данная процедура, при её вызове осуществляет коррекцию текущего состояния индикатора "РУС/ЛАТ", которое могло быть изменено например вышеупомянутой подпрограммой ПЗУ "Монитор-2". Очень полезной для многих программ пользователя может оказаться процедура ввода строки символов в буфер, которая предоставляет мощные средства редактирования строки.
Процедура вывода символа на экран (аналогичная процедура ПЗУ "Монитор-2" - 0F809h) позволяет осуществлять ускоренный вывод символов расширенной кодировки ASCII:

http://www.denn.ru/8bit/orion/soft/dsdos/fonts.gif

Причём вывод символов может быть цветной, или монохромный, и осуществляться как в полноэкранном, так и в оконном режиме. Процедура также имеет расширенную систему управляющих кодов (http://www.denn.ru/orion/dsdos/ext-ascii.doc), которые позволяют осуществлять более гибкий вывод информации на экран простыми программными средствами, например, с помощью процедуры вывода сообщений. Расширенный набор символов предоставляет пользователю большие возможности по оформлению своих программ.
Модуль CONIO имеет большой набор процедур по конфигурированию ввода-вывода информации.
Полный список процедур, доступных для пользователя приведён тут (http://www.denn.ru/8bit/orion/soft/dsdos/conio.doc).
Обращение к процедурам CONIO из программ пользователя, работающих в основной странице ОЗУ, производится через универсальную точку входа, расположенную в непереключаемой области системного ОЗУ (модуль KERN) по адресу 0F000h. Программы пользователя, работающие в дополнительной странице ОЗУ №1 (страница размещения ОС DSDOS), должны обращаться к процедурам CONIO по адресу 6000h. Вызов необходимой процедуры осуществляется занесением в аккумулятор кода процедуры, а в остальные регистры МП необходимых данных, после чего производится CALL–вызов процедуры CONIO. Результаты работы процедур возвращаются в соответствующих регистрах МП.

↓↓↓

Denn
31.10.2013, 15:59
Рассмотрим некоторые примеры программирования под DSDOS

Обработка командной строки

В некоторых случаях программе необходимо получить параметры, которые были введены в командную строку при её запуске. ОС DSDOS передаёт в регистровой паре [DE] адрес начала данных, которые следуют сразу после имени запускаемого файла в командной строке. В качестве примера приведу код, который распечатывает фрагмент командной строки с параметрами:

http://www.denn.ru/8bit/orion/soft/dsdos/code_get_cmd1.gif

Признаком конца данных в командной строке является код 0Dh, для универсальности сделана проверка на любой код меньше пробела (<32).

Для проверки, при запуске нашего скомпилированного кода вводим некий тестовый набор параметров:

http://www.denn.ru/8bit/orion/soft/dsdos/code_get_cmd2.gif

В результате получаем распечатку хвоста командной строки с параметрами:

http://www.denn.ru/8bit/orion/soft/dsdos/code_get_cmd3.gif

Фактически программе передаётся адрес данных, следующих сразу за именем файла, включая пробел(ы), отделяющий первый параметр от имени запускаемого файла.
Для универсальности, обработчик командной строки при поиске параметров должен уметь пропускать произвольное кол-во пробелов, разделяющих значения.


Чтение файла

Рассмотрим простой пример чтения текстового файла с текущего устройства в буфер с последующим выводом его содержимого на экран:

http://www.denn.ru/8bit/orion/soft/dsdos/code_ld_file1.gif
~
http://www.denn.ru/8bit/orion/soft/dsdos/code_ld_file2.gif

Т.к. выводимый файл читается с того же устройства (B:), с которого запускается наша программа, то мы не выбираем устройство с помощью процедуры 083h. Сразу указываем ОС адрес буфера имени файла с помощью процедуры 085h и вызываем процедуру чтения файла 08Bh со следующими параметрами: чтение в основную страницу ОЗУ (=0) принудительно по адресу в [HL] ([C]=1).
После вызова процедуры чтения файла проверяем код возврата, и если этот код не равен нулю, то прерываем исполнение программы с выводом соответствующего сообщения об ошибке (процедура 0[B]F006h). Нулевой код возврата означает успешное чтение файла и мы выводим посимвольно его содержимое на экран используя информацию о адресе начала считанного файла в [HL] и его длине в [DE].

Результатом работы откомпилированного кода будет вывод на экран текста программы предыдущего примера:

http://www.denn.ru/8bit/orion/soft/dsdos/code_ld_file3.gif


Запись файла

В качестве примера записи рассмотрим сохранение программы ПЗУ "Монитор-2" в файл "MONITOR2" на диск B:

http://www.denn.ru/8bit/orion/soft/dsdos/code_sv_file1.png

В случае успеха, выполнение этого откомпилированного кода не выводит сообщение об ошибке:

http://www.denn.ru/8bit/orion/soft/dsdos/code_sv_file2.png

При этом на диске B: создаётся файл с копией программы ПЗУ "Монитор-2":

http://www.denn.ru/8bit/orion/soft/dsdos/code_sv_file3.png

Повторный запуск программы приведёт к выводу сообщения об ошибке, т.к. будет попытка создания на диске B: файла с таким же именем:

http://www.denn.ru/8bit/orion/soft/dsdos/code_sv_file4.png



+++ продолжение следует +++

:v2_dizzy_fire:

Denn
12.11.2013, 18:21
Текстовый редактор «Gemini-EDIT» v5.0 (версия под ОС DSDOS v3.x)

Для создания и редактирования текстовых файлов в среде ОС DSDOS есть достаточно мощный текстовый редактор «Gemini-EDIT». На ROM-диске ОС DSDOS «Gemini-EDIT» представлен в виде двух файлов: ED$ (редактор) и EDSETUP$ (конфигуратор интерфейса).
Для оперативности, в оболочке ОС DSDOS есть возможность автоматического вызова редактора нажатием клавиши «F4» на текстовом файле, в результате чего файл будет открыт на редактирование в «Gemini-EDIT».

Данный программный продукт является развитием текстового редактора «ASSISTANT v4.7», написанного для ОС ORDOS v2.4 ПРК «ОРИОН-128». Настоящая версия написана под ОС DSDOS (v3.3 и выше) и имеет целый ряд новых функций и улучшений:

+ Улучшенный интерфейс пользователя
+ Многооконный режим просмотра/редактирования (возможность работы с несколькими файлами одновременно)
+ Варианты расположения окон (до трёх на одном экране)
+ Гибкая система конфигурирования интерфейса
+ Поддержка длинных строк (до 255 символов)
+ Поддержка расширенного знакогенератора ОС DSDOS v3.x
+ Удобный доступ к символам псевдографики знакогенератора DSDOS v3.x
+ Ускоренная обработка процессов разделения/склеивания/скроллинга строк
+ Ускоренная обработка фрагментов (вставка/удаление/копирование)
+ Ускоренное обновление содержимого экрана (листание страниц)
+ Поддержка общего буфера обмена между программами (ClipBoard)
+ Расширенный режим поиска/замены
+ Расширенная система откатов по закладкам
+ Улучшенный сервис по редактированию строки
+ Улучшенный интерфейс загрузки/сохранения рабочих файлов
+ Ускорена и улучшена процедура тестирования текста при загрузке
+ Возможность быстрого запуска программ прямо из редактора с возможностью указания параметров в командной строке
+ Поддержка указания параметров из командной строки при загрузке редактора
+ Полное сохранение положения и настроек при выходе из редактора
+ Возможность использования всего доступного объёма памяти для текста
+ Возможность работы с любыми доступными в системе устройствами (дисками)
+ Небольшой занимаемый редактором объём памяти (около 8 Кб)


Описание основных функций редактора

Формат рабочих (текстовых) файлов

Редактор «Gemini-EDIT» поддерживает следующий формат рабочих (текстовых) файлов. Текстовый файл представляет собой набор строк длиной от 0 до 63 (значение по-умолчанию, максимально - до 255) символов с ASCII-кодами от 20h до FEh включительно (расширенная кодировка ОС DSDOS), разделённых символом перевода строки (ASCII-код 0Dh). Признаком конца текстового файла является символ с кодом FFh.
Символы с кодами от 00h до 0Ch и от 0Eh до 1Fh включительно не используются и считаются ошибочными для данного формата.


Загрузка редактора Gemini-EDIT

Запуск редактора может быть осуществлён как с параметрами, так и без них. Далее приведены варианты загрузок редактора:

Загрузка без параметров

A>L ED$

При первом запуске редактора без параметров производится загрузка редактора в ОЗУ и открывается новый файл, которому по умолчанию присваивается автоматически формируемое имя FL00.TXT или если на данном устройстве уже существует файл с таким именем, то производится поиск свободного имени путём перебора индекса от 00 до 99. Таким образом, происходит начальная «холодная» загрузка редактора.

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_new.gif

Если до этого редактор уже загружался и на устройстве «В:» имеется файл конфигурации редактора ED.INI, то производится загрузка редактора с полным восстановлением всех настроек и положения в тексте, которые были на момент последнего выхода из редактора.

Загрузка с ключом /N

A>L ED$ /N

При таком варианте запуска производится загрузка редактора с потерей всех настроек и списка рабочих файлов, т.е. происходит «холодная» загрузка редактора.

Загрузка с ключом /B

A>L ED$ /B

При таком варианте запуска производится загрузка редактора с попыткой восстановления текста из ОЗУ компьютера, т.е. редактор проверяет память, отведённую для буфера текста (3000h..RamTop) на наличие полезной информации и, при успешном завершении тестирования, оформляет содержимое буфера в файл, после чего переходит в режим просмотра/редактирования. Полученному таким образом файлу присваивается имя вида FLxx.TXT по механизму, рассмотренному выше.
Данный вариант загрузки полезен для восстановления файла в случае некорректного выхода из редактора или при сбое в системе.

Загрузка нового рабочего файла

A>L ED$ {PathName}

Параметр {PathName} означает полное имя рабочего файла, т.е. либо просто имя файла, либо имя устройства и имя файла, разделённые двоеточием «:».
При таком варианте производится загрузка редактора и поиск файла с указанным именем на указанном (или текущем) устройстве. Если файл найден, то производится его загрузка в редактор, и он становится текущим, т.е. редактор переходит в режим просмотра/редактирования данного файла. Если файл не найден, то производится открытие нового файла с указанным {PathName}.

Возможны также следующие комбинации:

A>L ED$ /NB (загрузка с ключами /N и /B)
A>L ED$ /BN (аналогично предыдущему варианту)
A>L ED$ {PathName} /N («холодная» загрузка нового рабочего файла)


Возможные ошибки при загрузке редактора

При загрузке редактора происходит выход в систему с ошибкой «09 OUT OF MEMORY». Это означает, что верхняя граница ОЗУ пользователя находится ниже адреса начала буфера текста редактора (3000h). Выход из данной ситуации - изменить значение RamTop командой «M {addr}» ОС DSDOS.

При загрузке редактора с параметром {PathName} происходит ошибка чтения указанного файла, в результате чего редактор предлагает либо повторить попытку чтения («N»), либо игнорировать загрузку данного файла и создать новый с таким же именем («Y»), либо прервать загрузку редактора и выйти в систему (Esc):

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fl_err.gif

Аналогичная ситуация может возникнуть и в случае загрузки без параметров с восстановлением последнего положения в тексте, т.к. в этом случае производится автозагрузка рабочего файла, который на момент очередного запуска редактора может быть удалён или переименован.

В процессе загрузки редактора с подгрузкой рабочего файла могут быть найдены ошибки в формате файла (несоответствие длины и положения признака конца текста, отсутствие признака конца текста, а также наличие запрещённых символов, описанных выше). Такая ситуация возможна в случае сбоя в системе и, как результат, нарушении данных в файле или при попытке загрузки нетекстового файла. В данном случае возможны либо загрузка файла с исправлением ошибок формата («N»), либо открытие нового (пустого) файла с таким же именем («Y»), либо выход из редактора (Esc):

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fmt_err.gif


Загрузка файлов из редактора

Редактор «Gemini-EDIT» позволяет одновременно загружать до восьми рабочих файлов. На самом деле это не означает, что все рабочие файлы в данный момент находятся в ОЗУ компьютера. В ОЗУ находится только один текущий файл, а остальные находятся в списке рабочих файлов и подгружаются в ОЗУ по мере их активизации. Выбор рабочего файла текущим осуществляется при помощи меню выбора рабочих файлов, которое вызывается нажатием клавиши «F1» из основного режима работы редактора (просмотр/редактирование).
Загрузку рабочего (текстового) файла можно также производить не только из командной строки, но и непосредственно из редактора, т.е. когда редактор находится в режиме просмотра/редактирования, при помощи нажатия последовательности клавиш АР2 & «L» (Esc & «L»). При выборе данной опции пользователю предлагается выбрать устройство загрузки, после чего на экране появляется список файлов текущего устройства доступных для загрузки по текущему шаблону. Выбор шаблона «*.TXT» (по-умолчанию) или «*.*» осуществляется из основного режима редактора при помощи комбинации клавиш УС+«T» (Ctrl+«T»). После чего пользователю предлагается ввести имя файла (примечание: в варианте с шаблоном «*.TXT» расширение можно не вводить). Очередной загружаемый файл помещается в список рабочих файлов и становится текущим (активным). При загрузке файла в редактор производится его тестирование на признак конца файла (последним должен быть байт FFh), а также на наличие ошибочных символов. В случае обнаружения ошибок пользователю предлагается либо игнорировать загрузку данного файла и создать новый пустой файл с таким же именем и на том же устройстве, либо произвести устранение ошибок и загрузить файл в редактор, либо прервать загрузку и выйти из редактора в систему.


Запись (сохранение) файлов из редактора

Для сохранения изменений текущего файла необходимо нажать комбинацию клавиш УС+«S» (Ctrl+«S») в режиме просмотра/редактирования, а для сохранения текущего файла под другим именем необходимо нажать последовательность клавиш АР2 & «S» (Esc & «S»). Во втором случае откроется меню диалога записи файла и пользователю будет предложено выбрать устройство, куда необходимо записать файл. После чего необходимо ввести новое имя файла (примечание: в варианте с шаблоном «*.TXT» расширение можно не вводить). В результате записи/сохранения файла могут появляться сообщения об ошибках. В случае появления такого сообщения пользователю предлагается либо повторить попытку записи/сохранения, либо ввести новое имя файла, либо вернуться в режим просмотра/редактирования.

↓↓↓

Denn
12.11.2013, 18:39
Основные понятия в редакторе «Gemini-EDIT»

Основными объектами, с которыми работает редактор «Gemini-EDIT» являются:

- ТЕКСТ (файл, документ)
- СТРОКА (часть текста от левого края экрана до маркера «http://www.denn.ru/8bit/orion/soft/dsdos/enter.gif»)
- ФРАГМЕНТ (совокупность некоторого количества строк)
- СЛОВО (часть строки, ограниченная символами разделения слов: «_», «.», «,» и т.п.)
- СИМВОЛ (один элемент слова, строки, вводимый непосредственно с клавиатуры)
- СИМВОЛ ПСЕВДОГРАФИКИ (псевдографический символ, вводимый с помощью соответствующего меню)

В редакторе «Gemini-EDIT» существуют два понятия: редактирование строки и редактирование текста. Это означает, что когда пользователь делает изменения в пределах одной строки, то он как бы находится в редакторе строки и все изменения данной строки вносятся в основной текст только при выходе из данной строки (переход к следующей строке) или при любой операции, не связанной с редактированием строки. Это даёт возможность отмены изменений в случае ошибочных действий пользователя (комбинация клавиш УС+«U» или Ctrl+«U»). Т.е. на самом деле редактор всегда находится в режиме редактирования текущей строки, однако для пользователя это не заметно.
Таким образом, для пользователя на экране в режиме просмотра/редактирования всегда предоставляется достоверная информация о наличии и расположении текста в файле.
При редактировании строки возможен такой вариант, когда вся строка целиком не помещается на экране (в окне при оконном режиме отображения). В этом случае последним справа будет символ «http://www.denn.ru/8bit/orion/soft/dsdos/fonts/right.gif». Это означает, что строка видна не целиком и для просмотра/редактирования её содержимого необходимо перейти на эту строку и путём операций перемещения курсора добиться отображения требуемого участка. Признаком конца строки является символ «http://www.denn.ru/8bit/orion/soft/dsdos/enter.gif», который при желании может быть изменён пользователем на любой другой с помощью конфигуратора интерфейса EDSETUP$.
Если в процессе редактирования строки её левая часть не помещается на экране, то её крайний левый символ временно заменяется на символ «http://www.denn.ru/8bit/orion/soft/dsdos/fonts/left.gif» и после выхода из данной строки она на экране принимает такой вид, что её крайний левый символ является первым символом в строке.

Если при очередном переходе к следующей строке или при любой другой операции появится сообщение «OUT OF MEMORY!», то это означает, что текст слишком велик (превышен размер буфера текста) и дальнейшее добавление текста невозможно. Далее для возврата в режим редактирования необходимо нажать любую клавишу (если нажать клавишу «Esc», то произойдёт отмена всех последних изменений текущей строки).

Т.к. в редакторе «Gemini-EDIT» нет отдельного режима просмотра (он совмещён с режимом редактирования), то может оказаться полезной функция отключения маркеров конца строк, которая работает по принципу триггера (т.е. один раз отключает, а другой раз включает маркеры) и выполняется нажатием последовательности клавиш АР2 & «@» (Esc & «@»).


Интерфейс основного режима редактора «Gemini-EDIT»

Интерфейс основного режима (просмотр/редактирование) редактора «Gemini-EDIT» представляет собой четыре основных поля:

- поле состояния (самая верхняя строка)
- верхнее информационное поле (вторая сверху строка экрана)
- поле просмотра/редактирования текста (основное поле, может представлять собой одно или несколько окон)
- нижнее информационное поле (самая нижняя строка экрана)

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_new.gif

Поле состояния в основном режиме отображает полное имя текущего файла (например: Edit file B:FL00.TXT), причём если файл вновь созданный и ещё не сохранялся на диск, то это будет отражено в заголовке: New/Edit file B:FL00.TXT. Поле состояния в режиме просмотра/редактирования/поиска отображает часть образца поиска и счётчик количества найденных фрагментов на данный момент (если был выбран режим поиска/замены).

Верхнее информационное поле в основном режиме отображает (слева направо): номер текущей строки от начала текста, объём текста на данный момент (в байтах) и оставшийся свободный объём буфера текста на данный момент (в байтах). Данные в этом поле обновляются только в момент перехода между строками и при выполнении команд работы с текстом и его фрагментами.

Поле просмотра/редактирования текста отображает страницу текста и текущее положение курсора редактора в нём (курсор при этом имеет вид «L», который установлен по умолчанию и может быть изменён на любой другой, доступный в ОС DSDOS при помощи конфигуратора интерфейса EDSETUP$).

Просмотр/редактирование текста можно производить как в полноэкранном (выбирается нажатием комбинации клавиш УС+«F» или Ctrl+«F»), так и в оконном режиме (выбор одного из семи возможных оконных режимов осуществляется нажатиями комбинации клавиш УС+«W» или Ctrl+«W»). Примечание: одновременно на экране можно расположить до 3-х окон.

Два файла, окна расположены вертикально:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_win1.gif

Два файла, окна расположены горизонтально:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_win2.gif

Три файла, окна расположены горизонтально:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_win3.gif

Нижнее информационное поле в основном режиме отображает (слева направо):
- координаты положения курсора на экране относительно левого верхнего угла текущей страницы текста «X=00» и «Y=00»;
- индикатор изменений в тексте: «Mod» - текст не изменён, «Mod*» - внесены изменения;
- индикатор выделения начала фрагмента: «Sel» - начало фрагмента не указано, «Sel*» - указано;
- индикатор наличия текстовой информации в буфере обмена: «ClBoard» - пусто, «ClBoard*» - в буфере текстовый фрагмент;
- индикатор начала/конца текста «↓↑»: отображает возможность перемещения курсора вверх и вниз по тексту, в первой и в последней строке текста отображается только один соответствующий маркер.


Команды редактирования строки

Ввод текста в редакторе «Gemini-EDIT» осуществляется путём ввода/редактирования строк. По-умолчанию включен режим "вставка", т.е. вводимый символ будет вставлен между символом в позиции курсора и символом левее курсора, при этом содержимое строки правее курсора сдвигается вправо, т.о. кол-во символов строки увеличивается. С помощью клавиши «F3» (Ins) можно включить режим "замена", т.е. вводимый символ будет заменять символ в позиции курсора, при этом курсор сдвигается на одну позицию вправо, кол-во символов в строке не изменяется. Повторное нажатие клавиши «F3» (Ins) вновь переключает в режим "вставка". Определить текущий режим можно по виду курсора.
Если при вводе достигнут правый конец экрана (окна), то происходит сдвиг строки влево и вместо исчезнувших слева символов появляется символ «http://www.denn.ru/8bit/orion/soft/dsdos/fonts/left.gif». Если при вводе/редактировании строки достигнут предел максимальной длины строки (64 символа по-умолчанию, 255 максимально), то появляется длинный звуковой сигнал и дальнейший ввод символов блокируется (примечание: за три символа до достижения этого предела появляется короткий предупреждающий звуковой сигнал).

При переходе к следующей строке и при любых других операциях не связанных с редактированием строки, производится вставка изменённой строки в основной текст. До этого момента существует возможность отмены изменений строки с помощью комбинации клавиш УС+«U» (Ctrl+«U»).

Для перемещения курсора в пределах строки используются следующие клавиши:

«←», «→» - перемещение по символам;
TAB, УС+TAB, УС+«←», УС+«→» (Ctrl+«←», Ctrl+«→») - перемещение по словам;
КД, ПС («Home», «End») - перемещение в начало/конец видимой части строки на экране (в окне);
АР2 & «←», АР2 & «→» (Esc & «←», Esc & «→») - перемещение в реальные начало/конец строки.

Для удаления символов используются следующие клавиши:

«F2» (Del) - удаление символа в позиции курсора;
УС+«F2» (Ctrl+«Del») - удаление строки справа от курсора;
«ЗБ» (BS, Backspace) - удаление символа слева от курсора;
УС+«ЗБ» (Ctrl+«Backspace») - удаление строки слева от курсора.

Для групповой смены регистра и кодировки символов используются следующие клавиши:

УС+«K» (Ctrl+«K») - смена регистра символов от курсора и до конца слова;
УС+НР+«K» (Ctrl+Shift+«K») - смена регистра символов от курсора и до конца строки;
УС+«E» (Ctrl+«E») - смена кодировки символов (РУС/ЛАТ) от курсора и до конца слова;
УС+НР+«E» (Ctrl+Shift+«E») - смена кодировки символов (РУС/ЛАТ) от курсора и до конца строки.

Для вставки символов псевдографики ОС DSDOS используются следующие клавиши:

АР2 & «P» (Esc & «P») - выбор текущего и вставка символа псевдографики;
УС+«P» (Ctrl+«P») - вставка текущего символа псевдографики.

При выборе текущего символа псевдографики в нижнем информационном поле открывается соответствующий диалог:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_graph.gif

Текущий выбранный символ выделяется мигающей инверсией. Выбор осуществляется клавишами «←» и «→», клавиши «↓↑» переключают отображаемые наборы символов, по нажатию клавиши «ВК» (Enter) выбранный символ вставляется в редактируемую строку в позицию курсора и становится текущим. Нажатие клавиши АР2 (Esc) отменяет вставку символа псевдографики (примечание: при этом текущим становится символ, выбранный на момент отмены).

↓↓↓

Denn
14.11.2013, 13:02
Команды редактирования строки (продолжение)

Комбинация клавиш УС+«F3» (Ctrl+«Ins») вставляет пробел в позицию курсора, при этом курсор остаётся на прежнем месте, а пробел вставляется между символом левее курсора и символом в позиции курсора, независимо от текущего режима "вставка/замена".


Команды редактирования текста

ВК (Enter) - ввод/разделение/образование строки;
АР2 & ВК (Esc & Enter) - объединение текущей и следующей строки в одну;
УС+ВК (Ctrl+Enter) - создание новой пустой строки ниже текущей;
АР2 & «X» (Esc & «X») - удаление строк от начала текста до текущей (включительно), с запросом подтверждения;
АР2 & «Z» (Esc & «Z») - удаление строк от текущей (включительно) до конца текста, с запросом подтверждения;
УС+«D» (Ctrl+«D») - удаление текущей строки, выполняется без запроса подтверждения;

Команды навигации по тексту

«↓» / «↑» - переход к следующей / предыдущей строке (позиция курсора по X по возможности сохраняется);
АР2 & «B» (Esc & «B») - переход в начало текста;
АР2 & «E» (Esc & «E») - переход в конец текста;
АР2 & «↓» или СТР (Esc & «↓» или Cls, «PgUp») - переход на страницу вниз (текст перепечатывается таким образом, что последняя строка предыдущей страницы будет первой строкой новой страницы);
АР2 & «↑» или УС+СТР (Esc & «↑» или Ctrl+Cls, Ctrl+«PgUp») - переход на страницу вверх (текст перепечатывается таким образом, что первая строка предыдущей страницы будет последней строкой новой страницы);
УС+«↓» (Ctrl+«↓») - переход на полстраницы вниз;
УС+«↑» (Ctrl+«↑») - переход на полстраницы вниз;
УС+КД, УС+ПС (Ctrl+Home, Ctrl+End) - перемещение в первую/последнюю строку текущей страницы;
УС+«\» (Ctrl+«\») - текущую строку в середину экрана (текст перепечатывается таким образом, что текущая строка оказывается в середине экрана);
УС+«.» (Ctrl+«.») - установка закладки (запоминается номер строки и положение курсора);
УС+«J» (Ctrl+«J») - переход к закладке (осуществляется переход к номеру строки из закладки);

Операции с фрагментами текста

Фрагмент текста представляет из себя совокупность следующих друг за дружкой строк. Началом фрагмента всегда является первый символ первой строки фрагмента, а концом - последний символ последней строки фрагмента.
Для отметки начала фрагмента необходимо нажать комбинаю клавиш: УС+«N» или АР2 & «[» (Ctrl+«N» или Esc & «[»). Концом фрагмента считается строка, при нахождении в которой подаётся команда операции с фрагментом. При этом не имеет значения дальше или ближе по тексту обозначается конец фрагмента относительно его начала. После выполнения команд связанных с модификацией текста, маркер начала фрагмента аннулируется, в остальных случаях сохраняется. Если начало фрагмента не отмечено, то попытка выполнить операцию с фрагментом приведёт к выводу в нижнее информационное поле предупреждения: "No text selected!", по нажатию любой клавиши редактор возращается в основной режим просмотра/редактирования. Доступны следующие операции:

АР2 & «D» (Esc & «D») - удаление фрагмента (отметка начала фрагмента снимается);
АР2 & «C» (Esc & «C») - копирование фрагмента в буфер обмена (отметка начала фрагмента не снимается);
АР2 & «U» (Esc & «U») - удаление фрагмента в буфер обмена (отметка начала фрагмента снимается);
АР2 & «V» (Esc & «V») - вставка фрагмента из буфера обмена перед текущей строкой;
АР2 & «K» (Esc & «K») - просмотр содержимого буфера обмена.


Операции поиска/замены

Поиск

Для поиска слова, нескольких слов или любой другой последовательности символов (далее - образца) необходимо нажать последовательность клавиш: АР2 & «F» (Esc & «F»). В нижнем информационном поле откроется диалог ввода образца для поиска:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fnd0.gif

Ранее вводимый образец можно "вспомнить" нажатием клавиши «↑» и, при необходимости, отредактировать.

Если искомая фраза "размазана" на две строки и более, то при вводе образца в качестве "разделителя строк"
необходимо вводить символ «|» (вертикальная черта):

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fnd_spl.gif

Символ «?» используется для указания одного любого символа в данной позиции образца.

Если при подаче команды поиска (в момент нажатия клавиши «F») удерживать клавишу «НР» (Shift), то в качестве образца поиска автоматически будет вставлено слово, которое было в тексте в позиции курсора:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fnd_ent.gif

После ввода образца поиска (ВК, Enter) открывается диалог выбора направления поиска:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fnd_dir.gif

Клавишами «↓» / «↑» выбирается направление вниз/вверх от текущего положения курсора,
клавиша АР2 (Esc) отменяет поиск, а нажатие любой другой клавиши выполняет поиск с начала текста.

В случае успеха, распечатывается новая страница текста т.о., что в середине экрана оказывается строка, содержащая первый найденный образец, курсор будет установлен на начале найденного образца в строке. В поле состояния редактора правее имени текущего файла будут отображены первые пять символов образца поиска и порядковый номер найденного в тексте:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fnd1.gif

Для продолжения поиска необходимо нажать УС+«R» или АР2 & «R» (Ctrl+«R» или Esc & «R»), в результате будет найдено следующее вхождение образца, положение строки на экране и курсора в ней - аналогичные, а в поле состояния редактора будет соответственно увеличен номер вхождения:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fnd2.gif

Продолжение поиска осуществляется в направлении, выбранном при подаче команды поиска.

Если в выбранном направлении поиска достигнут конец (начало) текста, то выводится следующее предупреждение:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_fnd3.gif

По нажатию любой клавиши редактор возвращается в режим просмотра/редактирования, в то место текста, откуда была подана команда поиска.

Замена

Для замены образца необходимо нажать последовательность клавиш: АР2 & «W» (Esc & «W»). В нижнем информационном поле сначала откроется диалог ввода заменяемого (искомого) образца. Диалог полностью аналогичен команде поиска, отличается только формой курсора. Все особенности, включая вызов с удержанием клавиши «НР» (Shift), также аналогичны команде поиска.
Затем открывается диалог ввода нового образца на замену. Здесь уже символы «?» и «|» используются по своему прямому назначению. Количество заменяющих символов может отличаться от количества заменяемых, в этом случае объём текстового файла после выполнения замены будет соответствующим образом уменьшен или увеличен, а процесс замены будет выполняться ощутимо дольше, чем замена образцом равной длины.
Далее открывается вышеописанный в команде поиска диалог выбора направления, после которого запускается процесс поиска/замены. Заменяются все найденные образцы в соответствии с выбранным направлением до конца (начала) текста.
По окончании процесса в нижнем информационном поле выводится информация о количестве заменённых образцов. Если также присутствует сообщение «Out of memory!», то это означает, что заменены не все образцы, а процесс был прерван из-за того, что размер текста достиг верхней границы текстового буфера.

Редактор не производит анализ корректности заменяющего и заменяемого образцов, это должен контролировать пользователь. Например, поиск образца "АА" с заменой на "ААА" приведёт к зацикливанию процесса вплоть до заполнения всего текстового буфера редактора, т.к. заменяющий образец содержит искомый.


Команды вызова внешних программ

В редакторе есть возможность вызова программ для обработки редактируемого текста. Команда АР2 & «G» (Esc & «G») открывает диалог для ввода имени файла программы-обработчика:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_prog.gif

По-умолчанию подставлено имя "PROG$", а поиск производится на диске "B:". Можно задать имя диска, а также указать параметры вызова, например: "A:STORE$ -A B:ARHIV B:FL00.TXT". После нажатия ВК (Enter) производится вызов программы.
Введённая строка вызова запоминается и в следующий раз её можно не вводить, а вызвать без диалога, подав команду УС+«G» (Ctrl+«G»).

Компиляция на Ассемблере

Для компиляции текущего текстового файла на Ассемблере необходимо выполнить команду АР2 & «A» (Esc & «A»).
Если изменения текста не сохранены, то появится соответствующий диалог:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_asm.gif

После чего следующим образом выполняется вызов Ассемблера: "L A:ASSM$ B:FL00.TXT", где "B:FL00.TXT" - полное имя текущего файла. Имя файла Ассемблера можно изменить с помощью конфигуратора интерфейса EDSETUP$.

↓↓↓

Denn
24.03.2015, 15:12
Конфигуратор интерфейса редактора «Gemini-EDIT»

В процессе работы редактор «Gemini-EDIT» сохраняет в файле конфигурации ED.INI следующие параметры:
- количество и имена рабочих файлов, открытых в редакторе;
- расположения окон рабочих файлов и положения курсора в них;
- образцы поиска и замены;
- имя файла и параметры запуска внешней программы;
- режим отображения каталога файлов в диалогах загрузки/сохранения файлов.

Также есть параметры, которые использует редактор «Gemini-EDIT», но для их изменения есть отдельная утилита - EDSETUP$:

http://www.denn.ru/8bit/orion/soft/dsdos/gm_edit/ed_setup.gif

Изменение параметров производятся нажатием соответствующих клавиш и немедленно визуально отображаются.


Изменение цвета интерфейса

Общее правило: для изменения цвета символов элемента интерфейса нажимается соответствующая символьная клавиша, для изменения цвета фона добавляется клавиша «НР» (Shift). Каждое нажатие циклически перебирает все 16 вариантов цветов.

"M" - цвета следующих элементов: поле состояния (самая верхняя строка), верхнее информационное поле (вторая сверху строка экрана) и нижнее информационное поле (самая нижняя строка экрана).

"E" - цвет сообщения об ошибке.

"N" - цвет неактивного окна с текстом.

"A" - цвет активного (текущего) окна с текстом.


Изменение формы курсоров и маркеров конца строк

Общее правило: нажатие соответствующей клавиши увеличивает параметр на единицу, а добавление клавиши «НР» (Shift) - уменьшает на единицу.

F1 - маркер конца строки;
F2 - форма курсора для режима "замена";
F3 - форма курсора для режима "вставка";
АР2 (Esc) - форма курсора режима "АР2 &...";


Изменение параметров длины строки

Общее правило: после нажатия соответствующей клавиши вводится числовое значение параметра в десятичной системе.

"S" - максимальная длина строки (20..255);
"B" - количество символов до максимума длины строки, подаётся предупреждающий звуковой сигнал (1..9);


Изменение расширения текстовых файлов

После нажатия клавиши "X" вводятся 1..3 символа расширения (без точки).


Изменение имени файла программы Ассемблера

После нажатия клавиши "F" вводится имя файла. Также можно указать имя устройства, например: "B:TASM$".


Для отмены всех текущих изменений необходимо нажать "U", для сброса на установки по-умолчанию необходимо нажать "R". Для сохранения изменений необходимо нажать ВК (Enter), для выхода без сохранения - F4.


↓↓↓

Denn
02.04.2015, 18:29
Утилита архивирования файлов «STORE»

В ОС DSDOS файлы в RAM-диске и на ГМД хранятся в кластерах, размеры которых соответственно составляют 16 и 1024 байт. Это обеспечивает большую скорость чтения/записи, но накладывает ограничения на максимальное кол-во файлов на дисках: 255 для RAM-диска и 78 для ГМД. И если для RAM-диска с его небольшим объёмом цифра вполне адекватная, то для ГМД при хранении большого кол-ва файлов маленького объёма будет нерационально использоваться дисковое пространство - гораздо быстрее закончится место в каталоге, чем физический объём носителя.
Также ввиду ограничений файловой системы (далее - ФС), а именно малого максимального кол-ва символов имени файла (восемь), невозможности хранения на одном диске файлов с одинаковыми именами и отсутствием подкаталогов, возникают трудности с хранением разных версий (архивированием) файлов.
Для решения вышеобозначенных проблем создана утилита STORE$, которая позволяет хранить файлы в специальных файлах-контейнерах (архивах). Максимальный размер файла-контейнера составляет 44 Кб, при его превышении создаётся другой (следующий) файл-контейнер (том архива). Файлы в контейнерах располагаются непрерывно друг за другом, т.е. не происходит потерь пространства диска из-за кластеризации. Доступ к файлам производится не по имени, а по их порядковому номеру в архиве, т.о. можно в одном архиве хранить несколько файлов с одинаковыми именами, что может быть полезно для архивирования разных версий одной программы. Утилита позволяет хранить в одном архиве до 1508 файлов - это ограничение, накладываемое размером буфера каталога архива. Разумеется, размер архива также ограничен и объёмом свободного пространства на диске.
Утилита STORE$ не производит сжатие информации, для этих целей следует пользоваться соответствующими специальными программами.

Запуск утилиты без параметров (или при ошибках в них) выводит подсказку:

http://www.denn.ru/8bit/orion/soft/dsdos/store/st_help.gif


Создание архива

Для создания архива необходимо дать команду добавления первого файла в него "Add" (ключ "/A"):

http://www.denn.ru/8bit/orion/soft/dsdos/store/st_create.gif

Первым параметром идёт имя архива (возможно явное указание диска), далее следует имя добавляемого файла и затем ключ-команда.
В этом примере мы создали на диске B: архив с именем ARHIV, в который добавили файл BIOS с диска A:. Для утилиты считается текущим диск, с которого она была запущена, т.о. для указания файлов на текущем диске не требуется явного указания (в нашем примере исходный файл BIOS находится на том же диске A:, с которого запускается утилита STORE$). Это правило относится и к имени архива.
Факт того, что создаётся новый архив отражён в информации о выполняемой операции: "Create archive...".
Далее распечатываем каталог диска B: и видим, что на нём появилось два новых файла: ARHIV.ST и ARHIV.00. Первый файл ARHIV.ST - каталог, содержит информацию об архиве (заголовки файлов, их порядок), а второй ARHIV.00 - том, является контейнером, в котором располагаются тела файлов архива. Как было сказано ранее, при превышении размера тома в 44 Кб, создаётся следующий файл-том ARHIV.01 и т.д...
Ввиду того, что к имени архива присоединяются соответствующие расширения, оно не может быть длинее пяти символов. Попытка создать архив с более длинным именем приведёт к потере символов после пятого:

http://www.denn.ru/8bit/orion/soft/dsdos/store/st_cut_name.gif


Вывод каталога архива

Для вывода каталога архива необходимо дать команду "Dir" (ключ "/D"):

http://www.denn.ru/8bit/orion/soft/dsdos/store/st_dir.gif

Первым параметром идёт имя архива, далее следует ключ-команда. Ключ "/D" можно опустить, без него утилита также выдаст каталог архива.

Выводится информация в следующем виде:
<порядковый номер файла в архиве>, <имя файла>, <адрес посадки>, <длина Dec/Hex>, <рабочая страница ОЗУ>, <дата>
Информация о порядковом номере файла в архиве используется для его извлечения и удаления из архива.
В конце выводится информация об общем кол-ве файлов в архиве.


Добавление файлов в архив

Добавление других файлов в архив делается аналогично командой "Add", как и при создании архива. При обнаружении архива с указанным именем, утилита вместо создания нового архива добавит файл в существующий. При этом будет отображена информация о добавлении: "Update archive...".


Извлечение файлов из архива

Для извлечения файлов из архива необходимо дать команду "eXtract" (ключ "/X"):

http://www.denn.ru/8bit/orion/soft/dsdos/store/st_extract.gif

Первым параметром идёт имя архива (возможно явное указание диска), далее следует буква диска назначения и, через двоеточие, порядковый номер извлекаемого файла из каталога архива, затем идёт ключ-команда. Если во втором параметре не задан диск назначения, то извлечённый файл будет сохранён на текущем диске, с которого была запущена утилита. Если на диске назначения уже есть файл с таким же именем, то утилита выдаст ошибку, например: "08 Replace file: A:BIOS". Утилита не перезаписывает "поверх" имеющийся на диске файл.

Добавим в наш тестовый архив ARHIV ещё два системных файла с диска A: и извлечём последний файл на диск B:

http://www.denn.ru/8bit/orion/soft/dsdos/store/st_add.gif

Данный пример также демонстрирует следующее свойство утилиты: порядок расположения ключа-команды может быть произвольным, в т.ч. первым параметром сразу после команды запуска утилиты. Сам ключ может начинаться символом "/" или "-".
Что касается остальных параметров, то тут главное чтобы не была нарушена последовательность - сначала идёт имя архива, а после него имя/номер обрабатываемого файла.


Удаление файлов из архива

Для удаления файла(ов) из архива необходимо дать команду "Erase" (ключ "/E"):

http://www.denn.ru/8bit/orion/soft/dsdos/store/st_erase.gif

Первым параметром идёт имя архива (возможно явное указание диска), далее следует порядковый номер удаляемого файла из каталога архива, затем идёт ключ-команда. В результате из архива удаляются все файлы начиная с указанного, включительно. Удаление одного файла внутри списка в текущей версии STORE$ не поддерживается в виду серьёзного увеличения размера кода программы, а также чрезмерно большого времени перепаковки информации внутри томов архива.

P.S. в планах написание оболочки (интерфейс наподобие DC$) для более удобной работы с архивами...

↓↓↓

Denn
07.04.2015, 14:42
Утилита сравнения файлов «FC»

Для сравнения содержимого файлов в ОС DSDOS имеется утилита FC$, которая позволяет сравнивать файлы в двух режимах: побайтово (бинарный) и построчно (текстовый).

Запуск утилиты с ключом "/?" выводит подсказку:

https://forum-img.guitarplayer.ru/2024/02/11/1ko8Y.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_help.gif)


Для пояснения работы утилиты создадим два тестовых текстовых файла FL00.TXT и FL01.TXT. Для начала их содержимое будет полностью одинаковое:

https://forum-img.guitarplayer.ru/2024/02/11/1krhS.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_src0.gif)

В левом окне редактора отображено содержимое файла FL00.TXT, а в правом - FL01.TXT.

Далее делаем вызовы утилиты со следующими параметрами:

https://forum-img.guitarplayer.ru/2024/02/11/1k5XR.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_bt0.gif)

Первый раз сравниваем файлы FL00.TXT и FL01.TXT в побайтовом (бинарном), а второй раз в построчном (текстовом) режиме.
Поскольку файлы одинаковые, то результаты сравнений в обоих режимах - "Ok!".

Теперь вносим два изменения во второй файл FL01.TXT:

https://forum-img.guitarplayer.ru/2024/02/11/1kWqV.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_src1.gif)

- в первой строке меняем цифру "1" на "2", а в конце добавляем пустую строку. Делаем сравнение файлов в обоих режимах:

https://forum-img.guitarplayer.ru/2024/02/11/1kpH2.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_bt1.gif)

Побайтовое (бинарное) сравнение показывает, что размеры файлов отличаются на один байт и выводит различающиеся байты в пределах кол-ва байт файла наименьшего размера.
Построчное (текстовое) сравнение показывает различия в строках, находящихся в одинаковых позициях текста, а также отдельно показывает "новые" строки, которые есть только в одном из сравниваемых файлов.

Добавим ещё одну строку во второй файл:

https://forum-img.guitarplayer.ru/2024/02/11/1kEKJ.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_src3.gif)

Теперь побайтово файлы отличаются значительно, а построчно разница только в двух моментах:

https://forum-img.guitarplayer.ru/2024/02/11/1kgIc.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_bt3.gif)


Ещё пара примеров. Во втором файле изменим содержимое строк:

https://forum-img.guitarplayer.ru/2024/02/11/1kIcP.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_src4.gif)

В обоих режимах сравнений получаем одинаковое кол-во различий:

https://forum-img.guitarplayer.ru/2024/02/11/1kNhO.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_bt4.gif)

Во втором файле, в середине текста две новые строки:

https://forum-img.guitarplayer.ru/2024/02/11/1kSXT.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_src5.gif)

Результат построчного сравнения такой:

https://forum-img.guitarplayer.ru/2024/02/11/1k4ro.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_bt5.gif)


Некоторые особенности. Как видно из примеров, если опускается явное указание диска, то файл ищется на диске "B:", независимо от текущего диска, с которого запускается утилита.
Для указания построчного (текстового) режима сравнения используется ключ "/T", отсутствие ключей указывает на побайтовый (бинарный) режим.
Для успешного запуска утилиты необходимо, чтобы суммарно оба сравниваемых файла плюс часть кода самой утилиты помещались в размер ОЗУ пользователя (задаётся командой "M" ОС DSDOS), в противном случае работа утилиты будет прервана:

https://forum-img.guitarplayer.ru/2024/02/11/1kBHf.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/fc/fc_mem.gif)

↓↓↓

Denn
08.04.2015, 14:01
Утилита обмена файлами с IBM-совместимым ПК - «LINK$»

Для хранения файлов "железного Ориона" на IBM-совместимом ПК и обмена ими с другими пользователями через Интернет, в ОС DSDOS имеется утилита LINK$, которая позволяет передавать файлы с "Ориона" на IBM-совместимый ПК и наоборот.
Обмен производится с помощью интерфейса RS-232. Для этого в ПРК "Орион" должна быть сделана аппаратная доработка: установлен UART на ИМС КР580ВВ51 + КР580ВИ53 ( схема (http://www.denn.ru/8bit/orion/soft/dsdos/link/5351.jpg) + преобразователь сигналов TTL<->RS232, например на ИМС MAX232). Соединение с IBM-совместимым ПК производится "перекрёстным" кабелем COM-COM (http://www.denn.ru/8bit/orion/soft/dsdos/link/com-com.jpg), для обмена используются только линии Rx, Tx и GND. Скорость обмена 9600 кБод.

Передача файлов производится в проприетарном формате, который со стороны IBM-совместимого ПК поддерживается специальной утилитой ( LINK.EXE (http://www.denn.ru/8bit/orion/soft/dsdos/link/LINK.EXE) ).

Хранение орионовских файлов на IBM-совместимом ПК - в формате «*.ori»:


Формат хранения файлов ПРК "Орион-128" на IBM PC
-----------------------------------------------------

Файл имеет расширение "ori" и содержит следюущую информацию:

Сигнатура:
4F 72 69 6F 6E 2D 31 32 38 20 66 69 6C 65 0D 0A (16 байт)

Заголовок:
Имя файла (8 байт)
Адрес "посадки" (2 байта)
Длина (2 байта)
Атрибуты (1 байт)
Рабочая страница ОЗУ (1 байт)
Дата создания (2 байта)

Тело файла.


Запуск утилиты LINK$ с параметром "?" выводит подсказку:

http://www.denn.ru/8bit/orion/soft/dsdos/link/link_help.gif


Передача файла с IBM-совместимого ПК на «Орион»

Для отправки файла с IBM-совместимого ПК на "Орион", нужно:

1. Соединить оба ПК кабелем-линкером;

http://www.denn.ru/8bit/orion/soft/dsdos/link/com-com.jpg

2. На Орионе запустить "L LINK$ <B:>" (в качестве необязательного параметра вводится имя диска, на который будет сохранён файл);

http://www.denn.ru/8bit/orion/soft/dsdos/link/link_rx.gif

3. На IBM-совместимом ПК, соответственно, запустить "LINK.EXE <FileName.ori>".

http://www.denn.ru/8bit/orion/soft/dsdos/link/link_pc_tx.gif

Для информации выводится реальное (орионовское) имя файла, его адрес "посадки", длина и рабочая страница ОЗУ.
Прервать процесс передачи/приёма можно нажатием клавиши [Esc] (на Орионе - [АР2]).

В режиме приёма утилита LINK$ также может принимать и отображать символы в кодировке ASCII.


Передача файла с ПРК «Орион» на IBM-совместимый ПК

Для обратной передачи файла необходимо то же самое соединение линкером.

На IBM-совместимом ПК запускается утилита с ключом "/R":

http://www.denn.ru/8bit/orion/soft/dsdos/link/link_pc_rx.gif

На ПРК «Орион» запускается утилита LINK$ с именем передаваемого файла в качестве параметра:

http://www.denn.ru/8bit/orion/soft/dsdos/link/link_tx.gif

Пояснение к картинке. Скриншот экрана "Ориона" сделан в эмуляторе, реальная передача файлов не производилась, в связи с этим утилита выдавала ошибку передачи. Ошибка означает, что передающая сторона в течении определённого времени (таймаута) не получила ответа от принимающей стороны, и может свидетельствовать о неисправности канала связи, либо о том, что на принимающей стороне не запущена утилита в соответствующем режиме. Прервать процесс передачи/приёма также можно нажатием клавиши [Esc]/[АР2].

Для утилиты LINK$ считается текущим диск, с которого она запущена. Если нет явного указания диска в имени передаваемого файла, то его поиск осуществляется на текущем диске. В примере показаны оба варианта.

На IBM-совместимом ПК полученный файл сохраняется в каталоге, где находится утилита "LINK.EXE". Имя файла формируется из орионовского имени + расширение ".ori", при этом если в орионовском имени присутствует символ ".", то он заменяется на символ "_". Оригинальное орионовское имя файла сохраняется внутри файла-контейнера в неизменном виде.

↓↓↓

Denn
09.04.2015, 12:48
Конвертер кодировки текстовых файлов - «CON$»

Кодировка текстовых файлов в ОС DSDOS отличается от упрощённой кодировки в среде ORDOS, а также "Радио-РК86" и т.п. - см. тут (http://www.denn.ru/8bit/orion/soft/dsdos/fonts.gif) и тут (http://www.denn.ru/8bit/orion/soft/dsdos/ext-ascii.doc). Касательно текстовых файлов старого формата основное отличие состоит в кодировке русских букв: на их месте в ОС DSDOS расположены латинские строчные буквы. Для адекватного просмотра текстовых файлов старого формата в ОС DSDOS используется ключ "/O" при использовании команды "T":

https://forum-img.guitarplayer.ru/2024/02/11/1kMj0.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/cnv/con_src.gif)

Но в этом случае преобразование формата производится только в момент вывода символов на экран, содержимое файла при этом не изменяется.
Утилита-просмотрщик текстовых файлов DCVIEW$ также умеет корректно отображать тексты в старой кодировке (режим "ORDOS"):

https://forum-img.guitarplayer.ru/2024/02/11/1k6Lp.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/cnv/con_src1.gif)

https://forum-img.guitarplayer.ru/2024/02/11/1k9Kj.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/cnv/con_src.0gif)

Но она тоже не изменяет содержимое текстовых файлов.

Для преобразования кодировки текстовых файлов из старого формата в формат ОС DSDOS (например, для последующего редактирования в текстовом редакторе ED$) создана специальная утилита - CON$.

Как обычно, запуск утилиты без параметров выводит подсказку:

https://forum-img.guitarplayer.ru/2024/02/11/1kKJH.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/cnv/con_hlp.gif)

Преобразование кодировки содержимого текстового файла

Для конвертирования содержимого текстового файла необходимо вызвать утилиту с указанием файла в качестве параметра:

L CON$ B:FILE.TXT

В результате содержимое текстового файла будет перезаписано в новой кодировке ОС DSDOS:

https://forum-img.guitarplayer.ru/2024/02/11/1kfdY.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/cnv/con_cnv.gif)

Утилита анализирует содержимое перед конвертацией, и если кодировка исходного файла уже в формате ОС DSDOS или файл не является текстовым, то выводится сообщение об ошибке и преобразование содержимого файла не производится:

https://forum-img.guitarplayer.ru/2024/02/11/1kinF.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/cnv/con_repcnv.gif)


Преобразование кодировки с образованием нового файла

Утилита позволяет записывать результат преобразования в другой (выходной) файл, при этом содержимое исходного (входного) файла не изменяется. Для этого необходимо в качестве параметров указать два файла - входной и выходной:

https://forum-img.guitarplayer.ru/2024/02/11/1kO5R.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/cnv/con_cnv2.gif)

Если в именах файлов отсутствует явное указание дисков, то их поиск осуществляется на текущем диске, с которого была запущена утилита.

↓↓↓

---------- Post added at 12:48 ---------- Previous post was at 12:00 ----------

Конфигуратор системных переменных ОС DSDOS - «SYSVAR$»

Данное ПО предназначено для опытных пользовaтелей ОС DSDOS и для системных программистов.
Утилита SYSVAR$ позволяет просматривать и изменять значения системных переменных ОС DSDOS.
Интерфейс состоит из единственного экрана, на котором отображены: название программы, список переменных и краткая подсказка по клавишам управления:

https://forum-img.guitarplayer.ru/2024/02/11/1kXLV.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/sysvar.gif)

Для изменения значения переменной необходимо выбрать её с помощью клавиш «↓» / «↑» и нажать пробел, после чего вводится новое значение полностью, включая незначащие нули в адресах и числовых константах. Числовое значение считается введённым сразу после набора всех цифр, нажимать клавишу ВК (Enter) не требуется.
Все изменения делаются во временном буфере программы, для записи изменений в реальные переменные ОС DSDOS необходимо нажать ВК (Enter), после чего программа выходит в ОС. Для отмены текущих изменений необходимо нажать клавишу ЗБ (BackSpace), при этом в программу считываются значения из реальных переменных. Клавишами АР2 (Esc) и F4 осуществляется выход из программы без внесения изменений в системные переменные ОС DSDOS.

Краткий обзор системных переменных. Шестнадцатиричное значение отображает адрес переменной в рабочей странице ОЗУ ОС DSDOS (страница №1).

3F50h Drive BitSTATUS

Биты переменной, начиная с младшего, указывают статус дисков в системе: "0" - недоступен, "1" - доступен.
Биту D0 соответствует диск "A:", биту D1 - диск "B:" и т.д.. Итого в ОС DSDOS доступно для использования восемь дисков (A..H).
Показанное в примере значение 03h (0000 0011 b) означает, что в системе доступны два диска: "A:" и "B:".
Если при "холодном" старте ОС обнаружит наличие контроллера НГМД, то значение переменной будет 0Fh (0000 1111 b), т.о. в системе также будут доступны диски "C:" и "D:".

Если значение переменной равно 00h (недоступны все диски), то при передаче управления процессору команд будет выведено следующее сообщение:

https://forum-img.guitarplayer.ru/2024/02/11/1kjf2.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/31-nodrvs.gif)

После нажатия на любую клавишу будет выполнен "холодный" перезапуск ОС.

Начальное значение переменной формируется при "холодном" старте ОС DSDOS по факту проверки наличия RAM-диска и НГМД.

3F51h AutoStart drive

Имя диска (латинская буква в кодировке ASCII), на котором осуществляется поиск файла автозапуска - "EXT$".
Значение по-умолчанию: "B" (RAM-диск).

3F52h CCP last drive

Имя текущего диска (латинская буква в кодировке ASCII) процессора команд ОС DSDOS.
Значение по-умолчанию: "A" (ROM-диск).

3F53h Reserved value

Переменная зарезервирована. В данной версии ОС DSDOS не используется.

3F54h Begin ROM-drive

Адрес начала файлов в ROM-диске. В ПЗУ первые 2 Кб (адреса 0000..07FFh) занимает загрузчик ОС DSDOS, который считывается и запускается программой "Монитор-2" при аппаратном сбросе ПРК или при передаче управления по адресу F800h.
Файлы ROM-диска следуют в ПЗУ сразу после загрузчика, поэтому по-умолчанию значение переменной равно 0800h.

Для примера, можно изменить значение переменной на 3555h (актуально только для сборки ROM-диска из заглавного поста!), в результате в каталоге ROM-диска будут скрыты системные файлы ОС DSDOS.

3F56h Standard fonts

Переменная содержит адрес размещения в ОЗУ страницы №0 стандартного знакогенератора программы "Монитор-2".
В виду отсутствия кода полноценной ОС ORDOS, появилась возможность разместить его с адреса BB00h (значение по-умолчанию), т.о. выделив пользователю ОЗУ 0000..BAFFh. Перенос знакогенератора осуществляет загрузчик ОС DSDOS при "холодном" старте.

3F58h Ex. GRAPH fonts

Переменная содержит адрес размещения в ОЗУ страницы №1 расширенного знакогенератора ОС DSDOS.
Значение по-умолчанию: 7800h.

3F5Ah Video scr. mode

Переменная содержит код текущего видеорежима ОС DSDOS. Данное значение записывается в порт F8h при передаче управления процессору команд ОС DSDOS.
Значение по-умолчанию: 06h (16-цветный режим, палитра №0).

3F5Bh Scr/simb. color

Переменная содержит текущий цвет экрана ОС DSDOS. Используется при очистке экрана командой "N[xx]" ОС DSDOS.
Значение по-умолчанию: 1Eh (жёлтые символы на голубом фоне).

3F5Ch CCP cursor type

Переменная содержит код символа курсора процессора команд ОС DSDOS.
Значение по-умолчанию: 00h (значёк "_").

3F5Dh FDD save verify

Переменная определяет режим при операциях записи на НГМД: 00h - без проверки, 01h - с проверкой.
Проверка осуществляется контрольным считыванием записанного сектора, и если записываемый сектор "битый", то он помечается в FAT как сбойный, и делается попытка записи в следующий свободный сектор. Включение данной опции ощутимо увеличивает время записи на ГМД, но гарантирует успешность записи данных.
Значение по-умолчанию: 01h (проверка записи включена).

3F5Eh FDD #0 pos.rate

Переменная содержит значение времени позиционирования головок НГМД для накопителя №0 (диска "C:").
Меньшее значение соответствует меньшей задержке, т.е. максимально быстрому позиционированию, и наоборот.
Значение по-умолчанию: 00h (максимально быстрое позиционирование).

3F5Fh FDD #1 pos.rate

Переменная содержит значение времени позиционирования головок НГМД для накопителя №1 (диска "D:").
Меньшее значение соответствует меньшей задержке, т.е. максимально быстрому позиционированию, и наоборот.
Значение по-умолчанию: 00h (максимально быстрое позиционирование).


↓↓↓

Denn
09.04.2015, 17:41
Утилита шифрования текстовых файлов - «PSWD$»

Данная утилита производит кодирование с помощью пароля (шифрование) содержимого текстовых файлов. Кодирование производится проприетарным алгоритмом на основе информации из символьной строки пароля. Минимальное количество символов в пароле - три (меньшее количество не принимается программой), максимальное - десять. Допустимы любые символы, вводимые с клавиатуры. Пароль регистрочувствителен. Алгоритм кодирования не изменяет количество байт исходного текста, однако размер закодированного файла больше исходного на 15 байт из-за добавляемой сигнатуры и служебной информации. Пароль в каком-либо виде в зашифрованном файле не хранится! В независимости от сложности/формы пароля и содержимого исходного текстового файла, информация в зашифрованном файле не имеет ничего общего с исходной, и без обратной расшифровки с помощью правильного пароля её прочтение не возможно.
Расшифровка производится симметричным алгоритмом, успешность процесса определяется с помощью контрольной суммы восстановленной информации.

Запуск утилиты PSWD$ без параметров выводит подсказку:

https://forum-img.guitarplayer.ru/2024/02/11/1y0Vc.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_hlp.gif)

Кодирование (шифрование) текстового файла

Для шифрования текстового файла необходимо вызвать утилиту с именем текстового файла в качестве параметра:

L PSWD$ B:TEXT[.TXT]

Расширение ".TXT" можно опустить, в этом случае утилита сама его подставит.

Для примера возьмём исходный текстовый файл:

https://forum-img.guitarplayer.ru/2024/02/11/1yUvP.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_src.gif)

И зашифруем его паролем "TEST PASS":

https://forum-img.guitarplayer.ru/2024/02/11/1ybjO.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_encpt.gif)

В результате работы утилиты получен файл с именем исходного файла и расширением ".PWD". Содержимое этого файла имеет следующий вид:

https://forum-img.guitarplayer.ru/2024/02/11/1ye5T.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_pwd.gif)

Как видим, в файле присутствует сигнатура программы-шифровальщика "PSWD v2.0" и закодированная информация, не имеющая ничего общего с исходной.


Декодирование (расшифровка) текстового файла

Для обратного процесса расшифровки текстового файла необходимо вызвать утилиту с именем зашифрованного файла в качестве параметра:

L PSWD$ B:TEXT[.PWD]

Как видим, расширение ".PWD" также можно опустить, в этом случае утилита сама его подставит. Если на диске также присутствует файл с таким именем и расширением ".TXT", то приоритет будет первому варианту, т.е. сначала будет поиск файла с расширением ".PWD" и предложена процедура его расшифровки. Для определённости процесса следует указывать расширение.

Итак, попробуем расшифровать закодированный ранее текстовый файл. Сначала попробуем ввести неправильный пароль:

https://forum-img.guitarplayer.ru/2024/02/11/1yzTo.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_errpwd.gif)

Как было сказано выше, с помощью контрольной суммы восстановленной информации утилита определяет корректность пароля при расшифровке.

Теперь вводим правильный пароль:

https://forum-img.guitarplayer.ru/2024/02/11/1yAff.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_okpwd.gif)

Утилита сама формирует расширение ".TXT" у выходного файла, который получается после расшифровки.
У нас на диске "B:" остался исходный файл "TEXT.TXT", поэтому утилита обнаружит файл с таким же именем и предложит перезаписать результат декодирования поверх:

https://forum-img.guitarplayer.ru/2024/02/11/1ylA4.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_over.gif)

Соглашаемся (нажимаем клавишу "Y"), и получаем файл с результатом расшифровки:

https://forum-img.guitarplayer.ru/2024/02/11/1yoSz.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_decpt.gif)


Утилита работает только с текстовыми файлами. Другие типы файлов, например, файлы программ она не обрабатывает:

https://forum-img.guitarplayer.ru/2024/02/11/1yqVs.png
альт.ссылка на изображение (http://www.denn.ru/8bit/orion/soft/dsdos/pswd/pswd_ertyp.gif)

Если в имени обрабатываемого файла опущено явное указание диска, то поиск/сохранение файла осуществляется на текущем диске, с которого запускается утилита. Если требуется, чтобы выходной файл был записан на диск отличный от диска размещения исходного файла, то вторым параметром указывается диск назначения.

↓↓↓

Denn
05.05.2015, 13:54
Всем доброго! Итак, жизнь не стоит на месте, после почти 15-летнего перерыва ОС DSDOS продолжила своё развитие :v2_dizzy_step:
Глобальное изменение концепции в связи с переосмыслением бытия :) А именно, теперь ОС DSDOS стала Русской! Отныне никакой "американщины", для русского ПРК - русская ОС :v2_dizzy_army:

Текущая версия русифицированной ОС: DSDOS v3.7r.

Образ ROM/RAM-диска с пакетом прикладных программ и утилит на русском языке можно загрузить тут - dsdos37r.zip (http://www.denn.ru/orion/dsdos/dsdos37r.zip).

Процесс локализации оказался сложнее, чем предполагалось, поэтому он занял продолжительное время, а системное ПО притерпело довольно серьёзные изменения, в связи с чем могут быть выявлены возможные "глюки", поэтому образ по вышеприведённой ссылке вероятно будет обновляться.

Из "вражеского наследия" по понятным причинам остались только файловая система, однобуквенные команды ОС на английском языке, ключи-параметры запуска программ и утилит, управляющие команды в текстовом редакторе "Gemini-EDIT" и Ассемблере. В подсказках остались только названия функциональных клавиш стандартной отечественной клавиатуры "РК-86".

Касательно новой версии ОС далее будут описаны только характерные отличия от базовой "английской" версии, описанной в начале темы.

ROM/RAM-диск в терминологии ОС DSDOS v3.7r называется "ЭЛ/ДИСК", т.е. электронный диск. А диск "B:" (в расширенном ОЗУ ПРК "Орион") - "квазидиск". Чтобы не было путаницы.

В запросах ПО вида "Y/N ?" ранее утвердительным ответом считалось только нажатие на клавишу "Y" (текущие язык и раскладка значения не имеют). В русской версии ОС аналогичный запрос выглядит так: "Да? [ВК]". Положительным ответом являются три варианта: 1) клавиша "Ввод" (далее - [ВК]), 2) клавиша "Д" ("D" - в латинской раскладке) и 3) клавиша "Y" ("Ы" - в русской раскладке) для совместимости со старыми привычками пользователей английских версий ОС и прикладного ПО.

По-умолчанию загрузчик ОС DSDOS v3.7r не показывает меню выбора источника загрузки ОС, а сразу загружает ОС из ROM-диска (точнее, ЭЛ/ДИСК'а):

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/boot.gif

Для вызова меню выбора источника загрузки ОС необходимо при включении ПРК или при перезагрузке удерживать нажатой клавишу [НР] ("Shift"):

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/boot_menu.gif

Далее процесс загрузки аналогичный:

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/boot2.gif

Удерживание любой символьной клавиши в процессе загрузки позволяет приостановить быстрое исчезание информации загрузчика о найденных дисках.

Как и ранее, после "холодной" загрузки попадаем в экран приветствия ОС DSDOS:

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/dsdos.gif

На диске присутствует текстовый файл DISKINFO, содержащий информацию о сборке ЭЛ/ДИСК'а:

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/dsdos_info.gif

Датой по-умолчанию (после "холодной" загрузки) является дата сборки ОС.

Отображаемая ёмкость ЭЛ/ДИСК'а отличается от полных 64 Кб, т.к. в данной версии по-умолчанию скрыта область системных файлов самой ОС. В каталоге диска "A:" эти файлы тоже не отображаются (но они там есть :)).

Краткая справка по командам ОС теперь тоже, разумеется, на русском языке:

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/dsdos_help.gif

Содержимое диска "A:" текущей сборки включает 40 файлов:

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/dsdos_dir.gif

Из сборки исключены Бейсик и Тетрис, вместо них добавлен авторский Дизассемблер и некоторое кол-во дополнительных системных утилит, о которых будет рассказано позже.

Как показал опыт, при включении ПРК некоторая последовательность действий по инициализации выполняется всегда, поэтому в сборку включён командный (пакетный) файл следующего содержания:

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/dsdos_init.gif

Т.о., при запуске файла "R%" производится форматирование квазидиска, очистка (обнуление) ОЗУ основной страницы и запуск оболочки ОС DSDOS.

продолжение следует...

Vladimir_S
05.05.2015, 14:12
Отныне никакой "американщины",
Точно, я тоже перепишу дос РКшки на русском.

HardWareMan
05.05.2015, 14:25
Я вообще не понимаю, зачем вообще нужно было ингришифицировать?

Denn
05.05.2015, 15:40
Я вообще не понимаю, зачем вообще нужно было ингришифицировать?

Согласен. Но тогда (в конце 90-хх) страдал "юношеским максимализмом", как и многие с открытым ртом смотрел на западные технологии, "у них там всё круто"... "ПО на русском - "совок"" и т.п.. В общем, слава богу, переболел этой мутотой :)

П.С. не инглишифицировал, а создавал с нуля с "вражеским" оформлением. Мышление было на инглише...

---------- Post added at 15:40 ---------- Previous post was at 14:46 ----------

Немного скриншотов:

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/sysvar.gif

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/date.gif

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/dc.gif

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/ed.gif

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/ed_cfg.gif

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/calc.gif

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/fc.gif

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/store.gif

http://www.denn.ru/8bit/orion/soft/dsdos/v37r/link.gif

***

zx_
06.05.2015, 13:50
В общем, слава богу, переболел этой мутотой
туда сюда, обратно... мудрость гласит-английский международный компьютерный и научный язык, по поводу собственной крутизны следует помнить разрыв между вм580
и ... здесь по вкусу процессор вашего смарта

HardWareMan
06.05.2015, 16:21
Когда я сказал "ингришифицировать" я имел в виду именно "ингриш (https://ru.wikipedia.org/wiki/Engrish)", т.к. уровень знания английского школьников-программистов был соответствующим. Впрочем, у студентоты он был не намного выше школоты.

Denn
06.05.2015, 16:51
мудрость гласит-английский международный компьютерный и научный язык

"Мудрость", видимо, английская :) "Британские учёные" (С)

ОРИОН-128 никогда не станет международным, это именно чисто русский ПРК, поэтому никакого здравого смысла в англоязычном ПО для него нет, имхо.


по поводу собственной крутизны следует помнить разрыв между вм580
и ... здесь по вкусу процессор вашего смарта

Эту фразу я не понял. О чём она?

Stampmaker
03.10.2015, 09:57
В посте #24 в списке файлов диска А некоторые имена дублируются.
Ошибка?
Или так и должно быть?

---------- Post added at 09:57 ---------- Previous post was at 09:37 ----------

И ещё вопрос.
Согласно этому

》》Программы пользователя, работающие в дополнительной странице ОЗУ №1 (страница размещения ОС DSDOS), должны обращаться к процедурам CONIO по адресу 6000h. Вызов необходимой процедуры осуществляется занесением в аккумулятор кода процедуры, а в остальные регистры МП необходимых данных, после чего производится CALL–вызов процедуры CONIO. Результаты работы процедур возвращаются в соответствующих регистрах МП. 《《


если PENX сохранит картинку, то DSDOS её не обнаружит, я правильно понимаю?

Denn
03.10.2015, 12:53
Stampmaker, спасибо за обнаружение неточности!

Все 40 файлов не помещаются на экран Ориона, поэтому я схитрил: склеил картинки двух орионовских экранов в фотошопе для получения как бы единого списка. С местом склейки я малёха промазал )) Просто забыл обрезать..

---------- Post added at 12:53 ---------- Previous post was at 11:51 ----------

Вопрос по PENX не понял. Точнее, не увидел связи с процитированным.

Родные чтение/запись в PENX'е работать не будут, т.к. используют произвольный доступ к файлу (ОС выдаст ошибку, т.к. такого функционала в ней нет).

Но считать и сохранить экран можно без проблем через Меню Пользователя ОС ;)

Denn
14.10.2015, 12:45
Добавочка к посту Утилита обмена файлами с IBM-совместимым ПК - «LINK$» (http://zx-pk.ru/showpost.php?p=795695&postcount=21)

Случайно обнаружил вариацию утилиты для IBM-PC, которая работает с файлами формата *.BRU. Я совершенно забыл, что написал её в своё время (видимо, для заброса на Орион софта из интернетов).

Архив с программой можно загрузить тут - http://denn.ru/8bit/orion/soft/dsdos/link/bru.rar

В архиве также присутствует исходник на СИ++, если кому-то интересно))

Параметры вызова утилиты такие же, как и у LINK.EXE.

Со стороны Ориона соединение осуществляется с помощью той же утилиты LINK$.

П.С. в планах сделать обмен в виде подключаемого виртуального диска в DSDOS и WIN-версии приложения на IBM-PC.
П.П.С. есть идея создания "облачного" хранилища, но тут уже нужно подключать знатоков программирования под интернет-технологии, в этом я не силён /-)

Error404
14.10.2015, 16:35
П.П.С. есть идея создания "облачного" хранилища, но тут уже нужно подключать знатоков программирования под интернет-технологии, в этом я не силён /-)


Облачное хранилище - это тема. И как хранилище, и как центро общего доступа (взамен кучки личных файловых серверов, которые то сдохнут, то покерятся, как к примеру моя страничка на "бесплатнике").
Но тут конечно нужен TCPIP. Потому что это единственный вариант иметь доступ к хранилищу реально из любой точки шарика, а не в пределах метра кабеля RS-232. :) И реализовать это вполне реально, т.к. клиент можно пилить на несложных протоколах, для которых Z80 хватит за глаза, это ж не парсер HTML5.0 писать.

Но нужны программисты, конечно. А с этим совсем туго. Даже для более распространенного Спектрума их осталось полтора человека (и те срутся между собой), чего уж говорить об Орионе.

Denn
14.10.2015, 17:00
Error404, не-не, речь не о прямом доступе в облако прямо с Ориона, никаких Z80 и 8-бит-эзернет, упаси боже. Только тру-Орион в своём первозданном виде ))

Смысл в следующем. Орион подключается к "писюку" тем же линкером по RS232, программно в ОС организуется виртуальный диск, с которым можно работать как с любым другим диском в системе. Маленькая утилитка с помощью команд писюку позволяет выбирать тип виртуального источника: локальный диск писюка или "облако". Облако - это по сути тот же локальный диск, только его содержимое синхронизируется с облачным хранилищем в интернете, т.е. типа большой файлопомойки, доступ к которой по такой технологии есть у всех Орионщиков. Дальше эту тему можно развить в сторону виртальных аккаунтов, чатов и т.п.. А можно и не развивать :)

Тобишь аппаратно это так: Орион - rs232 - писюк - Интернет. Программно: через RS232 организуется некий протокол, который позволяет работу с файлами, а все остальные надстройки уже идут на уровне пересылки данных через эти файлы. Софт на писюке обслуживает "WAN", а с Орионом только перекидывается файлами.

Фишка в минимуме аппаратных доработок самого Ориона, нужно только сделать авторский RS232. Остальное всё делается программно, а "нереальные планы" возлагаются на писюк. На писюке вообще никаких аппаратных доработок не требуется.

В программном смысле тоже минимум напрягов: для организации чего-либо нового достаточно допилить программу-прослойку на писюке (и то, если потребуется расширение протокола с внешним миром), а на Орионе вообще банальная работа с файловой системой: кидаем файлы-запросы на диск, смотрим ответные файлы, которые появляются на диске извне.

---------- Post added at 17:00 ---------- Previous post was at 16:44 ----------


Но нужны программисты, конечно. А с этим совсем туго.

Нужно всего-то полтора человека :)
По сути нужно найти программиста, который напишет синхронизацию локальных файлов с облачными. Всё!
А может и вообще есть готовое решение этого вопроса, тогда и IT-программист не нужен :)

Error404
14.10.2015, 18:47
По сути нужно найти программиста, который напишет синхронизацию локальных файлов с облачными. Всё!
А может и вообще есть готовое решение этого вопроса, тогда и IT-программист не нужен :)

программист тут точно не нужен. Такой софт наверняка есть.

Stampmaker
17.10.2015, 09:23
Можно и я вставлю свои 5 копеек, как бы я сделал, учитывая личные прогспособности?

Допустим, есть облако на яндексе. Хорошее или плохое, не суть.
У него есть свой клиент для писюка.
Для работы с облаком на винте делается папка, куда кидаются файлы и которые этот клиент сам грузит в сеть.

Так вот.
Можно написать программу, которая будет промежуточным звеном между Орионом с его RS232 и той самой "облачной" папкой клиента на винте.
Таскай только мышью имена файлов из одного списка в другой, а остальное сделается само.

Т.е. что-то вроде Тотал Коммандера: левая панель - это приёмо-передатчик Ориона, правая - папка облака.

Denn
17.10.2015, 11:33
Stampmaker, собственно говоря, примерно об том и речь. Только хочется не плодить кучу софта, а сделать всё в рамках одной специализированной проги, которая будет работать с Орионом через COM-порт и с интернет-протоколами (FTP, "облаками" и т.п.). Управление прогой будет осуществляться полностью командами с Ориона, а информация (файлы на инет-ресурсе) будет доступна через виртуальный диск.

b2m
17.10.2015, 18:56
Добавочка к посту Утилита обмена файлами с IBM-совместимым ПК - «LINK$» (http://zx-pk.ru/showpost.php?p=795695&postcount=21)
Добавочка к добавочке.

В последней версии DOSBox 0.74 наконец-то правильно заработал один параметр - transparent. Теперь символы FF не дублируются при передаче через COM-порт (этот символ используется для контроля DTR/RTS).

В результате наконец-то заработала передача файлов через LINK$.

В dosbox.conf нужно найти строчку serial1=dummy и исправить на

serial1=nullmodem transparent:1

А в файле Orion-128.cfg моего эмулятора добавить ВВ51 следующим образом:

comport : K580ww51 {
connect="tcp:23:127.0.0.1"
}

extmap : MemMap2 {
map[00-03]=dsk.data
map[04]=reg1
map[08]=reg2
map[10-13]=dsk.data
map[14]=reg3
map[20]=reg3
map[40-41]=comport.data
}


Теперь, если сначала запустить DOSBox, а потом мой эмулятор, можно передавать файлы при помощи программы LINK.

b2m
17.10.2015, 21:40
Немного доделал эмулятор. Основная масса пользователей изменений не заметит, поэтому об изменениях - только тут. Теперь ВВ51 поддерживает перенаправление на реальный COM-порт или named pipe.

Чтобы эмулятор использовал реальный COM-порт, в конфиге нужно указать:

comport : K580ww51 {
connect="\\.\COM1"
}

или для перенаправления в pipe:

comport : K580ww51 {
connect="\\.\pipe\MyCoolPipeServer"
}

Это я к чему: можно использовать драйвер com0com, чтобы отлаживать программу-сервер на компе, работающую через COM-порт с Орионом-128, но вместо реального Ориона-128 подключаться к эмулятору и отлаживать программу-клиент в нём.

Нафига pipe, спросите вы: так уж получилось у меня с отладкой. VMWare-player может перенаправлять COM-порт либо в файл, либо на реальное устройство, либо в pipe. Других вариантов нет. Один эмулятор я гонял в виртуальной винде и коннектился к COM-порту, а другой - на хосте и коннектился к pipe, куда был перенаправлен COM-порт виртуальной винды. Учительская Башкирия-2м на хосте успешно сконнектилась с ученической Башкирией-2м в гостевой винде. :)

Denn
18.10.2015, 10:38
b2m, отличная новость! Проверил - работает. Спасибо.

П.С. для тех, кто не в теме про ДосБокс (таких, как я :)) вот ссылка - http://old-game.org/emulyator-ms-dos-dosbox-0-74.html

Stampmaker
18.10.2015, 11:25
давно не работал с ДосБокс....

b2m
18.10.2015, 12:02
давно не работал с ДосБокс....
А у меня до вчерашнего дня была версия от 2007 года :)

---------- Post added at 14:02 ---------- Previous post was at 14:00 ----------


для тех, кто не в теме про ДосБокс
Вообще-то есть официальный сайт: http://www.dosbox.com/download.php?main=1

Denn
19.10.2015, 11:51
2 b2m. Я уже сделал программный коннект на двух компах и заметил странность: при передаче файла в Орион (эумлятор) всё прекрасно, а при обратной передаче из эмулятора в DOSbox, в конце процесса обмена Орион рапортует об ошибке "Потеря связи!", но при этом под DOSbox'ом файл успешно получен. Как я понимаю, куда-то "зажёвывается" последний байт от писюка к Ориону, который последнему сообщает об успехе приёма данных, и Орион отваливается по тайм-ауту. При настоящем ("железном") линкере такого не происходит.

b2m
19.10.2015, 17:22
А попробуй последнюю версию (от 18.10.2015). Я в связи с добавлением поддержки перенаправления на реальный СОМ-порт кое какие вещи кардинально изменил. Хочется верить, что ничего не сломал.

По поводу "зажёвывается": может таймаут маловат? Возможен вариант, когда мой эмулятор быстрее передаёт, чем принимает DOSbox. Сокет честно накопит данные в буфере и скормит по одному, но на другой стороне в этот момент начинает отсчитываться таймаут. А короткие файлы тоже с такими-же симптомами передаются?

Я на двух компах не тестировал, только с localhost :)

Denn
19.10.2015, 21:45
Я на двух компах не тестировал, только с localhost :)

Я тоже тестил локально, на одном компе эмуль+досбокс. И аналогично на компе в другом месте. А не коннектил два писюка друг с другом ))

Denn
31.10.2015, 11:33
В продолжении темы линковки ПРК Орион с IBM-PC.

Во-первых, обнаружился загадочный и странный баг. В программе LINK$ криво установлены два параметра: конфигурация таймера КР580ВИ53 и константа делителя этого таймера, задающая скорость обмена (9600 Бод).
Первый параметр вместо положенных 36h записывает в таймер 3Eh, что соответствует несуществующему режиму ВИ53 (такого нет ни в одной доке).
Второй параметр вместо расчётного 0Dh имеет значение на единицу меньше - 0Ch.
ПО было написано и отлажено 17 лет назад, поэтому вспомнить какие-либо подробности, почему именно так, не представляется возможным. Тем не менее, 17 лет работало без проблем, и баг-репортов от юзеров не было. В т.ч. работает и в эмуляторе :)
С проблемой столкнулся камрад Stampmaker при коннекте через USB-реализацию COM-порта на ноутбуке - у него работает только с правильными значениями вышеуказанных параметров.
Что ещё более удивительно, с правильным значением константы, задающей скорость протокола, у меня с IBM-PC c трушным хардварным COM-портом не работает! При этом если через терминалку гонять байты с писи на Орион и обратно, то наоборот, корректная передача данных возможна только с верным параметром константы делителя. В общем, чудеса какие-то.

Во-вторых, выяснилось, что если задать константу делителя 09h, то оказывается КР580ВВ51 совершенно замечательно работает с IBM-PC по асинхронному протоколу на скорости 14400 Бод! Это в 1,5 раза быстрее, чем на 9600. Что, в общем-то, - профит.
В два раза быстрее (на 19200 Бод) увы, не получается, т.к. невозможно задать дробную константу (0Dh/2). Для 28800 Бод аналогично - требуется невозможная константа 09h/2.
В настоящий момент ведутся эксперименты по небольшой аппартаной доработке RS-232 на Орионе для возможности работы на больших скоростях (до 56 кБод) - вместо таймера ВИ53, тактирование ВВ51 от отдельного кварцевого генератора.
А пока, предлагаю желающим протестировать на своём железе возможность работы на скорости 14400, и если эксперимент пройдёт успешно, то пересоберу образ ROM-диска с ускоренным в 1,5 раза линкером.

Это программа для тестирования порта RS-232 со стороны Ориона - http://www.denn.ru/8bit/oriserv/testcom.ori
А это ответная часть для IBM-PC - http://www.denn.ru/8bit/oriserv/com-test.exe

Некоторые пояснения. По-умолчанию в обеих программах выбрана скорость обмена 9600 Бод. Для проверки на скорости 14400 Бод необходимо на Орионе задать константу делителя - 09h, а на IBM-PC по кнопке "Настройка" выбрать соотв. скорость. При отправке в Орион строки более, чем из одного символа, необходимо на Орионе включить режим "Дамп" (клавишей F3). В режиме "Дамп" Орион принимает в буфер строку символов произвольной длины (окончание посылки определяется отваливанием по тайм-ауту), после приёма выводит её на экран. По нажатию любой клавиши, Орион выдаёт содержимое буфера в порт RS-232. В режиме "Терм" возможны одновременно приём/отображение одиночных символов из порта и передача кодов нажатых клавиш в порт.

Stampmaker
01.11.2015, 10:00
схема COM-порта для Ориона была опубликована в журнале Радио 1995г, №9, стр.37
кто не смог найти публикацию, вот ссылка на статью
файлы большого размера, по 20 МБ каждая
https://yadi.sk/d/si4mgh7rk9hdW

P.S. это самое лучшее качество сканов, которое я смог найти

Eagle
01.11.2015, 13:08
P.S. это самое лучшее качество сканов, которое я смог найти
Некоторые символы не разобрать.

Stampmaker
01.11.2015, 17:05
Некоторые символы не разобрать.

Другого, увы, нет.
Есть ещё перерисовка от Denn
https://yadi.sk/i/Qae7dHUokA5FE

Denn
11.11.2015, 15:10
Выкладываю чуть с опозданием: релиз DSDOS v3.71r от 05.11.2015

Образ ROM/RAM-диска тут - http://denn.ru/orion/dsdos/dsdos371.zip

Что нового:

+ Автоинициализация (форматирование) квазидиска при включении ПРК;
+ Запуск оболочки (DC$) при первом включении ПРК;
+ Скорость обмена с IBM-PC увеличена до 14400 Бод (утилита LINK$);
+ Доработка авторского программатора ПЗУ (PROG$);
+ Изменение алгоритма определения текущего диска при запуске утилит из ROM/RAM-диска;
+ Добавлена утилита программирования ПЗУ Winbond 27C512;
+ Добавлены утилиты тестирования портов ВВ51 и ВВ55.

Подробнее.

При первом включении и при "холодном" рестарте ПРК, производится автоматическая инициализация квазидиска, т.о. пользователь больше не увидит "мусор" на диске "B:".
Алгоритм инициализации интеллектуальный, т.е. он не отформатирует квазидиск при "холодной" перезагрузке, если там есть файлы и структура данных корректна.

При первом включении ПРК, после появления заставки ОС DSDOS, если нажать на клавишу [F4] или [АР2], вместо поиска на квазидиске файла "EXT$", производится поиск на диске "A:" программы оболочки ОС (DC$) и передача ей управления. Дальнейшие перезагрузки инициируют старт файла "EXT$", который создаёт оболочка или какая-либо другая программа пользователя.
Т.о. если нам требуется оболочка, то после первой загрузки ОС достаточно нажать [F4]. В противном случае, мы не нажимаем [F4], а запускаем другое ПО, и механизм автостарта DC$ больше не будет срабатывать.

Два вышеописанных нововведения позволили отказаться от файла "R%" и, соответственно, от лишних телодвижений при запуске.

Далее. Эксперимент с обменом на скорости 14400 Бод прошёл успешно, в связи с этим были доработаны соответствующие утилиты: LINK$ на Орионе (входит в сборку ROM/RAM-диска) и LINK.EXE на IBM-PC (ссылка для скачивания - http://denn.ru/8bit/orion/soft/dsdos/link/link14400.rar ).
На всякий случай, в LINK$ предусмотрена возможность работы на прежней скорости 9600 Бод, для этого необходимо при запуске утилиты удерживать клавишу [НР] (Shift), при этом для информации на экране будет отображена надпись "BR=9600".

В авторском программаторе ППЗУ РФ2/РФ4 (PROG$) не работал вызов утилит "M128$" и "EDMEM$". Проблема была в том, что в авторской ОС ORDOS имена "M128" и "M128$" считаются равнозначными, и в программе были прописаны сокращённые версии "M128" и "EDMEM", без "$".
в ОС DSDOS "M128" и "M128$" - это строго разные файлы. Имена в программе исправлены, утилиты вызываются. А также, попутно, сделаны следующие доработки:

+ добавлена возможность подгрузки файла прошивки;
+ добавлена команда подсчёта и отображения контрольной суммы данных в буфере программатора;
+ добавлена команда сохранения содержимого буфера в файл на диск;
+ некоторые косметические доработки интерфейса;
+ для отмены операции программирования продублирована клавиша [АР2] (Esc).

Некоторые пояснения по доработкам.
Для подгрузки файла необходимо при запуске в командной строке добавить его полное имя (диск:имя_файла). Диск можно опустить, тогда поиск файла будет осуществлён на текущем устройстве (кроме запуска программатора из ROM/RAM-диска, см. ниже). Размер файла должен чётко соответствовать прошиваемой ПЗУ (2 Кб для РФ2 и 8 Кб для РФ4). Если размер некорректен, то программа "вывалится" с ошибкой. Программа в соответствии с размером файла прошивки сама выберет тип ППЗУ, что будет отображено в верхней строке крупным текстом. После типа ППЗУ будет отображено имя файла прошивки. Файл загружается в буфер №0 программатора и дальнейшая работа - в обычном режиме, как и ранее. После каких-либо изменений информации в буфере (чтение из ПЗУ или ROM/RAM-диска), вместо имени файла появляется сообщение "БУФЕР #0", которое говорит о том, что информация в буфере уже может не соответствовать файлу! Это же сообщение будет при загрузке программатора в обычном режиме - без параметров.
Отображение контрольной суммы данных в буфере производится по команде "K", подсчёт кол-ва байт ведётся в зависимости от выбранного типа микросхемы ППЗУ. Также вывод к/суммы происходит после операций чтения данных из ППЗУ или из ROM/RAM-диска.
Сохранение содержимого буфера производится по команде "S", данные записываются на текущий (или принудительно указанный при запуске в командной строке) диск, в файл с именем "ROM_DATA". Запись производится "поверх", без запросов на удаление прежнего файла с аналогичным именем.

Про утилиту программирования ПЗУ Winbond 27C512 напишу позже, вместе с описанием хардварной части программатора.

Утилиты тестирования портов ВВ51 и ВВ55 представлены файлами "TESTCOM$" и "PORT#F6$", соответственно. Первая позволяет обмениваться символами и дампами с хостом (или самой с собой при наличии перемычек между Rx-Tx и RTS-CTS) в терминальном режиме (например, программа HyperTerminal на IBM-PC), а вторая позволяет программировать линии порта пользователя (#F600) на ввод/вывод, анализировать содержимое и в различных вариациях выставлять отдельные биты.

Претерпел небольшие изменения алгоритм определения текущего диска в утилитах. При запуске утилиты из ROM/RAM-диска, в качестве текущего выбирается по-умолчанию диск "B:", а не реальный текущий "A:". При запуске с любых других дисков (В, С... и т.д.), текущим считается реальный текущий диск. Это позволило упростить работу, т.к. рабочие файлы не могут находиться в ROM/RAM-диске, откуда обычно запускаются утилиты, а чаще всего находятся на квазидиске, т.о. можно опускать указание диска при задании параметров в командной строке.

Ewgeny7
11.11.2015, 16:18
Теперь бы еще набраться времени изучить эту ОСьку хоть немножко, а лучше - попробовать... Так и не читал до сих пор про нее.

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


Образ ROM/RAM-диска тут - http://denn.ru/orion/dsdos/dsdos371.zip
Не дозвониться до твоего сайта.

Denn
11.11.2015, 16:29
Не дозвониться до твоего сайта.

Прям щас из "Теремка" по вафле ткнул - скачалось.

Ewgeny7
12.11.2015, 14:16
Прям щас из "Теремка" по вафле ткнул - скачалось.
Сейчас - скачалось, спасибо! Пойду изучать "пакет из штаба".

Denn
28.11.2015, 03:18
И вновь продолжение темы соединения ПРК "Орион" с IBM-PC по RS-232. Некоторые неудобства, связанные с запуском MSDOS-версии ПО линкера под ОС Windows были решены с помощью разработки Win32-приложения, поддерживающего протокол орионовской утилиты LINK$. Сразу оговорюсь, что данное приложение создано ради поддержки другого протокола, который позволит прозрачную работу из ОС DSDOS с ORI-файлами, хранящимися на IBM-PC, а также на удалённом ресурсе в сети Интернет. Но в качестве "бонуса" приложение поддерживает и протокол утилиты LINK$. Т.е. им можно полноценно пользоваться для приёма и отправки файлов *.ORI, вместо MSDOS'овской утилиты LINK.EXE.

Приложение представляет из себя единственный исполняемый файл "oriserv.exe", который можно скачать тут - http://www.denn.ru/8bit/oriserv/oriserv.exe
Файл нужно поместить в любую удобную папку программ, например в "C:\Program Files\ORI", создать ярлык на рабочем столе для запуска, и приложение готово к работе.
Интерфейс программы простой и интуитивно понятный, все элементы управления имеют всплывающие подсказки на русском языке.

https://forum-img.guitarplayer.ru/2024/02/11/1j92y.png
альт.ссылка (http://www.denn.ru/8bit/oriserv/oriserv01.jpg)

После первого запуска, приложение пытается открыть порт COM1 и настроить его на параметры, аналогичные последней версии программы LINK$ (14400,N,8,1). Если процесс инициализации прошёл успешно, то приложение немедленно готово к приёму/отправке файлов *.ORI. Если в системе несколько COM-портов и для связи с Орионом используется не COM1, то с помощью нажатия на кнопку с изображением инструментов:

https://forum-img.guitarplayer.ru/2024/02/11/1jV1h.png
альт.ссылка (http://www.denn.ru/8bit/oriserv/oriserv02.jpg)

в открывшемся окне можно выбрать и настроить соответствующий COM-порт. Выбранный порт отображается в левой части строки состояния внизу окна приложения.

Также с помощью соответствующей клавиши можно выбрать каталог, в котором содержатся рабочие файлы *.ORI:

https://forum-img.guitarplayer.ru/2024/02/11/1js0P.png
альт.ссылка (http://www.denn.ru/8bit/oriserv/oriserv03.jpg)

После выхода из приложения, путь к выбранному каталогу запоминается в конфигурационном файле "oriserv.ini" в каталоге приложения. По-умолчанию, при первом запуске, в качестве текущего каталога выбран каталог, откуда было запущено приложение.
Если в текущем каталоге есть файлы *.ORI, то они появятся в списке в основном поле приложения. Обновление списка происходит автоматически при каких-либо изменениях в каталоге, т.е. не важно каким способом попал файл в рабочий каталог (загружен по RS-232 самим приложением или скопирован с помощью средств ОС Windows), если его содержимое соответствует формату *.ORI, то он немедленно отобразится в списке.


Приём файлов от ПРК "Орион"

Запущенное приложение всегда находится в режиме приёма данных из текущего активного порта. При получении запроса на приём файла, в правой части строки состояния внизу приложения отобразится заголовок передаваемого файла в формате ОС DSDOS и будет происходить процесс приёма файла, по окончании которого данные будут сохранены в текущий рабочий каталог в формате *.ORI и в списке появится соответствующий новый файл. Если файл с таким же именем уже есть в списке, то он будет перезаписан поверх!


Отправка файлов в ПРК "Орион"

Для отправки файла, необходимо его выделить (мышью или клавишами курсора) и нажать Ctrl+S. Также отправка возможна по двойному щелчку мышью на выбранном файле в списке или через контекстное меню:

https://forum-img.guitarplayer.ru/2024/02/11/1j7pO.png
альт.ссылка (http://www.denn.ru/8bit/oriserv/oriserv04.jpg)

При выделении файла в списке, в правой части строки статуса выводится заголовок в формате ОС DSDOS. После отправки в статус выводится сообщение об успешном завершении процесса передачи по RS-232. В силу ограничений протокола, приложение не имеет возможности узнать о возможных ошибках при попытке ПРК "Орион" сохранить принятый файл, поэтому отчёт об успешности касается только процесса отправки по RS-232.
Если имеются какие-то проблемы с линией связи или на ПРК "Орион" не запущена в режиме приёма утилита LINK$, то при попытке отправить файл приложение выдаст сообщение об ошибке:

https://forum-img.guitarplayer.ru/2024/02/11/1jFaT.png
альт.ссылка (http://www.denn.ru/8bit/oriserv/oriserv06.jpg)

Приложение можно свернуть (в трей), оно при этом будет продолжать принимать файлы в невидимом режиме. Развернуть можно двойным щелчком по значку приложения в трее или через соответствующее контекстное меню:

https://forum-img.guitarplayer.ru/2024/02/11/1jKOo.png
альт.ссылка (http://www.denn.ru/8bit/oriserv/oriserv05.jpg)

В файле конфигурации также запоминается положение окна приложения на рабочем столе.

П.С. Отдельное спасибо Сергею (ака Stampmaker) за полезные советы при создании приложения =)
П.П.С. Ещё одним бонусом добавлена поддержка файлов *.BRU (только для выгрузки в ПРК "Орион")

Denn
23.12.2015, 01:56
После некоторых небольших "косметических" доработок, под окончание года, выкладываю сборку-релиз DSDOS v3.72r от 09.12.2015

Образ стандартного орионовского 64-килобайтного ROM-диска с ОС и набором утилит доступен по ссылке - http://denn.ru/orion/dsdos/dsdos372.rar

Для всех утилит, использующих подгрузку рабочих файлов через параметр командной строки, доработан механизм определения текущего диска при запуске утилиты с диска "A:" - диском по-умолчанию считается квазидиск, а точнее диск, определённый в системной переменной 3F51h (Диск файла EXT$).

Также доработана утилита LINK$. Изменения коснулись настройки скорости обмена. Выбранный ранее алгоритм пресетного изменения скорости обмена на 9600 Бод с помощью удержания клавиши НР (Shift) при старте, на практике оказался неудобным и маловариативным. Теперь, как и ранее, по-умолчанию скорость обмена 14400 Бод, но её можно изменить практически на любую, которую позволяет сгенерировать таймер (КР580ВИ53) задающего генератора тактовой частоты. Изменение производится с помощью следующего вызова утилиты:

L LINK$ /ss

где ss - значение [2..99] константы делителя частоты (КР580ВИ53) в десятичной системе.
Для скорости 2400 Бод ss=52, для 4800 Бод ss=26, для 9600 Бод ss=13, для 14400 Бод ss=9.
Скорость 14400 Бод является предельной устойчиво работоспособной для схемы на КР580ВИ53+КР580ВВ51А.
При изменении частоты задающего генератора с 2 МГц на 1,8432 МГц появляется возможность работать на скорости 19200 Бод (ss=6), а более высокие скорости уже не "тянет" КР580ВВ51А :(

При правильно указанных параметрах, новое значение константы делителя записывается в файл LINK.INI (на диске "B:"), и при последующих запусках утилиты LINK$ в режимах приёма/передачи используется это значение. Если утилита запускается не из ROM-диска, а, например, с дискеты, то файл конфигурации сохраняется на текущем устройстве, т.о. скорость достаточно задать один раз.

Теперь несколько слов о планах дальнейшего развития.
Концепция DSDOS развивает идеологию ORDOS: хранение всех необходимых утилит и программ на ROM-диске, и к сожалению, на данном этапе стало чётко понятно, что 64 Килобайт стандартного ROM-диска ПРК Орион не достаточно. В связи с этим, данный релиз ОС как раз является завершающим для стандартного железа, а именно 64 Кб ROM-диска, поэтому я назвал её 16-битной версией.

На данный момент уже есть рабочая версия (3.73r) с т.н. 20-битной адресацией ROM-диска, которая поддерживает ПЗУ объёмом до 512 Кб (скриншот (http://denn.ru/8bit/orion/soft/dsdos/rom512k_ready.jpg)). Программно адресация линейная, т.е. в системе ROM-диск по-прежнему видится, как диск "A:", но его объём в 8 раз больше стандартного авторского диска ПРК Орион. Аппаратно в схемотехнике стандартного ROM-диска добавлена "надстройка" в виде регистра-защёлки старшей части адреса на микросхеме 1533ТМ8 (или ТМ9), запись в этот регистр стробируется через неиспользуемую линию C2 порта клавиатуры (на плате кинут провод от линии C2 порта #F4 на контакт B10 разъёма порта #F5). Четыре бита старшей части адреса берутся с линий C1..C4 порта #F5. Функционально аналогичная схемотехника уже реализована в Гибридном Электронном Диске (http://zx-pk.ru/threads/25367-gibridnyj-elektronnyj-disk-dlya-prk-orion.html), т.о. ROM-часть уже имеет программную поддержку в ОС DSDOS v3.73r. Схему ROM-диска, как отдельного самостоятельного устройства я отрисую и выложу чуть позже.
Дальнейшие версии ОС DSDOS будут рассчитаны на расширенный, 20-битный вариант ROM-диска, а образ соответственно будет занимать объём более 64 Кб. Но поддержка ROM-диска с классической 16-битной схемотехникой всегда будет автоматической!
Идеологически, по концепции ORDOS расположение файлов в ROM-диске линейное, а признаком конца является байт FFh в имени следующего файла. И если при сканировании каталога ОС встречает признак конца в пределах 64 Кб, то аппаратная реализация ROM-диска не имеет значения. Т.о. в варианте расширенного ROM-диска возможна установка микросхем ПЗУ любого требуемого размера в пределах 512 Кб. На самом деле программно поддерживается адресация до 1024 Кб ПЗУ, но объём более 512 Кб не имеет смысла, поэтому введено условное ограничение в 512 Кб. Т.е. если каким-то образом удастся "впихнуть" файлы общим объёмом более 512 Кб, то ОС их увидит и успешно прочитает. Тут скорее ограничивающим фактором будет лимит по количеству: не более 255 файлов на диске.

В настоящий момент ведётся работа по программной реализации виртуального диска (зарезервировано имя - "G:"), который обеспечит "прозрачную" работу с удалённым накопителем по интерфейсу RS-232. В качестве удалённого накопителя предполагается использование IBM-PC совместимого ПК, а в последствии возможно специализированного сетевого устройства расширения. На IBM-PC делается интерфейс к облачному хранилищу, например к Google-Drive, и т.о. в ОС DSDOS на ПРК Орион становится доступным глобальный сетевой диск, доступ к которому полностью аналогичен, как и к любым другим дискам в ОС.
По началу, реализация виртуального диска будет в виде надстройки - устанавливаемого драйвера. А затем, по мере развития, будет интегрирован в ОС. Также на начальном этапе будет использован родной RS-232 на связке КР580ВИ53+КР580ВВ51А со скоростью обмена 14400 Бод. Впоследствии будет сделана аппаратная доработка: порт COM2 на микросхеме 16C550, с возможностью работы на скорости 115200 Бод.

Планируется поддержка RAM-диска на статическом ОЗУ объёмом 1..4 Мб (зарезервировано имя - "E:"), как альтернатива дисководу в качестве TEMP-диска. А для бэкапа (непосредственная альтернатива дискетам) планируется поддержка карт SDHC (зарезервировано имя - "F:"). Если хватит "запала", то возможно будет организована поддержка винчестеров (зарезервировано имя - "H:"), хотя большого смысла для Ориона в них честно говоря не вижу.

Примерно как-то так :)

Error404
23.12.2015, 13:30
Дэн, будь другом, начни с SDHC. :)
А то никак руки не доходят допилить (запалу нет чота последнее время)

Denn
23.12.2015, 17:20
Error404, в приоритете виртуальный диск и "метровая рама", после - SDHC. Есть подозрение, что код поддержки флэшек займёт очень много места (я пытался начинать курить "Simplified Specification" (https://www.sdcard.org/downloads/pls/simplified_specs/), было "очень страшно", если честно :)), и придётся "что-то думать": либо отказываться например от поддержки дискет, либо выдумывать хитрости для изыскания ресурсов ОЗУ. К тому же хочется придумать несложный аппаратный ускоритель, ибо побитная работа через ВВ55 скорее всего будет слишком печальна. В общем, SD'шки не настолько насущны пока что. Но доберусь обязательно! Запас 2-гиговых флэшек "для опытов" прикупил, интерфейс спаян уже давно.

alx32
27.12.2015, 23:11
Может лучше CompactFlash использовать в режиме IDE, 4Gb пока ещё можно достать. По моему это самый лучший и быстрый вариант для Ориона...

P.S. Схему контроллера я приводил здесь на форуме, можно и её использовать...

Denn
28.12.2015, 08:55
Может лучше CompactFlash использовать в режиме IDE, 4Gb пока ещё можно достать.

Даже не представляю где можно достать. Год назад я с трудом вылавливал 2-х гиговые SDHC. Прогресс и маркетинг неумолимы..

Vasily
28.12.2015, 09:17
Я на Ali заказывал CompactFlash по 512М CF (http://ru.aliexpress.com/item/Industrial-Use-Compact-Flash-CF-128MB-256MB-512MB-1GB-2GB-Memory-Card-Price-SPCFXXXXS/300331379.html). С ними проще, насколько я понял они используются в оборудовании, поэтому до сих пор всплывают. А вот с микро SD не повезло - пришел откровенный брак, пришлось делать возврат денег.

Error404
28.12.2015, 12:33
У меня год назад хату обнесли, воры в числе прочего унесли все SD-карты, что нашли, а CF не взяли - видимо не поняли что это такое. :)

Denn
28.12.2015, 15:19
Просто воры хорошо осведомлены что можно быстро и эффективно слить, а что нет. Орион, наверное, тоже не взяли? ;)

Error404
28.12.2015, 18:52
Не взяли. :)

sergey2b
28.12.2015, 19:06
подскажите пожалуйста если сейчас покупать CF карты то какого лучше объема 128 or 512mb
по другому есть ли сейчас девайсы для ретро ПК которые требуют небольших CF карт
я использую DIVide для zx для него всеравно 128 or 512, а для Ориона или РК ?

alx32
02.01.2016, 17:03
Попытался запустить последнюю версию на v512, не вышло. На экране проскакивают заставка с версией DSDOS, список дисков. А через секунду жёлто-голубой мусор на экране. После сброса только заставка с дисками и зависон, ни на одну клавишу не реагирует...

Error404
02.01.2016, 20:21
Попытался запустить последнюю версию на v512, не вышло. На экране проскакивают заставка с версией DSDOS, список дисков. А через секунду жёлто-голубой мусор на экране. После сброса только заставка с дисками и зависон, ни на одну клавишу не реагирует...

Варианты тут возможны только по части ЦПУ (если Z80), версии ПЗУ Монитора, работы с портами (с Z80 по питерской схеме не проходит малополезный хак с 16-битным OUT 8-битной командой)

alx32
02.01.2016, 20:43
Монитор3 под Z80 к стати у меня стоит. Может из-за него глюки... А может и из-за Z80Card...
Попробую обратно 580-й воткнуть...

Denn
02.01.2016, 22:10
Попытался запустить последнюю версию на v512, не вышло. На экране проскакивают заставка с версией DSDOS, список дисков. А через секунду жёлто-голубой мусор на экране. После сброса только заставка с дисками и зависон, ни на одну клавишу не реагирует...

У меня была точно такая же фигня при попытке взлёта с ПЗУ "МОНИТОР-4". Как показало расследование, в М4 вместо подпрограмм записи/чтения верхней границы ОЗУ пользователя (F830h и F833h), там зачем-то повесили нечто на тему записи данных в произвольную страницу ОЗУ... DSDOS при загрузке обращается к этим подпрограммам МОНИТОРа по прямому назначению - для установки верхней границы ОЗУ пользователя, в результате с М4 получается полный трэш ((
С "МОНТИОР-3" (под ВМ80) я проверял в эмуляторе - там полёт нормальный.

П.С. DSDOS пока умеет работать только с клавиатурой РК-86, под 7007-ю не затачивал, т.к. нет таковой железной - не на чем проверить ((

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


Монитор3 под Z80 к стати у меня стоит. Может из-за него глюки... А может и из-за Z80Card...
Попробую обратно 580-й воткнуть...

Попробуйте в момент загрузки зажать любую клавишу и не отпускать, это приостановит экран загрузки и там можно будет спокойно всё прочитать. Если таким образом не улетим в мусор, то 99,9% проблема в неправильной работе вышеуказанных подпрограмм ПЗУ Монитора.

Тип процессора точно не имеет значения, т.к. код DSDOS написан полностью на ассемблере ВМ80, который, как известно, совместим с Z80. Адресация портов как памяти - да, используется (при работе с ВВ55), а также используется и адресация через IN/OUT (порты #F8 и #F9).

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

Можно посмотреть EDMEM'ом что делает подпрограмма "Монитор" по адресу F833h. Там должен быть следующий код: C3 xx F9, а по адресу F9xx что-то типа того: 22 yy F3 2A yy F3 C9.
Ещё DSDOS при старте обращается к подпрограмме распаковки внутреннего знакогенератора "Монитора" - F82Dh.

Error404
02.01.2016, 23:21
У меня была точно такая же фигня при попытке взлёта с ПЗУ "МОНИТОР-4". Как показало расследование, в М4 вместо подпрограмм записи/чтения верхней границы ОЗУ пользователя (F830h и F833h), там зачем-то повесили нечто на тему записи данных в произвольную страницу ОЗУ... DSDOS при загрузке обращается к этим подпрограммам МОНИТОРа по прямому назначению - для установки верхней границы ОЗУ пользователя, в результате с М4 получается полный трэш ((
С "МОНТИОР-3" (под ВМ80) я проверял в эмуляторе - там полёт нормальный.


В Мониторах-3/Z80 код оптимизирован на предмет лишнего, я помнится сразу обратил внимание на то, как там обрабатывается RAMTOP:


AF830: LD HL,0BFFFH ; get ramtop
AF833: RET ; set ramtop (not used)

:D

Что в-общем не нашло у меня осуждений, т.к. сам сроду не понимал покой хрен этот RAMTOP вообще был придуман, да еще с отдельными подпрограммами Монитора (а не как все остальное аналогичное - через константу в ячейке памяти).
Собственно, к этому же очевидному выводу и авторы М4 явно пришли.

Denn
03.01.2016, 00:32
сам сроду не понимал покой хрен этот RAMTOP вообще был придуман, да еще с отдельными подпрограммами Монитора

Лично я привык всё делать по правилам. К тому же моя ОС активно юзает эту фичу, позволяя программно защитить область резидентных программ, эмулятора ORDOS и знакогенератора МОНИТОРа.

Вышеуказанный код-заглушка этих подпрограмм не может быть причиной глюков при запуске DSDOS, он может лишь привести к некорректной работе программ, использующих "API" МОНИТОРа, и то лишь в некоторых ситуациях.

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

Проверил ещё раз M31RK - работает.

Вот видео - https://www.youtube.com/watch?v=-fvFnIhNaxQ

alx32
03.01.2016, 08:04
Так то эмулятор, а я на железе пробовал...
Может проблема в той фиче с форматированием квазидиска?
CP/M от Error404 работает без проблем с ROM-диска на 27С081.

Denn
03.01.2016, 12:09
Может проблема в той фиче с форматированием квазидиска?

А ранние версии без "этой фичи" на данном железе работали?

alx32
03.01.2016, 12:15
Не пробовал, проверял только 3.71 и 3.72.

Denn
03.01.2016, 12:56
alx32, старт с удерживанием любой символьной клавиши не улетает в мусор? Квазидиск определяется?

alx32
03.01.2016, 13:04
При удержании какой-то клавиши выскакивает выбор загрузки с ROM и (второй не точно помню) по моему FDD.
При выборе ROM снова заставка и список дисков... и зависон...

Ближе к вечеру доберусь до Ориона и попробую версию 3.6.

Error404
03.01.2016, 13:28
Проверил ещё раз M31RK - работает.


В принципе - неудивительно. Кроме того, что M31RK написан в коде для 8080, он еще и самый совместимымый с Монитором-2 (AFAIK - полностью совместимый) не смотря на то, что в M31RK много чего добавлено. Классический Монитор от Ивинских. Но в нем нет внешних загрузчиков. А в остальных М3 загрузчики есть (во многих), и чтобы их туда добавлять, питерцы (уже другие авторы) урезали то, что посчитали "нигде не используется".

Поэтому для тех, кто использует Ордос я всегда рекомендую M31RK: совместимость максимальная. А загрузчик можно запустить и из-под Ордос.

Denn
03.01.2016, 13:49
При удержании какой-то клавиши выскакивает выбор загрузки с ROM и (второй не точно помню) по моему FDD

Это при удержании SHIFT'а ("НР" в терминах клавиатуры РК-86).
Для нашего эксперимента нужно зажать любую символьную клавишу.



Ближе к вечеру доберусь до Ориона и попробую версию 3.6.

Версии 3.6 не было, была 3.5, а потом 3.7r. Но смысла пробовать старые версии не вижу, т.к. в плане использования ресурсов ПК ничего не изменилось.
Квазидиск, если он присутствует и определяется системой, будет работать корректно в любом случае, т.к. это просто ОЗУ, и оно никак не зависит от типа процессора, адресации портов и вообще каких-либо модов Ориона.

Если зажатие символьной клавиши остановит процесс загрузки и мы не улетим в мусор, то это означает, что адресация портов клавиатуры и ROM-диска отработала корректно, все модули ОС загрузились (файловая система установилась и отработала правильно), тест доступного оборудования прошёл успешно.

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


В принципе - неудивительно. Кроме того, что M31RK написан в коде для 8080, он еще и самый совместимымый с Монитором-2 (AFAIK - полностью совместимый) не смотря на то, что в M31RK много чего добавлено. Классический Монитор от Ивинских.

Посмотрел я исходник загрузчика и вот что ещё заметил. Используется запись константы тона звукового сигнала в документированную авторами ячейку 0F3E7h. Эту константу "Монитор" использует для озвучки нажатия клавиш и биппера при выводе кода 07h. В варианте Ориона с ВМ80 звук организован через вкл/выкл прерываний, а в варианте на Z80 как-то иначе, и как использует эту ячейку "Монитор-Z80" я не знаю. Может тут собака порылась?

Отсюда вопрос к alx32: перед тем, как начинается "глюконат", проигрывается "журчащая мелодия" в финале загрузки или нет?

b2m
03.01.2016, 14:50
Так то эмулятор, а я на железе пробовал...
Да, есть такой факт. Иногда в эмуляторе работает то, что на железе никак не хочет работать. Эмулятор - это такой сферический конь в вакууме :)

alx32
03.01.2016, 15:13
Denn, я звук не подключал, поэтому не могу сказать "журчит" оно или нет...

Denn
03.01.2016, 16:20
Denn, я звук не подключал, поэтому не могу сказать "журчит" оно или нет...

Тогда ждём результаты эксперимента с зажатием символьной клавиши.

П.С. если есть под рукой файл конкретно вашей версии версии "Монитора", то киньте, попробую проверить "болевые точки".

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

Нашёл у себя в хозяйстве образ 3-го "Монитора" под Z80 - M35zrkd.bin (http://denn.ru/orion/128/bios/M35zrkd.bin). Контрольная сумма: 1406h.

Анализ потенциально опасных подпрограмм не выявил проблем: распаковщик знакогенератора использует документированную авторами ячейку 0F3D1h, а издавалка звука документированную ячейку 0F3E7h. Звук генерируется не прерываниями, а записью в порт #FF. К сожалению, не знаю как в эмуляторе выставить конфигурацию с Z80, чтобы проверить этот монитор хотя бы в нём.

Error404
03.01.2016, 16:54
Этот Монитор по включению питания сразу грузится с дисковода и, ЕМНИП, не имеет выхода в Ордос. Соответственно, получится ли с ним проверить?

alx32
03.01.2016, 18:38
Вот та версия монитора что стоит у меня в Орионе (BETA 3.?/Z)
55417

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

В общем... Завелось... Дело было в мониторе... Зашил Монитор2 в старшую половину завалявшейся в ящике D2732A и всё загрузилось...

Denn
03.01.2016, 18:58
Вот та версия монитора что стоит у меня в Орионе (BETA 3.?/Z)

Контрольная сумма отличается от моего, но по части инициализации и подпрограмм распаковки знакогенератора, генерации звука всё точно также.
Пока не могу понять в чём траблы.



В общем... Завелось... Дело было в мониторе... Зашил Монитор2 в старшую половину завалявшейся в ящике D2732A и всё загрузилось...

Прекрасно!

alx32
05.01.2016, 00:45
Единственный прОблем - это контроллер дискогрыза...
С той версией контроллера, что шёл с новоделом от zorel, форматилка не заработала...
Чтобы попробовать, придётся на макетке ваять контроллер указанный здесь...

Denn
05.01.2016, 14:04
Единственный прОблем - это контроллер дискогрыза...
С той версией контроллера, что шёл с новоделом от zorel, форматилка не заработала...
Чтобы попробовать, придётся на макетке ваять контроллер указанный здесь...

Да, есть такой момент. Когда всё это развивалось, то не было интернетов и у меня был единственный официальный источник информации - журнал РАДИО.
Позже в РАДИО пошёл "разброд и шатания", появилась другая схема контроллера, но я ориентировался на первую опубликованную.
К сожалению, у меня нет железного новодельного Ориона от Zorel, поэтому нет возможности отладить версию ОС для другого контроллера. Насколько я понимаю, различия там существенные - не просто разные адреса регистров.

Если не упираться в дисковод, то хорошим подспорьем в качестве внешнего накопителя является хранение файлов на IBM-PC с доступом по RS-232. На данный момент это уже программно реализовано в виде связки LINK$ (на Орионе) + oriserv.exe (на IBM-PC), а в ближайшее время будет сделано ещё более удобно - в виде виртуального диска, интегрированного в ОС DSDOS. Заодно получаем связь Ориона с внешним миром. Так что может имеет смысл макетить не КНГМД, а RS-232 на КР580ВИ53+КР580ВВ51А. Или подождать, когда мы с камрадом Stampmaker закончим разработку более быстрой версии RS-232 на БИС 16C550 для Ориона.

alx32
05.01.2016, 14:08
У меня Linux на компе стоит, поэтому ваша прога мимо кассы...

Stampmaker
05.01.2016, 14:41
alx32, очень жаль. неплохая задумка реализовывается.

HardWareMan
05.01.2016, 14:59
У меня Linux на компе стоит, поэтому ваша прога мимо кассы...
И что, даже под винцо не пойдет?

alx32
05.01.2016, 15:19
Винцо с портами не работает, а так же с прогами на фреймворке (на С#), тут только виртуальный ящик может заработать...

alx32
05.01.2016, 15:20
Ведь с TL866CS пришлось именно так сделать...

Denn
05.01.2016, 16:17
У меня Linux на компе стоит, поэтому ваша прога мимо кассы...

Ну, даже не знаю что сказать... У меня есть клиент и под MSDOS, можно с дискетки загрузиться.

alx32
05.01.2016, 16:50
А какой протокол передачи использует ваша LINK$?

Denn
05.01.2016, 19:55
А какой протокол передачи использует ваша LINK$?

Протокол собственного изготовления. Могу дать исходник MSDOS-версии на Си++, наверное его даже можно откомпилировать под Линукс.

alx32
05.01.2016, 20:00
Возможо, только если с портом она работает как с файлом и не использует хитрые либы...

Denn
05.01.2016, 23:05
только если с портом она работает как с файлом...

Увы. Там прямое обращение к BIOS'у. При желании, думаю можно разобраться и переделать. В остальном консольный ввод-вывод и операции с файлами, никаких хитростей.

alx32
06.01.2016, 00:04
Я с плюсами не очень дружу, чистый С...
Когда-то писал консольные программы для обмена именно через СОМ-порт (в линуксе ttyS* или ttyUSB*), но уже подзабыл...

alx32
06.01.2016, 00:10
А как в эмуле создать образ диска odi?
Что-то он не хочет форматировать...

b2m
06.01.2016, 00:15
А как в эмуле создать образ диска odi?
Что-то он не хочет форматировать...
А зачем обычный файл форматировать? Берёшь существующий, делаешь копию, удаляешь ненужное...
Эмулятор не поддерживает команду форматирования, просто игнорирует.

Denn
07.01.2016, 03:10
Всех с наступившим!
Делюсь новинкой, можно сказать прямо сошедшей со станка :)

Я уже упоминал о нём ранее, и вот наконец-то он готов - виртуальный диск!


Что это такое?

На Орионе в ОС DSDOS инсталлируется драйвер, в результате чего становится доступным диск "G:". С точки зрения ОС, программ и пользователя это обычный диск, с которым можно работать как с любым другим диском, т.е. записывать/читать/удалять/переименовывать файлы, менять адрес посадки, атрибуты, рабочую страницу ОЗУ и т.д.. Но физически он находится на удалённом IBM-совместимом ПК под управлением ОС Windows, доступ к которому осуществляется по интерфейсу RS-232 (aka COM-port).
Это позволяет, во-первых, иметь на Орионе доступ к диску-хранилищу очень большого объёма, а, во-вторых, очень легко обмениваться файлами с другими пользователями или, как говорится, иметь связь с внешним миром. Для организации доступа к общему хранилищу файлов и обмена очень удобно использовать бесплатный сервис от Гугла - Google-Drive, позже я расскажу подробнее, как к нему подключиться с помощью... да-да, с помощью ПРК Орион и виртуального диска!

Ранее по интерфейсу RS-232 уже был организован доступ к хранилищу файлов на IBM-PC с помощью утилиты LINK$ по примитивному протоколу без обратной связи. С виртуальным диском всё значительно удобнее и больше возможностей.


Как воспользоваться?

Для работы с виртуальным диском необходимо скачать две программы: клиентскую часть для Ориона и серверную для IBM-PC.

Ссылки для скачивания:
Клиент - http://denn.ru/8bit/oriserv/vdisk.ori
Сервер - http://denn.ru/8bit/oriserv/oriserv.exe

Серверная часть была описана ранее тут - http://zx-pk.ru/showthread.php?t=21984&p=844013&viewfull=1#post844013
У кого уже установлена и настроена версия 1.01, нужно просто обновить EXE-файл, все настройки будут подхвачены автоматически.
По части функционала сервера ничего не изменилось, добавилась лишь работа по новому протоколу (старый протокол LINK$ также остался).
Новый протокол предполагает полное управление сервером со стороны клиента. Т.е. даже смена каталогов будет производиться с Ориона, но именно этот функционал будет реализован в следующих версиях, а пока выбирать рабочую папку придётся вручную на IBM-PC.

Клиентская часть представляет собой файл в формате ORI, который придётся закачать в Орион по-старинке - с помощью LINK$ :)
Далее запускаем загруженный по линкеру файл VDISK$ и получаем прозрачный доступ к диску на сервере.

Наглядно можно посмотреть на этом видео - https://www.youtube.com/watch?v=33kxKklEe_w

П.С. в последующих версиях DSDOS виртуальный диск будет интегрирован в ОС, т.о. надобность в утилите LINK$ отпадёт.

alx32
07.01.2016, 08:43
Судя по времени на часах, Denn рождество справлял за компом... [emoji16]

sergey_sitnik
07.01.2016, 11:09
И я то же......

alx32
09.01.2016, 17:07
Denn, а вы предкомпенсацию записи на своём контроллере делали?
А то контроллер ни в какую работать не хочет...

Denn
09.01.2016, 18:36
Denn, а вы предкомпенсацию записи на своём контроллере делали?
А то контроллер ни в какую работать не хочет...

Да, делал. Насколько я помню, она влияет на стабильность чтения дорожек ближе к концу диска, т.е. при обычной работе её наличие/отсутствие в общем-то без разницы.
Как именно не хочет работать контроллер? Нет выборки дисковода, не крутит мотор, не двигает головками?

alx32
09.01.2016, 18:48
Всё шевелится, но никак не хочет форматировать диск, а если втыкаю отформатированный с помощью СР/М диск на другом контроллере, не хочет писать и читать его...

Denn
09.01.2016, 19:28
Это хуже. Какие ошибки выдают форматилка и ОС ?

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

В КНГМД есть микросхема одновибратора, она точно 155-ой серии? Это принципиально.

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

Есть возможность убедиться в исправности ВГ93 на другом, рабочем контроллере?

Stampmaker
09.01.2016, 20:11
alx32, ещё в Радио №12 '92г на стр.14 сразу под схемой на рис.3 сделана доработка на ЛА8. Вы её собрали? может стоит собрать?

дело в том, что у меня этот контроллер тоже не сразу заработал, Denn очень помог в наладке, респект ему.
ещё у меня неправильно был разведен дешифратор 155ИД3.

О! кстати говоря, а как он у Вас разведён?
в журнале ошибка. ША7 указана 2 раза, а должно быть ША4, 5, 6, 7.

alx32
09.01.2016, 20:55
Доп. дешифратор не делал. Схема на ЛА8 для Z80 не требуется. АГ3 стоит 155й серии.
Мне кажется проблема в схеме ФАПЧ на ТМ2 и ИЕ7.

alx32
09.01.2016, 21:00
ОС выдаёт ошибку чтения каталога, а форматилка на каждой стороне и дорожке сбойные сектора.

Denn
10.01.2016, 00:34
alx32, а головки перемещаются?

В ROM-диске DSDOS есть утилитка LDD$, там можно вручную погонять головки. Если задать длинную дистанцию, то перемещение слышно отчётливо, например сначала в 00 трек, а потом в 70-ый.

Если головки перемещаются, то это очень хорошо, и проблема скорее всего где-то в области сигнала RDDATA - либо в шлейфе от флопа к КНГМД, либо в самом КНГМД (резистор подтяжки присутствует?).

Доработку Ориона с установкой ЛА8 я у себя не делал, без неё всё работает без вопросов. Если проц Z80, то тут сложно сказать, я не проверял работу данного КНГМД с ним, но теоретически я не вижу каких-либо проблем... хотя, что там с прерываниями, они есть в варианте Z80? По-умолчанию включены?

alx32
10.01.2016, 00:43
В общем дело было не в бобине...
А в разъёмах, кривом сигнале RESET (плохая подтяжка ~1.9в) и шлейф (сигнал WRGATE пропадал)...
В общем нужно менять разъёмы и шлейф... [emoji19]

Denn
10.01.2016, 00:54
В общем дело было не в бобине...

Т.е. можно поздравить? ;)

alx32
10.01.2016, 01:03
Ну да...
Флопарь заработал...
Теперь RS-232 буду прикручивать...
Хотя он у меня уже есть, правда на Tiny2313...

Error404
10.01.2016, 12:34
Теперь RS-232 буду прикручивать...
Хотя он у меня уже есть, правда на Tiny2313...

Это который на портах F764,F765?
Для этой схемы (которую я так и не собрал - до сих пор в планах, но я с паяльником что-то последнее время совсем не дружу, столько лежит не доделанного - жуть!) кстати есть утилиты для передачи файлов по стандартному XMODEM (на линупсе должно работать) - xput / xget. Пробовал их? интересно, работают ли: все же в эмуляторе делалось.

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

исходники если надо могу выложить. Один из (то ли put то ли get) делал Камиль (caro), второй их них делал я сам. Хотел и под Ордос портануть, но исплевавшись на ее недофайловую систему без функций, бросил.

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

Для программиста схема на портах F764,F765 (хоть в ПЛИС, хоть в реализации на ATMега) получилась очень удобной: байт конфига, байт туда, байт оттуда, и никаких заморочек.

alx32
10.01.2016, 13:05
Error404, всё уже испытано и работает. Я даже через терминал к Ориону подключался. Скрины в теме про RS-232. Единственно, я всё никак не исправлю косяк в прошивке ATTiny2313 связанный с переключением скоростей обмена, скорость одна 4800...

alx32
19.01.2016, 22:01
Почти закончил переносить контроллер дисковода (SPDOS) на печатную плату, сделал ножевой разъём как в ISA и впаял в основную плату два слота 62-pin от старой 286-й материнки...
Так что получилось псевдо-Орион-ISA "стандарт"...
А то достали меня эти PLS штыри, где хотят контачат, а где нет...

P.S. Фото позже, если интересно...

Denn
20.01.2016, 01:26
P.S. Фото позже, если интересно...

Конечно интересно!

Stampmaker
20.01.2016, 12:58
Фото интересно.

alx32
20.01.2016, 22:57
Обещанные фото контроллера дисковода...

http://uploads.tapatalk-cdn.com/20160120/0ad861e11a8dbc78d941880effd51608.jpg
http://uploads.tapatalk-cdn.com/20160120/b57784349a117446df3b4f69c6e73f9c.jpg

HardWareMan
21.01.2016, 06:02
Люблю технопрон. А домашний еще больше.

Error404
21.01.2016, 12:37
Красиво. Позолоченная? :)
Как такая точность в домашних условиях достигается? Фоторезистом?
- - - Добавлено - - -

А нельзя ли сделать доработку на орионовском контроллере, чтобы на нем все версии ОС работали? Ну ВГ93 же и там и там, все остальное - минимальная обвязка. Сделали же доработку по универсальной дешифрации. Алсо, если применять разъемы не PLC, а СНП или аналоги, то надежность будет выше любого самодельного варианта (кроме позолоченных), ИМХО.

Denn
21.01.2016, 13:12
Плата просто прекрасна! Земляные анти-EMI полигоны шикарны. Ещё бы на этой плате сразу собрать RS-232 (ИД3 и такт.ген. общие), была бы супервещь!

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


А нельзя ли сделать доработку на орионовском контроллере, чтобы на нем все версии ОС работали?

Такая доработка этого контроллера была, в каком-то ж. РАДИО описана. Там устанавливалась дополнительная КП14 и горстка диодов, плюс какие-то порезы родной схемотехники.

alx32
21.01.2016, 14:09
Плата сделана фоторезистом, поэтому полигоны - вынужденная мера, тем более не подключенные. Ну не получается у меня сделать качественные фотошаблоны - принтер говнит.
У этого контроллера есть одно существенное отличие от других - отдельный порт для чтения сигналов DRQ и IRQ (как в ZX), в других контроллерах этого нет, плюс другие биты порта выбора дисковода и стороны...
Дешифрацию доработал, теперь контроллер доступен только по адресам F700..F70B.
Один тактовый генератор на ВГ93 (8.000МГц) и ВВ51 (1.8432МГц) не пойдёт...

P.S. На плате есть один существенный косяк [emoji16] , кто догадается - тому пирожок!

Denn
21.01.2016, 15:36
У этого контроллера есть одно существенное отличие от других - отдельный порт для чтения сигналов DRQ и IRQ (как в ZX), в других контроллерах этого нет

И именно эти сигналы используются в DSDOS в процедурах чтения/записи сектора. Как это делать без этих сигналов, я честно говоря даже не в курсе. Если кто подскажет, буду очень признателен.



...плюс другие биты порта выбора дисковода и стороны...
Дешифрацию доработал, теперь контроллер доступен только по адресам F700..F70B.

DSDOS работает с нативной адресацией, как в авторском варианте.



Один тактовый генератор на ВГ93 (8.000МГц) и ВВ51 (1.8432МГц) не пойдёт...

В родной схеме RS-232 используется тактирование с "немного кривой" частотой 2 МГц, которое получается банальным делением с помощью счётчика. В оригинальной схеме RS232 это делается делением тактовой Ориона на "5", а при совмещении с КНГМД можно использовать уже имеющиеся там 2 МГц напрямую (соотв. выход счётчика DD2).

Stampmaker
21.01.2016, 17:29
Отлично получилось!

Vladimir_S
21.01.2016, 18:10
На плате есть один существенный косяк
Не, плата реально супер и даже косяки искать не хочется. Правда переходы на "земляную" сторону я бы оформил как то так. И пайка площадок красивее получается.

alx32
21.01.2016, 18:19
Ну ладно... На плате разъём дисковода наизнанку... пришлось шлейф напрямую запаять...
С терморазгрузкой бывают косяки при заливке платы...

alx32
23.01.2016, 22:55
Контроллер завёлся практически без наладки... [emoji15]
Единственный косяк который произошёл из-за моей торопливости... перепутал местами ИР16 и ЛА3 в схеме предкомпенсации. Пришлось выкусывать... и как назло ЛА3 в запасах не оказалось, впаял завалявшуюся 74НС00... сейчас сижу форматирую дискеты...
http://uploads.tapatalk-cdn.com/20160123/4c49573789115d0e71805d09815d81ba.jpg
http://uploads.tapatalk-cdn.com/20160123/811e4f1366ececdf5f50a0b84493b110.jpg
К сожалению фото только с телефона...

Denn
24.01.2016, 01:25
Какой-то модный дисковод с чёрной мордой! Ням :)
А вот чай стоит кверх ногами)))

П.С. плата КНГМД обалденно красивая!

Stampmaker
17.02.2016, 00:49
Пользователям DSDOS предлагается улучшенная версия прошивки для МК ATmega48 интерфейса PS/2. Ссылка: 56056

Изменения коснулись активации/переопределения некоторых клавиш, что значительно повысило удобство в работе:

1) Теперь клавиши Insert и Delete нормально вставляют и удаляют;
2) Системное меню Shift+F1 включается одной кнопкой Win (очень удобно);
3) Клавиши F6...F9 ведут себя в оболочке DC$ также, как и в Norton Commander на PC. НО! на самом деле они дублируют цифровые клавиши 6..9, просто программно "сэмулированы" как F6...F9;
4) PgUp и PgDn теперь привычно пролистывают экраны в просмотрщиках и редакторах;
5) На клавиши F10...F12 наложены коды 10h...12h (резерв);

DIMKA55
17.02.2016, 09:47
А для ATmega328 можно? ;)

alx32
17.02.2016, 10:35
Если перекомпилировать то можо.
А так для ATMega48/88 прошивка подходит без изменений. Это связано с разной таблицей векторов прерываний, у 48/88 там двухбайтные (одно слово, команда относительного перехода RJMP) команды перехода, а у 168/328 четырёхбайтные (два слова, команда JMP + <адрес>). Из-за объёма флеша.

DIMKA55
17.02.2016, 11:06
Может и нужно просто перекомпилировать, у меня на РК86 этот контроллер на клавиатуре стоял, и там было две версии прошивки - под 48 и 328.

Stampmaker
17.02.2016, 11:22
А для ATmega328 можно?

если надо перекомпилировать под другой МК, то это надо просить автора - Caro.
а так в настоящий момент доступна только прошивка под 48/88 с возможностью доработки раскладок клавиатуры.

alx32
17.02.2016, 11:24
Если есть исходники, то можно и перекомпилировать.

Stampmaker
17.02.2016, 11:26
Это если есть.
Но Caro ими вроде как не делился.

DIMKA55
17.02.2016, 11:28
А кто дорабатывал под 48? Значит исходники есть...

Stampmaker
17.02.2016, 11:34
в этой ветке и схема, и прошивки, и описание как переделать клавиатуру http://zx-pk.ru/showthread.php?t=9294

DIMKA55
17.02.2016, 12:06
Сергей, спрашиваю еще раз - если вы переделали оригинальную прошивку, значит у вас есть возможность перекомпилировать под 328?

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

В ревизиии 512 схема Caro и используется...

Stampmaker
17.02.2016, 12:24
объясняю.
вот у нас есть прошивка для МК ATmega48.
она готовая, её нельзя переделать.
никак.
исходников нет.

чтобы прошивка полноценно работала, автор оставил программистам возможность подключать различные варианты раскладок.
к прошивке идёт исходник раскладки клавиатуры, который можно по своему усмотрению отредактировать и откомпилировать.
вот его-то мы и подстыковываем к прошивке, получая тем самым новый вариант. делается это банально командой copy /b.

а теперь по-простому.
есть файл orion_kb.hex
он пустой, он не понимает клавиатуру. это то самое ядро, которое и надо для 328 перекомпилировать, но исходных текстов нет. они только у Caro.

к нему есть исходник TABKBD_O.ASM
его редактируем как нам надо
и компилируем через asm51.exe TABKBD_O.ASM

и делаем команду copy /b orion_kb.hex /b + TABKB_OR.hex /b orkb_02.HEX /b

всё. новая прошивка у нас в руках.


OFFTOP-ON
точно также Ewgeny7 сделал прошивку для компьютера ЮТ-88. ядро старое - раскладка обновлённая.
OFFTOP-OFF

Denn
17.02.2016, 12:25
Пользователям DSDOS предлагается улучшенная версия прошивки для МК ATmega48 интерфейса PS/2. Ссылка: 56056

Изменения коснулись активации/переопределения некоторых клавиш, что значительно повысило удобство в работе:

1) Теперь клавиши Insert и Delete нормально вставляют и удаляют;
2) Системное меню Shift+F1 включается одной кнопкой Win (очень удобно);
3) Клавиши F6...F9 ведут себя в оболочке DC$ также, как и в Norton Commander на PC. НО! на самом деле они дублируют цифровые клавиши 6..9, просто программно "сэмулированы" как F6...F9;
4) PgUp и PgDn теперь привычно пролистывают экраны в просмотрщиках и редакторах;
5) На клавиши F10...F12 наложены коды 10h...12h (резерв);

Сергею ещё раз огромное спасибо за проделанную работу!

Позволю себе сделать некоторые пояснения. Все доработки, как обычно, делались по принципу "не навредить уже имеющимся привычкам и традициям".

п.1. Ноги растут, видимо, из когда-то популярного пакета "МИКРОН" и/или ещё какого-то РК'шного софта. Отдельных клавиш с функциями удаления символа под курсором и переключения режима ВСТАВКА/ЗАМЕНА в нативной клавиатуре РК86 нет, поэтому традиционно эти функции повешены на клавиши F2 и F3, соответственно.
При работе с клавиатурой PS/2 у всех уже давно "в руках" на уровне безусловных рефлексов привычка выполнять эти функции с помощью специальных клавиш Del и Ins. Так что логично их запараллелить на уже работающие в софте клавиши, выполняющие аналогичные функции. Итак, клавиша Del выдаёт код 01h, а клавиша Ins выдаёт код 02h.

п.2. Никаких конфликтов с ПО других ОС эта функция не вызовет. Клавиша болталась без дела, почему бы не задействовать. Мелочь, а приятно :)
В итоге, клавиша Win выдаёт код 00h и бит D5 порта #F402 при этом установлен в "0".

п.3. Тоже неприкаянные в изначальной прошивке МК клавиши, а привычка ими пользоваться (например, в Нортонах) у людей есть. Свободного места в матрице клавиатуры РК86 для отдельных кодов для F6..F9 нету, поэтому решили продублировать на соотв. цифровые клавиши "6".."9". В оболочке эти коды поддержаны изначально (F6="6"=переименование файла, F8="8"=удаление файла), так что пусть будут выполнять привычные функции.

п.4. Клавиша СТР используется для пролистывания или очистки страницы, логично её функционал назначить на клавиши PageDown/PageUp (в переводе "Page" означает "Страница", прим. Кэпа). Для удобства и совместимости с орионовским/РК'шным софтом было принято решение назначить на PgDn клавишу СТР, а на PgUp комбинацию УС+СТР. В итоге, в РК'шном софте обе эти клавиши будут выполнять функцию клавиши СТР, а в DSDOS комбинация УС+СТР используется для симметричного действия - пролистывания страницы на предыдущую, т.о. клавиша PgUp будет работать по своему прямому назначению.
Итак, клавиша PgDn выдаёт код 1Fh, а PgUp тот же код 1Fh + бит D6 порта #F402 установлен в "0".

п.5. За клавишами F10..F12 зарезервированы коды, получаемые комбинациями УС+"0", УС+"1" и УС+"2", соответственно. В будущем обязательно где-нибудь будет использовано, например в мульти-клипборде.

п.6. Да-да, есть ещё один резерв на будущее, о котором Сергей забыл сообщить. Клавиша WinMenu эмулирует СС+СТР (Shift+PgDn), т.е. код 1Fh и бит D5 порта #F402 установлен в "0". РК'шный софт будет реагировать как на нажатие СТР (PgUp или PgDn), а в DSDOS это будет комбинация для вызова контекстного меню в приложениях, использующих оконный интерфейс.


П.С. Ещё есть очень большое желание немного переиначить внематричные (управляющие) клавиши. По этому вопросу ждём ответ разработчика ПО для МК в соответствующей теме (http://zx-pk.ru/showthread.php?t=9294&p=857986&viewfull=1#post857986).

__________________________________________________ ________________________________

П.П.С. Пользуясь случаем, раз уж заговорили о клавиатуре PS/2, сделаю анонс :) В новой версии DSDOS v3.77 уже сделана полноценная поддержка этой клавиатуры! Т.е. вводимые буквы и символы полностью соответствуют тому, что написано на клавишах, с учётом соотв. режимов, в т.ч. русские/английские символы. Поддержка выполнена на уровне драйвера клавиатуры DSDOS, т.е. пользователю ничего менять в прошивке МК не надо. Поддержка нативной "железной" клавиатуры РК86 также осталась, переключение типа клавиатуры делается нажатием комбинации клавиш УС+"РУС/LAT" (Ctrl+CapsLock), в любой момент, когда на экране присутствует мигающий курсор. Программно через API DSDOS есть возможность получить текущий тип клавиатуры, что в дальнейшем будет поддержано в ПО (помощь по клавишам, реакция на нажатия)

П.П.П.С. Анонс номер два! Сделан опытный образец ОС DSDOS для ПРК "ОРИОН-ПРО", некоторые форумчане уже даже пользуются :) Но офиц. релиз сделаю только после того, как разберусь с ПРО'шным КНГМД /-)

DIMKA55
17.02.2016, 12:33
Значит откомпилировав раскладку под 328, ее можно приклеить к существующей прошивке для МК под 328?

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

Получается проблем нет...

Stampmaker
17.02.2016, 13:20
DIMKA55, раскладка, я думаю, роли не играет. там просто набор байт.
а вот как будет на 328 работать сборка для 48, это вопрос. это надо просто попробовать.

DIMKA55
17.02.2016, 13:26
Сергей, прошивка под 328 (так называемое ядро) ведь есть. К ней получается просто нужно приклеить раскладку.

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

Или мы друг друга не понимаем...

Denn
17.02.2016, 17:23
Делюсь финальной версией прошивки МК для адаптера клавиатуры PS/2 (by Caro) - http://denn.ru/8bit/orion/128/kbrd/orkb_021.hex

В ней все изменения (http://zx-pk.ru/showthread.php?t=21984&p=857991&viewfull=1#post857991) от камрада Stampmaker, плюс доработанный алгоритм обработки управляющих клавиш (спасибо Caro):
Alt'ы переключают язык РУС/LAT, а CapsLock выполняет свою прямую функцию - переключает (с защёлкиванием) регистр букв.

П.С. В других ОС CapsLock, как и ранее, также переключает язык РУС/LAT.

Add:

А здесь аналогичная прошивка для более жирного, 328-го МК - http://zx-pk.ru/showthread.php?t=9294&p=858091&viewfull=1#post858091

Stampmaker
17.02.2016, 17:29
Сергей, прошивка под 328 (так называемое ядро) ведь есть. К ней получается просто нужно приклеить раскладку.
да, именно так

Denn
20.02.2016, 01:07
В связи с накопившимися изменениями, выкладываю новую сборку DSDOS v3.77r - http://denn.ru/orion/dsdos/dsdos377r.rar

Тем, кто пользуется связью по RS-232 настоятельно рекомендую обновить файл программы обмена с IBM-PC, там сделаны важные исправления - http://denn.ru/8bit/oriserv/oriserv.exe


Итак, что нового в ОС:

1) Изменён загрузчик DSDOS и размещение кода/сис.переменных в непереключаемой области ОЗУ. Это сделано для решения конфликтов с прошивками "Мониторов" под процессор Z80 (версии выше 3.1);

2) В ОС и во всех утилитах убрано обращение к п/п "Монитора" GetTOP/SetTOP (0F830h/0F833h), данные функции перенесены в API BIOS. Это также сделано для решения конфликтов ПО с "Мониторами" версий выше 3.1;

3) Исправлена ошибка в диалоге командного процессора ОС, в результате которой при "горячем" рестарте не очищался экран и не выводилась заставка DSDOS;

4) Сделана полноценная поддержка стандартных клавиатур PS/2, подключаемых к Ориону с помощью адаптера на МК от Caro (http://zx-pk.ru/showthread.php?t=9294). В данной сборке по-умолчанию пока включена родная аппаратная клавиатура РК86, а для активации клавиатуры PS/2 необходимо нажать Ctrl+CapsLock (или Ctrl+Alt в новой прошивке МК (http://zx-pk.ru/showthread.php?t=21984&p=858035&viewfull=1#post858035)) в любой момент, когда на экране присутствует мигающий курсор. Тип клавиатуры переключается по принципу триггера и сохраняется до "холодной" перезагрузки ОС. Поддержка заключается в том, что все символы вводимые с клавиатуры полностью соответствуют надписям на клавишах, в соотв. режимах;

5) Замедлена скорость мигания курсора до комфортной для глаз, а также раздражающее винтажное "пиканье" озвучки нажатий на клавиши заменено на ненапрягающий "клик". Увеличена скорость автоповтора для более быстрой работы с текстами;

6) В оболочке DC$ улучшен алгоритм перемещения указателей по списку файлов: при пошаговом перемещении нет ложных перескоков, а при длительном удержании клавиши включается автоповтор, который позволяет быстро перемещаться по файлам и прокручивать список;

7) Некоторые "косметические" изменения в оформлении оболочки DC$ и просмотрщика DCVIEW$. В последнем исправлена ошибка с перемещением в конец файла в режиме "DUMP", когда размер просматриваемого файла кратен 256.

makbar
04.06.2016, 13:40
Почти закончил переносить контроллер дисковода (SPDOS) на печатную плату, сделал ножевой разъём как в ISA и впаял в основную плату два слота 62-pin от старой 286-й материнки...
Так что получилось псевдо-Орион-ISA "стандарт"...
Крутяк!

Denn
16.06.2016, 18:39
Всем доброго. Делюсь результатами очередных доработок, исправлений, улучшений и т.п. - DSDOS v3.81.

Ссылка для скачивания образа ROM-диска (64 Кб) - http://denn.ru/orion/dsdos/dsdos381.rar

Документация по API ОС - http://denn.ru/8bit/orion/soft/dsdos/docs/dsdos381docs.rar

На этот раз ОС претерпела довольно серьёзные изменения, без которых невозможно дальнейшее её развитие. Было "переиграно" распределение ОЗУ второй страницы, где размещены все модули ОС, в результате чего удалось увеличить максимальное кол-во файлов на ROM-диске и на виртуальном диске до 255, такое же max кол-во файлов будет в будущем доступно на RAM-диске 1 Мб (СОЗУ с резервным питанием) и на SDHC.
Максимальный поддерживаемый объём ROM-диска увеличен до 1024 Кб (1 Мб), как и ранее всё пространство доступно одновременно, одним диском (A:).
Сделана программная поддержка 512 Кб ОЗУ (для рев.512), дополнительная память определяется автоматически при загрузке ОС. При наличии 512 Кб ОЗУ, объём квазидиска устанавливается равный 360 Кб, при "родных" 256 Кб - 120 Кб. Соответствующая информация выводится при загрузке ОС:

http://denn.ru/8bit/orion/soft/dsdos/hw_detect_v381.gif

(скриншот сделан в эмуляторе, который эмулирует 256 Кб ОЗУ)

http://denn.ru/8bit/orion/soft/dsdos/info_v381.gif

Изменена организация FAT (таблицы распределения файлов) квазидиска, размер кластера увеличен 16->256 Кб. В результате в 16 раз сократился объём FAT и примерно на 80% возросла скорость доступа!

Виртуальный диск теперь не в виде отдельного подгружаемого драйвера, а интегрирован в BIOS. Работа виртуального диска возможна по любому из двух портов RS-232: старому (на КР580ВИ53+КР580ВВ51А) и новому (на чипе 16C550). Второй вариант порта имеет более простую схемотехнику и позволяет работать на скорости 115200 Бод, что как показала практика весьма положительно сказывается на комфортной работе с файлами через виртуальный диск. Схему отрисую и опубликую чуть позже. Определение доступных портов RS-232 производится автоматически, по-умолчанию текущим для виртуального диска выбирается наиболее быстрый.

Довольно масштабная работа была проведена по поддержке различных известных схем КНГМД на базе БИС КР1818ВГ93. В результате, данная версия ОС работает с любым КНГМД, у которого регистры БИС доступны по адресам F700..F703. Определение типа КНГМД производится автоматически.

Также сделано автоматическое определение и настройка типа используемой клавиатуры: хардварная РК86 или её эмуляция на МК с клавиатурой PS/2.

Претерпели изменения несколько подпрограмм BIOS и CONIO, а также добавились новые - см. "Документация по API ОС".

В текстовом редакторе исправлено несоответствие символьных управляющих клавиш в режиме "РУС", а также добавлена возможность вызова справки (Esc & "H") и конфигуратора ED$CFG (клавиша F5) прямо из редактора.

Плюс некоторые незначительные изменения интерфейса, исправления ошибок и автодетект наличия соответствующего оборудования в утилитах.

В модули ОС и в утилиты введена проверка соответствия платформы, на которой они запускаются. Это сделано в связи с выходом DSDOS также и для ПРК "Орион-ПРО", чтобы исключить возможность перекрёстного использования ПО, непредназначенного для другой платформы.

Список изменений (из файла DISKINFO):

http://denn.ru/8bit/orion/soft/dsdos/diskinfo_v381.gif

alx32
17.06.2016, 17:53
Denn, а широкий экран 480х256 будет поддерживаться?
Я имею ввиду в будущем...
Ведь в ревизии 512 сделан доп. видеорежим 480х256 в дополнении к стандартному 384х256.

Denn
17.06.2016, 18:52
alx32, увы, тут вынужден огорчить. По крайней мере при нынешней концепции максимальной скорости дисковых операций. Дело в том, что ОС находится во второй странице ОЗУ, а прикладное ПО в основной, и для быстрого взаимодействия активно используется непереключаемая область ОЗУ F000..F3FFh. На данный момент это пространство фактически полностью использовано подрограммами ОС, Монитора и стеком, а увеличение экранной области "откусывает" драгоценное ОЗУ именно оттуда.
Скажем так, плюсы расширенного экрана никак не перевешивают минусы, поэтому смысла жертвовать производительностью и совместимостью с базовым вариантом ради 12 доп. символов в строке лично я не вижу.

Denn
29.06.2016, 15:37
В продолжении (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=874727&viewfull=1#post874727) тематики виртуального диска, раскрою тему быстрого порта COM2 на микросхеме 16C550 (http://denn.ru/8bit/orion/128/rs232/16c550.pdf).

Электрическая схема порта:

https://forum-img.guitarplayer.ru/2024/02/11/1jMBJ.png

альтернативаня ссылка на схему (http://denn.ru/8bit/orion/128/rs232/com2_16c550_schematic.jpg)


Устройство представляет собой карту расширения, подключается в системный разъём ПРК "Орион-128.2" (нумерация контактов указана согласно схеме рев.512).
Возможны два варианта сборки: упрощённый и стандартный. Первый вариант - без дешифратора 1533ИД3, его использование возможно только если в системе больше нет никаких других устройста, занимающих адресное пространство F700..F7FFh. Второй вариант с помощью дешифратора позволяет корректно занимать только диапазон F7E0..F7EFh, в этом случае сигнал ПРК "SEL_F7xx" (В30) идёт на БИС 16C550 через дешифратор.
Для упрощения схемотехники в качестве тактового генератора используется специализированный чип с HCMOS/TTL-выходом, например такой - http://www.chipdip.ru/product/7.3728mhz-hcmos-ttl/. Частота генератора - 7.3728 МГц.
Для преобразования сигналов (TTL<->RS232) используется микросхема MAX232. Вариантов исполнения этого популярного преобразователя вагон и маленькая тележка, они требуют разные номиналы конденсаторов обвязки, поэтому на схеме указан номинал с вариацией. Более точно нужно смотреть даташит на ваш конкретный экземпляр "макса".

На плате ПРК требуется небольшая доработка (если она у вас не была сделана ранее): на линию "В20" системного разъёма заводится сигнал RESET с выхода "9" микросхемы DD18.2 (ТМ7).

Как было сказано ранее, программно порт поддержан в ОС DSDOS начиная с версии v3.81, его наличие в системе определяется автоматически при загрузке, скорость обмена программируется максимальная - 115200 Бод.

Схема не требует наладки, при исправных деталях и правильном монтаже работает сразу.

Мой "макетный" вариант выглядит так:

https://forum-img.guitarplayer.ru/2024/02/11/1jm7m.png

https://forum-img.guitarplayer.ru/2024/02/11/1j6Rc.png

Фото №1 (http://denn.ru/8bit/orion/128/rs232/com2_16c550_front.jpg) Фото №2 (http://denn.ru/8bit/orion/128/rs232/com2_16c550_working.jpg)


В нём микросхем больше, т.к. я одновременно распаял два порта: COM1 и COM2. Причём первый с вариацией: 1) под КР580ВВ51А (скорость обмена 38400 Бод) и 2) под MSM82C51A-2 (скорость обмена 115200 Бод).


Информация по программированию порта COM2:


; BIOS (2/2) для DSDOS v3.81 (Орион-128.2)
; (C) 1998-2016 Соловьев Д.Н. /Санкт-Петербург/
; 18.06.2016

; Порт COM2 (16C550)

RG_RWD:EQU 0F7E0H; Read/Write Data
RG_IER:EQU 0F7E1H; Interrupt Enable Reg
RG_LCR:EQU 0F7E3H; Line Control Reg
RG_MCR:EQU 0F7E4H; Modem Control Reg
RG_LSR:EQU 0F7E5H; Line Status Reg
RG_SCR:EQU 0F7E7H; Scratch Reg


IniCOM:
; Инициализация UART 16C550
LXI H,RG_IER
MVI M,0; отключить все прерывания
INX H
INX H
MVI M,80H; маска установки DLAB
MVI L,RG_RWD
MVI M,4; LSB делителя (4 = 115200 Бод)
INX H
MVI M,0; MSB делителя
INX H
INX H
MVI M,03H; настройка протокола (8,N,1)
RET


SvbCOM:
; Запись байта в порт обмена
; I: [C]-записываемый байт
; O: <C>=0 - [A]=записанный байт,
; <C>=1 - порт не готов
MVI B,0; time-out const = 256

SVB2:
DCR B
JZ LDB2_4
LDA RG_LSR
ANI 20H
JZ SVB2
MOV A,C
STA RG_RWD
RET


LdbCOM:
; Чтение байта из порта обмена
; O: C=0 - [A]=байт, C=1 - порт не готов

LDB2_0:
; проверка на преждевременную готовность
LDA RG_LSR
RRC
JC LDB2_2

; ожидание поступления данных
PUSH B
LXI B,33000; time-out const

LDB2_1:
DCX B
MOV A,B
ORA C
JZ LDB2_3
LDA RG_LSR
RRC
JNC LDB2_1
POP B

LDB2_2:
LDA RG_RWD
CMC
RET

LDB2_3:
POP B

LDB2_4:
STC
RET

Denn
30.06.2016, 18:30
В добавок к предыдущему посту вариант реализации интерфейса RS-232 (порт COM1, v.2) на микросхеме КР580ВВ51А (или MSM82C51A-2):

https://forum-img.guitarplayer.ru/2024/02/11/1jvo2.png

альтернативная ссылка на схему (http://denn.ru/8bit/orion/128/rs232/com1_82c51_schematic.jpg)

Подробно описывать не буду, ибо, что называется, действующие лица в общем-то те же. Для упрощения схемотехники из оригинальной схемы выкинут таймер КР580ВИ53, вместо него тактирование протокола выполняет синтезатор частот на интегральном генераторе и счётчике-делителе. Схема позволяет устанавливать либо отечественный УСАПП - КР580ВВ51А (скорость обмена 38400 Бод, перемычки J1 и J2 в нижнем положении), либо быструю КМОП-версию UART от OKI - MSM82C51A-2 (скорость обмена 115200 Бод, перемычки J1 и J2 в верхнем положении).
Программно данный порт полностью совместим с оригинальным (из ж. РАДИО), всё ранее написанное ПО (LINK$, VDISK) с ним совместимо (скорость обмена аппаратно зафиксирована, программная настройка игнорируется).


Информация по программированию порта COM1:


; BIOS (2/2) для DSDOS v3.81 (Орион-128.2)
; (C) 1998-2016 Соловьев Д.Н. /Санкт-Петербург/
; 18.06.2016

; Порт COM1 (ВВ51А)

PT_TM0:EQU 0F730H
PT_CTM:EQU 0F733H
PT_SP0:EQU 0F740H
PT_SP1:EQU 0F741H


IniCOM:
; Инициализация порта COM1

; Настройка таймера ВИ53
MVI A,36H
STA PT_CTM

LXI H,PT_TM0
MVI A,9; 14400 Бод
MOV M,A
XRA A
MOV M,A

; Настройка УСАПП ВВ51А
LXI H,PT_SP1
MVI A,1
MOV M,A
MOV M,A
MVI A,40H
MOV M,A
MVI A,4EH; настройка протокола (8,N,1)
MOV M,A
MVI A,27H
MOV M,A
DCX H; [HL]=PT_SP0
MOV A,M; очистка порта ввода
RET


SvbCOM:
; Запись байта в порт COM1
; I: [C]-записываемый байт
; O: <C>=0 - [A]=записанный байт,
; <C>=1 - порт не готов
MVI B,0; time-out const = 256

SVB1:
; ожидание готовности
DCR B
JZ LDB1_4
LDA PT_SP1
RRC
JNC SVB1
MOV A,C
STA PT_SP0
CMC
RET


LdbCOM:
; Чтение байта из порта COM1
; O: C=0 - [A]-считанный байт
; C=1 - ошибка (тайм-аут)

; проверка на преждевременную готовность
LDA PT_SP1
ANI 2
JNZ LDB1_2

; ожидание поступления данных
PUSH B
LXI B,33000; time-out const

LDB1_1:
DCX B
MOV A,B
ORA C
JZ LDB1_3
LDA PT_SP1
ANI 2
JZ LDB1_1
POP B

LDB1_2:
LDA PT_SP0
RET

LDB1_3:
POP B

LDB1_4:
STC
RET

Error404
30.06.2016, 19:11
Как вариант, если использовать ТМ8/9 + ИЕ7, то коэф. деления кварца можно будет не перемычками выставлять, а программно - записывать в порт некую константу начального счета для ИЕ7. Такая получится "ВИ53 для бедных". :)

На самом деле, ВИ53 - одна из самых дорогих МСХ чипсета 580. Лично мне не понятно почему.

Denn
30.06.2016, 20:58
Error404, да, можно. Но идея не в вариативности, а в возможности выжать из применяемой микросхемы максимум, ну и в возможности применения разных микросхем (кто что сможет достать нынче). Также тренд нашего времени - простота. К сожалению, этот тренд утрирован до абсурда - если что-то сложнее условно "пары кликов мышкой", то это автоматом попадает в категорию "многабукв, ниасилил" (( Тобишь заниматься какими-то программными настройками портов, подбором перемычек скорее всего никто не будет. А вот если оно слишком просто в сборке, ничего настраивать не надо и плюшка достаточно вкусная (скорость), то "может быть соберу".

А ВИ53 - это даааа, это же русский саунд-процессор :)

alx32
30.06.2016, 21:06
Denn, а возможен вариант с двумя 16с550?
На Али нашёл только в корпусе plcc и qfp по приемлемой цене, в dip только оптом или с невменяемой доставкой...

Error404
30.06.2016, 21:39
Denn, еще есть просьба. Можешь под порты задействовать один из 16b участков 0F730...0F73F или 0F740...0F74F или 0F750...0F75F? Тут надо бы провести исследование какой из них лучше (авторы могли что-то планировать, Бриджиди/Рогов, Чистяков и прочие стандартизаторы), хотя по факту мне не известно актуальное ПО или железки, использующее что-то по этим диапазонам. Сегодня, думаю, следует ориентироваться на существующие проекты, а не наполеоновские планы прошлого века, до реализации которых планирующие не дошли.

А то я еще не окончательно расстался с идеей Ethernet (http://zx-pk.ru/threads/14262-a-ne-pora-li-nam-vzyatsya-za-realizatsiyu-ethernet.html?p=392338&viewfull=1#post392338), а оно пересекается с твоими портами. Там удобно получается читать фреймы из контроллера LDIR-ом (что дает ускориться), поэтому под Ethernet-адаптер занят сразу большой кусок в области портов - F770..F7FF.

Denn
01.07.2016, 00:37
Denn, а возможен вариант с двумя 16с550?

А зачем? Для связи с большим братом достаточно одного порта. Это я привёл два варианта портов и разделил их разными именами по причине их принципиальной разницы в плане программирования, каждый выбирает свой вариант из соображений доступности чипов. Для работы достаточно одного - любого из них. Два одновременно не нужны. Если для каких-то своих нужд, то без проблем можно поставить два быстрых 16C550, только по адресации второй лучше посадить на ту же ветку F7Exh, в старшую часть F7E8..F7EFh (у 16C550 восемь регистров), правда придётся усложнить дешифрацию.

Идея следующая. У кого-то есть в хозяйстве ВВ51А и он не хочет заморачиваться с покупкой буржуйских м/сх, он собирает COM1, ставит ВВ51А и какое-то время довольствуется скоростью 38400 Бод, потом понимает, что в 3 раза быстрее было бы клёвее, и находит 82C51A-2, перекидывает пару джамперов и у него 115200 Бод. Кто-то сразу покупает 16C550 и делает COM2 - самый быстрый и простой вариант схемы. Как-то так.

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


Denn, еще есть просьба. Можешь под порты задействовать один из 16b участков 0F730...0F73F или 0F740...0F74F или 0F750...0F75F? Тут надо бы провести исследование какой из них лучше (авторы могли что-то планировать, Бриджиди/Рогов, Чистяков и прочие стандартизаторы), хотя по факту мне не известно актуальное ПО или железки, использующее что-то по этим диапазонам. Сегодня, думаю, следует ориентироваться на существующие проекты, а не наполеоновские планы прошлого века, до реализации которых планирующие не дошли.

Я изучал вопрос свободных портов, там конечно стандартный орионовский бардак... в итоге решил не трогать всю эту историю и пойти с конца:

F7F0..F7FFh - быстрый RAM-диск 1 Мб на СОЗУ;
F7E0..F7EFh - быстрый порт COM2 (а возможно и COM3 сюда же);
F7D0..F7DFh - адаптер SDHC карт (на МК);
F7C0..F7CFh - часы реального времени (на DS1307).

Конечно можно это всё запихнуть в пару "линеек", но наворачивать дешифрацию совсем не хочется (опять же принцип "пары кликов" - сложное и большое никто не будет собирать), и с упрощённой дешифрацией легче ставить только нужные устройства, а остальные либо не ставить вообще, либо добавлять по мере надобности.

П.С. порт COM1 использует участок F740..F74Fh, так что при желании можно работать через него, а весь этот новодел не ставить и использовать F780..F7FFh по своему усмотрению.

П.П.С. Касательно Ethernet'а. Я понимаю, что программно задачка интересная, но практического применения не вижу, т.к. драйвер если и удастся написать, то он займёт все ресурсы Ориона - чисто ради спортивного интереса, не более того.
В плане работы с внешним миром Орион мне видится в роли т.н. "тонкого клиента", которому нет смысла поручать ресурсоёмкие задачи. Я долго упирался в "религию" и хотел сделать поддержку SDHC программно полностью на Орионе... в итоге понял, что нет никакого смысла в этом. Ресурсов уйдёт море, а толку? Сама по себе SDHC - это тоже МК, так имеет смысл поручить с этим МК общаться тоже МК'шке, а Ориону он будет отдавать через порты-регистры нужные данные - чтение/запись целевого сектора и всё! А премудрости протокола пусть обслуживает МК (с выходом новых стандартов SD, просто обновлять прошивку МК).
Для общения с внешним миром Ориону достаточно быстрого порта RS-232, а разбор инет-протоколов пусть делает писюк, он тоже просто прослойка, маленькое звено в сложной цепи оборудования, за счёт которого функционирует Интернет.

Error404
01.07.2016, 09:46
часы на DS1307 же вроде на магнитофонный порт договорились повесить? Вот уж магнитофон действительно атавизм, и его порт можно использовать, тем более что схема подключения - 3 резистора.

Хотя если внедрять еще один МК (чего я обычно не хочу до последнего - не лампово, клавиатурная Мега48 и то была вынужденной - тот случай когда по-другому не обойтись), то и DS1307 тогда тоже вешать на МК, т.к. ее чтение/запись не проще алгоритмически и не быстрее чтения/записи SD-карт.

HardWareMan
01.07.2016, 09:57
Магнитофон всего лишь носитель. А сам интерфейс может использовать разную среду и в виду своей простоты очень практичен.

Error404
01.07.2016, 11:09
Никаких других разных сред в Орионе за без малого 30 лет не появилось. :)
Учитываю нынешнюю активность - и не появится.

Кстати, а вот что было, допустим не на Орионе, а на других аналогичных ПК? Вспоминается только осциллограф с частотами до 20 кГц (кило, Карл!) и цветомузыка. Т.е. демомейкерство какое-то.

Denn
01.07.2016, 11:52
Магнитофонный интерфейс лучше не трогать, до него ещё доберётся ренессанс :)

П.С. я через него делал читалку магнитных карт (из старого кассетника), был и соотв. софт написан. В планах было и писалку сделать, но тема стала неактуальной - забросил.

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

Насчёт надобности RTC честно говоря у меня в последнее время большие сомнения. Как в своё время был преодолён "болевой порог" о том, что писюк слишком плотно завязан на онлайн, так и сейчас понимаю, что связь Орион-писюк переходит в статус "перманентно", а раз так, то дешевле в любой момент получить дату/время запросом ORI-серверу. Я понимаю, по-началу это тяжело принять, ибо "религия", "не лампово" и т.п... но так или иначе, в будущем Орион будет "сидеть онлайн по вайфаю", это неизбежность :)

Error404
01.07.2016, 12:16
Связь перманентно нужна потому, что пока ты не прикрутил SD, на которую влезает весь софт. И электронный диск нужен только до этого же момента (т.к. он быстрее несущественно, а в эксплуатации ничем не отличается, даже менее удобен). Вот просто весь софт Ориона, Спека, MSX, Комодора (и я столько марок старых ПК не знаю - сколько влезает). Я Орион включаю когда хочу включить Орион, на РС у меня есть эмулятор - там и отладчик, и все образы опять же под рукой (нафиг мне лишнее если уж я включил ПС?)

Denn
01.07.2016, 12:47
Связь перманентно нужна потому, что пока ты не прикрутил SD, на которую влезает весь софт.

Не так. У меня уже есть дискета, которая труъ-"ламповая" и на которую влезает весь софт. Связь нужна потому, что писи - это в первую очередь надёжное харнилище (облачные технологии), это немедленная шара файлов целевой аудитории, в будущем это будет ещё и общение (IM, почта и может даже СС). Также это удобная каталогизация данных и немедленный доступ (я прямо из Нортона смогу менять папки - это оперативнее, чем перетыкать флэшки).



И электронный диск нужен только до этого же момента (т.к. он быстрее несущественно, а в эксплуатации ничем не отличается, даже менее удобен).

Нет. ЭД (ROM+SRAM диски) нужен для того, чтобы весь необходимый софт был всегда под рукой (ROM), конфигурационная инфа (настройки ОС и софта) были доступны при включении ПРК (SRAM, аналогия жёсткого диска на писи), быстрое хранилище для рабочих файлов позволяло работать с файлами объёмом примерно с дискету и файлы не терялись при внезапном отключении электричества (SRAM vs. квазидиск). И да, SRAM вечны, в отличии от дохнущих, морально устаревающих флэшек, увы.



Я Орион включаю когда хочу включить Орион, на РС у меня есть эмулятор - там и отладчик, и все образы опять же под рукой (нафиг мне лишнее если уж я включил ПС?)

У меня примерно с 2001 года писюк работает в режиме 24/7, т.е. не выключается вообще. Терпеть ненавижу ожидание загрузки Винды :) С появлением мобильных андройд-устройств (они тоже перманентно онлайн) мечтаю полностью отказаться от писюков, но пока увы не получается (некоторые вещи всё же неудобно делать тыканьем в экран :)).

П.С. не нравится писюк в качестве сервера? в будущем это будет самостоятельное труъ-восьмибитное устройство на Z80@20MHz (в планах, в разработке..), так что будет всё по религии :)

Error404
02.07.2016, 22:57
Оффтоп унес в отдельную тему (http://zx-pk.ru/threads/26689-razgovory-na-temu-kommunikatsij-i-oriona.html)

Denn
11.07.2016, 12:50
Прилетело очередное обновление ОС - DSDOS v3.83 :)

Главная новость - появилась синхронизация даты с ORI-сервером! Загрузчик ОС делает попытку синхронизации, и если сервер он-лайн, то устанавливает системную дату ОС на актуальную. Принудительно это можно сделать запуском утилиты DATE$ без параметров.
Если на момент запуска утилиты сервер недоступен, то выводится текущая системная дата ("Текущая дата: ..."), иначе актуальная дата берётся с сервера (сообщение выглядит так: "Актуальная дата: ...").
В API BIOS добавились соответствующие функции, а также добавлена возможность получения текущего времени с сервера (в будущем пригодится). Необходимо обновить программу ORI-сервера до версии 2.05 !

Также в DSDOS v3.83 исправлена досадная ошибка даты файла, записываемого на виртуальный диск. И в результате оптимизации кода текстового редактора в сборке DSDOS v3.81 появилась сложно уловимая бага, которая теперь тоже исправлена.

В версии ОС для ПРК "ОРИОН-ПРО" в загрузчике добавлена инициализация порта #FBh, которую не делает при сбросе "Монитор".


Ссылки для скачивания:

http://denn.ru/orion/dsdos/dsdos383.rar - образ ROM-диска (64 Кб) для ПРК "Орион-128"

http://denn.ru/orion/dsdos/dsdos383spro.rar - образ ROM-диска (64 Кб) для ПРК "Орион-ПРО"

http://denn.ru/orion/dsdos/dsdos383fpro.rar - образ ROM-диска (128 Кб) для ПРК "Орион-ПРО"

http://denn.ru/orion/oriserv/oriserv.exe - ORI-сервер v2.05


Для абонентов ORI-NET:

G-DRIVE\OriNET\DSDOS v3.83\ROM-disks - образ ROM-диска для ПРК "Орион-128"

G-DRIVE\OriNET\DSDOS v3.83 PRO\ROM-disks - образы ROM-дисков (64Кб и 128Кб) для ПРК "Орион-ПРО"

G-DRIVE\OriNET\V-DISK\oriserv.exe - ORI-сервер

G-DRIVE\OriNET\DSDOS v3.83 PRO\BIOS_DSDOSv3.83.doc - документация по API

Error404
20.07.2016, 09:54
тему быстрого порта COM2 на микросхеме 16C550 (http://denn.ru/orion/512/rs-232/16c550.pdf) (ещё пока доступной в продаже (http://www.chipdip.ru/product/16c550/)).


Польстился я на ценник в 100 рублей на сайте Чипадипа (т.к. на Али оно минимум по 300р. за штуку, и то если только брать в партии по несколько штук: от 3-5 штук), вступил в переписки с Чип-Дип, итоговый ответ от них был таков:
"могу предложить только PC16550DN/NOPB (Texas Instruments) – 3 шт., на заказ (предоплата) 4-6 нед., 870 руб./шт."
:v2_dizzy_facepalm:

Предполагаю, купят они на Али и впарят мне с тройной наценкой. В-общем, 82c51 - наше всё. :) Их на Али по 70р. можно взять, пускай и в партии от 5 штук (тоже в DIP).

Denn
20.07.2016, 10:14
Error404, вся радость в том, что есть выбор! Каждый паяет тот чип, до которого сможет дотянуться. Программно сделана поддержка обоих, причём слава богу прозрачно, т.е. не требуются танцы/настройки/кастомные прошивки.

АлександрПП
20.07.2016, 10:45
Предполагаю, купят они на Али
Ничего удивительного. С год назад искал какую-то микросхему, уже не помню. Хотелось получить ее побыстрее. Нашел в прайсе фирмочки в Чебоксарах. Приехал, переговорил. Говорят недели через три будет. Спросил паренька-менеджера, откуда они их получают. Ответил откровенно, что заказывают в Китае. Пришлось сказать, что на Али я и сам могу заказать.

alx32
20.07.2016, 10:58
Я заказывал на Али Gm16C550 GoldStar по $1,47, но сейчас товар не доступен...[emoji19]

Denn
20.07.2016, 11:07
Совершенно ничего удивительного. Работники магазинов не какие-то боги, а обыкновенные офисные "кое-какеры", которые "не парятся". У них точно такой же обычный компьютер, на котором они открывают страницу Яндекса, вбивают название детальки и смотрят где можно закупить подешевле.

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


"могу предложить только PC16550DN/NOPB (Texas Instruments) ... 870 руб./шт."

Это что-то уж совсем за гранью добра и зла ((

Можно в тутошнюю барахолку кинуть объяву "куплю 16C550", думаю местные продаваны с удовольствием подтянутся :)

Stampmaker
27.07.2016, 21:41
Предлагаю на рассмотрение форумчан (а может кто-то и изготовит) замену ROM-диску - Super ROM-диск - сокращённо SROM-диск. Устройство представляет из себя параллельно соединённые ПЗУ и СОЗУ, переключаемые джамперами. Т.к. DSDOS поддерживает ROM-диск объёмом до 1МБ, то в данном диске есть возможность поставить ПЗУ как на 64КБ, так и на 1МБ. СОЗУ набирается с шагом 128КБ, т.е. минимальный объем СОЗУ данного диска составляет 128КБ.

Зачем всё это нужно?
Думаю, некоторые пользователи Ориона сталкивались с вопросом об оперативном изменении содержимого ROM-диска, а затем, возможно, и с возвратом к предыдущему его состоянию. Для этого надо было стирать ПЗУ, записывать его на другом компьютере. По окончании эксперимента заново стирать и записывать. Теперь же этого делать не нужно. Вместо ПЗУ теперь работает СОЗУ. Из него компьютер стартует ОС, при необходимости СОЗУ "перепрошивается" самим же Орионом на другую сборку и продолжает работать, как ни в чём не бывало. Изначально, конечно же, ПЗУ всё-таки придётся прошить, чтобы можно было загрузиться. Но затем, используя специальную утилиту, мы можем "перезаписать" свой ROM-диск на любую другую сборку DSDOS текущей или даже новой версии, чем в ПЗУ, не вынимая ПЗУ! И в случае краха ОСи в СОЗУ (села батарея или ещё что-то), мы безболезненно грузимся из ПЗУ и спокойно заливаем нужную нам сборку обратно в СОЗУ. Из личного опыта могу сказать, что используя данный диск уже более трёх месяцев, информация из СОЗУ ни разу не пропала и экспериментировать с компьютером в плане ROM-диска стало гораздо легче.

Фото SROM-диска. В данном варианте плата дополнена переходником для телевизора и разъёмом PS/2. В обычном виде этого не будет (см. окончание поста).
http://s017.radikal.ru/i432/1607/a2/cbb0d1eee7e2.jpg (http://radikal.ru/big/554c272d4c034b2a81b3db8f1458f542)

В данном случае установлено 256КБ, чего, в общем, пока что достаточно. Остальные СОЗУ напаиваются бутербродом, все выводы, за исключением 30-ых, соединяются параллельно. Выводы 30 напаянных микросхем соединяются с выходами D5 1533АП15.
http://s017.radikal.ru/i432/1607/5a/fec5de3036bc.jpg (http://radikal.ru)


Как работать с диском?
! ВНИМАНИЕ !
Неаккуратное пользование утилитой может привести к выходу из строя либо порт ВВ55 либо ПЗУ.
Будьте внимательны!
Читайте все сообщения утилиты до конца и не торопитесь!
И ещё.
Разработчики схемы и ПО не несут никакой ответственности за повреждённые ваши данные или оборудование. Всё, что вы делаете, вы делаете на свой страх и риск. И не говорите потом, что вас не предупреждали.

Изначально предполагается, что у пользователя установлена DSDOS версии не ниже 3.8

Пример работы.
В зависимости от того, какое ПЗУ используется, 64КБ или 1МБ, джампер J9 ставится в соответсвующее положение.
Джампер J1 ставим в режим ROM, джампер J2 в любое и грузимся из ПЗУ.
http://s017.radikal.ru/i433/1607/36/16a87c397467.jpg (http://radikal.ru/big/9b5791fb3f274dc29650c8495dcf67c6)

Допустим, мы хотим обновить ранее установленную ОС 3.83 до версии 3.84 из виртуального диска.
http://s001.radikal.ru/i193/1607/49/ad9cf7896dd6.jpg (http://radikal.ru)

В ORI-сервере выбираем папку с нужной сборкой.
http://s019.radikal.ru/i633/1607/70/255329d66e27.jpg (http://radikal.ru)

В командной строке DSDOS набираем:
G:
G> SROM$ G: /S [BK] если на текущем ROM-диске отсутствует утилита SROM$

либо
A> SROM$ G: /S [BK], при условии, если утилита SROM$ находится на ROM-диске, а нужная сборка на виртуальном диске G:.

и внимательно следуя инструкциям программы, записываем сборку ОС в СОЗУ.
http://s009.radikal.ru/i307/1607/61/d7ccaef46e07.jpg (http://radikal.ru)

Переводим диск в [B]режим записи, установив J1 в RAM, а J2 в Write.
http://s016.radikal.ru/i334/1607/0c/ac8629aed1c4.jpg (http://radikal.ru)

Жмём [ВК] и ждём окончания работы.
http://s018.radikal.ru/i506/1607/f6/12048f36a1c6.jpg (http://radikal.ru)

Работа выполнена.
Теперь переводим диск в режим чтения, установив J2 в Read.
http://s04.radikal.ru/i177/1607/4f/2d7a833e6819.jpg (http://radikal.ru)
http://s019.radikal.ru/i632/1607/a1/d39608db2011.jpg (http://radikal.ru)

Это теперь рабочее состояние диска: J1=RAM, J2=Read и его больше трогать не нужно.

По окончании работы утилиты выполняем холодный рестарт ОС командой Q [BK].
http://s019.radikal.ru/i632/1607/e5/8cb820ae8f73.jpg (http://radikal.ru)


Всё. У нас теперь в SROM-диске нужная нам сборка DSDOS и программы.
http://s13.radikal.ru/i186/1607/24/4417020d2b0b.jpg (http://radikal.ru)

Схема SROM-диска.
http://s008.radikal.ru/i303/1607/b2/7a9f3ff5ae6b.jpg (http://radikal.ru/big/e8eba36ee0de46698c6657b8aea3700c)

Для работы SROM-диска необходимо провести небольшую доработку основной платы - пробросить на разъем ROM-диска всего 2 провода. На работе иного существующего железа, а также старого ROM-диска это никак не сказывается.

Итак, от DD53 ВВ55 порта клавиатуры вывод 15 соединить с контактом B9 разъема ROM-диска, а вывод 16 соединить с контактом B10.
По желанию можно также контакт С30 (инверсный сброс) системного разъема Х2 соединить с контактом А9 разъема ROM-диска, но так как триггер ТМ8 всегда обнуляется программно, то этот сигнал можно не пробрасывать, а просто соединить вывод 1 триггера ТМ8 через резистор 1кОм с линией +5В.

Схему и печатную плату, выполненные в PCAD 2004, можно скачать здесь (https://yadi.sk/d/d0j8X1pOtgeLZ).

P.S.
Как принято говорить, собранное из исправных деталей устройство начинает работать сразу и никакие наладки не требуются.

Denn
09.08.2016, 14:56
Очередной миниотчёт о проделанной работе и небольшой анонс ближайших планов.

Наконец-то удалось добраться до "метровых" RAM-дисков и сделать их программную поддержку. Сперва это был RAM-диск в Гибридном ЭД™ (информация в соотв. теме (http://zx-pk.ru/threads/25367-gibridnyj-elektronnyj-disk-dlya-prk-orion.html?p=880943&viewfull=1#post880943)), а теперь сделана аналогичная программная поддержка альтернативной "быстрой" реализации в виде отдельного ВУ, включаемого в системный разъём ПРК "Орион-128". Жаргонное название - "RAM7", т.к. девайс размещается в области портов расширения (F7xx), соответственно RAM-диск в ЭД получил название RAM5 (от локализации в F5xx).
О "RAM7" расскажу подробнее. Пилотный вариант разработан с использованием доступных микросхем СОЗУ UT621024 (http://www.denn.ru/orion/128/ram-disk/ut621024.pdf) и некоторого кол-ва ЛЭ простой логики. В ближайшее время Сергей (а-ка Stampmaker) обещал опубликовать схему, плату и некоторые подробности изготовления, у него этот девайс собран и успешно применяется в работе.

Итак, несколько слов о ТТХ RAM-диска. Физический объём 1 Мб (1024 Кб). Кластерная организация хранения, в связи с этим реальный объём для хранения файлов составляет 1016 Кб (8 Кб "съедают" каталог + FAT). Хранение данных при обесточивании ПРК осуществляется от батарейки CR2032 (3V). Защита данных от случайного повреждения двухуровневая: супервайзор + специальный механизм активации режима записи в СОЗУ. Для ускорения доступа использован аппаратный инкремент адреса при операциях чтения/записи. Непосредственно чтение/запись осуществляются простыми командами LDA/STA (или более быстрыми аналогами MOV rg,M / MOV M,rg).
RAM-диск инсталлируется при загрузке ОС и доступен, как диск E:. При первом запуске требуется инициализация (форматирование), которые на данный момент осуществляются с помощью специальной утилиты RAMD7$, впоследствии данный функционал будет интегрирован в имеющуюся стандартную утилиту FORMAT$ (вызов: FORMAT$ E: [/F] | [/V] | [/Q]).
В будущем концептуально предполагается скорее всего обязательное наличие в системе RAM-диска (любой реализации: ЭД или RAM7), который будет использоваться аналогично жёсткому диску на писи (хранение конфигурационных файлов ОС и прикладного ПО, файлов данных).

Следующим этапом развития предполагается создание единой платы т.н. DS-Card™, на которой будут размещены все необходимые устройства, а именно: быстрый порт COM2, быстрый RAM-диск, возможно RTC (i2c), быстрый SDHC, AY и ЦАП (2х12 бит, с активным ЦФ).
С целью уменьшения габаритов придётся "наступить на горло религии" и заменить рассыпуху на МК, а платы разбить на две (под концепт мат/платы рев.512, на которой штатно имеются два системных разъёма):

DS-Card I "mini":
- COM2 (16C550)
- COM3 (опционально);
- RAM7 (на двух СОЗУ по 512 Кб (http://www.denn.ru/orion/hardware/e-disk/k6t4008c1b.pdf));
- i2c RTC (опционально).
Коммутация на МК.

DS-Card II "mini":
- AY;
- ЦАП (2х12 бит, 2хDAC, активный ЦФ, фильтрация питания аналоговой части, линейный выход);
- "быстрый" SDHC;
- "быстрый" IDE (опционально).
Коммутация на МК.


Возможно, пилотным будет "бюджетный" вариант DS-Card на почти "религиозных" компонентах, со следующей "разблюдовкой":

DS-Card I "Sail":
- COM1 ("разогнанная" ВВ51А, 38400 Бод или MSM82C51A-2, 115200 Бод);
- COM2 (16C550, 115200 Бод);
- RAM7 (на 8 шт. СОЗУ 128 Кб).
Коммутация на рассыпухе.

DS-Card II "Sail":
- AY;
- Ковокс (2х12 бит, пассивный на резисторах, без ЦФ);
- "медленный" IDE на ВВ55+ЛН1 (опционально)
Коммутация на рассыпухе.

Благодаря использованию труъ-рассыпухи и "религиозных" компонентов, размеры плат бюджетного варианта будут соответствующие, что и отражено в названии :)

Процесс компоновки и разработки плат ещё в процессе, если есть желающие присоединиться, то, как говорится вэлкам (пишите в ЛС).

Stampmaker
09.08.2016, 20:35
Представляю схему диска RAM7 объёмом 1МБ.
http://s41.radikal.ru/i091/1608/ef/07f1e69ac972.jpg (http://radikal.ru/big/522e591a124e4d46968784bb5253dcda)

Расположен по адресам F7F0H...F7F3H
F7F0 - регистр данных;
F7F1 и F7F2 - регистры адреса;
F7F3 - регистр номера банка (0...15) и разрешения записи на диск.

Диск имеет две особенности:
1) Не теряет данные при выключении питания;
2) Имеет защиту от произвольной записи при сбоях в системе.

Как работает схема описывать не буду, она проста как ROM-диск и всё в ней ясно.

Если кто испытывает затруднения с приобретением супервайзера DS1210, то вот его замена.
Цифры в кружках - это соответствующие ножки микросхемы DS1210. Некоторые отсутствуют потому, что они попросту не нужны.
http://i079.radikal.ru/1608/0d/963e8d0171a2.jpg (http://radikal.ru)

Что касается платы, то в пилотном варианте совместно с диском на ней собраны и последовательные порты, которые были описаны ранее в этой же теме и подключаются непосредственно к USB. Заинтересованные могут скачать рисунок платы формата PCAD 2004 и программу теста формата *.ORI здесь (https://yadi.sk/d/G8bwEajiu5cED).

Фото платы.
http://s019.radikal.ru/i626/1608/e4/91a7aedca8c3.jpg (http://radikal.ru/big/398a8544e86a4677a7cbd98bce298492)

Немного о сборке.
Под микросхемы СОЗУ отведено два посадочных места. Остальные шесть напаиваются бутербродом.
Можно было сразу всё напаять, но я напаивал по частям и гонял тест диска. В итоге всё нормально.
http://s019.radikal.ru/i637/1608/a2/d29d463861e8.jpg (http://radikal.ru/big/bf1f741f51394305a1708798d41a296c)

Также на основной плате необходимо выполнить небольшую доработку.
Т.к. устройство требует сигнал прямого сброса, то на контакт В20 системного разъёма #F7 необходимо его подать с 12 ноги процессора.

Denn
30.08.2016, 00:54
В связи с периодически возникающей необходимостью обмена информацией между IBM-PC и Орионом, пришлось написать программу для конвертации файлов в *.ORI и обратно.

Версию для Windows cкачать можно тут - http://denn.ru/8bit/oriserv/oricnv.exe


Интерфейс конвертера простой и понятный:

http://denn.ru/8bit/oriserv/oricnv.gif

В левой панели показано содержимое папки с писишными файлами, в правой - содержимое папки с файлами *.ORI. Папки выбираются с помощью соответствующих кнопок над панелями, пути к папкам запоминаются в INI-файле программы. После успешной конвертации, содержимое панели выходного файла автоматически обновляется. Для принудительного обновления над панелями есть кнопки "Обновить".
Конвертируемый файл выделяется мышкой в соответствующей панели, и если его конвертация возможна, то становятся активными кнопки копирования.
Все кнопки снабжены всплывающими подсказками, которые появляются при наведении на них указателя мышки.

Программа имеет два режима конвертации:
1) Прямое копирование;
2) Копирование текста.

В первом режиме побайтовая копия исходного писишного файла оформляется в ORI-контейнер, при этом в заголовке орионовского файла устанавливаются следующие значения:
- имя файла (первые 8 символов исходного имени в верхнем регистре; если исходное имя короче, то дополняется пробелами до 8, согласно формату ORDOS/SPDOS/DSDOS);
- адрес посадки = 0000h;
- длина файла = длине исходного файла;
- атрибуты = 00h;
- номер страницы ОЗУ = 00h;
- дата файла = текущей системной дате на момент конвертации (согласно формату DSDOS).

При обратном преобразовании побайтовая копия "вынимается" из ORI-контейнера и оформляется в виде писишного файла с именем исходного орионовского.

Второй режим хитрее. Дело в том, что текстовые файлы на Орионе устроены несколько иначе, чем таковые на IBM-PC. Во-первых, отличается кодировка русских букв. Во-вторых, разделитель строк на писи состоит из двух байт (0Dh, 0Ah), а на Орионе из одного (0Dh). В-третьих, на Орионе признаком конца текстового файла является байт FFh, на писи такового нет вообще. Второй режим конвертации как раз учитывает все эти три особенности и делает соответствующие преобразования (в т.ч. меняется длина выходного файла!).
Также при копирования текста в ORI-файл, у последнего устанавливается "стандартный" адрес посадки 3000h, для совместимости с текстовыми редакторами. Этому же условию должен удовлетворять конвертируемый *.ORI файл при копировании текста на писи.

При конвертации PC→ORI в первом режиме, в качестве имени выходного файла берутся первые 8 символов исходного писишного файла. Во втором режиме берутся первые пять символов (родное расширение файла отбрасывается) и добавляется расширение ".TX". При обратной конвертации в первом режиме выходной писишный файл получает такое же имя, как у исходного ORI-файла, а во втором режиме в исходном имени точки заменяются на символ нижнего подчёркивания и добавляется расширение ".txt".

Конвертация PC→ORI в первом режиме доступна для любых файлов размером 1..65535 байт (ограничение файловой системы Ориона). Конвертация PC→ORI во втором режиме доступна только для текстовых файлов (определяется по расширению), ограничения по размеру аналогичные, как в первом режиме.

П.С. программа позволяет конвертировать файлы *.BRU в писишные (на правой панели они видны в списке). Обратное преобразование не поддерживается.

OldSpeccer
04.11.2016, 13:36
Привет всем, надеюсь выжившие остались! :)
В продолжение темы, ибо Орион жив.
*В процессе разборки гаражного хлама из-под прочего мусора показалась страшная, позеленевшая, некогда полузапущенная другом, но так и не ожившая плата Ориона.
Всплыла былая любовь - не смог пройти мимо. С удивлением обнаружил, что кое-что даже можно найти, и вполне живые люди совсем недавно еще занимались темой,
за что - отдельный большой респект! :)
Итак, взялся я за паяло, оскоп и интернет, и вскоре Орион задышал. Оживал он, правда, очень трудно, но в итоге многочисленные глюки были отловлены, и он наконец уверенно зашуршал. Устойчиво и без глюков, настоящий железный Орион :)
Проц ВМ80 (а надо ли иное?), память 256К на ру5-х, с доп. платой, ром-диск на 29с010, клавиатура на атмеге88, 32" по SCART-у (кстати, а вы знали, что при отображении
в режиме 16:9 пропорции картинки почти идеальны - басик рисует правильный круг!!), сдвиг экрана вниз выполнен. С большим удовольствием констатировал, что Орион - очень приятная 8-битка (как и планировалось), и в немалой степени это заслуга программной среды DSDOS, но и в принципе архитектуры. Ну, и для возможности действительно использования Ориона остался последний шаг - хранение-доступ информации.
И вот тут, казалось бы уже все просто - я таки уперся в стену,и надеюсь на помощь небезразличных форумчан.
Была собрана плата последовательного интерфейса - сначала на связке ВИ53+uPD71051, но она не заработала как положено - интерфейс работал в одну сторону - прием был, а передачи нет. Схема была переделана под фиксированный клок и 38400 - но увы, те же грабли: прием есть - передачи нет. Подозрение пало на мс УсАПП, откопал целую стопку КР580ВВ51 - результат тот же!
После 18-ти попыток найти ошибку-кз-обрыв и перепроверки всего - взялся за даташит на 8251, и обнаружил там упоминание, что передатчик выдает данные на TxD только при 0 на входе /CTS. Соединил этот вывод с землей, и о, чудо - байтики пошли в обе стороны. Отсюда мой первый вопрос к автору(Denn): я видел - вы тестировали также на "железном" Орионе? Вы в эти грабли не упирались? Может у вас RS232-кабель в "железе" - полный, с распаянными RTS/CTS, а эмулятор просто игнорирует эти сигналы? Если не трудно - пожалуйста перепроверьте вопрос! Соединение RTS-CTS(лупбэк) на порту Ориона никакого эффекта не дает, только посадка в 0 входа ВВ51-й.
Второе - несмотря на то, что байты в терминале ходят корректно в обе стороны, тем не менее Орион "не видит" сервера. Запускается сервер версии 2.05 (винда х64, core2duo), порт занимает корректно. Орион при старте обнаруживает порт и пишет наличие виртуального диска 16 с чем то мегабайт, но при попытке любого обращения
DSDOS вываливает ошибку 80 - диск не готов. Проверено с DSDOS 3.81 и 3.83. Заметил, что при попытке обращения к виртуальному диску на TxD нет никакой активности, что вряд ли можно считать нормальным. Уважаемый Denn, если вы еще следите за топиком - нетрудно ли будет глянуть в суть вопроса? :)

Hacker VBI
04.11.2016, 14:17
OldSpeccer, поздравляю! :)

OldSpeccer
04.11.2016, 16:12
Stampmaker,
ИМХО конечно, но в схеме SROM-диска я бы выбросил лишний 20-ногий, и не самый подножный буфер,
руля инверсными чипселектами памяти прямо с инверсных выводов ИД7, а проинвертировал бы единственный
выход супервайзера. Разве так не логичнее?

Stampmaker
04.11.2016, 18:21
А как потом обеспечить подачу лог.1 на инверсных чипселектах при выключении питания? Это одно из условий хранения информации в СОЗУ.

Denn
04.11.2016, 19:58
OldSpeccer, мои поздравления с оживлением суперкомпьютера! :)

По вопросам.

Для корректной работы ВВ51 интерфейс должен быть полноценным, сигналы RTS/CTS она обрабатывает. Соответственно, получаются два варианта: либо мы "затыкаем" RTS/CTS перемычками (7-8 контакты разъёма DB-9) на каждой стороне и т.о. обманываем протокол, либо делаем честный линкер с перекрёстной передачей сигналов RTS/CTS. В первом случае в сервере (на писи) в настройках порта параметр "Flow Control" ставим в "None", во втором случае - "Hardware".


Соединение RTS-CTS(лупбэк) на порту Ориона никакого эффекта не дает, только посадка в 0 входа ВВ51-й.

Скорее всего где-то аппаратная неисправность. "Лупбэк" (но только с обоих концов!) должен решать вопрос.

В сборках прошивок ОС, в конце есть файлы теста портов СОМ1 и СОМ2, с их помощью можно полноценно протестировать соответствующие порты, в т.ч. и "лупбэком", т.е. замыкаем 2+3 и 7+8 на разъёме СОМ-порта Ориона, в результате чего тест будет печатать задвоенные символы (отправленный и принятый).

В "быстрой" реализации порта (COM2, на 16C550) программно отключена обработка RTS/CTS, т.о. возможно использование "кастрированного" линкера, у которого сигналы RTS/CTS висят в воздухе. При этом в настройках порта сервера "Flow Control" ставим в "None".

Рекомендую по-возможности использовать скорость 115200 Бод, т.к. работа на ней черезвычайно комфортная!
В данный момент я работаю над т.н. "кэшированием" каталогов в ОС DSDOS, что позволит ощутимо ускорить выполнение файловых операций при работе с виртуальным диском, а также с RAM5/RAM7, но всё равно лучше работать на 115200 Бод.



несмотря на то, что байты в терминале ходят корректно в обе стороны, тем не менее Орион "не видит" сервера. Запускается сервер версии 2.05 (винда х64, core2duo), порт занимает корректно.

К сожалению, у меня олд-скул что называется "по жизни", и домашние компы примерно уровня Пентиум-3, разлива 2001-го года :) Соответственно, Винда там ХР, обычная 32-битная. Проверить работоспособность сервера на новомодных 7-ках, 8-ках и 10-ках и 64-битных версиях у меня возможности нет (( Поэтому не могу гарантировать правильную работу старинной компонеты СОМ-порта на таких системах. Если кто-то исследует вопрос, буду благодарен за обратку.

Лично пробовал USB-реализацию СОМ-порта в виде шнурка-переходника - у меня не "взлетела", работать работало, но периодически были ошибки в передаваемых данных в сторону Ориона (ошибка в старшем бите), подозреваю что проблема в плохом согласовании уровней сигналов (в шнурке скорее всего MAX232, а у меня в Орионе "трэш" на КТ315 :)). В итоге для увеличения кол-ва портов в писюке нашёл PCI-карту с двумя СОМ-портами, которая заработала сразу "из коробки", на чём и успокоился.



Орион при старте обнаруживает порт и пишет наличие виртуального диска 16 с чем то мегабайт, но при попытке любого обращения DSDOS вываливает ошибку 80 - диск не готов.

Скорее всего проблема где-то на начальной стадии протокола, т.е. Орион отправил запрос серверу и не получил ответ.
В сервере начиная с версии 2.05 есть возможность подробного логирования ошибок, для этого нужно включить обе галочки "Журнал" и "Подробно". Поскольку протокол всегда двухсторонний, то ошибка на Орионе также приведёт и к ошибке на писи, которую сервер зафиксирует в лог, который можно посмотреть нажав кнопку "Журнал операций". Там будет HEX-код ошибки, по которому я смогу попытаться понять на каком участке алгоритма обмена происходит сбой. Чем меньше код, тем ближе к началу протокола проблема.

Опять же, для начала лучше просто проверить связь Орион<->Писи с помощью тестов, передавая как одиночные символы, так и строки. По ошибкам в строках можно уже примерно предположить характер проблемы.



Заметил, что при попытке обращения к виртуальному диску на TxD нет никакой активности, что вряд ли можно считать нормальным.

Получается, что сервер вообще не видит запросов - в таком случае ошибок он не зафиксирует.
Скорее всего проблема в области RTS/CTS или настройки "Flow Control" на писи.

OldSpeccer
04.11.2016, 22:49
Мои поздравления с оживлением суперкомпьютера! :)

Мерси! :) Тренировка синаптических соединений :)



По вопросам.
Для корректной работы ВВ51 интерфейс должен быть полноценным, сигналы RTS/CTS она обрабатывает. Соответственно, получаются два варианта: либо мы "затыкаем" RTS/CTS перемычками (7-8 контакты разъёма DB-9) на каждой стороне и т.о. обманываем протокол, либо делаем честный линкер с перекрёстной передачей сигналов RTS/CTS. В первом случае в сервере (на писи) в настройках порта параметр "Flow Control" ставим в "None", во втором случае - "Hardware".

Специально проверил "затычки" - имеются с обоих концов. Никак не влияет. Flow control разумеется везде стоит в none - и в настройках порта в системе, и в настройках "орион-сервера".




Скорее всего где-то аппаратная неисправность. "Лупбэк" (но только с обоих концов!) должен решать вопрос.

В теории. Однако вот что получается. На выходе /RTS порта ВВ51 - неизменно высокий уровень, единица. Замыкаясь на /CTS через перемычку по RS-232, он все равно транслируется в единицу - передачи нет, прием есть. Неисправность ВВ51 исключена. Состояние /RTS не меняется при попытке из ОС обратиться к диску.



В сборках прошивок ОС, в конце есть файлы теста портов СОМ1 и СОМ2, с их помощью можно полноценно протестировать соответствующие порты, в т.ч. и "лупбэком", т.е. замыкаем 2+3 и 7+8 на разъёме СОМ-порта Ориона, в результате чего тест будет печатать задвоенные символы (отправленный и принятый).

Ну конечно, я разобрался - я ж писал выше, что в терминальном режиме (из программы TSTcom1$) я вижу отправляемое с ПК - это было и с ВИ53-й, и с внешним геном. Лупбэк не двоит символы, потому что нет передачи. Если /CTS принудительно опустить в 0 - передача есть,
лупбэк работает, в терминале вижу печатаемое на Орионе, и наоборот - все проходит. Вот только не видит Орион сервера.


В "быстрой" реализации порта (COM2, на 16C550) программно отключена обработка RTS/CTS, т.о. возможно использование "кастрированного" линкера, у которого сигналы RTS/CTS висят в воздухе. При этом в настройках порта сервера "Flow Control" ставим в "None".

Ах если бы у меня не лежало больше 30-ти ВВ51-х :) - возможно это был бы и вариант :) Для начала все же запустим на ВВ51,
тем более, что так истинно труъ :) А в настройках ВВ51 нельзя включить игнор /CTS?



К сожалению, у меня олд-скул что называется "по жизни", и домашние компы примерно уровня Пентиум-3, разлива 2001-го года :) Соответственно, Винда там ХР, обычная 32-битная. Проверить работоспособность сервера на новомодных 7-ках, 8-ках и 10-ках и 64-битных версиях у меня возможности нет (( Поэтому не могу гарантировать правильную работу старинной компонеты СОМ-порта на таких системах. Если кто-то исследует вопрос, буду благодарен за обратку.

Не вижу причин, почему бы оно не работало, если оно через Win32Api порт дергает. Повторю - в терминале - все работает. Точно тот же порт.


Лично пробовал USB-реализацию СОМ-порта в виде шнурка-переходника - у меня не "взлетела", работать работало, но периодически были ошибки в передаваемых данных в сторону Ориона (ошибка в старшем бите), подозреваю что проблема в плохом согласовании уровней сигналов (в шнурке скорее всего MAX232, а у меня в Орионе "трэш" на КТ315 :)). В итоге для увеличения кол-ва портов в писюке нашёл PCI-карту с двумя СОМ-портами, которая заработала сразу "из коробки", на чём и успокоился.

Ну да, всякие согласователи - пройденный этап. Имею количество 232-х конверторов примерно от 5-ти разных производителей, установил сходу TI-ные МАХы. Вариант несогласования - не вариант.


Скорее всего проблема где-то на начальной стадии протокола, т.е. Орион отправил запрос серверу и не получил ответ.
В сервере начиная с версии 2.05 есть возможность подробного логирования ошибок, для этого нужно включить обе галочки "Журнал" и "Подробно". Поскольку протокол всегда двухсторонний, то ошибка на Орионе также приведёт и к ошибке на писи, которую сервер зафиксирует в лог, который можно посмотреть нажав кнопку "Журнал операций". Там будет HEX-код ошибки, по которому я смогу попытаться понять на каком участке алгоритма обмена происходит сбой. Чем меньше код, тем ближе к началу протокола проблема.
Опять же, для начала лучше просто проверить связь Орион<->Писи с помощью тестов, передавая как одиночные символы, так и строки. По ошибкам в строках можно уже примерно предположить характер проблемы.

Возвращаю /CTS на землю. Передаю байты в ПК - их видно в терминале. Символы соответствуют, местами регистр не совпадает, но все
правильно - одиночные символы ок. При передаче текста с ПК на Орион - иногда пакет проходит полностью, иногда теряется первый байт. Строго и только первый. при нажатии любой клавиши в режиме DUMP на орионе вылетает сообщение об ошибке без комментариев.
В логах орион-сервера естественно ничего не находится, ибо, как я уже говорил, попытка обращения к диску G: не вызывает никакой активности на линии TxD, даже с /CTS опущенным в 0.

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


А как потом обеспечить подачу лог.1 на инверсных чипселектах при выключении питания? Это одно из условий хранения информации в СОЗУ.

Первое, что приходит в голову - ставим НС138 в качестве ИД7. Потребление КМОП в статике - микроампер... При 3 вольтах и околонулевых токах вполне будет себе единички держать, разве нет?

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

На всякий случай соединил /RTS c /CTS минуя конвертер, замкнул 17 вывод ВВ51-й с 23-м. Симптомы те же - передачи нет, лупбэк не двоит символы. Все еще не хочется верить, что придется аппаратный flow control делать. Denn, у вас ведь работало без него на ВВ51? Или не однозначно...? И как бы там ни было - данные передаются-принимаются, ну теряется ингда там байт, но в вашем протоколе ведь сверка контрольных сумм предусмотрена, правда?

Denn
04.11.2016, 23:06
OldSpeccer, я так понял, у вас в качестве преобразователя интерфейса в Орионе используется MAX232 ?
Тогда действительно проблем быть не должно.

На всякий случай вот мой вариант связки ВВ51+MAX232 - http://denn.ru/orion/512/rs-232/com1_82c51_schematic.jpg
Этот вариант включения точно рабочий, я его макетировал и проверял, за него я могу ручаться.

Тесты должны работать без ухищрений типа "вход ВВ51 на 0" ! Либо перемычки 7-8, либо честный нуль-модемный линкер. Если в таком варианте тест работает в обе стороны, то и сервер будет работать без проблем.
Важный момент! При тестировании, на писи надо пользоваться не Виндовым гипертерминалом, а вот этой утилитой - http://denn.ru/orion/oriserv/com-test.exe
Эта утилита использует ту же самую компоненту для работы с СОМ-портом, что и в сервере. Если с утилитой не заработает, а с виндовой терминалкой будет ок, значит моё предположение насчёт кривой работы компоненты в новых ОС подтвердится.

Небольшие уточнения. Передачу одиночных символов в обе стороны делать в режиме "CHAR", а строки в два и более символов - в "DUMP". В последнем режиме "проглатываний" первого символа строки на Орионе быть не должно! Символы должны строго соответствовать передаваемым (в т.ч. регистр).
Искажения кодов происходят из-за неточности тактирования ВВ51. Если не удаётся добиться 100%-но стабильной передачи, то нужно снижать скорость протокола. Скорость 38400 Бод - это дичайший оверклок, у меня оно работает вопреки всем даташитам! Возможно, просто удачные экземпляры микросхем (распоследний новодел). Уменьшение частоты генератора в 2 раза даст тайминги для скорости 19200 Бод, при этом ВВ51 будет тактироваться допустимой частотой (1,8432 МГц).

OldSpeccer
04.11.2016, 23:11
P.S. Denn, а в каком режиме вы заводите ВВ51-ю? Что мне сразу не показалось подозрительным, откуда вв51-я 38400 бод в асинхронном режиме? 9600 номинально, ну, может 14400. А вот в синхронном режиме она до 56 кбит тянет номинально - стОит попробовать. Получается, что вы ее запускаете и запускали (даже когда на 9600) все время в синхронном режиме - именно в этом режиме она начинает передачу по активному нулю на входе /CTS - в асинхронном же ей на /CTS наплевать. Если так, то во-первых, поможет только полный нуль-модемный кабель и аппаратный flow control, во вторых можно в полтора раза поднять скорость.

Denn
04.11.2016, 23:15
Однако вот что получается. На выходе /RTS порта ВВ51 - неизменно высокий уровень, единица. Замыкаясь на /CTS через перемычку по RS-232, он все равно транслируется в единицу - передачи нет, прием есть. Неисправность ВВ51 исключена. Состояние /RTS не меняется при попытке из ОС обратиться к диску.

Странно. Насколько помню, перед отправкой байта с Ориона я проверяю готовность порта (обратку "CTS"). При замыкании порта на себя (лупбэк), очевидно что готовность к приёму (сигнал "RTS") должна быть по-умолчанию (в ВВ51 она должна выставляться по сигналу аппаратного сброса или при программной инициализации УСАПП). С двумя перемычками (2+3 и 7+8) тест на Орионе в режиме "CHAR" должен печатать задвоенные символы. Обязан! Если этого не происходит, значит аппаратно порт Ориона неисправен.

OldSpeccer
04.11.2016, 23:27
я так понял, у вас в качестве преобразователя интерфейса в Орионе используется MAX232 ?
Тогда действительно проблем быть не должно.

Именно так. А со стороны компа - материнская плата с честным УАРТом.


На всякий случай вот мой вариант связки ВВ51+MAX232 - http://denn.ru/orion/512/rs-232/com1_82c51_schematic.jpg
Этот вариант включения точно рабочий, я его макетировал и проверял, за него я могу ручаться.

Именно этот вариант у меня и собран. Только не интегральный ген, а параллельный осциллятор на НС00, но это не принципиально. Все клоки в порядке.


Тесты должны работать без ухищрений типа "вход ВВ51 на 0" ! Либо перемычки 7-8, либо честный нуль-модемный линкер.
Если в таком варианте тест работает в обе стороны, то и сервер будет работать без проблем.
Важный момент! При тестировании, на писи надо пользоваться не Виндовым гипертерминалом, а вот этой утилитой - http://denn.ru/orion/oriserv/com-test.exe
Эта утилита использует ту же самую компоненту для работы с СОМ-портом, что и в сервере. Если с утилитой не заработает, а с виндовой терминалкой будет ок, значит моё предположение насчёт кривой работы компоненты в новых ОС подтвердится.


Однако же без ухищрений не работают. Честного нуль-модемного линкера нет, и его применение хочется оттянуть по возможности - нет под рукой кабеля хорошего, многожильного... А с перемычками не работает железобетонно! Разумеется, тестирование провожу именно вашей утилитой. Повторю, в режиме DUMP нажате любой клавиши на орионе мгновенно выводит "ошибку" - это даже тогда, когда /CTS притянут к земле, и в режиме CHAR одиночные символы уходят без проблем.



Небольшие уточнения. Передачу одиночных символов в обе стороны делать в режиме "CHAR", а строки в два и более символов - в "DUMP". В последнем режиме "проглатываний" первого символа строки на Орионе быть не должно! Символы должны строго соответствовать передаваемым (в т.ч. регистр).
Искажения кодов происходят из-за неточности тактирования ВВ51. Если не удаётся добиться 100%-но стабильной передачи, то нужно снижать скорость протокола. Скорость 38400 Бод - это дичайший оверклок, у меня оно работает вопреки всем даташитам! Возможно, просто удачные экземпляры микросхем (распоследний новодел). Уменьшение частоты генератора в 2 раза даст тайминги для скорости 19200 Бод, при этом ВВ51 будет тактироваться допустимой частотой (1,8432 МГц).
Я не верю в сбои ВВ51, потому что NEC uPD71051 ведет себя так же, при том что она нормирована на 230 кбод. Спрошу наверное еще раз про режим...вы ведь в синхронном заводите ВВ51?

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


С двумя перемычками (2+3 и 7+8) тест на Орионе в режиме "CHAR" должен печатать задвоенные символы. Обязан! Если этого не происходит, значит аппаратно порт Ориона неисправен.
Но все же нет. Замыкаю попарно TxD и RxD, /RTS и /CTS прямо на выводах порта, чтобы исключить теоретическую неисправность MAX232-й. Символы НЕ ДВОЯТСЯ. Отрываю /CTS, вешаю на землю - символы двоятся. Естественно, что с MAX232 поведение то же самое. Аналогичное поведение демонстрируют примерно 4-5 микросхем из одной партии, все новые, плюс японский аналог.

Denn
04.11.2016, 23:28
P.S. Denn, а в каком режиме вы заводите ВВ51-ю? Что мне сразу не показалось подозрительным, откуда вв51-я 38400 бод в асинхронном режиме? 9600 номинально, ну, может 14400. А вот в синхронном режиме она до 56 кбит тянет номинально - стОит попробовать. Получается, что вы ее запускаете и запускали (даже когда на 9600) все время в синхронном режиме - именно в этом режиме она начинает передачу по активному нулю на входе /CTS - в асинхронном же ей на /CTS наплевать. Если так, то во-первых, поможет только полный нуль-модемный кабель и аппаратный flow control, во вторых можно в полтора раза поднять скорость.

В том-то и дело, что в асинхроне 38400! Как выяснилось, проблема с разгоном асинхрона вот в чём. Для корректной расшифровки протокола в асинхроне, необходимо тактировать УСАПП частотой как минимум в 5 раз превышающей клок самого протокола. А серия 580 имеет верхний предел в 2 МГц. Чтобы выполнилось условие, для скорости 38400 Бод нужен клок не менее 3,6 МГц. С такой частотой ВВ51 не должна работать... тем не менее, у меня она прекрасно работает и даже почти не греется.
С клоком 2 МГц (схема из ж. "РАДИО") максимальный предел устойчивой передачи был 14400 Бод. На передачу можно было и больше, а вот на приём условие 5-кратного превышения обязательное.

OldSpeccer
04.11.2016, 23:34
В том-то и дело, что в асинхроне 38400! Как выяснилось, проблема с разгоном асинхрона вот в чём. Для корректной расшифровки протокола в асинхроне, необходимо тактировать УСАПП частотой как минимум в 5 раз превышающей клок самого протокола. А серия 580 имеет верхний предел в 2 МГц. Чтобы выполнилось условие, для скорости 38400 Бод нужен клок не менее 3,6 МГц. С такой частотой ВВ51 не должна работать... тем не менее, у меня она прекрасно работает и даже почти не греется.
С клоком 2 МГц (схема из ж. "РАДИО") максимальный предел устойчивой передачи был 14400 Бод. На передачу можно было и больше, а вот на приём условие 5-кратного превышения обязательное.

В асинхронном режиме микросхеме должно быть наплевать на состояние /CTS. А как оно явственно следует из опытов - от состояния /CTS ее поведение зависит напрямую. Что касается верхнего предела 2 МГц - это конечно же ерунда, заниженная планка ГОСТа.
ЗЫ: иду-ка я наверное паять нуль-модем...

Denn
04.11.2016, 23:59
Но все же нет. Замыкаю попарно TxD и RxD, /RTS и /CTS прямо на выводах порта, чтобы исключить теоретическую неисправность MAX232-й. Символы НЕ ДВОЯТСЯ. Отрываю /CTS, вешаю на землю - символы двоятся. Естественно, что с MAX232 поведение то же самое. Аналогичное поведение демонстрируют примерно 4-5 микросхем из одной партии, все новые, плюс японский аналог.

Либо "не той системы" форма клока у вашего генератора, либо ваши экземпляры микросхем не тянут оверклок. Может проблемы реализации (отсутствие блокировочных ёмкостей, наводки из-за неудачной топологии или что-то в этом роде). Другого просто предположить не могу.
Самое простое: для начала попробовать уменьшить частоту клока в 2 или в 4 раза (получится скорость 19200 или 9600 Бод, соответственно). Если так заработает, то тогда будет понятно куда двигаться дальше.

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


В асинхронном режиме микросхеме должно быть наплевать на состояние /CTS.

На основании чего такой вывод? Проверка состояния "CTS" программируется при инициализации, от режима она не зависит. Режим ВВ51 у меня программируется - асинхронный.

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


Символы НЕ ДВОЯТСЯ. Отрываю /CTS, вешаю на землю - символы двоятся. Естественно, что с MAX232 поведение то же самое. Аналогичное поведение демонстрируют примерно 4-5 микросхем из одной партии, все новые, плюс японский аналог.

Со своей стороны могу сказать, что у меня собрана эта схемотехнимка в трёх вариантах: на "О-128", на "О-512" и на "ПРО". На первых двух работает вариант с перемычками-затычками 7+8 (14400 и 38400, соответственно), на "ПРО" сделан полноценный линкер (режим "Flow Control = Hardware"). Причём на "ПРО" вместо ВВ51 поставил быстрый КМОП 82С51А-2 с клоком 10 МГц, работаю на скорости 115200 Бод (аналогичный вариант успешно работает у Дмитрия2012). У Stampmaker'а в обоих "О-128" порты на ВВ51 заработали сразу (14400/19200 Бод). Проблем с CTS/RTS не было, слышу про неё впервые.

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


ЗЫ: иду-ка я наверное паять нуль-модем...

Есть у меня одна догадка... Если к ВВ51 не идёт аппаратный сброс на вход 21, то возможно и будут приколы с установкой сигнала на выходе "RTS". А не идти он может по причине того, что изначально его на "В20" системного разъёма нет (его надо пробрасывать проводком).
И как раз в этом случае не будет работать перемычка 7+8, т.к. "RTS" используется свой, а не от сервера. Тогда при спайке честного линкера Орион таки получит правильный сигнал CTS, но сервер таковой от Ориона не увидит - придётся выставлять "None", в таком варианте даже будет работать :)

OldSpeccer
05.11.2016, 00:24
Либо "не той системы" форма клока у вашего генератора, либо ваши экземпляры микросхем не тянут оверклок. Может проблемы реализации (отсутствие блокировочных ёмкостей, наводки из-за неудачной топологии или что-то в этом роде). Другого просто предположить не могу.

Да не, с клоками все хорошо. И работают микросхемы четко, есть 2-х лучевой 100-мгцный скоп - все, как на ладони. Грабли точно не с клоком. Уж поверьте мне, я на цифре не одну собаку съел и ужасы видал :) Все кошерно, не морочьте голову себе клоком. Криворукости с моей стороны конечно возможны, со скидкой на лет 30 стажа :)


Самое простое: для начала попробовать уменьшить частоту клока в 2 или в 4 раза (получится скорость 19200 или 9600 Бод, соответственно). Если так заработает, то тогда будет понятно куда двигаться дальше.

Напомню, что аналогичное поведение наблюдается и в штатном режиме 9600 бод, с ВИ53-й. На лету перепроверить не могу, так как ИЕ5-я распаяна под 7МГц, но и там работало только с /CTS притянутым к земле, и точно так иногда терялся первый байт посылки. Но ради чистоты эксперимента я все же попробую откатиться, вторым делом. А первым - распаяю RTS-CTS линк. Чтоб уяснить для себя.




На основании чего такой вывод? Проверка состояния "CTS" программируется при инициализации, от режима она не зависит. Режим ВВ51 у меня программируется - асинхронный.

На основании изучения даташита Интел 8251А, страницы 2-9, 2-10 - описание работы в асинхронном и синхронном режимах соответственно.
В асинхронном режиме микросхема сразу же отправляет в TxD полученный ею по ШД байт, добавляя к нему служебные биты и синхронизируясь к клоку передачи. В синхронном же режиме она принимает во внутренний буфер байт данных, но выдает его только СИНХРОНИЗИРУЯСЬ сигналом /CTS. Понятное дело, что если /CTS постоянно активен, то работает все аналогично асинхронной передаче - просто синхронизируясь с клоком. Собственно именно это поведение я и наблюдаю у себя, с чего я делаю вывод, что микросхема работает в синхронном режиме.





Со своей стороны могу сказать, что у меня собрана эта схемотехнимка в трёх вариантах: на "О-128", на "О-512" и на "ПРО". На первых двух работает вариант с перемычками-затычками 7+8 (14400 и 38400, соответственно), на "ПРО" сделан полноценный линкер (режим "Flow Control = Hardware"). Причём на "ПРО" вместо ВВ51 поставил быстрый КМОП 82С51А-2 с клоком 10 МГц, работаю на скорости 115200 Бод (аналогичный вариант успешно работает у Дмитрия2012). У Stampmaker'а в обоих "О-128" порты на ВВ51 заработали сразу (14400/19200 Бод). Проблем с CTS/RTS не было.

Еще раз - замена на NEC uPD71051 со штатным 10-ти МГц не меняет картины. Проблема ТОЧНО не в частотах.
Вы знаете - меня самого удивляет, что такой вроде бы давно понятный узел, как , ставит в такие тупики.
Но ловить отладчиком обращение к ВВ51 мне хочется еще меньше, чем паять полный нуль-модемный кабель :)
Не слишком ли многого я попрошу, если попрошу комментированный исходник процедуры инициализации ВВ51? :)

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



Есть у меня одна догадка... Если к ВВ51 не идёт аппаратный сброс на вход 21, то возможно и будут приколы с установкой сигнала на выходе "RTS". А не идти он может по причине того, что изначально его на "В20" системного разъёма нет (его надо пробрасывать проводком).

К моему великому сожалению, Ваша догадка не верна. О сбросе я знаю, и конечно же его пробросил - а также наблюдаю его прохождение. Не то...
Волосы на груди кончаются :) :)

Denn
05.11.2016, 00:29
Напомню, что аналогичное поведение наблюдается и в штатном режиме 9600 бод, с ВИ53-й.

Тогда вариант непрохождения сигнала сброса на ВВ51, как следствие неправильная инициализация УСАПП.



Не слишком ли многого я попрошу, если попрошу комментированный исходник процедуры инициализации ВВ51? :)



; пОРТ COM1 (вв51а)

PT_TM0:EQU 0F730H
PT_CTM:EQU 0F733H
PT_SP0:EQU 0F740H
PT_SP1:EQU 0F741H

IniCOM:
; нАСТРОЙКА ТАЙМЕРА ви53
MVI A,36H
STA PT_CTM

LXI H,PT_TM0
MVI A,9; 14400 бОД
CALL SvPORT
XRA A
CALL SvPORT

; нАСТРОЙКА усапп вв51а
LXI H,PT_SP1
INR A; =MVI A,1
CALL SvPORT
CALL SvPORT
MVI A,40H
CALL SvPORT
MVI A,4EH; 8N1
CALL SvPORT
MVI A,27H
CALL SvPORT
DCX H; LDA PT_SP0; ОЧИСТКА ПОРТА ВВОДА
MOV A,M
RET

SvPORT:
; зАПИСЬ ДАННЫХ В МЕДЛЕННЫЙ ПОРТ вв51а
MOV M,A
RET



Собственно инициализация ВВ51 это программный сброс и последовательная запись значений:

4Eh (0100|1110b)
27h (0010|0111b)

Соответственно, настройка асинхронного протокола 8 бит, 1 стоп-бит, без проверки паритета, выдача RTS, проверка CTS.

OldSpeccer
05.11.2016, 01:10
Да, спасибо, так и есть. Идеи заканчиваются... Подскажите, как по-быстрому проверить работу управляющего слова ВВ51? У меня вызывает сомнения /RTS, по программе он должен устанавливаться в "0", а у меня - не дергается даже. Сейчас оторву его от всего и буду отдельно изучать.

Denn
05.11.2016, 01:32
Подскажите, как по-быстрому проверить работу управляющего слова ВВ51?

Поскольку этот узел не вызывал проблем, то так глубоко я не вникал. Код инициализации в своё время взят из чужого кода, я только разобрался как менять настройки паритета (исключительно для теста портов), остальные настройки я не трогаю. В даташите на 8251 из любопытства поинтересовался почему именно такие цифры для инициализации, понял и благополучно "забыл". Опыты с разными вариантами инициализации не проводил.
Единственный момент (он виден в моём исходнике), который пришлось подобрать эмпирически - это запись кодов инициализации с задержкой, т.к. "прямолинейная" запись иногда приводила к неправильной инициализации (ВВ51-я почему-то "тормозит", видимо не рассчитана на работу ЦПУ с тактовой больше 2,0 МГц, а в Орионе аж целых 2,5 МГц). Введение "левых" CALL/RET внесло достаточные задержки, и ВВ51-я стала корректно инициализироваться в 100% случаев.

OldSpeccer
05.11.2016, 02:03
Господа, все заработало. :)
Самое забавное, что я не знаю, что я сделал. Я просто пошел скопом по сигналу RTS, который, как и положено - выдавался. Зашел в преобразователь.
Отдельно проверил его. Воткнул в DB-9 перемычку, проверил приемник, и проследил сигнал вплоть до ВВ51(!!!). Сигнал приходит!
Запускаю на орионе обращение к G: - вижу красивый запрос на TxD(!!!!). Его раньше там не было!!! :)
Может это сила намерения Denn - иных объяснений я не вижу! :) Серьезно, ерунда полная. В ходе отслеживания был один нюанс - я оторвал проводок на линии TxD, так как мне показалось он некачественно припаян - перезачистил МГТФ и перепаял. Но цепь /CTS не трогал! Чертовщина. Под лупой смотрел многократно, если что...
Огромное спасибо, коллега, за бесценное время и бескорыстное намерение! :) Уже успел вспомнить, насколько убогие на Орионе игры :))))

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


Поскольку этот узел не вызывал проблем, то так глубоко я не вникал. Код инициализации в своё время взят из чужого кода, я только разобрался как менять настройки паритета (исключительно для теста портов), остальные настройки я не трогаю. В даташите на 8251 из любопытства поинтересовался почему именно такие цифры для инициализации, понял и благополучно "забыл". Опыты с разными вариантами инициализации не проводил.

Ну, адрес-то мы знаем, а управляющее слово по даташиту стряпается за 5 секунд. Мне бы напомнить, как красиво и изящно записать по адресу УС ВВ51-й желаемый байт, не вдаваясь в ассемблерное программирование...


Единственный момент (он виден в моём исходнике), который пришлось подобрать эмпирически - это запись кодов инициализации с задержкой, т.к. "прямолинейная" запись иногда приводила к неправильной инициализации (ВВ51-я почему-то "тормозит", видимо не рассчитана на работу ЦПУ с тактовой больше 2,0 МГц, а в Орионе аж целых 2,5 МГц). Введение "левых" CALL/RET внесло достаточные задержки, и ВВ51-я стала корректно инициализироваться в 100% случаев.
Да, я немного тоже поразмышлял над незамысловатой подпрограммой :) Кстати, возможно ли подправить бинарник так, чтобы исключить эти задержки - руки чешутся проверить свою NEC. Но первым делом надо 115 проверить! :)

Stampmaker
05.11.2016, 11:36
ставим НС138 в качестве ИД7. Потребление КМОП в статике - микроампер

согласен, это вариант :v2_thumb:

OldSpeccer
06.11.2016, 00:27
Небольшой отчет. Сегодня разработал и изготовил печатку для COM-порта, по честному - двухстороннюю. Все заработало с полпинка. Каюсь, что морочил людям голову, МГТФ - зло :) Если кому вдруг надо (что конечно очень вряд ли, но все же :) ) - есть разводка в 6-м лэйауте.
58677
Заточено специально под ЛУТ - широкие площадки, минимум переходных отверстий, в основном переходы выролнены на выводах мс. Разведено под кварц+дискретный ген на НС00, перераскинуть под интегральный ген можно в секунду.

И да, uPD71051 замечательно работает на 115200. Разница конечно приятна, но функционально ВВ51 весьма имеет право на жизнь. При орионовских объемах данных эта разница несущественна, гораздо важнее сам функционал.
Ну и кроме того, орион-сервер подтвержденно работает на х64 платформе.
Denn, выражаю еще раз благодарность - как за помощь, так и вообще - за продукт! :) Повтор введенного буфера по "стрелка вверх" - это кайф! :) Ctrl+Enter в коммандере!! Бомба! Подозреваю, что о массе ништяков я до сих пор и не знаю :)
Вот такое вышло. Вилка на плате под писишный кабель с DB-9.
5867858679

Denn
06.11.2016, 01:47
МГТФ - зло :)

Вот тут не согласен! При МГТФ'инге есть "пространство для манёвров", а вот перекраивать (резать) готовую печатку это весьма тоскливо. Хотя для массового клонирования отлаженной конструкции печатке альтернативы нет.



Разведено под кварц+дискретный ген на НС00

Если не сложно, поделитесь проверенным вариантом.



И да, uPD71051 замечательно работает на 115200. Разница конечно приятна, но функционально ВВ51 весьма имеет право на жизнь. При орионовских объемах данных эта разница несущественна, гораздо важнее сам функционал.

Дело всё в том, что виртуальный диск является как бы надстройкой над ОС, а последняя при файловых операциях "гоняет" каталог (ноги растут от дискет). В случае вирт. диска "гоняется" объём данных, соответствующий фактическому размеру каталога. Т.о. при большом кол-ве файлов на диске объём получается ощутимый (кол-во файлов умноженное на 16). На скорости 115200 Бод передача каталога среднего размера (40..60 файлов) фактически мгновенная, в результате чего и получается комфортная работа. На 14400 Бод очень тоскливо.
Когда у меня был только порт СОМ1 на 14400, то я предпочитал работать на Орионе с дискетами, а на писи только делал бэкапы. С переходом на СОМ2 (115200) я от дискет ушёл, т.к. это совершенно иной уровень комфорта.



Ну и кроме того, орион-сервер подтвержденно работает на х64 платформе.

Благодарю за обратку. Старенький 6-ой С++Билдер до сих пор рулит и бибикает, оказывается :)



Подозреваю, что о массе ништяков я до сих пор и не знаю :)

К сожалению, физически нет времени успевать по всем фронтам. На написание документации, оформление статей тоже нужно время.
По мере возможности стараюсь что-то написать, но это конечно далеко не всё, что сделано.
Сейчас доделаю основные "хотелки" в ПО, а потом "включу писателя" и распишу чего там понаделал.
Параллельно приходится заниматься разработкой "железа", актуализацией ОС для Ориона-ПРО, что-то писать для писи...

OldSpeccer
06.11.2016, 03:01
Вот тут не согласен!

Это была шутка, типа того :)
МГТФ хорошо иногда, но местами можно отловить странные полтергейсты вроде как я вчера.
На печатку не хотел сразу переносить, пока не понимал, что.




Если не сложно, поделитесь проверенным вариантом.

В смысле, генератора? Да пожалуйста!
58680
В качестве микры, подозреваю, можно ставить что угодно из КМОП-инверторов.
Я НС00 поставил от балды.



Когда у меня был только порт СОМ1 на 14400, то я предпочитал работать на Орионе с дискетами, а на писи только делал бэкапы. С переходом на СОМ2 (115200) я от дискет ушёл, т.к. это совершенно иной уровень комфорта.

Я 14400 помню со времен BBS - таки да, это печально. А вот 38400 бегает уже вполне сносно - кто помнит еще 33600? :) Разница с 14400 была капитальная. Ну а 115200 на орионе - это уже ЛС :)
Реально - ОЧЕНЬ полезный кусок железа, круто, что хватило духу развить эту тему! :)

P.S. Можно мне небольшой ликбез по форматам файлов? А то я толком документации найти не могу. BRU, ORD, ORI - как с ними работать, что
это за форматы? В частности, *.ORD - как их "скормить" моему ориону через сервер?

Denn
06.11.2016, 12:33
В качестве микры, подозреваю, можно ставить что угодно из КМОП-инверторов.
Я НС00 поставил от балды.

Данная схемотехника является фактически аналоговой, в ней всё очень сильно завязано на номиналы деталей, а также входные/выходные сопротивления инвертеров.Поэтому я и попросил опубликовать конкретный рабочий вариант.

Вариант генератора на рассыпухе с кварцем - это хорошо, т.к. не у всех есть возможность достать интегральный ген. (Сергею на заметку при разработке платы DS-Card: сделать разводку под оба варианта!)



Ну а 115200 на орионе - это уже ЛС :)

"ЛС" - это вроде как (Л)ичное (С)ообщение... не понял фразу



P.S. Можно мне небольшой ликбез по форматам файлов? А то я толком документации найти не могу. BRU, ORD, ORI - как с ними работать, что это за форматы? В частности, *.ORD - как их "скормить" моему ориону через сервер?

Про мой формат *.ORI расписывал здесь - http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot/page3.html

Формат *.BRU более упрощённый вариант: отсутствует сигнатура в начале, т.е. контейнер сразу начинается с Орионовского заголовка в формате ОС ORDOS. В последнем не используются старшие три байта (которые в ОС DSDOS содержат "Рабочая страница ОЗУ" и "Дата создания") и в них содержится рандомный "мусор".

Формат *.ORD мне неизвестен, мне не попадались файлы в этом формате, про него ничего не знаю.

Есть ещё в природе формат *.ODI - это посекторный образ дискеты (800 Кб), его поддержка в ORI-сервере планируется в ближайшее время.

Vasil
06.11.2016, 14:20
"ЛС" - это вроде как (Л)ичное (С)ообщение... не понял фразу

(Л)окальная (С)еть :)

OldSpeccer
06.11.2016, 18:42
Данная схемотехника является фактически аналоговой, в ней всё очень сильно завязано на номиналы деталей, а также входные/выходные сопротивления инвертеров.Поэтому я и попросил опубликовать конкретный рабочий вариант.

Дык любой генератор - это же аналоговая схемотехника по сути. Собственно генератором тут выступает первый логический элемент, второй - буфер, резистор со входа на выход задает ОС, 470к-1М что есть под рукой, номинал не особо критичен - он задает конечное усиление (которое без него стремится к бесконечности), чтоб генератор не фонил одновременно на куче гармоник. Второй резистор - нагрузка гена, 1-10к, также весьма толерантно к разбросу.
Ну и кварц и два стандартных кондера - абсолютной стандартный параллельный ген. В любой атмеге или прочей фигне со входами для резонатора, да и в интегральных тоже - внутренний ген представляет собой именно такую схему. Я собирал его бесчисленное количество раз, прямо из любого подножного гу@но и палок - не помню ни одного случая, чтоб он не работал просто сходу. Главное - делать на КМОП, и чтоб элемент с инверсией был. Обычно под руку попадает НС00 или НС04. Нижний предел, на котором я запускал такой генератор - думаю 3-4 мегагерца - меньше не было нужды, верхний - 24,576 МГц - выше также не было нужно ни разу.


Вариант генератора на рассыпухе с кварцем - это хорошо, т.к. не у всех есть возможность достать интегральный ген. (Сергею на заметку при разработке платы DS-Card: сделать разводку под оба варианта!)

Более того, футпринты им можно сделать с перекрытием, чтоб люди ставили либо ген, либо микросхему - одновременно два разных все равно никто не
станет использовать. Заодно футпринт можно и под СМД генератор там же.



"ЛС" - это вроде как (Л)ичное (С)ообщение... не понял фразу

(Л)окальная (С)еть :), "Семен Семеныч...!" :)



Про мой формат *.ORI расписывал здесь - http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot/page3.html

Формат *.BRU более упрощённый вариант: отсутствует сигнатура в начале, т.е. контейнер сразу начинается с Орионовского заголовка в формате ОС ORDOS. В последнем не используются старшие три байта (которые в ОС DSDOS содержат "Рабочая страница ОЗУ" и "Дата создания") и в них содержится рандомный "мусор".

Формат *.ORD мне неизвестен, мне не попадались файлы в этом формате, про него ничего не знаю.

Есть ещё в природе формат *.ODI - это посекторный образ дискеты (800 Кб), его поддержка в ORI-сервере планируется в ближайшее время.

Я скачал массу разного софта одним огромным архивом, ODI дисков там тоже масса загадочных, много софта под СРМ и очень много этих самых ORD. Например, игра "Агрессия" состоит из нескольких ORD, они загружаются в квазидиск под ОрДОС, далее игра проверяет их наличие, и если есть все - тогда запускается.
Да и вообще, все вкусное - в этих самых ORD - я искренне удивлен, что вы с ними не знакомы.
Логика как бы подсказывает, что это простые файлы ОрДОС, но вот как их переправить на Орион - вот в чем вопрос?

Error404
06.11.2016, 19:22
Логика как бы подсказывает, что это простые файлы ОрДОС, но вот как их переправить на Орион - вот в чем вопрос?

Преименовать в BRU, и далее так же как с ними.
Это абсолютно одно и тоже, только ORD появился раньше, а затем Орион-Софт решил что расширение неправильное (а правильное - BRU, т.к. с блекджеком и профурсетками), ну и далее как обычно (см. тему про войну стандартов). :)

OrionExt
06.11.2016, 19:34
Я скачал массу разного софта одним огромным архивом, ODI дисков там тоже масса загадочных, много софта под СРМ и очень много этих самых ORD. Например, игра "Агрессия" состоит из нескольких ORD, они загружаются в квазидиск под ОрДОС, далее игра проверяет их наличие, и если есть все - тогда запускается.
Да и вообще, все вкусное - в этих самых ORD - я искренне удивлен, что вы с ними не знакомы.
Файлы *.bru b *.ord - это OrDos файлы. Формат был придуман для сохранения этих файлов на дискетах, отформатированных в СР/М. *.bru – авторский формат. Загружаются в OrDos программой bru.com (СР/М) или atlas (OrDos). *.ord - формат не без известных конкурентов. Загружаются в OrDos программой lord (СР/М).


Логика как бы подсказывает, что это простые файлы ОрДОС, но вот как их переправить на Орион - вот в чем вопрос?
Грузить с любого носителя информации для СР/М (дискета, CF или SD карта).

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

CF-карта подключается к последнему порту Ориона (F600), и одной ЛН1.

Denn
06.11.2016, 20:03
На тему "ЛС". Когда увлёкся разгоном протокола RS-232, убедился, что скорость 115200 Бод - это ещё не предел для Ориона, в связи с чем возлагал большие надежды на чип 16С550, который штатно позволяет работать аж до 1 МегаБод. Самое смешное, что ограничение получается со стороны писи... в списке возможных вариантов настроек порта максимальный рабочий вариант - 115200. Там есть ещё два значения 128000 и 256000, но при их выборе Винда (или драйвер СОМ-порта?) ругается, что невозможно установить такое значение скорости :( А на 256k было бы очень интересно, действительно в масштабах Ориона это уже равносильно локалке!

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

Если *.ORD тоже самое, что и *.BRU, то можно просто изменить расширение и скормить ORI-серверу.

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


Например, игра "Агрессия" состоит из нескольких ORD, они загружаются в квазидиск под ОрДОС, далее игра проверяет их наличие, и если есть все - тогда запускается.
Да и вообще, все вкусное - в этих самых ORD - я искренне удивлен, что вы с ними не знакомы.

Это интересно :) Поделитесь, плз.

OrionExt
06.11.2016, 20:06
Самое смешное, что ограничение получается со стороны писи... в списке возможных вариантов настроек порта максимальный рабочий вариант - 115200. Там есть ещё два значения 128000 и 256000, но при их выборе Винда (или драйвер СОМ-порта?) ругается, что невозможно установить такое значение скорости
Поменять USB to RS232 преобразователь. Или драйвера под девайс для всех любимой Виндовс искать. PC то тут причем.

OldSpeccer
06.11.2016, 20:16
Странно, я пробовал *.ORD переименовывать в *.BRU, но орион-сервер их не увидел, не распознал...?
Может, плохо пробовал? Во всяком случае с уже готовыми *.BRU-файлами все получается - да диске G: видны,
на квазидиск переписываются..
Схему IDE на F600 я видел, конечно, но надеялся избежать этого огорода :) А для SD нужен Z80, а это еще впереди,
если вообще :) Хотя плата Z80CardII лежит передо мной готовая - вытравлена, просверлена, залужена и покрыта канифолью,
но меня коробит необходимость внесения необратимых изменений в схему. Реально Орион з Z80 - это уже не орион, а недоспектрум.



Это интересно :) Поделитесь, плз.
Запросто. Куда делиться? :)

Denn
06.11.2016, 20:27
Поменять USB to RS232 преобразователь. Или драйвера под девайс для всех любимой Виндовс искать. PC то тут причем.

Проверял на трёх разных компьютерах, везде результат одинаковый. Реализации материнок и портов разные, драйвера соответственно тоже.
USB-вариант мне не удалось заставить работать корректно даже на 9600, хотя честно говоря пробовал я его только с ВВ51 и "советским" варииантом преобразователя уровней (на рассыпухе КТ315 в О-128 и на 170УП.. в Орионе-ПРО).
В любом случае, вариант через USB нетиповой, и затачивать под него работу ОС не вижу смысла.

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


Странно, я пробовал *.ORD переименовывать в *.BRU, но орион-сервер их не увидел, не распознал...?
Может, плохо пробовал?

Сервер обнаруживает "свои" файлы исключительно по расширению, так что переименование должно привести к отображению в списке.
А вот при работе с файлом уже проверяется корректность его содержимого, и если что-то не так, что сервер раппортует об ошибке.



Хотя плата Z80CardII лежит передо мной готовая - вытравлена, просверлена, залужена и покрыта канифолью,
но меня коробит необходимость внесения необратимых изменений в схему.

У народа не взлетает, как я погляжу. Орион-128 хорош и с ВМ80А.



Реально Орион з Z80 - это уже не орион, а недоспектрум.

Есть Орион-ПРО, ради Z80 и прочих радостей имеет смысл собирать его, имхо.



Запросто. Куда делиться? :)

У вас есть аккаунт в Гугле? Если да, то могу подключить к нашей OriNET, это будет самый простой вариант ;)

OrionExt
06.11.2016, 21:08
Схему IDE на F600 я видел, конечно, но надеялся избежать этого огорода. А для SD нужен Z80, а это еще впереди. Хотя плата Z80CardII лежит передо мной готовая - вытравлена, просверлена, залужена и покрыта канифолью, но меня коробит необходимость внесения необратимых изменений в схему.
Для IDE – CF. Ток грядка. А вот Z80 - это целое поле вспахать)


Реально Орион з Z80 - это уже не орион, а недоспектрум.
Z80 – это то что должно было изначально, а вот к остальным наворотом отнушусь скептически. Хотя Если бы не эти навороты…

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


В любом случае, вариант через USB нетиповой, и затачивать под него работу ОС не вижу смысла.
Это Ппц какой типовой вариант (USB to RS). На сегодняшний день.


У народа не взлетает, как я погляжу. Орион-128 хорош и с ВМ80А.
Все «взлетает». Просто новодельные платы (Орион-512) ну не фига не совместимы с 155 серией.

LeoN65816
06.11.2016, 23:27
Самое смешное, что ограничение получается со стороны писи... в списке возможных вариантов настроек порта максимальный рабочий вариант - 115200. Там есть ещё два значения 128000 и 256000, но при их выборе Винда (или драйвер СОМ-порта?) ругается, что невозможно установить такое значение скорости :(
По-моему на мамках начиная с третьих пеньков в MultiIO-чипах используются ядра UART 16C550 и 16C650, и в штатных драйверах винды (в XP видел точно) в списке скоростей есть и 230.4 Кбод, и 460.8 Кбод, и 921.6 Кбод.

OrionExt
06.11.2016, 23:50
Да все там должно быть нормально. Нюансы. Как всегда. Да и проводок надо нормальный заиметь (или спаять). Скорости уже таки большие (1 мбит – 1мкс).

OldSpeccer
07.11.2016, 00:34
Хорошо.
Объясните дилетанту - зачем мне нужен CF? Для CP/M и ее софта? А как туда попадать оно будет? Кардридер нужен?
CP/M умеет обмениваться с РС? Зачем мне CP/M, если меня интересуют только орионовские программы?

Что до Z80. Z80 - это Спектрум. И да, да, да - ОГРОМНОЕ количество софта и т.п. но ЗАЧЕМ? :) Для Спектрума есть Спектрум.
Например у меня - аналогично год назад восстановленный из мусора, на горелой плате Ленинград-1, в котором были проведены все доработки по исправлению видеосигнала, сделан правильный INT, порт FF, привязка к уровню черного, расширена память до 256К на более современных чипах, музпроцессор с диспетчером памяти вынесен на отдельную плату, на ней же Z80 со всеми буферированными шинами(!), и все это добро вставляется в панельку Z80, модуль памяти вставляется в панельки под РУ5-е, а все сигналы выведены на двухрядный разъем, отсоединив схему от которого и заменив перемычками получаем немодифицированный Ленинград-1 :) Это я так игрался с обратной совместимостью :) Кстати, вот где ОЧЕНЬ не хватает подобного устройства, как обсуждаемый COM-порт+сервер.

А Орион - это 580ВМ80. На сегодняшний день, учитывая околонулевую практическую полезность машинки, как вычислительного устройства - ИМХО вся красота Ориона - в его аутентичности, аналогично Специалисту, РК86 или Спектруму. И плевать на "слабее" процессор - он такой, какой есть :)
Вот что ИЗНАЧАЛЬНО должно было быть в Орионе - это система прерываний. Это бы вывело его на совершенно иной класс устройств, а не Z80.
Я сейчас, спустя время, повторно вникаю в архитектуру, и просто в ужасе, как без прерываний живут :)

OrionExt
07.11.2016, 00:51
Всему свое время;)

OldSpeccer
07.11.2016, 02:23
Файлы *.bru b *.ord - это OrDos файлы. Формат был придуман для сохранения этих файлов на дискетах, отформатированных в СР/М. *.bru – авторский формат. Загружаются в OrDos программой bru.com (СР/М) или atlas (OrDos). *.ord - формат не без известных конкурентов. Загружаются в OrDos программой lord (СР/М).


OrionExt, мерси за ликбез!

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

А существует в природе доработка для устранения вертикальной полоски слева?

OrionExt
07.11.2016, 16:22
А существует в природе доработка для устранения вертикальной полоски слева?
Существует. В ветках про сборку информация проскакивала и не один вариант, да и в журнале Радио 12/1990г. была.

Denn
06.12.2016, 18:19
Доброго времени суток, орионщики и им сочувствующие :)

Давно не писал, но это не значит, что забросил. Работа по развитию ОС идёт, к НГ постараюсь выложить сборку со всеми последними новинками. А пока хочу рассказать о том, что сделано.

С момента последней публикации (http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=878257&viewfull=1#post878257) версии 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
27.12.2016, 23:57
Выкладываю предновогодний релиз ОС DSDOS для обеих платформ в виде образов ROM-дисков под разные варианты м/сх ПЗУ.


Сборки ОС DSDOS v3.85 для ПРК ОРИОН-128/512:

ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/orion/dsdos/dsdos-128_s64.rar)

ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/orion/dsdos/dsdos-128_s128.rar)

ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/orion/dsdos/dsdos-128_s256.rar)

ПЗУ ROM-диска объёмом 512 Кб (http://denn.ru/orion/dsdos/dsdos-128_s512.rar)

Внутри каждого архива три варианта:

- без RAM-диска (не путать с квазидиском!);
- RAM5 (RAM-диск 1024 Кб в составе ЭД™ 1x1, порт #F50xh);
- RAM7 (быстрый RAM-диск 1024 Кб в виде платы расширения, порт #F7Fxh);

Поддерживаются оба варианта реализации порта виртуального диска: COM1 (ВВ51/MSM82C51A-2, 38400/115200 Бод) и COM2 (16C550, 115200 Бод). Определяются загрузчиком ОС (автодетект), текущим выбирается наиболее быстрый (приоритет у COM2).

https://forum-img.guitarplayer.ru/2024/02/11/1yPgU.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385.gif)


Сборки ОС DSDOS v3.85 для ПК ОРИОН-ПРО:

"Стандартная", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/orion/dsdos/dsdos-pro_s64.rar)
"Стандартная", ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/orion/dsdos/dsdos-pro_s128.rar)
"Стандартная", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/orion/dsdos/dsdos-pro_s256.rar)

"Игровая", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/orion/dsdos/dsdos-pro_g64.rar)
"Игровая", ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/orion/dsdos/dsdos-pro_g128.rar)
"Игровая", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/orion/dsdos/dsdos-pro_g256.rar)

"Программист", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/orion/dsdos/dsdos-pro_p64.rar)
"Программист", ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/orion/dsdos/dsdos-pro_p128.rar)
"Программист", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/orion/dsdos/dsdos-pro_p256.rar)

Внутри архивов под объёмы 128 Кб и более находится два варианта: одним полным образом (файл romdisk.bin) для новой версии ROM-диска, и соотв. кол-вом файлов по 64 Кб (файлы romdiskN.bin) для старого варианта (в составе Multi-Card).
Поддерживаются оба варианта реализации порта виртуального диска: COM1 (ВВ51/MSM82C51A-2, 38400/115200 Бод) и COM3 (16C550, 115200 Бод).

https://forum-img.guitarplayer.ru/2024/02/11/1yWv6.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385pro.gif)


Список изменений относительно предыдущей версии (3.84) из файла DISKINFO:

https://forum-img.guitarplayer.ru/2024/02/11/1ypkg.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385_diskinfo.gif)


Конфигуратор ОС DSDOS

Вместо старой утилиты SYSVAR$ появилась новая - SYSTEM$, она позволяет более наглядно настраивать параметры ОС, плюс отображает информацию об аппаратной части (АЧ) ПРК. Для ОРИОН-128/512 экран утилиты выглядит следующим образом:

https://forum-img.guitarplayer.ru/2024/02/11/1ycP0.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385_system.gif)

В виду аппаратных различий, на ОРИОН-ПРО информация АЧ несколько отличается:

https://forum-img.guitarplayer.ru/2024/02/11/1ydTv.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385_syspro.gif)

Интерфейс сделан максимально интуитивно понятным. По АЧ, справа от сокращённого названия порта в квадратных скобках:
"■" - устройство обнаружено, "х" - не обнаружено.
Выделенная инверсией буква в соответствующем пункте является горячей клавишей для редактирования данного параметра. Буквы - русские, в соответствии с раскладкой подключенной клавиатуры (РК86 или IBM-PC). При изменении цвета символов/фона можно добавлять [Shift] - это меняет параметр в обратную сторону.
Доступ дисков меняется через [Ctrl]+<буква диска>.
Вид курсора меняется стрелками вверх/вниз.
[F2] - восстанавливает изменения текущей сессии, [F1] - значения по-умолчанию. Для сохранения изменений - [ВК] (Enter).
Вызвать утилиту SYSTEM$ можно также через сервисное меню ОС: [Shift]+[F1] -> [Y]. Выход из утилиты производится принудительно в ОС (jmp 0F360h), т.к. изменение некоторых параметров требует перезапуск CCP.
Аналогично добавлен быстрый вызов калькулятора: [Shift]+[F1] -> [C]. Выход (ret) из калькулятора происходит в программу, откуда был сделан его вызов, при этом содержимое экрана под ним восстанавливается. Для удобства вызов калькулятора сделан в оболочке по клавише [C]:

https://forum-img.guitarplayer.ru/2024/02/11/1ygip.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385_calc.gif)

Обе утилиты являются системными, т.е. работают во второй странице ОЗУ, в области памяти 8000...AFFFh, т.о. их запуск не изменяет содержимое ОЗУ основной страницы.
Про данный механизм упоминал ранее, он позволяет делать системные программы, работающие "поверх" основных, а также позволяет динамически подгружать исполняемые модули (оверлеи) программ, т.о. экономится ОЗУ основной страницы.


Буфер обмена

В версии 3.85 изменилась локализация буфера обмена: раньше содержимое хранилось в ОЗУ второй страницы в области B000..BFFFh и буфер позволял сохранять максимум 4 Кб данных, теперь данные хранятся в виде файла ~CBDATA в квазидиске и буфер позволяет сохранять до 64 Кб (теоретически, практически - до 48 Кб, максимально до 60 Кб) данных:

https://forum-img.guitarplayer.ru/2024/02/11/1y2Aj.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385_cbdata.gif)

Соответственно увеличилась скорость обмена с буфером, т.к. фактически выполняются файловые операции с квазидиском по ускоренным алгоритмам (push/pop инструкции), а 4 Кб ОЗУ второй страницы освободилось для драйверов расширения ОС.


Кэширование

В новой версии ОС появилось кэширование каталогов (отключаемое). Ранее этой функции не было, и каталог читался при каждой файловой операции с диском, т.к. предполагалось, что между файловыми операциями на диске могли произойти изменения (например, сменили дискету в дисководе или удалили файл на вирт. диске) и ОС нужна актуальная информация. Каталог в общем случае представляет собой список заголовков всех файлов на диске (16 байт*кол-во файлов) + FAT (для дисков с кластерной организацией). В итоге, возникали ситуации, когда фактический размер файла например 1 байт, а каталог+FAT например 8 Кб! Т.е. для сохранения 1 байта информации, нужно было "прокачать" ещё дополнительные 16 Кб: считать каталог (8 Кб) + записать изменённый каталог (8 Кб). В случае относительно медленных носителей это ощутимо снижало скорость файловых операций, особенно заметно при групповом копировании файлов. Кэширование каталога (двойное: на чтение и на запись) позволяет исключить холостые загрузки/выгрузки каталога (+FAT), если на диске с момента последнего обращения не было изменений, и в ОЗУ ПРК находится его актуальная копия; в случае записи каталога теперь записываются только изменения. Для виртуального диска, введён механизм обратной связи, т.о. ПРК сначала "пингует" сервер на предмет изменений каталога, и перезагружает его только если таковые произошли. Кэширование каталога ROM-диска также ускоряет работу, т.к. фактически чтение каталога диска "A:" это сканирование заголовков файлов по всему ПЗУ, объём которого может достигать 1024 Кб.
Кэширование дискет потенциально опасно, т.к. ОС не имеет возможности отслеживать смену физического носителя, поэтому по-умолчанию у дисков "C:" и "D:" оно отключено.

Для управления функцией кэширования сделана специальная утилита - DCM$, её работу поясняет следующий скриншот:

https://forum-img.guitarplayer.ru/2024/02/11/1yGSC.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385_dcm.gif)

В примере показано отключение кэширования для RAM-диска ( E: ).


Запуск оболочки ОС DSDOS

В ОС изменился механизм запуска оболочки. Ранее это осуществлялось через файл автостарта - EXT$, и однажды запущенная оболочка приводила к возврату из программ всегда в саму себя, что зачастую мешало увидеть результаты работы консольных утилит.
Теперь механизм иной. Оболочка вызывается по нажатию клавиши [Esc], после чего включается признак запуска оболочки при выходе из программ в ОС.

https://forum-img.guitarplayer.ru/2024/02/11/1yIZr.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/dsdos_v385_shell.gif)

Если запуск программы производился из панели нажатием [Enter], то автовозврат в оболочку сохраняется. Если запуск был через эмуляцию командной строки (с вводом параметров), то возврат из программы производится в CCP, т.е. в режим диалога ОС. Т.о. возможно посмотреть результат завершения программы, сделать повторные вызовы, а для возврата в оболочку достаточно нажать [Esc].
Файл автостарта EXT$ теперь не используется оболочкой, и его пользователь может применять в своих целях.
"Движок" оболочки изменился, а также расширился её функционал. Об этом напишу в другом посте, т.к. в этот столько инфы уже не влезет :)


Виртуальный диск

В последней версии ОС и ORI-сервера значительно увеличены тайм-ауты в процедурах передачи/приёма байта по интерфейсу RS-232. Это сделано для увеличения надёжности работы, т.к. при запуске приложения ORI-сервера на слабых компьютерах наблюдались ошибки связи.


ORI-сервер

Предновогодняя версия ORI-сервера - 3.09. Ссылка для скачивания - прежняя (http://denn.ru/8bit/oriserv/oriserv.exe).
Как упоминал выше, введена поддержка нового файлового протокола v3 с Орионом, реализующего механизм кэширования чтения/записи каталога. В ОС DSDOS этот протокол используется начиная с версии 3.85. Поддержка старого протокола v2 также осталась, т.е. старые версии DSDOS с новым сервером будут работать без проблем.

В интерфейсе появилась возможность изменять вертикальный размер окна приложения:

https://forum-img.guitarplayer.ru/2024/02/11/1ySQu.png
альт.ссылка на изображение (http://denn.ru/8bit/oriserv/oriserv_resizable.gif)

Этот параметр также сохраняется в файле конфигурации oriserv.ini.

Возможно вообще уменьшить вертикальный размер до исчезновения списка файлов, при этом отображение последнего выключается:

https://forum-img.guitarplayer.ru/2024/02/11/1y3gH.png
альт.ссылка на изображение (http://denn.ru/8bit/oriserv/oriserv_no_list.gif)

Это может дать некоторую экономию ресурсов на совсем старых и слабых ПК. В виду того, что смена каталога теперь стала возможна непосредственно с Клиента (Ориона), необходимость в работе со списком на сервере, в общем-то, отпала.

При обновлении данных, список теперь не моргает (спасибо Сергею за подсказку про фишку с "DoubleBuffered" ;)).

***

Denn
29.12.2016, 00:39
Как писал выше, оболочка ОС DSDOS изменилась. Ранее она представляла собой запускаемый файл DC$, который при первом старте создавал на квазидиске ( B: ) файл самозапуска (EXT$), т.о. выход из программ пользователя всегда происходил в оболочку.
Теперь оболочка представляет собой системный модуль (файл SHELL), который запускается по нажатию клавиши [Esc] в строке диалога ОС (CCP). Выход из программ пользователя осуществляется либо в оболочку, либо в диалог ОС DSDOS, в зависимости от режима запуска файла (описано выше).
В результате работы, оболочка создаёт на квазидиске конфигурационный файл SHELL.CF:

https://forum-img.guitarplayer.ru/2024/02/11/1y4MY.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_cfg.gif)

В нём хранится информация о текущем содержимом панелей, положениях указателей, вводимой ранее информации в эмуляторе командной строки, а также в других диалоговых окнах. Запись конфигурации производится при выходе из оболочки (запуск файлов, процедуры копирования, перемещения, удаления).


Информация о диске

В окне информации о диске (вызов по клавише [?]) появилось несколько горячих клавиш. Они предназначены скорее для опытных пользователей, поэтому явной подсказки на экране по ним нет!

https://forum-img.guitarplayer.ru/2024/02/11/1yBkF.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_info01.gif)


Клавиша [СТР] ([PgDown]) очищает буфер обмена, результат выполнения виден на этом скриншоте:

https://forum-img.guitarplayer.ru/2024/02/11/1yLPS.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_info02.gif)

Поскольку содержимое буфера обмена теперь хранится в файле "~CBDATA" на квазидиске, то в результате очистки удаляется и сам файл:

https://forum-img.guitarplayer.ru/2024/02/11/1yTxR.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_info03.gif)


Клавиша [N] устанавливает верхнюю границу ОЗУ пользователя на значение по-умолчанию (BAFFh). Область BB00..BFFFh резервируется под знакогенератор "Монитора" и код эмуляции API ОС ORDOS (для возможности работы ORDOS-программ в среде ОС DSDOS).

Клавиша [M] устанавливает верхнюю границу ОЗУ пользователя на максимальное значение BFFFh:

https://forum-img.guitarplayer.ru/2024/02/11/1yxiV.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_info04.gif)

Данное значение позволяет программам, написанным под ОС DSDOS максимально использовать ОЗУ основной страницы. При этом код эмуляции ОС ORDOS может быть затёрт! Затирание знакогенератора не так критично, т.к. при выходе в ОС он автоматически восстанавливается, т.о. при последующем запуске не-DSDOS программы отображение символов через п/п Монитора будет работать корректно.

И наконец клавиша [H] устанавливает верхнюю границу ОЗУ пользователя на экстремальное значение EFFFh:

https://forum-img.guitarplayer.ru/2024/02/11/1yaY2.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_info05.gif)

Теоретически возможны ситуации, когда это может потребоваться для обработки огромного файла. Но надо понимать, что информация выше C000h залезет в экранное ОЗУ, т.е. будет видна на дисплее в виде "мусора". Также эта информация может быть испорчена выводом сообщений на экран программой обработчиком.

Последние три команды полностью аналогичны соответствующим командам ОС DSDOS: "M <значение RamTOP>".


Операции с файлами

В оболочке полностью изменён механизм переименования, копирования и удаления файла(ов), а также добавлена возможность переноса (копирование с удалением исходного) файла(ов). Код данного функционала вынесен в отдельный "оверлейный" модуль-копировщик (файл SHELL.EX), который работает во второй странице ОЗУ, т.о. стало возможно копировать файлы любого размера, т.к. под буфер копирования отводится всё ОЗУ основной страницы. По факту операции основной модуль оболочки вызывает копировщик, передаёт ему задание (список файлов, диск назначения и режим обработки) и передаёт управление. После отработки, копировщик вновь загружает основной модуль (т.к. он может быть затёрт телом копируемого файла) и передаёт ему управление.

Остановлюсь подробнее на работе копировщика. Функционал модуля следующий:

[5] или [F5] - копирование (чтение) файла(ов);
[6] ( [F6] - доступно только на клавиатуре PS/2 с прошивкой МК v0.21!) - перенос/переименование файла(ов);
[8] ( [F8] - доступно только на клавиатуре PS/2 с прошивкой МК v0.21!) - удаление файла(ов).

Как и прежде, если нет отмеченных файлов в текущей панели, то операция производится с текущим файлом, на котором установлен курсор-указатель:

https://forum-img.guitarplayer.ru/2024/02/11/1ynZm.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy01.gif)

По-умолчанию диском назначения при копировании/переносе будет диск противоположной панели. В случае операции с одним файлом возможно отредактировать диск и имя файла назначения. Если стереть диск назначения и оставить только имя файла, то операция копирования/переноса будет производиться на исходный диск:

https://forum-img.guitarplayer.ru/2024/02/11/1yMUc.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy14.gif)

Можно изначально запретить копировщику подставлять диск назначения, для этого нужно при копировании удерживать клавишу [Shift].

Также возможно копировать/переносить файлы на произвольный диск, для этого достаточно вручную отредактировать диск назначения:

https://forum-img.guitarplayer.ru/2024/02/11/1ymgy.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy15.gif)

Если на целевом диске уже есть файл с таким же именем, то появится диалог перезаписи:

https://forum-img.guitarplayer.ru/2024/02/11/1y1Mh.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy02.gif)

Пользователю выводится информация о размере/дате копируемого (нового) и существующего (старого) файлов, что зачастую облегчает принятие финального решения :)
Положительный ответ - нажатие клавиши [ВК] (Enter), отрицательный - любая другая клавиша (кроме [Shift], [Ctrl] и [Alt]).

При успешном выполнении операции будет отображена соответствующая информация:

https://forum-img.guitarplayer.ru/2024/02/11/1y6yP.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy03.gif)

Внизу окна копировщика отображается индикатор прогресса, визуализирующий ход выполнения операции.

Если при групповом копировании файлов на диске назначения попадается файл с таким же именем, то диалог перезаписи имеет расширенный вид:

https://forum-img.guitarplayer.ru/2024/02/11/1yVPO.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy04.gif)

Тут у пользователя пять вариантов на выбор:

1). [ВК] (Enter) - перезаписать текущий файл новым, при последующей аналогичной ситуации вновь появится такой же диалог;
2). Любая другая символьная клавиша - не перезаписывать текущий файл, копирование пропустить, при последующей аналогичной ситуации вновь появится такой же диалог;
3). [Ctrl]+[ВК] (Enter) - перезаписать текущий файл новым, при последующей аналогичной ситуации также выполнять перезапись без подтверждения;
4). [Ctrl]+<любая символьная клавиша> - не перезаписывать текущий файл, при последующей аналогичной ситуации также не выполнять перезапись;
5). [Esc] - отмена процесса копирования.

Для удобства при выборе используются только клавиши с однозначной трактовкой, без завязки на регистр и язык.

Во всех аналогичных диалогах (обработка ошибок и т.п.) при групповых файловых операциях действуют те же самые варианты ответов. В случаях ответов №3 и №4, в процессе дальнейшего выполнения операций, в окне появляется информация о выбранных вариантах для последующих аналогичных ситуаций.

Перезаписывать (ЗАМенять) все последующие повторные файлы на новые:
https://forum-img.guitarplayer.ru/2024/02/11/1yZxT.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy05.gif)

Не перезаписывать:
https://forum-img.guitarplayer.ru/2024/02/11/1ysuo.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy06.gif)

Тут попытка перезаписать файл, защищённый от удаления:
https://forum-img.guitarplayer.ru/2024/02/11/1yFYf.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy07.gif)

Те же пять вариантов развития событий. Выбираем не перезаписывать защищённые файлы:
https://forum-img.guitarplayer.ru/2024/02/11/1yK34.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy08.gif)

В итоге у нас продолжается процесс копирования со следующими "авансами": перезаписывать повторные, но не перезаписывать защищённые.

При удалении группы файлов сначала появляется запрос на подтверждение, в котором указывается кол-во выделенных файлов на удаление:

https://forum-img.guitarplayer.ru/2024/02/11/1yfsz.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy09.gif)

Также, если встречается защищённый файл, то появляется дополнительный диалог (с пятью вариантами развития событий):

https://forum-img.guitarplayer.ru/2024/02/11/1yuUs.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy10.gif)


Команды переименования и перемещения выполняются одной клавишей: [6]. По-умолчанию предполагается перемещение файла(ов):

https://forum-img.guitarplayer.ru/2024/02/11/1ywtI.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy11.gif)

Переименование возможно только в случае операции с одним файлом!
Для переименования необходимо чтобы диск назначения совпадал с исходным диском. Т.е. стираем явное указание диска назначения, а имя файла редактируем на новое:

https://forum-img.guitarplayer.ru/2024/02/11/1yOmU.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy12.gif)

Переименование также произойдёт если явно указанный диск назначения будет совпадать с исходным!
Копировщик сам распознаёт и выполняет переименование (отражено в заголовке окна):

https://forum-img.guitarplayer.ru/2024/02/11/1yXy6.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy13.gif)


В функции копирования заложен вариант копирования файла(ов) в "никуда" (аналог копирования на "NUL" в IBM-PC). Для этого необходимо удерживать [Ctrl].
Т.е. выделяем группу файлов, нажимаем [Ctrl]+[F5], в результате эти файлы просто считываются, но никуда не записываются:

https://forum-img.guitarplayer.ru/2024/02/11/1ykWg.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_copy16.gif)

Чтение честное, каждый файл полностью загружается в буфер. Данный режим может быть полезен для проверки чтения с ненадёжных носителей и для измерения скорости чтения файлов (для тестов).


Макроподстановки

В новой версии оболочки дополнена система макроподстановок параметров в эмулятор командной строки.

Клавиша [A] вставляет команду изменения адреса посадки текущего файла:

https://forum-img.guitarplayer.ru/2024/02/11/1yyC0.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_ch_addr.gif)

Остаётся ввести новый адрес посадки и нажать [ВК] (Enter).


Очень полезной на практике оказалась двойная подстановка файлов в команду запуска "L". Типичная задача при запуске программ и утилит - подстановка в качестве параметра имени рабочего файла. Допустим, требуется открыть на редактирование файл "ED.HLP", для этого нужно запустить из ROM-диска текстовые редактор ED$, а в качестве параметра указать диск размещения и имя редактируемого файла. Для выполнения таких задач сделана возможность подстановки имён файлов (с явными указаниями дисков) с обеих панелей оболочки. Для этого на одной (противоположной) панели выбираем файл программы-обработчика:

https://forum-img.guitarplayer.ru/2024/02/11/1yDuv.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_eval01.gif)

на другой (текущей) панели выбираем рабочий файл, который будет вставлен в качестве параметра,
и нажимаем клавишу "L", при этом удерживая клавишу [Shift]:

https://forum-img.guitarplayer.ru/2024/02/11/1D8lp.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_eval02.gif)

В эмуляторе командной строки собрана готовая команда для запуска из ROM-диска текстового редактора с загрузкой из квазидиска файла помощи "ED.HLP". Далее можно ввести дополнительные параметры (например, ключи), если требуется, и нажать [ВК] (Enter) для выполнения.

Если не требуется ввод доп. параметров, а нужно просто запустить утилиту с подстановкой рабочего файла, то достаточно нажать [Shift]+[ВК] (Enter) - команда выполнится сразу, без подтвержения.

Размещение файла программы-обработчика на противоположной панели сделано для удобства, т.к. при множественных вызовах достаточно просто перемещаться по рабочим файлам текущей панели и давать команду запуска.


Ещё одну часто используемую операцию оформил в виде макропостановки: сравнение двух файлов утилитой FC$. В произвольном порядке выделяем сравниваемые файлы на обеих панелях и нажимаем клавишу "J", в результате собирается и выполняется следующая команда:

L A:FC$ d1:FILE1 d2:FILE2

Для примера я выбрал файлы "ED.HLP" на диске "B:" (в правой панели) и на диске "A:" (в левой панели) и нажал "J", результат:

https://forum-img.guitarplayer.ru/2024/02/11/1DJ3j.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/shell/shell_eval03.gif)


Также на клавишу "H" на будущее зарезервирована подстановка вызова утилиты HEX$, которая позволит редактировать бинарный файл.

tol123
29.12.2016, 10:22
Уважаемый Denn! на 128 кб озу буде работать DSDOS? и с кнгмд от орион-сервиса?

Denn
29.12.2016, 12:00
tol123, да, работать будет. Но в системе не будет квазидиска, а без него будет не очень интересно, имхо. Квазидиск используется для буфера обмена, для хранения INI-файлов программ, в качестве рабочего/временного диска при каком-либо креативе на Орионе.
Квазидиск выбирается по-умолчанию если нет явного указания диска, но это правило можно изменить с помощью утилиты конфигурации ОС - SYSTEM$ (параметр "Раб.диск").
Если в системе нет никаких других дисков, кроме диска "A:", то смысл установки ОС скорее ознакомительный.


По КНГМД. Если он удовлетворяет следующей спецификации:

F700H; Р-Р КОМАНД
F701H; Р-Р ДОРОЖЕК
F702H; Р-Р СЕКТОРОВ
F703H; Р-Р ДАННЫХ
F708H; Р-Р КОНФИГУРАЦИИ ; D1=DRV, D0=SIDE или F720H; D4=/SIDE, D2=0, D1&D0=DRV

то будет работать.

П.С. Я собрал два варианта: М.Короткина и тот, который идёт в комплекте плат от Zorel'а - с обоими КНГМД ОС прекрасно работает.

Denn
21.01.2017, 01:34
Всех приветствую в новом году! :)
Праздники прошли с пользой дела, в результате наконец-то сделал (буквально на одном дыхании!) то, что давным-давно хотел - удобный инструмент для любителей поковыряться в... работы с ОЗУ. До этого долго и мучительно пользовался замечательными авторскими программами: 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 сохраняются все текущие параметры: выбранные адреса, номер страницы ОЗУ, границы блока, поисковые запросы и т.д., т.о. при повторном запуске утилиты мы оказываемся как бы в том же самом месте.

Главный экран утилиты представляет собой редактор дампа и выглядит следующим образом:

https://forum-img.guitarplayer.ru/2024/02/11/1DRtu.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_main.gif)

Поясню назначение полей. Идём сверху вниз, слева направо.

первая строка:

"Адрес" - текущий адрес, где в данный момент находится курсор редактора (по-умолчанию устанавливается в 0000h);

"Страница" - текущая страница ОЗУ, с которой мы работаем (по-умолчанию устанавливается в 0);

"Блок" - диапазон адресов, указывающих на участок ОЗУ, используется в операциях копирования/заполнения/поиска (по-умолчанию устанавливается в 0000h-<RamTOP>);

вторая строка:

"Метка" - адрес для быстрого перехода, адрес начала фрагмента при работе с буфером обмена (по-умолчанию устанавливается в 0000h);

"Буфер... (...)" - размер и тип данных в буфере обмена (если буфер пуст, то значения параметров не отображаются);

"Шаблон" - байт данных, используется для заполнения ячеек ОЗУ константой в одиночных и групповых операциях (по-умолчанию = 00h);

* значения всех параметров в HEX-виде!

ниже идут:

Основное поле текущего шестнадцатиричного дампа, а справа копия этого же дампа в текстовом виде.

под ними находится поле:

"Шрифты 8х8" - копия текущего дампа в графическом виде, "заточенном" под отображение растровых шрифтов 8х8 пикселей (a-ka фонтов).

Пример знакогенератора из ПЗУ Монитора:
https://forum-img.guitarplayer.ru/2024/02/11/1DemH.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_fonts2.gif)

Пример знакогенератора ОС DSDOS:
https://forum-img.guitarplayer.ru/2024/02/11/1DzDY.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_fonts3.gif)


В самом низу экрана находится сокращённая подсказка по управляющим клавишам.


Концепт

Идеология работы с утилитой отличается от M128$. Все операции доступны в одно нажатие, никаких долгих перемещений по пунктам меню и повторов ввода адресов/данных. Все изменения немедленно отображаются в соответствующих полях (изменения ячеек ОЗУ - во всех трёх видах отображения текущего дампа):

https://forum-img.guitarplayer.ru/2024/02/11/1DYWF.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_edit.gif)

Все виды операций доступны для любой страницы ОЗУ - текущей в данный момент. Групповые операции с массивом данных выполняются по адресам блока. При переносе/вставке массива/фрагмента данных производится проверка на корректность ("заворачивание" адреса и превышение критической границы F000h), при некорректных значениях операция не выполняется и звучит сигнал ошибки (концепт "защита от дурочки").


Редактор дампа

Как наиболее важная и первоочередная функция, редактор предстаёт пользователю сразу после загрузки утилиты.
Возможно редактирование в двух режимах: "Байтовый" (выбран по-умолчанию) и "Текстовый", переключение между ними с помощью клавиши [Tab]:

https://forum-img.guitarplayer.ru/2024/02/11/1DlCS.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_text.gif)


Для навигации используются следующие клавиши:

[←], [→], [↑] и [↓] - перемещение по текущему дампу;

[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]. Без добавления управляющих клавиш вводится текущий адрес:

https://forum-img.guitarplayer.ru/2024/02/11/1DowR.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_in_addr1.gif)

Старое значение адреса стирается, и редактор готов к вводу нового. В этом режиме воспринимаются только цифры [0..9] и латинские буквы [A..F], в последнем случае текущий регистр и язык ввода роли не играют, нажатия на соответствующие буквы интерпретируются корректно:

https://forum-img.guitarplayer.ru/2024/02/11/1DrlV.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_in_addr2.gif)

Значение параметра обновляется после ввода последней цифры. Отмена ввода нового значения параметра - с помощью клавиши [Esc], при этом старое значение параметра восстанавливается.

Добавление управляющей клавиши [Shift] вводит адрес метки:

https://forum-img.guitarplayer.ru/2024/02/11/1Dpbm.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_in_lable.gif)

Добавление управляющей клавиши [Ctrl] вводит адреса блока. Сначала запрашивается адрес начала:

https://forum-img.guitarplayer.ru/2024/02/11/1Dcmy.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_in_blok1.gif)

а затем адрес конца:

https://forum-img.guitarplayer.ru/2024/02/11/1DdDh.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_in_blok2.gif)

Если требуется изменить только адрес начала, то после его ввода нажимаем [Esc].

Если требуется изменить только адрес конца, то удерживаем одновременно обе управляющие клавиши: [Ctrl]+[Shift].


Шаблон

По аналогии, все операции связанные с Шаблоном ассоциированы с клавишей [Enter]. Без добавления управляющих клавиш производится вставка шаблона по текущему адресу, при этом для удобства при многократных операциях автоматически курсор переходит на следующий байт (символ).
Добавление управляющей клавиши [Ctrl] копирует значение текущей ячейки ОЗУ в шаблон.
Значение шаблона также можно ввести вручную, для этого добавляется управляющая клавиша [Shift]:

https://forum-img.guitarplayer.ru/2024/02/11/1D2CO.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_in_pattern.gif)


Копирование блока

При операции копирования, дамп выделенного блока копируется начиная с текущего адреса.
Т.е. сначала задаём границы копируемого блока, как было описано выше, либо с помощью быстрого выделения [Ctrl]+[Shift]+[F3].

Для примера выделим фрагмент строки "Слишком большой файл":

https://forum-img.guitarplayer.ru/2024/02/11/1DGwT.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_blok1.gif)

В данном примере метка стоит на конце исходной строки по адресу 0013h, а курсор по адресу 0000h. Операция быстрого выделения сама определяет который из адресов старше, и в соответствии с этим корректно берёт значения начала и конца блока.

Далее перемещаем курсор по адресу, куда требуется скопировать блок (в данном примере - 0020h), и нажимаем [F3]:

https://forum-img.guitarplayer.ru/2024/02/11/1DNoo.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_blok2.gif)

Блок скопирован.


Буфер обмена

Используется для переноса (копирования) данных между участками дампов ОЗУ, между страницами ОЗУ и между программами. В данной утилите также может использоваться для копирования участка дампа в качестве образца для поиска.
MTOOL$ различает два зарезервированных в ОС DSDOS типа данных: "HEX" (01h) и "TXT" (03h). При копировании в буфер обмена маркировка типа данных производится согласно текущему режиму: "Байтовый" = "HEX" (01h), "Текстовый" = "TXT" (03h). При вставке из буфера тип данных игнорируется, данные вставляются всегда как дамп, т.о. возможна вставка любых данных из других программ.

Для копирования данных в буфер обмена, сначала выделяем фрагмент.
Для этого адрес начала фрагмента записываем в метку ([Ctrl]+[N] или [Shift]+[F2]):

https://forum-img.guitarplayer.ru/2024/02/11/1D374.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_cb1.gif)

Затем перемещаем курсор к адресу конца фрагмента и нажимаем [Ctrl]+[F3] (или [Ctrl]+[Ins] на клавиатуре PS/2 с прошивкой МК v0.21).
В результате фрагмент записан в буфере обмена под соответствующим типом данных:

https://forum-img.guitarplayer.ru/2024/02/11/1DBRz.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_cb2.gif)


Для вставки фрагмента из буфера обмена перемещаем курсор на адрес начала места вставки и нажимаем [Shift]+[F3] (или [Shift]+[Ins] на клавиатуре PS/2 с прошивкой МК v0.21).

https://forum-img.guitarplayer.ru/2024/02/11/1DH2s.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_cb3.gif)

Фрагмент вставлен.

Как было сказано выше, вставку можно делать в другой странице ОЗУ, т.о. легко делается перенос данных между страницами.
А также данные в буфер обмена могли быть скопированы ранее из другой программы и вставлены в MTOOL$, либо скопированы из MTOOL$, а использованы в другой программе. Например, можно скопировать текстовое сообщение (в текстовом режиме) из дампа программы, а затем вставить его в текстовом редакторе, и наоборот.

Пример копирования бинарных данных (фонтов) через буфер обмена:

Выделяем и копируем фрагмент (BB80h..BBFFh) в буфер обмена (тип данных = 01h):

https://forum-img.guitarplayer.ru/2024/02/11/1Dx0U.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_cb4.gif)

Перемещаемся на адрес начала, куда будем вставлять (участок BB00h..BB7Fh):

https://forum-img.guitarplayer.ru/2024/02/11/1Daag.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_cb5.gif)

Вставляем:

https://forum-img.guitarplayer.ru/2024/02/11/1DhO0.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_cb6.gif)

Результат наглядно виден по графическому полю.


Если что-то пошло не так...

Механизм "Защиты от дурочки" не позволяет при блочных операциях испортить системную область непереключаемого ОЗУ F000h..F3FFh, а также копировать данные в порты F400h..FFFFh (модифицировать ячейки портов по отдельности можно). Однако "наломать дров" всё же есть возможность, в частности испортить область ОС DSDOS в странице ОЗУ №1, содержимое файлов квазидиска - страницы 2..3(7) или скопировать данные в экранную область. Порча системных данных вероятнее всего фатальна, в результате потребуется холодная перезагрузка ОС, испорченные файлы не восстановить - тут пользователь должен сам "думать головой".
А вот последнюю ситуацию (с экраном) возможно оперативно и без последствий исправить.

Для примера нечаянно скопировали мусор в экранную область:

https://forum-img.guitarplayer.ru/2024/02/11/1Dvov.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_refresh1.gif)

Ничего страшного, нажимаем клавишу [F5], в результате экран утилиты полностью перерисовывается:

https://forum-img.guitarplayer.ru/2024/02/11/1DMBp.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_refresh2.gif)


Сравнение дампов

Сравнение дампов выполняется по команде [Ctrl]+[C]. Происходит побайтовое сравнение блока с дампом начиная с текущего адреса.

Возьмём результаты примера со скопированными фонтами, и сравним оригинал с копией. Блок копии у нас уже выделен, ставим курсор на начало оригинала и даём команду сравнения:

https://forum-img.guitarplayer.ru/2024/02/11/1D6RC.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtoolmtool_compar1.gif/)

Копировщик в прошлом примере не подвёл :) Данные идентичны:

https://forum-img.guitarplayer.ru/2024/02/11/1D9Gr.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_compar2.gif)

Нарочно испортим 16 первых байт оригинала (затрём кодом 30h из шаблона):

https://forum-img.guitarplayer.ru/2024/02/11/1DV1u.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_compar3.gif)

И повторим сравнение. Вновь техника не обманула, несоответствия выявлены:

https://forum-img.guitarplayer.ru/2024/02/11/1Ds0H.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_compar4.gif)

Результаты сравнения выводятся в отдельном окне, поверх полей данных редактора. Если кол-во результатов не помещается в окне, то происходит скроллинг. Приостановить процесс скроллинга можно нажатием любой клавиши, продолжить также любой клавишей, кроме [Esc], последняя отменяет процесс сравнения.
По окончании сравнения выводится общий счётчик несовпадений (в десятичном виде). Возврат в редактор - по любой клавише.


Поиск фрагмента

Поиск фрагмента производится в пределах блока! Поэтому сначала определяем границы блока, а потом даём команду поиска - [Ctrl]+[F].
Открывается диалог ввода образца поиска:

https://forum-img.guitarplayer.ru/2024/02/11/1D7EY.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find1.gif)

Возможны два варианта ввода: "Байтовый" и "Текстовый". Переключение между ними по клавише [Tab]. Переключаться можно в любой момент, в т.ч. "посреди дороги" во время ввода, при этом содержимое строки отобразится в соответствующем виде, и ввод будет продолжен в новом режиме. Максимальная длина образца поиска - 255 байт (символов).
Доступны следующие клавиши при вводе/редактировании образца:

"Байтовый" режим:

[0..9], [A..F] - ввод текущего байта, после ввода последней цифры текущего байта курсор переходит к следующему


"Текстовый" режим:

['Пробел'..'ъ'] - ввод символов с кодами 20h..FFh


Общие для обоих режимов:

[←], [Забой] - удаление последнего байта/символа;

[→] - открыть ("вспомнить") следующий байт/символ*;

[↑] или [↓] - восстановить образец предыдущего поиска;

[СТР] или [PgDown] - очистить строку;

[Esc] - отмена операции, возврат в редактор;

[Enter] - запуск процесса поиска;

[F3] или [Shift]+[F3] (или [Shift]+[Ins] на клавиатуре PS/2 с прошивкой МК v0.21) - вставить фрагмент поиска из буфера обмена**;

* На самом деле буфер ввода всегда состоит из 255 байтов/символов, из которых значащие (видимые на экране и участвующие в поиске) ограничиваются искусственно (по нажатию [Enter]). Т.о. есть возможность открыть ("вспомнить") все 255 байт/символов буфера строки образца.

При вставке в строку образца фрагмента из буфера обмена, учитывается тип данных, в соответствии с ним автоматически переключается режим отображения:

https://forum-img.guitarplayer.ru/2024/02/11/1DFaF.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find2.gif)

* Вставка фрагмента из буфера обмена возможна только при условии, что размер данных не превышает 255 байт! В противном случае вставка игнорируется.


После вставки, можно изменить режим и продолжить редактирование:

https://forum-img.guitarplayer.ru/2024/02/11/1DKOS.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find3.gif)


После завершения ввода образца, запускаем процесс поиска ([Enter]):

https://forum-img.guitarplayer.ru/2024/02/11/1DiqR.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find4.gif)

Если образец занимает более одной строки, то он визуально усекается, а в хвосте добавляется многоточие, т.к. остальная часть окна используется для отображения процесса поиска.
При анализе больших массивов выводится анимация - вращающийся "индикатор прогресса".
При обнаружении совпадений, выводятся адреса вхождения участков дампа. Также эти адреса запоминаются в специальном буфере, т.о. впоследствии, в редакторе дампа по ним можно быстро перемещаться с помощью [Ctrl]+ [←], [→].
Для приостановки процесса поиска нужно нажать любую клавишу. Продолжение также по любой клавише, кроме [Esc], последняя отменяет поиск и возвращает в редактор.

По окончании процесса выводится общее кол-во вхождений образца и предлагаются два варианта выхода в редактор:

https://forum-img.guitarplayer.ru/2024/02/11/1DuBV.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find5.gif)

По [Enter] мы автоматически выходим в редактор по адресу первого вхождения образца. По любой другой клавише мы возвращаемся в редактор по текущему адресу, при этом указатель быстрых переходов по результатам поиска установлен на адрес последнего вхождения образца, т.е. переходы по результатам [Ctrl]+[←] будут идти с конца.

Например, жмём [Enter] и переходим к первому результату:

https://forum-img.guitarplayer.ru/2024/02/11/1DwF2.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find6.gif)

Затем нажимаем [Ctrl]+[→] и переходим к следующему:

https://forum-img.guitarplayer.ru/2024/02/11/1DjGm.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find7.gif)

Аналогично можно перемещаться в "текстовом" режиме...
[Ctrl]+[←]:
https://forum-img.guitarplayer.ru/2024/02/11/1Dk6c.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find8.gif)

[Ctrl]+[→]:
https://forum-img.guitarplayer.ru/2024/02/11/1DD0y.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_find9.gif)

Содержимое буфера адресов результатов сохраняется до следующего поиска.

При повторном поиске клавишей [→] можно посимвольно "вспоминать" предыдущий образец:

https://forum-img.guitarplayer.ru/2024/02/11/600Eh.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_findA.gif)

или восстановить его сразу весь по клавише [↑].


Передача управления по адресу

При нажатии комбинации [Ctrl]+[Shift]+[G] выполняется CALL-вызов кода в нулевой странице по текущему адресу. Работает только если текущая страница ОЗУ = 0 !
Возврат производится обратно в MTOOL$, при этом полностью перерисовывается экран и восстанавливаются режимы отображения (полноэкранный, б/цветный и т.д.).


Коды клавиш

Часто необходимая при программирования функция - получение HEX-кодов клавиш. В MTOOL$ вызывается в "Байтовом" режиме по клавише [K].
Открывается окно, в котором отображаются символы и коды нажимаемых клавиш:

https://forum-img.guitarplayer.ru/2024/02/11/608hP.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_hexkey1.gif)

Выводятся символ и код, полученные подпрограммой BIOS ОС DSDOS.

Если нажатую клавишу чуть задержать, то выводится дополнительный вариант кода, полученного подпрограммой Монитора 0F81Bh:

https://forum-img.guitarplayer.ru/2024/02/11/60JOO.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/dsdos/mtool/mtool_hexkey2.gif)

Т.к. BIOS осуществляет преобразование кодов в соответствии с типом используемой клавиатуры, то значения для некоторых клавиш (или сочетаний) могут различаться с п/п Монитора.
Выход в редактор по клавише [Esc].



П.С.:
В планах дополнить функционал возможностью оперативного сохранения блока в виде файла и возможно ещё чем-то.
Вывод контрольных сумм не реализован в виду их полной неактуальности на момент создания утилиты :)

HardWareMan
21.01.2017, 10:45
Редактор отличный. Жалко только что интерактивный подсчет контрольной суммы возможен только построчно и, максимум, для блока. Это делал DL-редактор для Специалиста. А для всего файла Орион уже не потянет. В этом отношении набор дампов на PC намного удобнее (писал для себя):
http://savepic.ru/12661593.png
PS Вывод блока в графическом режиме это супер!

Error404
21.01.2017, 15:27
PS Вывод блока в графическом режиме это супер!

Да, удобная фишка. Я тоже хотел было такое сделать в отладчике эмулятора, но проленился, до сих пор при необходимости делаю copy интересующего блока тупо на экран. :)

HardWareMan
21.01.2017, 18:53
Да, удобная фишка. Я тоже хотел было такое сделать в отладчике эмулятора, но проленился, до сих пор при необходимости делаю copy интересующего блока тупо на экран. :)
Ну а я с кружка привык так делать. Ибо Специалист не справлялся никак, а команда Т всегда была под рукой.

Denn
23.01.2017, 12:59
Сборка ОС DSDOS v3.86 с интегрированной MTOOL$ для обеих платформ. Также уменьшен "вес" большинства системных утилит, исправлен небольшой баг с запуском системных (оверлейных) файлов в пакетном режиме и незначительные "косметические" доработки.


Для ПРК ОРИОН-128/512:

ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/orion/dsdos/dsdos-128_s64.rar)

ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/orion/dsdos/dsdos-128_s128.rar)

ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/orion/dsdos/dsdos-128_s256.rar)

ПЗУ ROM-диска объёмом 512 Кб (http://denn.ru/orion/dsdos/dsdos-128_s512.rar)

По-прежнему внутри каждого архива три варианта:

- без RAM-диска (не путать с квазидиском!);
- RAM5 (RAM-диск 1024 Кб в составе ЭД™ 1x1, порт #F50xh);
- RAM7 (быстрый RAM-диск 1024 Кб в виде платы расширения, порт #F7Fxh);


Для ПК ОРИОН-ПРО:

"Стандартная", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/orion/dsdos/dsdos-pro_s64.rar)
"Стандартная", ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/orion/dsdos/dsdos-pro_s128.rar)
"Стандартная", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/orion/dsdos/dsdos-pro_s256.rar)

"Игровая", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/orion/dsdos/dsdos-pro_g64.rar)
"Игровая", ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/orion/dsdos/dsdos-pro_g128.rar)
"Игровая", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/orion/dsdos/dsdos-pro_g256.rar)

"Программист", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/orion/dsdos/dsdos-pro_p64.rar)
"Программист", ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/orion/dsdos/dsdos-pro_p128.rar)
"Программист", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/orion/dsdos/dsdos-pro_p256.rar)

Внутри архивов под объёмы 128 Кб и более находится два варианта: одним полным образом (файл romdisk.bin) для новой версии ROM-диска, и соотв. кол-вом файлов по 64 Кб (файлы romdiskN.bin) для старого варианта (в составе мультикарты).

Stampmaker
11.05.2017, 22:03
порт COM1 использует участок F740..F74Fh

а должен F730h...F733h

адреса F740h...F743h занимает таймер ВИ53

читаем ж.Радио 1995г, №9, стр.37

http://s019.radikal.ru/i625/1705/18/5dd4c3093579.png (http://radikal.ru)


это глобальная ошибка, которая вылезла через 20 лет

Denn
11.05.2017, 22:38
И там же на схеме всё с точностью до наоборот!
В итоге я перерисовал (в библиотеке!) только схему и делал по ней, с тех пор так и повелось.

П.С. интересно, кроме меня кто-то ещё собирал эту схему?.. ))

Stampmaker
11.05.2017, 22:51
есть предложение оставить как есть:

ВИ53 F73x
ВВ51 F74x

всё-таки это поддержано программно ядром ОС DSDOS и было сделано далеко не вчера (более 20 лет назад, т.е. наработки серьёзные) и не одним человеком

Denn
11.05.2017, 23:38
В эмуляторе от b2m тоже ВВ51 посажен на F74x. Совпадение? Не думаю ;)

tol123
12.05.2017, 09:11
В эмуляторе от b2m тоже ВВ51 посажен на F74x. Совпадение? Не думаю ;)

А в Радио 04-93 Рогов, Бриджиди.

F740, F790 -ви53
F798 -ви51
F730, F738 - резерв

Denn
10.08.2017, 17:37
Какое-то глобальное затишье в ветке про Орион, видать весь народ плавно распределился по дачам :)

В качестве развлечения у меня написалась программка для анализа TTL-сигналов. Вот её скриншот из эмулятора:

https://forum-img.guitarplayer.ru/2024/02/11/60ze4.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/ttl-analizer/ttl1.png)


Что это такое и для чего нужно?

Частенько в 8-битной (и не только) практике радиолюбителей возникает задача анализа работы или отладки фрагментов цифровых схем, для этого полезно иметь наглядное представление одновременно нескольких сигналов относительно какого-то опорного. С этой задачей прекрасно может справиться Орион :)

Исследуемые сигналы подаются на входы порта пользователя, всего анализируется состотяние 16 линий (A0..A7, B0..B7). Опорной в программе считается линия A0.
Линии C0..C3 настраиваются на вывод, младшая используется для вывода сигнала программной синхронизации (если используется соответствующий режим, об этом ниже).


Программа имеет 11 режимов:

1). "/\/\/" - фиксация данных по фронту и спаду опорного сигнала**

2). "Авто" - фиксация данных по изменению сигнала на любом из входов**

3). "_/..." - циклическая фиксация данных, запуск по фронту опорного сигнала*

4). "\_..." - циклическая фиксация данных, запуск по спаду опорного сигнала*

5). "/...\" - циклическая фиксация данных, запуск по фронту опорного сигнала, останов по спаду опорного сигнала

6). "\.../" - циклическая фиксация данных, запуск по спаду опорного сигнала, останов по фронту опорного сигнала

7). "1 мс" - асинхронная циклическая фиксация данных с интервалом 1 мс**

8). "10 мс" - асинхронная циклическая фиксация данных с интервалом 10 мс**

9). "100 мс" - асинхронная циклическая фиксация данных с интервалом 100 мс**

10). "1 с" - асинхронная циклическая фиксация данных с интервалом 1 сек**

11). "Скор." - асинхронная циклическая фиксация данных с максимальной скоростью*
__________________________________________________ __________________________
* до заполнения буфера (максимум - 22528 тактов)
** до заполнения буфера или прерывания пользователем (клавишей [Ctrl])

Переключение режимов - с помощью клавиши пробела. Смена режимов циклическая, для обратного порядка перебора нужно удерживать клавишу [Ctrl].

Каждый режим анализа может выполняться в двух вариантах: с внешним клоком или с внутренним. Переключение клавишей [Tab]. В первом случае синхронизация выполняется по внешнему сигналу, заведённому на вход "A0". Во втором случае сигнал синхронизации генерирует программа и выдаёт на испытываемую схему через выход "C0".

В виду ограниченности ресурсов ПРК отображение результатов в реальном времени не поддерживается. В связи с этим, просмотр результатов анализа возможен после завершения сканирования, в режиме "оффлайн":

https://forum-img.guitarplayer.ru/2024/02/11/60AIz.png
альт.ссылка на изображение (http://denn.ru/8bit/orion/soft/ttl-analizer/ttl2.png)

По окончании анализа на экран выводится "развёртка" первых 43-х тактов. Вверху указан номер крайнего левого такта и всего записанных тактов в буфере. Максимальный размер буфера составляет 22528 тактов (используется ОЗУ 1000..BFFFh основной страницы ПРК).


Для навигации используются следующие клавиши:

[влево/вправо] - перемещение на один такт;

Shift+[влево/вправо] или [PgUp/PgDn] - перемещение на страницу (43 такта);

[Home/End] - в начало/конец буфера;

[0..7] - к следующему изменению сигнала на соответствующем входе порта "A";

Ctrl+[0..7] - к предыдущему изменению сигнала на соответствующем входе порта "A";

[8..F] - к следующему изменению сигнала на соответствующем входе порта "B";

Ctrl+[8..F] - к предыдущему изменению сигнала на соответствующем входе порта "B";


Программа пока поддерживает только порт пользователя #F60x, соответственно работает только на ОРИОН-128. Позже сделаю универсальную версию с поддержкой ОРИОН-ПРО (порт #20h и соотв. коррекция временных интервалов для 10 МГц).
__________________________________________________ _________________________________________

Download (v1.5 alpha):

Первый "блин" можно скачать в ORI-формате тут - http://denn.ru/8bit/orion/soft/ttl-analizer/TTL$.ori

Файл справки по программе - http://denn.ru/8bit/orion/soft/ttl-analizer/TTL_HLP.ori

Поддержка обеих платформ: Орион-128 (2,5 МГц) и Орион-ПРО (10 МГц), автодетект средствами ОС.
Отсчёт временных интервалов в режимах №№7-10 привязан к тактовой частоте соответствующего ЦПУ!
__________________________________________________ _________________________________________

Error404
10.08.2017, 18:59
a какие частоты потянет?

Denn
10.08.2017, 19:16
a какие частоты потянет?

По современным меркам думаю, что совсем смешные. Польза больше от режимов с программным клоком, когда Орион сам драйвит исследуемую схему.

barsik
11.08.2017, 14:26
Если я правильно понял смысл поста, речь идёт о много канальном логическом анализаторе на базе ОРИОНА, причём реализация программная, а не аппаратная. Программная реализация имеет недостатком низкую частоту дискретизации.

Конечно, такое устройство вполне может найти место в лаборатории любителя для отладки устройств на КМОП процессорах. Которые характерны тем, что сохраняют работоспособность при понижении тактовой частоты практически до 0. Тогда, например, вместо поиска ошибок с помощью аппаратного пошагивателя и неудобного ручного контроля шин осцилографом, можно использовать это устройство, подав процессору такт в 10 КГЦ. Кстати, в некоторых случаях пошагиватель не помогает выявить ошибку. Например, у меня при отладке ИРИШИ тестовая программа в шаговом режиме проходила, а компьютер всё-равно не работал (так и не отладил, пришлось собрать второй экземпляр).

Кстати, знайте, что и не-КМОП процессоры могут работать на очень низкой частоте. КР580 у меня работал на такте ~200 КГЦ. А Z80 вообще нормально прогонял программы при тактировании клоком всего лишь в 2 КГЦ (!). А в справочниках написано, что минимальная частота 500 КГЦ.

Т.о, данное устройство может быть полезным при замене низкоэффективного и устаревшего КР580 в ОРИОНЕ (и РК86) на более скоростной 65C02 на такте 25 МГЦ (что эквивалентно Z80 на такте 50 МГЦ). Понятно, что получится совсем другой компьютер, естественно, с непрозрачным ОЗУ. Заметим, что такая переделка намного проще, чем разработка ЭВМ с нуля.

Для 6502 есть возможность перетранслировать некоторые программы КР580, эмулируя недостающие регистры КР580 в Zero Page. И даже команды с адресацией через 16-ти разрядные регистры, без проблем эмулируются (тут к сожалению, 6502 лучше, чем 6800). Таким образом, не так уж сложно (если надо) воспроизвести, например, ORDOS или CP/M и соответственно некоторые программы для них.

К Apple-II в начале 80-тых выпускалась такая периферийная плата, но частотные параметры её высокие. Данные накапливались в скоростном ОЗУ (70 НСЕК), а компьютер служил лишь для управления и визуализации. Возможно, что-то подобное можно самостоятельно разработать и сейчас (например, используя ПДП).


А какие частоты потянет ?

Тут на помощь приходит арифметика. Посчитаем максимально достижимые частотные параметры программной реализации.


.
LOOP: LD A,(DE) ; 7
LD (HL),A ; 7
INC HL ; 4
JR LOOP ; 12
; = 30 тактов

Что даёт при такте КР580 в 2.5 МГЦ минимальный период дискретизации 400 НСЕК * 30 = 12 МКСЕК, что соответствует одному периоду частоты 83.3 КГЦ. Это при 8-ми входных линиях и при аппаратной реализации останова (по аппаратному RESET или INT). Если останов на конец буфера сделать программным и ввести 16-ть анализируемых линий, то получается.


.
LOOP: LD A,(DE) ; 7
LD (HL),A ; 7
INC HL ; 4
LD A,(D8_D15) ; 13
LD (HL),A ; 7
INC HL ; 4
DEC BC ; 6
LD A,B ; 4
OR C ; 4
JR NZ,LOOP ; 12
; = 68 тактов

Что даёт при такте КР580 в 2.5 МГЦ минимальный период дискретизации 400 НСЕК * 68 = 27.2 МКСЕК, что соответствует одному периоду частоты 36.8 КГЦ.

Приведённые простейшие расчёты показывают насколько необходима замена в ОРИОНЕ КР580 на такте 2.5 МГЦ на Z80B на такте 7.5 МГЦ.

Denn
11.08.2017, 15:02
Если я правильно понял смысл поста, речь идёт о много канальном логическом анализаторе на базе ОРИОНА, причём реализация программная, а не аппаратная. Программная реализация имеет недостатком низкую частоту дискретизации.

Всё верно. Смысл в том, что для отладки и анализа далеко не всегда требуется работа в реальном времени. В режиме программной синхронизации в качестве клока на испытываемую схему подаётся таковой из программы, т.о. анализ производится на максимальной частоте, которую Орион может сгенерировать в программном цикле.



Конечно, такое устройство вполне может найти место в лаборатории любителя для отладки устройств на КМОП процессорах.

В системе с процессором такой штукой ловить нечего, т.к. там требует гораздо большее кол-во входов и - главное - нужна ещё и куча выходов, плюс возможность генерировать на них сложные испытательные сигналы. В этом направлении я планирую подумать, но там уже дело пахнет редактором исптытательных сигналов...слишком масштабно для работы "в стол" /-)



К Apple-II в начале 80-тых выпускалась такая периферийная плата, но частотные параметры её высокие. Данные накапливались в скоростном ОЗУ (70 НСЕК), а компьютер служил лишь для управления и визуализации. Возможно, что- то подобное можно самостоятельно разработать и сейчас (например, используя ПДП).

"Железная" реализация это клёво, но разрабатывать таковую сейчас смысла нет, т.к. всё равно никто не будет заморачиваться сборкой. А для работы "в стол" это слишком круто.

В данном случае вся фишка в том, что по сути ничего паять не надо: воткнул в порт нужное кол-во проводков и вот тебе готов лабораторный стенд!

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



Что даёт при такте КР580 в 2.5 МГЦ минимальный период дискретизации 400 НСЕК * 68 = 27.2 МКСЕК, что соответствует одному периоду частоты 36.8 КГЦ.

Ну вот и замечательно, конструкцию электронных часов с родным клоком 32768 Гц можно испытывать в реальном времени :) Уже профит!

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

Вот цикл сканирования в скоростном режиме:



LOOP:
LHLD PT_USR
MOV A,L
STAX B
INX B
MOV A,H
STAX B
INX B
MOV A,B
CPI C_OVER
JC LOOP


В [BC] адрес буфера, C_OVER - старший байт адреса границы буфера


Может можно сделать ещё быстрее, например через стэк?.. Можно подумать, но выигрыш будет отнюдь не в разы, так что особого смысла и нет. Через стек это, видимо, после взятия данных из портов сразу класть в буфер по PUSH H, в таком случае запись будет обратная (стек растёт вниз), нужно менять всю логику отрисовки, а там своя оптимизация по скорости...

HardWareMan
11.08.2017, 15:19
Вот цикл сканирования в скоростном режиме:

LOOP:
LHLD PT_USR / 16
MOV A,L / 5
STAX B / 7
INX B / 5
MOV A,H / 5
STAX B / 7
INX B / 5
MOV A,B / 5
CPI C_OVER / 7
JC LOOP / 10


В [BC] адрес буфера, C_OVER - старший байт адреса границы буфера
Итого на цикл: 72 такта в цикле

LOOP:
LHLD PT_USR / 16
PUSH H / 11
DCX B / 5
MOV A,B / 5
ORA C / 4
JNZ LOOP / 10
Итого: 51 такт на цикл. Есть смысл.

barsik
11.08.2017, 15:50
Вряд-ли сейчас кто-то будет делать сложные цифровые конструкции на "рассыпухе". Теперь даже в простейшие конструкции (например, часы) часто ставят микропроцессор, что не только проще, но и улучшает качество. Для отладки простых цифровых конструкций достаточно обычного осцилографа (особенно, если он двухлучевой), а иногда даже традиционного цифрового пробника, если он достаточно грамотный (показывает не только уровни, но и наличие импульсов).

А что насчёт того, чтобы сделать из ОРИОНА осцилограф? Двухлучевой, а может быть даже и скоростной. У меня например осцилограф, хотя и достаточно скоростной, но однолучевой и даже одноканальный. А часто хочется посмотреть сразу два сигнала, чтобы узнать, как они соотносятся. В ж.РАДИО в 80-тые видел схемы внешних коммутаторов, которые, якобы, обеспечивают это.

Если применить ПДП, который тратит 4 такта на байт, то период дискретизации получится в 4*400 НСЕК=1.2 МКСЕК, что соответствует периоду частоты в 625 КГЦ. Т.е уже можно более-менее точно рассматривать сигналы частотой до 200 КГЦ. А если использовать не ОРИОН, а РК86, где, во-первых, ПДП уже есть, а во-вторых, в РК можно тактировать ПДП максимально высоким тактом, это дополнительно увеличит разрешение.


"Железную" реализацию разрабатывать сейчас смысла нет, т.к. всё равно никто не будет заморачиваться сборкой
Это да. Просто потому, что разработчиков МП-железа, которым анализатор был бы полезен, - очень мало. А вот осцилограф нужен, если его нет у любителя. Скоростной аппаратный осцилограф из ОРИОНА будет сделать разумно, если для этого будет достаточно лишь спаять платку с 10-ю микросхемами (одна из которых скоростное КМОП-ОЗУ 10-25 НСЕК). Это будет менее громоздко, чем иметь реальный осцилограф. А низкоскоростной программный осцилограф, это вообще не требует труда (достаточно изготовить высокочастотный пробник с полевиком на входе).

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

Со стеком лучше так:


.
LOOP: LD HL,(PORT_A) ; 16
PUSH HL ; 11
JR LOOP ; 12
; = 39 тактов


Останов делается не программным, а за счёт аппаратной ловушки на запись по адресу 0000 (отчего возникает INT или RESET). Период дискретизации будет: 39*400= 15.6 МКСЕК, что соответствует периоду частоты 64 КГЦ.

Denn
11.08.2017, 16:36
Останов делается не программным, а за счёт аппаратной ловушки на запись по адресу 0000 (отчего возникает INT или RESET). Период дискретизации будет: 39*400= 15.6 МКСЕК, что соответствует периоду частоты 64 КГЦ.

Имхо, что 37 кГц, что 64 - одна малина. Все МПС-процессы имеют скорости от мегагерцев, так что до реал-тайма недостижимо далеко.
Актуальнее всё же синхронный режим.

barsik
11.08.2017, 16:52
Все МП-процессы имеют скорости от мегагерцев, так что до реал-тайма недостижимо далеко
Понятно, что отладка МП в реальном времени на программной версии анализатора невозможна. Поэтому я и указал, что это удобно только для систем, где на время отладки можно поставить очень низкочастотный такт CPU, отчего быстродействие логического анализатора перестаёт играть роль. Причём желательно, чтобы в системе ОЗУ было статическое. Естественно, если в системе динамическое ОЗУ регенерируется за счёт частых обращений к ОЗУ процессора или видеочасти, то отлаживать его на низкой скорости невозможно. Программный анализатор (осцилограф) непригоден для отладки МП-железа на динамическом ОЗУ. Так что сам ОРИОН с помощью такого анализатора не отладить. А программ реального времени практически нет (это только работа с НГМД или магнитофоном), даже для IDE-винчестера скорость обмена данными не важна.

А чего идея осцилографа Вам не интересна (это же даже проще)?

Зря Вы не хотите делать аппаратную реализацию. Хотя-бы прикиньте, во что это может "вылиться", хотя бы для осцилографа. Переключаемый генератор 20/10/5/2.5 МГЦ, банка ОЗУ 20-70 НСЕК, скоростной счётчик в 8 разрядов. 8-ми разрядный мультиплексор (коммутирует адреса ОЗУ между счётчиком и CPU), буфер шины данных и немножко логики. Кажется, ничего особо сложного.

Кстати, для программного осцилографа вовсе не нужно читать 16 линий, стек не нужен и годится скоростной линейный участок в 256 таких команд:


.
LD A,(DE) ; 7
LD (HL),A ; 7
INC HL ; 6
; = 20 тактов на байт

Что даёт период дискретизации соответствующий периоду частоты 125 КГЦ. А если у Вас ОРИОН с тактом 7.5 МГЦ, то будет 375 КГЦ. Совсем неплохо. Только старт программы "захвата" надо делать аппаратно, а именно - по синхроимпульсу сбрасывать READY (или даже HOLD) для КР580.

А если накапливать отсчёты в сдвиговом регистре, то читать его надо частотой в 8 раз ниже, отчего получится период дискретизации осцилографа соответствующий частоте в 1 МГЦ. А если регистр 16-ти разрядный и использовать стек, как в примере предыдущего поста, то получится не менее 1.5 МГЦ. Заметьте, речь о программном осцилографе.

Denn
14.08.2017, 01:03
Стартовая версия ТТЛ-анализатора готова, линк внизу вводного поста - http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=923604&viewfull=1#post923604

Поддержаны обе платформы: Орион-128 (2,5 МГц) и Орион-ПРО (10 МГц).

Denn
17.08.2017, 16:17
a какие частоты потянет?

Намедни материализовался ответ на этот вопрос (спасибо, Stampmaker!): в самом быстром режиме на Орионе-128 (@2,5 МГц) получилось ровно 25000 измерений в секунду. На Орионе-ПРО это, видимо, будет цифра примерно в 3,5 раз больше. Как-то так.

Denn
24.08.2017, 17:57
Решил поразвлекаться с ЖК-индикаторами :)
Подключил к Ориону вот такой - https://www.chipdip.ru/product/wh1602d-ygh-ct-k
Как обычно, интересно было "открывать америку" самостоятельно, разбирался с нуля по даташиту, было весьма увлекательно.


Спаял переходник на порт пользователя (#F600-данные, #F602-управление: С0="Е", С1="RS", C2="R/W"):

https://pp.userapi.com/c638019/v638019888/5a193/EoiJaORNcwE.jpg

https://pp.userapi.com/c638019/v638019888/5a181/LN4mNShfL7c.jpg

https://pp.userapi.com/c638019/v638019888/5a18a/lvMYGT0e_30.jpg


Пришлось поколдовать с преобразованием кодировки "на лету", чтобы можно было тексты писать прямо на ассме Ориона:



CONV:
; I: [A]-КОД DSDOS
; O: [A]-КОД CGRAM
CPI 20H
JC ECNV
CPI '\'
JZ S_\
ANA A
RP
SUI 0B0H
JC ECNV
; ПРЕОБРАЗОВАНИЕ КОДОВ A0..FFh
LXI D,TabCNV
MOV L,A
MVI H,0
DAD D
MOV A,M
RET

S_\:
MVI A,60H; '/'
RET

ECNV:
; ОШИБОЧНЫЙ КОД
MVI A,20H
STC
RET


TabCNV:
; тАБЛИЦА ПЕРЕКОДИРОВКИ

DB 3CH,3EH,0D9H,0DAH,0C8H,0C9H,0D9H,0DAH; B0-B7
DB 0DDH,0FBH,7EH,0DFH,0F5H,0EEH,0F4H,0FFH; B8-BF

DB 0B0H,41H,0A0H,0E1H,0E0H,45H,5CH,0A1H; C0-C7
DB 58H,0A5H,0A6H,4BH,0A7H,4DH,48H,4FH; C8-CF

DB 0A8H,0B1H,50H,43H,54H,0A9H,0A3H,42H; D0-D7
DB 62H,0AEH,0AFH,0ACH,0A4H,0E2H,0ABH,0ADH; D8-DF

DB 0C6H,61H,0B2H,0E5H,0E3H,65H,0E4H,0B4H; E0-E7
DB 78H,0B8H,0B9H,0BAH,0BBH,0BCH,0BDH,6FH; E8-EF

DB 0BEH,0C7H,70H,63H,0BFH,79H,0B6H,0B3H; F0-F7
DB 0C4H,0C3H,0B7H,0C1H,0C5H,0E6H,0C0H,0C2H; F8-FF




Далее был некоторый секас с пониманием инженерной мысли по части алгоритма работы, подбор таймингов... в итоге всё получилось:

https://pp.userapi.com/c638019/v638019888/5a13f/ulc8wy9BITo.jpg

https://pp.userapi.com/c638019/v638019888/5a148/GpQH3NFoHEY.jpg

https://pp.userapi.com/c638019/v638019888/5a160/TODUXfKxQMk.jpg

Код вывода символа в индикатор:



C_CURS:EQU 02H; ВЫВОД КУРСОРА
C_BLNK:EQU 01H; МИГАНИЕ КУРСОРА

C_tSET:EQU 1; >39МКС
C_tPWR:EQU 5; >150НС
C_tCYC:EQU 50; >1100НС

PT_DAT:EQU 0F600H; A0..A7
PT_CMD:EQU 0F602H; C0="E", C1="RS", C2="/RW"
PT_CFG:EQU 0F603H; 8Ah: Bx, CL - НА ВЫВОД

IniLCD:
; Инициализация

; НАСТРОЙКА ПОРТА
MVI A,8AH
STA PT_CFG
MVI A,3CH; 0 0 1 1 | N F 0 0
CALL WrtCMD
MVI A,3CH; 0 0 1 1 | N F 0 0
CALL WrtCMD
MVI A,0CH+C_CURS+C_BLNK; 0 0 0 0 | 1 D C B
CALL WrtCMD
; Display Clear
MVI A,01H; 0 0 0 0 | 0 0 0 1
CALL WrtCMD
; Entry Mode Set
MVI A,04H; 0 0 0 0 | 0 1 I/D S

WrtCMD:
; I: [A]-ИНСТРУКЦИЯ
STA PT_DAT
XRA A
STA PT_CMD
XRI 1
STA PT_CMD
LXI B,C_tPWR
CALL WAIT
;=XRA A
STA PT_CMD
LXI B,C_tCYC

WAIT:
DCX B
MOV A,B
ORA C
JNZ WAIT
RET


ClrLCD:
; CLS
LXI H,0
SHLD M_POS
MVI A,01H; 0 0 0 0 | 0 0 0 1
CALL WrtCMD
MVI A,02H; 0 0 0 0 | 0 0 1 -
JMP WrtCMD


PRA:
; Вывод символа
; I: [A]-КОД СИМВОЛА (КОДИРОВКА DSDOS)
PUSH H
CALL CONV
PUSH PSW
; ВЫЧИСЛЕНИЕ ПОЗИЦИИ
LHLD M_POS
MOV A,H
ANI 1
RRC
RRC
ORA L
;CALL PRH
; ЗАПИСЬ ПОЗИЦИИ В ИНДИКАТОР
ORI 80H; 1 A A A | A A A A
CALL WrtCMD
POP PSW
; ЗАПИСЬ КОДА СИМВОЛА
; I: [A]-ДАННЫЕ
STA PT_DAT
MVI A,03H; RS=1
STA PT_CMD
LXI B,C_tPWR
CALL WAIT
MVI A,02H
STA PT_CMD
LXI B,C_tCYC
CALL WAIT
; =XRA A
STA PT_CMD
; ОЖИДАНИЕ ИСПОЛНЕНИЯ (???)
LXI B,C_tCYC
CALL WAIT

; ИНКРЕМЕНТ ПОЗИЦИИ
INR L
MOV A,L
ANI 0FH
MOV L,A
JNZ EPRA
INR H
MOV A,H
ANI 1
MOV H,A

EPRA:
SHLD M_POS
POP H
RET

M_POS:DW 0; [L]=X, [H]=Y




В общем, видимо скоро будет универсальный драйвер в духе родного вывода символов в DSDOS под различные алфавитно-цифровые ЖК-индикаторы.

OrionExt
07.09.2017, 02:50
Скажу честно. Прикольная система. Но расширения от слова нуль - тут.

Denn
24.10.2017, 14:24
Καλημέρα για όλα!

Делюсь новой "поделкой". Заначка этого ПО датирована у меня в исходниках аж 1999-ым годом, тогда была написана основная часть движка, но к сожалению в силу жизненных обстоятельств проект был заброшен. Сейчас возникла насущная необходимость и проект был воскрешён и доведён до боевого образца, в связи с чем и решил его опубликовать.

Итак, речь идёт о компиляторе языка ассемблера. Доселе я пользовался замечательным ассемблером из пакета "Микрон" (а точнее усовершенствованным вариантом - АССЕМБЛЕР «М&S»), адаптированным под Орион-128+ORDOS (а впоследствии и под DSDOS), но его возможности были исчерпаны и возникла потребность в бόльшем функционале. Основной проблемой микроновского ассемблера является ограничение на размер компилируемого кода и всего 6 значащих символов у меток/констант. Также не хватает условной компиляции и некоторых других "плюшек", без которых конечно обойтись можно, но порой тоскливо.
Сразу оговорюсь, что при разработке нового ассемблера (далее - "DSDOS ASSM" или просто "DASM") я руководствовался исключительно своими потребностями, без особой оглядки на моду, "вражеские" стандарты и прочие условности. Идеология как и у всего проекта DSDOS: максимальная скорость работы, максимальный комфорт использования, минимальный занимаемый объём, никакой глобализации - только решение насущных задач в рамках платформы Ориона.

В основу положен функционал микроновского ассемблера, о котором можно почитать тут (http://emuverse.ru/wiki/Радио-86РК/Радио_05-93/Ассемблер:_Новые_возможнос� �и), в связи с этим в описании буду стараться не пересказывать функционал Микрона, а расскажу о нововведениях и отличиях.

Основные ТТХ:

■ синтаксис команд: Intel_8080 style (MOV, STA, LHLD и т.д.);
■ поддержка некоторых команд МП Z80 (альт.регистры, короткие переходы, циклы, операции с отдельными битами регистров*);
■ максимальное кол-во значимых символов меток/констант - 14;
■ поддержка латинских и русских букв (регистрочувств.), а также символов псевдографики в именах меток/констант;
■ регистронезависимое написание команд, операторов и операндов (MOV A,B | mov a,b | MoV a,B | etc.);
■ логические операции над константами ("И", "ИЛИ", "НЕ", "ИСКЛЮЧАЮЩЕЕ ИЛИ");
■ поддержка двоичной, восьмеричной, десятичной и шестнадцатеричной с/с.
■ ускоренная обработка таблицы меток (методом деления пополам);
■ размер буфера выходного кода до 28 Кб**
■ буфер меток/констант до 1700 шт.**
■ условная компиляция кода;
■ мультифайловая компиляция (разбиение исходного кода на несколько файлов);
■ динамическое подключение текста при компиляции;
■ динамическое подключение бинарных данных (ресурсов) из файлов;
■ заполнение массива константой;
■ множественные ORG;

* в настоящей версии (v2.7) реализована поддержка команд переключения наборов регистров на альтернативные (EXX и EXA), остальные будут добавляться по мере реальной необходимости.

** в настоящей версии буфер таблицы меток и выходного кода единый, расположен в дополнительной странице ОЗУ, в адресном пр-ве 8000..EFFFh, в ТТХ указаны предельные значения каждого параметра, при компиляции реального кода одновременно они недостижимы, и фактические значения будут меньше. В планах добавление возможности работы с расширенным ОЗУ (с потерей квазидиска), в таком варианте буферы таблицы меток и выходного кода будут расположены в разных страницах, и предельные значения будут фиксированные: до 3840 меток и до 60 Кб выходного кода независимо!


Мультифайловая компиляция (файл проекта)

При написании больших программ (около 8 Кб и более) всплывает страничное ограничение Ориона, т.к. тело ассемблера, исходный текст программы, таблица меток и выходной код физически расположены в одной странице ОЗУ и на всё про всё отведено 48 Кб. Для обхода ограничения выбрана стратегия "размазывания" исходного текста программы на несколько файлов (далее - модулей) и размещение таблицы меток с выходным кодом в дополнительной (системной) странице ОЗУ #1. Текстовый редактор Gemini-EDIT в ОС DSDOS позволяет одновременно работать с восемью текстовыми файлами, т.о. работа с "размазанным" исходником не представляет трудностей, при этом ассемблер обрабатывает модули по очереди, загружая в ОЗУ только один (текущий).
Список модулей в порядке их обработки перечислен в специальном файле проекта "*.PR" или "*.P", имя которого указывается в качестве параметра при вызове DASM.

Пример файла проекта MYPRG.PR:


; Исходник программы MYPRG (из двух частей)

PART1.AS ; часть I
PART2.AS ; часть II



Файлы модулей должны находиться на том же диске, где файл проекта.

Файл "*.PR" может содержать следующую информацию:
- имя файла модуля;
- комментарий;
- пустая строка.

Имя файла модуля указывается в формате ОС DSDOS, задание имени диска не поддерживается. Одна строка может содержать только описание одного модуля. Информация после имени файла через пробел игнорируется, что можно использовать в качестве комментария.
Строка с комментарием должна начинаться с символа ";". Пробелы в начале строк, а также пустые строки игнорируются при обработке.
Команды компилятора и операторы языка ассемблера в файле проекта не поддерживаются!
Содержимое файла проекта используется на всех стадиях компиляции, т.о. оно постоянно находится в основной странице ОЗУ и "отъедает" часть буфера текущего модуля.
На каждом проходе компилятор подгружает очередной модуль согласно списку из файла проекта и обрабатывает его, при это на экран выводится имя файла подгруженного модуля.
С точки зрения программиста, разбиение исходного текста на модули никак не влияет на процесс его обработки. Виртуально компилятор воспринимает весь текст целиком.
Т.о. если встречается команда условной компиляции в одном модуле, то её действие также распространяется на последующие. Однако действие команды принудительного окончания обработки (END) распространяется только на текущий модуль!

Компилятор определяет алгоритм работы по расширению рабочего файла, указанного при вызове DASM. Если расширение ".PR" или ".P", то рабочий файл интерпретируется, как файл проекта, в таком случае компилятор ищет в нём файлы модулей. В противном случае рабочий файл интерпретируется, как монофайловый исходник (обычно с расширением ".AS" или ".A") и DASM непосредственно приступает к его компиляции. При загрузке файлов производится проверка формата, и если файл не является текстовым, то работа компилятора прерывается с сообщением: "Ошибка формата".

Рабочий диск задаётся при указании имени рабочего файла при вызове DASM. На этом диске также размещается файл выходного кода, имя которого по-умолчанию формируется компилятором автоматически по следующему принципу: часть имени исходного файла модуля или проекта до точки расширения (но не более семи символов), плюс символ исполняемого файла - "$".
Имя файла выходного кода может быть задано программистом в исходном коде - с помощью команды FILE (см. далее).


Буферизация данных

В процессе работы компилятор создаёт в буферном ОЗУ следующие данные: таблицу меток/констант и выходной код программы. При успешном завершении компиляции выходной код сохраняется в файл.
Буфер расположен в дополнительной странице ОЗУ, в адресном пр-ве 8000..EFFFh. На первом проходе компиляции создаётся таблица меток, а на втором, сразу после таблицы, - выходной код.
Есть две ключевые точки при заполнении буфера:

1) Превышение порога BFFFh
2) Превышение порога EFFFh

В первом случае данные попадают в область атрибутов цвета C000..EFFFh, и чтобы на экране не было мусора, DASM автоматически переключает режим отображения на монохромный.
Во втором случае достигнута верхняя граница буфера и процесс компиляции прерывается, с выводом соответствующего сообщения об ошибке. Синтетический тест показал (https://pp.userapi.com/c841432/v841432728/38894/cZrfLQgz1QQ.jpg), что при данном размере буфера возможна компиляция выходного кода размером до 20 Кб. Предельное значение может варьироваться в зависимости от содержимого реального кода программы и количества используемых меток/констант.
На время использования буфера, на квазидиске во временном файле "~DASM" сохраняется содержимое области драйверов B000..BFFFh ОС DSDOS, по окончании компиляции оно восстанавливается (временный файл удаляется).

Все вышеописанные процессы с буферизацией актуальны для текущей версии, не использующей расширенное ОЗУ квазидиска.


Системы счисления (с/с)

DASM поддерживает следующие с/с:

1) Двоичная (bin)
2) Восьмеричная (oct)
3) Десятичная (dec)
4) Шестнадцатеричная (hex)

Двоичные числовые константы обозначаются символом "b" (или "%") после всех разрядов числа. Допустимые цифры "0" и "1". Незначащие нули в начале можно опускать. Максимальное количество разрядов - 16.

Пример:


MVI A,1111b ; [A] = 0Fh
LXI H,1111000010101110% ; [HL] = F0AEh


Восьмеричные числовые константы обозначаются символом "o" после всех разрядов числа. Допустимы цифры "0..7". Незначащие нули в начале можно опускать. Максимальное количество разрядов - 6.

Пример:


MVI A,17o ; [A] = 0Fh
LXI H,177777o ; [HL] = FFFFh


Десятичные числовые константы записываются в привычном виде и не требуют спец. символов после цифр. Допустимы цифры "0..9". Незначащие нули в начале можно опускать. Максимальное количество разрядов - 5.

Пример:


MVI A,15 ; [A]=0Fh
LXI H,32768 ; [HL] = 8000h


Шестнадцатеричные числовые константы обозначаются символом "h" после всех разрядов числа. Допустимы цифры "0..9" и буквы "A..F" (или "a..f"). Незначащие нули в начале можно опускать. Если число начинается с буквы, то перед ней обязательно требуется указывать незначащий ноль, в противном случае компилятор интерпретирует значение, как метку. Максимальное количество значащих разрядов - 4.

Пример:


MVI A,0Fh ; [A]=15
LXI H,0F800h ; [HL] = F800h


Регистр символа признака с/с также не имеет значения.


Выражения

В качестве числовых значений операндов возможно использование выражений с применением числовых/символьных констант, меток и следующих математических и логических операций:

1) Сложение "+"
2) Вычитание "-"
3) Умножение "*"
4) Деление "/"
5) Побитовая инверсия - "~" *
6) Логическое И - "&"
7) Логическое ИЛИ - "|"
8) Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ - "#"

* в случае слов действует только на младший байт (для исключения ложной ошибки "Значение вне диапазона" при использовании с однобайтовыми операндами), для полной инверсии слова можно использовать конструкцию "Var # FFFFh"

Вычисление производится последовательно слева-направо, без приоритетов. Знак инверсии ставится перед числом/константой/меткой, остальные - между ними. При взятии значения с инверсией, сначала применяется инверсия, а затем выполняет операция.
При вычислении все значения представлены в виде слов, т.о. результат всегда находится в диапазоне 0..65535. Если при выполнении операции происходит переполнение или "уход в минус", то выводится ошибка: "Переполнение", при этом результат вычисления остаётся корректный (с учётом отбрасывания битов за пределами слова). Например, "65535 + 2" вызовет ошибку переполнения, а в результат запишется значение "1". Аналогично, "0 - 1 = FFFFh" .
В случае однобайтовых операндов компилятор проверяет, чтобы значение выражения было в диапазоне 0..255, и при превышении верхней границы выводит ошибку: "Значение вне диапазона". При этом в выходной код записывается значение младшего байта слова результата.

Например:


VAR:EQU 0A8FFh
MVI A,VAR ; здесь компилятор выдаст ошибку-предупреждение, а регистру [A] будет присвоено значение FFh


При попытке деления на ноль компилятор выводит соответствующую ошибку, при этом дальнейшая обработка выражения прерывается, в выходной код записывается результат, посчитанный до момента обнаружения ошибки.

Некоторые примеры выражений:


MVI B,1111b + ~0Fh ; регистру [A] будет присвоено значение FFh

VAR1:EQU 0F800h
VAR2:EQU 0F8FEh
VAR3:EQU VAR2 - VAR1 ; VAR3 = FEh (F8FEh - F800h)
MVI A,VAR2-VAR1 ; ошибки выхода за границы байта не будет, регистру [A] будет присвоено значение FEh (F8FEh - F800h)

VAR4:EQU VAR1 # 800h ; F800h xor 800h = F000h
LXI H,VAR4 | 2FFh + ~VAR3 ; VAR3 or 2FFh = F2FFh, инверсия от VAR3 = 01h, [HL] = F2FFh + 01h = F300h

VAR5:EQU 'a' ; VAR5 = 61h
MVI C,VAR5 & 5Fh ; регистру [C] будет присвоено значение 'A' (41h)
MVI A,'b' & 5Fh ; регистру [A] будет присвоено значение 'B' (42h)

CALL VAR4 | VAR5 ; вызов п/п по адресу F061h (F000h or 61h)
DCR B
JNZ $ - ~VAR3 ; условный переход к предыдущей команде (DCR B)

VAR6:EQU $+1 ; VAR6 = адресу операнда следующей команды (MVI A,0)
MVI A,0

LXI D,VAR6 / 20o ; [DE] = VAR6/16

VAR7:EQU 'A' * 'B' # 0FFFFh ; VAR7 = инверсия от (41h * 42h) = EF3Dh




Команды ассемблера

DASM поддерживает два вида команд: внешние и внутренние. Внешние задаются через параметры командной строки, внутренние - в исходном тексте программы.


Режим трансляции

Команда имеет два варианта: внешний и внутренний.

Внешняя - ключ "/n", внутреняя - MODE n
где n - номер режима (1, 2 или 3)

Приоритет внутренним командам, причём их может быть в тексте исходника несколько, режим меняется динамически на каждом проходе по факту обработки очередной команды MODE. По-умолчанию компилятор использует режим №1.

В режиме №1 компилятор при обнаружении ошибки, выводит на экран причинную строку исходника, под ней текстовое описание ошибки и приостанавливает обработку, продолжение - по нажатию любой клавиши. В планах сделать возможность перехода в текстовый редактор к строке с данной ошибкой.
По окончании компиляции выводится следующая информация:

- кол-во ошибок;
- кол-во меток/констант;
- адреса блока выходного кода и его длина;
- имя и номер рабочей страницы ОЗУ выходного файла.

При выходе в ОС, блокируется возврат в оболочку ОС DSDOS, чтобы можно было проанализировать результат работы.

Режим №2 аналогичен предыдущему, в результаты добавлена распечатка таблицы меток/констант.

Режим №3 аналогичен режиму №1, но при обнаружении ошибок обработка не приостанавливается, и блокировка возврата в оболочку - только при наличии ошибок.

Притормозить вывод сообщений компилятора и распечатку таблицы меток/констант можно нажатием и удержанием любой клавиши, кроме [Esc] - она прерывает компиляцию с выходом в ОС.

Во время компиляции на экран в развлекательных целях выводится символьная анимация процесса =)


Система команд

Внутренняя команда. Синтаксис: CPU type
где type=0 - только команды МП i8080, type=1 - разрешена обработка доп. команд МП Z80.

В режиме "0" разрешена компиляция только команд МП i8080 (КР580ВМ80), доп. команды Z80 вызовут ошибку и процесс компиляции будет прерван. Команда полезна для самоконтроля программиста в случаях написания кода под платформу на МП i8080. По-умолчанию DASM использует режим "0".

Дополнительные команды Z80:

EXX - переключение набора РОН на альтернативный;
EXA - переключение набора регистров PSW на альтернативный (аналог EX AF,AF' в синтаксисе Zilog)

В планах добавление: JR <offs>, JR(cond) <offs>, BIT r,n, SET r,n, LDIR и других.


Имя и номер рабочей страницы ОЗУ выходного файла

Внутренняя команда. Синтаксис: FILE filename [, page]
где filename - имя файла (от 1 до 8 символов)
page - номер рабочей страницы ОЗУ (0 или 1).

Имя файла указывается в формате ОС DSDOS. Указание диска не допускается, файл всегда сохраняется на рабочий диск, где размещеных файлы исходного кода программы.
Номер рабочей страницы ОЗУ необязательный параметр, по-умолчанию его значение = 0.


Рабочая страница ОЗУ выходного файла

Внутренняя команда. Синтаксис: PAGE page
page - номер рабочей страницы ОЗУ (0 или 1).

Задаёт номер рабочей страницы ОЗУ выходного кода (без задания имени файла). Её действие полностью аналогично применению параметра "page" в предыдущей команде.


Вставка (включение) текста в исходник

Внутренняя команда. Синтаксис: INCL filename
где filename - имя файла (от 1 до 8 символов)

Имя файла указывается в формате ОС DSDOS. Указание диска не допускается, включаемый файл должен присутствовать на рабочем диске, где размещен(ы) файл(ы) исходного кода программы.
Команда вставляет в текущую позицию текст из файла, т.о. он обрабатывается в составе основного текста программы.
Отсутствие включаемого файла на диске прервёт компиляцию.
Вставка текста требует наличия соответствующего кол-ва свободной памяти в ОЗУ буфера исходника. При нехватке памяти компиляция будет прервана с ошибкой "Недостаточно ОЗУ".


Вставка блока данных

Внутренняя команда. Синтаксис: DATA filename
где filename - имя файла (от 1 до 8 символов)

Имя файла указывается в формате ОС DSDOS. Указание диска не допускается, включаемый файл должен присутствовать на рабочем диске, где размещен(ы) файл(ы) исходного кода программы.

Команда вставляет в выходной код по текущему адресу данные из файла. Счётчик адресов увеличивается на длину файла.
Отсутствие включаемого файла на диске прервёт компиляцию.
При нехватке памяти в буфере выходного кода компиляция будет прервана с ошибкой "Недостаточно ОЗУ".


Установка счётчика адресов

Внутренняя команда. Синтаксис: ORG addr
где addr - физический адрес (0000..FFFFh, допускается использование выражений).

Команда инициализирует текущий счётчик адресов.
Отличительной особенностью DASM является документированная возможность многократного применения команды в тексте программы!
Первая встретившаяся компилятору команда ORG также определяет адрес посадки выходного файла. Последующие влияют только на адресацию внутри идущего за ними кода. По-умолчанию ORG=0.
Применение нескольких команд ORG позволяет делать вставки кода, предназначенного для работы в других областях памяти.
При вставке такого "внешнего" кода посреди основного, необходимо предварительно сохранять в переменной текущее значение счётчика адресов, а после окончания "внешнего" кода восстанавливать с помощью повторной команды ORG, в качестве параметра которой указывать сохранённый адрес плюс длину "внешнего" кода.

Пример:


ORG 0
; ...ОСНОВНОЙ БЛОК

EXT_CUT: ; адрес окончания (прерывания) основного блока

ORG 0F300h ; ORG "внешнего" блока = F300h

EXT_BEGN: ; адрес начала "внешнего" блока

; ...код "внешнего" блока

EXT_END: ; адрес конца "внешнего" блока

ORG EXT_END - EXT_BEGN + EXT_CUT ; восстановление счётчика адресов основного блока

; ...ПРОДОЛЖЕНИЕ КОДА ОСНОВНОГО БЛОКА



Условная компиляция

В процессе работы DASM отслеживает состояние т.н. флага компиляции. Если флаг сброшен, то обработка кода не выполняется, компилятор в этом режиме воспринимает только команды условной компиляции и команду окончания текста END. Если флаг установлен, то компиляция выполняется в обычном режиме. По-умолчанию флаг компиляции всегда установлен, для его модификации в DASM есть три команды: IF, ELSE и ENDF, действие каждой из которых распространяется до появления следующей.

Задание условия

Внутренняя команда. Синтаксис: IF cond
где cond - значение условия (0 или 1, допустимы любые значения от 0 до 65535).

При cond=0 флаг компиляции сбрасывается (обработка команд выключена), при cond>0 флаг устанавливается (обработка команд включена).
Условие может быть представлено выражением.

Инверсия условия

Внутренняя команда. Синтаксис: ELSE

Изменяет значение флага компиляции на противоположное.

Отмена условия

Внутренняя команда. Синтаксис: ENDF

Устанавливает флаг компиляции, обработка команд включается.


Пример:


Тип_платформы:EQU 0 ; 0 - "Орион-128", 1 - "Орион-ПРО"

PT_KBRD_128:EQU 0F400h
PT_KBRD_PRO:EQU 1Ah
; ...
IF Тип_платформы
IN PT_KBRD_PRO
ELSE
LDA PT_KBRD_128
ENDF

ANI 40h
JZ IsCTRL
; ...




Генерация массивов

Массив одинаковых байтов

Внутренняя команда. Синтаксис: DDB byte, count
где byte - однобайтовая константа* (0..255)
count - количество повторений (1..65535**)

* может быть задана выражением;
** указан теоретический предел, реальное максимальное значение определяется размером буфера выходного кода и размером скомпилированного кода, предшествующего команде.

Команда является как бы комбинацией стандартных DB byte и DS count, она вставляет массив из count-элементов, заполненный константой byte.


Массив одинаковых слов

Внутренняя команда. Синтаксис: DDW word, count
где word - двухбайтовая константа* (0..65535)
count - количество повторений (1..32767**)

* может быть задана выражением;
** указан теоретический предел, реальное максимальное значение определяется размером буфера выходного кода и размером скомпилированного кода, предшествующего команде.

Команда является как бы комбинацией стандартных DW word и DS count, она вставляет массив из count-элементов, заполненный константой word.


Пример кода, написанного с использованием нововведений DASM:


; Классика жанра - "Хэллоу Ворлд!"
; (C) 2017 CoolHacker, 27.10.2017

MODE 2
CPU 0
FILE HELLO$, 0

ORG 0

JMP Старт

INCL BIOS.H
INCL CONIO.H

Старт:
LXI H,MSG_HelloWorld
CALL ShowMSG
JMP EscSHELL

MSG_HelloWorld:DB 13
DDB '<', 10
DB ' Хэллоу, Ворлд! '
DDB '>', 10
DB 0

END





__________________________________________________ __________________________________________________ ____________

Ссылка для скачивания - http://denn.ru/8bit/orion/soft/dasm/ASSM$.ori

► Новый ассемблер будет включён в сборки ОС DSDOS v3.87 (coming soon...) вместо ассемблера «М&S».


Скриншоты интерфейса из эмулятора:

https://pp.userapi.com/c837428/v837428775/6811f/Fcf8DCT0h7M.jpg
* мультифайловая компиляция

https://pp.userapi.com/c837428/v837428775/68117/ixKGp-zuY9g.jpg
* показ ошибки и распечатка таблицы меток


Продолжение тут - http://zx-pk.ru/threads/21984-dsdos-dlya-prk-quot-orion-128-quot.html?p=936060&viewfull=1#post936060

Sancho45
28.10.2017, 19:57
Если была бы шапка с ссылками или хотя бы историей обновлений в первой сообщении этой темы, было бы проще ориентироваться или возможно это привлекло других орионщиков. Я например прочитав там, что данная ось работает только с КНГМД из
из журнала РАДИО №12/1992, стр. 14-15
дальше и не интересовался. О том что новые версии работают и с другими контроллерами узнал из параллельной ветки.

Denn
29.10.2017, 15:29
Sancho45, замечание справедливое. Я давно уже думал о том, что начало темы не отражает текущей ситуации, а информация слишком "размазана" по портянкам. С другой стороны вся инфа взаимосвязана и исторически последовательна, поэтому грохать интро не хотелось бы.
Были мысли каким-то образом "похоронить" эту тему и завести новую, но наверное это не очень хорошо...
Правильнее будет сделать подробную страничку на стороннем ресурсе, а здесь в заглавном посте дать ссылку. Пока актуальная информация коллекционируется тут - vk.com/dsdos_orion (https://vk.com/dsdos_orion).

По КНГМД скорее наоборот: в будущих версиях планирую уйти от штатной поддержки дискет, т.к. сейчас актуальнее НЖМД и SDHC, а код обслуживания дискет занимает место, которого катастрофически не хватает.

Denn
30.10.2017, 12:31
Скажу честно. Прикольная система. Но расширения от слова нуль - тут.

Вот это тоже относится к предыдущему замечанию. Недостаток информации. Есть и расширения, и возможность подмены модулей ОС, установка своих драйверов, взаимодействие модулей и т.д..

Stampmaker
30.10.2017, 21:30
По КНГМД скорее наоборот: в будущих версиях планирую уйти от штатной поддержки дискет

как вариант использовать подключаемый драйвер

Denn
30.10.2017, 22:05
как вариант использовать подключаемый драйвер

Именно так.

Denn
09.11.2017, 01:45
Программирование на Ассемблере DSDOS

Для существенного упрощения процесса написания программ на ассемблере в среде ОС DSDOS, предлагается библиотечная модель организации кода, в которой программный интерфейс ОС и наборы некоторых функциональных узлов оформлены в виде т.н. библиотек, подключаемых к программе с помощью инструкции INCL <file>. Т.о. основной код программы не загромождается лишней информацией, а для обращения к ресурсам ОС и подпрограммам библиотек используются осмысленные имена констант, переменных и меток. Назначение подпрограмм библиотек и список их входных/выходных параметров можно в любой момент посмотреть в самих файлах библиотек, открыв их в редакторе.

Предлагается следующая организация структуры DSDOS-программы:

1. Блок описания (назначение, номер версии, информация об авторе, дата создания/изменения и т.п.);
2. Блок настройки компилятора (режим трансляции, имя и адрес посадки файла выходного кода);
3. Стартовый блок (контроль платформы, среды и версии ОС DSDOS, если требуется);
4. Блок программного интерфейса ОС и подключаемых библиотек;
5. Основной код программы.

В случае многофайлового проекта п.1 можно вынести непосредственно в файл проекта *.PR, пп.2-4 в файл заголовочного модуля, а п.5 в модуль(и) основного кода.
В будущем планируется разработка т.н. AssmBuilder™ - среды разработки, в которой создание кода будет частично автоматизировано, а именно выбор модели организации кода, подключение необходимых библиотек, генерация нужного количества файлов-модулей, контроль версий и т.п. будет выполняться автоматически на этапе создания проекта, на основании выбора опций.
А пока среда для разработки DSDOS-программ оформлена в виде набора файлов библиотек, стартового шаблона будущей программы согласно вышеописанному концепту и пакетного файла для генерации необходимой среды на диске Ориона.

Пакет разработки можно скачать по ссылке - http://denn.ru/8bit/orion/soft/dasm/dsdos_sdk.rar или в OriNET - \OriNET\[DSDOS]\API\

Архив содержит следующий набор файлов (в формате *.ORI):

DSDOS.L - базовая библиотека с описанием точек входа ресурсов ОС DSDOS, используется всеми остальными модулями;
BIOS.L - интерфейс модуля BIOS (версия ОС, установка расширений BIOS);

CONIO.L - интерфейс базовых подпрограмм модуля консольного ввода-вывода;
KBRD.L - интерфейс доп. подпрограмм обслуживания клавиатуры модуля консольного ввода-вывода;
CURSOR.L - интерфейс подпрограмм управления курсором модуля консольного ввода-вывода;
TXTSCR.L - интерфейс дополнительных подпрограмм модуля консольного ввода-вывода (выбор экрана, оконный режим, работа с цветом и др.);
EXTDRV.L - интерфейс установки расширений модуля консольного ввода-вывода;

BOOT.L - интерфейс настройки среды при загрузке ОС (тест аппаратной части, установка доступа дисков и др.);
RAMTOP.L - интерфейс управления/контроля верхней границы ОЗУ пользователя;
CCP.L - интерфейс командного процессора;
ERRORS.L - интерфейс обработки ошибок ОС;
SHELL.L - интерфейс управления оболочкой ОС;

CLBRD.L - интерфейс работы с буфером обмена;
RTC.L - интерфейс контроля системной даты и времени (установка, запрос, синхронизация с сервером, преобразование форматов);
RS232.L - интерфейс работы с последовательными портами и ORI-сервером;

FILE.L - интерфейс подпрограмм работы с файлами и дисками;
DIR.L - интерфейс подпрограмм работы с каталогом;
ROMD.L - интерфейс подпрограмм обслуживания ROM-диска;
FDD.L - интерфейс подпрограмм обслуживания КНГМД;

CMDL.L - библиотека обработки параметров командной строки;

!MKWORK% - пакетный файл для генерации среды разработки на квазидиске ПРК Орион;
!NEW.AS - шаблон новой программы.

Содержимое архива необходимо развернуть в папку на виртуальном диске (или на дискете), открыть диск на Орионе и запустить файл !MKWORK%. В результате, на диске "B:" будет создана среда разработки: файлы библиотек, файл шаблона новой программы и конфигурационный файл для редактора Gemini-EDIT со списком необходимых открытых файлов. Далее остаётся только запустить редактор (по клавише "ЗБ" из оболочки), в котором откроется файл шаблона и можно начинать писать свою программу.


Содержимое файла шаблона новой программы:


; *** Шаблон программы для ОС DSDOS ***
; © 2017 <Автор> /Регион/
; Версия: 1.0a

; Создано: 08.11.2017
; Изменено: 15.11.2017

; *** Настройки компилятора ***

MODE 3 ; режим трансляции (1..3)
FILE NEWPROG$ ; имя выходного файла
ORG 0 ; а/п программы

; *** Стартовый модуль (обязательный) ***

; настройка проверки аппаратной части:
HW_TYPE:EQU 0; 0 - без проверки платформы, 1 - требуется Орион-128, 2 - требуется Орион-ПРО
HW_RAM:EQU 0; 0 - без проверки объёма ОЗУ, 1 - 64 кб, 2 - 128 кб, 4 - 256 кб, 8 - 512 кб требуется;

; настройка проверки версии ОС:
OS_VERSION:EQU 38h; 0 - без проверки, иначе - требуемый номер версии (BCD)

INCL START.L ; размещается в самом начале кода!


; *** Интерфейс п/п ОС DSDOS ***

INCL DSDOS.L
; версия ОС, модуль расширения BIOS
;INCL BIOS.L
; консольный ввод-вывод
INCL CONIO.L
;INCL KBRD.L
;INCL CURSOR.L
;INCL TXTSCR.L
;INCL EXTDRV.L
; загрузка ОС, среда, оболочка
;INCL BOOT.L
;INCL RAMTOP.L
;INCL CCP.L
;INCL ERRORS.L
;INCL SHELL.L
; буфер обмена
;INCL CLBRD.L
; дата/время
;INCL RTC.L
; последовательный порт, ORI-сервер
;INCL RS232.L
; файловая система, диски
;INCL FILE.L
;INCL DIR.L
;INCL ROMD.L
;INCL FDD.L


; *** Библиотеки ***

;INCL CMDL.L


; *** Основной код программы ***

START:

RET

END


В блоке подключения файлов указан полный базовый список библиотек, включение большинства которых закомментировано. Дело в том, что включение библиотек увеличивает выходной код программы, в связи с этим в реальной программе имеет смысл подключать только необходимые.


Со временем список библиотек будет расширяться, а архив по вышеуказанной ссылке обновляться.


Стартовый блок

Важно:
- код стартового блока должен располагаться в самом начале программы (включение модуля START.L), на него будет передано управление операционной системой при запуске программы!
- основной код программы должен начинаться с метки "START", на неё в случае успешного запуска передаётся управление из модуля стартового блока!

Для настройки параметров стартового модуля требуется обязательная инициализация следующих переменных:

HW_TYPE - контроль платформы: 0 - не выполнять, требуется: 1 - Орион-128, 2 - Орион-ПРО;
HW_RAM - контроль объёма ОЗУ: 0 - не выполнять, требуется: 1 - 64 кб, 2 - 128 кб, 4 - 256 кб, 8 - 512 кб;
OS_VERSION - контроль версии ОС: 0 - не выполнять, иначе - требуемый номер версии (в двоично-десятичном виде, например 38h = версия не ниже 3.8).

Стартовый блок осуществляет проверку на запуск программы в среде ОС DSDOS, и в случае отсутствия таковой выводит средствами Монитора ПРК "Орион" сообщение "ПО для ОС DSDOS", по нажатию любой клавиши передаётся управление по адресу F800h.
В случае активации контроля платформы, выполняется проверка с помощью соответствующей функции ОС. При несоответствии выводится сообщение "Требуется ОРИОН-xxx" (вместо "xxx" тип требуемой платформы) и производится выход в ОС.
При активации контроля объёма ОЗУ, выполняется соответствующая проверка (через API DSDOS), и если объём имеющегося ОЗУ ПРК меньше требуемого, то выводится сообщение "Требуется xxx Кб ОЗУ" (вместо "xxx" требуемый объём ОЗУ) и производится выход в ОС.
В случае активации проверки версии ОС, таковая выполняется по принципу "больше или равна указанной". Если текущая версия ОС ниже требуемой, то осуществляется выход в ОС с сообщением "Требуется ОС vX.X".

Если какой-либо контроль неактивирован (параметр равен 0), то в финальную программу не включается соответствующий фрагмент кода проверки.


Имена меток системных библиотек

DASM поддерживает регистрозависимое, а также русскоязычное написание имён меток, т.о. программист может творчески подойти к процессу. Чтобы выделить подпрограммы, переменные и константы системных библиотек, их имена пишутся только заглавными буквами, разделение смысловых конструкций с помощью символа нижнего подчёркивания "_".
Имена системных констант начинаются с конструкции "DEF_...", имена системных переменных с "VAR_...", имена системных подпрограмм по принципу "ОБЪЕКТ_ДЕЙСТВИЕ" (например, FILE_LOAD). Последнее (касательно имён п/п) не является строгим правилом, имена п/п установки параметров начинаются с действия "SET_...", п/п запроса параметров "GET_..." (например, SET_DISK, GET_CURS_POS).


Пример программы (обработка параметров командной строки)

В качестве примера рассмотрим программу, которая анализирует командную строку, и если находит там параметры или ключи, то выводит их на экран в порядке обнаружения (слева-направо). Для упрощения задачи программиста используется готовая библиотека CMDL.L, которая включена в пакет разработки.

Код программы:


; *** Пример обработки командной строки ***
; (C) 2017 Соловьев Д.Н. /Санкт-Петербург/
; 15.11.2017

; *** Настройки компилятора ***

MODE 3
FILE CMDTEST$
ORG 0

; Стартовый модуль (обязательный)

; настройка проверки аппаратной части:
HW_RAM:EQU 0
HW_TYPE:EQU 0

; настройка проверки версии ОС:
OS_VERSION:EQU 38h; требуемый номер версии

INCL START.L


; *** Интерфейс п/п ОС DSDOS ***

INCL DSDOS.L
INCL SHELL.L
INCL CONIO.L


; *** Библиотеки ***

INCL CMDL.L


; *** Переменные ***

VAR_COUNT:DB 0; кол-во параметров +1


; *** Основной код программы ***

START:
; получение кол-ва параметров ком.строки
CALL GET_CMDL_COUNT
RZ
MOV A,B
INR A
STA VAR_COUNT

MainLOOP:
; цикл получения и вывода значений параметров
LDA VAR_COUNT
SUB B
ADI '0'
STA VAR_NUMBER

CALL SHOW_MSG
DB 13,'Параметр #'
VAR_NUMBER:DB 'x = ',0

; анализ очередного параметра командной строки
CALL GET_CMDL_ITEM
RC
JZ PrintKEY

PrintITEM:
; вывод значения параметра
LDAX D
CPI ' '+1
JC NextITEM
MOV C,A
CALL PRINT_C
INX D
JMP PrintITEM

PrintKEY:
; вывод значения ключа "/x" или "-x"
MVI C,'■'
CALL PRINT_C
MOV C,A
CALL PRINT_C

NextITEM:
; проверка на окончание
DCR B
JNZ MainLOOP
JMP SHELL_OFF

END



ОС при успешном запуске программы передаёт ей в регистровой паре [DE] адрес указателя на содержимое командной строки, следующее сразу за именем программы. Если параметры отсутствуют, то по адресу в [DE] будет байт признака окончания строки 00h (в ОС считается признаком конца любой байт со значением меньше 20h). Если пользователь при запуске программы ввёл доп. параметры, то они разделяются символом пробела, а ключи (специальные параметры, указывающие на режим работы программы) начинаются с символа "/" или "-".
При старте с помощью подпрограммы GET_CMDL_COUNT библиотеки CMDL.L мы сначала определяем количество доп. параметров командной строки. Если установлен флаг нуля (<Z>=1), то это означает, что доп. параметры отсутствуют, и мы командой RZ выходим в ОС. В противном случае в регистре [B] у нас содержится общее количество доп. параметров, введённых пользователем, которое мы инкрементируем и сохраняем в переменную VAR_COUNT для последующего вычисления номера очередного обрабатываемого параметра.
Далее идёт главный цикл обработки параметров. Сначала с помощью подпрограммы SHOW_MSG библиотеки CONIO.L выводится сообщение: "Параметр №xx". Затем с помощью подпрограммы GET_CMDL_ITEM запрашиваем очередной параметр командной строки и в зависимости от его типа (ключ или нет) производим посимвольный вывод содержимого параметра (с помощью подпрограммы PRINT_C библиотеки CONIO.L) до символа пробела или окончания строки. Подпрограмма GET_CMDL_ITEM использует указатель в регистровой паре [DE], содержимое которой портить нельзя!
После уменьшаем счётчик количества параметров (в регистре [B]), делаем проверку на окончание и переходим на начало цикла.
В конце обработки всех параметров выходим в ОС через подпрограмму отключения автовозврата в оболочку SHELL_OFF библиотеки SHELL.L. Вызов последней необходим для того, чтобы была возможность увидеть результаты работы программы в случае присутствия доп. параметров в командной строке.



[пост редактируется...]

Denn
10.12.2017, 03:18
Обещанная "предновогодняя" сборка ОС DSDOS v3.87 для обеих платформ: Орион-128 и Орион-ПРО.
Почти год не выкладывал обновления, за это время накопилось некоторое количество изменений. Вот краткий список:

► новый интерфейс загрузчика;
► упразднена возможность загрузки ОС с дискеты;
► добавлен автодетект RAM-дисков (ЭД™ или RAM7) и подгрузка соответствующих драйверов;
► поддержка RTC на базе БИС КР512ВИ1;
► автосинхронизация даты и времени с ORI-сервером при загрузке ОС;
► регистрация платформы на ORI-сервере (требуется сервер v3.12 и выше!);
► отображение даты и времени в оболочке SHELL (при наличии в системе RTC);
► некоторые доработки модуля ввода-вывода (CONIO);
► полная русификация краткой справки по командам ОС (в CCP);
► в версии утилиты FORMAT$ для ПРК "Орион-128" добавлено форматирование диска "E:";
► оптимизация кода всех модулей ОС, ещё большее ускорение вывода символов на экран;
► программная блокировка возврата в оболочку;
► в оболочке добавлена команда быстрого возврата в текстовый редактор, независимо от содержимого панелей;
► также добавлена команда просмотра/редактирования файлов в hex-виде (утилита HEXEDIT$);
► переработан код текстового редактора Gemini-EDIT, ускорены алгоритмы обработки фрагментов текста и поиска/замены;
► изменения некоторых горячих клавиш в текстовом редакторе, добавление новых комбинаций;
► в настройках текстового редактора по-умолчанию настроен шаблон рабочих файлов "*.AS" вместо "*.TXT";
► в сборку включён новый Ассемблер DSDOS вместо "M&S";
► в сборках "Программист" включены библиотеки API DSDOS, портов ввода-вывода и шаблон исходного кода новой программы под DSDOS;
► традиционная оптимизация кода системных утилит, вывод справки с отменой возврата в оболочку;
► в сборки добавлена утилита обслуживания мини-программатора популярных ПЗУ Winbond 27C512 (публикация будет чуть позже).

Из печального: очень хотел, но, увы, физически не успел сделать поддержку HDD и SDHC. С другой стороны, есть чем заняться в следующем году :)


Загрузчик (BOOT)

Вывод информации переведён на API DSDOS, с соответствующими скоростью и красотой :)

https://pp.userapi.com/c834104/v834104973/4f0ce/7-y5g9htbBQ.jpg

Вывод информации загрузчика становится возможным после загрузки модулей ОС, до этого момента в левом верхнем углу экрана штатными средствами ПЗУ Монитора выводятся точки - каждая соответствует одному успешно загруженному модулю. Также средствами монитора выводится сообщения об ошибке, если таковая случится в процессе загрузки модуля.
По-прежнему, во время загрузки ОС производится автодетект аппаратуры, при этом на экран выводится соответствующая информация.
Для ПРК "Орион-128" дополнительно теперь определяется наличие RAM-диска (ЭД™ или быстрый RAM7), подгружается соответствующий драйвер и активируется диск "E:".
В случае обнаружения соединения с ORI-сервером производится синхронизация текущей даты, а в случае наличия в системе RTC - синхронизация их показаний даты и времени с сервером.
Загрузка ОС по-прежнему очень быстрая, поэтому если требуется поизучать выводимую загрузчиком информацию, то нужно нажать и удерживать любую символьную клавишу.


Поддержка RTC

Для обеих платформ теперь поддерживаются аппаратные часы реального времени на отечественной БИС КР512ВИ1.
Для ПРК "Орион-128" RTC должна находиться по адресам F7Bxh, для "Орион-ПРО" по адресам 5xh.
Утилита DATE$ теперь записывает информацию о текущей дате в RTC. Для работы с показаниями времени добавлена отдельная утилита TIME$. После первого запуска RTC (или после фатального провала питания) требуется инициализация с помощью утилиты TIME$, которая программирует RTC определённым образом в формате ОС DSDOS (24-часовой формат, без автоперевода зимнее-летнее, двоичный формат хранения, а также сигнатура DSDOS в CMOS).
В оболочке ОС (SHELL), справа в строке команд/статуса всегда отображаются дата и время (если RTC присутствует и корректно инициализирована).

https://pp.userapi.com/c841337/v841337830/42500/FbqZAvI1Wqc.jpg

Программно RTC доступны через соответствующие функции API DSDOS.


Оптимизация кода

Периодически находятся лазейки для ускорения алгоритмов и уменьшения объёма кода. Всё это крайне актуально на фоне слабых ресурсов ПРК. Повышается комфорт работы (ускоряется отклик системы). Уменьшение объёма кода позволяет добавлять новый функционал.
На этот раз удалось скомбинировать вывод символа с помощью стековых операций с пропуском "лишних" переключений банков ОЗУ, что дало небольшой, но всё же ощутимый прирост скорости.
В текстовом редакторе оптимизация коснулась самых часто используемых во время редактирования алгоритмов стяжки/раздвижки текста, тестирования всего файла на ошибки и поиска/замены фрагмента.
В драйверах RAM-дисков (ЭД™ и RAM7) ощутимо ускорена запись файлов за счёт отказа от пересохранения всего каталога, по факту записывается только один заголовок причинного файла (16 байт).


Изменения в модуле ввода-вывода

В подпрограмме ввода символа (01h или INPUT_KEY в библиотеке CONIO.L) добавились выходные параметры - регистры флагов предустановлены в зависимости от того, были нажаты или нет, часто используемые клавиши: [Enter], [Esc] или [F4]. Это упрощает код обработки в ПО.

Дополнены управляющие коды подпрограммы вывода символа (00h или PRINT_C в библиотеке CONIO.L). Добавлен код табуляции (смещение к ближайшей позиции, кратной восьми). Добавлен код вывода символа из набора курсоров: 1Ch+<код>, где "код" = 00..1Fh; на экран выводится соответствующий курсор как обычный символ (не XOR-наложением).
Добавлен код включения/выключения цветного вывода символов: 1Eh+<код>, где код = 00h (монохромный) или 01h (цветной). Скорректирована отработка управляющего кода 18h из крайнего правого угла, теперь курсор переходит в левый верхний угол экрана (ранее был возврат каретки).

Добавлена новая п/п ввода hex-байта (06h или INPUT_BYTE_HEX в библиотеке CONIO.L).


Управление признаком возврата в оболочку (SHELL)

При запуске программ из оболочки по [Enter], выставляется признак возврата в оболочку при выходе из программы. Это удобно. Но! Бывают ситуации, когда требуется вдумчиво изучить информацию, которую программа вывела на экран в процессе работы и осуществила выход в ОС. Ранее для этого был только механизм удержания [Shift], что иногда не удобно.
Теперь введена возможность программно управлять признаком возврата в оболочку. Например, большинство утилит, будучи запущеные без параметров, выводят на экран справку. В настоящей сборке все утилиты в этом режиме отключают возврат в оболочку.
Программно контроль признака возврата доступен через библиотеку SHELL.L.

В API DSDOS также появилась возможность получить код последней системной ошибки (п/п GET_LAST_ERROR в библиотеке ERRORS.L).


Новый Ассемблер DSDOS

Предлагает более удобный интерфейс, более богатый функционал и позволяет использовать библиотечную модель программирования. Поддерживает мультифайловую компиляцию и позволяет писать ПО большого объёма.
Подробно описан в предыдущем посте.


Текстовый редактор Gemini-EDIT v5.5

Является основным инструментом при написании ПО на ПРК "Орион". В связи с активным использованием "вражеской" клавиатуры PS/2 и навыкам от IBM-совместимых ПК, были адаптированы комбинации горячих клавиш. В основном изменения коснулись ухода от некоторых сочетаний вида [АР2]-затем-<буква> в пользу сочетаний [Ctrl]+<буква>, а также дублирование вариантов сочетаний для работы с буфером обмена (Ctrl+, Shift+[Ins], Shift+[Del], Ctrl+[C], Ctrl+[V]).
Более подробно см. встроенную справку редактора.
Также для повышения комфорта при программировании на Орионе, сделан быстрый возврат в редактор (клавиша [Забой] в оболочке) и шаблон рабочих файлов редактора по-умолчанию - "*.AS". Возможно расширение шаблона к виду "*.A", в таком случае в каталог также будут включены файлы с расширением ".A".
Команда вызова внешней программы из редактора (ранее Ctrl+[G], теперь Ctrl+[P]) ассоциирована с клавишей [P] - (P)roject. В случае компиляции ассемблером файлов проекта, удобно пользоваться именно этой функцией редактора, т.к. при обычном вызове ассемблера всегда подставляется текущий текстовый файл, что в случае редактирования AS-модуля приведёт к неверной обработке. С помощью [Esc]-затем-[P] нужно прописать вызов Ассемблера, а в качестве параметра указать имя файла проекта "*.PR", т.о. независимо от текущего редактируемого файла, компилироваться всегда будет весь проект. Последующие вызовы можно уже делать через [Ctrl]+[P], ввод параметров при этом не потребуется (они хранятся в настройках редактора).
Сочетания [Esc]-затем-[G] и [Ctrl]+[G] изменены на работу с псевдографикой.


Утилита FORMAT$ для ПРК "Орион-128"

Добавлен функционал форматирования RAM-диска "E:". Утилита автоматически определяет тип RAM-диска (ЭД™ или RAM7) и применяет соответствующий алгоритм инициализации.


▼▼▼ Ссылки для скачивания различных вариантов сборок ▼▼▼

Внимание! Архивы были обновлены 28.12.2017 !


Для ПРК ОРИОН-128/512:

ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/8bit/orion/soft/dsdos-128_s64.rar)

ПЗУ ROM-диска объёмом 128 Кб (http://denn.ru/8bit/orion/soft/dsdos-128_s128.rar)

ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/8bit/orion/soft/dsdos-128_s256.rar)

ПЗУ ROM-диска объёмом 512 Кб (http://denn.ru/8bit/orion/soft/dsdos-128_s512.rar)

[I]Поддержка RAM5 (RAM-диск 1024 Кб в составе ЭД™ 1x1, порт #F50xh) и RAM7 (быстрый RAM-диск 1024 Кб в виде платы расширения, порт #F7Fxh) теперь автоматическая, никаких отдельных сборок для каждого варианта не требуется!


Для ПК ОРИОН-ПРО:

"Стандарт", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/8bit/orion/soft/dsdos-pro_s64.rar)
"Стандарт", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/8bit/orion/soft/dsdos-pro_s256.rar)

"Геймер", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/8bit/orion/soft/dsdos-pro_g64.rar)
"Геймер", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/8bit/orion/soft/dsdos-pro_g256.rar)

"Программист", ПЗУ ROM-диска объёмом 64 Кб (http://denn.ru/8bit/orion/soft/dsdos-pro_p64.rar)
"Программист", ПЗУ ROM-диска объёмом 256 Кб (http://denn.ru/8bit/orion/soft/dsdos-pro_p256.rar)

Внутри архивов под объёмы 256 Кб находится два варианта: одним полным образом (файл romdisk.bin) для новой версии ROM-диска, и соотв. кол-вом файлов по 64 Кб (файлы romdiskN.bin) для старого варианта (в составе мультикарты).

makbar
12.12.2017, 20:35
Если была бы шапка с ссылками или хотя бы историей обновлений в первой сообщении этой темы, было бы проще ориентироваться или возможно это привлекло других орионщиков. Я например прочитав там, что данная ось работает только с КНГМД из
дальше и не интересовался. О том что новые версии работают и с другими контроллерами узнал из параллельной ветки.
:v2_dizzy_punk: