====== MSX CP/M ======
Версия [[cp_m:cp_m|]] для MSX
{{:msx:yamaha_kuvt:yamaha_msx_cpm_operationmanual.pdf|Yamaha MSX CP/M Operation Manual}}, из комплекта [[msx:yamaha_kuvt:yamaha_kuvt#kuvt2|Ямаха КУВТ 2]].
====== CP/M 2.2 Net-Shell Version ======
Версия 1987.10/29
Использовалась в классах [[msx:yamaha_kuvt:yamaha_kuvt#kuvt2|Ямаха КУВТ 2]] для работы [[msx:yamaha_local_network:yamaha_local_network-3]].
{{:msx:yamaha_local_network:msx2_cpm22_netshell_classroom_network-3.pdf|MSX 2 CP/M 2.2 Net-Shell Classroom Network 3.0}}
{{anchor:student}}
===== Ученик =====
**Запуск**
CALL CPMили_CPM
**Выход из системы**
BASIC
[[+tab|wmsxc>custom/yis503iiir.json&BASIC_ENTER=_cpm|Запуск в WebMSX]]
Дамп ПЗУ, которое устанавливалась в [[msx:yamaha_yis-503iiir:yamaha_yis-503iiir|]]:
|{{:msx:yamaha_yis-503iiir:yis-503iiir_cpm.bin|}}|{{:msx:yamaha_yis-503iiir:yis-503iiir_cpm.md5|MD5}}, {{:msx:yamaha_yis-503iiir:yis-503iiir_cpm.sha1|SHA1}}|
{{anchor:teacher}}
===== Учитель =====
{{:msx:cp_m:msx2_cpm22_disk-front.jpg?350|}} {{:msx:cp_m:msx2_cpm22_disk-back.jpg?350|}}
\\ Фотографии предоставил **Александр Страйстар**
С июня 2023 года, благодаря **SuperMax** доступен образ оригинального диска (считалось, что все такие дискеты давно переформатированы) для [[msx:yamaha_yis-805-128r2:yamaha_yis-805-128r2|]] :
\\ {{:msx:cp_m:msx2_cpm22.dsk|CP/M 2.2 for Yamaha MSX, диск SER. No.1684-03011}}
{{anchor:steinblume}}
{{ :msx:cp_m:cpm2kuvt.ini |Настройки для SteinBlume}}
\\ [[http://era-cg.su/steinblume/|SteinBlume. CP/M Disk Image Explorer]]
{{anchor:cpmtools}}
Для работы с этим образом дискеты на ПК можно воспользоваться [[cpmtools:cpmtools|]], для этого нужно добавить в файл описания форматов //diskdefs// следующее:
diskdef cpm2kuvt-720
seclen 512
tracks 160
sectrk 9
blocksize 2048
maxdir 128
skew 3
boottrk 4
os 2.2
end
Примеры команд:
* Список содержимого диска: cpmls -f cpm2kuvt-720 msx2_cpm22.dsk
FIXME
Предшествующая попытка реконструировать дискету, предпринятая **Caro** − {{cpm22msx.zip|}}, [[https://zx-pk.ru/attachment.php?attachmentid=68531&d=1553027953|оригинал]]
Её определение для cpmtools:
diskdef cpm22msx-720
seclen 512
tracks 160
sectrk 9
blocksize 2048
maxdir 128
skew 1
boottrk 4
os 2.2
end
\\ [[zxpkru>threads/30162-disk-s-nadpisyu-cp-m-kotoryj-shel-v-komplekte.html?p=1004234&viewfull=1#post1004234|Диск с надписью CP/M который шел в комплекте #24]]
----
====== CP/M 3.0 ======
{{:msx:cp_m:msxcpmplus.jpg|}}
\\ [[http://www.z80.eu/msxcpmplus.jpg|оригинал]]
{{:msx:cp_m:cpm3msx2a.zip|1 дискета × 720 Кбайт}}, [[http://www.z80.eu/downloads/cpm3msx2a.zip|оригинал]]
{{:msx:cp_m:cpm3msx2b.zip|2 дискеты × 360 Кбайт}}, [[http://www.z80.eu/downloads/cpm3msx2b.zip|оригинал]]
----
[[http://www.z80.eu/msx2.html|MSX2 with CP/M 3.0]]
----
{{:msx:cp_m:cpm-users-guide-screen.pdf|CP/M Plus 3.0 Users Guide}},
[[https://maciaszek.net/wp-content/uploads/2022/12/CPM-Users-Guide-Screen.pdf|оригинал]]
{{:msx:cp_m:cpm-users-guide-print.pdf|CP/M Plus 3.0 Users Guide (версия для печати)}},
[[https://maciaszek.net/wp-content/uploads/2022/12/CPM-Users-Guide-Print.pdf|оригинал]]
{{anchor:cpm3_beeride}}
===== Beer IDE =====
CP/M работает только с разделами фиксированного размера (360 либо 720Кб). Работы по реализации поддержки [[msx:beer_ide:|]] в CP/M продолжаются. Скачать рабочий образ HDD с CP/M 3.1 {{ :msx:beer_ide:cpm3_msx_beer202_hdd.zip |здесь}}.
====== Утилиты ======
FIXME
===== PIP =====
Программа обмена с периферийными устройствами.
Параметры запуска:
|PIP|загрузка программы PIP в оперативную память и переход в режим диалога|
|PIP y:=x:filename.ext
PIP y:=x:filename.*
PIP y:=x:*.ext
PIP y:=x:*.*
|копирование файла (файлов) с диска "x:" на диск "y:" (возможно использование метасимволов * и ?)|
|
PIP y:newfile.ext=
x:oldfile.ext|копирование с диска "x:" на диск "y:" с изменением имени файла "oldfile.ext" на "newfile.ext"|
|PIP y:newfile.ext=
x:old1.ext,
old2.ext,
old3.ext|копирование с диска "x:" на диск "y:" с объединением файлов "old1.ext", "old2.ext" и "old3.ext" в файл "newfile.ext"|
|PIP CON:=x:filename.ext
PIP TTY:=x:filename.ext
PIP CRT:=x:filename.ext|копирование файла "filename.ext" с диска "x:" на указанное консольное устройство|
|PIP PUN:=x:filename.ext
PIP PTP:=x:filename.ext
PIP OUT:=x:filename.ext
PIP AUX:=x:filename.ext|копирование файла "filename.ext" с диска "x:" на указанное устройство вывода|
|PIP LST:=x:filename.ext
PIP LPT:=x:filename.ext
PIP PRN:=x:filename.ext|копирование файла "filename.ext" с диска "x:" на указанное устройство печати|
|PIP x:filename.ext=CON:
PIP x:filename.ext=TTY
PIP x:filename.ext=CRT:|копирование файла "filename.ext" на диск "x:" с указанного консольного устройства до ввода %% ^Z %%|
|PIP x:filename.ext=RDR:
PIP x:filename.ext=PTR:
PIP x:filename.ext=INP:|копирование файла "filename.ext" на диск "x:" с указанного устройства, работающего в режиме "только ввод", до ввода %% ^Z %%|
|Для перфоленты:||
|PIP PUN:=NUL:
PIP PUN:=NUL:,x:file.ext
PIP PUN:=NUL:,x:file.ext,NUL:
PIP PUN:=x:file.ext,NUL:|вывод начальных и хвостовых промежутков при копировании файла "file.ext" с диска "x:" на устройство, работающее в режиме "только вывод"|
|PIP PUN:=x:file.ext,EOF|вывод маркера конца файла при копировании файла "file.ext" с диска "x:" на устройство, работающее в режиме "только вывод"|
Дополнительные параметры команды PIP:
\\ (пишутся в конце командной строки в квадратных скобках)
|[V]|проверить правильность копирования путем сравнения результирующего и исходного файлов|
|[E]|отображать копируемый файл на консоли|
|[%%Sstring^Z%%]|начать копирование после того, как в исходном файле будет обнаружена строка "string" (строку завершает %% ^Z %%)|
|[%%Qstring^Z%%]|завершить копирование после того, как в исходном файле будет обнаружена строка "string" (строку завершает %% ^Z %%)|
|[L]|преобразовать в процессе копирования все символы верхнего регистра в символы нижнего регистра|
|[U]|преобразовать в процессе копирования все символы нижнего регистра в символы верхнего регистра|
|[Dn]|удалять в процессе копирования в каждой строке все символы, расположенные после позиции с номером n|
|[Tn]|преобразовать в процессе копирования все символы табуляции кода ASCII в n пробелов|
|[F]|удалить в процессе копирования все символы перевода формата|
|[Pn]|вставить через каждые n строк в процессе копирования символы перевода формата|
|[N]|дополнить в процессе копирования строки соответствующими порядковыми номерами без ведущих нулей|
|[N2]|дополнить в процессе копирования строки соответствующими порядковыми номерами с ведущими нулями|
|[R]|копировать "системный" файл (определенный с помощью команды STAT)|
|[W]|удалить файл со статусом защиты "R/O" (устанавливается с помощью команды STAT), имеющего то же имя, что и выходной файл|
|[Gn]|копировать файл (файлы) из области пользователя с номером "n" (от 0 до 15) в файл, расположенный в текущей области пользователя|
|[O]|рассматривать содержимое копируемого файла (файлов) как объектный (машинный) код|
|[B]|установить блочный режим копирования|
|[H]|использовать 16-ричный формат фирмы Intel при передаче данных на (с) устройство, работающее в режиме "только вывод" ("только ввод")|
|[I]|при передаче в 16-ричном формате фирмы Intel игнорировать все нулевые (NULL) записи|
|[Z]|в процессе копирования символов в коде ASCII устанавливает бит чётности в 0|
===== SUBMIT =====
Запуск на выполнение последовательности команд ОС CP/M.
Параметры запуска:
SUBMIT filename a b c …
запуск на выполнение командного файла "filename" (с расширением ".SUB") с предварительной заменой в тексте параметров:
* "¤1" ("$1") значением "a"
* "¤2" ("$2") значением "b"
* "¤3" ("$3") значением "c"
* и т.д.
===== ASM & Z80 =====
* ассемблер для микропроцессора I8080 (ASM.COM);
* ассемблер для микропроцессора Z80 (Z-80.COM).
Параметры запуска:
ASM filename.123
Z80 filename.123
ассемблировать исходный файл "filename" (с расширением .ASM) и создать файл с промежуточным кодом (с расширением .HEX). При этом дополнительные параметры трактуются следующим образом:
|"1"|в этой позиции указывается имя диска, на котором находится исходный файл|
|"2"|в этой позиции указывается имя диска, на который надо записать выходной файл с расширением .HEX, или символ Z, если объектный файл не требуется|
|"3"|в этой позиции указывается имя диска, на который надо записать выходной файл печати с расширением .PRN, или символ X, если листинг ассемблирования надо вывести на экран|
===== LOAD =====
Программа преобразования промежуточного файла в исполняемый машинный код.
Параметры запуска:
LOAD filename преобразовать объектный файл с расширением .HEX в файл с исполняемым машинным кодом (с расширением .COM)
===== DUMP =====
Программа распечатки содержимого файла.
Параметры запуска:
DUMP filename.ext вывести в 16-ричном формате содержимое файла "filename.ext"
===== DDT & ZSID =====
Инструментальное средство отладки для микропроцессора I8080 (DDT.COM) или для микропроцессора Z-80 (ZSID.COM).
Параметры запуска:
DDT [filename.ext]
ZSID [filename.ext]
загрузить программу DDT или ZSID и (если присутствует) файл с отлаживаемой программой "filename.ext" в память.
При загрузке файла печатается сообщение:
PC: nnnn NEXT: kkkk
,
где:
* nnnn — текущее значение счетчика команд (PC),
* kkkk — адрес следующей свободной ячейки после загрузки файла.
FIXME
Команды программ DDT и ZSID:
|D
Dstart
Dstart,end|вывести в 16–чном формате содержимое следующих 192 ячеек памяти, начиная с текущей ("D"), или с ячейки, расположенной по заданному адресу ("Dstart"), или с ячейки "start" по ячейку "end" ("Dstart,end")|
Fstart,end,data - записать во все ячейки памяти с адреса "start" по адрес "end" 16-чное значение "data".
Ifilename.ext - создать блок управления файлом (FCB) и записать в него
имя "filename.ext" для последующей загрузки файла с этим
именем в память по команде R.
R - загрузить содержимое файла, имя которого указано в коман-
Rstart де I, в память, начиная с текущей ячейки ("R"), или с
ячейки, расположенной по адресу "start" ("Rstart").
L - реассемблировать и вывести содержимое следующих 192 яче-
Lstart ек памяти, начиная с текущей ("L"), или с ячейки, рас-
Lstart,end положенной по заданному адресу ("Lstart"), или с ячейки
"start" по ячейку "end" ("Lstart,end").
Sstart - вывести в 16-чном формате и, возможно, изменить содержи-
мое ячейки памяти, расположенной по адресу "start". Про-
должить обработку следующих ячеек до ввода символа "."
Astart - вставить, начиная с адреса "start", оператор языка Ас-
семблер. Продолжить обработку следующих ячеек до ввода
символа "." или .
Mstart1,end1,start2 - копировать содержимое области памяти, расположенной с
адреса "start1" по адрес "end1", в другую область па-
мяти, расположенную, начиная с адреса "start2".
G - выполнение программы: полностью, без прерываний;
Gstart начиная с адреса "start";
Gstart,end начиная с адреса "start", с прерыванием по адресу "end";
Gstart,end1,end2 начиная с "start", с прерыванием в "end1", либо в "end2";
G,end начиная с текущей ячейки, с прерыванием по адресу "end";
G,end1,end2 начиная с текущей, с прерыванием в "end1", либо в "end2".
Unumber - выполнить "number" машинных инструкций и по завершению
вывести содержимое всех регистров ЦП.
Тnumber - трассировать выполнение "number" машинных инструкций,
распечатывая содержимое всех регистров ЦП после выпол-
нения каждой инструкции.
Xregister - распечатать содержимое регистра "register" или бита ус-
ловия (регистр F: C,Z,M,E,I) и изменить его, если необ-
ходимо.
Ha,b - использование встроенного калькулятора 16-чных чисел:
a и b - 16-чные числа. Команда после выдает два
числа: a+b и a-b.
Дополнительные команды:
^S - приостанов;
^P - установка эхо-печати;
^N - отмена эхо-печати;
^C - выход из программы с ОС CP/M.
Примечание:
В отлаживаемой программе для возврата в DDT или ZSID ставится не RET, а RST #07.
===== DESPOOL =====
Программа печати в фоновом режиме (DESPOOL.COM).
Параметры запуска:
DESPOOL - загрузка программы с диска в память. После загрузки вводится
^F, после чего программа спрашивает файл для печати:
File name: (надо ввести имя файла)
Далее начинается печать и появляется подсказка системы:
A> или др.
===== LINK-80 =====
Программа-сборщик фирмы Microsoft (L80.COM).
Функции программы:
- Загрузка перемещаемых объектных модулей (.REL).
- Вычисление абсолютных адресов для всех локальных ссылок внутри модулей.
- Разрешение всех неразрешённых глобальных ссылок между загруженными модулями.
- Сохранение всех отлинкованных (соединённых) загруженных модулей в едином исполняемом (машинные коды) файле с расширением .COM.
- Создание таблицы символов (файл с расширением .SYM).
Параметры запуска:
A>L80 или A>L80 file1.ext,file2.ext,...,fileN.ext/E
*█
Ключи программы LINK-80:
|''/G''|Передача управления сформированной программе после того, как закончена её сборка, затем возврат в CP/M после завершения программы. Можно указать стартовый адрес запуска программы: \\ ''/G:nnnn'', где nnnn — 16–чное число (адрес запуска).|
|''/Е''|Завершение работы L80 и возврат в CP/M после выполнения заданных действий. Можно указать стартовый адрес запуска программы: \\ ''/E:nnnn'', где nnnn — 16–чное число (адрес запуска). После завершения выполнения программы (при определенном адресе запуска) управление передается CP/M.|
|''/N''|Все предварительно загруженные программы и подпрограммы должны быть сохранены в файле, имя которого предшествует этому параметру. Другая форма: ''/N:P'' — в файл записывается только содержимое области транзитных программ ([[msx:dos:#tpa|TPA]]). Если этого ключа нет, то выходного файла (с расширением .COM) не создается.|
/P/R/D - /P устанавливает начальный адрес сформированной программы и области
данных; /D - начальный адрес только области данных (если /P исполь-
зуется совместно с /D, то он указывает только начальный адрес прог-
раммы). /R используется для возврата L80 в начальное состояние.
/S - Указывает, что файл сразу после него является библиотечным. L80 будет
просматривать библиотечные файлы, созданные программой LIB80 и искать
те модули, которые могли быть, но еще не использованы в процессе сбор-
ки.
/U/M - /U печатает неопределенные внешние имена; /М - все внешние ссылки.
/O/H - Установка системы счисления: /O - 8-чная, /H - 16-чная.
/X/Y - /X создает вместо исполняемого машинного кода результирующий файл с
неперемещаемым 16-чным объектным кодом (т.е. вместо файла .COM файл
.HEX). /Y создает таблицу символов (файл .SYM), которая используется
при отладке программы (/Y применяется только совместно с /E).
Примечание:
При соединении с ассемблерными программами последние должны ассемблироваться
без окончания: .END
===== LIB-80 =====
Управление библиотечными файлами, содержащими произвольное число модулей в перемещаемом объектном коде, созданных компиляторами фирмы Microsoft: BASIC, Си, Macro-80 и др. (LIB80.COM)
Функции программы:
- Объединение (группирование) различных программ на ассемблере, которые являются подпрограммами для трансляторов.
- Создание библиотек времени исполнения (runtime), содержащих специфические модули, необходимые в процессе исполнения программ.
Параметры запуска:
A>LIB80 или A>LIB80 имена-файлов/ключи
*█
Создание библиотечного файла:
A>LIB80 filelib=file1,file2,...,fileN
где: filelib - имя создаваемого библиотечного файла (по умолчанию .REL, можно
.LIB);
file1,file2,...,fileN - список имен файлов (только перемещаемых объектных),
входящих в библиотеку (по умолчанию .REL).
Примечание: После каждого file? можно перечислить имена модулей, входящих в ис-
ходный файл: ...,file3,file4...
Ключи программы LIB-80:
(обычно ставятся после имени файла, к которому они относятся)
/E - Завершение работы LIB80 (в режиме командных строк) и возврат в CP/M.
Используется только при создании нового библиотечного файла или при
изменении существующего. В остальных случаях для выхода используют ^C
(реинициализация системы). Это важно, т.к. /E переименовывает созда-
ваемый файл .LIB в .REL и уничтожает предыдущую версию. Если /E исполь-
зовать с существующим файлом, и этот файл не обновлен, то он будет уда-
лен. Этого не будет, если рядом с исходным указан результирующий файл.
/R - Изменение расширения имени обрабатываемого файла .LIB на .REL. Нужны
те же меры предосторожности, что и при /E. Использовать только при соз-
дании библиотечного файла. Выполняет то же, что и /E, но не выходит в
CP/M, а попадает в командный режим. Применяется, если, завершив обработ-
ку текущего файла, надо продолжить работу с LIB80.
/L - Выдача на экран списка всех модулей, содержащихся в указанном файле, и
определение всех внешних имен, имеющихся в модуле.
/U - Выдача на экран списка всех неопределенных внешних имен, найденных при
однократном просмотре библиотечного файла. Если в библиотечном файле
какой-либо модуль содержит внешнее имя, которое относится к предыдущему
модулю, то /U выдает это имя на экран.
/C - Отмена всех введенных ранее команд, без завершения работы LIB80. Созда-
ваемый библиотечный файл уничтожается и программа начинает работу заново.
Полезен, если определен некорректный модуль или неправильно введена пос-
ледовательность модулей.
/O - Установка 8-чной системы счисления. Используется совместно с /L.
/H - Установка 16-чной системы счисления. Используется после /O, т.к.
16-чная система устанавливается по умолчанию.
===== CREF-80 =====
Построение отчета о перекрестных ссылках для программ на языке Ассемблера для ОС CP/M (CREF80.COM).
Функция программы:
Обработка специального файла печати, созданного макроассемблером M80.COM для получения списка межмодульных ссылок и точек определения внешних имен. Отчёт используется далее при отладке. В итоге создается файл с нумерацией строк и таблицей ссылок с номерами строк, где обнаружен каждый символ. В каждой строке флагом "#" отмечается символическое имя, которое входит в нее в качестве первой лексемы. Для каждого символического имени в отчете представлено его значение, назначенное ему M80.
Параметры запуска:
A>CREF80 filename.ext=filename
где: filename.ext - имя результирующего файла (расширение по умолчанию .LST,
можно назначать вывод на экран - TTY: и печать - LST:);
filename - имя исходного файла с расширением .CRF, созданного M80.
===== MBASIC =====
Интерпретатор языка BASIC (MBASIC.COM).
Параметры запуска:
A>MBASIC [filename.ext][/ключи]
где: filename.ext - имя BASIC файла (расширение по умолчанию .BAS).
Ключи программы MBASIC:
/F:nnnn - максимальное число файлов с данными, которое может быть открыто
в BASIC программе (если отсутствует, то nnnn равно 3).
/M:nnnn - максимальный объем оперативной памяти, который доступен MBASIC,
резервируется область памяти для программ на Ассемблере Intel 8080,
которая находится перед интерпретатором.
/S:nnnn - максимальный объем записи для файла прямого доступа; nnnn - 10-чное
число, количество байт в одной записи (если отсутствует, то этот
объем равен 128 байтам).
===== BASCOM =====
[[msx:basic_compiler:basic_compiler|Компилятор языка BASIC]] (BASCОМ.COM).
Параметры запуска:
A>BASCОМ file1.ext,file2.ext=file3.ext
где: file1.ext - результирующий файл с промежуточным кодом (расширение по
умолчанию .REL);
file2.ext - файл печати (расширение по умолчанию .LST, можно назначить
вывод на экран - TTY: или на печать - LST:);
file3.ext - исходный файл с текстом программы на BASIC'е
(расширение по умолчанию .BAS).
Ключи программы BASCОМ:
/C - ослабление ограничений на нумерацию строк (не применять совместно с /4);
/D - формировать средства отладки, используемые затем для обнаружения ошибок
при выполнении программы;
/E - в исходной программе содержатся операторы "ON ERROR GOTO" с командой
"RESUME <номер строки>";
/N - отмена вывода результатов ассемблирования объектного кода в файл печати;
/O - замена библиотеки времени исполнения BASLIB.REL на OBSLIB.REL, которая
будет основной библиотекой при работе LINK-80, когда этой программе задан
параметр /E или /G;
/S - запись строк в кавычках в результирующий файл с объектным кодом (.REL), а
не в область данных ОП;
/T - применение соглашений BASIC'а, поддерживаемого интерпретатором BASIC-80
версии 4.51 Microsoft (не применять совместно с /C);
/X - в исходной программе есть операторы "ON ERROR GOTO" с командой "RESUME",
"RESUME 0", "RESUME NEXT";
/Z - использовать по возможности коды операций микропроцессора Z-80;
/4 - применение синтаксиса BASIC'а, поддерживаемого интерпретатором BASIC-80
версии 4.51 Microsoft (не применять совместно с /C).
===== S-BUG =====
Инструментальное средство отладки для микропроцессора Z80 (S-BUG.COM).
Параметры запуска:
S-BUG [filename.ext] - загрузить программу S-BUG и (если присутствует) файл с
отлаживаемой программой "filename.ext" в память.
Команды програмы S-BUG: (см. команды DDT и ZSID)
? Help
A Assemble A [address]
C Trace over CALL C[N] [count]
D Dump memory D [addr] [addr]
E Format FCB E string
F Fill in memory F addr addr dd
G Go user program G [addr] [/addr[(count)] [addr[(count)]]...]
H Hex math H expr [expr]
I Input I [port]
IO Input/Output IO [port]
J Simple Memory check J addr addr
JS Speed Memory Test JS addr addr
K Set permanent break point K addr[(count)] [addr[(count)]]...
Display permanent break point K
KX Reset permanent break point KX [addr]...
L Disassemble L [addr] [addr]
M Move memory to memory M addr addr addr
N Search in memory N addr addr bb [bb]...
O Output O [port] data
P Excecute macro command P
Define macro command P command[:command]...
PX Reset macro command PX
R Read from Disk R [offset]
S Substitute memory S [addr]
T Trace user program T[N] [count]
V Verify memory V addr addr addr
W Write to Disk W addr addr
X Display user register X
Xr Examine user register
r= F A B C D E H L BC DE HL S P X Y SP PC IX IY
F' A' B' C' D' E' H' L' BC' DE' HL'
Y All symbol display Y
Display symbol selective Y symbol(with wild card chr)
YR Append symbol from disk YR file-name[.TYPE]
YS Define symbol YS symbol
YX Kill symbol YX [symbol]
ZAE Abort entry Enable ZAE
ZAD Abort entry Disable ZAD
{{cpm_utils.msx|}}
{{cpm_utils.zip|}}
{{anchor:fs}}
====== Сравнительная характеристика файловых структур операционных систем CP/M, MSX и MS DOS ======
FIXME
М.Г.Эпиктетов — Сравнительная характеристика файловых структур операционных систем [[cp_m:|]], [[msx:dos:|]] и [[ms_dos:]].
Структура диска [[cp_m:cp_m|]]:
^Системные \\ дорожки| <- при загрузке в память читается первый сектор файловая система эти дорожки не трогает!|
^Область \\ оглавления| <- начало файловой системы на диске|
^Область \\ данных| |
^ …|:::|
Имеется описатель диска (Disk Parameter Block), который полностью определяет физический формат дискеты (количество секторов, системных дорожек, элементов оглавления и пр.), однако его положение в системной области не определено — BIOS при работе с файловой системой должен получить его от вызываемой программы.
Весь диск, кроме системных дорожек, разбит на группы — последовательности физических секторов размером 128x2((Смотри [[#cmpfscpmmsxmsdos1|Примечание 1]])) байт (от 1Кб до 16Кб, на Корвете — 2Кб). Группа является неделимым квантом файловой системы (аналогично кластеру в [[ms_dos:ms_dos|]]).
Оглавление диска имеет фиксированный размер (на Корвете — 2 группы, на 128 элементов). На файл может выделяться несколько элементов каталога (экстентов), каждый размером по 32 байта:
|Usr|Имя файла + расширение|Ext|1|2|Размер|
|Номера групп, занимаемых файлом (на 16Кб)||||||
где
* Usr — код пользователя (USER) от 0 до 15. Значение поля, равное 0E5H означает, что файл удалён.
* Имя… — 11 байт, задающих имя и расширение файла в разобранном виде (без точки, дополненное пробелами). \\ В старшем бите трёх символов расширения указываются атрибуты файла ($SYS, $R/O и ?…).
* Ext — номер экстента. Поскольку в директории есть место описание положения только 16Кб, для более длинных файлов заводится несколько элементов каталога, отличающихся номером экстента.
* 1, 2 — два байта зарезервировано для системных нужд.
* Размер — размер файла в 128–байтовых записях.
В зависимости от размера диска на номер группы может отводиться разное число байт. На Корвете номер группы занимает 2 байта (таким образом, один экстент содержит 8 групп, как и было обещано).
(?) имеется предположение, что директорию можно свободно двигать в пределах первых 16 групп, но это не задокументировано и не проверено экспериментально (в DPB имеется 16 бит, в которых положение оглавления указано единицами, но обычно в 1 установлено несколько старших битов).
Структура диска [[msx:dos:|]] и [[ms_dos:|]]:
^Boot \\ sector|<- при загрузке читается в память,содержит программу начальной загрузки и параметры, описывающие физический формат дискеты: размеры сектора и кластера, количество зарезервированных секторов и FAT'ов, корневой директории|
^Reserved \\ sectors|<- могут отсутствовать|
^FAT N 1| |
^FAT N 2|<- может отсутствовать|
^ …| |
^Root \\ directory| |
^Data area| |
^ …|:::|
[[msx:dos:|]] = [[ms_dos:|]], прошедший хорошую "предпродажную подготовку": из [[ms_dos:ms_dos|]] убрали зарезервированные сектора, поддиректории, количество FAT и размер директории фиксированны, и т.д.
Формат загрузочного сектора:
00: jmp начальная загрузка ; команда процессора 8086 !
03: db "YD-640 " ; ASCII string of OEM name
0B: dw Sector_size ; размер сектора (в байтах)
0D: db Cluster_size ; размер кластера (в секторах)
0E: dw Res_sect ;
10: db Num_FATs ; количество FAT'ов
11: dw Root_lenght ; размер корневой директории
13: dw Total_sectors ; (количество файлов)
15: db Media_descr ; описание носителя
16: dw Sect_FATs ; размер FAT'ов (в секторах)
18: dw Sect track ; кол-во секторов на дорожке
1A: dw Num_heads ;
1C: dw Num_hidden ; кол-во зарезервированных секторов на диске.
1E: программа начальной загрузки
FAT (File Allocation Table) содержит описание того, как расположены файлы на диске. В области данных физические сектора объединены в кластеры, их нумерация начинается (почему﹣то) с 002, поэтому первые 3 или 4 байта FAT свободны (в первом байте лежит media descriptor). На каждый кластер (неделимый квант при записи файла, на MSX — 2 сектора, 1Кб) диска отводится 12 или 16 бит (число бит определяется автоматически в зависимости от количества кластеров на диске), в которых содержится:
* 0 — пустой кластер,
* -9 — bad cluster,
* -1 — конец цепочки (последний кластер файла),
* иначе — номер следующего кластера в цепочке.
Корневая директория (в MSX других нет) содержит по 32 байта на каждый файл (независимо от длины) в следующем формате:
|Имя файла+расширение|Атрибуты|Дата|Время|First|Размер файла|
где
* Имя… — 11 байт, задающих имя и расширение файла в разобранном виде (без точки, дополненное пробелами). \\ Первый байт, равный 0E5h означает, что файл удалён из директории.
* Атрибуты 1 байт:
* 1 = Read only (нет в MSX)
* 2 = Hidden
* 4 = System
* 8 = Volume label entry
* 16 = Subdirectory entry
* 32 = Archive
* Дата/Время создания файла ( по 2 байта )
* Зарезервировано (на MSX всегда лежат нули)
* First — номер первого кластера файла (начало цепочки для данного файла) — 2 байта.
* Размер — размер файла в символах (4 байта %% => %% максимально большой файл может занимать 4Мб-1).
В системе [[ms_dos:ms_dos|]] можно заводить поддиректории — обычные (с точки зрения файловой системы) файлы, имеющие формат корневой директории, но неограниченный размер.
Недостатки [[cp_m:cp_m|]] и достоинства [[ms_dos:ms_dos|]]:
- В стандарте [[cp_m:cp_m|]] не описано, в каком месте системной области содержится информация о формате диска. Из﹣за этого диск, записанный на Корвете в Микродосе нельзя прочесть стандартными средствами в CP/M 2.2 ( у них разное число системных дорожек). \\ С другой стороны, диски, записанные на MSX в [[msx:dos:|]] легко читаются и на APRICOTe и на ATARI.
- Из﹣за того, что [[cp_m:cp_m|]] не поддерживает на диске таблицу свободного места (она каждый раз строится в памяти), становится невозможной поддержка поддиректорий (иначе расходы на формирование таблицы станут слишком велики — надо будет просканировать несколько файлов, расположенных в разных местах диска). Таким образом, [[cp_m:cp_m|]] рассчитана на работу только с гибкими дисками.
- Надёжность [[cp_m:cp_m|]] , судя по всему, ниже — ошибка в директории ведёт к потере файла. В [[ms_dos:ms_dos|]] фатальной является только ошибка в FAT (после ошибки в директории потеряются имена файлов и время создания, все остальное можно восстановить), но они могут храниться в нескольких экземплярах и постоянно сравниваться.
- Мелкие достоинства [[ms_dos:ms_dos|]]: размер файла в байтах, а не в записях; имеется поле даты создания файла (это очень полезно, например, для программы ''Make'').
{{anchor:cmpfscpmmsxmsdos1}} __//Примечание 1//__ \\
128 байт в данном контексте это размер логического сектора, принятый в [[cp_m:cp_m|]] как стандартный размер минимального блока информации.
Размер файлов в [[cp_m:cp_m|]] всегда кратен числу занятых им логических секторов.
В [[cp_m:cp_m|]] не задаётся какой либо стандарт на структуру данных, которые хранятся на физических носителях, кроме одного — кратность 128 байтам.
Размер физических секторов определяется свойствами и аппаратными особенностями устройств, применяемых для хранения информации.
Если вспомнить о накопителях на гибких магнитных дисках, то размер физических секторов на них всегда был кратен 128 байтам и был равен 128, 256, 512 или 1024 байта.
Кроме размера физического сектора в [[cp_m:cp_m|]] задаётся ещё размер кластера — блока физических секторов — на которые разбивается весь объём физического носителя.
Минимальный размер кластера равен объёму физического сектора, но при большом объёме носителя увеличивается, из–за ограничений максимального размера информации хранимой на устройстве.
//--- Камиль Каримов (caro)//
----
{{compare_fs_cpm_msx_ms-dos.msx}}
====== Краткое описание входных точек CP/M ======
CP/M находится в слоте 83h. Для запуска CP/M необходимо включить в программу фрагмент:
;-------------------------------------------------------------------
rst 30h ;Запуск CP/M
defb 83h
defw 405Ah
;-------------------------------------------------------------------
При запуске CP/M переносит себя с 4200h на 00C4h и запускается с адреса 16C4h, по которому находится таблица JP. Кроме того, дубль CP/M переносится с 4200h на C400h, причем все обращения идут именно туда.
Адреса подпрограмм, к которым обращается CP/M при прерываниях:
|5B1Bh|SETADR|Установка адресов для прерываний||
|DA03h|CALL0| Адрес для |JP 0|
|CC06h|CALL5|:::|JP 5|
|DA45h|CALLC|:::|JP 0Ch|
|DA4Bh|CALL14|:::|JP 14h|
|DA51h|CALL1C|:::|JP 1Ch|
|DA57h|CALL24|:::|JP 24h|
|DB47h|CALL30|:::|JP 30h|
Таблица адресов BDOS находится по адресу CC47h в формате:
Low byte ; High byte
Low byte ; High byte
..........
{{cpm_entry_points.msx}}
----
====== ZCPR2 ======
{{ :msx:cp_m:zcpr2.zip |1 дискета × 720 Кбайт}}
ZCPR (the Z80 Command Processor Replacement) — это альтернативный командный процессор для CP/M. Он обладает некоторыми преимуществами в сравнении со штатным CCP.
ZCPR2 был адаптирован Камилем Каримовым (Caro) для работы на MSX под CP/M 2.2 в феврале 2022 года.
{{anchor:games}}
====== Игры ======
Этот {{games.dsk|диск с играми}} появился тут благодаря усилиям **Камиля Каримова(Caro)** и **ATroubleshooter**.
[[+tab|wmsx>?DISK=/_media/msx/cp_m/games.dsk&BASIC_ENTER=--DIR|Открыть диск с играми в WebMSX]]
* [[+tab|wmsx>?DISK=/_media/msx/cp_m/games.dsk&BASIC_ENTER=--CatChum|CatChum]]
* [[+tab|wmsx>?DISK=/_media/msx/cp_m/games.dsk&BASIC_ENTER=--Ladder|Ladder]]
* [[+tab|wmsx>?DISK=/_media/msx/cp_m/games.dsk&BASIC_ENTER=--Zork|Zork]]
* [[+tab|wmsx>?DISK=/_media/msx/cp_m/games.dsk&BASIC_ENTER=--Bowling|Bowling]]
* [[+tab|wmsx>?DISK=/_media/msx/cp_m/games.dsk&BASIC_ENTER=--Gorilla|Gorilla]]
* [[+tab|wmsx>?DISK=/_media/msx/cp_m/games.dsk&BASIC_ENTER=--Hitch|Hitchhiker's Guide to the Galaxy]]
====== Ссылки ======
[[zxpkru>threads/30163-vstroennaya-cp-m-sistema-v-uchinicheskie-yamakhi-kuvt2.html|Встроенная CP/M система в ученические Ямахи КУВТ2]]
[[zxpkru>threads/30162-disk-s-nadpisyu-cp-m-kotoryj-shel-v-komplekte.html?p=1004234&viewfull=1#post1004234|Диск с надписью CP/M который шел в комплекте, сообщение #24]]
[[msxorg>/forum/msx-на-русском/софт/cpm-на-msx|CP/M на MSX]]
{{tag>MSX OS}}