Retour basic après commandes ef9345

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

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

Retour basic après commandes ef9345

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

Bonjour,
Je fais des expérimentations sur VG5000 (mame) avec le proc graphique.
Voici un prog simple que j'ai pu trouver sur le forum qui permet de bien comprendre le fonctionnement de l'ef9345. Il fonctionne mais lors du retour à l'éditeur basic, je ne retrouve pas le magnifique fond cyan et les caractères noir. De plus il arrive que les caractères soient brouillés.
Question : Comment faire en sorte de revenir à l'état précédant le call &"7000". Faut-il remettre le TGS,PAT,MAT à l'état initial du VG5000 ?
D'avance merci pour votre aide.

Code : Tout sélectionner

org $7000

main:
DI
PUSH HL
PUSH IX

; TGS + PAT definissent 000 = 40 car commandes longues
; TGS = 01 -> 0000 0001
; PAT = 47 -> 0100 0111
; PAT7=0; TGS7=0; TGS6=0 -> 000 = 40 car commandes longues

LD D, $21 ; Dans R1
LD E, $01 ; 0000 0001
CALL EF9345
LD D, $28 ; R0 exec
LD E, $81 ; Commande indirection r=1-> TGS Write
CALL EF9345; ecrire dans le registre TGS (commandes longues)

LD D, $21 ; Dans R1
LD E, $47 ; 0100 0111
CALL EF9345
LD D, $28 ; R0 exec
LD E, $83 ; Commande indirection r=3 -> PAT Write
CALL EF9345; ecrire dans le registre PAT

LD D, $21 ; Dans R1
LD E, $04 ; Bleu
CALL EF9345
LD D, $28 ; R0 exec avec valeur de E ligne suivante
LD E, $82 ; Commande indirection (1000 0 010) r=2 -> MAT Write
CALL EF9345; ecrire dans le registre MAT


; A
LD D, $22 ; R2
LD E, $01 ; Attributs jeu de car / att video
CALL EF9345

LD D, $23 ; R3
LD E, $71 ; Blanc/Rouge dans R3 01110001 -> Bits de poids fort = 7
CALL EF9345

LD D, $21; R1 = car
LD E, 65; car 65
CALL EF9345

LD D, $26 ; R6 = ligne (0 pour 0 et n+7 pour [1 <= n <= 24])
LD E, 00
CALL EF9345

LD D, $27 ; R7 = colonne entre 0 et 39
LD E, 00
CALL EF9345

LD D, $28 ; D=40 (Registre R0 + 8 pour l'execution) avec commande ligne suivante
LD E, $00 ; et E=0 KRF dit a l'ef9345 d'executer les registres definis plus tot
CALL EF9345


;~ boucle_sans_fin:
;~ JP boucle_sans_fin


; retour basic -> Pas top
POP IX
POP HL
EI
RET

EF9345:
CALL $0286; teste si EF935 est pret
CALL $0D7C; ecrit dans EF9345 (D=numero du registre, E=valeur du registre)
RET
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Retour basic après commandes ef9345

Message par Papy.G »

Si tu ne peux appeler isolément la routine réinitialisant l'affichage, tu vas avoir à remettre les paramètres qui ne sont pas corrects à la main, effectivement. A moins que quelques commandes basic, ou un CLS ou je ne sais quelle commande nettoyant la page-écran se charge de tout cela.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Retour basic après commandes ef9345

Message par Mokona »

Hello,

il me semble que le prochain rafraîchissement par le BASIC remettra MAT d'aplomb.

Par contre, le BASIC est écrit pour ne fonctionner qu'avec les codes variables et il ne me semble pas qu'il touche à PAT et TGS une fois l'initialisation faite. Comme cette routine configure la vidéo en code long, le BASIC envoie de choses qui n'ont plus vraiment de sens.

Une idée, éventuellement (pas essayée) pour revenir au BASIC, est peut-être d'envoyer à nouveau la séquence d'initialisation :

Code : Tout sélectionner

ld hl,$1179 ; $1a (= 26) suivi des couples de valeurs à envoyer vers le VDP
call regst ; regst = $00ad ; envoi de la séquence pointée par HL vers le VDP
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: Retour basic après commandes ef9345

Message par rendomizer »

Capture d’écran de 2020-10-30 17-17-28.png
Capture d’écran de 2020-10-30 17-17-28.png (205.92 Kio) Consulté 3453 fois
araigné move + retour basic 2.zip
(13.22 Kio) Téléchargé 134 fois
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: Retour basic après commandes ef9345

Message par rendomizer »

Code : Tout sélectionner

 " retour écran du BASIC "

_ef9345:
db 20 ; nombre de données a injecter dans l'ED9345 ici il y en a 20 si dessous
db $21
db $00
db $28
db $81 tgs

db $21
db $6E
db $28
db $82 mat

db $21
db $F7
db $28
db $83 pat

db $21
db $13
db $28
db $84 dor

db $21
db $08 écran texte $28 pour écran graphique
db $28
db $87 ror 
Dernière modification par rendomizer le 22 nov. 2020 10:54, modifié 1 fois.
Je ne suis qu'un utilisateur pas un pro
Avatar de l’utilisateur
z80¯\_(ツ)_/¯
Messages : 77
Inscription : 06 oct. 2020 13:15
Localisation : Bourgogne

Re: Retour basic après commandes ef9345

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

Je m'en suis sorti avec TGS $00, PAT $f7 et MAT $6e.
Le retour au basic se fait correctement. J'avais pour cela lu dans les registres de l'ef9345 à l'init du VG5000.

Pour revenir à l'état initial:

Code : Tout sélectionner

restore_ef9345:
    ld d, $21 ; dans r1
    ld e, $00 ; 0000 0001
    call ef9345
    ld d, $28 ; r0 exec
    ld e, $81 ; commande indirection r=1-> tgs write
    call ef9345; ecrire dans le registre tgs (commandes longues)

    ld d, $21 ; dans r1
    ld e, $f7 ; 0100 0111
    call ef9345
    ld d, $28 ; r0 exec
    ld e, $83 ; commande indirection r=3 -> pat write
    call ef9345; ecrire dans le registre pat

    ld d, $21 ; dans r1
    ld e, $6e ; bleu
    call ef9345
    ld d, $28 ; r0 exec avec valeur de e ligne suivante
    ld e, $82 ; commande indirection (1000 0 010) r=2 -> mat write
    call ef9345; ecrire dans le registre mat
    ret

Cette routine permet de lire les registre de l"f9345:

Code : Tout sélectionner

; Lecture registre ef9345 (d=numero du registre)
; la valeur est placee dans h
EF9345_READ:
    call 0286h
    ld a,d
    out (8fh),a
    in a,(0cfh) ; Lecture registre R1
    ld h,a
    RET
Répondre