Введение
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.0 – found in the 4040 and 3040 floppy drives
2.5 – found in the 8050 floppy drives
2.6 – found in the 1540, 1541 including the one built into the SX 64, 1551, 2031 (+"lp"), and 4031 floppy drives
2.7 – found in the 8050, 8250 (+"lp"), and SFD 1001 floppy drives
3.0 – found in the 1570, external 1571, and 8280 floppy drives (8280: 8 inch), as well as the 9060 and 9090 hard drives
3.1 – found in the built in 1571 drive of C128DCR computers
10.0 – found in the 1581 (3½ inch) floppy drive
Версия 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.
There are also a command for seeking in RELative type files (RECORD#), several block level direct access commands (BLOCK READ, BLOCK WRITE, BUFFER POINTER), block management (BLOCK ALLOCATE, BLOCK FREE), drive memory manipulation and execution of program code on the drive's processor (MEMORY WRITE, MEMORY READ, MEMORY EXECUTE, BLOCK EXECUTE) and user definable functions (USER and & commands). Some of the theoretically user definable functions were rededicated for accessing new functionality in DOS versions after 1.0.