a
b
riek worden bewerkt en de wijze waarop ze worden
weergegeven. Het lijkt gewoon meer op kartografie en
dat is het ook!
Literatuur
Brunet, R. (1987), La carte, mode d'emploi. Paris: Fayard-
Reclus.
Foley, J.D. en A. van Dam (1988), Fundamentals of Interacti
ve Computer Graphics. Reading (Mass.): Addison Wesley.
Schans, R. van der (1988a), Grafische of geometrische gege-
vens? NGT Geodesia 1988, pp. 215-218.
Schans, R. van der (1988b), Verwerking van de geografische
gegevensstroom met steun van de Computer. Wageningen:
LUW Vakgroep Landmeetkunde.
Smeets, J.F. (1987), Apparatuur voor de invoer, de verwer
king en de uitvoer van rastergegevens. Kartografisch Tijd-
schrift XIII, nr. 1, pp. 37-42.
Wilton, R. (1987), Programmers''s Guide to PC PS/2 Vid
eo Systems. Redmont: Microsoft Press.
operaties uit: 5 AND 3 1. Met Mem kun je een willekeurige
byte in het geheugen benaderen en de procedure Move ten-
slotte kopieert een op te geven aantal bytes van de ene varia-
bele naar de andere. Dat laatste gaat veel sneller dan het in
een FORDO-lus overnemen van afzonderlijke bytes of in-
tegers.
Aan de hand van een voorbeeld zal ik nu het afbeeldingspro-
ces toelichten. Het matrixfragment (figuur 6a) komt overeen
met het afgebeelde in figuur 3. Het is geschaald tussen 0 en
255.
De toegepaste OmzetTabel Staat, in gekomprimeerde vorm, in
figuur 6b. De BMC's zijn hexadecimaal gekodeerd; daardoor
kunnen ze later met eenvoudige SHL- en SHR-instrukties uit
elkaar worden gerafeld.
In figuur 6c wordt de verdere, niet eenvoudige, gang van za-
ken geschetst. Eerst wordt per rij matrixelementen een array
gevuld met de BMC's die overeenkomen met de waarden in
deze matrixelementen. Dit array bevat dus nu de nummers
van de patroontjes waarmee de afzonderlijke bitplanes moe-
ten worden gevuld. Het vullen gebeurt per bitplane, en wel
per groep van drie beeldlijnen tegelijk. In het voorbeeld is
bitplane 3 gekozen.
Appendix
De procedure MaakBeeldPrent
De hierbij afgedrukte procedure MaakBeeldPrent (in Turbo
Pascal) is een vereenvoudigde en gefatsoeneerde versie van de
in beitel toegepaste procedure. De 'officiele' versie kan ma
trixelementen ook afbeelden in vlakjes van 1*1 en 8*6 punten
en biedt daarnaast patroontjes voor de BitplaneMappingCo-
des (BMC's) 1 en 3.
Het uitgangspunt voor MaakBeeldPrent is, dat een willekeu-
rig deel van de beeldmatrix (een window) op een willekeurige
piek op het scherm (een viewport) moet kunnen worden
weergegeven.
Daartoe wordt opgegeven het geheugenadres van het element
uit de matrix dat linksboven moet verschijnen, het aantal ko-
lommen van de matrix (hier 128), het aantal kolommen en
regels dat uit de matrix wordt gesneden, en de piek (in
schermkoördinaten) waar de beeldprent komt te staan.
Geheugenadressen zijn bij processoren van de 8086/8088-
familie samengesteld uit een segmentadres en een offsetadres;
het segmentadres adresseert steeds blokken van 16 bytes, ter-
wijl het offsetadres steeds 65536 bytes adresseert vanaf het
begin van elk blok. Doordat de procedure MaakBeeldPrent
zo flexibel mogelijk is gehouden moest er veelvuldig met
deze adressen worden gewerkt (het had misschien ook wel
met pointers gekund).
De bitplanes van het videogeheugen op de Olivetti EGC-
kaart beginnen op de segmentadressen A000, A800, B000, en
B800 (alles hexadecimaal, in Turbo Pascal met een aangege-
ven). De opeenvolgende bytes in een bitplane korresponderen
niet direkt met de 400 beeldlijnen op het scherm: de eerste 80
bytes vormen beeldlijn 0, de volgende beeldlijn 4 enzovoort;
de funktie YOffset zorgt er daarom voor dat de, van boven
naar beneden toenemende, Y-koördinaten worden omgere-
kend in het juiste offsetadres van het begin van een beeldlijn.
Turbo Pascal kent een aantal funkties en procedures die niet
standaard-Pascal zijn. Ze liggen vrij dicht tegen machinekode
aan en zijn daardoor erg praktisch om de snelheid te bevor
deren. SHL en SHR vermenigvuldigen met of delen door
machten van 2: 3 SHL 2=3*4=12 enzovoort. AND en OR
voeren op de afzonderlijke bits van integers of bytes logische
BeeldMatrlx
verschaald naar 0 255:
OmzetTabel
(Array [0 255] OF Integer)
kolom
waarde
BMC
rij
64
65
66
67
68
69
70
71
0.
15
0000
86
1 13
133
159
168
177
163
173
170
16.
.31
0002
87
103
102
136
149
167
170
172
167
32.
.47
0004
88
86
65
98
129
153
166
174
172
48.
.63
2004
89
1 1 1
67
107
135
142
152
160
169
64.
79
0024
90
107
73
123
160
161
143
131
139
80.
.95
0044
91
100
1 10
152
153
162
152
151
145
96.
.111
0042
92
126
147
158
150
166
163
160
151
1 12.
127
2020
93
152
151
161
170
176
167
159
164
128.
143
2040
144.
159
4040
160.
175
4240
176.
191
4440
192.
.207
4420
208.
.223
2420
224.
.239
4400
240.
.255
2400
ttf T
bitplanes:
4321
procesgang van de
opbouw van de bltpatronen,
bl)voorbeeld rlj 93:
152 151
161 170
176 167
159 164
4040 4040
4- 4-
0 0
4240 4240
2 2
4440 4240
4,
4 2
O
■tf
CN -F AJ
O
^r
o -+ o
•V
0000 0000
0000
A050 0A05
AA55
FOFO 0A05
FAF5
0000 0A05
0A05
00
00
AA
55
FA
F5
OA
05
00000000
00000000
10101010
01010101
11111010
11110101
00001010
00000101
BMC's voor bitplane 3
geORde patrooncodes
high byte (hex)
low byte (hex)
gekopieerd
naar bitplane 3
(oneven YBoven)
Figuur 6. De beeldmatrix (a) wordt via een van te voren ge-
vulde omzettabel (b) omgezet in patronen op de bitplanes (c).
Uit patroonkodes worden twee PrentLijnen (PrLnl en
PrLn2) opgebouwd, die zo vaak als nodig is in hun geheel
worden gekopieerd naar het videogeheugen.
64
KT 1989.XV.1