RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Ноябрь 2020
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30      

Календарь Календарь

Последние темы
» ПЭВМ "Ириша". Модуль контроллера графического дисплея (МКГД).
автор barsik Сегодня в 9:13

» Тупые вопросы по рк86
автор barsik Сегодня в 9:05

» Изучение Си, в применении к К210. Отличия, особенности и т. д...
автор Viktor2312 Сегодня в 5:39

» Программирование для РК86
автор barsik Вчера в 22:12

» Свёрточная нейронная сеть (CNN).
автор ведущий_специалист Вчера в 19:19

» Флейм только по теме "Радио-86РК".
автор ведущий_специалист Вчера в 18:09

» Разработка "Радио - РК2019М".
автор ведущий_специалист Вчера в 17:36

» Документация (3Com).
автор Viktor2312 Вчера в 15:35

» Улучшение видео возможностей РК86
автор barsik 28.11.20 23:11

» ПЗУ F800 для РК86
автор barsik 27.11.20 12:38

» "Ваш радиоприёмник". Р. Сворень 1963г.
автор Viktor2312 27.11.20 12:37

» Игровая консоль радиолюбителя по схеме РК86
автор barsik 25.11.20 21:08

» Разное
автор Viktor2312 25.11.20 19:48

» Общие вопросы по ПЭВМ Ириша
автор Viktor2312 25.11.20 19:42

» Обсуждение желаемых новодельных плат расширения и мелких усовершенствований базовых плат
автор Viktor2312 25.11.20 0:18

» Разговоры не пойми о чём...
автор ведущий_специалист 24.11.20 17:52

» Флейм касающийся ПЭВМ "Ириша".
автор Viktor2312 20.11.20 14:31

» Куплю телеграфный аппарат РТА-80.
автор Savoj 15.11.20 19:55

» Разработка модуля МВК-МП-ВМ80 ver_0.01.
автор Viktor2312 15.11.20 2:43

» Сопроцессор в РК86
автор barsik 14.11.20 18:20

» Усилитель класса D на TL494
автор freddy 12.11.20 16:16

» К210. Общая тема по GPIO. Практика.
автор Viktor2312 11.11.20 21:55

» Бейсик интерпретатор ИРИШИ
автор barsik 11.11.20 0:45

» Реанимирую симфонию
автор Viktor2312 11.11.20 0:23

» Клавиатура ИРИШИ
автор barsik 10.11.20 16:29

Самые активные пользователи за месяц
Viktor2312
Можно ли на бейсике написать динамичную игру для РК86 ? Vote_l10Можно ли на бейсике написать динамичную игру для РК86 ? Voting10Можно ли на бейсике написать динамичную игру для РК86 ? Vote_r10 
barsik
Можно ли на бейсике написать динамичную игру для РК86 ? Vote_l10Можно ли на бейсике написать динамичную игру для РК86 ? Voting10Можно ли на бейсике написать динамичную игру для РК86 ? Vote_r10 
ведущий_специалист
Можно ли на бейсике написать динамичную игру для РК86 ? Vote_l10Можно ли на бейсике написать динамичную игру для РК86 ? Voting10Можно ли на бейсике написать динамичную игру для РК86 ? Vote_r10 
RN1TZ
Можно ли на бейсике написать динамичную игру для РК86 ? Vote_l10Можно ли на бейсике написать динамичную игру для РК86 ? Voting10Можно ли на бейсике написать динамичную игру для РК86 ? Vote_r10 
freddy
Можно ли на бейсике написать динамичную игру для РК86 ? Vote_l10Можно ли на бейсике написать динамичную игру для РК86 ? Voting10Можно ли на бейсике написать динамичную игру для РК86 ? Vote_r10 
vital72
Можно ли на бейсике написать динамичную игру для РК86 ? Vote_l10Можно ли на бейсике написать динамичную игру для РК86 ? Voting10Можно ли на бейсике написать динамичную игру для РК86 ? Vote_r10 
Savoj
Можно ли на бейсике написать динамичную игру для РК86 ? Vote_l10Можно ли на бейсике написать динамичную игру для РК86 ? Voting10Можно ли на бейсике написать динамичную игру для РК86 ? Vote_r10 
Microsha
Можно ли на бейсике написать динамичную игру для РК86 ? Vote_l10Можно ли на бейсике написать динамичную игру для РК86 ? Voting10Можно ли на бейсике написать динамичную игру для РК86 ? Vote_r10 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Можно ли на бейсике написать динамичную игру для РК86 ?

Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty Можно ли на бейсике написать динамичную игру для РК86 ?

Сообщение  barsik в 25.10.20 4:51

1
Хочу сделать тут несколько постов про бейсик и ответить себе на интересный вопрос можно ли бейсик использовать, чтобы разрабатывать игры для РК86. Речь будет похоже чуть-чуть о интерпретаторах, но в основном о компиляторах бейсика для КР580. Основной сюжет в том, чтобы я мог вспомнить, а во многом заново изучить бейсик, т.к уже давно (более 10 лет) ничего не писал на бейсике, а память уже быстро ухудшается, да и Альцгеймер не за горами.

Конечно назначение большинства операторов бейсика я ещё помню (да и как их забудешь, если они самоговорящие английские слова), но знание назначения даже всех операторов не значит умения писать программу. Надеюсь, что вспомнить удастся, это ведь не изучение заново. Кстати, недавно в одном форуме прочитал, что когнитивные способности с возрастом резко падают. У меня они уже упали почти до нуля. Я бы ещё добавил, что и желание осваивать что-то новое тоже нулевое. Тут бы хотя бы старые знания не забыть.

Когда-то я немного умел программировать на бейсике компиляторе и даже книгу 300 кб написал об этом. К сожалению и книга файлом и все исходники примеров программ к ней погибли ещё 20 лет назад при крахе винта. Но где-то сохранилась книга на бумаге, так что вскоре найду её и смогу по своей же книге вспомнить нюансы использования бейсика компилятора. Да и другой литературы хватает. Из источников в основном важно узнать как работать с дисковыми файлами (остальное просто или очевидно), хотя для игры работа с файлами не нужна, но это нужно при написании инструментария на бейсике.

Естественно изучать ЯВУ надо одновременно программируя на нём, иначе всё впустую. Потому по ходу изучения попробую написать для РК86 максимально примитивную игру, но с тайловой графикой (что аппаратно достигается прошивкой в вторую половину знакогенератора РФ2 альтернативного фонта, содержащего тайлы игры и включаемого неважно как, хоть тумблером, как было рекомендовано в ж.Радио).

Писать и отлаживать естественно намного выгоднее в эмуляторах. В данном случае лучше эмулятор EMU от b2m, хотя в принципе для РК86 лучше как раз эмулятор EMU80 от Pyk, т.к он эмулирует РК-КНГМД с RK-DOS. Но в случае написания игры с альтернативным фонтом лучше EMU, т.к в нём известно с какого места в файле фонта идёт фонт РК86 и могу его менять по желанию, а главное - EMU поддерживает фонт 8*8. А также в EMU эмулируется ROM-диск, что также важно в данном случае.

Были слухи, что в EMU можно программно переключать фонт при эмуляции РК, но ни конфига для этого, ни никакой информации на эту тему у меня нет. Это печально, т.к из-за этого игру придётся стартовать с фонтом игры, в котором нет букв, отчего не видны команды резидентного РК-монитора и не сделать загрузку файла игры с МГ-ленты. Придётся из этой ситуации выкручиваться следующим образом. Файл игры я буду оформлять в виде файла содержащего код ROM-диска, а ПЗУ F800 изменю так, чтобы по сбросу сразу после инициализации из ROM-диска грузилась и запускалась игра. При этом мне не потребуется вводить вслепую команды монитора, чтобы загрузить код игры с ленты, да и автоматически стартующую игру в эмуляторе можно проверить быстрее.

Сначала подумаем может ли быть хоть какая-то польза от бейсика интерпретатора. Конечно думать, что на РК86 с эффективным тактом процессора всего в 1 МГЦ на бейсике интерпретаторе можно написать динамичную игру может только идиот (хотя несмотря на это с момента появления микро-ЭВМ людям как раз усиленно втюхивали мысль, что бейсик интерпретатор для этого пригоден). На самом деле бейсик интерпретатор его разработчики Кемени и Курц придумали как учебный язык для студентов, чтобы объяснить им что такое алгоритм.

Исходно бейсик был предназначен лишь для задач типа вычисления и вывода на АЦПУ оператором PRINT суммы или разности двух чисел, вводимых оператором INPUT, т.е для решения задач именно такого примитивного уровня. На бейсике интерпретаторе и не предполагалось штамповать динамичные видео игры в огромном количестве и качестве. Но в итоге к этому и пришло, т.к для дешёвой бездисководной бытовой микро-ЭВМ не оказалось других ЯВУ, ибо все остальные ЯВУ компиляторы, а для них нужна DOS.

Если сравнивать с кодом из под Паскаля и Си, то бейсик интерпретатор не так уж тормознут. А именно он в худшем случае медленнее всего в ~5 раз. Считая, что программы из под Паскаля и Си медленнее, чем ассемблерные программы тоже в 5 раз, то получается, что бейсик интерпретатор тормознее ассемблера всего лишь в 25 раз. И это ещё самые худшие цифры, в реальности соотношение м.быть меньше. Понятно, что для динамического вывода на экран РК скоростей бейсика не хватит, т.к даже скоростей ассемблера хватает без особого запаса.

Но всё же есть очень слабая надежда, что используя для критических подпрограмм фрагменты на ассемблере, от бейсика интерпретатора можно получить хоть что-то. Бейсик во-первых даёт вычисления с точностью в 38 знаков после запятой, что крайне нобходимо при рассчёте траектории полёта на Марс (что надо тем, кто хочет побыстрее убраться с этой планеты). Для игр, чтобы рисовать круги м.быть полезно вычисление синусов, но увы, РК86 не может рисовать на экране круги из-за недостаточно мощного видеоадаптера. Для чего ещё пригоден бейсик в игре? Бейсиком удобно выводить сообщения и возможно не так уж фатально тормознёт, если даже логику игры вычислять бейсиком. Тут, как говорят людоеды, - не попробовав, не узнаешь.

Для РК есть с десяток бейсиков, но все они производные от первого бейсика 1A20 из ж.Радио 01.85. Доработки в основном - сервис при вводе операторов, ренумерация, строчный редактор и графический оператор PLOT, от которого пользы, как от козла молока, т.к он работает лишь в базовом режиме 25 строк, а нас интересует режим без межстрочных разрывов с 30-ю строками. Строчный редактор позволяет редактировать строку, тогда как в бейсике 1A20, чтобы внести изменения надо строку вводить целиком заново. Сервис при вводе и другие удобства как говорится, нужны только молокососам, а истинные компьютерщики предпочитают трахаться с трудностями и программируют только на фортране.

Ассемблерные подпрограммы в бейсике считывают из операторов DATA и программа сама размещает их в ОЗУ. Чтобы не трахаться с загрузкой желательно игру сохранять в виде единого файла с бейсиком, который надо модифицировать так, чтобы программа на бейсике стартовала сама (т.е после инициализации автоматически должна запускаться команда RUN).

Упомяну ещё одну существенную причину почему не очень удобно писать программы для РК на бейсике интерпретаторе? А потому, что тогда программу придётся писать на самом РК86. Т.к в эр-кашных бейсиках нет возможности считать программу в текстовом виде (только в токенах). А писать программу даже в эмуляторе намного неприятнее, чем писать программу на PC. Это можно решить написав программу конвертора текстового представления программы в токены бейсика. Но это по сути есть часть самого бейсика.

И кто будет писать эту программу, даже не будучи уверенным, что это хоть кому-то и зачем-то надо? А вот компилятор бейсика для CP/M вполне без проблем читает программы в текстовом формате и тексты программ можно писать на IBM PC. Но это как раз само собой, т.к на PC программа для компилятора не только пишется, но и транслируется. На РК в эмулятор или реал грузится уже готовая странслировання программа в маш.кодах процессора КР580.

Теперь, что я знаю про компиляторы. В основном можно рассматривать два компилятора, от Microsoft и Digital Research. Я пробовал оба, но продвинулся только с микрософтовским. По другому компилятору не было описания языка, а из-за незнания особенностей ничего не получалось, кроме PRINT "Hello World!". Сейчас, конечно документация и на него не проблема. Но разбираться в ничём новом не хочу, т.к вряд-ли смогу, мой утративший когнитивность мозг с этим просто не справится. Потому только компилятор бейсика от Микрософт.

По моим оценкам, компиляция бейсик-программы ускоряет в лучшем случае всего в 2.5-3 раза относительно интерпретатора. Так что компилятор бейсика это однозначно отнюдь не чудодейственное средство для ускорения прогона. Код скомпилированный компилятором бейсика имеет примерно на 30-50 % больший объём, чем код из под Паскаля или Си, но что ещё хуже, растёт намного быстрее с ростом сложности программы. Потому как ни крути серъёзной сложной программы даже на бейсике компиляторе не напишешь и потому желательно иметь TPA в 62 кб. А в РК86 доступно менее 28 кб для программ странслированных с эмулятором CP/M BDOS/BIOS, а с размещение реального кода BDOS и BIOS в ОЗУ сокращает TPA ещё на 6-8 кб.

Так что для РК86 разработка высокодинамичных игр даже компилятором бейсика пока под вопросом. Но, не попробовав не узнаешь (девиз наркоторговцев). Зато в пользу бейсика можно сказать, что он хорошо подходит для слабоумных не самых способных программистов, тех кто не может быстро освоить более сложные ЯВУ. Будем исходить из предположения, что для простых РК-игр уровня тенниса, пэкмана, ксоникса, тетриса и т.п, скорости кода из под бейсик-компилятора и объёма ОЗУ РК86 хватит. Критичные фрагменты естественно желательно делать на ассемблере. Ассеблерные подпрограммы можно также как в интерепретаторе брать из операторов DATA или прилинковывать странслированные ассемблером REL-модули. В частности, спрайт-движок для игр надо однозначно писать на ассемблере.

Начать полезно с того, чтобы разобраться с методикой компиляции на PC, а затем следует досконально разобраться как устроен экран РК86 в режиме 30 строк. Для начала возможно стоит программку высчитывающую адреса начала экранных строк. Для базового режима такая табличка публиковалась в ж.Радио в 1987. А вот для режима в 30 строк адреса надо считать вручную. Потом, чтобы закрепить знания думаю полезно будет написать редактор экрана. Он нужен, например для создания лабиринта или пейзажа в игре, т.к делать это вручную на бумаге в клеточку уже вроде как не модно. А написание пэкмана это в планах написания игр, т.к я встречал исходники пэкмана написанного даже на бейсике интерпретаторе ещё в 70-тые годы. Сначала для тренировки в ЯВУ думаю разумно написать несколько несложных чисто текстовых игр, типа тетриса, ксоникса и т.п. А уж затем надо попробовать написать спрайт-движок на бейсике. После чего можно уже будет начинать думать о написании примитивной для начала чисто текстовой игры с тайловой графикой.

Т.о первые пробные программы будут текстовыми и первый же вопрос, что надо решить при использовании компилятора выдающего код для CP/M, как подключать к готовой программе эмулятор BDOS. Что такое и для чего нужен эмулятор BDOS я уже писал здесь. Его на РК86 полезно кидать в верхнее ОЗУ (выше 8000) или даже иметь в ПЗУ.

- - - Добавлено - - -

Эффективность компилятора бейсика Microsoft для CP/M обеспечивается в значительной степени тем, что он совместим с си-пи-эмовским же бейсиком интерпретатором этой же фирмы. А как известно бейсик интерпретатор позволяет писать программы быстрее, т.к в интерпретаторе быстрая отладка и редактирование. Потому удобно сначала отладить программу в интерпретаторе (игнорируя замедленность прогона свойственную интерпретируемым программам), а окончательно отладив и выгрузив исходник в текстовый файл, остаётся только странслировать его с помощью компилятора Bascom от Microsoft. В результате получится конечный COM-файл пригодный для запуска в CP/M, который будет работать аж  2.5-3 раза быстрее, чем при интерпретации.

Однако увы, оказывается на РК86 это полезное качество бейсика не срабатывает, т.к в силу мизерности его ОЗУ, на РК86 просто нет CP/M и соответственно не доступен бейсик интерпретатор от Microsoft. Потому это преимущество бейсика полностью обнуляется - программу на бейсике приходится разрабатывать на IBM PC сразу для компилятора, как это делают для остальных ЯВУ, в частности при использовании компиляторов Паскаля, PLMX или Си (почему-то не имеющих интерпретаторов).

Вот на ОРИОНЕ бейсик был удобен, т.к там в отличие от РК, ОЗУ было как грязи и потому имелась CP/M с довольно высоким TPA, а для РК86 с нерасширенным ОЗУ получается, что бейсик не удастся использовать как интерпретатор с целью отладки. Хотя, кто мне мешает в эмуляторе "нарисовать" себе 48 Кб основного ОЗУ в РК86 (при этом придется перетранслировать и ROM-BIOS, чтобы экран перенести с 76D0 на B6D0). Это позволит использовать Microsoft Basic интерепретатор (если я его адаптирую к РК86, это не проблема, для ОРИОНА я это делал, эта работа займёт 7 минут). Но для работы с CP/M-файлами придётся в эмуляторе в других банках (по 32К) "пририсовать" ещё 512 Кб (больше не надо, хотя не проблема) и странслировать CP/M на 48К. Без CP/M никак не удастся загрузить этот бейсик код программ (можно ещё конечно сойти с ума и встроить в MBASIC загрузку с магнитофона, но это глупо).

Т.о на базовом РК86 исчезает единственное ценное качество бейсика, т.к по всем остальным выражаемым в цифрах параметрам бейсик существенно (примерно на треть или даже больше) уступает Паскалю и Си, не говоря уже о намного более крутом (по эффективности) PLMX. И это ещё не говоря про отсутствие модульности, капсуляции переменных, сокрытие данных и клубочную запутанность кода бейсика лишённого всякой структурированности, из-за которой ведущие компьютерные учёные признали бейсик ошибкой природы.

Пока не нашёл своей книги про компилятор BASCOM (от Microsoft) и возможно придётся пока с изучением бейсика чуть повременить и посмотреть на BDS-Си (т.к надо зЫркануть на один компилятор, а как назло ни хрена в Си не помню, забыл блин, что удивительно,т.к всего лет 20 прошло, как я программировал на нём). К бейсику естественно ещё вернусь, т.к это моя первая любовь из ЯВУ. К тому же я и исторически сначала освоил бейсик, а лишь потом Си. Да и в любом случае, т.е если в применении для РК86 бейсик не особо подойдёт, то всё-равно хочу вспомнить бейсик, и он мне ещё потребуется чтобы поиметь возможность хотя бы сравнить эффективность бейсика компилятора с компилятором BDS-C - для сравнения попробую РК-игру написанную на Си конвертировать в бейсик и странслировать.

Пока на досуге начну искать читать документацию, чтобы освежить знания бейсика и пользование разными компиляторами (хотя освежить в памяти, это громко сказано, спустя 25 лет в голове не осталось почти ничего, а ведь когда-то я в этом разбирался). Ещё из любопытства очень интересует компилятор CBASIC-80 от Digital Research (т.к эта фирма, в отличие от фирмы Microsoft, веников не вяжет и доверия к Гарри Килдэллу больше, чем к Биллу Гейтсу), а в своё время из-за отсутствия ДОК-ов по этому бейсику, а ни хрена не смог в нём разобраться, хотя в нескольких местах как раз встречал мнения, что CBASIC лучше, чем BASCOM.

Вообще для CP/M есть много бейсиков, хороших и разных. Если у Вас есть компьютер с CP/M или хотя бы эмулятор компьютера с CP/M на IBM PC или Андроид-гаджете, то Вы можете пошариться вот в этой папке и выбрать что-то по вкусу.

- - - Добавлено - - -

Чего-то меня резко шатает.

Только вчера решил попробовать изучить (точнее вспомнить почти с нуля) язык Си, но зыркнув на пример программы написанной на Си (причём самой примитивной и даже написанной мной самим 25 лет назад) мне резко поплохело и мозг ужаснуло. Подумалось что такую сложность моему слабому (уже почти альцгеймерному) мозгу не осилить (хотя 25 лет назад, я без напряга мог нацарапать аж 2000 строк на Си за пару дней) или потрачу много времени на него.

Перепугавшись, решил тогда зыркнуть, а что-же у меня есть по бейсику (т.к общеизвестно, что он намного проще и доступен слабоумным школьникам), но примеров программ на бейсике компиляторе (а их я написал многие десятки, если не сотни) найти пока не смог (найду попозже, они точно есть). Зато посмотрел книги на тему MBASIC и BASCOM, чего у меня, к сожалению, не было когда я осваивал BASCOM в 90-тые и до всего приходилось доходить экспериментально.

Похоже просто шикарная книга про Microsoft MBASIC для TRS-80, начал читать местами и просто дико пожалел, что не было у меня её когда-то (злоба так и душит на бездарных советских шпионов, вот из-за них, блин, мы и проиграли холодную войну, даже тырить у врагов не научились). Прямо создалось впечатление, что бейсик это крутейшая вестчь, язык народов и поколений.

Да и краткая информация, т.е два файла-дайджеста, что видимо входили в дистрибутив (имею ввиду два файла с расширением HLP) порадовали, они явно исчерпывающе достаточны для начала программирования. Надо будет перевести их Гуглом, чтобы было приятнее к ним обращаться как к справочнику, хотя нашёл и свой файл с переводов какого-то другого, но довольно похожего текста.

Хотел, блин, сегодня начать написание игры XONIX на Си (вроде там алгоритм игры не сложен), но теперь боюсь, что не удержусь и займусь освоением бейсика компилятора. Даже лишь бегло просмотрев описание бейсика поразился насколько это крутой и удобный язык, например операторы работы со строками даже вряд-ли уступят им же в Паскале МТ+ (и даже в Турбо-Паскале).

Блин, ну прямо тащусь от бейсика компилятора, - не зря же он мне понравился простотой и удобством ещё в начале 90-тых  (а затем я явно сдуру перешёл на сложные Паскали и Си) ! Ну сами посмотрите насколько бейсик компилятор приятен и удобен. Почитав руководство Вы поразитесь крутизной бейсика компилятора. Напрер, он, в отличие от примитивного эркашного бейсика-Микрон, позволяет передавать параметры ассемблерной подпрограмме или оверлею (а в бейсике-Микрон есть лишь USR - вызов п/п-ммы без передачи параметров).

Компилятор Microsoft бейсика позволяет даже оверлеи, что зараз снимает ограничение объёма кода программы размером TPA. Это позволяет забыть, как о кошмарном сне о таких излишне высоких языках, таких как Паскаль, Си, PLMX... и плотно заняться штамповкой РК-игр на бейсике компиляторе. Вот, например, зыркАните, какие есть операторы позволяющие Вам делать на бейсике компиляторе программы огромного размера (но не более, чем размер диска CP/M, столько сколько на нём уместится файлов оверлеев). И естественно лучше, чтобы диском для подгрузки оверлеев был эл.диск или хотя бы винт (т.к с дискеты файлы грузятся сравнительно долго).

Спойлер:

CALL      CALL VARIABLE [(ARG LIST)]    вызов ассемблерной или FORTRAN подпрограммы

CHAIN     CHAIN [MERGE] FILENAME [,[LINE EXP][,ALL][,DELETE RANGE]]
              вызов программы с передачей ей параметров;  MERGE с ASCII-файлом
              позволяет поиметь оверлеи; старт со строки EXP если EXP задано;
              ключ ALL задаёт, что все передаются все переменные
              (в ином случае только COMMON переменные); ключ DELETE
              позволяет удаление оверлея перед тем, как CHAIN исполняется

barsik
barsik
Мастер++

Сообщения : 864
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty Перевод введения к Microsoft бейсикам (интерпретатору и компилятору)

Сообщение  barsik в 02.11.20 5:27

2
Вот краткое описание языка и компилятора, которое я сам перевёл в 1990-тые годы, а сейчас отредактировал и конвертировал в КОИ-8. Далее сегодня же займусь машинным переводом руководства по самому компилятору, хотя после машинного перевода придётся много доредактировать. Иначе мне на иностранном языке читать некомфортно, а при программировании тот файл становится справочником программиста.

Спойлер:


       Содержание

       Введение к интерпретатору Microsoft Basic
       Специальные (управляющие) символы
       Символы задающие тип переменных
       Команды (в непосредственном режиме)
       Команды строчного редактора
       Команды (в непосредственном режиме)
       Операторы управления (кроме I/O)
       Спецификаторы полей в PRINT USING
       Операторы для ввода/вывода
       Операторы вычислений
       Арифметические фынкции
       Строчные функции
       I/O и специальные функции
       Коды ошибок интерпретатора
       Введение к Microsoft бейсик компилятору
       Команды компилятора бейсика и ключи
       Сообщения об ошибках компилятора

___________________________________________________________________________


               Введение к интерпретатору Microsoft Basic
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Этот HELP-текст вырезан из "MICROSOFT BASIC reference book", и
состоит из двух частей - в одной речь об интерпретаторе, в другой о
компиляторе. Эти программы работают с программами написанными на почти
точно том же самом входном языке Microsoft BASIC. Однако всё-же есть
незначительные отличия между ними и они обсуждаются в теме "Compiler
introduction".

MBASIC (Microsoft BASIC) вызывается следующим образом:

    MBASIC [<имя_файла>][/f:<#N_files>][/m:<RAMTOP>]

Если присутствует <имя_файла>, то MBASIC ведёт себя так, как будто после
полной загрузки и инициализации была введена команда "RUN <имя_файла>". По
умолчанию для файла предполагается расширение .BAS.

Если в командной строке было /f:<#N_files>, то это устанавливает
количество дисковых файлов, что могут быть открыты одновременно во время
исполнения программы. По умолчанию это количество равно 3.

/m:<RAMTOP> устанавливает адрес наивысшей ячейки памяти, что будет использовать
MBASIC. По умолчанию используется вся своодная память до уровня BDOS.

               Специальные (управляющие) символы
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

^A        вход в режим редактирования на вводимой строке или последнейй введённой строке

^C        interrupts program execution and returns to mbasic

^G        выдаёт гудок на терминале

^H        удалить последний введённый символ

^I        табуляция с шагом 8

^O        приостановка/её_отмена вывода программы

^R        перепечатывает только что введённую строку

^S        приостанавливает исполнение программы

^Q        возобновляет исполнение после ^s

^U,^X     удаляет введённую строку

<CR>      заканчивает каждую введённую строку

<LF>      разделяет логические строки в физические строки

<DEL>     удаляет последние введённый символ

<ESC>     выход из режима редатирования строки

.         обозначает текущую строку для команд EDIT,RENUM,DELETE,LIST,LLIST

&O,&      префиксы для восьмеричной константы

&H        префикс для HEX-константы

:        разделяет разные операторы введённые в одной строке

?        эквивалент оператора PRINT

'        апостроф, краткая замена REM

               Символы задающие тип переменных
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Следующие символы заканчивающие имя переменной задают её тип.

$    STRING              0 TO 255 CHARS

%    integer             -32768 TO 32767

!    SINGLE PRECISION    7.1 DIGIT FLOATING POINT

#    DOUBLE PRECISION    17.8 DIGIT FLOATING POINT


               Команды (в непосредственном режиме)
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

КОМАНДА   СИНТАКСИС                     ФУНКЦИЯ

AUTO      AUTO [LINE][,INC]             включить режим автогенерации номеров строк

CLEAR     CLEAR [,[EXP1][,EXP2]]        очистить переменные программы;  EXP1 задаёт
                                       конец доступной памяти, EXP2 задаёт объём ОЗУ
                                       выделенный для стека (стек это какая-то ерунда
                                       внутри процессора, не заморачивайтесь с этим)

CONT      CONT                          продолжить прогон программы после стопа

DELETE    DELETE [[START][-[END]]]      удалить строку (или диапазон строк) программы

EDIT      EDIT LINE                     вызов строки на редактирование

FILES     FILES [FILENAME]              вывод на экран каталога текущего диска

LIST      LIST [LINE[-[LINE]]]          вывод на экр.всех (диапазон) строк программы
LLIST     LLIST [LINE[-[LINE]]]         то же только вывод на принтер

LOAD      LOAD FILENAME[,R]             загрузить программу с дискеты. С указанием
                                       ключа ",R" - программа стартует

MERGE     MERGE FILENAME                подцепить к программе программу с дискеты

NAME      NAME OLD AS NEW               переименование дискового файла
NEW       NEW                           удалить текущ.программу и все её переменные

NULL      NULL EXP                      set num of <null>s after each line
                                       (о чём это не понял, возможно
                                       это надо каким-то терминалам)
RENUM     RENUM [[NEW][,[OLD][,INC]]]   ренумерация строк программы (нач.N,со строки,шаг)

RESET     RESET                         сброс дисковой системы CP/M;
                                       Требуется после замены дискеты

RUN       RUN [LINE NUMBER]             запуск программа (запуск с указанной строки)
         RUN FILENAME[,R]              запуск программы с диска (расширение *.BAS)

SAVE      SAVE FILENAME[,A or ,P]       сохранить программу на диск; ключ ",A"
                                       задаёт сохранение в текстовом (ASCII)
                                       формате; ключ ",P" в виде защищённого файла

SYSTEM    SYSTEM                        возврат в ОС CP/M
TROFF     TROFF                         выключить трассировку
TRON      TRON                          включить трассировку
WIDTH     WIDTH [LPRINT] EXP            установить ширину каретки терминала или принтера;
                                       по умолчанию 80 (терминал) и 132 (принтер)
                                       При задании 255 CR отменено, не выводится.

               Команды строчного редактора
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~

A         abort -- восстановить оригинал строки и продолжить EDIT

NCC       изменить N символов

ND        удалить N символов

E         закончить EDIT и сохранить изменения; отбросить остаток строки (после курсора)

HSTR<ESC> удалить окончание строки и вставить строку

ISTR<ESC> вставить строку в текущей позиции

NKC       удалить все символы вплоть до N-того появления символа "C"

L         вывести окончание строки и перейти в начало строки

Q         покинуть режим EDIT и восстановить оригинал строки

NSC       поиск в строке N-того появления символа "C"

XSTR<ESC> перейти в конец строки и вставить строку (т.е дописать строку)

<DEL>     сдвинуться назад на символ; в режиме вставки удалить символ

<CR>      конец редактирование и сохранение готовой строки


               Операторы управления (кроме I/O)
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!

Оператор  Синтаксис                     Функция

CALL    CALL VARIABLE [(ARG LIST)]  вызов ассемблерной или FORTRAN п/п-ммы

CHAIN   CHAIN [MERGE] FILENAME [,[LINE EXP][,ALL][,DELETE RANGE]]
           вызов программы с передачей ей параметров;

           MERGE с ASCII-файлом позволяет поиметь оверлеи;
           старт со строки EXP, если EXP задано;
           ключ ALL задаёт, что передаются все переменные
           (если ALL нет, то только COMMON переменные);
           ключ DELETE позволяет удаление оверлея перед
           тем, как исполняется CHAIN

COMMON   COMMON список переменных - передача переменных подцепоченой программе

DEF     DEF FNX[(ARG LIST)]=EXP   арифметические или строчные функции
       DEF USRN= адрес           задать адрес для N-той п/п-мы на ASM
       DEFINT диапазон букв      задать умолчание букв переменных типа INTEGER
       DEFSNG ---"---            ---"---  типа SINGLE
       DEFDBL ---"---            ---"---  типа DOUBLE
       DEFSTR ---"---            ---"---  типа STRING

DIM       DIM LIST OF SUBSCRIPTED VARS  allocate arrays

END       END                       остановить программу и закрыть файлы

ERASE     ERASE VAR [,VAR ... ]     освободить заним.место и имена переменных

ERROR     ERROR CODE                генерировать error code/message

FOR       FOR VAR=EXP TO EXP [STEP EXP]    петля цикла FOR

GOSUB     GOSUB LINE NUMBER         вызов бейсик подпрограммы

GOTO      GOTO LINE NUMBER          переход на заданную строку

IF/GOTO   IF EXP GOTO LINE [ELSE STMT ... ]
                                   если EXP <> 0 тогда GOTO

IF/THEN   IF EXP THEN STMT[:STMT] [ELSE STMT ... ]
                                   если EXP <> 0 тогда ... иначе ...

LET       [LET] VAR=EXP             присвоить переменной значение

MID$      MID$(STRING,N[,M])=STRING2    заменить участок строки STRING строкой
                                       STRING2; начиная с позиции N для M символов

NEXT      NEXT VAR[,VAR ... ]       конец оператора LOOP (новый повтор)

ON ERROR  ON ERROR GOTO LINE        переход по ошибке на п/п-мму
 GOTO

ON/GOSUB  ON EXP GOSUB LINE[,LINE]   computed GOSUB

ON/GOTO   ON EXP GOTO LINE[,LINE]    computed GOTO

OPTION    OPTION BASE N             нач.значение для индексов (N=0,1)
 BASE

OUT       OUT PORT,BYTE             вывод байта в порт (командой OUT port)

POKE      POKE ADDRESS,BYTE         положить байт в ОЗУ по указ-му адресу

RANDOMIZE RANDOMIZE [EXP]           переустановить генератор случ-х чисел

REM       REM ANY TEXT              комментарий (remark)

RESTORE   RESTORE [LINE]            сброс указателя по строкам с DATA

RESUME    RESUME OR RESUME 0        возврат из обработки ON ERROR GOTO
         RESUME NEXT               --"-- к оператору после строки с ошибкой
         RESUME LINE               --"-- к указанной строке

RETURN    RETURN                    возврат из бейсик подпрограммы

STOP      STOP                      СТОП прогона и вывод BREAK сообщения

WAIT      WAIT PORT,MASK[,SELECT]   пауза пока ввод из порта после операций
                                   XOR SELECT и AND MAS) <> 0

WHILE/    WHILE EXP STMTS ... WEND  выполнять операторы пока EXP is TRUE
 WEND

       Спецификаторы полей задающие формат вывода в PRINT USING
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

NUMERIC SPECIFIERS

SPECIFIER DIGITS    CHARS     DEFINITION

 #         1         1       цифровое поле

 .         0         1       десятичная точка

 +         0         1       печать лидирующего или замыкающего знака

 -         0         1       замыкающий знак (- если отрицат, <пробел> иначе)

 **        2         2       префикс для символа звёздочки

 $$        1         2       плавающий знак доллара;  ставится перед
                             лидирующей цифрой
 **$       2         3       asteriks fill and floating dollar sign

 ,         1         1       использовать запятую каждые три цифры

 ^^^^      0         4       экспоненциальный формат

 _         0         1       следующий символ выводить буквой

       СПЕЦИФИКАТОРЫ СТРОК

Спецификатор            Определение

 !                     единственный символ
 /<SPACES>/            поле символа; ширина=2+ колич-во <пробелов>
 &                     поле переменной длины

               Операторы для ввода/вывода
               ~~~~~~~~~~~~~~~~~~~~~~~~~~

ОПЕРАТОР        СИНТАКСИС/ФУНКЦИЯ

CLOSE     CLOSE [[#]F[,[#]F ... ]]
          закрыть дисковый файл; если аргументов нет, закрыть все

DATA      DATA список констант
          вводит список данных

FIELD     FIELD [#]F,N AS STRING VAR [,N AS STRING VAR ...]
          задаёт поля в буфере для чтения файлов с произвольным доступом

GET       GET [#]F[,число записей]
          считать записи из дискового файла с произвольным доступом

INPUT     INPUT [;] [строка приглашения;] VAR [,VAR ...]
         INPUT [;] [строка приглашения,] VAR [,VAR ...]

          прочитать определённое данное с терминала
          лидирующее двоеточие подавляет вывод символов <CR>,<LF>
          двоеточие после строки приглашения вызывает печать знака "?"
          после приглашения, а запятая после приглашения подавляет "?"

KILL      KILL имя файла
          удалить дисковый файл

LINE      LINE INPUT [;] [строка приглашения;] STRING VAR

INPUT      читать целую строку с терминала;
          лидирующее двоеточие подавляет вывод <CR>,<LF>

         LINE INPUT #F,строчная переменная
          считать целую строку с дискового файла

LSET      LSET FIELD VAR=строчное выражение
          сохранить данные в буфере файлов с произвольным доступом
          left-justified or left-justify a non-disk string
          in a given field (???)

OPEN      OPEN MODE,[#] F,имя файла
          открыть дисковый файл; MODE д.быть одно из:
              I = ввод из последов-го файла
              O = вывод в последов-й файл
              R = произвольный файл с вводом/выводом

PRINT     PRINT [USING строка формата;] EXP [,EXP ...]
          печать данных на терминал используя заданный формат

         PRINT #F, [USING строка формата;] EXP [,EXP ...]
          запись данных в дисковый файл

         LPRINT [USING строка формата;] VAR [,VAR ...]
          запись данных на построчный принтер

PUT       PUT [#] F [,число записей]
          записать данные из буфера произвольного доступа в файл данных

READ      READ VAR [,VAR ...]
          читать данные из операторов DATA в заданные переменные

RSET      RSET FIELD VAR = строчное выражение
          сохраняет данные в буфере для файлов произвольного доступа
          right justified or right justify a non-disk string
          in a given field (???)

WRITE     WRITE [список выражений]
          вывод данных на терминал

         WRITE #F, список выражений
          вывод данных в последовательный файл
          или в буфер с проивольлным доступом


               Операторы вычислений
               ~~~~~~~~~~~~~~~~~~~~

Символы   Функция

=        назначение значения или тест на равенство
-        инверсия знака или вычитание
+        сложение или 'string concatenation'
*        умножение
/        деление (результат с плавающей точкой)
^        возведение в степень
\        целочисленное деление (integer result)
MOD       integer modulus (integer result)
NOT       one's complement (integer)
AND       побитовый AND (integer)
OR        побитовый OR (integer)
XOR       побитовый EXCLUSIVE OR (integer)
EQV       побитовый EQUIVALENCE (integer)
IMP       побитовый IMPLICATION (integer)
=,>,<,    тесты отношений (выход: TRUE=-1, FALSE=0)
 <=,=<,
 >=,=>,
 <>

Приоритет операторов следующий:

1.  EXPRESSIONS IN PARENTHESES     8.  RELATIONAL OPERATORS
2.  EXPONENTIATION                 9.  NOT
3.  NEGATION (UNARY -)            10.  AND
4.  *,/                           11.  OR
5.  \                             12.  XOR
6.  MOD                           13.  IMP
7.  +,-                           14.  EQV

               Арифметические функции
               ~~~~~~~~~~~~~~~~~~~~~~

ФУНКЦИЯ         ДЕЙСТВИЕ

ABS(EXP)       абсолютная величина выражения (отбросить дроби)
ATN(EXP)       арктангенс выражения (в радианах)
CDBL(EXP)      конвертировать выражение в число двойной точности
CINT(EXP)      конвертировать выражение в целое число
COS(EXP)       косинус выражения (в радианах)

CSNG(EXP)      конвертировать выражение в число одиночной точности
EXP(EXP)       возводит константу E в степень заданную выражением
FIX(EXP)       возвращает обрезанное INTEGER выражения
FRE(EXP)       возвращает объём оставшегося своб.места not used by mbasic
INT(EXP)       evaluates the expression for the largest integer

LOG(EXP)       натуральный логарифм выражения

RND[(EXP)]     выдаёт случайное число
                EXP <0 засеивает новую последовательность
                EXP =0 возвращает предыдущее число
                EXP >0 или отсутствует - возвр-т новое случ.число

SGN(EXP)       1 если EXP >0
              0 если EXP =0
             -1 если EXP <0

SIN(EXP)       синус выражения (in radians)
SQR(EXP)       квадратный корень выражения
TAN(EXP)       тангенс выражения (in radians)

               Строчные функции
               ~~~~~~~~~~~~~~~~

Функция         Действие

ASC(STR)       возвращает ASCII-значение первого символа строки
CHR$(EXP)      возвращает односимвольную строку из символа, чей
              ASCII-код выдаёт арифметическое выражение EXP
FRE(STR)       возвращает оставшийся объём памяти
HEX$(EXP)      конвертирует число в HEX-строку

INPUT$(LENGTH [,[#]F])
              возвращает строку длиной в LENGTH символов прочитанную с с консоли
              или из дискового файла; эхо-печать на экране не производится

INSTR([EXP,]STR1,STR2)
              возвращает первую позицию первой встретившейся строки STR2
              в строке STR1 начиная с символьной позиции EXP

LEFT$(STR,LEN) возвращает LEN самых левых символов строчного выражения

LEN(STR)       возвращает длину строки

MID$(STRING,START[,LENGTH])
              возвращает символы из середины строки начиная с указанной
              позиции до конца строки или длиной в LENGTH символов

OCT$(EXP)      конвертирует выражение в восьмеричную строку

RIGHT$(STR,LEN)
              возвращает LEN самых правых символов из строки

SPACE$(EXP)    возвращает строку из EXP пробелов

STR$(EXP)      преобразует числовое выражение в строку

STRING$(LENGTH,STR)
              возвращает строку длиной LENGTH содержащую первые символы строки STR

STRING$(LENGTH,EXP)
              возвращает строку длиной LENGTH содержащую символы with numeric
              value EXP

VAL(STR)       конвертирует строчное представление числа в его цифровое значение

               I/O и специальные функции
               ~~~~~~~~~~~~~~~~~~~~~~~~~

ФУНКЦИЯ         ДЕЙСТВИЕ

CVI(STR)       преобразует 2-х символьную строку в INTEGER
CVS(STR)       преобразует 4-х символьную строку to a single precision number
CVD(STR)       преобразует 4-х символьную строку to a double precision number

EOF(F)         возвращает TRUE (-1) если файл позиционирован на его конец

ERL            номер строки с ошибкой
ERR            цифровой код ошибки

INP(PORT)      вводит байт изи порта ввода (командой IN port)

LOC(F)         возвр-ет номер слеующей записи to read or write (если файс
              с произвольным доступом) или число секторов прочитанных
              или записанных (если последовательный файл)

LPOS(N)        возвращает позицию каретки строчного принтера (N не важно)

MKI$(VALUE)    конвертирует INTEGER в 2-х символьную строку
MKS$(VALUE)    конвертирует значение одинарной точности в 4-х символьную строку
MKD$(VALUE)    конвертирует значение двойной точности в 8-ми символьную строку

PEEK(EXP)      считать байт из ячейки памяти заданную выражением EXP
POS(N)         возвращает позицию каретки терминала (N is dummy)

SPC(EXP)       используется в операторе PRINT для печати пробелов
TAB(EXP)       используется в операторе PRINT для табуляции на указанную позицию

USR[N](ARG)    вызывает пользовательскую п/п-мму на машинном языке
              с аргументом ARG

VARPTR(VAR)    возвращает адрес переменной VAR в памяти или ноль,
              если VAR не было присвоено значение

VARPTR(#F)     возвращает адрес дискового I/O буфера назначенного
              файлу с указанным номером


               Коды ошибок интерпретатора
               ~~~~~~~~~~~~~~~~~~~~~~~~~~

КОД  ОШИБКА                     КОД  ОШИБКА

 1  NEXT WITHOUT FOR            14  OUT OF STRING SPACE
 2  SYNTAX ERROR                15  STRING TOO LONG
 3  RETURN WITHOUT GOSUB        16  STRING FORMULA TOO COMPLEX
 4  OUT OF DATA                 17  CAN'T CONTINUE
 5  ILLEGAL FUNCTION CALL       18  UNDEFINED USER FUNCTION
 6  OVERFLOW                    19  NO RESUME
 7  OUT OF MEMORY               20  RESUME WITHOUT ERROR
 8  UNDEFINED LINE              21  UNPRINTABLE ERROR
 9  SUBSCRIPT OUT OF RANGE      22  MISSING OPERAND
10  REDIMENSIONED ARRAY         23  LINE BUFFER OVERFLOW
11  DIVISION BY ZERO            26  FOR WITHOUT NEXT
12  ILLEGAL DIRECT              29  WHILE WITHOUT WEND
13  TYPE MISMATCH               30  WEND WITHOUT WHILE


ДИСКОВЫЕ ОШИБКИ

КОД  ОШИБКА                     КОД  ОШИБКА

50  FIELD OVERFLOW              58  FILE ALREADY EXISTS
51  INTERNAL ERROR              61  DISK FULL
52  BAD FILE NUMBER             62  INPUT PAST END
53  FILE NOT FOUND              63  BAD RECORD NUMBER
54  BAD FILE MODE               64  BAD FILE NAME
55  FILE ALREADY OPEN           66  DIRECT STATEMENT IN FILE
57  DISK I/O ERROR              67  TOO MANY FILES


             Введение к Microsoft бейсик компилятору
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Следующие команды непосредственного режима не имплементированы в
компиляторе и будут вызывать печать сообщения об ошибке:

         AUTO      CLEAR     CLOAD
         CSAVE     CONT      DELETE
         EDIT      LIST      LLIST
         RENUM     COMMON    SAVE
         LOAD      MERGE     NEW
         ERASE

Следующие операторы работают инче в компиляторе по сравнению с
интерепретатором (см.руководство для детализации):

         CALL      DEFINT    DEFSNG
         DEFDBL    DEFSTR    DIM
         ERASE     END       ON ERROR GOTO
         RESUME    STOP      TRON
         TROFF     USRN

       Команды компилятора бейсика и ключи
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Компилятор активируется командой BASCOM; он может быть вызван:

         BASCOM
или
         BASCOM командная строка

где "командная строка" это:

[DEV:][OBJ FILE][,[DEV:][LST FILE]]=[DEV:]SOURCE FILE[/SWITCH ...]

    Сразу после вызова BASCOM приглашает пользователя звёздочкой,
после которой пользователю следует вводить командные строки.

КЛЮЧИ:

/E   этот ключ нужен если использован GOTO с RESUME <номер строки>

/X   этот ключ нужен если использованы ON ERROR GOTO с RESUME, RESUME 0,
    или RESUME NEXT

/N   не включает в листинг созданный объектный код

/D   генерирует код для ОТЛАДКИ/ПРОВЕРКИ во время выполнения

/S   пишет строки из более чем 4-х символов в кавычках когда они встречаются

/4   распознаёт соглашения Microsoft интерпретатора бейсика V4.51

/C   ослабляет ограничения по нумерации строк;
    строки не нуждаются в нумерации последовательно;
    ключи /4 и /C не могут быть заданы одновременно

/Z   использовать коды операций процессора Z80

        Сообщения об ошибках компилятора
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ФАТАЛЬНЫЕ ОШИБКИ ВО ВРЕМЯ КОМПИЛЯЦИИ

    SN   syntax error             OM   out of memory
    SQ   sequence error           TM   type mismatch
    TC   too complex              BS   bad subscript
    LL   line too long            UC   unrecognizable command
    OV   math overflow            /0   division by zero

    DD   array already dim'ed     FN   for/next error
    FD   function already def     UF   function not defined
    WE   while/wend error         /E   missing /e switch
                                  /X   missing /x switch

ПРЕДОСТЕРЕЖЕНИЯ О ОШИБКАХ ВО ВРЕМЯ КОМПИЛЯЦИИ

    ND   array not dimensioned    SI   statement ignored


СООБЩЕНИЯ ВРЕМЕНИ ВЫПОЛНЕНИЯ

     2   syntax error             52   bad file number
     3   return without gosub     53   file not found
     4   out of data              54   bad file mode
     5   illegal function call    55   file already open
     6   floating/integer ovfl    57   disk i/o error

     9   subscript out of range   58   file already exists
    11   division by zero         61   disk full
    14   out of string space      62   input past end
    20   resume without error     63   bad record number
    21   unprintable error        64   bad filename

    50   field overflow           67   too many files
    51   internal error

barsik
barsik
Мастер++

Сообщения : 864
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty Русский перевод руководства к компилятору BASCOM

Сообщение  barsik в 02.11.20 5:39

3
Потратил 8 часов на редактирование машинного перевода описания Microsoft Basic Compiler. Коды ошибок компилятора не вошли (из-за ограничения размера поста), это в следующем посте.

Спойлер:

       Оглавление

       Введение
       Нотация документа
       Пример сеанса
       Написание программы для компиляции
       Различия компилятора и интерпретатора
       Новые возможности программирования
       Компиляция, линковка и загрузка, ошибки
       Составление программы
       Ключи компиляции
       Сообщения об ошибках компиляции
       Линкующий загрузчик LINK
       Сообщения об ошибках LINK
       Хранение вашей программы на диске
       Запуск скомпилированной программы
       Сообщения об ошибках времени выполнения
       Использование M80





               ВВЕДЕНИЕ

Компилятор бейсика Microsoft - это высокоэффективный инструмент
программирования, который преобразует бейсик программы из исходного текста в
машинный код. Это обеспечивает гораздо более быстрое выполнение программы на
бейсике, чем это возможно используя интерпретатор. Он может заставить
программы работать в среднем от 3 до 10 раз быстрее, чем программы работающие
под интерпретатором BASIC-80. Компилированные программы могут быть до 30 раз
быстрее, чем интерпретируемые программы, если сделано максимальное
использование целочисленных переменных.

               НОТАЦИЯ ДОКУМЕНТА

Везде, где в этом документе приводится формат оператора или команды
применяются следующие соглашения:

   1. Элементы, написанные заглавными буквами, необходимо вводить, как показано.

   2. Пункты, написанные строчными буквами, заключенные в угловые скобки (<>)
      вводятся пользователем.

   3. Пункты в квадратных скобках ([]) опциональны (т.е могут быть опущены).

   4. Любая пунктуация, кроме угловых и квадратных скобок (то есть запятые,
      круглые скобки, точки с запятой, дефисы и другие символы и знаки)
      должны быть включены там, где показано.

   5. Пункты, за которыми следует многоточие (...), могут повторяться в любом
      количество раз (до длины строки).

   6. Пункты, разделенные вертикальной чертой (\), являются взаимоисклю-
      чающими - из перечисленных опций следует выбрать одну.

               ПРИМЕР СЕАНСА БАБОТЫ

Следующие инструкции проведут вас шаг за шагом через процесс компиляции,
от ввода программы до запуска скомпилированной программы.

ШАГ 1: ПОДГОТОВКА

Загрузите интерпретатор BASIC-80 (он не входит в комплект дистрибутива
BASCOM) с CP/M диска. Программа выведет свой титр и две буквы приглашения

ОК

появятся на экране. Теперь введите:

         AUTO 100, 100

Эта команда инструктирует BASIC-80 автоматически генерировать номера строк,
начиная со строки 100 и увеличиваясь на 100 при каждом нажатии ENTER.

ШАГ 2: ВВЕДИТЕ ПРОГРАММУ

Теперь вы готовы начать вводить текст с клавиатуры в вашу программу на
бейсике. Всё, что как вам известно, работает на Бейсике-80 годится. Или
просто считайте с диска бейсик программу, которую вы уже использовали.

ШАГ 3: СОХРАНИТЕ ПРОГРАММУ

Для того, чтобы компилятор смог обработать её, вы должны сохранить исходную
программу в формате ASCII. Для этого введите:

         SAVE "MYPROG",A

Теперь на вашей дискете должна появиться бейсик программа MYPROG.BAS,
которая готова к компиляции. Вернитесь в ОС CP/M, набрав для выхода из
интерпретатора команду SYSTEM.

ШАГ 4: ПРОВЕРКА НА ОШИБКИ

На этом этапе рекомендуется проверить программу на наличие синтаксических
ошибок. Устранение синтаксических ошибок на этапе до компиляции снизит
вероятность того, что придётся перекомпилировать. Для этого введите:

         BASCOM = MYPROG

Эта команда загружает компилятор бейсика и компилирует исходный файл без
создания объектного файла или файла листинга. Если вы допустили какие-либо
синтаксические ошибки, На экране появится двухбуквенный код. В этом случае
вернитесь к ШАГУ. 1, снова воспользуйтесь интерпретатором BASIC-80 и исправьте
ошибки. Если ошибок не обнаружено, можно продолжить.

ШАГ 5: КОМПИЛЯЦИЯ ФАЙЛА ИСХОДНИКА

Эти команды предписывают компилятору бейсика скомпилировать MYPROG.BAS,
чтобы поместить объектный код в файл с именем MYPROG.REL, и поместить листинг
в файл под названием MYPROG.LST. (.REL и .LST - это расширения по умолчанию,
используемые компилятором бейсика).

Теперь на дискете есть объектный файл MYPROG.REL в перемещаемом формате
и файл листинга трансляции с именем MYPROG.LST. Объектный файл содержит
машинный код, созданный компилятором. Файл листинга содержит операторы
программы вместе с машинным языком, генерируемым каждым оператором.

ШАГ 6: ЗАГРУЗКА И ВЫПОЛНЕНИЕ ПРОГРАММЫ

Линкующий загрузчик LINK-80 используется для создания исполняемой программы.
Чтобы запустить его введите:

         L80 MYPROG,MYPROG/N/E

Эта команда запускает линковщик LINK-80, который, в свою очередь, загружает
объектный файл MYPROG.REL в правильные места в памяти, а затем записывает его
на диск в виде COM-файла. Во время этого процесса (который может занять
некоторое время) нужные в ходе прогона дополнительные системные процедуры
извлекаются из библиотеки времени выполнения BASLIB.REL.

Скомпилированную программу, сохранённую на вашей дискете, можно запустить на
исполнение в любое время, причём саму по себе без использования какой-либо
части компилятора бейсика. Это работает так же, как стандартный командный файл
CP/M. Для выполнения программы просто введите:

         MYPROG

Тогда программа должна работать так же, как и в интерпретаторе, но только заметно
быстрее.

         НАПИСАНИЕ ПРОГРАММЫ ДЛЯ КОМПИЛЯЦИИ

Бейсик программы, которые должны быть скомпилированы, по большей части пишутся
точно так же, как и программы запускаемые в интерпретаторе. Однако есть
некоторые различия между операторами и командами, реализованными в BASIC-80 и
реализоваными в компиляторе бейсика, которые необходимо принимать во внимание.

Компилятор взаимодействует с консолью лишь для чтения команд для компиляции.
Они определяют, какие файлы должны быть скомпилированы. Нет «прямого режима»,
как в интерпретаторе. Команды, которые обычно выдаются в прямом режиме в
интерпретаторе, в компиляторе не реализованы. Следующее операторы, элементы
и команды не реализованы и будут генерировать сообщение об ошибке.

    AUTO      CLEAR*    CLOAD     CSAVE     CONT
    DELETE    EDIT      LIST      LLIST     RENUM
    SAVE      LOAD      MERGE     NEW       COMMON*
    SYSTEM
*
(Примечание: новые релизы компилятора, в которые включён модуль времени
выполнения BRUN поддерживают использование оператора CHAIN вместе с
операторами COMMON и CLEAR, но с определенными ограничениями)

          СВОЙСТВА, РАБОТАЮЩИЕ В КОМПИЛЯТОРЕ ИНАЧЕ

DEFINT /SNG /DBL /STR

Компилятор не «выполняет» операторы DEFxxx; он реагирует на статическое
появление этих операторов, независимо от того, в каком порядке строки
программы выполняются. Оператор DEFxxx вступает в силу, как только
встречается его строка. После того, как тип был определен для данной буквы,
он остается действующим до конца программы или до другого оператора
DEFxxx которое оказывает действие на данную букву.

Функции USRn

Работа функции USRn в компиляторе существенно отличается от её работы
в интерпретаторе. Аргумент функции USRn игнорируется, и полученный из
подпрограммы целочисленный результат возвращается в регистрах HL.
Рекомендуется функции USRn заменять оператором CALL. (См. раздел
"НОВЫЕ ВОЗМОЖНОСТИ ПРОГРАММИРОВАНИЯ" про оператор CALL).

DIM и ERASE

Оператор DIM похож на оператор DEFxxx в том, что он просто проходится при
прогоне, а не исполняется. То есть DIM оказывает эффект, лишь когда
встречается его строка. Если размер по умолчанию (10) уже установлен для
переменной массива, и эта переменная позже встречается в операторе DIM,
то результатом будет ошибка DD (повторная размерность массива). Оператор
ERASE отсутствует в компиляторе, поэтому массивы нельзя стереть и изменить
их размер. ERASE в компилируемой программе приведет к фатальной ошибке.

Также обратите внимание, что значениями индексов в операторе DIM должны
быть целочисленные константы. Они не могут быть переменными, арифмети-
ческими выражениями и значениями с плавающей точкой. Например

    DIM A1 (I)
    DIM A1 (3 + 4)

оба объявления являются недопустимыми.

END

Во время выполнения скомпилированной программы оператор END закрывает
файлы и возвращает управление операционной системе. В конце исходника
для правильного завершения программы нет необходимости вставлять оператор
END, т.к компилятор по умолчанию сам выполняет END в конце программы.

FOR/NEXT

Все циклы FOR/NEXT должны быть статически вложены только с одним
оператором NEXT для каждого оператора FOR.

ON ERROR GOTO/RESUME <номер строки>

Если программа содержит операторы ON ERROR GOTO и RESUME <номер строки>,
в командной строке на компиляцию необходимо использовать ключ компиляции
/E. Если RESUME NEXT, RESUME или RESUME 0 используется, ключ /X также
должен быть включен.

REM

Оператор REM или комментарий, начинающийся с одинарной кавычки, не
отнимает ни время ни пространство во время прогона программы, и поэтому
может использоваться как угодно свободно.

STOP

Оператор STOP идентичен оператору END. Открытые файлы закрываются и
управление возвращается операционной системе.

TRON/TROFF

Чтобы использовать TRON/TROFF, необходимо при компиляции задавать
ключ компиляции /D. В противном случае TRON и TROFF игнорируются, и
генерируется предупреждающее сообщение.

           НОВЫЕ ПРОГРАММНЫЕ СВОЙСТВА В КОМПИЛЯТОРЕ

Компилятор бейсика также добавляет новые функции, которые повысят мощность
и эффективность вашего программирования. Однако помните, что при использо-
вании этих новых функций, которые, хотя они будут успешно компилироваться,
вы не сможете запустить программу, использующую эти функции на интерпрета-
торе, поскольку BASIC-80 не знает их.

Оператор CALL

Оператор CALL позволяет вызывать и передавать управление в подпрограмму
написанную на ассемблере или на FORTRAN-е. Формат оператора CALL:

    CALL <имя переменной> [(<список аргументов>)]

<имя переменной> - это имя подпрограммы, которую вы хотите вызвать. Это имя
должно состоять из 1–6 символов и распознаваться LINK-80, как глобальный
символ (<имя переменной> должно быть именем подпрограммы в фортрановском
операторе SUBROUTINE или объявленным PUBLIC именем на исходнике ассемблера).

<список аргументов> является необязательным и содержит аргументы, которые
передаются в подпрограмму на языке ассемблера или подпрограмму на FORTRAN-е.

Пример: 120 CALL MYROUT (I,J,K)

CHAIN (or RUN)

Операторы CHAIN и RUN выполняют одну и ту же функцию: они позволяют вам
загрузить файл с дискеты в память машины и запустить его. CHAIN (или RUN)
закрывает все открытые файлы и очищает текущее содержимое памяти перед
загрузкой назначенной программы. Формат оператора CHAIN (или RUN) следующий:

          CHAIN <filename>
     или
          RUN <filename>

где <filename> - это имя, использованное при сохранении файла. В компиляторе
для ОС CP/M по умолчанию требуется расширение .BAS.

WHILE ... WEND

Оператор WHILE ... WEND - это условный оператор, который выполняет серию
операторов в цикле, пока выполняется данное условие.

Формат WHILE ... WEND:

    WHILE <выражение>
         -
         -
    <операторы цикла>
         -
         -
    WEND

где <выражение> и <операторы цикла> предоставлены вами.

Пока <выражение> TRUE (т.е не ноль), операторы цикла выполняются до тех пор,
пока не встретится оператор WEND. После этого управление возвращается к WHILE
и он снова проверяет "выражение". Если оно все ещё TRUE, процесс повторяется.
Если же это уже не так, выполнение возобновляется со следующего оператора
после инструкции WEND.

Циклы WHILE/WEND могут быть вложенными на любой уровень, если они статически
вложенные. Каждый WEND будет соответствовать самому последнему WHILE.
Непарный не имеющий WEND оператор WHILE вызывает ошибку «WEND without WHILE»
и непарный WEND также вызывает ошибку «WEND without WHILE».

Пример:
       90   'BUBBLE SORT ARRAY A$
       100  FLIPS=1 'FORCE ONE PASS THRU LOOP
       110  WHILE FLIPS
       115       FLIPS=0
       120       FOR I=1 TO J=1
       130            IF A$(I)>A$(I+1) THEN
                      SWAP A$(I),A$(I+1):FLIPS=1
       140       NEXT I
       150  WEND

Трансцендентальные функции двойной точности

SIN,COS,TAN,SQR,LOG и EXP теперь возвращают результаты с двойной точностью,
если получают аргументы двойной точности. Возведение в степень с операндами
с двойной точностью также выдаст результаты с двойной точностью.

Длинные имена переменных

Имена переменных могут содержать до 40 символов, все 40 символов значимые.
Буквы, числа и десятичные символы разрешены в именах переменных, но имя
должно начинаться с буквы. Имена переменных могут также включать все
команды, операторы, имена функций и имена операторов BASIC-80.

Оценка выражений в бейсик компиляторе

Во время компиляции программы, когда компилятор бейсика вычисляет
выражения, операнды каждого оператора преобразуются к типу самого
точного операнда. Например:

         QR = J% + A! + Q

вызывает преобразование J% в одинарную точность и прибавление к A !. Этот
результат покрывается до одинарной точности и добавляется к Q.

Компилятор более ограничен, чем интерпретатор, в обработке числового
переполнения. Например, интерпретатор в следующей программе

         I% = 20000
         J% = 20000
         К% = - 30000
         M% = I% + J% -K%

даёт 10000 для M%. То есть интерпретатор добавляет I% к J% и, поскольку это
число слишком большое, он преобразует результат в число с плавающей запятой.
K% тогда преобразуется в число с плавающей запятой и вычитается. Найденный
результат 10000 преобразуется обратно в целое число и сохраняется как M%.

Однако компилятор должен принимать решения о преобразовании типов во время
компиляции. Оно не может откладываться до тех пор, пока не станут известны
фактические значения. Таким образом, компилятор генерирует код для выполнения
всей операции в целочисленном режиме. Если установлен ключ /D, ошибка
будет обнаружена. в противном случае будет произведен неправильный ответ.

Чтобы обеспечить оптимальную эффективность скомпилированной программы,
компилятор может выполнить любое количество допустимых алгебраических
преобразований перед генерацией кода. Например, программа

         I% = 20000
         J% = - 18000
         К% = 20000
         M% = I% + J% + K%

может дать неверный результат при запуске. Если компилятор действительно
выполняет арифметические операции в указанном порядке, переполнения не
происходит. Однако если компилятор сначала выполняет I% + K%, а затем
добавляет J%, произойдет переполнение.

Компилятор следует правилам приоритета операторов и скобок изменяющих
приоритет, но никакие другие гарантии порядка вычислений не даются.

Использование целочисленных переменных для оптимизации скорости

Чтобы создать максимально быстрый и компактный объектный код,
используйте целочисленные переменные. Например, эта программа

         FOR I=1 TO 10
         A(I)=0
         NEXT I

может выполняться примерно в 30 раз быстрее, если просто заменить "I%" на
"I". Особенно выгодно использовать целочисленные переменные для вычисления
индексов массива. Сгенерированный код значительно быстрее и более компактный.

Максимальная длина строки

Компилятор не может принять физическую строку, длина которой превышает
253 символа. Однако логический оператор может содержать любое число
физических строк. Используйте перевод строки, чтобы начать новую физи-
ческую строку в логическом операторе.

               КОМПИЛЯЦИЯ ПРОГРАММЫ

Сохранена ли ваша бейсик программа в формате ASCII на вашей дискете?
Чтобы сохранить программу в формате ASCII в интерпретаторе добавьте ключ
"A" к команде SAVE, как показано в разделе ПРИМЕР СЕАНСА РАБОТЫ, шаг 3:

        SAVE "<filename>[.<ext>]",A

Вернитесь командой SYSTEM в ОС CP/M и введите команду:

         BASCOM

Бейсик компилятор выдаст промпт: «*», информируя вас, что бейсик
компилятор загружен и готов принять команду.

Теперь введите команду в следующей форме:

    objfile,lstfile=source file

где objfile - это перемещаемый объектный файл, lstfile - это файл листинга,
а source file - это файл исходной бейсик программы.

Эта команда передаст компилятору имя исходного файла для компиляции, и
имена создаваемых файлов. В ОС CP/M имена файлов могут иметь длину до
восьми символов с трехсимвольным расширением. В CP/M-компиляторе для
имён файлов по умолчанию предполагаются следующие расширения:

         REL       Перемещаемый объектный файл
         LST       файл листинга трансляции
         BAS       файл исходника на бейсике
         MAC       Исходный файл для MACRO-80
         FOR       Исходный файл для FORTRAN-80
         COB       Исходный файл для COBOL-80
         COM       исполняемый файл программы

Если у вас многодисковая система, вы можете указать компилятору, где получить
или поместите файлы, с которыми вы работаете, добавив номер диска к каждому
имени файла. Например:

    A:MYPROG.REL = B:ТЕСТ

находит программу TEST.BAS на дискете в приводе B, компилирует её, и помещает
объектный код в файл MYPROG.REL на дискету, которая находится в дисководе A.

Если диск не указан, объектный файл и файл листинга помещаются на
дискету, которая находится в приводе по умолчанию.

Либо объектный файл, либо файл листинга, либо оба они могут быть опущены.
Объектный файл создается только при заполнении поля lstfile. Следовательно,
если нужно опустить или то или другое, просто опустите имя файла в команде.

Примеры:

TESTOBJ = TEST.BAS  Скомпилируйте программу TEST.BAS
                   и поместите объект в TESTOBJ.REL
                   без создания файла листинга.

TEST,TEST = TEST    Скомпилируйте TEST.BAS, поместите объект в
                   TEST.REL и размещение в
                   TEST.LST.

, = TEST.BAS        Компилировать TEST.BAS, но не создавать
                   ни объектный файл ни файл листинга. Полезно
                   для проверки на наличие ошибок.

RABBIT = TEST       Скомпилирует программу TEST.BAS
                   и поместит объектный код в файл RABBIT.REL
                   без создания файла листинга.

                  КЛЮЧИ КОМПИЛЯЦИИ

Вы можете указать специальные параметры, которые будут использоваться во
время компиляции, добавив ключи в конец командной строки. Ключам всегда
предшествует косая черта, и в одной команде можно использовать более
одного ключа. Пример формата:

    TEST,TEST=TEST/D/X

Если вы не укажете никаких ключей, используются следующие настройки
ключей по умолчанию:

     /Z/4/T

Доступные ключи и их действия следующие:

КЛЮЧ    ДЕЙСТВИЕ

/E      Ключ /E сообщает компилятору, что в программе есть инструкция ON 
       ERROR GOTO. Если оператор RESUME отличается от RESUME <номер строки>
       используется с оператором ON ERROR GOTO, используйте /X вместо этого
       (см.ниже). Для правильной обработки ON ERROR GOTO в скомпилированной
       среде, бейсик должен сгенерировать дополнительный код для операторов
       GOSUB и RETURN. Поэтому не используйте этот ключ, если ваша программа
       не содержит оператора ON ERROR GOTO. Ключ /E также включает номера
       строк в двоичном формате файла, поэтому сообщения об ошибках во время
       выполнения будут включать номер строки с ошибкой.

/X      Ключ /X сообщает компилятору, что программа содержит один или
       несколько операторов RESUME, RESUME NEXT или RESUME 0. Ключ /E
       предполагает, что параметр /X указан. Чтобы обрабатывать RESUME
       правильно в скомпилированной среде, компилятор должен отказаться от
       некоторых оптимизаций. Поэтому не используйте этот ключ, если ваша
       программа не содержит операторов RESUME кроме RESUME <номер строки>.
       Ключ /X также вызывает нумерацию строк, которые будут включены в
       двоичный файл, поэтому сообщения о ошибке времени выполнения будут
       включать номер строки с ошибкой.

/N      Ключ /N предотвращает вставку сгенерированного кода в листинг в
       символьном виде. Если этот ключ не установлен, компилятором в листинг
       включается и объектный код, сгенерированный каждым оператором.

КЛЮЧ    ДЕЙСТВИЕ

/D      Параметр /D вызывает генерацию кода отладки/проверки во время
       выполнения. Этот ключ необходимо установить, если вы хотите
       использовать TRON/TROFF. Компилятор генерирует несколько более
       крупный и медленный код для выполнения следующих проверок:

       1. Арифметическое переполнение. Все арифметические операции, целые и
          с плавающей точкой, проверяются на переполнение и потерю значимости.

       2. Границы массива. Все ссылки на массивы проверяются на предмет того,
          что индексы находятся в пределах, заданных в операторе DIM.

       3. Номера строк включаются в сгенерированный двоичный файл, чтобы
          ошибки времени выполнения могли указать на оператор, содержащий
          ошибку.

       4. Возврат проверяется на предыдущий GOSUB.

/Z      Параметр /Z указывает компилятору использовать коды операций Z80.

/S      Параметр /S заставляет компилятор записывать строки в длинных кавычках
       (т.е. более 4 символов) в двоичный файл, как они есть столкнулся. Это
       позволяет использовать большие программы со многими строками в кавычках
       для компиляции с меньшим объемом памяти. Однако есть два недостатка:

       1. Пространство памяти тратится впустую, если идентичные строки
          в длинных кавычках появляются в программе.

       2. Код, сгенерированный при установленном ключ /S, не
          может быть размещен в ПЗУ.

/4      Ключ /4 позволяет компилятору использовать лексические соглашения
       интерпретатора Microsoft 4.51 Disk BASIC. То есть пробелы незначимы,
       переменные с вложенными зарезервированными словами недопустимы,
       имена переменных ограничены двумя значащими символы и т.д. Эта
       функция полезна, если вы хотите скомпилировать исходную программу,
       написанную без пробелов и содержащая строки типа

          FORI = ATOBSTEPC

       Без ключа /4 компилятор присвоил бы значение переменной "ATOBSTEPC"
       переменной FORI. С ключом /4 это распознаётся как инструкция
       FOR I=A TO B STEP C.

/C      Ключ /C сообщает компилятору, что нужно ослабить ограничения при
       нумерации строк. При указании /C номера строк могут быть в любом
       порядке, либо они могут быть полностью отменены. Строки без номеров
       компилируются нормально, но, конечно, не могут быть целями для GOTO,
       GOSUB, и т.д. При установке /C символ подчеркивания вызывает
       игнорирование остатка физической строки, а следующая физическая
       строка считается продолжением текущей логической строки.

ПРИМЕЧАНИЕ. Ключи/C и /4 нельзя использовать вместе.

/T      Использовать правила выполнения 4.51

/O      Есть только в более новых версиях. Заставляет компилятор создать
       независимую программу вместо такой, которая требует при работе
       присутствия на диске BRUN.COM модуля времени выполнения. Этот
       ключ порождает гораздо большие по размеру программы, потому что
       все подпрограмм времени выполнения должны быть включены в код.

               СООБЩЕНИЯ ОБ ОШИБКАХ КОМПИЛЯТОРА

Следующие ошибки могут возникать во время компиляции программы. Компилятор
бейсика выводит двухсимвольный код ошибки вместе со стрелкой. Стрелка
указывает, где в строке возникла ошибка. В тех случаях где компилятор прочитал
вперёд, прежде чем обнаружил место ошибки, стрелка указывает на несколько
символов за ошибкой или в конец строки. Коды ошибок следующие:

ФАТАЛЬНЫЕ ОШИБКИ

КОД ОШИБКА

SN Ошибка синтаксиса. Вызвано одной из следующих причин:

  Недопустимое название аргумента
  Цель незаконного присвоения
  Недопустимый постоянный формат
  Незаконный запрос на отладку
  Недопустимая спецификация символа DEFxxx
  Синтаксис недопустимого выражения
  Список недопустимых аргументов функции
  Недопустимое имя функции
  Неверный формальный параметр функции
  Незаконный разделитель
  Недопустимый формат номера выписки
  Недопустимый синтаксис подпрограммы
  Неправильный символ
  Отсутствует AS
  Отсутствует знак равенства
  Отсутствует GOTO или GOSUB
  Отсутствует запятая
  Отсутствует INPUT
  Отсутствует номер строки
  Отсутствует левая скобка
  Отсутствует знак минус
  В выражении отсутствует операнд
  Отсутствует правая скобка
  Отсутствует точка с запятой
  Имя слишком длинное
  Ожидается GOTO или GOSUB
  Требуется присвоение строки
  Требуется строковое выражение
  Здесь требуется строковая переменная
  Незаконный синтаксис
  Здесь требуется переменная
  Неверное количество аргументов
  Формальные параметры должны быть уникальными
  Допускается только одна переменная
  Отсутствует ТО
  Недопустимая индексная переменная цикла FOR
  Отсутствует THEN
  Отсутствует BASE
  Недопустимое имя подпрограммы

ОМ Недостаточно памяти
  Слишком большой массив
  Переполнение памяти данных
  Слишком много номеров выписок
  Переполнение памяти программы

SQ Ошибка последовательности
  Повторяющийся номер выписки
  Заявление вне последовательности

TM Несоответствие типа
  Конфликт типов данных
  Переменные должны быть одного типа.

BS Bad Subscript
  Недопустимое значение размера
  Неверное количество индексов
  Линия LL слишком длинная

UC Неузнаваемая команда
  Заявление до неузнаваемости
  Команда не реализована

OV Math Overflow

/0 Деление на ноль
  Размер массива DD уже измерен

FN ошибка FOR/NEXT
  Переменная индекса цикла FOR уже используется
  FOR без NEXT
  NEXT без FOR

FD Функция уже определена
UF Функция не определена

WE ошибка в WHILE/WEND
  WHILE без WEND
  WEND без WHILE

/E Отсутствует ключ "/E"
/X Отсутствует ключ "/X"

ND Массив без размеров

SI Оператор игнорируется
   Оператор проигнорирован
   Невыполненная команда

Если бейсик компилятор сообщает вам о любой из этих ошибок, вернитесь к
исходной программе для отладки, исправьте и попробуйте еще раз.

Если во время компиляции не было обнаружено ошибок, и если вы так задали, то
теперь у вас на дискете есть объектный файл, содержащий машино-понимаемый код.
Также на вашей дискете находится файл листинга, содержащий операторы программы
вместе с машинным кодом, созданным каждым оператором.

Следующим шагом в процессе является загрузка и выполнение программы с
помошью линковщика LINK-80.

               Загрузчик LINK-80

Как показано в разделе "ПРИМЕР СЕАНСА", скомпилированные объектные файлы
загружаются в память и выполняются с помощью линкующего загрузчика LINK-80.
Загрузчик имеет много применений. Вы можете просто загрузить одну скомпили-
рованную программу и запустить её, или вы можете загрузить несколько программ
или подпрограмм языка ассемблера одновременно. Программы могут быть загру-
жены в указанные пользователем ячейки, а также программные области и области
данных могут быть разделены в памяти. А образ памяти исполняемого файла,
созданный LINK-80, может быть сохранен на диск, чтобы запускать его позже.

               ЗАПУСК LINK-80

На командном уровне DOS (т.е в CCP CP/M) введите:

    L80

Это загрузит LINK-80, который ответит: *. Загрузчик вернётся обратно в CCP CP/M,
если в ответ на звездочку набрать Control-C. Загрузчик также сам выходит в
ДОС CP/M после ключа /E или /G в ком.строке. Подробнее об этих ключах позже.

ФОРМАТ КОМАНДЫ LINK-80

Команда для LINK-80 состоит из имени (имен) файла (ов), который будет загружен.
Например, чтобы загрузить скомпилированную программу MYPROG.REL, введите:

    MYPROG

Нет необходимости вводить расширение по умолчанию .REL. Эта команда загружает
программу, но не запускает ее. Всякий раз, когда LINK-80 загружает компилятор
бейсика программа, она автоматически ищет в библиотеке бейсика необходимые
подпрограммы и загружает их тоже. Следовательно файл BASLIB.REL должен всегда
находиться на диске по умолчанию в процессе загрузки.

Чтобы запустить MYPROG, введите:

    /G

Это ключ «перейти» или «выполнить». LINK-80 печатает два числа и сообщение BEGIN
EXECUTION. LINK-80 всегда возвращается в DOS после того, как ключ /G был исполнен.

Как вы возможно догадались, не обязательно выполнять эти операции отдельными
командами. Можно ввести одну командную строку который запускает LINK-80,
загружает MYPROG.REL и выполняет его. Для этого введите:

L80 MYPROG/G

БОЛЬШЕ КОМАНД И КЛЮЧЕЙ

LINK-80 предоставляет другие возможности помимо загрузки и выполнения
программы, например просмотр вывода без сохранения программы или сбросить
загрузчик, чтобы можно было исправить ошибку. Ключи используются для
информирования LINK-80 о том, что вы хотите выполнить особые задачи.

Вот пример, который загружает и сохраняет программу под названием TEST.REL.

    > L80
    * ТЕСТ,ТЕСТ/N/E

Первая часть команды (TEST) укзывает загрузить программу TEST.REL. Следующая
часть (TEST/N) сохраняет копию загруженной программы на диске в файл под
именем TEST.COM. Последняя часть (/E) заставляет LINK-80 вернуться в CCP CP/M.

КЛЮЧ /N

Обратите внимание на ключ /N. Этот ключ сохраняет в памяти образ исполняемого
файла на диске. Расширение по умолчанию для сохранённого файла - .COM, и этот
файл называется «командным файлом». После сохранения на диске вам нужно только
ввести имя файла на командном уровне ОС CP/M, чтобы запустить программу. Ключ
/N должен сразу следовать за именем каждого файла, который вы хотите сохранить,
и не вступает в силу, пока не будет выполнен ключ /E или /G.

Следующий пример связывает несколько объектных файлов, сохраняет образ
основной программы и запускает программу TAXES.REL.

    > L80
    * SUB1,SUB2,TAXES/N,TAXES/G

Две подпрограммы (SUB1) и (SUB2) и объектный файл (TAXES) линкуются и
загружаются. Программа запускается и командный файл TAXES.COM
сохраняется на диск.

КЛЮЧ /R

Еще один удобный ключ - /R. Он возвращает LINK-80 в исходное состояние путем
"разгрузки" всего, что вы загрузили. Используйте его для сброса загрузчика, если
вы допустили опечатку или загрузили не ту программу. Ключ /R исполняется, как
только LINK-80 его увидит, поэтому, если вы введете его в любое время когда
LINK-80 запущен, загрузчик сбросится. Например:

    > L80
    * INVEN1
    * /R (Упс - предназначен для загрузки INVEN2)
    * INVEN2 (сейчас загружен только INVEN2)

СПЕЦИАЛЬНЫЕ КЛЮЧИ

Для типичной работы бейсик компилятора только указанные выше ключи будут
необходимы. Некоторые пользователи могут обнаружить, что их приложениям
требуется более специализированные возможности. По этой причине следующие
ключи также встроены в LINK-80.

В этих примерах все программы были загружены в адрес по умолчанию CP/M. В
особых случаях пользователь может указать место загружаемых программ
и данных. Чтобы сделать это LINK-80 предоставляет специальные ключи.

/E: Name  Необязательная форма ключа /E. Имя глобальное
         символ, ранее определенный в одном из модулей. LINK-80
         использует Имя в качестве начального адреса программы.

/G: Name  Это необязательная форма ключа /G. Name - глобальный
         символ, ранее определенный в одном из модулей. LINK-80
         использует Name в качестве начального адреса программы.

/P и /D
       /P и /D позволяют установить исходную точку (точки) для загрузки
       следующей программы. /P и /D вступают в силу, когда они видны (не
       откладываются), и они не влияют на уже загруженные программы. Форма /P:
       <адрес> или /D: <адрес>, где <адрес> - это желаемый origin в текущем
       типе системы счисления.
       
       (Система счисления по умолчанию шестнадцатеричная.
       /O - устанавливает систему счисления восьмеричную;
       /H - шестнадцатеричную)
       
       LINK-80 имеет значение по умолчанию /P: <link origin> (т.е 100H).

       Если не указано /D, области данных загружаются перед программными кодами
       для каждого модуля. Если дано /D, все данные и общие области загружаются,
       начиная с "data origin", а программы в область "program origin". Пример:

              * /P: 200, FOO
              ДАННЫЕ 200 300
              */Р
              * /P: 200-D: 400, FOO
              ДАННЫЕ 400 480
              ПРОГРАММА 200 280

/U      Вывести начало и конец программы, области данных и всех неопределённых
       глобальных имён, как только текущая командная строка будет
       интерпретирована. Информация о программе печатается, только если ключ /D
       был исполнен. В противном случае программа сохраняется в области данных.

/M      Перечислить начало и конец программы и области данных, все
       неопределённые глобальные имена и их значения, а также все
       неопределённые глобальные имена с последующей звездочкой. Информация о
       программе печатается только в том случае, если /D было выполнено. В
       противном случае программа хранится в области данных.

/X      Если было указано имя файла /N, /X приведет к тому, что файл будет
       сохраняется в интелловском HEX-формате ASCII с расширением .HEX.

/Y      Если было указано имя файла /N, /Y создаст имя файла. файл при вводе /E.
       Этот файл содержит имена и адреса всех глобальных имён для использования с
       отладчиками SID и ZSID от фирмы Digital Research.

               ПОИСК ПО СИСТЕМНОЙ БИБЛИОТЕКЕ

Каждый раз, когда загружается программа из под бейсик компилятора, LINK-80
автоматически ищет библиотеку бейсик компилятора для необходимых подпрограмм и
загружает их. Если LINK выдает ошибку "Undefined", это означает, что компилятор
не может найти что-то необходимое для завершения линковки программы. Обычно это
имя подпрограммы, которую вы забыли загрузить.

Если вы используете бейсик компилятор вместе с Microsoft FORTRAN-80, вы также
можете ссылаться на некоторые из библиотечных процедур FORTRAN. По этой
причине в LINK-80 включён ключ /S для принудительного поиска отдельных
библиотечных модулей. Например:

    * FORLIB/S,ТЕСТ/G

Если вы не используете FORLIB (поставляется с FORTRAN-80), вам не потребуется
ключ /S.

               СООБЩЕНИЯ ОБ ОШИБКАХ LINK-80

LINK-80 выдаёт следующие сообщения об ошибках:

?No Start Address       Выдан ключ /G, но основная
                       программа не была загружена.

?Loading Error          Последний файл, указанный для ввода, был
                       не в формате объектных файлов LINK-80

?Out of Memory          Недостаточно памяти для загрузки программы.

?Command Error          Нераспознаваемая команда LINK-80.

?<file> Not Found       <file>, указанный в командной строке,
                       не существует.

%2nd COMMON larger
                       Первое определение COMMON блок /XXXXXX/ не было самым
                       большим. Изменить порядок загрузки модуля
                       последовательность или изменение общего блока
                       определения.

%Mult. Def. Global YYYYYY
                         Более одного определения для глобальный (внутренний)
                         символ YYYYYY было встречено во время процесса
                         загрузки.

%Overlaying Program Area Data
                        ,Start = xxxx
                        ,Public = <symbol name>(xxxx)
                        ,External = <symbol name>(xxxx)
                        /D или /P приведут к тому, что уже
                        загруженные данные будут разрушены

?Intersecting Program Area Data
                        Область программы и данных пересекаются и адрес или
                        внешняя цепочка вход находится на этом перекрестке. В
                        окончательное значение не может быть преобразовано в
                        текущее значение, поскольку оно находится в  площади
                        пересечения.

?Start Symbol - <name> - Undefined
                        После ввода /E: или /G: указанный символ не был определен.

Origin Above (Below) Loader Memory, Move Anyway (Y or N)?
                        После того, как было дано /E или /G, либо область
                        данных или программы имеет начало или вершину, которая
                        лежит выше памяти загрузчика (т.е источник загрузчика
                        выше памяти). Если Y и CR учитываем, LINK-80
                        переместит область и продолжаем. Если что-то еще
                        учитывая, LINK-80 выйдет. В любом случае, если был
                        задан /N, образы уже были сохранены.

?Can't save Object File
                       Произошла ошибка диска при сохранении файла.

               ХРАНЕНИЕ ПРОГРАММЫ НА ДИСКЕТЕ

После загрузки LINK-80 объектный файл имеет форму, которая может выполняться на
любом компьютере CP /M. Вы можете сохранить эту скомпилированную программу на
ваша собственной дискете, чтобы её можно было запустить позже без использования
компилятора бейсика вообще.

Ключ /N (обсуждается в разделе LINK-80) - это ключ, который вызывает ваш
объектный файл будет сохранен. Расширение по умолчанию для сохраненного файла:
.COM, и этот файл называется "командным файлом".

               ЗАПУСК СКОМПИЛИРОВАННОЙ ПРОГРАММЫ

Ваша скомпилированная программа (ранее сохраненная на вашей дискете) теперь
может быть выполнена в любое время. Когда вы находитесь на командном уровне
(в CCP) ОС CP/M, дискета на котором вы сохранили свою программу вставлена
в дисковод, просто введите:

    <имя файла>

На этом этапе ваша программа должна выполняться, и ваш вывод должен появиться
на экране. Однако вы можете получить сообщение об ошибке выполнения. Если да,
посмотрите его в следующем списке и отлаживайте свою программу как можно
лучше, прежде чем пытаться снова сохранить её на дискете.

               СООБЩЕНИЯ ОБ ОШИБКАХ ВРЕМЕНИ ВЫПОЛНЕНИЯ

[продолжение в следующем посте]

barsik
barsik
Мастер++

Сообщения : 864
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  barsik в 02.11.20 5:40

4
Окончание перевода руководства по компилятору BASCOM.

Спойлер:

               СООБЩЕНИЯ ОБ ОШИБКАХ ВРЕМЕНИ ВЫПОЛНЕНИЯ

Следующие ошибки могут возникать во время выполнения скомпилированной программы.
Номера этих ошибок совпадают с номерами ошибок, выдаваемых интерпретатором
BASIC-80. Система времени выполнения печатает длинные сообщения об ошибках
за которыми следует адрес, если только /D, /E или /X указаны. В таких случаях
за сообщением об ошибке следует лишь номер строки, в которой произошла ошибка.

НОМЕР СООБЩЕНИЕ

2       Syntax error
         Обнаружена строка, содержащая неверную
         последовательность символов в операторе DATA.

3       RETURN without GOSUB
         Встретился оператор RETURN, для которого ранее не было
         выполнено оператора GOSUB.

4       Out of Data
         Оператор READ выполняется, когда в программе не осталось
        операторов DATA с ещё несчитанными данными.

5       Illegal function call
         В математическую или строковую функцию передаётся параметр,
        выходящий за пределы допустимого диапазона. Ошибка FC также
        может возникать в результате:

         1. отрицательный или необоснованно большой нижний индекс
         2. отрицательный или нулевой аргумент с LOG
         3. отрицательный аргумент в пользу SQR
         4. отрицательная мантисса с нецелым числом показателем степени
         5. вызов функции USR, для которой начальный адрес не указан
         6. неправильный аргумент для ASC, CHR$, MID$,
              LEFT$, RIGHT$, INP, OUT, WAIT, PEEK, POKE, TAB,
              SPC, STRING$, SPACE$, INSTR или ON ... GOTO
         7. конкатенация строк длиннее, чем 255 символов

6       Floating overflow or integer overflow
         Результат вычисления слишком велик, чтобы его можно было представить
         в числовом формате бейсика. Если происходит потеря значимости,
         результат равен нулю и выполнение продолжается без ошибок.

9       Subscript out of range
         На элемент массива указывается с помощью нижнего индекса
        выходящего за пределы размеров массива.

11      Division by zero
         В выражении встречается деление на ноль или результат операции
         возведения в степень оказавшийся нулём возводится в отрицательную
        степень. Машинная бесконечность со знаком числителя представляется
        как результат деления, или положительная машинная бесконечность
        представляется как результат возведения в степень, и выполнение
        программы продолжается.

14      Out of string space
         Объём строковых переменных превысил размер памяти
        выделенный для хранения строковых переменных.
         

20      RESUME without error
         Оператор RESUME встретился до возникновения ошибки
        и передачи управления на процедуру её обработки.

21      Unprintable error
         Сообщение об ошибке недоступно для возникшей ошибки.
        Обычно это вызвано ошибкой с неопределенным кодом ошибки.

50      Field overflow
         Оператор FIELD пытается выбрать больше байтов, чем было
        определено под длину записи файла с произвольным доступом.

51      Internal error
         Произошла внутренняя неисправность дискового
         BASIC-80. Сообщите в Microsoft об условиях
         при которых появилось сообщение.

52      Bad file number
         Оператор или команда ссылается на файл с номером, который
        не открыт или находится вне диапазона номеров файлов,
        указанных при инициализации.

53      File not found
         Операторы RUN, CHAIN, KILL или OPEN ссылаются на файл,
         которого нет на текущем диске.

54      Bad file mode
         Предпринята попытка использовать PUT, GET или LOF с
         последовательным файлом или открывается файл в режиме
         ином кроме разрешённых I, O, R, D.

55      File already open
         Открывается файл в режиме последовательного вывода для
         уже открытого файла или удаляется файл, который открыт.

57      Disk I/O error
         Ошибка ввода/вывода при дисковой операции. Ошибка
         является фатальной, т.е операционная система не может
         восстановиться после такой ошибки.

58      File already exists
         Указанное имя файла идентично имени файла
         уже используемого на диске.

61      Disk Full
         Все дисковое пространство выделенное для хранения файлов занято.

62      Input past end
         Оператор INPUT из файла выполняется после того как уже были введены
        по INPUT все данные из этого файла, или выполняется INPUT из файла
        нулевой длины. Чтобы избежать этой ошибки, используйте функцию EOF
        для обнаружения конца файла.

63      Bad record number
         В операторе PUT или GET номер записи либо больше максимально
        допустимого (32767), либо равен нулю.

64      Bad file name
         Некорректное имя используется для имени файла в RUN, CHAIN, KILL
        или OPEN (например, имя файла содержит слишком много символов).

67      Too many files
         Делается попытка создать новый файл, а каталог диска заполнен
        (не найдено свободных экстентов в каталоге).



При ближайшем рассмотрении обнаружилось, что у Digital Research аж два компилятора бейсика - один называется CBASIC, а второй якобы более продвинутый и из более позднего времени, называется CB-80. В его мануале написано, что он более эффективный, чем CBASIC, но несовместимый. Правда указано, что есть возможность конвертировать программы рассчитанные на компиляцию CBASIC-ом в исходник рассчитанный на CB-80. И этот CB-80 тоже только для КР580, как и CBASIC.

Встретил даже такую строку в текстах: "Компилятор CB-80 дает более эффективный код, чем BASCOM и примерно в 1.5-3 раза меньший объём кода." Но вот доки у CB-80 (по крайней мере у меня только один TXT-файл в 240 Кб на английском и всё. А для для CBASIC доков побольше, есть и на английском и на русском (хотя перевод похоже плохой, похоже машинный с правкой).

Прямо глаза разбегаются, сходу почти не имея Инфо, сложно решить каким бейсиком компилятором лучше заняться, что выбрать. В мануале на CBASIC стоит как копирайт 1977, 1978, так и 1982, бес его знает из какого он года (возможно первая версия из 1977 и далее дорабатывался). А CB-80 из 1981 и 1982. С другой стороны, почему-то в воспоминаниях Гарри Килдэлла нет ни слова про бейсики компиляторы, он в своих воспоминаниях тащится и нахваливает только PL/1, который якобы очень крут и эффективен.

Но в качестве ДОК-ов пока имею лишь мануалы к компиляторам. А должны бы существовать ещё и книги, типа учебников для слабоумных чайников, что мне как раз и подошли бы. Одна книга про Microsoft Basic для TRS-80 есть в формате PDF и с её помощью можно удобно поизучать сам язык, посмотреть примеры, разобраться с работой с файлами (т.к всё остальное в бейсике более-менее просто и очевидно). Но эта книга лишь про интерпретатор (видимо тогда у автора книги ещё не было компилятора, или денег на компилятор не хватило, стоил он $400, что немало для тех лет). Так что надо поискать книги про бейсик они должны были быть написаны, т.к в конце 70-тых, начале 80-тых бейсик ещё считался ЯВУ.

- - - Добавлено - - -

Хрен сходу нашёл книги по ретро бейсикам 8-ми разрядок на русском. Практически всё для IBM PC (MSDOS MBasic/TB/QB/PB), а в худшем случае для экзотичеких советских машин 70-тых, 80-тых, я уж не говорю о Visual бейсиках и тому подобном, что уже из 90-тых и позднее. Но ещё буду искать на английском (т.е с ключом Lang:en) по словам BASCOM, CBASIC, CB-80, может что-то и всплывёт, хотя надежды на это немного, т.к на вражьих языках почти всегда скачка за деньги. Пока на вражьем языке рекомендую почитать вот эту книжку.

Кстати, максимально полезной оказалась подборка книг на этом же форуме, здесь. Это избавляет от траты времени, т.к это же можно скачать и по всему Интернету, но возни будет в 20 раз больше. Потому что сейчас всё больше скачивание книг становится платным, наглые паразиты присосавшиеся к Интернету (и видимо дающее взятки чиновникам Роскомнадзора) дерут деньги за книги, которые не они писали, а тех кто выкладывает те же книги бесплатно преследуют и травят (натравливают Роскомнадзор), чтобы не портили им их паразитический бизнес. Из-за этих паразитов теряешь впустую время пока найдёшь книгу с бесплатным скачиванием и таких мест становится с каждым годом всё меньше и меньше.

Кстати, паразиты могут и сюда прийти, например на форуме ZX-PK.ru эти паразиты (не владеющие никакими правами на техническую литературу 80-тых и накаких договоров с их авторами естественно не заключившие) пресекли выкладку книг: нагло наехали на ZX-PK.ru, - у хозяина форума сыграло очко, он повёлся на наглецов, сразу сдрейфил и скачку книг убрали. Так что пользуйтесь, качайте эти книги на халяву, пока возможно. Хотя особо полезных книг в этой подборке нет, но по чуть-чуть сведений из каждой книги (кроме конечно книги "Бейсик - детям") и из них можно поиметь.

На бейсике интерпретаторе пишут в основном так называемые "текстовые адвентюры" типа Ди-энд-Ди. Это туфта, на экране ничего кроме английских слов, никто не бегает, никто не стреляет, даже изображения лабиринта обычно не показывают. Но якобы это интересно, например, ботаники учёные в сериале "Теория большого взрыва" часто играют в такую чушь. Таких англоязычных игр на бейсике (в основном из 70-тых годов) можно скачать десятки. Типично экран в текстовой адвентюре выглядит так:

Спойлер:

Можно ли на бейсике написать динамичную игру для РК86 ? Adventure.1604594243

Можно ли на бейсике написать динамичную игру для РК86 ? Textadventure.1604594871

Можно ли на бейсике написать динамичную игру для РК86 ? Camel.1604594971
barsik
barsik
Мастер++

Сообщения : 864
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty пост для удаления

Сообщение  barsik в 05.11.20 19:53

5
.


Последний раз редактировалось: barsik (06.11.20 22:33), всего редактировалось 1 раз(а)
barsik
barsik
Мастер++

Сообщения : 864
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 05.11.20 23:49

6
CB-80 Language Reference Manual (Mar 1982г.)

Можно ли на бейсике написать динамичную игру для РК86 ? 9ed_0034


Скачать

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 05.11.20 23:58

7
CBASIC Compiler CB86 Programmers Guide (May 1983г.)

Можно ли на бейсике написать динамичную игру для РК86 ? 9ed_0035


Скачать

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 06.11.20 0:05

8
CBASIC Compiler Graphics Guide (May 1983г.)

Можно ли на бейсике написать динамичную игру для РК86 ? 9ed_0036


Скачать

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 06.11.20 0:13

9
CBASIC Compiler Reference Manual (Dec 1982г.)

Можно ли на бейсике написать динамичную игру для РК86 ? 9ed_0037


Скачать

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 06.11.20 0:26

10
CBASIC Language Reference Manual (Oct 1982г.)

Можно ли на бейсике написать динамичную игру для РК86 ? 9ed_0038


Скачать

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 06.11.20 0:37

11
CBASIC Version 2 (Jan 1981г.)

Можно ли на бейсике написать динамичную игру для РК86 ? 9ed_0039


Скачать

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 06.11.20 0:44

12
Ну, и в дополнение, на всякий случай, вдруг пригодится.

Pascal MT+ Language Reference Manual (Feb 1983г.)

Можно ли на бейсике написать динамичную игру для РК86 ? 9ed_0040


Скачать

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 06.11.20 0:49

13
Pascal MT+ Language C/PM Programmers Guide (Mar 1983г.)

Можно ли на бейсике написать динамичную игру для РК86 ? 9ed_0041


Скачать



Достаточно. Будет полезно кому-то, хорошо, нет, пусть будет для сохранности.

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  barsik в 06.11.20 21:40

14
Большое спасибо... Но это не та тема, где Вы выкладываете всё скачанное с Интернета типа упомянутой выше темы "Технические книги по бейсику". Для складирования информации у Вас созданы свои темы.

А эта тема, как бы мой блог, точно так же как и Вы, по вашим словам, ведёте дневник, а точнее просто вставляете в посты чужие тексты из книг и мануалов. Я же не лезу туда, в ваши технические темы и не захламляю их огромных количеством картинок, причём без спойлера и даже не одним постом (что логично при выкладе всех зараз) или своим флеймом. Может быть в складской теме, картинки внешнего вида книг полезны, позволяют узнать знакомые книги.

Я понимаю, что Вы хотели как лучше, оказать услугу и облегчить поиск интересантам, но было бы лучше и вполне хватило бы одного поста с несколькими строчками сссылок. Спасибо конечно за выкладки (среди них нашёл даже 1 файл, которого не имел), но есть просьба поместить все выкладки в один пост, а если картинки не убирать, то под спойлером.

Зачем нужны картинки, это читают не дети. Тем более, что титульные листы мануалов неинформативные и единообразные, а с этими картинками замучишься листать и зачем людям их смотреть и скачивать всякий раз, когда смотришь очередной пост (чтобы избежать приходится отключать в браузере загрузку картинок). Чтобы этого не было, на форумах принято картинки класть под спойлеры, особенно, когда она не одна.


Последний раз редактировалось: barsik (07.11.20 6:25), всего редактировалось 1 раз(а) (Обоснование : вставил пропущенную букву)
barsik
barsik
Мастер++

Сообщения : 864
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty .

Сообщение  Viktor2312 в 06.11.20 22:45

15
нашёл даже 1 файл, которого не имел

Но. хоть чем-то помог, и то хорошо, остальное комментить не буду, вы же знаете - "Категорически не согласен". Постараюсь больше вас не беспокоить. У каждого своё видение, но вы дерзайте, лично плохого ничего не вижу в ваших, опусах, они интересны, ну минимум как чтиво на ночь, да потомки ещё потом спасибо скажут, и возможно не мне...

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12720
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Можно ли на бейсике написать динамичную игру для РК86 ? Empty Re: Можно ли на бейсике написать динамичную игру для РК86 ?

Сообщение  Спонсируемый контент

16

Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения