Jump to content

Целочисленный БЕЙСИК

Целочисленный БЕЙСИК
Разработчик Стив Возняк
Впервые появился 1976 год ; 48 лет назад ( 1976 ) [1]
Платформа Яблоко I , Яблоко II
Под влиянием
HP БАЗОВЫЙ
Под влиянием
Applesoft БЕЙСИК

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

Единственным числовым типом данных было целое число; числа с плавающей запятой не поддерживались. Использование целых чисел позволяло хранить числа в компактном 16-битном формате, который можно было читать и обрабатывать быстрее, чем 32- или 40-битные форматы с плавающей запятой, встречавшиеся в большинстве BASIC того времени. Это сделало его настолько быстрым, что Билл Гейтс пожаловался, когда он превзошел Microsoft BASIC в тестах. Однако это также ограничивало его применимость в качестве языка общего назначения. [а]

Еще одно отличие от других 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 году, .

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

Несколько лет спустя Возняк работал в Hewlett-Packard (HP), моделируя конструкции микросхем и схему логики калькуляторов. [1] HP добилась значительных успехов на рынке миникомпьютеров , выпустив HP 2000, машины серии на которых использовалась специальная версия BASIC с разделением времени . Примерно за 100 000 долларов можно было построить достаточно оборудованную машину, которая могла бы поддерживать от 16 до 32 пользователей, работающих с программами BASIC. [5] Хотя это было дорого, это все же составляло часть стоимости мэйнфреймов . [б] и для активных пользователей меньше, чем службы разделения времени. [с] Следом за этим HP выпустила HP 9830 , настольную машину стоимостью 10 000 долларов США (что эквивалентно 78 000 долларов США в 2023 году), которая также работала на языке BASIC, к которому имел доступ Возняк. [9]

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

Стив Возняк [1]

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

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

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

Это был самый приятный день в моей жизни... Я продемонстрировал Breakout [на Homebrew], полностью написанный на BASIC... После разработки аппаратных аркадных игр я понял, что возможность программировать их на BASIC изменит мир.

Стив Возняк [9]

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

В начале 1976 года в рекламе своего Apple I компьютера компания Apple Inc заявила, что «наша философия состоит в том, чтобы предоставлять программное обеспечение для наших машин бесплатно или по минимальной цене». [13] и «да, ребята, Apple BASIC бесплатен». [14] Это было напечатано вскоре после Открытого письма Билла Гейтса печально известного любителям , в котором говорилось, что люди грабят его, копируя версии Altair BASIC . [15]

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

Возняк завершил работу над библиотекой операций с плавающей запятой для 6502 и опубликовал ее в августовском выпуске журнала Dr. Dobb's Journal за 1976 год . [17] Эта библиотека позже стала частью ПЗУ для Apple II . [18] Возняк начал работу по обратному портированию кода с плавающей запятой в Apple BASIC, но отвлекся на разработку контроллера гибких дисков для того, что впоследствии стало Disk II . Майк Марккула сказал, что компания поедет на выставку потребительской электроники в Лас-Вегасе , если дисковая система будет готова вовремя, поэтому Возняк и Рэнди Виггинтон работали над ней без перерыва в течение праздников 1977 года. [19]

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

Когда летом 1977 года вышел Apple II, Integer BASIC поставлялся в ПЗУ, а Applesoft BASIC — на кассете. Ситуация изменилась с появлением Apple II Plus в 1979 году, когда Applesoft была включена в ПЗУ. [20]

Описание

[ редактировать ]

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

[ редактировать ]

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

Операторы, введенные с ведущими номерами, заносятся в память программы для «отложенного выполнения». [23] либо как новые строки, либо заменяя те, которые ранее могли иметь тот же номер. [24] Операторы, вводимые без номера строки, назывались командами и выполнялись немедленно. [ф] Номера строк могут быть от 0 до 32767, [25] [г] а строки могут содержать до 128 символов. [27]

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

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

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

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

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

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

[ редактировать ]

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

Математика

[ редактировать ]

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

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

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

Обработка строк в Integer BASIC была основана на системе HP BASIC. При этом строковые переменные рассматривались как массивы символов, которые необходимо было DIMперед использованием. Это похоже на модель в C. [42] или Фортран 77 . [43] В этом отличие от MS-подобных BASIC, где строки представляют собой внутренний тип переменной длины. [44] До того, как BASIC, основанный на MS, стал фактическим стандартом, этот стиль не был редкостью; Полярная звезда БАЗОВЫЙ [45] и Атари БЕЙСИК [46] использовал ту же концепцию, что и другие.

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

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

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

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

[ редактировать ]

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

Машины Apple не имели специального звукового оборудования, только простой «бипер». Создание звуков осуществлялось с помощью PEEKопределение местоположения динамика в памяти, -16336. [л] Неоднократное PEEK это значение приводило к появлению тонов, и в руководстве предлагалось использовать для этого математическое выражение, например S=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336). [56]

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

Ввод/вывод

[ редактировать ]

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

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

[ редактировать ]

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

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

ПЗУ Integer BASIC также включали монитор машинного кода , «миниассемблер » и дизассемблер для создания и отладки программ на языке ассемблера . Возняк вручную собрал монитор как первую программу для Apple II, а затем использовал его для написания Integer BASIC. [64] [65] [2]

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

[ редактировать ]

Яблоко БЕЙСИК

[ редактировать ]

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

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 ...
PRINT item(s)
TAB expr
FOR var = expr1 TO expr2 STEP expr3
NEXT var
IF expr THEN statement
IF expr THEN line number
GOTO expr
GOSUB expr
RETURN
DIM var1(expr1), var2(expr2) ...
REM text
END
POKE expr1, expr2
CALL expr
Functions: ABS(), SGN(), PEEK(), RND(), LEN()

Целочисленный БЕЙСИК

[ редактировать ]

Integer BASIC добавил следующее: [67] [68]

COLOR = expr
CON [CONTINUE]
DSP
GR
HLIN expr1, expr2 AT expr3
MAN
NEW [replaces SCR]
NOTRACE
PLOT expr1, expr2
POP
TEXT
TRACE
VLIN expr1, expr2 AT expr3
Function: ASC(), PDL(), SCRN(X,Y)

Выполнение

[ редактировать ]

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

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

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

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

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

Детали ПЗУ

[ редактировать ]

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

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

Система Процессор БАЗОВЫЙ Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Тест 6 Тест 7
Яблоко II 6502 @ 1 МГц Целочисленный БЕЙСИК 1.3 3.1 7.2 7.2 8.8 18.5 28.0
Яблоко II 6502 @ 1 МГц Applesoft БЕЙСИК 1.3 8.5 16.0 17.8 19.1 28.6 44.8

Вот краткое описание того, что сделал каждый тест:

  • Тест 1: цикл for/next до 1000.
  • Тест 2: цикл сравнения с 1000.
  • Тест 3: то же, что и 2, с добавлением умножения, деления, сложения и вычитания по той же переменной.
  • Тест 4: то же, что и 3, с добавлением умножения, деления, сложения и вычитания по константам.
  • Тест 5: то же, что и 4, но с добавлением вызова подпрограммы.
  • Тест 6; то же, что и 5, с добавленным внутренним циклом.
  • Тест 7: то же, что и 6, с добавлением заполнения таблицы.

Пример кода

[ редактировать ]

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

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

5 TEXT: CALL -936: VTAB 4: TAB 10: PRINT "*** BREAKOUT GAME ***": PRINT
7 PRINT "  OBJECT IS TO DESTROY ALL BRICKS WITH 5 BALLS": FOR N=1 TO 7000: NEXT N
10 DIM A$(20),B$(20): GR: PRINT: INPUT "HI, WHAT'S YOUR NAME? ",A$:A=1:B=13:C=9:D=6:E=15: PRINT "STANDARD COLORS,"; A$;
20 INPUT "? ",B$: IF B$#"N" AND B$#"NO" THEN 30: FOR I=0 TO 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"BALL #";L:PRINT: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 THEN SW=1-SW
60 I=X+V: IF I<0 THEN 400: GOSUB 200: COLOR=A: K=J/3: IF I>39 THEN 70: IF SCRN(I,K)=A THEN 90: IF I THEN 120: N=N+1: V=(N>9)+1: W=(K-P)*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: RETURN
210 IF P=Q THEN RETURN: IF Q#34 THEN VLIN Q+6,39 AT 0: P=Q: RETURN
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

Примечания

[ редактировать ]
  1. ^ Или, как Билл Гейтс , «более мощный BASIC... с использованием плавающей запятой». выразился [3]
  2. ^ IBM 370/155 стоил более 2 миллионов долларов в 1970 году (что эквивалентно 16 000 000 долларов в 2023 году). [6]
  3. ^ Tymshare взимала около 10 долларов в час (что эквивалентно 78 долларам в 2023 году) за доступ к своим системам. [7] в то время как услуги меньшего размера можно найти примерно за 5 долларов . [8]
  4. ^ Обработка строк была не «его собственной», а той же системой, которая использовалась в HP BASIC.
  5. ^ Чтобы прояснить, какой BASIC запущен, Applesoft использовала ] быстрый.
  6. ^ В том, что MS более описательно называет « немедленным режимом ».
  7. ^ Хелмерс говорит, что самый низкий номер строки — 1. [26]
  8. ^ И в некоторых версиях полностью сломан. [48]
  9. ^ HP также разрешает использовать [ и ] вместо ( и ).
  10. ^ Это также контрастирует с Dartmouth BASIC, в котором использовалась CONVERT команда для преобразования строки в массив значений ASCII, которыми пользователь затем манипулирует и преобразует обратно в строковый формат за секунду CONVERT.
  11. ^ В руководстве предполагается, но не указано прямо, что фактический диапазон значений составляет от 0 до 255. [54]
  12. ^ Отрицательное число является побочным эффектом хранения целых чисел в знаковом формате, поэтому любая ячейка памяти, превышающая 32767, отображается в BASIC как отрицательное значение. [55]
  13. ^ Обратите внимание на странный синтаксис SCRN, который технически является функцией, поскольку возвращает значение, но не использует синтаксис, подобный функции, который был бы A=SCRN(X,Y).
  14. ^ Первая цифра исходного значения использовалась для выбора значения от 0 до 9, поэтому в этом примере токен будет иметь вид $B5 за первую цифру 500.
  15. ^ Билл Гейтс пожаловался на это, заявив, что несправедливо сравнивать Integer BASIC с «настоящим» BASIC, таким как MS. [75]
  16. ^ Это означает, что текст начинается с 20-й строки из 24 строк на экране, оставляя четыре строки текста внизу.
  17. ^ Список различных CALL, PEEK и POKE, которые выполняли общие операции на Apple II, см. в статье Peeks, Pokes, Calls And Programming Notes , Чарльз Терли, 15 декабря 1996 г.
  1. ^ Перейти обратно: а б с д и ж г час я Возняк 2014 .
  2. ^ Перейти обратно: а б Вейрих 2001 .
  3. ^ Рагг, Том; Фельдман, Фил (октябрь 1977 г.). «БАЗОВЫЕ сравнения времени… переработаны и обновлены» . Килобод . стр. 20–25.
  4. ^ Баум, Аллан (18 июля 2016 г.). «Устная история Аллена Баума» (интервью). Беседовал Дэвид Брок. п. 12.
  5. ^ «Прохождение 10-летнего рубежа» . Журнал МЕРА . Хьюлетт Паккард. Октябрь 1976 года.
  6. ^ Куни, Майкл. «(В основном) крутая история мэйнфреймов IBM» . АРН .
  7. ^ Борн, Чарльз; Хан, Труди Беллардо (август 2003 г.). История информационных онлайн-сервисов, 1963–1976 гг . МТИ Пресс. п. 387. ИСБН  9780262261753 .
  8. ^ Барри, Тим (27 апреля 1981 г.). «Вернуться к БЕЙСИКУ» . Инфомир . п. 7.
  9. ^ Перейти обратно: а б Уильямс и Мур 1984 , с. А71.
  10. ^ Фиск, Натан (2009). Понимание интернет-пиратства . АВС-КЛИО. п. 14. ISBN  9780313354748 .
  11. ^ Возняк 1977 .
  12. ^ Weyhrich 2001 , [Integer] BASIC, который мы поставляли с первыми Apple II, так и не был собран — никогда. Был один рукописный экземпляр, весь рукописный, все вручную собранный..
  13. ^ «Проект Apple 1» .
  14. ^ «Компьютерная реклама Apple I» . 30 ноября 2009 г.
  15. ^ Баннелл, Дэвид (сентябрь 1975 г.). «За столом редакции» . Компьютерные заметки . 1 (4). Альбукерке, Нью-Мексико: MITS: 2. Архивировано из оригинала 23 марта 2012 г.
  16. ^ «Классические игры: полная история прорыва» . GameSpy. Архивировано из оригинала 13 августа 2013 года . Проверено 19 апреля 2010 г.
  17. ^ Раскин, Рой; Возняк, Стивен (август 1976 г.). «Процедуры с плавающей запятой для 6502» . Доктор Добб . стр. 17–19.
  18. ^ Справочное руководство Apple II . Компьютер Apple. Январь 1978. стр. 94–95.
  19. ^ Перейти обратно: а б Возняк 2018 .
  20. ^ Херцфельд 1985 .
  21. ^ Раскин 1978 , стр. 11.
  22. ^ Раскин 1978 , стр. 12.
  23. ^ Раскин 1978 , стр. 46.
  24. ^ Раскин 1978 , стр. 49–55.
  25. ^ Раскин 1978 , стр. 48.
  26. ^ Перейти обратно: а б Хелмерс 1978 , с. 24.
  27. ^ Перейти обратно: а б Раскин 1978 , с.118.
  28. ^ Раскин 1978 , стр. 65–67.
  29. ^ Раскин 1978 , стр. 124.
  30. ^ Возняк 1977 : «Этот смешанный режим обеспечивает цветную графическую сетку 40 на 40 плюс четыре строки прокручиваемого текста в нижней части экрана».
  31. ^ Раскин 1978 , стр. 100.
  32. ^ Раскин 1978 , стр. 15.
  33. ^ Раскин 1978 , стр. 52.
  34. ^ Раскин 1978 , стр. 107.
  35. ^ Раскин 1978 , стр. 100, 101.
  36. ^ Раскин 1978 , стр. 38.
  37. ^ Раскин 1978 , стр. 27.
  38. ^ Раскин 1978 , стр. 61.
  39. ^ Раскин 1978 , стр. 94.
  40. ^ Раскин 1978 , стр. 40,120.
  41. ^ Раскин 1978 , стр. 40.
  42. ^ «Струны» . Learn-c.org .
  43. ^ Брукс, Стив. «Символы и строки в Фортране» (PDF) . Гавайский университет .
  44. ^ «Целое число, переменные с плавающей запятой и строковые переменные». Руководство программиста С64 . Коммодор.
  45. ^ North Star BASIC, версия 6 (PDF) . Корпорация Северная Звезда. 1977. Архивировано из оригинала (PDF) 5 марта 2020 г. Проверено 3 марта 2020 г.
  46. ^ Справочное руководство по ATARI BASIC . Atari Inc., 1980. Архивировано из оригинала 1 мая 2005 г. Проверено 14 апреля 2020 г.
  47. ^ Перейти обратно: а б Раскин 1978 , с.89.
  48. ^ «Создайте свою собственную версию Microsoft BASIC» .
  49. ^ Перейти обратно: а б Раскин 1978 , с.88.
  50. ^ Раскин 1978 , стр. 92.
  51. ^ Базовое руководство по Altair 8080 (PDF) . МИТС. Апрель 1977 г. с. 30.
  52. ^ Перейти обратно: а б с д Раскин 1978 , с.120.
  53. ^ Мини 1977 , с. 17.
  54. ^ Перейти обратно: а б Раскин 1978 , с.36.
  55. ^ Мини 1977 , с. 18.
  56. ^ Раскин 1978 , стр. 84.
  57. ^ Раскин 1978 , стр. 31.
  58. ^ Раскин 1978 , стр. 32.
  59. ^ Раскин 1978 , стр. 33.
  60. ^ Раскин 1978 , стр. 73.
  61. ^ Раскин 1978 , стр. 74.
  62. ^ Справочное руководство Atari BASIC (PDF) . Атари. 1983. с. 25.
  63. ^ North Star BASIC, версия 6 (PDF) . Корпорация Северная Звезда. 1977. с. 8. Архивировано из оригинала (PDF) 5 марта 2020 г. Проверено 3 марта 2020 г.
  64. ^ Перейти обратно: а б с д и Возняк 1977 , с. 42.
  65. ^ Хелмерс 1978 , с. 18.
  66. ^ «ПРЕДВАРИТЕЛЬНОЕ РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ APPLE BASIC» . Октябрь 1976 года.
  67. ^ «APPLE II БАЗОВОЕ РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ» . 1978.
  68. ^ «СПРАВОЧНОЕ РУКОВОДСТВО ПО Apple II» (PDF) .
  69. ^ Пол Р. Санта-Мария. «Базовая разборка Apple II Integer» (PDF) . Проверено 14 сентября 2020 г. [ постоянная мертвая ссылка ]
  70. ^ Возняк 1977 , с. 43.
  71. ^ Помощь программистам Apple (PDF) . Яблоко. 1978.
  72. ^ Справочное руководство Apple II (PDF) . Январь 1978. стр. 94–95.
  73. ^ Эллисон, Деннис (1976). «Создайте свой собственный БЕЙСИК» . Журнал доктора Добба . Том. 1, нет. 1. п. 11.
  74. ^ Хардиман, Роджер. «Altair BASIC 3.2 (4K) — Аннотированная разборка» . п. 1.11. Архивировано из оригинала 5 ноября 2001 года.
  75. ^ Перейти обратно: а б Рагг, Том; Фельдман, Фил (октябрь 1977 г.). «БАЗОВЫЕ сравнения времени… переработаны и обновлены» . Килобод . стр. 20–25.
  76. ^ Перейти обратно: а б Рагг, Том; Фельдман, Фил (июнь 1977 г.). «БАЗОВЫЕ Сравнения времени… информация для любителей скорости» . Килобод . стр. 66–70.
  77. ^ Гилбрит, Джим (сентябрь 1981 г.). «Эталон языка высокого уровня» . Байт . п. 192.
  78. ^ Ахль, Дэвид (ноябрь 1983 г.). «Сравнительный тест» . Творческие вычисления . п. 260.
  79. ^ Мини 1977 , стр. 65–67.
  80. ^ «Прорыв, с аннотациями» . Гитхаб . 16 августа 2021 г.

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f0c9db474ed35aebd44bc89f2bc59f4c__1712827080
URL1:https://arc.ask3.ru/arc/aa/f0/4c/f0c9db474ed35aebd44bc89f2bc59f4c.html
Заголовок, (Title) документа по адресу, URL1:
Integer BASIC - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)