home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 35 / Flop_Magazin_35_1995_03_Raster_cs_Side_A.atr / hcczb1.cap < prev    next >
Text File  |  2023-02-26  |  8KB  |  1 lines

  1. ¢        ⇨innost hardkop)rky¢      -----------------------¢¢¢  Pro za'*tek se budu zab`vat tiskem monochromatick`ch obr*zk+, kter[ jsou schopny v`stupu na pap)r bez ]prav. Jako kreslic) za@)zen) uva(uji jehli'kov[ tisk*rny umo(uj)c) osmibodovou grafiku. Jsou to samoz@ejm% dev)tijehli'kov[, ale ov%@oval jsem i 64 tryskovou bublinku a podle p@)ru'ek jsou 24 jehli'kov[ tak[ vhodn[.¢  Tiskov* hlava je vybavena svisle um)st%nou @adou jehli'ek. Uva(ujeme-li jich osm, pak na tisk jednoho sloupe'ku je pot@ebn` pr*v% jeden bajt. Norm*ln) obrazov* data ╱ZX je vyj)mka$ popisuj) horizont*ln) @*dky. V principu je tedy nutn[ nejen p@eskl*dat datov[ bajty, ale i jednotliv[ bity.¢  Uveden` p@)klad je zam%@en` na form*t obr*zku 320 ✓ 192, co( je n*& monochromatick` form*t. Situaci zjednodu&uje d%litelnost po'tu @*dek osmi, tak(e nen) t@eba o&et@ovat n%jak[ zbytky. T)m se ov&em algoritmus st*v* nepou(iteln`m pro tisk*rny se sedmi bodov`m tiskem a form*ty obr*zk+ s ned%liteln`m po'tem @*dk+.¢ Uva(oval jsem nap@)klad i o mo(nosti tisku velk`ch obr*zk+ kreslen`ch na ST, ale zde jsem narazil na jejich velikost 32000 bajt+. Neb`t toho, uveden` program by je po p@eps*n) p*r konstant tisknul tak[.¢  V principu se mus) na p@evod br*t osmice bajt+, popisuj)c) body obr*zku le()c) nad sebou, tedy vlastn% 'tverec 8✓8 a v nich p@eh*zet jednotliv[ bity. Uveden` p@)klad v C programu vyu()v* mo(nosti p@)m[ rotace bit+. Cel` 'vere'ek p@ev*d)m najednou v jednom ╱nejvnit@n%j&)m$ cyklu. Doch*z) zde proto k dvoj) rotaci.¢  V prvn)m kroku je t@eba vz)t nejv`znam%j&) bity, co( se provede logick`m sou'inem s hodnotou 128. T)m jsou v&echny ostatn) bity vynulovan[, nejv`znam%j&) z+stal v p+vodn)m stavu. T%chto osm bit+ je t@eba poskl*dat do v`sledn[ho bajtu do @ady za sebou a k tomu je pou(ita rotace doprava, postupn% o 1 a( 7 bit+. Bity skl*d*m tak, (e nejv`znam%j&) bit popisuje nejhorn%j&) bod v uva(ovan[ svisl[ lince. P@edpokl*d*m, (e se j)m standartn% ovl*d* nejho@ej&) jehli'ka.¢  Existuj) podle p@)ru'ek snad tisk*rny, kter[ maj) ovl*d*n) jehli'ek obr*cen[, ale nikdy jsem takovou nevid%l, ani o (*dn[m konkr[tn)m typu ne'etl.¢  V druh[m kroku jsou na @ad% bity za n%jv`znam%j&)mi, tedy vlastn% s ')slem 6 p@i jejich popisov*n) od 0 do 7. Proto je pot@eba prov[st rotaci doleva o jedno m)sto. P@ed t)m je ale vymaskov*n &est` bit logick`m sou'inem s hodnotu 64. A tak to jde d*l a( k nejm[n% v`znamn[mu bitu.¢  V cel[m p@evodn)m algoritmu je @ada rezerv pro jeho zlep&en), k 'emu( vyb)z) jeho pomalost. Nap@)klad zaraz) na prvn) pohled dvoj), zd*nliv% nesmysln* rotace. Bylo by mo(n[ ode')st hodnoty pro posuv a prov*d%t pak jedin`. Jen(e posuvy jsou pravd%podobn% z hlediska procesoru mnohem rychlej&) ne( matematick[ operace, proto jsem je nechal rad%ji dvoj).¢  U(ite'n%j&) by z@ejm% bylo vypustit vnit@n) cyklus ]pln% a rozepsat pr*c) s kazd`m bitem zvl*&④. Prost% obsah cyklu rozepsat osmkr*t s dosazen)m konkr[tn)ch hodnot pro ka(d` bit.¢  P@i jin[m uspo@*d*n) sledu operac) nebude nutn[ maskovat ka(d` bit jinou hodnotou, kter* se zbyte'n% po')t* v cyklu d%len)m 128/2, ale pou()vat pouze 128. Posledn) bit je z@ejm% maskovan` zbyte'n%, proto(e jeho rotac) o sedm m)st doleva se v&echny p@edchoz) asi vynuluj) sami od sebe. Tuto ]vahu by ale bylo nutn[ nejd@)v% ov%@it, proto(e chov*n) t[to operace m+(e b`t z*visl[ na druhu programovac)ho jazyka.¢  Skl*d*n) v`sledn[ho bajtu by asi bylo chyt@ej&) d%lat logick`m sou'tem, proto(e bude rychlej&) ne( aritmetick[ s')t*n).¢  V&echny tyto ]pravy m% napadly n%kolik hodin p@ed dokon'en)m magaz)nu, tak(e jsem je s*m ji( nezkou&el. Jsem v+bec r*d, (e se m% program po dopln%n) dal&)ch funkc) v+bec poda@ilo znovu zprovoznit. Nakonec kurs C['ka je psan` pro program*tory, tak se sna(te.¢  V`sledkem p@evodu jsou nachystan* grafick* data pro tisk*rnu, kter* jsou na rozd)l od jin`ch hardkop)rek trvale nachyst*na v pam%ti pro opakovan` tisk. ╱Ona taky jejich p@)prava je o dost pomalej&) ne( u jin`ch program+.$¢  K proveden) vlastn)ho tisku je t@eba pos)lat na tisk*rnu @adu povel+. ⑤pln% na za'*tku se mus) nastavit od@*dkov*n) takov[ velikosti, aby mezi grafick`mi @*dky nevznikaly mezery. Ze svisl[ vzd*lenosti jehli'ek 3/216 vych*z) velikost posuvu na 24/216. Proto p@ed tiskem pos)l*m povel ESC 3 ╱24$. Z*vorkami zde nazna'uji skute'nou hodnotu, na rozd)l od p@edchoz)ch znak+. ②ada hardkop)rek pou()v* nastaven) povelem ESC A n/72 s parametrem 8. Pak nefunguj) nap@)klad na D100M, proto(e jej nezn*.¢  Slu&n* hardkop)rka pro tisku nastav) od@*dkov*n) vhodn[ pro tisk textu, nejl[pe na standartn) hodnotu 1/6". J* na to ]pln% zapom%l. Pokud bude n%kdo cht)t zkusit pou()t produkovan[ obr*zky do ⇨apka, opravte si to ve zdrojov[m v`pisu, nebo dopi&te ru'n% kd do textu v ⇨apkovi. Tedy hned za povel k nata(en) obr*zku takto: ◆. Zde znak ◆ p@edstavuje hodnotu 36.¢  ②ada hardkop)rek pou()v* povel pro nastaven) jednosm%rn[ho tisku, proto(e p@i obousm%rn[m doch*z) k rozh*zen) svisl`ch 'ar. Zde je vynech*n z*m%rn% ze dvou d+vod+. P@edev&)m v%t&ina tisk*ren po grafick[m povelu sama p@epne na jednosm%rn` tisk. V)m jen o D100M, kter* to ned%lala. To m+(e b`t v)tan[ p@i dvojpr+chodov[m tisku.¢  Ka(d` tiskov` @*dek grafiky se skl*d* z grafick[ho povelu a jeho dat. Pou(il jsem univerz*ln) kd ESC ✓ m, n1, n2 jeho( parametrem m se nastavuj) r+zn[ druhy grafik. Je ale t@eba v%d%t, jak[ dan* tisk*rna umo(uje.¢  Parametry n1 a n2 ur'uj) po'et sloupc+ na tisk, v na&em p@)pad% jde o 320.¢  Za ka(d`m @*dkem se pos)l* povel pro n*vrat tiskov[ hlavy, pop@)pad% pro od@*dkov*n). Ten nen) pou(it`, proto(e u tisk*rny p@ipojen[ k mal[mu ATARI p@edokl*d*m trval[ nastaven) na automatick[ od@*dkov*n).¢  Pozice obr*zku se ur'uje nastaven)m lev[ho okraje nebo pos)l*n)m mezer p@ed grafick`m p@)kazem. Tuto mo(nost jsem ponechal, proto(e nev)m, kolik tisk*ren akceptuje povel nastaven) lev[ho okraje ESC l n.¢  Jako hlavn) rys programu jsem od za'*tku p@edpokl*dal mo(nost kvalitn%j&)ho tisku pomoc) dvoj)ho pr+chodu @*dk+. Hrozn% mi toti( vad), tisknu-li texty v re(imu NLQ a te⇦ do toho p@ijde vybledl` obr*zek. A to pros)m i v tex④*ku na ST!¢  Situaci u na&eho syst[mu komplikuje automatick` LF, tak(e jsem byl nucen prov*d%t inverzn) posun pomoc) ESC j n. ə*dn* jin* mo(nost k n*vratu hlavy na za'*tek @*dku m% nenapadla. Nev)m ale, nakolik je povel u tisk*ren roz&)@en`. Samoz@ejm%, (e ve FLOPu popisovan* SP-180 jej m*.¢  P@ed op%tovn`m tiskem @*dku prov*d)m posun o 1/216, ')m( by se m%l doc)lit efekt zv`razn%n[ho tisku. Tot[( by mohl prov*d%t ji( zmiovan` obousm%rn` tisk na D100M automaticky, co( bych cht%l vid%t.¢  Ovl*d*n) hardkop)rky je velmi primitivn), proto(e se skl*d* z @ady dotaz+. Zad*n) hodnot se potvrzuje stiskem RETURN.¢  Na'ten) obr*zku by m%lo b`t pro ka(d[ho bez probl[m+, jen se pak mus) 'ekat na p@epo'et. Potom je mo(n[ volit opakovan% tisk.¢  Nejd@)ve se vol) v`stupn) za@)zen), kde je mo(n[ zadat tisk do souboru. Pozor, tisk na obrazovku je tak[ mo(n`, ale poni') na'ten` obr*zek.¢  Druh` dotaz je na patrametr grafiky, mysl) se t)m pro povel ESC ✓. Dal&) je kvalita, 0 a 1 ur'uje oby'ejn` nebo dvojpr+chodov` tisk. Lev` okraj je jasn`, jeho hodnota je omezena na 150. N%kte@) toti( mohou m)t i tisk*rny na form*t A2. Ov&em pro A4 je vhodn`m maximem 40.¢  Posledn) dotaz je na pou(it) p@)m[ho povelu nastaven) lev[ho okraje. Jinak se pou(ij) mezery.¢  Mo(nost v`stupu do souboru umo(uje za'lenit obr*zky do tisku pomoc) ⇨apka. Je tu ale dal&) probl[mek, nejen zapomenut` kd pro zp%tn[ nastaven) od@*dkov*n). N%kter[ tisk*rny toti( rozum) b%(n`m grafick`m povel+m jen v mdu Standart, kde(to 'e&tinu Kamenick`ch tiskneme v mdu IBM. Ke sv[ vlastn) tisk*rn% nem*m p@)ru'ku, (e by v n) t@eba byl alternativn) povel pro tento md.¢  Podle p@)ru'ky pojede SP-180, SEP-510, je ov%@en* i STAR LC-20, dokonce i CANON BJ-230 a pokud si pamatuji na D100M, tak fungovat bude tak[.¢¢  Ve v`voji harkop)rek bych cht%l, bude-li 'as pokra'ovat. V pl*nu m*m ╱ji( dlouho$ p@ipravit program vhodn` k tisku orienta'n)ch p@ehled+ archivovan`ch obr*zk+.¢¢                        -ZB-¢