HISOFT COLT integer compiler v. 1.0 1987 Adámek =================================== Přehled nových příkazů Basic a ovládání compileru. -------------------------------------------------- Pozn. : autor tohoto přehledu nikdy neviděl firemní manuál, takže může být neúplný - vznikl metodou "zkoušek a omylů". Příkazy jsou dvojího druhu: 1) Programové nebo přímé příkazové řádky uvozené notací *fx podle následujícího přehledu. 2) Přímé příkazy speciální manipulací klávesnice - stisknout space, poté ještě příkazovou klávesu a pak teprve pustit space. Pokud je kŠd příkazové klávesy platný, vykoná se příslušná akce; příkazová klávesa se musí stisknout v poměrně krátkém intervalu po space, jinak je přijat znak space v původním významu. V dalším přehledu jsou tyto příkazy uvozeny příslušným písmenem klávesy. V popisu příkazů jsou úmyslně ponechány pravděpodobné původní mnemoniky v angličtině, aby se lépe pamatovaly. *fx d n,m delete Basic řádky od n do m včetně. *fx f píše Free Space = xxx , t.j. volné místo mezi Basic a Ramtop *fx g n on error GO TO n , jdi na řádek n při chybě *fx h HEX - dec konverze, čeká na zadání hex a píše dec *fx i hh,mm,ss Init time - přednastavení hodin; bez argumentů skočí do interaktivního nastavování manuálně. i manuální nastavení hodin *fx l LINE - namísto času se displejuje číslo vykonávaného řádku a příkazu (TRACE). l dtto jako přímý příkaz. *fx o Omit Time - zruš zobrazování hodin. o dtto *fx p start přeloženého programu. Lze též příkazem RANDOMIZE USR Ramtop+1, jak se píše po překladu. Pozn. Ramtop lze pomocí CLEAR změnit kdykoli před překladem, nejen při zavádění programu jak je nabízeno - přeložený kód se umisťuje nad něj a tak lze po prvním zkušebním programu posunout uumístění tak, aby byl výsledný kód pro SAVE kratší. p start naposledy přeloženého programu (Enter po naplnění edit line) r poslední odeslaný příkaz znovu do edit line. *fx s STOP displej času - vnitřně ale hodiny běží dále, je to tedy "LAP time" s dtto *fx t rozběh hodin po "s" a zapnutí po "o". t dtto *fx z ZERO to time - nuování hodin. z dtto k SAVE na pásku přeložený kód i s runtimes. Znovu zavedený je schopen funkce bez compileru; start viz příkaz "p". Předem je nutno nastavit Ramtop na hodnotu při překladu (nebo nižší) x Break programu za všech okolností - je to interrupt, takže přeruší i běh strojového kódu. K tomu je potřeba mít zapnutý IM 2 - v nezávisle nahraném kódu se zapne pomocí RANDOMIZE USR 55020, čímž se také spouští hodiny a odezva na přímé příkazy. *fx w n vypsání adresy začátku Basic řádky n (právě rezidentní, nikoliv přeložené) *fx STOP n ukončení programu chybovým hlášením čísla n - viz manuál Spectra. Pro n=0 je to tudíž "OK" konec. *fx DATA addr,nn ekvivalentní příkazu DOUBLE POKE na adresu n. *fx FN line,col,hight,width vše v char pixel - definice okna (window) pro následující příkazy. *fx SCREEN$ d,grpixel,mŠd ROLL resp. SCROLL window směrem d=5..8 (t.j. šipky na gumové klávesnici) o grpixel. je-li m=0, dělá se SCROLL, 1..SCROLL s vyčerněním uvolňovaného místa, 2..ROLL, 255..ROLL s inverzí. *fx LINE d,grpixel,line,mode vše jako minulý příkaz, ale s řádkou line v šířce platného okna (i když leží mimo okno). Pozn.: svislé směry nefungují správně nebo to nebylo záměrem autora. *fx ATTR d Scroll atributů (jen barev) směrem d v okně. *fx CODE n Píše HEX hodnoty n (reciproká k "h" funkci). *fx LEN píše adresu konce Basic programu. *fx PEEK n píše DPEEK adresy n. *fx BIN n píše n binárně. *fx barva n , kde barva může být INK,PAPER,BRIGHT,FLASH,INVERSE. Změní okamžitě (ale nikoliv permanentně) příslušné atributy v okně. 1 až 9 uživatelské macro. Z příkazu 1 REM příkaz | příkaz ^ ... vybere statement podle čísla a podle jeho delimiteru jej buď jen umístí do edit line (delimiter "|") nebo ihned odešle, jako by byl zadán z klávesnice (platí pro delimiter "^"). Příkazem mezi delimitery může být i řada Basic statementů oddělených dvojtečkami. 100 CONTINUE program je překládán až po příkaz CONTINUE. Zbytek Basic programu je pro překlad ignorován - dovoluje kombinovat přeložený i interpretovaný program při běhu. RND funkce RND produkuje v přeloženém programu INTEGER čísla v rozsahu 0..32767 SPACE držená během chodu programu zpomaluje chod pro možnost detailního sledování průběhu činnosti (i strojového kódu). Stiskneme-li navíc ještě další klávesu, chod se zcela zastaví až do uvolnění kláves. Příkazy pro manipulaci se SPRITy. --------------------------------- *fx FORMAT sprite,x,y,xdim,ydim,defadr,setup - definice tvaru sprite. sprite : číslo sprite 1..16 x,y : počáteční pozice levého horního rohu [gp] xdim,ydim: rozměry sprite [gp] defadr : adresa kde je (má být) uložem obraz sprite setup : číselná hodnota 1 na tomto místě znamená žádost o editaci tvaru sprite. Rozměry sprite mohou být v rozsahu 1..255, smysl dává jen rozměr nepřesahující v některém směru stínítko. Na adrese defadr je sprite uložen po TV řádcích, počínaje nejhořejší řádkou. Každý řádek je definován celistvým počtem bajtů, nepoužité bity posledního bajtu řádky musí být nulové. Při editaci se sprite zobrazí v osminásobném zvětšení na stínítku a lze jej měnit interaktivně následujícími tlačítky : 1 zapiš barvu inkoustu (piš) 3 celé okno na barvu papíru 4 celé okno na barvu inkoustu 5-8 posuny ve směru odpovídajících kurzorů 9 zruš poslední změny (undo), zobrazí se stav, jaký byl při posledním stisku CS 0 zapiš barvu papíru (smaž) CS potvrď okamžitý stav jako trvalý (OK) současně se sprite běhěm držení zobrazuje ve skutečné velikosti a počáteční pozici. ENTER konec definice, sprite se zobrazí. Editovat lze jen sprity do rozměrů 32x22. *fx MOVE sp,x,y - přemístění sprite sp do polohy x,y. Stará poloha se smaže. *fx ERASE sp - smazání sprite sp. Pro sp=0 je to speciální případ, prohlášení všech sprite za nezobrazené. Bez ohledu na skutečnost se podle toho počítač chová a tedy např. před následujícím MOVE nejdříve poslední pozici znovu nakreslí, přestože tam již je - výsledkem je trvalý obrázek v této pozici (kopie sprite). *fx RESTORE sp - zobrazení sprite sp v okamžité pozici. Mechanizmus tohoto a obou předchozích příkazů funguje správně jen není-li přerušen chod programu pomocí BREAK. To, zda je sprite vidět nebo je skryt je vyznačeno vnitřním stavem COLTu. Pokud je chod přerušen a stínítko se změní, dochází k nesrovnalostem - maže se neexistující poslední obrázek a protože se maže opětnou inverzí, funguje zdánlivě zcela obráceně. *fx VERIFY sp - ověření interakce spritu sp s jinými sprity. Po této instrukci je na adrese 54983 číslo sprite, se kterým se zkoumaný překrývá (i částečně) nebo 0 když k interakci nedochází. ?????? další možné nezjištěné příkazy. Upozornění : proměnné v přeloženém programu nemají žádnou souvislost s proměnnými v interpretované části. Přenos se pravděpodobně může dělat jen pomocí PEEK a POKE adres, které jsou vypsány na konci překladu. Pokud někdo objeví nějaký skrytý mechanizmus pohodlnějšího přenosu či další příkazy nechť doplní tento přehled (a své jméno v záhlaví pokud se nebojí následné laviny dotazů) a "pustí" dál mezi zájemce. Při všeobecně platných zákonech o šíření programů geometrickou řadou se zajisté brzy dostane i k autoru tohoto přehledu.