Bonjour,
Je souhaite afficher un caractère avec la routine $0092 sur le vg5000 (émulation Mame).
J'ai un souci avec les attributs. Je n'arrive pas à comprendre le fonctionnement. Lorsque le caractère est positionné à partir de le colonne 1, le fond n'est pas modifié. Ce n'est pas le cas lorsqu'il est positionné sur la colonne 0, le fond est noir sur toute la ligne.
Y a t'il une astuce pour arriver à obtenir un fond coloré sur la première colonne ?
D'après la doc:
$0092:
Envoie un caractère de 16 bits à l'écran directement sans passer par le buffer vidéo géré par le Z80. La position du caractère est donnée par HL, H représentant l'ordonnée (ligne) 0 - ligne 0, 8-31 - lignes 1-24, et L représentant l'abscisse (colonne) 0-39 - colonnes 0-39.
D doit contenir le code du caractère et E son attribut. Les registres BC et AF sont altérés.
Voici le code. Dans drawCh(), chCol reçoit un entier 16 bits contenant le code car et l'attribut couleur et drawChAux() se charge de la routine $0092 en mettant chCol dans le registre DE.
void drawChAux(int chCol, int xy) {
#asm
pop bc ; bc = ret address
pop hl ; hl = int xy
pop de ;de = int chCol
push de ; now restore stack
push hl
push bc
;ld ix,0x47FA
call 0x0092
#endasm
}
int drawCh(unsigned char x, unsigned char y, unsigned char ch, unsigned char col) {
int xy = 0;
int chCol = 0;
if (y == 0) {
xy = (y<<8) | (x+X_OFFSET);
} else {
xy = ((y+8+Y_OFFSET-2)<<8) | (x+X_OFFSET);
}
chCol = (ch<<8) | col;
return drawChAux(chCol,xy);
}
Merci pour votre aide.
Routine $0092 et attributs de car sur vg5000.
Modérateurs : Papy.G, fneck, Carl
- z80¯\_(ツ)_/¯
- Messages : 77
- Inscription : 06 oct. 2020 13:15
- Localisation : Bourgogne
- Mokona
- Messages : 1042
- Inscription : 17 déc. 2016 22:01
- Localisation : Nord Est des Yvelines
- Contact :
Re: Routine $0092 et attributs de car sur vg5000.
Hello,
le mode par défaut dans lequel est configuré le EF9345 a des limitations pour utiliser le mode "deux octets par caractère" (Fixed Short code, si je me souviens bien).
Une des limitations est que la couleur de fond ne peut être changé qu'avec un caractère "graphique", mais pas "texte". C'est pour cela que le VG5000 n'utilise pas la colonne 0 dans l'éditeur BASIC : chaque ligne commence en colonne 0 par un caractère graphique vide suivi des attributs pour la ligne ($80 / $E6 au démarrage)
La couleur de fond est alors conservée jusqu'au prochain changement pour tous les caractères (qu'ils soient graphiques ou non).
J'avais mis quelques notes à ce propos sur mon site : https://www.triceraprog.fr/vg5000u-arra ... video.html
le mode par défaut dans lequel est configuré le EF9345 a des limitations pour utiliser le mode "deux octets par caractère" (Fixed Short code, si je me souviens bien).
Une des limitations est que la couleur de fond ne peut être changé qu'avec un caractère "graphique", mais pas "texte". C'est pour cela que le VG5000 n'utilise pas la colonne 0 dans l'éditeur BASIC : chaque ligne commence en colonne 0 par un caractère graphique vide suivi des attributs pour la ligne ($80 / $E6 au démarrage)
La couleur de fond est alors conservée jusqu'au prochain changement pour tous les caractères (qu'ils soient graphiques ou non).
J'avais mis quelques notes à ce propos sur mon site : https://www.triceraprog.fr/vg5000u-arra ... video.html
- z80¯\_(ツ)_/¯
- Messages : 77
- Inscription : 06 oct. 2020 13:15
- Localisation : Bourgogne
Re: Routine $0092 et attributs de car sur vg5000.
Merci c'est plus clair.