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