[Thomson TO8] Projet Adaptation de Bubble Bobble

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

Modérateurs : Papy.G, fneck, Carl

jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par jasz »

Je pense que tu devrais commencer à t'intéresser au moteur du jeu et la gestion de tout tes sprites avant le son :wink:
Avatar de l’utilisateur
adnz
Messages : 213
Inscription : 10 janv. 2010 00:07

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par adnz »

Perso, une music de fond avec le CNA 6bits en même temps que le jeux (affichages sprites, collisions et autres mécanismes du jeux etc.. )

Moi j'dis c'est super chaud, perso j'ai mis de coté l'idée de faire une musique de fond sur mon Pacman en même temps que le jeu, jusqu'a nouvel ordre !
(en plus quant j'imagine le taf de ouf et le temps qu'il a fallu sur Mission : Liftoff réalisé par je pense les personnes qui connaissent hyper bien cette machine !) bref !

Pour ma part, je me concentre déjà à afficher un jeux jouable... :D

Si déjà tu fais :
>> affichage sprite, déplacement sprites, contrôle joystick, les routines de saut, et les collisions sur les platformes.

on va bien kiffer je pense de voir bubble bubble sur nos TO/MO.

PS : pour le son, mais comme à mon habitude je ne laisse jamais tombé, mais on verra plus tard 8)
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

jasz a écrit : 31 oct. 2020 22:03 Je pense que tu devrais commencer à t'intéresser au moteur du jeu et la gestion de tout tes sprites avant le son :wink:
J'y travaille. Je voulais voir d'abord les aspect technique liés au mode bm16, le double buffer, les tableaux (j'ai vu toutes les autres version d'ordi 8 bits) et cet après midi j'ai enterriné comment afficher les niveaux suivant le nombre de cases horizontales et verticales sachant que ça sera du 20 (en hauteur) sur 28 (largeur) cases. Je suis obligé de supprimer 3 "cases" en vertical à la version arcade et Amstrad (qui lui a de l'overscan mais pas le ST/Amiga qui eux affichent 22 cases, une de moins donc, mais avec les scores sur le côté droite). C'est une partie sur laquelle j'ai passé du temps... Finalement ça va être du BBCMicro "like" (et C64, ZX Spectrum).

Il me semble important de voir l'aspect fluidité du jeu et pour le son j'ai vu qu'il était possible d'avoir ce que je voulais. Et Sam tu as répondu à mes attentes (t'es vraiment un chef!!)

Les sprites sont en 8x16 transparents, les plateformes seront en 4x8 (mais les tiles en 8x16 parce qu'il y a du relief). Il était important que je sache utiliser le double buffer parce que dans Bubble Bobble c'est quasi indispensable (pour les personnages ou bulles qui se croisent notamment)

La mécanique de jeu j'y ai réfléchi aussi. C'est pas si compliqué, je reprendrai ce que j'ai fait avec "Poppy Man" (qui est un clone de Pacman pour JavaScript). Pour le score je vais reprendre le fil de discussion d'ADNZ avec Sam (pour Pacman) même si je me demande s'il n'y a pas un moyen d'utiliser les chiffres du score pour les afficher directement et j'ai vu aussi la MEGADEMO d'HCL où il était possible de mélanger plusieurs modes vidéo en horizontal!! Si je savais comment faire ça, ça m'arrangerait pour les scores (sous réserve que ça puisse fonctionner pour les banques 2 et 3 ce qui n'est pas garanti au vu des mauvaises surprises que j'ai eu dernièrement avec l'utilisation de PUTC pour le mode vodéo bm16) ! La partie du haut en mode TO7 et tout le reste en BM16...
Dernière modification par Neotenien le 01 nov. 2020 11:44, modifié 1 fois.
Avatar de l’utilisateur
adnz
Messages : 213
Inscription : 10 janv. 2010 00:07

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par adnz »

Good.
Hâte de voir ça. :)
__sam__
Messages : 7924
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

L'audio est bien du multiplexage de fréquence!!
Oui mais non. Oui dans le sens où un accord est un multiplexage de fréquence, mais non pas dans le cadre ici, quand on parle de musique. On parle d'accord tout court. Le terme multiplexage sert quand on veut transmettre des signaux. Des signaux, pas de la musique.
Essaie de voir un cours sur les signaux audio avec les différentes harmoniques...
T'inquiètes, je connais très bien. J'en ai bavé des transformés en z, p, de Mélin et tout binz dans mon jeune temps. Je m'en sers encore très régulièrement du reste (regardes mes messages avec spectrogrammes sur system-cfg par le passé, tu vas halluciner: c'est Halloween, il ya des spectres partout là bas ;) ).
Quand tu as 2 sons qui se mélangent (mettons un a 100 Hhz et l'autre à 300 Hz), les 2 signaux "fusionnent"
Les spectre s'ajoutent oui. La 3e harmonique du signal à 100hz s'ajoute à la fondamentale de celle à 300hz. L'amplitude des deux spectres s'ajoute.
et on utilise donc le OR sur les échantillons numériques. ON NE LES ADDITIONNE PAS!
Non. Les amplitudes du domaine temporel et du domaine spectral s'ajoutent (la transformée de Fourier est linéaire).

Le OR n'a pas sa place là dedans sauf à le considérer comme une sorte d'addition spéciale (idem avec MAX), très spéciale même puisque c'est une opération purement numérique qui n'existe pas en analogique.
l'amplitude d'un signal audio n'augmente pas avec la multiplicité des signaux!! 2 signaux de 45 dB ne vont pas faire 90 dB mais reste à 45 dB au total.
Et donc deux flutes jouant un La440 ne donnent pas un son 2x plus fort. Nota: doubler un volume c'est ajouter 6dB au signal. Les dB c'est une échelle logarithmique, donc on ne double ni n'additionne les logs comme ca. En échelle linéaire le spectre d'une somme est la somme des spectres.
La FM signifie bien le Multoplexage de fréquence justement en multoplexant 2 fréquence (une harmonique et sa secondaire) pour déterminer les "bits" à un instant t "périodique" échantillonnage de fréquence x4 comparé à l'harmonique principale
Non c'est pas ce qu'on fait ici. On fait de la synthèse PCM: on manipule des échantillons, pas des spectres. On a pas plusieurs oscillateurs dont on modifie les volumes pour recréer les harmoniques d'un instrument de musique particulier comme dans la synthèse FM des premiers synthétiseurs, et même où plus classiquement dans un jeu d'orgue d'église (qui n'est fondamentalement qu'un synthétiseur FM analogique, et même pneumatique en fait). C'est de l'échantillonné dont on parle ici.

Bon passons...
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
__sam__
Messages : 7924
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

il était possible de mélanger plusieurs modes vidéo en horizontal!!
Ils font cela en comptant précisément tous les cycles du programme et en changeant $E7DC au bon moment dans la construction de la trame vidéo. On ne sait faire cela que sur les programme ayant des chemins d'execution simples de longueur identiques. Cela se implique qu'on a pas beaucoup de temps libre dans la boucle (64 cycles d'une ligne vidéo à l'autre). A mieux quand on est super bon on arrive à envoyer du son au CNA, changer le mode écran et changer une ou 2 entrées de la palette. C'est ce qui a été fait dans la démo BloodyRun de Préhisto (clicker sur l'image, le code source est dans l'archive -- groumph indisponible maintenant que logicielsmoto est down): Image

[EDIT] la wayback machine nous sauve encore le coup >>bloodyrun.zip. Le source (à regarder avec la cartouche ASSEMBLER depuis là diskette ou plus bas) n'est pas facile à décoder car le binaire ne doit pas dépasser 1k (sans compression), mais il est hyper instructif en techniques de sioux (en particulier l'usage de swi pour réduire les appels à l'extramon, l'usage massif des registres au lieu des variables globales, etc).

Code : Tout sélectionner

NVOICE  equ   3
  
* ExtraMon registers
VALTYP  equ   $6105
FACLO   equ   $6151
COULEUR equ   $619f
TRATYP  equ   $61a0
XXXX    equ   $61a1
YYYY    equ   $61a3
XR      equ   $61a9
YT      equ   $61ab
FILFLG  equ   $61ef
AXEV    equ   $61f0
AXEH    equ   $61f1


* Extra registers
Zero    equ   $6101
cCount  equ   $6105
sValue  equ   $61d6
sFreq   equ   $61d7
sNote   equ   $61d8
cCom    equ   $61d9
blkPal  equ   $61dd
  
        org   $9e22

        setdp $61

*--------------------------------------
* Start of program
*--------------------------------------
debut   equ   *
        clr   >$60ff Hard reset required
        ldx   #$60de Area set to $00
        lbsr  fixpal Palette to 0
        lbsr  PrintS
        pulu  cc,a,b,dp,x,y,s
        stx   $602f Set SWI interrupt
        call  0+$80 Reset ExtraMon
        sta   <XR+1 X1 window
        stb   <YT+1 Y1 window
        sty   $627d Set gfx pattern
        tfr   s,y
        tfr   pc,s
        com   <FILFLG Full elipse
*--------------------------------------
* Create cosinus list
*--------------------------------------
* U already points to lCos
cosin equ *
        leax  ,u
        lda   #4  For REAL type
        swi     
        fcb   50  FAC into REAL
        fcb   62+$80 Startvalue->FAC
cos1    swi 
        fcb   47  FAC=COS(FAC)
        fcb   64+$80 FAC->ARG
        leax  9,u
        swi 
        fcb   62  Mult->FAC
        fcb   56  FAC=FAC*ARG
        fcb   64+$80 FAC->ARG
        leax  9,u
        lda   #2  For INT type
        swi 
        fcb   62  Add->FAC
        fcb   54  FAC=FAC+ARG
        fcb   50+$80 FAC into INT
        ldb   <FACLO  ! Record int
        stb   ,y+ ! value of FAC
        leax  ,u
        lda   #4  For REAL type
        swi 
        fcb   50  FAC into REAL
        fcb   62  StartValue->FAC
        fcb   64+$80 FAC->ARG
        leax  5,u
        swi 
        fcb   62  Step->FAC
        fcb   54+$80 FAC=FAC+ARG
        leax  ,u  ! FAC->StartValue
        call  63+$80 !
        dec   4,u
        bne   cos1
        leau  11,u
        com   <cCom
        bne   cosin
*--------------------------------------
* Create music sample
*--------------------------------------
* U points already to Score
        bsr   smp6  Init bank ptr
* Define frequency
smp0    ldb   ,u+ Read note again
        andb  #$1f  Frequency offset
        leay  <lFreq-1,pcr Freq list
        ldb   b,y Read frequency
        andb  #$7f  Limit frequency
        stb   <sFreq Block size/Freq
* Define tempo
        clr   <sNote Note=0 for silence
        lda   -1,u  Read note value
        beq   smp8  Next voice
        bita  #$e0  Test type of note
        beq   smp1  Silence if 0
        ldb   #$08  ! Tempo for
        mul         ! played note
        com   <sNote Activate note
smp1    anda  #$1f  !
        asla        ! Tempo silence
        asla        !
        ldb #234    !
        mul         ! * block size
        tfr d,y     !
        clr   <sValue Value set to 0
* Manage frequency
smp2    lda   <sFreq  Init frequency
        com   <sValue Record start value
smp3    deca          ! Skip if not time
        bmi   smp2    ! to change value
* Record value
        ldb   <sValue Read value
        andb  <sNote
        andb  #$3f/NVOICE ! current val
smp4    leax  ,x  Add value (addb ,x)
        stb   ,x+ Write value
* Next bank if necessary
        cmpx  #16380
        blo   smp5
        ldb   >$e7e6
        incb
        bsr   smp7
* Next value
smp5    leay  -1,y  ! Next
        bne   smp3  ! value
* Next Note
        bra   smp0  Next note
smp6    ldd   #$eb65 Start bank (5)
smp7    orb   #$80  Code for bank
        stb   ,x  Write next bank
        stb   >$e7e6 Update bank switch
        ldx   #$0000 Start pointer
        rts
lFreq   equ   *
        fcb   40
        fcb   59
        fcb   79
        fcb   30
        fcb   47
        fcb   27
        fcb   24
        fcb   32
        fcb   53
        fcb   63
        fcb   20
        fcb   23
* Display a message
PrintS  ldu   #mScrol
prtf0   ldb   ,u+
        jsr   $e803
        bne   prtf0
        rts
* Next voice
smp8    bsr   smp6  Bank start
        sta   >smp4 LEAX -> ADDB
        tst   ,u  ! Next voice
        bne   smp0  !
Create  equ   *
        dec   <cCount
*--------------------------------------
* Create circles (colors 3-7)
*--------------------------------------
        bsr   PrintS
circle equ  *
        ldb   <cCount Read screen number
        ldx   #Cosin+256 Cosinus ptr
        abx 
        ldy   #4
circ0   lda   #7
circ1   ldb   4*5,x ! X center
        addb  #9
        stb   <XXXX+1 !
        ldb   ,x    ! Y center
        addb  #22
        stb   <YYYY+1 !
        sta   <COULEUR Set colour
        ldb   #10
        bsr   circf
        clr   <COULEUR Set colour
        ldb   #8
        bsr   circf
        leax  4,x
        deca  
        cmpa  #3
        bhs   circ1
        leay  -1,y  Counter - 1
        bne   circ0
*--------------------------------------
* Create text map (color 1)
*--------------------------------------
        ldb   #$60
        stb   >$e7e6
        inc   <COULEUR
        ldu   #$0000+320-40-20
        ldy   #200
ptxt0   ldx   #160
        leay  -1,y
ptxt1   leau  -1,u
        cmpu  <Zero
        beq   ptxt4
        lda   #8
ptxt2   leax  -1,x
        beq   ptxt0
        lsr   ,u
        bcc   ptxt3
        swi
        fcb   28  CHOIX
        fcb   25+$80 PSETXY
ptxt3   deca
        bne   ptxt2
        bra   ptxt1

* Draw a full circle
circf   stb   <AXEV
        lsrb
        stb   <AXEH
        swi
        fcb   28  CHOIX
        fcb   24+$80 CIRCLE
        rts

ptxt4   equ   *
*--------------------------------------
* Draw runners (color 2)
*--------------------------------------
        inc   <COULEUR
run01   ldx   #-96+12+4
        leax  -4,x
        stx   >run01+1
        ldb   <cCount
run0    ldy   <Zero
        subb  #2
        bpl   run2
        addb  #6
run2    pshs  b,x,y,u
        lda   #15
        mul
        ldu   #rCoord
        leau  b,u
* A is set to 0 at that point
run3    bsr   rgetxy
        beq   run5
        swi
        fcb   28  CHOIX
        fcb   25+$80 PSETXY
run4    bsr   rgetxy
        beq   run3
        call  26+$80 LINE
        bra   run4

rpoint  ldb   ,u+
        coma
        beq   rpt0
        lsrb
        lsrb
        lsrb
        lsrb
        leau  -1,u
rpt0    andb  #$0f
        rts

* Get 4 bits value
rgetxy  bsr   rpoint
        beq   rgetx0
        ldx   3,s
        abx 
        bsr   rpoint
        ldy   5,s
        aslb
        leay  b,y
rgetx0  rts

run5    puls  b,x,y,u
        leax  8,x
        leay  2,y
        call  26+$80 LINE
        leax  1,x
        leay  -2,y
        call  27+$80 BOX
        leax  -8-1+8,x
        leay  31,y
        cmpy  #31*6
        blo   run2
        leax  -8*6+16,x
        cmpx  #164
        blt   run0

*--------------------------------------
* Copy screens
*--------------------------------------
* A is already set to 0
        ldb   <cCount
        decb  
        bmi   cpysc1
        bne   cpysc0
        ldb   #$f-1
cpysc0  addb  #$61
        bsr   copy
        lbra  Create

* Copy screen bank
copy    std   >$e7e5
        ldu   #$a000
        ldx   <Zero
copy0   lda   $2000,u
        ldb   ,u+
        stb   $2000,x
        sta   ,x+
        cmpx  #8000
        blo   copy0
        lda   #$04
        sta   >$e7e5
        rts

* Copy screen bank 1
cpysc1  leas  <copy,pcr
        ldd   #$0f61
        bsr   copy
cpysc2  equ   *
echo  Must be $$a000 -> $*
*--------------------------------------
* Prepare loop
*--------------------------------------
        setdp $e7
* Initialize direct page register
        ldb   #$e7  ! Initialize
        tfr   b,dp  ! direct page
* Activate sound
        clr   <$e7cf
        ldd   #$3f04
        sta   <$e7cd
        stb   <$e7cf
* Calibrate raster verticaly
        ldx   #Palett
        bsr   fixpal
* Calibrate raster horizontaly
        ldx   #$0fff Color 0
        ldd   #$0865 Offset color 8
        bsr   colent
* Calibrate raster
RLINE   equ   231+64
        ldx   #RLINE*8+1
calib   leax  -1,x
        bne   calib
        leax  ,x
* Initialize registers
        bra   loop0 Start loop

* Calibrate raster verticaly
fixpal  lda   #$ff
colent  jmp   $ec00

nop1    tfr   a,a
        bra   loop1
nop2    mul
        nop
nop3    bra   loop5
*--------------------------------------
* Start of the loop
* 1 time
*--------------------------------------
* Manage sound
loop    ldb   ,s  ! Skip if not
        bpl   nop1  ! bank number
loop0   lds   #$0000 Start pointer
        stb   >$e7e6 Activate bank
* Manage tube color
loop1   ldu   #Tubes
loop2   ldy   #Tubes+156
        stu   >loop2+2
        sty   >loop1+1
* Prepare color cycling
loop3   ldu   #PalCyc-2 Palette ptr
* Switch screen
loop4   ldb   #$c0
        addb  #$40  Switch screen
        stb   <$e7dd Activate screen
        stb   >loop4+1 Switch code
* Prepare color cycling
        bne   nop2
        leau  2,u
        cmpu  #PalCyc+10
        blo   nop3
        ldu   #PalCyc
loop5 equ *
        ldd   #(8<8)+146
        std   >nLoop
        tfr   a,a
* Apply tube color
loop6   ldb   ,y  Read color
        clr   <$e7db Color 0
        stb   <$e7da Activate color
        sex       ! Delete color
        sta   ,y+ ! in list
* Generate sound
        ldb   ,s+
        stb   <$e7cd
        com   >lCom
        beq   loop
* ----------------------
* Color cycling program
* 1 time
* ----------------------
        ldb   #3*2
        stb   <$e7db
        ldd   ,u
        stb   <$e7da
        sta   <$e7da
        ldd   2,u
        stb   <$e7da
        sta   <$e7da
        ldd   4,u
        stb   <$e7da
        sta   <$e7da
        ldd   6,u
        stb   <$e7da
        sta   <$e7da
        ldd   8,u
        stb   <$e7da
        sta   <$e7da
        inc   >tube4+1 Prepare tubes
        nop
        nop
colcyc  equ   *
* Apply tube color
        ldb   ,y  Read color
        clr   <$e7db  Color 0
        stb   <$e7da Activate color
        sex       ! Delete color
        sta   ,y+ ! in list
* Generate sound
        ldb   ,s+
        stb   <$e7cd
        stu   >loop3+1
        nop
        clra
* ----------------------
* Creation of the next tubes list
* 8 times
* ----------------------
* Tubes colors list
tube3   tfr   a,b
tube4   addb  #$00
        ldx   #Cosin+128 Sinus table
        ldb   b,x
        addb  #9
        ldx   >loop2+2 Color list
        abx            Color pointer
        ldb   #$ee
        stb   3,x
        stb   4,x
        stb   5,x
        decb
        stb   2,x
        stb   6,x
        ldb   #$cc
        stb   1,x
        stb   7,x
        ldb   #$aa
        stb   0,x
        stb   8,x
        adda  #8
tube5   leax  ,x
* Apply tube color
        ldb   ,y  Read color
        clr   <$e7db Color 0
        stb   <$e7da Activate color
        ldb   #$ff  ! Delete color
        stb   ,y+ ! in list
* Generate sound
        ldb   ,s+
        stb   <$e7cd
        dec   >nLoop
        bne   tube3
* ----------------------
* Blank
* 146 times
blank equ *
        ldb   #8     2
blank0  decb         2
        lbne  blank0 6(5)
        inc   >nLoop
        dec   >nLoop+1 Loop counter
        bne   tube5
* ----------------------
* Loop
* ----------------------
        jmp   loop6

* Personnal SWI interrupt
mathsw  ldu   10,s  Read PC in stack
maths0  ldb   ,u  Read code
        andb  #$7f
        jsr   $ec0c Jump to ExtraMon
        ldb   ,u+
        bpl   maths0
        stu   10,s  Update PC in stack
        rti

mScrol  equ   * Must end with 0
        fcb   $1b,$5e
        fcb   $0c
        fcc   "BLOODY RUN Puls 2014"
lCom    equ   *
        fcb   0
Regs    equ   * Must be here
        fcb   $50            CC
        fcb   159            A
        fcb   199            B
        fcb   $61            DP
        fdb   mathsw         X
        fdb   $e845+(96*8)-1 Y
        fdb   Free           S
lCos    equ   * Must end with $0000
        fcb   $00,$00,$00,$00
        fcb   0
        fcb   $7b,$c9,$0f,$da
        fcb   $86,$70
lCos2   equ   * Must end with $0000
        fcb   $00,$00,$00,$00
        fcb   4*5*4*2
        fcb   $7d,$a0,$d9,$7b
        fcb   $87,$0c
Score   equ   * Must end with 0
        fcb   $01,$61,$01,$61,$01,$41
        fcb   $44,$46,$47,$61,$01,$61
        fcb   $01,$24,$27,$46,$48,$41
        fcb   $61,$01,$61,$01,$41,$44
        fcb   $46,$47,$24,$27,$6b,$01
        fcb   $2b,$2c,$27,$26,$84,$24
        fcb   $00
        fcb   $02,$42,$02,$42,$02,$22
        fcb   $45,$81,$01,$42,$02,$42
        fcb   $03,$41,$49,$4a,$01,$42
        fcb   $02,$42,$02,$23,$45,$81
        fcb   $02,$88,$04,$81,$21
        fcb   $00
        fcb   $03,$23,$03,$23,$0b,$23
        fcb   $03,$23,$0b,$23,$03,$23
        fcb   $13,$45,$47,$25
        fcb   $00
        fcb   $00
PalCyc  equ   *
        fdb   $111  Black
        fdb   $11f  Red
        fdb   $1ff  Yellow
        fdb   $1f1  Green
        fdb   $f11  Blue
        fdb   $111  Black
        fdb   $11f  Red
        fdb   $1ff  Yellow
        fdb   $1f1  Green
rCoord  equ   *
        fcb   $4b,$59,$9a,$77,$8a,$6e
        fcb   $8f,$08,$75,$58,$27,$5a
        fcb   $60,$77,$00
        fcb   $4f,$3e,$6b,$77,$a9,$7b
        fcb   $8d,$07,$65,$48,$28,$5b
        fcb   $50,$77,$00
        fcb   $3f,$1d,$5b,$77,$b8,$9c
        fcb   $bd,$07,$55,$38,$29,$5a
        fcb   $30,$77,$00
        fcb   $2e,$2c,$5b,$78,$a8,$9d
        fcb   $bd,$07,$55,$28,$28,$6a
        fcb   $30,$78,$00
        fcb   $1c,$2a,$6b,$77,$aa,$ae
        fcb   $ce,$07,$55,$38,$27,$5a
        fcb   $40,$77,$00
        fcb   $2b,$39,$7b,$78,$9a,$9e
        fcb   $bf,$0a,$66,$48,$26,$4a
        fcb   $60,$78,$00
Palett equ  *
        fdb   $fff
        fdb   $530
        fdb   $111

echo  &*-debut
        rmb   64
Free    equ   *
Cosin   rmb   256+4*5*4*2
nLoop   rmb   3
Tubes   rmb   156*2

        end   debut
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
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

On parle d'échantillon oui mais on peut créer ces échantillons à partir de "spectre" de signaux, dont on connait les fréquences et amplitudes non ? C'est de ça dont je voulais parler en parlant de multiplexage de fréquences... On calcule les échantillons sur cette base et on les crée numériquement ? Je repars sur mon exemple de l'harmonique de la flûte (la principale et la 3ème), on va calculer les amplitudes tous les T secondes (en additionnant les 2 fréquences à cet instant) avant de le numériser. Je pense d'ailleurs que c'est ce que tu as fait pour' Bubble Bobble version 2. ? Tu es parti d'un signal que tu as calculé en amplitude tous les T non ?

On est bien d'accord que les PCM (CNA) indique l'amplitude d'un signal à un instant T ? Or si 2 "volumes" (c'est à dire puissances sonores) ne s'ajoutent pas, le volume sonore ne s'ajoute pas "en amplitude" ou alors j'ai rien compris aux cours que j'ai vus.

D'autre part, pour ce qui est des décibels, la formule est dB = 10x(Pentrée/Psortie). Si Pentrée est le double de Psortie, on a un écart de 3dB (fais le calcul et tu verras!) et pas 6! En revanche, quand tu doubles la distance d'avec un son (par exemple, quand tu passe de 50m d'un TGV à 100m) là, la puissance est divisé par 4 (puisque le flux est surfacique) donc tu ôtes 6 dB quand du double la distance de capture. Et d'ailleurs ça a été une de mes remarques à propos d'un dossier LGV qui passaient dans certaines communes de la Sarthe, les ingénieur s'étaient trompé sur ce calcul... C'et bien la peine d'avoir fait des études poussées...
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

C'est galère si on ne peut pas changer le mode vidéo en cour d'affichage écran, je crois que BBC Micro peut le faire (à moins que je dise une bêtise). Le seul truc valable dans les Thomson finalement, c'est le 6809E. pour le reste... Ils ne se sont vraiment pas foulé les ingé de Thomson... Pas comme en Angleterre (Accorn, et Amstrad notamment).

J'ai une idée, pourquoi ne pas voir comment la ROM des Thomson fait pour les "print" avec le mode TO7 il n'y aura juste qu'à appliquer ça au mode bm16 ? C'est quand même galère que ça soit le seulm mode où la fonction print" ne marche pas, tous ça à cause de la non utilisation de la RAMB pour l'écriture.
Daniel
Messages : 17319
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Daniel »

Le PRINT du Basic est une fonction très complexe, la réécrire est compliqué. Je crois qu'il est beaucoup plus simple de programmer directement une petite routine assembleur pour afficher un caractère en bitmap16. On peut utiliser la table en ROM pour le graphisme des caractères.
Bon nombre de jeux en bitmap16 affichent des scores, on peut aussi s'en inspirer.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7924
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

Absolument Daniel.. Il existe un hook de la fonction PUTC que l'on peut utiliser pour intercepter tous les appels à la routine d'affichage de caractères et ainsi la changer par ce qu'on veut: affichage BM16, mais aussi police proportionnelle, pourquoi pas ? Attention toutefois aux caractères d'échappements (accents, et positionnement curseur, changement couleur, etc) qu'il faut correctement interpréter. C'est un boulot terrible à réaliser et qui prends beaucoup de code. C'est sans doute la raison de son absence dans la ROM: C'est complexe, prends plein de place, et n'est pas utilisé souvent tout compte fait.

@Neotenien "C'est galère si on ne peut pas changer le mode vidéo en cour d'affichage écran"
Je vois pas pourquoi tu dis "on peut pas". Bien sur qu'on peut. Ca déjà été fait dans la mégadémo HCL. C'est juste qu'il faut un comptage des cycles très précis dans le code. Sur thomson, de toute façon si on veut faire un truc qui pousse les limites, on en vient toujours à compter et optimiser au cycle près dans la bonne vieille tradition du démo-coding d'antant.
Dernière modification par __sam__ le 01 nov. 2020 15:57, modifié 1 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
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

Daniel a écrit : 01 nov. 2020 14:21 Le PRINT du Basic est une fonction très complexe, la réécrire est compliqué. Je crois qu'il est beaucoup plus simple de programmer directement une petite routine assembleur pour afficher un caractère en bitmap16. On peut utiliser la table en ROM pour le graphisme des caractères.
Bon nombre de jeux en bitmap16 affichent des scores, on peut aussi s'en inspirer.
Il y a déjà eu un échange là dessus entre Samuel et ADNZ, la conclusion était d'écrire une simple routine d'addition digit par digit... Ca peut effectivement être utilisé pour un score, mais il faut aussi, dans Bubble Bobble, connaitre le record à un instant T (ça suppose donc d'avoir les score au format chiffré et en plus de pouvoir afficher ce record quand il est dépassé et ya, ça me parait difficile dans faire une analyse des chiffres (c'est à dire pouvoir convertir du binaire en décimal... Hmm ça me rappelle un bouquin que j'ai "50 programmes assembleurs TO7-10" de B Geoffrion-R Weiss" dans lequel il y a un exemple (exo 18) de comment convertir un hexadécimal en décimal (16 bits). Je regarde ça, ça peut être très utile. D'ailleurs cet ouvrage n'est pas présent sur "DC Moto"! Idem pour "boîte à outils en Basic" (que j'ai en ma possession aussi mais dans un état pas terrible).
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

__sam__ a écrit : 01 nov. 2020 15:19 Absolument Dianiel.. Il existe un hook de la fonction PUTC que l'on peut utiliser pour intercepter tous les appels à la routine d'affichage de caractères et ainsi la changer par ce qu'on veut: affichage BM16, mais aussi police proportionnelle, pourquoi pas ? Attention toutefois aux caractères d'échappements (accents, et positionnement curseur, changement couleur, etc) qu'il faut correctement interpréter. C'est un boulot terrible à réaliser et qui prends beaucoup de code. C'est sans doute la raison de son absence dans la ROM: C'est complexe, prends plein de place, et n'est pas utilisé souvent tout compte fait.
Qu'est ce que tu appelle un "hook" ? Un reroutage ? C'est à dire mettre à un certain emplacement l'adresse de la routine de PUTC ?
__sam__ a écrit : 01 nov. 2020 15:19 @Neotenien "C'est galère si on ne peut pas changer le mode vidéo en cour d'affichage écran"
Je vois pas pourquoi tu dis "on peut pas". Bien sur qu'on peut. Ca déjà été fait dans la mégadémo HCL. C'est juste qu'il faut un comptage des cycles très précis dans le code. Sur thomson, de toute façon si on veut faire un truc qui pousse les limites, on en vient toujours à compter et optimiser au cycle près dans la bonne vieille tradition du démo-coding d'antant.
J'ai pas envie de passer des centaines d'heures à compter les cycles pour un truc qui, ici, vu le contexte, ça me parait impossible à utiliser. Je laisse tomber cette idée de changement de réso pour Bubble Bobble et je vais plutôt partir d'une routine de conversion hexa=>decimal puis affichage (comme c'est écrit dans mon bouquin "50 programmes assembleurs TO7-70", le code fait une cinquantaine de ligne assembleur, ça va!!). Bon heureusement que les chiffres bm16 sont des tiles et pas des objets transparents, un gros gain de temps à l'affichage donc, d'autant que les chiffres sont du 4x8 pxl (et pas 8x16 comme les Sprites), ça devrait être rapide cette partie là. Le "0" pointera sur le premier tile chiffre, le 1 sur le second etc.
__sam__
Messages : 7924
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

Ce sont les indirections p229 du manuel technique TO8, TO9, TO9+ dont je parle avec les "hook".
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] Projet Adaptation de Bubble Bobble

Message par Asic512 »

Bonsoir,

J'en reviens à la discussion sur les sons.
__sam__ a écrit : 31 oct. 2020 23:30 T'inquiètes, je connais très bien. J'en ai bavé des transformés en z, p, de Mélin et tout binz dans mon jeune temps.

Transformées de Mellin peut-être ?
__sam__ a écrit : 31 oct. 2020 23:30 Non. Les amplitudes du domaine temporel et du domaine spectral s'ajoutent (la transformée de Fourier est linéaire).
En pratique, comment mélange-t-on deux morceaux numériques (par exemple codés sur 6 bits comme pour le CNA du Thomson TO8) : on les moyenne ou il y a plus rusé ?
Asic512
__sam__
Messages : 7924
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

Ben c'est de l'addition comme dans tout signal (numérique ou pas). Il n'y a rien de sorcier. Les histoires de "multiplexages de fréquences" sont un mélange de pleins de trucs hétérogènes qui ne font que rendre les choses inutilement complexe et hors sujet (traitement du signal vs génération de son). La synthèse du son, en particulier échantillonné est simple. A chaque instant tu as tes échantillons pour chacune des voix, tu les additionne, puis tu divise par le nb de voix pour rester dans l'intervalle des valeurs min/max et tu envoie au CNA c'est tout.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Répondre