Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
msx:nextor:disk_basic [2022-08-05 22:07] GreyWolf |
msx:nextor:disk_basic [2022-09-09 22:25] (текущий) GreyWolf |
||
---|---|---|---|
Строка 17: | Строка 17: | ||
===== Свободное место на диске ===== | ===== Свободное место на диске ===== | ||
- | Оригинальная функция ''[[msx:basic_programming_guide:09#dskf|DSKF()]]'', указывающая свободное место на диске, возвращает число свободных кластеров в [[msx:dos:|]]. В [[msx:nextor:nextor|Nextor]] поведение этой команды было изменено: теперь возвращает количество свободных Кбайт. | + | Оригинальная функция ''[[msx:basic_dialogue_programming_language:009#dskf|DSKF()]]'', указывающая свободное место на диске, возвращает число свободных кластеров в [[msx:dos:|]]. В [[msx:nextor:nextor|Nextor]] поведение этой команды было изменено: теперь возвращает количество свободных Кбайт. |
Это эти изменения кардинально отличают её поведение от [[msx:dos:|]]. Однако большинство существующих программ, использующих эту команду, на самом деле не рассчитывают количество свободного пространства в Кбайтах, вместо этого отображается необработанный счётчик кластеров для пользователя. Кроме того, в течение многих лет наиболее популярным носителем данных для компьютеров MSX была дискета 2DD, размер кластера которой составлял 1 Кбайт, поэтому многие пользователи ошибочно полагали, что команда ''DSKF'' все равно возвращает значение в Кбайт. | Это эти изменения кардинально отличают её поведение от [[msx:dos:|]]. Однако большинство существующих программ, использующих эту команду, на самом деле не рассчитывают количество свободного пространства в Кбайтах, вместо этого отображается необработанный счётчик кластеров для пользователя. Кроме того, в течение многих лет наиболее популярным носителем данных для компьютеров MSX была дискета 2DD, размер кластера которой составлял 1 Кбайт, поэтому многие пользователи ошибочно полагали, что команда ''DSKF'' все равно возвращает значение в Кбайт. | ||
- | Но эти изменения не применяется к режиму [[msx:dos:#v1x|MSX-DOS 1]], в этом режиме счётчик свободных кластеров по–прежнему возвращается как счётчик кластеров. | + | Но эти изменения не применяется к режиму [[msx:dos:|]], в этом режиме счётчик свободных кластеров по–прежнему возвращается как счётчик кластеров. |
{{anchor:dski}} {{anchor:dsko}} | {{anchor:dski}} {{anchor:dsko}} | ||
===== Работа с секторами диска ===== | ===== Работа с секторами диска ===== | ||
- | Оригинальные функция ''[[msx:basic_programming_guide:09#09#dski|DSKI$()]]'' и команда ''[[msx:basic_programming_guide:09#09#dsko|DSKO$]]'', которые позволяют считывать и записывать один сектор диска соответственно, теперь принимают 32–битные номера секторов, что позволяет получить доступ к любому сектору диска, а не только к первым 65536 секторам. | + | Оригинальные функция ''[[msx:basic_dialogue_programming_language:009#dski|DSKI$()]]'' и команда ''[[msx:basic_dialogue_programming_language:009#dsko|DSKO$]]'', которые позволяют считывать и записывать один сектор диска соответственно, теперь принимают 32–битные номера секторов, что позволяет получить доступ к любому сектору диска, а не только к первым 65536 секторам. |
Чтобы получить доступ к секторам с номерами свыше 32767, номер сектора должен быть указан как константа одинарной или двойной точности, выражение или переменная. Если указано значение с одинарной точностью, а число настолько велико, что одна или несколько младших цифр номера теряются из–за округления, эти команды завершатся с ошибкой «Overflow»(переполнение). Это разработано таким образом, чтобы предотвратить случайный доступ к неправильному сектору. | Чтобы получить доступ к секторам с номерами свыше 32767, номер сектора должен быть указан как константа одинарной или двойной точности, выражение или переменная. Если указано значение с одинарной точностью, а число настолько велико, что одна или несколько младших цифр номера теряются из–за округления, эти команды завершатся с ошибкой «Overflow»(переполнение). Это разработано таким образом, чтобы предотвратить случайный доступ к неправильному сектору. | ||
Строка 50: | Строка 50: | ||
</code> | </code> | ||
- | Эта команда просто вывод на экран список новых команд для оператора [[msx:basic_programming_guide:07#call|CALL]], которые [[msx:nextor:nextor|Nextor]] предоставляет для среды [[msx:basic:|]]. | + | Эта команда просто вывод на экран список новых команд для оператора [[msx:basic_dialogue_programming_language:007#call|CALL]], которые [[msx:nextor:nextor|Nextor]] предоставляет для среды [[msx:basic:|]]. |
Список команд: | Список команд: | ||
Строка 157: | Строка 157: | ||
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | Обратите внимание, что эта команда недоступна в режиме [[msx:dos:#v1x|MSX-DOS 1]], в котором отсутствует понятие «блокировка диска». | + | Обратите внимание, что эта команда недоступна в режиме [[msx:dos:|]], в котором отсутствует понятие «блокировка диска». |
</WRAP> | </WRAP> | ||
Строка 177: | Строка 177: | ||
===== CALL USR ===== | ===== CALL USR ===== | ||
- | Команда ''CALL USR'' позволяет выполнять код на ассемблере из программы на [[msx:basic:|]]. Он эквивалентен стандартной команде ''[[msx:basic_programming_guide:101#def_usr|DEF USR]]'' и функции ''[[msx:basic_programming_guide:101#usr|USR]]'', но с дополнительной функцией: он позволяет указывать входные значения регистров [[zilog_z80:zilog_z80|Z80]] для кода, который нужно выполнить, и считывать выходные значения после выполнения. | + | Команда ''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'' выглядит следующим образом: | ||
Строка 184: | Строка 184: | ||
</code> | </code> | ||
где: | где: | ||
- | * ''<code address>'' — адрес кода ассемблера, который будет выполнен. \\ Значение -1 рассматривается как особый случай: ''_USR (-1)'' ничего не сделает, но не выдаст ошибку. Вы можете использовать эту функцию вместе с командой ''[[msx:basic_programming_guide:08#onerorrgoto|ON ERROR GOTO]]'', чтобы обнаружить присутствие [[msx:nextor:nextor|Nextor]] в программе на [[msx:basic:|]]. | + | * ''<code address>'' — адрес кода ассемблера, который будет выполнен. \\ Значение -1 рассматривается как особый случай: ''_USR (-1)'' ничего не сделает, но не выдаст ошибку. Вы можете использовать эту функцию вместе с командой ''[[msx:basic_dialogue_programming_language:008#onerorrgoto|ON ERROR GOTO]]'', чтобы обнаружить присутствие [[msx:nextor:nextor|Nextor]] в программе на [[msx:basic:|]]. |
* ''[,<registers address>]'' — адрес 12–байтового буфера для значений регистров Z80. Если этот параметр указан, регистры будут загружены с содержимым этой области перед вызовом кода; после выполнения кода выполняется обратный процесс: буфер обновляется значениями, хранящимися в регистрах. Порядок регистров в буфере: F, A, C, B, E, D, L, H, IXl, IXh, IYl, IYh. | * ''[,<registers address>]'' — адрес 12–байтового буфера для значений регистров Z80. Если этот параметр указан, регистры будут загружены с содержимым этой области перед вызовом кода; после выполнения кода выполняется обратный процесс: буфер обновляется значениями, хранящимися в регистрах. Порядок регистров в буфере: F, A, C, B, E, D, L, H, IXl, IXh, IYl, IYh. | ||