Kristoffer Eriksson
<5357>
· Text 7025 · w8 · kommentar
1987-06-21 00:03
Ärende: Ja vet int'
1: Grafikpunkter kommer du åt i grafikminnet, inte med OUT.
Grafikminnet kommer du åt genom att först göra OUT 35,5,35,104+128
(eller motsvarande i assembler), och sen har du grafikminnet på
adress 0-15359 på ABC800 eller 0-30719 på ABC806. Gör sen samma OUT
med utan 128, så blir du av med grafikminnet. Eller också kan du
anropa HRLDIR på adress 32765 där det finns en LDIR-instruktion som
kommer åt grafikminnet.
2: Färgerna är det som ändras med OUT.
På ABC800 är det OUT 7,Färgvalskod. Färgvalskoden väljer en tabell
i ett prom som översätter färgnumret i grafikminnet till rätt färg
på skärmen.
På ABC806 är det
LD B,Färgregister ; Den kod färgen har i grafikminnet, 4 bittar
LD C,7
OUT (C),Färgkod
Färgkoden är 2 x 4 bittar med 1 bit vardera för röd, grön, blå,
text/grafikprioritet. Använder man låg upplösning (där de 4 bittar
i taget som hämtas ur grafikminnet och används som adress till ett
färgregister, står för EN pixel), sätter man oftast både
4-bittarsgrupperna lika så man får en jämn färg, men man kan även
sätta dem olika, så kommer första halvan av pixeln att visa en
färg och den andra halvan en annan färg, vilka ligger så tätt att
de gärna flyter ihop i ögat. Använder man hög upplösning, där de 4
bittarna från grafikminnet står för 2 pixels, får den ena halvan av
färgkoden ange färgen för den ena pixeln och tvärtom. Se även
inlägg 2015 och 2029 i Bladet 1/86 sid 44 o 45.
3: Det beror allt på vad programmen ska göra. Tänk på att
Basicen är skriven i assembler, så allt som görs inom var och
en av Basic-instruktionerna går lika snabbt som motsvarande
assemblerrutin, eftersom det ju ÄR en assemblerrutin. Däremot kan
det ju hända att man lyckas skriva en snabbare rutin för just ens
egna ändamål. Vad som tar extra tid i Basic är övergången från
den ena instruktionen till den andra, vilket tar kanske 20
assemblerinstruktioner att genomföra och görs ganska ofta
(t ex mellan 1, + och 2 i 1+2), men som ju helt elimineras i ett
assemblerprogram. Och så kan man ju bättre hushålla med processorns
resurser som register och minne och sånt (dvs flytta saker hit och
dit mindre). Så att t ex dra en grafisk linje går inte mycket
fortare (om man inte har en smartare algoritm för det), medan att
beräkna 1+2 kan gå betydligt fortare eftersom det förra är en enda
instruktion medan det senare drar mer "overhead" i form av Basic-
hantering. Sen kan man förstås dra en horisontell linje snabbare
med en specialrutin för den saken än med Basicens rutin som kan dra
alla slags raka linjer.