Pour commencer voici un tableau récapitulatif condensé pour bien comprendre l'EF-9345: VULGARISATION DU EF-9345
PARTIE 1
PARTIE 2
PARTIE 3
En premier lieu il faut bien comprendre (et c'est le plus dur avec l'EF9345) le système de blocs mémoire géré par ce VDP.
Avec l'Alice tu as 8K de VRAM découpé en 8 blocs d'1K de 25 tampons de 40 octets + 24 octets "fantome" soit :
Code : Tout sélectionner
| EF9345 VRAM 8ko |
|-----------------------------------------| ~~ |-----------------------------------------|
| bloc 1 1024octets | ~~ | bloc 8 1024octets |
|-----------------------------------------| ~~ |-----------------------------------------|
|TAMPON1|24octets| .....|TAMPON25|TAMPON26| ~~ |TAMPON1|24octets| .....|TAMPON25|TAMPON26|
|$0000 $0400| ~~ | $2000|
Les numéros de tampons sont adressé par Y (du Ef9345) :
Code : Tout sélectionner
| détail d'un BLOC de 1 Ko (1024 octets) |
|------------------------------------------------------------------------|
| TAMPON1 | TAMPON2 | TAMPON3 | TAMPON4 | ~~ | TAMPON25 | TAMPON26 |
| Y=0 | Y=1 | Y=8 | Y=9 | ~~ | Y=30 | Y=31 |
| 40 octets| 24 octets| 40 octets| 40 octets| ~~ | 40 octets| 40 octets|
Code : Tout sélectionner
Tampon : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Y : 0 1 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
En résumé Z=BLOC Y=TAMPON X=OCTET dans le TAMPON
Par exemple si tu veux accéder à l'octet 10 stocké dans le 3eme tampon du 2eme bloc :
Attend je calcul Z=1 Y=8 X=09
Avec tous ces éléments nous pouvons commencer à faire un premier programme en assembleur:
Nous allons faire au plus simple pour bien comprendre le fonctionnement du VDP.
Nous n'allons pas initialiser les registre DOR, MAT,PAT,TGS pour l'instant, pour pouvoir rester le plus simple possible, évidement pour faire un programme correcte il faudrait initialiser ces registres en premier.
AFFICHER UN CARACTERE en mode 40 colonnes bichrome:
Le code pour ALICE 32/90:
Code : Tout sélectionner
;déclarations :
R0 .EQU $BF20
R1 .EQU $BF21
R2 .EQU $BF22
R3 .EQU $BF23
R4 .EQU $BF24
R5 .EQU $BF25
R6 .EQU $BF26
R7 .EQU $BF27
EXEC .EQU $08
;Programme:
AFFICHE_1_CARA
LDD #$6501 ; selectionne le caractère et le jeu
STD R1
LDAA #$34 ; attribut du caractère
STAA R3
LDAA #18 ; ligne
STAA R6
LDAA #20 ; colonne
STAA R7
LDAA #$00 ; commande KRF
STAA R0+EXEC
JSR BUSY ; saute à la routine BUSY
RTS ; fin du programme
BUSY ; attend que le VDP est fini de traiter la commande
TST R0
BMI BUSY
RTS
Code : Tout sélectionner
;déclarations :
9345_R0 .EQU $8020
9345_R1 .EQU $8021
9345_R2 .EQU $8022
9345_R3 .EQU $8023
9345_R4 .EQU $8024
9345_R5 .EQU $8025
9345_R6 .EQU $8026
9345_R7 .EQU $8027
9345_EXEC .EQU $08 ($8028 à $802F)
Explications: (aidez vous du tableau que je vous ai fournis)
Code : Tout sélectionner
LDD #$6500 => 01100101 00000001
si on regarde mon petit tableau on voit que l'on accède au tampon 25 (01101) caractère 1 (01)
ensuite pour R2 = 00000001 ce qui donne caractère standard, mono, jeu G0, taille normale, incrustation normale.
STD R1 => stocke D dans R1 et R2 (D est un registre 16 bits) ;)
Code : Tout sélectionner
LDAA #$34 ; attribut du caractère
Pour les attributs du caractère $34 -> 00110100
ce qui donne normal, couleur de forme jaune(011), normal, couleur de fond bleu(100)
STAA R3
les attributs toujours en R3
Code : Tout sélectionner
LDAA #18 ; ligne
STAA R6
LDAA #20 ; colonne
STAA R7
coordonnées ligne et colonne ou afficher le caractère
ATTENTION pour la numérotation des lignes c'est très particulier: la ligne 0 est adressable par 0 mais pour les lignes 1 à 24 l'adressage se fait en additionnant 7 au numéro de ligne (par exemple ligne 11 : 11 +7 = 18).
Code : Tout sélectionner
LDAA #$00 ; commande KRF
STAA R0+EXEC
pour finir on envoi la commande et comme il n'y a qu'une commande on demande en même temps son exécution (+EXEC).
KRF est court et rapide dans le cas présent écriture, affiche un caractère seulement, pas d’incrémentation
JSR BUSY ; saute à la routine BUSY
on attend que la commande soit fini d'être exécuté par le VDP
N'hésitez pas a faire des commentaires si cela est encore trop absconse
Pour voir si tout le monde à bien compris ( oui même toi qui te cache au fond de la classe ):
Donnez moi la valeur de R1, R2, R3 R6 et R7 pour afficher le caractère 3 du tampon 5 du jeu G0 en double hauteur double largeur, écriture cyan fond rouge, clignotant, affiché a la ligne 1 colonne 23 !
A vos cahiers
PARTIE 2