QMEG 3 a QMEG 4 pro odborníky

V tomto textu dokončíme popis QMEGu - alternativního operačního systému od Stefana Dorndorfa pro 8bitové počítače Atari.

Tentokrát se zaměříme na detaily související s tím, jak QMEG ovládá různé druhy hardwaru od disků až po tiskárny.

Připomenu ještě, že jedním z cílů tohoto seriálu je porovnání dvou u nás nejpoužívanějších verzí QMEGu, tedy 3.2 a 4.04.

7. Ovládání tiskáren

Podpora tiskáren je pouze v QMEGu 3. Z verze 4 byla odstraněna, aby se v ROM uvolnilo místo pro nové funkce. Došlo k tomu v 90. letech, kdy už pro většinu uživatelů nebyly 8bitové počítače hlavními pracovními stroji, takže tisk delegovali na 16bitové stroje.

Na rozdíl od jiných částí textu jsem v případě tiskáren neměl možnost některé zde uvedené informace prakticky ověřit. Vycházím proto především z dostupné literatury (viz Zdroje).

7.1 Rozhraní Centronics

Vedle obsluhy Atari tiskáren připojovaných přes SIO (tj. sériový port) má QMEG 3 vestavěnou podporu také pro klasické (PC) tiskárny s paralelním rozhraním Centronics. Aby je však bylo možné k Atari připojit, musel být Centronics do počítače vestavěn.

7.1.1 Centronics na Západě

Oficiální QMEG 3 podporoval rozhraní Centronics vytvořené pomocí druhého čipu PIA (neboli Motorola MC6820). Původní PIA má v adresním prostoru vyhrazenou oblast 54016 ($D300) až 54271 ($D3FF). Přídavná PIA využívá adresy od 54784 ($D600) do 55039 ($D6FF).

Jako konektor na počítači se použije dvouřadá zásuvka Canon 25. Piny z přídavného čipu PIA se připojují přímo na konektor, a to následovně:

PIA-pin  Canon 25  Funkce
PA0-PA7  2-9       datové bity 0-7
PB0      1         data STROBE
PB6      11        signál Busy

Pin PB7 na čipu PIA slouží k přepínání výstupu mezi SIO a Centronics. Je-li na tomto pinu logická 0, posílají se tiskové příkazy přes Centronics. Je-li tam logická 1, tisk je směrován klasicky přes SIO.

Další funkcí je konverze znaku pro konec řádku během tisku. Atari totiž standardně posílá na konci řádku řídicí znak číslo 155 ($9B). Některé tiskárny však k návratu vozíku (CR) a posunu řádku (LF) potřebují 2 řídicí znaky, a to 13 a 10 ( $0D a $0A).

Je-li pin PB5 na přídavném čipu PIA nastaven na logickou 1, provádí se při tisku konverze konce řádků ze 155 na 13 a 10. Je-li na uvedeném pinu logická nula, konverze se neprovádí.

7.1.2 Centronics u nás

Před rokem 1990 nebyly součástky Motorola v zemích tzv. východního bloku (zahrnujíce Československo) dostupné. Daly se tady však snadno koupit kopie čipů Intel vyráběné i v továrnách TESLA.

Proto vzniklo alternativní rozhraní Centronics pro Atari, založené na čipu Intel 8255 (u nás nahrazovaném součástkou Tesla HMB8255A). Rozhraní provádí automaticky konverzi znaku 155 ($9B) na 13 ($0D). Počítá se s tím, že tiskárna umí automaticky odřádkovat při návratu vozíku (funkce Auto Line Feed).

Já osobně mám ve svém nejstarším 800XE takové rozšíření od Zdeňka Matuly z Rožnova pod Radhoštěm. Čip 8255 je na samostatné desce, která je propojena více než 10 vodiči se sběrnicí u cartridge portu. Na desku je také přímo připájen konektor Canon 25, který je vyveden na zadní stranu počítače.

Tento Centronics je ovládaný pomocí registrů na adresách 54784 ($D600) až 55039 ($D6FF). Přes něj připojené tiskárny fungují dobře. Objevily se však problémy při tisku přes SIO rozhraní (viz [15], str. 4), a to jak na SIO tiskárnách, tak na Centronics převodnících připojených přes SIO.

Hardwarově to tedy více méně vyřešeno bylo. Ovšem toto řešení je softwarově nekompatibilní s PIA řešením. I s tím si však autoři poradili - QMEG prostě hacknuli.

Do počítačů tak byl v našich končinách spolu s Centronicsem osazován modifikovaný QMEG 3.2. Zajímavostí je, že Stefan Dorndorf se o tom dověděl až od nás během rozhovoru v roce 2016.

7.1.3 Chybová hlášení

Při tisku přes Centronics může dojít k těmto chybám, které umí QMEG detekovat:

Je-li tiskárna v režimu Off-line (například na konci papíru), OMEG čeká s dalším tiskem na její přechod do On-line. Tisk lze přerušit klávesou Break.

7.2 Tiskárny Epson

Jedny z nejrozšířenějších PC tiskáren (s rozhraním Centronics) na konci 80. a počátku 90. let byly výrobky značky Epson. Z důvodu relativně vysoké ceny originálů se objevovaly i jejich klony, jako např. SEP 510, o které jsem kdysi psal (viz [13], str. 60).

Ačkoli QMEG 3 umí obsluhovat jakoukoli tiskárnu připojenou přes Centronics, jakoby to byla Atari 1029, pro tiskárny Epson má několik speciálních funkcí.

7.2.1 Znakový režim

Znakový režim znamená, že tiskárna od počítače dostává jen čísla znaků, které má tisknout. Samotná vizuální podoba jednotlivých znaků (tzv. znaková sada) je uložena v paměti tiskárny.

Tento tisk je rychlý, tiskárna umí se znaky různé efekty (náklon, podtržení, zvýraznění, ...), příp. umožňuje vybrat si vzhled písmen přepínáním znakových sad.

Ve znakovém režimu s tiskárnou QMEG komunikuje skrze zařízení "P:". V BASICu např. příkaz LPRINT nebo LIST "P:".

Nevýhodou znakového režimu je, že v něm jsou pouze předdefinované znaky, nikoli např. speciální (pseudografické) znaky znakové sady Atari. Některé tiskárny však umožňují nahrát do své paměti vlastní znaky (funkce Download).

7.2.2 Grafický režim (P2:)

Vedle přímého tisku znaků přichází QMEG se zařízením "P2:", což je obsluha téže tiskárny ovšem s tím, že znaky jsou tisknuté v grafickém režimu s pomocí znakové sady Atari.

Takto lze tisknout všechny znaky, včetně pseudografiky a znaků inverzních, příp. lze použít vlastní nadefinovanou sadu znaků. Použitá znaková sada se určuje hodnotou na adrese 757 ($02F5) obdobně jako se 756 ($02F4) odkazuje na znakovou sadu pro zobrazování.

Změny parametrů tisku přes "P2:" docílíme nastavením hodnot na následujících adresách:

Adresa   Default    Funkce
29       RAMSIZ-8   Vyšší byte adresy grafického bufferu.
($001D)           
30       60         Maximální počet znaků na řádek.
($001E)  ($3C)      
31       60         Počet řádků na stránku.
($001F)  ($3C)    
757      224        Vyšší byte adresy znakové sady použité pro tisk.
($02F5)  ($E0)                      
758      75         Režim tiskárny Epson (K=75=$4B, L=76=$4C).
($02F6)  ($4B)    

Vždy po Resetu se na uvedené adresy nastaví jejich výchozí (default) hodnoty.

Na adrese 29 ($001D) se uchovává číslo stránky paměti, ve které začíná vyrovnávací paměť (buffer) pro tisk. Automaticky se sem zapisuje ukazatel velikosti paměti (tj. hodnota z adresy 740, resp. $02E4) snížená o 8.

8 stránek znamená 8krát 256, tj. 2048. Buffer tak začíná 2 KiB pod koncem volné paměti. Pro tisk pomocí P2: musí mít ovládač tiskárny k dispozici buffer o velikosti nejméně 512 bytů.

Po vytisknutí počtu řádků uvedeného v adrese 31 ($001F) dojde k automatickému vysunutí stránky papíru z tiskárny. Zadáme-li na adresu 31 hodnotu 0, automatické vysunování bude vypnuté.

Režimy tiskáren Epson (zadávané na adrese 758, tj. $02F6) jsou 2. "K" znamená běžnou hustotu, tedy 60 grafických znaků na řádek. "L" je dvojnásobná hustota, při které lze dosáhnout až 120 znaků na jednom řádku.

7.2.3 Grafický režim (P3:)

Režim "P3:" je v podstatě stejný jako "P2:". Jediným rozdílem je zjednodušené nastavení hustoty tisku a počtu znaků na řádek. Syntaxe použití je následující: "P3:gn", přesněji řečeno, za dvojtečku je třeba uvést 2 znaky.

První znak za dvojtečkou (g) udává režim tiskárny. Může nabývat hodnot K nebo L, které se následně uloží na adresu 758 ($02F6).

Druhý znak (n) udává počet znaků na řádek. Hodnota je uložena na adresu 30 ($001E). Může se pohybovat v rozsahu 0 až 9, přičemž hodnoty znamenají:

 3 až 9 =  30 až  90 znaků
 0 až 2 = 100 až 120 znaků

Například, chceme-li vypsat listing programu v BASICu dvojitou hustotou, stačí prostě zadat: LIST "P3:L2"

Poznámky:

8. Ovládání magnetofonu

V QMEGu verze 3 je zachována klasická obsluha magnetofonu v režimu standard (600 bd), jakou známe z Atari OS. Tj. držíme-li klávesu Start během studeného startu systému, ozve se známé zahrčení a po stisku libovolné klávesy (mezerníku) započne načítání z kazety. V BASICu (a jinde) lze používat zařízení C:.

Z QMEGu verze 4 však byla podpora ovládání magnetofonu odstraněna! Nelze tedy načítat binární program po držení klávesy Start při studeném startu, v systému neexistuje zařízení C: atd.

Náhradou za to přichází QMEG 4 s funkcí CAS simulátor. Ta umožňuje načtení a spuštění programů překopírovaných z kazety na disketu. Takový převod je třeba provést pod Atari OS (nebo QMEG 3) pomocí souborového kopírovacího programu.

Při převodu programů, které mají více částí, je nezbytné, aby jednotlivé části byly nakopírovány na disketu v témže pořadí, v jakém byly uloženy na kazetě. Je důležité, aby mezi soubory na disketě nebyla žádná mezera. Přesněji řečeno, za posledním sektorem jedné části musí následovat první sektor části bezprostředně následující. Mezery mohou vzniknout v důsledku mazání nebo přepisování souborů.

Dále je třeba upozornit, že CAS simulátor podporuje pouze diskety s velikostí sektoru 128 bytů (tj. formáty single a medium), a to z důvodu velikosti bufferu. Soubory CAS tedy není možné v QMEGu spouštět z disket naformátovaných na dvojitou hustotu (Double, Quad).

Převedený soubor z kazety dostává na disketě koncovku .CAS (odtud název CAS simulátor). Pokud je program složen z více částí, dostane druhá část koncovku .PO1, třetí část .PO2 atd. Načtení a spuštění souboru CAS provedeme obdobně jako kterýkoli binární soubor (COM, EXE), tj. klávesou L načteme adresář diskety a číslem vybereme soubor ke spuštění.

9. Ovládání disketových jednotek

9.1. Disk interface (DSKINV)

Pro práci s disketovými jednotkami má Atari OS i QMEG rutinu (nebo, chcete-li, podprogram) s názvem Disk interface (DSKINV). Ta se volá skokem (JSR) na adresu 58451 ($E453). Při zavolání vykoná DSKINV úkol (tj. příkaz a jeho parametry) specifikovaný na adresách 768 ($0300) až 779 ($030B).

Hodnota na adrese 770 ($0302) přitom udává příkaz, který se má vykonat (odtud označení DCOMND). Seznam standardních příkazů podporovaných Atari OS najdete např. v [4] na str. 57.

QMEG tuto sadu rozšiřuje o následující příkazy:

Hodnota     Význam
34  $22  "  Formátovat v hustotě Medium
35  $23  *  Formátovat v režimu Percom
63  $3F  ?  Zapíná rychlý zápis
            a Ultra-Speed
72  $48  H  Speciální funkce Happy
            - ovládá se pomocí hodnot
            v DAUX1 (778 / $030A)
            a DAUX2 (779 / $030B)
79  $4F  Q  Zastavení motoru
83  $53  S  Stavový příkaz

Znalý čtenář může namítnout, že stavový příkaz je k dispozici i v Atari OS. To je pravda, ale v seznamu je uveden, protože se chová jinak. QMEG totiž při jeho volání současně zapíná čtení a zápis (R, W a P), aby zajistil nastavení správné délky sektorů na adrese DSKSLN (tj. 725, resp. $02D5).

9.2. Podprogramy SIO

K ovládání sériového rozhraní (přes které se připojují i disketové jednotky) má Atari OS rutinu SIO. Tu při své práci volá také Disk interface (DSKINV) - viz 9.1. Stejnou rutinu používá i QMEG. V něm se ovšem liší chybová hlášení, která může SIO vyvolat. V QMEGu jsou to:

Přitom chyba 140 v QMEGu slouží jako jakási univerzální chyba, protože zahrnuje všechny chyby v rámci SIO, které Atari OS značí samostatně pod čísly 140 (Serial Frame Error), 142 (Serial Bus Overrun) a 143 (Checksum Error) - viz např. [3], str. 210.

Vedle klasického SIO disponuje QMEG 3 ještě novým, rychlejším podprogramem zvaným USIO. Ten pracuje bez použití přerušení, čímž právě dosahuje vyšších rychlostí než standardní SIO.

USIO se používá při práci s ramdiskem a pro všechny podporované urychlené disketové jednotky (Speedy a Happy). Pro ovládání ramdisku lze použít i Percom příkazy PUT a STATUS. Při práci s ramdiskem mají kódy chyb následující význam:

- 138  Pokus o přístup ke druhému
       ramdisku, když je první ramdisk
       naformátován na double.
- 139  Číslo sektoru je příliš vysoké
       nebo nízké.

V QMEGu 4 byl podprogram USIO nahrazen novým FSIO, který také pracuje bez přerušení, ale podporuje více funkcí a zařízení než USIO. Navíc má QMEG 4 zvláštní rutinu RAMSIO, kterou používá pro práci s ramdisky.

9.3. SIO ovladač na přání

QMEG 4 má vyhrazené malé místečko (cca. 125 bytů) pro uživatelský ovladač, který může být navěšen na systémovou SIO rutinu. Může jít např. o ovladač pro romdisk nebo tiskárnu.

Počáteční adresa tohoto volného prostoru je uložena na adresách 58529 ($E4A1) a 58530 ($E4A2). Volný prostor sahá až po 65525 ($FFF5).

Uživatelský SIO ovladač musí mít následující strukturu:

     *=$FFxx
USRINI JMP UINIT
USRSIO ...
       ...
       RTS
UINIT  ...
       ...
       RTS

USRINI je volán po každém Resetu, a to ihned po inicializaci zařízení na paralelní sběrnici. USRSIO je voláno při každé SIO operaci. Pro USRSIO, před návratovým RTS, musí být nastaven příznak carry, pokud ovladač tuto funkci nabízí. Jinak musí být vynulován, jako u paralelních zařízení.

Ještě je třeba poznamenat, že součet všech bytů vložených do volné oblasti musí být dělitelný 256. QMEG totiž provádí kontrolní součet ROM při každém studeném startu.

V době psaní příručky [6] byly k dispozici ovladače pro ARGS-ROMDISK a pro rozhraní Centronics kompatibilní s QMEGem 3.

9.4. Tabulka disků

Seznam disků, jak jej vidíme v hlavním menu QMEGu, má svůj obraz v paměti. Je uložen v oblasti adres od 1008 ($03F0) po 1015 ($03F7), pro každou jednotku (1 až 8) po jednom bytu. Význam hodnot těchto bytů shrnuje následující tabulka:

Hodnota    Typ zařízeni     Znak v menu
                             (QMEG 3/4)
0 nebo >4  normální disk     - / N
1          rychlý disk (US)  U / F
2          první ramdisk     A / X
3          druhý ramdisk     B / Y
4          Happy-Warp Speed  H (QMEG 3)

Poznámky: - QMEG interně používá disketovou jednotku s číslem 0, která je identická s prvním ramdiskem. - V QMEGu 3 je jednotka číslo 5 identická s jednotkou 8. - V QMEGu 4 jsou všechny jednotky nezávislé.

V paměti se dále ukrývá informace o formátu ramdisku. Pro QMEG 3 je uložena na adrese 1007 ($03EF), v QMEGu 4 ji najdeme na adrese 1005 ($03ED). Hodnoty pro jednotlivé formáty jsou následující:

V QMEGu 4 je stejný byte (1005 / $03ED) použit také k uložení stavů speciálních funkcí (viz 2.13.) Používá se pro ně pravá čtveřice bitů, s tímto významem:

Bit  Váha  Funkce
0    1     KEY
1    2     EDI
2    4     G25
3    8     VBS

Stav 0 znamená funkce vypnuta, stav 1 (samozřejmě) funkce zapnuta.

9.5. Paralelní (systémová) sběrnice

Vedle sériového rozhraní (SIO) lze disková zařízení k Atari připojovat také prostřednictvím Parallel Bus Interface. Tím se myslí stejnojmenné rozhraní na počítačích řady XL a ECI (tj. kombinace Cartridge portu a Expansion portu), které je dostupné na většině počítačů řady XE.

Na paralelní sběrnici lze připojit různá zařízení pro rychlý přenos dat. Patří mezi ně např. IDE Plus 2.0 (viz můj článek ve FLOPu 57). QMEG 4 (na rozdíl od verze 3) má pro tato zařízení plnou podporu. Můžete u nich tedy využít např. prohazování čísel disků.

Pokud nějaký program (např. DOS) zavolá SIO, odehraje se následující: