Lars Gjörling
<6825>
· Text 7327 · w8 · kommentar
1987-08-07 18:25
Ärende: Raster
Systemet för OUT 7,.... vid ABC806 med färgskärm är följande (jag har
visserligen det nya grafikprommet, men nedanstående tror jag gäller
även för det gamla prommet):
Utport 7 (HRS) kan användas för för färgval. Där finns 16 bytes, där
man kan lagra färgkoder. Färgvalsnumret, som används i grafikinstruk-
tionerna (FGPOINT etc) avgör vilken av dessa bytes, som skall
användas. Innehållet i den är färgkoden som avgör vilken färg som vi-
sas. Vilka koder, som läggs där kan man bestämma med fgctl ..., ...,
..., osv där man som bekant kan som mest ange 16 färger.
Varje byte i detta minne ger färg till 2 på varandra följande pix-
els på grafikskärmen.
Den byte i färgvalsregistret, som innehåller färgkoden, har ju 8
bitar. Av dessa bestämmer bitarna 4-7 färgen på den vänstra och
bitarna 0-3 färgen på den högra av de 2 pixels, som skall färgsättas.
Färgkoden består alltså av 4 bitar.
Vänstra pixeln ! Högra pixeln
--------------------------------- ! ---------------------------------
bit 7 bit 6 bit 5 bit 4 ! bit 3 bit 2 bit 1 bit 0
Täcker Blå Grön Röd ! Täcker Blå Grön Röd
Färgerna gul, cyan och magenta fås genom att både röd och grön resp
både blå och grön resp både blå och röd bit är satt. Vit färg fås om
både röd, grön och blå bit är satta. 'Täcker' betyder täckande färg,
dvs grafik har prioritet över text. Om denna bit är släckt, har
texten prioritet och blir inte osynlig under grafiken.
Binärt Dec Färg Binärt Dec Färg
---------------------------------------------------------
0000 = 0 --> BLK 1000 = 8 --> GBLK
0001 = 1 --> RED 1001 = 9 --> GRED
0010 = 2 --> GRN 1010 = 10 --> GGRN
0011 = 3 --> YEL 1011 = 11 --> GYEL
0100 = 4 --> BLU 1100 = 12 --> GBLU
0101 = 5 --> MAG 1101 = 13 --> GMAG
0110 = 6 --> CYA 1110 = 14 --> GCYA
0111 = 7 --> WHT 1111 = 15 --> GWHT
Normalt vid färgsättning med basickommandona, läggs samma färgkod i
bytens båda nibbles, så att de två pixels som motsvarar en byte, får
samma färg. Grafikskärmen ligger alltid ute, även när man inte har
gett några grafikkommandon, och då med färgvalsnr 0, som då inne-
håller färgkoden 00000000 binärt, dvs 0 decimalt.
Om man i kommandomod skriver fgctl red <ret> så finner man att man
får röd bakgrund till sin text, fgctl blu ger blå bakgrund etc.
Röd färg motsvarar då att färgkoden binärt är 0001 0001 = 17 dec.
Blå färg motsvarar binärt 0100 0100 = 68 decimalt. Exakt samma
saker som med fgctl kan man alltså erhålla genom att istället skriva
out 7,17 resp out 7,68. Pröva!
Men nu kommer det roliga. Om man sätter olika värden i bitarna 4-7
gentemot bitarna 0-3, så får vänstra pixeln annan färg än högra pix-
eln. Hela skärmen får alltså ett rastermönster. Om man gör out 7,1
så motsvarar det binärt 0000 0001, dvs varannan pixel blir svart och
varannan röd. Man får en mörkröd färg, som jag tycker är behagligare
bakgrund än den högröda. OUT 7,4 ger på samma sätt en mörkblå bak-
grund.
Allmänt kan man skriva OUT 7, v*16 + h där v är det decimala
tal som motsvarar vänstra pixelns färg enligt ovanstående tabell,
och h den högra pixelns färg. Värden på v eller h > 7, medför att
bakgrunden täcker över texten, och kan därför inte rekommenderas.
Allting blir inte lika lyckat, men man kan experimentera fritt.
Man kan som bekant välja färg för texten också. Om man skriver:
ATTRIBUTE 5 <ret>, ; YEL <ret>, OUT 7,4 <ret> så kan i fort-
sättningen skriva gul text på mörkblå bakgrund, vilken är behagligt
och vilsamt för ögonen (och dessutom känns väldigt fosterländskt på
något sätt).
Vissa kommandon återställer värdet 0 i färgvalsregistret och tar
därigenom bort den bakgrund man har lagt in, det är framförallt
LIST och RUN.
Mvh Lars