+-------------------------+
| Grafická myš v Textmodu |
+-------------------------+
..... .....
Viděli jste někdy Norton
Utilities? Nebo Impulse
Tracker? Určite jo. Já jsem si
ze začátku myslel že to, jak
se tam ta myš tak hezky
plynule pohybuje, je
grafika. Pak, když sem
zjistil, jak se věci mají
(hezký, ne?), tak sem se dal
do vytváření takový unity na
grafickou myš v textmodu. No a
proto tady píšu tuhle blbost.
.. . ....u....b....a....S......
Co je to textmode ?
Takže jak to tam vlaste funguje? Je to úplne jednoduchý. Tady je
takovej malej návod:
(1)- určíte si pár znaku, který nebudete používat (asi 9).
(2)- pak si uděláte nějakej buffer, kterej později použijete na
editaci fontů.
Buffer: +--------+--------+--------+
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
+--------+--------+--------+
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
+--------+--------+--------+
(3)- do něj hodíte hodnoty z ROM tabulky znaků pro znaky, který
puvodně byli pod myší (viz bios fce 1130h, na zjištění pozice myši
používám svůj handler, ale můžete použít i normální funkci myšího
driveru via int 33h (to ale musíte oblbnout myší driver nastavením
typu módu v bios tabulce (seg 40h) na grafický)).
Buffer: +--------+ ...
|XXX XXXX|
|XX X XXX|
|X XXX XX|
| XXXXX X|
| X|
| XXXXX X|
| XXXXX X|
|XXXXXXXX|
+--------+ ...
. .
(pod myší bylo písmeno 'A', kdyby to náhodou někdo nepochopil)
(4)- přes to překopírujete myší kurzor posunutej (shr,shl) o
(x-souřadnice mod 8). (To znamená posunutí uvnitř znaku). (Jestli
nevíte vo co go, tak se mrkněte do mý unity...)
Buffer: +--------+--------+--------+
|XXX XXXX| XX|XXXXXXXX|
|XX X XXX| XXXXX X|XXXXXXXX|
|X X XX| XXXXX X|XXXXXXXX|
| XX X| XX|XXXXXXXX|
| X| XXXXX X|XXXXXXXX|
| XX | XXXXX X|XXXXXXXX|
| XX | XX|XXXXXXXX|
|XXX | XXXXXX|XXXXXXXX|
+--------+--------+--------+
|XXX | XXXXX|XXXXXXXX|
|XXX | XXXX|XXXXXXXX|
|XXX | XXXXXX|XXXXXXXX|
|XXXXXX | XXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
|XXXXXXXX|XXXXXXXX|XXXXXXXX|
+--------+--------+--------+
(5)- ...a editnem buffer na hodnoty předem určenejch znaků. (viz
funkce biosu (int10h,ax=1100h))
(6)- tyhle znaky pak napíšem na místo, kde je myš!!!
(7)- A tohle opakujem do zblbnutí (znovu od bodu (3)).
...to je celý. Primitivní, ne?
...A tady je pár funkcí a portů, který se k týhle věci docela hodí.
INT 10h :ax = 1130h
bh = 0 : zjistí hodnotu int. 1Fh (pointer)
1 : zjistí hodnotu int. 43h
2 : zjistí adresu tabulky znaků 8*14
3 : zjistí adresu tabulky znaků 8*8
4 : zjistí adresu 2. poloviny tabulky znaků 8*8
(nechápu)
6 : zjistí adresu tabulky 8*16
výstup:
es:bp = pointer na získávané info (podle bh)
cx = výška znaku
dl = počet řádek obrazovky
zjistí nastavení generátoru znaků
INT 10h : ax = 1100h
bh = počet bytů k editaci.
bl = číslo tabulky obrazu znaků (to sem nevymyslel
já - to tady čtu)
cx = ascii kód prvního definovaného znaku.
edituje textový font
Port TS (3C4h): index 03h
výběr fontu : Bit 5,3,2 = výběr jednoho z 8 fontů A
Bit 4,1,0 = výběr jednoho z 8 fontů B
perfektní, použitý přeba ve Scream trackeru, Impulse Trackeru k
roršíření počtu znaků.
(Nějaký dotazy, nejasnosti atd. mi pište na email
SEDLACEK@MBOX.CESNET.CZ nebo na Infimu id KubaS (Jenom mi, prosimvas
nepište že v mý unitě je chyba, tu berte spíš jako ukázku, jak by se
to dalo udělat. Ja vím že je to shit, jenom se mi to nechce
předělávat))
Tady si muzete vytahnout moji unitu a testovaci program ...
naschle KubaS
výheň