Logicielsmoto.com

Nous sommes le 05 Oct 2024, 13:37

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 13 messages ] 
Auteur Message
 Sujet du message: Quizz : 2049bits
MessagePosté: 01 Déc 2012, 23:36 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1809
Localisation: Brest
Bon, j'avais un truc qui trainait dans mes D7 depuis un moment, et je me suis dit qu'il était temps d'en faire un quizz ouvert à tous les programmeurs thomson.
Alors.... QUIZZZzzzz.... que fait le programme suivant d'exactement 256 octets(*) ? :voyons:
Code:
****************************************
* debut  : $9000
* fin    : $90FF
* taille : 256
****************************************

        org     $9000

init    fcb     $CE,$90,$74,$E6,$C0
        fcb     $BD,$E8,$03,$C1,$0D
        fcb     $26,$04,$C6,$0A,$20
        fcb     $F5,$31,$C4,$31,$3F
        fcb     $26,$FC,$E6,$C0,$26
        fcb     $EB,$1A,$50,$CE,$E7
        fcb     $C5,$6C,$C4,$37,$12
        fcb     $34,$12,$86,$12,$8E
        fcb     $00,$7C,$36,$12,$30
        fcb     $5B,$4F,$34,$06,$A6
        fcb     $01,$34,$06,$A6,$84
        fcb     $44,$24,$FB,$EC,$06
        fcb     $E6,$63,$E7,$E2,$EC
        fcb     $62,$47,$56,$E7,$E2
        fcb     $47,$56,$47,$56,$47
        fcb     $56,$47,$56,$EA,$E0
        fcb     $A6,$E0,$3D,$C4,$10
        fcb     $54,$E8,$E4,$E7,$01
        fcb     $6C,$63,$26,$06,$6C
        fcb     $62,$26,$02,$6C,$61
        fcb     $A6,$03,$84,$02,$27
        fcb     $CB,$32,$64,$35,$44
        fcb     $EF,$06,$E7,$05,$3F
        fcb     $39,$24,$20,$63,$61
        fcb     $74,$20,$74,$2E,$63
        fcb     $0D,$0D,$2F,$2A,$20
        fcb     $1B,$5C,$77,$77,$77
        fcb     $2E,$70,$75,$6C,$73
        fcb     $64,$65,$6D,$6F,$73
        fcb     $2E,$63,$6F,$6D,$1B
        fcb     $5C,$20,$2A,$2F,$0D
        fcb     $0D,$6D,$61,$69,$6E
        fcb     $28,$74,$29,$20,$7B
        fcb     $0D,$20,$66,$6F,$72
        fcb     $28,$74,$3D,$30,$3B
        fcb     $21,$4C,$50,$49,$4E
        fcb     $3B,$74,$2B,$2B,$29
        fcb     $0D,$20,$20,$70,$75
        fcb     $74,$63,$68,$61,$72
        fcb     $28,$28,$74,$2A,$28
        fcb     $74,$3E,$3E,$39,$7C
        fcb     $74,$3E,$3E,$31,$33
        fcb     $29,$29,$26,$31,$36
        fcb     $29,$3B,$0D,$7D,$0D
        fcb     $24,$20,$63,$63,$20
        fcb     $74,$2E,$63,$0D,$1B
        fcb     $5C,$1B,$5C,$24,$20
        fcb     $2E,$2F,$61,$2E,$6F
        fcb     $75,$74,$20,$3E,$2F
        fcb     $64,$65,$76,$2F,$61
        fcb     $75,$64,$69,$6F,$0D
        fcb     $00

        end     init
Il tourne :tourne: sur n'importe quel ordi de la gamme TO ayant 256 octets de ram en $9000. Pour ceux qui n'ont pas envie de resaisir 1 par 1 les 256 octets du source ci-dessus, il existe une version K7 (lien temporaire sur cjoint). [EDIT] version K7 jointe au message:
Fichier(s) joint(s):
quizz.zip [836 Octets]
Téléchargé 1738 fois


Messieurs les programmeurs, à vos machines, prêts, trouvez! Image

Une fois trouvé je publierais le code source et les explications dans ce fil.
____
(*) oui 256 octets car comme tout bon coder qui se fait vieux, j'ai du mal (la flemme) à entreprendre des trucs plus volumineux.


Dernière édition par Samuel Devulder le 24 Aoû 2015, 11:34, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 02 Déc 2012, 08:35 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
j'ai comme dans l'idée qu'il faut avoir pas loin un ordi sous unix pour que ca fasse quelquechose, et p'tet bien une sorte de cable entre les 2.

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 02 Déc 2012, 09:51 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1075
Localisation: France (24)
Pour ma part, Samuel m'avait donné la réponse avant qu'elle ne soit posée ici, donc je ne répondrai pas :D

PS : Les participants peuvent poser des questions plus générales auxquelles Samuel répondra par oui ou non, pour cerner progressivement le sujet, parce que trouver du premier coup la réponse à la question n'est pas évident.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 02 Déc 2012, 13:59 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1809
Localisation: Brest
gilles a écrit:
j'ai comme dans l'idée qu'il faut avoir pas loin un ordi sous unix pour que ca fasse quelquechose, et p'tet bien une sorte de cable entre les 2.

Pas exactement non... même s'il y a un petit lien avec unix. En tout cas on a besoin d'aucun hardware supplémentaire. Un simple TO7 tout neuf devrait suffire. En revanche, j'ai un doute sur le fait qu'un MO5 puisse faire tourner le code (hors organisation mémoire mémoire différente).

Voici le code atteignable désassemblé:
Code:
9000 CE9074     LDU    #$9074              3
9003 E6C0       LDB    ,U+                 6
9005 BDE803     JSR    $E803               8
9008 C10D       CMPB   #$0D                2
900A 2604       BNE    $9010               3
900C C60A       LDB    #$0A                2
900E 20F5       BRA    $9005               3
9010 31C4       LEAY   ,U                  4
9012 313F       LEAY   -$01,Y              5
9014 26FC       BNE    $9012               3
9016 E6C0       LDB    ,U+                 6
9018 26EB       BNE    $9005               3
901A 1A50       ORCC   #$50                3
901C CEE7C5     LDU    #$E7C5              3
901F 6CC4       INC    ,U                  6
9021 3712       PULU   A,X                 8
9023 3412       PSHS   X,A                 8
9025 8612       LDA    #$12                2
9027 8E007C     LDX    #$007C              3
902A 3612       PSHU   X,A                 8
902C 305B       LEAX   -$05,U              5
902E 4F         CLRA                       2
902F 3406       PSHS   B,A                 7
9031 A601       LDA    $01,X               5
9033 3406       PSHS   B,A                 7
9035 A684       LDA    ,X                  4
9037 44         LSRA                       2
9038 24FB       BCC    $9035               3
903A EC06       LDD    $06,X               6
903C E663       LDB    $03,S               5
903E E7E2       STB    ,-S                 6
9040 EC62       LDD    $02,S               6
9042 47         ASRA                       2
9043 56         RORB                       2
9044 E7E2       STB    ,-S                 6
9046 47         ASRA                       2
9047 56         RORB                       2
9048 47         ASRA                       2
9049 56         RORB                       2
904A 47         ASRA                       2
904B 56         RORB                       2
904C 47         ASRA                       2
904D 56         RORB                       2
904E EAE0       ORB    ,S+                 6
9050 A6E0       LDA    ,S+                 6
9052 3D         MUL                       11
9053 C410       ANDB   #$10                2
9055 54         LSRB                       2
9056 E8E4       EORB   ,S                  4
9058 E701       STB    $01,X               5
905A 6C63       INC    $03,S               7
905C 2606       BNE    $9064               3
905E 6C62       INC    $02,S               7
9060 2602       BNE    $9064               3
9062 6C61       INC    $01,S               7
9064 A603       LDA    $03,X               5
9066 8402       ANDA   #$02                2
9068 27CB       BEQ    $9035               3
906A 3264       LEAS   $04,S               5
906C 3544       PULS   B,U                 8
906E EF06       STU    $06,X               6
9070 E705       STB    $05,X               5
9072 3F         SWI                       19
9073 39         RTS                        5

Déjà un 1er indice: le code est bien plus petit que 256 octets, donc le reste (141 octets) doivent probablement être des data, comme on s'en doute avec le contenu du fichier K7.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 02 Déc 2012, 15:34 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
j'ai fini par réussir à lui faire faire son beep (j'avais déjà obtenu obtenu un sample similaire en faisant tourner le code qui s'affiche sur un linux) (sauf que la condition LPIN n'est pas reconnue... dans un .h peut etre?)
Initialement ma version de teo (1.8.1 installée à partir du .deb) était muette... et j'ai mis un peu de temps à recompiler à partir de sourceforge car il faut renommer quelques to8.h en teo.h dans le code.
comme c'était muet je pensais que la bidouille consistait à injecter le code C sur un système unix...

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 02 Déc 2012, 16:10 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1809
Localisation: Brest
oui, sous TEO1.8.1 il est muet à cause d'un bug dans la gestion de $E7C1 je pense (avec le 1.7.6 c'est ok). Je ne sais plus si j'en ai parlé à préhisto.

Le coup du LPIN c'est juste pour documenter le code: on sort en appuyant sur le bouton du lightpen.

Au fait je ne sais pas pk, mais sous DCMOTO et TEO le fichier K7 marche bien; mais sous MESS c'est une catastrophe: il n'est pas complètement chargé en mémoire et je ne comprends pas pourquoi :L


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 02 Déc 2012, 21:12 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1075
Localisation: France (24)
Samuel Devulder a écrit:
oui, sous TEO1.8.1 il est muet à cause d'un bug dans la gestion de $E7C1 je pense (avec le 1.7.6 c'est ok). Je ne sais plus si j'en ai parlé à préhisto.

Oui oui. Je pense que sur la version sur SourceForge, ça doit réagir, puisque j'ai restauré les anciens programmes.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 04 Déc 2012, 07:58 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1075
Localisation: France (24)
gilles a écrit:
et j'ai mis un peu de temps à recompiler à partir de sourceforge car il faut renommer quelques to8.h en teo.h dans le code.

Désolé. Il y a des push que je n'ai pas encore fait.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: La réponse!
MessagePosté: 08 Déc 2012, 23:45 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1809
Localisation: Brest
Bon, au bout d'une semaine, je pense qu'il est temps de fournir la réponse.

Bon d'abord le titre: pourquoi 2049bits? Facile: 2049=256*8+1. Les 256 c'est la taille du code en octets et le 1, c'est pour le bit du buzzer qui est utilisé pour produire de la musique. Enfin, je dis musique mais en vrai du "son" serait plus fidèle (comme l'a souligné Gilles). Il n’empêche que ce son peut être produit par tous les thomson, même s'ils ne sont pas équipés de l'extension Musique&Jeux.

Ce son est généré à 8khz précisément en utilisant le timer via un algorithme et non pas via une partition (les 256 octets n'y suffiraient pas). Cet algorithme est assez simple puisqu'il tient en une seule ligne de C (affiché par le programme). Il peut être compilé sur les systèmes unix et sa sortie redirigée sur /dev/audio pour produire le même son que sur Thomson. Ce principe provient de la page "Algorithmic synphonies from one line of code" dont le but est de produire des mélodies complexes avec une seule ligne de C. Les résultats obtenus sont très surprenants.

C'est d'ailleurs le fait que périphérique audio unix fonctionne par défaut à 8khz qui impose la fréquence du programme. Cette fréquence est intéressante car elle est suffisamment élevée pour produire un son correct mais pas trop de sorte à pouvoir implémenter l'algorithme de calcul multi-précision (jusqu'à 24bits) sur le 6809e. Cet algorithme ne fonctionnant pas en temps constant, le timer est utilisé pour réguler sa vitesse. Il est programmé en mode continu et fait passer à 1 le CTO du 6846 (repris sur le bit 0 de $E7C0) tous les 125 cycles du processeur, c'est à dire tous les 8khz. Il suffit donc de tester ce bit ($9035-$9038) et d'attendre qu'il passe à 1 pour générer un nouvel échantillon.

L'algorithme boucle indéfiniment jusqu'à ce le bit 1 de $E7C3 (bouton ligth-pen) passe à 1. Ce test est intéressant car il fonctionne sur toute la gamme TO tout en étant bien plus rapide qu'un appel au moniteur (impossible vu le peu de cycles laissés au programme pour calculer la formule). Toujours pour des raisons de compacité, le code fait l'économie de préserver les registres (code commenté), mais il contient quand même un truc permettant de le faire fonctionner indifféremment sous la cartouche assembler ou le basic: un SWI suivi d'un RTS ($9072-$9073). Le truc est que SWI ne fait rien de spécial en basic (la routine de traitement ne contient qu'un RTI) et donc le basic passe au travers comme s'il n'existait pas. Il tombe ensuite sur le RTS, et puisque DP et SP (ainsi que les registres du timer) ont leur valeur d'entrée du programme, on revient gentiment au basic sans soucis.

Maintenant le source (brut de fonderie):
Code:
***************************************
* Symphonie en 1 bit.
*
* Inspiration de:
*     http://tinyurl.com/72jwuvy
*
* Code C:
*  main(t) {
*    for(t=0;LPIN==0;t++) putchar(
*
*       (t*(t>>9 | t>>13))&16
*
*  );}
*
* Compatible tous TO. Sortie par
* pression lightpen.
*
* Les nombres manipulés sont sur 24bits.
*
* Samuel Devulder Avril 2012
***************************************
        org        $9F00
       
***************************************
* Point d'entree
***************************************
ini
*       pshs    d,x,y,u,cc,dp
***************************************
* message d'into
***************************************
        ldu     #msg
        ldb     ,u+
loop    set     *
        jsr     $E803
        cmpb    #13
        bne     slow
        ldb     #10
        bra     loop
slow    leay    ,u      ; attente pas
        leay    -1,y    ; trop petite
        bne     *-2
        ldb     ,u+
        bne     loop    ; b=0 en sortie
       
***************************************
* Sauv & init timer 8khz
***************************************       
        orcc    #$50    ; plus d'int.

        ldu     #$E7C5  ; CTRL 6846
        inc     ,u      ; stop timer
        pulu    a,x     ; sauv timer
        pshs    a,x
        lda     #$12    ; continuous
        ldx     #124    ; 1E6/8000-1
        pshu    a,x
       
        leax    -5,u    ; PIA 6846

***************************************
* t=0
***************************************       
        clra
        pshs    d       ; 0
        lda     1,x     ; etat buzzer
        pshs    d       ; PRA 0
***************************************
* attente timer
***************************************
wait    lda     ,x      ; attente TIMER
        lsra
        bcc     wait
        ldd     6,x     ; clear TCO
***************************************
* calcul (t*(t>>9|t>>13))&16
***************************************
        ldb     3,s
        stb     ,-s     ; t' t
        ldd     2,s
        asra
        rorb               
        stb     ,-s     ; t>>9 t' t
        asra
        rorb
        asra
        rorb
        asra
        rorb
        asra
        rorb            ; D=t>>13
        orb     ,s+     ; B=t>>13|t>>9
        lda     ,s+
        mul             ; B=(t>>13|t>>9)*t
        andb    #16     ; B=((t>>13|t>>9)*t) & 16
***************************************
* Sortie buzzer
***************************************
        lsrb
        eorb    ,s
        stb     1,x
***************************************
* t++
***************************************
        inc     3,s     ; 7
        bne     *+8     ; 3
        inc     2,s
        bne     *+4
        inc     1,s
***************************************
* Test clavier + light-pen
***************************************
* version longue
*       lda     8,x     ; PRA PIA 6821
*       anda    #1      ; KTST
*       beq     wait
*       jsr     $E81B
*       bcc     wait
* version courte: bouton light-pen seul
        lda     3,x       
        anda    #2
        beq     wait
***************************************
* Restore timer
***************************************
        leas    4,s
        puls    b,u
        stu     6,x
        stb     5,x
***************************************
* sortie
***************************************
*       puls    d,x,y,u,cc,dp
        swi
        rts
***************************************
* il reste de la place pour un petit
* message
***************************************
msg     fcc     /$ cat t.c/
        fcb     13,13
        fcc     #/* #
        fcb     $1B,$5C
        fcc     /www.pulsdemos.com/
        fcb     $1B,$5C
        fcc     # */#
        fcb     13,13
        fcc     /main(t) {/
        fcb     13
        fcc     / for(t=0;!LPIN;t++)/
        fcb     13
        fcc     /  putchar(/
        fcc     /(t*(t>>9/
        fcb     124
        fcc     /t>>13))&16/
        fcc     /);/
        fcb     13
        fcc     /}/
        fcb     13
        fcc     /$ cc t.c/
        fcb     13
        fcb     $1B,$5C,$1B,$5C
        fcc     #$ ./a.out >/dev/audio#
        fcb     13
        fcb     0

        end     ini


Dernière édition par Samuel Devulder le 09 Déc 2012, 15:09, édité 5 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Les bonus
MessagePosté: 08 Déc 2012, 23:56 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1809
Localisation: Brest
Samuel Devulder a écrit:
Ce principe provient de la page "Algorithmic synphonies from one line of code" dont le but est de produire des mélodies complexes avec une seule ligne de C. Les résultats obtenus sont très surprenants.

En bonus, voici d'autres exemples de ce que cela peut donner sur Thomson, ce coup ci non pas avec le seul bit du buzzer, mais l'ensemble des 6 bits de l'extension musique et jeux (quel luxe!). Comme le précédent ces programmes affichent le code C produisant le même son sous unix, mais ce coup ci le 1er programme a la particularité d'être re-logeable n'importe où en RAM.

Formule "t*5 & (t>>7) | t*3 & (t>>8)":
Code:
***************************************
* debut  : $9E00
* fin    : $9EFF
* taille : 256
***************************************

        org     $9E00

init    fcb     $33,$8D,$00,$A8,$E6
        fcb     $C0,$BD,$E8,$03,$C1
        fcb     $0D,$26,$04,$C6,$0A
        fcb     $20,$F5,$31,$C4,$31
        fcb     $3F,$26,$FC,$E6,$C0
        fcb     $26,$EB,$1A,$50,$8E
        fcb     $E7,$C0,$EC,$0E,$34
        fcb     $06,$CA,$04,$E7,$0F
        fcb     $A6,$0D,$E6,$0F,$C4
        fcb     $FB,$E7,$0F,$E6,$0D
        fcb     $34,$06,$86,$3F,$A7
        fcb     $0D,$CC,$04,$04,$ED
        fcb     $0E,$6F,$0D,$A6,$01
        fcb     $A7,$E2,$8A,$30,$84
        fcb     $F7,$A7,$01,$E6,$05
        fcb     $86,$13,$A7,$05,$EE
        fcb     $06,$34,$44,$CE,$00
        fcb     $7C,$EF,$06,$4A,$A7
        fcb     $05,$4F,$5F,$34,$06
        fcb     $34,$06,$A6,$84,$44
        fcb     $24,$FB,$EC,$06,$A6
        fcb     $E4,$A4,$62,$A7,$E2
        fcb     $EC,$63,$58,$49,$A4
        fcb     $62,$AA,$E0,$44,$44
        fcb     $A7,$0D,$35,$46,$8B
        fcb     $05,$CB,$03,$33,$41
        fcb     $34,$46,$A6,$03,$84
        fcb     $02,$27,$D7,$32,$64
        fcb     $35,$42,$EF,$06,$A7
        fcb     $05,$A6,$0F,$84,$FB
        fcb     $A7,$0F,$A6,$E0,$A7
        fcb     $01,$35,$46,$E7,$0D
        fcb     $E6,$0F,$CA,$04,$E7
        fcb     $0F,$A7,$0D,$EF,$0E
        fcb     $3F,$39,$6D,$61,$69
        fcb     $6E,$28,$74,$29,$7B
        fcb     $20,$2F,$2F,$20,$53
        fcb     $61,$6D,$20,$44,$45
        fcb     $56,$0D,$20,$66,$6F
        fcb     $72,$28,$74,$3D,$30
        fcb     $3B,$21,$4C,$50,$49
        fcb     $4E,$3B,$74,$2B,$2B
        fcb     $29,$70,$75,$74,$63
        fcb     $68,$61,$72,$28,$0D
        fcb     $0D,$1B,$4D,$20,$20
        fcb     $74,$2A,$35,$26,$28
        fcb     $74,$3E,$3E,$37,$29
        fcb     $7C,$74,$2A,$33,$26
        fcb     $28,$74,$3E,$3E,$38
        fcb     $29,$1B,$4C,$0D,$20
        fcb     $29,$3B,$0D,$7D,$0D
        fcb     $00

        end     init


Formule "t * ((t>>3|t>>9)&82&t>>9)":
Code:
***************************************
* debut  : $9E00
* fin    : $9EFF
* taille : 256
***************************************

        org     $9E00

init    fcb     $CE,$9E,$A7,$E6,$C0
        fcb     $BD,$E8,$03,$C1,$0D
        fcb     $26,$04,$C6,$0A,$20
        fcb     $F5,$31,$C4,$31,$3F
        fcb     $26,$FC,$E6,$C0,$26
        fcb     $EB,$1A,$50,$CE,$E7
        fcb     $C5,$EC,$49,$34,$06
        fcb     $CA,$04,$E7,$4A,$A6
        fcb     $48,$E6,$4A,$C4,$FB
        fcb     $E7,$4A,$E6,$48,$34
        fcb     $06,$86,$3F,$A7,$48
        fcb     $CC,$04,$04,$ED,$49
        fcb     $6F,$48,$A6,$5C,$A7
        fcb     $E2,$8A,$30,$84,$F7
        fcb     $A7,$5C,$6C,$C4,$37
        fcb     $14,$5A,$34,$14,$C6
        fcb     $12,$8E,$00,$7F,$36
        fcb     $14,$4F,$5F,$34,$06
        fcb     $A6,$5B,$44,$24,$FB
        fcb     $EC,$41,$EC,$E4,$44
        fcb     $56,$44,$56,$E7,$E2
        fcb     $E6,$61,$EA,$E0,$C4
        fcb     $A4,$E4,$E4,$54,$A6
        fcb     $61,$3D,$54,$54,$E7
        fcb     $48,$6C,$61,$26,$02
        fcb     $6C,$E4,$A6,$5E,$84
        fcb     $02,$27,$D5,$32,$62
        fcb     $35,$12,$AF,$41,$A7
        fcb     $C4,$A6,$4A,$84,$FB
        fcb     $A7,$4A,$A6,$E0,$A7
        fcb     $5C,$35,$16,$E7,$48
        fcb     $E6,$4A,$CA,$04,$E7
        fcb     $4A,$A7,$48,$AF,$49
        fcb     $3F,$39,$6D,$61,$69
        fcb     $6E,$28,$74,$29,$7B
        fcb     $20,$2F,$2A,$20,$53
        fcb     $61,$6D,$20,$44,$45
        fcb     $56,$20,$2A,$2F,$0D
        fcb     $20,$66,$6F,$72,$28
        fcb     $74,$3D,$30,$3B,$21
        fcb     $4C,$50,$49,$4E,$3B
        fcb     $74,$2B,$2B,$29,$70
        fcb     $75,$74,$63,$68,$61
        fcb     $72,$28,$0D,$0D,$1B
        fcb     $4D,$20,$20,$74,$2A
        fcb     $28,$28,$74,$3E,$3E
        fcb     $33,$7C,$74,$3E,$3E
        fcb     $39,$29,$26,$38,$32
        fcb     $26,$74,$3E,$3E,$39
        fcb     $29,$1B,$4C,$0D,$20
        fcb     $29,$3B,$0D,$7D,$0D
        fcb     $00

        end     init


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Déc 2012, 09:52 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1075
Localisation: France (24)
On veut un fichier sonore !!!! :D

Peux-tu nous en faire un pour écouter ce que ça donne ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Déc 2012, 12:18 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1809
Localisation: Brest
Voici un fichier video pour se faire une idée de ce que ca pourrait donner en vrai (désolé pour les bruits de fond).

Code source:
Code:
***************************************
* Symphonie en C.
*
* Inspiration de:
*     http://tinyurl.com/72jwuvy
*
* Code C:
*  main(t) {
*    for(t=0;LPIN==0;t++) putchar(
*
*       t*5 & (t>>7) | t*3 & (t>>8)
*
*  );}
*
* Compatible tous TO avec controleur de
* jeu. Sortie par pression lightpen.
*
* Samuel Devulder Avril 2012
***************************************
        org        $9E00
       
***************************************
* Point d'entree
***************************************
ini
*       pshs    d,x,y,u,cc,dp
***************************************
* message d'into
***************************************
        leau    msg,pcr
        ldb     ,u+
loop    set     *
        jsr     $E803
        cmpb    #13
        bne     slow
        ldb     #10
        bra     loop
slow    leay    ,u      ; attente
        leay    -1,y    ; trop petite
        bne     *-2,
        ldb     ,u+
        bne     loop    ; b=0 en sortie
***************************************
* Sauv & init son
***************************************
        orcc    #$50
        ldx     #$E7C0
        ldd     $e,x    ; sauv cont A/B
        pshs    d
        orb     #4      ; acti son PB
        stb     $f,x
        lda     $d,x    ; sauv data PB
        ldb     $f,x       
        andb    #$fb       
        stb     $f,x    ; stop son PB
        ldb     $d,x       
        pshs    d       ; sav dat/dir B
        lda     #$3F    ; PA6-PA7=in
        sta     $d,x    ; PA0-PA5=out
        ldd     #$0404  ; sortie son
        std     $e,x    ; port A et B
        clr     $d,x    ; init data B
        lda     $1,x    ; sauv port C
        sta     ,-s
        ora     #$30
        anda    #$F7    ; init port C
        sta     1,x     ; (sortie son)
***************************************
* Sauv & init timer 8khz
***************************************       
        ldb     5,x
        lda     #$13
        sta     5,x     ; stop timer
        ldu     6,x
        pshs    b,u
        ldu     #124    ; 1e6/8000-1
        stu     6,x
        deca
        sta     5,x     ; reprise timer
***************************************
* init registres
***************************************
        clra
        clrb
        pshs    d       ; pile:
        pshs    d       ; t*5 t*3 t
***************************************
* attente timer
***************************************
wait    lda     ,x
        lsra
        bcc     wait
        ldd     6,x     ; clear TCO
* t*5 & (t>>7) | t*3 & (t>>8)
        lda     ,s      ; A=t*3
        anda    2,s     ; A=t3&t>>8
        sta     ,-s
        ldd     3,s     ; A=t
        lslb
        rola            ; A=t>>7
        anda    2,s     ; A=t5&t>>7
        ora     ,s+     ; A=t5&t>>7 |
        lsra            ;   t3&t>>8
        lsra       
        sta     $d,x    ; sortie son
* t++ (27 cycles)
        puls    d,u
        adda    #5      ; t*5 : 8 bits
        addb    #3      ; t*3 : 8 bits
        leau    1,u     ; t   : 16 bits
        pshs    d,u
***************************************
* Test bouton light-pen
***************************************
        lda     3,x
        anda    #2
        beq     wait
        leas    4,s
***************************************
* Restore timer
***************************************
        puls    a,u
        stu     6,x
        sta     5,x
***************************************
* Restore port A/B/C
***************************************
        lda     $f,x    ; stop son PB
        anda    #$fb
        sta     $f,x
        lda     ,s+     ; reinit PC
        sta     $1,x
        puls    d,u
        stb     $d,x
        ldb     $f,x    ; active son PB
        orb     #4
        stb     $f,x
        sta     $d,x    ; init data PB
        stu     $e,x    ; init cont PA/PB
*       puls    d,x,y,u,cc,dp
        swi
        rts
***************************************
* il reste de la place pour un petit
* message
***************************************
msg     fcc      #main(t){ // Sam DEV#
        fcb      13
        fcc      / for(t=0;!LPIN;t++)/
        fcc      /putchar(/
        fcb      13,13
        fcb      $1B,$4D
        fcc      /  t*5&(t>>7)/
        fcb      124
        fcc      /t*3&(t>>8)/
        fcb      $1B,$4C
        fcb      13
        fcc      / );/
        fcb      13
        fcc      /}/
        fcb      13
        fcb      0
        end      ini
[EDIT] modif du lien vers le fichier video.


Dernière édition par Samuel Devulder le 24 Aoû 2015, 14:03, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 17 Déc 2012, 04:03 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 492
Le son du deuxieme example (sf2.bin) me rappel Music3V


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 13 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com