====== 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}}