Integer BASIC

редактировать
BASIC-интерпретатор компьютеров Apple I и оригинальных компьютеров Apple II
Integer BASIC
Разработчик Стив Возняк
Впервые появилось1976; 44 года назад (1976)
Платформа Apple I, Apple II
Под влиянием
HP BASIC
Под влиянием
Applesoft BASIC

Integer BASIC - это интерпретатор BASIC, написанный Стивом Возняком для компьютеров Apple I и Apple II. Первоначально доступный на кассете для Apple I в 1976 году, затем включенный в ROM на Apple II с момента его выпуска в 1977 году, это была первая версия BASIC, используемая многими ранними домашний компьютер владельцы.

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

Еще одно отличие от других BASIC той эпохи состоит в том, что Integer BASIC рассматривал строки как массивы символов, аналогично системе в C или Фортран 77. Доступ к подстрокам осуществлялся с использованием нарезки массива, а не строковых функций. Этот стиль был представлен в HP Time-Shared BASIC, а также его можно было найти в других современных BASIC, созданных по образцу HP, таких как North Star BASIC и Atari BASIC. Он контрастировал со стилем BASIC, производным от DEC, включая Microsoft BASIC.

. Изначально язык был разработан под названием GAME BASIC и назывался просто Apple BASIC, когда он был представлен на Apple I. Он стал Integer BASIC, когда он был перенесен на Apple II и поставлялся вместе с Applesoft BASIC, портом Microsoft BASIC который включал поддержку с плавающей запятой. Целочисленный BASIC был заменен на Applesoft BASIC, начиная с Apple II Plus в 1979 году.

Содержание
  • 1 История
  • 2 Описание
    • 2.1 Редактирование программы
    • 2.2 Отладка
    • 2.3 Имена переменных
    • 2.4 Математика
    • 2.5 Строки
    • 2.6 Графика и звук
    • 2.7 Ввод / вывод
    • 2.8 Другие примечания
    • 2.9 Зарезервированные слова
      • 2.9.1 Apple BASIC
      • 2.9.2 Целочисленный BASIC
  • 3 Реализация
  • 4 Подробности ПЗУ
    • 4.1 SWEET16
    • 4.2 Плавающая точка
  • 5 Производительность
  • 6 Пример кода
  • 7 Примечания
  • 8 Ссылки
    • 8.1 Цитаты
    • 8.2 Библиография
  • 9 Внешние ссылки
История

В старших классах средней школы, Стив Возняк Учитель электроники организовал для лучших учеников класса работу в местных компаниях по производству электроники. Возняка был отправлен в Сильвания, где он программировал на FORTRAN на IBM 1130. В том же году General Electric разместила терминал в средней школе, который был подключен к одному из их мэйнфреймов, на котором была запущена служба разделения времени BASIC, которую они активно продвигали в то время. После трехдневного доступа учеников попросили написать письма о том, почему школа должна получать терминал на постоянной основе, но их усилия в конечном итоге не увенчались успехом.

Несколько лет спустя Возняк работал в Hewlett -Packard (HP) запускает моделирование конструкций микросхем и логической схемы для калькуляторов. Компания HP серьезно продвинулась на рынке миникомпьютеров, выпустив свои машины серии HP 2000, на которых установлена ​​специальная версия BASIC с разделением времени. Примерно за 100 000 долларов можно было построить достаточно оборудованную машину, которая могла бы поддерживать от 16 до 32 пользователей, запускающих программы BASIC. Несмотря на то, что это было дорого, это все же составляло небольшую часть стоимости компьютеров мэйнфреймов и, для активных пользователей, меньше, чем услуги разделения времени. Вслед за этим HP выпустила HP 9830, настольный компьютер за 10 000 долларов (что эквивалентно 66 000 долларов в 2019 году), на котором также работал BASIC, к которому у Возняка был доступ.

Я понюхал и знал, что ключом к тому, чтобы мой компьютер стал хорошим (популярным), было включение языка высокого уровня и то, что он должен быть БЕЙСИК.

Стив Возняк

В январе 1975 года был анонсирован и запущен Altair 8800 микрокомпьютер революция. В марте Возняк посетил первое собрание Клуба домашних компьютеров и начал разрабатывать дизайн своего собственного компьютера. Одним из наиболее важных программных продуктов для Altair и одним из наиболее часто пиратских был Altair BASIC из недавно созданной Microsoft. Возняк пришел к выводу, что его машина должна иметь собственный BASIC, который, будем надеяться, станет первым для процессора MOS Technology 6502. Поскольку языку требовалось 4 КБ ОЗУ, он сделал это минимальным объемом памяти для разработки.

Ссылки Возняка на BASIC были копией 101 BASIC Computer Games и руководством HP BASIC. Он не знал, что HP BASIC сильно отличается от разновидности DEC BASIC, используемой в 101 Games, которая также была основой Microsoft BASIC для Altair. Основываясь на этих источниках, Возняк начал набрасывать схему синтаксиса для языка. Первоначально конструкция включала поддержку чисел с плавающей запятой, но все еще надеясь, что он сможет опубликовать первый BASIC на 6502 и стать «звездой», он решил отказаться от операций с плавающей запятой и написать отдельную целочисленную математическую систему, чтобы сэкономить несколько недель времени программирования.

Возняк позже описал свой язык как «предназначенный в основном для игр и образовательных целей». На протяжении всей разработки называл его «GAME BASIC», Возняк написал код вручную, переведя инструкции кода ассемблера в их эквиваленты машинного кода и затем загрузив результат на свой компьютер. Не имея никакого обучения тому, как писать на компьютерном языке, он использовал свой опыт работы с калькулятором HP для создания стековой машины для интерпретации выражений. После того, как основные процедуры были запущены и запущены, он работал над остальными командами одну за другой в модульном режиме. При каждом посещении клуба Homebrew он демонстрировал еще несколько функций, добавленных за последний месяц.

Это был самый приятный день в моей жизни... Я продемонстрировал Breakout [at Homebrew] - все написано на БЕЙСИКЕ... После разработки аппаратных аркадных игр я знал, что возможность программировать их на BASIC изменит мир.

Стив Возняк

Реклама компьютера Apple I, в котором отмечается политика Apple по предоставлению бесплатного или недорогого программного обеспечения для своих компьютеров.

В начале 1976 года, рекламируя свой компьютер Apple I, Apple Inc заявляла, что «наша философия заключается в предоставлении программного обеспечения для наших машин бесплатно или по минимальной цене» и «да ребята, Apple BASIC бесплатна ».

Возняк помог Джобсу, который работал в Atari, переработал Breakout. Позже он решил посмотреть, можно ли написать игру на BASIC. Он добавил команды для чтения лопастных контроллеров и после серии быстрых правок запустил и запустил версию игры. Чтобы улучшить удобство игры, он добавил динамик, который щелкает, когда мяч ударяется о предметы. Показывая это Стиву Джобсу, Возняк продемонстрировал, что может быстро изменить цвета, используемые в его игре, просто изменив исходный код. Позже Возняк писал, что он доказал, что «программное обеспечение гораздо более гибкое, чем оборудование», и что он и Джобс осознали, что «теперь любой может создавать аркадные игры, не проектируя их на оборудовании».

Возняк это сделал. завершили библиотеку операций с плавающей запятой для 6502 и опубликовали ее в августовском выпуске журнала Dr. Доббс. Позднее эта библиотека была включена в состав ПЗУ для Apple II. Возняк начал работу по обратному портированию кода с плавающей запятой в Apple BASIC, но отвлекся на разработку контроллера гибких дисков для того, что стало Disk II. Майк Марккула сказал, что компания поедет на Consumer Electronics Show в Лас-Вегас, если дисковая система будет готова вовремя, поэтому Возняк и Рэнди Виггинтон работал над этим без перерыва в праздничные дни 1977 года.

Когда он вернулся к теме с плавающей точкой в ​​BASIC, Джобс пожаловался, что это занимает слишком много времени. Без ведома Возняка компания заключила с Microsoft лицензию на получение недавно завершенной версии 6502 кода Altair. Изучив код, Возняк решил, что проще добавить поддержку графики в код MS, чем добавить свой собственный BASIC с плавающей запятой, поскольку позже потребовалось вручную исправлять исходный машинный код, в то время как MS был написан на ассемблере и более легко модифицировался. Разработка Apple BASIC закончилась в пользу того, что стало Applesoft. Позже Возняк заметил: «Больше всего меня разочаровали ужасные строковые функции, такие как LEFT $ (VAR, 5) и MID $ (VAR2,5,3) вместо моей собственной».

Когда Apple II был выпущен летом 1977 года Integer BASIC поставлялся в ПЗУ, а Applesoft BASIC поставлялся на кассете. Это изменилось с появлением Apple II Plus в 1979 году, когда Applesoft была помещена в ПЗУ.

Описание

Редактирование программ

Как и большинство В реализации BASIC того времени Integer BASIC действовал как интерпретатор языка, а также как среда редактирования строк. Когда BASIC был запущен, отображалась командная строка >, где пользователь мог вводить операторы. В отличие от более поздних домашних компьютеров платформ, BASIC не был средой по умолчанию при запуске Apple I, он обычно запускался в мониторе. BASIC был запущен нажатием Ctrl+BReturn.

Операторы, которые были введены с ведущими числами, вводятся в память программы для «отложенного выполнения», либо в виде новых строк, либо заменяя те, которые ранее могли иметь такой же номер. Операторы, введенные без номера строки, назывались командами и выполнялись немедленно. Номера строк могут быть от 0 до 32767, а строки могут содержать до 128 символов.

Integer BASIC также включает команду AUTOдля автоматического ввода номеров строк с заданным начальным номером, например AUTO 100, добавляя 10 к последнему числу с каждой новой строкой. AUTO 300,5будет начинать нумерацию в строке 300 пятерками; 300, 305 и т. Д. Автоматическая нумерация была отключена вводом MAN.

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

Отладка

Как и в большинстве BASIC, программы запускались с помощью команды RUN, и, как обычно, могли быть направлены на конкретный номер строки например RUN 300. Выполнение можно было остановить в любое время с помощью Ctrl+C, а затем перезапустить с помощью CON, в отличие от более типичного CONT.

. Для пошагового выполнения Инструкцию TRACEможно использовать в командной строке или поместить в саму программу. Когда он был включен, номера строк распечатывались для каждой строки, которую посещала программа. Эту функцию можно было снова отключить с помощью NOTRACE.

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

Имена переменных

, где Dartmouth BASIC и ограниченные имена переменных HP-BASIC до двух символов (либо одной буквы или буква, за которой следует одна цифра), и где MS-BASIC допускает букву, за которой следует необязательная буква или цифра (игнорируя последующие символы), Integer BASIC не поддерживал любое имя переменной длины (например, SUM, GAMEPOINTS, PLAYER2). Единственная оговорка заключалась в том, что имена переменных не могли содержать зарезервированные слова; например, THISCOLOR и COLORFUL были недопустимыми именами переменных, потому что они содержали ключевое слово COLOR, системную команду. Кроме того, длина строк была ограничена 128 символами, поэтому имена переменных не могли превышать эту длину.

Mathematics

Integer BASIC, как следует из названия, использует целые числа в качестве основы для своего математического пакета. Они хранились внутри как 16-битные числа с прямым порядком байтов (как и 6502). Это позволяло максимальное значение для любых вычислений от -32767 до 32767; хотя формат может также хранить значение -32768, BASIC не может отображать это число. Вычисления, которые привели к значениям за пределами этого диапазона, дали >32767 ERR.

Операторы инфикса включали +(сложение), -(вычитание), *(умножение), /(деление), MOD (остаток) и показатель степени с использованием символа ^. Бинарные операторы включают И, ORи НЕ. Двоичные сравнения включали стандартный набор =, >, <, >=, <=, <>и вдохновленный HP #, который был эквивалентен <>.

. Разрешены только одномерные массивы, размер которых ограничивался только доступной памятью. Математические функции были редкими; поддерживались только ABS(абсолютное значение), SGN(знак) и RND(случайное число). В отличие от версий, производных от MS, где параметр игнорировался и RNDвсегда возвращал значение 0.. <1, Integer BASIC used the parameter; RND (6)возвращал целое число от 0 до 5.

Строки

Обработка строк Integer BASIC была основана на системе в HP BASIC. При этом строковые переменные обрабатывались как массивы символов, которые должны были быть DIMперед использованием. Это похоже на модель в C или Fortran 77. Это контрастирует с MS-подобными BASIC, где строки являются внутренним типом переменной длины. До того, как основанные на MS BASIC стали стандартом де-факто, этот стиль не был редкостью; North Star BASIC и Atari BASIC использовали ту же концепцию, что и другие.

Строки в Integer Basic использовали фиксированный объем памяти независимо от количества используемых в них символов, но не более 255 символов. Это имело то преимущество, что избавляло от необходимости сборки мусора из кучи, которая была заведомо медленной в MS BASIC, но означала, что строки, которые были короче заявленной длины, терялись.

Доступ к подстроке был предоставлен с помощью синтаксиса нарезки массива. Например, PRINT A $ (0,5)напечатал первые шесть символов A $, символы от 0 до 5. Конкатенация была обеспечена с использованием той же системы, A $ (5) = "ABC «заменяет любые символы, начинающиеся с позиции 5, строкой« ABC ». Это контрастирует с обработкой строк в стиле DEC / MS, которая использует строковые функции, такие как MID $для доступа к подстрокам и +для конкатенации.

Как и многие функции, которые предоставлялись строковыми функциями, вместо этого предоставлялись нарезки массива, выбор строковых функций был сокращен. LEN $вернул длину строки, а ASCвернул числовой код ASCII для первой буквы в строке. Ему не хватало эквивалента CHR $, который возвращал символ ASCII с заданным числовым кодом.

Графика и звук

При запуске единственный игровой контроллер для Apple был лопастной контроллер, у которого было два контроллера на одном разъеме. Положение контроллера можно было прочитать с помощью функции PDL, передав номер контроллера, 0 или 1, например, A = PDL (0): PRINT A, возвращая значение между 0 и 255.

В машинах Apple не было выделенного звукового оборудования, только простой звуковой сигнал. Воспроизведение звука было выполнено с помощью PEEKв отображенном в памяти местоположении динамика, -16336. Неоднократно PEEKing это значение производило тона, и в руководстве предлагается использовать для этого математическое выражение, например S = PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336).

Поддержка графики была более подробной. Графический режим был включен с помощью оператора GRи выключен с помощью TEXT. Рисование было модальным и обычно начиналось с подачи команды на изменение цвета, которая выполнялась установкой псевдопеременной; COLOR = 12установит цвет рисунка 12, светло-зеленый. Тогда можно было бы PLOT 10,10создать одно пятно этого цвета, HLIN 0,39 AT 20, чтобы нарисовать горизонтальную линию в строке 20, которая охватывает экран, или VLIN 5,15 AT 7, чтобы нарисовать более короткую вертикальную линию в столбце 7. A = SCRN X, Yвернул цвет экрана в X, Y.

Вход / output

Integer BASIC не содержал никаких пользовательских команд ввода / вывода, а также не хватало оператора DATAи связанного с ним READ. Для ввода и вывода данных из программы функции ввода / вывода были перенаправлены на выбранный слот карты с помощью PR # xи IN # x, который перенаправлял вывод или ввод (соответственно) в пронумерованный слот. С этого момента данные можно было отправлять на карту с помощью обычных команд PRINTи считывать с них с помощью INPUT.

Другие примечания

Integer BASIC, включая TABфункция, которая помещает курсор в заданный столбец от 0 до 39. Она отличалась от версий, найденных в большинстве BASIC, тем, что это была команда со следующим номером, а не функция со значением в скобках; можно переместить курсор в столбец 10, используя TAB 10в Integer BASIC, тогда как в MS это будет PRINT TAB (10). Кроме того, команда VTABработала аналогично TAB, но добавляла вертикальные пробелы вместо горизонтальных. По необъяснимым причинам в этом случае координаты были от 1 до 24, а не от 0 до 23.

Integer BASIC включал команду POPдля выхода из циклов. Это вытолкнуло самый верхний элемент из стека FOR. Atari BASIC также поддерживал ту же команду, в то время как North Star BASIC использовал EXIT.

. Целочисленные BASIC ROM также включали монитор машинного кода, «mini- ассемблер. "и дизассемблер для создания и отладки программ на языке ассемблер. Возняк вручную собрал монитор как первую программу для Apple II, а затем использовал его для написания Integer BASIC.

Зарезервированные слова

Apple BASIC

Apple BASIC имел следующие команды:

AUTO val1, val2 CLR [CLEAR] DEL val1, val2 LIST val1, val2 RUN val1 SCR [SCRATCH / NEW] HIMEM = expr LOMEM = expr (LET) var = expr INPUT (prompt,) var1, var2... ПЕЧАТЬ элемента (ов) TAB expr FOR var = expr1 TO expr2 STEP expr3 NEXT var IF expr THEN statement IF expr THEN номер строки GOTO expr GOSUB expr RETURN DIM var1 (expr1), var2 (expr2)... REM text END POKE expr1, expr2 CALL expr Функции: ABS (), SGN (), PEEK (), RND (), LEN ()

Integer BASIC

Integer BASIC добавил следующее:

COLOR = expr CON [CONTINUE ] DSP GR HLIN expr1, expr2 AT expr3 MAN NEW [заменяет SCR] NOTRACE PLOT expr1, expr2 POP TEXT TRACE VLIN expr1, expr2 AT expr3 Функция: ASC (), PDL (), SCRN (X, Y)
Реализация

Integer BASIC считывает введенные пользователем строки из буфера и прогоняет их через синтаксический анализатор, который выводит серию из токенов. В рамках этого процесса были обнаружены и перечислены простые синтаксические ошибки . Если синтаксический анализ прошел успешно, номер строки (при наличии) был преобразован из десятичного формата ASCII в 16-битное целое число, а любые ключевые слова - в 7-битный целочисленный токен.

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

Числовые литералы, такие как значение 500, были преобразованы в их 16-битное (двухбайтовое) двоичное представление, в данном случае $ 01F4 шестнадцатеричное. Чтобы указать, что это значение, а не ключевое слово, перед двухбайтовым значением был вставлен один байт между $ B0 и $ B9. Вместо этого строковые литералы, такие как «HELLO WORLD», были преобразованы путем установки старшего бита каждого символа так, чтобы Aхранился как $ C1. Имена переменных были преобразованы таким же образом, при этом буквы преобразовывались так, чтобы их старший бит был включен, а любые цифры в имени были представлены соответствующими $ B0 - $ B9, так что переменная A5будет токенизироваться как $ C1B5.

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

Интерпретатор времени выполнения использовал два стека для выполнения: один для ключевых слов оператора, а другой для оценки параметров. Каждому оператору было дано два приоритета: один, который указывал, где он должен выполняться в многоэтапной операции, например, строка математических операций для обеспечения порядка операций, и другой, который предлагал, когда должна произойти оценка, например, вычисление внутренних значений формулы скобок. Когда переменные встречались, их имя анализировалось, а затем ищалось в области хранения переменных. Если он не был найден, он добавлялся в конец списка. Адрес хранилища переменной, возможно, только что созданный, был затем помещен в оценочный стек.

Сведения о ПЗУ

SWEET16

Помимо Integer BASIC, ПЗУ Apple содержали специальный язык ассемблера, известный как SWEET16. SWEET16 основан на байт-кодах , которые выполняются на простой 16-битной виртуальной машине. Эта модель использовалась для обращения к памяти с помощью косвенных 16-разрядных указателей и 16-разрядных математических функций, вычисляемых без необходимости их преобразования в базовый 8-разрядный код 6502 с несколькими инструкциями. Вся виртуальная машина была записана всего в 300 байт. Код может вызвать SWEET16, выполнив вызов подпрограммы , а затем вернуться к нормальному коду 6502 после завершения 16-битных операций.

SWEET16 не использовался основным кодом BASIC, но был позже использовались для реализации нескольких утилит. Среди них особо выделялась процедура перенумерации строк, которая была включена в ПЗУ Programmer's Aid # 1, добавлена ​​в более поздние модели Apple II и доступна для установки пользователем на более ранних примерах.

Плавающая точка

Хотя Integer BASIC содержал свои собственные математические процедуры, ПЗУ Apple II также включали полную библиотеку с плавающей запятой, расположенную в памяти ПЗУ между $ F425-F4FB и $ F63D-F65D. Исходный код был включен в руководство Apple II. Программы BASIC, требующие вычислений с плавающей запятой, могут ВЫЗВАТЬв эти подпрограммы.

Производительность

Поскольку Integer BASIC обработал большую часть исходного исходного кода в токены, среда выполнения была быстрее, чем версии, требующие дополнительного анализа среды выполнения. Для сравнения, Tiny BASIC токенизировал только номер строки, тогда как MS BASIC токенизировал только ключевые слова. Так, например, в то время как Integer BASIC преобразует строку 100 GOTO 200полностью в токены, которые могут быть немедленно прочитаны и выполнены, в MS BASIC будут токенизироваться только номер строки и GOTO, а «100» останется в исходном формате, и его приходилось повторно разбирать в 16-битное целое число каждый раз, когда встречалась строка.

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

В одном из самых ранних известных тестов для микрокомпьютеров, Тесты Rugg / Feldman, Integer BASIC были более чем в два раза быстрее, чем Applesoft BASIC на той же машине. В Byte Sieve, где математика была менее важна, но преобладали доступ к массиву и производительность циклов, Integer BASIC занял 166 секунд, а Applesoft - 200. Это не отражалось в Creative Computing Benchmark, который был впервые опубликован в 1983 году, к тому времени Integer BASIC больше не поставлялся по умолчанию.

Следующая серия тестов, взятая из обеих оригинальных статей Rugg / Feldman, демонстрирует производительность Integer по сравнению с производным от MS BASIC на той же платформе.

СистемаCPUBASICТест 1Тест 2Тест 3Тест 4Тест 5Тест 6Тест 7
Apple II6502 @ 1 МГцЦелое число BASIC 1,33,17,27,28,818,528,0
Apple II6502 @ 1 МГцApplesoft BASIC 1,38,516,017,819,128,644.8
Пример кода

Ниже приводится версия Breakout, написанная в версии Integer BASIC 1977 года для Apple II, которая была указана в руководстве Apple II Mini. В этой версии есть ряд известных ошибок.

Программа запускается с установки отображения на ТЕКСТ, а затем CALL -936для очистки экрана. Строки с 20 по 27 и соответствующие подпрограммы в строках 100 и 200 представляют собой код выбора цвета, который Возняк продемонстрировал для Джобса. Строка 30 устанавливает текстовое окно с POKE 32,20, а затем использует серию операторов COLORи VLINдля рисования игрового поля и отображения счета в текстовое окно. Весь основной цикл проходит от строки 40 до 90 со связанными подпрограммами. Другой большой объем кода ближе к концу программы связан с печатью окончательной оценки. Другие интересные примечания включают сравнение #(не равно) в строке 20, создание звука высокого тона с использованием строки PEEKв строке 65 по сравнению с более низким тональный тон с использованием цикла в строке 70 и сочетания графики и текста на одном дисплее.

5 ТЕКСТ: ЗВОНОК -936: VTAB 4: ВКЛАДКА 10: ПЕЧАТЬ «*** BREAKOUT GAME ***»: ПЕЧАТЬ 7 ПЕЧАТЬ «ОБЪЕКТ УНИЧТОЖИТЬ ВСЕ КИРПИЧИ 5 ШАРИКАМИ»: ДЛЯ N = 1 ДО 7000: СЛЕДУЮЩИЙ N 10 РАЗМЕР A $ (20), B $ (20): GR: ПЕЧАТЬ: ВВЕДИТЕ «ПРИВЕТ, КАК ВАШЕ ИМЯ? ", A $: A = 1: B = 13: C = 9: D = 6: E = 15: ПЕЧАТЬ« СТАНДАРТНЫХ ЦВЕТОВ, »; A $; 20 INPUT "?", B $: IF B $ # "N" AND B $ # "NO" THEN 30: FOR I = от 0 до 39: COLOR = I / 2 * (I <32): VLIN 0,39 AT I 25 NEXT I: POKE 34,20: PRINT: PRINT: PRINT: FOR I=0 TO 15: VTAB 21+I MOD 2: TAB I+I+1: PRINT I;: NEXT I: POKE 34,22: VTAB 24: PRINT: PRINT "BACKGROUND"; 27 GOSUB 100: A=E: PRINT "EVEN BRICK";: GOSUB 100: B=E: PRINT "ODD BRICK";: GOSUB 100: C=E: PRINT "PADDLE";: GOSUB 100: D=E : PRINT "BALL";: GOSUB 100 30 POKE34,20:COLOR=A:FORI=0TO39:VLIN0,39ATI:NEXTI:FOR I=20TO34STEP2:TAB I+1:PRINT I/2-9;:COLOR=B:VLIN 0,39 AT I:COLOR=C:FOR J=I MOD 4 TO 39 STEP4 35 VLIN J,J+1 AT I: NEXT J,I: TAB 5: PRINT "SCORE = 0": PRINT: PRINT: POKE 34,21: S=0: P=S: L=S: X=19: Y=19: X=19 40 COLOR=A:PLOTX,Y/3:X=19:Y=RND(120):V=-1:W=RND(5)-2:L=L+1:IFL>5THEN140: TAB6: PRINT " ШАР № "; L: ПЕЧАТЬ: FORI = 1TO100: GOSUB200: NEXTI: M = 1: N = 0 50 J = Y + W: IF J>= 0 AND J <120 THEN 60: W=-W: J=Y: FOR I=1 TO 6: K=PEEK(-16336): NEXT I 55 IF PEEK(-16287)>127 ТОГДА SW = 1-SW 60 I = X + V: ЕСЛИ I <0 THEN 400: GOSUB 200: COLOR=A: K=J/3: IF I>39 ТО 70: ЕСЛИ SCRN (I, K) = A ТО 90: ЕСЛИ I ТО 120: N = N + 1: V = (N>9) +1: W = (KP) * 2-5: M = 1 65 Z = PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK ( -16336): GOTO 90 70 FOR I = 1 TO 6: M = PEEK (-16336): NEXT I: I = X: M = 0 80 V = -V 90 PLOT X, Y / 3: COLOR = E: PLOT I, K: X = I: Y = J: GOTO 50 99 PRINT «INVALID. REENTER»; 100 INPUT «COLOR (0 TO 15)», E: IF E <0 OR E>15 THEN 99: RETURN 120 IF M THEN V = ABS (V): VLIN K / 2 * 2, K / 2 * 2 + 1 AT I: S = S + I / 2-9: VTAB 21: TAB 13: PRINT S 123 Q = PEEK (-16336) - PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK ( -16336) 124 IF S <720 THEN 80 130 PRINT "CONGRATULATIONS, YOU WIN.": GOTO 150 140 PRINT "YOUR SCORE OF ";S;" IS ";: GOTO 141+S/100 141 PRINT "TERRIBLE!": GOTO 150 142 PRINT "LOUSY.": GOTO 150 143 PRINT "POOR.": GOTO 150 144 PRINT "FAIR.": GOTO 150 145 PRINT "GOOD.": GOTO 150 146 PRINT "VERY GOOD.": GOTO 150 147 PRINT "EXCELLENT.": GOTO 150 148 PRINT "NEARLY PERFECT." 150 PRINT "SAME COLORS";: GOTO 20 200 IF SW THEN 220: Q=(PDL(0)-5)/6: IF Q<0 THEN Q=0 205 IF Q>= 34 THEN Q = 34: COLOR = D: VLIN Q, Q + 5 AT 0: COLOR = A: IF P>Q THEN 210: IF Q THEN VLIN 0, Q-1 AT 0: P = Q: ВОЗВРАТ 210 ЕСЛИ P = Q ТО ВОЗВРАЩЕНИЕ: ЕСЛИ Q # 34 ТО VLIN Q + 6,39 AT 0: P = Q: ВОЗВРАТ 220 Q = (Y-5) / 3 + RND (3) * SGN (W) * (X <10 AND V<0): IF Q<0 THEN Q=0: GOTO 205 400 FOR I=1 TO 80: Q=PEEK(-16336): NEXT I: GOTO 40
Примечания
Ссылки

Цитаты

Библиография

Внешние ссылки
Последняя правка сделана 2021-05-24 03:52:34
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте