Как тяжело портировать на что-то ещё?
P.S. Партнёр надо бы в РК-86 переместить, нет?
Как получить CP/M для своего железа
Moderator: Shaos
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Как получить CP/M для своего железа
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Как получить CP/M для своего железа
Особо ничего сложного. Исходники есть.Shaos wrote:Как тяжело портировать на что-то ещё?
P.S. Партнёр надо бы в РК-86 переместить, нет?
Больше подстраивал под имеющийся ассемблер.
И распределял код/данные по секциям.
И ручками инициализировать данные в ОЗУ,
чтоб работало в ПЗУ.
Ну и конечно драйвер карточки (а какая схема
адаптера так и не понял).
Нет - перемещать не надо - эта ветка про CP/M,
а у меня есть Партнер. Заодно и драйвер
карточки сделал.
-
- Doomed
- Posts: 585
- Joined: 19 Feb 2017 03:46
- Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Если МНИП, SUBMIT работает с оригинальным CCP и BDOS. XSUB тоже. BDOS не смотрел, но ваш CCP похоже не оригинал (в оригинале идут 2 JMP-а, затем буфер ввода, а у вас после двух JMP-ов сразу какой-то программный код.aav8 wrote:SUBMIT так и не заработал
Возможно эти сделанные американским любителем исходники CCP и BDOS из какого-то американского компьютера у которого в дистрибутив входили свои SUBMIT, XSUB и MOVE (который тоже кстати жёстко привязан к конкретному коду CCP и BDOS, т.к при перемещении кодов на другие адреса корректирует адреса всех переходов). Если изменить хоть байт в оригинальном CCP или BDOS, то MOVE перестаёт работать.
И зачем в исходнике постоянно чередовать сегменты данных и кода? Например, уже в первом же фрагменте CCP стоит процедура, причём открытая (т.е не оканчивающаяся RET-ом или JMP-ом) с указанием конца сегмента, а далее блок DS-ов для переменных параметров и раб.ячеек, затем снова продолжение кода. Компилятор конечно сгруппирует одноимённые сегменты вместе, но смотреть такой листинг неудобно.
И зачем так сложно транслировать CP/M (из более, чем 20-ти файлов). Достаточно 4-х файлов кода - стартёр и 3 стандартных для CP/M модуля: CCP, BDOS и BIOS. Плюс файл макро-определений (обычно MACRO.INC) и для гибкости в роли HEADER-а - INCLUDE-файл, который подставляется в каждый модуль и задаёт все глобальные параметры (чтобы менять их приходилось только в одном месте, а не во всех отдельно транслируемых файлах). Из make-файла видно насколько убог инструментальный пакет AVSIM85/AVLINK. CP/M-компилятор Microsoft M80/L80 освобождает от 80% этих операций (для M80, чтобы работал TSR-эмулятор CP/M надо иметь Win XP).
Не нашёл в вашем коде исходника драйвера VT52 для Партнёра. Вряд-ли он в вашем Партнёре уже прошит в ROM-BIOS-е (а загрузить внешний драйвер не удастся, если не предусмотрены вектора для его загрузки в CP/M-BIOS или ROM-BIOS). А без VT52 не будут работать экранные программы, даже повсеместный WM.COM для редактирования текстов. А используя строчный редактор ED.COM, у Вас возникнет желание повеситься уже через 10 минут его использования.
И, естественно, поимев CP/M для какого-то железа, первым делом пишется нортон. Который, кстати, можно писать корректно, т.е без залезания в железо используя только вызовы CP/M-BDOS и CP/M-BIOS или не корректно (тогда, естественно, можно лезть программой прямо в экран, иметь цвет, сканировать матрицу клавиш напрямую через ППА, выводить музыку через ВИ53, лезть программой прямо в дисковый привод и т.п).
Last edited by barsik on 09 Jun 2020 01:11, edited 2 times in total.
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re:
Скорее всего так оно и есть.barsik wrote:Если МНИП, SUBMIT работает с оригинальным CCP и BDOS.
CCP и BDOS я подстраивал, чтоб псе работало сразу в ПЗУ.
А для SUBMIT часть данных вытащил перед ПЗУ - но не прокатило...
Мне это кажется очень удобным - код и рядом с ним описаны данные для этого кода.barsik wrote:И зачем в исходнике постоянно чередовать сегменты данных и кода?
А если нужен отдельный код инициализации - его можно пихнуть в отдельный сегмент.
Который тоже будет рядышком описан.
Линкер все это перетасует как надо.
Это мои добавки... Редактировать файлы на несколько тысяч строк не очень удобно.barsik wrote:И зачем так сложно транслировать CP/M (из более, чем 20-ти файлов).
Пока с этим и не заморачивался.barsik wrote:Не нашёл в вашем коде исходника драйвера VT52 для Партнёра.
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Как получить CP/M для своего железа
вот получилось сделать диск B: типа сетевой.
можно без проблем копировать файлы между дисками.
конечно первым делом запустил M80 для файла ~20К.
время на трансляцию (сетевое устройство) ушло примерно 1м40сек.
тот-же самый файл на карточке обработался за 1м30сек.
конечно примерно.
MBASIC не захотел работать на сетевом устройстве.
он использует запросы произвольного доступа к файлам, которые я еще и не делал.
на карточке (где файловая система CP/M) все работает ok'.
так-же и SUBMIT (точнее $$$.sub) нормально работает
на файловой системе CP/M.
CCP в пакетном режиме конкретно лезет в FCB и правит байты s1 s2.
Заодно нашел косячек (а может недоработку) в SUBMIT.COM.
Файл $$$.SUB создается на выбранном диске а не диске A:,
откуда он должен запускаться.
... примерно вот-так...
будем копать дальше
можно без проблем копировать файлы между дисками.
конечно первым делом запустил M80 для файла ~20К.
время на трансляцию (сетевое устройство) ушло примерно 1м40сек.
тот-же самый файл на карточке обработался за 1м30сек.
конечно примерно.
MBASIC не захотел работать на сетевом устройстве.
он использует запросы произвольного доступа к файлам, которые я еще и не делал.
на карточке (где файловая система CP/M) все работает ok'.
так-же и SUBMIT (точнее $$$.sub) нормально работает
на файловой системе CP/M.
CCP в пакетном режиме конкретно лезет в FCB и правит байты s1 s2.
Заодно нашел косячек (а может недоработку) в SUBMIT.COM.
Файл $$$.SUB создается на выбранном диске а не диске A:,
откуда он должен запускаться.
... примерно вот-так...
будем копать дальше
-
- Doomed
- Posts: 585
- Joined: 19 Feb 2017 03:46
- Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
aav8 wrote:SUBMIT (точнее $$$.sub) нормально работает на файловой системе CP/M.
Не совсем так. Я имел ввиду, что связка SUBMIT-XSUB работает лишь при стандартном коде CCP и BDOS. А SUBMIT-у отдельно без разницы код CCP и BDOS. SUBMIT просто создаёт файл, представляющий собой нарезку строк командного файла с шагом в 128 байт. А вот XSUB уже лезет в код DOS, делая перехват ввода при работе программ.aav8 wrote:Скорее всего так оно и есть.barsik wrote:Если МНИП, SUBMIT работает с оригинальным CCP и BDOS.
Так он укорачивает файл на 128 байт, потому что строки в файле $$$.SUB нарублены в обратном порядке. Не намного сложнее было бы использовать нормальный текстовый формат и сдвигать при обработке текст на одну строку. Это у них пережиток от ранних версий, что должны были работать при ОЗУ 16К, отчего обязательно требовалось уместить CCP в 2 кб.aav8 wrote:CCP в пакетном режиме конкретно лезет в FCB [файла $$$.SUB] и правит байты s1 s2.
Это уже левизна, точнее исправление левизны оригинала. Оригинальный SUBMIT как раз и создавал $$$.SUB всегда на диске A:. Что невыгодно из соображений дискозапильности. В частности, при использовании SUB-механизма для автонастройки DOS при загрузке, что есть в развитых адаптациях CP/M (обычно есть обработка файла PROFILE.SUB, например, так в ОС SCP Роботрона-1715). Также в ранних версиях адаптаций CP/M для ОРИОНА обслуживание файла AUTOEXEC.SUB при загрузке DOS делалось традиционно по CP/M-овски с использованием SUB-механизма.aav8 wrote:Заодно нашел косячок (а может недоработку) в SUBMIT.COM. Файл $$$.SUB создается на выбранном диске, а не диске A:, откуда он должен запускаться.
Для чего стартовый модуль CP/M считывал с дискеты файл AUTOEXEC.SUB, из него создавал файл $$$.SUB и записывал его на диск A:. Это приводило к дискозапильности дискет и у системной дискеты нельзя было заклеить прорезь защиты от записи. А любая запись чревата дохлотой, т.к переписывается каталог.
Из этого был выход лишь, если в системе был эл.диск и была возможность назначить его диском A:. Или, если в DOS не предусмотрена возможность эл.диск переназначить на A:, то достаточно изменить CCP, чтобы искал $$$.SUB на другом диске или на текущем диске (а более грамотно, чтобы искал сначала на диске A:, потом на B:), соответственно изменяется и SUBMIT. Такие трюки позволяли использовать SUB-механизм не запиливая системную дискету, так что в ней можно было заклеить прорезь защиты от записи.
Позднее я отказался от ретро методов обслуживания командных файлов, чтобы совсем не было записи на дискету. Для этого в поздних адаптациях CP/M я применял тимплет и автозамену консольных кодов. Тимплет символов это буфер в который можно загрузить текст. И при чтении с консоли этот текст будет последовательно выдаваться строка за строкой. А автозамена кодов полезна не только, чтобы нажатием одной (например функциональной) клавиши выдавать ключевые команды (также как в SCP настраиваемые пользователем), но это заменяло XSUB.
А сама XSUB CP/M у меня никогда не работала.
PS. При оценке быстродействия обмена с диском по времени трансляции информативнее сравнение с временем трансляции на реальном DD-дисководе. Сетевой диск в CP/M это круто. Возможно это даже впервые в России.
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Как получить CP/M для своего железа
А подскажите/напишите/посоветуйте/а может уже есть/или сам нарисую
некий тест для ОС CP/M
что-бы можно было проверить все основные вызовы системы.
Особенно файловые операции.
Есть мысля, файловую систему CP/M вынести в отдельный модуль.
А в самой ОС оставить только ОС.
А собственно файловые системы сделать как подключаемыми модулями.
Планирую ОС чисто сетевую - т.е. все файлы будут на сервере.
И хочется добиться 90++ совместимость со стандартной ОС.
В принципе оно все работает (сервер немного попозже выложу).
И пока все влезает в 8К (7989 байт).
CCP ~ 1800 байт
BDOC ~ 3000 байт
Если из системы убрать все не сильно нужное все поместится в 4К.
Или даже в 2
И диски пилиться не будут
некий тест для ОС CP/M
что-бы можно было проверить все основные вызовы системы.
Особенно файловые операции.
Есть мысля, файловую систему CP/M вынести в отдельный модуль.
А в самой ОС оставить только ОС.
А собственно файловые системы сделать как подключаемыми модулями.
Планирую ОС чисто сетевую - т.е. все файлы будут на сервере.
И хочется добиться 90++ совместимость со стандартной ОС.
В принципе оно все работает (сервер немного попозже выложу).
И пока все влезает в 8К (7989 байт).
CCP ~ 1800 байт
BDOC ~ 3000 байт
Если из системы убрать все не сильно нужное все поместится в 4К.
Или даже в 2

И диски пилиться не будут

-
- Doomed
- Posts: 585
- Joined: 19 Feb 2017 03:46
- Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Вряд-ли у кого из любителей отечественных ретро-компов была такая задача. Но текстовые редакторы, базы данных и компиляторы ассемблера и ЯВУ используют большинство функций BDOS и некоторые функции CP/M BIOS (в BIOS рекомендуется не лезть без нужды). BIOS вызывают программы работающие низкоуровнево (те, что используют альтернативный ввод/вывод, тестируют диски или лезут в каталог посекторно) и есть несколько задач DOS, которые или без вызовов п/п-м BIOS вообще не решить или так получается проще или быстрее. При тестировании DOS надо имитировать и дохлоту. Обработку дисковых ошибок (4 вектора ошибок на BDOS+3) сохранили? Почти все профессиональные программы подменяют процедуры обработки ошибок на свои.aav8 wrote:А подскажите/напишите/посоветуйте/а может уже есть/или сам нарисую некий тест для ОС CP/M, что-бы проверить все основные вызовы системы.
Похоже реализация сетевого диска родственна эмуляции дискеты в эмуляторах CP/M. В эмуляторах CP/M для MSDOS почти всем функциям CP/M находятся аналоги в MSDOS. Кроме доступа к Allocation Table (таблице занятости блоков), которой в MSDOS нет. А в эту таблицу как-раз лезут грамотные программы, которым перед записью файла хочется узнать, что на диске ещё есть место для его записи. И проще всего это проверить посмотрев число свободных блоков в Allocation Table.
Альтернатива этому (хотя и совместимая с эмуляторами, но тормозная) - это сканировать каталог и суммировать размеры всех файлов и (зная из параметра в DPB размер всего диска в блоках) высчитать сколько блоков свободно на диске. И даже эта задача быстрее решается низкоуровнево - каталог быстрее сканируется функциями BIOS, а не BDOS (это в реале получается раз в пять быстрее). А т.к в плохих эмуляторах для MSDOS нет эмуляции каталога CP/M со всей его структурой, то в таких эмуляторах вполне грамотные CP/M-программы не работают. Это я к тому, что в сетевом диске лучше повторять структуру CP/M-диска, а не хранить файлы как-то иначе.
Не ясно о чём речь. Может быть под "только ОС" имеются ввиду лишь те функции BDOS и те п/п-ммы BIOS, что работают с дискетой. Т.е "в самой ОС" останутся только консольные функции BDOS и консольные п/п-ммы BIOS. А если речь о вынесении в отдельный модуль аппаратозависимых процедур, так они в CP/M вроде бы и так отделены в CP/M BIOS (или Вы это изменили смешав в своей реализации код BDOS и код процедур низкого уровня вместе?).aav8 wrote:Есть мысля, файловую систему CP/M вынести в отдельный модуль. А в самой ОС оставить только ОС. А собственно файловые системы сделать подключаемыми модулями.
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re:
Да, конечно. Стараюсь добиться максимальной совместимости.barsik wrote:Обработку дисковых ошибок (4 вектора ошибок на BDOS+3) сохранили?
Да примерно так и есть.barsik wrote:А если речь о вынесении в отдельный модуль аппаратозависимых процедур, так они в CP/M вроде бы и так отделены в CP/M BIOS (или Вы это изменили смешав в своей реализации код BDOS и код процедур низкого уровня вместе?).
Т.е. получается не драйвер устройства, которое умеет читать/писать
сектора, а более интелектуальное устройство, которое умеет работать с файлами.
А как устроены файлы система не знает.
Такая ОСь у меня была в начале века.
Занимала всего примерно около 3-х К. И конечно ни с чем не совместимая.
А сейчас запускается basic, fortran, а вот ada компилить
на сетевом диске не хочет (а на карточке все нормально) - может
конечно у меня какой-то косяк с сервером. Только вчера вечером попробовал.
Наверное самое идеальное в качестве устройства использовать
какой-нибудь PIC с PSP и на него переложить все файловые функции.
... примерно такие мысли ...
PS:
Вот и ADA заработала - на сервере не хватало файлов...
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Re: Как получить CP/M для своего железа
прикрутил свою CP/M к РК86 (вместо ВВ55 прописал В51).
почистил BDOS.
Все влезло в чуть больше 4K.
Довольно сносно работает (M80) - 700 строк за примерно минуту.
MBASIC сказал что всего свободно 482 байта.
Можно еще сократить почти в 2 раза - сделать CCP выгружаемым...
почистил BDOS.
Все влезло в чуть больше 4K.
Довольно сносно работает (M80) - 700 строк за примерно минуту.
MBASIC сказал что всего свободно 482 байта.
Можно еще сократить почти в 2 раза - сделать CCP выгружаемым...