• Textový režim 80x30 • Na žádost některých čtenářů jsem zařadil do rubriky programování rutinku, která nastaví textový režim o třiceti řádcích. Tento mód je nyní standardním módem Výhně. Poprvé jsem tento mód objevil v nastavení Dos Navigátoru (mimochodem jde o velice dobrý DOS shell mnohdy lepší než Norton). Jeho výhoda je, že zachovává velikost znaku (což je 16 mikrořádek), a že pro něj funguje scrollovací rutinka, normálně používaná pro standardní textový režim 80x25. V podstatě jde o to, změnit mikrořádkování ze 400 na 480 mikrořádek (podobně jako u X-módu 320x240). Vzhledem k tomu, že se jedna řádka v textovém režimu skládá ze 16 mikrořádků, výsledné prodloužení je zřejmé 480/16=30 (tedy o pět řádek). Této změny lze docílit pomocí čtyř instrukcí, ale když si to vyzkoušíte, zjistíte, že to není zrovna tak, jak má být. Vypadá to, jako kdyby se hardwarově zúžila výška obrazu na monitoru. A proto zbylých 60 instrukcí donutí VGA kartu, aby zobrazovala řádku 0 hned v horní části stínítka monitoru. Tak tady to máte (je to docela dlouhý, ale funguje to): Procedure TextMode80x30; assembler; asm mov ax,3 { nahození módu 80x25 přes BIOS } int 10h mov dx,3C4h { sequencer adress register } mov al,0 { reset } out dx,al mov al,1 { synchronní smazání sequenceru } inc dx out dx,al { zachovaní obsahu orazovky } dec dx { sequencer adress register } mov dx,3D4h mov al,17h { mode control } out dx,al inc dx { mode control register } in al,dx and al,7Fh out dx,al dec dx { sequencer adress register } mov al,11h { light pen low } out dx,al inc dx { light pen low register } in al,dx and al,7Fh out dx,al mov dx,3CCh in al,dx { al <- nastavení miscellaneous output registeru } or al,0C0h { změna řádkování 400 (80x25) na 480 (80x30) } mov dx,3C2h { miscellaneous output register } out dx,al mov dx,3D4h mov al,6 { vertical character display } out dx,al mov al,0Bh inc dx { vertical character display register } out dx,al dec dx { sequencer adress register } mov al,7 { vertical synchronisation position } out dx,al mov al,3Eh inc dx { vertical synchronisation position register } out dx,al dec dx { sequencer adress register } mov al,9 { max raster address } out dx,al mov al,4Fh inc dx { max raster address register } out dx,al dec dx { sequencer adress register } mov al,10h { light pen high } out dx,al mov al,0EAh inc dx { light pen high register } out dx,al dec dx { sequencer adress register } mov al,11h { light pen low } out dx,al mov al,8Ch inc dx { light pen low register } out dx,al dec dx { sequencer adress register } mov al,12h { vertical end scan line } out dx,al mov al,0DFh inc dx { vertical end scan line register } out dx,al dec dx { sequencer adress register } mov al,15h { vertical start blanking } out dx,al mov al,0E7h inc dx { vertical start blanking register } out dx,al dec dx { sequencer adress register } mov al,16h { vertical end blanking } out dx,al mov al,4 inc dx { vertical end blanking register } out dx,al dec dx { sequencer adress register } mov al,11h { light pen low } out dx,al inc dx { light pen low register } in al,dx or al,80h out dx,al dec dx { sequencer adress register } mov al,17h { mode control } out dx,al inc dx { mode control register } in al,dx or al,80h out dx,al mov dx,3C4h { sequencer adress register } mov al,0 { reset sequencer } out dx,al mov al,3 inc dx { reset sequencer register } out dx,al end; Pokud se to někomu podaří zkrátit, tak budu rád, když mi zašle svojí verzi. Ještě se vrátím k problémům s textovými módy ve Výhni. Výheň je schopná běhat v textových režimech, které mají 80 znaků na řádce a zachovávají 16 mirořádkovou výšku jednoho znaku. Pokud mód nesplňuje požadované vlastnosti, dojde k chybě při scrollingu. Tedy například 50 (8 mikrořádek na znak) nebo 28 (14 mikrořádek na znak) řádkový mód fungovat nebude. Nepřipadá mi ale důležité nahazovat podobné módy, když si Výheň můžete spustit buď ve standardním režimu 80x25 nebo v extended módu 80x30. SVGA textmódy Výheň nebude podporovat, vzhledem k jejich špatné čitelnosti. ReDox výheň