А.... Че-то я попутал (не заметил что речь об аттрибутах) Для аттрибутов все линейно.
А формула в данном случае будет: 6144+INT (x/8)+32*INT (y/8)
Тоесть сначала идут аттрибуты для 1,2,3,4,5,6,7,8 строк (фактических, 192 которых). Дальше для 9,10,11,12,13,14,15,16 и т.д..
То есть байт аттрибутов задает цвет знакоместа (кватратика 8x8 пикселей)
Могу тоже кинуться исходником
Правда это из эмуля, писал давно и вкурить что тут понаписал уже не могу.Код:void DrawScreen(){ for(unsigned y=0;y<192;y++){ unsigned addrp=((y&0xC0)<<(0+5))|((y&0x7)<<(3+5))|((y&0x38)<<(-3+5)); unsigned addra=((y&0xF8)<<2)|0x1800; for(unsigned x=0;x<32;x++){ BYTE pattern=*(RAM(ScreenBank?7:5)+(addrp|x)); BYTE attribute=*(RAM(ScreenBank?7:5)+(addra|x)); BYTE ink=(attribute&0x7)|((attribute&0x40)>>3); BYTE paper=(attribute&0x78)>>3; for(unsigned bit=0;bit<8;bit++) GDIBuf[bit+(x<<3)+(y<<8)]=pattern&(1<<(7-bit))?ink:paper; } } }






Ответить с цитированием