De extra VDP registers

Last updated on: August 19, 1998

De MSX 2+ VDP heeft drie extra registers, genummerd 25 tot en met 27. Vanuit BASIC zijn ze toegankelijk met VDP(26)-VDP(28). Om het goede VDP nummer van een register te bepalen dien je dus één bij het register nummer op te tellen.

De registers zijn als volgt ingedeeld:

reg b7  b6  b5  b4  b3  b2  b1  b0
25  -   CMD VDS YAE YJK WTE MSK SP2
26  -   -   H08 H07 H06 H05 H04 H03
27  -   -   -   -   -   H02 H01 H00

De afkortingen bij de bits hebben de volgende betekenis:

CMD: Command function
Dit bit bepaalt hoe de VDP commando's werken. Als CMD gereset is, werken de commando's alleen op de schermen 5 tot en met 12. In het andere geval werken ze op alle schermen. Op scherm 5 tot en met 12 werken ze dan normaal, terwijl op de overige schermen het adresserings systeem van scherm 8 wordt gebruikt. Dit houdt in dat de coordinaten op deze schermen naar de VDP gestuurd moeten worden alsof het om scherm 8 gaat.

VDS: VRAM data select
Dit bit bepaalt de functie van pin 8 van de VDP. Als VDS gereset is, komt het klok signaal van 3.58 MHz voor de CPU op pin 8 te staan. Anders wordt het zogenaamde VDS signaal erop gezet. Dit signaal is laag als de VDP het VRAM aanspreekt voor de weergave van het scherm. Anders is het VDS signaal hoog.
Aangezien bij de meeste MSX 2+ computers de Z80 zijn klok signaal van pin 8 van de VDP krijgt, is het aan te bevelen om dit bit altijd op 0 te laten staan.

YAE en YJK
Deze staan in de paragraaf met de naam Schermen selecteren in assembly.

WTE: Wait function
Dit bit bepaalt of de wait functie van de VDP werkt. Als WTE gereset is, werkt de wait functie niet. In het andere geval is de wait functie ingeschakeld. Als de CPU het VRAM dan wil aanspreken, genereert de VDP automatisch wait states totdat de VDP klaar is om de CPU bij het VRAM te laten. Door hier gebruik van te maken, hoeven programma's die de VDP commando's gebruiken niet meer bit 7 van status register 2 te controleren.

MSK: Het mask bit
Met dit bit kan de mask functie van de VDP worden ingeschakeld. Indien MSK gereset is, staat de mask functie uit. In het andere geval staat ze aan. Dit houdt in dat de acht meest linkse pixels gemaskerd worden met de rand kleur. Dit is nodig indien er horizontaal wordt gescrolled met register 26 en 27. De uitvoer van de de eerste acht pixels wordt namelijk niet gegarandeerd indien register 27 ongelijk aan nul is. Merk op dat op scherm 6 en 7 de eerste zestien pixels worden gemaskerd in plaats van de eerste acht.

SP2: Screen size bit
Hiermee wordt de scherm grootte ingesteld voor de horizontale scroll. Indien SP2 gereset is, is het scherm één pagina groot. Alles wat links het scherm uit loopt, komt rechts het scherm weer in. In het andere geval is het scherm twee pagina's groot. Indien nu de eerste pagina links het scherm uitloopt, komt de tweede pagina rechts het scherm in.

H08-H00: De horizontale scroll waarde
Met deze bits wordt de horizontale scroll waarde ingesteld. Op scherm 6 en 7 wordt er met twee pixels per eenheid gescrolled en op de overige schermen met een pixel per eenheid.
De horizontale scroll waarde moet verdeeld worden over twee registers. Bit H08-H03 komen hierbij in register 26 terecht en bepalen de verschuiving van het scherm naar links. Bit H02-H00 daarentegen komen in register 27 terecht en bepalen de verschuiving van het scherm naar rechts. Dit maakt het instellen van de scroll waarde een beetje ingewikkeld. Om bijvoorbeeld het scherm N pixels naar links te schuiven onder BASIC, kunnen de volgende commando's worden gebruikt:

VDP(27)=(N+7)\8: VDP(28)=-N AND 7

Dit komt overeen met het BASIC commando:

SET SCROLL N

In andere programmeertalen, zoals assembler, is het SET SCROLL commando echter niet voorhanden dus dan dien je zelf de scroll waarde in te stellen met de hierboven vermelde methode.