|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 10 Mar 2004 23:56:24 To : All Subject : странный случай -------------------------------------------------------------------------------- Hаписал тут программку, она работает, задачу свою решает. Hо вот как и что она делает - хоть убей, не пойму :-( Предыстория. Если взять карточку ATI Radeon VIVO 9200 и воткнуть ее Video Out в телевизор, она (это фича, не бага) при загрузке машины на монитор выдает 50Hz и картинка занимает где-то две трети экрана по вертикали. Это ужасно. Машина dual boot, Win98SE/FreeBSD. Если прогрузиться в винду или во фрю в графику, выдается какой положено рефреш. Под виндой full screen dos box идет в штатных 70Hz и на полный экран, под фрей те же 50Hz. Зовем шамана. Утиль для магических пассов (идея нагло уворована через freebsd.rambler.ru): #include <sys/types.h> #include <machine/cpufunc.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <err.h> #define LEN 25 int main(int argc, char* argv[]) { unsigned char crtc[LEN]; unsigned char reg; unsigned i, ch; if (!open("/dev/io",O_RDONLY)) err(1,"/dev/io"); while ((ch = getopt(argc, argv, "w")) != -1) switch (ch) { case 'w': for (reg=0;reg<0x19;++reg) if (scanf("%u ",&i) ==1 ) crtc[reg]=(unsigned char)i; else errx(1,"invalid input, decimal values expected"); outb(0x3d4,0x11); outb(0x3d5,crtc[0x11]&0x7f); for (reg=0;reg<0x19;++reg) { outb(0x3d4,reg); outb(0x3d5,crtc[reg]); } return 0; } for (reg=0;reg<0x19;++reg) { outb(0x3d4,reg); crtc[reg]=inb(0x3d5); printf ("%u ",(unsigned)(crtc[reg])); } puts (""); return 0; } /* EOF */ Код присал даже не на коленке, а на весу; не ругайтесь сильно. Компилируем в ./vesareg, загрузившись без телевизора говорим рутом: ./vesareg > 80x25.vg Перезагрузившись с телевизором, говорим рутом: ./vesareg -w < 80x25.vg Ура, имеем нормальную консоль. Кто-нибудь может дать хорошее объяснение происходящему? Разумеется, не на уровне комментариев /* записать 0x19 в reg */, а по сути? Eugene --- slrn/0.9.8.0 (FreeBSD) * Origin: Svyaz Service JSC (2:5006/1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/26093d9cb6b0c.html, оценка из 5, голосов 10
|