Введение

Commodore DOS, также известный как CBM DOS, — это дисковая операционная система, используемая с 8-битными компьютерами Commodore. В отличие от большинства других DOS, которые загружаются с диска в оперативную память компьютера и выполняются там, CBM DOS выполняется непосредственно в дисководе: сама DOS находится в микросхемах ROM внутри дисковода и выполняется там одним или несколькими специализированными процессорами семейства MOS 6502. Таким образом, передача данных между 8-битными компьютерами Commodore и их дисководами больше похожа на подключение к локальной сети, чем на типичную передачу данных между диском и хостом.

Версии CBM DOS

Известно по крайней мере семь различных пронумерованных версий Commodore DOS; в следующем списке указаны номера версий и соответствующие им дисководы. Если не указано иное, дисководы используют формат 5¼ дюйма. Код "lp" обозначает дисководы "низкого профиля". Дисководы, номер модели которых начинается с 15, подключаются через уникальную последовательную шину Commodore IEEE 488 (шина IEC) с использованием последовательных протоколов (TALK/LISTEN); все остальные используют параллельную IEEE 488. 1.0 – обнаружена в дисководах 2040 и 3040. 2.0 – обнаружена в дисководах 4040 и 3040. 2.5 – обнаружена в дисководах 8050. 2.6 – обнаружена в дисководах 1540, 1541, включая встроенный в SX 64, 1551, 2031 (+"lp") и 4031. 2.7 – обнаружена в дисководах 8050, 8250 (+"lp") и SFD 1001. 3.0 – обнаружена в дисководах 1570, внешних 1571 и 8280 (8280: 8 дюймов), а также в жестких дисках 9060 и 9090. 3.1 – обнаружена во встроенном дисководе 1571 компьютеров C128DCR. 10.0 – обнаружена в дисководе 1581 (3½ дюйма).

Версия 2.6 была самой распространенной и известной версией DOS, благодаря ее использованию в 1541 как части систем C64. Примечание: обновленная прошивка для 1571, исправившая ошибку относительного пути к файлу, также была идентифицирована как V3.0. Таким образом, невозможно различить эти две версии, основываясь только на номере версии.

Ошибка сохранения с заменой

Commodore DOS также предлагает команду "Save with Replace", которая позволяет сохранять файл поверх существующего файла без необходимости предварительно УДАЛЯТЬ существующий файл. Это достигалось путем добавления символа "@" к имени файла во время операций OPEN или SAVE, например, на протяжении многих лет распространялись слухи, начиная с дисковода 4040, об ошибке в реализации этой команды. Поначалу некоторые комментаторы отрицали её существование. Были предложены призы за доказательство наличия ошибки. К началу 1985 года журнал Compute! рекомендовал своим читателям избегать использования этой команды. В том же году различные авторы независимо опубликовали статьи, доказывающие, что ошибка "Save with Replace" действительно существует, и описывающие способы её воспроизведения. Подвержены этой ошибке были дисководы 1541 с одним приводом и 4040 с двумя; дисководы 8050 и 8250 работали без сбоев. Некоторые предполагали, что ошибку можно избежать, всегда явно указывая номер диска 0: при сохранении, однако позже выяснилось, что любых дисковых операций без указания номера диска достаточно для её возникновения. Причина ошибки заключалась в том, что затронутые версии DOS были модифицированными версиями DOS, использовавшихся в более ранних дисководах Commodore PET с двумя приводами, таких как 8050. Это приводило к появлению "фантомного диска 1:" в системах с одним дисководом, что вызывало выделение ненужного буфера в определенных условиях. Поскольку команда "Save with Replace" использовала все пять буферов дисковода, а метод выделения "фантомного" буфера не соответствовал спецификациям, это приводило к записи поврежденных данных на диск в некоторых случаях. В сентябре 1986 года Филипп А. Слеймейкер опубликовал статью, в которой подробно описывалась причина ошибки и предлагались патчи для ПЗУ дисковода 1541. Пользователи с программатором ПЗУ могли создавать собственные исправленные ПЗУ, которые можно было заменить в дисководе. Компания Commodore была проинформирована об открытиях Слеймейкера, и хотя она так и не выпустила официальное обновление для оригинальных ПЗУ дисковода 1541, она исправила ошибку в Ревизии 5 ПЗУ дисковода 1571, а также в ПЗУ дисководов 1541c и 1541II. Хотя это и не поддерживается Commodore, известно, что прошивку дисковода 1541II (но не 1541c) также можно использовать в оригинальном дисководе 1541 с помощью ПЗУ, что также устранит ошибку и для этого дисковода.

Команды DOS

Описание команды BASIC 1. x и 2. x Реализация DOS Wedge Реализация BASIC 3.0+ Реализация Новый формат диска, подготовка его к использованию и удаление любых содержащихся на нем данных. Опуская параметр идентификатора из двух символов, можно выполнить быстрое удаление всех файлов на уже отформатированном диске. OPEN 15,8,15,"N0:имя диска,идентификатор":CLOSE 15 @N0:имя диска,идентификатор HEADER "имя диска",идентификатор Scratch Удалить файл с диска (или несколько файлов, используя подстановочные знаки) OPEN 15,8,15,"S0:имя файла":CLOSE 15 @S0:имя файла SCRATCH "имя файла" Переименовать Переименовать файл на диске. Обратите внимание, что новое имя указывается первым (кроме кода BASIC 3.0+)! OPEN 15,8,15,"R0:новое имя=старое имя":CLOSE 15 @R0:новое имя=старое имя RENAME "старое имя" TO "новое имя" Инициализировать Сбросить накопитель и загрузить диск BAM в его внутреннюю память. Обычно это не требуется, так как диск обычно делает это самостоятельно, за исключением случаев замены диска на другой с тем же идентификатором. @I0: DCLEAR (только BASIC 7.0+) Validate Согласовать BAM с каталогом диска, выделить все занятые блоки и освободить все неиспользуемые блоки, а также удалить все незакрытые файлы из каталога. Аналогично инструментам CHKDSK/ScanDisk операционных систем Microsoft. @V0: COLLECT Copy Дублировать файл на том же диске (или на другом диске в одном двухдисковом блоке) под другим именем файла. Обратите внимание, что новое имя указывается первым (кроме кода BASIC 3.0+)! Дублирование на другой диск без двухдискового блока требует использования служебной программы. OPEN 15,8,15,"C0:новое имя=0:существующее имя":CLOSE 15 @C0:новое имя=0:существующее имя COPY"существующее имя"TO"новое имя" Дублировать Дублировать весь диск. Доступно только в двухдисковом блоке, в противном случае необходимо использовать служебную программу. Номер целевого(!) диска указывается первым, затем номер исходного диска (кроме кода BASIC 3.0+). @D1=0 BACKUP D0 TO D1 Есть также команда для поиска в файлах типа RELATIVE (RECORD#), несколько команд прямого доступа к блокам (BLOCK READ, BLOCK WRITE, BUFFER POINTER), управление блоками (BLOCK ALLOCATE, BLOCK FREE), манипулирование памятью диска и выполнение программного кода на процессоре диска (MEMORY WRITE, MEMORY READ, MEMORY EXECUTE, BLOCK EXECUTE) и определяемые пользователем функции (команды USER и &). Некоторые из теоретически определяемых пользователем функций были переназначены для доступа к новым функциям в версиях DOS после 1.0.