Logicielsmoto.com

Nous sommes le 28 Mar 2024, 22:55

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 35 messages ]  Aller à la page Précédente  1, 2, 3  Suivante
Auteur Message
MessagePosté: 16 Juil 2022, 14:42 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Sous teodore aussi tour noir. Le bug devrait se situer là dedans, mais je ne vois rien qui choque dans update_system(). En particulier pas d’inversion en fonction de la page affichée.
https://sourceforge.net/p/teoemulator/c ... are.c#l133

Oops je crois que non messages se sont croisés...

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Juil 2022, 21:02 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Comme échangé par mail, il semble qu’il faille tout simplement aussi inverser le mapping de la partie système.

En effet l’inversion est provoqué par le fait que la zone écran ne fait que 8ko logique et pas 16 comme les autres espaces logiques (cartouche, système et données). Du coup toutes les espaces logiques >= $6000 ont un A14 (cf page 120-122 du manuel technique) qui passe de 1 à 0 quand on les parcours dans le sens croissant. Résultats: leurs deux moitiés de 8ko inversés sur to8.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 05 Sep 2022, 21:20 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
Le mapping de l'espace x6000 x9FFF n'est pas strictement documenté.
On sait que c'est la page1... mais rien de plus.

Si on veut être super clean dans le code, il ne faudrait rien supposer (car c'est prendre un (mini) risque (mini car je doute que thomson sorte une nouvelle machine)).
Pour l'émulateur par contre on peut reproduire ce qu'on va constater sur matériel réél. Idéalement il faudrait tester toutes les versions des gate array pour s'assurer que le comportement est constant sur toute la gamme TO8 TO9+ TO8D

[edit]
@sam : je suis d'accord avec ton raisonnement, il semble y avoir 1 décodage économisé dans cette logique

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Sep 2022, 08:36 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
Le MO6 a le même gate array que le TO8, mais l'adresse de l'espace cartouche est $B000. Ce n'est pas une frontière de 8K (B est impair).
Et donc dans le MO6, quand la ROM est recouverte par la RAM, il y a inversion entre les premiers 4K et les derniers 12K.
Dans le TO8, l'espace cartouche est en $0000, donc sur une frontière de 8K, il y a inversion entre les premiers 8K et les derniers 8K.
Si le gate array avait supprimé l'inversion, il aurait été nécessaire de faire une version différente pour le MO6. C'est pourquoi il ne la supprime pas. CQFD.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Sep 2022, 10:30 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
Vu le schéma le gate array peut très bien réaliser un mapping plus conventionnel: d'un coté il y a le bus d'adresse partagé entre le 6809 et les eproms, mais pour l'adressage RAM le gate array se place totalement entre le bus et la RAM.

La simplification avec inversion des pages de 4 ou 8k et la structure MO/TO proviennent uniquement de la façon dont le masque du gate array a été réalisé (optimisations et/ou bugs compris).
Si on était sur un projet évolutif basé sur la spécification connue je déconseillerai la méthode de programmation. En retro-coding on peut généralement se le permettre.

Pour l'émulateur il faut le coder comme le hardware donc je vais inverser. S'il y a des variantes ou des release de Gate array connues il faut tester aussi.

PS: cette modif a un impact sur le contenu du snapshot. Un ancien snapshot risque donc de planter sur la nouvelle version

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Sep 2022, 12:42 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
Pour information : Les premières versions de dcmoto avaient le même bug (les deux parties de 8K n'étaient pas inversées).
De mémoire, je crois qu'un jeu TO8 ne fonctionnait pas, c'est ce qui m'a permis de trouver le problème.
La correction date de 2011 : dcmoto v2011.04.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Sep 2022, 12:56 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 433
Localisation: Var
Merci Gilles et Daniel,

J'ai profité de ma pose déjeuner pour démonter mes machines et faire des tests.
Sur mes deux machines j'ai ces deux gate array :
TO8D : EFG2021FN
TO8 : CF74021

On retrouve les deux gate array mentionnés dans la doc Cofadel, je n'en connais pas d'autres perso mais je suis assez "jeune" sur le sujet.

J'ai lancé mon programme de test et j'obtiens le résultat attendu (bordure noire), avec le même programme sous teo j'ai une bordure rouge (voir méthode de test dans mes posts précédents).


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Sep 2022, 20:20 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
binaire windows avec update:
https://sourceforge.net/projects/teoemu ... p/download

Le source est mis à jour.
Attention donc aux anciens fichiers snapshot et autosave car l'inversion de mapping se propage à cette sauvegarde (et la machine sauvegardée en version N-1 plante)

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Sep 2022, 21:50 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 433
Localisation: Var
ça fonctionne correctement maintenant, un grand merci !

Autre problème (désolé d'enchainer comme ça ...)
Dans la foulée j'ai fait quelques tests pour voir comment se comportait l'émulateur sur la stabilité du timer 6846.
J'obtiens un comportement différent par rapport à la machine réelle.
Dans la démo ci jointe, en fin d'intro, j'ai un dégradé de couleur en raster qui se décale vers le bas sur teo, alors que c'est stable sur machine réelle.
Fichier(s) joint(s):
SONIC2.rar [235 Kio]
Téléchargé 127 fois


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Sep 2022, 23:05 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
ici ca sera un poil plus complexe mais effectivement j'ai l'impression que si on est en mode continu on oublie de retirer les qqs cycles d'horloge après le déclenchement du timer et l'irq effective (qui ne peut se situer que sur une instruction) donc on ajoute parfois quelques cycles.
Il faut que je trouve une maniere propre d'écrire ca et que je teste.

En première approximation je pense qu'il faut faire une macro différente pour le restart qui repart du dernier timeout et pas de clock.

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Sep 2022, 08:09 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
le timer devrait être un peu plus régulier maintenant (les cycles en trop ne sont plus ajoutés):

https://sourceforge.net/projects/teoemu ... p/download

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Sep 2022, 08:55 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 433
Localisation: Var
C'est du rapide :) merci bcp.

Effectivement c'est bien stable maintenant !

J'ai fait un programme de test un peu plus léger qui affiche une ligne blanche sur la ligne n°100 au moment du boot.

Fichier(s) joint(s):
debug-timer.zip [1.25 Kio]
Téléchargé 116 fois


Ci dessous le code de test.
Il y a peut être mieux pour se caler en bordure d'écran, on peut en discuter dans un autre fil de la rubrique programmation si vous avez trouvé d'autres techniques.
Pour le test ça suffit amplement pour vérifier qu'il n'y a pas de dérive du timer.

Code:
        org   $6200

irq_routine       equ $6027
irq_timer_ctrl    equ $E7C5
irq_timer         equ $E7C6
irq_one_frame     equ 312*64-1         ; one frame timer (lines*cycles_per_lines-1), timer launch at -1

Boot
        lda   #$E7                     ; at boot time, DP is $60, change to $E7
        tfr   a,dp
        ldd   #PaletteEffect
        std   irq_routine
        lda   #100                     ; screen line to sync
        ldx   #irq_one_frame           ; on every frame

IrqSync
        ldb   #$42
        stb   irq_timer_ctrl
        ldb   #64/8                    ; 64 (cycles per line) / 8 (cycles of the wait loop)
        mul
        tfr   d,y
        leay  -21,y                    ; manual adjustment

        lda   #32
!       tst   <$E7
        bmi   <                        ; while spot is in a visible screen line       
!       tst   <$E7
        bpl   <                        ; while spot is not in a visible screen line
!       bita  <$E7
        beq   <                        ; while spot is not in a visible screen col
!       bita  <$E7
        bne   <                        ; while spot is in a visible screen col
!       leay  -1,y                     ; loop that wait until spot is at the desired place in steps of 8 cycles
        bne   <
       
        stx   irq_timer                ; spot is at the end of desired line, set the timer to one frame

IrqOn         
        lda   $6019                           
        ora   #$20
        sta   $6019                    ; STATUS register
        andcc #$EF                     ; tell 6809 to activate irq
        bra   *                        ; infinite loop

PaletteEffect
        ; from here --->
        lda   #8*2                    ; set color index
        sta   <$DB
        ldd   #$0FFF                   ; set color value
        stb   <$DA
        sta   <$DA
        mul                            ; tempo
        mul                            ; tempo
        mul                            ; tempo
        mul                            ; tempo
        brn   *                        ; tempo
        ; ---> to here : 64 cycles = one line on screen
        lda   #8*2                    ; set color index
        sta   <$DB
        ldd   #$0777                   ; set color value
        stb   <$DA
        sta   <$DA
        jmp   $E830                    ; return to caller

        align $6278                    ; boot tag
        fcb   $42                      ; B
        fcb   $41                      ; A
        fcb   $53                      ; S
        fcb   $49                      ; I
        fcb   $43                      ; C
        fcb   $32                      ; 2
        fcb   $00                      ;
        fcb   $00                      ;


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Sep 2022, 14:07 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Comme ca, il m’a l’air bien ce code. Ça doit etre comme ca que marche l’ecran de préférences palette qui affiche 16+2=18 couls de façon stable indépendamment de la complexité du traitement cpu. Il doit y avoir de sacrées conversions arithmétiques pour passer des coordonnées pixel aux coordonnées baricentriques, puis au rgb : Impossible de compter les cycles sur un chemin aussi complexe.

On pourrait imaginer une interruption toutes les lignes, c’est à dire tous les 64us. Mais je pense que le traitement de l’IRQ par la ROM mangerait à elle seule les 64 cycles CPU utilisables entre deux IRQs. Il faudrait travailler éventuellement par groupe de 3 ou 4 lignes (312 est divisible par 3 et 4).

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Sep 2022, 15:32 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
Ca me semble correct.
A noter qu'on n'est pas synchronisé au cycle près avec l'écran mais au mieux à N cycles correspondant au timing de la boucle:
Code:
!       bita  <$E7
        bne   <


BITA en mode direct prend 4 cycles, BNE en prend 3 donc on est entre 0 et 6 cycles après le changement du registre.

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Sep 2022, 15:55 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
Avez-vous remarqué le bug dans l'écran de réglage de la palette du vrai TO8D ?
Fichier(s) joint(s):
to8d.jpg
to8d.jpg [ 26.21 Kio | Vu 4378 fois ]

On retrouve le même bug dans dcmoto :
Fichier(s) joint(s):
dcmoto.png
dcmoto.png [ 1.8 Kio | Vu 4378 fois ]


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 35 messages ]  Aller à la page Précédente  1, 2, 3  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 17 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com