Целое число BASIC — Integer BASIC
Разработчик | Стив Возняк |
---|---|
Впервые появился | 1976 ; 45 лет назад ( 1976 ) |
Платформа | Яблоко I , Яблоко II |
Под влиянием | |
HP BASIC | |
Под влиянием | |
Applesoft BASIC |
Integer BASIC — это интерпретатор BASIC, написанный Стивом Возняком для компьютеров Apple I и Apple II . Первоначально доступный на кассете для Apple I в 1976 году, затем включенный в ПЗУ на Apple II с момента его выпуска в 1977 году, это была первая версия BASIC, используемая многими ранними владельцами домашних компьютеров .
Язык поддерживал математику с использованием целых чисел , но не поддерживал числа с плавающей запятой . Использование целых чисел позволило хранить числа в гораздо более компактном 16-битном формате, который можно было читать и обрабатывать быстрее, чем 32- или 40-битные форматы с плавающей запятой, присутствовавшие в большинстве BASIC того времени. Однако это ограничивало его применимость в качестве языка общего назначения.
Еще одно отличие от других БЕЙСИКОВ той эпохи заключается в том, что Integer BASIC рассматривал строки как массивы символов, аналогично системе в C или Fortran 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, который включена поддержка операций с плавающей запятой. Integer BASIC был заменен на Applesoft BASIC, начиная с Apple II Plus в 1979 году.
СОДЕРЖАНИЕ
История
Как старший в средней школе , Стив Возняк учитель электроники «s организовал для ведущих студентов в классе есть места размещения в местных компаниях электроники. Возняка отправили в Сильванию, где он программировал на FORTRAN на IBM 1130 . В том же году General Electric установила терминал в средней школе, который был подключен к одному из их мэйнфреймов, на котором была запущена служба BASIC с разделением времени , которую они активно продвигали в то время. После того, как им был предоставлен трехдневный доступ, учеников попросили написать письма о том, почему школа должна получать терминал навсегда, но их усилия в конечном итоге не увенчались успехом.
Несколько лет спустя Возняк работал в Hewlett-Packard (HP), занимаясь моделированием конструкции микросхем и логической схемы для калькуляторов. Компания HP серьезно продвинулась на рынке миникомпьютеров, выпустив свои машины серии HP 2000, на которых установлена специальная версия BASIC с разделением времени . Примерно за 100 000 долларов можно было построить достаточно оборудованную машину, которая могла бы поддерживать от 16 до 32 пользователей, запускающих программы BASIC. Хотя это было дорого, это все же составляло часть стоимости мэйнфреймов, а для активных пользователей — меньше, чем услуги с разделением времени. Вслед за этим HP выпустила HP 9830 , настольный компьютер за 10000 долларов (что эквивалентно 67000 долларов в 2020 году), который также работал с 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 [на Homebrew], полностью написанный на BASIC . После разработки аппаратных аркадных игр я знал, что возможность программировать их на BASIC изменит мир.
В начале 1976 года, рекламируя свой компьютер Apple I , Apple Inc. заявляла, что «наша философия заключается в предоставлении программного обеспечения для наших машин бесплатно или по минимальной цене» и «да, ребята, Apple BASIC бесплатна». Это было напечатано вскоре после печально известного Открытого письма Билла Гейтса любителям, в котором говорилось, что люди грабят его, копируя версии Altair BASIC .
Возняк помог Джобсу, работавшему в Atari , переработать Breakout . Позже он решил посмотреть, можно ли написать игру на БЕЙСИКЕ. Он добавил команды для чтения лопастных контроллеров и в результате серии быстрых правок запустил и запустил версию игры. Чтобы улучшить его игровые возможности, он добавил динамик, который щелкает, когда мяч ударяется о предметы. Показывая его Стиву Джобсу , Возняк продемонстрировал, что может быстро изменить цвета, используемые в его игре, просто изменив исходный код . Позже Возняк писал, что он доказал, что «программное обеспечение гораздо более гибкое, чем оборудование», и что он и Джобс осознали, что «теперь любой может создавать аркадные игры, не проектируя их на оборудовании».
Возняк завершил библиотеку операций с плавающей запятой для 6502 и опубликовал ее в августовском выпуске журнала Dr. Dobb’s за 1976 год . Позже эта библиотека стала частью ПЗУ для Apple II . Возняк начал работу по обратному переносу кода с плавающей запятой в Apple BASIC, но отвлекся на разработку контроллера гибких дисков для того, что стало Disk II . Майк Марккула сказал, что компания поедет на выставку Consumer Electronics Show в Лас-Вегасе, если дисковая система будет готова вовремя, поэтому Возняк и Рэнди Виггинтон непрерывно работали над ней в праздничные дни 1977 года.
Когда он вернулся к теме с плавающей запятой в BASIC, Джобс пожаловался, что это занимает слишком много времени. Без ведома Возняка, компания уже заключила с Microsoft лицензию на получение недавно завершенной версии 6502 кода Altair. Изучив код MS, Возняк решил, что было проще добавить поддержку графики в их код, чем добавить свой собственный BASIC с плавающей запятой, поскольку позже потребовалось вручную исправлять исходный машинный код, в то время как MS был написан на ассемблере и более легко модифицировался. Разработка Apple BASIC закончилась в пользу того, что стало Applesoft BASIC . Позже Возняк заметил: «Больше всего меня разочаровали ужасные строковые функции, такие как 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 + B Return .
Операторы, которые были введены с ведущими числами, вводятся в память программы для «отложенного выполнения» либо в виде новых строк, либо вместо тех, которые ранее могли иметь такой же номер. Операторы, введенные без номера строки, назывались командами и выполнялись немедленно. Номера строк могут быть от 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 tinue, в отличие от более типичного CONT .
Для пошагового выполнения TRACE инструкцию можно использовать в командной строке или поместить в саму программу. Когда он был включен, номера строк распечатывались для каждой строки, которую посещала программа. Эту функцию можно снова отключить с помощью NOTRACE .
Несколько необычной особенностью была команда DSP (для «отображения»). При обнаружении в программе с этого момента будут отображаться любые изменения значения переменной. Например, DSP X при каждом изменении будет отображаться значение X вместе с номером строки, в которой произошло изменение. Как и в случае с TRACE, DSP был отключен с помощью NODSP .
Имена переменных
Где Dartmouth BASIC и HP-BASIC ограничивают имена переменных не более чем двумя символами (либо одной буквой, либо буквой, за которой следует одна цифра), и где MS-BASIC допускает букву, за которой следует необязательная буква или цифра (игнорируя последующие символы), Целочисленный BASIC не поддерживал имя переменной любой длины (например, SUM, GAMEPOINTS, PLAYER2). Единственная оговорка заключалась в том, что имена переменных не могли содержать зарезервированных слов; например, THISCOLOR и COLORFUL были недопустимыми именами переменных, потому что они содержали ключевое слово COLOR , системную команду. Кроме того, длина строк была ограничена 128 символами, поэтому имена переменных не могли превышать эту длину.
Математика
Integer BASIC, как следует из названия, использует целые числа в качестве основы для своего математического пакета. Они хранились внутри как 16-битные числа с прямым порядком байтов (как и 6502). Это позволяло максимальное значение для любых вычислений от -32767 до 32767; хотя формат может также хранить значение -32768, BASIC не может отображать это число. Расчеты, которые привели к значениям за пределами этого диапазона, дали файл >32767 ERR .
Инфиксные операторы включали + (сложение), — (вычитание), * (умножение), / (деление), MOD (остаток) и показатель степени с использованием ^ символа. Бинарные операторы включены AND , OR и NOT . Бинарные сравнения включали стандартный набор = , > , , >= , , <> и HP-вдохновил # , что эквивалентно <>.
Допускались только одномерные массивы, размер которых ограничивался только доступной памятью. Математические функции были редкими; поддерживаются только ABS (абсолютное значение), SGN (знак) и RND (случайное число). В отличие от версий, производных от MS, где параметр игнорировался и RND всегда возвращал значение 0 .. 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, например , возвращая значение от 0 до 255. A = PDL ( 0 ) : PRINT A
В машинах 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.
Ввод, вывод
В 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 .
ПЗУ Integer BASIC также включают монитор машинного кода , «мини- ассемблер » и дизассемблер для создания и отладки программ на языке ассемблера . Возняк вручную собрал монитор как первую программу для Apple II, а затем использовал его для написания Integer BASIC.
Источник