PDA

Просмотр полной версии : Железо под CP/M-80



Atari
20.03.2010, 00:15
Доброго времени суток!

Покопавшись на сайтах посвященных CP/M, перечитав несколько веток на этом форуме, решил таки завести сводную ветку в которой хотелось бы свести всю информармацию с требованиями для построения/адаптации компьютера для работы под CP/M.

Понятно, что внизу должно быть ОЗУ, с адреса F800h ПЗУ...

Великий ALL давайте уточним конкретные требования.

Eugen
20.03.2010, 01:13
Atari, если я не ошибаюсь то озу должно быть с 0-100н . это таблица векторов. остальное уже не важно. векторы описывают структуру где что находится.

Ewgeny7
20.03.2010, 14:43
Нужно, чтобы адреса 0000 - 3FFF были доступны как ОЗУ. На некоторых клонах (Скорпион, к примеру) это делается программной блокировкой ПЗУ. Там СР/М работает.

Atari
20.03.2010, 20:05
с ОЗУ кажется понятно, а остальное?

Anykey
20.03.2010, 20:21
На Profi порты дисковода в режиме
CP\M открыты для прямого доступа

Вместо ПЗУ включается ОЗУ, а
в старшие адреса или из ПЗУ
или с диска грузятся процедуры ввода
вывода, ПЗУ точно по старшим адресам
не включается

Atari
20.03.2010, 20:34
господа,

давайте сначала, что мне надо сделать с Радио-86РК чтоб запустить на нем CP/M ?

Eugen
20.03.2010, 20:45
Atari, для начала написать БСВВ ( Базовую систему ввода\вывода) чисто для РК-86. может она и написана, я не в курсе

Atari
20.03.2010, 20:48
Atari, для начала написать БСВВ ( Базовую систему ввода\вывода) чисто для РК-86. может она и написана, я не в курсе

Хорошо, где найти почиталку по написанию БСВВ ?

Eugen
20.03.2010, 21:11
В журнале про ЮТ 88 была статейка про СР\М. там адреса расписаны, что где. в качестве БСВВ можно использовать монитор. но еще нужен загрузчик , который все по векторным адресам раставляет

---------- Post added at 20:11 ---------- Previous post was at 19:53 ----------

то что это будет мазахизм, я не сомневаюсь. А зачем тебе это?

Atari
21.03.2010, 01:17
CP/M живую никогда не видел...

еще кто-то упоминал о RTC

???

Ewgeny7
21.03.2010, 10:32
еще кто-то упоминал о RTC
Необязательно.

Vadim
24.03.2010, 13:15
ПЗУ может располагаться и с 0000 (при включении питания, иначе ведь никак) главное его потом отключить. А вообще CP/M не нуждается в ПЗУ, все может размещаться в ОЗУ. Для запуска версии 2.2 нужно написать свой BIOS который будет выполнять требуемые функции. Адрес начала BIOS выбирается программистом. Т.е. как напишете так и будет. В разных машинах по разному. Модуль BDOS компилируется уже с учетом созданного модуля BIOS потом делается загрузчик. Скажу сразу что это очень специфичная задача и нужен опыт для того чтобы все это провернуть. С одной стороны очень легко, с другой - трудно. Документация которая есть в инете местами неточная и неполная. Много людей (особенно тут на форуме) вообще много чего не знают и пишут ерунду. Наиболее правильные описания можно взять на сайтах с оригинальными книгами по CP/M но читать их надо будет на английском. Были брошюрки для Профи и АТМ, в них есть инфа.

---------- Post added at 15:08 ---------- Previous post was at 15:02 ----------


Atari, если я не ошибаюсь то озу должно быть с 0-100н .

Вот пример полной чуши. И с диапазоном адресов и с назначением. С 0 по 100h находится так называемая "системная" страница ОЗУ, в которой размещаются некоторые сегменты кода и данных необходимых для работы системы. С адреса 100h начинается область транзитных программ (TPA) в которую и грузятся исполняемые файлы.
С адреса 0 код команды перехода на горячий старт системы
С адреса 5 код команды для вызова деспетчера функций BDOS
по адресу 1 содержится адрес с корторого начинается керналь BIOS 2.2
по адресу 6 содержится адрес с которого расположен модуль BDOS (но как правило модуль BDOS+6,
С адреса 80h (и размером 80h) расположен буфер обмена с диском по умолчанию
с адреса 5Ch & 7Ch после запуска программы сидят FCB сформированные из 1-го и 2-го параметра соотвественно, а с адреса 80h остаток командной строки
........................
И т.д. и т.п. прежде чем давать советы потрудитесь почитать документацию. А то что там какие то "векторы" никому ничего не говорит.

---------- Post added at 15:15 ---------- Previous post was at 15:08 ----------


И с диапазоном адресов и с назначением.

ОЗУ в ЦПМ компе как правило занимает все 64К адресов. В верхней части сидит система (или модуль который осуществляет вызов реального BDOS с передачей ему параметров и обратно).

Atari
24.03.2010, 20:15
С 0 по 100h находится так называемая "системная" страница ОЗУ, в которой размещаются некоторые сегменты кода и данных необходимых для работы системы. С адреса 100h начинается область транзитных программ (TPA) в которую и грузятся исполняемые файлы.
С адреса 0 код команды перехода на горячий старт системы
С адреса 5 код команды для вызова деспетчера функций BDOS
по адресу 1 содержится адрес с корторого начинается керналь BIOS 2.2
по адресу 6 содержится адрес с которого расположен модуль BDOS (но как правило модуль BDOS+6,
С адреса 80h (и размером 80h) расположен буфер обмена с диском по умолчанию с адреса 5Ch & 7Ch после запуска программы сидят FCB сформированные из 1-го и 2-го параметра соотвественно, а с адреса 80h остаток командной строки ........................

Что такое PSP у MS-DOS и что такое FCB в нем я еще помню... хотя Джордейна уже отнес в ближайшию библиотеку...

---------------

есть конкретный вопрос: в CP/M для ЮТ-88 зачем-то используется "дискета" в 26 секторов, 77 дорог, по 128 байтов на сектор...

Это что за фича? стандарт 8" ?

Vadim
25.03.2010, 08:59
В CP/M-80 не совсем PSP, т.е. не в том виде в каком оно появилось в ms-dos и не совсем то там лежит.



есть конкретный вопрос: в CP/M для ЮТ-88

Это скорее всего формат дискеты от некоторого реального компа. Объяснять долго очень, вкратце скажу, что дисководы были не всегда 80 дорожек и секторы у первых дисководов были и по 128 байт тоже. Когда создавался CP/M именно такие дискет ы и были в ходу. Файл состоял из секторов, которые позднее стали называть "записи" по 128 байт. Т.е. секторы 128 байт стали эмулировать, реально размер сектора в ЦПМ был 512-1024 байт. На Роботроне 1715, Профи и Корвете используется следующий формат диска:
1)Физический: 80 дорожек, 2 стороны, 5 секторов на дорожку (1024 байт сектор)
2)Логический формат. Размер блока 2Кб (16 записей по 128 байт), размер директории 2 блока (128 описателей файлов). Кроме того, у Профи начиная с CBIOS4.xx исчезли системные дорожки.

Т.е. те кто переносил ЦПМ на ЮТ-88 или не смогли реализовать BIOS как надо и использовали уже готовый чуть чуть его видоизменяя или старались сделать совместимым дисковый формат с некой ЦПМ машинкой. (Сейчас я не припомню в каком именно ыбл такой формат)

Error404
25.03.2010, 09:19
Кроме того, у Профи начиная с CBIOS4.xx исчезли системные дорожки.


Кстати, очень спорное решение. Ведь у многих CP/M форматов на системных дорожках хранился DPB, что позволяло настраиваться на любой "нестандартный" формат дискеты автоматически - просто поменяв дискету и нажав ^C.

Помню, как для того, чтобы прочитать диски Профи или Роботрона на системную дорожку записывал DPB, а позже даже драйвер делал, который перехватывал обращение в track0:sector1 и "подменял" в этом секторе область DPB на корректную. Но корректную приходилось вычислять самому, что не есть хорошо.

Vadim
25.03.2010, 10:49
Кстати, очень спорное решение.

Не то слово. Хоть стандарта и не было, но как у +3 первый сектор можно считать как бы бутсектором с параметрами диска. Но, было сделано как сделано. ни ещё номер сектора 5 на 0-й дорожке 0-го цилиндра заменили на 9, что бы сделать автостарт из TR-DOS (зачем я не понимаю, загрузчик из ПЗУ предпочтительнее имхо).

Atari
25.03.2010, 20:21
у многих CP/M форматов на системных дорожках хранился DPB

можно с этого места поподробней?

Error404
25.03.2010, 21:09
можно с этого места поподробней?

К примеру на Корвете (не знаю откуда было заимствовано там, но наверняка передрали) и его CPM-последователях (Орион, Специалист) в первом секторе дискеты со смещением +10h расположен DPB-DiskParametersBlock, в котором закодирована емкость дискеты, размер каталога, количество системных дорожек, размер логического блока и т.д. Во вложении документ которым я обычно пользуюсь в качестве подсказки по CPM и DPB в частности.

Atari
25.03.2010, 21:49
А бинарники от корвета есть?

PS. И может чего еще?

Error404
25.03.2010, 22:59
От Корвета у меня ничего нет.

Atari
26.03.2010, 00:43
из почиталки в #18 следует, что все консольные чудеса должны быть 7 битными.
Значит для построения машинки достаточно 8080, 8257, 8275, W24512, 2к ПЗУ... ну и обвязка...

Eugen
26.03.2010, 00:50
Вот пример полной чуши. И с диапазоном адресов и с назначением. С 0 по 100h находится так называемая "системная" страница ОЗУ, в которой размещаются некоторые сегменты кода и данных необходимых для работы системы.


И т.д. и т.п. прежде чем давать советы потрудитесь почитать документацию. А то что там какие то "векторы" никому ничего не говорит.


вход в BIOS осуществляется посредством вектора
перехода, размещенного в определенной ячейке. Адрес первого
вектора (холодный старт системы) определяется как 16-битный адрес,
расположенный в ячейках ОЗУ 0001, 0002h минус 3 (байты 0h..2h ОЗУ
содержат команду JMP WBOOT).

Вектор переходов имеет следующий вид :

JMP BOOT ; холодный старт системы

отож, и я говорю: курить всем маны нужно

esl
26.03.2010, 01:08
есть исходники биоса для cpm для корвета
ищите в теме по корвету тут на сайте
есть ссылка на рапиду с архивом софта - оно там есть

а вообще по адаптации,
исходники cp/m уже публик домаин
она вся и все доки отданы на растерзание :)

http://www.cpm.z80.de/source.html

там же есть и доки оригинальные

http://www.cpm.z80.de/drilib.html

Vadim
26.03.2010, 06:45
вход в BIOS осуществляется посредством вектора
перехода,

Т.е. мы уцепились все же за слово "вектор"? А есть ещё (общепринятое) название - адрес (керналя). Т.к. BIOS у ЦПМ выглядит именно как набор точек входов (JMP) или по другому керналь. Векторами 16-и разрядные значения по адресам 0001 и 0006 тоже называют (Я написал что там лежит адрес, что тоже верно, в i8080 & Z80 адрес - 16-и битная величина и нигде не оговаривается что она 16 бит это само собой разумеющееся), но это не суть важно. Я ж сделал замечание, что ваше сообщение (#2) не то что бессмысленно, оно не информативное, неточное и в общем случае - неверное. ОЗУ не только в 0000-0100h содержится. А прочитав тот пост можно так подумать.

---------- Post added at 08:45 ---------- Previous post was at 08:43 ----------


вход в BIOS осуществляется посредством вектора

Да и не вход в BIOS а вызов функции BIOS номер 1 - горячий старт, холодный старт -3 (как вы и написали чуть ниже). Но все же не вход в BIOS, единой точки входа нет.

Error404
26.03.2010, 09:42
"У многих" - сильно сказано. Я такое видел только в Корвете, ну и наверное они тоже где то подсмотрели.


Ну, говоря "у многих" я не и мел ввиду что у большинства. У большинства то как раз сделано "фиксированно" и без DPB, что не удобно. Но думаю достаточно существует таких решений. Вот и Кворум получается тоже. Я встречал упоминание о таких форматах и для каких-то импортных клонов CPM, но не помню каких.

esl
26.03.2010, 11:10
в аттаче исходники одной из версий cp/m биоса для корвета
там все красиво по файлам разбито :)

16818

и еще доки по cp/m и корветовмскому биосу для нее в архиве

16819

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

а вот кусок из доки по биосу корвета



; Содержимое информационного сектора для 5.25" (или 3.5")
; двухстороннего диска, расформатированного на 80 дорожек
; при двойной плотности.

;E физические параметры дискаF

1: DW LoadAdress ; адрес, с которого начинается загрузка
3: DW RunAdress ; адрес,куда передается управление после
; загрузки
5: DW Count ; число загружаемых физических секторов
7: DB 0 ; если значение байта 1 -8" диск, если 0
; - 5.25"
8: DB 1 ; способ записи: 0 - FM; 1 - MFM
9: DB 96(135) ; число дорожек на дюйм: 0 - 48 TpI
; 1 - 96 TpI, 2 - 135 TpI
10: DB 1 ; если значение байта 1 - фактора смещения
; нет. Если <> 1 - байты 33-128
; информационного сектора содержат таблицу
; перевода секторов, причем значение байта
; равно размеру таблицы.
11: DB 3 ; размер физического сектора:0 - 128 байт,
; 1 - 256 байт, 2 - 512 байт и 3 - 1024
12: DB 1 ; информация о сторонах диска: 0 -
; односторонний диск, 1 - двухсторонний,
; причем сектора нумеруются от 1 до n
; с каждой стороны, четные логические
; дорожки с нулевой стороны, нечетные с
; первой.
13: DW 5 ; число физических секторов на дорожке
15: DW 80 ; число дорожек на диске (с одной стороны)

; Eлогические параметры дискаF

17: DW 40 ; число логических секторов на дорожке
19: DB 4 ; фактор сдвига блока распределения данных
20: DB 15 ; маска блока распределения данных
21: DB 0 ; маска размера
22: DW 394 ; объем памяти на диске в блоках минус 1
24: DW 127 ; число входов в директорию диска минус 1
26: DB 192 ; показывает, какие блоки зарезервированы
27: DB 0 ; под директорию
28: DW 32 ; размер вектора контроля директории
30: DW 2 ; число системных дорожек на диске
32: DB CheckSum ;контрольная сумма служебной информации

Ewgeny7
28.03.2010, 20:52
На "Орион-2010" заработал СР/М! http://zx.pk.ru/showpost.php?p=270138&postcount=36

Atari
28.03.2010, 23:27
ewgeny7, я рад что у вас заработало :v2_thumb: ужо почитамши.

Только "Орион" могу оживить исключительно в родном журнальном аппарате.

Error404
29.03.2010, 13:02
Только "Орион" могу оживить исключительно в родном журнальном аппарате.

Подумалось: здорово было бы сделать такой девайс: на плате одна ПЛИС + одна набортная мсх ОЗУ (128/512к - для расширения ОЗУ выше штатных 128к) + слот для SD, все это на общей маленькой платке. Все это вставляется в панельку 8080 стандартного Ориона со 128к и эмулирует в себе все то, что ewgeny7 реализовал в Орионе-2010. Все что надо будет сделать на плате Ориона - порезать 2 провода и обрывки завести через свободные ноги панельки 8080 на плату адаптера (для 16-к диспетчера младших 128к ОЗУ, которые уже впаяны в журнальном Орионе-128).

Кучу Орионов можно было бы реанимировать, заодно переведя на Z80(T80).

Atari
31.03.2010, 01:47
Большинство отечественных компутеров поддерживают текстовый (или псевдотекстовый) режимы 64х25 символов.

Как CP/M отнесется например к 48х16 ?

Error404
31.03.2010, 09:14
Большинство отечественных компутеров поддерживают текстовый (или псевдотекстовый) режимы 64х25 символов.

Как CP/M отнесется например к 48х16 ?

Фигово отнесется, оно и в 64х25 не очень: не удобно. Для большинства фирменных программ инсталляторы (умеющие настраивать на разрешение терминалов) не сохранились или их вовсе не было. А по дефолту 80х25. Соответственно если прога пытается позиционировать курсор, то все разъедется, особенно если несовпадение идет по количеству строк.

Vadim
05.04.2010, 14:09
В инсталляторах задавался тип терминала, а это не только размер экрана это ещё и управляющие esc-последовательности. Драйвер для консоли я бы предложил сделать двухуровневый. Первый уровень (базовый) понимает лишь несколько управляющих кодов. А загружаемый драйвер поддерживает эмуляцию конкретного терминала.

krotan
07.09.2010, 14:15
Большинство отечественных компутеров поддерживают текстовый (или псевдотекстовый) режимы 64х25 символов.

Как CP/M отнесется например к 48х16 ?
Хреново, не стоит и пробовать! Даже 64х25 мало! Надо именно 80х25. Кто желает убедится - запустите на скорпионе не "адаптированные" под него программы и посмотрите...

Barmaley_m
08.09.2010, 04:00
Наверно пришла пора мне выкладывать пакет ASC CP/M, все проги входившие в который нормально жили в режиме 42х24, и только иногда 64х24.

krotan
09.09.2010, 22:00
Есть такой парадокс - установить cp/m на свой комп мечтают обычно те, кто ни разу с ней не работал и не видел. Это очень слабая и недоразвитая операционка! Была только одна причина ее популярности в 70-е. В то время считалось нормой к каждой выпускаемой модели компьютера писать свою операционку, которая работала только на нем. А моделей компов было огромное разнообразие. Соответственно, и программы не переносились с одного коипа на другой! Никто ни о чем другом и не мечтал! Комп приобретался глядя, в основном, на программы. которые можно было на нем запустить. И тут, как гром среди ясного неба появляется универсальная CP/M, которая заработала на любом из этого зоопарка! Стало возможным запускать одну и ту же программу на разных компьютерах. Это был настоящий переворот! Только благодаря этому она широко известна и популярна. Сейчас указанное качество является нормой и особой ценности не представляет. Все остальное в ней хреново...

Error404
10.09.2010, 16:17
Есть такой парадокс - установить cp/m на свой комп мечтают обычно те, кто ни разу с ней не работал и не видел. Это очень слабая и недоразвитая операционка! Была только одна причина ее популярности в 70-е.


С другой стороны, приемлимые альтернативы для такого класса техники появились только десяток лет спустя (ОС семейства *nix), а на Спектруме сравнимой операционки нет и до сих пор. :)

Vadim
10.09.2010, 22:06
В то время считалось нормой к каждой выпускаемой модели компьютера писать свою операционку, которая работала только на нем.

Примеры?


Есть такой парадокс - установить cp/m на свой комп мечтают обычно те, кто ни разу с ней не работал и не видел. Это очень слабая и недоразвитая операционка!

Естественно недоразвитая по меркам 80-х, Но для середины 70-х и их конца это было даже вполне нормально. Согласен, много там чего не было сделано, но нельзя так говорить, что она была "недоразвитая". Железо, на котором она работала и не позволяла больше. Про *nix вспоминать не надо, в то время на персоналках она не работала, а работала лишь на больших ЭВМ, которые были лишь в крупных организациях, а возможности с ЦПМ были сопоставимы. Та же цпм в 1980г предоставила многозадачность и многопользовательнсть, чего в в мсдос, в последствии, так и не появилось.


Все остальное в ней хреново..
Совместимость была необходима, ессно, а что именно в ней хреново было по состоянии на 1975-1980гг, хотя бы? Более поздние версии датируются 1983г максимум. Т.е. я хочу спросить, с чем же вы ее сравниваете?

Atari
10.09.2010, 22:15
Тема пошла во флейм...
-----------


с чем же вы ее сравниваете?

Навеное единственно с чем можно сравнить - PC-DOS 1.0

Vadim
10.09.2010, 22:34
Навеное единственно с чем можно сравнить - PC-DOS 1.0
Вот именно. А krotan, непонятно что имел ввиду. Тем более для машин уровня спектрума. А спектрум, при должном понимании клайва синклера, ещё в 1982г мог бы запускать цпм, для использования багажа ее софта. Но зная историю мы понимаем, почему этого не было...

klingon
11.09.2010, 12:32
ЦПМ поддерживает 7bit ASCII, если не ошибаюсь. Как решаются проблеммы локализации?

esl
11.09.2010, 13:08
ЦПМ поддерживает 7bit ASCII, если не ошибаюсь. Как решаются проблеммы локализации?

в каком месте ???

собсвтенно видел всего один прикол
если у файла есть флаги (R/O, etc) то вот они устанавливаются в старших битах расширения файла
тоесть было
AAA.COM -> AAA.ЦОМ

ввод/вывод на экран клавиатуру - это на совести разработчика биос
т.е. самой систем - все равно

про софт - сказать не могу.

Atari
11.09.2010, 18:42
аааааааааааааа.....

ИНЖАЛИД КОММАНД :v2_lol: :v2_lol: :v2_lol:

neon79
12.09.2010, 01:29
Atari, А так же ИНЖАЛИД ДЕЖИЦЕ

Black Cat / Era CG
16.09.2010, 20:14
если у файла есть флаги (R/O, etc) то вот они устанавливаются в старших битах расширения файла
Не по теме немного: А не скажите старший бит какого символа какому флагу соответствовал?

caro
17.09.2010, 07:24
А не скажите старший бит какого символа какому флагу соответствовал?Если говорить о CP/M-80 версии 2.2:
В первом байте - бит R/O (только для чтения);
Во втором байте - бит SYS (системный);
В третьем байте - не используется.

Vadim
17.09.2010, 09:52
В третьем байте - не используется.
Бит "архивный". В ЦПМ указывает что мы сделали архивную копию с файла. В ms-dos полностью наоборот - 1 указывает, что архивная копия не создавалась и файл подлежит резервному копированию. Устанавливается системой при любом изменении файла. Насчет ЦПМ не помню, сбрасывается ли он автоматом.

klingon
26.09.2010, 19:42
Реально ли запустить cp/m на Pentevo?

Что-то мне подсказывает, что без большого напильника нет.

Vadim
27.09.2010, 14:08
Если ПЗУ отключается программно, то реально. Но готовые реализации вряд ли заработают. Надо самому будет делать. И с экраном 32x24 как-то совсем будет плохо. А драйвер экрана в 6 точек на символ будет подтормаживать. Делать надо конфигурацию с текстовым экраном 80 на 25. Вот тогда можно будет портировать любой цпм.

caro
27.09.2010, 14:25
А драйвер экрана в 6 точек на символ будет подтормаживать.Подтормажи� �ать относительно чего?
При 3.5 Мгц тактовой, CP/M-80 на Спектруме даже в графическом режиме работает довольно шустро.
Я уж не говорю о том, что и в IS-DOS используется шрифт 6*8 и никто не жалуется на подтормаживание.

Vadim
29.09.2010, 08:09
Я уж не говорю о том, что и в IS-DOS используется шрифт 6*8 и никто не жалуется на подтормаживание.

Там используется не посимвольный вывод. А в цпм-80 на каждый символ - вызов системы...

---------- Post added at 10:09 ---------- Previous post was at 10:08 ----------

А так, вообще, я сравнивал с реализацией на +3. Которая от Локомотив софтвейр. Не очень шустро там.

krotan
02.09.2012, 11:31
Главным, и практически единственным достоинством cp/m было то, что что её можно было установить на, практически любом компьютере того времени, она могла настраиваться практически на любое железо, лишь бы:
- в младших адресах памяти лежало ОЗУ
- был бы текстовый режим не менее 80x25
- процессор был i8080 и выше, совместимый
К сожалению, ZX Spectrum, был чуть ли не единственным компьютером того времени, который не удовлетворял этим параметрам. Плата за такую универсальность была очень дорогая, а именно:
- нет никаких графических режимов экрана
- полностью отсутствует цвет
- полностью отсутствует музыка, звук
- полностью отсутствует какая-либо память за пределами 64 Кб
Причем, использовать всё перечисленное было никак нельзя, даже если комп на самом деле это позволял (типа спектрума). Потому что терялось главное и единственное достоинство этой операционки - совместимость, возможность запуска одной и той же программы на любом cp/m-компьютере без какой-либо адаптации!
Поэтому, не следует восторгаться тому, какие красивые цвета экрана в cp/m на ATM-turbo или какой замечательный музыкальный редактор в cp/m на Скорпе (кажется) - это всё от некомпетентности, криворукости и тараканов в голове! В cp/m доступ к железу производится только через операционку и ни в коем случае не напрямую - это религия!

Что касается, дискового формата, он выбирается по следующим соображениям.
Cp/m может работать с дисками, отформатированными на сектора длиной 128, 256, 512 или 1024 байт. От длины сектора зависит ёмкость дискеты, поскольку много места занимают промежутки между секторами. Для дискет DD DS она может быть от 640 до 1024 Кб (полная, неформатированная). То есть, под cp/m в зависимости от длины сектора ёмкость одной и той же дискеты может отличаться почти в два раза! Казалось бы, чем длиннее сектор, тем больше ёмкость дискеты - тем лучше. Но тут следует учесть другой фактор - разброс значения частоты вращения разных дисководов разных компьютеров. Синхронизация частоты данных сектора происходит в момент чтения индекса, а далее производится его чтение (или запись) вслепую с заданной частотой. Чем длиннее сектор, тем больше вероятность, того что за время его чтония синхронизация "убежит" и сектор не будет прочитан. Особенно велика такая вероятность, если диск писался на одном дисководе, а читается на другом. Конечно, можно улучшить качество чтения путём точной настройки частоты вращения всех имеемых дисководов. Но это не панацея, потому что она зависит ёщё от колебаний напряжения питания, влажности воздуха, степени износа дискеты и пр. К тому же, вероятно, вы захотите чтобы записанная вами дискета надёжно читалась на компьютере другого человека, которому не интересны все эти технические особенности, а интересен только результат:)
Радикальным решением этой проблемы является использование фазовой автоподстройки частоты дисковода (ФАПЧ).
Вывод: длинные сектора, невзирая на увеличение ёмкости дискеты, следует использовать только в том случае, если вы уверены, что на всех компьютерах, где она может быть прочитана есть ФАПЧ.

Vadim
02.09.2012, 17:14
Поэтому, не следует восторгаться тому, какие красивые цвета экрана в cp/m на ATM-turbo или какой замечательный музыкальный редактор в cp/m на Скорпе (кажется) - это всё от некомпетентности,

На скорпе в CP/M почти ничего нет, а редактор есть на Профи. Насчёт графики и звука могу сказать следующее: во всех осях того времени было аналогично. На ПЦ в ms-dos всё было точно также. И программная прослойка между программой и железом в плане мультимедиа реально заработало лишь в Windows 9x, NT. И в *nix системах 90-х годов. Слишком громоздким будет api и не позволяла производительность проца и компа в целом сделать такую прослойку. На компьютерах обладающих графикой и звуком при использовании CP/M к аппаратуре обращались напрямую. Да, программа намертво привязана именно к той платформе, на которой написана. Ну и что? CP/M используется для работы с файлами, а для вывода графики и звука мы обращаемся к аппаратуре напрямую.

А далее автор пишет о дискетах. В общем ерунда, посоветую читать матчасть. К CP/M это отношения не имеет.


Синхронизация частоты данных сектора происходит в момент чтения индекса, а далее производится его чтение (или запись) вслепую с заданной частотой.
В какую "вслепую"? Скорость вращения в дисководе контролирует схема привода, колебания при этом не превышают 0,5%. А во вторых CRC код никто не отменял, для контроля правильности считанных данных.
А вообще бы, если уж пишем про дисковый формат и CP/M так первое, что надо было сказать, что есть 2 уровня формата. Логический и физический. И как бы, вообще говоря, практически со 100% вероятностью можно утверждать, что дискеты от одного типа компьютера с системой CP/M не прочитаются на другом. На ПЦ есть несколько программ для чтения дискет CP/M - так вот, там нельзя указать детали ни логического формата ни физического, выбор ведется по модели компа. Но хоть это есть. А вообще, в принципе если у нас имеется DS DD дисковод, то любую дискету можно прочитать. Вопрос в настройках системы и дискового драйвера. Для Q-DOS я сделал такую утилитку, позволяющую читать любые дискеты CP/M - требуется лишь указать параметры.

alexeilm
04.09.2012, 15:46
А кто помнит, как обрабатывалось биосом содержимое Intel I/O byte (аддр: $0003) ?

Vadim
05.09.2012, 00:28
В фирменном описании CP/M 2.2 это есть, как мне помнится. Вот копипаст с сайта
http://www.seasip.info/Cpm/iobyte.html

CP/M 2 Input/Output mapping

Under CP/M 2, input and output device selection are performed by the BIOS. Some BIOSes may implement a feature called the IOBYTE which allows the user to change which device the screen, printer etc. output go to.

The IOBYTE lives at address 3 (in the Zero Page) and should be changed using BDOS calls 7 and 8 (get/set IOBYTE). The value is bitmapped:

Bits Bits 6,7 Bits 4,5 Bits 2,3 Bits 0,1
Device LIST PUNCH READER CONSOLE

Value
00 TTY: TTY: TTY: TTY:
01 CRT: PTP: PTR: CRT:
10 LPT: UP1: UR1: BAT:
11 UL1: UP2: UR2: UC1:

BAT = batch mode. Use the current Reader for console input, and he current List (printer) device as the console output.
CRT = Standard console (keyboard and terminal screen).
LPT = Standard line printer.
PTP = Standard Paper Tape Punch.
PTR = Standard Paper Tape Reader.
TTY = Teletype device, eg a serial port.
UC1 = User defined (ie implementation dependent) console device.
UL1 = User defined (ie implementation dependent) printer device.
UPn = User defined (ie implementation dependent) output device.
URn = User defined (ie implementation dependent) input device.

alexeilm
05.09.2012, 03:35
Это-то так, но "как обрабатывалось биосом содержимое Intel I/O byte". Т.е. каким образом сам биос это делал. Если кто помнит...
Что-бы понятнее было. Что надо вписать в биос, чтобы работала процедура:

STAT CON:=CRT: - ввод/вывод с теминала
STAT CON:=TTY: - система переключается на ввод/вывод по последовательному порту.

Vadim
06.09.2012, 09:14
Команда STAT просто меняет байт по адресу 0003. А в BIOS уже ветвитель, на который попадаем по вызову функции CONOUT смотрит, какому драйверу передать управление. Думаю так.

Error404
06.09.2012, 11:12
Команда STAT просто меняет байт по адресу 0003. А в BIOS уже ветвитель, на который попадаем по вызову функции CONOUT смотрит, какому драйверу передать управление. Думаю так.

Совершенно верно. Все так и делается, и работает.
Я делал такую доработку CP/M для Ориона-2010 (http://zx.pk.ru/showthread.php?t=18451) (у О-2010 есть RS232), работали стандартные STAT (переназначение консоли), PIP (RAW передача файла) и классический KERMIT как ASCII-терминал и файловый прием/передача.

alexeilm
07.09.2012, 00:47
Я правильно мыслю, к примеру вызов bios CONIN?


conin: ; bios function CONIN

ld a,(IOBYTE) ;
and 3 ; strip 7-2 bits
jr z, tty_input

console_input: ;CRT INPUT
in a,(console_satus)
.
.
.
in a,(console_data)
and 7fh
ret

tty_input: ;SERIAL LINE INPUT
in a,(tty_status)
.
.
.
in a,(tty_data)
and 7fh
ret

alexeilm
13.09.2012, 15:14
Нихрена KERMIT4 не могу заставить работать

Error404
13.09.2012, 18:57
Нихрена KERMIT4 не могу заставить работать

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

---------- Post added at 18:57 ---------- Previous post was at 18:55 ----------

и что именно не работает? каковы симптомы?

Error404
13.09.2012, 20:52
а ты каким пользуешься? я брал с официального сайта самый свежий для срм. и там его еще надо склеить было из двух частей - логической и аппаратнозависимой, которую надо брать именно для варианта работы через IOBYTE

---------- Post added at 18:57 ---------- Previous post was at 18:55 ----------

и что именно не работает? каковы симптомы?

попробуй этот
Работает?

Вот тут (http://zx.pk.ru/showthread.php?p=285835&highlight=kermit#post285835) еще я описывал свои эксперименты с Кермит. Нормально работало (все режимы - и терминальные и файловые) между двумя Орионами (я использовал 2 эмулятора), а между Орионом и РС были ньюансы в терминальных режимах, т.к. на РС на удивление мало вменяемых кермит-клиентов.

PS. Только что нагуглил: колумбийцы отцепили Kermit95 (http://www.columbia.edu/kermit/k95.html) (виндовозный клиент в 2010 году еще бывший платным отчего я его и не попробовал тогда) под лицензией BSD. Исходники тут. (ftp://kermit.columbia.edu/pub/kermit/k95source/) Еще бы кто-то это собрал...

alexeilm
14.09.2012, 14:11
На счет клиента, я как-то еще году в 1999 подсел на TERATERM. Он меня устраивает полностью. В нем реализована, пожалуй, самая корректная работа VT100 и перекодировки таблиц вывода хостов (WIN<->KOI и т.д.).
А еще когда подключаешь к нему шрифт svo Glass-TTY220, прошибает слезу и вспоминаешь молодость...
Кермит80 я собирал из НЕХ версии 4.11 (Generic IOBYTE for CP/M 2.2). Пробовал и твой.
Сейчас попробую перейти на CP/M 3 и уже поиграться с AUX.

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

А вообще интересно, запустил CP/M 3 через пакет CPM3ON2. Система работает заметно быстрее. И реакция на команды ощутимее быстрее. Хотя памяти съела...

Error404
14.09.2012, 18:29
Вообще, вся эта требуха у меня возникла в попытке придать стабильности в работе Ориона на DE1. Раскидал все по частям и уже, в принципе, можно говорить о кривоватости корки T80.


Это - да. Я еще на Орионе-2010 это заметил (там тоже CPU T80). Сложные программы (например проекты на С тыщ в десять строк) хоть чуть, но по-другому глючат, чем в эмуляторе.



А вообще интересно, запустил CP/M 3 через пакет CPM3ON2. Система работает заметно быстрее. И реакция на команды ощутимее быстрее. Хотя памяти съела...

А на какой обрудовании? На Орионе?
Сделал бы какой-нить образ диска - посмотреть на CPM v3.

alexeilm
15.09.2012, 13:06
В принципе, запустить тройку на Орионе не представляет особого труда.
Есдинственно, нужен родной CP/M 2.2 без всяких "довесок".
Из программ под CP/M 2.2, пожалуй нужен только SURVEY.COM, да и то только в том случае, если нет исходников BIOS под 2.2. + десятка полтора файлов от 3-ки.
Но это будет скорее демо, чем реальный вариант. Без поддержки расширенной памяти, но нормально рабочий.

Если делать по уму, нужен нормальный исходник биоса (полный, с нормальными комментариями), и может потребоваться "допилить" порт переключения страниц памяти.
Я вот только не помню, Motorola MC146816 (с нее дули наш RTC), дает сразу дату или кол-во дней от определенной даты?
В принципе, тройка отличается от двойки по загрузке (хотя это можно и переделать), и доп функциями биоса. Да и таблицу описания дисков надо писать отдельно для каждого диска. Из аналогичных в 2.2 не совсем совпадают только boot, wboot - берутся из другого места.
У функций консольного и пр. вв не маскируется старший бит, и отличается функция SELDSK. В случае тройки нельзя возвращать ошибку при условии выбора диска при младшем (нулевом) бите равном 1 в регистре E.
Добавляются к биосу функции работы с RTC, выбора банка пямяти, переноса блока данных из одного в другой банк... И все.
Самая вкусность состоит в том, что в тройке (лигический сектор) = (физический сектор) и нормально понимаются сектора по 512 байт.

Я запустил эту систему на эмуляторе, скорее распотрашенном Орионе, на DE-1. Рабта с диском 100% от поддержки Орионовской SD.
Единственно, что мне не нравится (и никогда не нравилось), это забивание памяти устройствами ВВ. F762/F763 конечно не плохо, но для CP/M выпадает порядка 3 килобай из-за этих вот художеств. В конкретном случае, это уже приведет к тому, что не будут нормально работать VEDIT, LZH под тройкой.

Если есть под Орион CP/M 2.2 c нормальным исходником биоса, можно и попробовать залить тройку.
Или просто образ дискеты под эмулятор с 2.2 ?

Viktor2312
15.09.2012, 13:20
Отсканировал немного информации.

Может поможет.

Error404
15.09.2012, 13:39
Если есть под Орион CP/M 2.2 c нормальным исходником биоса, можно и попробовать залить тройку.
Или просто образ дискеты под эмулятор с 2.2 ?

Мне в предыдущем сообщении прочиталось что уже есть сборка CPM3 именно для Ориона - вот ее и хотел посмотреть, удобнее конечно в готовом образе диска. Под абстрактный эмулятор с Z80 не надо - таких у меня есть (например CPM3 для MyZ80).

Что касается портов в адресном пространстве ЦПУ - соглашусь, авторское решение отрезать 4 кб весьма спорное. Но в те времена так было принято (на РК и Спеце в этом смысле все еще более запущено: в исходных вариантах за вычетом экрана максимум 32кб для программ) - любительство, больших программ тогда никто не писал (напротив, пытались добиться совметимости с убогими РК, в т.ч. и по идеологии - чтобы использовать убогое ПО от РК). На ОрионПро это поправили - там все 64к было ОЗУ (порты по OUT) .... но где этот ОрионПро? Он фатально опоздал и был переусложнен, поэтому все что проектировалось из ПО, все сделано для версии Ориона-128, и сейчас нам эмуляторщикам приходится ориентироваться на него (т.к. софт для какой-либо новой железки мы уже один хрен никакой не напишем)

alexeilm
15.09.2012, 13:47
Именно для Ориона я не делал. У меня нет его биоса в исходниках.
То, что я распотрошил, в этом ввод-вывод (кроме экрана) полностью Орионовский.
Если есть образ дискеты с CP/M 2.2 для Ориона загружаемый, выложи пожалуйста.

Error404
15.09.2012, 14:20
Именно для Ориона я не делал. У меня нет его биоса в исходниках.
То, что я распотрошил, в этом ввод-вывод (кроме экрана) полностью Орионовский.
Если есть образ дискеты с CP/M 2.2 для Ориона загружаемый, выложи пожалуйста.

Конечно есть, и исходники есть.

alexeilm
15.09.2012, 15:34
В общем нашел я диск "ADVANCED CP/M VERS 2.2 RELEASE 1.53/8080... 1992"

Параметры генерации:
для 2.2: BIOS 0DA00H
Для 3.0: BIOS3 SPR D600/0400, Top page of RAM: (D9)
BANKED - Non

Total TPA 46k

Теперь как это все увидеть:
1. Загрузиться с этого диска.
2. Запустить CPMLDR
3. ...

Как это все править:
1. Файл LDRBIOS.ASM
строка 113 - адрес штатной загрузки биоса CP/M 2.2
2. Файл GBIOS.ASM
то-же самое.

В строках 112 - количество устройств. Для LDRBIOS = 2, уменьшено для сокращения размера буферов за ненадобностью. Меньше нельзя (писал об этом ранее).
Для GBIOS - 5 (можно и больше/меньше).

После правки этих файлов:

RMAC LDRBIOS
LINK CPMLDR,SCB,LDRBIOS
RMAC GBIOS
LINK BIOS3[OS]=GBIOS,SCB

Далее запускаем программу GENCPM

Отвечаем на вопросы.
Единственно, отвечаем, что переключения банков памяти нет и верхний сегмент памяти равен D9.

****

Запускаем CPMLDR...

Error404
15.09.2012, 16:11
Какой адрес загрузки BIOS в dos 3.5r ?

0E8CAh

Вообще, он может меняться от релиза к релизу.
Начало BIOS надо определяеть как (0001h)-3
В данном случае по адресу 0 лежит такая конструкция:
JP 0E8CDh ; JP BIOS_WARM_START
соответственно начало BIOS = 0E8CAh

alexeilm
15.09.2012, 17:19
Использовать E8CA - невозможно, т.к. не соответсвует "соглашению".
Адреса системы могут быть ТОЛЬКО кратны страницам по 256 байт.

Выложил для 2.2 (пост ранее).
Попробуй CP/M 3 на Орионе...
Вообще-бы посмотреть это на реальном железе...

Error404
16.09.2012, 10:50
Выложил для 2.2 (пост ранее).
Попробуй CP/M 3 на Орионе...
Вообще-бы посмотреть это на реальном железе...

Загрузился (правда, в эмуляторе) и понял что я не знаю чего бы такого эдакого посмотреть в CPM3. :)
Что там интересненького? В двух словах.

alexeilm
16.09.2012, 13:26
Со стороны интерфейса - пожалуй быстрота работы и расширенные возможности команд.
Изнутри - физическая поддержка секторов, например 512 байт.
Размер диска до 512 мегабайт.
Поддержка штампа даты времени.
Прямая поддержка мэнеджеров памяти.
В той версии, что загрузил, поддержки памяти нет.
В общем много чего.

Максагор
05.12.2017, 02:51
В инсталляторах задавался тип терминала, а это не только размер экрана это ещё и управляющие esc-последовательности. Драйвер для консоли я бы предложил сделать двухуровневый. Первый уровень (базовый) понимает лишь несколько управляющих кодов. А загружаемый драйвер поддерживает эмуляцию конкретного терминала.

Подниму старую ветку обсуждения, чтобы не плодить новых:

Вопрос всем знатокам: в каких CP/M-компах (помимо спектрум-совместимых, типа АТМ или Профи) использовался по дефолту терминал VT-52?

Error404
05.12.2017, 12:52
Подниму старую ветку обсуждения, чтобы не плодить новых:

Вопрос всем знатокам: в каких CP/M-компах (помимо спектрум-совместимых, типа АТМ или Профи) использовался по дефолту терминал VT-52?

Orion-128 и Orion-ПРО, причем не только в CP/M, но и Мониторе(стартовом ROM-BIOS). Базовые коды (управление и позиционирование курсором, перенос и удаление и вставка строк и их части) совпадали, а расширения (например управление цветностью, курсорами, окнами) - отличались от стандарта (собствено, в стандарте пасширения прописаны функционально бедно и поэтому на большинстве 8-биток расширения VT52 каждый городил как хотел).

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



/* VT52 compliant codes
====================

Orion Monitor-2 Orion CPM (ACPM) MYZ80 CPM.EXE
--------------- ---------------- -------------

01h ------------ ------------ HOME
04h ------------ ------------ CLS+HOME

07h BELL BELL BELL
+ 08h cursor LEFT cursor LEFT BACKSPACE
+ 09h TAB TAB TAB
+ 0Ah LF LF LF
0Bh ------------ ------------ cursor UP
0Ch HOME ------------ CLS
+ 0Dh CR CR CR

18h cursor RIGHT cursor RIGHT CLREOLN
19h cursor UP cursor UP -----------
1Ah cursor DOWN cursor DOWN CLS+HOME

1Eh ------------ ------------ HOME
+ 1Fh CLS+HOME CLS+HOME CR+LF

+ 7Fh INVERSE ------------ -----------

+ 1Bh+34h='4' ------------ LineWrap ON -----------
+ 1Bh+35h='5' ------------ LineWrap OFF -----------
+ 1Bh+36h='6' ------------ Inverse ON -----------
+ 1Bh+37h='7' ------------ Inverse OFF -----------

1Bh+3Ah=':' ------------ cursor ON CLS
1Bh+3Bh=';' ------------ cursor OFF CLS

+ 1Bh+41h='A' cursor UP cursor UP
+ 1Bh+42h='B' cursor DOWN cursor DOWN
+ 1Bh+43h='C' cursor RIGHT cursor RIGHT
+ 1Bh+44h='D' cursor LEFT cursor LEFT
+ 1Bh+45h='E' CLS CLS CLS+HOME

+ 1Bh+48h='H' HOME HOME HOME
1Bh+49h='I' ------------ set/get ActiveScreen reverse LineFeed
+ 1Bh+4Ah='J' CLRREOSCR CLRREOSCR CLRREOSCR
+ 1Bh+4Bh='K' CLREOLN CLREOLN CLREOLN
1Bh+4Ah='L' ------------ INSROW INSROW
1Bh+4Bh='M' ------------ DELROW DELROW

1Bh+52h='R' ------------ set cursor height DELROW

+ 1Bh+59h='Y'+X+Y cursor position cursor position cursor position

1Bh+64h='d' ------------ ----------- CLRBOSCR
1Bh+65h='e' [ ------------ ----------- cursor ON
1Bh+66h='f' ------------ ----------- cursor OFF

1Bh+6Ah='j' ------------ ----------- save cursor
1Bh+6Bh='k' ------------ ----------- restore cursor position
1Bh+6Ch='l' ------------ ----------- clear line

1Bh+6Fh='o' ------------ ----------- CLRBOLN
+ 1Bh+70h='p' ------------ ----------- Inverse ON
+ 1Bh+71h='q' ------------ ----------- Inverse OFF

+ 1Bh+76h='v' ------------ ----------- line wrap on
+ 1Bh+77h='w' ------------ ----------- line wrap off


а во вложении полный перечень Орионовских кодов VT-52 для CP/M Ориона-128 (в Орионе-ПРО родили еще более несовместимое по расширениям т.к. это другой коллектив)

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

Таблицы в свое время составлял для того, чтобы написать экранный 2-панельный командер, работающий во всех реализациях VT-52. Получилось, корректно работало даже в Hyperterm WinXP (он умеет сокращенный VT52 - можно в настройках выставить) подключенному по rs-232 к реальному Ориону-128, хотя и пришлось командер специально для Hyperterm урезать до экрана 80х24 (в Орионе 80х25).

Кстати, интересовала бы анлогичная таблица совместимости и для ATM.

Максагор
05.12.2017, 13:16
Кстати, интересовала бы анлогичная таблица совместимости и для ATM.

Она есть здесь:
http://atmturbo.nedopc.com/inf/bios_cpm.htm
или здесь:
http://atmturbo.nedopc.com/inf/books/bios/bios.zip
в разделах 9.1 (экранный драйвер) и 9.2 (управляющие последовательности)

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


Orion-128 и Orion-ПРО, причем не только в CP/M, но и Мониторе(стартовом ROM-BIOS).

А в зарубежных CP/M-машинах где VT-52 использовался?

OrionExt
05.12.2017, 15:53
А в зарубежных CP/M-машинах где VT-52 использовался?
MSX - VT52. VT52 как и другие стандарты терминалов достаточно специфичны в нюансах. Во основном придерживаются основных команд (хотя подозреваю они те же как и на VT100). А вообще каждая уважающая себя контора-писатель софта под CP/M давала либо инсталлятор под терминал или подробно в текстовом файле описывала, что и где настроить под нужный терминал.

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

Тут нужно смотреть на хотелки программы под сп/м, а не на возможности терминала, коих была тьма тогда.

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

А таблицы совместимости – это прекрасно. Но спектрумистам надо вразумить, что земля крутится не вокруг ZX. И нет единого-стандарта даже в терминалах, как бы вам хотелось (и мне тоже):)

А вообще. Ничего плохого о АТМ. Просто по последним судя постам мега улучшайзенга – больше набокопорили, чем стабилизировали старые проблемы. И мега новых наплодили.

Помнится в 90 это был флагман ZX. Но эти шифровальные микрухи свели все на нет. И для и меня тоже. Когда стал вопрос купить ATM или видео карту РС, выбор был очевиден, видео PC.

svofski
05.12.2017, 20:18
хотя подозреваю они те же как и на VT100
Если речь о том, что VT100 совместим с VT52, то это не так. Они совсем не похожи.

Вот VT52:
https://en.wikipedia.org/wiki/VT52#Standard_commands

VT100 это примерно ANSI:
http://www.termsys.demon.co.uk/vtansi.htm

Вектор-06ц в МикроДОС-е тоже эмулирует VT52.