clanky/lec_pro_zxs

LECROM PRO ZX SPECTRUM

Mezi uživateli ZX Spectra jsou rozšířeny různé verze EPROMek, které odstraňují známé chyby původní ROMky a většinou "umějí" ještě něco navíc. Mezi nejrozšířenější patří bezesporu ISO ROM, TURBO ROM a LECROM. Ne každý však s novou EPROMkou získá i příslušný návod, takže mnohdy ani nemůže v plné míře využít všech možnosti své xxxR0Mky. Ve snaze tuto mezeru zaplnit, jsme před časem uveřejnili popis úprav v TURBO ROM, nyní přinášíme podrobný popis LECROM přímo od jejího autora, Jiřího Lamače. Do některého z příštích čísel chystáme popis ISO ROM.

Věříme, že tímto článkem vyřešíme řadu problémů především těm, kteří LECROM v2.3 již získali, (rychlost šíření je neuvěřitelná), přitom však mají k dispozici nanejvýš návod ke starší verzi, který se bez vědomí autora (i když s jeho dodatečným souhlasem), dostal do sborníku ostravské pobočky ČSVTS.

Ze všech nám známých xxxROMek (a není jich málo), nejvýrazněji zvyšuje užitnou hodnotu ZX Spectra právě LECROM. Pokud byste po prostudování následujícího návodu měli o ní zájem, napište nám. V případě většího zájmu bychom se pokusili zajistit dodávku naprogramovaných EPROMek, nebo alespoň distribuci programu na kazetách.

LECROM

Hlavním popudem vzniku nové ROMky bylo více než 1K volného prostoru ve staré ROMce. Kromě toho, že byly opraveny její chyby, LECROM umožňuje psát basicové příkazy jednotlivými písmeny, používat zabudovaný monitor a mít k dispozici řadu dalších užitečných funkcí.

Vice jak 1K volné paměti nemůže nikoho nechat dlouho klidného. Je to relativně dost, současně ale i málo (těžko se sem vejde assembler Z80). S každým bajtem paměti musí být naloženo co nejšetrněji. Při psaní nových rutin jsem si nejméně třicetkrát uvědomil známou pravdu - každý program jde zkrátit aspoň o jeden bajt. Vždycky když se někde našlo třeba šest volných bajtů, hned jsem uvažoval, jakou novou funkci by bylo vhodné přidat. I přes dost stísněné poměry se přece jen leccos podařilo. Nakonec - posuďte sami.

Opravy chyb původní ROMky

Stará ROMka Spectra měla v sobě několik méně významných chyb, které v LECROM již nejsou. Především je opravena klasická chyba v rutině pro zpracování nemaskovatelného přerušení.

Při dotazu "scroll?" nebo hlášení "Start tape..." a čekání na stisk tlačítka se dříve po stisku EXTEND nebo GRAPH zobrazil poslední editovaný řádek v editační zóně.

Další dvě opravené chyby se týkají rutiny tisku na obrazovku. Rutina odmítala řídící kód BS (CHRS 8), byla-li aktuální pozice AT 1,0; stejný kód byl nesprávně zpracován při pozici AT 0,0. Kód CHRS 9 rutina vůbec ignorovala.

S novou ROMkou můžeme bez jakéhokoli nebezpečí používat příkaz CLOSE. V původní ROMce vedl pokus o uzavření již zavřené linky vyššího čísla ke zhroucení Spectra.

Časová prodleva mezi hlavičkou a programovým blokem u příkazu SAVE byla zkrácena asi na 100 ms.

Od verze 2.3 se již počítá s připojením ZX Interfacu 1 i přes to, že tento interface volá některé rutiny, které LECROM již nemá.

Nová inicializace

Po zapnutí nebo resetu Spectra s novou ROMkou proběhne jiná inicializace systémových proměnných. Nastaví se INK 7, PAPER 0, BRIGHT 1 a BORDER 0. Je zapnuto pípání klávesnice a jsou zkráceny časové konstanty REPDEL a REPPER pro zrychlení editace.

Ihned nápadný je inovovaný test paměti RAM. Na rozdíl od původního je schopen odhalit chybu ve všech bitech paměti. Kontroluje zápis nul i jedniček

Počínaje verzí 2.3 je zaveden i ROMtest, který je vhodné provádět při použití pamětí EPROM (teoreticky mohou něco "zapomenout").

Každý si jistě všimne i nového generátoru znaků (původní nebyl příliš estetický). Při jeho vytváření jsem však vycházel z původního.

Každý si jistě všimne i nového generátoru znaků (původní nebyl příliš estetický). Při jeho vy?tváření jsem však vycházel z původního.

Po počáteční inicializaci je zobrazeno úvodní MENU, z něhož se vybírá stiskem tlačítka 1, 2 nebo 3:

1 Basic	    provede start Basic editoru
2 Monitor   spustí malý monitor paměti
3 Boot	    vygeneruje příkaz RUN pro načtení programu "run" z prvního microdrivu.
  

1. Basic

První nápadnou změnou při vstupu do Basicu je kurzor, který je kurzorem v pravém slova smyslu. U starších verzí LECROM je to známé blikající "L".

Je pozměněna funkce CAPS SHIFT. V módu CAPS LOCK se písmeno napsané se stisknutým tlačítkem CAPS SHIFT zobrazí jako malé (tak, jak to dělají jiné rozumné počítače).

Nový Basic má vylepšenou editaci. V dlouhých řádcích lze pohybovat kurzorem nejen vodorovně, ale i svisle. Tím se editace podstatně zrychlí. Při přemístění kurzoru na začátek editované řádky (před její číslo) mají klávesy pro pohyb kurzoru nahoru a dolů stejnou funkci jako původně, tj. pohybují horním kurzorem.

Hlavní předností upraveného editoru je možnost zápisu klíčových slov po jednotlivých písmenech. Původní klávesnice s předem nadefinovanými celými příkazy nevyhovovala mnoha uživatelům, zvyklým pracovat s většími počítači. S LECROM lze psát malými i velkými písmeny, s mezerami mezi slovy i bez nich. Nutnou a postačující podmínkou pro správnou tokenizaci je, že před ani za klíčovým slovem nesmí být nějaké jiné písmeno. Po odeslání příkazu proběhne konverze textu na obvyklé tokeny Basicu. Někdo sice může namítnout, že je rychlejší příkaz PRINT zapsat pouhým stisknutím klávesy... Ale v nové úpravě odpadá zapeklité přepínání módů kurzoru, LECROM navíc umožňuje používat místo celých příkazů jen jejich zkratky. Stačí napsat začátek příkazu a ukončit jej tečkou. Přitom je lhostejné, na které pozici textu příkazu tečku napíšeme (jak dalece jej zkrátíme).

Kompletní seznam nejkratších možných zápisů všech basicových příkazů:

<=       <.    <>      nemá  >=         >.
ABS      ab.   ACS     ac.   AND        an.
ASN      as.   AT      nemá  ATN        nemá
ATTR     a.    BEEP    be.   BIN        b. 
BORDER   bo.   BRIGHT  br.   CAT        ca.
CHRS     ch.   CIRCLE  Ci.   CLEAR      cle.
CLOSE #  cl.   CLS     nemá  CODE       c. 
CONTINUE con.  COPY    cop.  COS        nemá
DATA     da.   DEF. FN d.    DIM        di.
DRAW     dr.   ERASE   er.   EXP        e.
FLASH    fl.   FN      f.    FOR        nemá
FORMAT   fo.   GO SUB  gos.  GO TO      g.
IF       nemá  IN      nemá  INK        nemá
INKEY$   i.    INPUT   inp.  INT        nemá
INVERSE  inv.  LEN     l.    LET        nemá
LINE     li.   LIST    lis.  LLIST      ll.
LN       nemá  LOAD    lo.   LPRINT     lp.
MERGE    me.   MOVE    m.    NEW        ne.
NEXT     nex.  NOT     n.    OPEN #     op.
OR       o.    OUT     ou.   OVER       ov.
PAPER    pa.   PAUSE   pau.  PEEK       pe.
PI       P.    PLOT    pl.   POINT      po.
POKE     pok.  PRINT   pr.   RANDOMIZE  ra.
READ     re.   REM     nemá  RESTORE    res.
RETURN   ret.  RND     r.    RUN        ru.
SAVE     sa.   SCREEN$ s.    SGN        sg.
SIN      Si.   SQR     sq.   STEP       ste. 
STOP     sto.  STRS    st.   TAB        t.
TAN      nemá  THEN    th.   TO         nemá 
USR      u.    VAL     nemá  VAL$       v.
VERIFY   ve.

Tak např. řádek:

10 BORDER 7: PAPER RND*8: CLS : PRINT PEEK 23609: DRAW 10,10  

stačí napsat jako:

10 bo.7:pa.r.*8:cls:pr.pe.23609:dr.10,10  

Komu tento způsob zápisu nebude vyhovovat, může nově zavedeným příkazem FORMAT "k" přepnout Spectrum do původního módu s obvyklým zápisem příkazu jedinou klávesou.

Když v módu vypisování jednotlivými znaky vyvoláte řádek do editační zóny, automaticky se provede jeho detokenizace (příkazy jsou zpětně rozšířeny na znaky).

Pokud nebyly použity nové příkazy, je program zapsaný v tomto módu pině kompatibilní s programem zapsaným v původní ROMce. Až na jednu výjimku, kterou je použití funkce VAL. Např.:

10 pr.val"sin(pi/2)"  

bude zpracováno jako:

  10 PRINT VAL "sin(pi/2"

To znamená, že funkce vepsané v uvozovkách jsou považovány za text - takto zapsaný příkaz nebude v originální ROMce správně zpracován. Zde je třeba použít FORMAT "k" pro přepnutí na přímé příkazy, zadat příslušné funkce a tímtéž příkazem se vrátit zpět do režimu vypisování po znacích.

Nové příkazy Basicu

Původní ROMka umí do programu zařadit řádky obsahující příkazy typu:

MOVE string,string 
ERASE string
CAT (bez parametru) 
FORMAT string  

Ale snaha o jejich provedení je provázena chybovým hlášením "Invalid stream". Tyto příkazy jsou nově využity takto:

MOVE "r m,n","r k" - kopíruje blok paměti od adresy "m" o délce "n" na adresu "k". Příkaz velmi rychle přemisťuje zadané bloky, můžeme jím také zaplňovat část paměti nějakou hodnotou. Na místě "m", "n", "k" mohou být libovolné výrazy. Vyhodnocení provádí funkce VAL. Velmi výhodný je tento příkaz u Spectra s 80K RAM. Místo "r" lze užít písmeno "d" - pak se pracuje s dolními 32K paměti ve druhé stránce. Např. MOVE "r 16384,6912","d 0" uschová obrazovku Spectra do jakéhosi "RAMdisku". Celá paměť Spectra je pak volná a obrazovku lze pomocí MOVE "d 0,6912","r 16384" kdykoli získat zpět.

Od verze 2.3, která je schopna pracovat s pamětí až 528K, je syntaxe MOVE pozměněna takto:

MOVE "saa,11","dbb" - kopíruje blok z paměti "s", počínaje adresou "aa", dlouhý "11", na místo "d", od adresy "bb". Specifikace paměti pomocí znaků "s" a "d" je následující:

r - RAM (běžná pracovní paměť)
a,b,c,d,e,f,g,hůi,j,k,l,m,n,o - jednotlivé stránky RAMdisku. Máme-li jen 80K RAM, má samozřejmě smysl mluvit jen o stránce "a", u Spectra 272K lze pracovat s "a" až "g".

Příklady:
MOVE "r16384,6912","r4e4" - zkopíruje VideoRAM na adresu 40000.
MOVE "r4e4,"2e3","c0" - zkopíruje pracovní paměť od adresy 40000 v délce 2000 bajtů do RAMdisku "c" na adresu 0.

Při používání příkazu MOVE je však třeba dát pozor na několik věcí. Především - není dobré si přepsat systémové proměnné nebo zásobník. Pro přenos bloku nelze pracovat s posledními 35 bajty RAMky, protože sem se před vlastním přesunem umísťuje přesunovací rutinka (původní obsah této oblasti zůstane ovšem zachován - před přesunem se uklidí do oblasti WORKSPACE a po provedení přesunu se vrátí zpět).

ERASE "I' - zruší vše, čím se projevuje ZX Interface 1. Smaže jeho kanály, vyhodí buffery pro microdrive a network a vypustí příslušné systémové proměnné. Linky 4 až 15 budou uzavřeny. Basicový program pak začíná na adrese 23755 jako u samotného Spectra. Příkazem RUN nahrajeme program "run" z prvního microdrivu. Pak budou fungovat i basicové programy se strojovým kódem umístěným v programových řádcích.

CAT - spustí vestavěný monitor (ovládání monitoru viz dále).

FORMAI' 'k" - slouží k přepínání funkce klávesnice. Po provedení příkazu naskočí původní kurzor "K" - klíčová slova zapisujeme stisknutím jednoho tlačítka. Opětným provedením tohoto příkazu se funkce klávesnice přepne do zápisu jednotlivými znaky.

Od verze 2.3 jsou zavedeny ještě další příkazy:

FORMAT "s" - vypíná a zapíná dotaz "scroll?".
COPY n - zkopíruje n bloků z kazety na kazetu.

Pro kopírování je využit pouze pracovní prostor Basicu, takže se neztratí programy ve strojovém kódu. Není-li pod adresou RAMTOP dostatek místa, lze příkazem CLEAR prostor zvětšit.

2. Monitor

Velmi praktický a u Spectra dosud postrádaný je zabudovaný monitor. LECROM takový jednoduchý monitor obsahuje. Můžeme jej spustit třemi způsoby. *Ze základního menu (po zapnutí počítače) nebo z Basicu příkazem CAT nebo zastavením běhu programu současným stiskem tlačítek SYMBOL SHIFT, SPACE a B. Posledně jmenovaný způsob pracuje i při přerušení a lze jím zastavit i programy ve strojovém kódu (při povoleném přerušení). Musejí ovšem zůstat zachovány důležité systémové proměnné, které monitor potřebuje. Ovládáni monitoru bylo ve verzi 2.3 značně pozměněno, proto popíši každé samostatně.

Ovládání starší verze monitoru

Monitor se po spuštění ohlásí hvězdičkou a kurzorem "C". Povely monitoru se skládají z pís?mene a hexadekadického čísla, pokud jej ten který povel vyžaduje. K dispozici je celkem sedm povel:

Madr - výpis paměti od zadané adresy. Každý řádek výpisu obsahuje adresu prvního zobrazovaného bajtu. Následuje šest hexadekadických hodnot (obsah šesti adres), na konci řádku je šest ASCII znaků, odpovídajících předcházejícím číslům. Znaky větší než 128 se vypisují jako znaky o 128 menší, řídící kódy (menší než 32) se zobrazují jako tečka. Na konci každého řádku se výpis zastaví a čeká na stisk tlačítka. SPACE výpis ukončí, jiná libovolná klávesa spustí tisk dalšího řádku.

Sadr - změna obsahu paměti od zadané adresy. Monitor napíše aktuální adresu a její obsah. BA zadáme nový obsah bajtu, nebo stiskem ENTERu původní obsah paměti ponecháme beze změny. Činnost se ukončí stiskem tlačítka SPACE, následovaného ENTERem.

B - opuštění monitoru a skok do Basicu. Samozřejmě by neměl být poškozen obsah důležitých systémových proměnných.

Gadr - spuštění programu ve strojovém kódu od zadané adresy. Program je volán instrukcí CALL, takže instrukcí RET se můžeme vrátit zpět do monitoru. Před spuštěním programu jsou registry AF, BC, DE, HL, IX a SP napiněny svými standardními hodnotami, uloženými v oblasti MEM (viz dále). Po návratu z volaného programu zůstane obsah uvedených registrů zachován jakožto nové standardní hodnoty. Možnost číst a měnit obsah registrů CPU se hodí při laděni programů.

R - čtení a změna obsahu registrů CPU. Změna se pochopitelně netýká registrů přímo, pracuje se se standardními hodnotami. Monitor vypíše název registru a jeho původní obsah. Zadáním čísla se původní hodnota přepíše, prosté odeslání odřádkuje beze změny.

Dčíslo - převod hexadekadického čísla na dekadické.

Hčíslo - převod dekadického čísla na hexadekadické. Pozor! Vzhledem ke stísněnému prostoru v paměti používají povely D a H stejnou pracovní oblast jako povel R. Proto se může stát, že se provedením D nebo H změní standardní obsah registrů CPU.

Ovládání monitoru v2.3

Monitor se hlásí výpisem, v jehož horní části je obsah registrů (kurzor ukazuje na na aktuální registr). Pod obsahem registrů je vždy vlevo adresa, za ní hexadekadický výpis od dané adresy a v pravé části jsou odpovídající ASCII kódy.

Příkazy monitoru se zadávají přes klasickou editovací řádku. To znamená, že lze v piném rozsahu využít editovacích schopností ROMky. EDIT zruší celý řádek.

Vlastní příkazy:

Q - Quit - skok do BASICu
Sxxxx - Search - vyhledávání slova xxxxH Sxx - Search - vyhledávání bajtu xxH
Gxxxx - Gosub - CALL adresy xxxxH s návratem do monitoru (před provedením tohoto příkazu monitor nastaví obsah registrů dle jejich zobrazených hodnot)
L - List - rychlé listování dopředu
R - Reverse - couvnutí o bajt dozadu Mxxxx - Modify - změna nastavení kurzoru do paměti
H - Hex - modify s dekadickou hodnotou adresy

Další možností je změna obsahu paměti prostým vložením požadované hodnoty bajtu do adresy, na kterou právě ukazuje kurzor (potvrzuje se stiskem tlačítka ENTER). V případě, že do editovací řádky není nic vloženo, může ENTER sloužit i k posunu o jednu adresu dopředu. Nastavení kurzoru u registrů se provádí tlačítky Caps Shift + 6. Tato funkce je totožná se stiskem tlačítka ENTER (vložením hodnoty a stiskem Caps Shift + 6 se změní obsah daného registru).

Závěr

V LECROM je proti původní ROMce řada úprav a změn (jak doufám, k lepšímu). Aby byla zajištěna co největší kompatibilita s programy, které volají podprogramy z ROMky, zůstaly všechny rutiny původní ROMky na svých obvyklých adresách. Nové rutiny byly různě propleteny do všech volných skulinek. Nebyla to práce jednoduchá, takže nelze vyloučit, že přese všechnu pečlivost se mohla vloudit drobná chybička.

Jiří Lamač


Stránka byla už zobrazena: 315 ×
  Aktualizováno: 3. 5. 2018, 05:53



     psp-ikona.gif, 2 kB    Text to HTML converter and formatter  builder_ikonka.gif, 3 kB
           
  Best Old Games      kabelmanie.gif, 2 kB  root_ico.gif, 2 kB  český diskmag pro počítače ZX Spectrum a kompatibilní
synapse.gif, 4 kB   TuningPC.cz - Vše pro tuning a casemodding vašeho PC        pspad88x31.gif  delphix.gif, 1 kB
sgatlantis_88x31_3.jpg, 4 kB  atlan.gif, 22 kB  arkon.jpg, 12 kB  ico_abeceda.gif, 888B  blog.idnes.cz   
           
       
 
  torry_logo.gif, 4 kB  

Stránka načtena za 0.00235 sekund.