Advertisement
glokyfull

sprite 2plan masked on 2 plans 16x16 pixel

Nov 14th, 2023 (edited)
1,166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. subpixel equ 4
  2.  
  3. start:
  4.  
  5.     clr.l -(sp)
  6.     move.w #$20,-(sp)
  7.     trap #1
  8.     addq.l #6,sp
  9.  
  10.     lea spritedeca,a0
  11.     move.w #16*2*16-1,d0
  12. .toto   clr.w (a0)+
  13.     dbf d0,.toto
  14.     move.l $44e.w,d0  
  15.  
  16.     clr.w -(sp)
  17.     move.l d0,-(sp)
  18.     move.l d0,-(sp)
  19.     move.w #5,-(sp)
  20.     trap #14
  21.     lea 12(sp),sp
  22.  
  23. ; init screen
  24.     move.l #screenbuf,d0
  25.     clr.w d0
  26.     move.l d0,d1
  27.     add.l #$10000,D1
  28.     MOVE.L D0,log
  29.     move.l d1,phys
  30.  
  31. ; creation convx et convy
  32.     move.l #$8000,d0    ; offset,motif or
  33.     lea convx,a0
  34. .loopconvx
  35.     rept subpixel
  36.       move.l d0,(a0)+
  37.     endr
  38.     lsr.w #1,d0
  39.     bne.s .loopconvx
  40.     add.l #$00088000,d0
  41.     cmp.l #$00a08000,d0
  42.     bne.s .loopconvx
  43.  
  44.     move.w #0,d0
  45.     move.w #199,d1
  46.     lea convy,a0
  47. .loopconvy
  48.     rept subpixel
  49.     move.w d0,(a0)+
  50.     endr
  51.     add #160,d0
  52.     dbf d1,.loopconvy
  53.  
  54.     jsr extractsprite
  55.  
  56.     lea convxSprite,a0
  57.     lea codegenliste,a1
  58.     move.w #19,d0
  59.     moveq #0,d2
  60. .loop3
  61.     lea codegenliste,a1
  62.     moveq #15,d3
  63. .loop2
  64.     rept subpixel
  65.     move.l (a1),d1
  66.     move.l d1,(a0)+
  67.     move.w d2,(a0)+
  68.     addq.w #2,a0
  69.     endr
  70.     addq.l #4,a1
  71.     dbf d3,.loop2
  72.     addq.w #8,d2
  73.     dbf d0,.loop3
  74.  
  75.     jsr convsinus
  76.    
  77. main
  78.  
  79.     jsr waitvbl
  80.     jsr swap_screen
  81.     move.l log,d0
  82.     add.w #0*160+80-8,d0
  83.    
  84. ;   lea spritedeca,a0
  85. ;   move.l d0,a1
  86. ;   move.w cptdeca,d1
  87. ;   mulu #128,d1
  88. ;   add d1,a0
  89. ;
  90. ;   move.w #15,d7  
  91. ;.copysprite
  92. ;   move.l (a0)+,(a1)
  93. ;   move.l (a0)+,8(a1)
  94. ;
  95. ;   lea 160(a1),a1
  96. ;   dbf d7,.copysprite
  97.  
  98.     lea codeeffliste,a5
  99.     move.w cptdeca,d2
  100.     subq #2,d2
  101.     and.w #$F,d2
  102.     add.w d2,d2
  103.     add.w d2,d2
  104.     add.w d2,a5
  105.     move.l (a5),a4
  106.     move.l d0,a0
  107.     move.l d0,-(sp)
  108.     moveq #0,d0
  109.     jsr (a4)
  110.     move.l (sp)+,d0
  111.  
  112.     lea codegenliste,a2
  113.     move.l d0,a0
  114.     move.w cptdeca,d2
  115.     add.w d2,d2
  116.     add.w d2,d2
  117.     add.w d2,a2
  118.  
  119.     move.l (a2),a4
  120.     jsr (a4)    ; le test ultime
  121.  
  122.  
  123.  
  124.     move.w cptdeca,d0
  125.     addq.w #1,d0
  126.     and.w #$F,d0
  127.     move.w d0,cptdeca
  128.  
  129.  
  130.     jsr majangle
  131.     lea convxSprite,a0
  132.     move.l #angles,a2
  133.     lea sinx1,a3
  134.     move.w (a2)+,d0
  135.     add.w d0,D0
  136.     move.w (a3,d0),d1
  137.     move.L #sinx2,a3
  138.     move.w (a2)+,d0
  139.     ADD D0,D0
  140.     ADD (A3,D0.w),D1
  141.     ADD D1,D1       ; *8
  142.     LEA (A0,D1),A4
  143.     MOVE.L (A4)+,A5
  144.     MOVE.L log,D0
  145.     MOVE.W (A4)+,D0
  146.  
  147.     lea siny1,a3
  148.     move.w (a2)+,d2
  149.     add.w d2,d2
  150.     move.w (a3,d2.w),d3  siny1
  151.     lea siny2,a3
  152.     move.w (a2)+,d2
  153.     add d2,d2
  154.     add.w (a3,d2.w),d3  siny2
  155.     lea convy,a0
  156.     move.w (a0,d3),d3  y*160
  157.     add.w d3,d0
  158.  
  159.     MOVE.L D0,A0
  160.     JSR (A5)
  161.    
  162.     cmp.b #$b9,$fffffc02.w
  163.     beq.s .fin
  164.     jmp main
  165. .fin
  166.  
  167.     move.l $44e.w,d0
  168.     lsr.w #8,d0
  169.     move.l d0,$ffff8200.w
  170.     bsr waitvbl
  171.     move.l $44e.w,d0  
  172.  
  173.     move.w #1,-(sp)
  174.  
  175.     move.l d0,-(sp)
  176.  
  177.     move.l d0,-(sp)
  178.  
  179.     move.w #5,-(sp)
  180.  
  181.     trap #14
  182.  
  183.     lea 12(sp),sp
  184.  
  185.    
  186.  
  187.     clr.w -(sp)
  188.     trap #1
  189.  
  190. cptdeca dc.w 0
  191. angles  dc.w 128,128,50,70
  192. ajoutangle  dc.w 14,7,512-11,6
  193.  
  194.  
  195. majangle
  196.     lea ajoutangle,a0
  197.     lea angles,a1
  198.     moveq #3,d7
  199. .loop
  200.     move.w (a0)+,d0
  201.     move.w (a1),d1
  202.     add d0,d1
  203.     and.w #511,d1
  204.     move.w d1,(a1)+
  205.     dbf d7,.loop
  206.  
  207.     rts
  208.  
  209. convsinus
  210.     lea sinx1,a1
  211.     lea sinx2,a2
  212.     lea sin512,a0
  213.     move.w #511,d0
  214. .loop
  215.     move.w (a0)+,d1
  216.     add.w #32767,d1
  217.     move.w d1,d2
  218.     mulu #(40*2-8)*subpixel*4,d1
  219.     mulu #(60*2-8)*subpixel*4,d2
  220.     ;asl #1,d1
  221.     ;asl #1,d2
  222.     swap d1
  223.     swap d2
  224.     and.w #-4,d1
  225.     and.w #-4,d2
  226.     move.w d1,(a1)+
  227.     move.w d2,(a2)+
  228.     dbf d0,.loop
  229.    
  230.     lea siny1,a1
  231.     lea siny2,a2
  232.     lea sin512,a0
  233.     move.w #511,d0
  234. .loopy
  235.     move.w (a0)+,d1
  236.     add.w #32767,d1
  237.     move.w d1,d2
  238.     mulu #(40*2-8)*subpixel*2,d1
  239.     mulu #(60*2-8)*subpixel*2,d2
  240. ;   asl #1,d1
  241. ;   asl #1,d2
  242.     swap d1
  243.     swap d2
  244.     and.w #-2,d1
  245.     and.w #-2,d2
  246.     move.w d1,(a1)+
  247.     move.w d2,(a2)+
  248.     dbf d0,.loopy
  249.  
  250.  
  251. ; createContigustable
  252. ;
  253. ; a0 = ram
  254. ; d0 = nombre d'element de la table sinus
  255. ; d1 = pas interne
  256. ; d2 = nombre de copie de valeurs
  257. ; a3 = table de sinus d'amplitude final
  258. ;
  259. ; pendant le fonctionnement:
  260. ; constante  d3,d4,d5 = pas interne,*2,*4
  261. ;
  262. ;
  263. ;
  264.  
  265. ; retour:
  266. ; a0 = ram
  267. ; a1 = adresse table de d0 adresses  reftable pris a partir de la ram
  268. ;  
  269.  
  270.     lea ram3,a0
  271.     move.w #512,d0
  272.     move.w #nbbob,d2 ; nombre de copie de valeur
  273.     move.w #5,d1        ; pas interne 5 /512
  274.     lea sinx1,a3
  275.     jsr createContigustable
  276.     move.l a1,ptrref1
  277.  
  278.     move.w #512,d0
  279.     move.w #10,d1
  280.     move.w #nbbob,d2
  281.     lea sinx2,a3
  282.     jsr createContigustable
  283.     move.l a1,ptrref2
  284.  
  285.     move.w #512,d0
  286.     move.w #6,d1
  287.     move.w #nbbob,d2
  288.     lea siny1,a3
  289.     jsr createContigustable
  290.     move.l a1,ptrref3
  291.  
  292.     move.w #512,d0
  293.     move.w #512-4,d1
  294.     move.w #nbbob,d2
  295.     lea siny2,a3
  296.     jsr createContigustable
  297.     move.l a1,ptrref4
  298.     rts
  299. ang1    dc.w 128
  300. ang2    dc.w 128
  301. ang3    dc.w 0
  302. ang4    dc.w 0
  303. ajoutang1   dc.w 4
  304. ajoutang2   dc.w 11
  305. ajoutang3   dc.w 512-8
  306. ajoutang4  dc.w 6
  307. calcAllpos
  308.     move.l ptrref1,a5
  309.     move.l ptrref2,a1
  310.     move.w ang1,d0
  311.     add d0,d0
  312.     add d0,d0
  313.     add.w d0,a5
  314.     move.w ang2,d0
  315.     add.w d0,d0
  316.     add.w d0,d0
  317.     add.w d0,a1
  318.  
  319.     move.l ptrref3,a2
  320.     move.l ptrref4,a3
  321.     move.w ang3,d0
  322.     add d0,d0
  323.     add d0,d0
  324.     add d0,a2
  325.     move.w ang4,d0
  326.     add d0,d0
  327.     add d0,d0
  328.     add d0,a3
  329.  
  330.     move.l (a5),a5
  331.     move.l (a1),a1
  332.     move.l (a2),a2
  333.     move.l (a3),a3
  334.  
  335.     move.w segmentX,d0
  336.     swap d0
  337.     move.w segmentY,d1
  338.     swap d1
  339.  
  340.     move.w #nbbob,d2
  341. .loopcalcul
  342.  
  343.     move.w (a5)+,d0
  344.     add.w (a1)+,d0
  345.     move.w (a2)+,d1
  346.     add (a3)+,d1
  347.  
  348.     move.l d1,a6
  349.     move.w (a6),d3          ;  y*160
  350.  
  351.     move.l d0,a6
  352.     add (a6)+,d3
  353.     move.w d3,(a4)+         ; effacement offset
  354.     move.l (a6)+,(a4)+      ; routine d'effacement
  355.  
  356.     move.l (a6),a6          ; routine d'affichage
  357.     move.l d3,a0
  358.  
  359.     jsr (a6)
  360.     dbf d7,.loopcalcul
  361.  
  362.     lea ang1,a0
  363.     lea 8(a0),a1
  364.     movem.w (a1),d0-d3
  365.  
  366.     move.w (a0),d4
  367.     add.w d0,d4
  368.     move.w #511,d5
  369.     and d5,d4
  370.     move.w d4,(a0)+
  371.  
  372.     move.w (a0),d4
  373.     add.w d1,d4
  374.     and d5,d4
  375.     move.w d4,(a0)+
  376.  
  377.     move.w (a0),d4
  378.     add.w d2,d4
  379.     and d5,d4
  380.     move.w d4,(a0)+
  381.  
  382.     move.w (a0),d4
  383.     add.w d3,d4
  384.     and d5,d4
  385.     move.w d4,(a0)+
  386. ; maj angle fait
  387.  
  388.     rts
  389.  
  390. prepare_segments
  391.  
  392.     move.l #screenbuf,d0
  393.     move.l #4*65536,d1
  394.     jsr getMem1                 ; prepare 16 zone memoire allant de 32768 a 1 octet (puissance de 2)
  395.  
  396.     move.l ptrMem,a0
  397.     movem.l (a0)+,d0-d3         ; 1 buffer de 32k un de 16k un de 8k un de 4k  pas aligné mais contigu au meme segment  
  398.                                 ; cad poid fort de l'adresse du buffer est toujours a la meme valeur
  399.     move.l d0,ptrConvX          ; 32k alloué pour convx
  400.     move.l d1,ptrConvY          ; 16k alloué pour convy
  401.     move.l d2,ptrFlag           ; 8k max pour les flag, sinus dont le nombre d'element ne depasse pas 8192
  402.     move.l d3,ptr
  403.  
  404.     move.l #screenbuf,d0
  405.     moveq #1,d1
  406.     swap d1
  407.     add.l d1,d0
  408.     clr.w d0
  409.     move.l d0,log
  410.     add.l d1,d0
  411.     move.l d0,phys
  412.     add.l d1,d0
  413.     move.l d0,convX
  414. ;   add.l #320*subpixel*8,d0
  415.     add.l d1,d0
  416.     move.l d0,convY
  417.  
  418.     rts
  419. waitvbl
  420.     move.w $468.w,d0
  421. .loop   cmp.w $468.w,d0
  422.     beq.s .loop
  423.     rts
  424.  
  425. swap_screen
  426.     move.l log,d0
  427.     move.l phys,d1
  428.     move.l d0,phys
  429.     move.l d1,log
  430.     lsr.w #8,d0
  431.     move.l d0,$ffff8200.w
  432.     rts
  433.  
  434. extractsprite
  435.     lea pi1+2,a0
  436.     movem.w (a0),d0-d3
  437.     movem.w d0-d3,$ffff8240.w
  438.     lea pi1+34,a0
  439.    
  440.     lea spritedeca,a1
  441.     moveq #0,d1
  442.     moveq #15,d7
  443. .loop0
  444.     move.l (a0),d0
  445.     lea 160(a0),a0
  446.     move.l d0,(a1)+
  447.     move.l d1,(a1)+
  448.     dbf d7,.loop0
  449.  
  450.     moveq #14,d7
  451.     lea spritedeca,a1
  452.     move.l a1,a3
  453.     lea 128(a1),a2
  454.     move.l a2,a4
  455. .copyandshift
  456.     move.w #15,d6
  457. .ligne
  458. ;   rept 2
  459. ;   move.w (a1)+,d0
  460. ;   move.w 2(a1),d1
  461. ;   move.w #0,ccr       ; set x to 0
  462. ;   roxr #1,d0
  463. ;   roxr #1,d1
  464. ;   move.w d0,(a2)+
  465. ;   move.w d1,2(a2)
  466. ;   ;lea 2(a1),a1
  467. ;   ;lea 2(a2),a2
  468. ;   endr
  469.  
  470.     MOVE.L (A1)+,(A2)+
  471.     MOVE.L (A1)+,(A2)+
  472.     LEA -8(A2),A2
  473.     MOVE.B #0,CCR
  474.     ROXR (A2)
  475.     ROXR 4(A2)
  476.     MOVE.B #0,CCR
  477.     ROXR 2(A2)
  478.     ROXR 6(a2)
  479.  
  480.     lea 8(a2),a2
  481.     dbf d6,.ligne
  482.     lea 128(a3),a3
  483.     lea 128(a4),a4
  484.     move.l a3,a1
  485.     move.l a4,a2
  486.  
  487. ;   lea 4(a2),a2
  488. ;   lea 4(a1),a1
  489.     dbf d7,.copyandshift
  490.    
  491. makecodegen
  492.     lea spritedeca,a0
  493.     lea ram,a1
  494.     lea codegenliste,a2
  495.     lea codeeffliste,a3
  496.     lea ram2,a4
  497.     moveq #15,d0
  498. .loopSprite
  499.     move.l a4,(a3)+
  500.     move.l a1,(a2)+
  501.     moveq #15,d1
  502.     moveq #0,d6     ; offset
  503. .loopligne
  504.     move.w (a0)+,d2
  505.     move.w (a0)+,d3
  506.     move.w (a0)+,d4
  507.     move.w (a0)+,d5
  508.     tst.w d2
  509.     bne.s .1
  510.     tst.w d3
  511.     beq.s .nerienfaire
  512.     ; or.w #d3,offset+2(a0)
  513.     move.w d3,d7
  514.     addq #2,d6
  515.     bsr orwd7d6
  516.     subq #2,d6
  517.    
  518.  
  519.  
  520.     bra.s .suite
  521. .1  ; d2 contient kekchose
  522.     tst.w d3
  523.     beq.s .wordd2
  524.     ; or.l #d2d3,offset(a0)
  525.     move.w d2,d7
  526.     swap d7
  527.     move.w d3,d7
  528.     bsr orld7d6
  529.     bra.s .suite
  530. .wordd2
  531.     ; or.w #d2,offset(a0)
  532.     move.w d2,d7
  533.     bsr orwd7d6
  534.     bra.s .suite
  535. .nerienfaire
  536.     nop
  537. .suite
  538.     tst.w d4
  539.     bne.s .2
  540.     tst.w d5
  541.     beq.s .nerienfaire2
  542.     ; or.w #d5,offset+8+2(a0)
  543.     move.w d5,d7
  544.     add.w #10,d6
  545.     bsr orwd7d6
  546.     sub.w #10,d6
  547.  
  548.  
  549.     bra.s .suite2  
  550. .2  tst.w d5
  551.     beq.s .wordd4
  552.     ; or.l #d4d5,offset+8(a0)
  553.     move.w d4,d7
  554.     swap d7
  555.     move.w d5,d7
  556.     addq.w #8,d6
  557.     bsr orld7d6
  558.     subq #8,d6
  559.  
  560.     bra.s .suite2
  561. .wordd4
  562.     ; or.w #d4,offset+8(a0)
  563.     move.w d4,d7
  564.     addq #8,d6
  565.     bsr orwd7d6
  566.     subq #8,d6
  567.     bra.s .suite2
  568. .nerienfaire2
  569.     nop
  570. .suite2
  571.     add #160,d6
  572.     dbf d1,.loopligne
  573.     move.w #$4e75,(a1)+
  574.     move.w #$4e75,(a4)+
  575.     dbf d0,.loopSprite
  576.     rts
  577. orwd7d6
  578. ;   move.l d2,-(sp)
  579.     move.w d7,d2   ; plus besoin de d2
  580.     swap d2
  581.     move.w d7,d2
  582.     not.l d2
  583.  
  584.     ; and.l d2,d6(a0)   02a8
  585.  
  586.     move.w #$02a8,(a1)+     ; + 8 octet au code genere
  587.     move.l d2,(a1)+
  588.     move.w d6,(a1)+
  589.  
  590.  
  591.     move.w #$68,(a1)+
  592.     move.w d7,(a1)+
  593.     move.w d6,(a1)+
  594.  
  595.     move.w #$2140,(a4)+     ; since it's masked on 2 plan, the clearing is long instead of word
  596.     move.w d6,(A4)+         ; ($2140 instead of $3140) (move.l d0,d6(a0) instead of move.w d0,d6(a0))
  597.  
  598. ;   move.l (sp)+,d2
  599.     rts
  600. orld7d6
  601.     ; d7 = le data sur 2 plan
  602.     ;
  603.  
  604. ;   move.l d2,-(sp)
  605. ;   move.l d3,-(sp)
  606.     move.w d7,d2
  607.     swap d7
  608.     or.w d7,d2
  609.     swap d7     ; remet d7 a la bonne valeur
  610.     not.w d2
  611.     move.w d2,d3
  612.     swap d2
  613.     move.w d3,d2
  614.     ; d2.l = masque a partir des 2 valeur poid fort poid faible de d7
  615.  
  616.     move.w #$02a8,(a1)+
  617.     move.l d2,(a1)+
  618.     move.w d6,(a1)+             ; + 8 octets
  619.  
  620.     move.w #$A8,(a1)+
  621.     move.l d7,(a1)+
  622.     move.w d6,(a1)+
  623.  
  624.     move.w #$2140,(a4)+
  625.     move.w d6,(a4)+
  626.  
  627. ;   ;move.l (sp)+,d3
  628. ;   move.l (sp)+,d2
  629.  
  630.     rts
  631.    
  632.     BSS
  633.     ds.b 65536
  634. screenbuf
  635.     ds.w 65536
  636.     ds.w 65536
  637. log ds.l 1
  638. phys    ds.l 1
  639.  
  640. convx   ds.l 320*subpixel
  641. convy   ds.w 200*subpixel
  642.  
  643.     BSS
  644. nbbob   equ 20
  645.  
  646. efface1lst
  647.         ds.l nbbob
  648.         ds.l nbbob
  649. efface2lst
  650.         ds.l nbbob
  651.         ds.l nbbob
  652.  
  653.  
  654. sinx1   ds.w 512
  655. sinx2   ds.w 512
  656. siny1   ds.w 512
  657. siny2   ds.w 512
  658.  
  659. ptrref1 ds.l 1
  660. ptrref2 ds.l 1
  661. ptrref3 ds.l 1
  662. ptrref4 ds.l 1
  663.  
  664.  
  665. codegenliste    ds.l 16
  666. codeeffliste    ds.l 16
  667. ram ds.b ($b24dA-$b19f2)+2000
  668.     ds.l 5000
  669. ram2    ds.l 5000
  670.     ds.l 5000
  671. ram3    ds.l 16000
  672.    
  673. convxSprite ds.l 320*2*subpixel
  674.    
  675.  
  676. sprite  ds.w 32
  677.  
  678. spritedeca
  679.     ds.w 128*16
  680.  
  681.  
  682.     DATA
  683. sin512:         ; sin 512 element amplitude 32766
  684.     dc.w 0,402,804,1206,1607,2009,2410,2811
  685.     dc.w 3211,3611,4010,4409,4807,5205,5601,5997
  686.     dc.w 6392,6786,7179,7570,7961,8350,8739,9125
  687.     dc.w 9511,9895,10278,10659,11038,11416,11792,12166
  688.     dc.w 12539,12909,13278,13644,14009,14371,14731,15090
  689.     dc.w 15445,15799,16150,16498,16845,17188,17529,17868
  690.     dc.w 18203,18536,18866,19194,19518,19840,20158,20474
  691.     dc.w 20786,21095,21401,21704,22004,22300,22593,22882
  692.     dc.w 23169,23451,23730,24006,24278,24546,24810,25071
  693.     dc.w 25328,25581,25830,26076,26317,26555,26788,27018
  694.     dc.w 27243,27465,27682,27895,28104,28308,28509,28705
  695.     dc.w 28897,29084,29267,29445,29620,29789,29954,30115
  696.     dc.w 30271,30423,30570,30712,30850,30983,31112,31236
  697.     dc.w 31355,31469,31579,31683,31784,31879,31969,32055
  698.     dc.w 32136,32212,32283,32349,32411,32467,32519,32566
  699.     dc.w 32608,32645,32677,32704,32726,32743,32756,32763
  700.     dc.w 32766,32763,32756,32743,32726,32704,32677,32645
  701.     dc.w 32608,32566,32519,32467,32411,32349,32283,32212
  702.     dc.w 32136,32055,31969,31879,31784,31683,31579,31469
  703.     dc.w 31355,31236,31112,30983,30850,30712,30570,30423
  704.     dc.w 30271,30115,29954,29789,29620,29445,29267,29084
  705.     dc.w 28897,28705,28509,28308,28104,27895,27682,27465
  706.     dc.w 27243,27018,26788,26555,26317,26076,25830,25581
  707.     dc.w 25328,25071,24810,24546,24278,24006,23730,23451
  708.     dc.w 23169,22882,22593,22300,22004,21704,21401,21095
  709.     dc.w 20786,20474,20158,19840,19518,19194,18866,18536
  710.     dc.w 18203,17868,17529,17188,16845,16498,16150,15799
  711.     dc.w 15445,15090,14731,14371,14009,13644,13278,12909
  712.     dc.w 12539,12166,11792,11416,11038,10659,10278,9895
  713.     dc.w 9511,9125,8739,8350,7961,7570,7179,6786
  714.     dc.w 6392,5997,5601,5205,4807,4409,4010,3611
  715.     dc.w 3211,2811,2410,2009,1607,1206,804,402
  716.     dc.w 0,-402,-804,-1206,-1607,-2009,-2410,-2811
  717.     dc.w -3211,-3611,-4010,-4409,-4807,-5205,-5601,-5997
  718.     dc.w -6392,-6786,-7179,-7570,-7961,-8350,-8739,-9125
  719.     dc.w -9511,-9895,-10278,-10659,-11038,-11416,-11792,-12166
  720.     dc.w -12539,-12909,-13278,-13644,-14009,-14371,-14731,-15090
  721.     dc.w -15445,-15799,-16150,-16498,-16845,-17188,-17529,-17868
  722.     dc.w -18203,-18536,-18866,-19194,-19518,-19840,-20158,-20474
  723.     dc.w -20786,-21095,-21401,-21704,-22004,-22300,-22593,-22882
  724.     dc.w -23169,-23451,-23730,-24006,-24278,-24546,-24810,-25071
  725.     dc.w -25328,-25581,-25830,-26076,-26317,-26555,-26788,-27018
  726.     dc.w -27243,-27465,-27682,-27895,-28104,-28308,-28509,-28705
  727.     dc.w -28897,-29084,-29267,-29445,-29620,-29789,-29954,-30115
  728.     dc.w -30271,-30423,-30570,-30712,-30850,-30983,-31112,-31236
  729.     dc.w -31355,-31469,-31579,-31683,-31784,-31879,-31969,-32055
  730.     dc.w -32136,-32212,-32283,-32349,-32411,-32467,-32519,-32566
  731.     dc.w -32608,-32645,-32677,-32704,-32726,-32743,-32756,-32763
  732.     dc.w -32766,-32763,-32756,-32743,-32726,-32704,-32677,-32645
  733.     dc.w -32608,-32566,-32519,-32467,-32411,-32349,-32283,-32212
  734.     dc.w -32136,-32055,-31969,-31879,-31784,-31683,-31579,-31469
  735.     dc.w -31355,-31236,-31112,-30983,-30850,-30712,-30570,-30423
  736.     dc.w -30271,-30115,-29954,-29789,-29620,-29445,-29267,-29084
  737.     dc.w -28897,-28705,-28509,-28308,-28104,-27895,-27682,-27465
  738.     dc.w -27243,-27018,-26788,-26555,-26317,-26076,-25830,-25581
  739.     dc.w -25328,-25071,-24810,-24546,-24278,-24006,-23730,-23451
  740.     dc.w -23169,-22882,-22593,-22300,-22004,-21704,-21401,-21095
  741.     dc.w -20786,-20474,-20158,-19840,-19518,-19194,-18866,-18536
  742.     dc.w -18203,-17868,-17529,-17188,-16845,-16498,-16150,-15799
  743.     dc.w -15445,-15090,-14731,-14371,-14009,-13644,-13278,-12909
  744.     dc.w -12539,-12166,-11792,-11416,-11038,-10659,-10278,-9895
  745.     dc.w -9511,-9125,-8739,-8350,-7961,-7570,-7179,-6786
  746.     dc.w -6392,-5997,-5601,-5205,-4807,-4409,-4010,-3611
  747.     dc.w -3211,-2811,-2410,-2009,-1607,-1206,-804,-402
  748. sin896:     ; sin 896 element amplitude 32766
  749.     dc.w 0,229,459,689,918,1148,1378,1607
  750.     dc.w 1837,2066,2295,2524,2753,2982,3211,3440
  751.     dc.w 3668,3896,4124,4352,4580,4807,5034,5261
  752.     dc.w 5488,5714,5941,6166,6392,6617,6842,7066
  753.     dc.w 7291,7514,7738,7961,8184,8406,8628,8849
  754.     dc.w 9070,9291,9511,9731,9950,10168,10387,10604
  755.     dc.w 10821,11038,11254,11470,11685,11899,12113,12326
  756.     dc.w 12539,12750,12962,13173,13383,13592,13801,14009
  757.     dc.w 14216,14423,14629,14834,15038,15242,15445,15648
  758.     dc.w 15849,16050,16250,16449,16647,16845,17041,17237
  759.     dc.w 17432,17626,17819,18012,18203,18394,18584,18772
  760.     dc.w 18960,19147,19333,19518,19702,19885,20067,20249
  761.     dc.w 20429,20608,20786,20963,21139,21314,21488,21661
  762.     dc.w 21833,22004,22174,22342,22510,22676,22841,23006
  763.     dc.w 23169,23330,23491,23651,23809,23967,24123,24278
  764.     dc.w 24431,24584,24735,24885,25034,25182,25328,25473
  765.     dc.w 25617,25760,25901,26041,26180,26317,26454,26589
  766.     dc.w 26722,26854,26985,27115,27243,27370,27496,27620
  767.     dc.w 27743,27865,27985,28104,28221,28337,28452,28565
  768.     dc.w 28677,28788,28897,29004,29110,29215,29318,29420
  769.     dc.w 29521,29620,29717,29813,29908,30001,30093,30183
  770.     dc.w 30271,30359,30444,30528,30611,30692,30772,30850
  771.     dc.w 30927,31002,31076,31148,31218,31287,31355,31421
  772.     dc.w 31485,31548,31609,31669,31727,31784,31839,31892
  773.     dc.w 31944,31994,32043,32090,32136,32180,32222,32263
  774.     dc.w 32303,32340,32376,32411,32444,32475,32505,32533
  775.     dc.w 32559,32584,32608,32629,32650,32668,32685,32700
  776.     dc.w 32714,32726,32737,32745,32753,32758,32762,32765
  777.     dc.w 32766,32765,32762,32758,32753,32745,32737,32726
  778.     dc.w 32714,32700,32685,32668,32650,32629,32608,32584
  779.     dc.w 32559,32533,32505,32475,32444,32411,32376,32340
  780.     dc.w 32303,32263,32222,32180,32136,32090,32043,31994
  781.     dc.w 31944,31892,31839,31784,31727,31669,31609,31548
  782.     dc.w 31485,31421,31355,31287,31218,31148,31076,31002
  783.     dc.w 30927,30850,30772,30692,30611,30528,30444,30359
  784.     dc.w 30271,30183,30093,30001,29908,29813,29717,29620
  785.     dc.w 29521,29420,29318,29215,29110,29004,28897,28788
  786.     dc.w 28677,28565,28452,28337,28221,28104,27985,27865
  787.     dc.w 27743,27620,27496,27370,27243,27115,26985,26854
  788.     dc.w 26722,26589,26454,26317,26180,26041,25901,25760
  789.     dc.w 25617,25473,25328,25182,25034,24885,24735,24584
  790.     dc.w 24431,24278,24123,23967,23809,23651,23491,23330
  791.     dc.w 23169,23006,22841,22676,22510,22342,22174,22004
  792.     dc.w 21833,21661,21488,21314,21139,20963,20786,20608
  793.     dc.w 20429,20249,20067,19885,19702,19518,19333,19147
  794.     dc.w 18960,18772,18584,18394,18203,18012,17819,17626
  795.     dc.w 17432,17237,17041,16845,16647,16449,16250,16050
  796.     dc.w 15849,15648,15445,15242,15038,14834,14629,14423
  797.     dc.w 14216,14009,13801,13592,13383,13173,12962,12750
  798.     dc.w 12539,12326,12113,11899,11685,11470,11254,11038
  799.     dc.w 10821,10604,10387,10168,9950,9731,9511,9291
  800.     dc.w 9070,8849,8628,8406,8184,7961,7738,7514
  801.     dc.w 7291,7066,6842,6617,6392,6166,5941,5714
  802.     dc.w 5488,5261,5034,4807,4580,4352,4124,3896
  803.     dc.w 3668,3440,3211,2982,2753,2524,2295,2066
  804.     dc.w 1837,1607,1378,1148,918,689,459,229
  805.     dc.w 0,-229,-459,-689,-918,-1148,-1378,-1607
  806.     dc.w -1837,-2066,-2295,-2524,-2753,-2982,-3211,-3440
  807.     dc.w -3668,-3896,-4124,-4352,-4580,-4807,-5034,-5261
  808.     dc.w -5488,-5714,-5941,-6166,-6392,-6617,-6842,-7066
  809.     dc.w -7291,-7514,-7738,-7961,-8184,-8406,-8628,-8849
  810.     dc.w -9070,-9291,-9511,-9731,-9950,-10168,-10387,-10604
  811.     dc.w -10821,-11038,-11254,-11470,-11685,-11899,-12113,-12326
  812.     dc.w -12539,-12750,-12962,-13173,-13383,-13592,-13801,-14009
  813.     dc.w -14216,-14423,-14629,-14834,-15038,-15242,-15445,-15648
  814.     dc.w -15849,-16050,-16250,-16449,-16647,-16845,-17041,-17237
  815.     dc.w -17432,-17626,-17819,-18012,-18203,-18394,-18584,-18772
  816.     dc.w -18960,-19147,-19333,-19518,-19702,-19885,-20067,-20249
  817.     dc.w -20429,-20608,-20786,-20963,-21139,-21314,-21488,-21661
  818.     dc.w -21833,-22004,-22174,-22342,-22510,-22676,-22841,-23006
  819.     dc.w -23169,-23330,-23491,-23651,-23809,-23967,-24123,-24278
  820.     dc.w -24431,-24584,-24735,-24885,-25034,-25182,-25328,-25473
  821.     dc.w -25617,-25760,-25901,-26041,-26180,-26317,-26454,-26589
  822.     dc.w -26722,-26854,-26985,-27115,-27243,-27370,-27496,-27620
  823.     dc.w -27743,-27865,-27985,-28104,-28221,-28337,-28452,-28565
  824.     dc.w -28677,-28788,-28897,-29004,-29110,-29215,-29318,-29420
  825.     dc.w -29521,-29620,-29717,-29813,-29908,-30001,-30093,-30183
  826.     dc.w -30271,-30359,-30444,-30528,-30611,-30692,-30772,-30850
  827.     dc.w -30927,-31002,-31076,-31148,-31218,-31287,-31355,-31421
  828.     dc.w -31485,-31548,-31609,-31669,-31727,-31784,-31839,-31892
  829.     dc.w -31944,-31994,-32043,-32090,-32136,-32180,-32222,-32263
  830.     dc.w -32303,-32340,-32376,-32411,-32444,-32475,-32505,-32533
  831.     dc.w -32559,-32584,-32608,-32629,-32650,-32668,-32685,-32700
  832.     dc.w -32714,-32726,-32737,-32745,-32753,-32758,-32762,-32765
  833.     dc.w -32766,-32765,-32762,-32758,-32753,-32745,-32737,-32726
  834.     dc.w -32714,-32700,-32685,-32668,-32650,-32629,-32608,-32584
  835.     dc.w -32559,-32533,-32505,-32475,-32444,-32411,-32376,-32340
  836.     dc.w -32303,-32263,-32222,-32180,-32136,-32090,-32043,-31994
  837.     dc.w -31944,-31892,-31839,-31784,-31727,-31669,-31609,-31548
  838.     dc.w -31485,-31421,-31355,-31287,-31218,-31148,-31076,-31002
  839.     dc.w -30927,-30850,-30772,-30692,-30611,-30528,-30444,-30359
  840.     dc.w -30271,-30183,-30093,-30001,-29908,-29813,-29717,-29620
  841.     dc.w -29521,-29420,-29318,-29215,-29110,-29004,-28897,-28788
  842.     dc.w -28677,-28565,-28452,-28337,-28221,-28104,-27985,-27865
  843.     dc.w -27743,-27620,-27496,-27370,-27243,-27115,-26985,-26854
  844.     dc.w -26722,-26589,-26454,-26317,-26180,-26041,-25901,-25760
  845.     dc.w -25617,-25473,-25328,-25182,-25034,-24885,-24735,-24584
  846.     dc.w -24431,-24278,-24123,-23967,-23809,-23651,-23491,-23330
  847.     dc.w -23169,-23006,-22841,-22676,-22510,-22342,-22174,-22004
  848.     dc.w -21833,-21661,-21488,-21314,-21139,-20963,-20786,-20608
  849.     dc.w -20429,-20249,-20067,-19885,-19702,-19518,-19333,-19147
  850.     dc.w -18960,-18772,-18584,-18394,-18203,-18012,-17819,-17626
  851.     dc.w -17432,-17237,-17041,-16845,-16647,-16449,-16250,-16050
  852.     dc.w -15849,-15648,-15445,-15242,-15038,-14834,-14629,-14423
  853.     dc.w -14216,-14009,-13801,-13592,-13383,-13173,-12962,-12750
  854.     dc.w -12539,-12326,-12113,-11899,-11685,-11470,-11254,-11038
  855.     dc.w -10821,-10604,-10387,-10168,-9950,-9731,-9511,-9291
  856.     dc.w -9070,-8849,-8628,-8406,-8184,-7961,-7738,-7514
  857.     dc.w -7291,-7066,-6842,-6617,-6392,-6166,-5941,-5714
  858.     dc.w -5488,-5261,-5034,-4807,-4580,-4352,-4124,-3896
  859.     dc.w -3668,-3440,-3211,-2982,-2753,-2524,-2295,-2066
  860.     dc.w -1837,-1607,-1378,-1148,-918,-689,-459,-229
  861.  
  862.  
  863.  
  864. pi1 incbin 'SPRITE2.PI1'
  865.  
  866.     TEXT
  867. createContigustable
  868. ;
  869. ; a0 = ram
  870. ; d0 = nombre d'element de la table sinus
  871. ; d1 = pas interne
  872. ; d2 = nombre de copie de valeurs
  873. ; a3 = table de sinus d'amplitude final
  874. ;
  875. ; pendant le fonctionnement:
  876. ; constante  d3,d4,d5 = pas interne,*2,*4
  877. ;
  878. ;
  879. ;
  880.  
  881. ; retour:
  882. ; a0 = ram
  883. ; a1 = adresse table de d0 adresses  reftable pris a partir de la ram
  884. ;  
  885.  
  886.     move.l a0,a1        ; a1 = table refsin
  887.     move.w d0,d3
  888.     add.w d3,d3     ; *2
  889.     move.l a3,a4
  890.     add d3,a4
  891.     add.w d3,d3     ; *4
  892.     add.w d3,a0         ; a0 =ram
  893.  
  894.  
  895.  
  896.     lea tempbuffer,a2
  897.     move.w d0,d4
  898.     lsr #2,d4
  899.     moveq #0,d3
  900. .clearFlag
  901.     move.l d3,(a2)+
  902.     dbf d4,.clearFlag   ; +- 4 octet
  903.  
  904.     lea tempbuffer,a2
  905.     move.l a2,a5
  906.     add.w d0,a5
  907.     add.w d0,a5         ; a5 = fin tempbuffer
  908.  
  909.  
  910.     ;moveq #0,d5            ; angle
  911.    
  912.     move.w d1,d3        ; pas interne<>0
  913.     move.w d3,d4
  914.     add d4,d4           ; pas interne*2
  915.     move.w d4,d5
  916.     add.w d5,d5         ; pas interne*4
  917.     neg.w d0
  918.     move.w d0,.auto1+2          ; nombre d'elements
  919.     move.w d0,.auto1b+2
  920.     add.w d0,d0
  921.     move.w d0,.auto2+2
  922.     move.w d0,.auto2b+2
  923.     add.w d0,d0
  924.     move.w d0,.auto3+2
  925. ;----------------------------------------
  926.     bra.s .loop
  927. .loopaddq
  928.     addq.w #2,a3
  929.     addq.w #4,a1
  930.     ; ps le tst.b (a2) deux ligne plus loin est redondant quand on sort de la boucle dans le code flaga1
  931.     move.w (a3),d7
  932.     bra.s .11
  933. .loop
  934.     move.w (a3),d7
  935.     tst.b (a2)
  936.     bne.s .flaga1
  937. .11 st.b (a2)
  938.     move.l a0,(a1)      ; on stoque l'adresse de la valeur dans table refsin
  939.     move.w d7,(a0)+
  940.     ; on met a jour a3 avec le pas interne*2
  941.     ; on met a jour a2 avec le pas interne (flags)
  942.     add.w d3,a2
  943.     add.w d4,a3
  944.     add.w d5,a1
  945.  
  946.     cmp.l a2,a5
  947.     blt.s .loop
  948. .auto1
  949.     lea 0(a2),a2
  950. .auto2
  951.     lea 0(a3),a3
  952. .auto3
  953.     lea 0(a1),a1
  954.     bra.s .loop
  955. .flaga1
  956.     move.w d2,d6        ; nombre de copie
  957.     subq.w #1,d6
  958.  
  959.     move.l a3,-(sp)
  960. .cpy
  961.     move.w d7,(a0)+
  962.     add.w d4,a3
  963.     cmp.l a3,a4
  964.     blt.s .1
  965. .auto2b
  966.     lea 0(a3),a3
  967.  
  968. .1
  969.     move.w (a3),d7
  970.     dbf d6,.cpy
  971.     move.l (sp)+,a3
  972.  
  973.     addq.w #1,a2
  974.     cmp.l a2,a5
  975.     blt.s .2
  976. .auto1b
  977.     lea 0(a2),a2
  978.  
  979. .2
  980.     ; s'assurer qu'on est pas en fin de tableau:
  981.     ;
  982.     ;
  983.  
  984.     ;addq.w #2,a3
  985.     ;addq.w #4,a1
  986.     tst.b (a2)
  987.     beq.s .loopaddq
  988. .fin
  989.     rts
  990.     BSS
  991. segmentX    ds.w 1
  992. segmentY    ds.w 1
  993. tempbuffer
  994.     ds.w 2048
  995.  
  996.     TEXT
  997. ;
  998. ;
  999. ;
  1000. ; mem lib
  1001. ;
  1002.  
  1003. ;; exemple d'utilisation
  1004. ;   move.l #buffer,d0
  1005. ;   move.l #8*65536,d1 taille totale du buffer aligné sur 64k
  1006. ;   jsr getmem1
  1007. ;   lea -16*4(a0),a0
  1008. ;   nop
  1009. ;   nop
  1010. ;   nop
  1011. ;   nop
  1012. ;   illegal
  1013. ; format de memoire
  1014. ;toto           ; le label toto est la pour verifier l'algo
  1015. ;   ds.b 65536 
  1016. ;buffer ds.l 65536*2    8*64k               ; buffer sera aligné sur 64k donc un peu avant
  1017. ;fin                                            ; et apres un peu de memoire libre entre fin buffer et label fin
  1018.  
  1019. getmem1:
  1020.  
  1021. ; d0 = adresse segment 64k non aligné
  1022. ; d1 = nombre de segment a la suite*64k
  1023. ; retour: a0 = liste d'adresse
  1024. ; (a0)+ = 32k buffer
  1025. ; (a0)+ = 16k buffer
  1026. ; (a0)+ = 8k buffer
  1027. ; (a0)+ = 4k buffer
  1028. ; (a0)+ = 2k
  1029. ; (a0)+ = 1k
  1030. ; (a0)+ = 512
  1031. ; (a0)+ = 256
  1032. ; (a0)+ = 128
  1033. ; (a0)+ = 64 octet
  1034. ;
  1035. ; a0: 64 octet = 16 adresses
  1036.  
  1037.  
  1038.     moveq.l #1,d3
  1039.     swap d3         d3 = 64k
  1040.     move.l d0,d2
  1041.     clr.w d2
  1042.     ; d2 = adresse buffer aligné sur 64k
  1043.     move.l d2,d4
  1044.     add.l d1,d4         = d1 = nombre multiple de 64k
  1045.    
  1046.    
  1047.    
  1048.     ; entre d2 et d4 la zone de 64k*x aligné sur la page 64k
  1049.     ; d2<=d0<=d4<=d4+d0.w
  1050.    
  1051.    
  1052.     lea ptrMem,a0
  1053.     moveq #0,d5
  1054.     move.w #$8000,d5
  1055.    
  1056.     move.l d0,d7
  1057.     sub.l d3,d7         ; d7 = adresse 64k non aligné en bas
  1058.    
  1059.    
  1060. .loop
  1061.     move.w d5,d6
  1062.     and.w d0,d6
  1063.     ; bit 15 a 0 ?
  1064.     beq.s .before
  1065.     move.l d4,(a0)+         ; d4 = fin du buffer
  1066.     add.l d5,d4             ; ajoute 32k a d4 pour la prochaine fois
  1067.     bra.s .suite
  1068. .before
  1069.     move.l d7,(a0)+
  1070.     add.l d5,d7
  1071. .suite
  1072.     lsr #1,d5
  1073.     bne.s .loop         ; ici ca s'arrete a un buffer de 1 octet il faudrai faire un meilleur test
  1074.                         ; et s'arreter a un plus gros buffer
  1075.     rts
  1076.    
  1077.    
  1078.  
  1079.     BSS
  1080. ptrMem      ds.l 16         ; dans ram apres l'appel de getmem1 adresses contenant les bloc memoire utilisable comme on veut
  1081.  
  1082.  
  1083.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement