[Le projet OS-9] OS9 sur TO9p

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

Modérateurs : Papy.G, fneck, Carl

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

[Le projet OS-9] OS9 sur TO9p

Message par __sam__ »

Superbe! 8)

Quand tu dis que le scroll est plus rapide en mode natif, c'est toujours avec les opcodes 6809 ou est-ce que tu as ré-écrit le scroll avec les opcode 6309. Je pense typiquement aux opérations de déplacement de blocs

Code : Tout sélectionner

   LDX  #$4000 ; début ram video
   LEAY 320,X  ; ligne caractère suivante
   LDW  #8000  ; taille écran
   TFM  Y+,X+  ; remonte tout l'écran d'une ligne
A noter: pour remonter tout l'écran avec le TFM, le 6309 utilise 6+3*8000cycle, un peu plus que 24ms. C'est un peu moins qu'une série de PULS/PSHS où l'on peut lire ou écrire 8 octets en 12 cycles, mais pour lequel il faut ajouter 2 LEAS pour ajuster les pointeurs.
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
Avatar de l’utilisateur
jb_jb_fr
Messages : 391
Inscription : 29 mars 2010 10:36
Localisation : Essonne (91)
Contact :

[Le projet OS-9] OS9 sur TO9p

Message par jb_jb_fr »

Bien sur, c'est en utilisant l'instruction TFM que j'ai pu gagner en fluidité.
Voila le code que j'ai fait :

Code : Tout sélectionner

            lbsr   ColorVideo
            lda   #1
Wrt_LF_1  pshs  a
          ldd   #$0140             ; D= 40*8 = 320 = $140
          ldx   <BegMem            ; Initialize X at the start of Video memory
          tfr   x,y                ;      "     Y "   "    "    "   "      "    too
          leax  d,x                ; Ignore the first line (line to remove )
         ifne  H6309
          ldw   EndMem,u
          subw  BegMem,u
          subw  #$0140
          tfm   x+,y+

          ldw   #$0140             ; D= 40*8 = 320 = $140
          leax  NullByte,pcr ; Initialize pointer on a NUL byte
          tfm   x,y+         ; Transfert memory

          
         else
Write_2   ldd   ,x++               ; 
          std   ,y++               ; 
          cmpx  <EndMem            ;
          blo   Write_2            ; 
          ldx   #$0140             ; D= 40*8 = 320 = $140
          clra
          clrb
Write_20  std   ,y++                ; \
          leax  -2,x               ;  > Clear the last line
          bne   Write_20           ; /
         endc

          puls  a
          tsta
          beq   Write_4
          lbsr   TextVideo
          deca
          bra   Wrt_LF_1
Cette instruction TFM est vraiment génial pour gagner des cycles.

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

[Le projet OS-9] OS9 sur TO9p

Message par __sam__ »

jb_jb_fr a écrit :Cette instruction TFM est vraiment génial pour gagner des cycles.
Oui mais attention, elle est interruptible. La doc dit qu'en cas d'interruption l'instruction refait un cycle de lecture, et je me suis demandé si du coup les (l'un des?) regs sont eux-aussi ré-incrémentés. Il semblerait que oui puisque la doc 6309 que j'ai trouvée (6309 technical reference) indique qu'il peut y avoir des trous dans la recopie en cas d'interruption. Il faudrait avoir le code sourcce VHDL ou la machine a état exacte du 6309 pour trancher correctement.

Sur OS9, $0000 contient quelle valeur ? Si c'est 0, dans le TFM x,y+ final on peut remplacer x par z, le registre qui vaut toujours 0 (en voilà un registre rigolo) :mrgreen: Tu pouvais aussi faire "CLR ,Y ; LEAX ,Y; TFM X,Y+" sans avoir besoin de la référence à NullByte. Sur 6309 il y a vraiment 36 façon de faire la même chose. 8)

Le 6309 est vraiment sympa aussi avec ses instructions registres à registes complètement orthogonaux. Par exemple on peut faire un EORR D,PC ce qui fait un XOR entre PC et D avec le résultat dans PC (allez savoir à quoi ca peut servir, contrairement à ADDR D,PC). Du coup "LEAX D,X" qui prend 4+2=6 cycles en 6309 (8 en 6809) peut avantageusement être remplacé par un ADDR D,X en 4 cycles seulement.

Je crois qu'on peut aussi utiliser D en registre d'addresse sur les modes indexés. Il y a pleins de trucs et astuces à explorer avec le 6309. :roll:
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
Répondre