MILC logo

IndexVorigeVolgendeLeeg

VDP cursus (5)
Genic Clubguide, 00-00-00


    
ALLES OVER UW VIDEOCHIP:

        M S X 2 / 2 +   V D P   C U R S U S   ( 5 )
       =============================================

In  dit vijfde  deel worden de statusregisters behandeld. De 
naam zegt  het al,  deze registers  geven informatie over de 
status  van  de  Video Display  Processor. Uiteraard  kunnen 
statusregisters alleen gelezen worden en niet beschreven.

Het lezen van een statusregister is in deel 1 (ClubGuide #7) 
behandeld, daar kunt u dat nog eens nalezen.


                 OVERZICHT STATUSREGISTERS

        MSB    7   6   5   4   3   2   1   0    LSB
S#0            F   5S  C   ---vijfde sprite---  Status #0

F:      Vertical scanning interrupt flag
        Wordt  geset als  de VDP  bovenaan het scherm begint 
        met de  beeldopbouw. F  wordt gereset  als S#0 wordt 
        gelezen.  Dit is  de normale  interrupt, die  altijd 
        naar de hook &HFD9F springt.
5S:     Flag voor de vijfde/negende sprite
        Deze vlag geeft aan dat er meer sprites op een hori-
        zontale lijn voorkomen dan de VDP kan weergeven.  In
        G3 (SCREEN 4) en hoger zijn dat er acht, in de ande-
        re schermen vier.
C:      Collision flag
        Wordt gezet als twee sprites elkaar raken.
vijfde  
sprite: Bevat het nummer van de vijfde of negende sprite.

        MSB    7   6   5   4   3   2   1   0    LSB
S#1            FL  LPS -Identification #-  FH   Status #1

FL:     Lightpen flag (Lightpen flag is geset, LP bit 6 R#8)
        Als de lichtpen licht waarneemt moeten zowel dit bit 
        als  IE2 (bit 5 van R#0) geset zijn om een interrupt 
        te  veroorzaken.  FL  wordt  gereset  als  S#1 wordt 
        gelezen.

        Mouse Switch 2 (Mouse flag is geset, MS bit 7 R#8)
        De 2e  vuurknop van  de muis  is ingedrukt. FL wordt 
        niet gereset als S#1 wordt gelezen.

LPS:    Lightpen switch (Lightpen flag is geset)
        De  vuurknop van de lichtpen is ingedrukt. LPS wordt 
        niet gereset als S#1 wordt gelezen.

        Mouse switch 1 (Mouse flag set)
        De 1e  vuurknop van  de muis is ingedrukt. LPS wordt 
        niet gereset als S#1 wordt gelezen.

Identification number:
        Het ID# van de VDP. Hieraan kun je zien of het V9938 
        of V9958 is (bit 2 van S#1 is geset als V9958).

FH:     Horizontal scanning interrupt flag
        FH wordt geset als een zgn. line-interrupt optreedt, 
        dus  als de VDP begint met het weergeven van de lijn 
        die in  R#19 staat. De interrupt is mogelijk als IE1 
        (bit  4 van  R#0) is geset. FH wordt gereset als S#1 
        wordt gelezen.

Let op:  de lichtpen-  en muisuitlezing  wordt bij  de V9958 
niet  meer door  de VDP gedaan. De bits FL en LPS hebben dus 
hun betekenis verloren.

        MSB    7   6   5   4   3   2   1   0    LSB
S#2            TR  VR  HR  BD  1   1   EO  CE   Status #2

TR:     Transfer ready flag
        Als de CPU (microprocessor) data naar de VDP stuurt, 
        moet er gewacht worden tot dit bit geset is. Dan mag 
        de data verstuurd worden.

VR:     Vertical scanning line timing flag
        Tijdens verticaal scannen is deze flag geset.

HR:     Horizontal scanning line timing flag
        Tijdens horizontaal scannen is deze flag geset.

BD:     Boundary color detect flag
        Bij  het  Search commando  (zie VDP  cursus deel  4) 
        geeft deze  flag aan  of de randkleur is gevonden of 
        niet.

EO:     Display field flag
        Geeft bij het afwisselend weergeven van pagina's aan 
        welke pagina er wordt weergegeven.

CE:     Command execute flag
        Geeft  aan dat  een commando wordt uitgevoerd. Wacht 
        tot dit bit gereset is voordat het volgende commando 
        naar de VDP wordt gestuurd. Zie VDP cursus deel 3 en 
        4.

        MSB    7   6   5   4   3   2   1   0    LSB
S#3            X7  X6  X5  X4  X3  X2  X1  X0   Column low
S#4            1   1   1   1   1   1   1   X8   Column high
S#5            Y7  Y6  Y5  Y4  Y3  Y2  Y1  Y0   Row low
S#6            1   1   1   1   1   1   Y9  Y8   Row high

Bovenstaande registers worden gebruikt voor het aangeven van 
de de plaats van de spritebotsing, de plaats van de lichtpen 
of de relatieve beweging van de muis.

        MSB    7   6   5   4   3   2   1   0    LSB
S#7            C7  C6  C5  C4  C3  C2  C1  C0   Color reg

Dit  register wordt  gebruikt bij  de POINT  en VRAM  to CPU 
commando's. De  VRAM data  staat in  dit register.  (Zie VDP 
cursus deel 4).

        MSB    7   6   5   4   3   2   1   0    LSB
S#8            BX7 BX6 BX5 BX4 BX3 BX2 BX1 BX0  Border X low
S#9            1   1   1   1   1   1   1   BX8  Border X hig

De  X co”rdinaat  die wordt gevonden bij het Search commando 
wordt in deze registers gezet. (Zie VDP cursus deel 4).

Nu  we de  theorie hebben  behandeld komen er nog een aantal 
toepassingen aan bod.


                       SPRITE BOTSING

Bij een  spritebotsing wordt  C (bit  5 van  S#0) geset. Als 
zowel  MS als  LP (bit  7 en  6 van  R#8) zijn  gereset, dan 
zullen de co”rdinaten van de botsing naar S#3 t/m S#6 worden 
geschreven. Let  op: bij  het lezen van S#5 wordt de inhoudt 
van S#3 t/m S#6 gereset.

De  X die  in S#4  en S#3  staat is  12 meer dan de X van de 
botsing, de  Y die  in S#5  en S#6  staat is  8 meer  dan de 
botsing. Oftewel:

XS#3S#4 = XBOTSING + 12
YS#5S#6 = YBOTSING + 8


                   PERFECTE SCREENSPLIT 

Op ClubGuide #7 stond een artikel van Cas Cremers waarin hij 
u  uitlegde   hoe  u een  zgn. screensplit  kunt maken.  Hij 
schreef  in dat  artikel dat  u de  screensplit perfect kunt 
maken door iets met de statusregisters te doen.

We  gebruiken  hiervoor  HR. Aan deze flag kunt u zien of de 
VDP begint  met het  weergeven van  een nieuwe  lijn. Op die 
manier  kun je  een screensplit  krijgen die precies bij een 
bepaalde lijn begint. In MT ziet dat er als volgt uit:

        LD A,2          ; Status register #2
        OUT (&H99),A    ; Data naar Port #1
        LD A,15+128     ; Register #15
        OUT (&H99),A    ; Register # naar Port #1

LUS:    IN A,(&H99)     ; Lees Port #1 (inhoud S#2)
        BIT 5,A         ; Bekijk HR
        JP Z,LUS        ; Wacht tot HR geset is

Voer na  deze routine zo snel mogelijk de nodige akties uit, 
en de screensplit is perfect.


                          LET OP!

Het   is  erg   belangrijk  dat  u  na  het  lezen  van  een 
statusregister altijd  de waarde van register 15 weer gelijk 
maakt  aan 0, anders zal de computer vastlopen. Uw MSX leest 
namelijk voortdurend  S#0, om  te kijken of er een interrupt 
is  opgetreden. Er  wordt echter niet eerst de waarde 0 naar 
R#15 geschreven,  dus dat moet de programmeur zelf doen. Dit 
hoeft natuurlijk niet als u een BIOS routine gebruikt.

Een  korte  aflevering  dit  keer.  Qua theorie komen alleen 
de  sprites en de beeldschermopslag nog aan bod, daarna gaan 
we verder  met de  toepassingen. De  volgende keer neem ik u 
mee naar de wereld van de sprites.

                                                Stefan Boer

    

Index

Vorige

Volgende