Thomson TO8 : Lancer de rayons et Animation.

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

Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

J'ouvre ce sujet pour poursuivre la discussion de viewtopic.php?f=1&t=3041&start=510#p164716
sur le ray-tracing et les thomson.

On peut envisager de calculer les images de ray-tracing sur une machine moderne, par exemple à l'aide de python. (NB : les calculatrices actuelles de lycée font cela très bien !). Une première question à laquelle je ne sais pas répondre : comment en faire une sortie lisible par un Thomson de dernière génération (dans un des formats bitmaps ou 640x200) ? Il y a certes le format map mais il reste pour moi un mystère et il n'est peut-être pas le plus adapté.

L'animation à l'aide de SDDRIVE suppose-t-elle une compression supplémentaire (ou une dégradation de la résolution) ? Ou le problème est ici différent de celui d'une vidéo quelconque puisqu'on peut s'attendre à ce que les images diffèrent peu les unes des autres (si on fait rouler la boule par exemple) ?
Asic512
Xavier_

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Xavier_ »

Salut Asic512,

Merci pour ta question, mais il semblerait que ce soit déjà le 14 juillet chez toi !

Donc, tu veux faire une vidéo avec le SDDrive, et tu demandes comment faire ?

Peux-tu demander à la modération de couper le fil ici:viewtopic.php?f=1&t=3041&start=510#p164270
Avec l'accord de Michel, Samuel et Daniel…
"Ray-tracing sur machine 8/16bis..."
Ce serai plus sympa à suivre.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Daniel »

La production de vidéo pour Thomson est rendue possible avec les cartes SD. Depuis 2013 nous en faisons avec SDMOTO. Depuis cette date les performances ne cessent de s'améliorer, avec SDDRIVE mais pas seulement. Le meilleur débit a été réalisé avec SDANIM7 et j'ai des idées pour l'améliorer encore.

Les méthodes de compression et d'affichage des images sont très complexes. J'ai réussi avec des images noir et blanc (démo "cat" par exemple), mais pour la couleur seul __sam__ maîtrise la technique. Il faudra demander son aide.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par __sam__ »

Le raytracing N&B marche pas mal non plus, cf la démo TicToc sur ZX.

Dans l'autre fil j'ai passé une diskette contenant un générateur, un player et deux vidéos au format "MAP". A l'époque je faisais ca souvent de laisser tourner mon TO9 pour générer des animations avec l'adaptation du programme "Cinetix" de SVM de 1988
ImageImageImageImage

Exemple de visu du résultat (et execution du programme de génération à la fin... même en x10 c'est lent!)
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
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

Je m'excuse par avance : je n'ai que des questions un peu théoriques probablement assez naïves. Mais je n'en apprécierai que mieux toutes ces magnifiques réalisations !

@sam:
Oui, merci, j'y avais jeté un œil en le lançant dans dcmoto.

On peut imaginer calculer des images de ray-tracing (dans un des formats standard du TO8) sur une machine moderne et les charger en mémoire d'un coup sur un TO8 (on peut en rentrer une vingtaine peut-être dans 500 ko ?). Est-il possible de les faire défiler en boucle de manière fluide par une routine en assembleur sans grande ruse technique ? Ou bien est-ce déjà trop lent et trop simpliste comme approche ?

@daniel: j'avais lancé la vidéo "Bad Apple" sur un vrai TO8 avec SDDRIVE. Mais je n'avais pas compris que SDANIM7 faisait encore mieux. Faute de TO8 et d'arduino, j'ai voulu voir "SDANIM7 - Bad Apple" dans dcmoto mais je n'ai pas réussi à lancer quoi que ce soit (j'avais pourtant coché SDAMIN7). Le "dir" renvoie quelque chose d'illisible mais cela doit être normal.
Asic512
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Daniel »

Pour lancer la démonstration SDANIM7 avec dcmoto_20200429 en mode TO8D :
- Dans les Options, choisissez TO8D
- Dans Supports amovibles chargez la disquette sdanim7_to8.fd et la carte SD sdanim7-bad-apple_moto.sd
- Dans Supports amovibles cochez les périphériques Lecteurs de disquettes et Interface SDANIM7
- A l'écran d'accueil du TO8D sélectionnez l'option B

Vous obtenez l'écran suivant :

##.png
##.png (1.73 Kio) Consulté 4423 fois

Tapez ENTREE. Vous obtenez l'écran suivant :

##_1.png
##_1.png (2.08 Kio) Consulté 4423 fois

Tapez C. La démonstration démarre...

##_2.png
##_2.png (2.23 Kio) Consulté 4423 fois

Avec les autres ordinateurs c'est la même procédure, sauf qu'il faut choisir la disquette adaptée à l'ordinateur (mo5.fd, to7.fd ou to8.fd) et sélectionner un contrôleur de disquette 3"1/2 dans les options si l'ordinateur n'en dispose pas en interne. On peut aussi charger le programme sdanim7 à partir d'une cassette, dans ce cas le contrôleur de disquettes n'est pas nécessaire.
Daniel
L'obstacle augmente mon ardeur.
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

@Daniel : merci j'ai essayé SDANIM7 sur dcmoto. Mais si je comprends bien les derniers développements, il y a (ou aura) encore mieux avec SDSTREAM !

J'ai maintenant un générateur de "lancer de rayons" programmé en python : il me crée des .BIN de 8ko correspondant à RAMA (Noir et Blanc/320x200) que je charge par loadm.

Sur le TO8 de dcmoto, j'ai essayé d'obtenir en BASIC 512 une animation en chargeant depuis un disque virtuel une dizaine de tels fichiers alternativement en RAMA/RAMB, le basculement de l'affichage étant assuré par console,,,,4 et console,,,,5). Sans surprise, c'est très saccadé.
Auriez-vous des conseils de lecture pour obtenir une meilleure animation à partir de ces images ? Des codes en assembleur que je pourrais essayer de comprendre ?

Bon week-end à tous,
Asic512
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par __sam__ »

Sans aller jusqu'à SDStream, on peut faire mieux que SDAnim7 même avec un simple SDrive: viewtopic.php?p=144980#p144980
Image
Il y a des sources fournies quelque part dans le fil. Il faut juste clicker sur le bon lien ;)
(Un jour je mettrais ca sur mon github peut-être.)

Après quant à savoir ce que l'avenir du passé nous livrera(*) pour SDStream.... seul quelques initiés peuvent le savoir.
____
(*) ou nous aurait livré si le Covid-19 n'avait pas été là.


Quant à tes animation au format BIN, ce qu'il te faut faire c'est de tous les charger en mémoire (14 ou 30 banques de 16ko, ca fait pas mal d'images) et d'avoir une routine en ASM appelable depuis le basic pour recopier 8ko directement en ram VIDEO le plus vite possible. Ensuite une boucle FOR pour itérer les BANK et un appel à EXEC pour l'affichage et ca roule. Tu auras une belle animation. Exemple de routine (pas testée):

Code : Tout sélectionner

    ORG     $9F00
    
    FCB     $8C             ; CMPX #nnnn astuce de c0d3r pour sauter par dessus une donnée de 16 birs
START
    FDB     $A000           ; adresse en RAM à copier
INIT    
    PSHS    D,X,Y,U,DP,CC   ; sauvegarde du contexte
    STS     BAK     
    
    LDA     $E7C3
    ORA     #1
    STA     $E7C3           ; force RAMA (forme)
    
    ORCC   #$50        ; desactive les interruptions
    LDS     START           ; adresse zone mémoire à copier
    LDU     #$4000+6
    LDA     #200

LOOP                        
    PULS    B,DP,X,Y        ; (11)
    PSHU    B,DP,X,Y        ; (11)
    LEAU    6+6,U           ; (5)   ; 6 octets copiés en 27 cycles

    PULS    B,DP,X,Y        ; (11)
    PSHU    B,DP,X,Y        ; (11)
    LEAU    12,U            ; (5)   ; 6 octets copiés en 27 cycles

    PULS    B,DP,X,Y        ; (11)
    PSHU    B,DP,X,Y        ; (11)
    LEAU    12,U            ; (5)   ; 6 octets copiés en 27 cycles

    PULS    B,DP,X,Y        ; (11)
    PSHU    B,DP,X,Y        ; (11)
    LEAU    12,U            ; (5)   ; 6 octets copiés en 27 cycles

    PULS    B,DP,X,Y        ; (11)
    PSHU    B,DP,X,Y        ; (11)
    LEAU    12,U            ; (5)   ; 6 octets copiés en 27 cycles

    PULS    B,DP,X,Y        ; (11)
    PSHU    B,DP,X,Y        ; (11)
    LEAU    6+4,U           ; (5)   ; 6 octets copiés en 27 cycles

    PULS    X,Y             ; (9)   ; 4 octets copiés en 23 cycles
    PSHU    X,Y             ; (9)
    LEAU    4+6,U           ; (5)
; 40 octets = 6*6 + 4
;           = 6*27 + 23 cycles pour la recopie

    DECA                    ; (2)   ; repete 200 fois
    BNE     LOOP            ; (3)
; 200 lignes copyées en 38ms ==> ~20fps

    LDS     #0              ; restaure contexte
BAK SET     *-2             
    PULS    D,X,Y,U,DP,CC,PC    ; retour au basic
En basic tu aura quelque chose comme ca

Code : Tout sélectionner

10 BANK2:CLEAR,,,,&H9F00-1 ' toujours -1 dans le clear
20 LOADM "COPY.BIN" ' ou se faire la collection de DATA
30 NUM=10 ' NB images
40 FOR I=1 TO NUM
50    BANK 1+I ' on reserve bank 2, 3, 4
60    LOADM "IMG"+STR$(I)+".BIN" ',&HA000 si besoin
70 NEXT
80 DO
90     FOR I=1 TO NUM
100      BANK 1+I
110      EXEC &h9F00
120   NEXT
130 LOOP
On peut faire mieux et mettre 2 fichiers images BIN en $A000 pour économiser de la mémoire, mais dans un 1er temps c'est pas nécessaire (mais je te laisse faire les adaptations si besoin.)
Dernière modification par __sam__ le 09 juin 2020 20:15, modifié 2 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 : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Daniel »

Il n'y a pas de miracle, il est impossible d'afficher 50 images par seconde au format MAP en Basic.
Il faut à la fois une technique de compression vidéo adaptée et un programme d'affichage en langage machine.

Avec SDSTREAM la vitesse d'acquisition d'un octet est plus que doublée par rapport à SDANIM7. Les vidéos seront potentiellement meilleures, mais comme dans tout projet informatique le résultat dépend surtout du talent des développeurs.
Daniel
L'obstacle augmente mon ardeur.
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

Quant à tes animation au format BIN, ce qu'il te faut faire c'est de tous les charger en mémoire (14 ou 30 banques de 16ko, ca fait pas mal d'images) et d'avoir une routine en ASM appelable depuis le basic pour recopier 8ko directement en ram VIDEO le plus vite possible. Ensuite une boucle FOR pour itérer les BANK et un appel à EXEC pour l'affichage et ca roule. Tu auras une belle animation. On peut en parler dans un fil dédié si tu veux.
Oui c'est cela qui m'amuserait : mettre en mémoire le maximum d'images N/B précalculées de 8ko (je ne les ai même pas compressées) une fois pour toutes. Ensuite les copier au fur et à mesure en mémoire vidéo pour les afficher. Je suis à la recherche de documents ou de sites à regarder : est-ce que je trouverais mon bonheur sur la page "vector balls" de pulsdemo.com ?
Asic512
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par __sam__ »

oops vous avez répondus alors que je modifiais mon message. Asic relis le.. je crois qu'il contient ce dont tu as besoin. La routine de copie est pas mal optimisée (copie RAM à RAM à la vitesse de 200ko/secondes, soit autour de 20-25imgs/secs en basic + ASM).

Apres le mieux si tu veux avoir plus d'images en RAM est de trouver un format mémoire où on ne stocke que ce qui change à l'écran entre 2 images. Ca peut être un truc genre ce qui est utilisé dans SDAnim: saut + données. Exemple: <saut, octet1, octet2, octet3, octet4, octet5, octet6> qui se décode avec quelque chose comme "LDB ,U+; ABX; PULU D,Y,S; EXG U,X; PULU D,Y,S; EXG U,X". Ca saute un certain nb d'octets inchangés, puis recopie les 6 octets suivants à l'écran (étant entendu que quand un octet change, ses voisins immédiats dans la ligne changent aussi). Après il faut détecter quand U dépasse $DFFF et passer à la bank ram suivante etc.. bref c'est bcp plus compliqué.
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
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

@sam Merci beaucoup ! Il va me falloir un certain temps pour "digérer" et mettre en œuvre tout cela !

En fait, il m'a déjà fallu un certain temps pour comprendre ce qu'il fallait mettre en tête et surtout en fin d'un fichier BIN (j'ai trouvé les informations dans l'ancien forum dcmoto et sur le site http://collection.thomson.free.fr à la page sur les fichiers MAP) pour qu'il soit lisible par le TO8 ...
Asic512
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

Voici la suite de mes aventures. Je travaille sur mac OS et dcmoto (via wine/PlayOnMac).

J'ai téléchargé c6809 sur le site de PULS. J'ai réussi à le compiler. Le programme a l'air de bien assembler exemple.ASS (je récupère un binaire identique à celui fourni).

J'ai ensuite copié-collé le code de Sam. Là c6809 a râlé. J'ai dû rajouter une ligne

Code : Tout sélectionner

(main)MAIN.ASM   * Marquage du programme principal
Il a encore râlé : j'ai retouché un peu l'indentation ou les sauts de ligne. Ensuite c6809 a pu assembler le code.

J'ai mis le binaire créé et mes images sur un fichier .fd . Puis j'ai simulé la frappe du programme basic de Sam.

Code : Tout sélectionner

5 CLS: screen 7,0,0:locate,,0
10 BANK2:CLEAR,,,&H9F00-1 ' toujours -1 dans le clear
20 LOADM "COPY.BIN" 
30 NUM=2 ' NB images
40 FOR I=1 TO NUM
50    BANK 1+I ' on reserve bank 2, 3, 4
60    LOADM "FORMER"+CHR$(I+48)+".BIN",&HA000-&H4000 
70 NEXT
80 DO
90     FOR I=1 TO NUM
100      BANK 1+I
110      EXEC &h9F00
120   NEXT
130 LOOP

NB : le décalage en ligne 60 est dû au format que j'utilise pour mes images BIN (identique à celui créé par un SAVEM de la mémoire écran). Il y a dedans l'information pour les charger en &H4000. Or on les veut en &HA000.

Je fais RUN et là tout marche ! Enfin presque ... des traits parasites horizontaux apparaissent sur les images et se multiplient. Je mettrais bien une copie d'écran mais je ne dois pas avoir les droits pour le faire ...
Je me demande donc : est-ce que j'ai fait le bon décalage en l.60 ? Le problème pourrait venir de l'image mais je crois bien avoir fait un format d'image BIN correct.

Code : Tout sélectionner

10 poke &he7C3,1 or peek( &he7C3) 'passage à la mémoire forme
20 loadm"FORMER1"
m'affiche une image (qui a l'air) correcte. J'ai même fait un essai avec l'animation stupide à une seule image avec une image créée par les lignes :

Code : Tout sélectionner

10 poke &he7C3,1 or peek( &he7C3) 'forme
20 savem"FORMER1",&h4000,&h5F3F,0
Et le résultat est le même, traits parasites qui se multiplient ... C'est grave docteur ?
Asic512
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par __sam__ »

C'est probablement de ma faute au niveau du CLEAR: ca réserve entre &H9F00 et &H9FFF, mais pas en &HA000. Il faut faire

Code : Tout sélectionner

BANK 2:CLEAR ,&HA000-1,,&H9F00-1
je pense.
Dernière modification par __sam__ le 09 juin 2020 20:18, modifié 2 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
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

Merci de la réponse. J'ai réessayé avec le CLEAR,&HA000-1 en plus et c'est toujours la même histoire ... Du coup, j'ai essayé le programme suivant

Code : Tout sélectionner

10 CLS: screen 7,0,0:locate,,0:CLEAR,,,&H9F00-1
20 BANK2:CLEAR,&HA000-1
30 LOADM "COPY.BIN"
40 DO
50 EXEC &h9F00
60 LOOP
qui devrait me laisser un écran pas très joli mais fixe (en théorie on copie sur la ramA toujours la même chose). Or de nouveau j'ai des traits parasites qui se multiplient. Est-ce que j'ai mal assemblé le COPY.BIN ?
Asic512
Répondre