Gràfics V9990 i les 4 pàgines de 19268 colors a 512x256 pixels.

imatge de lagasetamsx

Llegim el manual
yamaha_v9990.pdf

Anem a
BIT MAP DISPLAY MODE
Pàgina 14 del manual,

atenció
amb VRAM 512Kbyte

Pàgina 16 del manual,

Mode B3

Resolution 512x212
Number of displayed colors (bit/dot) 8
image size 512x1024
(que vol dir 4 pàgines de 512x256 pixels en vertical)

Displayed color (RGB conversion system)
Pàgina 17 del manual

8bit/dot

quan PLTM (R#13) suposo que vol dir Registre 13 que s'anomena PLTM

Te valor 2(YJK decoder) o 3(YUV decoder) aleshores tindríem els 19268 colors

El següent capítol en parla de
CONTROL OF PALETTE
Pàgina 18 del manual,

Veiem que la opció
2.BYUV
4.BYJK
serien les triades pel que volem.

Ara amb el
REGISTER SETTING VALUES FOR EACH DISPLAY MODE
Pàgina 17 del manual,

i amb
SELECTION OF DISPLAY TYPE
Pàgina 19 del manual,

Hauríem de desxifrar on cal posar els valors a cada registre.

Per desxifrar-ho farem servir la llibreria g9klib, que no explica res però si mirem el propi codi que ens facilita.

Tenim

SetScreenMode:
; A = Mode
; B = Bit per dot
; C = Image size
; D = Interlace
; E = Palette control register

Per tant a A hauríem de posar
a =0 -> Pattern mode 1 (P1)
a =1 -> ...
a =4 -> Bitmap 512 * 212 (B3)

Mirem si un cas les constants de la llibreria g9klib:

; Mode select defines for SetScreenMode
G9K_MODE_P1 EQU 0 ; Pattern mode 0 256 212
G9K_MODE_P2 EQU 1 ; Pattern mode 1 512 212
G9K_MODE_B1 EQU 2 ; Bitmap mode 1 256 212
G9K_MODE_B2 EQU 3 ; Bitmap mode 2 384 240
G9K_MODE_B3 EQU 4 ; Bitmap mode 3 512 212
G9K_MODE_B4 EQU 5 ; Bitmap mode 4 768 240
G9K_MODE_B5 EQU 6 ; Bitmap mode 5 640 400 (VGA)
G9K_MODE_B6 EQU 7 ; Bitmap mode 6 640 480 (VGA)
G9K_MODE_B7 EQU 8 ; Bitmap mode 7 1024 212 (Undocumented v9990 mode)

si!

a B hauríem de posar
b = 8

a C hauríem de posar
c = ???

aviam.....

El que ve ara és complicat,
aviam, en el codi tenim això

LD A,G9K_SCREEN_MODE0
OUT (G9K_REG_SELECT),A
LD A,(HL) ; Get fixed settings for mode reg 6
INC HL
OR A,B ; Set bits per dot
OR A,C ; Set image size

Veiem que la C sobreescriu la B, això vol dir que la B ha d'estar desplaçada
a l'esquerra, o sigui que quedi en una posició de bits que no interfereixi amb la C.

També tenim que el G9K_REG_SELECT i

G9K_REG_SELECT EQU 64h ; W
G9K_SCREEN_MODE0 EQU 6 ; R/W

S'acaba deduint d'alguna manera que tot això afecta al Registre 6.

Si ens fixem
SELECTION OF DISPLAY TYPE
Pàgina 19 del manual,

veiem que el Registre 6 te a la part dreta unes posicions
XIMM1 XIMM0 CLRM1 CLRM0

que podem contrastar els seus valors amb

REGISTER SETTING VALUES FOR EACH DISPLAY MODE
Pàgina 17 del manual,

i amb el gràfic

BIT MAP DISPLAY MODE
amb VRAM 512Kbyte

Pàgina 16 del manual,

I efectivament unes constants en el codi

G9K_SCR0_XIM2048 EQU 12 ; Image size = 2048
G9K_SCR0_XIM1024 EQU 8 ; Image size = 1024
G9K_SCR0_XIM512 EQU 4 ; Image size = 512
G9K_SCR0_XIM256 EQU 0 ; Image size = 256
G9K_SCR0_16BIT EQU 3 ; 16 bits/dot
G9K_SCR0_8BIT EQU 2 ; 8 bits/dot
G9K_SCR0_4BIT EQU 1 ; 4 bits/dot
G9K_SCR0_2BIT EQU 0 ; 2 bits/dot

Ja tenim doncs la B
b = G9K_SCR0_8BIT

i la C
c = G9K_SCR0_XIM512

ara la D
d =

en el codi tenim
DEC D
INC D ; Is d 0?
JR Z,$+4
OR A,G9K_SCR1_EO+G9K_SCR1_IL
OUT (G9K_REG_DATA),A
LD A,(HL)
OUT (G9K_SYS_CTRL),A

que vol dir que si d =1 aleshores li posa interlace si es 0 no interlace

A les constants però tenim això
G9K_SCR1_IL EQU 2 ; Select Interlace

que indica que si volem interlace cal passar-li un 2 i no pas un 1.
Sigui com sigui,

d = 0

La E, suposo que es tan fàcil com

CONTROL OF PALETTE
Pàgina 18 del manual,

I que hem dit que seria el 2.BYUV o el 4.BYJK

Tenim a les constants

; Bit Defines G9K_PALETTE_CTRL (Register 13)
G9K_PAL_CTRL_YUV EQU 192 ; YUV mode
G9K_PAL_CTRL_YJK EQU 128 ; YJK mode
G9K_PAL_CTRL_256 EQU 64 ; 256 color mode
G9K_PAL_CTRL_PAL EQU 0 ; Pallete mode
G9K_PAL_CTRL_YAE EQU 32 ; Enable YUV/YJK RGB mixing mode

Per tant

e = G9K_PAL_CTRL_YUV
o
e = G9K_PAL_CTRL_YJK

També ens trobem això de pas:

G9K_CTRL_VRAM512 EQU 2 ; VRAM=512KB
G9K_CTRL_VRAM256 EQU 1 ; VRAM=256KB
G9K_CTRL_VRAM128 EQU 0 ; VRAM=128KB

Doncs ja podem provar!

SetScreenMode:
; A = G9K_MODE_B3
; B = G9K_SCR0_8BIT
; C = G9K_SCR0_XIM512
; D = 0
; E = G9K_PAL_CTRL_YUV

Enquesta

¿Quin lloc identifiqueu inmediatament amb el MSX? Algunes propostes:
Hipercor Meridiana
0%
Edificis alts de Hipercor Meridiana
0%
Passeig de Fabra i Puig
0%
Continente Mataró
0%
Ronda Sant Antoni
0%
Corte Inglès Plaça Catalunya
0%
Mercat de Sant Antoni
0%
Cotxeres Sants
0%
Gràcia, Fontana
50%
Torre Mena, Lefià, Badalona
0%
Sabadell
0%
Tarragona
0%
Madrid
0%
Sevilla
0%
Zaragossa
0%
Shizuoka ken, Japó
0%
Japò
0%
Altres...
50%
Vots totals: 2

Comentaris recents