====== BASIC Compiler ====== Microsoft BASIC Compiler — это компилятор языка Бейсик из состава пакета Microsoft BASIC-80, для систем на базе Z80 и i8080, работающих под управлением CP/M. В этот пакет также входят варианты интерпретаторов BASIC (BASIC 8, BASIC Ext, BASIC Disk). Но они, на сегодня, не представляют практического интереса в контексте MSX, так как встроенный интерпретатор MSX-BASIC предоставляет гораздо более мощные средства, и гораздо лучше адаптирован именно к возможностям машин стандарта MSX. А, например, runtime-компилятор Бейсика [[msx:x-basic:x-basic|X-BASIC]] — по производительности — сравним с BASIC Compiler, а порой и превосходит его, не говоря уж о, вышеупомянутых, интерпретаторах. BASIC Compiler же нам интересен именно тем, что позволяет генерировать независимый исполняемый COM-файл (standalone executable), не требующий ни расширений ПЗУ−Бейсика (как в случае с X-BASIC), ни предварительной резидентной загрузки Бейсика из файлов (как в случае с [[msx:nestor_basic:nestor_basic|NestorBASIC]]). Требуется лишь MSX-DOS. Скачать Microsoft BASIC Compiler 5.30 можно [[https://download.file-hunter.com/Program%20language/basic-comp.zip|здесь]], линковщик Link-80 взять с образа диска, находящегося[[https://download.file-hunter.com/Program%20language/M80.zip|здесь]]. Доступна также {{msx:basic_compiler:cc_basic_games.zip|классическая коллекция}} игр на Бейсике от CREATIVE COMPUTING, изначально собранных и опубликованных в издании 1973 года [[http://www.bitsavers.org/pdf/dec/_Books/101_BASIC_Computer_Games_Mar75.pdf|"101 BASIC Computer Games"]] . {{ :msx:basic_compiler:bascom_compile.png?400|}} Итак, после того, как Вы распаковали архив с Бейсиком на диск MSX, и туда же поместили линковщик L80.COM — нужно загрузиться в MSX−DOS. Затем, имея подготовленный пример программы на Бейсике EXAMPLE.BAS в ASCII-формате (чтобы из MSX-BASIC-а сохранить программу в виде ASCII текста, нужно подать команду SAVE"EXAMPLE.BAS",A), загрузить BASCOM. Появится приглашение в виде звездочки. Синтаксис команд подобен таковому ассемблера M80 — то есть, в данном примере, можно ввести: *EXAMPLE=EXAMPLE.BAS/C/Z В результате программа на Бейсике EXAMPLE.BAS будет транслирована в объектный код с именем файла EXAMPLE.REL и осуществлен возврат в операционную систему. Ключ /Z означает, что будет генерироваться машинный код для Z80, а не i8080. Ключ /C означает, что будет допустим текст программы на Бейсике без нумерации строк. {{ :msx:basic_compiler:link-80.png?400|}} После этого потребуется слинковать полученный объектный код. Для этого запустим линковщик L80. В появившемся приглашении наберём: *EXAMPLE,EXAMPLE/N/E В результате чего Link-80 слинкует объектный файл EXAMPLE.REL с библиотекой BASLIB.REL, и создаст исполняемый файл EXAMPLE.COM, требующий для своей работы файл BRUN.COM — так называемый рантайм-модуль. Преймуществом такого варианта компиляции является меньший размер результирующего исполняемого COM-файла. Безусловным недостатком — необходимость комплектовать исполняемый файл рантайм-модулем. Вдобавок, время запуска программы с рантайм-модулем — заметно больше, чем в standalone варианте. Поэтому нас особенно интересует именно вариант компиляции standalone COM-файла. Для этого к параметрам BASCOM добавляется опция /O, например: >BASCOM EXAMPLE=EXAMPLE.BAS/O/C/Z Далее, полученный в результате объектный код будет слинкован Link-80 уже не с библиотекой BASLIB.REL, а с библиотекой OBSLIB.REL, что приведет к генерации standalone исполняемого файла. Что нам и требуется. Потренироваться в использовании компилятора BASCOM можно в [[+tab|wmsx>?CART1=/_media/msx/basic_compiler/msxdos22.rom&CART1_FORMAT=ASCII16&DISK=/_media/msx/basic_compiler/bascom_ccgames.dsk&BASIC_ENTER=-MODE 80|WebMSX]]. Только учитывайте, что различных диалектов Бейсика существовало очень много уже тогда — в конце 70-х. И, например, в игре STARTREK.BAS использован синтаксис BASIC-80 v4, допускающий запись без пробелов, и строго требующий нумерации строк. Поэтому, для компиляции этой программы нужно добавить ключ /4 и убрать ключ /C. >BASCOM STARTREK=STARTREK.BAS/O/4/Z ====== Ссылки ====== [[https://archive.org/stream/BASIC_Compiler_v5.3_1981_Microsoft/BASIC_Compiler_v5.3_1981_Microsoft_djvu.txt|BASIC Compiler user's manual]] [[https://winworldpc.com/product/microsoft-basic/80-compiler-5x|BASIC-80 Compiler 5x]] {{tag> MSX programming BASIC}}