Monitor 1Z-013B Monitor 1Z-013B je 4 KB dlouhý provozní systém,který je permanentně uložen v ROM. V tomto monitoru jsou k dispozici všechny důležité rutiny ,které jsou potřebné k programování MZ-800. Monitor 1Z-013B byl převzat z MZ-700. To znamená,že všechny programy z MZ-700 běží i na typu MZ-800. Monitor 1Z-013B je uložen v paměti od 0000H do 1000H. Běžně jsou volány pouze rutiny tohoto monitoru.K nastartování monitoru dojde: 1.zapnutím počítače nebo stisknutím RESET 2.po objevení nabídky stiknutím M 3.po objevení * zadáním J00AD Tento monitor obsahuje téměř ty samé příkazy,které jsou popsány v návodu. Je třeba se zmínit o dvou rozdílech: 1.příkaz GO tlačítko G je nyní J jako JUMP. 2.přikazem BANK SWITCHING tlačitko # je možné monitor odpojit. Současně dojde k teplému startu interpretru BASIC. První část monitoru sestáva z tabulky skoků,které umožňují: 1.slučitelnost s MZ-80K a MZ-80A. 2.nejdůležitější rutiny se dají snadněji zapamatovat. Rutiny se volají příkazem CALL XXXXH. Podprogramy monitoru: 0000H start systému ,skok na E800H, na startovací adresu horního monitoru 0003H GET LINE.Umožňuje zadání řádky, tedy více znaků z klávesnice.Zadaný řetězec je uložen v paměti určené registrem DE.Rutina končí stisknutím CR Na konec řetězce je přidáno CR=0DH. Maximálně je možné zadat 80 znaků. Při použití SHIFT+BREAK je na místo určené registrem DE uložen místo řetězce kód BREAK. 0006H NEW LINE.Kurzor je umístěn na počátek následující řádky. 0009H NEW LINE.Kurzor je umístěn na počátek následující řádky,pokud již nestojí na počátku řádky. 000CH PRINT SPACE.Dá na pozici kurzoru prázdný znak. 000FH PRINT 10 SPACES.Zadá od pozice kurzoru max. 10 prázdných znaků až k následující pozici TAB (0,10,20,30). 0012H PRINT CHARACTER.Zobrazení ASCII znaků uložených v akumulátoru.Znaky 11H-16H nebudou zobrazeny,ale jejich funkce se provedou. 0015H PRINT MESSAGE.Zobrazení řetězce od pozice kurzoru.Počáteční adresa řetězce bude převzata z DE registru. Řetězec musí být ukončen 0DH.Řídící znaky 11H-16H budou provedeny. 0018H PRINT MESSAGE.Zobrazení řetězce od pozice kurzoru.Počáteční adresa řetězce bude převzata z registru DE. Řetězec musí být ukončen 0DH.Řídící znaky 11H-16H nebudou provedeny,ale zobrazeny inverzně. 001BH GET KEY.Hodnota v ASCII je odečtena z klávesnice a uložena v akumulátoru.Když není stisknuta žádná klávesa je v akumulátoru hodnota 00H. Zvláštní klávesy mají hodnotu: DEL=60H INST=61H ALPHA=62H GRAPH=63H SHIFT+BREAK=64H CR=66H volná klávesa=90H volná klávesa je použita u japonského modelu pro přepínání znaků Hiragana a Katagana.Nelze použít pro funkční tlačítka. 001EH SHIFT,BREAK,KONTROL.Při stisknutí BREAK je v CARRY hodnota 1. Při stisnutí SHIFT ma bit 6 v akumula- toru hodnotu 1. Při stisknuti CONTROL má 5 bit v akumulátoru hodnotu 1. Při současném stisknutí SHIFT+CONTROL má 4 bit v akumulátoru hodnotu 1. 0021H WRITE HEADER.Hlavička programu bude zapsána na kazetu.Hlavička obsa- huje:název,začátek,délku programu, kód nahrávky,startovací adresu.Uvedené údaje jsou uloženy na adresách 11F0H- 116FH. 0024H WRITE DATA.Program označený pocáteční adresou a délkou bude zapsán na kazetu.Program (blok dat) bude nahrán dvakrát rychlostí 1200 bitů/s. 0027H READ HEADER.Hlavička programu bude přečtena z kazety.Obsah hlavičky jako na 0021H. 002AH READ DATA.Nahrává program určený počáteční adresou a délkou. 002DH VERIFY.Srovnání programu z kaze- ty s programem v paměti.Při chybě je hlášeno CHECK SUM ERROR. 0030H MELODY.Hraje melodii,která odpovídá řetězci,jehož počáteční adresa je uložena v DE-registru.Řetězec musí být ukončen 0DH nebo C8H.Současně je připojena rutina odezvy na BREAK.Při stisknutí BREAK se změní hodnota v CARRY. 0033H Nastaví a spouští zabudované ho- diny.Akumulátor obsahuje 0(AM) nebo 1(PM) a DE-registr obsahuje počet seku- nd (max.43200=12 hodin). 0038H INTERRUPT.Při příkazu RESTART skok na adresu 0038H a odtud skok na tam uvedenou adresu.Tato adresa však leží v ROM a nelze ji měnit a proto se skáče na 1038H,kde je uložen INTERRUPT vektor. 003BH READ TIME.Je čten okamžitý čas. Hodnoty jsou uloženy viz.0033H. 003EH BELL.Tón o kmitočtu 880 Hz. 0041H TEMPO SET.Určuje tempo hudby podle obsahu akumulátoru.Rychlost: 01H pomalu-07H rychle. 0044H SOUND START.Produkuje stálý tón se stanovenou frekvencí.Frekvence se vypočítá podle: F=895kHz/NM NM je dvoubytové číslo přičemž N je na adrese 11A2H a M na 11A1H. 0047H SOUND STOP.Zastavuje příkaz SOUND START. 004AH Start monitoru 1Z-013B,pak skok na E800H. 00ADH Teplý start monitoru 1Z-013B. K dispozici jsou příkazy:J,L,F,B,#,P,M, S,V,D. 00F3H JUMP.Při stisknutí J je tento program odstartovan. 00F7H BEEP ON/OFF.Spuštění je provede- no stisknutím B.Při každém stisknutí klávesnice se ozve tón. 00FFH QUICK DISK.Je-li připojen ská- če program na F000H. 0111H LOAD.Po stisknutí L je program odstartován. 0155H Test plotru.Odstartování stisk- nutím P. 018FH PLOT/PRINT CHARAKTER.ASCII hod- nota v akumulátoru je vytištěna.Některé hodnoty ASCII jsou rezervovány pro řízení plotru.Podrobněji v kapitole o řízení plotru. 01A5H PLOT/PRINT MESSAGE.ASCII hodnota znaků řetězce je vytištěna.Pozice řetězce je v DE-registru. Řetězec musí být ukončen 0DH. 01C7H MELODY.Jako 0030H 02A6H INCREMENT DE.4-krát přírůstek DE-registru.Increment znamená +1. 02ABH SOUND START.Jako 0044H. 02BEH SOUND STOP.Jako 0047H. 02E5H SET TEMPO.Jako 0041H. 02F3H CRT MANAGMENT.Program pro vnitřní řízení obrazovky.HL-registr bu- de obsahovat koordináty kurzoru.Sou- řadnice X v L,Y v H.Současně je do DE- registru nahrán údaj o tom,zda je na řádce více jak 40 znaků.Údaj je uložen od 1173H do 118BH.Kromě toho je do akumulátoru nahrána 0 nebo 1(dvojná- sobný řádek. 0308H SET TIME.Jako 0033H. 0358H READ TIME.Jako 003BH. 038DH TIME INTERRUPT.Je vymazán stav AM a nahrazen PM nebo obráceně.Současně je do hodin nahráno 43200 sekund. 03B1H DISPLAY SPACE & CHARACTER.Tisk- ne jeden prázdný znak a jeden ASCII, který je určen obsahem akumulátoru. Zobrazení je určeno adresou video RAM v HL-registru. 03BAH ASCII PRINT FOR HL.Obsah HL- registru se zobrazí na pozici kurzoru. 03C3H ASCII PRINT FOR ACCU.Obsah akumulátoru se zobrazí na pozici kur- zoru. 03D5H Data pro přepnutí na 80 znakový plotr.Na tomto místě jsou uložena data nutná pro přepnutí(01H,09H,09H,09H,0DH) 03DAH HEX TO ASCII.Hexadecimální číslo uložené v dolních čtyřech bytech akumu- látoru bude převedeno do ASCII a ulože- no do akumulátoru. 03E5H ASCII TO HEX.Mění hexadecimální číslo v akumulátoru do binární formy a výsledek uloží do dolních čtyř bitů akumulátoru.Při chybě je nastaven CARRY 03F9H ASCII TO HEX.Jako 03E5H. 0410H FOUR CHARACTER ASCII CONVERSION. Mění řetězec čtyř znaků ASCII na jedno hexadecimální číslo a uloží je do HL- registru.DE-registr musí obsahovat počáteční hodnotu řetězce. Při chybě je CARRY na hodnotě 1. 041FH TWO CHARACTER ASCII CONVERSION. Mění dvoumístný řetězec v ASCII na hexadecimální číslo a uloží je do aku- mulátoru.DE-registr musí obsahovat počáteční adresu řetězce.Při chybě zaviněné neplatným řetězcem bude CARRY obsahovat 1. 0436H WRITE HEADER.Jako 0021H. 0470H Přepnutí plotru na 40 znaků.Na této adrese jsou uložena data(01H,09H, 09H,0BH,0DH). 0475H WRITE DATA.Jako 0024H. 04D8H READ HEADER.Jako 0027H. 04F8H READ DATA.Jako 002AH. 0577H BELL.Jako 003EH. 057EH FLASHING AND KEYING.Jeden znak ve video kódu je odečten z klávesnice a uložen v akumulátoru.Současně blikne kurzor.Když není stisknuto tlačítko je v akumulátoru hodnota F0H a je naplněn ZERO. 0588H VERIFY.Jako 002EH. 05FAH NEW LINE AND ASCII PRINT FOR HL. Na počátek následujícího řádku je zobrazen obsah HL-registru. 069FH CASSETTE MOTOR ON.Zapíná motor magnetofonu. 0700H CASSETTE MOTOR OFF.Vypíná motor magnetofonu. 0759H 107 MICROSECOND DELAY.Časové zpoždění 107 mikrosekund. 07A8H M-příkaz.Příkaz MEMORY CORRECTI- ON. 07E6H GET LINE.Jako 0003H. 087CH provede CR a umístí kurzor na počátek následující řádky. 0893H PRINT MESSAGE.Jako 0015H. 08A1H PRINT MESSAGE.Jako 0018H. 08BDH GET KEY.Jako 001BH. 090EH NEW LINE.Jako 0006H. 0918H NEW LINE.Jako 0009H. 0920H PRINT SPACE.Jako 000CH. 0924H PRINT 10 SPACES.Jako 000CH. 0935H PRINT CHARACTER.Jako 0012H. 0996H 7 MILLISECOND DELAY.Časové zpoždění 7 milisekund. 09B3H INPUT KEY.Čeká s blikajícím kurzorem dokud není zadán znak s klávesnice.Není potřeba stisknout CR. Odpovídající hodnota ve videokódu bude uložena v akumulátoru. 0A32H SHIFT,BREAK,CONTROL.Jako 001EH. 0A50H Odezva matice klávesnice.Odezva všech tlačítek včetně funkčních.Během stisknutí tlačítka bude B registr obsahovat: 7.bit=0 žádná klávesa nestisknuta 7.bit=1 jedna klávesa stisknuta 6.bit=0 není stisknut SHIFT 6.bit=1 je stisknut SHIFT 5.bit=0 není stisknut CONTROL 5.bit=1 je stisknut CONTROL 4.bit=0 není stisknut SHIFT+CONTROL 4.bit=1 je stisknut SHIFT+CONTROL C-registr bude obsahovat: bit 0,1,2 číslo řádku matice klávesnice bit 3,4,5 číslo sloupce matice. viz.příloha 0A92H ASCII TO DISPLAY CODE TABLE.Od této adresy jsou uložena data k přemě- ně ASCII do videokódu. 0BB9H ASCII TO DISPLAY.Mění znaky ASCII uložené v akumulátoru na video- kód a uloží je do akumulátoru. 0BCEH DISPLAY TO ASCII.Mění videokód uložený v akumulátoru na ASCII a uloží do akumulátoru. 0BEAH KEY MATRIX TO DISPLAY CODE TABLE Od této adresy jsou uloženy videokódy odpovídající matici klávesnice.Např. při volání 0A50H je naplněn C-registr hodnotou 07H. V tabulce je třeba hledat 7.byte (počínaje od 0 a ne od 1 !!).7,Byte je CDH a to je CR. 0C2AH KEY MATRIX TO DISPLAY CODE TABLE je-li stisknut SHIFT. 0C6AH KEY MATRIX TO DISPLAY CODE TABLE je-li stisknut GRAPH. 0CAAH KEY MATRIX TO DISPLAY CODE TABLE je-li stisknut CONTROL. 0CE9H KEY MATRIX TO DISPLAY CODE TABLE pri přepnutí do Katagana.Není na evropských modelech. 0D29H příkaz D.Memory Dump. 0DA6H VERTICAL BLANKING CHECK. Čeká na vertikální mezeru při vymačknu- tí.Potom skok zpět. 0DB5H DISPLAY CODE CHARACTER PRINT.Na pozici kurzoru budou zobrazeny znaky videokódu uložené v akumulátoru. 0DDCH DISPLAY CONTROL.Změna obrazovky. Akumulátor bude obsahovat následujíci znaky: Akumulátor: Působení: C0H SCROLL o jednu řádku dolů C1H kurzor o jednu řádku dolů C2H kurzor o jednu řádku nahoru C3H kurzor o jeden znak doprava C4H kurzor o jeden znak doleva C5H kurzor na pozici HOME(D000H) C6H video RAM a RAM barvy bude vymazá- na.Kurzor bude umístěn na pozici HOME. C7H jeden znak za kurzorem bude vyma- zán a kurzor se přesune na tuto pozici. Totéž jako stisknutí DEL. C8H jeden znak bude doplněn za kurzor a znaky za ním se přesunou doprava.Jako INST. C9H přepíná klávesnici grafika/písmena CDH Bude proveden jeden CR a kurzor umístěn na počátek následující řádky. 0F5EH příkaz S (SAVE) 0FB1H Současná pozice kurzoru bude přeměněna na adresu video RAM a ulože- na v HL-registru. 0FCBH příkaz V (VERIFY) 0FD8H Maže paměť od adresy v HL.Délka obsahu,který má být vymazán je v B-re- gistru.Obsah uvedené paměti bude pře- psán hodnotou 00H. Monitor 1Z-013B používá oblast 1000H-11FFH jako pracovní,tj. v této oblasti paměti jsou uložena všechna nutná data. PRACOVNÍ OBLAST MONITORU. Adresy: Význam: 1000H-1037H volné 1039H dolní byte vektoru přerušení 103AH horní byte vektoru přerušení 103BH-10EFH oblast STACK programů 10EFH TOP OF STACK 10F0H-1107H data hlavičky programu 10F0H FILECODE (typ programu).Označení: 01=program ve strojovém kódu 02=MZ-80K program BASIC 03=MZ-80K data BASIC 05=MZ-700 a MZ-800 programy BASIC 10F1H-1101H název programu.Max.16 znaků ,musí být ukončen 0DH (CR).Když je na adrese 10F1H hodnota 0DH je program bez názvu. 1102H dolní byte délky programu 1103H horní byte délky programu.Zde uložená délka programu je rozhodující pro počet bytů,které jsou uloženy při SAVE na kazetu (0024H). 1104H dolní byte začátku programu 1105H horní byte začátku programu.Od zde uložené počáteční adresy se začí- ná nahrávat program na kazetu při SAVE (0024H). 1106H dolní byte START adresy 1107H horní byte START adresy.Od této adresy záleží zda bude nahraný program spuštěn nebo ne.Adresa musí být rovná nebo vyšší 1200H. 1108H-116FH tato paměťová místa mohou být použita k poznámkám. 1170H paměťové místo pro malá a velká písmena.Obsah 0 odpovídá velkým a 1 malým písmenům. 1171H Y-pozice kurzoru (0-18H)-řádky 1172H X-pozice kurzoru (0-27H)-sloupce 1173H-118BH každá řádka obrazovky jeden byte,to udává zda tato řádka je druhou částí dvouřádky.V tom případě je obsah 1, jinak 0. 118EH místo pro uložení znaku,který je momentálně na pozici kurzoru. 118FH místo pro dolní byte pozice kur- zoru. 1190H místo pro horní byte pozice kur- zoru.Platí pouze pro MZ-80K. 1191H paměť pro údaj zda je zobrazen kurzor (1) nebo znak (0).Platí pro MZ-80K. 1192H displejkód znaku kurzoru. 1193H STRING-Flag.Platí pro MZ-80K. 1194H místo pro počet znaků řádku,do kterého jsou zadávány údaje. 1195H délka zaváděcí části hlavičky na kazetě-dolní byte. 1196H délka zaváděcího tónu pro před- pětí pásky při zápisu popř. čtení. 1197H kontrolní součet při nahrávání- dolní byte. 1198H kontrolní součet pri nahrávání- horní byte.V tomto místě je uložen kontrolní součet při nahrávání (CHECK- SUM).Kontrolní součet je počet bytů "1" v zapsaných bytech dat.Součet slouží ke zjištění chyby záznamu. 1199H kontrolní součet při záznamu- dolní byte. 119AH kontrolní součet při záznamu- horní byte.CHECKSUM jako při 1197H a 1198H. 119BH místo pro údaj o čase AM=0, PM=1. 119CH při údaji F0H běží hodiny. 119DH KEY SOUND.Tón při stisknutí klávesy (0),bez tónu (01). 119EH paměť pro tempo hudby. 119FH paměť pro délku tónu. 11A0H paměť pro číslo oktávy. 11A1H kmitočet tónu-dolní byte. 11A2H kmitočet tónu-horní byte. 11A3H-11F3H buffer pro snímání údajů klávesnice. 11F4H-11FFH volné OBLAST E-MONITORU Monitor-E je druhý,přes 4 KB dlouhý provozní systém rovněž uložený v ROM. Jak název ukazuje je uložen v horní části paměti od E010H do F36CH. V této oblasti leží všechny rutiny pro QUICKDISK a další monitir 9Z-504M. Při zapnutí počítače a po každém RESET je proveden skok na 0000H.Odtud okamži- tě na E800H a objeví se úvodí obraz. Když se stiskne M jsme v monitoru 9Z-504M. Podrobný popis rutin QUICKDISKU je uveden v kapitole QUICKDISK. E010H QD IOS.Rozdělení rutin QUICK- DISKU.POdle toho,co je uloženo na 1130H jsou volány: 1=QUICKDISK READY-CHECK.Zkouší zda je QD připojen a připraven k provozu. 2=FORMAT.Formování QD. 3=READ.Čtení z QD. 4=WRITE.Zápis na QD. E08AH QD READY-Check rutina. E090H FORMAT-rutina. E0DAH READ-rutina. E14EH WRITE-rutina. E29BH QD MOTOR ON.Zapíná motor QD. E2E8H QD MOTOR OFF.Vypíná motor QD. E44AH FLOPPY-DISK CONTROL PROGRAMM. Řídí připojenou disketu. E4DCH FD-READY CHECK.Zkouší zda je disketa připojena a připravena k pro- vozu. E517H FD MOTOR ON.Zapíná motor diskety E530H FD MOTOR OFF.Vypíná motor diske- ty. E800H Tabulka skoků.Na toto místo se skáče po zapojení počítače nebo po RESET. E801H skok k úvodnímu obrazci monitoru E804H skok do monitoru 9Z-504M. E807H LOAD po 1200H. E80AH SAVE od 1200H. E80DH VERIFY od 1200H.Platí pro kazetu E810H skok k QD-IOS,tedy k E010H. E813H start monitoru (úvodní obrazec). V této části programu jsou aktivovány důležité adresy např.:port 8255,hodiny, 8253,Z-80 PIO,SIO. E876H inicializace barev a tempa hudby E8A9H pamět PCG je naplněna znakovým generátorem ROM,tj.v pevně uložené zna- ky v CG-ROM jsou přepsány do PCG RAM. E8E1H inicializace palety barev a barev okraje. E945H nahrání programu (IPL) z kazety a odstartování. EA5EH odezva na příkazy monitoru 9Z-504M:J,L,F,B,M,S,V,D,Q+další parame- try,E=exit ramboard,G. EAA9H příkaz J. EAB5H příkaz Q.Možné jsou následující příkazy pro QUICKDISK: QL=LOAD QS=SAVE QC=COPY QF=FORMAT QX=přehrání kazety na QD QD=DIRECTORY. EB34H GETLINE s BREAK CHECK.Tato ruti- na umožňuje zadání řádky (více znaků) z klávesnice.Zadaný řetězec je uložen do vyrovnávací paměti od 11A3H.Rutina je ukončena CR.Po ukončení je na konec doplněno 0DH. EB4CH příkaz-L EBAEH přikaz-S EC00H příkaz-V EC1EH přikaz-B EC29H příkaz-M EEA7H příkaz-QUICK DISK LOAD.Od tohoto místa je uložena rutina QD LOAD s parametry odezvy. EF2EH příkaz-QUICK DISK SAVE.Od tohoto místa je uložena rutina QD SAVE s para- metry odezvy. EFEFH příkaz-QUICK DISK DIRECTORY. F0B5H příkaz-QUICK DISK FORMAT.Od to- hoto místa je uložena kompletní rutina pro formátování disku s odezvouOK?(Y/N) F12CH příkaz-QUICK DISK COPY.Od tohoto místa je uložena rutina pro kopírování s parametry odezvy. F1A2H příkaz CASSETTE TO QUICK DISK COPY.Od tohoto místa je uložena komple- tní rutina přepisu z kazety na QD s odezvou. F202H Tabulka chyb.K hodnotám chyb přísluší tabulka chyb. PRACOVÍ OBLAST E-MONITORU. Je popsána v kapitole QUICKDISK. JEMNÁ GRAFIKA (pouze pro počítač bez dodatečné graf. paměti) U MZ-800 je možné použít jemnou grafiku a)320*200 bodů=64000 bodů/bitů=8 KBytů b)640*200 bodů=128000 bodů/bitů=16KBytů Již v základním módu je možné použit a) i b).Existují základní možnosti: V-RAM barvy jenmost DISPLAYMODEREGISTER 2*8 KByte 4 320*200 00H (DMD) 16 KByte 1 640*200 04H DMD určuje výběr druhu grafiky.Zadává se do akumulátoru a posílá na port CEH: LD A,00H OUT (CEH),A Grafické paměti leží od 8000H do max. BFFFH.Přitom jsou s vyjímkou základní- módu 640*200 paralelní.Např při DMD 00H leží dvě paměti od 8000H do 9FFFH současně.V jedné paměti jsou vždy dvě barvy.Tedy leží-li 4 paměti paralelně, je možné použít současně 2^4=16 barev. Proč současně? Dostáváme se ke zvlášt- nosti v použití barev.Barvy musí být kódovány prostřednictvím palet.V zásadě se přiděluje jedné paletě jedné barvy 16 barev.Budeme se však zabývat základ- ní verzí MZ-800. Ta může používat 4 barvy.Nejdříve se přiděluje každé pale tě jedna barva.Následující barvy jsou k dispozici: 0H=černá 1H=modrá 9H=slabá modrá 2H=červená AH=slabá červená 3H=magenta(růžová) BH=slabá růžová 4H=zelená CH=slabá zelená 5H=cyan(světlemodrá)DH=slabá cyan 6H=žlutá EH=slabá žlutá 7H=bílá FH=slabá bílá 8H=šedá V základním vybavení jsou k dispozici 4 palety.Např. paleta 1=zelená,paleta 0=slabá červená atd.Toto přidělení je provedeno instrukcí OUT na port F0H. V nižších 4 bitech odeslané hodnoty je informace o barvě,ve vyšších o pale- tě.Např.šedá je přidělena do palety 2: LD A,28H 2=paleta,8=barva OUT (F0H),A inicializace palety 2 šedou barvou. Ještě je důležité aktivovat grafiku ja- ko takovou.To se provádí příkazem IN A,(E0H),deaktivace pomocí IN A,(E1H) Takové kódování barev má: -nevýhodu=složitost -výhodu=jednoduše lze zaměnit např.ze- lené body za červené. Při doplněné grafické paměti lze dále skládat dvě obrazovky a tak míchat ba- revné tóny.Pomocí DMD se pak zvolí,kre- rý obraz se zobrazí. Nyní ke čtení dat. Toto je prováděno pomocí RF(READ-FORMAT REGISTERS).Spodní 4 bity obsahují urče- ní grafických vrstev a tím definování žádané palety barev.Příklad:má být čteno z vrstev 1 a 4,to je binárně 1001=9 tj.paleta 9. 4.bit je vyžadován pouze má-li se pracovat se dvěma obráz- ky potom má hodnotu 1 (B) s jedním 0 (A).Vzniklá hodnota je odeslána na port CDH. Podobné co platí pro čtení platí i pro zápis pomocí WRITE FORMAT REGISTRU. První 4 bity určují paletu. 4.bit má-li se pracovat se dvěma obrázky současně nebo ne. 5-7.bit představuje provozní mód.Existuje 6 druhů: a)SINGLE WRITE (0H).Data budou zapsána do určených vrstev.Ostatní se nezméní. b)EXOR (1H).Data programu budou slouče- na s daty ve HRG RAM operací EXOR a sice vrstvy určené dolními 4 bity. c)OR (2H).Jako b) ale s OR. d)RESET (3H).Do určených vrstev budou navrácena data. e)REPLACE (4H).Ukládá data do určených vrstev,ostatní obsahují hodnotu 0. Umožňuje zápis v jedné barvě palety. f)PSET (6H).Umístění jednotlivých bodů. POZOR! Program pro jemnou grafiku nemů- že pracovat od 8000H,protože při pře- pínání pamětí dojde k jeho zborcení. Příklad: bod uprostřed obrazovky na černém pozadí. 6000H IN A,(E0H) aktivace grafiky LD A,00H 320 x 200 bodů OUT (CEH),A LD A,00H paleta 0,černá OUT (F0H),A LD A,00H jednoduchý mód,paleta 0 OUT (CCH),A LD HL,8000H začátek graf.RAM LD BC,2000H konec graf.RAM XOR A akumulátor=0 LD (HL),A vymazání graf.RAM INC HL DEC BC LD A,B OR C JP NZ,6014H maže,dokud BC není 0 LD A,32H bílá paleta 3,červená OUT (F0H),A LD A,C3H PSET modus s paletou 3 OUT (F0H),A LD A,01H bod předán na střed LD (9000H),A obrazovky IN A,(E1H) vypnutí graf. módu HALT start-J6000 GRAFIKA ZNAKOVÝM GENERÁTOREM (PCG). PCG (PROGRAMMABLE CHARACTER GENERATOR. Každý znak znakové sady je možné napro- gramovat.PCG nedělá v podstatě nic ji- ného než příkaz PATTERN. MZ800 má vnitřní paměť,která leží para- lelně s hlavní pamětí od 1000H.V ní existuje sada znaků (2x256 znaků)ulože- ných po 8 bytech.Každý znak se skládá z 8x8=64 bodů. Příklad:2 třešně 12345678 bity-zrcadlově prevrác. hex. *** 1 00000111 07H **** 2 00001111 0FH * * 3 00010010 12H * * 4 00100010 22H * * ** 5 11010010 D2H ** **** 6 11110110 F6H * ** ** 7 01101101 6DH ** 8 00000110 06H 1 znamená světlý bod Uložení do paměti se provede zápisem 8 bytů=1 znak,tj celkem je potřeba 8*512=4096 bytů paměti.Přitom je třeba rozlišovat pevnou a dynamickou paměť PCG.Při inicializaci je znaková sada přesunuta z PCG ROM do dynamické paměti RAM.To je nutné protože základní znaky musí mít počítač při zapnutí. Dymamická paměť PCG leží od C000H.Nyní program pro změnu znaků.Hodnoty budou psány do normální paměti a potom pře- psány. Program pro načtení sady znaků od A800H A000H OUT (E4H),A IN A,(E0H) zapnutí PCG módu LD HL,C000H adresa dyn.PCG paměti LD BC,1000H délka dat LD DE,A800H adresa naší paměti LDIR přesun dat IN A,(E1H) vypnutí PCG módu JP 00ADH skok do monitoru Program pro inicializaci znakové sady v dynamické PCG paměti. A014H OUT (E4H),A IN A,(E0H) zapnutí PCG módu LD HL,A800H adresa naší paměti LD BC,1000H délka dat(4096 bytů) LD DE,C000H adresa PCG paměti LDIR přesun dat IN A,(E1H) vypnutí PCG módu JP 00ADH skok do monitoru Programy se odstartují pomocí JA000 (JA014),od adresy A800H leží data no- vého znaku hexadecimálně.Když zadáme JA014 přesouvají se data na A800H a zde je možné je měnit. Příklad změny znaku SPACE: Protože má každý znak 8 bytů leží znak SPACE od A800H do A807H,znak 1 (A) je od A808H do A80FH. a)JA000 b)MA000 00 FF (CR) c)JA014 Po zadání se mění obrazovka.Nyní máme možnost změnit každý znak. Následující vzorec umožňuje stanovit adresu,kde se nachází zvolený znak: Adresa=A800H+8*číslo znaku,který má být měněn.Pro znak DFH platí: Adresa=A800+8*DFH=AEF8H Program pro použití tohoto vzorce: A100H LD A,xx xx=hodnota znaku LD L,A zapsáno do HL LD H,00 ADD HL,HL ADD HL,HL ADD HL,HL 8-krát LD BC,A800H naše PCG paměť ADD HL,BC CALL 03BAH zobrazení adresy JP 00ADH skok do monitoru Na adresu A100H uložit znak a odstarto- vat pomocí JA100. PROGRAMOVATELNÝ ZVUKOVÝ GENERÁTOR(PSG) Řízení PSG pomocí instrukcí OUT: Řízení se provádí dvěma byty. 1.byte 7.bit má obsahovat 1.To ukazuje PSG, že se jedná o 1.byte. 6.,5.a 4.bit udává s kterým generátorem se bude pracovat. 3.,2.,1. a 0. bit udává dolní část kmitočtu. 2.byte 7.a 6.bit mají hodnotu 0. 5.,4.,3.,2., 1. a 0. obsahují horní cást kmitočtu. BIT:5 4 3 2 1 0 3 2 1 0 byte 2 |byte 1 Výpočet hodnoty jednotlivých bitů podle zadané frkvence. F10=11094/(FR/10) Příklad pro kmitočet 442 Hz: F10=11094/(442/10=250,995 F10=INT(F10)=251 LSB=F10/16=15,6875 LSB=INT(LSB)=15 6 bitová část=15 nebo binárně 1111 Výpočet 4 bitové části: desetinná část LSB=0.6875 MSB=FRAC(LSB)*16=11 4 bitová část=11 tedy 1011 tedy: LSB(4 bity)=11(decimálně)nebo1011 MSB(6 bitů)=15(decimálně)nebo001111 Dále je uveden program pro výpočet to- hoto vzorce v BASICu. Nyní zadání hodnot na konkrétní tónový generátor.K LSB musíme přičíst hodnoty tónový generátor 1 : 128 tónový generátor 2 : 160 tónový generátor 3 : 192 Chceme-li spustit 2.generátor: B4=11+160=171 K odeslání použijeme: OUT# 242,B4 242=F2H OUT# 242,B6 tety pro f=442 Hz OUT# 242,171 OUT# 242,15 Po provedení však nemusíme nic slyšet. Ještě je třeba definovat hlasitost. útlum gen.1 gen.2 gen.3 šum 0 144 176 208 240 15 159 191 223 255 Má-li znít tónový generátor 2 plnou hlasitostí je třeba odeslat: OUT# 242,176