Действие! - это процедурный язык программирования и интегрированная среда разработки, написанный Клинтоном Паркером для 8-битного семейства Atari . Язык, похожий на ALGOL , скомпилирован в высокопроизводительный код для MOS Technologies 6502 компьютеров Atari. Действие! Распространялся на картридже ROM компанией Optimized Systems Software, начиная с 1983 года. Это был один из первых суперкартриджей компании с переключением банков , с общим объемом кода 16 КБ.
Автор (ы) оригинала | Клинтон Паркер |
---|---|
Разработчики) | Оптимизированное системное программное обеспечение |
Первый выпуск | Август 1983 г . |
Окончательный релиз | v3.6 / 4 ноября 1983 г . |
Платформа | Семейство 8-битных Atari |
Размер | Картридж с переключением банка 16K |
Работая с Генри Бейкером , Паркер ранее разработал Micro-SPL, язык системного программирования для Xerox Alto . Действие! в значительной степени представлял собой перенос концепций Micro-SPL на Atari с изменениями для поддержки процессора 6502 и добавлением интегрированного полноэкранного редактора и отладчика.
Действие! был использован для разработки как минимум двух коммерческих продуктов - пакета повышения производительности HomePak и клиентской программы Games Computers Play, а также множества программ в журналах ANALOG Computing и Antic . Редактор вдохновил текстовый процессор PaperClip . Язык не переносился на другие платформы.
Исходный код Action! На ассемблере! был предоставлен автором в 2015 году по лицензии GNU General Public License [1].
История
Микро-SPL
Во время учебы в аспирантуре Паркер начал работать неполный рабочий день в Xerox PARC, работая над драйверами принтеров . Позже он перешел в проект Xerox Alto, где написал несколько игр для системы. [2] Его докторская степень была в области синтаксического анализа естественного языка, и он работал над теорией компиляторов во время своей дипломной работы. [3]
Генри Бейкер и Паркер выпустили Micro-SPL в сентябре 1979 года. Micro-SPL предназначался для использования в качестве языка системного программирования на компьютере рабочей станции Xerox Alto , который обычно программировался на BCPL . Alto использовал систему микрокода , которую выводил компилятор BCPL. Micro-SPL выводит тот же формат, что позволяет программам BCPL вызывать программы Micro-SPL. [4]
Помимо различий в синтаксисе, основное различие между Micro-SPL и BCPL и причина его существования заключались в том, что Micro-SPL создавал код, который был во много раз быстрее, чем собственный компилятор BCPL. В целом, программы Micro-SPL должны были работать примерно в десять раз быстрее, чем BCPL, и примерно вдвое быстрее, чем хороший рукописный микрокод. По сравнению с микрокодом, они утверждали, что на его запись уйдет вдвое меньше времени, а на отладку - 10%. [4]
Действие!
Именно в этот период Паркер приобрел Atari для домашнего использования и был разочарован отсутствием систем разработки для этой платформы. Это стало толчком для развития Action! [5]
Первоначально Паркер рассматривал возможность выпуска системы сам, но позже решил сотрудничать с Optimized Systems Software (OSS) для продаж и распространения. OSS был ориентирован на утилиты и языки программирования, такие как BASIC XL , так что это было естественным подходом для Action! [6] Продажи были достаточно высокими, чтобы Паркер мог зарабатывать на жизнь гонорарами в течение нескольких лет. [7]
Для IBM PC были доступны компиляторы C , и Паркер решил, что переносить Action нет смысла! на эту платформу. [8] По мере того, как продажи 8-битных платформ Atari сокращались, по крайней мере, в Северной Америке, OSS также сворачивался. Поздно в своей истории Действие! распространение перешло с OSS на Electronic Arts , но они мало что сделали с языком, и вскоре после этого продажи прекратились. [9]
В интервью 2015 года Паркер выразил удивление по поводу уровня поддержки, которую язык продолжает получать, предполагая, что тогда к нему, похоже, проявился больший интерес, чем в конце 1980-х. [10]
Среда разработки
Действие! был одним из первых примеров формата OSS SuperCartridge. Картриджи ПЗУ на Atari обычно ограничивались 8 КБ, что ограничивало его способность поддерживать более крупные программы. Суперкартридж имел 16 КБ, организованных как четыре блока по 4 КБ, два из которых были видны в любое время. Нижние 4 кБ не изменились, и система могла переключаться между тремя другими блоками, изменив значение в адресе $ AFFF. [11] [12]
Действие! использовал этот дизайн, разбив систему на четыре части: редактор, компилятор, монитор для тестирования кода и переключения между редактором и компилятором, а также библиотеку времени выполнения. [12] Библиотека времени выполнения хранится в самом картридже. Для распространения автономных приложений требуется отдельный пакет времени выполнения, который был продан OSS как Action! Инструментарий . [13]
Действие! конструкции были разработаны для точного отображения кодов операций 6502 , чтобы обеспечить высокую производительность без необходимости сложной оптимизации в однопроходном компиляторе . [14] Например, локальным переменным назначаются фиксированные адреса в памяти, а не в стеке записей активации . Это устраняет значительные накладные расходы, связанные с управлением стеком, что особенно сложно в случае 256-байтового стека 6502. Однако это исключает использование рекурсии . [13]
В отличие от интегрированных сред Atari BASIC и Atari Assembler Editor , Action! редактор не использует номера строк. Он имеет полноэкранный дисплей с прокруткой, способный отображать два окна, а также операции блока и глобальный поиск и замену. [13]
Монитор служит отладчиком, позволяя запускать всю программу или отдельные функции, отображать и изменять память и отслеживать выполнение программы. [13]
Типы данных
Действие! имеет три основных типа данных , все из которых являются числовыми.
БАЙТ
Внутренне представлено как 8- битовое целое число без знака . Диапазон значений от 0 до 255. Ключевое слово CHAR также может использоваться для объявления переменных BYTE.
БАЙТ возраст = [21]; объявить возраст и инициализировать его значением 21 BYTE leftMargin = 82; объявить leftMargin по адресу 82
CARDinal
Внутренне представлено как 16- разрядное целое число без знака . Значения варьируются от 0 до 65 535.
CARD население = 600 $; декларировать население и хранить его по адресам 1536 и 1537 КАРТА предыдущий год, текущий год, следующий год; используйте запятые для объявления нескольких переменных
INTeger
Внутренне представлен в виде подписанного 16- битового целого числа. Значения варьируются от -32 768 до 32 767.
INT veryCold = [-10] INT profitsQ1, profitsQ2,; объявление нескольких переменных может прибыльQ3, прибыльQ4; охватить несколько строк
Действие! также есть Массивы, УКАЗАТЕЛИ и определяемые пользователем ТИПЫ. Нет плавающей точкой поддержка не предоставляется.
Пример пользовательского ТИПА:
ТИП ШНУРА = [КАРТА x, y] CORD точка point.x = 42 point.y = 23
Зарезервированные слова
Зарезервированное слово любой идентификатор или символ , который в действии! компилятор распознает как нечто особенное. Это может быть оператор, имя типа данных, инструкция или директива компилятора.
И FI ИЛИ ДО = ( МАССИВ ДЛЯ УКАЗАТЕЛЯ ПРИ <>) BYTE FUNC PROC XOR #. КАРТА ПРИ ВОЗВРАТЕ +> [ СИМВОЛ ВКЛЮЧАЕТ RSH -> =] ОПРЕДЕЛЕНИЕ НАБОР INT * <" СДЕЛАТЬ ШАГ LSH / <= ' ИНАЧЕ ИЗМЕНИТЬ ЗАТЕМ & $; МОДУЛЬ ELSEIF К% ^ ВЫЙТИ ИЗ ТИПА OD! @
Пример кода
Ниже приведен пример кода для Sieve of Eratosthenes, написанного в Action !. Чтобы повысить производительность, он отключает графический сопроцессор ANTIC , предотвращая "кражу" циклов процессора во время вычислений его механизмом DMA .
BYTE RTCLOK = 20,; адрес системного таймера SDMCTL = 559; DMA контрольФЛАГИ БАЙТОВЫХ МАССИВОВ (8190)КАРТОЧНЫЙ СЧЕТ, I, K, ПРЕМЬЕР, ВРЕМЯПРОЦЕДУРА СИТА () SDMCTL = 0; выключить Antic RTCLOK = 0; сбросить часы на ноль COUNT = 0; счетчик инициализации ДЛЯ I = 0 ДО 8190; и флаги ДЕЛАТЬ ФЛАГИ (I) = 'T; "'T" - это константа, предоставляемая компилятором для True. OD ДЛЯ I = 0 ДО 8190; теперь беги через решето ДЕЛАТЬ ЕСЛИ ФЛАГИ (I) = 'ТО ТОГДА ПРАЙМ = I + I + 3 K = I + PRIME ПОКА K <= 8190 ДЕЛАТЬ ФЛАГИ (K) = 'F; "'F" - это константа, предоставляемая компилятором для False. K == + PRIME OD COUNT == + 1 FI OD ВРЕМЯ = RTCLOK; получить чтение таймера SDMCTL = 34; восстановить экран PRINTF ("% E% U ПРИМЕРЫ В"; COUNT) PRINTF ("% E% U JIFFIES"; ВРЕМЯ)ВОЗВРАЩАТЬСЯ
Прием
Брайан Мориарти в обзоре ANALOG Computing за февраль 1984 г. пришел к выводу, что Action! был «одним из самых ценных инструментов разработки, когда-либо опубликованных для Atari». Он назвал руководство единственным слабым местом пакета, заявив, что оно «страдает от недоверия, неуверенной организации и нехватки хороших, точных технических данных». [15]
Лео Лапорт сделал обзор Action в выпуске Hi-Res за май / июнь 1984 года . Он начал обзор: «Это лучшее, что случилось с Atari с тех пор, как Нолан Бушнелл понял, что люди будут играть в пинг-понг на экране телевизора ». Лапорт похвалил редактора, отметив его возможности разделения экрана, вырезания и вставки и охарактеризовав его как «полную систему обработки текста, которая очень быстро реагирует». Он сказал, что Action! работал примерно в 200 раз быстрее, чем Atari BASIC , и пришел к выводу, что «этот язык похож на точно настроенный гоночный автомобиль». [16]
В 1985 году BYTE высоко оценил скорость компиляции и выполнения программ, написанных на Action! Используятест Byte Sieve в качестве теста, десять итераций сита были выполнены за 18 секунд в Action !, по сравнению с 10 секундами для сборки и 38 минутами в BASIC. Журнал также похвалил редактора языка. BYTE сообщил, что этот язык достаточно похож на C, чтобы «постоянно преобразовывать программы между ними», и одобрил поддержку указателей. Журнал пришел к выводу, что «Action! Прост в использовании, быстр и эффективен. Он может использовать всю мощь Atari. Action! Переводит программирование для Atari в совершенно новое измерение». [17]
Ян Чедвик написал в Mapping the Atari, что «Action! - вероятно, лучший язык для Atari; он немного похож на C и Pascal, с добавлением форта. Я рекомендую его». [18]
Смотрите также
- PaperClip , 8-битный текстовый процессор Atari от другого автора и компании, основанный на Action! редактор
Рекомендации
Цитаты
- ^ Действие! Исходный код - страница 2 , Альфред (командир вертолета) Опубликовано в понедельник, 2 февраля 2015 г., 13:38, форумы AtariAge, это оригинальное действие! источник, как я получил его от ICD. Он использует кросс-ассемблер ICD, который не включен в zip. Его легко конвертировать в другие форматы.
- ^ Паркер 2015 , 6:00.
- ^ Паркер 2015 , 6:30.
- ^ a b Baker & Parker 1979 , стр. 1.
- ^ Паркер 2015 , 7:00.
- ^ Паркер 2015 , 28:00.
- ^ Паркер 2015 , 20:00.
- ^ Паркер 2015 , 21:30.
- ^ Паркер 2015 , 2:45.
- ^ Паркер 2015 , 1:00.
- ^ «Управление RAM / ROM на компьютере XL / XE» . AtariWiki .
- ^ а б Мориарти 1984 , стр. 55.
- ^ а б в г Мориарти 1984 .
- ^ АКЦИЯ! в Атарики (PL)
- ^ Мориарти 1984 , стр. 60.
- ^ Лапорт, Лео (май – июнь 1984 г.). "Свет, камера, мотор!" . Hi-Res . п. 72.
- ^ Шнифлок, Эд (март 1985 г.). "Действие! C бедняка?" . БАЙТ . п. 273 . Проверено 19 марта +2016 .
- ^ Чедвик, Ян (1985). «Предисловие автора к переработанному изданию» . Отображение Atari . Гринсборо, Северная Каролина: Вычислить! Publications, Inc., стр. V – vi. ISBN 0-87455-004-1.
Библиография
- Бейкер, Генри; Паркер, Клинтон (сентябрь 1979 г.). Micro-SPL (PDF) (Технический отчет). Компьютерные услуги Synapse. CiteSeerX 10.1.1.126.6877 .
- Паркер, Клинтон (31 декабря 2015 г.). «ANTIC Interview 111, Клинтон Паркер, Action!» (подкаст). Беседовал Рэнди Киндиг.
- Мориарти, Брайан (февраль 1984). «Экшен! - Новый язык для Atari!» . АНАЛОГОВЫЕ Вычисления . № 16. С. 54–61.
Внешние ссылки
- Действие! (язык программирования) на SourceForge.net
- Действие! Язык программирования версии 3.6 - Исходный код , от компании Optimized Systems Software на archive.org
- Действие! информация на Retrobits.com
- Действие! Архив
- Действие! ссылка на язык
- Кросс-компилятор Effectus