Advertisement
glokyfull

working version of sprite 2Plan masked

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