glokyfull

code11g work entirely ??

Mar 5th, 2024
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; sprite 16x16 2plan code by gloky 2024
  2.  
  3. subpixel equ 4
  4. subpixel2 equ 6
  5. nbbob   equ  62 75  74
  6. spr_pi1 equ 1
  7. tempmachine equ 1
  8. dbug    equ 0 1
  9. start:
  10.  
  11.  
  12.     ifne dbug
  13.  
  14.     clr.l -(sp)
  15.     move.w #$20,-(sp)
  16.     trap #1
  17.     addq.l #6,sp
  18.     endc
  19.  
  20.     ifeq dbug
  21.     jsr mjj_sys_init
  22.     endc
  23.     jsr prepare_segments
  24.  
  25.  
  26.  
  27.     lea sin1pack,a0
  28.     move.l sin512,a1
  29.     jsr depackperiod       
  30.  
  31.  
  32.     lea spritedeca,a0
  33.     move.w #16*2*16-1,d0
  34. .toto   clr.w (a0)+
  35.     dbf d0,.toto
  36.  
  37.     jsr extractsprite
  38.  
  39.  
  40. ; creation convx et convy
  41. ;   move.l #$8000,d0    ;     offset,motif or
  42. ;   lea convx,a0
  43. ;.loopconvx
  44. ;   rept subpixel
  45. ;     move.l d0,(a0)+
  46. ;   endr
  47. ;   lsr.w #1,d0
  48. ;   bne.s .loopconvx
  49. ;   add.l #$00088000,d0
  50. ;   cmp.l #$00a08000,d0
  51. ;   bne.s .loopconvx
  52. ;
  53. ;   move.w #0,d0
  54. ;   move.w #199,d1
  55. ;   lea convy,a0
  56. ;.loopconvy
  57. ;   rept subpixel
  58. ;   move.w d0,(a0)+
  59. ;   endr
  60. ;   add #160,d0
  61. ;   dbf d1,.loopconvy
  62. ;
  63.  
  64.     move.l ptrConvX,a0
  65.     lea codegenliste,a1
  66.     move.w #19,d0
  67.     moveq #0,d2
  68. .loop3
  69.     lea codegenliste,a1
  70.     lea codeeffliste,a3
  71.     moveq #15,d3
  72. .loop2
  73.     move.l (a3)+,d5
  74.     move.l (a1)+,d1
  75.     rept subpixel2
  76.     move.w d2,(a0)+     ; offset
  77.     move.l d5,(a0)+     ; code effacement
  78.     move.l d1,(a0)+     ; code affichage
  79.  
  80.     endr
  81.  
  82.     dbf d3,.loop2
  83.     addq.w #8,d2
  84.     dbf d0,.loop3
  85.  
  86.     move.l ptrConvY,a0
  87.     moveq #0,d2
  88.     move.w #160,d1
  89.     move.w #199,d0      ; pas de cliping pour l'instant
  90.     move.w #200*subpixel2,d7
  91.  
  92. .1  move.w d2,(a0)+
  93.     dbf d7,.1
  94.  
  95. .loop4
  96.     rept subpixel2
  97.     move.w d2,(a0)+
  98.     endr
  99.     add d1,d2
  100.     dbf d0,.loop4
  101.     jsr initcleartozerozero
  102.     jsr waitvbl
  103.     jsr swap_screen
  104.  
  105.     move.l #efface1lst,codecurefface
  106.     move.l log,d0
  107.     move.l d0,codelog
  108.     jsr convsinus
  109.     jmp main
  110. effaceallbob
  111.     move.l codelog,d1
  112.     move.l codecurefface,a6
  113.     move.w #nbbob-1,d6
  114.     moveq #0,d0
  115.     lea .bobo,a4
  116. .clear
  117.     move.w (a6)+,d1
  118.     move.l d1,a0
  119.     move.l (a6)+,a5
  120.     jmp (a5)
  121. .bobo
  122.     dbf d6,.clear
  123.     rts
  124.  
  125.     jsr waitvbl
  126. main
  127.     tst.w flagtransition
  128.     beq.s .11
  129.     jsr transfo1
  130. .11
  131.     move.l ptrscr1,d0
  132.  
  133.     add.l #160*16,d0
  134.  
  135.     lsr.w #8,d0
  136.     move.l d0,$ffff8200.w
  137.  
  138.     move.l #efface1lst,codecurefface
  139.     move.l ptrscr1,d0
  140.     move.l d0,codelog
  141.     move.l ptrscr1,log
  142.     jsr effaceallbob
  143.     jsr majAngle
  144.     jsr calcAllPos
  145.    
  146.     jsr waitvbl
  147.     tst.w flagtransition
  148.     beq.s .12
  149.     jsr transfo1
  150. .12
  151.  
  152.     move.l ptrscr2,d0
  153.  
  154.     add.l #160*16,d0
  155.     lsr.w #8,d0
  156.     move.l d0,$ffff8200.w
  157.  
  158.     move.l #efface2lst,codecurefface
  159.     move.l ptrscr2,d0
  160.     move.l d0,codelog
  161.     move.l ptrscr2,log
  162.  
  163.    
  164.     jsr effaceallbob
  165.     jsr majAngle
  166.     jsr calcAllPos
  167.     jsr waitvbl
  168.  
  169.     cmp.b #$b9,$fffffc02.w
  170.     beq.s .fin
  171.     jmp main
  172. .fin
  173.  
  174.     bsr waitvbl
  175.     move.l $44e.w,d0
  176.     lsr.w #8,d0
  177.     move.l d0,$ffff8200.w
  178.     bsr waitvbl
  179.     move.l $44e.w,d0  
  180.     move.w #1,-(sp)
  181.     move.l d0,-(sp)
  182.     move.l d0,-(sp)
  183.    move.w #5,-(sp)
  184.     trap #14
  185. ;
  186.     lea 12(sp),sp
  187.  
  188.    
  189.     move.w #$0,$ffff8240.w
  190.     MOVE.W #$777,D0
  191.     MOVE.W D0,$FFFF8242.W
  192.     move.w D0,$ffff825E.w
  193.     MOVE.W D0,$FFFF8244.W
  194.     MOVE.W D0,$FFFF8246.W
  195.     MOVE.W D0,$FFFF8248.W
  196.     MOVE.W D0,$FFFF824A.W
  197.     MOVE.W D0,$FFFF824C.W
  198.     MOVE.W D0,$FFFF824E.W
  199.     MOVE.W D0,$FFFF8250.W
  200.     MOVE.W D0,$FFFF8252.W
  201.     MOVE.W D0,$FFFF8254.W
  202.     MOVE.W D0,$FFFF8256.W
  203.     MOVE.W D0,$FFFF8258.W
  204.     MOVE.W D0,$FFFF825A.W
  205.     MOVE.W D0,$FFFF825C.W
  206.     ifeq dbug
  207.     jsr mjj_sys_fini   
  208.     endc
  209.     clr.w -(sp)
  210.     trap #1
  211.  
  212. initcleartozerozero
  213.     moveq #0,d0
  214.     move.l codeeffliste,d4
  215.     lea ptrlsteff,a2
  216.     moveq #2-1,d7
  217. xx4
  218.     move.w #nbbob-1,d6
  219.     move.l (a2)+,a3
  220. .clearall
  221.     move.w d0,(a3)+
  222.     move.l d4,(a3)+
  223.     dbf d6,.clearall
  224.  
  225.     dbf d7,xx4
  226.     rts
  227.  
  228.  
  229. majangle
  230.     lea ajoutangle,a0
  231.     lea angles,a1
  232.     moveq #3,d7
  233. .loop
  234.     move.w (a0)+,d0
  235.     move.w (a1),d1
  236.     add d0,d1
  237.     and.w #511,d1
  238.     move.w d1,(a1)+
  239.     dbf d7,.loop
  240.  
  241.     rts
  242.  
  243. convsinus
  244.     move.l sinx1,a1
  245.     move.l sinx2,a2
  246.     move.l sin512,a0
  247.     move.w #511,d0
  248.     move.w ptrconvX+2,d4
  249. .loop
  250.     moveq #0,d1
  251.     move.w (a0)+,d1
  252.     add.w #32767,d1
  253.  
  254.     move.l d1,d2
  255.     mulu #(160-8)*subpixel2,d1
  256.     mulu #(140-8)*subpixel2,d2   ; 8 subpixel
  257.     ;asl #1,d1
  258.     ;asl #1,d2
  259.     swap d1
  260.     add.w #5*subpixel2,d1   ; additionner 5 pixel a x
  261.     swap d2
  262. ; *10 = *8+*2 = *2(*4+1)
  263.  
  264.     add d1,d1
  265.     move.w d1,d3
  266.     add.w d3,d3 *4
  267.     add.w d3,d3
  268.     add d3,d1   ; d1 = d1 * 10
  269. ;   and.w #-4,d1
  270.  
  271. ;   and.w #-4,d2
  272.  
  273.     add d2,d2
  274.     move.w d2,d3
  275.     add d3,d3
  276.     add d3,d3
  277.     add d3,d2
  278.  
  279.     add d4,d1               ; premiere table de sinus, on ajoute l'offset de convX
  280.     move.w d1,(a1)+
  281.     move.w d2,(a2)+
  282.     dbf d0,.loop
  283.    
  284.  
  285.     move.w ptrConvY+2,d4
  286.     add.w #216*subpixel2*2,d4
  287.     move.l siny1,a1
  288.     move.l siny2,a2
  289.     move.l sin512,a0
  290.     move.w #511,d0
  291. .loopy
  292.     moveq #0,d1
  293.     move.w (a0)+,d1
  294.     add.w #32767,d1
  295.     move.l d1,d2
  296.     mulu #(80-8)*subpixel2*2,d1
  297.     mulu #(119-8)*subpixel2*2,d2
  298. ;   asl #1,d1
  299. ;   asl #1,d2
  300.     swap d1
  301.     swap d2
  302.     and.w #-2,d1
  303.     and.w #-2,d2
  304.     add d4,d1           ; ajoute l'offset segment
  305.     move.w d1,(a1)+
  306.     move.w d2,(a2)+
  307.     dbf d0,.loopy
  308.  
  309.  
  310. ; createContigustable
  311. ;
  312. ; a0 = ram
  313. ; d0 = nombre d'element de la table sinus
  314. ; d1 = pas interne
  315. ; d2 = nombre de copie de valeurs
  316. ; a3 = table de sinus d'amplitude final
  317. ;
  318. ; pendant le fonctionnement:
  319. ; constante  d3,d4,d5 = pas interne,*2,*4
  320. ;
  321. ;
  322. ;
  323.  
  324. ; retour:
  325. ; a0 = ram
  326. ; a1 = adresse table de d0 adresses  reftable pris a partir de la ram
  327. ;  
  328.  
  329. totoisback
  330.     move.l parametreInternStep,a6       ; le seul registre dispo
  331. .automodif
  332.     lea ram3,a0
  333.     move.w #512,d0
  334.     move.w #nbbob,d2 ; nombre de copie de valeur
  335.     move.w (a6)+,d1
  336.     ;move.w #512-13,d1      ; pas interne 5 /512
  337.     move.l sinx1,a3
  338.     jsr createContigustable
  339. .auto1  move.l a1,ptrref1
  340.  
  341.     move.w #512,d0
  342.     move.w (a6)+,d1
  343.     ;move.w #14,d1
  344.     move.w #nbbob,d2
  345.     move.l sinx2,a3
  346.     jsr createContigustable
  347. .auto2  move.l a1,ptrref2
  348.  
  349.     move.w #512,d0
  350.     move.w (a6)+,d1
  351.     ;move.w #512-16,d1
  352.     move.w #nbbob,d2
  353.     move.l siny1,a3
  354.     jsr createContigustable
  355. .auto3  move.l a1,ptrref3
  356.  
  357.     move.w #512,d0
  358.     ;   move.w #19,d1
  359.     move.w (a6)+,d1
  360.     move.w #nbbob,d2
  361.     move.l siny2,a3
  362.     jsr createContigustable
  363. .auto4  move.l a1,ptrref4
  364.  
  365.  
  366.     lea ajoutangle,a5
  367.     move.w (a6)+,(a5)+
  368.     move.w (a6)+,(a5)+
  369.     move.w (a6)+,(a5)+
  370.     move.w (a6)+,(a5)+
  371.     lea angles,a5
  372.     move.w #128,(a5)+
  373.     move.w #128,(a5)+
  374.     move.w #0,(a5)+
  375.     move.w #0,(a5)
  376.  
  377.     move.l a6,parametreInternStep
  378.     move.l (a6),d0
  379. tstt    cmp.l #$31415926,d0
  380.     bne.s .nolooop
  381.     move.l #fct,d0
  382.     move.l d0,parametreInternStep
  383. .nolooop
  384.  
  385. ;   lea .automodif+2,a0
  386. ;   move.l (a0),d0
  387. ;   cmp.l #ram3,d0
  388. ;   beq.s .modif1
  389. ;   move.l #ram3,(a0)
  390. ;   move.l #ptrref1,d1
  391. ;   move.l d1,.auto1+2
  392. ;   move.l #ptrref2,d1
  393. ;   move.l d1,.auto2+2
  394. ;   move.l #ptrref3,d1
  395. ;   move.l d1,.auto3+2
  396. ;   move.l #ptrref4,d1
  397. ;   move.l d1,.auto4+2
  398. ;
  399.     rts
  400. ;.modif1
  401. ;   move.l ptrscr3,d1   64k libre
  402. ;;  move.l d1,(a0)
  403. ;
  404. ;   move.l #ptrref5,d1
  405. ;   move.l d1,.auto1+2
  406. ;   move.l #ptrref6,d1
  407. ;   move.l d1,.auto2+2
  408. ;   move.l #ptrref7,d1
  409. ;   move.l d1,.auto3+2
  410. ;   move.l #ptrref8,d1
  411. ;   move.l d1,.auto4+2
  412. ;  
  413. ;   rts
  414.  
  415. parametreInternStep dc.l fct
  416.  
  417. fct dc.w 512-13,14,512-16,11
  418.        dc.w 3,4,7,6
  419.     dc.w 4,11,512-12,3
  420.        dc.w 9,512-13,17,6
  421.     dc.w 10,512-19,5,512-15
  422.        dc.w 2,4,1,3
  423.     dc.w 10,2,30,4
  424.        dc.w 4,9,5,8
  425.     dc.w 5,15,10,512-6
  426.        dc.w 10,9,11,7
  427.     dc.w 50,512-45,42,43
  428.     dc.w 3,5,2,1
  429.  
  430.     dc.w 10,9,8,11
  431.     dc.w 7,15,9,13
  432.  
  433.     dc.w 5,6,7,8
  434.     dc.w 9,10,11,12
  435.  
  436.     dc.w 50,512-59,512-47,43
  437.     dc.w 10,20,15,16
  438.    
  439.     dc.w 100,2,99,3
  440.     dc.w 2,13,3,15
  441.    
  442.     dc.w 200,5,207,512-6
  443.     dc.w 10,4,512-13,12
  444.  
  445.  
  446.  
  447.     dc.l $31415926
  448.  
  449.  
  450.  
  451. changefct
  452.     jmp totoisback
  453.     ; swap ptrref1..4 to ptrref5..8
  454. ;   lea ptrref1,a0
  455. ;   movem.l (a0),d0-d3
  456. ;   lea ptrref5,a1
  457. ;   movem.l (a1),d4-d7
  458. ;   movem.l d0-d3,(a1)
  459. ;   movem.l d4-d7,(a0)
  460. ;  
  461.     ;; to be continued
  462.        
  463.     ;rts
  464.  
  465.  
  466. ;superhackitVBL:            ; remplace it 70.w
  467. ;   addq.l #1,$466.w
  468. ;   movem.l d0-d7/a0-a6,-(sp)
  469. ;   lea (8+7)*4+2(sp),a0
  470. ;   move.l (a0),d0      ; adresse de retour de l'interuption
  471. ;   cmp.l #waitvbl,d0    d0-waitvbl>0   d0>waitvbl
  472. ;   bge.s .suitedutest
  473. ;  
  474. ;   jsr savejob
  475. ;
  476. ;   jmp .noprecalc
  477. ;.suitedutest
  478. ;   cmp.l #finwaitvbl,d0  d0-fin<0 d0<fin   ; en fait metre toute les routine
  479. ;                       ; qui calcul entre 2 adresse
  480. ;   bge.s .noprecalc   
  481. ;          
  482. ;   jsr savejob
  483. ;
  484. ;.noprecalc
  485. ;   movem.l (sp)+,d0-d7/a0-a6
  486. ;   rte
  487. ;savejob    move.l (a0),actualjob
  488. ;  
  489. ;
  490. calcAllpos
  491.     move.l ptrref1,a5
  492.     move.l ptrref2,a1
  493.     move.w ang1,d0
  494.     add d0,d0
  495.     add d0,d0
  496.     add.w d0,a5
  497.     move.w ang2,d0
  498.     add d0,d0
  499.     add.w d0,d0
  500.     add.w d0,a1
  501.  
  502.     move.l ptrref3,a2
  503.     move.l ptrref4,a3
  504.     move.w ang3,d0
  505.     add d0,d0
  506.     add d0,d0
  507.     add d0,a2
  508.     move.w ang4,d0
  509.     add d0,d0
  510.     add d0,d0
  511.     add d0,a3
  512.  
  513.     move.l (a5),a5
  514.     move.l (a1),a1
  515.     move.l (a2),a2
  516.     move.l (a3),a3
  517.  
  518.     move.l codecurefface,a4
  519.  
  520.     move.l ptrConvX,d0
  521.     move.l ptrConvY,d1
  522.     move.l log,d3
  523.  
  524.     move.w #nbbob-1,d2
  525.    
  526.     moveq #0,d4
  527.     move.w seuil,d5
  528.     move.l #brabrabra,d7
  529. loopcalcul
  530.  
  531.     move.w d5,d0
  532.     add.w (a2)+,d0
  533.     add.w (a3)+,d0
  534.  
  535.     move.l d0,a6
  536.     move.w (a6),d3          ;  y*160
  537.  
  538.     move.w (a5)+,d0
  539.     add.w (a1)+,d0
  540.  
  541.     move.l d0,a6
  542.     add.w (a6)+,d3
  543.     move.w d3,(a4)+         ; effacement offset
  544.     move.l (a6)+,(a4)+      ; routine d'effacement
  545.  
  546.     move.l (a6),a6          ; routine d'affichage
  547.     move.l d3,a0
  548.     exg.l d7,a4
  549.     jmp (a6)
  550. brabrabra
  551.     exg.l a4,d7
  552. ;   move.w d5,d0
  553. ;   add.w (a2)+,d0
  554. ;   add.w (a3)+,d0
  555. ;
  556. ;   move.l d0,a6
  557. ;   move.w (a6),d3          ;  y*160
  558. ;
  559. ;   move.w (a5)+,d0
  560. ;   add.w (a1)+,d0
  561. ;
  562. ;   move.l d0,a6
  563. ;   add.w (a6)+,d3
  564. ;   addq.w #4,d3
  565. ;   move.w d3,(a4)+         ; effacement offset
  566. ;   move.l (a6)+,(a4)+      ; routine d'effacement
  567. ;
  568. ;   move.l (a6),a6          ; routine d'affichage
  569. ;   move.l d3,a0
  570. ;
  571. ;   jsr (a6)
  572.     dbf d2,loopcalcul
  573.  
  574.    
  575.     lea ang1,a0
  576.     lea 8(a0),a1
  577.     movem.w (a1),d0-d3
  578.  
  579.     move.w (a0),d4
  580.     add.w d0,d4
  581.     move.w #511,d5
  582.     and d5,d4
  583.     move.w d4,(a0)+
  584.  
  585.     move.w (a0),d4
  586.     add.w d1,d4
  587.     and d5,d4
  588.     move.w d4,(a0)+
  589.  
  590.     move.w (a0),d4
  591.     add.w d2,d4
  592.     and d5,d4
  593.     move.w d4,(a0)+
  594.  
  595.     move.w (a0),d4
  596.     add.w d3,d4
  597.     and d5,d4
  598.     move.w d4,(a0)+
  599. ; maj angle fait
  600.  
  601.     rts
  602.  
  603. prepare_segments
  604.    
  605.     move.l #screenbuf,d0
  606.     moveq #2,d1
  607.     swap d1
  608.     jsr getmem1                 ; prepare 16 zone memoire allant de 32768 a 1 octet (puissance de 2)
  609.  
  610.     lea ptrMem,a0
  611.     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  
  612.  
  613. ;   move.l d3,sinX1         ; sinx1 x2 y1 y2 devenu des pointeur sur
  614.                             ; 512 word
  615. ;   move.l #1024,d5
  616. ;   add.l d5,d3
  617. ;   move.l d3,sinX2
  618. ;   add.l d5,d3
  619. ;   move.l d3,sinY1
  620. ;   add.l d5,d3
  621. ;   move.l d3,sinY2                 ; place pour 4k = 4 table de 512 word
  622.  
  623.  
  624.                                 ; cad poid fort de l'adresse du buffer est toujours a la meme valeur
  625.     move.l d0,ptrConvY          ; 32k alloué pour convy: 1856*2 en comptant cliping haut bas de 16 pixel de hauteur et 4 subpixel
  626.     add.l #2*subpixel2*400,d0
  627.     ; 30912 octet libre
  628.     move.l d0,ptrConvX  ; 12800 octet pour 320 pixel 4 subpixel 10 octet (adresseEFF,adresseAFF,offset)
  629.     add.l #320*subpixel2*10,d0      ; pile poil 4 subpixel  convy 232*8 subpixel*2 + 352*8 subpixel*10 octet
  630.     moveq #0,d4                 ; 31872 octet sur 32768
  631.     move.w #1024,d4
  632.     lea sinx1,a1
  633.     move.l d0,(a1)+
  634.     add.l d4,d0
  635.     move.l d0,(a1)+
  636.     add.l d4,d0
  637.     move.l d0,(a1)+
  638.     add.l d4,d0
  639.     move.l d0,(a1)+
  640.     add.l d4,d0
  641.     move.l d0,flagtab  
  642.  
  643.     move.l d1,ptr16k
  644.     move.l d2,ptrFlag           ; 8k max pour les flag, sinus dont le nombre d'element ne depasse pas 8192
  645.     move.l d3,ptr4k
  646.  
  647.     lea ptrMem+4*4,a0
  648.     movem.l (a0)+,d0-d3
  649.     move.l d0,ptrvariable
  650.     move.l d1,sin512
  651.    
  652.    
  653.  
  654.     move.l #screenbuf,d0
  655.     moveq #1,d1
  656.     swap d1
  657.     clr.w d0
  658.     move.l d0,log
  659.     move.l d0,ptrscr1
  660.     add.l d1,d0
  661.     move.l d0,phys
  662.     move.l d0,ptrscr2
  663.     add.l d1,d0
  664.     move.l d0,ptrscr3
  665.     add.l d1,d0
  666.     move.l d0,ptrscr4
  667.  
  668. ;   add.l d1,d0
  669. ;   move.l d0,convX
  670. ;   add.l #320*subpixel*8,d0
  671. ;   add.l d1,d0
  672. ;   move.l d0,convY
  673.  
  674.     rts
  675. timer1  dc.w 700
  676. waitvbl
  677.     subq.w #1,timer1
  678.     tst.w timer1
  679.     bne.s .titi
  680.     move.w #700,timer1
  681.     move.w #1,flagtransition
  682.    
  683.    
  684. .titi
  685.     ifne tempmachine
  686.     not.w $ffff8240.w
  687.     rept 60
  688.     nop
  689.     endr
  690.     not.w $ffff8240.w
  691.     endc
  692.  
  693.     move.w $468.w,d0
  694. .loop   cmp.w $468.w,d0
  695.     beq.s .loop
  696.     rts
  697. nowaitvbl
  698. swap_screen
  699.     move.l log,d0
  700.     move.l phys,d1
  701.     move.l d0,phys
  702.     move.l d1,log
  703.  
  704.     add.l #16*160,d1
  705.    
  706.     lsr.w #8,d1
  707.     move.l d1,$ffff8200.w
  708.     rts
  709.  
  710. extractsprite
  711.  
  712.     ifne spr_pi1
  713.  
  714.         lea pi1+2,a0
  715.         movem.w (a0),d0-d3
  716.         movem.w d0-d3,$ffff8240.w
  717.         lea pi1+34,a0  
  718.    
  719.         lea spritedeca,a1
  720.         moveq #0,d1
  721.         moveq #15,d7
  722. .loop0
  723.         move.l (a0),d0
  724.         lea 160(a0),a0
  725.         move.l d0,(a1)+
  726.         move.l d1,(a1)+
  727.         dbf d7,.loop0
  728.     endc
  729.  
  730.     ifeq spr_pi1
  731.         lea pal_and_sprite,a0
  732.         movem.w (a0)+,d0-d3
  733.         movem.w d0-d3,$ffff8240.w
  734.         addq.w #2,d0
  735.         addq.w #2,d1
  736.         addq.w #2,d2
  737.         addq.w #2,d3
  738.         movem.w d0-d3,$ffff8248.w
  739.         lea spritedeca,a1
  740.         moveq #0,d1
  741.         moveq #15,d7
  742. .loop000
  743.         move.l (a0)+,d0
  744.         move.l d0,(a1)+
  745.         move.l d1,(a1)+
  746.         dbf d7,.loop000
  747.     endc
  748.    
  749.  
  750.     moveq #14,d7
  751.     lea spritedeca,a1
  752.     move.l a1,a3
  753.     lea 128(a1),a2
  754.     move.l a2,a4
  755. .copyandshift
  756.     move.w #15,d6
  757. .ligne
  758.     MOVE.L (A1)+,(A2)+
  759.     MOVE.L (A1)+,(A2)+
  760.     LEA -8(A2),A2
  761.     MOVE.B #0,CCR
  762.     ROXR (A2)
  763.     ROXR 4(A2)
  764.     MOVE.B #0,CCR
  765.     ROXR 2(A2)
  766.     ROXR 6(a2)
  767.  
  768.     lea 8(a2),a2
  769.     dbf d6,.ligne
  770.     lea 128(a3),a3
  771.     lea 128(a4),a4
  772.     move.l a3,a1
  773.     move.l a4,a2
  774.  
  775. ;   lea 4(a2),a2
  776. ;   lea 4(a1),a1
  777.     dbf d7,.copyandshift
  778.    
  779. makecodegen
  780.     lea spritedeca,a0
  781.     lea ram,a1
  782.     lea codegenliste,a2
  783.     lea codeeffliste,a3
  784.     lea ram2,a4
  785.     moveq #15,d0
  786. .loopSprite
  787.     move.l a4,(a3)+
  788.     move.l a1,(a2)+
  789.     moveq #15,d1
  790.     moveq #0,d6     ; offset
  791. .loopligne
  792.     move.w (a0)+,d2
  793.     move.w (a0)+,d3
  794.     move.w (a0)+,d4
  795.     move.w (a0)+,d5
  796.     tst.w d2
  797.     bne.s .1
  798.     tst.w d3
  799.     beq.s .nerienfaire
  800.     ; or.w #d3,offset+2(a0)
  801.     move.w d3,d7
  802.     addq #2,d6
  803.     bsr orwd7d6_2
  804.     subq #2,d6
  805.    
  806.  
  807.  
  808.     bra.s .suite
  809. .1  ; d2 contient kekchose
  810.     tst.w d3
  811.     beq.s .wordd2
  812.     ; or.l #d2d3,offset(a0)
  813.     move.w d2,d7
  814.     swap d7
  815.     move.w d3,d7
  816.     bsr orld7d6
  817.     bra.s .suite
  818. .wordd2
  819.     ; or.w #d2,offset(a0)
  820.     move.w d2,d7
  821.     bsr orwd7d6
  822.     bra.s .suite
  823. .nerienfaire
  824.     nop
  825. .suite
  826.     tst.w d4
  827.     bne.s .2
  828.     tst.w d5
  829.     beq.s .nerienfaire2
  830.     ; or.w #d5,offset+8+2(a0)
  831.     move.w d5,d7
  832.     add.w #10,d6
  833.     bsr orwd7d6
  834.     sub.w #10,d6
  835.  
  836.  
  837.     bra.s .suite2  
  838. .2  tst.w d5
  839.     beq.s .wordd4
  840.     ; or.l #d4d5,offset+8(a0)
  841.     move.w d4,d7
  842.     swap d7
  843.     move.w d5,d7
  844.  
  845.     move.w d5,d3
  846.     move.w d4,d2
  847.     addq.w #8,d6
  848.     bsr orld7d6
  849.     subq #8,d6
  850.  
  851.     bra.s .suite2
  852. .wordd4
  853.     ; or.w #d4,offset+8(a0)
  854.     move.w d4,d7
  855.     addq #8,d6
  856.     bsr orwd7d6
  857.     subq #8,d6
  858.     bra.s .suite2
  859. .nerienfaire2
  860.     nop
  861. .suite2
  862.     add #160,d6
  863.     dbf d1,.loopligne
  864.     move.w #$4ed4,(a1)+ jmp (a4)
  865.     move.w #$4ed4,(a4)+
  866.     dbf d0,.loopSprite
  867.     rts
  868. orwd7d6
  869. ;   move.l d2,-(sp)
  870.     move.w d7,d2   ; plus besoin de d2
  871.     swap d2
  872.     move.w d7,d2
  873.     not.l d2
  874.  
  875.     tst.w d2
  876.     beq.s .move
  877.  
  878.     ; and.l d2,d6(a0)   02a8
  879.  
  880.     move.w #$02a8,(a1)+     ; + 8 octet au code genere
  881.     move.l d2,(a1)+
  882.     move.w d6,(a1)+
  883.  
  884.     bra.s .aa
  885. .move   ;move.w #$2144,(a1)+
  886.     ;move.w d6,(a1)+
  887.     move.w #$317c,(a1)+
  888.     move.w d7,(a1)+
  889.     move.w d6,(a1)+
  890.     move.w #$3144,(a1)+
  891.     move.w d6,(a1)
  892.     addq.w #2,(a1)+
  893.     bra.s .vv
  894. .aa
  895.     ;move.w #$317c,(a1)+
  896.     move.w #$68,(a1)+
  897.     move.w d7,(a1)+
  898.     move.w d6,(a1)+
  899. .vv
  900.     move.w #$2140,(a4)+     ; since it's masked on 2 plan, the clearing is long instead of word
  901.  
  902.     move.w d6,(A4)+         ; ($2140 instead of $3140) (move.l d0,d6(a0) instead of move.w d0,d6(a0))
  903.  
  904. ;   move.l (sp)+,d2
  905.     rts
  906. orwd7d6_2                   ; cas ou orwd7d6 mais sur le deuxieme plan, l'effacement se fait naturellement sur le premier plan
  907. ;   move.l d2,-(sp)
  908.  
  909. ;   move.L d7,D2
  910. ;   AND.L #$FF00FF00,D2
  911. ;   TST.W D2
  912. ;   BEQ.S .partieplus1
  913. ;   move.l d7,d2
  914. ;   and.l #$00FF00FF,d2
  915. ;   tst.w d2
  916. ;   beq.s .partieplus0
  917.  
  918.  
  919.  
  920.  
  921.     move.w d7,d2   ; plus besoin de d2
  922.     swap d2
  923.     move.w d7,d2
  924.     not.l d2
  925.     tst.w d2
  926.     beq.s .move
  927.     ; and.l d2,d6(a0)   02a8
  928.  
  929.     move.w #$02a8,(a1)+     ; + 8 octet au code genere
  930.     move.l d2,(a1)+
  931.     move.w d6,(a1)
  932.     subq.w #2,(a1)+
  933.     bra.s .aa
  934.  
  935. .move   ;move.w #$2144,(a1)+
  936.     ;move.w d6,(a1)
  937.     ;subq.w #2,(a1)+
  938.  
  939.     move.w #$3144,(a1)+
  940.     move.w d6,(a1)
  941.     subq.w #2,(a1)+
  942.  
  943.     move.w #$317c,(a1)+
  944.     move.w d7,(a1)+
  945.     move.w d6,(a1)+
  946.  
  947.     bra.s .vv
  948.  
  949. .aa
  950.     move.w #$68,(a1)+
  951.     move.w d7,(a1)+
  952.     move.w d6,(a1)+
  953.  
  954. .vv
  955.     move.w #$2140,(a4)+     ; since it's masked on 2 plan, the clearing is long instead of word
  956.  
  957.     move.w d6,(A4)          ; ($2140 instead of $3140) (move.l d0,d6(a0) instead of move.w d0,d6(a0))
  958.     subq.w #2,(a4)+         ; on and.l sur le plan 0 et 1 et pas 1 et 2
  959. ;   move.l (sp)+,d2
  960.     rts
  961. orld7d6
  962.     ; d7 = le data sur 2 plan
  963.     ;
  964.     move.L d7,D2
  965.     AND.L #$FF00FF00,D2
  966.     TST.l D2
  967.     bEQ.w .partieplus1
  968.     move.l d7,d2
  969.     and.l #$00FF00FF,d2
  970.     tst.l d2
  971.     beq.w .partieplus0
  972.  
  973.  
  974. ;   move.l d2,-(sp)
  975. ;   move.l d3,-(sp)
  976.     move.w d7,d2
  977.     swap d7
  978.     or.w d7,d2
  979.     swap d7     ; remet d7 a la bonne valeur
  980.     not.w d2
  981.     move.w d2,d3
  982.     swap d2
  983.     move.w d3,d2
  984.     ; d2.l = masque a partir des 2 valeur poid fort poid faible de d7
  985.  
  986.     tst.l d2
  987.     bne.s .aa
  988.  
  989.     ; and.l #0 remplacer par un move.l d4,dep(a0)
  990.     ;move.w #$2144,(a1)+
  991.     ;move.w d6,(a1)+
  992.  
  993.     move.w #$217c,(a1)+
  994.     move.l d7,(a1)+
  995.     move.w d6,(a1)+
  996.     bra.s .cc
  997.  
  998.     bra.s .bb
  999. .aa
  1000.     move.w #$02a8,(a1)+
  1001.     move.l d2,(a1)+
  1002.     move.w d6,(a1)+
  1003.                     ; + 8 octets
  1004. .bb
  1005.     move.w #$00A8,(a1)+
  1006.     move.l d7,(a1)+
  1007.     move.w d6,(a1)+
  1008. .cc
  1009.     move.w #$2140,(a4)+
  1010.     move.w d6,(a4)+
  1011.  
  1012. ;   ;move.l (sp)+,d3
  1013. ;   move.l (sp)+,d2
  1014.     rts
  1015. .value  dc.w 0,0
  1016. .partieplus1                ; 00AA00BB
  1017. ; la partie droite en movep.w
  1018.  
  1019.     move.w d7,d2
  1020.     swap d7
  1021.     or.w d7,d2
  1022.     swap d7     ; remet d7 a la bonne valeur
  1023. ;   d2= word or word bitmap = masque mais pas not masque
  1024.    
  1025.    
  1026.  
  1027.    
  1028.  
  1029.  
  1030.     move.l d7,d3
  1031.     swap d3
  1032.  
  1033.     lsl.w #8,d3 aa00
  1034.     or.w d3,d7  aabb        ; d7.w = 00aa00bb ->00xxaabb
  1035.     ;swap d7            aabb00aa
  1036.  
  1037. ;   move.w d2,D3            ; MASQUE 0008 00FF
  1038. ;   swap
  1039. ;   lsl.w #8,d2
  1040. ;   or.w d3,d2
  1041.    
  1042.     moveq #0,d3
  1043.     move.w d2,d3        ; $00FF or 00dd
  1044.         lsl.w #8,d3
  1045.     move.b d2,d3
  1046.     move.w d3,d2
  1047.    
  1048.     ;not.w d2
  1049.    
  1050.     tst.w d2
  1051.     beq.s .tomove2
  1052.     not.w d2
  1053.  
  1054.  
  1055. ; D2 = VALEUR AND
  1056. ; D7 = VALEUR OR
  1057.     MOVE.W #$0D08,(A1)+
  1058.     ADDQ.W #1,D6
  1059.     MOVE.W D6,(A1)+
  1060.     MOVE.W #$0246,(A1)+ ; AND.W ,D6
  1061.     MOVE.W D2,(A1)+
  1062.     MOVE.W #$0046,(A1)+
  1063.     MOVE.W D7,(A1)+
  1064.     MOVE.W #$0D88,(A1)+
  1065.     MOVE.W D6,(A1)+
  1066.     bra.s .suite7
  1067. .tomove2
  1068.     move.w #$3c3c,(a1)+ ; move.w #,d6
  1069.     move.w d7,(a1)+
  1070.     move.w #$0d88,(a1)+
  1071.     addq.w #1,d6
  1072.     move.w d6,(a1)+     ; movep d6 a0
  1073.    
  1074.  
  1075. .suite7
  1076.     MOVE.W #$2140,(A4)+
  1077.     SUBQ #1,D6
  1078.     MOVE.W D6,(A4)+
  1079.     RTS
  1080.  
  1081.    
  1082. .partieplus0
  1083. ; la partie gauche en movep.w
  1084.  
  1085.     move.w d7,d2
  1086.     swap d7
  1087.     or.w d7,d2
  1088.     swap d7     ; remet d7 a la bonne valeur
  1089.     ;not.w d2
  1090.  
  1091.     ;d7=aa00bb00
  1092.     ;d2=FF00FF00
  1093.  
  1094.     moveq #0,d3
  1095.     lsr.w #8,d7 aa00bb00 ->  aa00 00bb      ; d7=ff0000ff
  1096.     move.w d7,d3
  1097.     swap d7               00bb  0000
  1098.     or.w d7,d3      ; d7 =aa00aabb d7.w = 00aa00bb ->00xxaabb
  1099.     move.w d3,d7
  1100.     ; d3 =
  1101.  
  1102.     ;swap d7            aabb00aa
  1103.  
  1104.  
  1105.     move.w d2,D3            ; MASQUE 0088 0044  = 00CC
  1106.     lsr.w #8,d2 CC00
  1107.     OR.W D3,D2  CCCC            MASQUE  FFFF 2 PLAN
  1108.  
  1109. ; D2 = VALEUR AND
  1110. ; D7 = VALEUR OR
  1111.  
  1112.     ; d2.w
  1113.     ;not.w d2
  1114.  
  1115.     tst.w d2
  1116.     beq.s .tomove
  1117.     not.w d2
  1118.  
  1119.     MOVE.W #$0D08,(A1)+
  1120.     ;ADDQ.W #1,D6
  1121.     MOVE.W D6,(A1)+
  1122.     MOVE.W #$0246,(A1)+ ; AND.W ,D6
  1123.     MOVE.W D2,(A1)+
  1124.     MOVE.W #$0046,(A1)+
  1125.     MOVE.W D7,(A1)+
  1126.     MOVE.W #$0D88,(A1)+
  1127.     MOVE.W D6,(A1)+
  1128.     bra.S .suite5
  1129. .tomove
  1130.     move.w #$3c3c,(a1)+ move.w #$aabb,d6
  1131.     move.w d7,(a1)+
  1132.     move.w #$0D88,(a1)+ movep d6,dep(a0)
  1133.     move.w d6,(a1)+
  1134.  
  1135. .suite5
  1136.     MOVE.W #$2140,(A4)+
  1137.     MOVE.W D6,(A4)+
  1138.  
  1139.     rts
  1140.  
  1141. cpttransfo  dc.w 200/2-1
  1142. steptransfo dc.w -subpixel2*2*2
  1143. transfo1
  1144.     move.w steptransfo,d0
  1145.     add.w d0,seuil
  1146.     subq.w #1,cpttransfo
  1147.     tst cpttransfo
  1148.     bne.s .ok
  1149.     tst.w steptransfo
  1150.     bpl.s .stoptransition
  1151.     move.w #200/2-1,cpttransfo
  1152.     neg.w steptransfo
  1153.     jsr changefct
  1154.     rts
  1155.    
  1156. .stoptransition
  1157.     neg.w steptransfo
  1158.     move.w #200/2-1,cpttransfo
  1159.     move.w #700,timer1
  1160.     move.w #0,flagtransition
  1161. .ok rts
  1162.  
  1163. flagtransition  dc.w 0
  1164. createContigustable
  1165. ;
  1166. ; a0 = ram
  1167. ; d0 = nombre d'element de la table sinus
  1168. ; d1 = pas interne
  1169. ; d2 = nombre de copie de valeurs
  1170. ; a3 = table de sinus d'amplitude final
  1171. ;
  1172. ; pendant le fonctionnement:
  1173. ; constante  d3,d4,d5 = pas interne,*2,*4
  1174. ;
  1175. ;
  1176. ;
  1177.  
  1178. ; retour:
  1179. ; a0 = ram
  1180. ; a1 = adresse table de d0 adresses  reftable pris a partir de la ram
  1181. ;  
  1182.  
  1183.     ;movem.l d0-d3/a0-a6,-(sp)
  1184.    
  1185.     move.l flagtab,a2
  1186.     moveq #0,d3
  1187.     move.l d3,(a2)+
  1188.     move.l d3,(a2)+
  1189.     lea 512-8(a2),a2
  1190.     move.l d3,a4
  1191.     move.l d3,a5
  1192.     move.l d3,d4
  1193.     move.l d3,d5
  1194.     move.l d3,d6
  1195.     move.l d3,d7
  1196.  
  1197.     rept 18
  1198.     movem.l d3-d7/a4/a5,-(a2)   7 registre *4 = 28 octet 512/36=12 reste 8 octet
  1199.     endr
  1200.     SUBQ #8,a2          ; 36*14=504  512-504=8
  1201.  
  1202.  
  1203.     move.l a0,a1        ; a1 = table refsin
  1204.     move.l a1,-(sp)
  1205.     move.w d0,d3
  1206.     add.w d3,d3     ; *2
  1207.     move.l a3,a4
  1208.     add.w d3,a4
  1209.     add.w d3,d3     ; *4
  1210.     add.w d3,a0         ; a0 =ram
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.     ;move.l flagtab,a2
  1223.     move.l a2,a5
  1224.     add.w d0,a5
  1225.    
  1226.  
  1227.  
  1228.     moveq #0,d5         ; angle
  1229.    
  1230.     move.w d1,d3        ; pas interne<>0
  1231.     move.w d3,d4
  1232.     add d4,d4           ; pas interne*2
  1233.     move.w d4,d5
  1234.     add.w d5,d5         ; pas interne*4
  1235.     neg.w d0
  1236.     move.w d0,.auto1+2          ; nombre d'elements
  1237.     move.w d0,.auto1b+2
  1238.     add.w d0,d0
  1239.     move.w d0,.auto2+2
  1240.     move.w d0,.auto2b+2
  1241.     move.w d0,.auto2c+2
  1242.     add.w d0,d0
  1243.     move.w d0,.auto3+2
  1244.     move.w d0,.auto3b+2
  1245. ;----------------------------------------
  1246.     bra.s .loop
  1247. .loopaddq
  1248.     addq.w #2,a3
  1249.     addq.w #4,a1
  1250.     ; ps le tst.b (a2) deux ligne plus loin est redondant quand on sort de la boucle dans le code flaga1
  1251.     move.w (a3),d7
  1252.     bra.s .11
  1253. .loop
  1254.     move.w (a3),d7
  1255.     tst.b (a2)
  1256.     bne.s .flaga1
  1257. .11 st.b (a2)
  1258.     move.l a0,(a1)      ; on stoque l'adresse de la valeur dans table refsin
  1259.     move.w d7,(a0)+
  1260.     ; on met a jour a3 avec le pas interne*2
  1261.     ; on met a jour a2 avec le pas interne (flags)
  1262.     add.w d3,a2
  1263.     add.w d4,a3
  1264.     add.w d5,a1
  1265.  
  1266.     cmp.l a2,a5
  1267.     bgt.s .loop
  1268. .auto1
  1269.     lea 0(a2),a2
  1270. .auto2
  1271.     lea 0(a3),a3
  1272. .auto3
  1273.     lea 0(a1),a1
  1274.     bra.s .loop
  1275. .flaga1
  1276.     move.w d2,d6        ; nombre de coPIE
  1277.     subq.w #1,d6
  1278.     ;addq.w #1,d6
  1279.  
  1280.     move.l a3,-(sp)
  1281. .cpy
  1282.     move.w d7,(a0)+
  1283.     add.w d4,a3
  1284.     cmp.l a3,a4
  1285.     bgt.s .1
  1286. .auto2b
  1287.     lea 0(a3),a3
  1288.  
  1289. .1
  1290.     move.w (a3),d7
  1291.     dbf d6,.cpy
  1292.     move.l (sp)+,a3
  1293.  
  1294.     addq.w #1,a2
  1295.     cmp.l a2,a5
  1296.     bgt.s .2
  1297. .auto1b
  1298.     lea 0(a2),a2
  1299. .auto2c
  1300.     lea 0(a3),a3
  1301. .auto3b
  1302.     lea 0(a1),a1
  1303. .2
  1304.     ; s'assurer qu'on est pas en fin de tableau:
  1305.     ;
  1306.     ;
  1307.  
  1308.     tst.b (a2)
  1309.     beq.s .loopaddq
  1310. .fin
  1311.     move.l (sp)+,a1
  1312.  
  1313.     rts
  1314.  
  1315. ; depack periodictable
  1316. ; a0 = packed data
  1317. ; a1 = unpacked data
  1318. depackperiod
  1319.     lea extnibble,a2
  1320.  
  1321.     move.w (a0)+,d0     ; nombre d'element de la table finale
  1322.     move.w (a0)+,d1     ; tab[0]
  1323.     move.w (a0)+,d2     ; delta[0]=tab[1]-tab[0]
  1324.     move.w d0,d3
  1325.     subq #2,d3      ; nombre de delta de delta: delta2[0]=delta[1]-delta[0]
  1326.     lsr #1,d3
  1327. .ok
  1328.     subq #1,d3
  1329.     ;bset #0,d3         ; si paire = nb impair d'element on set a +1
  1330.                         ; si impair  nb pair d'lement on ne change rien
  1331.     move.w d1,(a1)+     ; tab[0]
  1332.    
  1333. .loop
  1334.     add d2,d1           ; tab[0]+delta[0]=tab[1]
  1335.     move.w d1,(a1)+
  1336.    
  1337.     move.b (a0)+,d4      lire 2 valeur
  1338.     move.w d4,d5
  1339.     and.w #$F0,d4
  1340.     lsr #4,d4
  1341.     move.b (a2,d4.w),d4
  1342.     ext.w d4
  1343.     add d4,d2           : delta2[0]=delta[1]-delta[0]  d2= delta[1]=tab[2]-tab[1]
  1344.    
  1345.     add d2,d1
  1346.     move.w d1,(a1)+
  1347.     and.w #$F,d5
  1348.     move.b (a2,d5.w),d5
  1349.     ext.w d5
  1350.     add d5,d2
  1351.  
  1352.     dbf d3,.loop
  1353.     add d2,d1
  1354.     move.w d1,(a1)+
  1355.     rts
  1356.  
  1357. ;
  1358. ;
  1359. ;
  1360. ; mem lib
  1361. ;
  1362.  
  1363. ;; exemple d'utilisation
  1364. ;   move.l #buffer,d0
  1365. ;   move.l #8*65536,d1 taille totale du buffer aligné sur 64k
  1366. ;   jsr getmem1
  1367. ;   lea -16*4(a0),a0
  1368. ;   nop
  1369. ;   nop
  1370. ;   nop
  1371. ;   nop
  1372. ;   illegal
  1373. ; format de memoire
  1374. ;toto           ; le label toto est la pour verifier l'algo
  1375. ;   ds.b 65536 
  1376. ;buffer ds.l 65536*2    8*64k               ; buffer sera aligné sur 64k donc un peu avant
  1377. ;fin                                            ; et apres un peu de memoire libre entre fin buffer et label fin
  1378.  
  1379. ; warning ! extremely bugged edition of getmem1 ! (i must add 128k of unused ram)
  1380. ;
  1381. getmem1:
  1382.  
  1383. ; d0 = adresse segment 64k non aligné
  1384. ; d1 = nombre de segment a la suite*64k
  1385. ; retour: a0 = liste d'adresse
  1386. ; (a0)+ = 32k buffer
  1387. ; (a0)+ = 16k buffer
  1388. ; (a0)+ = 8k buffer
  1389. ; (a0)+ = 4k buffer
  1390. ; (a0)+ = 2k
  1391. ; (a0)+ = 1k
  1392. ; (a0)+ = 512
  1393. ; (a0)+ = 256
  1394. ; (a0)+ = 128
  1395. ; (a0)+ = 64 octet
  1396. ;
  1397. ; a0: 64 octet = 16 adresses
  1398.  
  1399.     ; metre le buffer start dans d4
  1400.  
  1401.     moveq.w #1,d5
  1402.     swap d5
  1403.     move.l d0,d4
  1404.     sub.l d5,d4     ; start memoire basse
  1405.    
  1406.     move.l d0,d3
  1407.     clr.w d3        ;  debut multiple de 64k  fin memoire basse
  1408.     ; d3 = start segment
  1409.    
  1410.    
  1411.     move.l d4,d7
  1412.     sub.l d3,d7     ; d7 = taille en bas
  1413.    
  1414.    
  1415.     add.l d1,d3     ; d3+ 4*64k = adresse start haut
  1416.  
  1417.  
  1418.    
  1419.     lea ptrMem,a0
  1420.     moveq #0,d6
  1421.     move.w #$8000,d6
  1422.    
  1423. .loop
  1424.     move.w d6,d1
  1425.     and.w d7,d1
  1426.  
  1427.     ; bit 15 a 0 ?
  1428.     tst.w d1
  1429.     beq.s .before           ; was beq
  1430.     move.l d3,(a0)+
  1431.     add.l d6,d3
  1432.    
  1433.     bra.s .suite
  1434. .before
  1435.     move.l d4,(a0)+
  1436.     add.l d6,d4
  1437. .suite
  1438.     lsr.w #1,d6
  1439.     tst.w d6
  1440.     bne.s .loop         ; ici ca s'arrete a un buffer de 1 octet il faudrai faire un meilleur test
  1441.    
  1442.     lea -64(a0),a0                  ; et s'arreter a un plus gros buffer
  1443.     rts
  1444.        
  1445. extnibble   dc.b 0,1,2,3,4,5,6,7,$F8,$f9,$fa,$fb,$fc,$fd,$fe,$ff
  1446.     even
  1447.  
  1448.     include 'BASEROU2.S'
  1449.    
  1450.  
  1451.  
  1452.     DATA
  1453. codelog dc.l 0
  1454. cptdeca dc.w 0
  1455. angles  dc.w 128,128,50,70
  1456. ajoutangle  dc.w 6+256,23,512-12,7+256
  1457. ptrlsteff   dc.l efface1lst
  1458.             dc.l efface2lst
  1459.             ;dc.l efface3lst
  1460.             ;dc.l efface4lst
  1461.  
  1462. ang1    dc.w 128
  1463. ang2    dc.w 128
  1464. ang3    dc.w 10
  1465. ang4    dc.w 0
  1466. ajoutang1   dc.w 4
  1467. ajoutang2   dc.w 1
  1468. ajoutang3   dc.w 512-3
  1469. ajoutang4  dc.w 1
  1470.    
  1471. packed_sinus_table:
  1472.    
  1473. sin1pack
  1474.    dc.w 512  ; nombre d'element depack
  1475.     dc.w 0
  1476.     dc.w 402
  1477.  
  1478.     dc.b      0,241,240,240,240,240,224,255,254,14,13,14,254,239,238,253
  1479.     dc.b      253,253,239,207,221,252,238,206,222,206,206,205,221,220,220,235
  1480.     dc.b      221,204,205,204,205,189,189,189,188,203,219,203,203,218,204,188
  1481.     dc.b      187,203,203,187,202,218,188,187,187,202,203,187,187,187,202,202
  1482.     dc.b      202,203,187,187,187,202,203,187,188,186,218,203,187,203,203,188
  1483.     dc.b      188,202,219,203,203,219,204,189,189,189,189,204,205,204,205,219
  1484.     dc.b      236,220,221,221,206,206,206,222,206,236,253,223,207,237,253,253
  1485.     dc.b      254,239,238,254,13,14,14,255,240,224,240,240,240,241,240,0
  1486.     dc.b      0,31,16,16,16,16,32,17,18,2,3,2,18,33,34,19
  1487.     dc.b      19,19,33,65,51,20,34,66,50,66,66,67,51,52,52,37
  1488.     dc.b      51,68,67,68,67,83,83,83,84,69,53,69,69,54,68,84
  1489.     dc.b      85,69,69,85,70,54,84,85,85,70,69,85,85,85,70,70
  1490.     dc.b      70,69,85,85,85,70,69,85,84,86,54,69,85,69,69,84
  1491.     dc.b      84,70,53,69,69,53,68,83,83,83,83,68,67,68,67,53
  1492.     dc.b      36,52,51,51,66,66,66,50,66,36,19,49,65,35,19,19
  1493.     dc.b      18,33,34,18,3,2,2,17,16,32,16,16,16,31,16,0
  1494.     even
  1495.  
  1496.  
  1497.     ifne spr_pi1
  1498. pi1 incbin 'SPRITE6.PI1'
  1499.     endc
  1500.  
  1501. pal_and_sprite
  1502.     ifeq spr_pi1
  1503.       incbin 'PAS2.SPR'
  1504.    
  1505.     endc
  1506. ;   even
  1507.     DATA
  1508. seuil   dc.w segmenty
  1509.    
  1510.     BSS
  1511.         rsreset
  1512. segmentX    rs.w 1
  1513. segmentY    rs.w 1 
  1514. codecurefface   ds.l 1
  1515. ;tempbuffer ds.w 2048
  1516.  
  1517. sin512 ds.l 1
  1518.  
  1519. ptrMem      ds.l 16         ; dans ram apres l'appel de getmem1 adresses contenant les bloc memoire utilisable comme on veut
  1520.  
  1521. ;;;             ; les label entour? de ;;; doivent etre dans l'ordre et contigu (ne pas deplacer l'un des label)
  1522. ;ptrtabsin1 ds.l 1
  1523. ;ptrtabsin2 ds.l 1
  1524. ;ptrtabsin3 ds.l 1
  1525. ;ptrtabsin4 ds.l 1
  1526. ptr16k  ds.l 1
  1527. ptr4k   ds.l 1
  1528. ptrflag ds.l 1
  1529. ;;;
  1530.  
  1531.    
  1532.     ds.b 65536
  1533. screenbuf
  1534.     ds.w 65536
  1535.     ;ds.w 65536
  1536.    
  1537. log     ds.l 1
  1538. phys    ds.l 1
  1539. ptrscr1 ds.l 1
  1540. ptrscr2 ds.l 1
  1541. ptrscr3 ds.l 1
  1542. ptrscr4 ds.l 1
  1543.  
  1544.  
  1545. ;convx  ds.l 320*subpixel
  1546. ;convy  ds.w 200*subpixel
  1547. ptrvariable ds.l 1
  1548. ptrconvX ds.l 1
  1549. ptrconvY ds.l 1
  1550.  
  1551. sinx1   ds.l 1   *ds.w 512
  1552. sinx2   ds.l 1   *ds.w 512
  1553. siny1   ds.l 1   *ds.w 512
  1554. siny2   ds.l 1   *ds.w 512
  1555.  
  1556. flagtab ds.l 1
  1557.  
  1558. ptrref1 ds.l 1
  1559. ptrref2 ds.l 1
  1560. ptrref3 ds.l 1
  1561. ptrref4 ds.l 1
  1562.  
  1563. ptrref5 ds.l 1
  1564. ptrref6 ds.l 1
  1565. ptrref7 ds.l 1
  1566. ptrref8 ds.l 1
  1567.  
  1568.  
  1569. efface1lst
  1570.         ds.w nbbob*6
  1571. efface2lst
  1572.         ds.w nbbob*6
  1573. ;efface3lst
  1574. ;       ds.w nbbob*6
  1575. ;efface4lst
  1576. ;       ds.w nbbob*6
  1577.  
  1578.  
  1579. codegenliste    ds.l 16
  1580. codeeffliste    ds.l 16
  1581. ram ds.b ($b24dA-$b19f2)+2000
  1582.     ds.b 3000
  1583. ram2    ds.b 5000
  1584. ;   ds.l 5000
  1585. ram3    ds.b 16000
  1586.    
  1587. ;convxSprite    ds.l 320*2*subpixel
  1588.    
  1589.  
  1590. sprite  ds.w 32
  1591.  
  1592. spritedeca
  1593.     ds.w 128*16
  1594.  
  1595.  
Add Comment
Please, Sign In to add comment