Инструменты пользователя

Инструменты сайта


msx:nextor:disk_basic

Nextor — расширения Disk BASIC

Расширения Nextor для MSX Disk BASIC

Дополнения/изменения описаны в следующих разделах:

Команды и функции

Свободное место на диске

Оригинальная функция DSKF(), указывающая свободное место на диске, возвращает число свободных кластеров в MSX-DOS. В Nextor поведение этой команды было изменено: теперь возвращает количество свободных Кбайт.

Это эти изменения кардинально отличают её поведение от MSX-DOS. Однако большинство существующих программ, использующих эту команду, на самом деле не рассчитывают количество свободного пространства в Кбайтах, вместо этого отображается необработанный счётчик кластеров для пользователя. Кроме того, в течение многих лет наиболее популярным носителем данных для компьютеров MSX была дискета 2DD, размер кластера которой составлял 1 Кбайт, поэтому многие пользователи ошибочно полагали, что команда DSKF все равно возвращает значение в Кбайт.

Но эти изменения не применяется к режиму MSX-DOS 1, в этом режиме счётчик свободных кластеров по–прежнему возвращается как счётчик кластеров.

Работа с секторами диска

Оригинальные функция DSKI$() и команда DSKO$, которые позволяют считывать и записывать один сектор диска соответственно, теперь принимают 32–битные номера секторов, что позволяет получить доступ к любому сектору диска, а не только к первым 65536 секторам.

Чтобы получить доступ к секторам с номерами свыше 32767, номер сектора должен быть указан как константа одинарной или двойной точности, выражение или переменная. Если указано значение с одинарной точностью, а число настолько велико, что одна или несколько младших цифр номера теряются из–за округления, эти команды завершатся с ошибкой «Overflow»(переполнение). Это разработано таким образом, чтобы предотвратить случайный доступ к неправильному сектору.

Смена текущего диска

CALL CHDRV

Эта команда изменяет текущий диск, и он уже существует.

Диск может быть указана в виде:

  1. числа 1–8
  2. буква диска от A до H (после буквы двоеточие)

Например,

_CHDRV (3)

то же самое, что

_CHDRV ("C:")

Команды CALL

CALL NEXTOR

Эта команда просто вывод на экран список новых команд для оператора CALL, которые Nextor предоставляет для среды MSX BASIC.

Список команд:

Отобразить текущий диск

CALL CURDRV

Эта команда просто отобразит текущий диск.

Доступные драйверы

CALL DRIVERS

Эта команда эквивалентна программе DRIVERS.COM, которая отображает информацию о доступных драйверах MSX-DOS и Nextor. Отображается имя и версия (только для драйверов Nextor), номер слота и смонтированные диски. Драйверы MSX-DOS будут определены как «Legacy driver» («устаревшие драйверы»).

Доступные диски

CALL DRVINFO

Эта команда эквивалентна программе DRVINFO.COM, которая отображает информацию обо всех доступных буквах дисков (которые не отображаются). Отображаемая информация включает в себя соответствующий слот драйвера и другую информацию, которая зависит от соответствующего типа драйвера (имя и версия драйвера для драйверов Nextor; номера устройств и логических блоков для драйверов на основе устройств Nextor; относительный блок для MSX-DOS и дисков на основе Nextor драйверы). Драйверы MSX-DOS будут определены как «Legacy driver» («устаревшие драйверы»).

Программа разметки блочных устройств

CALL FDISK

Это программа подробно описана здесь.

Блокировка

Эта команда позволяет заблокировать/разблокировать устройство аналогично команде LOCK.COM

Текущее состояние блокировки:

CALL LOCKDRV(<drive>)

Разблокировать:

CALL LOCKDRV(<drive>, 0)

Заблокировать:

CALL LOCKDRV(<drive>, <любое число ≠ 0>)

<drive> — буква диска может быть указана в виде:

  1. числа 1–8
  2. буква диска от A до H (после буквы двоеточие)

Например,

_LOCKDRV (3)

то же самое, что

_LOCKDRV ("C:")

Монтирование

В Nextor есть аналогичная команда: MAPDRV

Монтирование раздела устройства

CALL MAPDRV(<drive>, <partition>, <device>, <slot>|0)

где:

  • <drive> — диск может быть указана в виде:
    1. числа 1–8
    2. буква диска от A до H (после буквы двоеточие)
    3. 0 для текущего устройства
  • <partition> — номер раздела в диапазоне 0–255, интерпретируется следующим образом:
    • 0 — предполагается, что устройство не имеет разделов. Диск будет привязан к абсолютному сектору 0 этого устройства
    • 1 — первый основной раздел устройства
    • 2, 3 или 4 — если раздел устройства 2 расширен, номер интерпретируется как первый, второй или третий расширенный раздел соответственно. В противном случае номер интерпретируется как второй, третий или четвёртый основной раздел устройства соответственно
    • 5 или больше — номер интерпретируется как (n-1) расширенный раздел устройства
  • <device> индекс устройства в диапазоне 1–7. Если устройство имеет несколько логических частей, используйте формулу
    <device>+16*<logical unit>

    (0 также принимается и интерпретируется как 1)

  • <slot> если номер слота находится в диапазоне 0–3. Если слот расширен, нужно использовать формулу:
    <main slot>+4*<subslot>

Пример:

CALL MAPDRV("C:", 2, 1, 6)

Монтирование раздела устройства c блокировкой

Команда CALL MAPDRVL идентична команде CALL MAPDRV, за исключением того, что она выполнит блокировку диска.

В Nextor есть аналогичная команда: LOCK.

Обратите внимание, что эта команда недоступна в режиме MSX-DOS 1, в котором отсутствует понятие «блокировка диска».

Монтирование образа диска

CALL MAPDRV(<drive>, <file> [,0|1])

где:

  • <drive> — диск может быть указана в виде:
    1. числа 1–8
    2. буква диска от A до H (после буквы двоеточие)
    3. 0 для текущего устройства
  • <file> — путь и имя файла с образом диска
  • 1 — монтированию файла образа в режиме только для чтения. Однако, если файл имеет установленный атрибут только для чтения, он всегда будет монтироваться в режиме только для чтения, даже если этот параметр задан.

CALL USR

FIXME

Команда CALL USR позволяет выполнять код на ассемблере из программы на MSX BASIC. Он эквивалентен стандартной команде DEF USR и функции USR, но с дополнительной функцией: он позволяет указывать входные значения регистров Z80 для кода, который нужно выполнить, и считывать выходные значения после выполнения.

Синтаксис команды CALL USR выглядит следующим образом:

CALL USR(<code address> [,<registers address>])

где:

  • <code address> — адрес кода ассемблера, который будет выполнен.
    Значение -1 рассматривается как особый случай: _USR (-1) ничего не сделает, но не выдаст ошибку. Вы можете использовать эту функцию вместе с командой ON ERROR GOTO, чтобы обнаружить присутствие Nextor в программе на MSX BASIC.
  • [,<registers address>] — адрес 12–байтового буфера для значений регистров Z80. Если этот параметр указан, регистры будут загружены с содержимым этой области перед вызовом кода; после выполнения кода выполняется обратный процесс: буфер обновляется значениями, хранящимися в регистрах. Порядок регистров в буфере: F, A, C, B, E, D, L, H, IXl, IXh, IYl, IYh.

Коды ошибок

  • (76) Недопустимый драйвер устройства, выданный командой CALL MAPDRV в любом из следующих событий:
    • Указанный номер слота не содержит драйвер устройства Nextor.
    • Номер слота не указан, но диск в данный момент не сопоставлен с драйвером на основе устройства Nextor.
    • В режиме MSX-DOS 1 диск не был изначально сопоставлен с драйвером на основе устройства Nextor или был сопоставлен с другим драйвером.
  • (77) Недопустимое устройство или LUN, выдаётся командой CALL MAPDRV в любом из следующих событий:
    • Устройство и/или LUN с указанным индексом недоступны для указанного или неявного драйвера.
    • Устройство и/или LUN с указанным индексом существует в указанном или неявном драйвере, но это не блочное устройство.
  • (78) Неверный номер раздела. Эта ошибка выдаётся командой CALL MAPDRV, если указанный раздел не существует на указанном или неявном устройстве.
  • (79) Раздел уже используется. Эта ошибка выдаётся командой CALL MAPDRV, если вы попытаетесь сопоставить комбинацию раздела, устройства и драйвера, которые уже сопоставлены на другом диске. Однако вы можете снова сопоставить ту же комбинацию с тем же диском.
  • (80) Файл смонтирован. Предпринята попытка открыть или изменить смонтированный файл или выполнить любую другую запрещённую операцию, связанную с монтированным файлом.
  • (81) Неверный размер файла. Выдаётся командой CALL MAPDRV при попытке смонтировать файл размером менее 512 байт или более 32 Мбайт.

Ссылки

msx/nextor/disk_basic.txt · Последние изменения: 2020-09-24 13:11 — GreyWolf