sobota 3. června 2000

Mistrum ROM

autoři: Milan Pražan, Jaromír Mynařík

Tato varianta programového vybavení Mistrum vznikla po zkušenostech s některými variantami základního programového vybavení počítače ZX Spectrum, kterými se majitelé počítačů snaží zdokonalit komfort obsluhy počítačů a vylepšit tak stávající nedostatky ZX Spectrum. Nutno podotknout, že tyto úpravy v převážné většině aplikací, zejména týkajících se tvůrčich programátorské práce, nenarušují tuto činnost, ale naopak ji mnohdy ulehčují. Jinak tomu bývá při využívání počíače pouze k zábavě, tj.k hrám, kdy jsou uživatelské programy často chráněny tvůrci proti pořizování neoprávněných kopií.

Jednou z forem této ochrany je i kontrola originálnosti původního programového vybavení ZX Spectrum. Je tím částečně znemožňován přístup "levnými" prostředky do těchto programů. Nicméně existují různé způsoby proniknutí i do těchto programů. ale tato problematika není náplní tohoto popisu. Jde pouze o upozornění konstruktérů Mistrum na tuto okolnost, aby ji nebyli případně zaskočeni.

Jednou z modifikací základního programového vybavení Spectra je programové vybavení Mistrum, které se opírá o některé osvědčené výhody oproti ZX Spectrum. Počet změn v paměti EPROM je přibližně 2 500 bytů.

Převážná část původního programového vybavení ZX Spectrum zůstala zachována z důvodu programové kompatibility. Ke změnám v programu byla využita všechna volná místa v paměti, zejména nevyužitý paměťový prostor na konci paměti.

Standardní operační systém ZX Spectrum obsahuje několik chyb a také nevyužívá celé kapacity paměti ROM (např. úsek od 386EH do 3CFFH).

Mezi nejčastěji uváděné chyby patří chybné ošetření nemaskovaného přerušení (NMI), nejednoznačnost při vyhodnocení některých matematických úkonů a další chyby. Dále v počítači není nejvhodnějším způsobem vyřešena editace programů v BASIC. Chyby, které se v operačním systému vyskytují, obvykle nepůsobí nepřekonatelné potíže; je nutné s nima počítat a přizpůsobit se jim. Jiná situace však nastává, je-li zapotřebí využívat NMI, neboť tuto chybu nelze programově obejít ani opravit. Částečně i z těchto důvodů byla vytvořena nová verze operačního systému dále označovaná jako "Mistrum", která odstraňuje některé chyby a současně s dalšími úpravami umožňuje snáze ukládat a editovat programy v BASIC, včetně dalších výhod. Úpravy samozřejmě respektují programovou kompatibilitu s původním operačním systémem Spectrum.

Vlastní úpravy spočívají v následujících změnách: Po zapnutí počítače (popř. po stisku tlačítka Reset) je patrná změna ve vzhledu úvodního hlášení na obrazovce, které má tvar "(C) '88 Sinclair - CS MISTRUM" a rovněž zobrazí hlášení o velikosti volné paměti RAM v bytech ve tvaru "RAM=41523". K tomuto úvodnímu hlášení je možno se kdykoli během výpočtů či psaní programů vrátit stisknutím tlačítka Reset. Velikost volné paměti je vždy nově aktualizována. Navíc tlačítko Reset má oproti standardní verzi obrovskou výhodu v tom, že nezpůsobuje vymazání paměti RAM, ale umožňuje zastavit běh programu a předá řízení do hlavní prováděcí smyčky. Výhodu této úpravy ocení jistě každý, neboť zhroucený popř. "zacyklený" program lze snadno opravit či pozastavit, aniž by byl zničen.

Další významnou změnou oproti ZX Spectrum je nový znakový generátor včetně nejběžnějších znaků české abecedy, uložených v oblasti uživatelské grafiky (UDG). Další změnou je výpis všech hlášení v češtině, což ocení začátečníci a zejména děti.

Oproti standardní verzi je částečně pozměněna funkce magnetopáskových programů. Po zadání příkazu SAVE se nezobrazuje původní text "Start tape, then press any key", ale nahrávání začne ihned po stisku ukončovací klávesy Enter. Počítač pouze zobrazí zprávu o typu ukládaného souboru včetně hlášení že je prováděn příkaz SAVE. U ostatních magnetopáskových příkazů např. LOAD, MERGE, VERIFY je zobrazován použitý typ příkazu včetně údajů o typu souboru, jeho délce, počáteční adrese a jménu. Všechny tyto údaje jsou vypisovány z úvodní hlavičky souboru a umožňují snazší orientaci v programech, zejména v neznámých.

Na druhé straně však tyto informace mohou mít negativní vliv při nahrávání některých programů, zejména her. Nežádoucímu výpisu nadbytečných informací na obrazovky je možné zabránit použitím příkazu POKE 23739,111.

Další změnou je obsluha tlačítka NMI, kterého u standardní verze nelze využívat. Zde je obsluha NMI realizována klasickým způsobem, kdy jsou do zásobníku uschovány obsahy všech registrů včetně alternativních. Jako poslední je načtena adresa programu ukončení NMI a rovněž uložena na vrchol zásobníku. Adresa obslužné rutiny NMI (výkonné) musí být uložena v systémovvé proměnné na adresách 23728 a 23729 (5CB0H a 5CB1H). Po ukončení programu obsluhy NMI je vyzvednuta adresa ukončení NMI ze zásobníku a přes tuto část programu je obnoven původní obsah všech registrů a návrat do přerušeného programu.

Velmi podstatných změn doznal editor a kontrola syntaxe řádků BASIC. Změny se týkají především možnosti pohybu kurzorem v "basicovském" řádku (v editační oblasti) všemi směry, tedy i nahoru a dolů. Tato funkce byla umožněna rozšířením původního editoru o podprogramy pohybu kurzoru nahoru a dolů, umístěné v původně nevyužité části paměti ROM. Změna v kontrole syntaxe "basicovského" řádku způsobí, že je-li nalezena chyba, kurzor je ze svého původního místa přesunut a ukazuje chybu. Ve standardním systému na chybu ukazoval blikající otazník a jedná-li se o dlouhý řádek, je oprava značně zdlouhavá.

Dále byl operační systém rozšířen o nové příkazy, které zvyšují komfort obsluhy. Příkaz je možné používat jen v prováděcím režimu, nelze je tudíž používat v programech! K vyvolání se používá vždy znak (popř. s parametry) ukončený Enter.

Rozšiřující příkazy jsou:
! - programový Reset,
# n - editace řádku n,
% - pokračování automatického číslování po přerušení,
@ - přečíslování "basicovských" řádků,
& - výpis proměnných a polí.

Programového resetu se využívá k nastavení definovaného počátečního stavu a vynulování paměti RAM.

Příkazem # n lze přímo editovat "basicový" řádek s číslem n. Funkce tohoto programu spočívá v nalezení adresy "basicového" řádku n a skokem do editoru. Tím se přesune řádek číslo n do editační oblasti a lze s ním pracovat obdobným způsobem, jako při funkci EDIT.

Velmi výhodné jsou funkce $ a % zejména při psaní dlouhých programů v BASIC. Tato funkce umožňuje automaticky číslovat řádky s počáteční hodnotou 10 a krokem 10.

Inicializace je prováděna příkazem $, který nastaví pracovní proměnné na 10, 10. Tyto pracovní proměnné jsou uloženy v oblasti PRINTER BUFFER na adresách 5B06H - počáteční číslo řádku; 5B08H - délka kroku.

Příkaz % pracuje obdobným způsobem až na to, že neinicializuje pracovní proměnné (teplý start), ale pouze jich využívá ke stejné funkci. Pracovní proměnné je pochopitelně možné přepsat příkazem POKE podle vlastního uvážení a příkazem % využívat nastavených hodnot pro další číslování řádků. Je však nutno si uvědomit, že při použití tiskárny budou nastavené hodnoty zničeny, neboť po výpisu řádku na tiskárnu je oblast PRINTER BUFFER nulována. Bez nové inicializace těchto proměnných by použití příkazu % vedlo k číslování řádku 0 s krokem 0, ale vzhledem k tomu, že nelze přímo ukládat řádek 0, zapsané příkazy nebudou nikam uloženy!

Čísla řádků nejsou kontrolována programem, ale editorem a jsou přijata jen tehdy, leží-li v intervalu 1 až 9999. Ukončit automatické číslování řádků lze několika způsoby:

1. Vymazáním nově zobrazeného čísla řádku použitím tlačítka Delete (Caps Shift + 0) a dvojím stiskem Enter.
2. Při výskytu chyby v právě pořizovaném řádku (po jejím opravení a Enter).
3. Stiskem znaku apostrof (Symbol Shift + 7) a Enter

Další funkcí rozšiřující možnosti tohoto systému je příkaz &. Tento příkaz vypisuje označení všech číselných a řetězcových proměnných použitých v programu. Rovněž jsou vypisována označení číselných a řetězcových polí včetně jednotlivých dimenzí. Posledním vypisovaným parametrem je proměnná cyklu FOR - TO - NEXT. Tato užitečná funkce pracuje ovšem pouze tehdy, pokud byly "basicovské" proměnné již vytvořeny, tj. program byl spuštěn příkazem RUN. Do té doby proměnné ještě neexistují!

Příkazem @ se poze přečíslovávají řádky programu v BASIC. Tento příkaz přečísluje pouze čísla řádků, tedy nikoli odskoky a vyvolání (GO TO, GO SUB)! Přečíslování je nastaveno na počáteční hodnotu 10 s krokem 10.

V případě nutnosti vymazání "basicovských" řádků od čísla x do čísla y je možné použít další program implementovaný v této verzi vyvoláním příkazu na adrese 15 500. Např. při požadavku zrušení řádků č. 30 až 250 je možno zadat PRINT USR 15500,30,250 Enter. Tím se zruší uvedené řádky.

Obdobným způsobem je možno vyvolat zaváděcí program ZAVAD-ZX, který rekonfiguruje programové vybavení Mistrum na standardní verzi Spectrum (pouze u počítačů Mistrum)! Rekonfiguraci lze vyvolat příkazem PRINT USR 15414 Enter.

Všechna uvedená rozšíření mohou částečně přispět k většímu pohodlí při tvorbě programů a jistě si najdou své zastánce. Vlastnosti všech uvedených funkcí byly značnou měrou omezeny kapacitními možnostmi volného paměťového prostoru v paměti EPROM.

pondělí 27. března 2000

Keypad - numerická klávesnice pro Spectrum

autor: Zbyněk Vanžura

Keypad Co to vlastně je a existuje to vůbec? Tak to je otázka, kterou jsem si položil, když jsem poprvé četl návod k ZX Spectru +2 - vůbec nic se tam o něm nedozvíte.
Jedná se vlastně o numerickou klávesnici, která je připojena ke Spectru pomocí dvou datových vodičů (bit 1 - out a bit 5 - in) ve 14. datovém registru zvukového čipu AY 3-8912 (zápis nebo čtení tohoto registru se provádí nejprve zápisem registru na port $FFFD (65533) a poté již standardním čtením, nebo zápisem portu $BFFD (49149)), a slouží k jednodušší editaci basicu ve 128 módu a v kalkulátoru. Použitý port je po doplnění nepoužitých bitů 0 a 4 vlastně druhým sériovým portem u počítačů ZX Spectrum 128, +2.
Společost Amstrad po převzetí firmy Sinclair již toto zařízení nepodporovala a tudíž u počítačů +3, +2A a +2B již keypad nefunguje (z ROM byli odstraněny rutiny pro jeho obsluhu), ale naopak je možné uvolněný port používat k sériové komunikaci i za pomoci basicových příkazů. Ovšem i v těchto počítačích zůstali funkce, které zjednodušují editaci 128 basicu a částečně i kalkulátoru, bohužel jsou na standardní klávesnici tak nešikovně rozmístěny, že jsou takřka nepoužitelné.
Přehled funkcí keypadu a jejich vyvolání na standardní klávesnici
Funkce
Kombinace kláves
Kód
Skok na konec programu
ExtMode+T
$A5
Skok na začátek programu
ExtMode+N
$A6
Skok na konec řádku BASIC
ExtMode+M
$A7
Skok na začátek řádku BASIC
ExtMode+SymShift+2
$A8
Skok o 10 řádků dopředu
SymShift+I
$AC
Skok o 10 řádků zpět
ExtMode+P
$AD
Kurzor po slovech vpřed
ExtMode+SymShift+J
$AE
Kurzor po slovech vzad
ExtMode+I
$AF
Vymaže řádku BASIC od kurzoru do konce
ExtMode+J
$B0
Vymaže řádku BASIC od začátku do kurzoru
ExtMode+K
$B1
Vymaže slovo vpravo od kuzoru
ExtMode+W
$B2
Vymaže slovo vlevo od kuzoru
ExtMode+E
$B3
Vymaže znak vlevo od kuzoru
Delete
$0C
Vymaže znak pod kuzorem
ExtMode+SymShift+K
$AA
Přepne do dvouřádkového editoru
ExtMode+SymShift+8
$A9
S vyjímkou kódů $A5, $A6 a $A9 fungují tyto funkce i v kalkulátoru.
Rozložení kláves na keypadu
delete left
/
cursor up
*
delete right
(
TOGGLE
)
cursor left
7
cursor down
8
cursor right
9
CMND
-
del word left
4
del word right
5
page up
6
page down
+
del eol left
1
del eol right
2
top of text
3
fire, =
ENTER
shift, fire
0
bot of text
.
fire, =
ENTER
Rutiny keypadu v ROM
Na adrese $0118 (280) v editor ROM (128 ROM) je umístěna rutina KPSCAN pro obsluhu keypadu. Ovšem jedna rutina pro obsluhu keypadu se dostala i do standardní ROM, a to na adresu $3B01 (15105) - co však má za úkol, to již netuším.
KPSCAN - 0118h (280)
Podprogram sloužící k obsluze přídavné klávesnice (keypad).

Vstupní parametry:
žádné

Výstupní stav:
ROW01, ROW23 a ROW 45 obsahují okamžitý stav keypadu
v pořádku:
   Příznak NZ
   E - kód klávesy (%10000000 - když není stištěna, jinak %0kkkkkkk)
chyba:
   Příznak Z
   není připojen keypad nabo je stištěno více kláves (s vyjímkou 0/Shift)

Tabulka vracených kódů kláves (v registru E)
Klávesa
Samotná klávesa
Klávesa se Shiftem
0 / Shift
$6C

1
$5F
$71
2
$5E
$70
3
$5D
$6F
4
$6B
$7D
5
$6A
$7C
6
$69
$7B
7
$67
$79
8
$66
$78
9
$65
$77
.
$5B
$6D
+
$68
$7A
-
$64
$76
*
$62
$74
/
$63
$75
(
$61
$73
)
$60
$72
Enter
$5C
$6E

středa 16. února 2000

LEC ROM

autor: Zeljko Juric

Toto je odlišná ROM jejíž zdroj neznám, ale seznámím vás s jejími základní rysy, jež jsem odhalil za použití disasembleru.

Startovní menu
Po startu, se objeví menu, s následujícími volbami:
  • basic - vstup do BASICu
  • monitor - vstup do monitoru (viz níže)
  • boot - načtení a start programu 'run' z microdrive

Detokenizovaná klávesnice
Tato ROM obsahuje detokenizovaný klávesnicový vstup (místo klíčových slov píše samotná písmenka). Rutina tokenizeru je naprogramována dobře:
  • klíčové slovo může být psané jak malými, tak velkými písmeny
  • mezera mezi GO a TO v příkazu GO TO (nebo GO SUB, DEF FN atd.) není nezbytná
  • mezera není nezbytná ani po příkazu (takže PRINT1 je přijatelný), je nutné ovšem vyloučit stav, kdy argument začíná písmenem (např. PRINTA je nepřijatelný). Jestliže dáváte přednost tokenizovaným klávesám, můžete detokenizovaný vstup klávesnice vypnout použitím basicového příkazu: FORMAT "k". Stejný příkaz tokenizer opět zapne. Toto je řízeno přes bit 7 v FLAGS2 (adresa 23658).

Rozšířený editor
Během úpravy dlouhé řádky, je možné pohybovat kurzorem nahoru a dolů.

80K podpora
Tato ROM má rozšířen BASICový příkaz (MOVE) pro podporu Spectra rozšířeného na 80K (viz níže). Nevím, kdo je výrobcem podporovaného rozšíření, ale zdá se že to není většinou používané 80K rozšíření, ve kterém je stránkováno horních 32K RAM. Totiž, podle dissasemblování ROM se zdá, že v tomto rozšíření je stránkováno spodních 32K (adresa 0-32767) použitím bitu 7 na portu 253, s následujícím významem:
b0=0 : standardní uspořádání (0-16383 ROM, 16384-32767 standardní RAM)
b0=1 : 0-32767 rozšířená 32K RAM
Jestliže chce někdo změnit používaný port, a chce podporu pro standardní 80K stránkování, mohu mu poskytnout nezbytnou informaci přes e-mail.

Rozšířené příkazy BASICu
Tato ROM má 4 nové BASICové příkazy (přesněji, stávající příkazy jsou rozšířeny o další funkci):
CAT
CAT bez parametrů vstoupí do monitoru, jinak pracuje jako obyčejně.
FORMAT
FORMAT "k" zapne nebo vypne tokenizovanou klávesnici; ostatní parametry příkazu FORMAT pracují jako obyčejně.
ERASE
ERASE "i" vymaže dodatečné systémové proměnné Interface 1, rozšířené kanály atd. bez odstranění BASICového programu z paměti; ostatní parametry příkazu ERASE pracují jako obyčejně.
MOVE
Toto je rozšířený příkaz, s následující syntaxí:
MOVE "{zdrojový_kód}{zdrojová_adresa},{délka}","{cílový_kód}{cílová_adresa}"
Ten přesune {délka} bytů ze {zdrojové_adresy} na {cílovou_adresu}. {Zdrojový_kód} a {cílový_kód} může být "r" s významem standard ROM/RAM a "d" s významem rozšířená 32K RAM. Zkuste například (na emulátoru): MOVE "r0,6144","r16384"
Parametry jsou povoleny jen mezi uvozovkami. Jiné parametry pro příkaz MOVE pracují jako obvykle. Tato syntaxe je podivná (parametry jako součást řetězce), ale zřejmě chce autor uchovat původní syntaxi příkazu MOVE {řetězec},{řetězec}.

Monitor
Monitor má následující příkazy (všechny parametry až na příkaz H jsou v hexadecimálních číslech):


B
Teplý návrat do BASICu (jestliže je možný)
D {hex}
Zobrazí vložené hexadecimální číslo v desítkovém zápisu
G {adresa}
Spustí podprogram na adrese G (RET se vrátí do monitoru).
H {dec}
Zobrazí vložené desítkové číslo v hexadecimálním zápisu
M {adresa}
Hexa a ASCII výpis od dané adresy (mezera pro návrat).
R
Prohlížení a/nebo změna registrů AF, BC, DE, HL, IX a SP.
S {adresa}
Plnění paměti od dané adresy použitím hexa editoru (enter před mezerou ukončí hexa editor).

Nová rutina přerušení
Standardní rutina přerušení je změněna, současný stisk SYMBOL SHIFT, SPACE a B provede vstup do monitoru (nefunguje, když je přerušení zakázáno, nebo když se používá mód IM2 bez volání RST 56). Také NMI chyba je opravena (NMI je přesměrován přes NMIADD jestliže <>0).

Ostatní změny
  • Změněny startovní parametry (bílé na černé obrazovce, klávesnicové cvaknutí, rychlost opakovaného stisku klávesy).
  • Nové obrazovkové písmo.
  • Opravena CHR$ 8 a CHR$ 9 chyba.
  • Opravena WAIT_KEY chyba během zobrazení zprávy"scroll?", a tak dále.
  • Opravena chyba CLOSE (chyba při CLOSE #4 bez Interface 1 jestliže proud 4 není otevřen).
  • Kratší prodleva mezi hlavičkou a blokem dat během ukládání.

Soubor ROM: lecrom.zip

neděle 30. ledna 2000

Tools 40/80

autoři: Jiří Třasák a Sweet Factor

Program se nahraje zadáním příkazu 'RUN'. Ovládání Kempstonem připojeným k disketové jednotce umožníme tak, že program 'run' nahrajeme na 'MERGE' a odmažeme 'REM' na řádku 90. Program uložíme zpět na disketu s Line 90. Od verze 2.0 (Tools 80) vyeditujeme řádek 90 a opravíme OUT 153,0 na OUT 153,16. A uložíme zpět na disketu s Line 90. Od verze 3.1 není tento OUT použit (každý si nastaví před nahráním programu)

Čelní panel
V čelním panelu jsou zobrazeny tyto informace: jméno diskety, volné místo na této disketě, ve dvou širokých oknech jsou jména souborů, v dolním okně jsou zobrazeny údaje o souboru na němž právě stojí kurzor.

Údaje v čelním panelu můžeme ovlivnit stiskem 'S'. Objeví se menu s funkcemi:
Justify/Zarovnej - přípony souborů jsou zarovnány přesně pod sebou
Runables/Spustitelné - zobrazí se pouze soubory typu Basic nebo Snap
Sort files/Třiď soubory - jména souborů jsou seřazeny podle abecedy
Bold font/Tučné písmo - texty v Tools budou psány silnějším písmem
Actualise/Aktualisuj - změny prováděné v Tools se budou ukládat na disketu
Erased/Vymazané - v adresáři se vypíší i smazané soubory

Každá z těchto funkcí se stiskem Enter zapne (zjasní) nebo vypne (ztmavne).

U Actualise je tomu ve všech verzích naopak. Návrat z menu stiskem Space.

Ovládání
Potvrzení se provádí stiskem ENTER nebo pal na Kempstonu. Po položkách adresáře se pohybujeme kurzory nebo Kempstonem.

CS+1 - opuštění inputů (např. při změně jména atd.)
SPACE - opuštění některých menu
CS+SPACE - opuštění editací
CS+K - zapnutí nebo vypnutí ovládání Kempstonem.

Připojitelné mechaniky
Od verze 2.0 (Tools 80) můžeme používat dvě mechaniky. Při dvou mechanikách se v levém okně vypisují informace z mechaniky A a v pravém okně informace o mechanice B. Stiskem Space si zvolíme aktuální mechaniku, v jejímž okně bude kurzor. Při prvním stisku Space se načte adresář diskety v druhé mechanice proto nezapomeňte tam disk včas vložit.

Od verze 2.1 se navíc zobrazuje v horní polovině oken písmeno mechaniky (A nebo B) a při přepínání mechanik se tato písmena zjasní nebo ztmaví.

CS+Z - odpojení nebo připojení druhé mechaniky s možností kopírovat pouze na jedné. Tuto funkci můžeme použít při připojení mechanik 3,5 a 5,25. Pracovní prostor se zvětší z 18 944 bajtů na 26 112 bajtů.

Od verze 3.11 je tento pracovní prostor zvětšen o paměť 128-ičky (pokud je k dispozici).

Operace s disketou
N - načtení katalogu nové diskety
CS+F - formátování diskety. Pokud nechcete mít problémy s disketami odpovězte dvakrát stiskem ENTER a dvakrát stiskem klávesy "Y".
SS+F - rychlé formátování (pouze TOOLS 128). Verze 3.21 si disketu načte a zformátuje, verze 3.22 si disketu kontroluje. Je třeba před vlastní operací disketu pojmenovat. Rychlé formátování se dá použít na diskety již zformátované pod M-DOSem.

Informace o disketě
I - zapnutí informací o disketě
CS+I - zapnutí a vypnutí trvalého zobrazení informací

Format - počet stop na jedné straně diskety a počet sektorů ve stopě
Blocks - počet sektorů dobrých, volných a špatných na disku
Capacity - kapacita na kterou byl disk zformátován
Files - počet souborů na disketě
Selected - počet označených souborů a jejich celková délka

Při jedné mechanice se info zobrazuje vpravo, při dvou mechanikách je info vždy v protilehlém okně.

Mapa diskety
M - mapa rozložení souborů na disketě. Informace jsou zobrazeny barvami:

fialová - oblast obsazená adresářem diskety
zelená - prázdná místa na disketě
bleděmodrá - obsazeno uloženými soubory
červená - špatné sektory
žlutá - soubor na který v menu ukazuje kurzor

Od verze 2.0:
modrý border - první strana diskety
černý border - druhá strana diskety

Přejmenování diskety
V - přejmenování diskety

Editování diskety / souboru
CS+E - editace diskety
E - editace souboru

šipka dolů nebo nahoru - kurzor se přesune o jednu k vyšší nebo nižší adrese
šipka vlevo nebo vpravo - kurzor se posune o 16 bytes k vyšší nebo nižší adrese
CS+1 - zapnutí nebo vypnutí editace. Červený kurzor se změní na zelený a můžeme zapisovat písmena, číslo se zadá po stisku ENTER.
CS+2 - absolutní nebo relativní adresování editovaného souboru. Při editaci diskety se nepoužívá.
CS+3 - dekadický nebo hexadecimální výpis čísel.
CS+4 - určení adresy od které začneme s editací. (relativní - od nuly, absolutní - od skutečné adresy na níž by soubor začínal).
CS+SPACE - ukončení editace. POZOR všechny provedené změny se uloží na disketu.

Pro oba způsoby editace platí od verze 2.0 tyto změny:

* vypisují se informace o absolutním čísle editovaného sektoru na disketě, o čísle stopy a čísle sektoru na stopě
* po povolení zápisu čísel stiskněte ENTER a můžete vkládat čísla tak dlouho, dokud nestisknete CS+1

Individuální operace
R - přejmenování souboru na kterém stojíme kurzorem
SS+S - od verze 2.1 bylo zrušeno automatické setřídění souborů po provedeném přejmenování souboru. Touto funkcí si automatické setřídění můžete zapnout nebo opět vypnout.
A - nastavení atributů souboru. Stiskem ENTER u nabídky devíti položek menu, tento typ nastavíme nebo zrušíme. Změny se po stisku SPACE uloží na disketu, jestliže je položka Aktualisace zapnuta.
SS+U - obnovení smazaného souboru. Zapneme funkci Erased a nastavíme se kurzorem na soubor, který chceme obnovit (místo typu souboru je otazník) a stiskneme A. Změníme typ souboru z Unknown na správný (basic, code , snap) a stiskneme SS+U. Pokud se objeví hlášení File exists, soubor již nepůjde obnovit.
W - zobrazí obrázek ze Snapů i z basic částí komprimovaných programů. Obrázek se zobrazí a můžeme: stiskem S obrázek uložit na disketu nebo stiskem T obrázek uložit na kazetu. Od verze 2.1 se pakovaný obrázek hledá i uvnitř souborů typu Bytes.
B - změna startovací adresy u basic programu nebo počáteční adresy byte souboru.
SS+R - soubor na kterém stojí kurzor a je to basic nebo snap se spustí. Od verze 2.0 (Tools 80) dojde před nahráním zvoleného programu k úplnému vymazání paměti.

Od verze 3.1:
CS+R - nahraje a spustí soubor RUN (pokud je na disketě).
CS+H - softreset. Resetuje mechaniky a načte disketu. Velice vhodné pokud program hlásí chybu Sector not found a jsme si jisti, že daný sektor skutečně existuje.
CS+T - změna typu souboru (přípony) i na nestandartní typy.
F - nalezení souboru. Můžete zadat i jen začátek jména hledaného souboru.

Od verze 3.21:
CS+C - Vynulování počitadla bezhlavičkových souborů pro převod z pásky na disk (viz. níže).
CS+S - Setřesení adresáře diskety. Vyprázdní "díry" v adresáři disku po smazaných souborech.

Skupinové operace
Dále popisované operace se provádějí se souborem na kterém stojí kurzor nebo přednostně se soubory označenými.

Označení souborů
ENTER - označení/zrušení označení po jednom souboru
SS+K - označení všech souborů v menu
SS+J - zrušení označení všech souborů

od verze 3.21 změna:
SS+K - označení všech souborů, které vyhovují masce. Maska se zadává ve stejné syntaxi jako příkazy M-DOSu (jméno.přípona). Lze použít jak hvězdičkovou tak i otazníkovou konvenci. Maska je předdefinována takto: *.* (pro všechny soubory stačí zmačknout ENTER). Pokud chcete jinak, začněte rovnou psát (přednastavená maska se smaže) nebo upravte podle potřeby (např.: *.P)
K - označení všech souborů
SS+J - zrušení označení souborů podle masky
J - zrušení označení všech souborů.
SS+I - inverze označení souborů (které byly označené se ze "odznačí" a naopak.

Vymázání souborů
SS+D - po potvrzení této volby se vymažou označené soubory nebo soubor na kterém stojí kurzor.

Kopírování souborů
C - z vložené diskety se začnou načítat označené soubory a ukládají se na jinou vloženou disketu. Při prvním vyzvání na vložení diskety na níž se má kopírovat můžete kopírování přerušit stiskem CS+SPACE.

Při dvou mechanikách se kopírují označené soubory z adresáře v němž stojí kurzor do druhého adresáře. Po skončení kopírování zůstane kurzor v okně cílové diskety (Verze 3.21 zůstane ve zdrojovém okně).

Od verze 2.1 se zobrazuje v editačním řádku text (Copying) za nímž je jméno kopírovaného souboru.

SS+X - disk copy. Cílová disketa je zformátována na formát diskety zdrojové a potom se přenesou všechny soubory. Neobsazené sektory se nekopírují.

Od verze 3.21:
SS+C - totéž co kopírování, ale s rozdílem, že se program vrátí na zdrojovou disketu a nechá soubory označené.
SS+M - Přesun souborů ze zdrojové na cílovou disketu.

Protože program nekontroluje zda na disketě na níž se má ukládat již existuje soubor stejného jména jako soubor kopírovaný, je možno touto funkcí zdvojit soubory na jedné disketě.

Převod z diskety na kazetu
Z diskety se převádějí soubory označené nebo soubor na kterém stojí kurzor na kazetu. Snapshot se převede na kazetu do spustitelné podoby. Soubory delší než 25 kb budou rozděleny do dvou bloků s novými hlavičkami. Podle údajů z těchto hlaviček si budete muset bloky v počítači spojit v jeden. Basic programy nebo data soubory takto převádět nejde. (Poznámka: je jednodušší si vytvořit v počítači vhodný CLEAR a bloky nahrát z diskety a potom uložit na kazetu než touto funkcí).

T - převod souborů z diskety na kazetu

Od verze 3.21program převede jakýkoliv soubor s libovolnou délkou bez zbytečného rozdělování do bloků. Navíc dokáže převádět i bezhlavičkové bloky (mají příponu H - formát uložení je shodný s MASTERcopy).

Převod z kazety na disketu
D - převod souborů s hlavičkami z kazety na disketu

Vhodné pouze pro soubory s menší délkou než 25 kb. Pro převod delších souboru platí poznámka výše).

Od verze 3.21 platí jako v minulém odstavci.

Závěr
Tools 200 má pouze úpravu pro kopírování na počítačích se 128kB RAM. Tools 128 má navíc tyto funkce. CS+S,CS+C,SS+C,SS+M,J,K,SS+I a předělány funkce SS+K,SS+J a je určena pouze pro 128ičky.

Zvláštní funkcí je přejmenování. Něco už jsem nakousl v kapitole o označování souborů. Pokud chcete přejmenovat soubor nebo disketu, program vám nabídne původní jméno souboru k opravě (např.: pokus2 na pokus3 - takto stačí BACKSPACE a doplnit "3"). Pokud ale chcete mít jméno úplně jiné, stačí jen začít psát. Původní jméno se smaže a začne se vypisovat nové.

středa 5. ledna 2000

A-Mouse III

autor: Zbyněk Vanžura

Již je to trošku delší doba, co jsem dostal od jednoho čtenáře pěkný ovladač pro myš (omlouvám se mu, ale při hardwarové poruše mého pevného disku jsem přišel o jeho jméno). Je opravdu pěkný, rychlý, malý - dokonce se mi jej podařilo vtěsnat do kalkulačky, jež napsal Universum jako utilitu pro Desktop. Takže teď už nechci od nikoho slyšet, že ovládání myši je moc paměťově náročné. Ale teď už k tomu ovladači:
AMouse
in
a,(31)
;vezme původní stav clonek

ld
d,a

ld
b,0
;počet průchodů smyčkou
AMouseC
in
a,(31)
;vezme nový stav myši

ld
e,d

ld
d,a

rra

;zjisti zda clonky patřící

rra

;k jednomu směru mají stejnou úroveň

xor
d

and
3

ld
c,a
;když jsou, tak se bity odpovídající

rlca

;oběma clonkám nastaví na jedničky

rlca

;a při operaci xor e dojde k negaci

or
c

xor
e
;starý stav clonek

xor
d
;nový stav clonek

ld
c,a
;výsledek: 001 směr vpravo

and
5
;100 směr vlevo

jp
pe,AMouse1
;0101 a 0000 myš stojí skok

inc
h
;zvýší se X

dec
a
;směr vpravo ?

jr
z,AMouse3
;ano, skok

dec
h
;zruší se zvýšení X

jr
AMouse1
;X=0, snížení nemožné, skok

dec
h
;X=X-1

jr
AMouse1
AMouse3
ld
a,h
;test přetečení z 255 na 0

and
a
;je X=0 ?

jr
nz,AMouse1
;ne, k přetečení nedošlo

dec
h
;sníží se zpět na 255
AMouse1
ld
a,c
;stejný test v ose Y

rrca

and
5
;při 0000 a 0101 skok

jp
pe,AMouse2

inc
l
;zvýší se Y

dec
a
;směr dolů ?

jr
z,AMouse4
;ano, skok

dec
l
;když Y=0, tak by došlo

jr
z,AMouse2
;k přetečení a proto skok

dec
l
;Y=Y-1
AMouse4
ld
a,l
;ošetření přetečení přes 192

cp
192

jr
c,AMouse2

dec
l
;když Y>=192 tak Y=Y-1
AMouse2
djnz
AMouseC
;počítadlo průchodů

ret

.end
Pokud jste nebyli nedočkaví a ještě ovladač myši nevyzkoušeli, napíši vám také jeho nevýhody. Nevýhodou je to, že je rychlý, ano nespletl jsem se, je rychlý a z toho důvodu myš testuje jen chvilku za kterou sice neprošvihne téměř žádný impuls clonek, ale přesto je myš pomalejší než z předchozím ovladačem (ZX Magazín 1/95), neboť myš testuje jen nepatrnou chvilku. Ale nebojte se, nechci vám vnucovat svůj původní ovladač, jen se vám pokusím ukázat, jak to vyřešit jinak a lépe.
Představte si, že si vykreslíte obrazovku, pokud chcete program ovládat šipkou, tak se toho až tak moc v programu nevykresluje (většinou jen ta šipka) a poté si otestujete joystick, klávesnici nebo myš a čekáte na další přerušení, abyste mohli opět překreslovat obrazovku. Ale co ten nevyužitý čas co se čeká na přerušení, proč jej zmařit instrukcí HALT, proč netestovat myš až do poslední chvíle. Jistě, nedokážeme uhodnout, kdy k přerušení dojde a vzhledem k počítačům Didaktik M a jim podobným to nepoznáme ani podle toho zda se vykresluje PAPER, nebo uz BORDER. Když ale nemůžeme přerušení rozpoznat, proč si nenadefinovat vlastní - třeba následujícím postupem:
Inicializovat přerušení IM 2 například následující rutinkou:
InicIM2
di

;zakaž přerušení

ld
a,$3b
;nastav do registru

ld
i,a
;číslo $3b adresa bude na $3bff (15359)

ld
a,$18
;na adresu 65535 (což je ona adresa)

ld
(65535),a
;ulož kód instrukce jr (provede se skok na adresu 65422)

im
2

ei

ret
Na adresu 65422 uložit rutinku pro obsloužení přerušení, nebo spíše hlavní program, který nakonec spustí dokola již zmiňovaný test myši. Takže opět příklad:

.org
65422
;adresa kam skočí instrukce jr na adrese 65535

ld
sp,Zasobnik
;nutno nastavit zásobník, neboť se stále posouvá

call
SmazSipk
;rutina pro smazání šipky

call
TestTlac
;rutina pro test tlačítek

ld
hl,(Sourad)
;do HL nové souřadnice šipky

call
KresSipk
;rutinka pro nakreslení šipky

ei

;nesmíme zapomenout povolit přerušení
AMouse
in
a,(31)
;vezme původní stav clonek

ld
d,a
AMouseC
. . .

;pokračování je shodné jako předtím


. . .

;jen konec poupravíme
AMouse2
ld
(Sourad),hl
;ulož nové souřadnice šipky

jr
AMouseC
;a znova dokud nás přerušení nepřeruší

Sourad
.dw
0
;X a Y souřadnice šipky

.end
Podprogramy pro kreslení a mazání šipky a test tlačítek si doufám již naprogramujete sami.
Na závěr popřeji co nejcitlivější šipku.