А интересовался с конкретной целью - запустится ли 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, но это конечно не обязательно, всегда при большом желании можно хакнуть.