Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
msx:vbc:vbc [2021-05-08 13:50] GreyWolf |
msx:vbc:vbc [2023-08-01 13:02] (текущий) GreyWolf [Ссылки] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== VBC — MSX–совместимый компилятор BASIC (памяти Егора Вознесенского) ====== | + | ====== VBC — MSX–совместимый компилятор BASIC ====== |
+ | |||
+ | Автор: Егор Вознесенский | ||
FIXME | FIXME | ||
Строка 13: | Строка 15: | ||
|{{ibas.txt}}|[[https://cloud.mail.ru/public/NkXF/GaGxMrLgh|оригинал]]| | |{{ibas.txt}}|[[https://cloud.mail.ru/public/NkXF/GaGxMrLgh|оригинал]]| | ||
|{{apguide.txt|}}|[[https://cloud.mail.ru/public/pYku/1cZj8xKkR|оригинал]]| | |{{apguide.txt|}}|[[https://cloud.mail.ru/public/pYku/1cZj8xKkR|оригинал]]| | ||
- | |{{vbc27b.zip|vbc27b}}|[[https://web.archive.org/web/19990430041341/http://cisip.sonnet.ru/MSX/warez/beta/vbc27b.com|оригинал]] | ||
- | | | ||
+ | {{:msx:vbc:vbc.dsk|}} на основе {{vbc27b.zip|vbc27b}}, [[https://web.archive.org/web/19990430041341/http://cisip.sonnet.ru/MSX/warez/beta/vbc27b.com|оригинал]] | ||
+ | \\ [[+tab|wmsx>?DISK=/_media/msx/vbc/vbc.dsk|Открыть диск в WebMSX]] | ||
~~TOC_HERE~~ | ~~TOC_HERE~~ | ||
Строка 32: | Строка 34: | ||
Входной язык представляет собой несколько расширенную версию [[msx:basic:]], состоящую из ядра и расширенную следующими функциями: | Входной язык представляет собой несколько расширенную версию [[msx:basic:]], состоящую из ядра и расширенную следующими функциями: | ||
* оператор цикла ''WHILE … WEND'' (эквивалентен таковому в IBM–бейсике (BASICA, %%GW-BASIC%%). | * оператор цикла ''WHILE … WEND'' (эквивалентен таковому в IBM–бейсике (BASICA, %%GW-BASIC%%). | ||
- | * средства поддержки раздельной компиляции (''[[#PROCEDURE]]'', расширение оператора ''[[msx:basic_programming_guide:07#call|CALL]]'', совместимость с MSX-C. | + | * средства поддержки раздельной компиляции (''[[#PROCEDURE]]'', расширение оператора ''[[msx:basic_dialogue_programming_language:007#call|CALL]]'', совместимость с MSX-C. |
* опция управления компилятором ''[[#PRAGMA]]''. | * опция управления компилятором ''[[#PRAGMA]]''. | ||
Строка 83: | Строка 85: | ||
Компилятор соответствует [[msx:basic:]], с учётом пп. [[#n211|1.1]] и [[#n213|1.3]] и включает в себя: | Компилятор соответствует [[msx:basic:]], с учётом пп. [[#n211|1.1]] и [[#n213|1.3]] и включает в себя: | ||
* математические возможности — полностью; | * математические возможности — полностью; | ||
- | * работу с памятью — всё, кроме ''[[msx:basic_programming_guide:01#erase|ERASE]]''; | + | * работу с памятью — всё, кроме ''[[msx:basic_dialogue_programming_language:001#erase|ERASE]]''; |
* графику — полностью [[#note1|*)]]; | * графику — полностью [[#note1|*)]]; | ||
* музыкальные возможности — согласно спецификации PSG [[#note1|*)]]; | * музыкальные возможности — согласно спецификации PSG [[#note1|*)]]; | ||
Строка 89: | Строка 91: | ||
* ввод–вывод — полностью, с исключениями согласно [[#n213|п. 1.3]]; | * ввод–вывод — полностью, с исключениями согласно [[#n213|п. 1.3]]; | ||
* управляющие операторы: все, добавлен цикл ''[[#while|WHILE]]'', | * управляющие операторы: все, добавлен цикл ''[[#while|WHILE]]'', | ||
- | * исключение: не определён результат ''[[msx:basic_programming_guide:08#resume|RESUME]]'' без параметров; | + | * исключение: не определён результат ''[[msx:basic_dialogue_programming_language:008#resume|RESUME]]'' без параметров; |
| | ||
Соответствие MSX-2 стандарту: | Соответствие MSX-2 стандарту: | ||
Строка 95: | Строка 97: | ||
* системные функции: | * системные функции: | ||
* ''COPY SCREEN'' | * ''COPY SCREEN'' | ||
- | * ''[[msx:basic_programming_guide:07#gettime|GET TIME]]'' | + | * ''[[msx:basic_dialogue_programming_language:007#gettime|GET TIME]]'' |
- | * ''[[msx:basic_programming_guide:07#settime|SET TIME]]'' | + | * ''[[msx:basic_dialogue_programming_language:007#settime|SET TIME]]'' |
- | * ''[[msx:basic_programming_guide:07#getdate|GET DATE]]'' | + | * ''[[msx:basic_dialogue_programming_language:007#getdate|GET DATE]]'' |
- | * ''[[msx:basic_programming_guide:07#setdate|SET DATE]]'' | + | * ''[[msx:basic_dialogue_programming_language:007#setdate|SET DATE]]'' |
- | * ''[[msx:basic_programming_guide:07#setbeep|SET BEEP]]'' | + | * ''[[msx:basic_dialogue_programming_language:007#setbeep|SET BEEP]]'' |
- | * ''[[msx:basic_programming_guide:07#setadjust|SET ADJUST]]'' | + | * ''[[msx:basic_dialogue_programming_language:007#setadjust|SET ADJUST]]'' |
* ''PUT KANJI'' | * ''PUT KANJI'' | ||
* функции работы с палитрой. | * функции работы с палитрой. | ||
Строка 110: | Строка 112: | ||
{{anchor:note1}} | {{anchor:note1}} | ||
- | __//Примечание://__ *) — звёздочкой отмечены полностью совместимые с MSX-стандартом разделы, в которых имеется, однако, одно исключение: в макроязыке операторов ''[[msx:basic_programming_guide:05#draw|DRAW]]'' и ''[[msx:basic_programming_guide:06#play|PLAY]]'' не определён параметр X (смотри руководство по [[msx:basic:]]), что обусловлено особенностями работы откомпилированной программы с памятью. | + | __//Примечание://__ *) — звёздочкой отмечены полностью совместимые с MSX-стандартом разделы, в которых имеется, однако, одно исключение: в макроязыке операторов ''[[msx:basic_dialogue_programming_language:005#draw|DRAW]]'' и ''[[msx:basic_dialogue_programming_language:006#play|PLAY]]'' не определён параметр X (смотри руководство по [[msx:basic:]]), что обусловлено особенностями работы откомпилированной программы с памятью. |
Функции, соответствующие более позднему MSX-стандарту, могут быть реализованы на машине более раннего стандарта при условии наличия необходимых аппаратных средств и (или) BIOS. | Функции, соответствующие более позднему MSX-стандарту, могут быть реализованы на машине более раннего стандарта при условии наличия необходимых аппаратных средств и (или) BIOS. | ||
Например ''SET SCROLL'' можно выполнять на всех компьютерах с [[msx:yamaha_v9938:yamaha_v9938|V9938]], но при этом скроллинг будет только по вертикали. | Например ''SET SCROLL'' можно выполнять на всех компьютерах с [[msx:yamaha_v9938:yamaha_v9938|V9938]], но при этом скроллинг будет только по вертикали. | ||
- | Часть операторов (например ''[[msx:basic_programming_guide:07#setpassword|SET PASSWORD]]'' или ''[[msx:basic_programming_guide:05#servideo|SET VIDEO]]''), не реализованы или как не имеющие смысла в откомпилированной программе или как редко употребляемые. Их, при необходимости, можно эмулировать соответствующими комбинациями OUT'ов. | + | Часть операторов (например ''[[msx:basic_dialogue_programming_language:007#setpassword|SET PASSWORD]]'' или ''[[msx:basic_dialogue_programming_language:005#servideo|SET VIDEO]]''), не реализованы или как не имеющие смысла в откомпилированной программе или как редко употребляемые. Их, при необходимости, можно эмулировать соответствующими комбинациями OUT'ов. |
{{anchor:n213}} | {{anchor:n213}} | ||
Строка 122: | Строка 124: | ||
Отходы от стандартов обусловлены оптимизацией получаемого кода и невозможностью реализации части функций в модели компилируемой программы. Эти отходы перечислены ниже: | Отходы от стандартов обусловлены оптимизацией получаемого кода и невозможностью реализации части функций в модели компилируемой программы. Эти отходы перечислены ниже: | ||
* Все функции ввода/вывода а также внешние функции получают и возвращают параметры только целого типа, например номер записи в операторах GET / PUT должен быть 1…65535; | * Все функции ввода/вывода а также внешние функции получают и возвращают параметры только целого типа, например номер записи в операторах GET / PUT должен быть 1…65535; | ||
- | * Память под массивы и переменные выделяется 1 раз при компиляции, поэтому оператор ''[[msx:basic_programming_guide:01#erase|ERASE]]'' не определён, ''[[#clear|CLEAR]]'' очищает только строки и файлы и при объявлении массивов для указания размерностей следует использовать ТОЛЬКО константы. | + | * Память под массивы и переменные выделяется 1 раз при компиляции, поэтому оператор ''[[msx:basic_dialogue_programming_language:001#erase|ERASE]]'' не определён, ''[[#clear|CLEAR]]'' очищает только строки и файлы и при объявлении массивов для указания размерностей следует использовать ТОЛЬКО константы. |
* Массивы могут быть одномерные или двумерные — это досадное недоразумение, которое легко обойти, проэмулировав массив большей размерности. | * Массивы могут быть одномерные или двумерные — это досадное недоразумение, которое легко обойти, проэмулировав массив большей размерности. | ||
* Типы переменных жёстко связаны с именами. Нельзя, например использовать в одной программе A и A$, а также массив с именем, совпадающим с именем простой переменной. Подробнее об этом в [[#n23|главе 3]]. | * Типы переменных жёстко связаны с именами. Нельзя, например использовать в одной программе A и A$, а также массив с именем, совпадающим с именем простой переменной. Подробнее об этом в [[#n23|главе 3]]. | ||
Строка 250: | Строка 252: | ||
Во всех остальных случаях результатом будет адрес переменной или массива, куда произошло присваивание. | Во всех остальных случаях результатом будет адрес переменной или массива, куда произошло присваивание. | ||
- | |||
- | Этот оператор является очень мощным средством рационализации кода программ, но так как его применение достаточно сложно, он рекомендуется только очень опытным программистам. | ||
- | |||
- | Пример применения оператора: | ||
- | <code> | ||
- | WHILE ( {A%={B%=B%-1}>0} ): … … :WEND | ||
- | </code> | ||
- | Здесь происходит B% итераций цикла ''WHILE'', причём в каждой из них переменная А% содержит значение истинности для условия продолжения цикла. | ||
{{anchor:n2323}} | {{anchor:n2323}} | ||
=== 3.2.3 Функции === | === 3.2.3 Функции === | ||
- | В математических выражениях можно употреблять функции, [[msx:basic_programming_guide:201#functions|определённые в MSX]], причём их действие стандартно, поэтому здесь будут полно описаны лишь три функции, которые можно | + | В математических выражениях можно употреблять функции, [[msx:basic_dialogue_programming_language:201#functions|определённые в MSX]], причём их действие стандартно, поэтому здесь будут полно описаны лишь три функции, которые можно |
употребить не только в соответствии со стандартом. | употребить не только в соответствии со стандартом. | ||
Строка 356: | Строка 350: | ||
{{anchor:while}} | {{anchor:while}} | ||
<code>WHILE <выражение></code> начало цикла с неизвестным числом повторений. Цикл выполняется до тех пор, пока <выражение> не равно нулю. Тело цикла может не выполняться ни одного раза. | <code>WHILE <выражение></code> начало цикла с неизвестным числом повторений. Цикл выполняется до тех пор, пока <выражение> не равно нулю. Тело цикла может не выполняться ни одного раза. | ||
+ | |||
+ | Этот оператор является очень мощным средством рационализации кода программ, но так как его применение достаточно сложно, он рекомендуется только очень опытным программистам. | ||
+ | |||
+ | Пример применения оператора: | ||
+ | <code> | ||
+ | WHILE ( {A%={B%=B%-1}>0} ): … … :WEND | ||
+ | </code> | ||
+ | Здесь происходит B% итераций цикла ''WHILE'', причём в каждой из них переменная А% содержит значение истинности для условия продолжения цикла. | ||
''WEND'' — конец цикла ''WHILE''. Закрывает самый вложенный цикл. | ''WEND'' — конец цикла ''WHILE''. Закрывает самый вложенный цикл. | ||
Строка 401: | Строка 403: | ||
|функция ''POINT(X,Y)''|возвращает цвет точки| | |функция ''POINT(X,Y)''|возвращает цвет точки| | ||
- | Все эти операторы полностью совместимы с MSX, и подробнее об особенностях их применения и значении параметров можно узнать в любом руководстве по [[msx:basic:]], например, [[msx:basic_programming_guide:05|здесь]] | + | Все эти операторы полностью совместимы с MSX, и подробнее об особенностях их применения и значении параметров можно узнать в любом руководстве по [[msx:basic:]], например, [[msx:basic_prograbasic_dialogue_programming_languagemming_guide:005|здесь]] |
Логические операции те же, что и в [[msx:basic:#v2x|MSX BASIC 2.x]] (для [[msx:msx_2|]]): ''PSET'', ''PRESET'', ''AND'', ''OR'', ''XOR'' с и без префикса ''Т''. Они имеют смысл и действие только в экранных режимах [[msx:msx_2|]] ''SCREEN 5…8''. | Логические операции те же, что и в [[msx:basic:#v2x|MSX BASIC 2.x]] (для [[msx:msx_2|]]): ''PSET'', ''PRESET'', ''AND'', ''OR'', ''XOR'' с и без префикса ''Т''. Они имеют смысл и действие только в экранных режимах [[msx:msx_2|]] ''SCREEN 5…8''. | ||
Строка 409: | Строка 411: | ||
Полностью соответствуют MSX-спецификации; ниже приведен список операторов, которые контролируют спрайты. Подробные сведения об их использовании можно получить из литературы по | Полностью соответствуют MSX-спецификации; ниже приведен список операторов, которые контролируют спрайты. Подробные сведения об их использовании можно получить из литературы по | ||
- | [[msx:msx_1|]] и [[msx:msx_2|]], например [[msx:basic_programming_guide:05#sprites|здесь]] и [[msx:basic_programming_guide:11#sprites|здесь]]. | + | [[msx:msx_1|]] и [[msx:msx_2|]], например [[msx:basic_dialogue_programming_language:005#sprites|здесь]] и [[msx:basic_dialogue_programming_language:011#sprites|здесь]]. |
<code>SPRITE$ ( N ) = <строка></code> | <code>SPRITE$ ( N ) = <строка></code> | ||
Строка 465: | Строка 467: | ||
FIXME | FIXME | ||
- | ''SCREEN'' — устанавливает экранный режим и другие параметры системы. Имеют смысл все его параметры, все они полностью стандартны, поподробнее [[msx:basic_programming_guide:05#screen|здесь]]. | + | ''SCREEN'' — устанавливает экранный режим и другие параметры системы. Имеют смысл все его параметры, все они полностью стандартны, поподробнее [[msx:basic_dialogue_programming_language:005#screen|здесь]]. |
Строка 522: | Строка 524: | ||
<code>ОN SPRITE GOSUB</code> происходит прерывание при обнаружении наложения спрайтов | <code>ОN SPRITE GOSUB</code> происходит прерывание при обнаружении наложения спрайтов | ||
<code>ОN STOP GOSUB</code> вызывает прерывание по нажатию <key>CTRL+STOP</key>. \\ При этом остановки программы не происходит. ''STOP OFF'' вообще отключает возможность остановки программы <key>CTRL+STOP</key>, ''STOP ON'' разрешает её, но и прерывание тоже (если оно было установлено ранее.) | <code>ОN STOP GOSUB</code> вызывает прерывание по нажатию <key>CTRL+STOP</key>. \\ При этом остановки программы не происходит. ''STOP OFF'' вообще отключает возможность остановки программы <key>CTRL+STOP</key>, ''STOP ON'' разрешает её, но и прерывание тоже (если оно было установлено ранее.) | ||
- | <code>ON ERROR GOTO</code> определяет программу обработки ошибок, возврат из этой программы осуществляется оператором ''[[msx:basic_programming_guide:08#resume|RESUME]]'' | + | <code>ON ERROR GOTO</code> определяет программу обработки ошибок, возврат из этой программы осуществляется оператором ''[[msx:basic_dialogue_programming_language:008#resume|RESUME]]'' |
{{anchor:advanced_programmers_guide}} | {{anchor:advanced_programmers_guide}} | ||
Строка 834: | Строка 836: | ||
[[msxorg>/forum/msx-на-русском/софт/недооцененные-возможности-msx-basic?page=2| | [[msxorg>/forum/msx-на-русском/софт/недооцененные-возможности-msx-basic?page=2| | ||
- | Недооцененные возможности MSX Basic ]] | + | Недооцененные возможности MSX Basic]] |
[[https://web.archive.org/web/19990427054551/http://www.glasnet.ru/%7Emsxegor/sws.html|SOLiD homepage: MSX Warez Stock]] | [[https://web.archive.org/web/19990427054551/http://www.glasnet.ru/%7Emsxegor/sws.html|SOLiD homepage: MSX Warez Stock]] | ||
- | {{tag>Programming MSX BASIC}} | + | [[http://web.archive.org/web/20020225161257/http://195.178.221.229/msx/warez/index.htm|Novatec Archive - categories]] |
+ | |||
+ | |||
+ | {{tag>Programming MSX BASIC voznesensky_e_g}} |