Přesměrování tisku do souboru
                Jednoduchý prográmek je určený pro skenování paralelního portu do souboru. K čemu se hodí ? Pár slov úvodem.
                Nedávno mě jeden kolega požádal, zda bych mu nepomohl zprovoznit moderní usb tiskárnu pod legendárním MS-Dosem. Z nějakého starého účta vytisknout pár dat. Bohužel program neuměl ani přesměrovat tisk do souboru a tak jsem nejdříve napsal utilitku s využitím služby 21H, funkce 46H - Vynucené duplikování přidělého kanálu. Jak se ukázalo, účto bohužel standartní služby MS-Dosu obcházelo. Tisk byl prováden přímým přístupem do I/O registrů ( konkrétně do portu 378H ). Doplnil jsem tedy utilitku o odchytávání bytů při zápisu do portu s využitím ladících registrů DR0 až DR7. Pracuje to jen na procesorech Pentium I a vyšších, které mají řídící registr CR4 a dokáží kontrolní breakpointy nastavit rovněž pro operace s I/O registry. Před zapnutím trasování a nastavením řídícího ladícího registru DR7 je nutné zapnout rozšířené trasování ( nastavit bit DE - Debugging Extension v řídícím registru CR4, je to bit b3 ). Je to nezbytné, neboť po resetu procesoru je celý CR4 vynulován. Pokud nebude DE=1, pak jsou kontrolní breakpointy DR0 až DR3 aktivní jen při práci s pamětí. Význam pole RW v registru DR7 musí být nastaven do 10 - čtení/zápis z/do I/O.
                Jak je názorné ve zdrojovém souboru, obsluha Int1 musí nastavit příznak RF ( Resume Flag ), jinak dojde k zacyklení volání. Program VTISK.EXE je nejvhodnější spustit z autoexec.bat a zůstane rezidentní v paměti. Jakmile nějaký program provede zápis do portu 378H, vyvolá se ladící přerušení Int1 a program si port přečte a hodnotu uloží do svého bufferu v ramce. Obsah bufferu lze kdykoliv přepsat dalším spuštěním VTISK.EXE - program sice vypíše, že je již rezidentně v ramce, současně ale převede data z bufferu do souboru TISK0001.DAT ( TISK0002.DAT, ..03.DAT a td. ) a obsah bufferu zneplatní. Před spuštěním VTISK.EXE je zapotřebí zakázat v config.sys případný EMM386.EXE a rovněž program nelze spouštět z Windows, neboť používá privilegované instrukce.
                Program je dále možné vylepšit o ukládání do souboru místo do bufferu, který je omezen 60kB a pro tisk obsáhlých souborů je nedostačující. Dále je možné nastavit ochranu před nežádoucím přístupem k ladícím registrům, testovat přerušenou instrukci IN, resp. OUT, zda se jedná o zápis do portu či čtení a pod. Zdrojový soubor byla pouze pracovní verze ( první verze ), která našim potřebám vyhovovala a tak již nebyla nikdy vylepšena ani nevznikla verze novější. Zdroják je tedy krátký, přehledný a může dobře posloužit k další inspiraci.
Zde je zdroják VTISK.ASM ke stáhnutí ...