А интересовался с конкретной целью - запустится ли VC например на Орионе. Так-то нет никаких причин делать командер несовместимым, для всех его функций стандартных вызовов CP/M вполне достаточно.
Вид для печати
А интересовался с конкретной целью - запустится ли VC например на Орионе. Так-то нет никаких причин делать командер несовместимым, для всех его функций стандартных вызовов CP/M вполне достаточно.
Error404, тогда можно предположить, что для ориона есть коммандер использующий только стандартные функции cp/m, есть такой?
Так то полно СПМ-овских начала-середины 80х. Но они либо однопанельные, либо а-ля Power. Т.е. ничего выдающегося для хотя бы конца 80х годов прошлого столетия.
Есть двух-панельные, но сильнозависимые от драйвера консоли (набора искейп-пследовательностей, которые могут иметь расширения) но таки в остальном работающие через BDOS/BIOS.
Когда-то у меня была коллекция, в т.ч. два вполне системно-независимых (не сильно продвинутых) наковырял я сам. Но потом в силу увлечения красивостями и ускорением от них остались только "Орион-only" версии.
Еще есть кучка работающих прямо по аппаратуре типа Bridge Panels разного авторства.
Зоопарк еще тот, поэтому и интересуюсь - может кто-то написал по стандартам и притом с красивостями.
Смутно помню общесипиэмовские коммандеры (wash, sweep, еще что-то есть), но практика показывает, что при наличии "родных" коммандеров люди в основном пользуются ими, т.к. они удобнее и выглядят более современно и красиво. Наверняка можно написать что-то вроде wash или sweep, только получше, проблема с желающими писать, да и пользоваться.
Собрал РДС по исходникам Виталия...
Для начала, как всё это складывается в один COM-файл, на примере РДС 3.02:Замечу, что загрузчик с КД и шрифты отсутствуют в исходниках, но это не беда -- их легко вытянуть из бинарника. А в остальном, исходники здорово помогают с разбором системы, пусть они даже и без комментариев.Скрытый текст
Код:0100h +-----------------
| rdsh
03F0h +-----------------
| мусор
0400h +-----------------
| загрузчик с КД
0500h +-----------------
| bdos
1300h +-----------------
| bios (b7h)
24C0h +-----------------
| шрифт
2F00h +-----------------
| disp
3806h +-----------------
| мусор
3900h +-----------------
| virt
3D22h +-----------------
| мусор
4300h +-----------------
| vird7
4380h +-----------------
| мусор
4500h +-----------------
| ???
4580h +-----------------
| ccph
4EDAh +-----------------
| мусор
+-----------------
[свернуть]
Вот собранный из исходников (без мусора) вариант РДС 3.02: Вложение 75431
Ну и, как продолжение всего этого, собрал свой вариант РДС. Отличия от предыдущих версий:
- Обращение к НЖМД выполняется в LBA-режиме, как в версии 3.03, только я немного почистил алгоритмы, убрал ставшее ненужным сохранение характеристик НЖМД.
- Переделал формат квази-диска, теперь он полностью совпадает с форматом МДОСа, можно переключаться из одной системы в другую без форматирования, и в то же время сохранён весь функционал РДС. Сделано это методом создания файла RDS.SYS в секторах 180-195 КД, которые используются для размещения системы. Простое решение -- сектора есть, их нумерация на КД не смещена и система не может быть затёрта (пока файл RDS.SYS существует). Тут только один минус: из-за того, что обращение к этой области выполняется мимо дисковой системы, контрольные суммы секторов нарушаются, но не думаю, что это критично, можно будет как-то поправлять потом...
- При запуске системы из COM-файла теперь на КД создаётся/перезаписывается файл COMMAND.SYS, т.е. исключена ситуация, когда выдаётся ошибка, что он не найден системой (при запуске без форматирования КД).
- Загрузчик OS.COM также копируется на КД, но если не выполнялось форматирование, ему даётся имя RDS.COM, чтобы не затирать установленную до этого на КД систему. Если понадобится, то можно потом просто переименовать его вручную.
- Большая часть системы сжата в архив lzsa1, для её запуска используется распаковщик ivagor-а, это позволило уменьшить размер файла с системой с 20 до 14 кБ.
Новая версия РДС 3.04 в архиве с исходниками: Вложение 75432
Теперь в планах добавить в РДС поддержку двух КД... :)
Есть еще пожелание к РДС. Недавно svofski адаптировал сталкера с ДВК и для одной из промежуточных версий нужно было много памяти в cp/m. РДС тут был одним из хороших вариантов, но мешало использование ячейки памяти 000Fh для служебных целей. Хакнул РДС (перенес 000F в 0003), тот сталкер заработал (хакнутый вариант рдс я не выкладывал). Собственно пожелание - убрать служебную ячейку из диапазона 0008-0037h, некоторые сипиэмные программы могут заменять rst группой и желательно такие программы уважить.
Спасибо огромное!!! Это величайший вклад, теперь РДС можно сделать лучшей системой для Вектора!!!
Круто бы было еще заставить при старте искать какой нибудь AUTOEXEC.BAT... Лично мне этого очень не хватает... И еще, ну это уже такое,... индикация процесса копирования в VC.COM. Ну и конечно, да, поддержка второго кваза... На мой взгляд, это все, что нужно поправить в этой системе, в остальном она идеальная!
РДС активно использует эти ячейки, и CP/M тоже:
Сложно будет куда-то распихать все ячейки из этого диапазона, не ломая логику РДС и так, чтобы другие программы для РДС не перестали работать. Да и выше область памяти используется... Может проще запускать без ОС и возвращаться по БЛК-ВВОД?Из доков...
Как известно в ОС СР/М в этой области памяти зарезервированы следующие адреса
0-2 - "горячий" старт ОС,
3 - байт конфигурации,
4 - номер текущего диска и области пользователя,
5-7 - переход на диспетчер функций BDOS,
38h-3Ah - переход на обработку прерывания по кадровому импульсу (в "Вектор 06Ц"),
5Ch-7Fh - зарезервированы для БУФ файла,
80h-0FFh - зарезервированы под область DMA.
В РДС добавлены следующие ячейки:
8-0Аh - переход на диспетчер функций BDOS,добавлен для короткого вызова BDOS - командой RST 1,а также зарезервирован для расширения функций BDOS.
0Bh-0Dh - признак РДС (три байта в КОИ-8 - "РДС"),для того чтобы программа смогла определить (если надо),что она работает именно в РДС.
0Eh - версия РДС,старшая тетрада - номер версии,младшая - номер коррекции.
0Fh - слово включения резидентной части РДС,байт выводимый в порт 10h.В данной версии ОС,РДС находится в нулевой зоне квазидиска,соответственно слово включения будет - 20h.
3Bh - копия порта 10h,используется при обращении к резидентной части РДС.(См. также п.8)
3Ch - слово возврата из резидентной части РДС,после холодного старта и для полной СР/М-совместимости установлено в 23h,но может быть изменено (например,если его установить в 0,то по адресам с 0A000h по 0DFFFh
будут находится 2 и 3 экранные плоскости).
3Dh - коды ошибок BIOS,если при обмене с диском не было ошибок,устанавливается в 0.В основном эта ячейка предназначена для режима работы РДС номер 1.
3Eh - номер текущего режима РДС (биты 0-6),в данной версии использутся только режимы 0 и 1,бит 7 зарезервирован для переключения режимов
3Fh - номер режима обработки ошибок BIOS при обмене информацией с дисками.Номера 0 и 2 используются только в режиме 0 РДС,номер 1 - в любом.Номер 0 (установлен при холодном старте) - ошибки обрабатывает BIOS,вывоводится сообщение типа - "BIOS ERROR,CONTINUE ?",номер 2 - ошибки передаются
для обработки BDOS,номер 1 - BDOS и BIOS игнорируют ошибки,их обработка поручается программе пользователя,в ячейке 3Dh - код ошибки.
40h-5Bh - зарезервированы в режиме номер 1.
Кроме того,в сегменте РДС (то есть в данной версии зона 0) по адресу 0А000h находятся три слова,которые содержат адреса частей РДС интересных для программиста.По адресу 0А000h - адрес начала кода BIOS,0А002h - адрес начала BIOS дисплэя (РК-консоль) и 0А004 - адрес начала знакогенератора.
[свернуть]
Да, кстати, полезная функция, надо будет посмотреть, как туда это внедрить.
Это когда очередь дойдёт до VC... :)
Возможно я поторопился перенести в 0003, но видно, что официально cp/m диапазон 8-37h сам не трогает
Проблема, которую я предлагаю попробовать решить - запуск некоторых сипиэмных программ в РДС и этим сипиэмным программам уникальные РДСные ячейки не нужны, даже наоборот, нужно чтобы РДС туда не лез. По тому, что я видел, критичная ячейка 000F, ее очень желательно переместить за пределы 8-37h, но это конечно не обязательно, всегда при большом желании можно хакнуть.
Погонял системку... Какая прелесть ! Никаких форматирований, переход из одной в другую систему - секунды... Супер ! Спасибо огромное ! В целом, автоекзек нужен только на холодный старт, при горячем старте VC переписанный при помощи .bat файла с рядом нужных файлов на C: запускается сам.
Появилась идея, комплексная. Можно один квазидиск отвести например под T72, а второй под РДС. Ну и в загрузчике чуток поменять, чтобы например при нажатой комбинации F1+F3 для загрузки использовался квазидиск D, RDS а без нажатия стартовала T72 с квазидиска С. Я мог бы ПЗУ загрузчика поковырять, исходники есть.
Не знаю, на сколько практична такая идея, кто как считает ?
Можно проще сделать, если через загрузчик: стандартно грузится файл os.com, а с комбинацией клавиш -- rds.com. И тогда будет не обязательно раскидывать системы по квазам. :)
Тут ещё над одной дилеммой голову ломаю, как лучше сделать два КД, объединённые в один диск, или два отдельных, C: и D:? В первом случае будет удобнее использовать, а во втором легче сделать определение наличия оборудования и автоматическую конфигурацию при запуске...
Сложности есть в реализации и одного и другого варианта, и они уже обсуждались.
Для объединения, стандартная область КС маловата.
Надо думать ещё будет ли второй диск иметь теневую область экранного адресного пространства ОЗУ как стандартный диск, или весь будет доступен для файловой системы. это всё отразится на алгоритмах ДОСа.
Диск D: вроде как "стандартизировали" для НЖМД, или нет ?
Если "не ломать" структуру диска "С:", то просится просто объединить в один диск С: . С размещением каталога и области КС в тех-же адресах, для унификации алгоритмов.
Но могу ошибаться, т.к. со структурой квазидиска работал только в рамках своих программ, работавших с ним (КвазиДиском) без ДОСа.
Вчера пробовал переименовать RDS.COM в OS.COM - все равно получил загрузку T72. Загрузку RDS получил только после ее холодного старта с форматированием. Пробовал в т72 набирать 1 4 RDS.COM - все равно грузится Т72. но когда после получения загрузки RDS304 с квазидиска перехожу в t72 и набираю 1 30 t72-lh.com - она начинает грузиться с квазидиска при перезагрузке. Не разобрался еще с этим.
По мне так и 2 КД норм. Главное чтобы они в доступе были оба.
Кстати, проделал такое - форматирую кд в T72, загружаю RDS304, запускаю там VC3, потом снова запускаю Т72, набираю 8 С: и получаю некоторое количество ошибок на квазидиске в диапазоне ER=02 D=02 SHW=80 OP=04 NS=01 T=B4...EB S=8...1 (для T=B4 S=6...1) A2=CE A1=EC. От раза к разу повторяется, с чем это может быть связано ?
Надо будет глянуть загрузчик, вроде там не обязательно было иметь OS.COM первой записью в директории, значит должно грузить...
Да, я об этом писал -- это происходит от того, что РДС обращается напрямую к памяти КД, минуя BDOS, поэтому контрольные суммы секторов 180-195 (0B4h-0C3h) сбиваются. В РДС также будет та же ошибка при выполнении "test". В этих секторах располагается файл RDS.SYS, так что пока ничего страшного...
electroscat, KTSerg, сейчас глянул -- да, загрузчику, похоже, не только надо наличие OS.COM, но и чтобы он был первой записью. Надо будет улучшить загрузчик, чтобы он просматривал всю директорию. :)
У меня создалось ощущение, что в загрузчике от тимсофт имя не имеет значения, только расположение. Когда меняю имена местами - тоже грузится, не изменно, то что было после форматирования записано. перестает грузиться только когда файл удален.. Точнее не файл удален, а имя удалено из списка. То есть получается, что загрузчик по наличию os.com понимает просто наличие оси на кваздиске, а потом начинает грузить первую запись, не зависимо от того, какое у нее имя.
Мне кажется более универсальный вариант, это написать мультизагрузчик для КД, обзывать его os.com, записывать его на диск первым, а уже он что-бы грузил то-что нужно, не зависимо от того где нужный файл находится на КД.
Перелопатить начальный загрузчик конечно можно, но это не универсальный вариант. Особенно если на реале ещё штатный загрузчик стоит.
KTSerg, да, тоже неплохой вариант.
Отличная идея ! Это типа утилитка такая, которая пишет загрузчик в бут сектор квазидиска, и к нему файл конфигурации, где можно указать систему, которая будет следующей загружаться? Было бы хорошо, чтобы не нужно было в текстовых файлах копаться, как, пока не понимаю. Какой нибудь резидент например написать, чтобы при определенной комбинации клавиш изменял загружаемую систему... ))
Это может быть утилита, которая имеет функционал первичной настройки, и собственной модификации.
Например:
первый старт из под ДОСа;
проверка состояния КД, проверка на необходимость настройки или штатную работу в режиме загрузчика;
запрос у пользователя - какие программы запускать, с каким приоритетом;
модификация своего кода (запись выбранных имен файлов и выбранного приоритета в область данных);
запись себя в начало КД с именем os.com;
копирование на КД выбранных пользователем файлов (ДОСов);
Если запуск был в режиме загрузчика, опросить горячие клавиши, либо загрузить с КД и запустить приоритетный ДОС, либо загрузить альтернативный с заменой приоритета на последующие перезапуски либо без изменения приоритета (разовая замена ДОС).
ну, как-то так... видится...
Я не в курсе, есть-ли особенные требования у РДС, типа набор необходимых файлов и их расположение. Но думаю и этому можно утилиту научить.
KTSerg, я думаю, самое время вспомнить про Вашу программу-мультизапускалку. :)
Для загрузчика этого более чем достаточно, писать на диск там же не надо.
Сложно так сразу сказать, смотря что получится в итоге. Если сделать быстрый "запуск по умолчанию" и вывод полного списка по горячей клавише, например, при удержании УС, то, думаю, да.
Да, это тоже будет плюсом.
Если на Векторе нет автозапуска, то не критично. Получится примерно так: нажимаем БЛК-ВВОД, из ПЗУ грузится Векторовский загрузчик, который находит на КД и загружает "мультизапускалку", и потом ждёт БЛК-СБРОС. Если нажать УС-БЛК-СБРОС, то будет показан полный список всех вариантов, просто БЛК-СБРОС -- запуск проги по дефолту. Ну а если на Векторе есть автозапуск, тогда для тех же целей можно, например, использовать клавишу РУС/ЛАТ, или СС -- на их одиночное нажатие загрузчики не реагируют, вроде...
Свежая версия РДС, бинарник с исходниками: Вложение 75564
Второй квазидиск ещё пока не добавил, пофиксил баги:
- Сделал исправление контрольных сумм секторов под системой на квазидиске, правда, по описанным выше причинам, полностью исправить это невозможно, но количество ошибок по команде TEST (или 8 в МДОС) существенно сократилось.
- Исправил работу команды HDD -- в предыдущих версиях была ошибка: запуск без параметров с любого диска, кроме А: вызывал сброс на 0 предыдущего диска (т.е. если, например, запустить HDD с диска В:, то вместо вывода конфигурации диску А: будет назначена нулевая дискета).
- Исправил ошибку переключения на несуществующий диск (например, D: ), которая приводила к зависанию системы на этой ошибке до полного сброса.
- Дополнил функционал команды TEST, теперь она может исправлять ошибки на квази-диске, для этого нужно к команде добавить ключик R:
TEST RНу и, кроме того, немного ускорил работу программы тестирования КД.
или
TEST C:R- Сделал защиту на запись треков 180-195 квазидиска, в которых расположена система, на всякий случай.
- Дополнил документацию на РДС и приложил её в комплект к системе.
- Немного улучшил работу системы с командной строкой: теперь по нажатию клавиш "вверх" или "вниз" в командную строку копируются символы предыдущей выполненной команды (если буфер не был очищен). Собственно, этой функции мне серьёзно недоставало во всех версиях Векторовских ДОСов, теперь в случае ошибочного ввода легче исправить и повторить последнюю команду.
Дальше, думаю, можно будет сделать второй буфер для запоминания командной строки, может даже изменить работу стрелок "влево" и "вправо" для редактирования команд.
И по поводу освобождения ячейки 15...
Это трогать пока не стал... Технически это сделать легко, но если её переместить, то тогда перестанут работать все программы, написанные под РДС. Их немного, но патчить понадобится все, поэтому пока что эта ячейка пусть останется на месте.
Проблема в 0F, точнее не проблема. Все программы, которые обращаются к функциям РДС, делают это примерно так:
Можете глянуть это, например, в исходниках VC3, там эта конструкция встречается в четырёх местах... В общем, их нужно просто все пропатчить под другой адрес, но пока этого не сделано, думаю, можно пока не перемещать -- это сейчас не так критично.Код:. . .
DI
LDA 15
OUT 10H
. . . ; тут идёт обращение к функциям или ячейкам с параметрами РДС
LDA 3CH ;отключение "сегмента" РДС.
OUT 10H
EI
. . .
И ещё, менять лучше всё-таки на 3Dh, а не на 3Fh -- к этой ячейке система обращается гораздо чаще.
Понятно, тогда снимаю свое предложение, хакнутый рдс для использования в качестве cp/m с большим tpa у меня есть, если что. vc3 я пробовал и в хакнутом досе он работал (проверял только выбор и запуск программы), это интересно, надо будет разобраться, как это получается, но когда-нибудь потом.
Обновил РДС до версии 3.06, изменения такие:
- Добавлена поддержка двух квази-дисков с автоопределением наличия второго КД при старте. Второй квази-диск должен быть подключён на порт 11h, в системе показывается, как диск D:.
- Дополнена документация.
- Содержимое COMMAND.SYS в бинарном файле теперь хранится тоже в упакованном виде, что ещё немного уменьшило его размер.
- Исправлены найденные ошибки.
Работу протестировал в эмуляторе и на реальном Векторе -- критических ошибок нет, вроде, но есть один глюк, не пойму с чем связанный: на Векторе иногда не работает фиксация состояния "РУС/ЛАТ" и "СС" (маленькие/большие буквы), т.е. нажимаешь кнопку РУС или СС с любой буквой -- переключение есть, а одиночное нажатие как будто не срабатывает. А потом, через некоторое время, всё начинает работать... В эмуляторе такого эффекта нет вообще.
Кто хочет протестировать, вот архив с бинарником и документацией: Вложение 76997
Исходные коды к РДС тоже выкладываю, только я решил сделать форк исходникам Виталия Вьюнова на гитхабе, поэтому их теперь можно забрать там: https://github.com/ImproverX/RDS
Очередное обновление РДС, основных изменений, по сути, два:
- Команда ОС "TEST" дополнена ключиком "F" для форматирования квази-диска.
Т.е. для того, чтобы отформатировать диск D: надо ввести команду "TEST D:F". Можно таким же методом отформатировать и диск С:, и даже система после этого некоторое время останется работоспособной, но делать это не советую, т.к. будут удалены все файлы, в том числе "COMMAND.SYS" и "RDS.SYS", необходимые для нормального функционирования, лучше отформатировать диск запуском с нажатой кнопкой "УС".- Добавлен поиск и исполнение файла AUTOEXEC.BAT при старте системы. Файл ищется сначала на квази-диске C:, если там нет, то на диске A:.
Проверил в эмуляторе и на железе -- глюков нет, вроде. Архив с бинарником и документацией: Вложение 77348
Исходные коды к РДС, как и прежде, можно забрать на гитхабе: https://github.com/ImproverX/RDS
100%, это есть в новой Т72 - и это очень удобно, если доступен на диске C то значит система уже работала, и работа прожолжается, это мега удобно, а для РДС - это удлобно в тройне, потому что много чего нужно копировать на С, типа файловый менеджер, редактор и т.д. Я вообще все это батником запускал сручную, теперь, благодаря Improver все это будет стартовать из autoexec.bat. Огромное спасибо Improver !!!
- - - Добавлено - - -
Было бы круто, если бы в VC для РДС можно было на второй квазидиск попадать, этого не хватает. Но в целом, и без этого системка просто идеальная со всеми последними изменениями !!!