====== Nextor — расширения Disk BASIC ====== Расширения [[msx:nextor:nextor|]] для [[msx:disk_basic|]] Дополнения/изменения описаны в следующих разделах: * [[#Команды и функции]] * [[#Команды CALL]] * [[#errors|Коды ошибок]] ====== Команды и функции ====== * ''[[#DSKF|DSKF()]]'' * ''[[#DSKI|DSKI$()]]'' * ''[[#DSKO|DSKO$]]'' {{anchor:dskf}} ===== Свободное место на диске ===== Оригинальная функция ''[[msx:basic_dialogue_programming_language:009#dskf|DSKF()]]'', указывающая свободное место на диске, возвращает число свободных кластеров в [[msx:dos:|]]. В [[msx:nextor:nextor|Nextor]] поведение этой команды было изменено: теперь возвращает количество свободных Кбайт. Это эти изменения кардинально отличают её поведение от [[msx:dos:|]]. Однако большинство существующих программ, использующих эту команду, на самом деле не рассчитывают количество свободного пространства в Кбайтах, вместо этого отображается необработанный счётчик кластеров для пользователя. Кроме того, в течение многих лет наиболее популярным носителем данных для компьютеров MSX была дискета 2DD, размер кластера которой составлял 1 Кбайт, поэтому многие пользователи ошибочно полагали, что команда ''DSKF'' все равно возвращает значение в Кбайт. Но эти изменения не применяется к режиму [[msx:dos:|]], в этом режиме счётчик свободных кластеров по–прежнему возвращается как счётчик кластеров. {{anchor:dski}} {{anchor:dsko}} ===== Работа с секторами диска ===== Оригинальные функция ''[[msx:basic_dialogue_programming_language:009#dski|DSKI$()]]'' и команда ''[[msx:basic_dialogue_programming_language:009#dsko|DSKO$]]'', которые позволяют считывать и записывать один сектор диска соответственно, теперь принимают 32–битные номера секторов, что позволяет получить доступ к любому сектору диска, а не только к первым 65536 секторам. Чтобы получить доступ к секторам с номерами свыше 32767, номер сектора должен быть указан как константа одинарной или двойной точности, выражение или переменная. Если указано значение с одинарной точностью, а число настолько велико, что одна или несколько младших цифр номера теряются из–за округления, эти команды завершатся с ошибкой «Overflow»(переполнение). Это разработано таким образом, чтобы предотвратить случайный доступ к неправильному сектору. {{anchor:call_chdrv}} ===== Смена текущего диска ===== CALL CHDRV Эта команда изменяет текущий диск, и он уже существует. Диск может быть указана в виде: - числа 1–8 - буква диска от A до H (после буквы двоеточие) Например, _CHDRV (3) то же самое, что _CHDRV ("C:") {{anchor:call_nextor}} ====== Команды CALL ====== CALL NEXTOR Эта команда просто вывод на экран список новых команд для оператора [[msx:basic_dialogue_programming_language:007#call|CALL]], которые [[msx:nextor:nextor|Nextor]] предоставляет для среды [[msx:basic:|]]. Список команд: * ''[[#CALL CHDRV]]'' * ''[[#CALL CURDRV]]'' * ''[[#CALL DRIVERS]]'' * ''[[#CALL DRVINFO]]'' * ''[[#CALL FDISK]]'' * ''[[#CALL LOCKDRV]]'' * ''[[#CALL MAPDRV]]'' * ''[[#CALL MAPDRVL]]'' * ''[[#CALL USR]]'' {{anchor:call_curdrv}} ===== Отобразить текущий диск ===== CALL CURDRV Эта команда просто отобразит текущий диск. {{anchor:call_drivers}} ===== Доступные драйверы ===== CALL DRIVERS Эта команда эквивалентна программе ''[[msx:nextor:nextor#drivers|DRIVERS.COM]]'', которая отображает информацию о доступных драйверах [[msx:dos:|]] и [[msx:nextor:nextor|Nextor]]. Отображается имя и версия (только для драйверов [[msx:nextor:nextor|Nextor]]), номер слота и смонтированные диски. Драйверы [[msx:dos:|]] будут определены как "Legacy driver" («устаревшие драйверы»). {{anchor:call_drvinfo}} ===== Доступные диски ===== CALL DRVINFO Эта команда эквивалентна программе ''[[msx:nextor:nextor#drvinfo|DRVINFO.COM]]'', которая отображает информацию обо всех доступных буквах дисков (которые не отображаются). Отображаемая информация включает в себя соответствующий слот драйвера и другую информацию, которая зависит от соответствующего типа драйвера (имя и версия драйвера для драйверов [[msx:nextor:|]]; номера устройств и логических блоков для драйверов на основе устройств [[msx:nextor:|]]; относительный блок для [[msx:dos:|]] и дисков на основе [[msx:nextor:|]] драйверы). Драйверы [[msx:dos:|]] будут определены как "Legacy driver" («устаревшие драйверы»). {{anchor:call_fdisk}} ===== Программа разметки блочных устройств ===== CALL FDISK Это программа подробно описана [[fdisk|здесь]]. {{anchor:call_lockdrv}} ===== Блокировка ===== Эта команда позволяет заблокировать/разблокировать устройство аналогично команде ''[[msx:nextor:nextor#lock|LOCK.COM]]'' Текущее состояние блокировки: CALL LOCKDRV() Разблокировать: CALL LOCKDRV(, 0) Заблокировать: CALL LOCKDRV(, <любое число ≠ 0>) '''' — буква диска может быть указана в виде: - числа 1–8 - буква диска от A до H (после буквы двоеточие) Например, _LOCKDRV (3) то же самое, что _LOCKDRV ("C:") {{anchor:call_mapdrv}} ===== Монтирование ===== В [[msx:nextor:nextor]] есть аналогичная команда: ''[[msx:nextor:nextor#mapdrv|MAPDRV]]'' ==== Монтирование раздела устройства ==== CALL MAPDRV(, , , |0) где: * '''' — диск может быть указана в виде: - числа 1–8 - буква диска от A до H (после буквы двоеточие) - 0 для текущего устройства * '''' — номер раздела в диапазоне 0–255, интерпретируется следующим образом: * 0 — предполагается, что устройство не имеет разделов. Диск будет привязан к абсолютному сектору 0 этого устройства * 1 — первый основной раздел устройства * 2, 3 или 4 — если раздел устройства 2 расширен, номер интерпретируется как первый, второй или третий расширенный раздел соответственно. В противном случае номер интерпретируется как второй, третий или четвёртый основной раздел устройства соответственно * 5 или больше — номер интерпретируется как (n-1) расширенный раздел устройства * '''' индекс устройства в диапазоне 1–7. Если устройство имеет несколько логических частей, используйте формулу +16* (0 также принимается и интерпретируется как 1) * '''' если номер слота находится в диапазоне 0–3. Если слот расширен, нужно использовать формулу:
+4* Пример: CALL MAPDRV("C:", 2, 1, 6) {{anchor:call_mapdrvl}} ==== Монтирование раздела устройства c блокировкой ==== Команда ''CALL MAPDRVL'' идентична команде [[#CALL MAPDRV]], за исключением того, что она выполнит блокировку диска. В [[msx:nextor:nextor]] есть аналогичная команда: ''[[msx:nextor:nextor#lock|LOCK]]''. Обратите внимание, что эта команда недоступна в режиме [[msx:dos:|]], в котором отсутствует понятие «блокировка диска». ==== Монтирование образа диска ==== CALL MAPDRV(, [,0|1]) где: * '''' — диск может быть указана в виде: - числа 1–8 - буква диска от A до H (после буквы двоеточие) - 0 для текущего устройства * '''' — путь и имя файла с образом диска * 1 — монтированию файла образа в режиме только для чтения. Однако, если файл имеет установленный атрибут только для чтения, он всегда будет монтироваться в режиме только для чтения, даже если этот параметр задан. {{anchor:call_usr}} ===== CALL USR ===== Команда ''CALL USR'' позволяет выполнять код на ассемблере из программы на [[msx:basic:|]]. Он эквивалентен стандартной команде ''[[msx:basic_dialogue_programming_language:101#def_usr|DEF USR]]'' и функции ''[[msx:basic_dialogue_programming_language:101#usr|USR]]'', но с дополнительной функцией: он позволяет указывать входные значения регистров [[zilog_z80:zilog_z80|Z80]] для кода, который нужно выполнить, и считывать выходные значения после выполнения. Синтаксис команды ''CALL USR'' выглядит следующим образом: CALL USR( [,]) где: * '''' — адрес кода ассемблера, который будет выполнен. \\ Значение -1 рассматривается как особый случай: ''_USR (-1)'' ничего не сделает, но не выдаст ошибку. Вы можете использовать эту функцию вместе с командой ''[[msx:basic_dialogue_programming_language:008#onerorrgoto|ON ERROR GOTO]]'', чтобы обнаружить присутствие [[msx:nextor:nextor|Nextor]] в программе на [[msx:basic:|]]. * ''[,]'' — адрес 12–байтового буфера для значений регистров Z80. Если этот параметр указан, регистры будут загружены с содержимым этой области перед вызовом кода; после выполнения кода выполняется обратный процесс: буфер обновляется значениями, хранящимися в регистрах. Порядок регистров в буфере: F, A, C, B, E, D, L, H, IXl, IXh, IYl, IYh. {{anchor:errors}} ====== Коды ошибок ====== * (76) Недопустимый драйвер устройства, выданный командой ''[[#CALL MAPDRV]]'' в любом из следующих событий: * Указанный номер слота не содержит драйвер устройства [[msx:nextor:nextor|Nextor]]. * Номер слота не указан, но диск в данный момент не сопоставлен с драйвером на основе устройства [[msx:nextor:nextor|Nextor]]. * В режиме MSX-DOS 1 диск не был изначально сопоставлен с драйвером на основе устройства [[msx:nextor:nextor|Nextor]] или был сопоставлен с другим драйвером. * (77) Недопустимое устройство или LUN, выдаётся командой ''[[#CALL MAPDRV]]'' в любом из следующих событий: * Устройство и/или LUN с указанным индексом недоступны для указанного или неявного драйвера. * Устройство и/или LUN с указанным индексом существует в указанном или неявном драйвере, но это не блочное устройство. * (78) Неверный номер раздела. Эта ошибка выдаётся командой ''[[#CALL MAPDRV]]'', если указанный раздел не существует на указанном или неявном устройстве. * (79) Раздел уже используется. Эта ошибка выдаётся командой ''[[#CALL MAPDRV]]'', если вы попытаетесь сопоставить комбинацию раздела, устройства и драйвера, которые уже сопоставлены на другом диске. Однако вы можете снова сопоставить ту же комбинацию с тем же диском. * (80) Файл смонтирован. Предпринята попытка открыть или изменить смонтированный файл или выполнить любую другую запрещённую операцию, связанную с монтированным файлом. * (81) Неверный размер файла. Выдаётся командой ''[[#CALL MAPDRV]]'' при попытке смонтировать файл размером менее 512 байт или более 32 Мбайт. ====== Ссылки ====== [[github>Konamiman/Nextor/blob/v2.1/docs/Nextor 2.1 User Manual.md#36-extensions-to-disk-basic|Nextor 2.1 User Manual — 3.6. Extensions to Disk BASIC]] {{tag>MSX BASIC}}