Komentovaný výpis ROM – Poznámky (Odehnal, Veverka)

Transkript

Komentovaný výpis ROM – Poznámky (Odehnal, Veverka)
Úvod
,
1 Uvod
Dostala se Vám do rukou jedna ze tří příruček pro programování ve strojovém
kódu na mikropočítači SHARP MZ-821. Tato řada příruček byla vytvořena zpětným
překladem a okomentováním 16KB ROM s operačriím systémem.
U čtenáře předpokládáme znalost strojového kódu mikroprocesoru Z80 a ovládám periferních obvodfi 18255, Z80-P10 a 18253.
První část je tvořena přehledem jednotlivých skupin podprogramfi a je členě­
na podle jejich zaměření. Jedinou vyjímkou je zde kapitola o grafickém zobrazování v módu MZ-800, které ROM nepoužívá.
Jsme ale přesvědčeni, že sem patří a že informace v ní uvedené Vám pomohou při Vaší práci s tímto počítačem.
Druhou část tvoří okomentovaný zpětný překlad, který je rozdělen na tři relativně samostatné části, podle logické stavby obsahu ROM. Ve třetí části je výpis
generátoru znakfi, který je v ROM na adresách lOOOH-lFFFH a hexadecimální
výpis obsahu celé ROM.
Tyto příručky tvoří dostatečnou dokumentaci pro psaní systémových programfi pro tento mikropočítač (pracujících v módu MZ-700).
5
Úvod
1.1
Použité konvence
Při vytváření symboh'l byla dodržována konvence o významu prvruno znaku
symbolu podle následující tabulky:
@
Podprogram volatelný instrukcí CALL.
Obvykle éhrání většinu registr&. Nevrací se nikdy jinam, než do
programu, kterým byl zavolán. (Výjimku tvoří chybový návrat
podpory BASl Cu)
Návěští v dolním monitoru
NávěštíV horním monitoru.
Takto jsou značena jednak pomocná návěští obou monitoru a také
podprogramy, které jsou volatelné instrukcí CALL, ale chybový
návrat realizují přímo skokem do monítoru.
Textová tabulka v "ASCII". Text je ukončen znakem CR (ODH).
Libovolná tabulka
<
l/0 port vybíraný přes IOREQ
UO port vybíraný přes MREQ
< x > Symbolická konstanta reprezentující "ASCII" znak
< x > D Znak v tzv. display kódu
1
Následuje-li adresa, jedná se o pomocné návěští lokálního významu.
M
Následuje-li adresa, jedná se o pomocnou datovou buňk-u v RAM.
Tato konvence je vytvořena pouze pro přehlednost okomentovaného zpětné ho překladu. Většina assemblerft nepovoluje tyto znaky jako první v návěští.
Je vhodné, aby každý při psaní program& dodržoval ve svém zdrojovém textu
konvence názvft tak, že při odkazech na ROM bude mít vytvořený symbol (např.
jako RHEAD EQU 27H) a ten pak bude používat. (CALL RHEAD).
Přispěje to k zpřehlednění programfi i k usnadnění komunikace mezi programátory. K tomuto je vhodné zkráceně ocitovat zásadu číslo 4 z THE PDP-ll
CODEX PROGRAMMATICUS: "Každý programátor, který se nepřízpůsobí standardu pojmenování by měl být zastřelen. Jestliže se stane, že není vhodné ho zastřelit,
má být zdvořile požádán, aby přepracoval program podle shora uvedených konvencí."
Při pojmenování symbolů jsme zachovali názvy použité firmou SHARP pro
zveřejněné vstupní body do podprogramfi a další jsme vytvořili sami tak, aby co
nejlépe vyjadřovaly význam návěští.
6
Struktura ROM
2 Struktura ROM
V mikropočítači SHARP MZ-821 je použita 16KB EPROM 127128. Mapovárú fyzických adres v ROM na logické adresy probíhá podle této tabulky:
8BBB
1BBB
ZBBB
Dolní
část
Monitoru
Generátor znaků
Horní
BBBB
1BBB
část ~onitoru
IPL
Podpora pro Basic
EBBB
EJ
D
2-1 Tabulka adres mapování ROM.
Tomu je podřízen i tvar okomentovaného zpětného překladu,který se skládá ze
samostatných částí:
DOLNÍ MONITOR
HORNf MONITOR
PODPORA PRO BASIC
tří
OOOOOH - OOFFFH
OEOOOH - OF3FFH
OF400H - OFFFFH
Generátor znakfi je popsán v kapitole obrazovka. Detailní informace o generátoru znakfi najdete ve třetím dílu těchto materiálft.
7
Mapováni paměti
3 Mapování paměti
Pro řízení mapování je využitO 7 portfi MMCO - MMC6 na adresách OEOH OE6H. Přepínání pomocí těchto portft není závislé na čtené nebo zapisované hodnotě. Význam většiny portft se mění podle nastaveného módu MZ-700 (D MD = 8)
nebo MZ-800 (DMD).
Za základní stav lze považovat ten, kdy je namapováno 64 KB RAM. Následující
tabulky ukazují, kterými instrukcemi se mapuje.
1. řádek záhlaví obsahuje instrukce, které namapují tu část paměti, která
je označena dvojitou čarou. Jednoduchá čára označu-je, kde se poměry nemění.
2 . .řádek záhlaví obsahuje instrukce, které namapují do adresového prostoru označeného dvojitou čarou zpět paměť RAM.
Význam použitých zkratek
ROM
CGROM
CGRAM
VRAM?
VRAM
obsah EPROM s dolním nebo horním monitorem
obsah EPROM s generátorem znakft
obsahuje generátor znaku přenesený do Video RAM
VRAM v módu 640 x 200, RAM v módu 320 x 200
Video RAM, v MZ 700 módu s touto organizací:
- - - I!Cillli!H
CGRAI'I
- - - I!Dillli!H
DATA
neu!Južito
- - - I!DBI!8H
ATRIBUTY
neuyužito
- - - 8DFFFH
3-1 Struktura VRAM v módu MZ-700
8
Mapován( paměti
Mapování paměti v MZ-800 módu
3.1
V MZ-800 módu lze
samostatně
ovládat mapovárú hormno monitoru nebo
VRAM současně s CGROM. Velikost mapované VRAM závisí na nastaveném
DMD. V módu 320 x 200 zfi.stává RAM i tam, kde by v 640 x 200 byla VRAM.
Instrukce OUT (OE4H),A namapuje něco jiného než RAM všude tam, kam
je to možné. Tohoto stavu se také docílí stiskem RESET.
neRAM:
RAM:
our (E3)
our (El>
IH (E8)
IH (El)
our <E4>
our <E8>
our <E2>
6666
ROM
ROM
1666
CGROM
2666
3668
4668
5868
6666
7688
8868
9668
A666
B688
C668
D688
E668
F686
FFFF
CGROM
RAM
RAM
VRAM
URAM
URAM?
URAPi?
RAM
ROM
I"
ROM
3-2 Mapování paměti v módu MZ-700
9
Mapová nf paměti
3.2
Mapování paměti v MZ-700 módu
V MZ-700 módu se mapuje horní monitor zároveň s VRAM a také s memory
mappingem, t.j. přístupem k portům pomocí instrukcí pracující s pamětí. Proto po
odmapování horru1JO monitoru nelze v módu MZ-700 přistupovat k obvodům 18255
a 18253. (KBD:, ·cMT:)
Instrukcí OUT (OE4H),A se nastaví základní režim, ve kterém pracují oba
ROM monitory.
neRAM: OUT CE3l
RAM:
OUT CE1l
IH CE!Il
IH CEll
OUT CE4l
OUT CE2l
OUT CE!Il
!1!1!1!1
ROM
ROM
1!1!1!1
CGROM
2!1!1!1
3!1!1!1
RAM
4BBB
5!1!1!1
&!I !lEl
RAM
7!1!1!1
BB!I!I
9!1!1!1
A!I !lEl
BElE!!I
CElEl!!
DEI!!!!
E!l!l!l
FE!!I!!
FFFF
I VRAM I
I ROM I
VRAM
ROM
3-3 Mapování paměti v módu MZ-800
Porty MMCS a MMC6 slouží pro ovládání signálu INHS, který je sice z vtdeoprocesoru GDG vyveden, ale v MZ-800 není nikam zapojen.
10
Monitor 1Z-013B
4 Monitor 1Z-0138
Pflvodní vstupní bod spodnfho monitoru, používaný v .MZ-700 byl 004AH.
Tento je pro MZ-800 nepoužitelný, protože se zde jako jedna z věcí při inicializaci
testuje adresa OE800H a pokud je nalezena paměť ROM, je na adresu OE800H
předáno řízení. V MZ-700 to předávalo řízení případnému ROM PACKU, v MZ800 je to spuštění monitoru 9Z-504M (horní monitor).
Pro předání řízení spodnímu monitoru je proto vhodné použít ]PRMPT
(OOADH), tedy vstup na prompt dolnibo monitoru.
Přehlec;l příkazů
4.1
4.1.1
J
dolního monitoru
= Jump
Jxxxx, předá řízem na adresu xxxx
4.1.2
L
= Load
Přečte program z pásky a předá mu řízení. Nečte
program od standardních zaadres jako horní monitor, ale od skutečných adres příslušného programu.
Proto je někdy vhodnější používat pro nahrávám tohoto monitoru. Program je odstartován, pouze pokud je jeho startovací adresa větší nebo rovna 1200H. V opač­
ném případě je předáno řízem zpět monitoru. Tímto příkazem nelze číst programy'
pod ROMku.
váděcích
4.1.3
F
= F????
Pokud je obsah adresy OFOOOH nulový, tak tam skočí, v opačném případě se
vrátí na prompt monitoru. V MZ-800 je tento příkaz nesmyslný. V MZ-700 sloužil
pravděpodobně pro předání řízem ROM PACKU pro obsluhu FLOPPY DISKU,
eventuálně QUICK DISKU.
4.1.4
8
= BEPP ON/OFF
Zapne nebo vypne akustický signál po stisku každé klávesy.
4.1 .5
# = Restart
Namapuje všude pamět RAM a skočí na adresu OOOOH. Zničí tím oblast p amě­
ti od OFFFOH do OFFFSH. Efekt tohoto příkazu je totožný s CTRL a RESET současně.
4.1.6
M = Modify
Mxxxx umožm měnit a prohlížet obsah paměti od adresy xxxx dále. Vykonám
se zruší klávesou SHIFT + BREAK. Pokus o zapsánf nesprávné hodnoty je prostě
ignorován a je vyžadována správná hodnota.
ll
Monitor 12-0138
4.1.7
P = printer service
Obsluha tiskárny (MZ-1P16 Plot printer). Existují tyto povely:
&L
&S
&C
&G
&T
text
přepnutí
na 80 znakfl na řádek
na 40 znakfi na řádek
výměna pera
přepnutí do grafického režimu
aktivace selftestu tiskárny
vytiskne text
přepnutí
Povely následují těsně za příkazem P. Vyskytne-li se povel za textem, je inorován a vytisknut jako součást t~xtu.
4.1.8
S = Save
Uložení souboru na pásku. Typ je vždy OlH, tedy OBJ. Na jméno, délku, zaváděcí a startovací adresu se ptá.
·
4.1.9
D
= Dump
Dxxxxyyyy ... výpis paměti ASCII a v šestnáctkové soustavě. Implicitní hodnota počtu bytl\. pro výpis yyyy je OOAOH.
4.2
Některé
4.2.1
podprogramy monitoru
[HLHEX 013DH
Zprostředkuje
ratu přímo
4.2.2
volání podprogramu @HLHEX (0410H).
prompt monitoru.
Při
chybovém náv-
předá řízení na
[GETL 012FH
Zavolá @GETL (0003H) s nastaveným standardním pracovním prostorem
IOBUF (11A3H). Pokud zjistí ukončení vstupu textu klávesou SHIFT + BREAK,
tak před á řízení monitoru.
4.2.3
[PCHAR 018FH
Tisk znaku na tiskárně. Na BREAK se vrací přímo do monitoru.
4.2.4
[PTEXT 01A5H
.
Tisk textu na tiskárně. Text začíná na adrese DE a končí znakem CR (ODH),
který se už ovšem netiskne! Chrání všechny registry, ale na BREAK končí v dolním
monitoru.
12
. Obrazovka
5 Obrazovka
5.1
Připojení
CRT:
O řízení zobrazování se v MZ-800 stará zákaznický obvod GDG (100-pin
single chip LSI), který zajišťuje také memory management. Programové vybavení v
ROM pracuje s obrazovkou tím nejjednodušším zpfisobem, v MZ-700 módu, kdy je
VRAM alfanumerická a obsahuje generátor znakfi. Ten je tam při inicializaci zkopírován ze svého vzoru v ROM.
5.2
Uspořádání VRAM v MZ-700 módu:
Obra z ovka v MZ-700
módu má 25 řádkfi a 40 znakfi na
řádku. Každému místu přísluší 2
není
byty ve VRAM, jeden v textové
využito
části odDOOOH a druhý v části atributt1 od D800H. Obě části zauZBilllH
- - - llCBilllH
jímají 1000 bytů, jsou ve VRAM
generátor
znaků
uložené souvisle po řádcích.
3BBilH
- - - BDilllllH
Zbylých 1048 bytfi v textové i v
text
atributové části nenívyužito. Sys- - - BDBBBH
atributy
tém je však maže s celou ob3FFFH
razovkou.
5.2.1
Tvar atributu
5-1 VRAM v módu MZ-700
Každému znaku na obrazovce lze nadefinovat dvě
barvy: Barvu popředí a barvu pozadí. V MZ-700 módu je k dispozici výběr z osmi barev s následujícími kódy:
BBBBH
-- B
- R-RB
G-G-B
GRGRB
o
černá
1
modrá
2
3
4
5
6
7
červená
purpurová (červená + modrá)
zelená
azurová (zelená + modrá)
žlutá (červená + zelená)
bílá
13
Obrazovka
7
6
s
4
kód barv!.J znaku
G
R
B
3
2
1
kód barv!l pozadí
G
R
B
5-2 Struktura atributu
5.3
Generátor
znaků
Generátor znalďi CGROM zaujímá 4 kB paměti ROM mapující se na adresy
lOOOH- lFFFH.
5.3.1 . Struktura generátoru
Každý znak je v generátoru reprezentován osmi byty. Tyto byty tvoří matici 8
x 8 bodfi, do kterých se rozkresluje každý znak. Byty se ukládají na CRT: od shora
dolfi s opačným sledem bitfi (7. bit je v pravé části znakU). Jednička v generátoru
značí bod, který přísluší znaku a nula pozadí. Např: znak OFlH z 1. generátoru
(Pseudografický bod v levém horním rohu) je v generátoru uložen takto:
7,7,7,0,0,0,0,0.
5.3.2 .Obsah generátoru
Generátor se skládá ze dvou sad po 256 znacích, celkem je tam tedy 512 znalďi .
Znaky nejsou uloženy v generátoru podle kódu ASCII, ale podle tzv. display kódu.
Přesto však generátor obsahuje všechny znaky ASCII a navíc úplnou pseudografiku 80 x 50 bodfi. Podrobnější informace o tvaru jednotlivých znakfi najdete ve třetím
dílu této příručky.
5.3.3 Generátor znaků CGRAM
Na počítači MZ-700 CGRAM nebyl. Zákaznický obvod pracoval přímo s
CGROM. Uživatel si nemohl znaky měnit. Počítač MZ-800 používá CGROM
pouze jako vzor. Vlastni generátor je v CGRAM. Mapuje se na adresy OCOOOHOCFFFH těsně pod VRAM. Po inicializaci se přenese obsah CGROM do CGRAM.
Uživatelské programy si potom mohou znaky v CGRAM změnit. CGRAM má
stejnou strukturu jako CGROM. Software se v MZ-700 módu o rozkreslováni nestará, tuto činnost přebírá obvod GDG podle display kódu znaku nalezeného ve
VRAM a podle CGRAM. Která sada znakfi se použije je určeno 7.bitem atributu.
V režimu MZ-800 je CGRAM využíván jako součást VRAM. Uživatel si musí znaky
rozkreslovat sám z CGROM nebo užít vlastní generátor znalďi.
14.
Obrazovka
ABCDEFGHIJKLMNO
PQRS TUVWX YZ f:
L..J
f-...L
~~~W~~@OOg~~~~~®
!iDC!Jil!~'ii'Q!lQPI!!JX'i?l!l~.oi~lRliE.a.
8123456789-~;/..
-IL~-1-1 -1.1_
®n~~~~~7ffi@~@~~~•
~~~X~~~~~~~,~~·A
t([.J@~)+'~~r,~T
•1•1•~~,~++++~~~
l'I'\C\ol>l!ll§[email protected]·•il~ll•·!: H ~
••··~ +>~IIII~::()IF'lllp:c'ř'Tt:i.\
1- I
>•~••~+•o?Dr,~A'
'ff'! "#$X & ' () + *"XJ '-1 r l - I /'...- 1•1- 1- I
labcde~ghijklmno
p~rstuvwxyzA/'''
,=111+'
-~_...-'""-13
u o U i=i <:$
r~~\\~~'''/ / <+A!DDmm~~·a~•**I8Q
• U "*.,.J"~~Á\ \ • • ll 111.
- l-l"'-~05'-1>1--l<lk: R >-·n::: <, 1111
• • ••. : .• :• • •. : •: •• : •• : ::
~T~~~~nnn~~~e•••
~~ooO·••@aCD~e~~
·~~~~~~~~~~~~·~~
;·,;llroodb•lllllll ~E .. .>d?.Woocc:.r +
~~~liE~Tt-±~m~~-·•
t4~~&~~~~~~~L~~~
!,. .H• .d!o. "'I .. .S!o.D:::D>--,...Jr
'-~~l't 1 2 14 1 323~ ~ Gfii>,Sl:li.:·, : :.:
~~ .. _.f :&: Z HM&6[3[]~
J
r
S-3 Generátory znalffi
5.4
Podprogramy pro práci s CRT:
Vstupní vektor MZ-700 obsahuje celou sadu podprogramfi pro výstup znalffi
a textfi. Všechny tyto podprogamy chrání registry mimo AF. Předpokládají namapovanou VRAM od ODOOOH. Generátor znalffi nemění a měnit neumí. I když hardware dovoluje použít až osmi barev, rutiny v ROM používají jen dvě: bílé znaky na
modrém podkladu.
Podprogramy využívají tabulku !ATBLN (1173H), která spojuje fyzické řádky
na obrazovce do logických. Tabulka má délku odpovídající počtu řádlffi. Nula u
příslušného řádku znamená, že řádek je zahajovací, jednička indikuje pokračování
řádku. (má význam pro insert, delete, scroll, a @GETL). Spojeny mohou být maximálně dva řádky. Spojení se dosáhne zápisem znaku do posledního sloupce obrazovky.
5.4.1
@LETNL 0006H
Provede přechod na nový řádek obraiovky. V případě potřeby odroluje.
5.4.2
@IFNL? 0009H
Pokud je kurzor na nulté pozici v řádku, neudělá nic, pokud je kdekoli jinde,
provede LE1NL.
5.4.3 @PRNTS OOOCH
Vytiskne mezeru.
5.4.4
@TAB OOOFH
Tabeluje na další tabelační pozici. (po deseti znacích, podle logického ukazatele).
5.4.5
@PRNTC 0012H
Vytiskne znak, který je v A registru v "ASCII" kódu. Pro řídicí znaky zavolá
DPCf. Obnovuje obsah registru A
15
Obrazovka
5.4.6
@MSG 0015H
Vytiskne řetězec znalal, který začíná na adrese DE a končí znakem CR (ODH).
Text smí obsahovat řídící znaky, které se provedou.
5.4.7
@RST18 0018H
Jako MSG. :Řídící znaky se neprovedou, ale ze>brazí.
5.4.8
@?DPCT ODDCH
.
Na tyto řídící kódy (vstupují v A registru) provede následující akce, ostatní
kódy jsou ignorovány:
SCR OLL
OCOH
CURSORDOWN
OClH
OC2H
CURSOR UP
OC3H
CURSOR RIGHT
·OC4H
CURSORLEFT
HOME
OCSH
OC6H
CLEAR SCREEN
DELETE
OC7H
OCSH
INSERT
OC9H
SET ALPHANUMERIC MODE
OCAH
SET GRAPHIC MODE
OCBH
není využito
není využito
OCCH
OCDH
CARRIAGE RETURN
není využito
OCEH
OCFH
není využito
5.4.9
@BTHEX 03C3H
Vypíše obsah A registru v šestnáctkové soustavě.
5.4.10
@MHEX 03B1H
Vypíše obsah
mezeru.
5.4.11
paměti
adresované HL registrem v šestnáctkové
soustavě
a
@HLHEX 03BAH
Vypíše obsah registrového páru HL v šestnáctkové soustavě.
5.4.12
@?NLHL 05FAH
Z avolá IFNL? a HEXHL. Vypíše tedy šestnáctkově obsah HL na nový řádek.
5.4.13
@?POINT OFB1H
Vrátí v HL adresu kurzoru.
5.4.14
@?ACUR OFB4H
Očekává
v HL registru pozici kurzoru ve tvaru H =řádek, L =sloupec a vrátí
v HL tuto adresu přepočtenou na skutečnou adresu ve VRAM.
5.4.15
@CURON OB92H
Zobrazí kurzor. Znak, který byl pod ním uklidí do systémových proměnných
na adresu AKCHAR (118EH).
16
· Obrazovka
5.4.16
@CUROF 05FOH
Na místě kurzoru zobrazí správný znak z adresy AKCHAR (11E8H).
5.4. 17
@BLIKC 09E3H
Podle stavu PC6 18255 dosadí na místo kurzoru buď znak kurzoru, nebo znak,
který tam má být. (Blikání s kurzorem)
5.4.18
@AVRAM ODB5H
Zapíše obsah A registru do VRAM a posune kurzor o znak doprava. (Využívá CURSOR RIGHT rutiny DPCf)
5.4.19 · @?ADCN OBB9H
Převede znak v A registru z "ASCII" kódu do display kódu.
5.4.20
@?DACN OBCEH
Převede znak v A registru z display kódu do "ASCII" kódu.
5.4.21
@PRNTA 096CH
Pomocí A VRAM zobrazí znak a posune CSRH (1194H Logická pozice znaku
na řádku)
5.4.22
@ICSRH 096FH
Posune CSRH, při překročení maximální délky logického řádku (80 znalďt)
ho vynuluje.
17
Klávesnice
6 Klávesnice
6.1
Připojení
klávesnice
Klávesnice je připojena přes obvod 18255, z něhož využívá bity PAO-PA3 pro
matice kláves a celou bránu B pro vstup dat. Strobe klávesnice je
přiveden z PAO-PA3 na vstup obvodu pro výběr 1 z 10 a teprve na výstupu toho obvodu je matice klávesnice. Bity PA4-PA7 se musí při strobe nastavit na jedničku,
protože slouží k ovládání joystickfi. Z toho dfivodu je také vhodné nastavovat PA
před každým čtením z PB. Nelze se spoléhat na to, že nebude změněn. Data přeč­
tená z PB odpovídají stavu kláves vybraného sloupce v okamžiku čtení. Logika je na
tomto portu negativní, jednička odpovídá nestisknuté klávese, nula stisknuté. PA je
na adrese ODOH resp. OEOOOH; PB na adrese OD1H resp. OE001H. Podprogram pro
zjištění, zda je stisknuta klávesa ve sloupci II a na řádku JJ by mohl vypadat takto:
OUT
(ODOH),II.or.llllOOOOB
IN
A,(ODlH)
BIT
JJ,A
JP
Z,klávesa stisknuta
výběr řádku
1
ll
7
blank
z
'l
Q
4
3
5
A
1
6
graph
z
R
J
B
2
5
libra
9
s
K
c
3
4
alpha
T
- L
D
4
3
tab
u
lf
E
u
w
lt
F
o
G
7
X
p
H
8
z
1
ll
cr
7
8
9
inst
break
F1
del
ctrl
F2
6
'
up
F3
s pc
down
F4
5
o
right
FS
6
9
left
7
· /
6-1 Rozmístění kláves
18
shift
Klávesnice
6.2
Podprogramy pro práci s klávesnicf
Vstupní vektor MZ-700 zpřístupňuje dva podprogramy pro práci s klávesnicí:
GETKY a BRKEY. Další podprogramy jsou použitelné pouze pro případ, že by si
uživatel chtěl napsat novou klávesnici, se stejně špatnými vlastnostmi, ale s generováním jiných kódfi.
6.2.1
@??KEY 0983H
Začne blikat s cursorem (není-li to zakázáno nastavením bitu 1 proměnné
CONMOD (1170H)) a čeká na stisk klávesy. Přečtenou klávesu vrací v A registru.
Znak se neechuje.
6.2.2
@GETKY 001 BH
Tento podprogram vrací číslo právě stisknuté klávesy v "ASCII" ·kódu, nebo
nulu pokud není stisknuta žádná klávesa, respektive klávesa, která nemá generovat
znak.
6.2.3 @GETKD OBCAH
Vrací číslo klávesy v display kódu nebo OFOH, pokud není nic stisknuto nebo
pokud je stisknuta klávesa, která ne má generovat znak. K převodu mezi kódem klávesnice a display kódem používá S tabulek:
OBEAH
žádná řídící klávesa
!KBD
!KBDS
OC2AH
s klávesou SHIFf
!KBDC
OC6AH
s klávesou CfRL
!KBDG
OCAAH
v grafickém režimu
!KBDGS
OCE9H
v grafickém režimu s klávesou SHIFf
6.2.4
@WGKEY 0830H
Počká cca 7 milisekund a zavolá KBDIN. Ničí BC.
6.2.5 @KBDIN OASOH
Podprogram, který provádí vlastní očtení klávesnice a vrací v registru B kód
odvozený z uspořádání kláves.
< kód > = < sloupec> * 8 + ( 7 - řádek )
Je-li stisknuto více kláves najednou, uvažuje první klávesu na kterou narazí.
Tento podprogram neobsahuje čekací smyčku.
19
Klávesnice
6.2.6
@BRKEY 001 EH
Otestuje klávesnici na existenci řídících povelii a zachová se podle tabulky:
Stav klávesnice·
Vrací se hodnoty·
Popis situace·
SHIFT BREAK CfRL
A
CY Z
yes
yes
OOH
O
1
SHIFT + BREAK
yes
no
40H
1
O
SHIFTznaky
no
yes
20H
1
O
CfRLznaky
no
yes
no
3FH
O O
<ESC>
no
no
no
7FH
O
O
běžné znaky
20
Magnetofon
7 Magnetofon
7.1
Připojení
CMT:
Magnetofon je připojen přes čtyři bity portu C obvodu 18255 (1!0 adresa PC
je OD2H resp. OE002H, CWR je na adrese OD3H resp. OE003H)
PCl
výstup
WRITE
PC2
výstup
MOTOR
PC4
vstup
SENSE
PCS
vstup
READ
READ a WRITE slouží pro čtení a zápis dat přes tvarovací obvody. SENSE
indikuje stav motoru. Je zde H, pokud je motor zapnutý, resp. pokud se otáči. Náběžná hrana na bit MOTOR přepne momentální stav motoru. Zapíná ho, pokud byl
vypnutý a naopak.
7.2
Fyzický formát záznamu.
Je použita frekvenční modulace s pruměrnou rychlostí okolo 1350 Baudfi.
Tvary a časové pruběhy signálfl znázorňuje tento obrázek:
nula
=
SHORT
241!
jednička
=
LOHG
471!
HIGH
LOW
READ POIHT:
Časy jsou uuedeny u Mikrosekundách
7-1 Fyzický formát záznamu
21
Magnetofon
7.3
Logický formát záznamu
Je popsán v tabulce. Není-li uvedeno jinak, jsou údaje uloženy v bytech, tzn.
jsou spojeny jedním START/STOP bitem typu LONG. Každý soubor se skládá ze
dvou částí: hlavičky a dat. Před hlavičkou i daty je odlišný "tape mark" pro rozlišení.
Mezi hlavičkou a daty se zastavuje magnetofon. Blok hlavičky i blok dat je uložen
vždy dvakrát. Před hlaÝičkou i blokem je cca 2 sekundy úroveň LOW.
22E!E!El
41'!
41'!
1
Zaváděcí
SHORT
LOHG
SHORT
LOHG
Tape .. ark
Tape .. ark
start bit
tón 1Els
128 bytů
2 byty
Kontrolní
Hlavička
l.část
2.část
(popsána
dále)
součet
1 LOHG
256 SHORT
stop bit
128 byty
2 byty
(podruhé ta stejná>
Kontrolní souCe:t
1 LOHG
oddělovač
druhého bloku
Hlavička
stop bit
7-2 Formát záznamu
11Elllll
21'!
21!
1
Zaváděcí
SHORT
LOHG
SHORT
LOHG
Tape .. ark
Tape .. ark
start bit
<n> bytů
2 byty
Kontrolní
hlavi čky
tón Ss
l.část
2.část
Data (délka je v
hlavičce)
součet
1 LOHG
256 SHORT
stop bit
(n) byt{,
2 byty
Data (podruhé ta stejná)
Rontrolní součet
1 LOHG
oddělovač
druhého bloku
stop bit
7-3 Formát záznamu bloku dat
22
Magnetofon
Tento formát podstatně snižuje rychlost záznamu a dokonce neill ani tak spo~
lehlivý jak by se zdálo. Praktické zkušenosti ukazují, že pokud se v prvním datovém
bloku vyskytne chyba, tak se stejně většinou nepodaří nahrát druhý blok. Je to pravděpodobně zpfisobeno tím, že obslužná rutina přijde na chybu až po přečtení kontrlolmno součtu. Jako kontrolní součet ale pravděpodobně přečte buď oddělovací
nuly mezi bloky nebo při větší chybě až druhý blok. Potom se na něj ani nemflže zasynchronizovat.
7.4
Hlavička
souboru
Ze 128 bytfi hlavičky souboru se využívá pouze 24, zbývajících 104 bytfl je ozjako komentář a mfiže být využito nestandardními soubory pro uchování
dalších dflležitých informací nebo zde mflže být krátký inicializační program.
Struktura hlavičky souboru:
1 byte
typ souboru
17 bytfi
název souboru ukončený CR, tedy maximálně 16 znakl'! jména
2 byty
délka souboru
2 byty
zaváděcí adresa
2 byty
startovací adresa
104 bytfl
není využito
načeno
Přehled přípon pro jednotlivé
Ol OBJ
02BTX
03BSD
04BRD
05 RB
00000
00 00 00
typy souborfl:
spustitelný program ve strojovém kódu
programy v BASlCu ve sbalené formě
07LIB
OASYS
OBGR
Ostatní kódy jsou považovány za nestandardní a jsou značeny příponou??? .
23
Magnetofon
7.5
Podprogramy pro práci s CMT:
Vstupní vektor MZ-700 monitoru zpřístupňuje pět základních služeb
WHEAD, WDATA, RHEAD, RDATA a VERIF. Existují také podprogramy pro
řízení CMT: a pro výstup či vstup bytu, bitu. U všech dále uvedených podprogramfl
platí, že chrání všechny registry kromě AF a pokud došlo k chybě vracejí nastavený
CY.
7.5.1
@WHEAD 0021H
Hlavičku souboru, která je v systémové oblasti od adresy HEAD (lOFOH)
nahraje na pásku.
7.5.2
@WDATA 0024H
Nahraje na pásku blok paměti podle informací obsažených v hlavičce, která je
uložena v systémové oblasti.
7.5.3
@RHEAD 0027H
Přečte hlavičku souboru a uloží ji do systémové oblasti.
7.5.4
@RDATA 002AH
Podle informací z hlavičky přečte program z pásky a ukládá ho na místo urče­
ní. Je-li uvedena v hlavičce jako délka souboru nula tato rutina se vrátí, aniž by se
snažila něco číst. Obdobně i WDATA neprovede žádnou akci, je-li nulová délka
bloku.
7.5.5
@VERIF 002DH
Porovná blok z pásky s blokem paměti podle informací uložených v hlavičce,
která je v systémové oblasti.
7.5.6
@RBLOK 050EH
Přečte z pásku blok dat o délce BC a uloží od adresy HL. Počítá kontrolní
součet a porovná ho s kontrolním součtem přečteným z pásky.
7.5.7
@VBLOK 05ADH
Porovná obsah bloku o délce BC, uloženého od adresy HL a blokem čteným
z pásku. Vytváří a porovná i kontrolní součet.
7.5.8
@CHECK 071AD
Vypočítá kontrolní součet bloku o délce BC, který je umístěn od adresy HL a
uloží ho na systémové adresy MGCRC (1197H) a MGCRCV (1199H). Kontrolním
součtem se rozumí počet bi~ových jedniček v souboru.
·
7 .5.9
@WBYTE 0767H
Zapíše na CMT byte uvedený bitem typu LONG.
7 .5.1 O @RBYTE 0624H
Přečte byte z pásky. Aktualizuje kontrolní součet na adrese MGCRC (1197H).
7~5.11
@MGO OA01 H
Zapíše bit typu SHORT.
7.5.12
@MG1 OA1AH
Zapíše bit typu LONG.
24'
Magnetofon
7 .5.13
@WTMRK 077 AH
Zapíše zaváděcí signál a TAPE MARK. V registru E očekává CHEAD
(OCCH) jako příznak hlavičky nebo cokoli jiného jako příznak datového bloku.
zaváděcí signál TAPE MARK
hlavička
22000 SHORT 40 LONG a 40 SHORT
datový blok
11000 SHORT 20 LONG a 20 SHORT
7.5.14
@RINTR OFE2H
Čeká na souvislou oblast aspoň 100 bitfi. typu SHOR'T na pásce. Používá se k
nalezení zaváděcího tónu.
7.5.15
@RTMRK 065BH
Počká
na zaváděcí signál a přečte TAPE MARK. V registru E očekává buď
CHEAD (OCCH) nebo cokoli jiného. (význam jako u WTMRK). Po přečteníTAPE
MARK počká na náběžnou hranu dalšího bitu.
7.5.16
@MGON 069FH
Pokusí se desetkrát zapnout CMT: a když zjistí, že mechanika není zapnuta,
napíše hlášení a čeká na její zapnutí nebo BREAK. V registru D se očekává
CWRITE (OD7H) jako příznak zápisu nebo cokoli jiného jako příznak čtení. (Má
význam pouze pro tvar hlášení, které žádá o zapnutí CMT:) Po zapnutí magnetofonu se čeká téměř 2 sekundy na ustálení chodu motoru.
7.5.17
@MGOFF 0700H
Desetkrát se pokusí vypnout magnetofon a když se to
7.5.18
nepodaří,
tak se vrátí.
WOT01 0601H
Počká na náběžnou hranu signálu z CMT:. Vrací CY = 1 pokud detekuje
BREAK. Očekává v BC a DE připravené adresy. (V BC KBDIN (OE001H) a v DE
PORTC (OE002H)).
25
Reálný čas
8
Reálnýčas
Reálný čas je udržován obvodem 18253. Tento obvod obsahuje tři na sobě nezávislé dekrementující čítače. Ke každému čítači je přiveden vstup hodinových signálfi a signál GA1E zabraňující čítání a vyveden výstup čítače.
18253 je dostupný v MZ-800 režimu na portech OD4H-OD7H. V režimuMZ700, ve kterém také pracují dále popisované podprogramy, je 18253 namapován.na
adresách OE004H-OE007H. Nejvyšší adresa je adresa řídícího slova, druhá nejvyšsí
je adresa CfC2, dále CfC1 a CfCO.
CfCO je užit k řízení akustických výstupfi, CfC1 a CfC2 jsou spojeny do kaskády tak, že výstup CfC1 je připojen na vstup CfC2. Na vstup CTC1 je přiveden
kmitočet řádkového televizru1w rozkladu o frekvenci 15611 Hz.
CTCl pracuje jako dělič kmitočtu. Na jeho výstupu je frekvence 1 Hz. CfC2
počítá počet sekund, které uplynuly od pt\.lnoci nebo od poledne. Jakmile CTC2 dočítá do nuly a je povoleno přerušení bitem PC2 18255, dojde k přeruš ení. Přerušovací
rutina změní příznak dopoledne/odpoledne a inicializuje CTC2. Kdyby se v
přerušovací rutině CTC2 neinicializovalo, došlo by k dalšímu přerušení ihned po
návratu z přerušovacího podprogramu.
8.1
Podprogramy pro práci s reálným časem
8.1.1
@Tl MST 0308H
Nastavení času, inicializace CTC1 a CTC2 18253. V DE registru očekává čas
v sekundách, který uplynul od začátku pfildne, v A registru příz nak 0/l = dopoledne/odpoledne.
8.1.2
@TIMRD 0358H
čtení aktuálního času. V DE registru vrací počet sekund uplynulých od začát­
ku dne, v A registru příznak dopoledne/odpoledne.
8.1.3
@CLOCK 038DH
Standardní rutina obsluhy přerušení. Nastavuje CTC2 na hodnotu 43200, což
je délka dvanácti hodin v sekundách. Dále rutina přepne příznak dopoledne/odpoledne. Aktivuje se s periodou 12 hodin.
ROM monitor pracuje v přerušovacím režimu 1M 1. Na adrese 38H je skok
do RAM na 1038H. Proto na této adrese musí vždy začínat rutina přerušení. Standardně je tam skok na @CLOCK
26
Akustický výstup
9 Akustický výstup
9.1
Řízení akustického výstupu
V zásadě existují tři možnosti řízení akustického výstupu:
1) Přímý výstup na PCO !8255
2) Nastavení periody tónu do !8253
3) Práce s PSG (SN76482)
Na tomto místě se zabýváme pouze zpftsoby 1) a 2), zpftsob 3) je podrobně
popsán ve firemním manuálu.
Tón je generován obvodem !8253 a to čítačem CTCO. Na vstup tohoto čítače
je přivedena frekvence 554202 Hz (frekvence krystalu/32). CTCO pracuje jako dělič
kmitočtu se stejnou střídou signálu (mód 3 !8253). Frekvence se do !8253 nastaví
následujícími instrukcemi:
LD
W
A,36H
mód 3 obvodu !8253
(OE007H),A nastavit mód a zastavit hudbu
LD
LD
LD
LD
DE,554202/ < freqence >
HL,OE004H adresa CTCO
(HL),E
dolní byte frekvence
(HL),D
horní byte frekvence
Na adrese OE008Hje signál GATEO, který zapíná a vypíná čítač.
XOR
LD
A
(OE008H),A povolit čítání
LD
LD
A,l
(OE008H),A povolit čítání
Aby se signál z !8253 dostal na AUDIO IN obvodu PSG,je nutné otevřít cestu
nastavením PCO. Toho lze využít i pro softwarové ovládání melodií, kdy se nespustí CTCO, ale softwarově kmitá s PCO.
27
Akustický výstup
9.2
Podprogramy pro akustický výstup
Všechny podprogramy nastavují periodu tónu do CTCO 18253, proto lze zahrát
jen jednoduché tóny. S PSG tyto podprogramy nepracují. Není zaručena ochrana
všech registrfi.
9.2.1
@MELDV 0030H
Zahraje melodii. Adresu vstuprn1l0 řetězce očekává v registru DE. Řetězec je
ukončen znakem CR nebo OC8H. Obsahuje definici not a jejich délek podle konvencí MZ 700 Basicu.
9.2.2
@MSTA 0044H
Zapne hraní hudby o periodě v proměnné FREQ (llAlH) a nechá ji hrát,
dokud nebude vypnuta rutinou MSTP.
9.2.3
@MSTP 0047H
Vypne všechny zvuky generované 18253, t.j. hudbu spuštěnou podprogramem
@MELDY nebo @MSTA.
9.2.4
@MELTB 031CH
Zpracuje jednu notu i s její délkou ze vstuprnno řetězce, adresovaného registrem DE. Registr DE se posune na další notu. Perioda noty je hledána v tabulce HL
a uložena do prom~nné FREQ (llAlH). Délka noty upravená podle nastaveného
tempa se vrací v C registru.
9.2.5
@MELW 028CH
Čeká až dohraje tón, délka čekání je v B registru.
9.2.6
@XTEMP 02E5H
Nastaví tempo melodie 0-7. Hodnotu templ\ očekává v A registru. Do
TEMPO (119EH) uloží hodnotu výrazu (8 - obsah A registru.)
proměnné
28
Akustický výstup
9.3
Tabulky melodií
Obsahují označeni not a periody, které se ukládají do 18253. Jedna tabulka je
pro normální noty, druhá pro noty označené znakem"#".
DEFB "C"
DEFW perioda noty C
DEFB "D"
DEFW perioda noty D
DEFB "R"
DEFW O
9.3.1
!MEL 026CH
Tabulka základních not
9.3.2
!MEL# 0284H
Tabulka zvýšených not
9.3.3
!MELEN 029CH
Tabulka délek not
DEFB 1,2,3,4,6,8, 12,16,24,32
29
Monitor 9Z-504M
1O Monitor 9Z-504M
Horní monitor obsahuje kromě příkazů shodných s dolním monitorem také
obsluhu RD:, FD: a QD:. Většina podprogramů pro realizaci příkazů je stejná jako
v dolním monitoru. Proto nejsou v horní části duplicitní rutiny podrobně komentovány.
Nejsou popsány ~akřka žádné záležitosti, které se týkají QD:. Máme pro to
mnoho různých důvodů, ale pokud by někdo cítil potřebu mít v tomto textu komentáře k této fantastické jednotce s obrovskou kapacitou a fantastickou přístupovou
rychlostí (64KB, průměrně 8 sekund, ale klidně až 20), tak nám je může poslat a mi
je sem doplníme.
Horní monitor je stavěn s ujasněnou koncepcí ovládání periferních zařízení.
Všechny soubory jsou standardně zaváděny od MG BASE (1200H) a dostávají při
svém spuštění v BC informaci o zařízení ze kterého byly odstartovány.
BC
periferie
OOOOH
RD: Sériová paměť
OlOOH
CMT: Magnetofon
0200H
FD: Floppy disk
0300H
QD: Quick disk
Ke spuštění programu slouží rutina ]GOPGM (OECFCH). Očekává v HL registru adresu tabulky souboru, která musí obsahovat délku, zaváděcí adresu a startovací adresu. V BC' je hodnota, která se má předat do spuštěného programu.
Program musí být uložen od MGBASE (1200H). Má-li se program vykonávat
na jiné adrese než MGBASE, je tam před spuštěním přesunut.
10.1
Přehled povelů horního monitoru
10.1.1
J
= Jump
Jxxxx, předá řízení na adresu xxxx
10.1.2
G
= Gosub
Gxxxx, uloží do zásobníku návratovou adresu do monitoru a předá
adresu xxxx.
10.1.3
Přečte
L
=
řízení
na
Load
program z CMT: a předá mu řízení. Program se ukládá od MG BASE
(1200H) a pak volá standardní spouštěcí rutinu, která se postará o jeho umístění v
paměti a spuštění.
30
Monitor 9Z-504M
10.1.4
F = Floppy disk
Pokusí se přečíst z diskety a spustit program, jehož název začíná IPLPRO ... a
jehož h l avička je na začátku diskety. (Jde vlastně o BOOT příslušného diskového
operačního systému).
10.1.5
B = Beep ON/OFF
Zapne nebo vypne akustický signál po stisku každé klávesy.
10.1.6 M = Modify
Mxxxx umožní měnit a prohlížet obsah paměti od adresy xxxx dále. Vykonávám se zruší klávesou BREAK. Pokus o zapsáni' nesprávné hodnoty je prostě ignorován a je očekáván vstup hodnoty správné.
10.1.7
S = Save
Uložení programu na pásku. Typ je Ol tedy OBJ.
10.1.8 V= Verify
Porovnání obsahu souboru se skutečným stavem paměti.
10.1.9
D = Dump
Dxxxxyyyy, výpis paměti v šestnáctkové soustavě a "ASCII". Implicitní hodnota počtu bytfi pro výpis je OOOAH.
10.2
Povely pro práci se SRAM
SRAMje vnější sériová paměť umožňující dočasné uschovárújednoho souboru. (Vlastně se jedná o RAM disk, který dovoluje sériový přístup k datfim, která jsou
na něm uložena)
10.2.1
ES = SRAM disk save
Přečtení programu z CMT: ve standardním formátu a uložení do sériové
paměti. Hlavička se redukuje na 8 bytů: délka, zav.adr., start,adr. a CRC hlavičky.
Bezprostředně za ní následuje program ukončený kontrolním součtem. Program je
z CMT: čten od adresy MG BASE (1200H) a teprve potom uložen do SRAM:
10.2.2
EB = SRAM disk load
Přečte program ze sériové paměti zavedený příkazem ES a spustí ho.
31
Monitor 9Z-504M
10.3
Povely pro práci s QUICK-diskem
QUICK-diskje sekvenční datová periferie pracující na principu magnetického záznamu dat na pružné disky. Kapacita jednoho média je 64 KB.
10.3.1
QL = QUICK-disk Load
Zeptá se na jméno souboru a přečte ho z QUICK-disku od adresy 1200H. Soubory jiného typu než OBJ číst neumí.
10.3.2
QS = QUICK-disk Save
Zeptá se na jméno programu, počáteční koncovou a zaváděcí adresu. Pokud
soubor uvedeného jména není na QUICK-disku, uloží ho za poslední nalezený soubor.
10.3.3
QF = QUICK-disk Format
Naformátování QUICK-disku. Všechna data z formátovaného média budou
ztracena. Příští příkaz QS ukládá od začátku disku.
10.3.4
QD = QUICK-disk Directory
Výpis adresáře QUICK-disku. Vypisuje jen typ a název souboru.
10.3.5
QC = QUICK-disk Copy
Kopíruje soubory QUICK-disk = = > QUICK-disk. Zeptá se na jméno souboru, nahraje ho od adresy 1200 a vyzve operátora k založení disku, na který se bude
soubor kopírovat.
10.3.6
QX = QUICK-disk Xcopy
Kopíruje soubory CMT: = = > QUICK-disk. Přečte soubor z magnetofonu
na adresu 1200, vypíše jeho název a zeptá se, jestli ho srní zkopírovat na QUICKdisk. Kopírování opačným směrem neexistuje.
32
IPL leader
11
IPL leader
IPL leader je umístěn od adresy OE800H a po zapnutí počítače nebo po
RESET je aktivován jako první. Provede příslušné inicializace periferních obvodfl
a nastaví režim MZ-700.
Pokud zjistí, že je stisknuta klávesa ·CfRL, tak namapuje RAM: přes celou
paměť a provede JP 0000.
Jinak nabídne M jako přechod do monitoru a C jako nahráíú a spuštění programu z CMT:. Pokud jsou připojeny QD: je nabídnuta i varianta Q pro spuštění
programu z QD:
Jsou-li připojeny FD: je automaticky proveden pokus o přečtení programu
jehož název začíná IPLPRO.
11.1
Služby pro kopírování programů
11.1.1
Přečte
@COPYL OE807H
soubor z CMT: a uloží ho od standardní
zaváděcí
adresy MGBASE
(1200H).
11.1.2
@COPYS OE80AH
Zapíše přečtený soubor zpět na CMT: . POZOR! není možné aktivovat dvakrát bezprostředně po sobě. COPYS naruší tabulku adres v hlavičce souboru. Každému volání COPYS musí tedy předcházet volání COPYL.
11.1.3
@COPYV
Porovná program uložený od MG BASE s programem na pásce.
33
Floppy.dlsk
12 Floppy disk
12.1
Připojení
FD:
Z rozboru softwaru vyplývá, že disk je připojen přes řadi~ WD 2795 nebo obdobný. Ovládá se přes tyto porty:
OD8H
příkazový registr
OD9H
registr stopy
registr sektoru
ODAH
registr dat
ODBH
zapínání a vypínání mechaniky
ODCH
ODDH
příznak vybrané strany-diskety v nultém bitu
12.2
Logický formát
@FDBOOT vyžaduje, aby byla v prvním sektoru nulté stopy standardní
souboru typu 03 =BSD, s názvem začínajícím IPLPRO. Na adrese
FDHEAD + 30 musí být číslo bloku, kde začíná program na disketě.
<Blok> = <stopa> • 16 + <sektor> -1
Další řízení diskových operací musí převzít nahraný program IPLPRO ..., který
mftže přizpfisobit logický formát pro jakýkoliv diskový operační systém.
hlavička
12.3
Podprogramy pro práci s FD:
Všechny podprogramy musí mít na standardní adrese FDARET (OCEFEH)
nastavenu adresu podprogramu pro ošetření chyb.
Struktura standardní tabulky pro práci s FD:
číslo disku
1 byte
číslo bloku od začátku disku
2 byty
2 byty
délka čtených dat v bytech
2 byty
závaděcí adresa
1 byte
číslo aktuální stopy
1 byte
číslo aktuálníbo sektoru
1 byte
počáteční stopa
1 byte
počáteční sektor
Adresa této tabulky se podprogramfim předává v lX registru.
34
Floppy disk
12.3.1
@FDBOOT OE44AH
Provede BOOT standardního programu z FD: a předá mu řízení. Pokud na
disketě nenalezne program IPLPRO ... , vrátí se s chybovým hlášením do monitoru.
Program, kterému bylo předáno řízení smí použít instrukce RET pro návrat do
monitoru.
12.3.2
@FOREAO OE5A7H
Přečte
z FD: soubor, podle informací uložených v tabulce, jejíž adresu
vá v IX. Néchrání registry.
12.3.3
@FOON
OE517H
Zapne motor diskové mechaniky a počká cca 960 milisekund. Do
FDON? (OCEFS) uloží jedni čku, jako příznak zapnutí disku.
12.3.4
očeká­
proměnné
@FOSEL OE40CH
Vybere a zapne disk, jehož číslo očekává na adrese IX+ O. Informace o tom,
který disk je vybrán jsou uloženy v tabulce !FDRES (OCEF6H). Nechrání registry.
12.3.5
@FOOESL OE530H
Vypne a odpojí všechny diskové mechaniky. Chrání všechny registry.
12.3.6
@FOTRO OE548H
Vystaví hlavičku na O. stopu.
12.3.7
@FOSTOP OE658H
Ukončí
operaci na FD:
12.3.8
@FOTR
OE61BH
Nastavení stopy podle A registru.
12.3.9
@FOSEC OE62BH
Nastavení sektoru a stopy podle tabulky, jejíž adresu
12.3.10
Provede
istr dat.
12.3.11
oče k ává
v IX registru.
@FOSEEK OE528H
př íkaz
SEEK
řadiče,
@FOTR?
musí být
správně
nastaven registr stopy a reg-
OE696H
Podle údaj ll z tabulky, jejíž adresa se předává v registru IX, provede výpočet
počátečního čísla stopy (vrací v H) a sektoru (vrací vL) a uloží na příslušná místa
do tabulky.
12.3.12
@FONEXT
Zvětší čís lo
sektor
čís lo
OE63CH
stopy, pokud detekuje, že je nastaven sektor
1. V IX je adresa tabulky.
číslo
17 a vybere
35
Floppydisk
12.3.13
@FDCMD OE555H
Vyšle z A registru
končení operace.
12.3.14
příkaz řadiči
FD a počká s time autem na potvrzení o do-
@FDSTRT OE64EH
Vyšle z A registru příkaz řadiči FD a počká s time autem na potvrzení o zahájení operace.
DWTl OE568HE = Čeká na FD ready.
12.3.15
@FDWT2 OE587H
Čeká na FD not ready.
12.3.16
???FD OE8D5H
Otestuje, zda jsou připojeny disky. Vrací Z= Opokud ne.
36
SRAM: Sériová paměť
13 SRAM: Sériová paměť
Připojení
13.1
SRAM: se
SRAM:
může
nacházet na I/0 adresách od OF8H nebo na adresách od
OA8H. V dalším textu předpokládám adresy OF8H.
SRAM: se plní a čte pouze sekvenčně, lze užívat jednoduché I/0 instrukce
nebo také instrukce INIR a OTIR.
IN A,(OFSH) Rewind neboli nastavení ukazatele současné pozice na začátek
SRAM:.
OUT (OFAH),A Zápis bytu z registru A do SRAM: na pozici ukazatele, ukazatel se zvětší o 1.
IN A,(OF9H) čtení bytu ze SRAM:, z pozice ukazatele, ukazatel zvětší o 1.
13.2
Podprogramy pro práci se SRAM:
V ROM je jen několik podprogramů a to těch, které jsou užity příkazy ES a
EB monitoru.
Všechny podprogramy očekávají v C registru I/0 adresu SRAM: (OF8H nebo
OA8H).
13.2.1
@???RD OE7BAH
Zjistí, je-li připojena SRAM. Jestliže není, nastaví CY.
13.2.2
@RDCRC OE70EH
Spočítá
kontrolní součet bloku o adrese DE a délce BC. Vrátí ho v registru
HL. Tento podprogram zničí i druhou sadu registrů .
13.2.3
@?HEAD OE729H
Zjistí, zda je ve SRAM: hlavička se správným kontrolním
vrací Z = 1, není-li tam, vrací Z = O.
13.2.4
Přečte
součtem .
Když je,
@RDLOAD OE6DAH
program ze SRAM: na adresu 1200H a spustí ho. Jestliže tam nebyl,
vrací Z= O.
37
QUICK-disk
14 QUICK-disk
QUICK-diskje řízen obvodem Z80-SIO, který je očekáván na adresách OF4HOF7H.
Kapacita 64 KB, rychlost přístupu kolem 8 sekund a sekvenční přístup . Takto
by se dal QUICK-disk stručně charakterizovat.
Periferií takových parametru jako je QUICK-disk se nemá vfibec smysl zabývat. Uvedené informace jsou proto velmi kusé.
14.1
Podprogramy pro práci s QUICK-diskem
14.1.1
@QDISK OE010H
Podprogram zprostředkující veškerý styk s uživatelem a QUICK-diskem. Jeho
funkce je určena příkazem v proměnné QDCMD (1130H):
ODCMD
1
kontrola připravenosti disku
2
formátovaní disku
čtení dat z disku
3
4
zápis dat na disk
čtecí hlavu na začátek disku
5
6
vypnutí QUICK-disku
V proměnné QDPAR (1131H) dostává bližší informace.
14.1.2
@MTON OE29BH
Zapne motor,
14.1.3
prečte číslo
souboru a CRC.
@MTOFF OE2E8H
Vypne motor QUICK-disku
14.1.4
Přečte
14.1.5
@QDCRC OE3C3H
CRC a zkontroluje ho.
@EOMSG OE3B2H
Uloží koncový záznam souboru a CRC.
14.1.6
Přečte
14.1.7
@QRBYT OE3FOH
byte z QUICK-disku do registru A
@QWBYT OE3DBH
Zapíše byte z registru A na QUICK-disk.
38
Podpora BASICu .
15 Podpora BASICu
Interpretr Basicu MZ-800 není zcela samostatný a nezávislý na obsahu pamě­
ti ROM. Z dolní části monitoru využívá rutiny ADCN a DACN, dále pak tabulky
klávesnice !KBD, !KBDC, !KBDG, !KBDGS. Horní část paměti ROM od adresy
OF400H do konce je určena výhradně pro použití Basicem. Obsahuje tyto rutiny:
- práce s bufferovanou tiskárnou
- přístup k RD:
- nastavení a čtení reálného času
- obsluha joysticku (i simulovaného klávesnicí)
- podprogram pro přímý výstup na tiskárnu
Podprogramy předpokládají, že budou pracovat v režimu MZ-800. Práce se
simulovaným joystickem a s reálným časem není v režimu MZ-700 provozuschopná vůbec.
Od adresy OFDAOH do konce paměti jsou urÍústěny chybové zprávy Basicu.
Jednotlivé textové řetězce navazují těsně za sebe. Začátek řetězce je indikován nastavením osmého bitu prvního znaku. Texty obsahují jen velká písmena, pro přechod
od velkých k malým je v řetězci zařazen znak 05H. Každé chybové zprávě je
přiřazeno číslo chyby totožné s pořadím zprávy v seznamu (počítáno od 1).
39
Tiskárna
16 Tiskárna
16.1
Připojení LPT:
Tiskárna je připojena přes Z80-PIO. Port A je využit pro řídící signály tiskárny, port B pro přenos dat. Při převzetí znaku tiskárnou lze vyvolat přerušení
prostřednictvím obvodu PIO v libovolném přerušovacím režimu· procesoru. Toto
přerušení obvykle vede k vyslání dalšího znaku na tiskárnu z výstupní fronty.
16.2
Obsloužení chyb
Při práci s tiskárnou mfiže docházet k chybovým stavfim. Proto si každý program. před voláním dále popisovaných podprogramfi musí nastavit adresu podprogramu pro obsluhu chyb na adresu ERRSP (12A8H). Po chybovém návratu má SP
hodnotu 12AAH, proto je vhodné nejdříve zásobníK: obnovit.
Rutina obsluhy chyb dostane na adrese ERRFLG (13D9H) typ chyby:
OFFH to je skutečně chyba, její číslo je v registru A. (Je shodné s číslováním
chyb v BASlCu)
OlH detekován stiskSHIFT + BREAK při @HCOPY, jiný podprogram na
break nereaguje.
02H tento návrat nastane z příkazu INIT "LPT:M2", pokud už byl nastaven
bufferovaný tisk. Obsluhu tohoto parametru si musí udělat volající program sám.
16.3
Podprogramy pro práci s LPT:
Vstupní vektor na adrese OF400H obsahuje všechny dfiležité podprogramy pro
práci s bufferovanou tiskárnou. Podprogramy většinou chrání všechny registry
kromě AF, jak je patrno z výpisu programu~ Dále popisujeme i některé podprogramy, které nejsou obsaženy ve vstupním vektoru, ale mohou být užitečné. Bez
RD: nelze bufferovaný tisk použít.
·
40
Tiskárna
16.3.1
@INLPT OF418H
rutina tiskárny. Na adrese HLPAR (12AEH) očekává adresu
zbytku řetězce příkazu INIT "LPT: ... Parametry Ma S jsou popsány ve firemním
manuálu, parametr Q má následující význam:
O. bit = 1 po odeslání znaku na tiskárnu se nečeká, až tiskárna znak převezme.
O. bit = O čeká se na převzetí znaku tiskárnou (i v přerušovací rutině)
l.bit logika signálu IRT 0/1 = pozitivní/negativní
i. bit logika signálu RDP Oll = pozitivní/negativní
Je-li v příkazu užit p arametr Q nebo MO, dojde k inicializaci výstupní fronty.
16.3.2
@INICF OF41 EH
Inicializuje výstupní frontu tiskárny. Adresu počátku fronty najde na adrese O
a 1 v RAM disku, konec fronty je vždy OFFFFH.
16.3.3
@PSTR OF8F1H
Pošle řetězec znaldl na tiskárnu. Rutina má speciální volání:
CALL @PSTR
DEFB <počet bytů>
DEFB < l.byte >, < 2.byte > , .... < n.byte >
16.3.4
PCHR1,PCHR2 OF412H,OF415H
Výstup znaku na tiskárnu s konverzí podle typu tiskárny. Obě volání se téměř
netiší. V případě tisku na ASCII tiskárnu se očekává v IY registru adresa rutiny pro
převod znaku do ASCII. Návrat z této uživatelské rutiny se provede instrukcí JP
(IX). To má tu výhodu, že lze použít rutin v ROM pro jakoukoli tiskárnu.
16.3.5
@CRLPT OF41 BH
Pošle znak CR definovaný rutinou INLPT na tiskárnu
16.3.6 @SLPT OF634H
Pošle mezeru na LPT:
16.3.7
@BTLPT OF41BH
Znak z registru A bez jakékoli konverze pošle na LPT: nebo ho uloží do výstupní fronty. Všechny výše popsané rutiny volají pro vlastní výstup znaku tento podprogram.
16.3.8
@BTLP1 OF636H
Chová se stejně jako rutina BTLPT, jenomže neschovává registry do zásobníku.
16.3.9
@BTLP2 OF637H
Pošle znak z B registru na LPT:, chrání jen indexregistry.
16.3.10
@INTP OF400H
Rutina obsluhy přerušení od LYr:. Je-li ve frontě znak a není-li tisk pozastaven rutinou @SSLPT, pošle ho na LPT: a očekává další přerušení. Nechrání registry.
16.3.11
@INTPX OF6BEH
Obslužná rutina tiskárny s ochranou registru.
16.3.12
@LPTSS OF421H
Pozastaví výstup znakfi z bufferu na tiskárnu
Inicializační
41
Tiskárna
16.3.13
@LPTGO OF424H
Obnoví tisk pozastavený podprogramem @LPTSS
16.3.14
@SSGO OF427H
Pozastavi: nebo obnoví tisk v závislosti na předchozím stavu.
16.3.15
@NOBUF OF42AH
Bufferovaný tisk přepne na nebufferovaný. Znaky ve frontě vystupují dál na
tiskárnu mezi novými znaky. Proto je potřeba po zavolání @NOBUF počkat, až se
fronta vyprázdní.
16.3.16
@PLNA? OF6BOH
Nastaví CY, když není místo v bufferu tiskárny. V opačném případě ho nuluje.
16.3.17
@BTISK OF6FOH
Pošle znak na tiskárnu přímo z A registru. Předpokládá, že tiskárna je zapnuta a připravena přjmout znak.
16.3.18
@PSTBO OF705H
Shodí signál "data platná".
16.3.19
@PSTB OF706H
Nastaví nebo nuluje signál "data platná". Respektuje pozitivní nebo negativní
logiku nastavenou parametrem Q v příkazu INIT.
16.3.20
@PSTAT OF70FH
Zajistí, aby tiskárna byla připravena přijmout znak. Jestliže se tiskárna do tolika sekund, kolik je definováno proměnnou PTO (1094H) neozve, končí chybou.
Tento podprogram je volán vždy při posílaní znaku na tiskárnu.
16.3.21
@HCOPY OF40FH
Opíše obsah obrazovky v režimu MZ-800 na tiskárnu MZ-80P5/K/. Jinou tiskárnu ignoruje.
16.3.22
@PBYTE OF436H
Pošle byte z registru A přímo na tiskárnu. Není-li tiskárna schopna pracovat,
vrací v registru A hodnotu OFFH, převezme-li tiskárna znak, vrací nulu.
Tato rutina je zcela samostatná. Nesouvisí z výše popsanými rutinami, nespolupracuje s výstupním bufferem, parametr Q v příkazu INIT nemá na činnost tohoto podprogramu vliv. Logika řídících signálfi se musí nastavit přepínači na zadní
stěně počítače.
42
RAM disk pro Basic
17 RAM disk pro Basic
Rutiny pro práci s bufferovanou tiskárnou používají pro svfij buffer RD:. Kapacita tohoto média je 64 kB, přístupová doba k jednomu bytu je několik mikrosekund. Dolní část RD: se využívá na soubory Basicu, v horní části je buffer tiskárny.
Mezní adresa, t.j. adresa prvního bytu v bufferu, je na adrese Ov RD:. Zde popisované rutiny jsou využity jen pro LPT:, v Basicu jsou napsány identické rutiny pro
práci se soubory.
17.1
Připojení
RD:
OEBH registr dolní části adresy, horní část adresy se posílá při adresaci portu
OEBH v horní části adresové sběrnice procesoru. Proto se musí RD: adresovat přes
BC registr.
OEAH port pro vstup a výstup dat z a na RD:
17.2
Podprogramy pro řízení RAM disku
17.2.1
@RDOA OF743H
Výstup bytu z registru A na adresu HL.
17.2.2
@RDIA OF74EH
Vstup bytu z adresy HL do registru A.
17.2.3
@RDODE OF759H
Výstup slova z registru DE na adresu HL.
17.2.4
@RDIDE OF759H'
Vstup slova z adresy HL do registru DE.
43
Nastavenf reálného
času
18 Nastavení reálného
času
Čas se nastavuje do obvodu 18253 způsobem popsaným v kapitole Reálný čas.
Rozdíl je v adresování 18253. V následujících rutinách se používá adresování instrukcemi vstupu a výstupu. Proto je nelze použít v režimu MZ-700.
Formát nastavovaného a čteného času: DE = čas v sekundách od začátku
pftldne A = příznak dopoledne/odpoledne = Oll
Nastavovaný čas se uloží do tříbytového prostoru v RAM. 18253 začíná čítat
od nuly. Uložený čas se potom použije ke korekci při čtení času . Tento systém má
tu výhodu, že lze bez problémft mít k dispozici několik časft.
18.1
Podprogramy pro práci s reálným časem
18.1.1
@TMSTX OF433H
N astaví reálný čas. V HL očekává adresu tříbytové položky v RAM pro uložení
času .
18.1.2
@TMGTX OF436H
Čte čas. V HL je totéž co u @TMSTX.
18.1.3
@TMSET OF436H
Nastaví čas. Adresa úschovy
18.1.4
Získá
@TMSET.
44
čas.
časuje
1366H.
@TMGET OF406H
Na adrese 1366H očekává
počáteční čas,
uložený podprogramem
Obsluha joysticku
19 Obsluha joysticku
19.1
Připojení
joysticku
Joysticky jsou k počítači připojeny prostřednictvím portil na adresách OF1H
respektive OF2H. Po provedení instrukce IN A,(port) dostaneme do registru A
obraz stisknutých spínačil. Jednička odpovídá stisknutému spínači.
bit O
dolil
bit 1
nahoru
bit 2
doprava
bit 3
doleva
bit 4
trigger
Aby mohl být joystick otestován, musí být vybrán bitem A5 respektive A6
18255.
19.2
Podprogramy pro joystick
Podprogramy v ROM jsou přímou vazbou na příkazy Basicu STICK a STRIG.
V registru A očekávají číslo joystiku jako v Basicu:
O = simulovaný na klávesnici
1 = joystick číslo 1 (1!0 adresa OFOH)
2 = joystick číslo 2 (1!0 adresa OF1H)
45
Obsluha joysticku
19.2.1
@STICK OF409H
V registru A vrací stav joystick:ti Oaž 8 podle následujícího schématu. Když je
ovládací páka v klidu, vrací nulu.
Data přečtená z portfl jsou ale v jiném formátu. Pro konverzi
se použije šestnáctibytová tabulka !JOY12 (OFAlDH) pro skutečný
joystick nebo !JOYO (OFA2DH) pro joystick simulovaný:
19.2.2
@STRJG OF49CH
V registru A vrací stav tlačítka "trigger".
O .. trigger nestisknut
1 .. trigger stisknut
19.2.3
@JOYIN OF9FFH
Přečte byte z portu OFOH resp. OFlH je-li hodnota A registru 1 nebo 2. Simulovaný joystick (číslo O) neobsluhuje.
19.2.4
@KBLIN OFA15H
Přečte sloupec matice klávesnice. V registru A očekává číslo tohoto slopce ve
spodních čtyřech bitech. Přečtený byte vrací v registru A. (Užíváno pro simulovaný
joystick)
46
Užitečné
20
Užitečné
podprogramy
podprogramy
V oblasti nad OF400H se nachází některé podprogramy, pokusíme se o struč­
ný přehled těch, které mohou být užitečné.
Také je zde soubor chybových hlášení BASlCu. Proč je v ROM něco takového to ví jen pracovníci firmy SHARP.
20.1
Obecně užitečné
podprogramy.
20.1.1
@BEEPD OF430H
Akustický signál o frekvenci 545 Hz s délkou v registru D.
< Délka v milisekundách > = D * 2.3
20.1.2
@NUMB OF76FH
Převede číslo zapsané ASCII v dekadické nebo šestnáctkové soustavě do
vnitřnfho binárru110 vyjádření. Adresa na řetězec čísel je v HL registru, výsledek se
uloží do DE registru. HL pak ukazuje na následující byte za číslem. Veškeré mezery
se ignorují.
20.1.3
@NIBLH OF7BAH
Převede hexa číslici v ASCII v A registru do binárnJho kódu.
20.1.4
@SKIP OF7CAH
Přeskočí všechny mezery v řetězci o adrese HL.
20.1.5
@FNDA OF737H
První nemezerový znak v řetězci HL porovná se zadaným znakem a nastaví
flagy. Když se znaky neshodují, ukazuje HL na něj, v opačném případě na znak následující.
Přfklad volání:
CALL FNDA
DEFB <znak >
47
Užitečné
podprogramy
20.1.6
@OUTY OF940H
Pošle B bytfi na porty podle tabulky s adresou HL.
Tabulka má délku 2 • B byti'l a následující strukturu:
DEFB < datal >, < portl >
DEFB < data2 >, < port2 >
DEFB < dataB >, < portB >
Po skončení podprogramu ukazuje HL za tabulku
20.1.7
@SUBDE OF9D2H
Je-li HL větší než DE, tak HL od DE odečte.
Vždy přepne nultý bit registru A. (používáno v podprogramech pro reálný čas).
20.1.8
@ADDHL OF44CH
HL <--HL+ A.
20.1.9
@PUSHA OF45AH
Uklidí registry včetně AF.
Při návratu přes RET registry opět obnoví.
Ničí registr IX.
20.1.10
@PUSH OF467H
Uklidí registry kromě AF.
Při návratu přes RET registry opět obnoví.
Ničí registr IX.
48
Užitečné
podprogramy
Texty umístěné od OFDAOH
20.2
číslo
adresa
l:b:lb:l
t~tll
1
2
3
4
5
6
7
8
9
10
ll
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
FDAO
FDA7
FDBl
FDBE
FDCC
FDDA
FDEA
FDF5
FEOO
FE01
FEOF
FE17
FE26
FE2A
FE30
FE41
FE4E
FE5A
FE6C
FE78
FE86
FE8C
FE8F
FE90
FE94
FE9F
FEAO
FEA1
FEAB
FEB3
FEBB
FEC2
FEC3
FEC4
FEC5
FEC6
FEC7
FEC8
FEC9
t~xt
Syntax
Over flow
Illegal data
Type mismatch
String length
Memory capacity
Array def.
Linelength
GOSUB nesting
FOR-NEXT
DEF FN nesting
NEXT
RETURN
Un def. function
Un def.line
Can'tCONT
Memory protection
Instruction
Can't RESUME
RESUME
PAL
READ
SWAP!evel
Systemid
Framing
Overrun
Parity
49
Užitečné
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
50
podprogramy
FECA
FED9
FEE2
FEFO
FEFD
FF06
FF07
FF15
FF16
FF17
FF18
FF22
FF31
FF3F
FF4D
FF56
FF64
FF65
FF66
FF70
FF7E
FF8F
FFAO
FFAl
FFAD
FFBC
FFCA
FFCB
FFCC
FFD6
FFE2
FFEC
Pile not found
Hardware
Already exist
Already open
Notopen
Write protect
Not ready
Too many files
Disk mismatch
No file space
Unformat
Too long file
Dev. narne
Can't execute
Illegal filename
Illegal filemode
Out offile
Logical number
LPT:Not ready
Dev. mode
Unprintable
Check sum
84.10.08 Vl.OC
Grafický mód zobrazeni
21 Grafický mód zobrazení
21.1
Úvod
Tento díl se jako jediný zabývá problematikou, která není standardně obsluhována softwarem v paměti EPROM. Rozhodli jsme se tomu věnovat podrobněji
také proto, protože obrazovka je základní periferií, zprostředkující styk mezi počí­
tačem a uživatelem.
Jsou zde všechny doposud známé informace o videoprocesoru, obrazovkové
paměti a práci s nimi. Po prostudování tohoto textu by uživatelé měli být schopni
efektivně využívat všech vymožeností práce s obrazovkou.
V úvodu do problematiky zobrazování je nutné si položit tři základní otázky:
1) Jaká data musí být v obrazové paměti, aby na obrazovce bylo to co potřebujeme?
2) Jak softwarově zařídit, aby se data do obrazovkové paměti dostala?
3) Jak softwarově zjistit, co je ve videopaměti?
Nejprve se zabýváme problémem 1) v kapitolách o organizaci obrazovky. V
kapitolách zápis a čtení se zabýváme strukturou přístupu k obrazovce. Nakonec
uvádíme kapitoly, ve kterých je ukázáno praktické využití schopností videoprocesoru, jednak při práci s grafikou a jednak při práci s texty.
21.2
Organizace obrazovky
V MZ-800 módu je obrazovka organizována zcela odlišně než tomu bylo u
MZ-700. Obrazovka je plně grafická, lze zobrazit současně až 16 barev. Matice grafické obrazovky má rozměr 320 x 200 bodft, respektive 640 x 200 bodfi podle nastaveného režimu.Tomu odpovídá možnost jednoduše"zobrazovat 25 řádkft textu o 40
respektive 80 znacích. Každý bod mftže nabývat libovolné barvy nezávisle na ostatních bodech. Počet barev, které mftžeme současně vidět na obrazovce se pohybuje
v rozmezí 2 až 16. Závisí jednak na velikosti rastru a jednak na velikosti VRAM
(video RAM). Standardní MZ-800 totiž nemá nainstalovanou celou VRAM, ale jen
její polovinu. Pokud pracuje obrazovka v režimu, ve kterém je možné zobrazit současně 2 r:ebo 4 barvy, lze je vybrat z 16 mož~ých: z~adní aditivní: ~ERVENÁ,
ZELENA, MODRA, základní subtraktivní: ZLUTA, PURPUROVA, AZUROVÁ, neutr<11ní: BÍLÁ, ČERNÁ a tyto barvy mohou být buď tmav~ nebo světlé .
Sl
Grafický mód zobrazen[
21.3
Obrazovková paměť
Obsah obrazovky je uložen ve video paměti RAM, realizované dvěma nebo
integrovanými obvody 4416. V dalším textu budeme tuto paměť označovat
symbolem "VRAM".
O její obsluhu, včetně oživování se stará podle pokynfi procesoru zákaznický
obvod GDG.
čtyřmi
21.4
Videoprocesor GDG
GDG je 100-pino,vý zákaznický obvod LSI plnící všechny funkce týkající se
mapování paměti, práce se zobrazováním atd. GDG je přístupný instrukcemi IN a
OUT na patřičných adresách, popsaných v příslušných kapitolách. Zde se budeme
zabývat jen funkcemi, které jsou zajímavé z hlediska řízení obrazovky.
21.5
Seznam 1/0 adres videoprocesoru
Seznam obsahuje všechny adresy, používané při práci s VRAM. Ty porty, které
mají uvedenou vyšší hodnotu adresy je nutné adresovat šestnáctibitově pomocí registru BC.
I/0 adresa
funkce
"Write format register" (WF)
-- CC OUT
--CD OUT
"Read format register" (RF)
"Display mode register" (DMD)
--CE OUT
--CE IN
"Status read register"
OlCF OUT
"SeroU offset register low" (SOFl), 8 bitfi
"Scroll offset register high" (SOF2), 2 bity
02CF OUT
03CF OUT
"Scroll width register", 7 bitfi
04CF OUT
"SeroU start adress register" (SSA), 7 bitfi
"Scroll ehd adress register (SEA), 7 bitfi
05CF OUT
"Border color register" (BCOL), 4 bity
06CF OUT
07CF OUT
"Superimpose bit" (D7) (CKSW),l bit
--FO OUT
"Pallet register"
-- El IN/OUT Odmapování VRAM/mapování horní ROM
-- EO IN/OUT Namapování VRAM/odmapování generátoru znakfi a
dolní ROM
52
Grafický mód zobrazen[
21.6
Organizace VRAM
21.6.1
Kapacita VRAM, standardní a rozšířená VRAM
Kapacita VRAM je maximálně 32 KB, ve standardní verzi MZ-821 je však instalováno jen 16 KB. Paměť je rozdělena do dvou sad A,B zvaných "frame":
sada A ....... standardně nainstalovaná
sada B ........ rozšíření VRAM
Pojem sada A a sada B má fyzické opodstatnění, slouží k rozlišeni standardně
nainstalované a rozšířené paměti. Není-li počítač doplněn o dva integrované obvody
IO 4416, neexistuje sada B.
21.6.2 Rozdělení VRAM do rovin
Kromě fyzického rozdělení VRAM na sady, lze paměť logicky ještě rozdělit
. na tzv. "roviny" (plane). Počet, uspořádání a velikost rovin je určující pro počet barev
naráz zobrazitelných na obrazovce a počet bodft na řádku. Konfigurace rovin se nastavuje s definicí režimu obrazovky (viz. 4.7). Maximální počet rovin je 4. Označují
se římskými číslicemi I, ll, Ill a IV.
Velikost roviny závisí na módu, ve kterém se obrazovka nachází:
·
- mód
velikost roviny
- 320 X 200
8 KB
16 KB
- 640 X 200
I
I
I
IU
II I
.II
J.
J.
0
0
-
32:9 X
649
X
2:90:
299:
9FFFH
BFFFH
-
-
-
základ.ni
- - ba:rva 3
-
zakladni
- barya ~
z.cikladn1
- ba:rva l.
21-1 Princip rozloženi rovin VRAM
Číslice 1100 uvnitř rovin znázorňují nějaký bod, kód jeho barvy je 12 =101GB
21.6.3 Adresování VRAM
První adresa VRAM je 8000H, poslední závisí na počtu zobrazovaných bodft
na řádku. Všechny roviny začínají i končí na stejných adresách, to znamená, že jedné
adrese přísluší jeden byte v každé rovině .
Každá rovina pokrývá celou obrazovku a sama o sobě určujé její obsah pouze
dvoubarevně. Barevnosti se dosahuje kombinací dat z více rovin.
53
Grafický mód zobrazenf
Každému bodu obrazovky, přísluší jeden bit každé roviny, to znamená, že
každý bod je určen tolika bity, kolik je v daném módu rovin. (N apříklad: 4 roviny
= = > 16 barev, protože 2" 4 = 16)
Jeden byte z každé roviny je zobrazen jako vodorovná osmice bodfi. Nejnižší
bit bytu je vlevo a nejvysší vpravo, což je v rozporu s vžitými konvencemi. Proto se
při předělávání programft z jiných počítačfi musí byty zapisované do VRAM otočit.
Byty jsou uspořádány souvisle po mikrořádcích až do vyčerpání celé obrazovky. Rozložení adres v každé rovině je znázorněno na následujících tabulkách:
Adresování VRAM v módech 320 x 200
o
1
2
3
39
8000H
8001H
8002H
- o
8003H ..... 8027H
8028H
8029H
802AH
- 1
802BH ..... 8050H
-
199
9F18H
9F19H
9F1A
Adresování VRAM v módech 640 x 200
o
1
2
- o
8000H
8001H
8002H
8050H
8051H
8052H
- 1
9F1BH ..... 9F3FH
3
9
8003H ... 804FH
8053H ... 809FH
BE30H
BE31H BE32H
BE33H ....BE7FH
- 199
Na obrazovce se z každé roviny zobrazuje 8000 resp. 16000 bytft. Zbylých 19:'
resp. 284 bytft není využito.
21.6.4 Logické a fyzické číslo barvy
Logické číslo barvy
Kdyby jednomu bodu příslušel 1 bit, mohl by bod nabývat pouze dvou barev.
Proto je VRAM rozdělena do již zmíněných rovin. Když se k některému bodu
vybere z každé roviny po jednom bitu, vznikne uspořádaná čtveřice (nebo jen dvojice) bitft, kterou lze považovat za binární číslo. Takto získané číslo vyjadřuje KÓD
PALETY (viz. 4.10), tedy logické číslo barvy.
Fyzické číslo baryy
Fyzické číslo barvy je číslo neoddělitelně spojené s danou barvou. Lze jej obdržet z tabulky v kapitole 4.10. Každému kódu palety (logickému číslu barvy) je
zvláštním mechanismem (viz: 4.10) přiřazena skutečná barva, která bude svítit na
obrazovce (fyzické číslo barvy).
O této možnosti se budeme bavit až v kapitole 4.10. Bude-li v jiných kapitolách řeč o barvě nebo o čísle barvy, rozumíme tím logické číslo barvy neboli kód
palety. Barvou pozadí se myslí vždy barva s kódem palety O, bez ohledu na to, jak je
nastaven PAL.
21.6.5 Definice režimu obrazovky
Již v úvodu bylo řečeno, že lze pro obrazovku definovat několik režimfi,
lišících se ve velikosti rastru, počtu barev a velikosti používané VRAM. K definici
54
Grafický mód zobrazenf
režimu slouží osmibitový registr DMD dostupný instrukcí OUT (OCEH),A. Čtení z
registru nevrátí zapsanou hodnotu, ale status obrazovky (viz. 4.12).
Přehled módft DMD
- rastr
display DMD
registr
roviny
I,II
4 barvy A
III,IV
- 320x 200
1
4 barvy B .
I,II,III,IV
16barev AB
2
o
-
640x 200
-
MZ-700
4
5
2barvy A
2barvy B
4 barvy AB
6
I
HI
I,III
data,atb,CGRAM 8
Tabulka uvádí všechny známé a možné kódy, ktere lze zapsat do registru
DMD. Dále je z ní patrná velikost obrazovky, počet barev a používané roviny.
Režim se nastavuje ještě před zahájením práce s obrazovkou, a pak už se až
na výjimky nemění. Jediná přípustná změna je střídání mód ft O, 1 resp. 4,5, tzv. alternující režim práce.
Po nastavení režimu je vhodné okamžitě smazat celou VRAM, protože se
změní poměry v adresování.
Pozn:
Protože registr DMD určuj e jen mód obrazovky, budeme symbolem DMD označovat i tento mód. Z
kontextu je zřejmé, zda se jedná o označení registru nebo módu.
Bude-li v některých případech lhostejný počet barev, ale důležitá velikost obrazovky, budeme říkat
"módy 320 x 200" resp. "módy 640 x 200", rozumí se tún jeden z DMD 0,1,2 resp. DMD 4,5,6.
21.6.6
Přehled jednotlivých režimů obrazovky (DMD)
V tomto odstavci jsou stručně popsány jednotlivé módy DMD. Ke každému
módu je nakreslen názorný obrázek, ze kterého je vidět uspořádání rovin v paměti
i na obrazovce. Adresy uvedené v rozích jedné z rovin jsou společné pro všechny zobrazené roviny.
I
II
8999H
8928H
9F18H
9F3FH
f---
21-2 DMD O- 320x200, 4 barvy, sada A
VRAM je organizována do dvou rovin (I a II), obě roviny jsou ze sady A. Sada
B se nevyužívá. Barva je z intervalu < 0,3 > .
SS
Grafický mód zobrazen[
IU
I
III
800BH
8028H
9F3FH
9F1.8H
f---
21-3 DMD 1-320 x 200,4 barvy, sada B
·---
.
Stejný případ jako A, s tím rozdílem, že se zobrazuje sada B (rozšířená paměť,
jestliže ji nemáte, budete mít stále bílou obrazovku)
J
I
8000H
IU
I
II I
II
8028H
f--
r--9F~8H
9F3FH
f--
21-4 DMD 2-320 x 200, 16 barev,
obě
sady
VRAMje organizována ve čtyřech rovinách (I, II, III, IV). To dává dohromady
šestnáct kombinací a tedy 16 barev. Barva je z intervalu ,15.
["
804FH
BE3BH
BE7FH
21-5 DMD 4-640 x 200,2 barvy, sada A
VRAMje celá zobrazena jen do jedné roviny v sadě A. Ta má velikost 16 KB,
což je dvojnásobek než v módech O, 1, 2. Sadu B lze obdobně jako v módu Ovyužít
za jiným účelem.
8000H
III
BE7FH
BE30H
21-6 DMD 5 - 640 x 200,2 barvy, sada B
56
804FH
Grafický mód zobrazen!
Grafika je stejná jako v minulém případě, zobrazuje se však sada B. Sada A se
nevyužívá.
8909H
I.II
I
Bfii4FH
BE?FH
BE3fiiH
21-7 DMD 6- 640x200, 4 barvy,
obě
sady
VRAMje rozdělena do dvou rovin: I a III, (ta trojka není překlep, ale skuteč­
nost). Rovina I je v sadě A, rovina III v sadě B. Jejich velikost je stejná jako v režimec~ 4 a 5 Využívá se celá VRAM pro grafiku.
21.7
Zápis dat do VRAM
Doposud jsme popisovali jakým zpfisobem se obrazovka chová a co na ní
mfižeme a nemfižeme vidět, nyrú pojednáme stručně o všech zpfisobech zápisu a
kreslerú.
21.7 .1
Mapování VRAM
VRAM je za normálních okolností schována před zraky programátora. Její
zpřístupněrú se provede instrukcí:
IN A,(OEOH)
Od tohoto okamžiku je od adresy 8000H po adresu 9FFFH v módech 320 x
200 a po adresu OBFFFH v módech 640 x 200 videopaměť. Zároveň s rú se na adresy lOOOH-lFFFH namapuje ROM generátor znakfi. Program, obsluhující obrazov~
ku samozřejmě nesrrú být na uvedených adresách a také by zde neměl rrút zásobnfk.
Před
návratem z kreslící rutiny se nesmf zapomenout VRAM odmapovat in-
stukcí:
IN A,(OE1H)
Touto instrukcí se obnoví pfivodrú obsah paměti na adresách 8000H-9FFFH
resp. OBFFFH a na adresách lOOOH-lFFFH. Před další prací s VRAM je nutné ji
opět namapovat instrukcí IN A,(OEOH).
Provederú popsaných instrukcí nerú vidět na obrazovce.
57
Grafický mód zobrazeni
21.7 .2
Přístup do VRAM
Data se do VRAM zapisují po jejím namapování normálními instrukcemi pro
práci s operační pamětí. Na rozdíl od běžné paměti se data nezapisují přímo, ale
prostřednictvím videoprocesoru GDG, který data nezapisuje a ani nemfiže zapisovat tak jak jsou, ale musí provést nějaké konverze. Jaké konverze se mají provádět
je určeno jednak módem a jednak speciálním registrem zvaným "Write format register" WF (OCCH).
21.7.3 WF registr
WF registr je 8-bitový registr videoprocesoru. Jeho obsah definuje roviny do
kterých se zapisuje a zpfisob, jakým se zapisuje.
5
6
7
WMD
3
IU
w:ri te Mode
2
.1
pallete code
III
ll
21-8 WF "Write format register"
WMD .... mód zápisu do VRAM (0-7) -určuje druh konverze, kterým budou
procházet zapisovaná data. Symbolem "WMD" označujeme jak část WF registru,
nesoucí informaci o módu zápisu, tak vlastní mód zápisu. Nepleťte si mód zápisu
WMD s módem obrazovky DMD.
BlA.... Tento bit má specifický význam v závislosti na WMD. Určuje sadu,
do které se zapisuje a také zapíná transformaci adres pomoc~ seroU (viz. 21.13).
I až IV Na tyto bity se lze dívat ze dvou pohledfi: jako na čísla rovin do kterých se bude zapisovat nebo jako kód barvy, kterou se bude kreslit.
21.7.4
Módy zápisu WMO
Existují dva základní druhy režimfi zápisu:
1) Zápis do jednotlivých rovin VRAM
WMO
O
SINGLE
1
EXOR
2
OR
3
RESET
2) Zápis do všech rovin ve specifické barvě
WMO
4
REPLACE
5
------··-----6
PSET
7
"
Oba druhy režimfi se od sebe liší svým·výZnamem i zpfisobem práce, proto
jsou popsány samostatně.
58
Grafický mód zobrazen[
Zápis do jednotlivých rovin (WMO =
21.7.5
o až 3)
se ile na 4 rftzné podrežimy podle obsahu WMD. Co se děje se zapisovanýmbytem ' zřejmé z vásledující tabulky: WD (write data) jsou právě zapisovanádata, VD j u data, která ve VRAM byla.
Dělí
WMO
funkce
SJNGLl
EXOR .
OR
RESET
WD
VD
00000
oooo·
000
001
01 O
011
zápis:
zápis:
zápis:
zápis:
WD tak jak jsou
WD .xor. VD
WD .or. VD
.not.WD .and. VD
zapisovaná data
pfivodní obsah VRAM
Spodní čtyři bity registru WF (I až IV) určují roviny, do kterých se zapisuje.
Zapisovat lze do jedné roviny nebo i do všech současně. Booleovská konverze, určená obsahem WMD, se provádí v každé rovině zvlášť, nezávisle na rovinách ostatních.
Pokud je daný z bitfi I až IV ve WF registru:
data se do příslušné roviny zapisují s konverzí určenou bity 5-7 WF registru.
1
O
data se do příslušné roviny nezapisují, její obsah se vfibec nemění.
0000000
0000000
BlA bit v režimech SINGLE. OR. RESET. EXOR
BlA bit nemá ten význam, který je popsán v servisním manuálu, ten podle
něhož dostal označení. Specifikuje pouze, zdali se bude
podle tabulky:
320x200
DMD Q
l
či
nebude uvažovat scroll,
640x 200
2
1
5
6
BlA
o
1
ano ne ano
ne ano ano
ano ne ano
ne ano ano
V režimech pro zápis do jednotlivých rovin (SINGLE, OR, EXOR, RESET)
bez ohledu na to, je-li daná rovina zobrazovaná, nebo
nezobrazovaná.
řídí bit B/A uvažování scrollu
V těchto čtyřech režimech nezáleží na zvoleném DMD. Rozdíl je jen mezi režimy 320 x 200 a 640 x 200, vyplývající z odlišné velikosti rovin VRAM a odlišného
přiřazení adres do fyzické VRAM. Protože v módech 640 x 200 existují pouze roviny I a III, bity ll a IV v registru WF jsou nevýznamné.
59
Grafický mód zobrazeni
SINGLE ...... Jednoduchý zápis, data se zapisují tak, jak leží a běží do VRAM.
Na předchozím obsahu VRAM nezáleží. Roviny do kterých se nezapisuje se nemění.
EXOR ......... Se zapisovanými daty a daty ve VRAM se provede operace XOR
(exkluzivní nebo). V důsledku toho jedničky zapisovaných dat provádějí inverzi ve
VRAM, nuly zachovávají původní obsah VRAM.
OR ............. Se zapisovanými daty a daty ve VRAM se provede operace OR
(logický součet). Důsledek je ten, že jedničky zapisovaných dat se ukládají jako jedničky do VRAM, nuly zachovávají původní obsah VRAM.
RESET ....... Zapisovaná data se negují a provede se operace AND (logický
součin) s daty ve VRAM. Důsledek je ten, že jedničky zapisovaných dat se ukládají jako nuly do VRAM, nuly původní obsah VRAM zachovají.
Režim SINGLE je využitelný pro přímý přístup do VRAM. Je jediný vhodný
pro neobrazovkovou manipulaci s VRAM (např. buffery). Režimy XOR, OR a
RESET umožňují manipulovat jednotlivými body ve zvolených rovinách, to lze
využít např. pro realizaci jednoduché sprajtové grafiky.
21.7.6 Zápis ve specifikované barvě (REPLACE, PSET)
Dělí se na dva podrežimy, použitelné pro zápis textu nebo pro grafiku. Oba
jsou, co se týče řízení totožné, proto je popisujeme společně.
Následující tabulka udává význam bitů I- IV v jednotlivých DMD. Platí pro
režim REPLACE, PSET a pro SEARCH při čtení.
DMD B/A
N
III
II
320 x200 4 barvy
0,1
X
X
Oll Oll
16 barev
2
6
I
X
Oll Oll X X
Oll Oll Oll Oll
o
X
X
X
1
X
X
X
X
X
Oll
Oll
X
Oll
1
640x 200 2 barvy 4,5
4 barvy
o
0/1
DMD ..... nastavený mód obrazovky
0/1 ........... významný bit
x .............. nevýznamný bit
BlA ........ určuje, do které sady se zapisuje
Zapisuje se jen do rovin; které jsou v tabulce
iny označené "x" se nemění.
60
označeny
symbolem 0/1. Rov-
Grafický mód zobrazeni
Zde je interpretace bitu BlA poněkud odlišná. Určuje skutečně sadu, do které
se zapisuje, je možné zapisovat i do viditelné i do neviditelné sady. Je nutné dát
pozor na jednu maličkost:
Při zápisu do NEVIDITELNÉ roviny VRAM
v módechPSET a REPLACE se neuplatňuje scroH.
Bity, označené "x" jsou nezajímavé, s rovinami označenými těmito bity se
nic. Všimněte si, že neměně né roviny jsou obvykle ty, které se nezobrazují.
Vhodnou volbou BlA, který skutečně určuje sadu VRAM se kterou se pracuje, lze
zapisovat i do neviditelné VRAM a do viditelné nezapisovat. Nikdy se ale data nazapisují do obou současně . Výjimku samozřejmě tvoří DMD 2 a 6, ve kterých se zapisuje vždy do všech rovin.
Bity označené 0/1 jsou významné. Jejich konkrétní význam je závislý na WMD.
V obou režimech je tímto bitem specifikována barva, přesněji kód palety, se kterým
se pracuje.
neděje
WMO
rE:Žim
zaplSU
4 nebo 5
6 nebo 7
REPLACE
PSET
Co se píše, když bit I až IV je
1
WD
WD + VD
O
O (nula)
.not.WD.and.VD
REPLACE ..... Jedničky ze zapisovaných dat se zapíší jako specifikovaný pallete co de, nuly se zapíší jako kód palety O, t.j. obvykle černá. Výsledek je ten, že se
změní celá osmice bodfi bez ohledu na její předcházející stav. Tímto zpfisobem se
jednoduše zapisují barevné znaky na černém pozadí, pfivodní znak je překryt. Na
pozadí barvy s kódem ruzným od nuly se v módu REPLACE psát nedá.
PSET ............ Jedničky ze zapisovaných dat se zapíší jako body ve specifikované barvě, nuly ze zapisovaných dat VRAM nemění. Tento režim slouží pro rozsvícení bodu v určité barvě, tedy pro grafiku. Texty se v tomto režimu píší obtížně,
protože by se znaky nepřekrývaly, ale prolínaly.
61
Grafický mód zobrazenf
Čtení z VRAM
21.8
Přístup do paměti je stejný jako při zápisu, t.j. pomocí běžných instrukcí pro
práci s operační pamětí po namapování VRAM.
Přečtená data nejsou přesným obrazem VRAM (ani by to nešlo, kvůli překrý­
vání rovin), ale data jsou upravena obvodem GDG podle "Read format register" RF
(OCDH). Význam jeho bitů je následující:
21.8.1
RF registr
RF registr je 8-bitový registr videoproct:soru, specifikující konverze při čtení
zVRAM.
7
6
54
3
2
J.
9
pallete cod.e
IU
nevyužito
I II
I I
21-9 RF "Read format register"
Existují pouze dva režimy určené bitem SRCHJSING:
O... "Single color data read" jednoduché čtení z vybrané roviny nebo vybraných rovin
1 .. "Specified color search" čtení vybrané barvy ze všech definujících rovin.
21.8.2
Jednoduché čtení
Odpovídá jednoduchému zápisu, bit BlA má také stejný význam. Čtení probíhá z roviny, jejíž bit (I až IV) je v RF jedničkový. Aby byla přečtená data jednoznač­
ná, nemělo by se nastavit více bitů I až IV. Když se tak stane, jsou byty přečteny z
každé specifikované roviny a provedena s nimi logická operace AND.
Funkce RF v tomto režimu nezávisí na DMD. V režimech 640 x 200 jsou bity
II a IV nevýznamné.
21.8.3 čtení specifikované barvy
Odpovídá zápisu ve specifikované barvě (módy REPLACE a PSET). Následující tabulka udává význam bitů I - IV pro jednotlivé DMD. Platí pro mód
SEARCH a také pro módy REPLACE a PSET při zápisu.
DMD B/A
320 x 200 4 barvy
16 barev
640 x 200 2 barvy
4 barvy
0,1
2
4,5
6
o
X
o
IV
III
X
X
Oll
Oll
Oll
Oll
I
011
Oll
X
X
Oll
Oll
011
X
X
X
1
X
X
X
X
X
011
Oll
X
011
DMD ..... nastavený mód obrazovky
Oll .......... významný bit
x ............. nevýznamný bit
BlA ........ určuje, ze které sady se čte
62
II
Grafický mód zobrazen[
Z rovin, kde je v tabulce x se nečte vftbec. Data z rovin označených Oll se
a provede se operace XOR s příslušným bitem v I až IV v RF registru. Výsr·
ledný byte vznikne operací NOR z těchto bytft.
V praxi to znamená, že se zjišťuje, kde se vyskytuje barva specifikovaná v RF.
Tam, kde tato barva je, se vrací 1, tam, kde je kterákoliv jiná, se vrací O.
přečtou,
Čtením ve snecifikované barvě neziistíte jaká je barya y daném
místě. ale jen jestli zde je nebo není vámi zadaná barva.
Bit B/A má stejný význam jako při zápisu v módech PSET a REPLACE. Ursadu ze které se čte, na druhé sadě je výsledek čtení nezávislý. To umožňuje
číst ze sady, která právě není zobrazována. V DMD 2 a 6 na hodnotě bitu B/A nezáleží, čte se ze všech rovin. I při čtení je nutné upozornit na dftležitou maličkost:
čuje
Při čtení z NEVIDITELNÉ roviny VRAM v módu SEARCH se
neunfatňuje seroU
63
Grafický mód zobrazenf
21.9
Pallet
Při zobrazování na display dostane GDG z VRAM pro každý bod kombinaci
1 - 4 bitft určující barvu tohoto bitu. To ale není skutečná barva, jakou bude daný
bod svítit. Je to jen kód Jety.
Skutečnou barvu je možné každému kódu palety přiřadit libovolně. Dokonce
lze dvěma ruzným kódftm palet přiřadit stejné barvy a tím zneviditelnit obsah obrazovky. Skutečné barvy mají svftj kód, určený následující tabulkou:
O
Černá
(black)
1
Modrá
(blue)
2
Červená
(red)
Purpur0vá
(magenta)
3
4
Zelená
(green)
5
Azurová
(cyan)
6
Žlutá
(yellow)
7
Bílá
(white)
8
Šedá
(gray)
9
Světle modrá
(light blue)
10
Světle červená
(light red)
ll
Světle purpurová
(light magenta)
12
Světle zelená
(light green)
13
Světle azurová
(light cyan)
14
Světle žlutá
(light yellow)
15
Světle bílá
(light white)
Přiřazení barev je dáno obsahem registru palet (značka PAL). Jsou to čtyři
čtyřbitové registry PALO až PAL3 a jeden dvoubitový SW. (SW se používá jenom v
móduDMD2)
PAU:I:
I
G
R
B
PAL1:
PAL2:
I
G
R
B
I
G
R
B
PAL3:
I
G
R
B
sw:
SW1
SWII
21-10 Registry palet
Když GDG zobrazuje data, tak vybírá z VRAM kód palety, tím adresuje
PAL registr a jeho obsah použije jako kód barvy podle uvedené tabulky.
Protože PAL registry jsou čtyři, mftže být kód palety maximálně 4. Pokud je
použito šestnáct barev, je PAL poněkud pozměněn.
příslušný
64
Grafický mód zobrazenf
21.9.1
PAL v DMD 2 (16 barev}
To co bylo dosud o paletách řečeno, neplatí pro DMD 2 (16.barev). V tomto
módu jsou kódy palet O - 15, registry palet jsou však jen 4. Proto se v tomto módu
využívá dvoubitový registr SW. Když GDG zobrazuje data z VRAM, porovnává
horní dva bity kódu palety barvy (bity z roviny ID a IV) s registrem SW Mohou nastat tyto případy:
1) Hodnoty jsou shodné. Pak se spodní dva bity (z rovin I a ll) použijí jako
adresa PAL, ze kterého se vybere příslušný kód barvy.
2) Hodnoty se liší. Kód palety z rovin I, II, ID a IV se použije bez transformace
jako kód barvy.
Z popisu je patrno, že přiřazování kódfi barev kódfim palety není úplné. Toto
výhodné při psaní programfi pro rozšířenou i nerozšířenou VRAM.
V praxi to vypadá tak, že jedné čtveřici kódu palet: (0-3, 4-7, 8-11 nebo 12-15) je
přiřazována barva pomocí registru palet, u ostatních 12-ti barev je kód barvy a kód
palety totožný.
21.9.2 Zápis do PAL registrů
Zápis do PAL a SW se provádí zápisem na port OFOH. Jednou instrukcí O UT
se plní jeden registr. Struktura zapisovaného bytu je následující:
přiřazování je
5
4
3
2
ad.resa PAL
%'egist%'u.
1
B/SWII
21-11 Palet register
B
R
G
I
sw
SWO,SWl
Modrá
Červená
Zelená
Intenzita
příznak zápisu do registru SW
zapisované bity SW registru
Pokud je SW bit nulový, zapíše se kód barvy (bity 0-3) do registru palet uradresou.
Pokud je SW bit jedničkový, nezapisuje se doPAL nic, ale zapisují se bity 0-1
do dvoubitového registru SW.
21.9.3 Praktické použití PAL
Kód barvy Y, přiřadíte kódu palety X instrukcemi:
LD
A,X*16+Y
OUT
(OFOH),A
. Chcete-li aby rychle zčernala obrazovka, vykonáte instrukce:
čeného
65
Grafický mód zobrazeni
LD
A,OOH
OUf
(OFOH),A
LD
A,lOH
OUf
(OFOH),A
LD
A,20H
OUf
(OFOH),A
LD
A,30H
OUf
(OFOH),A
Chcete-li, aby kód palety byl totožný s kódem barvy, vykonejte tuto posloupnost instrukcí:
LD
A,55H
; 1. registr bude SW
LOOP: SUB
llH
; a po něm všechny PAL registry
OUf
(OFOH),A
JR
NZ,LOOP
Pallet má naprosto přesnou analogii v MZ-800 BASlCU. Posloupnost instrukcí pro
naplnění registru palet:
LD
A,x*16 +y; registr palety a hodnota
OUf
(OFOH),A
je ekvivalentní s příkazem v jazyku BASIC:
PAL
x,y
Nastavenf SW registru instrukcemi:
LD
A,40H + x ; nastavuje se SW
OUf
(OFOH),A
Zpfisobí v Basicu příkaz:
INIT
"CRT:M2Bx"
21.10
Border
Obrazovka MZ-821 je využita jen zčásti, na okraje obrazovky se data nazapisují. Tento okraj zvaný "Border" GDG zobrazuje v jedné specifikované barvě. Border se zadává přímo v kódu barvy, nikoli v pallete kódu na 1/0 adresu 06CFH např.
instrukcemi:
·
LD
BC,06CFH
LD
A,kód barvy
our {C},A-
66
Grafický mód zobrazenf
21.11
S' atus obrazovky
. Osmib Jvý status obrazovky se přečte instrukcí IN A,(OCEH) z portu OCEH
(DMD). Ne1 ·ečte se zapsaný mód, ale následující stavové slovo:
7
6
5
4
21-12 Status register
O. bit ....... Frekvence shodná s frekvencí čtenou z OE008H v MZ-700 módu.
(35 Hz - signál TEMP)
l.bit ....... Stav přepínače MZ-700 ON na zadním panelu počítače. ON = O
2.bit ....... Signál CKSW, nastavuje se 7.bitem portu 7CFH. Jeho jediný pozorovaný efekt je posunutí obrazu na obrazovce asi o 2 cm doleva. V servisním manuálu mu říkají "superimpose bit".
3.bit ....... Nevyužito = O
4.bit ....... Snimková synchronizace
S.bit ....... Řádková synchronizace
6.bit ....... Snimkové zatemňování
7.bit ....... Řádkové zatemňování
Bity 4 až 7 jsou aktivní v nule.
21.12
Scroll
Protože je kapacita VRAM dost vysoká a práce s ní je pomalejší než s RAM,
není efektivní provádět rolování softwarově. Za tím účelem provádí GDG složité
konverze adres do VRAM. Tím lze opticky posouvat text na obrazovce všemi čtyřmi
směry, přitom se obsah VRAM nezmění.
Uvedené konverze provádí GDG nejen při zobrazování, ale i při zápisu a čtení
dat (až na výjimky, na které bude upozorněno v příslušných odstavcích). Z uživatelského hlediska to vypadá, jako by se přímo přemístila data ve VRAM.
Scroll pracuje ve všech definovaných módech stejně, ani při přechodu z módft
640 x 200 do módft 320 x 200 a naopak není potřeba scroll inicializovat, jen je vhodné
smazat obrazovku.
67
Grafický mód zobrazen[
Pro potřeby scrollu je obrazovka pomyslně rozdělena na
<
A >
oblast bez rolováni
<
B l
sc~ollouaci
(
C )
oblast bez
tři
vodorovné pásy:
SSA:
okenko
}
SW:SEA-SSA
SEA:
~olouáni
21 = 13 Rozdělení obrazovky
Oblasti (A) a (C) jsou vzhledem k rolování zamčeny, text se roluje jen v nastavitelném okénku (B).
Scroll registry
21.12.1
Scroll registry jsou čtyři registry videoprocesoru GDG, dostupné instrukcemi
výstupu (OUT) na adrese OCFH. Do kterého registru se bude zapisovat je určeno
registrem B. Scroll registry nelze číst.
SSA .... "Scroll start adress" (7 bitft) - určuje začátek oblasti, kde se bude rolovat,
tedy oblasti (B)
SEA .... "Scroll end adress" (7 bitft) -určuje konec oblasti (B), přesněji začátek oblasti (C)
SW ..... "Scroll width register" (7 bitft)- určuje výšku okénka (B). Musí nabývat hodnotu SW = SEA-SSA, nese tedy redundantní informaci
SOF .... "Scroll offset register" -Tento registr je registrem výkoným. Zatímco registry SSA a SEA určují kde se roluje, registr SOF určuje kam se roluje a o kolik se roluje. Jeho maximální hodnota je (SEA-SSA)*8.
Plnění Scroll registrů
21.12.2
Doporučujeme mít obraz Scroll registrft v paměti takto:
SREG:
SOF:
DEFW
o
DEFB
125
SW:
DEFB
SSA:
o
SEA: DEFB
125
Nejdříve obsah registru připravit a uložit do paměti, a potom teprve najednou plnit
takto:
·
LD
BC,6CFH
HL,SREG+4
LD
OTDR
Poznámky:
1. Nedoporučujeme plnit registry postupně, protože by se mohl poškodit obsah obrazovky, než všechny registry nabudou správné hodnoty.
2. Musíte mít na paměti, že před plněním musí být vždy SW = SEA-SSA, proto je
nutné při každé změně SSA nebo SEA změnit i SW.
3. Po smazaní obrazovky doporučujeme nastavit registr SOF na nu !u.
68
Grafický mód zobrazenf
21.12.3 Rolovací okéno
Rolovací okénko (dále jen okénko) je ta část plochy obrazovky, která bude
podléhat rolování (B). Horizontálně zaujímá vždy celou šířku obrazovky, vertikálně
je omezeno rozhraním s oblastí (A) a (C).
Rozhraní oblastí (A),(B) a (B),(C) je určeno registry SSA a SEA, jak je patrno
z obrázku. Mohou nabývat pouze hodnot: O, 5, 10, 15, ... 125, tedy číslo z intervalu
[0 .. 125] dělitelné pěti. Přitom z pochopitelných dfivodfi musí platit: SEA= SSA Při
SEA= SSA, okénko neexistuje.
Okénko nemfiže začínat ani končit na libovolném mikrořádku (připomeňme,
že mikrořádky číslujeme 0-199), ale jen na každém osmém, to znamená na jednom
z 25-ti textových řádkfi (číslujeme je 0-24). Hodnotu registru dostaneme, vynásobíme-li pěti číslo toho textového řádku, kterým má okénko začínat resp. před kterým má okénko končit.
Pokud má okénko začínat na začátku obrazovky, bude SSA =O, pokud má končit na konci obrazovky, bude SEA= 125.
Příklad:
Chceme mítiia obrazovce 6 řádkfi před okénkem a 6 řádkfi za okénkem. Okénko začiná řádkem 5 (řádky se číslují od 0), SSA bude 5*6 = 30. Poslední řádek okénka je 18, to znamená, že první řádek oblasti (C) je řádek 19, SEA bude 5* 19 = 95.
SW se musí nastavit na SEA-SSA = 95-30 = 65.
21.12.4 Provedení scrollu
Doposud popsané registry pouze vymezují, kde' se bude rolovat. Zbývá poslední ze čtyř registru, a to je registr SOF, který určuje, kterým směrem se odroluje
a o kolik se odroluje.
Rolování v okénku se provádí změnou (nikoli jen nastavením) registru SOF.
Podle velikosti jeho přírfistku, resp. úbytku se rozlišuje mezi vertikálním nebo horlzontálním scroUem.
Horizontálně lze rolovat i po mikrořádcích, vertikálně jen po 1/5 šířky obrazovky, t.j. 8 nebo 16 znakfi v závislosti na módu.
Nebudeme se zabývat přesným mechanismem transformace adres, uvedeme
jen praktické dfisledky. Nejdřive uvádíme universální podprogram, který provede
seroU zadaným směrem o zadaný počet bodfl.
Před prvním spustě ním tohoto podprogramu je nutné samozřejmě určit okénko naplněním paměťových .buněk SSA a SEA SOF je vhodné nastavit na nulu, SW
si podprogram spočítá sám.
TITLE 'SeroU'
; Posune obrázek v okénku
; na obrazovce podle obsahu DE registru
; (Přičte DE k SOF modulo (SEA-SSA)*8)
; Vstupní hodnoty v DE registru:
; Vertikálně:
69
Grafický mód zobrazeni
;' 40 nahoru o textový řádek
; -40 dolft o textový řádek
; 5 nahoru o mikrořádek
; -5 dolft o mikrořádek
000
000
000
000
; Horizontálně:
; -1 doleva o 1/5 šír"ky obrazovky
; 1 doleva o 1/5 šír"ky obrazovky
000
000
; Celočíselné násobky uvedených hodnot
; rolují naráz o příslušný počet prvkfto
; Např: 120 roluje o 3 řádky nahoru
ROLL::
lD
ADD
EX
lD
LD
DEC
SUB
DEC
lD
RET
lD
lD
ADD
ADD
ADD
EX
ROLL2:0R
SBC
JP
ROLL1:0R
ADC
JP
HL,(SOF) ; "scroll ofset register"
HL,DE
; zvětšit o co chceme rolovat
DE,HL ; nový SOF do DE
HL,SEA ; ukazatel na SEA
A,(HL)
; SEA do A
HL
; ukazatel na SSA
(HL)
; SEA-SSA
HL
; ukazatel na SW
(HL),A ; ulozit SW
Z
; žádné okénko, není co rolovat
L,A
; výšku okénka do HL
H,O
; horní byte nulový
HL,HL
; *2
HL,HL
; *4
HL,HL
; * 8 = maximalní hodnota SOF
DE,HL ; maximum do DE, aktuální do HL
A
; odčítej maximum do té doby
HL,DE
; než bude hodnota záporná
P,ROLL2
A
HL,DE
; a ted' přičítej maximum do té
M,ROLLl ; doby, než bude hodnota kladná
(SOF),HL
; ulož SOF, je zaručeně v intervalu:
HL,SREG +4
; [O, (SEA-SSA)*8]
BC,6CFH ; adresa portu scroll registru
; naplň registry
lD
lD
lD
OTDR
RET
; ulozeni scroll registru
70
Grafický mód zobrazen[
SREG:
SOF:
SW:
SSA:
SEA:
DEFS
DEFS
DEFB
DEFB
2
1
1
1
; posunutí
; šířka okénka
; začátek okénka
; konec okénka
END
Podprogram nejdříve spočte SW = SEA-SSA, potom přičte k registru SOF
hodnotu zadanou v DE a nakonec upraví SOF tak, aby ležel ve správném intevalu,
t.j. interval [O.. SW*8]
21.12.5 Vertikální scroll
Verikální scroll je neJběžnější zpftsob rolování textu. MZ-800 dokáže rolovat
obrazovku nahoru i dolft o libovolný počet mikrořádkft. Provádí se změnou SOF o
.násobek pěti.
Příklady:
LD
CAlL
DE,35
ROLL
; roluje o 7 mikrořádkft nahoru
LD
CAlL
DE,-20
ROLL
; roluje o 4 mikrořádky dolft
LD
DE,40
; roluje o textový řádek nahoru
CALL
ROLL
; (8 mikrořádkft)
21.12.6 Horizontální scroll
Horizontální scroll je speciálním případem scrollu vertikálního, není však tak
dobře vyřešen. Provedeme jej změnou SOF o 1 až 4, resp. -4 až -1. Roluje se po 1/5
šířky obrazovky, což je dost hrubé dělení. Navíc zároveň dochází i k vertikálnímu
scrollu o mikrořádek v části obrazovky, proto využití vertikálního scrollu je poně­
kud diskutabilní.
21.13
Grafika
V této kapitole pojednáme o využití grafických obrazových schopností MZ800 při použití grafiky. Při grafických operacích hrají roli dva aspekty:
1) Obrázek se obyčejně kreslí na klidnou obrazovku, rozumí se tím, že obrazovka neodrolovává. Proto mftžeme nastavit všechny čtyři scroll registry na nulu
a dále se scrolem nezabývat. V alternativním režimu by použití scrollu dokonce
mohlo pftsobit potíže.
2) Při kreslení je žádoucí, aby se body obrazovky, na které ·se právě nekreslí
neměnily. (typickým příkladem je nakreslení bodu nebo přímky)
21.13.1
Mód pro grafiku
Z kapitoly 21.2 víme, že obrazovka mftže pracovat v několika rfizných módech, mfi.že mít 320 nebo 640 bodfi. na řádku, mf!Žeme používat 2, 4 nebo 16 barev.
71
Grafický mód zobrazen[
Pro grafické účely doporučujeme používáníD:MD 0,1,2, t.j. 320x 200, protože
tak dostaneme přibližně stejná měřítka v horizontálním i vertikálním směru. Pro
princip práce s grafikou není režim rozhodující.
Volbu D:MD mají jednodušší ti, co nemají rozšířenou VRAM, mohou pracovat jen v D:MD Onebo 4. D:MD čtyři je méně vhodný mód, proto jim rozhodování
nebude činit vfibec žádné potíže.
Pokud ale disponujete rozšířenou VRAM, musíte se rozhodnout, jak s ní naložíte. Zde vám nabídneme některé možnosti, třeba sami přijdete na další. (Ještě
připomeňme, že základní VRAM se označuje, jako "sada A", rozšířená jako "sada
B")
1) Využije se jen sada A, ať už z dftvodft kompatibility nebo proto, abychom
mohli sadu B využít jiným zpftsobem, např. jako vyrovnávací paměť. (D:MD =O)
2) Bude se pracovat jen v sadě B. To je obdoba předchozího, a také vhodnějšího, případu.(D:MD = 1)
3) Pracuje se v nejmocnějším módu, D:MD 3. V tomto módu je k dispozici 16
ruzných barev naráz na obrazovce. (D:MD =2)
4) Alternující režim- DMD O a 1 se podle potřeby přepínají, takže je právě
vidět jen obrázek ze sady Anebo obrázek ze sady B. Toho lze využít bud' proto, aby
nebyl vidět pru~ěh kreslení složitějšiho obrázku, a nebo když je potřeba střídavě
pracovat na dvou obrazech.
21.13.2 Jakým způsobem se bude kreslit
Skutečnost, že grafika je ftplná, dává možnost kreslit libovolné a libovolně
umístěné grafické obrazce, bez ohledu na strukturu VRAM. VRAMje ale organizována bytově, proto při rozsvícení nebo zhasnutí jednoho bodu, by bylo nutné data
z VRAM přečíst, bit odpovídající danému bodu maskovat a zpět data zapsat. Aby
se nemusela data číst, používají se obvykle tyto WMD.
PSET ...... zápis bodu v určené barvě
OR ......... změna barvy bodu (logickou funkcí OR)
RESET ... mazání bodu v zadané barvě
EXOR .... změna barvy bodu (logickou funkcí XOR)
DMD se nastavují zápisem do WF instrukcí OUT (OCCH),A. Výše jmenované
W:MD (PSET, OR, RESET, EXOR) jsou použitelné pro grafiku díky následující
vlastnosti:
Zápis v módech PSET, OR, RESET a EXOR:
a) Zápis bitu 1 zpfisob( zapsání takové barvy, která je specifikována ve WF
registru.
b) Zápis bitu Onezmění obsah obrazovky
Nyní uvedeme na ukázku úsek programu, který na obrazovce rozsvítí jeden
bod o souřadnicích X a Y. Bod [0,0] je v levém horním rohu obrazovky. Podprogram platí pro libovolný D:MD.
72
Wlli
EQU
40
ADR:
DEFW
(Y
; 80 v módech 640 x 200
* Wlli) + (X div 8)
Grafick-y mód zobrazenf
BIT:
DEFB
SETHLA:
LD
our
IN
X mod 8
A, barva a WMD
(OCCH),A
A,(OEOH)
A,(BIT)
LD
; číslo bitu
RLCA
RLCA
; číslo bitu na patřičná místa
RLCA
; ať je to instrukce SET x,A
OR
11000111B
LD
(SETA+1),A
; modifikovat instrukci
XOR
A
SETA: SET
O,A
; v A bude nastaven jen 1 bit
LD
HL,(ADR)
; adresa bytu na obrazovce
(HL),A
LD
; rozsvítit bod
IN
A,(OElH)
RET
21.13.3 Nastavení pracovní barvy a módu zápisu
Pracovní barva (to znamená barva, kterou se bude kreslit) se nastaví zároveň
s WMD do WF registru. Její platnost trvá tak dlouho, dokud není změněna na jinou
barvu.
Následující tabulky udávají, jak se musí nastavit WF registr v závislosti na
DMD a na požadovaném WMD zápisu. Znakem "B" je označen bit, který určuje
kód barvy, přesněji řečeno palety. Z jejich počtu je také patrné množství zobrazovaných barev.
WF registr pro grafické operace v módech 320 x 200
4 barvy
4 barvy
16 barev
Zápis do sady:
A
B
AiB
PSET 11x0xxBB 11x1BBxx 11xxBBBB
OR
010000BB OlOlBBOO OlOxBBBB
RESET 011000BB 0111BBOO OllxBBBB
EXOR 001 OOOBB OOllBBOO 001 xBBBB
DMD =O nebo 1 DMD=2
WF registr pro grafické operace v módech 640 x 200
2 barvy
2 barvy
4 barvy
Zápis do sady:
PSET
OR
A
B
AiB
llxOxxxB 11xlxBxx 11xxxBxB
OlOOOOOB 01010BOO 010xOBOB
73
Grafický mód zobrazen[
RESET 0110000B 01110BOO 011xOBOB
EXOR 0010000B OOllOBOO 001xOBOB
DMD = 4nebo5 DMD=6
B ........... bity určující barvu
x ............ nevýznamný bit
DMD ... display mód = obsah registru DMD (OCEH)
21.13.4
Popis grafických WMO (PSET, OR, RESET, EXOR)
Po nastavení barvy a módu zápisu do WF a po namapování VRAM instrukcí
IN A,(OEOH), lze kreslit na obrazovku normálními instrukcemi pro práci s pamětí.
Znovu připomínáme, že =ěna se týká jen těch bodfl, do kterých je zapisována jednička, protože nula VRAM nemění.
O tom jaká bude barva bodu po zapsání jedničky, rozhodují tyto faktory:
1) Pflvodní barva bodu před zápisem (značíme OLDC)
2) Barva, specifikovaná ve WF registru (značíme NEWC)
3) Mód zápisu specifikovaný ve WF registru (značíme WMD)
V dalším textu se snažíme vysvětlit činnost videoprocesoru a její využití.
Uvádíme, co se děje ve VRAM, jakým zpflsobem se daného módu užívá v MZ-800
BASICu, a nakonec příklad nebo stručnou poznámku na vysvětlení pro bližší pochopení činnosti.
Mód zápisu PSET
Zapisuje se: NEWC
V Basicu: Využíván všemi grafickými příkazy, jejichž druhý parametr v hranatých závorkách je O, např. SET[x,O]
Tento mód bude mít zřejmě nejširší využtí,jako jediný ze čtyř uvedených mód fl
w :!re ohled na OLDC, je znamená, zě rozsvítí bod v barvě NEWC.
Mód zápisu OR
Zapisuje se:. OLDC or NEWC - logický součet zapisované barvy s pftvodní
barvou.
V Basicu: BASIC tento mód užívá při operaci typu SET[x,1].
Příklad:
Nechť je na obrazovce nakreslen plošný útvar, např. kruh v barvě s kódem
palety 3, barva pozadí je O. Úkolem je nakreslit přes celou obrazovku sítku v barvě
1. ale tak, aby byla za zobrazeným předmětem.
Při použití PSET by se musela číst VRAM a testovat, zdali na místo, kam
chceme zapisovat ne ní náhodou zobrazený předmět. Pokud ale použijeme mód OR,
mftžeme rastr nakreslit přes celou obrazovku. Na pozadí se síťka nakreslí, protože
OOR 1 = 1, předmět si ale barvu ponechá, protože 3 OR 1 = 3.
Mód zápisu RESEt
Zapisuje se: (not NEWC) and OLDC- logický součin komplementu zapisované barvy s pfivodní barvou.
V Basicu: Využívájí ho jen příkazy RESET[b, 1] a BLINE[b, 1]
74
Grafický mód zobrazen(
Lze výl Jdně využít při mazání části obrázku, při zápisu stejnou barvou, jako
byl obrázek, brázek mizí. (Mění se na barvu O, což je obyčejně barva pozadí)
M6d...zi jsu EXOR
Zapisu. se: NEWC xor OLDC- nonekvivalenci pfivodní barvy a barvy zapisované.
V Basicu: V interpretru MZ-800 BASIC není tento WMD využit.
Lze využít, chceme-li zobrazit část obrázku v doplňkových barvách.
21.13.5
čtení z VRAM při práci s grafikou
Protože máme dosti silný mechanismus grafického zápisu, je čtení méně
potřebnou operací, přesto však v některých aplikacích (obrazová analýza, vybarvování ploch) je číst potřeba. Pro potřeby grafiky používáme SEARCH nebo SINGI.E
read.Ten nastavíme zápisem do RF registru na adresu (OCDH), jehož hodnotu určíme z následující tabulky:
·
RF registr při grafickém čtení v módech 320 x 200
Čteiú ze RF registr
SxxOOOBB
--- DMD Onebo 1
4 barvy sady A
sady B
Sxx1BBOO
_/
16 barev sady A i B SxxxBBBB
DMD 2
RF registr při grafickém čtení v módech 640 x 200
Čtení ze RF registr
2 barvy sady A
SxxOOOOB --- DMD 4 nebo 5
Sxx10BOO
I
sady B
4 barvy sady A i B SxxxOBOB
DMD 6
B ... bity, určující čtenou barvu
x ... nevýznamné bity
S ... typ operace čtení
1 = "SEARCH read", selektivní čtení
O = "SINGIE read", jednoduché čtení
Selektivní čtení
Selektivní čtení nedokáže určit, jaká je v daném bodě barva, ale jen jestli je·
tam určitá barva, kterou zadáváme prostřednictvím RF registru. Vrací se:
1 ... pokud je barva odpovídajícího bodu totožná se specifikovanou barvou.
O... v opačném případě .
Příklad:
Předpokládejme DMD = 2 (16 barev). V levém horním bodě obrazovky má
osmice bodfi barvy 2,6,4,3,6,6,7,0. Po provedeni instrukcí:
LD
A,86H
; zajímá nás barva 6
OUT
(OCDH),A ; nastavení RF
IN
A,(OEOH) ; namapuje VRAM
LD
A,(8000H) ; přečtení bytu z paměti
75
Grafický mód zobrazen[
je obab registru A takový: 00110010B. Jedničky odpovídají barvě číslo 6.
bitfi je opačné proto, že nultý bit se zobrazuje vlevo.
Jednoduché čtení
Jednoduché čtení lze využít jen ve speciálních prípadech, pokud je zapotřebí
zjistit, jestli je na obrazovce určitá třída barev. Tato třída nemfiže být bohužel zvolena libovolně. Třída je určena barvou, která je zapsána v RF registru. Pokud logický
součet čtené barvy s barvou zapsanou v RW, dá opět čtenou barvu, vrací se jednič­
ka, pro ostatní barvy O.
Jinými slovy: Kdyby se do WF registru dala stejná barva jako je v RF a mód
OR, četla by se jednička tam, kde by se při zapisování jedničky nic nedělo.
Pořadí
Příklad:
Do RF registru dáme hodnotu: 6. Barvy, při kterých se vrací
6,7,14,15.
jednička jsou
Příklad:
Je nastaven D MD = O (4 barvy). Skutečné barvy jsou kódfun palety přiřazeny
(viz. 4.10):
O....... Černá (15)
1 ....... Světle žlutá (14)
2 .. :.... Želená (4)
3 ....... Světle bílá (O)
Zajistěte, aby levý horní roh se stal černobílým.
následovně
CERNOBIL:
IN
LD
OUT
LD
OUT
LD
LD
LD
LOOPl:LD
LOOP2:LD
LD
INC
DJNZ
ADD
A,(OEOH) ; namapuje VRAM
A,OOOOOOOlB
; Single read barvy 1 (z roviny I)
(OCDH),A; uložit do RF registru
A,OOOOOOllB
; SINGLE mód WMD
(OCCH),A ; uložit do WF registru
HL,8000H ; adresa VRAM
DE,20
C,lOO
; výška měněné oblasti
B,20
; šír"ka měněné oblasti
A,(HL)
; čti byte přes RF registr
(HL),A
; zapiš byte přes WF registr
HL
; další byte měněné oblasti
LOOP2 ; vyčerpán mikrořádek
HL,DE
; na začátek následujícího
DEC
c
JR
NZ,LOOPl
; další rnikrořádek
IN
A,(ElH) ; odmapovat VRAM
RET
Uvedený podprogram je v rozporu s tím, co bylo řečeno na začátku kapitoly o
grafice. Vyjírnečně je zde použit WMD mód SINGLE.
76
Grafický mód zobrazenf
Dále je z podprogramu vidět, že software nedělá žádné konverze dat, o ty se
stará videoprocesor GDG. Jeho činnost v tomto konkrétním případě si krátce vysvětlíme:
ID A,(HL) ... přečte dataz VRAM s konverzí pomocí RF registru. Ten je nastaven tak, aby se četla data jen z roviny I, to znamená, že na místě žluté a bílé barvy
vrátí O, na místě černé a zelené barvy vrátí 1.
ID (HL),A ... Zapíše zpět data přečtená předcházející instrukcí, ale tontokrát
přes konverzi pomocí WF registru. Zapisovaná jednička (pfivodně barva bílá nebo
žlutá) se zapíše jako kód 3 (bílá), zapisovaná nula (pfivodně černá neo zelená) jako
kód O(černá). Kdyby se místo REPLEACE použilo PSET, nula by se nezapisovala, a zelená barva by proto zfistala na obrazovce.
21.13.6 Alternující režim v grafice
Je režim v němž se střídavě přepínají DMD Oa 1, resp. 4 a 5, to znamená, že
jedna ze sad je zobrazovaná a druhá neviditelná. Zapisovat lze přitom do libovolné
z nich. V módech OR, RESET a EXOR dokonce do obou současně.
Potíže by nastaly, kdyby se využíval scroll, což je pro grafiku málo obvyklé.
21.14
Obrazovka, jako textová periferie
Na textovou obrazovku jsou kladeny docela jiné požadavky, než na obrazovku grafickou:
1) Je žádoucí, aby se využíval scroll, to přináší mírné problémy v alternujícím
režimu.
2) Při zobrazení znaku je potřeba, aby se smazalo pozadí znaku, proto se
obvykle pracuje v módu REPLACE.
21.14.1
DMD pro textovou obrazovku
Pro textové fičely je vhodnější mód 640 x 200, to znamená 80 znakfi na řádku.
Mód 320 x 200 dá jen 40 znakfi na řádku. Pokud by to bylo dostačující, je výhodnější
pracovat v MZ-700 módu, protože práce s VRAM je v něm rychlejší a pohodlnější.
Navíc lze v MZ·700 módu užívat osmi barev na obrazovce.
Dále se budeme zabývat módem 640 x 200, čtenář si jistě vytvoří pro mód 320
x 200 patřičné analogie.
Není-li k dispozici sada B (rozšířená VRAM), pracujeme v DMD=4 (resp.
DMD = 0). Na obrazovce jsou jen dvě barvy, barva pozadí a barva písma. (resp. 3
barvy písma a barva pozadí)
Pokud jste se stali vlastníky rozšířené VRAM, máte podobné možnosti jako,
jaké jsou popsány v odstavci 22.14.1:
1) Využívá se jen sada A, jakoby sada B vfibec neexistovala
2) Bude se pracovat jen v sadě B. To je obdoba případu 1), ovšem méně vhodná.
3) Pracuje se v módu DMD 6. V tomto módu jsou k dispozici 4 rfizné barvy
naráz na obrazovce. 3 z nich se považují za barvy písma a ta čtvrtá s kódem Oza barvu
pozadí.
77
Grafický mód zobrazenf
4) Alternující režim - Módy O a 1 se podle potřeby přepínají, takže je právě
text ze sady A nebo text ze sady B. V tomto případě je nutné si dát pozor
vidět jen
na dvě věci:
1. Obrazovky jsou dvě, ale seroU registry jsou jen jedny. Proto při odrolování
obrazovky, přeroluje i obrazovka neviditelná.
2. Při zápisu do neviditelné obrazovky se seroU vftbec ne uvažuje, proto vámi
rozkreslený znak, se mfiže objevit jinde, než kde je očekáván.
21.14.2 Nastavení barvy písma
Barva písma se nastavuje instrukcí OUT (OCCH),A do WF registru zároveň s
módem zápisu WMD.
RBPLACE mód ve WF registru v módu 320 x 200
Zápis do WF registr
4 barvy sady A
10xOxxBB --- DMD
sady B
10x1BBxx I Onebo 1
16 barev sady A i B 10xxBBBB DMD 2
RBPLACE mód ve WF registm v módu 640 x 200
Zápis do WF registr
4 barvy sady A
10xOxxxB --- DMD
sady B
10xlxBxx I fr nebo 1
16 barev sady A i B lOxxxBxB
DMD 2
21.14.3
Nastavení barvy pozadí znaku
Barva pozadí znaku má vždy po zápisu v REPLACE módu kód palety O. Je to
proto, že zapsáním nuly se nulují příslušné bity ve všech uvažovaných rovinách.
Pokud chcete mít pozadí znaku jiné barvy než je barva pozadí, musíte pracovat v jiném WMD než v REPLACE (např. PSET), pole obrazovky pod znakem vybarvit požadovanou barvou a potom teprve znak rozkreslit. (V BASlCu lze stejného
efektu dosáhnout kombinací příkazfi BOX a SYMBOL)
21.14.4 Rozkreslování znaku na obrazovku
Protože obrazovka je bodová, nestačí znak pouze zobrazit na určité místo ve
VRAM, ale je ho zapotřebí do VRAM rozkreslit. šír"ka znakfi je 8 bitfl, z nichž
nejméně jeden musí tvořit mezeru mezi znaky. Výška znaku je zcela závislá na vftli
programátora. Tvar znakfi bývá zpravidla uložen v tzv. generátoru znakň., jehož
struktura a uložení také závisí na programátorovi.
Standardně je generátor umístěn v EPROM od adresy 1000H. Sestává ze dvou
sád po 256-ti znacích. Jeden znak zaujímá 8 po sobě jdoucích bytfi, výška znaku je 8
bodfl, v módech 640 x 200 se na obrazovku vejde 80 takových znakfi. Podrobně je
standardní generátor popsán v kapitole 5.3. a ve třetím dílu této příručky.
Jak již bylo uvedeno, je nejvhodnější mód pro rozkreslování znakfi mód REPLACE.
78
Grafický mód zobrazeni
Zápis v módu REPLACE se provádí takto:
a) Zápis bitu 1 zpfisobí zapsání takové barvy, jaká je specifikována v WF registru
b) Zápis bitu O zpfisobí zapsání barvy s kódem nula, to znamená O do všech
uvažovaných rovin.
fř.íklad;,
Uvedený podprogram rozkreslí znak, jehož kód je v registru Ca adresa umístění horního okraje znaku ve VRAM je v registru HL.
'
; Rozkreslení znaku na obrazovku
; B .... barva písma, pozadí je černé
; C .... kód znaku
; HL ... adresa horního okraje znaku na obrazovce
; lze ji spočítat například takto:
; HL = RADEK* 640
RZKR: DI
IN
LD
OR
OUT
EX
LD
LD
ADD
ADD
ADD
LD
ADD
LD
LD
EX
LD
REPT
POP
LD
ADD
LD
ADD
ENDM
LD
IN
+ SLOUPEC
; slušnost, bude zneužíván zásobník
A,(OEOH) ; namapovat VRAM + generátor
A,40H
; mod REPLACE
B
;pridatbarvu
(OCCH),A ; do WF registru
DE,HL
; schovat adresu ve VRAM do DE
L,C
H,O
; kód znaku do HL
HL, HL
HL, HL
HL,HL
; vynásobit kód znaku osmi
BC, lOOOH ; adresa generátoru znakfi
HL,BC
; HL je adresa našeho znaku
(SPS),SP
SP,HL
; adresa do generátoru v SP
DE,HL
; obnovit adresu ve VRAM
DE,80
; pocet znakfi na řádku
4
; 4 * se opakuje (kvfili rychlosti)
BC
; 2 byty z generátoru
(HL),C
; 1. byte uložit
HL, DE
; posunout ukazatel
(HL),B
; 2. byte uložit
HL, DE
; posunout ukazatel
SP,(SPS) ; obnovit SP
A,(OElH) ; odmapovat VRAM
79
Grafický mód zobrazen!
RET!
; povolení přerušení ~ návrat
SPS:
DEFS 2 ; buňka na úschovu SP
21.14.5 čtení v textovém režimu
Čtení v textovém režimu je ještě méně obvyklé než při grafických operacích.
Jedině co mfiže být užitečné, je zjistit jaký je znak na dané pozici. Lze to provézt jen
vyhledáním příslušného obrazu v generátoru znakft.
; Prečte znak z VRAM. Znak mftže být v jakékoli barvě,
; pozadí znaku všk musí být celé v barvě pozadí.
; Ill., ... adresa horního okraje znaku ve VRAM
; Ill., = RADEK * 640 + SLOUPEC
; A .... přečtený kód znaku
RZNAK:
LD
OUT
IN
PUSH
LD
LD
LOOPl:POP
PUSH
LD
LOOP2:LD
CPL
CP
JR
PUSH
LD
ADD
POP
INC
DJNZ
POP
IN
LD
OR
RET
NESEDI:
INC
80
A,80H
; SEARCH mód
(OCDH),A; do RF registru
A,(OEOH) ; mapuj RAM
Ill.,
; schovat adresu znaku ve VRAM
DE, lOOOH; adresa generátoru znakft
C,O
; v generátoru je 256 znakft
Ill.,
; obnovit adresu znaku ve VRAM
Ill.,
; a zase schovat
B,8
; výška znaku
A,(DE)
; vyber byte znaku z generátoru
; testuje ~e písmo, ne pozadí
(Ill.,)
; porovnej s bytem ve VRAM
NZ,NESEDI
; tak tento znak to zase není
DE
DE,80
HL,DE
; adresa dalšií části znaku ve VRAM
DE
DE
; další část znaku v generátoru
LOOP2 ; a porovnávej další byte
Ill.,
; srovnat stack
A,(OElH) ; odmavopat VRAM
A, C
; zde máme kód znaku
A
;CY=O
; návrat s nalezeným znakem
DE
; upravit adresu do generátoru
Grafický mód zobrazen[
DJNZ
INC
NESEDI ; aby ukazovala na další znak
C
; počítadlno znakfi
fR
NZ,LOOPl
; a testuj další znak
A,(OElH) ; odmapovat VRAM
N
CF
; všechny znaky vyčerpány
'OP
HL
; vrať se s přiznakem CY = 1
RET
; znak nenalezen
21.14.6 Alternu)rcr režim a serou
Alternující režim je režim ve kterém se používají sady A a B jako dvě nezávislé sady. Jedna z nich je pomocí DMD vybrána k zobrazování. Zapisovat lze do
zobrazované nebo i do v tomto okamžiku neviditelné sady, a tak si obrázek předem
nachystat. Pokud se nepoužívá scroll, stačí nastavit správně registry, a nemohou vniknout žádné potíže.
Pokud je ale scroll užit (viz. 4.13), je nutné si dát pozor na to, že zapisováním
do neviditelných rovin v módu PSET a REPLACE se scroll neuplatní !. Zapsaná
data se po přepnutí objevi na obrazovce jinde, než kde jsou očekávána.
81
Závěr
22
Závěr
ROM mikropočítače SHARP MZ-821 obsahuje značné množství chyb rftzných druhft. Především jsou to koncepční chyby, které byly pravděpodobně z větší
části zpftsobeny snahou o maximál.nf kompatibilitu se staršími systémy firmy
SHARP, přeQevším s řadou MZ-700 a MZ-SOK
Celá konzola je napsána tak, že bohužel není příliš použitelná. Pracuje pod
několika rftznými kódy, které jsou si částečně podo'bné a z nichž nelze ani jeden označit za standardní. "ASCll" je zde jen parodií na americký standard, malá písmena
jsou volně rozseta po horní části kódu, kde se naprosto libovolně střídají s grafickými znaky a pochopitelně nejsou uspořádána podle abecedy. A přitom v generátoru
znakft jsou tak, že jejich převod na ASCII je pouze otázkou přičtení konstanty.
Takzvaný display kód je odvozen z generátoru znakft, ale má dvě varianty lišící
se v řídících znacích, pro KBD: a CRT:.
Tabulky dekódováni klávesnice zakazují veškeré CTRL-znaky, kromě šesti,
které jsou shodné s editačními klávesami. Klávesy TAB a Fl-FS nejsou vftbec čteny.
Není jasné, proč jsou v paměti ROM texty chybových hlášení, když vlastní interpret není rezidentní.
Logický formát záznamu není příliš dokonalý a těch pár dobrých vlastnosti co
má stejně neumí existující software využít.
Existují dva zcela nezávislé monitory s minimálními schopnostmi a podprogramy pro zpracováni příkazft jsou tedy v ROM dvakrát.
Poněkud méně početnou skupinu tvoří chyby v kódu. Sem patří jednak vysloveně překlepové chyby jako např instrukce:
LDHL,71H
která má správně vypadat takto:
LD (HL),71H
A také velké množství rftzných mezer ap., které byly pravděpodobně vytvořeny
pomocí pseudoinstrukcí DEFS nebo ORG.
Nebo třeba ]GOPGM, kde není respektována existence souboru s nulovou
délkou, přesto, že všechny ostatní podprogramy s něčím takovým počítají. V tomto
případ'ě končí voláni tohoto podprogramu instrukcí LDIR s nulou v BC registru. To
znamená pád systému, nebo v nejlepším případě nesmyslnou inicializaci periferních
obvodft.
Také se zde velmi pečlivě testuje, zda již program není uložen od správné adresy, ale díky špatně spočítanému relativnímu skoku se LDIR stejně provede.
82
Závěr
22.1
Několik
rad nakonec
- Nezapomfnejte, že SP je standardně v oblasti od lOFOH. Pokud namapujete
CGROM a provedete CALL, jistě se budete divit.
-Jestliže chcete používat program uložený v hlavičce a s délkou bloku Oje
nutné, aby jako ukládací adresa byla uvedena hodnota 1200H. Jako první akci musí
tento program zavolat @INI55 pro obnovu správného nastavení 18255.
-Přerušení sice přijde jednou za dvanáct hodin, ale o to je záludnější. Poškození 1038H se tedy mflže projevit až za hodně dlouho a nejspíše úplným pádem systému.
-Přepínač
MZ-700 ON/OFF nemá s nastavením módu počítače takřka nic
je pouze testován před spuštěním nahraného programu a podle jeho
polohy je softwarově nastaven příslušný mód. Pokud je nastavení módu také na začátku zaváděného programu, na poloze přepínače nezáleží.
společného,
- Standardní monitor vždy nahrává program od adresy 1200H a pak ho přemís~
tí na adresu správnou. To ocení každý, kdo v té oblasti měl data a nechtěl o ně přijít.
V tomto případě je nutné provést GOOAD a takto přejít do pftvodního monitoru
MZ-700. Povel L tohoto monitoru už Ukládá program hned od správného místa.
- V každém módu nelze použít pouze příslušné mapování I/0 portft. V módu
MZ-700 se tedy nelze odkazovat např. na port OD2H.
Přejeme
vám i
sobě hodně pěkných
prograruA.
Petr a Martin
83
Obsah
23 Obsah
1
2
3
4
5
84
Úvod .......................... ... .............. ..... ... 5
Použité konvence . . . . . . . . . . . . . . . . . . . . . . . . . . .6
Struktura ROM ... .•.. . ....... .. ............. .. ......... 7
Mapování paměti .... .......... ... ............ . .......... 8
Mapování paměti v MZ-800 módu . . . . . . . . . . . . . . . . . 9
Mapování paměti v MZ-700 módu . . . . . . . . . . . . . . . . .10
Monitor 1Z-013B ........................................ ll
Přehled příkazfl dolního monitoru . . . . . . . . . . . . . . . . .ll
J = Jump . . . .
ll
L = Load . . . .
ll
F = F????
ll
B = BEPP ON!OFF
ll
# = Restart
ll
M=Modify
ll
P = printer service
12
S = Save
12
D = Dump
12
Některé podprogramy monitoru . . . . . . . . . . . . . . . . . .12
[HLHEX 013DH
12
[GE1L 012FH
12
[PCHAR 018FH . . . . .. . . . . . . . . . . . 12
[P1EXT01A5H
. . . . . . . . . . . . . . . 12
Obrazovka .............................................. 13
Připojení CRT: . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
Uspořádání VRAM v MZ-700 módu: . . . . . . . . . . . . . . .13
Tvar atributu . . . . . . . . . . . . . . . . . 13
Generátor znakfJ. . . . . . . . . . . . . . . . . . . . . . . . . . . .14
14
Struktura generátoru
Obsah generátoru
. . _ . . . . . . . . . . . . . 14
Generátor znalďi. CGRAM
. . . . . . . . . . . 14
Podprogramy pro práci s CRT: . . . . . . . . . . . . . . . . . . .15
@LETNL 0006H
15
@IFNL? 0009H .
15
@PRNTS OOOCH
15
@TAB OOOFH
15
@PRNTC 0012H
15
@MSG 0015H
16
Obsah
@RST18 0018H
16
@?DPCf ODDCH
16
@BTIIEX 03C3H
16
@MHEX 03B1H
16
@HLHEX 03BAH
16
. @?NLHL OSFAH
16
@?POINT OFBlH
16
@?ACUR OFB4H
16
@CURON OB92H
16
@CUROF OSFOH
17
@BUKC09E3H
17
@AVRAM ODBSH
17
@? ADCN OBB9H
17
@?DACN OBCEH .
17
@PRNTA 096CH
17
@ICSRH 096FH
17
6 Klávesnice ................................. . .......... .. 18
Připojení klávesnice . . . . . . . . . . . . . . . . . . . . . . . . .18
Podprogramy pro práci s klávesnicí . . . . . . . . . . . . . . . . .19
@??KEY 09B3H
19
@GETKY 001BH
19
@GETKD 08CAH
19
@WGKEY 0830H
19
@KBDIN OASOH
19
@BRKEY 001EH
20
7 Magnetofon .. ... . ... .. .. . .. . . . ... . . . ... ... . . .. .... ...... 21
Připojení CMT: . . . . . . . . . . . ... .. .. .. .. . . . . . . 21
Fyzický formát záznamu. . . . . . . . . . . . . . . . . . . . . . . .21
Logický formát záznamu . . . . . . . . . . . . . . . . . . . . . . .22
Hlavička souboru . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Podprogramy pro práci s CMT: . . . . . . . . . . . . . . . . . . .24
@WHEAD 0021H
24
@WDATA 0024H
24
24
@RHEAD 0027H .
@RDATA 002AH
24
@VERIF 002DH
24
@RBLOK OSOEH
24
@VBLOK OSADH
24
@CHECK 071AD
24
@WBYTE 0767H
24
@RBYTE 0624H
24
@MGO OA01H .
24
@MG 1 OA1AH
24
@WTMRK077AH
25
85
Obsah
@RINTR OFE2H
25
@RTMRK 065BH
25
@MGON 069FH
25
@MGOFF 0700H
25
war01 0601H
25
8 Reálný čas ... . ................................... . .... . . 26
Podprogramy pro práci s reálným časem . . . . . . . . . . . . . .26
@TIMST 0308H
. . ·. . . . . . . . . . . . . 26
@TIMRD 0358H
. . . . . . . . . . . . . . . 26
@CLOCK 038DH . . . . . . . . . . . . . . . 26
9 Akustický výstup . ... . ... . ..... . . . ... ... .. . ... . . . ... .. .. .. 27
Řízeni akustického výstupu . . . . . . . . . . . . . . . . . . . . .27
Podprogramy pro akustický výstup . . . . . . . . . . . . . . . . .28
28
@MELDY 0030H
@MSTA 0044H .
28
@MSTP 0047H .
28
@MELTE 031CH
28
@MELW028CH
28
@XTEMP 02E5H
28
Tabulky melodií . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
29
!MEL 026CH
!MEL# 0284H . . . . . . . . . . . . . . . . 29
!MELEN 029CH
. . . . . . . . . . . . . . . 29
10 Monitor 9Z-504M ........... . ........... . ... .. .......... 30
Přehled povelft horniho monitoru
. . . . . . . . . . . . . . . . .30
J = Jump
30
G = Gosub
30
L = Load .
30
F = Floppy disk
31
B = Beep ON/OFF
31
M = Modify
31
S= Save . . . .
31
V= Verify
31
D = Dump
31
Povely pro práci se SRAM . . . . . . . . . . . . . . . . . . . . . .31
ES = SRAM disk save
. . . . . . . . . . . . . 31
EB = SRAM disk load
. . . . . . . . . . . . . 31
Povely pro práci s QUICK-diskem .. .. .. . .. . . . .... .32
QL = QUICK-disk Load
32
QS = QUICK-disk Save . .
32
QF = QUICK-disk Format
32
QD = QUICK-disk Directory
32
QC = QUICK-disk Copy
32
32
QX = QUICK-disk Xcopy .
86
Obsah
ll IPL loader ........................... : . .... .... .... .. .. . 33
Služby pro kopírování programfi . . . . . . . . . . . . . . . . . .33
@COPYL OE807H
. . . . . . . . . . . . . . 33
@COPYS OE80AH
. . . . . . . . . . . . . . 33
@COPYV
. . . . . . . . . . . . . . . . . 33
12 Floppy disk ....... .... : ................. ..... ..... .. .... 34
· Připojení FD: . . . . . . . . ·. . . . . . . . . . . . . . . . . . . . . 34
Logický formát . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Podprogramy pro práci s FD: . . . . . . . . . . . . . . . . . . . .34
@FDBOOTOE44AH
35
@FDREAD OE5A7H
35
@FDON OE517H
35
@FDSEL OE4DCH
35
@FDDESL OE530H
35
@FDTRO OE548H
35
@FDSTOP OE658H
35
@FDTR OE61BH
35
@FDSEC OE62BH
35
@FDSEEK OE528H
35
@FDTR? OE696H
35
@FDNEXT OE63CH
35
@FDCMD OE555H
36
@FDSTRT OE64EH
36 .
@FDWfl OE568H
36
@FDWf2 OE587H
36
???FD OE8D5H . . . . . . . . . . . . . . . 36
13 SRAM: Sériová paměť ........................ . .......... 37
Připojení SRAM: . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Podprogramy pro práci se SRAM: . . . . . . . . . . . . . . . . .37
@???RD OE7BAH
37
@RDCRC OE70EH . . . . . . . . . . . . . . 37
@?HEAD OE729H
. . . . . . . . . . . . . . 37
@RDLOAD OE6DAH . . . . . . . . . . . . . 37
15 Podpora BASlCu . . . . ............... . .................... 39
14 QUICK-disk .... ......... . ........ ... ................... 38
Podprogramy pro práci s QUICK-diskem . . . . . . . . . . . . .38
@QDISK OEOlOH .
38
@MTON OE29BH .
38
@MTOFF OE2E8H
38
@QDCRC OE3C3H
38
@EOMSG OE3B2H
38
@QRBYT OE3FOH
38
@QWBYT OE3DBH
. . . . . . . 38
16 Tiskárna ...... .. .................... . ......... . ......... 40
87
Obsah
Připojení LPT: . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Obsloužení chyb . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Podprogramy pro práci s LPT: . . . . . . . . . . . . . . . . . . .40
@INLPT OF418H . . . . . .
41
@INICF OF41EH . . . . . .
41
@PS1R OF8F1H
. . . . . .
41
PCHR1,PCHR2 OF412H,OF415H
41
@CRLPT OF41BH
41
@SLPT OF634H
41
@BTLPT OF41BH
41
@B1LP1 OF636H
41
@B1LP2 OF637H
41
@INTP OF400H
41
@INTPX OF6BEH
41
@LPTSS OF421H
41
@LPTGO OF424H
42
@SSGO OF427H
42
@NOBUF OF42AH
42
@PLNA? OF6BOH
42
@BTISK OF6FOH
42
@PSTBO OF705H
42
@PSTB OF706H
42
@PSTAT OF70FH
42
@HCOPY OF40FH
42
@PBYTE OF436H
42
17 RAM disk pro Basic . . ......... . . . .... . . . ..... .. ... .. .. . . . 43
Připojení RD: . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Podprogramy pro řízení RAM disku . . . . . . . . . . . . . . . .43
@RDOA OF743H
43
@RDIA OF74EH
. . . . . . . . . . . . . . . 43
@RDODE OF759H
. . . . . . . . . . . . . . 43
@RDIDE OF759H . . . . . . . . . . . . . . . 43
18 Nastavení reálného času ... . . . . . . ........ . ........ . ...... . 44
Podprogramy pro práci s reálným časem . . . . . . . . . . . . . .44
@TMSTX OF433H
44
@TMGTX OF436H
. . . . . . . . . . . . . . 44
@TMSET OF436H . . . . . . . . . . . . . . . 44
@TMGET OF406H
. . . ·. . . . . . . . . . . 44
19 Obsluha joysticku .. . . . . . .. . .. . . . ..... . . ...... . .. .. .. ... . . 45
Připojení joysticku . . . . . . . . . . . . . . . . . . . . . . . . . .45
Podprogramy pro joystick . . . . . . . . . . . . . . . . . . . . . .45
@STICK OF409H
46
@S1RIG OF49CH
46
@JOYIN OF9FFH . . . . . . · . . . . . . . . . 46
88
Obsah
@KBUNOFA15H . . . . . . . . . . . . . . . 46
20 Obe ně užitečné podprogramy ..... . .. . ................... 47
Obe 1ě užitečné podprogramy. . . . . . . . . . . . . . . . . . . .47
@Bl ~PD OF430H
47 .
@N \1B OF76FH
47
@N; .IR OF7BAH
47
@SKiP OF7CAH
47
@FNDA OF737H
47
@OUTY OF940H
48
@SUBDE OF9D2H
48
@ADDIU., OF44CH
48
@PUSHA OF45AH
48
@PUSH OF467H
48
Texty umístěné od OFDAOH . . . . . . . . . . . . . . . . . . . .49
21 Grafický mód zobrazení . ...... .. .... .. .... .. . ............ 51
Úvod ... . . . .... .. .. . . . . . . . . . . . . . . .... .. 51
Organizace obrazovky . . . . . . . . . . . . . . . . . . . . . . . . 51
Obrazovková paměť . . . ~ . . . . . . . . . . . . . . . . . . . .. 52
Videoprocesor GDG . . . . . . . . . . . . . . . . . . . . . . . . .52
Seznam I/0 adres videoprocesoru . . . . . . . . . . . . . . . . .52
Organizace VRAM . . . . ... .. .. .. ... .. ... .. .. .53
Kapacita VRAM, standardní a rozšířená VRAM
53
Rozdělení VRAM do rovin
53
Adresování VRAM . . .
53
Logické a fyzické číslo barvy
54
Definice režimu obrazovky
54
Přehled jednotlivých režimfl obrazovky (DMD)
55
Zápis dat do VRAM . . . . . . . . . . . . . . . . . . . . . . . . .57
Mapování VRAM
57
Přístup do VRAM
58
WF registr
. .
58
Módy zápisu WMD
58
Zápis do jednotlivých rovin (WMD = Oaž 3)
59
Zápis ve specifikované barvě (REPLACE, PSET) . . . . 60
Čtení z VRAM .... . ... . .... . . .... . ........ 62
RF registr . . . . .
62
Jednoduché čtení
62
Čtení specifikované barvy
62
Pallet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
PALvDMD2(16barev)
65
Zápis do PAL registru
. . . . . . . . . . . . . 65
Praktické použití PAL
. . . . . . . . . . . . . 65
Border .... . .... . . . . . .. .. . . .... .... . . . . . 66
Status obrazovky . . . . . . . . . .... . . . . . . . . .... .. 67
89
Obsah
SeroU . ·. . . . . . . . . . ... .. . . . .. . . . . . . . . . . . . .67
SeroU registry
68
Plnění SeroU registrfl
68
Rolovací okéno
69
Provedení seroUu
69
Vertikální seroU .
71
Horizontální seroU
71
Grafika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Mód pro grafiku
. . . . . . .
71
Jakým zpfisobem se bude kreslit
. . . . . . .
72
Nastavení pracovní barvy a módu zápisu
. . . .
73
Popis grafických WMD (PSET, OR, RESET, EXOR)
74
čtení z VRAM při práci s grafikou
. . . . . .
75
Alternující režim v grafice
. . . . . . . . .
77
Obrazovka, jako textová periferie . . . . . . . . . . . . . . . . . .77
DMD pro textovou obrazovku
77
78
Nastavení barvy písma
. . . .
Nastavenť barvy pozadí znaku
78
Rozkreslování znaku na obrazovku
78
čtení v textovém režimu . . . .
80
Alternující režim a seroU . . . .
81
22 Závěr ......... . .. . .. . . . . ... . ...... . . .... . .. . .. .... .. ... 82
Několik rad nakonec . . . . . . . . . . . . . . . . . . . . . . . . .83
23 Obsah . ...... ....... . ..... . .. ...... ·....... .. . .. .... . . . .. 84
90
Petr Odehnal, Martin Veverka a kolektiv
Kurs základního programového vybavení mikropočítače SHARP MZ 800
Popis podprogramů monitoru
obálka : ak.mal. Karel Čapek
Vydalo (c) ZENITCENTRUM HZ ÚV SSM, Hostímská 1, 26601 Beroun jako součást souboru kursu
základního programového vybavení mikropočítače SHARP MZ 800. Samostatně neprodejné.
JKPOV 735 342 41 1526

Podobné dokumenty

krajská soutěž mužů 2015/2016

krajská soutěž mužů 2015/2016 KRAJSKÁ SOUTĚŽ MUŽŮ 2015/2016 Technické normy: Soutěž bude odehrána 4 kolově. Poté týmy na 1. – 4. místě se zúčastní play-off – semifinále, finále a zápas o 3. místo na dvě vítězná utkání. V případ...

Více

POKlADNICE ODPUSTKOVÝCH MODLITEB

POKlADNICE ODPUSTKOVÝCH MODLITEB 1 . s t a v m i los ti B o ž í; nejdříve musí býti odpuštěn hřích, pak tresty za něj. Píi odpustcích plnom. vyžadu­ je se též, aby byl věřící prost náklon· nosti ke hřichu; jedná-li se o prosté náv...

Více

Ovládání znakových LCD s řadičem HD44780 – 1. díl

Ovládání znakových LCD s řadičem HD44780 – 1. díl http://pandatron.cz/?685&ovladani_znakovych_lcd_s_radicem_hd44780_%EF%BF%BD_1._dil

Více

Stáhnout PDF verzi příručky

Stáhnout PDF verzi příručky tiskových sestav, doporučujeme seznámit se nejprve s touto příručkou. NÁPOVĚDA. Program obsahuje interaktivní nápovědu. Stačí stisknout F1 a objeví se stránka se základním popisem otevřené agendy a...

Více

Přehled výrobků

Přehled výrobků Provedení je dostupné jak formou převodovek tak i formou převodových motorů, které je možné přesně konstruovat v závislosti na typu použití podle výkonu, krouticího momentu a otáček. Tím je zajiště...

Více

Od svobodného softwaru k aktivismu v ulicích…

Od svobodného softwaru k aktivismu v ulicích… ogové re ce pty a digitál ní pe k ařství Počítače m l uví je n v binárním jaz yce ; což je řada po s obě jdoucích 0 a 1. Protože čl ověk by těžk o m oh l k om unik ovat tak ovým z půs obe m , byl y...

Více

Jazykovědné aktuality 2005/3–4 - Jazykovědné sdružení České

Jazykovědné aktuality 2005/3–4 - Jazykovědné sdružení České jako nesprávně tvořené, v další části však od tohoto hodnocení slovník upouští. Důsledkem této skutečnosti je, že některé složeniny přijímá už jako profesní (event. slangové), např. gramodeska, a n...

Více