Routine $0092 et attributs de car sur vg5000.

C'est la catégorie reine de l'ordinophile, 8 bits et pas un de plus!
Single board ou bus S-100 acceptés.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Routine $0092 et attributs de car sur vg5000.

Message par z80¯\_(ツ)_/¯ »

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.
Avatar de l’utilisateur
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.

Message par Mokona »

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
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: Routine $0092 et attributs de car sur vg5000.

Message par z80¯\_(ツ)_/¯ »

Merci c'est plus clair.
Répondre