Целое число BASIC - Integer BASIC
Разработчик | Стив Возняк |
---|---|
Впервые появился | 1976[1] |
Платформа | Яблоко I, Яблоко II |
Под влиянием | |
HP BASIC | |
Под влиянием | |
Applesoft BASIC |
Целое число BASIC это БЕЙСИК-интерпретатор написано Стив Возняк для Яблоко I и Яблоко II компьютеры. Первоначально доступно на кассета для Apple I в 1976 году, затем был включен в ПЗУ на Apple II с момента его выпуска в 1977 году это была первая версия BASIC, используемая многими ранними домашний компьютер владельцы.[2]
Язык поддерживает математику с использованием целые числа, не хватает плавающая точка поддерживать. Использование целых чисел позволило хранить числа в гораздо более компактном 16-битном формате, который можно было читать и обрабатывать быстрее, чем 32- или 40-битные форматы с плавающей запятой, присутствовавшие в большинстве BASIC того времени. Однако это ограничивало его применимость в качестве языка общего назначения.[а]
Еще одно отличие от других BASIC той эпохи состоит в том, что Integer BASIC рассматривал строки как массивы символов, аналогично системе в C или же Фортран 77. Доступ к подстрокам осуществлялся с помощью нарезка массива а не строковые функции. Этот стиль был введен в БАЗОВЫЙ HP с разделением времени, а также может быть обнаружен в других современных BASIC, созданных по образцу HP, например ОСНОВНАЯ ИНФОРМАЦИЯ и Atari BASIC. Это контрастировало со стилем BASIC, заимствованным из DEC, включая Microsoft 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, компьютер размером с настольный компьютер за 10000 долларов (что эквивалентно 66000 долларов в 2019 году), на котором также был запущен BASIC, к которому у Возняка был доступ.[9]
Стив Возняк[1]
В январе 1975 г. Альтаир 8800 было объявлено и вызвало микрокомпьютер революция. В марте Возняк присутствовал на первом заседании Домашний компьютерный клуб и начал разрабатывать дизайн своего собственного компьютера. Одна из самых важных программных продуктов для Альтаира и одна из самых сложных пиратский, был Альтаир БАЗОВЫЙ из недавно сформированного Microsoft.[10] Возняк пришел к выводу, что его машина должна иметь собственный БЕЙСИК, который, как мы надеемся, станет первым для Технология MOS 6502 процессор. Поскольку языку требовалось 4 КБ ОЗУ, он сделал это минимальным объемом памяти для дизайна.[1]
Ссылки Возняка на BASIC были копией Компьютерные игры 101 BASIC и руководство HP BASIC.[1] Он не знал, что HP BASIC сильно отличается от DEC BASIC разнообразие, используемое в 101 Игры, который также был основой Microsoft BASIC для Altair. Основываясь на этих источниках, Возняк начал зарисовывать синтаксис диаграмма для языка. Первоначально в проект входила поддержка чисел с плавающей запятой, но все еще надеясь, что он сможет опубликовать первый BASIC на 6502 и стать «звездой», он решил отказаться от операций с плавающей запятой и написать отдельную целочисленную математическую систему, чтобы сэкономить несколько недель времени программирования.[1]
Позже Возняк описал свой язык как «предназначенный в первую очередь для игр и образовательных целей».[11] На протяжении всей разработки называл его «GAME BASIC», Возняк написал код вручную, переведя код ассемблера инструкции в их Машинный код эквиваленты, а затем загружает результат на свой компьютер.[12] Не имея никакого обучения тому, как писать на компьютерном языке, он использовал свой опыт работы с калькулятором HP для реализации штабелеукладчик интерпретировать выражения. После того, как основные процедуры были запущены и запущены, он работал над остальными командами одну за другой в модульном режиме. При каждом посещении клуба Homebrew он демонстрировал еще несколько функций, добавленных за последний месяц.[1]
Стив Возняк[9]
В начале 1976 г. реклама своего Яблоко I компьютер Apple Inc. заявили, что «наша философия заключается в предоставлении программного обеспечения для наших машин бесплатно или по минимальной цене»[13] и «да, ребята, Apple BASIC бесплатна».[14]
Возняк помог Джобсу, который работал на Atari, с редизайном Прорыв.[15] Позже он решил посмотреть, можно ли написать игру на BASIC. Он добавил команды для чтения лопастные контроллеры и после серии быстрых правок версия игры была запущена. Чтобы улучшить удобство игры, он добавил динамик, который щелкает, когда мяч ударяется о предметы. Показывая это Стив Джобс Возняк продемонстрировал, что может быстро изменить цвета, используемые в его игре, просто изменив исходный код. Позже Возняк писал, что он доказал, что «программное обеспечение гораздо более гибкое, чем оборудование», и что он и Джобс осознали, что «теперь любой может создавать аркадные игры, не проектируя их на оборудовании».[1]
Возняк завершил библиотеку с плавающей запятой для 6502 и опубликовал ее в выпуске августа 1976 г. Доктор Доббс.[16] Позднее эта библиотека стала частью ПЗУ для Яблоко II.[17] Возняк начал работу по обратному переносу кода с плавающей запятой в Apple BASIC, но отвлекся на задачу разработки дискета контроллер для того, что стало Диск II. Майк Марккула сказал, что компания пойдет на Выставка бытовой электроники в Лас Вегас если дисковая система была готова вовремя, поэтому Возняк и Рэнди Виггинтон работал над ним без перерыва все каникулы 1977 года.[18]
Когда он вернулся к теме с плавающей точкой в BASIC, Джобс пожаловался, что это занимает слишком много времени. Без ведома Возняка компания заключила с Microsoft лицензию на получение недавно завершенной версии 6502 кода Altair. Изучив код, Возняк решил, что проще добавить поддержку графики в код MS, чем добавить свой собственный BASIC с плавающей запятой, поскольку позже потребовалось вручную исправлять исходный машинный код, в то время как MS был написан на ассемблере и более легко модифицировался. Разработка Apple BASIC закончилась в пользу того, что стало Applesoft. Позже Возняк заметил: «Больше всего меня разочаровали ужасные строковые функции, такие как LEFT $ (VAR, 5) и MID $ (VAR2,5,3) вместо моей собственной».[18][d]
Когда Apple II поставлялся летом 1977 года, Integer BASIC поставлялся в ПЗУ, а Applesoft BASIC поставлялся на кассете. Это изменилось с введением Apple II Plus в 1979 году, когда Applesoft был помещен в ROM.[19]
Описание
Редактирование программы
Как и большинство реализаций BASIC того времени, Integer BASIC действовал как интерпретатор языка, а также как среда редактирования строк. Когда BASIC работал, >
командная строка отображалось, где пользователь мог вводить операторы.[20][e] В отличие от более поздних домашний компьютер платформ, BASIC не был средой по умолчанию при запуске Apple I, обычно он запускался в монитор. BASIC запускался нажатием Ctrl+BВозвращаться.[21]
Операторы, которые были введены с ведущими числами, заносятся в память программы для «отложенного выполнения»,[22] либо как новые строки, либо заменяя те, которые ранее могли иметь тот же номер.[23] Операторы, введенные без номера строки, назывались командами и выполнялись немедленно.[f] Номера строк могут быть от 0 до 32767,[24][грамм] и строки могут содержать до 128 символов.[26]
Integer BASIC также включает АВТО
команда для автоматического ввода номеров строк с заданным начальным номером, например АВТО 100
, добавляя 10 к последнему числу с каждой новой строкой. АВТО 300,5
начинал бы нумерацию в строке 300 пятерками; 300, 305 и т.д. Автоматическая нумерация была отключена вводом ЧЕЛОВЕК
.[27]
Одна интересная особенность редактора заключалась в том, что часть экрана можно было выделить как «окно», где происходили обновления в реальном времени. Обычно это был весь экран, но его можно было ограничить меньшей площадью, POKE
занесение значений в ячейки памяти с 32 по 35.[28] Эту функцию можно использовать для создания редактируемой текстовой области, когда остальная часть экрана находится в графическом режиме.[29]
Отладка
Как и в большинстве BASIC, программы запускались с ПРОБЕГ
команда, и, как обычно, могла быть направлена на конкретный номер строки, например БЕГ 300
.[30] Выполнение можно было остановить в любой момент, используя Ctrl+C[31] а затем перезапустили с ПРОТИВ
tinue, в отличие от более типичных ПРОДОЛЖЕНИЕ
.[32]
Для пошагового выполнения СЛЕД
Инструкцию можно использовать в командной строке или разместить в самой программе. Когда он был включен, номера строк распечатывались для каждой строки, которую посещала программа. Эту функцию можно снова отключить с помощью NOTRACE
.[33]
Несколько необычной особенностью был DSP
(для "отображения") команда. При обнаружении в программе с этого момента любой изменения к значению переменной. Например, DSP X
будет отображать значение X каждый раз, когда оно изменяется, вместе с номером строки, в которой произошло изменение.[34] Как и в случае с TRACE, DSP был отключен с помощью NODSP
.[25]
Имена переменных
Где Дартмутский ОСНОВНОЙ и HP-BASIC ограничивает имена переменных максимум двумя символами (либо одной буквой, либо буквой, за которой следует одна цифра), и там, где MS-BASIC допускает букву, за которой следует необязательная буква или цифра (игнорируя последующие символы), Integer BASIC был необычно в поддержке имени переменной любой длины (например, SUM, GAMEPOINTS, PLAYER2). Единственная оговорка заключалась в том, что имена переменных не могли содержать зарезервированные слова; например, THISCOLOR и COLORFUL были недопустимыми именами переменных, потому что они содержали ключевое слово COLOR, системную команду.[35] Кроме того, длина строк была ограничена 128 символами, поэтому имена переменных не могли превышать эту длину.[26]
Математика
Integer BASIC, как следует из названия, использует целые числа в качестве основы для своего математического пакета. Они хранились внутри как 16-битные числа с прямым порядком байтов (как и 6502). Это позволяло максимальное значение для любых вычислений от -32767 до 32767; хотя формат может также хранить значение -32768, BASIC не может отображать это число. Расчеты, которые привели к значениям за пределами этого диапазона, дали > 32767 ERR
.[36]
Включены инфиксные операторы +
(добавление), -
(вычитание), *
(умножение), /
(разделение), MOD (остаток) и показатель степени с использованием ^
персонаж. Включены бинарные операторы И
, ИЛИ ЖЕ
и НЕТ
. Бинарные сравнения включали стандартный набор =
, >
, <
, >=
, <=
, <>
и вдохновленный HP #
, что эквивалентно <>.[37]
Допускались только одномерные массивы, размер которых ограничивался только доступной памятью.[38] Математические функции были редкими; Только АБС
(абсолютная величина), SGN
(знак) и RND
(случайное число) были поддержаны.[39] В отличие от версий, производных от MS, где параметр игнорировался и RND
всегда возвращал значение 0 .. <1, параметр использовал Integer BASIC; RND (6)
вернул целое число от 0 до 5.[40]
Струны
Обработка строк Integer BASIC была основана на системе в HP BASIC. Это рассматривало строковые переменные как массивы символов, которые должны быть Тусклый
ed перед использованием. Это похоже на модель в C[41] или же Фортран 77.[42] Это контрастирует с MS-подобными BASIC, где строки являются внутренним типом переменной длины.[43] До того, как основанные на MS BASIC стали де-факто стандарт, этот стиль не был редкостью; ОСНОВНАЯ ИНФОРМАЦИЯ[44] и Atari BASIC[45] использовали ту же концепцию, что и другие.
Строки в Integer Basic использовали фиксированный объем памяти независимо от количества символов, используемых в них, до 255 символов.[46] Это имело то преимущество, что не требовалось вывоз мусора из куча это было заведомо медленным в MS BASIC[час] но означало, что строки, которые были короче заявленной длины, были потрачены впустую.
Доступ к подстроке был предоставлен через нарезка массива синтаксис. Например, ПЕЧАТЬ A $ (0,5)
напечатал первые шесть символов A $, символы от 0 до 5.[48][48][я] Конкатенация была обеспечена с использованием той же системы, A $ (5) = "ABC"
заменил любые символы, начинающиеся с позиции 5, на строку «ABC».[49] Это контрастирует с обработкой строк в стиле DEC / MS, в которой используются строковые функции, такие как MID $
для доступа к подстрокам и +
для конкатенации.[50][j]
Поскольку многие функции, которые могли бы быть предоставлены строковыми функциями, вместо этого предоставлялись путем нарезки массива, выбор строковых функций был сокращен. LEN $
вернул длину строки[46] и ASC
вернул числовой код ASCII для первой буквы в строке.[51] Ему не хватало эквивалента CHR $
который вернул символ ASCII с заданным числовым кодом.[52]
Графика и звук
При запуске единственный игровой контроллер для Apple был лопастной контроллер, у которого было два контроллера на одном разъеме. Положение контроллера можно было прочитать с помощью PDL
функция, передавая номер контроллера, 0 или 1, например A = PDL (0): ПЕЧАТЬ A
, возвращая значение от 0 до 255.[53][k]
В машинах Apple не было специального звукового оборудования, только простой звуковой сигнал. Производство звуков было достигнуто PEEK
расположение динамика, отображенное в памяти, -16336.[l] Неоднократно PEEKing это значение производило тона, и в руководстве предлагалось использовать математическое выражение для этого, например S = PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336) -PEEK (-16336)
.[55]
Поддержка графики была более подробной. Графический режим был включен с GR
заявление и прочь с ТЕКСТ
.[56] Рисование было модальным и обычно начиналось с подачи команды на изменение цвета, которая выполнялась установкой псевдопеременной; ЦВЕТ = 12
установит цвет рисунка на 12, светло-зеленый. Тогда можно было УЧАСТОК 10,10
чтобы создать единственное пятно этого цвета,[57] HLIN 0,39 АТ 20
чтобы нарисовать горизонтальную линию в строке 20, которая охватывает весь экран, или ВЛИН 5,15 АТ 7
чтобы провести более короткую вертикальную линию вниз по столбцу 7.[58] A = SCRN X, Y
вернул цвет экрана в X, Y.[51][м]
Ввод, вывод
В Integer BASIC не было никаких пользовательских команд ввода / вывода, а также ДАННЫЕ
заявление и связанные ЧИТАТЬ
. Для ввода и вывода данных из программы функции ввода / вывода были перенаправлены на выбранный слот для карт памяти с PR # x
и IN # x
, который перенаправлял вывод или ввод (соответственно) в пронумерованный слот. С этого момента данные можно было отправлять на карту с помощью обычных РАСПЕЧАТАТЬ
команды и читать из них, используя ВХОД
.[51]
Прочие примечания
Целочисленный BASIC включал TAB
функция, которая помещает курсор в заданный столбец от 0 до 39. Она отличалась от версий, найденных в большинстве BASIC, тем, что это была команда со следующим номером, а не функция со значением в скобках; можно переместить курсор в столбец 10, используя ВКЛАДКА 10
в Integer BASIC[59] тогда как в MS это будет ПЕЧАТЬ ВКЛАДКИ (10)
. Кроме того, VTAB
команда работала аналогично TAB
но добавлены вертикальные пробелы вместо горизонтальных. По необъяснимым причинам в данном случае координаты были от 1 до 24, а не от 0 до 23.[60]
Целочисленный BASIC включал Поп
команда для выхода из циклов.[51] Это вытолкнуло самый верхний элемент из стека FOR. Atari BASIC также поддерживает ту же команду,[61] пока ОСНОВНАЯ ИНФОРМАЦИЯ использовал ВЫХОД
.[62]
Целочисленные ОСНОВНЫЕ ПЗУ также включали монитор машинного кода, "мини-ассемблер ", и дизассемблер для создания и отладки язык ассемблера программы. Возняк вручную собрал монитор как первую программу для Apple II, а затем использовал его для написания Integer BASIC.[63][64][2]
Зарезервированные слова
Apple BASIC
У Apple BASIC были следующие команды:[65]
АВТОval1,val2CLR[ЧИСТО]DELval1,val2СПИСОКval1,val2ПРОБЕГval1SCR[ЦАРАПАТЬ/НОВЫЙ]HIMEM=exprЛОМЕМ=expr(ПОЗВОЛЯТЬ)вар=exprВХОД(Подсказка,)var1,var2...РАСПЕЧАТАТЬэлемент(s)TABexprЗАвар=expr1Кexpr2ШАГexpr3СЛЕДУЮЩИЙварЕСЛИexprТОГДАутверждениеЕСЛИexprТОГДАлинияномерИДТИ КexprGOSUBexprВОЗВРАЩАТЬСЯТусклыйvar1(expr1),var2(expr2)...REM текстКОНЕЦPOKEexpr1,expr2ВЫЗОВexprФункции:АБС(),SGN(),PEEK(),RND(),LEN()
Целое число BASIC
Integer BASIC добавил следующее:[66][67]
ЦВЕТ=exprПРОТИВ[ПРОДОЛЖИТЬ]DSPGRHLINexpr1,expr2Вexpr3ЧЕЛОВЕКНОВЫЙ[заменяетSCR]NOTRACEУЧАСТОКexpr1,expr2ПопТЕКСТСЛЕДVLINexpr1,expr2Вexpr3Функция:ASC(),PDL(),SCRN(Икс,Y)
Выполнение
Целочисленный BASIC считывает введенные пользователем строки из буфера и прогоняет их через парсер которые выводят серию жетоны. В рамках этого процесса простой синтаксические ошибки были обнаружены и внесены в список. Если разбор прошел успешно, номер строки (если он есть) был преобразован из ASCII десятичный формат в 16-битное целое число и любые ключевые слова в 7-битный целочисленный токен.[63]
Некоторые ключевые слова были представлены несколькими токенами; например, если у Microsoft BASIC был один токен для ключевого слова РАСПЕЧАТАТЬ
, Integer BASIC имел три токена: один, если за ключевым словом не было аргументов, один, если за ним следовало арифметическое выражение, и один, если за ним следует строковый литерал.[68]
Числовые литералы, такие как значение 500, были преобразованы в их 16-битное (двухбайтовое) двоичное представление, в данном случае $ 01F4. шестнадцатеричный. Чтобы указать, что это значение, а не ключевое слово, перед двухбайтовым значением был вставлен один байт между $ B0 и $ B9.[n] Вместо этого строковые литералы, такие как «HELLO WORLD», были преобразованы путем установки старшего бита каждого символа так, чтобы А
был сохранен как $ C1. Имена переменных были преобразованы таким же образом, при этом буквы преобразовывались так, чтобы их старший бит был включен, а любые цифры в имени были представлены соответствующими $ B0 - $ B9, так что переменная A5
будет токенизироваться как $ C1B5.[63]
Если строка была введена без номера строки, тогда код выполнялся непосредственно из буфера. Если в нем был номер строки, он копировался из буфера в область хранения программы.[63]
Интерпретатор времени выполнения использовал для выполнения два стека: один для ключевых слов оператора, а другой для оценки параметров. Каждому оператору было дано два приоритета: один, который указывал, где он должен выполняться в многоэтапной операции, например, строка математических операций для обеспечения порядок действий, и другой, который предлагал, когда должна происходить оценка, например, вычисление внутренних значений формулы круглых скобок. Когда переменные встречались, их имя анализировалось, а затем ищалось в области хранения переменных. Если он не был найден, он добавлялся в конец списка. Адрес хранилища переменной, возможно, только что созданный, затем помещался в стек оценки.[63]
Детали ПЗУ
СЛАДКИЕ 16
В дополнение к Integer BASIC, ПЗУ Apple содержали пользовательский язык ассемблера известный как СЛАДКИЕ 16. SWEET16 основан на байткоды которые работают в простом 16-битном виртуальная машина. Эта модель использовалась для обращения к памяти с помощью косвенных 16-разрядных указателей и 16-разрядных математических функций, вычисляемых без необходимости их преобразования в базовый 8-разрядный код 6502 с несколькими инструкциями. Вся виртуальная машина была записана всего в 300 байт. Код может вызвать SWEET16, выполнив подпрограмма вызовите, а затем вернитесь к нормальному коду 6502 после завершения 16-битных операций.[69]
SWEET16 не использовался в основном коде BASIC, но позже использовался для реализации нескольких утилит. Среди них следует отметить процедуру перенумерации строк, которая была включена в ПЗУ Programmer's Aid # 1, добавлена в более поздние модели Apple II и доступна для установки пользователем на более ранних примерах.[70]
Плавающая точка
Хотя Integer BASIC содержал свои собственные математические процедуры, ПЗУ Apple II также включали полную библиотеку с плавающей запятой, расположенную в памяти ПЗУ между $ F425-F4FB и $ F63D-F65D. Исходный код был включен в руководство Apple II. Программы BASIC, требующие вычислений с плавающей запятой, могут ВЫЗОВ
в эти рутины.[71]
Спектакль
Поскольку Integer BASIC обработал больше исходного исходный код в токены, среда выполнения была быстрее, чем версии, требующие дополнительного синтаксического анализа. Для сравнения, Tiny BASIC токенизируется только номер строки,[72] в то время как MS BASIC токенизировал только ключевые слова. Так, например, в то время как Integer BASIC преобразует строку 100 GOTO 200
полностью в токены, которые могли быть немедленно прочитаны и выполнены, в MS BASIC токенизировались только номер строки и GOTO, «100» оставалось в исходном формате, и его приходилось повторно анализировать в 16-битное целое число каждый раз, когда линия была встречена.[73]
Кроме того, работа исключительно с целочисленной математикой дает еще один существенный прирост скорости. Это связано как с меньшим 16-битным форматом, требующим меньшего количества обращений к памяти, так и с устранением необходимости перемещать десятичную дробь с плавающей запятой после вычислений. Так много компьютерные тесты того времени были небольшими и часто выполняли простую математику, не требующую чисел с плавающей запятой, Integer BASIC превзошел большинство других BASIC.[o]
На одном из самых ранних известных тестов микрокомпьютеров Тесты Rugg / Feldman, Integer BASIC был вдвое быстрее, чем Applesoft BASIC на той же машине.[75] в Байт Сито, где математика была менее важна, но преобладали доступ к массиву и производительность цикла, Integer BASIC занял 166 секунд, а Applesoft - 200.[76] Он не фигурировал в Тест Creative Computing, который был впервые опубликован в 1983 году, к тому времени Integer BASIC больше не предоставлялся по умолчанию.[77]
Следующая серия тестов, взятая из обеих оригинальных статей Rugg / Feldman,[75][74] показать производительность Integer по сравнению с производным от MS BASIC на той же платформе.
Система | ЦПУ | БАЗОВЫЙ | Тест 1 | Тест 2 | Тест 3 | Тест 4 | Тест 5 | Тест 6 | Тест 7 |
---|---|---|---|---|---|---|---|---|---|
Яблоко II | 6502 @ 1 МГц | Целое число BASIC | 1.3 | 3.1 | 7.2 | 7.2 | 8.8 | 18.5 | 28.0 |
Яблоко II | 6502 @ 1 МГц | Applesoft BASIC | 1.3 | 8.5 | 16.0 | 17.8 | 19.1 | 28.6 | 44.8 |
Образец кода
Ниже приводится версия Breakout, написанная в версии Integer BASIC 1977 года для Apple II, которая была указана в руководстве Apple II Mini.[78] В этой версии есть ряд известных ошибок.[79]
Программа начинается с установки дисплея на ТЕКСТ
а потом ЗВОНИТЕ -936
чтобы очистить экран. Строки с 20 по 27 и связанные с ними подпрограммы в строках 100 и 200 - это код выбора цвета, который Возняк продемонстрировал для Джобса. Строка 30 устанавливает текстовое окно с POKE 32,20
[п] а затем использует серию ЦВЕТ
и VLIN
операторы для рисования игрового поля и отображения счета в текстовом окне. Весь основной цикл проходит от строки 40 до 90 со связанными подпрограммами. Еще один большой объем кода в конце программы связан с печатью окончательной оценки. Другие интересные примечания включают #
(не равные) сравнения в строке 20, производство звука высокого тона с использованием строки PEEK
s в строке 65 по сравнению с более низким тоном, использующим петлю в строке 70, а также сочетание графики и текста на одном дисплее.[q]
5ТЕКСТ:ВЫЗОВ-936:VTAB4:TAB10:РАСПЕЧАТАТЬ«*** ИГРА НА ПЕРЕРЫВ ***»:РАСПЕЧАТАТЬ7РАСПЕЧАТАТЬ«ЗАДАЧА - УНИЧТОЖИТЬ ВСЕ КИРПИЧИ 5 ШАРИКАМИ»:ЗАN=1К7000:СЛЕДУЮЩИЙN10ТусклыйАвстралийский доллар(20),Млрд долларов(20):GR:РАСПЕЧАТАТЬ:ВХОД"ПРИВЕТ, КАК ТЕБЯ ЗОВУТ? ",Австралийский доллар:А=1:B=13:C=9:D=6:E=15:РАСПЕЧАТАТЬ«СТАНДАРТНЫЕ ЦВЕТА»,;Австралийский доллар;20ВХОД"? ",Млрд долларов:ЕСЛИМлрд долларов#"N"ИМлрд долларов#"НЕТ"ТОГДА30:ЗАя=0К39:ЦВЕТ=я/2*(я<32):VLIN0,39Вя25СЛЕДУЮЩИЙя:POKE34,20:РАСПЕЧАТАТЬ:РАСПЕЧАТАТЬ:РАСПЕЧАТАТЬ:ЗАя=0К15:VTAB21+яMOD2:TABя+я+1:РАСПЕЧАТАТЬя;:СЛЕДУЮЩИЙя:POKE34,22:VTAB24:РАСПЕЧАТАТЬ:РАСПЕЧАТАТЬ"ФОН";27GOSUB100:А=E:РАСПЕЧАТАТЬ«ДАЖЕ КИРПИЧ»;:GOSUB100:B=E:РАСПЕЧАТАТЬ"НЕЧЕТНЫЙ КИРПИЧ";:GOSUB100:C=E:РАСПЕЧАТАТЬ"ВЕСЛО";:GOSUB100:D=E:РАСПЕЧАТАТЬ"МЯЧ";:GOSUB10030POKE34,20:ЦВЕТ=А:ЗАя=0К39:VLIN0,39ATI:СЛЕДУЮЩИЙя:ЗАя=20К34ШАГ2:TABя+1:РАСПЕЧАТАТЬя/2-9;:ЦВЕТ=B:VLIN0,39Вя:ЦВЕТ=C:ЗАJ=яMOD4К39ШАГ435VLINJ,J+1Вя:СЛЕДУЮЩИЙJ,я:TAB5:РАСПЕЧАТАТЬ«SCORE = 0»:РАСПЕЧАТАТЬ:РАСПЕЧАТАТЬ:POKE34,21:S=0:п=S:L=S:Икс=19:Y=19:Икс=1940ЦВЕТ=А:УЧАСТОКИкс,Y/3:Икс=19:Y=RND(120):V=-1:W=RND(5)-2:L=L+1:ЕСЛИL>5ТОГДА140:TAB6:РАСПЕЧАТАТЬ"МЯЧ #";L:РАСПЕЧАТАТЬ:ЗАя=1К100:GOSUB200:СЛЕДУЮЩИЙя:M=1:N=050J=Y+W:ЕСЛИJ>=0ИJ<120ТОГДА60:W=-W:J=Y:ЗАя=1К6:K=PEEK(-16336):СЛЕДУЮЩИЙя55ЕСЛИPEEK(-16287)>127ТОГДАЮЗ=1-ЮЗ60я=Икс+V:ЕСЛИя<0ТОГДА400:GOSUB200:ЦВЕТ=А:K=J/3:ЕСЛИя>39ТОГДА70:ЕСЛИSCRN(я,K)=АТОГДА90:ЕСЛИяТОГДА120:N=N+1:V=(N>9)+1:W=(K-п)*2-5:M=165Z=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336):ИДТИ К9070ЗАя=1К6:M=PEEK(-16336):СЛЕДУЮЩИЙя:я=Икс:M=080V=-V90УЧАСТОКИкс,Y/3:ЦВЕТ=E:УЧАСТОКя,K:Икс=я:Y=J:ИДТИ К5099РАСПЕЧАТАТЬ"НЕДЕЙСТВИТЕЛЬНО. ВХОДИТ";100ВХОД«ЦВЕТ (от 0 до 15)»,E:ЕСЛИE<0ИЛИ ЖЕE>15ТОГДА99:ВОЗВРАЩАТЬСЯ120ЕСЛИMТОГДАV=АБС(V):VLINK/2*2,K/2*2+1Вя:S=S+я/2-9:VTAB21:TAB13:РАСПЕЧАТАТЬS123Q=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)124ЕСЛИS<720ТОГДА80130РАСПЕЧАТАТЬ«ПОЗДРАВЛЯЕМ, ВЫ ПОБЕДИЛИ».:ИДТИ К150140РАСПЕЧАТАТЬ«ВАША СЧЕТКА»;S;" ЯВЛЯЕТСЯ ";:ИДТИ К141+S/100141РАСПЕЧАТАТЬ"УЖАСНЫЙ!":ИДТИ К150142РАСПЕЧАТАТЬ"НАСЫЩЕННЫЙ".:ИДТИ К150143РАСПЕЧАТАТЬ"БЕДНЫЕ.":ИДТИ К150144РАСПЕЧАТАТЬ"СПРАВЕДЛИВЫЙ.":ИДТИ К150145РАСПЕЧАТАТЬ"ХОРОШИЙ.":ИДТИ К150146РАСПЕЧАТАТЬ"ОТЛИЧНО.":ИДТИ К150147РАСПЕЧАТАТЬ"ОТЛИЧНО.":ИДТИ К150148РАСПЕЧАТАТЬ"ПОЧТИ ИДЕАЛЬНЫЙ".150РАСПЕЧАТАТЬ«ЖЕ ЦВЕТА»;:ИДТИ К20200ЕСЛИЮЗТОГДА220:Q=(PDL(0)-5)/6:ЕСЛИQ<0ТОГДАQ=0205ЕСЛИQ>=34ТОГДАQ=34:ЦВЕТ=D:VLINQ,Q+5В0:ЦВЕТ=А:ЕСЛИп>QТОГДА210:ЕСЛИQТОГДАVLIN0,Q-1В0:п=Q:ВОЗВРАЩАТЬСЯ210ЕСЛИп=QТОГДАВОЗВРАЩАТЬСЯ:ЕСЛИQ#34ТОГДАVLINQ+6,39В0:п=Q:ВОЗВРАЩАТЬСЯ220Q=(Y-5)/3+RND(3)*SGN(W)*(Икс<10ИV<0):ЕСЛИQ<0ТОГДАQ=0:ИДТИ К205400ЗАя=1К80:Q=PEEK(-16336):СЛЕДУЮЩИЙя:ИДТИ К40
Примечания
- ^ Или как Билл Гейтс выражаясь, «более мощный Бейсик ... с плавающей запятой».[3]
- ^ IBM 370/155 стоила более 2 миллионов долларов в 1970 году (что эквивалентно 13000000 долларов в 2019 году).[6]
- ^ Tymshare взимает около 10 долларов в час (что эквивалентно 66 долларам в 2019 году) за доступ к своим системам,[7] в то время как услуги меньшего размера можно было найти примерно за 5 долларов.[8]
- ^ Обработка строк не была «его собственной», это была та же система, что и в HP BASIC.
- ^ Чтобы прояснить, какой BASIC был запущен, Applesoft использовала
]
Подсказка. - ^ В том, что MS более описательно называет "немедленный режим ".
- ^ Хелмерс говорит, что самый низкий номер строки - 1.[25]
- ^ И полностью сломан в некоторых версиях.[47]
- ^ HP также допускает [и] вместо (и).
- ^ Это также контрастирует с Дартмутский ОСНОВНОЙ который использовал
КОНВЕРТИРОВАТЬ
команда для преобразования строки в массив значений ASCII, которыми пользователь затем манипулирует и конвертирует обратно в строковый формат с помощью второгоКОНВЕРТИРОВАТЬ
. - ^ В руководстве предполагается, но прямо не говорится, что фактический диапазон значений меньше 0–255.[53]
- ^ Отрицательное число является побочным эффектом хранения целых чисел в формате со знаком, поэтому любая ячейка памяти более 32767 отображается в BASIC как отрицательное значение.[54]
- ^ Обратите внимание на нечетный синтаксис SCRN, который технически является функцией, поскольку возвращает значение, но не использует синтаксис, подобный функции, который был бы
A = SCRN (X, Y)
. - ^ Первая цифра исходного значения использовалась для выбора значения от 0 до 9, поэтому в этом примере токен будет $ B5 для первой цифры 500.
- ^ Билл Гейтс пожаловался на это, заявив, что было несправедливо сравнивать Integer BASIC с «настоящим» BASIC, таким как MS.[74]
- ^ Это означает, что текст начинается в строке 20 из 24 строк на экране, оставляя четыре строки текста внизу.
- ^ Список различных вызовов CALL, PEEK и POKE, которые выполняли общие операции на Apple II, см. Заглядывает, тычет, звонки и примечания по программированию, Чарльз Терли, 15 декабря 1996 г.
Рекомендации
Цитаты
- ^ а б c d е ж грамм час я Возняк 2014.
- ^ а б Вейрих 2001.
- ^ Рагг, Том; Фельдман, Фил (октябрь 1977 г.). «БАЗОВЫЕ сравнения сроков… исправлено и обновлено». Килобод. С. 20–25.
- ^ Баум, Аллан (18 июля 2016 г.). «Устная история Аллена Баума» (Интервью). Беседовал Дэвид Брок. п. 12.
- ^ «Прохождение 10-летнего рубежа». Журнал MEASURE. Hewlett Packard. Октябрь 1976 г.
- ^ Куни, Майкл. «(В основном) крутая история мэйнфрейма IBM». ARN.
- ^ Борн, Чарльз; Хан, Труди Беллардо (август 2003 г.). История информационных служб Интернета, 1963–1976 гг.. п. 387. ISBN 9780262261753.
- ^ Барри, Тим (27 апреля 1981). "Назад к основам". InfoWorld. п. 7.
- ^ а б Уильямс и Мур 1984, п. A71.
- ^ Фиск, Натан (2009). Понимание интернет-пиратства. ABC-CLIO. п. 14. ISBN 9780313354748.
- ^ Возняк 1977.
- ^ Вейрих 2001, [Integer] BASIC, который мы поставляли с первыми Apple II, никогда не собирался - никогда. Была одна рукописная копия, все рукописные, все собранные вручную ...
- ^ «Проект Apple 1».
- ^ "Компьютерная реклама Apple I".
- ^ «Классические игры: полная история прорыва». GameSpy. Архивировано из оригинал 8 июля 2012 г.. Получено 19 апреля, 2010.
- ^ Раскин, Рой; Возняк, Стивен (август 1976 г.). «Процедуры с плавающей запятой для 6502». Доктор Доббс. С. 17–19.
- ^ Справочное руководство Apple II. Компьютер Apple. Январь 1978 г. С. 94–95.
- ^ а б Возняк 2018.
- ^ Герцфельд 1985.
- ^ Раскин 1978, п. 11.
- ^ Раскин 1978, п. 12.
- ^ Раскин 1978, п. 46.
- ^ Раскин 1978 С. 49-55.
- ^ Раскин 1978, п. 48.
- ^ а б Хелмерс 1978, п. 24.
- ^ а б Раскин 1978, п. 118.
- ^ Раскин 1978 С. 65-67.
- ^ Раскин 1978, п. 124.
- ^ Возняк 1977, «В этом смешанном режиме предусмотрена цветная графическая сетка 40 на 40 плюс четыре строки прокручиваемого текста внизу экрана.».
- ^ Раскин 1978, п. 100.
- ^ Раскин 1978, п. 15.
- ^ Раскин 1978, п. 52.
- ^ Раскин 1978, п. 107.
- ^ Раскин 1978, стр. 100,101.
- ^ Раскин 1978, п. 38.
- ^ Раскин 1978, п. 27.
- ^ Раскин 1978, п. 61.
- ^ Раскин 1978, п. 94.
- ^ Раскин 1978, п. 40,120.
- ^ Раскин 1978, п. 40.
- ^ "Струны". learn-c.org.
- ^ Брукс, Стив. «Персонажи и строки в Фортране» (PDF). Гавайский университет.
- ^ «Целочисленные, плавающие и строковые переменные». Руководство программиста C64. Коммодор.
- ^ North Star BASIC версия 6 (PDF). North Star Corporation. 1977 г.
- ^ {Справочное руководство ATARI BASIC. Atari Inc., 1980 год.
- ^ а б Раскин 1978, п. 89.
- ^ «Создайте свою собственную версию Microsoft BASIC».
- ^ а б Раскин 1978, п. 88.
- ^ Раскин 1978, п. 92.
- ^ altair 8080 базовое руководство (PDF). MITS. Апрель 1977 г. с. 30.
- ^ а б c d Раскин 1978, п. 120.
- ^ Мини 1977, п. 17.
- ^ а б Раскин 1978, п. 36.
- ^ Мини 1977, п. 18.
- ^ Раскин 1978, п. 84.
- ^ Раскин 1978, п. 31.
- ^ Раскин 1978, п. 32.
- ^ Раскин 1978, п. 33.
- ^ Раскин 1978, п. 73.
- ^ Раскин 1978, п. 74.
- ^ Справочное руководство Atari BASIC (PDF). Atari. 1983. с. 25.
- ^ North Star BASIC версия 6 (PDF). North Star Corporation. 1977. с. 8.
- ^ а б c d е Возняк 1977, п. 42.
- ^ Хелмерс 1978, п. 18.
- ^ "ПРЕДВАРИТЕЛЬНОЕ ОСНОВНОЕ РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ APPLE" (PDF).
- ^ "ОСНОВНОЕ РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ APPLE II".
- ^ "СПРАВОЧНОЕ РУКОВОДСТВО ПО APPLE II" (PDF).
- ^ Пол Р. Санта-Мария. «Базовая разборка Apple II Integer» (PDF). Получено 2020-09-14.
- ^ Возняк 1977, п. 43.
- ^ Помощь программистам Apple (PDF). Яблоко. 1978 г.
- ^ Справочное руководство Apple II (PDF). Январь 1978 г. С. 94–95.
- ^ Эллисон, Деннис (1976). «Создайте свой собственный БЕЙСИК». Журнал доктора Добба. Vol. 1 шт. 1. п. 11.
- ^ Хардиман, Роджер. «Альтаир Бейсик 3.2 (4K) - Аннотированная разборка». п. 1.11. Архивировано из оригинал 5 ноября 2001 г.
- ^ а б Рагг, Том; Фельдман, Фил (октябрь 1977 г.). «БАЗОВЫЕ сравнения сроков… исправлено и обновлено». Килобод. С. 20–25.
- ^ а б Рагг, Том; Фельдман, Фил (июнь 1977 г.). «БАЗОВЫЕ СРАВНЕНИЯ ГРМ… информация для фанатов скорости». Килобод. С. 66–70.
- ^ Гилбрит, Джим (сентябрь 1981). «Тест языка высокого уровня». Байт. п. 192.
- ^ Ахл, Дэвид (ноябрь 1983 г.). «Сравнительный тест». Творческие вычисления. п. 260.
- ^ Мини 1977 С. 65-67.
- ^ "Прорыв, аннотированный". GitHub. Архивировано из оригинал 4 ноября 2018 г.
Библиография
- Apple II Mini Руководство. Яблоко. 1977 г.
- Герцфельд, Энди (июнь 1985 г.). «Печальная история MacBasic». Фольклор.CS1 maint: ref = harv (связь)
- Хелмерс, Карл (март 1978). «Яблоко к байту». Байт. С. 18–24, 30–32, 35, 40–46.CS1 maint: ref = harv (связь)
- Раскин, Джеф (1978). Руководство по программированию Apple II BASIC (PDF). Компьютер Apple.CS1 maint: ref = harv (связь)
- Вейрих, Стивен (12 декабря 2001 г.). «История, часть 3: Apple II». Получено 2007-09-16.CS1 maint: ref = harv (связь)
- Возняк, Стивен (май 1977 г.). "Описание системы / Apple-II". Байт. С. 34–43.CS1 maint: ref = harv (связь)
- Уильямс, Грегг; Мур, Роб (декабрь 1984). «История Apple / Часть 1: Ранняя история». Байт. стр. A67 – A71. Получено 23 октября 2013.CS1 maint: ref = harv (связь)
- Возняк, Стивен (1 мая 2014 г.). "Как Стив Возняк написал BASIC для оригинального Apple с нуля". Gizmodo.CS1 maint: ref = harv (связь)
- Возняк, Стивен (3 января 2018 г.). «ЯБЛОЧНЫЙ БЕЙСИК». Woz.org.CS1 maint: ref = harv (связь)
внешняя ссылка
- Базовая разборка Apple II Integer, декомпилированная вручную версия Полом Санта-Мария
- Справочник INTEGER BASIC - С веб-сайта Landsnail.com "Справочник программиста Apple II".
- Карта прошивки Apple-1 BASIC разработан Джоном Каландом, включая схему