[Thomson] Vidéo avec son en streaming

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

Modérateurs : Carl, Papy.G, fneck

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 06 juil. 2015 11:00

Bah ca peut arriver plus tôt que 20mins. Ca dépend si le framerate a suffisamemnt de facteurs premiers en commun avec la fréquence en Hz de l'audio.

Regarder est une chose, mais écouter l'est bien plus et là à 15khz on a un son exceptionnel. On pourrait imaginer parfaitement faire du karaoké sur Thomson à présent. :mrgreen:
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Daniel
Messages : 10828
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par Daniel » 06 juil. 2015 11:02

Je croyais que personne ne lisait nos délires, je me suis trompé : il y a en a au moins un, et il a tout compris 8)
C'est une bonne motivation pour continuer...

@sam :
Le découpage 1 + 73 x 7 octets est très bien. Il y a 6 octets à lire entre chaque synchronisation, et au changement de bloc il y a aussi 6 (+ ou - 2) octets à lire : 2 octets de CRC, 1 à 5 octets d'attente, 1 octet $FE de début de bloc. Ce qui fait pratiquement un délai constant entre deux synchronisations.

Par contre, dans le premier octet du bloc, je crois qu'on doit mettre aussi un échantillon de son avec le bit de synchronisation. Sinon l'écriture en <$CD provoquera un craquement dans l'audio. Où alors il faut seulement inverser le bit 6, mais c'est quelques cycles de plus. Il faudra choisir ce qui s'entend le moins. Ou encore mettre les informations de codage uniquement dans le premier octet du premier bloc, et mettre un échantillon de son dans le premier octet des blocs suivants.
Modifié en dernier par Daniel le 06 juil. 2015 11:06, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 06 juil. 2015 11:04

Est-ce que si je lis <$CD je retrouve ce qui a été inscrit précédemment au niveau des 6 bits de poids faible ? Si oui alors on devrait pouvoir rejouer l'échantillon son en inversant le B6.

Sinon un grand rêve.. pouvoir faire comme Gasman sur ZX-Spectrum et produire le clip d'un groupe musical sur Thomson: http://www.pouet.net/prod.php?which=61550
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Daniel
Messages : 10828
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par Daniel » 06 juil. 2015 11:41

Pour ce type de test il ne faut pas se fier à dcmoto, qui n'émule pas parfaitement le PIA 6821 (et pas du tout le gate array). Le port $A7CD étant initialisé avec les bits 0-6 en sortie et le bit 7 en entrée, l'émulateur renvoie la valeur écrite précédemment, avec le bit 7 forcé à 1.

Sur le vrai MO5, après avoir initialisé le port $A7CD avec les bits 0-6 en sortie et le bit 7 en entrée, on lit toujours la même valeur $FC sur $A7CD, quelle que soit la valeur écrite auparavant (j'ai fait une boucle de 0 à 255). Pourquoi $FC ? C'est peut-être lié au gate array ?
Daniel
L'obstacle augmente mon ardeur.

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 06 juil. 2015 11:50

ok, donc autant caler un échantillon audio. Ca ne laisse qu'un seul bit d'info de dispo, et ca ne va pas aider à sycnhroniser audio et video (déjà que c'est plus trop clair maintenant avec le décalage observé).

J'ai un peu peut que si c'est un nouvel échantillon qui n'est pas pile au mon instant (un peu trop tot/trop tard), on l'entendre. A ton avis il vaudrait mieux rejouer le dernier échantillon ou en prendre un nouveau ?
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Daniel
Messages : 10828
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par Daniel » 06 juil. 2015 11:57

Dans un cas comme dans l'autre, je ne l'entendrai pas. Mais les mélomanes ont peut-être l'oreille plus sensible...

Je pense à une astuce, qui permettrait de rattraper le décalage du son : si le son est en avance, on joue le même échantillon, si le son est en retard on joue un nouvel échantillon.
Daniel
L'obstacle augmente mon ardeur.

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 06 juil. 2015 12:24

Oui c'est ce à quoi je m'orientais: deux horloges. L'une pour l'audio l'autre pour la video. Par contre peut-être que ce sera plusieurs échantillons audio à rattraper car l'horloge video est bien plus lente (maxi 50-60hz) que l'audio (15khz). A la réflexion il sera sans doute plus simple que de n'avoir qu'une seule horloge référence, la plus précise (audio) et d'aller chercher les images à la demande. Cela fait complètement revoir la façon dont on rempli un buffer "image". Je dois y réfléchir.

Bon pour l'instant ca dérange pas trop... En tout cas je suis content j'ai une matrice 9x9 à laquelle je n'ai enfin pas grand chose à reprocher: http://www.cjoint.com/data/EGgkwirypJ4_ ... -Video-.7z
(une vidéo pour les "jeunes", à lire avec le player basic de http://forum.system-cfg.com/viewtopic.p ... 06#p105106)
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 07 juil. 2015 23:47

Après avoir bossé sur le player je suis revenu sur le format où le dernier octet du bloc de 512 soit uniquement un échantillon son + une indication de fin de fichier. Cela donne le player suivant

Code : Tout sélectionner

(main)sdplay5
  ORG   $9000
  
*------------------------------------------------------
* lecture d'un bloc de 7 octets 8+(17+9)*2=60 cycles
*
* <son> <depA> <vidA1> <vidA2> <depB> <vidB1> <vidB2>
*------------------------------------------------------
BLOC macro
* echantillon son (8 cycles)
  LDA   <$CC      (4) lecture echantillon son avec B6 alternant
  STA   <$CD      (4) joue le son et acknowledge   
  
* lecture octet depl + video1 = 17 cycles
  LDB   <$CC      (4) lecture octet deplacement
  BEQ   NEWPICa\0 (3) nouvelle image
  ABX             (3) ajout de l'increment
  LDA   <$CC      (4) lecture octet video1
  BRA   PLAYa\0   (3) octet video
 
* retour debut ecran + video1 = 10 cycle
NEWPICa\0
  LDX  #$4000     (3) retour debut ecran
  LDA   <$CC      (4) lecture octet video1
  BRA  PLAYa\0    (3) poursuite image
   
* sortie video = 9 cycles
PLAYa\0
  LDB   <$CC      (4) lecture octet video2
  STD   ,X        (5) affiche l'octet image

* lecture octet depl + video3 = 17 cycles
  LDB   <$CC      (4) lecture octet deplacement
  BEQ   NEWPICb\0 (3) nouvelle image
  ABX             (3) ajout de l'increment
  LDA   <$CC      (4) lecture octet video3
  BRA   PLAYb\0   (3) octet video
 
* retour debut ecran + video3 = 10 cycle
NEWPICb\0
  LDX  #$4000     (3) retour debut ecran
  LDA   <$CC      (4) lecture octet video3
  BRA  PLAYb\0    (3) poursuite image
   
* sortie video = 9 cycles
PLAYb\0
  LDB   <$CC      (4) lecture octet image
  STD   ,X        (5) affiche l'octet image 
  ENDM

*------------------------------------------------------
* Mis à jour pointeur debut ecran
*------------------------------------------------------
NEWPIC MACRO
  STX   NEWPICa\0+1
  STX   NEWPICb\0+1
  ENDM  

*------------------------------------------------------
* Repetition
*------------------------------------------------------
REP MACRO
  IF   (\0)&1
  \1   \2
  ENDC
  IFGE (\0)-1
  REP  (\0)<-1,\1,O\2
  REP  (\0)<-1,\1,X\2
  ENDC
  ENDM

*------------------------------------------------------
* Point d'entree
*------------------------------------------------------  
INI
  PSHS  U,Y,X,DP,B,A,CC  empile les registres
  ORCC  #$50      masque les interruptions
  LDX   #$1F40    adresse pour test RAM ou ROM
  LDB   ,X        lecture adresse X
  COM   ,X        tente de modifier adresse X
  CMPB  ,X        test modification adresse X
  BEQ   INIT1     pas de difference -> TO
  COM   ,X        retablissement adresse X
  LDU   #$A7C0    port A du PIA systeme
  LDX   #$0000    adresse dans ecran
  BRA   INIT2     suite des initialisations   
INIT1
  LDU   #$E7C3    port A du PIA systeme
  LDX   #$4000    adresse dans ecran
INIT2
  REP   73,NEWPIC adresse debut ecran
  LDA   ,U        port A du PIA systeme
  ORA   #1        set bit 0
  STA   ,U        passage en video forme
  TFR   U,D       extraction base $E7/$A7
  TFR   A,DP      initialisation DP
  CLRA            A=$00
  CLRB            B=$00
  STD   <$CE      selectionne DDRA et DDRB
  LDB   #$7F      B=$7F
  STD   <$CC      PA b0-7 en entree, PB b0-6 en sortie
  ORA   #$04      set b2
  STA   <$CE      selectionne PORTA
  STA   <$CF      selectionne PORTB
 

*------------------------------------------------------
* JOUE LA VIDEO ET LA MUSIQUE
* Boucle de 60 cycles = 16666.67 Hz
*------------------------------------------------------

PLAY
  REP   73,BLOC 

* echantillon son+sortie (11 cycles)
  LDA   <$CC      (4) lecture echantillon son avec B6 alternant
  STA   <$CD      (4) joue le son et acknowledge   
  BGE   SORTIE    (3) sortie?

* compensation = attente inter-bloc (49)
  PSHS  X,Y,A     (10)
  PULS  X,Y,A     (10)
  PSHS  X,Y,D     (11)
  PULS  X,Y,D     (11)
  BRN   SORTIE    (3)  
  JMP   PLAY      (4)
  
*------------------------------------------------------
* RETOUR AU BASIC
*------------------------------------------------------
SORTIE
  PULS  CC,A,B,DP,X,Y,U,PC 
  
* retour a l'assembleur
*  SWI
  
  END   INI
A cause de l'utilisation (astucieuse, voir http://www.logicielsmoto.com/phpBB/view ... f7f427cccf) du macro-processeur pour dérouler les boucles, il faut le compiler avec C6809 v0.83 (http://www.pulsdemos.com/c6809.html).

Du fait que le test de fin de fichier ne se fait plus lors de la lecture des 7 octets audio-video, le traitement de ce (on dit triplet, quadruplet.... hum) heptuplet se fait en 60 cycles seulement, ce qui est le décodage le plus rapide jamais obtenu. La fréquence audio monte à 16.67khz. :D

Le fait que le dernier octet du bloc de 512 octets soit un octet son sans données video fait qu'il nous reste 52µs en attente inter-bloc. C'est plus ou moins l'équivalent de 26 octets lus par l'arduino. Ca me semble largement suffisant. Je remplis les 52µs par un jeu de PSHS/PULS, mais un appel à KTST est envisageable (mais non portable TO/MO). En effet sur TO8 ce dernier fait 4+6+5+2+3+5+5+3+8 = 41 cycles quand aucune touche n'est appuyée. C'est pile dans les clous (on a vraiment du bol 8) )

Code : Tout sélectionner

E809 7EEC12     JMP    $EC12               4
EC12 3402       PSHS   A                   6
EC14 B6E7C8     LDA    $E7C8               5
EC17 44         LSRA                       2
EC18 2514       BCS    $EC2E               3
EC1A B6605E     LDA    $605E               5
EC1D B16067     CMPA   $6067               5
EC20 270C       BEQ    $EC2E               3
EC22 B6608B     LDA    $608B               5
EC25 8810       EORA   #$10                2
EC27 B7608B     STA    $608B               5
EC2A 48         ASLA                       2
EC2B 48         ASLA                       2
EC2C 48         ASLA                       2
EC2D 48         ASLA                       2
EC2E 3582       PULS   A,PC                8
Cette organisation du player me semble très satisfaisante, le seul hic c'est qu'à cause du déroulement de la boucle il fait 3ko. Est-ce qu'il y a assez de RAM dans toutes les machines à l'adresse $9000 ?

L'autre problème sera aussi la taille du loader BASIC: 3790 lignes pour 15ko. Faut-il re-enrouler la boucle au risque de rajouter 7 cycles (LEAY -1,Y; BNE ...), soit 14.9khz? Je ne suis pas super enthousiaste à l'idée de perdre des cycles :(

Code : Tout sélectionner

10 CLEAR,&H8FFF
20 COLOR7,0:SCREEN,,0:CLS:LOCATE0,0,0
30 READ A$:IF LEN(A$)=4 THEN A=VAL("&H"+A$):GOTO 30
40 IF A$="**" THEN EXEC A ELSE POKE A,VAL("&H"+A$):A=A+1:GOTO 30
50 DATA 9000
60 DATA 34,7F,1A,50,8E,1F,40,E6,84,63
70 DATA 84,E1,84,27,0A,63,84,CE,A7,C0
80 DATA 8E,00,00,20,06,CE,E7,C3,8E,40
90 DATA 00,BF,91,FB,BF,92,0F,BF,92,27
100 DATA BF,92,3B,BF,92,53,BF,92,67,BF
110 DATA 92,7F,BF,92,93,BF,92,AB,BF,92
120 DATA BF,BF,92,D7,BF,92,EB,BF,93,03
130 DATA BF,93,17,BF,93,2F,BF,93,43,BF
140 DATA 93,5B,BF,93,6F,BF,93,87,BF,93
150 DATA 9B,BF,93,B3,BF,93,C7,BF,93,DF
160 DATA BF,93,F3,BF,94,0B,BF,94,1F,BF
170 DATA 94,37,BF,94,4B,BF,94,63,BF,94
180 DATA 77,BF,94,8F,BF,94,A3,BF,94,BB
190 DATA BF,94,CF,BF,94,E7,BF,94,FB,BF
200 DATA 95,13,BF,95,27,BF,95,3F,BF,95
210 DATA 53,BF,95,6B,BF,95,7F,BF,95,97
220 DATA BF,95,AB,BF,95,C3,BF,95,D7,BF
230 DATA 95,EF,BF,96,03,BF,96,1B,BF,96
240 DATA 2F,BF,96,47,BF,96,5B,BF,96,73
250 DATA BF,96,87,BF,96,9F,BF,96,B3,BF
260 DATA 96,CB,BF,96,DF,BF,96,F7,BF,97
270 DATA 0B,BF,97,23,BF,97,37,BF,97,4F
280 DATA BF,97,63,BF,97,7B,BF,97,8F,BF
290 DATA 97,A7,BF,97,BB,BF,97,D3,BF,97
300 DATA E7,BF,97,FF,BF,98,13,BF,98,2B
310 DATA BF,98,3F,BF,98,57,BF,98,6B,BF
320 DATA 98,83,BF,98,97,BF,98,AF,BF,98
330 DATA C3,BF,98,DB,BF,98,EF,BF,99,07
340 DATA BF,99,1B,BF,99,33,BF,99,47,BF
350 DATA 99,5F,BF,99,73,BF,99,8B,BF,99
360 DATA 9F,BF,99,B7,BF,99,CB,BF,99,E3
370 DATA BF,99,F7,BF,9A,0F,BF,9A,23,BF
380 DATA 9A,3B,BF,9A,4F,BF,9A,67,BF,9A
390 DATA 7B,BF,9A,93,BF,9A,A7,BF,9A,BF
400 DATA BF,9A,D3,BF,9A,EB,BF,9A,FF,BF
410 DATA 9B,17,BF,9B,2B,BF,9B,43,BF,9B
420 DATA 57,BF,9B,6F,BF,9B,83,BF,9B,9B
430 DATA BF,9B,AF,BF,9B,C7,BF,9B,DB,BF
440 DATA 9B,F3,BF,9C,07,BF,9C,1F,BF,9C
450 DATA 33,BF,9C,4B,BF,9C,5F,BF,9C,77
460 DATA BF,9C,8B,BF,9C,A3,BF,9C,B7,BF
470 DATA 9C,CF,BF,9C,E3,BF,9C,FB,BF,9D
480 DATA 0F,BF,9D,27,BF,9D,3B,BF,9D,53
490 DATA BF,9D,67,BF,9D,7F,BF,9D,93,BF
500 DATA 9D,AB,BF,9D,BF,BF,9D,D7,BF,9D
510 DATA EB,BF,9E,03,BF,9E,17,BF,9E,2F
520 DATA BF,9E,43,BF,9E,5B,BF,9E,6F,A6
530 DATA C4,8A,01,A7,C4,1F,30,1F,8B,4F
540 DATA 5F,DD,CE,C6,7F,DD,CC,8A,04,97
550 DATA CE,97,CF,96,CC,97,CD,D6,CC,27
560 DATA 05,3A,96,CC,20,07,8E,40,00,96
570 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
580 DATA 05,3A,96,CC,20,07,8E,40,00,96
590 DATA CC,20,00,D6,CC,ED,84,96,CC,97
600 DATA CD,D6,CC,27,05,3A,96,CC,20,07
610 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
620 DATA 84,D6,CC,27,05,3A,96,CC,20,07
630 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
640 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
650 DATA 96,CC,20,07,8E,40,00,96,CC,20
660 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
670 DATA 96,CC,20,07,8E,40,00,96,CC,20
680 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
690 DATA CC,27,05,3A,96,CC,20,07,8E,40
700 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
710 DATA CC,27,05,3A,96,CC,20,07,8E,40
720 DATA 00,96,CC,20,00,D6,CC,ED,84,96
730 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
740 DATA 20,07,8E,40,00,96,CC,20,00,D6
750 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
760 DATA 20,07,8E,40,00,96,CC,20,00,D6
770 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
780 DATA 05,3A,96,CC,20,07,8E,40,00,96
790 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
800 DATA 05,3A,96,CC,20,07,8E,40,00,96
810 DATA CC,20,00,D6,CC,ED,84,96,CC,97
820 DATA CD,D6,CC,27,05,3A,96,CC,20,07
830 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
840 DATA 84,D6,CC,27,05,3A,96,CC,20,07
850 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
860 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
870 DATA 96,CC,20,07,8E,40,00,96,CC,20
880 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
890 DATA 96,CC,20,07,8E,40,00,96,CC,20
900 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
910 DATA CC,27,05,3A,96,CC,20,07,8E,40
920 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
930 DATA CC,27,05,3A,96,CC,20,07,8E,40
940 DATA 00,96,CC,20,00,D6,CC,ED,84,96
950 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
960 DATA 20,07,8E,40,00,96,CC,20,00,D6
970 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
980 DATA 20,07,8E,40,00,96,CC,20,00,D6
990 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
1000 DATA 05,3A,96,CC,20,07,8E,40,00,96
1010 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
1020 DATA 05,3A,96,CC,20,07,8E,40,00,96
1030 DATA CC,20,00,D6,CC,ED,84,96,CC,97
1040 DATA CD,D6,CC,27,05,3A,96,CC,20,07
1050 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1060 DATA 84,D6,CC,27,05,3A,96,CC,20,07
1070 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1080 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
1090 DATA 96,CC,20,07,8E,40,00,96,CC,20
1100 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
1110 DATA 96,CC,20,07,8E,40,00,96,CC,20
1120 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
1130 DATA CC,27,05,3A,96,CC,20,07,8E,40
1140 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
1150 DATA CC,27,05,3A,96,CC,20,07,8E,40
1160 DATA 00,96,CC,20,00,D6,CC,ED,84,96
1170 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
1180 DATA 20,07,8E,40,00,96,CC,20,00,D6
1190 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
1200 DATA 20,07,8E,40,00,96,CC,20,00,D6
1210 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
1220 DATA 05,3A,96,CC,20,07,8E,40,00,96
1230 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
1240 DATA 05,3A,96,CC,20,07,8E,40,00,96
1250 DATA CC,20,00,D6,CC,ED,84,96,CC,97
1260 DATA CD,D6,CC,27,05,3A,96,CC,20,07
1270 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1280 DATA 84,D6,CC,27,05,3A,96,CC,20,07
1290 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1300 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
1310 DATA 96,CC,20,07,8E,40,00,96,CC,20
1320 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
1330 DATA 96,CC,20,07,8E,40,00,96,CC,20
1340 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
1350 DATA CC,27,05,3A,96,CC,20,07,8E,40
1360 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
1370 DATA CC,27,05,3A,96,CC,20,07,8E,40
1380 DATA 00,96,CC,20,00,D6,CC,ED,84,96
1390 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
1400 DATA 20,07,8E,40,00,96,CC,20,00,D6
1410 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
1420 DATA 20,07,8E,40,00,96,CC,20,00,D6
1430 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
1440 DATA 05,3A,96,CC,20,07,8E,40,00,96
1450 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
1460 DATA 05,3A,96,CC,20,07,8E,40,00,96
1470 DATA CC,20,00,D6,CC,ED,84,96,CC,97
1480 DATA CD,D6,CC,27,05,3A,96,CC,20,07
1490 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1500 DATA 84,D6,CC,27,05,3A,96,CC,20,07
1510 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1520 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
1530 DATA 96,CC,20,07,8E,40,00,96,CC,20
1540 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
1550 DATA 96,CC,20,07,8E,40,00,96,CC,20
1560 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
1570 DATA CC,27,05,3A,96,CC,20,07,8E,40
1580 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
1590 DATA CC,27,05,3A,96,CC,20,07,8E,40
1600 DATA 00,96,CC,20,00,D6,CC,ED,84,96
1610 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
1620 DATA 20,07,8E,40,00,96,CC,20,00,D6
1630 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
1640 DATA 20,07,8E,40,00,96,CC,20,00,D6
1650 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
1660 DATA 05,3A,96,CC,20,07,8E,40,00,96
1670 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
1680 DATA 05,3A,96,CC,20,07,8E,40,00,96
1690 DATA CC,20,00,D6,CC,ED,84,96,CC,97
1700 DATA CD,D6,CC,27,05,3A,96,CC,20,07
1710 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1720 DATA 84,D6,CC,27,05,3A,96,CC,20,07
1730 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1740 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
1750 DATA 96,CC,20,07,8E,40,00,96,CC,20
1760 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
1770 DATA 96,CC,20,07,8E,40,00,96,CC,20
1780 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
1790 DATA CC,27,05,3A,96,CC,20,07,8E,40
1800 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
1810 DATA CC,27,05,3A,96,CC,20,07,8E,40
1820 DATA 00,96,CC,20,00,D6,CC,ED,84,96
1830 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
1840 DATA 20,07,8E,40,00,96,CC,20,00,D6
1850 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
1860 DATA 20,07,8E,40,00,96,CC,20,00,D6
1870 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
1880 DATA 05,3A,96,CC,20,07,8E,40,00,96
1890 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
1900 DATA 05,3A,96,CC,20,07,8E,40,00,96
1910 DATA CC,20,00,D6,CC,ED,84,96,CC,97
1920 DATA CD,D6,CC,27,05,3A,96,CC,20,07
1930 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1940 DATA 84,D6,CC,27,05,3A,96,CC,20,07
1950 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
1960 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
1970 DATA 96,CC,20,07,8E,40,00,96,CC,20
1980 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
1990 DATA 96,CC,20,07,8E,40,00,96,CC,20
2000 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
2010 DATA CC,27,05,3A,96,CC,20,07,8E,40
2020 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
2030 DATA CC,27,05,3A,96,CC,20,07,8E,40
2040 DATA 00,96,CC,20,00,D6,CC,ED,84,96
2050 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
2060 DATA 20,07,8E,40,00,96,CC,20,00,D6
2070 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
2080 DATA 20,07,8E,40,00,96,CC,20,00,D6
2090 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
2100 DATA 05,3A,96,CC,20,07,8E,40,00,96
2110 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
2120 DATA 05,3A,96,CC,20,07,8E,40,00,96
2130 DATA CC,20,00,D6,CC,ED,84,96,CC,97
2140 DATA CD,D6,CC,27,05,3A,96,CC,20,07
2150 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
2160 DATA 84,D6,CC,27,05,3A,96,CC,20,07
2170 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
2180 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
2190 DATA 96,CC,20,07,8E,40,00,96,CC,20
2200 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
2210 DATA 96,CC,20,07,8E,40,00,96,CC,20
2220 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
2230 DATA CC,27,05,3A,96,CC,20,07,8E,40
2240 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
2250 DATA CC,27,05,3A,96,CC,20,07,8E,40
2260 DATA 00,96,CC,20,00,D6,CC,ED,84,96
2270 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
2280 DATA 20,07,8E,40,00,96,CC,20,00,D6
2290 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
2300 DATA 20,07,8E,40,00,96,CC,20,00,D6
2310 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
2320 DATA 05,3A,96,CC,20,07,8E,40,00,96
2330 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
2340 DATA 05,3A,96,CC,20,07,8E,40,00,96
2350 DATA CC,20,00,D6,CC,ED,84,96,CC,97
2360 DATA CD,D6,CC,27,05,3A,96,CC,20,07
2370 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
2380 DATA 84,D6,CC,27,05,3A,96,CC,20,07
2390 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
2400 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
2410 DATA 96,CC,20,07,8E,40,00,96,CC,20
2420 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
2430 DATA 96,CC,20,07,8E,40,00,96,CC,20
2440 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
2450 DATA CC,27,05,3A,96,CC,20,07,8E,40
2460 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
2470 DATA CC,27,05,3A,96,CC,20,07,8E,40
2480 DATA 00,96,CC,20,00,D6,CC,ED,84,96
2490 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
2500 DATA 20,07,8E,40,00,96,CC,20,00,D6
2510 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
2520 DATA 20,07,8E,40,00,96,CC,20,00,D6
2530 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
2540 DATA 05,3A,96,CC,20,07,8E,40,00,96
2550 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
2560 DATA 05,3A,96,CC,20,07,8E,40,00,96
2570 DATA CC,20,00,D6,CC,ED,84,96,CC,97
2580 DATA CD,D6,CC,27,05,3A,96,CC,20,07
2590 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
2600 DATA 84,D6,CC,27,05,3A,96,CC,20,07
2610 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
2620 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
2630 DATA 96,CC,20,07,8E,40,00,96,CC,20
2640 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
2650 DATA 96,CC,20,07,8E,40,00,96,CC,20
2660 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
2670 DATA CC,27,05,3A,96,CC,20,07,8E,40
2680 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
2690 DATA CC,27,05,3A,96,CC,20,07,8E,40
2700 DATA 00,96,CC,20,00,D6,CC,ED,84,96
2710 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
2720 DATA 20,07,8E,40,00,96,CC,20,00,D6
2730 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
2740 DATA 20,07,8E,40,00,96,CC,20,00,D6
2750 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
2760 DATA 05,3A,96,CC,20,07,8E,40,00,96
2770 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
2780 DATA 05,3A,96,CC,20,07,8E,40,00,96
2790 DATA CC,20,00,D6,CC,ED,84,96,CC,97
2800 DATA CD,D6,CC,27,05,3A,96,CC,20,07
2810 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
2820 DATA 84,D6,CC,27,05,3A,96,CC,20,07
2830 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
2840 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
2850 DATA 96,CC,20,07,8E,40,00,96,CC,20
2860 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
2870 DATA 96,CC,20,07,8E,40,00,96,CC,20
2880 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
2890 DATA CC,27,05,3A,96,CC,20,07,8E,40
2900 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
2910 DATA CC,27,05,3A,96,CC,20,07,8E,40
2920 DATA 00,96,CC,20,00,D6,CC,ED,84,96
2930 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
2940 DATA 20,07,8E,40,00,96,CC,20,00,D6
2950 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
2960 DATA 20,07,8E,40,00,96,CC,20,00,D6
2970 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
2980 DATA 05,3A,96,CC,20,07,8E,40,00,96
2990 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
3000 DATA 05,3A,96,CC,20,07,8E,40,00,96
3010 DATA CC,20,00,D6,CC,ED,84,96,CC,97
3020 DATA CD,D6,CC,27,05,3A,96,CC,20,07
3030 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
3040 DATA 84,D6,CC,27,05,3A,96,CC,20,07
3050 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
3060 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
3070 DATA 96,CC,20,07,8E,40,00,96,CC,20
3080 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
3090 DATA 96,CC,20,07,8E,40,00,96,CC,20
3100 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
3110 DATA CC,27,05,3A,96,CC,20,07,8E,40
3120 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
3130 DATA CC,27,05,3A,96,CC,20,07,8E,40
3140 DATA 00,96,CC,20,00,D6,CC,ED,84,96
3150 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
3160 DATA 20,07,8E,40,00,96,CC,20,00,D6
3170 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
3180 DATA 20,07,8E,40,00,96,CC,20,00,D6
3190 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
3200 DATA 05,3A,96,CC,20,07,8E,40,00,96
3210 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
3220 DATA 05,3A,96,CC,20,07,8E,40,00,96
3230 DATA CC,20,00,D6,CC,ED,84,96,CC,97
3240 DATA CD,D6,CC,27,05,3A,96,CC,20,07
3250 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
3260 DATA 84,D6,CC,27,05,3A,96,CC,20,07
3270 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
3280 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
3290 DATA 96,CC,20,07,8E,40,00,96,CC,20
3300 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
3310 DATA 96,CC,20,07,8E,40,00,96,CC,20
3320 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
3330 DATA CC,27,05,3A,96,CC,20,07,8E,40
3340 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
3350 DATA CC,27,05,3A,96,CC,20,07,8E,40
3360 DATA 00,96,CC,20,00,D6,CC,ED,84,96
3370 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
3380 DATA 20,07,8E,40,00,96,CC,20,00,D6
3390 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
3400 DATA 20,07,8E,40,00,96,CC,20,00,D6
3410 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
3420 DATA 05,3A,96,CC,20,07,8E,40,00,96
3430 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
3440 DATA 05,3A,96,CC,20,07,8E,40,00,96
3450 DATA CC,20,00,D6,CC,ED,84,96,CC,97
3460 DATA CD,D6,CC,27,05,3A,96,CC,20,07
3470 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
3480 DATA 84,D6,CC,27,05,3A,96,CC,20,07
3490 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
3500 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
3510 DATA 96,CC,20,07,8E,40,00,96,CC,20
3520 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
3530 DATA 96,CC,20,07,8E,40,00,96,CC,20
3540 DATA 00,D6,CC,ED,84,96,CC,97,CD,D6
3550 DATA CC,27,05,3A,96,CC,20,07,8E,40
3560 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
3570 DATA CC,27,05,3A,96,CC,20,07,8E,40
3580 DATA 00,96,CC,20,00,D6,CC,ED,84,96
3590 DATA CC,97,CD,D6,CC,27,05,3A,96,CC
3600 DATA 20,07,8E,40,00,96,CC,20,00,D6
3610 DATA CC,ED,84,D6,CC,27,05,3A,96,CC
3620 DATA 20,07,8E,40,00,96,CC,20,00,D6
3630 DATA CC,ED,84,96,CC,97,CD,D6,CC,27
3640 DATA 05,3A,96,CC,20,07,8E,40,00,96
3650 DATA CC,20,00,D6,CC,ED,84,D6,CC,27
3660 DATA 05,3A,96,CC,20,07,8E,40,00,96
3670 DATA CC,20,00,D6,CC,ED,84,96,CC,97
3680 DATA CD,D6,CC,27,05,3A,96,CC,20,07
3690 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
3700 DATA 84,D6,CC,27,05,3A,96,CC,20,07
3710 DATA 8E,40,00,96,CC,20,00,D6,CC,ED
3720 DATA 84,96,CC,97,CD,D6,CC,27,05,3A
3730 DATA 96,CC,20,07,8E,40,00,96,CC,20
3740 DATA 00,D6,CC,ED,84,D6,CC,27,05,3A
3750 DATA 96,CC,20,07,8E,40,00,96,CC,20
3760 DATA 00,D6,CC,ED,84,96,CC,97,CD,2C
3770 DATA 0D,34,32,35,32,34,36,35,36,21
3780 DATA 03,7E,91,ED,35,FF
3790 DATA 9000,**
Reste le cas de la détection N&B vs couleur... Mais peut-être que le 1er échantillon audio (càd le 1er octet du fichier SD) peut servir à ca via son bit B7. Ca devrait rallonger encore le code ASM... mais pas de beaucoup par rapport aux 3ko.
Modifié en dernier par __sam__ le 10 juil. 2015 22:46, modifié 1 fois.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Daniel
Messages : 10828
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par Daniel » 08 juil. 2015 20:22

La taille du programme n'est pas un problème, à condition de remplacer le chargement avec des DATA par un LOADM du programme binaire. Sinon c'est long à charger.

Avec un petit programme, on peut utiliser la même adresse de chargement pour TO et pour MO, mais s'il dépasse deux ou trois Ko il vaut mieux ne pas chercher à ruser et utiliser des adresses de chargement différentes, à condition évidemment d'avoir écrit du code translatable. Il faut savoir que le DOS, sur TO7 ou MO5, prend beaucoup de place en mémoire. Par sécurité il est préférable de mettre le programme le plus haut possible en RAM.

Par exemple, pour un programme de 3K, mettre l'adresse de chargement du fichier .BIN en $7000 et faire :
LOADM"....",,R avec un MO
LOADM"....",&H4000,R avec un TO

De mon côté je n'ai pas encore écrit le programme Arduino, mais je sais exactement ce qu'il faut faire. La seule question est de savoir si la synchronisation sera bonne. C'est la plus grosse incertitude.
Daniel
L'obstacle augmente mon ardeur.

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 08 juil. 2015 22:02

Daniel a écrit : Par exemple, pour un programme de 3K, mettre l'adresse de chargement du fichier .BIN en $7000 et faire :
LOADM"....",,R avec un MO
LOADM"....",&H4000,R avec un TO
Donc sur MO il se charge en $7000, mais sur TO c'est en $B000 du coup. Pourquoi ces valeurs. Avec $B000 on tape dans l'extension 16ko.

En fait le prog actuel se charge de $9000 à $9E89. C'est avant $A000 sur TO et à part pour le TO7 il y a de la ram à cette adresse même sans extension. C'est pas pareil sur MO ? (je ne connais pas bien la carte mémoire du MO)

Pour info, le programme étant très répétitif, EXOMIZER le compresse en 556 octets se chargeant à partir de $8D41 :D :

Code : Tout sélectionner

10 CLEAR,&H8D41
20 COLOR7,0:SCREEN,,0:CLS:LOCATE0,0,0
30 READ A$:IF LEN(A$)=4 THEN A=VAL("&H"+A$):GOTO 30
40 IF A$="**" THEN EXEC A ELSE POKE A,VAL("&H"+A$):A=A+1:GOTO 30
50 DATA 8D42
60 DATA 86,8D,1F,8B,CE,8F,64,31,C4,5F
70 DATA D7,CB,4F,34,06,C5,0F,26,03,8E
80 DATA 00,01,C6,04,8D,6A,E7,C0,53,69
90 DATA E4,49,5C,2B,FA,E6,E4,AF,C1,30
100 DATA 8B,35,06,5C,C1,34,26,DC,CE,9E
110 DATA 8E,C6,01,8D,4D,26,17,D7,86,8C
120 DATA 0C,86,5C,8D,43,27,F9,C6,00,C1
130 DATA 10,10,27,02,73,25,0F,5A,8D,34
140 DATA 1F,01,A6,A2,A7,C2,30,1F,26,F8
150 DATA 20,D7,8D,3F,34,06,8E,8D,EA,10
160 DATA 83,00,03,24,01,3A,8D,16,EB,03
170 DATA 8D,2D,DD,BA,35,10,33,5F,A6,C9
180 DATA 55,55,A7,C4,30,1F,26,F4,20,B1
190 DATA E6,84,6F,E2,6F,E2,86,55,20,09
200 DATA A6,A2,46,27,FB,69,61,69,E4,5A
210 DATA 2A,F6,97,CB,EC,E1,39,8E,8F,64
220 DATA 3A,58,3A,8D,DD,E3,01,39,04,02
230 DATA 04,10,30,20,80,00,34,7F,1A,50
240 DATA 8E,1F,3F,40,E6,DB,E1,25,27,0A
250 DATA 63,84,BF,A7,C0,EF,E1,20,7D,06
260 DATA CE,E7,C3,FF,C5,91,66,57,CA,99
270 DATA 5F,2A,65,7C,A9,95,F2,A6,57,CA
280 DATA 92,99,F9,53,2B,E5,4C,AF,95,32
290 DATA BE,54,CA,F9,53,2B,E5,4C,93,FC
300 DATA A9,95,F2,A6,57,CA,99,5F,2A,65
310 DATA 7C,A9,95,F2,A6,94,7E,54,CA,F9
320 DATA 53,2B,E5,4C,AF,95,32,BE,54,CA
330 DATA 95,F9,99,5F,2A,65,7C,A9,95,F2
340 DATA A6,87,56,24,CA,B3,C4,99,DF,5A
350 DATA 96,CC,0B,AC,49,37,95,89,32,63
360 DATA B1,26,8F,56,24,CA,BB,C4,99,E7
370 DATA 5A,97,CC,13,AC,49,3F,95,89,32
380 DATA 6B,B1,26,97,56,24,CA,C3,C4,98
390 DATA 99,EF,C4,99,1B,58,93,47,2B,12
400 DATA 65,73,62,4C,9F,AC,49,CB,95,89
410 DATA 99,F7,33,89,32,23,B1,26,4F,56
420 DATA 24,CA,7B,C4,99,A7,58,93,D3,2B
430 DATA 12,9A,FF,67,12,65,2B,62,4C,57
440 DATA AC,6F,4C,83,4C,49,44,AF,C4,C7
450 DATA C4,DB,9B,F3,D7,07,13,1F,13,33
460 DATA 13,4B,13,5F,13,77,13,8B,13,A3
470 DATA 13,B7,13,CF,13,E3,13,9C,FB,5C
480 DATA 0F,4C,27,4C,3B,4C,53,4C,67,4C
490 DATA 7F,4C,93,4C,AB,4C,46,D7,89,9D
500 DATA EB,AE,03,26,17,26,2F,26,43,26
510 DATA 5B,BF,9E,27,6F,A6,8A,01,DB,A7
520 DATA C4,30,E5,1F,8B,4F,5F,F6,C6,7F
530 DATA FB,DD,8A,FD,04,CE,CA,CF,D5,80
540 DATA 50,61,CD,27,05,3A,3A,07,8E,40
550 DATA 47,6A,20,00,D6,9D,ED,84,96,CC
560 DATA 97,CD,BF,2C,0D,DA,32,4D,34,C9
570 DATA 36,21,03,7E,EF,91,ED,35,FF,F4
580 DATA 00,80,EA,C4,00,62,20,00,80,88
590 DATA 1E,A2,02,48,00,C4,04,80,00,00
600 DATA 00,00,D5,6A,00,10
610 DATA 8D42,**
C'est peut-être la meilleur des solutions.

[EDIT] attention, le code ASM ci-dessus trash le registre DP, du coup à la fin de la video le basic plante :(
Modifié en dernier par __sam__ le 11 juil. 2015 02:08, modifié 1 fois.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Fool-DupleX
Messages : 1031
Enregistré le : 06 avr. 2009 12:07

Re: [Thomson] Vidéo avec son en streaming

Message par Fool-DupleX » 09 juil. 2015 19:47

Bien sûr qu'il y a de la RAM sur MO a cet endroit ! C'est même quasiment le meilleur choix possible puisque la RAM basse se termine en $9FFF sur MO ! :D

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 10 juil. 2015 11:15

Ok. Donc le choix EXOMIZER + code autour de $9000 est ce qu'il y a de mieux. Avec la compression on a pas besoin de trop se préoccuper de la taille. C'est bien :D
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 12 juil. 2015 01:51

Ok, j'ai réussi à faire un player à la fois petit et capable de gérer en partie le mode couleur et N&B. L'idée est de dérouler par programme ce que le macro-processeur aurait fait. Voici le code

Code : Tout sélectionner

  ORG   $9000
  
*------------------------------------------------------
* Point d'entree
*------------------------------------------------------  
INI
  PSHS  U,Y,X,DP,B,A,CC  empile les registres
  ORCC  #$50      masque les interruptions
  LDX   #$1F40    adresse pour test RAM ou ROM
  LDB   ,X        lecture adresse X
  COM   ,X        tente de modifier adresse X
  CMPB  ,X        test modification adresse X
  BEQ   INIT1     pas de difference -> TO
  COM   ,X        retablissement adresse X
  LDU   #$A7C0    port A du PIA systeme
  LDX   #$0000    adresse dans ecran
  BRA   INIT2     suite des initialisations   
INIT1
  LDU   #$E7C3    port A du PIA systeme
  LDX   #$4000    adresse dans ecran
INIT2
  STX   NEWPICa+1 adresse debut ecran
  STX   NEWPICb+1 adresse debut ecran
  TFR   U,D       extraction base $E7/$A7
  TFR   A,DP      initialisation DP
  
* recopie des attributs couleurs
  LDA   ,U        port A du PIA systeme
  ANDA  #254      clear bit 0 (couleur)
  STA   ,U        passage en video forme
  LDA   #200      200 lignes
LINE1  
  STA   ,-S       sauvegarde compteur ligne
  LDA   ,X+       lecture 1er octet ligne
  LDB   #39       compteur colonne
LINE2
  STA   ,X+       ecriture colonne suivante
  DECB            decrementation cpt col.
  BNE   LINE2     toutes les colonnes faites ?
  LDA   ,S+       recup compteur ligne
  DECA            une ligne de faite
  BNE   LINE1     finie ?
  INC   ,U        set bit 0 (forme)

* Mise en place du block play 73 fois
  LDU   #FINPLAY7 fin block PLAY 7
  LDX   #72*(FINPLAY7-PLAY7)
RECOPIE
  LDA   <(PLAY7-FINPLAY7),U
  STA   ,U+
  LEAX  -1,X
  BNE   RECOPIE
* mise en place "JMP FINBLOC"
  LDA   #$7E      "JMP"
  STA   ,U+
  LDD   #FINBLOC
  STD   ,U

* init ports d'entree/sortie  
  CLRA            A=$00
  CLRB            B=$00
  STD   <$CE      selectionne DDRA et DDRB
  LDB   #$7F      B=$7F
  STD   <$CC      PA b0-7 en entree, PB b0-6 en sortie
  ORA   #$04      set b2
  STA   <$CE      selectionne PORTA
  STA   <$CF      selectionne PORTB
  
*------------------------------------------------------
* JOUE LA VIDEO ET LA MUSIQUE
* Boucle de 60 cycles = 16666.67 Hz
*------------------------------------------------------
  BRA   PLAY7
  
*------------------------------------------------------
* RETOUR AU BASIC
*------------------------------------------------------
SORTIE  
  PULS  CC,A,B,DP,X,Y,U,PC   
* retour a l'assembleur
* SWI

* fin de bloc 512: son + attente (5+56 cycles)
FINBLOC
* echantillon son (8 cycles)
  LDA   <$CC      (4) lecture echantillon son avec B6 alternant
  STA   <$CD      (4) joue le son et acknowledge   

* compensation, lecture inter-bloc (45)
  PSHS  X,Y,A     (10)
  PULS  X,Y,A     (10)
  PSHS  X,Y,D     (11)
  PULS  X,Y,D     (11)
  BRN   SORTIE    (3)  

* rebouclage (7 cycles)
  BGE   SORTIE    (3) sortie?

*------------------------------------------------------
* lecture d'un bloc de 7 octets 8+(17+9)*2=60 cycles
*
* <son> <depA> <vidA1> <vidA2> <depB> <vidB1> <vidB2>
*------------------------------------------------------
PLAY7
* echantillon son (8 cycles)
  LDA   <$CC      (4) lecture echantillon son avec B6 alternant
  STA   <$CD      (4) joue le son et acknowledge   
  
* lecture octet depl + video1 = 17 cycles
  LDB   <$CC      (4) lecture octet deplacement
  BEQ   NEWPICa   (3) nouvelle image
  ABX             (3) ajout de l'increment
  LDA   <$CC      (4) lecture octet video1
  BRA   PLAYa     (3) octet video
 
* retour debut ecran + video1 = 10 cycle
NEWPICa
  LDX  #$4000     (3) retour debut ecran
  LDA   <$CC      (4) lecture octet video1
  BRA  PLAYa      (3) poursuite image
   
* sortie video = 9 cycles
PLAYa
  LDB   <$CC      (4) lecture octet video2
  STD   ,X        (5) affiche l'octet image

* lecture octet depl + video3 = 17 cycles
  LDB   <$CC      (4) lecture octet deplacement
  BEQ   NEWPICb   (3) nouvelle image
  ABX             (3) ajout de l'increment
  LDA   <$CC      (4) lecture octet video3
  BRA   PLAYb     (3) octet video
 
* retour debut ecran + video3 = 10 cycle
NEWPICb
  LDX  #$4000     (3) retour debut ecran
  LDA   <$CC      (4) lecture octet video3
  BRA  PLAYb      (3) poursuite image
   
* sortie video = 9 cycles
PLAYb
  LDB   <$CC      (4) lecture octet image
  STD   ,X        (5) affiche l'octet image 
FINPLAY7
  
  RMB   72*(FINPLAY7-PLAY7)
  
* envoi fin bloc 512 
*  JMP   FINBLOC   (4)
  
  END   INI
La gestion du mode couleur/N&B se fait par recopie du 1er octet couleur de chaque ligne sur le reste de la ligne. Du coup le basic n'a que quelque PSET à faire pour définir les couleurs par ligne.

Code : Tout sélectionner

10 CLEAR,&H8FFF
20 COLOR7,0:SCREEN,,0:CLS:LOCATE0,0,0
25 C%=1:FORI%=0TO199:PSET(0,I%),C%:PSET(0,I%),-1:C%=C%+C%-(C%=4)AND7:NEXT
30 READ A$:IF LEN(A$)=4 THEN A=VAL("&H"+A$):GOTO 30
40 IF A$="**" THEN EXEC A ELSE POKE A,VAL("&H"+A$):A=A+1:GOTO 30
50 DATA 9000
60 DATA 34,7F,1A,50,8E,1F,40,E6,84,63
70 DATA 84,E1,84,27,0A,63,84,CE,A7,C0
80 DATA 8E,00,00,20,06,CE,E7,C3,8E,40
90 DATA 00,BF,90,8B,BF,90,9F,1F,30,1F
100 DATA 8B,A6,C4,84,FE,A7,C4,86,C8,A7
110 DATA E2,A6,80,C6,27,A7,80,5A,26,FB
120 DATA A6,E0,4A,26,F0,6C,C4,CE,90,A9
130 DATA 8E,0C,60,A6,C8,D4,A7,C0,30,1F
140 DATA 26,F7,86,7E,A7,C0,CC,90,6D,ED
150 DATA C4,4F,5F,DD,CE,C6,7F,DD,CC,8A
160 DATA 04,97,CE,97,CF,20,12,35,FF,96
170 DATA CC,97,CD,34,32,35,32,34,36,35
180 DATA 36,21,F0,2C,EE,96,CC,97,CD,D6
190 DATA CC,27,05,3A,96,CC,20,07,8E,40
200 DATA 00,96,CC,20,00,D6,CC,ED,84,D6
210 DATA CC,27,05,3A,96,CC,20,07,8E,40
220 DATA 00,96,CC,20,00,D6,CC,ED,84
230 DATA 9000,**
Pour voir ce que ca donne, essayez ce fichier SD 7zipé: Money for nothing ou cet autre fichier: Sledgehammer (L'émulateur dcmoto 2015.07.03 est disponible ici).

Pour moi la qualité est proche de l'optimal. J'ai juste quelques bugs mineurs dans le compresseur à corriger qui pourraient peut-être améliorer le nombre de frame comptées comme s'affichant dans le temps imparti.

Les écarts en accès au port A sont comme suit: (+0(son), +8, +10, +7, +9, +10, +7, +9)x73, +4 (son, dernier octet de bloc SD), +56(attente crc etc)

C'est très régulier (60 cycles par octet son) sauf le +4 de fin de bloc qui retarde la lecture et production de 4 cycles en fin de bloc (mais les 60 cycles sont préservés). Je l'ai fait pour gagner un peu d'octets et parce que au niveau audio on ne perçoit aucune différence.

C'est corrigible, mais je ne sais pas si ca vaut le coup. Dis moi Daniel s'il est important pour l'arduino que la valeur du dernier octet de bloc arrive à exactement +9 et pas à +9+4.

[EDIT] modif de la ligne 25 du basic poru uen version beaucoup plus rapide sur MO5.
Modifié en dernier par __sam__ le 13 juil. 2015 21:44, modifié 1 fois.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

__sam__
Messages : 4174
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ » 12 juil. 2015 16:43

Pour les rares qui ne sauraient pas utiliser l'émulateur, j'ai préparé une vidéo montrant comment on procède. Le PC sur lequel tourne l'émulateur a une dalle 16:10 qui est le même pixel-ratio que sur thomson (320:200), du coup en plein écran on a une idée de ce que ca donne sur un vrai Thomson.

Le plus gros soucis pour moi fut de trouver une vidéo où les ayants-droit ne seraient pas venu m'enquiquiner (j'ai déjà eu un avertissement youtube. Mon compte est sous surveillance pour 6 mois). Donc exit les vidéoclips, ce qui est fort dommage car avec eux on a du très bon son, et de la belle qualité d'image. J'ai du me résoudre à utiliser un truc plus "bateau" beaucoup moins joli que les deux fichiers SD ci-dessus.


[EDIT] Mince je le crois pas.. Youtube a trouvé une correspondance audio d'un truc détenu par un tiers.
Nous avons identifié du contenu protégé par des droits d'auteur dans votre vidéo.
Le demandeur accepte que son contenu soit utilisé dans votre vidéo YouTube, mais des annonces peuvent y être diffusées.
Bon du coup rien à fiche, je vous file pour le même prix 1min et quelques d'un vrai clip sous (c). Il fallait pas m'emm*der avec le parasitisme des ayants-droit qui gagnent du fric sans rien faire (money for nothing pour eux aussi :mrgreen: ).

(video complète )

A noter: youtube m'accepte la video complète mais en interdit la visualisation au Canada à cause des 30 secs entre 4:12 et 4:43 (pourquoi?). Donc si vous n'êtes pas canadien, vous pouver la regarder ici


Moi je dis: pas mal pour des petits TO7/MO5/T9000 :D A l'époque ca aurait fait une super promo ce genre de trucs. :roll:
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8. New Teo 1.8.4 8)

Daniel
Messages : 10828
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par Daniel » 12 juil. 2015 21:11

Exceptionnel, prodigieux, incroyable, sensationnel... les mots me manquent pour décrire ce que l'on a toujours cru impossible sur Thomson. Je me souviens avoir lu que le MO5 était handicapé par un son minable, je trouve au contraire la partie audio meilleure que tout ce qu'on a pu entendre sur des ordinateurs 8 bits. Google le prouve en reconnaissant immédiatement la musique jouée. Et l'animation est rapide et fluide, les machines 16 bits ne font pas toujours aussi bien. Je vous conseille quand même de la visualiser avec dcmoto, c'est mieux que la vidéo Youtube :wink: Peut-on avoir le fichier .sd de la navette spatiale ?

Reste la dernière étape, passer de l'émulation à la vraie machine, ce sera la cerise sur le gâteau ! Je ne me suis pas précipité pour écrire le sketch Arduino car j'attendais une version stable du player, et je n'avais pas trop le temps. Normalement je devrais pouvoir me libérer dans une dizaine de jours. Tout va se jouer dans les temporisations. S'il le faut je déroulerai aussi la boucle sur l'Arduino, il y a 32 Ko de mémoire programme, ça doit tenir. Ce n'est pas gênant d'avoir un timing différent pour un octet, en particulier en début et en fin de secteur, car à ce moment là il faut faire un traitement de changement de bloc et donc prévoir une temporisation différente. Et comme il y a deux octets de synchronisation à la suite il devrait être assez facile de respecter la cadence. Au moins en théorie, la pratique réservera peut-être des surprises, mais j'ai fait mienne la devise des Ducs de Gadagne : "L'obstacle augmente mon ardeur".
Daniel
L'obstacle augmente mon ardeur.

Répondre