stringtranslate.com

Целочисленный BASIC

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

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

Другое отличие от других 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] Несмотря на высокую стоимость, она все равно составляла часть стоимости мэйнфреймов [b] и для активных пользователей была дешевле услуг с разделением времени. [c] HP последовала за этим с HP 9830 , настольной машиной за 10 000 долларов США (что эквивалентно 78 000 долларов США в 2023 году), которая также работала на BASIC, к которому Возняк имел доступ. [9]

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

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

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

Источниками BASIC для Возняка были копия 101 BASIC Computer Games и руководство HP BASIC. [1] Он не знал, что BASIC от HP сильно отличался от разновидности DEC BASIC , используемой в 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 о лицензии на получение их недавно завершенной версии кода Altair для 6502. Изучив код MS, Возняк решил, что проще добавить графическую поддержку в их код, чем добавлять плавающую точку в свой собственный BASIC, поскольку последний требовал ручной правки исходного машинного кода, в то время как код MS был написан на ассемблере и его было легче модифицировать. Разработка BASIC от Apple закончилась в пользу того, что стало Applesoft BASIC . Позже Возняк заметил: «Моим самым большим разочарованием было использование ужасных строковых функций вроде и вместо моих собственных». [19] [d]LEFT$(VAR, 5)MID$(VAR2,5,3)

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

Описание

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

Как и большинство реализаций BASIC той эпохи, Integer BASIC выступал как интерпретатор языка, так и среда редактирования строк. Когда BASIC был запущен, отображалась > командная строка , где пользователь мог вводить операторы. [21] [e] В отличие от более поздних платформ домашних компьютеров , BASIC не был средой по умолчанию при запуске Apple II, он обычно запускался в мониторе . 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команда (для "display"). При ее появлении в программе с этого момента любые изменения значения переменной будут отображаться. Например, 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-битное число, little-endian (как и 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] До того, как MS-производные BASIC стали фактическим стандартом, этот стиль не был редкостью; 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] [j]PRINT A$(0,5)A$A$(5)="ABC"MID$+

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

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

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

Машины Apple не включали в себя специальное звуковое оборудование, только простой «бипер». Воспроизведение звуков достигалось путем PEEKing расположения динамика, отображенного в памяти, -16336. [l] Многократное PEEK-подглядывание этого значения приводило к тонам, и руководство предлагало использовать математическое выражение для этого, например . [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,Y. [52] [м]

Ввод/вывод

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

Другие заметки

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

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

Apple БАЗОВЫЙ

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 элемент ( ы ) 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 текст END POKE expr1 , expr2 CALL expr Функции: ABS (), SGN (), PEEK (), RND (), LEN ()                                                    

Целочисленный BASIC

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

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

Выполнение

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

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

Числовые литералы, такие как значение 500, были преобразованы в их 16-битное (двухбайтовое) двоичное представление, в данном случае, $01F4 hexadecimal . Чтобы указать, что это значение, а не ключевое слово, один байт между $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 ROM, добавлена ​​в более поздние модели 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. [o]

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

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

Вот краткое изложение результатов каждого теста:

Пример кода

Ниже приведена версия 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 и смешивание графики и текста на одном дисплее. [q]

5 ТЕКСТ : ВЫЗОВ -936 : VTAB 4 : TAB 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 : ПЕЧАТЬ "СТАНДАРТНЫЕ ЦВЕТА" ; A$ ; 20 ВВОД "? " , B$ : ЕСЛИ B$ # "N" И B$ # "НЕТ" ТО 30 : ДЛЯ I = 0 ДО 39 : ЦВЕТ = I / 2 *( I < 32 ) : VLIN 0 , 39 AT I 25 ДАЛЕЕ 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 : ПЕЧАТЬ "PADDLE" ; : GOSUB 100 : D = E : ПЕЧАТЬ "BALL" ; : GOSUB 100 30 POKE34 , 20 : ЦВЕТ = A : ДЛЯ I = 0 ДО 39 : VLIN0 , 39 ATI : СЛЕДУЮЩИЙ I : ДЛЯ I = 20 ДО 34 ШАГ 2 : TAB I +1 : ПЕЧАТЬ I / 2-9 ; : ЦВЕТ = B : VLIN 0 , 39 AT I : ЦВЕТ = C : ДЛЯ J = I MOD 4 ДО 39 ШАГ 4 35 VLIN J , J +1 AT I : СЛЕДУЮЩИЙ 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 : ПЕЧАТЬ "ШАР #" ; L :                                               PRINT : 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 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 ) : ПЕРЕЙТИ К 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 ПЕЧАТЬ "НЕВЕРНО. ВВЕСТИ ПОВТОРНО" ; 100 ВВОД "ЦВЕТ (0 ДО 15)" , E : ЕСЛИ E < 0 ИЛИ E > 15 ТО 99 : ВОЗВРАТ 120 ЕСЛИ M ТО 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 ) - ПОДСМОТРЕТЬ ( -16336 ) 124 ЕСЛИ S < 720 ТО 80 130 НАПЕЧАТАТЬ "ПОЗДРАВЛЯЕМ, ВЫ ПОБЕДИЛИ." : ПЕРЕЙТИ К 150 140 НАПЕЧАТАТЬ "ВАШ СЧЕТ " ; S ; " РАВЕН " ; : ПЕРЕЙТИ К 141 + S / 100 141 НАПЕЧАТАТЬ "УЖАСНО!" : ПЕРЕЙТИ К 150 142 НАПЕЧАТАТЬ "ПЛОХО." : ПЕРЕЙТИ К 150 143 НАПЕЧАТАТЬ "ПЛОХО."                                                                : ПЕРЕЙТИ К 150 144 ПЕЧАТЬ "УДОВЛЕТВОРИТЕЛЬНО". : ПЕРЕЙТИ К 150 145 ПЕЧАТЬ "ХОРОШО". : ПЕРЕЙТИ К 150 146 ПЕЧАТЬ "ОЧЕНЬ ХОРОШО". : ПЕРЕЙТИ К 150 147 ПЕЧАТЬ "ПРЕВОСХОДНО". : ПЕРЕЙТИ К 150 148 ПЕЧАТЬ " ПОЧТИ ИДЕАЛЬНО " . 150 ПЕЧАТЬ " ОДНИ И ТАКИЕ ЖЕ ЦВЕТА" ; : ПЕРЕЙТИ К 20 200 ЕСЛИ SW ТО 220 : Q =( PDL ( 0 ) -5 )/ 6 : ЕСЛИ Q < 0 ТО Q = 0 205 ЕСЛИ Q >= 34 ТО Q = 34 : ЦВЕТ = D : VLIN Q , Q +5 В 0 : ЦВЕТ = A : ЕСЛИ P > Q ТО 210 : ЕСЛИ Q ТО VLIN 0 , Q -1 В 0 : P = Q : ВОЗВРАТ 210 ЕСЛИ P = Q ТО ВОЗВРАТ : ЕСЛИ Q # 34 ТО VLIN Q +6 , 39 В 0 : P = Q : ВОЗВРАТ 220 Q =( Y -5 )/ 3 + RND ( 3 )* SGN ( W )*( X < 10 И V < 0 ) : ЕСЛИ Q < 0 ТОГДА Q = 0 : ПЕРЕЙТИ К 205 400 ДЛЯ I = 1 ДО 80 : Q = PEEK ( -16336 ) : ДАЛЕЕ I : ПЕРЕЙТИ К 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. ^ В том, что МС более образно назвал « немедленным режимом ».
  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. ^ ab Weyhrich 2001.
  3. ^ Рагг, Том; Фельдман, Фил (октябрь 1977 г.). «Сравнения времен BASIC… пересмотренные и обновленные». Килобо . С. 20–25.
  4. ^ Баум, Аллан (18 июля 2016 г.). «Устная история Аллена Баума» (интервью). Интервью Дэвида Брока. стр. 12.
  5. ^ "Прохождение 10-летней отметки". Журнал MEASURE . Hewlett Packard. Октябрь 1976 г.
  6. ^ Куни, Майкл. «(В основном) крутая история мэйнфрейма IBM». ARN .
  7. ^ Bourne, Charles; Hahn, Trudi Bellardo (август 2003). История служб онлайн-информации, 1963–1976. MIT Press. стр. 387. ISBN 9780262261753.
  8. Барри, Тим (27 апреля 1981 г.). «Назад к BASIC». InfoWorld . стр. 7.
  9. ^ ab Williams & Moore 1984, стр. A71.
  10. ^ Фиск, Натан (2009). Понимание интернет-пиратства. ABC-CLIO. стр. 14. ISBN 9780313354748.
  11. ^ Возняк 1977.
  12. ^ Weyhrich 2001, [Integer] BASIC, который мы поставляли с первыми Apple II, никогда не собирался — никогда. Была одна рукописная копия, полностью рукописная, полностью собранная вручную..
  13. ^ «Проект Apple 1».
  14. ^ "Реклама компьютера Apple I". 30 ноября 2009 г.
  15. ^ Баннелл, Дэвид (сентябрь 1975 г.). «Across the Editor's Desk». Computer Notes . 1 (4). Альбукерке, Нью-Мексико: MITS: 2. Архивировано из оригинала 23 марта 2012 г.
  16. ^ "Classic Gaming: A Complete History of Breakout". GameSpy. Архивировано из оригинала 13 августа 2013 г. Получено 19 апреля 2010 г.
  17. ^ Раскин, Рой; Возняк, Стивен (август 1976 г.). «Процедуры с плавающей точкой для 6502». Dr. Dobb's . стр. 17–19.
  18. Справочное руководство Apple II . Apple Computer. Январь 1978. С. 94–95.
  19. ^ ab Возняк 2018.
  20. ^ Герцфельд 1985.
  21. ^ Раскин 1978, стр. 11.
  22. ^ Раскин 1978, стр. 12.
  23. ^ Раскин 1978, стр. 46.
  24. ^ Раскин 1978, стр. 49–55.
  25. ^ Раскин 1978, стр. 48.
  26. ^ ab Helmers 1978, стр. 24.
  27. ^ ab Raskin 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. ^ "Целочисленные, плавающие и строковые переменные". Руководство программиста C64. Commodore.
  45. ^ North Star BASIC версия 6 (PDF) . North Star Corporation. 1977. Архивировано из оригинала (PDF) 2020-03-05 . Получено 2020-03-03 .
  46. Справочное руководство по ATARI BASIC. Atari Inc. 1980. Архивировано из оригинала 01.05.2005 . Получено 14.04.2020 .
  47. ^ ab Raskin 1978, стр. 89.
  48. ^ «Создайте свою собственную версию Microsoft BASIC».
  49. ^ ab Raskin 1978, стр. 88.
  50. ^ Раскин 1978, стр. 92.
  51. ^ Базовое руководство по altair 8080 (PDF) . MITS. Апрель 1977. С. 30.
  52. ^ abcd Раскин 1978, стр. 120.
  53. Мини 1977, стр. 17.
  54. ^ ab Raskin 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) . Atari. 1983. стр. 25.
  63. ^ North Star BASIC версия 6 (PDF) . North Star Corporation. 1977. стр. 8. Архивировано из оригинала (PDF) 2020-03-05 . Получено 2020-03-03 .
  64. ^ abcde Возняк 1977, стр. 42.
  65. Хелмерс 1978, стр. 18.
  66. ^ «ПРЕДВАРИТЕЛЬНОЕ РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ APPLE BASIC». Октябрь 1976 г.
  67. ^ "РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ APPLE II BASIC". 1978.
  68. ^ «СПРАВОЧНОЕ РУКОВОДСТВО ПО APPLE II» (PDF) .
  69. ^ Пол Р. Санта-Мария. "Apple II Integer Basic Disassembly" (PDF) . Получено 14.09.2020 .[ постоянная мертвая ссылка ]
  70. ^ Возняк 1977, стр. 43.
  71. ^ Apple Programmers Aid (PDF) . Apple. 1978.
  72. Справочное руководство Apple II (PDF) . Январь 1978 г. С. 94–95.
  73. ^ Эллисон, Деннис (1976). «Создай свой собственный BASIC». Журнал доктора Добба . Том 1, № 1. С. 11.
  74. ^ Хардиман, Роджер. "Altair BASIC 3.2 (4K) - Annotated Disassembly". стр. 1.11. Архивировано из оригинала 5 ноября 2001 г.
  75. ^ ab Rugg, Tom; Feldman, Phil (октябрь 1977). «BASIC сравнение временных характеристик… пересмотрено и обновлено». Kilobaud . стр. 20–25.
  76. ^ ab Rugg, Tom; Feldman, Phil (июнь 1977). "BASIC Timing Comparisons… информация для любителей скорости". Kilobaud . стр. 66–70.
  77. ^ Гилбрет, Джим (сентябрь 1981 г.). «Тест языка высокого уровня». Байт . стр. 192.
  78. ^ Ахл, Дэвид (ноябрь 1983 г.). «Сравнительный тест производительности». Creative Computing . стр. 260.
  79. Мини 1977, стр. 65–67.
  80. ^ "Breakout, Annotated". GitHub . 16 августа 2021 г.

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

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