Jump to content
Jagware

SebRmv

Level1
  • Content count

    1,553
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by SebRmv

  1. Atomic, Cd Cover

    yes, a big thanks to you in particular
  2. Gasm Sources....

    Personnally, if I had to develop an assembler or a compiler, I won't write it in C (and even less in assembler by the way ) As some of you know, I am fond of ocaml (caml.inria.fr) and I think it is really a cool language to write such tools. I think the algebraic data types and pattern matching constructs are really must have constructs to write a compiler. The easy memory management (thanks to the garbage collector) is also a great advantage compared to C/asm.
  3. Salut, voilà, j'ai un peu joué avec le blitter hier et aujourd'hui et bonne nouvelle: j'ai réussi à faire des rotations au blitter!! en fait, la doc Atari donne les infos pour le faire et j'ai compris après avoir redécouvert moi-même la méthode leurs explications par contre, les auteurs de la Jaguar Underground Documentation n'avaient pas compris comment faire les rotations au blitter ! alors, voilà on va faire le cas d'une rotation toute simple (sans mise à l'échelle, après, c'est pareil si vous avez compris) on veut tourner une image de taille W*H d'un angle alpha avec un centre de coordonnées CX,CY on veut mettre le résultat dans une image de taille W*H aussi avec le centre au même endroit (on tourne juste le sprite par rapport au centre donc) plaçons nous dans le repère avec comme origine CX,CY et les axes comme il faut (parallèles au bord de l'écran) je note X,Y les coordonnées d'un point dans l'ancien repère (sprite non tourné) et X',Y' les coordonnées de ce même point dans le nouveau repère (sprite tourné) maintenant, un peu de maths vous savez sans doute que l'on a X = X' cos(alpha) - Y' sin(alpha) Y = X' sin(alpha) + Y' cos(alpha) (comme disait mon prof de maths sup, toujours les anciennes coordonnées en fonction des nouvelles) si on dérive par rapport à X' tous ça on obtient dX = cos(alpha) dX' dY = sin(alpha) dX' (physician's style ) ce qui veut dire que si X' devient X'+1 alors X devient X + cos(alpha) et Y devient Y+sin(alpha) (pareil, on dérive par rapport à Y' dX = -sin(alpha) dY' dY = cos(alpha) dY') donc, si vous connaissez le blitter un petit peu on voit tout de suite que A2 scannera la destination (et donc dessinera le sprite tourné) et A1 scannera la source et on utilisera le mode PIXEL bien sur avec comme incrément cos(alpha) et sin(alpha) !! INC,FINC_X = cos(alpha) INC,FINC_Y = sin(alpha) pour revenir à la ligne, on utilisera A1_STEP et A1_FSTEP on revient de dX' = -W donc -W * cos(alpha) pour X et -W*sin(alpha) pour Y mais il ne faut pas oublier non plus de descendre d'une ligne (donc dY' = 1) d'où STEP,FSTEP_X = -W*cos(alpha) -sin(alpha) STEP,FSTEP_Y = -W*sin(alpha) + cos(alpha) on va aussi utiliser le clipping du blitter pour ne pas écrire n'importe quoi si l'on sort du dessin du sprite original CLIP_X = W CLIP_Y = H et maintenant, il ne reste plus qu'à trouver d'où l'on commence dans A1 (c'est à dire quelles sont les coordonnées du point 0,0 dans l'image originale (là je ne suis plus dans le repère centré)) eh bien, on ressort encore nos formules de maths on obtient PIXEL,FPIXEL_X = CY*sin(alpha) - CX*cos(alpha) + CX PIXEL,FPIXEL_Y = CY - (CX*sin(alpha) + CY*cos(alpha)) et voilà!! un peu de code, au cas où je n'aurais pas été clair ça tourne l'image base_gfx dans l'image base_buffer notez que j'efface d'abord la zone (en mode phrase) puis ensuite je fais effectivement la rotation l'image a une largeur de 56 qui est aussi la largeur des données (WID56) l'angle est dans d1 j'ai utilisé une routine get_cos_and_sin qui lit simplement en data les valeurs pour le cosinus et le sinus (d1 vaut le cosinus et d2 le sinus) j'ai aussi bricolé vite fait une multiplication d'une valeur 16.16 (utilisée par le blitter) par un entier positif < 32768 n'hésitez pas à poser vos questions si je n'ai pas été clair Seb .macro wait_blitter .\~: move.l B_CMD,\1 ror.w #1,\1 bcc.s .\~ .endm .macro imul16_16 ;; \1 = registre contenant la valeur 16.16 ;; \2 = registre contenant un entier POSITIF sur 16 bits (15 bits donc) ;; \3 = registre temporaire pour calcul intermediaire ;; \1 est intacte apres l'operation ;; le resultat est stocke dans \2 move.w \2,\3 mulu.w \1,\3 ; partie fractionnaire swap \1 muls.w \1,\2 ; partie entiere swap \1 swap \2 ; decale de 16 clr.w \2 add.l \3,\2 ; ajoute la partie fractionnaire .endm rotate_base: W equ 56 H equ 50 CX equ 56/2 CY equ 32 ;; efface le buffer wait_blitter d0 move.l #base_buffer,A1_BASE move.l #PIXEL16|XADDPHR|PITCH1|WID56,A1_FLAGS move.l #0,A1_PIXEL move.w #1,d0 swap d0 move.w #-W,d0 move.l d0,A1_STEP move.w #H,d0 swap d0 move.w #W,d0 move.l d0,B_COUNT * move.l #(BLUE<<16)|WHITE,B_PATD * move.l #(RED<<16)|CYAN,B_PATD+4 move.l #0,B_PATD move.l #0,B_PATD+4 move.l #UPDA1|PATDSEL,B_CMD ;; rotation wait_blitter d0 move.l #base_buffer,A2_BASE move.l #PIXEL16|XADDPIX|PITCH1|WID56,A2_FLAGS move.l #0,A2_PIXEL move.w #1,d0 swap d0 move.w #-W,d0 move.l d0,A2_STEP move.l #base_gfx,A1_BASE move.l #PIXEL16|XADDINC|PITCH1|WID56,A1_FLAGS move.w #H,d0 swap d0 move.w #W,d0 move.l d0,A1_CLIP move.w angle,d1 bsr get_cos_and_sin move.w d2,d0 swap d2 swap d0 move.w d1,d0 swap d1 move.l d0,A1_FINC move.w d2,d0 swap d2 swap d0 move.w d1,d0 swap d1 move.l d0,A1_INC move.w #W,d3 imul16_16 d1,d3,d7; W*cos(alpha) move.w #W,d4 imul16_16 d2,d4,d7; W*sin(alpha) move.l d2,d5 neg.l d5 ; -sin(alpha) sub.l d3,d5 ; -sin(alpha)-W*cos(alpha) move.l d1,d6 ; cos(alpha) sub.l d4,d6 ; cos(alpha)-W*sin(alpha) move.w d6,d0 swap d6 swap d0 move.w d5,d0 swap d5 move.l d0,A1_FSTEP move.w d6,d0 swap d0 move.w d5,d0 move.l d0,A1_STEP move.w #CX,d3 imul16_16 d1,d3,d7; CX*cos(alpha) move.w #CY,d4 imul16_16 d2,d4,d7; CY*sin(alpha) sub.l d3,d4 add.l #CX<<16,d4 move.w #CX,d3 imul16_16 d2,d3,d7; CX*sin(alpha) move.w #CY,d5 imul16_16 d1,d5,d7; CY*cos(alpha) add.l d5,d3 neg.l d3 add.l #CY<<16,d3 exg.l d3,d4 move.w d4,d0 swap d4 swap d0 move.w d3,d0 swap d3 move.l d0,A1_FPIXEL move.w d4,d0 swap d0 move.w d3,d0 move.l d0,A1_PIXEL move.w #H,d0 swap d0 move.w #W,d0 move.l d0,B_COUNT move.l #CLIP_A1|UPDA1|UPDA1F|UPDA2|LFU_REPLACE|SRCEN|DSTA2,B_CMD rts
  4. pour recompiler les sources (inclues avec les Removers libraries), il faut madmac et aln pour tester, il faut juste l'uploader BJL par exemple [english] to recompile the sources (included with the Removers libraries), you will need madmac & aln for testing, you just need the BJL uploader for instance
  5. About The Blitter Speed

    As I have said in another thread about blitter, it is also really important to set the minimum number of blitter registers each time. In your case, I guess that for example A1_BASE is always the same so it is better to set it once for all outside your loop. By doing this very small change, I got a great spead improvement with 68k blitting (and I guess it is the same with the GPU)
  6. The Removers'libraries

    The Removers are proud to offer you as a downloadable archive their development libraries for the Atari Jaguar. Just follow the link there: http://removers.atari.org/softs/en/download.php Enjoy!
  7. The Removers'libraries

    thanks
  8. The Removers'libraries

    of course the code of the libraries is in the src directory it is intended to be used by your own code and this is 68k and GPU code you can see how to integrate these in your own code by looking at the examples of the distribution by the way, jugs should do it also (but I have not tried)
  9. The Removers'libraries

    Of course, you need to know a bit how to develop on the Jaguar before using these libraries. To compile the examples you need madmac and aln. To upload them on the Jaguar you need either a BJL modded Jaguar and a BJL loader or a developer Jaguar with an Alpine Board and rdbjag or wdb.
  10. The Removers'libraries

    There is a documentation and two examples of use included in the distribution. Do you manage to compile the examples?
  11. The Removers'libraries

    The file is a tar gzipped archive. It contains some symbolic links. On filesystems that do not support them, just replace the links with the source file. Beware also of the long filenames. Thanks Zerosquare
  12. Jagware, Mailling List

    Yes, I am interested but what will be the frequency of this mailing list?
  13. Jaguar Image Converter

    no, my tool is not smart enough (at least for the moment) if you want to generate 8 bit bitmaps (or less), your source image should be clut based (so 8 bit or less) and second precision: my tool converts bmp, gif, jpg, whatever to cry or rgb file not the converse (this is a replacement for tga2cry thus)
  14. Welcome to the non-froggies people !!

    Same for me Welcome Paolo
  15. Jaguar Image Converter

    No, this is a missing feature. But you can convert CLUT based image with it (it generates then two files: a file containing the CLUT and a file containing the MAP). So, if the test case you mentionned, it will generate several time the same CLUT file. (use -clut to generate 8 bits and in addition -opt-clut to generate the optimal depth (1 bit, 2 bits or 4 bits if possible) Cheers
  16. Welcome to the non-froggies people !!

    I am more than happy to see you here Matthias, welcome
  17. Bienvenue à tous les nouveaux !

    et pourvu que ça dure
  18. Un Controller Neo Geo Sur Jaguar

    question qui n'a rien à voir, avec quoi tu ferais un cable BLL (Lynx)? Est-ce qu'il existe des plaques génériques pour pouvoir faire des circuits simples?
  19. Bienvenue à tous les nouveaux !

    en l'occurence pour TNT, c'est bien parce que tu as été pistonné par un team leader en fait, j'espère surtout qu'on ne fera pas comme sur d'autres forums que je ne nommerais pas où les droits sont attribués uniquement en fonction du nombre de postes. Je pense plus sain le fait d'avoir un jury qui décide qu'untel a montré suffisamment de motivation ou a fait des choses significatives pour être promu au rang suivant (plutôt au mérite donc) GT pour la qualité
  20. Le UART bug ...

    I confirm Stabylo is a real master at disassembling code and it is not a bad idea however to try to find the bug fix for the UART. I understood that lots of people would be more than happy if someone manages to recompile Doom with the UART bug fixed. But once again, maybe it is possible in this case to use the JagCF UART instead.
  21. Le UART bug ...

    bon, avant de prouver que c'est du reverse-engineering ... mais c'est peut être plus dur à faire que de réfléchir "from scratch" et puis non, c'est pas dans l'esprit en plus, on s'en fout, vu qu'on aura la JagCF avec un UART sans bug
  22. Another Birthday !!

    Très bon anniversaire
  23. Jagwire, Usb For Bjl

    Vivement que ce Catnip cable sorte! Par contre, ça serait bien que vous pensiez aux utilisateurs de Linux pour le soft de transfert...
  24. Hello, I have not improved my test program but I have added some color bars to bench the blitter... The yellow bar (not visible actually) represents the time the 68k initialises the blitter and the red bar represents the time spent by the blitter to do the work. Actually, I am a bit disappointed by this bench. What about you? The source image is 64x44 and the target image is 128x128 (16 bits depth) get the binary there: http://removers.atari.org/blit2dbench.bin Seb
  25. One Year For Jagware !!

    Happy birthday Jagware Hope the next year will be the year of the JagCF!
×