stringtranslate.com

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

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 , который включена поддержка чисел с плавающей запятой. Начиная с Apple II Plus в 1979 году , Integer BASIC был заменен на Applesoft BASIC .

История

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

Несколько лет спустя Возняк работал в Hewlett-Packard (HP), моделируя конструкции микросхем и схему логики калькуляторов. [1] HP добилась значительных успехов на рынке миникомпьютеров , выпустив машины серии HP 2000 , на которых использовалась специальная версия BASIC с разделением времени . Примерно за 100 000 долларов можно было построить достаточно оснащенную машину, которая могла бы поддерживать от 16 до 32 пользователей, работающих с программами BASIC. [5] Хоть это и дорого, но все же это часть стоимости мэйнфреймов [ b] и для активных пользователей меньше, чем услуги разделения времени. [c] HP последовала за этим, выпустив HP 9830 , настольную машину за 10 000 долларов США (что эквивалентно 75 000 долларов США в 2022 году), которая также работала под управлением 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 . Позже Возняк заметил: «Мое самое большое разочарование заключалось в ужасных строковых функциях, подобных и, вместо моих собственных». [19] [д]LEFT$(VAR, 5)MID$(VAR2,5,3)

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

Описание

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

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

Операторы, которые были введены с ведущими номерами, вводятся в память программы для «отложенного выполнения» [23] либо как новые строки, либо заменяют любые, которые ранее могли иметь тот же номер. [24] Операторы, которые вводились без номера строки, назывались командами и выполнялись немедленно. [f] Номера строк могут быть от 0 до 32767, [25] [g] и строки могут содержать до 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] Выполнение можно остановить в любой момент с помощью + [32] , а затем возобновить с помощьюtinue, в отличие от более типичного . [33]CtrlCCONCONT

Для пошагового выполнения 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(знак) и (случайное число). [40] В отличие от версий, производных от MS, где параметр игнорировался и всегда возвращал значение 0..<1, Integer BASIC использовал этот параметр; вернул целое число от 0 до 5. [41]RNDRNDRND(6)

Струны

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

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

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

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

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

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

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

Поддержка графики стала более детальной. Графический режим был включен с помощью 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. , Ю. [52] [м]

Ввод, вывод

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

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

Целочисленный BASIC включал TABфункцию, которая располагала курсор в заданном столбце от 0 до 39. Он отличался от версий, встречающихся в большинстве BASIC, тем, что это была команда со следующим номером, а не функция со значением в круглых скобках; TAB 10в Integer BASIC [60] можно было бы переместить курсор в столбец 10, тогда как в 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]

АВТО значение1 , значение2 CLR [ ОЧИСТИТЬ ] DEL значение1 , значение2 LIST значение1 , значение2 RUN значение1 SCR [ SCRATCH / NEW ] HIMEM = выражение LOMEM = выражение ( LET ) var = выражение INPUT ( подсказка ,) var1 , var2 ... элемент ПЕЧАТИ ( s ) TAB expr FOR var = expr1 TO expr2 STEP expr3 NEXT var IF expr THEN оператор 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 добавлено следующее: [67] [68]

COLOR = expr CON [ ПРОДОЛЖИТЬ ] 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-битный целочисленный токен. [64]

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

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

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

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

Детали ПЗУ

СЛАДКИЕ 16

Помимо 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. [о]

В одном из первых известных тестов микрокомпьютеров, тестах 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, на той же платформе.

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

Образец кода

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

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

5 ТЕКСТ : ВЫЗОВ -936 : VTAB 4 : ВКЛАДКА 10 : ПЕЧАТЬ «*** ИГРА НА ВЫБОР ***» : ПЕЧАТЬ 7 ПЕЧАТЬ «ЦЕЛЬ – УНИЧТОЖИТЬ ВСЕ КИРПИЧИ С 5 ШАРАМИ» : ДЛЯ N = 1 ДО 7000 : СЛЕДУЮЩИЙ N 10 DIM A$ ( 20 ), B$ ( 20 ) : GR : ПЕЧАТЬ : ВВОД « ПРИВЕТ , КАК ВАШЕ ИМЯ?» , A$ : A = 1 : B = 13 : C = 9 : D = 6 : E = 15 : ПЕЧАТЬ «СТАНДАРТНЫЕ ЦВЕТА» ; А$ ; 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 : ПЕЧАТЬ : ПЕЧАТЬ : ПЕЧАТЬ : ДЛЯ I = 0 ДО 15 : VTAB 21 + I MOD 2 : TAB I + I +1 : ПЕЧАТЬ I ; : СЛЕДУЮЩИЙ I : POKE 34 , 22 : VTAB 24 : ПЕЧАТЬ : ПЕЧАТЬ "ФОН" ; 27 GOSUB 100 : A = E : ПЕЧАТЬ «ЧЕТНЫЙ КИРПИЧ» ; : GOSUB 100 : B = E : ПЕЧАТЬ «НЕЧЕТНЫЙ КИРПИЧ»                                                                                  ; : GOSUB 100 : C = E : ПЕЧАТЬ «ВЕСЛО» ; : GOSUB 100 : D = E : ПЕЧАТЬ «ШАР» ; : GOSUB 100 30 POKE34 , 20 : ЦВЕТ = A : FOR I = от 0 до 39 : VLIN0 , 39 ATI : NEXT I : FOR I = от 20 до 34 ШАГ 2 : TAB I +1 : ПЕЧАТЬ I / 2-9 ; : COLOR = B : VLIN 0 , 39 AT I : COLOR = C : FOR J = I MOD 4 ДО 39 ШАГ 4 35 VLIN J , J +1 AT I : NEXT J , I : TAB 5 : ПЕЧАТЬ «SCORE = 0» : ПЕЧАТЬ : ПЕЧАТЬ : POKE 34 , 21 : S = 0 : P = S : L = S : X = 19 : Y = 19 : X = 19 40 ЦВЕТ = A : УЧАСТОК X , Y / 3 : X = 19 : Y = RND ( 120 ) : V = -1 : W = RND ( 5 ) -2 : L = L +1 : ЕСЛИ L > 5 , ТО 140 : TAB 6 : ПЕЧАТЬ «ШАР №» ; Л :                                               ПЕЧАТЬ : FOR I = 1 TO 100 : GOSUB 200 : NEXT I : M = 1 : N = 0 50 J = Y + W : IF J >= 0 AND J < 120 THEN 60 : W =- W : J = Y : FOR I = 1 ДО 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 : ЦВЕТ = A : K = J / 3 : ЕСЛИ I > 39 ТО 70 : ЕСЛИ SCRN ( I , K ) = A ТО 90 : ЕСЛИ I ТО 120 : N = N +1 : V =( N > 9 ) +1 : W =( K - P )* 2-5 : M = 1 65 Z = ПЭЭК ( -16336 )- ПЭЭК ( -16336 )- ПЭЭК ( -16336 )- ПЭЭК ( -16336 )- ПЭЭК ( -16336 ) - ПЭЭК ( - 16336 )- PEEK ( -16336 ) : ПЕРЕЙДИТЕ К 90 70 ДЛЯ I = 1 ДО 6 : M = PEEK ( -16336 ) :                                                       СЛЕДУЮЩИЙ I : I = X : M = 0 80 V =- V 90 УЧАСТОК X , Y / 3 : ЦВЕТ = E : УЧАСТОК I , K : X = I : Y = J : ПЕРЕЙДИТЕ К 50 99 ПЕЧАТЬ "НЕВЕРНО. REENTER" ; 100 ВХОД «ЦВЕТ (0 ДО 15)» , E : ЕСЛИ E < 0 ИЛИ E > 15 THEN 99 : ВОЗВРАТ 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 : ПЕЧАТЬ S 123 Q = PEEK ( -16336 )- PEEK ( -16336 ) - PEEK ( -16336 )- PEEK ( -16336 )- PEEK ( -16336 )- PEEK ( -16336 )- PEEK ( -16336 ) - PEEK ( -16336 ) - PEEK ( -16336 )- PEEK ( -16336 ) 124 ЕСЛИ S < 720 , ТО 80 130 ПЕЧАТЬ «ПОЗДРАВЛЯЕМ , ВЫ ВЫИГРАЛИ» . : ПЕРЕЙДИТЕ К 150 140 НАПЕЧАТАЙТЕ «ВАШ СЧЕТ» ; С ; " ЯВЛЯЕТСЯ " ; : ПЕРЕХОД 141 + S / 100 141 НАПЕЧАТАЙТЕ «УЖАСНО!» : ПЕРЕХОД 150 142 НАПЕЧАТАЙТЕ «ПАРШИВЫЙ». : ПЕРЕХОД К 150 143 НАПЕЧАТАЙТЕ «БЕДНЫЕ».                                                                : ПЕРЕХОД 150 144 НАПЕЧАТАЙТЕ «ЯРМАРКА». : ПЕРЕХОД 150 145 НАПЕЧАТАЙТЕ «ХОРОШО». : ПЕРЕХОД 150 146 НАПЕЧАТАЙТЕ «ОЧЕНЬ ХОРОШО». : ПЕРЕХОД 150 147 НАПЕЧАТАЙТЕ «ОТЛИЧНО». : ПЕРЕЙДИТЕ К 150 148 НАПЕЧАТАЙТЕ «ПРАКТИЧЕСКИ ИДЕАЛЬНО». 150 ПЕЧАТАТЬ «ТО ЖЕ ЦВЕТА» ; : 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 : ПЕРЕЙТИ 205 400 ДЛЯ I = 1 ДО 80 : Q = PEEK ( -16336 ) : СЛЕДУЮЩИЙ I : ПЕРЕЙТИ К 40                                                                                       

Примечания

  1. ^ Или, как выразился Билл Гейтс , «более мощный BASIC... с использованием плавающей запятой». [3]
  2. ^ IBM 370/155 стоил более 2 миллионов долларов в 1970 году (что эквивалентно 15 000 000 долларов в 2022 году). [6]
  3. ^ Tymshare взимала около 10 долларов в час (что эквивалентно 75 долларам в 2022 году) за доступ к своим системам, [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, Charles Turley, 15 декабря 1996 г.

Рекомендации

Цитаты

  1. ^ abcdefghi Возняк 2014.
  2. ^ аб Вейрих 2001.
  3. ^ Рагг, Том; Фельдман, Фил (октябрь 1977 г.). «БАЗОВЫЕ сравнения времени… переработаны и обновлены». Килобод . стр. 20–25.
  4. Баум, Аллан (18 июля 2016 г.). «Устная история Аллена Баума» (интервью). Беседовал Дэвид Брок. п. 12.
  5. ^ «Прохождение 10-летней отметки» . Журнал МЕРА . Hewlett Packard. Октябрь 1976 года.
  6. ^ Куни, Майкл. «(В основном) крутая история мэйнфреймов IBM». АРН .
  7. ^ Борн, Чарльз; Хан, Труди Беллардо (август 2003 г.). История информационных онлайн-услуг, 1963–1976 гг. МТИ Пресс. п. 387. ИСБН 9780262261753.
  8. Барри, Тим (27 апреля 1981 г.). "Назад к основам". Инфомир . п. 7.
  9. ^ ab Williams & Moore 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 г.). «За столом редакции». Компьютерные заметки . Альбукерке, Нью-Мексико: MITS. 1 (4): 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. ^ abcd Раскин 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. ^ abcde Возняк 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 г.

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

Внешние ссылки