MSX Village forum

La Place des Développeurs Screen mode 2

majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 19/10/2015 à 14h58
Salut,

J'ai un souci avec le mode 2,
je comprends comment il fonctionne, je le paramêtre comme il faut et ce que j'obtiens à l'écran est déroutant (?!!) par rapport à ce que j'attends.

Donc y a bien un problème quelque part!

C'est bien au programmeur de remplir la table de l'écran, avec 3 fois les octets de 0 à 255 ?

Pour passer en mode 2 sur MSX1 y a bien juste à appeler CHGMOD avec a=2 (ou modifier les regs 0 et 1 du VDP) ?

J'obtiens à l'écran 3 bandes horizontales (correspondant aux 3 blocs (0-255) du screen) avec le même graph qui est le 1er 1/3 de l'image.. Comme si le mode 2 n'était pas vraiment activé...

Pourtant si avec les mêmes data en VRAM je passe en mode 1, j'ai encore autre chose à l'écran. Donc je suis bien en mode 2.

Est-ce qu'il y a une ruse quelque part à coté de laquelle je serai passé ???

Code :

mes datas en VRAM (et les regs du VDP pointent bien dessus) :
charset : $0000 (6144 octets)
screen : $1800  (768 octets)
colors : $2000 (6144 octets)


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 19/10/2015 à 15h05
majikeyric :
C'est bien au programmeur de remplir la table de l'écran, avec 3 fois les octets de 0 à 255 ?


Oui.



majikeyric :
Pour passer en mode 2 sur MSX1 y a bien juste à appeler CHGMOD avec a=2 (ou modifier les regs 0 et 1 du VDP) ?


Oui, ou alors plus directement par SETGRP en $7E



majikeyric :
J'obtiens à l'écran 3 bandes horizontales (correspondant aux 3 blocs (0-255) du screen) avec le même graph qui est le 1er 1/3 de l'image.. Comme si le mode 2 n'était pas vraiment activé


Etonnant.

On dirait que tu es dans le mode hybride (où les 2 banks inférieurs répètent le bank supérieur).



Tu peux poster ton code ?


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 19/10/2015 à 15h15
J'utilise pas mal de macros, je l'ai simplifié :

Code :

                    output "test.rom"

                    org        $4000
                    byte    "AB"
                    word    start
                    word    0,0,0
                    block    6,0


start                ld        a,2
                    call    CHGMOD

                    set_charset $0000
                    set_screen    $1800
                    set_colors    $2000

                    write_to_vram    charset, 0, 6144
                    write_to_vram    screen, $1800, 768
                    write_to_vram    colors, $2000, 6144

                    jp        $
                    
charset                binary    "gfxlogomkc2.fnt"
screen                binary    "gfxlogomkc2.scr"
colors                binary    "gfxlogomkc2.col"

                    padorg    $8000


                    macro    write_reg_vdp reg , val
                    ld        a,val
                    ld        (RG0SAV+reg),a
                    di
                    out        ($99),a
                    ld        a,reg+$80
                    ei
                    out        ($99),a
                    endm

                    macro    set_charset adr
                    write_reg_vdp 4, adr/$0800
                    endm
                    
                    macro    set_screen adr
                    write_reg_vdp 2, adr/$0400
                    endm
                    
                    macro    set_colors adr
                    write_reg_vdp 3, adr/$40
                    endm

                    macro    write_to_vram src, dst, len
                    ld        a,low dst
                    di
                    out        ($99),a
                    ld        a,(high dst)+$40
                    out        ($99),a
                    ld        hl,src
                    ld        bc,len
.repeter05                    
                    ld        a,(hl)
                    out        ($98),a
                    inc        hl
                    dec        bc
                    ld        a,c
                    or        a
                    bne        .repeter05
                    ld        a,b
                    or        a
                    bne        .repeter05
                    ei
                    endm
                    
                                
Edité par majikeyric Le 19/10/2015 à 15h17


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 19/10/2015 à 16h28
C'est quoi l'instruction "bne" ??
C'est pas plutôt "jr nz" ? Edité par Metalion Le 19/10/2015 à 16h32


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 19/10/2015 à 16h38
oui c'est une macro bne (6502) = jr nz(z80), je m'y fais pas à cette notation :siffle


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 19/10/2015 à 16h56
Le contrôle de bc dans ta boucle n'est pas correct.

Ce n'est pas :
Code :
ld      a,b
or      a


Mais :
Code :
ld      a,b
or      c


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 19/10/2015 à 17h01
si si il est bon mais ton code permet d'optimiser effectivement.

(je teste d'abord c puis quand c est à 0, je teste b).

Mes données sont bien toutes copiées en VRAM. Edité par majikeyric Le 19/10/2015 à 17h07


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 19/10/2015 à 17h34
Une remarque : tu n'as pas besoin d'appeler tes macros "set_..." pour initialiser les adresses des tables avec les adresses standard.
C'est déjà fait par l'appel à CHGMOD.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 19/10/2015 à 18h00
J'ai essayé sans les set.... et ça fonctionne !!!!

j'ai surement donc mal initialisé le bestiau !!! je vais vérifier !

Merci Metalion du coup de pouce ! :D


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
majikeyric Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 06/10/2015 à 17h46

Messages: 72

Le 19/10/2015 à 18h40
Bon j'ai trouvé pourquoi avec mon initialisation cela ne fonctionnait pas,
en screen 2 les combinaisons binaires des pointeurs sont différentes.... :fou Edité par majikeyric Le 19/10/2015 à 18h40


Rétro coder fou : Z80 : MSX / Amstrad CPC / ZX Spectrum -- 6502 : C64 / VIC20 -- 68000 : Amiga
Mon site dédié à ma passion pour la programmation : http://majikeyric.free.fr
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie