[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 : Papy.G, fneck, Carl

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

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

__sam__ a écrit : 05 févr. 2021 14:49 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é...
Ca y est.. c'est fait.

Code : Tout sélectionner

* transfert des donnees
transf ldb    $6058   ; densite
       comb
       beq    lodens
       ldb    #255
lodens orb    #128
tfr0   clra           ; C=0
       lda    ,x+

       puls   y
       bsr    yield
       pshs   y
       
       decb       
       bne    tfr0
       rts
Est-ce que cette version fonctionne chez tous ?
Pièces jointes
hny2013.zip
(116.88 Kio) Téléchargé 83 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 : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Essayé avec dcmoto et le vrai TO7/70, tout fonctionne bien.
Le site dcmoto vient d'être mis à jour avec la nouvelle version.
Daniel
L'obstacle augmente mon ardeur.
jasz
Messages : 1256
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [DCMOTO/MESS] Freeze HNY2013

Message par jasz »

C'est impressionnant de constater qu'un petit programme comme celui-ci peut poser de grandes difficultés dans la conversion vers un média plus contemporain. :shock:
__sam__
Messages : 6798
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Je dirais que l'essentiel vient du fait que la ré-écriture de la ROM du contrôleur disk ne se comporte pas à l'identique (bug compris) du contrôleur originel avec lequel la démo a été écrite et sur lequel elle marche bien. Cette histoire nous a permis d'en apprendre plus sur le fonctionnement du contrôleur thomson, et de voir que lui aussi n'est pas exempt de bug (car laisser des trucs trainer ou pas sur la pile en fonction du chemin d'execution en est manifestement un).
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 : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Pour ce décalage de la pile, le contrôleur SDDRIVE aurait pu facilement être modifié pour avoir le même comportement que le contrôleur Thomson.

Mais il y avait deux bonnes raisons de ne pas le faire :
1) Ce n'est pas parce que Thomson a fait un truc louche qu'il faut reproduire la même bizarrerie.
2) Je cherche a maintenir la compatibilité de toutes les versions de SDDRIVE, pour ne pas imposer aux utilisateurs la mise à jour du firmware et aux développeurs la modifications de leurs anciens programmes.

Les mises à jour successives du schéma du contrôleur et du logiciel de l'EPROM apportent quelques petites améliorations, mais les premières versions de 2018 restent toujours opérationnelles aujourd'hui.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6798
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Ca serait bien d'avoir le retour de cosmos99 sur cette solution, mais pour moi clairement la solution actuelle (fixer le code source de la démo) est la meilleure. Par contre je me rends compte que le loader est potentiellement utilisé dans d'autres démo que j'ai faites, mais comme c'est du copié/collé de code, je ne saurait dire précisément lesquelles. Il faudra attendre que les (rares) utilisateurs décident de les convertir en SD et observent, puis rapportent des "trucs bizarres".
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
jasz
Messages : 1256
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [DCMOTO/MESS] Freeze HNY2013

Message par jasz »

Mais c'est tout de même surprenant cette complexité dans l'interprétation du comportement d'une routine du moniteur. :o
Le mieux c'est de les éviter et de tout faire en machine ;)
__sam__
Messages : 6798
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

jasz a écrit : 06 févr. 2021 17:37 Mais c'est tout de même surprenant cette complexité dans l'interprétation du comportement d'une routine du moniteur. :o
C'est parce que tout dépends de tout et inversement :)

Mais il faut noter que finalement on a pas spécialement tourné en rond autour de 36 hypothèses dans tous les sens. L'approche a été très rigoureuse, scientifique même avec analyse de ce qu'on observe, comparaison entre la théorie et la pratique, remontée systématique à la cause primitive des divergences observées, au final on a réussi à comprendre et corriger complètement le problème. Je trouve qu'on a été assez efficace.
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 : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Il faut ajouter qu'à la date de création du programme en 2012 il n'était pas possible de prévoir les incompatibilités avec le contrôleur SDDRIVE puisqu'il n'existait pas. Le premier exemplaire date de 2018. Aujourd'hui tous les nouveaux programmes fonctionnent avec SDDRIVE car beaucoup de développeurs l'utilisent. Sinon je modifie l'application pour assurer la compatibilité.

Notez quand même que le blocage lors de l'appui sur une touche existait depuis le début en version disquette et que personne ne l'a signalé avant cosmos99. Les utilisateurs sont d'affreux consommateurs, si ça marche tant mieux, si ça ne marche pas ils ne cherchent pas à comprendre et passent à autre chose. Ils ont omis de signaler le bug, ou ils n'ont jamais exécuté la démonstration avec un TO7/70. On ne saura jamais laquelle des deux affirmations est vraie.

Le bilan de l'opération est globalement très positif : il nous a fait réfléchir, il a permis de découvrir le décalage de la pile dans la routine dkboot des contrôleurs Thomson, et surtout il nous a fait redécouvrir le petit chef d’œuvre de __sam__. La qualité de l'algorithme de simulation de la neige m'impressionne à chaque exécution.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6798
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Bah pour le freeze de la demo TO7/70, il faut déjà avoir un TO7/70 avec un lecteur externe. Ca ne court pas les rues.

Avec SDDrive par contre, la donne est différente mais je pense que dans l'esprit des gens, il est impossible de faire des (belles?) démos sur TO7/70 parce que cette machine est associée aux soft bien nuls de l'éducation nationale écrits en basic qu'il fallait se coltiner à l'école...

...sauf que la plupart des intros-1k et démos de PULS marchent aussi sur TO7/70 & TO9 (et même certaines MO5 aussi, avec le même binaire) car je n'ai connu le TO8 que très tardivement et m'appuie essentiellement sur les connaissances ASM que j'ai appris sur TO9 (très similaire au TO7/70). Alors c'est moins joli (quoi que), mais ca doit marcher sur le plus de machines en principe:
  1. Oh la belle bleue
  2. TOale
  3. 2049 bits
  4. HNY 2013
  5. Elvis lives (encore que là je soupçonne le même bug du bootloader)
  6. Rock Fort
  7. PiMiTV
  8. TopOPop
  9. When rings becomes Pumpkins
  10. ThomCAT
  11. PIrat
  12. Defender of the 1bit
  13. So we just BUZZ
  14. In the Shadow of the 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 : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Confirmation : Elvis Live en version .sd ne démarre pas avec le TO8 (cadre rouge clignotant).

elvis_live.jpg
elvis_live.jpg (52.85 Kio) Consulté 5411 fois


@__sam__ : Je propose, si tu es d'accord, de créer une page du site dcmoto pour ces petites démos, avec une version .sd fonctionnelle.
La version .sap ou .fd n'incite pas trop les utilisateurs à tester avec la vraie machine, car il faut créer une disquette et ils n'ont pas toujours le matériel pour le faire, ou ils ne savent pas, ou ils n'ont pas le courage. La version .sd est plus pratique.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6798
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Oui c'est une bonne idée, car même si certaines sont dispo au format K7, je pense aussi que personne ne fait la manip de les convertir en SDLEP ou WAV pour faire marcher sur la vraie machine.

Je pense que pour Elvis-lives, le mieux est de remplacer "LDB <$58" par "LDB #$00" pour le SD dans le bootloader.
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 : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Pour faire la version .sd d'elvisliv j'ai trouvé et remplacé deux tests de la densité. Le diaporama commence bien, mais se plante vers la fin. Je n'ai pas encore trouvé pourquoi.
elvisliv-modifie_to8sd.zip
(304.69 Kio) Téléchargé 124 fois

elvisliv.png
elvisliv.png (14.28 Kio) Consulté 5394 fois
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 6798
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [DCMOTO/MESS] Freeze HNY2013

Message par __sam__ »

Code source (compilé il y a 7 ans)

Code : Tout sélectionner

/*--------------------------------------------------------------*
 * Compilé avec C6809 v0.83                                     *
 *--------------------------------------------------------------*
 * Fichier source      : elvisliv.ass
 * Fichier destination : ELVISLIV.BIN
 * Contenu :
 *     Main     0:ELVISLIV.ASM 3270
 *     Include  0:INTRO.ASM    3224
 *     Include  0:DISK.ASM     4279
 *     Include  0:EXO.ASM      3291
 *--------------------------------------------------------------*/

Macro Pass
Pass1
Pass2
      2                           ***************************************
      3                           * Compo pour la ForEver Party 14
      4                           * Theme: Elvis Lives!
      5                           *
      6                           * Idee: slide show
      7                           * Categorie: demo
      8                           * Auteur: Samuel Devulder, Mars 2013
      9                           ***************************************
     10                            
     11        9700                      org    $9700
     12                            
     13                  0000     DBGD7  set    0
     14                  0000     DBGEXO set    0
     15
     16                           ***************************************
     17                           * boucle:
     18                           *      REPEAT
     19                           *      ....
     20                           *      WHILE  condition
     21                           ***************************************
     22                           REPEAT macro
     23                           loop   set    *
     24                                  endm
     25                           WHILE  macro
     26                                  b\0    loop
     27                                  endm
     28                            
     29                           ***************************************
     30                           * variable dans code auto-modifiable
     31                           *
     32                           *      VAR1   opcode,val,label ;8 bits
     33                           *      VAR2   opcode,val,label ;16 bits
     34                           ***************************************
     35                           VAR1   macro
     36                                  \0     \1
     37                           \2     set    *-1
     38                                  endm
     39                           VAR2   macro
     40                                  \0     \1
     41                           \2     set    *-2
     42                                  endm
     43
     44                  6027     TIMEPT equ    $6027
     45                  6019     STATUS equ    $6019
     46
     47                           ***************************************
     48                           * Alignement sur une page
     49                           ***************************************
     50                           DPALGN macro
     51                           ALIGNX set    *-ALIGNX
     52                                  ifne    \0
     53                                  org    ((\0+255)<-8<8)+(*-\0)
     54                                  else
     55                                  org    (*+255)<-8<8
     56                                  endc
     57                           ALIGNX set    *-ALIGNX
     58                                  endm
     59                  0000     ALIGNX set    0
     60                            
     61                            
(62) Unused Symbol
     62        9700               INI
     63  4+1   9700 32   8C FC    ini    leas   *-1,pcr
     64  8     9703 BD   97AD            jsr    initmr
     65  8     9706 BD   9800            jsr    intro
     66  8     9709 BD   970E     lp     jsr    alldrv
     67  3     970C 20   FB              bra    lp
     68                           **************************************
     69                           * Scan tous les lecteur et appelle
     70                           * allcat
     71                           **************************************
     72                  60              setdp  $60
     73  5+3   970E 34   0E       alldrv pshs   dp,d
     74  3     9710 CC   0060            ldd    #$60
     75  6     9713 1F   9B              tfr    b,dp
     23                  9715     loop   set    *
     77  4     9715 97   49              sta    <DKDRV
     78  6     9717 0F   EE              clr    <DKFAT+1
     79  6     9719 0F   EA              clr    <DKCAT+1
     80  2     971B C6   10              ldb    #$10     ; et pas 10
     81  4     971D D7   48              stb    <DKOPC
     82  8     971F BD   E004            jsr    DKCOM
     83  2     9722 C6   01              ldb    #1
     84  4     9724 D7   48              stb    <DKOPC
     85  8     9726 BD   E004            jsr    DKCOM
     86  3     9729 25   0D              bcs    nxtdrv
     87  6     972B 0F   EE              clr    <DKFAT+1
     88  6     972D 0F   EA              clr    <DKCAT+1
     89  2     972F C6   10              ldb    #$10
     90  4     9731 D7   48              stb    <DKOPC
     91  8     9733 BD   E004            jsr    DKCOM
     92  7     9736 8D   07              bsr    allcat
     93  2     9738 4C            nxtdrv inca
     94  2     9739 81   04              cmpa   #4
     26  3     973B 26   D8              bne    loop
     96  5+5   973D 35   8E              puls   dp,d,pc
     97                           ***************************************
     98                           * Appelle "affiche" sur tous les
     99                           * fichiers du catalogue du disk
    100                           * courant.
    101                           ***************************************
    102  5+4   973F 34   16       allcat pshs   d,x
    103  2     9741 86   03              lda    #3
     23                  9743     loop   set    *
    105  4     9743 97   4C              sta    <DKSEC
    106  3     9745 8E   0014            ldx    #20
    107  5     9748 9F   4A              stx    <DKTRK
    108  3     974A 8E   9E90            ldx    #iocat
    109  5     974D 9F   4F              stx    <DKBUF
    110  2     974F C6   02              ldb    #2
    111  4     9751 D7   48              stb    <DKOPC
    112  8     9753 BD   E004            jsr    DKCOM
    113  3     9756 25   53              bcs    endcat
    114  4+0   9758 E6   84       allfil ldb    ,x
    115  3     975A 27   42              beq    nxtfil
    116  2     975C C1   FF              cmpb   #-1
    117  3     975E 27   4B              beq    endcat
    118  4+1   9760 E6   08              ldb    8,x
    119  2     9762 C4   DF              andb   #255-32  ; toupper
    120  2     9764 C1   58              cmpb   #$58     ; X
    121  3     9766 26   36              bne    nxtfil
    122  4+1   9768 E6   09              ldb    9,x
    123  2     976A C4   DF              andb   #255-32  ; toupper
    124  2     976C C1   4D              cmpb   #$4D     ; M
    125  3     976E 26   2E              bne    nxtfil
    126  4+1   9770 E6   0A              ldb    10,x
    127  2     9772 C4   DF              andb   #255-32  ; toupper
    128  2     9774 C1   50              cmpb   #$50     ; P
    129  3     9776 26   26              bne    nxtfil
(130) Unused Symbol
    130  5+1   9778 34   02       CALL   pshs   a
    131  2     977A 4F                   clra
    132  2     977B 5F                   clrb
    133  6     977C FD   97D2            std    timer   ; timer=0
    134  8     977F BD   98F5            jsr    affiche
    135
    136                           * attente
    137  8     9782 BD   E806     wait   jsr    $E806
    138  3     9785 24   0C              bcc    notkbd
    139  2     9787 C1   03              cmpb   #3
    140  3     9789 26   04              bne    notbrk
    141  3+3   978B 6E   9F FFFE         jmp    [$FFFE]
    142  2     978F C1   20       notbrk cmpb   #32
    143  3     9791 27   09              beq    timout
    144  6     9793 FC   97D2     notkbd ldd    timer
    145  5     9796 1083 0096            cmpd   #150  ; 15 secs
    146  3     979A 25   E6              blo    wait
    147  5+1   979C 35   02       timout puls   a
    148  4+1   979E 30   88 20    nxtfil leax   32,x
    149  4     97A1 8C   9F90            cmpx   #iocat+256
    150  3     97A4 26   B2              bne    allfil
    151  2     97A6 4C                   inca
    152  2     97A7 81   11              cmpa   #17
     26  3     97A9 26   98              bNE    loop
    154  5+6   97AB 35   96       endcat puls   d,x,pc
    155
    156                           **************************************
    157                           * interruption timer
    158                  E7C5     TCR    equ    $E7C5  ; reg cont timer
    159                  E7C6     TMSB   equ    $E7C6  ; compteur timer
    160  3     97AD CC   97C6     initmr ldd    #tmrint
    161  5     97B0 DD   27              std    TIMEPT
    162  4     97B2 96   19              lda    STATUS
    163  2     97B4 8A   20              ora    #32
    164  4     97B6 97   19              sta    STATUS
    165  3     97B8 CC   30D3            ldd    #12499   ; init timer
    166  6     97BB FD   E7C6            std    TMSB
    167  2     97BE 86   46              lda    #$46
    168  5     97C0 B7   E7C5            sta    TCR
    169  2     97C3 1C   AF              andcc  #255-$50
    170  5     97C5 39                   rts
    171  6     97C6 FC   97D2     tmrint ldd    timer
    172  4     97C9 C3   0001            addd   #1
    173  6     97CC FD   97D2            std    timer
    174  4     97CF 7E   E830            jmp    $E830
    175        97D2 0000          timer  fdb    0
    176                  00              setdp  0
    177                            
    194                                  includ INTRO
     51                  97D4     ALIGNX set    *-ALIGNX
     52                                  ifne    0
     53                                  org    ((0+255)<-8<8)+(*-0)
     54                                  else
     55        9800                      org    (*+255)<-8<8
     56                                  endc
     57                  002C     ALIGNX set    *-ALIGNX
    196                           ***************************************
    197                           * Intro
    198                           ***************************************
    199  3     9800 8E   9833     intro  ldx    #intdat  ; ecran noir
     23                  9803     loop   set    *
    201  4+2   9803 E6   80              ldb    ,x+
    202  8     9805 BD   E803            jsr    $E803
     26  3     9808 26   F9              bne    loop
    204  7     980A 7F   6049            clr    DKDRV   ; drive 0
    205  2     980D C6   30              ldb    #48      ; charge les intro>>
    206  4+1   980F E7   04              stb    4,x
    207  8     9811 BD   99A5            jsr    d7open
    208  3     9814 CE   9F90            ldu    #RAMA
    209  8     9817 BD   9B00            jsr    decomp
    210  2     981A 5C                   incb
    211  4+1   981B E7   04              stb    4,x
    212  8     981D BD   99A5            jsr    d7open
    213  3     9820 CE   BED0            ldu    #RAMB
    214  8     9823 BD   9B00            jsr    decomp
    215                            
    216  3     9826 CE   9F90            ldu    #RAMA
    217  8     9829 BD   984C            jsr    appear
    218  3     982C CE   BED0            ldu    #RAMB
    219  8     982F BD   984C            jsr    appear
    220  5     9832 39                   rts
    221        9833 1B 40         intdat fcb    $1B,$40  ; forme=7
    222        9835 1B 50                fcb    $1B,$50  ; fond=0
    223        9837 1B 60                fcb    $1B,$60  ; tour=0
    224        9839 14                   fcb    $14      ; curseur off
    225        983A 0C                   fcb    $c       ; cls
    226        983B 1B 47                fcb    $1B,$47  ; forme=7
    227        983D 0C                   fcb    $c
    228        983E 1B 68                fcb    $1B,$68  ; ecriture forme s>>
    229        9840 00                   fcb    0
    230        9841 49 4E 54 52          fcc    /INTRO   XXX/
               9845 4F 20 20 20
               9849 58 58 58
    231                           ***************************************
    232                           * fait apparaitre progressivement
    233                           * l'image point<E9>e par U dans la ram
    234                           * video
    235                           ***************************************
    236  2     984C 86   3F       appear lda   #63
     23                  984E     loop   set    *
    238  7     984E 8D   6D              bsr    dith
    239  7     9850 8D   1D              bsr    disp
    240  2     9852 4A                   deca
     26  3     9853 2C   F9              bge    loop
    242  5+3   9855 34   14              pshs   x,b    ; pause
    243  2     9857 C6   04              ldb    #4
    244  3     9859 8E   0000            ldx    #0
     23                  985C     loop   set    *
    246  4+1   985C 30   1F              leax   -1,x
     26  3     985E 26   FC              bne    loop
    248  2     9860 5A                   decb
     26  3     9861 26   F9              bne    loop
    250  5+3   9863 35   14              puls   x,b
    251  2     9865 86   3F              lda    #63
     23                  9867     loop   set    *
    253  7     9867 8D   54              bsr    dith
    254  7     9869 8D   04              bsr    disp
    255  2     986B 4A                   deca
     26  3     986C 2C   F9              bge    loop
    257  5     986E 39                   rts
    258
    259  5+8   986F 34   76       disp   pshs   d,x,y,u
    260  2     9871 C6   07              ldb    #7
    261  5     9873 F0   98E9            subb   dith3a+1
    262  3     9876 8E   98B5            ldx    #mask
    263  3     9879 3A                   abx
    264  2     987A 86   28              lda    #40
    265  11    987C 3D                   mul
    266  4+4   987D 33   CB              leau   d,u
    267  2     987F 8B   40              adda   #$40
    268  6     9881 1F   02              tfr    d,y
    269  4+0   9883 A6   84              lda    ,x
    270  5     9885 B7   9896            sta    disp5+3
    271  5     9888 B7   9898            sta    disp5+5
    272  4+1   988B 30   A8 28           leax   40,y
    273  6     988E BF   989C            stx    disp6+1
    274  4+0   9891 30   A4              leax   ,y
    275  5+2   9893 37   06       disp5  pulu   d
    276  2     9895 84   00              anda   #0
    277  2     9897 C4   00              andb   #0
    278  5+3   9899 ED   81              std    ,x++
    279  4     989B 8C   0000     disp6  cmpx   #0
    280  3     989E 26   F3              bne    disp5
    281  4+4   98A0 33   C9 0118         leau   40*7,u
    282  4+4   98A4 30   89 0140         leax   40*8,x
    283  6     98A8 BF   989C            stx    disp6+1
    284  4+1   98AB 30   88 D8           leax   -40,x
    285  4     98AE 8C   5F40            cmpx   #$5F40
    286  3     98B1 23   E0              bls    disp5
    287  5+10  98B3 35   F6              puls   d,x,y,u,pc
    288
    289        98B5 00 00 00 00   mask   fcb    0,0,0,0,0,0,0,0
               98B9 00 00 00 00
    290
    291  5+6   98BD 34   56       dith   pshs   d,x,u
    292  3     98BF 8E   98E9            ldx    #dith3a+1
    293  3     98C2 CE   98B5            ldu    #mask
    294  2     98C5 5F                   clrb
    295  2     98C6 48                   lsla
    296  2     98C7 84   AA              anda   #$AA
    297  4+0   98C9 A8   E4              eora   ,s
    298  2     98CB 44                   lsra
    299  2     98CC 59                   rolb
    300  6+0   98CD 6F   84              clr    ,x
    301  2     98CF 44                   lsra
    302  6+0   98D0 69   84              rol    ,x
    303  2     98D2 44                   lsra
    304  2     98D3 59                   rolb
    305  2     98D4 44                   lsra
    306  6+0   98D5 69   84              rol    ,x
    307  2     98D7 44                   lsra
    308  2     98D8 59                   rolb
    309  2     98D9 44                   lsra
    310  6+0   98DA 69   84              rol    ,x
    311  6+1   98DC 6F   04              clr    4,x
    312  2     98DE 43                   coma
    313  6+1   98DF 69   04       dith2  rol    4,x
    314  2     98E1 5A                   decb
    315  3     98E2 2C   FB              bge    dith2
    316  2     98E4 C6   07              ldb    #7
    317  4+0   98E6 A6   C4       dith3  lda    ,u
    318  2     98E8 C1   00       dith3a cmpb   #00
    319  3     98EA 26   02              bne    dith4
    320  2     98EC 88   01              eora   #1
    321  4+2   98EE A7   C0       dith4  sta    ,u+
    322  2     98F0 5A                   decb
    323  3     98F1 2C   F3              bge    dith3
    324  5+8   98F3 35   D6              puls   d,x,u,pc
    325                           ***************************************
    326                           * Affiche le fichier pointe par X
    327                           ***************************************
    328        98F5               affiche
    329  5+8   98F5 34   76              pshs   d,x,y,u
    330                            
    331  8     98F7 BD   99A5            jsr    d7open
    332                            
    333  3     98FA CE   9F90            ldu    #RAMA
    334  8     98FD BD   9B00            jsr    decomp
    335  3     9900 CE   BED0            ldu    #RAMB
    336  8     9903 BD   9B00            jsr    decomp
    337                            
    338  5     9906 B6   E7C3            lda    $E7C3
    339  2     9909 8A   01              ora    #1
    340  5     990B B7   E7C3            sta    $E7C3
    341                            
    342  3     990E 8E   0000            ldx    #$0000
     23                  9911     loop   set    *
    344  7     9911 8D   1C              bsr    cpyline
    345  4+4   9913 30   89 0140         leax   8*40,x
    346  4     9917 8C   1F40            cmpx   #$1F40
     26  3     991A 25   F5              blo    loop
    348  4     991C 108E 03E8            ldy    #1000
    349  4+1   9920 31   3F              leay   -1,y
    350  3     9922 26   FC              bne    *-2
    351  4+4   9924 30   89 E0E8         leax   -(200-1)*40,x
    352  4     9928 8C   0140            cmpx   #8*40
     26  3     992B 26   E4              bne    loop
    354                            
    355  5+10  992D 35   F6              puls   d,x,y,u,pc
    356
    357        992F               cpyline
    358  5+10  992F 34   7F              pshs   dp,d,x,y,u,cc
    359  2     9931 1A   50              orcc   #$50
    360                  99              setdp  cpylin<-8
    361  2     9933 C6   99              ldb    #cpylin<-8
    362  6     9935 1F   9B              tfr    b,dp
    363  4+4   9937 33   89 9F90         leau   RAMA,x
    364  4+4   993B 30   89 4000         leax   $4000,x
    365  7     993F 8D   0E              bsr    cpylin
    366  4+4   9941 33   C9 1F40         leau   RAMB-RAMA,u
    367  7     9945 7A   E7C3            dec    $E7C3
    368  7     9948 8D   05              bsr    cpylin
    369  7     994A 7C   E7C3            inc    $E7C3
    370  5+12  994D 35   FF              puls   dp,d,x,y,u,cc,pc
    371  5+4   994F 34   50       cpylin pshs   x,u
    372  6     9951 10DF A1              sts    <BAKSP
    373  5     9954 9F   5B              stx    <VIDPTR1
    374                            
    375                           *       clrb
    376                           *       decb
    377                           *       bne   *-1
    378
    379  5+8   9956 37   76              pulu   d,x,y,s
    380  5     9958 DF   64              stu    <RAMPTR1
     40  3     995A CE   0000            ldu     #0
     41                  995B     VIDPTR1     set    *-2
    382  4+1   995D 33   48              leau   8,u
    383  5     995F DF   6B              stu    <VIDPTR2
    384  5+8   9961 36   76              pshu   d,x,y,s
    385                            
     40  3     9963 CE   0000            ldu     #0
     41                  9964     RAMPTR1     set    *-2
    387  5+8   9966 37   76              pulu   d,x,y,s
    388  5     9968 DF   74              stu    <RAMPTR2
     40  3     996A CE   0000            ldu     #0
     41                  996B     VIDPTR2     set    *-2
    390  4+1   996D 33   48              leau   8,u
    391  5     996F DF   7B              stu    <VIDPTR3
    392  5+8   9971 36   76              pshu   d,x,y,s
    393                            
     40  3     9973 CE   0000            ldu     #0
     41                  9974     RAMPTR2     set    *-2
    395  5+8   9976 37   76              pulu   d,x,y,s
    396  5     9978 DF   84              stu    <RAMPTR3
     40  3     997A CE   0000            ldu     #0
     41                  997B     VIDPTR3     set    *-2
    398  4+1   997D 33   48              leau   8,u
    399  5     997F DF   8B              stu    <VIDPTR4
    400  5+8   9981 36   76              pshu   d,x,y,s
    401                            
     40  3     9983 CE   0000            ldu     #0
     41                  9984     RAMPTR3     set    *-2
    403  5+8   9986 37   76              pulu   d,x,y,s
    404  5     9988 DF   94              stu    <RAMPTR4
     40  3     998A CE   0000            ldu     #0
     41                  998B     VIDPTR4     set    *-2
    406  4+1   998D 33   48              leau   8,u
    407  5     998F DF   99              stu    <VIDPTR5
    408  5+8   9991 36   76              pshu   d,x,y,s
    409                            
     40  3     9993 CE   0000            ldu     #0
     41                  9994     RAMPTR4     set    *-2
    411  5+8   9996 37   76              pulu   d,x,y,s
     40  3     9998 CE   0000            ldu     #0
     41                  9999     VIDPTR5     set    *-2
    413  4+1   999B 33   48              leau   8,u
    414  5+8   999D 36   76              pshu   d,x,y,s
    415
     40  4     999F 10CE 0000            lds     #0
     41                  99A1     BAKSP     set    *-2
    417  5+6   99A3 35   D0              puls   x,u,pc
    418                  00              setdp 0
    419                                  includ DISK
    420                  6048     DKOPC  equ    $6048   ;operation d7
    421                  6049     DKDRV  equ    $6049   ;lecteur
    422                  604A     DKTRK  equ    $604A   ;piste (2 ocets)
    423                  604B     DKTRKL equ    DKTRK+1
    424                  604C     DKSEC  equ    $604C   ;secteur
    425                  604E     DKSTA  equ    $604E   ;status d7
    426                  604F     DKBUF  equ    $604F   ;buf i/o
    427                  60E9     DKCAT  equ    $60E9   ;prt catalogue
    428                  60E7     DKNAM  equ    $60E7   ;nom fichier
    429                  60EB     DKTYP  equ    $60EB   ;type fichier (2oct>>
    430                  60ED     DKFAT  equ    $60ED   ;ptr fat
    431                  60F0     DKMOD  equ    $60F0   ;mode d'acces
    432                  60F3     DKFIN  equ    $60F3   ;dernier bloc
    433                  60F6     DKBLK  equ    $60F6   ;1er bloc fichier
    434                  60F7     DKTDS  equ    $60F7   ;nb octets dern sec>>
    435                  60F9     DKIFA  equ    $60F9   ;secteur fat fichie>>
    436                  E00D     LECFA  equ    $E00D   ;lecture fat
    437                  E010     RECFI  equ    $E010   ;recherche fichier
    438                  E01F     CONVB  equ    $E01F   ;converison bloc
    439                  E004     DKCOM  equ    $E004   ;$E82A   ;commande >>
    440
    441                           **************************************
    442                           * Ouverture d'un fichier D7
    443                           * U = nom fichier (1+8+3)
    444                           * Sortie: Z=0 si erreur
    445                           **************************************
    446                  60              setdp  $60
    447  5+5   99A5 34   1E       d7open pshs   d,x,dp
    448  7     99A7 8D   2C              bsr    page0
    449
    450                           *       ldb    ,x+     ; lecteur
    451                           *       subb   #'0
    452                           *       stb    <DKDRV
    453  5     99A9 9F   E7              stx    <DKNAM  ; nom
    454
    455  3     99AB CC   9C90            ldd    #iofat  ; fat
    456  5     99AE DD   ED              std    <DKFAT
    457  2     99B0 4C                   inca           ; iocat
    458  5     99B1 DD   E9              std    <DKCAT
    459
    460  3     99B3 CC   0200            ldd    #$0200
    461  5     99B6 DD   EB              std    <DKTYP  ; binaire
    462  4     99B8 D7   4E              stb    <DKSTA  ; clr err
    463                           * recherche fat
    464  8     99BA BD   E00D            jsr    LECFA
    465  8     99BD BD   9A41            jsr    d7chk
    466
    467                           * recherche fichier
    468  2     99C0 86   01              lda    #1
    469  4     99C2 97   F0              sta    <DKMOD  ; acces lecture
    470  8     99C4 BD   E010            jsr    RECFI   ; rech. fichier
    471  4     99C7 D6   F9              ldb    <DKIFA
    472  2     99C9 C0   01              subb   #1      ; C=1 si 60F9=0
    473  7     99CB 8D   74              bsr    d7chk
    474                            
    475  3     99CD CC   9A49            ldd    #load0
    476  6     99D0 FD   9A47            std    d7redir
    477  5+7   99D3 35   9E              puls   d,x,dp,pc
    478  2     99D5 C6   60       page0  ldb    #$60
    479  6     99D7 1F   9B              tfr    b,dp
    480  5     99D9 39                   rts
    481                           ***************************************
    482                           * Fait clignoter le tour en attente
    483                           * de ctrl-c.
    484                           ***************************************
    485  7     99DA 8D   F9       guru   bsr    page0
    486  3     99DC CE   E803            ldu    #$E803  ; affiche
    487  3     99DF 8E   9AC1            ldx    #errtxt ; guru meditation
    488  7     99E2 8D   40              bsr    puts
    489  4     99E4 96   4E              lda    <DKSTA
    490  7     99E6 8D   43              bsr    putx
    491  7     99E8 8D   3A              bsr    puts
    492  4+0   99EA A6   E4              lda    ,s
    493  7     99EC 8D   3D              bsr    putx
    494  4+1   99EE A6   61              lda    1,s
    495  7     99F0 8D   39              bsr    putx
    496  4     99F2 D6   49              ldb    <DKDRV
    497  4+1   99F4 EB   01              addb   1,x
    498  4+1   99F6 E7   01              stb    1,x
    499  7     99F8 8D   2A              bsr    puts
    500  2     99FA 86   0B              lda    #11
    501  5     99FC 9E   E7              ldx    <DKNAM
     23                  99FE     loop   set    *
    503  4+2   99FE E6   80              ldb    ,x+
    504  7+0   9A00 AD   C4              jsr    ,u
    505  2     9A02 4A                   deca
     26  3     9A03 26   F9              bne    loop
    507  2     9A05 86   61              lda    #$61
    508  2     9A07 C6   1B       clign  ldb    #$1B
    509  7+0   9A09 AD   C4              jsr    ,u
    510  6     9A0B 1F   89              tfr    a,b
    511  2     9A0D 88   01              eora   #1
    512  7+0   9A0F AD   C4              jsr    ,u
    513  3     9A11 8E   07D0            ldx    #2000
     23                  9A14     loop   set    *
    515  7+1   9A14 AD   43              jsr    3,u
    516  2     9A16 C1   03              cmpb   #3
    517  3     9A18 27   06              beq    reset
    518  4+1   9A1A 30   1F              leax   -1,x
     26  3     9A1C 26   F6              bne    loop
    520  3     9A1E 20   E7              bra    clign
    521  3+3   9A20 6E   9F FFFE  reset  jmp    [$FFFE]
    522                  9A24     puts   set    *
     23                  9A24     loop   set    *
    524  4+2   9A24 E6   80              ldb    ,x+
    525  7+0   9A26 AD   C4              jsr    ,u
     26  3     9A28 26   FA              bne    loop
    527  5     9A2A 39                   rts
    528  4+2   9A2B A7   E2       putx   sta    ,-s
    529  2     9A2D 44                   lsra
    530  2     9A2E 44                   lsra
    531  2     9A2F 44                   lsra
    532  2     9A30 44                   lsra
    533  7     9A31 8D   04              bsr    hex
    534  2     9A33 86   0F              lda    #15
    535  4+2   9A35 A4   E0              anda   ,s+
    536  2     9A37 8B   90       hex    adda   #$90
    537  2     9A39 19                   daa
    538  2     9A3A 89   40              adca   #$40
    539  2     9A3C 19                   daa
    540  6     9A3D 1F   89              tfr    a,b
    541  3+0   9A3F 6E   C4              jmp    ,u
    542  3     9A41 25   97       d7chk  bcs    guru    ; erreur?
    543  5     9A43 39                   rts            ; non => retour
    544                           **************************************
    545                           * Lecture d'un bit
    546                           * Retour: C = 0 ou 1
    547                           *         Z = 0 si erreur
    548                           * (positionne ici pour avoir des
    549                           * sauts courts)
    550                           **************************************
    551                           * Tous les regs sont sauves car les
    552                           * differentes versions de rom
    553                           * n'ecrasent pas les memes regs.
    554  5+9   9A44 34   7D       d7read pshs   b,x,y,u,dp,cc
     40  4     9A46 7E   99DA            jmp     guru
     41                  9A47     d7redir     set    *-2
    556
    557                           * chargement 1er bloc
    558                           ** Que vaut A ?
    559                           * Convertit numero de bloc
    560  7     9A49 8D   8A       load0  bsr    page0
    561  8     9A4B BD   E01F            jsr    CONVB   ; convertit bloc
    562  4     9A4E D7   4B              stb    <DKTRKL ; init piste
    563  5     9A50 9E   ED              ldx    <DKFAT  ; ptr FAT
    564  4     9A52 D6   F6              ldb    <DKBLK  ; bloc courant
    565  2     9A54 5C                   incb           ;   bloc
    566  4+1   9A55 E6   85              ldb    b,x     ;   suivant
    567  4     9A57 D7   F6              stb    <DKBLK  ; sauve bloc
    568  2     9A59 C1   C0              cmpb   #$C0    ; si dernier bloc,
    569  3     9A5B 22   02              bhi    load1   ; recupere taille
    570  2     9A5D C6   08              ldb    #8      ; 8 sect a charger
    571  2     9A5F C4   0F       load1  andb   #15     ; isole taille bloc>>
    572  4     9A61 97   4C              sta    <DKSEC  ; sauv 1er bloc
    573  4     9A63 DB   4C              addb   <DKSEC  ; ajoute depart blo>>
    574  2     9A65 5A                   decb           ; ajuste dern bloc
    575  4     9A66 D7   F3              stb    <DKFIN  ; sauv dern bloc
    576                           * charge les secteurs
    577  8     9A68 BD   E004     load2  jsr    DKCOM
    578  7     9A6B 8D   D4              bsr    d7chk
    579  4     9A6D 96   4C              lda    <DKSEC  ; si sect pas
    580  4     9A6F 91   F3              cmpa   <DKFIN  ; secteur max,
    581  3     9A71 26   0A              bne    load3   ; passe
    582  4     9A73 96   F6              lda    <DKBLK  ; si dernier
    583  2     9A75 81   C0              cmpa   #$C0    ; secteur du
    584  3     9A77 22   0A              bhi    load4   ; fichier,sort
    585  7     9A79 8D   16              bsr    transf
    586  3     9A7B 20   CC              bra    load0
    587  7     9A7D 8D   12       load3  bsr    transf
    588  6     9A7F 0C   4C              inc    <DKSEC  ; secteur +1
    589  3     9A81 20   E5              bra    load2
    590                           * chargement dernier secteur et sortie
    591  5     9A83 DC   F7       load4  ldd    <DKTDS  ; taille dern sect
    592  3     9A85 27   02              beq    load5   ; si 0, sort
    593  7     9A87 8D   0D              bsr    tfr0
    594  3     9A89 8E   99DA     load5  ldx    #guru
    595  6     9A8C BF   9A47            stx    d7redir
    596  5+11  9A8F 35   FD              puls   b,x,y,u,dp,cc,pc
    597                           * transfert des donnees
    598  4     9A91 D6   58       transf ldb    $6058   ; densite
    599  2     9A93 53                   comb
    600  2     9A94 CA   80              orb    #$80
    601  5     9A96 9E   4F       tfr0   ldx    <DKBUF  ; ptr buf sect
    602  6     9A98 BF   9AB4            stx    tfrptr
    603  3     9A9B 3A                   abx
    604  6     9A9C BF   9AB7            stx    tfrmax
    605  5+2   9A9F 35   10              puls   x
    606  6     9AA1 BF   9ABF            stx    tfrrts
    607  3     9AA4 8E   9AB3            ldx    #tfr2
    608  6     9AA7 BF   9A47            stx    d7redir
    609  3+0   9AAA 6E   84              jmp    ,x
    610                  9AAC     tfr1   set    *
    611  4+2   9AAC A6   80              lda    ,x+
    612  6     9AAE BF   9AB4            stx    tfrptr
    613                            
    614                                  ifne   DBGD7
    615                                  pshs   d,u
    616                                  ldu    #$E803
    617                                  jsr    putx
    618                                  ldb    #32
    619                                  jsr    ,u
    620                                  VAR2   ldd,#0,CPT
    621                                  addd   #1
    622                                  std    CPT
    623                                  jsr    putx
    624                                  lda    CPT+1
    625                                  jsr    putx
    626                                  ldb    #32
    627                                  jsr    ,u
    628                                  puls   d,u
    629                                  endc
    630
    631  5+11  9AB1 35   FD              puls   b,x,y,u,dp,cc,pc
    632                  9AB3     tfr2   set    *
     40  3     9AB3 8E   0000            ldx     #0
     41                  9AB4     tfrptr     set    *-2
     40  4     9AB6 8C   0000            cmpx     #0
     41                  9AB7     tfrmax     set    *-2
    635  3     9AB9 26   F1              bne    tfr1
    636                           *       bls    tfr1
    637  8     9ABB BD   99D5            jsr    page0
     40  4     9ABE 7E   99DA            jmp     guru
     41                  9ABF     tfrrts     set    *-2
    639        9AC1 07            errtxt fcb    $7
    640        9AC2 1B 41                fcb    $1B,$41  ; forme=1
    641        9AC4 47 75 72 75          fcc    /Guru Meditation #/
               9AC8 20 4D 65 64
               9ACC 69 74 61 74
               9AD0 69 6F 6E 20
               9AD4 23
    642        9AD5 00                   fcb    0
    643        9AD6 20 24                fcc    / $/
    644        9AD8 00                   fcb    0
    645        9AD9 20 30 3A             fcc    / 0:/
    646        9ADC 00                   fcb    0
    647                  00              setdp  0
    648                                  includ EXO
    649                           * Values used in the switch (index)
    650        9ADD 04 02 04      tab1   fcb    4,2,4
    651        9AE0 10 30 20             fcb    16,48,32
    652
    653                                  ifne  DBGEXO
    654                           get4   pshs   d,u,cc
    655                                  ldu    #$E803
    656                                  jsr    putx
    657                                  lda    2,s
    658                                  jsr    putx
    659                                  ldb    #32
    660                                  jsr    ,u
    661                                  lda    bitbuf
    662                                  jsr    putx
    663                                  ldb    #32
    664                                  jsr    ,u
    665                                  puls   d,u,cc,pc
    666                                  endc
    667
     51                  9AB7     ALIGNX set    *-ALIGNX
     52                                  ifne    0
     53                                  org    ((0+255)<-8<8)+(*-0)
     54                                  else
     55        9B00                      org    (*+255)<-8<8
     56                                  endc
     57                  0049     ALIGNX set    *-ALIGNX
    669                           ***************************************
    670                           * Decompresse le fichier XMP dans
    671                           * la mémoire pointee par U
    672                           ***************************************
    673  5+9   9B00 34   7E       decomp pshs   d,u,x,y,dp
    674                  9B              setdp  *<-8
    675  2     9B02 C6   9B              ldb    #*<-8
    676  6     9B04 1F   9B              tfr    b,dp
    677
    678  3     9B06 CE   9BF4            ldu    #biba
    679                            
    680                           *       jsr    d7read
    681                           *       stb    <bitbuf
    682  2     9B09 5F                   clrb
    683  4     9B0A D7   B9              stb    <bitbuf
    684  2     9B0C 4F            nxt    clra
    685  5+2   9B0D 34   06              pshs   a,b
    686  2     9B0F C5   0F              bitb   #$0f
    687  3     9B11 26   03              bne    skp
    688  3     9B13 8E   0001            ldx    #1
    689  2     9B16 C6   04       skp    ldb    #4
    690  7     9B18 9D   B4              jsr    <getbits
    691  4+2   9B1A E7   C0              stb    ,u+
    692  2     9B1C 53                   comb
    693  6+0   9B1D 69   E4       roll   rol    ,s
    694  2     9B1F 49                   rola
    695  2     9B20 5C                   incb
    696  3     9B21 2B   FA              bmi    roll
    697  4+0   9B23 E6   E4              ldb    ,s
    698  5+3   9B25 AF   C1              stx    ,u++
    699  4+4   9B27 30   8B              leax   d,x
    700  5+2   9B29 35   06              puls   a,b
    701  2     9B2B 5C                   incb
    702  2     9B2C C1   34              cmpb   #52
    703  3     9B2E 26   DC              bne    nxt
    704
    705                           ***************************************
    706                           * decompression
    707                           ***************************************
(708)0:EXO.ASM Unused Symbol
    708  5+1   9B30 EE   67       go     ldu    7,s
    709  5     9B32 DF   D3              stu    <STARTu
    710  5     9B34 DF   E0              stu    <STARTx
    711  4+4   9B36 33   C9 1F40         leau   8000,u
    712  5     9B3A DF   9C              stu    <STOPx
    713  4+1   9B3C 33   C8 27           leau   39,u
    714  2     9B3F C6   01       mloop  ldb    #1
    715  7     9B41 9D   B4              jsr    <getbits
    716  3     9B43 26   15              bne    cpy
    717  4     9B45 D7   50              stb    <idx
    718        9B47 8C                   fcb    $8c
    719  6     9B48 0C   50       rbl    inc    <idx
    720  2     9B4A 5C                   incb
    721  7     9B4B 9D   B4              jsr    <getbits
    722  3     9B4D 27   F9              beq    rbl
    723
     36  2     9B4F C6   00              ldb     #0
     37                  9B50     idx     set    *-1
    725  2     9B51 C1   10              cmpb   #$10
    726  3     9B53 27   14              beq    fin
    727  3     9B55 25   14              blo    coffs
    728  2     9B57 5A                   decb
    729  7     9B58 9D   B4              jsr    <getbits
    730                           ***************************************
    731                           * Copy litteral
    732                           ***************************************
    733  6     9B5A 1F   02       cpy    tfr    d,y
    734  8     9B5C BD   9A44     cpyl   jsr    d7read
    735  7     9B5F 9D   CE              jsr    <dec_u
    736  4+0   9B61 A7   C4              sta    ,u
    737  4+1   9B63 31   3F              leay   -1,y
    738  3     9B65 26   F5              bne    cpyl
    739  3     9B67 20   D6              bra    mloop
    740  5+11  9B69 35   FE       fin    puls   d,u,x,y,dp,pc
    741                           ***************************************
    742                           * Compte length
    743                           ***************************************
    744  7     9B6B 9D   E9       coffs  jsr    <cook
    745  5+2   9B6D 34   06              pshs   d
    746  3     9B6F 8E   9ADD            ldx    #tab1
    747  5     9B72 1083 0003            cmpd   #$03
    748  3     9B76 24   01              bhs    scof
    749  3     9B78 3A                   abx
    750  7     9B79 9D   B2       scof   jsr    <getbix
    751  4+1   9B7B EB   03              addb   3,x
    752  7     9B7D 9D   E9              jsr    <cook
    753  5     9B7F DD   88              std    <offs
    754  5+2   9B81 35   20              puls   y
    755
    756                           ***************************************
    757                           * Copy non litteral
    758                           ***************************************
(759)0:EXO.ASM Unused Symbol
    759  7     9B83 9D   CE       cpy1   jsr    <dec_u
    760  4+0   9B85 30   C4              leax   ,u
     40  3     9B87 CC   0000            ldd     #0
     41                  9B88     offs     set    *-2
    762                           ***************************************
    763                           * X=X+D en mode colonne
    764                           ***************************************
     23                  9B8A     loop   set    *
    766  4+1   9B8A 30   01              leax   1,x
    767  4     9B8C 83   00C8            subd   #200
     26  3     9B8F 24   F9              bhs    loop
    769  4+1   9B91 30   1F              leax   -1,x
    770  4     9B93 C3   00C8            addd   #200
    771  2     9B96 86   28              lda    #40
    772  11    9B98 3D                   mul
    773  4+4   9B99 30   8B              leax   d,x
     40  4     9B9B 8C   0000            cmpx     #0
     41                  9B9C     STOPx     set    *-2
    775  3     9B9E 25   04              blo    cpy2
    776  4+4   9BA0 30   89 E0C1         leax   1-8000,x
    777  4+0   9BA4 A6   84       cpy2   lda    ,x
    778  4+0   9BA6 A7   C4              sta    ,u
    779  4+1   9BA8 31   3F              leay   -1,y
    780  3     9BAA 27   93              beq    mloop
    781  7     9BAC 9D   CE              jsr    <dec_u
    782  7     9BAE 9D   DC              jsr    <dec_x
    783  3     9BB0 20   F2              bra    cpy2
    784                           ***************************************
    785                           * getbits  : get 0 to 16 bits from
    786                           *            input stream
    787                           * Input    : B = bit count, U points
    788                           *            to input buffer
    789                           * Output   : D = bits
    790                           * Modifies : D.
    791                           ***************************************
    792  4+0   9BB2 E6   84       getbix ldb    ,x
    793        9BB4               getbits
    794  6+2   9BB4 6F   E2              clr    ,-s
    795  6+2   9BB6 6F   E2              clr    ,-s
     36  2     9BB8 86   00              lda     #0
     37                  9BB9     bitbuf     set    *-1
    797  3     9BBA 20   0A              bra    get3
    798  8     9BBC BD   9A44     get1   jsr    d7read
    799  2     9BBF 46            get2   rora
    800  3     9BC0 27   FA              beq    get1
    801  6+1   9BC2 69   61              rol    1,s
    802  6+0   9BC4 69   E4              rol    ,s
    803  2     9BC6 5A            get3   decb
    804  3     9BC7 2A   F6              bpl    get2
    805  4     9BC9 97   B9              sta    bitbuf
    806  5+3   9BCB EC   E1              ldd    ,s++
    807                                  ifne  DBGEXO
    808                                  jsr   get4
    809                                  endc
    810  5     9BCD 39                   rts
    811                           ***************************************
    812                           * U=U-1 en mode colonne
    813                           ***************************************
    814  4+1   9BCE 33   C8 D8    dec_u  leau   -40,u
     40  5     9BD1 1183 0000            cmpu     #0
     41                  9BD3     STARTu     set    *-2
    816  3     9BD5 24   04              bhs    dec_u1
    817  4+4   9BD7 33   C9 1F3F         leau   8000-1,u
    818  5     9BDB 39            dec_u1 rts
    819                           ***************************************
    820                           * X=X-1 en mode colonne
    821                           ***************************************
    822  4+1   9BDC 30   88 D8    dec_x  leax   -40,x
     40  4     9BDF 8C   0000            cmpx     #0
     41                  9BE0     STARTx     set    *-2
    824  3     9BE2 24   04              bhs    dec_x1
    825  4+4   9BE4 30   89 1F3F         leax   8000-1,x
    826  5     9BE8 39            dec_x1 rts
    827                           ***************************************
    828                           * cook     : computes base[index] + readb>>
    829                           * Input    : B = index
    830                           * Output   : D = base[index] + readbits(&>>
    831                           * Modifies : D,X.
    832                           ***************************************
    833  3     9BE9 8E   9BF4     cook   ldx    #biba
    834  3     9BEC 3A                   abx
    835  2     9BED 58                   aslb
    836  3     9BEE 3A                   abx
    837  7     9BEF 9D   B2              jsr    <getbix
    838  6+1   9BF1 E3   01              addd   1,x
    839  5     9BF3 39                   rts
    840                  00              setdp  0
    181                           **************************************
    182                           * buffers
    183                           **************************************
    184        9BF4               biba   rmb    156
    185        9C90               iofat  rmb    256     ; fat
(186) Unused Symbol
    186        9D90               iobuf  rmb    256     ; buffer io
    187        9E90               iocat  rmb    256     ; catalogue
    188
    189        9F90               RAMA   rmb    8000
    190        BED0               RAMB   rmb    8000
    191
(192) Unused Symbol
    192                  DE10     LAST   set    *
    193                  9700            end    ini

000006 Total Errors
           Unused Symbol      62 INI
           Unused Symbol     130 CALL   pshs   a
           Unused Symbol     186 iobuf  rmb    256     ; buffer io
           Unused Symbol     192 LAST   set    *
           Unused Symbol     708 go     ldu    7,s
           Unused Symbol     759 cpy1   jsr    <dec_u

000138 Total Symbols
     1x          Label 98F5 affiche
     4x          Set   0049 ALIGNX
     1x          Label 973F allcat
     1x          Label 970E alldrv
     1x          Label 9758 allfil
     2x          Label 984C appear
     1x          Set   99A1 BAKSP
     2x          Label 9BF4 biba
     2x          Set   9BB9 bitbuf
     0x          Label 9778 CALL
     1x          Label 9A07 clign
     1x          Label 9B6B coffs
     1x          Equ   E01F CONVB
     2x          Label 9BE9 cook
     1x          Label 9B5A cpy
     0x          Label 9B83 cpy1
     2x          Label 9BA4 cpy2
     1x          Label 9B5C cpyl
     4x          Label 994F cpylin
     1x          Label 992F cpyline
     3x          Label 9A41 d7chk
     3x          Label 99A5 d7open
     2x          Label 9A44 d7read
     3x          Set   9A47 d7redir
     1x          Set   0000 DBGD7
     2x          Set   0000 DBGEXO
     4x          Label 9B00 decomp
     3x          Label 9BCE dec_u
     1x          Label 9BDB dec_u1
     1x          Label 9BDC dec_x
     1x          Label 9BE8 dec_x1
     2x          Label 986F disp
     4x          Label 9893 disp5
     2x          Label 989B disp6
     2x          Label 98BD dith
     1x          Label 98DF dith2
     1x          Label 98E6 dith3
     2x          Label 98E8 dith3a
     1x          Label 98EE dith4
     3x          Equ   60F6 DKBLK
     2x          Equ   604F DKBUF
     3x          Equ   60E9 DKCAT
     5x          Equ   E004 DKCOM
     3x          Equ   6049 DKDRV
     4x          Equ   60ED DKFAT
     2x          Equ   60F3 DKFIN
     1x          Equ   60F9 DKIFA
     1x          Equ   60F0 DKMOD
     2x          Equ   60E7 DKNAM
     4x          Equ   6048 DKOPC
     5x          Equ   604C DKSEC
     2x          Equ   604E DKSTA
     1x          Equ   60F7 DKTDS
     2x          Equ   604A DKTRK
     1x          Equ   604B DKTRKL
     1x          Equ   60EB DKTYP
     2x          Macro 0005 DPALGN
     2x          Label 97AB endcat
     1x          Label 9AC1 errtxt
     1x          Label 9B69 fin
     1x          Label 9BBC get1
     1x          Label 9BBF get2
     1x          Label 9BC6 get3
     4x          Label 9BB4 getbits
     2x          Label 9BB2 getbix
     0x          Label 9B30 go
     4x          Label 99DA guru
     1x          Label 9A37 hex
     2x          Set   9B50 idx
     0x          Label 9700 INI
     1x          Label 9700 ini
     1x          Label 97AD initmr
     1x          Label 9833 intdat
     1x          Label 9800 intro
     0x          Label 9D90 iobuf
     2x          Label 9E90 iocat
     1x          Label 9C90 iofat
     0x          Set   DE10 LAST
     1x          Equ   E00D LECFA
     2x          Label 9A49 load0
     1x          Label 9A5F load1
     1x          Label 9A68 load2
     1x          Label 9A7D load3
     1x          Label 9A83 load4
     1x          Label 9A89 load5
    13x          Set   9B8A loop
     1x          Label 9709 lp
     2x          Label 98B5 mask
     2x          Label 9B3F mloop
     1x          Label 978F notbrk
     1x          Label 9793 notkbd
     1x          Label 9B0C nxt
     1x          Label 9738 nxtdrv
     4x          Label 979E nxtfil
     1x          Set   9B88 offs
     4x          Label 99D5 page0
     3x          Set   9A24 puts
     3x          Label 9A2B putx
     5x          Label 9F90 RAMA
     4x          Label BED0 RAMB
     1x          Set   9964 RAMPTR1
     1x          Set   9974 RAMPTR2
     1x          Set   9984 RAMPTR3
     1x          Set   9994 RAMPTR4
     1x          Label 9B48 rbl
     1x          Equ   E010 RECFI
    11x          Macro 0001 REPEAT
     1x          Label 9A20 reset
     1x          Label 9B1D roll
     1x          Label 9B79 scof
     1x          Label 9B16 skp
     1x          Set   9BD3 STARTu
     1x          Set   9BE0 STARTx
     2x          Equ   6019 STATUS
     1x          Set   9B9C STOPx
     1x          Label 9ADD tab1
     1x          Equ   E7C5 TCR
     1x          Label 9A96 tfr0
     1x          Set   9AAC tfr1
     1x          Set   9AB3 tfr2
     1x          Set   9AB7 tfrmax
     2x          Set   9AB4 tfrptr
     1x          Set   9ABF tfrrts
     1x          Equ   6027 TIMEPT
     4x          Label 97D2 timer
     1x          Label 979C timout
     1x          Label 97C6 tmrint
     1x          Equ   E7C6 TMSB
     2x          Label 9A91 transf
     2x          Macro 0003 VAR1
    18x          Macro 0004 VAR2
     1x          Set   995B VIDPTR1
     1x          Set   996B VIDPTR2
     1x          Set   997B VIDPTR3
     1x          Set   998B VIDPTR4
     1x          Set   9999 VIDPTR5
     1x          Label 9782 wait
    13x          Macro 0002 WHILE
Ca utilise le timer comme base de temps constant, le clavier, et la lecture sur disk. Tout ce qui a posé problème dans l'ancienne conversion :(

Bon, voyons les invariants du programmes... La detection d'erreur se fait systématiquement (*) avec un "jsr d7chk". Si C=1 on saute alors à la routine "guru" ($99DA) qui affiche un message d'erreur (hélas perturbé par les couleurs de l'image :( ), sinon on retourne à l'appellant. L'avantage de cette approche, est qu'on a sur la pile l'adresse qui suit le jsr, et donc on peut savoir d'où l'on vient. C'est fait pour faciliter le débugage.

Très bien, sauf que si je mets un point d'arret sur "guru", je me retrouve avec un SP=$96D3

Code : Tout sélectionner

96D3 88 00 9b bd 28 f2 d2 be 05 9b 5f 00 00 60 9f 10 
qui indique qu'on vient de $8800.. Sauf que le code se trouve de $9700 à $DE10. En $8800 il n'y a *rien*

Code : Tout sélectionner

87F1 FFFFFF     STU    $FFFF               6
87F4 FFFFFF     STU    $FFFF               6
87F7 FFFFFF     STU    $FFFF               6
87FA FFFFFF     STU    $FFFF               6
87FD FFFFFF     STU    $FFFF               6
8800 0000       NEG    <$00                6
8802 0000       NEG    <$00                6
8804 0000       NEG    <$00                6
8806 0000       NEG    <$00                6
8808 0000       NEG    <$00                6
880A 0000       NEG    <$00                6
880C 0000       NEG    <$00                6
Hum ya un truc totalement anormal là. il est impossible d'atterrir en guru comme ca... C'est le systématiquement ci-dessus (*) qui est faux. En effet, à la fermeture d'un fichier, les accès à d7read (lecture donnée) sont redirigés vers "guru" sans jsr. On est dans cette situation: on a appelé un d7read() hors contexte (après avoir fermé un fichier et avant d'avoir ouvert un autre.) C'est un invariant du programme qui est brisé.

Reste à trouver où il se brise à présent.

Si j'examine la pile je vois que cela vient de juste avant "$9b5f", soit ici

Code : Tout sélectionner

    730                           ***************************************
    731                           * Copy litteral
    732                           ***************************************
    733  6     9B5A 1F   02       cpy    tfr    d,y
    734  8     9B5C BD   9A44     cpyl   jsr    d7read <=== ici
    735  7     9B5F 9D   CE              jsr    <dec_u
    736  4+0   9B61 A7   C4              sta    ,u
    737  4+1   9B63 31   3F              leay   -1,y
    738  3     9B65 26   F5              bne    cpyl
    739  3     9B67 20   D6              bra    mloop
    740  5+11  9B69 35   FE       fin    puls   d,u,x,y,dp,pc
C'est la routine de décompression EXOmizer (copie d'un literal) qui est appelé après la fin de fichier. Cela se produit durant la lecture du fichier "xIMG26 xmp" (on devine le nom sur l'écran aussi), qui pour je ne sais pas encore quelle raison (fichier tronqué sur la diskette?), fait planter le programme. Est-ce juste propre à la version SD ou est-ce que cela se fait aussi en FD. Il faudra que je vérifie.

[EDIT] bon je viens de vérifier avec la version SAP/FD de logicielsmoto.com et dcmoto.free.fr. Ca passe sans soucis. Comment la conversion FD->SD peut avoir tronqué un fichier ? Est-ce que la FAT serait perturbée, ou est-ce le fait qu'avec les fichier SD on a 4 diskettes au lieu d'une qui change tout ? Ou alors le fichier n'est pas tronqué et c'est autre chose... Bon il faudra y passer plus de temps.
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 : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [DCMOTO/MESS] Freeze HNY2013

Message par Daniel »

Dès que j'aurai un peu de temps je vais chercher aussi de mon côté. Il y a beaucoup d'appels au contrôleur de disquette, c'est peut-être dans un des appels que le contrôleur SDDRIVE réagit un peu différemment du contrôleur interne du TO8/TO8D.

Mais pourquoi l'erreur arrive-t-elle si loin dans le diaporama ? Le changement d'unité de disquette est une bonne piste. Un débordement de la pile peut aussi planter SDDRIVE, car il utilise 6 octets au pied de la pile système, elle fait donc 6 octets de moins qu'avec le contrôleur interne.

Nous finirons par trouver, mais ce n'est pas facile...
Daniel
L'obstacle augmente mon ardeur.
Répondre