Кіріспе

GRASS (GRAphics Symbiosis System) – 2D векторлық графикалық анимацияларды жазу үшін құрылған бағдарламалау тілі. GRASS синтаксисі BASIC-ке ұқсас болғанмен, 2D нысандардың анимациясын, соның ішінде масштабтау, жылжу және уақыт өте келе айналуын анықтау үшін көптеген командалар қосылды. Бұл мүмкіндіктер Vector General 3D графикалық терминалымен тікелей қолдауға ие болды. Ол компьютерлік графиканың жаңа саласында тәжірибе жасаған суретшілер қауымы арасында жылдам танымал болды және ең әйгілісі – Ларри Кубаның «Жұлдыз соғысы» (1977) фильміндегі «Өлім жұлдызына шабуыл жасау оңай болмайды» анимациясын жасауда қолданылуы. Кейіннен Midway Games компаниясымен жасалған ынтымақтастық аясында, бұл тіл Midway Z80 процессорлық Z Box машинасына көшірілді. Бұл машина растрлық графиканы және спрайттарды қолданды, оларға қолдау көрсету үшін кеңейтілген өзгерістер, сондай-ақ түстердің анимациялық өзгеруі қажет болды. Бұл нұсқа ZGRASS деп аталды.

ШЫЛЫҚ

GRASS-тың бастапқы нұсқасын Том ДеФанти 1974 жылы Огайо штатының университетіндегі Ph.D. диссертациясы үшін жасаған. Ол Vector General 3DR дисплейімен жабдықталған PDP 11/45 құрылғысында құрылды. Атауынан көрініп тұрғандай, бұл таза векторлық графикалық машина болды. GRASS бірнеше векторлық сурет салу командаларын қамтыды және оларды иерархиялық құрылымға ұйымдастырып, кескіннің бүкіл "ағаштарына" (массивтерде сақталған) бірден түрлі анимациялық эффекттерді қолдана алды. Диссертациясын қорғағаннан кейін ДеФанти Чикаго округінің Иллинойс университетіне көшті. Онда ол Дэн Сандинмен бірігіп, Circle Graphics Habitat (қазіргі Электрондық визуализация зертханасы немесе EVL) құрды. Сандин 1971 жылы университетке келген және Sandin Image Processor, немесе IP құрылғысын жасады. IP – екі бейне кірісін қабылдап, оларды араластырып, түсін өзгертіп, содан кейін теледидар сигналын қайта жасайтын аналогтық компьютер болды. Ол оны Moog синтезаторының бейне нұсқасы деп сипаттады. ДеФанти IP-нің кірісі ретінде қолданыстағы GRASS жүйесін қосты, нәтижесінде GRASS/Image Processor пайда болды, ол 1970-жылдардың ортасында кеңінен қолданылды. Жүйені одан да пайдалы ету үшін ДеФанти мен Сандин GRASS жүйесіне түрлі "бір реттік" командаларды қосты, бірақ бұл өзгерістер тілді одан да ерекшелендірді. 1977 жылы Habitat мүшесі Нола Донато GRASS-тың көптеген басқару құрылымдарын жаңартып, оларды жалпы формаға келтірді, нәтижесінде GRASS3 айтарлықтай жақсартылды. Ларри Кубаның "Жұлдызды соғыстар" фильміне жасаған жұмысы Vector General 3D терминалында жұмыс істейтін GRASS жүйесінің жартылай автоматтандырылған түсіріліміне негізделген. VG3D ішкі жабдығымен жабдықталған, ол масштабтау, айналдыру сияқты негізгі түрлендірулерді компьютермен байланыспай-ақ, нақты уақытта орындай алды. GRASS тілімен байланыс тек жаңа көріністер көрсетілген кезде ғана баяу болды. Мұны фильмде де көруге болады: фильмнің басындағы бөліктерде Өлім Жұлдызы тез айналып, масштабталады, ал кейінгі бөліктерде траншеядан ұшуды имитациялау үшін GRASS "ағаштарынан" жаңа сахналарды беттеп алу қажет болды. Олар топтап пайда болады.

ZGRASS және UV-1

1977 жылы ДеФанти Дейв Наттинг Ассошиэйтедс компаниясында чиптерді жобалайтын Джефф Фредериксенмен танысты. Наттинг компаниясы Bally компаниясының бейне ойындар бөлімі Midway-мен стандартталған графикалық драйвер чипін жасау үшін келісім шарт жасасты. Олар оны болашақта көптеген аркада ойындарында, сондай-ақ жұмыс істеп жатқан бейне ойын консолінде пайдалануды жоспарлаған, ол кейіннен Astrocade болып өсті. Midway өз жүйесінде GRASS тілін іске қосуға қызығушылық танытты және оны платформаға көшіру үшін ДеФантимен келісім шарт жасасты. Хабитаттан және Наттингтен бірнеше адам бұл жобада жұмыс істеді, оны Z Box деп атады. Ол машинада іске қосылған GRASS3 ZGRASS деп аталды. Z Box бастапқы GRASS жүйелерінен өзгеше, растрлық графикалық машина болды, сондықтан ZGRASS GRASS3 стилін сақтап қана қоймай, растрлық кескіндерге арналған қосымша командаларды да қосты. Бұл аппараттық құралда болмаған спрайттарды имитациялау үшін біт-блоктарды беру командаларының кең жиынтығын қамтыды. Midway бұл жұмысты жарияламады, бірақ Circle компаниясы оның негізінде Datamax UV 1 машиналарын өндірді.

GRASS RT/1

GRASS-тың соңғы нұсқасы RT/1 болды, ол GRASS-ты басқа платформаларға көшіру (порттау) арқылы тілді көрсету моделінен бөліп, оны басқа платформаларға порттауға мүмкіндік берді. MS DOS, Microsoft Windows, OpenGL қолдайтын SGI платформасы, HP UX, AIX, Macintosh және Amiga үшін нұсқалар болды. Тіл ертерек нұсқаларға ұқсас күйде қалғандықтан, атаудың өзгеру себебі түсініксіз.

Сипаттама

Бұл сипаттама Баллидің түпнұсқалық нұсқаулықтарына және ACM сипаттамасына негізделген. Zgrass стандартты BASIC командалар жиынтығына негізделген және оның синтаксисінің көп бөлігін қолданды. Zgrass BASIC-тен ерекшеленетін жері - барлық командалар іс жүзінде функциялар болып табылады және C бағдарламалау тіліне ұқсас мәндерді қайтарады. Егер белгілі қайтарым мәні болмаса, функция табысты болса 1, ал сәтсіз болса 0 қайтарады деп күтілді. Мысалы, PRINT PRINT 10 командасы BASIC-те заңсыз болар еді, бірақ Zgrass-те бұл 10 1 басып шығарады, 1 екінші PRINT функциясы қайтарған мән, яғни "Мен '10' жолын сәтті шығардым". Zgrass-тағы бағдарламалар "макростар" деп аталды және тізбектер ретінде сақталды. Бұл екі ерекшелік те қасақана жасалды, өйткені Zgrass кез келген тізбекті бағдарламаға айналдыруға мүмкіндік берді. Мысалы, MYBOX="BOX 0,0,100,100,2" Zgrass кодының үзіндісін қамтитын тізбекті анықтайды (Microsoft BASIC-тегідей айнымалыға $ белгісі қажет емес). Осыдан кейін жай ғана осы атауды теру арқылы ішкі командалар орындалады. Бұл мүмкіндік BASIC-тен дәстүрлі GOSUB командасының орнына қолданылуы мүмкін, бірақ мөлдір емес жол нөміріне қарағанда жақсы анықталған атауға ие болудың қосымша артықшылығы бар. Бұған қоса, команда жадыда тізбек түрінде сақталады және орындау кезінде стандартты тізбек операцияларымен өңделуі мүмкін. Сол кездегі BASIC интерпретаторларының көпшілігі кіріс мәтінін токенделген нұсқаға айналдырды, онда командалардың әрқайсысы бір санмен ауыстырылды (әдетте бір байт). Бұл бағдарламаны жылдам орындауға мүмкіндік берді, өйткені командаларды әрқашан тізбектен кодтаудың қажеті болмады. Zgrass тізбектік макростарды пайдаланғандықтан, токенизациямен айналыспады. Оның орнына, ол кез келген макросты компиляциялауға болатын компиляторды қамтыды, осылайша оның жылдамдығын бірнеше есе арттырды. Бағдарламалар көбінесе компиляцияланған және компиляцияланбаған макростардан тұрады. Zgrass-та жол нөмірлері міндетті емес еді және әдетте тек GOTO командасының нысанасы болған жолдарда пайда болар еді. BASIC интерпретаторларының көпшілігі әр код жолы үшін жол нөмірін талап етті, бірақ бұл олардың "жол редакторында" қолданылуымен байланысты. Егер сізге белгілі бір жолды өңдеу қажет болса, оған сілтеме жасаудың жалғыз жолы сан арқылы болды. Zgrass бұл қажеттілікті жойған озық толық экранды редакторын қолданды. Zgrass кез келген тізбекті "жол нөмірі" ретінде пайдалануға рұқсат берді, және екеуі де жарамды болды. Zgrass сонымен қатар нұсқауларды қолдана отырып, атаусыз тармақтарды қамтыды, олар берілген жолдар санын алға немесе артқа жылжытады. Бұл Zgrass үшін маңызды, өйткені жол нөмірлері міндетті емес және әртүрлі макростар бірдей таңбаларды пайдалана алады. Мысалы, кодтың көп бөлігінде осыған ұқсас нұсқаулар кездесуі мүмкін, сондықтан атаулардың қақтығысына соқтыруы мүмкін. Бұл мүмкіндікті болдырмау үшін басқа нұсқауды пайдалану қажет. Графикалық тіл ретіндегі бастапқы мақсатына сәйкес, Zgrass қарапайым сурет салуға арналған көптеген командаларды қамтыды. Zgrass координаттар жүйесінде Nutting графикалық чипінің жоғары ажыратымдылық режиміндегі әр пиксел үшін бір нүкте бар, бұл 320 × 202 торды құрайды. Astrocade дизайны бойынша, тек сол чиптің төменгі ажыратымдылық режимін, 160 × 101 дисплейін пайдалана алады. Карталаудағы ықтимал проблемаларды болдырмау үшін координаттар кеңістігінің нөлдік нүктесі экранның ортасына орналастырылды. -160-тан 160-қа дейін X координаталары, ал -101-ден 101-ге дейін Y координаталары жарамды. Astrocade үшін тек оң координаталарды пайдалану керек, ал UV 1 үшін бүкіл кеңістік қолданылады. Zgrass массивтерді кеңінен қолданатындықтан, массив функцияларының толық жиынтығын қосты. Бұл дисплейдің бөліктерін бит картасы ретінде массивке "түсіру" мүмкіндігін қамтиды, содан кейін оны кез келген басқа графикалық элемент ретінде өңдеуге болады. Бұл Zgrass-ке Nutting аппараттық құралында тікелей қолдау таппаған sprite сияқты функционалдылықты енгізуге мүмкіндік берді. Astrocade-та массивтерді ақылға қонымды жылдамдықпен өңдеу мүмкіндігі болмағандықтан, UV 1 қосымша өнімділік үшін Zilog жеткізген FPU-ны қамтыды. Zgrass үш басымдық деңгейін ("деңгейлер" деп аталады) қамтыды, олар макростарды қалыпты түрде немесе "алдыңғы" немесе "артқы" деңгейлерде орындауға мүмкіндік берді. Бұл анимацияға бағытталған тілде өте пайдалы болатын көп тапсырмалылықтың қарапайым түрін қосты. Ойын авторлары джойстик оқу реттілігін артқы жолда орындалатын макрос жиынтығына орналастыра алады, содан кейін джойстик ағымдағы сурет салу макросы аяқталған кезде автоматты түрде оқылады. Алдыңғы жолда орналасқан функциялар екеуінен бұрын орындалады және көбінесе таймерлер мен басқа "төмен кешігу" қажеттіліктері үшін қолданылды. Zgrass белгілі бір уақыт аралығында макростарды шақыратын функцияны қамтыды, бұл таймерлерді оңай жүзеге асыруға мүмкіндік берді. Zgrass сонымен қатар CP/M-ді "жабатын" бірқатар командаларды қамтыды, бұл дискіге командалық қабықтан шықпастан қол жеткізуге мүмкіндік берді. Макростарды атаулы файлдарға оңай сақтауға және сол сияқты жүктеуге болады, осылайша дискіден әртүрлі макростарды жүктеу арқылы бағдарламаны құруға болады. Командалар әр сақталымның резервтік көшірмесін автоматты түрде жасады. Ұқсас мүмкіндіктер Compact Cassette сақтау үшін де қолдау көрсетілді, бірақ қызығы, синтаксис параллель емес: дискілік командалар D әрпімен басталады, мысалы, , ал кассеталық командалар T әрпімен емес, емес, бірақ TAPE әрпімен басталады, мысалы, .

Мысал

Бұл мәтін SINCURVE деп аталатын жаңа макросты құрайды, оны командалық жолға SINCURVE деп теріп немесе басқа макростардан немесе бағдарламалардан шақыруға болады. SINCURVE екі жергілікті айнымалыны, x және бұрышты, сондай-ақ OFFSET глобалды айнымалысын пайдаланады. PROMPT/INPUT – бұл бастапқы BASIC INPUT-тың өзгертілген нұсқасы, егер пайдаланушы макроны шақырғанда командалық жолға мәнді енгізсе, ол кіріс сұрамайды. Мысалы, тек SINCURVE деп теру нәтижесінде сұрау пайда болып, бағдарлама кіріс күтеді, ал SINCURVE 30 деп теру сұрауды өткіріп жібереді және OFFSET автоматты түрде 30-ға теңеледі. Бұл бір макросты интерактивті түрде де, бағдарлама ішінде функция ретінде де пайдалануға мүмкіндік береді. POINT – Zgrass тіліндегі көптеген графикалық командалардың бірі. POINT үшін X және Y координаталары, сондай-ақ түс қажет. Бұл мысалда пайдаланушы берген OFFSET қисықтың x-координатасын экранда жылжытады, ал Y-координатасын тригонометриялық функция анықтайды, ол көрсету үшін тиісті түрде үлкейтіледі (бұл жағдайда 80 есе). Түс соңғы кіріс ретінде беріледі, бұл жағдайда ол 3. UV 1 түс тізілімдерін пайдаланғандықтан, 3 нақты түсті білдірмейді, бірақ ағымдағы палитрадан таңдалған түс болып табылады. IF де ерекшеленеді. Ол тесттің алдына (x=x+1) арттыруын қояды, бұл әдетте BASIC-те қолжетімді емес мүмкіндік. Бұл жағдайда IF дұрыс болса SKIP 2-ні шақыруға бұйырылады, ол екі жолға кері жылжиды және жол нөмірінің орнына GOTO орнына пайдаланылуы мүмкін.