glokyfull

code13.s don't work

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