ZX Spectrum a Aritma Minigraf 0507 II

Úvod

Ve starším článku jsem popsal jak plotr Aritma Minigraf 0507 připojit a jak se na něm dá kreslit vektorově pomocí dodávaného programu MZXR, nebo napodobit rastrový tisk z programu Desktop. Tisknout rastrově na perovém plotru není ideální, pro rastrový tisk máme vhodnější tiskárny.

Kreslit na perovém plotru vektorově je určitě vhodnější než napodobovat rastrový tisk. Můžeme na něm kreslit pěkná vektorová písmenka, kromě výpisu programu BASICu pomocí MZXR existují i textové editory, které to umí. Můžeme pomocí BASICu vytvářet tabulky, grafy, obchodní grafiku. BASIC hodně usnadňuje kreslení generovaných kreseb, například z naměřených dat, nebo výsledek výpočtu. Plotr by určitě byl vhodný i ke kreslení čárových technických výkresů z nějakého CADu, ale nic takového, pokud vím, pro ZX Spectrum neexistuje. Jak tedy na plotru kreslit složitější obrázky, jejichž vytvoření nelze snadno automatizovat? Sestavovat obrázek ručně přímo v BASICu je určitě přinejmenším hodně pracné.

Hledal jsem tedy způsob, jak do ZX Spectra dostat jednoduše data z nějakého dobře dostupného programu s maximem možností. Takovým programem může být Inkscape. Je volně ke stažení, dnes už je běžnou součástí všech linuxových distribucí a je dostupný pro mnoho jiných operačních systémů.

screenshot kresby screenshot kresby screenshot kresby

Vytvoření kresby

Pro perový plotr je vhodné mít připravenou kresbu složenou opravdu jen z čar stejné šířky, ideálně stejné, jako je šířka pera. Ponechám stranou tvorbu grafů z naměřených dat, nebo kreslení obrazců vzniklých výpočtem a podobné věci a zaměřím se pouze na kresby vzniklé v Inkscape.

Osvědčilo se mi v Inkscape vytvořit stránku o rozměrech 188x263mm, tj. odpovídající mechanickým limitům plotru a výchozí jednotky nastavit taktéž na mm místo px. Pozadí nastavuji neprůhledné bílé, to pak usnadní vytvoření náhledů kresby, které ukládám spolu se zdrojovými SVG daty. Lépe se pak prohledává archiv kreseb. Obrysy stránky po dokončení kresby přijdou vhod při umístění přeškálované kresby na papír a při jejím vycentrování, případně otočení do správné orientace.

foto detailu kresby

A můžete začít kreslit. Chcete-li získat věrnou kresbu nějakého objektu s reálnou perspektivou, jedna z možností, jak kresbu získat, je použít fotografii jako podklad a prostě obkreslit kontury. Viz následující screenshoty.

screenshot vytváření kresby podle fotky screenshot vytváření kresby podle fotky

Pomáhá mít kvalitní ostrý obrázek ve vyšším rozlišení. Můžete si ho při práci přeškálovat, aby byl v Inkscape třeba 2x až 3x větší než cílové rozměry kresby a postupně zvýrazňovat kontury, šrafovat plochy atd... Plotr bude kreslit čáry ve stejném pořadí, jako je budete kreslit v Inkscapu.

Pomáhá kreslit nějakou velmi výraznou barvou, třeba jasnou červenou, aby bylo na první pohled vidět, kde čáry obrázek překrývají. Tloušťka čar se mi osvědčila přibližně 0,5mm, pracuje se s nimi nejlíp. Zároveň se hodí přepínat pomocí CTRL+5 na numerické části klávesnice do režimu bez efektů a bitmap. Uděláte si tak lepší představu, jak bude vypadat výsledek, kolečkem si přeškálujte kresbu, v určitém zvětšení získáte docela jasnou představu, jak se projeví tloušťky čar.

Po dokončení, když už si jste zcela jistí, že kresba je hotová, vše nadbytečné je vymazáno, nastane čas kresbu přeškálovat a umístit na stránku. V tu chvíli nastavuji barvu čar takovou, jakou by měly být nakreslené na papír (černou) a tloušťku čar 0,25mm. Připadá mi, že se tak kresba v Inkscape pocitově nejvíc blíží výsledku na papíru.

foto detailu kresby

Rozšíření do Inkscape

Máte-li kresbu, musí následovat konverze do instrukcí srozumitelných ovladači k plotru. Generovat sekvenci instrukcí pomocí rozšíření, neboli extensions v Inkscape se přímo nabízelo v době, kdy ještě byla aktuální verze 0.4x. Nebyla to úplně špatná možnost.

Rozšíření pro Inkscape jsou psaná v Pythonu a existuje jich nepřeberně. Já jsem si pro své experimentování vybral rozšíření původně generující gcode pro 2.5D CNC routery, resp. gravírky a CNC lasery, kterými lze materiál podle křivek kresby popisovat, nebo i řezat. Ke stažení je zde. Bohužel poslední změny v něm proběhly v roce 2009 a tento článek přepisuji v roce 2018. Rozšíření je tedy už dávno zastaralé. V současném Inkscape 0.91 až 0.92 ho už ani nelze zprovoznit.

Přesto odkaz na původní plugin ponechávám včetně mé upravené verze ke stažení (odkaz na konci textu) pro počítačové archeology.

Takto upravený plugin umí přímo generovat MZXR instrukce, nebo BASICový program zkompilovatelný např. pomocí programu bas2tap, si můžete stáhnout z kompilovat na libovolném Linuxu.

Proč ne rovnou HPGL?

Protože generovat instrukce pro interpretr MZXR prostým modifikováním existujícího pluginu bylo tehdy snazší. V té době Inkscape neuměl kresby ukládat do HPGL přímo a konvertovat cokoli z uloženého SVG bylo nad mé síly. Od té doby se situace změnila. Dnes už Inkscape umí ukládat kresby do HPGL přímo a co je ještě lepší, používá k tomu jen velmi omezenou sadu HPGL instrukcí, čímž velmi usnadňuje konverzi takto generované kresby.

Download

Konverzní utilita hpgl2mzxr

Současný Inkscape (verze 0.9x - rok 2018) umí kresby přímo exportovat do velmi jednoduchého HPGL. Podle možností nastavení se zdá, že tato možnost byla cílena na plotry řezací, kterými lze z vynilové fólie vykrajovat barevné reklamní polepy. Generovaný kód obsahuje jen velmi málo instrukcí a je pro naše účely, nejenom pro Minigraf Aritma, velmi dobře použitelný. Dokonce při ukládání Inkscape automaticky převádí křivky na sérii krátkých úseček, což situaci ještě víc usnadňuje. Stačí soubor uložit jako HPGL místo výchozího SVG.

Nastavení HPGL při ukládání viz následující screenshoty. Rozlišení 1016 dpi odpovídá HPGL jednotkám, kde nejmenším krokem nezávisle na schopnostech plotru je 1/40mm, 25,4⋅40 = 1016. Parametry Overcut a Tool offset nastavuji na 0, Curve flatness nechávám výchozí. Rotace a zrcadlení si nastavte dle potřeby.

screenshot nastavení hpgl exportu screenshot nastavení hpgl exportu

Alternativně lze z Inkscape přímo odesílat data přes RS232 rovnou do plotru. Což sice nelze použít pro Minigraf Aritma 0507, ale může být užitečné s jinými plotry, třeba Aritma Colorgraf 0512 / 0516, nebo Laboratorní Přístroje XY-4160, podaří-li se vám je připojit a správně nastavit RS232 i v PC tak, aby fungovalo řízení toku dat, což může být problém. Tuto funkci najdete v Rozšíření - Export - Plotrovat, nastavení je shodné s ukládáním, plus přibude záložka s nastavením parametrů RS232.

A protože export kresby do HPGL je tak snadný, napsal jsem jednoduchou malou utilitku nazvanou hpgl2mzxr. Je napsaná v jazyce C, vyzkoušená na Linuxu a protože nevyužívá nic, kromě těch úplně nejběžnějších knihoven, tak by měla být snadno přenositelná i na jiné systémy. Například na Gentoo Linuxu s kompilerem GCC stačí zadat make a je hotovo.

Utilitka má kromě ladícího (debug) režimu dva konverzní režimy. V jednom, zadáte-li pouze jméno HPGL souboru, bude vypisovat instrukce pro ovladač plotru MZXR. V druhém, s parametrem -b, nebo --basic, bude vypisovat přímo BASICový program, samozřejmě jako prostý text, protože kompiler bas2tap už existuje. Po zkompilování budete mít TAP soubor přímo použitelný na ZX Spectru.

Výzva: kdo utilitku vylepší tak, aby generovala rovnou sérii BASICových zdrojáků v samostatných souborech vhodné délky vč. zdvihání pera, je-li na konci sekvence příkazů položeno?.

Např. takto:

./hpgl2mzxr test_drawing_rectangles.hpgl
./hpgl2mzxr -b test_drawing_rectangles.hpgl
screenshot

Viz příklad konverze do BASICového programu a kompilace do TAP souboru, za předpokladu, že BASICový program nepřesáhne kapacitu volné RAM. Přesáhne-li, je možné program rozdělit prozatím alespoň ručně, viz další screenshot.

screenshot
./hpgl2mzxr -b test_drawing_rectangles.hpgl > test_drawing_rectangles.basic
bas2tap test_drawing_rectangles.basic

BASICový program pro ZX Spectrum může být velký nejvýše zhruba okolo 35kB má-li se vejít do paměti společně s ovladačem MZXR. Abych se do tohoto limitu spolehlivě a s rezervou vešel, dělil jsem utilitou vygenerovaný program přibližně po 140 řádcích programu (tj. od řádku n do n+695, řádky číslované s krokem 5). V takovém případě se vyplatí na konci zdvihnout pero a třeba i přidat BEEP, aby uživatel hned věděl o ukončení části programu. Na začátku následující části pak nezapomeňte pero opět položit na papír, má-li být položeno. Zdvižením pera během načítání další části zabráníte vzniku případné kaňky na papíře.

Před kreslením neuškodí nechat si nakreslit náhled na obrazovce.

screenshot screenshot screenshot

Download

Přenos dat do ZX Spectra

Původně jsem se domníval, že posílání dat z PC přímo do ZX Spectra je dobrý nápad, a napsal jsem pro ten účel utilitku SIFPLOT, která data přijímá ze sériového portu SIF a předává je ovladači MZXR. Utilita SIFPLOT měla být nainstalována na adresu 50000 po nainstalování MZXR na adresu 60000. Předávání se děje napodobením BASICových příkazů PRINT #7 a jejich postupnou interpretací vždy, když přijde jeden celý příkaz jazyka MZXR. Data na PC obsahovala jeden MZXR příkaz na každém řádku.

Idea nebyla až tak špatná. Vyřešilo by to kreslení opravdu rozsáhlých kreseb, jejichž data přesahují malé stovky kB vyžadující rozdělení na více než 3 - 5 částí. Bohužel to nefungovalo spolehlivě. Kreslení téže kresby se na různých počítačích chovalo různě, občas se zastavilo v průběhu kresby a i když s tím tehdy experimentovalo víc lidí, na příčinu jsme nepřišli.

Druhým problémem je potřeba poměrně raritního interface SIF a zároveň velkého PC. Většinou taky chceme, aby bylo ZX Spectrum schopné pracovat samostatně bez účasti dalšího počítače.

Zbývá tedy druhá cesta - kresbu do ZX Spectra dostat jako sadu BASICových programů v jednom, nebo více TAP souborech.

Přenos TAP souborů lze realizovat mnoha způsoby, lze to udělat pomocí opatchované ROM, která má příkazy LOAD a SAVE přesměrované na RS232 port místo magnetofonu. Můžete soubor TAP nějakou utilitou vypískat na PC, můžete je uložit na flash kartu a přečíst pomocí nějakého firmwaru pro DivIDE, třeba pomocí ESXDOSu, atd. Možností je víc.

Přenos pomocí SIFu a opatchované ROM můžete vidět v tomto videu.

Program nechávám ke stažení a případnému zkoumání. Třeba se někomu podaří chybu odhalit.

Download

Čím nejlépe kreslit?

Čímkoli, co jde upnout a upnout jde skoro cokoli, co se vejde. Osvědčily se mi gelové náplně Pilot G-2 05, nebo náplň do keramických per s šířkou stopy 0,5mm. Obojí umí být pěkně kontrastní, šířka čáry bývá konstantní a obojí kreslí lehce bez potřeby kuličkovou náplň tlačit na papír větši silou, než je samotná hmotnost pera.

Používám i mikrofixy Centropen, např. ZX Spectrum jsem kreslil zeleným mikrofixem Centropen Liner 0,3 2621 na list vytržený z řádkovaného sešitu. Tloušťka čar je pravděpodobně o něco větší než 0,3mm, protože na tomto papíru se mikrofix rozpíjí a vsakuje, byť nepatrně. Výsledný dojem určitě není lepší než při použití 0,5mm kuličkových per, tmavé barvy jsou méně kontrastní. Navíc mikrofixy nejsou kulaté, poblíž hrotu, kde je člověk drží špičkami prstů, výrobce udělal plošky komplikující sevření v plotru. Jde to, ale není to ideální.

Někdy bývá lepší kreslit samotnou náplní. Sestavené pero s náplní uvnitř, třeba gelové propisky Pilot, mají mezi náplní a tělem pera vůli. To může mít špatný vliv na roztřesenost čar v některých směrech.

foto detailu kresby foto detailu kresby foto detailu kresby

Na použitém papíru samozřejmě taky záleží. Ovlivní kvalitu kresby podobně jako u inkoustových tiskáren. Nicméně kreslit se dá opravdu na cokoli, co se vejde a co není natolik chatrné, aby se to v plotru roztrhalo. Samozřejmě nejčastěji bude použit bílý kancelářský papír, ale kreslil jsem i na fotopapíry kuličkovou náplní plněnou inkoustem pro inkoustové tiskárny, nebo na tvrdý karton, když jsem potřeboval načrtnout kontury papírové krabičky k vystřižení a slepení.

Experimentoval jsem i s popisováním CD/DVD médií lihovou fixou. Jde to, ale měl jsem potíže s přesným umístěním média vůči výchozím souřadnicím kresby a všeobecně to bylo příliš pracné.

Nezkoušel jsem kreslit na plošné spoje. Vím, že se tento nápad na internetu opakovaně vyskytuje, ale lihová fixa nemá dostatečnou kryvost, aby to mělo větší smysl ani při ručním kreslení, natož plotrem. Navíc laminát je příliš tlustý, nevejde se do Minigrafu a už dávno mám k dispozici lepší a levnější způsoby výroby desek.

A výsledek?

Viz následující obrázky hotových kreseb.

Kvalita kresby je na poměry osmibitového počítače přinejmenším přijatelná. Mohla by být lepší, kdyby plotr dělal menší kroky než 1/8mm. Na některých čarách je to vidět hodně, na jiných nepatrně, nebo vůbec. Všimněte si, že výpis textu (obsah TRDOSové diskety příkazem CAT #3) je skoro perfektní a je velmi slušný i pro menší písmo, protože převažují směry pohybu, při kterých se kroky motorů tolik neprojeví.

scan kresby scan kresby scan kresby

Download

Historie změn článku

  • 2010-01-01 - zveřejněno
  • 2018-11-12 - kompletně přepsáno, opraveno, aktualizováno, doplněno...

[ Zpět na hlavní stránku ]

Tento web je převážně o ZX Spectru, kompatibilních počítačích a jiném zajímavém hardwaru. Naleznete-li chybu, nebo byste rádi cokoliv co s tímto souvisí, můžete mi napsat email. Stručně o mém webu zde.