[Thomson] SDDRIVE

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
yogib33r
Messages : 79
Inscription : 22 févr. 2017 15:17
Contact :

Re: [Thomson] SDDRIVE

Message par yogib33r »

Bonjour Daniel et désolé pour le temps que j'ai mis à te répondre.
Et bien je suis encore loin de chez moi donc je ne pourrai te dire mais je le ferai quant je le pourrai :)
Très bonne fin de weekend à toi et Merci encore !

YoGi
---- thomson 4 ever ! ----
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

A l'occasion d'une nouvelle commande de circuits imprimés la version "Minibus" de SDDRIVE a été légèrement modifiée : Le module d'interface avec la carte SD est placé horizontalement et ne dépasse plus au-dessus du circuit imprimé. C'est à la fois plus pratique et plus esthétique.
A compter du 06/06/2020 ce nouveau modèle remplace l'ancien.

La version "classique" avec connecteur HE901 reste disponible sous l'ancienne forme jusqu'à épuisement du stock. Ensuite elle sera abandonnée, seule la version "Minibus" sera fabriquée. Voici les photos de cette nouvelle version :

sddrive-minibus-recto-2.jpg
sddrive-minibus-recto-2.jpg (55.59 Kio) Consulté 5080 fois
sddrive-minibus-verso-2.jpg
sddrive-minibus-verso-2.jpg (47.23 Kio) Consulté 5080 fois
sddrive-et-minibus-2.jpg
sddrive-et-minibus-2.jpg (36.68 Kio) Consulté 5080 fois
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SDDRIVE

Message par __sam__ »

C'est aussi plus pratique si on utilise une nape µ-sd comme moi qui déborde un peu sur l'écran TV avec l'organisation initiale.
Image
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
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] SDDRIVE

Message par 6502man »

j'ai la même nappe :wink:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
p0ke
Messages : 180
Inscription : 20 mai 2018 20:29

Re: [Thomson] SDDRIVE

Message par p0ke »

Bonjour,

Est-ce qu'il y a des tools public pour convertir des vidéos directement lisible avec sddrive ? (comme simon cats par exemple ?)
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] SDDRIVE

Message par __sam__ »

Oui, il faudrait que je publie mes trucs sur github, sinon tout est disponible dans le fil correspondant. Il faut fouiller les "attachements" viewtopic.php?p=142233#p142233
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 : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

Contrairement à __sam__ je n'ai pas développé d'outils génériques. Pour Simon's Cat c'est du pur bricolage.
Extraction de la vidéo d'un fichier bmp pour chaque image, écriture d'un programme de compression sur PC et d'un programme d'affichage sur Thomson. Je peux donner les sources mais personne ne saura les utiliser. On parie ?

Programme PC :

Code : Tout sélectionner

///////////////////////////////////////////////////////////////////////////////
// SDDRIVE_VIDEO_GENERATION.C  Preparation fichier .sd pour video avec sddrive
///////////////////////////////////////////////////////////////////////////////


#include <stdlib.h>
#include <stdio.h>
#include <string.h>

FILE *fbin;
FILE *fraw;
char ecran[8000];  //ecran Thomson
char cible[8000];  //image a afficher

//Chargement d'un fichier .bmp ///////////////////////////////////////////////
void Loadbmp(int frame)
{
 FILE *fbmp;
 char filename[256];
 sprintf(filename, "%04i.bmp", frame);
 printf("frame %s ", filename);
 fbmp = fopen(filename, "rb");
 if(fbmp == NULL) printf("Erreur d'ouverture");
 fseek(fbmp, 0x3e, SEEK_SET);
 fread(cible, 8000, 1, fbmp);
 fclose(fbmp);
 printf("\n");
}

//Generation d'un fichier video //////////////////////////////////////////////
void Video(char *name, int maxframe)
{
 int i;     //indice de boucle
 int time;  //temps ecoule depuis le debut de la video
 int frame; //numero de l'image en cours de traitement
 int index; //index dans l'ecran Thomson
 int saut;  //nombre d'octets non modifies
 int octet; //numero d'octet dans le bloc
 int son;   //echantillon de son sur 6 bits
 char filename[256];

 //initialisations
 sprintf(filename, "%s.bin", name);
 fbin = fopen(filename, "wb");      //fichier video pour sddrive_video
 strcpy(filename, name);
 sprintf(filename, "%s.raw", name);
 fraw = fopen(filename, "rb");      //fichier son en entree
 time = frame = saut = octet = 0;
 for(i = 0; i < 8000; i++) ecran[i] = cible[i] = 0;
 index = -1;

 //boucle de conversion
 while(frame < maxframe)            //pour toutes les images de la video
 {
  index++;
  if(index == 8000) index = 0;      //retour en debut d'ecran
  saut++;
  if(ecran[index] == cible[index])  //pas de difference
  if(saut < 255) continue;          //si le saut est <255 ne rien faire
  son = fgetc(fraw);                //lecture echantillon son
  fputc(son, fbin);                 //ecriture echantillon son
  fputc(saut, fbin);                //ecrire le saut dans le fichier
  fputc(cible[index], fbin);        //ecrire le nouvel octet dans le fichier
  ecran[index] = cible[index];      //mettre a jour la valeur de l'ecran
  saut = 0;                         //remettre le saut a zero
  octet += 3;                       //compteur d'octets dans le bloc
  if(octet == 510)                  //deux derniers octets du bloc
  {
   son = fgetc(fraw);                //lecture echantillon son
   fputc(son, fbin);                 //ecriture echantillon son
   son = fgetc(fraw);                //lecture echantillon son
   fputc(son, fbin);                 //ecriture echantillon son
   octet = 0;                        //raz compteur d'octets
   time += 33321;                    //temps ecoulé en cycles
   if(time > 40000 * frame) Loadbmp(++frame);  //nouvelle image
  }
 }

 //ajout de deux octets de fin et fermeture des fichiers
 fputc(0, fbin);  //indicateur de fin de video
 fputc(0, fbin);  //octet inutilise
 fclose(fraw);
 fclose(fbin);
}

///////////////////////////////////////////////////////////////////////////////
// Programme principal
///////////////////////////////////////////////////////////////////////////////
int main()
{
 Video("cat", 1810);  //nom du fichier et nombre d'images
 system("pause");
 return 0;
}

Programme Thomson :

Code : Tout sélectionner

/**************************************************\
*           S D D R I V E _ V I D E O              * 
*           (c) 2018 - Daniel Coulom               *  
*           http://dcmoto.free.fr/                 *
*           http://forum.system-cfg.com/           *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune  garantie  et *
* sans  engager  la  responsabilité  de  l'auteur. *
* Vous  pouvez  l' utiliser,  le  modifier  et  le *
* diffuser librement, en conservant cette  licence *
* et les références de l'auteur dans   toutes  les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/

* Ce programme utilise le controleur et l'interface
* SDDRIVE pour afficher une video en streaming.
* Le chargement et le lancement du programme sont
* realises grace a un secteur de boot.
    
/**************************************************\
*                Version 2018.07.14                *
\**************************************************/
* Historique
* 2018.07.14 adresse SD_LB0 calculee selon version 
* 2018.07.02 deplacement de la zone SD_LB0 en <$51 
* 2018.02.04 ajout du son
* 2018.02.03 debut du developpement

*------------------------------------------------------
* DEBUT DU PROGRAMME
*------------------------------------------------------
  ORG   $9900
  BRA   INIT          initialisations 

*------------------------------------------------------
* FONCTION D'ACCES A LA CARTE SD
*------------------------------------------------------
CMD18
  FCB   $52           read multiple block
  FDB   $0000         adresse bloc (poids fort)
  FDB   $0000         adresse bloc (poids faible)
  FCB   $FF           checksum non testee 
  FCB   $00           code retour attendu  
CMD12
  FCB   $4C           stop transmission
  FDB   $0000         dummy parameter
  FDB   $0000         dummy parameter
  FCB   $FF           checksum non testee 
  FCB   $00           code retour attendu  

*------------------------------------------------------
* MACRO DE LECTURE D'UN OCTET AVEC SDDRIVE
* Le registre A doit contenir $7F avant l'appel
* Valeur de l'octet dans le registre B en sortie
* Duree totale de la lecture = 48 cycles
*------------------------------------------------------
READ_BYTE MACRO
  CMPA  <$BF          lecture bit 7              (4)
  ROLB                pousser dans B             (2)
  CMPA  <$BF          lecture bit 6              (4)
  ROLB                pousser dans B             (2)
  CMPA  <$BF          lecture bit 5              (4)
  ROLB                pousser dans B             (2)
  CMPA  <$BF          lecture bit 4              (4)
  ROLB                pousser dans B             (2)
  CMPA  <$BF          lecture bit 3              (4)
  ROLB                pousser dans B             (2)
  CMPA  <$BF          lecture bit 2              (4)
  ROLB                pousser dans B             (2)
  CMPA  <$BF          lecture bit 1              (4)
  ROLB                pousser dans B             (2)
  CMPA  <$BF          lecture bit 0              (4)
  ROLB                pousser dans B             (2)
  ENDM

*------------------------------------------------------
* MACRO D'ENVOI DE 8 TOPS D'HORLOGE
* Le registre B doit contenir $7F avant l'appel
* Duree totale de la macro = 32 cycles
*------------------------------------------------------
SEND_CLOCK MACRO
  CMPB  <$BF          lecture bit 7              (4)
  CMPB  <$BF          lecture bit 6              (4)
  CMPB  <$BF          lecture bit 5              (4)
  CMPB  <$BF          lecture bit 4              (4)
  CMPB  <$BF          lecture bit 3              (4)
  CMPB  <$BF          lecture bit 2              (4)
  CMPB  <$BF          lecture bit 1              (4)
  CMPB  <$BF          lecture bit 0              (4)
  ENDM

*------------------------------------------------------
* DETECTION DU TYPE D'ORDINATEUR TO OU MO
*------------------------------------------------------
INIT
  ORCC  #$50          desactive les interruptions 
  LDA   >$FFF2        $FFF2: $F0(MO) et $70(TO)
  BPL   INIT3         TO detecte

*------------------------------------------------------
* Initialisations communes MO5-MO6 
*------------------------------------------------------
  LDU   #$A7C0        adresse selection banque video
  LDY   #$0000        adresse debut ecran
  LDB   #$07          octet couleur
  BSR   COLOR         initialisation couleurs
  LDA   >$FFF0        type d'ordinateur
  BNE   INIT2         MO6   

*------------------------------------------------------
* Initialisations MO5 
* Attention aux differences PIA systeme MO5 et MO6
*------------------------------------------------------
INIT1
  LDA   >$A7C0        port A du PIA systeme
  ANDA  #$E1          raz couleur cadre
  ORA   #$0E          couleur cadre 7 (blanc) 
  STA   >$A7C0        change couleur cadre
  BRA   INIT8         suite des initialisations

*------------------------------------------------------
* Initialisations MO6 
* Attention aux differences PIA systeme MO5 et MO6
*------------------------------------------------------
INIT2
  LDA   #$07          couleur cadre 7 (blanc) 
  STA   >$A7DD        change couleur cadre
  LDA   >$A7C0        PIA systeme 
  ANDA  #$FB          clear mute bit 
  STA   >$A7C0        modification PIA
  BRA   INIT8         suite des initialisations

*------------------------------------------------------
* Initialisations communes TO7-TO8 
*------------------------------------------------------
INIT3
  LDU   #$E7C3        adresse selection banque video
  LDY   #$5F40        adresse fin ecran
  STY   VIDEO3+2      initialisation adresse fin ecran
  LDY   #$4000        adresse debut ecran
  STY   VIDEO+1       initialisation adresse debut ecran
  LDB   #$C7          octet couleur
  BSR   COLOR         initialisation couleurs
  LDA   #$E0          valeur adresse EXCMD (poids fort)
  STA   READ+4        adresse execution EXCMD (pour CMD18)
  STA   FIN+4         adresse execution EXCMD (pour CMD12)
  LDA   >$FFF0        type d'ordinateur
  BEQ   INIT4         TO7=0   
  DECA                retrancher 1
  BEQ   INIT4         TO7/70=1
  BRA   INIT5         TO8=3   

*------------------------------------------------------
* Initialisations TO7 
*------------------------------------------------------
INIT4
  LDA   >$E7C3        port A du PIA systeme
  ORA   #$70          couleur cadre 7 (blanc) 
  STA   >$E7C3        change couleur cadre
  BRA   INIT8         suite des initialisations

*------------------------------------------------------
* Initialisations TO8 
*------------------------------------------------------
INIT5
  LDA   #$07          couleur cadre 7 (blanc) 
  STA   >$E7DD        change couleur cadre TO8
  BRA   INIT8         suite des initialisations

*------------------------------------------------------
* Initialisation couleur noir/blanc (Y = debut ecran)
* suivie de l'initialisation forme a zero
* Adresse du bit de selection banque video dans U
* Adresse octet couleur dans B
*------------------------------------------------------
COLOR   
  LDA   ,U            octet de selection banque video
  ANDA  #$FE          clear bit 0
  STA   ,U            selection video couleur
  LDX   #$1F40        compteur de boucles
  TFR   B,A           code couleur sur deux octets
COLOR1  
  STD   ,Y++          initialise deux octets
  LEAX  -2,X          comptage
  BNE   COLOR1        boucle
  INC   ,U            selection video forme
  LDX   #$1F40        compteur de boucles
  CLRA                code forme
  CLRB                sur deux octets 
  LEAY  -$1F40,Y      adresse debut ecran   
FORME  
  STD   ,Y++          initialise deux octets
  LEAX  -2,X          comptage
  BNE   FORME         boucle
  RTS

*------------------------------------------------------
* Initialisations communes 
*------------------------------------------------------
* Calcul adresse SD_LB0 selon version controleur SDDRIVE  
* L'adresse de SD_LB0 passe de $208E-$608E a $2051-$6051
* pour tous les controleurs a partir de juillet 2018
INIT8
  TFR   DP,A          valeur de DP dans A
  LDB   #$51          adresse de SD_LB0 version recente
  TFR   D,X           stockee dans le registre X   
  LDB   <$58          SD_SEL contient $55 depuis 20180702   
  CMPB  #$55          test version 20180702 ou plus recente
  BEQ   INIT9         version recente
  LDB   #$8E          adresse SD_LB0 des versions anciennes
  TFR   D,X           stockage dans le registre X

* Initialisation adresse du fichier .sd pour CMD18
INIT9
  LDD   ,X            octets poids fort adresse
  STD   CMD18+1       stockage pour commande CMD18
  LDD   2,X           octets poids faible adresse
  STD   CMD18+3       stockage pour commande CMD18

* Initialisation CNA en sortie
  TFR   DP,B          valeur actuelle de DP
  ADDB  #$87          $A7 pour MO et $E7 pour TO
  TFR   B,DP          initialisation DP
  LDA   <$CF          lecture registre de controle B
  ANDA  #$FB          raz bit 2 
  STA   <$CF          selection DDRB
  LDB   #$3F          set bits 0-5 
  STB   <$CD          bits CNA en sortie
  ORA   #$04          set b2
  STA   <$CF          selection PB

*-------------------------------------------------------
* Lancement de la commande CMD18 et saut de huit blocs
*-------------------------------------------------------
READ
  LDU   #CMD18        adresse commande CMD18
  JSR   $A028         EXCMD = execution commande
*                     READ+4 modifie en $E028 pour TO  
  BSR   SAUT          lecture bloc (secteur de boot)
  BSR   SAUT          lecture bloc (secteur sdplay)
  BSR   SAUT          lecture bloc (secteur sdplay)
  BSR   SAUT          lecture bloc (secteur sdplay)
  BSR   SAUT          lecture bloc (secteur sdplay)
  BSR   SAUT          lecture bloc (secteur sdplay)
  BSR   SAUT          lecture bloc (secteur sdplay)
  BSR   SAUT          lecture bloc (secteur sdplay)
  BRA   VIDEO         jouer la video
    
*------------------------------------------------------
* Saut d'un bloc de la carte SD
*------------------------------------------------------
SAUT
  LDA   #$7F          initialiser A pour lecture
  READ_BYTE           lecture d'un octet
  CMPB  #$FE          comparaison avec $FE
  BNE   SAUT          attente debut secteur
  LDX   #$0200        initialisation compteur
SAUT1
  READ_BYTE           lecture d'un octet
  LEAX  -1,X          decrementation compteur
  BNE   SAUT1         nouvelle lecture
  READ_BYTE           lecture d'un octet
  READ_BYTE           lecture d'un octet
  RTS                 retour

*------------------------------------------------------
* FIN DU PROGRAMME
*------------------------------------------------------
FIN
* arret de la lecture
  LDU   #CMD12        adresse commande CMD12 
  JSR   $A028         EXCMD = execution commande CMD12
*                     FIN+6 modifie en $E028 pour TO  
* recommencer la lecture du fichier
  LEAS  1,S           retablir pointeur pile systeme
  LDX   #READ         adresse du debut du programme
  PSHS  X             empiler pour retour au debut
  RTS

*-----------------------------------------------------
* Affichage de la video
* 53*2+8+194*170+227 = 106+8+32980+227 = 33321 µs/bloc
* 172 echantillons 5162 Hz
*-----------------------------------------------------
VIDEO
  LDU   #$0000        adresse memoire video
  LEAU  -1,U          initialiser a l'adresse precedente
  LDA   #$7F          initialisation pour lecture octet
VIDEO1
  READ_BYTE           lecture octet                   (48)
  CMPB  #$FE          test debut de bloc               (2)
  BNE   VIDEO1        attente debut de bloc            (3)
  LDB   #$AA          compteur de boucle 170           (2)
  PSHS  B             empilage compteur                (6)
VIDEO2   
  LDA   #$7F          initialisation lecture octet     (2)
  READ_BYTE           lecture de octet son            (48)
  STB   <$CD          envoi echantillon                (4)
  READ_BYTE           lecture octet saut              (48)
  BEQ   FIN           fin du fichier video             (3) 
  CLRA                saut poids fort                  (2)
  LEAU  D,U           adresse courante dans écran      (8)
VIDEO3
  CMPU  #$1F40        test de fin ecran                (5)
  BLO   VIDEO4        lire et afficher un octet        (3)
  LEAU  -$1F40,U      retour au debut                  (8)
VIDEO4
  LDA   #$7F          initialisation lecture octet     (2)
  READ_BYTE           lecture octet forme             (48)  
  STB   ,U            affichage octet forme            (4)
  DEC   ,S            decrementation compteur          (6)
  BNE   VIDEO2        fin du bloc                      (3) 
VIDEO5
  PULS  B             depilage compteur                (6)
  LDA   #$7F          initialisation lecture octet     (2)
  READ_BYTE           lecture octet son               (48)
  STB   <$CD          envoi echantillon                (4) 
  READ_BYTE           lecture octet son               (48) 
  PSHS  B             empilage echantillon             (6)
  LDA   #$7F          initialisation lecture octet     (2)
  READ_BYTE           premier octet de CRC            (48) 
  READ_BYTE           deuxieme octet de CRC           (48)
  PULS  B             depilage dernier echantillon     (6)
  STB   <$CD          envoi echantillon                (4)
  LBRA  VIDEO1        bloc suivant                     (5)
  
  END
Daniel
L'obstacle augmente mon ardeur.
p0ke
Messages : 180
Inscription : 20 mai 2018 20:29

Re: [Thomson] SDDRIVE

Message par p0ke »

Top,

j'vais essayer de me débrouiller avec ça, merci à vous deux.

ps : j'adore le "Du coup, pour me venger voici le fichier SD sans protection" !!!!

:D
p0ke
Messages : 180
Inscription : 20 mai 2018 20:29

Re: [Thomson] SDDRIVE

Message par p0ke »

Tiens d'ailleurs si vous avez d'autres liens "off" de clips pour sddrive je suis preneur. Mes enfants adorent (5 ans & 2,5 ans).
ils aiment bien bad apple, simons cat, et nyan cat :D
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

p0ke a écrit : 07 juin 2020 18:50 j'adore le "Du coup, pour me venger voici le fichier SD sans protection" !!!!
C'est quoi cette histoire de fichier SD sans protection ? Les démonstrations pour SDDRIVE ne sont pas protégées. Ce n'est pas le genre de __sam__ ni le mien. Au contraire nous cherchons toujours à expliquer les techniques utilisées et nous communiquons volontiers toutes les sources.

Les vidéos pour SDDRIVE vont se faire rares, car maintenant les développeurs lui préfèrent SDSTREAM.
J'ai donné un exemple dans le fil dédié : viewtopic.php?f=25&t=10991

Image
Daniel
L'obstacle augmente mon ardeur.
p0ke
Messages : 180
Inscription : 20 mai 2018 20:29

Re: [Thomson] SDDRIVE

Message par p0ke »

Daniel, c'était en réponse d'une censure de google par rapport à une vidéo posté par sam sur youtube !
Ah je ne savais pas que sdstream était remplacé (ou ce n'est pas le cas ?) par sddrive.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

Ah non, SDSTREAM n'est pas remplacé, au contraire c'est tout nouveau, et pas du tout en concurrence avec SDDRIVE.

SDSTREAM n'émule pas les disquettes, c'est seulement une mémoire de masse séquentielle à accès rapide en lecture seule. Idéale pour la vidéo et la musique, mais pas seulement.
Daniel
L'obstacle augmente mon ardeur.
p0ke
Messages : 180
Inscription : 20 mai 2018 20:29

Re: [Thomson] SDDRIVE

Message par p0ke »

Ah ok. Honnêtement je me perds un peu parfois.
Ayant SDDRIVE je voulais juste à la base, ripper https://www.youtube.com/watch?v=_ZKZ_lQ5FWQ pour la faire tourner sur mon thomson sddrive!!!
Je me demande du coup si il n'y a pas moyen de faire une super sddrive qui fait tout ça !?!
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] SDDRIVE

Message par Daniel »

J'ai peur que ce clip ne soit pas très spectaculaire après réduction en 320x200, même avec le talent de __sam__ :wink:
Daniel
L'obstacle augmente mon ardeur.
p0ke
Messages : 180
Inscription : 20 mai 2018 20:29

Re: [Thomson] SDDRIVE

Message par p0ke »

bha c'est pour les enfants, ils imaginent beaucoup. Après avoir vu bad apple sur to et sur pc, ils reviennent sur to !
je ne veux pas rater cette occasion !
Répondre