****************** *** BS rom 118 *** ****************** Jedná sa o klasickú romku zo ZX Spectra 48k (+) na ktorej boli spáchané tieto úpravy: - pribudlo zopár nových príkazov - prehľad ďalej - rozšírená syntax niektorých príkazov - prehľad ďalej - asi štvornásobne rýchle chytanie úvodného tónu z kazeťáku - programový kurzor zmenený zo znaku ">" na znak "*" - zvýšená frekvencia chybového beepu - spracovanie hexadecimálnych čísel v rozsahu 0-65535 - možnosť písania basicových riadkov v rozsahu 0-16383 (napr. editácia nultého riadku) - rýchlejší autorepeat na začiatku po inicializácií - pri pokuse o odoslanie chybného príkazu alebo riadku skočí kurzor na miesto chyby (lepšie ako v IZO-ROM) - možnosť vypisovať listing programu bez riadiacich kódov (nereaguje na farby, TAB a AT - vhodné na zašité programy) - ošetrenie NMI pomocou rozšíriteľného menu - prehľad ďalej - opravené niektoré chyby - prehľad ďalej - dva nové znaky v znakovom súbore - malý podčiarnik a štvorček - programový kurzor "*" sa vypisuje iba pri autoliste - po editačnej zóne sa dá chodiť hore a dolu - reset a new mažú pameť pomocou PUSH - je to super rýchle - autolist možno v každom okamihu zastaviť klávesou "Q" Prehľad chýb, ktoré boli opravené --------------------------------- - Chybné ošetenie NMI rutiny - vyriešilo to NMI menu. Ale príslušný bajt zostal nezmenený - to keby ho náhodou nejaký program moc usilovne začal skúmať a testovať. - PRINT AT 0,0;CHR$ 8; - posunulo kurzor na pozíciu AT -1,31 - v tejto romke sa poloha kurzora nemení. - Ak sa malo vypísať chybové hlásenie a je zakázané prerušenie, tak to zmrzlo. V tejto romke sa to nemôže stať. - Normálna romka sama seba na adresách 0..4 prepisuje. Táto romka nie, preto môže bežať aj bez zakázaného zápisu v ramke. - Ak je posledný riadok v programe N, vy odošlete prázdny riadok N+1 (akože ho zmažete) a potom stlačíte EDIT, editne sa vám N-tý riadok aj s programovým kurzorom. V tejto romke sa programový kurzor objavuje iba autolistingu a preto sa nikdy nemôže objaviť v editnutom riadku. Po resete alebo NEWe sa romka prihlási vypísaním informácie, koľko je voľného miesta (basic a premenné basicu majú vtedy samozrejme nulovú dľžku) a vypíše sa normálne hlásenie OK. 48k a 128k reset a ani NEW netestujú pamäť - predpokladá sa, že celá 48kB alebo 128k pamät je funkčná. Po NMI (skoku na adresu #66) začne sršať border, čo je znakom že ste v NMI menu. Ak by bol zásobník SP na adresách #00-#4000, zmení sa na #5800. Ovládacie klávesy: B - teplý štart basicu. Inicializujú sa všeky systémové premenné okrem PROG, VARS a ELINE - teda basicový program a basicoé premenné zostanú zachované. N - to isté ako CLEAR #5fff: NEW - teda pamäť nad #6000 ostane neporušená. R - zmaže celú pamäť 48kB - je to klasický 48k reset. E - zmaže celú pamäť 128k - (extend reset 128k) I - resetuje tieto periférie: AY, FDC, DMA a mechaniku disku. S - save "" screen$ na aktuálne zariadenie (MG alebo disk) T - ako USR 15522 čiže aktuálne zariadenie bude páska. D - ako USR 15524 čiže aktuálne zariadenie bude disk. Q - návrat speť do prerušeného programu. Pozor: návrat bude korektný iba vtedy, ak SP nebol zmenený na #5800. Pri návrate sú všetky registre (okrem dolných 7 bitov registra R) obnovené na pôvodné hodnoty. M - skok do debuggera v MRS (musí byť v pamäti!). Všetky registre sa nastavia ako boli v okamihu prerušenia programu pomocou MNI - čiže možno prerušený program ďalej krokovať (PC a SP sa korektne nastavia iba ak sa SP nezmenilo na #5800!). 0..9 - prepnutie ram-banky na 128k. Ak by sa SP nachádzal v oblasti horných 16 kB, bude zmenený na #5800. Je to vlastne OUT (#7ffd),číslo - čiže pomocou 8 a 9 si možno pozrieť obsah druhej videostránky. U - užívateľská funkcia - na adrese #3901 je JP XXX, kde si môže užívateľ napokovať adresu svojej aplikácie a po stlačení klávesy "U" sa táto aplikácia spustí. Návrat je normálne pomocou RET. Z - užívateľská funkcia - na adrese #3904 je DW xxx, a ďalej presne tak isto ako "U". Tieto dve funkcie v samotnej romke nerobia nič, ale sú vyhradené pre ďalšie rozšírenia (napr. rezidentný monitor). Rozšírenie syntaxe existujúcich príkazov ---------------------------------------- (Položky v zátvorkách < > sú nepovinné.) CONTINUE .. ak je výraz nenulový tak sa spustí stroják od tejto adresy. Pozor ! Pri návrate musí byť na rozdiel od USR register IY nastavený na #5c3a, ale zato HL' nemusí mať hodnotu #2758. CLS .. ak výraz je nenulový tak sa ním nastavia všetky farby (pr. CLS 7 = BORDER 0: PAPER 0:INK 7:BRIGHT 0:FLASH 0). GOTO, GOSUB, PAUSE, BORDER .. číselný parameter pri týchto príkazoch je nepovinný - nezadaný sa chápe ako nula. zoznam položiek .. Za predpokladu, že zoznam položiek nezačína čislicou, čiarkou, bodkočiarku a apostrofom možete pokojne vynechať príkaz PRINT. Totiž ak sa pri behu programu nájde niečo, čo nie je žiadny príkaz, skočí sa do rutinky na príkaz PRINT. POKE add,byte .. normálne pôvodné poke POKE add;word .. dvojbajtové poke (nižší bajt sa uklada nižšie) POKE add,reťazec .. uložene daného reťazca do pamäti. Prvý znak sa uloží na adresu add, druhý na adresu add+1 ... atď. V princípe nezáleží na tom, či pri ukladaní reťazca v tomto príkaze napíšete čarku alebo bodkočiarku, ale z dôvodu možného rozšírenia v budúcnosti sa odporúča používať výhradne iba čiarku. VAL$ .. ak je výraz číselného typu, tak výsledkom tejto funkcie je štvorznakový reťazec hexadecimálnych číslic - ináč povedané prevod DEC -> HEX (pr. VAL$ 33023 = "80ff"). VAL .. ak je výraz číselného typu, tak výsledkom tejto funkcie je dvojbajtové číslo uvožené na tejto adrese - ináč povedané dvojbajtový PEEK. %,& .. prevod HEX -> DEC podobne ako je BIN prevod BIN -> DEC. Ináč povedané ak chcete ako číslo zapísať hexadecimálnu konštantu, musí začínať znakom "%" alebo "&". Znak "#" nebol použitý preto, lebo ten sa používa na nastavenie kanála v príkazoch PRINT A INPUT (pr. %80ff = 33023). Nové príkazy a ich syntax ------------------------- , .. (čiarka) editne príslušný basicový riadok. Ak výraz nie je uvedený alebo nadobúda nulovú hodnotu, edituje sa riadok s najnižším poradovým číslom. ' .. (apostrof) prepína ram-banky na 128k ako OUT (#7ffd),výraz. Výraz musí byť v intervale 0 až 15. Pozor! Pri prepínaní musí byť RAMTOP menší ako #c000 (ináč ako 0-9 v NMI menu).  .. obnoví všetky systémové premenné okrem PROG, VARS a ELINE. (Ako "B" v NMI menu.) [C v krúžku] ^ .. veľký 128k reset - maže celú pamäť 128k. (Ako "E" v NMI menu.) [šípka hore] ? .. vypíše informáciu o dĺžke programu, dĺžke premenných a veľkosť voľnej pamäte pre basic. * .. header - z pásky číta hlavičky a vypisuje o nich toto: typ súboru : meno súboru : adresa : dľžka _ .. to isté ako USR 00102 - skok do NMI menu. # .. to isté ako USR 54885 - skok do MRS (musí byť v pamäti!). Jedna nová systémová premenná ----------------------------- Keďže NMI rutinka vždy zavolá NMI menu, nepotrebuje už vektor na adrese 23728. Preto tri bity na 23728 sú takto využité: bit 0=0:čísla basicových riadkov sa vypisujú ako štvormiestne bit 0=1:čísla basicových riadkov sa vypisujú ako päťmiestne bit 1=0:pri autoliste sa vypisujú riadiace kódy normálne bit 1=1:pri autoliste sa vypisujú riadiace kódy podľa bitu 2 bit 2=0:pri autoliste sa vóbec nevypisujú riadiace kôdy bit 2=1:pri autoliste sa vypisujú riadiace kódy ako "?" Po resete alebo newe sa tu zapíše nula. Päťmiestne čísla riadkov majú význam vtedy, ak používate riadky v rozsahu 10000 až 16383. Tento bit nijako neovplyvňuje beh programu s takýmito riadkami, len mení formát listingu. Pri editovaní riadku sa jeho číslo vypíše vždy ako päťmiestne. ******************************