[DCMOTO/MESS] Freeze HNY2013

Couvre tous les domaines de l'émulation ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : fneck, Carl, Papy.G

__sam__
Messages : 6902
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

[DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Bon je poursuis ici le sujet sur le freeze de la démo HNY2013.

J'ai fait quelques avancées très instructives. Déjà voyons la fin de la routine du player:

Code : Tout sélectionner

6544 96   C6              lda    <TMSB   ; clear TCO
6546 3B                   rti
Ce truc là nettoie le bit TC0 pour lever l'interruption timer en lisant le MSB du timer en $E7C6. Très bien: c'est du classique.

Voyons ce qu'il se passe en $6544 quand on appuie sur une touche dans DCMOTO:
Sans titre.png
Sans titre.png (87.06 Kio) Consulté 6450 fois
Bon ben rien de spécial: DP=$E7, et donc on va faire un LDA en $E7C6 comme attendu.

Même choses sur MESS quand il freeze:
Sans titre2.png
Sans titre2.png (155.88 Kio) Consulté 6450 fois
Ah tiens là c'est presque pareil sauf que DP=$60.. on ne lit plus $E7C6 mais $60C6 parce que DP pointe là dans la page 0 du moniteur et pas dans la zone d'I/O $E7 comme sous DCMOTO (et comme on s'y attends). Du coup le BIT TCO reste à 1 (il est reflété par le b7 en $E7C0) ce que la ROM interprète comme une nouvelle interruption timer: La boucle est entretenue comme observé hier.

Bref: les deux émuls semble ne pas correspondre quant à la valeur de DP quand on appuie sur une touche. Reste à présent à retrouver à quel endroit le DP diverge entre les deux émulateurs.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
__sam__
Messages : 6902
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

__sam__ a écrit : 03 févr. 2021 22:51 Reste à présent à retrouver à quel endroit le DP diverge entre les deux émulateurs.
Bon j'ai pas trouvé l'endroit, mais par contre l'examen de la routine IRQ du TO7/70 est instructive:

Code : Tout sélectionner

FB73 B6E7C0     LDA    $E7C0  Test TC0 (interruption timer)            
FB76 2B04       BMI    $FB7C             
FB78 6E9F6021   JMP    [$6021]         Non ==> hook en IRQ   
FB7C 44         LSRA                      Oui ==> possible interruption timer
FB7D 2501       BCS    $FB80              A=$81 ?
FB7F 3B         RTI                           Non ==> on arrive jamais là
FB80 B66019     LDA    $6019              
FB83 8520       BITA   #$20               TimePT actif ?
FB85 2704       BEQ    $FB8B              Non ==> ignore
FB87 6E9F6027   JMP    [$6027]            Oui ==> ok routine timer utilisateur
De ce qu'on remarque c'est que DP n'est pas modifié dans la ROM TO7/70 (contrairement au TO8 où j'ai j'avais vu qu'on y mettait un $E7 fort utile que j'exploite). Donc la routine timer utilisateur récupère celui qu'on avait avant l'IRQ. Par chance DP vaut typiquement $E7 dans le programme principal et donc quand l'interruption arrive, on a DP=$E7. Ca marche.

Par contre si une routine appelée (au pif GETC) fait passer temporairement DP à $60 et que, pas de chance, l'interruption timer se produit pile à ce moment là(*), la routine timer utilisateur se retrouve avoir un DP pointant ailleurs que la zone des registres I/O. Bim freeze!!
___
(*) ce moment là est dans la routine anti-rebond de GETC

Code : Tout sélectionner

F1C0 8E0271     LDX    #$0271              3
F1C3 301F       LEAX   -$01,X              5
F1C5 26FC       BNE    $F1C3               3
qui fait une boucle d'attente d'exactement 5ms (200hz), ce qui est nettement plus long que la période du timer qu'on utilise (880hz ==> 1.1ms). Bref: cette boucle qui s'execute avec DP=$60 et les interruptions autorisées provoquera un freeze.

La cause racine du bug est trouvée!! :arrow: Clairement le bug est dans le player qui assume que les routines TimePT ont toujours DP=$E7. C'est vrai sur TO8/TO9 et pas sur TO7.

Mais cela n'explique pas pourquoi sous DCMoto on arrive pas à provoquer cela par appui sur une touche car la boucle de 5ms est bien présente en $F1C0 et le CCR est identique pour les deux émuls (interruptions autorisées (**)). Pourtant l'interruption timer n'est pas levée durant ces 5ms (200hz) sous DCMOTO.

Daniel, y a t'il une particularité dans l'émulation de l'interruption timer sous DCMOTO qui ferait qu'elle ne se lève pas à ce moment de la ROM ? (genre sa précision ne serait que de 10ms, mais j'en doute, la musique serait très imprécise)
____
(**) Ce truc là est bizarre car fort justement dans le code de getc de la démo on désactive les interruptions quand on appelle GETC mais ca sert à rien car visiblement en rom les interruptions son ré-activées peu avant le test anti-rebond.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 15628
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Heureusement en informatique il n'y a pas de mystère inexplicable, tout a une cause logique. Ici c'était particulièrement subtil et __sam__ a eu bien du courage pour enquêter. Maintenant nous ne sommes plus dans l'inconnu.

Il me reste à trouver le bug de dcmoto. Il ne me surprend pas vraiment, car le 6846 a toujours des mystères pour moi et son émulation n'est pas très bonne. Il y a plusieurs années nous avions trouvé quelques cycles de différence dans le déclenchement de l'interruption timer et j'avais corrigé par un patch pas très propre. Je vais chercher maintenant pourquoi l'interruption n'est pas levée assez vite et je corrigerai. A suivre...
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 15628
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Il y avait dans dcmoto une remise à zéro malencontreuse du signal IRQ à l'entrée dans la routine d'interruption. Il ne faut pas. C'est la routine d'interruption qui remet elle-même le signal IRQ à zéro juste avant le RTI, par la technique classique de lecture du port.

La nouvelle version de développement peut être chargée à la page de l'émulateur : http://dcmoto.free.fr/emulateur/index.html
Attention : il faut prendre la version de développement, pas la version officielle. Après une modification importante je crains toujours les régressions, la version officielle ne sera pas modifiée avant quelques mois de test de la version de développement.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6902
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Ah ben avec cette version là, HNY2013 fige complètement comme la machine réelle avec la même boucle d'interruption que celle observée sous MESS. Donc c'était le "nettoyage" automatique de TC0 qui faisait ce que le LDA <$C6 inopérant semblait marcher quand même, empêchant le figeage.

Le bug de HNY2013 est trouvé et expliqué. Idem pour celui de DCMOTO (les bugs sont grégaires, le freeze en cachait deux bien planqués dans la même démo.) Tout est bien qui fini bien. [EDIT] Heu par contre j'ai parlé trop vite. Le mode TO9 bloque complètement avec ce fix dans DCMOTO :arrow: Aucune réaction au clavier ou à la souris. Donc c'est presque fini.

Il ne me reste plus qu'à patcher HNY2013 en faisant LDA >$E7C6. Ca coûtera 1 cycle de plus qu'avant par interruption produisant les échantillons (et un peu plus pour celles où l'on décode en plus la partition). Voilà c'est fait:
hny2013.zip
version patchée
(155.17 Kio) Téléchargé 115 fois
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 15628
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Il y a encore un problème : CTRL-C ne fonctionne pas pour revenir au menu.
CTRL efface la neige
C efface la neige

Je crois qu'il vaudrait mieux tester une touche simple pour revenir au menu, par exemple STOP.

[Edit]
- J'ai pu contourner le bug du TO9 dans dcmoto-20210204 par un patch pas très orthodoxe, mais fonctionnel.
C'était une mauvaise émulation de l'ACIA 6850 du clavier.

- Sur TO9 et sur TO8 la touche CTRL-C retourne bien au menu. Par contre sur TO7/70 elle efface la neige et rien d'autre.
Ce comportement du TO7/70 se produit aussi bien avec la vraie machine qu'avec dcmoto. A voir dans MESS pour vérifier.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6902
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Heu .. chez moi ctrl (clavier gauche pc) et c font revenir au menu sans soucis en mode TO7/70 (il faut rester appuyer un peu) à la fois sous MESS et sous DCMOTO (experimental).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 15628
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Effectivement, avec la version .fd la touche CNT-C fonctionne bien.
Par contre avec la version .sd (patchée pour ne pas tester la densité), elle ne fonctionne pas.
hny2013_patche_sd.zip
(80.71 Kio) Téléchargé 123 fois
C'est très mystérieux, j'ai seulement remplacé un LDB <$58 par LDB #$00.
La lecture de la datasheet 6850 m'a tellement fatigué que je ne suis plus en état de réfléchir ce soir. Je reprendrai l'enquête demain...
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6902
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Oui ce truc est affolant de complexités cachées. C'est vrai que je n'avais pas testé le SD, mais uniquement le SAP que j'ai recompilé (et mis dans le ZIP ci-dessus). Il reste effectivement le problème du boot-loader sur les formats "basses densité". Je me demande: qui utilise encore une floppy, pire une floppy en basse-densité sur thomson ?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 15628
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Le non fonctionnement de CNT-C avec la version .sd de HNY2013 pour TO7/70 me laisse perplexe.

- Ce n'est pas un bug de dcmoto, car il y a le même comportement avec la vraie machine.
- La seule modification du programme HNY2013, par rapport à la version disquette qui fonctionne bien, est le LDB #$00 à la place de LDB <$58 pour initialiser la densité, mais ça n'a aucun rapport avec la gestion du clavier.
- Quand le jeu est chargé il n'y a plus aucun accès au contrôleur SDDRIVE, il ne peut pas provoquer d'erreur.
- La routine de scrutation du clavier du TO7/70 est tellement complexe que je m'y perds un peu.

Peut-être un débordement de la pile ? Je n'y crois pas trop, car avec un point d'arrêt en $6230 on trouve la même valeur de S pour la version SD et la version FD.

bug_sd.png
bug_sd.png (47.64 Kio) Consulté 6308 fois
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6902
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Je pense avoir trouvé un truc. Dans la rom, on a ce bout de code

Code : Tout sélectionner

F1EC 9ECD       LDX    <$CD               
F1EE E685       LDB    B,X                
qui transforme le scan-key (dans B) en +/- code ascii avec une table dont l'adresse est donnée en $60CD.

Or avec la version FD/SAP on trouve $FD05 en $60CD, mais avec la version SDModifiée, on a $9C05 en $60CD. L'octet $60CD n'a pas la même valeur!

En fait cet octet est écrasé par ca:

Code : Tout sélectionner

6200 8602       LDA    #$02                2
6202 9748       STA    <$48                4
6204 974C       STA    <$4C                4
6206 FC001E     LDD    $001E               6
6209 EDE4       STD    ,S                  5 <=== ici
car S=$60CC en mode SD. Ce code vient du bootloader

Code : Tout sélectionner

***************************************
* Boot bloc. Il charge le 2eme
* secteur de la diskette de boot en
* $6300 et saute a cette adresse.
*
* Compilation avec:
* - c6809 (-c -am -oOP)
*   http://www.pulsdemos.com/c6809.html
* - macro assembler 3.6 (A/IM)
*   http://tinyurl.com/btqz57a
*
* Samuel Devulder Mars 2012
***************************************
        setdp   $60

        org     $6200

init    lda     #$2
        sta     <$6048
        sta     <$604C
        ldd     $1E
        std     ,s      ! retour
        ldd     #$6300  ! addr. charg.
        std     <$604F
        jsr     $E82A   ! load secteur
        stb     <$6080  ! clear sema.
        bcs     exit    ! erreur?
        inc     <$604F  ! 256 oct. suivant
        inc     <$604C  ! secteur suivant
        jsr     $E82A   ! load secteur
        stb     <$6080  ! clear sema.
        bcs     exit    ! erreur?
        jmp     $6300   ! sinon jsr
exit    rts
qui place en adresse de retour le contenu de $001E (adresse d'init de la cartouche memo7), de sorte que le RTS final poursuive le boot memo7 comme si de rien n'était.

Le truc est donc qu'en fait en mode SD, la pile lors du démarrage du bootblock vaut $60CC, mais en mode FD, celle-ci vaut: $60CB. Donc le boot SD est différent du FD, ce qui explique pourquoi la talbe utilisée par le décodage clavier est trashée et pourquoi le ctrl-c ne marche plus en mode SD.

Je pense que ceci explique complètement le bug. Tu as raison Daniel, le pb ne vient pas du "patch $6058" dans le fichier SD, mais dans la rom du SD qui n'a pas la bonne valeur de pile attendue pour un bootblock (en tout cas pas la même valeur que lors d'un boot sur FD.)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 15628
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

C'est à la fois subtil et très clair.

Dans un contrôleur Thomson, par exemple le CD90-351, la procédure DKBOOT fait deux tentatives avant de signaler une erreur. Le compteur de boucle est empilé (PSHS A en $E0C6). Si l'une des deux tentatives est bonne, l'exécution du secteur de boot est lancée sans dépiler le compteur. Le registre S est donc décalé d'une unité.

Dans le contrôleur SDDRIVE il n'y a pas de retry, pas de compteur et pas d'empilage. Lors de l'exécution du secteur de boot le registre S n'est pas décalé, il pointe vers l'octet suivant par rapport à un contrôleur de disquette.

Contrôleur CD90-351 désassemblé par Prehisto :

Code : Tout sélectionner

     Lancement du boot floppy
E0AF  17 00 86        LBSR    $E138           Initialise les registres
E0B2  0F 49           CLR     <$49            Lecteur 0 demandé
E0B4  17 00 8C        LBSR    $E143           Choix du lecteur
E0B7  17 01 0B        LBSR    $E1C5           Reset du lecteur         
E0BA  25 50           BCS     $E10C           Si erreur, sort
E0BC  96 4E           LDA     <$4E            | Si simple densité,
E0BE  81 43           CMPA    #$43            | lancement
E0C0  10 27 FF 74     LBEQ    $E038           | du boot QDD
E0C4  86 02           LDA     #$02             | 2 tentatives
E0C6  34 02           PSHS    A                | maximum          
E0C8  0F 58           CLR     <$58            Double densité initialisée
E0CA  0F 4A           CLR     <$4A            | Piste 0
E0CC  0F 4B           CLR     <$4B            | demandée
E0CE  86 01           LDA     #$01             | Secteur 1
E0D0  97 4C           STA     <$4C             | demandé
E0D2  33 8D 81 2A     LEAU    >$6200,PCR      | Ptr  sur buffer de boot   
E0D6  DF 4F           STU     <$4F            | demandé
E0D8  17 03 8D        LBSR    $E468           Lit le secteur
E0DB  17 00 83        LBSR    $E161           Eteint le moteur
E0DE  DE 4F           LDU     <$4F            Lit ptr buffer secteur
E0E0  24 08           BCC     $E0EA           Si pas d'erreur passe
E0E2  96 58           LDA     <$58            | Si toutes les densités ont
E0E4  26 21           BNE     $E107           | été testées, sort
E0E6  03 58           COM     <$58            Passe en simple densité
E0E8  20 E0           BRA     $E0CA           Nouvel essai
E0EA  31 8D 81 91     LEAY    >$627F,PCR      | Limite du décodage         
E0EE  34 20           PSHS    Y               | en pile
E0F0  86 55           LDA     #$55            Checksum de départ
E0F2  6A C4           DEC     ,U              | Décode les
E0F4  63 C4           COM     ,U              | données
E0F6  AB C0           ADDA    ,U+             Calcule le checksum
E0F8  11 A3 E4        CMPU    ,S              | Si pas fin du décodage,
E0FB  26 F5           BNE     $E0F2           | boucle
E0FD  35 20           PULS    Y               Rétablit la pile
E0FF  A1 C4           CMPA    ,U              | Si checksum incorrect,
E101  26 09           BNE     $E10C           | sort
E103  6E 8D 80 F9     JMP     >$6200,PCR      Sinon, exécute le boot
---- Sortie si erreur de boot
E107  35 02           PULS    A               |
E109  4A              DECA                    | Tentative suivante
E10A  26 BA           BNE     $E0C6           |
E10C  0F 80           CLR     <$80            Flag "contrôleur absent"
E10E  6E 9F 00 1E     JMP     >[$001E]        Lance l'application à froid 

Contrôleur SDDRIVE :

Code : Tout sélectionner

                      ;------------------------------------------------------
                      ; DKBOOT = Lancement du boot
                      ; - Initialisation de la carte pour verifier qu'elle
                      ;   est presente (ajoute le 03/02/2019).
                      ; - Lecture du secteur de boot, avec au prealable la
                      ;   selection du fichier .sd s'il n'est pas defini. 
                      ; - Decryptage du secteur de boot et controle de la
                      ;    checksum des 128 premiers octets.  
                      ; - Si le secteur de boot est valide, lancement du 
                      ;   boot, sinon reinitialisation du Basic. 
                      ;------------------------------------------------------
                      DKBOOT
 E02E 1700C0            LBSR  SDINI          ; initialiser la carte SD
 E031 2538              BCS   DKB9           ; erreur d'initialisation
                      ; lecture secteur de boot
 E033 8602              LDA   #$02           ; code lecture secteur
 E035 9748              STA   <DK_OPC        ; stockage code operation 
 E037 0F49              CLR   <DK_DRV        ; 0 dans le numero de lecteur
 E039 0F4A              CLR   <DK_TRK        ; toujours zero
 E03B 0F4B              CLR   <DK_TRK+1      ; selection piste 0
 E03D 8601              LDA   #$01           ; valeur pour secteur 1
 E03F 974C              STA   <DK_SEC        ; selection secteur 1
 E041 338D81BB          LEAU  BUFFER,PCR     ; adresse du buffer secteur
 E045 DF4F              STU   <DK_BUF        ; stockage adresse buffer
 E047 8D57              BSR   DKCONT         ; appel fonction standard
 E049 2520              BCS   DKB9           ; erreur de lecture
                      ; decryptage 128 octets et controle checksum
 E04B 338D81B1          LEAU  BUFFER,PCR     ; adresse debut de buffer      
 E04F 31C87F            LEAY  $7F,U          ; adresse de fin des 128 octets
 E052 3420              PSHS  Y              ; empilage adresse de fin
 E054 8655              LDA   #$55           ; pour calcul checksum de boot
                      DKB4
 E056 6AC4              DEC   ,U             ; octet - 1
 E058 63C4              COM   ,U             ; complement
 E05A ABC0              ADDA  ,U+            ; ajout checksum
 E05C 11A3E4            CMPU  ,S             ; test fin de buffer
 E05F 26F5              BNE   DKB4           ; octet suivant
 E061 3520              PULS  Y              ; pour retablir le pointeur de pile
 E063 A1C4              CMPA  ,U             ; test checksum boot
 E065 2604              BNE   DKB9           ; checksum fausse
                      ; execution du boot
 E067 6E8D8195          JMP   BUFFER,PCR     ; execute le boot
                      ; sortie en erreur
                      DKB9
 E06B 0F80              CLR   <DKFLG         ; indicateur de presence controleur
 E06D 6E9F001E          JMP   [$001e]        ; lancement application a froid
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 15628
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Pour faire fonctionner HNY2013 pour TO7/70 avec SDDRIVE, j'ai fait un deuxième patch :
En $6209, STD ,S devient STD -1,S et donc $EDE4 devient $ED7F
hny2013_patche2.zip
(80.71 Kio) Téléchargé 125 fois
Cette fois je crois que tout est bon (grâce à l'aide de __sam__) et la conversion est terminée.
Dans la soirée j'ajouterai le fichier .sd à la page HNY2013 du site dcmoto.
Je publierai aussi bientôt une nouvelle version de développement de dcmoto pour réparer le bug du TO9.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6902
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Hmm en fait j'ai l'impression que c'est mon bootloader qui est pas terrible en écrasant ",s" comme s'il contenait une adresse de retour. Note: STD -1,S ne va pas trasher la table de décodage de clavier, mais va faire planter le RTS du "exit". Je pense que ceci devrait mieux marcher (pas d'usage de la pile), mais il faut que je refasse le secteur de boot de la diskette.

Code : Tout sélectionner

        setdp   $60

        org     $6200

init    ldd     #$6302  ! b=$02
        stb     <$6048  ! commande=lecture
        stb     <$604C  ! 2nd secteur
        clrb            ! d=$6300
        std     <$604F  ! addr. charg.
        jsr     $E82A   ! load secteur
        stb     <$6080  ! clear sema.
        bcs     exit    ! erreur?
        inc     <$604F  ! 256 oct. suivant
        inc     <$604C  ! secteur suivant
        jsr     $E82A   ! load secteur
        stb     <$6080  ! clear sema.
        bcs     exit    ! erreur?
        jmp     $6300   ! sinon jsr
exit    jmp     [$001E] ! boot normal 
Pendant que j'y suis, je me demande si je ne devrais pas tester le flag de densité à $FF (==simple densité) et sinon (ce qui inclue le cas $55 du SD-Drive) le considérer comme haute densité...
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 15628
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Oui, ça marcherait en testant $FF pour la simple densité et différent de $FF pour la double densité. Et la modification du bootloader sera plus propre que mon horrible patch. J'ai déjà ajouté le fichier .sd au site dcmoto, mais je le remplacerai si tu fais une nouvelle version.

Pour répondre à la question d'hier, la simple densité est utilisée uniquement par les collectionneurs qui veulent tester leurs vénérables lecteurs UD90-070. J'en fais partie, j'ai remis en état un contrôleur et un lecteur, j'ai réussi à lancer une disquette DOS, puis j'ai soigneusement rangé le tout.
Il n'y a que deux ou trois jeux Thomson (minables) sur disquette simple densité, dont l'inoubliable Roger et Paulo. Aucun utilisateur Thomson ne se formalisera si la simple densité n'est pas supportée par les démonstrations modernes. SDDRIVE ne l'émule pas.

d1.jpg
d1.jpg (38.31 Kio) Consulté 6264 fois
Daniel
L'obstacle augmente mon ardeur.
Répondre