Zkusíme si popsat, jak je možné velice snadno připravit CF nebo přinejhorším HDD pro MDOS3. Celý článek »
DEMFIR d0.5b
Nová verze DEMFIRu: Celý článek »
7.díl: Klávesnice, pokračování
Použití ROMky nebo její obšlehnutí není jedniný způsob, jak testovat klávesy. Celý článek »
Text Machine
Naskenoval jsem Chipovi manuál a diskety od TEXT MACHINE. Pokud je taky někdo chcete, tak jsou tady: Celý článek »
Pro napsání první samostatné aplikace nám ještě schází si vysvětlit, jak funguje vstup od uživatele: z klávesnice. Jestli jste četli Assembler a ZX Spectrum 1, tak dnešní díl nepřinese nic nového, většinou budu čerpat z této publikace a nakonec si ukážeme na ROM nezávislý program na čtení klávesnice, který je v MDOS3. Celý článek »
Před dalším dílem o klávesnici si musíme vysvětlit princip přerušení, k čemu slouží a jak jej využít. Celý článek »
Už jsme se naučili psát písmenka, už známe organizaci videoram, takže se můžeme pustit do něčeho zábavnějšího: psaní celých textů. Celý článek »
V dnešnom diely si ukážeme, ako je organizovaná videoram a a ko sa s ňou pracuje. Popíšeme si niektoré rutiny na prácu s adresami vo videoram a tiež prevody súradníc na adresy vo videoram. Taktiež bude dobré, keď si zoženiete tabuľky adries videoram. Nájdete ich napr. v ZXM 6/1994 alebo na adrese http://nairam.sk/vram.pdf. Celý článek »
UTULITY pro PC
V taputils.zip najdete hlavně programy Tapto0 a 0totap na převody z formátů .000 a .TAP (to se může hodit) pro DOS od Busyho, taputils_1.04a_linux.tar.bz2 je pro Linux od Tritola.
Utility pro Realspec (tap2mbd, tap2d80, d802tap). V souboru tools-realspec_win32.zip jsou programy pro Windows, v souboru tools-realspec_linux.tar.bz2 jsou zdrojové kódy a MakeFile pro Linux.
Programy TAP2MBD a TA2D80 převádí TAP soubory do image disket pro MB-02 a D80 ve formátu pro emulátor RealSpec. Opačně pak D802TAP pak provádí převod z D80 image do TAP souboru. Autorem těchto programů je Marek Zima, pro moderní překladače přizpůsobil Tritol.
Pokec k TAP2D80: Program bere jednotlivé bloky z TAP souboru a láduje je do existujícího image. Pokud image neexistuje, založí ho. Jméno diskety je voleno podle výstupního souboru. Syntaxe příkazu je: tap2d80 tapfile.tap d80file.d80 p/P
(parametr P je PAUSE, pokud budete prg. spouštět jako já z příkazové řádky Windows Commanderu, tak se vám automaticky nezavře, ale bude čekat, až si prohlídnete, co se na obrazovce dělo). Pokud program narazí ve FAT na vadný sektor, skončí. Image s vadnými sektory je na nic. Existující image je kontrolován na značku DOSu a formát diskety (musí být SDOS a 80x9x2). Bezhlavičkové soubory jsou převáděny na soubory s příponou H které mají flag byte uložen v adresáři na místě 19.byte (před atributy). To umožňuje programům MASTERcopy, TOOLS 128 a D802TAP je uložit na TAPE nebo do TAPu opět bez hlavičky a se správným flagem. Atributy jsou vytvářeny výchozí jako u Basicu a to
RWED.
Pokec k D802TAP: co k němu dodat. Přečtěte si odstavec výše a všechno si otočte. Snad jen, že nepřevádí Snapy a seQuence a jiné Basicem nepodporované přípony. Výjimku tvoří H (bezhlavičky).
Pokec k TAP2MBD: Bude časem, zatím z toho nevěšte hlavy ani sebe.
Stažení:
- taputils.zip
- taputils_1.04a_linux.tar.bz2
- tools-realspec_linux.tar.bz2
- tools-realspec_win32.zip
- mbprogs_dos.zip
- mbprogs_linux.tar.gz
- utils.zip – nově přeložené utility od Mikezt pro win32
- Odkazy:
Vidíte, že použití programů z ROM nemusí být zrovna to pravé ořechové, proto si ukážeme vlastní program na tisk znaků, který si můžete ještě nějak vylepšit. Výhoda je třeba v tom, že se nemusíme starat o otevírání správného kanálu nebo si můžeme definovat vlastní font a nemusíme být odkázání na font v ROM.
Vyzkoušejte tento základní prográmek a studujte rozdělení obrazovky:
cpu z80undoc relaxed on org 25000 ld hl,16384 ;nastav pozici ld (POZICE),hl ;uloz ji do promenne ld a,'A' ;znak A call znak ;vytiskni ld a,'B' ;znak B call znak ;vytiskni ret ;vrat se ZNAK sub 32 ;odecti tak aby znak byl od nuly ld l,a ;pismenko je nyní v HL ld h,0 ;horni byte na nula add hl,hl ;nasob 2x add hl,hl ;nasob 4x add hl,hl ;nasob 8x ld de,FONT ;adresa fontu add hl,de ;adresa predlohy pismenka = font + (8*(znak-32)) ld de,(POZICE) ;adresa pozice na obrazovce push de ;musi byt presne v atributu ld b,8 ;smycka s 8 pruchody znak1 ld a,(hl) ;vezmi predlohu znaku ld (de),a ;dej ji do obrazovky inc hl ;pozun se na dalsi byte predlohy inc d ;posun se o byte dolu djnz znak1 ;opakuj 8x - vykresli cele pismenko pop de ;vyzvedni adresu pozice inc e ;posun ji o jeden znak vpravo jr nz,znak2 ;pokud neni prekrocena tretina, tak je to OK ld a,d ;vyssi bajt adresy do A add a,8 ;pricti tretinu obrazovky ld d,a ;a dej ji zpet cp 88 ;pokud by presahla treti tretinu, jr c,ZNAK2 ;nepresahne, skok ld d,64 ;tady presahne, tak nastav prvni tretinu ZNAK2 ld (POZICE),de ;uloz pozici na priste ret ;navrat zpet POZICE dw 16384 ;zde se uklada pozice FONT equ 15616 ;zde je definovan font
Jesti tedy někdo touží po vlastním fontu, musí si jej nakreslit (třeba v Art studiu) a ve zdrojáku na něj odkázat třeba: FONT binclude font.bin
nebo jej může mít definován jako blok čísel pomocí db
, asi takto:FONT db 0,60,66,…
.
Zde se hodí vysvětlit, jak jsme došli k adrese, kde je uložena předloha toho konkrétního písmenka: Na adrese 15616 začíná předloha znaku “ “ (mezera). Tento znak má kód 32 (dekadicky). Každé písmenko má 8 bajtů dlouhou předlohu, tedy musíme od písmenka odečíst číslo 32 (aby se to vyrovnalo), vynásobit 8x a přičíst 15616.
Tento prográmek je možné ještě vylepšit. třeba výpočet adresy předlohy by šel zkrátit tak, že se nebude odečítat 32 a místo adresy FONT se zadá FONT-(32*8). Program tiskne tak, že to, co bylo na obrazovce jako podklad, se smaže a písmenko se vykreslí. Toto by se dalo taky velice snadno zařídit:
ld b,8 ;smycka s 8 pruchody znak1 ld a,(de) ;vezmi byte z obrovky or (hl) ;pridej k nemu predlohu ld (de),a ;dej to vsechno do obrazovky inc hl ;pozun se na dalsi byte predlohy inc d ;posun se o byte dolu djnz znak1 ;opakuj 8x - vykresli cele pismenko
Zkuste instrukci or (hl)
nahradit xor (hl)
nebo and (hl)
.
Taky vidíme, že zadání polohy na obrazovce není nic moc. Zadávat přímou adresu a navíc tak, aby byla vždy do atributu není zrovna to pravé. Takže zkusíme někde vyšťourat program, který nám adresu vypočte podle souřadnic (řádek,sloupec) zadaných v registrech b
a c
(b=řádek 0-23, c=sloupec 0-31):
ADRSET ld a,c ;sloupec add a,a ;nasob 8x add a,a add a,a ;dostaneme pixelovou pozici ld c,a ld a,b ;radek add a,a add a,a add a,a ;opet pixel call $22B0 ;prepocet pixelovych souradnic na adresu v pameti ld (POZICE),hl ;uloz do promenne ret
Takze volani programu by mohlo vypadat asi takto:
START ld b,10 ;b=radek, c=sloupec ld c,5 ;nebo kratsi zapis (ld bc,10*256+5) call ADRSET ;nastav pozici ld a,'A' ;znak k vytisteni call ZNAK ;vytiskni ret
Další vychytávkou by mohlo být nastavení barev. Musíme tedy adresu atributu na obrazovce vypočítat. Počítání je celkem jednoduché, dolní byte adresy se nemění, horní upravíme na číslo třetiny a k němu přičteme horní byte adresy začátku atributů ($5800).
ATTRIB ld hl,(pozice) ;precti adresu pozice ld a,h sub $40 ;posunuti pocatku adresy do nuly rrca ;deleni 8 rrca rrca and 3 ;v A je nyni cislo tretiny add a,$58 ;posun do attributu ld h,a ;do vyssiho bajtu, nizsi je stejny ld a,(COLOR) ;uloz do promenne ld (hl),a ret COLOR db 0
Úprava programu je pak asi taková, že po vykreslení znaku (po instrukci djnz znak1
napíšte call ATTRIB
a je to hotové.
Domácí úkol bude dnes o hodně složitější a budu trvat na tom, aby jej alepoň někdo, kdo měl zájem na tomto seriálu, splnil. Rutina ZNAK
umí tiskat do attributových souřadnic. Navrhněte řešení, které by umělo tiskat písmenko s dvojitou výškou do libovolné polohy po ose y (po ose x ne, to by vyžadovalo mnohem více prostoru). Tedy tak, abych programu ADRSET zadal číslo řádku od 0 do 184 a číslo sloupce od 0 do 31 a on dokázal na tuto pozici znak vytisknout (bez atributů). A aby to nebylo zas tak složité, napíši sem rutinu, která posune registr de
o bajt níže v obrazovce, nehledě na její rozložení třetin.
DOWNDE inc d ;posun v ramci textoveho radku ld a,d ;je jednoduchy and 7 ;neni-li prekrocen ret nz ;vrat se zpet ld a,e ;prechod mezi textovymi radky add a,32 ;pokud pri pricitani dojde k preteceni ld e,a ;je to signal, že doslo k prechodu ld a,d ;mezi tretinami jr c,DOWNDE2 ;hotovo a tedy odskok sub 8 ;jeste zbyva uprava horniho bytu ld d,a ;pri prechodu mezi tretinami DOWNDE2 cp 88 ;test opusteni obrazovky ret c ;nedoslo, navrat ld d,64 ;doslo, uprav na zacatek ret ;navrat
O splnění úkolu mě informujte mailem a poštete mi zdrojový kód řešení.
