Witam
Czy mógłby mnie ktoś naprostować w temacie VGA ?
Napiszę pierwej co zrobiłem:
-ściągnąłem przykład w C jak przełaczyć kartę VGA w tryb 12h, czyli 640x480x16 kolorów,
-wywaliłem z niego co się dało, nawet czyszczenie pamięci, aby był mozliwie najkrótszy,
-komplilacja pod DOS (Borland Turbo C) i uruchomienie,
-karta przełacza się i na ekranie rysują się dwie linie (są też śmieci, gdyż nie ma czyszczenia).
Tyle w temacie DOS. Program nie używa programowych przerwań BIOS-u VGA, tylko operuje na rejestrach karty:
unsigned char g_640x480x16[] =
{
/* MISC */
0xE3,
/* SEQ */
0x03, 0x01, 0x08, 0x00, 0x06,
/* CRTC */
0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E,
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xEA, 0x0C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3,
0xFF,
/* GC */
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x05, 0x0F,
0xFF,
/* AC */
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
0x01, 0x00, 0x0F, 0x00, 0x00
};
Krok następny - Atari:
- wrzucam wspomniany program do AHCC i tutaj kilka zmian
- korekta adresów na wartości z adaptera Atari np:
#define VGA_AC_INDEX 0x3C0 (zmiana na REG_BASE+0x3C0)
- polecenia inportb i outportb zastąpione peek i poke:
void poke(WORD adr, UBYTE dat)
{
*((UBYTE*)adr+REG_BASE)=dat;
}
UBYTE peek(WORD adr)
{
return(*((UBYTE*)adr+REG_BASE));
}
- program się kompiluje, odpalam i brak reakcji.
Czy aby cokolwiek się zadziało Atari (GEM) musi "przełaczyć się" na kartę ?
Pewnie bez tego karta jest "wyłączona" i nie będzie żadnej reakcji.
Nie znam się więc pytam.
W uzupełnieniu: nie liczę na to, że pokaże się pulpit :) aż tak ciemny nie jestem. Chodzi o "zapalenie piksela" na karcie.