Кіріспе

Apple I және Apple II компьютерлерінің BASIC интерпретаторы Integer BASIC — Стив Возняк Apple I және Apple II компьютерлері үшін жазған BASIC интерпретаторы. Алғашында 1976 жылы Apple I үшін кассетада қолжетімді болған, кейін 1977 жылы шығарылғаннан бастап Apple II-де ROM-ға енгізілген. Бұл BASIC көптеген ерте үй компьютерлерінің иелері қолданған алғашқы нұсқасы болды. Сандық деректердің жалғыз түрі бүтін сан болды, қалқыма нүктелі сандар қолдауға алынбады. Бүтін сандарды пайдалану сандарды ықшам 16 биттік форматта сақтауға мүмкіндік берді, оларды 32 немесе 40 биттік қалқыма нүктелі форматтардан гөрі жылдам оқуға және өңдеуге болады. Бұл оны соншалықты жылдам етті, тіпті Билл Гейтс оның Microsoft BASIC-ті салыстыру кезінде озып кеткеніне наразылық білдірді. Дегенмен, бұл оның жалпы мақсаттағы тіл ретінде қолданылуын шектеді. Басқа BASIC-терден тағы бір айырмашылық — Integer BASIC жолдарды C немесе Fortran 77 жүйелеріндегідей символдар массиві ретінде қарастырды. Жолдың бөліктеріне жол функцияларын емес, массивтің бөлігін алу арқылы қол жеткізілді. Бұл стиль HP Time Shared BASIC-те пайда болды және HP-ге негізделген басқа да заманауи BASIC-терде, мысалы North Star BASIC және Atari BASIC-те де кездеседі. Ол DEC-тен шыққан BASIC-терде, соның ішінде Microsoft BASIC-те кездесетін стильмен қарама-қарсы болды. Бұл тіл бастапқыда GAME BASIC деп аталды, ал Apple I-де пайда болғанда жай ғана Apple BASIC деп аталды. Apple II-ге портталғаннан кейін Integer BASIC аталды және қалқыма нүктелі санды қолдауды қамтитын Microsoft BASIC-тің порты — Applesoft BASIC-пен бірге жеткізілді. Integer BASIC 1979 жылы Apple II Plus-пен бірге шыққан Applesoft BASIC пайдасына біртіндеп тоқтатылды.

Тарих

Жоғары сыныпта Стив Вознякқа электроника пәнінің мұғалімі сыныптың үздік оқушыларының жергілікті электроника компанияларында тағылымдамадан өтуіне мүмкіндік жасады. Возняк Sylvania компаниясына жіберілді, онда ол IBM 1130 компьютерінде FORTRAN тілінде бағдарлама жазды. Сол жылы General Electric орта мектепке BASIC қызметін іске қосатын мейнфрейміне қосылған терминалды орнатты, олар сол кезде BASIC қызметін белсенді түрде насихаттады. Үш күнге қол жеткізгеннен кейін, оқушылардан мектепке терминалды тұрақты түрде берудің қажеттігі туралы хаттар жазу сұралды, бірақ олардың күш-жігері сәтсіз аяқталды. Кейінірек Возняк Hewlett Packard (HP) компаниясында жұмыс істеп, калькуляторлар үшін чиптердің дизайны мен логикалық схемаларын модельдеді. HP компаниясы HP 2000 сериялы машиналарымен миникомпьютерлер нарығына үлкен қадам жасады, олар BASIC-тің жеке уақыт бөлісу нұсқасын қолданды. Шамамен 1,6 миллион долларға BASIC бағдарламаларын қолдайтын 16 мен 32 пайдаланушыны қолдайтын жабдықталған машинаны құрастыруға болады. Бұл қымбат болғанымен, ол мейнфрейм машиналарының құнынан әлдеқайда арзан болды және көп пайдаланушылар үшін уақыт бөлісу қызметтерінен төмен болды. HP осыдан кейін HP 9830-ды ұсынды, ол Возняк қол жеткізе алған BASIC-ті де қолдайтын үстелге қойылатын машина болды. 1975 жылдың қаңтар айында Altair 8800 жарияланды және микрокомпьютер революциясын бастады. Наурыз айында Возняк Homebrew Computer Club-тың алғашқы отырысына қатысып, өзінің компьютерінің дизайнын жасауға кірісті. Altair үшін ең маңызды және ең көп көшірілген бағдарламалық жасақтама Altair BASIC болды. Возняк өзінің машинасының өзіне BASIC-тің қажет екенін түсінді, ол MOS Technology 6502 процессоры үшін бірінші болар деп үміттенеді. Тілге 4 КБ жад қажет болғандықтан, ол оны жобалау үшін ең аз жад көлемі ретінде белгіледі. Возняк BASIC туралы ақпараттарды 101 BASIC Computer Games кітабынан және HP BASIC нұсқаулығынан алды. Ол HP BASIC-тің 101 ойынында қолданылған DEC BASIC түрінен өте ерекше екенін, сонымен қатар ол Altair үшін Microsoft BASIC-тің негізі болғанын білмеді. Осы деректерге сүйене отырып, Возняк тілдің синтаксис кестесін жасауды бастады. Дизайнға бастапқыда қалқыма нүктелерді қолдау кірді, бірақ ол 6502 үшін бірінші BASIC-ті жариялап, "жұлдыз" болуға үміттене отырып, қалқыма нүктенің орнына бірнеше апта бағдарламалау уақытын үнемдеу үшін жеке бүтін сандар математикалық жүйесін жазуға шешім қабылдады. Возняк кейіннен өзінің тілін "негізінен ойындар мен білім беру мақсатында" деп сипаттады. Оны әзірлеу кезеңінде "GAME BASIC" деп атаған Возняк кодты қолмен жазып, ассемблерлік код нұсқауларын машиналық кодқа аударды, содан кейін нәтижесін компьютеріне жүктеді. Компьютерлік тілді жазу бойынша ешқандай оқытылған тәжірибесі болмағандықтан, ол HP калькуляторындағы тәжірибесін пайдаланып, өрнектерді түсіндіру үшін стек машинасының жұмыс істеуін іске қосты. Негізгі процедуралар жұмыс істегеннен кейін, ол басқа командаларды модульдік түрде бірінен соң бірін орындады. Homebrew клубына барған сайын ол соңғы айда қосылған жаңа мүмкіндіктерді көрсетті. 1976 жылдың басында Apple I компьютеріне арналған жарнамаларда Apple Inc компаниясы "біздің философиямыз - машиналарымызға арналған бағдарламалық жасақтаманы тегін немесе минималды құнмен ұсыну" және "әрине, Apple BASIC тегін" деген талаптарды жариялады. Бұл Билл Гейтстің хоббистерге арналған ашық хатынан кейін жарияланды, онда ол адамдар Altair BASIC нұсқаларын көшіріп алып, оны тонап жатыр деп мәлімдеді. Возняк Atari компаниясында жұмыс істеген Стив Джобсқа Breakout ойынын қайта жасауға көмектесті. Кейін ол ойынды BASIC тілінде жазуға бола ма деп ойлады. Ол ойынды басқару құралдарын оқу үшін командаларды қосты және бірнеше жылдам түзетулерден кейін ойынның жұмыс істейтін нұсқасын жасады. Ойынның ойналуын жақсарту үшін ол доп заттарға тигенде дыбыс шығару үшін динамик қосты. Ойынды Джобсқа көрсеткенде, Возняк өзінің ойынындағы түстерді бастапқы кодты өзгерту арқылы жылдам өзгерте алатынын көрсетті. Возняк кейіннен "бағдарламалық құрал аппараттық құралдарға қарағанда әлдеқайда икемді" екенін дәлелдегенін және ол екеуі "енді кез келген адам аппараттық құралдарды жасау қажеттілігінсіз аркадтық ойындарды жасай алатынын" түсінгенін жазды. Возняк 6502 үшін қалқыма нүктелік кітапхананы жасады және оны 1976 жылғы тамыздағы Dr. Dobb's Journal журналында жариялады. Бұл кітапхана кейіннен Apple II компьютері үшін ROM-ның бір бөлігі болды. Возняк қалқыма нүктелік кодты Apple BASIC-ке қайта порттау жұмысын бастады, бірақ Диск II-ге айналған дискета контроллерін жобалау міндетіне толыққанды көңіл бөлмеді. Майк Марккула компания Диск II жүйесі уақытында дайын болса, Лас-Вегастағы Тұтынушылар Электроникасы Көрмесіне қатысатынын айтты, сондықтан Возняк пен Рэнди Виггингтон 1977 жылғы мерекелерде тынымсыз жұмыс істеді. Ол BASIC-тегі қалқыма нүктелер тақырыбына оралғанда, Джобс бұл тым көп уақыт алатынын айтты. Возняк білмейтін, компания Microsoft-тан жақында аяқталған 6502 нұсқасының Altair кодын алуға лицензиялық келісімге қол жеткізген. MS кодын қарап шыққаннан кейін, Возняк олардың кодын қалқыма нүктелерді қосудан гөрі графикалық қолдауды қосудың оңайырақ екенін шешті, өйткені соңғысы бастапқы машиналық кодты қолмен түзетуді қажет етеді, ал MS кодын ассемблерде жазылған және оңай өзгертіледі. Apple-дың BASIC-тің дамуы Applesoft BASIC пайдасына аяқталды. Возняк кейіннен "менің ең үлкен көңілім ауысқан нәрсе - менің өзімнің емес, жағымсыз жолдар функцияларына көшу болды" деп мәлімдеді. Apple II компьютері 1977 жылдың жазында жеткізілген кезде Integer BASIC ROM-да келді, ал Applesoft BASIC кассетада жеткізілді. Бұл 1979 жылы Apple II Plus таныстырылған кезде өзгерді, онда Applesoft ROM-ға орнатылды.

Бағдарламаны өңдеу

Сол дәуірдегі BASIC-тің көптеген нұсқалары сияқты, Integer BASIC те тілдік аудармашы және жолдарды өңдеу ортасы ретінде жұмыс істеді. BASIC іске қосылғанда, пайдаланушы нұсқауларды енгізе алатын командалық қабылдағыш пайда болды. Кейінгі үй компьютерлерінен айырмашылығы, Apple I іске қосылғанда BASIC әдепкі орта емес еді, ол әдетте монитордан басталатын. BASIC пернелерді басу арқылы іске қосылды. Бастапқы нөмірлермен енгізілген нұсқаулар бағдарламалық жадқа "кешіктірілген орындалу" үшін сақталады, жаңа жолдар ретінде немесе бұрыннан бар, сол нөмірге ие жолдарды алмастыра отырып. Нөмірсіз енгізілген нұсқаулар командалар деп аталды және дереу орындалды. Жол нөмірлері 0-ден 32767-ге дейін болуы мүмкін, ал жолдарда 128 символға дейін болуы мүмкін. Integer BASIC сонымен қатар, әрбір жаңа жолмен соңғы нөмірге 10 қосып, белгілі бір бастапқы нөмірден жол нөмірлерін автоматты түрде енгізуге арналған команданы қамтыды. Мысалы, 300-ші жолдан бастап, 5-тен санап нөмірлеуді бастауға болады; 300, 305, және т.б. Автоматты нөмірлеуді тоқтату үшін тиісті команданы енгізу қажет болды. Редактордың бір қызықты мүмкіндігі – экранның бір бөлігін «терезе» ретінде бөліп қоюға болатын, онда жаңартулар тікелей орын алатын. Әдетте, бұл бүкіл экранды қамтыды, бірақ 32-ден 35-ке дейінгі жад орындарына мәндерді енгізу арқылы оны кішірек аймаққа шектеуге болады. Бұл мүмкіндікті экранның қалған бөлігі графикалық режимде болғанда өңдеуге болатын мәтіндік аймақты құру үшін пайдалануға болады.

Қателерді жою

Басты бағдарламалардың көпшілігі сияқты, бағдарламалар командамен басталды және әдеттегідей, белгілі бір жол нөміріне бағытталуы мүмкін. Орындау кез келген уақытта тоқтатылып, содан кейін қайта бастауға болады, ал қадамдық орындау үшін нұсқау командалық жолда немесе бағдарламаның өзінде орналастырылуы мүмкін. Ол қосылғанда, бағдарламаның әрбір жолы үшін жол нөмірлері көрсетіліп шығарылды. Бұл мүмкіндікті қайтадан өшіруге болады. Бірқатар ерекшеліктерінің бірі – "display" (көрсету) командасы еді. Бағдарламада кездескен кезде, сол сәттен бастап айнымалының мәніне кез келген өзгеріс көрсетіледі. Мысалы, X-тің мәні өзгерген сайын, оның мәні және өзгеріс болған жол нөмірі көрсетіледі. TRACE сияқты, DSP да осы командамен өшіріледі.

Айнымалылардың атаулары

Dartmouth BASIC және HP BASIC айнымалы атауларын ең көп дегенде екі таңбамен (бір әріп немесе әріптен кейін бір сан) шектесе, ал MS BASIC әріптен кейін қосымша әріп немесе санға рұқсат берген (кейінгі таңбалар назарға алынбаған), Integer BASIC кез келген ұзындықтағы айнымалы атауларын қолдау арқылы ерекшеленді (мысалы, SUM, GAMEPOINTS, PLAYER2). Бір ғана шектеу болды: айнымалы атауларында резервтелген сөздер болмауы керек; мысалы, THISCOLOR және COLORFUL айнымалы атаулары жарамсыз, себебі олар кілт сөзді, жүйелік команданы қамтиды. Сонымен қатар, жолдар 128 таңбамен шектелгендіктен, айнымалы атаулары одан ұзын болмауы керек.

Математика

Integer BASIC, аты айтып тұрғандай, математикалық пакетінің негізі ретінде бүтін сандарды қолданады. Бұл 16 биттік сан ретінде ішкі жадта сақталған, кішкентай ендиан (6502 сияқты). Бұл 32767 мен 32767 арасындағы кез келген есептеу үшін ең жоғары мәнге мүмкіндік берді; формат 32768 мәнін де сақтай алса да, BASIC бұл санды көрсетуге болмады. Осы диапазоннан тыс мәндерге әкелген есептеулер қате тудырды. Infix операторларының ішінде (қосу), (алу), (көбейту), (бөлу), MOD (қалдық) және экспонента үшін ^ таңбасы қолданылды. Бинарлық операторлар & және | кірді, ал бинарлық салыстырулар стандартты жиынтығын қамтыды: =, <, >, <=, >= және HP жүйесінен алынған <>, бұл <>-ға тең болды. Тек бір өлшемді массивтерге ғана рұқсат етілді, олардың көлемі тек қол жетімді жадпен шектелген. Математикалық функциялар аз болды; тек ABS (абсолюттік мән), SGN (белгі) және RND (кездейсоқ сан) қолдау тапты. MS-ден алынған нұсқалардан айырмашылығы, онда параметр ескерілмейтін және әрқашан 0 <1 мәнін қайтаратын, Integer BASIC параметрді пайдаланды; RND 0-ден 5-ке дейінгі бүтін санды қайтарды.

Таспалар

Integer BASIC-тің жолдармен жұмыс істеу жүйесі HP BASIC-тегі жүйеге негізделген. Бұл жол айнымалыларын пайдалану алдында өңдеуді қажет ететін символдар массиві ретінде қарастырды. Бұл C немесе Fortran 77 үлгісіне ұқсас. Бұл MS BASIC сияқты, онда жолдар өзгеретін ұзындығы бар типтер болып табылады, еселенеді. MS BASIC-тің де-факто стандарты болғанға дейін бұл стиль жиі кездесетін; North Star BASIC және Atari BASIC та басқалары сияқты осы ұғымды қолданды. Integer Basic-тегі жолдар, олардың ішінде қолданылған символдардың санына қарамастан, ең көп дегенде 255 символға дейін белгіленген жад көлемін пайдаланды. Бұл MS BASIC-тегі өте баяу үйінді қоқысын жинау қажеттілігін болдырмаудың артықшылығы болды, бірақ жарияланған ұзындығынан қысқа жолдардың ысырап болуына әкелді. Ішкі жолға қол жеткізу массивты кесу синтаксисі арқылы жүзеге асырылды. Мысалы, жолының алғашқы алты символын, 0-ден 5-ке дейінгі символдарды басып шығарды. Біріктіру сол жүйені пайдаланып жүзеге асырылды, 5-ші орыннан басталатын символдарды "ABC" жолымен алмастырды. Бұл DEC/MS стилімен салыстырылады, ол ішкі жолдарға қол жеткізу және біріктіру үшін сияқты жол функцияларын пайдаланады. Көптеген мүмкіндіктер, жол функцияларымен қамтамасыз етілетін, массивті кесу арқылы қамтамасыз етілгендіктен, жол функцияларының таңдауы шектелді. жолының ұзындығын қайтарды, ал жолдағы алғашқы әріптің ASCII сандық кодын қайтарды. Онда берілген сандық кодқа сәйкес ASCII символын қайтаратын функциясының эквиваленті болмады.

Графика және дыбыс

Іске қосылғанда, Apple үшін жалғыз ойын контроллері бір жалғағышқа екі контроллері бар paddle контроллері болды. Контроллердің орны функцияны пайдаланып, 0 немесе 1 сияқты контроллер нөмірін беру арқылы оқылатын, 0 мен 255 аралығындағы мәнді қайтаратын. Apple машиналарында арнайы дыбыс жабдығы болмады, тек қарапайым "сигнал беруші" ғана болды. Дыбыстарды шығару динамиктің 16336 жад мекенжайына мән жазу арқылы жүзеге асырылды. Бұл мәнді қайта-қайта PEEK-теу арқылы тон шығарылды, ал нұсқаулықта математикалық өрнек қолдану ұсынылды, мысалы. Графикалық қолдау егжей-тегжейлі болды. Графикалық режим нұсқаумен қосылып, сызумен өшірілді. Сызу модальды болды және әдетте түс өзгерту командасын беру арқылы басталады, бұл псевдо айнымалыны орнату арқылы жүзеге асырылды; мысалы, сызу түсін 12, ашық жасыл түске орнатуға болады. Содан кейін сол түстің бір нүктесін шығаруға, экранды қамтитын 20-шы қатарда көлденең сызық салуға немесе 7-шы бағаннан төмен қарай қысқа тік сызық салуға болады. PEEK функциясы X,Y координаталарындағы экран түсін қайтарады.

Кірісі/шығысы

Integer BASIC-те қолданушыға арналған енгізу/шығару командалары болмады, сондай-ақ оператор мен оған байланысты функция да жоқ еді. Бағдарламаға деректерді енгізу және шығару үшін енгізу/шығару мүмкіндігі таңдалған карта ұясына бағытталды және , олар шығысты немесе кірісті (сәйкесінше) нөмірленген ұяға бағыттады. Содан кейін деректер картаға стандартты командаларды қолдана отырып жіберілуі және одан оқылуы мүмкін еді.

Басқа ескертулер

Integer BASIC курсорды 0-ден 39-ға дейінгі бағанаға орналастыру мүмкіндігін қамтыды. Ол көптеген BASIC нұсқаларындағыдай мәнді жақша ішінде берілмей, одан кейін сан түрінде келетін команда болғандықтан, көптеген BASIC-тердегі нұсқалардан ерекшеленді; Integer BASIC-те курсорды 10-шы бағанаға жылжыту осылай жасалса, MS-те бұл басқаша болды. Сонымен қатар, команда көлденең емес, тік бос орындармен жұмыс істеді. Бұл жағдайда, түсіндірілмейтін себептермен, координаттар 0-ден 23-ке дейін емес, 1-ден 24-ке дейін болды. Integer BASIC циклдардан шығу үшін команданы қамтыды. Бұл FOR стегінен ең жоғарғы элементті алып тастады. Atari BASIC та осы команданы қолдады, ал North Star BASIC басқа команда қолданды. Integer BASIC ROM-дары машиналық кодты бақылаушы, "мини-ассемблер" және құрастыру және түзету үшін декомпиляторды қамтыды. Возняк осы бақылаушыны Apple II-нің алғашқы бағдарламасы ретінде қолмен құрастырды, содан кейін оны Integer BASIC-ті жазу үшін пайдаланды.

Іске асыру

Integer BASIC пайдаланушы буферден енгізген жолдарды оқып, оларды сериялы таңбаларға айналдыратын талдаушы арқылы өңдеді. Осы процесте қарапайым синтаксистік қателер анықталып, тізімделді. Егер талдау сәтті аяқталса, жол нөмірі (бар болса) ASCII ондық форматынан 16 биттік бүтін санға, ал кез келген кілт сөздер 7 биттік бүтін сан таңбасына түрлендірілді. Кейбір кілт сөздер бірнеше таңбамен көрсетілді; мысалы, Microsoft BASIC кілт сөз үшін бір таңба болса, Integer BASIC үш таңбаны пайдаланды: бірі кілт сөзден кейін аргументтер болмағанда, бірі арифметикалық өрнек болғанда және бірі жол тізбегі болғанда. Сандық мәндер, мысалы 500, 16 биттік (екі байттық) екілік форматқа, яғни он алтылыққа түрлендірілді. Бұл мән екенін, кілт сөз емес екенін көрсету үшін екі байттық мән алдынан бір байт қосылды. Жолдық мәндер, мысалы "HELLO WORLD", әр таңбаның ең жоғары битін қою арқылы түрлендірілді, осылайша олар айнымалы атаулар ретінде сақталды. Айырмалы атаулар да осылай түрлендірілді, әріптердің ең жоғары биті қосылып, атаудағы кез келген сан сәйкес келетін арқылы көрсетілді, сондықтан айнымалы таңбаланатын болады. Егер жол нөмірсіз енгізілсе, код тікелей буферден орындалды. Егер жолда нөмір болса, ол буферден бағдарлама сақтау аймағына көшірілді. Орындау уақытындағы интерпретатор орындау үшін екі стек қолданды: біреуі операторлар үшін, екіншісі параметрлерді бағалау үшін. Әр операторға екі приоритет берілді: біреуі көп қадамды операцияда оның орналасуын анықтады (мысалы, математикалық операциялардың тізбегінде операциялардың ретін анықтау үшін), екіншісі бағалаудың қашан орындалуын ұсынды (мысалы, жақша ішіндегі формуланың ішкі мәндерін есептеу үшін). Айырмалылар кездескенде, олардың атауы талданып, айнымалы сақтау аймағында ізделді. Егер табылмайтын болса, ол тізімнің соңына қосылды. Содан кейін айнымалының сақтау мекенжайы (жаңадан құрылған болса да) бағалау стегіне орналастырылды.

СҮЙІТ16

Integer BASIC-тен басқа, Apple ROM-дарында SWEET16 деп аталатын арнайы құрастыру тілі болды. SWEET16 қарапайым 16 биттік виртуалды машинада іске қосылатын байт-кодтарға негізделген. Бұл модель жадқа 16 биттік жанама көрсеткіштер арқылы қол жеткізуге және оларды 8 биттік 6502 кодының көп нұсқаулы түріне аудармай-ақ 16 биттік математикалық функцияларды есептеуге мүмкіндік берді. Бүкіл виртуалды машина тек 300 байт көлемде жазылған. Код SWEET16-ны субпрограмманы шақыру арқылы пайдалана алады, ал 16 биттік операциялар аяқталғаннан кейін қалыпты 6502 кодына оралуы мүмкін. SWEET16 негізгі BASIC кодында қолданылмады, бірақ кейінірек бірнеше қосымша құралдарды іске асыру үшін пайдаланылды. Олардың ішінде ерекше аталатыны – жолдарды қайта нөмірлеу функциясы, ол Programmer's Aid #1 ROM-ына қосылды, кейінірек Apple II модельдеріне енгізілді және бұрынғы үлгілерде пайдаланушыларға орнатуға мүмкіндік берді.

Жылжымалы нүкте

Integer BASIC өзінің математикалық функцияларын қамтығанмен, Apple II ROM-дарында да ROM жадының арасында орналасқан толық қозғалмалы нүктелік кітапхана болды. BASIC бағдарламалары осы функцияларды ШАҚЫРУЫ мүмкін еді.