ATTR
Attribútum mód, ez egy újabb indirekció segítségével 16 színt engedélyez, de slot-onként csak kettõt.
BUF1 <- (LD1), ide kerül a színinformáció (a paletta indexe. Vagyis a palettája )
BUF2 <- (LD2), ez pedig 2-C adat, ezt kell megjeleníteni, ez kerül a shift regiszterbe.
Az attribútum mód működése nem dokumentált (de nem különösebben hasznos) nem 2 színű módokban:
- 256 színnél nincs hatása, gyakorlatilag ugyanaz, mint a 256 színű LPIXEL mód, csak a pixeleket az LD2 címről olvassa
- 4 és 16 színű módban a paletta szín 0. bitje alapján választ "papír" vagy "tinta" színt, a többi bitet figyelmen kívül hagyja; a 4 és 16 színű mód pixel byte kódolása miatt ez gyakorlatilag azt jelenti, hogy csak a pixel byte felső 4 bitje jelenik meg kétszeres nagyítással (4 színű módban), vagy a felső 2 bit négyszeresre nagyítva (16 színű módban) a normál 2 színű attribútum módhoz képest
[row][col] b7 [col] VINT. Az ide írt érték egész egyszerûen kikerül a NICK egyik lábára, ami a DAVE-ben az egyik megszakítás-figyelõ lábra megy. Normál esetben ezt minden félképben (20 msec) egyszer kell 1-esbe tenni, a többi sorban 0-ba. Így áll elõ egy 50 Hz-es megszakítás.
A video megszakítás talán nem egészen egyértelmű az EXOS dokumentáció alapján, tehát pontosan így működik:
- a DAVE B4h portjának a 4. bitjén gyakorlatilag a VINT kimenet aktuális állapota található (tehát amikor VINT=1, akkor itt is 1 van)
- a VINT lefutó éle váltja ki a megszakítást, tehát az a beállított VINT-es LPB után történik, és nem az elején
- a B4h port 5. bitjén a video megszakítás kérésének aktuális állapota olvasható (a VINT lefutó élére vált 1-re); ha nincs engedélyezve a video megszakítás, akkor itt mindig 0 van
[row][col] b4 [col] VRES. Ha itt 0 van, akkor az LD1-et és az LD2-t is újratölti, minden scanline kezdetén. Szép hosszú függõleges sávokat lehet így egyszerûen elõállítani
Ez így nem egészen igaz, az LD2-t nem tölti újra, csak az LD1-et. Ez a tulajdonsága hasznos a karakteres módokban (ahol az LD2 minden sor után a karakterkészlet méretével növekszik), és attribútum módben (így lehetséges karakter méretű attribútum cellák létrehozása VRES=0 használatával).
A 8-ik, hiányzó módot TPIXEL-nek hívják (tiny resolution pixel talán?), de vagy csak nem dokumentált, vagy nem is létezik.
Az "érvénytelen" mód valójában olyan karakteres módnak tekinthető, amely a pixel adatot mindig FFFFh video címről olvassa
Tehát talán "CH0" módnak lehetne nevezni, de sok gyakorlati haszna nincs. Azért a karakteres módokhoz van legközelebb, mert egy byte-ot olvas az LD1 címről (ez az ALTIND0/ALTIND1 bitekkel ellenőrizhető), majd a következő byte-ot az FFFFh címről (ez lesz az LPIXEL felbontású pixel byte), és nem végez ATTR műveletet a színeken.
LPB+2 LM Left Margin (és egyebek)
b7,b6 MSBALT, LSBALT. Ez két érdekes bit, 2-C PIXEL módban ezekkel 8 szín közül lehet 2-t használni. A HW-ünk tehát így módosul:
LPB+3 RM Right Margin (és egyebek)
b7,b6 ALTIND1, ALTIND0. A szerepük hasonló, mint az xSBALT biteknek, de 2-C karakteres üzemmódban, és nem a karakter képe szerint színez, hanem a kódja szerint.
Ezek az EXOS dokumentációban (legalábbis a 2.1 verzióban biztosan) zavaró módon össze vannak keverve
Helyesen:
- LM bit 7 = MSBALT
- LM bit 6 = LSBALT
- RM bit 7 = ALTIND0
- RM bit 6 = ALTIND1
Érdemes megjegyezni, hogy ezek minden video és szín módban működnek, akkor is, ha a műveletnek egyébként nincs értelme, ha a színeken nem is mindig van látható hatásuk (256 színű és/vagy attribútum módban nem tudják megváltoztatni a színeket, de az MSBALT/LSBALT ilyenkor is levágja a megfelelő pixel byte bitet).
A működésük:
- MSBALT: ha a pixel byte (függetlenül attól, hogy az LD1 vagy LD2 címről van) 7. bitje 1, akkor a paletta színek választásakor OR műveletet végez 2-vel, és 0-ra állítja a pixel byte 7. bitjét
- LSBALT: ha a pixel byte 0. bitje 1, akkor a paletta szín index 2. bitjét állítja be (OR 4), és a pixel byte 0. bitjét törli
- ALTIND1: ha az LD1 byte (függetlenül attól, hogy mi a funkciója) 7. bitje 1, akkor OR 2 műveletet végez a paletta szín indexen, de nem törli az LD1 byte 7. bitjét
- ALTIND0: ha az LD1 byte 6, bitje 1, akkor OR 4 műveletet végez a paletta színek választásakor, de nem törli az LD1 byte 6. bitjét