MILC logo

IndexVorigeVolgendeLeeg

Screen 10-12
M.Dekker, 13-07-94


    
- Area: (NL ) MSX ------------------------------------------------------------
  Msg#: 1659                                         Date: 13 Jul 94  11:17
  From: Martijn Dekker                               Read: Yes    Replied: No 
    To: Folkert van Heusden                          Mark:                     
  Subj: screen 10 - 12
------------------------------------------------------------------------------
 -=> Quoting Martijn Dekker to Folkert van Heusden <=-

 MD> Op 11 Jul 94  schreef Folkert van Heusden het volgende aan  hullie:
 FH> Hoe zitten screen 10 t/m 12 in elkaar? enneh, hoe zit dat met die yjk
 FH> ofzoiets?

 MD> Onderstaand tekstje slingerde toevallig nog op mijn HD rond. Ooit eens
 MD> gedownd van InfoDrome (die nu al weken off-line is :-(((). De "ik" in
 MD> dat tekstje ben ik dus niet, en ik weet niet wie het wel is want er
 MD> staat geen naam onder. De naam Alex Wulms is echter een hele bekende
 MD> in het MSX-wereldje. 
 MD> Kleine aanvulling vooraf: screen 10 t/m 12 nemen per scherm evenveel
 MD> ruimte in als screen 8. In screen 12 zijn per groepje van 4 pixels 4
 MD> bytes gereserveerd, met voor die vier pixels samen de kleur in YJK
 MD> codering, en daarnaast per pixel de helderheid (0-31). 
 MD> In screen 10 en 11 (dat is voor de machine hetzelfde, alleen voor
 MD> BASIC is er verschil) is de helderheid niet 0-31, maar 0-16. Het bit
 MD> dat zo vrijkomt wordt gebruikt om te vlaggen of deze pixel een screen
 MD> 5-style pixel (16 uit 512 kleuren) of een screen 12-style pixel (met
 MD> groffere helderheid) is. 
 MD> Overigens wordt in dit tekstje het eigenlijke opslagformaat (wat zit
 MD> in welke bits) van de screen 10-12 pixels niet beschreven. In MSX
 MD> Computer Magazine nr. 47 (juni 1991) is echter een uitstekend artikel
 MD> verschenen dat dat allemaal haarfijn uitlegt. Het staat op pagina's 37
 MD> tot 41. Heb je MCM 47 niet, bestel hem dan na bij de MCCM
 MD> LezersService. Kost je een beetje geld, maar dan heb je ook een _goed_
 MD> artikel. 
 MD> Dan nu het tekstje van mijn HD, over conversie van RGB naar YJK en
 MD> vice versa (deze informatie staat _niet_ in dat MCM artikel). 
 MD> -------------------<<<CUT HERE>>>---------------------
 MD> (Ik heb deze tekst eens van Alex Wulms gekregen, als reaktie op een
 MD> vraag van  mij)

 MD> 4 horizontale pixels zijn in screen 12 als volgt gecodeerd:

 MD> |C7 C6 C5 C4 C3|C2 C1 C0|
 MD> ------+--------------+--------+
 MD> 1 dot |     Y1       |   Kl   |
 MD> 1 dot |     Y2       |   Kh   |
 MD> 1 dot |     Y3       |   Jl   |
 MD> 1 dot |     Y4       |   Jh   |
 MD> ------+--------------+--------+

 MD> K = KhKl is een 6-bits 2 complement getal
 MD> J = JhJl is een 6-bits 2 complement getal
 MD> Y1..Y4  zijn 5-bits unsigned getallen

 MD> K en J zijn dus getallen met een sign (bit 6 is het sign bit). Dit
 MD> houdt dus in dat de volgende conventie wordt gebruikt:
 MD> K = 32  -> -32 wordt bedoeld
 MD> K = 33  -> -31 wordt bedoeld
 MD> .    .  .   .   .       .
 MD> K = 63  -> -1  wordt bedoeld
 MD> K =  0  ->  0  wordt bedoeld
 MD> K =  1  ->  1  wordt bedoeld
 MD> .    .  .   .   .       .
 MD> K = 31  -> 31  wordt bedoeld
 MD> Dezelfde conventie wordt bij J gebruikt.
 MD> In basic kan daarom de volgende 'conversie' formule worden gebruikt
 MD> (om 6-bits 2-complement om te zetten in 16 bits 2-complement ofwel
 MD> integers):
 
 if k>32 then k=k-64

 MD> En op de Z80 (in assembler, neem aan: K zit in de Accu)
 MD> mk8bits:    cp  32      ; is het getal positief ?
 MD> ret c       ; ja => alles is goed
 MD> sub 64      ; nee => zet om in 8-bits 2-complement
 MD> ret

 MD> Als je dit eenmaal hebt, kun je de volgende formules gebruiken:
 MD> -Voor conversie van YJK naar RGB:

 MD> R = Y+J
 MD> G = Y+K
 MD> B = (5/4)*Y - (J/2) - (K/4)

 MD> Let op: R, G en B zijn in principe allemaal 5 bits. De uitkomsten
 MD> kunnen echter te groot of te klein worden! Daarom dient hierop
 MD> gecontroleerd te worden. Dit kan bijvoorbeeld als volgt (in basic):
 if r>31 then r=31 else if r<0 then r=0
 if g>31 then g=31 else if g<0 then g=0
 if b>31 then b=31 else if b<0 then b=0

 MD> -Voor de conversie van RGB naar YJK

 MD> Y = B/2 + R/4 + G/8
 MD> J = R - Y    (= (3/4)*R - B/2 - G/8, dus hier zit alles in gecodeerd)
 MD> K = G - Y    (= (7/8)*G - B-2 - R/4, dus ook hier zit alles in)

 MD> In J en K zit dus alles (R, G em B) gecodeerd, alleen in andere
 MD> verhoudingen!! -------------------<<<CUT HERE>>>---------------------

 MD> Hopelijk heb je hier wat aan.

 MD> Groeten & zo,  |\/| a r t ij |\|
 MD> -!- Alice4Mac 2.4.4 E T2 Eval:12Jun94
 MD>  ! Origin: Point 2 of Paninaro BBS, +31-50-772840 (2:282/525.2)


    

Index

Vorige

Volgende