HP4TM - 1 - ********************************************* ** M A N U A L H I S O F T P A S C A L 4 T ** ********************************************* *** HISOFT *** *** 13 Gooseacre, Cheddingron *** *** Leighton Buzzard, Beds. *** *** Postcode: LU7 OSR *** *** Tel: (0296) 668995 *** TRANSL. Manual je prevzat z osobniho pocitace ZX Spectrum HP4TM - 3 - 2.3.5 Dalsi preddefinovane procedury ................................... 24 2.3.5.1 NEW(p) ........................................................... 24 2.3.5.2 MARK(v1) ......................................................... 24 2.3.5.3 RELEASE(v1) ...................................................... 24 2.3.5.4 INLINE(C1,C2,C3,.....) ........................................... 24 2.3.5.5 USER(V) .......................................................... 25 2.3.5.6 HALT ............................................................. 25 2.3.5.7 POKE(X,V) ........................................................ 25 2.3.5.8 TOUT(NAME,START,SIZE) ............................................ 25 2.3.5.9 TIN(NAME,START) .................................................. 25 2.3.5.10 OUT(P,C) ........................................................ 25 2.3.6 Dalsi preddefinovane funkce ...................................... 25 2.3.6.1 RANDOM ........................................................... 26 2.3.6.2 SUCC(X) .......................................................... 26 2.3.6.3 PRED(X) .......................................................... 26 2.3.6.4 ODD(X) ........................................................... 26 2.3.6.5 ADDR(V) .......................................................... 26 2.3.6.6 PEEK(X,T) ........................................................ 26 2.3.6.7 SIZE(V) .......................................................... 26 2.3.6.8 INP(P) ........................................................... 26 3. Komentare a moznosti volby u prekladace .......................... 27 3.1 Komentare ........................................................ 27 3.2 Moznosti volby u prekladace ...................................... 27 4. Integralni editor ................................................ 29 4.1 Uvod do editoru .................................................. 29 4.2 Editorove povely ................................................. 29 4.2.1 Vkladani textu ................................................... 29 4.2.2 Listing textu .................................................... 30 4.2.3 Editace textu .................................................... 30 4.2.4 Povely pro pasku ................................................. 32 4.2.5 Preklad a beh prostrednictvim editoru ............................ 33 4.2.6 Dalsi povely ..................................................... 33 4.3 Priklad pouziti editoru .......................................... 34 Dodatek 1: CHYBY ......................................................... 35 A.1.1 Kod chyb, generovanych kompilerem ................................ 35 A.1.2 Chybova hlaseni u runtime ........................................ 36 DODATEK 2: Rezervovana slova a preddefinovane identifikatory ............. 37 A.2.1 Rezervovana slova ................................................ 37 A.2.2 Specialni symboly ................................................ 37 A.2.3 Preddefinovane identifikatory .................................... 37 DODATEK 3: Reprezentace a ukladani dat ................................... 38 A.3.1 Reprezentace dat ................................................. 38 A.3.1.1 Cela cisla ....................................................... 38 A.3.1.2 Znaky, BOOLEAN a dalsi skalary ................................... 38 A.3.1.3 Realna cisla ..................................................... 38 A.3.1.4 Zaznamy a retezce ................................................ 40 A.3.1.5 Soustavy ......................................................... 40 A.3.1.6 Ukazatele ........................................................ 40 A.3.2 Ukadani promenne behem chodu ..................................... 40 DODATEK 4: Nekolik prikladu HP4T programu ................................ 42 DODATEK 5: Pro SPECTRUM .................................................. 45 A.5.1 Vkladani HP4 z pasky ............................................. 45 A.5.2 Implementace na SPECTRUM ......................................... 45 A.5.3 Aplikacni poznamka PS1.1 ......................................... 46 A.5.3.1 ZX SPECTRUM - zvuk a grafika s Hisoft pascalem 4T ................ 46 DODATEK 6: Implementace na pocitac SORD m.5 .............................. 49 HP4TM - 5 - HISOFT PASCAL 4T - VERZE 1.5 Od 1.dubna 1983 existuje Hisoft Pascal 4T ve verzi 1.5. Vlastnici drivejsich verzi HP4T by proto meli prejit na vyssi uroven verze 1.5 tim, ze by vratili svou starou pasku spolu s manipulacnim poplatkem $3 + VAT ( dan za luxus ). Rozdily mezi verzi 1.4 a 1.5 jsou nasledujici: 1.Funkce nyni mohou vracet POINTER vysledek. 2.Zavada v preddefinovane procedure NEW, ktera mela obcas za nasledek nespravne umistneni pameti pro dynamickou promennou byla nyni opravena. 3.Byl pridan novy editorovy povel 'V' ( bez argumentu ),ktery zobrazuje bezne implicitni hodnoty rozsahu radku, string Find a Substitue string ( Hledat a Nahradit). Bezna implicitni hodnota rozsahu radku je zobrazena nejdrive a je nasledovana dvema retezci na odlisnych radcich ( ktere mohou zustat prazdne ). Melo by byt pripomenuto, ze urcite povely editoru ( jako 'D' a 'N' ) nepouzivaji tyto implicitni hodnoty, ale museji mit hodnoty speci- fikovane na prikazovem radku - viz Prirucka programatora. 4.POUZE PRO ZX SPECTRUM:'Include' volba ('$F' viz kapitola 3.2 Programatorske prirucky HP4T ) je nyni k dispozici ve verzi HP4T pro ZX Spectrum. Kdyz si prejete zvolit tuto moznost, potom zdrojovy text, ktery ma byt v dalsim postupu bezprostredne zahrnut,musi byt ulozen na pasku pouzitim editoroveho povelu 'W' ( plati jen pro Spectrum ). 'W' funguje presne jako 'P' s vyjim- kou, ze neuklada na pasku standardni format HP4T a zacina ukladat text na pasku bezprostredne po ukonceni prikazoveho radku. Proto musi byt magneto- fon nastaven na nahravani pred stisknutim ENTER na konci poveloveho radku. Kdyz ukladate text pouzitim 'W', nebo ctete text pouzitim 'F' povelu kompi- latoru, potom muzete pouzit klavesu BREAK kdykoliv. Pouziti teto klavesy vas navrati do editoru. Vsimnete si, ze kdyz si prejete nacist text z edi- toru povelem 'G', potom text musi byt nahran pouzitim 'P' a nikoliv 'W'! Priklad pouziti: Vypsani casti uzivatelskeho programu: W50,120,PLOT ;vypsat PLOT proceduru. Vlozeni teto casti do jineho programu: 100 END; 110 120 {$F PLOT vlozi sem PLOT proceduru .} 130 140 PROCEDURE MORE; {zbytek programu} 150 Hisoft doufa,ze shora uvedena zlepseni a opravy zvysi pouzitelnost HP4T a jako obvykle vita jakoukoliv korespondenci tykajici se tohoto dokumentu. Copyright David Link, 1983 HP4TM - 7 - Potom se objevi dotaz: Top of RAM for 'T' (vrchol RAM pro 'T') Zde muzete zadat dekadicke cislo, ktere nedosahuje vrcholne adresy RAM zadane drive. Zadana hodnota bude brana jako zasobnik pro strojovy kod po pouziti editoroveho povelu 'T' (detaily viz Kapitola 4). Budete muset definovat zasob- nik pro 'runtimes' odlisny od vrcholu RAM, kdyz jste si napriklad napsali roz- sireni tykajici se 'runtimes' a prejete si je bezpecne umistnit na hornich adresach pameti. Nakonec budete dotazani: Table size? (rozmer tabulky?) Zde zadavana hodnota specifikuje rozsah pameti pro tabulku symbolu kompileru. Zadejte znovu budto kladne dekadicke cislo nasledovane RETURN, nebo jednoduse RETURN samotny. V druhem pripade bude brana implicitni hodnota (t.j. dostupna RAM delena 16) a ta bude brana pro rozmer tabulky symbolu. Temer ve vsech pri- padech hodnoty dane implicitne zajistuji dostatek prostoru pro symboly.Tabulka symbolu nesmi prekrocit strojovou adresu &8000 ( 32768 dekadicky ). Kdyz si specifikujete tak velkou hodnotu, ze se tak stane, dostanete opet dotaz 'Top of RAM?' atd. Podle sve vule muzete vlozit 'E' pred cislo po tomto dotazu. Kdyz to ucinite, potom nebude vnitrni radkovy editor uchovan pro pouziti kompilerem. Udelejte to, kdyz si prejete pouzit svuj vlastni editor u kompileru (detaily viz HP4T Instrukce o zmenach). V tomto pripade prekladac a editor (kdyz je uchovan) bude umistnen na konec symbolove tabulky a provadeni bude preneseno na udrzovany editor. UPOZORNENI: Vsude v teto prirucce predstavuje znak '&' nahradu znaku '#' ( 'maltezsky kriz', 'hash', 'double cross' 35 dec., 23 hex., SHIFT '3'). Plati pro vsechny systemy, ktere nepouzivaji kod ASCII. Cisla, pred kterymi tento symbol stoji, jsou v sesnactkove soustave. 0.1 Rozsah teto prirucky ============================= Tento manual neni zamyslen jako ucebnice Pascalu. Pokud jste novackem v pro- gramovani v jazyce Pascal, v bibliografii budete odkazan na vhodne knihy. Tato prirucka je pouze srovnavacim dokumentem, ktery detailne rozvadi zvlast- nosti Hisoft Pascal 4. Kapitola 1 vam udava syntaxi a semantiku ocekavanou kompilerem. Kapitola 2 vam detailne rozvadi ruzne predem definovane identifikatory, ktere jsou u Hisoft Pascal 4 k dispoziciod CONST az po FUNCTION. Kapitola 3 obsahuje informace o ruznych volitelnych moznostech kompilatoru, ktere jsou k dispozici a take o formatu komentaru. Kapitola 4 ukazuje pouziti radkoveho editoru, ktery je integralni soucasti HP4T. Kdyz nechcete pouzivat tento editor, ale chcete pripojit svuj vlastni editor, potom viz HP4T Instrukce o zmenach. Vyse jmenovane kapitoly by si meli vsichni uzivatele velmi dobre prostudovat. Dodatek 1 detailne upresnuje chybova hlaseni kompileru i 'runtimes'. Dodatek 2 obsahuje preddefinovane identifikatory a rezervovana slova. Dodatek 3 udava detaily o vnitrni reprezentaci dat v Hisoft Pascal 4 - je to prospesne pro programatory, kteri chteji pracovat i na urovni strojniho kodu. Dodatek 4 udava nektere priklady programu v jazyce Pascal, pri problemech se psanim programu pro Hisoft Pascal 4 si je prostudujte. HP4TM - 9 - cords' nahore uvedenymi definicemi.Jinymi slovy,uzivatel nerespektoval rozhod- nuti, ze A a B maji reprezentovat jeden typ dat. Mohlo by se to ucinit takto: VAR A,B : ARRAY ['A'..'C'] OF INTEGER; a nyni muze uzivatel volne priclenovat A k B a naopak B k A,protoze byl vytvo- ren pouze jeden TYPE record.I kdyz,povrchne vzato,se tato explicitni definice typu muze zdat ponekud komplikovana, vseobecne to vsak vede k mene castym chy- bam v programu, protoze to vyzaduje lepsi predbezne promysleni ulohy programa- torem. 1. Syntaxe a semantika **************************** Tato kapitola detailne rozpracovava syntaxi a semantiku Hisoft Pascalu 4, a to v odlisnostech implementace od standardni verze Pascalu (viz Pascal User Manual and Report [Jensen,Wirth druhe vydani]). 1.1 Identifikator ====================== +-------+ +-------|pismeno|-------+ | +-------+ | +-------+ v | --------|pismeno|---------------+-----------------------+-------------> +-------+ ^ | | +-------+ | +-------|cislice|-------+ +-------+ Pouze prvnich 10 znaku identifikatoru je vyznamovych. Identifikatory mohou obsahovat velka, nebo mala pismena. Velka pismena nejsou menena na velka,takze identifikatory HELLO, Hello a hello jsou od sebe odlisne. Rezervovana slova a predem definovane identifikatory musi byt zadavany velkymi pismeny! 1.2 Cele cislo bez znamenka ================================ +-----------<-----------+ | | V +-------+ | ----------------+-------|cislice|-------+--------------------> +-------+ HP4TM - 11 - 1.5 Konstanta ================== +-+ |+|--+ +-------------------------+ +-+ | +------>| identifikator konstanty |---->+-------> | v | +-------------------------+ | ---+-----+---+--+ | | | ^ | +-------------------------+ | | +-+ | +------>| neoznacene cislo |---->+ | |-|--+ +-------------------------+ | | +-+ | | +-----------<-----------+ | | +-+ | +------+ | +-+ | +----|'|-----+------>| znak |--------+------>|'|---->+ | +-+ +------+ +-+ | | | | +---+ +-+ +---------+ +-+ | +--->|CHR|-->|(|---->|konstanta|---->|)|------------>+ +---+ +-+ +---------+ +-+ Nestandardni CHR konstrukce je zde proto, aby mohly byt konstanty pouzivany pro ridici znaky. V tom pripade konstanta v zavorkach musi byt typu INTEGER. Priklad: CONST bs=CHR(10); cr=CHR(13); 1.6 Jednoduchy typ ======================= +--------------------+ --------+------>| identifikator typu |------------------+--------> | +--------------------+ ^ | | | +-+ +-------------+ +-+ | +--->|(|--+---->|identifikator|-+------>|)|---->+ | +-+ ^ |_____________| | +-+ | | | +-+ | | | +-------------|,|<----+ | | +-+ | | | | +---------+ +--+ +---------+ | +------>|konstanta|---->|..|--->|konstanta|---->+ +---------+ +--+ +---------+ Skalarne vycislene typy (identifikator, identifikator, .......) nesmeji mit vic nez 256 prvku. HP4TM - 13 - pristup pouzitim znaku '^' za ukazatelovou promennou.Priklady pouziti promenne typu ukazatel viz Dodatek 4. Uzivani ukazatele maji nektera omezeni v Hisoft Pascalu 4. Zde jsou nektera z nich: Ukazatele na typy, ktere nebyly deklarovany nejsou dovoleny. To nebrani kon- strukci sretezenych soupisovych struktur,protoze symbolove definice mohou ob- sahovat ukazatele na sebe same. Napriklad: TYPE item = RECORD value : INTEGER; next : ^item END link = ^item; Ukazatele smerem na ukazatele nejsou pripustne. Ukazatele na ten samy symbol jsou povazovany za ekvivalenty. Napriklad: VAR first : link; current : ^item; Promenne first a current jsou ekvivalentni,to znamena ze se pouziva struktu- ralni ekvivalence a mohou byt jedna ke druhe pricleneny,nebo mohou byt srovna- vany.Preddefinovana konstanta NIL je pripustna a kdyz je priclenena k ukazate- love promenne, potom ukazatelova promenna neobsahuje zadnou adresu. 1.7.3 Recordy ---------------- Implementace RECORDu (zaznamu),strukturovane promenne slozene z pevneho (zvo- leneho) poctu poli, v Hisoft Pascal 4 je shodna jako u standardniho Pascalu, s vyjimkou,ze variabilni cast pole zde neni umoznena.Dva RECORD typy jsou pok- ladany za ekvivalentni pouze tehdy,jestlize jejich deklarace vychazi z jednoho pouziti slova RECORD. WITH muze byt pouzivano pro pristup k ruznym polim uvnitr rekordu v zhuste- nejsi forme. Viz Dodatek 4 na priklad pouziti WITH a RECORD vseobecne. 1.8 Seznam polozek ======================= +-+ +---------------|;|<------------------------------------+ | +-+ | | +-+ | | +-------|,|<------------+ | | | +-+ | | V V +-------------+ | +-+ +---+ | --------+-------+------>|identifikator|-+------>|:|---->|typ|---+-------> | +-------------+ +-+ +---+ | +---------------------->--------------------------------+ HP4TM - 15 - 1.11 Term (clen) ==================== +------+ ---->|faktor|---+------------------------+---+----+-----+-----+---------> +------+ ^ | | | | | | +-+ +-+ +---+ +---+ +---+ | |*| |/| |DIV| |MOD| |AND| | +-+ +-+ +---+ +---+ +---+ | +------+ | | | | | +-------|faktor|<--------+---+----+-----+-----+ +------+ Dolni hranice mnoziny je vzdy 0 a velikost mnoziny je roven maximu zakladniho typu mnoziny. Takto SET OF CHAR (mnozina znaku) vzdy zaujima 32 bytes (je moz- nych 256 elementu - jeden bit pro kazdy element).Podobne je SET OF 0..10 ekvi- valentni SET OF 0..255. 1.12 Jednoduchy vyraz ========================= +-+ +-->|+|-----+ | +-+ | +----+ ----+-----------+------>|clen|--+----------------+-------+-------+------> | +-+ | +----+ ^ | | | +-->|-|-----+ | +-+ +-+ +--+ +-+ | |+| |-| |OR| | +-+ +-+ +--+ | +----+ | | | +--|clen|<-------+<------+<------+ +----+ Tytez poznamky, uvedene v kapitole 1.11 pokud se tyce soustav,se take vztahuji na jednoduche vyrazy. 1.13 Vyrazy =============== +----------------+ --------------->|jednoduchy vyraz|------+-----------------------------> +----------------+ | ^ +----+---+---+----+----+----+<--------+ | | | | | | | | | +-+ +--+ +-+ +-+ +--+ +--+ +--+ | |=| |<>| |<| |>| |<=| |>=| |IN| | +-+ +--+ +-+ +-+ +--+ +--+ +--+ | | | | | | | | +----------------+ | +----+---+---+----+----+----+-------->|jednoduchy vyraz|------+ +----------------+ Kdyz pouzivame IN, potom atributy mnoziny jsou stejneho typu jako typ jedno- ducheho vyrazu s vyjimkou integer argumentu pro ktery jsou atributy omezeny v rozsahu (0..255). Horni syntaxe se vztahuje na srovnavani stringu te same del- ky,ukazatele a vsechny skalarniho typy. Soustavy mohou byt srovnavany pouzitim >=, <=, <>, nebo =, pointery mohou byt porovnavany pouze pouzitim = a <>. HP4TM - 17 - +--------------------+ +-+ --------->|integer bez znamenka|->|:|---+ ^ |____________________| |_| | | +--------------------------------+ | | +---------------------+ +--+ +-----+ +--+-+->|promenna se znamenkem|____>|:=|____|vyraz|-----------> | | +---------------------+ ^ +--+ +-----+ ^ | | +--------------------+ | +-+ | | +--->|identifikator funkce|---+ +----|,|<--+ | | +--------------------+ | |_| ^ | | +-----------------------+ +-+ | +-----+ | +-+ | +---->|identifikator procedury|-+>|(|-+->|vyraz|-+->|)|-->| | +-----------------------+ | +-+ +-----+ +-+ | | +------------------------>| | +-----+ +------+ +---+ | +-------->|BEGIN|------+-->|prikaz|---+---->|END|-------->| | +-----+ ^ +------+ | +---+ | | | +-+ | | | +------|;|<----+ | | +-+ +--------------------->| | +--+ +-----+ +----+ +------+ | +----+ +------+ | +->|IF|->|vyraz|->|THEN|->|prikaz|-^->|ELSE|->|prikaz|--->| | +--+ +-----+ +----+ +------+ +----+ +------+ | | | | +------------->-------------+ | | +----+ +-----+ +--+ | +---------+ +-+ +------+ | +---+ | +-|CASE|-|vyraz|-|OF|++>|konstanta|+>|:|-|prikaz|-+>|END|>+ | +----+ +-----+ +--+v^ +---------+| +-+ +------+ | +---+ | | || +-+ | | | | |+----|,|<----+ +-----<-----+ | | || +-+ +-+ | +----+ +------+ | | |+---------|;|<--+->|ELSE|_|prikaz|->| | | +-+ ^ +----+ +------+ | | +----------------+ | | +-----+ +-----+ +--+ +------+ | +--->|WHILE|--->|vyraz|--->|DO|---->|prikaz|------------->| | +-----+ +-----+ +--+ +------+ | | +------+ +------+ +-----+ +-----+ | +--->|REPEAT|-+->|prikaz|-+--->|UNTIL|------->|vyraz|---->| | +------+ ^ +------+ | +-----+ +-----+ | | | +-+ | +--+ | | +----|;|<---+ +----|TO|----+ | | +-+ | +--+ | | | +---+ +-------------+ +--+ +-----+ ^ +------+ v | +->|FOR|->|identifikator|->|:=|->|vyraz|-+->|DOWNTO|->+ | | +---+ | promenne | +--+ +-----+ +------+ | | | +-------------+ +---------------------------+ | | +-+ | +-----+ +--+ +------+ | | +----|,|<----+ +-->|vyraz|-->|DO|-->|prikaz|-->| | v +-+ ^ +-----+ +--+ +------+ | | +----+ | +--------+ | +--+ +------+ | +->|WITH|-+>|promenna|-+--->|DO|------>|prikaz|---------->| | +----+ +--------+ +--+ +------+ | | +----+ +--------------------+ | +--------->|GOTO|------------>|integer bez znamenka|----->| | +----+ +--------------------+ | +---------------------------------------------------------+ HP4TM - 19 - PROCEDURE a; {vlastni popis procedury a} BEGIN .... b(q); .... END; Vsimnete si, ze parametry a vysledny typ procedury a jsou popisovany s FORWARD a nejsou opakovany v hlavnim popisu procedury. Pripomenme si, ze FORWARD je rezervovane slovo. 1.17 Program =============== +-------+ +-------------+ +-+ +----+ +---+ +-+ ------->|PROGRAM|------>|identifikator|>|;|---->|blok|->|END|-->|.| +-------+ +-------------+ +-+ +----+ +---+ +-+ Protoze nejsou implementovany soubory dat,neexistuji zadne formalni parametry programu. 2. Preddefinovane identifikatory ************************************** 2.1 Konstanty ================== MAXINT Nejvetsi cele cislo, ktere je k dispozici, t.j. 32767. TRUE, FALSE Konstanty typu Boolean. 2.2 Typy ============= INTEGER Viz kapitola 1.3. REAL Viz kapitola 1.3. CHAR uplny rozsireny kod ASCII s 256 prvky. BOOLEAN (TRUE, FALSE). Tento typ je pouzivan v logickych operacich, obsahuje vysledky porovnavani. 2.3 Procedury a funkce =========================== 2.3.1 Vstupni a vystupni procedury ------------------------------------- 2.3.1.1 WRITE Procedura WRITE je pouzivana pro vystup udaju na obrazovku, nebo na tiskarnu. Kdyz je vyraz, ktery ma byt napsan, jednoducheho typu character, potom WRITE (e) vyjadri 8 bitovou hodmotu jako znak e, podle okolnosti na tiskarne, nebo obrazovce. Poznamka: CHR(8) (CTRL H) udava destruktivni zpetny krok na obrazovce CHR(12) (CTRL L) maze obrazovku, nebo udava novou stranku na tiskarne CHR(13) (CTRL M) provadi navrat vozu a posun radku CHR(16) (CTRL P) normalne nasmeruje vystup na tiskarnu,je-li prave pouzivana obrazovka, nebo naopak HP4TM - 21 - 4] e je typu char nebo typu string.Muze byt pouzito budto (e), nebo (e:m) a znak,nebo retezec znaku,bude na vystupu v minimalni siri pole 1 (pro znaky), nebo v delce retezce (pro typ string).Je-li m dostatecne velke,jsou vpredu vkladany mezery. 5] e typu boolean Muze byt pouzito budto (e), nebo (e:m) a na vystupu bude budto TRUE,nebo FALSE v zavislosti na Booleovske hodnote e,s pouzitim minimalni sire vystupniho pole 4, respektive 5. 2.3.1.2 WRITELN WRITELN vystupy jsou ukonceny newline. To je ekvivalentni WRITE (CHR (13)). Vsimnete si, ze je zde zahrnut posuv radku. WRITELN(P1,P2,......Pn); je ekvivalentni: BEGIN WRITE(P1,P2,......Pn);WRITELN END; 2.3.1.3 PAGE Procedura PAGE je ekvivalentni WRITE(CHR(12)); vycisti obrazovku a na tiskar- ne nastavi novou stranky. 2.3.1.4 READ Procedura READ je pouzivana pro vstup dat z klavesnice. Deje se to prostred- nictvim vyrovnavaci pameti obsazene ve zpracovateli (runtimes) - bufer je zpo- catku prazdny (s vyjimkou znaku end of line). Muzeme brat v uvahu,ze jakekoliv pristupy k tomuto bufferu se provadi prostrednictvim textoveho okna nad vyrov- navaci pameti, cimz muzeme vzdy najednou pozorovat jeden znak. Kdyz je toto textove okno umistneno nad znakem end-of-line, potom pred ukoncenim operace cteni bude do vyrovnavaci pameti cten novy radek textu z klavesnice. V prubehu cteni na tomto radku jsou rozpoznavany vsechny ridici kody, detailne popsane v kapitole 0.0. READ(V1,V2,......Vn); je ekvivalentni: BEGIN READ(V1); READ(V2); ......; READ(Vn) END; kde V1, V2, atd. mohou byt typu character, string, integer, nebo real. Prikaz READ(V); ma ruzne ucinky v zavislosti na typu V. Musi se zde brat v uvahu 4 pripady: 1] V je typu character. V tomto pripade READ(V) jednoduse cte znak ze vstupni vyrovnavaci pameti a priclenuje ho k V. Kdyz je textove okno na vyrov- navaci pameti umistneno na znaku radku (CHR(13)), potom funkce EOLN vrati hod- notu TRUE a je cten novy radek textu z klavesnice. Kdyz je nato provedena ope- race cteni, potom bude textove okno umistneno na pocatku noveho radku. Dulezita poznamka: Vsimnete si, ze EOLN je TRUE na pocatku programu. To zna- mena, ze jestlize prvni READ je typu charakter, tak hodnota CHR(13) bude vra- cena a je nasledovana ctenim z klavesnice do noveho radku. Nasledujici cteni typu character vrati prvni znak z noveho radku za predpokladu,ze neni prazdny. Viz take dole proceduru READLN. 2] V je typu string. Retezec znaku muze byt cten pouzitim READ a v tomto pripade bude ctena serie znaku az pocet znaku vymezenych retezcem bude precten, nebo EOLN = TRUE. Kdyz retezec neni zaplnen ctenim, to je konec radku byl do- sazen pred pridelenim celeho retezce, potom konec retezce je zaplnen znaky CHR(0) - to umoznuje programatorovi vyhodnotit delku retezce, ktery byl prec- ten. Poznamka nahore pro 1] plne plati i zde. HP4TM - 23 - 2.3.3.2 ROUND(X) X musi byt typu real, nebo integer a tato funkce vraci 'nejblizsi' cele cislo k X (podle standardnich zaokrouhlovacich pravidel). Priklady: ROUND(-6.5) vraci -6 ROUD(11.7) vraci 12 ROUND(-6.51) vraci -7 ROUND(23.5) vraci 24 2.3.3.3 ENTIER(X) X musi byt typu real nebo integer - ENTIER vraci nejvetsi cele cislo mensi, nebo rovne X pro vsechna X. Priklady: ENTIER(-6.5) vraci -7 ENTIER(11.7) vraci 11 Poznamka: ENTIER neni standardni Pascalovskou funkci, ale je ekvivalentni Basicovske funkci INT. Funkce je uzitecna pri psani rychlych programu pro mnoho matematickych aplikaci. 2.3.3.4 ORD(X) X smi byt skalarniho typu s vyjimkou real. Vracena hodnota je cele cislo, reprezentujici poradi hodnoty X v mnozine definujici typ X. Je-li X typu integer, potom ORD(X)=X. Toho by se normalne melo vyvarovat. Priklady: ORD('a') vraci 97 ORD('@') vraci 64 2.3.3.5 CHR(X) X musi byt typu integer. CHR vraci znak odpovidajici ASCII hodnote X. Priklady: CHR(49) vraci '1' CHR(91) vraci '[' 2.3.4 Aritmeticke funkce --------------------------- Ve vsech funkcich tohoto oddilu musi byt parametr X typu real, nebo integer. 2.3.4.1 ABS(X) Navraci absolutni hodnotu X (napr. ABS(-4.5) vraci 4.5). Vysledek je stejneho typu jako X. 2.3.4.2 SQR(X) Navraci druhou mocninu X. Vysledek je stejneho typu jako X. 2.3.4.3 SQRT(X) Navraci druhou odmocninu X. Vracena hodnota je vzdy typu real. Je-li argument X zaporny, je generovano chybove hlaseni 'Maths Call Error'. 2.3.4.4 FRAC(X) Navraci zlomkovou cast X: FRAC(X) = X - ENTIER(X). Jako u funkce ENTIER je tato funkce uzitecna k napsani mnoha rychlych matematickych rutin.Priklady: FRAC(1.5) vraci 0.5 FRAC(-12.56) vraci 0.44. 2.3.4.5 SIN(X) Navraci sinus X, kde X je v radianech. Vysledek je vzdy typu real. HP4TM - 25 - 2.3.5.5 USER(V) USER je procedura s jednim integer argumentem V. Vola pametovou adresu V. Protoze Hisoft Pascal 4 obsahuje integer cisla ve forme dvojkoveho doplnku (viz Doplnek 3), potom k odkazu na adresy vetsi nez &7FFF (32767) musi byt pouzito zapornych hodnot V. Napriklad &C000 je -16384 a tedy USER(-16384); bude volat pametovou adresu &C000. Pokud se k odkazu na pametovou adresu pouziva konstanta, je vhodnejsi pouzivat hexadecimalni soustavu. Vyvolavana rutina by mela koncit Z80 instrukci RET (&C9) a musi zachovat registr IX. 2.3.5.6 HALT Tato procedura zastavi provadeni programu se zpravou 'Halt at PC=XXXX', kde XXXX je hexadecimalni adresa pameti, na ktere je povel HALT. Spolecne s lis- tingem kompilace muze byt pouzito HALT k trasovani programu. Tak se to obvykle pouzije behem ladeni programu. 2.3.5.7 POKE(X,V) POKE uklada vyraz V do pameti pocitace pocinaje adresou X. X je typu integer a muze byt jakehokoliv druhu mimo SET. Viz odstavec 2.3.5.5 nahore, kde je vysvetleno pouzivani integer cisel k vyjadreni pametove adresy. Priklady: POKE(&6000,'A') umistni &41 na adresu &6000. POKE(-16384,3.6E3) umistni &00 &0B &80 &70 od adresy &C000. 2.3.5.8 TOUT(NAME,START,SIZE) TOUT je procedura, pouzita k ulozeni promennych na pasku. Prvni parametr je typu ARRAY[1..8] OF CHAR a je to jmeno souboru dat, ktery ma byt ulozen. SIZE bytes jsou vypisovany z pameti od adresy START. Oba tyto parametry jsou typu integer. Napriklad k ulozeni promenne V na pasku pod jmenem 'VAR ' uzijte: TOUT('VAR ',ADDR(V),SIZE(V)) Pouzivani aktualnich adres pameti dava uzivateli moznost pruznejsi vsestran- nosti,nez pouze schopnosti ukladat retezce. Napriklad ma-li system zamapovanou obrazovkovou pamet, mohou se primo ukladat plne obrazovky. Viz priklad pouziti TOUT v Dodatku 4. 2.3.5.9 TIN(NAME,START) Tato procedura se pouziva ke cteni promennych a pod. z pasky,ulozenych pomoci TOUT. NAME je typu ARRAY[1..8] OF CHAR a START je typu integer. Na pasce je hledan soubor NAME, ktery je vlozen od pametove adresy START. Pocet bytu k vlozeni je bran z pasky a je ulozen na pasce prostrednictvim TOUT. Napr. k nacteni promenne ulozene v prikladu v odstavci 2.3.5.8 nahore je treba pouzit: TIN('VAR ',ADDR(V)). Protoze zdrojove soubory dat jsou ukladany editorem s pouzitim stejneho formatu jako u TIN a TOUT, TIN se muze pouzit k nacteni textovych souboru do ARRAYs OF CHAR pro dalsi zpracovani. Viz HP4T Pruvodce zmenami. Priklady pouziti procedury TIN viz Dodatek 4. 2.3.5.10 OUT(P,C) Tato procedura se pouziva k primemu pristupu k vystupnimu portu Z80 bez pou- ziti procedury INLINE. Hodnota integer parametru P je vkladana do BC registru, znakovy parametr C je vlozen do reg. A a je vykonana assemblerovska instrukce OUT (C),A. Napriklad: OUT(1,'A') dava na Z80 vystupnim portu 1 znak 'A'. HP4TM - 27 - 3. Komentare a moznosti volby u prekladace ************************************************ 3.1 Komentare ================== Komentar se muze vyskytnout mezi dvema vyhrazenymi slovy,cisly identifikatory nebo specialnimi symboly - viz Dodatek 2. Komentar zacina znakem '{' a nebo dvojici znaku '(*'. Kdyz nasledujicim znakem neni '$',jsou potom vsechny znaky ignorovany az do dalsiho znaku '}' a nebo az do dalsiho znakoveho paru '*)'. Kdyz bylo nalezeno '$', potom prekladac vyhledava serii volitelnych moznosti prekladace (viz nize), po nichz jsou ostatni znaky preskoceny az po '}', nebo '*)'. 3.2 Moznosti volby u prekladace ==================================== Syntaxe pro specifikaci volitelnych moznosti prekladace: +-+ +------>|+|-----+ +-+ +-------+ | +-+ | ------->|$|-----+------>|pismeno|-------+-------------->+-------+------> +-+ ^ +-------+ | +-+ | | | +------>|-|-----+ | | +-+ +-+ | +---------------|,|<----------------------------+ +-+ Jsou k dispozici nasledujici volitelne moznosti: Volba L: Ovlada rizeni listingu programoveho textu a adres object kodu prekladacem. Pri L+, je zadan uplny listing. Pri L-, jsou radky listovany, jen kdyz je nalezena chyba. Implicitne: L+ Volba O: Ridi provadeni kontroly preplneni. Nasobeni a deleni celymi cisly a vsechny aritmeticke operace s realnymi cisly jsou VZDY kontrolovany na preplneni. Pri O+, je kontrola provadena pri scitani a odcitani celych cisel. Pri O-, potom nejsou zhora uvedene kontroly provadeny. Implicitne: O+ Volba C: Zapina, nebo vypina cteni klavesnice behem provadeni object code programu. Je-li C+, potom pri stisknuti CC se provadeni prerusi se zpravou HALT. Viz od- stavec 2.3.5.6. Tato kontrola se provadi na pocatku vsech cyklu, vsech proce- dur a vsech funkci. Toho muze uzivatel vyuzit pri ladeni programu ke zjisteni, ktery cyklus (procedura, funkce, ...) se spravne neukoncuje. Tento proces ne- muzete pouzit, pokud si prejete rychly prubeh ciloveho programu. Je-li zadano C-, potom neni zhora uvedena kontrola provadena. Implicitne: C+ Volba S: Urcuje provadeni zasobnikovych kontrol. Objevi-li se S+, potom na zacatku kazdeho vyvolani procedury nebo funkce je HP4TM - 29 - 4. Integralni editor ************************** 4.1 Uvod do editoru ======================== Editor je soucasti vsech verzi Hisoft Pascal 4T. Je to jednoduchy radkovy editor, fungujici na vsech operacnich systemech se Z80, pri zachovani snadne pouzitelnosti a schopnosti editovat programy rychle a ucinne. Text je v pameti ukladan ve zhustene forme. Je ukladan pocet uvodnich mezer, jeden znak na za- catku radku a vsechna HP4T rezervovana slova jsou symbolicky zkracovana do jednoho znaku. To potom vede k typickemu omezeni rozsahu textu o 25%. Upozorneni: Na vsech mistech v teto kapitole je klavesa DELETE uvadena misto kontrolniho kodu CH, nebot je to prirozenejsi postup. Do editoru se vstoupi automaticky po nahrani HP4T z pasky a objevi se zprava: Copyright Hisoft 1982 All right reserved coz je nasledovano editorovou napovedou '>'. Jako odpoved na tento znak muzete zadat povelovy radek nasledujiciho formatu: C N1,N2,S1,S2 nasledovany RETURN, kde: C je povel, ktery ma byt proveden (viz kapitola 4.2 nize). N1 je cislo v rozsahu 1 - 32767 vcetne. N2 je cislo v rozsahu 1 - 32767 vcetne. S1 je znakovy retezec s maximalni delkou 20. S2 je znakovy retezec s maximalni delkou 20. carka se pouziva k oddeleni dvou ruznych argumentu, (i kdyz je to mozne zmenit - viz povel 'S') a mezery jsou ignorovany s vyjimkou mezer uvnitr retezcu.Zad- ny z argumentu neni nezbytny, i kdyz nektere z povelu (napr. povel 'D'elete) neprobehne, dokud nebude urceno N1 a N2. Editor si pamatuje predchozi cisla a retezce, ktere jste do nej vlozili a pouziva tyto puvodni hodnoty tam, kde je to mozne, pokud vyslovne nevyznacite zvlastni argument uvnitr prikazoveho rad- ku.Hodnoty N1 a N2 jsou puvodne nastaveny na 10 a retezce jsou zpocatku prazd- ne. Kdyz zadate nepripustny prikazovy radek, jako napr. F-1,100,HELLO potom bude tento radek ignorovan a zobrazi se zprava 'Pardon?'. Pak musite znovu napsat spravne radek, tedy zde F1,100,HELLO. Toto chybove hlaseni bude take zobrazeno, pokud delka S2 prekracuje 20; kdyz delka u S1 je vetsi nez 20, potom jsou vsechny prebytecne znaky ignorovany. Povely mohou byt vkladany velkymi, nebo malymi znaky. Kdyz vkladate povelovy radek, mohou byt pouzity vsechny ridici znaky uvedene v kapitole 0.0. Napriklad CX k odstraneni pocatku radku. Nasledujici podkapitola rozvadi podrobne ruzne povely, dosazitelne v editoru. Vsimnete si, ze kdykoliv je argument uzavren symboly '<>', potom zde argument musi byt pritomen, aby tento povel mohl probehnout. POZOR: V implementaci pro ZX Spectrum odpovida klavese RETURN klavesa ENTER! Viz Implementacni poznamky. 4.2 Editorove povely ========================= 4.2.1 Vkladani textu ----------------------- Text muze byt vkladan do textoveho souboru budto napsanim cisla radku, mezera a potom pozadovany text, nebo pomoci povelu 'I'. Vsimnete si, ze kdyz zadate cislo radku nasledovane RETURN, t.j. bez textu, potom existuje-li, bude tento radek vymazan z textu. Kdykoliv je prave text vkladan, potom ridici funkce CX (vymaz radek od zacatku), funkce CI (prejdi na nasledujici pozici tabulatoru), funkce CC (navrat do prikazove smycky) a funkce CP (prepnout tiskarnu) mohou byti pouzity. Klavesa DELETE (nebo BACKSPACE) vyvolaji destruktivni zpetny HP4TM - 31 - Povel: Mn,m Tento povel umoznuje vymazat jakykoliv text z radku m a nahradit jej textem z radku n. Vsimnete si, ze text na radku n je ponechan. Tento povel tedy pro- vadi 'M'ove textoveho radku do dalsi polohy v textovem souboru. Pokud cislo radku n neexistuje, povel se nevykona. Povel: N Pouziti povelu 'N' umoznuje znovu precislovat textovy soubor s cislem prvniho radku n s krokem m. Musi byt zadano n i m; pokud by precislovani vedlo k cislu radku vyssimu nez je 32767, potom zustane zachovano puvodni cislovani radku. Povel: Fn,m,f,s Je prohledavan textovy soubor v rozmezi radku n' k porovnavani sestav 50. Ocekava se 'FORWARD', 'LABEL', 'CONST', 'VAR', 'TYPE', nebo 'BEGIN' 51. Ocekava se hexadecimalni cislice 52. Neni mozne POKE sestavy 53. Array je prilis velike (> 64 K) 54. V definici RECORD se ocekava 'END', nebo ';' 55. Ocekava se identifikator pole HP4TM - 37 - DODATEK 2: Rezervovana slova a preddefinovane identifikatory ****************************************************************** A.2.1 Rezervovana slova ========================== AND ARRAY BEGIN CASE CONST DIV DO DOWNTO ELSE END FORWARD FUNCTION GOTO IF IN LABEL MOD NIL NOT OF OR PACKED PROCEDURE PROGRAM RECORD REPEAT SET THEN TO TYPE UNTIL VAR WHILE WITH A.2.2 Specialni symboly ========================== Nasledujici symboly jsou pouzivany v Hisoft Pascal 4 s vyhrazenym vyznamem: + - * / = <> < > <= >= ( ) [ ] { } (* *) ^ := . , ; : ' .. A.2.3 Preddefinovane identifikatory ====================================== Nasledujici entity mohou byt pouzity v deklaracich v celem programovem bloku a jsou k dispozici v celem programu dokud nejsou opetovne deklarovany progra- matorem v rozsahu vnitrniho bloku. Dalsi informace viz kapitola 2. CONST MAXINT=32767; TYPE BOOLEAN=(FALSE,TRUE); CHAR {Rozsireny soubor znaku ASCII}; INTEGER=-MAXINT..MAXINT; REAL {Podmnozina realnych cisel. Viz kapitola 1.3}; PROCEDURE WRITE;WRITELN;READ;READLN;PAGE;HALT;USER;POKE; INLINE;OUT;NEW;MARK;RELEASE;TIN;TOUT; FUNCTION ABS;SQR;ODD;RANDOM;ORD;SUCC;PRED;INCH;EOLN;PEEK;CHR; SQRT;ENTIER;ROUND;TRUNC;FRAC;SIN;COS;TAN;ARCTAN;EXP; LN;ADDR;SIZE;INP; HP4TM - 39 - 0.0001100 ------------------ 101 | 0.100000000000000 101 _____ 110 101 _____ 1000 101 v tomto okamziku je ___ jiz jidet, ze se zlomek periodicky ____ opakuje. = 0.1B/101B = 0.0001100B ____ 1.1001100B * 2^-4 ____________________ Jak tedy pouzijeme vyse uvedenych vysledku ke znazorneni techto cisel v pocitaci? Nuze, nejprve rezervujeme 4 bytes pro ulozeni kazdeho realneho cisla v nasledujicim formatu: ZNAMENKO NORMALIZOVANA MANTISA EXPONENT DATA 23 22 0 7 0 bit |______________________||_________________________________| H L E D registr znamenko: znamenko mantisy; 1=zaporne, 0=kladne. normalizovana mantisa: mantisa je normalizovana do tvaru 1.xxxxxx s hornim bitem (bit 22) je vzdy 1, s vyjimkou zobrazeni nuly (HL=0, DE=0). exponent: exponent v binarnim doplnkovem tvaru. Takto: 2 ... 0 1000000 00000000 00000000 00000001 (&40,&00,&00,&01) 1 ... 0 1000000 00000000 00000000 00000000 (&40,&00,&00,&00) -12.5 .. 1 1100100 00000000 00000000 00000011 (&E4,&00,&00,&03) 0.1 .. 0 1100110 01100110 01100110 11111100 (&66,&66,&66,&FC) Tedy, mame-li na mameti, ze HL a DE jsou pouzivany k uchovavani realnych cisel,potom bychom meli do registru vkladat nasledovne,abychom reprezentovali kazde shora uvedene cislo: 2 ... LD HL,&4000 LD DE,&0100 1 ... LD HL,&4000 LD DE,&0000 -12.5 ... LD HL,&E400 LD DE,&0300 0.1 ... LD HL,&6666 LD DE,&FC66 Posledni priklad nam ukazuje, proc vypocty s dvojkovymi zlomky mohou byt ne- presne; 0.1 nemuze byt presne reprezentovano jako dvojkovy zlomek, k finitnimu cislu s desetinnymi misty. Vsimnete si dobre, ze realna cisla jsou ukladana do pameti v poradi ED LH. HP4TM - 41 - PARAMETRY A HODNOTY VRACENE FUNKCEMI ------------------------------------ Hodnoty parametru jsou zpracovavany jako s lokalnimi promennymi a jako ty, cim drive je parametr popsan, tim vyssi adresu ma v pameti. Na rozdil od pro- mennych je ale pevne stanovena nejnizsi (nikoliv nejvyssi) adresa jako (IX+2). Napriklad: PROCEDURE TEST(I:REAL;J:INTEGER); potom: J (umistneno prvni) je na adrese IX+2 a IX+3. I je na adrese IX+4, IX+5, IX+6 a IX+7. Promenne parametry jsou zpracovavany presne tak, jako hodnotove parametry, s vyjimkou toho, ze jsou vzdy ukladany jako bytes a tyto 2 bytes obsahuji adresu promenne. Napriklad: PROCEDURE TEST(I:INTEGER;VAR X:REAL); potom odkaz na X je umistnen na adrese IX+2 a IX+3. Zde je adresa, kde je ulozeno X. Hodnota I je ulozena na adrese IX+4 a IX+5. Funkcni hodnoty jsou ukladany nad prvnim parametrem v pameti. Napriklad: FUNCTION TEST(I:INTEGER):REAL; potom I je na adresach IX+2 a IX+3 a mezera je rezervovana pro vracenou funkcni hodnotu na adresach IX+4, IX+5, IX+6 a IX+7. HP4TM - 43 - 10 {Program pro vypis radku souboru v obracenem poradi. 20 Ukazuje pouziti ukazatelu, zaznamu, MARK a RELEASE.} 30 40 PROGRAM Reverseline; 50 60 TYPE elem=RECORD {Tvori strukturu radku vypisu} 70 next: ^elem; 80 ch: CHAR 90 END; 100 link=^elem; 110 120 VAR prev,cur,hep: link; {vsechny ukazatele na 'elem'} 130 140 BEGIN 150 REPEAT {provest nekolikrat} 160 MARK(heap); {priradit vrchol k 'heap'.} 170 prev:=NIL; {neukazuje zatim na zadnou promennou.} 180 WHILE NOT EOLN DO 190 BEGIN 200 NEW(cur); {vytvorit novy dynamicky zaznam} 210 READ(cur^.ch); {a priradit jeho pole jednomu 220 znaku ze souboru.} 230 cur^.next:=prev; {tento ukazatel pole adresuje} 240 prev:=cur {predchozi zaznam.} 250 END; 260 270 {Vypise radek odzadu prohlizenim zaznamu 280 vytvorenych pozpatku.} 290 300 cur:=prev; 310 WHILE cur <> NIL DO {NIL je prvni} 320 BEGIN 330 WRITE(cur^.ch); {Vypsat toto pole, t.j. znak} 340 cur:=cur^.next {Adresovat predchozi pole.} 350 END; 360 WRITELN; 370 RELEASE(heap); {Uvolnit prostor dynamicke promenne.} 380 READLN {Pockat na dalsi radek.} 390 UNTIL FALSE {Pouzijte CC k vystupu z programu} 400 END. 10 {Program ukazuje pouziti rekurze} 20 30 PROGRAM FACTOR; 40 50 {Tento program pocita faktorial cisla, zadaneho z 60 klavesnice 1) pouzitim rekurze a 2) pouzitim iterace.} 70 80 TYPE 90 POSINT = 0..MAXINT; 100 110 VAR 120 METHOD : CHAR; 130 NUMBER : POSINT; 140 150 {Rekurzivni algoritmus.} 160 170 FUNCTION RFAC(N : POSINT) : INTEGER; 180 190 VAR F : POSINT; 200 HP4TM - 45 - DODATEK 5: Pro SPECTRUM ************************ A.5.1 Vkladani HP4 z pasky ============================= Vybalte kazetu z pouzdra a vlozte ji do vaseho kazetoveho magnetofonu stranou A (strana se znackou) vzhuru. Na vasem SPECTRU prejdete do modu klicovych slov a potom zadejte: LOAD "" ENTER (stisknete J a potom dvakrat " a ENTER) Nyni stisknete PLAY na magnetofonu: nejprve bude vlozen HP4S loader, ten bude provadet svoji funkci automaticky a bude pokracovat ve vkladani HP4S code.Kdyz je zjistena chyba na pasce, potom stisknete klavesu SPACE na SPECTRU, zastavte pasku,znovu ji previnte na zacatek, stisknete NEW (na klavese 'A') na SPECTRU a znovu zadejte LOAD "". Pokud se znovu objevi pri vkladani chyba, potom se pokuste o vyregulovani hlasitosti na vasem kazetovem magnetofonu; pokud chyby zustavaji, vrat'te prosim pasku Hisoftu a my vam ji vymenime. Jakmile byl vlozen HP4S code, zacne automaticky pracovat a zobrazi se zprava 'Top of RAM?' a nyni se obrat'te na radu ke kapitole 0.0 Programatorovy prirucky Hisoft Pascal 4T, kde si vyhledejte detaily dalsiho postupu. A.5.2 Implementace na SPECTRUM ================================= ZX SPECTRUM je dosti neobvykly pocitac a pro urcite rozsireni to bere v uvahu i implementace HP4T. Ruzne ridici kody diskutovane v Prirucce programatora jsou na SPECTRU pristupne takto: RETURN pres klavesu 'ENTER'. CC pres CAPS SHIFT a 1. CH DELETE, tj. CAPS SHIFT a 0. CI pres CAPS SHIFT a 8. CP pres CHR(16) v prikazech WRITE nebo WRITELN. CX pres CAPS SHIFT a 5. CS pres CAPS SHIFT a SPACE. System zadavani klicovych slov u ZX SPECTRUM neni pouzit u HP4T (vidime to jako vyhodu), misto toho musi byt cely text vkladan pouzitim normalni alfanu- mericke klavesnice. Pouziti SYMBOL SHIFT a kterekoliv klavesy (mimo I) tedy dostaneme vzdy prislusny znak ASCII a ne klicove slovo, reprezentovane touto klavesou; napriklad SYMBOL SHIFT T da '>' a SYMBOL SHIFT 8 da '('. Nesmite pouzivat jednoduche znaky <=, <> a >=; misto toho musi byt zadavany kombinace symbolu <, > a =. Editor zahajuje cinnost v modu velkych pismen, to muze byt normalne prepinano pouzitim CAPS SHIFT a 2. Mate kontrolu nad docasnymi atributy znakovych pozic na obrazovce pouzitim standardnich ridicich kodu (napr. WRITE(CHR(17),(CHR(4)) zpusobi zeleny 'papir'), ale nemuzete menit trvale atributy. Pokud zde pouzijete tyto ridici kody, je detekovana neplatna sekvence a je potom zobrazena zprava 'System Call error' a zpracovani se abnormalne ukonci. Kdyz budete ukladat z pameti na pasku text,nebo strojovy kod, potom se zprava 'Start tape, then press any key' zobrazi dvakrat a musite take pokazde odpove- det. Neni zapotrebi ukladat loader, protoze je automaticky ukladan vzdy spolu se strojovym programem. Pokud pouzijete povel 'T'ranslate k ulozeni strojoveho programu a runtimes na pasku, potom pro vlozeni a spusteni programu zadejte jednoduse LOAD "" z BASICu. Po vykonani strojoveho programu jej muzete znovu spustit - pokud nedoslo k nejake poruse - zadanim GOTO 7 z BASICu. HP4TM - 47 - PROCEDURE BEEPR (A, B : INTEGER); BEGIN INLINE(&DD,&6E,2,&DD,&66,3, {LD L,(IX+2) : LD H,(IX+3)} &DD,&5E,4,&DD,&56,5, {LD E,(IX+4) : LD D,(IX+5)} &CD,&B5,3,&F3) {CALL &385 : DI} END; {Tato procedura konvertuje zadanou nulovou frekvenci do pomlky. Nenulove hodnoty frekvence a delky jsou aproximovany do hodnot vyzadovanych rutinou v ROM SPECTRA a tato rutina je volana rutinou BEEPR.} PROCEDURE BEEP (Frequency : INTEGER; Lenght : REAL); VAR I : INTEGER; BEGIN IF Frequency=0 THEN FOR I:=1 TO ENTIER(12000*Lenght) DO ELSE BEEPR(ENTIER(Frequency*Lenght), ENTIER(437500/Frequency - 30.125)) FOR I:=1 TO 100 DO {Kratka pomlka mezi notami.} END; Priklad pouziti BEEP: BEEP ( 262, 0.5); BEEP ( 0, 1 ); {Zazni stredni C po 0.5 sec, nasledovane sekundou ticha.} 2.GRAFIKA K dispozici jsou tri graficke procedury: prvni zakresli bod o souradnicich (X,Y), druha a treti slouzi k nakresleni primky z bezne pozice do pozice nove, definovane relativne k bezne, ktera se tim stava beznou pozici. Obe procedury PLOT a LINE, pouzivaji promennou typu BOOLEAN s identifikatorem ON. Ma-li hodnotu TRUE, potom je kterykoliv bod zakreslen bez ohledu na stav elementu v teto pozici; je-li FALSE, potom je jiz znazorneny graficky element zamaskovan, tj. svitici bod zhasne a naopak. Tento efekt odpovida prikazu OVER u SPECTRA. {Procedura odpovidajici BASIC prikazu PLOT. Jednoduse kresli bod X,Y ON nebo OFF v zavislosti na tom, zda je prvni parametr TRUE, nebo FALSE.} PROCEDURE PLOT( ON : BOOLEAN; X, Y : INTEGER); BEGIN IF ON THEN WRITE( CHR(21), CHR(0)) ELSE WRITE( CHR(21), CHR(1)); INLINE(&FD,&21,&3A,&5C, { LD IY, &5C3A } &DD,&46,2,&DD,&4E,4, { LD B,(IX+2) : LD C,(IX+4) } &CD,&E5,&22); {CALL &22E5 ;ROM PLOT rutina} END; {Procedura LINE1 je volana procedurou LINE a slouzi k predani spravnych argumentu pro rutinu DRAW v ROM.} PROCEDURE LINE1(X,Y,SX,SY :INTEGER); BEGIN INLINE(&FD,&21,&3A,&5C, { LD IY,&5C3A } &DD,&56,2,&DD,&5E,4, { LD D,(IX+2) : LD E,(IX+4) } &CD,&BA,&24) {CALL &24BA ;ROM DRAW rutina} END; HP4TM - 49 - DODATEK 6: Implementace na pocitac SORD m.5 ******************************************** Na Sord m.5 existuji dva programy HP4TM. Jeden je urcen do pameti 32kB RAM, druhy do pameti 64kB RAM. Prvni se zavadi do pocitace prikazem TAPE z jake- hokoliv basicu. Druhy se musi zavest loaderem urcenym pro dany modul 64 kB RAM ( 64KBI nebo 64KBF ). Pouzite ridici klavesy: ----------------------- RETURN RETURN je pouzivano k ukonceni radku CTRL/A CC navrat do editoru CTRL/DEL CH vymazani posledniho natypovaneho znaku CTRL/I CI posunuje k nasledujici TAB pozici CTRL/P CP ridi vystup na tiskarnu, je-li k dispozici, nebo kdyz vystup jde na tiskarnu, vraci jej na obrazovku CTRL/X CX maze cely radek, ktery byl napsan