glokyfull

meduse dot (circle dots in tile)

May 12th, 2018
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;
  2. ;   circles of dots
  3. ;   code by gloky / mjj prod
  4. ;  
  5. ;
  6. ;
  7.  
  8.     TEXT
  9. standalone EQU 1        ; cette ligne en rem: source utilis‚ dans un merge de plusieur effet
  10.                 ; cette ligne activ‚: le source fonctionne en standalone
  11.  
  12. DELAYVECTOR equ 1
  13. TYPEDELAYVECTOR equ 4       ; pour 4 plan de delay vector 0..3
  14.         ; equ 3     ; pour 3 plan 0..2
  15.         ; 2     pour 2 plan 0..1
  16.         ; 1     inutilis‚
  17. NBSCREEN    equ 2
  18. CONFIG  equ 1
  19.     ifeq CONFIG
  20. NBDOTPERCIRCLE  equ 32
  21. NB_POSDOTPERCIRCLE  equ 32*8
  22. NBCIRCLES   equ 90
  23. RAYON_START equ 10
  24. RAYONMIN    equ RAYON_START
  25. ANGLEWRAP   equ 8           ; combien de version du cercle pour angle
  26.     endc
  27.  
  28.     ifeq (CONFIG-1)
  29. NBDOTPERCIRCLE  equ 32
  30. NB_POSDOTPERCIRCLE  equ 32*16
  31. NBCIRCLES   equ 54 52   38
  32. RAYON_START equ 20 6    20
  33. RAYON_STEP  equ 2
  34. RAYONMIN    equ RAYON_START
  35. ANGLEWRAP   equ 16          ; combien de version du cercle pour angle
  36.     endc
  37.  
  38.  
  39. CERC6_depart
  40.  
  41.     ifne STANDALONE
  42.     clr.l -(sp)
  43.     move.w #$20,-(sp)
  44.     trap #1
  45.     addq.l #6,sp
  46.     ENDC
  47.  
  48.     jsr inittiles
  49.  
  50.     lea ptrscr,a0
  51.     move.l #screen+256,d0
  52.     clr.b d0
  53.     move.l d0,(a0)+
  54.     add.l #32000,d0
  55.     move.l d0,(a0)
  56.    
  57.  
  58.  
  59.     jsr wvbl
  60.     move.b #0,$ffff8260.w
  61.  
  62.     MOVE.L ptrscr,a0
  63.     moveq.l #0,d0
  64.     move.w #7999,d1
  65. cls move.l d0,(a0)+
  66.     move.l d0,(a0)+
  67.     dbf d1,cls 
  68.  
  69.     LEA PICTURE+36,A1
  70.     MOVE.L ptrscr,a0
  71.     lea 32000(a0),a2
  72.     move.w #3999,d1
  73.     moveq #0,d4
  74. affpic  move.w (a1)+,d2
  75.     ;or.w (a1)+,d2
  76.     ;or.w (a1)+,d2
  77.     ;or.w (a1)+,d2
  78.     addq.l #6,a1
  79.    
  80.     move.w d4,(a0)+
  81.     move.l d4,(a0)+
  82.     move.w d2,(a0)+
  83.     move.w d4,(a2)+
  84.     move.l d4,(a2)+
  85.     move.w d2,(a2)+
  86.     dbf d1,affpic
  87.     jsr initsomething
  88.    
  89.  
  90.     jsr initWaves   ; doit etre lancé apres initsomething
  91.  
  92.     movem.l $ffff8240.w,d0-d7
  93.     movem.l d0-d7,oldpalette
  94.     ifne standalone
  95.     move.w #$135,$ffff8240.w
  96.     move.w #$777,$ffff8242.w
  97.     endc   
  98.  
  99.  
  100.     move.w #100,d0
  101. .clearpos:
  102.     move.w d0,-(sp)
  103.     jsr calcSpot
  104.     move.w (sp)+,d0
  105.     dbf d0,.clearpos
  106.  
  107.     ifeq STANDALONE
  108.     rts
  109.     endc
  110.  
  111. CIRCLE_main
  112.     ifeq standalone
  113.     move.w #$135,$ffff8240.w
  114.     move.w #$777,$ffff8242.w
  115.     endc
  116.     jsr majscroll
  117.     ifne DELAYVECTOR
  118.     jsr selplan
  119.     move.w selplan0+2,d0
  120.     lea palpatine,a0
  121.     add.w d0,d0
  122.     ;add.w d0,d0
  123.     add.w d0,a0
  124.     move.l (a0),a0
  125.     movem.l (a0)+,d0-d7
  126.     movem.l d0-d7,$ffff8240.w
  127.     endc
  128.     ;movem.l palette00,d0-d7
  129.     ;movem.l d0-d7,$ffff8240.w
  130.  
  131.     cmp.b #$b9,$fffffc02.w
  132.     beq.w .fin
  133.    
  134.     ;move.l ptrscr,a0
  135.     ;ifne blitter_cls
  136.     ;jsr gloky_blitter_clear
  137.     ;endc
  138.     ;ifeq blitter_cls
  139.     ;jsr clear_circle
  140.     ;endc
  141.     *move.w #$11,$ffff8240.w
  142.     ;not.b $ffff8240.w
  143.     jsr cleartiles 
  144.     ;not.b $ffff8240.w
  145.     jsr calcwave
  146.  
  147.     ;move.w #0,$ffff8240.w
  148.     move.l ptrscr,a4
  149.     ;addq #6,a4
  150.     ifne DELAYVECTOR
  151.     move.w selplan0+2,d0
  152.     lsr #1,d0
  153.     and.b #$FE,d0
  154.     ext.l d0
  155.     add.l d0,a4
  156.     endc
  157.     jsr displaytiles
  158.     ;move.w #$134,$ffff8240.w
  159.  
  160.     *not.w $ffff8240.w
  161.    
  162.    
  163.     move.l ptrscr,d0
  164.     lsr.w #8,d0
  165.     move.l d0,$ffff8200.w
  166.  
  167.     move.l ptrscr,d0
  168.     move.l ptrscr+4,d1
  169.     move.l d1,ptrscr
  170.     move.l d0,ptrscr+4
  171.  
  172.  
  173.     not $ffff8240.w
  174.     ;not $ffff8240.w
  175.     ifne STANDALONE
  176.     jsr wvbl
  177.     endc
  178.     not $ffff8240.w
  179.     IFNE STANDALONE
  180.     bra CIRCLE_main
  181.     ENDC
  182. .fin
  183.     ifeq STANDALONE
  184.     rts
  185.     endc
  186.     movem.l oldpalette,d0-d7
  187.     movem.l d0-d7,$ffff8240.w  
  188.     move.l $44e.w,d0
  189.     lsr.w #8,d0
  190.     move.l d0,$ffff8200.w
  191.  
  192.     move.w #$777,$ffff8240.w
  193.     move.b #1,$ffff8260.w
  194.  
  195.     clr.w -(sp)
  196.     trap #1
  197.    
  198. palette00
  199.     dc.w $FFF,$000,0,$0e,$1
  200.  
  201. wvbl:   move.l $466.w,d0
  202. .loop   cmp.l $466.w,d0
  203.         beq.s .loop
  204.         rts
  205.        
  206.        
  207. selplan0        dc.w 0
  208.         dc.w 8
  209.  
  210. selplan     move.w selplan0+2,d0
  211.         ;not.w selplan0
  212.         ;tst.w selplan0
  213.         ;beq.s .1b
  214.         ;move.w selplan0+2,d0
  215.         addq #2,d0
  216.         cmp.w #12,d0
  217.         blt.s .ss
  218.         moveq #0,d0
  219. .ss
  220. .1      move.w d0,selplan0+2
  221. ;       lsr #1,d0
  222. ;       lsl #1,d0
  223. .1b
  224.         rts
  225.  
  226. init_generatedCode
  227. *;_mkconvx
  228. *   lea convX,a0
  229. *   moveq #0,d1
  230. *   move.w #$0200,d2    +0200= or.b d1,dep(a0) puis or.b d2,dep(a0), etc..
  231. *
  232. *.0 move #$8128,d0
  233. *.1
  234. *   move.w d0,(a0)+
  235. *   move.w d1,(a0)+
  236. *   add d2,d0
  237. *   cmp.w #$8128+8*$200,d0
  238. *   bne.s .1
  239. *  
  240. *   addq #1,d1
  241. *   move.w #$8128,d0
  242. *.2
  243. *   move.w d0,(a0)+
  244. *   move.w d1,(a0)+
  245. *  
  246. *   add d2,d0
  247. *   cmp.w #$8128+8*$200,d0
  248. *   bne.s .2
  249. *   addq #7,d1
  250. *  
  251. *   cmp.w #8*20,d1
  252. *   bne.s .0
  253. ;*_mkconvx fin
  254.    
  255.     lea convX,a0
  256.     moveq #0,d0
  257.     move.w #19,d1
  258.     moveq #0,d2
  259. .0
  260.     move.w d0,(a0)+
  261.     addq #2,d0
  262.     move.w d2,(a0)+     ; offset
  263.     cmp.w #32,d0
  264.     bne.s .0
  265.     addq #2,d2      ; 2 au lieu de 8 offset +16 pixel
  266.     and.w #7*2,d2       ;***
  267.     moveq #0,d0
  268.     dbf d1,.0
  269.  
  270.  
  271.     lea lstptrcode,a3
  272.     lea bsscode,a1
  273.     lea convX,a2
  274.     lea lstorcount,a4
  275.     lea lstor0,a5
  276.        
  277.     moveq #NBCIRCLES-1,d7
  278. .looptaille:
  279.    
  280.     move.w d7,d6
  281.    
  282.    
  283.     add #RAYON_START,d6     ; =1,
  284.     add d6,d6           ; d6=64*2 au depart
  285.    
  286.     ;ADD D6,D6
  287.     ;ADD D7,D6
  288.  
  289.     move.w #ANGLEWRAP-1,d5      ; 8-1
  290.     lea circletable,a0
  291.    
  292. .loopAngle:
  293.     ifeq STANDALONE
  294.     jsr test_exit_demo
  295.     endc
  296.     move.w d5,-(sp)
  297.    
  298.     ;move.l a1,(a3)+
  299.  
  300.  
  301.     moveq #0,d0
  302.     lea lstorcount,a4
  303.     rept 8
  304.     move.l d0,(a4)+
  305.     endr        ; effacer les 16 compteurs
  306.     lea lstorcount,a4
  307.     lea lstor0,a5
  308.    
  309.     move.w #NBDOTPERCIRCLE-1,d5     ; 32-1 calcul d'un cercle de 32 dot
  310. .loopCircle
  311.     ifeq STANDALONE
  312.     jsr test_exit_demo
  313.     endc
  314.     move.w (a0)+,d0     ; x
  315.     move.w (a0)+,d1     ; y
  316.     ext.l d0
  317.     ext.l d1
  318.    
  319.     muls d6,d0
  320.     muls d6,d1
  321.     swap d0
  322.     swap d1
  323.     ;add.w #96-48,d0        ; + centre
  324.    
  325.     lsr #1,d6
  326.     add d6,d0
  327.     add d6,d1
  328.     add d6,d6
  329.    
  330.     tst.w d0
  331.     bpl.s .okok1
  332.     add.w #128*10,d0
  333. .okok1
  334.     tst.w d1
  335.     bpl.s .okok2
  336.     add.w #128*10,d1
  337. .okok2
  338.  
  339.     and.w #127,d0      nombre periodique sur le tile
  340.     and.w #127,d1
  341.     ;add.w #96,d0
  342.     ;add.w #96,d1
  343.  
  344.     ;move.w d6,d3      
  345.     ;lsr #2,d3
  346.     ;add d3,d0
  347.  
  348.     ; now a partir de d2 et d3 on creer un or.b dn,dep(a0)
  349.     ; a2 = convX 1 pixel (pas de subpixel)
  350.     ; d0 = x
  351.     move.w d0,d3
  352.     add d3,d3
  353.     add d3,d3
  354.     move.w (a2,d3),-(sp)        ; numero de bit*2
  355.     move.w 2(a2,d3),d4  ; offset x
  356.  
  357.     ; calcul de l'offset adequat: int(d2/16)*2+d3* 256 oixel/16
  358.    
  359.     ; mulu #160,d1
  360.     lsl #5,d1  *32 octect =256 pix (16 pix *16  word=32 octet
  361.     ;move.w d1,d3
  362.     ; * 128 + *32
  363.     ;lsl #2,d3  *128;
  364.     ;add d3,d3
  365.     ;add d3,d3
  366.     ;add d3,d1  *160
  367.    
  368.     add d1,d4       ; d4 = offsetx+y
  369.  
  370. ;   move.l d4,(a1)+
  371.    
  372.     ;a4 = lstorcount
  373.     ;a5 = lstor0
  374.  
  375.     move.w (sp)+,d1         ; numero de bit*2
  376.  
  377.     move.w (a4,d1),d3       ; count lstX    (*2)
  378.     move.w d1,d0
  379.     lsl #5,d0
  380.     lea (a5,d0),a6      ; a6=lstX
  381.     add d3,a6           ; + countlstx
  382.  
  383.     move.w d4,(a6)      ; lstX+count*2=offsettotal
  384.     addq #2,d3
  385.     move.w d3,(a4,d1)
  386.    
  387.     dbra d5,.loopCircle
  388.  
  389. ;****** now on a 16 liste d'offsets ; on genere les 16 routine qui affiche le cercle
  390.     ; a4 = count lstX
  391.     ; a5 = lst0
  392. ;  
  393.  
  394.     ;lea whereIScode,a6
  395.     lea lstorcount+32,a4
  396.     move.w #15,d5       ; 16 decalage/routine
  397.     move.l a1,a6
  398. .loopcgmake1
  399.     move.l a1,(a3)+     ; a3  = lstptrroutine
  400.     *move.l a6,(a3)+
  401.     lea lstor0,a5
  402.    
  403.     move d5,d0
  404.     lsl #6,d0       ; *64
  405.     add d0,a5           ; a5 = lstF puis lstE etc  // deprecated: puis lst1 puis lst2 etc
  406.     move.w -(a4),d4         ; d4 = countX  
  407.     bne.s .dot
  408. ; nodot:
  409.     ** a a modifier ici
  410. ;   move.l #routinevide,-4(a3)
  411.     bra.s .nodot
  412. .dot
  413.     lsr #1,d4
  414.     subq #1,d4
  415. .bcl
  416.     move.w #$8168,(a1)+         ;$8128 or.w d0,$1234(a0)
  417.     move.w (a5)+,(a1)+
  418.     dbf d4,.bcl
  419. .nodot
  420.     ;move.w #RTS,(a1)+
  421.     move.w #$D040,(a1)+         ; add d0,d0 pour prochain points
  422.  
  423.     dbf d5,.loopcgmake1
  424.     move.l rtsjmp,(a1)+
  425.     move.w rtsjmp+4,(a1)+
  426. ;   move.w #$4e75,(a1)+
  427. ; ***
  428.  
  429. ;********  
  430.     move.w (sp)+,d5
  431.     dbra d5,.loopAngle
  432.     ifeq STANDALONE
  433.     jsr test_exit_demo
  434.     endc   
  435.     dbra d7,.looptaille
  436.  
  437. routinevide rts
  438.    
  439. initOneWave
  440. ; d0 = rayon
  441. ; d1 = pas interne
  442.     lea sinwave,a0
  443.     lea buffer1,a1
  444.     move.w #511,d7
  445.        
  446.     move.w d0,d2
  447.     add d2,d2
  448.    
  449. .loop
  450.     move.w (a0)+,d4
  451.     muls d2,d4
  452.     swap d4
  453.     add d0,d4
  454.     add d4,d4
  455.     add d4,d4
  456.     move.w d4,(a1)+
  457.     dbf d7,.loop
  458.    
  459.     lea buffer1,a0
  460.     move.l a6,a1            ; reftablesinus
  461.     move.w d1,d0            ; pas interne
  462.     move.w #NBCIRCLES,d1    ; NBCIRCLES=96
  463.     move.w #512,d2
  464.     bsr createSpecialSin
  465.    
  466.     rts
  467.    
  468. initWaves
  469.         move.w #150,d0
  470.         move.w #512-17,d1
  471.         LEA memoire,a2
  472.         lea refs1,a6
  473.         bsr initOneWave
  474.    
  475.         move.w #200,d0
  476.         move.w #2,d1
  477.         lea refs2,a6
  478.         bsr initOneWave
  479.        
  480.         move.w #283,d0
  481.         move.w #512-5,d1
  482.         lea refs3,a6
  483.         bsr initOneWave
  484.  
  485.         move.w #224,d0
  486.         move.w #4,d1
  487.         lea refs4,a6
  488.         bsr initOneWave
  489.  
  490.  
  491.        
  492.         rts
  493.    
  494. calcwave
  495.         lea refs1,a6
  496.         move.w curangle1,d0
  497.         add d0,d0
  498.         add d0,d0
  499.         move.l (a6,d0),a0
  500.        
  501.         lea refs2,a6
  502.         move.w curangle2,d0
  503.         add d0,d0
  504.         add d0,d0
  505.         move.l (a6,d0),a1
  506.        
  507.         lea refs3,a6
  508.         move.w curangle3,d0
  509.         add d0,d0
  510.         add d0,d0
  511.         move.l (a6,d0),a2
  512.  
  513.         lea refs4,a6
  514.         move.w curangle4,d0
  515.         add d0,d0
  516.         add d0,d0
  517.         move.l (a6,d0),a3
  518.  
  519.  
  520.        
  521.         ;lea result,a6
  522.  
  523.         lea calcsinbuffer,a5        ; buffer de 96 word
  524.  
  525.         move.w #NBCIRCLES-1,d7      ; 96-1
  526.         ifeq (ANGLEWRAP-8)
  527.         move.w #%000000111000000,d6
  528.         endc
  529.         ifeq (ANGLEWRAP-16)
  530.         move.w #%000001111000000,d6
  531.         endc
  532.  
  533. .loooop
  534.         move.w (a0)+,d0
  535.         add (a1)+,d0
  536.         add (a2)+,d0
  537.         add (a3)+,d0
  538.     *   lsr #3,d0
  539.     *   and #%0000000000011100,d0
  540.         ; d0 =angle*2 ,
  541.     *   lsl #5,d0   ; *32           ; angle*32 long
  542.  
  543.         ;add d0,d0
  544.         ;add d0,d0
  545.         and d6,d0
  546.  
  547.         move.w d0,(a5)+
  548.         dbf d7,.loooop
  549.        
  550.         *lea (a5,d0),a4
  551.         *move.l (a4)+,(a6)+     ; adresse appel         ; A MODIF
  552.         *move.l (a4)+,(a6)+     ; adresse ou il faut placer le rts
  553.        
  554.         *lea 32*4(a5),a5    ; passer au cercle suivant
  555.         *dbf d7,.loooop
  556.    
  557.         ; now dans calcsinbuffer on a 96 valeur correspondant au sinus
  558.        
  559.         jsr calcSpot        ; calcul de spot+scroll+realposition
  560.                
  561.         move.w #NBCIRCLES-1,d7  ;96-1
  562.         lea realposition,a6
  563.         lea calcsinbuffer,a5
  564.         lea lstptrcode,a4
  565.            
  566.         move.w #$4e75,d6
  567.         ;move.w #$8168,d5 la plupart du temps c'est 8168 sinon c'est un rts
  568.         move.l #$4ed1,d6    jmp (a1)
  569.         move.l #autototo,a1    
  570.  
  571. loooop2
  572.         move.w (a5)+,d0     ; angle*16*4
  573.         lea (a4,d0),a2      ; a2 = lstptrcode[cercle+angle]
  574.        
  575.         move.l (a6)+,a0     ; adresse ecran resultat fonction
  576.         ;lea 8(a0),a1
  577.         move.l (a2),a3
  578.         add.w (a6)+,a2      ; decalage*8
  579.                                   ;add d1,a2
  580.         move.l (a2),a2      ; adresse routine
  581.         moveq #1,d0
  582.         jmp (a2)
  583. autoto2:
  584.         addq.l #2,a0
  585.         move.w (a2),d5
  586.         move.w d6,(a2)      ; d6=rts
  587.         jmp (a3)
  588. autototo:
  589.         move.w d5,(a2)
  590.         ;move.w d5,-4(a2)       ; d5=add d0,d0
  591.    
  592.         ; changement de cercle
  593.         lea 4*16*ANGLEWRAP(a4),a4       *8
  594.        
  595.         dbf d7,loooop2
  596.        
  597.        
  598.         move.w curangle1,d0
  599.         add #15,d0
  600.         and #511,d0
  601.         move.w d0,curangle1
  602.        
  603.         move.w curangle2,d0
  604.         add #512-9,d0
  605.         and #511,d0
  606.         move.w d0,curangle2
  607.        
  608.         move.w curangle3,d0
  609.         add #3,d0
  610.         and #511,d0
  611.         move.w d0,curangle3
  612.  
  613.         move.w curangle4,d0
  614.         add #2,d0
  615.         and #511,d0
  616.         move.w d0,curangle4
  617.        
  618.         rts
  619. rtsjmp      jmp autoto2
  620.    
  621. prepareScaleTable
  622.     lea superScaleTable,a0          ; buffer de 200 word *96
  623.     move.w #NBCIRCLES-1,d7
  624. .loop0
  625.  
  626.     move.w d7,d2
  627.     add #RAYONMIN,d2
  628.      ;move.w #96,d2
  629.      ;sub d7,d2 ; taille du cercle correspondant
  630.      ;sub #1,d2
  631.     add d2,d2
  632.     move.w #200,d3
  633.     sub d2,d3   ; 199-taille du cercle = nb de pixel max
  634.    
  635.     ; scale[100] doit placer le cercle au milieu
  636.     ; d2 = taille du cercle
  637.     ; en 100,   placer en 100-d2/2
  638.     ; en 0 placer en 0
  639.     ; en 200    placer en 200-d2
  640.     ; donc de 0 a 200 = 0 a 200-d2
  641.     ; il faut ajouter a chaque fois (200-d2)/200  = d3/200
  642.    
  643.     moveq #0,d4
  644.     move.w d3,d4
  645.     swap d4             d3*65536
  646.     divu #200,d4        ;/200
  647.     swap d4
  648.     clr.w d4
  649.     swap d4
  650.    
  651.    
  652.     move.w #199,d1
  653.     moveq #0,d6
  654.     moveq #0,d5
  655. .oneTable:
  656.     move.w d5,d0
  657.     and.w #127*2,d0
  658.     move.w d0,(a0)+
  659.     add.l d4,d6
  660.     swap d6
  661.     move.w d6,d5
  662.     swap d6
  663.     add d5,d5
  664.    
  665.     dbf d1,.oneTable
  666.     dbf d7,.loop0
  667.     rts
  668.  
  669. initsomething
  670.     lea posSpot,a0
  671.     move.w #100*2,d0
  672.     move.w #100*2,d1
  673.     move.w #NBCIRCLES-1,d7
  674. .bcl
  675.     move.w d0,(a0)+
  676.     move.w d1,(a0)+
  677.     dbf d7,.bcl
  678.      
  679.     jsr prepareScaleTable
  680.     jsr init_generatedCode
  681.    
  682.     lea convX2,a0
  683.     moveq #0,d0
  684.     moveq #19,d7
  685.     moveq #0,d1
  686. .loop
  687.     move.w d0,(a0)+         ; decalage
  688.     move.w d1,(a0)+         ; offset
  689.     add.w #4,d0             ; decalage*8
  690.     cmp.w #16*4,d0
  691.     bne.s .loop
  692.     moveq #0,d0
  693.     add.w #2,d1     ;was 8
  694.     and.w #7*2,d1
  695.     dbf d7,.loop
  696.    
  697.     lea convY,a0
  698.     move.w #0,d0
  699.     move.w #32,d1       ; 256 pix 1 plan
  700.     move.w #255,d7
  701. .loop2
  702.     move.w d0,(a0)+
  703.     add d1,d0
  704.     and.w #127*32,d0
  705.     dbf d7,.loop2
  706.    
  707.    
  708.     rts
  709.  
  710. majscroll:
  711.     lea scrollX,a0
  712.     move.w (a0),d0
  713.     add.w #5,d0
  714.     move.w #2047,d1
  715.     and.w d1,d0
  716.     move.w d0,(a0)+
  717.     move.w (a0),d0
  718.     add.w #2040,d0
  719.     and.w d1,d0
  720.     move.w d0,(a0)+
  721.     rts
  722.  
  723. scrollX dc.w 0
  724. scrollY dc.w 0
  725. calcSpot:
  726.     bsr scroll_posSpot      ; positione a2 a la fin du posSpot
  727.  
  728.     lea cosinusSpot,a0
  729.     lea sinusSpot,a1
  730.  
  731.     move.w cspot,d0     ; angle cosinus spot
  732.     addq.w #2,d0
  733.     and.w #511,d0
  734.     move.w d0,cspot
  735.     add d0,d0           ; angle*2
  736.     move.w (a0,d0),d1   ; d1 = (100+100*cos(angle))*2
  737.    
  738.     move.w sspot,d0
  739.     addq.w #3,d0
  740.     and.w #511,d0
  741.     move.w d0,sspot
  742.     add d0,d0
  743.     move.w (a1,d0),d2   ; d2 = 100+100*sin(angle)
  744.    
  745.  
  746.  
  747.     lea cosinusSpot,a0
  748.     move.w cspot+2,d0       ; angle cosinus spot
  749.     add.w #512-2,d0
  750.     and.w #511,d0
  751.     move.w d0,cspot+2
  752.     add d0,d0           ; angle*2
  753.     add.w (a0,d0),d1    ; d1 = (100+100*cos(angle))*2
  754.     move.w sspot+2,d0
  755.     addq.w #5,d0
  756.     and.w #511,d0
  757.     move.w d0,sspot+2
  758.     add d0,d0
  759.     add.w (a1,d0),d2    ; d2 = 100+100*sin(angle)
  760.    
  761.     lsr #1,d1
  762.     lsr #1,d2
  763.     and.w #$FFFE,d1
  764.     and.w #$FFFE,d2
  765.     ;lea posSpot,a0
  766.     move.w d1,(a2)+
  767.     move.w d2,(a2)+
  768.  
  769. ; *********
  770. ; conversion de posSpot a realposition:
  771. ; ********
  772.     lea superScaleTable,a0          ; buffer de 200 word *96
  773.     lea posSpot,a1
  774.     lea realposition,a2         ; buffer: offset,decalage
  775. titi:
  776.     lea convX2,a3
  777.     movem.w scrollX,d0/d1
  778.     lsr #3,d0
  779.     lsr #3,d1
  780.     move.w #127*2,d2
  781.     and d2,d0
  782.     and d2,d1
  783.     add d0,d0
  784.     add d0,a3
  785.     lea convY,a4
  786.     add d1,a4
  787.     ;add.w scrollY,a4
  788.     ;move.l ptrscr,a5           ; ecran courant             ; a modifier pour pointer sur buffer de 256x256 pix 1 plan
  789.     lea buffertile,a5
  790.  
  791.     ;move #320,d5
  792.     ;sub NBCIRCLES*4-40(a1),d5
  793.     ;move #200,d6
  794.     ;sub NBCIRCLES*4-38(a1),d6
  795.    
  796.     ;move.w scrollX,d0
  797.     ;move.w scrollY,d1
  798.     move.w #NBCIRCLES-1,d7     
  799. .bcl
  800.     move.w (a1)+,d2             ; premiere coord , cercle de rayon 1
  801.     ;add d5,d0
  802.     ;add d0,d0
  803.     move.w (a0,d2),d2           ; superScaleTable[d0]
  804.     ;and.w #127*2,d2
  805.     ;add d0,D2
  806.     add d2,d2
  807.     move.l (a3,d2),d3           ; d3 = decalage,offsetX
  808.    
  809.     move.w (a1)+,d2             ; y
  810.     ;add d6,d1
  811.     ;add d1,d1
  812.     move.w (a0,d2),d4           ; superscaleTable[d1]
  813.     ;ADD d1,D4
  814.     ;and.w #127*2,d4
  815.     add.w (a4,d4),d3            ; d3= decalage,offsetX+offsetY
  816.     lea (a5,d3.w),a6
  817.     move.l a6,(a2)+             ; adresse ecran+offset
  818.     swap d3
  819.     move.w d3,(a2)+
  820.    
  821.     lea 400(a0),a0          ; passage au 'scaleur' suivant
  822.  
  823.  
  824.     dbf d7,.bcl
  825.  
  826.     ; now realposition = liste de 96 (adresse ecran, decalage)
  827.     rts
  828.    
  829.  
  830.  
  831. dsptiledata2
  832.     move.w d0,$0(a4)
  833.     move.w d1,8(a4)
  834.     move.w d2,16(a4)
  835.     move.w d3,24(a4)
  836.     move.w d4,32(a4)
  837.     move.w d5,40(a4)
  838.     move.w d6,48(a4)
  839.     move.w d7,56(a4)
  840. dsptiledata3
  841.     lea 32(a0),a0       ; +32
  842.     lea 32(a2),a2
  843.     lea 32(a1),a1
  844.     lea 32(a3),a3
  845.    
  846.     ;add d1,a3
  847.  
  848.  
  849. flag    dc.b 0
  850.     even
  851. copyadd
  852.     tst.b flag
  853.     bne.s .1
  854.     lea dsptiledata3,a4
  855.     move.l (a4)+,(a1)+
  856.     move.l (a4)+,(a1)+
  857.     bra.s .2
  858. .1  lea dsptiledata3+8,a4
  859.     move.l (a4)+,(a1)+
  860.     move.l (a4)+,(a1)+
  861. .2  not.b flag
  862.     rts
  863.    
  864.  
  865. inittiles:
  866.     lea bsstileram,a1
  867.     moveq #127,d4
  868.     moveq #0,d6
  869.     bra .loopligne
  870. .loopligne0:
  871.     jsr copyadd
  872. .loopligne:
  873.     jsr cpdsptiledata4
  874.     lea dsptiledata2,a5
  875.     moveq #7,d7
  876. .loop:
  877.     move.l d6,d3
  878.     moveq #0,d5
  879.     move.w (a5)+,d0
  880.     move.w (a5)+,d1         ; d1 = 0..56
  881. .lp move.w d1,d2
  882.     move.w d0,(a1)+
  883.     move.w d1,(a1)
  884.     add.w d6,(a1)+
  885.     add.w #64,d1
  886.     move.w d0,(a1)+
  887.     move.w d1,(a1)
  888.     add.w d6,(a1)+
  889.     add.w #64,d1
  890.     cmp.w #160,d1
  891.     bpl.s .skip
  892.     move.w d0,(a1)+
  893.     move.w d1,(a1)
  894.     add d6,(a1)+
  895. .skip
  896.     sub.l #128,d1
  897.     add.l #128*160,d6
  898.     cmp.l #32000-160,d6
  899.     bpl.s .skip2
  900.     bra.s .lp
  901. .skip2
  902.     move.l d3,d6
  903.     ;sub.l #256*160,d6
  904.     dbf d7,.loop
  905.     add.l #160,d6
  906.     dbf d4,.loopligne0
  907.     move.w #$4e75,(a1)+
  908.     rts
  909.  
  910. cpdsptiledata4
  911.             ;move.l a4,-(sp)
  912.     lea dsptiledata4,a6
  913.     lea findsp4,a4
  914.  
  915. .1  move.w (a6)+,(a1)+
  916.     cmp.l a6,a4
  917.     bne.s .1
  918.     rts
  919.  
  920. dsptiledata4
  921.     movem.w (a0)+,d0-d7
  922.     or.w (a1)+,d0
  923.     or.w (a1)+,d1
  924.     or.w (a1)+,d2
  925.     or.w (a1)+,d3
  926.     or.w (a1)+,d4
  927.     or.w (a1)+,d5
  928.     or.w (a1)+,d6
  929.     or.w (a1)+,d7
  930.  
  931.     or.w (a2)+,d0
  932.     or.w (a2)+,d1
  933.     or.w (a2)+,d2
  934.     or.w (a2)+,d3
  935.     or.w (a2)+,d4
  936.     or.w (a2)+,d5
  937.     or.w (a2)+,d6
  938.     or.w (a2)+,d7
  939.  
  940.     or.w (a3)+,d0
  941.     or.w (a3)+,d1
  942.     or.w (a3)+,d2
  943.     or.w (a3)+,d3
  944.     or.w (a3)+,d4
  945.     or.w (a3)+,d5
  946.     or.w (a3)+,d6
  947.     or.w (a3)+,d7
  948. findsp4
  949.  
  950. cleartiles
  951.   lea buffertile+8192,a0
  952.     moveq #0,d1
  953.     move.l d1,d2
  954.     move.l d1,d3
  955.     move.l d1,d4
  956.     move.l d1,d5
  957.     move.l d1,d6
  958.     move.l d1,d7
  959.     move.l d1,d0
  960.     move.l d0,a1
  961.     move.l d0,a2
  962.     move.l d0,a3
  963.     move.l d0,a4
  964.     move.l d0,a5
  965.     move.l d0,a6
  966.     rept 146
  967.     movem.l d0-d7/a1-a6,-(a0)
  968.     endr
  969.     movem.l d0-d3,-(a0)
  970.     rts
  971. displaytiles:
  972.     ; a4 = ecran logique
  973.     lea buffertile,a0
  974.     lea 16(a0),a1
  975.     lea 128*32(a0),a2
  976.     lea 128*32+16(a0),a3
  977.     jmp bsstileram
  978.  
  979.  
  980.  
  981. scroll_posSpot:
  982.     lea posSpot,a1
  983.     lea 4(a1),a0
  984.     move.w #NBCIRCLES-2,d7
  985.  
  986. .1  move.l (a0)+,(a1)+
  987.     dbf d7,.1
  988.     move.l a1,a2
  989.     rts
  990.    
  991.     ifne STANDALONE
  992. createSpecialSin
  993. ; a0 = table sinus de n element
  994. ; a1 = reftablesinus
  995. ; a2 = buffer resultat
  996. ; d0 = pas interne
  997. ; d1 = nombre de copie de valeur
  998. ; d2 = nombre n d'element de la table sinus
  999. ; retour = d1 : nombre de memoire occupé sur buffer resultat
  1000.  
  1001.     move.w d2,d3
  1002.     lea bufferFlag,a3
  1003.     subq #1,d3
  1004. .clrflag
  1005.     clr.b (a3)+
  1006.     dbra d3,.clrflag
  1007.    
  1008.  
  1009.     move.w d2,d3    ; 512 ou 1024
  1010.     subq #1,d3      ; 511  ou 1023 pour le and de l'angle
  1011.  
  1012.     lea bufferFlag,a3
  1013.     subq #1,d2      ; 511 ou 1023 iteration
  1014.     moveq #0,d4     ; angle
  1015. .loop
  1016.     tst.b (a3,d4)   ; flag a 1 ?
  1017.     bne.s .flagA1
  1018. .flagA0
  1019.     move.w d4,d5
  1020.     add d5,d5
  1021.     move.w (a0,d5),(a2)
  1022.     add d5,d5
  1023.     move.l a2,(a1,d5)           ; a2 referencer en reftable+angle*4
  1024.     addq.l #2,a2
  1025.     st (a3,d4)      positione flag(angle) a 1
  1026.     add d0,d4       ; pas interne
  1027.     and d2,d4       ; mod 512 ou 1022
  1028.     bra.s .loop
  1029. .flagA1 ; copier d1 fois les valeurs suivante
  1030.     move.w d4,d5        ; angle courant copier sur d5
  1031.     move.w d1,d7
  1032.     subq #1,d7
  1033. .cpy
  1034.     move.w d5,d6
  1035.     add d6,d6
  1036.     move.w (a0,d6),(a2)+
  1037.     add d0,d5  
  1038.     and d2,d5
  1039.     dbf d7,.cpy
  1040.    
  1041.     sub d0,d4
  1042.     addq #1,d4
  1043.     and d2,d4
  1044.     tst.b (a3,d4)
  1045.     bne.s .fin
  1046.     bra .flagA0
  1047. .fin
  1048.     rts
  1049.     endc
  1050.    
  1051.     DATA
  1052. sinwave:    incbin 'sinwave.dat'
  1053. circletable:
  1054.         ifeq CONFIG
  1055.         incbin 'cercle.dat'
  1056.         endc
  1057.         ifeq (CONFIG-1)
  1058.         incbin 'cerc512.dat'
  1059.         endc
  1060. curangle1   dc.w 0
  1061. curangle2   dc.w 2
  1062. curangle3   dc.w 10
  1063. curangle4   dc.w 100
  1064.  
  1065. cspot   dc.w 10
  1066.     dc.w 22
  1067. sspot   dc.w 60
  1068.     dc.w 40
  1069. cosinusSpot:    incbin 'cosinus'        ; 100+100*cos(angle de 0 a 511)
  1070. sinusSpot:  incbin 'sinus'
  1071.  
  1072. ;col0   equ $777 12  $653
  1073. colA    equ $750 $347
  1074. colB    equ $540 $236
  1075. colC    equ $320 $125
  1076. colD    equ $420 $014
  1077.  
  1078. col0    equ $11 775
  1079. col1    equ $7 17 colA
  1080. col2    equ $5 colB
  1081. col3    equ $3  colC
  1082. ;col4   equ $07 colD
  1083. col00   equ $0
  1084. ;palpatine  dc.l palplan3,palplan0,palplan0,palplan1,palplan1,palplan2,palplan2,palplan3
  1085. ;palplan0   dc.w col0,colA,colD,colA,colC,colA,colC,colA,colB,colA,colB,colA,colB,colA,colB,colA
  1086. ;palplan1   dc.w col0,colB,colA,colA,colD,colB,colA,colA,colC,colB,colA,colA,colC,colB,colA,colA
  1087. ;palplan2   dc.w col0,colC,colB,colB,colA,colA,colA,colA,colD,colC,colB,colC,colA,colA,colA,colA
  1088. ;palplan3   dc.w col0,colD,colC,colC,colB,colB,colB,colB,colA,colA,colA,colA,colA,colA,colA,colA
  1089.  
  1090. colA0   equ 0 $775 111
  1091. colAA   equ $700 27 730
  1092. colAB   equ $601 24
  1093. colAC   equ $302 30 320
  1094. palpatine   dc.l palplan0,palplan0,palplan1,palplan1,palplan2,palplan2
  1095. palplan0    dc.w col0,col1,col3,col1,col2,col1,col2,col1,colA0,colAA,colAC,colAA,colAB,colAA,colAB,colAA
  1096. palplan1    dc.w col0,col2,col1,col1,col3,col2,col1,col1,colA0,colAB,colAA,colAA,colAC,colAB,colAA,colAA
  1097. palplan2    dc.w col0,col3,col2,col2,col1,col1,col1,col1,colA0,colAC,colAB,colAB,colAA,colAA,colAA,colAA
  1098.  
  1099. PICTURE incbin 'PYRA.PI1'
  1100.  
  1101.  
  1102.     BSS
  1103.  
  1104. ptrscr
  1105.     ds.l 2
  1106.    
  1107. screen  ds.b 256
  1108.     ds.b 32000
  1109.     ds.b 32000
  1110.    
  1111.    
  1112.    
  1113.     ;ds.w 32000
  1114.     ;ds.w 32000
  1115.  
  1116. superScaleTable:    ds.w 200*NBCIRCLES      ;200*96 un peu moins de 40 000 octet
  1117.  
  1118. ******
  1119.  
  1120. realposition
  1121. buffer1         ds.w 512        ; 1.5k et on peut pas le metre dans memoire
  1122.     ifne standalone
  1123. bufferFlag      ds.b 512    ; parce que c'est utilisé en meme temps
  1124.     endc
  1125.     ifeq standalone
  1126.             ds.b 512
  1127.     endc
  1128.                 ;realposition:
  1129.                 ;ds.l 96
  1130.                 ;ds.w 96
  1131.        
  1132. calcsinbuffer   equ realposition+NBCIRCLES*6        ; ds.w 96
  1133.  
  1134. ********
  1135.  
  1136.  
  1137.  
  1138. lstptrcode  ds.l ANGLEWRAP*NBCIRCLES*16     ; 8*96*32
  1139. ; 16 adresse d'appel
  1140. ; puis 16 adresse ou il faut placer les rts
  1141. ; format: (adresse appel, adresse retour)*16
  1142. ;
  1143. refs1   ds.l 512
  1144. refs2   ds.l 512
  1145. refs3   ds.l 512
  1146. refs4   ds.l 512
  1147.  
  1148. convX2  ds.l 320
  1149. convY   ds.w 256
  1150. memoire ds.w 5000
  1151.  
  1152. convX   ds.l 320
  1153. lstor0  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1154. lstor1  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1155. lstor2  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1156. lstor3  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1157. lstor4  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1158. lstor5  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1159. lstor6  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1160. lstor7  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1161. lstor8  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1162. lstor9  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1163. lstorA  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1164. lstorB  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1165. lstorC  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1166. lstorD  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1167. lstorE  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1168. lstorF  ds.w NBDOTPERCIRCLE         ; max 32 point par cercle
  1169.  
  1170. lstorcount ds.w 16  ; compteur lstorX
  1171.     ds.l 768*3-320-NBDOTPERCIRCLE*8     ; a partir de memoire: 768*3 long reservé
  1172.  
  1173.  
  1174. bsscode ds.l NBDOTPERCIRCLE*ANGLEWRAP*NBCIRCLES     ; 96*32*8*2  256*96*2       ; 96 cercle de 256 or.w *2, version dep(a0) et dep+8(a0)
  1175.         ds.w ANGLEWRAP*NBCIRCLES*16     ; 8 'angle'*96 cercles * 32 add d0,d0
  1176.         ds.w ANGLEWRAP*NBCIRCLES
  1177.         ds.l ANGLEWRAP*NBCIRCLES        ; 8*96  ; jmp autototo2 = 6 octet rts
  1178. posSpot ds.l NBCIRCLES     
  1179. bsstileram  ds.b 23594     
  1180. buffertile  ds.w 16*256
  1181. oldpalette  ds.w 16
Add Comment
Please, Sign In to add comment