La Place des Développeurs Screen mode 2
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é ???
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
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)
J'utilise pas mal de macros, je l'ai simplifié :
Code :
Edité par
majikeyric
Le 19/10/2015 à 15h17
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
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
C'est quoi l'instruction "bne" ??
C'est pas plutôt "jr nz" ? Edité par Metalion Le 19/10/2015 à 16h32
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)
oui c'est une macro bne (6502) = jr nz(z80), je m'y fais pas à cette notation
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
Le contrôle de bc dans ta boucle n'est pas correct.
Ce n'est pas :
Mais :
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)
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
(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
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.
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)
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 !
j'ai surement donc mal initialisé le bestiau !!! je vais vérifier !
Merci Metalion du coup de pouce !
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
Bon j'ai trouvé pourquoi avec mon initialisation cela ne fonctionnait pas,
en screen 2 les combinaisons binaires des pointeurs sont différentes.... Edité par majikeyric Le 19/10/2015 à 18h40
en screen 2 les combinaisons binaires des pointeurs sont différentes.... 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
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie