Последние темы
» Вити больше нет!автор bug19 Пн Фев 20 2023, 19:54
» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47
» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05
» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03
» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02
» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52
» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36
» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37
» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33
» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00
» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58
» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17
» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07
» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08
» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09
» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02
» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47
» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11
» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33
» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38
» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12
» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01
» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22
» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08
» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08
Самые активные пользователи за месяц
Нет пользователей |
Поиск
Можно ли на бейсике написать динамичную игру для РК86 ?
Страница 1 из 1 • Поделиться
Можно ли на бейсике написать динамичную игру для РК86 ?
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, столько сколько на нём уместится файлов оверлеев). И естественно лучше, чтобы диском для подгрузки оверлеев был эл.диск или хотя бы винт (т.к с дискеты файлы грузятся сравнительно долго).
Конечно назначение большинства операторов бейсика я ещё помню (да и как их забудешь, если они самоговорящие английские слова), но знание назначения даже всех операторов не значит умения писать программу. Надеюсь, что вспомнить удастся, это ведь не изучение заново. Кстати, недавно в одном форуме прочитал, что когнитивные способности с возрастом резко падают. У меня они уже упали почти до нуля. Я бы ещё добавил, что и желание осваивать что-то новое тоже нулевое. Тут бы хотя бы старые знания не забыть.
Когда-то я немного умел программировать на бейсике компиляторе и даже книгу 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 разработка высокодинамичных игр даже компилятором бейсика пока под вопросом. Но, не попробовав не узнаешь (девиз наркоторговцев). Зато в пользу бейсика можно сказать, что он хорошо подходит для
Начать полезно с того, чтобы разобраться с методикой компиляции на 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- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
Перевод введения к Microsoft бейсикам (интерпретатору и компилятору)
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- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
Русский перевод руководства к компилятору BASCOM
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- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
.
4
Окончание перевода руководства по компилятору BASCOM.
При ближайшем рассмотрении обнаружилось, что у 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-тых годов) можно скачать десятки. Типично экран в текстовой адвентюре выглядит так:
- Спойлер:
СООБЩЕНИЯ ОБ ОШИБКАХ ВРЕМЕНИ ВЫПОЛНЕНИЯ
Следующие ошибки могут возникать во время выполнения скомпилированной программы.
Номера этих ошибок совпадают с номерами ошибок, выдаваемых интерпретатором
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-тых годов) можно скачать десятки. Типично экран в текстовой адвентюре выглядит так:
- Спойлер:
barsik- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
пост для удаления
5
.
Последний раз редактировалось: barsik (Пт Ноя 06 2020, 22:33), всего редактировалось 1 раз(а)
barsik- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
.
14
Большое спасибо... Но это не та тема, где Вы выкладываете всё скачанное с Интернета типа упомянутой выше темы "Технические книги по бейсику". Для складирования информации у Вас созданы свои темы.
А эта тема, как бы мой блог, точно так же как и Вы, по вашим словам, ведёте дневник, а точнее просто вставляете в посты чужие тексты из книг и мануалов. Я же не лезу туда, в ваши технические темы и не захламляю их огромных количеством картинок, причём без спойлера и даже не одним постом (что логично при выкладе всех зараз) или своим флеймом. Может быть в складской теме, картинки внешнего вида книг полезны, позволяют узнать знакомые книги.
Я понимаю, что Вы хотели как лучше, оказать услугу и облегчить поиск интересантам, но было бы лучше и вполне хватило бы одного поста с несколькими строчками сссылок. Спасибо конечно за выкладки (среди них нашёл даже 1 файл, которого не имел), но есть просьба поместить все выкладки в один пост, а если картинки не убирать, то под спойлером.
Зачем нужны картинки, это читают не дети. Тем более, что титульные листы мануалов неинформативные и единообразные, а с этими картинками замучишься листать и зачем людям их смотреть и скачивать всякий раз, когда смотришь очередной пост (чтобы избежать приходится отключать в браузере загрузку картинок). Чтобы этого не было, на форумах принято картинки класть под спойлеры, особенно, когда она не одна.
А эта тема, как бы мой блог, точно так же как и Вы, по вашим словам, ведёте дневник, а точнее просто вставляете в посты чужие тексты из книг и мануалов. Я же не лезу туда, в ваши технические темы и не захламляю их огромных количеством картинок, причём без спойлера и даже не одним постом (что логично при выкладе всех зараз) или своим флеймом. Может быть в складской теме, картинки внешнего вида книг полезны, позволяют узнать знакомые книги.
Я понимаю, что Вы хотели как лучше, оказать услугу и облегчить поиск интересантам, но было бы лучше и вполне хватило бы одного поста с несколькими строчками сссылок. Спасибо конечно за выкладки (среди них нашёл даже 1 файл, которого не имел), но есть просьба поместить все выкладки в один пост, а если картинки не убирать, то под спойлером.
Зачем нужны картинки, это читают не дети. Тем более, что титульные листы мануалов неинформативные и единообразные, а с этими картинками замучишься листать и зачем людям их смотреть и скачивать всякий раз, когда смотришь очередной пост (чтобы избежать приходится отключать в браузере загрузку картинок). Чтобы этого не было, на форумах принято картинки класть под спойлеры, особенно, когда она не одна.
Последний раз редактировалось: barsik (Сб Ноя 07 2020, 06:25), всего редактировалось 1 раз(а) (Обоснование : вставил пропущенную букву)
barsik- Ветеран
- Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия, СПб
.
15
нашёл даже 1 файл, которого не имел
Но. хоть чем-то помог, и то хорошо, остальное комментить не буду, вы же знаете - "Категорически не согласен". Постараюсь больше вас не беспокоить. У каждого своё видение, но вы дерзайте, лично плохого ничего не вижу в ваших, опусах, они интересны, ну минимум как чтиво на ночь, да потомки ещё потом спасибо скажут, и возможно не мне...
Viktor2312- RIP
- Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск
Похожие темы
» Можно ли улучшить РК86 без вторжений на печатной плате
» Можно посмотреть
» Компиляторы Си для программирования РК86
» CP/M для РК86 и Микроши
» Сопроцессор в РК86
» Можно посмотреть
» Компиляторы Си для программирования РК86
» CP/M для РК86 и Микроши
» Сопроцессор в РК86
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|