Skip to content

Latest commit

 

History

History
187 lines (140 loc) · 8.89 KB

vdp_cursus_9.md

File metadata and controls

187 lines (140 loc) · 8.89 KB
                        V D P   C U R S U S   9 
                                                 
      
      Zoals  beloofd deze keer de opslag van SCREEN 5 t/m 8 in het 
      VRAM, of  liever gezegd  de Graphic  modes 4 t/m 7. Dit zijn 
      allen  zgn. bitmap  schermen, en  de opslag in het VRAM gaat 
      dan ook bij allemaal volgens hetzelfde principe.
      
      
                              B I T M A P 
      
      Bij  het  bitmap  systeem  wordt  de kleur  van ieder  pixel 
      bepaald  door  een  bepaald  aantal  bits. Deze  bits worden 
      alleen  voor dit pixel gebruikt, waardoor geen "color spill" 
      effecten  optreden,  zoals bij  SCREEN 2  en 4  of de  MSX2+ 
      schermen 10 t/m 12.
      
      Het  aantal  kleuren dat  tegelijkertijd op  het scherm  kan 
      worden  getoond  is  hierbij  uiteraard afhankelijk  van het 
      aantal bits dat per pixel beschikbaar is. Een overzichtje:
      
      SCREEN 5        G4      4 bits/pixel     16 kleuren
      SCREEN 6        G5      2 bits/pixel      4 kleuren
      SCREEN 7        G6      4 bits/pixel     16 kleuren
      SCREEN 8        G7      8 bits/pixel    256 kleuren
      
      Deze bits  worden zoveel mogelijk in een byte gepropt. Omdat 
      een  byte  zoals  u  ongetwijfeld  weet uit  8 bits  bestaat 
      betekent  dat in  G4 en G6 de kleuren van twee pixels in een 
      byte  worden  opgeslagen, bij  G5 zijn  dat er  4 en  bij G7 
      slechts 1.  Hierbij is  het zo  dat de  kleur van  het meest 
      linkse   pixel  ook  altijd  in  de  meest  linkse  bits  is 
      opgeslagen. Samengevat levert dit onderstaand schema op:
      
                      MSB   7   6   5   4   3   2   1   0   LSB
      G4 en G6              ------1------   ------2------
      G5                    --1--   --2--   --3--   --4--
      G7                    --------------1--------------
      
      
                            V O L G O R D E 
      
      We weten nu dus hoe de kleurinformatie over de bytes van het 
      VRAM verdeeld  is, maar  we weten nog niet in welke volgorde 
      die  bytes staan,  of waar we dus de kleurinformatie van een 
      bepaald pixel kunnen vinden.
      
      Deze informatie over de pixels wordt per lijn opgeslagen. De 
      eerste  lijn  van het  scherm bestaat  uit de  pixels (0,0), 
      (1,0), (2,0),  .... tot (255,0) op G4 en G7 resp. (511,0) op 
      G5  en G6.  De kleuren  staan van  links naar  rechts in het 
      VRAM. Als  het beeldscherm  uit slechts ��n lijn zou bestaan 
      zou dus de volgende formule gelden:
      
      <adres> = <x-co�rdinaat> \ <aantal pixels per byte>
      
      (Let op:  er staat  een "\"  (integerdeling) en niet een "/" 
      (normale  deling)!) De  kleuren van de pixels (0,0) en (1,0) 
      staan op SCREEN 5 en 7 dus samen in byte 0, die er als volgt 
      uit ziet:
      
      MSB   7   6   5   4   3   2   1   0   LSB
            ----(0,0)----   ----(1,0)----
      
      Door een  VPOKE 0,&HF1  wordt pixel  (0,0) dus  wit en pixel 
      (1,0) zwart. De kleur van het pixel (255,0) staat bij SCREEN 
      8 in byte nummer 255, en neemt het hele byte in beslag.
      
      Natuurlijk  bestaat het  scherm niet  uit slechts  ��n lijn, 
      maar uit 212 lijnen (genummerd van 0 t/m 211). De informatie 
      van lijn 1 staat direct achter die van lijn 0, en daarachter 
      weer lijn 2, enz. We kunnen dus zeggen dat de informatie van 
      linksboven naar  rechtsonder in  het VRAM  is opgeslagen. We 
      breiden de formule dus nog wat uit:
      
      <adres> = <x-co�rdinaat> \ <aantal pixels per byte> + 
                <y-co�rdinaat> * <aantal bytes per lijn>
      
      Hierbij is de volgende tabel misschien handig:
      
              Aantal pixels per byte: Aantal bytes per lijn:
      ------------------------------------------------------
      G4      2                       128
      G5      4                       128
      G6      2                       256
      G7      1                       256
      ------------------------------------------------------
      
      
                              P A L L E T 
      
      De modes  4 t/m 6 werken met een palet. Bij G4 en G6 bestaat 
      dit  palet uit 16 kleuren, bij G5 uit 4. Het kleurnummer dat 
      in  de  databytes  wordt  opgeslagen correspondeert  met het 
      paletnummer.
      
      Bij G7  (SCREEN 8)  gaat het heel anders. Het kleurnummer is 
      hier als volgt opgebouwd:
      
      MSB   7   6   5   4   3   2   1   0   LSB
            ----G----   ----R----   --B--
      
      Hierbij staat  G voor de groene intensiteit (0-7), R voor de 
      rode  intensiteit  (0-7)  en  B  voor de  blauwe intensiteit 
      (0-7).  Er is hier dus geen sprake van een palet, de kleuren 
      staan vast.
      
      Het palet  wordt bij  SCREEN 5  t/m 7 door BASIC in het VRAM 
      gezet.  Bij SCREEN  5 en  6 is  dit &H7680,  en bij SCREEN 7 
      &HFA80. Het veranderen van deze waardes door VPOKE heeft pas 
      effect na  een COLOR=RESTORE. In machinetaal wordt het palet 
      normaal  gesproken  gewoon  veranderd door  naar Port  #2 te 
      schrijven  (OUT poort &H9A). Hiervoor verwijs ik u naar deel 
      1 van de VDP cursus.
      
      
                     G E H E U G E N G E B R U I K 
      
      Zoals u  weet hebben  G4 en  G5 4 pages, en G6 en G7 2. Deze 
      pages staan als volgt in het VRAM:
      
      00000H          page 0 G4/G5    page 0 G6/G7
                      ------------
      08000H          page 1 G4/G5
                      ------------    ------------
      10000H          page 2 G4/G5    page 1 G6/G7
                      ------------
      18000H          page 3 G4/G5    ------------
      
      Voor  de VDP  is een  scherm 256 lijnen hoog, en er per page 
      dan  ook  32  kB  (G4/G5) respectievelijk  64 kB  (G6/G7) in 
      beslag worden genomen. Van deze 256 lijnen worden er slechts 
      212 (of 192) op het scherm getoond. Welke, dat wordt bepaald 
      door de waarde in R#23 (beter bekend als VDP(24)).
      
      Omdat  de lijnen  vanaf 212  normaal gesproken  niet te zien 
      zijn, worden  deze gebruikt om de spritedata in op te slaan. 
      Hiervoor  verwijs ik  u naar  het deel van de VDP cursus dat 
      aan sprites was gewijd. SCREEN 5 t/m 8 hebben Sprite Mode 2.
      
      Bij het  wegsaven van  schermen met BSAVE kunt u de volgende 
      eindadressen gebruiken:
      
      SCREEN:         met palet:      zonder palet:
      ---------------------------------------------
      5               &H769F          27135
      6               &H7687          27135
      7               &HFA9F          54271
      8               nvt             54271
      ---------------------------------------------
      
      
                   S C R E E N   S E L E C T E R E N 
      
      Tot  slot  nog  even  de  juiste  bits  om  de  schermen  te 
      selecteren. U  vindt deze bits in R#0 en R#1, waarvan ik dus 
      eerst maar even de indeling geef:
      
              MSB   7   6   5   4   3   2   1   0   LSB
      R#0           0   DG IE2 IE1  M5  M4  M3  0      Mode Reg #0
      R#1           0   BL IE0  M1  M2  0   SI MAG     Mode Reg #1
      
      Het  gaat  om  de  bits  M1 t/m  M5. Bij  de in  dit artikel 
      besproken  grafische schermen  horen de volgende waardes van 
      M1 t/m M5:
      
              M1      M2      M3      M4      M5
      ------------------------------------------
      G4      0       0       1       1       0
      G5      0       0       0       0       1
      G6      0       0       1       0       1
      G7      0       0       1       1       1
      -----------------------------------------
      
      
                            T O T   S L O T 
      
      Hiermee is een eind gekomen aan het zeer lange overzicht van 
      alle  theorie betreffende  de Video  Display Processor in uw 
      MSX computer.  Dit betekent  niet dat de cursus nu stopt, in 
      tegendeel.  Vanaf het  volgende deel  zullen we toepassingen 
      gaan  behandelen.   Het  geleerde   zal  dan   eindelijk  in 
      machinetaal worden toegepast.
      
      Tot de volgende keer!
      
                                                      Stefan Boer